/ tests / math_arbitrary_precision / t_bigints_mod.nim
t_bigints_mod.nim
 1  # From issue #241
 2  
 3  import
 4    ../../constantine/math/[
 5      arithmetic,
 6      io/io_bigints],
 7    ../../constantine/math_arbitrary_precision/arithmetic/limbs_divmod_vartime,
 8    ../../constantine/platforms/abstractions
 9  
10  let a = BigInt[64].fromUint(0xa0e5cb56a1c08396'u64)
11  let M = BigInt[64].fromUint(0xae57180eceb0206f'u64)
12  
13  var r, r2: BigInt[64]
14  
15  r.reduce(a, M)
16  doAssert r2.limbs.reduce_vartime(a.limbs, M.limbs)
17  
18  let rBase = cast[BaseType](0xa0e5cb56a1c08396'u64) mod cast[BaseType](0xae57180eceb0206f'u64)
19  # echo r.toHex()
20  
21  doAssert rBase == a.limbs[0].BaseType
22  doAssert bool(a == r)
23  echo "SUCCESS: t_bigints_mod.nim"