提交 56a3fec1 编写于 作者: D Dr. Stephen Henson

Add EX_DATA support to X509.

Fix a bug in the X509_get_d2i() functions which didn't check if crit was NULL.
上级 4654ef98
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
Changes between 0.9.4 and 0.9.5 [xx XXX 1999] Changes between 0.9.4 and 0.9.5 [xx XXX 1999]
*) Add a CRYPTO_EX_DATA to X509 certificate structure and associated
functions.
[Steve Henson]
*) New X509V3_{X509,CRL,REVOKED}_get_d2i() functions. These will search *) New X509V3_{X509,CRL,REVOKED}_get_d2i() functions. These will search
for, obtain and decode and extension and obtain its critical flag. for, obtain and decode and extension and obtain its critical flag.
This allows all the necessary extension code to be handled in a This allows all the necessary extension code to be handled in a
......
...@@ -62,6 +62,9 @@ ...@@ -62,6 +62,9 @@
#include <openssl/asn1_mac.h> #include <openssl/asn1_mac.h>
#include <openssl/x509.h> #include <openssl/x509.h>
static int x509_meth_num = 0;
static STACK *x509_meth = NULL;
static ASN1_METHOD meth={ static ASN1_METHOD meth={
(int (*)()) i2d_X509, (int (*)()) i2d_X509,
(char *(*)())d2i_X509, (char *(*)())d2i_X509,
...@@ -117,6 +120,7 @@ X509 *X509_new(void) ...@@ -117,6 +120,7 @@ X509 *X509_new(void)
M_ASN1_New(ret->cert_info,X509_CINF_new); M_ASN1_New(ret->cert_info,X509_CINF_new);
M_ASN1_New(ret->sig_alg,X509_ALGOR_new); M_ASN1_New(ret->sig_alg,X509_ALGOR_new);
M_ASN1_New(ret->signature,ASN1_BIT_STRING_new); M_ASN1_New(ret->signature,ASN1_BIT_STRING_new);
CRYPTO_new_ex_data(x509_meth, (char *)ret, &ret->ex_data);
return(ret); return(ret);
M_ASN1_New_Error(ASN1_F_X509_NEW); M_ASN1_New_Error(ASN1_F_X509_NEW);
} }
...@@ -140,7 +144,7 @@ void X509_free(X509 *a) ...@@ -140,7 +144,7 @@ void X509_free(X509 *a)
} }
#endif #endif
/* CRYPTO_free_ex_data(bio_meth,(char *)a,&a->ex_data); */ CRYPTO_free_ex_data(x509_meth,(char *)a,&a->ex_data);
X509_CINF_free(a->cert_info); X509_CINF_free(a->cert_info);
X509_ALGOR_free(a->sig_alg); X509_ALGOR_free(a->sig_alg);
ASN1_BIT_STRING_free(a->signature); ASN1_BIT_STRING_free(a->signature);
...@@ -149,3 +153,21 @@ void X509_free(X509 *a) ...@@ -149,3 +153,21 @@ void X509_free(X509 *a)
Free((char *)a); Free((char *)a);
} }
int X509_get_ex_new_index(long argl, char *argp, int (*new_func)(),
int (*dup_func)(), void (*free_func)())
{
x509_meth_num++;
return(CRYPTO_get_ex_new_index(x509_meth_num-1,
&x509_meth,argl,argp,new_func,dup_func,free_func));
}
int X509_set_ex_data(X509 *r, int idx, char *arg)
{
return(CRYPTO_set_ex_data(&r->ex_data,idx,arg));
}
char *X509_get_ex_data(X509 *r, int idx)
{
return(CRYPTO_get_ex_data(&r->ex_data,idx));
}
...@@ -238,6 +238,7 @@ typedef struct x509_st ...@@ -238,6 +238,7 @@ typedef struct x509_st
int valid; int valid;
int references; int references;
char *name; char *name;
CRYPTO_EX_DATA ex_data;
} X509; } X509;
DECLARE_STACK_OF(X509) DECLARE_STACK_OF(X509)
...@@ -724,6 +725,10 @@ X509 * X509_new(void); ...@@ -724,6 +725,10 @@ X509 * X509_new(void);
void X509_free(X509 *a); void X509_free(X509 *a);
int i2d_X509(X509 *a,unsigned char **pp); int i2d_X509(X509 *a,unsigned char **pp);
X509 * d2i_X509(X509 **a,unsigned char **pp,long length); 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); X509_REVOKED * X509_REVOKED_new(void);
void X509_REVOKED_free(X509_REVOKED *a); void X509_REVOKED_free(X509_REVOKED *a);
......
...@@ -219,7 +219,7 @@ void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx) ...@@ -219,7 +219,7 @@ void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit, int *idx)
} }
if(found_ex) { if(found_ex) {
/* Found it */ /* Found it */
*crit = found_ex->critical; if(crit) *crit = found_ex->critical;
return X509V3_EXT_d2i(found_ex); return X509V3_EXT_d2i(found_ex);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册