void main(void)

{

    X509 *cert = NULL;
    BIO *certBio = NULL;
    X509_EXTENSION *keyUsage = NULL;

    STACK_OF (X509_EXTENSION) *exts = NULL;
    ASN1_STRING *strUsage = NULL;
    void *Usage = NULL;
    X509V3_EXT_METHOD *method;
    STACK_OF(CONF_VALUE) *nval = NULL;
    CONF_VALUE *uval = NULL;
    int cnt = 0;             /* Total extension in certificate */
    int pos = 0;            /* Position of the extension */
    int critical = 0;       /* Critical value */

    OpenSSL_add_all_algorithms();
    ERR_load_crypto_strings();

    certBio = BIO_new(BIO_s_mem());
    if (!(certBio = BIO_new_mem_buf (certBuf, -1)))
    {
        printf("Error reading certificate\n");
        exit(0);
    }
    cert = PEM_read_bio_X509(certBio,NULL,NULL,NULL);


    cnt = X509_get_ext_count(cert);
    pos = X509_get_ext_by_NID(cert, NID_key_usage, -1);
    keyUsage = X509_get_ext(cert,pos);

    /* This is just a generic print key usage function */
    /* See the OpenSSL source for more details */
    /* See v3_prn.c  openssl/crypto/x509v3/v3_prn.c */

    method = X509V3_EXT_get(keyUsage);

    if(method->it)
        Usage =
ASN1_item_d2i(NULL,&keyUsage->value->data,keyUsage->value->length,
ASN1_ITEM_ptr(method->it));
    else
        Usage = method->d2i(NULL, &keyUsage->value->data,
keyUsage->value->length);

    if(method->i2v)
    {

        int cnt = 0;
        nval = method->i2v(method, Usage, NULL);
        cnt = sk_CONF_VALUE_num(nval);         // The number of key usage
extensions
        uval = sk_CONF_VALUE_value(nval, 0); // First ext
        printf("%s\n",uval->name);   /* You can save uval->name to a buffer
or use a pointer value */
        uval = sk_CONF_VALUE_value(nval, 1); // Second ext
        printf("%s\n",uval->name);

    }

}



----- Original Message ----- 
From: "Shivaram Mysore" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, July 05, 2004 12:42 PM
Subject: question regarding getting keyusage info into a char *


> Hi,
>
> I am interested in getting only the key usage info
> from a X509 cert in C.
>
> I can print this by:
> X509V3_EXT_print_fp(stdout, X509_get_ext(my_x509cert,
> (X509_get_ext_by_NID(my_x509cert,
> OBJ_sn2nid(SN_key_usage), -1))), 0, 0);
>
> If my cert has the following info:
>
> key usage: Digital Signature, Non Repudiation, Key
> Encipherment, Data Encipherment, Key Agreement
>
> and I want to get the values into a say a char * how
> can I do it.
>
> Any help is greatly appreciated.
>
> Thanks
>
> /Shivaram
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - 50x more storage than other providers!
> http://promotions.yahoo.com/new_mail
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    [EMAIL PROTECTED]
> Automated List Manager                           [EMAIL PROTECTED]

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

Reply via email to