diff --git a/firmware/inc/u2f.h b/firmware/inc/u2f.h index 7d54e29..417cee2 100644 --- a/firmware/inc/u2f.h +++ b/firmware/inc/u2f.h @@ -83,7 +83,7 @@ uint16_t u2f_attestation_cert_size(); // callback for u2f to send back response data // @buf data to write back // @len length of buf in bytes -void u2f_response_writeback(uint8_t * buf, uint8_t len); +void u2f_response_writeback(uint8_t * buf, uint16_t len); // callback when u2f finishes and will // indicate when all buffer data, if any, should be written diff --git a/firmware/inc/u2f_hid.h b/firmware/inc/u2f_hid.h index c85e0c5..3d27b6f 100644 --- a/firmware/inc/u2f_hid.h +++ b/firmware/inc/u2f_hid.h @@ -101,7 +101,7 @@ void u2f_hid_set_len(uint16_t len); // @payload the buffer to write // @len length of buffer // @@prereq is that hid_layer.current_cid, hid_layer.res_len each set to correct values -void u2f_hid_writeback(uint8_t * payload, uint8_t len); +void u2f_hid_writeback(uint8_t * payload, uint16_t len); // u2f_hid_flush flush any remaining data that may be buffered. void u2f_hid_flush(); diff --git a/firmware/src/u2f-atecc.c b/firmware/src/u2f-atecc.c index d008daf..1416df6 100644 --- a/firmware/src/u2f-atecc.c +++ b/firmware/src/u2f-atecc.c @@ -73,7 +73,7 @@ void u2f_init() } } -void u2f_response_writeback(uint8_t * buf, uint8_t len) +void u2f_response_writeback(uint8_t * buf, uint16_t len) { u2f_hid_writeback(buf, len); } diff --git a/firmware/src/u2f.c b/firmware/src/u2f.c index 90c9145..3e80715 100644 --- a/firmware/src/u2f.c +++ b/firmware/src/u2f.c @@ -52,6 +52,7 @@ static int16_t u2f_register(struct u2f_register_request * req) uint8_t key_handle[U2F_KEY_HANDLE_SIZE]; uint8_t pubkey[64]; + const uint16_t attest_size = u2f_attestation_cert_size(); if (u2f_get_user_feedback() != 0) { @@ -83,8 +84,8 @@ static int16_t u2f_register(struct u2f_register_request * req) i[0] = U2F_KEY_HANDLE_SIZE; u2f_response_writeback(i,1); u2f_response_writeback(key_handle,U2F_KEY_HANDLE_SIZE); - u2f_response_writeback(u2f_get_attestation_cert(),u2f_attestation_cert_size()-254/2); - u2f_response_writeback(u2f_get_attestation_cert()+u2f_attestation_cert_size(),254/2); + + u2f_response_writeback(u2f_get_attestation_cert(),u2f_attestation_cert_size()); u2f_response_writeback((uint8_t*)req, 64); diff --git a/firmware/src/u2f_hid.c b/firmware/src/u2f_hid.c index 5ff9a13..1876f4c 100644 --- a/firmware/src/u2f_hid.c +++ b/firmware/src/u2f_hid.c @@ -101,7 +101,7 @@ void u2f_hid_flush() } -void u2f_hid_writeback(uint8_t * payload, uint8_t len) +void u2f_hid_writeback(uint8_t * payload, uint16_t len) { struct u2f_hid_msg * r = (struct u2f_hid_response *) _hid_pkt; _hid_in_session = 1;