adding Curve_P384R1.
This commit is contained in:
parent
9a0ec9166a
commit
dea0469c61
@ -11,6 +11,7 @@
|
|||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
module Crypto.ECC
|
module Crypto.ECC
|
||||||
( Curve_P256R1(..)
|
( Curve_P256R1(..)
|
||||||
|
, Curve_P384R1(..)
|
||||||
, Curve_P521R1(..)
|
, Curve_P521R1(..)
|
||||||
, EllipticCurve(..)
|
, EllipticCurve(..)
|
||||||
, EllipticCurveDH(..)
|
, EllipticCurveDH(..)
|
||||||
@ -110,6 +111,30 @@ instance EllipticCurveDH Curve_P256R1 where
|
|||||||
len = (256 + 7) `div` 8
|
len = (256 + 7) `div` 8
|
||||||
shared = SharedSecret $ i2ospOf_ len x
|
shared = SharedSecret $ i2ospOf_ len x
|
||||||
|
|
||||||
|
data Curve_P384R1 = Curve_P384R1
|
||||||
|
|
||||||
|
instance EllipticCurve Curve_P384R1 where
|
||||||
|
newtype Point Curve_P384R1 = P384Point { unP384Point :: H.Point }
|
||||||
|
newtype Scalar Curve_P384R1 = P384Scalar { unP384Scalar :: H.PrivateNumber }
|
||||||
|
curveGetOrder _ = H.ecc_n $ H.common_curve $ H.getCurveByName H.SEC_p384r1
|
||||||
|
curveGetBasePoint = P384Point $ H.ecc_g $ H.common_curve $ H.getCurveByName H.SEC_p384r1
|
||||||
|
curveOfScalar _ = Curve_P384R1
|
||||||
|
curveOfPoint _ = Curve_P384R1
|
||||||
|
curveGenerateScalar = P384Scalar <$> H.scalarGenerate (H.getCurveByName H.SEC_p384r1)
|
||||||
|
curveGenerateKeyPair = toKeyPair <$> H.scalarGenerate (H.getCurveByName H.SEC_p384r1)
|
||||||
|
where toKeyPair scalar = KeyPair (P384Point $ H.pointBaseMul (H.getCurveByName H.SEC_p384r1) scalar) (P384Scalar scalar)
|
||||||
|
|
||||||
|
instance EllipticCurveArith Curve_P384R1 where
|
||||||
|
pointAdd a b = P384Point $ (H.pointAdd (H.getCurveByName H.SEC_p384r1) `on` unP384Point) a b
|
||||||
|
pointSmul s p = P384Point (H.pointMul (H.getCurveByName H.SEC_p384r1) (unP384Scalar s) (unP384Point p))
|
||||||
|
|
||||||
|
instance EllipticCurveDH Curve_P384R1 where
|
||||||
|
ecdh s p = shared
|
||||||
|
where
|
||||||
|
H.Point x _ = unP384Point $ pointSmul s p
|
||||||
|
len = (384 + 7) `div` 8
|
||||||
|
shared = SharedSecret $ i2ospOf_ len x
|
||||||
|
|
||||||
data Curve_P521R1 = Curve_P521R1
|
data Curve_P521R1 = Curve_P521R1
|
||||||
|
|
||||||
instance EllipticCurve Curve_P521R1 where
|
instance EllipticCurve Curve_P521R1 where
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user