diff options
Diffstat (limited to 'src/lib/libcrypto/asn1')
-rw-r--r-- | src/lib/libcrypto/asn1/Makefile.ssl | 3 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/a_strnid.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_lib.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_mac.h | 23 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/p7_lib.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_crl.c | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_name.c | 6 |
7 files changed, 38 insertions, 10 deletions
diff --git a/src/lib/libcrypto/asn1/Makefile.ssl b/src/lib/libcrypto/asn1/Makefile.ssl index b8059ddffe..dace5be2bc 100644 --- a/src/lib/libcrypto/asn1/Makefile.ssl +++ b/src/lib/libcrypto/asn1/Makefile.ssl | |||
@@ -75,7 +75,8 @@ all: lib | |||
75 | 75 | ||
76 | lib: $(LIBOBJ) | 76 | lib: $(LIBOBJ) |
77 | $(AR) $(LIB) $(LIBOBJ) | 77 | $(AR) $(LIB) $(LIBOBJ) |
78 | $(RANLIB) $(LIB) | 78 | @echo You may get an error following this line. Please ignore. |
79 | - $(RANLIB) $(LIB) | ||
79 | @touch lib | 80 | @touch lib |
80 | 81 | ||
81 | files: | 82 | files: |
diff --git a/src/lib/libcrypto/asn1/a_strnid.c b/src/lib/libcrypto/asn1/a_strnid.c index 6b10cff994..732e68fe46 100644 --- a/src/lib/libcrypto/asn1/a_strnid.c +++ b/src/lib/libcrypto/asn1/a_strnid.c | |||
@@ -133,7 +133,7 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in, | |||
133 | if(tbl) { | 133 | if(tbl) { |
134 | mask = tbl->mask; | 134 | mask = tbl->mask; |
135 | if(!(tbl->flags & STABLE_NO_MASK)) mask &= global_mask; | 135 | if(!(tbl->flags & STABLE_NO_MASK)) mask &= global_mask; |
136 | ret = ASN1_mbstring_ncopy(out, in, inlen, inform, tbl->mask, | 136 | ret = ASN1_mbstring_ncopy(out, in, inlen, inform, mask, |
137 | tbl->minsize, tbl->maxsize); | 137 | tbl->minsize, tbl->maxsize); |
138 | } else ret = ASN1_mbstring_copy(out, in, inlen, inform, DIRSTRING_TYPE & global_mask); | 138 | } else ret = ASN1_mbstring_copy(out, in, inlen, inform, DIRSTRING_TYPE & global_mask); |
139 | if(ret <= 0) return NULL; | 139 | if(ret <= 0) return NULL; |
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c index 77447a5240..a8b651e54e 100644 --- a/src/lib/libcrypto/asn1/asn1_lib.c +++ b/src/lib/libcrypto/asn1/asn1_lib.c | |||
@@ -301,7 +301,7 @@ int asn1_GetSequence(ASN1_CTX *c, long *length) | |||
301 | return(0); | 301 | return(0); |
302 | } | 302 | } |
303 | if (c->inf == (1|V_ASN1_CONSTRUCTED)) | 303 | if (c->inf == (1|V_ASN1_CONSTRUCTED)) |
304 | c->slen= *length+ *(c->pp)-c->p; | 304 | c->slen= *length; |
305 | c->eos=0; | 305 | c->eos=0; |
306 | return(1); | 306 | return(1); |
307 | } | 307 | } |
diff --git a/src/lib/libcrypto/asn1/asn1_mac.h b/src/lib/libcrypto/asn1/asn1_mac.h index 4512ba6cc6..af0e664b2d 100644 --- a/src/lib/libcrypto/asn1/asn1_mac.h +++ b/src/lib/libcrypto/asn1/asn1_mac.h | |||
@@ -196,6 +196,9 @@ err:\ | |||
196 | if ((a != NULL) && (sk_##type##_num(a) != 0)) \ | 196 | if ((a != NULL) && (sk_##type##_num(a) != 0)) \ |
197 | M_ASN1_I2D_put_SEQUENCE_type(type,a,f); | 197 | M_ASN1_I2D_put_SEQUENCE_type(type,a,f); |
198 | 198 | ||
199 | #define M_ASN1_I2D_put_SEQUENCE_opt_ex_type(type,a,f) \ | ||
200 | if (a) M_ASN1_I2D_put_SEQUENCE_type(type,a,f); | ||
201 | |||
199 | #define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ | 202 | #define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \ |
200 | if ((c.slen != 0) && \ | 203 | if ((c.slen != 0) && \ |
201 | (M_ASN1_next == \ | 204 | (M_ASN1_next == \ |
@@ -389,6 +392,9 @@ err:\ | |||
389 | if ((a != NULL) && (sk_##type##_num(a) != 0)) \ | 392 | if ((a != NULL) && (sk_##type##_num(a) != 0)) \ |
390 | M_ASN1_I2D_len_SEQUENCE_type(type,a,f); | 393 | M_ASN1_I2D_len_SEQUENCE_type(type,a,f); |
391 | 394 | ||
395 | #define M_ASN1_I2D_len_SEQUENCE_opt_ex_type(type,a,f) \ | ||
396 | if (a) M_ASN1_I2D_len_SEQUENCE_type(type,a,f); | ||
397 | |||
392 | #define M_ASN1_I2D_len_IMP_SET(a,f,x) \ | 398 | #define M_ASN1_I2D_len_IMP_SET(a,f,x) \ |
393 | ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); | 399 | ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET); |
394 | 400 | ||
@@ -452,6 +458,15 @@ err:\ | |||
452 | ret+=ASN1_object_size(1,v,mtag); \ | 458 | ret+=ASN1_object_size(1,v,mtag); \ |
453 | } | 459 | } |
454 | 460 | ||
461 | #define M_ASN1_I2D_len_EXP_SEQUENCE_opt_ex_type(type,a,f,mtag,tag,v) \ | ||
462 | if (a)\ | ||
463 | { \ | ||
464 | v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \ | ||
465 | V_ASN1_UNIVERSAL, \ | ||
466 | IS_SEQUENCE); \ | ||
467 | ret+=ASN1_object_size(1,v,mtag); \ | ||
468 | } | ||
469 | |||
455 | /* Put Macros */ | 470 | /* Put Macros */ |
456 | #define M_ASN1_I2D_put(a,f) f(a,&p) | 471 | #define M_ASN1_I2D_put(a,f) f(a,&p) |
457 | 472 | ||
@@ -536,6 +551,14 @@ err:\ | |||
536 | IS_SEQUENCE); \ | 551 | IS_SEQUENCE); \ |
537 | } | 552 | } |
538 | 553 | ||
554 | #define M_ASN1_I2D_put_EXP_SEQUENCE_opt_ex_type(type,a,f,mtag,tag,v) \ | ||
555 | if (a) \ | ||
556 | { \ | ||
557 | ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \ | ||
558 | i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \ | ||
559 | IS_SEQUENCE); \ | ||
560 | } | ||
561 | |||
539 | #define M_ASN1_I2D_seq_total() \ | 562 | #define M_ASN1_I2D_seq_total() \ |
540 | r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ | 563 | r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \ |
541 | if (pp == NULL) return(r); \ | 564 | if (pp == NULL) return(r); \ |
diff --git a/src/lib/libcrypto/asn1/p7_lib.c b/src/lib/libcrypto/asn1/p7_lib.c index b1196ef581..8a340b0119 100644 --- a/src/lib/libcrypto/asn1/p7_lib.c +++ b/src/lib/libcrypto/asn1/p7_lib.c | |||
@@ -307,12 +307,14 @@ PKCS7 *d2i_PKCS7(PKCS7 **a, unsigned char **pp, long length) | |||
307 | } | 307 | } |
308 | if (Tinf == (1|V_ASN1_CONSTRUCTED)) | 308 | if (Tinf == (1|V_ASN1_CONSTRUCTED)) |
309 | { | 309 | { |
310 | c.q=c.p; | ||
310 | if (!ASN1_check_infinite_end(&c.p,c.slen)) | 311 | if (!ASN1_check_infinite_end(&c.p,c.slen)) |
311 | { | 312 | { |
312 | c.error=ERR_R_MISSING_ASN1_EOS; | 313 | c.error=ERR_R_MISSING_ASN1_EOS; |
313 | c.line=__LINE__; | 314 | c.line=__LINE__; |
314 | goto err; | 315 | goto err; |
315 | } | 316 | } |
317 | c.slen-=(c.p-c.q); | ||
316 | } | 318 | } |
317 | } | 319 | } |
318 | else | 320 | else |
diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index 1f302d0e01..51518cdf35 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
@@ -71,14 +71,14 @@ int i2d_X509_REVOKED(X509_REVOKED *a, unsigned char **pp) | |||
71 | 71 | ||
72 | M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER); | 72 | M_ASN1_I2D_len(a->serialNumber,i2d_ASN1_INTEGER); |
73 | M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_TIME); | 73 | M_ASN1_I2D_len(a->revocationDate,i2d_ASN1_TIME); |
74 | M_ASN1_I2D_len_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, | 74 | M_ASN1_I2D_len_SEQUENCE_opt_ex_type(X509_EXTENSION,a->extensions, |
75 | i2d_X509_EXTENSION); | 75 | i2d_X509_EXTENSION); |
76 | 76 | ||
77 | M_ASN1_I2D_seq_total(); | 77 | M_ASN1_I2D_seq_total(); |
78 | 78 | ||
79 | M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER); | 79 | M_ASN1_I2D_put(a->serialNumber,i2d_ASN1_INTEGER); |
80 | M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_TIME); | 80 | M_ASN1_I2D_put(a->revocationDate,i2d_ASN1_TIME); |
81 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, | 81 | M_ASN1_I2D_put_SEQUENCE_opt_ex_type(X509_EXTENSION,a->extensions, |
82 | i2d_X509_EXTENSION); | 82 | i2d_X509_EXTENSION); |
83 | 83 | ||
84 | M_ASN1_I2D_finish(); | 84 | M_ASN1_I2D_finish(); |
@@ -121,7 +121,7 @@ int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp) | |||
121 | { M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_TIME); } | 121 | { M_ASN1_I2D_len(a->nextUpdate,i2d_ASN1_TIME); } |
122 | M_ASN1_I2D_len_SEQUENCE_opt_type(X509_REVOKED,a->revoked, | 122 | M_ASN1_I2D_len_SEQUENCE_opt_type(X509_REVOKED,a->revoked, |
123 | i2d_X509_REVOKED); | 123 | i2d_X509_REVOKED); |
124 | M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, | 124 | M_ASN1_I2D_len_EXP_SEQUENCE_opt_ex_type(X509_EXTENSION,a->extensions, |
125 | i2d_X509_EXTENSION,0, | 125 | i2d_X509_EXTENSION,0, |
126 | V_ASN1_SEQUENCE,v1); | 126 | V_ASN1_SEQUENCE,v1); |
127 | 127 | ||
@@ -138,7 +138,7 @@ int i2d_X509_CRL_INFO(X509_CRL_INFO *a, unsigned char **pp) | |||
138 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_TIME); } | 138 | { M_ASN1_I2D_put(a->nextUpdate,i2d_ASN1_TIME); } |
139 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked, | 139 | M_ASN1_I2D_put_SEQUENCE_opt_type(X509_REVOKED,a->revoked, |
140 | i2d_X509_REVOKED); | 140 | i2d_X509_REVOKED); |
141 | M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(X509_EXTENSION,a->extensions, | 141 | M_ASN1_I2D_put_EXP_SEQUENCE_opt_ex_type(X509_EXTENSION,a->extensions, |
142 | i2d_X509_EXTENSION,0, | 142 | i2d_X509_EXTENSION,0, |
143 | V_ASN1_SEQUENCE,v1); | 143 | V_ASN1_SEQUENCE,v1); |
144 | 144 | ||
@@ -260,7 +260,7 @@ X509_CRL_INFO *X509_CRL_INFO_new(void) | |||
260 | M_ASN1_New(ret->lastUpdate,M_ASN1_UTCTIME_new); | 260 | M_ASN1_New(ret->lastUpdate,M_ASN1_UTCTIME_new); |
261 | ret->nextUpdate=NULL; | 261 | ret->nextUpdate=NULL; |
262 | M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null); | 262 | M_ASN1_New(ret->revoked,sk_X509_REVOKED_new_null); |
263 | M_ASN1_New(ret->extensions,sk_X509_EXTENSION_new_null); | 263 | ret->extensions = NULL; |
264 | sk_X509_REVOKED_set_cmp_func(ret->revoked,X509_REVOKED_cmp); | 264 | sk_X509_REVOKED_set_cmp_func(ret->revoked,X509_REVOKED_cmp); |
265 | return(ret); | 265 | return(ret); |
266 | M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW); | 266 | M_ASN1_New_Error(ASN1_F_X509_CRL_INFO_NEW); |
diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index b832deb928..1885d699ef 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
@@ -141,10 +141,12 @@ static int i2d_X509_NAME_entries(X509_NAME *a) | |||
141 | } | 141 | } |
142 | size+=i2d_X509_NAME_ENTRY(ne,NULL); | 142 | size+=i2d_X509_NAME_ENTRY(ne,NULL); |
143 | } | 143 | } |
144 | |||
145 | ret+=ASN1_object_size(1,size,V_ASN1_SET); | ||
146 | if (fe != NULL) | 144 | if (fe != NULL) |
145 | { | ||
146 | /* SET OF needed only if entries is non empty */ | ||
147 | ret+=ASN1_object_size(1,size,V_ASN1_SET); | ||
147 | fe->size=size; | 148 | fe->size=size; |
149 | } | ||
148 | 150 | ||
149 | r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); | 151 | r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); |
150 | 152 | ||