Fix powF2m when exponent is not a power of 2
Integer multiplication cannot be used because it includes carry propagation. This needs to use carry-less mulF2m instead.
This commit is contained in:
parent
5f657fda2e
commit
dfc9fb9fb2
@ -111,10 +111,10 @@ powF2m :: BinaryPolynomial -- ^Modulus
|
|||||||
-> Integer -- ^b
|
-> Integer -- ^b
|
||||||
-> Integer
|
-> Integer
|
||||||
powF2m fx a b
|
powF2m fx a b
|
||||||
| b == 0 = 1
|
| b < 0 = error "powF2m: negative exponents disallowed"
|
||||||
| b > 0 = squareF2m fx x * if even b then 1 else a
|
| b == 0 = if fx > 1 then 1 else 0
|
||||||
| b < 0 = error "powF2m: negative exponents disallowed"
|
| even b = squareF2m fx x
|
||||||
| otherwise = error "powF2m: impossible"
|
| otherwise = mulF2m fx a (squareF2m' x)
|
||||||
where x = powF2m fx a (b `div` 2)
|
where x = powF2m fx a (b `div` 2)
|
||||||
|
|
||||||
-- | Square rooot in F₂m.
|
-- | Square rooot in F₂m.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user