37 #ifndef _SharkSslASN1_h
38 #define _SharkSslASN1_h
45 #include "SharkSslEx.h"
53 #define SHARKSSL_ASN1_BOOLEAN 0x01
54 #define SHARKSSL_ASN1_INTEGER 0x02
55 #define SHARKSSL_ASN1_BIT_STRING 0x03
56 #define SHARKSSL_ASN1_OCTET_STRING 0x04
57 #define SHARKSSL_ASN1_NULL 0x05
58 #define SHARKSSL_ASN1_OID 0x06
59 #define SHARKSSL_ASN1_UTF8_STRING 0x0C
60 #define SHARKSSL_ASN1_SEQUENCE 0x10
61 #define SHARKSSL_ASN1_SET 0x11
62 #define SHARKSSL_ASN1_PRINTABLE_STRING 0x13
63 #define SHARKSSL_ASN1_T61_STRING 0x14
64 #define SHARKSSL_ASN1_IA5_STRING 0x16
65 #define SHARKSSL_ASN1_UTC_TIME 0x17
66 #define SHARKSSL_ASN1_GENERALIZED_TIME 0x18
67 #define SHARKSSL_ASN1_BMP_STRING 0x1E
68 #define SHARKSSL_ASN1_CONSTRUCTED 0x20
69 #define SHARKSSL_ASN1_CONTEXT_SPECIFIC 0x80
74 #define SHARKSSL_OID_JIIT_DS 0x55
75 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE 0x04
76 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_CN 0x03
77 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_SERIAL 0x05
78 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_COUNTRY 0x06
79 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_LOCALITY 0x07
80 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_PROVINCE 0x08
81 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_ORGANIZATION 0x0A
82 #define SHARKSSL_OID_JIIT_DS_ATTRTYPE_UNIT 0x0B
86 #define SHARKSSL_OID_JIIT_DS_CERTEXT 0x1D
87 #define SHARKSSL_OID_JIIT_DS_CERTEXT_KEYUSAGE 0x0F
88 #define SHARKSSL_OID_JIIT_DS_CERTEXT_SUBJALTNAMES 0x11
89 #define SHARKSSL_OID_JIIT_DS_CERTEXT_BASICCONSTRAINTS 0x13
96 #define SHARKSSL_CSR_TAG_ATTRIBUTES 0x00
103 #define SHARKSSL_X509_TAG_VERSION 0x00
104 #define SHARKSSL_X509_TAG_ISSUERUNIQUEID 0x01
105 #define SHARKSSL_X509_TAG_SUBJECTUNIQUEID 0x02
106 #define SHARKSSL_X509_TAG_EXTENSIONS 0x03
112 #define SHARKSSL_ECC_PRIVKEY_TAG_PARAMETERS 0x00
113 #define SHARKSSL_ECC_PRIVKEY_TAG_PUBLIC_KEY 0x01
118 #define SHARKSSL_X509_KU_DIGITAL_SIGNATURE 0x80
119 #define SHARKSSL_X509_KU_NON_REPUDIATION 0x40
120 #define SHARKSSL_X509_KU_KEY_ENCIPHERMENT 0x20
121 #define SHARKSSL_X509_KU_DATA_ENCIPHERMENT 0x10
122 #define SHARKSSL_X509_KU_KEY_AGREEMENT 0x08
123 #define SHARKSSL_X509_KU_KEY_CERT_SIGN 0x04
124 #define SHARKSSL_X509_KU_CRL_SIGN 0x02
130 #define SHARKSSL_X509_NS_CERT_TYPE_SSL_CLIENT 0x80
131 #define SHARKSSL_X509_NS_CERT_TYPE_SSL_SERVER 0x40
132 #define SHARKSSL_X509_NS_CERT_TYPE_OBJECT_SIGNING 0x10
133 #define SHARKSSL_X509_NS_CERT_TYPE_SSL_CA 0x04
134 #define SHARKSSL_X509_NS_CERT_TYPE_OBJECT_SIGNING_CA 0x01
142 extern const U8 sharkssl_oid_CN[3];
143 extern const U8 sharkssl_oid_serial[3];
144 extern const U8 sharkssl_oid_country[3];
145 extern const U8 sharkssl_oid_locality[3];
146 extern const U8 sharkssl_oid_province[3];
147 extern const U8 sharkssl_oid_organization[3];
148 extern const U8 sharkssl_oid_unit[3];
149 extern const U8 sharkssl_oid_emailAddress[9];
150 extern const U8 sharkssl_oid_csr_ext_req[9];
151 extern const U8 sharkssl_oid_signedData[9];
152 extern const U8 sharkssl_oid_ns_cert_type[9];
153 extern const U8 sharkssl_oid_key_usage[3];
154 extern const U8 sharkssl_oid_san[3];
155 extern const U8 sharkssl_oid_basic_constraints[3];
156 extern const U8 sharkssl_oid_ecPublicKey[7];
157 extern const U8 sharkssl_oid_prime192v1[8];
158 extern const U8 sharkssl_oid_prime256v1[8];
159 extern const U8 sharkssl_oid_ecdsaWithSHA1[7];
160 extern const U8 sharkssl_oid_ecdsaWithSHA256[8];
161 extern const U8 sharkssl_oid_ecdsaWithSHA384[8];
162 extern const U8 sharkssl_oid_ecdsaWithSHA512[8];
163 extern const U8 sharkssl_oid_secp224r1[5];
164 extern const U8 sharkssl_oid_secp384r1[5];
165 extern const U8 sharkssl_oid_secp521r1[5];
166 extern const U8 sharkssl_oid_brainpoolP256r1[9];
167 extern const U8 sharkssl_oid_brainpoolP384r1[9];
168 extern const U8 sharkssl_oid_brainpoolP512r1[9];
169 extern const U8 sharkssl_oid_rsaEncryption[9];
170 extern const U8 sharkssl_oid_md2withRSAEncryption[9];
171 extern const U8 sharkssl_oid_md5withRSAEncryption[9];
172 extern const U8 sharkssl_oid_sha1withRSAEncryption[9];
173 extern const U8 sharkssl_oid_sha256withRSAEncryption[9];
174 extern const U8 sharkssl_oid_sha384withRSAEncryption[9];
175 extern const U8 sharkssl_oid_sha512withRSAEncryption[9];
176 extern const U8 sharkssl_oid_md5[8];
177 extern const U8 sharkssl_oid_sha1[5];
178 extern const U8 sharkssl_oid_sha256[9];
179 extern const U8 sharkssl_oid_sha384[9];
180 extern const U8 sharkssl_oid_sha512[9];
181 extern const U8 sharkssl_oid_pkcs5PBES2[9];
182 extern const U8 sharkssl_oid_pkcs5PBKDF2[9];
183 extern const U8 sharkssl_oid_HMACWithSHA256[8];
184 #if SHARKSSL_ENABLE_AES_CBC
185 extern const U8 sharkssl_oid_aes128cbc[9];
186 extern const U8 sharkssl_oid_aes256cbc[9];
190 #define sharkssl_oid_ex(type) (const U8*)sharkssl_oid_ ## type, (sizeof(sharkssl_oid_ ## type)/sizeof(sharkssl_oid_ ## type[0]))
199 #define SharkSslParseASN1_getBool(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_BOOLEAN)
200 #define SharkSslParseASN1_getInt(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_INTEGER)
201 #define SharkSslParseASN1_getBitString(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_BIT_STRING)
202 #define SharkSslParseASN1_getOctetString(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_OCTET_STRING)
203 #define SharkSslParseASN1_getNULL(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_NULL)
204 #define SharkSslParseASN1_getOID(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_OID)
205 #define SharkSslParseASN1_getUTCTime(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_UTC_TIME)
206 #define SharkSslParseASN1_getGenTime(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_GENERALIZED_TIME)
207 #define SharkSslParseASN1_getIssuerUniqueID(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_ISSUERUNIQUEID)
208 #define SharkSslParseASN1_getSubjectUniqueID(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_SUBJECTUNIQUEID)
209 #define SharkSslParseASN1_getExtensions(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_EXTENSIONS)
210 #define SharkSslParseASN1_getCSRAttributes(o) SharkSslParseASN1_getType(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_CSR_TAG_ATTRIBUTES)
212 #define SharkSslParseASN1_getECParameters(o) SharkSslParseASN1_getSetSeq(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ECC_PRIVKEY_TAG_PARAMETERS)
213 #define SharkSslParseASN1_getECPublicKey(o) SharkSslParseASN1_getSetSeq(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ECC_PRIVKEY_TAG_PUBLIC_KEY)
214 #define SharkSslParseASN1_getVersion(o) SharkSslParseASN1_getSetSeq(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_VERSION)
215 #define SharkSslParseASN1_getSet(o) SharkSslParseASN1_getSetSeq(o, SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ASN1_SET)
216 #define SharkSslParseASN1_getSequence(o) SharkSslParseASN1_getSetSeq(o, SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ASN1_SEQUENCE)
243 #define SharkSslASN1Create_getLen(o) ((int)((o)->end - (o)->ptr))
244 #define SharkSslASN1Create_getData(o) ((o)->ptr)
251 #define SharkSslASN1Create_getDataLen(o, startOfDataPtr) (*(startOfDataPtr) = (o)->ptr, (int)((o)->end - (o)->ptr))
253 SHARKSSL_API
void SharkSslASN1Create_constructor(
SharkSslASN1Create *o, U8 *buf,
int bufSize);
254 SHARKSSL_API
int SharkSslASN1Create_int(
SharkSslASN1Create *o,
const U8 *intptr,
int len);
259 #define SharkSslASN1Create_bitString(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_BIT_STRING)
260 #define SharkSslASN1Create_octetString(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_OCTET_STRING)
261 #define SharkSslASN1Create_printableString(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_PRINTABLE_STRING)
262 #define SharkSslASN1Create_IA5String(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_IA5_STRING)
263 #define SharkSslASN1Create_extensions(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_EXTENSIONS)
264 #define SharkSslASN1Create_version(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_X509_TAG_VERSION)
265 #define SharkSslASN1Create_CSRAttributes(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_CSR_TAG_ATTRIBUTES)
266 #define SharkSslASN1Create_ECParameters(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ECC_PRIVKEY_TAG_PARAMETERS)
267 #define SharkSslASN1Create_ECPublicKey(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONTEXT_SPECIFIC | SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ECC_PRIVKEY_TAG_PUBLIC_KEY)
269 #define SharkSslASN1Create_set(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ASN1_SET)
270 #define SharkSslASN1Create_sequence(o) SharkSslASN1Create_tag(o, SHARKSSL_ASN1_CONSTRUCTED | SHARKSSL_ASN1_SEQUENCE)
272 #if (SHARKSSL_ENABLE_CSR_CREATION || SHARKSSL_ENABLE_CSR_SIGNING || SHARKSSL_ENABLE_ASN1_KEY_CREATION)
273 SHARKSSL_API
int SharkSslASN1Create_oid(
SharkSslASN1Create *o,
const U8 *oid,
int oidLen);
274 SHARKSSL_API
int SharkSslASN1Create_raw(
SharkSslASN1Create *o,
const void *data,
int size);
276 #if (SHARKSSL_ENABLE_CSR_CREATION || SHARKSSL_ENABLE_CSR_SIGNING)
277 SHARKSSL_API
int SharkSslASN1Create_email(
SharkSslASN1Create *o,
const U8 *oid,
int oidLen,
const U8 *email,
int emailLen);
278 SHARKSSL_API
int SharkSslASN1Create_name(
SharkSslASN1Create *o,
const U8 *oid,
int oidLen,
const U8 *name,
int nameLen);
280 #if (SHARKSSL_ENABLE_CSR_SIGNING)
286 SHARKSSL_API
int sharkssl_PEM_getSeqVersion(
SharkSslParseASN1 *parseKey, U32 len);
293 #define ALGO_OID_EC_PUBLIC_KEY SHARKSSL_OID_EC_PUBLIC_KEY
295 #define SHARKSSL_EC_CURVE_ID_UNKNOWN 0
296 #define SHARKSSL_EC_POINT_UNCOMPRESSED 0x04