QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
x509write.h
Go to the documentation of this file.
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE:
5 * This software and all accompanying materials are the exclusive property of
6 * Quantum Resistant Cryptographic Solutions Corporation (QRCS). The intellectual
7 * and technical concepts contained herein are proprietary to QRCS and are
8 * protected under applicable Canadian, U.S., and international copyright,
9 * patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC ALGORITHMS AND IMPLEMENTATIONS:
12 * - This software includes implementations of cryptographic primitives and
13 * algorithms that are standardized or in the public domain, such as AES
14 * and SHA-3, which are not proprietary to QRCS.
15 * - This software also includes cryptographic primitives, constructions, and
16 * algorithms designed by QRCS, including but not limited to RCS, SCB, CSX, QMAC, and
17 * related components, which are proprietary to QRCS.
18 * - All source code, implementations, protocol compositions, optimizations,
19 * parameter selections, and engineering work contained in this software are
20 * original works of QRCS and are protected under this license.
21 *
22 * LICENSE AND USE RESTRICTIONS:
23 * - This software is licensed under the Quantum Resistant Cryptographic Solutions
24 * Public Research and Evaluation License (QRCS-PREL), 2025-2026.
25 * - Permission is granted solely for non-commercial evaluation, academic research,
26 * cryptographic analysis, interoperability testing, and feasibility assessment.
27 * - Commercial use, production deployment, commercial redistribution, or
28 * integration into products or services is strictly prohibited without a
29 * separate written license agreement executed with QRCS.
30 * - Licensing and authorized distribution are solely at the discretion of QRCS.
31 *
32 * EXPERIMENTAL CRYPTOGRAPHY NOTICE:
33 * Portions of this software may include experimental, novel, or evolving
34 * cryptographic designs. Use of this software is entirely at the user's risk.
35 *
36 * DISCLAIMER:
37 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38 * IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
39 * FOR A PARTICULAR PURPOSE, SECURITY, OR NON-INFRINGEMENT. QRCS DISCLAIMS ALL
40 * LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
41 * ARISING FROM THE USE OR MISUSE OF THIS SOFTWARE.
42 *
43 * FULL LICENSE:
44 * This software is subject to the Quantum Resistant Cryptographic Solutions
45 * Public Research and Evaluation License (QRCS-PREL), 2025-2026. The complete license terms
46 * are provided in the accompanying LICENSE file or at https://www.qrcscorp.ca.
47 *
48 * Written by: John G. Underhill
49 * Contact: contact@qrcscorp.ca
50 */
51
52#ifndef QSC_X509_WRITE_H
53#define QSC_X509_WRITE_H
54
55#include "qsccommon.h"
56#include "x509crl.h"
57#include "x509crlwrite.h"
58#include "x509types.h"
59
60QSC_CPLUSPLUS_ENABLED_START
61
84
98QSC_EXPORT_API qsc_asn1_status qsc_x509_write_length(size_t length, uint8_t* output, size_t* outputlen);
99
115QSC_EXPORT_API qsc_asn1_status qsc_x509_write_tag(uint8_t tagclass, bool constructed, uint32_t tagnumber, uint8_t* output, size_t* outputlen);
116
130QSC_EXPORT_API qsc_asn1_status qsc_x509_write_integer(const uint8_t* value, size_t valuelen, uint8_t* output, size_t* outputlen);
131
141QSC_EXPORT_API qsc_asn1_status qsc_x509_write_boolean(bool value, uint8_t* output, size_t* outputlen);
142
151QSC_EXPORT_API qsc_asn1_status qsc_x509_write_null(uint8_t* output, size_t* outputlen);
152
162QSC_EXPORT_API qsc_asn1_status qsc_x509_write_oid(const qsc_asn1_oid* oid, uint8_t* output, size_t* outputlen);
163
174QSC_EXPORT_API qsc_asn1_status qsc_x509_write_octet_string(const uint8_t* value, size_t valuelen, uint8_t* output, size_t* outputlen);
175
191QSC_EXPORT_API qsc_asn1_status qsc_x509_write_bit_string(const uint8_t* value, size_t valuelen, uint8_t unusedbits, uint8_t* output, size_t* outputlen);
192
203QSC_EXPORT_API qsc_asn1_status qsc_x509_write_utf8_string(const char* value, size_t valuelen, uint8_t* output, size_t* outputlen);
204
215QSC_EXPORT_API qsc_asn1_status qsc_x509_write_printable_string(const char* value, size_t valuelen, uint8_t* output, size_t* outputlen);
216
227QSC_EXPORT_API qsc_asn1_status qsc_x509_write_ia5_string(const char* value, size_t valuelen, uint8_t* output, size_t* outputlen);
228
238QSC_EXPORT_API qsc_asn1_status qsc_x509_write_utctime(const qsc_asn1_time* value, uint8_t* output, size_t* outputlen);
239
249QSC_EXPORT_API qsc_asn1_status qsc_x509_write_generalized_time(const qsc_asn1_time* value, uint8_t* output, size_t* outputlen);
250
261QSC_EXPORT_API qsc_asn1_status qsc_x509_write_sequence(const uint8_t* content, size_t contentlen, uint8_t* output, size_t* outputlen);
262
273QSC_EXPORT_API qsc_asn1_status qsc_x509_write_set(const uint8_t* content, size_t contentlen, uint8_t* output, size_t* outputlen);
274
286QSC_EXPORT_API qsc_asn1_status qsc_x509_write_explicit(uint32_t tagnumber, const uint8_t* content, size_t contentlen,
287 uint8_t* output, size_t* outputlen);
288
302QSC_EXPORT_API qsc_asn1_status qsc_x509_write_raw(uint8_t tagclass, bool constructed, uint32_t tagnumber,
303 const uint8_t* content, size_t contentlen, uint8_t* output, size_t* outputlen);
304
319 uint8_t* output, size_t* outputlen);
320
337 qsc_x509_named_curve curve, qsc_x509_pqc_parameter_set pqcparameter, uint8_t* output, size_t* outputlen);
338
350QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ec(qsc_x509_named_curve curve, const uint8_t* publickey,
351 size_t publickeylen, uint8_t* output, size_t* outputlen);
352
364QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ml_dsa(qsc_x509_pqc_parameter_set parameterset,
365 const uint8_t* publickey, size_t publickeylen, uint8_t* output, size_t* outputlen);
366
378QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ml_kem(qsc_x509_pqc_parameter_set parameterset, const uint8_t* publickey,
379 size_t publickeylen, uint8_t* output, size_t* outputlen);
380
390QSC_EXPORT_API qsc_asn1_status qsc_x509_write_algorithm_identifier(const qsc_x509_algorithm_identifier* algorithm,
391 uint8_t* output, size_t* outputlen);
392
402QSC_EXPORT_API qsc_asn1_status qsc_x509_write_name(const qsc_x509_name* name, uint8_t* output, size_t* outputlen);
403
413QSC_EXPORT_API qsc_asn1_status qsc_x509_write_validity(const qsc_x509_validity* validity, uint8_t* output, size_t* outputlen);
414
424QSC_EXPORT_API qsc_asn1_status qsc_x509_write_general_name(const qsc_x509_general_name* name, uint8_t* output, size_t* outputlen);
425
435QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki(const qsc_x509_subject_public_key_info* spki, uint8_t* output, size_t* outputlen);
436
446QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extension(const qsc_x509_extension* extension, uint8_t* output, size_t* outputlen);
447
457QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extensions(const qsc_x509_extensions* extensions, uint8_t* output, size_t* outputlen);
458
468QSC_EXPORT_API qsc_asn1_status qsc_x509_write_basic_constraints(const qsc_x509_basic_constraints* basicconstraints,
469 uint8_t* output, size_t* outputlen);
470
480QSC_EXPORT_API qsc_asn1_status qsc_x509_write_key_usage(const qsc_x509_key_usage* keyusage, uint8_t* output, size_t* outputlen);
481
491QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extended_key_usage(const qsc_x509_extended_key_usage* extendedkeyusage,
492 uint8_t* output, size_t* outputlen);
493
503QSC_EXPORT_API qsc_asn1_status qsc_x509_write_subject_key_identifier(const qsc_x509_subject_key_identifier* subjectkeyidentifier,
504 uint8_t* output, size_t* outputlen);
505
515QSC_EXPORT_API qsc_asn1_status qsc_x509_write_authority_key_identifier(const qsc_x509_authority_key_identifier* authoritykeyidentifier,
516 uint8_t* output, size_t* outputlen);
517
527QSC_EXPORT_API qsc_asn1_status qsc_x509_write_subject_alt_name(const qsc_x509_subject_alt_name* subjectaltname, uint8_t* output, size_t* outputlen);
528
538QSC_EXPORT_API qsc_asn1_status qsc_x509_write_issuer_alt_name(const qsc_x509_issuer_alt_name* issueraltname, uint8_t* output, size_t* outputlen);
560QSC_EXPORT_API qsc_asn1_status qsc_x509_crl_builder_set_authority_key_identifier(qsc_x509_crl_builder* builder, const qsc_x509_authority_key_identifier* authoritykeyidentifier);
561
587QSC_EXPORT_API qsc_asn1_status qsc_x509_crl_builder_set_crl_number(qsc_x509_crl_builder* builder, const uint8_t* value, size_t valuelen, bool critical);
588
614QSC_EXPORT_API qsc_asn1_status qsc_x509_compute_authority_key_identifier_from_issuer(const qsc_x509_certificate* issuer, qsc_x509_authority_key_identifier* authoritykeyidentifier);
615
616QSC_CPLUSPLUS_ENABLED_END
617
618#endif
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.
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
A mutable certificate revocation list builder.
X.509 certificate revocation list parsing, encoding, lookup, and verification interface.
X.509 certificate revocation list builder, signing, and PEM encoding interface.
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_subject_key_identifier(const qsc_x509_subject_key_identifier *subjectkeyidentifier, uint8_t *output, size_t *outputlen)
Write a SubjectKeyIdentifier extension payload.
Definition x509write.c:1767
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_null(uint8_t *output, size_t *outputlen)
Write an ASN.1 DER NULL object.
Definition x509write.c:829
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extended_key_usage(const qsc_x509_extended_key_usage *extendedkeyusage, uint8_t *output, size_t *outputlen)
Write an ExtendedKeyUsage extension payload.
Definition x509write.c:1652
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_octet_string(const uint8_t *value, size_t valuelen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER OCTET STRING object.
Definition x509write.c:854
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_utctime(const qsc_asn1_time *value, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER UTCTime object.
Definition x509write.c:977
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_sequence(const uint8_t *content, size_t contentlen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER SEQUENCE object from pre-encoded contents.
Definition x509write.c:993
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_algorithm_identifier(const qsc_x509_algorithm_identifier *algorithm, uint8_t *output, size_t *outputlen)
Write a normalized AlgorithmIdentifier object.
Definition x509write.c:1014
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_raw(uint8_t tagclass, bool constructed, uint32_t tagnumber, const uint8_t *content, size_t contentlen, uint8_t *output, size_t *outputlen)
Write a raw ASN.1 DER object from tag metadata and pre-encoded contents.
Definition x509write.c:686
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_issuer_alt_name(const qsc_x509_issuer_alt_name *issueraltname, uint8_t *output, size_t *outputlen)
Write an IssuerAltName extension payload.
Definition x509write.c:1878
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_length(size_t length, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER length field.
Definition x509write.c:586
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_explicit(uint32_t tagnumber, const uint8_t *content, size_t contentlen, uint8_t *output, size_t *outputlen)
Write an explicitly tagged ASN.1 DER object from pre-encoded contents.
Definition x509write.c:1007
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_utf8_string(const char *value, size_t valuelen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER UTF8String object.
Definition x509write.c:928
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki(const qsc_x509_subject_public_key_info *spki, uint8_t *output, size_t *outputlen)
Write a normalized SubjectPublicKeyInfo object.
Definition x509write.c:1311
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_validity(const qsc_x509_validity *validity, uint8_t *output, size_t *outputlen)
Write a normalized X.509 Validity object.
Definition x509write.c:1229
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_basic_constraints(const qsc_x509_basic_constraints *basicconstraints, uint8_t *output, size_t *outputlen)
Write a BasicConstraints extension payload.
Definition x509write.c:1505
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_integer(const uint8_t *value, size_t valuelen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER INTEGER object.
Definition x509write.c:736
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_name(const qsc_x509_name *name, uint8_t *output, size_t *outputlen)
Write a normalized X.509 Name object.
Definition x509write.c:1129
QSC_EXPORT_API qsc_asn1_status qsc_x509_compute_authority_key_identifier_from_issuer(const qsc_x509_certificate *issuer, qsc_x509_authority_key_identifier *authoritykeyidentifier)
Computes the Authority Key Identifier (AKI) from an issuer certificate.
Definition x509crlwrite.c:526
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_algorithm_identifier_for_signature(qsc_x509_signature_algorithm signature, uint8_t *output, size_t *outputlen)
Write an AlgorithmIdentifier object for a signature algorithm.
Definition x509write.c:1050
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_bit_string(const uint8_t *value, size_t valuelen, uint8_t unusedbits, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER BIT STRING object.
Definition x509write.c:866
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ml_kem(qsc_x509_pqc_parameter_set parameterset, const uint8_t *publickey, size_t publickeylen, uint8_t *output, size_t *outputlen)
Write an ML-KEM SubjectPublicKeyInfo object.
Definition x509write.c:1106
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ml_dsa(qsc_x509_pqc_parameter_set parameterset, const uint8_t *publickey, size_t publickeylen, uint8_t *output, size_t *outputlen)
Write an ML-DSA SubjectPublicKeyInfo object.
Definition x509write.c:1083
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_generalized_time(const qsc_asn1_time *value, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER GeneralizedTime object.
Definition x509write.c:985
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_tag(uint8_t tagclass, bool constructed, uint32_t tagnumber, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER tag field.
Definition x509write.c:629
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extension(const qsc_x509_extension *extension, uint8_t *output, size_t *outputlen)
Write a normalized X.509 Extension object.
Definition x509write.c:1349
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_algorithm_identifier_for_public_key(qsc_x509_public_key_algorithm publickey, qsc_x509_named_curve curve, qsc_x509_pqc_parameter_set pqcparameter, uint8_t *output, size_t *outputlen)
Write an AlgorithmIdentifier object for a public-key algorithm.
Definition x509write.c:1055
QSC_EXPORT_API qsc_asn1_status qsc_x509_crl_builder_set_crl_number(qsc_x509_crl_builder *builder, const uint8_t *value, size_t valuelen, bool critical)
Sets the CRL Number extension in the CRL builder.
Definition x509crlwrite.c:539
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_printable_string(const char *value, size_t valuelen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER PrintableString object.
Definition x509write.c:935
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_general_name(const qsc_x509_general_name *name, uint8_t *output, size_t *outputlen)
Write a normalized GeneralName object.
Definition x509write.c:1283
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_subject_alt_name(const qsc_x509_subject_alt_name *subjectaltname, uint8_t *output, size_t *outputlen)
Write a SubjectAltName extension payload.
Definition x509write.c:1868
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_spki_ec(qsc_x509_named_curve curve, const uint8_t *publickey, size_t publickeylen, uint8_t *output, size_t *outputlen)
Write an elliptic-curve SubjectPublicKeyInfo object.
Definition x509write.c:1060
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_key_usage(const qsc_x509_key_usage *keyusage, uint8_t *output, size_t *outputlen)
Write a KeyUsage extension payload.
Definition x509write.c:1568
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_set(const uint8_t *content, size_t contentlen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER SET object from pre-encoded contents.
Definition x509write.c:1000
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_boolean(bool value, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER BOOLEAN object.
Definition x509write.c:821
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_authority_key_identifier(const qsc_x509_authority_key_identifier *authoritykeyidentifier, uint8_t *output, size_t *outputlen)
Write an AuthorityKeyIdentifier extension payload.
Definition x509write.c:1777
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_ia5_string(const char *value, size_t valuelen, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER IA5String object.
Definition x509write.c:957
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_oid(const qsc_asn1_oid *oid, uint8_t *output, size_t *outputlen)
Write an ASN.1 DER OBJECT IDENTIFIER object.
Definition x509write.c:836
QSC_EXPORT_API qsc_asn1_status qsc_x509_crl_builder_set_authority_key_identifier(qsc_x509_crl_builder *builder, const qsc_x509_authority_key_identifier *authoritykeyidentifier)
Sets the Authority Key Identifier (AKI) extension in the CRL builder.
Definition x509crlwrite.c:481
QSC_EXPORT_API qsc_asn1_status qsc_x509_write_extensions(const qsc_x509_extensions *extensions, uint8_t *output, size_t *outputlen)
Write a normalized Extensions collection.
Definition x509write.c:1473