fixed

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

commit fd0bc00ecdd659696372384992feb4db399c517e
parent 3441bf0d8798ecbf4af7e0d21afdc5d10579c52b
Author: Jared Tobin <jared@jtobin.io>
Date:   Sat, 20 Dec 2025 15:35:30 -0330

lib: remove 'ct' prefix

Diffstat:
Mlib/Data/Choice.hs | 48++++++++++++++++++++++++------------------------
Mlib/Data/Word/Limb.hs | 8++++----
Mlib/Data/Word/Wider.hs | 4++--
Mlib/Numeric/Montgomery/Secp256k1/Curve.hs | 2+-
Mlib/Numeric/Montgomery/Secp256k1/Scalar.hs | 2+-
5 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/lib/Data/Choice.hs b/lib/Data/Choice.hs @@ -46,14 +46,14 @@ module Data.Choice ( , eq# -- * Constant-time Selection - , ct_select_word# - , ct_select_wide# - , ct_select_wider# + , select_word# + , select_wide# + , select_wider# -- * Constant-time Equality - , ct_eq_word# - , ct_eq_wide# - , ct_eq_wider# + , eq_word# + , eq_wide# + , eq_wider# ) where import qualified Data.Bits as B @@ -280,63 +280,63 @@ eq# c0 c1 = not# (ne# c0 c1) -- constant-time selection ---------------------------------------------------- -ct_select_word# :: Word# -> Word# -> Choice -> Word# -ct_select_word# a b (Choice c) = Exts.xor# a (Exts.and# c (Exts.xor# a b)) -{-# INLINE ct_select_word# #-} +select_word# :: Word# -> Word# -> Choice -> Word# +select_word# a b (Choice c) = Exts.xor# a (Exts.and# c (Exts.xor# a b)) +{-# INLINE select_word# #-} -ct_select_wide# +select_wide# :: (# Word#, Word# #) -> (# Word#, Word# #) -> Choice -> (# Word#, Word# #) -ct_select_wide# a b (Choice w) = +select_wide# a b (Choice w) = let !mask = or_w# (hi# w) (lo# w) in xor_w# a (and_w# mask (xor_w# a b)) -{-# INLINE ct_select_wide# #-} +{-# INLINE select_wide# #-} -ct_select_wider# +select_wider# :: (# Word#, Word#, Word#, Word# #) -> (# Word#, Word#, Word#, Word# #) -> Choice -> (# Word#, Word#, Word#, Word# #) -ct_select_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) (Choice w) = +select_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) (Choice w) = let !w0 = Exts.xor# a0 (Exts.and# w (Exts.xor# a0 b0)) !w1 = Exts.xor# a1 (Exts.and# w (Exts.xor# a1 b1)) !w2 = Exts.xor# a2 (Exts.and# w (Exts.xor# a2 b2)) !w3 = Exts.xor# a3 (Exts.and# w (Exts.xor# a3 b3)) in (# w0, w1, w2, w3 #) -{-# INLINE ct_select_wider# #-} +{-# INLINE select_wider# #-} -- constant-time equality ----------------------------------------------------- -ct_eq_word# :: Word# -> Word# -> Choice -ct_eq_word# a b = +eq_word# :: Word# -> Word# -> Choice +eq_word# a b = let !s = case B.finiteBitSize (0 :: Word) of I# m -> m Exts.-# 1# !x = Exts.xor# a b !y = Exts.uncheckedShiftRL# (Exts.or# x (wrapping_neg# x)) s in Choice (Exts.xor# y 1##) -{-# INLINE ct_eq_word# #-} +{-# INLINE eq_word# #-} -ct_eq_wide# +eq_wide# :: (# Word#, Word# #) -> (# Word#, Word# #) -> Choice -ct_eq_wide# (# a0, a1 #) (# b0, b1 #) = +eq_wide# (# a0, a1 #) (# b0, b1 #) = let !s = case B.finiteBitSize (0 :: Word) of I# m -> m Exts.-# 1# !x = Exts.or# (Exts.xor# a0 b0) (Exts.xor# a1 b1) !y = Exts.uncheckedShiftRL# (Exts.or# x (wrapping_neg# x)) s in Choice (Exts.xor# y 1##) -{-# INLINE ct_eq_wide# #-} +{-# INLINE eq_wide# #-} -ct_eq_wider# +eq_wider# :: (# Word#, Word#, Word#, Word# #) -> (# Word#, Word#, Word#, Word# #) -> Choice -ct_eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) = +eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) = let !s = case B.finiteBitSize (0 :: Word) of I# m -> m Exts.-# 1# !x = Exts.or# (Exts.or# (Exts.xor# a0 b0) (Exts.xor# a1 b1)) (Exts.or# (Exts.xor# a2 b2) (Exts.xor# a3 b3)) !y = Exts.uncheckedShiftRL# (Exts.or# x (wrapping_neg# x)) s in Choice (Exts.xor# y 1##) -{-# INLINE ct_eq_wider# #-} +{-# INLINE eq_wider# #-} diff --git a/lib/Data/Word/Limb.hs b/lib/Data/Word/Limb.hs @@ -83,7 +83,7 @@ eq# :: Limb -> Limb -> C.Choice -eq# (Limb a) (Limb b) = C.ct_eq_word# a b +eq# (Limb a) (Limb b) = C.eq_word# a b {-# INLINE eq# #-} eq_vartime# @@ -139,7 +139,7 @@ select# -> Limb -- ^ b -> C.Choice -- ^ c -> Limb -- ^ result -select# (Limb a) (Limb b) c = Limb (C.ct_select_word# a b c) +select# (Limb a) (Limb b) c = Limb (C.select_word# a b c) {-# INLINE select# #-} -- | Return (# b, a #) if c is truthy, otherwise return (# a, b #). @@ -149,8 +149,8 @@ cswap# -> C.Choice -- ^ c -> (# Limb, Limb #) -- ^ result cswap# (Limb a) (Limb b) c = - let !l = C.ct_select_word# a b c - !r = C.ct_select_word# b a c + let !l = C.select_word# a b c + !r = C.select_word# b a c in (# Limb l, Limb r #) {-# INLINE cswap# #-} diff --git a/lib/Data/Word/Wider.hs b/lib/Data/Word/Wider.hs @@ -132,7 +132,7 @@ eq# eq# a b = let !(# Limb a0, Limb a1, Limb a2, Limb a3 #) = a !(# Limb b0, Limb b1, Limb b2, Limb b3 #) = b - in C.ct_eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) + in C.eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) {-# INLINE eq# #-} -- | Compare 'Wider' words for equality in variable time. @@ -249,7 +249,7 @@ select# a b c = let !(# Limb a0, Limb a1, Limb a2, Limb a3 #) = a !(# Limb b0, Limb b1, Limb b2, Limb b3 #) = b !(# w0, w1, w2, w3 #) = - C.ct_select_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) c + C.select_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) c in (# Limb w0, Limb w1, Limb w2, Limb w3 #) {-# INLINE select# #-} diff --git a/lib/Numeric/Montgomery/Secp256k1/Curve.hs b/lib/Numeric/Montgomery/Secp256k1/Curve.hs @@ -133,7 +133,7 @@ eq :: Montgomery -> Montgomery -> C.Choice eq (Montgomery (# Limb a0, Limb a1, Limb a2, Limb a3 #)) (Montgomery (# Limb b0, Limb b1, Limb b2, Limb b3 #)) - = C.ct_eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) + = C.eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) {-# INLINE eq #-} -- | Variable-time equality comparison. diff --git a/lib/Numeric/Montgomery/Secp256k1/Scalar.hs b/lib/Numeric/Montgomery/Secp256k1/Scalar.hs @@ -131,7 +131,7 @@ eq :: Montgomery -> Montgomery -> C.Choice eq (Montgomery (# Limb a0, Limb a1, Limb a2, Limb a3 #)) (Montgomery (# Limb b0, Limb b1, Limb b2, Limb b3 #)) - = C.ct_eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) + = C.eq_wider# (# a0, a1, a2, a3 #) (# b0, b1, b2, b3 #) {-# INLINE eq #-} -- | Variable-time equality comparison.