summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/ede_cbcm_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des/ede_cbcm_enc.c')
-rw-r--r--src/lib/libcrypto/des/ede_cbcm_enc.c228
1 files changed, 110 insertions, 118 deletions
diff --git a/src/lib/libcrypto/des/ede_cbcm_enc.c b/src/lib/libcrypto/des/ede_cbcm_enc.c
index 3f1609d745..d276009c60 100644
--- a/src/lib/libcrypto/des/ede_cbcm_enc.c
+++ b/src/lib/libcrypto/des/ede_cbcm_enc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ede_cbcm_enc.c,v 1.7 2022/11/26 16:08:51 tb Exp $ */ 1/* $OpenBSD: ede_cbcm_enc.c,v 1.8 2023/07/08 07:11:07 beck Exp $ */
2/* Written by Ben Laurie <ben@algroup.co.uk> for the OpenSSL 2/* Written by Ben Laurie <ben@algroup.co.uk> for the OpenSSL
3 * project 13 Feb 1999. 3 * project 13 Feb 1999.
4 */ 4 */
@@ -10,7 +10,7 @@
10 * are met: 10 * are met:
11 * 11 *
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 14 *
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in 16 * notice, this list of conditions and the following disclaimer in
@@ -73,127 +73,119 @@ http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1998/CS/CS0928.ps.gz
73#ifndef OPENSSL_NO_DESCBCM 73#ifndef OPENSSL_NO_DESCBCM
74#include "des_local.h" 74#include "des_local.h"
75 75
76void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, 76void
77 long length, DES_key_schedule *ks1, DES_key_schedule *ks2, 77DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
78 DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2, 78 long length, DES_key_schedule *ks1, DES_key_schedule *ks2,
79 int enc) 79 DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2,
80 { 80 int enc)
81 DES_LONG tin0,tin1; 81{
82 DES_LONG tout0,tout1,xor0,xor1,m0,m1; 82 DES_LONG tin0, tin1;
83 long l=length; 83 DES_LONG tout0, tout1, xor0, xor1, m0, m1;
84 DES_LONG tin[2]; 84 long l = length;
85 unsigned char *iv1,*iv2; 85 DES_LONG tin[2];
86 86 unsigned char *iv1, *iv2;
87 iv1 = &(*ivec1)[0]; 87
88 iv2 = &(*ivec2)[0]; 88 iv1 = &(*ivec1)[0];
89 89 iv2 = &(*ivec2)[0];
90 if (enc) 90
91 { 91 if (enc) {
92 c2l(iv1,m0); 92 c2l(iv1, m0);
93 c2l(iv1,m1); 93 c2l(iv1, m1);
94 c2l(iv2,tout0); 94 c2l(iv2, tout0);
95 c2l(iv2,tout1); 95 c2l(iv2, tout1);
96 for (l-=8; l>=-7; l-=8) 96 for (l -= 8; l >= -7; l -= 8)
97 {
98 tin[0]=m0;
99 tin[1]=m1;
100 DES_encrypt1(tin,ks3,1);
101 m0=tin[0];
102 m1=tin[1];
103
104 if(l < 0)
105 { 97 {
106 c2ln(in,tin0,tin1,l+8); 98 tin[0] = m0;
99 tin[1] = m1;
100 DES_encrypt1(tin, ks3, 1);
101 m0 = tin[0];
102 m1 = tin[1];
103
104 if (l < 0) {
105 c2ln(in, tin0, tin1, l + 8);
106 } else {
107 c2l(in, tin0);
108 c2l(in, tin1);
109 }
110 tin0 ^= tout0;
111 tin1 ^= tout1;
112
113 tin[0] = tin0;
114 tin[1] = tin1;
115 DES_encrypt1(tin, ks1, 1);
116 tin[0] ^= m0;
117 tin[1] ^= m1;
118 DES_encrypt1(tin, ks2, 0);
119 tin[0] ^= m0;
120 tin[1] ^= m1;
121 DES_encrypt1(tin, ks1, 1);
122 tout0 = tin[0];
123 tout1 = tin[1];
124
125 l2c(tout0, out);
126 l2c(tout1, out);
107 } 127 }
108 else 128 iv1 = &(*ivec1)[0];
129 l2c(m0, iv1);
130 l2c(m1, iv1);
131
132 iv2 = &(*ivec2)[0];
133 l2c(tout0, iv2);
134 l2c(tout1, iv2);
135 } else {
136 DES_LONG t0, t1;
137
138 c2l(iv1, m0);
139 c2l(iv1, m1);
140 c2l(iv2, xor0);
141 c2l(iv2, xor1);
142 for (l -= 8; l >= -7; l -= 8)
109 { 143 {
110 c2l(in,tin0); 144 tin[0] = m0;
111 c2l(in,tin1); 145 tin[1] = m1;
146 DES_encrypt1(tin, ks3, 1);
147 m0 = tin[0];
148 m1 = tin[1];
149
150 c2l(in, tin0);
151 c2l(in, tin1);
152
153 t0 = tin0;
154 t1 = tin1;
155
156 tin[0] = tin0;
157 tin[1] = tin1;
158 DES_encrypt1(tin, ks1, 0);
159 tin[0] ^= m0;
160 tin[1] ^= m1;
161 DES_encrypt1(tin, ks2, 1);
162 tin[0] ^= m0;
163 tin[1] ^= m1;
164 DES_encrypt1(tin, ks1, 0);
165 tout0 = tin[0];
166 tout1 = tin[1];
167
168 tout0 ^= xor0;
169 tout1 ^= xor1;
170 if (l < 0) {
171 l2cn(tout0, tout1, out, l + 8);
172 } else {
173 l2c(tout0, out);
174 l2c(tout1, out);
175 }
176 xor0 = t0;
177 xor1 = t1;
112 } 178 }
113 tin0^=tout0;
114 tin1^=tout1;
115
116 tin[0]=tin0;
117 tin[1]=tin1;
118 DES_encrypt1(tin,ks1,1);
119 tin[0]^=m0;
120 tin[1]^=m1;
121 DES_encrypt1(tin,ks2,0);
122 tin[0]^=m0;
123 tin[1]^=m1;
124 DES_encrypt1(tin,ks1,1);
125 tout0=tin[0];
126 tout1=tin[1];
127
128 l2c(tout0,out);
129 l2c(tout1,out);
130 }
131 iv1=&(*ivec1)[0];
132 l2c(m0,iv1);
133 l2c(m1,iv1);
134
135 iv2=&(*ivec2)[0];
136 l2c(tout0,iv2);
137 l2c(tout1,iv2);
138 }
139 else
140 {
141 DES_LONG t0,t1;
142
143 c2l(iv1,m0);
144 c2l(iv1,m1);
145 c2l(iv2,xor0);
146 c2l(iv2,xor1);
147 for (l-=8; l>=-7; l-=8)
148 {
149 tin[0]=m0;
150 tin[1]=m1;
151 DES_encrypt1(tin,ks3,1);
152 m0=tin[0];
153 m1=tin[1];
154
155 c2l(in,tin0);
156 c2l(in,tin1);
157
158 t0=tin0;
159 t1=tin1;
160
161 tin[0]=tin0;
162 tin[1]=tin1;
163 DES_encrypt1(tin,ks1,0);
164 tin[0]^=m0;
165 tin[1]^=m1;
166 DES_encrypt1(tin,ks2,1);
167 tin[0]^=m0;
168 tin[1]^=m1;
169 DES_encrypt1(tin,ks1,0);
170 tout0=tin[0];
171 tout1=tin[1];
172
173 tout0^=xor0;
174 tout1^=xor1;
175 if(l < 0)
176 {
177 l2cn(tout0,tout1,out,l+8);
178 }
179 else
180 {
181 l2c(tout0,out);
182 l2c(tout1,out);
183 }
184 xor0=t0;
185 xor1=t1;
186 }
187 179
188 iv1=&(*ivec1)[0]; 180 iv1 = &(*ivec1)[0];
189 l2c(m0,iv1); 181 l2c(m0, iv1);
190 l2c(m1,iv1); 182 l2c(m1, iv1);
191 183
192 iv2=&(*ivec2)[0]; 184 iv2 = &(*ivec2)[0];
193 l2c(xor0,iv2); 185 l2c(xor0, iv2);
194 l2c(xor1,iv2); 186 l2c(xor1, iv2);
195 } 187 }
196 tin0=tin1=tout0=tout1=xor0=xor1=0; 188 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
197 tin[0]=tin[1]=0; 189 tin[0] = tin[1] = 0;
198 } 190}
199#endif 191#endif