23#include "aliro_crypto.h"
24#include "aliro_device_apdu.h"
34struct aliro_dev_secchan {
41void aliro_dev_secchan_init(
struct aliro_dev_secchan *sc,
const uint8_t s0[32],
42 const uint8_t s1[32]);
45int aliro_dev_secchan_open(
struct aliro_dev_secchan *sc,
const uint8_t *ct,
size_t ct_len,
46 const uint8_t tag[16], uint8_t *pt);
49int aliro_dev_secchan_seal(
struct aliro_dev_secchan *sc,
const uint8_t *pt,
size_t pt_len,
50 uint8_t *ct, uint8_t tag[16]);
66int aliro_dev_blesk_init(
struct aliro_dev_secchan *ch,
const uint8_t block[ALIRO_KEY_BLOCK_LEN],
67 const uint8_t *versions_salt,
size_t salt_len);
74int aliro_dev_ble_open(
struct aliro_dev_secchan *ch,
const uint8_t *wire,
size_t wire_len,
75 uint8_t *plain,
size_t plain_cap,
size_t *plain_len);
82int aliro_dev_ble_seal(
struct aliro_dev_secchan *ch,
const uint8_t *plain,
size_t plain_len,
83 uint8_t *wire,
size_t wire_cap,
size_t *wire_len);
89int aliro_dev_seal_cryptogram(
const uint8_t cryptogram_sk[32],
const uint8_t *plain,
90 size_t plain_len, uint8_t *out);
98int aliro_device_derive_session(
const uint8_t shared_x[32],
const uint8_t txid[16],
99 const uint8_t reader_group_x[32],
const uint8_t reader_eph_x[32],
100 const uint8_t reader_id[32], uint8_t exp_phase,
const uint8_t *a5,
101 size_t a5n,
const uint8_t device_eph_x[32],
102 struct aliro_dev_secchan *sc, uint8_t ursk[32],
103 uint8_t block_out[ALIRO_KEY_BLOCK_LEN]);
110#define ALIRO_DEV_BLESK_SALT_MAX 18u
112enum aliro_device_phase {
114 ALIRO_DEV_SENT_AUTH0_RESP,
115 ALIRO_DEV_SENT_AUTH1_RESP,
116 ALIRO_DEV_ESTABLISHED,
127 uint8_t cred_priv[32];
128 uint8_t cred_pub[65];
129 uint8_t reader_id[32];
130 uint8_t reader_verif_pub[65];
131 uint8_t reader_group_x[32];
134 uint8_t dev_eph_priv[32];
135 uint8_t dev_eph_pub[65];
136 uint8_t reader_eph_pub[65];
141 struct aliro_dev_secchan sc;
142 struct aliro_dev_secchan sc_ble;
152 uint8_t blesk_salt[ALIRO_DEV_BLESK_SALT_MAX];
153 size_t blesk_salt_len;
158 enum aliro_device_phase phase;
164int aliro_device_init(
struct aliro_device *d,
const uint8_t cred_priv[32],
165 const uint8_t reader_id[32],
const uint8_t reader_verif_pub[65]);
171int aliro_device_set_blesk_salt(
struct aliro_device *d,
const uint8_t *salt,
size_t len);
177int aliro_device_on_command(
struct aliro_device *d,
const uint8_t *ap_payload,
size_t len,
178 uint8_t *resp,
size_t cap,
size_t *resp_len);
Aliro device: access credential (private scalar and public point), reader identity and verification k...
Definition aliro_device.h:125