From 9f49a144acb04b829c94c24e05a916e39565452a Mon Sep 17 00:00:00 2001 From: Pol Henarejos Date: Thu, 24 Aug 2023 16:05:11 +0200 Subject: [PATCH] Add support for Edwards key import. Signed-off-by: Pol Henarejos --- src/hsm/kek.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/hsm/kek.c b/src/hsm/kek.c index 8b797ed..7506247 100644 --- a/src/hsm/kek.c +++ b/src/hsm/kek.c @@ -695,7 +695,14 @@ int dkek_decode_key(uint8_t id, len = get_uint16_t(kb, ofs); ofs += len + 2; //G - len = get_uint16_t(kb, ofs); ofs += len + 2; + len = get_uint16_t(kb, ofs); + if (ec_id == MBEDTLS_ECP_DP_CURVE25519 && kb[ofs + 2] != 0x09) { + ec_id = MBEDTLS_ECP_DP_ED25519; + } + else if (ec_id == MBEDTLS_ECP_DP_CURVE448 && (len != 56 || kb[ofs + 2] != 0x05)) { + ec_id = MBEDTLS_ECP_DP_ED448; + } + ofs += len + 2; //d len = get_uint16_t(kb, ofs); ofs += 2; @@ -710,7 +717,12 @@ int dkek_decode_key(uint8_t id, len = get_uint16_t(kb, ofs); ofs += 2; r = mbedtls_ecp_point_read_binary(&ecdsa->grp, &ecdsa->Q, kb + ofs, len); if (r != 0) { - r = mbedtls_ecp_mul(&ecdsa->grp, &ecdsa->Q, &ecdsa->d, &ecdsa->grp.G, random_gen, NULL); + if (mbedtls_ecp_get_type(&ecdsa->grp) == MBEDTLS_ECP_TYPE_EDWARDS) { + r = mbedtls_ecp_point_edwards(&ecdsa->grp, &ecdsa->Q, &ecdsa->d, random_gen, NULL); + } + else { + r = mbedtls_ecp_mul(&ecdsa->grp, &ecdsa->Q, &ecdsa->d, &ecdsa->grp.G, random_gen, NULL); + } if (r != 0) { mbedtls_ecdsa_free(ecdsa); return CCID_EXEC_ERROR;