From 1d20321d6920bb4dba0ae5f355f4b07e9efcff27 Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Mon, 23 Dec 2024 20:51:09 +0100 Subject: [PATCH] Add BE/LE functions to pack uint16, uint32 and uint64. Signed-off-by: Pol Henarejos --- pico-keys-sdk | 2 +- src/fido/cbor_get_assertion.c | 5 +---- src/fido/cbor_large_blobs.c | 5 +---- src/fido/cbor_make_credential.c | 5 +---- src/fido/cmd_authenticate.c | 5 +---- src/fido/oath.c | 9 +-------- src/fido/otp.c | 9 ++++----- 7 files changed, 10 insertions(+), 30 deletions(-) diff --git a/pico-keys-sdk b/pico-keys-sdk index ffaf20d..d530ea6 160000 --- a/pico-keys-sdk +++ b/pico-keys-sdk @@ -1 +1 @@ -Subproject commit ffaf20da5d65a2dfc6c92026014f818ec9382f21 +Subproject commit d530ea69797a3c91063ab0411840c0be384d70d1 diff --git a/src/fido/cbor_get_assertion.c b/src/fido/cbor_get_assertion.c index 22854d7..c829807 100644 --- a/src/fido/cbor_get_assertion.c +++ b/src/fido/cbor_get_assertion.c @@ -519,10 +519,7 @@ int cbor_get_assertion(const uint8_t *data, size_t len, bool next) { uint8_t *pa = aut_data; memcpy(pa, rp_id_hash, 32); pa += 32; *pa++ = flags; - *pa++ = (ctr >> 24) & 0xFF; - *pa++ = (ctr >> 16) & 0xFF; - *pa++ = (ctr >> 8) & 0xFF; - *pa++ = ctr & 0xFF; + put_uint32_t_be(ctr, pa); pa += 4; memcpy(pa, ext, ext_len); pa += ext_len; if ((size_t)(pa - aut_data) != aut_data_len) { CBOR_ERROR(CTAP1_ERR_OTHER); diff --git a/src/fido/cbor_large_blobs.c b/src/fido/cbor_large_blobs.c index 25ab8e1..e1b0aa5 100644 --- a/src/fido/cbor_large_blobs.c +++ b/src/fido/cbor_large_blobs.c @@ -129,10 +129,7 @@ int cbor_large_blobs(const uint8_t *data, size_t len) { uint8_t verify_data[70] = { 0 }; memset(verify_data, 0xff, 32); verify_data[32] = 0x0C; - verify_data[34] = offset & 0xFF; - verify_data[35] = (offset >> 8) & 0xFF; - verify_data[36] = (offset >> 16) & 0xFF; - verify_data[37] = (offset >> 24) & 0xFF; + put_uint32_t_le(offset, verify_data + 34); mbedtls_sha256(set.data, set.len, verify_data + 38, 0); if (verify((uint8_t)pinUvAuthProtocol, paut.data, verify_data, (uint16_t)sizeof(verify_data), pinUvAuthParam.data) != 0) { CBOR_ERROR(CTAP2_ERR_PIN_AUTH_INVALID); diff --git a/src/fido/cbor_make_credential.c b/src/fido/cbor_make_credential.c index 3f9bd5e..9083521 100644 --- a/src/fido/cbor_make_credential.c +++ b/src/fido/cbor_make_credential.c @@ -409,10 +409,7 @@ int cbor_make_credential(const uint8_t *data, size_t len) { uint8_t *pa = aut_data; memcpy(pa, rp_id_hash, 32); pa += 32; *pa++ = flags; - *pa++ = (ctr >> 24) & 0xFF; - *pa++ = (ctr >> 16) & 0xFF; - *pa++ = (ctr >> 8) & 0xFF; - *pa++ = ctr & 0xFF; + put_uint32_t_be(ctr, pa); pa += 4; memcpy(pa, aaguid, 16); pa += 16; *pa++ = ((uint16_t)cred_id_len >> 8) & 0xFF; *pa++ = (uint16_t)cred_id_len & 0xFF; diff --git a/src/fido/cmd_authenticate.c b/src/fido/cmd_authenticate.c index aecf75b..ea74e47 100644 --- a/src/fido/cmd_authenticate.c +++ b/src/fido/cmd_authenticate.c @@ -66,10 +66,7 @@ int cmd_authenticate() { resp->flags = 0; resp->flags |= P1(apdu) == CTAP_AUTH_ENFORCE ? CTAP_AUTH_FLAG_TUP : 0x0; uint32_t ctr = get_sign_counter(); - resp->ctr[0] = (ctr >> 24) & 0xFF; - resp->ctr[1] = (ctr >> 16) & 0xFF; - resp->ctr[2] = (ctr >> 8) & 0xFF; - resp->ctr[3] = ctr & 0xFF; + put_uint32_t_be(ctr, resp->ctr); uint8_t hash[32], sig_base[CTAP_APPID_SIZE + 1 + 4 + CTAP_CHAL_SIZE]; memcpy(sig_base, req->appId, CTAP_APPID_SIZE); memcpy(sig_base + CTAP_APPID_SIZE, &resp->flags, sizeof(uint8_t)); diff --git a/src/fido/oath.c b/src/fido/oath.c index 8e396d1..dac79c5 100644 --- a/src/fido/oath.c +++ b/src/fido/oath.c @@ -411,14 +411,7 @@ int cmd_calculate() { asn1_ctx_t ctxt; asn1_ctx_init(tmp, (uint16_t)ef_size, &ctxt); asn1_find_tag(&ctxt, TAG_IMF, &chal); - chal.data[0] = (v >> 56) & 0xFF; - chal.data[1] = (v >> 48) & 0xFF; - chal.data[2] = (v >> 40) & 0xFF; - chal.data[3] = (v >> 32) & 0xFF; - chal.data[4] = (v >> 24) & 0xFF; - chal.data[5] = (v >> 16) & 0xFF; - chal.data[6] = (v >> 8) & 0xFF; - chal.data[7] = v & 0xff; + put_uint64_t_be(v, chal.data); file_put_data(ef, tmp, (uint16_t)ef_size); low_flash_available(); free(tmp); diff --git a/src/fido/otp.c b/src/fido/otp.c index 2970aeb..d6442fd 100644 --- a/src/fido/otp.c +++ b/src/fido/otp.c @@ -239,8 +239,8 @@ int otp_button_pressed(uint8_t slot) { if (imf == 0) { imf = ((otp_config->uid[4] << 8) | otp_config->uid[5]) << 4; } - uint8_t chal[8] = - { imf >> 56, imf >> 48, imf >> 40, imf >> 32, imf >> 24, imf >> 16, imf >> 8, imf & 0xff }; + uint8_t chal[8]; + put_uint64_t_be(imf, chal); res_APDU_size = 0; int ret = calculate_oath(1, tmp_key, sizeof(tmp_key), chal, sizeof(chal)); if (ret == PICOKEY_OK) { @@ -258,9 +258,8 @@ int otp_button_pressed(uint8_t slot) { add_keyboard_buffer((const uint8_t *) number_str, 6, true); } imf++; - uint8_t new_chal[8] = - { imf >> 56, imf >> 48, imf >> 40, imf >> 32, imf >> 24, imf >> 16, imf >> 8, - imf & 0xff }; + uint8_t new_chal[8]; + put_uint64_t_be(imf, new_chal); uint8_t new_otp_config[otp_config_size + sizeof(new_chal)]; memcpy(new_otp_config, otp_config, otp_config_size); memcpy(new_otp_config + otp_config_size, new_chal, sizeof(new_chal));