cryptonite-0.27: 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

Documentation

data Curve_P256R1 Source #

P256 Curve

also known as P256

Constructors

Curve_P256R1

Instances

Instances details
Data Curve_P256R1 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_P256R1 Source #

toConstr :: Curve_P256R1 -> Constr Source #

dataTypeOf :: Curve_P256R1 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_P256R1 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_P256R1 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_P256R1 -> Curve_P256R1 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P256R1 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P256R1 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_P256R1 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_P256R1 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P256R1 -> m Curve_P256R1 Source #

Show Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveDH Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveECDSA Curve_P256R1 Source #
Instance details

Defined in Crypto.PubKey.ECDSA

type Point Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

data Curve_P384R1 Source #

Constructors

Curve_P384R1

Instances

Instances details
Data Curve_P384R1 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_P384R1 Source #

toConstr :: Curve_P384R1 -> Constr Source #

dataTypeOf :: Curve_P384R1 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_P384R1 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_P384R1 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_P384R1 -> Curve_P384R1 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P384R1 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P384R1 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_P384R1 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_P384R1 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P384R1 -> m Curve_P384R1 Source #

Show Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveDH Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveECDSA Curve_P384R1 Source #
Instance details

Defined in Crypto.PubKey.ECDSA

type Point Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

data Curve_P521R1 Source #

Constructors

Curve_P521R1

Instances

Instances details
Data Curve_P521R1 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_P521R1 Source #

toConstr :: Curve_P521R1 -> Constr Source #

dataTypeOf :: Curve_P521R1 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_P521R1 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_P521R1 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_P521R1 -> Curve_P521R1 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P521R1 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_P521R1 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_P521R1 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_P521R1 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_P521R1 -> m Curve_P521R1 Source #

Show Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveDH Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveECDSA Curve_P521R1 Source #
Instance details

Defined in Crypto.PubKey.ECDSA

type Point Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

data Curve_X25519 Source #

Constructors

Curve_X25519

Instances

Instances details
Data Curve_X25519 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_X25519 Source #

toConstr :: Curve_X25519 -> Constr Source #

dataTypeOf :: Curve_X25519 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_X25519 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_X25519 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_X25519 -> Curve_X25519 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_X25519 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_X25519 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_X25519 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_X25519 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_X25519 -> m Curve_X25519 Source #

Show Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveDH Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

type Point Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

data Curve_X448 Source #

Constructors

Curve_X448

Instances

Instances details
Data Curve_X448 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_X448 Source #

toConstr :: Curve_X448 -> Constr Source #

dataTypeOf :: Curve_X448 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_X448 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_X448 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_X448 -> Curve_X448 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_X448 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_X448 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_X448 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_X448 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_X448 -> m Curve_X448 Source #

Show Curve_X448 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveDH Curve_X448 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_X448 Source #
Instance details

Defined in Crypto.ECC

type Point Curve_X448 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_X448 Source #
Instance details

Defined in Crypto.ECC

data Curve_Edwards25519 Source #

Instances

Instances details
Data Curve_Edwards25519 Source #
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 Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c Curve_Edwards25519 Source #

toConstr :: Curve_Edwards25519 -> Constr Source #

dataTypeOf :: Curve_Edwards25519 -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c Curve_Edwards25519 ) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c Curve_Edwards25519 ) Source #

gmapT :: ( forall b. Data b => b -> b) -> Curve_Edwards25519 -> Curve_Edwards25519 Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_Edwards25519 -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Curve_Edwards25519 -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Curve_Edwards25519 -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Curve_Edwards25519 -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Curve_Edwards25519 -> m Curve_Edwards25519 Source #

Show Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

type Point Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

type Scalar Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

class EllipticCurve curve where Source #

Associated Types

type Point curve :: Type Source #

Point on an Elliptic Curve

type Scalar curve :: Type Source #

Scalar in the Elliptic Curve domain

Methods

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

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) Source #

Generate a new random keypair

curveSizeBits :: proxy curve -> Int Source #

Get the curve size in bits

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

Encode a elliptic curve point into binary form

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

Try to decode the binary form of an elliptic curve point

Instances

Instances details
EllipticCurve Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_X448 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_X25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurve Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

class EllipticCurve curve => EllipticCurveDH curve where Source #

Minimal complete definition

ecdh

Methods

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

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 Source #

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.

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

Methods

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

Add points on a curve

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

Negate a curve point

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

Scalar Multiplication on a curve

Instances

Instances details
EllipticCurveArith Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveArith Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

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

Methods

curveOrderBits :: proxy curve -> Int Source #

Get the curve order size in bits

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

Multiply a scalar with the curve base point

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

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

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

Encode an elliptic curve scalar into big-endian form

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

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

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

Convert an elliptic curve scalar to an integer

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

Try to create an elliptic curve scalar from an integer

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

Add two scalars and reduce modulo the curve order

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

Multiply two scalars and reduce modulo the curve order

Instances

Instances details
EllipticCurveBasepointArith Curve_Edwards25519 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P521R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P384R1 Source #
Instance details

Defined in Crypto.ECC

EllipticCurveBasepointArith Curve_P256R1 Source #
Instance details

Defined in Crypto.ECC

data KeyPair curve Source #

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

Constructors

KeyPair