mirror of
https://github.com/codex-storage/constantine.git
synced 2025-02-06 07:53:36 +00:00
b1ef2682d6
* implement arbitrary precision modular exponentiation (prerequisite EIP-198) * [modexp] implement exponentiation modulo 2ᵏ * add inversion (mod 2ᵏ) * [modexp] High-level wrapper for powmod with odd modulus * [modexp] faster exponentiation (mod 2ᵏ) for even case and Euler's totient function odd case * [modexp] implement general fast modular exponentiation * Fix modular reduction with 64-bit modulus + fuzz powmod vs GMP * add benchmark * add EIP-198 support * fixups following self review * fix test paths
19 lines
362 B
Nim
19 lines
362 B
Nim
# From issue #241
|
|
|
|
import
|
|
../../constantine/math/[
|
|
arithmetic,
|
|
io/io_bigints]
|
|
|
|
let a = BigInt[64].fromUint(0xa0e5cb56a1c08396'u64)
|
|
let M = BigInt[64].fromUint(0xae57180eceb0206f'u64)
|
|
|
|
var r: BigInt[64]
|
|
|
|
r.reduce(a, M)
|
|
|
|
let rU64 = 0xa0e5cb56a1c08396'u64 mod 0xae57180eceb0206f'u64
|
|
echo r.toHex()
|
|
|
|
doAssert rU64 == a.limbs[0].uint64
|
|
doAssert bool(a == r) |