Crypto.ECC

crypton-1.0.1: Cryptography Primitives sink

License | BSD-style
Maintainer | Vincent Hanquez <vincent@snarc.org>
Stability | experimental
Portability | unknown
Safe Haskell | None
Language | Haskell2010

Crypto.ECC

Description

Elliptic Curve Cryptography

Synopsis

- data Curve_P256R1 = Curve_P256R1
- data Curve_P384R1 = Curve_P384R1
- data Curve_P521R1 = Curve_P521R1
- data Curve_X25519 = Curve_X25519
- data Curve_X448 = Curve_X448
- data Curve_Edwards25519 = Curve_Edwards25519
- class EllipticCurve curve where
  - type Point curve
  - type Scalar curve
  - curveGenerateScalar :: MonadRandom randomly => proxy curve -> randomly (Scalar curve)
  - curveGenerateKeyPair :: MonadRandom randomly => proxy curve -> randomly (KeyPair curve)
  - curveSizeBits :: proxy curve -> Int
  - encodePoint :: ByteArray bs => proxy curve -> Point curve -> bs
  - decodePoint :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Point curve)
- class EllipticCurve curve => EllipticCurveDH curve where
  - ecdhRaw :: proxy curve -> Scalar curve -> Point curve -> SharedSecret
  - ecdh :: proxy curve -> Scalar curve -> Point curve -> CryptoFailable SharedSecret
- class (EllipticCurve curve, Eq (Point curve)) => EllipticCurveArith curve where
  - pointAdd :: proxy curve -> Point curve -> Point curve -> Point curve
  - pointNegate :: proxy curve -> Point curve -> Point curve
  - pointSmul :: proxy curve -> Scalar curve -> Point curve -> Point curve
- class (EllipticCurveArith curve, Eq (Scalar curve)) => EllipticCurveBasepointArith curve where
  - curveOrderBits :: proxy curve -> Int
  - pointBaseSmul :: proxy curve -> Scalar curve -> Point curve
  - pointsSmulVarTime :: proxy curve -> Scalar curve -> Scalar curve -> Point curve -> Point curve
  - encodeScalar :: ByteArray bs => proxy curve -> Scalar curve -> bs
  - decodeScalar :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Scalar curve)
  - scalarToInteger :: proxy curve -> Scalar curve -> Integer
  - scalarFromInteger :: proxy curve -> Integer -> CryptoFailable (Scalar curve)
  - scalarAdd :: proxy curve -> Scalar curve -> Scalar curve -> Scalar curve
  - scalarMul :: proxy curve -> Scalar curve -> Scalar curve -> Scalar curve
- data KeyPair curve = KeyPair {
  - keypairGetPublic :: !(Point curve)
  - keypairGetPrivate :: !(Scalar curve)
  }
- newtype SharedSecret = SharedSecret ScrubbedBytes

# Documentation

data Curve_P256R1 #

P256 Curve

also known as P256

Constructors

Curve_P256R1 |

#### Instances

Instances details

EllipticCurve Curve_P256R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P256R1 |
Instance details Defined in Crypto.ECC type Point Curve_P256R1 = Point
type Scalar Curve_P256R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P256R1 = Scalar
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P256R1 -> randomly (Scalar Curve_P256R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P256R1 -> randomly (KeyPair Curve_P256R1) # curveSizeBits :: proxy Curve_P256R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P256R1 -> Point Curve_P256R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P256R1 -> bs -> CryptoFailable (Point Curve_P256R1) #
EllipticCurveArith Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # pointNegate :: proxy Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # pointSmul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 #
EllipticCurveBasepointArith Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P256R1 -> Int # pointBaseSmul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 # pointsSmulVarTime :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # encodeScalar :: ByteArray bs => proxy Curve_P256R1 -> Scalar Curve_P256R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P256R1 -> bs -> CryptoFailable (Scalar Curve_P256R1) # scalarToInteger :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Integer # scalarFromInteger :: proxy Curve_P256R1 -> Integer -> CryptoFailable (Scalar Curve_P256R1) # scalarAdd :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 # scalarMul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 #
EllipticCurveDH Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> SharedSecret # ecdh :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> CryptoFailable SharedSecret #
EllipticCurveECDSA Curve_P256R1 # |
Instance details Defined in Crypto.PubKey.ECDSA Methods scalarIsValid :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Bool # scalarIsZero :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Bool # scalarInv :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Maybe (Scalar Curve_P256R1) # pointX :: proxy Curve_P256R1 -> Point Curve_P256R1 -> Maybe (Scalar Curve_P256R1) #
Data Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_P256R1 -> c Curve_P256R1 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_P256R1 # toConstr :: Curve_P256R1 -> Constr # dataTypeOf :: Curve_P256R1 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_P256R1) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_P256R1) # gmapT :: (forall b. Data b => b -> b) -> Curve_P256R1 -> Curve_P256R1 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P256R1 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P256R1 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_P256R1 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_P256R1 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 #
Show Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_P256R1 -> ShowS # show :: Curve_P256R1 -> String # showList :: [Curve_P256R1] -> ShowS #
type Point Curve_P256R1 # |
Instance details Defined in Crypto.ECC type Point Curve_P256R1 = Point
type Scalar Curve_P256R1 # |
Instance details Defined in Crypto.ECC type Scalar Curve_P256R1 = Scalar

data Curve_P384R1 #

Constructors

Curve_P384R1 |

#### Instances

Instances details

EllipticCurve Curve_P384R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P384R1 |
Instance details Defined in Crypto.ECC type Point Curve_P384R1
type Scalar Curve_P384R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P384R1
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P384R1 -> randomly (Scalar Curve_P384R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P384R1 -> randomly (KeyPair Curve_P384R1) # curveSizeBits :: proxy Curve_P384R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P384R1 -> Point Curve_P384R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P384R1 -> bs -> CryptoFailable (Point Curve_P384R1) #
EllipticCurveArith Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # pointNegate :: proxy Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # pointSmul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 #
EllipticCurveBasepointArith Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P384R1 -> Int # pointBaseSmul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 # pointsSmulVarTime :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # encodeScalar :: ByteArray bs => proxy Curve_P384R1 -> Scalar Curve_P384R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P384R1 -> bs -> CryptoFailable (Scalar Curve_P384R1) # scalarToInteger :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Integer # scalarFromInteger :: proxy Curve_P384R1 -> Integer -> CryptoFailable (Scalar Curve_P384R1) # scalarAdd :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 # scalarMul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 #
EllipticCurveDH Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> SharedSecret # ecdh :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> CryptoFailable SharedSecret #
EllipticCurveECDSA Curve_P384R1 # |
Instance details Defined in Crypto.PubKey.ECDSA Methods scalarIsValid :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Bool # scalarIsZero :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Bool # scalarInv :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Maybe (Scalar Curve_P384R1) # pointX :: proxy Curve_P384R1 -> Point Curve_P384R1 -> Maybe (Scalar Curve_P384R1) #
Data Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_P384R1 -> c Curve_P384R1 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_P384R1 # toConstr :: Curve_P384R1 -> Constr # dataTypeOf :: Curve_P384R1 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_P384R1) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_P384R1) # gmapT :: (forall b. Data b => b -> b) -> Curve_P384R1 -> Curve_P384R1 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P384R1 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P384R1 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_P384R1 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_P384R1 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 #
Show Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_P384R1 -> ShowS # show :: Curve_P384R1 -> String # showList :: [Curve_P384R1] -> ShowS #
type Point Curve_P384R1 # |
Instance details Defined in Crypto.ECC type Point Curve_P384R1
type Scalar Curve_P384R1 # |
Instance details Defined in Crypto.ECC type Scalar Curve_P384R1

data Curve_P521R1 #

Constructors

Curve_P521R1 |

#### Instances

Instances details

EllipticCurve Curve_P521R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P521R1 |
Instance details Defined in Crypto.ECC type Point Curve_P521R1
type Scalar Curve_P521R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P521R1
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P521R1 -> randomly (Scalar Curve_P521R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P521R1 -> randomly (KeyPair Curve_P521R1) # curveSizeBits :: proxy Curve_P521R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P521R1 -> Point Curve_P521R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P521R1 -> bs -> CryptoFailable (Point Curve_P521R1) #
EllipticCurveArith Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # pointNegate :: proxy Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # pointSmul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 #
EllipticCurveBasepointArith Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P521R1 -> Int # pointBaseSmul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 # pointsSmulVarTime :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # encodeScalar :: ByteArray bs => proxy Curve_P521R1 -> Scalar Curve_P521R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P521R1 -> bs -> CryptoFailable (Scalar Curve_P521R1) # scalarToInteger :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Integer # scalarFromInteger :: proxy Curve_P521R1 -> Integer -> CryptoFailable (Scalar Curve_P521R1) # scalarAdd :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 # scalarMul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 #
EllipticCurveDH Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> SharedSecret # ecdh :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> CryptoFailable SharedSecret #
EllipticCurveECDSA Curve_P521R1 # |
Instance details Defined in Crypto.PubKey.ECDSA Methods scalarIsValid :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Bool # scalarIsZero :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Bool # scalarInv :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Maybe (Scalar Curve_P521R1) # pointX :: proxy Curve_P521R1 -> Point Curve_P521R1 -> Maybe (Scalar Curve_P521R1) #
Data Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_P521R1 -> c Curve_P521R1 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_P521R1 # toConstr :: Curve_P521R1 -> Constr # dataTypeOf :: Curve_P521R1 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_P521R1) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_P521R1) # gmapT :: (forall b. Data b => b -> b) -> Curve_P521R1 -> Curve_P521R1 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P521R1 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_P521R1 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_P521R1 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_P521R1 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 #
Show Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_P521R1 -> ShowS # show :: Curve_P521R1 -> String # showList :: [Curve_P521R1] -> ShowS #
type Point Curve_P521R1 # |
Instance details Defined in Crypto.ECC type Point Curve_P521R1
type Scalar Curve_P521R1 # |
Instance details Defined in Crypto.ECC type Scalar Curve_P521R1

data Curve_X25519 #

Constructors

Curve_X25519 |

#### Instances

Instances details

EllipticCurve Curve_X25519 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_X25519 |
Instance details Defined in Crypto.ECC type Point Curve_X25519 = PublicKey
type Scalar Curve_X25519 |
Instance details Defined in Crypto.ECC type Scalar Curve_X25519 = SecretKey
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_X25519 -> randomly (Scalar Curve_X25519) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_X25519 -> randomly (KeyPair Curve_X25519) # curveSizeBits :: proxy Curve_X25519 -> Int # encodePoint :: ByteArray bs => proxy Curve_X25519 -> Point Curve_X25519 -> bs # decodePoint :: ByteArray bs => proxy Curve_X25519 -> bs -> CryptoFailable (Point Curve_X25519) #
EllipticCurveDH Curve_X25519 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_X25519 -> Scalar Curve_X25519 -> Point Curve_X25519 -> SharedSecret # ecdh :: proxy Curve_X25519 -> Scalar Curve_X25519 -> Point Curve_X25519 -> CryptoFailable SharedSecret #
Data Curve_X25519 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_X25519 -> c Curve_X25519 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_X25519 # toConstr :: Curve_X25519 -> Constr # dataTypeOf :: Curve_X25519 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_X25519) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_X25519) # gmapT :: (forall b. Data b => b -> b) -> Curve_X25519 -> Curve_X25519 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_X25519 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_X25519 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_X25519 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_X25519 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 #
Show Curve_X25519 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_X25519 -> ShowS # show :: Curve_X25519 -> String # showList :: [Curve_X25519] -> ShowS #
type Point Curve_X25519 # |
Instance details Defined in Crypto.ECC type Point Curve_X25519 = PublicKey
type Scalar Curve_X25519 # |
Instance details Defined in Crypto.ECC type Scalar Curve_X25519 = SecretKey

data Curve_X448 #

Constructors

Curve_X448 |

#### Instances

Instances details

EllipticCurve Curve_X448 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_X448 |
Instance details Defined in Crypto.ECC type Point Curve_X448 = PublicKey
type Scalar Curve_X448 |
Instance details Defined in Crypto.ECC type Scalar Curve_X448 = SecretKey
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_X448 -> randomly (Scalar Curve_X448) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_X448 -> randomly (KeyPair Curve_X448) # curveSizeBits :: proxy Curve_X448 -> Int # encodePoint :: ByteArray bs => proxy Curve_X448 -> Point Curve_X448 -> bs # decodePoint :: ByteArray bs => proxy Curve_X448 -> bs -> CryptoFailable (Point Curve_X448) #
EllipticCurveDH Curve_X448 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_X448 -> Scalar Curve_X448 -> Point Curve_X448 -> SharedSecret # ecdh :: proxy Curve_X448 -> Scalar Curve_X448 -> Point Curve_X448 -> CryptoFailable SharedSecret #
Data Curve_X448 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_X448 -> c Curve_X448 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_X448 # toConstr :: Curve_X448 -> Constr # dataTypeOf :: Curve_X448 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_X448) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_X448) # gmapT :: (forall b. Data b => b -> b) -> Curve_X448 -> Curve_X448 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_X448 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_X448 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_X448 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_X448 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 #
Show Curve_X448 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_X448 -> ShowS # show :: Curve_X448 -> String # showList :: [Curve_X448] -> ShowS #
type Point Curve_X448 # |
Instance details Defined in Crypto.ECC type Point Curve_X448 = PublicKey
type Scalar Curve_X448 # |
Instance details Defined in Crypto.ECC type Scalar Curve_X448 = SecretKey

data Curve_Edwards25519 #

Constructors

Curve_Edwards25519 |

#### Instances

Instances details

EllipticCurve Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_Edwards25519 |
Instance details Defined in Crypto.ECC type Point Curve_Edwards25519 = Point
type Scalar Curve_Edwards25519 |
Instance details Defined in Crypto.ECC type Scalar Curve_Edwards25519 = Scalar
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_Edwards25519 -> randomly (Scalar Curve_Edwards25519) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_Edwards25519 -> randomly (KeyPair Curve_Edwards25519) # curveSizeBits :: proxy Curve_Edwards25519 -> Int # encodePoint :: ByteArray bs => proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> bs # decodePoint :: ByteArray bs => proxy Curve_Edwards25519 -> bs -> CryptoFailable (Point Curve_Edwards25519) #
EllipticCurveArith Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # pointNegate :: proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # pointSmul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 #
EllipticCurveBasepointArith Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_Edwards25519 -> Int # pointBaseSmul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 # pointsSmulVarTime :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # encodeScalar :: ByteArray bs => proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> bs # decodeScalar :: ByteArray bs => proxy Curve_Edwards25519 -> bs -> CryptoFailable (Scalar Curve_Edwards25519) # scalarToInteger :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Integer # scalarFromInteger :: proxy Curve_Edwards25519 -> Integer -> CryptoFailable (Scalar Curve_Edwards25519) # scalarAdd :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 # scalarMul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 #
EllipticCurveEdDSA Curve_Edwards25519 # |
Instance details Defined in Crypto.PubKey.EdDSA Associated Types
type CurveDigestSize Curve_Edwards25519 |
Instance details Defined in Crypto.PubKey.EdDSA type CurveDigestSize Curve_Edwards25519 = 64
Methods secretKeySize :: proxy Curve_Edwards25519 -> Int # hashWithDom :: (HashAlgorithm hash, ByteArrayAccess ctx, ByteArrayAccess msg) => proxy Curve_Edwards25519 -> hash -> Bool -> ctx -> Builder -> msg -> Bytes pointPublic :: proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> PublicKey Curve_Edwards25519 hash publicPoint :: proxy Curve_Edwards25519 -> PublicKey Curve_Edwards25519 hash -> CryptoFailable (Point Curve_Edwards25519) encodeScalarLE :: ByteArray bs => proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> bs decodeScalarLE :: ByteArrayAccess bs => proxy Curve_Edwards25519 -> bs -> CryptoFailable (Scalar Curve_Edwards25519) scheduleSecret :: (HashAlgorithm hash, HashDigestSize hash ~ CurveDigestSize Curve_Edwards25519) => proxy Curve_Edwards25519 -> hash -> SecretKey Curve_Edwards25519 -> (Scalar Curve_Edwards25519, View Bytes)
Data Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve_Edwards25519 -> c Curve_Edwards25519 # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve_Edwards25519 # toConstr :: Curve_Edwards25519 -> Constr # dataTypeOf :: Curve_Edwards25519 -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Curve_Edwards25519) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve_Edwards25519) # gmapT :: (forall b. Data b => b -> b) -> Curve_Edwards25519 -> Curve_Edwards25519 # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve_Edwards25519 -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve_Edwards25519 -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve_Edwards25519 -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve_Edwards25519 -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 #
Show Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods showsPrec :: Int -> Curve_Edwards25519 -> ShowS # show :: Curve_Edwards25519 -> String # showList :: [Curve_Edwards25519] -> ShowS #
type Point Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC type Point Curve_Edwards25519 = Point
type Scalar Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC type Scalar Curve_Edwards25519 = Scalar
type CurveDigestSize Curve_Edwards25519 # |
Instance details Defined in Crypto.PubKey.EdDSA type CurveDigestSize Curve_Edwards25519 = 64

class EllipticCurve curve where #

Associated Types

type Point curve #

Point on an Elliptic Curve

type Scalar curve #

Scalar in the Elliptic Curve domain

Methods

curveGenerateScalar :: MonadRandom randomly => proxy curve -> randomly (Scalar curve) #

Generate a new random scalar on the curve. The scalar will represent a number between 1 and the order of the curve non included

curveGenerateKeyPair :: MonadRandom randomly => proxy curve -> randomly (KeyPair curve) #

Generate a new random keypair

curveSizeBits :: proxy curve -> Int #

Get the curve size in bits

encodePoint :: ByteArray bs => proxy curve -> Point curve -> bs #

Encode a elliptic curve point into binary form

decodePoint :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Point curve) #

Try to decode the binary form of an elliptic curve point

#### Instances

Instances details

EllipticCurve Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_Edwards25519 |
Instance details Defined in Crypto.ECC type Point Curve_Edwards25519 = Point
type Scalar Curve_Edwards25519 |
Instance details Defined in Crypto.ECC type Scalar Curve_Edwards25519 = Scalar
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_Edwards25519 -> randomly (Scalar Curve_Edwards25519) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_Edwards25519 -> randomly (KeyPair Curve_Edwards25519) # curveSizeBits :: proxy Curve_Edwards25519 -> Int # encodePoint :: ByteArray bs => proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> bs # decodePoint :: ByteArray bs => proxy Curve_Edwards25519 -> bs -> CryptoFailable (Point Curve_Edwards25519) #
EllipticCurve Curve_P256R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P256R1 |
Instance details Defined in Crypto.ECC type Point Curve_P256R1 = Point
type Scalar Curve_P256R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P256R1 = Scalar
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P256R1 -> randomly (Scalar Curve_P256R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P256R1 -> randomly (KeyPair Curve_P256R1) # curveSizeBits :: proxy Curve_P256R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P256R1 -> Point Curve_P256R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P256R1 -> bs -> CryptoFailable (Point Curve_P256R1) #
EllipticCurve Curve_P384R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P384R1 |
Instance details Defined in Crypto.ECC type Point Curve_P384R1
type Scalar Curve_P384R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P384R1
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P384R1 -> randomly (Scalar Curve_P384R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P384R1 -> randomly (KeyPair Curve_P384R1) # curveSizeBits :: proxy Curve_P384R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P384R1 -> Point Curve_P384R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P384R1 -> bs -> CryptoFailable (Point Curve_P384R1) #
EllipticCurve Curve_P521R1 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_P521R1 |
Instance details Defined in Crypto.ECC type Point Curve_P521R1
type Scalar Curve_P521R1 |
Instance details Defined in Crypto.ECC type Scalar Curve_P521R1
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_P521R1 -> randomly (Scalar Curve_P521R1) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_P521R1 -> randomly (KeyPair Curve_P521R1) # curveSizeBits :: proxy Curve_P521R1 -> Int # encodePoint :: ByteArray bs => proxy Curve_P521R1 -> Point Curve_P521R1 -> bs # decodePoint :: ByteArray bs => proxy Curve_P521R1 -> bs -> CryptoFailable (Point Curve_P521R1) #
EllipticCurve Curve_X25519 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_X25519 |
Instance details Defined in Crypto.ECC type Point Curve_X25519 = PublicKey
type Scalar Curve_X25519 |
Instance details Defined in Crypto.ECC type Scalar Curve_X25519 = SecretKey
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_X25519 -> randomly (Scalar Curve_X25519) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_X25519 -> randomly (KeyPair Curve_X25519) # curveSizeBits :: proxy Curve_X25519 -> Int # encodePoint :: ByteArray bs => proxy Curve_X25519 -> Point Curve_X25519 -> bs # decodePoint :: ByteArray bs => proxy Curve_X25519 -> bs -> CryptoFailable (Point Curve_X25519) #
EllipticCurve Curve_X448 # |
Instance details Defined in Crypto.ECC Associated Types
type Point Curve_X448 |
Instance details Defined in Crypto.ECC type Point Curve_X448 = PublicKey
type Scalar Curve_X448 |
Instance details Defined in Crypto.ECC type Scalar Curve_X448 = SecretKey
Methods curveGenerateScalar :: MonadRandom randomly => proxy Curve_X448 -> randomly (Scalar Curve_X448) # curveGenerateKeyPair :: MonadRandom randomly => proxy Curve_X448 -> randomly (KeyPair Curve_X448) # curveSizeBits :: proxy Curve_X448 -> Int # encodePoint :: ByteArray bs => proxy Curve_X448 -> Point Curve_X448 -> bs # decodePoint :: ByteArray bs => proxy Curve_X448 -> bs -> CryptoFailable (Point Curve_X448) #

class EllipticCurve curve => EllipticCurveDH curve where #

Minimal complete definition

ecdh

Methods

ecdhRaw :: proxy curve -> Scalar curve -> Point curve -> SharedSecret #

Generate a Diffie hellman secret value.

This is generally just the .x coordinate of the resulting point, that is not hashed.

use `pointSmul` to keep the result in Point format.

WARNING: Curve implementations may return a special value or an exception when the public point lies in a subgroup of small order. This function is adequate when the scalar is in expected range and contributory behaviour is not needed. Otherwise use `ecdh`.

ecdh :: proxy curve -> Scalar curve -> Point curve -> CryptoFailable SharedSecret #

Generate a Diffie hellman secret value and verify that the result is not the point at infinity.

This additional test avoids risks existing with function `ecdhRaw`. Implementations always return a `CryptoError` instead of a special value or an exception.

#### Instances

Instances details

EllipticCurveDH Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> SharedSecret # ecdh :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> CryptoFailable SharedSecret #
EllipticCurveDH Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> SharedSecret # ecdh :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> CryptoFailable SharedSecret #
EllipticCurveDH Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> SharedSecret # ecdh :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> CryptoFailable SharedSecret #
EllipticCurveDH Curve_X25519 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_X25519 -> Scalar Curve_X25519 -> Point Curve_X25519 -> SharedSecret # ecdh :: proxy Curve_X25519 -> Scalar Curve_X25519 -> Point Curve_X25519 -> CryptoFailable SharedSecret #
EllipticCurveDH Curve_X448 # |
Instance details Defined in Crypto.ECC Methods ecdhRaw :: proxy Curve_X448 -> Scalar Curve_X448 -> Point Curve_X448 -> SharedSecret # ecdh :: proxy Curve_X448 -> Scalar Curve_X448 -> Point Curve_X448 -> CryptoFailable SharedSecret #

class (EllipticCurve curve, Eq (Point curve)) => EllipticCurveArith curve where #

Methods

pointAdd :: proxy curve -> Point curve -> Point curve -> Point curve #

Add points on a curve

pointNegate :: proxy curve -> Point curve -> Point curve #

Negate a curve point

pointSmul :: proxy curve -> Scalar curve -> Point curve -> Point curve #

Scalar Multiplication on a curve

#### Instances

Instances details

EllipticCurveArith Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # pointNegate :: proxy Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # pointSmul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 #
EllipticCurveArith Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # pointNegate :: proxy Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # pointSmul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 #
EllipticCurveArith Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # pointNegate :: proxy Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # pointSmul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 #
EllipticCurveArith Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods pointAdd :: proxy Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # pointNegate :: proxy Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # pointSmul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 #

class (EllipticCurveArith curve, Eq (Scalar curve)) => EllipticCurveBasepointArith curve where #

Minimal complete definition

curveOrderBits, pointBaseSmul, encodeScalar, decodeScalar, scalarToInteger, scalarFromInteger, scalarAdd, scalarMul

Methods

curveOrderBits :: proxy curve -> Int #

Get the curve order size in bits

pointBaseSmul :: proxy curve -> Scalar curve -> Point curve #

Multiply a scalar with the curve base point

pointsSmulVarTime :: proxy curve -> Scalar curve -> Scalar curve -> Point curve -> Point curve #

Multiply the point `p` with `s2` and add a lifted to curve value `s1`

encodeScalar :: ByteArray bs => proxy curve -> Scalar curve -> bs #

Encode an elliptic curve scalar into big-endian form

decodeScalar :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Scalar curve) #

Try to decode the big-endian form of an elliptic curve scalar

scalarToInteger :: proxy curve -> Scalar curve -> Integer #

Convert an elliptic curve scalar to an integer

scalarFromInteger :: proxy curve -> Integer -> CryptoFailable (Scalar curve) #

Try to create an elliptic curve scalar from an integer

scalarAdd :: proxy curve -> Scalar curve -> Scalar curve -> Scalar curve #

Add two scalars and reduce modulo the curve order

scalarMul :: proxy curve -> Scalar curve -> Scalar curve -> Scalar curve #

Multiply two scalars and reduce modulo the curve order

#### Instances

Instances details

EllipticCurveBasepointArith Curve_Edwards25519 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_Edwards25519 -> Int # pointBaseSmul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 # pointsSmulVarTime :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Point Curve_Edwards25519 -> Point Curve_Edwards25519 # encodeScalar :: ByteArray bs => proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> bs # decodeScalar :: ByteArray bs => proxy Curve_Edwards25519 -> bs -> CryptoFailable (Scalar Curve_Edwards25519) # scalarToInteger :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Integer # scalarFromInteger :: proxy Curve_Edwards25519 -> Integer -> CryptoFailable (Scalar Curve_Edwards25519) # scalarAdd :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 # scalarMul :: proxy Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 -> Scalar Curve_Edwards25519 #
EllipticCurveBasepointArith Curve_P256R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P256R1 -> Int # pointBaseSmul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 # pointsSmulVarTime :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Point Curve_P256R1 -> Point Curve_P256R1 # encodeScalar :: ByteArray bs => proxy Curve_P256R1 -> Scalar Curve_P256R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P256R1 -> bs -> CryptoFailable (Scalar Curve_P256R1) # scalarToInteger :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Integer # scalarFromInteger :: proxy Curve_P256R1 -> Integer -> CryptoFailable (Scalar Curve_P256R1) # scalarAdd :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 # scalarMul :: proxy Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 -> Scalar Curve_P256R1 #
EllipticCurveBasepointArith Curve_P384R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P384R1 -> Int # pointBaseSmul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 # pointsSmulVarTime :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Point Curve_P384R1 -> Point Curve_P384R1 # encodeScalar :: ByteArray bs => proxy Curve_P384R1 -> Scalar Curve_P384R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P384R1 -> bs -> CryptoFailable (Scalar Curve_P384R1) # scalarToInteger :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Integer # scalarFromInteger :: proxy Curve_P384R1 -> Integer -> CryptoFailable (Scalar Curve_P384R1) # scalarAdd :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 # scalarMul :: proxy Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 -> Scalar Curve_P384R1 #
EllipticCurveBasepointArith Curve_P521R1 # |
Instance details Defined in Crypto.ECC Methods curveOrderBits :: proxy Curve_P521R1 -> Int # pointBaseSmul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 # pointsSmulVarTime :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Point Curve_P521R1 -> Point Curve_P521R1 # encodeScalar :: ByteArray bs => proxy Curve_P521R1 -> Scalar Curve_P521R1 -> bs # decodeScalar :: ByteArray bs => proxy Curve_P521R1 -> bs -> CryptoFailable (Scalar Curve_P521R1) # scalarToInteger :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Integer # scalarFromInteger :: proxy Curve_P521R1 -> Integer -> CryptoFailable (Scalar Curve_P521R1) # scalarAdd :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 # scalarMul :: proxy Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 -> Scalar Curve_P521R1 #

data KeyPair curve #

An elliptic curve key pair composed of the private part (a scalar), and the associated point.

Constructors

KeyPair |
Fields keypairGetPublic :: !(Point curve) keypairGetPrivate :: !(Scalar curve)

newtype SharedSecret #

Constructors

SharedSecret ScrubbedBytes |

#### Instances

Instances details

NFData SharedSecret # |
Instance details Defined in Crypto.ECC Methods rnf :: SharedSecret -> () #
Eq SharedSecret # |
Instance details Defined in Crypto.ECC Methods (==) :: SharedSecret -> SharedSecret -> Bool # (/=) :: SharedSecret -> SharedSecret -> Bool #
ByteArrayAccess SharedSecret # |
Instance details Defined in Crypto.ECC Methods length :: SharedSecret -> Int # withByteArray :: SharedSecret -> (Ptr p -> IO a) -> IO a # copyByteArrayToPtr :: SharedSecret -> Ptr p -> IO () #