Initial support for certificate purpose checking: this will
[openssl.git] / crypto / x509 / x509.h
index 262be3f9f25f02037cbbbc8478c47d87d5329218..64b07e47869417f160575fcbec5db3e871edb5fb 100644 (file)
@@ -176,9 +176,8 @@ typedef struct X509_extension_st
        short critical;
        short netscape_hack;
        ASN1_OCTET_STRING *value;
-       long argl;                      /* used when decoding */
-       char *argp;                     /* used when decoding */
-       void (*ex_free)();              /* clear argp stuff */
+       struct v3_ext_method *method;   /* V3 method to use */
+       void *ext_val;                  /* extension value */
        } X509_EXTENSION;
 
 DECLARE_STACK_OF(X509_EXTENSION)
@@ -239,6 +238,13 @@ typedef struct x509_st
        int valid;
        int references;
        char *name;
+       CRYPTO_EX_DATA ex_data;
+       /* These contain copies of various extension values */
+       long ex_pathlen;
+       unsigned long ex_flags;
+       unsigned long ex_kusage;
+       unsigned long ex_xkusage;
+       unsigned long ex_nscert;
        } X509;
 
 DECLARE_STACK_OF(X509)
@@ -583,6 +589,8 @@ RSA *d2i_RSAPublicKey_fp(FILE *fp,RSA **rsa);
 int i2d_RSAPublicKey_fp(FILE *fp,RSA *rsa);
 #endif
 #ifndef NO_DSA
+DSA *d2i_DSAPublicKey_fp(FILE *fp, DSA **dsa);
+int i2d_DSAPublicKey_fp(FILE *fp, DSA *dsa);
 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
 int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
 X509_SIG *d2i_PKCS8_fp(FILE *fp,X509_SIG **p8);
@@ -607,6 +615,8 @@ RSA *d2i_RSAPublicKey_bio(BIO *bp,RSA **rsa);
 int i2d_RSAPublicKey_bio(BIO *bp,RSA *rsa);
 #endif
 #ifndef NO_DSA
+DSA *d2i_DSAPublicKey_bio(BIO *bp, DSA **dsa);
+int i2d_DSAPublicKey_bio(BIO *bp, DSA *dsa);
 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
 int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
 #endif
@@ -721,6 +731,10 @@ X509 *             X509_new(void);
 void           X509_free(X509 *a);
 int            i2d_X509(X509 *a,unsigned char **pp);
 X509 *         d2i_X509(X509 **a,unsigned char **pp,long length);
+int X509_get_ex_new_index(long argl, char *argp, int (*new_func)(),
+            int (*dup_func)(), void (*free_func)());
+int X509_set_ex_data(X509 *r, int idx, char *arg);
+char *X509_get_ex_data(X509 *r, int idx);
 
 X509_REVOKED * X509_REVOKED_new(void);
 void           X509_REVOKED_free(X509_REVOKED *a);