cacophony-0.2.0: src/Crypto/Noise/Curve.hs
{-# LANGUAGE TypeFamilies #-}
----------------------------------------------------------------
-- |
-- Module : Crypto.Noise.Curve
-- Maintainer : John Galt <jgalt@centromere.net>
-- Stability : experimental
-- Portability : POSIX
module Crypto.Noise.Curve
( -- * Classes
Curve(..),
-- * Types
KeyPair
) where
import Data.ByteArray (ScrubbedBytes)
-- | Typeclass for EC curves.
class Curve c where
-- | Represents a public key.
data PublicKey c :: *
-- | Represents a secret key.
data SecretKey c :: *
-- | Returns the name of the curve. This is used when generating
-- the handshake name.
curveName :: proxy c -> ScrubbedBytes
-- | Returns the length of public keys for this Curve in bytes.
curveLength :: proxy c -> Int
-- | Generates a KeyPair.
curveGenKey :: IO (KeyPair c)
-- | Performs ECDH.
curveDH :: SecretKey c -> PublicKey c -> ScrubbedBytes
-- | Exports a PublicKey.
curvePubToBytes :: PublicKey c -> ScrubbedBytes
-- | Imports a PublicKey.
curveBytesToPub :: ScrubbedBytes -> PublicKey c
-- | Exports a SecretKey.
curveSecToBytes :: SecretKey c -> ScrubbedBytes
-- | Imports a SecretKey.
curveBytesToPair :: ScrubbedBytes -> KeyPair c
-- | Represents a private/public EC keypair for a given Curve.
type KeyPair c = (SecretKey c, PublicKey c)