AERN: Authenticated Encrypted Relay Network 1.0.0.0a (A1)
A post quantum authenticated and encrypted proxy chain network
network.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_NETWORK_H
41#define AERN_NETWORK_H
42
43#include "aerncommon.h"
44#include "topology.h"
45#include "collection.h"
46#include "sha3.h"
47#include "socket.h"
48
81
92
103
114
127
138
150
163
168AERN_EXPORT_API typedef struct aern_network_fkey_response_state
169{
170 qsc_socket* csock;
171 uint8_t* frag;
173 const uint8_t* mfk;
176
187
198
211
224
238
252
266
281
293
306
311AERN_EXPORT_API typedef struct aern_network_resign_request_state
312{
313 const char* address;
315 const uint8_t* sigkey;
317
329
341
352
366
378
390
402
417
434
447
460
473
486
487/*---------------------------------------------------------------------------
488 Public Function Prototypes
489---------------------------------------------------------------------------*/
490
498
507
514AERN_EXPORT_API uint16_t aern_network_application_to_port(aern_network_designations tnode);
515
524AERN_EXPORT_API void aern_network_broadcast_message(const aern_topology_list_state* list, const uint8_t* message, size_t msglen, aern_network_designations tnode);
525
534AERN_EXPORT_API qsc_socket_exceptions aern_network_connect_to_device(qsc_socket* csock, const char* address, aern_network_designations designation);
535
543
552
561AERN_EXPORT_API qsc_socket_exceptions aern_network_connect_to_address(qsc_socket* csock, const char* address, uint16_t port);
562
570
579
586AERN_EXPORT_API bool aern_network_get_local_address(char address[AERN_CERTIFICATE_ADDRESS_SIZE]);
587
595AERN_EXPORT_API aern_protocol_errors aern_network_send_error(const qsc_socket* csock, aern_protocol_errors error);
596
602AERN_EXPORT_API void aern_network_socket_dispose(qsc_socket* csock);
603
611
619
627
635
644
653
661
670
678
687
695
704
712
721
729
738
746
755
764
773
774#if defined(AERN_DEBUG_MODE)
775AERN_EXPORT_API bool aern_network_protocols_test(void);
776#endif
777
778#endif
#define AERN_CERTIFICATE_ADDRESS_SIZE
The maximum IP address length.
Definition aern.h:776
aern_protocol_errors
The AERN protocol error values.
Definition aern.h:1244
aern_network_designations
The AERN device designation.
Definition aern.h:1140
AERN_EXPORT_API aern_protocol_errors aern_network_converge_response(const aern_network_converge_response_state *state, const aern_network_packet *packetin)
Respond to a ads network converge request.
Definition network.c:804
AERN_EXPORT_API aern_protocol_errors aern_network_revoke_response(aern_network_revoke_response_state *state, const aern_network_packet *packetin)
Verify a revocation request sent from the ADC.
Definition network.c:2665
AERN_EXPORT_API bool aern_network_get_local_address(char address[AERN_CERTIFICATE_ADDRESS_SIZE])
Get the local IP address.
Definition network.c:3431
AERN_EXPORT_API aern_protocol_errors aern_network_resign_request(const aern_network_resign_request_state *state)
Send a resign request to the ads.
Definition network.c:2464
AERN_EXPORT_API aern_protocol_errors aern_network_mfk_exchange_response(aern_network_mfk_response_state *state, const aern_network_packet *packetin)
Request and execute a key exchange response for a master fragmentation key.
Definition network.c:1562
AERN_EXPORT_API aern_protocol_errors aern_network_incremental_update_response(const aern_network_incremental_update_response_state *state, const aern_network_packet *packetin)
Send a copy of a certificate to a remote host.
Definition network.c:1254
AERN_EXPORT_API aern_protocol_errors aern_network_mfk_exchange_request(aern_network_mfk_request_state *state)
Request and execute a key exchange request for a master fragmentation key.
Definition network.c:1375
AERN_EXPORT_API qsc_socket_exceptions aern_network_connect_to_address(qsc_socket *csock, const char *address, uint16_t port)
Connect a socket to a remote address and port.
Definition network.c:3376
AERN_EXPORT_API void aern_network_broadcast_message(const aern_topology_list_state *list, const uint8_t *message, size_t msglen, aern_network_designations tnode)
Broadcast a message to a node type on the network.
Definition network.c:3283
AERN_EXPORT_API aern_protocol_errors aern_network_incremental_update_request(const aern_network_incremental_update_request_state *state)
Send an incremental update request.
Definition network.c:1153
AERN_EXPORT_API aern_protocol_errors aern_network_remote_signing_request(aern_network_remote_signing_request_state *state)
Send a certificate signing request from the ADC to the ARS.
Definition network.c:2243
AERN_EXPORT_API aern_protocol_errors aern_network_certificate_verify(const aern_child_certificate *ccert, const aern_root_certificate *root)
Verify a certificates format and root signature.
Definition network.c:3188
AERN_EXPORT_API aern_protocol_errors aern_network_fkey_response(aern_network_fkey_response_state *state, const aern_network_packet *packetin)
Respond and execute a key exchange for a fragmentation key.
Definition network.c:1059
AERN_EXPORT_API aern_protocol_errors aern_network_register_response(aern_network_register_response_state *state, const aern_network_packet *packetin)
Send a join response to the aps.
Definition network.c:1797
AERN_EXPORT_API aern_protocol_errors aern_network_register_update_response(aern_network_register_update_response_state *state, const aern_network_packet *packetin)
Send a join update response to the server or client.
Definition network.c:2132
AERN_EXPORT_API qsc_socket_exceptions aern_network_connect_to_device(qsc_socket *csock, const char *address, aern_network_designations designation)
Connect a socket to a remote address.
Definition network.c:3316
AERN_EXPORT_API aern_protocol_errors aern_network_announce_broadcast(aern_network_announce_request_state *state)
Announce a certificate using the ads, and broadcast it to the network.
Definition network.c:475
AERN_EXPORT_API aern_protocol_errors aern_network_converge_request(const aern_network_converge_request_state *state)
The ADC sends out a convergence request, and broadcast it to the network.
Definition network.c:638
AERN_EXPORT_API aern_protocol_errors aern_network_register_request(aern_network_register_request_state *state)
Send an APS join request to the ADC.
Definition network.c:1682
AERN_EXPORT_API aern_protocol_errors aern_network_topological_query_response(const aern_network_topological_query_response_state *state, const aern_network_packet *packetin)
Respond to a topological query request.
Definition network.c:2886
AERN_EXPORT_API aern_protocol_errors aern_network_revoke_broadcast(aern_network_revoke_request_state *state)
Send a revocation request from the ADC.
Definition network.c:2603
AERN_EXPORT_API aern_protocol_errors aern_network_topological_status_response(const aern_network_topological_status_response_state *state, const aern_network_packet *packetin)
Process the status response from the client device and send a response.
Definition network.c:3137
AERN_EXPORT_API aern_protocol_errors aern_network_resign_response(aern_network_resign_response_state *state, const aern_network_packet *packetin)
Send a resign response to the aps or server.
Definition network.c:2523
AERN_EXPORT_API aern_protocol_errors aern_network_send_error(const qsc_socket *csock, aern_protocol_errors error)
Send an error message.
Definition network.c:3458
AERN_EXPORT_API aern_network_designations aern_network_port_to_application(uint16_t port)
Gets the network designation from a port number.
Definition network.c:3223
AERN_EXPORT_API aern_protocol_errors aern_network_remote_signing_response(aern_network_remote_signing_response_state *state, const aern_network_packet *packetin)
Send a signed certificate response from the ARS to the ADC.
Definition network.c:2392
AERN_EXPORT_API aern_protocol_errors aern_network_announce_response(aern_network_announce_response_state *state, const aern_network_packet *packetin)
Process a announce response message.
Definition network.c:518
AERN_EXPORT_API aern_protocol_errors aern_network_register_update_request(aern_network_register_update_request_state *state)
Send a MAS or Client join update request to the ADC.
Definition network.c:1945
AERN_EXPORT_API uint16_t aern_network_application_to_port(aern_network_designations tnode)
Gets the network designation from a port number.
Definition network.c:3251
AERN_EXPORT_API aern_protocol_errors aern_network_fkey_request(aern_network_fkey_request_state *state)
Request and execute a key exchange for a fragmentation key.
Definition network.c:928
AERN_EXPORT_API void aern_network_socket_dispose(qsc_socket *csock)
Shut down and dispose of a socket instance.
Definition network.c:3500
AERN_EXPORT_API aern_protocol_errors aern_network_topological_status_request(const aern_network_topological_status_request_state *state)
Send a status request from the ADC to a client device.
Definition network.c:3007
AERN_EXPORT_API aern_protocol_errors aern_network_topological_query_request(const aern_network_topological_query_request_state *state)
Query a device for its topological information.
Definition network.c:2755
The child certificate structure.
Definition aern.h:1318
The AERN asymmetric cipher key container.
Definition aern.h:1471
The AERN socket connection state structure.
Definition aern.h:1382
The certificate announce request function state.
Definition network.h:87
const aern_topology_list_state * list
Definition network.h:88
const aern_topology_node_state * rnode
Definition network.h:89
const uint8_t * sigkey
Definition network.h:90
The certificate announce response function state.
Definition network.h:98
const aern_root_certificate * root
Definition network.h:101
aern_topology_node_state * rnode
Definition network.h:100
const aern_child_certificate * dcert
Definition network.h:99
The certificate converge request function state.
Definition network.h:109
const uint8_t * sigkey
Definition network.h:112
aern_topology_node_state * rnode
Definition network.h:111
const aern_child_certificate * rcert
Definition network.h:110
The certificate converge response function state.
Definition network.h:120
const aern_topology_node_state * lnode
Definition network.h:123
const qsc_socket * csock
Definition network.h:121
const uint8_t * sigkey
Definition network.h:125
const aern_child_certificate * lcert
Definition network.h:122
const aern_child_certificate * rcert
Definition network.h:124
The certificate converge verify function state.
Definition network.h:133
const aern_topology_node_state * rnode
Definition network.h:135
const qsc_socket * csock
Definition network.h:134
const aern_child_certificate * rcert
Definition network.h:136
The certificate converge update verify function state.
Definition network.h:144
const aern_root_certificate * root
Definition network.h:147
const qsc_socket * csock
Definition network.h:145
const uint8_t * sigkey
Definition network.h:148
aern_child_certificate * rcert
Definition network.h:146
The fkey request function state.
Definition network.h:156
const aern_topology_node_state * rnode
Definition network.h:160
const aern_topology_node_state * lnode
Definition network.h:158
const uint8_t * mfk
Definition network.h:159
uint8_t * frag
Definition network.h:157
uint8_t * token
Definition network.h:161
The fkey response function state.
Definition network.h:169
const aern_topology_node_state * rnode
Definition network.h:174
const aern_topology_node_state * lnode
Definition network.h:172
const uint8_t * mfk
Definition network.h:173
uint8_t * frag
Definition network.h:171
qsc_socket * csock
Definition network.h:170
The fkey collection request function state.
Definition network.h:408
const aern_topology_list_state * list
Definition network.h:411
qsc_collection_state * lmfk
Definition network.h:412
const aern_topology_node_state * rnode
Definition network.h:414
const aern_topology_node_state * lnode
Definition network.h:413
uint8_t * hfkey
Definition network.h:410
qsc_socket * csock
Definition network.h:409
uint8_t * token
Definition network.h:415
The fkey collection response function state.
Definition network.h:423
const aern_topology_list_state * list
Definition network.h:427
qsc_collection_state * lmfk
Definition network.h:428
const aern_topology_node_state * rnode
Definition network.h:430
const aern_topology_node_state * lnode
Definition network.h:429
const qsc_socket * csock
Definition network.h:424
uint8_t * hfkey
Definition network.h:426
uint8_t * frag
Definition network.h:425
uint8_t * ctok
Definition network.h:431
uint8_t * mtok
Definition network.h:432
The fkey query request function state.
Definition network.h:440
const aern_topology_list_state * list
Definition network.h:441
const uint8_t * token
Definition network.h:445
qsc_collection_state * lmfk
Definition network.h:442
const aern_topology_node_state * rnode
Definition network.h:444
const aern_topology_node_state * lnode
Definition network.h:443
The fkey query response function state.
Definition network.h:453
const aern_topology_list_state * list
Definition network.h:456
qsc_collection_state * lmfk
Definition network.h:457
const aern_topology_node_state * rnode
Definition network.h:458
const aern_topology_node_state * lnode
Definition network.h:455
const qsc_socket * csock
Definition network.h:454
The incremental update request function state.
Definition network.h:182
const aern_root_certificate * root
Definition network.h:185
const aern_topology_node_state * rnode
Definition network.h:184
aern_child_certificate * rcert
Definition network.h:183
The incremental update response function state.
Definition network.h:193
const qsc_socket * csock
Definition network.h:194
const uint8_t * sigkey
Definition network.h:196
const aern_child_certificate * rcert
Definition network.h:195
The key exchange request function state.
Definition network.h:466
const aern_topology_list_state * list
Definition network.h:469
const uint8_t * token
Definition network.h:471
const char * address
Definition network.h:467
aern_connection_state * cns
Definition network.h:468
const aern_child_certificate * rcert
Definition network.h:470
The key exchange response function state.
Definition network.h:479
const aern_topology_list_state * list
Definition network.h:482
const qsc_socket * csock
Definition network.h:481
const uint8_t * sigkey
Definition network.h:484
aern_connection_state * cns
Definition network.h:480
const aern_child_certificate * rcert
Definition network.h:483
The mfk request function state.
Definition network.h:258
const aern_root_certificate * root
Definition network.h:263
const aern_topology_node_state * rnode
Definition network.h:262
const uint8_t * sigkey
Definition network.h:264
const aern_child_certificate * lcert
Definition network.h:259
const aern_child_certificate * rcert
Definition network.h:261
uint8_t * mfk
Definition network.h:260
The mfk response function state.
Definition network.h:272
const aern_root_certificate * root
Definition network.h:278
const qsc_socket * csock
Definition network.h:273
const uint8_t * sigkey
Definition network.h:279
aern_child_certificate * rcert
Definition network.h:277
aern_cipher_keypair ckp
Definition network.h:274
const aern_child_certificate * lcert
Definition network.h:275
uint8_t * mfk
Definition network.h:276
The AERN packet structure.
Definition aern.h:1419
The network join request function state.
Definition network.h:204
const aern_root_certificate * root
Definition network.h:208
const char * address
Definition network.h:205
const uint8_t * sigkey
Definition network.h:209
aern_child_certificate * rcert
Definition network.h:207
const aern_child_certificate * lcert
Definition network.h:206
The network join response function state.
Definition network.h:217
const aern_root_certificate * root
Definition network.h:221
const qsc_socket * csock
Definition network.h:218
const uint8_t * sigkey
Definition network.h:222
aern_child_certificate * rcert
Definition network.h:220
const aern_child_certificate * lcert
Definition network.h:219
The network join request function state.
Definition network.h:230
const aern_root_certificate * root
Definition network.h:235
aern_topology_list_state * list
Definition network.h:233
const char * address
Definition network.h:231
const uint8_t * sigkey
Definition network.h:236
aern_child_certificate * rcert
Definition network.h:234
const aern_child_certificate * lcert
Definition network.h:232
The network join update response function state.
Definition network.h:244
const aern_topology_list_state * list
Definition network.h:247
const aern_root_certificate * root
Definition network.h:249
const qsc_socket * csock
Definition network.h:245
const uint8_t * sigkey
Definition network.h:250
aern_child_certificate * rcert
Definition network.h:248
const aern_child_certificate * lcert
Definition network.h:246
The certificate remote signing request function state.
Definition network.h:287
const aern_root_certificate * root
Definition network.h:290
const char * address
Definition network.h:288
const uint8_t * sigkey
Definition network.h:291
aern_child_certificate * rcert
Definition network.h:289
The certificate remote signing response function state.
Definition network.h:299
const aern_root_certificate * root
Definition network.h:303
aern_child_certificate * dcert
Definition network.h:301
const uint8_t * sigkey
Definition network.h:304
aern_child_certificate * rcert
Definition network.h:302
qsc_socket * csock
Definition network.h:300
The certificate resign request function state.
Definition network.h:312
const aern_topology_node_state * lnode
Definition network.h:314
const char * address
Definition network.h:313
const uint8_t * sigkey
Definition network.h:315
The certificate resign request function state.
Definition network.h:323
const aern_topology_list_state * list
Definition network.h:324
const uint8_t * sigkey
Definition network.h:327
aern_topology_node_state * rnode
Definition network.h:326
aern_child_certificate * rcert
Definition network.h:325
The certificate revoke request function state.
Definition network.h:335
const aern_topology_list_state * list
Definition network.h:337
const aern_topology_node_state * rnode
Definition network.h:338
const uint8_t * sigkey
Definition network.h:339
aern_network_designations designation
Definition network.h:336
The certificate revoke response function state.
Definition network.h:347
const aern_topology_list_state * list
Definition network.h:348
aern_topology_node_state * rnode
Definition network.h:349
const aern_child_certificate * dcert
Definition network.h:350
The topological query request function state.
Definition network.h:358
aern_topology_node_state * dnode
Definition network.h:360
const uint8_t * sigkey
Definition network.h:364
const uint8_t * serial
Definition network.h:363
aern_topology_node_state * rnode
Definition network.h:362
const aern_child_certificate * dcert
Definition network.h:359
const char * issuer
Definition network.h:361
const aern_topology_node_state * rnode
Definition network.h:375
const aern_child_certificate * ccert
Definition network.h:374
const qsc_socket * csock
Definition network.h:373
const uint8_t * sigkey
Definition network.h:376
The topological status request function state.
Definition network.h:384
const aern_topology_node_state * rnode
Definition network.h:387
const aern_topology_node_state * lnode
Definition network.h:385
const uint8_t * sigkey
Definition network.h:388
const aern_child_certificate * rcert
Definition network.h:386
The topological status response function state.
Definition network.h:396
const aern_topology_node_state * lnode
Definition network.h:398
const qsc_socket * csock
Definition network.h:397
const uint8_t * sigkey
Definition network.h:400
const aern_child_certificate * rcert
Definition network.h:399
The root certificate structure.
Definition aern.h:1436
The AERN topology list structure.
Definition topology.h:185
The AERN topology node structure.
Definition topology.h:169
The AERN topology functions.