U should close the output BIO...
If not the output isn't flushed..
Probably you create a 0-length file...
manjunath gv wrote:
>
> hello
>
> im trying to write the private key into the file
> and read back the key . im using
> PEM_read_bio_Privatekey,PEM_write_bio_Privatekey
> im also using password so the key is encrypted and
> kept
>
> please see the code . the code is working fine for
> writing and problem is i cannot read back the key.
>
> so please make suggestions.
>
> the code generate the keys store the private key in
> the file and tries to read back
>
> thanx in advance
>
> -------------------------------------------------------
> #include <stdio.h>
> #include <openssl/evp.h>
> #include <openssl/rsa.h>
> #include <openssl/x509.h>
>
> EVP_PKEY *publicKey,*privateKey;
>
> void generate()
> {
>
> RSA *rsa, *pub_rsa, *priv_rsa;
> int len;
> unsigned char *buf, *p;
> X509 *x509;
>
> rsa = RSA_generate_key (1024, RSA_F4, NULL,NULL);
>
> buf = (unsigned char *) malloc (2048);
>
> p = buf;
>
> /* Save the public key into buffer, we know it will
> be big enough
> * but we should really check how much space we need
> by calling the
> * i2d functions with a NULL second parameter */
>
> len = i2d_RSAPublicKey (rsa, &p);
> len += i2d_RSAPrivateKey (rsa, &p);
>
> printf ("The public and private key are now both in
> a char array\n");
> printf ("and are taking up %d bytes\n", len);
>
> RSA_free (rsa);
>
> p = buf;
> pub_rsa = d2i_RSAPublicKey (NULL, &p, (long) len);
> len -= (p - buf);
> priv_rsa = d2i_RSAPrivateKey (NULL, &p, (long) len);
>
> if ((pub_rsa == NULL) || (priv_rsa == NULL))
> ERR_print_errors_fp (stderr);
>
> publicKey= EVP_PKEY_new ();
> privateKey = EVP_PKEY_new ();
>
> /* convert rsa public and private keys into EVP
> PUBLIC AND PRIVATE KEYS */
> printf ("\n the public key result code ....%d\n",
> EVP_PKEY_set1_RSA (publicKey, pub_rsa));
> printf ("\n the private key result code...%d\n",
> EVP_PKEY_set1_RSA (privateKey, priv_rsa));
>
> /* check private key and public key consistencyd */
> x509 = X509_new ();
> X509_set_pubkey (x509, publicKey);
> printf ("\n checking private and public key
> consistency..%d\n",
> X509_check_private_key (x509, privateKey));
>
> RSA_free (pub_rsa);
> RSA_free (priv_rsa);
>
> }
>
> /* read s the key from the file */
> EVP_PKEY *loadkey(unsigned char * file,unsigned char*
> pass)
> {
> BIO *key=NULL;
> EVP_PKEY *pkey=NULL;
>
>
>
> key=BIO_new(BIO_s_file());
>
>
> if(key==NULL)
> return -1;
>
> if(BIO_read_filename(key,file)==-1)
> return -1;
>
>
>
> pkey=PEM_read_bio_PrivateKey(key,NULL,NULL,pass);
>
> return pkey;
> }
>
> /* puts the key in the file */
> int setkey(unsigned char *file,EVP_PKEY
> *prikey,unsigned char *pass)
> {
>
> BIO *key=NULL;
>
> key=BIO_new(BIO_s_file());
>
>
> if(key==NULL)
> return -1;
>
> if(BIO_write_filename(key,file)==-1)
> return -1;
>
> PEM_write_bio_PrivateKey(key,prikey,NULL,NULL,0,NULL,pass);
>
> return 1;
>
> }
>
> int main()
> {
>
> EVP_PKEY *tempkey;
>
>
>
>
> generate();
>
>
>
> setkey("priv21.pem",privateKey,NULL);
> tempkey=loadkey("priv21.pem",NULL);
>
> if(tempkey==NULL)
> {
> printf("\n hey this is not the way to do it \n");
> exit(1);
>
> }
>
>
> return 1;
> }
>
> -------------------------------------------------------
>
> ____________________________________________________________
> Do You Yahoo!?
> For regular News updates go to http://in.news.yahoo.com
> ______________________________________________________________________
> OpenSSL Project http://www.openssl.org
> User Support Mailing List [EMAIL PROTECTED]
> Automated List Manager [EMAIL PROTECTED]
--
FERDINANDO RICCHIUTI
Research & Development
CSP s.c. a r.l.
____________________________________________
Villa Gualino
Viale Settimo Severo, 63 - 10133 Torino [IT]
e-mail [EMAIL PROTECTED]
mob +39 (0)348 6023959
tel +39 (0)11 3165401
____________________________________________
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]