summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bf/bf_enc.c
diff options
context:
space:
mode:
authorjsing <>2024-03-27 11:24:15 +0000
committerjsing <>2024-03-27 11:24:15 +0000
commit89faa4d8d5ff5b53f7bbc4f66d00fddcee95b6c1 (patch)
tree25fd2e6c6ce66cbe42a81228ebd582722502c7ff /src/lib/libcrypto/bf/bf_enc.c
parentc039c00612690f4b062f7f72725247b9f2574398 (diff)
downloadopenbsd-89faa4d8d5ff5b53f7bbc4f66d00fddcee95b6c1.tar.gz
openbsd-89faa4d8d5ff5b53f7bbc4f66d00fddcee95b6c1.tar.bz2
openbsd-89faa4d8d5ff5b53f7bbc4f66d00fddcee95b6c1.zip
Consolidate blowfish code.
Requested by tb@
Diffstat (limited to 'src/lib/libcrypto/bf/bf_enc.c')
-rw-r--r--src/lib/libcrypto/bf/bf_enc.c304
1 files changed, 0 insertions, 304 deletions
diff --git a/src/lib/libcrypto/bf/bf_enc.c b/src/lib/libcrypto/bf/bf_enc.c
deleted file mode 100644
index bbefe7d526..0000000000
--- a/src/lib/libcrypto/bf/bf_enc.c
+++ /dev/null
@@ -1,304 +0,0 @@
1/* $OpenBSD: bf_enc.c,v 1.9 2022/11/26 16:08:51 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <openssl/blowfish.h>
60
61#include "bf_local.h"
62
63/*
64 * Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
65 * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
66 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
67 */
68
69#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20)
70#error If you set BF_ROUNDS to some value other than 16 or 20, you will have \
71to modify the code.
72#endif
73
74void
75BF_encrypt(BF_LONG *data, const BF_KEY *key)
76{
77#ifndef BF_PTR2
78 BF_LONG l, r;
79 const BF_LONG *p, *s;
80
81 p = key->P;
82 s = &(key->S[0]);
83 l = data[0];
84 r = data[1];
85
86 l ^= p[0];
87 BF_ENC(r, l,s, p[1]);
88 BF_ENC(l, r,s, p[2]);
89 BF_ENC(r, l,s, p[3]);
90 BF_ENC(l, r,s, p[4]);
91 BF_ENC(r, l,s, p[5]);
92 BF_ENC(l, r,s, p[6]);
93 BF_ENC(r, l,s, p[7]);
94 BF_ENC(l, r,s, p[8]);
95 BF_ENC(r, l,s, p[9]);
96 BF_ENC(l, r,s, p[10]);
97 BF_ENC(r, l,s, p[11]);
98 BF_ENC(l, r,s, p[12]);
99 BF_ENC(r, l,s, p[13]);
100 BF_ENC(l, r,s, p[14]);
101 BF_ENC(r, l,s, p[15]);
102 BF_ENC(l, r,s, p[16]);
103#if BF_ROUNDS == 20
104 BF_ENC(r, l,s, p[17]);
105 BF_ENC(l, r,s, p[18]);
106 BF_ENC(r, l,s, p[19]);
107 BF_ENC(l, r,s, p[20]);
108#endif
109 r ^= p[BF_ROUNDS + 1];
110
111 data[1] = l&0xffffffffL;
112 data[0] = r&0xffffffffL;
113#else
114 BF_LONG l, r,t, *k;
115
116 l = data[0];
117 r = data[1];
118 k = (BF_LONG*)key;
119
120 l ^= k[0];
121 BF_ENC(r, l, k, 1);
122 BF_ENC(l, r, k, 2);
123 BF_ENC(r, l, k, 3);
124 BF_ENC(l, r, k, 4);
125 BF_ENC(r, l, k, 5);
126 BF_ENC(l, r, k, 6);
127 BF_ENC(r, l, k, 7);
128 BF_ENC(l, r, k, 8);
129 BF_ENC(r, l, k, 9);
130 BF_ENC(l, r,k, 10);
131 BF_ENC(r, l,k, 11);
132 BF_ENC(l, r,k, 12);
133 BF_ENC(r, l,k, 13);
134 BF_ENC(l, r,k, 14);
135 BF_ENC(r, l,k, 15);
136 BF_ENC(l, r,k, 16);
137#if BF_ROUNDS == 20
138 BF_ENC(r, l,k, 17);
139 BF_ENC(l, r,k, 18);
140 BF_ENC(r, l,k, 19);
141 BF_ENC(l, r,k, 20);
142#endif
143 r ^= k[BF_ROUNDS + 1];
144
145 data[1] = l&0xffffffffL;
146 data[0] = r&0xffffffffL;
147#endif
148}
149
150#ifndef BF_DEFAULT_OPTIONS
151
152void
153BF_decrypt(BF_LONG *data, const BF_KEY *key)
154{
155#ifndef BF_PTR2
156 BF_LONG l, r;
157 const BF_LONG *p, *s;
158
159 p = key->P;
160 s = &(key->S[0]);
161 l = data[0];
162 r = data[1];
163
164 l ^= p[BF_ROUNDS + 1];
165#if BF_ROUNDS == 20
166 BF_ENC(r, l,s, p[20]);
167 BF_ENC(l, r,s, p[19]);
168 BF_ENC(r, l,s, p[18]);
169 BF_ENC(l, r,s, p[17]);
170#endif
171 BF_ENC(r, l,s, p[16]);
172 BF_ENC(l, r,s, p[15]);
173 BF_ENC(r, l,s, p[14]);
174 BF_ENC(l, r,s, p[13]);
175 BF_ENC(r, l,s, p[12]);
176 BF_ENC(l, r,s, p[11]);
177 BF_ENC(r, l,s, p[10]);
178 BF_ENC(l, r,s, p[9]);
179 BF_ENC(r, l,s, p[8]);
180 BF_ENC(l, r,s, p[7]);
181 BF_ENC(r, l,s, p[6]);
182 BF_ENC(l, r,s, p[5]);
183 BF_ENC(r, l,s, p[4]);
184 BF_ENC(l, r,s, p[3]);
185 BF_ENC(r, l,s, p[2]);
186 BF_ENC(l, r,s, p[1]);
187 r ^= p[0];
188
189 data[1] = l&0xffffffffL;
190 data[0] = r&0xffffffffL;
191#else
192 BF_LONG l, r,t, *k;
193
194 l = data[0];
195 r = data[1];
196 k = (BF_LONG *)key;
197
198 l ^= k[BF_ROUNDS + 1];
199#if BF_ROUNDS == 20
200 BF_ENC(r, l,k, 20);
201 BF_ENC(l, r,k, 19);
202 BF_ENC(r, l,k, 18);
203 BF_ENC(l, r,k, 17);
204#endif
205 BF_ENC(r, l,k, 16);
206 BF_ENC(l, r,k, 15);
207 BF_ENC(r, l,k, 14);
208 BF_ENC(l, r,k, 13);
209 BF_ENC(r, l,k, 12);
210 BF_ENC(l, r,k, 11);
211 BF_ENC(r, l,k, 10);
212 BF_ENC(l, r, k, 9);
213 BF_ENC(r, l, k, 8);
214 BF_ENC(l, r, k, 7);
215 BF_ENC(r, l, k, 6);
216 BF_ENC(l, r, k, 5);
217 BF_ENC(r, l, k, 4);
218 BF_ENC(l, r, k, 3);
219 BF_ENC(r, l, k, 2);
220 BF_ENC(l, r, k, 1);
221 r ^= k[0];
222
223 data[1] = l&0xffffffffL;
224 data[0] = r&0xffffffffL;
225#endif
226}
227
228void
229BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
230 const BF_KEY *schedule, unsigned char *ivec, int encrypt)
231{
232 BF_LONG tin0, tin1;
233 BF_LONG tout0, tout1, xor0, xor1;
234 long l = length;
235 BF_LONG tin[2];
236
237 if (encrypt) {
238 n2l(ivec, tout0);
239 n2l(ivec, tout1);
240 ivec -= 8;
241 for (l -= 8; l >= 0; l -= 8) {
242 n2l(in, tin0);
243 n2l(in, tin1);
244 tin0 ^= tout0;
245 tin1 ^= tout1;
246 tin[0] = tin0;
247 tin[1] = tin1;
248 BF_encrypt(tin, schedule);
249 tout0 = tin[0];
250 tout1 = tin[1];
251 l2n(tout0, out);
252 l2n(tout1, out);
253 }
254 if (l != -8) {
255 n2ln(in, tin0, tin1, l + 8);
256 tin0 ^= tout0;
257 tin1 ^= tout1;
258 tin[0] = tin0;
259 tin[1] = tin1;
260 BF_encrypt(tin, schedule);
261 tout0 = tin[0];
262 tout1 = tin[1];
263 l2n(tout0, out);
264 l2n(tout1, out);
265 }
266 l2n(tout0, ivec);
267 l2n(tout1, ivec);
268 } else {
269 n2l(ivec, xor0);
270 n2l(ivec, xor1);
271 ivec -= 8;
272 for (l -= 8; l >= 0; l -= 8) {
273 n2l(in, tin0);
274 n2l(in, tin1);
275 tin[0] = tin0;
276 tin[1] = tin1;
277 BF_decrypt(tin, schedule);
278 tout0 = tin[0]^xor0;
279 tout1 = tin[1]^xor1;
280 l2n(tout0, out);
281 l2n(tout1, out);
282 xor0 = tin0;
283 xor1 = tin1;
284 }
285 if (l != -8) {
286 n2l(in, tin0);
287 n2l(in, tin1);
288 tin[0] = tin0;
289 tin[1] = tin1;
290 BF_decrypt(tin, schedule);
291 tout0 = tin[0]^xor0;
292 tout1 = tin[1]^xor1;
293 l2nn(tout0, tout1, out, l + 8);
294 xor0 = tin0;
295 xor1 = tin1;
296 }
297 l2n(xor0, ivec);
298 l2n(xor1, ivec);
299 }
300 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
301 tin[0] = tin[1] = 0;
302}
303
304#endif