diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/asn1_gen.c')
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_gen.c | 76 |
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; |