[EMAIL PROTECTED] wrote:
> 
> >Currently V3 extension support is almost absent.
> 
> We've done almost all of what you're suggesting:
> typedef struct x509_extension_method_st
>     {
>     int nid;
>     void (*clear)();
>     int (*get_bool)();          //  used if extn is ASN1_BIT_STRING
>     int (*set_bool)();
>     int (*get_str)();           //  used if extn is ASN1_STRING or array of them
>     int (*set_str)();
>     char *(*get_struct)();      //  used if extn is constructed type
>     int (*set_struct)();
>     ASN1_OCTET_STRING *(*a2i)();
>     int (*i2a)();
>     } X509_EXTENSION_METHOD;
> 
> We've integrated this into the X509 code (i.e., for Certs and CRL's), as
> well as
> the req and ca apps.  For example, here's a snippet from a config file:
>         [ gto_root_extensions ]
>         keyUsage = critical|nonRepudiation|digitalSignature|keyCertSign
>         certificatePolicies =
> critical,2.16.840.1.113731.99999.2.1,cps,http://www.gto.com/cps
>         basicConstraints = critical,TRUE
>         authorityInfoAccess = id-ad-ocspResponder,http://www.gto.com/ocspv1
> 
> (We've got a good chunk, but not all, of the PKIX extensions implemented.)
> 
> We'd love to see this code adopted by the project.  We've held back from
> being public
> before because we were waiting to hear back from Eric -- we wanted to avoid
> version
> and architecture skew.  But since things are open right now...
> 

I've been developing things along the lines I mentioned myself. I've
currently got support for strings, bit strings and basicConstraints and
it will happily print out things like:

Netscape Comment:
        THIS IS A TEST CERTIFICATE
X509v3 Extended Key Usage:
        2.16.840.1.113733.1.8.1, 2.16.840.1.113730.4.1
X509v3 Basic Constraints:
        CA=TRUE, pathlen=10
Netscape Cert Type:
        SSL CA, S/MIME CA, Object Signing CA

I didn't precisely want to follow what it looked like Eric intended
because it seemed that the a2i,i2a stuff would be duplicating a lot of
code. Just passing it a STACK of name+value pairs and having some
higher level wrappers decompose the config file into the name+value
parts would make the writing of individual extension code much easier.

It seems that almost any extension can be represented in this way.

There are a few exceptions: e.g. those whose values vary from one
request to another (e.g. subjectAltName, various hash based
identifiers).

The reason I mentioned a separate section for this stuff is that it's
the easiest way with the current config stuff to handle things. The
method where you do:

basicConstraints=section_name

[section_name]

CA=TRUE
pathlen=10

allows the STACK of name+value pairs to be easily obtained using the
current config lib stuff.

Although simple this is a bit messy and parsing a comma separated list
of options would be better e.g.

basicConstraints=CA:TRUE,pathlen:10

In my proposal this would just need a cleverer wrapper: the individual
extension code would be unchanged.

Any code you wish to donate would be of course welcome. Particularly for
some of the nastier extensions.

Steve.
-- 
Dr Stephen N. Henson. UK based freelance Cryptographic Consultant. 
For info see homepage at http://www.drh-consultancy.demon.co.uk/
Email: [EMAIL PROTECTED]
NOTE NEW (13/12/98) PGP key: via homepage.

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

Reply via email to