Derive Show,Data,Typeable when defining curve singletons

This commit is contained in:
Olivier Chéron 2017-06-10 09:22:27 +02:00
parent 5c2988716e
commit e71d9b135c

View File

@ -7,6 +7,7 @@
-- --
-- Elliptic Curve Cryptography -- Elliptic Curve Cryptography
-- --
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE ScopedTypeVariables #-}
@ -37,6 +38,8 @@ import qualified Crypto.PubKey.Curve25519 as X25519
import qualified Crypto.PubKey.Curve448 as X448 import qualified Crypto.PubKey.Curve448 as X448
import Data.Function (on) import Data.Function (on)
import Data.ByteArray (convert) import Data.ByteArray (convert)
import Data.Data (Data())
import Data.Typeable (Typeable())
-- | An elliptic curve key pair composed of the private part (a scalar), and -- | An elliptic curve key pair composed of the private part (a scalar), and
-- the associated point. -- the associated point.
@ -94,6 +97,7 @@ class EllipticCurve curve => EllipticCurveArith curve where
-- --
-- also known as P256 -- also known as P256
data Curve_P256R1 = Curve_P256R1 data Curve_P256R1 = Curve_P256R1
deriving (Show,Data,Typeable)
instance EllipticCurve Curve_P256R1 where instance EllipticCurve Curve_P256R1 where
type Point Curve_P256R1 = P256.Point type Point Curve_P256R1 = P256.Point
@ -125,6 +129,7 @@ instance EllipticCurveDH Curve_P256R1 where
ecdh _ s p = SharedSecret $ P256.pointDh s p ecdh _ s p = SharedSecret $ P256.pointDh s p
data Curve_P384R1 = Curve_P384R1 data Curve_P384R1 = Curve_P384R1
deriving (Show,Data,Typeable)
instance EllipticCurve Curve_P384R1 where instance EllipticCurve Curve_P384R1 where
type Point Curve_P384R1 = Simple.Point Simple.SEC_p384r1 type Point Curve_P384R1 = Simple.Point Simple.SEC_p384r1
@ -147,6 +152,7 @@ instance EllipticCurveDH Curve_P384R1 where
Simple.Point x _ = pointSmul prx s p Simple.Point x _ = pointSmul prx s p
data Curve_P521R1 = Curve_P521R1 data Curve_P521R1 = Curve_P521R1
deriving (Show,Data,Typeable)
instance EllipticCurve Curve_P521R1 where instance EllipticCurve Curve_P521R1 where
type Point Curve_P521R1 = Simple.Point Simple.SEC_p521r1 type Point Curve_P521R1 = Simple.Point Simple.SEC_p521r1
@ -169,6 +175,7 @@ instance EllipticCurveDH Curve_P521R1 where
Simple.Point x _ = pointSmul prx s p Simple.Point x _ = pointSmul prx s p
data Curve_X25519 = Curve_X25519 data Curve_X25519 = Curve_X25519
deriving (Show,Data,Typeable)
instance EllipticCurve Curve_X25519 where instance EllipticCurve Curve_X25519 where
type Point Curve_X25519 = X25519.PublicKey type Point Curve_X25519 = X25519.PublicKey
@ -186,6 +193,7 @@ instance EllipticCurveDH Curve_X25519 where
where secret = X25519.dh p s where secret = X25519.dh p s
data Curve_X448 = Curve_X448 data Curve_X448 = Curve_X448
deriving (Show,Data,Typeable)
instance EllipticCurve Curve_X448 where instance EllipticCurve Curve_X448 where
type Point Curve_X448 = X448.PublicKey type Point Curve_X448 = X448.PublicKey