Hi All,
 
I have to read x509 certificate(in .pem format) from memory.
I have written two functions.

Fn.1

/* get X509 structure from memory. */
extern X509 *mem2x509(vchar_t *cert)
{
   X509 *x509;

 unsigned char *bp;

 bp = (unsigned char *) cert->v;

 x509 = d2i_X509(NULL, &bp, cert->l);

 if(x509 == NULL)
  {
  Printf("ERROR :  %s : %d : %s\n ", __FILE__, __LINE__, "failed in d2ix509()");

 }
return x509;
}

Fn.2

extern X509 *mem2x509_bio(vchar_t *cert)
 {
 X509 *x509= NULL;
 BIO *bio = NULL;
 int len = -1;

 bio = BIO_new(BIO_s_mem());
 if (bio == NULL)
  {
   Printf("ERROR :  %s : %d : %s\n ", __FILE__, __LINE__, "failed in BIO_new()");
   return NULL;
  }
 len = BIO_write(bio, cert->v, cert->l);
 if (len == -1)
  {
   Printf("ERROR :  %s : %d : %s\n ", __FILE__, __LINE__, "failed in BIO_write()");
   return NULL;
  }
 x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
 
 if(x509 == NULL)
  {
   Printf("ERROR :  %s : %d : %s\n ", __FILE__, __LINE__, "failed in PEM_read_bio_X509()");
  }
 BIO_free(bio);
   
 return x509;
}

Now certificate data is stored in char array.

       vchar_t *cacert = NULL;
       cacert = vmalloc(strlen(CERT.CACert));
       memcpy(cacert->v, CERT.CACert, strlen(CERT.CACert));
      

Now i m extracting with above two functions.

Fn1 is failling .I m getting "failed in d2i_x509" message.

F2. is passed.

Can some explain the reason ?

Regards,

Rajeshwar

Reply via email to