(* $Id: netsys_crypto_modes.mli 2195 2015-01-01 12:23:39Z gerd $ *)
(** Helpers for crypto modes *)
module Symmetric_cipher : sig
(** Access symmetric ciphers *)
type sc_ctx =
{ set_iv : string -> unit;
set_header : string -> unit;
encrypt : Netsys_types.memory -> Netsys_types.memory -> unit;
decrypt : Netsys_types.memory -> Netsys_types.memory -> bool;
mac : unit -> string;
}
type sc =
{ name : string;
mode : string;
key_lengths : (int * int) list;
iv_lengths : (int * int) list;
block_constraint : int;
supports_aead : bool;
create : string -> sc_ctx;
}
val extract :
(module Netsys_crypto_types.SYMMETRIC_CRYPTO) ->
(string * string) ->
sc
(** [extract scrypto (name,mode)]: returns the cipher called
[name] in [mode] as [scipher], or raises [Not_found]
*)
val extract_all :
(module Netsys_crypto_types.SYMMETRIC_CRYPTO) ->
sc list
(** Extracts all ciphers *)
val cbc_of_ecb : sc -> sc
(** For a given cipher in ECB mode, a new cipher in CBC mode is
returned. Raises [Not_found] if the input is not in ECB mode.
*)
val ofb_of_ecb : sc -> sc
(** For a given cipher in ECB mode, a new cipher in OFB mode is
returned. Raises [Not_found] if the input is not in ECB mode.
*)
val ctr_of_ecb : sc -> sc
(** For a given cipher in ECB mode, a new cipher in CTR mode is
returned. Raises [Not_found] if the input is not in ECB mode.
*)
end
module type CIPHERS = sig val ciphers : Symmetric_cipher.sc list end
module Bundle(C:CIPHERS) : Netsys_crypto_types.SYMMETRIC_CRYPTO
(** Bundle a list of ciphers as crypto module *)
module Add_modes (SC : Netsys_crypto_types.SYMMETRIC_CRYPTO) :
Netsys_crypto_types.SYMMETRIC_CRYPTO
(** Returns a new crypto module where missing modes are added for
all ECB ciphers. The added modes are CBC, OFB, and CTR.
Existing ciphers are returned unchanged.
*)