Testing the i2d_ECPrivateKey to buffer and then back d2i_ECPrivateKey
and it fails. I checked the forum and one guy was passing NULL at least I
missed that mistake but thats not my issue.
Since I want to save the random generated key to use for private and
also I will do this for public. The public works though back and forth. So
where em I going wrong?
int main(int argc, char **args){
long avail;
FILE *fp;
EC_KEY *eckey = EC_KEY_new(); //allocate a EC_KEY for private
signing and public verify
int ret=
EC_KEY_set_group(eckey,EC_GROUP_new_by_curve_name(NID_secp192k1) );
//Select the curve name
if (!ret){
printf("error set group\n");
return 1;
}
if (!EC_KEY_generate_key(eckey)){ //Pick some random private and
public keys
printf("error generate key\n");
return 1;
}
/**
Okay now get that private key bytes
***/
len= i2d_ECPrivateKey(eckey,NULL);
printf("PRIVATE KEY LENGTH is %d \n",len);
buf = OPENSSL_malloc(len); // malloc(len);
memset(buf,0, len);
ret= i2d_ECPrivateKey(eckey,&buf);
if (!ret){
printf("Private key to DER failed now WHAT?\n");
return 1;
}
//dumpy them let see what it is out of curiosity
printf("PRIVATE KEY is success\n");
for (int i=0; i<len; i++)
printf("%X ",buf[i]);
printf("\n\n");
//Now lets see if this is valid and convert it back
//
eckey = d2i_ECPrivateKey(&eckey, (const unsigned char **)&buf, len);
if (eckey==NULL){
printf("going back failed DER to i \n");
return 1;
}
return 0;
}
Basically this is proof of the API and data will be package appropriately.
But I have to see if I can use this private key later and also use the
public key later
which are saved to validate construction can be performed.
redpath wrote:
>
> Currently I am reading a PEM file which contains a test RSA key
>
> /**
> *Load RSA Keys
> **/
> fp= fopen("test.pem", "rb");
> if (fp==NULL){
> printf("ERROR opening RSA Keys failed test.pem\n");
> return 1;
> }
> rsapriv= (RSA *) PEM_read_RSAPrivateKey(fp,&rsapriv, (pem_password_cb
> *)"password",NULL);
>
> and create a SHA1 message digest
>
> unsigned char *result=SHA1((unsigned char *)sample, strlen(sample), md);
>
> and sign it
>
> int rc= RSA_sign(NID_sha1, md, 20, sigret, &siglen, rsapriv);
>
>
> Now I have explored also the use of the Elliptical Curve from the SHA1
> but and there is always a but, the only example I could figure out is
> using the key generation function
>
> EC_KEY_generate_key(eckey); <====
>
> I need to use my private and public key from the RSA PEM file?
> Not sure how exactly to do this.
>
> The private would be used for the
> ECDSA_do_sign(md, 20, eckey);
>
> The public later is used for verify
> ECDSA_do_verify(md, 20, sig, eckey);
>
>
> The RSA structure consists of several BIGNUM components. It can contain
> public as well as private RSA keys:
>
> struct
> {
> BIGNUM *n; // public modulus
> BIGNUM *e; // public exponent
> BIGNUM *d; // private exponent
> BIGNUM *p; // secret prime factor
> BIGNUM *q; // secret prime factor
> BIGNUM *dmp1; // d mod (p-1)
> BIGNUM *dmq1; // d mod (q-1)
> BIGNUM *iqmp; // q^-1 mod p
> // ...
> };
> RSA
>
> There are functions for ECDSA such as
> int EC_KEY_set_private_key(EC_KEY *, const BIGNUM *)
>
> and
>
> int EC_KEY_set_public_key(EC_KEY *, const EC_POINT *)
> EC_POINT_point2bn(group, point, POINT_CONVERSION_UNCOMPRESSED, ppub_a,
> ctx);
>
> The POINT is used for the public key of EC_KEY no real document of how
> this is used.
>
> So simply I have a PEM which gives me a RSA* and want to use the public
> and privates keys
> for the ECDSA.
>
> How?
>
>
>
>
>
>
>
>
>
>
>
--
View this message in context:
http://old.nabble.com/EC_KEY-and-PEM_read_RSAPrivateKey-tp34377536p34387266.html
Sent from the OpenSSL - Dev mailing list archive at Nabble.com.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [email protected]