Scalar.hs (1025B)
1 {-# LANGUAGE BangPatterns #-} 2 {-# LANGUAGE MagicHash #-} 3 {-# LANGUAGE NumericUnderscores #-} 4 {-# LANGUAGE UnboxedTuples #-} 5 6 module Montgomery.Scalar ( 7 tests 8 ) where 9 10 import qualified Data.Word.Wider as W 11 import qualified Numeric.Montgomery.Secp256k1.Scalar as S 12 import Test.Tasty 13 import qualified Test.Tasty.HUnit as H 14 15 -- modulus :: S.Montgomery 16 -- modulus = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 17 18 add :: H.Assertion 19 add = do 20 H.assertBool mempty (W.eq_vartime (1 + 1) (S.from (1 + 1))) 21 H.assertBool mempty (W.eq_vartime (0 + 1) (S.from (0 + 1))) 22 let !m = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 23 !x = 2 ^ (256 :: Word) - 1 24 !mm = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 25 !mx = 2 ^ (256 :: Word) - 1 26 H.assertBool mempty (W.eq_vartime 0 (S.from mm)) 27 H.assertBool mempty (W.eq_vartime (x - m) (S.from (mx - mm))) 28 29 tests :: TestTree 30 tests = testGroup "montgomery tests (scalar)" [ 31 H.testCase "add" add 32 ] 33