ec_asn1.c (160814) | ec_asn1.c (162911) |
---|---|
1/* crypto/ec/ec_asn1.c */ 2/* 3 * Written by Nils Larsch for the OpenSSL project. 4 */ 5/* ==================================================================== 6 * Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 727 unchanged lines hidden (view full) --- 736 } 737 738static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params) 739 { 740 int ok = 0, tmp; 741 EC_GROUP *ret = NULL; 742 BIGNUM *p = NULL, *a = NULL, *b = NULL; 743 EC_POINT *point=NULL; | 1/* crypto/ec/ec_asn1.c */ 2/* 3 * Written by Nils Larsch for the OpenSSL project. 4 */ 5/* ==================================================================== 6 * Copyright (c) 2000-2003 The OpenSSL Project. All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 727 unchanged lines hidden (view full) --- 736 } 737 738static EC_GROUP *ec_asn1_parameters2group(const ECPARAMETERS *params) 739 { 740 int ok = 0, tmp; 741 EC_GROUP *ret = NULL; 742 BIGNUM *p = NULL, *a = NULL, *b = NULL; 743 EC_POINT *point=NULL; |
744 long field_bits; |
|
744 745 if (!params->fieldID || !params->fieldID->fieldType || 746 !params->fieldID->p.ptr) 747 { 748 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 749 goto err; 750 } 751 --- 22 unchanged lines hidden (view full) --- 774 tmp = OBJ_obj2nid(params->fieldID->fieldType); 775 776 if (tmp == NID_X9_62_characteristic_two_field) 777 { 778 X9_62_CHARACTERISTIC_TWO *char_two; 779 780 char_two = params->fieldID->p.char_two; 781 | 745 746 if (!params->fieldID || !params->fieldID->fieldType || 747 !params->fieldID->p.ptr) 748 { 749 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 750 goto err; 751 } 752 --- 22 unchanged lines hidden (view full) --- 775 tmp = OBJ_obj2nid(params->fieldID->fieldType); 776 777 if (tmp == NID_X9_62_characteristic_two_field) 778 { 779 X9_62_CHARACTERISTIC_TWO *char_two; 780 781 char_two = params->fieldID->p.char_two; 782 |
783 field_bits = char_two->m; 784 if (field_bits > OPENSSL_ECC_MAX_FIELD_BITS) 785 { 786 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_FIELD_TOO_LARGE); 787 goto err; 788 } 789 |
|
782 if ((p = BN_new()) == NULL) 783 { 784 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE); 785 goto err; 786 } 787 788 /* get the base type */ 789 tmp = OBJ_obj2nid(char_two->type); --- 4 unchanged lines hidden (view full) --- 794 795 if (!char_two->p.tpBasis) 796 { 797 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 798 goto err; 799 } 800 801 tmp_long = ASN1_INTEGER_get(char_two->p.tpBasis); | 790 if ((p = BN_new()) == NULL) 791 { 792 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE); 793 goto err; 794 } 795 796 /* get the base type */ 797 tmp = OBJ_obj2nid(char_two->type); --- 4 unchanged lines hidden (view full) --- 802 803 if (!char_two->p.tpBasis) 804 { 805 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 806 goto err; 807 } 808 809 tmp_long = ASN1_INTEGER_get(char_two->p.tpBasis); |
810 811 if (!(char_two->m > tmp_long && tmp_long > 0)) 812 { 813 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_TRINOMIAL_BASIS); 814 goto err; 815 } 816 |
|
802 /* create the polynomial */ 803 if (!BN_set_bit(p, (int)char_two->m)) 804 goto err; 805 if (!BN_set_bit(p, (int)tmp_long)) 806 goto err; 807 if (!BN_set_bit(p, 0)) 808 goto err; 809 } 810 else if (tmp == NID_X9_62_ppBasis) 811 { 812 X9_62_PENTANOMIAL *penta; 813 814 penta = char_two->p.ppBasis; 815 if (!penta) 816 { 817 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 818 goto err; 819 } | 817 /* create the polynomial */ 818 if (!BN_set_bit(p, (int)char_two->m)) 819 goto err; 820 if (!BN_set_bit(p, (int)tmp_long)) 821 goto err; 822 if (!BN_set_bit(p, 0)) 823 goto err; 824 } 825 else if (tmp == NID_X9_62_ppBasis) 826 { 827 X9_62_PENTANOMIAL *penta; 828 829 penta = char_two->p.ppBasis; 830 if (!penta) 831 { 832 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); 833 goto err; 834 } |
835 836 if (!(char_two->m > penta->k3 && penta->k3 > penta->k2 && penta->k2 > penta->k1 && penta->k1 > 0)) 837 { 838 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_PENTANOMIAL_BASIS); 839 goto err; 840 } 841 |
|
820 /* create the polynomial */ 821 if (!BN_set_bit(p, (int)char_two->m)) goto err; 822 if (!BN_set_bit(p, (int)penta->k1)) goto err; 823 if (!BN_set_bit(p, (int)penta->k2)) goto err; 824 if (!BN_set_bit(p, (int)penta->k3)) goto err; 825 if (!BN_set_bit(p, 0)) goto err; 826 } 827 else if (tmp == NID_X9_62_onBasis) --- 20 unchanged lines hidden (view full) --- 848 goto err; 849 } 850 p = ASN1_INTEGER_to_BN(params->fieldID->p.prime, NULL); 851 if (p == NULL) 852 { 853 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); 854 goto err; 855 } | 842 /* create the polynomial */ 843 if (!BN_set_bit(p, (int)char_two->m)) goto err; 844 if (!BN_set_bit(p, (int)penta->k1)) goto err; 845 if (!BN_set_bit(p, (int)penta->k2)) goto err; 846 if (!BN_set_bit(p, (int)penta->k3)) goto err; 847 if (!BN_set_bit(p, 0)) goto err; 848 } 849 else if (tmp == NID_X9_62_onBasis) --- 20 unchanged lines hidden (view full) --- 870 goto err; 871 } 872 p = ASN1_INTEGER_to_BN(params->fieldID->p.prime, NULL); 873 if (p == NULL) 874 { 875 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); 876 goto err; 877 } |
878 879 if (BN_is_negative(p) || BN_is_zero(p)) 880 { 881 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_FIELD); 882 goto err; 883 } 884 885 field_bits = BN_num_bits(p); 886 if (field_bits > OPENSSL_ECC_MAX_FIELD_BITS) 887 { 888 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_FIELD_TOO_LARGE); 889 goto err; 890 } 891 |
|
856 /* create the EC_GROUP structure */ 857 ret = EC_GROUP_new_curve_GFp(p, a, b, NULL); 858 } 859 else 860 { 861 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_FIELD); 862 goto err; 863 } --- 41 unchanged lines hidden (view full) --- 905 } 906 907 /* extract the order */ 908 if ((a = ASN1_INTEGER_to_BN(params->order, a)) == NULL) 909 { 910 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); 911 goto err; 912 } | 892 /* create the EC_GROUP structure */ 893 ret = EC_GROUP_new_curve_GFp(p, a, b, NULL); 894 } 895 else 896 { 897 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_FIELD); 898 goto err; 899 } --- 41 unchanged lines hidden (view full) --- 941 } 942 943 /* extract the order */ 944 if ((a = ASN1_INTEGER_to_BN(params->order, a)) == NULL) 945 { 946 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); 947 goto err; 948 } |
949 if (BN_is_negative(a) || BN_is_zero(a)) 950 { 951 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_GROUP_ORDER); 952 goto err; 953 } 954 if (BN_num_bits(a) > (int)field_bits + 1) /* Hasse bound */ 955 { 956 ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_INVALID_GROUP_ORDER); 957 goto err; 958 } |
|
913 914 /* extract the cofactor (optional) */ 915 if (params->cofactor == NULL) 916 { 917 if (b) 918 { 919 BN_free(b); 920 b = NULL; --- 459 unchanged lines hidden --- | 959 960 /* extract the cofactor (optional) */ 961 if (params->cofactor == NULL) 962 { 963 if (b) 964 { 965 BN_free(b); 966 b = NULL; --- 459 unchanged lines hidden --- |