1
+ Rebol [
2
+ Title: "Rebol3 RC4 test script"
3
+ Author: "Oldes, Peter W A Wood"
4
+ File: %rc4-test.r3
5
+ Tabs: 4
6
+ Needs: [%../quick-test-module.r3 ]
7
+ ]
8
+
9
+ ~~~start-file~~~ "RC4"
10
+
11
+ ===start-group=== "Stream Cipher RC4"
12
+
13
+ --test-- "Basic RC4 usage"
14
+ seed: #{ CAFE } ;- used as a password which Boban and Alice knows
15
+
16
+ k-Alice: rc4/key seed
17
+ k-Boban: rc4/key seed
18
+
19
+ message: to binary! "Hello"
20
+ crypted-msg: rc4/stream k-Alice message
21
+
22
+ ;- Alice sends crypted message to Boban, which is using key with same seed
23
+
24
+ decrypted-msg: rc4/stream k-Boban crypted-msg
25
+
26
+ --assert message = decrypted-msg
27
+
28
+ ===end-group===
29
+
30
+ ===start-group=== "Stream Cipher RC4 (RFC6229 Test Vectors)"
31
+
32
+ ;@@ https://tools.ietf.org/html/rfc6229
33
+
34
+ message: make binary! 4112
35
+ n: 1
36
+
37
+ foreach [key result] [
38
+ #{ 0102030405 } #{
39
+ b2396305f03dc027ccc3524a0a1118a8
40
+ 6982944f18fc82d589c403a47a0d0919
41
+ 28cb1132c96ce286421dcaadb8b69eae
42
+ 1cfcf62b03eddb641d77dfcf7f8d8c93
43
+ 42b7d0cdd918a8a33dd51781c81f4041
44
+ 6459844432a7da923cfb3eb4980661f6
45
+ ec10327bde2beefd18f9277680457e22
46
+ eb62638d4f0ba1fe9fca20e05bf8ff2b
47
+ 45129048e6a0ed0b56b490338f078da5
48
+ 30abbcc7c20b01609f23ee2d5f6bb7df
49
+ 3294f744d8f9790507e70f62e5bbceea
50
+ d8729db41882259bee4f825325f5a130
51
+ 1eb14a0c13b3bf47fa2a0ba93ad45b8b
52
+ cc582f8ba9f265e2b1be9112e975d2d7
53
+ f2e30f9bd102ecbf75aaade9bc35c43c
54
+ ec0e11c479dc329dc8da7968fe965681
55
+ 068326a2118416d21f9d04b2cd1ca050
56
+ ff25b58995996707e51fbdf08b34d875 }
57
+
58
+ #{ 01020304050607 } #{
59
+ 293f02d47f37c9b633f2af5285feb46b
60
+ e620f1390d19bd84e2e0fd752031afc1
61
+ 914f02531c9218810df60f67e338154c
62
+ d0fdb583073ce85ab83917740ec011d5
63
+ 75f81411e871cffa70b90c74c592e454
64
+ 0bb87202938dad609e87a5a1b079e5e4
65
+ c2911246b612e7e7b903dfeda1dad866
66
+ 32828f91502b6291368de8081de36fc2
67
+ f3b9a7e3b297bf9ad804512f9063eff1
68
+ 8ecb67a9ba1f55a5a067e2b026a3676f
69
+ d2aa902bd42d0d7cfd340cd45810529f
70
+ 78b272c96e42eab4c60bd914e39d06e3
71
+ f4332fd31a079396ee3cee3f2a4ff049
72
+ 05459781d41fda7f30c1be7e1246c623
73
+ adfd3868b8e51485d5e610017e3dd609
74
+ ad26581c0c5be45f4cea01db2f3805d5
75
+ f3172ceffc3b3d997c85ccd5af1a950c
76
+ e74b0b9731227fd37c0ec08a47ddd8b8 }
77
+
78
+ #{ 0102030405060708 } #{
79
+ 97ab8a1bf0afb96132f2f67258da15a8
80
+ 8263efdb45c4a18684ef87e6b19e5b09
81
+ 9636ebc9841926f4f7d1f362bddf6e18
82
+ d0a990ff2c05fef5b90373c9ff4b870a
83
+ 73239f1db7f41d80b643c0c52518ec63
84
+ 163b319923a6bdb4527c626126703c0f
85
+ 49d6c8af0f97144a87df21d91472f966
86
+ 44173a103b6616c5d5ad1cee40c863d0
87
+ 273c9c4b27f322e4e716ef53a47de7a4
88
+ c6d0e7b226259fa9023490b26167ad1d
89
+ 1fe8986713f07c3d9ae1c163ff8cf9d3
90
+ 8369e1a965610be887fbd0c79162aafb
91
+ 0a0127abb44484b9fbef5abcae1b579f
92
+ c2cdadc6402e8ee866e1f37bdb47e42c
93
+ 26b51ea37df8e1d6f76fc3b66a7429b3
94
+ bc7683205d4f443dc1f29dda3315c87b
95
+ d5fa5a3469d29aaaf83d23589db8c85b
96
+ 3fb46e2c8f0f068edce8cdcd7dfc5862 }
97
+
98
+ #{ 0102030405060708090a } #{
99
+ ede3b04643e586cc907dc21851709902
100
+ 03516ba78f413beb223aa5d4d2df6711
101
+ 3cfd6cb58ee0fdde640176ad0000044d
102
+ 48532b21fb6079c9114c0ffd9c04a1ad
103
+ 3e8cea98017109979084b1ef92f99d86
104
+ e20fb49bdb337ee48b8d8dc0f4afeffe
105
+ 5c2521eacd7966f15e056544bea0d315
106
+ e067a7031931a246a6c3875d2f678acb
107
+ a64f70af88ae56b6f87581c0e23e6b08
108
+ f449031de312814ec6f319291f4a0516
109
+ bdae85924b3cb1d0a2e33a30c6d79599
110
+ 8a0feddbac865a09bcd127fb562ed60a
111
+ b55a0a5b51a12a8be34899c3e047511a
112
+ d9a09cea3ce75fe39698070317a71339
113
+ 552225ed1177f44584ac8cfa6c4eb5fc
114
+ 7e82cbabfc95381b080998442129c2f8
115
+ 1f135ed14ce60a91369d2322bef25e3c
116
+ 08b6be45124a43e2eb77953f84dc8553 }
117
+
118
+ #{ 0102030405060708090a0b0c0d0e0f10 } #{
119
+ 9ac7cc9a609d1ef7b2932899cde41b97
120
+ 5248c4959014126a6e8a84f11d1a9e1c
121
+ 065902e4b620f6cc36c8589f66432f2b
122
+ d39d566bc6bce3010768151549f3873f
123
+ b6d1e6c4a5e4771cad79538df295fb11
124
+ c68c1d5c559a974123df1dbc52a43b89
125
+ c5ecf88de897fd57fed301701b82a259
126
+ eccbe13de1fcc91c11a0b26c0bc8fa4d
127
+ e7a72574f8782ae26aabcf9ebcd66065
128
+ bdf0324e6083dcc6d3cedd3ca8c53c16
129
+ b40110c4190b5622a96116b0017ed297
130
+ ffa0b514647ec04f6306b892ae661181
131
+ d03d1bc03cd33d70dff9fa5d71963ebd
132
+ 8a44126411eaa78bd51e8d87a8879bf5
133
+ fabeb76028ade2d0e48722e46c4615a3
134
+ c05d88abd50357f935a63c59ee537623
135
+ ff38265c1642c1abe8d3c2fe5e572bf8
136
+ a36a4c301ae8ac13610ccbc12256cacc }
137
+
138
+ #{ 0102030405060708090a0b0c0d0e0f101112131415161718 } #{
139
+ 0595e57fe5f0bb3c706edac8a4b2db11
140
+ dfde31344a1af769c74f070aee9e2326
141
+ b06b9b1e195d13d8f4a7995c4553ac05
142
+ 6bd2378ec341c9a42f37ba79f88a32ff
143
+ e70bce1df7645adb5d2c4130215c3522
144
+ 9a5730c7fcb4c9af51ffda89c7f1ad22
145
+ 0485055fd4f6f0d963ef5ab9a5476982
146
+ 591fc66bcda10e452b03d4551f6b62ac
147
+ 2753cc83988afa3e1688a1d3b42c9a02
148
+ 93610d523d1d3f0062b3c2a3bbc7c7f0
149
+ 96c248610aadedfeaf8978c03de8205a
150
+ 0e317b3d1c73b9e9a4688f296d133a19
151
+ bdf0e6c3cca5b5b9d533b69c56ada120
152
+ 88a218b6e2ece1e6246d44c759d19b10
153
+ 6866397e95c140534f94263421006e40
154
+ 32cb0a1e9542c6b3b8b398abc3b0f1d5
155
+ 29a0b8aed54a132324c62e423f54b4c8
156
+ 3cb0f3b5020a98b82af9fe154484a168 }
157
+
158
+ #{ 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20 } #{
159
+ eaa6bd25880bf93d3f5d1e4ca2611d91
160
+ cfa45c9f7e714b54bdfa80027cb14380
161
+ 114ae344ded71b35f2e60febad727fd8
162
+ 02e1e7056b0f623900496422943e97b6
163
+ 91cb93c787964e10d9527d999c6f936b
164
+ 49b18b42f8e8367cbeb5ef104ba1c7cd
165
+ 87084b3ba700bade955610672745b374
166
+ e7a7b9e9ec540d5ff43bdb12792d1b35
167
+ c799b596738f6b018c76c74b1759bd90
168
+ 7fec5bfd9f9b89ce6548309092d7e958
169
+ 40f250b26d1f096a4afd4c340a588815
170
+ 3e34135c79db010200767651cf263073
171
+ f656abccf88dd827027b2ce917d464ec
172
+ 18b62503bfbc077fbabb98f20d98ab34
173
+ 8aed95ee5b0dcbfbef4eb21d3a3f52f9
174
+ 625a1ab00ee39a5327346bddb01a9c18
175
+ a13a7c79c7e119b5ab0296ab28c300b9
176
+ f3e4c0a2e02d1d01f7f0a74618af2b48 }
177
+
178
+ #{ 833222772a } #{
179
+ 80ad97bdc973df8a2e879e92a497efda
180
+ 20f060c2f2e5126501d3d4fea10d5fc0
181
+ faa148e99046181fec6b2085f3b20ed9
182
+ f0daf5bab3d596839857846f73fbfe5a
183
+ 1c7e2fc4639232fe297584b296996bc8
184
+ 3db9b249406cc8edffac55ccd322ba12
185
+ e4f9f7e0066154bbd125b745569bc897
186
+ 75d5ef262b44c41a9cf63ae14568e1b9
187
+ 6da453dbf81e82334a3d8866cb50a1e3
188
+ 7828d074119cab5c22b294d7a9bfa0bb
189
+ adb89cea9a15fbe617295bd04b8ca05c
190
+ 6251d87fd4aaae9a7e4ad5c217d3f300
191
+ e7119bd6dd9b22afe8f89585432881e2
192
+ 785b60fd7ec4e9fcb6545f350d660fab
193
+ afecc037fdb7b0838eb3d70bcd268382
194
+ dbc1a7b49d57358cc9fa6d61d73b7cf0
195
+ 6349d126a37afcba89794f9804914fdc
196
+ bf42c3018c2f7c66bfde524975768115 }
197
+
198
+ #{ 1910833222772a } #{
199
+ bc9222dbd3274d8fc66d14ccbda6690b
200
+ 7ae627410c9a2be693df5bb7485a63e3
201
+ 3f0931aa03defb300f060103826f2a64
202
+ beaa9ec8d59bb68129f3027c96361181
203
+ 74e04db46d28648d7dee8a0064b06cfe
204
+ 9b5e81c62fe023c55be42f87bbf932b8
205
+ ce178fc1826efecbc182f57999a46140
206
+ 8bdf55cd55061c06dba6be11de4a578a
207
+ 626f5f4dce652501f3087d39c92cc349
208
+ 42daac6a8f9ab9a7fd137c6037825682
209
+ cc03fdb79192a207312f53f5d4dc33d9
210
+ f70f14122a1c98a3155d28b8a0a8a41d
211
+ 2a3a307ab2708a9c00fe0b42f9c2d6a1
212
+ 862617627d2261eab0b1246597ca0ae9
213
+ 55f877ce4f2e1ddbbf8e13e2cde0fdc8
214
+ 1b1556cb935f173337705fbb5d501fc1
215
+ ecd0e96602be7f8d5092816cccf2c2e9
216
+ 027881fab4993a1c262024a94fff3f61 }
217
+
218
+ #{ 641910833222772a } #{
219
+ bbf609de9413172d07660cb680716926
220
+ 46101a6dab43115d6c522b4fe93604a9
221
+ cbe1fff21c96f3eef61e8fe0542cbdf0
222
+ 347938bffa4009c512cfb4034b0dd1a7
223
+ 7867a786d00a7147904d76ddf1e520e3
224
+ 8d3e9e1caefcccb3fbf8d18f64120b32
225
+ 942337f8fd76f0fae8c52d7954810672
226
+ b8548c10f51667f6e60e182fa19b30f7
227
+ 0211c7c6190c9efd1237c34c8f2e06c4
228
+ bda64f65276d2aacb8f90212203a808e
229
+ bd3820f732ffb53ec193e79d33e27c73
230
+ d0168616861907d482e36cdac8cf5749
231
+ 97b0f0f224b2d2317114808fb03af7a0
232
+ e59616e469787939a063ceea9af956d1
233
+ c47e0dc1660919c11101208f9e69aa1f
234
+ 5ae4f12896b8379a2aad89b5b553d6b0
235
+ 6b6b098d0c293bc2993d80bf0518b6d9
236
+ 8170cc3ccd92a698621b939dd38fe7b9 }
237
+
238
+ #{ 8b37641910833222772a } #{
239
+ ab65c26eddb287600db2fda10d1e605c
240
+ bb759010c29658f2c72d93a2d16d2930
241
+ b901e8036ed1c383cd3c4c4dd0a6ab05
242
+ 3d25ce4922924c55f064943353d78a6c
243
+ 12c1aa44bbf87e75e611f69b2c38f49b
244
+ 28f2b3434b65c09877470044c6ea170d
245
+ bd9ef822de5288196134cf8af7839304
246
+ 67559c23f052158470a296f725735a32
247
+ 8bab26fbc2c12b0f13e2ab185eabf241
248
+ 31185a6d696f0cfa9b42808b38e132a2
249
+ 564d3dae183c5234c8af1e51061c44b5
250
+ 3c0778a7b5f72d3c23a3135c7d67b9f4
251
+ f34369890fcf16fb517dcaae4463b2dd
252
+ 02f31c81e8200731b899b028e791bfa7
253
+ 72da646283228c14300853701795616f
254
+ 4e0a8c6f7934a788e2265e81d6d0c8f4
255
+ 438dd5eafea0111b6f36b4b938da2a68
256
+ 5f6bfc73815874d97100f086979357d8 }
257
+
258
+ #{ ebb46227c6cc8b37641910833222772a } #{
259
+ 720c94b63edf44e131d950ca211a5a30
260
+ c366fdeacf9ca80436be7c358424d20b
261
+ b3394a40aabf75cba42282ef25a0059f
262
+ 4847d81da4942dbc249defc48c922b9f
263
+ 08128c469f275342adda202b2b58da95
264
+ 970dacef40ad98723bac5d6955b81761
265
+ 3cb89993b07b0ced93de13d2a11013ac
266
+ ef2d676f1545c2c13dc680a02f4adbfe
267
+ b60595514f24bc9fe522a6cad7393644
268
+ b515a8c5011754f59003058bdb81514e
269
+ 3c70047e8cbc038e3b9820db601da495
270
+ 1175da6ee756de46a53e2b075660b770
271
+ 00a542bba02111cc2c65b38ebdba587e
272
+ 5865fdbb5b48064104e830b380f2aede
273
+ 34b21ad2ad44e999db2d7f0863f0d9b6
274
+ 84a9218fc36e8a5f2ccfbeae53a27d25
275
+ a2221a11b833ccb498a59540f0545f4a
276
+ 5bbeb4787d59e5373fdbea6c6f75c29b }
277
+
278
+ #{ c109163908ebe51debb46227c6cc8b37641910833222772a } #{
279
+ 54b64e6b5a20b5e2ec84593dc7989da7
280
+ c135eee237a85465ff97dc03924f45ce
281
+ cfcc922fb4a14ab45d6175aabbf2d201
282
+ 837b87e2a446ad0ef798acd02b94124f
283
+ 17a6dbd664926a0636b3f4c37a4f4694
284
+ 4a5f9f26aeeed4d4a25f632d305233d9
285
+ 80a3d01ef00c8e9a4209c17f4eeb358c
286
+ d15e7d5ffaaabc0207bf200a117793a2
287
+ 349682bf588eaa52d0aa1560346aeafa
288
+ f5854cdb76c889e3ad63354e5f7275e3
289
+ 532c7ceccb39df3236318405a4b1279c
290
+ baefe6d9ceb651842260e0d1e05e3b90
291
+ e82d8c6db54e3c633f581c952ba04207
292
+ 4b16e50abd381bd70900a9cd9a62cb23
293
+ 3682ee33bd148bd9f58656cd8f30d9fb
294
+ 1e5a0b8475045d9b20b2628624edfd9e
295
+ 63edd684fb826282fe528f9c0e9237bc
296
+ e4dd2e98d6960fae0b43545456743391 }
297
+
298
+ #{ 1ada31d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a } #{
299
+ dd5bcb0018e922d494759d7c395d02d3
300
+ c8446f8f77abf737685353eb89a1c9eb
301
+ af3e30f9c095045938151575c3fb9098
302
+ f8cb6274db99b80b1d2012a98ed48f0e
303
+ 25c3005a1cb85de076259839ab7198ab
304
+ 9dcbc183e8cb994b727b75be3180769c
305
+ a1d3078dfa9169503ed9d4491dee4eb2
306
+ 8514a5495858096f596e4bcd66b10665
307
+ 5f40d59ec1b03b33738efa60b2255d31
308
+ 3477c7f764a41baceff90bf14f92b7cc
309
+ ac4e95368d99b9eb78b8da8f81ffa795
310
+ 8c3c13f8c2388bb73f38576e65b7c446
311
+ 13c4b9c1dfb66579eddd8a280b9f7316
312
+ ddd27820550126698efaadc64b64f66e
313
+ f08f2e66d28ed143f3a237cf9de73559
314
+ 9ea36c525531b880ba124334f57b0b70
315
+ d5a39e3dfcc50280bac4a6b5aa0dca7d
316
+ 370b1c1fe655916d97fd0d47ca1d72b8 }
317
+ ][
318
+
319
+ --test-- join "RFC6229 test vectors " n
320
+ insert /dup clear message #"^@" 4112
321
+
322
+ k: rc4/key key
323
+ crypted: rc4/stream k message
324
+
325
+ foreach pos [
326
+ 0 16 240 256 496 512 752 768 1008 1024
327
+ 1520 1536 2032 2048 3056 3072 4080 4096
328
+ ][
329
+ --assert (copy/part result 16 ) = (copy/part (at crypted (pos + 1 )) 16 )
330
+ result: skip result 16
331
+ ]
332
+ n: n + 1
333
+ ]
334
+
335
+
336
+
337
+
338
+ ===end-group===
339
+
340
+ ~~~end-file~~~
0 commit comments