35#include "aliro_crypto.h"
42#define ALIRO_STEPUP_DOCTYPE_ACCESS "aliro-a"
43#define ALIRO_STEPUP_DOCTYPE_REVOCATION "aliro-r"
47#define ALIRO_STEPUP_SK_OFFSET 64u
48int aliro_stepup_derive_keys(
const uint8_t block[ALIRO_KEY_BLOCK_LEN],
49 uint8_t sk_reader[ALIRO_SESSION_KEY_LEN],
50 uint8_t sk_device[ALIRO_SESSION_KEY_LEN]);
54void aliro_stepup_channel_init(
struct aliro_secchan *sc,
55 const uint8_t sk_reader[ALIRO_SESSION_KEY_LEN],
56 const uint8_t sk_device[ALIRO_SESSION_KEY_LEN]);
63int aliro_stepup_build_device_request(
const char *
const *elems,
size_t n_elems, uint8_t *out,
64 size_t cap,
size_t *out_len);
68int aliro_stepup_seal_sessiondata(
struct aliro_secchan *sc,
const uint8_t *plain,
size_t plain_len,
69 uint8_t *out,
size_t cap,
size_t *out_len);
74int aliro_stepup_open_sessiondata(
struct aliro_secchan *sc,
const uint8_t *sd,
size_t sd_len,
75 uint8_t *out,
size_t cap,
size_t *out_len);
80#define ALIRO_INS_ENVELOPE 0xC3u
81#define ALIRO_INS_GET_RESPONSE 0xC0u
82int aliro_stepup_build_envelope(
const uint8_t *data,
size_t data_len,
int chaining, uint8_t *out,
83 size_t cap,
size_t *out_len);
85int aliro_stepup_build_get_response(uint8_t le, uint8_t *out,
size_t cap,
size_t *out_len);
88#define ALIRO_STEPUP_MAX_DIGESTS 24u
89#define ALIRO_STEPUP_MAX_ITEMS 16u
90#define ALIRO_STEPUP_ID_MAX 32u
110 char elem_id[ALIRO_STEPUP_ID_MAX];
125 char doc_type[ALIRO_STEPUP_ID_MAX];
126 char name_space[ALIRO_STEPUP_ID_MAX];
129 const uint8_t *protected_hdr;
130 size_t protected_len;
133 const uint8_t *x5chain;
135 const uint8_t *payload;
137 const uint8_t *signature;
140 char digest_alg[ALIRO_STEPUP_ID_MAX];
141 char mso_doc_type[ALIRO_STEPUP_ID_MAX];
146 int have_signed, have_valid_from, have_valid_until;
147 int64_t signed_epoch, valid_from_epoch, valid_until_epoch;
150 int time_verification_required;
160int aliro_stepup_parse_response(
const uint8_t *buf,
size_t len,
struct aliro_stepup_doc *doc);
163struct aliro_stepup_issuer {
175 const struct aliro_stepup_issuer *issuers;
179 uint64_t access_iteration;
180 const char *expected_doctype;
183 int (*ecdsa_verify)(
const uint8_t pub[65],
const uint8_t *msg,
size_t msg_len,
184 const uint8_t sig[64]);
197 int issuer_key_found;
198 int issuer_chain_validated;
205 size_t valid_elements;
219int aliro_stepup_run(
struct aliro_secchan *sc,
const uint8_t *sd_resp,
size_t sd_len,
228struct aliro_stepup_job {
229 uint8_t sk_reader[ALIRO_SESSION_KEY_LEN];
230 uint8_t sk_device[ALIRO_SESSION_KEY_LEN];
231 uint8_t issuer_pub[65];
232 uint8_t issuer_kid[16];
233 size_t issuer_kid_len;
237 uint16_t conn_handle;
241int aliro_stepup_worker_submit(
const struct aliro_stepup_job *job);
Step-up credential element digest: SHA-256 hash of a disclosed IssuerSignedItem, with its digest_id f...
Definition aliro_stepup.h:96
Parsed Step-up access document (ISO/IEC 18013-5 mDoc): have_document (0 if device declined),...
Definition aliro_stepup.h:121
Single disclosed IssuerSignedItem from a Step-up document: digest_id (which digest to check against),...
Definition aliro_stepup.h:105
Verdict of Step-up document verification (ISO/IEC 18013-5 §7.4): valid (all passed steps + >=1 valid ...
Definition aliro_stepup.h:193
Context for Step-up document verification: issuers (trust store), time_valid/now_epoch (clock state),...
Definition aliro_stepup.h:174