From 7ca1f2e4d69942fa27dd2ad574df75dc96d5c81f Mon Sep 17 00:00:00 2001 From: root <287494524@qq.com> Date: Mon, 15 Jul 2019 10:47:58 +0800 Subject: [PATCH 1/3] bench for P256.pointAdd and P256.pointMul --- benchs/Bench.hs | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/benchs/Bench.hs b/benchs/Bench.hs index 92e7e62..268f991 100644 --- a/benchs/Bench.hs +++ b/benchs/Bench.hs @@ -28,6 +28,8 @@ import Control.DeepSeq (NFData) import Data.ByteArray (ByteArray, Bytes) import qualified Data.ByteString as B +import qualified Crypto.PubKey.ECC.P256 as P256 + import Number.F2m data HashAlg = forall alg . HashAlgorithm alg => HashAlg alg @@ -195,20 +197,50 @@ benchAE = benchECC = [ bench "pointAddTwoMuls-baseline" $ nf run_b (n1, p1, n2, p2) , bench "pointAddTwoMuls-optimized" $ nf run_o (n1, p1, n2, p2) + , bench "pointAdd-ECC" $ nf run_c (p1, p2) + , bench "pointMul-ECC" $ nf run_d (n1, p2) ] where run_b (n, p, k, q) = ECC.pointAdd c (ECC.pointMul c n p) (ECC.pointMul c k q) run_o (n, p, k, q) = ECC.pointAddTwoMuls c n p k q + run_c (p, q) = ECC.pointAdd c p q + run_d (n, p) = ECC.pointMul c n p c = ECC.getCurveByName ECC.SEC_p256r1 r1 = 7 r2 = 11 - p1 = ECC.pointBaseMul c r1 - p2 = ECC.pointBaseMul c r2 + -- p1 = ECC.pointBaseMul c r1 + -- p2 = ECC.pointBaseMul c r2 + p1 = ECC.pointBaseMul c n1 + p2 = ECC.pointBaseMul c n2 n1 = 0x2ba9daf2363b2819e69b34a39cf496c2458a9b2a21505ea9e7b7cbca42dc7435 n2 = 0xf054a7f60d10b8c2cf847ee90e9e029f8b0e971b09ca5f55c4d49921a11fadc1 +benchP256 = + [ bench "pointAddTwoMuls-P256" $ nf run_p (n1, s, n2, t) + , bench "pointAdd-P256" $ nf run_q (s, t) + , bench "pointMul-P256" $ nf run_t (n1, s) + ] + where run_p (n1, s, n2, t) = P256.pointAdd (P256.pointMul n1 s) (P256.pointMul n2 t) + run_q (s, t) = P256.pointAdd s t + run_t (n1, s) = P256.pointMul n1 s + + xS = 0xde2444bebc8d36e682edd27e0f271508617519b3221a8fa0b77cab3989da97c9 + yS = 0xc093ae7ff36e5380fc01a5aad1e66659702de80f53cec576b6350b243042a256 + xT = 0x55a8b00f8da1d44e62f6b3b25316212e39540dc861c89575bb8cf92e35e0986b + yT = 0x5421c3209c2d6c704835d82ac4c3dd90f61a8a52598b9e7ab656e9d8c8b24316 + s = P256.pointFromIntegers (xS, yS) + t = P256.pointFromIntegers (xT, yT) + r1 = throwCryptoError $ P256.scalarFromInteger 7 + r2 = throwCryptoError $ P256.scalarFromInteger 11 + -- s = P256.pointMul r1 P256.pointBase + -- t = P256.pointMul r2 P256.pointBase + n1 = throwCryptoError $ P256.scalarFromInteger 0x2ba9daf2363b2819e69b34a39cf496c2458a9b2a21505ea9e7b7cbca42dc7435 + n2 = throwCryptoError $ P256.scalarFromInteger 0xf054a7f60d10b8c2cf847ee90e9e029f8b0e971b09ca5f55c4d49921a11fadc1 + + + benchFFDH = map doFFDHBench primes where doFFDHBench (e, p) = @@ -262,6 +294,7 @@ main = defaultMain , bgroup "pbkdf2" benchPBKDF2 , bgroup "bcrypt" benchBCrypt , bgroup "ECC" benchECC + , bgroup "P256" benchP256 , bgroup "DH" [ bgroup "FFDH" benchFFDH , bgroup "ECDH" benchECDH From d3a60abf2896a1a651a7396c0fa15d3e58823c49 Mon Sep 17 00:00:00 2001 From: root <287494524@qq.com> Date: Tue, 23 Jul 2019 10:57:33 +0800 Subject: [PATCH 2/3] warning remove --- benchs/Bench.hs | 25 ++++++++----------------- stack.yaml.lock | 12 ++++++++++++ 2 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 stack.yaml.lock diff --git a/benchs/Bench.hs b/benchs/Bench.hs index 268f991..7b96e57 100644 --- a/benchs/Bench.hs +++ b/benchs/Bench.hs @@ -30,7 +30,6 @@ import qualified Data.ByteString as B import qualified Crypto.PubKey.ECC.P256 as P256 -import Number.F2m data HashAlg = forall alg . HashAlgorithm alg => HashAlg alg @@ -208,34 +207,26 @@ benchECC = run_d (n, p) = ECC.pointMul c n p c = ECC.getCurveByName ECC.SEC_p256r1 - r1 = 7 - r2 = 11 - -- p1 = ECC.pointBaseMul c r1 - -- p2 = ECC.pointBaseMul c r2 p1 = ECC.pointBaseMul c n1 p2 = ECC.pointBaseMul c n2 n1 = 0x2ba9daf2363b2819e69b34a39cf496c2458a9b2a21505ea9e7b7cbca42dc7435 n2 = 0xf054a7f60d10b8c2cf847ee90e9e029f8b0e971b09ca5f55c4d49921a11fadc1 benchP256 = - [ bench "pointAddTwoMuls-P256" $ nf run_p (n1, s, n2, t) - , bench "pointAdd-P256" $ nf run_q (s, t) - , bench "pointMul-P256" $ nf run_t (n1, s) + [ bench "pointAddTwoMuls-P256" $ nf run_p (n1, p1, n2, p2) + , bench "pointAdd-P256" $ nf run_q (p1, p2) + , bench "pointMul-P256" $ nf run_t (n1, p1) ] - where run_p (n1, s, n2, t) = P256.pointAdd (P256.pointMul n1 s) (P256.pointMul n2 t) - run_q (s, t) = P256.pointAdd s t - run_t (n1, s) = P256.pointMul n1 s + where run_p (n, p, k, q) = P256.pointAdd (P256.pointMul n p) (P256.pointMul k q) + run_q (p, q) = P256.pointAdd p q + run_t (n, p) = P256.pointMul n p xS = 0xde2444bebc8d36e682edd27e0f271508617519b3221a8fa0b77cab3989da97c9 yS = 0xc093ae7ff36e5380fc01a5aad1e66659702de80f53cec576b6350b243042a256 xT = 0x55a8b00f8da1d44e62f6b3b25316212e39540dc861c89575bb8cf92e35e0986b yT = 0x5421c3209c2d6c704835d82ac4c3dd90f61a8a52598b9e7ab656e9d8c8b24316 - s = P256.pointFromIntegers (xS, yS) - t = P256.pointFromIntegers (xT, yT) - r1 = throwCryptoError $ P256.scalarFromInteger 7 - r2 = throwCryptoError $ P256.scalarFromInteger 11 - -- s = P256.pointMul r1 P256.pointBase - -- t = P256.pointMul r2 P256.pointBase + p1 = P256.pointFromIntegers (xS, yS) + p2 = P256.pointFromIntegers (xT, yT) n1 = throwCryptoError $ P256.scalarFromInteger 0x2ba9daf2363b2819e69b34a39cf496c2458a9b2a21505ea9e7b7cbca42dc7435 n2 = throwCryptoError $ P256.scalarFromInteger 0xf054a7f60d10b8c2cf847ee90e9e029f8b0e971b09ca5f55c4d49921a11fadc1 diff --git a/stack.yaml.lock b/stack.yaml.lock new file mode 100644 index 0000000..fcc2f5f --- /dev/null +++ b/stack.yaml.lock @@ -0,0 +1,12 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + size: 498180 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/21.yaml + sha256: eff2de19a6d4691ccbf6edc1fba858f1918683047dce0f09adede874bbd2a8f3 + original: lts-13.21 From a64a058153dbde831ad3b9f290108ac470295216 Mon Sep 17 00:00:00 2001 From: root <287494524@qq.com> Date: Tue, 23 Jul 2019 11:14:09 +0800 Subject: [PATCH 3/3] warning remove and benchF2m okay --- benchs/Bench.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/benchs/Bench.hs b/benchs/Bench.hs index 7b96e57..10c91d5 100644 --- a/benchs/Bench.hs +++ b/benchs/Bench.hs @@ -30,6 +30,7 @@ import qualified Data.ByteString as B import qualified Crypto.PubKey.ECC.P256 as P256 +import Number.F2m data HashAlg = forall alg . HashAlgorithm alg => HashAlg alg