From 2bc942f96094bc23c5edfd3fc4c5b1f298fb49f6 Mon Sep 17 00:00:00 2001 From: Valerii Chubar Date: Fri, 7 Oct 2022 09:17:21 +0300 Subject: [PATCH] ta: pkcs11: Fix key generation for Ed25519 The ECC curve is not an attribute of an Ed25519 key pair. Remove it from the key generation attribute. Add getting key size by using EC_POINT attribute. Fixes: 03e07432b68f ("ta: pkcs11: Add Ed25519 support") Signed-off-by: Valerii Chubar Acked-by: Etienne Carriere --- ta/pkcs11/src/processing.c | 7 ++++++- ta/pkcs11/src/processing_ec.c | 9 ++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ta/pkcs11/src/processing.c b/ta/pkcs11/src/processing.c index 6ad6a08ddb7..2521b2a56d2 100644 --- a/ta/pkcs11/src/processing.c +++ b/ta/pkcs11/src/processing.c @@ -146,12 +146,17 @@ size_t get_object_key_bit_size(struct pkcs11_object *obj) return a_size * 8; case PKCS11_CKK_EC: - case PKCS11_CKK_EC_EDWARDS: if (get_attribute_ptr(attrs, PKCS11_CKA_EC_PARAMS, &a_ptr, &a_size) || !a_ptr) return 0; return ec_params2tee_keysize(a_ptr, a_size); + case PKCS11_CKK_EC_EDWARDS: + if (get_attribute_ptr(attrs, PKCS11_CKA_EC_POINT, NULL, + &a_size)) + return 0; + + return a_size * 8; default: TEE_Panic(0); return 0; diff --git a/ta/pkcs11/src/processing_ec.c b/ta/pkcs11/src/processing_ec.c index 4f60c753a1a..a90966a9118 100644 --- a/ta/pkcs11/src/processing_ec.c +++ b/ta/pkcs11/src/processing_ec.c @@ -713,9 +713,7 @@ enum pkcs11_rc generate_eddsa_keys(struct pkcs11_attribute_head *proc_params, void *a_ptr = NULL; uint32_t a_size = 0; uint32_t tee_size = 0; - uint32_t tee_curve = 0; TEE_ObjectHandle tee_obj = TEE_HANDLE_NULL; - TEE_Attribute tee_key_attr[1] = { }; TEE_Result res = TEE_ERROR_GENERIC; if (!proc_params || !*pub_head || !*priv_head) @@ -723,6 +721,7 @@ enum pkcs11_rc generate_eddsa_keys(struct pkcs11_attribute_head *proc_params, if (remove_empty_attribute(pub_head, PKCS11_CKA_EC_POINT) || remove_empty_attribute(priv_head, PKCS11_CKA_VALUE) || + remove_empty_attribute(priv_head, PKCS11_CKA_EC_POINT) || remove_empty_attribute(priv_head, PKCS11_CKA_EC_PARAMS)) { EMSG("Unexpected attribute(s) found"); trace_attributes("public-key", *pub_head); @@ -740,10 +739,6 @@ enum pkcs11_rc generate_eddsa_keys(struct pkcs11_attribute_head *proc_params, if (!tee_size) return PKCS11_CKR_ATTRIBUTE_TYPE_INVALID; - tee_curve = ec_params2tee_curve(a_ptr, a_size); - - TEE_InitValueAttribute(tee_key_attr, TEE_ATTR_ECC_CURVE, tee_curve, 1); - res = TEE_AllocateTransientObject(TEE_TYPE_ED25519_KEYPAIR, tee_size, &tee_obj); if (res) { @@ -757,7 +752,7 @@ enum pkcs11_rc generate_eddsa_keys(struct pkcs11_attribute_head *proc_params, goto out; } - res = TEE_GenerateKey(tee_obj, tee_size, tee_key_attr, 1); + res = TEE_GenerateKey(tee_obj, tee_size, NULL, 0); if (res) { rc = tee2pkcs_error(res); goto out;