Crypto.PubKey.DSA

cryptonite-0.13: Cryptography Primitives sink

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

Crypto.PubKey.DSA

Contents

- generation
- signature primitive
- verification primitive
- Key pair

Description

An implementation of the Digital Signature Algorithm (DSA)

Synopsis

- data Params = Params {
  - params_p :: Integer
  - params_g :: Integer
  - params_q :: Integer
  }
- data Signature = Signature {
  - sign_r :: Integer
  - sign_s :: Integer
  }
- data PublicKey = PublicKey {
  - public_params :: Params
  - public_y :: PublicNumber
  }
- data PrivateKey = PrivateKey {
  - private_params :: Params
  - private_x :: PrivateNumber
  }
- type PublicNumber = Integer
- type PrivateNumber = Integer
- generatePrivate :: MonadRandom m => Params -> m PrivateNumber
- calculatePublic :: Params -> PrivateNumber -> PublicNumber
- sign :: (ByteArrayAccess msg, HashAlgorithm hash, MonadRandom m) => PrivateKey -> hash -> msg -> m Signature
- signWith :: (ByteArrayAccess msg, HashAlgorithm hash) => Integer -> PrivateKey -> hash -> msg -> Maybe Signature
- verify :: (ByteArrayAccess msg, HashAlgorithm hash) => hash -> PublicKey -> Signature -> msg -> Bool
- data KeyPair = KeyPair Params PublicNumber PrivateNumber
- toPublicKey :: KeyPair -> PublicKey
- toPrivateKey :: KeyPair -> PrivateKey

# Documentation

data Params

Represent DSA parameters namely P, G, and Q.

Constructors

Params |
Fields params_p :: Integer DSA p params_g :: Integer DSA g params_q :: Integer DSA q

Instances

Eq Params |
Data Params |
Read Params |
Show Params |
NFData Params |

data Signature

Represent a DSA signature namely R and S.

Constructors

Signature |
Fields sign_r :: Integer DSA r sign_s :: Integer DSA s

Instances

Eq Signature |
Data Signature |
Read Signature |
Show Signature |
NFData Signature |

data PublicKey

Represent a DSA public key.

Constructors

PublicKey |
Fields public_params :: Params DSA parameters public_y :: PublicNumber DSA public Y

Instances

Eq PublicKey |
Data PublicKey |
Read PublicKey |
Show PublicKey |
NFData PublicKey |

data PrivateKey

Represent a DSA private key.

Only x need to be secret. the DSA parameters are publicly shared with the other side.

Constructors

PrivateKey |
Fields private_params :: Params DSA parameters private_x :: PrivateNumber DSA private X

Instances

Eq PrivateKey |
Data PrivateKey |
Read PrivateKey |
Show PrivateKey |
NFData PrivateKey |

type PublicNumber = Integer

DSA Public Number, usually embedded in DSA Public Key

type PrivateNumber = Integer

DSA Private Number, usually embedded in DSA Private Key

# generation

generatePrivate :: MonadRandom m => Params -> m PrivateNumber

generate a private number with no specific property this number is usually called X in DSA text.

calculatePublic :: Params -> PrivateNumber -> PublicNumber

Calculate the public number from the parameters and the private key

# signature primitive

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

sign message using the private key.

signWith

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.

# verification primitive

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

verify a bytestring using the public key.

# Key pair

data KeyPair

Represent a DSA key pair

Constructors

KeyPair Params PublicNumber PrivateNumber |

Instances

Eq KeyPair |
Data KeyPair |
Read KeyPair |
Show KeyPair |
NFData KeyPair |

toPublicKey :: KeyPair -> PublicKey

Public key of a DSA Key pair

toPrivateKey :: KeyPair -> PrivateKey

Private key of a DSA Key pair