fixed

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

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