summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/asn1_gen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/asn1_gen.c')
-rw-r--r--src/lib/libcrypto/asn1/asn1_gen.c76
1 files changed, 33 insertions, 43 deletions
diff --git a/src/lib/libcrypto/asn1/asn1_gen.c b/src/lib/libcrypto/asn1/asn1_gen.c
index e899337b6f..f84cc6136b 100644
--- a/src/lib/libcrypto/asn1/asn1_gen.c
+++ b/src/lib/libcrypto/asn1/asn1_gen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn1_gen.c,v 1.15 2015/12/12 21:03:52 beck Exp $ */ 1/* $OpenBSD: asn1_gen.c,v 1.16 2017/01/29 17:49:22 beck 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 2002. 3 * project 2002.
4 */ 4 */
@@ -160,8 +160,7 @@ ASN1_generate_v3(char *str, X509V3_CTX *cnf)
160 if ((asn1_tags.utype == V_ASN1_SEQUENCE) || 160 if ((asn1_tags.utype == V_ASN1_SEQUENCE) ||
161 (asn1_tags.utype == V_ASN1_SET)) { 161 (asn1_tags.utype == V_ASN1_SET)) {
162 if (!cnf) { 162 if (!cnf) {
163 ASN1err(ASN1_F_ASN1_GENERATE_V3, 163 ASN1error(ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
164 ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
165 return NULL; 164 return NULL;
166 } 165 }
167 ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf); 166 ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
@@ -290,7 +289,7 @@ asn1_cb(const char *elem, int len, void *bitstr)
290 utype = asn1_str2tag(elem, len); 289 utype = asn1_str2tag(elem, len);
291 290
292 if (utype == -1) { 291 if (utype == -1) {
293 ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKNOWN_TAG); 292 ASN1error(ASN1_R_UNKNOWN_TAG);
294 ERR_asprintf_error_data("tag=%s", elem); 293 ERR_asprintf_error_data("tag=%s", elem);
295 return -1; 294 return -1;
296 } 295 }
@@ -301,7 +300,7 @@ asn1_cb(const char *elem, int len, void *bitstr)
301 arg->str = vstart; 300 arg->str = vstart;
302 /* If no value and not end of string, error */ 301 /* If no value and not end of string, error */
303 if (!vstart && elem[len]) { 302 if (!vstart && elem[len]) {
304 ASN1err(ASN1_F_ASN1_CB, ASN1_R_MISSING_VALUE); 303 ASN1error(ASN1_R_MISSING_VALUE);
305 return -1; 304 return -1;
306 } 305 }
307 return 0; 306 return 0;
@@ -312,7 +311,7 @@ asn1_cb(const char *elem, int len, void *bitstr)
312 case ASN1_GEN_FLAG_IMP: 311 case ASN1_GEN_FLAG_IMP:
313 /* Check for illegal multiple IMPLICIT tagging */ 312 /* Check for illegal multiple IMPLICIT tagging */
314 if (arg->imp_tag != -1) { 313 if (arg->imp_tag != -1) {
315 ASN1err(ASN1_F_ASN1_CB, ASN1_R_ILLEGAL_NESTED_TAGGING); 314 ASN1error(ASN1_R_ILLEGAL_NESTED_TAGGING);
316 return -1; 315 return -1;
317 } 316 }
318 if (!parse_tagging(vstart, vlen, &arg->imp_tag, 317 if (!parse_tagging(vstart, vlen, &arg->imp_tag,
@@ -349,7 +348,7 @@ asn1_cb(const char *elem, int len, void *bitstr)
349 348
350 case ASN1_GEN_FLAG_FORMAT: 349 case ASN1_GEN_FLAG_FORMAT:
351 if (vstart == NULL) { 350 if (vstart == NULL) {
352 ASN1err(ASN1_F_ASN1_CB, ASN1_R_ILLEGAL_FORMAT); 351 ASN1error(ASN1_R_ILLEGAL_FORMAT);
353 return -1; 352 return -1;
354 } 353 }
355 if (!strncmp(vstart, "ASCII", 5)) 354 if (!strncmp(vstart, "ASCII", 5))
@@ -361,7 +360,7 @@ asn1_cb(const char *elem, int len, void *bitstr)
361 else if (!strncmp(vstart, "BITLIST", 7)) 360 else if (!strncmp(vstart, "BITLIST", 7))
362 arg->format = ASN1_GEN_FORMAT_BITLIST; 361 arg->format = ASN1_GEN_FORMAT_BITLIST;
363 else { 362 else {
364 ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKOWN_FORMAT); 363 ASN1error(ASN1_R_UNKOWN_FORMAT);
365 return -1; 364 return -1;
366 } 365 }
367 break; 366 break;
@@ -384,7 +383,7 @@ parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass)
384 if (eptr && *eptr && (eptr > vstart + vlen)) 383 if (eptr && *eptr && (eptr > vstart + vlen))
385 return 0; 384 return 0;
386 if (tag_num < 0) { 385 if (tag_num < 0) {
387 ASN1err(ASN1_F_PARSE_TAGGING, ASN1_R_INVALID_NUMBER); 386 ASN1error(ASN1_R_INVALID_NUMBER);
388 return 0; 387 return 0;
389 } 388 }
390 *ptag = tag_num; 389 *ptag = tag_num;
@@ -413,7 +412,7 @@ parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass)
413 break; 412 break;
414 413
415 default: 414 default:
416 ASN1err(ASN1_F_PARSE_TAGGING, ASN1_R_INVALID_MODIFIER); 415 ASN1error(ASN1_R_INVALID_MODIFIER);
417 ERR_asprintf_error_data("Char=%c", *eptr); 416 ERR_asprintf_error_data("Char=%c", *eptr);
418 return 0; 417 return 0;
419 break; 418 break;
@@ -497,12 +496,12 @@ append_exp(tag_exp_arg *arg, int exp_tag, int exp_class, int exp_constructed,
497 496
498 /* Can only have IMPLICIT if permitted */ 497 /* Can only have IMPLICIT if permitted */
499 if ((arg->imp_tag != -1) && !imp_ok) { 498 if ((arg->imp_tag != -1) && !imp_ok) {
500 ASN1err(ASN1_F_APPEND_EXP, ASN1_R_ILLEGAL_IMPLICIT_TAG); 499 ASN1error(ASN1_R_ILLEGAL_IMPLICIT_TAG);
501 return 0; 500 return 0;
502 } 501 }
503 502
504 if (arg->exp_count == ASN1_FLAG_EXP_MAX) { 503 if (arg->exp_count == ASN1_FLAG_EXP_MAX) {
505 ASN1err(ASN1_F_APPEND_EXP, ASN1_R_DEPTH_EXCEEDED); 504 ASN1error(ASN1_R_DEPTH_EXCEEDED);
506 return 0; 505 return 0;
507 } 506 }
508 507
@@ -614,7 +613,7 @@ asn1_str2type(const char *str, int format, int utype)
614 int no_unused = 1; 613 int no_unused = 1;
615 614
616 if (!(atmp = ASN1_TYPE_new())) { 615 if (!(atmp = ASN1_TYPE_new())) {
617 ASN1err(ASN1_F_ASN1_STR2TYPE, ERR_R_MALLOC_FAILURE); 616 ASN1error(ERR_R_MALLOC_FAILURE);
618 return NULL; 617 return NULL;
619 } 618 }
620 619
@@ -625,22 +624,21 @@ asn1_str2type(const char *str, int format, int utype)
625 624
626 case V_ASN1_NULL: 625 case V_ASN1_NULL:
627 if (str && *str) { 626 if (str && *str) {
628 ASN1err(ASN1_F_ASN1_STR2TYPE, 627 ASN1error(ASN1_R_ILLEGAL_NULL_VALUE);
629 ASN1_R_ILLEGAL_NULL_VALUE);
630 goto bad_form; 628 goto bad_form;
631 } 629 }
632 break; 630 break;
633 631
634 case V_ASN1_BOOLEAN: 632 case V_ASN1_BOOLEAN:
635 if (format != ASN1_GEN_FORMAT_ASCII) { 633 if (format != ASN1_GEN_FORMAT_ASCII) {
636 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_NOT_ASCII_FORMAT); 634 ASN1error(ASN1_R_NOT_ASCII_FORMAT);
637 goto bad_form; 635 goto bad_form;
638 } 636 }
639 vtmp.name = NULL; 637 vtmp.name = NULL;
640 vtmp.section = NULL; 638 vtmp.section = NULL;
641 vtmp.value = (char *)str; 639 vtmp.value = (char *)str;
642 if (!X509V3_get_value_bool(&vtmp, &atmp->value.boolean)) { 640 if (!X509V3_get_value_bool(&vtmp, &atmp->value.boolean)) {
643 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_ILLEGAL_BOOLEAN); 641 ASN1error(ASN1_R_ILLEGAL_BOOLEAN);
644 goto bad_str; 642 goto bad_str;
645 } 643 }
646 break; 644 break;
@@ -648,25 +646,23 @@ asn1_str2type(const char *str, int format, int utype)
648 case V_ASN1_INTEGER: 646 case V_ASN1_INTEGER:
649 case V_ASN1_ENUMERATED: 647 case V_ASN1_ENUMERATED:
650 if (format != ASN1_GEN_FORMAT_ASCII) { 648 if (format != ASN1_GEN_FORMAT_ASCII) {
651 ASN1err(ASN1_F_ASN1_STR2TYPE, 649 ASN1error(ASN1_R_INTEGER_NOT_ASCII_FORMAT);
652 ASN1_R_INTEGER_NOT_ASCII_FORMAT);
653 goto bad_form; 650 goto bad_form;
654 } 651 }
655 if (!(atmp->value.integer = 652 if (!(atmp->value.integer =
656 s2i_ASN1_INTEGER(NULL, (char *)str))) { 653 s2i_ASN1_INTEGER(NULL, (char *)str))) {
657 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_ILLEGAL_INTEGER); 654 ASN1error(ASN1_R_ILLEGAL_INTEGER);
658 goto bad_str; 655 goto bad_str;
659 } 656 }
660 break; 657 break;
661 658
662 case V_ASN1_OBJECT: 659 case V_ASN1_OBJECT:
663 if (format != ASN1_GEN_FORMAT_ASCII) { 660 if (format != ASN1_GEN_FORMAT_ASCII) {
664 ASN1err(ASN1_F_ASN1_STR2TYPE, 661 ASN1error(ASN1_R_OBJECT_NOT_ASCII_FORMAT);
665 ASN1_R_OBJECT_NOT_ASCII_FORMAT);
666 goto bad_form; 662 goto bad_form;
667 } 663 }
668 if (!(atmp->value.object = OBJ_txt2obj(str, 0))) { 664 if (!(atmp->value.object = OBJ_txt2obj(str, 0))) {
669 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_ILLEGAL_OBJECT); 665 ASN1error(ASN1_R_ILLEGAL_OBJECT);
670 goto bad_str; 666 goto bad_str;
671 } 667 }
672 break; 668 break;
@@ -674,22 +670,20 @@ asn1_str2type(const char *str, int format, int utype)
674 case V_ASN1_UTCTIME: 670 case V_ASN1_UTCTIME:
675 case V_ASN1_GENERALIZEDTIME: 671 case V_ASN1_GENERALIZEDTIME:
676 if (format != ASN1_GEN_FORMAT_ASCII) { 672 if (format != ASN1_GEN_FORMAT_ASCII) {
677 ASN1err(ASN1_F_ASN1_STR2TYPE, 673 ASN1error(ASN1_R_TIME_NOT_ASCII_FORMAT);
678 ASN1_R_TIME_NOT_ASCII_FORMAT);
679 goto bad_form; 674 goto bad_form;
680 } 675 }
681 if (!(atmp->value.asn1_string = ASN1_STRING_new())) { 676 if (!(atmp->value.asn1_string = ASN1_STRING_new())) {
682 ASN1err(ASN1_F_ASN1_STR2TYPE, ERR_R_MALLOC_FAILURE); 677 ASN1error(ERR_R_MALLOC_FAILURE);
683 goto bad_str; 678 goto bad_str;
684 } 679 }
685 if (!ASN1_STRING_set(atmp->value.asn1_string, str, -1)) { 680 if (!ASN1_STRING_set(atmp->value.asn1_string, str, -1)) {
686 ASN1err(ASN1_F_ASN1_STR2TYPE, ERR_R_MALLOC_FAILURE); 681 ASN1error(ERR_R_MALLOC_FAILURE);
687 goto bad_str; 682 goto bad_str;
688 } 683 }
689 atmp->value.asn1_string->type = utype; 684 atmp->value.asn1_string->type = utype;
690 if (!ASN1_TIME_check(atmp->value.asn1_string)) { 685 if (!ASN1_TIME_check(atmp->value.asn1_string)) {
691 ASN1err(ASN1_F_ASN1_STR2TYPE, 686 ASN1error(ASN1_R_ILLEGAL_TIME_VALUE);
692 ASN1_R_ILLEGAL_TIME_VALUE);
693 goto bad_str; 687 goto bad_str;
694 } 688 }
695 break; 689 break;
@@ -709,14 +703,14 @@ asn1_str2type(const char *str, int format, int utype)
709 else if (format == ASN1_GEN_FORMAT_UTF8) 703 else if (format == ASN1_GEN_FORMAT_UTF8)
710 format = MBSTRING_UTF8; 704 format = MBSTRING_UTF8;
711 else { 705 else {
712 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_ILLEGAL_FORMAT); 706 ASN1error(ASN1_R_ILLEGAL_FORMAT);
713 goto bad_form; 707 goto bad_form;
714 } 708 }
715 709
716 if (ASN1_mbstring_copy(&atmp->value.asn1_string, 710 if (ASN1_mbstring_copy(&atmp->value.asn1_string,
717 (unsigned char *)str, -1, format, 711 (unsigned char *)str, -1, format,
718 ASN1_tag2bit(utype)) <= 0) { 712 ASN1_tag2bit(utype)) <= 0) {
719 ASN1err(ASN1_F_ASN1_STR2TYPE, ERR_R_MALLOC_FAILURE); 713 ASN1error(ERR_R_MALLOC_FAILURE);
720 goto bad_str; 714 goto bad_str;
721 } 715 }
722 break; 716 break;
@@ -724,15 +718,14 @@ asn1_str2type(const char *str, int format, int utype)
724 case V_ASN1_BIT_STRING: 718 case V_ASN1_BIT_STRING:
725 case V_ASN1_OCTET_STRING: 719 case V_ASN1_OCTET_STRING:
726 if (!(atmp->value.asn1_string = ASN1_STRING_new())) { 720 if (!(atmp->value.asn1_string = ASN1_STRING_new())) {
727 ASN1err(ASN1_F_ASN1_STR2TYPE, ERR_R_MALLOC_FAILURE); 721 ASN1error(ERR_R_MALLOC_FAILURE);
728 goto bad_form; 722 goto bad_form;
729 } 723 }
730 724
731 if (format == ASN1_GEN_FORMAT_HEX) { 725 if (format == ASN1_GEN_FORMAT_HEX) {
732 726
733 if (!(rdata = string_to_hex((char *)str, &rdlen))) { 727 if (!(rdata = string_to_hex((char *)str, &rdlen))) {
734 ASN1err(ASN1_F_ASN1_STR2TYPE, 728 ASN1error(ASN1_R_ILLEGAL_HEX);
735 ASN1_R_ILLEGAL_HEX);
736 goto bad_str; 729 goto bad_str;
737 } 730 }
738 731
@@ -743,23 +736,20 @@ asn1_str2type(const char *str, int format, int utype)
743 } else if (format == ASN1_GEN_FORMAT_ASCII) { 736 } else if (format == ASN1_GEN_FORMAT_ASCII) {
744 if (ASN1_STRING_set(atmp->value.asn1_string, str, 737 if (ASN1_STRING_set(atmp->value.asn1_string, str,
745 -1) == 0) { 738 -1) == 0) {
746 ASN1err(ASN1_F_ASN1_STR2TYPE, 739 ASN1error(ERR_R_MALLOC_FAILURE);
747 ERR_R_MALLOC_FAILURE);
748 goto bad_str; 740 goto bad_str;
749 } 741 }
750 } else if ((format == ASN1_GEN_FORMAT_BITLIST) && 742 } else if ((format == ASN1_GEN_FORMAT_BITLIST) &&
751 (utype == V_ASN1_BIT_STRING)) { 743 (utype == V_ASN1_BIT_STRING)) {
752 if (!CONF_parse_list(str, ',', 1, bitstr_cb, 744 if (!CONF_parse_list(str, ',', 1, bitstr_cb,
753 atmp->value.bit_string)) { 745 atmp->value.bit_string)) {
754 ASN1err(ASN1_F_ASN1_STR2TYPE, 746 ASN1error(ASN1_R_LIST_ERROR);
755 ASN1_R_LIST_ERROR);
756 goto bad_str; 747 goto bad_str;
757 } 748 }
758 no_unused = 0; 749 no_unused = 0;
759 750
760 } else { 751 } else {
761 ASN1err(ASN1_F_ASN1_STR2TYPE, 752 ASN1error(ASN1_R_ILLEGAL_BITSTRING_FORMAT);
762 ASN1_R_ILLEGAL_BITSTRING_FORMAT);
763 goto bad_form; 753 goto bad_form;
764 } 754 }
765 755
@@ -773,7 +763,7 @@ asn1_str2type(const char *str, int format, int utype)
773 break; 763 break;
774 764
775 default: 765 default:
776 ASN1err(ASN1_F_ASN1_STR2TYPE, ASN1_R_UNSUPPORTED_TYPE); 766 ASN1error(ASN1_R_UNSUPPORTED_TYPE);
777 goto bad_str; 767 goto bad_str;
778 break; 768 break;
779 } 769 }
@@ -800,11 +790,11 @@ bitstr_cb(const char *elem, int len, void *bitstr)
800 if (eptr && *eptr && (eptr != elem + len)) 790 if (eptr && *eptr && (eptr != elem + len))
801 return 0; 791 return 0;
802 if (bitnum < 0) { 792 if (bitnum < 0) {
803 ASN1err(ASN1_F_BITSTR_CB, ASN1_R_INVALID_NUMBER); 793 ASN1error(ASN1_R_INVALID_NUMBER);
804 return 0; 794 return 0;
805 } 795 }
806 if (!ASN1_BIT_STRING_set_bit(bitstr, bitnum, 1)) { 796 if (!ASN1_BIT_STRING_set_bit(bitstr, bitnum, 1)) {
807 ASN1err(ASN1_F_BITSTR_CB, ERR_R_MALLOC_FAILURE); 797 ASN1error(ERR_R_MALLOC_FAILURE);
808 return 0; 798 return 0;
809 } 799 }
810 return 1; 800 return 1;