\r
PolynomialMod2 PolynomialMod2::Trinomial(size_t t0, size_t t1, size_t t2)\r
{\r
+ // Asserts and checks due to Bing Shi\r
CRYPTOPP_ASSERT(t0 > t1);\r
CRYPTOPP_ASSERT(t1 > t2);\r
\r
+ // The test is odd because of ECIES<EC2N>. The basis is t0, but the other coefficients are not in descending order.\r
+ if (t1 > t0 || t2 > t0)\r
+ throw InvalidArgument("PolynomialMod2: coefficients must be in descending order");\r
+\r
PolynomialMod2 r((word)0, t0+1);\r
r.SetBit(t0);\r
r.SetBit(t1);\r
\r
PolynomialMod2 PolynomialMod2::Pentanomial(size_t t0, size_t t1, size_t t2, size_t t3, size_t t4)\r
{\r
+ // Asserts and checks due to Bing Shi\r
CRYPTOPP_ASSERT(t0 > t1);\r
CRYPTOPP_ASSERT(t1 > t2);\r
CRYPTOPP_ASSERT(t2 > t3);\r
CRYPTOPP_ASSERT(t3 > t4);\r
\r
+ // The test is odd because of ECIES<EC2N>. The basis is t0, but the other coefficients are not in descending order.\r
+ if (t1 > t0 || t2 > t0 || t3 > t0 || t4 > t0)\r
+ throw InvalidArgument("PolynomialMod2: coefficients must be in descending order");\r
+\r
PolynomialMod2 r((word)0, t0+1);\r
r.SetBit(t0);\r
r.SetBit(t1);\r
, t0(c0), t1(c1)\r
, result((word)0, m)\r
{\r
+ // Asserts and checks due to Bing Shi\r
CRYPTOPP_ASSERT(c0 > c1 && c1 > c2 && c2==0);\r
+\r
+ // The test is odd because of ECIES<EC2N>. The basis is c0, but the other coefficients are not in descending order.\r
+ if (c1 > c0 || c2 > c0)\r
+ throw InvalidArgument("GF2NT: coefficients must be in descending order");\r
}\r
\r
const GF2NT::Element& GF2NT::MultiplicativeInverse(const Element &a) const\r
GF2NT233::GF2NT233(unsigned int c0, unsigned int c1, unsigned int c2)\r
: GF2NT(c0, c1, c2)\r
{\r
+ // Asserts and checks due to Bing Shi\r
CRYPTOPP_ASSERT(c0 > c1 && c1 > c2 && c2==0);\r
+\r
+ // The test is odd because of ECIES<EC2N>. The basis is c0, but the other coefficients are not in descending order.\r
+ if (c1 > c0 || c2 > c0)\r
+ throw InvalidArgument("GF2NT: coefficients must be in descending order");\r
}\r
\r
const GF2NT::Element& GF2NT233::Multiply(const Element &a, const Element &b) const\r