52#ifndef QSC_X509_TYPES_H
53#define QSC_X509_TYPES_H
59QSC_CPLUSPLUS_ENABLED_START
88#define QSC_X509_NAME_ATTRIBUTE_STRING_MAX 256U
94#define QSC_X509_NAME_ATTRIBUTES_MAX 32U
100#define QSC_X509_EXTENSIONS_MAX 32U
106#define QSC_X509_SAN_ENTRIES_MAX 16U
112#define QSC_X509_KEY_IDENTIFIER_MAX 32U
118#define QSC_X509_SERIAL_NUMBER_MAX 20U
124#define QSC_X509_ML_DSA_44_PUBLICKEY_SIZE 1312U
130#define QSC_X509_ML_DSA_65_PUBLICKEY_SIZE 1952U
136#define QSC_X509_ML_DSA_87_PUBLICKEY_SIZE 2592U
142#define QSC_X509_ML_DSA_44_SIGNATURE_SIZE 2420U
148#define QSC_X509_ML_DSA_65_SIGNATURE_SIZE 3309U
154#define QSC_X509_ML_DSA_87_SIGNATURE_SIZE 4627U
160#define QSC_X509_ML_KEM_512_PUBLICKEY_SIZE 800U
166#define QSC_X509_ML_KEM_768_PUBLICKEY_SIZE 1184U
172#define QSC_X509_ML_KEM_1024_PUBLICKEY_SIZE 1568U
178#define QSC_X509_SIGNATURE_MAX 4627U
184#define QSC_X509_SPKI_MAX 2624U
189typedef enum qsc_x509_public_key_algorithm_t
191 QSC_X509_PUBLIC_KEY_ALGORITHM_NONE = 0,
192 QSC_X509_PUBLIC_KEY_ALGORITHM_RSA,
193 QSC_X509_PUBLIC_KEY_ALGORITHM_EC,
194 QSC_X509_PUBLIC_KEY_ALGORITHM_ML_DSA,
195 QSC_X509_PUBLIC_KEY_ALGORITHM_ML_KEM
196} qsc_x509_public_key_algorithm;
208typedef enum qsc_x509_pqc_algorithm_class_t
210 QSC_X509_PQC_ALGORITHM_CLASS_NONE = 0,
211 QSC_X509_PQC_ALGORITHM_CLASS_SIGNATURE,
212 QSC_X509_PQC_ALGORITHM_CLASS_KEM
213} qsc_x509_pqc_algorithm_class;
218typedef enum qsc_x509_signature_algorithm_t
220 QSC_X509_SIGNATURE_ALGORITHM_NONE = 0,
221 QSC_X509_SIGNATURE_ALGORITHM_RSA_MD5,
222 QSC_X509_SIGNATURE_ALGORITHM_RSA_SHA1,
223 QSC_X509_SIGNATURE_ALGORITHM_RSA_SHA256,
224 QSC_X509_SIGNATURE_ALGORITHM_RSA_SHA384,
225 QSC_X509_SIGNATURE_ALGORITHM_RSA_SHA512,
226 QSC_X509_SIGNATURE_ALGORITHM_ECDSA_SHA1,
227 QSC_X509_SIGNATURE_ALGORITHM_ECDSA_SHA256,
228 QSC_X509_SIGNATURE_ALGORITHM_ECDSA_SHA384,
229 QSC_X509_SIGNATURE_ALGORITHM_ECDSA_SHA512,
230 QSC_X509_SIGNATURE_ALGORITHM_ML_DSA_44,
231 QSC_X509_SIGNATURE_ALGORITHM_ML_DSA_65,
232 QSC_X509_SIGNATURE_ALGORITHM_ML_DSA_87
233} qsc_x509_signature_algorithm;
242typedef enum qsc_x509_pqc_parameter_set_t
244 QSC_X509_PQC_PARAMETER_SET_NONE = 0,
245 QSC_X509_PQC_PARAMETER_SET_ML_DSA_44,
246 QSC_X509_PQC_PARAMETER_SET_ML_DSA_65,
247 QSC_X509_PQC_PARAMETER_SET_ML_DSA_87,
248 QSC_X509_PQC_PARAMETER_SET_ML_KEM_512,
249 QSC_X509_PQC_PARAMETER_SET_ML_KEM_768,
250 QSC_X509_PQC_PARAMETER_SET_ML_KEM_1024,
251} qsc_x509_pqc_parameter_set;
252typedef enum qsc_x509_hash_algorithm_t
254 QSC_X509_HASH_ALGORITHM_NONE = 0,
255 QSC_X509_HASH_ALGORITHM_MD5,
256 QSC_X509_HASH_ALGORITHM_SHA1,
257 QSC_X509_HASH_ALGORITHM_SHA224,
258 QSC_X509_HASH_ALGORITHM_SHA256,
259 QSC_X509_HASH_ALGORITHM_SHA384,
260 QSC_X509_HASH_ALGORITHM_SHA512
261} qsc_x509_hash_algorithm;
266typedef enum qsc_x509_named_curve_t
268 QSC_X509_NAMED_CURVE_NONE = 0,
269 QSC_X509_NAMED_CURVE_PRIME256V1,
270 QSC_X509_NAMED_CURVE_SECP384R1,
271 QSC_X509_NAMED_CURVE_SECP521R1
272} qsc_x509_named_curve;
277typedef enum qsc_x509_name_attribute_type_t
279 QSC_X509_NAME_ATTRIBUTE_NONE = 0,
280 QSC_X509_NAME_ATTRIBUTE_COMMON_NAME,
281 QSC_X509_NAME_ATTRIBUTE_SURNAME,
282 QSC_X509_NAME_ATTRIBUTE_SERIAL_NUMBER,
283 QSC_X509_NAME_ATTRIBUTE_COUNTRY_NAME,
284 QSC_X509_NAME_ATTRIBUTE_LOCALITY_NAME,
285 QSC_X509_NAME_ATTRIBUTE_STATE_OR_PROVINCE,
286 QSC_X509_NAME_ATTRIBUTE_STREET_ADDRESS,
287 QSC_X509_NAME_ATTRIBUTE_ORGANIZATION_NAME,
288 QSC_X509_NAME_ATTRIBUTE_ORGANIZATIONAL_UNIT,
289 QSC_X509_NAME_ATTRIBUTE_TITLE,
290 QSC_X509_NAME_ATTRIBUTE_DESCRIPTION,
291 QSC_X509_NAME_ATTRIBUTE_GIVEN_NAME,
292 QSC_X509_NAME_ATTRIBUTE_INITIALS,
293 QSC_X509_NAME_ATTRIBUTE_GENERATION_QUALIFIER,
294 QSC_X509_NAME_ATTRIBUTE_DN_QUALIFIER,
295 QSC_X509_NAME_ATTRIBUTE_PSEUDONYM,
296 QSC_X509_NAME_ATTRIBUTE_DOMAIN_COMPONENT,
297 QSC_X509_NAME_ATTRIBUTE_EMAIL_ADDRESS,
298 QSC_X509_NAME_ATTRIBUTE_UNKNOWN
299} qsc_x509_name_attribute_type;
304typedef enum qsc_x509_general_name_type_t
306 QSC_X509_GENERAL_NAME_NONE = 0,
307 QSC_X509_GENERAL_NAME_OTHER_NAME,
308 QSC_X509_GENERAL_NAME_RFC822_NAME,
309 QSC_X509_GENERAL_NAME_DNS_NAME,
310 QSC_X509_GENERAL_NAME_X400_ADDRESS,
311 QSC_X509_GENERAL_NAME_DIRECTORY_NAME,
312 QSC_X509_GENERAL_NAME_EDI_PARTY_NAME,
313 QSC_X509_GENERAL_NAME_UNIFORM_RESOURCE_IDENTIFIER,
314 QSC_X509_GENERAL_NAME_IP_ADDRESS,
315 QSC_X509_GENERAL_NAME_REGISTERED_ID
316} qsc_x509_general_name_type;
324typedef enum qsc_x509_storage_class_t
326 QSC_X509_STORAGE_CLASS_NONE = 0,
327 QSC_X509_STORAGE_CLASS_BORROWED,
328 QSC_X509_STORAGE_CLASS_OWNED
329} qsc_x509_storage_class;
339} qsc_x509_encoded_region;
350typedef qsc_x509_encoded_region qsc_x509_signed_region;
352typedef enum qsc_x509_extension_type_t
354 QSC_X509_EXTENSION_NONE = 0,
355 QSC_X509_EXTENSION_SUBJECT_KEY_IDENTIFIER,
356 QSC_X509_EXTENSION_KEY_USAGE,
357 QSC_X509_EXTENSION_SUBJECT_ALT_NAME,
358 QSC_X509_EXTENSION_ISSUER_ALT_NAME,
359 QSC_X509_EXTENSION_BASIC_CONSTRAINTS,
360 QSC_X509_EXTENSION_NAME_CONSTRAINTS,
361 QSC_X509_EXTENSION_CRL_DISTRIBUTION_POINTS,
362 QSC_X509_EXTENSION_CERTIFICATE_POLICIES,
363 QSC_X509_EXTENSION_CRL_NUMBER,
364 QSC_X509_EXTENSION_AUTHORITY_KEY_IDENTIFIER,
365 QSC_X509_EXTENSION_EXTENDED_KEY_USAGE,
366 QSC_X509_EXTENSION_AUTHORITY_INFO_ACCESS,
367 QSC_X509_EXTENSION_SUBJECT_INFO_ACCESS,
368 QSC_X509_EXTENSION_UNKNOWN
369} qsc_x509_extension_type;
374typedef enum qsc_x509_key_usage_bits_t
376 QSC_X509_KEY_USAGE_DIGITAL_SIGNATURE = 0x0001U,
377 QSC_X509_KEY_USAGE_NON_REPUDIATION = 0x0002U,
378 QSC_X509_KEY_USAGE_KEY_ENCIPHERMENT = 0x0004U,
379 QSC_X509_KEY_USAGE_DATA_ENCIPHERMENT = 0x0008U,
380 QSC_X509_KEY_USAGE_KEY_AGREEMENT = 0x0010U,
381 QSC_X509_KEY_USAGE_KEY_CERT_SIGN = 0x0020U,
382 QSC_X509_KEY_USAGE_CRL_SIGN = 0x0040U,
383 QSC_X509_KEY_USAGE_ENCIPHER_ONLY = 0x0080U,
384 QSC_X509_KEY_USAGE_DECIPHER_ONLY = 0x0100U
385} qsc_x509_key_usage_bits;
390typedef enum qsc_x509_extended_key_usage_bits_t
392 QSC_X509_EXTENDED_KEY_USAGE_NONE = 0x0000U,
393 QSC_X509_EXTENDED_KEY_USAGE_ANY = 0x0001U,
394 QSC_X509_EXTENDED_KEY_USAGE_SERVER_AUTH = 0x0002U,
395 QSC_X509_EXTENDED_KEY_USAGE_CLIENT_AUTH = 0x0004U,
396 QSC_X509_EXTENDED_KEY_USAGE_CODE_SIGNING = 0x0008U,
397 QSC_X509_EXTENDED_KEY_USAGE_EMAIL_PROTECTION = 0x0010U,
398 QSC_X509_EXTENDED_KEY_USAGE_TIME_STAMPING = 0x0020U,
399 QSC_X509_EXTENDED_KEY_USAGE_OCSP_SIGNING = 0x0040U
400} qsc_x509_extended_key_usage_bits;
418} qsc_x509_algorithm_identifier;
425 qsc_x509_name_attribute_type
type;
431 char value[QSC_X509_NAME_ATTRIBUTE_STRING_MAX + 1U];
432} qsc_x509_name_attribute;
439 qsc_x509_name_attribute
attributes[QSC_X509_NAME_ATTRIBUTES_MAX];
457 qsc_x509_general_name_type
type;
461 uint8_t
data[QSC_X509_NAME_ATTRIBUTE_STRING_MAX + 1U];
462} qsc_x509_general_name;
473} qsc_x509_subject_public_key_info;
485} qsc_x509_basic_constraints;
505} qsc_x509_extended_key_usage;
516} qsc_x509_subject_key_identifier;
531 uint8_t
serial[QSC_X509_SERIAL_NUMBER_MAX];
533} qsc_x509_authority_key_identifier;
542 uint8_t
value[QSC_X509_SERIAL_NUMBER_MAX];
544} qsc_x509_crl_number;
553 qsc_x509_general_name
entries[QSC_X509_SAN_ENTRIES_MAX];
555} qsc_x509_subject_alt_name;
564 qsc_x509_general_name
entries[QSC_X509_SAN_ENTRIES_MAX];
566} qsc_x509_issuer_alt_name;
588 qsc_x509_extension
entries[QSC_X509_EXTENSIONS_MAX];
600} qsc_x509_extensions;
627} qsc_x509_certificate;
636} qsc_x509_trust_anchor;
661#define QSC_X509_CERTIFICATE_WRITE_MAX 8192U
675typedef qsc_asn1_status (*qsc_x509_certificate_sign_callback)(qsc_x509_signature_algorithm signaturealgorithm,
676 const uint8_t* tbsdata,
size_t tbsdatalen, uint8_t* signature,
size_t* signaturelen,
void* context);
689 qsc_x509_subject_public_key_info
spki;
692} qsc_x509_certificate_builder;
694QSC_CPLUSPLUS_ENABLED_END
ASN.1 helper functions and data types built on the QSC BER and DER encoding layer.
enum qsc_asn1_status_t qsc_asn1_status
ASN.1 helper status codes.
QSC_EXPORT_API struct qsc_asn1_time_t qsc_asn1_time
A normalized ASN.1 time representation.
QSC_EXPORT_API struct qsc_asn1_oid_t qsc_asn1_oid
A decoded ASN.1 OBJECT IDENTIFIER.
Object identifier registry and lookup helpers for the QSC X.509 layer.
enum qsc_oid_id_t qsc_oid_id
Known object identifier registry entries.
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:605
Parsed algorithm identifier data.
Definition x509types.h:406
qsc_oid_id oid
Definition x509types.h:407
qsc_asn1_oid algorithm_oid
Definition x509types.h:413
qsc_x509_named_curve curve
Definition x509types.h:411
qsc_asn1_oid parameter_oid
Definition x509types.h:414
qsc_x509_hash_algorithm hash
Definition x509types.h:410
bool parameters_present
Definition x509types.h:415
qsc_x509_pqc_parameter_set pqcparameter
Definition x509types.h:412
qsc_x509_public_key_algorithm publickey
Definition x509types.h:408
bool parameters_null
Definition x509types.h:416
bool parameters_oid
Definition x509types.h:417
qsc_x509_signature_algorithm signature
Definition x509types.h:409
Parsed authority key identifier extension data.
Definition x509types.h:522
size_t seriallen
Definition x509types.h:532
bool issuer_present
Definition x509types.h:527
bool serial_present
Definition x509types.h:530
bool critical
Definition x509types.h:524
uint8_t keyidentifier[QSC_X509_KEY_IDENTIFIER_MAX]
Definition x509types.h:525
size_t keyidentifierlen
Definition x509types.h:526
bool present
Definition x509types.h:523
uint8_t serial[QSC_X509_SERIAL_NUMBER_MAX]
Definition x509types.h:531
bool issuername_present
Definition x509types.h:528
qsc_x509_name issuername
Definition x509types.h:529
Parsed basic constraints extension data.
Definition x509types.h:479
bool pathlen_present
Definition x509types.h:483
bool critical
Definition x509types.h:481
bool ca
Definition x509types.h:482
bool present
Definition x509types.h:480
uint32_t pathlen
Definition x509types.h:484
A mutable certificate builder used to construct an X.509 v3 certificate.
Definition x509types.h:682
qsc_x509_validity validity
Definition x509types.h:687
qsc_x509_name issuer
Definition x509types.h:686
size_t serialnumberlen
Definition x509types.h:685
qsc_x509_subject_public_key_info spki
Definition x509types.h:689
qsc_x509_algorithm_identifier signaturealgorithm
Definition x509types.h:690
qsc_x509_extensions extensions
Definition x509types.h:691
uint32_t version
Definition x509types.h:683
uint8_t serialnumber[QSC_X509_SERIAL_NUMBER_MAX]
Definition x509types.h:684
qsc_x509_name subject
Definition x509types.h:688
A parsed X.509 certificate object.
Definition x509types.h:606
const uint8_t * tbsdata
Definition x509types.h:622
uint8_t signature[QSC_X509_SIGNATURE_MAX]
Definition x509types.h:619
bool issueruniqueid_present
Definition x509types.h:615
size_t signaturelen
Definition x509types.h:620
size_t tbsdatalen
Definition x509types.h:623
bool subjectuniqueid_present
Definition x509types.h:616
qsc_x509_validity validity
Definition x509types.h:612
qsc_x509_name issuer
Definition x509types.h:611
size_t serialnumberlen
Definition x509types.h:609
size_t derlen
Definition x509types.h:625
qsc_x509_algorithm_identifier signaturealgorithm
Definition x509types.h:618
qsc_x509_extensions extensions
Definition x509types.h:617
qsc_x509_algorithm_identifier tbsignature
Definition x509types.h:610
qsc_x509_subject_public_key_info subjectpublickeyinfo
Definition x509types.h:614
const uint8_t * der
Definition x509types.h:624
bool derowned
Definition x509types.h:626
uint32_t version
Definition x509types.h:607
uint8_t serialnumber[QSC_X509_SERIAL_NUMBER_MAX]
Definition x509types.h:608
uint8_t signatureunusedbits
Definition x509types.h:621
qsc_x509_name subject
Definition x509types.h:613
A certificate chain container.
Definition x509types.h:642
qsc_x509_certificate * certificates
Definition x509types.h:643
size_t count
Definition x509types.h:644
Parsed CRL number extension data.
Definition x509types.h:539
size_t valuelen
Definition x509types.h:543
uint8_t value[QSC_X509_SERIAL_NUMBER_MAX]
Definition x509types.h:542
bool critical
Definition x509types.h:541
bool present
Definition x509types.h:540
A raw encoded byte region associated with a decoded object.
Definition x509types.h:335
const uint8_t * data
Definition x509types.h:336
qsc_x509_storage_class storage
Definition x509types.h:338
size_t length
Definition x509types.h:337
Parsed extended key usage extension data.
Definition x509types.h:501
bool critical
Definition x509types.h:503
bool present
Definition x509types.h:502
uint32_t bits
Definition x509types.h:504
A decoded certificate extension entry.
Definition x509types.h:572
qsc_x509_extension_type type
Definition x509types.h:573
qsc_oid_id oid
Definition x509types.h:574
size_t valuelen
Definition x509types.h:578
qsc_asn1_oid extension_oid
Definition x509types.h:575
bool critical
Definition x509types.h:576
bool decoded
Definition x509types.h:580
uint8_t value[QSC_X509_SPKI_MAX]
Definition x509types.h:577
qsc_x509_encoded_region rawextnvalue
Definition x509types.h:579
Parsed extension set data.
Definition x509types.h:587
qsc_x509_subject_key_identifier subjectkeyidentifier
Definition x509types.h:595
qsc_x509_crl_number crlnumber
Definition x509types.h:596
qsc_x509_key_usage keyusage
Definition x509types.h:593
qsc_x509_authority_key_identifier authoritykeyidentifier
Definition x509types.h:597
qsc_x509_extended_key_usage extendedkeyusage
Definition x509types.h:594
qsc_x509_extension entries[QSC_X509_EXTENSIONS_MAX]
Definition x509types.h:588
size_t count
Definition x509types.h:589
qsc_x509_basic_constraints basicconstraints
Definition x509types.h:592
bool duplicatesrejected
Definition x509types.h:591
bool decoded
Definition x509types.h:590
qsc_x509_issuer_alt_name issueraltname
Definition x509types.h:599
qsc_x509_subject_alt_name subjectaltname
Definition x509types.h:598
A decoded general name entry.
Definition x509types.h:456
qsc_oid_id oid
Definition x509types.h:458
qsc_asn1_oid registeredid
Definition x509types.h:459
uint8_t data[QSC_X509_NAME_ATTRIBUTE_STRING_MAX+1U]
Definition x509types.h:461
size_t length
Definition x509types.h:460
qsc_x509_general_name_type type
Definition x509types.h:457
Parsed issuer alternative name extension data.
Definition x509types.h:561
bool critical
Definition x509types.h:563
size_t count
Definition x509types.h:565
qsc_x509_general_name entries[QSC_X509_SAN_ENTRIES_MAX]
Definition x509types.h:564
bool present
Definition x509types.h:562
Parsed key usage extension data.
Definition x509types.h:491
uint16_t bits
Definition x509types.h:494
bool critical
Definition x509types.h:493
bool present
Definition x509types.h:492
A decoded distinguished name attribute.
Definition x509types.h:424
qsc_oid_id oid
Definition x509types.h:426
char value[QSC_X509_NAME_ATTRIBUTE_STRING_MAX+1U]
Definition x509types.h:431
qsc_x509_name_attribute_type type
Definition x509types.h:425
uint16_t rdn_index
Definition x509types.h:429
qsc_asn1_oid attribute_oid
Definition x509types.h:427
size_t length
Definition x509types.h:430
uint8_t string_tag
Definition x509types.h:428
A decoded distinguished name.
Definition x509types.h:438
size_t count
Definition x509types.h:440
qsc_x509_name_attribute attributes[QSC_X509_NAME_ATTRIBUTES_MAX]
Definition x509types.h:439
A trust store container.
Definition x509types.h:651
size_t count
Definition x509types.h:653
size_t capacity
Definition x509types.h:654
qsc_x509_trust_anchor * anchors
Definition x509types.h:652
Parsed subject alternative name extension data.
Definition x509types.h:550
bool critical
Definition x509types.h:552
size_t count
Definition x509types.h:554
qsc_x509_general_name entries[QSC_X509_SAN_ENTRIES_MAX]
Definition x509types.h:553
bool present
Definition x509types.h:551
Parsed subject key identifier extension data.
Definition x509types.h:511
uint8_t identifier[QSC_X509_KEY_IDENTIFIER_MAX]
Definition x509types.h:514
size_t identifierlen
Definition x509types.h:515
bool critical
Definition x509types.h:513
bool present
Definition x509types.h:512
A decoded subject public key information structure.
Definition x509types.h:468
qsc_x509_algorithm_identifier algorithm
Definition x509types.h:469
uint8_t unusedbits
Definition x509types.h:472
size_t publickeylen
Definition x509types.h:471
uint8_t publickey[QSC_X509_SPKI_MAX]
Definition x509types.h:470
A trust anchor entry.
Definition x509types.h:633
qsc_x509_certificate certificate
Definition x509types.h:634
bool selfsigned
Definition x509types.h:635
A decoded X.509 validity interval.
Definition x509types.h:447
qsc_asn1_time notbefore
Definition x509types.h:448
qsc_asn1_time notafter
Definition x509types.h:449