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); >>} >