Hi all!
I'm trying to scratch a distpoint from an X509 certificate. The code is shown 
below. It works, but it's a little bit dirty... 
'i2d_DIST_POINT_NAME' delivers me the distpoints, but I have to skip four 
bytes the extract the string.

Does anyone know:
- The data type created by 'i2d_DIST_POINT_NAME' ?
- An openssl-standard function, that is able to extract the string?
- Another approuch to extract the CRL-Distpoints from an X509v3-cert?


TIA,
Sebastian
-- 


char *getCrlDistPoint(X509 *xcert, unsigned char *filter) {
   X509_EXTENSION * ext = NULL;
   STACK_OF(DIST_POINT) * distpoints = NULL;
   DIST_POINT *dist;
   unsigned char *dbuf,buf[1024], *p, *hugo;
   unsigned int i, y;
   
   memset (buf, 0, sizeof(buf));
   
   i = X509_get_ext_by_NID(xcert, NID_crl_distribution_points, -1);
   ext = X509_get_ext(xcert, i);
   
   if(ext == NULL || ext->value == NULL)
            return NULL;
   dbuf = ext->value->data;
 
   distpoints =(STACK_OF(DIST_POINT)*)
               d2i_CRL_DIST_POINTS(&distpoints, &dbuf, ext->value->length);

   if(distpoints == NULL ) return "";
   
   for (i=0; i < distpoints->num; i++) {
      dist = sk_DIST_POINT_value(distpoints, i);
      memset (buf, 0, sizeof(buf));
      p = buf;
      hugo = NULL;
      y = i2d_DIST_POINT_NAME(dist->distpoint, &p);
      if (y > 0) {
         if (!memcmp(filter, buf + 4, 4)) {
            if (NULL != (hugo = (unsigned char *) malloc(y -3))) {
               memcpy(hugo, buf + 4, y -3);
            }
         }
      }
      DIST_POINT_free(dist);
   }
   sk_DIST_POINT_free(distpoints);
   return hugo;
}

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to