diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/asn1/t_req.c | 21 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_attrib.c | 60 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs12/p12_attr.c | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/pkcs7/pk7_doit.c | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/x509/x509_att.c | 27 | ||||
-rw-r--r-- | src/lib/libcrypto/x509/x509_lcl.h | 7 |
6 files changed, 34 insertions, 101 deletions
diff --git a/src/lib/libcrypto/asn1/t_req.c b/src/lib/libcrypto/asn1/t_req.c index cc9da46439..4b27a4ddbe 100644 --- a/src/lib/libcrypto/asn1/t_req.c +++ b/src/lib/libcrypto/asn1/t_req.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t_req.c,v 1.21 2021/12/25 13:17:48 jsing Exp $ */ | 1 | /* $OpenBSD: t_req.c,v 1.22 2022/05/09 19:19:33 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -176,7 +176,6 @@ X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, | |||
176 | ASN1_TYPE *at; | 176 | ASN1_TYPE *at; |
177 | X509_ATTRIBUTE *a; | 177 | X509_ATTRIBUTE *a; |
178 | ASN1_BIT_STRING *bs = NULL; | 178 | ASN1_BIT_STRING *bs = NULL; |
179 | ASN1_TYPE *t; | ||
180 | int j, type = 0, count = 1, ii = 0; | 179 | int j, type = 0, count = 1, ii = 0; |
181 | 180 | ||
182 | a = sk_X509_ATTRIBUTE_value(sk, i); | 181 | a = sk_X509_ATTRIBUTE_value(sk, i); |
@@ -186,20 +185,12 @@ X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, | |||
186 | if (BIO_printf(bp, "%12s", "") <= 0) | 185 | if (BIO_printf(bp, "%12s", "") <= 0) |
187 | goto err; | 186 | goto err; |
188 | if ((j = i2a_ASN1_OBJECT(bp, a->object)) > 0) { | 187 | if ((j = i2a_ASN1_OBJECT(bp, a->object)) > 0) { |
189 | if (a->single) { | 188 | ii = 0; |
190 | t = a->value.single; | 189 | count = sk_ASN1_TYPE_num(a->set); |
191 | type = t->type; | ||
192 | bs = t->value.bit_string; | ||
193 | } else { | ||
194 | ii = 0; | ||
195 | count = sk_ASN1_TYPE_num( | ||
196 | a->value.set); | ||
197 | get_next: | 190 | get_next: |
198 | at = sk_ASN1_TYPE_value( | 191 | at = sk_ASN1_TYPE_value(a->set, ii); |
199 | a->value.set, ii); | 192 | type = at->type; |
200 | type = at->type; | 193 | bs = at->value.asn1_string; |
201 | bs = at->value.asn1_string; | ||
202 | } | ||
203 | } | 194 | } |
204 | for (j = 25 - j; j > 0; j--) | 195 | for (j = 25 - j; j > 0; j--) |
205 | if (BIO_write(bp, " ", 1) != 1) | 196 | if (BIO_write(bp, " ", 1) != 1) |
diff --git a/src/lib/libcrypto/asn1/x_attrib.c b/src/lib/libcrypto/asn1/x_attrib.c index 47b5afd95d..e8822a33a5 100644 --- a/src/lib/libcrypto/asn1/x_attrib.c +++ b/src/lib/libcrypto/asn1/x_attrib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x_attrib.c,v 1.16 2021/12/25 13:17:48 jsing Exp $ */ | 1 | /* $OpenBSD: x_attrib.c,v 1.17 2022/05/09 19:19:33 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -64,48 +64,14 @@ | |||
64 | 64 | ||
65 | #include "x509_lcl.h" | 65 | #include "x509_lcl.h" |
66 | 66 | ||
67 | /* X509_ATTRIBUTE: this has the following form: | 67 | /* |
68 | * | 68 | * XXX - remove X509_ATTRIBUTE_SET_it with next major bump. |
69 | * typedef struct x509_attributes_st | ||
70 | * { | ||
71 | * ASN1_OBJECT *object; | ||
72 | * int single; | ||
73 | * union { | ||
74 | * char *ptr; | ||
75 | * STACK_OF(ASN1_TYPE) *set; | ||
76 | * ASN1_TYPE *single; | ||
77 | * } value; | ||
78 | * } X509_ATTRIBUTE; | ||
79 | * | ||
80 | * this needs some extra thought because the CHOICE type is | ||
81 | * merged with the main structure and because the value can | ||
82 | * be anything at all we *must* try the SET OF first because | ||
83 | * the ASN1_ANY type will swallow anything including the whole | ||
84 | * SET OF structure. | ||
85 | */ | 69 | */ |
86 | |||
87 | static const ASN1_TEMPLATE X509_ATTRIBUTE_SET_ch_tt[] = { | ||
88 | { | ||
89 | .flags = ASN1_TFLG_SET_OF, | ||
90 | .tag = 0, | ||
91 | .offset = offsetof(X509_ATTRIBUTE, value.set), | ||
92 | .field_name = "value.set", | ||
93 | .item = &ASN1_ANY_it, | ||
94 | }, | ||
95 | { | ||
96 | .flags = 0, | ||
97 | .tag = 0, | ||
98 | .offset = offsetof(X509_ATTRIBUTE, value.single), | ||
99 | .field_name = "value.single", | ||
100 | .item = &ASN1_ANY_it, | ||
101 | }, | ||
102 | }; | ||
103 | |||
104 | const ASN1_ITEM X509_ATTRIBUTE_SET_it = { | 70 | const ASN1_ITEM X509_ATTRIBUTE_SET_it = { |
105 | .itype = ASN1_ITYPE_CHOICE, | 71 | .itype = ASN1_ITYPE_CHOICE, |
106 | .utype = offsetof(X509_ATTRIBUTE, single), | 72 | .utype = 0, |
107 | .templates = X509_ATTRIBUTE_SET_ch_tt, | 73 | .templates = NULL, |
108 | .tcount = sizeof(X509_ATTRIBUTE_SET_ch_tt) / sizeof(ASN1_TEMPLATE), | 74 | .tcount = 0, |
109 | .funcs = NULL, | 75 | .funcs = NULL, |
110 | .size = sizeof(X509_ATTRIBUTE), | 76 | .size = sizeof(X509_ATTRIBUTE), |
111 | .sname = "X509_ATTRIBUTE", | 77 | .sname = "X509_ATTRIBUTE", |
@@ -119,13 +85,12 @@ static const ASN1_TEMPLATE X509_ATTRIBUTE_seq_tt[] = { | |||
119 | .field_name = "object", | 85 | .field_name = "object", |
120 | .item = &ASN1_OBJECT_it, | 86 | .item = &ASN1_OBJECT_it, |
121 | }, | 87 | }, |
122 | /* CHOICE type merged with parent */ | ||
123 | { | 88 | { |
124 | .flags = 0 | ASN1_TFLG_COMBINE, | 89 | .flags = ASN1_TFLG_SET_OF, |
125 | .tag = 0, | 90 | .tag = 0, |
126 | .offset = 0, | 91 | .offset = offsetof(X509_ATTRIBUTE, set), |
127 | .field_name = NULL, | 92 | .field_name = "set", |
128 | .item = &X509_ATTRIBUTE_SET_it, | 93 | .item = &ASN1_ANY_it, |
129 | }, | 94 | }, |
130 | }; | 95 | }; |
131 | 96 | ||
@@ -183,12 +148,9 @@ X509_ATTRIBUTE_create(int nid, int atrtype, void *value) | |||
183 | if ((ret = X509_ATTRIBUTE_new()) == NULL) | 148 | if ((ret = X509_ATTRIBUTE_new()) == NULL) |
184 | return (NULL); | 149 | return (NULL); |
185 | ret->object = oid; | 150 | ret->object = oid; |
186 | ret->single = 0; | ||
187 | if ((ret->value.set = sk_ASN1_TYPE_new_null()) == NULL) | ||
188 | goto err; | ||
189 | if ((val = ASN1_TYPE_new()) == NULL) | 151 | if ((val = ASN1_TYPE_new()) == NULL) |
190 | goto err; | 152 | goto err; |
191 | if (!sk_ASN1_TYPE_push(ret->value.set, val)) | 153 | if (!sk_ASN1_TYPE_push(ret->set, val)) |
192 | goto err; | 154 | goto err; |
193 | 155 | ||
194 | ASN1_TYPE_set(val, atrtype, value); | 156 | ASN1_TYPE_set(val, atrtype, value); |
diff --git a/src/lib/libcrypto/pkcs12/p12_attr.c b/src/lib/libcrypto/pkcs12/p12_attr.c index dc38b7c897..a35a148b11 100644 --- a/src/lib/libcrypto/pkcs12/p12_attr.c +++ b/src/lib/libcrypto/pkcs12/p12_attr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: p12_attr.c,v 1.14 2021/11/01 20:53:08 tb Exp $ */ | 1 | /* $OpenBSD: p12_attr.c,v 1.15 2022/05/09 19:19:33 jsing Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 1999. | 3 | * project 1999. |
4 | */ | 4 | */ |
@@ -129,12 +129,8 @@ PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid) | |||
129 | return NULL; | 129 | return NULL; |
130 | for (i = 0; i < sk_X509_ATTRIBUTE_num(attrs); i++) { | 130 | for (i = 0; i < sk_X509_ATTRIBUTE_num(attrs); i++) { |
131 | attrib = sk_X509_ATTRIBUTE_value(attrs, i); | 131 | attrib = sk_X509_ATTRIBUTE_value(attrs, i); |
132 | if (OBJ_obj2nid(attrib->object) == attr_nid) { | 132 | if (OBJ_obj2nid(attrib->object) == attr_nid) |
133 | if (sk_ASN1_TYPE_num(attrib->value.set)) | 133 | return sk_ASN1_TYPE_value(attrib->set, 0); |
134 | return sk_ASN1_TYPE_value(attrib->value.set, 0); | ||
135 | else | ||
136 | return NULL; | ||
137 | } | ||
138 | } | 134 | } |
139 | return NULL; | 135 | return NULL; |
140 | } | 136 | } |
diff --git a/src/lib/libcrypto/pkcs7/pk7_doit.c b/src/lib/libcrypto/pkcs7/pk7_doit.c index c9d64bcf34..b314069610 100644 --- a/src/lib/libcrypto/pkcs7/pk7_doit.c +++ b/src/lib/libcrypto/pkcs7/pk7_doit.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pk7_doit.c,v 1.46 2021/12/12 21:30:14 tb Exp $ */ | 1 | /* $OpenBSD: pk7_doit.c,v 1.47 2022/05/09 19:19:33 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1129,12 +1129,8 @@ get_attribute(STACK_OF(X509_ATTRIBUTE) *sk, int nid) | |||
1129 | return (NULL); | 1129 | return (NULL); |
1130 | for (i = 0; i < sk_X509_ATTRIBUTE_num(sk); i++) { | 1130 | for (i = 0; i < sk_X509_ATTRIBUTE_num(sk); i++) { |
1131 | xa = sk_X509_ATTRIBUTE_value(sk, i); | 1131 | xa = sk_X509_ATTRIBUTE_value(sk, i); |
1132 | if (OBJ_cmp(xa->object, o) == 0) { | 1132 | if (OBJ_cmp(xa->object, o) == 0) |
1133 | if (!xa->single && sk_ASN1_TYPE_num(xa->value.set)) | 1133 | return (sk_ASN1_TYPE_value(xa->set, 0)); |
1134 | return (sk_ASN1_TYPE_value(xa->value.set, 0)); | ||
1135 | else | ||
1136 | return (NULL); | ||
1137 | } | ||
1138 | } | 1134 | } |
1139 | return (NULL); | 1135 | return (NULL); |
1140 | } | 1136 | } |
diff --git a/src/lib/libcrypto/x509/x509_att.c b/src/lib/libcrypto/x509/x509_att.c index 38aa063143..8d369df900 100644 --- a/src/lib/libcrypto/x509/x509_att.c +++ b/src/lib/libcrypto/x509/x509_att.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: x509_att.c,v 1.18 2021/11/01 20:53:08 tb Exp $ */ | 1 | /* $OpenBSD: x509_att.c,v 1.19 2022/05/09 19:19:33 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -324,10 +324,8 @@ X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, | |||
324 | goto err; | 324 | goto err; |
325 | atype = attrtype; | 325 | atype = attrtype; |
326 | } | 326 | } |
327 | if (!(attr->value.set = sk_ASN1_TYPE_new_null())) | 327 | /* |
328 | goto err; | 328 | * This is a bit naughty because the attribute should really have |
329 | attr->single = 0; | ||
330 | /* This is a bit naughty because the attribute should really have | ||
331 | * at least one value but some types use and zero length SET and | 329 | * at least one value but some types use and zero length SET and |
332 | * require this. | 330 | * require this. |
333 | */ | 331 | */ |
@@ -343,7 +341,7 @@ X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, const void *data, | |||
343 | goto err; | 341 | goto err; |
344 | } else | 342 | } else |
345 | ASN1_TYPE_set(ttmp, atype, stmp); | 343 | ASN1_TYPE_set(ttmp, atype, stmp); |
346 | if (!sk_ASN1_TYPE_push(attr->value.set, ttmp)) | 344 | if (!sk_ASN1_TYPE_push(attr->set, ttmp)) |
347 | goto err; | 345 | goto err; |
348 | return 1; | 346 | return 1; |
349 | 347 | ||
@@ -357,11 +355,10 @@ err: | |||
357 | int | 355 | int |
358 | X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr) | 356 | X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr) |
359 | { | 357 | { |
360 | if (!attr->single) | 358 | if (attr == NULL) |
361 | return sk_ASN1_TYPE_num(attr->value.set); | 359 | return 0; |
362 | if (attr->value.single) | 360 | |
363 | return 1; | 361 | return sk_ASN1_TYPE_num(attr->set); |
364 | return 0; | ||
365 | } | 362 | } |
366 | 363 | ||
367 | ASN1_OBJECT * | 364 | ASN1_OBJECT * |
@@ -392,10 +389,6 @@ X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx) | |||
392 | { | 389 | { |
393 | if (attr == NULL) | 390 | if (attr == NULL) |
394 | return (NULL); | 391 | return (NULL); |
395 | if (idx >= X509_ATTRIBUTE_count(attr)) | 392 | |
396 | return NULL; | 393 | return sk_ASN1_TYPE_value(attr->set, idx); |
397 | if (!attr->single) | ||
398 | return sk_ASN1_TYPE_value(attr->value.set, idx); | ||
399 | else | ||
400 | return attr->value.single; | ||
401 | } | 394 | } |
diff --git a/src/lib/libcrypto/x509/x509_lcl.h b/src/lib/libcrypto/x509/x509_lcl.h index e7eb733f7d..5beef8a94d 100644 --- a/src/lib/libcrypto/x509/x509_lcl.h +++ b/src/lib/libcrypto/x509/x509_lcl.h | |||
@@ -109,12 +109,7 @@ struct X509_extension_st { | |||
109 | 109 | ||
110 | struct x509_attributes_st { | 110 | struct x509_attributes_st { |
111 | ASN1_OBJECT *object; | 111 | ASN1_OBJECT *object; |
112 | int single; /* 0 for a set, 1 for a single item (which is wrong) */ | 112 | STACK_OF(ASN1_TYPE) *set; |
113 | union { | ||
114 | char *ptr; | ||
115 | /* 0 */ STACK_OF(ASN1_TYPE) *set; | ||
116 | /* 1 */ ASN1_TYPE *single; | ||
117 | } value; | ||
118 | } /* X509_ATTRIBUTE */; | 113 | } /* X509_ATTRIBUTE */; |
119 | 114 | ||
120 | struct X509_req_info_st { | 115 | struct X509_req_info_st { |