forked from pool/libcryptopp
- version update to 8.9.0 * Crypto++ 8.9 was released on October 1, 2023. The 8.9 release was a minor, unplanned release. There were no CVEs and one memory error. * The 8.9 release was driven by the fix for `ProcessData`, and the failures when `inString==outString`. Also see GH #1231, Rabbit Produces null Keystream When inString == outString. * Release notes * =========== * minor release, recompile of programs required * expanded community input and support * 88 unique contributors as of this release * add additional tests to datatest.cpp * fix SIMON128 Asan finding on POWER8 * fix AES/CFB and AES/CTR modes self test failures when using Cryptogams AES on ARMv7 * fix ARIA/CTR mode self test failures when inString==outString * fix HIGHT/CTR mode self test failures when inString==outString * fix Rabbit/CTR mode self test failures when inString==outString * fix HC128/CTR and HC256/CTR mode self test failures when inString==outString * fix Prime Table and dangling reference to a temporary * fix Singleton::Ref() when using C++11 memory fences * remove unneeded call to Crop() in Randomize() - modified patches % libcryptopp-shared.patch (refreshed) - modified sources % baselibs.conf OBS-URL: https://build.opensuse.org/request/show/1134476 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/libcryptopp?expand=0&rev=77
105 lines
4.0 KiB
Diff
105 lines
4.0 KiB
Diff
diff --git a/gf2n.cpp b/gf2n.cpp
|
|
index 452e6982..8993baae 100644
|
|
--- a/gf2n.cpp
|
|
+++ b/gf2n.cpp
|
|
@@ -135,6 +135,9 @@ PolynomialMod2 PolynomialMod2::Monomial(size_t i)
|
|
|
|
PolynomialMod2 PolynomialMod2::Trinomial(size_t t0, size_t t1, size_t t2)
|
|
{
|
|
+ CRYPTOPP_ASSERT(t0 > t1);
|
|
+ CRYPTOPP_ASSERT(t1 > t2);
|
|
+
|
|
PolynomialMod2 r((word)0, t0+1);
|
|
r.SetBit(t0);
|
|
r.SetBit(t1);
|
|
@@ -144,6 +147,11 @@ PolynomialMod2 PolynomialMod2::Trinomial(size_t t0, size_t t1, size_t t2)
|
|
|
|
PolynomialMod2 PolynomialMod2::Pentanomial(size_t t0, size_t t1, size_t t2, size_t t3, size_t t4)
|
|
{
|
|
+ CRYPTOPP_ASSERT(t0 > t1);
|
|
+ CRYPTOPP_ASSERT(t1 > t2);
|
|
+ CRYPTOPP_ASSERT(t2 > t3);
|
|
+ CRYPTOPP_ASSERT(t3 > t4);
|
|
+
|
|
PolynomialMod2 r((word)0, t0+1);
|
|
r.SetBit(t0);
|
|
r.SetBit(t1);
|
|
diff --git a/gf2n.h b/gf2n.h
|
|
index 4aef31ee..38e2a910 100644
|
|
--- a/gf2n.h
|
|
+++ b/gf2n.h
|
|
@@ -69,9 +69,11 @@ public:
|
|
static PolynomialMod2 CRYPTOPP_API Monomial(size_t i);
|
|
/// \brief Provides x^t0 + x^t1 + x^t2
|
|
/// \return x^t0 + x^t1 + x^t2
|
|
+ /// \pre The coefficients should be provided in descending order. That is, <pre>t0 > t1 > t2<pre>.
|
|
static PolynomialMod2 CRYPTOPP_API Trinomial(size_t t0, size_t t1, size_t t2);
|
|
/// \brief Provides x^t0 + x^t1 + x^t2 + x^t3 + x^t4
|
|
/// \return x^t0 + x^t1 + x^t2 + x^t3 + x^t4
|
|
+ /// \pre The coefficients should be provided in descending order. That is, <pre>t0 > t1 > t2 > t3 > t4<pre>.
|
|
static PolynomialMod2 CRYPTOPP_API Pentanomial(size_t t0, size_t t1, size_t t2, size_t t3, size_t t4);
|
|
/// \brief Provides x^(n-1) + ... + x + 1
|
|
/// \return x^(n-1) + ... + x + 1
|
|
diff --git a/gf2n.cpp b/gf2n.cpp
|
|
index 8993baae..87d9961b 100644
|
|
--- a/gf2n.cpp
|
|
+++ b/gf2n.cpp
|
|
@@ -135,9 +135,14 @@ PolynomialMod2 PolynomialMod2::Monomial(size_t i)
|
|
|
|
PolynomialMod2 PolynomialMod2::Trinomial(size_t t0, size_t t1, size_t t2)
|
|
{
|
|
+ // Asserts and checks due to Bing Shi
|
|
CRYPTOPP_ASSERT(t0 > t1);
|
|
CRYPTOPP_ASSERT(t1 > t2);
|
|
|
|
+ // The test is odd because of ECIES<EC2N>. The basis is t0, but the other coefficients are not in descending order.
|
|
+ if (t1 > t0 || t2 > t0)
|
|
+ throw InvalidArgument("PolynomialMod2: coefficients must be in descending order");
|
|
+
|
|
PolynomialMod2 r((word)0, t0+1);
|
|
r.SetBit(t0);
|
|
r.SetBit(t1);
|
|
@@ -147,11 +152,16 @@ PolynomialMod2 PolynomialMod2::Trinomial(size_t t0, size_t t1, size_t t2)
|
|
|
|
PolynomialMod2 PolynomialMod2::Pentanomial(size_t t0, size_t t1, size_t t2, size_t t3, size_t t4)
|
|
{
|
|
+ // Asserts and checks due to Bing Shi
|
|
CRYPTOPP_ASSERT(t0 > t1);
|
|
CRYPTOPP_ASSERT(t1 > t2);
|
|
CRYPTOPP_ASSERT(t2 > t3);
|
|
CRYPTOPP_ASSERT(t3 > t4);
|
|
|
|
+ // The test is odd because of ECIES<EC2N>. The basis is t0, but the other coefficients are not in descending order.
|
|
+ if (t1 > t0 || t2 > t0 || t3 > t0 || t4 > t0)
|
|
+ throw InvalidArgument("PolynomialMod2: coefficients must be in descending order");
|
|
+
|
|
PolynomialMod2 r((word)0, t0+1);
|
|
r.SetBit(t0);
|
|
r.SetBit(t1);
|
|
@@ -663,7 +673,12 @@ GF2NT::GF2NT(unsigned int c0, unsigned int c1, unsigned int c2)
|
|
, t0(c0), t1(c1)
|
|
, result((word)0, m)
|
|
{
|
|
+ // Asserts and checks due to Bing Shi
|
|
CRYPTOPP_ASSERT(c0 > c1 && c1 > c2 && c2==0);
|
|
+
|
|
+ // The test is odd because of ECIES<EC2N>. The basis is c0, but the other coefficients are not in descending order.
|
|
+ if (c1 > c0 || c2 > c0)
|
|
+ throw InvalidArgument("GF2NT: coefficients must be in descending order");
|
|
}
|
|
|
|
const GF2NT::Element& GF2NT::MultiplicativeInverse(const Element &a) const
|
|
@@ -972,7 +987,12 @@ GF2NP * BERDecodeGF2NP(BufferedTransformation &bt)
|
|
GF2NT233::GF2NT233(unsigned int c0, unsigned int c1, unsigned int c2)
|
|
: GF2NT(c0, c1, c2)
|
|
{
|
|
+ // Asserts and checks due to Bing Shi
|
|
CRYPTOPP_ASSERT(c0 > c1 && c1 > c2 && c2==0);
|
|
+
|
|
+ // The test is odd because of ECIES<EC2N>. The basis is c0, but the other coefficients are not in descending order.
|
|
+ if (c1 > c0 || c2 > c0)
|
|
+ throw InvalidArgument("GF2NT: coefficients must be in descending order");
|
|
}
|
|
|
|
const GF2NT::Element& GF2NT233::Multiply(const Element &a, const Element &b) const
|