Blowfish is a fast unpatented block cipher designed
by Bruce Schneier. It basically consists of a 16-round Feistel network. The
block size is 64 bits and the maximum key size is 448 bits.

The blf_key() function initializes the 4
8-bit S-boxes and the 18 Subkeys with the hexadecimal digits of Pi. The key is
used for further randomization. The first argument to
blf_enc() is the initialized state derived
from blf_key(). The stream of 32-bit words
is encrypted in Electronic Codebook Mode (ECB) and
blocks is the number of 64-bit blocks in the
stream. blf_dec() is used for decrypting
Blowfish encrypted blocks.

The functions blf_ecb_encrypt() and
blf_ecb_decrypt() are used for encrypting
and decrypting octet streams in ECB mode. The functions
blf_cbc_encrypt() and
blf_cbc_decrypt() are used for encrypting
and decrypting octet streams in Cipherblock Chaining Mode (CBC). For these
functions datalen specifies the number of
octets of data to encrypt or decrypt. It must be a multiple of 8 (64-bit
block). The initialisation vector iv points
to an 8-byte buffer.