BLOWFISH(3) BSD Programmer's Manual BLOWFISH(3)
blf_key, blf_enc, blf_dec - Blowfish encryption
#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);
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 randomiza- tion. 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 datalen must be even. blf_dec() is used for de- crypting 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.
passwd(1), crypt(3), passwd(5)
Niels Provos <provos@physnet.uni-hamburg.de> MirBSD #10-current February 13, 1997 1