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;