ruby-aes-table2 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/COPYING +20 -0
- data/README +77 -0
- data/Rakefile +154 -0
- data/doc/rdoc/classes/Aes.html +494 -0
- data/doc/rdoc/classes/AesAlg.html +740 -0
- data/doc/rdoc/classes/AesCons.html +198 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/CHANGELOG.html +117 -0
- data/doc/rdoc/files/COPYING.html +129 -0
- data/doc/rdoc/files/README.html +235 -0
- data/doc/rdoc/files/lib/ruby-aes/aes_alg_rb.html +108 -0
- data/doc/rdoc/files/lib/ruby-aes/aes_cons_rb.html +101 -0
- data/doc/rdoc/files/lib/ruby-aes_rb.html +108 -0
- data/doc/rdoc/fr_class_index.html +29 -0
- data/doc/rdoc/fr_file_index.html +32 -0
- data/doc/rdoc/fr_method_index.html +52 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/examples/encrypt_block.rb +22 -0
- data/examples/encrypt_buffer.rb +24 -0
- data/examples/encrypt_stream.rb +39 -0
- data/examples/example_helper.rb +27 -0
- data/lib/ruby-aes.rb +162 -0
- data/lib/ruby-aes/aes_alg.rb +372 -0
- data/lib/ruby-aes/aes_cons.rb +751 -0
- data/test/KAT_MCT/aes_kat_mct.rb +386 -0
- data/test/KAT_MCT/rijndael-vals.zip +0 -0
- data/test/KAT_MCT/table.128 +128 -0
- data/test/KAT_MCT/table.192 +128 -0
- data/test/KAT_MCT/table.256 +128 -0
- data/test/test_helper.rb +14 -0
- data/test/test_ruby-aes.rb +113 -0
- metadata +98 -0
@@ -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
|