summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/tasn_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/tasn_enc.c')
-rw-r--r--src/lib/libcrypto/asn1/tasn_enc.c168
1 files changed, 65 insertions, 103 deletions
diff --git a/src/lib/libcrypto/asn1/tasn_enc.c b/src/lib/libcrypto/asn1/tasn_enc.c
index 230164107d..f7bdd11edf 100644
--- a/src/lib/libcrypto/asn1/tasn_enc.c
+++ b/src/lib/libcrypto/asn1/tasn_enc.c
@@ -103,8 +103,7 @@ int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it)
103static int asn1_item_flags_i2d(ASN1_VALUE *val, unsigned char **out, 103static int asn1_item_flags_i2d(ASN1_VALUE *val, unsigned char **out,
104 const ASN1_ITEM *it, int flags) 104 const ASN1_ITEM *it, int flags)
105{ 105{
106 if (out && !*out) 106 if (out && !*out) {
107 {
108 unsigned char *p, *buf; 107 unsigned char *p, *buf;
109 int len; 108 int len;
110 len = ASN1_item_ex_i2d(&val, NULL, it, -1, flags); 109 len = ASN1_item_ex_i2d(&val, NULL, it, -1, flags);
@@ -144,25 +143,23 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
144 if (aux && aux->asn1_cb) 143 if (aux && aux->asn1_cb)
145 asn1_cb = aux->asn1_cb; 144 asn1_cb = aux->asn1_cb;
146 145
147 switch(it->itype) 146 switch(it->itype) {
148 {
149 147
150 case ASN1_ITYPE_PRIMITIVE: 148 case ASN1_ITYPE_PRIMITIVE:
151 if (it->templates) 149 if (it->templates)
152 return asn1_template_ex_i2d(pval, out, it->templates, 150 return asn1_template_ex_i2d(pval, out, it->templates,
153 tag, aclass); 151 tag, aclass);
154 return asn1_i2d_ex_primitive(pval, out, it, tag, aclass); 152 return asn1_i2d_ex_primitive(pval, out, it, tag, aclass);
155 break; 153 break;
156 154
157 case ASN1_ITYPE_MSTRING: 155 case ASN1_ITYPE_MSTRING:
158 return asn1_i2d_ex_primitive(pval, out, it, -1, aclass); 156 return asn1_i2d_ex_primitive(pval, out, it, -1, aclass);
159 157
160 case ASN1_ITYPE_CHOICE: 158 case ASN1_ITYPE_CHOICE:
161 if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL)) 159 if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
162 return 0; 160 return 0;
163 i = asn1_get_choice_selector(pval, it); 161 i = asn1_get_choice_selector(pval, it);
164 if ((i >= 0) && (i < it->tcount)) 162 if ((i >= 0) && (i < it->tcount)) {
165 {
166 ASN1_VALUE **pchval; 163 ASN1_VALUE **pchval;
167 const ASN1_TEMPLATE *chtt; 164 const ASN1_TEMPLATE *chtt;
168 chtt = it->templates + i; 165 chtt = it->templates + i;
@@ -175,12 +172,12 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
175 return 0; 172 return 0;
176 break; 173 break;
177 174
178 case ASN1_ITYPE_EXTERN: 175 case ASN1_ITYPE_EXTERN:
179 /* If new style i2d it does all the work */ 176 /* If new style i2d it does all the work */
180 ef = it->funcs; 177 ef = it->funcs;
181 return ef->asn1_ex_i2d(pval, out, it, tag, aclass); 178 return ef->asn1_ex_i2d(pval, out, it, tag, aclass);
182 179
183 case ASN1_ITYPE_COMPAT: 180 case ASN1_ITYPE_COMPAT:
184 /* old style hackery... */ 181 /* old style hackery... */
185 cf = it->funcs; 182 cf = it->funcs;
186 if (out) 183 if (out)
@@ -193,12 +190,12 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
193 *p = aclass | tag | (*p & V_ASN1_CONSTRUCTED); 190 *p = aclass | tag | (*p & V_ASN1_CONSTRUCTED);
194 return i; 191 return i;
195 192
196 case ASN1_ITYPE_NDEF_SEQUENCE: 193 case ASN1_ITYPE_NDEF_SEQUENCE:
197 /* Use indefinite length constructed if requested */ 194 /* Use indefinite length constructed if requested */
198 if (aclass & ASN1_TFLG_NDEF) ndef = 2; 195 if (aclass & ASN1_TFLG_NDEF) ndef = 2;
199 /* fall through */ 196 /* fall through */
200 197
201 case ASN1_ITYPE_SEQUENCE: 198 case ASN1_ITYPE_SEQUENCE:
202 i = asn1_enc_restore(&seqcontlen, out, pval, it); 199 i = asn1_enc_restore(&seqcontlen, out, pval, it);
203 /* An error occurred */ 200 /* An error occurred */
204 if (i < 0) 201 if (i < 0)
@@ -209,8 +206,7 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
209 /* Otherwise carry on */ 206 /* Otherwise carry on */
210 seqcontlen = 0; 207 seqcontlen = 0;
211 /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */ 208 /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
212 if (tag == -1) 209 if (tag == -1) {
213 {
214 tag = V_ASN1_SEQUENCE; 210 tag = V_ASN1_SEQUENCE;
215 /* Retain any other flags in aclass */ 211 /* Retain any other flags in aclass */
216 aclass = (aclass & ~ASN1_TFLG_TAG_CLASS) 212 aclass = (aclass & ~ASN1_TFLG_TAG_CLASS)
@@ -219,8 +215,7 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
219 if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL)) 215 if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL))
220 return 0; 216 return 0;
221 /* First work out sequence content length */ 217 /* First work out sequence content length */
222 for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) 218 for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
223 {
224 const ASN1_TEMPLATE *seqtt; 219 const ASN1_TEMPLATE *seqtt;
225 ASN1_VALUE **pseqval; 220 ASN1_VALUE **pseqval;
226 seqtt = asn1_do_adb(pval, tt, 1); 221 seqtt = asn1_do_adb(pval, tt, 1);
@@ -237,8 +232,7 @@ int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
237 return seqlen; 232 return seqlen;
238 /* Output SEQUENCE header */ 233 /* Output SEQUENCE header */
239 ASN1_put_object(out, ndef, seqcontlen, tag, aclass); 234 ASN1_put_object(out, ndef, seqcontlen, tag, aclass);
240 for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) 235 for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) {
241 {
242 const ASN1_TEMPLATE *seqtt; 236 const ASN1_TEMPLATE *seqtt;
243 ASN1_VALUE **pseqval; 237 ASN1_VALUE **pseqval;
244 seqtt = asn1_do_adb(pval, tt, 1); 238 seqtt = asn1_do_adb(pval, tt, 1);
@@ -278,8 +272,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
278 * the iclass argument may contain some additional flags 272 * the iclass argument may contain some additional flags
279 * which should be noted and passed down to other levels. 273 * which should be noted and passed down to other levels.
280 */ 274 */
281 if (flags & ASN1_TFLG_TAG_MASK) 275 if (flags & ASN1_TFLG_TAG_MASK) {
282 {
283 /* Error if argument and template tagging */ 276 /* Error if argument and template tagging */
284 if (tag != -1) 277 if (tag != -1)
285 /* FIXME: error code here */ 278 /* FIXME: error code here */
@@ -287,15 +280,11 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
287 /* Get tagging from template */ 280 /* Get tagging from template */
288 ttag = tt->tag; 281 ttag = tt->tag;
289 tclass = flags & ASN1_TFLG_TAG_CLASS; 282 tclass = flags & ASN1_TFLG_TAG_CLASS;
290 } 283 } else if (tag != -1) {
291 else if (tag != -1)
292 {
293 /* No template tagging, get from arguments */ 284 /* No template tagging, get from arguments */
294 ttag = tag; 285 ttag = tag;
295 tclass = iclass & ASN1_TFLG_TAG_CLASS; 286 tclass = iclass & ASN1_TFLG_TAG_CLASS;
296 } 287 } else {
297 else
298 {
299 ttag = -1; 288 ttag = -1;
300 tclass = 0; 289 tclass = 0;
301 } 290 }
@@ -314,8 +303,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
314 ndef = 2; 303 ndef = 2;
315 else ndef = 1; 304 else ndef = 1;
316 305
317 if (flags & ASN1_TFLG_SK_MASK) 306 if (flags & ASN1_TFLG_SK_MASK) {
318 {
319 /* SET OF, SEQUENCE OF */ 307 /* SET OF, SEQUENCE OF */
320 STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval; 308 STACK_OF(ASN1_VALUE) *sk = (STACK_OF(ASN1_VALUE) *)*pval;
321 int isset, sktag, skaclass; 309 int isset, sktag, skaclass;
@@ -325,8 +313,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
325 if (!*pval) 313 if (!*pval)
326 return 0; 314 return 0;
327 315
328 if (flags & ASN1_TFLG_SET_OF) 316 if (flags & ASN1_TFLG_SET_OF) {
329 {
330 isset = 1; 317 isset = 1;
331 /* 2 means we reorder */ 318 /* 2 means we reorder */
332 if (flags & ASN1_TFLG_SEQUENCE_OF) 319 if (flags & ASN1_TFLG_SEQUENCE_OF)
@@ -337,13 +324,10 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
337 /* Work out inner tag value: if EXPLICIT 324 /* Work out inner tag value: if EXPLICIT
338 * or no tagging use underlying type. 325 * or no tagging use underlying type.
339 */ 326 */
340 if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) 327 if ((ttag != -1) && !(flags & ASN1_TFLG_EXPTAG)) {
341 {
342 sktag = ttag; 328 sktag = ttag;
343 skaclass = tclass; 329 skaclass = tclass;
344 } 330 } else {
345 else
346 {
347 skaclass = V_ASN1_UNIVERSAL; 331 skaclass = V_ASN1_UNIVERSAL;
348 if (isset) 332 if (isset)
349 sktag = V_ASN1_SET; 333 sktag = V_ASN1_SET;
@@ -352,8 +336,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
352 336
353 /* Determine total length of items */ 337 /* Determine total length of items */
354 skcontlen = 0; 338 skcontlen = 0;
355 for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) 339 for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
356 {
357 skitem = sk_ASN1_VALUE_value(sk, i); 340 skitem = sk_ASN1_VALUE_value(sk, i);
358 skcontlen += ASN1_item_ex_i2d(&skitem, NULL, 341 skcontlen += ASN1_item_ex_i2d(&skitem, NULL,
359 ASN1_ITEM_ptr(tt->item), 342 ASN1_ITEM_ptr(tt->item),
@@ -377,8 +360,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
377 /* And the stuff itself */ 360 /* And the stuff itself */
378 asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item), 361 asn1_set_seq_out(sk, out, skcontlen, ASN1_ITEM_ptr(tt->item),
379 isset, iclass); 362 isset, iclass);
380 if (ndef == 2) 363 if (ndef == 2) {
381 {
382 ASN1_put_eoc(out); 364 ASN1_put_eoc(out);
383 if (flags & ASN1_TFLG_EXPTAG) 365 if (flags & ASN1_TFLG_EXPTAG)
384 ASN1_put_eoc(out); 366 ASN1_put_eoc(out);
@@ -387,8 +369,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
387 return ret; 369 return ret;
388 } 370 }
389 371
390 if (flags & ASN1_TFLG_EXPTAG) 372 if (flags & ASN1_TFLG_EXPTAG) {
391 {
392 /* EXPLICIT tagging */ 373 /* EXPLICIT tagging */
393 /* Find length of tagged item */ 374 /* Find length of tagged item */
394 i = ASN1_item_ex_i2d(pval, NULL, ASN1_ITEM_ptr(tt->item), 375 i = ASN1_item_ex_i2d(pval, NULL, ASN1_ITEM_ptr(tt->item),
@@ -397,8 +378,7 @@ static int asn1_template_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
397 return 0; 378 return 0;
398 /* Find length of EXPLICIT tag */ 379 /* Find length of EXPLICIT tag */
399 ret = ASN1_object_size(ndef, i, ttag); 380 ret = ASN1_object_size(ndef, i, ttag);
400 if (out) 381 if (out) {
401 {
402 /* Output tag and item */ 382 /* Output tag and item */
403 ASN1_put_object(out, ndef, i, ttag, tclass); 383 ASN1_put_object(out, ndef, i, ttag, tclass);
404 ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item), 384 ASN1_item_ex_i2d(pval, out, ASN1_ITEM_ptr(tt->item),
@@ -449,8 +429,7 @@ static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
449 /* Don't need to sort less than 2 items */ 429 /* Don't need to sort less than 2 items */
450 if (sk_ASN1_VALUE_num(sk) < 2) 430 if (sk_ASN1_VALUE_num(sk) < 2)
451 do_sort = 0; 431 do_sort = 0;
452 else 432 else {
453 {
454 derlst = malloc(sk_ASN1_VALUE_num(sk) 433 derlst = malloc(sk_ASN1_VALUE_num(sk)
455 * sizeof(*derlst)); 434 * sizeof(*derlst));
456 tmpdat = malloc(skcontlen); 435 tmpdat = malloc(skcontlen);
@@ -461,10 +440,8 @@ static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
461 } 440 }
462 } 441 }
463 /* If not sorting just output each item */ 442 /* If not sorting just output each item */
464 if (!do_sort) 443 if (!do_sort) {
465 { 444 for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) {
466 for (i = 0; i < sk_ASN1_VALUE_num(sk); i++)
467 {
468 skitem = sk_ASN1_VALUE_value(sk, i); 445 skitem = sk_ASN1_VALUE_value(sk, i);
469 ASN1_item_ex_i2d(&skitem, out, item, -1, iclass); 446 ASN1_item_ex_i2d(&skitem, out, item, -1, iclass);
470 } 447 }
@@ -473,8 +450,7 @@ static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
473 p = tmpdat; 450 p = tmpdat;
474 451
475 /* Doing sort: build up a list of each member's DER encoding */ 452 /* Doing sort: build up a list of each member's DER encoding */
476 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) 453 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) {
477 {
478 skitem = sk_ASN1_VALUE_value(sk, i); 454 skitem = sk_ASN1_VALUE_value(sk, i);
479 tder->data = p; 455 tder->data = p;
480 tder->length = ASN1_item_ex_i2d(&skitem, &p, item, -1, iclass); 456 tder->length = ASN1_item_ex_i2d(&skitem, &p, item, -1, iclass);
@@ -485,17 +461,14 @@ static int asn1_set_seq_out(STACK_OF(ASN1_VALUE) *sk, unsigned char **out,
485 qsort(derlst, sk_ASN1_VALUE_num(sk), sizeof(*derlst), der_cmp); 461 qsort(derlst, sk_ASN1_VALUE_num(sk), sizeof(*derlst), der_cmp);
486 /* Output sorted DER encoding */ 462 /* Output sorted DER encoding */
487 p = *out; 463 p = *out;
488 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) 464 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++) {
489 {
490 memcpy(p, tder->data, tder->length); 465 memcpy(p, tder->data, tder->length);
491 p += tder->length; 466 p += tder->length;
492 } 467 }
493 *out = p; 468 *out = p;
494 /* If do_sort is 2 then reorder the STACK */ 469 /* If do_sort is 2 then reorder the STACK */
495 if (do_sort == 2) 470 if (do_sort == 2) {
496 { 471 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk); i++, tder++)
497 for (i = 0, tder = derlst; i < sk_ASN1_VALUE_num(sk);
498 i++, tder++)
499 (void)sk_ASN1_VALUE_set(sk, i, tder->field); 472 (void)sk_ASN1_VALUE_set(sk, i, tder->field);
500 } 473 }
501 free(derlst); 474 free(derlst);
@@ -536,8 +509,7 @@ static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
536 return 0; 509 return 0;
537 510
538 /* -2 return is special meaning use ndef */ 511 /* -2 return is special meaning use ndef */
539 if (len == -2) 512 if (len == -2) {
540 {
541 ndef = 2; 513 ndef = 2;
542 len = 0; 514 len = 0;
543 } 515 }
@@ -546,8 +518,7 @@ static int asn1_i2d_ex_primitive(ASN1_VALUE **pval, unsigned char **out,
546 if (tag == -1) tag = utype; 518 if (tag == -1) tag = utype;
547 519
548 /* Output tag+length followed by content octets */ 520 /* Output tag+length followed by content octets */
549 if (out) 521 if (out) {
550 {
551 if (usetag) 522 if (usetag)
552 ASN1_put_object(out, ndef, len, tag, aclass); 523 ASN1_put_object(out, ndef, len, tag, aclass);
553 asn1_ex_i2c(pval, *out, &utype, it); 524 asn1_ex_i2c(pval, *out, &utype, it);
@@ -580,21 +551,16 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype,
580 return pf->prim_i2c(pval, cout, putype, it); 551 return pf->prim_i2c(pval, cout, putype, it);
581 552
582 /* Should type be omitted? */ 553 /* Should type be omitted? */
583 if ((it->itype != ASN1_ITYPE_PRIMITIVE) 554 if ((it->itype != ASN1_ITYPE_PRIMITIVE) || (it->utype != V_ASN1_BOOLEAN)) {
584 || (it->utype != V_ASN1_BOOLEAN))
585 {
586 if (!*pval) return -1; 555 if (!*pval) return -1;
587 } 556 }
588 557
589 if (it->itype == ASN1_ITYPE_MSTRING) 558 if (it->itype == ASN1_ITYPE_MSTRING) {
590 {
591 /* If MSTRING type set the underlying type */ 559 /* If MSTRING type set the underlying type */
592 strtmp = (ASN1_STRING *)*pval; 560 strtmp = (ASN1_STRING *)*pval;
593 utype = strtmp->type; 561 utype = strtmp->type;
594 *putype = utype; 562 *putype = utype;
595 } 563 } else if (it->utype == V_ASN1_ANY) {
596 else if (it->utype == V_ASN1_ANY)
597 {
598 /* If ANY set type and pointer to value */ 564 /* If ANY set type and pointer to value */
599 ASN1_TYPE *typ; 565 ASN1_TYPE *typ;
600 typ = (ASN1_TYPE *)*pval; 566 typ = (ASN1_TYPE *)*pval;
@@ -604,25 +570,23 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype,
604 } 570 }
605 else utype = *putype; 571 else utype = *putype;
606 572
607 switch(utype) 573 switch(utype) {
608 { 574 case V_ASN1_OBJECT:
609 case V_ASN1_OBJECT:
610 otmp = (ASN1_OBJECT *)*pval; 575 otmp = (ASN1_OBJECT *)*pval;
611 cont = otmp->data; 576 cont = otmp->data;
612 len = otmp->length; 577 len = otmp->length;
613 break; 578 break;
614 579
615 case V_ASN1_NULL: 580 case V_ASN1_NULL:
616 cont = NULL; 581 cont = NULL;
617 len = 0; 582 len = 0;
618 break; 583 break;
619 584
620 case V_ASN1_BOOLEAN: 585 case V_ASN1_BOOLEAN:
621 tbool = (ASN1_BOOLEAN *)pval; 586 tbool = (ASN1_BOOLEAN *)pval;
622 if (*tbool == -1) 587 if (*tbool == -1)
623 return -1; 588 return -1;
624 if (it->utype != V_ASN1_ANY) 589 if (it->utype != V_ASN1_ANY) {
625 {
626 /* Default handling if value == size field then omit */ 590 /* Default handling if value == size field then omit */
627 if (*tbool && (it->size > 0)) 591 if (*tbool && (it->size > 0))
628 return -1; 592 return -1;
@@ -634,15 +598,15 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype,
634 len = 1; 598 len = 1;
635 break; 599 break;
636 600
637 case V_ASN1_BIT_STRING: 601 case V_ASN1_BIT_STRING:
638 return i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval, 602 return i2c_ASN1_BIT_STRING((ASN1_BIT_STRING *)*pval,
639 cout ? &cout : NULL); 603 cout ? &cout : NULL);
640 break; 604 break;
641 605
642 case V_ASN1_INTEGER: 606 case V_ASN1_INTEGER:
643 case V_ASN1_NEG_INTEGER: 607 case V_ASN1_NEG_INTEGER:
644 case V_ASN1_ENUMERATED: 608 case V_ASN1_ENUMERATED:
645 case V_ASN1_NEG_ENUMERATED: 609 case V_ASN1_NEG_ENUMERATED:
646 /* These are all have the same content format 610 /* These are all have the same content format
647 * as ASN1_INTEGER 611 * as ASN1_INTEGER
648 */ 612 */
@@ -650,31 +614,29 @@ int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cout, int *putype,
650 cout ? &cout : NULL); 614 cout ? &cout : NULL);
651 break; 615 break;
652 616
653 case V_ASN1_OCTET_STRING: 617 case V_ASN1_OCTET_STRING:
654 case V_ASN1_NUMERICSTRING: 618 case V_ASN1_NUMERICSTRING:
655 case V_ASN1_PRINTABLESTRING: 619 case V_ASN1_PRINTABLESTRING:
656 case V_ASN1_T61STRING: 620 case V_ASN1_T61STRING:
657 case V_ASN1_VIDEOTEXSTRING: 621 case V_ASN1_VIDEOTEXSTRING:
658 case V_ASN1_IA5STRING: 622 case V_ASN1_IA5STRING:
659 case V_ASN1_UTCTIME: 623 case V_ASN1_UTCTIME:
660 case V_ASN1_GENERALIZEDTIME: 624 case V_ASN1_GENERALIZEDTIME:
661 case V_ASN1_GRAPHICSTRING: 625 case V_ASN1_GRAPHICSTRING:
662 case V_ASN1_VISIBLESTRING: 626 case V_ASN1_VISIBLESTRING:
663 case V_ASN1_GENERALSTRING: 627 case V_ASN1_GENERALSTRING:
664 case V_ASN1_UNIVERSALSTRING: 628 case V_ASN1_UNIVERSALSTRING:
665 case V_ASN1_BMPSTRING: 629 case V_ASN1_BMPSTRING:
666 case V_ASN1_UTF8STRING: 630 case V_ASN1_UTF8STRING:
667 case V_ASN1_SEQUENCE: 631 case V_ASN1_SEQUENCE:
668 case V_ASN1_SET: 632 case V_ASN1_SET:
669 default: 633 default:
670 /* All based on ASN1_STRING and handled the same */ 634 /* All based on ASN1_STRING and handled the same */
671 strtmp = (ASN1_STRING *)*pval; 635 strtmp = (ASN1_STRING *)*pval;
672 /* Special handling for NDEF */ 636 /* Special handling for NDEF */
673 if ((it->size == ASN1_TFLG_NDEF) 637 if ((it->size == ASN1_TFLG_NDEF)
674 && (strtmp->flags & ASN1_STRING_FLAG_NDEF)) 638 && (strtmp->flags & ASN1_STRING_FLAG_NDEF)) {
675 { 639 if (cout) {
676 if (cout)
677 {
678 strtmp->data = cout; 640 strtmp->data = cout;
679 strtmp->length = 0; 641 strtmp->length = 0;
680 } 642 }