module Cryptokit: sig
.. end
The Cryptokit library provides a variety of cryptographic primitives
that can be used to implement cryptographic protocols in
security-sensitive applications. The primitives provided include:
- Symmetric-key ciphers: AES, DES, Triple-DES, ARCfour,
in ECB, CBC, CFB and OFB modes.
- Public-key cryptography: RSA encryption, Diffie-Hellman key agreement.
- Hash functions and MACs: SHA-1, SHA-256, SHA-3, RIPEMD-160, MD5,
and MACs based on AES and DES.
- Random number generation.
- Encodings and compression: base 64, hexadecimal, Zlib compression.
To use this library, link with
ocamlc unix.cma nums.cma cryptokit.cma
or
ocamlopt unix.cmxa nums.cmxa cryptokit.cmxa
.
General-purpose abstract interfaces
class type transform = object
.. end
A transform is an arbitrary mapping from sequences of characters
to sequences of characters.
val transform_string : transform -> string -> string
transform_string t s
runs the string s
through the
transform t
and returns the transformed string.
The transform t
is wiped before returning, hence can
no longer be used for further transformations.
val transform_channel : transform ->
?len:int -> Pervasives.in_channel -> Pervasives.out_channel -> unit
transform_channel t ic oc
reads characters from input channel ic
,
runs them through the transform t
, and writes the transformed
data to the output channel oc
. If the optional len
argument
is provided, exactly len
characters are read from ic
and
transformed; End_of_file
is raised if ic
does not contain
at least len
characters. If len
is not provided, ic
is
read all the way to end of file.
The transform t
is wiped before returning, hence can
no longer be used for further transformations.
val compose : transform -> transform -> transform
Compose two transforms, feeding the output of the first transform
to the input of the second transform.
class type hash = object
.. end
A hash is a function that maps arbitrarily-long character
sequences to small, fixed-size strings.
val hash_string : hash -> string -> string
hash_string h s
runs the string s
through the hash function h
and returns the hash value of s
.
The hash h
is wiped before returning, hence can
no longer be used for further hash computations.
val hash_channel : hash -> ?len:int -> Pervasives.in_channel -> string
hash_channel h ic
reads characters from the input channel ic
,
computes their hash value and returns it.
If the optional len
argument is provided, exactly len
characters
are read from ic
and hashed; End_of_file
is raised if ic
does not contain at least len
characters.
If len
is not provided, ic
is read all the way to end of file.
The hash h
is wiped before returning, hence can
no longer be used for further hash computations.
Utilities: random numbers and padding schemes
module Random: sig
.. end
The Random
module provides random and pseudo-random number generators
suitable for generating cryptographic keys, nonces, or challenges.
module Padding: sig
.. end
The Padding
module defines a generic interface
for padding input data to an integral number of blocks,
as well as two popular padding schemes.
Cryptographic primitives (simplified interface)
module Cipher: sig
.. end
The Cipher
module implements the AES, DES, Triple-DES, ARCfour
and Blowfish symmetric ciphers.
module Hash: sig
.. end
The Hash
module implements unkeyed cryptographic hashes (SHA-1,
SHA-256, RIPEMD-160 and MD5), also known as message digest functions.
module MAC: sig
.. end
The MAC
module implements message authentication codes, also
known as keyed hash functions.
module RSA: sig
.. end
The RSA
module implements RSA public-key cryptography.
module DH: sig
.. end
The DH
module implements Diffie-Hellman key agreement.
Advanced, compositional interface to block ciphers
and stream ciphers
module Block: sig
.. end
The Block
module provides classes that implements
popular block ciphers, chaining modes, and wrapping of a block cipher
as a general transform or as a hash function.
module Stream: sig
.. end
The Stream
module provides classes that implement
the ARCfour stream cipher, and the wrapping of a stream cipher
as a general transform.
Encoding and compression of data
module Base64: sig
.. end
The Base64
module supports the encoding and decoding of
binary data in base 64 format, using only alphanumeric
characters that can safely be transmitted over e-mail or
in URLs.
module Hexa: sig
.. end
The Hexa
module supports the encoding and decoding of
binary data as hexadecimal strings.
module Zlib: sig
.. end
The Zlib
module supports the compression and decompression
of data, using the zlib
library.
Error reporting
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 |
Error codes for this library.
exception Error of error
Exception raised by functions in this library
to report error conditions.
Miscellaneous utilities
val wipe_string : string -> unit
wipe_string s
overwrites s
with zeroes. Can be used
to reduce the memory lifetime of sensitive data.
val xor_string : string -> int -> string -> int -> int -> unit
xor_string src spos dst dpos len
performs the xor (exclusive or)
of characters spos, ..., spos + len - 1
of src
with characters dpos, ..., dpos + len - 1
of dst
,
storing the result in dst
starting at position dpos
.
val mod_power : string -> string -> string -> string
mod_power a b c
computes a^b mod c
, where the
strings a
, b
, c
and the result string are viewed as
arbitrary-precision integers in big-endian format.
Requires a < c
.
val mod_mult : string -> string -> string -> string
mod_mult a b c
computes a*b mod c
, where the
strings a
, b
, c
and the result string are viewed as
arbitrary-precision integers in big-endian format.