AERN: Authenticated Encrypted Relay Network 1.0.0.0a (A1)
A post quantum authenticated and encrypted proxy chain network
certificate.h
Go to the documentation of this file.
1/* 2025 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE: This software and all accompanying materials are the exclusive
5 * property of Quantum Resistant Cryptographic Solutions Corporation (QRCS).
6 * The intellectual and technical concepts contained within this implementation
7 * are proprietary to QRCS and its authorized licensors and are protected under
8 * applicable U.S. and international copyright, patent, and trade secret laws.
9 *
10 * CRYPTOGRAPHIC STANDAARS:
11 * - This software includes implementations of cryptographic algorithms such as
12 * SHA3, AES, and others. These algorithms are public domain or standardized
13 * by organizations such as NIST and are NOT the property of QRCS.
14 * - However, all source code, optimizations, and implementations in this library
15 * are original works of QRCS and are protected under this license.
16 *
17 * RESTRICTIONS:
18 * - Redistribution, modification, or unauthorized distribution of this software,
19 * in whole or in part, is strictly prohibited.
20 * - This software is provided for non-commercial, educational, and research
21 * purposes only. Commercial use in any form is expressly forbidden.
22 * - Licensing and authorized distribution are solely at the discretion of QRCS.
23 * - Any use of this software implies acceptance of these restrictions.
24 *
25 * DISCLAIMER:
26 * This software is provided "as is," without warranty of any kind, express or
27 * implied, including but not limited to warranties of merchantability or fitness
28 * for a particular purpose. QRCS disclaims all liability for any direct, indirect,
29 * incidental, or consequential damages resulting from the use or misuse of this software.
30 *
31 * FULL LICENSE:
32 * This software is subject to the **Quantum Resistant Cryptographic Solutions
33 * Proprietary License (QRCS-PL)**. The complete license terms are included
34 * in the LICENSE.txt file distributed with this software.
35 *
36 * Written by: John G. Underhill
37 * Contact: contact@qrcscorp.ca
38 */
39
40#ifndef AERN_CERTIFICATE_H
41#define AERN_CERTIFICATE_H
42
43#include "aern.h"
44
96
97
98/* Function Prototypes */
99
107AERN_EXPORT_API aern_configuration_sets aern_certificate_algorithm_decode(const char* name);
108
117
124AERN_EXPORT_API void aern_certificate_algorithm_encode(char* name, aern_configuration_sets conf);
125
138
148AERN_EXPORT_API void aern_certificate_child_copy(aern_child_certificate* output, const aern_child_certificate* input);
149
162AERN_EXPORT_API void aern_certificate_child_create(aern_child_certificate* child, const uint8_t* pubkey, const aern_certificate_expiration* expiration, const char* issuer, aern_network_designations designation);
163
175AERN_EXPORT_API bool aern_certificate_child_decode(aern_child_certificate* child, const char enck[AERN_CHILD_CERTIFICATE_STRING_SIZE]);
176
185AERN_EXPORT_API void aern_certificate_child_deserialize(aern_child_certificate* child, const uint8_t* input);
186
197AERN_EXPORT_API size_t aern_certificate_child_encode(char enck[AERN_CHILD_CERTIFICATE_STRING_SIZE], const aern_child_certificate* child);
198
206AERN_EXPORT_API void aern_certificate_child_erase(aern_child_certificate* child);
207
219AERN_EXPORT_API bool aern_certificate_child_file_to_struct(const char* fpath, aern_child_certificate* child);
220
230AERN_EXPORT_API void aern_certificate_child_hash(uint8_t* output, const aern_child_certificate* child);
231
242AERN_EXPORT_API bool aern_certificate_child_is_valid(const aern_child_certificate* child);
243
258AERN_EXPORT_API bool aern_certificate_child_message_verify(uint8_t* message, size_t* msglen, const uint8_t* signature, size_t siglen, const aern_child_certificate* child);
259
266AERN_EXPORT_API void aern_certificate_child_serialize(uint8_t* output, const aern_child_certificate* child);
267
282AERN_EXPORT_API bool aern_certificate_signature_hash_verify(const uint8_t* signature, size_t siglen, const uint8_t* message, size_t msglen, const aern_child_certificate* lcert);
283
292AERN_EXPORT_API bool aern_certificate_child_struct_to_file(const char* fpath, const aern_child_certificate* child);
293
301AERN_EXPORT_API aern_network_designations aern_certificate_designation_decode(const char* sdsg);
302
311AERN_EXPORT_API size_t aern_certificate_designation_encode(char* sdsg, aern_network_designations designation);
312
322AERN_EXPORT_API void aern_certificate_expiration_set_days(aern_certificate_expiration* expiration, uint16_t start, uint16_t duration);
323
331AERN_EXPORT_API void aern_certificate_expiration_set_seconds(aern_certificate_expiration* expiration, uint64_t start, uint64_t period);
332
340AERN_EXPORT_API bool aern_certificate_expiration_time_verify(const aern_certificate_expiration* expiration);
341
355AERN_EXPORT_API size_t aern_certificate_message_hash_sign(uint8_t* signature, const uint8_t* sigkey, const uint8_t* message, size_t msglen);
356
367AERN_EXPORT_API bool aern_certificate_root_compare(const aern_root_certificate* a, const aern_root_certificate* b);
368
380AERN_EXPORT_API void aern_certificate_root_create(aern_root_certificate* root, const uint8_t* pubkey, const aern_certificate_expiration* expiration, const char* issuer);
381
392AERN_EXPORT_API bool aern_certificate_root_decode(aern_root_certificate* root, const char* enck);
393
400AERN_EXPORT_API void aern_certificate_root_deserialize(aern_root_certificate* root, const uint8_t* input);
401
412AERN_EXPORT_API size_t aern_certificate_root_encode(char* enck, const aern_root_certificate* root);
413
421AERN_EXPORT_API void aern_certificate_root_erase(aern_root_certificate* root);
422
431AERN_EXPORT_API bool aern_certificate_root_file_to_struct(const char* fpath, aern_root_certificate* root);
432
442AERN_EXPORT_API void aern_certificate_root_hash(uint8_t* output, const aern_root_certificate* root);
443
450AERN_EXPORT_API void aern_certificate_root_serialize(uint8_t* output, const aern_root_certificate* root);
451
464AERN_EXPORT_API size_t aern_certificate_root_sign(aern_child_certificate* child, const aern_root_certificate* root, const uint8_t* rsigkey);
465
477AERN_EXPORT_API bool aern_certificate_root_signature_verify(const aern_child_certificate* child, const aern_root_certificate* root);
478
487AERN_EXPORT_API bool aern_certificate_root_struct_to_file(const char* fpath, const aern_root_certificate* root);
488
499AERN_EXPORT_API bool aern_certificate_root_is_valid(const aern_root_certificate* root);
500
510
521AERN_EXPORT_API size_t aern_certificate_signature_sign_message(uint8_t* signature, const uint8_t* message, size_t msglen, const uint8_t* prikey);
522
534AERN_EXPORT_API bool aern_certificate_signature_verify_message(const uint8_t* message, size_t msglen, const uint8_t* signature, size_t siglen, const uint8_t* pubkey);
535
536#if defined(AERN_DEBUG_TESTS_RUN)
548AERN_EXPORT_API bool aern_certificate_functions_test(void);
549#endif
550
551#endif
AERN Common Definitions and Protocol Configuration.
aern_configuration_sets
The AERN algorithm configuration sets.
Definition aern.h:1117
aern_network_designations
The AERN device designation.
Definition aern.h:1140
AERN_EXPORT_API void aern_certificate_root_erase(aern_root_certificate *root)
Delete (erase) a root certificate.
Definition certificate.c:1074
AERN_EXPORT_API void aern_certificate_algorithm_encode(char *name, aern_configuration_sets conf)
Encode the protocol-set enumerator into its string form.
Definition certificate.c:89
AERN_EXPORT_API void aern_certificate_child_hash(uint8_t *output, const aern_child_certificate *child)
Compute the cryptographic hash of a child certificate.
Definition certificate.c:529
AERN_EXPORT_API bool aern_certificate_expiration_time_verify(const aern_certificate_expiration *expiration)
Verify the expiration time against the current UTC time.
Definition certificate.c:800
AERN_EXPORT_API void aern_certificate_expiration_set_seconds(aern_certificate_expiration *expiration, uint64_t start, uint64_t period)
Set the expiration seconds on a certificate expiration structure.
Definition certificate.c:789
AERN_EXPORT_API size_t aern_certificate_message_hash_sign(uint8_t *signature, const uint8_t *sigkey, const uint8_t *message, size_t msglen)
Hash a message and sign the hash.
Definition certificate.c:822
AERN_EXPORT_API bool aern_certificate_root_struct_to_file(const char *fpath, const aern_root_certificate *root)
Write a root certificate structure to a file.
Definition certificate.c:1247
AERN_EXPORT_API bool aern_certificate_algorithm_enabled(aern_configuration_sets conf)
Test if the specified protocol-set is enabled on this system.
Definition certificate.c:154
AERN_EXPORT_API bool aern_certificate_child_decode(aern_child_certificate *child, const char enck[AERN_CHILD_CERTIFICATE_STRING_SIZE])
Decode a child certificate string into a certificate structure.
Definition certificate.c:233
AERN_EXPORT_API void aern_certificate_root_deserialize(aern_root_certificate *root, const uint8_t *input)
Deserialize a root certificate from a byte array.
Definition certificate.c:955
AERN_EXPORT_API bool aern_certificate_signature_hash_verify(const uint8_t *signature, size_t siglen, const uint8_t *message, size_t msglen, const aern_child_certificate *lcert)
Verify that a signature hash matches a computed message hash using a child certificate.
Definition certificate.c:639
AERN_EXPORT_API bool aern_certificate_root_is_valid(const aern_root_certificate *root)
Validate a root certificate.
Definition certificate.c:1142
AERN_EXPORT_API bool aern_certificate_child_file_to_struct(const char *fpath, aern_child_certificate *child)
Copy a serialized certificate from a file into a child certificate structure.
Definition certificate.c:503
AERN_EXPORT_API void aern_certificate_expiration_set_days(aern_certificate_expiration *expiration, uint16_t start, uint16_t duration)
Set the expiration days on a certificate expiration structure.
Definition certificate.c:778
AERN_EXPORT_API bool aern_certificate_root_signature_verify(const aern_child_certificate *child, const aern_root_certificate *root)
Verify a child certificate against a root certificate.
Definition certificate.c:1217
AERN_EXPORT_API void aern_certificate_root_create(aern_root_certificate *root, const uint8_t *pubkey, const aern_certificate_expiration *expiration, const char *issuer)
Create a root certificate.
Definition certificate.c:871
AERN_EXPORT_API bool aern_certificate_root_compare(const aern_root_certificate *a, const aern_root_certificate *b)
Compare two root certificates for equivalence.
Definition certificate.c:844
AERN_EXPORT_API size_t aern_certificate_signature_sign_message(uint8_t *signature, const uint8_t *message, size_t msglen, const uint8_t *prikey)
Sign a message using the asymmetric signature scheme.
Definition certificate.c:1277
AERN_EXPORT_API size_t aern_certificate_root_encode(char *enck, const aern_root_certificate *root)
Encode a public root certificate into a human-readable string.
Definition certificate.c:978
AERN_EXPORT_API void aern_certificate_signature_generate_keypair(aern_signature_keypair *keypair)
Generate and encode an asymmetric signature scheme keypair.
Definition certificate.c:1267
AERN_EXPORT_API void aern_certificate_root_serialize(uint8_t *output, const aern_root_certificate *root)
Serialize a root certificate into a contiguous byte array.
Definition certificate.c:1172
AERN_EXPORT_API void aern_certificate_root_hash(uint8_t *output, const aern_root_certificate *root)
Compute the cryptographic hash of a root certificate.
Definition certificate.c:1115
AERN_EXPORT_API aern_configuration_sets aern_certificate_algorithm_decode(const char *name)
Decode the string algorithm-set number to the enumerated representation.
Definition certificate.c:14
AERN_EXPORT_API bool aern_certificate_root_decode(aern_root_certificate *root, const char *enck)
Decode a root certificate string into a certificate structure.
Definition certificate.c:889
AERN_EXPORT_API void aern_certificate_child_copy(aern_child_certificate *output, const aern_child_certificate *input)
Copy a child certificate structure.
Definition certificate.c:194
AERN_EXPORT_API void aern_certificate_child_erase(aern_child_certificate *child)
Delete (erase) a child certificate.
Definition certificate.c:485
AERN_EXPORT_API bool aern_certificate_child_struct_to_file(const char *fpath, const aern_child_certificate *child)
Write a child certificate structure to a file.
Definition certificate.c:671
AERN_EXPORT_API void aern_certificate_child_create(aern_child_certificate *child, const uint8_t *pubkey, const aern_certificate_expiration *expiration, const char *issuer, aern_network_designations designation)
Create a child certificate.
Definition certificate.c:213
AERN_EXPORT_API bool aern_certificate_signature_verify_message(const uint8_t *message, size_t msglen, const uint8_t *signature, size_t siglen, const uint8_t *pubkey)
Verify a message signature using the asymmetric signature scheme.
Definition certificate.c:1297
AERN_EXPORT_API void aern_certificate_child_serialize(uint8_t *output, const aern_child_certificate *child)
Serialize a child certificate into a contiguous byte array.
Definition certificate.c:610
AERN_EXPORT_API bool aern_certificate_child_are_equal(const aern_child_certificate *a, const aern_child_certificate *b)
Compare two child certificates for equivalence.
Definition certificate.c:161
AERN_EXPORT_API size_t aern_certificate_child_encode(char enck[AERN_CHILD_CERTIFICATE_STRING_SIZE], const aern_child_certificate *child)
Encode a public child certificate into a human-readable string.
Definition certificate.c:344
AERN_EXPORT_API bool aern_certificate_child_message_verify(uint8_t *message, size_t *msglen, const uint8_t *signature, size_t siglen, const aern_child_certificate *child)
Verify a message signature using a child certificate.
Definition certificate.c:589
AERN_EXPORT_API aern_network_designations aern_certificate_designation_decode(const char *sdsg)
Decode the network-designation string to its enumerated representation.
Definition certificate.c:696
AERN_EXPORT_API void aern_certificate_child_deserialize(aern_child_certificate *child, const uint8_t *input)
Deserialize a child certificate from a byte array.
Definition certificate.c:315
AERN_EXPORT_API bool aern_certificate_child_is_valid(const aern_child_certificate *child)
Test a child certificate for a valid format and expiration.
Definition certificate.c:557
AERN_EXPORT_API size_t aern_certificate_root_sign(aern_child_certificate *child, const aern_root_certificate *root, const uint8_t *rsigkey)
Sign a child certificate with the root certificate.
Definition certificate.c:1195
AERN_EXPORT_API bool aern_certificate_root_file_to_struct(const char *fpath, aern_root_certificate *root)
Copy a serialized root certificate from a file into a root certificate structure.
Definition certificate.c:1089
AERN_EXPORT_API size_t aern_certificate_designation_encode(char *sdsg, aern_network_designations designation)
Encode the network-designation enumerator into a string.
Definition certificate.c:739
The certificate expiration time structure.
Definition aern.h:1308
The child certificate structure.
Definition aern.h:1318
The root certificate structure.
Definition aern.h:1436
The AERN asymmetric signature scheme key container.
Definition aern.h:1461