HORIZON HASKELLDocslts/ghc-9.14.x45dd5372026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 9.14.1 · lts/ghc-9.14.x · 45dd537 · 2026-10-11

Modulecrypton-2.1.7Haskell2010

Crypto.PubKey.DH

  • 4 types
  • 6 values
  • Packagecrypton-2.1.7
  • Exports10
  • LanguageHaskell2010
  • LicenceBSD-3-Clause AND MIT AND ISC
  • SourceDH.hs
newtypenewtype PublicNumber
#

Represent Diffie Hellman public number Y.

Constructors

Instances8Enum, Eq, Num, Ord, Read, Real, …
newtypenewtype PrivateNumber
#

Represent Diffie Hellman private number X.

Instances9Enum, Eq, Num, Ord, Read, Real, …
valuegenerateParams
  1. :: MonadRandom m
  2. => Int

    number of bits

  3. -> Integer

    generator

  4. -> m Params
#

generate params from a specific generator (2 or 5 are common values) we generate a safe prime (a prime number of the form 2p+1 where p is also prime)

generate a shared key using our private number and the other party public number, reporting a rejected public number instead of raising.

The public number comes from the other party, so it is checked to satisfy 1 < y < p-1 as RFC 7919 section 5.1 requires. The excluded values generate the subgroup {1} or {1, p-1}, so the shared secret they produce is one of a handful of constants and carries none of our private number's secrecy. A value outside that range is reported as CryptoError_ParameterInvalid.

Note this is the only check made here: it does not establish that y lies in the subgroup generated by g, which needs the subgroup order that Params does not carry.