BLOWFISH(3)               OpenBSD Programmer's Manual              BLOWFISH(3)

NAME
     blf_key, blf_enc, blf_dec - Blowfish encryption

SYNOPSIS
     #include <blf.h>

     void
     blf_key(blf_ctx *state, const u_int8_t *key, u_int16_t keylen);

     void
     blf_enc(blf_ctx *state, u_int32_t *data, u_int16_t datalen);

     void
     blf_dec(blf_ctx *state, u_int32_t *data, u_int16_t datalen);

     void
     blf_ecb_encrypt(blf_ctx *state, u_int8_t *data, u_int32_t datalen);

     void
     blf_ecb_decrypt(blf_ctx *state, u_int8_t *data, u_int32_t datalen);

     void
     blf_cbc_encrypt(blf_ctx *state, u_int8_t *iv, u_int8_t *data,
             u_int32_t datalen);

     void
     blf_cbc_decrypt(blf_ctx *state, u_int8_t *iv, u_int8_t *data,
             u_int32_t datalen);

DESCRIPTION
     Blowfish is a fast unpatented block cipher designed by Bruce Schneier.
     It basically consists of a 16 times iterated Feistel network.  The block
     size is 64 bit and the maximum key size is 448 bit.

     The blf_key() function initializes the 4 8bit S-boxes and the 18 Subkeys
     with the hexadecimal digits of Pi.  The key is used for further random-
     ization.  The first argument to blf_enc() is the initialized state de-
     rived from blf_key().  The stream of 32-bit words is encrypted in Elec-
     tronic Codebook Mode (ECB) and datalen must be even.  blf_dec() is used
     for decrypting Blowfish encrypted blocks.

     The functions blf_ecb_encrypt() and blf_ecb_decrypt() are used for en-
     crypting and decrypting octet streams in ECB mode.  The functions
     blf_cbc_encrypt() and blf_cbc_decrypt() are used for encrypting and de-
     crypting octet streams in Cipherblock Chaining Mode (CBC).

     The functions Blowfish_initstate(), Blowfish_expand0state(),
     Blowfish_expandstate(), Blowfish_encipher() and Blowfish_decipher() are
     used for customization of the Blowfish cipher, e.g., for the blowfish
     password hashing function.

SEE ALSO
     passwd(1), crypt(3), passwd(5)

AUTHORS
     Niels Provos <provos@physnet.uni-hamburg.de>

OpenBSD 3.5                    February 13, 1997                             1
