diff options
Diffstat (limited to 'src/lib/libssl/src/doc/crypto/des.pod')
-rw-r--r-- | src/lib/libssl/src/doc/crypto/des.pod | 324 |
1 files changed, 153 insertions, 171 deletions
diff --git a/src/lib/libssl/src/doc/crypto/des.pod b/src/lib/libssl/src/doc/crypto/des.pod index 99080391b1..528c73acac 100644 --- a/src/lib/libssl/src/doc/crypto/des.pod +++ b/src/lib/libssl/src/doc/crypto/des.pod | |||
@@ -2,113 +2,105 @@ | |||
2 | 2 | ||
3 | =head1 NAME | 3 | =head1 NAME |
4 | 4 | ||
5 | des_random_key, des_set_key, des_key_sched, des_set_key_checked, | 5 | DES_random_key, DES_set_key, DES_key_sched, DES_set_key_checked, |
6 | des_set_key_unchecked, des_set_odd_parity, des_is_weak_key, | 6 | DES_set_key_unchecked, DES_set_odd_parity, DES_is_weak_key, |
7 | des_ecb_encrypt, des_ecb2_encrypt, des_ecb3_encrypt, des_ncbc_encrypt, | 7 | DES_ecb_encrypt, DES_ecb2_encrypt, DES_ecb3_encrypt, DES_ncbc_encrypt, |
8 | des_cfb_encrypt, des_ofb_encrypt, des_pcbc_encrypt, des_cfb64_encrypt, | 8 | DES_cfb_encrypt, DES_ofb_encrypt, DES_pcbc_encrypt, DES_cfb64_encrypt, |
9 | des_ofb64_encrypt, des_xcbc_encrypt, des_ede2_cbc_encrypt, | 9 | DES_ofb64_encrypt, DES_xcbc_encrypt, DES_ede2_cbc_encrypt, |
10 | des_ede2_cfb64_encrypt, des_ede2_ofb64_encrypt, des_ede3_cbc_encrypt, | 10 | DES_ede2_cfb64_encrypt, DES_ede2_ofb64_encrypt, DES_ede3_cbc_encrypt, |
11 | des_ede3_cbcm_encrypt, des_ede3_cfb64_encrypt, des_ede3_ofb64_encrypt, | 11 | DES_ede3_cbcm_encrypt, DES_ede3_cfb64_encrypt, DES_ede3_ofb64_encrypt, |
12 | des_read_password, des_read_2passwords, des_read_pw_string, | 12 | DES_cbc_cksum, DES_quad_cksum, DES_string_to_key, DES_string_to_2keys, |
13 | des_cbc_cksum, des_quad_cksum, des_string_to_key, des_string_to_2keys, | 13 | DES_fcrypt, DES_crypt, DES_enc_read, DES_enc_write - DES encryption |
14 | des_fcrypt, des_crypt, des_enc_read, des_enc_write - DES encryption | ||
15 | 14 | ||
16 | =head1 SYNOPSIS | 15 | =head1 SYNOPSIS |
17 | 16 | ||
18 | #include <openssl/des.h> | 17 | #include <openssl/des.h> |
19 | 18 | ||
20 | void des_random_key(des_cblock *ret); | 19 | void DES_random_key(DES_cblock *ret); |
21 | 20 | ||
22 | int des_set_key(const_des_cblock *key, des_key_schedule schedule); | 21 | int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); |
23 | int des_key_sched(const_des_cblock *key, des_key_schedule schedule); | 22 | int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); |
24 | int des_set_key_checked(const_des_cblock *key, | 23 | int DES_set_key_checked(const_DES_cblock *key, |
25 | des_key_schedule schedule); | 24 | DES_key_schedule *schedule); |
26 | void des_set_key_unchecked(const_des_cblock *key, | 25 | void DES_set_key_unchecked(const_DES_cblock *key, |
27 | des_key_schedule schedule); | 26 | DES_key_schedule *schedule); |
28 | 27 | ||
29 | void des_set_odd_parity(des_cblock *key); | 28 | void DES_set_odd_parity(DES_cblock *key); |
30 | int des_is_weak_key(const_des_cblock *key); | 29 | int DES_is_weak_key(const_DES_cblock *key); |
31 | 30 | ||
32 | void des_ecb_encrypt(const_des_cblock *input, des_cblock *output, | 31 | void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, |
33 | des_key_schedule ks, int enc); | 32 | DES_key_schedule *ks, int enc); |
34 | void des_ecb2_encrypt(const_des_cblock *input, des_cblock *output, | 33 | void DES_ecb2_encrypt(const_DES_cblock *input, DES_cblock *output, |
35 | des_key_schedule ks1, des_key_schedule ks2, int enc); | 34 | DES_key_schedule *ks1, DES_key_schedule *ks2, int enc); |
36 | void des_ecb3_encrypt(const_des_cblock *input, des_cblock *output, | 35 | void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, |
37 | des_key_schedule ks1, des_key_schedule ks2, | 36 | DES_key_schedule *ks1, DES_key_schedule *ks2, |
38 | des_key_schedule ks3, int enc); | 37 | DES_key_schedule *ks3, int enc); |
39 | 38 | ||
40 | void des_ncbc_encrypt(const unsigned char *input, unsigned char *output, | 39 | void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, |
41 | long length, des_key_schedule schedule, des_cblock *ivec, | 40 | long length, DES_key_schedule *schedule, DES_cblock *ivec, |
42 | int enc); | 41 | int enc); |
43 | void des_cfb_encrypt(const unsigned char *in, unsigned char *out, | 42 | void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, |
44 | int numbits, long length, des_key_schedule schedule, | 43 | int numbits, long length, DES_key_schedule *schedule, |
45 | des_cblock *ivec, int enc); | 44 | DES_cblock *ivec, int enc); |
46 | void des_ofb_encrypt(const unsigned char *in, unsigned char *out, | 45 | void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, |
47 | int numbits, long length, des_key_schedule schedule, | 46 | int numbits, long length, DES_key_schedule *schedule, |
48 | des_cblock *ivec); | 47 | DES_cblock *ivec); |
49 | void des_pcbc_encrypt(const unsigned char *input, unsigned char *output, | 48 | void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, |
50 | long length, des_key_schedule schedule, des_cblock *ivec, | 49 | long length, DES_key_schedule *schedule, DES_cblock *ivec, |
51 | int enc); | 50 | int enc); |
52 | void des_cfb64_encrypt(const unsigned char *in, unsigned char *out, | 51 | void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, |
53 | long length, des_key_schedule schedule, des_cblock *ivec, | 52 | long length, DES_key_schedule *schedule, DES_cblock *ivec, |
54 | int *num, int enc); | 53 | int *num, int enc); |
55 | void des_ofb64_encrypt(const unsigned char *in, unsigned char *out, | 54 | void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, |
56 | long length, des_key_schedule schedule, des_cblock *ivec, | 55 | long length, DES_key_schedule *schedule, DES_cblock *ivec, |
57 | int *num); | 56 | int *num); |
58 | 57 | ||
59 | void des_xcbc_encrypt(const unsigned char *input, unsigned char *output, | 58 | void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, |
60 | long length, des_key_schedule schedule, des_cblock *ivec, | 59 | long length, DES_key_schedule *schedule, DES_cblock *ivec, |
61 | const_des_cblock *inw, const_des_cblock *outw, int enc); | 60 | const_DES_cblock *inw, const_DES_cblock *outw, int enc); |
62 | 61 | ||
63 | void des_ede2_cbc_encrypt(const unsigned char *input, | 62 | void DES_ede2_cbc_encrypt(const unsigned char *input, |
64 | unsigned char *output, long length, des_key_schedule ks1, | 63 | unsigned char *output, long length, DES_key_schedule *ks1, |
65 | des_key_schedule ks2, des_cblock *ivec, int enc); | 64 | DES_key_schedule *ks2, DES_cblock *ivec, int enc); |
66 | void des_ede2_cfb64_encrypt(const unsigned char *in, | 65 | void DES_ede2_cfb64_encrypt(const unsigned char *in, |
67 | unsigned char *out, long length, des_key_schedule ks1, | 66 | unsigned char *out, long length, DES_key_schedule *ks1, |
68 | des_key_schedule ks2, des_cblock *ivec, int *num, int enc); | 67 | DES_key_schedule *ks2, DES_cblock *ivec, int *num, int enc); |
69 | void des_ede2_ofb64_encrypt(const unsigned char *in, | 68 | void DES_ede2_ofb64_encrypt(const unsigned char *in, |
70 | unsigned char *out, long length, des_key_schedule ks1, | 69 | unsigned char *out, long length, DES_key_schedule *ks1, |
71 | des_key_schedule ks2, des_cblock *ivec, int *num); | 70 | DES_key_schedule *ks2, DES_cblock *ivec, int *num); |
72 | 71 | ||
73 | void des_ede3_cbc_encrypt(const unsigned char *input, | 72 | void DES_ede3_cbc_encrypt(const unsigned char *input, |
74 | unsigned char *output, long length, des_key_schedule ks1, | 73 | unsigned char *output, long length, DES_key_schedule *ks1, |
75 | des_key_schedule ks2, des_key_schedule ks3, des_cblock *ivec, | 74 | DES_key_schedule *ks2, DES_key_schedule *ks3, DES_cblock *ivec, |
76 | int enc); | 75 | int enc); |
77 | void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, | 76 | void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, |
78 | long length, des_key_schedule ks1, des_key_schedule ks2, | 77 | long length, DES_key_schedule *ks1, DES_key_schedule *ks2, |
79 | des_key_schedule ks3, des_cblock *ivec1, des_cblock *ivec2, | 78 | DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2, |
80 | int enc); | 79 | int enc); |
81 | void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, | 80 | void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, |
82 | long length, des_key_schedule ks1, des_key_schedule ks2, | 81 | long length, DES_key_schedule *ks1, DES_key_schedule *ks2, |
83 | des_key_schedule ks3, des_cblock *ivec, int *num, int enc); | 82 | DES_key_schedule *ks3, DES_cblock *ivec, int *num, int enc); |
84 | void des_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, | 83 | void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, |
85 | long length, des_key_schedule ks1, | 84 | long length, DES_key_schedule *ks1, |
86 | des_key_schedule ks2, des_key_schedule ks3, | 85 | DES_key_schedule *ks2, DES_key_schedule *ks3, |
87 | des_cblock *ivec, int *num); | 86 | DES_cblock *ivec, int *num); |
88 | 87 | ||
89 | int des_read_password(des_cblock *key, const char *prompt, int verify); | 88 | DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, |
90 | int des_read_2passwords(des_cblock *key1, des_cblock *key2, | 89 | long length, DES_key_schedule *schedule, |
91 | const char *prompt, int verify); | 90 | const_DES_cblock *ivec); |
92 | int des_read_pw_string(char *buf, int length, const char *prompt, | 91 | DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], |
93 | int verify); | 92 | long length, int out_count, DES_cblock *seed); |
94 | 93 | void DES_string_to_key(const char *str, DES_cblock *key); | |
95 | DES_LONG des_cbc_cksum(const unsigned char *input, des_cblock *output, | 94 | void DES_string_to_2keys(const char *str, DES_cblock *key1, |
96 | long length, des_key_schedule schedule, | 95 | DES_cblock *key2); |
97 | const_des_cblock *ivec); | 96 | |
98 | DES_LONG des_quad_cksum(const unsigned char *input, des_cblock output[], | 97 | char *DES_fcrypt(const char *buf, const char *salt, char *ret); |
99 | long length, int out_count, des_cblock *seed); | 98 | char *DES_crypt(const char *buf, const char *salt); |
100 | void des_string_to_key(const char *str, des_cblock *key); | 99 | |
101 | void des_string_to_2keys(const char *str, des_cblock *key1, | 100 | int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, |
102 | des_cblock *key2); | 101 | DES_cblock *iv); |
103 | 102 | int DES_enc_write(int fd, const void *buf, int len, | |
104 | char *des_fcrypt(const char *buf, const char *salt, char *ret); | 103 | DES_key_schedule *sched, DES_cblock *iv); |
105 | char *des_crypt(const char *buf, const char *salt); | ||
106 | char *crypt(const char *buf, const char *salt); | ||
107 | |||
108 | int des_enc_read(int fd, void *buf, int len, des_key_schedule sched, | ||
109 | des_cblock *iv); | ||
110 | int des_enc_write(int fd, const void *buf, int len, | ||
111 | des_key_schedule sched, des_cblock *iv); | ||
112 | 104 | ||
113 | =head1 DESCRIPTION | 105 | =head1 DESCRIPTION |
114 | 106 | ||
@@ -116,56 +108,52 @@ This library contains a fast implementation of the DES encryption | |||
116 | algorithm. | 108 | algorithm. |
117 | 109 | ||
118 | There are two phases to the use of DES encryption. The first is the | 110 | There are two phases to the use of DES encryption. The first is the |
119 | generation of a I<des_key_schedule> from a key, the second is the | 111 | generation of a I<DES_key_schedule> from a key, the second is the |
120 | actual encryption. A DES key is of type I<des_cblock>. This type is | 112 | actual encryption. A DES key is of type I<DES_cblock>. This type is |
121 | consists of 8 bytes with odd parity. The least significant bit in | 113 | consists of 8 bytes with odd parity. The least significant bit in |
122 | each byte is the parity bit. The key schedule is an expanded form of | 114 | each byte is the parity bit. The key schedule is an expanded form of |
123 | the key; it is used to speed the encryption process. | 115 | the key; it is used to speed the encryption process. |
124 | 116 | ||
125 | des_random_key() generates a random key. The PRNG must be seeded | 117 | DES_random_key() generates a random key. The PRNG must be seeded |
126 | prior to using this function (see L<rand(3)|rand(3)>; for backward | 118 | prior to using this function (see L<rand(3)|rand(3)>). If the PRNG |
127 | compatibility the function des_random_seed() is available as well). | 119 | could not generate a secure key, 0 is returned. |
128 | If the PRNG could not generate a secure key, 0 is returned. In | ||
129 | earlier versions of the library, des_random_key() did not generate | ||
130 | secure keys. | ||
131 | 120 | ||
132 | Before a DES key can be used, it must be converted into the | 121 | Before a DES key can be used, it must be converted into the |
133 | architecture dependent I<des_key_schedule> via the | 122 | architecture dependent I<DES_key_schedule> via the |
134 | des_set_key_checked() or des_set_key_unchecked() function. | 123 | DES_set_key_checked() or DES_set_key_unchecked() function. |
135 | 124 | ||
136 | des_set_key_checked() will check that the key passed is of odd parity | 125 | DES_set_key_checked() will check that the key passed is of odd parity |
137 | and is not a week or semi-weak key. If the parity is wrong, then -1 | 126 | and is not a week or semi-weak key. If the parity is wrong, then -1 |
138 | is returned. If the key is a weak key, then -2 is returned. If an | 127 | is returned. If the key is a weak key, then -2 is returned. If an |
139 | error is returned, the key schedule is not generated. | 128 | error is returned, the key schedule is not generated. |
140 | 129 | ||
141 | des_set_key() (called des_key_sched() in the MIT library) works like | 130 | DES_set_key() works like |
142 | des_set_key_checked() if the I<des_check_key> flag is non-zero, | 131 | DES_set_key_checked() if the I<DES_check_key> flag is non-zero, |
143 | otherwise like des_set_key_unchecked(). These functions are available | 132 | otherwise like DES_set_key_unchecked(). These functions are available |
144 | for compatibility; it is recommended to use a function that does not | 133 | for compatibility; it is recommended to use a function that does not |
145 | depend on a global variable. | 134 | depend on a global variable. |
146 | 135 | ||
147 | des_set_odd_parity() (called des_fixup_key_parity() in the MIT | 136 | DES_set_odd_parity() sets the parity of the passed I<key> to odd. |
148 | library) sets the parity of the passed I<key> to odd. | ||
149 | 137 | ||
150 | des_is_weak_key() returns 1 is the passed key is a weak key, 0 if it | 138 | DES_is_weak_key() returns 1 is the passed key is a weak key, 0 if it |
151 | is ok. The probability that a randomly generated key is weak is | 139 | is ok. The probability that a randomly generated key is weak is |
152 | 1/2^52, so it is not really worth checking for them. | 140 | 1/2^52, so it is not really worth checking for them. |
153 | 141 | ||
154 | The following routines mostly operate on an input and output stream of | 142 | The following routines mostly operate on an input and output stream of |
155 | I<des_cblock>s. | 143 | I<DES_cblock>s. |
156 | 144 | ||
157 | des_ecb_encrypt() is the basic DES encryption routine that encrypts or | 145 | DES_ecb_encrypt() is the basic DES encryption routine that encrypts or |
158 | decrypts a single 8-byte I<des_cblock> in I<electronic code book> | 146 | decrypts a single 8-byte I<DES_cblock> in I<electronic code book> |
159 | (ECB) mode. It always transforms the input data, pointed to by | 147 | (ECB) mode. It always transforms the input data, pointed to by |
160 | I<input>, into the output data, pointed to by the I<output> argument. | 148 | I<input>, into the output data, pointed to by the I<output> argument. |
161 | If the I<encrypt> argument is non-zero (DES_ENCRYPT), the I<input> | 149 | If the I<encrypt> argument is non-zero (DES_ENCRYPT), the I<input> |
162 | (cleartext) is encrypted in to the I<output> (ciphertext) using the | 150 | (cleartext) is encrypted in to the I<output> (ciphertext) using the |
163 | key_schedule specified by the I<schedule> argument, previously set via | 151 | key_schedule specified by the I<schedule> argument, previously set via |
164 | I<des_set_key>. If I<encrypt> is zero (DES_DECRYPT), the I<input> (now | 152 | I<DES_set_key>. If I<encrypt> is zero (DES_DECRYPT), the I<input> (now |
165 | ciphertext) is decrypted into the I<output> (now cleartext). Input | 153 | ciphertext) is decrypted into the I<output> (now cleartext). Input |
166 | and output may overlap. des_ecb_encrypt() does not return a value. | 154 | and output may overlap. DES_ecb_encrypt() does not return a value. |
167 | 155 | ||
168 | des_ecb3_encrypt() encrypts/decrypts the I<input> block by using | 156 | DES_ecb3_encrypt() encrypts/decrypts the I<input> block by using |
169 | three-key Triple-DES encryption in ECB mode. This involves encrypting | 157 | three-key Triple-DES encryption in ECB mode. This involves encrypting |
170 | the input with I<ks1>, decrypting with the key schedule I<ks2>, and | 158 | the input with I<ks1>, decrypting with the key schedule I<ks2>, and |
171 | then encrypting with I<ks3>. This routine greatly reduces the chances | 159 | then encrypting with I<ks3>. This routine greatly reduces the chances |
@@ -173,10 +161,10 @@ of brute force breaking of DES and has the advantage of if I<ks1>, | |||
173 | I<ks2> and I<ks3> are the same, it is equivalent to just encryption | 161 | I<ks2> and I<ks3> are the same, it is equivalent to just encryption |
174 | using ECB mode and I<ks1> as the key. | 162 | using ECB mode and I<ks1> as the key. |
175 | 163 | ||
176 | The macro des_ecb2_encrypt() is provided to perform two-key Triple-DES | 164 | The macro DES_ecb2_encrypt() is provided to perform two-key Triple-DES |
177 | encryption by using I<ks1> for the final encryption. | 165 | encryption by using I<ks1> for the final encryption. |
178 | 166 | ||
179 | des_ncbc_encrypt() encrypts/decrypts using the I<cipher-block-chaining> | 167 | DES_ncbc_encrypt() encrypts/decrypts using the I<cipher-block-chaining> |
180 | (CBC) mode of DES. If the I<encrypt> argument is non-zero, the | 168 | (CBC) mode of DES. If the I<encrypt> argument is non-zero, the |
181 | routine cipher-block-chain encrypts the cleartext data pointed to by | 169 | routine cipher-block-chain encrypts the cleartext data pointed to by |
182 | the I<input> argument into the ciphertext pointed to by the I<output> | 170 | the I<input> argument into the ciphertext pointed to by the I<output> |
@@ -186,24 +174,24 @@ I<length> argument is not an integral multiple of eight bytes, the | |||
186 | last block is copied to a temporary area and zero filled. The output | 174 | last block is copied to a temporary area and zero filled. The output |
187 | is always an integral multiple of eight bytes. | 175 | is always an integral multiple of eight bytes. |
188 | 176 | ||
189 | des_xcbc_encrypt() is RSA's DESX mode of DES. It uses I<inw> and | 177 | DES_xcbc_encrypt() is RSA's DESX mode of DES. It uses I<inw> and |
190 | I<outw> to 'whiten' the encryption. I<inw> and I<outw> are secret | 178 | I<outw> to 'whiten' the encryption. I<inw> and I<outw> are secret |
191 | (unlike the iv) and are as such, part of the key. So the key is sort | 179 | (unlike the iv) and are as such, part of the key. So the key is sort |
192 | of 24 bytes. This is much better than CBC DES. | 180 | of 24 bytes. This is much better than CBC DES. |
193 | 181 | ||
194 | des_ede3_cbc_encrypt() implements outer triple CBC DES encryption with | 182 | DES_ede3_cbc_encrypt() implements outer triple CBC DES encryption with |
195 | three keys. This means that each DES operation inside the CBC mode is | 183 | three keys. This means that each DES operation inside the CBC mode is |
196 | really an C<C=E(ks3,D(ks2,E(ks1,M)))>. This mode is used by SSL. | 184 | really an C<C=E(ks3,D(ks2,E(ks1,M)))>. This mode is used by SSL. |
197 | 185 | ||
198 | The des_ede2_cbc_encrypt() macro implements two-key Triple-DES by | 186 | The DES_ede2_cbc_encrypt() macro implements two-key Triple-DES by |
199 | reusing I<ks1> for the final encryption. C<C=E(ks1,D(ks2,E(ks1,M)))>. | 187 | reusing I<ks1> for the final encryption. C<C=E(ks1,D(ks2,E(ks1,M)))>. |
200 | This form of Triple-DES is used by the RSAREF library. | 188 | This form of Triple-DES is used by the RSAREF library. |
201 | 189 | ||
202 | des_pcbc_encrypt() encrypt/decrypts using the propagating cipher block | 190 | DES_pcbc_encrypt() encrypt/decrypts using the propagating cipher block |
203 | chaining mode used by Kerberos v4. Its parameters are the same as | 191 | chaining mode used by Kerberos v4. Its parameters are the same as |
204 | des_ncbc_encrypt(). | 192 | DES_ncbc_encrypt(). |
205 | 193 | ||
206 | des_cfb_encrypt() encrypt/decrypts using cipher feedback mode. This | 194 | DES_cfb_encrypt() encrypt/decrypts using cipher feedback mode. This |
207 | method takes an array of characters as input and outputs and array of | 195 | method takes an array of characters as input and outputs and array of |
208 | characters. It does not require any padding to 8 character groups. | 196 | characters. It does not require any padding to 8 character groups. |
209 | Note: the I<ivec> variable is changed and the new changed value needs to | 197 | Note: the I<ivec> variable is changed and the new changed value needs to |
@@ -211,7 +199,7 @@ be passed to the next call to this function. Since this function runs | |||
211 | a complete DES ECB encryption per I<numbits>, this function is only | 199 | a complete DES ECB encryption per I<numbits>, this function is only |
212 | suggested for use when sending small numbers of characters. | 200 | suggested for use when sending small numbers of characters. |
213 | 201 | ||
214 | des_cfb64_encrypt() | 202 | DES_cfb64_encrypt() |
215 | implements CFB mode of DES with 64bit feedback. Why is this | 203 | implements CFB mode of DES with 64bit feedback. Why is this |
216 | useful you ask? Because this routine will allow you to encrypt an | 204 | useful you ask? Because this routine will allow you to encrypt an |
217 | arbitrary number of bytes, no 8 byte padding. Each call to this | 205 | arbitrary number of bytes, no 8 byte padding. Each call to this |
@@ -219,10 +207,10 @@ routine will encrypt the input bytes to output and then update ivec | |||
219 | and num. num contains 'how far' we are though ivec. If this does | 207 | and num. num contains 'how far' we are though ivec. If this does |
220 | not make much sense, read more about cfb mode of DES :-). | 208 | not make much sense, read more about cfb mode of DES :-). |
221 | 209 | ||
222 | des_ede3_cfb64_encrypt() and des_ede2_cfb64_encrypt() is the same as | 210 | DES_ede3_cfb64_encrypt() and DES_ede2_cfb64_encrypt() is the same as |
223 | des_cfb64_encrypt() except that Triple-DES is used. | 211 | DES_cfb64_encrypt() except that Triple-DES is used. |
224 | 212 | ||
225 | des_ofb_encrypt() encrypts using output feedback mode. This method | 213 | DES_ofb_encrypt() encrypts using output feedback mode. This method |
226 | takes an array of characters as input and outputs and array of | 214 | takes an array of characters as input and outputs and array of |
227 | characters. It does not require any padding to 8 character groups. | 215 | characters. It does not require any padding to 8 character groups. |
228 | Note: the I<ivec> variable is changed and the new changed value needs to | 216 | Note: the I<ivec> variable is changed and the new changed value needs to |
@@ -230,39 +218,22 @@ be passed to the next call to this function. Since this function runs | |||
230 | a complete DES ECB encryption per numbits, this function is only | 218 | a complete DES ECB encryption per numbits, this function is only |
231 | suggested for use when sending small numbers of characters. | 219 | suggested for use when sending small numbers of characters. |
232 | 220 | ||
233 | des_ofb64_encrypt() is the same as des_cfb64_encrypt() using Output | 221 | DES_ofb64_encrypt() is the same as DES_cfb64_encrypt() using Output |
234 | Feed Back mode. | 222 | Feed Back mode. |
235 | 223 | ||
236 | des_ede3_ofb64_encrypt() and des_ede2_ofb64_encrypt() is the same as | 224 | DES_ede3_ofb64_encrypt() and DES_ede2_ofb64_encrypt() is the same as |
237 | des_ofb64_encrypt(), using Triple-DES. | 225 | DES_ofb64_encrypt(), using Triple-DES. |
238 | 226 | ||
239 | The following functions are included in the DES library for | 227 | The following functions are included in the DES library for |
240 | compatibility with the MIT Kerberos library. des_read_pw_string() | 228 | compatibility with the MIT Kerberos library. |
241 | is also available under the name EVP_read_pw_string(). | 229 | |
242 | 230 | DES_cbc_cksum() produces an 8 byte checksum based on the input stream | |
243 | des_read_pw_string() writes the string specified by I<prompt> to | ||
244 | standard output, turns echo off and reads in input string from the | ||
245 | terminal. The string is returned in I<buf>, which must have space for | ||
246 | at least I<length> bytes. If I<verify> is set, the user is asked for | ||
247 | the password twice and unless the two copies match, an error is | ||
248 | returned. A return code of -1 indicates a system error, 1 failure due | ||
249 | to use interaction, and 0 is success. | ||
250 | |||
251 | des_read_password() does the same and converts the password to a DES | ||
252 | key by calling des_string_to_key(); des_read_2password() operates in | ||
253 | the same way as des_read_password() except that it generates two keys | ||
254 | by using the des_string_to_2key() function. des_string_to_key() is | ||
255 | available for backward compatibility with the MIT library. New | ||
256 | applications should use a cryptographic hash function. The same | ||
257 | applies for des_string_to_2key(). | ||
258 | |||
259 | des_cbc_cksum() produces an 8 byte checksum based on the input stream | ||
260 | (via CBC encryption). The last 4 bytes of the checksum are returned | 231 | (via CBC encryption). The last 4 bytes of the checksum are returned |
261 | and the complete 8 bytes are placed in I<output>. This function is | 232 | and the complete 8 bytes are placed in I<output>. This function is |
262 | used by Kerberos v4. Other applications should use | 233 | used by Kerberos v4. Other applications should use |
263 | L<EVP_DigestInit(3)|EVP_DigestInit(3)> etc. instead. | 234 | L<EVP_DigestInit(3)|EVP_DigestInit(3)> etc. instead. |
264 | 235 | ||
265 | des_quad_cksum() is a Kerberos v4 function. It returns a 4 byte | 236 | DES_quad_cksum() is a Kerberos v4 function. It returns a 4 byte |
266 | checksum from the input bytes. The algorithm can be iterated over the | 237 | checksum from the input bytes. The algorithm can be iterated over the |
267 | input, depending on I<out_count>, 1, 2, 3 or 4 times. If I<output> is | 238 | input, depending on I<out_count>, 1, 2, 3 or 4 times. If I<output> is |
268 | non-NULL, the 8 bytes generated by each pass are written into | 239 | non-NULL, the 8 bytes generated by each pass are written into |
@@ -270,19 +241,19 @@ I<output>. | |||
270 | 241 | ||
271 | The following are DES-based transformations: | 242 | The following are DES-based transformations: |
272 | 243 | ||
273 | des_fcrypt() is a fast version of the Unix crypt(3) function. This | 244 | DES_fcrypt() is a fast version of the Unix crypt(3) function. This |
274 | version takes only a small amount of space relative to other fast | 245 | version takes only a small amount of space relative to other fast |
275 | crypt() implementations. This is different to the normal crypt in | 246 | crypt() implementations. This is different to the normal crypt in |
276 | that the third parameter is the buffer that the return value is | 247 | that the third parameter is the buffer that the return value is |
277 | written into. It needs to be at least 14 bytes long. This function | 248 | written into. It needs to be at least 14 bytes long. This function |
278 | is thread safe, unlike the normal crypt. | 249 | is thread safe, unlike the normal crypt. |
279 | 250 | ||
280 | des_crypt() is a faster replacement for the normal system crypt(). | 251 | DES_crypt() is a faster replacement for the normal system crypt(). |
281 | This function calls des_fcrypt() with a static array passed as the | 252 | This function calls DES_fcrypt() with a static array passed as the |
282 | third parameter. This emulates the normal non-thread safe semantics | 253 | third parameter. This emulates the normal non-thread safe semantics |
283 | of crypt(3). | 254 | of crypt(3). |
284 | 255 | ||
285 | des_enc_write() writes I<len> bytes to file descriptor I<fd> from | 256 | DES_enc_write() writes I<len> bytes to file descriptor I<fd> from |
286 | buffer I<buf>. The data is encrypted via I<pcbc_encrypt> (default) | 257 | buffer I<buf>. The data is encrypted via I<pcbc_encrypt> (default) |
287 | using I<sched> for the key and I<iv> as a starting vector. The actual | 258 | using I<sched> for the key and I<iv> as a starting vector. The actual |
288 | data send down I<fd> consists of 4 bytes (in network byte order) | 259 | data send down I<fd> consists of 4 bytes (in network byte order) |
@@ -290,40 +261,40 @@ containing the length of the following encrypted data. The encrypted | |||
290 | data then follows, padded with random data out to a multiple of 8 | 261 | data then follows, padded with random data out to a multiple of 8 |
291 | bytes. | 262 | bytes. |
292 | 263 | ||
293 | des_enc_read() is used to read I<len> bytes from file descriptor | 264 | DES_enc_read() is used to read I<len> bytes from file descriptor |
294 | I<fd> into buffer I<buf>. The data being read from I<fd> is assumed to | 265 | I<fd> into buffer I<buf>. The data being read from I<fd> is assumed to |
295 | have come from des_enc_write() and is decrypted using I<sched> for | 266 | have come from DES_enc_write() and is decrypted using I<sched> for |
296 | the key schedule and I<iv> for the initial vector. | 267 | the key schedule and I<iv> for the initial vector. |
297 | 268 | ||
298 | B<Warning:> The data format used by des_enc_write() and des_enc_read() | 269 | B<Warning:> The data format used by DES_enc_write() and DES_enc_read() |
299 | has a cryptographic weakness: When asked to write more than MAXWRITE | 270 | has a cryptographic weakness: When asked to write more than MAXWRITE |
300 | bytes, des_enc_write() will split the data into several chunks that | 271 | bytes, DES_enc_write() will split the data into several chunks that |
301 | are all encrypted using the same IV. So don't use these functions | 272 | are all encrypted using the same IV. So don't use these functions |
302 | unless you are sure you know what you do (in which case you might not | 273 | unless you are sure you know what you do (in which case you might not |
303 | want to use them anyway). They cannot handle non-blocking sockets. | 274 | want to use them anyway). They cannot handle non-blocking sockets. |
304 | des_enc_read() uses an internal state and thus cannot be used on | 275 | DES_enc_read() uses an internal state and thus cannot be used on |
305 | multiple files. | 276 | multiple files. |
306 | 277 | ||
307 | I<des_rw_mode> is used to specify the encryption mode to use with | 278 | I<DES_rw_mode> is used to specify the encryption mode to use with |
308 | des_enc_read() and des_end_write(). If set to I<DES_PCBC_MODE> (the | 279 | DES_enc_read() and DES_end_write(). If set to I<DES_PCBC_MODE> (the |
309 | default), des_pcbc_encrypt is used. If set to I<DES_CBC_MODE> | 280 | default), DES_pcbc_encrypt is used. If set to I<DES_CBC_MODE> |
310 | des_cbc_encrypt is used. | 281 | DES_cbc_encrypt is used. |
311 | 282 | ||
312 | =head1 NOTES | 283 | =head1 NOTES |
313 | 284 | ||
314 | Single-key DES is insecure due to its short key size. ECB mode is | 285 | Single-key DES is insecure due to its short key size. ECB mode is |
315 | not suitable for most applications; see L<des_modes(7)|des_modes(7)>. | 286 | not suitable for most applications; see L<DES_modes(7)|DES_modes(7)>. |
316 | 287 | ||
317 | The L<evp(3)|evp(3)> library provides higher-level encryption functions. | 288 | The L<evp(3)|evp(3)> library provides higher-level encryption functions. |
318 | 289 | ||
319 | =head1 BUGS | 290 | =head1 BUGS |
320 | 291 | ||
321 | des_3cbc_encrypt() is flawed and must not be used in applications. | 292 | DES_3cbc_encrypt() is flawed and must not be used in applications. |
322 | 293 | ||
323 | des_cbc_encrypt() does not modify B<ivec>; use des_ncbc_encrypt() | 294 | DES_cbc_encrypt() does not modify B<ivec>; use DES_ncbc_encrypt() |
324 | instead. | 295 | instead. |
325 | 296 | ||
326 | des_cfb_encrypt() and des_ofb_encrypt() operates on input of 8 bits. | 297 | DES_cfb_encrypt() and DES_ofb_encrypt() operates on input of 8 bits. |
327 | What this means is that if you set numbits to 12, and length to 2, the | 298 | What this means is that if you set numbits to 12, and length to 2, the |
328 | first 12 bits will come from the 1st input byte and the low half of | 299 | first 12 bits will come from the 1st input byte and the low half of |
329 | the second input byte. The second 12 bits will have the low 8 bits | 300 | the second input byte. The second 12 bits will have the low 8 bits |
@@ -333,8 +304,9 @@ implemented this way because most people will be using a multiple of 8 | |||
333 | and because once you get into pulling bytes input bytes apart things | 304 | and because once you get into pulling bytes input bytes apart things |
334 | get ugly! | 305 | get ugly! |
335 | 306 | ||
336 | des_read_pw_string() is the most machine/OS dependent function and | 307 | DES_string_to_key() is available for backward compatibility with the |
337 | normally generates the most problems when porting this code. | 308 | MIT library. New applications should use a cryptographic hash function. |
309 | The same applies for DES_string_to_2key(). | ||
338 | 310 | ||
339 | =head1 CONFORMING TO | 311 | =head1 CONFORMING TO |
340 | 312 | ||
@@ -349,10 +321,20 @@ crypt(3), L<des_modes(7)|des_modes(7)>, L<evp(3)|evp(3)>, L<rand(3)|rand(3)> | |||
349 | 321 | ||
350 | =head1 HISTORY | 322 | =head1 HISTORY |
351 | 323 | ||
324 | In OpenSSL 0.9.7, all des_ functions were renamed to DES_ to avoid | ||
325 | clashes with older versions of libdes. Compatibility des_ functions | ||
326 | are provided for a short while, as well as crypt(). | ||
327 | Declarations for these are in <openssl/des_old.h>. There is no DES_ | ||
328 | variant for des_random_seed(). | ||
329 | This will happen to other functions | ||
330 | as well if they are deemed redundant (des_random_seed() just calls | ||
331 | RAND_seed() and is present for backward compatibility only), buggy or | ||
332 | already scheduled for removal. | ||
333 | |||
352 | des_cbc_cksum(), des_cbc_encrypt(), des_ecb_encrypt(), | 334 | des_cbc_cksum(), des_cbc_encrypt(), des_ecb_encrypt(), |
353 | des_is_weak_key(), des_key_sched(), des_pcbc_encrypt(), | 335 | des_is_weak_key(), des_key_sched(), des_pcbc_encrypt(), |
354 | des_quad_cksum(), des_random_key(), des_read_password() and | 336 | des_quad_cksum(), des_random_key() and des_string_to_key() |
355 | des_string_to_key() are available in the MIT Kerberos library; | 337 | are available in the MIT Kerberos library; |
356 | des_check_key_parity(), des_fixup_key_parity() and des_is_weak_key() | 338 | des_check_key_parity(), des_fixup_key_parity() and des_is_weak_key() |
357 | are available in newer versions of that library. | 339 | are available in newer versions of that library. |
358 | 340 | ||