aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp')
-rw-r--r--src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp87
1 files changed, 0 insertions, 87 deletions
diff --git a/src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp b/src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp
deleted file mode 100644
index 9d11ebbc42..0000000000
--- a/src/libs/3rdparty/botan/src/lib/math/numbertheory/ressol.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-* Shanks-Tonnelli (RESSOL)
-* (C) 2007-2008 Falko Strenzke, FlexSecure GmbH
-* (C) 2008 Jack Lloyd
-*
-* Botan is released under the Simplified BSD License (see license.txt)
-*/
-
-#include <botan/numthry.h>
-#include <botan/reducer.h>
-
-namespace Botan {
-
-/*
-* Shanks-Tonnelli algorithm
-*/
-BigInt ressol(const BigInt& a, const BigInt& p)
- {
- if(a == 0)
- return 0;
- else if(a < 0)
- throw Invalid_Argument("ressol: value to solve for must be positive");
- else if(a >= p)
- throw Invalid_Argument("ressol: value to solve for must be less than p");
-
- if(p == 2)
- return a;
- else if(p <= 1)
- throw Invalid_Argument("ressol: prime must be > 1 a");
- else if(p.is_even())
- throw Invalid_Argument("ressol: invalid prime");
-
- if(jacobi(a, p) != 1) // not a quadratic residue
- return -BigInt(1);
-
- if(p % 4 == 3)
- return power_mod(a, ((p+1) >> 2), p);
-
- size_t s = low_zero_bits(p - 1);
- BigInt q = p >> s;
-
- q -= 1;
- q >>= 1;
-
- Modular_Reducer mod_p(p);
-
- BigInt r = power_mod(a, q, p);
- BigInt n = mod_p.multiply(a, mod_p.square(r));
- r = mod_p.multiply(r, a);
-
- if(n == 1)
- return r;
-
- // find random non quadratic residue z
- BigInt z = 2;
- while(jacobi(z, p) == 1) // while z quadratic residue
- ++z;
-
- BigInt c = power_mod(z, (q << 1) + 1, p);
-
- while(n > 1)
- {
- q = n;
-
- size_t i = 0;
- while(q != 1)
- {
- q = mod_p.square(q);
- ++i;
-
- if(i >= s)
- {
- return -BigInt(1);
- }
- }
-
- c = power_mod(c, BigInt::power_of_2(s-i-1), p);
- r = mod_p.multiply(r, c);
- c = mod_p.square(c);
- n = mod_p.multiply(n, c);
- s = i;
- }
-
- return r;
- }
-
-}