Re: X52219/X448 export public key coordinates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



X25519?

On Mon, Nov 14, 2022, 05:23 ORNEST Matej - Contractor via openssl-users <openssl-users@xxxxxxxxxxx> wrote:

Hi all,

 

I need to implement support for X52219/X448 for DH key exchange (and Ed52219/Ed448 for DSA) elliptic curves in our project. I need to export public key for DH exchange in form of DER encoded chunk in form tag+X-coordinate+Y-coordinate. Thus I need to get EC_POINT from EVP_PKEY and encode it as needed. I understand that those key types differs from EC types in way that I need just X coordinate and a flag bit to reconstruct the key, but still, how do I get the X coordinate?

My solution works for all other EC types such as SecpX and Brainpool families, but not for X52219/X448 keys and I do not completely understand why. Specifically when I decode public key previously encoded with i2d_PUBKEY() to EVP_PEKY and try to get EC_KEY by calling EVP_PKEY_get0_EC_KEY(), it returns NULL and issues an error that it’s not an EC key…

 

I’m using following code:

 

EVP_PKEY *key = … // Decode from DER encoded public key

 

    if(key != nil) {

 

        EC_KEY *ecKey = EVP_PKEY_get0_EC_KEY(key);

         /// When X52219 or X448 key is passed, ecKey is NULL

        if(ecKey != NULL) {

            const EC_POINT *point = EC_KEY_get0_public_key(ecKey);

            const EC_GROUP *group = EC_KEY_get0_group(ecKey);

            

            if(point != NULL && group != NULL) {

                BIGNUM *bnX = BN_new();

                BIGNUM *bnY = BN_new();

                

                if(EC_POINT_get_affine_coordinates(group, point, bnX, bnY, NULL)) {

                    char *hexX = BN_bn2hex(bnX);

                    char *hexY = BN_bn2hex(bnY);

 

                    // Convert to custom data structures

                      …

                }

                

                BN_free(bnX);

                BN_free(bnY);

            }

        }

    }

 

 

Is there any way how to export those key types in desired format?  I’m using OpenSSL version 1.1.1q.

 

Thank you very much for any hint

Matt


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux