sig
  type priv = { p : Z.t; q : Z.t; gg : Z.t; x : Z.t; y : Z.t; }
  type pub = { p : Z.t; q : Z.t; gg : Z.t; y : Z.t; }
  type keysize =
      [ `Exactly of int * int | `Fips1024 | `Fips2048 | `Fips3072 ]
  type mask = [ `No | `Yes | `Yes_with of Nocrypto.Rng.g ]
  val pub_of_priv : Nocrypto.Dsa.priv -> Nocrypto.Dsa.pub
  val generate :
    ?g:Nocrypto.Rng.g -> Nocrypto.Dsa.keysize -> Nocrypto.Dsa.priv
  val sign :
    ?mask:Nocrypto.Dsa.mask ->
    ?k:Z.t -> key:Nocrypto.Dsa.priv -> Cstruct.t -> Cstruct.t * Cstruct.t
  val verify :
    key:Nocrypto.Dsa.pub -> Cstruct.t * Cstruct.t -> Cstruct.t -> bool
  val massage : key:Nocrypto.Dsa.pub -> Cstruct.t -> Cstruct.t
  module K_gen :
    functor (H : Hash.S->
      sig val generate : key:Nocrypto.Dsa.priv -> Cstruct.t -> Z.t end
  val pub_of_sexp : Sexplib.Sexp.t -> Nocrypto.Dsa.pub
  val sexp_of_pub : Nocrypto.Dsa.pub -> Sexplib.Sexp.t
  val priv_of_sexp : Sexplib.Sexp.t -> Nocrypto.Dsa.priv
  val sexp_of_priv : Nocrypto.Dsa.priv -> Sexplib.Sexp.t
end