ruby-aes-table2 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,386 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ =begin
4
+ This file is a part of ruby-aes <http://rubyforge.org/projects/ruby-aes>
5
+ Written by Alex Boussinet <alex.boussinet@gmail.com>
6
+
7
+ KAT Tests and MCT tests according to katmct.pdf file.
8
+ <http://csrc.nist.gov/encryption/aes/katmct/katmct.htm>
9
+ See rijndael-vals.zip
10
+ =end
11
+
12
+ require File.dirname(__FILE__) + '/../test_helper.rb'
13
+
14
+ def cbc_decrypt_mct(output)
15
+ output.write <<EOT
16
+
17
+ =========================
18
+
19
+ FILENAME: "cbc_d_m.txt"
20
+
21
+ Cipher Block Chaining (CBC) Mode - DECRYPTION
22
+ Monte Carlo Test
23
+
24
+ Algorithm Name: Rijndael
25
+
26
+ ==========
27
+
28
+ EOT
29
+ [128, 192, 256].each { |kl|
30
+ output.write "KEYSIZE=#{kl}\n\n"
31
+ key = "0" * (kl/4)
32
+ ct = iv = "0" * 32
33
+ opt = pt = nil
34
+ 400.times { |i|
35
+ output.write "I=#{i}\nKEY=#{key}\nIV=#{iv}\nCT=#{ct}\n"
36
+ 10000.times { |j|
37
+ opt = pt
38
+ pt = Aes.decrypt_block(kl, 'ECB', key, iv,
39
+ [ct].pack("H*")).unpack("H*")[0]
40
+ pt = "%032X" % (pt.hex ^ iv.hex)
41
+ iv = ct
42
+ ct = pt
43
+ }
44
+ case kl
45
+ when 128
46
+ npt = pt
47
+ when 192, 256
48
+ x = -(kl/4-32)
49
+ npt = opt[x..-1] + pt
50
+ end
51
+ key = "%0#{kl/4}X" % (key.hex ^ npt.hex)
52
+ output.write "PT=#{pt}\n\n"
53
+ }
54
+ output.write "=========================\n\n"
55
+ }
56
+ end
57
+
58
+ def cbc_encrypt_mct(output)
59
+ output.write <<EOT
60
+
61
+ =========================
62
+
63
+ FILENAME: "cbc_e_m.txt"
64
+
65
+ Cipher Block Chaining (CBC) Mode - ENCRYPTION
66
+ Monte Carlo Test
67
+
68
+ Algorithm Name: Rijndael
69
+
70
+ ==========
71
+
72
+ EOT
73
+ [128, 192, 256].each { |kl|
74
+ output.write "KEYSIZE=#{kl}\n\n"
75
+ key = "0" * (kl/4)
76
+ pt = iv = "0" * 32
77
+ oct = ct = nil
78
+ 400.times { |i|
79
+ output.write "I=#{i}\nKEY=#{key}\nIV=#{iv}\nPT=#{pt}\n"
80
+ 10000.times { |j|
81
+ oct = ct
82
+ pt = "%032X" % (pt.hex ^ iv.hex)
83
+ ct = Aes.encrypt_block(kl, 'ECB', key, iv,
84
+ [pt].pack("H*")).unpack("H*")[0]
85
+ if j == 0 then pt = iv else pt = oct end
86
+ iv = ct
87
+ }
88
+ case kl
89
+ when 128
90
+ nct = ct
91
+ when 192, 256
92
+ x = -(kl/4-32)
93
+ nct = oct[x..-1] + ct
94
+ end
95
+ key = "%0#{kl/4}X" % (key.hex ^ nct.hex)
96
+ output.write "CT=#{ct}\n\n"
97
+ }
98
+ output.write "=========================\n\n"
99
+ }
100
+ end
101
+
102
+ def ecb_decrypt_mct(output)
103
+ output.write <<EOT
104
+
105
+ =========================
106
+
107
+ FILENAME: "ecb_d_m.txt"
108
+
109
+ Electronic Codebook (ECB) Mode - DECRYPTION
110
+ Monte Carlo Test
111
+
112
+ Algorithm Name: Rijndael
113
+
114
+ =========================
115
+
116
+ EOT
117
+ [128, 192, 256].each { |kl|
118
+ output.write "KEYSIZE=#{kl}\n\n"
119
+ key = "0" * (kl/4)
120
+ ct = "0" * 32
121
+ opt = pt = nil
122
+ 400.times { |i|
123
+ output.write "I=#{i}\nKEY=#{key}\nCT=#{ct}\n"
124
+ 10000.times { |j|
125
+ opt = pt
126
+ pt = Aes.decrypt_block(kl, 'ECB', key, nil,
127
+ [ct].pack("H*")).unpack("H*")[0]
128
+ ct = pt
129
+ }
130
+ case kl
131
+ when 128
132
+ npt = pt
133
+ when 192, 256
134
+ x = -(kl/4-32)
135
+ npt = opt[x..-1] + pt
136
+ end
137
+ key = "%0#{kl/4}X" % (key.hex ^ npt.hex)
138
+ ct = pt
139
+ output.write "PT=#{pt}\n\n"
140
+ }
141
+ output.write "=========================\n\n"
142
+ }
143
+ end
144
+
145
+ def ecb_encrypt_mct(output)
146
+ output.write <<EOT
147
+
148
+ =========================
149
+
150
+ FILENAME: "ecb_e_m.txt"
151
+
152
+ Electronic Codebook (ECB) Mode - ENCRYPTION
153
+ Monte Carlo Test
154
+
155
+ Algorithm Name: Rijndael
156
+
157
+ =========================
158
+
159
+ EOT
160
+ [128, 192, 256].each { |kl|
161
+ output.write "KEYSIZE=#{kl}\n\n"
162
+ key = "0" * (kl/4)
163
+ pt = "0" * 32
164
+ oct = ct = nil
165
+ 400.times { |i|
166
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt}\n"
167
+ 10000.times { |j|
168
+ oct = ct
169
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil,
170
+ [pt].pack("H*")).unpack("H*")[0]
171
+ pt = ct
172
+ }
173
+ case kl
174
+ when 128
175
+ nct = ct
176
+ when 192, 256
177
+ x = -(kl/4-32)
178
+ nct = oct[x..-1] + ct
179
+ end
180
+ key = "%0#{kl/4}X" % (key.hex ^ nct.hex)
181
+ pt = ct
182
+ output.write "CT=#{ct}\n\n"
183
+ }
184
+ output.write "=========================\n\n"
185
+ }
186
+ end
187
+
188
+ def ecb_iv(output)
189
+ output.write <<EOT
190
+
191
+ =========================
192
+
193
+ FILENAME: "ecb_iv.txt"
194
+
195
+ Electronic Codebook (ECB) Mode
196
+ Intermediate Value Known Answer Tests
197
+
198
+ Algorithm Name: Rijndael
199
+
200
+ ==========
201
+
202
+ EOT
203
+ if (AesAlg.respond_to? :c_extension)
204
+ @output.write <<EOT
205
+ Not Implemented
206
+
207
+ ==========
208
+
209
+ EOT
210
+ else
211
+ $output = output
212
+ AesAlg.class_eval do
213
+ alias :encrypt_block_original :_encrypt_block
214
+ alias :decrypt_original_block :_decrypt_block
215
+ def _encrypt_block
216
+ addRoundKey 0
217
+ 1.upto(@nr) { |n|
218
+ subBytes
219
+ shiftRows
220
+ mixColumns unless n == @nr
221
+ addRoundKey n
222
+ $output.puts "CT#{n}=#{@state.unpack("H*")[0]}" unless (@nr-n).zero?
223
+ }
224
+ @state
225
+ end
226
+ def _decrypt_block
227
+ addRoundKey @nr
228
+ (@nr-1).downto(0) { |n|
229
+ ishiftRows
230
+ isubBytes
231
+ $output.puts "PT#{@nr-n}=#{@state.unpack("H*")[0]}" unless n.zero?
232
+ addRoundKey n
233
+ imixColumns unless n == 0
234
+ }
235
+ @state
236
+ end
237
+ end
238
+ [128, 192, 256].each { |kl|
239
+ output.write "KEYSIZE=#{kl}\n"
240
+ key = ""
241
+ (kl/8).times do |n| key << n.chr end
242
+ output.write "KEY=#{key.unpack("H*")[0]}\n\n"
243
+ output.write "Intermediate Ciphertext Values (Encryption)\n\n"
244
+ pt = ""
245
+ 16.times do |n| pt << n.chr end
246
+ output.write "PT=#{pt.unpack("H*")[0]}\n"
247
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, pt)
248
+ output.write "CT=#{ct.unpack("H*")[0]}\n\n"
249
+
250
+ output.write "Intermediate Ciphertext Values (Decryption)\n\n"
251
+ output.write "CT=#{ct.unpack("H*")[0]}\n"
252
+ npt = Aes.decrypt_block(kl, 'ECB', key, nil, ct)
253
+ output.write "PT=#{npt.unpack("H*")[0]}\n\n"
254
+
255
+ output.write "==========\n\n"
256
+ }
257
+ AesAlg.class_eval do
258
+ alias :_block_encrypt :encrypt_block_original
259
+ alias :_block_decrypt :decrypt_block_original
260
+ end
261
+ end
262
+ end
263
+
264
+ def ecb_tbl(output)
265
+ output.write <<EOT
266
+
267
+ =========================
268
+
269
+ FILENAME: "ecb_tbl.txt"
270
+
271
+ Electronic Codebook (ECB) Mode
272
+ Tables Known Answer Tests
273
+
274
+ Algorithm Name: Rijndael
275
+ Tables tested: S, Si, LOG, ALOG, RCON, Te0-4 Td0-4
276
+
277
+ ==========
278
+
279
+ EOT
280
+ [128, 192, 256].each { |kl|
281
+ output.write "KEYSIZE=#{kl}\n\n"
282
+ File.open("table.#{kl}", "r") { |f|
283
+ begin
284
+ 1.upto(64) { |i|
285
+ key, *pt = f.readline.split(" ")
286
+ pt = pt.join
287
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
288
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt}\nCT=#{ct.unpack("H*")[0]}\n\n"
289
+ }
290
+ 65.upto(128) { |i|
291
+ key, *ct = f.readline.split(" ")
292
+ ct = ct.join
293
+ pt = Aes.encrypt_block(kl, 'ECB', key, nil, [ct].pack("H*"))
294
+ output.write "I=#{i}\nKEY=#{key}\nPT=#{pt.unpack("H*")[0]}\nCT=#{ct}\n\n"
295
+ }
296
+ rescue
297
+ raise "Bad Table File"
298
+ end
299
+ }
300
+ output.write "==========\n\n"
301
+ }
302
+ end
303
+
304
+ def ecb_vt(output)
305
+ output.write <<EOT
306
+
307
+ =========================
308
+
309
+ FILENAME: "ecb_vt.txt"
310
+
311
+ Electronic Codebook (ECB) Mode
312
+ Variable Text Known Answer Tests
313
+
314
+ Algorithm Name: Rijndael
315
+
316
+ ==========
317
+
318
+ EOT
319
+ [128, 192, 256].each { |kl|
320
+ key = "0" * (kl/4)
321
+ output.write "KEYSIZE=#{kl}\n\nKEY=#{key}\n\n"
322
+ (127).downto(0) { |b|
323
+ i = 128 - b
324
+ pt = "%032X" % (1 << b)
325
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
326
+ output.write "I=#{i}\nPT=#{pt}\nCT=#{ct.unpack("H*")[0]}\n\n"
327
+ }
328
+ output.write "==========\n\n"
329
+ }
330
+ end
331
+
332
+ def ecb_vk(output)
333
+ pt = "00000000000000000000000000000000"
334
+ output.write <<EOT
335
+
336
+ =========================
337
+
338
+ FILENAME: "ecb_vk.txt"
339
+
340
+ Electronic Codebook (ECB) Mode
341
+ Variable Key Known Answer Tests
342
+
343
+ Algorithm Name: Rijndael
344
+
345
+ ==========
346
+ EOT
347
+ [128, 192, 256].each { |kl|
348
+ output.write "KEYSIZE=#{kl}\n\nPT=#{pt}\n\n"
349
+ (kl-1).downto(0) { |b|
350
+ i = kl - b
351
+ key = "%0#{kl/4}X" % (1 << b)
352
+ ct = Aes.encrypt_block(kl, 'ECB', key, nil, [pt].pack("H*"))
353
+ output.write "I=#{i}\nKEY=#{key}\nCT=#{ct.unpack("H*")[0]}\n\n"
354
+ }
355
+ output.write "==========\n\n"
356
+ }
357
+ end
358
+
359
+ def kat_tests
360
+ puts "Writing ecb_vk.txt..."
361
+ File.open("ecb_vk.txt") { |f| ecb_vk f }
362
+ puts "Writing ecb_vt.txt..."
363
+ File.open("ecb_vt.txt") { |f| ecb_vt f }
364
+ puts "Writing ecb_tbl.txt..."
365
+ File.open("ecb_tbl.txt") { |f| ecb_tbl f }
366
+ puts "Writing ecb_iv.txt..."
367
+ File.open("ecb_iv.txt") { |f| ecb_iv f }
368
+ end
369
+
370
+ def mct_tests
371
+ puts "Writing ecb_e_m.txt..."
372
+ File.open("ecb_e_m.txt") { |f| ecb_encrypt_mct f }
373
+ puts "Writing ecb_d_m.txt..."
374
+ File.open("ecb_d_m.txt") { |f| ecb_decrypt_mct f }
375
+ puts "Writing cbc_e_m.txt..."
376
+ File.open("cbc_e_m.txt") { |f| cbc_encrypt_mct f }
377
+ puts "Writing cbc_d_m.txt..."
378
+ File.open("cbc_d_m.txt") { |f| cbc_decrypt_mct f }
379
+ end
380
+
381
+ if __FILE__ == $0
382
+ puts "Performing KAT Tests..."
383
+ kat_tests
384
+ puts "Performing MCT Tests... VERY time consuming !"
385
+ mct_tests
386
+ end
Binary file
@@ -0,0 +1,128 @@
1
+ 00010203050607080A0B0C0D0F101112 50 68 12 a4 5f 08 c8 89 b9 7f 59 80 03 8b 83 59
2
+ 14151617191A1B1C1E1F202123242526 5c 6d 71 ca 30 de 8b 8b 00 54 99 84 d2 ec 7d 4b
3
+ 28292A2B2D2E2F30323334353738393A 53 f3 f4 c6 4f 86 16 e4 e7 c5 61 99 f4 8f 21 f6
4
+ 3C3D3E3F41424344464748494B4C4D4E a1 eb 65 a3 48 71 65 fb 0f 1c 27 ff 99 59 f7 03
5
+ 50515253555657585A5B5C5D5F606162 35 53 ec f0 b1 73 95 58 b0 8e 35 0a 98 a3 9b fa
6
+ 64656667696A6B6C6E6F707173747576 67 42 99 69 49 0b 97 11 ae 2b 01 dc 49 7a fd e8
7
+ 78797A7B7D7E7F80828384858788898A 93 38 5c 1f 2a ec 8b ed 19 2f 5a 8e 16 1d d5 08
8
+ 8C8D8E8F91929394969798999B9C9D9E b5 bf 94 6b e1 9b eb 8d b3 98 3b 5f 4c 6e 8d db
9
+ A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 41 32 1e e1 0e 21 bd 90 72 27 c4 45 0f f4 23 24
10
+ B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 00 a8 2f 59 c9 1c 84 86 d1 2c 0a 80 12 4f 60 89
11
+ C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA 7c e0 fd 07 67 54 69 1b 4b bd 9f af 8a 13 72 fe
12
+ DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE 23 60 5a 82 43 d0 77 64 54 1b c5 ad 35 5b 31 29
13
+ F0F1F2F3F5F6F7F8FAFBFCFDFE010002 12 a8 cf a2 3e a7 64 fd 87 62 32 b4 e8 42 bc 44
14
+ 04050607090A0B0C0E0F101113141516 bc af 32 41 5e 83 08 b3 72 3e 5f dd 85 3c cc 80
15
+ 2C2D2E2F31323334363738393B3C3D3E 89 af ae 68 5d 80 1a d7 47 ac e9 1f c4 9a dd e0
16
+ 40414243454647484A4B4C4D4F505152 f5 21 d0 7b 48 43 57 c4 a6 9e 76 12 4a 63 42 16
17
+ 54555657595A5B5C5E5F606163646566 3e 23 b3 bc 06 5b cc 15 24 07 e2 38 96 d7 77 83
18
+ 68696A6B6D6E6F70727374757778797A 79 f0 fb a0 02 be 17 44 67 0e 7e 99 29 0d 8f 52
19
+ 7C7D7E7F81828384868788898B8C8D8E da 23 fe 9d 5b d6 3e 1d 72 e3 da fb e2 1a 6c 2a
20
+ A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 e3 f5 69 8b a9 0b 6a 02 2e fd 7d b2 c7 e6 c8 23
21
+ E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 bd c2 69 1d 4f 1b 73 d2 70 06 79 c3 bc bf 9c 6e
22
+ 08090A0B0D0E0F10121314151718191A ba 74 e0 20 93 21 7e e1 ba 1b 42 bd 56 24 34 9a
23
+ 6C6D6E6F71727374767778797B7C7D7E b5 c5 93 b5 85 1c 57 fb f8 b3 f5 77 15 e8 f6 80
24
+ 80818283858687888A8B8C8D8F909192 3d a9 bd 9c ec 07 23 81 78 8f 93 87 c3 bb f4 ee
25
+ 94959697999A9B9C9E9FA0A1A3A4A5A6 41 97 f3 05 11 21 70 2a b6 5d 31 6b 3c 63 73 74
26
+ A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA 9f 46 c6 2e c4 f6 ee 3f 6e 8c 62 55 4b c4 8a b7
27
+ BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE 02 20 67 3f e9 e6 99 a4 eb c8 e0 db eb 69 79 c8
28
+ D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 b2 b9 91 71 33 7d ed 9b c8 c2 c2 3f f6 f1 88 67
29
+ E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 a7 fa cf 4e 30 1e 98 4e 5e fe ef d6 45 b2 35 05
30
+ F8F9FAFBFDFEFE00020304050708090A f7 c7 62 e4 a9 81 91 60 fd 7a cf b6 c4 ee dc dd
31
+ 0C0D0E0F11121314161718191B1C1D1E 9b 64 fc 21 ea 08 70 9f 49 15 43 6f aa 70 f1 be
32
+ 20212223252627282A2B2C2D2F303132 52 af 2c 3d e0 7e e6 77 7f 55 a4 ab fc 10 0b 3f
33
+ 34353637393A3B3C3E3F404143444546 2f ca 00 12 24 38 6c 57 aa 3f 96 8c be 2c 81 6f
34
+ 48494A4B4D4E4F50525354555758595A 41 49 c7 36 58 a4 a9 c5 64 34 27 55 ee 2c 13 2f
35
+ 5C5D5E5F61626364666768696B6C6D6E af 60 00 5a 00 a1 77 2f 7c 07 a4 8a 92 3c 23 d2
36
+ 70717273757677787A7B7C7D7F808182 6f cc bc 28 36 37 59 91 4b 6f 02 80 af af 20 c6
37
+ 84858687898A8B8C8E8F909193949596 7d 82 a4 3d df 4f ef a2 fc 59 47 49 98 84 d3 86
38
+ 98999A9B9D9E9FA0A2A3A4A5A7A8A9AA 5d 5a 99 0e aa b9 09 3a fe 4c e2 54 df a4 9e f9
39
+ ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE 4c d1 e2 fd 3f 44 34 b5 53 aa e4 53 f0 ed 1a 02
40
+ C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 5a 2c 9a 96 41 d4 29 91 25 fa 1b 93 63 10 4b 5e
41
+ D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 b5 17 fe 34 c0 fa 21 7d 34 17 40 bf d4 fe 8d d4
42
+ E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA 01 4b af 22 78 a6 9d 33 1d 51 80 10 36 43 e9 9a
43
+ FCFDFEFF01020304060708090B0C0D0E b5 29 bd 81 64 f2 0d 0a a4 43 d4 93 21 16 84 1c
44
+ 10111213151617181A1B1C1D1F202122 2e 59 6d cb b2 f3 3d 42 16 a1 17 6d 5b d1 e4 56
45
+ 24252627292A2B2C2E2F303133343536 72 74 a1 ea 2b 7e e2 42 4e 9a 0e 46 73 68 91 43
46
+ 38393A3B3D3E3F40424344454748494A ae 20 02 0b d4 f1 3e 9d 90 14 0b ee 3b 5d 26 af
47
+ 4C4D4E4F51525354565758595B5C5D5E ba ac 06 5d a7 ac 26 e8 55 e7 9c 88 49 d7 5a 02
48
+ 60616263656667686A6B6C6D6F707172 7c 91 7d 8d 1d 45 fa b9 e2 54 0e 28 83 25 40 cc
49
+ 74757677797A7B7C7E7F808183848586 bd e6 f8 9e 16 da ad b0 e8 47 a2 a6 14 56 6a 91
50
+ 88898A8B8D8E8F90929394959798999A c9 de 16 37 25 f1 f5 be 44 eb b1 db 51 d0 7f bc
51
+ 9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE 3a f5 7a 58 f0 c0 7d ff a6 69 57 2b 52 1e 2b 92
52
+ B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 3d 5e ba c3 06 dd e4 60 4f 1b 4f bb bf cd ae 55
53
+ C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 c2 df a9 1b ce b7 6a 11 83 c9 95 02 0a c0 b5 56
54
+ D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA c7 0f 54 30 58 85 e9 a0 74 6d 01 ec 56 c8 59 6b
55
+ ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE c4 f8 1b 61 0e 98 01 2c e0 00 18 20 50 c0 c2 b2
56
+ 00010203050607080A0B0C0D0F101112 ea ab 86 b1 d0 2a 95 d7 40 4e ff 67 48 9f 97 d4
57
+ 14151617191A1B1C1E1F202123242526 7c 55 bd b4 0b 88 87 0b 52 be c3 73 8d e8 28 86
58
+ 28292A2B2D2E2F30323334353738393A ba 6e aa 88 37 1f f0 a3 bd 87 5e 3f 2a 97 5c e0
59
+ 3C3D3E3F41424344464748494B4C4D4E 08 05 91 30 c4 c2 4b d3 0c f0 57 5e 4e 03 73 dc
60
+ 50515253555657585A5B5C5D5F606162 9a 8e ab 00 4e f5 30 93 df cf 96 f5 7e 7e da 82
61
+ 64656667696A6B6C6E6F707173747576 07 45 b5 89 e2 40 0c 25 f1 17 b1 d7 96 c2 81 29
62
+ 78797A7B7D7E7F80828384858788898A 2f 17 77 78 12 16 ce c3 f0 44 f1 34 b1 b9 2b be
63
+ 8C8D8E8F91929394969798999B9C9D9E 35 3a 77 9f fc 54 1b 3a 38 05 d9 0c e1 75 80 fc
64
+ A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 1a 1e ae 44 15 ce fc f0 8c 4a c1 c8 f6 8b ea 8f
65
+ B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 03 68 0f e1 9f 7c e7 27 54 52 02 0b e7 0e 82 04
66
+ C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA 46 1d f7 40 c9 78 1c 38 8e 94 bb 86 1c eb 54 f6
67
+ DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE 45 1b d6 03 67 f9 64 83 04 27 42 21 97 86 a0 74
68
+ F0F1F2F3F5F6F7F8FAFBFCFDFE010002 e4 df a4 26 71 a0 2e 57 ef 17 3b 85 c0 ea 9f 2b
69
+ 04050607090A0B0C0E0F101113141516 ed 11 b8 9e 76 27 42 82 22 7d 85 47 00 a7 8b 9e
70
+ 18191A1B1D1E1F20222324252728292A 43 39 46 ea a5 1e a4 7a f3 38 95 f2 b9 0b 3b 75
71
+ 2C2D2E2F31323334363738393B3C3D3E 6b c6 d6 16 a5 d7 d0 28 4a 59 10 ab 35 02 25 28
72
+ 40414243454647484A4B4C4D4F505152 d2 a9 20 ec fe 91 9d 35 4b 5f 49 ea e9 71 9c 98
73
+ 54555657595A5B5C5E5F606163646566 3a 06 1b 17 f6 a9 28 85 ef bd 06 76 98 5b 37 3d
74
+ 68696A6B6D6E6F70727374757778797A fa de ec 16 e3 3e a2 f4 68 84 99 d1 57 e2 0d 8f
75
+ 7C7D7E7F81828384868788898B8C8D8E 5c de fe de 59 60 1a a3 c3 cd a3 6f a6 b1 fa 13
76
+ 90919293959697989A9B9C9D9FA0A1A2 95 74 b0 00 39 84 4d 92 eb ba 7e e8 71 92 65 f8
77
+ A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 9a 9c f3 37 58 67 17 87 e5 00 69 28 18 86 43 fa
78
+ B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA 2c dd d6 34 c8 46 ba 66 bb 46 cb fe a4 a6 74 f9
79
+ CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE d2 8b ae 02 93 93 c3 e7 e2 6e 9f af bb b4 b9 8f
80
+ E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 ec 27 52 9b 1b ee 0a 9a b6 a0 d7 3e bc 82 e9 b7
81
+ F4F5F6F7F9FAFBFCFEFE010103040506 3c b2 5c 09 47 2a ff 6e e7 e2 b4 7c cd 7c cb 17
82
+ 08090A0B0D0E0F10121314151718191A de e3 31 03 a7 28 33 70 d7 25 e4 4c a3 8f 8f e5
83
+ 1C1D1E1F21222324262728292B2C2D2E 27 f9 bc d1 aa c6 4b ff c1 1e 78 15 70 2c 1a 69
84
+ 30313233353637383A3B3C3D3F404142 5d f5 34 ff ad 4e d0 74 9a 99 88 e9 84 9d 00 21
85
+ 44454647494A4B4C4E4F505153545556 a4 8b ee 75 db 04 fb 60 ca 2b 80 f7 52 a8 42 1b
86
+ 58595A5B5D5E5F60626364656768696A 02 4c 8c f7 0b c8 6e e5 ce 03 67 8c b7 af 45 f9
87
+ 6C6D6E6F71727374767778797B7C7D7E 3c 19 ac 0f 8a 3a 38 62 ce 57 78 31 30 1e 16 6b
88
+ 80818283858687888A8B8C8D8F909192 c5 e3 55 b7 96 a5 74 21 d5 9c a6 be 82 e7 3b ca
89
+ 94959697999A9B9C9E9FA0A1A3A4A5A6 d9 40 33 27 64 17 ab fb 05 a6 9d 15 b6 e3 86 e2
90
+ A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA 24 b3 65 59 ea 3a 9b 9b 95 8f e6 da 3e 5b 8d 85
91
+ BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE 20 fd 4f ea a0 e8 bf 0c ce 78 61 d7 4e f4 cb 72
92
+ D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 35 0e 20 d5 17 42 77 b9 ec 31 4c 50 15 70 a1 1d
93
+ E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 87 a2 9d 61 b7 c6 04 d2 38 fe 73 04 5a 7e fd 57
94
+ F8F9FAFBFDFEFE00020304050708090A 2c 31 64 c1 cc 7d 00 64 81 6b dc 0f aa 36 2c 52
95
+ 0C0D0E0F11121314161718191B1C1D1E 19 5f e5 e8 a0 5a 2e d5 94 f6 e4 40 0e ee 10 b3
96
+ 20212223252627282A2B2C2D2F303132 e4 66 3d f1 9b 9a 21 a5 a2 84 c2 bd 7f 90 50 25
97
+ 34353637393A3B3C3E3F404143444546 21 b8 87 14 cf b4 e2 a9 33 bd 28 1a 2c 47 43 fd
98
+ 48494A4B4D4E4F50525354555758595A cb fc 39 80 d7 04 fd 0f c5 43 78 ab 84 e1 78 70
99
+ 5C5D5E5F61626364666768696B6C6D6E bc 51 44 ba a4 8b de b8 b6 3e 22 e0 3d a4 18 ef
100
+ 70717273757677787A7B7C7D7F808182 5a 1d ba ef 1e e2 98 4b 83 95 da 3b df fa 3c cc
101
+ 84858687898A8B8C8E8F909193949596 f0 b1 1c d0 72 9d fc c8 0c ec 90 3d 97 15 95 74
102
+ 98999A9B9D9E9FA0A2A3A4A5A7A8A9AA 9f 95 31 4a cf dd c6 d1 91 4b 7f 19 a9 cc 82 09
103
+ ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE 59 57 36 f6 f0 f7 09 14 a9 4e 9e 00 7f 02 25 19
104
+ C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 1f 19 f5 78 92 ca e5 86 fc df b4 c6 94 de b1 83
105
+ D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 54 07 00 ee 1f 6f 3d ab 0b 3e dd f6 ca ee 1e f5
106
+ E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA 14 a3 42 a9 10 19 a3 31 68 7a 22 54 e6 62 6c a2
107
+ FCFDFEFF01020304060708090B0C0D0E 7b 25 f3 c3 b2 ee a1 8d 74 3e f2 83 14 0f 29 ff
108
+ 10111213151617181A1B1C1D1F202122 46 c2 58 7d 66 e5 e6 fa 7f 7c a6 41 1a d2 80 47
109
+ 24252627292A2B2C2E2F303133343536 09 47 0e 72 22 9d 95 4e d5 ee 73 88 6d fe eb a9
110
+ 38393A3B3D3E3F40424344454748494A d7 7c 03 de 92 d4 d0 d7 9e f8 d4 82 4e f3 65 eb
111
+ 4C4D4E4F51525354565758595B5C5D5E 1d 19 02 19 f2 90 e0 f1 71 5d 15 2d 41 a2 35 93
112
+ 60616263656667686A6B6C6D6F707172 a2 cd 33 2c e3 a0 81 87 69 61 62 92 e8 7f 75 7b
113
+ 74757677797A7B7C7E7F808183848586 d5 4a fa 6c e6 0f bf 93 41 a3 69 0e 21 38 51 02
114
+ 88898A8B8D8E8F90929394959798999A 06 e5 c3 64 de d6 28 a3 f5 e0 5e 61 3e 35 6f 46
115
+ 9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE ea e6 3c 0e 62 55 6d ac 85 d2 21 09 98 96 35 5a
116
+ B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 1f ed 06 0e 2c 6f c9 3e e7 64 40 3a 88 99 85 a2
117
+ C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 c2 52 35 c1 a3 0f de c1 c7 cb 5c 57 37 b2 a5 88
118
+ D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA 79 6d be f9 51 47 d4 d3 08 73 ad 8b 7b 92 ef c0
119
+ ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE cb cf 0f b3 4d 98 d0 bd 5c 22 ce 37 21 1a 46 bf
120
+ 00010203050607080A0B0C0D0F101112 94 b4 4d a6 46 61 26 ca fa 7c 7f d0 90 63 fc 24
121
+ 14151617191A1B1C1E1F202123242526 d7 8c 5b 5e bf 9b 4d bd a6 ae 50 6c 50 74 c8 fe
122
+ 28292A2B2D2E2F30323334353738393A 6c 27 44 4c 27 20 4b 04 38 12 cf 8c f9 5f 97 69
123
+ 3C3D3E3F41424344464748494B4C4D4E be 94 52 4e e5 a2 aa 50 bb a8 b7 5f 4c 0a eb cf
124
+ 50515253555657585A5B5C5D5F606162 a0 ae aa e9 1b a9 f3 1f 51 ae b3 58 8c f3 a3 9e
125
+ 64656667696A6B6C6E6F707173747576 27 52 97 77 9c 28 26 6e f9 fe 4c 6a 13 c0 84 88
126
+ 78797A7B7D7E7F80828384858788898A 86 52 3d 92 bb 86 72 cb 01 cf 4a 77 fd 72 58 82
127
+ 8C8D8E8F91929394969798999B9C9D9E 4b 83 27 64 0e 9f 33 32 2a 04 dd 96 fc bf 9a 36
128
+ A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 ce 52 af 65 0d 08 8c a5 59 42 52 23 f4 d3 26 94