=pod

=head1 NAME

acss, acss_setkey - ACSS encryption

=head1 SYNOPSIS

 #include <openssl/acss.h>

 void acss_setkey(ACSS_KEY *key, const unsigned char *data, int enc,
         int mode);

 void acss(ACSS_KEY *key, unsigned long len, const unsigned char *in,
         unsigned char *out);

=head1 DESCRIPTION

This library implements the Alleged Content Scrambling System.  It is believed
to be interoperable with CSS of the DVD Copy Control Association.

ACSS is a stream cipher with a fixed key length of 40 bit (5 byte).

ACSS consists of a key setup phase and the actual encryption or decryption
phase.

acss_setkey() sets up the B<ACSS_KEY> B<key> using the 40 bit key at B<data>.
If the flag B<enc> is set to B<1> B<key> will be used for encryption,
otherwise for decryption.  The integer B<mode> denotes the mode to use.
Acceptible values are B<0> to B<3>.  For any other value mode B<0> is used.

acss() encrypts or decrypts the B<len> bytes of B<in> using B<key> and places
the result at B<out>.

Applications should use the higher level functions
L<EVP_EncryptInit(3)|EVP_EncryptInit(3)> etc.  instead of calling the acss
functions directly.

=head1 RETURN VALUES

None of the functions presented here return any value.

=head1 NOTE

ACSS is considered as an insecure cipher.  Therefore, use of ACSS is
discouraged.

=head1 SEE ALSO

RC4(3), arc4random(3)

=head1 History

A proprietary algorithm called CSS can be licensed from the DVD Copy Control
Association (DVD CCA).  CSS is considered a trade secret and is not patented.
In October 1999 source code for CSS was posted anonymously to the LiViD
mailing list.  Since then, several implementations and mathematical
descriptions of CSS are available and CSS has been subject to cryptanalysis.
The DVD CCA has repeatedly failed to sue individuals for publishing such
information about CSS.

ACSS is a stream cipher written from scratch and believed to be interoperable
with CSS.

=cut

