--- /dev/null
+@c acl_streamciphers.texi
+@section Stream ciphers
+ A stream cipher normally generates a deterministic, random looking stream of
+ bits, known as key stream. For encryption purpose this key stream is XORed with
+ the data stream. So decryption is exactly the same as encryption. The
+ data-stream is XORed with the key stream giving the plaintext. So both sides
+ need exactly the same stream cipher in the same state.
+
+@subsection List of available stream ciphers
+ The following stream ciphers are currently implemented:
+@itemize @bullet
+ @item ARCFOUR (RC4 compatibel)
+ @item Trivium
+ @item Grain
+ @item MUGI
+ @item Mickey-128 (v2)
+@end itemize
+
+@subsection High frequent parameters
+@table @asis
+ @item output-size
+ 8 bit, 1 bit
+ @item keysize
+ 64 bit, 80 bit, 128 bit
+ @item IVsize
+ 64 bit
+@end table
+
+@subsection Parts of a stream cipher
+@itemize @bullet
+ @item generation algorithm
+ @item initialization algorithm
+ @item state
+@end itemize
+
+ As we can see all stream ciphers seem to utilize an internal state which
+ determines the output. This state is initialized by the initialization
+ algorithm with a key and an IV (initialization vector). It is very important
+ for security that _never_ the same key with the same IV is used again. The
+ IV is not required to be kept secret.
+
+@subsection API of stream ciphers
+ The API is not always consistent due to the fact that we tried to optimize the
+ code for size (flash, heap and stack) and speed (runtime of the different
+ components).
+
+ Generally the API of the implemented stream ciphers consists of:
+ @table @code
+ @item *_init
+ function, which implements the initialization
+
+ @item *_gen
+ function, which implements the streamcipher algorithm and generates a
+ keystream output
+
+ @item *_ctx_t
+ context type, which contains internal state information
+
+ @end table
+
+@subsubsection @code{*_init} function
+ The *_init function generally takes a pointer to the key as first parameter.
+ For ciphers where the keysize is not fixed the second parameter gives the
+ keysize (in bits regularly) followed by a pointer to the IV and a length
+ parameter for not fixed IV sizes (both are omitted if the algorithm does not
+ specify IV handling, in this case a part of the key should be used as IV).
+ The last parameter points to the context variable to fill.
+
+@subsubsection @code{*_gen} function
+ The *_gen function updates the internal state to which a pointer is given as
+ parameter and returns a fixed length part of the keystream as return value.
+
+
+
+@subsection Stream cipher abstraction layer (SCAL)
+