ndn-lite
sign-on-basic-client.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) Edward Lu
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v3.0. See the file LICENSE in the top level
6  * directory for more details.
7  *
8  * See AUTHORS.md for complete list of NDN IOT PKG authors and contributors.
9  */
10 
11 #ifndef SIGN_ON_BASIC_CLIENT_H
12 #define SIGN_ON_BASIC_CLIENT_H
13 
15 
17 
18 #include <stddef.h>
19 #include <stdint.h>
20 
31 typedef int (*sign_on_basic_sec_gen_sha256_hash)(const uint8_t *payload, uint32_t payload_len,
32  uint8_t *output);
33 
51 typedef int (*sign_on_basic_sec_gen_n1_keypair)(uint8_t *pub_key_buf, uint32_t pub_key_buf_len,
52  uint32_t *pub_key_output_len,
53  uint8_t *pri_key_buf, uint32_t pri_key_buf_len,
54  uint32_t *pri_key_output_len);
55 
56 
72 typedef int (*sign_on_basic_sec_gen_kt)(const uint8_t *N2_pub_key, uint32_t N2_pub_key_len,
73  const uint8_t *N1_pri_key, uint32_t N1_pri_key_len,
74  uint8_t *output_buf, uint32_t output_buf_len,
75  uint32_t *output_len);
76 
97 typedef int (*sign_on_basic_sec_gen_btstrp_rqst_sig)(const uint8_t *KS_pri_p, const uint8_t *payload,
98  uint32_t payload_len, uint8_t *output_buf,
99  uint32_t output_buf_len, uint32_t *output_len);
100 
121 typedef int (*sign_on_basic_sec_vrfy_btstrp_rqst_rspns_sig)(const uint8_t *payload, uint32_t payload_len,
122  const uint8_t *sig, uint32_t sig_len,
123  const uint8_t *secure_sign_on_code_p,
124  uint32_t secure_sign_on_code_len);
125 
146 typedef int (*sign_on_basic_sec_gen_cert_rqst_sig)(const uint8_t *KS_pri_p, const uint8_t *payload,
147  uint32_t payload_len, uint8_t *output_buf,
148  uint32_t output_buf_len, uint32_t *output_len);
149 
169 typedef int (*sign_on_basic_sec_vrfy_cert_rqst_rspns_sig)(const uint8_t *payload, uint32_t payload_len,
170  const uint8_t *sig, uint32_t sig_len,
171  const uint8_t *KT_p, uint32_t KT_len);
172 
189 typedef int (*sign_on_basic_sec_decrypt_kd_pri)(uint8_t *KT_p, uint32_t KT_len,
190  const uint8_t *encrypted_kd_pri,
191  uint32_t encrypted_kd_pri_len,
192  uint8_t *decrypted_kd_pri,
193  uint32_t decrypted_kd_pri_buf_len,
194  uint32_t *decrypted_kd_pri_len);
195 
215 typedef int (*sign_on_basic_sec_gen_fin_msg_sig)(const uint8_t *KS_pri_p, const uint8_t *payload,
216  uint32_t payload_len, uint8_t *output_buf,
217  uint32_t output_buf_len, uint32_t *output_len);
218 
259 };
260 
316 typedef struct sign_on_basic_client {
317 
319  uint32_t KS_pub_len;
320 
322  uint32_t KS_pri_len;
323 
326 
329 
332 
334  uint32_t KT_len;
335 
337  uint32_t N1_pub_len;
338 
340  uint32_t N1_pri_len;
341 
343  uint32_t N2_pub_len;
344 
347 
349  uint32_t KD_pub_cert_len;
350 
352  uint32_t KD_pri_len;
353 
354  uint8_t status;
355 
357 
359 
383  uint8_t variant,
385  const uint8_t *device_identifier_p, uint32_t device_identifier_len,
386  const uint8_t *device_capabilities_p, uint32_t device_capabilities_len,
387  const uint8_t *secure_sign_on_code_p,
388  const uint8_t *KS_pub_p, uint32_t KS_pub_len,
389  const uint8_t *KS_pri_p, uint32_t KS_pri_len);
390 
404 int cnstrct_btstrp_rqst(uint8_t *buf_p, uint32_t buf_len,
405  uint32_t *output_len_p,
407 
422 int prcs_btstrp_rqst_rspns(const uint8_t *btstrp_rqst_rspns_buf_p,
423  uint32_t btstrp_rqst_rspns_buf_len,
425 
439 int cnstrct_cert_rqst(uint8_t *buf_p, uint32_t buf_len, uint32_t *output_len_p,
441 
456 int prcs_cert_rqst_rspns(const uint8_t *cert_rqst_rspns_buf_p,
457  uint32_t cert_rqst_rspns_buf_len,
459 
475 int cnstrct_fin_msg(uint8_t *buf_p, uint32_t buf_len, uint32_t *output_len_p,
477 
478 #endif // SIGN_ON_BASIC_CLIENT_H
sign_on_basic_sec_vrfy_cert_rqst_rspns_sig vrfy_cert_rqst_rspns_sig
Definition: sign-on-basic-client.h:256
uint32_t KS_pub_len
Definition: sign-on-basic-client.h:319
uint8_t status
Definition: sign-on-basic-client.h:354
sign_on_basic_sec_gen_cert_rqst_sig gen_cert_rqst_sig
Definition: sign-on-basic-client.h:255
#define SIGN_ON_BASIC_CLIENT_KD_PUB_CERT_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for KD public key certificate.
Definition: sign-on-basic-client-consts.h:30
uint32_t KD_pri_len
Definition: sign-on-basic-client.h:352
#define SIGN_ON_BASIC_CLIENT_N2_PUB_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for N2 keypair public key.
Definition: sign-on-basic-client-consts.h:40
uint32_t trust_anchor_cert_len
Definition: sign-on-basic-client.h:346
uint32_t KT_len
Definition: sign-on-basic-client.h:334
uint8_t secure_sign_on_code_p[SIGN_ON_BASIC_CLIENT_SECURE_SIGN_ON_CODE_MAX_LENGTH]
Definition: sign-on-basic-client.h:330
uint32_t device_capabilities_len
Definition: sign-on-basic-client.h:328
uint32_t secure_sign_on_code_len
Definition: sign-on-basic-client.h:331
#define SIGN_ON_BASIC_CLIENT_KS_PRI_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for KS private key.
Definition: sign-on-basic-client-consts.h:35
sign_on_basic_sec_gen_n1_keypair gen_n1_keypair
Definition: sign-on-basic-client.h:251
uint8_t N2_pub_p[SIGN_ON_BASIC_CLIENT_N2_PUB_MAX_LENGTH]
Definition: sign-on-basic-client.h:342
uint32_t KD_pub_cert_len
Definition: sign-on-basic-client.h:349
Definition: sign-on-basic-client.h:316
uint8_t trust_anchor_cert_p[SIGN_ON_BASIC_CLIENT_TRUST_ANCHOR_CERT_MAX_LENGTH]
Definition: sign-on-basic-client.h:345
uint32_t N1_pri_len
Definition: sign-on-basic-client.h:340
sign_on_basic_sec_gen_btstrp_rqst_sig gen_btstrp_rqst_sig
Definition: sign-on-basic-client.h:253
uint32_t N2_pub_len
Definition: sign-on-basic-client.h:343
sign_on_basic_sec_gen_kt gen_kt
Definition: sign-on-basic-client.h:252
Definition: sign-on-basic-client.h:249
int cnstrct_btstrp_rqst(uint8_t *buf_p, uint32_t buf_len, uint32_t *output_len_p, sign_on_basic_client_t *sign_on_basic_client)
Construct a bootstrapping request.
Definition: sign-on-basic-client.c:69
struct sign_on_basic_sec_intf sec_intf
Definition: sign-on-basic-client.h:356
int(* sign_on_basic_sec_gen_n1_keypair)(uint8_t *pub_key_buf, uint32_t pub_key_buf_len, uint32_t *pub_key_output_len, uint8_t *pri_key_buf, uint32_t pri_key_buf_len, uint32_t *pri_key_output_len)
Generic function interface for generating the N1 keypair.
Definition: sign-on-basic-client.h:51
#define SIGN_ON_BASIC_CLIENT_SECURE_SIGN_ON_CODE_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for secure sign-on code.
Definition: sign-on-basic-client-consts.h:28
int(* sign_on_basic_sec_gen_btstrp_rqst_sig)(const uint8_t *KS_pri_p, const uint8_t *payload, uint32_t payload_len, uint8_t *output_buf, uint32_t output_buf_len, uint32_t *output_len)
Generic function interface for generating signature of bootstrapping request.
Definition: sign-on-basic-client.h:97
uint8_t device_capabilities_p[SIGN_ON_BASIC_CLIENT_DEVICE_CAPABILITIES_MAX_LENGTH]
Definition: sign-on-basic-client.h:327
int(* sign_on_basic_sec_vrfy_btstrp_rqst_rspns_sig)(const uint8_t *payload, uint32_t payload_len, const uint8_t *sig, uint32_t sig_len, const uint8_t *secure_sign_on_code_p, uint32_t secure_sign_on_code_len)
Generic function interface for verifying signature of bootstrapping request response.
Definition: sign-on-basic-client.h:121
sign_on_basic_sec_decrypt_kd_pri decrypt_kd_pri
Definition: sign-on-basic-client.h:257
#define SIGN_ON_BASIC_CLIENT_N1_PRI_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for N1 keypair private key.
Definition: sign-on-basic-client-consts.h:38
#define SIGN_ON_BASIC_CLIENT_DEVICE_IDENTIFIER_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for device identifier.
Definition: sign-on-basic-client-consts.h:24
uint8_t KS_pri_p[SIGN_ON_BASIC_CLIENT_KS_PRI_MAX_LENGTH]
Definition: sign-on-basic-client.h:321
sign_on_basic_sec_vrfy_btstrp_rqst_rspns_sig vrfy_btstrp_rqst_rspns_sig
Definition: sign-on-basic-client.h:254
#define SIGN_ON_BASIC_CLIENT_KD_PRI_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for KD private key.
Definition: sign-on-basic-client-consts.h:43
uint8_t device_identifier_p[SIGN_ON_BASIC_CLIENT_DEVICE_IDENTIFIER_MAX_LENGTH]
Definition: sign-on-basic-client.h:324
#define SIGN_ON_BASIC_CLIENT_N1_PUB_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for N1 keypair public key.
Definition: sign-on-basic-client-consts.h:37
#define SIGN_ON_BASIC_CLIENT_KT_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for KT.
Definition: sign-on-basic-client-consts.h:45
uint32_t N1_pub_len
Definition: sign-on-basic-client.h:337
int sign_on_basic_client_init(uint8_t variant, sign_on_basic_client_t *sign_on_basic_client, const uint8_t *device_identifier_p, uint32_t device_identifier_len, const uint8_t *device_capabilities_p, uint32_t device_capabilities_len, const uint8_t *secure_sign_on_code_p, const uint8_t *KS_pub_p, uint32_t KS_pub_len, const uint8_t *KS_pri_p, uint32_t KS_pri_len)
Initialize state for a sign_on_basic_client_t.
Definition: sign-on-basic-client.c:27
int(* sign_on_basic_sec_gen_cert_rqst_sig)(const uint8_t *KS_pri_p, const uint8_t *payload, uint32_t payload_len, uint8_t *output_buf, uint32_t output_buf_len, uint32_t *output_len)
Generic function interface for generating signature of certificate request.
Definition: sign-on-basic-client.h:146
int cnstrct_fin_msg(uint8_t *buf_p, uint32_t buf_len, uint32_t *output_len_p, sign_on_basic_client_t *sign_on_basic_client)
Construct a sign-on basic finish message (this lets the controller know sign-on was completed success...
Definition: sign-on-basic-client.c:585
uint32_t KS_pri_len
Definition: sign-on-basic-client.h:322
int(* sign_on_basic_sec_gen_kt)(const uint8_t *N2_pub_key, uint32_t N2_pub_key_len, const uint8_t *N1_pri_key, uint32_t N1_pri_key_len, uint8_t *output_buf, uint32_t output_buf_len, uint32_t *output_len)
Generic function interface for generating KT.
Definition: sign-on-basic-client.h:72
int prcs_btstrp_rqst_rspns(const uint8_t *btstrp_rqst_rspns_buf_p, uint32_t btstrp_rqst_rspns_buf_len, sign_on_basic_client_t *sign_on_basic_client)
Process a bootstrapping request response.
Definition: sign-on-basic-client.c:200
uint8_t KD_pub_cert_p[SIGN_ON_BASIC_CLIENT_KD_PUB_CERT_MAX_LENGTH]
Definition: sign-on-basic-client.h:348
uint8_t KT_p[SIGN_ON_BASIC_CLIENT_KT_MAX_LENGTH]
Definition: sign-on-basic-client.h:333
int cnstrct_cert_rqst(uint8_t *buf_p, uint32_t buf_len, uint32_t *output_len_p, sign_on_basic_client_t *sign_on_basic_client)
Construct a certificate request.
Definition: sign-on-basic-client.c:317
sign_on_basic_sec_gen_sha256_hash gen_sha256_hash
Definition: sign-on-basic-client.h:250
uint8_t N1_pub_p[SIGN_ON_BASIC_CLIENT_N1_PUB_MAX_LENGTH]
Definition: sign-on-basic-client.h:336
int prcs_cert_rqst_rspns(const uint8_t *cert_rqst_rspns_buf_p, uint32_t cert_rqst_rspns_buf_len, sign_on_basic_client_t *sign_on_basic_client)
Process a certificate request response.
Definition: sign-on-basic-client.c:461
sign_on_basic_sec_gen_fin_msg_sig gen_fin_msg_sig
Definition: sign-on-basic-client.h:258
uint8_t KS_pub_p[SIGN_ON_BASIC_CLIENT_KS_PUB_MAX_LENGTH]
Definition: sign-on-basic-client.h:318
#define SIGN_ON_BASIC_CLIENT_TRUST_ANCHOR_CERT_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for trust anchor certificate.
Definition: sign-on-basic-client-consts.h:32
uint32_t device_identifier_len
Definition: sign-on-basic-client.h:325
struct sign_on_basic_client sign_on_basic_client_t
int(* sign_on_basic_sec_gen_sha256_hash)(const uint8_t *payload, uint32_t payload_len, uint8_t *output)
Generic function interface for generating a sha256 hash.
Definition: sign-on-basic-client.h:31
#define SIGN_ON_BASIC_CLIENT_KS_PUB_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for KS public key.
Definition: sign-on-basic-client-consts.h:34
uint8_t N1_pri_p[SIGN_ON_BASIC_CLIENT_N1_PRI_MAX_LENGTH]
Definition: sign-on-basic-client.h:339
int(* sign_on_basic_sec_gen_fin_msg_sig)(const uint8_t *KS_pri_p, const uint8_t *payload, uint32_t payload_len, uint8_t *output_buf, uint32_t output_buf_len, uint32_t *output_len)
Generic function interface for generating signature of finish message.
Definition: sign-on-basic-client.h:215
uint8_t KD_pri_p[SIGN_ON_BASIC_CLIENT_KD_PRI_MAX_LENGTH]
Definition: sign-on-basic-client.h:351
int(* sign_on_basic_sec_decrypt_kd_pri)(uint8_t *KT_p, uint32_t KT_len, const uint8_t *encrypted_kd_pri, uint32_t encrypted_kd_pri_len, uint8_t *decrypted_kd_pri, uint32_t decrypted_kd_pri_buf_len, uint32_t *decrypted_kd_pri_len)
Generic function interface for decrypting the encrypted KD private key in the certificate request res...
Definition: sign-on-basic-client.h:189
int(* sign_on_basic_sec_vrfy_cert_rqst_rspns_sig)(const uint8_t *payload, uint32_t payload_len, const uint8_t *sig, uint32_t sig_len, const uint8_t *KT_p, uint32_t KT_len)
Generic function interface for verifying signature of certificate request response.
Definition: sign-on-basic-client.h:169
#define SIGN_ON_BASIC_CLIENT_DEVICE_CAPABILITIES_MAX_LENGTH
Length that sign_on_basic_client_t will preallocate for device capabilities.
Definition: sign-on-basic-client-consts.h:26