On 27/10/2021 19:04, Kory Hamzeh wrote:

Hi,

I am upgrading some 3RD party code which performs FIPS ECDSA AVS testing for 
FIPS 140-2 certification. The code uses FIPS_escda_sign(), which in 
Openssl-fips-2.0.5 is define as:

ECDSA_SIG * FIPS_ecdsa_sign(EC_KEY *key,
                        const unsigned char *msg, size_t msglen
,                       const EVP_MD *mhash)


The full code is here:

https://github.com/majek/openssl/blob/master/fips/ecdsa/fips_ecdsavs.c

I have read through all of the ECDSA sign man pages, and I cannot find a 
functions that is close to accepting some of the same parameter. I could use 
some help please. I have very little experience with ECDSA.

You need to use the EVP_DigestSignInit_ex/Update/Final APIs instead. See the man page here:

https://www.openssl.org/docs/man3.0/man3/EVP_DigestSignInit_ex.html

To do that you will need to have the key as an EVP_PKEY instead of an EC_KEY. The code you pointed at generates a new key using EC_KEY_generate_key(). Instead you can use EVP_PKEY_Q_keygen():

https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_Q_keygen.html

To get the public key x/y co-ords and the private key value you need to use EVP_PKEY_get_bn_param:

https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_get_bn_param.html

See also:

https://www.openssl.org/docs/man3.0/man7/EVP_PKEY-EC.html

Matt

Reply via email to