sig
  type mechanism_return =
      Mech_continue of OBus_auth.data
    | Mech_ok of int option
    | Mech_reject
  class virtual mechanism_handler :
    object
      method abort : unit
      method virtual data :
        OBus_auth.data -> OBus_auth.Server.mechanism_return Lwt.t
      method init : OBus_auth.data option Lwt.t
    end
  type mechanism = {
    mech_name : string;
    mech_exec : int option -> OBus_auth.Server.mechanism_handler;
  }
  val mech_name : OBus_auth.Server.mechanism -> string
  val mech_exec :
    OBus_auth.Server.mechanism ->
    int option -> OBus_auth.Server.mechanism_handler
  val mech_anonymous : OBus_auth.Server.mechanism
  val mech_external : OBus_auth.Server.mechanism
  val mech_dbus_cookie_sha1 : OBus_auth.Server.mechanism
  val default_mechanisms : OBus_auth.Server.mechanism list
  val authenticate :
    ?capabilities:OBus_auth.capability list ->
    ?mechanisms:OBus_auth.Server.mechanism list ->
    ?user_id:int ->
    guid:OBus_address.guid ->
    stream:OBus_auth.stream ->
    unit -> (int option * OBus_auth.capability list) Lwt.t
end