fixed

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

Curve.hs (914B)


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