Weight.hs (2261B)
1 {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns -fno-warn-type-defaults #-} 2 {-# LANGUAGE BangPatterns #-} 3 {-# LANGUAGE OverloadedStrings #-} 4 5 module Main where 6 7 import qualified Numeric.Montgomery.Secp256k1.Curve as C 8 import qualified Numeric.Montgomery.Secp256k1.Scalar as S 9 import Weigh 10 11 -- note that 'weigh' doesn't work properly in a repl 12 main :: IO () 13 main = mainWith $ do 14 add 15 sub 16 mul 17 sqr 18 inv 19 redc 20 retr 21 22 add :: Weigh () 23 add = wgroup "add" $ do 24 func "curve: M(1) + M(2)" (C.add 1) 2 25 func "curve: M(1) + M(2 ^ 255 - 19)" (C.add 1) (2 ^ 255 - 19) 26 func "scalar: M(1) + M(2)" (S.add 1) 2 27 func "scalar: M(1) + M(2 ^ 255 - 19)" (S.add 1) (2 ^ 255 - 19) 28 29 sub :: Weigh () 30 sub = wgroup "sub" $ do 31 func "curve: M(2 ^ 255 - 1) - M(1)" 32 (C.sub (2 ^ 255 - 1)) 1 33 func "curve: M(2 ^ 255 - 1) - M(2 ^ 255 - 19)" 34 (C.sub (2 ^ 255 - 1)) (2 ^ 255 - 19) 35 func "scalar: M(2 ^ 255 - 1) - M(1)" 36 (S.sub (2 ^ 255 - 1)) 1 37 func "scalar: M(2 ^ 255 - 1) - M(2 ^ 255 - 19)" 38 (S.sub (2 ^ 255 - 1)) (2 ^ 255 - 19) 39 40 mul :: Weigh () 41 mul = wgroup "mul" $ do 42 func "curve: M(2) * M(2)" (C.mul 2) 2 43 func "curve: M(2) * M(2 ^ 255 - 19)" (C.mul 2) (2 ^ 255 - 19) 44 func "scalar: M(2) * M(2)" (S.mul 2) 2 45 func "scalar: M(2) * M(2 ^ 255 - 19)" (S.mul 2) (2 ^ 255 - 19) 46 47 sqr :: Weigh () 48 sqr = wgroup "sqr" $ do 49 func "curve: M(2) ^ 2" C.sqr 2 50 func "curve: M(2 ^ 255 - 19) ^ 2" C.sqr (2 ^ 255 - 19) 51 func "scalar: M(2) ^ 2" S.sqr 2 52 func "scalar: M(2 ^ 255 - 19) ^ 2" S.sqr (2 ^ 255 - 19) 53 54 inv :: Weigh () 55 inv = wgroup "inv" $ do 56 func "curve: M(2) ^ -1" C.inv 2 57 func "curve: M(2 ^ 255 - 19) ^ -1" C.inv (2 ^ 255 - 19) 58 func "scalar: M(2) ^ -1" S.inv 2 59 func "scalar: M(2 ^ 255 - 19) ^ -1" S.inv (2 ^ 255 - 19) 60 61 redc :: Weigh () 62 redc = wgroup "redc" $ do 63 func "curve: REDC(M(2), M(2))" (C.redc 2) 2 64 func "curve: REDC(M(2), M(2 ^ 255 - 19))" (C.redc 2) (2 ^ 255 - 19) 65 func "scalar: REDC(M(2), M(2))" (S.redc 2) 2 66 func "scalar: REDC(M(2), M(2 ^ 255 - 19))" (S.redc 2) (2 ^ 255 - 19) 67 68 retr :: Weigh () 69 retr = wgroup "retr" $ do 70 func "curve: RETR(M(2))" C.retr 2 71 func "curve: RETR(M(2 ^ 255 - 19))" C.retr (2 ^ 255 - 19) 72 func "scalar: RETR(M(2))" S.retr 2 73 func "scalar: RETR(M(2 ^ 255 - 19))" S.retr (2 ^ 255 - 19)