Tuned returning public key information for ECDSA.

Despite it was not a bug, it seems some ASN.1 readers do not recognize 0x81/0x82 tags when len < 128.

Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
Pol Henarejos
2023-02-04 19:44:00 +01:00
parent fda29e0e61
commit abf190f767

View File

@@ -1210,16 +1210,15 @@ void make_rsa_response(mbedtls_rsa_context *rsa) {
} }
void make_ecdsa_response(mbedtls_ecdsa_context *ecdsa) { void make_ecdsa_response(mbedtls_ecdsa_context *ecdsa) {
size_t plen = mbedtls_mpi_size(&ecdsa->grp.P); size_t plen = 0;
memcpy(res_APDU, "\x7f\x49\x81\x00", 4); memcpy(res_APDU, "\x7f\x49\x00", 3);
res_APDU_size = 4; res_APDU_size = 3;
res_APDU[res_APDU_size++] = 0x86; res_APDU[res_APDU_size++] = 0x86;
res_APDU[res_APDU_size++] = 0x81; res_APDU[res_APDU_size++] = 0;
res_APDU[res_APDU_size++] = 2*plen+1; mbedtls_ecp_point_write_binary(&ecdsa->grp, &ecdsa->Q, MBEDTLS_ECP_PF_UNCOMPRESSED, &plen, res_APDU + res_APDU_size, 4096);
res_APDU[res_APDU_size++] = 0x04; res_APDU_size += plen;
mbedtls_mpi_write_binary(&ecdsa->Q.X, res_APDU+res_APDU_size, plen); res_APDU_size += plen; res_APDU[4] = plen;
mbedtls_mpi_write_binary(&ecdsa->Q.Y, res_APDU+res_APDU_size, plen); res_APDU_size += plen; res_APDU[2] = plen + 2;
res_APDU[3] = res_APDU_size-4;
} }
static int cmd_keypair_gen() { static int cmd_keypair_gen() {