sig   class type transform =     object       method available_output : int       method finish : unit       method flush : unit       method get_byte : int       method get_char : char       method get_string : string       method get_substring : string * int * int       method input_block_size : int       method output_block_size : int       method put_byte : int -> unit       method put_char : char -> unit       method put_string : string -> unit       method put_substring : string -> int -> int -> unit       method wipe : unit     end   val transform_string : Cryptokit.transform -> string -> string   val transform_channel :     Cryptokit.transform ->     ?len:int -> Pervasives.in_channel -> Pervasives.out_channel -> unit   val compose :     Cryptokit.transform -> Cryptokit.transform -> Cryptokit.transform   class type hash =     object       method add_byte : int -> unit       method add_char : char -> unit       method add_string : string -> unit       method add_substring : string -> int -> int -> unit       method hash_size : int       method result : string       method wipe : unit     end   val hash_string : Cryptokit.hash -> string -> string   val hash_channel :     Cryptokit.hash -> ?len:int -> Pervasives.in_channel -> string   module Random :     sig       class type rng =         object           method random_bytes : string -> int -> int -> unit           method wipe : unit         end       val string : Cryptokit.Random.rng -> int -> string       val secure_rng : Cryptokit.Random.rng       val system_rng : unit -> Cryptokit.Random.rng       val device_rng : string -> Cryptokit.Random.rng       val egd_rng : string -> Cryptokit.Random.rng       val pseudo_rng : string -> Cryptokit.Random.rng     end   module Padding :     sig       class type scheme =         object           method pad : string -> int -> unit           method strip : string -> int         end       val length : Cryptokit.Padding.scheme       val _8000 : Cryptokit.Padding.scheme     end   module Cipher :     sig       type direction = Encrypt | Decrypt       type chaining_mode =           ECB         | CBC         | CFB of int         | OFB of int         | CTR         | CTR_N of int       val aes :         ?mode:Cryptokit.Cipher.chaining_mode ->         ?pad:Cryptokit.Padding.scheme ->         ?iv:string ->         string -> Cryptokit.Cipher.direction -> Cryptokit.transform       val des :         ?mode:Cryptokit.Cipher.chaining_mode ->         ?pad:Cryptokit.Padding.scheme ->         ?iv:string ->         string -> Cryptokit.Cipher.direction -> Cryptokit.transform       val triple_des :         ?mode:Cryptokit.Cipher.chaining_mode ->         ?pad:Cryptokit.Padding.scheme ->         ?iv:string ->         string -> Cryptokit.Cipher.direction -> Cryptokit.transform       val arcfour :         string -> Cryptokit.Cipher.direction -> Cryptokit.transform       val blowfish :         ?mode:Cryptokit.Cipher.chaining_mode ->         ?pad:Cryptokit.Padding.scheme ->         ?iv:string ->         string -> Cryptokit.Cipher.direction -> Cryptokit.transform     end   module Hash :     sig       val sha1 : unit -> Cryptokit.hash       val sha2 : int -> Cryptokit.hash       val sha3 : int -> Cryptokit.hash       val sha224 : unit -> Cryptokit.hash       val sha256 : unit -> Cryptokit.hash       val sha384 : unit -> Cryptokit.hash       val sha512 : unit -> Cryptokit.hash       val ripemd160 : unit -> Cryptokit.hash       val md5 : unit -> Cryptokit.hash     end   module MAC :     sig       val hmac_sha1 : string -> Cryptokit.hash       val hmac_sha256 : string -> Cryptokit.hash       val hmac_sha512 : string -> Cryptokit.hash       val hmac_ripemd160 : string -> Cryptokit.hash       val hmac_md5 : string -> Cryptokit.hash       val aes :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme -> string -> Cryptokit.hash       val des :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme -> string -> Cryptokit.hash       val triple_des :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme -> string -> Cryptokit.hash       val des_final_triple_des :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme -> string -> Cryptokit.hash     end   module RSA :     sig       type key = {         size : int;         n : string;         e : string;         d : string;         p : string;         q : string;         dp : string;         dq : string;         qinv : string;       }       val wipe_key : Cryptokit.RSA.key -> unit       val new_key :         ?rng:Cryptokit.Random.rng -> ?e:int -> int -> Cryptokit.RSA.key       val encrypt : Cryptokit.RSA.key -> string -> string       val decrypt : Cryptokit.RSA.key -> string -> string       val decrypt_CRT : Cryptokit.RSA.key -> string -> string       val sign : Cryptokit.RSA.key -> string -> string       val sign_CRT : Cryptokit.RSA.key -> string -> string       val unwrap_signature : Cryptokit.RSA.key -> string -> string     end   module DH :     sig       type parameters = { p : string; g : string; privlen : int; }       val new_parameters :         ?rng:Cryptokit.Random.rng ->         ?privlen:int -> int -> Cryptokit.DH.parameters       type private_secret       val private_secret :         ?rng:Cryptokit.Random.rng ->         Cryptokit.DH.parameters -> Cryptokit.DH.private_secret       val message :         Cryptokit.DH.parameters -> Cryptokit.DH.private_secret -> string       val shared_secret :         Cryptokit.DH.parameters ->         Cryptokit.DH.private_secret -> string -> string       val derive_key : ?diversification:string -> string -> int -> string     end   module Block :     sig       class type block_cipher =         object           method blocksize : int           method transform : string -> int -> string -> int -> unit           method wipe : unit         end       class cipher : Cryptokit.Block.block_cipher -> transform       class cipher_padded_encrypt :         Cryptokit.Padding.scheme -> Cryptokit.Block.block_cipher -> transform       class cipher_padded_decrypt :         Cryptokit.Padding.scheme -> Cryptokit.Block.block_cipher -> transform       class mac :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme -> Cryptokit.Block.block_cipher -> hash       class mac_final_triple :         ?iv:string ->         ?pad:Cryptokit.Padding.scheme ->         Cryptokit.Block.block_cipher ->         Cryptokit.Block.block_cipher -> Cryptokit.Block.block_cipher -> hash       class aes_encrypt : string -> block_cipher       class aes_decrypt : string -> block_cipher       class des_encrypt : string -> block_cipher       class des_decrypt : string -> block_cipher       class triple_des_encrypt : string -> block_cipher       class triple_des_decrypt : string -> block_cipher       class blowfish_encrypt : string -> block_cipher       class blowfish_decrypt : string -> block_cipher       class cbc_encrypt :         ?iv:string -> Cryptokit.Block.block_cipher -> block_cipher       class cbc_decrypt :         ?iv:string -> Cryptokit.Block.block_cipher -> block_cipher       class cfb_encrypt :         ?iv:string -> int -> Cryptokit.Block.block_cipher -> block_cipher       class cfb_decrypt :         ?iv:string -> int -> Cryptokit.Block.block_cipher -> block_cipher       class ofb :         ?iv:string -> int -> Cryptokit.Block.block_cipher -> block_cipher       class ctr :         ?iv:string ->         ?inc:int -> Cryptokit.Block.block_cipher -> block_cipher     end   module Stream :     sig       class type stream_cipher =         object           method transform : string -> int -> string -> int -> int -> unit           method wipe : unit         end       class cipher : Cryptokit.Stream.stream_cipher -> transform       class arcfour : string -> stream_cipher     end   module Base64 :     sig       val encode_multiline : unit -> Cryptokit.transform       val encode_compact : unit -> Cryptokit.transform       val encode_compact_pad : unit -> Cryptokit.transform       val decode : unit -> Cryptokit.transform     end   module Hexa :     sig       val encode : unit -> Cryptokit.transform       val decode : unit -> Cryptokit.transform     end   module Zlib :     sig       val compress : ?level:int -> unit -> Cryptokit.transform       val uncompress : unit -> Cryptokit.transform     end   type error =       Wrong_key_size     | Wrong_IV_size     | Wrong_data_length     | Bad_padding     | Output_buffer_overflow     | Incompatible_block_size     | Number_too_long     | Seed_too_short     | Message_too_long     | Bad_encoding     | Compression_error of string * string     | No_entropy_source     | Entropy_source_closed     | Compression_not_supported   exception Error of Cryptokit.error   val wipe_string : string -> unit   val xor_string : string -> int -> string -> int -> int -> unit   val mod_power : string -> string -> string -> string   val mod_mult : string -> string -> string -> string end