diff options
author | jsing <> | 2024-03-27 12:54:42 +0000 |
---|---|---|
committer | jsing <> | 2024-03-27 12:54:42 +0000 |
commit | 139a4095bb73b0cec0c6e513fb6c5321e9308b8b (patch) | |
tree | 6b1943c4f5515896596487d1c4ab719428e797c1 /src | |
parent | fa47f9b2c9e10ca57d1333a9d9d84269455b0b4d (diff) | |
download | openbsd-139a4095bb73b0cec0c6e513fb6c5321e9308b8b.tar.gz openbsd-139a4095bb73b0cec0c6e513fb6c5321e9308b8b.tar.bz2 openbsd-139a4095bb73b0cec0c6e513fb6c5321e9308b8b.zip |
Consolidate rc4 code.
Discussed with tb@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/Makefile | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/aarch64/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/alpha/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/arm/Makefile.inc | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/hppa/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/mips64/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/powerpc/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/powerpc64/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/riscv64/Makefile.inc | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/arch/sparc64/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libcrypto/rc4/rc4.c (renamed from src/lib/libcrypto/rc4/rc4_enc.c) | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/rc4/rc4_skey.c | 97 |
12 files changed, 50 insertions, 119 deletions
diff --git a/src/lib/libcrypto/Makefile b/src/lib/libcrypto/Makefile index 606dc61792..b57b1fd36c 100644 --- a/src/lib/libcrypto/Makefile +++ b/src/lib/libcrypto/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile,v 1.177 2024/03/27 11:24:15 jsing Exp $ | 1 | # $OpenBSD: Makefile,v 1.178 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | LIB= crypto | 3 | LIB= crypto |
4 | LIBREBUILD=y | 4 | LIBREBUILD=y |
@@ -796,8 +796,7 @@ SRCS+= cmll_cbc.c | |||
796 | SRCS+= cmll_misc.c | 796 | SRCS+= cmll_misc.c |
797 | SRCS+= des_enc.c | 797 | SRCS+= des_enc.c |
798 | SRCS+= fcrypt_b.c | 798 | SRCS+= fcrypt_b.c |
799 | SRCS+= rc4_enc.c | 799 | SRCS+= rc4.c |
800 | SRCS+= rc4_skey.c | ||
801 | SRCS+= wp_block.c | 800 | SRCS+= wp_block.c |
802 | .endif | 801 | .endif |
803 | 802 | ||
diff --git a/src/lib/libcrypto/arch/aarch64/Makefile.inc b/src/lib/libcrypto/arch/aarch64/Makefile.inc index bf332428b5..c9bc4c1701 100644 --- a/src/lib/libcrypto/arch/aarch64/Makefile.inc +++ b/src/lib/libcrypto/arch/aarch64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.6 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.7 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # aarch64-specific libcrypto build rules | 3 | # aarch64-specific libcrypto build rules |
4 | 4 | ||
@@ -11,7 +11,7 @@ SRCS+= camellia.c cmll_cbc.c cmll_misc.c | |||
11 | SRCS+= des_enc.c fcrypt_b.c | 11 | SRCS+= des_enc.c fcrypt_b.c |
12 | # modes | 12 | # modes |
13 | # rc4 | 13 | # rc4 |
14 | SRCS+= rc4_enc.c rc4_skey.c | 14 | SRCS+= rc4.c |
15 | # sha | 15 | # sha |
16 | # whrlpool | 16 | # whrlpool |
17 | SRCS+= wp_block.c | 17 | SRCS+= wp_block.c |
diff --git a/src/lib/libcrypto/arch/alpha/Makefile.inc b/src/lib/libcrypto/arch/alpha/Makefile.inc index 20bc246d46..52618fdb1d 100644 --- a/src/lib/libcrypto/arch/alpha/Makefile.inc +++ b/src/lib/libcrypto/arch/alpha/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.7 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.8 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # alpha-specific libcrypto build rules | 3 | # alpha-specific libcrypto build rules |
4 | 4 | ||
@@ -15,7 +15,7 @@ SRCS+= des_enc.c fcrypt_b.c | |||
15 | CFLAGS+= -DGHASH_ASM | 15 | CFLAGS+= -DGHASH_ASM |
16 | SSLASM+= modes ghash-alpha | 16 | SSLASM+= modes ghash-alpha |
17 | # rc4 | 17 | # rc4 |
18 | SRCS+= rc4_enc.c rc4_skey.c | 18 | SRCS+= rc4.c |
19 | # sha | 19 | # sha |
20 | CFLAGS+= -DSHA1_ASM | 20 | CFLAGS+= -DSHA1_ASM |
21 | SSLASM+= sha sha1-alpha | 21 | SSLASM+= sha sha1-alpha |
diff --git a/src/lib/libcrypto/arch/arm/Makefile.inc b/src/lib/libcrypto/arch/arm/Makefile.inc index ae57ae0eec..a0b1a90df9 100644 --- a/src/lib/libcrypto/arch/arm/Makefile.inc +++ b/src/lib/libcrypto/arch/arm/Makefile.inc | |||
@@ -17,7 +17,7 @@ SRCS+= des_enc.c fcrypt_b.c | |||
17 | CFLAGS+= -DGHASH_ASM | 17 | CFLAGS+= -DGHASH_ASM |
18 | SSLASM+= modes ghash-armv4 | 18 | SSLASM+= modes ghash-armv4 |
19 | # rc4 | 19 | # rc4 |
20 | SRCS+= rc4_enc.c rc4_skey.c | 20 | SRCS+= rc4.c |
21 | # sha | 21 | # sha |
22 | CFLAGS+= -DSHA1_ASM | 22 | CFLAGS+= -DSHA1_ASM |
23 | SSLASM+= sha sha1-armv4-large | 23 | SSLASM+= sha sha1-armv4-large |
diff --git a/src/lib/libcrypto/arch/hppa/Makefile.inc b/src/lib/libcrypto/arch/hppa/Makefile.inc index 5454a4e7ae..75bb288c91 100644 --- a/src/lib/libcrypto/arch/hppa/Makefile.inc +++ b/src/lib/libcrypto/arch/hppa/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.15 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.16 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # hppa-specific libcrypto build rules | 3 | # hppa-specific libcrypto build rules |
4 | 4 | ||
@@ -20,7 +20,7 @@ SSLASM+= modes ghash-parisc ghash-parisc | |||
20 | .if 0 # about 35% slower than C code | 20 | .if 0 # about 35% slower than C code |
21 | SSLASM+= rc4 rc4-parisc rc4-parisc | 21 | SSLASM+= rc4 rc4-parisc rc4-parisc |
22 | .else | 22 | .else |
23 | SRCS+= rc4_enc.c rc4_skey.c | 23 | SRCS+= rc4.c |
24 | .endif | 24 | .endif |
25 | # sha | 25 | # sha |
26 | CFLAGS+= -DSHA1_ASM | 26 | CFLAGS+= -DSHA1_ASM |
diff --git a/src/lib/libcrypto/arch/mips64/Makefile.inc b/src/lib/libcrypto/arch/mips64/Makefile.inc index 403c9d3278..e13906e954 100644 --- a/src/lib/libcrypto/arch/mips64/Makefile.inc +++ b/src/lib/libcrypto/arch/mips64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.8 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.9 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # mips64-specific libcrypto build rules | 3 | # mips64-specific libcrypto build rules |
4 | 4 | ||
@@ -15,7 +15,7 @@ SRCS+= camellia.c cmll_cbc.c cmll_misc.c | |||
15 | # des | 15 | # des |
16 | SRCS+= des_enc.c fcrypt_b.c | 16 | SRCS+= des_enc.c fcrypt_b.c |
17 | # rc4 | 17 | # rc4 |
18 | SRCS+= rc4_enc.c rc4_skey.c | 18 | SRCS+= rc4.c |
19 | # sha | 19 | # sha |
20 | SSLASM+= sha sha1-mips sha1-mips | 20 | SSLASM+= sha sha1-mips sha1-mips |
21 | CFLAGS+= -DSHA1_ASM | 21 | CFLAGS+= -DSHA1_ASM |
diff --git a/src/lib/libcrypto/arch/powerpc/Makefile.inc b/src/lib/libcrypto/arch/powerpc/Makefile.inc index 86ea364038..76d42f9e87 100644 --- a/src/lib/libcrypto/arch/powerpc/Makefile.inc +++ b/src/lib/libcrypto/arch/powerpc/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.5 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.6 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # powerpc-specific libcrypto build rules | 3 | # powerpc-specific libcrypto build rules |
4 | 4 | ||
@@ -17,7 +17,7 @@ SRCS+= camellia.c cmll_cbc.c cmll_misc.c | |||
17 | # des | 17 | # des |
18 | SRCS+= des_enc.c fcrypt_b.c | 18 | SRCS+= des_enc.c fcrypt_b.c |
19 | # rc4 | 19 | # rc4 |
20 | SRCS+= rc4_enc.c rc4_skey.c | 20 | SRCS+= rc4.c |
21 | # sha | 21 | # sha |
22 | CFLAGS+= -DSHA1_ASM | 22 | CFLAGS+= -DSHA1_ASM |
23 | SSLASM+= sha sha1-ppc sha1-ppc | 23 | SSLASM+= sha sha1-ppc sha1-ppc |
diff --git a/src/lib/libcrypto/arch/powerpc64/Makefile.inc b/src/lib/libcrypto/arch/powerpc64/Makefile.inc index 8816f0d29c..5abddf2c9b 100644 --- a/src/lib/libcrypto/arch/powerpc64/Makefile.inc +++ b/src/lib/libcrypto/arch/powerpc64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.7 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.8 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # powerpc-specific libcrypto build rules | 3 | # powerpc-specific libcrypto build rules |
4 | 4 | ||
@@ -17,7 +17,7 @@ SRCS+= camellia.c cmll_cbc.c cmll_misc.c | |||
17 | # des | 17 | # des |
18 | SRCS+= des_enc.c fcrypt_b.c | 18 | SRCS+= des_enc.c fcrypt_b.c |
19 | # rc4 | 19 | # rc4 |
20 | SRCS+= rc4_enc.c rc4_skey.c | 20 | SRCS+= rc4.c |
21 | # sha | 21 | # sha |
22 | #CFLAGS+= -DSHA1_ASM | 22 | #CFLAGS+= -DSHA1_ASM |
23 | #SSLASM+= sha sha1-ppc sha1-ppc | 23 | #SSLASM+= sha sha1-ppc sha1-ppc |
diff --git a/src/lib/libcrypto/arch/riscv64/Makefile.inc b/src/lib/libcrypto/arch/riscv64/Makefile.inc index e0d7e1863d..7d426ae9bb 100644 --- a/src/lib/libcrypto/arch/riscv64/Makefile.inc +++ b/src/lib/libcrypto/arch/riscv64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.3 2024/03/27 11:12:08 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.4 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # riscv64 libcrypto build rules | 3 | # riscv64 libcrypto build rules |
4 | 4 | ||
@@ -16,8 +16,7 @@ SRCS+= des_enc.c | |||
16 | SRCS+= fcrypt_b.c | 16 | SRCS+= fcrypt_b.c |
17 | 17 | ||
18 | # rc4 | 18 | # rc4 |
19 | SRCS+= rc4_enc.c | 19 | SRCS+= rc4.c |
20 | SRCS+= rc4_skey.c | ||
21 | 20 | ||
22 | # whrlpool | 21 | # whrlpool |
23 | SRCS+= wp_block.c | 22 | SRCS+= wp_block.c |
diff --git a/src/lib/libcrypto/arch/sparc64/Makefile.inc b/src/lib/libcrypto/arch/sparc64/Makefile.inc index dcc9033f50..12003fa6c5 100644 --- a/src/lib/libcrypto/arch/sparc64/Makefile.inc +++ b/src/lib/libcrypto/arch/sparc64/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.9 2024/03/27 11:12:09 jsing Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.10 2024/03/27 12:54:42 jsing Exp $ |
2 | 2 | ||
3 | # sparc64-specific libcrypto build rules | 3 | # sparc64-specific libcrypto build rules |
4 | 4 | ||
@@ -19,7 +19,7 @@ des_enc-sparc.S: ${LCRYPTO_SRC}/des/asm/des_enc.m4 | |||
19 | CFLAGS+= -DGHASH_ASM | 19 | CFLAGS+= -DGHASH_ASM |
20 | SSLASM+= modes ghash-sparcv9 ghash-sparcv9 | 20 | SSLASM+= modes ghash-sparcv9 ghash-sparcv9 |
21 | # rc4 | 21 | # rc4 |
22 | SRCS+= rc4_enc.c rc4_skey.c | 22 | SRCS+= rc4.c |
23 | # sha | 23 | # sha |
24 | SSLASM+= sha sha1-sparcv9 sha1-sparcv9 | 24 | SSLASM+= sha sha1-sparcv9 sha1-sparcv9 |
25 | CFLAGS+= -DSHA1_ASM | 25 | CFLAGS+= -DSHA1_ASM |
diff --git a/src/lib/libcrypto/rc4/rc4_enc.c b/src/lib/libcrypto/rc4/rc4.c index fdae87219e..bbf7c3ae4e 100644 --- a/src/lib/libcrypto/rc4/rc4_enc.c +++ b/src/lib/libcrypto/rc4/rc4.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rc4_enc.c,v 1.19 2024/03/27 12:14:35 jsing Exp $ */ | 1 | /* $OpenBSD: rc4.c,v 1.8 2024/03/27 12:54:42 jsing 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 | * |
@@ -251,3 +251,33 @@ RC4(RC4_KEY *key, size_t len, const unsigned char *indata, | |||
251 | key->x = x; | 251 | key->x = x; |
252 | key->y = y; | 252 | key->y = y; |
253 | } | 253 | } |
254 | |||
255 | void | ||
256 | RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | ||
257 | { | ||
258 | RC4_INT tmp; | ||
259 | int id1, id2; | ||
260 | RC4_INT *d; | ||
261 | unsigned int i; | ||
262 | |||
263 | d = &(key->data[0]); | ||
264 | key->x = 0; | ||
265 | key->y = 0; | ||
266 | id1 = id2 = 0; | ||
267 | |||
268 | #define SK_LOOP(d,n) { \ | ||
269 | tmp=d[(n)]; \ | ||
270 | id2 = (data[id1] + tmp + id2) & 0xff; \ | ||
271 | if (++id1 == len) id1=0; \ | ||
272 | d[(n)]=d[id2]; \ | ||
273 | d[id2]=tmp; } | ||
274 | |||
275 | for (i = 0; i < 256; i++) | ||
276 | d[i] = i; | ||
277 | for (i = 0; i < 256; i += 4) { | ||
278 | SK_LOOP(d, i + 0); | ||
279 | SK_LOOP(d, i + 1); | ||
280 | SK_LOOP(d, i + 2); | ||
281 | SK_LOOP(d, i + 3); | ||
282 | } | ||
283 | } | ||
diff --git a/src/lib/libcrypto/rc4/rc4_skey.c b/src/lib/libcrypto/rc4/rc4_skey.c deleted file mode 100644 index d0c45645a1..0000000000 --- a/src/lib/libcrypto/rc4/rc4_skey.c +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* $OpenBSD: rc4_skey.c,v 1.17 2024/03/27 12:14:35 jsing 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/rc4.h> | ||
60 | |||
61 | /* RC4 as implemented from a posting from | ||
62 | * Newsgroups: sci.crypt | ||
63 | * From: sterndark@netcom.com (David Sterndark) | ||
64 | * Subject: RC4 Algorithm revealed. | ||
65 | * Message-ID: <sternCvKL4B.Hyy@netcom.com> | ||
66 | * Date: Wed, 14 Sep 1994 06:35:31 GMT | ||
67 | */ | ||
68 | |||
69 | void | ||
70 | RC4_set_key(RC4_KEY *key, int len, const unsigned char *data) | ||
71 | { | ||
72 | RC4_INT tmp; | ||
73 | int id1, id2; | ||
74 | RC4_INT *d; | ||
75 | unsigned int i; | ||
76 | |||
77 | d = &(key->data[0]); | ||
78 | key->x = 0; | ||
79 | key->y = 0; | ||
80 | id1 = id2 = 0; | ||
81 | |||
82 | #define SK_LOOP(d,n) { \ | ||
83 | tmp=d[(n)]; \ | ||
84 | id2 = (data[id1] + tmp + id2) & 0xff; \ | ||
85 | if (++id1 == len) id1=0; \ | ||
86 | d[(n)]=d[id2]; \ | ||
87 | d[id2]=tmp; } | ||
88 | |||
89 | for (i = 0; i < 256; i++) | ||
90 | d[i] = i; | ||
91 | for (i = 0; i < 256; i += 4) { | ||
92 | SK_LOOP(d, i + 0); | ||
93 | SK_LOOP(d, i + 1); | ||
94 | SK_LOOP(d, i + 2); | ||
95 | SK_LOOP(d, i + 3); | ||
96 | } | ||
97 | } | ||