diff options
Diffstat (limited to 'src/lib/libcrypto/des/ede_cbcm_enc.c')
-rw-r--r-- | src/lib/libcrypto/des/ede_cbcm_enc.c | 228 |
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 | ||
76 | void DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out, | 76 | void |
77 | long length, DES_key_schedule *ks1, DES_key_schedule *ks2, | 77 | DES_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 |