| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
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
- data Signature = Signature {}
- data ExtendedSignature = ExtendedSignature {}
- type PublicPoint = Point
- data PublicKey = PublicKey {}
- type PrivateNumber = Integer
- data PrivateKey = PrivateKey {}
- data KeyPair = KeyPair Curve PublicPoint PrivateNumber
- toPublicKey :: KeyPair -> PublicKey
- toPrivateKey :: KeyPair -> PrivateKey
- signWith :: (ByteArrayAccess msg, HashAlgorithm hash) => Integer -> PrivateKey -> hash -> msg -> Maybe Signature
- signDigestWith :: HashAlgorithm hash => Integer -> PrivateKey -> Digest hash -> Maybe Signature
- signExtendedDigestWith :: HashAlgorithm hash => Integer -> PrivateKey -> Digest hash -> Maybe ExtendedSignature
- sign :: (ByteArrayAccess msg, HashAlgorithm hash, MonadRandom m) => PrivateKey -> hash -> msg -> m Signature
- signDigest :: (HashAlgorithm hash, MonadRandom m) => PrivateKey -> Digest hash -> m Signature
- signExtendedDigest :: (HashAlgorithm hash, MonadRandom m) => PrivateKey -> Digest hash -> m ExtendedSignature
- verify :: (ByteArrayAccess msg, HashAlgorithm hash) => hash -> PublicKey -> Signature -> msg -> Bool
- verifyDigest :: HashAlgorithm hash => PublicKey -> Signature -> Digest hash -> Bool
- recover :: (ByteArrayAccess msg, HashAlgorithm hash) => hash -> Curve -> ExtendedSignature -> msg -> Maybe PublicKey
- recoverDigest :: HashAlgorithm hash => Curve -> ExtendedSignature -> Digest hash -> Maybe PublicKey
- deterministicNonce :: (HashAlgorithm hashDRG, HashAlgorithm hashDigest) => hashDRG -> PrivateKey -> Digest hashDigest -> (Integer -> Maybe a) -> a
Documentation
Represent a ECDSA signature namely R and S.
Instances
| Data Signature Source # | |
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 # | |
| Show Signature Source # | |
| Eq Signature Source # | |
data ExtendedSignature Source #
ECDSA signature with public key recovery information.
Constructors
| ExtendedSignature | |
Instances
type PublicPoint = Point Source #
ECC Public Point
ECDSA Public Key.
Constructors
| PublicKey | |
Fields
| |
Instances
| Data PublicKey Source # | |
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 # | |
| Show PublicKey Source # | |
| Eq PublicKey Source # | |
type PrivateNumber = Integer Source #
ECC Private Number
data PrivateKey Source #
ECDSA Private Key.
Constructors
| PrivateKey | |
Fields | |
Instances
| Data PrivateKey Source # | |
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 # | |
Defined in Crypto.PubKey.ECC.ECDSA Methods readsPrec :: Int -> ReadS PrivateKey # readList :: ReadS [PrivateKey] # readPrec :: ReadPrec PrivateKey # readListPrec :: ReadPrec [PrivateKey] # | |
| Show PrivateKey Source # | The curve is shown; |
Defined in Crypto.PubKey.ECC.ECDSA Methods showsPrec :: Int -> PrivateKey -> ShowS # show :: PrivateKey -> String # showList :: [PrivateKey] -> ShowS # | |
| DebugShow PrivateKey Source # | |
Defined in Crypto.PubKey.ECC.ECDSA Methods debugShow :: PrivateKey -> String Source # | |
| Eq PrivateKey Source # | |
Defined in Crypto.PubKey.ECC.ECDSA | |
ECDSA Key Pair.
Constructors
| KeyPair Curve PublicPoint PrivateNumber |
Instances
| Data KeyPair Source # | |
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 # | |
| Show KeyPair Source # | |
| DebugShow KeyPair Source # | |
| Eq KeyPair Source # | |
toPublicKey :: KeyPair -> PublicKey Source #
Public key of a ECDSA Key pair.
toPrivateKey :: KeyPair -> PrivateKey Source #
Private key of a ECDSA Key pair.
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.
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.