52#ifndef QSC_X509_CERTWRITE_H
53#define QSC_X509_CERTWRITE_H
60QSC_CPLUSPLUS_ENABLED_START
90#define QSC_X509_CERT_ISSUANCE_PROPAGATE_SUBJECT_ALT_NAME 0x00000001U
100#define QSC_X509_CERT_ISSUANCE_PROPAGATE_EXTENDED_KEY_USAGE 0x00000002U
111#define QSC_X509_CERT_ISSUANCE_PROPAGATE_SUBJECT_KEY_IDENTIFIER 0x00000004U
122#define QSC_X509_CERT_ISSUANCE_PROPAGATE_UNKNOWN_NON_CRITICAL 0x00000008U
133#define QSC_X509_CERT_ISSUANCE_PROPAGATE_DEFAULT (QSC_X509_CERT_ISSUANCE_PROPAGATE_SUBJECT_ALT_NAME | QSC_X509_CERT_ISSUANCE_PROPAGATE_EXTENDED_KEY_USAGE)
142#define QSC_X509_CERT_PROFILE_NONE 0U
151#define QSC_X509_CERT_PROFILE_ROOT_CA 1U
160#define QSC_X509_CERT_PROFILE_INTERMEDIATE_CA 2U
169#define QSC_X509_CERT_PROFILE_TLS_SERVER 3U
178#define QSC_X509_CERT_PROFILE_TLS_CLIENT 4U
581QSC_CPLUSPLUS_ENABLED_END
enum qsc_asn1_status_t qsc_asn1_status
ASN.1 helper status codes.
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
QSC_EXPORT_API qsc_asn1_status qsc_x509_cert_issuance_validate_csr(const qsc_x509_csr *csr)
Validate a certificate signing request for issuance use.
Definition x509certwrite.c:1597
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_add_extension(qsc_x509_certificate_builder *builder, const qsc_x509_extension *extension)
Add a raw extension to the builder.
Definition x509certwrite.c:904
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_extended_key_usage(qsc_x509_certificate_builder *builder, const qsc_x509_extended_key_usage *extendedkeyusage)
Set the Extended Key Usage extension content.
Definition x509certwrite.c:779
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_sign(const qsc_x509_certificate_builder *builder, qsc_x509_certificate_sign_callback signcallback, void *context, uint8_t *output, size_t *outputlen)
Sign and encode a complete certificate.
Definition x509certwrite.c:1087
QSC_EXPORT_API void qsc_x509_certificate_builder_initialize(qsc_x509_certificate_builder *builder)
Initialize a certificate builder instance.
Definition x509certwrite.c:568
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_validity(qsc_x509_certificate_builder *builder, const qsc_x509_validity *validity)
Set the certificate validity interval.
Definition x509certwrite.c:669
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_subject_key_identifier(qsc_x509_certificate_builder *builder, const qsc_x509_subject_key_identifier *subjectkeyidentifier)
Set the Subject Key Identifier extension content.
Definition x509certwrite.c:798
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_basic_constraints(qsc_x509_certificate_builder *builder, const qsc_x509_basic_constraints *basicconstraints)
Set the Basic Constraints extension content.
Definition x509certwrite.c:741
QSC_EXPORT_API void qsc_x509_certificate_builder_clear(qsc_x509_certificate_builder *builder)
Clear a certificate builder instance.
Definition x509certwrite.c:579
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_authority_key_identifier(qsc_x509_certificate_builder *builder, const qsc_x509_authority_key_identifier *authoritykeyidentifier)
Set the Authority Key Identifier extension content.
Definition x509certwrite.c:817
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_serial(qsc_x509_certificate_builder *builder, const uint8_t *serialnumber, size_t serialnumberlen)
Set the certificate serial number.
Definition x509certwrite.c:589
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_validate_profile(const qsc_x509_certificate_builder *builder, const qsc_x509_certificate *issuer, uint32_t profile)
Validate builder contents against a predefined profile.
Definition x509certwrite.c:1362
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_spki(qsc_x509_certificate_builder *builder, const qsc_x509_subject_public_key_info *spki)
Set the subject public key information.
Definition x509certwrite.c:694
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_add_subject_alt_name_dns(qsc_x509_certificate_builder *builder, const char *dnsname, size_t dsnamelen)
Add a DNS subject alternative name entry.
Definition x509certwrite.c:836
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_issuer_from_certificate(qsc_x509_certificate_builder *builder, const qsc_x509_certificate *issuer)
Set the issuer name from an issuer certificate.
Definition x509certwrite.c:1160
QSC_EXPORT_API qsc_asn1_status qsc_x509_compute_subject_key_identifier(const qsc_x509_subject_public_key_info *spki, qsc_x509_subject_key_identifier *subjectkeyidentifier)
Compute a Subject Key Identifier from subject public key information.
Definition x509certwrite.c:1178
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_apply_generated_identifiers(qsc_x509_certificate_builder *builder, const qsc_x509_certificate *issuer)
Apply generated key identifiers to the builder.
Definition x509certwrite.c:1243
QSC_EXPORT_API qsc_asn1_status qsc_x509_cert_issuance_apply_csr_extensions(qsc_x509_certificate_builder *builder, const qsc_x509_csr *csr, uint32_t policyflags)
Apply CSR-requested extensions to a certificate builder.
Definition x509certwrite.c:1740
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_add_subject_alt_name_ip(qsc_x509_certificate_builder *builder, const uint8_t *address, size_t addresslen)
Add an IP-address subject alternative name entry.
Definition x509certwrite.c:870
QSC_EXPORT_API qsc_asn1_status qsc_x509_compute_authority_key_identifier(const qsc_x509_certificate *issuer, qsc_x509_authority_key_identifier *authoritykeyidentifier)
Compute an Authority Key Identifier from an issuer certificate.
Definition x509certwrite.c:1206
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_apply_profile(qsc_x509_certificate_builder *builder, uint32_t profile)
Apply a predefined certificate profile to the builder.
Definition x509certwrite.c:1287
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_subject(qsc_x509_certificate_builder *builder, const qsc_x509_name *subject)
Set the subject distinguished name.
Definition x509certwrite.c:651
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_key_usage(qsc_x509_certificate_builder *builder, const qsc_x509_key_usage *keyusage)
Set the Key Usage extension content.
Definition x509certwrite.c:760
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_issuer(qsc_x509_certificate_builder *builder, const qsc_x509_name *issuer)
Set the issuer distinguished name.
Definition x509certwrite.c:633
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_encode_pem(const uint8_t *der, size_t derlen, char *output, size_t *outputlen)
Encode a DER certificate into PEM.
Definition x509certwrite.c:1506
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_encode_tbs_der(const qsc_x509_certificate_builder *builder, uint8_t *output, size_t *outputlen)
Encode the TBSCertificate portion as DER.
Definition x509certwrite.c:957
QSC_EXPORT_API qsc_asn1_status qsc_x509_certificate_builder_set_signature_algorithm(qsc_x509_certificate_builder *builder, const qsc_x509_algorithm_identifier *signaturealgorithm)
Set the certificate signature algorithm identifier.
Definition x509certwrite.c:716
QSC_EXPORT_API qsc_asn1_status qsc_x509_cert_issuance_filter_requested_extensions(const qsc_x509_csr *csr, uint32_t policyflags, qsc_x509_extensions *filteredextensions)
Filter CSR-requested extensions under issuer policy.
Definition x509certwrite.c:1664
PKCS#10 certificate signing request encoding, decoding, mutation, and verification interface.
QSC_EXPORT_API struct qsc_x509_csr_t qsc_x509_csr
A decoded or mutable PKCS#10 certificate signing request.