2000-02-21 03:01:23 +00:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
blowfish, BF_set_key, BF_encrypt, BF_decrypt, BF_ecb_encrypt, BF_cbc_encrypt,
|
|
|
|
BF_cfb64_encrypt, BF_ofb64_encrypt, BF_options - Blowfish encryption
|
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
#include <openssl/blowfish.h>
|
|
|
|
|
|
|
|
void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
|
|
|
|
|
2000-02-24 11:55:57 +00:00
|
|
|
void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
|
|
|
|
BF_KEY *key, int enc);
|
|
|
|
void BF_cbc_encrypt(const unsigned char *in, unsigned char *out,
|
|
|
|
long length, BF_KEY *schedule, unsigned char *ivec, int enc);
|
|
|
|
void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|
|
|
long length, BF_KEY *schedule, unsigned char *ivec, int *num,
|
|
|
|
int enc);
|
|
|
|
void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
|
|
|
long length, BF_KEY *schedule, unsigned char *ivec, int *num);
|
2000-02-21 03:01:23 +00:00
|
|
|
const char *BF_options(void);
|
|
|
|
|
2000-09-19 06:15:33 +00:00
|
|
|
void BF_encrypt(BF_LONG *data,const BF_KEY *key);
|
|
|
|
void BF_decrypt(BF_LONG *data,const BF_KEY *key);
|
2000-09-23 07:30:28 +00:00
|
|
|
|
2000-02-21 03:01:23 +00:00
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2002-01-21 18:01:46 +00:00
|
|
|
This library implements the Blowfish cipher, which was invented and described
|
2000-05-23 18:33:44 +00:00
|
|
|
by Counterpane (see http://www.counterpane.com/blowfish.html ).
|
2000-02-21 03:01:23 +00:00
|
|
|
|
|
|
|
Blowfish is a block cipher that operates on 64 bit (8 byte) blocks of data.
|
|
|
|
It uses a variable size key, but typically, 128 bit (16 byte) keys are
|
|
|
|
a considered good for strong encryption. Blowfish can be used in the same
|
|
|
|
modes as DES (see L<des_modes(7)|des_modes(7)>). Blowfish is currently one
|
|
|
|
of the faster block ciphers. It is quite a bit faster than DES, and much
|
|
|
|
faster than IDEA or RC2.
|
|
|
|
|
|
|
|
Blowfish consists of a key setup phase and the actual encryption or decryption
|
|
|
|
phase.
|
|
|
|
|
|
|
|
BF_set_key() sets up the B<BF_KEY> B<key> using the B<len> bytes long key
|
|
|
|
at B<data>.
|
|
|
|
|
|
|
|
BF_ecb_encrypt() is the basic Blowfish encryption and decryption function.
|
|
|
|
It encrypts or decrypts the first 64 bits of B<in> using the key B<key>,
|
|
|
|
putting the result in B<out>. B<enc> decides if encryption (B<BF_ENCRYPT>)
|
|
|
|
or decryption (B<BF_DECRYPT>) shall be performed. The vector pointed at by
|
|
|
|
B<in> and B<out> must be 64 bits in length, no less. If they are larger,
|
|
|
|
everything after the first 64 bits is ignored.
|
|
|
|
|
|
|
|
The mode functions BF_cbc_encrypt(), BF_cfb64_encrypt() and BF_ofb64_encrypt()
|
2000-09-20 03:24:36 +00:00
|
|
|
all operate on variable length data. They all take an initialization vector
|
2000-03-23 11:08:49 +00:00
|
|
|
B<ivec> which needs to be passed along into the next call of the same function
|
2000-09-20 03:24:36 +00:00
|
|
|
for the same message. B<ivec> may be initialized with anything, but the
|
|
|
|
recipient needs to know what it was initialized with, or it won't be able
|
2000-03-23 11:08:49 +00:00
|
|
|
to decrypt. Some programs and protocols simplify this, like SSH, where
|
2000-09-20 03:24:36 +00:00
|
|
|
B<ivec> is simply initialized to zero.
|
2002-01-21 18:01:46 +00:00
|
|
|
BF_cbc_encrypt() operates on data that is a multiple of 8 bytes long, while
|
2000-02-21 03:01:23 +00:00
|
|
|
BF_cfb64_encrypt() and BF_ofb64_encrypt() are used to encrypt an variable
|
|
|
|
number of bytes (the amount does not have to be an exact multiple of 8). The
|
|
|
|
purpose of the latter two is to simulate stream ciphers, and therefore, they
|
|
|
|
need the parameter B<num>, which is a pointer to an integer where the current
|
2000-09-20 03:24:36 +00:00
|
|
|
offset in B<ivec> is stored between calls. This integer must be initialized
|
|
|
|
to zero when B<ivec> is initialized.
|
2000-02-21 03:01:23 +00:00
|
|
|
|
|
|
|
BF_cbc_encrypt() is the Cipher Block Chaining function for Blowfish. It
|
|
|
|
encrypts or decrypts the 64 bits chunks of B<in> using the key B<schedule>,
|
|
|
|
putting the result in B<out>. B<enc> decides if encryption (BF_ENCRYPT) or
|
|
|
|
decryption (BF_DECRYPT) shall be performed. B<ivec> must point at an 8 byte
|
2000-09-20 03:24:36 +00:00
|
|
|
long initialization vector.
|
2000-02-21 03:01:23 +00:00
|
|
|
|
|
|
|
BF_cfb64_encrypt() is the CFB mode for Blowfish with 64 bit feedback.
|
|
|
|
It encrypts or decrypts the bytes in B<in> using the key B<schedule>,
|
|
|
|
putting the result in B<out>. B<enc> decides if encryption (B<BF_ENCRYPT>)
|
|
|
|
or decryption (B<BF_DECRYPT>) shall be performed. B<ivec> must point at an
|
2000-09-20 03:24:36 +00:00
|
|
|
8 byte long initialization vector. B<num> must point at an integer which must
|
2000-03-23 11:08:49 +00:00
|
|
|
be initially zero.
|
2000-02-21 03:01:23 +00:00
|
|
|
|
|
|
|
BF_ofb64_encrypt() is the OFB mode for Blowfish with 64 bit feedback.
|
2000-09-20 03:24:36 +00:00
|
|
|
It uses the same parameters as BF_cfb64_encrypt(), which must be initialized
|
2000-02-21 03:01:23 +00:00
|
|
|
the same way.
|
|
|
|
|
2000-09-19 06:15:33 +00:00
|
|
|
BF_encrypt() and BF_decrypt() are the lowest level functions for Blowfish
|
|
|
|
encryption. They encrypt/decrypt the first 64 bits of the vector pointed by
|
|
|
|
B<data>, using the key B<key>. These functions should not be used unless you
|
|
|
|
implement 'modes' of Blowfish. The alternative is to use BF_ecb_encrypt().
|
|
|
|
If you still want to use these functions, you should be aware that they take
|
|
|
|
each 32-bit chunk in host-byte order, which is little-endian on little-endian
|
|
|
|
platforms and big-endian on big-endian ones.
|
|
|
|
|
2000-02-21 03:01:23 +00:00
|
|
|
=head1 RETURN VALUES
|
|
|
|
|
|
|
|
None of the functions presented here return any value.
|
|
|
|
|
|
|
|
=head1 NOTE
|
|
|
|
|
2000-02-25 16:00:24 +00:00
|
|
|
Applications should use the higher level functions
|
|
|
|
L<EVP_EncryptInit(3)|EVP_EncryptInit(3)> etc. instead of calling the
|
|
|
|
blowfish functions directly.
|
2000-02-21 03:01:23 +00:00
|
|
|
|
|
|
|
=head1 SEE ALSO
|
|
|
|
|
|
|
|
L<des_modes(7)|des_modes(7)>
|
|
|
|
|
|
|
|
=head1 HISTORY
|
|
|
|
|
|
|
|
The Blowfish functions are available in all versions of SSLeay and OpenSSL.
|
|
|
|
|
|
|
|
=cut
|
|
|
|
|