QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
x509spki.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_SPKI_H
53#define QSC_X509_SPKI_H
54
55#include "qsccommon.h"
56#include "x509types.h"
57
58QSC_CPLUSPLUS_ENABLED_START
59
78
91QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_decode(const qsc_encoding_ber_element* element, qsc_x509_algorithm_identifier* algorithm);
92
93
108QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_validate(const qsc_x509_algorithm_identifier* algorithm);
109
123QSC_EXPORT_API qsc_asn1_status qsc_x509_subject_public_key_info_decode(const qsc_encoding_ber_element* element, qsc_x509_subject_public_key_info* spki);
124
137QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_validate(const qsc_x509_subject_public_key_info* spki);
138
151QSC_EXPORT_API bool qsc_x509_spki_is_uncompressed_ec_point(const qsc_x509_subject_public_key_info* spki);
152
165QSC_EXPORT_API size_t qsc_x509_named_curve_coordinate_size(qsc_x509_named_curve curve);
166
178QSC_EXPORT_API size_t qsc_x509_named_curve_public_key_size(qsc_x509_named_curve curve);
179
196QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_get_ec_coordinates(const qsc_x509_subject_public_key_info* spki, uint8_t* x, size_t xlen, uint8_t* y, size_t ylen);
197
208QSC_EXPORT_API void qsc_x509_algorithm_identifier_initialize(qsc_x509_algorithm_identifier* algorithm);
209
221QSC_EXPORT_API void qsc_x509_subject_public_key_info_initialize(qsc_x509_subject_public_key_info* spki);
222
234QSC_EXPORT_API size_t qsc_x509_pqc_public_key_size(qsc_x509_pqc_parameter_set parameterset);
235
247QSC_EXPORT_API bool qsc_x509_algorithm_identifier_is_mldsa(const qsc_x509_algorithm_identifier* algorithm);
248
260QSC_EXPORT_API bool qsc_x509_algorithm_identifier_is_mlkem(const qsc_x509_algorithm_identifier* algorithm);
261
274QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_initialize_mldsa(qsc_x509_algorithm_identifier* algorithm, qsc_x509_pqc_parameter_set parameterset);
275
288QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_initialize_mlkem(qsc_x509_algorithm_identifier* algorithm, qsc_x509_pqc_parameter_set parameterset);
289
304QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ec(qsc_x509_subject_public_key_info* spki, qsc_x509_named_curve curve, const uint8_t* publickey, size_t publickeylen);
305
321QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ml_dsa(qsc_x509_subject_public_key_info* spki, qsc_x509_pqc_parameter_set parameterset, const uint8_t* publickey, size_t publickeylen);
322
338QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ml_kem(qsc_x509_subject_public_key_info* spki, qsc_x509_pqc_parameter_set parameterset, const uint8_t* publickey, size_t publickeylen);
339
340QSC_CPLUSPLUS_ENABLED_END
341
342#endif
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
In-memory representation of a single BER/DER ASN.1 TLV element.
Definition encoding.h:311
QSC_EXPORT_API void qsc_x509_algorithm_identifier_initialize(qsc_x509_algorithm_identifier *algorithm)
Initialize an AlgorithmIdentifier object.
Definition x509spki.c:352
QSC_EXPORT_API bool qsc_x509_algorithm_identifier_is_mldsa(const qsc_x509_algorithm_identifier *algorithm)
Test whether an AlgorithmIdentifier denotes ML-DSA.
Definition x509spki.c:423
QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ec(qsc_x509_subject_public_key_info *spki, qsc_x509_named_curve curve, const uint8_t *publickey, size_t publickeylen)
Initialize an SPKI object for an elliptic-curve public key.
Definition x509spki.c:881
QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_initialize_mldsa(qsc_x509_algorithm_identifier *algorithm, qsc_x509_pqc_parameter_set parameterset)
Initialize an AlgorithmIdentifier for ML-DSA.
Definition x509spki.c:458
QSC_EXPORT_API qsc_asn1_status qsc_x509_subject_public_key_info_decode(const qsc_encoding_ber_element *element, qsc_x509_subject_public_key_info *spki)
Decode a SubjectPublicKeyInfo object.
Definition x509spki.c:767
QSC_EXPORT_API void qsc_x509_subject_public_key_info_initialize(qsc_x509_subject_public_key_info *spki)
Initialize a SubjectPublicKeyInfo object.
Definition x509spki.c:362
QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_validate(const qsc_x509_subject_public_key_info *spki)
Validate a normalized SubjectPublicKeyInfo object.
Definition x509spki.c:679
QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_decode(const qsc_encoding_ber_element *element, qsc_x509_algorithm_identifier *algorithm)
Decode an AlgorithmIdentifier object.
Definition x509spki.c:537
QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_initialize_mlkem(qsc_x509_algorithm_identifier *algorithm, qsc_x509_pqc_parameter_set parameterset)
Initialize an AlgorithmIdentifier for ML-KEM.
Definition x509spki.c:498
QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ml_dsa(qsc_x509_subject_public_key_info *spki, qsc_x509_pqc_parameter_set parameterset, const uint8_t *publickey, size_t publickeylen)
Initialize an SPKI object for an ML-DSA public key.
Definition x509spki.c:959
QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_initialize_ml_kem(qsc_x509_subject_public_key_info *spki, qsc_x509_pqc_parameter_set parameterset, const uint8_t *publickey, size_t publickeylen)
Initialize an SPKI object for an ML-KEM public key.
Definition x509spki.c:1010
QSC_EXPORT_API size_t qsc_x509_named_curve_public_key_size(qsc_x509_named_curve curve)
Get the encoded public-key size for a named elliptic curve.
Definition x509spki.c:644
QSC_EXPORT_API qsc_asn1_status qsc_x509_algorithm_identifier_validate(const qsc_x509_algorithm_identifier *algorithm)
Definition x509spki.c:261
QSC_EXPORT_API bool qsc_x509_algorithm_identifier_is_mlkem(const qsc_x509_algorithm_identifier *algorithm)
Test whether an AlgorithmIdentifier denotes ML-KEM.
Definition x509spki.c:442
QSC_EXPORT_API bool qsc_x509_spki_is_uncompressed_ec_point(const qsc_x509_subject_public_key_info *spki)
Test whether an SPKI contains an uncompressed EC point.
Definition x509spki.c:660
QSC_EXPORT_API size_t qsc_x509_pqc_public_key_size(qsc_x509_pqc_parameter_set parameterset)
Get the expected public-key size for a PQC parameter set.
Definition x509spki.c:372
QSC_EXPORT_API qsc_asn1_status qsc_x509_spki_get_ec_coordinates(const qsc_x509_subject_public_key_info *spki, uint8_t *x, size_t xlen, uint8_t *y, size_t ylen)
Extract affine EC coordinates from an SPKI object.
Definition x509spki.c:836
QSC_EXPORT_API size_t qsc_x509_named_curve_coordinate_size(qsc_x509_named_curve curve)
Get the coordinate size for a named elliptic curve.
Definition x509spki.c:622