xref: /onnv-gate/usr/src/common/openssl/doc/crypto/blowfish.pod (revision 2175:b0b2f052a486)
1*2175Sjp161948=pod
2*2175Sjp161948
3*2175Sjp161948=head1 NAME
4*2175Sjp161948
5*2175Sjp161948blowfish, BF_set_key, BF_encrypt, BF_decrypt, BF_ecb_encrypt, BF_cbc_encrypt,
6*2175Sjp161948BF_cfb64_encrypt, BF_ofb64_encrypt, BF_options - Blowfish encryption
7*2175Sjp161948
8*2175Sjp161948=head1 SYNOPSIS
9*2175Sjp161948
10*2175Sjp161948 #include <openssl/blowfish.h>
11*2175Sjp161948
12*2175Sjp161948 void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
13*2175Sjp161948
14*2175Sjp161948 void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
15*2175Sjp161948         BF_KEY *key, int enc);
16*2175Sjp161948 void BF_cbc_encrypt(const unsigned char *in, unsigned char *out,
17*2175Sjp161948 	 long length, BF_KEY *schedule, unsigned char *ivec, int enc);
18*2175Sjp161948 void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,
19*2175Sjp161948 	 long length, BF_KEY *schedule, unsigned char *ivec, int *num,
20*2175Sjp161948         int enc);
21*2175Sjp161948 void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
22*2175Sjp161948 	 long length, BF_KEY *schedule, unsigned char *ivec, int *num);
23*2175Sjp161948 const char *BF_options(void);
24*2175Sjp161948
25*2175Sjp161948 void BF_encrypt(BF_LONG *data,const BF_KEY *key);
26*2175Sjp161948 void BF_decrypt(BF_LONG *data,const BF_KEY *key);
27*2175Sjp161948
28*2175Sjp161948=head1 DESCRIPTION
29*2175Sjp161948
30*2175Sjp161948This library implements the Blowfish cipher, which was invented and described
31*2175Sjp161948by Counterpane (see http://www.counterpane.com/blowfish.html ).
32*2175Sjp161948
33*2175Sjp161948Blowfish is a block cipher that operates on 64 bit (8 byte) blocks of data.
34*2175Sjp161948It uses a variable size key, but typically, 128 bit (16 byte) keys are
35*2175Sjp161948considered good for strong encryption.  Blowfish can be used in the same
36*2175Sjp161948modes as DES (see L<des_modes(7)|des_modes(7)>).  Blowfish is currently one
37*2175Sjp161948of the faster block ciphers.  It is quite a bit faster than DES, and much
38*2175Sjp161948faster than IDEA or RC2.
39*2175Sjp161948
40*2175Sjp161948Blowfish consists of a key setup phase and the actual encryption or decryption
41*2175Sjp161948phase.
42*2175Sjp161948
43*2175Sjp161948BF_set_key() sets up the B<BF_KEY> B<key> using the B<len> bytes long key
44*2175Sjp161948at B<data>.
45*2175Sjp161948
46*2175Sjp161948BF_ecb_encrypt() is the basic Blowfish encryption and decryption function.
47*2175Sjp161948It encrypts or decrypts the first 64 bits of B<in> using the key B<key>,
48*2175Sjp161948putting the result in B<out>.  B<enc> decides if encryption (B<BF_ENCRYPT>)
49*2175Sjp161948or decryption (B<BF_DECRYPT>) shall be performed.  The vector pointed at by
50*2175Sjp161948B<in> and B<out> must be 64 bits in length, no less.  If they are larger,
51*2175Sjp161948everything after the first 64 bits is ignored.
52*2175Sjp161948
53*2175Sjp161948The mode functions BF_cbc_encrypt(), BF_cfb64_encrypt() and BF_ofb64_encrypt()
54*2175Sjp161948all operate on variable length data.  They all take an initialization vector
55*2175Sjp161948B<ivec> which needs to be passed along into the next call of the same function
56*2175Sjp161948for the same message.  B<ivec> may be initialized with anything, but the
57*2175Sjp161948recipient needs to know what it was initialized with, or it won't be able
58*2175Sjp161948to decrypt.  Some programs and protocols simplify this, like SSH, where
59*2175Sjp161948B<ivec> is simply initialized to zero.
60*2175Sjp161948BF_cbc_encrypt() operates on data that is a multiple of 8 bytes long, while
61*2175Sjp161948BF_cfb64_encrypt() and BF_ofb64_encrypt() are used to encrypt an variable
62*2175Sjp161948number of bytes (the amount does not have to be an exact multiple of 8).  The
63*2175Sjp161948purpose of the latter two is to simulate stream ciphers, and therefore, they
64*2175Sjp161948need the parameter B<num>, which is a pointer to an integer where the current
65*2175Sjp161948offset in B<ivec> is stored between calls.  This integer must be initialized
66*2175Sjp161948to zero when B<ivec> is initialized.
67*2175Sjp161948
68*2175Sjp161948BF_cbc_encrypt() is the Cipher Block Chaining function for Blowfish.  It
69*2175Sjp161948encrypts or decrypts the 64 bits chunks of B<in> using the key B<schedule>,
70*2175Sjp161948putting the result in B<out>.  B<enc> decides if encryption (BF_ENCRYPT) or
71*2175Sjp161948decryption (BF_DECRYPT) shall be performed.  B<ivec> must point at an 8 byte
72*2175Sjp161948long initialization vector.
73*2175Sjp161948
74*2175Sjp161948BF_cfb64_encrypt() is the CFB mode for Blowfish with 64 bit feedback.
75*2175Sjp161948It encrypts or decrypts the bytes in B<in> using the key B<schedule>,
76*2175Sjp161948putting the result in B<out>.  B<enc> decides if encryption (B<BF_ENCRYPT>)
77*2175Sjp161948or decryption (B<BF_DECRYPT>) shall be performed.  B<ivec> must point at an
78*2175Sjp1619488 byte long initialization vector. B<num> must point at an integer which must
79*2175Sjp161948be initially zero.
80*2175Sjp161948
81*2175Sjp161948BF_ofb64_encrypt() is the OFB mode for Blowfish with 64 bit feedback.
82*2175Sjp161948It uses the same parameters as BF_cfb64_encrypt(), which must be initialized
83*2175Sjp161948the same way.
84*2175Sjp161948
85*2175Sjp161948BF_encrypt() and BF_decrypt() are the lowest level functions for Blowfish
86*2175Sjp161948encryption.  They encrypt/decrypt the first 64 bits of the vector pointed by
87*2175Sjp161948B<data>, using the key B<key>.  These functions should not be used unless you
88*2175Sjp161948implement 'modes' of Blowfish.  The alternative is to use BF_ecb_encrypt().
89*2175Sjp161948If you still want to use these functions, you should be aware that they take
90*2175Sjp161948each 32-bit chunk in host-byte order, which is little-endian on little-endian
91*2175Sjp161948platforms and big-endian on big-endian ones.
92*2175Sjp161948
93*2175Sjp161948=head1 RETURN VALUES
94*2175Sjp161948
95*2175Sjp161948None of the functions presented here return any value.
96*2175Sjp161948
97*2175Sjp161948=head1 NOTE
98*2175Sjp161948
99*2175Sjp161948Applications should use the higher level functions
100*2175Sjp161948L<EVP_EncryptInit(3)|EVP_EncryptInit(3)> etc. instead of calling the
101*2175Sjp161948blowfish functions directly.
102*2175Sjp161948
103*2175Sjp161948=head1 SEE ALSO
104*2175Sjp161948
105*2175Sjp161948L<des_modes(7)|des_modes(7)>
106*2175Sjp161948
107*2175Sjp161948=head1 HISTORY
108*2175Sjp161948
109*2175Sjp161948The Blowfish functions are available in all versions of SSLeay and OpenSSL.
110*2175Sjp161948
111*2175Sjp161948=cut
112*2175Sjp161948
113