diff --git a/src/pkcs11/openssl.c b/src/pkcs11/openssl.c index e7d1fb4d..51d6e102 100644 --- a/src/pkcs11/openssl.c +++ b/src/pkcs11/openssl.c @@ -489,7 +489,22 @@ CK_RV sc_pkcs11_verify_data(const unsigned char *pubkey, unsigned int pubkey_len */ sc_log(context, "Trying to verify using EVP"); if (md_ctx) { - res = EVP_VerifyFinal(md_ctx, signat, signat_len, pkey); + + if (EVP_PKEY_get0_EC_KEY(pkey)) { + unsigned char *signat_tmp = NULL; + size_t signat_len_tmp; + int r; + r = sc_asn1_sig_value_rs_to_sequence(NULL, signat, + signat_len, &signat_tmp, &signat_len_tmp); + if (r == 0) { + res = EVP_VerifyFinal(md_ctx, signat_tmp, signat_len_tmp, pkey); + } else { + sc_log(context, "sc_asn1_sig_value_rs_to_sequence failed r:%d",r); + res = -1; + } + free(signat_tmp); + } else + res = EVP_VerifyFinal(md_ctx, signat, signat_len, pkey); } else { res = -1; }