cryptonite-0.10: 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 Source

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 Source |
Data Params Source |
Read Params Source |
Show Params Source |
NFData Params Source |

data Signature Source

Represent a DSA signature namely R and S.

Constructors

Signature |

Fields

sign_r :: Integer

  DSA r

sign_s :: Integer

  DSA s

Instances

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

data PublicKey Source

Represent a DSA public key.

Constructors

PublicKey |

Fields

public_params :: Params

  DSA parameters

public_y :: PublicNumber

  DSA public Y

Instances

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

data PrivateKey Source

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 Source |
Data PrivateKey Source |
Read PrivateKey Source |
Show PrivateKey Source |
NFData PrivateKey Source |

type PublicNumber = Integer Source

DSA Public Number, usually embedded in DSA Public Key

type PrivateNumber = Integer Source

DSA Private Number, usually embedded in DSA Private Key

# generation

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

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

calculatePublic :: Params -> PrivateNumber -> PublicNumber Source

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 Source

sign message using the private key.

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.

# verification primitive

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

verify a bytestring using the public key.

# Key pair

data KeyPair Source

Represent a DSA key pair

Constructors

KeyPair Params PublicNumber PrivateNumber |

Instances

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

toPublicKey :: KeyPair -> PublicKey Source

Public key of a DSA Key pair

toPrivateKey :: KeyPair -> PrivateKey Source

Private key of a DSA Key pair