Hi,

Based on the previous conversations, I tried to generate Elliptic Curve 
public/Private key pair. I want to convert the output BIGNUM* to char* in order 
to perform the rest of my task. Using BN_bn2hex is the correct api to do this? 
It seems it returns a 32 byte Hex while when I generate EC keys by command, it 
is much bigger. I want an output like this for public key and private key:

-----BEGIN EC PARAMETERS-----
>BggqhkjOPQMBBw==
>-----END EC PARAMETERS-----
>-----BEGIN EC PRIVATE KEY-----
>MHcCAQEEIDbJzdK8bkYoC4CsuFCBBGPHg21AC1vHh7Dg67tTZ8z9oAoGCCqGSM49
>AwEHoUQDQgAEuhRNaqvmtnVpzewv8g3zh2PDh1FwoojEQguGKGCseKffEIoLn6ua
>Vn9cpsV7OX5hvcafIyqC+gIPuJovPi0Buw==
>-----END EC PRIVATE KEY-----



and

-----BEGIN PUBLIC KEY-----
>MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuhRNaqvmtnVpzewv8g3zh2PDh1Fw
>oojEQguGKGCseKffEIoLn6uaVn9cpsV7OX5hvcafIyqC+gIPuJovPi0Buw==
>-----END PUBLIC KEY-----



Here is my code:

    EC_KEY *ecKey = EC_KEY_new();
    EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
    EC_KEY_set_group(ecKey, group);

    int iECGenKey = EC_KEY_generate_key(ecKey);

    BIGNUM *pPubKey, *pPrivKey;

    pPrivKey = (BIGNUM*) EC_KEY_get0_private_key(ecKey);
    char* pchPrivKey = BN_bn2hex(pPrivKey);
    int nBytes = BN_num_bytes(pPrivKey);

    string strPrivKey;
    strPrivKey.assign(pchPrivKey);
    if (pPrivKey != NULL)
        OPENSSL_free(pPrivKey);

    pPubKey = (BIGNUM*) EC_KEY_get0_public_key(ecKey);
    char* pchPubKey = BN_bn2hex(pPubKey);
    string strPubKey;
    strPubKey.assign(pchPubKey);
    if (pPubKey != NULL)
        OPENSSL_free(pPubKey);



It would be appreciated if you can help me.

Thanks


________________________________
 From: Thomas Leavy <tombu...@gmail.com>
To: "openssl-users@openssl.org" <openssl-users@openssl.org> 
Cc: "<openssl-users@openssl.org>" <openssl-users@openssl.org> 
Sent: Wednesday, August 15, 2012 2:52 AM
Subject: Re: Elliptic Curve key generation help
 

Wow can't believe I already got an answer! Thanks so much guys I should be good 
to go. 


On Aug 14, 2012, at 6:59 PM, Jason Goldberg <jgoldb...@oneid.com> wrote:


Before you call generate_key, you need to initialize your EC_KEY with a curve:
>
>
>EC_GROUP *group = EC_GROUP_new_by_curve_name(curve);
>EC_KEY_set_group(testKey, group);
>
>
>For 'curve' you could use, for example, NIST P256 which is defined with the 
>macro: NID_X9_62_prime256v1
>
>
>You can then use these primitives to get the public and private keys:
>
>
>EC_KEY_get0_private_key
>EC_KEY_get0_public_key
>
>
>Jason
>
>On Aug 14, 2012, at 5:49 PM, Tom Leavy <tombu...@gmail.com>
> wrote:
>
>I have been trying to figure out how to generate an elliptic curve public 
>private key pair and can't find much information on how you properly do that. 
>So far I have done the following and I'm pretty sure I am missing a step 
>someplace.  
>>
>>
>>void makeECCKeyPair() {
>>    EC_KEY *testKey = EC_KEY_new();
>>    EC_KEY_generate_key(testKey);
>>}
>

Reply via email to