58#define ALIRO_ASSERT_NONCE_LEN 16u
59#define ALIRO_ASSERT_CREDID_LEN 8u
60#define ALIRO_ASSERT_SIG_LEN 64u
61#define ALIRO_ASSERT_PUB_LEN 65u
64#define ALIRO_ASSERT_SIGNED_LEN 51u
65#define ALIRO_ASSERT_WIRE_P256 (ALIRO_ASSERT_SIGNED_LEN + ALIRO_ASSERT_SIG_LEN)
66#define ALIRO_ASSERT_WIRE_MAX ALIRO_ASSERT_WIRE_P256
68#define ALIRO_ASSERT_DIST_NONE 0xFFFFu
69#define ALIRO_ASSERT_TIME_NONE 0u
84#define ALIRO_ASSERT_RANGE_STS_OK 0x01u
85#define ALIRO_ASSERT_RANGE_FLAGS_KNOWN 0x01u
90enum aliro_assert_alg {
94 ALIRO_ASSERT_ALG_ECDSA_P256 = 2,
98enum aliro_assert_status {
99 ALIRO_PRESENCE_ABSENT = 0,
100 ALIRO_PRESENCE_PRESENT = 1,
117 uint8_t nonce[ALIRO_ASSERT_NONCE_LEN];
118 uint8_t cred_id[ALIRO_ASSERT_CREDID_LEN];
119 uint16_t distance_cm;
129enum aliro_assert_verdict {
131 ALIRO_ASSERT_E_MALFORMED = -1,
132 ALIRO_ASSERT_E_MAC = -2,
133 ALIRO_ASSERT_E_NONCE = -3,
134 ALIRO_ASSERT_E_STALE = -4,
135 ALIRO_ASSERT_E_ABSENT = -5,
136 ALIRO_ASSERT_E_RANGE = -6,
137 ALIRO_ASSERT_E_ALG = -7,
138 ALIRO_ASSERT_E_CREDENTIAL = -8,
140 ALIRO_ASSERT_E_INTEGRITY = -9,
146size_t aliro_assert_wire_len(uint8_t alg);
150uint8_t aliro_assert_peek_alg(
const uint8_t *buf,
size_t len);
155void aliro_assert_cred_id(
const uint8_t cred_pub[ALIRO_ASSERT_PUB_LEN],
156 uint8_t cred_id[ALIRO_ASSERT_CREDID_LEN]);
172typedef int (*aliro_assert_sign_fn)(
void *ctx,
const uint8_t *msg,
size_t msg_len,
173 uint8_t sig[ALIRO_ASSERT_SIG_LEN]);
174typedef int (*aliro_assert_verify_fn)(
void *ctx,
const uint8_t *msg,
size_t msg_len,
175 const uint8_t sig[ALIRO_ASSERT_SIG_LEN]);
180int aliro_assert_build_p256(aliro_assert_sign_fn sign,
void *ctx,
const struct aliro_assert *a,
181 uint8_t *wire,
size_t wire_cap,
size_t *wire_len);
204int aliro_assert_verify_p256(aliro_assert_verify_fn verify,
void *ctx,
const uint8_t *wire,
205 size_t wire_len,
const uint8_t expected_nonce[ALIRO_ASSERT_NONCE_LEN],
206 const uint8_t expected_cred_id[ALIRO_ASSERT_CREDID_LEN],
207 uint16_t threshold_cm, uint64_t min_uptime_ms,
208 struct aliro_assert *out);