fixed

Pure Haskell large fixed-width integers and Montgomery arithmetic.
git clone git://git.ppad.tech/fixed.git
Log | Files | Refs | README | LICENSE

commit 4aa78fba38d7fbb11e567cd6bd4cf38fe864a9ad
parent 5799e341305792dcbeb425c0a891e300d0d858af
Author: Jared Tobin <jared@jtobin.io>
Date:   Sat, 20 Dec 2025 17:32:16 -0330

lib: remove vartime exp

Diffstat:
Mbench/Main.hs | 18------------------
Mbench/Weight.hs | 13-------------
Mlib/Numeric/Montgomery/Secp256k1/Curve.hs | 18------------------
Mlib/Numeric/Montgomery/Secp256k1/Scalar.hs | 18------------------
4 files changed, 0 insertions(+), 67 deletions(-)

diff --git a/bench/Main.hs b/bench/Main.hs @@ -18,7 +18,6 @@ main = defaultMain [ , sqr , inv , exp - , exp_vartime , sqrt , redc , retr @@ -121,23 +120,6 @@ exp = nf (S.exp s_big) e_big ] -exp_vartime :: Benchmark -exp_vartime = - let !c2 = 2 :: C.Montgomery - !c_big = (2 ^ 255 - 19) :: C.Montgomery - !s2 = 2 :: S.Montgomery - !s_big = (2 ^ 255 - 19) :: S.Montgomery - !e2 = 2 :: Wider - !e_big = (2 ^ 255 - 19) :: Wider - in bgroup "exp_vartime" [ - bench "curve: M(2) ^ 2" $ nf (C.exp_vartime c2) e2 - , bench "curve: M(2 ^ 255 - 19) ^ (2 ^ 255 - 19)" $ - nf (C.exp_vartime c_big) e_big - , bench "scalar: M(2) ^ 2" $ nf (S.exp_vartime s2) e2 - , bench "scalar: M(2 ^ 255 - 19) ^ (2 ^ 255 - 19)" $ - nf (S.exp_vartime s_big) e_big - ] - redc :: Benchmark redc = let !c2 = 2 :: C.Montgomery diff --git a/bench/Weight.hs b/bench/Weight.hs @@ -19,7 +19,6 @@ main = mainWith $ do sqr inv exp - exp_vartime sqrt redc retr @@ -100,18 +99,6 @@ exp = func "scalar: M(2) ^ 2" (S.exp s2) sma func "scalar: M(2) ^ (2 ^ 255 - 19)" (S.exp s2) big -exp_vartime :: Weigh () -exp_vartime = - let !c2 = 2 :: C.Montgomery - !s2 = 2 :: S.Montgomery - !sma = 2 :: Wider - !big = (2 ^ 255 - 19) :: Wider - in wgroup "exp_vartime" $ do - func "curve: M(2) ^ 2" (C.exp_vartime c2) sma - func "curve: M(2) ^ (2 ^ 255 - 19)" (C.exp_vartime c2) big - func "scalar: M(2) ^ 2" (S.exp_vartime s2) sma - func "scalar: M(2) ^ (2 ^ 255 - 19)" (S.exp_vartime s2) big - sqrt :: Weigh () sqrt = let !c2 = 2 :: C.Montgomery diff --git a/lib/Numeric/Montgomery/Secp256k1/Curve.hs b/lib/Numeric/Montgomery/Secp256k1/Curve.hs @@ -54,7 +54,6 @@ module Numeric.Montgomery.Secp256k1.Curve ( , sqrt , sqrt# , exp - , exp_vartime , odd# , odd ) where @@ -1535,23 +1534,6 @@ exp (Montgomery b) (Wider e) = in loop nr nm ne (n - 1) in Montgomery (loop one# b e (256 :: Word)) --- | Variable-time exponentiation in the Montgomery domain. --- --- >>> exp_vartime 2 3 --- 8 --- >>> exp_vartime 2 10 --- 1024 -exp_vartime :: Montgomery -> Wider -> Montgomery -exp_vartime b = loop 1 b where - loop !r !m !e = case WW.cmp e 0 of - GT -> - let !nm = sqr m - !ne = WW.shr1 e - !nr | WW.odd e = r * m - | otherwise = r - in loop nr nm ne - _ -> r - odd# :: (# Limb, Limb, Limb, Limb #) -> C.Choice odd# = WW.odd# {-# INLINE odd #-} diff --git a/lib/Numeric/Montgomery/Secp256k1/Scalar.hs b/lib/Numeric/Montgomery/Secp256k1/Scalar.hs @@ -52,7 +52,6 @@ module Numeric.Montgomery.Secp256k1.Scalar ( , inv , inv# , exp - , exp_vartime , odd# , odd ) where @@ -961,23 +960,6 @@ exp (Montgomery b) (Wider e) = in loop nr nm ne (n - 1) in Montgomery (loop one# b e (256 :: Word)) --- | Variable-time exponentiation in the Montgomery domain. --- --- >>> exp_vartime 2 3 --- 8 --- >>> exp_vartime 2 10 --- 1024 -exp_vartime :: Montgomery -> Wider -> Montgomery -exp_vartime b = loop 1 b where - loop !r !m !e = case WW.cmp e 0 of - GT -> - let !nm = sqr m - !ne = WW.shr1 e - !nr | WW.odd e = r * m - | otherwise = r - in loop nr nm ne - _ -> r - odd# :: (# Limb, Limb, Limb, Limb #) -> C.Choice odd# = WW.odd# {-# INLINE odd #-}