sig
  type credentials =
      Plaintext of string * string
    | Digest of string * string * string
  class type auth_machine =
    object
      method add_packet : Jabber.packet -> unit
      method get_state : unit -> Jabbersm.state
      method reject_reason : unit -> string
      method start : unit -> unit
    end
  val mk_auth_machine :
    Auth.credentials ->
    string -> (Jabber.packet -> unit) -> Auth.auth_machine
end