From a321a5c412090d04dfaea4b4876c4901c42cfe44 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 27 Feb 2013 09:32:19 +0100 Subject: Moved stand-alone libs to libs/ directory and added libs/subcircuit --- libs/bigint/BigIntegerAlgorithms.hh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 libs/bigint/BigIntegerAlgorithms.hh (limited to 'libs/bigint/BigIntegerAlgorithms.hh') diff --git a/libs/bigint/BigIntegerAlgorithms.hh b/libs/bigint/BigIntegerAlgorithms.hh new file mode 100644 index 000000000..b1dd94322 --- /dev/null +++ b/libs/bigint/BigIntegerAlgorithms.hh @@ -0,0 +1,25 @@ +#ifndef BIGINTEGERALGORITHMS_H +#define BIGINTEGERALGORITHMS_H + +#include "BigInteger.hh" + +/* Some mathematical algorithms for big integers. + * This code is new and, as such, experimental. */ + +// Returns the greatest common divisor of a and b. +BigUnsigned gcd(BigUnsigned a, BigUnsigned b); + +/* Extended Euclidean algorithm. + * Given m and n, finds gcd g and numbers r, s such that r*m + s*n == g. */ +void extendedEuclidean(BigInteger m, BigInteger n, + BigInteger &g, BigInteger &r, BigInteger &s); + +/* Returns the multiplicative inverse of x modulo n, or throws an exception if + * they have a common factor. */ +BigUnsigned modinv(const BigInteger &x, const BigUnsigned &n); + +// Returns (base ^ exponent) % modulus. +BigUnsigned modexp(const BigInteger &base, const BigUnsigned &exponent, + const BigUnsigned &modulus); + +#endif -- cgit v1.2.3