summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/tasn_dec.c
diff options
context:
space:
mode:
authormiod <>2015-02-14 15:23:57 +0000
committermiod <>2015-02-14 15:23:57 +0000
commit50dcf723158de492f1440c6a34fdf06bdc1f16fe (patch)
tree094ce60cf2e7b1b8f53728f3c1052390bfef6120 /src/lib/libcrypto/asn1/tasn_dec.c
parent3831ec92614f93b5873fbec25f33aba2e8b7c2b5 (diff)
downloadopenbsd-50dcf723158de492f1440c6a34fdf06bdc1f16fe.tar.gz
openbsd-50dcf723158de492f1440c6a34fdf06bdc1f16fe.tar.bz2
openbsd-50dcf723158de492f1440c6a34fdf06bdc1f16fe.zip
Remove IMPLEMENT_COMPAT_ASN1() and related support code. Nothing uses it in
libcrypto/libssl, and nothing seems to use it in the wild, apart from embedded copies of OpenSSL. ok jsing@
Diffstat (limited to 'src/lib/libcrypto/asn1/tasn_dec.c')
-rw-r--r--src/lib/libcrypto/asn1/tasn_dec.c72
1 files changed, 3 insertions, 69 deletions
diff --git a/src/lib/libcrypto/asn1/tasn_dec.c b/src/lib/libcrypto/asn1/tasn_dec.c
index f633d03e9c..791a10a9c0 100644
--- a/src/lib/libcrypto/asn1/tasn_dec.c
+++ b/src/lib/libcrypto/asn1/tasn_dec.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tasn_dec.c,v 1.24 2014/06/12 15:49:27 deraadt Exp $ */ 1/* $OpenBSD: tasn_dec.c,v 1.25 2015/02/14 15:23:57 miod 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 2000. 3 * project 2000.
4 */ 4 */
@@ -155,19 +155,17 @@ ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
155 const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx) 155 const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx)
156{ 156{
157 const ASN1_TEMPLATE *tt, *errtt = NULL; 157 const ASN1_TEMPLATE *tt, *errtt = NULL;
158 const ASN1_COMPAT_FUNCS *cf;
159 const ASN1_EXTERN_FUNCS *ef; 158 const ASN1_EXTERN_FUNCS *ef;
160 const ASN1_AUX *aux = it->funcs; 159 const ASN1_AUX *aux = it->funcs;
161 ASN1_aux_cb *asn1_cb; 160 ASN1_aux_cb *asn1_cb;
162 const unsigned char *p = NULL, *q; 161 const unsigned char *p = NULL, *q;
163 unsigned char *wp = NULL; /* BIG FAT WARNING! BREAKS CONST WHERE USED */ 162 unsigned char oclass;
164 unsigned char imphack = 0, oclass;
165 char seq_eoc, seq_nolen, cst, isopt; 163 char seq_eoc, seq_nolen, cst, isopt;
166 long tmplen; 164 long tmplen;
167 int i; 165 int i;
168 int otag; 166 int otag;
169 int ret = 0; 167 int ret = 0;
170 ASN1_VALUE **pchptr, *ptmpval; 168 ASN1_VALUE **pchptr;
171 169
172 if (!pval) 170 if (!pval)
173 return 0; 171 return 0;
@@ -236,70 +234,6 @@ ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
236 return ef->asn1_ex_d2i(pval, in, len, 234 return ef->asn1_ex_d2i(pval, in, len,
237 it, tag, aclass, opt, ctx); 235 it, tag, aclass, opt, ctx);
238 236
239 case ASN1_ITYPE_COMPAT:
240 /* we must resort to old style evil hackery */
241 cf = it->funcs;
242
243 /* If OPTIONAL see if it is there */
244 if (opt) {
245 int exptag;
246 p = *in;
247 if (tag == -1)
248 exptag = it->utype;
249 else
250 exptag = tag;
251 /* Don't care about anything other than presence
252 * of expected tag */
253
254 ret = asn1_check_tlen(NULL, NULL, NULL, NULL, NULL,
255 &p, len, exptag, aclass, 1, ctx);
256 if (!ret) {
257 ASN1err(ASN1_F_ASN1_ITEM_EX_D2I,
258 ERR_R_NESTED_ASN1_ERROR);
259 goto err;
260 }
261 if (ret == -1)
262 return -1;
263 }
264
265 /* This is the old style evil hack IMPLICIT handling:
266 * since the underlying code is expecting a tag and
267 * class other than the one present we change the
268 * buffer temporarily then change it back afterwards.
269 * This doesn't and never did work for tags > 30.
270 *
271 * Yes this is *horrible* but it is only needed for
272 * old style d2i which will hopefully not be around
273 * for much longer.
274 * FIXME: should copy the buffer then modify it so
275 * the input buffer can be const: we should *always*
276 * copy because the old style d2i might modify the
277 * buffer.
278 */
279
280 if (tag != -1) {
281 wp = *(unsigned char **)in;
282 imphack = *wp;
283 if (p == NULL) {
284 ASN1err(ASN1_F_ASN1_ITEM_EX_D2I,
285 ERR_R_NESTED_ASN1_ERROR);
286 goto err;
287 }
288 *wp = (unsigned char)((*p & V_ASN1_CONSTRUCTED) |
289 it->utype);
290 }
291
292 ptmpval = cf->asn1_d2i(pval, in, len);
293
294 if (tag != -1)
295 *wp = imphack;
296
297 if (ptmpval)
298 return 1;
299
300 ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
301 goto err;
302
303 case ASN1_ITYPE_CHOICE: 237 case ASN1_ITYPE_CHOICE:
304 if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) 238 if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
305 goto auxerr; 239 goto auxerr;