crypton-2.2.5: Cryptography Primitives
Safe HaskellNone
LanguageHaskell2010

Crypto.PubKey.ECC.ECDSA

Description

WARNING: Signature operations may leak the private key. The nonce is inverted without a side channel on every curve, and on P-256 the scalar multiplication is the constant-time C implementation, but what surrounds them is Integer arithmetic, whose cost follows the values it is given, and on every other curve the multiplication follows the nonce as well. Signature verification takes only public values and should be safe.

Synopsis

Documentation

data Signature Source #

Represent a ECDSA signature namely R and S.

Constructors

Signature 

Fields

Instances

Instances details
Data Signature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Signature -> c Signature #

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

toConstr :: Signature -> Constr #

dataTypeOf :: Signature -> DataType #

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

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

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

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

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

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

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

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

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

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

Read Signature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Show Signature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Eq Signature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

data ExtendedSignature Source #

ECDSA signature with public key recovery information.

Constructors

ExtendedSignature 

Fields

Instances

Instances details
Data ExtendedSignature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ExtendedSignature -> c ExtendedSignature #

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

toConstr :: ExtendedSignature -> Constr #

dataTypeOf :: ExtendedSignature -> DataType #

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

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

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

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

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

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

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

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

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

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

Read ExtendedSignature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Show ExtendedSignature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Eq ExtendedSignature Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

type PublicPoint = Point Source #

ECC Public Point

data PublicKey Source #

ECDSA Public Key.

Constructors

PublicKey 

Instances

Instances details
Data PublicKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PublicKey -> c PublicKey #

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

toConstr :: PublicKey -> Constr #

dataTypeOf :: PublicKey -> DataType #

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

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

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

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

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

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

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

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

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

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

Read PublicKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Show PublicKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Eq PublicKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

type PrivateNumber = Integer Source #

ECC Private Number

data PrivateKey Source #

ECDSA Private Key.

Instances

Instances details
Data PrivateKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PrivateKey -> c PrivateKey #

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

toConstr :: PrivateKey -> Constr #

dataTypeOf :: PrivateKey -> DataType #

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

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

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

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

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

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

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

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

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

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

Read PrivateKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Show PrivateKey Source #

The curve is shown; private_d is not. Use debugShow to see it.

Instance details

Defined in Crypto.PubKey.ECC.ECDSA

DebugShow PrivateKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Eq PrivateKey Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

data KeyPair Source #

ECDSA Key Pair.

Instances

Instances details
Data KeyPair Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> KeyPair -> c KeyPair #

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

toConstr :: KeyPair -> Constr #

dataTypeOf :: KeyPair -> DataType #

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

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

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

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

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

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

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

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

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

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

Read KeyPair Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Show KeyPair Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

DebugShow KeyPair Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Eq KeyPair Source # 
Instance details

Defined in Crypto.PubKey.ECC.ECDSA

Methods

(==) :: KeyPair -> KeyPair -> Bool #

(/=) :: KeyPair -> KeyPair -> Bool #

toPublicKey :: KeyPair -> PublicKey Source #

Public key of a ECDSA Key pair.

toPrivateKey :: KeyPair -> PrivateKey Source #

Private key of a ECDSA Key pair.

signWith Source #

Arguments

:: (ByteArrayAccess msg, HashAlgorithm hash) 
=> Integer

k random number

-> PrivateKey

private key

-> hash

hash function

-> msg

message to sign

-> Maybe Signature 

Sign message using the private key and an explicit k number.

WARNING: Vulnerable to timing attacks.

signDigestWith Source #

Arguments

:: HashAlgorithm hash 
=> Integer

k random number

-> PrivateKey

private key

-> Digest hash

digest to sign

-> Maybe Signature 

Sign digest using the private key and an explicit k number.

WARNING: Vulnerable to timing attacks.

signExtendedDigestWith Source #

Arguments

:: HashAlgorithm hash 
=> Integer

k random number

-> PrivateKey

private key

-> Digest hash

digest to sign

-> Maybe ExtendedSignature 

Sign digest using the private key and an explicit k number.

WARNING: Vulnerable to timing attacks.

sign :: (ByteArrayAccess msg, HashAlgorithm hash, MonadRandom m) => PrivateKey -> hash -> msg -> m Signature Source #

Sign message using the private key.

WARNING: Vulnerable to timing attacks.

signDigest :: (HashAlgorithm hash, MonadRandom m) => PrivateKey -> Digest hash -> m Signature Source #

Sign digest using the private key.

WARNING: Vulnerable to timing attacks.

signExtendedDigest :: (HashAlgorithm hash, MonadRandom m) => PrivateKey -> Digest hash -> m ExtendedSignature Source #

Sign digest using the private key.

WARNING: Vulnerable to timing attacks.

verify :: (ByteArrayAccess msg, HashAlgorithm hash) => hash -> PublicKey -> Signature -> msg -> Bool Source #

Verify a bytestring using the public key.

verifyDigest :: HashAlgorithm hash => PublicKey -> Signature -> Digest hash -> Bool Source #

Verify a digest using the public key.

recover :: (ByteArrayAccess msg, HashAlgorithm hash) => hash -> Curve -> ExtendedSignature -> msg -> Maybe PublicKey Source #

Recover the public key from an extended signature and a message.

recoverDigest :: HashAlgorithm hash => Curve -> ExtendedSignature -> Digest hash -> Maybe PublicKey Source #

Recover the public key from an extended signature and a digest.

deterministicNonce :: (HashAlgorithm hashDRG, HashAlgorithm hashDigest) => hashDRG -> PrivateKey -> Digest hashDigest -> (Integer -> Maybe a) -> a Source #

Deterministic nonce generation according to RFC 6979. Allows using different hash algorithms for the HMAC-based DRG and the message digest.