summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbeck <>2023-07-07 08:29:37 +0000
committerbeck <>2023-07-07 08:29:37 +0000
commit216740b04f3cd3f53da444878e4a5ba56622399b (patch)
treea85e0a8e2a66a28f0db3722a7116f39457f4b6cb /src
parent21eddabc863b067714fdd732d1a7466ddad0cda4 (diff)
downloadopenbsd-216740b04f3cd3f53da444878e4a5ba56622399b.tar.gz
openbsd-216740b04f3cd3f53da444878e4a5ba56622399b.tar.bz2
openbsd-216740b04f3cd3f53da444878e4a5ba56622399b.zip
Hit rc2 with the loving mallet of knfmt.
ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/rc2/rc2.h39
-rw-r--r--src/lib/libcrypto/rc2/rc2_cbc.c317
-rw-r--r--src/lib/libcrypto/rc2/rc2_ecb.c44
-rw-r--r--src/lib/libcrypto/rc2/rc2_local.h155
-rw-r--r--src/lib/libcrypto/rc2/rc2_skey.c81
-rw-r--r--src/lib/libcrypto/rc2/rc2cfb64.c113
-rw-r--r--src/lib/libcrypto/rc2/rc2ofb64.c89
7 files changed, 425 insertions, 413 deletions
diff --git a/src/lib/libcrypto/rc2/rc2.h b/src/lib/libcrypto/rc2/rc2.h
index 21511ff36e..09c6c08a51 100644
--- a/src/lib/libcrypto/rc2/rc2.h
+++ b/src/lib/libcrypto/rc2/rc2.h
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2.h,v 1.11 2014/07/10 22:45:57 jsing Exp $ */ 1/* $OpenBSD: rc2.h,v 1.12 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -75,24 +75,23 @@
75extern "C" { 75extern "C" {
76#endif 76#endif
77 77
78typedef struct rc2_key_st 78typedef struct rc2_key_st {
79 {
80 RC2_INT data[64]; 79 RC2_INT data[64];
81 } RC2_KEY; 80} RC2_KEY;
82 81
83void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data,int bits); 82void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits);
84void RC2_ecb_encrypt(const unsigned char *in,unsigned char *out,RC2_KEY *key, 83void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, RC2_KEY *key,
85 int enc); 84 int enc);
86void RC2_encrypt(unsigned long *data,RC2_KEY *key); 85void RC2_encrypt(unsigned long *data, RC2_KEY *key);
87void RC2_decrypt(unsigned long *data,RC2_KEY *key); 86void RC2_decrypt(unsigned long *data, RC2_KEY *key);
88void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, 87void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
89 RC2_KEY *ks, unsigned char *iv, int enc); 88 RC2_KEY *ks, unsigned char *iv, int enc);
90void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, 89void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out,
91 long length, RC2_KEY *schedule, unsigned char *ivec, 90 long length, RC2_KEY *schedule, unsigned char *ivec,
92 int *num, int enc); 91 int *num, int enc);
93void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, 92void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out,
94 long length, RC2_KEY *schedule, unsigned char *ivec, 93 long length, RC2_KEY *schedule, unsigned char *ivec,
95 int *num); 94 int *num);
96 95
97#ifdef __cplusplus 96#ifdef __cplusplus
98} 97}
diff --git a/src/lib/libcrypto/rc2/rc2_cbc.c b/src/lib/libcrypto/rc2/rc2_cbc.c
index 44204affbf..c4a58384db 100644
--- a/src/lib/libcrypto/rc2/rc2_cbc.c
+++ b/src/lib/libcrypto/rc2/rc2_cbc.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2_cbc.c,v 1.6 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2_cbc.c,v 1.7 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -59,168 +59,175 @@
59#include <openssl/rc2.h> 59#include <openssl/rc2.h>
60#include "rc2_local.h" 60#include "rc2_local.h"
61 61
62void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, 62void
63 RC2_KEY *ks, unsigned char *iv, int encrypt) 63RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
64 { 64 RC2_KEY *ks, unsigned char *iv, int encrypt)
65 unsigned long tin0,tin1; 65{
66 unsigned long tout0,tout1,xor0,xor1; 66 unsigned long tin0, tin1;
67 long l=length; 67 unsigned long tout0, tout1, xor0, xor1;
68 long l = length;
68 unsigned long tin[2]; 69 unsigned long tin[2];
69 70
70 if (encrypt) 71 if (encrypt) {
72 c2l(iv, tout0);
73 c2l(iv, tout1);
74 iv -= 8;
75 for (l -= 8; l >= 0; l -= 8)
71 { 76 {
72 c2l(iv,tout0); 77 c2l(in, tin0);
73 c2l(iv,tout1); 78 c2l(in, tin1);
74 iv-=8; 79 tin0 ^= tout0;
75 for (l-=8; l>=0; l-=8) 80 tin1 ^= tout1;
76 { 81 tin[0] = tin0;
77 c2l(in,tin0); 82 tin[1] = tin1;
78 c2l(in,tin1); 83 RC2_encrypt(tin, ks);
79 tin0^=tout0; 84 tout0 = tin[0];
80 tin1^=tout1; 85 l2c(tout0, out);
81 tin[0]=tin0; 86 tout1 = tin[1];
82 tin[1]=tin1; 87 l2c(tout1, out);
83 RC2_encrypt(tin,ks); 88 }
84 tout0=tin[0]; l2c(tout0,out); 89 if (l != -8) {
85 tout1=tin[1]; l2c(tout1,out); 90 c2ln(in, tin0, tin1, l + 8);
86 } 91 tin0 ^= tout0;
87 if (l != -8) 92 tin1 ^= tout1;
88 { 93 tin[0] = tin0;
89 c2ln(in,tin0,tin1,l+8); 94 tin[1] = tin1;
90 tin0^=tout0; 95 RC2_encrypt(tin, ks);
91 tin1^=tout1; 96 tout0 = tin[0];
92 tin[0]=tin0; 97 l2c(tout0, out);
93 tin[1]=tin1; 98 tout1 = tin[1];
94 RC2_encrypt(tin,ks); 99 l2c(tout1, out);
95 tout0=tin[0]; l2c(tout0,out);
96 tout1=tin[1]; l2c(tout1,out);
97 }
98 l2c(tout0,iv);
99 l2c(tout1,iv);
100 } 100 }
101 else 101 l2c(tout0, iv);
102 l2c(tout1, iv);
103 } else {
104 c2l(iv, xor0);
105 c2l(iv, xor1);
106 iv -= 8;
107 for (l -= 8; l >= 0; l -= 8)
102 { 108 {
103 c2l(iv,xor0); 109 c2l(in, tin0);
104 c2l(iv,xor1); 110 tin[0] = tin0;
105 iv-=8; 111 c2l(in, tin1);
106 for (l-=8; l>=0; l-=8) 112 tin[1] = tin1;
107 { 113 RC2_decrypt(tin, ks);
108 c2l(in,tin0); tin[0]=tin0; 114 tout0 = tin[0] ^ xor0;
109 c2l(in,tin1); tin[1]=tin1; 115 tout1 = tin[1] ^ xor1;
110 RC2_decrypt(tin,ks); 116 l2c(tout0, out);
111 tout0=tin[0]^xor0; 117 l2c(tout1, out);
112 tout1=tin[1]^xor1; 118 xor0 = tin0;
113 l2c(tout0,out); 119 xor1 = tin1;
114 l2c(tout1,out);
115 xor0=tin0;
116 xor1=tin1;
117 }
118 if (l != -8)
119 {
120 c2l(in,tin0); tin[0]=tin0;
121 c2l(in,tin1); tin[1]=tin1;
122 RC2_decrypt(tin,ks);
123 tout0=tin[0]^xor0;
124 tout1=tin[1]^xor1;
125 l2cn(tout0,tout1,out,l+8);
126 xor0=tin0;
127 xor1=tin1;
128 }
129 l2c(xor0,iv);
130 l2c(xor1,iv);
131 } 120 }
132 tin0=tin1=tout0=tout1=xor0=xor1=0; 121 if (l != -8) {
133 tin[0]=tin[1]=0; 122 c2l(in, tin0);
123 tin[0] = tin0;
124 c2l(in, tin1);
125 tin[1] = tin1;
126 RC2_decrypt(tin, ks);
127 tout0 = tin[0] ^ xor0;
128 tout1 = tin[1] ^ xor1;
129 l2cn(tout0, tout1, out, l + 8);
130 xor0 = tin0;
131 xor1 = tin1;
132 }
133 l2c(xor0, iv);
134 l2c(xor1, iv);
134 } 135 }
135 136 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
136void RC2_encrypt(unsigned long *d, RC2_KEY *key) 137 tin[0] = tin[1] = 0;
137 { 138}
138 int i,n; 139
139 RC2_INT *p0,*p1; 140void
140 RC2_INT x0,x1,x2,x3,t; 141RC2_encrypt(unsigned long *d, RC2_KEY *key)
142{
143 int i, n;
144 RC2_INT *p0, *p1;
145 RC2_INT x0, x1, x2, x3, t;
141 unsigned long l; 146 unsigned long l;
142 147
143 l=d[0]; 148 l = d[0];
144 x0=(RC2_INT)l&0xffff; 149 x0 = (RC2_INT)l & 0xffff;
145 x1=(RC2_INT)(l>>16L); 150 x1 = (RC2_INT)(l >> 16L);
146 l=d[1]; 151 l = d[1];
147 x2=(RC2_INT)l&0xffff; 152 x2 = (RC2_INT)l & 0xffff;
148 x3=(RC2_INT)(l>>16L); 153 x3 = (RC2_INT)(l >> 16L);
149 154
150 n=3; 155 n = 3;
151 i=5; 156 i = 5;
152 157
153 p0=p1= &(key->data[0]); 158 p0 = p1 = &(key->data[0]);
154 for (;;) 159 for (;;) {
155 { 160 t = (x0 + (x1 & ~x3) + (x2 & x3) + *(p0++)) & 0xffff;
156 t=(x0+(x1& ~x3)+(x2&x3)+ *(p0++))&0xffff; 161 x0 = (t << 1)|(t >> 15);
157 x0=(t<<1)|(t>>15); 162 t = (x1 + (x2 & ~x0) + (x3 & x0) + *(p0++)) & 0xffff;
158 t=(x1+(x2& ~x0)+(x3&x0)+ *(p0++))&0xffff; 163 x1 = (t << 2)|(t >> 14);
159 x1=(t<<2)|(t>>14); 164 t = (x2 + (x3 & ~x1) + (x0 & x1) + *(p0++)) & 0xffff;
160 t=(x2+(x3& ~x1)+(x0&x1)+ *(p0++))&0xffff; 165 x2 = (t << 3)|(t >> 13);
161 x2=(t<<3)|(t>>13); 166 t = (x3 + (x0 & ~x2) + (x1 & x2) + *(p0++)) & 0xffff;
162 t=(x3+(x0& ~x2)+(x1&x2)+ *(p0++))&0xffff; 167 x3 = (t << 5)|(t >> 11);
163 x3=(t<<5)|(t>>11); 168
164 169 if (--i == 0) {
165 if (--i == 0) 170 if (--n == 0)
166 { 171 break;
167 if (--n == 0) break; 172 i = (n == 2) ? 6 : 5;
168 i=(n == 2)?6:5; 173
169 174 x0 += p1[x3 & 0x3f];
170 x0+=p1[x3&0x3f]; 175 x1 += p1[x0 & 0x3f];
171 x1+=p1[x0&0x3f]; 176 x2 += p1[x1 & 0x3f];
172 x2+=p1[x1&0x3f]; 177 x3 += p1[x2 & 0x3f];
173 x3+=p1[x2&0x3f];
174 }
175 } 178 }
176
177 d[0]=(unsigned long)(x0&0xffff)|((unsigned long)(x1&0xffff)<<16L);
178 d[1]=(unsigned long)(x2&0xffff)|((unsigned long)(x3&0xffff)<<16L);
179 } 179 }
180 180
181void RC2_decrypt(unsigned long *d, RC2_KEY *key) 181 d[0] = (unsigned long)(x0 & 0xffff)|((unsigned long)(x1 & 0xffff) <<
182 { 182 16L);
183 int i,n; 183 d[1] = (unsigned long)(x2 & 0xffff)|((unsigned long)(x3 & 0xffff) <<
184 RC2_INT *p0,*p1; 184 16L);
185 RC2_INT x0,x1,x2,x3,t; 185}
186
187void
188RC2_decrypt(unsigned long *d, RC2_KEY *key)
189{
190 int i, n;
191 RC2_INT *p0, *p1;
192 RC2_INT x0, x1, x2, x3, t;
186 unsigned long l; 193 unsigned long l;
187 194
188 l=d[0]; 195 l = d[0];
189 x0=(RC2_INT)l&0xffff; 196 x0 = (RC2_INT)l & 0xffff;
190 x1=(RC2_INT)(l>>16L); 197 x1 = (RC2_INT)(l >> 16L);
191 l=d[1]; 198 l = d[1];
192 x2=(RC2_INT)l&0xffff; 199 x2 = (RC2_INT)l & 0xffff;
193 x3=(RC2_INT)(l>>16L); 200 x3 = (RC2_INT)(l >> 16L);
194 201
195 n=3; 202 n = 3;
196 i=5; 203 i = 5;
197 204
198 p0= &(key->data[63]); 205 p0 = &(key->data[63]);
199 p1= &(key->data[0]); 206 p1 = &(key->data[0]);
200 for (;;) 207 for (;;) {
201 { 208 t = ((x3 << 11)|(x3 >> 5)) & 0xffff;
202 t=((x3<<11)|(x3>>5))&0xffff; 209 x3 = (t - (x0 & ~x2) - (x1 & x2) - *(p0--)) & 0xffff;
203 x3=(t-(x0& ~x2)-(x1&x2)- *(p0--))&0xffff; 210 t = ((x2 << 13)|(x2 >> 3)) & 0xffff;
204 t=((x2<<13)|(x2>>3))&0xffff; 211 x2 = (t - (x3 & ~x1) - (x0 & x1) - *(p0--)) & 0xffff;
205 x2=(t-(x3& ~x1)-(x0&x1)- *(p0--))&0xffff; 212 t = ((x1 << 14)|(x1 >> 2)) & 0xffff;
206 t=((x1<<14)|(x1>>2))&0xffff; 213 x1 = (t - (x2 & ~x0) - (x3 & x0) - *(p0--)) & 0xffff;
207 x1=(t-(x2& ~x0)-(x3&x0)- *(p0--))&0xffff; 214 t = ((x0 << 15)|(x0 >> 1)) & 0xffff;
208 t=((x0<<15)|(x0>>1))&0xffff; 215 x0 = (t - (x1 & ~x3) - (x2 & x3) - *(p0--)) & 0xffff;
209 x0=(t-(x1& ~x3)-(x2&x3)- *(p0--))&0xffff; 216
210 217 if (--i == 0) {
211 if (--i == 0) 218 if (--n == 0)
212 { 219 break;
213 if (--n == 0) break; 220 i = (n == 2) ? 6 : 5;
214 i=(n == 2)?6:5; 221
215 222 x3 = (x3 - p1[x2 & 0x3f]) & 0xffff;
216 x3=(x3-p1[x2&0x3f])&0xffff; 223 x2 = (x2 - p1[x1 & 0x3f]) & 0xffff;
217 x2=(x2-p1[x1&0x3f])&0xffff; 224 x1 = (x1 - p1[x0 & 0x3f]) & 0xffff;
218 x1=(x1-p1[x0&0x3f])&0xffff; 225 x0 = (x0 - p1[x3 & 0x3f]) & 0xffff;
219 x0=(x0-p1[x3&0x3f])&0xffff;
220 }
221 } 226 }
222
223 d[0]=(unsigned long)(x0&0xffff)|((unsigned long)(x1&0xffff)<<16L);
224 d[1]=(unsigned long)(x2&0xffff)|((unsigned long)(x3&0xffff)<<16L);
225 } 227 }
226 228
229 d[0] = (unsigned long)(x0 & 0xffff)|((unsigned long)(x1 & 0xffff) <<
230 16L);
231 d[1] = (unsigned long)(x2 & 0xffff)|((unsigned long)(x3 & 0xffff) <<
232 16L);
233}
diff --git a/src/lib/libcrypto/rc2/rc2_ecb.c b/src/lib/libcrypto/rc2/rc2_ecb.c
index 84a671a572..c87cd99170 100644
--- a/src/lib/libcrypto/rc2/rc2_ecb.c
+++ b/src/lib/libcrypto/rc2/rc2_ecb.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2_ecb.c,v 1.7 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2_ecb.c,v 1.8 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -68,19 +68,23 @@
68 * Date: 11 Feb 1996 06:45:03 GMT 68 * Date: 11 Feb 1996 06:45:03 GMT
69 */ 69 */
70 70
71void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, RC2_KEY *ks, 71void
72 int encrypt) 72RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, RC2_KEY *ks,
73 { 73 int encrypt)
74 unsigned long l,d[2]; 74{
75 unsigned long l, d[2];
75 76
76 c2l(in,l); d[0]=l; 77 c2l(in, l);
77 c2l(in,l); d[1]=l; 78 d[0] = l;
79 c2l(in, l);
80 d[1] = l;
78 if (encrypt) 81 if (encrypt)
79 RC2_encrypt(d,ks); 82 RC2_encrypt(d, ks);
80 else 83 else
81 RC2_decrypt(d,ks); 84 RC2_decrypt(d, ks);
82 l=d[0]; l2c(l,out); 85 l = d[0];
83 l=d[1]; l2c(l,out); 86 l2c(l, out);
84 l=d[0]=d[1]=0; 87 l = d[1];
85 } 88 l2c(l, out);
86 89 l = d[0] = d[1] = 0;
90}
diff --git a/src/lib/libcrypto/rc2/rc2_local.h b/src/lib/libcrypto/rc2/rc2_local.h
index c8bb468d1d..64c9c5388d 100644
--- a/src/lib/libcrypto/rc2/rc2_local.h
+++ b/src/lib/libcrypto/rc2/rc2_local.h
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2_local.h,v 1.1 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2_local.h,v 1.2 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -57,100 +57,99 @@
57 */ 57 */
58 58
59#undef c2l 59#undef c2l
60#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \ 60#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \
61 l|=((unsigned long)(*((c)++)))<< 8L, \ 61 l|=((unsigned long)(*((c)++)))<< 8L, \
62 l|=((unsigned long)(*((c)++)))<<16L, \ 62 l|=((unsigned long)(*((c)++)))<<16L, \
63 l|=((unsigned long)(*((c)++)))<<24L) 63 l|=((unsigned long)(*((c)++)))<<24L)
64 64
65/* NOTE - c is not incremented as per c2l */ 65/* NOTE - c is not incremented as per c2l */
66#undef c2ln 66#undef c2ln
67#define c2ln(c,l1,l2,n) { \ 67#define c2ln(c,l1,l2,n) { \
68 c+=n; \ 68 c+=n; \
69 l1=l2=0; \ 69 l1=l2=0; \
70 switch (n) { \ 70 switch (n) { \
71 case 8: l2 =((unsigned long)(*(--(c))))<<24L; \ 71 case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
72 case 7: l2|=((unsigned long)(*(--(c))))<<16L; \ 72 case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
73 case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \ 73 case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
74 case 5: l2|=((unsigned long)(*(--(c)))); \ 74 case 5: l2|=((unsigned long)(*(--(c)))); \
75 case 4: l1 =((unsigned long)(*(--(c))))<<24L; \ 75 case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
76 case 3: l1|=((unsigned long)(*(--(c))))<<16L; \ 76 case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
77 case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \ 77 case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
78 case 1: l1|=((unsigned long)(*(--(c)))); \ 78 case 1: l1|=((unsigned long)(*(--(c)))); \
79 } \ 79 } \
80 } 80 }
81 81
82#undef l2c 82#undef l2c
83#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ 83#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
84 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ 84 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
85 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ 85 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
86 *((c)++)=(unsigned char)(((l)>>24L)&0xff)) 86 *((c)++)=(unsigned char)(((l)>>24L)&0xff))
87 87
88/* NOTE - c is not incremented as per l2c */ 88/* NOTE - c is not incremented as per l2c */
89#undef l2cn 89#undef l2cn
90#define l2cn(l1,l2,c,n) { \ 90#define l2cn(l1,l2,c,n) { \
91 c+=n; \ 91 c+=n; \
92 switch (n) { \ 92 switch (n) { \
93 case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \ 93 case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff);\
94 case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \ 94 case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff);\
95 case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \ 95 case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff);\
96 case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \ 96 case 5: *(--(c))=(unsigned char)(((l2) )&0xff);\
97 case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \ 97 case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff);\
98 case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \ 98 case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff);\
99 case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \ 99 case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff);\
100 case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \ 100 case 1: *(--(c))=(unsigned char)(((l1) )&0xff);\
101 } \ 101 } \
102 } 102 }
103 103
104/* NOTE - c is not incremented as per n2l */ 104/* NOTE - c is not incremented as per n2l */
105#define n2ln(c,l1,l2,n) { \ 105#define n2ln(c,l1,l2,n) { \
106 c+=n; \ 106 c+=n; \
107 l1=l2=0; \ 107 l1=l2=0; \
108 switch (n) { \ 108 switch (n) { \
109 case 8: l2 =((unsigned long)(*(--(c)))) ; \ 109 case 8: l2 =((unsigned long)(*(--(c)))) ; \
110 case 7: l2|=((unsigned long)(*(--(c))))<< 8; \ 110 case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
111 case 6: l2|=((unsigned long)(*(--(c))))<<16; \ 111 case 6: l2|=((unsigned long)(*(--(c))))<<16; \
112 case 5: l2|=((unsigned long)(*(--(c))))<<24; \ 112 case 5: l2|=((unsigned long)(*(--(c))))<<24; \
113 case 4: l1 =((unsigned long)(*(--(c)))) ; \ 113 case 4: l1 =((unsigned long)(*(--(c)))) ; \
114 case 3: l1|=((unsigned long)(*(--(c))))<< 8; \ 114 case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
115 case 2: l1|=((unsigned long)(*(--(c))))<<16; \ 115 case 2: l1|=((unsigned long)(*(--(c))))<<16; \
116 case 1: l1|=((unsigned long)(*(--(c))))<<24; \ 116 case 1: l1|=((unsigned long)(*(--(c))))<<24; \
117 } \ 117 } \
118 } 118 }
119 119
120/* NOTE - c is not incremented as per l2n */ 120/* NOTE - c is not incremented as per l2n */
121#define l2nn(l1,l2,c,n) { \ 121#define l2nn(l1,l2,c,n) { \
122 c+=n; \ 122 c+=n; \
123 switch (n) { \ 123 switch (n) { \
124 case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \ 124 case 8: *(--(c))=(unsigned char)(((l2) )&0xff);\
125 case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ 125 case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff);\
126 case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ 126 case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff);\
127 case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ 127 case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff);\
128 case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \ 128 case 4: *(--(c))=(unsigned char)(((l1) )&0xff);\
129 case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ 129 case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff);\
130 case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ 130 case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff);\
131 case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ 131 case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff);\
132 } \ 132 } \
133 } 133 }
134 134
135#undef n2l 135#undef n2l
136#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \ 136#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \
137 l|=((unsigned long)(*((c)++)))<<16L, \ 137 l|=((unsigned long)(*((c)++)))<<16L, \
138 l|=((unsigned long)(*((c)++)))<< 8L, \ 138 l|=((unsigned long)(*((c)++)))<< 8L, \
139 l|=((unsigned long)(*((c)++)))) 139 l|=((unsigned long)(*((c)++))))
140 140
141#undef l2n 141#undef l2n
142#define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ 142#define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \
143 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ 143 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
144 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ 144 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
145 *((c)++)=(unsigned char)(((l) )&0xff)) 145 *((c)++)=(unsigned char)(((l) )&0xff))
146 146
147#define C_RC2(n) \ 147#define C_RC2(n) \
148 t=(x0+(x1& ~x3)+(x2&x3)+ *(p0++))&0xffff; \ 148 t=(x0+(x1& ~x3)+(x2&x3)+ *(p0++))&0xffff; \
149 x0=(t<<1)|(t>>15); \ 149 x0=(t<<1)|(t>>15); \
150 t=(x1+(x2& ~x0)+(x3&x0)+ *(p0++))&0xffff; \ 150 t=(x1+(x2& ~x0)+(x3&x0)+ *(p0++))&0xffff; \
151 x1=(t<<2)|(t>>14); \ 151 x1=(t<<2)|(t>>14); \
152 t=(x2+(x3& ~x1)+(x0&x1)+ *(p0++))&0xffff; \ 152 t=(x2+(x3& ~x1)+(x0&x1)+ *(p0++))&0xffff; \
153 x2=(t<<3)|(t>>13); \ 153 x2=(t<<3)|(t>>13); \
154 t=(x3+(x0& ~x2)+(x1&x2)+ *(p0++))&0xffff; \ 154 t=(x3+(x0& ~x2)+(x1&x2)+ *(p0++))&0xffff; \
155 x3=(t<<5)|(t>>11); 155 x3=(t<<5)|(t>>11);
156
diff --git a/src/lib/libcrypto/rc2/rc2_skey.c b/src/lib/libcrypto/rc2/rc2_skey.c
index 82161b16f3..640ff7ad9b 100644
--- a/src/lib/libcrypto/rc2/rc2_skey.c
+++ b/src/lib/libcrypto/rc2/rc2_skey.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2_skey.c,v 1.13 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2_skey.c,v 1.14 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -91,48 +91,51 @@ static const unsigned char key_table[256]={
91 * BSAFE uses the 'retarded' version. What I previously shipped is 91 * BSAFE uses the 'retarded' version. What I previously shipped is
92 * the same as specifying 1024 for the 'bits' parameter. Bsafe uses 92 * the same as specifying 1024 for the 'bits' parameter. Bsafe uses
93 * a version where the bits parameter is the same as len*8 */ 93 * a version where the bits parameter is the same as len*8 */
94void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits) 94void
95 { 95RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits)
96 int i,j; 96{
97 int i, j;
97 unsigned char *k; 98 unsigned char *k;
98 RC2_INT *ki; 99 RC2_INT *ki;
99 unsigned int c,d; 100 unsigned int c, d;
100 101
101 k= (unsigned char *)&(key->data[0]); 102 k = (unsigned char *)&(key->data[0]);
102 *k=0; /* for if there is a zero length key */ 103 *k = 0; /* for if there is a zero length key */
103 104
104 if (len > 128) len=128; 105 if (len > 128)
105 if (bits <= 0) bits=1024; 106 len = 128;
106 if (bits > 1024) bits=1024; 107 if (bits <= 0)
108 bits = 1024;
109 if (bits > 1024)
110 bits = 1024;
107 111
108 for (i=0; i<len; i++) 112 for (i = 0; i < len; i++)
109 k[i]=data[i]; 113 k[i] = data[i];
110 114
111 /* expand table */ 115 /* expand table */
112 d=k[len-1]; 116 d = k[len - 1];
113 j=0; 117 j = 0;
114 for (i=len; i < 128; i++,j++) 118 for (i = len; i < 128; i++, j++)
115 { 119 {
116 d=key_table[(k[j]+d)&0xff]; 120 d = key_table[(k[j] + d) & 0xff];
117 k[i]=d; 121 k[i] = d;
118 } 122 }
119 123
120 /* hmm.... key reduction to 'bits' bits */ 124 /* hmm.... key reduction to 'bits' bits */
121 125
122 j=(bits+7)>>3; 126 j = (bits + 7) >> 3;
123 i=128-j; 127 i = 128 - j;
124 c= (0xff>>(-bits & 0x07)); 128 c = (0xff >> (-bits & 0x07));
125 129
126 d=key_table[k[i]&c]; 130 d = key_table[k[i] & c];
127 k[i]=d; 131 k[i] = d;
128 while (i--) 132 while (i--) {
129 { 133 d = key_table[k[i + j] ^ d];
130 d=key_table[k[i+j]^d]; 134 k[i] = d;
131 k[i]=d; 135 }
132 }
133 136
134 /* copy from bytes into RC2_INT's */ 137 /* copy from bytes into RC2_INT's */
135 ki= &(key->data[63]); 138 ki = &(key->data[63]);
136 for (i=127; i>=0; i-=2) 139 for (i = 127; i >= 0; i -= 2)
137 *(ki--)=((k[i]<<8)|k[i-1])&0xffff; 140 *(ki--) = ((k[i] << 8)|k[i - 1]) & 0xffff;
138 } 141}
diff --git a/src/lib/libcrypto/rc2/rc2cfb64.c b/src/lib/libcrypto/rc2/rc2cfb64.c
index ebdeb9ba54..e320f5ef94 100644
--- a/src/lib/libcrypto/rc2/rc2cfb64.c
+++ b/src/lib/libcrypto/rc2/rc2cfb64.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2cfb64.c,v 1.6 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2cfb64.c,v 1.7 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -64,59 +64,60 @@
64 * 64bit block we have used is contained in *num; 64 * 64bit block we have used is contained in *num;
65 */ 65 */
66 66
67void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, 67void
68 long length, RC2_KEY *schedule, unsigned char *ivec, 68RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out,
69 int *num, int encrypt) 69 long length, RC2_KEY *schedule, unsigned char *ivec,
70 { 70 int *num, int encrypt)
71 unsigned long v0,v1,t; 71{
72 int n= *num; 72 unsigned long v0, v1, t;
73 long l=length; 73 int n = *num;
74 long l = length;
74 unsigned long ti[2]; 75 unsigned long ti[2];
75 unsigned char *iv,c,cc; 76 unsigned char *iv, c, cc;
76 77
77 iv=(unsigned char *)ivec; 78 iv = (unsigned char *)ivec;
78 if (encrypt) 79 if (encrypt) {
79 { 80 while (l--) {
80 while (l--) 81 if (n == 0) {
81 { 82 c2l(iv, v0);
82 if (n == 0) 83 ti[0] = v0;
83 { 84 c2l(iv, v1);
84 c2l(iv,v0); ti[0]=v0; 85 ti[1] = v1;
85 c2l(iv,v1); ti[1]=v1; 86 RC2_encrypt((unsigned long *)ti, schedule);
86 RC2_encrypt((unsigned long *)ti,schedule); 87 iv = (unsigned char *)ivec;
87 iv=(unsigned char *)ivec; 88 t = ti[0];
88 t=ti[0]; l2c(t,iv); 89 l2c(t, iv);
89 t=ti[1]; l2c(t,iv); 90 t = ti[1];
90 iv=(unsigned char *)ivec; 91 l2c(t, iv);
91 } 92 iv = (unsigned char *)ivec;
92 c= *(in++)^iv[n];
93 *(out++)=c;
94 iv[n]=c;
95 n=(n+1)&0x07;
96 } 93 }
94 c = *(in++) ^ iv[n];
95 *(out++) = c;
96 iv[n] = c;
97 n = (n + 1) & 0x07;
97 } 98 }
98 else 99 } else {
99 { 100 while (l--) {
100 while (l--) 101 if (n == 0) {
101 { 102 c2l(iv, v0);
102 if (n == 0) 103 ti[0] = v0;
103 { 104 c2l(iv, v1);
104 c2l(iv,v0); ti[0]=v0; 105 ti[1] = v1;
105 c2l(iv,v1); ti[1]=v1; 106 RC2_encrypt((unsigned long *)ti, schedule);
106 RC2_encrypt((unsigned long *)ti,schedule); 107 iv = (unsigned char *)ivec;
107 iv=(unsigned char *)ivec; 108 t = ti[0];
108 t=ti[0]; l2c(t,iv); 109 l2c(t, iv);
109 t=ti[1]; l2c(t,iv); 110 t = ti[1];
110 iv=(unsigned char *)ivec; 111 l2c(t, iv);
111 } 112 iv = (unsigned char *)ivec;
112 cc= *(in++);
113 c=iv[n];
114 iv[n]=cc;
115 *(out++)=c^cc;
116 n=(n+1)&0x07;
117 } 113 }
114 cc = *(in++);
115 c = iv[n];
116 iv[n] = cc;
117 *(out++) = c ^ cc;
118 n = (n + 1) & 0x07;
118 } 119 }
119 v0=v1=ti[0]=ti[1]=t=c=cc=0;
120 *num=n;
121 } 120 }
122 121 v0 = v1 = ti[0] = ti[1] = t = c = cc = 0;
122 *num = n;
123}
diff --git a/src/lib/libcrypto/rc2/rc2ofb64.c b/src/lib/libcrypto/rc2/rc2ofb64.c
index 2aa241357d..f7cbce6c12 100644
--- a/src/lib/libcrypto/rc2/rc2ofb64.c
+++ b/src/lib/libcrypto/rc2/rc2ofb64.c
@@ -1,25 +1,25 @@
1/* $OpenBSD: rc2ofb64.c,v 1.6 2022/11/26 16:08:54 tb Exp $ */ 1/* $OpenBSD: rc2ofb64.c,v 1.7 2023/07/07 08:29:37 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 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 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 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 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. 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 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. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 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: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 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 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 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 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -63,49 +63,48 @@
63 * used. The extra state information to record how much of the 63 * used. The extra state information to record how much of the
64 * 64bit block we have used is contained in *num; 64 * 64bit block we have used is contained in *num;
65 */ 65 */
66void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, 66void
67 long length, RC2_KEY *schedule, unsigned char *ivec, 67RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out,
68 int *num) 68 long length, RC2_KEY *schedule, unsigned char *ivec,
69 { 69 int *num)
70 unsigned long v0,v1,t; 70{
71 int n= *num; 71 unsigned long v0, v1, t;
72 long l=length; 72 int n = *num;
73 long l = length;
73 unsigned char d[8]; 74 unsigned char d[8];
74 char *dp; 75 char *dp;
75 unsigned long ti[2]; 76 unsigned long ti[2];
76 unsigned char *iv; 77 unsigned char *iv;
77 int save=0; 78 int save = 0;
78 79
79 iv=(unsigned char *)ivec; 80 iv = (unsigned char *)ivec;
80 c2l(iv,v0); 81 c2l(iv, v0);
81 c2l(iv,v1); 82 c2l(iv, v1);
82 ti[0]=v0; 83 ti[0] = v0;
83 ti[1]=v1; 84 ti[1] = v1;
84 dp=(char *)d; 85 dp = (char *)d;
85 l2c(v0,dp); 86 l2c(v0, dp);
86 l2c(v1,dp); 87 l2c(v1, dp);
87 while (l--) 88 while (l--) {
88 { 89 if (n == 0) {
89 if (n == 0) 90 RC2_encrypt((unsigned long *)ti, schedule);
90 { 91 dp = (char *)d;
91 RC2_encrypt((unsigned long *)ti,schedule); 92 t = ti[0];
92 dp=(char *)d; 93 l2c(t, dp);
93 t=ti[0]; l2c(t,dp); 94 t = ti[1];
94 t=ti[1]; l2c(t,dp); 95 l2c(t, dp);
95 save++; 96 save++;
96 }
97 *(out++)= *(in++)^d[n];
98 n=(n+1)&0x07;
99 }
100 if (save)
101 {
102 v0=ti[0];
103 v1=ti[1];
104 iv=(unsigned char *)ivec;
105 l2c(v0,iv);
106 l2c(v1,iv);
107 } 97 }
108 t=v0=v1=ti[0]=ti[1]=0; 98 *(out++) = *(in++) ^ d[n];
109 *num=n; 99 n = (n + 1) & 0x07;
110 } 100 }
111 101 if (save) {
102 v0 = ti[0];
103 v1 = ti[1];
104 iv = (unsigned char *)ivec;
105 l2c(v0, iv);
106 l2c(v1, iv);
107 }
108 t = v0 = v1 = ti[0] = ti[1] = 0;
109 *num = n;
110}