1 /* 2 * Copyright 2014-2022 The GmSSL Project. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the License); you may 5 * not use this file except in compliance with the License. 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 */ 9 10 11 #ifndef GMSSL_X509_STR_H 12 #define GMSSL_X509_STR_H 13 14 15 #include <time.h> 16 #include <string.h> 17 #include <stdint.h> 18 #include <stdlib.h> 19 #include <gmssl/sm2.h> 20 #include <gmssl/oid.h> 21 #include <gmssl/asn1.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* 28 DirectoryString or DirectoryName 29 30 DirectoryName ::= CHOICE { 31 teletexString TeletexString (SIZE (1..MAX)), 32 printableString PrintableString (SIZE (1..MAX)), 33 universalString UniversalString (SIZE (1..MAX)), 34 utf8String UTF8String (SIZE (1..MAX)), 35 bmpString BMPString (SIZE (1..MAX)), 36 } 37 */ 38 int x509_directory_name_check(int tag, const uint8_t *d, size_t dlen); 39 int x509_directory_name_check_ex(int tag, const uint8_t *d, size_t dlen, size_t minlen, size_t maxlen); 40 int x509_directory_name_to_der(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); 41 int x509_directory_name_from_der(int *tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); 42 int x509_explicit_directory_name_to_der(int index, int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); 43 int x509_explicit_directory_name_from_der(int index, int *tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); 44 int x509_directory_name_print(FILE *fp, int fmt, int ind, const char *label, int tag, const uint8_t *d, size_t dlen); 45 46 47 /* 48 DisplayText ::= CHOICE { 49 ia5String IA5String (SIZE (1..200)), 50 visibleString VisibleString (SIZE (1..200)), 51 bmpString BMPString (SIZE (1..200)), 52 utf8String UTF8String (SIZE (1..200)) 53 } 54 */ 55 #define X509_DISPLAY_TEXT_MIN_LEN 1 56 #define X509_DISPLAY_TEXT_MAX_LEN 200 57 58 int x509_display_text_check(int tag, const uint8_t *d, size_t dlen); 59 int x509_display_text_to_der(int tag, const uint8_t *d, size_t dlen, uint8_t **out, size_t *outlen); 60 int x509_display_text_from_der(int *tag, const uint8_t **d, size_t *dlen, const uint8_t **in, size_t *inlen); 61 int x509_display_text_print(FILE *fp, int fmt, int ind, const char *label, int tag, const uint8_t *d, size_t dlen); 62 63 64 #ifdef __cplusplus 65 } 66 #endif 67 #endif 68