Deleted Added
full compact
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 ---