sig
  type parameters = { p : string; g : string; privlen : int; }
  val new_parameters :
    ?rng:Cryptokit.Random.rng ->
    ?privlen:int -> int -> Cryptokit.DH.parameters
  type private_secret
  val private_secret :
    ?rng:Cryptokit.Random.rng ->
    Cryptokit.DH.parameters -> Cryptokit.DH.private_secret
  val message :
    Cryptokit.DH.parameters -> Cryptokit.DH.private_secret -> string
  val shared_secret :
    Cryptokit.DH.parameters ->
    Cryptokit.DH.private_secret -> string -> string
  val derive_key : ?diversification:string -> string -> int -> string
end