def Mag.modpow
bend-kit-bignum@0.1.0.0 · bigint.bend:274
import bend-kit-bignum@0.1.0.0/bigint.bend as Bigint
import Base
274
275
276def Mag.modpow(+f: Nat, +b: List<&2, U32>, +e: List<&2, U32>,
277 +acc: List<&2, U32>, +m: List<&2, U32>) -> List<&2, U32>:
278 match f:
279 case 0n:
280 acc
281 case 1n+g:
282 +h = Mag.half(e)
283 +acc2 = Mag.if(List<&2, U32>, Mag.odd(e),
284 u => Mag.rem(Mag.mul(acc, b), m), u => acc)
285 Mag.if(List<&2, U32>, List.is_empty(&2, U32, h), u => acc2,
286 u => Mag.modpow(g, Mag.rem(Mag.mul(b, b), m), h, acc2, m))