EC_POINT_get_affine_coordinates replacement in 3.0

Matt Caswell matt at openssl.org
Wed May 4 10:31:26 UTC 2022



On 03/05/2022 23:29, Kory Hamzeh wrote:
> You would have to use EVP_PKEY key type. You can use EVP_PKEY_get* to 
> get key params.

Yes this is probably the best way to do this.

Specifically you can use the function EVP_PKEY_get_bn_param() documented 
here:

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

The params you want are called OSSL_PKEY_PARAM_EC_PUB_X and 
OSSL_PKEY_PARAM_EC_PUB_Y as documented on this page:

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

Matt

> 
> 
> 
> 
>> On May 3, 2022, at 1:56 PM, Chris Bare <chris.bare at gmail.com 
>> <mailto:chris.bare at gmail.com>> wrote:
>>
>> Thanks, I'll check those out.
>>
>> On Tue, May 3, 2022 at 4:53 PM William Roberts 
>> <bill.c.roberts at gmail.com <mailto:bill.c.roberts at gmail.com>> wrote:
>>
>>     On Tue, May 3, 2022 at 3:18 PM Chris Bare <chris.bare at gmail.com
>>     <mailto:chris.bare at gmail.com>> wrote:
>>     >
>>     >
>>     > On Tue, May 3, 2022 at 3:10 PM William Roberts
>>     <bill.c.roberts at gmail.com <mailto:bill.c.roberts at gmail.com>> wrote:
>>     >>
>>     >> On Tue, May 3, 2022 at 1:14 PM Chris Bare <chris.bare at gmail.com
>>     <mailto:chris.bare at gmail.com>> wrote:
>>     >> >
>>     >> > I'm converting some openssl 1.0 code to 3.0 and I don't know
>>     how to get the coordinates
>>     >> > in a 3.0 way.
>>     >> > The old code is:
>>     >> > BN_CTX *ctx = BN_CTX_new ();
>>     >> > BIGNUM *X = NULL, *Y = NULL;
>>     >> > const EC_POINT *pubkey;
>>     >> > const EC_GROUP *group;
>>     >> > BN_CTX_start (ctx);
>>     >> > X = BN_CTX_get (ctx);
>>     >> > Y = BN_CTX_get (ctx);
>>     >> > pubkey = EC_KEY_get0_public_key ((EC_KEY *) EVP_PKEY_get0
>>     (pkey));
>>     >> > group = EC_KEY_get0_group ((EC_KEY *) EVP_PKEY_get0
>>     (cvr->sm_pkey));
>>     >> > EC_POINT_get_affine_coordinates_GFp (group, pubkey, X, Y, ctx)
>>     >> >
>>     >> > What would be the 3.0 way to get X and Y without using
>>     deprecated functions?
>>     >>
>>     >> For EC_POINT_get_affine_coordinates_GFp it goes to
>>     >> EC_POINT_get_affine_coordinates, see:
>>     >>   -
>>     https://www.openssl.org/docs/man3.0/man3/EC_POINT_get_affine_coordinates.html
>>     <https://www.openssl.org/docs/man3.0/man3/EC_POINT_get_affine_coordinates.html>
>>     >>
>>     >> Offhand I don't see any other deprecated functions, was that
>>     the only one?
>>     >>
>>     >> Thanks,
>>     >> Bill
>>     >
>>     >
>>     > all the EC_KEY_get0_ functions are deprecated. Is there a new
>>     way to access the internals of
>>     > the opaque structures, or am I stuck with the deprecated ones
>>     for this?
>>
>>     I think you want the from and to data routines that provide the
>>     components from an EVP PKEY or produce an EVP_PKEY
>>     from the components:
>>       - https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_todata.html
>>     <https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_todata.html>
>>       -
>>     https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_fromdata.html
>>     <https://www.openssl.org/docs/man3.0/man3/EVP_PKEY_fromdata.html>
>>
>>
>>
>> -- 
>> Chris Bare
> 


More information about the openssl-users mailing list