Place standard CRL behaviour in default X509_CRL_METHOD new functions to
[openssl.git] / crypto / x509 / x509.h
index c512ac68657a309e009e1816d8c6ba1209740247..51c5a0abceb4e4bb0193fc2f29267460a3bf92b2 100644 (file)
@@ -189,7 +189,9 @@ struct X509_name_st
 #else
        char *bytes;
 #endif
-       unsigned long hash; /* Keep the hash around for lookups */
+/*     unsigned long hash; Keep the hash around for lookups */
+       unsigned char *canon_enc;
+       int canon_enclen;
        } /* X509_NAME */;
 
 DECLARE_STACK_OF(X509_NAME)
@@ -286,8 +288,9 @@ struct x509_st
        unsigned long ex_xkusage;
        unsigned long ex_nscert;
        ASN1_OCTET_STRING *skid;
-       struct AUTHORITY_KEYID_st *akid;
+       AUTHORITY_KEYID *akid;
        X509_POLICY_CACHE *policy_cache;
+       STACK_OF(DIST_POINT) *crldp;
 #ifndef OPENSSL_NO_SHA
        unsigned char sha1_hash[SHA_DIGEST_LENGTH];
 #endif
@@ -417,13 +420,13 @@ typedef struct x509_cert_pair_st {
                        XN_FLAG_FN_LN | \
                        XN_FLAG_FN_ALIGN)
 
-typedef struct X509_revoked_st
+struct x509_revoked_st
        {
        ASN1_INTEGER *serialNumber;
        ASN1_TIME *revocationDate;
        STACK_OF(X509_EXTENSION) /* optional */ *extensions;
        int sequence; /* load sequence */
-       } X509_REVOKED;
+       };
 
 DECLARE_STACK_OF(X509_REVOKED)
 DECLARE_ASN1_SET_OF(X509_REVOKED)
@@ -447,6 +450,18 @@ struct X509_crl_st
        X509_ALGOR *sig_alg;
        ASN1_BIT_STRING *signature;
        int references;
+       int flags;
+       /* Copies of various extensions */
+       AUTHORITY_KEYID *akid;
+       ISSUING_DIST_POINT *idp;
+       /* Convenient breakdown of IDP */
+       int idp_flags;
+       int idp_reasons;
+#ifndef OPENSSL_NO_SHA
+       unsigned char sha1_hash[SHA_DIGEST_LENGTH];
+#endif
+       const X509_CRL_METHOD *meth;
+       void *meth_data;
        } /* X509_CRL */;
 
 DECLARE_STACK_OF(X509_CRL)
@@ -734,6 +749,22 @@ extern "C" {
 #define                X509_CRL_get_issuer(x) ((x)->crl->issuer)
 #define                X509_CRL_get_REVOKED(x) ((x)->crl->revoked)
 
+void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
+X509_CRL_METHOD *X509_CRL_METHOD_new(
+       int (*crl_init)(X509_CRL *crl),
+       int (*crl_free)(X509_CRL *crl),
+       int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *ser),
+       int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk));
+void X509_CRL_METHOD_free(X509_CRL_METHOD *m);
+
+void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
+void *X509_CRL_get_meth_data(X509_CRL *crl);
+
+IMPLEMENT_STACK_OF(X509_REVOKED)
+IMPLEMENT_ASN1_SET_OF(X509_REVOKED)
+IMPLEMENT_STACK_OF(X509_CRL)
+IMPLEMENT_ASN1_SET_OF(X509_CRL)
+
 /* This one is only used so that a binary form can output, as in
  * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf) */
 #define        X509_get_X509_PUBKEY(x) ((x)->cert_info->key)
@@ -956,6 +987,8 @@ DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
 DECLARE_ASN1_FUNCTIONS(X509_CRL)
 
 int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
+int X509_CRL_get0_by_serial(X509_CRL *crl,
+               X509_REVOKED **ret, ASN1_INTEGER *serial);
 
 X509_PKEY *    X509_PKEY_new(void );
 void           X509_PKEY_free(X509_PKEY *a);
@@ -1062,6 +1095,7 @@ int               X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
 unsigned long  X509_NAME_hash(X509_NAME *x);
 
 int            X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
+int            X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
 #ifndef OPENSSL_NO_FP_API
 int            X509_print_ex_fp(FILE *bp,X509 *x, unsigned long nmflag, unsigned long cflag);
 int            X509_print_fp(FILE *bp,X509 *x);
@@ -1238,6 +1272,9 @@ DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
 X509_ALGOR *PKCS5_pbe_set(int alg, int iter, unsigned char *salt, int saltlen);
 X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
                                         unsigned char *salt, int saltlen);
+X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
+                                unsigned char *salt, int saltlen,
+                                unsigned char *aiv, int prf_nid);
 
 /* PKCS#8 utilities */