Yet another stack.
This commit is contained in:
parent
8051996a5b
commit
0b3f827cf5
10 changed files with 151 additions and 68 deletions
|
@ -94,6 +94,7 @@ my %table=(
|
||||||
"purify", "purify gcc:-g -DPURIFY -Wall:(unknown):-lsocket -lnsl::::",
|
"purify", "purify gcc:-g -DPURIFY -Wall:(unknown):-lsocket -lnsl::::",
|
||||||
"debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:(unknown):-lefence::::",
|
"debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:(unknown):-lefence::::",
|
||||||
"debug-ben", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -O2 -pedantic -Wall -Wshadow -Werror -pipe:(unknown):::::",
|
"debug-ben", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -O2 -pedantic -Wall -Wshadow -Werror -pipe:(unknown):::::",
|
||||||
|
"debug-ben-debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe:(unknown):::::",
|
||||||
"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe:(unknown):::::",
|
"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe:(unknown):::::",
|
||||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall:(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
|
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall:(unknown)::BN_LLONG $x86_gcc_des $x86_gcc_opts:$x86_elf_asm",
|
||||||
"dist", "cc:-O:(unknown):::::",
|
"dist", "cc:-O:(unknown):::::",
|
||||||
|
|
|
@ -1721,7 +1721,8 @@ again2:
|
||||||
/* Free the current entries if any, there should not
|
/* Free the current entries if any, there should not
|
||||||
* be any I belive */
|
* be any I belive */
|
||||||
if (ci->extensions != NULL)
|
if (ci->extensions != NULL)
|
||||||
sk_pop_free(ci->extensions,X509_EXTENSION_free);
|
sk_X509_EXTENSION_pop_free(ci->extensions,
|
||||||
|
X509_EXTENSION_free);
|
||||||
|
|
||||||
ci->extensions = NULL;
|
ci->extensions = NULL;
|
||||||
|
|
||||||
|
|
|
@ -638,8 +638,8 @@ int print_attribs (BIO *out, STACK *attrlst, char *name)
|
||||||
BIO_printf(out, ": ");
|
BIO_printf(out, ": ");
|
||||||
} else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid));
|
} else BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid));
|
||||||
|
|
||||||
if(sk_num(attr->value.set)) {
|
if(sk_ASN1_TYPE_num(attr->value.set)) {
|
||||||
av = (ASN1_TYPE *)sk_value(attr->value.set, 0);
|
av = sk_ASN1_TYPE_value(attr->value.set, 0);
|
||||||
switch(av->type) {
|
switch(av->type) {
|
||||||
case V_ASN1_BMPSTRING:
|
case V_ASN1_BMPSTRING:
|
||||||
value = uni2asc(av->value.bmpstring->data,
|
value = uni2asc(av->value.bmpstring->data,
|
||||||
|
|
|
@ -175,6 +175,10 @@ err:\
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
if ((a != NULL) && (sk_num(a) != 0)) \
|
||||||
M_ASN1_I2D_put_SEQUENCE(a,f);
|
M_ASN1_I2D_put_SEQUENCE(a,f);
|
||||||
|
|
||||||
|
#define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \
|
||||||
|
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
||||||
|
M_ASN1_I2D_put_SEQUENCE_type(type,a,f);
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \
|
#define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \
|
||||||
if ((c.slen != 0) && \
|
if ((c.slen != 0) && \
|
||||||
(M_ASN1_next == \
|
(M_ASN1_next == \
|
||||||
|
@ -206,6 +210,11 @@ err:\
|
||||||
V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
|
V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
|
||||||
{ M_ASN1_D2I_get_seq(r,func,free_func); }
|
{ M_ASN1_D2I_get_seq(r,func,free_func); }
|
||||||
|
|
||||||
|
#define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \
|
||||||
|
if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \
|
||||||
|
V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\
|
||||||
|
{ M_ASN1_D2I_get_seq_type(type,r,func,free_func); }
|
||||||
|
|
||||||
#define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \
|
#define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \
|
||||||
M_ASN1_D2I_get_imp_set(r,func,free_func,\
|
M_ASN1_D2I_get_imp_set(r,func,free_func,\
|
||||||
x,V_ASN1_CONTEXT_SPECIFIC);
|
x,V_ASN1_CONTEXT_SPECIFIC);
|
||||||
|
@ -286,6 +295,32 @@ err:\
|
||||||
c.slen-=(c.p-c.q); \
|
c.slen-=(c.p-c.q); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \
|
||||||
|
if ((c.slen != 0) && (M_ASN1_next == \
|
||||||
|
(V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \
|
||||||
|
{ \
|
||||||
|
int Tinf,Ttag,Tclass; \
|
||||||
|
long Tlen; \
|
||||||
|
\
|
||||||
|
c.q=c.p; \
|
||||||
|
Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \
|
||||||
|
if (Tinf & 0x80) \
|
||||||
|
{ c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \
|
||||||
|
c.line=__LINE__; goto err; } \
|
||||||
|
if (Tinf == (V_ASN1_CONSTRUCTED+1)) \
|
||||||
|
Tlen = c.slen - (c.p - c.q) - 2; \
|
||||||
|
if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \
|
||||||
|
free_func,b,V_ASN1_UNIVERSAL) == NULL) \
|
||||||
|
{ c.line=__LINE__; goto err; } \
|
||||||
|
if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
|
||||||
|
Tlen = c.slen - (c.p - c.q); \
|
||||||
|
if(!ASN1_check_infinite_end(&c.p, Tlen)) \
|
||||||
|
{ c.error=ERR_R_MISSING_ASN1_EOS; \
|
||||||
|
c.line=__LINE__; goto err; } \
|
||||||
|
}\
|
||||||
|
c.slen-=(c.p-c.q); \
|
||||||
|
}
|
||||||
|
|
||||||
/* New macros */
|
/* New macros */
|
||||||
#define M_ASN1_New_Malloc(ret,type) \
|
#define M_ASN1_New_Malloc(ret,type) \
|
||||||
if ((ret=(type *)Malloc(sizeof(type))) == NULL) \
|
if ((ret=(type *)Malloc(sizeof(type))) == NULL) \
|
||||||
|
@ -329,6 +364,10 @@ err:\
|
||||||
if ((a != NULL) && (sk_num(a) != 0)) \
|
if ((a != NULL) && (sk_num(a) != 0)) \
|
||||||
M_ASN1_I2D_len_SEQUENCE(a,f);
|
M_ASN1_I2D_len_SEQUENCE(a,f);
|
||||||
|
|
||||||
|
#define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \
|
||||||
|
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
||||||
|
M_ASN1_I2D_len_SEQUENCE_type(type,a,f);
|
||||||
|
|
||||||
#define M_ASN1_I2D_len_IMP_SET(a,f,x) \
|
#define M_ASN1_I2D_len_IMP_SET(a,f,x) \
|
||||||
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET);
|
ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET);
|
||||||
|
|
||||||
|
@ -383,6 +422,15 @@ err:\
|
||||||
ret+=ASN1_object_size(1,v,mtag); \
|
ret+=ASN1_object_size(1,v,mtag); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
|
||||||
|
if ((a != NULL) && (sk_##type##_num(a) != 0))\
|
||||||
|
{ \
|
||||||
|
v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \
|
||||||
|
V_ASN1_UNIVERSAL, \
|
||||||
|
IS_SEQUENCE); \
|
||||||
|
ret+=ASN1_object_size(1,v,mtag); \
|
||||||
|
}
|
||||||
|
|
||||||
/* Put Macros */
|
/* Put Macros */
|
||||||
#define M_ASN1_I2D_put(a,f) f(a,&p)
|
#define M_ASN1_I2D_put(a,f) f(a,&p)
|
||||||
|
|
||||||
|
@ -457,6 +505,14 @@ err:\
|
||||||
i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \
|
i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \
|
||||||
|
if ((a != NULL) && (sk_##type##_num(a) != 0)) \
|
||||||
|
{ \
|
||||||
|
ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \
|
||||||
|
i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \
|
||||||
|
IS_SEQUENCE); \
|
||||||
|
}
|
||||||
|
|
||||||
#define M_ASN1_I2D_seq_total() \
|
#define M_ASN1_I2D_seq_total() \
|
||||||
r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \
|
r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \
|
||||||
if (pp == NULL) return(r); \
|
if (pp == NULL) return(r); \
|
||||||
|
|
|
@ -74,7 +74,9 @@ int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
|
||||||
M_ASN1_I2D_len(a->key, i2d_X509_PUBKEY);
|
M_ASN1_I2D_len(a->key, i2d_X509_PUBKEY);
|
||||||
M_ASN1_I2D_len_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING);
|
M_ASN1_I2D_len_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING);
|
||||||
M_ASN1_I2D_len_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING);
|
M_ASN1_I2D_len_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING);
|
||||||
M_ASN1_I2D_len_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2);
|
M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
|
i2d_X509_EXTENSION,3,
|
||||||
|
V_ASN1_SEQUENCE,v2);
|
||||||
|
|
||||||
M_ASN1_I2D_seq_total();
|
M_ASN1_I2D_seq_total();
|
||||||
|
|
||||||
|
@ -87,7 +89,9 @@ int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
|
||||||
M_ASN1_I2D_put(a->key, i2d_X509_PUBKEY);
|
M_ASN1_I2D_put(a->key, i2d_X509_PUBKEY);
|
||||||
M_ASN1_I2D_put_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING,1);
|
M_ASN1_I2D_put_IMP_opt(a->issuerUID, i2d_ASN1_BIT_STRING,1);
|
||||||
M_ASN1_I2D_put_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING,2);
|
M_ASN1_I2D_put_IMP_opt(a->subjectUID, i2d_ASN1_BIT_STRING,2);
|
||||||
M_ASN1_I2D_put_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,3,V_ASN1_SEQUENCE,v2);
|
M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
|
i2d_X509_EXTENSION,3,
|
||||||
|
V_ASN1_SEQUENCE,v2);
|
||||||
|
|
||||||
M_ASN1_I2D_finish();
|
M_ASN1_I2D_finish();
|
||||||
}
|
}
|
||||||
|
@ -147,11 +151,13 @@ X509_CINF *d2i_X509_CINF(X509_CINF **a, unsigned char **pp, long length)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (ret->extensions != NULL)
|
if (ret->extensions != NULL)
|
||||||
while (sk_num(ret->extensions))
|
while (sk_X509_EXTENSION_num(ret->extensions))
|
||||||
X509_EXTENSION_free((X509_EXTENSION *)
|
X509_EXTENSION_free(
|
||||||
sk_pop(ret->extensions));
|
sk_X509_EXTENSION_pop(ret->extensions));
|
||||||
M_ASN1_D2I_get_EXP_set_opt(ret->extensions,d2i_X509_EXTENSION,
|
M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
|
||||||
X509_EXTENSION_free,3,V_ASN1_SEQUENCE);
|
d2i_X509_EXTENSION,
|
||||||
|
X509_EXTENSION_free,3,
|
||||||
|
V_ASN1_SEQUENCE);
|
||||||
}
|
}
|
||||||
M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF);
|
M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF);
|
||||||
}
|
}
|
||||||
|
@ -188,7 +194,7 @@ void X509_CINF_free(X509_CINF *a)
|
||||||
X509_PUBKEY_free(a->key);
|
X509_PUBKEY_free(a->key);
|
||||||
ASN1_BIT_STRING_free(a->issuerUID);
|
ASN1_BIT_STRING_free(a->issuerUID);
|
||||||
ASN1_BIT_STRING_free(a->subjectUID);
|
ASN1_BIT_STRING_free(a->subjectUID);
|
||||||
sk_pop_free(a->extensions,X509_EXTENSION_free);
|
sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
|
||||||
Free((char *)a);
|
Free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,13 +69,15 @@ int i2d_X509_REVOKED(X509_REVOKED *a, unsigned char **pp)
|
||||||
|
|
||||||
M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER);
|
M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER);
|
||||||
M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_TIME);
|
M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_TIME);
|
||||||
M_ASN1_I2D_len_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION);
|
M_ASN1_I2D_len_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
|
i2d_X509_EXTENSION);
|
||||||
|
|
||||||
M_ASN1_I2D_seq_total();
|
M_ASN1_I2D_seq_total();
|
||||||
|
|
||||||
M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER);
|
M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER);
|
||||||
M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_TIME);
|
M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_TIME);
|
||||||
M_ASN1_I2D_put_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION);
|
M_ASN1_I2D_put_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
|
i2d_X509_EXTENSION);
|
||||||
|
|
||||||
M_ASN1_I2D_finish();
|
M_ASN1_I2D_finish();
|
||||||
}
|
}
|
||||||
|
@ -89,8 +91,8 @@ X509_REVOKED *d2i_X509_REVOKED(X509_REVOKED **a, unsigned char **pp,
|
||||||
M_ASN1_D2I_start_sequence();
|
M_ASN1_D2I_start_sequence();
|
||||||
M_ASN1_D2I_get(ret->serialNumber,d2i_ASN1_INTEGER);
|
M_ASN1_D2I_get(ret->serialNumber,d2i_ASN1_INTEGER);
|
||||||
M_ASN1_D2I_get(ret->revocationDate,d2i_ASN1_TIME);
|
M_ASN1_D2I_get(ret->revocationDate,d2i_ASN1_TIME);
|
||||||
M_ASN1_D2I_get_seq_opt(ret->extensions,d2i_X509_EXTENSION,
|
M_ASN1_D2I_get_seq_opt_type(X509_EXTENSION,ret->extensions,
|
||||||
X509_EXTENSION_free);
|
d2i_X509_EXTENSION,X509_EXTENSION_free);
|
||||||
M_ASN1_D2I_Finish(a,X509_REVOKED_free,ASN1_F_D2I_X509_REVOKED);
|
M_ASN1_D2I_Finish(a,X509_REVOKED_free,ASN1_F_D2I_X509_REVOKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,8 +115,9 @@ int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp)
|
||||||
if (a->nextUpdate != NULL)
|
if (a->nextUpdate != NULL)
|
||||||
{ M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_TIME); }
|
{ M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_TIME); }
|
||||||
M_ASN1_I2D_len_SEQUENCE_opt(a->revoked,i2d_X509_REVOKED);
|
M_ASN1_I2D_len_SEQUENCE_opt(a->revoked,i2d_X509_REVOKED);
|
||||||
M_ASN1_I2D_len_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,0,
|
M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
V_ASN1_SEQUENCE,v1);
|
i2d_X509_EXTENSION,0,
|
||||||
|
V_ASN1_SEQUENCE,v1);
|
||||||
|
|
||||||
M_ASN1_I2D_seq_total();
|
M_ASN1_I2D_seq_total();
|
||||||
|
|
||||||
|
@ -128,8 +131,9 @@ int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp)
|
||||||
if (a->nextUpdate != NULL)
|
if (a->nextUpdate != NULL)
|
||||||
{ M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); }
|
{ M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_UTCTIME); }
|
||||||
M_ASN1_I2D_put_SEQUENCE_opt(a->revoked,i2d_X509_REVOKED);
|
M_ASN1_I2D_put_SEQUENCE_opt(a->revoked,i2d_X509_REVOKED);
|
||||||
M_ASN1_I2D_put_EXP_SEQUENCE_opt(a->extensions,i2d_X509_EXTENSION,0,
|
M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions,
|
||||||
V_ASN1_SEQUENCE,v1);
|
i2d_X509_EXTENSION,0,
|
||||||
|
V_ASN1_SEQUENCE,v1);
|
||||||
|
|
||||||
M_ASN1_I2D_finish();
|
M_ASN1_I2D_finish();
|
||||||
}
|
}
|
||||||
|
@ -185,13 +189,15 @@ X509_CRL_INFO *d2i_X509_CRL_INFO(X509_CRL_INFO **a, unsigned char **pp,
|
||||||
{
|
{
|
||||||
if (ret->extensions != NULL)
|
if (ret->extensions != NULL)
|
||||||
{
|
{
|
||||||
while (sk_num(ret->extensions))
|
while (sk_X509_EXTENSION_num(ret->extensions))
|
||||||
X509_EXTENSION_free((X509_EXTENSION *)
|
X509_EXTENSION_free(
|
||||||
sk_pop(ret->extensions));
|
sk_X509_EXTENSION_pop(ret->extensions));
|
||||||
}
|
}
|
||||||
|
|
||||||
M_ASN1_D2I_get_EXP_set_opt(ret->extensions,d2i_X509_EXTENSION,
|
M_ASN1_D2I_get_EXP_set_opt_type(X509_EXTENSION,ret->extensions,
|
||||||
X509_EXTENSION_free,0,V_ASN1_SEQUENCE);
|
d2i_X509_EXTENSION,
|
||||||
|
X509_EXTENSION_free,0,
|
||||||
|
V_ASN1_SEQUENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO);
|
M_ASN1_D2I_Finish(a,X509_CRL_INFO_free,ASN1_F_D2I_X509_CRL_INFO);
|
||||||
|
@ -253,7 +259,7 @@ X509_CRL_INFO *X509_CRL_INFO_new(void)
|
||||||
M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new);
|
M_ASN1_New(ret->lastUpdate,ASN1_UTCTIME_new);
|
||||||
ret->nextUpdate=NULL;
|
ret->nextUpdate=NULL;
|
||||||
M_ASN1_New(ret->revoked,sk_new_null);
|
M_ASN1_New(ret->revoked,sk_new_null);
|
||||||
M_ASN1_New(ret->extensions,sk_new_null);
|
M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null);
|
||||||
ret->revoked->comp=(int (*)())X509_REVOKED_cmp;
|
ret->revoked->comp=(int (*)())X509_REVOKED_cmp;
|
||||||
return(ret);
|
return(ret);
|
||||||
M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW);
|
M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW);
|
||||||
|
@ -278,8 +284,8 @@ void X509_REVOKED_free(X509_REVOKED *a)
|
||||||
if (a == NULL) return;
|
if (a == NULL) return;
|
||||||
ASN1_INTEGER_free(a->serialNumber);
|
ASN1_INTEGER_free(a->serialNumber);
|
||||||
ASN1_UTCTIME_free(a->revocationDate);
|
ASN1_UTCTIME_free(a->revocationDate);
|
||||||
sk_pop_free(a->extensions,X509_EXTENSION_free);
|
sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
|
||||||
Free((char *)a);
|
Free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
void X509_CRL_INFO_free(X509_CRL_INFO *a)
|
void X509_CRL_INFO_free(X509_CRL_INFO *a)
|
||||||
|
@ -292,8 +298,8 @@ void X509_CRL_INFO_free(X509_CRL_INFO *a)
|
||||||
if (a->nextUpdate)
|
if (a->nextUpdate)
|
||||||
ASN1_UTCTIME_free(a->nextUpdate);
|
ASN1_UTCTIME_free(a->nextUpdate);
|
||||||
sk_pop_free(a->revoked,X509_REVOKED_free);
|
sk_pop_free(a->revoked,X509_REVOKED_free);
|
||||||
sk_pop_free(a->extensions,X509_EXTENSION_free);
|
sk_X509_EXTENSION_pop_free(a->extensions,X509_EXTENSION_free);
|
||||||
Free((char *)a);
|
Free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
void X509_CRL_free(X509_CRL *a)
|
void X509_CRL_free(X509_CRL *a)
|
||||||
|
@ -318,7 +324,7 @@ void X509_CRL_free(X509_CRL *a)
|
||||||
X509_CRL_INFO_free(a->crl);
|
X509_CRL_INFO_free(a->crl);
|
||||||
X509_ALGOR_free(a->sig_alg);
|
X509_ALGOR_free(a->sig_alg);
|
||||||
ASN1_BIT_STRING_free(a->signature);
|
ASN1_BIT_STRING_free(a->signature);
|
||||||
Free((char *)a);
|
Free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int X509_REVOKED_cmp(X509_REVOKED **a, X509_REVOKED **b)
|
static int X509_REVOKED_cmp(X509_REVOKED **a, X509_REVOKED **b)
|
||||||
|
|
|
@ -67,8 +67,8 @@ typedef struct stack_st_##type \
|
||||||
STACK_OF(type) *sk_##type##_new(int (*cmp)(type **,type **)); \
|
STACK_OF(type) *sk_##type##_new(int (*cmp)(type **,type **)); \
|
||||||
STACK_OF(type) *sk_##type##_new_null(void); \
|
STACK_OF(type) *sk_##type##_new_null(void); \
|
||||||
void sk_##type##_free(STACK_OF(type) *sk); \
|
void sk_##type##_free(STACK_OF(type) *sk); \
|
||||||
int sk_##type##_num(STACK_OF(type) *sk); \
|
int sk_##type##_num(const STACK_OF(type) *sk); \
|
||||||
type *sk_##type##_value(STACK_OF(type) *sk,int n); \
|
type *sk_##type##_value(const STACK_OF(type) *sk,int n); \
|
||||||
type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v); \
|
type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v); \
|
||||||
void sk_##type##_zero(STACK_OF(type) *sk); \
|
void sk_##type##_zero(STACK_OF(type) *sk); \
|
||||||
int sk_##type##_push(STACK_OF(type) *sk,type *v); \
|
int sk_##type##_push(STACK_OF(type) *sk,type *v); \
|
||||||
|
@ -89,9 +89,9 @@ STACK_OF(type) *sk_##type##_new_null() \
|
||||||
{ return (STACK_OF(type) *)sk_new_null(); } \
|
{ return (STACK_OF(type) *)sk_new_null(); } \
|
||||||
void sk_##type##_free(STACK_OF(type) *sk) \
|
void sk_##type##_free(STACK_OF(type) *sk) \
|
||||||
{ sk_free((STACK *)sk); } \
|
{ sk_free((STACK *)sk); } \
|
||||||
int sk_##type##_num(STACK_OF(type) *sk) \
|
int sk_##type##_num(const STACK_OF(type) *sk) \
|
||||||
{ return sk_num((STACK *)sk); } \
|
{ return sk_num((const STACK *)sk); } \
|
||||||
type *sk_##type##_value(STACK_OF(type) *sk,int n) \
|
type *sk_##type##_value(const STACK_OF(type) *sk,int n) \
|
||||||
{ return (type *)sk_value((STACK *)sk,n); } \
|
{ return (type *)sk_value((STACK *)sk,n); } \
|
||||||
type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v) \
|
type *sk_##type##_set(STACK_OF(type) *sk,int n,type *v) \
|
||||||
{ return (type *)(sk_value((STACK *)sk,n)=(char *)v); } \
|
{ return (type *)(sk_value((STACK *)sk,n)=(char *)v); } \
|
||||||
|
|
|
@ -167,6 +167,9 @@ typedef struct X509_extension_st
|
||||||
void (*ex_free)(); /* clear argp stuff */
|
void (*ex_free)(); /* clear argp stuff */
|
||||||
} X509_EXTENSION;
|
} X509_EXTENSION;
|
||||||
|
|
||||||
|
DECLARE_STACK_OF(X509_EXTENSION)
|
||||||
|
DECLARE_ASN1_SET_OF(X509_EXTENSION)
|
||||||
|
|
||||||
/* a sequence of these are used */
|
/* a sequence of these are used */
|
||||||
typedef struct x509_attributes_st
|
typedef struct x509_attributes_st
|
||||||
{
|
{
|
||||||
|
@ -211,7 +214,7 @@ typedef struct x509_cinf_st
|
||||||
X509_PUBKEY *key;
|
X509_PUBKEY *key;
|
||||||
ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
|
ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
|
||||||
ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
|
ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
|
||||||
STACK /* X509_EXTENSION */ *extensions; /* [ 3 ] optional in v3 */
|
STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
|
||||||
} X509_CINF;
|
} X509_CINF;
|
||||||
|
|
||||||
typedef struct x509_st
|
typedef struct x509_st
|
||||||
|
@ -231,7 +234,7 @@ typedef struct X509_revoked_st
|
||||||
{
|
{
|
||||||
ASN1_INTEGER *serialNumber;
|
ASN1_INTEGER *serialNumber;
|
||||||
ASN1_UTCTIME *revocationDate;
|
ASN1_UTCTIME *revocationDate;
|
||||||
STACK /* optional X509_EXTENSION */ *extensions;
|
STACK_OF(X509_EXTENSION) /* optional */ *extensions;
|
||||||
int sequence; /* load sequence */
|
int sequence; /* load sequence */
|
||||||
} X509_REVOKED;
|
} X509_REVOKED;
|
||||||
|
|
||||||
|
@ -243,7 +246,7 @@ typedef struct X509_crl_info_st
|
||||||
ASN1_UTCTIME *lastUpdate;
|
ASN1_UTCTIME *lastUpdate;
|
||||||
ASN1_UTCTIME *nextUpdate;
|
ASN1_UTCTIME *nextUpdate;
|
||||||
STACK /* X509_REVOKED */ *revoked;
|
STACK /* X509_REVOKED */ *revoked;
|
||||||
STACK /* [0] X509_EXTENSION */ *extensions;
|
STACK_OF(X509_EXTENSION) /* [0] */ *extensions;
|
||||||
} X509_CRL_INFO;
|
} X509_CRL_INFO;
|
||||||
|
|
||||||
typedef struct X509_crl_st
|
typedef struct X509_crl_st
|
||||||
|
@ -810,13 +813,17 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
|
||||||
ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);
|
ASN1_OBJECT * X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);
|
||||||
ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);
|
ASN1_STRING * X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);
|
||||||
|
|
||||||
int X509v3_get_ext_count(STACK *x);
|
int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
|
||||||
int X509v3_get_ext_by_NID(STACK *x, int nid, int lastpos);
|
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
|
||||||
int X509v3_get_ext_by_OBJ(STACK *x,ASN1_OBJECT *obj,int lastpos);
|
int nid, int lastpos);
|
||||||
int X509v3_get_ext_by_critical(STACK *x, int crit, int lastpos);
|
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
|
||||||
X509_EXTENSION *X509v3_get_ext(STACK *x, int loc);
|
ASN1_OBJECT *obj,int lastpos);
|
||||||
X509_EXTENSION *X509v3_delete_ext(STACK *x, int loc);
|
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
|
||||||
STACK * X509v3_add_ext(STACK **x, X509_EXTENSION *ex, int loc);
|
int crit, int lastpos);
|
||||||
|
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
|
||||||
|
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
|
||||||
|
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
|
||||||
|
X509_EXTENSION *ex, int loc);
|
||||||
|
|
||||||
int X509_get_ext_count(X509 *x);
|
int X509_get_ext_count(X509 *x);
|
||||||
int X509_get_ext_by_NID(X509 *x, int nid, int lastpos);
|
int X509_get_ext_by_NID(X509 *x, int nid, int lastpos);
|
||||||
|
|
|
@ -170,3 +170,5 @@ int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc)
|
||||||
return(X509v3_add_ext(&(x->extensions),ex,loc) != NULL);
|
return(X509v3_add_ext(&(x->extensions),ex,loc) != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMPLEMENT_STACK_OF(X509_EXTENSION)
|
||||||
|
IMPLEMENT_ASN1_SET_OF(X509_EXTENSION)
|
||||||
|
|
|
@ -64,13 +64,14 @@
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
int X509v3_get_ext_count(STACK *x)
|
int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x)
|
||||||
{
|
{
|
||||||
if (x == NULL) return(0);
|
if (x == NULL) return(0);
|
||||||
return(sk_num(x));
|
return(sk_X509_EXTENSION_num(x));
|
||||||
}
|
}
|
||||||
|
|
||||||
int X509v3_get_ext_by_NID(STACK *x, int nid, int lastpos)
|
int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid,
|
||||||
|
int lastpos)
|
||||||
{
|
{
|
||||||
ASN1_OBJECT *obj;
|
ASN1_OBJECT *obj;
|
||||||
|
|
||||||
|
@ -79,7 +80,8 @@ int X509v3_get_ext_by_NID(STACK *x, int nid, int lastpos)
|
||||||
return(X509v3_get_ext_by_OBJ(x,obj,lastpos));
|
return(X509v3_get_ext_by_OBJ(x,obj,lastpos));
|
||||||
}
|
}
|
||||||
|
|
||||||
int X509v3_get_ext_by_OBJ(STACK *sk, ASN1_OBJECT *obj, int lastpos)
|
int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk, ASN1_OBJECT *obj,
|
||||||
|
int lastpos)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
X509_EXTENSION *ex;
|
X509_EXTENSION *ex;
|
||||||
|
@ -88,17 +90,18 @@ int X509v3_get_ext_by_OBJ(STACK *sk, ASN1_OBJECT *obj, int lastpos)
|
||||||
lastpos++;
|
lastpos++;
|
||||||
if (lastpos < 0)
|
if (lastpos < 0)
|
||||||
lastpos=0;
|
lastpos=0;
|
||||||
n=sk_num(sk);
|
n=sk_X509_EXTENSION_num(sk);
|
||||||
for ( ; lastpos < n; lastpos++)
|
for ( ; lastpos < n; lastpos++)
|
||||||
{
|
{
|
||||||
ex=(X509_EXTENSION *)sk_value(sk,lastpos);
|
ex=sk_X509_EXTENSION_value(sk,lastpos);
|
||||||
if (OBJ_cmp(ex->object,obj) == 0)
|
if (OBJ_cmp(ex->object,obj) == 0)
|
||||||
return(lastpos);
|
return(lastpos);
|
||||||
}
|
}
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int X509v3_get_ext_by_critical(STACK *sk, int crit, int lastpos)
|
int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit,
|
||||||
|
int lastpos)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
X509_EXTENSION *ex;
|
X509_EXTENSION *ex;
|
||||||
|
@ -107,10 +110,10 @@ int X509v3_get_ext_by_critical(STACK *sk, int crit, int lastpos)
|
||||||
lastpos++;
|
lastpos++;
|
||||||
if (lastpos < 0)
|
if (lastpos < 0)
|
||||||
lastpos=0;
|
lastpos=0;
|
||||||
n=sk_num(sk);
|
n=sk_X509_EXTENSION_num(sk);
|
||||||
for ( ; lastpos < n; lastpos++)
|
for ( ; lastpos < n; lastpos++)
|
||||||
{
|
{
|
||||||
ex=(X509_EXTENSION *)sk_value(sk,lastpos);
|
ex=sk_X509_EXTENSION_value(sk,lastpos);
|
||||||
if ( (ex->critical && crit) ||
|
if ( (ex->critical && crit) ||
|
||||||
(!ex->critical && !crit))
|
(!ex->critical && !crit))
|
||||||
return(lastpos);
|
return(lastpos);
|
||||||
|
@ -118,45 +121,46 @@ int X509v3_get_ext_by_critical(STACK *sk, int crit, int lastpos)
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
X509_EXTENSION *X509v3_get_ext(STACK *x, int loc)
|
X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc)
|
||||||
{
|
{
|
||||||
if ((x == NULL) || (sk_num(x) <= loc) || (loc < 0))
|
if (x == NULL || sk_X509_EXTENSION_num(x) <= loc || loc < 0)
|
||||||
return(NULL);
|
return NULL;
|
||||||
else
|
else
|
||||||
return((X509_EXTENSION *)sk_value(x,loc));
|
return sk_X509_EXTENSION_value(x,loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
X509_EXTENSION *X509v3_delete_ext(STACK *x, int loc)
|
X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc)
|
||||||
{
|
{
|
||||||
X509_EXTENSION *ret;
|
X509_EXTENSION *ret;
|
||||||
|
|
||||||
if ((x == NULL) || (sk_num(x) <= loc) || (loc < 0))
|
if (x == NULL || sk_X509_EXTENSION_num(x) <= loc || loc < 0)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
ret=(X509_EXTENSION *)sk_delete(x,loc);
|
ret=sk_X509_EXTENSION_delete(x,loc);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
STACK *X509v3_add_ext(STACK **x, X509_EXTENSION *ex, int loc)
|
STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
|
||||||
|
X509_EXTENSION *ex, int loc)
|
||||||
{
|
{
|
||||||
X509_EXTENSION *new_ex=NULL;
|
X509_EXTENSION *new_ex=NULL;
|
||||||
int n;
|
int n;
|
||||||
STACK *sk=NULL;
|
STACK_OF(X509_EXTENSION) *sk=NULL;
|
||||||
|
|
||||||
if ((x != NULL) && (*x == NULL))
|
if ((x != NULL) && (*x == NULL))
|
||||||
{
|
{
|
||||||
if ((sk=sk_new_null()) == NULL)
|
if ((sk=sk_X509_EXTENSION_new_null()) == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
sk= *x;
|
sk= *x;
|
||||||
|
|
||||||
n=sk_num(sk);
|
n=sk_X509_EXTENSION_num(sk);
|
||||||
if (loc > n) loc=n;
|
if (loc > n) loc=n;
|
||||||
else if (loc < 0) loc=n;
|
else if (loc < 0) loc=n;
|
||||||
|
|
||||||
if ((new_ex=X509_EXTENSION_dup(ex)) == NULL)
|
if ((new_ex=X509_EXTENSION_dup(ex)) == NULL)
|
||||||
goto err2;
|
goto err2;
|
||||||
if (!sk_insert(sk,(char *)new_ex,loc))
|
if (!sk_X509_EXTENSION_insert(sk,new_ex,loc))
|
||||||
goto err;
|
goto err;
|
||||||
if ((x != NULL) && (*x == NULL))
|
if ((x != NULL) && (*x == NULL))
|
||||||
*x=sk;
|
*x=sk;
|
||||||
|
@ -165,7 +169,7 @@ err:
|
||||||
X509err(X509_F_X509V3_ADD_EXT,ERR_R_MALLOC_FAILURE);
|
X509err(X509_F_X509V3_ADD_EXT,ERR_R_MALLOC_FAILURE);
|
||||||
err2:
|
err2:
|
||||||
if (new_ex != NULL) X509_EXTENSION_free(new_ex);
|
if (new_ex != NULL) X509_EXTENSION_free(new_ex);
|
||||||
if (sk != NULL) sk_free(sk);
|
if (sk != NULL) sk_X509_EXTENSION_free(sk);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue