Lines 741-746
Link Here
|
741 |
EC_GROUP *ret = NULL; |
741 |
EC_GROUP *ret = NULL; |
742 |
BIGNUM *p = NULL, *a = NULL, *b = NULL; |
742 |
BIGNUM *p = NULL, *a = NULL, *b = NULL; |
743 |
EC_POINT *point=NULL; |
743 |
EC_POINT *point=NULL; |
|
|
744 |
long field_bits; |
744 |
|
745 |
|
745 |
if (!params->fieldID || !params->fieldID->fieldType || |
746 |
if (!params->fieldID || !params->fieldID->fieldType || |
746 |
!params->fieldID->p.ptr) |
747 |
!params->fieldID->p.ptr) |
Lines 779-784
Link Here
|
779 |
|
780 |
|
780 |
char_two = params->fieldID->p.char_two; |
781 |
char_two = params->fieldID->p.char_two; |
781 |
|
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) |
790 |
if ((p = BN_new()) == NULL) |
783 |
{ |
791 |
{ |
784 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE); |
792 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_MALLOC_FAILURE); |
Lines 799-804
Link Here
|
799 |
} |
807 |
} |
800 |
|
808 |
|
801 |
tmp_long = ASN1_INTEGER_get(char_two->p.tpBasis); |
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 */ |
817 |
/* create the polynomial */ |
803 |
if (!BN_set_bit(p, (int)char_two->m)) |
818 |
if (!BN_set_bit(p, (int)char_two->m)) |
804 |
goto err; |
819 |
goto err; |
Lines 817-822
Link Here
|
817 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); |
832 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, EC_R_ASN1_ERROR); |
818 |
goto err; |
833 |
goto err; |
819 |
} |
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 */ |
842 |
/* create the polynomial */ |
821 |
if (!BN_set_bit(p, (int)char_two->m)) goto err; |
843 |
if (!BN_set_bit(p, (int)char_two->m)) goto err; |
822 |
if (!BN_set_bit(p, (int)penta->k1)) goto err; |
844 |
if (!BN_set_bit(p, (int)penta->k1)) goto err; |
Lines 853-858
Link Here
|
853 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); |
875 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); |
854 |
goto err; |
876 |
goto err; |
855 |
} |
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 */ |
892 |
/* create the EC_GROUP structure */ |
857 |
ret = EC_GROUP_new_curve_GFp(p, a, b, NULL); |
893 |
ret = EC_GROUP_new_curve_GFp(p, a, b, NULL); |
858 |
} |
894 |
} |
Lines 910-915
Link Here
|
910 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); |
946 |
ECerr(EC_F_EC_ASN1_PARAMETERS2GROUP, ERR_R_ASN1_LIB); |
911 |
goto err; |
947 |
goto err; |
912 |
} |
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 |
|
959 |
|
914 |
/* extract the cofactor (optional) */ |
960 |
/* extract the cofactor (optional) */ |
915 |
if (params->cofactor == NULL) |
961 |
if (params->cofactor == NULL) |