1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
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,
|
---|
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,
|
---|
9 | DES_ofb64_encrypt, DES_xcbc_encrypt, DES_ede2_cbc_encrypt,
|
---|
10 | DES_ede2_cfb64_encrypt, DES_ede2_ofb64_encrypt, DES_ede3_cbc_encrypt,
|
---|
11 | DES_ede3_cfb64_encrypt, DES_ede3_ofb64_encrypt,
|
---|
12 | DES_cbc_cksum, DES_quad_cksum, DES_string_to_key, DES_string_to_2keys,
|
---|
13 | DES_fcrypt, DES_crypt - DES encryption
|
---|
14 |
|
---|
15 | =head1 SYNOPSIS
|
---|
16 |
|
---|
17 | #include <openssl/des.h>
|
---|
18 |
|
---|
19 | void DES_random_key(DES_cblock *ret);
|
---|
20 |
|
---|
21 | int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule);
|
---|
22 | int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule);
|
---|
23 | int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule);
|
---|
24 | void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule);
|
---|
25 |
|
---|
26 | void DES_set_odd_parity(DES_cblock *key);
|
---|
27 | int DES_is_weak_key(const_DES_cblock *key);
|
---|
28 |
|
---|
29 | void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
|
---|
30 | DES_key_schedule *ks, int enc);
|
---|
31 | void DES_ecb2_encrypt(const_DES_cblock *input, DES_cblock *output,
|
---|
32 | DES_key_schedule *ks1, DES_key_schedule *ks2, int enc);
|
---|
33 | void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
|
---|
34 | DES_key_schedule *ks1, DES_key_schedule *ks2,
|
---|
35 | DES_key_schedule *ks3, int enc);
|
---|
36 |
|
---|
37 | void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output,
|
---|
38 | long length, DES_key_schedule *schedule, DES_cblock *ivec,
|
---|
39 | int enc);
|
---|
40 | void DES_cfb_encrypt(const unsigned char *in, unsigned char *out,
|
---|
41 | int numbits, long length, DES_key_schedule *schedule,
|
---|
42 | DES_cblock *ivec, int enc);
|
---|
43 | void DES_ofb_encrypt(const unsigned char *in, unsigned char *out,
|
---|
44 | int numbits, long length, DES_key_schedule *schedule,
|
---|
45 | DES_cblock *ivec);
|
---|
46 | void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
|
---|
47 | long length, DES_key_schedule *schedule, DES_cblock *ivec,
|
---|
48 | int enc);
|
---|
49 | void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
50 | long length, DES_key_schedule *schedule, DES_cblock *ivec,
|
---|
51 | int *num, int enc);
|
---|
52 | void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
53 | long length, DES_key_schedule *schedule, DES_cblock *ivec,
|
---|
54 | int *num);
|
---|
55 |
|
---|
56 | void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output,
|
---|
57 | long length, DES_key_schedule *schedule, DES_cblock *ivec,
|
---|
58 | const_DES_cblock *inw, const_DES_cblock *outw, int enc);
|
---|
59 |
|
---|
60 | void DES_ede2_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
---|
61 | long length, DES_key_schedule *ks1,
|
---|
62 | DES_key_schedule *ks2, DES_cblock *ivec, int enc);
|
---|
63 | void DES_ede2_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
64 | long length, DES_key_schedule *ks1,
|
---|
65 | DES_key_schedule *ks2, DES_cblock *ivec,
|
---|
66 | int *num, int enc);
|
---|
67 | void DES_ede2_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
68 | long length, DES_key_schedule *ks1,
|
---|
69 | DES_key_schedule *ks2, DES_cblock *ivec, int *num);
|
---|
70 |
|
---|
71 | void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
---|
72 | long length, DES_key_schedule *ks1,
|
---|
73 | DES_key_schedule *ks2, DES_key_schedule *ks3,
|
---|
74 | DES_cblock *ivec, int enc);
|
---|
75 | void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
76 | long length, DES_key_schedule *ks1,
|
---|
77 | DES_key_schedule *ks2, DES_key_schedule *ks3,
|
---|
78 | DES_cblock *ivec, int *num, int enc);
|
---|
79 | void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out,
|
---|
80 | long length, DES_key_schedule *ks1,
|
---|
81 | DES_key_schedule *ks2, DES_key_schedule *ks3,
|
---|
82 | DES_cblock *ivec, int *num);
|
---|
83 |
|
---|
84 | DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output,
|
---|
85 | long length, DES_key_schedule *schedule,
|
---|
86 | const_DES_cblock *ivec);
|
---|
87 | DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[],
|
---|
88 | long length, int out_count, DES_cblock *seed);
|
---|
89 | void DES_string_to_key(const char *str, DES_cblock *key);
|
---|
90 | void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2);
|
---|
91 |
|
---|
92 | char *DES_fcrypt(const char *buf, const char *salt, char *ret);
|
---|
93 | char *DES_crypt(const char *buf, const char *salt);
|
---|
94 |
|
---|
95 | =head1 DESCRIPTION
|
---|
96 |
|
---|
97 | This library contains a fast implementation of the DES encryption
|
---|
98 | algorithm.
|
---|
99 |
|
---|
100 | There are two phases to the use of DES encryption. The first is the
|
---|
101 | generation of a I<DES_key_schedule> from a key, the second is the
|
---|
102 | actual encryption. A DES key is of type I<DES_cblock>. This type
|
---|
103 | consists of 8 bytes with odd parity. The least significant bit in
|
---|
104 | each byte is the parity bit. The key schedule is an expanded form of
|
---|
105 | the key; it is used to speed the encryption process.
|
---|
106 |
|
---|
107 | DES_random_key() generates a random key. The random generator must be
|
---|
108 | seeded when calling this function.
|
---|
109 | If the automatic seeding or reseeding of the OpenSSL CSPRNG fails due to
|
---|
110 | external circumstances (see L<RAND(7)>), the operation will fail.
|
---|
111 | If the function fails, 0 is returned.
|
---|
112 |
|
---|
113 | Before a DES key can be used, it must be converted into the
|
---|
114 | architecture dependent I<DES_key_schedule> via the
|
---|
115 | DES_set_key_checked() or DES_set_key_unchecked() function.
|
---|
116 |
|
---|
117 | DES_set_key_checked() will check that the key passed is of odd parity
|
---|
118 | and is not a weak or semi-weak key. If the parity is wrong, then -1
|
---|
119 | is returned. If the key is a weak key, then -2 is returned. If an
|
---|
120 | error is returned, the key schedule is not generated.
|
---|
121 |
|
---|
122 | DES_set_key() works like
|
---|
123 | DES_set_key_checked() if the I<DES_check_key> flag is nonzero,
|
---|
124 | otherwise like DES_set_key_unchecked(). These functions are available
|
---|
125 | for compatibility; it is recommended to use a function that does not
|
---|
126 | depend on a global variable.
|
---|
127 |
|
---|
128 | DES_set_odd_parity() sets the parity of the passed I<key> to odd.
|
---|
129 |
|
---|
130 | DES_is_weak_key() returns 1 if the passed key is a weak key, 0 if it
|
---|
131 | is ok.
|
---|
132 |
|
---|
133 | The following routines mostly operate on an input and output stream of
|
---|
134 | I<DES_cblock>s.
|
---|
135 |
|
---|
136 | DES_ecb_encrypt() is the basic DES encryption routine that encrypts or
|
---|
137 | decrypts a single 8-byte I<DES_cblock> in I<electronic code book>
|
---|
138 | (ECB) mode. It always transforms the input data, pointed to by
|
---|
139 | I<input>, into the output data, pointed to by the I<output> argument.
|
---|
140 | If the I<encrypt> argument is nonzero (DES_ENCRYPT), the I<input>
|
---|
141 | (cleartext) is encrypted in to the I<output> (ciphertext) using the
|
---|
142 | key_schedule specified by the I<schedule> argument, previously set via
|
---|
143 | I<DES_set_key>. If I<encrypt> is zero (DES_DECRYPT), the I<input> (now
|
---|
144 | ciphertext) is decrypted into the I<output> (now cleartext). Input
|
---|
145 | and output may overlap. DES_ecb_encrypt() does not return a value.
|
---|
146 |
|
---|
147 | DES_ecb3_encrypt() encrypts/decrypts the I<input> block by using
|
---|
148 | three-key Triple-DES encryption in ECB mode. This involves encrypting
|
---|
149 | the input with I<ks1>, decrypting with the key schedule I<ks2>, and
|
---|
150 | then encrypting with I<ks3>. This routine greatly reduces the chances
|
---|
151 | of brute force breaking of DES and has the advantage of if I<ks1>,
|
---|
152 | I<ks2> and I<ks3> are the same, it is equivalent to just encryption
|
---|
153 | using ECB mode and I<ks1> as the key.
|
---|
154 |
|
---|
155 | The macro DES_ecb2_encrypt() is provided to perform two-key Triple-DES
|
---|
156 | encryption by using I<ks1> for the final encryption.
|
---|
157 |
|
---|
158 | DES_ncbc_encrypt() encrypts/decrypts using the I<cipher-block-chaining>
|
---|
159 | (CBC) mode of DES. If the I<encrypt> argument is nonzero, the
|
---|
160 | routine cipher-block-chain encrypts the cleartext data pointed to by
|
---|
161 | the I<input> argument into the ciphertext pointed to by the I<output>
|
---|
162 | argument, using the key schedule provided by the I<schedule> argument,
|
---|
163 | and initialization vector provided by the I<ivec> argument. If the
|
---|
164 | I<length> argument is not an integral multiple of eight bytes, the
|
---|
165 | last block is copied to a temporary area and zero filled. The output
|
---|
166 | is always an integral multiple of eight bytes.
|
---|
167 |
|
---|
168 | DES_xcbc_encrypt() is RSA's DESX mode of DES. It uses I<inw> and
|
---|
169 | I<outw> to 'whiten' the encryption. I<inw> and I<outw> are secret
|
---|
170 | (unlike the iv) and are as such, part of the key. So the key is sort
|
---|
171 | of 24 bytes. This is much better than CBC DES.
|
---|
172 |
|
---|
173 | DES_ede3_cbc_encrypt() implements outer triple CBC DES encryption with
|
---|
174 | three keys. This means that each DES operation inside the CBC mode is
|
---|
175 | C<C=E(ks3,D(ks2,E(ks1,M)))>. This mode is used by SSL.
|
---|
176 |
|
---|
177 | The DES_ede2_cbc_encrypt() macro implements two-key Triple-DES by
|
---|
178 | reusing I<ks1> for the final encryption. C<C=E(ks1,D(ks2,E(ks1,M)))>.
|
---|
179 | This form of Triple-DES is used by the RSAREF library.
|
---|
180 |
|
---|
181 | DES_pcbc_encrypt() encrypts/decrypts using the propagating cipher block
|
---|
182 | chaining mode used by Kerberos v4. Its parameters are the same as
|
---|
183 | DES_ncbc_encrypt().
|
---|
184 |
|
---|
185 | DES_cfb_encrypt() encrypts/decrypts using cipher feedback mode. This
|
---|
186 | method takes an array of characters as input and outputs an array of
|
---|
187 | characters. It does not require any padding to 8 character groups.
|
---|
188 | Note: the I<ivec> variable is changed and the new changed value needs to
|
---|
189 | be passed to the next call to this function. Since this function runs
|
---|
190 | a complete DES ECB encryption per I<numbits>, this function is only
|
---|
191 | suggested for use when sending a small number of characters.
|
---|
192 |
|
---|
193 | DES_cfb64_encrypt()
|
---|
194 | implements CFB mode of DES with 64-bit feedback. Why is this
|
---|
195 | useful you ask? Because this routine will allow you to encrypt an
|
---|
196 | arbitrary number of bytes, without 8 byte padding. Each call to this
|
---|
197 | routine will encrypt the input bytes to output and then update ivec
|
---|
198 | and num. num contains 'how far' we are though ivec. If this does
|
---|
199 | not make much sense, read more about CFB mode of DES.
|
---|
200 |
|
---|
201 | DES_ede3_cfb64_encrypt() and DES_ede2_cfb64_encrypt() is the same as
|
---|
202 | DES_cfb64_encrypt() except that Triple-DES is used.
|
---|
203 |
|
---|
204 | DES_ofb_encrypt() encrypts using output feedback mode. This method
|
---|
205 | takes an array of characters as input and outputs an array of
|
---|
206 | characters. It does not require any padding to 8 character groups.
|
---|
207 | Note: the I<ivec> variable is changed and the new changed value needs to
|
---|
208 | be passed to the next call to this function. Since this function runs
|
---|
209 | a complete DES ECB encryption per I<numbits>, this function is only
|
---|
210 | suggested for use when sending a small number of characters.
|
---|
211 |
|
---|
212 | DES_ofb64_encrypt() is the same as DES_cfb64_encrypt() using Output
|
---|
213 | Feed Back mode.
|
---|
214 |
|
---|
215 | DES_ede3_ofb64_encrypt() and DES_ede2_ofb64_encrypt() is the same as
|
---|
216 | DES_ofb64_encrypt(), using Triple-DES.
|
---|
217 |
|
---|
218 | The following functions are included in the DES library for
|
---|
219 | compatibility with the MIT Kerberos library.
|
---|
220 |
|
---|
221 | DES_cbc_cksum() produces an 8 byte checksum based on the input stream
|
---|
222 | (via CBC encryption). The last 4 bytes of the checksum are returned
|
---|
223 | and the complete 8 bytes are placed in I<output>. This function is
|
---|
224 | used by Kerberos v4. Other applications should use
|
---|
225 | L<EVP_DigestInit(3)> etc. instead.
|
---|
226 |
|
---|
227 | DES_quad_cksum() is a Kerberos v4 function. It returns a 4 byte
|
---|
228 | checksum from the input bytes. The algorithm can be iterated over the
|
---|
229 | input, depending on I<out_count>, 1, 2, 3 or 4 times. If I<output> is
|
---|
230 | non-NULL, the 8 bytes generated by each pass are written into
|
---|
231 | I<output>.
|
---|
232 |
|
---|
233 | The following are DES-based transformations:
|
---|
234 |
|
---|
235 | DES_fcrypt() is a fast version of the Unix crypt(3) function. This
|
---|
236 | version takes only a small amount of space relative to other fast
|
---|
237 | crypt() implementations. This is different to the normal crypt() in
|
---|
238 | that the third parameter is the buffer that the return value is
|
---|
239 | written into. It needs to be at least 14 bytes long. This function
|
---|
240 | is thread safe, unlike the normal crypt().
|
---|
241 |
|
---|
242 | DES_crypt() is a faster replacement for the normal system crypt().
|
---|
243 | This function calls DES_fcrypt() with a static array passed as the
|
---|
244 | third parameter. This mostly emulates the normal non-thread-safe semantics
|
---|
245 | of crypt(3).
|
---|
246 | The B<salt> must be two ASCII characters.
|
---|
247 |
|
---|
248 | The values returned by DES_fcrypt() and DES_crypt() are terminated by NUL
|
---|
249 | character.
|
---|
250 |
|
---|
251 | DES_enc_write() writes I<len> bytes to file descriptor I<fd> from
|
---|
252 | buffer I<buf>. The data is encrypted via I<pcbc_encrypt> (default)
|
---|
253 | using I<sched> for the key and I<iv> as a starting vector. The actual
|
---|
254 | data send down I<fd> consists of 4 bytes (in network byte order)
|
---|
255 | containing the length of the following encrypted data. The encrypted
|
---|
256 | data then follows, padded with random data out to a multiple of 8
|
---|
257 | bytes.
|
---|
258 |
|
---|
259 | =head1 BUGS
|
---|
260 |
|
---|
261 | DES_cbc_encrypt() does not modify B<ivec>; use DES_ncbc_encrypt()
|
---|
262 | instead.
|
---|
263 |
|
---|
264 | DES_cfb_encrypt() and DES_ofb_encrypt() operates on input of 8 bits.
|
---|
265 | What this means is that if you set numbits to 12, and length to 2, the
|
---|
266 | first 12 bits will come from the 1st input byte and the low half of
|
---|
267 | the second input byte. The second 12 bits will have the low 8 bits
|
---|
268 | taken from the 3rd input byte and the top 4 bits taken from the 4th
|
---|
269 | input byte. The same holds for output. This function has been
|
---|
270 | implemented this way because most people will be using a multiple of 8
|
---|
271 | and because once you get into pulling bytes input bytes apart things
|
---|
272 | get ugly!
|
---|
273 |
|
---|
274 | DES_string_to_key() is available for backward compatibility with the
|
---|
275 | MIT library. New applications should use a cryptographic hash function.
|
---|
276 | The same applies for DES_string_to_2key().
|
---|
277 |
|
---|
278 | =head1 NOTES
|
---|
279 |
|
---|
280 | The B<des> library was written to be source code compatible with
|
---|
281 | the MIT Kerberos library.
|
---|
282 |
|
---|
283 | Applications should use the higher level functions
|
---|
284 | L<EVP_EncryptInit(3)> etc. instead of calling these
|
---|
285 | functions directly.
|
---|
286 |
|
---|
287 | Single-key DES is insecure due to its short key size. ECB mode is
|
---|
288 | not suitable for most applications; see L<des_modes(7)>.
|
---|
289 |
|
---|
290 | =head1 RETURN VALUES
|
---|
291 |
|
---|
292 | DES_set_key(), DES_key_sched(), DES_set_key_checked() and DES_is_weak_key()
|
---|
293 | return 0 on success or negative values on error.
|
---|
294 |
|
---|
295 | DES_cbc_cksum() and DES_quad_cksum() return 4-byte integer representing the
|
---|
296 | last 4 bytes of the checksum of the input.
|
---|
297 |
|
---|
298 | DES_fcrypt() returns a pointer to the caller-provided buffer and DES_crypt() -
|
---|
299 | to a static buffer on success; otherwise they return NULL.
|
---|
300 |
|
---|
301 | =head1 SEE ALSO
|
---|
302 |
|
---|
303 | L<des_modes(7)>,
|
---|
304 | L<EVP_EncryptInit(3)>
|
---|
305 |
|
---|
306 | =head1 HISTORY
|
---|
307 |
|
---|
308 | The requirement that the B<salt> parameter to DES_crypt() and DES_fcrypt()
|
---|
309 | be two ASCII characters was first enforced in
|
---|
310 | OpenSSL 1.1.0. Previous versions tried to use the letter uppercase B<A>
|
---|
311 | if both character were not present, and could crash when given non-ASCII
|
---|
312 | on some platforms.
|
---|
313 |
|
---|
314 | =head1 COPYRIGHT
|
---|
315 |
|
---|
316 | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
|
---|
317 |
|
---|
318 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
319 | this file except in compliance with the License. You can obtain a copy
|
---|
320 | in the file LICENSE in the source distribution or at
|
---|
321 | L<https://www.openssl.org/source/license.html>.
|
---|
322 |
|
---|
323 | =cut
|
---|