mte/unikernel/duniverse/ocaml-tls/async/io_intf.ml
2025-11-11 02:07:51 +01:00

64 lines
2.1 KiB
OCaml

open! Core
open! Async
module type Fd = sig
type t
val read : t -> bytes -> [ `Ok of int | `Eof ] Deferred.Or_error.t
val write_full : t -> string -> unit Deferred.Or_error.t
end
module type S = sig
module Fd : Fd
(** Abstract type of a session *)
type t
(** {2 Constructors} *)
(** [server_of_fd server fd] is [t], after server-side TLS
handshake of [fd] using [server] configuration. *)
val server_of_fd : Tls.Config.server -> Fd.t -> t Deferred.Or_error.t
(** [client_of_fd client ~host fd] is [t], after client-side
TLS handshake of [fd] using [client] configuration and [host]. *)
val client_of_fd
: Tls.Config.client
-> ?host:[ `host ] Domain_name.t
-> Fd.t
-> t Deferred.Or_error.t
(** {2 Common stream operations} *)
(** [read t buffer] is [length], the number of bytes read into
[buffer]. *)
val read : t -> bytes -> int Deferred.Or_error.t
(** [writev t buffers] writes the [buffers] to the session. *)
val writev : t -> string list -> unit Deferred.Or_error.t
(** [close t] closes the TLS session by sending a close notify to the peer. *)
val close_tls : t -> unit Deferred.Or_error.t
(** [reneg ~authenticator ~acceptable_cas ~cert ~drop t] renegotiates the
session, and blocks until the renegotiation finished. Optionally, a new
[authenticator] and [acceptable_cas] can be used. The own certificate can
be adjusted by [cert]. If [drop] is [true] (the default),
application data received before the renegotiation finished is dropped. *)
val reneg
: ?authenticator:X509.Authenticator.t
-> ?acceptable_cas:X509.Distinguished_name.t list
-> ?cert:Tls.Config.own_cert
-> ?drop:bool
-> t
-> unit Deferred.Or_error.t
(** [key_update ~request t] updates the traffic key and requests a traffic key
update from the peer if [request] is provided and [true] (the default).
This is only supported in TLS 1.3. *)
val key_update : ?request:bool -> t -> unit Deferred.Or_error.t
(** [epoch t] returns [epoch], which contains information of the
active session. *)
val epoch : t -> Tls.Core.epoch_data Or_error.t
end