commit 4bee193289b86adadbfc8144e9a17d9e4fe91099
parent 736355e962618618cae4a932c469a66de81e3352
Author: Jared Tobin <jared@jtobin.io>
Date: Fri, 12 Dec 2025 16:34:31 +0400
lib: simplify using odd
Diffstat:
2 files changed, 5 insertions(+), 7 deletions(-)
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 (
) where
import Control.DeepSeq
-import qualified Data.Bits as B
import qualified Data.Choice as C
import Data.Word.Limb (Limb(..))
import qualified Data.Word.Limb as L
@@ -1010,11 +1009,11 @@ sqrt n =
-- 1024
exp :: Montgomery -> Wider -> Montgomery
exp b = loop 1 b where
- loop !r !m !e@(Wider (# Limb (W# -> w), _, _, _ #)) = case WW.cmp e 0 of
+ loop !r !m !e = case WW.cmp e 0 of
GT ->
let !nm = sqr m
!ne = WW.shr1 e
- !nr | B.testBit w 0 = r * m
+ !nr | WW.odd e = r * m
| otherwise = r
in loop nr nm ne
_ -> r
diff --git a/lib/Numeric/Montgomery/Secp256k1/Scalar.hs b/lib/Numeric/Montgomery/Secp256k1/Scalar.hs
@@ -53,7 +53,6 @@ module Numeric.Montgomery.Secp256k1.Scalar (
) where
import Control.DeepSeq
-import qualified Data.Bits as B
import qualified Data.Choice as C
import Data.Word.Limb (Limb(..))
import qualified Data.Word.Limb as L
@@ -61,7 +60,7 @@ import qualified Data.Word.Wide as W
import Data.Word.Wider (Wider(..))
import qualified Data.Word.Wider as WW
import GHC.Exts (Word(..))
-import Prelude hiding (div, mod, or, and, not, quot, rem, recip, exp)
+import Prelude hiding (or, and, not, exp, odd)
-- montgomery arithmetic, specialized to the secp256k1 scalar group order
-- 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
@@ -948,11 +947,11 @@ inv (Montgomery w) = Montgomery (inv# w)
-- 1024
exp :: Montgomery -> Wider -> Montgomery
exp b = loop 1 b where
- loop !r !m !e@(Wider (# Limb (W# -> w), _, _, _ #)) = case WW.cmp e 0 of
+ loop !r !m !e = case WW.cmp e 0 of
GT ->
let !nm = sqr m
!ne = WW.shr1 e
- !nr | B.testBit w 0 = r * m
+ !nr | WW.odd e = r * m
| otherwise = r
in loop nr nm ne
_ -> r