/relevation/ext/cryptopy-1.2.5.orig/fmath/prime_test.py |
---|
0,0 → 1,67 |
#! /usr/bin/env python |
""" fmath.prime_test |
Test for prime number routines |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import unittest |
from fmath.prime import rabin_miller |
from string import split,atoi |
class primeTests(unittest.TestCase): |
""" Tests for the rabin_miller probabilistic primality """ |
def testKnowPrimes(self): |
""" Test a few known primes """ |
for prime in knownPrimes: |
for testNum in (2,3,5,7,9,13,17,19,21,27,33,101,205): |
assert( rabin_miller(prime, testNum) ), 'Prime: %d should pass rabin miller test using %d!'%(prime,testNum) |
def testKnowComposites(self): |
""" Test a few known primes """ |
for nonPrime in knownComposites: |
witness = 1 |
for testNum in (2,3,5,7,9,13,17,19,21,27,33,101,205): |
if not rabin_miller(nonPrime, testNum): |
witness = 0 |
#print witness, nonPrime, testNum |
assert( not witness ), 'NonPrime: %d should Fail rabin miller tests!'%nonPrime |
def test50K(self): |
""" Test all composites below the first 50000 primes |
print out the maxium witness number required """ |
f=open('primes_1st_50k.txt','r') |
s=f.read() |
f.close() |
ps=split(s) |
primes_1st_50k = [atoi(i) for i in ps] |
maxWitness = 2 |
lastPrime = 2 |
for prime in primes_1st_50k[1:]: |
for composite in range(lastPrime+2,prime,2): |
for witness in primes_1st_50k: |
if not rabin_miller(composite, witness): |
if witness > maxWitness: |
maxWitness = witness |
print 'composite, maxWitness',composite,maxWitness |
lastPrime = prime |
break |
#assert(witness!=primes_1st_50K[-1]),'MR test failed!!!!!!!' |
lastPrime = prime |
print 'last tested',prime |
knownPrimes = [611693, 611707, 611729, 611753, 611791, |
611801, 611803, 611827, 611833, 611837, |
611839, 611873, 611879, 611887, 611903, |
611921, 611927, 611939, 611951, 611953] |
knownComposites = [611695, 611709, 611723, 611757, 611793, |
611805, 611807, 611829, 611835, 611800, |
611841, 611875, 611881, 611889, 611905, |
611923, 611925, 611941, 611947, 611937] |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/fmath/prime.py |
---|
0,0 → 1,42 |
""" fmath.prime |
Start of prime number routines. Rabin-miller test works, more to come later. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
def fermat_little_test( p, a ): |
""" Fermat Little Test. Included as a curiosity, not useful for cryptographic use. |
p -> possiblePrime, a -> any integer |
""" |
if pow(a,p-1,p) == 1 : |
return 1 # could be prime |
else: |
return 0 # is NOT prime |
def rabin_miller(possiblePrime, aTestInteger): |
""" The Rabin-Miller algorithm to test possible primes |
taken from HAC algorithm 4.24, without the 't' |
""" |
assert( 1<= aTestInteger <= (possiblePrime-1) ), 'test integer %d out of range for %d'%(aTestInteger,possiblePrime) |
#assert( possiblePrime%2 == 1 ), 'possiblePrime must be odd' |
# calculate s and r such that (possiblePrime-1) = (2**s)*r with r odd |
r = possiblePrime-1 |
s=0 |
while (r%2)==0 : |
s+=1 |
r=r/2 |
y = pow(aTestInteger,r,possiblePrime) |
if ( y!=1 and y!=(possiblePrime-1) ) : |
j = 1 |
while ( j <= s-1 and y!=possiblePrime-1 ): |
y = pow(y,2,possiblePrime) # (y*y) % n |
if y==1 : |
return 0 # failed - composite |
j = j+1 |
if y != (possiblePrime-1): |
return 0 # failed - composite |
return 1 # success - still a possible prime |
/relevation/ext/cryptopy-1.2.5.orig/fmath/primes_1st_50k.txt |
---|
0,0 → 1,50000 |
2 |
3 |
5 |
7 |
11 |
13 |
17 |
19 |
23 |
29 |
31 |
37 |
41 |
43 |
47 |
53 |
59 |
61 |
67 |
71 |
73 |
79 |
83 |
89 |
97 |
101 |
103 |
107 |
109 |
113 |
127 |
131 |
137 |
139 |
149 |
151 |
157 |
163 |
167 |
173 |
179 |
181 |
191 |
193 |
197 |
199 |
211 |
223 |
227 |
229 |
233 |
239 |
241 |
251 |
257 |
263 |
269 |
271 |
277 |
281 |
283 |
293 |
307 |
311 |
313 |
317 |
331 |
337 |
347 |
349 |
353 |
359 |
367 |
373 |
379 |
383 |
389 |
397 |
401 |
409 |
419 |
421 |
431 |
433 |
439 |
443 |
449 |
457 |
461 |
463 |
467 |
479 |
487 |
491 |
499 |
503 |
509 |
521 |
523 |
541 |
547 |
557 |
563 |
569 |
571 |
577 |
587 |
593 |
599 |
601 |
607 |
613 |
617 |
619 |
631 |
641 |
643 |
647 |
653 |
659 |
661 |
673 |
677 |
683 |
691 |
701 |
709 |
719 |
727 |
733 |
739 |
743 |
751 |
757 |
761 |
769 |
773 |
787 |
797 |
809 |
811 |
821 |
823 |
827 |
829 |
839 |
853 |
857 |
859 |
863 |
877 |
881 |
883 |
887 |
907 |
911 |
919 |
929 |
937 |
941 |
947 |
953 |
967 |
971 |
977 |
983 |
991 |
997 |
1009 |
1013 |
1019 |
1021 |
1031 |
1033 |
1039 |
1049 |
1051 |
1061 |
1063 |
1069 |
1087 |
1091 |
1093 |
1097 |
1103 |
1109 |
1117 |
1123 |
1129 |
1151 |
1153 |
1163 |
1171 |
1181 |
1187 |
1193 |
1201 |
1213 |
1217 |
1223 |
1229 |
1231 |
1237 |
1249 |
1259 |
1277 |
1279 |
1283 |
1289 |
1291 |
1297 |
1301 |
1303 |
1307 |
1319 |
1321 |
1327 |
1361 |
1367 |
1373 |
1381 |
1399 |
1409 |
1423 |
1427 |
1429 |
1433 |
1439 |
1447 |
1451 |
1453 |
1459 |
1471 |
1481 |
1483 |
1487 |
1489 |
1493 |
1499 |
1511 |
1523 |
1531 |
1543 |
1549 |
1553 |
1559 |
1567 |
1571 |
1579 |
1583 |
1597 |
1601 |
1607 |
1609 |
1613 |
1619 |
1621 |
1627 |
1637 |
1657 |
1663 |
1667 |
1669 |
1693 |
1697 |
1699 |
1709 |
1721 |
1723 |
1733 |
1741 |
1747 |
1753 |
1759 |
1777 |
1783 |
1787 |
1789 |
1801 |
1811 |
1823 |
1831 |
1847 |
1861 |
1867 |
1871 |
1873 |
1877 |
1879 |
1889 |
1901 |
1907 |
1913 |
1931 |
1933 |
1949 |
1951 |
1973 |
1979 |
1987 |
1993 |
1997 |
1999 |
2003 |
2011 |
2017 |
2027 |
2029 |
2039 |
2053 |
2063 |
2069 |
2081 |
2083 |
2087 |
2089 |
2099 |
2111 |
2113 |
2129 |
2131 |
2137 |
2141 |
2143 |
2153 |
2161 |
2179 |
2203 |
2207 |
2213 |
2221 |
2237 |
2239 |
2243 |
2251 |
2267 |
2269 |
2273 |
2281 |
2287 |
2293 |
2297 |
2309 |
2311 |
2333 |
2339 |
2341 |
2347 |
2351 |
2357 |
2371 |
2377 |
2381 |
2383 |
2389 |
2393 |
2399 |
2411 |
2417 |
2423 |
2437 |
2441 |
2447 |
2459 |
2467 |
2473 |
2477 |
2503 |
2521 |
2531 |
2539 |
2543 |
2549 |
2551 |
2557 |
2579 |
2591 |
2593 |
2609 |
2617 |
2621 |
2633 |
2647 |
2657 |
2659 |
2663 |
2671 |
2677 |
2683 |
2687 |
2689 |
2693 |
2699 |
2707 |
2711 |
2713 |
2719 |
2729 |
2731 |
2741 |
2749 |
2753 |
2767 |
2777 |
2789 |
2791 |
2797 |
2801 |
2803 |
2819 |
2833 |
2837 |
2843 |
2851 |
2857 |
2861 |
2879 |
2887 |
2897 |
2903 |
2909 |
2917 |
2927 |
2939 |
2953 |
2957 |
2963 |
2969 |
2971 |
2999 |
3001 |
3011 |
3019 |
3023 |
3037 |
3041 |
3049 |
3061 |
3067 |
3079 |
3083 |
3089 |
3109 |
3119 |
3121 |
3137 |
3163 |
3167 |
3169 |
3181 |
3187 |
3191 |
3203 |
3209 |
3217 |
3221 |
3229 |
3251 |
3253 |
3257 |
3259 |
3271 |
3299 |
3301 |
3307 |
3313 |
3319 |
3323 |
3329 |
3331 |
3343 |
3347 |
3359 |
3361 |
3371 |
3373 |
3389 |
3391 |
3407 |
3413 |
3433 |
3449 |
3457 |
3461 |
3463 |
3467 |
3469 |
3491 |
3499 |
3511 |
3517 |
3527 |
3529 |
3533 |
3539 |
3541 |
3547 |
3557 |
3559 |
3571 |
3581 |
3583 |
3593 |
3607 |
3613 |
3617 |
3623 |
3631 |
3637 |
3643 |
3659 |
3671 |
3673 |
3677 |
3691 |
3697 |
3701 |
3709 |
3719 |
3727 |
3733 |
3739 |
3761 |
3767 |
3769 |
3779 |
3793 |
3797 |
3803 |
3821 |
3823 |
3833 |
3847 |
3851 |
3853 |
3863 |
3877 |
3881 |
3889 |
3907 |
3911 |
3917 |
3919 |
3923 |
3929 |
3931 |
3943 |
3947 |
3967 |
3989 |
4001 |
4003 |
4007 |
4013 |
4019 |
4021 |
4027 |
4049 |
4051 |
4057 |
4073 |
4079 |
4091 |
4093 |
4099 |
4111 |
4127 |
4129 |
4133 |
4139 |
4153 |
4157 |
4159 |
4177 |
4201 |
4211 |
4217 |
4219 |
4229 |
4231 |
4241 |
4243 |
4253 |
4259 |
4261 |
4271 |
4273 |
4283 |
4289 |
4297 |
4327 |
4337 |
4339 |
4349 |
4357 |
4363 |
4373 |
4391 |
4397 |
4409 |
4421 |
4423 |
4441 |
4447 |
4451 |
4457 |
4463 |
4481 |
4483 |
4493 |
4507 |
4513 |
4517 |
4519 |
4523 |
4547 |
4549 |
4561 |
4567 |
4583 |
4591 |
4597 |
4603 |
4621 |
4637 |
4639 |
4643 |
4649 |
4651 |
4657 |
4663 |
4673 |
4679 |
4691 |
4703 |
4721 |
4723 |
4729 |
4733 |
4751 |
4759 |
4783 |
4787 |
4789 |
4793 |
4799 |
4801 |
4813 |
4817 |
4831 |
4861 |
4871 |
4877 |
4889 |
4903 |
4909 |
4919 |
4931 |
4933 |
4937 |
4943 |
4951 |
4957 |
4967 |
4969 |
4973 |
4987 |
4993 |
4999 |
5003 |
5009 |
5011 |
5021 |
5023 |
5039 |
5051 |
5059 |
5077 |
5081 |
5087 |
5099 |
5101 |
5107 |
5113 |
5119 |
5147 |
5153 |
5167 |
5171 |
5179 |
5189 |
5197 |
5209 |
5227 |
5231 |
5233 |
5237 |
5261 |
5273 |
5279 |
5281 |
5297 |
5303 |
5309 |
5323 |
5333 |
5347 |
5351 |
5381 |
5387 |
5393 |
5399 |
5407 |
5413 |
5417 |
5419 |
5431 |
5437 |
5441 |
5443 |
5449 |
5471 |
5477 |
5479 |
5483 |
5501 |
5503 |
5507 |
5519 |
5521 |
5527 |
5531 |
5557 |
5563 |
5569 |
5573 |
5581 |
5591 |
5623 |
5639 |
5641 |
5647 |
5651 |
5653 |
5657 |
5659 |
5669 |
5683 |
5689 |
5693 |
5701 |
5711 |
5717 |
5737 |
5741 |
5743 |
5749 |
5779 |
5783 |
5791 |
5801 |
5807 |
5813 |
5821 |
5827 |
5839 |
5843 |
5849 |
5851 |
5857 |
5861 |
5867 |
5869 |
5879 |
5881 |
5897 |
5903 |
5923 |
5927 |
5939 |
5953 |
5981 |
5987 |
6007 |
6011 |
6029 |
6037 |
6043 |
6047 |
6053 |
6067 |
6073 |
6079 |
6089 |
6091 |
6101 |
6113 |
6121 |
6131 |
6133 |
6143 |
6151 |
6163 |
6173 |
6197 |
6199 |
6203 |
6211 |
6217 |
6221 |
6229 |
6247 |
6257 |
6263 |
6269 |
6271 |
6277 |
6287 |
6299 |
6301 |
6311 |
6317 |
6323 |
6329 |
6337 |
6343 |
6353 |
6359 |
6361 |
6367 |
6373 |
6379 |
6389 |
6397 |
6421 |
6427 |
6449 |
6451 |
6469 |
6473 |
6481 |
6491 |
6521 |
6529 |
6547 |
6551 |
6553 |
6563 |
6569 |
6571 |
6577 |
6581 |
6599 |
6607 |
6619 |
6637 |
6653 |
6659 |
6661 |
6673 |
6679 |
6689 |
6691 |
6701 |
6703 |
6709 |
6719 |
6733 |
6737 |
6761 |
6763 |
6779 |
6781 |
6791 |
6793 |
6803 |
6823 |
6827 |
6829 |
6833 |
6841 |
6857 |
6863 |
6869 |
6871 |
6883 |
6899 |
6907 |
6911 |
6917 |
6947 |
6949 |
6959 |
6961 |
6967 |
6971 |
6977 |
6983 |
6991 |
6997 |
7001 |
7013 |
7019 |
7027 |
7039 |
7043 |
7057 |
7069 |
7079 |
7103 |
7109 |
7121 |
7127 |
7129 |
7151 |
7159 |
7177 |
7187 |
7193 |
7207 |
7211 |
7213 |
7219 |
7229 |
7237 |
7243 |
7247 |
7253 |
7283 |
7297 |
7307 |
7309 |
7321 |
7331 |
7333 |
7349 |
7351 |
7369 |
7393 |
7411 |
7417 |
7433 |
7451 |
7457 |
7459 |
7477 |
7481 |
7487 |
7489 |
7499 |
7507 |
7517 |
7523 |
7529 |
7537 |
7541 |
7547 |
7549 |
7559 |
7561 |
7573 |
7577 |
7583 |
7589 |
7591 |
7603 |
7607 |
7621 |
7639 |
7643 |
7649 |
7669 |
7673 |
7681 |
7687 |
7691 |
7699 |
7703 |
7717 |
7723 |
7727 |
7741 |
7753 |
7757 |
7759 |
7789 |
7793 |
7817 |
7823 |
7829 |
7841 |
7853 |
7867 |
7873 |
7877 |
7879 |
7883 |
7901 |
7907 |
7919 |
7927 |
7933 |
7937 |
7949 |
7951 |
7963 |
7993 |
8009 |
8011 |
8017 |
8039 |
8053 |
8059 |
8069 |
8081 |
8087 |
8089 |
8093 |
8101 |
8111 |
8117 |
8123 |
8147 |
8161 |
8167 |
8171 |
8179 |
8191 |
8209 |
8219 |
8221 |
8231 |
8233 |
8237 |
8243 |
8263 |
8269 |
8273 |
8287 |
8291 |
8293 |
8297 |
8311 |
8317 |
8329 |
8353 |
8363 |
8369 |
8377 |
8387 |
8389 |
8419 |
8423 |
8429 |
8431 |
8443 |
8447 |
8461 |
8467 |
8501 |
8513 |
8521 |
8527 |
8537 |
8539 |
8543 |
8563 |
8573 |
8581 |
8597 |
8599 |
8609 |
8623 |
8627 |
8629 |
8641 |
8647 |
8663 |
8669 |
8677 |
8681 |
8689 |
8693 |
8699 |
8707 |
8713 |
8719 |
8731 |
8737 |
8741 |
8747 |
8753 |
8761 |
8779 |
8783 |
8803 |
8807 |
8819 |
8821 |
8831 |
8837 |
8839 |
8849 |
8861 |
8863 |
8867 |
8887 |
8893 |
8923 |
8929 |
8933 |
8941 |
8951 |
8963 |
8969 |
8971 |
8999 |
9001 |
9007 |
9011 |
9013 |
9029 |
9041 |
9043 |
9049 |
9059 |
9067 |
9091 |
9103 |
9109 |
9127 |
9133 |
9137 |
9151 |
9157 |
9161 |
9173 |
9181 |
9187 |
9199 |
9203 |
9209 |
9221 |
9227 |
9239 |
9241 |
9257 |
9277 |
9281 |
9283 |
9293 |
9311 |
9319 |
9323 |
9337 |
9341 |
9343 |
9349 |
9371 |
9377 |
9391 |
9397 |
9403 |
9413 |
9419 |
9421 |
9431 |
9433 |
9437 |
9439 |
9461 |
9463 |
9467 |
9473 |
9479 |
9491 |
9497 |
9511 |
9521 |
9533 |
9539 |
9547 |
9551 |
9587 |
9601 |
9613 |
9619 |
9623 |
9629 |
9631 |
9643 |
9649 |
9661 |
9677 |
9679 |
9689 |
9697 |
9719 |
9721 |
9733 |
9739 |
9743 |
9749 |
9767 |
9769 |
9781 |
9787 |
9791 |
9803 |
9811 |
9817 |
9829 |
9833 |
9839 |
9851 |
9857 |
9859 |
9871 |
9883 |
9887 |
9901 |
9907 |
9923 |
9929 |
9931 |
9941 |
9949 |
9967 |
9973 |
10007 |
10009 |
10037 |
10039 |
10061 |
10067 |
10069 |
10079 |
10091 |
10093 |
10099 |
10103 |
10111 |
10133 |
10139 |
10141 |
10151 |
10159 |
10163 |
10169 |
10177 |
10181 |
10193 |
10211 |
10223 |
10243 |
10247 |
10253 |
10259 |
10267 |
10271 |
10273 |
10289 |
10301 |
10303 |
10313 |
10321 |
10331 |
10333 |
10337 |
10343 |
10357 |
10369 |
10391 |
10399 |
10427 |
10429 |
10433 |
10453 |
10457 |
10459 |
10463 |
10477 |
10487 |
10499 |
10501 |
10513 |
10529 |
10531 |
10559 |
10567 |
10589 |
10597 |
10601 |
10607 |
10613 |
10627 |
10631 |
10639 |
10651 |
10657 |
10663 |
10667 |
10687 |
10691 |
10709 |
10711 |
10723 |
10729 |
10733 |
10739 |
10753 |
10771 |
10781 |
10789 |
10799 |
10831 |
10837 |
10847 |
10853 |
10859 |
10861 |
10867 |
10883 |
10889 |
10891 |
10903 |
10909 |
10937 |
10939 |
10949 |
10957 |
10973 |
10979 |
10987 |
10993 |
11003 |
11027 |
11047 |
11057 |
11059 |
11069 |
11071 |
11083 |
11087 |
11093 |
11113 |
11117 |
11119 |
11131 |
11149 |
11159 |
11161 |
11171 |
11173 |
11177 |
11197 |
11213 |
11239 |
11243 |
11251 |
11257 |
11261 |
11273 |
11279 |
11287 |
11299 |
11311 |
11317 |
11321 |
11329 |
11351 |
11353 |
11369 |
11383 |
11393 |
11399 |
11411 |
11423 |
11437 |
11443 |
11447 |
11467 |
11471 |
11483 |
11489 |
11491 |
11497 |
11503 |
11519 |
11527 |
11549 |
11551 |
11579 |
11587 |
11593 |
11597 |
11617 |
11621 |
11633 |
11657 |
11677 |
11681 |
11689 |
11699 |
11701 |
11717 |
11719 |
11731 |
11743 |
11777 |
11779 |
11783 |
11789 |
11801 |
11807 |
11813 |
11821 |
11827 |
11831 |
11833 |
11839 |
11863 |
11867 |
11887 |
11897 |
11903 |
11909 |
11923 |
11927 |
11933 |
11939 |
11941 |
11953 |
11959 |
11969 |
11971 |
11981 |
11987 |
12007 |
12011 |
12037 |
12041 |
12043 |
12049 |
12071 |
12073 |
12097 |
12101 |
12107 |
12109 |
12113 |
12119 |
12143 |
12149 |
12157 |
12161 |
12163 |
12197 |
12203 |
12211 |
12227 |
12239 |
12241 |
12251 |
12253 |
12263 |
12269 |
12277 |
12281 |
12289 |
12301 |
12323 |
12329 |
12343 |
12347 |
12373 |
12377 |
12379 |
12391 |
12401 |
12409 |
12413 |
12421 |
12433 |
12437 |
12451 |
12457 |
12473 |
12479 |
12487 |
12491 |
12497 |
12503 |
12511 |
12517 |
12527 |
12539 |
12541 |
12547 |
12553 |
12569 |
12577 |
12583 |
12589 |
12601 |
12611 |
12613 |
12619 |
12637 |
12641 |
12647 |
12653 |
12659 |
12671 |
12689 |
12697 |
12703 |
12713 |
12721 |
12739 |
12743 |
12757 |
12763 |
12781 |
12791 |
12799 |
12809 |
12821 |
12823 |
12829 |
12841 |
12853 |
12889 |
12893 |
12899 |
12907 |
12911 |
12917 |
12919 |
12923 |
12941 |
12953 |
12959 |
12967 |
12973 |
12979 |
12983 |
13001 |
13003 |
13007 |
13009 |
13033 |
13037 |
13043 |
13049 |
13063 |
13093 |
13099 |
13103 |
13109 |
13121 |
13127 |
13147 |
13151 |
13159 |
13163 |
13171 |
13177 |
13183 |
13187 |
13217 |
13219 |
13229 |
13241 |
13249 |
13259 |
13267 |
13291 |
13297 |
13309 |
13313 |
13327 |
13331 |
13337 |
13339 |
13367 |
13381 |
13397 |
13399 |
13411 |
13417 |
13421 |
13441 |
13451 |
13457 |
13463 |
13469 |
13477 |
13487 |
13499 |
13513 |
13523 |
13537 |
13553 |
13567 |
13577 |
13591 |
13597 |
13613 |
13619 |
13627 |
13633 |
13649 |
13669 |
13679 |
13681 |
13687 |
13691 |
13693 |
13697 |
13709 |
13711 |
13721 |
13723 |
13729 |
13751 |
13757 |
13759 |
13763 |
13781 |
13789 |
13799 |
13807 |
13829 |
13831 |
13841 |
13859 |
13873 |
13877 |
13879 |
13883 |
13901 |
13903 |
13907 |
13913 |
13921 |
13931 |
13933 |
13963 |
13967 |
13997 |
13999 |
14009 |
14011 |
14029 |
14033 |
14051 |
14057 |
14071 |
14081 |
14083 |
14087 |
14107 |
14143 |
14149 |
14153 |
14159 |
14173 |
14177 |
14197 |
14207 |
14221 |
14243 |
14249 |
14251 |
14281 |
14293 |
14303 |
14321 |
14323 |
14327 |
14341 |
14347 |
14369 |
14387 |
14389 |
14401 |
14407 |
14411 |
14419 |
14423 |
14431 |
14437 |
14447 |
14449 |
14461 |
14479 |
14489 |
14503 |
14519 |
14533 |
14537 |
14543 |
14549 |
14551 |
14557 |
14561 |
14563 |
14591 |
14593 |
14621 |
14627 |
14629 |
14633 |
14639 |
14653 |
14657 |
14669 |
14683 |
14699 |
14713 |
14717 |
14723 |
14731 |
14737 |
14741 |
14747 |
14753 |
14759 |
14767 |
14771 |
14779 |
14783 |
14797 |
14813 |
14821 |
14827 |
14831 |
14843 |
14851 |
14867 |
14869 |
14879 |
14887 |
14891 |
14897 |
14923 |
14929 |
14939 |
14947 |
14951 |
14957 |
14969 |
14983 |
15013 |
15017 |
15031 |
15053 |
15061 |
15073 |
15077 |
15083 |
15091 |
15101 |
15107 |
15121 |
15131 |
15137 |
15139 |
15149 |
15161 |
15173 |
15187 |
15193 |
15199 |
15217 |
15227 |
15233 |
15241 |
15259 |
15263 |
15269 |
15271 |
15277 |
15287 |
15289 |
15299 |
15307 |
15313 |
15319 |
15329 |
15331 |
15349 |
15359 |
15361 |
15373 |
15377 |
15383 |
15391 |
15401 |
15413 |
15427 |
15439 |
15443 |
15451 |
15461 |
15467 |
15473 |
15493 |
15497 |
15511 |
15527 |
15541 |
15551 |
15559 |
15569 |
15581 |
15583 |
15601 |
15607 |
15619 |
15629 |
15641 |
15643 |
15647 |
15649 |
15661 |
15667 |
15671 |
15679 |
15683 |
15727 |
15731 |
15733 |
15737 |
15739 |
15749 |
15761 |
15767 |
15773 |
15787 |
15791 |
15797 |
15803 |
15809 |
15817 |
15823 |
15859 |
15877 |
15881 |
15887 |
15889 |
15901 |
15907 |
15913 |
15919 |
15923 |
15937 |
15959 |
15971 |
15973 |
15991 |
16001 |
16007 |
16033 |
16057 |
16061 |
16063 |
16067 |
16069 |
16073 |
16087 |
16091 |
16097 |
16103 |
16111 |
16127 |
16139 |
16141 |
16183 |
16187 |
16189 |
16193 |
16217 |
16223 |
16229 |
16231 |
16249 |
16253 |
16267 |
16273 |
16301 |
16319 |
16333 |
16339 |
16349 |
16361 |
16363 |
16369 |
16381 |
16411 |
16417 |
16421 |
16427 |
16433 |
16447 |
16451 |
16453 |
16477 |
16481 |
16487 |
16493 |
16519 |
16529 |
16547 |
16553 |
16561 |
16567 |
16573 |
16603 |
16607 |
16619 |
16631 |
16633 |
16649 |
16651 |
16657 |
16661 |
16673 |
16691 |
16693 |
16699 |
16703 |
16729 |
16741 |
16747 |
16759 |
16763 |
16787 |
16811 |
16823 |
16829 |
16831 |
16843 |
16871 |
16879 |
16883 |
16889 |
16901 |
16903 |
16921 |
16927 |
16931 |
16937 |
16943 |
16963 |
16979 |
16981 |
16987 |
16993 |
17011 |
17021 |
17027 |
17029 |
17033 |
17041 |
17047 |
17053 |
17077 |
17093 |
17099 |
17107 |
17117 |
17123 |
17137 |
17159 |
17167 |
17183 |
17189 |
17191 |
17203 |
17207 |
17209 |
17231 |
17239 |
17257 |
17291 |
17293 |
17299 |
17317 |
17321 |
17327 |
17333 |
17341 |
17351 |
17359 |
17377 |
17383 |
17387 |
17389 |
17393 |
17401 |
17417 |
17419 |
17431 |
17443 |
17449 |
17467 |
17471 |
17477 |
17483 |
17489 |
17491 |
17497 |
17509 |
17519 |
17539 |
17551 |
17569 |
17573 |
17579 |
17581 |
17597 |
17599 |
17609 |
17623 |
17627 |
17657 |
17659 |
17669 |
17681 |
17683 |
17707 |
17713 |
17729 |
17737 |
17747 |
17749 |
17761 |
17783 |
17789 |
17791 |
17807 |
17827 |
17837 |
17839 |
17851 |
17863 |
17881 |
17891 |
17903 |
17909 |
17911 |
17921 |
17923 |
17929 |
17939 |
17957 |
17959 |
17971 |
17977 |
17981 |
17987 |
17989 |
18013 |
18041 |
18043 |
18047 |
18049 |
18059 |
18061 |
18077 |
18089 |
18097 |
18119 |
18121 |
18127 |
18131 |
18133 |
18143 |
18149 |
18169 |
18181 |
18191 |
18199 |
18211 |
18217 |
18223 |
18229 |
18233 |
18251 |
18253 |
18257 |
18269 |
18287 |
18289 |
18301 |
18307 |
18311 |
18313 |
18329 |
18341 |
18353 |
18367 |
18371 |
18379 |
18397 |
18401 |
18413 |
18427 |
18433 |
18439 |
18443 |
18451 |
18457 |
18461 |
18481 |
18493 |
18503 |
18517 |
18521 |
18523 |
18539 |
18541 |
18553 |
18583 |
18587 |
18593 |
18617 |
18637 |
18661 |
18671 |
18679 |
18691 |
18701 |
18713 |
18719 |
18731 |
18743 |
18749 |
18757 |
18773 |
18787 |
18793 |
18797 |
18803 |
18839 |
18859 |
18869 |
18899 |
18911 |
18913 |
18917 |
18919 |
18947 |
18959 |
18973 |
18979 |
19001 |
19009 |
19013 |
19031 |
19037 |
19051 |
19069 |
19073 |
19079 |
19081 |
19087 |
19121 |
19139 |
19141 |
19157 |
19163 |
19181 |
19183 |
19207 |
19211 |
19213 |
19219 |
19231 |
19237 |
19249 |
19259 |
19267 |
19273 |
19289 |
19301 |
19309 |
19319 |
19333 |
19373 |
19379 |
19381 |
19387 |
19391 |
19403 |
19417 |
19421 |
19423 |
19427 |
19429 |
19433 |
19441 |
19447 |
19457 |
19463 |
19469 |
19471 |
19477 |
19483 |
19489 |
19501 |
19507 |
19531 |
19541 |
19543 |
19553 |
19559 |
19571 |
19577 |
19583 |
19597 |
19603 |
19609 |
19661 |
19681 |
19687 |
19697 |
19699 |
19709 |
19717 |
19727 |
19739 |
19751 |
19753 |
19759 |
19763 |
19777 |
19793 |
19801 |
19813 |
19819 |
19841 |
19843 |
19853 |
19861 |
19867 |
19889 |
19891 |
19913 |
19919 |
19927 |
19937 |
19949 |
19961 |
19963 |
19973 |
19979 |
19991 |
19993 |
19997 |
20011 |
20021 |
20023 |
20029 |
20047 |
20051 |
20063 |
20071 |
20089 |
20101 |
20107 |
20113 |
20117 |
20123 |
20129 |
20143 |
20147 |
20149 |
20161 |
20173 |
20177 |
20183 |
20201 |
20219 |
20231 |
20233 |
20249 |
20261 |
20269 |
20287 |
20297 |
20323 |
20327 |
20333 |
20341 |
20347 |
20353 |
20357 |
20359 |
20369 |
20389 |
20393 |
20399 |
20407 |
20411 |
20431 |
20441 |
20443 |
20477 |
20479 |
20483 |
20507 |
20509 |
20521 |
20533 |
20543 |
20549 |
20551 |
20563 |
20593 |
20599 |
20611 |
20627 |
20639 |
20641 |
20663 |
20681 |
20693 |
20707 |
20717 |
20719 |
20731 |
20743 |
20747 |
20749 |
20753 |
20759 |
20771 |
20773 |
20789 |
20807 |
20809 |
20849 |
20857 |
20873 |
20879 |
20887 |
20897 |
20899 |
20903 |
20921 |
20929 |
20939 |
20947 |
20959 |
20963 |
20981 |
20983 |
21001 |
21011 |
21013 |
21017 |
21019 |
21023 |
21031 |
21059 |
21061 |
21067 |
21089 |
21101 |
21107 |
21121 |
21139 |
21143 |
21149 |
21157 |
21163 |
21169 |
21179 |
21187 |
21191 |
21193 |
21211 |
21221 |
21227 |
21247 |
21269 |
21277 |
21283 |
21313 |
21317 |
21319 |
21323 |
21341 |
21347 |
21377 |
21379 |
21383 |
21391 |
21397 |
21401 |
21407 |
21419 |
21433 |
21467 |
21481 |
21487 |
21491 |
21493 |
21499 |
21503 |
21517 |
21521 |
21523 |
21529 |
21557 |
21559 |
21563 |
21569 |
21577 |
21587 |
21589 |
21599 |
21601 |
21611 |
21613 |
21617 |
21647 |
21649 |
21661 |
21673 |
21683 |
21701 |
21713 |
21727 |
21737 |
21739 |
21751 |
21757 |
21767 |
21773 |
21787 |
21799 |
21803 |
21817 |
21821 |
21839 |
21841 |
21851 |
21859 |
21863 |
21871 |
21881 |
21893 |
21911 |
21929 |
21937 |
21943 |
21961 |
21977 |
21991 |
21997 |
22003 |
22013 |
22027 |
22031 |
22037 |
22039 |
22051 |
22063 |
22067 |
22073 |
22079 |
22091 |
22093 |
22109 |
22111 |
22123 |
22129 |
22133 |
22147 |
22153 |
22157 |
22159 |
22171 |
22189 |
22193 |
22229 |
22247 |
22259 |
22271 |
22273 |
22277 |
22279 |
22283 |
22291 |
22303 |
22307 |
22343 |
22349 |
22367 |
22369 |
22381 |
22391 |
22397 |
22409 |
22433 |
22441 |
22447 |
22453 |
22469 |
22481 |
22483 |
22501 |
22511 |
22531 |
22541 |
22543 |
22549 |
22567 |
22571 |
22573 |
22613 |
22619 |
22621 |
22637 |
22639 |
22643 |
22651 |
22669 |
22679 |
22691 |
22697 |
22699 |
22709 |
22717 |
22721 |
22727 |
22739 |
22741 |
22751 |
22769 |
22777 |
22783 |
22787 |
22807 |
22811 |
22817 |
22853 |
22859 |
22861 |
22871 |
22877 |
22901 |
22907 |
22921 |
22937 |
22943 |
22961 |
22963 |
22973 |
22993 |
23003 |
23011 |
23017 |
23021 |
23027 |
23029 |
23039 |
23041 |
23053 |
23057 |
23059 |
23063 |
23071 |
23081 |
23087 |
23099 |
23117 |
23131 |
23143 |
23159 |
23167 |
23173 |
23189 |
23197 |
23201 |
23203 |
23209 |
23227 |
23251 |
23269 |
23279 |
23291 |
23293 |
23297 |
23311 |
23321 |
23327 |
23333 |
23339 |
23357 |
23369 |
23371 |
23399 |
23417 |
23431 |
23447 |
23459 |
23473 |
23497 |
23509 |
23531 |
23537 |
23539 |
23549 |
23557 |
23561 |
23563 |
23567 |
23581 |
23593 |
23599 |
23603 |
23609 |
23623 |
23627 |
23629 |
23633 |
23663 |
23669 |
23671 |
23677 |
23687 |
23689 |
23719 |
23741 |
23743 |
23747 |
23753 |
23761 |
23767 |
23773 |
23789 |
23801 |
23813 |
23819 |
23827 |
23831 |
23833 |
23857 |
23869 |
23873 |
23879 |
23887 |
23893 |
23899 |
23909 |
23911 |
23917 |
23929 |
23957 |
23971 |
23977 |
23981 |
23993 |
24001 |
24007 |
24019 |
24023 |
24029 |
24043 |
24049 |
24061 |
24071 |
24077 |
24083 |
24091 |
24097 |
24103 |
24107 |
24109 |
24113 |
24121 |
24133 |
24137 |
24151 |
24169 |
24179 |
24181 |
24197 |
24203 |
24223 |
24229 |
24239 |
24247 |
24251 |
24281 |
24317 |
24329 |
24337 |
24359 |
24371 |
24373 |
24379 |
24391 |
24407 |
24413 |
24419 |
24421 |
24439 |
24443 |
24469 |
24473 |
24481 |
24499 |
24509 |
24517 |
24527 |
24533 |
24547 |
24551 |
24571 |
24593 |
24611 |
24623 |
24631 |
24659 |
24671 |
24677 |
24683 |
24691 |
24697 |
24709 |
24733 |
24749 |
24763 |
24767 |
24781 |
24793 |
24799 |
24809 |
24821 |
24841 |
24847 |
24851 |
24859 |
24877 |
24889 |
24907 |
24917 |
24919 |
24923 |
24943 |
24953 |
24967 |
24971 |
24977 |
24979 |
24989 |
25013 |
25031 |
25033 |
25037 |
25057 |
25073 |
25087 |
25097 |
25111 |
25117 |
25121 |
25127 |
25147 |
25153 |
25163 |
25169 |
25171 |
25183 |
25189 |
25219 |
25229 |
25237 |
25243 |
25247 |
25253 |
25261 |
25301 |
25303 |
25307 |
25309 |
25321 |
25339 |
25343 |
25349 |
25357 |
25367 |
25373 |
25391 |
25409 |
25411 |
25423 |
25439 |
25447 |
25453 |
25457 |
25463 |
25469 |
25471 |
25523 |
25537 |
25541 |
25561 |
25577 |
25579 |
25583 |
25589 |
25601 |
25603 |
25609 |
25621 |
25633 |
25639 |
25643 |
25657 |
25667 |
25673 |
25679 |
25693 |
25703 |
25717 |
25733 |
25741 |
25747 |
25759 |
25763 |
25771 |
25793 |
25799 |
25801 |
25819 |
25841 |
25847 |
25849 |
25867 |
25873 |
25889 |
25903 |
25913 |
25919 |
25931 |
25933 |
25939 |
25943 |
25951 |
25969 |
25981 |
25997 |
25999 |
26003 |
26017 |
26021 |
26029 |
26041 |
26053 |
26083 |
26099 |
26107 |
26111 |
26113 |
26119 |
26141 |
26153 |
26161 |
26171 |
26177 |
26183 |
26189 |
26203 |
26209 |
26227 |
26237 |
26249 |
26251 |
26261 |
26263 |
26267 |
26293 |
26297 |
26309 |
26317 |
26321 |
26339 |
26347 |
26357 |
26371 |
26387 |
26393 |
26399 |
26407 |
26417 |
26423 |
26431 |
26437 |
26449 |
26459 |
26479 |
26489 |
26497 |
26501 |
26513 |
26539 |
26557 |
26561 |
26573 |
26591 |
26597 |
26627 |
26633 |
26641 |
26647 |
26669 |
26681 |
26683 |
26687 |
26693 |
26699 |
26701 |
26711 |
26713 |
26717 |
26723 |
26729 |
26731 |
26737 |
26759 |
26777 |
26783 |
26801 |
26813 |
26821 |
26833 |
26839 |
26849 |
26861 |
26863 |
26879 |
26881 |
26891 |
26893 |
26903 |
26921 |
26927 |
26947 |
26951 |
26953 |
26959 |
26981 |
26987 |
26993 |
27011 |
27017 |
27031 |
27043 |
27059 |
27061 |
27067 |
27073 |
27077 |
27091 |
27103 |
27107 |
27109 |
27127 |
27143 |
27179 |
27191 |
27197 |
27211 |
27239 |
27241 |
27253 |
27259 |
27271 |
27277 |
27281 |
27283 |
27299 |
27329 |
27337 |
27361 |
27367 |
27397 |
27407 |
27409 |
27427 |
27431 |
27437 |
27449 |
27457 |
27479 |
27481 |
27487 |
27509 |
27527 |
27529 |
27539 |
27541 |
27551 |
27581 |
27583 |
27611 |
27617 |
27631 |
27647 |
27653 |
27673 |
27689 |
27691 |
27697 |
27701 |
27733 |
27737 |
27739 |
27743 |
27749 |
27751 |
27763 |
27767 |
27773 |
27779 |
27791 |
27793 |
27799 |
27803 |
27809 |
27817 |
27823 |
27827 |
27847 |
27851 |
27883 |
27893 |
27901 |
27917 |
27919 |
27941 |
27943 |
27947 |
27953 |
27961 |
27967 |
27983 |
27997 |
28001 |
28019 |
28027 |
28031 |
28051 |
28057 |
28069 |
28081 |
28087 |
28097 |
28099 |
28109 |
28111 |
28123 |
28151 |
28163 |
28181 |
28183 |
28201 |
28211 |
28219 |
28229 |
28277 |
28279 |
28283 |
28289 |
28297 |
28307 |
28309 |
28319 |
28349 |
28351 |
28387 |
28393 |
28403 |
28409 |
28411 |
28429 |
28433 |
28439 |
28447 |
28463 |
28477 |
28493 |
28499 |
28513 |
28517 |
28537 |
28541 |
28547 |
28549 |
28559 |
28571 |
28573 |
28579 |
28591 |
28597 |
28603 |
28607 |
28619 |
28621 |
28627 |
28631 |
28643 |
28649 |
28657 |
28661 |
28663 |
28669 |
28687 |
28697 |
28703 |
28711 |
28723 |
28729 |
28751 |
28753 |
28759 |
28771 |
28789 |
28793 |
28807 |
28813 |
28817 |
28837 |
28843 |
28859 |
28867 |
28871 |
28879 |
28901 |
28909 |
28921 |
28927 |
28933 |
28949 |
28961 |
28979 |
29009 |
29017 |
29021 |
29023 |
29027 |
29033 |
29059 |
29063 |
29077 |
29101 |
29123 |
29129 |
29131 |
29137 |
29147 |
29153 |
29167 |
29173 |
29179 |
29191 |
29201 |
29207 |
29209 |
29221 |
29231 |
29243 |
29251 |
29269 |
29287 |
29297 |
29303 |
29311 |
29327 |
29333 |
29339 |
29347 |
29363 |
29383 |
29387 |
29389 |
29399 |
29401 |
29411 |
29423 |
29429 |
29437 |
29443 |
29453 |
29473 |
29483 |
29501 |
29527 |
29531 |
29537 |
29567 |
29569 |
29573 |
29581 |
29587 |
29599 |
29611 |
29629 |
29633 |
29641 |
29663 |
29669 |
29671 |
29683 |
29717 |
29723 |
29741 |
29753 |
29759 |
29761 |
29789 |
29803 |
29819 |
29833 |
29837 |
29851 |
29863 |
29867 |
29873 |
29879 |
29881 |
29917 |
29921 |
29927 |
29947 |
29959 |
29983 |
29989 |
30011 |
30013 |
30029 |
30047 |
30059 |
30071 |
30089 |
30091 |
30097 |
30103 |
30109 |
30113 |
30119 |
30133 |
30137 |
30139 |
30161 |
30169 |
30181 |
30187 |
30197 |
30203 |
30211 |
30223 |
30241 |
30253 |
30259 |
30269 |
30271 |
30293 |
30307 |
30313 |
30319 |
30323 |
30341 |
30347 |
30367 |
30389 |
30391 |
30403 |
30427 |
30431 |
30449 |
30467 |
30469 |
30491 |
30493 |
30497 |
30509 |
30517 |
30529 |
30539 |
30553 |
30557 |
30559 |
30577 |
30593 |
30631 |
30637 |
30643 |
30649 |
30661 |
30671 |
30677 |
30689 |
30697 |
30703 |
30707 |
30713 |
30727 |
30757 |
30763 |
30773 |
30781 |
30803 |
30809 |
30817 |
30829 |
30839 |
30841 |
30851 |
30853 |
30859 |
30869 |
30871 |
30881 |
30893 |
30911 |
30931 |
30937 |
30941 |
30949 |
30971 |
30977 |
30983 |
31013 |
31019 |
31033 |
31039 |
31051 |
31063 |
31069 |
31079 |
31081 |
31091 |
31121 |
31123 |
31139 |
31147 |
31151 |
31153 |
31159 |
31177 |
31181 |
31183 |
31189 |
31193 |
31219 |
31223 |
31231 |
31237 |
31247 |
31249 |
31253 |
31259 |
31267 |
31271 |
31277 |
31307 |
31319 |
31321 |
31327 |
31333 |
31337 |
31357 |
31379 |
31387 |
31391 |
31393 |
31397 |
31469 |
31477 |
31481 |
31489 |
31511 |
31513 |
31517 |
31531 |
31541 |
31543 |
31547 |
31567 |
31573 |
31583 |
31601 |
31607 |
31627 |
31643 |
31649 |
31657 |
31663 |
31667 |
31687 |
31699 |
31721 |
31723 |
31727 |
31729 |
31741 |
31751 |
31769 |
31771 |
31793 |
31799 |
31817 |
31847 |
31849 |
31859 |
31873 |
31883 |
31891 |
31907 |
31957 |
31963 |
31973 |
31981 |
31991 |
32003 |
32009 |
32027 |
32029 |
32051 |
32057 |
32059 |
32063 |
32069 |
32077 |
32083 |
32089 |
32099 |
32117 |
32119 |
32141 |
32143 |
32159 |
32173 |
32183 |
32189 |
32191 |
32203 |
32213 |
32233 |
32237 |
32251 |
32257 |
32261 |
32297 |
32299 |
32303 |
32309 |
32321 |
32323 |
32327 |
32341 |
32353 |
32359 |
32363 |
32369 |
32371 |
32377 |
32381 |
32401 |
32411 |
32413 |
32423 |
32429 |
32441 |
32443 |
32467 |
32479 |
32491 |
32497 |
32503 |
32507 |
32531 |
32533 |
32537 |
32561 |
32563 |
32569 |
32573 |
32579 |
32587 |
32603 |
32609 |
32611 |
32621 |
32633 |
32647 |
32653 |
32687 |
32693 |
32707 |
32713 |
32717 |
32719 |
32749 |
32771 |
32779 |
32783 |
32789 |
32797 |
32801 |
32803 |
32831 |
32833 |
32839 |
32843 |
32869 |
32887 |
32909 |
32911 |
32917 |
32933 |
32939 |
32941 |
32957 |
32969 |
32971 |
32983 |
32987 |
32993 |
32999 |
33013 |
33023 |
33029 |
33037 |
33049 |
33053 |
33071 |
33073 |
33083 |
33091 |
33107 |
33113 |
33119 |
33149 |
33151 |
33161 |
33179 |
33181 |
33191 |
33199 |
33203 |
33211 |
33223 |
33247 |
33287 |
33289 |
33301 |
33311 |
33317 |
33329 |
33331 |
33343 |
33347 |
33349 |
33353 |
33359 |
33377 |
33391 |
33403 |
33409 |
33413 |
33427 |
33457 |
33461 |
33469 |
33479 |
33487 |
33493 |
33503 |
33521 |
33529 |
33533 |
33547 |
33563 |
33569 |
33577 |
33581 |
33587 |
33589 |
33599 |
33601 |
33613 |
33617 |
33619 |
33623 |
33629 |
33637 |
33641 |
33647 |
33679 |
33703 |
33713 |
33721 |
33739 |
33749 |
33751 |
33757 |
33767 |
33769 |
33773 |
33791 |
33797 |
33809 |
33811 |
33827 |
33829 |
33851 |
33857 |
33863 |
33871 |
33889 |
33893 |
33911 |
33923 |
33931 |
33937 |
33941 |
33961 |
33967 |
33997 |
34019 |
34031 |
34033 |
34039 |
34057 |
34061 |
34123 |
34127 |
34129 |
34141 |
34147 |
34157 |
34159 |
34171 |
34183 |
34211 |
34213 |
34217 |
34231 |
34253 |
34259 |
34261 |
34267 |
34273 |
34283 |
34297 |
34301 |
34303 |
34313 |
34319 |
34327 |
34337 |
34351 |
34361 |
34367 |
34369 |
34381 |
34403 |
34421 |
34429 |
34439 |
34457 |
34469 |
34471 |
34483 |
34487 |
34499 |
34501 |
34511 |
34513 |
34519 |
34537 |
34543 |
34549 |
34583 |
34589 |
34591 |
34603 |
34607 |
34613 |
34631 |
34649 |
34651 |
34667 |
34673 |
34679 |
34687 |
34693 |
34703 |
34721 |
34729 |
34739 |
34747 |
34757 |
34759 |
34763 |
34781 |
34807 |
34819 |
34841 |
34843 |
34847 |
34849 |
34871 |
34877 |
34883 |
34897 |
34913 |
34919 |
34939 |
34949 |
34961 |
34963 |
34981 |
35023 |
35027 |
35051 |
35053 |
35059 |
35069 |
35081 |
35083 |
35089 |
35099 |
35107 |
35111 |
35117 |
35129 |
35141 |
35149 |
35153 |
35159 |
35171 |
35201 |
35221 |
35227 |
35251 |
35257 |
35267 |
35279 |
35281 |
35291 |
35311 |
35317 |
35323 |
35327 |
35339 |
35353 |
35363 |
35381 |
35393 |
35401 |
35407 |
35419 |
35423 |
35437 |
35447 |
35449 |
35461 |
35491 |
35507 |
35509 |
35521 |
35527 |
35531 |
35533 |
35537 |
35543 |
35569 |
35573 |
35591 |
35593 |
35597 |
35603 |
35617 |
35671 |
35677 |
35729 |
35731 |
35747 |
35753 |
35759 |
35771 |
35797 |
35801 |
35803 |
35809 |
35831 |
35837 |
35839 |
35851 |
35863 |
35869 |
35879 |
35897 |
35899 |
35911 |
35923 |
35933 |
35951 |
35963 |
35969 |
35977 |
35983 |
35993 |
35999 |
36007 |
36011 |
36013 |
36017 |
36037 |
36061 |
36067 |
36073 |
36083 |
36097 |
36107 |
36109 |
36131 |
36137 |
36151 |
36161 |
36187 |
36191 |
36209 |
36217 |
36229 |
36241 |
36251 |
36263 |
36269 |
36277 |
36293 |
36299 |
36307 |
36313 |
36319 |
36341 |
36343 |
36353 |
36373 |
36383 |
36389 |
36433 |
36451 |
36457 |
36467 |
36469 |
36473 |
36479 |
36493 |
36497 |
36523 |
36527 |
36529 |
36541 |
36551 |
36559 |
36563 |
36571 |
36583 |
36587 |
36599 |
36607 |
36629 |
36637 |
36643 |
36653 |
36671 |
36677 |
36683 |
36691 |
36697 |
36709 |
36713 |
36721 |
36739 |
36749 |
36761 |
36767 |
36779 |
36781 |
36787 |
36791 |
36793 |
36809 |
36821 |
36833 |
36847 |
36857 |
36871 |
36877 |
36887 |
36899 |
36901 |
36913 |
36919 |
36923 |
36929 |
36931 |
36943 |
36947 |
36973 |
36979 |
36997 |
37003 |
37013 |
37019 |
37021 |
37039 |
37049 |
37057 |
37061 |
37087 |
37097 |
37117 |
37123 |
37139 |
37159 |
37171 |
37181 |
37189 |
37199 |
37201 |
37217 |
37223 |
37243 |
37253 |
37273 |
37277 |
37307 |
37309 |
37313 |
37321 |
37337 |
37339 |
37357 |
37361 |
37363 |
37369 |
37379 |
37397 |
37409 |
37423 |
37441 |
37447 |
37463 |
37483 |
37489 |
37493 |
37501 |
37507 |
37511 |
37517 |
37529 |
37537 |
37547 |
37549 |
37561 |
37567 |
37571 |
37573 |
37579 |
37589 |
37591 |
37607 |
37619 |
37633 |
37643 |
37649 |
37657 |
37663 |
37691 |
37693 |
37699 |
37717 |
37747 |
37781 |
37783 |
37799 |
37811 |
37813 |
37831 |
37847 |
37853 |
37861 |
37871 |
37879 |
37889 |
37897 |
37907 |
37951 |
37957 |
37963 |
37967 |
37987 |
37991 |
37993 |
37997 |
38011 |
38039 |
38047 |
38053 |
38069 |
38083 |
38113 |
38119 |
38149 |
38153 |
38167 |
38177 |
38183 |
38189 |
38197 |
38201 |
38219 |
38231 |
38237 |
38239 |
38261 |
38273 |
38281 |
38287 |
38299 |
38303 |
38317 |
38321 |
38327 |
38329 |
38333 |
38351 |
38371 |
38377 |
38393 |
38431 |
38447 |
38449 |
38453 |
38459 |
38461 |
38501 |
38543 |
38557 |
38561 |
38567 |
38569 |
38593 |
38603 |
38609 |
38611 |
38629 |
38639 |
38651 |
38653 |
38669 |
38671 |
38677 |
38693 |
38699 |
38707 |
38711 |
38713 |
38723 |
38729 |
38737 |
38747 |
38749 |
38767 |
38783 |
38791 |
38803 |
38821 |
38833 |
38839 |
38851 |
38861 |
38867 |
38873 |
38891 |
38903 |
38917 |
38921 |
38923 |
38933 |
38953 |
38959 |
38971 |
38977 |
38993 |
39019 |
39023 |
39041 |
39043 |
39047 |
39079 |
39089 |
39097 |
39103 |
39107 |
39113 |
39119 |
39133 |
39139 |
39157 |
39161 |
39163 |
39181 |
39191 |
39199 |
39209 |
39217 |
39227 |
39229 |
39233 |
39239 |
39241 |
39251 |
39293 |
39301 |
39313 |
39317 |
39323 |
39341 |
39343 |
39359 |
39367 |
39371 |
39373 |
39383 |
39397 |
39409 |
39419 |
39439 |
39443 |
39451 |
39461 |
39499 |
39503 |
39509 |
39511 |
39521 |
39541 |
39551 |
39563 |
39569 |
39581 |
39607 |
39619 |
39623 |
39631 |
39659 |
39667 |
39671 |
39679 |
39703 |
39709 |
39719 |
39727 |
39733 |
39749 |
39761 |
39769 |
39779 |
39791 |
39799 |
39821 |
39827 |
39829 |
39839 |
39841 |
39847 |
39857 |
39863 |
39869 |
39877 |
39883 |
39887 |
39901 |
39929 |
39937 |
39953 |
39971 |
39979 |
39983 |
39989 |
40009 |
40013 |
40031 |
40037 |
40039 |
40063 |
40087 |
40093 |
40099 |
40111 |
40123 |
40127 |
40129 |
40151 |
40153 |
40163 |
40169 |
40177 |
40189 |
40193 |
40213 |
40231 |
40237 |
40241 |
40253 |
40277 |
40283 |
40289 |
40343 |
40351 |
40357 |
40361 |
40387 |
40423 |
40427 |
40429 |
40433 |
40459 |
40471 |
40483 |
40487 |
40493 |
40499 |
40507 |
40519 |
40529 |
40531 |
40543 |
40559 |
40577 |
40583 |
40591 |
40597 |
40609 |
40627 |
40637 |
40639 |
40693 |
40697 |
40699 |
40709 |
40739 |
40751 |
40759 |
40763 |
40771 |
40787 |
40801 |
40813 |
40819 |
40823 |
40829 |
40841 |
40847 |
40849 |
40853 |
40867 |
40879 |
40883 |
40897 |
40903 |
40927 |
40933 |
40939 |
40949 |
40961 |
40973 |
40993 |
41011 |
41017 |
41023 |
41039 |
41047 |
41051 |
41057 |
41077 |
41081 |
41113 |
41117 |
41131 |
41141 |
41143 |
41149 |
41161 |
41177 |
41179 |
41183 |
41189 |
41201 |
41203 |
41213 |
41221 |
41227 |
41231 |
41233 |
41243 |
41257 |
41263 |
41269 |
41281 |
41299 |
41333 |
41341 |
41351 |
41357 |
41381 |
41387 |
41389 |
41399 |
41411 |
41413 |
41443 |
41453 |
41467 |
41479 |
41491 |
41507 |
41513 |
41519 |
41521 |
41539 |
41543 |
41549 |
41579 |
41593 |
41597 |
41603 |
41609 |
41611 |
41617 |
41621 |
41627 |
41641 |
41647 |
41651 |
41659 |
41669 |
41681 |
41687 |
41719 |
41729 |
41737 |
41759 |
41761 |
41771 |
41777 |
41801 |
41809 |
41813 |
41843 |
41849 |
41851 |
41863 |
41879 |
41887 |
41893 |
41897 |
41903 |
41911 |
41927 |
41941 |
41947 |
41953 |
41957 |
41959 |
41969 |
41981 |
41983 |
41999 |
42013 |
42017 |
42019 |
42023 |
42043 |
42061 |
42071 |
42073 |
42083 |
42089 |
42101 |
42131 |
42139 |
42157 |
42169 |
42179 |
42181 |
42187 |
42193 |
42197 |
42209 |
42221 |
42223 |
42227 |
42239 |
42257 |
42281 |
42283 |
42293 |
42299 |
42307 |
42323 |
42331 |
42337 |
42349 |
42359 |
42373 |
42379 |
42391 |
42397 |
42403 |
42407 |
42409 |
42433 |
42437 |
42443 |
42451 |
42457 |
42461 |
42463 |
42467 |
42473 |
42487 |
42491 |
42499 |
42509 |
42533 |
42557 |
42569 |
42571 |
42577 |
42589 |
42611 |
42641 |
42643 |
42649 |
42667 |
42677 |
42683 |
42689 |
42697 |
42701 |
42703 |
42709 |
42719 |
42727 |
42737 |
42743 |
42751 |
42767 |
42773 |
42787 |
42793 |
42797 |
42821 |
42829 |
42839 |
42841 |
42853 |
42859 |
42863 |
42899 |
42901 |
42923 |
42929 |
42937 |
42943 |
42953 |
42961 |
42967 |
42979 |
42989 |
43003 |
43013 |
43019 |
43037 |
43049 |
43051 |
43063 |
43067 |
43093 |
43103 |
43117 |
43133 |
43151 |
43159 |
43177 |
43189 |
43201 |
43207 |
43223 |
43237 |
43261 |
43271 |
43283 |
43291 |
43313 |
43319 |
43321 |
43331 |
43391 |
43397 |
43399 |
43403 |
43411 |
43427 |
43441 |
43451 |
43457 |
43481 |
43487 |
43499 |
43517 |
43541 |
43543 |
43573 |
43577 |
43579 |
43591 |
43597 |
43607 |
43609 |
43613 |
43627 |
43633 |
43649 |
43651 |
43661 |
43669 |
43691 |
43711 |
43717 |
43721 |
43753 |
43759 |
43777 |
43781 |
43783 |
43787 |
43789 |
43793 |
43801 |
43853 |
43867 |
43889 |
43891 |
43913 |
43933 |
43943 |
43951 |
43961 |
43963 |
43969 |
43973 |
43987 |
43991 |
43997 |
44017 |
44021 |
44027 |
44029 |
44041 |
44053 |
44059 |
44071 |
44087 |
44089 |
44101 |
44111 |
44119 |
44123 |
44129 |
44131 |
44159 |
44171 |
44179 |
44189 |
44201 |
44203 |
44207 |
44221 |
44249 |
44257 |
44263 |
44267 |
44269 |
44273 |
44279 |
44281 |
44293 |
44351 |
44357 |
44371 |
44381 |
44383 |
44389 |
44417 |
44449 |
44453 |
44483 |
44491 |
44497 |
44501 |
44507 |
44519 |
44531 |
44533 |
44537 |
44543 |
44549 |
44563 |
44579 |
44587 |
44617 |
44621 |
44623 |
44633 |
44641 |
44647 |
44651 |
44657 |
44683 |
44687 |
44699 |
44701 |
44711 |
44729 |
44741 |
44753 |
44771 |
44773 |
44777 |
44789 |
44797 |
44809 |
44819 |
44839 |
44843 |
44851 |
44867 |
44879 |
44887 |
44893 |
44909 |
44917 |
44927 |
44939 |
44953 |
44959 |
44963 |
44971 |
44983 |
44987 |
45007 |
45013 |
45053 |
45061 |
45077 |
45083 |
45119 |
45121 |
45127 |
45131 |
45137 |
45139 |
45161 |
45179 |
45181 |
45191 |
45197 |
45233 |
45247 |
45259 |
45263 |
45281 |
45289 |
45293 |
45307 |
45317 |
45319 |
45329 |
45337 |
45341 |
45343 |
45361 |
45377 |
45389 |
45403 |
45413 |
45427 |
45433 |
45439 |
45481 |
45491 |
45497 |
45503 |
45523 |
45533 |
45541 |
45553 |
45557 |
45569 |
45587 |
45589 |
45599 |
45613 |
45631 |
45641 |
45659 |
45667 |
45673 |
45677 |
45691 |
45697 |
45707 |
45737 |
45751 |
45757 |
45763 |
45767 |
45779 |
45817 |
45821 |
45823 |
45827 |
45833 |
45841 |
45853 |
45863 |
45869 |
45887 |
45893 |
45943 |
45949 |
45953 |
45959 |
45971 |
45979 |
45989 |
46021 |
46027 |
46049 |
46051 |
46061 |
46073 |
46091 |
46093 |
46099 |
46103 |
46133 |
46141 |
46147 |
46153 |
46171 |
46181 |
46183 |
46187 |
46199 |
46219 |
46229 |
46237 |
46261 |
46271 |
46273 |
46279 |
46301 |
46307 |
46309 |
46327 |
46337 |
46349 |
46351 |
46381 |
46399 |
46411 |
46439 |
46441 |
46447 |
46451 |
46457 |
46471 |
46477 |
46489 |
46499 |
46507 |
46511 |
46523 |
46549 |
46559 |
46567 |
46573 |
46589 |
46591 |
46601 |
46619 |
46633 |
46639 |
46643 |
46649 |
46663 |
46679 |
46681 |
46687 |
46691 |
46703 |
46723 |
46727 |
46747 |
46751 |
46757 |
46769 |
46771 |
46807 |
46811 |
46817 |
46819 |
46829 |
46831 |
46853 |
46861 |
46867 |
46877 |
46889 |
46901 |
46919 |
46933 |
46957 |
46993 |
46997 |
47017 |
47041 |
47051 |
47057 |
47059 |
47087 |
47093 |
47111 |
47119 |
47123 |
47129 |
47137 |
47143 |
47147 |
47149 |
47161 |
47189 |
47207 |
47221 |
47237 |
47251 |
47269 |
47279 |
47287 |
47293 |
47297 |
47303 |
47309 |
47317 |
47339 |
47351 |
47353 |
47363 |
47381 |
47387 |
47389 |
47407 |
47417 |
47419 |
47431 |
47441 |
47459 |
47491 |
47497 |
47501 |
47507 |
47513 |
47521 |
47527 |
47533 |
47543 |
47563 |
47569 |
47581 |
47591 |
47599 |
47609 |
47623 |
47629 |
47639 |
47653 |
47657 |
47659 |
47681 |
47699 |
47701 |
47711 |
47713 |
47717 |
47737 |
47741 |
47743 |
47777 |
47779 |
47791 |
47797 |
47807 |
47809 |
47819 |
47837 |
47843 |
47857 |
47869 |
47881 |
47903 |
47911 |
47917 |
47933 |
47939 |
47947 |
47951 |
47963 |
47969 |
47977 |
47981 |
48017 |
48023 |
48029 |
48049 |
48073 |
48079 |
48091 |
48109 |
48119 |
48121 |
48131 |
48157 |
48163 |
48179 |
48187 |
48193 |
48197 |
48221 |
48239 |
48247 |
48259 |
48271 |
48281 |
48299 |
48311 |
48313 |
48337 |
48341 |
48353 |
48371 |
48383 |
48397 |
48407 |
48409 |
48413 |
48437 |
48449 |
48463 |
48473 |
48479 |
48481 |
48487 |
48491 |
48497 |
48523 |
48527 |
48533 |
48539 |
48541 |
48563 |
48571 |
48589 |
48593 |
48611 |
48619 |
48623 |
48647 |
48649 |
48661 |
48673 |
48677 |
48679 |
48731 |
48733 |
48751 |
48757 |
48761 |
48767 |
48779 |
48781 |
48787 |
48799 |
48809 |
48817 |
48821 |
48823 |
48847 |
48857 |
48859 |
48869 |
48871 |
48883 |
48889 |
48907 |
48947 |
48953 |
48973 |
48989 |
48991 |
49003 |
49009 |
49019 |
49031 |
49033 |
49037 |
49043 |
49057 |
49069 |
49081 |
49103 |
49109 |
49117 |
49121 |
49123 |
49139 |
49157 |
49169 |
49171 |
49177 |
49193 |
49199 |
49201 |
49207 |
49211 |
49223 |
49253 |
49261 |
49277 |
49279 |
49297 |
49307 |
49331 |
49333 |
49339 |
49363 |
49367 |
49369 |
49391 |
49393 |
49409 |
49411 |
49417 |
49429 |
49433 |
49451 |
49459 |
49463 |
49477 |
49481 |
49499 |
49523 |
49529 |
49531 |
49537 |
49547 |
49549 |
49559 |
49597 |
49603 |
49613 |
49627 |
49633 |
49639 |
49663 |
49667 |
49669 |
49681 |
49697 |
49711 |
49727 |
49739 |
49741 |
49747 |
49757 |
49783 |
49787 |
49789 |
49801 |
49807 |
49811 |
49823 |
49831 |
49843 |
49853 |
49871 |
49877 |
49891 |
49919 |
49921 |
49927 |
49937 |
49939 |
49943 |
49957 |
49991 |
49993 |
49999 |
50021 |
50023 |
50033 |
50047 |
50051 |
50053 |
50069 |
50077 |
50087 |
50093 |
50101 |
50111 |
50119 |
50123 |
50129 |
50131 |
50147 |
50153 |
50159 |
50177 |
50207 |
50221 |
50227 |
50231 |
50261 |
50263 |
50273 |
50287 |
50291 |
50311 |
50321 |
50329 |
50333 |
50341 |
50359 |
50363 |
50377 |
50383 |
50387 |
50411 |
50417 |
50423 |
50441 |
50459 |
50461 |
50497 |
50503 |
50513 |
50527 |
50539 |
50543 |
50549 |
50551 |
50581 |
50587 |
50591 |
50593 |
50599 |
50627 |
50647 |
50651 |
50671 |
50683 |
50707 |
50723 |
50741 |
50753 |
50767 |
50773 |
50777 |
50789 |
50821 |
50833 |
50839 |
50849 |
50857 |
50867 |
50873 |
50891 |
50893 |
50909 |
50923 |
50929 |
50951 |
50957 |
50969 |
50971 |
50989 |
50993 |
51001 |
51031 |
51043 |
51047 |
51059 |
51061 |
51071 |
51109 |
51131 |
51133 |
51137 |
51151 |
51157 |
51169 |
51193 |
51197 |
51199 |
51203 |
51217 |
51229 |
51239 |
51241 |
51257 |
51263 |
51283 |
51287 |
51307 |
51329 |
51341 |
51343 |
51347 |
51349 |
51361 |
51383 |
51407 |
51413 |
51419 |
51421 |
51427 |
51431 |
51437 |
51439 |
51449 |
51461 |
51473 |
51479 |
51481 |
51487 |
51503 |
51511 |
51517 |
51521 |
51539 |
51551 |
51563 |
51577 |
51581 |
51593 |
51599 |
51607 |
51613 |
51631 |
51637 |
51647 |
51659 |
51673 |
51679 |
51683 |
51691 |
51713 |
51719 |
51721 |
51749 |
51767 |
51769 |
51787 |
51797 |
51803 |
51817 |
51827 |
51829 |
51839 |
51853 |
51859 |
51869 |
51871 |
51893 |
51899 |
51907 |
51913 |
51929 |
51941 |
51949 |
51971 |
51973 |
51977 |
51991 |
52009 |
52021 |
52027 |
52051 |
52057 |
52067 |
52069 |
52081 |
52103 |
52121 |
52127 |
52147 |
52153 |
52163 |
52177 |
52181 |
52183 |
52189 |
52201 |
52223 |
52237 |
52249 |
52253 |
52259 |
52267 |
52289 |
52291 |
52301 |
52313 |
52321 |
52361 |
52363 |
52369 |
52379 |
52387 |
52391 |
52433 |
52453 |
52457 |
52489 |
52501 |
52511 |
52517 |
52529 |
52541 |
52543 |
52553 |
52561 |
52567 |
52571 |
52579 |
52583 |
52609 |
52627 |
52631 |
52639 |
52667 |
52673 |
52691 |
52697 |
52709 |
52711 |
52721 |
52727 |
52733 |
52747 |
52757 |
52769 |
52783 |
52807 |
52813 |
52817 |
52837 |
52859 |
52861 |
52879 |
52883 |
52889 |
52901 |
52903 |
52919 |
52937 |
52951 |
52957 |
52963 |
52967 |
52973 |
52981 |
52999 |
53003 |
53017 |
53047 |
53051 |
53069 |
53077 |
53087 |
53089 |
53093 |
53101 |
53113 |
53117 |
53129 |
53147 |
53149 |
53161 |
53171 |
53173 |
53189 |
53197 |
53201 |
53231 |
53233 |
53239 |
53267 |
53269 |
53279 |
53281 |
53299 |
53309 |
53323 |
53327 |
53353 |
53359 |
53377 |
53381 |
53401 |
53407 |
53411 |
53419 |
53437 |
53441 |
53453 |
53479 |
53503 |
53507 |
53527 |
53549 |
53551 |
53569 |
53591 |
53593 |
53597 |
53609 |
53611 |
53617 |
53623 |
53629 |
53633 |
53639 |
53653 |
53657 |
53681 |
53693 |
53699 |
53717 |
53719 |
53731 |
53759 |
53773 |
53777 |
53783 |
53791 |
53813 |
53819 |
53831 |
53849 |
53857 |
53861 |
53881 |
53887 |
53891 |
53897 |
53899 |
53917 |
53923 |
53927 |
53939 |
53951 |
53959 |
53987 |
53993 |
54001 |
54011 |
54013 |
54037 |
54049 |
54059 |
54083 |
54091 |
54101 |
54121 |
54133 |
54139 |
54151 |
54163 |
54167 |
54181 |
54193 |
54217 |
54251 |
54269 |
54277 |
54287 |
54293 |
54311 |
54319 |
54323 |
54331 |
54347 |
54361 |
54367 |
54371 |
54377 |
54401 |
54403 |
54409 |
54413 |
54419 |
54421 |
54437 |
54443 |
54449 |
54469 |
54493 |
54497 |
54499 |
54503 |
54517 |
54521 |
54539 |
54541 |
54547 |
54559 |
54563 |
54577 |
54581 |
54583 |
54601 |
54617 |
54623 |
54629 |
54631 |
54647 |
54667 |
54673 |
54679 |
54709 |
54713 |
54721 |
54727 |
54751 |
54767 |
54773 |
54779 |
54787 |
54799 |
54829 |
54833 |
54851 |
54869 |
54877 |
54881 |
54907 |
54917 |
54919 |
54941 |
54949 |
54959 |
54973 |
54979 |
54983 |
55001 |
55009 |
55021 |
55049 |
55051 |
55057 |
55061 |
55073 |
55079 |
55103 |
55109 |
55117 |
55127 |
55147 |
55163 |
55171 |
55201 |
55207 |
55213 |
55217 |
55219 |
55229 |
55243 |
55249 |
55259 |
55291 |
55313 |
55331 |
55333 |
55337 |
55339 |
55343 |
55351 |
55373 |
55381 |
55399 |
55411 |
55439 |
55441 |
55457 |
55469 |
55487 |
55501 |
55511 |
55529 |
55541 |
55547 |
55579 |
55589 |
55603 |
55609 |
55619 |
55621 |
55631 |
55633 |
55639 |
55661 |
55663 |
55667 |
55673 |
55681 |
55691 |
55697 |
55711 |
55717 |
55721 |
55733 |
55763 |
55787 |
55793 |
55799 |
55807 |
55813 |
55817 |
55819 |
55823 |
55829 |
55837 |
55843 |
55849 |
55871 |
55889 |
55897 |
55901 |
55903 |
55921 |
55927 |
55931 |
55933 |
55949 |
55967 |
55987 |
55997 |
56003 |
56009 |
56039 |
56041 |
56053 |
56081 |
56087 |
56093 |
56099 |
56101 |
56113 |
56123 |
56131 |
56149 |
56167 |
56171 |
56179 |
56197 |
56207 |
56209 |
56237 |
56239 |
56249 |
56263 |
56267 |
56269 |
56299 |
56311 |
56333 |
56359 |
56369 |
56377 |
56383 |
56393 |
56401 |
56417 |
56431 |
56437 |
56443 |
56453 |
56467 |
56473 |
56477 |
56479 |
56489 |
56501 |
56503 |
56509 |
56519 |
56527 |
56531 |
56533 |
56543 |
56569 |
56591 |
56597 |
56599 |
56611 |
56629 |
56633 |
56659 |
56663 |
56671 |
56681 |
56687 |
56701 |
56711 |
56713 |
56731 |
56737 |
56747 |
56767 |
56773 |
56779 |
56783 |
56807 |
56809 |
56813 |
56821 |
56827 |
56843 |
56857 |
56873 |
56891 |
56893 |
56897 |
56909 |
56911 |
56921 |
56923 |
56929 |
56941 |
56951 |
56957 |
56963 |
56983 |
56989 |
56993 |
56999 |
57037 |
57041 |
57047 |
57059 |
57073 |
57077 |
57089 |
57097 |
57107 |
57119 |
57131 |
57139 |
57143 |
57149 |
57163 |
57173 |
57179 |
57191 |
57193 |
57203 |
57221 |
57223 |
57241 |
57251 |
57259 |
57269 |
57271 |
57283 |
57287 |
57301 |
57329 |
57331 |
57347 |
57349 |
57367 |
57373 |
57383 |
57389 |
57397 |
57413 |
57427 |
57457 |
57467 |
57487 |
57493 |
57503 |
57527 |
57529 |
57557 |
57559 |
57571 |
57587 |
57593 |
57601 |
57637 |
57641 |
57649 |
57653 |
57667 |
57679 |
57689 |
57697 |
57709 |
57713 |
57719 |
57727 |
57731 |
57737 |
57751 |
57773 |
57781 |
57787 |
57791 |
57793 |
57803 |
57809 |
57829 |
57839 |
57847 |
57853 |
57859 |
57881 |
57899 |
57901 |
57917 |
57923 |
57943 |
57947 |
57973 |
57977 |
57991 |
58013 |
58027 |
58031 |
58043 |
58049 |
58057 |
58061 |
58067 |
58073 |
58099 |
58109 |
58111 |
58129 |
58147 |
58151 |
58153 |
58169 |
58171 |
58189 |
58193 |
58199 |
58207 |
58211 |
58217 |
58229 |
58231 |
58237 |
58243 |
58271 |
58309 |
58313 |
58321 |
58337 |
58363 |
58367 |
58369 |
58379 |
58391 |
58393 |
58403 |
58411 |
58417 |
58427 |
58439 |
58441 |
58451 |
58453 |
58477 |
58481 |
58511 |
58537 |
58543 |
58549 |
58567 |
58573 |
58579 |
58601 |
58603 |
58613 |
58631 |
58657 |
58661 |
58679 |
58687 |
58693 |
58699 |
58711 |
58727 |
58733 |
58741 |
58757 |
58763 |
58771 |
58787 |
58789 |
58831 |
58889 |
58897 |
58901 |
58907 |
58909 |
58913 |
58921 |
58937 |
58943 |
58963 |
58967 |
58979 |
58991 |
58997 |
59009 |
59011 |
59021 |
59023 |
59029 |
59051 |
59053 |
59063 |
59069 |
59077 |
59083 |
59093 |
59107 |
59113 |
59119 |
59123 |
59141 |
59149 |
59159 |
59167 |
59183 |
59197 |
59207 |
59209 |
59219 |
59221 |
59233 |
59239 |
59243 |
59263 |
59273 |
59281 |
59333 |
59341 |
59351 |
59357 |
59359 |
59369 |
59377 |
59387 |
59393 |
59399 |
59407 |
59417 |
59419 |
59441 |
59443 |
59447 |
59453 |
59467 |
59471 |
59473 |
59497 |
59509 |
59513 |
59539 |
59557 |
59561 |
59567 |
59581 |
59611 |
59617 |
59621 |
59627 |
59629 |
59651 |
59659 |
59663 |
59669 |
59671 |
59693 |
59699 |
59707 |
59723 |
59729 |
59743 |
59747 |
59753 |
59771 |
59779 |
59791 |
59797 |
59809 |
59833 |
59863 |
59879 |
59887 |
59921 |
59929 |
59951 |
59957 |
59971 |
59981 |
59999 |
60013 |
60017 |
60029 |
60037 |
60041 |
60077 |
60083 |
60089 |
60091 |
60101 |
60103 |
60107 |
60127 |
60133 |
60139 |
60149 |
60161 |
60167 |
60169 |
60209 |
60217 |
60223 |
60251 |
60257 |
60259 |
60271 |
60289 |
60293 |
60317 |
60331 |
60337 |
60343 |
60353 |
60373 |
60383 |
60397 |
60413 |
60427 |
60443 |
60449 |
60457 |
60493 |
60497 |
60509 |
60521 |
60527 |
60539 |
60589 |
60601 |
60607 |
60611 |
60617 |
60623 |
60631 |
60637 |
60647 |
60649 |
60659 |
60661 |
60679 |
60689 |
60703 |
60719 |
60727 |
60733 |
60737 |
60757 |
60761 |
60763 |
60773 |
60779 |
60793 |
60811 |
60821 |
60859 |
60869 |
60887 |
60889 |
60899 |
60901 |
60913 |
60917 |
60919 |
60923 |
60937 |
60943 |
60953 |
60961 |
61001 |
61007 |
61027 |
61031 |
61043 |
61051 |
61057 |
61091 |
61099 |
61121 |
61129 |
61141 |
61151 |
61153 |
61169 |
61211 |
61223 |
61231 |
61253 |
61261 |
61283 |
61291 |
61297 |
61331 |
61333 |
61339 |
61343 |
61357 |
61363 |
61379 |
61381 |
61403 |
61409 |
61417 |
61441 |
61463 |
61469 |
61471 |
61483 |
61487 |
61493 |
61507 |
61511 |
61519 |
61543 |
61547 |
61553 |
61559 |
61561 |
61583 |
61603 |
61609 |
61613 |
61627 |
61631 |
61637 |
61643 |
61651 |
61657 |
61667 |
61673 |
61681 |
61687 |
61703 |
61717 |
61723 |
61729 |
61751 |
61757 |
61781 |
61813 |
61819 |
61837 |
61843 |
61861 |
61871 |
61879 |
61909 |
61927 |
61933 |
61949 |
61961 |
61967 |
61979 |
61981 |
61987 |
61991 |
62003 |
62011 |
62017 |
62039 |
62047 |
62053 |
62057 |
62071 |
62081 |
62099 |
62119 |
62129 |
62131 |
62137 |
62141 |
62143 |
62171 |
62189 |
62191 |
62201 |
62207 |
62213 |
62219 |
62233 |
62273 |
62297 |
62299 |
62303 |
62311 |
62323 |
62327 |
62347 |
62351 |
62383 |
62401 |
62417 |
62423 |
62459 |
62467 |
62473 |
62477 |
62483 |
62497 |
62501 |
62507 |
62533 |
62539 |
62549 |
62563 |
62581 |
62591 |
62597 |
62603 |
62617 |
62627 |
62633 |
62639 |
62653 |
62659 |
62683 |
62687 |
62701 |
62723 |
62731 |
62743 |
62753 |
62761 |
62773 |
62791 |
62801 |
62819 |
62827 |
62851 |
62861 |
62869 |
62873 |
62897 |
62903 |
62921 |
62927 |
62929 |
62939 |
62969 |
62971 |
62981 |
62983 |
62987 |
62989 |
63029 |
63031 |
63059 |
63067 |
63073 |
63079 |
63097 |
63103 |
63113 |
63127 |
63131 |
63149 |
63179 |
63197 |
63199 |
63211 |
63241 |
63247 |
63277 |
63281 |
63299 |
63311 |
63313 |
63317 |
63331 |
63337 |
63347 |
63353 |
63361 |
63367 |
63377 |
63389 |
63391 |
63397 |
63409 |
63419 |
63421 |
63439 |
63443 |
63463 |
63467 |
63473 |
63487 |
63493 |
63499 |
63521 |
63527 |
63533 |
63541 |
63559 |
63577 |
63587 |
63589 |
63599 |
63601 |
63607 |
63611 |
63617 |
63629 |
63647 |
63649 |
63659 |
63667 |
63671 |
63689 |
63691 |
63697 |
63703 |
63709 |
63719 |
63727 |
63737 |
63743 |
63761 |
63773 |
63781 |
63793 |
63799 |
63803 |
63809 |
63823 |
63839 |
63841 |
63853 |
63857 |
63863 |
63901 |
63907 |
63913 |
63929 |
63949 |
63977 |
63997 |
64007 |
64013 |
64019 |
64033 |
64037 |
64063 |
64067 |
64081 |
64091 |
64109 |
64123 |
64151 |
64153 |
64157 |
64171 |
64187 |
64189 |
64217 |
64223 |
64231 |
64237 |
64271 |
64279 |
64283 |
64301 |
64303 |
64319 |
64327 |
64333 |
64373 |
64381 |
64399 |
64403 |
64433 |
64439 |
64451 |
64453 |
64483 |
64489 |
64499 |
64513 |
64553 |
64567 |
64577 |
64579 |
64591 |
64601 |
64609 |
64613 |
64621 |
64627 |
64633 |
64661 |
64663 |
64667 |
64679 |
64693 |
64709 |
64717 |
64747 |
64763 |
64781 |
64783 |
64793 |
64811 |
64817 |
64849 |
64853 |
64871 |
64877 |
64879 |
64891 |
64901 |
64919 |
64921 |
64927 |
64937 |
64951 |
64969 |
64997 |
65003 |
65011 |
65027 |
65029 |
65033 |
65053 |
65063 |
65071 |
65089 |
65099 |
65101 |
65111 |
65119 |
65123 |
65129 |
65141 |
65147 |
65167 |
65171 |
65173 |
65179 |
65183 |
65203 |
65213 |
65239 |
65257 |
65267 |
65269 |
65287 |
65293 |
65309 |
65323 |
65327 |
65353 |
65357 |
65371 |
65381 |
65393 |
65407 |
65413 |
65419 |
65423 |
65437 |
65447 |
65449 |
65479 |
65497 |
65519 |
65521 |
65537 |
65539 |
65543 |
65551 |
65557 |
65563 |
65579 |
65581 |
65587 |
65599 |
65609 |
65617 |
65629 |
65633 |
65647 |
65651 |
65657 |
65677 |
65687 |
65699 |
65701 |
65707 |
65713 |
65717 |
65719 |
65729 |
65731 |
65761 |
65777 |
65789 |
65809 |
65827 |
65831 |
65837 |
65839 |
65843 |
65851 |
65867 |
65881 |
65899 |
65921 |
65927 |
65929 |
65951 |
65957 |
65963 |
65981 |
65983 |
65993 |
66029 |
66037 |
66041 |
66047 |
66067 |
66071 |
66083 |
66089 |
66103 |
66107 |
66109 |
66137 |
66161 |
66169 |
66173 |
66179 |
66191 |
66221 |
66239 |
66271 |
66293 |
66301 |
66337 |
66343 |
66347 |
66359 |
66361 |
66373 |
66377 |
66383 |
66403 |
66413 |
66431 |
66449 |
66457 |
66463 |
66467 |
66491 |
66499 |
66509 |
66523 |
66529 |
66533 |
66541 |
66553 |
66569 |
66571 |
66587 |
66593 |
66601 |
66617 |
66629 |
66643 |
66653 |
66683 |
66697 |
66701 |
66713 |
66721 |
66733 |
66739 |
66749 |
66751 |
66763 |
66791 |
66797 |
66809 |
66821 |
66841 |
66851 |
66853 |
66863 |
66877 |
66883 |
66889 |
66919 |
66923 |
66931 |
66943 |
66947 |
66949 |
66959 |
66973 |
66977 |
67003 |
67021 |
67033 |
67043 |
67049 |
67057 |
67061 |
67073 |
67079 |
67103 |
67121 |
67129 |
67139 |
67141 |
67153 |
67157 |
67169 |
67181 |
67187 |
67189 |
67211 |
67213 |
67217 |
67219 |
67231 |
67247 |
67261 |
67271 |
67273 |
67289 |
67307 |
67339 |
67343 |
67349 |
67369 |
67391 |
67399 |
67409 |
67411 |
67421 |
67427 |
67429 |
67433 |
67447 |
67453 |
67477 |
67481 |
67489 |
67493 |
67499 |
67511 |
67523 |
67531 |
67537 |
67547 |
67559 |
67567 |
67577 |
67579 |
67589 |
67601 |
67607 |
67619 |
67631 |
67651 |
67679 |
67699 |
67709 |
67723 |
67733 |
67741 |
67751 |
67757 |
67759 |
67763 |
67777 |
67783 |
67789 |
67801 |
67807 |
67819 |
67829 |
67843 |
67853 |
67867 |
67883 |
67891 |
67901 |
67927 |
67931 |
67933 |
67939 |
67943 |
67957 |
67961 |
67967 |
67979 |
67987 |
67993 |
68023 |
68041 |
68053 |
68059 |
68071 |
68087 |
68099 |
68111 |
68113 |
68141 |
68147 |
68161 |
68171 |
68207 |
68209 |
68213 |
68219 |
68227 |
68239 |
68261 |
68279 |
68281 |
68311 |
68329 |
68351 |
68371 |
68389 |
68399 |
68437 |
68443 |
68447 |
68449 |
68473 |
68477 |
68483 |
68489 |
68491 |
68501 |
68507 |
68521 |
68531 |
68539 |
68543 |
68567 |
68581 |
68597 |
68611 |
68633 |
68639 |
68659 |
68669 |
68683 |
68687 |
68699 |
68711 |
68713 |
68729 |
68737 |
68743 |
68749 |
68767 |
68771 |
68777 |
68791 |
68813 |
68819 |
68821 |
68863 |
68879 |
68881 |
68891 |
68897 |
68899 |
68903 |
68909 |
68917 |
68927 |
68947 |
68963 |
68993 |
69001 |
69011 |
69019 |
69029 |
69031 |
69061 |
69067 |
69073 |
69109 |
69119 |
69127 |
69143 |
69149 |
69151 |
69163 |
69191 |
69193 |
69197 |
69203 |
69221 |
69233 |
69239 |
69247 |
69257 |
69259 |
69263 |
69313 |
69317 |
69337 |
69341 |
69371 |
69379 |
69383 |
69389 |
69401 |
69403 |
69427 |
69431 |
69439 |
69457 |
69463 |
69467 |
69473 |
69481 |
69491 |
69493 |
69497 |
69499 |
69539 |
69557 |
69593 |
69623 |
69653 |
69661 |
69677 |
69691 |
69697 |
69709 |
69737 |
69739 |
69761 |
69763 |
69767 |
69779 |
69809 |
69821 |
69827 |
69829 |
69833 |
69847 |
69857 |
69859 |
69877 |
69899 |
69911 |
69929 |
69931 |
69941 |
69959 |
69991 |
69997 |
70001 |
70003 |
70009 |
70019 |
70039 |
70051 |
70061 |
70067 |
70079 |
70099 |
70111 |
70117 |
70121 |
70123 |
70139 |
70141 |
70157 |
70163 |
70177 |
70181 |
70183 |
70199 |
70201 |
70207 |
70223 |
70229 |
70237 |
70241 |
70249 |
70271 |
70289 |
70297 |
70309 |
70313 |
70321 |
70327 |
70351 |
70373 |
70379 |
70381 |
70393 |
70423 |
70429 |
70439 |
70451 |
70457 |
70459 |
70481 |
70487 |
70489 |
70501 |
70507 |
70529 |
70537 |
70549 |
70571 |
70573 |
70583 |
70589 |
70607 |
70619 |
70621 |
70627 |
70639 |
70657 |
70663 |
70667 |
70687 |
70709 |
70717 |
70729 |
70753 |
70769 |
70783 |
70793 |
70823 |
70841 |
70843 |
70849 |
70853 |
70867 |
70877 |
70879 |
70891 |
70901 |
70913 |
70919 |
70921 |
70937 |
70949 |
70951 |
70957 |
70969 |
70979 |
70981 |
70991 |
70997 |
70999 |
71011 |
71023 |
71039 |
71059 |
71069 |
71081 |
71089 |
71119 |
71129 |
71143 |
71147 |
71153 |
71161 |
71167 |
71171 |
71191 |
71209 |
71233 |
71237 |
71249 |
71257 |
71261 |
71263 |
71287 |
71293 |
71317 |
71327 |
71329 |
71333 |
71339 |
71341 |
71347 |
71353 |
71359 |
71363 |
71387 |
71389 |
71399 |
71411 |
71413 |
71419 |
71429 |
71437 |
71443 |
71453 |
71471 |
71473 |
71479 |
71483 |
71503 |
71527 |
71537 |
71549 |
71551 |
71563 |
71569 |
71593 |
71597 |
71633 |
71647 |
71663 |
71671 |
71693 |
71699 |
71707 |
71711 |
71713 |
71719 |
71741 |
71761 |
71777 |
71789 |
71807 |
71809 |
71821 |
71837 |
71843 |
71849 |
71861 |
71867 |
71879 |
71881 |
71887 |
71899 |
71909 |
71917 |
71933 |
71941 |
71947 |
71963 |
71971 |
71983 |
71987 |
71993 |
71999 |
72019 |
72031 |
72043 |
72047 |
72053 |
72073 |
72077 |
72089 |
72091 |
72101 |
72103 |
72109 |
72139 |
72161 |
72167 |
72169 |
72173 |
72211 |
72221 |
72223 |
72227 |
72229 |
72251 |
72253 |
72269 |
72271 |
72277 |
72287 |
72307 |
72313 |
72337 |
72341 |
72353 |
72367 |
72379 |
72383 |
72421 |
72431 |
72461 |
72467 |
72469 |
72481 |
72493 |
72497 |
72503 |
72533 |
72547 |
72551 |
72559 |
72577 |
72613 |
72617 |
72623 |
72643 |
72647 |
72649 |
72661 |
72671 |
72673 |
72679 |
72689 |
72701 |
72707 |
72719 |
72727 |
72733 |
72739 |
72763 |
72767 |
72797 |
72817 |
72823 |
72859 |
72869 |
72871 |
72883 |
72889 |
72893 |
72901 |
72907 |
72911 |
72923 |
72931 |
72937 |
72949 |
72953 |
72959 |
72973 |
72977 |
72997 |
73009 |
73013 |
73019 |
73037 |
73039 |
73043 |
73061 |
73063 |
73079 |
73091 |
73121 |
73127 |
73133 |
73141 |
73181 |
73189 |
73237 |
73243 |
73259 |
73277 |
73291 |
73303 |
73309 |
73327 |
73331 |
73351 |
73361 |
73363 |
73369 |
73379 |
73387 |
73417 |
73421 |
73433 |
73453 |
73459 |
73471 |
73477 |
73483 |
73517 |
73523 |
73529 |
73547 |
73553 |
73561 |
73571 |
73583 |
73589 |
73597 |
73607 |
73609 |
73613 |
73637 |
73643 |
73651 |
73673 |
73679 |
73681 |
73693 |
73699 |
73709 |
73721 |
73727 |
73751 |
73757 |
73771 |
73783 |
73819 |
73823 |
73847 |
73849 |
73859 |
73867 |
73877 |
73883 |
73897 |
73907 |
73939 |
73943 |
73951 |
73961 |
73973 |
73999 |
74017 |
74021 |
74027 |
74047 |
74051 |
74071 |
74077 |
74093 |
74099 |
74101 |
74131 |
74143 |
74149 |
74159 |
74161 |
74167 |
74177 |
74189 |
74197 |
74201 |
74203 |
74209 |
74219 |
74231 |
74257 |
74279 |
74287 |
74293 |
74297 |
74311 |
74317 |
74323 |
74353 |
74357 |
74363 |
74377 |
74381 |
74383 |
74411 |
74413 |
74419 |
74441 |
74449 |
74453 |
74471 |
74489 |
74507 |
74509 |
74521 |
74527 |
74531 |
74551 |
74561 |
74567 |
74573 |
74587 |
74597 |
74609 |
74611 |
74623 |
74653 |
74687 |
74699 |
74707 |
74713 |
74717 |
74719 |
74729 |
74731 |
74747 |
74759 |
74761 |
74771 |
74779 |
74797 |
74821 |
74827 |
74831 |
74843 |
74857 |
74861 |
74869 |
74873 |
74887 |
74891 |
74897 |
74903 |
74923 |
74929 |
74933 |
74941 |
74959 |
75011 |
75013 |
75017 |
75029 |
75037 |
75041 |
75079 |
75083 |
75109 |
75133 |
75149 |
75161 |
75167 |
75169 |
75181 |
75193 |
75209 |
75211 |
75217 |
75223 |
75227 |
75239 |
75253 |
75269 |
75277 |
75289 |
75307 |
75323 |
75329 |
75337 |
75347 |
75353 |
75367 |
75377 |
75389 |
75391 |
75401 |
75403 |
75407 |
75431 |
75437 |
75479 |
75503 |
75511 |
75521 |
75527 |
75533 |
75539 |
75541 |
75553 |
75557 |
75571 |
75577 |
75583 |
75611 |
75617 |
75619 |
75629 |
75641 |
75653 |
75659 |
75679 |
75683 |
75689 |
75703 |
75707 |
75709 |
75721 |
75731 |
75743 |
75767 |
75773 |
75781 |
75787 |
75793 |
75797 |
75821 |
75833 |
75853 |
75869 |
75883 |
75913 |
75931 |
75937 |
75941 |
75967 |
75979 |
75983 |
75989 |
75991 |
75997 |
76001 |
76003 |
76031 |
76039 |
76079 |
76081 |
76091 |
76099 |
76103 |
76123 |
76129 |
76147 |
76157 |
76159 |
76163 |
76207 |
76213 |
76231 |
76243 |
76249 |
76253 |
76259 |
76261 |
76283 |
76289 |
76303 |
76333 |
76343 |
76367 |
76369 |
76379 |
76387 |
76403 |
76421 |
76423 |
76441 |
76463 |
76471 |
76481 |
76487 |
76493 |
76507 |
76511 |
76519 |
76537 |
76541 |
76543 |
76561 |
76579 |
76597 |
76603 |
76607 |
76631 |
76649 |
76651 |
76667 |
76673 |
76679 |
76697 |
76717 |
76733 |
76753 |
76757 |
76771 |
76777 |
76781 |
76801 |
76819 |
76829 |
76831 |
76837 |
76847 |
76871 |
76873 |
76883 |
76907 |
76913 |
76919 |
76943 |
76949 |
76961 |
76963 |
76991 |
77003 |
77017 |
77023 |
77029 |
77041 |
77047 |
77069 |
77081 |
77093 |
77101 |
77137 |
77141 |
77153 |
77167 |
77171 |
77191 |
77201 |
77213 |
77237 |
77239 |
77243 |
77249 |
77261 |
77263 |
77267 |
77269 |
77279 |
77291 |
77317 |
77323 |
77339 |
77347 |
77351 |
77359 |
77369 |
77377 |
77383 |
77417 |
77419 |
77431 |
77447 |
77471 |
77477 |
77479 |
77489 |
77491 |
77509 |
77513 |
77521 |
77527 |
77543 |
77549 |
77551 |
77557 |
77563 |
77569 |
77573 |
77587 |
77591 |
77611 |
77617 |
77621 |
77641 |
77647 |
77659 |
77681 |
77687 |
77689 |
77699 |
77711 |
77713 |
77719 |
77723 |
77731 |
77743 |
77747 |
77761 |
77773 |
77783 |
77797 |
77801 |
77813 |
77839 |
77849 |
77863 |
77867 |
77893 |
77899 |
77929 |
77933 |
77951 |
77969 |
77977 |
77983 |
77999 |
78007 |
78017 |
78031 |
78041 |
78049 |
78059 |
78079 |
78101 |
78121 |
78137 |
78139 |
78157 |
78163 |
78167 |
78173 |
78179 |
78191 |
78193 |
78203 |
78229 |
78233 |
78241 |
78259 |
78277 |
78283 |
78301 |
78307 |
78311 |
78317 |
78341 |
78347 |
78367 |
78401 |
78427 |
78437 |
78439 |
78467 |
78479 |
78487 |
78497 |
78509 |
78511 |
78517 |
78539 |
78541 |
78553 |
78569 |
78571 |
78577 |
78583 |
78593 |
78607 |
78623 |
78643 |
78649 |
78653 |
78691 |
78697 |
78707 |
78713 |
78721 |
78737 |
78779 |
78781 |
78787 |
78791 |
78797 |
78803 |
78809 |
78823 |
78839 |
78853 |
78857 |
78877 |
78887 |
78889 |
78893 |
78901 |
78919 |
78929 |
78941 |
78977 |
78979 |
78989 |
79031 |
79039 |
79043 |
79063 |
79087 |
79103 |
79111 |
79133 |
79139 |
79147 |
79151 |
79153 |
79159 |
79181 |
79187 |
79193 |
79201 |
79229 |
79231 |
79241 |
79259 |
79273 |
79279 |
79283 |
79301 |
79309 |
79319 |
79333 |
79337 |
79349 |
79357 |
79367 |
79379 |
79393 |
79397 |
79399 |
79411 |
79423 |
79427 |
79433 |
79451 |
79481 |
79493 |
79531 |
79537 |
79549 |
79559 |
79561 |
79579 |
79589 |
79601 |
79609 |
79613 |
79621 |
79627 |
79631 |
79633 |
79657 |
79669 |
79687 |
79691 |
79693 |
79697 |
79699 |
79757 |
79769 |
79777 |
79801 |
79811 |
79813 |
79817 |
79823 |
79829 |
79841 |
79843 |
79847 |
79861 |
79867 |
79873 |
79889 |
79901 |
79903 |
79907 |
79939 |
79943 |
79967 |
79973 |
79979 |
79987 |
79997 |
79999 |
80021 |
80039 |
80051 |
80071 |
80077 |
80107 |
80111 |
80141 |
80147 |
80149 |
80153 |
80167 |
80173 |
80177 |
80191 |
80207 |
80209 |
80221 |
80231 |
80233 |
80239 |
80251 |
80263 |
80273 |
80279 |
80287 |
80309 |
80317 |
80329 |
80341 |
80347 |
80363 |
80369 |
80387 |
80407 |
80429 |
80447 |
80449 |
80471 |
80473 |
80489 |
80491 |
80513 |
80527 |
80537 |
80557 |
80567 |
80599 |
80603 |
80611 |
80621 |
80627 |
80629 |
80651 |
80657 |
80669 |
80671 |
80677 |
80681 |
80683 |
80687 |
80701 |
80713 |
80737 |
80747 |
80749 |
80761 |
80777 |
80779 |
80783 |
80789 |
80803 |
80809 |
80819 |
80831 |
80833 |
80849 |
80863 |
80897 |
80909 |
80911 |
80917 |
80923 |
80929 |
80933 |
80953 |
80963 |
80989 |
81001 |
81013 |
81017 |
81019 |
81023 |
81031 |
81041 |
81043 |
81047 |
81049 |
81071 |
81077 |
81083 |
81097 |
81101 |
81119 |
81131 |
81157 |
81163 |
81173 |
81181 |
81197 |
81199 |
81203 |
81223 |
81233 |
81239 |
81281 |
81283 |
81293 |
81299 |
81307 |
81331 |
81343 |
81349 |
81353 |
81359 |
81371 |
81373 |
81401 |
81409 |
81421 |
81439 |
81457 |
81463 |
81509 |
81517 |
81527 |
81533 |
81547 |
81551 |
81553 |
81559 |
81563 |
81569 |
81611 |
81619 |
81629 |
81637 |
81647 |
81649 |
81667 |
81671 |
81677 |
81689 |
81701 |
81703 |
81707 |
81727 |
81737 |
81749 |
81761 |
81769 |
81773 |
81799 |
81817 |
81839 |
81847 |
81853 |
81869 |
81883 |
81899 |
81901 |
81919 |
81929 |
81931 |
81937 |
81943 |
81953 |
81967 |
81971 |
81973 |
82003 |
82007 |
82009 |
82013 |
82021 |
82031 |
82037 |
82039 |
82051 |
82067 |
82073 |
82129 |
82139 |
82141 |
82153 |
82163 |
82171 |
82183 |
82189 |
82193 |
82207 |
82217 |
82219 |
82223 |
82231 |
82237 |
82241 |
82261 |
82267 |
82279 |
82301 |
82307 |
82339 |
82349 |
82351 |
82361 |
82373 |
82387 |
82393 |
82421 |
82457 |
82463 |
82469 |
82471 |
82483 |
82487 |
82493 |
82499 |
82507 |
82529 |
82531 |
82549 |
82559 |
82561 |
82567 |
82571 |
82591 |
82601 |
82609 |
82613 |
82619 |
82633 |
82651 |
82657 |
82699 |
82721 |
82723 |
82727 |
82729 |
82757 |
82759 |
82763 |
82781 |
82787 |
82793 |
82799 |
82811 |
82813 |
82837 |
82847 |
82883 |
82889 |
82891 |
82903 |
82913 |
82939 |
82963 |
82981 |
82997 |
83003 |
83009 |
83023 |
83047 |
83059 |
83063 |
83071 |
83077 |
83089 |
83093 |
83101 |
83117 |
83137 |
83177 |
83203 |
83207 |
83219 |
83221 |
83227 |
83231 |
83233 |
83243 |
83257 |
83267 |
83269 |
83273 |
83299 |
83311 |
83339 |
83341 |
83357 |
83383 |
83389 |
83399 |
83401 |
83407 |
83417 |
83423 |
83431 |
83437 |
83443 |
83449 |
83459 |
83471 |
83477 |
83497 |
83537 |
83557 |
83561 |
83563 |
83579 |
83591 |
83597 |
83609 |
83617 |
83621 |
83639 |
83641 |
83653 |
83663 |
83689 |
83701 |
83717 |
83719 |
83737 |
83761 |
83773 |
83777 |
83791 |
83813 |
83833 |
83843 |
83857 |
83869 |
83873 |
83891 |
83903 |
83911 |
83921 |
83933 |
83939 |
83969 |
83983 |
83987 |
84011 |
84017 |
84047 |
84053 |
84059 |
84061 |
84067 |
84089 |
84121 |
84127 |
84131 |
84137 |
84143 |
84163 |
84179 |
84181 |
84191 |
84199 |
84211 |
84221 |
84223 |
84229 |
84239 |
84247 |
84263 |
84299 |
84307 |
84313 |
84317 |
84319 |
84347 |
84349 |
84377 |
84389 |
84391 |
84401 |
84407 |
84421 |
84431 |
84437 |
84443 |
84449 |
84457 |
84463 |
84467 |
84481 |
84499 |
84503 |
84509 |
84521 |
84523 |
84533 |
84551 |
84559 |
84589 |
84629 |
84631 |
84649 |
84653 |
84659 |
84673 |
84691 |
84697 |
84701 |
84713 |
84719 |
84731 |
84737 |
84751 |
84761 |
84787 |
84793 |
84809 |
84811 |
84827 |
84857 |
84859 |
84869 |
84871 |
84913 |
84919 |
84947 |
84961 |
84967 |
84977 |
84979 |
84991 |
85009 |
85021 |
85027 |
85037 |
85049 |
85061 |
85081 |
85087 |
85091 |
85093 |
85103 |
85109 |
85121 |
85133 |
85147 |
85159 |
85193 |
85199 |
85201 |
85213 |
85223 |
85229 |
85237 |
85243 |
85247 |
85259 |
85297 |
85303 |
85313 |
85331 |
85333 |
85361 |
85363 |
85369 |
85381 |
85411 |
85427 |
85429 |
85439 |
85447 |
85451 |
85453 |
85469 |
85487 |
85513 |
85517 |
85523 |
85531 |
85549 |
85571 |
85577 |
85597 |
85601 |
85607 |
85619 |
85621 |
85627 |
85639 |
85643 |
85661 |
85667 |
85669 |
85691 |
85703 |
85711 |
85717 |
85733 |
85751 |
85781 |
85793 |
85817 |
85819 |
85829 |
85831 |
85837 |
85843 |
85847 |
85853 |
85889 |
85903 |
85909 |
85931 |
85933 |
85991 |
85999 |
86011 |
86017 |
86027 |
86029 |
86069 |
86077 |
86083 |
86111 |
86113 |
86117 |
86131 |
86137 |
86143 |
86161 |
86171 |
86179 |
86183 |
86197 |
86201 |
86209 |
86239 |
86243 |
86249 |
86257 |
86263 |
86269 |
86287 |
86291 |
86293 |
86297 |
86311 |
86323 |
86341 |
86351 |
86353 |
86357 |
86369 |
86371 |
86381 |
86389 |
86399 |
86413 |
86423 |
86441 |
86453 |
86461 |
86467 |
86477 |
86491 |
86501 |
86509 |
86531 |
86533 |
86539 |
86561 |
86573 |
86579 |
86587 |
86599 |
86627 |
86629 |
86677 |
86689 |
86693 |
86711 |
86719 |
86729 |
86743 |
86753 |
86767 |
86771 |
86783 |
86813 |
86837 |
86843 |
86851 |
86857 |
86861 |
86869 |
86923 |
86927 |
86929 |
86939 |
86951 |
86959 |
86969 |
86981 |
86993 |
87011 |
87013 |
87037 |
87041 |
87049 |
87071 |
87083 |
87103 |
87107 |
87119 |
87121 |
87133 |
87149 |
87151 |
87179 |
87181 |
87187 |
87211 |
87221 |
87223 |
87251 |
87253 |
87257 |
87277 |
87281 |
87293 |
87299 |
87313 |
87317 |
87323 |
87337 |
87359 |
87383 |
87403 |
87407 |
87421 |
87427 |
87433 |
87443 |
87473 |
87481 |
87491 |
87509 |
87511 |
87517 |
87523 |
87539 |
87541 |
87547 |
87553 |
87557 |
87559 |
87583 |
87587 |
87589 |
87613 |
87623 |
87629 |
87631 |
87641 |
87643 |
87649 |
87671 |
87679 |
87683 |
87691 |
87697 |
87701 |
87719 |
87721 |
87739 |
87743 |
87751 |
87767 |
87793 |
87797 |
87803 |
87811 |
87833 |
87853 |
87869 |
87877 |
87881 |
87887 |
87911 |
87917 |
87931 |
87943 |
87959 |
87961 |
87973 |
87977 |
87991 |
88001 |
88003 |
88007 |
88019 |
88037 |
88069 |
88079 |
88093 |
88117 |
88129 |
88169 |
88177 |
88211 |
88223 |
88237 |
88241 |
88259 |
88261 |
88289 |
88301 |
88321 |
88327 |
88337 |
88339 |
88379 |
88397 |
88411 |
88423 |
88427 |
88463 |
88469 |
88471 |
88493 |
88499 |
88513 |
88523 |
88547 |
88589 |
88591 |
88607 |
88609 |
88643 |
88651 |
88657 |
88661 |
88663 |
88667 |
88681 |
88721 |
88729 |
88741 |
88747 |
88771 |
88789 |
88793 |
88799 |
88801 |
88807 |
88811 |
88813 |
88817 |
88819 |
88843 |
88853 |
88861 |
88867 |
88873 |
88883 |
88897 |
88903 |
88919 |
88937 |
88951 |
88969 |
88993 |
88997 |
89003 |
89009 |
89017 |
89021 |
89041 |
89051 |
89057 |
89069 |
89071 |
89083 |
89087 |
89101 |
89107 |
89113 |
89119 |
89123 |
89137 |
89153 |
89189 |
89203 |
89209 |
89213 |
89227 |
89231 |
89237 |
89261 |
89269 |
89273 |
89293 |
89303 |
89317 |
89329 |
89363 |
89371 |
89381 |
89387 |
89393 |
89399 |
89413 |
89417 |
89431 |
89443 |
89449 |
89459 |
89477 |
89491 |
89501 |
89513 |
89519 |
89521 |
89527 |
89533 |
89561 |
89563 |
89567 |
89591 |
89597 |
89599 |
89603 |
89611 |
89627 |
89633 |
89653 |
89657 |
89659 |
89669 |
89671 |
89681 |
89689 |
89753 |
89759 |
89767 |
89779 |
89783 |
89797 |
89809 |
89819 |
89821 |
89833 |
89839 |
89849 |
89867 |
89891 |
89897 |
89899 |
89909 |
89917 |
89923 |
89939 |
89959 |
89963 |
89977 |
89983 |
89989 |
90001 |
90007 |
90011 |
90017 |
90019 |
90023 |
90031 |
90053 |
90059 |
90067 |
90071 |
90073 |
90089 |
90107 |
90121 |
90127 |
90149 |
90163 |
90173 |
90187 |
90191 |
90197 |
90199 |
90203 |
90217 |
90227 |
90239 |
90247 |
90263 |
90271 |
90281 |
90289 |
90313 |
90353 |
90359 |
90371 |
90373 |
90379 |
90397 |
90401 |
90403 |
90407 |
90437 |
90439 |
90469 |
90473 |
90481 |
90499 |
90511 |
90523 |
90527 |
90529 |
90533 |
90547 |
90583 |
90599 |
90617 |
90619 |
90631 |
90641 |
90647 |
90659 |
90677 |
90679 |
90697 |
90703 |
90709 |
90731 |
90749 |
90787 |
90793 |
90803 |
90821 |
90823 |
90833 |
90841 |
90847 |
90863 |
90887 |
90901 |
90907 |
90911 |
90917 |
90931 |
90947 |
90971 |
90977 |
90989 |
90997 |
91009 |
91019 |
91033 |
91079 |
91081 |
91097 |
91099 |
91121 |
91127 |
91129 |
91139 |
91141 |
91151 |
91153 |
91159 |
91163 |
91183 |
91193 |
91199 |
91229 |
91237 |
91243 |
91249 |
91253 |
91283 |
91291 |
91297 |
91303 |
91309 |
91331 |
91367 |
91369 |
91373 |
91381 |
91387 |
91393 |
91397 |
91411 |
91423 |
91433 |
91453 |
91457 |
91459 |
91463 |
91493 |
91499 |
91513 |
91529 |
91541 |
91571 |
91573 |
91577 |
91583 |
91591 |
91621 |
91631 |
91639 |
91673 |
91691 |
91703 |
91711 |
91733 |
91753 |
91757 |
91771 |
91781 |
91801 |
91807 |
91811 |
91813 |
91823 |
91837 |
91841 |
91867 |
91873 |
91909 |
91921 |
91939 |
91943 |
91951 |
91957 |
91961 |
91967 |
91969 |
91997 |
92003 |
92009 |
92033 |
92041 |
92051 |
92077 |
92083 |
92107 |
92111 |
92119 |
92143 |
92153 |
92173 |
92177 |
92179 |
92189 |
92203 |
92219 |
92221 |
92227 |
92233 |
92237 |
92243 |
92251 |
92269 |
92297 |
92311 |
92317 |
92333 |
92347 |
92353 |
92357 |
92363 |
92369 |
92377 |
92381 |
92383 |
92387 |
92399 |
92401 |
92413 |
92419 |
92431 |
92459 |
92461 |
92467 |
92479 |
92489 |
92503 |
92507 |
92551 |
92557 |
92567 |
92569 |
92581 |
92593 |
92623 |
92627 |
92639 |
92641 |
92647 |
92657 |
92669 |
92671 |
92681 |
92683 |
92693 |
92699 |
92707 |
92717 |
92723 |
92737 |
92753 |
92761 |
92767 |
92779 |
92789 |
92791 |
92801 |
92809 |
92821 |
92831 |
92849 |
92857 |
92861 |
92863 |
92867 |
92893 |
92899 |
92921 |
92927 |
92941 |
92951 |
92957 |
92959 |
92987 |
92993 |
93001 |
93047 |
93053 |
93059 |
93077 |
93083 |
93089 |
93097 |
93103 |
93113 |
93131 |
93133 |
93139 |
93151 |
93169 |
93179 |
93187 |
93199 |
93229 |
93239 |
93241 |
93251 |
93253 |
93257 |
93263 |
93281 |
93283 |
93287 |
93307 |
93319 |
93323 |
93329 |
93337 |
93371 |
93377 |
93383 |
93407 |
93419 |
93427 |
93463 |
93479 |
93481 |
93487 |
93491 |
93493 |
93497 |
93503 |
93523 |
93529 |
93553 |
93557 |
93559 |
93563 |
93581 |
93601 |
93607 |
93629 |
93637 |
93683 |
93701 |
93703 |
93719 |
93739 |
93761 |
93763 |
93787 |
93809 |
93811 |
93827 |
93851 |
93871 |
93887 |
93889 |
93893 |
93901 |
93911 |
93913 |
93923 |
93937 |
93941 |
93949 |
93967 |
93971 |
93979 |
93983 |
93997 |
94007 |
94009 |
94033 |
94049 |
94057 |
94063 |
94079 |
94099 |
94109 |
94111 |
94117 |
94121 |
94151 |
94153 |
94169 |
94201 |
94207 |
94219 |
94229 |
94253 |
94261 |
94273 |
94291 |
94307 |
94309 |
94321 |
94327 |
94331 |
94343 |
94349 |
94351 |
94379 |
94397 |
94399 |
94421 |
94427 |
94433 |
94439 |
94441 |
94447 |
94463 |
94477 |
94483 |
94513 |
94529 |
94531 |
94541 |
94543 |
94547 |
94559 |
94561 |
94573 |
94583 |
94597 |
94603 |
94613 |
94621 |
94649 |
94651 |
94687 |
94693 |
94709 |
94723 |
94727 |
94747 |
94771 |
94777 |
94781 |
94789 |
94793 |
94811 |
94819 |
94823 |
94837 |
94841 |
94847 |
94849 |
94873 |
94889 |
94903 |
94907 |
94933 |
94949 |
94951 |
94961 |
94993 |
94999 |
95003 |
95009 |
95021 |
95027 |
95063 |
95071 |
95083 |
95087 |
95089 |
95093 |
95101 |
95107 |
95111 |
95131 |
95143 |
95153 |
95177 |
95189 |
95191 |
95203 |
95213 |
95219 |
95231 |
95233 |
95239 |
95257 |
95261 |
95267 |
95273 |
95279 |
95287 |
95311 |
95317 |
95327 |
95339 |
95369 |
95383 |
95393 |
95401 |
95413 |
95419 |
95429 |
95441 |
95443 |
95461 |
95467 |
95471 |
95479 |
95483 |
95507 |
95527 |
95531 |
95539 |
95549 |
95561 |
95569 |
95581 |
95597 |
95603 |
95617 |
95621 |
95629 |
95633 |
95651 |
95701 |
95707 |
95713 |
95717 |
95723 |
95731 |
95737 |
95747 |
95773 |
95783 |
95789 |
95791 |
95801 |
95803 |
95813 |
95819 |
95857 |
95869 |
95873 |
95881 |
95891 |
95911 |
95917 |
95923 |
95929 |
95947 |
95957 |
95959 |
95971 |
95987 |
95989 |
96001 |
96013 |
96017 |
96043 |
96053 |
96059 |
96079 |
96097 |
96137 |
96149 |
96157 |
96167 |
96179 |
96181 |
96199 |
96211 |
96221 |
96223 |
96233 |
96259 |
96263 |
96269 |
96281 |
96289 |
96293 |
96323 |
96329 |
96331 |
96337 |
96353 |
96377 |
96401 |
96419 |
96431 |
96443 |
96451 |
96457 |
96461 |
96469 |
96479 |
96487 |
96493 |
96497 |
96517 |
96527 |
96553 |
96557 |
96581 |
96587 |
96589 |
96601 |
96643 |
96661 |
96667 |
96671 |
96697 |
96703 |
96731 |
96737 |
96739 |
96749 |
96757 |
96763 |
96769 |
96779 |
96787 |
96797 |
96799 |
96821 |
96823 |
96827 |
96847 |
96851 |
96857 |
96893 |
96907 |
96911 |
96931 |
96953 |
96959 |
96973 |
96979 |
96989 |
96997 |
97001 |
97003 |
97007 |
97021 |
97039 |
97073 |
97081 |
97103 |
97117 |
97127 |
97151 |
97157 |
97159 |
97169 |
97171 |
97177 |
97187 |
97213 |
97231 |
97241 |
97259 |
97283 |
97301 |
97303 |
97327 |
97367 |
97369 |
97373 |
97379 |
97381 |
97387 |
97397 |
97423 |
97429 |
97441 |
97453 |
97459 |
97463 |
97499 |
97501 |
97511 |
97523 |
97547 |
97549 |
97553 |
97561 |
97571 |
97577 |
97579 |
97583 |
97607 |
97609 |
97613 |
97649 |
97651 |
97673 |
97687 |
97711 |
97729 |
97771 |
97777 |
97787 |
97789 |
97813 |
97829 |
97841 |
97843 |
97847 |
97849 |
97859 |
97861 |
97871 |
97879 |
97883 |
97919 |
97927 |
97931 |
97943 |
97961 |
97967 |
97973 |
97987 |
98009 |
98011 |
98017 |
98041 |
98047 |
98057 |
98081 |
98101 |
98123 |
98129 |
98143 |
98179 |
98207 |
98213 |
98221 |
98227 |
98251 |
98257 |
98269 |
98297 |
98299 |
98317 |
98321 |
98323 |
98327 |
98347 |
98369 |
98377 |
98387 |
98389 |
98407 |
98411 |
98419 |
98429 |
98443 |
98453 |
98459 |
98467 |
98473 |
98479 |
98491 |
98507 |
98519 |
98533 |
98543 |
98561 |
98563 |
98573 |
98597 |
98621 |
98627 |
98639 |
98641 |
98663 |
98669 |
98689 |
98711 |
98713 |
98717 |
98729 |
98731 |
98737 |
98773 |
98779 |
98801 |
98807 |
98809 |
98837 |
98849 |
98867 |
98869 |
98873 |
98887 |
98893 |
98897 |
98899 |
98909 |
98911 |
98927 |
98929 |
98939 |
98947 |
98953 |
98963 |
98981 |
98993 |
98999 |
99013 |
99017 |
99023 |
99041 |
99053 |
99079 |
99083 |
99089 |
99103 |
99109 |
99119 |
99131 |
99133 |
99137 |
99139 |
99149 |
99173 |
99181 |
99191 |
99223 |
99233 |
99241 |
99251 |
99257 |
99259 |
99277 |
99289 |
99317 |
99347 |
99349 |
99367 |
99371 |
99377 |
99391 |
99397 |
99401 |
99409 |
99431 |
99439 |
99469 |
99487 |
99497 |
99523 |
99527 |
99529 |
99551 |
99559 |
99563 |
99571 |
99577 |
99581 |
99607 |
99611 |
99623 |
99643 |
99661 |
99667 |
99679 |
99689 |
99707 |
99709 |
99713 |
99719 |
99721 |
99733 |
99761 |
99767 |
99787 |
99793 |
99809 |
99817 |
99823 |
99829 |
99833 |
99839 |
99859 |
99871 |
99877 |
99881 |
99901 |
99907 |
99923 |
99929 |
99961 |
99971 |
99989 |
99991 |
100003 |
100019 |
100043 |
100049 |
100057 |
100069 |
100103 |
100109 |
100129 |
100151 |
100153 |
100169 |
100183 |
100189 |
100193 |
100207 |
100213 |
100237 |
100267 |
100271 |
100279 |
100291 |
100297 |
100313 |
100333 |
100343 |
100357 |
100361 |
100363 |
100379 |
100391 |
100393 |
100403 |
100411 |
100417 |
100447 |
100459 |
100469 |
100483 |
100493 |
100501 |
100511 |
100517 |
100519 |
100523 |
100537 |
100547 |
100549 |
100559 |
100591 |
100609 |
100613 |
100621 |
100649 |
100669 |
100673 |
100693 |
100699 |
100703 |
100733 |
100741 |
100747 |
100769 |
100787 |
100799 |
100801 |
100811 |
100823 |
100829 |
100847 |
100853 |
100907 |
100913 |
100927 |
100931 |
100937 |
100943 |
100957 |
100981 |
100987 |
100999 |
101009 |
101021 |
101027 |
101051 |
101063 |
101081 |
101089 |
101107 |
101111 |
101113 |
101117 |
101119 |
101141 |
101149 |
101159 |
101161 |
101173 |
101183 |
101197 |
101203 |
101207 |
101209 |
101221 |
101267 |
101273 |
101279 |
101281 |
101287 |
101293 |
101323 |
101333 |
101341 |
101347 |
101359 |
101363 |
101377 |
101383 |
101399 |
101411 |
101419 |
101429 |
101449 |
101467 |
101477 |
101483 |
101489 |
101501 |
101503 |
101513 |
101527 |
101531 |
101533 |
101537 |
101561 |
101573 |
101581 |
101599 |
101603 |
101611 |
101627 |
101641 |
101653 |
101663 |
101681 |
101693 |
101701 |
101719 |
101723 |
101737 |
101741 |
101747 |
101749 |
101771 |
101789 |
101797 |
101807 |
101833 |
101837 |
101839 |
101863 |
101869 |
101873 |
101879 |
101891 |
101917 |
101921 |
101929 |
101939 |
101957 |
101963 |
101977 |
101987 |
101999 |
102001 |
102013 |
102019 |
102023 |
102031 |
102043 |
102059 |
102061 |
102071 |
102077 |
102079 |
102101 |
102103 |
102107 |
102121 |
102139 |
102149 |
102161 |
102181 |
102191 |
102197 |
102199 |
102203 |
102217 |
102229 |
102233 |
102241 |
102251 |
102253 |
102259 |
102293 |
102299 |
102301 |
102317 |
102329 |
102337 |
102359 |
102367 |
102397 |
102407 |
102409 |
102433 |
102437 |
102451 |
102461 |
102481 |
102497 |
102499 |
102503 |
102523 |
102533 |
102539 |
102547 |
102551 |
102559 |
102563 |
102587 |
102593 |
102607 |
102611 |
102643 |
102647 |
102653 |
102667 |
102673 |
102677 |
102679 |
102701 |
102761 |
102763 |
102769 |
102793 |
102797 |
102811 |
102829 |
102841 |
102859 |
102871 |
102877 |
102881 |
102911 |
102913 |
102929 |
102931 |
102953 |
102967 |
102983 |
103001 |
103007 |
103043 |
103049 |
103067 |
103069 |
103079 |
103087 |
103091 |
103093 |
103099 |
103123 |
103141 |
103171 |
103177 |
103183 |
103217 |
103231 |
103237 |
103289 |
103291 |
103307 |
103319 |
103333 |
103349 |
103357 |
103387 |
103391 |
103393 |
103399 |
103409 |
103421 |
103423 |
103451 |
103457 |
103471 |
103483 |
103511 |
103529 |
103549 |
103553 |
103561 |
103567 |
103573 |
103577 |
103583 |
103591 |
103613 |
103619 |
103643 |
103651 |
103657 |
103669 |
103681 |
103687 |
103699 |
103703 |
103723 |
103769 |
103787 |
103801 |
103811 |
103813 |
103837 |
103841 |
103843 |
103867 |
103889 |
103903 |
103913 |
103919 |
103951 |
103963 |
103967 |
103969 |
103979 |
103981 |
103991 |
103993 |
103997 |
104003 |
104009 |
104021 |
104033 |
104047 |
104053 |
104059 |
104087 |
104089 |
104107 |
104113 |
104119 |
104123 |
104147 |
104149 |
104161 |
104173 |
104179 |
104183 |
104207 |
104231 |
104233 |
104239 |
104243 |
104281 |
104287 |
104297 |
104309 |
104311 |
104323 |
104327 |
104347 |
104369 |
104381 |
104383 |
104393 |
104399 |
104417 |
104459 |
104471 |
104473 |
104479 |
104491 |
104513 |
104527 |
104537 |
104543 |
104549 |
104551 |
104561 |
104579 |
104593 |
104597 |
104623 |
104639 |
104651 |
104659 |
104677 |
104681 |
104683 |
104693 |
104701 |
104707 |
104711 |
104717 |
104723 |
104729 |
104743 |
104759 |
104761 |
104773 |
104779 |
104789 |
104801 |
104803 |
104827 |
104831 |
104849 |
104851 |
104869 |
104879 |
104891 |
104911 |
104917 |
104933 |
104947 |
104953 |
104959 |
104971 |
104987 |
104999 |
105019 |
105023 |
105031 |
105037 |
105071 |
105097 |
105107 |
105137 |
105143 |
105167 |
105173 |
105199 |
105211 |
105227 |
105229 |
105239 |
105251 |
105253 |
105263 |
105269 |
105277 |
105319 |
105323 |
105331 |
105337 |
105341 |
105359 |
105361 |
105367 |
105373 |
105379 |
105389 |
105397 |
105401 |
105407 |
105437 |
105449 |
105467 |
105491 |
105499 |
105503 |
105509 |
105517 |
105527 |
105529 |
105533 |
105541 |
105557 |
105563 |
105601 |
105607 |
105613 |
105619 |
105649 |
105653 |
105667 |
105673 |
105683 |
105691 |
105701 |
105727 |
105733 |
105751 |
105761 |
105767 |
105769 |
105817 |
105829 |
105863 |
105871 |
105883 |
105899 |
105907 |
105913 |
105929 |
105943 |
105953 |
105967 |
105971 |
105977 |
105983 |
105997 |
106013 |
106019 |
106031 |
106033 |
106087 |
106103 |
106109 |
106121 |
106123 |
106129 |
106163 |
106181 |
106187 |
106189 |
106207 |
106213 |
106217 |
106219 |
106243 |
106261 |
106273 |
106277 |
106279 |
106291 |
106297 |
106303 |
106307 |
106319 |
106321 |
106331 |
106349 |
106357 |
106363 |
106367 |
106373 |
106391 |
106397 |
106411 |
106417 |
106427 |
106433 |
106441 |
106451 |
106453 |
106487 |
106501 |
106531 |
106537 |
106541 |
106543 |
106591 |
106619 |
106621 |
106627 |
106637 |
106649 |
106657 |
106661 |
106663 |
106669 |
106681 |
106693 |
106699 |
106703 |
106721 |
106727 |
106739 |
106747 |
106751 |
106753 |
106759 |
106781 |
106783 |
106787 |
106801 |
106823 |
106853 |
106859 |
106861 |
106867 |
106871 |
106877 |
106903 |
106907 |
106921 |
106937 |
106949 |
106957 |
106961 |
106963 |
106979 |
106993 |
107021 |
107033 |
107053 |
107057 |
107069 |
107071 |
107077 |
107089 |
107099 |
107101 |
107119 |
107123 |
107137 |
107171 |
107183 |
107197 |
107201 |
107209 |
107227 |
107243 |
107251 |
107269 |
107273 |
107279 |
107309 |
107323 |
107339 |
107347 |
107351 |
107357 |
107377 |
107441 |
107449 |
107453 |
107467 |
107473 |
107507 |
107509 |
107563 |
107581 |
107599 |
107603 |
107609 |
107621 |
107641 |
107647 |
107671 |
107687 |
107693 |
107699 |
107713 |
107717 |
107719 |
107741 |
107747 |
107761 |
107773 |
107777 |
107791 |
107827 |
107837 |
107839 |
107843 |
107857 |
107867 |
107873 |
107881 |
107897 |
107903 |
107923 |
107927 |
107941 |
107951 |
107971 |
107981 |
107999 |
108007 |
108011 |
108013 |
108023 |
108037 |
108041 |
108061 |
108079 |
108089 |
108107 |
108109 |
108127 |
108131 |
108139 |
108161 |
108179 |
108187 |
108191 |
108193 |
108203 |
108211 |
108217 |
108223 |
108233 |
108247 |
108263 |
108271 |
108287 |
108289 |
108293 |
108301 |
108343 |
108347 |
108359 |
108377 |
108379 |
108401 |
108413 |
108421 |
108439 |
108457 |
108461 |
108463 |
108497 |
108499 |
108503 |
108517 |
108529 |
108533 |
108541 |
108553 |
108557 |
108571 |
108587 |
108631 |
108637 |
108643 |
108649 |
108677 |
108707 |
108709 |
108727 |
108739 |
108751 |
108761 |
108769 |
108791 |
108793 |
108799 |
108803 |
108821 |
108827 |
108863 |
108869 |
108877 |
108881 |
108883 |
108887 |
108893 |
108907 |
108917 |
108923 |
108929 |
108943 |
108947 |
108949 |
108959 |
108961 |
108967 |
108971 |
108991 |
109001 |
109013 |
109037 |
109049 |
109063 |
109073 |
109097 |
109103 |
109111 |
109121 |
109133 |
109139 |
109141 |
109147 |
109159 |
109169 |
109171 |
109199 |
109201 |
109211 |
109229 |
109253 |
109267 |
109279 |
109297 |
109303 |
109313 |
109321 |
109331 |
109357 |
109363 |
109367 |
109379 |
109387 |
109391 |
109397 |
109423 |
109433 |
109441 |
109451 |
109453 |
109469 |
109471 |
109481 |
109507 |
109517 |
109519 |
109537 |
109541 |
109547 |
109567 |
109579 |
109583 |
109589 |
109597 |
109609 |
109619 |
109621 |
109639 |
109661 |
109663 |
109673 |
109717 |
109721 |
109741 |
109751 |
109789 |
109793 |
109807 |
109819 |
109829 |
109831 |
109841 |
109843 |
109847 |
109849 |
109859 |
109873 |
109883 |
109891 |
109897 |
109903 |
109913 |
109919 |
109937 |
109943 |
109961 |
109987 |
110017 |
110023 |
110039 |
110051 |
110059 |
110063 |
110069 |
110083 |
110119 |
110129 |
110161 |
110183 |
110221 |
110233 |
110237 |
110251 |
110261 |
110269 |
110273 |
110281 |
110291 |
110311 |
110321 |
110323 |
110339 |
110359 |
110419 |
110431 |
110437 |
110441 |
110459 |
110477 |
110479 |
110491 |
110501 |
110503 |
110527 |
110533 |
110543 |
110557 |
110563 |
110567 |
110569 |
110573 |
110581 |
110587 |
110597 |
110603 |
110609 |
110623 |
110629 |
110641 |
110647 |
110651 |
110681 |
110711 |
110729 |
110731 |
110749 |
110753 |
110771 |
110777 |
110807 |
110813 |
110819 |
110821 |
110849 |
110863 |
110879 |
110881 |
110899 |
110909 |
110917 |
110921 |
110923 |
110927 |
110933 |
110939 |
110947 |
110951 |
110969 |
110977 |
110989 |
111029 |
111031 |
111043 |
111049 |
111053 |
111091 |
111103 |
111109 |
111119 |
111121 |
111127 |
111143 |
111149 |
111187 |
111191 |
111211 |
111217 |
111227 |
111229 |
111253 |
111263 |
111269 |
111271 |
111301 |
111317 |
111323 |
111337 |
111341 |
111347 |
111373 |
111409 |
111427 |
111431 |
111439 |
111443 |
111467 |
111487 |
111491 |
111493 |
111497 |
111509 |
111521 |
111533 |
111539 |
111577 |
111581 |
111593 |
111599 |
111611 |
111623 |
111637 |
111641 |
111653 |
111659 |
111667 |
111697 |
111721 |
111731 |
111733 |
111751 |
111767 |
111773 |
111779 |
111781 |
111791 |
111799 |
111821 |
111827 |
111829 |
111833 |
111847 |
111857 |
111863 |
111869 |
111871 |
111893 |
111913 |
111919 |
111949 |
111953 |
111959 |
111973 |
111977 |
111997 |
112019 |
112031 |
112061 |
112067 |
112069 |
112087 |
112097 |
112103 |
112111 |
112121 |
112129 |
112139 |
112153 |
112163 |
112181 |
112199 |
112207 |
112213 |
112223 |
112237 |
112241 |
112247 |
112249 |
112253 |
112261 |
112279 |
112289 |
112291 |
112297 |
112303 |
112327 |
112331 |
112337 |
112339 |
112349 |
112361 |
112363 |
112397 |
112403 |
112429 |
112459 |
112481 |
112501 |
112507 |
112543 |
112559 |
112571 |
112573 |
112577 |
112583 |
112589 |
112601 |
112603 |
112621 |
112643 |
112657 |
112663 |
112687 |
112691 |
112741 |
112757 |
112759 |
112771 |
112787 |
112799 |
112807 |
112831 |
112843 |
112859 |
112877 |
112901 |
112909 |
112913 |
112919 |
112921 |
112927 |
112939 |
112951 |
112967 |
112979 |
112997 |
113011 |
113017 |
113021 |
113023 |
113027 |
113039 |
113041 |
113051 |
113063 |
113081 |
113083 |
113089 |
113093 |
113111 |
113117 |
113123 |
113131 |
113143 |
113147 |
113149 |
113153 |
113159 |
113161 |
113167 |
113171 |
113173 |
113177 |
113189 |
113209 |
113213 |
113227 |
113233 |
113279 |
113287 |
113327 |
113329 |
113341 |
113357 |
113359 |
113363 |
113371 |
113381 |
113383 |
113417 |
113437 |
113453 |
113467 |
113489 |
113497 |
113501 |
113513 |
113537 |
113539 |
113557 |
113567 |
113591 |
113621 |
113623 |
113647 |
113657 |
113683 |
113717 |
113719 |
113723 |
113731 |
113749 |
113759 |
113761 |
113777 |
113779 |
113783 |
113797 |
113809 |
113819 |
113837 |
113843 |
113891 |
113899 |
113903 |
113909 |
113921 |
113933 |
113947 |
113957 |
113963 |
113969 |
113983 |
113989 |
114001 |
114013 |
114031 |
114041 |
114043 |
114067 |
114073 |
114077 |
114083 |
114089 |
114113 |
114143 |
114157 |
114161 |
114167 |
114193 |
114197 |
114199 |
114203 |
114217 |
114221 |
114229 |
114259 |
114269 |
114277 |
114281 |
114299 |
114311 |
114319 |
114329 |
114343 |
114371 |
114377 |
114407 |
114419 |
114451 |
114467 |
114473 |
114479 |
114487 |
114493 |
114547 |
114553 |
114571 |
114577 |
114593 |
114599 |
114601 |
114613 |
114617 |
114641 |
114643 |
114649 |
114659 |
114661 |
114671 |
114679 |
114689 |
114691 |
114713 |
114743 |
114749 |
114757 |
114761 |
114769 |
114773 |
114781 |
114797 |
114799 |
114809 |
114827 |
114833 |
114847 |
114859 |
114883 |
114889 |
114901 |
114913 |
114941 |
114967 |
114973 |
114997 |
115001 |
115013 |
115019 |
115021 |
115057 |
115061 |
115067 |
115079 |
115099 |
115117 |
115123 |
115127 |
115133 |
115151 |
115153 |
115163 |
115183 |
115201 |
115211 |
115223 |
115237 |
115249 |
115259 |
115279 |
115301 |
115303 |
115309 |
115319 |
115321 |
115327 |
115331 |
115337 |
115343 |
115361 |
115363 |
115399 |
115421 |
115429 |
115459 |
115469 |
115471 |
115499 |
115513 |
115523 |
115547 |
115553 |
115561 |
115571 |
115589 |
115597 |
115601 |
115603 |
115613 |
115631 |
115637 |
115657 |
115663 |
115679 |
115693 |
115727 |
115733 |
115741 |
115751 |
115757 |
115763 |
115769 |
115771 |
115777 |
115781 |
115783 |
115793 |
115807 |
115811 |
115823 |
115831 |
115837 |
115849 |
115853 |
115859 |
115861 |
115873 |
115877 |
115879 |
115883 |
115891 |
115901 |
115903 |
115931 |
115933 |
115963 |
115979 |
115981 |
115987 |
116009 |
116027 |
116041 |
116047 |
116089 |
116099 |
116101 |
116107 |
116113 |
116131 |
116141 |
116159 |
116167 |
116177 |
116189 |
116191 |
116201 |
116239 |
116243 |
116257 |
116269 |
116273 |
116279 |
116293 |
116329 |
116341 |
116351 |
116359 |
116371 |
116381 |
116387 |
116411 |
116423 |
116437 |
116443 |
116447 |
116461 |
116471 |
116483 |
116491 |
116507 |
116531 |
116533 |
116537 |
116539 |
116549 |
116579 |
116593 |
116639 |
116657 |
116663 |
116681 |
116687 |
116689 |
116707 |
116719 |
116731 |
116741 |
116747 |
116789 |
116791 |
116797 |
116803 |
116819 |
116827 |
116833 |
116849 |
116867 |
116881 |
116903 |
116911 |
116923 |
116927 |
116929 |
116933 |
116953 |
116959 |
116969 |
116981 |
116989 |
116993 |
117017 |
117023 |
117037 |
117041 |
117043 |
117053 |
117071 |
117101 |
117109 |
117119 |
117127 |
117133 |
117163 |
117167 |
117191 |
117193 |
117203 |
117209 |
117223 |
117239 |
117241 |
117251 |
117259 |
117269 |
117281 |
117307 |
117319 |
117329 |
117331 |
117353 |
117361 |
117371 |
117373 |
117389 |
117413 |
117427 |
117431 |
117437 |
117443 |
117497 |
117499 |
117503 |
117511 |
117517 |
117529 |
117539 |
117541 |
117563 |
117571 |
117577 |
117617 |
117619 |
117643 |
117659 |
117671 |
117673 |
117679 |
117701 |
117703 |
117709 |
117721 |
117727 |
117731 |
117751 |
117757 |
117763 |
117773 |
117779 |
117787 |
117797 |
117809 |
117811 |
117833 |
117839 |
117841 |
117851 |
117877 |
117881 |
117883 |
117889 |
117899 |
117911 |
117917 |
117937 |
117959 |
117973 |
117977 |
117979 |
117989 |
117991 |
118033 |
118037 |
118043 |
118051 |
118057 |
118061 |
118081 |
118093 |
118127 |
118147 |
118163 |
118169 |
118171 |
118189 |
118211 |
118213 |
118219 |
118247 |
118249 |
118253 |
118259 |
118273 |
118277 |
118297 |
118343 |
118361 |
118369 |
118373 |
118387 |
118399 |
118409 |
118411 |
118423 |
118429 |
118453 |
118457 |
118463 |
118471 |
118493 |
118529 |
118543 |
118549 |
118571 |
118583 |
118589 |
118603 |
118619 |
118621 |
118633 |
118661 |
118669 |
118673 |
118681 |
118687 |
118691 |
118709 |
118717 |
118739 |
118747 |
118751 |
118757 |
118787 |
118799 |
118801 |
118819 |
118831 |
118843 |
118861 |
118873 |
118891 |
118897 |
118901 |
118903 |
118907 |
118913 |
118927 |
118931 |
118967 |
118973 |
119027 |
119033 |
119039 |
119047 |
119057 |
119069 |
119083 |
119087 |
119089 |
119099 |
119101 |
119107 |
119129 |
119131 |
119159 |
119173 |
119179 |
119183 |
119191 |
119227 |
119233 |
119237 |
119243 |
119267 |
119291 |
119293 |
119297 |
119299 |
119311 |
119321 |
119359 |
119363 |
119389 |
119417 |
119419 |
119429 |
119447 |
119489 |
119503 |
119513 |
119533 |
119549 |
119551 |
119557 |
119563 |
119569 |
119591 |
119611 |
119617 |
119627 |
119633 |
119653 |
119657 |
119659 |
119671 |
119677 |
119687 |
119689 |
119699 |
119701 |
119723 |
119737 |
119747 |
119759 |
119771 |
119773 |
119783 |
119797 |
119809 |
119813 |
119827 |
119831 |
119839 |
119849 |
119851 |
119869 |
119881 |
119891 |
119921 |
119923 |
119929 |
119953 |
119963 |
119971 |
119981 |
119983 |
119993 |
120011 |
120017 |
120041 |
120047 |
120049 |
120067 |
120077 |
120079 |
120091 |
120097 |
120103 |
120121 |
120157 |
120163 |
120167 |
120181 |
120193 |
120199 |
120209 |
120223 |
120233 |
120247 |
120277 |
120283 |
120293 |
120299 |
120319 |
120331 |
120349 |
120371 |
120383 |
120391 |
120397 |
120401 |
120413 |
120427 |
120431 |
120473 |
120503 |
120511 |
120539 |
120551 |
120557 |
120563 |
120569 |
120577 |
120587 |
120607 |
120619 |
120623 |
120641 |
120647 |
120661 |
120671 |
120677 |
120689 |
120691 |
120709 |
120713 |
120721 |
120737 |
120739 |
120749 |
120763 |
120767 |
120779 |
120811 |
120817 |
120823 |
120829 |
120833 |
120847 |
120851 |
120863 |
120871 |
120877 |
120889 |
120899 |
120907 |
120917 |
120919 |
120929 |
120937 |
120941 |
120943 |
120947 |
120977 |
120997 |
121001 |
121007 |
121013 |
121019 |
121021 |
121039 |
121061 |
121063 |
121067 |
121081 |
121123 |
121139 |
121151 |
121157 |
121169 |
121171 |
121181 |
121189 |
121229 |
121259 |
121267 |
121271 |
121283 |
121291 |
121309 |
121313 |
121321 |
121327 |
121333 |
121343 |
121349 |
121351 |
121357 |
121367 |
121369 |
121379 |
121403 |
121421 |
121439 |
121441 |
121447 |
121453 |
121469 |
121487 |
121493 |
121501 |
121507 |
121523 |
121531 |
121547 |
121553 |
121559 |
121571 |
121577 |
121579 |
121591 |
121607 |
121609 |
121621 |
121631 |
121633 |
121637 |
121661 |
121687 |
121697 |
121711 |
121721 |
121727 |
121763 |
121787 |
121789 |
121843 |
121853 |
121867 |
121883 |
121889 |
121909 |
121921 |
121931 |
121937 |
121949 |
121951 |
121963 |
121967 |
121993 |
121997 |
122011 |
122021 |
122027 |
122029 |
122033 |
122039 |
122041 |
122051 |
122053 |
122069 |
122081 |
122099 |
122117 |
122131 |
122147 |
122149 |
122167 |
122173 |
122201 |
122203 |
122207 |
122209 |
122219 |
122231 |
122251 |
122263 |
122267 |
122273 |
122279 |
122299 |
122321 |
122323 |
122327 |
122347 |
122363 |
122387 |
122389 |
122393 |
122399 |
122401 |
122443 |
122449 |
122453 |
122471 |
122477 |
122489 |
122497 |
122501 |
122503 |
122509 |
122527 |
122533 |
122557 |
122561 |
122579 |
122597 |
122599 |
122609 |
122611 |
122651 |
122653 |
122663 |
122693 |
122701 |
122719 |
122741 |
122743 |
122753 |
122761 |
122777 |
122789 |
122819 |
122827 |
122833 |
122839 |
122849 |
122861 |
122867 |
122869 |
122887 |
122891 |
122921 |
122929 |
122939 |
122953 |
122957 |
122963 |
122971 |
123001 |
123007 |
123017 |
123031 |
123049 |
123059 |
123077 |
123083 |
123091 |
123113 |
123121 |
123127 |
123143 |
123169 |
123191 |
123203 |
123209 |
123217 |
123229 |
123239 |
123259 |
123269 |
123289 |
123307 |
123311 |
123323 |
123341 |
123373 |
123377 |
123379 |
123397 |
123401 |
123407 |
123419 |
123427 |
123433 |
123439 |
123449 |
123457 |
123479 |
123491 |
123493 |
123499 |
123503 |
123517 |
123527 |
123547 |
123551 |
123553 |
123581 |
123583 |
123593 |
123601 |
123619 |
123631 |
123637 |
123653 |
123661 |
123667 |
123677 |
123701 |
123707 |
123719 |
123727 |
123731 |
123733 |
123737 |
123757 |
123787 |
123791 |
123803 |
123817 |
123821 |
123829 |
123833 |
123853 |
123863 |
123887 |
123911 |
123923 |
123931 |
123941 |
123953 |
123973 |
123979 |
123983 |
123989 |
123997 |
124001 |
124021 |
124067 |
124087 |
124097 |
124121 |
124123 |
124133 |
124139 |
124147 |
124153 |
124171 |
124181 |
124183 |
124193 |
124199 |
124213 |
124231 |
124247 |
124249 |
124277 |
124291 |
124297 |
124301 |
124303 |
124309 |
124337 |
124339 |
124343 |
124349 |
124351 |
124363 |
124367 |
124427 |
124429 |
124433 |
124447 |
124459 |
124471 |
124477 |
124489 |
124493 |
124513 |
124529 |
124541 |
124543 |
124561 |
124567 |
124577 |
124601 |
124633 |
124643 |
124669 |
124673 |
124679 |
124693 |
124699 |
124703 |
124717 |
124721 |
124739 |
124753 |
124759 |
124769 |
124771 |
124777 |
124781 |
124783 |
124793 |
124799 |
124819 |
124823 |
124847 |
124853 |
124897 |
124907 |
124909 |
124919 |
124951 |
124979 |
124981 |
124987 |
124991 |
125003 |
125017 |
125029 |
125053 |
125063 |
125093 |
125101 |
125107 |
125113 |
125117 |
125119 |
125131 |
125141 |
125149 |
125183 |
125197 |
125201 |
125207 |
125219 |
125221 |
125231 |
125243 |
125261 |
125269 |
125287 |
125299 |
125303 |
125311 |
125329 |
125339 |
125353 |
125371 |
125383 |
125387 |
125399 |
125407 |
125423 |
125429 |
125441 |
125453 |
125471 |
125497 |
125507 |
125509 |
125527 |
125539 |
125551 |
125591 |
125597 |
125617 |
125621 |
125627 |
125639 |
125641 |
125651 |
125659 |
125669 |
125683 |
125687 |
125693 |
125707 |
125711 |
125717 |
125731 |
125737 |
125743 |
125753 |
125777 |
125789 |
125791 |
125803 |
125813 |
125821 |
125863 |
125887 |
125897 |
125899 |
125921 |
125927 |
125929 |
125933 |
125941 |
125959 |
125963 |
126001 |
126011 |
126013 |
126019 |
126023 |
126031 |
126037 |
126041 |
126047 |
126067 |
126079 |
126097 |
126107 |
126127 |
126131 |
126143 |
126151 |
126173 |
126199 |
126211 |
126223 |
126227 |
126229 |
126233 |
126241 |
126257 |
126271 |
126307 |
126311 |
126317 |
126323 |
126337 |
126341 |
126349 |
126359 |
126397 |
126421 |
126433 |
126443 |
126457 |
126461 |
126473 |
126481 |
126487 |
126491 |
126493 |
126499 |
126517 |
126541 |
126547 |
126551 |
126583 |
126601 |
126611 |
126613 |
126631 |
126641 |
126653 |
126683 |
126691 |
126703 |
126713 |
126719 |
126733 |
126739 |
126743 |
126751 |
126757 |
126761 |
126781 |
126823 |
126827 |
126839 |
126851 |
126857 |
126859 |
126913 |
126923 |
126943 |
126949 |
126961 |
126967 |
126989 |
127031 |
127033 |
127037 |
127051 |
127079 |
127081 |
127103 |
127123 |
127133 |
127139 |
127157 |
127163 |
127189 |
127207 |
127217 |
127219 |
127241 |
127247 |
127249 |
127261 |
127271 |
127277 |
127289 |
127291 |
127297 |
127301 |
127321 |
127331 |
127343 |
127363 |
127373 |
127399 |
127403 |
127423 |
127447 |
127453 |
127481 |
127487 |
127493 |
127507 |
127529 |
127541 |
127549 |
127579 |
127583 |
127591 |
127597 |
127601 |
127607 |
127609 |
127637 |
127643 |
127649 |
127657 |
127663 |
127669 |
127679 |
127681 |
127691 |
127703 |
127709 |
127711 |
127717 |
127727 |
127733 |
127739 |
127747 |
127763 |
127781 |
127807 |
127817 |
127819 |
127837 |
127843 |
127849 |
127859 |
127867 |
127873 |
127877 |
127913 |
127921 |
127931 |
127951 |
127973 |
127979 |
127997 |
128021 |
128033 |
128047 |
128053 |
128099 |
128111 |
128113 |
128119 |
128147 |
128153 |
128159 |
128173 |
128189 |
128201 |
128203 |
128213 |
128221 |
128237 |
128239 |
128257 |
128273 |
128287 |
128291 |
128311 |
128321 |
128327 |
128339 |
128341 |
128347 |
128351 |
128377 |
128389 |
128393 |
128399 |
128411 |
128413 |
128431 |
128437 |
128449 |
128461 |
128467 |
128473 |
128477 |
128483 |
128489 |
128509 |
128519 |
128521 |
128549 |
128551 |
128563 |
128591 |
128599 |
128603 |
128621 |
128629 |
128657 |
128659 |
128663 |
128669 |
128677 |
128683 |
128693 |
128717 |
128747 |
128749 |
128761 |
128767 |
128813 |
128819 |
128831 |
128833 |
128837 |
128857 |
128861 |
128873 |
128879 |
128903 |
128923 |
128939 |
128941 |
128951 |
128959 |
128969 |
128971 |
128981 |
128983 |
128987 |
128993 |
129001 |
129011 |
129023 |
129037 |
129049 |
129061 |
129083 |
129089 |
129097 |
129113 |
129119 |
129121 |
129127 |
129169 |
129187 |
129193 |
129197 |
129209 |
129221 |
129223 |
129229 |
129263 |
129277 |
129281 |
129287 |
129289 |
129293 |
129313 |
129341 |
129347 |
129361 |
129379 |
129401 |
129403 |
129419 |
129439 |
129443 |
129449 |
129457 |
129461 |
129469 |
129491 |
129497 |
129499 |
129509 |
129517 |
129527 |
129529 |
129533 |
129539 |
129553 |
129581 |
129587 |
129589 |
129593 |
129607 |
129629 |
129631 |
129641 |
129643 |
129671 |
129707 |
129719 |
129733 |
129737 |
129749 |
129757 |
129763 |
129769 |
129793 |
129803 |
129841 |
129853 |
129887 |
129893 |
129901 |
129917 |
129919 |
129937 |
129953 |
129959 |
129967 |
129971 |
130003 |
130021 |
130027 |
130043 |
130051 |
130057 |
130069 |
130073 |
130079 |
130087 |
130099 |
130121 |
130127 |
130147 |
130171 |
130183 |
130199 |
130201 |
130211 |
130223 |
130241 |
130253 |
130259 |
130261 |
130267 |
130279 |
130303 |
130307 |
130337 |
130343 |
130349 |
130363 |
130367 |
130369 |
130379 |
130399 |
130409 |
130411 |
130423 |
130439 |
130447 |
130457 |
130469 |
130477 |
130483 |
130489 |
130513 |
130517 |
130523 |
130531 |
130547 |
130553 |
130579 |
130589 |
130619 |
130621 |
130631 |
130633 |
130639 |
130643 |
130649 |
130651 |
130657 |
130681 |
130687 |
130693 |
130699 |
130729 |
130769 |
130783 |
130787 |
130807 |
130811 |
130817 |
130829 |
130841 |
130843 |
130859 |
130873 |
130927 |
130957 |
130969 |
130973 |
130981 |
130987 |
131009 |
131011 |
131023 |
131041 |
131059 |
131063 |
131071 |
131101 |
131111 |
131113 |
131129 |
131143 |
131149 |
131171 |
131203 |
131213 |
131221 |
131231 |
131249 |
131251 |
131267 |
131293 |
131297 |
131303 |
131311 |
131317 |
131321 |
131357 |
131363 |
131371 |
131381 |
131413 |
131431 |
131437 |
131441 |
131447 |
131449 |
131477 |
131479 |
131489 |
131497 |
131501 |
131507 |
131519 |
131543 |
131561 |
131581 |
131591 |
131611 |
131617 |
131627 |
131639 |
131641 |
131671 |
131687 |
131701 |
131707 |
131711 |
131713 |
131731 |
131743 |
131749 |
131759 |
131771 |
131777 |
131779 |
131783 |
131797 |
131837 |
131839 |
131849 |
131861 |
131891 |
131893 |
131899 |
131909 |
131927 |
131933 |
131939 |
131941 |
131947 |
131959 |
131969 |
132001 |
132019 |
132047 |
132049 |
132059 |
132071 |
132103 |
132109 |
132113 |
132137 |
132151 |
132157 |
132169 |
132173 |
132199 |
132229 |
132233 |
132241 |
132247 |
132257 |
132263 |
132283 |
132287 |
132299 |
132313 |
132329 |
132331 |
132347 |
132361 |
132367 |
132371 |
132383 |
132403 |
132409 |
132421 |
132437 |
132439 |
132469 |
132491 |
132499 |
132511 |
132523 |
132527 |
132529 |
132533 |
132541 |
132547 |
132589 |
132607 |
132611 |
132619 |
132623 |
132631 |
132637 |
132647 |
132661 |
132667 |
132679 |
132689 |
132697 |
132701 |
132707 |
132709 |
132721 |
132739 |
132749 |
132751 |
132757 |
132761 |
132763 |
132817 |
132833 |
132851 |
132857 |
132859 |
132863 |
132887 |
132893 |
132911 |
132929 |
132947 |
132949 |
132953 |
132961 |
132967 |
132971 |
132989 |
133013 |
133033 |
133039 |
133051 |
133069 |
133073 |
133087 |
133097 |
133103 |
133109 |
133117 |
133121 |
133153 |
133157 |
133169 |
133183 |
133187 |
133201 |
133213 |
133241 |
133253 |
133261 |
133271 |
133277 |
133279 |
133283 |
133303 |
133319 |
133321 |
133327 |
133337 |
133349 |
133351 |
133379 |
133387 |
133391 |
133403 |
133417 |
133439 |
133447 |
133451 |
133481 |
133493 |
133499 |
133519 |
133541 |
133543 |
133559 |
133571 |
133583 |
133597 |
133631 |
133633 |
133649 |
133657 |
133669 |
133673 |
133691 |
133697 |
133709 |
133711 |
133717 |
133723 |
133733 |
133769 |
133781 |
133801 |
133811 |
133813 |
133831 |
133843 |
133853 |
133873 |
133877 |
133919 |
133949 |
133963 |
133967 |
133979 |
133981 |
133993 |
133999 |
134033 |
134039 |
134047 |
134053 |
134059 |
134077 |
134081 |
134087 |
134089 |
134093 |
134129 |
134153 |
134161 |
134171 |
134177 |
134191 |
134207 |
134213 |
134219 |
134227 |
134243 |
134257 |
134263 |
134269 |
134287 |
134291 |
134293 |
134327 |
134333 |
134339 |
134341 |
134353 |
134359 |
134363 |
134369 |
134371 |
134399 |
134401 |
134417 |
134437 |
134443 |
134471 |
134489 |
134503 |
134507 |
134513 |
134581 |
134587 |
134591 |
134593 |
134597 |
134609 |
134639 |
134669 |
134677 |
134681 |
134683 |
134699 |
134707 |
134731 |
134741 |
134753 |
134777 |
134789 |
134807 |
134837 |
134839 |
134851 |
134857 |
134867 |
134873 |
134887 |
134909 |
134917 |
134921 |
134923 |
134947 |
134951 |
134989 |
134999 |
135007 |
135017 |
135019 |
135029 |
135043 |
135049 |
135059 |
135077 |
135089 |
135101 |
135119 |
135131 |
135151 |
135173 |
135181 |
135193 |
135197 |
135209 |
135211 |
135221 |
135241 |
135257 |
135271 |
135277 |
135281 |
135283 |
135301 |
135319 |
135329 |
135347 |
135349 |
135353 |
135367 |
135389 |
135391 |
135403 |
135409 |
135427 |
135431 |
135433 |
135449 |
135461 |
135463 |
135467 |
135469 |
135479 |
135497 |
135511 |
135533 |
135559 |
135571 |
135581 |
135589 |
135593 |
135599 |
135601 |
135607 |
135613 |
135617 |
135623 |
135637 |
135647 |
135649 |
135661 |
135671 |
135697 |
135701 |
135719 |
135721 |
135727 |
135731 |
135743 |
135757 |
135781 |
135787 |
135799 |
135829 |
135841 |
135851 |
135859 |
135887 |
135893 |
135899 |
135911 |
135913 |
135929 |
135937 |
135977 |
135979 |
136013 |
136027 |
136033 |
136043 |
136057 |
136067 |
136069 |
136093 |
136099 |
136111 |
136133 |
136139 |
136163 |
136177 |
136189 |
136193 |
136207 |
136217 |
136223 |
136237 |
136247 |
136261 |
136273 |
136277 |
136303 |
136309 |
136319 |
136327 |
136333 |
136337 |
136343 |
136351 |
136361 |
136373 |
136379 |
136393 |
136397 |
136399 |
136403 |
136417 |
136421 |
136429 |
136447 |
136453 |
136463 |
136471 |
136481 |
136483 |
136501 |
136511 |
136519 |
136523 |
136531 |
136537 |
136541 |
136547 |
136559 |
136573 |
136601 |
136603 |
136607 |
136621 |
136649 |
136651 |
136657 |
136691 |
136693 |
136709 |
136711 |
136727 |
136733 |
136739 |
136751 |
136753 |
136769 |
136777 |
136811 |
136813 |
136841 |
136849 |
136859 |
136861 |
136879 |
136883 |
136889 |
136897 |
136943 |
136949 |
136951 |
136963 |
136973 |
136979 |
136987 |
136991 |
136993 |
136999 |
137029 |
137077 |
137087 |
137089 |
137117 |
137119 |
137131 |
137143 |
137147 |
137153 |
137177 |
137183 |
137191 |
137197 |
137201 |
137209 |
137219 |
137239 |
137251 |
137273 |
137279 |
137303 |
137321 |
137339 |
137341 |
137353 |
137359 |
137363 |
137369 |
137383 |
137387 |
137393 |
137399 |
137413 |
137437 |
137443 |
137447 |
137453 |
137477 |
137483 |
137491 |
137507 |
137519 |
137537 |
137567 |
137573 |
137587 |
137593 |
137597 |
137623 |
137633 |
137639 |
137653 |
137659 |
137699 |
137707 |
137713 |
137723 |
137737 |
137743 |
137771 |
137777 |
137791 |
137803 |
137827 |
137831 |
137849 |
137867 |
137869 |
137873 |
137909 |
137911 |
137927 |
137933 |
137941 |
137947 |
137957 |
137983 |
137993 |
137999 |
138007 |
138041 |
138053 |
138059 |
138071 |
138077 |
138079 |
138101 |
138107 |
138113 |
138139 |
138143 |
138157 |
138163 |
138179 |
138181 |
138191 |
138197 |
138209 |
138239 |
138241 |
138247 |
138251 |
138283 |
138289 |
138311 |
138319 |
138323 |
138337 |
138349 |
138371 |
138373 |
138389 |
138401 |
138403 |
138407 |
138427 |
138433 |
138449 |
138451 |
138461 |
138469 |
138493 |
138497 |
138511 |
138517 |
138547 |
138559 |
138563 |
138569 |
138571 |
138577 |
138581 |
138587 |
138599 |
138617 |
138629 |
138637 |
138641 |
138647 |
138661 |
138679 |
138683 |
138727 |
138731 |
138739 |
138763 |
138793 |
138797 |
138799 |
138821 |
138829 |
138841 |
138863 |
138869 |
138883 |
138889 |
138893 |
138899 |
138917 |
138923 |
138937 |
138959 |
138967 |
138977 |
139021 |
139033 |
139067 |
139079 |
139091 |
139109 |
139121 |
139123 |
139133 |
139169 |
139177 |
139187 |
139199 |
139201 |
139241 |
139267 |
139273 |
139291 |
139297 |
139301 |
139303 |
139309 |
139313 |
139333 |
139339 |
139343 |
139361 |
139367 |
139369 |
139387 |
139393 |
139397 |
139409 |
139423 |
139429 |
139439 |
139457 |
139459 |
139483 |
139487 |
139493 |
139501 |
139511 |
139537 |
139547 |
139571 |
139589 |
139591 |
139597 |
139609 |
139619 |
139627 |
139661 |
139663 |
139681 |
139697 |
139703 |
139709 |
139721 |
139729 |
139739 |
139747 |
139753 |
139759 |
139787 |
139801 |
139813 |
139831 |
139837 |
139861 |
139871 |
139883 |
139891 |
139901 |
139907 |
139921 |
139939 |
139943 |
139967 |
139969 |
139981 |
139987 |
139991 |
139999 |
140009 |
140053 |
140057 |
140069 |
140071 |
140111 |
140123 |
140143 |
140159 |
140167 |
140171 |
140177 |
140191 |
140197 |
140207 |
140221 |
140227 |
140237 |
140249 |
140263 |
140269 |
140281 |
140297 |
140317 |
140321 |
140333 |
140339 |
140351 |
140363 |
140381 |
140401 |
140407 |
140411 |
140417 |
140419 |
140423 |
140443 |
140449 |
140453 |
140473 |
140477 |
140521 |
140527 |
140533 |
140549 |
140551 |
140557 |
140587 |
140593 |
140603 |
140611 |
140617 |
140627 |
140629 |
140639 |
140659 |
140663 |
140677 |
140681 |
140683 |
140689 |
140717 |
140729 |
140731 |
140741 |
140759 |
140761 |
140773 |
140779 |
140797 |
140813 |
140827 |
140831 |
140837 |
140839 |
140863 |
140867 |
140869 |
140891 |
140893 |
140897 |
140909 |
140929 |
140939 |
140977 |
140983 |
140989 |
141023 |
141041 |
141061 |
141067 |
141073 |
141079 |
141101 |
141107 |
141121 |
141131 |
141157 |
141161 |
141179 |
141181 |
141199 |
141209 |
141221 |
141223 |
141233 |
141241 |
141257 |
141263 |
141269 |
141277 |
141283 |
141301 |
141307 |
141311 |
141319 |
141353 |
141359 |
141371 |
141397 |
141403 |
141413 |
141439 |
141443 |
141461 |
141481 |
141497 |
141499 |
141509 |
141511 |
141529 |
141539 |
141551 |
141587 |
141601 |
141613 |
141619 |
141623 |
141629 |
141637 |
141649 |
141653 |
141667 |
141671 |
141677 |
141679 |
141689 |
141697 |
141707 |
141709 |
141719 |
141731 |
141761 |
141767 |
141769 |
141773 |
141793 |
141803 |
141811 |
141829 |
141833 |
141851 |
141853 |
141863 |
141871 |
141907 |
141917 |
141931 |
141937 |
141941 |
141959 |
141961 |
141971 |
141991 |
142007 |
142019 |
142031 |
142039 |
142049 |
142057 |
142061 |
142067 |
142097 |
142099 |
142111 |
142123 |
142151 |
142157 |
142159 |
142169 |
142183 |
142189 |
142193 |
142211 |
142217 |
142223 |
142231 |
142237 |
142271 |
142297 |
142319 |
142327 |
142357 |
142369 |
142381 |
142391 |
142403 |
142421 |
142427 |
142433 |
142453 |
142469 |
142501 |
142529 |
142537 |
142543 |
142547 |
142553 |
142559 |
142567 |
142573 |
142589 |
142591 |
142601 |
142607 |
142609 |
142619 |
142657 |
142673 |
142697 |
142699 |
142711 |
142733 |
142757 |
142759 |
142771 |
142787 |
142789 |
142799 |
142811 |
142837 |
142841 |
142867 |
142871 |
142873 |
142897 |
142903 |
142907 |
142939 |
142949 |
142963 |
142969 |
142973 |
142979 |
142981 |
142993 |
143053 |
143063 |
143093 |
143107 |
143111 |
143113 |
143137 |
143141 |
143159 |
143177 |
143197 |
143239 |
143243 |
143249 |
143257 |
143261 |
143263 |
143281 |
143287 |
143291 |
143329 |
143333 |
143357 |
143387 |
143401 |
143413 |
143419 |
143443 |
143461 |
143467 |
143477 |
143483 |
143489 |
143501 |
143503 |
143509 |
143513 |
143519 |
143527 |
143537 |
143551 |
143567 |
143569 |
143573 |
143593 |
143609 |
143617 |
143629 |
143651 |
143653 |
143669 |
143677 |
143687 |
143699 |
143711 |
143719 |
143729 |
143743 |
143779 |
143791 |
143797 |
143807 |
143813 |
143821 |
143827 |
143831 |
143833 |
143873 |
143879 |
143881 |
143909 |
143947 |
143953 |
143971 |
143977 |
143981 |
143999 |
144013 |
144031 |
144037 |
144061 |
144071 |
144073 |
144103 |
144139 |
144161 |
144163 |
144167 |
144169 |
144173 |
144203 |
144223 |
144241 |
144247 |
144253 |
144259 |
144271 |
144289 |
144299 |
144307 |
144311 |
144323 |
144341 |
144349 |
144379 |
144383 |
144407 |
144409 |
144413 |
144427 |
144439 |
144451 |
144461 |
144479 |
144481 |
144497 |
144511 |
144539 |
144541 |
144563 |
144569 |
144577 |
144583 |
144589 |
144593 |
144611 |
144629 |
144659 |
144667 |
144671 |
144701 |
144709 |
144719 |
144731 |
144737 |
144751 |
144757 |
144763 |
144773 |
144779 |
144791 |
144817 |
144829 |
144839 |
144847 |
144883 |
144887 |
144889 |
144899 |
144917 |
144931 |
144941 |
144961 |
144967 |
144973 |
144983 |
145007 |
145009 |
145021 |
145031 |
145037 |
145043 |
145063 |
145069 |
145091 |
145109 |
145121 |
145133 |
145139 |
145177 |
145193 |
145207 |
145213 |
145219 |
145253 |
145259 |
145267 |
145283 |
145289 |
145303 |
145307 |
145349 |
145361 |
145381 |
145391 |
145399 |
145417 |
145423 |
145433 |
145441 |
145451 |
145459 |
145463 |
145471 |
145477 |
145487 |
145501 |
145511 |
145513 |
145517 |
145531 |
145543 |
145547 |
145549 |
145577 |
145589 |
145601 |
145603 |
145633 |
145637 |
145643 |
145661 |
145679 |
145681 |
145687 |
145703 |
145709 |
145721 |
145723 |
145753 |
145757 |
145759 |
145771 |
145777 |
145799 |
145807 |
145819 |
145823 |
145829 |
145861 |
145879 |
145897 |
145903 |
145931 |
145933 |
145949 |
145963 |
145967 |
145969 |
145987 |
145991 |
146009 |
146011 |
146021 |
146023 |
146033 |
146051 |
146057 |
146059 |
146063 |
146077 |
146093 |
146099 |
146117 |
146141 |
146161 |
146173 |
146191 |
146197 |
146203 |
146213 |
146221 |
146239 |
146249 |
146273 |
146291 |
146297 |
146299 |
146309 |
146317 |
146323 |
146347 |
146359 |
146369 |
146381 |
146383 |
146389 |
146407 |
146417 |
146423 |
146437 |
146449 |
146477 |
146513 |
146519 |
146521 |
146527 |
146539 |
146543 |
146563 |
146581 |
146603 |
146609 |
146617 |
146639 |
146647 |
146669 |
146677 |
146681 |
146683 |
146701 |
146719 |
146743 |
146749 |
146767 |
146777 |
146801 |
146807 |
146819 |
146833 |
146837 |
146843 |
146849 |
146857 |
146891 |
146893 |
146917 |
146921 |
146933 |
146941 |
146953 |
146977 |
146983 |
146987 |
146989 |
147011 |
147029 |
147031 |
147047 |
147073 |
147083 |
147089 |
147097 |
147107 |
147137 |
147139 |
147151 |
147163 |
147179 |
147197 |
147209 |
147211 |
147221 |
147227 |
147229 |
147253 |
147263 |
147283 |
147289 |
147293 |
147299 |
147311 |
147319 |
147331 |
147341 |
147347 |
147353 |
147377 |
147391 |
147397 |
147401 |
147409 |
147419 |
147449 |
147451 |
147457 |
147481 |
147487 |
147503 |
147517 |
147541 |
147547 |
147551 |
147557 |
147571 |
147583 |
147607 |
147613 |
147617 |
147629 |
147647 |
147661 |
147671 |
147673 |
147689 |
147703 |
147709 |
147727 |
147739 |
147743 |
147761 |
147769 |
147773 |
147779 |
147787 |
147793 |
147799 |
147811 |
147827 |
147853 |
147859 |
147863 |
147881 |
147919 |
147937 |
147949 |
147977 |
147997 |
148013 |
148021 |
148061 |
148063 |
148073 |
148079 |
148091 |
148123 |
148139 |
148147 |
148151 |
148153 |
148157 |
148171 |
148193 |
148199 |
148201 |
148207 |
148229 |
148243 |
148249 |
148279 |
148301 |
148303 |
148331 |
148339 |
148361 |
148367 |
148381 |
148387 |
148399 |
148403 |
148411 |
148429 |
148439 |
148457 |
148469 |
148471 |
148483 |
148501 |
148513 |
148517 |
148531 |
148537 |
148549 |
148573 |
148579 |
148609 |
148627 |
148633 |
148639 |
148663 |
148667 |
148669 |
148691 |
148693 |
148711 |
148721 |
148723 |
148727 |
148747 |
148763 |
148781 |
148783 |
148793 |
148817 |
148829 |
148853 |
148859 |
148861 |
148867 |
148873 |
148891 |
148913 |
148921 |
148927 |
148931 |
148933 |
148949 |
148957 |
148961 |
148991 |
148997 |
149011 |
149021 |
149027 |
149033 |
149053 |
149057 |
149059 |
149069 |
149077 |
149087 |
149099 |
149101 |
149111 |
149113 |
149119 |
149143 |
149153 |
149159 |
149161 |
149173 |
149183 |
149197 |
149213 |
149239 |
149249 |
149251 |
149257 |
149269 |
149287 |
149297 |
149309 |
149323 |
149333 |
149341 |
149351 |
149371 |
149377 |
149381 |
149393 |
149399 |
149411 |
149417 |
149419 |
149423 |
149441 |
149459 |
149489 |
149491 |
149497 |
149503 |
149519 |
149521 |
149531 |
149533 |
149543 |
149551 |
149561 |
149563 |
149579 |
149603 |
149623 |
149627 |
149629 |
149689 |
149711 |
149713 |
149717 |
149729 |
149731 |
149749 |
149759 |
149767 |
149771 |
149791 |
149803 |
149827 |
149837 |
149839 |
149861 |
149867 |
149873 |
149893 |
149899 |
149909 |
149911 |
149921 |
149939 |
149953 |
149969 |
149971 |
149993 |
150001 |
150011 |
150041 |
150053 |
150061 |
150067 |
150077 |
150083 |
150089 |
150091 |
150097 |
150107 |
150131 |
150151 |
150169 |
150193 |
150197 |
150203 |
150209 |
150211 |
150217 |
150221 |
150223 |
150239 |
150247 |
150287 |
150299 |
150301 |
150323 |
150329 |
150343 |
150373 |
150377 |
150379 |
150383 |
150401 |
150407 |
150413 |
150427 |
150431 |
150439 |
150473 |
150497 |
150503 |
150517 |
150523 |
150533 |
150551 |
150559 |
150571 |
150583 |
150587 |
150589 |
150607 |
150611 |
150617 |
150649 |
150659 |
150697 |
150707 |
150721 |
150743 |
150767 |
150769 |
150779 |
150791 |
150797 |
150827 |
150833 |
150847 |
150869 |
150881 |
150883 |
150889 |
150893 |
150901 |
150907 |
150919 |
150929 |
150959 |
150961 |
150967 |
150979 |
150989 |
150991 |
151007 |
151009 |
151013 |
151027 |
151049 |
151051 |
151057 |
151091 |
151121 |
151141 |
151153 |
151157 |
151163 |
151169 |
151171 |
151189 |
151201 |
151213 |
151237 |
151241 |
151243 |
151247 |
151253 |
151273 |
151279 |
151289 |
151303 |
151337 |
151339 |
151343 |
151357 |
151379 |
151381 |
151391 |
151397 |
151423 |
151429 |
151433 |
151451 |
151471 |
151477 |
151483 |
151499 |
151507 |
151517 |
151523 |
151531 |
151537 |
151549 |
151553 |
151561 |
151573 |
151579 |
151597 |
151603 |
151607 |
151609 |
151631 |
151637 |
151643 |
151651 |
151667 |
151673 |
151681 |
151687 |
151693 |
151703 |
151717 |
151729 |
151733 |
151769 |
151771 |
151783 |
151787 |
151799 |
151813 |
151817 |
151841 |
151847 |
151849 |
151871 |
151883 |
151897 |
151901 |
151903 |
151909 |
151937 |
151939 |
151967 |
151969 |
152003 |
152017 |
152027 |
152029 |
152039 |
152041 |
152063 |
152077 |
152081 |
152083 |
152093 |
152111 |
152123 |
152147 |
152183 |
152189 |
152197 |
152203 |
152213 |
152219 |
152231 |
152239 |
152249 |
152267 |
152287 |
152293 |
152297 |
152311 |
152363 |
152377 |
152381 |
152389 |
152393 |
152407 |
152417 |
152419 |
152423 |
152429 |
152441 |
152443 |
152459 |
152461 |
152501 |
152519 |
152531 |
152533 |
152539 |
152563 |
152567 |
152597 |
152599 |
152617 |
152623 |
152629 |
152639 |
152641 |
152657 |
152671 |
152681 |
152717 |
152723 |
152729 |
152753 |
152767 |
152777 |
152783 |
152791 |
152809 |
152819 |
152821 |
152833 |
152837 |
152839 |
152843 |
152851 |
152857 |
152879 |
152897 |
152899 |
152909 |
152939 |
152941 |
152947 |
152953 |
152959 |
152981 |
152989 |
152993 |
153001 |
153059 |
153067 |
153071 |
153073 |
153077 |
153089 |
153107 |
153113 |
153133 |
153137 |
153151 |
153191 |
153247 |
153259 |
153269 |
153271 |
153277 |
153281 |
153287 |
153313 |
153319 |
153337 |
153343 |
153353 |
153359 |
153371 |
153379 |
153407 |
153409 |
153421 |
153427 |
153437 |
153443 |
153449 |
153457 |
153469 |
153487 |
153499 |
153509 |
153511 |
153521 |
153523 |
153529 |
153533 |
153557 |
153563 |
153589 |
153607 |
153611 |
153623 |
153641 |
153649 |
153689 |
153701 |
153719 |
153733 |
153739 |
153743 |
153749 |
153757 |
153763 |
153817 |
153841 |
153871 |
153877 |
153887 |
153889 |
153911 |
153913 |
153929 |
153941 |
153947 |
153949 |
153953 |
153991 |
153997 |
154001 |
154027 |
154043 |
154057 |
154061 |
154067 |
154073 |
154079 |
154081 |
154087 |
154097 |
154111 |
154127 |
154153 |
154157 |
154159 |
154181 |
154183 |
154211 |
154213 |
154229 |
154243 |
154247 |
154267 |
154277 |
154279 |
154291 |
154303 |
154313 |
154321 |
154333 |
154339 |
154351 |
154369 |
154373 |
154387 |
154409 |
154417 |
154423 |
154439 |
154459 |
154487 |
154493 |
154501 |
154523 |
154543 |
154571 |
154573 |
154579 |
154589 |
154591 |
154613 |
154619 |
154621 |
154643 |
154667 |
154669 |
154681 |
154691 |
154699 |
154723 |
154727 |
154733 |
154747 |
154753 |
154769 |
154787 |
154789 |
154799 |
154807 |
154823 |
154841 |
154849 |
154871 |
154873 |
154877 |
154883 |
154897 |
154927 |
154933 |
154937 |
154943 |
154981 |
154991 |
155003 |
155009 |
155017 |
155027 |
155047 |
155069 |
155081 |
155083 |
155087 |
155119 |
155137 |
155153 |
155161 |
155167 |
155171 |
155191 |
155201 |
155203 |
155209 |
155219 |
155231 |
155251 |
155269 |
155291 |
155299 |
155303 |
155317 |
155327 |
155333 |
155371 |
155377 |
155381 |
155383 |
155387 |
155399 |
155413 |
155423 |
155443 |
155453 |
155461 |
155473 |
155501 |
155509 |
155521 |
155537 |
155539 |
155557 |
155569 |
155579 |
155581 |
155593 |
155599 |
155609 |
155621 |
155627 |
155653 |
155657 |
155663 |
155671 |
155689 |
155693 |
155699 |
155707 |
155717 |
155719 |
155723 |
155731 |
155741 |
155747 |
155773 |
155777 |
155783 |
155797 |
155801 |
155809 |
155821 |
155833 |
155849 |
155851 |
155861 |
155863 |
155887 |
155891 |
155893 |
155921 |
156007 |
156011 |
156019 |
156041 |
156059 |
156061 |
156071 |
156089 |
156109 |
156119 |
156127 |
156131 |
156139 |
156151 |
156157 |
156217 |
156227 |
156229 |
156241 |
156253 |
156257 |
156259 |
156269 |
156307 |
156319 |
156329 |
156347 |
156353 |
156361 |
156371 |
156419 |
156421 |
156437 |
156467 |
156487 |
156491 |
156493 |
156511 |
156521 |
156539 |
156577 |
156589 |
156593 |
156601 |
156619 |
156623 |
156631 |
156641 |
156659 |
156671 |
156677 |
156679 |
156683 |
156691 |
156703 |
156707 |
156719 |
156727 |
156733 |
156749 |
156781 |
156797 |
156799 |
156817 |
156823 |
156833 |
156841 |
156887 |
156899 |
156901 |
156913 |
156941 |
156943 |
156967 |
156971 |
156979 |
157007 |
157013 |
157019 |
157037 |
157049 |
157051 |
157057 |
157061 |
157081 |
157103 |
157109 |
157127 |
157133 |
157141 |
157163 |
157177 |
157181 |
157189 |
157207 |
157211 |
157217 |
157219 |
157229 |
157231 |
157243 |
157247 |
157253 |
157259 |
157271 |
157273 |
157277 |
157279 |
157291 |
157303 |
157307 |
157321 |
157327 |
157349 |
157351 |
157363 |
157393 |
157411 |
157427 |
157429 |
157433 |
157457 |
157477 |
157483 |
157489 |
157513 |
157519 |
157523 |
157543 |
157559 |
157561 |
157571 |
157579 |
157627 |
157637 |
157639 |
157649 |
157667 |
157669 |
157679 |
157721 |
157733 |
157739 |
157747 |
157769 |
157771 |
157793 |
157799 |
157813 |
157823 |
157831 |
157837 |
157841 |
157867 |
157877 |
157889 |
157897 |
157901 |
157907 |
157931 |
157933 |
157951 |
157991 |
157999 |
158003 |
158009 |
158017 |
158029 |
158047 |
158071 |
158077 |
158113 |
158129 |
158141 |
158143 |
158161 |
158189 |
158201 |
158209 |
158227 |
158231 |
158233 |
158243 |
158261 |
158269 |
158293 |
158303 |
158329 |
158341 |
158351 |
158357 |
158359 |
158363 |
158371 |
158393 |
158407 |
158419 |
158429 |
158443 |
158449 |
158489 |
158507 |
158519 |
158527 |
158537 |
158551 |
158563 |
158567 |
158573 |
158581 |
158591 |
158597 |
158611 |
158617 |
158621 |
158633 |
158647 |
158657 |
158663 |
158699 |
158731 |
158747 |
158749 |
158759 |
158761 |
158771 |
158777 |
158791 |
158803 |
158843 |
158849 |
158863 |
158867 |
158881 |
158909 |
158923 |
158927 |
158941 |
158959 |
158981 |
158993 |
159013 |
159017 |
159023 |
159059 |
159073 |
159079 |
159097 |
159113 |
159119 |
159157 |
159161 |
159167 |
159169 |
159179 |
159191 |
159193 |
159199 |
159209 |
159223 |
159227 |
159233 |
159287 |
159293 |
159311 |
159319 |
159337 |
159347 |
159349 |
159361 |
159389 |
159403 |
159407 |
159421 |
159431 |
159437 |
159457 |
159463 |
159469 |
159473 |
159491 |
159499 |
159503 |
159521 |
159539 |
159541 |
159553 |
159563 |
159569 |
159571 |
159589 |
159617 |
159623 |
159629 |
159631 |
159667 |
159671 |
159673 |
159683 |
159697 |
159701 |
159707 |
159721 |
159737 |
159739 |
159763 |
159769 |
159773 |
159779 |
159787 |
159791 |
159793 |
159799 |
159811 |
159833 |
159839 |
159853 |
159857 |
159869 |
159871 |
159899 |
159911 |
159931 |
159937 |
159977 |
159979 |
160001 |
160009 |
160019 |
160031 |
160033 |
160049 |
160073 |
160079 |
160081 |
160087 |
160091 |
160093 |
160117 |
160141 |
160159 |
160163 |
160169 |
160183 |
160201 |
160207 |
160217 |
160231 |
160243 |
160253 |
160309 |
160313 |
160319 |
160343 |
160357 |
160367 |
160373 |
160387 |
160397 |
160403 |
160409 |
160423 |
160441 |
160453 |
160481 |
160483 |
160499 |
160507 |
160541 |
160553 |
160579 |
160583 |
160591 |
160603 |
160619 |
160621 |
160627 |
160637 |
160639 |
160649 |
160651 |
160663 |
160669 |
160681 |
160687 |
160697 |
160709 |
160711 |
160723 |
160739 |
160751 |
160753 |
160757 |
160781 |
160789 |
160807 |
160813 |
160817 |
160829 |
160841 |
160861 |
160877 |
160879 |
160883 |
160903 |
160907 |
160933 |
160967 |
160969 |
160981 |
160997 |
161009 |
161017 |
161033 |
161039 |
161047 |
161053 |
161059 |
161071 |
161087 |
161093 |
161123 |
161137 |
161141 |
161149 |
161159 |
161167 |
161201 |
161221 |
161233 |
161237 |
161263 |
161267 |
161281 |
161303 |
161309 |
161323 |
161333 |
161339 |
161341 |
161363 |
161377 |
161387 |
161407 |
161411 |
161453 |
161459 |
161461 |
161471 |
161503 |
161507 |
161521 |
161527 |
161531 |
161543 |
161561 |
161563 |
161569 |
161573 |
161591 |
161599 |
161611 |
161627 |
161639 |
161641 |
161659 |
161683 |
161717 |
161729 |
161731 |
161741 |
161743 |
161753 |
161761 |
161771 |
161773 |
161779 |
161783 |
161807 |
161831 |
161839 |
161869 |
161873 |
161879 |
161881 |
161911 |
161921 |
161923 |
161947 |
161957 |
161969 |
161971 |
161977 |
161983 |
161999 |
162007 |
162011 |
162017 |
162053 |
162059 |
162079 |
162091 |
162109 |
162119 |
162143 |
162209 |
162221 |
162229 |
162251 |
162257 |
162263 |
162269 |
162277 |
162287 |
162289 |
162293 |
162343 |
162359 |
162389 |
162391 |
162413 |
162419 |
162439 |
162451 |
162457 |
162473 |
162493 |
162499 |
162517 |
162523 |
162527 |
162529 |
162553 |
162557 |
162563 |
162577 |
162593 |
162601 |
162611 |
162623 |
162629 |
162641 |
162649 |
162671 |
162677 |
162683 |
162691 |
162703 |
162709 |
162713 |
162727 |
162731 |
162739 |
162749 |
162751 |
162779 |
162787 |
162791 |
162821 |
162823 |
162829 |
162839 |
162847 |
162853 |
162859 |
162881 |
162889 |
162901 |
162907 |
162917 |
162937 |
162947 |
162971 |
162973 |
162989 |
162997 |
163003 |
163019 |
163021 |
163027 |
163061 |
163063 |
163109 |
163117 |
163127 |
163129 |
163147 |
163151 |
163169 |
163171 |
163181 |
163193 |
163199 |
163211 |
163223 |
163243 |
163249 |
163259 |
163307 |
163309 |
163321 |
163327 |
163337 |
163351 |
163363 |
163367 |
163393 |
163403 |
163409 |
163411 |
163417 |
163433 |
163469 |
163477 |
163481 |
163483 |
163487 |
163517 |
163543 |
163561 |
163567 |
163573 |
163601 |
163613 |
163621 |
163627 |
163633 |
163637 |
163643 |
163661 |
163673 |
163679 |
163697 |
163729 |
163733 |
163741 |
163753 |
163771 |
163781 |
163789 |
163811 |
163819 |
163841 |
163847 |
163853 |
163859 |
163861 |
163871 |
163883 |
163901 |
163909 |
163927 |
163973 |
163979 |
163981 |
163987 |
163991 |
163993 |
163997 |
164011 |
164023 |
164039 |
164051 |
164057 |
164071 |
164089 |
164093 |
164113 |
164117 |
164147 |
164149 |
164173 |
164183 |
164191 |
164201 |
164209 |
164231 |
164233 |
164239 |
164249 |
164251 |
164267 |
164279 |
164291 |
164299 |
164309 |
164321 |
164341 |
164357 |
164363 |
164371 |
164377 |
164387 |
164413 |
164419 |
164429 |
164431 |
164443 |
164447 |
164449 |
164471 |
164477 |
164503 |
164513 |
164531 |
164569 |
164581 |
164587 |
164599 |
164617 |
164621 |
164623 |
164627 |
164653 |
164663 |
164677 |
164683 |
164701 |
164707 |
164729 |
164743 |
164767 |
164771 |
164789 |
164809 |
164821 |
164831 |
164837 |
164839 |
164881 |
164893 |
164911 |
164953 |
164963 |
164987 |
164999 |
165001 |
165037 |
165041 |
165047 |
165049 |
165059 |
165079 |
165083 |
165089 |
165103 |
165133 |
165161 |
165173 |
165181 |
165203 |
165211 |
165229 |
165233 |
165247 |
165287 |
165293 |
165311 |
165313 |
165317 |
165331 |
165343 |
165349 |
165367 |
165379 |
165383 |
165391 |
165397 |
165437 |
165443 |
165449 |
165457 |
165463 |
165469 |
165479 |
165511 |
165523 |
165527 |
165533 |
165541 |
165551 |
165553 |
165559 |
165569 |
165587 |
165589 |
165601 |
165611 |
165617 |
165653 |
165667 |
165673 |
165701 |
165703 |
165707 |
165709 |
165713 |
165719 |
165721 |
165749 |
165779 |
165799 |
165811 |
165817 |
165829 |
165833 |
165857 |
165877 |
165883 |
165887 |
165901 |
165931 |
165941 |
165947 |
165961 |
165983 |
166013 |
166021 |
166027 |
166031 |
166043 |
166063 |
166081 |
166099 |
166147 |
166151 |
166157 |
166169 |
166183 |
166189 |
166207 |
166219 |
166237 |
166247 |
166259 |
166273 |
166289 |
166297 |
166301 |
166303 |
166319 |
166349 |
166351 |
166357 |
166363 |
166393 |
166399 |
166403 |
166409 |
166417 |
166429 |
166457 |
166471 |
166487 |
166541 |
166561 |
166567 |
166571 |
166597 |
166601 |
166603 |
166609 |
166613 |
166619 |
166627 |
166631 |
166643 |
166657 |
166667 |
166669 |
166679 |
166693 |
166703 |
166723 |
166739 |
166741 |
166781 |
166783 |
166799 |
166807 |
166823 |
166841 |
166843 |
166847 |
166849 |
166853 |
166861 |
166867 |
166871 |
166909 |
166919 |
166931 |
166949 |
166967 |
166973 |
166979 |
166987 |
167009 |
167017 |
167021 |
167023 |
167033 |
167039 |
167047 |
167051 |
167071 |
167077 |
167081 |
167087 |
167099 |
167107 |
167113 |
167117 |
167119 |
167149 |
167159 |
167173 |
167177 |
167191 |
167197 |
167213 |
167221 |
167249 |
167261 |
167267 |
167269 |
167309 |
167311 |
167317 |
167329 |
167339 |
167341 |
167381 |
167393 |
167407 |
167413 |
167423 |
167429 |
167437 |
167441 |
167443 |
167449 |
167471 |
167483 |
167491 |
167521 |
167537 |
167543 |
167593 |
167597 |
167611 |
167621 |
167623 |
167627 |
167633 |
167641 |
167663 |
167677 |
167683 |
167711 |
167729 |
167747 |
167759 |
167771 |
167777 |
167779 |
167801 |
167809 |
167861 |
167863 |
167873 |
167879 |
167887 |
167891 |
167899 |
167911 |
167917 |
167953 |
167971 |
167987 |
168013 |
168023 |
168029 |
168037 |
168043 |
168067 |
168071 |
168083 |
168089 |
168109 |
168127 |
168143 |
168151 |
168193 |
168197 |
168211 |
168227 |
168247 |
168253 |
168263 |
168269 |
168277 |
168281 |
168293 |
168323 |
168331 |
168347 |
168353 |
168391 |
168409 |
168433 |
168449 |
168451 |
168457 |
168463 |
168481 |
168491 |
168499 |
168523 |
168527 |
168533 |
168541 |
168559 |
168599 |
168601 |
168617 |
168629 |
168631 |
168643 |
168673 |
168677 |
168697 |
168713 |
168719 |
168731 |
168737 |
168743 |
168761 |
168769 |
168781 |
168803 |
168851 |
168863 |
168869 |
168887 |
168893 |
168899 |
168901 |
168913 |
168937 |
168943 |
168977 |
168991 |
169003 |
169007 |
169009 |
169019 |
169049 |
169063 |
169067 |
169069 |
169079 |
169093 |
169097 |
169111 |
169129 |
169151 |
169159 |
169177 |
169181 |
169199 |
169217 |
169219 |
169241 |
169243 |
169249 |
169259 |
169283 |
169307 |
169313 |
169319 |
169321 |
169327 |
169339 |
169343 |
169361 |
169369 |
169373 |
169399 |
169409 |
169427 |
169457 |
169471 |
169483 |
169489 |
169493 |
169501 |
169523 |
169531 |
169553 |
169567 |
169583 |
169591 |
169607 |
169627 |
169633 |
169639 |
169649 |
169657 |
169661 |
169667 |
169681 |
169691 |
169693 |
169709 |
169733 |
169751 |
169753 |
169769 |
169777 |
169783 |
169789 |
169817 |
169823 |
169831 |
169837 |
169843 |
169859 |
169889 |
169891 |
169909 |
169913 |
169919 |
169933 |
169937 |
169943 |
169951 |
169957 |
169987 |
169991 |
170003 |
170021 |
170029 |
170047 |
170057 |
170063 |
170081 |
170099 |
170101 |
170111 |
170123 |
170141 |
170167 |
170179 |
170189 |
170197 |
170207 |
170213 |
170227 |
170231 |
170239 |
170243 |
170249 |
170263 |
170267 |
170279 |
170293 |
170299 |
170327 |
170341 |
170347 |
170351 |
170353 |
170363 |
170369 |
170371 |
170383 |
170389 |
170393 |
170413 |
170441 |
170447 |
170473 |
170483 |
170497 |
170503 |
170509 |
170537 |
170539 |
170551 |
170557 |
170579 |
170603 |
170609 |
170627 |
170633 |
170641 |
170647 |
170669 |
170689 |
170701 |
170707 |
170711 |
170741 |
170749 |
170759 |
170761 |
170767 |
170773 |
170777 |
170801 |
170809 |
170813 |
170827 |
170837 |
170843 |
170851 |
170857 |
170873 |
170881 |
170887 |
170899 |
170921 |
170927 |
170953 |
170957 |
170971 |
171007 |
171023 |
171029 |
171043 |
171047 |
171049 |
171053 |
171077 |
171079 |
171091 |
171103 |
171131 |
171161 |
171163 |
171167 |
171169 |
171179 |
171203 |
171233 |
171251 |
171253 |
171263 |
171271 |
171293 |
171299 |
171317 |
171329 |
171341 |
171383 |
171401 |
171403 |
171427 |
171439 |
171449 |
171467 |
171469 |
171473 |
171481 |
171491 |
171517 |
171529 |
171539 |
171541 |
171553 |
171559 |
171571 |
171583 |
171617 |
171629 |
171637 |
171641 |
171653 |
171659 |
171671 |
171673 |
171679 |
171697 |
171707 |
171713 |
171719 |
171733 |
171757 |
171761 |
171763 |
171793 |
171799 |
171803 |
171811 |
171823 |
171827 |
171851 |
171863 |
171869 |
171877 |
171881 |
171889 |
171917 |
171923 |
171929 |
171937 |
171947 |
172001 |
172009 |
172021 |
172027 |
172031 |
172049 |
172069 |
172079 |
172093 |
172097 |
172127 |
172147 |
172153 |
172157 |
172169 |
172171 |
172181 |
172199 |
172213 |
172217 |
172219 |
172223 |
172243 |
172259 |
172279 |
172283 |
172297 |
172307 |
172313 |
172321 |
172331 |
172343 |
172351 |
172357 |
172373 |
172399 |
172411 |
172421 |
172423 |
172427 |
172433 |
172439 |
172441 |
172489 |
172507 |
172517 |
172519 |
172541 |
172553 |
172561 |
172573 |
172583 |
172589 |
172597 |
172603 |
172607 |
172619 |
172633 |
172643 |
172649 |
172657 |
172663 |
172673 |
172681 |
172687 |
172709 |
172717 |
172721 |
172741 |
172751 |
172759 |
172787 |
172801 |
172807 |
172829 |
172849 |
172853 |
172859 |
172867 |
172871 |
172877 |
172883 |
172933 |
172969 |
172973 |
172981 |
172987 |
172993 |
172999 |
173021 |
173023 |
173039 |
173053 |
173059 |
173081 |
173087 |
173099 |
173137 |
173141 |
173149 |
173177 |
173183 |
173189 |
173191 |
173207 |
173209 |
173219 |
173249 |
173263 |
173267 |
173273 |
173291 |
173293 |
173297 |
173309 |
173347 |
173357 |
173359 |
173429 |
173431 |
173473 |
173483 |
173491 |
173497 |
173501 |
173531 |
173539 |
173543 |
173549 |
173561 |
173573 |
173599 |
173617 |
173629 |
173647 |
173651 |
173659 |
173669 |
173671 |
173683 |
173687 |
173699 |
173707 |
173713 |
173729 |
173741 |
173743 |
173773 |
173777 |
173779 |
173783 |
173807 |
173819 |
173827 |
173839 |
173851 |
173861 |
173867 |
173891 |
173897 |
173909 |
173917 |
173923 |
173933 |
173969 |
173977 |
173981 |
173993 |
174007 |
174017 |
174019 |
174047 |
174049 |
174061 |
174067 |
174071 |
174077 |
174079 |
174091 |
174101 |
174121 |
174137 |
174143 |
174149 |
174157 |
174169 |
174197 |
174221 |
174241 |
174257 |
174259 |
174263 |
174281 |
174289 |
174299 |
174311 |
174329 |
174331 |
174337 |
174347 |
174367 |
174389 |
174407 |
174413 |
174431 |
174443 |
174457 |
174467 |
174469 |
174481 |
174487 |
174491 |
174527 |
174533 |
174569 |
174571 |
174583 |
174599 |
174613 |
174617 |
174631 |
174637 |
174649 |
174653 |
174659 |
174673 |
174679 |
174703 |
174721 |
174737 |
174749 |
174761 |
174763 |
174767 |
174773 |
174799 |
174821 |
174829 |
174851 |
174859 |
174877 |
174893 |
174901 |
174907 |
174917 |
174929 |
174931 |
174943 |
174959 |
174989 |
174991 |
175003 |
175013 |
175039 |
175061 |
175067 |
175069 |
175079 |
175081 |
175103 |
175129 |
175141 |
175211 |
175229 |
175261 |
175267 |
175277 |
175291 |
175303 |
175309 |
175327 |
175333 |
175349 |
175361 |
175391 |
175393 |
175403 |
175411 |
175433 |
175447 |
175453 |
175463 |
175481 |
175493 |
175499 |
175519 |
175523 |
175543 |
175573 |
175601 |
175621 |
175631 |
175633 |
175649 |
175663 |
175673 |
175687 |
175691 |
175699 |
175709 |
175723 |
175727 |
175753 |
175757 |
175759 |
175781 |
175783 |
175811 |
175829 |
175837 |
175843 |
175853 |
175859 |
175873 |
175891 |
175897 |
175909 |
175919 |
175937 |
175939 |
175949 |
175961 |
175963 |
175979 |
175991 |
175993 |
176017 |
176021 |
176023 |
176041 |
176047 |
176051 |
176053 |
176063 |
176081 |
176087 |
176089 |
176123 |
176129 |
176153 |
176159 |
176161 |
176179 |
176191 |
176201 |
176207 |
176213 |
176221 |
176227 |
176237 |
176243 |
176261 |
176299 |
176303 |
176317 |
176321 |
176327 |
176329 |
176333 |
176347 |
176353 |
176357 |
176369 |
176383 |
176389 |
176401 |
176413 |
176417 |
176419 |
176431 |
176459 |
176461 |
176467 |
176489 |
176497 |
176503 |
176507 |
176509 |
176521 |
176531 |
176537 |
176549 |
176551 |
176557 |
176573 |
176591 |
176597 |
176599 |
176609 |
176611 |
176629 |
176641 |
176651 |
176677 |
176699 |
176711 |
176713 |
176741 |
176747 |
176753 |
176777 |
176779 |
176789 |
176791 |
176797 |
176807 |
176809 |
176819 |
176849 |
176857 |
176887 |
176899 |
176903 |
176921 |
176923 |
176927 |
176933 |
176951 |
176977 |
176983 |
176989 |
177007 |
177011 |
177013 |
177019 |
177043 |
177091 |
177101 |
177109 |
177113 |
177127 |
177131 |
177167 |
177173 |
177209 |
177211 |
177217 |
177223 |
177239 |
177257 |
177269 |
177283 |
177301 |
177319 |
177323 |
177337 |
177347 |
177379 |
177383 |
177409 |
177421 |
177427 |
177431 |
177433 |
177467 |
177473 |
177481 |
177487 |
177493 |
177511 |
177533 |
177539 |
177553 |
177589 |
177601 |
177623 |
177647 |
177677 |
177679 |
177691 |
177739 |
177743 |
177761 |
177763 |
177787 |
177791 |
177797 |
177811 |
177823 |
177839 |
177841 |
177883 |
177887 |
177889 |
177893 |
177907 |
177913 |
177917 |
177929 |
177943 |
177949 |
177953 |
177967 |
177979 |
178001 |
178021 |
178037 |
178039 |
178067 |
178069 |
178091 |
178093 |
178103 |
178117 |
178127 |
178141 |
178151 |
178169 |
178183 |
178187 |
178207 |
178223 |
178231 |
178247 |
178249 |
178259 |
178261 |
178289 |
178301 |
178307 |
178327 |
178333 |
178349 |
178351 |
178361 |
178393 |
178397 |
178403 |
178417 |
178439 |
178441 |
178447 |
178469 |
178481 |
178487 |
178489 |
178501 |
178513 |
178531 |
178537 |
178559 |
178561 |
178567 |
178571 |
178597 |
178601 |
178603 |
178609 |
178613 |
178621 |
178627 |
178639 |
178643 |
178681 |
178691 |
178693 |
178697 |
178753 |
178757 |
178781 |
178793 |
178799 |
178807 |
178813 |
178817 |
178819 |
178831 |
178853 |
178859 |
178873 |
178877 |
178889 |
178897 |
178903 |
178907 |
178909 |
178921 |
178931 |
178933 |
178939 |
178951 |
178973 |
178987 |
179021 |
179029 |
179033 |
179041 |
179051 |
179057 |
179083 |
179089 |
179099 |
179107 |
179111 |
179119 |
179143 |
179161 |
179167 |
179173 |
179203 |
179209 |
179213 |
179233 |
179243 |
179261 |
179269 |
179281 |
179287 |
179317 |
179321 |
179327 |
179351 |
179357 |
179369 |
179381 |
179383 |
179393 |
179407 |
179411 |
179429 |
179437 |
179441 |
179453 |
179461 |
179471 |
179479 |
179483 |
179497 |
179519 |
179527 |
179533 |
179549 |
179563 |
179573 |
179579 |
179581 |
179591 |
179593 |
179603 |
179623 |
179633 |
179651 |
179657 |
179659 |
179671 |
179687 |
179689 |
179693 |
179717 |
179719 |
179737 |
179743 |
179749 |
179779 |
179801 |
179807 |
179813 |
179819 |
179821 |
179827 |
179833 |
179849 |
179897 |
179899 |
179903 |
179909 |
179917 |
179923 |
179939 |
179947 |
179951 |
179953 |
179957 |
179969 |
179981 |
179989 |
179999 |
180001 |
180007 |
180023 |
180043 |
180053 |
180071 |
180073 |
180077 |
180097 |
180137 |
180161 |
180179 |
180181 |
180211 |
180221 |
180233 |
180239 |
180241 |
180247 |
180259 |
180263 |
180281 |
180287 |
180289 |
180307 |
180311 |
180317 |
180331 |
180337 |
180347 |
180361 |
180371 |
180379 |
180391 |
180413 |
180419 |
180437 |
180463 |
180473 |
180491 |
180497 |
180503 |
180511 |
180533 |
180539 |
180541 |
180547 |
180563 |
180569 |
180617 |
180623 |
180629 |
180647 |
180667 |
180679 |
180701 |
180731 |
180749 |
180751 |
180773 |
180779 |
180793 |
180797 |
180799 |
180811 |
180847 |
180871 |
180883 |
180907 |
180949 |
180959 |
181001 |
181003 |
181019 |
181031 |
181039 |
181061 |
181063 |
181081 |
181087 |
181123 |
181141 |
181157 |
181183 |
181193 |
181199 |
181201 |
181211 |
181213 |
181219 |
181243 |
181253 |
181273 |
181277 |
181283 |
181297 |
181301 |
181303 |
181361 |
181387 |
181397 |
181399 |
181409 |
181421 |
181439 |
181457 |
181459 |
181499 |
181501 |
181513 |
181523 |
181537 |
181549 |
181553 |
181603 |
181607 |
181609 |
181619 |
181639 |
181667 |
181669 |
181693 |
181711 |
181717 |
181721 |
181729 |
181739 |
181751 |
181757 |
181759 |
181763 |
181777 |
181787 |
181789 |
181813 |
181837 |
181871 |
181873 |
181889 |
181891 |
181903 |
181913 |
181919 |
181927 |
181931 |
181943 |
181957 |
181967 |
181981 |
181997 |
182009 |
182011 |
182027 |
182029 |
182041 |
182047 |
182057 |
182059 |
182089 |
182099 |
182101 |
182107 |
182111 |
182123 |
182129 |
182131 |
182141 |
182159 |
182167 |
182177 |
182179 |
182201 |
182209 |
182233 |
182239 |
182243 |
182261 |
182279 |
182297 |
182309 |
182333 |
182339 |
182341 |
182353 |
182387 |
182389 |
182417 |
182423 |
182431 |
182443 |
182453 |
182467 |
182471 |
182473 |
182489 |
182503 |
182509 |
182519 |
182537 |
182549 |
182561 |
182579 |
182587 |
182593 |
182599 |
182603 |
182617 |
182627 |
182639 |
182641 |
182653 |
182657 |
182659 |
182681 |
182687 |
182701 |
182711 |
182713 |
182747 |
182773 |
182779 |
182789 |
182803 |
182813 |
182821 |
182839 |
182851 |
182857 |
182867 |
182887 |
182893 |
182899 |
182921 |
182927 |
182929 |
182933 |
182953 |
182957 |
182969 |
182981 |
182999 |
183023 |
183037 |
183041 |
183047 |
183059 |
183067 |
183089 |
183091 |
183119 |
183151 |
183167 |
183191 |
183203 |
183247 |
183259 |
183263 |
183283 |
183289 |
183299 |
183301 |
183307 |
183317 |
183319 |
183329 |
183343 |
183349 |
183361 |
183373 |
183377 |
183383 |
183389 |
183397 |
183437 |
183439 |
183451 |
183461 |
183473 |
183479 |
183487 |
183497 |
183499 |
183503 |
183509 |
183511 |
183523 |
183527 |
183569 |
183571 |
183577 |
183581 |
183587 |
183593 |
183611 |
183637 |
183661 |
183683 |
183691 |
183697 |
183707 |
183709 |
183713 |
183761 |
183763 |
183797 |
183809 |
183823 |
183829 |
183871 |
183877 |
183881 |
183907 |
183917 |
183919 |
183943 |
183949 |
183959 |
183971 |
183973 |
183979 |
184003 |
184007 |
184013 |
184031 |
184039 |
184043 |
184057 |
184073 |
184081 |
184087 |
184111 |
184117 |
184133 |
184153 |
184157 |
184181 |
184187 |
184189 |
184199 |
184211 |
184231 |
184241 |
184259 |
184271 |
184273 |
184279 |
184291 |
184309 |
184321 |
184333 |
184337 |
184351 |
184369 |
184409 |
184417 |
184441 |
184447 |
184463 |
184477 |
184487 |
184489 |
184511 |
184517 |
184523 |
184553 |
184559 |
184567 |
184571 |
184577 |
184607 |
184609 |
184627 |
184631 |
184633 |
184649 |
184651 |
184669 |
184687 |
184693 |
184703 |
184711 |
184721 |
184727 |
184733 |
184753 |
184777 |
184823 |
184829 |
184831 |
184837 |
184843 |
184859 |
184879 |
184901 |
184903 |
184913 |
184949 |
184957 |
184967 |
184969 |
184993 |
184997 |
184999 |
185021 |
185027 |
185051 |
185057 |
185063 |
185069 |
185071 |
185077 |
185089 |
185099 |
185123 |
185131 |
185137 |
185149 |
185153 |
185161 |
185167 |
185177 |
185183 |
185189 |
185221 |
185233 |
185243 |
185267 |
185291 |
185299 |
185303 |
185309 |
185323 |
185327 |
185359 |
185363 |
185369 |
185371 |
185401 |
185429 |
185441 |
185467 |
185477 |
185483 |
185491 |
185519 |
185527 |
185531 |
185533 |
185539 |
185543 |
185551 |
185557 |
185567 |
185569 |
185593 |
185599 |
185621 |
185641 |
185651 |
185677 |
185681 |
185683 |
185693 |
185699 |
185707 |
185711 |
185723 |
185737 |
185747 |
185749 |
185753 |
185767 |
185789 |
185797 |
185813 |
185819 |
185821 |
185831 |
185833 |
185849 |
185869 |
185873 |
185893 |
185897 |
185903 |
185917 |
185923 |
185947 |
185951 |
185957 |
185959 |
185971 |
185987 |
185993 |
186007 |
186013 |
186019 |
186023 |
186037 |
186041 |
186049 |
186071 |
186097 |
186103 |
186107 |
186113 |
186119 |
186149 |
186157 |
186161 |
186163 |
186187 |
186191 |
186211 |
186227 |
186229 |
186239 |
186247 |
186253 |
186259 |
186271 |
186283 |
186299 |
186301 |
186311 |
186317 |
186343 |
186377 |
186379 |
186391 |
186397 |
186419 |
186437 |
186451 |
186469 |
186479 |
186481 |
186551 |
186569 |
186581 |
186583 |
186587 |
186601 |
186619 |
186629 |
186647 |
186649 |
186653 |
186671 |
186679 |
186689 |
186701 |
186707 |
186709 |
186727 |
186733 |
186743 |
186757 |
186761 |
186763 |
186773 |
186793 |
186799 |
186841 |
186859 |
186869 |
186871 |
186877 |
186883 |
186889 |
186917 |
186947 |
186959 |
187003 |
187009 |
187027 |
187043 |
187049 |
187067 |
187069 |
187073 |
187081 |
187091 |
187111 |
187123 |
187127 |
187129 |
187133 |
187139 |
187141 |
187163 |
187171 |
187177 |
187181 |
187189 |
187193 |
187211 |
187217 |
187219 |
187223 |
187237 |
187273 |
187277 |
187303 |
187337 |
187339 |
187349 |
187361 |
187367 |
187373 |
187379 |
187387 |
187393 |
187409 |
187417 |
187423 |
187433 |
187441 |
187463 |
187469 |
187471 |
187477 |
187507 |
187513 |
187531 |
187547 |
187559 |
187573 |
187597 |
187631 |
187633 |
187637 |
187639 |
187651 |
187661 |
187669 |
187687 |
187699 |
187711 |
187721 |
187751 |
187763 |
187787 |
187793 |
187823 |
187843 |
187861 |
187871 |
187877 |
187883 |
187897 |
187907 |
187909 |
187921 |
187927 |
187931 |
187951 |
187963 |
187973 |
187987 |
188011 |
188017 |
188021 |
188029 |
188107 |
188137 |
188143 |
188147 |
188159 |
188171 |
188179 |
188189 |
188197 |
188249 |
188261 |
188273 |
188281 |
188291 |
188299 |
188303 |
188311 |
188317 |
188323 |
188333 |
188351 |
188359 |
188369 |
188389 |
188401 |
188407 |
188417 |
188431 |
188437 |
188443 |
188459 |
188473 |
188483 |
188491 |
188519 |
188527 |
188533 |
188563 |
188579 |
188603 |
188609 |
188621 |
188633 |
188653 |
188677 |
188681 |
188687 |
188693 |
188701 |
188707 |
188711 |
188719 |
188729 |
188753 |
188767 |
188779 |
188791 |
188801 |
188827 |
188831 |
188833 |
188843 |
188857 |
188861 |
188863 |
188869 |
188891 |
188911 |
188927 |
188933 |
188939 |
188941 |
188953 |
188957 |
188983 |
188999 |
189011 |
189017 |
189019 |
189041 |
189043 |
189061 |
189067 |
189127 |
189139 |
189149 |
189151 |
189169 |
189187 |
189199 |
189223 |
189229 |
189239 |
189251 |
189253 |
189257 |
189271 |
189307 |
189311 |
189337 |
189347 |
189349 |
189353 |
189361 |
189377 |
189389 |
189391 |
189401 |
189407 |
189421 |
189433 |
189437 |
189439 |
189463 |
189467 |
189473 |
189479 |
189491 |
189493 |
189509 |
189517 |
189523 |
189529 |
189547 |
189559 |
189583 |
189593 |
189599 |
189613 |
189617 |
189619 |
189643 |
189653 |
189661 |
189671 |
189691 |
189697 |
189701 |
189713 |
189733 |
189743 |
189757 |
189767 |
189797 |
189799 |
189817 |
189823 |
189851 |
189853 |
189859 |
189877 |
189881 |
189887 |
189901 |
189913 |
189929 |
189947 |
189949 |
189961 |
189967 |
189977 |
189983 |
189989 |
189997 |
190027 |
190031 |
190051 |
190063 |
190093 |
190097 |
190121 |
190129 |
190147 |
190159 |
190181 |
190207 |
190243 |
190249 |
190261 |
190271 |
190283 |
190297 |
190301 |
190313 |
190321 |
190331 |
190339 |
190357 |
190367 |
190369 |
190387 |
190391 |
190403 |
190409 |
190471 |
190507 |
190523 |
190529 |
190537 |
190543 |
190573 |
190577 |
190579 |
190583 |
190591 |
190607 |
190613 |
190633 |
190639 |
190649 |
190657 |
190667 |
190669 |
190699 |
190709 |
190711 |
190717 |
190753 |
190759 |
190763 |
190769 |
190783 |
190787 |
190793 |
190807 |
190811 |
190823 |
190829 |
190837 |
190843 |
190871 |
190889 |
190891 |
190901 |
190909 |
190913 |
190921 |
190979 |
190997 |
191021 |
191027 |
191033 |
191039 |
191047 |
191057 |
191071 |
191089 |
191099 |
191119 |
191123 |
191137 |
191141 |
191143 |
191161 |
191173 |
191189 |
191227 |
191231 |
191237 |
191249 |
191251 |
191281 |
191297 |
191299 |
191339 |
191341 |
191353 |
191413 |
191441 |
191447 |
191449 |
191453 |
191459 |
191461 |
191467 |
191473 |
191491 |
191497 |
191507 |
191509 |
191519 |
191531 |
191533 |
191537 |
191551 |
191561 |
191563 |
191579 |
191599 |
191621 |
191627 |
191657 |
191669 |
191671 |
191677 |
191689 |
191693 |
191699 |
191707 |
191717 |
191747 |
191749 |
191773 |
191783 |
191791 |
191801 |
191803 |
191827 |
191831 |
191833 |
191837 |
191861 |
191899 |
191903 |
191911 |
191929 |
191953 |
191969 |
191977 |
191999 |
192007 |
192013 |
192029 |
192037 |
192043 |
192047 |
192053 |
192091 |
192097 |
192103 |
192113 |
192121 |
192133 |
192149 |
192161 |
192173 |
192187 |
192191 |
192193 |
192229 |
192233 |
192239 |
192251 |
192259 |
192263 |
192271 |
192307 |
192317 |
192319 |
192323 |
192341 |
192343 |
192347 |
192373 |
192377 |
192383 |
192391 |
192407 |
192431 |
192461 |
192463 |
192497 |
192499 |
192529 |
192539 |
192547 |
192553 |
192557 |
192571 |
192581 |
192583 |
192587 |
192601 |
192611 |
192613 |
192617 |
192629 |
192631 |
192637 |
192667 |
192677 |
192697 |
192737 |
192743 |
192749 |
192757 |
192767 |
192781 |
192791 |
192799 |
192811 |
192817 |
192833 |
192847 |
192853 |
192859 |
192877 |
192883 |
192887 |
192889 |
192917 |
192923 |
192931 |
192949 |
192961 |
192971 |
192977 |
192979 |
192991 |
193003 |
193009 |
193013 |
193031 |
193043 |
193051 |
193057 |
193073 |
193093 |
193133 |
193139 |
193147 |
193153 |
193163 |
193181 |
193183 |
193189 |
193201 |
193243 |
193247 |
193261 |
193283 |
193301 |
193327 |
193337 |
193357 |
193367 |
193373 |
193379 |
193381 |
193387 |
193393 |
193423 |
193433 |
193441 |
193447 |
193451 |
193463 |
193469 |
193493 |
193507 |
193513 |
193541 |
193549 |
193559 |
193573 |
193577 |
193597 |
193601 |
193603 |
193607 |
193619 |
193649 |
193663 |
193679 |
193703 |
193723 |
193727 |
193741 |
193751 |
193757 |
193763 |
193771 |
193789 |
193793 |
193799 |
193811 |
193813 |
193841 |
193847 |
193859 |
193861 |
193871 |
193873 |
193877 |
193883 |
193891 |
193937 |
193939 |
193943 |
193951 |
193957 |
193979 |
193993 |
194003 |
194017 |
194027 |
194057 |
194069 |
194071 |
194083 |
194087 |
194093 |
194101 |
194113 |
194119 |
194141 |
194149 |
194167 |
194179 |
194197 |
194203 |
194239 |
194263 |
194267 |
194269 |
194309 |
194323 |
194353 |
194371 |
194377 |
194413 |
194431 |
194443 |
194471 |
194479 |
194483 |
194507 |
194521 |
194527 |
194543 |
194569 |
194581 |
194591 |
194609 |
194647 |
194653 |
194659 |
194671 |
194681 |
194683 |
194687 |
194707 |
194713 |
194717 |
194723 |
194729 |
194749 |
194767 |
194771 |
194809 |
194813 |
194819 |
194827 |
194839 |
194861 |
194863 |
194867 |
194869 |
194891 |
194899 |
194911 |
194917 |
194933 |
194963 |
194977 |
194981 |
194989 |
195023 |
195029 |
195043 |
195047 |
195049 |
195053 |
195071 |
195077 |
195089 |
195103 |
195121 |
195127 |
195131 |
195137 |
195157 |
195161 |
195163 |
195193 |
195197 |
195203 |
195229 |
195241 |
195253 |
195259 |
195271 |
195277 |
195281 |
195311 |
195319 |
195329 |
195341 |
195343 |
195353 |
195359 |
195389 |
195401 |
195407 |
195413 |
195427 |
195443 |
195457 |
195469 |
195479 |
195493 |
195497 |
195511 |
195527 |
195539 |
195541 |
195581 |
195593 |
195599 |
195659 |
195677 |
195691 |
195697 |
195709 |
195731 |
195733 |
195737 |
195739 |
195743 |
195751 |
195761 |
195781 |
195787 |
195791 |
195809 |
195817 |
195863 |
195869 |
195883 |
195887 |
195893 |
195907 |
195913 |
195919 |
195929 |
195931 |
195967 |
195971 |
195973 |
195977 |
195991 |
195997 |
196003 |
196033 |
196039 |
196043 |
196051 |
196073 |
196081 |
196087 |
196111 |
196117 |
196139 |
196159 |
196169 |
196171 |
196177 |
196181 |
196187 |
196193 |
196201 |
196247 |
196271 |
196277 |
196279 |
196291 |
196303 |
196307 |
196331 |
196337 |
196379 |
196387 |
196429 |
196439 |
196453 |
196459 |
196477 |
196499 |
196501 |
196519 |
196523 |
196541 |
196543 |
196549 |
196561 |
196579 |
196583 |
196597 |
196613 |
196643 |
196657 |
196661 |
196663 |
196681 |
196687 |
196699 |
196709 |
196717 |
196727 |
196739 |
196751 |
196769 |
196771 |
196799 |
196817 |
196831 |
196837 |
196853 |
196871 |
196873 |
196879 |
196901 |
196907 |
196919 |
196927 |
196961 |
196991 |
196993 |
197003 |
197009 |
197023 |
197033 |
197059 |
197063 |
197077 |
197083 |
197089 |
197101 |
197117 |
197123 |
197137 |
197147 |
197159 |
197161 |
197203 |
197207 |
197221 |
197233 |
197243 |
197257 |
197261 |
197269 |
197273 |
197279 |
197293 |
197297 |
197299 |
197311 |
197339 |
197341 |
197347 |
197359 |
197369 |
197371 |
197381 |
197383 |
197389 |
197419 |
197423 |
197441 |
197453 |
197479 |
197507 |
197521 |
197539 |
197551 |
197567 |
197569 |
197573 |
197597 |
197599 |
197609 |
197621 |
197641 |
197647 |
197651 |
197677 |
197683 |
197689 |
197699 |
197711 |
197713 |
197741 |
197753 |
197759 |
197767 |
197773 |
197779 |
197803 |
197807 |
197831 |
197837 |
197887 |
197891 |
197893 |
197909 |
197921 |
197927 |
197933 |
197947 |
197957 |
197959 |
197963 |
197969 |
197971 |
198013 |
198017 |
198031 |
198043 |
198047 |
198073 |
198083 |
198091 |
198097 |
198109 |
198127 |
198139 |
198173 |
198179 |
198193 |
198197 |
198221 |
198223 |
198241 |
198251 |
198257 |
198259 |
198277 |
198281 |
198301 |
198313 |
198323 |
198337 |
198347 |
198349 |
198377 |
198391 |
198397 |
198409 |
198413 |
198427 |
198437 |
198439 |
198461 |
198463 |
198469 |
198479 |
198491 |
198503 |
198529 |
198533 |
198553 |
198571 |
198589 |
198593 |
198599 |
198613 |
198623 |
198637 |
198641 |
198647 |
198659 |
198673 |
198689 |
198701 |
198719 |
198733 |
198761 |
198769 |
198811 |
198817 |
198823 |
198827 |
198829 |
198833 |
198839 |
198841 |
198851 |
198859 |
198899 |
198901 |
198929 |
198937 |
198941 |
198943 |
198953 |
198959 |
198967 |
198971 |
198977 |
198997 |
199021 |
199033 |
199037 |
199039 |
199049 |
199081 |
199103 |
199109 |
199151 |
199153 |
199181 |
199193 |
199207 |
199211 |
199247 |
199261 |
199267 |
199289 |
199313 |
199321 |
199337 |
199343 |
199357 |
199373 |
199379 |
199399 |
199403 |
199411 |
199417 |
199429 |
199447 |
199453 |
199457 |
199483 |
199487 |
199489 |
199499 |
199501 |
199523 |
199559 |
199567 |
199583 |
199601 |
199603 |
199621 |
199637 |
199657 |
199669 |
199673 |
199679 |
199687 |
199697 |
199721 |
199729 |
199739 |
199741 |
199751 |
199753 |
199777 |
199783 |
199799 |
199807 |
199811 |
199813 |
199819 |
199831 |
199853 |
199873 |
199877 |
199889 |
199909 |
199921 |
199931 |
199933 |
199961 |
199967 |
199999 |
200003 |
200009 |
200017 |
200023 |
200029 |
200033 |
200041 |
200063 |
200087 |
200117 |
200131 |
200153 |
200159 |
200171 |
200177 |
200183 |
200191 |
200201 |
200227 |
200231 |
200237 |
200257 |
200273 |
200293 |
200297 |
200323 |
200329 |
200341 |
200351 |
200357 |
200363 |
200371 |
200381 |
200383 |
200401 |
200407 |
200437 |
200443 |
200461 |
200467 |
200483 |
200513 |
200569 |
200573 |
200579 |
200587 |
200591 |
200597 |
200609 |
200639 |
200657 |
200671 |
200689 |
200699 |
200713 |
200723 |
200731 |
200771 |
200779 |
200789 |
200797 |
200807 |
200843 |
200861 |
200867 |
200869 |
200881 |
200891 |
200899 |
200903 |
200909 |
200927 |
200929 |
200971 |
200983 |
200987 |
200989 |
201007 |
201011 |
201031 |
201037 |
201049 |
201073 |
201101 |
201107 |
201119 |
201121 |
201139 |
201151 |
201163 |
201167 |
201193 |
201203 |
201209 |
201211 |
201233 |
201247 |
201251 |
201281 |
201287 |
201307 |
201329 |
201337 |
201359 |
201389 |
201401 |
201403 |
201413 |
201437 |
201449 |
201451 |
201473 |
201491 |
201493 |
201497 |
201499 |
201511 |
201517 |
201547 |
201557 |
201577 |
201581 |
201589 |
201599 |
201611 |
201623 |
201629 |
201653 |
201661 |
201667 |
201673 |
201683 |
201701 |
201709 |
201731 |
201743 |
201757 |
201767 |
201769 |
201781 |
201787 |
201791 |
201797 |
201809 |
201821 |
201823 |
201827 |
201829 |
201833 |
201847 |
201881 |
201889 |
201893 |
201907 |
201911 |
201919 |
201923 |
201937 |
201947 |
201953 |
201961 |
201973 |
201979 |
201997 |
202001 |
202021 |
202031 |
202049 |
202061 |
202063 |
202067 |
202087 |
202099 |
202109 |
202121 |
202127 |
202129 |
202183 |
202187 |
202201 |
202219 |
202231 |
202243 |
202277 |
202289 |
202291 |
202309 |
202327 |
202339 |
202343 |
202357 |
202361 |
202381 |
202387 |
202393 |
202403 |
202409 |
202441 |
202471 |
202481 |
202493 |
202519 |
202529 |
202549 |
202567 |
202577 |
202591 |
202613 |
202621 |
202627 |
202637 |
202639 |
202661 |
202667 |
202679 |
202693 |
202717 |
202729 |
202733 |
202747 |
202751 |
202753 |
202757 |
202777 |
202799 |
202817 |
202823 |
202841 |
202859 |
202877 |
202879 |
202889 |
202907 |
202921 |
202931 |
202933 |
202949 |
202967 |
202973 |
202981 |
202987 |
202999 |
203011 |
203017 |
203023 |
203039 |
203051 |
203057 |
203117 |
203141 |
203173 |
203183 |
203207 |
203209 |
203213 |
203221 |
203227 |
203233 |
203249 |
203279 |
203293 |
203309 |
203311 |
203317 |
203321 |
203323 |
203339 |
203341 |
203351 |
203353 |
203363 |
203381 |
203383 |
203387 |
203393 |
203417 |
203419 |
203429 |
203431 |
203449 |
203459 |
203461 |
203531 |
203549 |
203563 |
203569 |
203579 |
203591 |
203617 |
203627 |
203641 |
203653 |
203657 |
203659 |
203663 |
203669 |
203713 |
203761 |
203767 |
203771 |
203773 |
203789 |
203807 |
203809 |
203821 |
203843 |
203857 |
203869 |
203873 |
203897 |
203909 |
203911 |
203921 |
203947 |
203953 |
203969 |
203971 |
203977 |
203989 |
203999 |
204007 |
204013 |
204019 |
204023 |
204047 |
204059 |
204067 |
204101 |
204107 |
204133 |
204137 |
204143 |
204151 |
204161 |
204163 |
204173 |
204233 |
204251 |
204299 |
204301 |
204311 |
204319 |
204329 |
204331 |
204353 |
204359 |
204361 |
204367 |
204371 |
204377 |
204397 |
204427 |
204431 |
204437 |
204439 |
204443 |
204461 |
204481 |
204487 |
204509 |
204511 |
204517 |
204521 |
204557 |
204563 |
204583 |
204587 |
204599 |
204601 |
204613 |
204623 |
204641 |
204667 |
204679 |
204707 |
204719 |
204733 |
204749 |
204751 |
204781 |
204791 |
204793 |
204797 |
204803 |
204821 |
204857 |
204859 |
204871 |
204887 |
204913 |
204917 |
204923 |
204931 |
204947 |
204973 |
204979 |
204983 |
205019 |
205031 |
205033 |
205043 |
205063 |
205069 |
205081 |
205097 |
205103 |
205111 |
205129 |
205133 |
205141 |
205151 |
205157 |
205171 |
205187 |
205201 |
205211 |
205213 |
205223 |
205237 |
205253 |
205267 |
205297 |
205307 |
205319 |
205327 |
205339 |
205357 |
205391 |
205397 |
205399 |
205417 |
205421 |
205423 |
205427 |
205433 |
205441 |
205453 |
205463 |
205477 |
205483 |
205487 |
205493 |
205507 |
205519 |
205529 |
205537 |
205549 |
205553 |
205559 |
205589 |
205603 |
205607 |
205619 |
205627 |
205633 |
205651 |
205657 |
205661 |
205663 |
205703 |
205721 |
205759 |
205763 |
205783 |
205817 |
205823 |
205837 |
205847 |
205879 |
205883 |
205913 |
205937 |
205949 |
205951 |
205957 |
205963 |
205967 |
205981 |
205991 |
205993 |
206009 |
206021 |
206027 |
206033 |
206039 |
206047 |
206051 |
206069 |
206077 |
206081 |
206083 |
206123 |
206153 |
206177 |
206179 |
206183 |
206191 |
206197 |
206203 |
206209 |
206221 |
206233 |
206237 |
206249 |
206251 |
206263 |
206273 |
206279 |
206281 |
206291 |
206299 |
206303 |
206341 |
206347 |
206351 |
206369 |
206383 |
206399 |
206407 |
206411 |
206413 |
206419 |
206447 |
206461 |
206467 |
206477 |
206483 |
206489 |
206501 |
206519 |
206527 |
206543 |
206551 |
206593 |
206597 |
206603 |
206623 |
206627 |
206639 |
206641 |
206651 |
206699 |
206749 |
206779 |
206783 |
206803 |
206807 |
206813 |
206819 |
206821 |
206827 |
206879 |
206887 |
206897 |
206909 |
206911 |
206917 |
206923 |
206933 |
206939 |
206951 |
206953 |
206993 |
207013 |
207017 |
207029 |
207037 |
207041 |
207061 |
207073 |
207079 |
207113 |
207121 |
207127 |
207139 |
207169 |
207187 |
207191 |
207197 |
207199 |
207227 |
207239 |
207241 |
207257 |
207269 |
207287 |
207293 |
207301 |
207307 |
207329 |
207331 |
207341 |
207343 |
207367 |
207371 |
207377 |
207401 |
207409 |
207433 |
207443 |
207457 |
207463 |
207469 |
207479 |
207481 |
207491 |
207497 |
207509 |
207511 |
207517 |
207521 |
207523 |
207541 |
207547 |
207551 |
207563 |
207569 |
207589 |
207593 |
207619 |
207629 |
207643 |
207653 |
207661 |
207671 |
207673 |
207679 |
207709 |
207719 |
207721 |
207743 |
207763 |
207769 |
207797 |
207799 |
207811 |
207821 |
207833 |
207847 |
207869 |
207877 |
207923 |
207931 |
207941 |
207947 |
207953 |
207967 |
207971 |
207973 |
207997 |
208001 |
208003 |
208009 |
208037 |
208049 |
208057 |
208067 |
208073 |
208099 |
208111 |
208121 |
208129 |
208139 |
208141 |
208147 |
208189 |
208207 |
208213 |
208217 |
208223 |
208231 |
208253 |
208261 |
208277 |
208279 |
208283 |
208291 |
208309 |
208319 |
208333 |
208337 |
208367 |
208379 |
208387 |
208391 |
208393 |
208409 |
208433 |
208441 |
208457 |
208459 |
208463 |
208469 |
208489 |
208493 |
208499 |
208501 |
208511 |
208513 |
208519 |
208529 |
208553 |
208577 |
208589 |
208591 |
208609 |
208627 |
208631 |
208657 |
208667 |
208673 |
208687 |
208697 |
208699 |
208721 |
208729 |
208739 |
208759 |
208787 |
208799 |
208807 |
208837 |
208843 |
208877 |
208889 |
208891 |
208907 |
208927 |
208931 |
208933 |
208961 |
208963 |
208991 |
208993 |
208997 |
209021 |
209029 |
209039 |
209063 |
209071 |
209089 |
209123 |
209147 |
209159 |
209173 |
209179 |
209189 |
209201 |
209203 |
209213 |
209221 |
209227 |
209233 |
209249 |
209257 |
209263 |
209267 |
209269 |
209299 |
209311 |
209317 |
209327 |
209333 |
209347 |
209353 |
209357 |
209359 |
209371 |
209381 |
209393 |
209401 |
209431 |
209441 |
209449 |
209459 |
209471 |
209477 |
209497 |
209519 |
209533 |
209543 |
209549 |
209563 |
209567 |
209569 |
209579 |
209581 |
209597 |
209621 |
209623 |
209639 |
209647 |
209659 |
209669 |
209687 |
209701 |
209707 |
209717 |
209719 |
209743 |
209767 |
209771 |
209789 |
209801 |
209809 |
209813 |
209819 |
209821 |
209837 |
209851 |
209857 |
209861 |
209887 |
209917 |
209927 |
209929 |
209939 |
209953 |
209959 |
209971 |
209977 |
209983 |
209987 |
210011 |
210019 |
210031 |
210037 |
210053 |
210071 |
210097 |
210101 |
210109 |
210113 |
210127 |
210131 |
210139 |
210143 |
210157 |
210169 |
210173 |
210187 |
210191 |
210193 |
210209 |
210229 |
210233 |
210241 |
210247 |
210257 |
210263 |
210277 |
210283 |
210299 |
210317 |
210319 |
210323 |
210347 |
210359 |
210361 |
210391 |
210401 |
210403 |
210407 |
210421 |
210437 |
210461 |
210467 |
210481 |
210487 |
210491 |
210499 |
210523 |
210527 |
210533 |
210557 |
210599 |
210601 |
210619 |
210631 |
210643 |
210659 |
210671 |
210709 |
210713 |
210719 |
210731 |
210739 |
210761 |
210773 |
210803 |
210809 |
210811 |
210823 |
210827 |
210839 |
210853 |
210857 |
210869 |
210901 |
210907 |
210911 |
210913 |
210923 |
210929 |
210943 |
210961 |
210967 |
211007 |
211039 |
211049 |
211051 |
211061 |
211063 |
211067 |
211073 |
211093 |
211097 |
211129 |
211151 |
211153 |
211177 |
211187 |
211193 |
211199 |
211213 |
211217 |
211219 |
211229 |
211231 |
211241 |
211247 |
211271 |
211283 |
211291 |
211297 |
211313 |
211319 |
211333 |
211339 |
211349 |
211369 |
211373 |
211403 |
211427 |
211433 |
211441 |
211457 |
211469 |
211493 |
211499 |
211501 |
211507 |
211543 |
211559 |
211571 |
211573 |
211583 |
211597 |
211619 |
211639 |
211643 |
211657 |
211661 |
211663 |
211681 |
211691 |
211693 |
211711 |
211723 |
211727 |
211741 |
211747 |
211777 |
211781 |
211789 |
211801 |
211811 |
211817 |
211859 |
211867 |
211873 |
211877 |
211879 |
211889 |
211891 |
211927 |
211931 |
211933 |
211943 |
211949 |
211969 |
211979 |
211997 |
212029 |
212039 |
212057 |
212081 |
212099 |
212117 |
212123 |
212131 |
212141 |
212161 |
212167 |
212183 |
212203 |
212207 |
212209 |
212227 |
212239 |
212243 |
212281 |
212293 |
212297 |
212353 |
212369 |
212383 |
212411 |
212419 |
212423 |
212437 |
212447 |
212453 |
212461 |
212467 |
212479 |
212501 |
212507 |
212557 |
212561 |
212573 |
212579 |
212587 |
212593 |
212627 |
212633 |
212651 |
212669 |
212671 |
212677 |
212683 |
212701 |
212777 |
212791 |
212801 |
212827 |
212837 |
212843 |
212851 |
212867 |
212869 |
212873 |
212881 |
212897 |
212903 |
212909 |
212917 |
212923 |
212969 |
212981 |
212987 |
212999 |
213019 |
213023 |
213029 |
213043 |
213067 |
213079 |
213091 |
213097 |
213119 |
213131 |
213133 |
213139 |
213149 |
213173 |
213181 |
213193 |
213203 |
213209 |
213217 |
213223 |
213229 |
213247 |
213253 |
213263 |
213281 |
213287 |
213289 |
213307 |
213319 |
213329 |
213337 |
213349 |
213359 |
213361 |
213383 |
213391 |
213397 |
213407 |
213449 |
213461 |
213467 |
213481 |
213491 |
213523 |
213533 |
213539 |
213553 |
213557 |
213589 |
213599 |
213611 |
213613 |
213623 |
213637 |
213641 |
213649 |
213659 |
213713 |
213721 |
213727 |
213737 |
213751 |
213791 |
213799 |
213821 |
213827 |
213833 |
213847 |
213859 |
213881 |
213887 |
213901 |
213919 |
213929 |
213943 |
213947 |
213949 |
213953 |
213973 |
213977 |
213989 |
214003 |
214007 |
214009 |
214021 |
214031 |
214033 |
214043 |
214051 |
214063 |
214069 |
214087 |
214091 |
214129 |
214133 |
214141 |
214147 |
214163 |
214177 |
214189 |
214211 |
214213 |
214219 |
214237 |
214243 |
214259 |
214283 |
214297 |
214309 |
214351 |
214363 |
214373 |
214381 |
214391 |
214399 |
214433 |
214439 |
214451 |
214457 |
214463 |
214469 |
214481 |
214483 |
214499 |
214507 |
214517 |
214519 |
214531 |
214541 |
214559 |
214561 |
214589 |
214603 |
214607 |
214631 |
214639 |
214651 |
214657 |
214663 |
214667 |
214673 |
214691 |
214723 |
214729 |
214733 |
214741 |
214759 |
214763 |
214771 |
214783 |
214787 |
214789 |
214807 |
214811 |
214817 |
214831 |
214849 |
214853 |
214867 |
214883 |
214891 |
214913 |
214939 |
214943 |
214967 |
214987 |
214993 |
215051 |
215063 |
215077 |
215087 |
215123 |
215141 |
215143 |
215153 |
215161 |
215179 |
215183 |
215191 |
215197 |
215239 |
215249 |
215261 |
215273 |
215279 |
215297 |
215309 |
215317 |
215329 |
215351 |
215353 |
215359 |
215381 |
215389 |
215393 |
215399 |
215417 |
215443 |
215447 |
215459 |
215461 |
215471 |
215483 |
215497 |
215503 |
215507 |
215521 |
215531 |
215563 |
215573 |
215587 |
215617 |
215653 |
215659 |
215681 |
215687 |
215689 |
215693 |
215723 |
215737 |
215753 |
215767 |
215771 |
215797 |
215801 |
215827 |
215833 |
215843 |
215851 |
215857 |
215863 |
215893 |
215899 |
215909 |
215921 |
215927 |
215939 |
215953 |
215959 |
215981 |
215983 |
216023 |
216037 |
216061 |
216071 |
216091 |
216103 |
216107 |
216113 |
216119 |
216127 |
216133 |
216149 |
216157 |
216173 |
216179 |
216211 |
216217 |
216233 |
216259 |
216263 |
216289 |
216317 |
216319 |
216329 |
216347 |
216371 |
216373 |
216379 |
216397 |
216401 |
216421 |
216431 |
216451 |
216481 |
216493 |
216509 |
216523 |
216551 |
216553 |
216569 |
216571 |
216577 |
216607 |
216617 |
216641 |
216647 |
216649 |
216653 |
216661 |
216679 |
216703 |
216719 |
216731 |
216743 |
216751 |
216757 |
216761 |
216779 |
216781 |
216787 |
216791 |
216803 |
216829 |
216841 |
216851 |
216859 |
216877 |
216899 |
216901 |
216911 |
216917 |
216919 |
216947 |
216967 |
216973 |
216991 |
217001 |
217003 |
217027 |
217033 |
217057 |
217069 |
217081 |
217111 |
217117 |
217121 |
217157 |
217163 |
217169 |
217199 |
217201 |
217207 |
217219 |
217223 |
217229 |
217241 |
217253 |
217271 |
217307 |
217309 |
217313 |
217319 |
217333 |
217337 |
217339 |
217351 |
217361 |
217363 |
217367 |
217369 |
217387 |
217397 |
217409 |
217411 |
217421 |
217429 |
217439 |
217457 |
217463 |
217489 |
217499 |
217517 |
217519 |
217559 |
217561 |
217573 |
217577 |
217579 |
217619 |
217643 |
217661 |
217667 |
217681 |
217687 |
217691 |
217697 |
217717 |
217727 |
217733 |
217739 |
217747 |
217771 |
217781 |
217793 |
217823 |
217829 |
217849 |
217859 |
217901 |
217907 |
217909 |
217933 |
217937 |
217969 |
217979 |
217981 |
218003 |
218021 |
218047 |
218069 |
218077 |
218081 |
218083 |
218087 |
218107 |
218111 |
218117 |
218131 |
218137 |
218143 |
218149 |
218171 |
218191 |
218213 |
218227 |
218233 |
218249 |
218279 |
218287 |
218357 |
218363 |
218371 |
218381 |
218389 |
218401 |
218417 |
218419 |
218423 |
218437 |
218447 |
218453 |
218459 |
218461 |
218479 |
218509 |
218513 |
218521 |
218527 |
218531 |
218549 |
218551 |
218579 |
218591 |
218599 |
218611 |
218623 |
218627 |
218629 |
218641 |
218651 |
218657 |
218677 |
218681 |
218711 |
218717 |
218719 |
218723 |
218737 |
218749 |
218761 |
218783 |
218797 |
218809 |
218819 |
218833 |
218839 |
218843 |
218849 |
218857 |
218873 |
218887 |
218923 |
218941 |
218947 |
218963 |
218969 |
218971 |
218987 |
218989 |
218993 |
219001 |
219017 |
219019 |
219031 |
219041 |
219053 |
219059 |
219071 |
219083 |
219091 |
219097 |
219103 |
219119 |
219133 |
219143 |
219169 |
219187 |
219217 |
219223 |
219251 |
219277 |
219281 |
219293 |
219301 |
219311 |
219313 |
219353 |
219361 |
219371 |
219377 |
219389 |
219407 |
219409 |
219433 |
219437 |
219451 |
219463 |
219467 |
219491 |
219503 |
219517 |
219523 |
219529 |
219533 |
219547 |
219577 |
219587 |
219599 |
219607 |
219613 |
219619 |
219629 |
219647 |
219649 |
219677 |
219679 |
219683 |
219689 |
219707 |
219721 |
219727 |
219731 |
219749 |
219757 |
219761 |
219763 |
219767 |
219787 |
219797 |
219799 |
219809 |
219823 |
219829 |
219839 |
219847 |
219851 |
219871 |
219881 |
219889 |
219911 |
219917 |
219931 |
219937 |
219941 |
219943 |
219953 |
219959 |
219971 |
219977 |
219979 |
219983 |
220009 |
220013 |
220019 |
220021 |
220057 |
220063 |
220123 |
220141 |
220147 |
220151 |
220163 |
220169 |
220177 |
220189 |
220217 |
220243 |
220279 |
220291 |
220301 |
220307 |
220327 |
220333 |
220351 |
220357 |
220361 |
220369 |
220373 |
220391 |
220399 |
220403 |
220411 |
220421 |
220447 |
220469 |
220471 |
220511 |
220513 |
220529 |
220537 |
220543 |
220553 |
220559 |
220573 |
220579 |
220589 |
220613 |
220663 |
220667 |
220673 |
220681 |
220687 |
220699 |
220709 |
220721 |
220747 |
220757 |
220771 |
220783 |
220789 |
220793 |
220807 |
220811 |
220841 |
220859 |
220861 |
220873 |
220877 |
220879 |
220889 |
220897 |
220901 |
220903 |
220907 |
220919 |
220931 |
220933 |
220939 |
220973 |
221021 |
221047 |
221059 |
221069 |
221071 |
221077 |
221083 |
221087 |
221093 |
221101 |
221159 |
221171 |
221173 |
221197 |
221201 |
221203 |
221209 |
221219 |
221227 |
221233 |
221239 |
221251 |
221261 |
221281 |
221303 |
221311 |
221317 |
221327 |
221393 |
221399 |
221401 |
221411 |
221413 |
221447 |
221453 |
221461 |
221471 |
221477 |
221489 |
221497 |
221509 |
221537 |
221539 |
221549 |
221567 |
221581 |
221587 |
221603 |
221621 |
221623 |
221653 |
221657 |
221659 |
221671 |
221677 |
221707 |
221713 |
221717 |
221719 |
221723 |
221729 |
221737 |
221747 |
221773 |
221797 |
221807 |
221813 |
221827 |
221831 |
221849 |
221873 |
221891 |
221909 |
221941 |
221951 |
221953 |
221957 |
221987 |
221989 |
221999 |
222007 |
222011 |
222023 |
222029 |
222041 |
222043 |
222059 |
222067 |
222073 |
222107 |
222109 |
222113 |
222127 |
222137 |
222149 |
222151 |
222161 |
222163 |
222193 |
222197 |
222199 |
222247 |
222269 |
222289 |
222293 |
222311 |
222317 |
222323 |
222329 |
222337 |
222347 |
222349 |
222361 |
222367 |
222379 |
222389 |
222403 |
222419 |
222437 |
222461 |
222493 |
222499 |
222511 |
222527 |
222533 |
222553 |
222557 |
222587 |
222601 |
222613 |
222619 |
222643 |
222647 |
222659 |
222679 |
222707 |
222713 |
222731 |
222773 |
222779 |
222787 |
222791 |
222793 |
222799 |
222823 |
222839 |
222841 |
222857 |
222863 |
222877 |
222883 |
222913 |
222919 |
222931 |
222941 |
222947 |
222953 |
222967 |
222977 |
222979 |
222991 |
223007 |
223009 |
223019 |
223037 |
223049 |
223051 |
223061 |
223063 |
223087 |
223099 |
223103 |
223129 |
223133 |
223151 |
223207 |
223211 |
223217 |
223219 |
223229 |
223241 |
223243 |
223247 |
223253 |
223259 |
223273 |
223277 |
223283 |
223291 |
223303 |
223313 |
223319 |
223331 |
223337 |
223339 |
223361 |
223367 |
223381 |
223403 |
223423 |
223429 |
223439 |
223441 |
223463 |
223469 |
223481 |
223493 |
223507 |
223529 |
223543 |
223547 |
223549 |
223577 |
223589 |
223621 |
223633 |
223637 |
223667 |
223679 |
223681 |
223697 |
223711 |
223747 |
223753 |
223757 |
223759 |
223781 |
223823 |
223829 |
223831 |
223837 |
223841 |
223843 |
223849 |
223903 |
223919 |
223921 |
223939 |
223963 |
223969 |
223999 |
224011 |
224027 |
224033 |
224041 |
224047 |
224057 |
224069 |
224071 |
224101 |
224113 |
224129 |
224131 |
224149 |
224153 |
224171 |
224177 |
224197 |
224201 |
224209 |
224221 |
224233 |
224239 |
224251 |
224261 |
224267 |
224291 |
224299 |
224303 |
224309 |
224317 |
224327 |
224351 |
224359 |
224363 |
224401 |
224423 |
224429 |
224443 |
224449 |
224461 |
224467 |
224473 |
224491 |
224501 |
224513 |
224527 |
224563 |
224569 |
224579 |
224591 |
224603 |
224611 |
224617 |
224629 |
224633 |
224669 |
224677 |
224683 |
224699 |
224711 |
224717 |
224729 |
224737 |
224743 |
224759 |
224771 |
224797 |
224813 |
224831 |
224863 |
224869 |
224881 |
224891 |
224897 |
224909 |
224911 |
224921 |
224929 |
224947 |
224951 |
224969 |
224977 |
224993 |
225023 |
225037 |
225061 |
225067 |
225077 |
225079 |
225089 |
225109 |
225119 |
225133 |
225143 |
225149 |
225157 |
225161 |
225163 |
225167 |
225217 |
225221 |
225223 |
225227 |
225241 |
225257 |
225263 |
225287 |
225289 |
225299 |
225307 |
225341 |
225343 |
225347 |
225349 |
225353 |
225371 |
225373 |
225383 |
225427 |
225431 |
225457 |
225461 |
225479 |
225493 |
225499 |
225503 |
225509 |
225523 |
225527 |
225529 |
225569 |
225581 |
225583 |
225601 |
225611 |
225613 |
225619 |
225629 |
225637 |
225671 |
225683 |
225689 |
225697 |
225721 |
225733 |
225749 |
225751 |
225767 |
225769 |
225779 |
225781 |
225809 |
225821 |
225829 |
225839 |
225859 |
225871 |
225889 |
225919 |
225931 |
225941 |
225943 |
225949 |
225961 |
225977 |
225983 |
225989 |
226001 |
226007 |
226013 |
226027 |
226063 |
226087 |
226099 |
226103 |
226123 |
226129 |
226133 |
226141 |
226169 |
226183 |
226189 |
226199 |
226201 |
226217 |
226231 |
226241 |
226267 |
226283 |
226307 |
226313 |
226337 |
226357 |
226367 |
226379 |
226381 |
226397 |
226409 |
226427 |
226433 |
226451 |
226453 |
226463 |
226483 |
226487 |
226511 |
226531 |
226547 |
226549 |
226553 |
226571 |
226601 |
226609 |
226621 |
226631 |
226637 |
226643 |
226649 |
226657 |
226663 |
226669 |
226691 |
226697 |
226741 |
226753 |
226769 |
226777 |
226783 |
226789 |
226799 |
226813 |
226817 |
226819 |
226823 |
226843 |
226871 |
226901 |
226903 |
226907 |
226913 |
226937 |
226943 |
226991 |
227011 |
227027 |
227053 |
227081 |
227089 |
227093 |
227111 |
227113 |
227131 |
227147 |
227153 |
227159 |
227167 |
227177 |
227189 |
227191 |
227207 |
227219 |
227231 |
227233 |
227251 |
227257 |
227267 |
227281 |
227299 |
227303 |
227363 |
227371 |
227377 |
227387 |
227393 |
227399 |
227407 |
227419 |
227431 |
227453 |
227459 |
227467 |
227471 |
227473 |
227489 |
227497 |
227501 |
227519 |
227531 |
227533 |
227537 |
227561 |
227567 |
227569 |
227581 |
227593 |
227597 |
227603 |
227609 |
227611 |
227627 |
227629 |
227651 |
227653 |
227663 |
227671 |
227693 |
227699 |
227707 |
227719 |
227729 |
227743 |
227789 |
227797 |
227827 |
227849 |
227869 |
227873 |
227893 |
227947 |
227951 |
227977 |
227989 |
227993 |
228013 |
228023 |
228049 |
228061 |
228077 |
228097 |
228103 |
228113 |
228127 |
228131 |
228139 |
228181 |
228197 |
228199 |
228203 |
228211 |
228223 |
228233 |
228251 |
228257 |
228281 |
228299 |
228301 |
228307 |
228311 |
228331 |
228337 |
228341 |
228353 |
228359 |
228383 |
228409 |
228419 |
228421 |
228427 |
228443 |
228451 |
228457 |
228461 |
228469 |
228479 |
228509 |
228511 |
228517 |
228521 |
228523 |
228539 |
228559 |
228577 |
228581 |
228587 |
228593 |
228601 |
228611 |
228617 |
228619 |
228637 |
228647 |
228677 |
228707 |
228713 |
228731 |
228733 |
228737 |
228751 |
228757 |
228773 |
228793 |
228797 |
228799 |
228829 |
228841 |
228847 |
228853 |
228859 |
228869 |
228881 |
228883 |
228887 |
228901 |
228911 |
228913 |
228923 |
228929 |
228953 |
228959 |
228961 |
228983 |
228989 |
229003 |
229027 |
229037 |
229081 |
229093 |
229123 |
229127 |
229133 |
229139 |
229153 |
229157 |
229171 |
229181 |
229189 |
229199 |
229213 |
229217 |
229223 |
229237 |
229247 |
229249 |
229253 |
229261 |
229267 |
229283 |
229309 |
229321 |
229343 |
229351 |
229373 |
229393 |
229399 |
229403 |
229409 |
229423 |
229433 |
229459 |
229469 |
229487 |
229499 |
229507 |
229519 |
229529 |
229547 |
229549 |
229553 |
229561 |
229583 |
229589 |
229591 |
229601 |
229613 |
229627 |
229631 |
229637 |
229639 |
229681 |
229693 |
229699 |
229703 |
229711 |
229717 |
229727 |
229739 |
229751 |
229753 |
229759 |
229763 |
229769 |
229771 |
229777 |
229781 |
229799 |
229813 |
229819 |
229837 |
229841 |
229847 |
229849 |
229897 |
229903 |
229937 |
229939 |
229949 |
229961 |
229963 |
229979 |
229981 |
230003 |
230017 |
230047 |
230059 |
230063 |
230077 |
230081 |
230089 |
230101 |
230107 |
230117 |
230123 |
230137 |
230143 |
230149 |
230189 |
230203 |
230213 |
230221 |
230227 |
230233 |
230239 |
230257 |
230273 |
230281 |
230291 |
230303 |
230309 |
230311 |
230327 |
230339 |
230341 |
230353 |
230357 |
230369 |
230383 |
230387 |
230389 |
230393 |
230431 |
230449 |
230453 |
230467 |
230471 |
230479 |
230501 |
230507 |
230539 |
230551 |
230561 |
230563 |
230567 |
230597 |
230611 |
230647 |
230653 |
230663 |
230683 |
230693 |
230719 |
230729 |
230743 |
230761 |
230767 |
230771 |
230773 |
230779 |
230807 |
230819 |
230827 |
230833 |
230849 |
230861 |
230863 |
230873 |
230891 |
230929 |
230933 |
230939 |
230941 |
230959 |
230969 |
230977 |
230999 |
231001 |
231017 |
231019 |
231031 |
231041 |
231053 |
231067 |
231079 |
231107 |
231109 |
231131 |
231169 |
231197 |
231223 |
231241 |
231269 |
231271 |
231277 |
231289 |
231293 |
231299 |
231317 |
231323 |
231331 |
231347 |
231349 |
231359 |
231367 |
231379 |
231409 |
231419 |
231431 |
231433 |
231443 |
231461 |
231463 |
231479 |
231481 |
231493 |
231503 |
231529 |
231533 |
231547 |
231551 |
231559 |
231563 |
231571 |
231589 |
231599 |
231607 |
231611 |
231613 |
231631 |
231643 |
231661 |
231677 |
231701 |
231709 |
231719 |
231779 |
231799 |
231809 |
231821 |
231823 |
231827 |
231839 |
231841 |
231859 |
231871 |
231877 |
231893 |
231901 |
231919 |
231923 |
231943 |
231947 |
231961 |
231967 |
232003 |
232007 |
232013 |
232049 |
232051 |
232073 |
232079 |
232081 |
232091 |
232103 |
232109 |
232117 |
232129 |
232153 |
232171 |
232187 |
232189 |
232207 |
232217 |
232259 |
232303 |
232307 |
232333 |
232357 |
232363 |
232367 |
232381 |
232391 |
232409 |
232411 |
232417 |
232433 |
232439 |
232451 |
232457 |
232459 |
232487 |
232499 |
232513 |
232523 |
232549 |
232567 |
232571 |
232591 |
232597 |
232607 |
232621 |
232633 |
232643 |
232663 |
232669 |
232681 |
232699 |
232709 |
232711 |
232741 |
232751 |
232753 |
232777 |
232801 |
232811 |
232819 |
232823 |
232847 |
232853 |
232861 |
232871 |
232877 |
232891 |
232901 |
232907 |
232919 |
232937 |
232961 |
232963 |
232987 |
233021 |
233069 |
233071 |
233083 |
233113 |
233117 |
233141 |
233143 |
233159 |
233161 |
233173 |
233183 |
233201 |
233221 |
233231 |
233239 |
233251 |
233267 |
233279 |
233293 |
233297 |
233323 |
233327 |
233329 |
233341 |
233347 |
233353 |
233357 |
233371 |
233407 |
233417 |
233419 |
233423 |
233437 |
233477 |
233489 |
233509 |
233549 |
233551 |
233557 |
233591 |
233599 |
233609 |
233617 |
233621 |
233641 |
233663 |
233669 |
233683 |
233687 |
233689 |
233693 |
233713 |
233743 |
233747 |
233759 |
233777 |
233837 |
233851 |
233861 |
233879 |
233881 |
233911 |
233917 |
233921 |
233923 |
233939 |
233941 |
233969 |
233983 |
233993 |
234007 |
234029 |
234043 |
234067 |
234083 |
234089 |
234103 |
234121 |
234131 |
234139 |
234149 |
234161 |
234167 |
234181 |
234187 |
234191 |
234193 |
234197 |
234203 |
234211 |
234217 |
234239 |
234259 |
234271 |
234281 |
234287 |
234293 |
234317 |
234319 |
234323 |
234331 |
234341 |
234343 |
234361 |
234383 |
234431 |
234457 |
234461 |
234463 |
234467 |
234473 |
234499 |
234511 |
234527 |
234529 |
234539 |
234541 |
234547 |
234571 |
234587 |
234589 |
234599 |
234613 |
234629 |
234653 |
234659 |
234673 |
234683 |
234713 |
234721 |
234727 |
234733 |
234743 |
234749 |
234769 |
234781 |
234791 |
234799 |
234803 |
234809 |
234811 |
234833 |
234847 |
234851 |
234863 |
234869 |
234893 |
234907 |
234917 |
234931 |
234947 |
234959 |
234961 |
234967 |
234977 |
234979 |
234989 |
235003 |
235007 |
235009 |
235013 |
235043 |
235051 |
235057 |
235069 |
235091 |
235099 |
235111 |
235117 |
235159 |
235171 |
235177 |
235181 |
235199 |
235211 |
235231 |
235241 |
235243 |
235273 |
235289 |
235307 |
235309 |
235337 |
235349 |
235369 |
235397 |
235439 |
235441 |
235447 |
235483 |
235489 |
235493 |
235513 |
235519 |
235523 |
235537 |
235541 |
235553 |
235559 |
235577 |
235591 |
235601 |
235607 |
235621 |
235661 |
235663 |
235673 |
235679 |
235699 |
235723 |
235747 |
235751 |
235783 |
235787 |
235789 |
235793 |
235811 |
235813 |
235849 |
235871 |
235877 |
235889 |
235891 |
235901 |
235919 |
235927 |
235951 |
235967 |
235979 |
235997 |
236017 |
236021 |
236053 |
236063 |
236069 |
236077 |
236087 |
236107 |
236111 |
236129 |
236143 |
236153 |
236167 |
236207 |
236209 |
236219 |
236231 |
236261 |
236287 |
236293 |
236297 |
236323 |
236329 |
236333 |
236339 |
236377 |
236381 |
236387 |
236399 |
236407 |
236429 |
236449 |
236461 |
236471 |
236477 |
236479 |
236503 |
236507 |
236519 |
236527 |
236549 |
236563 |
236573 |
236609 |
236627 |
236641 |
236653 |
236659 |
236681 |
236699 |
236701 |
236707 |
236713 |
236723 |
236729 |
236737 |
236749 |
236771 |
236773 |
236779 |
236783 |
236807 |
236813 |
236867 |
236869 |
236879 |
236881 |
236891 |
236893 |
236897 |
236909 |
236917 |
236947 |
236981 |
236983 |
236993 |
237011 |
237019 |
237043 |
237053 |
237067 |
237071 |
237073 |
237089 |
237091 |
237137 |
237143 |
237151 |
237157 |
237161 |
237163 |
237173 |
237179 |
237203 |
237217 |
237233 |
237257 |
237271 |
237277 |
237283 |
237287 |
237301 |
237313 |
237319 |
237331 |
237343 |
237361 |
237373 |
237379 |
237401 |
237409 |
237467 |
237487 |
237509 |
237547 |
237563 |
237571 |
237581 |
237607 |
237619 |
237631 |
237673 |
237683 |
237689 |
237691 |
237701 |
237707 |
237733 |
237737 |
237749 |
237763 |
237767 |
237781 |
237791 |
237821 |
237851 |
237857 |
237859 |
237877 |
237883 |
237901 |
237911 |
237929 |
237959 |
237967 |
237971 |
237973 |
237977 |
237997 |
238001 |
238009 |
238019 |
238031 |
238037 |
238039 |
238079 |
238081 |
238093 |
238099 |
238103 |
238109 |
238141 |
238151 |
238157 |
238159 |
238163 |
238171 |
238181 |
238201 |
238207 |
238213 |
238223 |
238229 |
238237 |
238247 |
238261 |
238267 |
238291 |
238307 |
238313 |
238321 |
238331 |
238339 |
238361 |
238363 |
238369 |
238373 |
238397 |
238417 |
238423 |
238439 |
238451 |
238463 |
238471 |
238477 |
238481 |
238499 |
238519 |
238529 |
238531 |
238547 |
238573 |
238591 |
238627 |
238639 |
238649 |
238657 |
238673 |
238681 |
238691 |
238703 |
238709 |
238723 |
238727 |
238729 |
238747 |
238759 |
238781 |
238789 |
238801 |
238829 |
238837 |
238841 |
238853 |
238859 |
238877 |
238879 |
238883 |
238897 |
238919 |
238921 |
238939 |
238943 |
238949 |
238967 |
238991 |
239017 |
239023 |
239027 |
239053 |
239069 |
239081 |
239087 |
239119 |
239137 |
239147 |
239167 |
239171 |
239179 |
239201 |
239231 |
239233 |
239237 |
239243 |
239251 |
239263 |
239273 |
239287 |
239297 |
239329 |
239333 |
239347 |
239357 |
239383 |
239387 |
239389 |
239417 |
239423 |
239429 |
239431 |
239441 |
239461 |
239489 |
239509 |
239521 |
239527 |
239531 |
239539 |
239543 |
239557 |
239567 |
239579 |
239587 |
239597 |
239611 |
239623 |
239633 |
239641 |
239671 |
239689 |
239699 |
239711 |
239713 |
239731 |
239737 |
239753 |
239779 |
239783 |
239803 |
239807 |
239831 |
239843 |
239849 |
239851 |
239857 |
239873 |
239879 |
239893 |
239929 |
239933 |
239947 |
239957 |
239963 |
239977 |
239999 |
240007 |
240011 |
240017 |
240041 |
240043 |
240047 |
240049 |
240059 |
240073 |
240089 |
240101 |
240109 |
240113 |
240131 |
240139 |
240151 |
240169 |
240173 |
240197 |
240203 |
240209 |
240257 |
240259 |
240263 |
240271 |
240283 |
240287 |
240319 |
240341 |
240347 |
240349 |
240353 |
240371 |
240379 |
240421 |
240433 |
240437 |
240473 |
240479 |
240491 |
240503 |
240509 |
240517 |
240551 |
240571 |
240587 |
240589 |
240599 |
240607 |
240623 |
240631 |
240641 |
240659 |
240677 |
240701 |
240707 |
240719 |
240727 |
240733 |
240739 |
240743 |
240763 |
240769 |
240797 |
240811 |
240829 |
240841 |
240853 |
240859 |
240869 |
240881 |
240883 |
240893 |
240899 |
240913 |
240943 |
240953 |
240959 |
240967 |
240997 |
241013 |
241027 |
241037 |
241049 |
241051 |
241061 |
241067 |
241069 |
241079 |
241093 |
241117 |
241127 |
241141 |
241169 |
241177 |
241183 |
241207 |
241229 |
241249 |
241253 |
241259 |
241261 |
241271 |
241291 |
241303 |
241313 |
241321 |
241327 |
241333 |
241337 |
241343 |
241361 |
241363 |
241391 |
241393 |
241421 |
241429 |
241441 |
241453 |
241463 |
241469 |
241489 |
241511 |
241513 |
241517 |
241537 |
241543 |
241559 |
241561 |
241567 |
241589 |
241597 |
241601 |
241603 |
241639 |
241643 |
241651 |
241663 |
241667 |
241679 |
241687 |
241691 |
241711 |
241727 |
241739 |
241771 |
241781 |
241783 |
241793 |
241807 |
241811 |
241817 |
241823 |
241847 |
241861 |
241867 |
241873 |
241877 |
241883 |
241903 |
241907 |
241919 |
241921 |
241931 |
241939 |
241951 |
241963 |
241973 |
241979 |
241981 |
241993 |
242009 |
242057 |
242059 |
242069 |
242083 |
242093 |
242101 |
242119 |
242129 |
242147 |
242161 |
242171 |
242173 |
242197 |
242201 |
242227 |
242243 |
242257 |
242261 |
242273 |
242279 |
242309 |
242329 |
242357 |
242371 |
242377 |
242393 |
242399 |
242413 |
242419 |
242441 |
242447 |
242449 |
242453 |
242467 |
242479 |
242483 |
242491 |
242509 |
242519 |
242521 |
242533 |
242551 |
242591 |
242603 |
242617 |
242621 |
242629 |
242633 |
242639 |
242647 |
242659 |
242677 |
242681 |
242689 |
242713 |
242729 |
242731 |
242747 |
242773 |
242779 |
242789 |
242797 |
242807 |
242813 |
242819 |
242863 |
242867 |
242873 |
242887 |
242911 |
242923 |
242927 |
242971 |
242989 |
242999 |
243011 |
243031 |
243073 |
243077 |
243091 |
243101 |
243109 |
243119 |
243121 |
243137 |
243149 |
243157 |
243161 |
243167 |
243197 |
243203 |
243209 |
243227 |
243233 |
243239 |
243259 |
243263 |
243301 |
243311 |
243343 |
243367 |
243391 |
243401 |
243403 |
243421 |
243431 |
243433 |
243437 |
243461 |
243469 |
243473 |
243479 |
243487 |
243517 |
243521 |
243527 |
243533 |
243539 |
243553 |
243577 |
243583 |
243587 |
243589 |
243613 |
243623 |
243631 |
243643 |
243647 |
243671 |
243673 |
243701 |
243703 |
243707 |
243709 |
243769 |
243781 |
243787 |
243799 |
243809 |
243829 |
243839 |
243851 |
243857 |
243863 |
243871 |
243889 |
243911 |
243917 |
243931 |
243953 |
243973 |
243989 |
244003 |
244009 |
244021 |
244033 |
244043 |
244087 |
244091 |
244109 |
244121 |
244129 |
244141 |
244147 |
244157 |
244159 |
244177 |
244199 |
244217 |
244219 |
244243 |
244247 |
244253 |
244261 |
244291 |
244297 |
244301 |
244303 |
244313 |
244333 |
244339 |
244351 |
244357 |
244367 |
244379 |
244381 |
244393 |
244399 |
244403 |
244411 |
244423 |
244429 |
244451 |
244457 |
244463 |
244471 |
244481 |
244493 |
244507 |
244529 |
244547 |
244553 |
244561 |
244567 |
244583 |
244589 |
244597 |
244603 |
244619 |
244633 |
244637 |
244639 |
244667 |
244669 |
244687 |
244691 |
244703 |
244711 |
244721 |
244733 |
244747 |
244753 |
244759 |
244781 |
244787 |
244813 |
244837 |
244841 |
244843 |
244859 |
244861 |
244873 |
244877 |
244889 |
244897 |
244901 |
244939 |
244943 |
244957 |
244997 |
245023 |
245029 |
245033 |
245039 |
245071 |
245083 |
245087 |
245107 |
245129 |
245131 |
245149 |
245171 |
245173 |
245177 |
245183 |
245209 |
245251 |
245257 |
245261 |
245269 |
245279 |
245291 |
245299 |
245317 |
245321 |
245339 |
245383 |
245389 |
245407 |
245411 |
245417 |
245419 |
245437 |
245471 |
245473 |
245477 |
245501 |
245513 |
245519 |
245521 |
245527 |
245533 |
245561 |
245563 |
245587 |
245591 |
245593 |
245621 |
245627 |
245629 |
245639 |
245653 |
245671 |
245681 |
245683 |
245711 |
245719 |
245723 |
245741 |
245747 |
245753 |
245759 |
245771 |
245783 |
245789 |
245821 |
245849 |
245851 |
245863 |
245881 |
245897 |
245899 |
245909 |
245911 |
245941 |
245963 |
245977 |
245981 |
245983 |
245989 |
246011 |
246017 |
246049 |
246073 |
246097 |
246119 |
246121 |
246131 |
246133 |
246151 |
246167 |
246173 |
246187 |
246193 |
246203 |
246209 |
246217 |
246223 |
246241 |
246247 |
246251 |
246271 |
246277 |
246289 |
246317 |
246319 |
246329 |
246343 |
246349 |
246361 |
246371 |
246391 |
246403 |
246439 |
246469 |
246473 |
246497 |
246509 |
246511 |
246523 |
246527 |
246539 |
246557 |
246569 |
246577 |
246599 |
246607 |
246611 |
246613 |
246637 |
246641 |
246643 |
246661 |
246683 |
246689 |
246707 |
246709 |
246713 |
246731 |
246739 |
246769 |
246773 |
246781 |
246787 |
246793 |
246803 |
246809 |
246811 |
246817 |
246833 |
246839 |
246889 |
246899 |
246907 |
246913 |
246919 |
246923 |
246929 |
246931 |
246937 |
246941 |
246947 |
246971 |
246979 |
247001 |
247007 |
247031 |
247067 |
247069 |
247073 |
247087 |
247099 |
247141 |
247183 |
247193 |
247201 |
247223 |
247229 |
247241 |
247249 |
247259 |
247279 |
247301 |
247309 |
247337 |
247339 |
247343 |
247363 |
247369 |
247381 |
247391 |
247393 |
247409 |
247421 |
247433 |
247439 |
247451 |
247463 |
247501 |
247519 |
247529 |
247531 |
247547 |
247553 |
247579 |
247591 |
247601 |
247603 |
247607 |
247609 |
247613 |
247633 |
247649 |
247651 |
247691 |
247693 |
247697 |
247711 |
247717 |
247729 |
247739 |
247759 |
247769 |
247771 |
247781 |
247799 |
247811 |
247813 |
247829 |
247847 |
247853 |
247873 |
247879 |
247889 |
247901 |
247913 |
247939 |
247943 |
247957 |
247991 |
247993 |
247997 |
247999 |
248021 |
248033 |
248041 |
248051 |
248057 |
248063 |
248071 |
248077 |
248089 |
248099 |
248117 |
248119 |
248137 |
248141 |
248161 |
248167 |
248177 |
248179 |
248189 |
248201 |
248203 |
248231 |
248243 |
248257 |
248267 |
248291 |
248293 |
248299 |
248309 |
248317 |
248323 |
248351 |
248357 |
248371 |
248389 |
248401 |
248407 |
248431 |
248441 |
248447 |
248461 |
248473 |
248477 |
248483 |
248509 |
248533 |
248537 |
248543 |
248569 |
248579 |
248587 |
248593 |
248597 |
248609 |
248621 |
248627 |
248639 |
248641 |
248657 |
248683 |
248701 |
248707 |
248719 |
248723 |
248737 |
248749 |
248753 |
248779 |
248783 |
248789 |
248797 |
248813 |
248821 |
248827 |
248839 |
248851 |
248861 |
248867 |
248869 |
248879 |
248887 |
248891 |
248893 |
248903 |
248909 |
248971 |
248981 |
248987 |
249017 |
249037 |
249059 |
249079 |
249089 |
249097 |
249103 |
249107 |
249127 |
249131 |
249133 |
249143 |
249181 |
249187 |
249199 |
249211 |
249217 |
249229 |
249233 |
249253 |
249257 |
249287 |
249311 |
249317 |
249329 |
249341 |
249367 |
249377 |
249383 |
249397 |
249419 |
249421 |
249427 |
249433 |
249437 |
249439 |
249449 |
249463 |
249497 |
249499 |
249503 |
249517 |
249521 |
249533 |
249539 |
249541 |
249563 |
249583 |
249589 |
249593 |
249607 |
249647 |
249659 |
249671 |
249677 |
249703 |
249721 |
249727 |
249737 |
249749 |
249763 |
249779 |
249797 |
249811 |
249827 |
249833 |
249853 |
249857 |
249859 |
249863 |
249871 |
249881 |
249911 |
249923 |
249943 |
249947 |
249967 |
249971 |
249973 |
249989 |
250007 |
250013 |
250027 |
250031 |
250037 |
250043 |
250049 |
250051 |
250057 |
250073 |
250091 |
250109 |
250123 |
250147 |
250153 |
250169 |
250199 |
250253 |
250259 |
250267 |
250279 |
250301 |
250307 |
250343 |
250361 |
250403 |
250409 |
250423 |
250433 |
250441 |
250451 |
250489 |
250499 |
250501 |
250543 |
250583 |
250619 |
250643 |
250673 |
250681 |
250687 |
250693 |
250703 |
250709 |
250721 |
250727 |
250739 |
250741 |
250751 |
250753 |
250777 |
250787 |
250793 |
250799 |
250807 |
250813 |
250829 |
250837 |
250841 |
250853 |
250867 |
250871 |
250889 |
250919 |
250949 |
250951 |
250963 |
250967 |
250969 |
250979 |
250993 |
251003 |
251033 |
251051 |
251057 |
251059 |
251063 |
251071 |
251081 |
251087 |
251099 |
251117 |
251143 |
251149 |
251159 |
251171 |
251177 |
251179 |
251191 |
251197 |
251201 |
251203 |
251219 |
251221 |
251231 |
251233 |
251257 |
251261 |
251263 |
251287 |
251291 |
251297 |
251323 |
251347 |
251353 |
251359 |
251387 |
251393 |
251417 |
251429 |
251431 |
251437 |
251443 |
251467 |
251473 |
251477 |
251483 |
251491 |
251501 |
251513 |
251519 |
251527 |
251533 |
251539 |
251543 |
251561 |
251567 |
251609 |
251611 |
251621 |
251623 |
251639 |
251653 |
251663 |
251677 |
251701 |
251707 |
251737 |
251761 |
251789 |
251791 |
251809 |
251831 |
251833 |
251843 |
251857 |
251861 |
251879 |
251887 |
251893 |
251897 |
251903 |
251917 |
251939 |
251941 |
251947 |
251969 |
251971 |
251983 |
252001 |
252013 |
252017 |
252029 |
252037 |
252079 |
252101 |
252139 |
252143 |
252151 |
252157 |
252163 |
252169 |
252173 |
252181 |
252193 |
252209 |
252223 |
252233 |
252253 |
252277 |
252283 |
252289 |
252293 |
252313 |
252319 |
252323 |
252341 |
252359 |
252383 |
252391 |
252401 |
252409 |
252419 |
252431 |
252443 |
252449 |
252457 |
252463 |
252481 |
252509 |
252533 |
252541 |
252559 |
252583 |
252589 |
252607 |
252611 |
252617 |
252641 |
252667 |
252691 |
252709 |
252713 |
252727 |
252731 |
252737 |
252761 |
252767 |
252779 |
252817 |
252823 |
252827 |
252829 |
252869 |
252877 |
252881 |
252887 |
252893 |
252899 |
252911 |
252913 |
252919 |
252937 |
252949 |
252971 |
252979 |
252983 |
253003 |
253013 |
253049 |
253063 |
253081 |
253103 |
253109 |
253133 |
253153 |
253157 |
253159 |
253229 |
253243 |
253247 |
253273 |
253307 |
253321 |
253343 |
253349 |
253361 |
253367 |
253369 |
253381 |
253387 |
253417 |
253423 |
253427 |
253433 |
253439 |
253447 |
253469 |
253481 |
253493 |
253501 |
253507 |
253531 |
253537 |
253543 |
253553 |
253567 |
253573 |
253601 |
253607 |
253609 |
253613 |
253633 |
253637 |
253639 |
253651 |
253661 |
253679 |
253681 |
253703 |
253717 |
253733 |
253741 |
253751 |
253763 |
253769 |
253777 |
253787 |
253789 |
253801 |
253811 |
253819 |
253823 |
253853 |
253867 |
253871 |
253879 |
253901 |
253907 |
253909 |
253919 |
253937 |
253949 |
253951 |
253969 |
253987 |
253993 |
253999 |
254003 |
254021 |
254027 |
254039 |
254041 |
254047 |
254053 |
254071 |
254083 |
254119 |
254141 |
254147 |
254161 |
254179 |
254197 |
254207 |
254209 |
254213 |
254249 |
254257 |
254279 |
254281 |
254291 |
254299 |
254329 |
254369 |
254377 |
254383 |
254389 |
254407 |
254413 |
254437 |
254447 |
254461 |
254489 |
254491 |
254519 |
254537 |
254557 |
254593 |
254623 |
254627 |
254647 |
254659 |
254663 |
254699 |
254713 |
254729 |
254731 |
254741 |
254747 |
254753 |
254773 |
254777 |
254783 |
254791 |
254803 |
254827 |
254831 |
254833 |
254857 |
254869 |
254873 |
254879 |
254887 |
254899 |
254911 |
254927 |
254929 |
254941 |
254959 |
254963 |
254971 |
254977 |
254987 |
254993 |
255007 |
255019 |
255023 |
255043 |
255049 |
255053 |
255071 |
255077 |
255083 |
255097 |
255107 |
255121 |
255127 |
255133 |
255137 |
255149 |
255173 |
255179 |
255181 |
255191 |
255193 |
255197 |
255209 |
255217 |
255239 |
255247 |
255251 |
255253 |
255259 |
255313 |
255329 |
255349 |
255361 |
255371 |
255383 |
255413 |
255419 |
255443 |
255457 |
255467 |
255469 |
255473 |
255487 |
255499 |
255503 |
255511 |
255517 |
255523 |
255551 |
255571 |
255587 |
255589 |
255613 |
255617 |
255637 |
255641 |
255649 |
255653 |
255659 |
255667 |
255679 |
255709 |
255713 |
255733 |
255743 |
255757 |
255763 |
255767 |
255803 |
255839 |
255841 |
255847 |
255851 |
255859 |
255869 |
255877 |
255887 |
255907 |
255917 |
255919 |
255923 |
255947 |
255961 |
255971 |
255973 |
255977 |
255989 |
256019 |
256021 |
256031 |
256033 |
256049 |
256057 |
256079 |
256093 |
256117 |
256121 |
256129 |
256133 |
256147 |
256163 |
256169 |
256181 |
256187 |
256189 |
256199 |
256211 |
256219 |
256279 |
256301 |
256307 |
256313 |
256337 |
256349 |
256363 |
256369 |
256391 |
256393 |
256423 |
256441 |
256469 |
256471 |
256483 |
256489 |
256493 |
256499 |
256517 |
256541 |
256561 |
256567 |
256577 |
256579 |
256589 |
256603 |
256609 |
256639 |
256643 |
256651 |
256661 |
256687 |
256699 |
256721 |
256723 |
256757 |
256771 |
256799 |
256801 |
256813 |
256831 |
256873 |
256877 |
256889 |
256901 |
256903 |
256931 |
256939 |
256957 |
256967 |
256981 |
257003 |
257017 |
257053 |
257069 |
257077 |
257093 |
257099 |
257107 |
257123 |
257141 |
257161 |
257171 |
257177 |
257189 |
257219 |
257221 |
257239 |
257249 |
257263 |
257273 |
257281 |
257287 |
257293 |
257297 |
257311 |
257321 |
257339 |
257351 |
257353 |
257371 |
257381 |
257399 |
257401 |
257407 |
257437 |
257443 |
257447 |
257459 |
257473 |
257489 |
257497 |
257501 |
257503 |
257519 |
257539 |
257561 |
257591 |
257611 |
257627 |
257639 |
257657 |
257671 |
257687 |
257689 |
257707 |
257711 |
257713 |
257717 |
257731 |
257783 |
257791 |
257797 |
257837 |
257857 |
257861 |
257863 |
257867 |
257869 |
257879 |
257893 |
257903 |
257921 |
257947 |
257953 |
257981 |
257987 |
257989 |
257993 |
258019 |
258023 |
258031 |
258061 |
258067 |
258101 |
258107 |
258109 |
258113 |
258119 |
258127 |
258131 |
258143 |
258157 |
258161 |
258173 |
258197 |
258211 |
258233 |
258241 |
258253 |
258277 |
258283 |
258299 |
258317 |
258319 |
258329 |
258331 |
258337 |
258353 |
258373 |
258389 |
258403 |
258407 |
258413 |
258421 |
258437 |
258443 |
258449 |
258469 |
258487 |
258491 |
258499 |
258521 |
258527 |
258539 |
258551 |
258563 |
258569 |
258581 |
258607 |
258611 |
258613 |
258617 |
258623 |
258631 |
258637 |
258659 |
258673 |
258677 |
258691 |
258697 |
258703 |
258707 |
258721 |
258733 |
258737 |
258743 |
258763 |
258779 |
258787 |
258803 |
258809 |
258827 |
258847 |
258871 |
258887 |
258917 |
258919 |
258949 |
258959 |
258967 |
258971 |
258977 |
258983 |
258991 |
259001 |
259009 |
259019 |
259033 |
259099 |
259121 |
259123 |
259151 |
259157 |
259159 |
259163 |
259169 |
259177 |
259183 |
259201 |
259211 |
259213 |
259219 |
259229 |
259271 |
259277 |
259309 |
259321 |
259339 |
259379 |
259381 |
259387 |
259397 |
259411 |
259421 |
259429 |
259451 |
259453 |
259459 |
259499 |
259507 |
259517 |
259531 |
259537 |
259547 |
259577 |
259583 |
259603 |
259619 |
259621 |
259627 |
259631 |
259639 |
259643 |
259657 |
259667 |
259681 |
259691 |
259697 |
259717 |
259723 |
259733 |
259751 |
259771 |
259781 |
259783 |
259801 |
259813 |
259823 |
259829 |
259837 |
259841 |
259867 |
259907 |
259933 |
259937 |
259943 |
259949 |
259967 |
259991 |
259993 |
260003 |
260009 |
260011 |
260017 |
260023 |
260047 |
260081 |
260089 |
260111 |
260137 |
260171 |
260179 |
260189 |
260191 |
260201 |
260207 |
260209 |
260213 |
260231 |
260263 |
260269 |
260317 |
260329 |
260339 |
260363 |
260387 |
260399 |
260411 |
260413 |
260417 |
260419 |
260441 |
260453 |
260461 |
260467 |
260483 |
260489 |
260527 |
260539 |
260543 |
260549 |
260551 |
260569 |
260573 |
260581 |
260587 |
260609 |
260629 |
260647 |
260651 |
260671 |
260677 |
260713 |
260717 |
260723 |
260747 |
260753 |
260761 |
260773 |
260791 |
260807 |
260809 |
260849 |
260857 |
260861 |
260863 |
260873 |
260879 |
260893 |
260921 |
260941 |
260951 |
260959 |
260969 |
260983 |
260987 |
260999 |
261011 |
261013 |
261017 |
261031 |
261043 |
261059 |
261061 |
261071 |
261077 |
261089 |
261101 |
261127 |
261167 |
261169 |
261223 |
261229 |
261241 |
261251 |
261271 |
261281 |
261301 |
261323 |
261329 |
261337 |
261347 |
261353 |
261379 |
261389 |
261407 |
261427 |
261431 |
261433 |
261439 |
261451 |
261463 |
261467 |
261509 |
261523 |
261529 |
261557 |
261563 |
261577 |
261581 |
261587 |
261593 |
261601 |
261619 |
261631 |
261637 |
261641 |
261643 |
261673 |
261697 |
261707 |
261713 |
261721 |
261739 |
261757 |
261761 |
261773 |
261787 |
261791 |
261799 |
261823 |
261847 |
261881 |
261887 |
261917 |
261959 |
261971 |
261973 |
261977 |
261983 |
262007 |
262027 |
262049 |
262051 |
262069 |
262079 |
262103 |
262109 |
262111 |
262121 |
262127 |
262133 |
262139 |
262147 |
262151 |
262153 |
262187 |
262193 |
262217 |
262231 |
262237 |
262253 |
262261 |
262271 |
262303 |
262313 |
262321 |
262331 |
262337 |
262349 |
262351 |
262369 |
262387 |
262391 |
262399 |
262411 |
262433 |
262459 |
262469 |
262489 |
262501 |
262511 |
262513 |
262519 |
262541 |
262543 |
262553 |
262567 |
262583 |
262597 |
262621 |
262627 |
262643 |
262649 |
262651 |
262657 |
262681 |
262693 |
262697 |
262709 |
262723 |
262733 |
262739 |
262741 |
262747 |
262781 |
262783 |
262807 |
262819 |
262853 |
262877 |
262883 |
262897 |
262901 |
262909 |
262937 |
262949 |
262957 |
262981 |
263009 |
263023 |
263047 |
263063 |
263071 |
263077 |
263083 |
263089 |
263101 |
263111 |
263119 |
263129 |
263167 |
263171 |
263183 |
263191 |
263201 |
263209 |
263213 |
263227 |
263239 |
263257 |
263267 |
263269 |
263273 |
263287 |
263293 |
263303 |
263323 |
263369 |
263383 |
263387 |
263399 |
263401 |
263411 |
263423 |
263429 |
263437 |
263443 |
263489 |
263491 |
263503 |
263513 |
263519 |
263521 |
263533 |
263537 |
263561 |
263567 |
263573 |
263591 |
263597 |
263609 |
263611 |
263621 |
263647 |
263651 |
263657 |
263677 |
263723 |
263729 |
263737 |
263759 |
263761 |
263803 |
263819 |
263821 |
263827 |
263843 |
263849 |
263863 |
263867 |
263869 |
263881 |
263899 |
263909 |
263911 |
263927 |
263933 |
263941 |
263951 |
263953 |
263957 |
263983 |
264007 |
264013 |
264029 |
264031 |
264053 |
264059 |
264071 |
264083 |
264091 |
264101 |
264113 |
264127 |
264133 |
264137 |
264139 |
264167 |
264169 |
264179 |
264211 |
264221 |
264263 |
264269 |
264283 |
264289 |
264301 |
264323 |
264331 |
264343 |
264349 |
264353 |
264359 |
264371 |
264391 |
264403 |
264437 |
264443 |
264463 |
264487 |
264527 |
264529 |
264553 |
264559 |
264577 |
264581 |
264599 |
264601 |
264619 |
264631 |
264637 |
264643 |
264659 |
264697 |
264731 |
264739 |
264743 |
264749 |
264757 |
264763 |
264769 |
264779 |
264787 |
264791 |
264793 |
264811 |
264827 |
264829 |
264839 |
264871 |
264881 |
264889 |
264893 |
264899 |
264919 |
264931 |
264949 |
264959 |
264961 |
264977 |
264991 |
264997 |
265003 |
265007 |
265021 |
265037 |
265079 |
265091 |
265093 |
265117 |
265123 |
265129 |
265141 |
265151 |
265157 |
265163 |
265169 |
265193 |
265207 |
265231 |
265241 |
265247 |
265249 |
265261 |
265271 |
265273 |
265277 |
265313 |
265333 |
265337 |
265339 |
265381 |
265399 |
265403 |
265417 |
265423 |
265427 |
265451 |
265459 |
265471 |
265483 |
265493 |
265511 |
265513 |
265541 |
265543 |
265547 |
265561 |
265567 |
265571 |
265579 |
265607 |
265613 |
265619 |
265621 |
265703 |
265709 |
265711 |
265717 |
265729 |
265739 |
265747 |
265757 |
265781 |
265787 |
265807 |
265813 |
265819 |
265831 |
265841 |
265847 |
265861 |
265871 |
265873 |
265883 |
265891 |
265921 |
265957 |
265961 |
265987 |
266003 |
266009 |
266023 |
266027 |
266029 |
266047 |
266051 |
266053 |
266059 |
266081 |
266083 |
266089 |
266093 |
266099 |
266111 |
266117 |
266129 |
266137 |
266153 |
266159 |
266177 |
266183 |
266221 |
266239 |
266261 |
266269 |
266281 |
266291 |
266293 |
266297 |
266333 |
266351 |
266353 |
266359 |
266369 |
266381 |
266401 |
266411 |
266417 |
266447 |
266449 |
266477 |
266479 |
266489 |
266491 |
266521 |
266549 |
266587 |
266599 |
266603 |
266633 |
266641 |
266647 |
266663 |
266671 |
266677 |
266681 |
266683 |
266687 |
266689 |
266701 |
266711 |
266719 |
266759 |
266767 |
266797 |
266801 |
266821 |
266837 |
266839 |
266863 |
266867 |
266891 |
266897 |
266899 |
266909 |
266921 |
266927 |
266933 |
266947 |
266953 |
266957 |
266971 |
266977 |
266983 |
266993 |
266999 |
267017 |
267037 |
267049 |
267097 |
267131 |
267133 |
267139 |
267143 |
267167 |
267187 |
267193 |
267199 |
267203 |
267217 |
267227 |
267229 |
267233 |
267259 |
267271 |
267277 |
267299 |
267301 |
267307 |
267317 |
267341 |
267353 |
267373 |
267389 |
267391 |
267401 |
267403 |
267413 |
267419 |
267431 |
267433 |
267439 |
267451 |
267469 |
267479 |
267481 |
267493 |
267497 |
267511 |
267517 |
267521 |
267523 |
267541 |
267551 |
267557 |
267569 |
267581 |
267587 |
267593 |
267601 |
267611 |
267613 |
267629 |
267637 |
267643 |
267647 |
267649 |
267661 |
267667 |
267671 |
267677 |
267679 |
267713 |
267719 |
267721 |
267727 |
267737 |
267739 |
267749 |
267763 |
267781 |
267791 |
267797 |
267803 |
267811 |
267829 |
267833 |
267857 |
267863 |
267877 |
267887 |
267893 |
267899 |
267901 |
267907 |
267913 |
267929 |
267941 |
267959 |
267961 |
268003 |
268013 |
268043 |
268049 |
268063 |
268069 |
268091 |
268123 |
268133 |
268153 |
268171 |
268189 |
268199 |
268207 |
268211 |
268237 |
268253 |
268267 |
268271 |
268283 |
268291 |
268297 |
268343 |
268403 |
268439 |
268459 |
268487 |
268493 |
268501 |
268507 |
268517 |
268519 |
268529 |
268531 |
268537 |
268547 |
268573 |
268607 |
268613 |
268637 |
268643 |
268661 |
268693 |
268721 |
268729 |
268733 |
268747 |
268757 |
268759 |
268771 |
268777 |
268781 |
268783 |
268789 |
268811 |
268813 |
268817 |
268819 |
268823 |
268841 |
268843 |
268861 |
268883 |
268897 |
268909 |
268913 |
268921 |
268927 |
268937 |
268969 |
268973 |
268979 |
268993 |
268997 |
268999 |
269023 |
269029 |
269039 |
269041 |
269057 |
269063 |
269069 |
269089 |
269117 |
269131 |
269141 |
269167 |
269177 |
269179 |
269183 |
269189 |
269201 |
269209 |
269219 |
269221 |
269231 |
269237 |
269251 |
269257 |
269281 |
269317 |
269327 |
269333 |
269341 |
269351 |
269377 |
269383 |
269387 |
269389 |
269393 |
269413 |
269419 |
269429 |
269431 |
269441 |
269461 |
269473 |
269513 |
269519 |
269527 |
269539 |
269543 |
269561 |
269573 |
269579 |
269597 |
269617 |
269623 |
269641 |
269651 |
269663 |
269683 |
269701 |
269713 |
269719 |
269723 |
269741 |
269749 |
269761 |
269779 |
269783 |
269791 |
269851 |
269879 |
269887 |
269891 |
269897 |
269923 |
269939 |
269947 |
269953 |
269981 |
269987 |
270001 |
270029 |
270031 |
270037 |
270059 |
270071 |
270073 |
270097 |
270121 |
270131 |
270133 |
270143 |
270157 |
270163 |
270167 |
270191 |
270209 |
270217 |
270223 |
270229 |
270239 |
270241 |
270269 |
270271 |
270287 |
270299 |
270307 |
270311 |
270323 |
270329 |
270337 |
270343 |
270371 |
270379 |
270407 |
270421 |
270437 |
270443 |
270451 |
270461 |
270463 |
270493 |
270509 |
270527 |
270539 |
270547 |
270551 |
270553 |
270563 |
270577 |
270583 |
270587 |
270593 |
270601 |
270619 |
270631 |
270653 |
270659 |
270667 |
270679 |
270689 |
270701 |
270709 |
270719 |
270737 |
270749 |
270761 |
270763 |
270791 |
270797 |
270799 |
270821 |
270833 |
270841 |
270859 |
270899 |
270913 |
270923 |
270931 |
270937 |
270953 |
270961 |
270967 |
270973 |
271003 |
271013 |
271021 |
271027 |
271043 |
271057 |
271067 |
271079 |
271097 |
271109 |
271127 |
271129 |
271163 |
271169 |
271177 |
271181 |
271211 |
271217 |
271231 |
271241 |
271253 |
271261 |
271273 |
271277 |
271279 |
271289 |
271333 |
271351 |
271357 |
271363 |
271367 |
271393 |
271409 |
271429 |
271451 |
271463 |
271471 |
271483 |
271489 |
271499 |
271501 |
271517 |
271549 |
271553 |
271571 |
271573 |
271597 |
271603 |
271619 |
271637 |
271639 |
271651 |
271657 |
271693 |
271703 |
271723 |
271729 |
271753 |
271769 |
271771 |
271787 |
271807 |
271811 |
271829 |
271841 |
271849 |
271853 |
271861 |
271867 |
271879 |
271897 |
271903 |
271919 |
271927 |
271939 |
271967 |
271969 |
271981 |
272003 |
272009 |
272011 |
272029 |
272039 |
272053 |
272059 |
272093 |
272131 |
272141 |
272171 |
272179 |
272183 |
272189 |
272191 |
272201 |
272203 |
272227 |
272231 |
272249 |
272257 |
272263 |
272267 |
272269 |
272287 |
272299 |
272317 |
272329 |
272333 |
272341 |
272347 |
272351 |
272353 |
272359 |
272369 |
272381 |
272383 |
272399 |
272407 |
272411 |
272417 |
272423 |
272449 |
272453 |
272477 |
272507 |
272533 |
272537 |
272539 |
272549 |
272563 |
272567 |
272581 |
272603 |
272621 |
272651 |
272659 |
272683 |
272693 |
272717 |
272719 |
272737 |
272759 |
272761 |
272771 |
272777 |
272807 |
272809 |
272813 |
272863 |
272879 |
272887 |
272903 |
272911 |
272917 |
272927 |
272933 |
272959 |
272971 |
272981 |
272983 |
272989 |
272999 |
273001 |
273029 |
273043 |
273047 |
273059 |
273061 |
273067 |
273073 |
273083 |
273107 |
273113 |
273127 |
273131 |
273149 |
273157 |
273181 |
273187 |
273193 |
273233 |
273253 |
273269 |
273271 |
273281 |
273283 |
273289 |
273311 |
273313 |
273323 |
273349 |
273359 |
273367 |
273433 |
273457 |
273473 |
273503 |
273517 |
273521 |
273527 |
273551 |
273569 |
273601 |
273613 |
273617 |
273629 |
273641 |
273643 |
273653 |
273697 |
273709 |
273719 |
273727 |
273739 |
273773 |
273787 |
273797 |
273803 |
273821 |
273827 |
273857 |
273881 |
273899 |
273901 |
273913 |
273919 |
273929 |
273941 |
273943 |
273967 |
273971 |
273979 |
273997 |
274007 |
274019 |
274033 |
274061 |
274069 |
274081 |
274093 |
274103 |
274117 |
274121 |
274123 |
274139 |
274147 |
274163 |
274171 |
274177 |
274187 |
274199 |
274201 |
274213 |
274223 |
274237 |
274243 |
274259 |
274271 |
274277 |
274283 |
274301 |
274333 |
274349 |
274357 |
274361 |
274403 |
274423 |
274441 |
274451 |
274453 |
274457 |
274471 |
274489 |
274517 |
274529 |
274579 |
274583 |
274591 |
274609 |
274627 |
274661 |
274667 |
274679 |
274693 |
274697 |
274709 |
274711 |
274723 |
274739 |
274751 |
274777 |
274783 |
274787 |
274811 |
274817 |
274829 |
274831 |
274837 |
274843 |
274847 |
274853 |
274861 |
274867 |
274871 |
274889 |
274909 |
274931 |
274943 |
274951 |
274957 |
274961 |
274973 |
274993 |
275003 |
275027 |
275039 |
275047 |
275053 |
275059 |
275083 |
275087 |
275129 |
275131 |
275147 |
275153 |
275159 |
275161 |
275167 |
275183 |
275201 |
275207 |
275227 |
275251 |
275263 |
275269 |
275299 |
275309 |
275321 |
275323 |
275339 |
275357 |
275371 |
275389 |
275393 |
275399 |
275419 |
275423 |
275447 |
275449 |
275453 |
275459 |
275461 |
275489 |
275491 |
275503 |
275521 |
275531 |
275543 |
275549 |
275573 |
275579 |
275581 |
275591 |
275593 |
275599 |
275623 |
275641 |
275651 |
275657 |
275669 |
275677 |
275699 |
275711 |
275719 |
275729 |
275741 |
275767 |
275773 |
275783 |
275813 |
275827 |
275837 |
275881 |
275897 |
275911 |
275917 |
275921 |
275923 |
275929 |
275939 |
275941 |
275963 |
275969 |
275981 |
275987 |
275999 |
276007 |
276011 |
276019 |
276037 |
276041 |
276043 |
276047 |
276049 |
276079 |
276083 |
276091 |
276113 |
276137 |
276151 |
276173 |
276181 |
276187 |
276191 |
276209 |
276229 |
276239 |
276247 |
276251 |
276257 |
276277 |
276293 |
276319 |
276323 |
276337 |
276343 |
276347 |
276359 |
276371 |
276373 |
276389 |
276401 |
276439 |
276443 |
276449 |
276461 |
276467 |
276487 |
276499 |
276503 |
276517 |
276527 |
276553 |
276557 |
276581 |
276587 |
276589 |
276593 |
276599 |
276623 |
276629 |
276637 |
276671 |
276673 |
276707 |
276721 |
276739 |
276763 |
276767 |
276779 |
276781 |
276817 |
276821 |
276823 |
276827 |
276833 |
276839 |
276847 |
276869 |
276883 |
276901 |
276907 |
276917 |
276919 |
276929 |
276949 |
276953 |
276961 |
276977 |
277003 |
277007 |
277021 |
277051 |
277063 |
277073 |
277087 |
277097 |
277099 |
277157 |
277163 |
277169 |
277177 |
277183 |
277213 |
277217 |
277223 |
277231 |
277247 |
277259 |
277261 |
277273 |
277279 |
277297 |
277301 |
277309 |
277331 |
277363 |
277373 |
277411 |
277421 |
277427 |
277429 |
277483 |
277493 |
277499 |
277513 |
277531 |
277547 |
277549 |
277567 |
277577 |
277579 |
277597 |
277601 |
277603 |
277637 |
277639 |
277643 |
277657 |
277663 |
277687 |
277691 |
277703 |
277741 |
277747 |
277751 |
277757 |
277787 |
277789 |
277793 |
277813 |
277829 |
277847 |
277859 |
277883 |
277889 |
277891 |
277897 |
277903 |
277919 |
277961 |
277993 |
277999 |
278017 |
278029 |
278041 |
278051 |
278063 |
278071 |
278087 |
278111 |
278119 |
278123 |
278143 |
278147 |
278149 |
278177 |
278191 |
278207 |
278209 |
278219 |
278227 |
278233 |
278237 |
278261 |
278269 |
278279 |
278321 |
278329 |
278347 |
278353 |
278363 |
278387 |
278393 |
278413 |
278437 |
278459 |
278479 |
278489 |
278491 |
278497 |
278501 |
278503 |
278543 |
278549 |
278557 |
278561 |
278563 |
278581 |
278591 |
278609 |
278611 |
278617 |
278623 |
278627 |
278639 |
278651 |
278671 |
278687 |
278689 |
278701 |
278717 |
278741 |
278743 |
278753 |
278767 |
278801 |
278807 |
278809 |
278813 |
278819 |
278827 |
278843 |
278849 |
278867 |
278879 |
278881 |
278891 |
278903 |
278909 |
278911 |
278917 |
278947 |
278981 |
279001 |
279007 |
279023 |
279029 |
279047 |
279073 |
279109 |
279119 |
279121 |
279127 |
279131 |
279137 |
279143 |
279173 |
279179 |
279187 |
279203 |
279211 |
279221 |
279269 |
279311 |
279317 |
279329 |
279337 |
279353 |
279397 |
279407 |
279413 |
279421 |
279431 |
279443 |
279451 |
279479 |
279481 |
279511 |
279523 |
279541 |
279551 |
279553 |
279557 |
279571 |
279577 |
279583 |
279593 |
279607 |
279613 |
279619 |
279637 |
279641 |
279649 |
279659 |
279679 |
279689 |
279707 |
279709 |
279731 |
279751 |
279761 |
279767 |
279779 |
279817 |
279823 |
279847 |
279857 |
279863 |
279883 |
279913 |
279919 |
279941 |
279949 |
279967 |
279977 |
279991 |
280001 |
280009 |
280013 |
280031 |
280037 |
280061 |
280069 |
280097 |
280099 |
280103 |
280121 |
280129 |
280139 |
280183 |
280187 |
280199 |
280207 |
280219 |
280223 |
280229 |
280243 |
280249 |
280253 |
280277 |
280297 |
280303 |
280321 |
280327 |
280337 |
280339 |
280351 |
280373 |
280409 |
280411 |
280451 |
280463 |
280487 |
280499 |
280507 |
280513 |
280537 |
280541 |
280547 |
280549 |
280561 |
280583 |
280589 |
280591 |
280597 |
280603 |
280607 |
280613 |
280627 |
280639 |
280673 |
280681 |
280697 |
280699 |
280703 |
280711 |
280717 |
280729 |
280751 |
280759 |
280769 |
280771 |
280811 |
280817 |
280837 |
280843 |
280859 |
280871 |
280879 |
280883 |
280897 |
280909 |
280913 |
280921 |
280927 |
280933 |
280939 |
280949 |
280957 |
280963 |
280967 |
280979 |
280997 |
281023 |
281033 |
281053 |
281063 |
281069 |
281081 |
281117 |
281131 |
281153 |
281159 |
281167 |
281189 |
281191 |
281207 |
281227 |
281233 |
281243 |
281249 |
281251 |
281273 |
281279 |
281291 |
281297 |
281317 |
281321 |
281327 |
281339 |
281353 |
281357 |
281363 |
281381 |
281419 |
281423 |
281429 |
281431 |
281509 |
281527 |
281531 |
281539 |
281549 |
281551 |
281557 |
281563 |
281579 |
281581 |
281609 |
281621 |
281623 |
281627 |
281641 |
281647 |
281651 |
281653 |
281663 |
281669 |
281683 |
281717 |
281719 |
281737 |
281747 |
281761 |
281767 |
281777 |
281783 |
281791 |
281797 |
281803 |
281807 |
281833 |
281837 |
281839 |
281849 |
281857 |
281867 |
281887 |
281893 |
281921 |
281923 |
281927 |
281933 |
281947 |
281959 |
281971 |
281989 |
281993 |
282001 |
282011 |
282019 |
282053 |
282059 |
282071 |
282089 |
282091 |
282097 |
282101 |
282103 |
282127 |
282143 |
282157 |
282167 |
282221 |
282229 |
282239 |
282241 |
282253 |
282281 |
282287 |
282299 |
282307 |
282311 |
282313 |
282349 |
282377 |
282383 |
282389 |
282391 |
282407 |
282409 |
282413 |
282427 |
282439 |
282461 |
282481 |
282487 |
282493 |
282559 |
282563 |
282571 |
282577 |
282589 |
282599 |
282617 |
282661 |
282671 |
282677 |
282679 |
282683 |
282691 |
282697 |
282703 |
282707 |
282713 |
282767 |
282769 |
282773 |
282797 |
282809 |
282827 |
282833 |
282847 |
282851 |
282869 |
282881 |
282889 |
282907 |
282911 |
282913 |
282917 |
282959 |
282973 |
282977 |
282991 |
283001 |
283007 |
283009 |
283027 |
283051 |
283079 |
283093 |
283097 |
283099 |
283111 |
283117 |
283121 |
283133 |
283139 |
283159 |
283163 |
283181 |
283183 |
283193 |
283207 |
283211 |
283267 |
283277 |
283289 |
283303 |
283369 |
283397 |
283403 |
283411 |
283447 |
283463 |
283487 |
283489 |
283501 |
283511 |
283519 |
283541 |
283553 |
283571 |
283573 |
283579 |
283583 |
283601 |
283607 |
283609 |
283631 |
283637 |
283639 |
283669 |
283687 |
283697 |
283721 |
283741 |
283763 |
283769 |
283771 |
283793 |
283799 |
283807 |
283813 |
283817 |
283831 |
283837 |
283859 |
283861 |
283873 |
283909 |
283937 |
283949 |
283957 |
283961 |
283979 |
284003 |
284023 |
284041 |
284051 |
284057 |
284059 |
284083 |
284093 |
284111 |
284117 |
284129 |
284131 |
284149 |
284153 |
284159 |
284161 |
284173 |
284191 |
284201 |
284227 |
284231 |
284233 |
284237 |
284243 |
284261 |
284267 |
284269 |
284293 |
284311 |
284341 |
284357 |
284369 |
284377 |
284387 |
284407 |
284413 |
284423 |
284429 |
284447 |
284467 |
284477 |
284483 |
284489 |
284507 |
284509 |
284521 |
284527 |
284539 |
284551 |
284561 |
284573 |
284587 |
284591 |
284593 |
284623 |
284633 |
284651 |
284657 |
284659 |
284681 |
284689 |
284701 |
284707 |
284723 |
284729 |
284731 |
284737 |
284741 |
284743 |
284747 |
284749 |
284759 |
284777 |
284783 |
284803 |
284807 |
284813 |
284819 |
284831 |
284833 |
284839 |
284857 |
284881 |
284897 |
284899 |
284917 |
284927 |
284957 |
284969 |
284989 |
285007 |
285023 |
285031 |
285049 |
285071 |
285079 |
285091 |
285101 |
285113 |
285119 |
285121 |
285139 |
285151 |
285161 |
285179 |
285191 |
285199 |
285221 |
285227 |
285251 |
285281 |
285283 |
285287 |
285289 |
285301 |
285317 |
285343 |
285377 |
285421 |
285433 |
285451 |
285457 |
285463 |
285469 |
285473 |
285497 |
285517 |
285521 |
285533 |
285539 |
285553 |
285557 |
285559 |
285569 |
285599 |
285611 |
285613 |
285629 |
285631 |
285641 |
285643 |
285661 |
285667 |
285673 |
285697 |
285707 |
285709 |
285721 |
285731 |
285749 |
285757 |
285763 |
285767 |
285773 |
285781 |
285823 |
285827 |
285839 |
285841 |
285871 |
285937 |
285949 |
285953 |
285977 |
285979 |
285983 |
285997 |
286001 |
286009 |
286019 |
286043 |
286049 |
286061 |
286063 |
286073 |
286103 |
286129 |
286163 |
286171 |
286199 |
286243 |
286249 |
286289 |
286301 |
286333 |
286367 |
286369 |
286381 |
286393 |
286397 |
286411 |
286421 |
286427 |
286453 |
286457 |
286459 |
286469 |
286477 |
286483 |
286487 |
286493 |
286499 |
286513 |
286519 |
286541 |
286543 |
286547 |
286553 |
286589 |
286591 |
286609 |
286613 |
286619 |
286633 |
286651 |
286673 |
286687 |
286697 |
286703 |
286711 |
286721 |
286733 |
286751 |
286753 |
286763 |
286771 |
286777 |
286789 |
286801 |
286813 |
286831 |
286859 |
286873 |
286927 |
286973 |
286981 |
286987 |
286999 |
287003 |
287047 |
287057 |
287059 |
287087 |
287093 |
287099 |
287107 |
287117 |
287137 |
287141 |
287149 |
287159 |
287167 |
287173 |
287179 |
287191 |
287219 |
287233 |
287237 |
287239 |
287251 |
287257 |
287269 |
287279 |
287281 |
287291 |
287297 |
287321 |
287327 |
287333 |
287341 |
287347 |
287383 |
287387 |
287393 |
287437 |
287449 |
287491 |
287501 |
287503 |
287537 |
287549 |
287557 |
287579 |
287597 |
287611 |
287629 |
287669 |
287671 |
287681 |
287689 |
287701 |
287731 |
287747 |
287783 |
287789 |
287801 |
287813 |
287821 |
287849 |
287851 |
287857 |
287863 |
287867 |
287873 |
287887 |
287921 |
287933 |
287939 |
287977 |
288007 |
288023 |
288049 |
288053 |
288061 |
288077 |
288089 |
288109 |
288137 |
288179 |
288181 |
288191 |
288199 |
288203 |
288209 |
288227 |
288241 |
288247 |
288257 |
288283 |
288293 |
288307 |
288313 |
288317 |
288349 |
288359 |
288361 |
288383 |
288389 |
288403 |
288413 |
288427 |
288433 |
288461 |
288467 |
288481 |
288493 |
288499 |
288527 |
288529 |
288539 |
288551 |
288559 |
288571 |
288577 |
288583 |
288647 |
288649 |
288653 |
288661 |
288679 |
288683 |
288689 |
288697 |
288731 |
288733 |
288751 |
288767 |
288773 |
288803 |
288817 |
288823 |
288833 |
288839 |
288851 |
288853 |
288877 |
288907 |
288913 |
288929 |
288931 |
288947 |
288973 |
288979 |
288989 |
288991 |
288997 |
289001 |
289019 |
289021 |
289031 |
289033 |
289039 |
289049 |
289063 |
289067 |
289099 |
289103 |
289109 |
289111 |
289127 |
289129 |
289139 |
289141 |
289151 |
289169 |
289171 |
289181 |
289189 |
289193 |
289213 |
289241 |
289243 |
289249 |
289253 |
289273 |
289283 |
289291 |
289297 |
289309 |
289319 |
289343 |
289349 |
289361 |
289369 |
289381 |
289397 |
289417 |
289423 |
289439 |
289453 |
289463 |
289469 |
289477 |
289489 |
289511 |
289543 |
289559 |
289573 |
289577 |
289589 |
289603 |
289607 |
289637 |
289643 |
289657 |
289669 |
289717 |
289721 |
289727 |
289733 |
289741 |
289759 |
289763 |
289771 |
289789 |
289837 |
289841 |
289843 |
289847 |
289853 |
289859 |
289871 |
289889 |
289897 |
289937 |
289951 |
289957 |
289967 |
289973 |
289987 |
289999 |
290011 |
290021 |
290023 |
290027 |
290033 |
290039 |
290041 |
290047 |
290057 |
290083 |
290107 |
290113 |
290119 |
290137 |
290141 |
290161 |
290183 |
290189 |
290201 |
290209 |
290219 |
290233 |
290243 |
290249 |
290317 |
290327 |
290347 |
290351 |
290359 |
290369 |
290383 |
290393 |
290399 |
290419 |
290429 |
290441 |
290443 |
290447 |
290471 |
290473 |
290489 |
290497 |
290509 |
290527 |
290531 |
290533 |
290539 |
290557 |
290593 |
290597 |
290611 |
290617 |
290621 |
290623 |
290627 |
290657 |
290659 |
290663 |
290669 |
290671 |
290677 |
290701 |
290707 |
290711 |
290737 |
290761 |
290767 |
290791 |
290803 |
290821 |
290827 |
290837 |
290839 |
290861 |
290869 |
290879 |
290897 |
290923 |
290959 |
290963 |
290971 |
290987 |
290993 |
290999 |
291007 |
291013 |
291037 |
291041 |
291043 |
291077 |
291089 |
291101 |
291103 |
291107 |
291113 |
291143 |
291167 |
291169 |
291173 |
291191 |
291199 |
291209 |
291217 |
291253 |
291257 |
291271 |
291287 |
291293 |
291299 |
291331 |
291337 |
291349 |
291359 |
291367 |
291371 |
291373 |
291377 |
291419 |
291437 |
291439 |
291443 |
291457 |
291481 |
291491 |
291503 |
291509 |
291521 |
291539 |
291547 |
291559 |
291563 |
291569 |
291619 |
291647 |
291649 |
291661 |
291677 |
291689 |
291691 |
291701 |
291721 |
291727 |
291743 |
291751 |
291779 |
291791 |
291817 |
291829 |
291833 |
291853 |
291857 |
291869 |
291877 |
291887 |
291899 |
291901 |
291923 |
291971 |
291979 |
291983 |
291997 |
292021 |
292027 |
292037 |
292057 |
292069 |
292079 |
292081 |
292091 |
292093 |
292133 |
292141 |
292147 |
292157 |
292181 |
292183 |
292223 |
292231 |
292241 |
292249 |
292267 |
292283 |
292301 |
292309 |
292319 |
292343 |
292351 |
292363 |
292367 |
292381 |
292393 |
292427 |
292441 |
292459 |
292469 |
292471 |
292477 |
292483 |
292489 |
292493 |
292517 |
292531 |
292541 |
292549 |
292561 |
292573 |
292577 |
292601 |
292627 |
292631 |
292661 |
292667 |
292673 |
292679 |
292693 |
292703 |
292709 |
292711 |
292717 |
292727 |
292753 |
292759 |
292777 |
292793 |
292801 |
292807 |
292819 |
292837 |
292841 |
292849 |
292867 |
292879 |
292909 |
292921 |
292933 |
292969 |
292973 |
292979 |
292993 |
293021 |
293071 |
293081 |
293087 |
293093 |
293099 |
293107 |
293123 |
293129 |
293147 |
293149 |
293173 |
293177 |
293179 |
293201 |
293207 |
293213 |
293221 |
293257 |
293261 |
293263 |
293269 |
293311 |
293329 |
293339 |
293351 |
293357 |
293399 |
293413 |
293431 |
293441 |
293453 |
293459 |
293467 |
293473 |
293483 |
293507 |
293543 |
293599 |
293603 |
293617 |
293621 |
293633 |
293639 |
293651 |
293659 |
293677 |
293681 |
293701 |
293717 |
293723 |
293729 |
293749 |
293767 |
293773 |
293791 |
293803 |
293827 |
293831 |
293861 |
293863 |
293893 |
293899 |
293941 |
293957 |
293983 |
293989 |
293999 |
294001 |
294013 |
294023 |
294029 |
294043 |
294053 |
294059 |
294067 |
294103 |
294127 |
294131 |
294149 |
294157 |
294167 |
294169 |
294179 |
294181 |
294199 |
294211 |
294223 |
294227 |
294241 |
294247 |
294251 |
294269 |
294277 |
294289 |
294293 |
294311 |
294313 |
294317 |
294319 |
294337 |
294341 |
294347 |
294353 |
294383 |
294391 |
294397 |
294403 |
294431 |
294439 |
294461 |
294467 |
294479 |
294499 |
294509 |
294523 |
294529 |
294551 |
294563 |
294629 |
294641 |
294647 |
294649 |
294659 |
294673 |
294703 |
294731 |
294751 |
294757 |
294761 |
294773 |
294781 |
294787 |
294793 |
294799 |
294803 |
294809 |
294821 |
294829 |
294859 |
294869 |
294887 |
294893 |
294911 |
294919 |
294923 |
294947 |
294949 |
294953 |
294979 |
294989 |
294991 |
294997 |
295007 |
295033 |
295037 |
295039 |
295049 |
295073 |
295079 |
295081 |
295111 |
295123 |
295129 |
295153 |
295187 |
295199 |
295201 |
295219 |
295237 |
295247 |
295259 |
295271 |
295277 |
295283 |
295291 |
295313 |
295319 |
295333 |
295357 |
295363 |
295387 |
295411 |
295417 |
295429 |
295433 |
295439 |
295441 |
295459 |
295513 |
295517 |
295541 |
295553 |
295567 |
295571 |
295591 |
295601 |
295663 |
295693 |
295699 |
295703 |
295727 |
295751 |
295759 |
295769 |
295777 |
295787 |
295819 |
295831 |
295837 |
295843 |
295847 |
295853 |
295861 |
295871 |
295873 |
295877 |
295879 |
295901 |
295903 |
295909 |
295937 |
295943 |
295949 |
295951 |
295961 |
295973 |
295993 |
296011 |
296017 |
296027 |
296041 |
296047 |
296071 |
296083 |
296099 |
296117 |
296129 |
296137 |
296159 |
296183 |
296201 |
296213 |
296221 |
296237 |
296243 |
296249 |
296251 |
296269 |
296273 |
296279 |
296287 |
296299 |
296347 |
296353 |
296363 |
296369 |
296377 |
296437 |
296441 |
296473 |
296477 |
296479 |
296489 |
296503 |
296507 |
296509 |
296519 |
296551 |
296557 |
296561 |
296563 |
296579 |
296581 |
296587 |
296591 |
296627 |
296651 |
296663 |
296669 |
296683 |
296687 |
296693 |
296713 |
296719 |
296729 |
296731 |
296741 |
296749 |
296753 |
296767 |
296771 |
296773 |
296797 |
296801 |
296819 |
296827 |
296831 |
296833 |
296843 |
296909 |
296911 |
296921 |
296929 |
296941 |
296969 |
296971 |
296981 |
296983 |
296987 |
297019 |
297023 |
297049 |
297061 |
297067 |
297079 |
297083 |
297097 |
297113 |
297133 |
297151 |
297161 |
297169 |
297191 |
297233 |
297247 |
297251 |
297257 |
297263 |
297289 |
297317 |
297359 |
297371 |
297377 |
297391 |
297397 |
297403 |
297421 |
297439 |
297457 |
297467 |
297469 |
297481 |
297487 |
297503 |
297509 |
297523 |
297533 |
297581 |
297589 |
297601 |
297607 |
297613 |
297617 |
297623 |
297629 |
297641 |
297659 |
297683 |
297691 |
297707 |
297719 |
297727 |
297757 |
297779 |
297793 |
297797 |
297809 |
297811 |
297833 |
297841 |
297853 |
297881 |
297889 |
297893 |
297907 |
297911 |
297931 |
297953 |
297967 |
297971 |
297989 |
297991 |
298013 |
298021 |
298031 |
298043 |
298049 |
298063 |
298087 |
298093 |
298099 |
298153 |
298157 |
298159 |
298169 |
298171 |
298187 |
298201 |
298211 |
298213 |
298223 |
298237 |
298247 |
298261 |
298283 |
298303 |
298307 |
298327 |
298339 |
298343 |
298349 |
298369 |
298373 |
298399 |
298409 |
298411 |
298427 |
298451 |
298477 |
298483 |
298513 |
298559 |
298579 |
298583 |
298589 |
298601 |
298607 |
298621 |
298631 |
298651 |
298667 |
298679 |
298681 |
298687 |
298691 |
298693 |
298709 |
298723 |
298733 |
298757 |
298759 |
298777 |
298799 |
298801 |
298817 |
298819 |
298841 |
298847 |
298853 |
298861 |
298897 |
298937 |
298943 |
298993 |
298999 |
299011 |
299017 |
299027 |
299029 |
299053 |
299059 |
299063 |
299087 |
299099 |
299107 |
299113 |
299137 |
299147 |
299171 |
299179 |
299191 |
299197 |
299213 |
299239 |
299261 |
299281 |
299287 |
299311 |
299317 |
299329 |
299333 |
299357 |
299359 |
299363 |
299371 |
299389 |
299393 |
299401 |
299417 |
299419 |
299447 |
299471 |
299473 |
299477 |
299479 |
299501 |
299513 |
299521 |
299527 |
299539 |
299567 |
299569 |
299603 |
299617 |
299623 |
299653 |
299671 |
299681 |
299683 |
299699 |
299701 |
299711 |
299723 |
299731 |
299743 |
299749 |
299771 |
299777 |
299807 |
299843 |
299857 |
299861 |
299881 |
299891 |
299903 |
299909 |
299933 |
299941 |
299951 |
299969 |
299977 |
299983 |
299993 |
300007 |
300017 |
300023 |
300043 |
300073 |
300089 |
300109 |
300119 |
300137 |
300149 |
300151 |
300163 |
300187 |
300191 |
300193 |
300221 |
300229 |
300233 |
300239 |
300247 |
300277 |
300299 |
300301 |
300317 |
300319 |
300323 |
300331 |
300343 |
300347 |
300367 |
300397 |
300413 |
300427 |
300431 |
300439 |
300463 |
300481 |
300491 |
300493 |
300497 |
300499 |
300511 |
300557 |
300569 |
300581 |
300583 |
300589 |
300593 |
300623 |
300631 |
300647 |
300649 |
300661 |
300667 |
300673 |
300683 |
300691 |
300719 |
300721 |
300733 |
300739 |
300743 |
300749 |
300757 |
300761 |
300779 |
300787 |
300799 |
300809 |
300821 |
300823 |
300851 |
300857 |
300869 |
300877 |
300889 |
300893 |
300929 |
300931 |
300953 |
300961 |
300967 |
300973 |
300977 |
300997 |
301013 |
301027 |
301039 |
301051 |
301057 |
301073 |
301079 |
301123 |
301127 |
301141 |
301153 |
301159 |
301177 |
301181 |
301183 |
301211 |
301219 |
301237 |
301241 |
301243 |
301247 |
301267 |
301303 |
301319 |
301331 |
301333 |
301349 |
301361 |
301363 |
301381 |
301403 |
301409 |
301423 |
301429 |
301447 |
301459 |
301463 |
301471 |
301487 |
301489 |
301493 |
301501 |
301531 |
301577 |
301579 |
301583 |
301591 |
301601 |
301619 |
301627 |
301643 |
301649 |
301657 |
301669 |
301673 |
301681 |
301703 |
301711 |
301747 |
301751 |
301753 |
301759 |
301789 |
301793 |
301813 |
301831 |
301841 |
301843 |
301867 |
301877 |
301897 |
301901 |
301907 |
301913 |
301927 |
301933 |
301943 |
301949 |
301979 |
301991 |
301993 |
301997 |
301999 |
302009 |
302053 |
302111 |
302123 |
302143 |
302167 |
302171 |
302173 |
302189 |
302191 |
302213 |
302221 |
302227 |
302261 |
302273 |
302279 |
302287 |
302297 |
302299 |
302317 |
302329 |
302399 |
302411 |
302417 |
302429 |
302443 |
302459 |
302483 |
302507 |
302513 |
302551 |
302563 |
302567 |
302573 |
302579 |
302581 |
302587 |
302593 |
302597 |
302609 |
302629 |
302647 |
302663 |
302681 |
302711 |
302723 |
302747 |
302759 |
302767 |
302779 |
302791 |
302801 |
302831 |
302833 |
302837 |
302843 |
302851 |
302857 |
302873 |
302891 |
302903 |
302909 |
302921 |
302927 |
302941 |
302959 |
302969 |
302971 |
302977 |
302983 |
302989 |
302999 |
303007 |
303011 |
303013 |
303019 |
303029 |
303049 |
303053 |
303073 |
303089 |
303091 |
303097 |
303119 |
303139 |
303143 |
303151 |
303157 |
303187 |
303217 |
303257 |
303271 |
303283 |
303287 |
303293 |
303299 |
303307 |
303313 |
303323 |
303337 |
303341 |
303361 |
303367 |
303371 |
303377 |
303379 |
303389 |
303409 |
303421 |
303431 |
303463 |
303469 |
303473 |
303491 |
303493 |
303497 |
303529 |
303539 |
303547 |
303551 |
303553 |
303571 |
303581 |
303587 |
303593 |
303613 |
303617 |
303619 |
303643 |
303647 |
303649 |
303679 |
303683 |
303689 |
303691 |
303703 |
303713 |
303727 |
303731 |
303749 |
303767 |
303781 |
303803 |
303817 |
303827 |
303839 |
303859 |
303871 |
303889 |
303907 |
303917 |
303931 |
303937 |
303959 |
303983 |
303997 |
304009 |
304013 |
304021 |
304033 |
304039 |
304049 |
304063 |
304067 |
304069 |
304081 |
304091 |
304099 |
304127 |
304151 |
304153 |
304163 |
304169 |
304193 |
304211 |
304217 |
304223 |
304253 |
304259 |
304279 |
304301 |
304303 |
304331 |
304349 |
304357 |
304363 |
304373 |
304391 |
304393 |
304411 |
304417 |
304429 |
304433 |
304439 |
304457 |
304459 |
304477 |
304481 |
304489 |
304501 |
304511 |
304517 |
304523 |
304537 |
304541 |
304553 |
304559 |
304561 |
304597 |
304609 |
304631 |
304643 |
304651 |
304663 |
304687 |
304709 |
304723 |
304729 |
304739 |
304751 |
304757 |
304763 |
304771 |
304781 |
304789 |
304807 |
304813 |
304831 |
304847 |
304849 |
304867 |
304879 |
304883 |
304897 |
304901 |
304903 |
304907 |
304933 |
304937 |
304943 |
304949 |
304961 |
304979 |
304981 |
305017 |
305021 |
305023 |
305029 |
305033 |
305047 |
305069 |
305093 |
305101 |
305111 |
305113 |
305119 |
305131 |
305143 |
305147 |
305209 |
305219 |
305231 |
305237 |
305243 |
305267 |
305281 |
305297 |
305329 |
305339 |
305351 |
305353 |
305363 |
305369 |
305377 |
305401 |
305407 |
305411 |
305413 |
305419 |
305423 |
305441 |
305449 |
305471 |
305477 |
305479 |
305483 |
305489 |
305497 |
305521 |
305533 |
305551 |
305563 |
305581 |
305593 |
305597 |
305603 |
305611 |
305621 |
305633 |
305639 |
305663 |
305717 |
305719 |
305741 |
305743 |
305749 |
305759 |
305761 |
305771 |
305783 |
305803 |
305821 |
305839 |
305849 |
305857 |
305861 |
305867 |
305873 |
305917 |
305927 |
305933 |
305947 |
305971 |
305999 |
306011 |
306023 |
306029 |
306041 |
306049 |
306083 |
306091 |
306121 |
306133 |
306139 |
306149 |
306157 |
306167 |
306169 |
306191 |
306193 |
306209 |
306239 |
306247 |
306253 |
306259 |
306263 |
306301 |
306329 |
306331 |
306347 |
306349 |
306359 |
306367 |
306377 |
306389 |
306407 |
306419 |
306421 |
306431 |
306437 |
306457 |
306463 |
306473 |
306479 |
306491 |
306503 |
306511 |
306517 |
306529 |
306533 |
306541 |
306563 |
306577 |
306587 |
306589 |
306643 |
306653 |
306661 |
306689 |
306701 |
306703 |
306707 |
306727 |
306739 |
306749 |
306763 |
306781 |
306809 |
306821 |
306827 |
306829 |
306847 |
306853 |
306857 |
306871 |
306877 |
306883 |
306893 |
306899 |
306913 |
306919 |
306941 |
306947 |
306949 |
306953 |
306991 |
307009 |
307019 |
307031 |
307033 |
307067 |
307079 |
307091 |
307093 |
307103 |
307121 |
307129 |
307147 |
307163 |
307169 |
307171 |
307187 |
307189 |
307201 |
307243 |
307253 |
307259 |
307261 |
307267 |
307273 |
307277 |
307283 |
307289 |
307301 |
307337 |
307339 |
307361 |
307367 |
307381 |
307397 |
307399 |
307409 |
307423 |
307451 |
307471 |
307481 |
307511 |
307523 |
307529 |
307537 |
307543 |
307577 |
307583 |
307589 |
307609 |
307627 |
307631 |
307633 |
307639 |
307651 |
307669 |
307687 |
307691 |
307693 |
307711 |
307733 |
307759 |
307817 |
307823 |
307831 |
307843 |
307859 |
307871 |
307873 |
307891 |
307903 |
307919 |
307939 |
307969 |
308003 |
308017 |
308027 |
308041 |
308051 |
308081 |
308093 |
308101 |
308107 |
308117 |
308129 |
308137 |
308141 |
308149 |
308153 |
308213 |
308219 |
308249 |
308263 |
308291 |
308293 |
308303 |
308309 |
308311 |
308317 |
308323 |
308327 |
308333 |
308359 |
308383 |
308411 |
308423 |
308437 |
308447 |
308467 |
308489 |
308491 |
308501 |
308507 |
308509 |
308519 |
308521 |
308527 |
308537 |
308551 |
308569 |
308573 |
308587 |
308597 |
308621 |
308639 |
308641 |
308663 |
308681 |
308701 |
308713 |
308723 |
308761 |
308773 |
308801 |
308809 |
308813 |
308827 |
308849 |
308851 |
308857 |
308887 |
308899 |
308923 |
308927 |
308929 |
308933 |
308939 |
308951 |
308989 |
308999 |
309007 |
309011 |
309013 |
309019 |
309031 |
309037 |
309059 |
309079 |
309083 |
309091 |
309107 |
309109 |
309121 |
309131 |
309137 |
309157 |
309167 |
309173 |
309193 |
309223 |
309241 |
309251 |
309259 |
309269 |
309271 |
309277 |
309289 |
309293 |
309311 |
309313 |
309317 |
309359 |
309367 |
309371 |
309391 |
309403 |
309433 |
309437 |
309457 |
309461 |
309469 |
309479 |
309481 |
309493 |
309503 |
309521 |
309523 |
309539 |
309541 |
309559 |
309571 |
309577 |
309583 |
309599 |
309623 |
309629 |
309637 |
309667 |
309671 |
309677 |
309707 |
309713 |
309731 |
309737 |
309769 |
309779 |
309781 |
309797 |
309811 |
309823 |
309851 |
309853 |
309857 |
309877 |
309899 |
309929 |
309931 |
309937 |
309977 |
309989 |
310019 |
310021 |
310027 |
310043 |
310049 |
310081 |
310087 |
310091 |
310111 |
310117 |
310127 |
310129 |
310169 |
310181 |
310187 |
310223 |
310229 |
310231 |
310237 |
310243 |
310273 |
310283 |
310291 |
310313 |
310333 |
310357 |
310361 |
310363 |
310379 |
310397 |
310423 |
310433 |
310439 |
310447 |
310459 |
310463 |
310481 |
310489 |
310501 |
310507 |
310511 |
310547 |
310553 |
310559 |
310567 |
310571 |
310577 |
310591 |
310627 |
310643 |
310663 |
310693 |
310697 |
310711 |
310721 |
310727 |
310729 |
310733 |
310741 |
310747 |
310771 |
310781 |
310789 |
310801 |
310819 |
310823 |
310829 |
310831 |
310861 |
310867 |
310883 |
310889 |
310901 |
310927 |
310931 |
310949 |
310969 |
310987 |
310997 |
311009 |
311021 |
311027 |
311033 |
311041 |
311099 |
311111 |
311123 |
311137 |
311153 |
311173 |
311177 |
311183 |
311189 |
311197 |
311203 |
311237 |
311279 |
311291 |
311293 |
311299 |
311303 |
311323 |
311329 |
311341 |
311347 |
311359 |
311371 |
311393 |
311407 |
311419 |
311447 |
311453 |
311473 |
311533 |
311537 |
311539 |
311551 |
311557 |
311561 |
311567 |
311569 |
311603 |
311609 |
311653 |
311659 |
311677 |
311681 |
311683 |
311687 |
311711 |
311713 |
311737 |
311743 |
311747 |
311749 |
311791 |
311803 |
311807 |
311821 |
311827 |
311867 |
311869 |
311881 |
311897 |
311951 |
311957 |
311963 |
311981 |
312007 |
312023 |
312029 |
312031 |
312043 |
312047 |
312071 |
312073 |
312083 |
312089 |
312101 |
312107 |
312121 |
312161 |
312197 |
312199 |
312203 |
312209 |
312211 |
312217 |
312229 |
312233 |
312241 |
312251 |
312253 |
312269 |
312281 |
312283 |
312289 |
312311 |
312313 |
312331 |
312343 |
312349 |
312353 |
312371 |
312383 |
312397 |
312401 |
312407 |
312413 |
312427 |
312451 |
312469 |
312509 |
312517 |
312527 |
312551 |
312553 |
312563 |
312581 |
312583 |
312589 |
312601 |
312617 |
312619 |
312623 |
312643 |
312673 |
312677 |
312679 |
312701 |
312703 |
312709 |
312727 |
312737 |
312743 |
312757 |
312773 |
312779 |
312799 |
312839 |
312841 |
312857 |
312863 |
312887 |
312899 |
312929 |
312931 |
312937 |
312941 |
312943 |
312967 |
312971 |
312979 |
312989 |
313003 |
313009 |
313031 |
313037 |
313081 |
313087 |
313109 |
313127 |
313129 |
313133 |
313147 |
313151 |
313153 |
313163 |
313207 |
313211 |
313219 |
313241 |
313249 |
313267 |
313273 |
313289 |
313297 |
313301 |
313307 |
313321 |
313331 |
313333 |
313343 |
313351 |
313373 |
313381 |
313387 |
313399 |
313409 |
313471 |
313477 |
313507 |
313517 |
313543 |
313549 |
313553 |
313561 |
313567 |
313571 |
313583 |
313589 |
313597 |
313603 |
313613 |
313619 |
313637 |
313639 |
313661 |
313669 |
313679 |
313699 |
313711 |
313717 |
313721 |
313727 |
313739 |
313741 |
313763 |
313777 |
313783 |
313829 |
313849 |
313853 |
313879 |
313883 |
313889 |
313897 |
313909 |
313921 |
313931 |
313933 |
313949 |
313961 |
313969 |
313979 |
313981 |
313987 |
313991 |
313993 |
313997 |
314003 |
314021 |
314059 |
314063 |
314077 |
314107 |
314113 |
314117 |
314129 |
314137 |
314159 |
314161 |
314173 |
314189 |
314213 |
314219 |
314227 |
314233 |
314239 |
314243 |
314257 |
314261 |
314263 |
314267 |
314299 |
314329 |
314339 |
314351 |
314357 |
314359 |
314399 |
314401 |
314407 |
314423 |
314441 |
314453 |
314467 |
314491 |
314497 |
314513 |
314527 |
314543 |
314549 |
314569 |
314581 |
314591 |
314597 |
314599 |
314603 |
314623 |
314627 |
314641 |
314651 |
314693 |
314707 |
314711 |
314719 |
314723 |
314747 |
314761 |
314771 |
314777 |
314779 |
314807 |
314813 |
314827 |
314851 |
314879 |
314903 |
314917 |
314927 |
314933 |
314953 |
314957 |
314983 |
314989 |
315011 |
315013 |
315037 |
315047 |
315059 |
315067 |
315083 |
315097 |
315103 |
315109 |
315127 |
315179 |
315181 |
315193 |
315199 |
315223 |
315247 |
315251 |
315257 |
315269 |
315281 |
315313 |
315349 |
315361 |
315373 |
315377 |
315389 |
315407 |
315409 |
315421 |
315437 |
315449 |
315451 |
315461 |
315467 |
315481 |
315493 |
315517 |
315521 |
315527 |
315529 |
315547 |
315551 |
315559 |
315569 |
315589 |
315593 |
315599 |
315613 |
315617 |
315631 |
315643 |
315671 |
315677 |
315691 |
315697 |
315701 |
315703 |
315739 |
315743 |
315751 |
315779 |
315803 |
315811 |
315829 |
315851 |
315857 |
315881 |
315883 |
315893 |
315899 |
315907 |
315937 |
315949 |
315961 |
315967 |
315977 |
316003 |
316031 |
316033 |
316037 |
316051 |
316067 |
316073 |
316087 |
316097 |
316109 |
316133 |
316139 |
316153 |
316177 |
316189 |
316193 |
316201 |
316213 |
316219 |
316223 |
316241 |
316243 |
316259 |
316271 |
316291 |
316297 |
316301 |
316321 |
316339 |
316343 |
316363 |
316373 |
316391 |
316403 |
316423 |
316429 |
316439 |
316453 |
316469 |
316471 |
316493 |
316499 |
316501 |
316507 |
316531 |
316567 |
316571 |
316577 |
316583 |
316621 |
316633 |
316637 |
316649 |
316661 |
316663 |
316681 |
316691 |
316697 |
316699 |
316703 |
316717 |
316753 |
316759 |
316769 |
316777 |
316783 |
316793 |
316801 |
316817 |
316819 |
316847 |
316853 |
316859 |
316861 |
316879 |
316891 |
316903 |
316907 |
316919 |
316937 |
316951 |
316957 |
316961 |
316991 |
317003 |
317011 |
317021 |
317029 |
317047 |
317063 |
317071 |
317077 |
317087 |
317089 |
317123 |
317159 |
317171 |
317179 |
317189 |
317197 |
317209 |
317227 |
317257 |
317263 |
317267 |
317269 |
317279 |
317321 |
317323 |
317327 |
317333 |
317351 |
317353 |
317363 |
317371 |
317399 |
317411 |
317419 |
317431 |
317437 |
317453 |
317459 |
317483 |
317489 |
317491 |
317503 |
317539 |
317557 |
317563 |
317587 |
317591 |
317593 |
317599 |
317609 |
317617 |
317621 |
317651 |
317663 |
317671 |
317693 |
317701 |
317711 |
317717 |
317729 |
317731 |
317741 |
317743 |
317771 |
317773 |
317777 |
317783 |
317789 |
317797 |
317827 |
317831 |
317839 |
317857 |
317887 |
317903 |
317921 |
317923 |
317957 |
317959 |
317963 |
317969 |
317971 |
317983 |
317987 |
318001 |
318007 |
318023 |
318077 |
318103 |
318107 |
318127 |
318137 |
318161 |
318173 |
318179 |
318181 |
318191 |
318203 |
318209 |
318211 |
318229 |
318233 |
318247 |
318259 |
318271 |
318281 |
318287 |
318289 |
318299 |
318301 |
318313 |
318319 |
318323 |
318337 |
318347 |
318349 |
318377 |
318403 |
318407 |
318419 |
318431 |
318443 |
318457 |
318467 |
318473 |
318503 |
318523 |
318557 |
318559 |
318569 |
318581 |
318589 |
318601 |
318629 |
318641 |
318653 |
318671 |
318677 |
318679 |
318683 |
318691 |
318701 |
318713 |
318737 |
318743 |
318749 |
318751 |
318781 |
318793 |
318809 |
318811 |
318817 |
318823 |
318833 |
318841 |
318863 |
318881 |
318883 |
318889 |
318907 |
318911 |
318917 |
318919 |
318949 |
318979 |
319001 |
319027 |
319031 |
319037 |
319049 |
319057 |
319061 |
319069 |
319093 |
319097 |
319117 |
319127 |
319129 |
319133 |
319147 |
319159 |
319169 |
319183 |
319201 |
319211 |
319223 |
319237 |
319259 |
319279 |
319289 |
319313 |
319321 |
319327 |
319339 |
319343 |
319351 |
319357 |
319387 |
319391 |
319399 |
319411 |
319427 |
319433 |
319439 |
319441 |
319453 |
319469 |
319477 |
319483 |
319489 |
319499 |
319511 |
319519 |
319541 |
319547 |
319567 |
319577 |
319589 |
319591 |
319601 |
319607 |
319639 |
319673 |
319679 |
319681 |
319687 |
319691 |
319699 |
319727 |
319729 |
319733 |
319747 |
319757 |
319763 |
319811 |
319817 |
319819 |
319829 |
319831 |
319849 |
319883 |
319897 |
319901 |
319919 |
319927 |
319931 |
319937 |
319967 |
319973 |
319981 |
319993 |
320009 |
320011 |
320027 |
320039 |
320041 |
320053 |
320057 |
320063 |
320081 |
320083 |
320101 |
320107 |
320113 |
320119 |
320141 |
320143 |
320149 |
320153 |
320179 |
320209 |
320213 |
320219 |
320237 |
320239 |
320267 |
320269 |
320273 |
320291 |
320293 |
320303 |
320317 |
320329 |
320339 |
320377 |
320387 |
320389 |
320401 |
320417 |
320431 |
320449 |
320471 |
320477 |
320483 |
320513 |
320521 |
320533 |
320539 |
320561 |
320563 |
320591 |
320609 |
320611 |
320627 |
320647 |
320657 |
320659 |
320669 |
320687 |
320693 |
320699 |
320713 |
320741 |
320759 |
320767 |
320791 |
320821 |
320833 |
320839 |
320843 |
320851 |
320861 |
320867 |
320899 |
320911 |
320923 |
320927 |
320939 |
320941 |
320953 |
321007 |
321017 |
321031 |
321037 |
321047 |
321053 |
321073 |
321077 |
321091 |
321109 |
321143 |
321163 |
321169 |
321187 |
321193 |
321199 |
321203 |
321221 |
321227 |
321239 |
321247 |
321289 |
321301 |
321311 |
321313 |
321319 |
321323 |
321329 |
321331 |
321341 |
321359 |
321367 |
321371 |
321383 |
321397 |
321403 |
321413 |
321427 |
321443 |
321449 |
321467 |
321469 |
321509 |
321547 |
321553 |
321569 |
321571 |
321577 |
321593 |
321611 |
321617 |
321619 |
321631 |
321647 |
321661 |
321679 |
321707 |
321709 |
321721 |
321733 |
321743 |
321751 |
321757 |
321779 |
321799 |
321817 |
321821 |
321823 |
321829 |
321833 |
321847 |
321851 |
321889 |
321901 |
321911 |
321947 |
321949 |
321961 |
321983 |
321991 |
322001 |
322009 |
322013 |
322037 |
322039 |
322051 |
322057 |
322067 |
322073 |
322079 |
322093 |
322097 |
322109 |
322111 |
322139 |
322169 |
322171 |
322193 |
322213 |
322229 |
322237 |
322243 |
322247 |
322249 |
322261 |
322271 |
322319 |
322327 |
322339 |
322349 |
322351 |
322397 |
322403 |
322409 |
322417 |
322429 |
322433 |
322459 |
322463 |
322501 |
322513 |
322519 |
322523 |
322537 |
322549 |
322559 |
322571 |
322573 |
322583 |
322589 |
322591 |
322607 |
322613 |
322627 |
322631 |
322633 |
322649 |
322669 |
322709 |
322727 |
322747 |
322757 |
322769 |
322771 |
322781 |
322783 |
322807 |
322849 |
322859 |
322871 |
322877 |
322891 |
322901 |
322919 |
322921 |
322939 |
322951 |
322963 |
322969 |
322997 |
322999 |
323003 |
323009 |
323027 |
323053 |
323077 |
323083 |
323087 |
323093 |
323101 |
323123 |
323131 |
323137 |
323149 |
323201 |
323207 |
323233 |
323243 |
323249 |
323251 |
323273 |
323333 |
323339 |
323341 |
323359 |
323369 |
323371 |
323377 |
323381 |
323383 |
323413 |
323419 |
323441 |
323443 |
323467 |
323471 |
323473 |
323507 |
323509 |
323537 |
323549 |
323567 |
323579 |
323581 |
323591 |
323597 |
323599 |
323623 |
323641 |
323647 |
323651 |
323699 |
323707 |
323711 |
323717 |
323759 |
323767 |
323789 |
323797 |
323801 |
323803 |
323819 |
323837 |
323879 |
323899 |
323903 |
323923 |
323927 |
323933 |
323951 |
323957 |
323987 |
324011 |
324031 |
324053 |
324067 |
324073 |
324089 |
324097 |
324101 |
324113 |
324119 |
324131 |
324143 |
324151 |
324161 |
324179 |
324199 |
324209 |
324211 |
324217 |
324223 |
324239 |
324251 |
324293 |
324299 |
324301 |
324319 |
324329 |
324341 |
324361 |
324391 |
324397 |
324403 |
324419 |
324427 |
324431 |
324437 |
324439 |
324449 |
324451 |
324469 |
324473 |
324491 |
324497 |
324503 |
324517 |
324523 |
324529 |
324557 |
324587 |
324589 |
324593 |
324617 |
324619 |
324637 |
324641 |
324647 |
324661 |
324673 |
324689 |
324697 |
324707 |
324733 |
324743 |
324757 |
324763 |
324773 |
324781 |
324791 |
324799 |
324809 |
324811 |
324839 |
324847 |
324869 |
324871 |
324889 |
324893 |
324901 |
324931 |
324941 |
324949 |
324953 |
324977 |
324979 |
324983 |
324991 |
324997 |
325001 |
325009 |
325019 |
325021 |
325027 |
325043 |
325051 |
325063 |
325079 |
325081 |
325093 |
325133 |
325153 |
325163 |
325181 |
325187 |
325189 |
325201 |
325217 |
325219 |
325229 |
325231 |
325249 |
325271 |
325301 |
325307 |
325309 |
325319 |
325333 |
325343 |
325349 |
325379 |
325411 |
325421 |
325439 |
325447 |
325453 |
325459 |
325463 |
325477 |
325487 |
325513 |
325517 |
325537 |
325541 |
325543 |
325571 |
325597 |
325607 |
325627 |
325631 |
325643 |
325667 |
325673 |
325681 |
325691 |
325693 |
325697 |
325709 |
325723 |
325729 |
325747 |
325751 |
325753 |
325769 |
325777 |
325781 |
325783 |
325807 |
325813 |
325849 |
325861 |
325877 |
325883 |
325889 |
325891 |
325901 |
325921 |
325939 |
325943 |
325951 |
325957 |
325987 |
325993 |
325999 |
326023 |
326057 |
326063 |
326083 |
326087 |
326099 |
326101 |
326113 |
326119 |
326141 |
326143 |
326147 |
326149 |
326153 |
326159 |
326171 |
326189 |
326203 |
326219 |
326251 |
326257 |
326309 |
326323 |
326351 |
326353 |
326369 |
326437 |
326441 |
326449 |
326467 |
326479 |
326497 |
326503 |
326537 |
326539 |
326549 |
326561 |
326563 |
326567 |
326581 |
326593 |
326597 |
326609 |
326611 |
326617 |
326633 |
326657 |
326659 |
326663 |
326681 |
326687 |
326693 |
326701 |
326707 |
326737 |
326741 |
326773 |
326779 |
326831 |
326863 |
326867 |
326869 |
326873 |
326881 |
326903 |
326923 |
326939 |
326941 |
326947 |
326951 |
326983 |
326993 |
326999 |
327001 |
327007 |
327011 |
327017 |
327023 |
327059 |
327071 |
327079 |
327127 |
327133 |
327163 |
327179 |
327193 |
327203 |
327209 |
327211 |
327247 |
327251 |
327263 |
327277 |
327289 |
327307 |
327311 |
327317 |
327319 |
327331 |
327337 |
327343 |
327347 |
327401 |
327407 |
327409 |
327419 |
327421 |
327433 |
327443 |
327463 |
327469 |
327473 |
327479 |
327491 |
327493 |
327499 |
327511 |
327517 |
327529 |
327553 |
327557 |
327559 |
327571 |
327581 |
327583 |
327599 |
327619 |
327629 |
327647 |
327661 |
327667 |
327673 |
327689 |
327707 |
327721 |
327737 |
327739 |
327757 |
327779 |
327797 |
327799 |
327809 |
327823 |
327827 |
327829 |
327839 |
327851 |
327853 |
327869 |
327871 |
327881 |
327889 |
327917 |
327923 |
327941 |
327953 |
327967 |
327979 |
327983 |
328007 |
328037 |
328043 |
328051 |
328061 |
328063 |
328067 |
328093 |
328103 |
328109 |
328121 |
328127 |
328129 |
328171 |
328177 |
328213 |
328243 |
328249 |
328271 |
328277 |
328283 |
328291 |
328303 |
328327 |
328331 |
328333 |
328343 |
328357 |
328373 |
328379 |
328381 |
328397 |
328411 |
328421 |
328429 |
328439 |
328481 |
328511 |
328513 |
328519 |
328543 |
328579 |
328589 |
328591 |
328619 |
328621 |
328633 |
328637 |
328639 |
328651 |
328667 |
328687 |
328709 |
328721 |
328753 |
328777 |
328781 |
328787 |
328789 |
328813 |
328829 |
328837 |
328847 |
328849 |
328883 |
328891 |
328897 |
328901 |
328919 |
328921 |
328931 |
328961 |
328981 |
329009 |
329027 |
329053 |
329059 |
329081 |
329083 |
329089 |
329101 |
329111 |
329123 |
329143 |
329167 |
329177 |
329191 |
329201 |
329207 |
329209 |
329233 |
329243 |
329257 |
329267 |
329269 |
329281 |
329293 |
329297 |
329299 |
329309 |
329317 |
329321 |
329333 |
329347 |
329387 |
329393 |
329401 |
329419 |
329431 |
329471 |
329473 |
329489 |
329503 |
329519 |
329533 |
329551 |
329557 |
329587 |
329591 |
329597 |
329603 |
329617 |
329627 |
329629 |
329639 |
329657 |
329663 |
329671 |
329677 |
329683 |
329687 |
329711 |
329717 |
329723 |
329729 |
329761 |
329773 |
329779 |
329789 |
329801 |
329803 |
329863 |
329867 |
329873 |
329891 |
329899 |
329941 |
329947 |
329951 |
329957 |
329969 |
329977 |
329993 |
329999 |
330017 |
330019 |
330037 |
330041 |
330047 |
330053 |
330061 |
330067 |
330097 |
330103 |
330131 |
330133 |
330139 |
330149 |
330167 |
330199 |
330203 |
330217 |
330227 |
330229 |
330233 |
330241 |
330247 |
330271 |
330287 |
330289 |
330311 |
330313 |
330329 |
330331 |
330347 |
330359 |
330383 |
330389 |
330409 |
330413 |
330427 |
330431 |
330433 |
330439 |
330469 |
330509 |
330557 |
330563 |
330569 |
330587 |
330607 |
330611 |
330623 |
330641 |
330643 |
330653 |
330661 |
330679 |
330683 |
330689 |
330697 |
330703 |
330719 |
330721 |
330731 |
330749 |
330767 |
330787 |
330791 |
330793 |
330821 |
330823 |
330839 |
330853 |
330857 |
330859 |
330877 |
330887 |
330899 |
330907 |
330917 |
330943 |
330983 |
330997 |
331013 |
331027 |
331031 |
331043 |
331063 |
331081 |
331099 |
331127 |
331141 |
331147 |
331153 |
331159 |
331171 |
331183 |
331207 |
331213 |
331217 |
331231 |
331241 |
331249 |
331259 |
331277 |
331283 |
331301 |
331307 |
331319 |
331333 |
331337 |
331339 |
331349 |
331367 |
331369 |
331391 |
331399 |
331423 |
331447 |
331451 |
331489 |
331501 |
331511 |
331519 |
331523 |
331537 |
331543 |
331547 |
331549 |
331553 |
331577 |
331579 |
331589 |
331603 |
331609 |
331613 |
331651 |
331663 |
331691 |
331693 |
331697 |
331711 |
331739 |
331753 |
331769 |
331777 |
331781 |
331801 |
331819 |
331841 |
331843 |
331871 |
331883 |
331889 |
331897 |
331907 |
331909 |
331921 |
331937 |
331943 |
331957 |
331967 |
331973 |
331997 |
331999 |
332009 |
332011 |
332039 |
332053 |
332069 |
332081 |
332099 |
332113 |
332117 |
332147 |
332159 |
332161 |
332179 |
332183 |
332191 |
332201 |
332203 |
332207 |
332219 |
332221 |
332251 |
332263 |
332273 |
332287 |
332303 |
332309 |
332317 |
332393 |
332399 |
332411 |
332417 |
332441 |
332447 |
332461 |
332467 |
332471 |
332473 |
332477 |
332489 |
332509 |
332513 |
332561 |
332567 |
332569 |
332573 |
332611 |
332617 |
332623 |
332641 |
332687 |
332699 |
332711 |
332729 |
332743 |
332749 |
332767 |
332779 |
332791 |
332803 |
332837 |
332851 |
332873 |
332881 |
332887 |
332903 |
332921 |
332933 |
332947 |
332951 |
332987 |
332989 |
332993 |
333019 |
333023 |
333029 |
333031 |
333041 |
333049 |
333071 |
333097 |
333101 |
333103 |
333107 |
333131 |
333139 |
333161 |
333187 |
333197 |
333209 |
333227 |
333233 |
333253 |
333269 |
333271 |
333283 |
333287 |
333299 |
333323 |
333331 |
333337 |
333341 |
333349 |
333367 |
333383 |
333397 |
333419 |
333427 |
333433 |
333439 |
333449 |
333451 |
333457 |
333479 |
333491 |
333493 |
333497 |
333503 |
333517 |
333533 |
333539 |
333563 |
333581 |
333589 |
333623 |
333631 |
333647 |
333667 |
333673 |
333679 |
333691 |
333701 |
333713 |
333719 |
333721 |
333737 |
333757 |
333769 |
333779 |
333787 |
333791 |
333793 |
333803 |
333821 |
333857 |
333871 |
333911 |
333923 |
333929 |
333941 |
333959 |
333973 |
333989 |
333997 |
334021 |
334031 |
334043 |
334049 |
334057 |
334069 |
334093 |
334099 |
334127 |
334133 |
334157 |
334171 |
334177 |
334183 |
334189 |
334199 |
334231 |
334247 |
334261 |
334289 |
334297 |
334319 |
334331 |
334333 |
334349 |
334363 |
334379 |
334387 |
334393 |
334403 |
334421 |
334423 |
334427 |
334429 |
334447 |
334487 |
334493 |
334507 |
334511 |
334513 |
334541 |
334547 |
334549 |
334561 |
334603 |
334619 |
334637 |
334643 |
334651 |
334661 |
334667 |
334681 |
334693 |
334699 |
334717 |
334721 |
334727 |
334751 |
334753 |
334759 |
334771 |
334777 |
334783 |
334787 |
334793 |
334843 |
334861 |
334877 |
334889 |
334891 |
334897 |
334931 |
334963 |
334973 |
334987 |
334991 |
334993 |
335009 |
335021 |
335029 |
335033 |
335047 |
335051 |
335057 |
335077 |
335081 |
335089 |
335107 |
335113 |
335117 |
335123 |
335131 |
335149 |
335161 |
335171 |
335173 |
335207 |
335213 |
335221 |
335249 |
335261 |
335273 |
335281 |
335299 |
335323 |
335341 |
335347 |
335381 |
335383 |
335411 |
335417 |
335429 |
335449 |
335453 |
335459 |
335473 |
335477 |
335507 |
335519 |
335527 |
335539 |
335557 |
335567 |
335579 |
335591 |
335609 |
335633 |
335641 |
335653 |
335663 |
335669 |
335681 |
335689 |
335693 |
335719 |
335729 |
335743 |
335747 |
335771 |
335807 |
335809 |
335813 |
335821 |
335833 |
335843 |
335857 |
335879 |
335893 |
335897 |
335917 |
335941 |
335953 |
335957 |
335999 |
336029 |
336031 |
336041 |
336059 |
336079 |
336101 |
336103 |
336109 |
336113 |
336121 |
336143 |
336151 |
336157 |
336163 |
336181 |
336199 |
336211 |
336221 |
336223 |
336227 |
336239 |
336247 |
336251 |
336253 |
336263 |
336307 |
336317 |
336353 |
336361 |
336373 |
336397 |
336403 |
336419 |
336437 |
336463 |
336491 |
336499 |
336503 |
336521 |
336527 |
336529 |
336533 |
336551 |
336563 |
336571 |
336577 |
336587 |
336593 |
336599 |
336613 |
336631 |
336643 |
336649 |
336653 |
336667 |
336671 |
336683 |
336689 |
336703 |
336727 |
336757 |
336761 |
336767 |
336769 |
336773 |
336793 |
336799 |
336803 |
336823 |
336827 |
336829 |
336857 |
336863 |
336871 |
336887 |
336899 |
336901 |
336911 |
336929 |
336961 |
336977 |
336983 |
336989 |
336997 |
337013 |
337021 |
337031 |
337039 |
337049 |
337069 |
337081 |
337091 |
337097 |
337121 |
337153 |
337189 |
337201 |
337213 |
337217 |
337219 |
337223 |
337261 |
337277 |
337279 |
337283 |
337291 |
337301 |
337313 |
337327 |
337339 |
337343 |
337349 |
337361 |
337367 |
337369 |
337397 |
337411 |
337427 |
337453 |
337457 |
337487 |
337489 |
337511 |
337517 |
337529 |
337537 |
337541 |
337543 |
337583 |
337607 |
337609 |
337627 |
337633 |
337639 |
337651 |
337661 |
337669 |
337681 |
337691 |
337697 |
337721 |
337741 |
337751 |
337759 |
337781 |
337793 |
337817 |
337837 |
337853 |
337859 |
337861 |
337867 |
337871 |
337873 |
337891 |
337901 |
337903 |
337907 |
337919 |
337949 |
337957 |
337969 |
337973 |
337999 |
338017 |
338027 |
338033 |
338119 |
338137 |
338141 |
338153 |
338159 |
338161 |
338167 |
338171 |
338183 |
338197 |
338203 |
338207 |
338213 |
338231 |
338237 |
338251 |
338263 |
338267 |
338269 |
338279 |
338287 |
338293 |
338297 |
338309 |
338321 |
338323 |
338339 |
338341 |
338347 |
338369 |
338383 |
338389 |
338407 |
338411 |
338413 |
338423 |
338431 |
338449 |
338461 |
338473 |
338477 |
338497 |
338531 |
338543 |
338563 |
338567 |
338573 |
338579 |
338581 |
338609 |
338659 |
338669 |
338683 |
338687 |
338707 |
338717 |
338731 |
338747 |
338753 |
338761 |
338773 |
338777 |
338791 |
338803 |
338839 |
338851 |
338857 |
338867 |
338893 |
338909 |
338927 |
338959 |
338993 |
338999 |
339023 |
339049 |
339067 |
339071 |
339091 |
339103 |
339107 |
339121 |
339127 |
339137 |
339139 |
339151 |
339161 |
339173 |
339187 |
339211 |
339223 |
339239 |
339247 |
339257 |
339263 |
339289 |
339307 |
339323 |
339331 |
339341 |
339373 |
339389 |
339413 |
339433 |
339467 |
339491 |
339517 |
339527 |
339539 |
339557 |
339583 |
339589 |
339601 |
339613 |
339617 |
339631 |
339637 |
339649 |
339653 |
339659 |
339671 |
339673 |
339679 |
339707 |
339727 |
339749 |
339751 |
339761 |
339769 |
339799 |
339811 |
339817 |
339821 |
339827 |
339839 |
339841 |
339863 |
339887 |
339907 |
339943 |
339959 |
339991 |
340007 |
340027 |
340031 |
340037 |
340049 |
340057 |
340061 |
340063 |
340073 |
340079 |
340103 |
340111 |
340117 |
340121 |
340127 |
340129 |
340169 |
340183 |
340201 |
340211 |
340237 |
340261 |
340267 |
340283 |
340297 |
340321 |
340337 |
340339 |
340369 |
340381 |
340387 |
340393 |
340397 |
340409 |
340429 |
340447 |
340451 |
340453 |
340477 |
340481 |
340519 |
340541 |
340559 |
340573 |
340577 |
340579 |
340583 |
340591 |
340601 |
340619 |
340633 |
340643 |
340649 |
340657 |
340661 |
340687 |
340693 |
340709 |
340723 |
340757 |
340777 |
340787 |
340789 |
340793 |
340801 |
340811 |
340819 |
340849 |
340859 |
340877 |
340889 |
340897 |
340903 |
340909 |
340913 |
340919 |
340927 |
340931 |
340933 |
340937 |
340939 |
340957 |
340979 |
340999 |
341017 |
341027 |
341041 |
341057 |
341059 |
341063 |
341083 |
341087 |
341123 |
341141 |
341171 |
341179 |
341191 |
341203 |
341219 |
341227 |
341233 |
341269 |
341273 |
341281 |
341287 |
341293 |
341303 |
341311 |
341321 |
341323 |
341333 |
341339 |
341347 |
341357 |
341423 |
341443 |
341447 |
341459 |
341461 |
341477 |
341491 |
341501 |
341507 |
341521 |
341543 |
341557 |
341569 |
341587 |
341597 |
341603 |
341617 |
341623 |
341629 |
341641 |
341647 |
341659 |
341681 |
341687 |
341701 |
341729 |
341743 |
341749 |
341771 |
341773 |
341777 |
341813 |
341821 |
341827 |
341839 |
341851 |
341863 |
341879 |
341911 |
341927 |
341947 |
341951 |
341953 |
341959 |
341963 |
341983 |
341993 |
342037 |
342047 |
342049 |
342059 |
342061 |
342071 |
342073 |
342077 |
342101 |
342107 |
342131 |
342143 |
342179 |
342187 |
342191 |
342197 |
342203 |
342211 |
342233 |
342239 |
342241 |
342257 |
342281 |
342283 |
342299 |
342319 |
342337 |
342341 |
342343 |
342347 |
342359 |
342371 |
342373 |
342379 |
342389 |
342413 |
342421 |
342449 |
342451 |
342467 |
342469 |
342481 |
342497 |
342521 |
342527 |
342547 |
342553 |
342569 |
342593 |
342599 |
342607 |
342647 |
342653 |
342659 |
342673 |
342679 |
342691 |
342697 |
342733 |
342757 |
342761 |
342791 |
342799 |
342803 |
342821 |
342833 |
342841 |
342847 |
342863 |
342869 |
342871 |
342889 |
342899 |
342929 |
342949 |
342971 |
342989 |
343019 |
343037 |
343051 |
343061 |
343073 |
343081 |
343087 |
343127 |
343141 |
343153 |
343163 |
343169 |
343177 |
343193 |
343199 |
343219 |
343237 |
343243 |
343253 |
343261 |
343267 |
343289 |
343303 |
343307 |
343309 |
343313 |
343327 |
343333 |
343337 |
343373 |
343379 |
343381 |
343391 |
343393 |
343411 |
343423 |
343433 |
343481 |
343489 |
343517 |
343529 |
343531 |
343543 |
343547 |
343559 |
343561 |
343579 |
343583 |
343589 |
343591 |
343601 |
343627 |
343631 |
343639 |
343649 |
343661 |
343667 |
343687 |
343709 |
343727 |
343769 |
343771 |
343787 |
343799 |
343801 |
343813 |
343817 |
343823 |
343829 |
343831 |
343891 |
343897 |
343901 |
343913 |
343933 |
343939 |
343943 |
343951 |
343963 |
343997 |
344017 |
344021 |
344039 |
344053 |
344083 |
344111 |
344117 |
344153 |
344161 |
344167 |
344171 |
344173 |
344177 |
344189 |
344207 |
344209 |
344213 |
344221 |
344231 |
344237 |
344243 |
344249 |
344251 |
344257 |
344263 |
344269 |
344273 |
344291 |
344293 |
344321 |
344327 |
344347 |
344353 |
344363 |
344371 |
344417 |
344423 |
344429 |
344453 |
344479 |
344483 |
344497 |
344543 |
344567 |
344587 |
344599 |
344611 |
344621 |
344629 |
344639 |
344653 |
344671 |
344681 |
344683 |
344693 |
344719 |
344749 |
344753 |
344759 |
344791 |
344797 |
344801 |
344807 |
344819 |
344821 |
344843 |
344857 |
344863 |
344873 |
344887 |
344893 |
344909 |
344917 |
344921 |
344941 |
344957 |
344959 |
344963 |
344969 |
344987 |
345001 |
345011 |
345017 |
345019 |
345041 |
345047 |
345067 |
345089 |
345109 |
345133 |
345139 |
345143 |
345181 |
345193 |
345221 |
345227 |
345229 |
345259 |
345263 |
345271 |
345307 |
345311 |
345329 |
345379 |
345413 |
345431 |
345451 |
345461 |
345463 |
345473 |
345479 |
345487 |
345511 |
345517 |
345533 |
345547 |
345551 |
345571 |
345577 |
345581 |
345599 |
345601 |
345607 |
345637 |
345643 |
345647 |
345659 |
345673 |
345679 |
345689 |
345701 |
345707 |
345727 |
345731 |
345733 |
345739 |
345749 |
345757 |
345769 |
345773 |
345791 |
345803 |
345811 |
345817 |
345823 |
345853 |
345869 |
345881 |
345887 |
345889 |
345907 |
345923 |
345937 |
345953 |
345979 |
345997 |
346013 |
346039 |
346043 |
346051 |
346079 |
346091 |
346097 |
346111 |
346117 |
346133 |
346139 |
346141 |
346147 |
346169 |
346187 |
346201 |
346207 |
346217 |
346223 |
346259 |
346261 |
346277 |
346303 |
346309 |
346321 |
346331 |
346337 |
346349 |
346361 |
346369 |
346373 |
346391 |
346393 |
346397 |
346399 |
346417 |
346421 |
346429 |
346433 |
346439 |
346441 |
346447 |
346453 |
346469 |
346501 |
346529 |
346543 |
346547 |
346553 |
346559 |
346561 |
346589 |
346601 |
346607 |
346627 |
346639 |
346649 |
346651 |
346657 |
346667 |
346669 |
346699 |
346711 |
346721 |
346739 |
346751 |
346763 |
346793 |
346831 |
346849 |
346867 |
346873 |
346877 |
346891 |
346903 |
346933 |
346939 |
346943 |
346961 |
346963 |
347003 |
347033 |
347041 |
347051 |
347057 |
347059 |
347063 |
347069 |
347071 |
347099 |
347129 |
347131 |
347141 |
347143 |
347161 |
347167 |
347173 |
347177 |
347183 |
347197 |
347201 |
347209 |
347227 |
347233 |
347239 |
347251 |
347257 |
347287 |
347297 |
347299 |
347317 |
347329 |
347341 |
347359 |
347401 |
347411 |
347437 |
347443 |
347489 |
347509 |
347513 |
347519 |
347533 |
347539 |
347561 |
347563 |
347579 |
347587 |
347591 |
347609 |
347621 |
347629 |
347651 |
347671 |
347707 |
347717 |
347729 |
347731 |
347747 |
347759 |
347771 |
347773 |
347779 |
347801 |
347813 |
347821 |
347849 |
347873 |
347887 |
347891 |
347899 |
347929 |
347933 |
347951 |
347957 |
347959 |
347969 |
347981 |
347983 |
347987 |
347989 |
347993 |
348001 |
348011 |
348017 |
348031 |
348043 |
348053 |
348077 |
348083 |
348097 |
348149 |
348163 |
348181 |
348191 |
348209 |
348217 |
348221 |
348239 |
348241 |
348247 |
348253 |
348259 |
348269 |
348287 |
348307 |
348323 |
348353 |
348367 |
348389 |
348401 |
348407 |
348419 |
348421 |
348431 |
348433 |
348437 |
348443 |
348451 |
348457 |
348461 |
348463 |
348487 |
348527 |
348547 |
348553 |
348559 |
348563 |
348571 |
348583 |
348587 |
348617 |
348629 |
348637 |
348643 |
348661 |
348671 |
348709 |
348731 |
348739 |
348757 |
348763 |
348769 |
348779 |
348811 |
348827 |
348833 |
348839 |
348851 |
348883 |
348889 |
348911 |
348917 |
348919 |
348923 |
348937 |
348949 |
348989 |
348991 |
349007 |
349039 |
349043 |
349051 |
349079 |
349081 |
349093 |
349099 |
349109 |
349121 |
349133 |
349171 |
349177 |
349183 |
349187 |
349199 |
349207 |
349211 |
349241 |
349291 |
349303 |
349313 |
349331 |
349337 |
349343 |
349357 |
349369 |
349373 |
349379 |
349381 |
349387 |
349397 |
349399 |
349403 |
349409 |
349411 |
349423 |
349471 |
349477 |
349483 |
349493 |
349499 |
349507 |
349519 |
349529 |
349553 |
349567 |
349579 |
349589 |
349603 |
349637 |
349663 |
349667 |
349697 |
349709 |
349717 |
349729 |
349753 |
349759 |
349787 |
349793 |
349801 |
349813 |
349819 |
349829 |
349831 |
349837 |
349841 |
349849 |
349871 |
349903 |
349907 |
349913 |
349919 |
349927 |
349931 |
349933 |
349939 |
349949 |
349963 |
349967 |
349981 |
350003 |
350029 |
350033 |
350039 |
350087 |
350089 |
350093 |
350107 |
350111 |
350137 |
350159 |
350179 |
350191 |
350213 |
350219 |
350237 |
350249 |
350257 |
350281 |
350293 |
350347 |
350351 |
350377 |
350381 |
350411 |
350423 |
350429 |
350431 |
350437 |
350443 |
350447 |
350453 |
350459 |
350503 |
350521 |
350549 |
350561 |
350563 |
350587 |
350593 |
350617 |
350621 |
350629 |
350657 |
350663 |
350677 |
350699 |
350711 |
350719 |
350729 |
350731 |
350737 |
350741 |
350747 |
350767 |
350771 |
350783 |
350789 |
350803 |
350809 |
350843 |
350851 |
350869 |
350881 |
350887 |
350891 |
350899 |
350941 |
350947 |
350963 |
350971 |
350981 |
350983 |
350989 |
351011 |
351023 |
351031 |
351037 |
351041 |
351047 |
351053 |
351059 |
351061 |
351077 |
351079 |
351097 |
351121 |
351133 |
351151 |
351157 |
351179 |
351217 |
351223 |
351229 |
351257 |
351259 |
351269 |
351287 |
351289 |
351293 |
351301 |
351311 |
351341 |
351343 |
351347 |
351359 |
351361 |
351383 |
351391 |
351397 |
351401 |
351413 |
351427 |
351437 |
351457 |
351469 |
351479 |
351497 |
351503 |
351517 |
351529 |
351551 |
351563 |
351587 |
351599 |
351643 |
351653 |
351661 |
351667 |
351691 |
351707 |
351727 |
351731 |
351733 |
351749 |
351751 |
351763 |
351773 |
351779 |
351797 |
351803 |
351811 |
351829 |
351847 |
351851 |
351859 |
351863 |
351887 |
351913 |
351919 |
351929 |
351931 |
351959 |
351971 |
351991 |
352007 |
352021 |
352043 |
352049 |
352057 |
352069 |
352073 |
352081 |
352097 |
352109 |
352111 |
352123 |
352133 |
352181 |
352193 |
352201 |
352217 |
352229 |
352237 |
352249 |
352267 |
352271 |
352273 |
352301 |
352309 |
352327 |
352333 |
352349 |
352357 |
352361 |
352367 |
352369 |
352381 |
352399 |
352403 |
352409 |
352411 |
352421 |
352423 |
352441 |
352459 |
352463 |
352481 |
352483 |
352489 |
352493 |
352511 |
352523 |
352543 |
352549 |
352579 |
352589 |
352601 |
352607 |
352619 |
352633 |
352637 |
352661 |
352691 |
352711 |
352739 |
352741 |
352753 |
352757 |
352771 |
352813 |
352817 |
352819 |
352831 |
352837 |
352841 |
352853 |
352867 |
352883 |
352907 |
352909 |
352931 |
352939 |
352949 |
352951 |
352973 |
352991 |
353011 |
353021 |
353047 |
353053 |
353057 |
353069 |
353081 |
353099 |
353117 |
353123 |
353137 |
353147 |
353149 |
353161 |
353173 |
353179 |
353201 |
353203 |
353237 |
353263 |
353293 |
353317 |
353321 |
353329 |
353333 |
353341 |
353359 |
353389 |
353401 |
353411 |
353429 |
353443 |
353453 |
353459 |
353471 |
353473 |
353489 |
353501 |
353527 |
353531 |
353557 |
353567 |
353603 |
353611 |
353621 |
353627 |
353629 |
353641 |
353653 |
353657 |
353677 |
353681 |
353687 |
353699 |
353711 |
353737 |
353747 |
353767 |
353777 |
353783 |
353797 |
353807 |
353813 |
353819 |
353833 |
353867 |
353869 |
353879 |
353891 |
353897 |
353911 |
353917 |
353921 |
353929 |
353939 |
353963 |
354001 |
354007 |
354017 |
354023 |
354031 |
354037 |
354041 |
354043 |
354047 |
354073 |
354091 |
354097 |
354121 |
354139 |
354143 |
354149 |
354163 |
354169 |
354181 |
354209 |
354247 |
354251 |
354253 |
354257 |
354259 |
354271 |
354301 |
354307 |
354313 |
354317 |
354323 |
354329 |
354337 |
354353 |
354371 |
354373 |
354377 |
354383 |
354391 |
354401 |
354421 |
354439 |
354443 |
354451 |
354461 |
354463 |
354469 |
354479 |
354533 |
354539 |
354551 |
354553 |
354581 |
354587 |
354619 |
354643 |
354647 |
354661 |
354667 |
354677 |
354689 |
354701 |
354703 |
354727 |
354737 |
354743 |
354751 |
354763 |
354779 |
354791 |
354799 |
354829 |
354833 |
354839 |
354847 |
354869 |
354877 |
354881 |
354883 |
354911 |
354953 |
354961 |
354971 |
354973 |
354979 |
354983 |
354997 |
355007 |
355009 |
355027 |
355031 |
355037 |
355039 |
355049 |
355057 |
355063 |
355073 |
355087 |
355093 |
355099 |
355109 |
355111 |
355127 |
355139 |
355171 |
355193 |
355211 |
355261 |
355297 |
355307 |
355321 |
355331 |
355339 |
355343 |
355361 |
355363 |
355379 |
355417 |
355427 |
355441 |
355457 |
355463 |
355483 |
355499 |
355501 |
355507 |
355513 |
355517 |
355519 |
355529 |
355541 |
355549 |
355559 |
355571 |
355573 |
355591 |
355609 |
355633 |
355643 |
355651 |
355669 |
355679 |
355697 |
355717 |
355721 |
355723 |
355753 |
355763 |
355777 |
355783 |
355799 |
355811 |
355819 |
355841 |
355847 |
355853 |
355867 |
355891 |
355909 |
355913 |
355933 |
355937 |
355939 |
355951 |
355967 |
355969 |
356023 |
356039 |
356077 |
356093 |
356101 |
356113 |
356123 |
356129 |
356137 |
356141 |
356143 |
356171 |
356173 |
356197 |
356219 |
356243 |
356261 |
356263 |
356287 |
356299 |
356311 |
356327 |
356333 |
356351 |
356387 |
356399 |
356441 |
356443 |
356449 |
356453 |
356467 |
356479 |
356501 |
356509 |
356533 |
356549 |
356561 |
356563 |
356567 |
356579 |
356591 |
356621 |
356647 |
356663 |
356693 |
356701 |
356731 |
356737 |
356749 |
356761 |
356803 |
356819 |
356821 |
356831 |
356869 |
356887 |
356893 |
356927 |
356929 |
356933 |
356947 |
356959 |
356969 |
356977 |
356981 |
356989 |
356999 |
357031 |
357047 |
357073 |
357079 |
357083 |
357103 |
357107 |
357109 |
357131 |
357139 |
357169 |
357179 |
357197 |
357199 |
357211 |
357229 |
357239 |
357241 |
357263 |
357271 |
357281 |
357283 |
357293 |
357319 |
357347 |
357349 |
357353 |
357359 |
357377 |
357389 |
357421 |
357431 |
357437 |
357473 |
357503 |
357509 |
357517 |
357551 |
357559 |
357563 |
357569 |
357571 |
357583 |
357587 |
357593 |
357611 |
357613 |
357619 |
357649 |
357653 |
357659 |
357661 |
357667 |
357671 |
357677 |
357683 |
357689 |
357703 |
357727 |
357733 |
357737 |
357739 |
357767 |
357779 |
357781 |
357787 |
357793 |
357809 |
357817 |
357823 |
357829 |
357839 |
357859 |
357883 |
357913 |
357967 |
357977 |
357983 |
357989 |
357997 |
358031 |
358051 |
358069 |
358073 |
358079 |
358103 |
358109 |
358153 |
358157 |
358159 |
358181 |
358201 |
358213 |
358219 |
358223 |
358229 |
358243 |
358273 |
358277 |
358279 |
358289 |
358291 |
358297 |
358301 |
358313 |
358327 |
358331 |
358349 |
358373 |
358417 |
358427 |
358429 |
358441 |
358447 |
358459 |
358471 |
358483 |
358487 |
358499 |
358531 |
358541 |
358571 |
358573 |
358591 |
358597 |
358601 |
358607 |
358613 |
358637 |
358667 |
358669 |
358681 |
358691 |
358697 |
358703 |
358711 |
358723 |
358727 |
358733 |
358747 |
358753 |
358769 |
358783 |
358793 |
358811 |
358829 |
358847 |
358859 |
358861 |
358867 |
358877 |
358879 |
358901 |
358903 |
358907 |
358909 |
358931 |
358951 |
358973 |
358979 |
358987 |
358993 |
358999 |
359003 |
359017 |
359027 |
359041 |
359063 |
359069 |
359101 |
359111 |
359129 |
359137 |
359143 |
359147 |
359153 |
359167 |
359171 |
359207 |
359209 |
359231 |
359243 |
359263 |
359267 |
359279 |
359291 |
359297 |
359299 |
359311 |
359323 |
359327 |
359353 |
359357 |
359377 |
359389 |
359407 |
359417 |
359419 |
359441 |
359449 |
359477 |
359479 |
359483 |
359501 |
359509 |
359539 |
359549 |
359561 |
359563 |
359581 |
359587 |
359599 |
359621 |
359633 |
359641 |
359657 |
359663 |
359701 |
359713 |
359719 |
359731 |
359747 |
359753 |
359761 |
359767 |
359783 |
359837 |
359851 |
359869 |
359897 |
359911 |
359929 |
359981 |
359987 |
360007 |
360023 |
360037 |
360049 |
360053 |
360071 |
360089 |
360091 |
360163 |
360167 |
360169 |
360181 |
360187 |
360193 |
360197 |
360223 |
360229 |
360233 |
360257 |
360271 |
360277 |
360287 |
360289 |
360293 |
360307 |
360317 |
360323 |
360337 |
360391 |
360407 |
360421 |
360439 |
360457 |
360461 |
360497 |
360509 |
360511 |
360541 |
360551 |
360589 |
360593 |
360611 |
360637 |
360649 |
360653 |
360749 |
360769 |
360779 |
360781 |
360803 |
360817 |
360821 |
360823 |
360827 |
360851 |
360853 |
360863 |
360869 |
360901 |
360907 |
360947 |
360949 |
360953 |
360959 |
360973 |
360977 |
360979 |
360989 |
361001 |
361003 |
361013 |
361033 |
361069 |
361091 |
361093 |
361111 |
361159 |
361183 |
361211 |
361213 |
361217 |
361219 |
361223 |
361237 |
361241 |
361271 |
361279 |
361313 |
361321 |
361327 |
361337 |
361349 |
361351 |
361357 |
361363 |
361373 |
361409 |
361411 |
361421 |
361433 |
361441 |
361447 |
361451 |
361463 |
361469 |
361481 |
361499 |
361507 |
361511 |
361523 |
361531 |
361541 |
361549 |
361561 |
361577 |
361637 |
361643 |
361649 |
361651 |
361663 |
361679 |
361687 |
361723 |
361727 |
361747 |
361763 |
361769 |
361787 |
361789 |
361793 |
361799 |
361807 |
361843 |
361871 |
361873 |
361877 |
361901 |
361903 |
361909 |
361919 |
361927 |
361943 |
361961 |
361967 |
361973 |
361979 |
361993 |
362003 |
362027 |
362051 |
362053 |
362059 |
362069 |
362081 |
362093 |
362099 |
362107 |
362137 |
362143 |
362147 |
362161 |
362177 |
362191 |
362203 |
362213 |
362221 |
362233 |
362237 |
362281 |
362291 |
362293 |
362303 |
362309 |
362333 |
362339 |
362347 |
362353 |
362357 |
362363 |
362371 |
362377 |
362381 |
362393 |
362407 |
362419 |
362429 |
362431 |
362443 |
362449 |
362459 |
362473 |
362521 |
362561 |
362569 |
362581 |
362599 |
362629 |
362633 |
362657 |
362693 |
362707 |
362717 |
362723 |
362741 |
362743 |
362749 |
362753 |
362759 |
362801 |
362851 |
362863 |
362867 |
362897 |
362903 |
362911 |
362927 |
362941 |
362951 |
362953 |
362969 |
362977 |
362983 |
362987 |
363017 |
363019 |
363037 |
363043 |
363047 |
363059 |
363061 |
363067 |
363119 |
363149 |
363151 |
363157 |
363161 |
363173 |
363179 |
363199 |
363211 |
363217 |
363257 |
363269 |
363271 |
363277 |
363313 |
363317 |
363329 |
363343 |
363359 |
363361 |
363367 |
363371 |
363373 |
363379 |
363397 |
363401 |
363403 |
363431 |
363437 |
363439 |
363463 |
363481 |
363491 |
363497 |
363523 |
363529 |
363533 |
363541 |
363551 |
363557 |
363563 |
363569 |
363577 |
363581 |
363589 |
363611 |
363619 |
363659 |
363677 |
363683 |
363691 |
363719 |
363731 |
363751 |
363757 |
363761 |
363767 |
363773 |
363799 |
363809 |
363829 |
363833 |
363841 |
363871 |
363887 |
363889 |
363901 |
363911 |
363917 |
363941 |
363947 |
363949 |
363959 |
363967 |
363977 |
363989 |
364027 |
364031 |
364069 |
364073 |
364079 |
364103 |
364127 |
364129 |
364141 |
364171 |
364183 |
364187 |
364193 |
364213 |
364223 |
364241 |
364267 |
364271 |
364289 |
364291 |
364303 |
364313 |
364321 |
364333 |
364337 |
364349 |
364373 |
364379 |
364393 |
364411 |
364417 |
364423 |
364433 |
364447 |
364451 |
364459 |
364471 |
364499 |
364513 |
364523 |
364537 |
364541 |
364543 |
364571 |
364583 |
364601 |
364607 |
364621 |
364627 |
364643 |
364657 |
364669 |
364687 |
364691 |
364699 |
364717 |
364739 |
364747 |
364751 |
364753 |
364759 |
364801 |
364829 |
364853 |
364873 |
364879 |
364883 |
364891 |
364909 |
364919 |
364921 |
364937 |
364943 |
364961 |
364979 |
364993 |
364997 |
365003 |
365017 |
365021 |
365039 |
365063 |
365069 |
365089 |
365107 |
365119 |
365129 |
365137 |
365147 |
365159 |
365173 |
365179 |
365201 |
365213 |
365231 |
365249 |
365251 |
365257 |
365291 |
365293 |
365297 |
365303 |
365327 |
365333 |
365357 |
365369 |
365377 |
365411 |
365413 |
365419 |
365423 |
365441 |
365461 |
365467 |
365471 |
365473 |
365479 |
365489 |
365507 |
365509 |
365513 |
365527 |
365531 |
365537 |
365557 |
365567 |
365569 |
365587 |
365591 |
365611 |
365627 |
365639 |
365641 |
365669 |
365683 |
365689 |
365699 |
365747 |
365749 |
365759 |
365773 |
365779 |
365791 |
365797 |
365809 |
365837 |
365839 |
365851 |
365903 |
365929 |
365933 |
365941 |
365969 |
365983 |
366001 |
366013 |
366019 |
366029 |
366031 |
366053 |
366077 |
366097 |
366103 |
366127 |
366133 |
366139 |
366161 |
366167 |
366169 |
366173 |
366181 |
366193 |
366199 |
366211 |
366217 |
366221 |
366227 |
366239 |
366259 |
366269 |
366277 |
366287 |
366293 |
366307 |
366313 |
366329 |
366341 |
366343 |
366347 |
366383 |
366397 |
366409 |
366419 |
366433 |
366437 |
366439 |
366461 |
366463 |
366467 |
366479 |
366497 |
366511 |
366517 |
366521 |
366547 |
366593 |
366599 |
366607 |
366631 |
366677 |
366683 |
366697 |
366701 |
366703 |
366713 |
366721 |
366727 |
366733 |
366787 |
366791 |
366811 |
366829 |
366841 |
366851 |
366853 |
366859 |
366869 |
366881 |
366889 |
366901 |
366907 |
366917 |
366923 |
366941 |
366953 |
366967 |
366973 |
366983 |
366997 |
367001 |
367007 |
367019 |
367021 |
367027 |
367033 |
367049 |
367069 |
367097 |
367121 |
367123 |
367127 |
367139 |
367163 |
367181 |
367189 |
367201 |
367207 |
367219 |
367229 |
367231 |
367243 |
367259 |
367261 |
367273 |
367277 |
367307 |
367309 |
367313 |
367321 |
367357 |
367369 |
367391 |
367397 |
367427 |
367453 |
367457 |
367469 |
367501 |
367519 |
367531 |
367541 |
367547 |
367559 |
367561 |
367573 |
367597 |
367603 |
367613 |
367621 |
367637 |
367649 |
367651 |
367663 |
367673 |
367687 |
367699 |
367711 |
367721 |
367733 |
367739 |
367751 |
367771 |
367777 |
367781 |
367789 |
367819 |
367823 |
367831 |
367841 |
367849 |
367853 |
367867 |
367879 |
367883 |
367889 |
367909 |
367949 |
367957 |
368021 |
368029 |
368047 |
368059 |
368077 |
368083 |
368089 |
368099 |
368107 |
368111 |
368117 |
368129 |
368141 |
368149 |
368153 |
368171 |
368189 |
368197 |
368227 |
368231 |
368233 |
368243 |
368273 |
368279 |
368287 |
368293 |
368323 |
368327 |
368359 |
368363 |
368369 |
368399 |
368411 |
368443 |
368447 |
368453 |
368471 |
368491 |
368507 |
368513 |
368521 |
368531 |
368539 |
368551 |
368579 |
368593 |
368597 |
368609 |
368633 |
368647 |
368651 |
368653 |
368689 |
368717 |
368729 |
368737 |
368743 |
368773 |
368783 |
368789 |
368791 |
368801 |
368803 |
368833 |
368857 |
368873 |
368881 |
368899 |
368911 |
368939 |
368947 |
368957 |
369007 |
369013 |
369023 |
369029 |
369067 |
369071 |
369077 |
369079 |
369097 |
369119 |
369133 |
369137 |
369143 |
369169 |
369181 |
369191 |
369197 |
369211 |
369247 |
369253 |
369263 |
369269 |
369283 |
369293 |
369301 |
369319 |
369331 |
369353 |
369361 |
369407 |
369409 |
369419 |
369469 |
369487 |
369491 |
369539 |
369553 |
369557 |
369581 |
369637 |
369647 |
369659 |
369661 |
369673 |
369703 |
369709 |
369731 |
369739 |
369751 |
369791 |
369793 |
369821 |
369827 |
369829 |
369833 |
369841 |
369851 |
369877 |
369893 |
369913 |
369917 |
369947 |
369959 |
369961 |
369979 |
369983 |
369991 |
369997 |
370003 |
370009 |
370021 |
370033 |
370057 |
370061 |
370067 |
370081 |
370091 |
370103 |
370121 |
370133 |
370147 |
370159 |
370169 |
370193 |
370199 |
370207 |
370213 |
370217 |
370241 |
370247 |
370261 |
370373 |
370387 |
370399 |
370411 |
370421 |
370423 |
370427 |
370439 |
370441 |
370451 |
370463 |
370471 |
370477 |
370483 |
370493 |
370511 |
370529 |
370537 |
370547 |
370561 |
370571 |
370597 |
370603 |
370609 |
370613 |
370619 |
370631 |
370661 |
370663 |
370673 |
370679 |
370687 |
370693 |
370723 |
370759 |
370793 |
370801 |
370813 |
370837 |
370871 |
370873 |
370879 |
370883 |
370891 |
370897 |
370919 |
370949 |
371027 |
371029 |
371057 |
371069 |
371071 |
371083 |
371087 |
371099 |
371131 |
371141 |
371143 |
371153 |
371177 |
371179 |
371191 |
371213 |
371227 |
371233 |
371237 |
371249 |
371251 |
371257 |
371281 |
371291 |
371299 |
371303 |
371311 |
371321 |
371333 |
371339 |
371341 |
371353 |
371359 |
371383 |
371387 |
371389 |
371417 |
371447 |
371453 |
371471 |
371479 |
371491 |
371509 |
371513 |
371549 |
371561 |
371573 |
371587 |
371617 |
371627 |
371633 |
371639 |
371663 |
371669 |
371699 |
371719 |
371737 |
371779 |
371797 |
371831 |
371837 |
371843 |
371851 |
371857 |
371869 |
371873 |
371897 |
371927 |
371929 |
371939 |
371941 |
371951 |
371957 |
371971 |
371981 |
371999 |
372013 |
372023 |
372037 |
372049 |
372059 |
372061 |
372067 |
372107 |
372121 |
372131 |
372137 |
372149 |
372167 |
372173 |
372179 |
372223 |
372241 |
372263 |
372269 |
372271 |
372277 |
372289 |
372293 |
372299 |
372311 |
372313 |
372353 |
372367 |
372371 |
372377 |
372397 |
372401 |
372409 |
372413 |
372443 |
372451 |
372461 |
372473 |
372481 |
372497 |
372511 |
372523 |
372539 |
372607 |
372611 |
372613 |
372629 |
372637 |
372653 |
372661 |
372667 |
372677 |
372689 |
372707 |
372709 |
372719 |
372733 |
372739 |
372751 |
372763 |
372769 |
372773 |
372797 |
372803 |
372809 |
372817 |
372829 |
372833 |
372839 |
372847 |
372859 |
372871 |
372877 |
372881 |
372901 |
372917 |
372941 |
372943 |
372971 |
372973 |
372979 |
373003 |
373007 |
373019 |
373049 |
373063 |
373073 |
373091 |
373127 |
373151 |
373157 |
373171 |
373181 |
373183 |
373187 |
373193 |
373199 |
373207 |
373211 |
373213 |
373229 |
373231 |
373273 |
373291 |
373297 |
373301 |
373327 |
373339 |
373343 |
373349 |
373357 |
373361 |
373363 |
373379 |
373393 |
373447 |
373453 |
373459 |
373463 |
373487 |
373489 |
373501 |
373517 |
373553 |
373561 |
373567 |
373613 |
373621 |
373631 |
373649 |
373657 |
373661 |
373669 |
373693 |
373717 |
373721 |
373753 |
373757 |
373777 |
373783 |
373823 |
373837 |
373859 |
373861 |
373903 |
373909 |
373937 |
373943 |
373951 |
373963 |
373969 |
373981 |
373987 |
373999 |
374009 |
374029 |
374039 |
374041 |
374047 |
374063 |
374069 |
374083 |
374089 |
374093 |
374111 |
374117 |
374123 |
374137 |
374149 |
374159 |
374173 |
374177 |
374189 |
374203 |
374219 |
374239 |
374287 |
374291 |
374293 |
374299 |
374317 |
374321 |
374333 |
374347 |
374351 |
374359 |
374389 |
374399 |
374441 |
374443 |
374447 |
374461 |
374483 |
374501 |
374531 |
374537 |
374557 |
374587 |
374603 |
374639 |
374641 |
374653 |
374669 |
374677 |
374681 |
374683 |
374687 |
374701 |
374713 |
374719 |
374729 |
374741 |
374753 |
374761 |
374771 |
374783 |
374789 |
374797 |
374807 |
374819 |
374837 |
374839 |
374849 |
374879 |
374887 |
374893 |
374903 |
374909 |
374929 |
374939 |
374953 |
374977 |
374981 |
374987 |
374989 |
374993 |
375017 |
375019 |
375029 |
375043 |
375049 |
375059 |
375083 |
375091 |
375097 |
375101 |
375103 |
375113 |
375119 |
375121 |
375127 |
375149 |
375157 |
375163 |
375169 |
375203 |
375209 |
375223 |
375227 |
375233 |
375247 |
375251 |
375253 |
375257 |
375259 |
375281 |
375283 |
375311 |
375341 |
375359 |
375367 |
375371 |
375373 |
375391 |
375407 |
375413 |
375443 |
375449 |
375451 |
375457 |
375467 |
375481 |
375509 |
375511 |
375523 |
375527 |
375533 |
375553 |
375559 |
375563 |
375569 |
375593 |
375607 |
375623 |
375631 |
375643 |
375647 |
375667 |
375673 |
375703 |
375707 |
375709 |
375743 |
375757 |
375761 |
375773 |
375779 |
375787 |
375799 |
375833 |
375841 |
375857 |
375899 |
375901 |
375923 |
375931 |
375967 |
375971 |
375979 |
375983 |
375997 |
376001 |
376003 |
376009 |
376021 |
376039 |
376049 |
376063 |
376081 |
376097 |
376099 |
376127 |
376133 |
376147 |
376153 |
376171 |
376183 |
376199 |
376231 |
376237 |
376241 |
376283 |
376291 |
376297 |
376307 |
376351 |
376373 |
376393 |
376399 |
376417 |
376463 |
376469 |
376471 |
376477 |
376483 |
376501 |
376511 |
376529 |
376531 |
376547 |
376573 |
376577 |
376583 |
376589 |
376603 |
376609 |
376627 |
376631 |
376633 |
376639 |
376657 |
376679 |
376687 |
376699 |
376709 |
376721 |
376729 |
376757 |
376759 |
376769 |
376787 |
376793 |
376801 |
376807 |
376811 |
376819 |
376823 |
376837 |
376841 |
376847 |
376853 |
376889 |
376891 |
376897 |
376921 |
376927 |
376931 |
376933 |
376949 |
376963 |
376969 |
377011 |
377021 |
377051 |
377059 |
377071 |
377099 |
377123 |
377129 |
377137 |
377147 |
377171 |
377173 |
377183 |
377197 |
377219 |
377231 |
377257 |
377263 |
377287 |
377291 |
377297 |
377327 |
377329 |
377339 |
377347 |
377353 |
377369 |
377371 |
377387 |
377393 |
377459 |
377471 |
377477 |
377491 |
377513 |
377521 |
377527 |
377537 |
377543 |
377557 |
377561 |
377563 |
377581 |
377593 |
377599 |
377617 |
377623 |
377633 |
377653 |
377681 |
377687 |
377711 |
377717 |
377737 |
377749 |
377761 |
377771 |
377779 |
377789 |
377801 |
377809 |
377827 |
377831 |
377843 |
377851 |
377873 |
377887 |
377911 |
377963 |
377981 |
377999 |
378011 |
378019 |
378023 |
378041 |
378071 |
378083 |
378089 |
378101 |
378127 |
378137 |
378149 |
378151 |
378163 |
378167 |
378179 |
378193 |
378223 |
378229 |
378239 |
378241 |
378253 |
378269 |
378277 |
378283 |
378289 |
378317 |
378353 |
378361 |
378379 |
378401 |
378407 |
378439 |
378449 |
378463 |
378467 |
378493 |
378503 |
378509 |
378523 |
378533 |
378551 |
378559 |
378569 |
378571 |
378583 |
378593 |
378601 |
378619 |
378629 |
378661 |
378667 |
378671 |
378683 |
378691 |
378713 |
378733 |
378739 |
378757 |
378761 |
378779 |
378793 |
378809 |
378817 |
378821 |
378823 |
378869 |
378883 |
378893 |
378901 |
378919 |
378929 |
378941 |
378949 |
378953 |
378967 |
378977 |
378997 |
379007 |
379009 |
379013 |
379033 |
379039 |
379073 |
379081 |
379087 |
379097 |
379103 |
379123 |
379133 |
379147 |
379157 |
379163 |
379177 |
379187 |
379189 |
379199 |
379207 |
379273 |
379277 |
379283 |
379289 |
379307 |
379319 |
379333 |
379343 |
379369 |
379387 |
379391 |
379397 |
379399 |
379417 |
379433 |
379439 |
379441 |
379451 |
379459 |
379499 |
379501 |
379513 |
379531 |
379541 |
379549 |
379571 |
379573 |
379579 |
379597 |
379607 |
379633 |
379649 |
379663 |
379667 |
379679 |
379681 |
379693 |
379699 |
379703 |
379721 |
379723 |
379727 |
379751 |
379777 |
379787 |
379811 |
379817 |
379837 |
379849 |
379853 |
379859 |
379877 |
379889 |
379903 |
379909 |
379913 |
379927 |
379931 |
379963 |
379979 |
379993 |
379997 |
379999 |
380041 |
380047 |
380059 |
380071 |
380117 |
380129 |
380131 |
380141 |
380147 |
380179 |
380189 |
380197 |
380201 |
380203 |
380207 |
380231 |
380251 |
380267 |
380269 |
380287 |
380291 |
380299 |
380309 |
380311 |
380327 |
380329 |
380333 |
380363 |
380377 |
380383 |
380417 |
380423 |
380441 |
380447 |
380453 |
380459 |
380461 |
380483 |
380503 |
380533 |
380557 |
380563 |
380591 |
380621 |
380623 |
380629 |
380641 |
380651 |
380657 |
380707 |
380713 |
380729 |
380753 |
380777 |
380797 |
380803 |
380819 |
380837 |
380839 |
380843 |
380867 |
380869 |
380879 |
380881 |
380909 |
380917 |
380929 |
380951 |
380957 |
380971 |
380977 |
380983 |
381001 |
381011 |
381019 |
381037 |
381047 |
381061 |
381071 |
381077 |
381097 |
381103 |
381167 |
381169 |
381181 |
381209 |
381221 |
381223 |
381233 |
381239 |
381253 |
381287 |
381289 |
381301 |
381319 |
381323 |
381343 |
381347 |
381371 |
381373 |
381377 |
381383 |
381389 |
381401 |
381413 |
381419 |
381439 |
381443 |
381461 |
381467 |
381481 |
381487 |
381509 |
381523 |
381527 |
381529 |
381533 |
381541 |
381559 |
381569 |
381607 |
381629 |
381631 |
381637 |
381659 |
381673 |
381697 |
381707 |
381713 |
381737 |
381739 |
381749 |
381757 |
381761 |
381791 |
381793 |
381817 |
381841 |
381853 |
381859 |
381911 |
381917 |
381937 |
381943 |
381949 |
381977 |
381989 |
381991 |
382001 |
382003 |
382021 |
382037 |
382061 |
382069 |
382073 |
382087 |
382103 |
382117 |
382163 |
382171 |
382189 |
382229 |
382231 |
382241 |
382253 |
382267 |
382271 |
382303 |
382331 |
382351 |
382357 |
382363 |
382373 |
382391 |
382427 |
382429 |
382457 |
382463 |
382493 |
382507 |
382511 |
382519 |
382541 |
382549 |
382553 |
382567 |
382579 |
382583 |
382589 |
382601 |
382621 |
382631 |
382643 |
382649 |
382661 |
382663 |
382693 |
382703 |
382709 |
382727 |
382729 |
382747 |
382751 |
382763 |
382769 |
382777 |
382801 |
382807 |
382813 |
382843 |
382847 |
382861 |
382867 |
382871 |
382873 |
382883 |
382919 |
382933 |
382939 |
382961 |
382979 |
382999 |
383011 |
383023 |
383029 |
383041 |
383051 |
383069 |
383077 |
383081 |
383083 |
383099 |
383101 |
383107 |
383113 |
383143 |
383147 |
383153 |
383171 |
383179 |
383219 |
383221 |
383261 |
383267 |
383281 |
383291 |
383297 |
383303 |
383321 |
383347 |
383371 |
383393 |
383399 |
383417 |
383419 |
383429 |
383459 |
383483 |
383489 |
383519 |
383521 |
383527 |
383533 |
383549 |
383557 |
383573 |
383587 |
383609 |
383611 |
383623 |
383627 |
383633 |
383651 |
383657 |
383659 |
383681 |
383683 |
383693 |
383723 |
383729 |
383753 |
383759 |
383767 |
383777 |
383791 |
383797 |
383807 |
383813 |
383821 |
383833 |
383837 |
383839 |
383869 |
383891 |
383909 |
383917 |
383923 |
383941 |
383951 |
383963 |
383969 |
383983 |
383987 |
384001 |
384017 |
384029 |
384049 |
384061 |
384067 |
384079 |
384089 |
384107 |
384113 |
384133 |
384143 |
384151 |
384157 |
384173 |
384187 |
384193 |
384203 |
384227 |
384247 |
384253 |
384257 |
384259 |
384277 |
384287 |
384289 |
384299 |
384301 |
384317 |
384331 |
384343 |
384359 |
384367 |
384383 |
384403 |
384407 |
384437 |
384469 |
384473 |
384479 |
384481 |
384487 |
384497 |
384509 |
384533 |
384547 |
384577 |
384581 |
384589 |
384599 |
384611 |
384619 |
384623 |
384641 |
384673 |
384691 |
384697 |
384701 |
384719 |
384733 |
384737 |
384751 |
384757 |
384773 |
384779 |
384817 |
384821 |
384827 |
384841 |
384847 |
384851 |
384889 |
384907 |
384913 |
384919 |
384941 |
384961 |
384973 |
385001 |
385013 |
385027 |
385039 |
385057 |
385069 |
385079 |
385081 |
385087 |
385109 |
385127 |
385129 |
385139 |
385141 |
385153 |
385159 |
385171 |
385193 |
385199 |
385223 |
385249 |
385261 |
385267 |
385279 |
385289 |
385291 |
385321 |
385327 |
385331 |
385351 |
385379 |
385391 |
385393 |
385397 |
385403 |
385417 |
385433 |
385471 |
385481 |
385493 |
385501 |
385519 |
385531 |
385537 |
385559 |
385571 |
385573 |
385579 |
385589 |
385591 |
385597 |
385607 |
385621 |
385631 |
385639 |
385657 |
385661 |
385663 |
385709 |
385739 |
385741 |
385771 |
385783 |
385793 |
385811 |
385817 |
385831 |
385837 |
385843 |
385859 |
385877 |
385897 |
385901 |
385907 |
385927 |
385939 |
385943 |
385967 |
385991 |
385997 |
386017 |
386039 |
386041 |
386047 |
386051 |
386083 |
386093 |
386117 |
386119 |
386129 |
386131 |
386143 |
386149 |
386153 |
386159 |
386161 |
386173 |
386219 |
386227 |
386233 |
386237 |
386249 |
386263 |
386279 |
386297 |
386299 |
386303 |
386329 |
386333 |
386339 |
386363 |
386369 |
386371 |
386381 |
386383 |
386401 |
386411 |
386413 |
386429 |
386431 |
386437 |
386471 |
386489 |
386501 |
386521 |
386537 |
386543 |
386549 |
386569 |
386587 |
386609 |
386611 |
386621 |
386629 |
386641 |
386647 |
386651 |
386677 |
386689 |
386693 |
386713 |
386719 |
386723 |
386731 |
386747 |
386777 |
386809 |
386839 |
386851 |
386887 |
386891 |
386921 |
386927 |
386963 |
386977 |
386987 |
386989 |
386993 |
387007 |
387017 |
387031 |
387047 |
387071 |
387077 |
387083 |
387089 |
387109 |
387137 |
387151 |
387161 |
387169 |
387173 |
387187 |
387197 |
387199 |
387203 |
387227 |
387253 |
387263 |
387269 |
387281 |
387307 |
387313 |
387329 |
387341 |
387371 |
387397 |
387403 |
387433 |
387437 |
387449 |
387463 |
387493 |
387503 |
387509 |
387529 |
387551 |
387577 |
387587 |
387613 |
387623 |
387631 |
387641 |
387659 |
387677 |
387679 |
387683 |
387707 |
387721 |
387727 |
387743 |
387749 |
387763 |
387781 |
387791 |
387799 |
387839 |
387853 |
387857 |
387911 |
387913 |
387917 |
387953 |
387967 |
387971 |
387973 |
387977 |
388009 |
388051 |
388057 |
388067 |
388081 |
388099 |
388109 |
388111 |
388117 |
388133 |
388159 |
388163 |
388169 |
388177 |
388181 |
388183 |
388187 |
388211 |
388231 |
388237 |
388253 |
388259 |
388273 |
388277 |
388301 |
388313 |
388319 |
388351 |
388363 |
388369 |
388373 |
388391 |
388403 |
388459 |
388471 |
388477 |
388481 |
388483 |
388489 |
388499 |
388519 |
388529 |
388541 |
388567 |
388573 |
388621 |
388651 |
388657 |
388673 |
388691 |
388693 |
388697 |
388699 |
388711 |
388727 |
388757 |
388777 |
388781 |
388789 |
388793 |
388813 |
388823 |
388837 |
388859 |
388879 |
388891 |
388897 |
388901 |
388903 |
388931 |
388933 |
388937 |
388961 |
388963 |
388991 |
389003 |
389023 |
389027 |
389029 |
389041 |
389047 |
389057 |
389083 |
389089 |
389099 |
389111 |
389117 |
389141 |
389149 |
389161 |
389167 |
389171 |
389173 |
389189 |
389219 |
389227 |
389231 |
389269 |
389273 |
389287 |
389297 |
389299 |
389303 |
389357 |
389369 |
389381 |
389399 |
389401 |
389437 |
389447 |
389461 |
389479 |
389483 |
389507 |
389513 |
389527 |
389531 |
389533 |
389539 |
389561 |
389563 |
389567 |
389569 |
389579 |
389591 |
389621 |
389629 |
389651 |
389659 |
389663 |
389687 |
389699 |
389713 |
389723 |
389743 |
389749 |
389761 |
389773 |
389783 |
389791 |
389797 |
389819 |
389839 |
389849 |
389867 |
389891 |
389897 |
389903 |
389911 |
389923 |
389927 |
389941 |
389947 |
389953 |
389957 |
389971 |
389981 |
389989 |
389999 |
390001 |
390043 |
390067 |
390077 |
390083 |
390097 |
390101 |
390107 |
390109 |
390113 |
390119 |
390151 |
390157 |
390161 |
390191 |
390193 |
390199 |
390209 |
390211 |
390223 |
390263 |
390281 |
390289 |
390307 |
390323 |
390343 |
390347 |
390353 |
390359 |
390367 |
390373 |
390389 |
390391 |
390407 |
390413 |
390419 |
390421 |
390433 |
390437 |
390449 |
390463 |
390479 |
390487 |
390491 |
390493 |
390499 |
390503 |
390527 |
390539 |
390553 |
390581 |
390647 |
390653 |
390671 |
390673 |
390703 |
390707 |
390721 |
390727 |
390737 |
390739 |
390743 |
390751 |
390763 |
390781 |
390791 |
390809 |
390821 |
390829 |
390851 |
390869 |
390877 |
390883 |
390889 |
390893 |
390953 |
390959 |
390961 |
390967 |
390989 |
390991 |
391009 |
391019 |
391021 |
391031 |
391049 |
391057 |
391063 |
391067 |
391073 |
391103 |
391117 |
391133 |
391151 |
391159 |
391163 |
391177 |
391199 |
391217 |
391219 |
391231 |
391247 |
391249 |
391273 |
391283 |
391291 |
391301 |
391331 |
391337 |
391351 |
391367 |
391373 |
391379 |
391387 |
391393 |
391397 |
391399 |
391403 |
391441 |
391451 |
391453 |
391487 |
391519 |
391537 |
391553 |
391579 |
391613 |
391619 |
391627 |
391631 |
391639 |
391661 |
391679 |
391691 |
391693 |
391711 |
391717 |
391733 |
391739 |
391751 |
391753 |
391757 |
391789 |
391801 |
391817 |
391823 |
391847 |
391861 |
391873 |
391879 |
391889 |
391891 |
391903 |
391907 |
391921 |
391939 |
391961 |
391967 |
391987 |
391999 |
392011 |
392033 |
392053 |
392059 |
392069 |
392087 |
392099 |
392101 |
392111 |
392113 |
392131 |
392143 |
392149 |
392153 |
392159 |
392177 |
392201 |
392209 |
392213 |
392221 |
392233 |
392239 |
392251 |
392261 |
392263 |
392267 |
392269 |
392279 |
392281 |
392297 |
392299 |
392321 |
392333 |
392339 |
392347 |
392351 |
392363 |
392383 |
392389 |
392423 |
392437 |
392443 |
392467 |
392473 |
392477 |
392489 |
392503 |
392519 |
392531 |
392543 |
392549 |
392569 |
392593 |
392599 |
392611 |
392629 |
392647 |
392663 |
392669 |
392699 |
392723 |
392737 |
392741 |
392759 |
392761 |
392767 |
392803 |
392807 |
392809 |
392827 |
392831 |
392837 |
392849 |
392851 |
392857 |
392879 |
392893 |
392911 |
392923 |
392927 |
392929 |
392957 |
392963 |
392969 |
392981 |
392983 |
393007 |
393013 |
393017 |
393031 |
393059 |
393073 |
393077 |
393079 |
393083 |
393097 |
393103 |
393109 |
393121 |
393137 |
393143 |
393157 |
393161 |
393181 |
393187 |
393191 |
393203 |
393209 |
393241 |
393247 |
393257 |
393271 |
393287 |
393299 |
393301 |
393311 |
393331 |
393361 |
393373 |
393377 |
393383 |
393401 |
393403 |
393413 |
393451 |
393473 |
393479 |
393487 |
393517 |
393521 |
393539 |
393541 |
393551 |
393557 |
393571 |
393577 |
393581 |
393583 |
393587 |
393593 |
393611 |
393629 |
393637 |
393649 |
393667 |
393671 |
393677 |
393683 |
393697 |
393709 |
393713 |
393721 |
393727 |
393739 |
393749 |
393761 |
393779 |
393797 |
393847 |
393853 |
393857 |
393859 |
393863 |
393871 |
393901 |
393919 |
393929 |
393931 |
393947 |
393961 |
393977 |
393989 |
393997 |
394007 |
394019 |
394039 |
394049 |
394063 |
394073 |
394099 |
394123 |
394129 |
394153 |
394157 |
394169 |
394187 |
394201 |
394211 |
394223 |
394241 |
394249 |
394259 |
394271 |
394291 |
394319 |
394327 |
394357 |
394363 |
394367 |
394369 |
394393 |
394409 |
394411 |
394453 |
394481 |
394489 |
394501 |
394507 |
394523 |
394529 |
394549 |
394571 |
394577 |
394579 |
394601 |
394619 |
394631 |
394633 |
394637 |
394643 |
394673 |
394699 |
394717 |
394721 |
394727 |
394729 |
394733 |
394739 |
394747 |
394759 |
394787 |
394811 |
394813 |
394817 |
394819 |
394829 |
394837 |
394861 |
394879 |
394897 |
394931 |
394943 |
394963 |
394967 |
394969 |
394981 |
394987 |
394993 |
395023 |
395027 |
395039 |
395047 |
395069 |
395089 |
395093 |
395107 |
395111 |
395113 |
395119 |
395137 |
395141 |
395147 |
395159 |
395173 |
395189 |
395191 |
395201 |
395231 |
395243 |
395251 |
395261 |
395273 |
395287 |
395293 |
395303 |
395309 |
395321 |
395323 |
395377 |
395383 |
395407 |
395429 |
395431 |
395443 |
395449 |
395453 |
395459 |
395491 |
395509 |
395513 |
395533 |
395537 |
395543 |
395581 |
395597 |
395611 |
395621 |
395627 |
395657 |
395671 |
395677 |
395687 |
395701 |
395719 |
395737 |
395741 |
395749 |
395767 |
395803 |
395849 |
395851 |
395873 |
395887 |
395891 |
395897 |
395909 |
395921 |
395953 |
395959 |
395971 |
396001 |
396029 |
396031 |
396041 |
396043 |
396061 |
396079 |
396091 |
396103 |
396107 |
396119 |
396157 |
396173 |
396181 |
396197 |
396199 |
396203 |
396217 |
396239 |
396247 |
396259 |
396269 |
396293 |
396299 |
396301 |
396311 |
396323 |
396349 |
396353 |
396373 |
396377 |
396379 |
396413 |
396427 |
396437 |
396443 |
396449 |
396479 |
396509 |
396523 |
396527 |
396533 |
396541 |
396547 |
396563 |
396577 |
396581 |
396601 |
396619 |
396623 |
396629 |
396631 |
396637 |
396647 |
396667 |
396679 |
396703 |
396709 |
396713 |
396719 |
396733 |
396833 |
396871 |
396881 |
396883 |
396887 |
396919 |
396931 |
396937 |
396943 |
396947 |
396953 |
396971 |
396983 |
396997 |
397013 |
397027 |
397037 |
397051 |
397057 |
397063 |
397073 |
397093 |
397099 |
397127 |
397151 |
397153 |
397181 |
397183 |
397211 |
397217 |
397223 |
397237 |
397253 |
397259 |
397283 |
397289 |
397297 |
397301 |
397303 |
397337 |
397351 |
397357 |
397361 |
397373 |
397379 |
397427 |
397429 |
397433 |
397459 |
397469 |
397489 |
397493 |
397517 |
397519 |
397541 |
397543 |
397547 |
397549 |
397567 |
397589 |
397591 |
397597 |
397633 |
397643 |
397673 |
397687 |
397697 |
397721 |
397723 |
397729 |
397751 |
397753 |
397757 |
397759 |
397763 |
397799 |
397807 |
397811 |
397829 |
397849 |
397867 |
397897 |
397907 |
397921 |
397939 |
397951 |
397963 |
397973 |
397981 |
398011 |
398023 |
398029 |
398033 |
398039 |
398053 |
398059 |
398063 |
398077 |
398087 |
398113 |
398117 |
398119 |
398129 |
398143 |
398149 |
398171 |
398207 |
398213 |
398219 |
398227 |
398249 |
398261 |
398267 |
398273 |
398287 |
398303 |
398311 |
398323 |
398339 |
398341 |
398347 |
398353 |
398357 |
398369 |
398393 |
398407 |
398417 |
398423 |
398441 |
398459 |
398467 |
398471 |
398473 |
398477 |
398491 |
398509 |
398539 |
398543 |
398549 |
398557 |
398569 |
398581 |
398591 |
398609 |
398611 |
398621 |
398627 |
398669 |
398681 |
398683 |
398693 |
398711 |
398729 |
398731 |
398759 |
398771 |
398813 |
398819 |
398821 |
398833 |
398857 |
398863 |
398887 |
398903 |
398917 |
398921 |
398933 |
398941 |
398969 |
398977 |
398989 |
399023 |
399031 |
399043 |
399059 |
399067 |
399071 |
399079 |
399097 |
399101 |
399107 |
399131 |
399137 |
399149 |
399151 |
399163 |
399173 |
399181 |
399197 |
399221 |
399227 |
399239 |
399241 |
399263 |
399271 |
399277 |
399281 |
399283 |
399353 |
399379 |
399389 |
399391 |
399401 |
399403 |
399409 |
399433 |
399439 |
399473 |
399481 |
399491 |
399493 |
399499 |
399523 |
399527 |
399541 |
399557 |
399571 |
399577 |
399583 |
399587 |
399601 |
399613 |
399617 |
399643 |
399647 |
399667 |
399677 |
399689 |
399691 |
399719 |
399727 |
399731 |
399739 |
399757 |
399761 |
399769 |
399781 |
399787 |
399793 |
399851 |
399853 |
399871 |
399887 |
399899 |
399911 |
399913 |
399937 |
399941 |
399953 |
399979 |
399983 |
399989 |
400009 |
400031 |
400033 |
400051 |
400067 |
400069 |
400087 |
400093 |
400109 |
400123 |
400151 |
400157 |
400187 |
400199 |
400207 |
400217 |
400237 |
400243 |
400247 |
400249 |
400261 |
400277 |
400291 |
400297 |
400307 |
400313 |
400321 |
400331 |
400339 |
400381 |
400391 |
400409 |
400417 |
400429 |
400441 |
400457 |
400471 |
400481 |
400523 |
400559 |
400579 |
400597 |
400601 |
400607 |
400619 |
400643 |
400651 |
400657 |
400679 |
400681 |
400703 |
400711 |
400721 |
400723 |
400739 |
400753 |
400759 |
400823 |
400837 |
400849 |
400853 |
400859 |
400871 |
400903 |
400927 |
400931 |
400943 |
400949 |
400963 |
400997 |
401017 |
401029 |
401039 |
401053 |
401057 |
401069 |
401077 |
401087 |
401101 |
401113 |
401119 |
401161 |
401173 |
401179 |
401201 |
401209 |
401231 |
401237 |
401243 |
401279 |
401287 |
401309 |
401311 |
401321 |
401329 |
401341 |
401347 |
401371 |
401381 |
401393 |
401407 |
401411 |
401417 |
401473 |
401477 |
401507 |
401519 |
401537 |
401539 |
401551 |
401567 |
401587 |
401593 |
401627 |
401629 |
401651 |
401669 |
401671 |
401689 |
401707 |
401711 |
401743 |
401771 |
401773 |
401809 |
401813 |
401827 |
401839 |
401861 |
401867 |
401887 |
401903 |
401909 |
401917 |
401939 |
401953 |
401957 |
401959 |
401981 |
401987 |
401993 |
402023 |
402029 |
402037 |
402043 |
402049 |
402053 |
402071 |
402089 |
402091 |
402107 |
402131 |
402133 |
402137 |
402139 |
402197 |
402221 |
402223 |
402239 |
402253 |
402263 |
402277 |
402299 |
402307 |
402313 |
402329 |
402331 |
402341 |
402343 |
402359 |
402361 |
402371 |
402379 |
402383 |
402403 |
402419 |
402443 |
402487 |
402503 |
402511 |
402517 |
402527 |
402529 |
402541 |
402551 |
402559 |
402581 |
402583 |
402587 |
402593 |
402601 |
402613 |
402631 |
402691 |
402697 |
402739 |
402751 |
402757 |
402761 |
402763 |
402767 |
402769 |
402797 |
402803 |
402817 |
402823 |
402847 |
402851 |
402859 |
402863 |
402869 |
402881 |
402923 |
402943 |
402947 |
402949 |
402991 |
403001 |
403003 |
403037 |
403043 |
403049 |
403057 |
403061 |
403063 |
403079 |
403097 |
403103 |
403133 |
403141 |
403159 |
403163 |
403181 |
403219 |
403241 |
403243 |
403253 |
403261 |
403267 |
403289 |
403301 |
403309 |
403327 |
403331 |
403339 |
403363 |
403369 |
403387 |
403391 |
403433 |
403439 |
403483 |
403499 |
403511 |
403537 |
403547 |
403549 |
403553 |
403567 |
403577 |
403591 |
403603 |
403607 |
403621 |
403649 |
403661 |
403679 |
403681 |
403687 |
403703 |
403717 |
403721 |
403729 |
403757 |
403783 |
403787 |
403817 |
403829 |
403831 |
403849 |
403861 |
403867 |
403877 |
403889 |
403901 |
403933 |
403951 |
403957 |
403969 |
403979 |
403981 |
403993 |
404009 |
404011 |
404017 |
404021 |
404029 |
404051 |
404081 |
404099 |
404113 |
404119 |
404123 |
404161 |
404167 |
404177 |
404189 |
404191 |
404197 |
404213 |
404221 |
404249 |
404251 |
404267 |
404269 |
404273 |
404291 |
404309 |
404321 |
404323 |
404357 |
404381 |
404387 |
404389 |
404399 |
404419 |
404423 |
404429 |
404431 |
404449 |
404461 |
404483 |
404489 |
404497 |
404507 |
404513 |
404527 |
404531 |
404533 |
404539 |
404557 |
404597 |
404671 |
404693 |
404699 |
404713 |
404773 |
404779 |
404783 |
404819 |
404827 |
404837 |
404843 |
404849 |
404851 |
404941 |
404951 |
404959 |
404969 |
404977 |
404981 |
404983 |
405001 |
405011 |
405029 |
405037 |
405047 |
405049 |
405071 |
405073 |
405089 |
405091 |
405143 |
405157 |
405179 |
405199 |
405211 |
405221 |
405227 |
405239 |
405241 |
405247 |
405253 |
405269 |
405277 |
405287 |
405299 |
405323 |
405341 |
405343 |
405347 |
405373 |
405401 |
405407 |
405413 |
405437 |
405439 |
405473 |
405487 |
405491 |
405497 |
405499 |
405521 |
405527 |
405529 |
405541 |
405553 |
405577 |
405599 |
405607 |
405611 |
405641 |
405659 |
405667 |
405677 |
405679 |
405683 |
405689 |
405701 |
405703 |
405709 |
405719 |
405731 |
405749 |
405763 |
405767 |
405781 |
405799 |
405817 |
405827 |
405829 |
405857 |
405863 |
405869 |
405871 |
405893 |
405901 |
405917 |
405947 |
405949 |
405959 |
405967 |
405989 |
405991 |
405997 |
406013 |
406027 |
406037 |
406067 |
406073 |
406093 |
406117 |
406123 |
406169 |
406171 |
406177 |
406183 |
406207 |
406247 |
406253 |
406267 |
406271 |
406309 |
406313 |
406327 |
406331 |
406339 |
406349 |
406361 |
406381 |
406397 |
406403 |
406423 |
406447 |
406481 |
406499 |
406501 |
406507 |
406513 |
406517 |
406531 |
406547 |
406559 |
406561 |
406573 |
406577 |
406579 |
406583 |
406591 |
406631 |
406633 |
406649 |
406661 |
406673 |
406697 |
406699 |
406717 |
406729 |
406739 |
406789 |
406807 |
406811 |
406817 |
406837 |
406859 |
406873 |
406883 |
406907 |
406951 |
406969 |
406981 |
406993 |
407023 |
407047 |
407059 |
407083 |
407119 |
407137 |
407149 |
407153 |
407177 |
407179 |
407191 |
407203 |
407207 |
407219 |
407221 |
407233 |
407249 |
407257 |
407263 |
407273 |
407287 |
407291 |
407299 |
407311 |
407317 |
407321 |
407347 |
407357 |
407359 |
407369 |
407377 |
407383 |
407401 |
407437 |
407471 |
407483 |
407489 |
407501 |
407503 |
407509 |
407521 |
407527 |
407567 |
407573 |
407579 |
407587 |
407599 |
407621 |
407633 |
407639 |
407651 |
407657 |
407669 |
407699 |
407707 |
407713 |
407717 |
407723 |
407741 |
407747 |
407783 |
407789 |
407791 |
407801 |
407807 |
407821 |
407833 |
407843 |
407857 |
407861 |
407879 |
407893 |
407899 |
407917 |
407923 |
407947 |
407959 |
407969 |
407971 |
407977 |
407993 |
408011 |
408019 |
408041 |
408049 |
408071 |
408077 |
408091 |
408127 |
408131 |
408137 |
408169 |
408173 |
408197 |
408203 |
408209 |
408211 |
408217 |
408223 |
408229 |
408241 |
408251 |
408263 |
408271 |
408283 |
408311 |
408337 |
408341 |
408347 |
408361 |
408379 |
408389 |
408403 |
408413 |
408427 |
408431 |
408433 |
408437 |
408461 |
408469 |
408479 |
408491 |
408497 |
408533 |
408539 |
408553 |
408563 |
408607 |
408623 |
408631 |
408637 |
408643 |
408659 |
408677 |
408689 |
408691 |
408701 |
408703 |
408713 |
408719 |
408743 |
408763 |
408769 |
408773 |
408787 |
408803 |
408809 |
408817 |
408841 |
408857 |
408869 |
408911 |
408913 |
408923 |
408943 |
408953 |
408959 |
408971 |
408979 |
408997 |
409007 |
409021 |
409027 |
409033 |
409043 |
409063 |
409069 |
409081 |
409099 |
409121 |
409153 |
409163 |
409177 |
409187 |
409217 |
409237 |
409259 |
409261 |
409267 |
409271 |
409289 |
409291 |
409327 |
409333 |
409337 |
409349 |
409351 |
409369 |
409379 |
409391 |
409397 |
409429 |
409433 |
409441 |
409463 |
409471 |
409477 |
409483 |
409499 |
409517 |
409523 |
409529 |
409543 |
409573 |
409579 |
409589 |
409597 |
409609 |
409639 |
409657 |
409691 |
409693 |
409709 |
409711 |
409723 |
409729 |
409733 |
409753 |
409769 |
409777 |
409781 |
409813 |
409817 |
409823 |
409831 |
409841 |
409861 |
409867 |
409879 |
409889 |
409891 |
409897 |
409901 |
409909 |
409933 |
409943 |
409951 |
409961 |
409967 |
409987 |
409993 |
409999 |
410009 |
410029 |
410063 |
410087 |
410093 |
410117 |
410119 |
410141 |
410143 |
410149 |
410171 |
410173 |
410203 |
410231 |
410233 |
410239 |
410243 |
410257 |
410279 |
410281 |
410299 |
410317 |
410323 |
410339 |
410341 |
410353 |
410359 |
410383 |
410387 |
410393 |
410401 |
410411 |
410413 |
410453 |
410461 |
410477 |
410489 |
410491 |
410497 |
410507 |
410513 |
410519 |
410551 |
410561 |
410587 |
410617 |
410621 |
410623 |
410629 |
410651 |
410659 |
410671 |
410687 |
410701 |
410717 |
410731 |
410741 |
410747 |
410749 |
410759 |
410783 |
410789 |
410801 |
410807 |
410819 |
410833 |
410857 |
410899 |
410903 |
410929 |
410953 |
410983 |
410999 |
411001 |
411007 |
411011 |
411013 |
411031 |
411041 |
411049 |
411067 |
411071 |
411083 |
411101 |
411113 |
411119 |
411127 |
411143 |
411157 |
411167 |
411193 |
411197 |
411211 |
411233 |
411241 |
411251 |
411253 |
411259 |
411287 |
411311 |
411337 |
411347 |
411361 |
411371 |
411379 |
411409 |
411421 |
411443 |
411449 |
411469 |
411473 |
411479 |
411491 |
411503 |
411527 |
411529 |
411557 |
411563 |
411569 |
411577 |
411583 |
411589 |
411611 |
411613 |
411617 |
411637 |
411641 |
411667 |
411679 |
411683 |
411703 |
411707 |
411709 |
411721 |
411727 |
411737 |
411739 |
411743 |
411751 |
411779 |
411799 |
411809 |
411821 |
411823 |
411833 |
411841 |
411883 |
411919 |
411923 |
411937 |
411941 |
411947 |
411967 |
411991 |
412001 |
412007 |
412019 |
412031 |
412033 |
412037 |
412039 |
412051 |
412067 |
412073 |
412081 |
412099 |
412109 |
412123 |
412127 |
412133 |
412147 |
412157 |
412171 |
412187 |
412189 |
412193 |
412201 |
412211 |
412213 |
412219 |
412249 |
412253 |
412273 |
412277 |
412289 |
412303 |
412333 |
412339 |
412343 |
412387 |
412397 |
412411 |
412457 |
412463 |
412481 |
412487 |
412493 |
412537 |
412561 |
412567 |
412571 |
412589 |
412591 |
412603 |
412609 |
412619 |
412627 |
412637 |
412639 |
412651 |
412663 |
412667 |
412717 |
412739 |
412771 |
412793 |
412807 |
412831 |
412849 |
412859 |
412891 |
412901 |
412903 |
412939 |
412943 |
412949 |
412967 |
412987 |
413009 |
413027 |
413033 |
413053 |
413069 |
413071 |
413081 |
413087 |
413089 |
413093 |
413111 |
413113 |
413129 |
413141 |
413143 |
413159 |
413167 |
413183 |
413197 |
413201 |
413207 |
413233 |
413243 |
413251 |
413263 |
413267 |
413293 |
413299 |
413353 |
413411 |
413417 |
413429 |
413443 |
413461 |
413477 |
413521 |
413527 |
413533 |
413537 |
413551 |
413557 |
413579 |
413587 |
413597 |
413629 |
413653 |
413681 |
413683 |
413689 |
413711 |
413713 |
413719 |
413737 |
413753 |
413759 |
413779 |
413783 |
413807 |
413827 |
413849 |
413863 |
413867 |
413869 |
413879 |
413887 |
413911 |
413923 |
413951 |
413981 |
414013 |
414017 |
414019 |
414031 |
414049 |
414053 |
414061 |
414077 |
414083 |
414097 |
414101 |
414107 |
414109 |
414131 |
414157 |
414179 |
414199 |
414203 |
414209 |
414217 |
414221 |
414241 |
414259 |
414269 |
414277 |
414283 |
414311 |
414313 |
414329 |
414331 |
414347 |
414361 |
414367 |
414383 |
414389 |
414397 |
414413 |
414431 |
414433 |
414451 |
414457 |
414461 |
414467 |
414487 |
414503 |
414521 |
414539 |
414553 |
414559 |
414571 |
414577 |
414607 |
414611 |
414629 |
414641 |
414643 |
414653 |
414677 |
414679 |
414683 |
414691 |
414697 |
414703 |
414707 |
414709 |
414721 |
414731 |
414737 |
414763 |
414767 |
414769 |
414773 |
414779 |
414793 |
414803 |
414809 |
414833 |
414857 |
414871 |
414889 |
414893 |
414899 |
414913 |
414923 |
414929 |
414949 |
414959 |
414971 |
414977 |
414991 |
415013 |
415031 |
415039 |
415061 |
415069 |
415073 |
415087 |
415097 |
415109 |
415111 |
415133 |
415141 |
415147 |
415153 |
415159 |
415171 |
415187 |
415189 |
415201 |
415213 |
415231 |
415253 |
415271 |
415273 |
415319 |
415343 |
415379 |
415381 |
415391 |
415409 |
415427 |
415447 |
415469 |
415477 |
415489 |
415507 |
415517 |
415523 |
415543 |
415553 |
415559 |
415567 |
415577 |
415603 |
415607 |
415609 |
415627 |
415631 |
415643 |
415651 |
415661 |
415669 |
415673 |
415687 |
415691 |
415697 |
415717 |
415721 |
415729 |
415759 |
415783 |
415787 |
415799 |
415801 |
415819 |
415823 |
415861 |
415873 |
415879 |
415901 |
415931 |
415937 |
415949 |
415951 |
415957 |
415963 |
415969 |
415979 |
415993 |
415999 |
416011 |
416023 |
416071 |
416077 |
416089 |
416107 |
416147 |
416149 |
416153 |
416159 |
416167 |
416201 |
416219 |
416239 |
416243 |
416249 |
416257 |
416263 |
416281 |
416291 |
416333 |
416359 |
416387 |
416389 |
416393 |
416399 |
416401 |
416407 |
416413 |
416417 |
416419 |
416441 |
416443 |
416459 |
416473 |
416477 |
416491 |
416497 |
416501 |
416503 |
416513 |
416531 |
416543 |
416573 |
416579 |
416593 |
416621 |
416623 |
416629 |
416659 |
416677 |
416693 |
416719 |
416761 |
416797 |
416821 |
416833 |
416839 |
416849 |
416851 |
416873 |
416881 |
416887 |
416947 |
416957 |
416963 |
416989 |
417007 |
417017 |
417019 |
417023 |
417037 |
417089 |
417097 |
417113 |
417119 |
417127 |
417133 |
417161 |
417169 |
417173 |
417181 |
417187 |
417191 |
417203 |
417217 |
417227 |
417239 |
417251 |
417271 |
417283 |
417293 |
417311 |
417317 |
417331 |
417337 |
417371 |
417377 |
417379 |
417383 |
417419 |
417437 |
417451 |
417457 |
417479 |
417491 |
417493 |
417509 |
417511 |
417523 |
417541 |
417553 |
417559 |
417577 |
417581 |
417583 |
417617 |
417623 |
417631 |
417643 |
417649 |
417671 |
417691 |
417719 |
417721 |
417727 |
417731 |
417733 |
417737 |
417751 |
417763 |
417773 |
417793 |
417811 |
417821 |
417839 |
417863 |
417869 |
417881 |
417883 |
417899 |
417931 |
417941 |
417947 |
417953 |
417959 |
417961 |
417983 |
417997 |
418007 |
418009 |
418027 |
418031 |
418043 |
418051 |
418069 |
418073 |
418079 |
418087 |
418109 |
418129 |
418157 |
418169 |
418177 |
418181 |
418189 |
418199 |
418207 |
418219 |
418259 |
418273 |
418279 |
418289 |
418303 |
418321 |
418331 |
418337 |
418339 |
418343 |
418349 |
418351 |
418357 |
418373 |
418381 |
418391 |
418423 |
418427 |
418447 |
418459 |
418471 |
418493 |
418511 |
418553 |
418559 |
418597 |
418601 |
418603 |
418631 |
418633 |
418637 |
418657 |
418667 |
418699 |
418709 |
418721 |
418739 |
418751 |
418763 |
418771 |
418783 |
418787 |
418793 |
418799 |
418811 |
418813 |
418819 |
418837 |
418843 |
418849 |
418861 |
418867 |
418871 |
418883 |
418889 |
418909 |
418921 |
418927 |
418933 |
418939 |
418961 |
418981 |
418987 |
418993 |
418997 |
419047 |
419051 |
419053 |
419057 |
419059 |
419087 |
419141 |
419147 |
419161 |
419171 |
419183 |
419189 |
419191 |
419201 |
419231 |
419249 |
419261 |
419281 |
419291 |
419297 |
419303 |
419317 |
419329 |
419351 |
419383 |
419401 |
419417 |
419423 |
419429 |
419443 |
419449 |
419459 |
419467 |
419473 |
419477 |
419483 |
419491 |
419513 |
419527 |
419537 |
419557 |
419561 |
419563 |
419567 |
419579 |
419591 |
419597 |
419599 |
419603 |
419609 |
419623 |
419651 |
419687 |
419693 |
419701 |
419711 |
419743 |
419753 |
419777 |
419789 |
419791 |
419801 |
419803 |
419821 |
419827 |
419831 |
419873 |
419893 |
419921 |
419927 |
419929 |
419933 |
419953 |
419959 |
419999 |
420001 |
420029 |
420037 |
420041 |
420047 |
420073 |
420097 |
420103 |
420149 |
420163 |
420191 |
420193 |
420221 |
420241 |
420253 |
420263 |
420269 |
420271 |
420293 |
420307 |
420313 |
420317 |
420319 |
420323 |
420331 |
420341 |
420349 |
420353 |
420361 |
420367 |
420383 |
420397 |
420419 |
420421 |
420439 |
420457 |
420467 |
420479 |
420481 |
420499 |
420503 |
420521 |
420551 |
420557 |
420569 |
420571 |
420593 |
420599 |
420613 |
420671 |
420677 |
420683 |
420691 |
420731 |
420737 |
420743 |
420757 |
420769 |
420779 |
420781 |
420799 |
420803 |
420809 |
420811 |
420851 |
420853 |
420857 |
420859 |
420899 |
420919 |
420929 |
420941 |
420967 |
420977 |
420997 |
421009 |
421019 |
421033 |
421037 |
421049 |
421079 |
421081 |
421093 |
421103 |
421121 |
421123 |
421133 |
421147 |
421159 |
421163 |
421177 |
421181 |
421189 |
421207 |
421241 |
421273 |
421279 |
421303 |
421313 |
421331 |
421339 |
421349 |
421361 |
421381 |
421397 |
421409 |
421417 |
421423 |
421433 |
421453 |
421459 |
421469 |
421471 |
421483 |
421493 |
421501 |
421517 |
421559 |
421607 |
421609 |
421621 |
421633 |
421639 |
421643 |
421657 |
421661 |
421691 |
421697 |
421699 |
421703 |
421709 |
421711 |
421717 |
421727 |
421739 |
421741 |
421783 |
421801 |
421807 |
421831 |
421847 |
421891 |
421907 |
421913 |
421943 |
421973 |
421987 |
421997 |
422029 |
422041 |
422057 |
422063 |
422069 |
422077 |
422083 |
422087 |
422089 |
422099 |
422101 |
422111 |
422113 |
422129 |
422137 |
422141 |
422183 |
422203 |
422209 |
422231 |
422239 |
422243 |
422249 |
422267 |
422287 |
422291 |
422309 |
422311 |
422321 |
422339 |
422353 |
422363 |
422369 |
422377 |
422393 |
422407 |
422431 |
422453 |
422459 |
422479 |
422537 |
422549 |
422551 |
422557 |
422563 |
422567 |
422573 |
422581 |
422621 |
422627 |
422657 |
422689 |
422701 |
422707 |
422711 |
422749 |
422753 |
422759 |
422761 |
422789 |
422797 |
422803 |
422827 |
422857 |
422861 |
422867 |
422869 |
422879 |
422881 |
422893 |
422897 |
422899 |
422911 |
422923 |
422927 |
422969 |
422987 |
423001 |
423013 |
423019 |
423043 |
423053 |
423061 |
423067 |
423083 |
423091 |
423097 |
423103 |
423109 |
423121 |
423127 |
423133 |
423173 |
423179 |
423191 |
423209 |
423221 |
423229 |
423233 |
423251 |
423257 |
423259 |
423277 |
423281 |
423287 |
423289 |
423299 |
423307 |
423323 |
423341 |
423347 |
423389 |
423403 |
423413 |
423427 |
423431 |
423439 |
423457 |
423461 |
423463 |
423469 |
423481 |
423497 |
423503 |
423509 |
423541 |
423547 |
423557 |
423559 |
423581 |
423587 |
423601 |
423617 |
423649 |
423667 |
423697 |
423707 |
423713 |
423727 |
423749 |
423751 |
423763 |
423769 |
423779 |
423781 |
423791 |
423803 |
423823 |
423847 |
423853 |
423859 |
423869 |
423883 |
423887 |
423931 |
423949 |
423961 |
423977 |
423989 |
423991 |
424001 |
424003 |
424007 |
424019 |
424027 |
424037 |
424079 |
424091 |
424093 |
424103 |
424117 |
424121 |
424129 |
424139 |
424147 |
424157 |
424163 |
424169 |
424187 |
424199 |
424223 |
424231 |
424243 |
424247 |
424261 |
424267 |
424271 |
424273 |
424313 |
424331 |
424339 |
424343 |
424351 |
424397 |
424423 |
424429 |
424433 |
424451 |
424471 |
424481 |
424493 |
424519 |
424537 |
424547 |
424549 |
424559 |
424573 |
424577 |
424597 |
424601 |
424639 |
424661 |
424667 |
424679 |
424687 |
424693 |
424709 |
424727 |
424729 |
424757 |
424769 |
424771 |
424777 |
424811 |
424817 |
424819 |
424829 |
424841 |
424843 |
424849 |
424861 |
424867 |
424889 |
424891 |
424903 |
424909 |
424913 |
424939 |
424961 |
424967 |
424997 |
425003 |
425027 |
425039 |
425057 |
425059 |
425071 |
425083 |
425101 |
425107 |
425123 |
425147 |
425149 |
425189 |
425197 |
425207 |
425233 |
425237 |
425251 |
425273 |
425279 |
425281 |
425291 |
425297 |
425309 |
425317 |
425329 |
425333 |
425363 |
425377 |
425387 |
425393 |
425417 |
425419 |
425423 |
425441 |
425443 |
425471 |
425473 |
425489 |
425501 |
425519 |
425521 |
425533 |
425549 |
425563 |
425591 |
425603 |
425609 |
425641 |
425653 |
425681 |
425701 |
425713 |
425779 |
425783 |
425791 |
425801 |
425813 |
425819 |
425837 |
425839 |
425851 |
425857 |
425861 |
425869 |
425879 |
425899 |
425903 |
425911 |
425939 |
425959 |
425977 |
425987 |
425989 |
426007 |
426011 |
426061 |
426073 |
426077 |
426089 |
426091 |
426103 |
426131 |
426161 |
426163 |
426193 |
426197 |
426211 |
426229 |
426233 |
426253 |
426287 |
426301 |
426311 |
426319 |
426331 |
426353 |
426383 |
426389 |
426401 |
426407 |
426421 |
426427 |
426469 |
426487 |
426527 |
426541 |
426551 |
426553 |
426563 |
426583 |
426611 |
426631 |
426637 |
426641 |
426661 |
426691 |
426697 |
426707 |
426709 |
426731 |
426737 |
426739 |
426743 |
426757 |
426761 |
426763 |
426773 |
426779 |
426787 |
426799 |
426841 |
426859 |
426863 |
426871 |
426889 |
426893 |
426913 |
426917 |
426919 |
426931 |
426941 |
426971 |
426973 |
426997 |
427001 |
427013 |
427039 |
427043 |
427067 |
427069 |
427073 |
427079 |
427081 |
427103 |
427117 |
427151 |
427169 |
427181 |
427213 |
427237 |
427241 |
427243 |
427247 |
427249 |
427279 |
427283 |
427307 |
427309 |
427327 |
427333 |
427351 |
427369 |
427379 |
427381 |
427403 |
427417 |
427421 |
427423 |
427429 |
427433 |
427439 |
427447 |
427451 |
427457 |
427477 |
427513 |
427517 |
427523 |
427529 |
427541 |
427579 |
427591 |
427597 |
427619 |
427621 |
427681 |
427711 |
427717 |
427723 |
427727 |
427733 |
427751 |
427781 |
427787 |
427789 |
427813 |
427849 |
427859 |
427877 |
427879 |
427883 |
427913 |
427919 |
427939 |
427949 |
427951 |
427957 |
427967 |
427969 |
427991 |
427993 |
427997 |
428003 |
428023 |
428027 |
428033 |
428039 |
428041 |
428047 |
428083 |
428093 |
428137 |
428143 |
428147 |
428149 |
428161 |
428167 |
428173 |
428177 |
428221 |
428227 |
428231 |
428249 |
428251 |
428273 |
428297 |
428299 |
428303 |
428339 |
428353 |
428369 |
428401 |
428411 |
428429 |
428471 |
428473 |
428489 |
428503 |
428509 |
428531 |
428539 |
428551 |
428557 |
428563 |
428567 |
428569 |
428579 |
428629 |
428633 |
428639 |
428657 |
428663 |
428671 |
428677 |
428683 |
428693 |
428731 |
428741 |
428759 |
428777 |
428797 |
428801 |
428807 |
428809 |
428833 |
428843 |
428851 |
428863 |
428873 |
428899 |
428951 |
428957 |
428977 |
429007 |
429017 |
429043 |
429083 |
429101 |
429109 |
429119 |
429127 |
429137 |
429139 |
429161 |
429181 |
429197 |
429211 |
429217 |
429223 |
429227 |
429241 |
429259 |
429271 |
429277 |
429281 |
429283 |
429329 |
429347 |
429349 |
429361 |
429367 |
429389 |
429397 |
429409 |
429413 |
429427 |
429431 |
429449 |
429463 |
429467 |
429469 |
429487 |
429497 |
429503 |
429509 |
429511 |
429521 |
429529 |
429547 |
429551 |
429563 |
429581 |
429587 |
429589 |
429599 |
429631 |
429643 |
429659 |
429661 |
429673 |
429677 |
429679 |
429683 |
429701 |
429719 |
429727 |
429731 |
429733 |
429773 |
429791 |
429797 |
429817 |
429823 |
429827 |
429851 |
429853 |
429881 |
429887 |
429889 |
429899 |
429901 |
429907 |
429911 |
429917 |
429929 |
429931 |
429937 |
429943 |
429953 |
429971 |
429973 |
429991 |
430007 |
430009 |
430013 |
430019 |
430057 |
430061 |
430081 |
430091 |
430093 |
430121 |
430139 |
430147 |
430193 |
430259 |
430267 |
430277 |
430279 |
430289 |
430303 |
430319 |
430333 |
430343 |
430357 |
430393 |
430411 |
430427 |
430433 |
430453 |
430487 |
430499 |
430511 |
430513 |
430517 |
430543 |
430553 |
430571 |
430579 |
430589 |
430601 |
430603 |
430649 |
430663 |
430691 |
430697 |
430699 |
430709 |
430723 |
430739 |
430741 |
430747 |
430751 |
430753 |
430769 |
430783 |
430789 |
430799 |
430811 |
430819 |
430823 |
430841 |
430847 |
430861 |
430873 |
430879 |
430883 |
430891 |
430897 |
430907 |
430909 |
430921 |
430949 |
430957 |
430979 |
430981 |
430987 |
430999 |
431017 |
431021 |
431029 |
431047 |
431051 |
431063 |
431077 |
431083 |
431099 |
431107 |
431141 |
431147 |
431153 |
431173 |
431191 |
431203 |
431213 |
431219 |
431237 |
431251 |
431257 |
431267 |
431269 |
431287 |
431297 |
431311 |
431329 |
431339 |
431363 |
431369 |
431377 |
431381 |
431399 |
431423 |
431429 |
431441 |
431447 |
431449 |
431479 |
431513 |
431521 |
431533 |
431567 |
431581 |
431597 |
431603 |
431611 |
431617 |
431621 |
431657 |
431659 |
431663 |
431671 |
431693 |
431707 |
431729 |
431731 |
431759 |
431777 |
431797 |
431801 |
431803 |
431807 |
431831 |
431833 |
431857 |
431863 |
431867 |
431869 |
431881 |
431887 |
431891 |
431903 |
431911 |
431929 |
431933 |
431947 |
431983 |
431993 |
432001 |
432007 |
432023 |
432031 |
432037 |
432043 |
432053 |
432059 |
432067 |
432073 |
432097 |
432121 |
432137 |
432139 |
432143 |
432149 |
432161 |
432163 |
432167 |
432199 |
432203 |
432227 |
432241 |
432251 |
432277 |
432281 |
432287 |
432301 |
432317 |
432323 |
432337 |
432343 |
432349 |
432359 |
432373 |
432389 |
432391 |
432401 |
432413 |
432433 |
432437 |
432449 |
432457 |
432479 |
432491 |
432499 |
432503 |
432511 |
432527 |
432539 |
432557 |
432559 |
432569 |
432577 |
432587 |
432589 |
432613 |
432631 |
432637 |
432659 |
432661 |
432713 |
432721 |
432727 |
432737 |
432743 |
432749 |
432781 |
432793 |
432797 |
432799 |
432833 |
432847 |
432857 |
432869 |
432893 |
432907 |
432923 |
432931 |
432959 |
432961 |
432979 |
432983 |
432989 |
433003 |
433033 |
433049 |
433051 |
433061 |
433073 |
433079 |
433087 |
433093 |
433099 |
433117 |
433123 |
433141 |
433151 |
433187 |
433193 |
433201 |
433207 |
433229 |
433241 |
433249 |
433253 |
433259 |
433261 |
433267 |
433271 |
433291 |
433309 |
433319 |
433337 |
433351 |
433357 |
433361 |
433369 |
433373 |
433393 |
433399 |
433421 |
433429 |
433439 |
433453 |
433469 |
433471 |
433501 |
433507 |
433513 |
433549 |
433571 |
433577 |
433607 |
433627 |
433633 |
433639 |
433651 |
433661 |
433663 |
433673 |
433679 |
433681 |
433703 |
433723 |
433729 |
433747 |
433759 |
433777 |
433781 |
433787 |
433813 |
433817 |
433847 |
433859 |
433861 |
433877 |
433883 |
433889 |
433931 |
433943 |
433963 |
433967 |
433981 |
434009 |
434011 |
434029 |
434039 |
434081 |
434087 |
434107 |
434111 |
434113 |
434117 |
434141 |
434167 |
434179 |
434191 |
434201 |
434209 |
434221 |
434237 |
434243 |
434249 |
434261 |
434267 |
434293 |
434297 |
434303 |
434311 |
434323 |
434347 |
434353 |
434363 |
434377 |
434383 |
434387 |
434389 |
434407 |
434411 |
434431 |
434437 |
434459 |
434461 |
434471 |
434479 |
434501 |
434509 |
434521 |
434561 |
434563 |
434573 |
434593 |
434597 |
434611 |
434647 |
434659 |
434683 |
434689 |
434699 |
434717 |
434719 |
434743 |
434761 |
434783 |
434803 |
434807 |
434813 |
434821 |
434827 |
434831 |
434839 |
434849 |
434857 |
434867 |
434873 |
434881 |
434909 |
434921 |
434923 |
434927 |
434933 |
434939 |
434947 |
434957 |
434963 |
434977 |
434981 |
434989 |
435037 |
435041 |
435059 |
435103 |
435107 |
435109 |
435131 |
435139 |
435143 |
435151 |
435161 |
435179 |
435181 |
435187 |
435191 |
435221 |
435223 |
435247 |
435257 |
435263 |
435277 |
435283 |
435287 |
435307 |
435317 |
435343 |
435349 |
435359 |
435371 |
435397 |
435401 |
435403 |
435419 |
435427 |
435437 |
435439 |
435451 |
435481 |
435503 |
435529 |
435541 |
435553 |
435559 |
435563 |
435569 |
435571 |
435577 |
435583 |
435593 |
435619 |
435623 |
435637 |
435641 |
435647 |
435649 |
435653 |
435661 |
435679 |
435709 |
435731 |
435733 |
435739 |
435751 |
435763 |
435769 |
435779 |
435817 |
435839 |
435847 |
435857 |
435859 |
435881 |
435889 |
435893 |
435907 |
435913 |
435923 |
435947 |
435949 |
435973 |
435983 |
435997 |
436003 |
436013 |
436027 |
436061 |
436081 |
436087 |
436091 |
436097 |
436127 |
436147 |
436151 |
436157 |
436171 |
436181 |
436217 |
436231 |
436253 |
436273 |
436279 |
436283 |
436291 |
436307 |
436309 |
436313 |
436343 |
436357 |
436399 |
436417 |
436427 |
436439 |
436459 |
436463 |
436477 |
436481 |
436483 |
436507 |
436523 |
436529 |
436531 |
436547 |
436549 |
436571 |
436591 |
436607 |
436621 |
436627 |
436649 |
436651 |
436673 |
436687 |
436693 |
436717 |
436727 |
436729 |
436739 |
436741 |
436757 |
436801 |
436811 |
436819 |
436831 |
436841 |
436853 |
436871 |
436889 |
436913 |
436957 |
436963 |
436967 |
436973 |
436979 |
436993 |
436999 |
437011 |
437033 |
437071 |
437077 |
437083 |
437093 |
437111 |
437113 |
437137 |
437141 |
437149 |
437153 |
437159 |
437191 |
437201 |
437219 |
437237 |
437243 |
437263 |
437273 |
437279 |
437287 |
437293 |
437321 |
437351 |
437357 |
437363 |
437387 |
437389 |
437401 |
437413 |
437467 |
437471 |
437473 |
437497 |
437501 |
437509 |
437519 |
437527 |
437533 |
437539 |
437543 |
437557 |
437587 |
437629 |
437641 |
437651 |
437653 |
437677 |
437681 |
437687 |
437693 |
437719 |
437729 |
437743 |
437753 |
437771 |
437809 |
437819 |
437837 |
437849 |
437861 |
437867 |
437881 |
437909 |
437923 |
437947 |
437953 |
437959 |
437977 |
438001 |
438017 |
438029 |
438047 |
438049 |
438091 |
438131 |
438133 |
438143 |
438169 |
438203 |
438211 |
438223 |
438233 |
438241 |
438253 |
438259 |
438271 |
438281 |
438287 |
438301 |
438313 |
438329 |
438341 |
438377 |
438391 |
438401 |
438409 |
438419 |
438439 |
438443 |
438467 |
438479 |
438499 |
438517 |
438521 |
438523 |
438527 |
438533 |
438551 |
438569 |
438589 |
438601 |
438611 |
438623 |
438631 |
438637 |
438661 |
438667 |
438671 |
438701 |
438707 |
438721 |
438733 |
438761 |
438769 |
438793 |
438827 |
438829 |
438833 |
438847 |
438853 |
438869 |
438877 |
438887 |
438899 |
438913 |
438937 |
438941 |
438953 |
438961 |
438967 |
438979 |
438983 |
438989 |
439007 |
439009 |
439063 |
439081 |
439123 |
439133 |
439141 |
439157 |
439163 |
439171 |
439183 |
439199 |
439217 |
439253 |
439273 |
439279 |
439289 |
439303 |
439339 |
439349 |
439357 |
439367 |
439381 |
439409 |
439421 |
439427 |
439429 |
439441 |
439459 |
439463 |
439471 |
439493 |
439511 |
439519 |
439541 |
439559 |
439567 |
439573 |
439577 |
439583 |
439601 |
439613 |
439631 |
439639 |
439661 |
439667 |
439687 |
439693 |
439697 |
439709 |
439723 |
439729 |
439753 |
439759 |
439763 |
439771 |
439781 |
439787 |
439799 |
439811 |
439823 |
439849 |
439853 |
439861 |
439867 |
439883 |
439891 |
439903 |
439919 |
439949 |
439961 |
439969 |
439973 |
439981 |
439991 |
440009 |
440023 |
440039 |
440047 |
440087 |
440093 |
440101 |
440131 |
440159 |
440171 |
440177 |
440179 |
440183 |
440203 |
440207 |
440221 |
440227 |
440239 |
440261 |
440269 |
440281 |
440303 |
440311 |
440329 |
440333 |
440339 |
440347 |
440371 |
440383 |
440389 |
440393 |
440399 |
440431 |
440441 |
440443 |
440471 |
440497 |
440501 |
440507 |
440509 |
440527 |
440537 |
440543 |
440549 |
440551 |
440567 |
440569 |
440579 |
440581 |
440641 |
440651 |
440653 |
440669 |
440677 |
440681 |
440683 |
440711 |
440717 |
440723 |
440731 |
440753 |
440761 |
440773 |
440807 |
440809 |
440821 |
440831 |
440849 |
440863 |
440893 |
440903 |
440911 |
440939 |
440941 |
440953 |
440959 |
440983 |
440987 |
440989 |
441011 |
441029 |
441041 |
441043 |
441053 |
441073 |
441079 |
441101 |
441107 |
441109 |
441113 |
441121 |
441127 |
441157 |
441169 |
441179 |
441187 |
441191 |
441193 |
441229 |
441247 |
441251 |
441257 |
441263 |
441281 |
441307 |
441319 |
441349 |
441359 |
441361 |
441403 |
441421 |
441443 |
441449 |
441461 |
441479 |
441499 |
441517 |
441523 |
441527 |
441547 |
441557 |
441563 |
441569 |
441587 |
441607 |
441613 |
441619 |
441631 |
441647 |
441667 |
441697 |
441703 |
441713 |
441737 |
441751 |
441787 |
441797 |
441799 |
441811 |
441827 |
441829 |
441839 |
441841 |
441877 |
441887 |
441907 |
441913 |
441923 |
441937 |
441953 |
441971 |
442003 |
442007 |
442009 |
442019 |
442027 |
442031 |
442033 |
442061 |
442069 |
442097 |
442109 |
442121 |
442139 |
442147 |
442151 |
442157 |
442171 |
442177 |
442181 |
442193 |
442201 |
442207 |
442217 |
442229 |
442237 |
442243 |
442271 |
442283 |
442291 |
442319 |
442327 |
442333 |
442363 |
442367 |
442397 |
442399 |
442439 |
442447 |
442457 |
442469 |
442487 |
442489 |
442499 |
442501 |
442517 |
442531 |
442537 |
442571 |
442573 |
442577 |
442579 |
442601 |
442609 |
442619 |
442633 |
442691 |
442699 |
442703 |
442721 |
442733 |
442747 |
442753 |
442763 |
442769 |
442777 |
442781 |
442789 |
442807 |
442817 |
442823 |
442829 |
442831 |
442837 |
442843 |
442861 |
442879 |
442903 |
442919 |
442961 |
442963 |
442973 |
442979 |
442987 |
442991 |
442997 |
443011 |
443017 |
443039 |
443041 |
443057 |
443059 |
443063 |
443077 |
443089 |
443117 |
443123 |
443129 |
443147 |
443153 |
443159 |
443161 |
443167 |
443171 |
443189 |
443203 |
443221 |
443227 |
443231 |
443237 |
443243 |
443249 |
443263 |
443273 |
443281 |
443291 |
443293 |
443341 |
443347 |
443353 |
443363 |
443369 |
443389 |
443407 |
443413 |
443419 |
443423 |
443431 |
443437 |
443453 |
443467 |
443489 |
443501 |
443533 |
443543 |
443551 |
443561 |
443563 |
443567 |
443587 |
443591 |
443603 |
443609 |
443629 |
443659 |
443687 |
443689 |
443701 |
443711 |
443731 |
443749 |
443753 |
443759 |
443761 |
443771 |
443777 |
443791 |
443837 |
443851 |
443867 |
443869 |
443873 |
443879 |
443881 |
443893 |
443899 |
443909 |
443917 |
443939 |
443941 |
443953 |
443983 |
443987 |
443999 |
444001 |
444007 |
444029 |
444043 |
444047 |
444079 |
444089 |
444109 |
444113 |
444121 |
444127 |
444131 |
444151 |
444167 |
444173 |
444179 |
444181 |
444187 |
444209 |
444253 |
444271 |
444281 |
444287 |
444289 |
444293 |
444307 |
444341 |
444343 |
444347 |
444349 |
444401 |
444403 |
444421 |
444443 |
444449 |
444461 |
444463 |
444469 |
444473 |
444487 |
444517 |
444523 |
444527 |
444529 |
444539 |
444547 |
444553 |
444557 |
444569 |
444589 |
444607 |
444623 |
444637 |
444641 |
444649 |
444671 |
444677 |
444701 |
444713 |
444739 |
444767 |
444791 |
444793 |
444803 |
444811 |
444817 |
444833 |
444841 |
444859 |
444863 |
444869 |
444877 |
444883 |
444887 |
444893 |
444901 |
444929 |
444937 |
444953 |
444967 |
444971 |
444979 |
445001 |
445019 |
445021 |
445031 |
445033 |
445069 |
445087 |
445091 |
445097 |
445103 |
445141 |
445157 |
445169 |
445183 |
445187 |
445199 |
445229 |
445261 |
445271 |
445279 |
445283 |
445297 |
445307 |
445321 |
445339 |
445363 |
445427 |
445433 |
445447 |
445453 |
445463 |
445477 |
445499 |
445507 |
445537 |
445541 |
445567 |
445573 |
445583 |
445589 |
445597 |
445619 |
445631 |
445633 |
445649 |
445657 |
445691 |
445699 |
445703 |
445741 |
445747 |
445769 |
445771 |
445789 |
445799 |
445807 |
445829 |
445847 |
445853 |
445871 |
445877 |
445883 |
445891 |
445931 |
445937 |
445943 |
445967 |
445969 |
446003 |
446009 |
446041 |
446053 |
446081 |
446087 |
446111 |
446123 |
446129 |
446141 |
446179 |
446189 |
446191 |
446197 |
446221 |
446227 |
446231 |
446261 |
446263 |
446273 |
446279 |
446293 |
446309 |
446323 |
446333 |
446353 |
446363 |
446387 |
446389 |
446399 |
446401 |
446417 |
446441 |
446447 |
446461 |
446473 |
446477 |
446503 |
446533 |
446549 |
446561 |
446569 |
446597 |
446603 |
446609 |
446647 |
446657 |
446713 |
446717 |
446731 |
446753 |
446759 |
446767 |
446773 |
446819 |
446827 |
446839 |
446863 |
446881 |
446891 |
446893 |
446909 |
446911 |
446921 |
446933 |
446951 |
446969 |
446983 |
447001 |
447011 |
447019 |
447053 |
447067 |
447079 |
447101 |
447107 |
447119 |
447133 |
447137 |
447173 |
447179 |
447193 |
447197 |
447211 |
447217 |
447221 |
447233 |
447247 |
447257 |
447259 |
447263 |
447311 |
447319 |
447323 |
447331 |
447353 |
447401 |
447409 |
447427 |
447439 |
447443 |
447449 |
447451 |
447463 |
447467 |
447481 |
447509 |
447521 |
447527 |
447541 |
447569 |
447571 |
447611 |
447617 |
447637 |
447641 |
447677 |
447683 |
447701 |
447703 |
447743 |
447749 |
447757 |
447779 |
447791 |
447793 |
447817 |
447823 |
447827 |
447829 |
447841 |
447859 |
447877 |
447883 |
447893 |
447901 |
447907 |
447943 |
447961 |
447983 |
447991 |
448003 |
448013 |
448027 |
448031 |
448057 |
448067 |
448073 |
448093 |
448111 |
448121 |
448139 |
448141 |
448157 |
448159 |
448169 |
448177 |
448187 |
448193 |
448199 |
448207 |
448241 |
448249 |
448303 |
448309 |
448313 |
448321 |
448351 |
448363 |
448367 |
448373 |
448379 |
448387 |
448397 |
448421 |
448451 |
448519 |
448531 |
448561 |
448597 |
448607 |
448627 |
448631 |
448633 |
448667 |
448687 |
448697 |
448703 |
448727 |
448733 |
448741 |
448769 |
448793 |
448801 |
448807 |
448829 |
448843 |
448853 |
448859 |
448867 |
448871 |
448873 |
448879 |
448883 |
448907 |
448927 |
448939 |
448969 |
448993 |
448997 |
448999 |
449003 |
449011 |
449051 |
449077 |
449083 |
449093 |
449107 |
449117 |
449129 |
449131 |
449149 |
449153 |
449161 |
449171 |
449173 |
449201 |
449203 |
449209 |
449227 |
449243 |
449249 |
449261 |
449263 |
449269 |
449287 |
449299 |
449303 |
449311 |
449321 |
449333 |
449347 |
449353 |
449363 |
449381 |
449399 |
449411 |
449417 |
449419 |
449437 |
449441 |
449459 |
449473 |
449543 |
449549 |
449557 |
449563 |
449567 |
449569 |
449591 |
449609 |
449621 |
449629 |
449653 |
449663 |
449671 |
449677 |
449681 |
449689 |
449693 |
449699 |
449741 |
449759 |
449767 |
449773 |
449783 |
449797 |
449807 |
449821 |
449833 |
449851 |
449879 |
449921 |
449929 |
449941 |
449951 |
449959 |
449963 |
449971 |
449987 |
449989 |
450001 |
450011 |
450019 |
450029 |
450067 |
450071 |
450077 |
450083 |
450101 |
450103 |
450113 |
450127 |
450137 |
450161 |
450169 |
450193 |
450199 |
450209 |
450217 |
450223 |
450227 |
450239 |
450257 |
450259 |
450277 |
450287 |
450293 |
450299 |
450301 |
450311 |
450343 |
450349 |
450361 |
450367 |
450377 |
450383 |
450391 |
450403 |
450413 |
450421 |
450431 |
450451 |
450473 |
450479 |
450481 |
450487 |
450493 |
450503 |
450529 |
450533 |
450557 |
450563 |
450581 |
450587 |
450599 |
450601 |
450617 |
450641 |
450643 |
450649 |
450677 |
450691 |
450707 |
450719 |
450727 |
450761 |
450767 |
450787 |
450797 |
450799 |
450803 |
450809 |
450811 |
450817 |
450829 |
450839 |
450841 |
450847 |
450859 |
450881 |
450883 |
450887 |
450893 |
450899 |
450913 |
450917 |
450929 |
450943 |
450949 |
450971 |
450991 |
450997 |
451013 |
451039 |
451051 |
451057 |
451069 |
451093 |
451097 |
451103 |
451109 |
451159 |
451177 |
451181 |
451183 |
451201 |
451207 |
451249 |
451277 |
451279 |
451301 |
451303 |
451309 |
451313 |
451331 |
451337 |
451343 |
451361 |
451387 |
451397 |
451411 |
451439 |
451441 |
451481 |
451499 |
451519 |
451523 |
451541 |
451547 |
451553 |
451579 |
451601 |
451609 |
451621 |
451637 |
451657 |
451663 |
451667 |
451669 |
451679 |
451681 |
451691 |
451699 |
451709 |
451723 |
451747 |
451753 |
451771 |
451783 |
451793 |
451799 |
451823 |
451831 |
451837 |
451859 |
451873 |
451879 |
451897 |
451901 |
451903 |
451909 |
451921 |
451933 |
451937 |
451939 |
451961 |
451967 |
451987 |
452009 |
452017 |
452027 |
452033 |
452041 |
452077 |
452083 |
452087 |
452131 |
452159 |
452161 |
452171 |
452191 |
452201 |
452213 |
452227 |
452233 |
452239 |
452269 |
452279 |
452293 |
452297 |
452329 |
452363 |
452377 |
452393 |
452401 |
452443 |
452453 |
452497 |
452519 |
452521 |
452531 |
452533 |
452537 |
452539 |
452549 |
452579 |
452587 |
452597 |
452611 |
452629 |
452633 |
452671 |
452687 |
452689 |
452701 |
452731 |
452759 |
452773 |
452797 |
452807 |
452813 |
452821 |
452831 |
452857 |
452869 |
452873 |
452923 |
452953 |
452957 |
452983 |
452989 |
453023 |
453029 |
453053 |
453073 |
453107 |
453119 |
453133 |
453137 |
453143 |
453157 |
453161 |
453181 |
453197 |
453199 |
453209 |
453217 |
453227 |
453239 |
453247 |
453269 |
453289 |
453293 |
453301 |
453311 |
453317 |
453329 |
453347 |
453367 |
453371 |
453377 |
453379 |
453421 |
453451 |
453461 |
453527 |
453553 |
453559 |
453569 |
453571 |
453599 |
453601 |
453617 |
453631 |
453637 |
453641 |
453643 |
453659 |
453667 |
453671 |
453683 |
453703 |
453707 |
453709 |
453737 |
453757 |
453797 |
453799 |
453823 |
453833 |
453847 |
453851 |
453877 |
453889 |
453907 |
453913 |
453923 |
453931 |
453949 |
453961 |
453977 |
453983 |
453991 |
454009 |
454021 |
454031 |
454033 |
454039 |
454061 |
454063 |
454079 |
454109 |
454141 |
454151 |
454159 |
454183 |
454199 |
454211 |
454213 |
454219 |
454229 |
454231 |
454247 |
454253 |
454277 |
454297 |
454303 |
454313 |
454331 |
454351 |
454357 |
454361 |
454379 |
454387 |
454409 |
454417 |
454451 |
454453 |
454483 |
454501 |
454507 |
454513 |
454541 |
454543 |
454547 |
454577 |
454579 |
454603 |
454609 |
454627 |
454637 |
454673 |
454679 |
454709 |
454711 |
454721 |
454723 |
454759 |
454763 |
454777 |
454799 |
454823 |
454843 |
454847 |
454849 |
454859 |
454889 |
454891 |
454907 |
454919 |
454921 |
454931 |
454943 |
454967 |
454969 |
454973 |
454991 |
455003 |
455011 |
455033 |
455047 |
455053 |
455093 |
455099 |
455123 |
455149 |
455159 |
455167 |
455171 |
455177 |
455201 |
455219 |
455227 |
455233 |
455237 |
455261 |
455263 |
455269 |
455291 |
455309 |
455317 |
455321 |
455333 |
455339 |
455341 |
455353 |
455381 |
455393 |
455401 |
455407 |
455419 |
455431 |
455437 |
455443 |
455461 |
455471 |
455473 |
455479 |
455489 |
455491 |
455513 |
455527 |
455531 |
455537 |
455557 |
455573 |
455579 |
455597 |
455599 |
455603 |
455627 |
455647 |
455659 |
455681 |
455683 |
455687 |
455701 |
455711 |
455717 |
455737 |
455761 |
455783 |
455789 |
455809 |
455827 |
455831 |
455849 |
455863 |
455881 |
455899 |
455921 |
455933 |
455941 |
455953 |
455969 |
455977 |
455989 |
455993 |
455999 |
456007 |
456013 |
456023 |
456037 |
456047 |
456061 |
456091 |
456107 |
456109 |
456119 |
456149 |
456151 |
456167 |
456193 |
456223 |
456233 |
456241 |
456283 |
456293 |
456329 |
456349 |
456353 |
456367 |
456377 |
456403 |
456409 |
456427 |
456439 |
456451 |
456457 |
456461 |
456499 |
456503 |
456517 |
456523 |
456529 |
456539 |
456553 |
456557 |
456559 |
456571 |
456581 |
456587 |
456607 |
456611 |
456613 |
456623 |
456641 |
456647 |
456649 |
456653 |
456679 |
456683 |
456697 |
456727 |
456737 |
456763 |
456767 |
456769 |
456791 |
456809 |
456811 |
456821 |
456871 |
456877 |
456881 |
456899 |
456901 |
456923 |
456949 |
456959 |
456979 |
456991 |
457001 |
457003 |
457013 |
457021 |
457043 |
457049 |
457057 |
457087 |
457091 |
457097 |
457099 |
457117 |
457139 |
457151 |
457153 |
457183 |
457189 |
457201 |
457213 |
457229 |
457241 |
457253 |
457267 |
457271 |
457277 |
457279 |
457307 |
457319 |
457333 |
457339 |
457363 |
457367 |
457381 |
457393 |
457397 |
457399 |
457403 |
457411 |
457421 |
457433 |
457459 |
457469 |
457507 |
457511 |
457517 |
457547 |
457553 |
457559 |
457571 |
457607 |
457609 |
457621 |
457643 |
457651 |
457661 |
457669 |
457673 |
457679 |
457687 |
457697 |
457711 |
457739 |
457757 |
457789 |
457799 |
457813 |
457817 |
457829 |
457837 |
457871 |
457889 |
457903 |
457913 |
457943 |
457979 |
457981 |
457987 |
458009 |
458027 |
458039 |
458047 |
458053 |
458057 |
458063 |
458069 |
458119 |
458123 |
458173 |
458179 |
458189 |
458191 |
458197 |
458207 |
458219 |
458239 |
458309 |
458317 |
458323 |
458327 |
458333 |
458357 |
458363 |
458377 |
458399 |
458401 |
458407 |
458449 |
458477 |
458483 |
458501 |
458531 |
458533 |
458543 |
458567 |
458569 |
458573 |
458593 |
458599 |
458611 |
458621 |
458629 |
458639 |
458651 |
458663 |
458669 |
458683 |
458701 |
458719 |
458729 |
458747 |
458789 |
458791 |
458797 |
458807 |
458819 |
458849 |
458863 |
458879 |
458891 |
458897 |
458917 |
458921 |
458929 |
458947 |
458957 |
458959 |
458963 |
458971 |
458977 |
458981 |
458987 |
458993 |
459007 |
459013 |
459023 |
459029 |
459031 |
459037 |
459047 |
459089 |
459091 |
459113 |
459127 |
459167 |
459169 |
459181 |
459209 |
459223 |
459229 |
459233 |
459257 |
459271 |
459293 |
459301 |
459313 |
459317 |
459337 |
459341 |
459343 |
459353 |
459373 |
459377 |
459383 |
459397 |
459421 |
459427 |
459443 |
459463 |
459467 |
459469 |
459479 |
459509 |
459521 |
459523 |
459593 |
459607 |
459611 |
459619 |
459623 |
459631 |
459647 |
459649 |
459671 |
459677 |
459691 |
459703 |
459749 |
459763 |
459791 |
459803 |
459817 |
459829 |
459841 |
459847 |
459883 |
459913 |
459923 |
459929 |
459937 |
459961 |
460013 |
460039 |
460051 |
460063 |
460073 |
460079 |
460081 |
460087 |
460091 |
460099 |
460111 |
460127 |
460147 |
460157 |
460171 |
460181 |
460189 |
460211 |
460217 |
460231 |
460247 |
460267 |
460289 |
460297 |
460301 |
460337 |
460349 |
460373 |
460379 |
460387 |
460393 |
460403 |
460409 |
460417 |
460451 |
460463 |
460477 |
460531 |
460543 |
460561 |
460571 |
460589 |
460609 |
460619 |
460627 |
460633 |
460637 |
460643 |
460657 |
460673 |
460697 |
460709 |
460711 |
460721 |
460771 |
460777 |
460787 |
460793 |
460813 |
460829 |
460841 |
460843 |
460871 |
460891 |
460903 |
460907 |
460913 |
460919 |
460937 |
460949 |
460951 |
460969 |
460973 |
460979 |
460981 |
460987 |
460991 |
461009 |
461011 |
461017 |
461051 |
461053 |
461059 |
461093 |
461101 |
461119 |
461143 |
461147 |
461171 |
461183 |
461191 |
461207 |
461233 |
461239 |
461257 |
461269 |
461273 |
461297 |
461299 |
461309 |
461317 |
461323 |
461327 |
461333 |
461359 |
461381 |
461393 |
461407 |
461411 |
461413 |
461437 |
461441 |
461443 |
461467 |
461479 |
461507 |
461521 |
461561 |
461569 |
461581 |
461599 |
461603 |
461609 |
461627 |
461639 |
461653 |
461677 |
461687 |
461689 |
461693 |
461707 |
461717 |
461801 |
461803 |
461819 |
461843 |
461861 |
461887 |
461891 |
461917 |
461921 |
461933 |
461957 |
461971 |
461977 |
461983 |
462013 |
462041 |
462067 |
462073 |
462079 |
462097 |
462103 |
462109 |
462113 |
462131 |
462149 |
462181 |
462191 |
462199 |
462221 |
462239 |
462263 |
462271 |
462307 |
462311 |
462331 |
462337 |
462361 |
462373 |
462377 |
462401 |
462409 |
462419 |
462421 |
462437 |
462443 |
462467 |
462481 |
462491 |
462493 |
462499 |
462529 |
462541 |
462547 |
462557 |
462569 |
462571 |
462577 |
462589 |
462607 |
462629 |
462641 |
462643 |
462653 |
462659 |
462667 |
462673 |
462677 |
462697 |
462713 |
462719 |
462727 |
462733 |
462739 |
462773 |
462827 |
462841 |
462851 |
462863 |
462871 |
462881 |
462887 |
462899 |
462901 |
462911 |
462937 |
462947 |
462953 |
462983 |
463003 |
463031 |
463033 |
463093 |
463103 |
463157 |
463181 |
463189 |
463207 |
463213 |
463219 |
463231 |
463237 |
463247 |
463249 |
463261 |
463283 |
463291 |
463297 |
463303 |
463313 |
463319 |
463321 |
463339 |
463343 |
463363 |
463387 |
463399 |
463433 |
463447 |
463451 |
463453 |
463457 |
463459 |
463483 |
463501 |
463511 |
463513 |
463523 |
463531 |
463537 |
463549 |
463579 |
463613 |
463627 |
463633 |
463643 |
463649 |
463663 |
463679 |
463693 |
463711 |
463717 |
463741 |
463747 |
463753 |
463763 |
463781 |
463787 |
463807 |
463823 |
463829 |
463831 |
463849 |
463861 |
463867 |
463873 |
463889 |
463891 |
463907 |
463919 |
463921 |
463949 |
463963 |
463973 |
463987 |
463993 |
464003 |
464011 |
464021 |
464033 |
464047 |
464069 |
464081 |
464089 |
464119 |
464129 |
464131 |
464137 |
464141 |
464143 |
464171 |
464173 |
464197 |
464201 |
464213 |
464237 |
464251 |
464257 |
464263 |
464279 |
464281 |
464291 |
464309 |
464311 |
464327 |
464351 |
464371 |
464381 |
464383 |
464413 |
464419 |
464437 |
464447 |
464459 |
464467 |
464479 |
464483 |
464521 |
464537 |
464539 |
464549 |
464557 |
464561 |
464587 |
464591 |
464603 |
464617 |
464621 |
464647 |
464663 |
464687 |
464699 |
464741 |
464747 |
464749 |
464753 |
464767 |
464771 |
464773 |
464777 |
464801 |
464803 |
464809 |
464813 |
464819 |
464843 |
464857 |
464879 |
464897 |
464909 |
464917 |
464923 |
464927 |
464939 |
464941 |
464951 |
464953 |
464963 |
464983 |
464993 |
464999 |
465007 |
465011 |
465013 |
465019 |
465041 |
465061 |
465067 |
465071 |
465077 |
465079 |
465089 |
465107 |
465119 |
465133 |
465151 |
465161 |
465163 |
465167 |
465169 |
465173 |
465187 |
465209 |
465211 |
465259 |
465271 |
465277 |
465281 |
465293 |
465299 |
465317 |
465319 |
465331 |
465337 |
465373 |
465379 |
465383 |
465407 |
465419 |
465433 |
465463 |
465469 |
465523 |
465529 |
465541 |
465551 |
465581 |
465587 |
465611 |
465631 |
465643 |
465649 |
465659 |
465679 |
465701 |
465721 |
465739 |
465743 |
465761 |
465781 |
465797 |
465799 |
465809 |
465821 |
465833 |
465841 |
465887 |
465893 |
465901 |
465917 |
465929 |
465931 |
465947 |
465977 |
465989 |
466009 |
466019 |
466027 |
466033 |
466043 |
466061 |
466069 |
466073 |
466079 |
466087 |
466091 |
466121 |
466139 |
466153 |
466171 |
466181 |
466183 |
466201 |
466243 |
466247 |
466261 |
466267 |
466273 |
466283 |
466303 |
466321 |
466331 |
466339 |
466357 |
466369 |
466373 |
466409 |
466423 |
466441 |
466451 |
466483 |
466517 |
466537 |
466547 |
466553 |
466561 |
466567 |
466573 |
466579 |
466603 |
466619 |
466637 |
466649 |
466651 |
466673 |
466717 |
466723 |
466729 |
466733 |
466747 |
466751 |
466777 |
466787 |
466801 |
466819 |
466853 |
466859 |
466897 |
466909 |
466913 |
466919 |
466951 |
466957 |
466997 |
467003 |
467009 |
467017 |
467021 |
467063 |
467081 |
467083 |
467101 |
467119 |
467123 |
467141 |
467147 |
467171 |
467183 |
467197 |
467209 |
467213 |
467237 |
467239 |
467261 |
467293 |
467297 |
467317 |
467329 |
467333 |
467353 |
467371 |
467399 |
467417 |
467431 |
467437 |
467447 |
467471 |
467473 |
467477 |
467479 |
467491 |
467497 |
467503 |
467507 |
467527 |
467531 |
467543 |
467549 |
467557 |
467587 |
467591 |
467611 |
467617 |
467627 |
467629 |
467633 |
467641 |
467651 |
467657 |
467669 |
467671 |
467681 |
467689 |
467699 |
467713 |
467729 |
467737 |
467743 |
467749 |
467773 |
467783 |
467813 |
467827 |
467833 |
467867 |
467869 |
467879 |
467881 |
467893 |
467897 |
467899 |
467903 |
467927 |
467941 |
467953 |
467963 |
467977 |
468001 |
468011 |
468019 |
468029 |
468049 |
468059 |
468067 |
468071 |
468079 |
468107 |
468109 |
468113 |
468121 |
468133 |
468137 |
468151 |
468157 |
468173 |
468187 |
468191 |
468199 |
468239 |
468241 |
468253 |
468271 |
468277 |
468289 |
468319 |
468323 |
468353 |
468359 |
468371 |
468389 |
468421 |
468439 |
468451 |
468463 |
468473 |
468491 |
468493 |
468499 |
468509 |
468527 |
468551 |
468557 |
468577 |
468581 |
468593 |
468599 |
468613 |
468619 |
468623 |
468641 |
468647 |
468653 |
468661 |
468667 |
468683 |
468691 |
468697 |
468703 |
468709 |
468719 |
468737 |
468739 |
468761 |
468773 |
468781 |
468803 |
468817 |
468821 |
468841 |
468851 |
468859 |
468869 |
468883 |
468887 |
468889 |
468893 |
468899 |
468913 |
468953 |
468967 |
468973 |
468983 |
469009 |
469031 |
469037 |
469069 |
469099 |
469121 |
469127 |
469141 |
469153 |
469169 |
469193 |
469207 |
469219 |
469229 |
469237 |
469241 |
469253 |
469267 |
469279 |
469283 |
469303 |
469321 |
469331 |
469351 |
469363 |
469367 |
469369 |
469379 |
469397 |
469411 |
469429 |
469439 |
469457 |
469487 |
469501 |
469529 |
469541 |
469543 |
469561 |
469583 |
469589 |
469613 |
469627 |
469631 |
469649 |
469657 |
469673 |
469687 |
469691 |
469717 |
469723 |
469747 |
469753 |
469757 |
469769 |
469787 |
469793 |
469801 |
469811 |
469823 |
469841 |
469849 |
469877 |
469879 |
469891 |
469907 |
469919 |
469939 |
469957 |
469969 |
469979 |
469993 |
470021 |
470039 |
470059 |
470077 |
470081 |
470083 |
470087 |
470089 |
470131 |
470149 |
470153 |
470161 |
470167 |
470179 |
470201 |
470207 |
470209 |
470213 |
470219 |
470227 |
470243 |
470251 |
470263 |
470279 |
470297 |
470299 |
470303 |
470317 |
470333 |
470347 |
470359 |
470389 |
470399 |
470411 |
470413 |
470417 |
470429 |
470443 |
470447 |
470453 |
470461 |
470471 |
470473 |
470489 |
470501 |
470513 |
470521 |
470531 |
470539 |
470551 |
470579 |
470593 |
470597 |
470599 |
470609 |
470621 |
470627 |
470647 |
470651 |
470653 |
470663 |
470669 |
470689 |
470711 |
470719 |
470731 |
470749 |
470779 |
470783 |
470791 |
470819 |
470831 |
470837 |
470863 |
470867 |
470881 |
470887 |
470891 |
470903 |
470927 |
470933 |
470941 |
470947 |
470957 |
470959 |
470993 |
470999 |
471007 |
471041 |
471061 |
471073 |
471089 |
471091 |
471101 |
471137 |
471139 |
471161 |
471173 |
471179 |
471187 |
471193 |
471209 |
471217 |
471241 |
471253 |
471259 |
471277 |
471281 |
471283 |
471299 |
471301 |
471313 |
471353 |
471389 |
471391 |
471403 |
471407 |
471439 |
471451 |
471467 |
471481 |
471487 |
471503 |
471509 |
471521 |
471533 |
471539 |
471553 |
471571 |
471589 |
471593 |
471607 |
471617 |
471619 |
471641 |
471649 |
471659 |
471671 |
471673 |
471677 |
471683 |
471697 |
471703 |
471719 |
471721 |
471749 |
471769 |
471781 |
471791 |
471803 |
471817 |
471841 |
471847 |
471853 |
471871 |
471893 |
471901 |
471907 |
471923 |
471929 |
471931 |
471943 |
471949 |
471959 |
471997 |
472019 |
472027 |
472051 |
472057 |
472063 |
472067 |
472103 |
472111 |
472123 |
472127 |
472133 |
472139 |
472151 |
472159 |
472163 |
472189 |
472193 |
472247 |
472249 |
472253 |
472261 |
472273 |
472289 |
472301 |
472309 |
472319 |
472331 |
472333 |
472349 |
472369 |
472391 |
472393 |
472399 |
472411 |
472421 |
472457 |
472469 |
472477 |
472523 |
472541 |
472543 |
472559 |
472561 |
472573 |
472597 |
472631 |
472639 |
472643 |
472669 |
472687 |
472691 |
472697 |
472709 |
472711 |
472721 |
472741 |
472751 |
472763 |
472793 |
472799 |
472817 |
472831 |
472837 |
472847 |
472859 |
472883 |
472907 |
472909 |
472921 |
472937 |
472939 |
472963 |
472993 |
473009 |
473021 |
473027 |
473089 |
473101 |
473117 |
473141 |
473147 |
473159 |
473167 |
473173 |
473191 |
473197 |
473201 |
473203 |
473219 |
473227 |
473257 |
473279 |
473287 |
473293 |
473311 |
473321 |
473327 |
473351 |
473353 |
473377 |
473381 |
473383 |
473411 |
473419 |
473441 |
473443 |
473453 |
473471 |
473477 |
473479 |
473497 |
473503 |
473507 |
473513 |
473519 |
473527 |
473531 |
473533 |
473549 |
473579 |
473597 |
473611 |
473617 |
473633 |
473647 |
473659 |
473719 |
473723 |
473729 |
473741 |
473743 |
473761 |
473789 |
473833 |
473839 |
473857 |
473861 |
473867 |
473887 |
473899 |
473911 |
473923 |
473927 |
473929 |
473939 |
473951 |
473953 |
473971 |
473981 |
473987 |
473999 |
474017 |
474029 |
474037 |
474043 |
474049 |
474059 |
474073 |
474077 |
474101 |
474119 |
474127 |
474137 |
474143 |
474151 |
474163 |
474169 |
474197 |
474211 |
474223 |
474241 |
474263 |
474289 |
474307 |
474311 |
474319 |
474337 |
474343 |
474347 |
474359 |
474379 |
474389 |
474391 |
474413 |
474433 |
474437 |
474443 |
474479 |
474491 |
474497 |
474499 |
474503 |
474533 |
474541 |
474547 |
474557 |
474569 |
474571 |
474581 |
474583 |
474619 |
474629 |
474647 |
474659 |
474667 |
474671 |
474707 |
474709 |
474737 |
474751 |
474757 |
474769 |
474779 |
474787 |
474809 |
474811 |
474839 |
474847 |
474857 |
474899 |
474907 |
474911 |
474917 |
474923 |
474931 |
474937 |
474941 |
474949 |
474959 |
474977 |
474983 |
475037 |
475051 |
475073 |
475081 |
475091 |
475093 |
475103 |
475109 |
475141 |
475147 |
475151 |
475159 |
475169 |
475207 |
475219 |
475229 |
475243 |
475271 |
475273 |
475283 |
475289 |
475297 |
475301 |
475327 |
475331 |
475333 |
475351 |
475367 |
475369 |
475379 |
475381 |
475403 |
475417 |
475421 |
475427 |
475429 |
475441 |
475457 |
475469 |
475483 |
475511 |
475523 |
475529 |
475549 |
475583 |
475597 |
475613 |
475619 |
475621 |
475637 |
475639 |
475649 |
475669 |
475679 |
475681 |
475691 |
475693 |
475697 |
475721 |
475729 |
475751 |
475753 |
475759 |
475763 |
475777 |
475789 |
475793 |
475807 |
475823 |
475831 |
475837 |
475841 |
475859 |
475877 |
475879 |
475889 |
475897 |
475903 |
475907 |
475921 |
475927 |
475933 |
475957 |
475973 |
475991 |
475997 |
476009 |
476023 |
476027 |
476029 |
476039 |
476041 |
476059 |
476081 |
476087 |
476089 |
476101 |
476107 |
476111 |
476137 |
476143 |
476167 |
476183 |
476219 |
476233 |
476237 |
476243 |
476249 |
476279 |
476299 |
476317 |
476347 |
476351 |
476363 |
476369 |
476381 |
476401 |
476407 |
476419 |
476423 |
476429 |
476467 |
476477 |
476479 |
476507 |
476513 |
476519 |
476579 |
476587 |
476591 |
476599 |
476603 |
476611 |
476633 |
476639 |
476647 |
476659 |
476681 |
476683 |
476701 |
476713 |
476719 |
476737 |
476743 |
476753 |
476759 |
476783 |
476803 |
476831 |
476849 |
476851 |
476863 |
476869 |
476887 |
476891 |
476911 |
476921 |
476929 |
476977 |
476981 |
476989 |
477011 |
477013 |
477017 |
477019 |
477031 |
477047 |
477073 |
477077 |
477091 |
477131 |
477149 |
477163 |
477209 |
477221 |
477229 |
477259 |
477277 |
477293 |
477313 |
477317 |
477329 |
477341 |
477359 |
477361 |
477383 |
477409 |
477439 |
477461 |
477469 |
477497 |
477511 |
477517 |
477523 |
477539 |
477551 |
477553 |
477557 |
477571 |
477577 |
477593 |
477619 |
477623 |
477637 |
477671 |
477677 |
477721 |
477727 |
477731 |
477739 |
477767 |
477769 |
477791 |
477797 |
477809 |
477811 |
477821 |
477823 |
477839 |
477847 |
477857 |
477863 |
477881 |
477899 |
477913 |
477941 |
477947 |
477973 |
477977 |
477991 |
478001 |
478039 |
478063 |
478067 |
478069 |
478087 |
478099 |
478111 |
478129 |
478139 |
478157 |
478169 |
478171 |
478189 |
478199 |
478207 |
478213 |
478241 |
478243 |
478253 |
478259 |
478271 |
478273 |
478321 |
478339 |
478343 |
478351 |
478391 |
478399 |
478403 |
478411 |
478417 |
478421 |
478427 |
478433 |
478441 |
478451 |
478453 |
478459 |
478481 |
478483 |
478493 |
478523 |
478531 |
478571 |
478573 |
478579 |
478589 |
478603 |
478627 |
478631 |
478637 |
478651 |
478679 |
478697 |
478711 |
478727 |
478729 |
478739 |
478741 |
478747 |
478763 |
478769 |
478787 |
478801 |
478811 |
478813 |
478823 |
478831 |
478843 |
478853 |
478861 |
478871 |
478879 |
478897 |
478901 |
478913 |
478927 |
478931 |
478937 |
478943 |
478963 |
478967 |
478991 |
478999 |
479023 |
479027 |
479029 |
479041 |
479081 |
479131 |
479137 |
479147 |
479153 |
479189 |
479191 |
479201 |
479209 |
479221 |
479231 |
479239 |
479243 |
479263 |
479267 |
479287 |
479299 |
479309 |
479317 |
479327 |
479357 |
479371 |
479377 |
479387 |
479419 |
479429 |
479431 |
479441 |
479461 |
479473 |
479489 |
479497 |
479509 |
479513 |
479533 |
479543 |
479561 |
479569 |
479581 |
479593 |
479599 |
479623 |
479629 |
479639 |
479701 |
479749 |
479753 |
479761 |
479771 |
479777 |
479783 |
479797 |
479813 |
479821 |
479833 |
479839 |
479861 |
479879 |
479881 |
479891 |
479903 |
479909 |
479939 |
479951 |
479953 |
479957 |
479971 |
480013 |
480017 |
480019 |
480023 |
480043 |
480047 |
480049 |
480059 |
480061 |
480071 |
480091 |
480101 |
480107 |
480113 |
480133 |
480143 |
480157 |
480167 |
480169 |
480203 |
480209 |
480287 |
480299 |
480317 |
480329 |
480341 |
480343 |
480349 |
480367 |
480373 |
480379 |
480383 |
480391 |
480409 |
480419 |
480427 |
480449 |
480451 |
480461 |
480463 |
480499 |
480503 |
480509 |
480517 |
480521 |
480527 |
480533 |
480541 |
480553 |
480563 |
480569 |
480583 |
480587 |
480647 |
480661 |
480707 |
480713 |
480731 |
480737 |
480749 |
480761 |
480773 |
480787 |
480803 |
480827 |
480839 |
480853 |
480881 |
480911 |
480919 |
480929 |
480937 |
480941 |
480959 |
480967 |
480979 |
480989 |
481001 |
481003 |
481009 |
481021 |
481043 |
481051 |
481067 |
481073 |
481087 |
481093 |
481097 |
481109 |
481123 |
481133 |
481141 |
481147 |
481153 |
481157 |
481171 |
481177 |
481181 |
481199 |
481207 |
481211 |
481231 |
481249 |
481297 |
481301 |
481303 |
481307 |
481343 |
481363 |
481373 |
481379 |
481387 |
481409 |
481417 |
481433 |
481447 |
481469 |
481489 |
481501 |
481513 |
481531 |
481549 |
481571 |
481577 |
481589 |
481619 |
481633 |
481639 |
481651 |
481667 |
481673 |
481681 |
481693 |
481697 |
481699 |
481721 |
481751 |
481753 |
481769 |
481787 |
481801 |
481807 |
481813 |
481837 |
481843 |
481847 |
481849 |
481861 |
481867 |
481879 |
481883 |
481909 |
481939 |
481963 |
481997 |
482017 |
482021 |
482029 |
482033 |
482039 |
482051 |
482071 |
482093 |
482099 |
482101 |
482117 |
482123 |
482179 |
482189 |
482203 |
482213 |
482227 |
482231 |
482233 |
482243 |
482263 |
482281 |
482309 |
482323 |
482347 |
482351 |
482359 |
482371 |
482387 |
482393 |
482399 |
482401 |
482407 |
482413 |
482423 |
482437 |
482441 |
482483 |
482501 |
482507 |
482509 |
482513 |
482519 |
482527 |
482539 |
482569 |
482593 |
482597 |
482621 |
482627 |
482633 |
482641 |
482659 |
482663 |
482683 |
482687 |
482689 |
482707 |
482711 |
482717 |
482719 |
482731 |
482743 |
482753 |
482759 |
482767 |
482773 |
482789 |
482803 |
482819 |
482827 |
482837 |
482861 |
482863 |
482873 |
482897 |
482899 |
482917 |
482941 |
482947 |
482957 |
482971 |
483017 |
483031 |
483061 |
483071 |
483097 |
483127 |
483139 |
483163 |
483167 |
483179 |
483209 |
483211 |
483221 |
483229 |
483233 |
483239 |
483247 |
483251 |
483281 |
483289 |
483317 |
483323 |
483337 |
483347 |
483367 |
483377 |
483389 |
483397 |
483407 |
483409 |
483433 |
483443 |
483467 |
483481 |
483491 |
483499 |
483503 |
483523 |
483541 |
483551 |
483557 |
483563 |
483577 |
483611 |
483619 |
483629 |
483643 |
483649 |
483671 |
483697 |
483709 |
483719 |
483727 |
483733 |
483751 |
483757 |
483761 |
483767 |
483773 |
483787 |
483809 |
483811 |
483827 |
483829 |
483839 |
483853 |
483863 |
483869 |
483883 |
483907 |
483929 |
483937 |
483953 |
483971 |
483991 |
484019 |
484027 |
484037 |
484061 |
484067 |
484079 |
484091 |
484111 |
484117 |
484123 |
484129 |
484151 |
484153 |
484171 |
484181 |
484193 |
484201 |
484207 |
484229 |
484243 |
484259 |
484283 |
484301 |
484303 |
484327 |
484339 |
484361 |
484369 |
484373 |
484397 |
484411 |
484417 |
484439 |
484447 |
484457 |
484459 |
484487 |
484489 |
484493 |
484531 |
484543 |
484577 |
484597 |
484607 |
484609 |
484613 |
484621 |
484639 |
484643 |
484691 |
484703 |
484727 |
484733 |
484751 |
484763 |
484769 |
484777 |
484787 |
484829 |
484853 |
484867 |
484927 |
484951 |
484987 |
484999 |
485021 |
485029 |
485041 |
485053 |
485059 |
485063 |
485081 |
485101 |
485113 |
485123 |
485131 |
485137 |
485161 |
485167 |
485171 |
485201 |
485207 |
485209 |
485263 |
485311 |
485347 |
485351 |
485363 |
485371 |
485383 |
485389 |
485411 |
485417 |
485423 |
485437 |
485447 |
485479 |
485497 |
485509 |
485519 |
485543 |
485567 |
485587 |
485593 |
485603 |
485609 |
485647 |
485657 |
485671 |
485689 |
485701 |
485717 |
485729 |
485731 |
485753 |
485777 |
485819 |
485827 |
485831 |
485833 |
485893 |
485899 |
485909 |
485923 |
485941 |
485959 |
485977 |
485993 |
486023 |
486037 |
486041 |
486043 |
486053 |
486061 |
486071 |
486091 |
486103 |
486119 |
486133 |
486139 |
486163 |
486179 |
486181 |
486193 |
486203 |
486221 |
486223 |
486247 |
486281 |
486293 |
486307 |
486313 |
486323 |
486329 |
486331 |
486341 |
486349 |
486377 |
486379 |
486389 |
486391 |
486397 |
486407 |
486433 |
486443 |
486449 |
486481 |
486491 |
486503 |
486509 |
486511 |
486527 |
486539 |
486559 |
486569 |
486583 |
486589 |
486601 |
486617 |
486637 |
486641 |
486643 |
486653 |
486667 |
486671 |
486677 |
486679 |
486683 |
486697 |
486713 |
486721 |
486757 |
486767 |
486769 |
486781 |
486797 |
486817 |
486821 |
486833 |
486839 |
486869 |
486907 |
486923 |
486929 |
486943 |
486947 |
486949 |
486971 |
486977 |
486991 |
487007 |
487013 |
487021 |
487049 |
487051 |
487057 |
487073 |
487079 |
487093 |
487099 |
487111 |
487133 |
487177 |
487183 |
487187 |
487211 |
487213 |
487219 |
487247 |
487261 |
487283 |
487303 |
487307 |
487313 |
487349 |
487363 |
487381 |
487387 |
487391 |
487397 |
487423 |
487427 |
487429 |
487447 |
487457 |
487463 |
487469 |
487471 |
487477 |
487481 |
487489 |
487507 |
487561 |
487589 |
487601 |
487603 |
487607 |
487637 |
487649 |
487651 |
487657 |
487681 |
487691 |
487703 |
487709 |
487717 |
487727 |
487733 |
487741 |
487757 |
487769 |
487783 |
487789 |
487793 |
487811 |
487819 |
487829 |
487831 |
487843 |
487873 |
487889 |
487891 |
487897 |
487933 |
487943 |
487973 |
487979 |
487997 |
488003 |
488009 |
488011 |
488021 |
488051 |
488057 |
488069 |
488119 |
488143 |
488149 |
488153 |
488161 |
488171 |
488197 |
488203 |
488207 |
488209 |
488227 |
488231 |
488233 |
488239 |
488249 |
488261 |
488263 |
488287 |
488303 |
488309 |
488311 |
488317 |
488321 |
488329 |
488333 |
488339 |
488347 |
488353 |
488381 |
488399 |
488401 |
488407 |
488417 |
488419 |
488441 |
488459 |
488473 |
488503 |
488513 |
488539 |
488567 |
488573 |
488603 |
488611 |
488617 |
488627 |
488633 |
488639 |
488641 |
488651 |
488687 |
488689 |
488701 |
488711 |
488717 |
488723 |
488729 |
488743 |
488749 |
488759 |
488779 |
488791 |
488797 |
488821 |
488827 |
488833 |
488861 |
488879 |
488893 |
488897 |
488909 |
488921 |
488947 |
488959 |
488981 |
488993 |
489001 |
489011 |
489019 |
489043 |
489053 |
489061 |
489101 |
489109 |
489113 |
489127 |
489133 |
489157 |
489161 |
489179 |
489191 |
489197 |
489217 |
489239 |
489241 |
489257 |
489263 |
489283 |
489299 |
489329 |
489337 |
489343 |
489361 |
489367 |
489389 |
489407 |
489409 |
489427 |
489431 |
489439 |
489449 |
489457 |
489479 |
489487 |
489493 |
489529 |
489539 |
489551 |
489553 |
489557 |
489571 |
489613 |
489631 |
489653 |
489659 |
489673 |
489677 |
489679 |
489689 |
489691 |
489733 |
489743 |
489761 |
489791 |
489793 |
489799 |
489803 |
489817 |
489823 |
489833 |
489847 |
489851 |
489869 |
489871 |
489887 |
489901 |
489911 |
489913 |
489941 |
489943 |
489959 |
489961 |
489977 |
489989 |
490001 |
490003 |
490019 |
490031 |
490033 |
490057 |
490097 |
490103 |
490111 |
490117 |
490121 |
490151 |
490159 |
490169 |
490183 |
490201 |
490207 |
490223 |
490241 |
490247 |
490249 |
490267 |
490271 |
490277 |
490283 |
490309 |
490313 |
490339 |
490367 |
490393 |
490417 |
490421 |
490453 |
490459 |
490463 |
490481 |
490493 |
490499 |
490519 |
490537 |
490541 |
490543 |
490549 |
490559 |
490571 |
490573 |
490577 |
490579 |
490591 |
490619 |
490627 |
490631 |
490643 |
490661 |
490663 |
490697 |
490733 |
490741 |
490769 |
490771 |
490783 |
490829 |
490837 |
490849 |
490859 |
490877 |
490891 |
490913 |
490921 |
490927 |
490937 |
490949 |
490951 |
490957 |
490967 |
490969 |
490991 |
490993 |
491003 |
491039 |
491041 |
491059 |
491081 |
491083 |
491129 |
491137 |
491149 |
491159 |
491167 |
491171 |
491201 |
491213 |
491219 |
491251 |
491261 |
491273 |
491279 |
491297 |
491299 |
491327 |
491329 |
491333 |
491339 |
491341 |
491353 |
491357 |
491371 |
491377 |
491417 |
491423 |
491429 |
491461 |
491483 |
491489 |
491497 |
491501 |
491503 |
491527 |
491531 |
491537 |
491539 |
491581 |
491591 |
491593 |
491611 |
491627 |
491633 |
491639 |
491651 |
491653 |
491669 |
491677 |
491707 |
491719 |
491731 |
491737 |
491747 |
491773 |
491783 |
491789 |
491797 |
491819 |
491833 |
491837 |
491851 |
491857 |
491867 |
491873 |
491899 |
491923 |
491951 |
491969 |
491977 |
491983 |
492007 |
492013 |
492017 |
492029 |
492047 |
492053 |
492059 |
492061 |
492067 |
492077 |
492083 |
492103 |
492113 |
492227 |
492251 |
492253 |
492257 |
492281 |
492293 |
492299 |
492319 |
492377 |
492389 |
492397 |
492403 |
492409 |
492413 |
492421 |
492431 |
492463 |
492467 |
492487 |
492491 |
492511 |
492523 |
492551 |
492563 |
492587 |
492601 |
492617 |
492619 |
492629 |
492631 |
492641 |
492647 |
492659 |
492671 |
492673 |
492707 |
492719 |
492721 |
492731 |
492757 |
492761 |
492763 |
492769 |
492781 |
492799 |
492839 |
492853 |
492871 |
492883 |
492893 |
492901 |
492911 |
492967 |
492979 |
493001 |
493013 |
493021 |
493027 |
493043 |
493049 |
493067 |
493093 |
493109 |
493111 |
493121 |
493123 |
493127 |
493133 |
493139 |
493147 |
493159 |
493169 |
493177 |
493193 |
493201 |
493211 |
493217 |
493219 |
493231 |
493243 |
493249 |
493277 |
493279 |
493291 |
493301 |
493313 |
493333 |
493351 |
493369 |
493393 |
493397 |
493399 |
493403 |
493433 |
493447 |
493457 |
493463 |
493481 |
493523 |
493531 |
493541 |
493567 |
493573 |
493579 |
493583 |
493607 |
493621 |
493627 |
493643 |
493657 |
493693 |
493709 |
493711 |
493721 |
493729 |
493733 |
493747 |
493777 |
493793 |
493807 |
493811 |
493813 |
493817 |
493853 |
493859 |
493873 |
493877 |
493897 |
493919 |
493931 |
493937 |
493939 |
493967 |
493973 |
493979 |
493993 |
494023 |
494029 |
494041 |
494051 |
494069 |
494077 |
494083 |
494093 |
494101 |
494107 |
494129 |
494141 |
494147 |
494167 |
494191 |
494213 |
494237 |
494251 |
494257 |
494267 |
494269 |
494281 |
494287 |
494317 |
494327 |
494341 |
494353 |
494359 |
494369 |
494381 |
494383 |
494387 |
494407 |
494413 |
494441 |
494443 |
494471 |
494497 |
494519 |
494521 |
494539 |
494561 |
494563 |
494567 |
494587 |
494591 |
494609 |
494617 |
494621 |
494639 |
494647 |
494651 |
494671 |
494677 |
494687 |
494693 |
494699 |
494713 |
494719 |
494723 |
494731 |
494737 |
494743 |
494749 |
494759 |
494761 |
494783 |
494789 |
494803 |
494843 |
494849 |
494873 |
494899 |
494903 |
494917 |
494927 |
494933 |
494939 |
494959 |
494987 |
495017 |
495037 |
495041 |
495043 |
495067 |
495071 |
495109 |
495113 |
495119 |
495133 |
495139 |
495149 |
495151 |
495161 |
495181 |
495199 |
495211 |
495221 |
495241 |
495269 |
495277 |
495289 |
495301 |
495307 |
495323 |
495337 |
495343 |
495347 |
495359 |
495361 |
495371 |
495377 |
495389 |
495401 |
495413 |
495421 |
495433 |
495437 |
495449 |
495457 |
495461 |
495491 |
495511 |
495527 |
495557 |
495559 |
495563 |
495569 |
495571 |
495587 |
495589 |
495611 |
495613 |
495617 |
495619 |
495629 |
495637 |
495647 |
495667 |
495679 |
495701 |
495707 |
495713 |
495749 |
495751 |
495757 |
495769 |
495773 |
495787 |
495791 |
495797 |
495799 |
495821 |
495827 |
495829 |
495851 |
495877 |
495893 |
495899 |
495923 |
495931 |
495947 |
495953 |
495959 |
495967 |
495973 |
495983 |
496007 |
496019 |
496039 |
496051 |
496063 |
496073 |
496079 |
496123 |
496127 |
496163 |
496187 |
496193 |
496211 |
496229 |
496231 |
496259 |
496283 |
496289 |
496291 |
496297 |
496303 |
496313 |
496333 |
496339 |
496343 |
496381 |
496399 |
496427 |
496439 |
496453 |
496459 |
496471 |
496477 |
496481 |
496487 |
496493 |
496499 |
496511 |
496549 |
496579 |
496583 |
496609 |
496631 |
496669 |
496681 |
496687 |
496703 |
496711 |
496733 |
496747 |
496763 |
496789 |
496813 |
496817 |
496841 |
496849 |
496871 |
496877 |
496889 |
496891 |
496897 |
496901 |
496913 |
496919 |
496949 |
496963 |
496997 |
496999 |
497011 |
497017 |
497041 |
497047 |
497051 |
497069 |
497093 |
497111 |
497113 |
497117 |
497137 |
497141 |
497153 |
497171 |
497177 |
497197 |
497239 |
497257 |
497261 |
497269 |
497279 |
497281 |
497291 |
497297 |
497303 |
497309 |
497323 |
497339 |
497351 |
497389 |
497411 |
497417 |
497423 |
497449 |
497461 |
497473 |
497479 |
497491 |
497501 |
497507 |
497509 |
497521 |
497537 |
497551 |
497557 |
497561 |
497579 |
497587 |
497597 |
497603 |
497633 |
497659 |
497663 |
497671 |
497677 |
497689 |
497701 |
497711 |
497719 |
497729 |
497737 |
497741 |
497771 |
497773 |
497801 |
497813 |
497831 |
497839 |
497851 |
497867 |
497869 |
497873 |
497899 |
497929 |
497957 |
497963 |
497969 |
497977 |
497989 |
497993 |
497999 |
498013 |
498053 |
498061 |
498073 |
498089 |
498101 |
498103 |
498119 |
498143 |
498163 |
498167 |
498181 |
498209 |
498227 |
498257 |
498259 |
498271 |
498301 |
498331 |
498343 |
498361 |
498367 |
498391 |
498397 |
498401 |
498403 |
498409 |
498439 |
498461 |
498467 |
498469 |
498493 |
498497 |
498521 |
498523 |
498527 |
498551 |
498557 |
498577 |
498583 |
498599 |
498611 |
498613 |
498643 |
498647 |
498653 |
498679 |
498689 |
498691 |
498733 |
498739 |
498749 |
498761 |
498767 |
498779 |
498781 |
498787 |
498791 |
498803 |
498833 |
498857 |
498859 |
498881 |
498907 |
498923 |
498931 |
498937 |
498947 |
498961 |
498973 |
498977 |
498989 |
499021 |
499027 |
499033 |
499039 |
499063 |
499067 |
499099 |
499117 |
499127 |
499129 |
499133 |
499139 |
499141 |
499151 |
499157 |
499159 |
499181 |
499183 |
499189 |
499211 |
499229 |
499253 |
499267 |
499277 |
499283 |
499309 |
499321 |
499327 |
499349 |
499361 |
499363 |
499391 |
499397 |
499403 |
499423 |
499439 |
499459 |
499481 |
499483 |
499493 |
499507 |
499519 |
499523 |
499549 |
499559 |
499571 |
499591 |
499601 |
499607 |
499621 |
499633 |
499637 |
499649 |
499661 |
499663 |
499669 |
499673 |
499679 |
499687 |
499691 |
499693 |
499711 |
499717 |
499729 |
499739 |
499747 |
499781 |
499787 |
499801 |
499819 |
499853 |
499879 |
499883 |
499897 |
499903 |
499927 |
499943 |
499957 |
499969 |
499973 |
499979 |
500009 |
500029 |
500041 |
500057 |
500069 |
500083 |
500107 |
500111 |
500113 |
500119 |
500153 |
500167 |
500173 |
500177 |
500179 |
500197 |
500209 |
500231 |
500233 |
500237 |
500239 |
500249 |
500257 |
500287 |
500299 |
500317 |
500321 |
500333 |
500341 |
500363 |
500369 |
500389 |
500393 |
500413 |
500417 |
500431 |
500443 |
500459 |
500471 |
500473 |
500483 |
500501 |
500509 |
500519 |
500527 |
500567 |
500579 |
500587 |
500603 |
500629 |
500671 |
500677 |
500693 |
500699 |
500713 |
500719 |
500723 |
500729 |
500741 |
500777 |
500791 |
500807 |
500809 |
500831 |
500839 |
500861 |
500873 |
500881 |
500887 |
500891 |
500909 |
500911 |
500921 |
500923 |
500933 |
500947 |
500953 |
500957 |
500977 |
501001 |
501013 |
501019 |
501029 |
501031 |
501037 |
501043 |
501077 |
501089 |
501103 |
501121 |
501131 |
501133 |
501139 |
501157 |
501173 |
501187 |
501191 |
501197 |
501203 |
501209 |
501217 |
501223 |
501229 |
501233 |
501257 |
501271 |
501287 |
501299 |
501317 |
501341 |
501343 |
501367 |
501383 |
501401 |
501409 |
501419 |
501427 |
501451 |
501463 |
501493 |
501503 |
501511 |
501563 |
501577 |
501593 |
501601 |
501617 |
501623 |
501637 |
501659 |
501691 |
501701 |
501703 |
501707 |
501719 |
501731 |
501769 |
501779 |
501803 |
501817 |
501821 |
501827 |
501829 |
501841 |
501863 |
501889 |
501911 |
501931 |
501947 |
501953 |
501967 |
501971 |
501997 |
502001 |
502013 |
502039 |
502043 |
502057 |
502063 |
502079 |
502081 |
502087 |
502093 |
502121 |
502133 |
502141 |
502171 |
502181 |
502217 |
502237 |
502247 |
502259 |
502261 |
502277 |
502301 |
502321 |
502339 |
502393 |
502409 |
502421 |
502429 |
502441 |
502451 |
502487 |
502499 |
502501 |
502507 |
502517 |
502543 |
502549 |
502553 |
502591 |
502597 |
502613 |
502631 |
502633 |
502643 |
502651 |
502669 |
502687 |
502699 |
502703 |
502717 |
502729 |
502769 |
502771 |
502781 |
502787 |
502807 |
502819 |
502829 |
502841 |
502847 |
502861 |
502883 |
502919 |
502921 |
502937 |
502961 |
502973 |
503003 |
503017 |
503039 |
503053 |
503077 |
503123 |
503131 |
503137 |
503147 |
503159 |
503197 |
503207 |
503213 |
503227 |
503231 |
503233 |
503249 |
503267 |
503287 |
503297 |
503303 |
503317 |
503339 |
503351 |
503359 |
503369 |
503381 |
503383 |
503389 |
503407 |
503413 |
503423 |
503431 |
503441 |
503453 |
503483 |
503501 |
503543 |
503549 |
503551 |
503563 |
503593 |
503599 |
503609 |
503611 |
503621 |
503623 |
503647 |
503653 |
503663 |
503707 |
503717 |
503743 |
503753 |
503771 |
503777 |
503779 |
503791 |
503803 |
503819 |
503821 |
503827 |
503851 |
503857 |
503869 |
503879 |
503911 |
503927 |
503929 |
503939 |
503947 |
503959 |
503963 |
503969 |
503983 |
503989 |
504001 |
504011 |
504017 |
504047 |
504061 |
504073 |
504103 |
504121 |
504139 |
504143 |
504149 |
504151 |
504157 |
504181 |
504187 |
504197 |
504209 |
504221 |
504247 |
504269 |
504289 |
504299 |
504307 |
504311 |
504323 |
504337 |
504349 |
504353 |
504359 |
504377 |
504379 |
504389 |
504403 |
504457 |
504461 |
504473 |
504479 |
504521 |
504523 |
504527 |
504547 |
504563 |
504593 |
504599 |
504607 |
504617 |
504619 |
504631 |
504661 |
504667 |
504671 |
504677 |
504683 |
504727 |
504767 |
504787 |
504797 |
504799 |
504817 |
504821 |
504851 |
504853 |
504857 |
504871 |
504877 |
504893 |
504901 |
504929 |
504937 |
504943 |
504947 |
504953 |
504967 |
504983 |
504989 |
504991 |
505027 |
505031 |
505033 |
505049 |
505051 |
505061 |
505067 |
505073 |
505091 |
505097 |
505111 |
505117 |
505123 |
505129 |
505139 |
505157 |
505159 |
505181 |
505187 |
505201 |
505213 |
505231 |
505237 |
505277 |
505279 |
505283 |
505301 |
505313 |
505319 |
505321 |
505327 |
505339 |
505357 |
505367 |
505369 |
505399 |
505409 |
505411 |
505429 |
505447 |
505459 |
505469 |
505481 |
505493 |
505501 |
505511 |
505513 |
505523 |
505537 |
505559 |
505573 |
505601 |
505607 |
505613 |
505619 |
505633 |
505639 |
505643 |
505657 |
505663 |
505669 |
505691 |
505693 |
505709 |
505711 |
505727 |
505759 |
505763 |
505777 |
505781 |
505811 |
505819 |
505823 |
505867 |
505871 |
505877 |
505907 |
505919 |
505927 |
505949 |
505961 |
505969 |
505979 |
506047 |
506071 |
506083 |
506101 |
506113 |
506119 |
506131 |
506147 |
506171 |
506173 |
506183 |
506201 |
506213 |
506251 |
506263 |
506269 |
506281 |
506291 |
506327 |
506329 |
506333 |
506339 |
506347 |
506351 |
506357 |
506381 |
506393 |
506417 |
506423 |
506449 |
506459 |
506461 |
506479 |
506491 |
506501 |
506507 |
506531 |
506533 |
506537 |
506551 |
506563 |
506573 |
506591 |
506593 |
506599 |
506609 |
506629 |
506647 |
506663 |
506683 |
506687 |
506689 |
506699 |
506729 |
506731 |
506743 |
506773 |
506783 |
506791 |
506797 |
506809 |
506837 |
506843 |
506861 |
506873 |
506887 |
506893 |
506899 |
506903 |
506911 |
506929 |
506941 |
506963 |
506983 |
506993 |
506999 |
507029 |
507049 |
507071 |
507077 |
507079 |
507103 |
507109 |
507113 |
507119 |
507137 |
507139 |
507149 |
507151 |
507163 |
507193 |
507197 |
507217 |
507289 |
507301 |
507313 |
507317 |
507329 |
507347 |
507349 |
507359 |
507361 |
507371 |
507383 |
507401 |
507421 |
507431 |
507461 |
507491 |
507497 |
507499 |
507503 |
507523 |
507557 |
507571 |
507589 |
507593 |
507599 |
507607 |
507631 |
507641 |
507667 |
507673 |
507691 |
507697 |
507713 |
507719 |
507743 |
507757 |
507779 |
507781 |
507797 |
507803 |
507809 |
507821 |
507827 |
507839 |
507883 |
507901 |
507907 |
507917 |
507919 |
507937 |
507953 |
507961 |
507971 |
507979 |
508009 |
508019 |
508021 |
508033 |
508037 |
508073 |
508087 |
508091 |
508097 |
508103 |
508129 |
508159 |
508171 |
508187 |
508213 |
508223 |
508229 |
508237 |
508243 |
508259 |
508271 |
508273 |
508297 |
508301 |
508327 |
508331 |
508349 |
508363 |
508367 |
508373 |
508393 |
508433 |
508439 |
508451 |
508471 |
508477 |
508489 |
508499 |
508513 |
508517 |
508531 |
508549 |
508559 |
508567 |
508577 |
508579 |
508583 |
508619 |
508621 |
508637 |
508643 |
508661 |
508693 |
508709 |
508727 |
508771 |
508789 |
508799 |
508811 |
508817 |
508841 |
508847 |
508867 |
508901 |
508903 |
508909 |
508913 |
508919 |
508931 |
508943 |
508951 |
508957 |
508961 |
508969 |
508973 |
508987 |
509023 |
509027 |
509053 |
509063 |
509071 |
509087 |
509101 |
509123 |
509137 |
509147 |
509149 |
509203 |
509221 |
509227 |
509239 |
509263 |
509281 |
509287 |
509293 |
509297 |
509317 |
509329 |
509359 |
509363 |
509389 |
509393 |
509413 |
509417 |
509429 |
509441 |
509449 |
509477 |
509513 |
509521 |
509543 |
509549 |
509557 |
509563 |
509569 |
509573 |
509581 |
509591 |
509603 |
509623 |
509633 |
509647 |
509653 |
509659 |
509681 |
509687 |
509689 |
509693 |
509699 |
509723 |
509731 |
509737 |
509741 |
509767 |
509783 |
509797 |
509801 |
509833 |
509837 |
509843 |
509863 |
509867 |
509879 |
509909 |
509911 |
509921 |
509939 |
509947 |
509959 |
509963 |
509989 |
510007 |
510031 |
510047 |
510049 |
510061 |
510067 |
510073 |
510077 |
510079 |
510089 |
510101 |
510121 |
510127 |
510137 |
510157 |
510179 |
510199 |
510203 |
510217 |
510227 |
510233 |
510241 |
510247 |
510253 |
510271 |
510287 |
510299 |
510311 |
510319 |
510331 |
510361 |
510379 |
510383 |
510401 |
510403 |
510449 |
510451 |
510457 |
510463 |
510481 |
510529 |
510551 |
510553 |
510569 |
510581 |
510583 |
510589 |
510611 |
510613 |
510617 |
510619 |
510677 |
510683 |
510691 |
510707 |
510709 |
510751 |
510767 |
510773 |
510793 |
510803 |
510817 |
510823 |
510827 |
510847 |
510889 |
510907 |
510919 |
510931 |
510941 |
510943 |
510989 |
511001 |
511013 |
511019 |
511033 |
511039 |
511057 |
511061 |
511087 |
511109 |
511111 |
511123 |
511151 |
511153 |
511163 |
511169 |
511171 |
511177 |
511193 |
511201 |
511211 |
511213 |
511223 |
511237 |
511243 |
511261 |
511279 |
511289 |
511297 |
511327 |
511333 |
511337 |
511351 |
511361 |
511387 |
511391 |
511409 |
511417 |
511439 |
511447 |
511453 |
511457 |
511463 |
511477 |
511487 |
511507 |
511519 |
511523 |
511541 |
511549 |
511559 |
511573 |
511579 |
511583 |
511591 |
511603 |
511627 |
511631 |
511633 |
511669 |
511691 |
511703 |
511711 |
511723 |
511757 |
511787 |
511793 |
511801 |
511811 |
511831 |
511843 |
511859 |
511867 |
511873 |
511891 |
511897 |
511909 |
511933 |
511939 |
511961 |
511963 |
511991 |
511997 |
512009 |
512011 |
512021 |
512047 |
512059 |
512093 |
512101 |
512137 |
512147 |
512167 |
512207 |
512249 |
512251 |
512269 |
512287 |
512311 |
512321 |
512333 |
512353 |
512389 |
512419 |
512429 |
512443 |
512467 |
512497 |
512503 |
512507 |
512521 |
512531 |
512537 |
512543 |
512569 |
512573 |
512579 |
512581 |
512591 |
512593 |
512597 |
512609 |
512621 |
512641 |
512657 |
512663 |
512671 |
512683 |
512711 |
512713 |
512717 |
512741 |
512747 |
512761 |
512767 |
512779 |
512797 |
512803 |
512819 |
512821 |
512843 |
512849 |
512891 |
512899 |
512903 |
512917 |
512921 |
512927 |
512929 |
512959 |
512977 |
512989 |
512999 |
513001 |
513013 |
513017 |
513031 |
513041 |
513047 |
513053 |
513059 |
513067 |
513083 |
513101 |
513103 |
513109 |
513131 |
513137 |
513157 |
513167 |
513169 |
513173 |
513203 |
513239 |
513257 |
513269 |
513277 |
513283 |
513307 |
513311 |
513313 |
513319 |
513341 |
513347 |
513353 |
513367 |
513371 |
513397 |
513407 |
513419 |
513427 |
513431 |
513439 |
513473 |
513479 |
513481 |
513509 |
513511 |
513529 |
513533 |
513593 |
513631 |
513641 |
513649 |
513673 |
513679 |
513683 |
513691 |
513697 |
513719 |
513727 |
513731 |
513739 |
513749 |
513761 |
513767 |
513769 |
513781 |
513829 |
513839 |
513841 |
513871 |
513881 |
513899 |
513917 |
513923 |
513937 |
513943 |
513977 |
513991 |
514001 |
514009 |
514013 |
514021 |
514049 |
514051 |
514057 |
514061 |
514079 |
514081 |
514093 |
514103 |
514117 |
514123 |
514127 |
514147 |
514177 |
514187 |
514201 |
514219 |
514229 |
514243 |
514247 |
514249 |
514271 |
514277 |
514289 |
514309 |
514313 |
514333 |
514343 |
514357 |
514361 |
514379 |
514399 |
514417 |
514429 |
514433 |
514453 |
514499 |
514513 |
514519 |
514523 |
514529 |
514531 |
514543 |
514561 |
514571 |
514621 |
514637 |
514639 |
514643 |
514649 |
514651 |
514669 |
514681 |
514711 |
514733 |
514739 |
514741 |
514747 |
514751 |
514757 |
514769 |
514783 |
514793 |
514819 |
514823 |
514831 |
514841 |
514847 |
514853 |
514859 |
514867 |
514873 |
514889 |
514903 |
514933 |
514939 |
514949 |
514967 |
515041 |
515087 |
515089 |
515111 |
515143 |
515149 |
515153 |
515173 |
515191 |
515227 |
515231 |
515233 |
515237 |
515279 |
515293 |
515311 |
515323 |
515351 |
515357 |
515369 |
515371 |
515377 |
515381 |
515401 |
515429 |
515477 |
515507 |
515519 |
515539 |
515563 |
515579 |
515587 |
515597 |
515611 |
515621 |
515639 |
515651 |
515653 |
515663 |
515677 |
515681 |
515687 |
515693 |
515701 |
515737 |
515741 |
515761 |
515771 |
515773 |
515777 |
515783 |
515803 |
515813 |
515839 |
515843 |
515857 |
515861 |
515873 |
515887 |
515917 |
515923 |
515929 |
515941 |
515951 |
515969 |
515993 |
516017 |
516023 |
516049 |
516053 |
516077 |
516091 |
516127 |
516151 |
516157 |
516161 |
516163 |
516169 |
516179 |
516193 |
516199 |
516209 |
516223 |
516227 |
516233 |
516247 |
516251 |
516253 |
516277 |
516283 |
516293 |
516319 |
516323 |
516349 |
516359 |
516361 |
516371 |
516377 |
516391 |
516407 |
516421 |
516431 |
516433 |
516437 |
516449 |
516457 |
516469 |
516493 |
516499 |
516517 |
516521 |
516539 |
516541 |
516563 |
516587 |
516589 |
516599 |
516611 |
516617 |
516619 |
516623 |
516643 |
516653 |
516673 |
516679 |
516689 |
516701 |
516709 |
516713 |
516721 |
516727 |
516757 |
516793 |
516811 |
516821 |
516829 |
516839 |
516847 |
516871 |
516877 |
516883 |
516907 |
516911 |
516931 |
516947 |
516949 |
516959 |
516973 |
516977 |
516979 |
516991 |
517003 |
517043 |
517061 |
517067 |
517073 |
517079 |
517081 |
517087 |
517091 |
517129 |
517151 |
517169 |
517177 |
517183 |
517189 |
517207 |
517211 |
517217 |
517229 |
517241 |
517243 |
517249 |
517261 |
517267 |
517277 |
517289 |
517303 |
517337 |
517343 |
517367 |
517373 |
517381 |
517393 |
517399 |
517403 |
517411 |
517417 |
517457 |
517459 |
517469 |
517471 |
517481 |
517487 |
517499 |
517501 |
517507 |
517511 |
517513 |
517547 |
517549 |
517553 |
517571 |
517577 |
517589 |
517597 |
517603 |
517609 |
517613 |
517619 |
517637 |
517639 |
517711 |
517717 |
517721 |
517729 |
517733 |
517739 |
517747 |
517817 |
517823 |
517831 |
517861 |
517873 |
517877 |
517901 |
517919 |
517927 |
517931 |
517949 |
517967 |
517981 |
517991 |
517999 |
518017 |
518047 |
518057 |
518059 |
518083 |
518099 |
518101 |
518113 |
518123 |
518129 |
518131 |
518137 |
518153 |
518159 |
518171 |
518179 |
518191 |
518207 |
518209 |
518233 |
518237 |
518239 |
518249 |
518261 |
518291 |
518299 |
518311 |
518327 |
518341 |
518387 |
518389 |
518411 |
518417 |
518429 |
518431 |
518447 |
518467 |
518471 |
518473 |
518509 |
518521 |
518533 |
518543 |
518579 |
518587 |
518597 |
518611 |
518621 |
518657 |
518689 |
518699 |
518717 |
518729 |
518737 |
518741 |
518743 |
518747 |
518759 |
518761 |
518767 |
518779 |
518801 |
518803 |
518807 |
518809 |
518813 |
518831 |
518863 |
518867 |
518893 |
518911 |
518933 |
518953 |
518981 |
518983 |
518989 |
519011 |
519031 |
519037 |
519067 |
519083 |
519089 |
519091 |
519097 |
519107 |
519119 |
519121 |
519131 |
519151 |
519161 |
519193 |
519217 |
519227 |
519229 |
519247 |
519257 |
519269 |
519283 |
519287 |
519301 |
519307 |
519349 |
519353 |
519359 |
519371 |
519373 |
519383 |
519391 |
519413 |
519427 |
519433 |
519457 |
519487 |
519499 |
519509 |
519521 |
519523 |
519527 |
519539 |
519551 |
519553 |
519577 |
519581 |
519587 |
519611 |
519619 |
519643 |
519647 |
519667 |
519683 |
519691 |
519703 |
519713 |
519733 |
519737 |
519769 |
519787 |
519793 |
519797 |
519803 |
519817 |
519863 |
519881 |
519889 |
519907 |
519917 |
519919 |
519923 |
519931 |
519943 |
519947 |
519971 |
519989 |
519997 |
520019 |
520021 |
520031 |
520043 |
520063 |
520067 |
520073 |
520103 |
520111 |
520123 |
520129 |
520151 |
520193 |
520213 |
520241 |
520279 |
520291 |
520297 |
520307 |
520309 |
520313 |
520339 |
520349 |
520357 |
520361 |
520363 |
520369 |
520379 |
520381 |
520393 |
520409 |
520411 |
520423 |
520427 |
520433 |
520447 |
520451 |
520529 |
520547 |
520549 |
520567 |
520571 |
520589 |
520607 |
520609 |
520621 |
520631 |
520633 |
520649 |
520679 |
520691 |
520699 |
520703 |
520717 |
520721 |
520747 |
520759 |
520763 |
520787 |
520813 |
520837 |
520841 |
520853 |
520867 |
520889 |
520913 |
520921 |
520943 |
520957 |
520963 |
520967 |
520969 |
520981 |
521009 |
521021 |
521023 |
521039 |
521041 |
521047 |
521051 |
521063 |
521107 |
521119 |
521137 |
521153 |
521161 |
521167 |
521173 |
521177 |
521179 |
521201 |
521231 |
521243 |
521251 |
521267 |
521281 |
521299 |
521309 |
521317 |
521329 |
521357 |
521359 |
521363 |
521369 |
521377 |
521393 |
521399 |
521401 |
521429 |
521447 |
521471 |
521483 |
521491 |
521497 |
521503 |
521519 |
521527 |
521533 |
521537 |
521539 |
521551 |
521557 |
521567 |
521581 |
521603 |
521641 |
521657 |
521659 |
521669 |
521671 |
521693 |
521707 |
521723 |
521743 |
521749 |
521753 |
521767 |
521777 |
521789 |
521791 |
521809 |
521813 |
521819 |
521831 |
521861 |
521869 |
521879 |
521881 |
521887 |
521897 |
521903 |
521923 |
521929 |
521981 |
521993 |
521999 |
522017 |
522037 |
522047 |
522059 |
522061 |
522073 |
522079 |
522083 |
522113 |
522127 |
522157 |
522161 |
522167 |
522191 |
522199 |
522211 |
522227 |
522229 |
522233 |
522239 |
522251 |
522259 |
522281 |
522283 |
522289 |
522317 |
522323 |
522337 |
522371 |
522373 |
522383 |
522391 |
522409 |
522413 |
522439 |
522449 |
522469 |
522479 |
522497 |
522517 |
522521 |
522523 |
522541 |
522553 |
522569 |
522601 |
522623 |
522637 |
522659 |
522661 |
522673 |
522677 |
522679 |
522689 |
522703 |
522707 |
522719 |
522737 |
522749 |
522757 |
522761 |
522763 |
522787 |
522811 |
522827 |
522829 |
522839 |
522853 |
522857 |
522871 |
522881 |
522883 |
522887 |
522919 |
522943 |
522947 |
522959 |
522961 |
522989 |
523007 |
523021 |
523031 |
523049 |
523093 |
523097 |
523109 |
523129 |
523169 |
523177 |
523207 |
523213 |
523219 |
523261 |
523297 |
523307 |
523333 |
523349 |
523351 |
523357 |
523387 |
523403 |
523417 |
523427 |
523433 |
523459 |
523463 |
523487 |
523489 |
523493 |
523511 |
523519 |
523541 |
523543 |
523553 |
523571 |
523573 |
523577 |
523597 |
523603 |
523631 |
523637 |
523639 |
523657 |
523667 |
523669 |
523673 |
523681 |
523717 |
523729 |
523741 |
523759 |
523763 |
523771 |
523777 |
523793 |
523801 |
523829 |
523847 |
523867 |
523877 |
523903 |
523907 |
523927 |
523937 |
523949 |
523969 |
523987 |
523997 |
524047 |
524053 |
524057 |
524063 |
524071 |
524081 |
524087 |
524099 |
524113 |
524119 |
524123 |
524149 |
524171 |
524189 |
524197 |
524201 |
524203 |
524219 |
524221 |
524231 |
524243 |
524257 |
524261 |
524269 |
524287 |
524309 |
524341 |
524347 |
524351 |
524353 |
524369 |
524387 |
524389 |
524411 |
524413 |
524429 |
524453 |
524497 |
524507 |
524509 |
524519 |
524521 |
524591 |
524593 |
524599 |
524633 |
524669 |
524681 |
524683 |
524701 |
524707 |
524731 |
524743 |
524789 |
524801 |
524803 |
524827 |
524831 |
524857 |
524863 |
524869 |
524873 |
524893 |
524899 |
524921 |
524933 |
524939 |
524941 |
524947 |
524957 |
524959 |
524963 |
524969 |
524971 |
524981 |
524983 |
524999 |
525001 |
525013 |
525017 |
525029 |
525043 |
525101 |
525127 |
525137 |
525143 |
525157 |
525163 |
525167 |
525191 |
525193 |
525199 |
525209 |
525221 |
525241 |
525247 |
525253 |
525257 |
525299 |
525313 |
525353 |
525359 |
525361 |
525373 |
525377 |
525379 |
525391 |
525397 |
525409 |
525431 |
525433 |
525439 |
525457 |
525461 |
525467 |
525491 |
525493 |
525517 |
525529 |
525533 |
525541 |
525571 |
525583 |
525593 |
525599 |
525607 |
525641 |
525649 |
525671 |
525677 |
525697 |
525709 |
525713 |
525719 |
525727 |
525731 |
525739 |
525769 |
525773 |
525781 |
525809 |
525817 |
525839 |
525869 |
525871 |
525887 |
525893 |
525913 |
525923 |
525937 |
525947 |
525949 |
525953 |
525961 |
525979 |
525983 |
526027 |
526037 |
526049 |
526051 |
526063 |
526067 |
526069 |
526073 |
526087 |
526117 |
526121 |
526139 |
526157 |
526159 |
526189 |
526193 |
526199 |
526213 |
526223 |
526231 |
526249 |
526271 |
526283 |
526289 |
526291 |
526297 |
526307 |
526367 |
526373 |
526381 |
526387 |
526391 |
526397 |
526423 |
526429 |
526441 |
526453 |
526459 |
526483 |
526499 |
526501 |
526511 |
526531 |
526543 |
526571 |
526573 |
526583 |
526601 |
526619 |
526627 |
526633 |
526637 |
526649 |
526651 |
526657 |
526667 |
526679 |
526681 |
526703 |
526709 |
526717 |
526733 |
526739 |
526741 |
526759 |
526763 |
526777 |
526781 |
526829 |
526831 |
526837 |
526853 |
526859 |
526871 |
526909 |
526913 |
526931 |
526937 |
526943 |
526951 |
526957 |
526963 |
526993 |
526997 |
527053 |
527057 |
527063 |
527069 |
527071 |
527081 |
527099 |
527123 |
527129 |
527143 |
527159 |
527161 |
527173 |
527179 |
527203 |
527207 |
527209 |
527237 |
527251 |
527273 |
527281 |
527291 |
527327 |
527333 |
527347 |
527353 |
527377 |
527381 |
527393 |
527399 |
527407 |
527411 |
527419 |
527441 |
527447 |
527453 |
527489 |
527507 |
527533 |
527557 |
527563 |
527581 |
527591 |
527599 |
527603 |
527623 |
527627 |
527633 |
527671 |
527699 |
527701 |
527729 |
527741 |
527749 |
527753 |
527789 |
527803 |
527809 |
527819 |
527843 |
527851 |
527869 |
527881 |
527897 |
527909 |
527921 |
527929 |
527941 |
527981 |
527983 |
527987 |
527993 |
528001 |
528013 |
528041 |
528043 |
528053 |
528091 |
528097 |
528107 |
528127 |
528131 |
528137 |
528163 |
528167 |
528191 |
528197 |
528217 |
528223 |
528247 |
528263 |
528289 |
528299 |
528313 |
528317 |
528329 |
528373 |
528383 |
528391 |
528401 |
528403 |
528413 |
528419 |
528433 |
528469 |
528487 |
528491 |
528509 |
528511 |
528527 |
528559 |
528611 |
528623 |
528629 |
528631 |
528659 |
528667 |
528673 |
528679 |
528691 |
528707 |
528709 |
528719 |
528763 |
528779 |
528791 |
528799 |
528811 |
528821 |
528823 |
528833 |
528863 |
528877 |
528881 |
528883 |
528911 |
528929 |
528947 |
528967 |
528971 |
528973 |
528991 |
529003 |
529007 |
529027 |
529033 |
529037 |
529043 |
529049 |
529051 |
529097 |
529103 |
529117 |
529121 |
529127 |
529129 |
529153 |
529157 |
529181 |
529183 |
529213 |
529229 |
529237 |
529241 |
529259 |
529271 |
529273 |
529301 |
529307 |
529313 |
529327 |
529343 |
529349 |
529357 |
529381 |
529393 |
529411 |
529421 |
529423 |
529471 |
529489 |
529513 |
529517 |
529519 |
529531 |
529547 |
529577 |
529579 |
529603 |
529619 |
529637 |
529649 |
529657 |
529673 |
529681 |
529687 |
529691 |
529693 |
529709 |
529723 |
529741 |
529747 |
529751 |
529807 |
529811 |
529813 |
529819 |
529829 |
529847 |
529871 |
529927 |
529933 |
529939 |
529957 |
529961 |
529973 |
529979 |
529981 |
529987 |
529999 |
530017 |
530021 |
530027 |
530041 |
530051 |
530063 |
530087 |
530093 |
530129 |
530137 |
530143 |
530177 |
530183 |
530197 |
530203 |
530209 |
530227 |
530237 |
530249 |
530251 |
530261 |
530267 |
530279 |
530293 |
530297 |
530303 |
530329 |
530333 |
530339 |
530353 |
530359 |
530389 |
530393 |
530401 |
530429 |
530443 |
530447 |
530501 |
530507 |
530513 |
530527 |
530531 |
530533 |
530539 |
530549 |
530567 |
530597 |
530599 |
530603 |
530609 |
530641 |
530653 |
530659 |
530669 |
530693 |
530701 |
530711 |
530713 |
530731 |
530741 |
530743 |
530753 |
530767 |
530773 |
530797 |
530807 |
530833 |
530837 |
530843 |
530851 |
530857 |
530861 |
530869 |
530897 |
530911 |
530947 |
530969 |
530977 |
530983 |
530989 |
531017 |
531023 |
531043 |
531071 |
531079 |
531101 |
531103 |
531121 |
531133 |
531143 |
531163 |
531169 |
531173 |
531197 |
531203 |
531229 |
531239 |
531253 |
531263 |
531281 |
531287 |
531299 |
531331 |
531337 |
531343 |
531347 |
531353 |
531359 |
531383 |
531457 |
531481 |
531497 |
531521 |
531547 |
531551 |
531569 |
531571 |
531581 |
531589 |
531611 |
531613 |
531623 |
531631 |
531637 |
531667 |
531673 |
531689 |
531701 |
531731 |
531793 |
531799 |
531821 |
531823 |
531827 |
531833 |
531841 |
531847 |
531857 |
531863 |
531871 |
531877 |
531901 |
531911 |
531919 |
531977 |
531983 |
531989 |
531997 |
532001 |
532009 |
532027 |
532033 |
532061 |
532069 |
532093 |
532099 |
532141 |
532153 |
532159 |
532163 |
532183 |
532187 |
532193 |
532199 |
532241 |
532249 |
532261 |
532267 |
532277 |
532283 |
532307 |
532313 |
532327 |
532331 |
532333 |
532349 |
532373 |
532379 |
532391 |
532403 |
532417 |
532421 |
532439 |
532447 |
532451 |
532453 |
532489 |
532501 |
532523 |
532529 |
532531 |
532537 |
532547 |
532561 |
532601 |
532603 |
532607 |
532619 |
532621 |
532633 |
532639 |
532663 |
532669 |
532687 |
532691 |
532709 |
532733 |
532739 |
532751 |
532757 |
532771 |
532781 |
532783 |
532789 |
532801 |
532811 |
532823 |
532849 |
532853 |
532867 |
532907 |
532919 |
532949 |
532951 |
532981 |
532993 |
532999 |
533003 |
533009 |
533011 |
533033 |
533051 |
533053 |
533063 |
533077 |
533089 |
533111 |
533129 |
533149 |
533167 |
533177 |
533189 |
533191 |
533213 |
533219 |
533227 |
533237 |
533249 |
533257 |
533261 |
533263 |
533297 |
533303 |
533317 |
533321 |
533327 |
533353 |
533363 |
533371 |
533389 |
533399 |
533413 |
533447 |
533453 |
533459 |
533509 |
533543 |
533549 |
533573 |
533581 |
533593 |
533633 |
533641 |
533671 |
533693 |
533711 |
533713 |
533719 |
533723 |
533737 |
533747 |
533777 |
533801 |
533809 |
533821 |
533831 |
533837 |
533857 |
533879 |
533887 |
533893 |
533909 |
533921 |
533927 |
533959 |
533963 |
533969 |
533971 |
533989 |
533993 |
533999 |
534007 |
534013 |
534019 |
534029 |
534043 |
534047 |
534049 |
534059 |
534073 |
534077 |
534091 |
534101 |
534113 |
534137 |
534167 |
534173 |
534199 |
534203 |
534211 |
534229 |
534241 |
534253 |
534283 |
534301 |
534307 |
534311 |
534323 |
534329 |
534341 |
534367 |
534371 |
534403 |
534407 |
534431 |
534439 |
534473 |
534491 |
534511 |
534529 |
534553 |
534571 |
534577 |
534581 |
534601 |
534607 |
534617 |
534629 |
534631 |
534637 |
534647 |
534649 |
534659 |
534661 |
534671 |
534697 |
534707 |
534739 |
534799 |
534811 |
534827 |
534839 |
534841 |
534851 |
534857 |
534883 |
534889 |
534913 |
534923 |
534931 |
534943 |
534949 |
534971 |
535013 |
535019 |
535033 |
535037 |
535061 |
535099 |
535103 |
535123 |
535133 |
535151 |
535159 |
535169 |
535181 |
535193 |
535207 |
535219 |
535229 |
535237 |
535243 |
535273 |
535303 |
535319 |
535333 |
535349 |
535351 |
535361 |
535387 |
535391 |
535399 |
535481 |
535487 |
535489 |
535499 |
535511 |
535523 |
535529 |
535547 |
535571 |
535573 |
535589 |
535607 |
535609 |
535627 |
535637 |
535663 |
535669 |
535673 |
535679 |
535697 |
535709 |
535727 |
535741 |
535751 |
535757 |
535771 |
535783 |
535793 |
535811 |
535849 |
535859 |
535861 |
535879 |
535919 |
535937 |
535939 |
535943 |
535957 |
535967 |
535973 |
535991 |
535999 |
536017 |
536023 |
536051 |
536057 |
536059 |
536069 |
536087 |
536099 |
536101 |
536111 |
536141 |
536147 |
536149 |
536189 |
536191 |
536203 |
536213 |
536219 |
536227 |
536233 |
536243 |
536267 |
536273 |
536279 |
536281 |
536287 |
536293 |
536311 |
536323 |
536353 |
536357 |
536377 |
536399 |
536407 |
536423 |
536441 |
536443 |
536447 |
536449 |
536453 |
536461 |
536467 |
536479 |
536491 |
536509 |
536513 |
536531 |
536533 |
536561 |
536563 |
536593 |
536609 |
536621 |
536633 |
536651 |
536671 |
536677 |
536687 |
536699 |
536717 |
536719 |
536729 |
536743 |
536749 |
536771 |
536773 |
536777 |
536779 |
536791 |
536801 |
536803 |
536839 |
536849 |
536857 |
536867 |
536869 |
536891 |
536909 |
536917 |
536923 |
536929 |
536933 |
536947 |
536953 |
536971 |
536989 |
536999 |
537001 |
537007 |
537011 |
537023 |
537029 |
537037 |
537041 |
537067 |
537071 |
537079 |
537091 |
537127 |
537133 |
537143 |
537157 |
537169 |
537181 |
537191 |
537197 |
537221 |
537233 |
537241 |
537269 |
537281 |
537287 |
537307 |
537331 |
537343 |
537347 |
537373 |
537379 |
537401 |
537403 |
537413 |
537497 |
537527 |
537547 |
537569 |
537583 |
537587 |
537599 |
537611 |
537637 |
537661 |
537673 |
537679 |
537703 |
537709 |
537739 |
537743 |
537749 |
537769 |
537773 |
537781 |
537787 |
537793 |
537811 |
537841 |
537847 |
537853 |
537877 |
537883 |
537899 |
537913 |
537919 |
537941 |
537991 |
538001 |
538019 |
538049 |
538051 |
538073 |
538079 |
538093 |
538117 |
538121 |
538123 |
538127 |
538147 |
538151 |
538157 |
538159 |
538163 |
538199 |
538201 |
538247 |
538249 |
538259 |
538267 |
538283 |
538297 |
538301 |
538303 |
538309 |
538331 |
538333 |
538357 |
538367 |
538397 |
538399 |
538411 |
538423 |
538457 |
538471 |
538481 |
538487 |
538511 |
538513 |
538519 |
538523 |
538529 |
538553 |
538561 |
538567 |
538579 |
538589 |
538597 |
538621 |
538649 |
538651 |
538697 |
538709 |
538711 |
538721 |
538723 |
538739 |
538751 |
538763 |
538771 |
538777 |
538789 |
538799 |
538801 |
538817 |
538823 |
538829 |
538841 |
538871 |
538877 |
538921 |
538927 |
538931 |
538939 |
538943 |
538987 |
539003 |
539009 |
539039 |
539047 |
539089 |
539093 |
539101 |
539107 |
539111 |
539113 |
539129 |
539141 |
539153 |
539159 |
539167 |
539171 |
539207 |
539219 |
539233 |
539237 |
539261 |
539267 |
539269 |
539293 |
539303 |
539309 |
539311 |
539321 |
539323 |
539339 |
539347 |
539351 |
539389 |
539401 |
539447 |
539449 |
539479 |
539501 |
539503 |
539507 |
539509 |
539533 |
539573 |
539621 |
539629 |
539633 |
539639 |
539641 |
539653 |
539663 |
539677 |
539687 |
539711 |
539713 |
539723 |
539729 |
539743 |
539761 |
539783 |
539797 |
539837 |
539839 |
539843 |
539849 |
539863 |
539881 |
539897 |
539899 |
539921 |
539947 |
539993 |
540041 |
540061 |
540079 |
540101 |
540119 |
540121 |
540139 |
540149 |
540157 |
540167 |
540173 |
540179 |
540181 |
540187 |
540203 |
540217 |
540233 |
540251 |
540269 |
540271 |
540283 |
540301 |
540307 |
540343 |
540347 |
540349 |
540367 |
540373 |
540377 |
540383 |
540389 |
540391 |
540433 |
540437 |
540461 |
540469 |
540509 |
540511 |
540517 |
540539 |
540541 |
540557 |
540559 |
540577 |
540587 |
540599 |
540611 |
540613 |
540619 |
540629 |
540677 |
540679 |
540689 |
540691 |
540697 |
540703 |
540713 |
540751 |
540769 |
540773 |
540779 |
540781 |
540803 |
540809 |
540823 |
540851 |
540863 |
540871 |
540877 |
540901 |
540907 |
540961 |
540989 |
541001 |
541007 |
541027 |
541049 |
541061 |
541087 |
541097 |
541129 |
541133 |
541141 |
541153 |
541181 |
541193 |
541201 |
541217 |
541231 |
541237 |
541249 |
541267 |
541271 |
541283 |
541301 |
541309 |
541339 |
541349 |
541361 |
541363 |
541369 |
541381 |
541391 |
541417 |
541439 |
541447 |
541469 |
541483 |
541507 |
541511 |
541523 |
541529 |
541531 |
541537 |
541543 |
541547 |
541549 |
541571 |
541577 |
541579 |
541589 |
541613 |
541631 |
541657 |
541661 |
541669 |
541693 |
541699 |
541711 |
541721 |
541727 |
541759 |
541763 |
541771 |
541777 |
541781 |
541799 |
541817 |
541831 |
541837 |
541859 |
541889 |
541901 |
541927 |
541951 |
541967 |
541987 |
541991 |
541993 |
541999 |
542021 |
542023 |
542027 |
542053 |
542063 |
542071 |
542081 |
542083 |
542093 |
542111 |
542117 |
542119 |
542123 |
542131 |
542141 |
542149 |
542153 |
542167 |
542183 |
542189 |
542197 |
542207 |
542219 |
542237 |
542251 |
542261 |
542263 |
542281 |
542293 |
542299 |
542323 |
542371 |
542401 |
542441 |
542447 |
542461 |
542467 |
542483 |
542489 |
542497 |
542519 |
542533 |
542537 |
542539 |
542551 |
542557 |
542567 |
542579 |
542587 |
542599 |
542603 |
542683 |
542687 |
542693 |
542713 |
542719 |
542723 |
542747 |
542761 |
542771 |
542783 |
542791 |
542797 |
542821 |
542831 |
542837 |
542873 |
542891 |
542911 |
542921 |
542923 |
542933 |
542939 |
542947 |
542951 |
542981 |
542987 |
542999 |
543017 |
543019 |
543029 |
543061 |
543097 |
543113 |
543131 |
543139 |
543143 |
543149 |
543157 |
543161 |
543163 |
543187 |
543203 |
543217 |
543223 |
543227 |
543233 |
543241 |
543253 |
543259 |
543281 |
543287 |
543289 |
543299 |
543307 |
543311 |
543313 |
543341 |
543349 |
543353 |
543359 |
543379 |
543383 |
543407 |
543427 |
543463 |
543497 |
543503 |
543509 |
543539 |
543551 |
543553 |
543593 |
543601 |
543607 |
543611 |
543617 |
543637 |
543659 |
543661 |
543671 |
543679 |
543689 |
543703 |
543707 |
543713 |
543769 |
543773 |
543787 |
543791 |
543793 |
543797 |
543811 |
543827 |
543841 |
543853 |
543857 |
543859 |
543871 |
543877 |
543883 |
543887 |
543889 |
543901 |
543911 |
543929 |
543967 |
543971 |
543997 |
544001 |
544007 |
544009 |
544013 |
544021 |
544031 |
544097 |
544099 |
544109 |
544123 |
544129 |
544133 |
544139 |
544171 |
544177 |
544183 |
544199 |
544223 |
544259 |
544273 |
544277 |
544279 |
544367 |
544373 |
544399 |
544403 |
544429 |
544451 |
544471 |
544477 |
544487 |
544501 |
544513 |
544517 |
544543 |
544549 |
544601 |
544613 |
544627 |
544631 |
544651 |
544667 |
544699 |
544717 |
544721 |
544723 |
544727 |
544757 |
544759 |
544771 |
544781 |
544793 |
544807 |
544813 |
544837 |
544861 |
544877 |
544879 |
544883 |
544889 |
544897 |
544903 |
544919 |
544927 |
544937 |
544961 |
544963 |
544979 |
545023 |
545029 |
545033 |
545057 |
545063 |
545087 |
545089 |
545093 |
545117 |
545131 |
545141 |
545143 |
545161 |
545189 |
545203 |
545213 |
545231 |
545239 |
545257 |
545267 |
545291 |
545329 |
545371 |
545387 |
545429 |
545437 |
545443 |
545449 |
545473 |
545477 |
545483 |
545497 |
545521 |
545527 |
545533 |
545543 |
545549 |
545551 |
545579 |
545599 |
545609 |
545617 |
545621 |
545641 |
545647 |
545651 |
545663 |
545711 |
545723 |
545731 |
545747 |
545749 |
545759 |
545773 |
545789 |
545791 |
545827 |
545843 |
545863 |
545873 |
545893 |
545899 |
545911 |
545917 |
545929 |
545933 |
545939 |
545947 |
545959 |
546001 |
546017 |
546019 |
546031 |
546047 |
546053 |
546067 |
546071 |
546097 |
546101 |
546103 |
546109 |
546137 |
546149 |
546151 |
546173 |
546179 |
546197 |
546211 |
546233 |
546239 |
546241 |
546253 |
546263 |
546283 |
546289 |
546317 |
546323 |
546341 |
546349 |
546353 |
546361 |
546367 |
546373 |
546391 |
546461 |
546467 |
546479 |
546509 |
546523 |
546547 |
546569 |
546583 |
546587 |
546599 |
546613 |
546617 |
546619 |
546631 |
546643 |
546661 |
546671 |
546677 |
546683 |
546691 |
546709 |
546719 |
546731 |
546739 |
546781 |
546841 |
546859 |
546863 |
546869 |
546881 |
546893 |
546919 |
546937 |
546943 |
546947 |
546961 |
546967 |
546977 |
547007 |
547021 |
547037 |
547061 |
547087 |
547093 |
547097 |
547103 |
547121 |
547133 |
547139 |
547171 |
547223 |
547229 |
547237 |
547241 |
547249 |
547271 |
547273 |
547291 |
547301 |
547321 |
547357 |
547361 |
547363 |
547369 |
547373 |
547387 |
547397 |
547399 |
547411 |
547441 |
547453 |
547471 |
547483 |
547487 |
547493 |
547499 |
547501 |
547513 |
547529 |
547537 |
547559 |
547567 |
547577 |
547583 |
547601 |
547609 |
547619 |
547627 |
547639 |
547643 |
547661 |
547663 |
547681 |
547709 |
547727 |
547741 |
547747 |
547753 |
547763 |
547769 |
547787 |
547817 |
547819 |
547823 |
547831 |
547849 |
547853 |
547871 |
547889 |
547901 |
547909 |
547951 |
547957 |
547999 |
548003 |
548039 |
548059 |
548069 |
548083 |
548089 |
548099 |
548117 |
548123 |
548143 |
548153 |
548189 |
548201 |
548213 |
548221 |
548227 |
548239 |
548243 |
548263 |
548291 |
548309 |
548323 |
548347 |
548351 |
548363 |
548371 |
548393 |
548399 |
548407 |
548417 |
548423 |
548441 |
548453 |
548459 |
548461 |
548489 |
548501 |
548503 |
548519 |
548521 |
548533 |
548543 |
548557 |
548567 |
548579 |
548591 |
548623 |
548629 |
548657 |
548671 |
548677 |
548687 |
548693 |
548707 |
548719 |
548749 |
548753 |
548761 |
548771 |
548783 |
548791 |
548827 |
548831 |
548833 |
548837 |
548843 |
548851 |
548861 |
548869 |
548893 |
548897 |
548903 |
548909 |
548927 |
548953 |
548957 |
548963 |
549001 |
549011 |
549013 |
549019 |
549023 |
549037 |
549071 |
549089 |
549091 |
549097 |
549121 |
549139 |
549149 |
549161 |
549163 |
549167 |
549169 |
549193 |
549203 |
549221 |
549229 |
549247 |
549257 |
549259 |
549281 |
549313 |
549319 |
549323 |
549331 |
549379 |
549391 |
549403 |
549421 |
549431 |
549443 |
549449 |
549481 |
549503 |
549509 |
549511 |
549517 |
549533 |
549547 |
549551 |
549553 |
549569 |
549587 |
549589 |
549607 |
549623 |
549641 |
549643 |
549649 |
549667 |
549683 |
549691 |
549701 |
549707 |
549713 |
549719 |
549733 |
549737 |
549739 |
549749 |
549751 |
549767 |
549817 |
549833 |
549839 |
549863 |
549877 |
549883 |
549911 |
549937 |
549943 |
549949 |
549977 |
549979 |
550007 |
550009 |
550027 |
550049 |
550061 |
550063 |
550073 |
550111 |
550117 |
550127 |
550129 |
550139 |
550163 |
550169 |
550177 |
550181 |
550189 |
550211 |
550213 |
550241 |
550267 |
550279 |
550283 |
550289 |
550309 |
550337 |
550351 |
550369 |
550379 |
550427 |
550439 |
550441 |
550447 |
550457 |
550469 |
550471 |
550489 |
550513 |
550519 |
550531 |
550541 |
550553 |
550577 |
550607 |
550609 |
550621 |
550631 |
550637 |
550651 |
550657 |
550661 |
550663 |
550679 |
550691 |
550703 |
550717 |
550721 |
550733 |
550757 |
550763 |
550789 |
550801 |
550811 |
550813 |
550831 |
550841 |
550843 |
550859 |
550861 |
550903 |
550909 |
550937 |
550939 |
550951 |
550961 |
550969 |
550973 |
550993 |
550997 |
551003 |
551017 |
551027 |
551039 |
551059 |
551063 |
551069 |
551093 |
551099 |
551107 |
551113 |
551129 |
551143 |
551179 |
551197 |
551207 |
551219 |
551231 |
551233 |
551269 |
551281 |
551297 |
551311 |
551321 |
551339 |
551347 |
551363 |
551381 |
551387 |
551407 |
551423 |
551443 |
551461 |
551483 |
551489 |
551503 |
551519 |
551539 |
551543 |
551549 |
551557 |
551569 |
551581 |
551587 |
551597 |
551651 |
551653 |
551659 |
551671 |
551689 |
551693 |
551713 |
551717 |
551723 |
551729 |
551731 |
551743 |
551753 |
551767 |
551773 |
551801 |
551809 |
551813 |
551843 |
551849 |
551861 |
551909 |
551911 |
551917 |
551927 |
551933 |
551951 |
551959 |
551963 |
551981 |
552001 |
552011 |
552029 |
552031 |
552047 |
552053 |
552059 |
552089 |
552091 |
552103 |
552107 |
552113 |
552127 |
552137 |
552179 |
552193 |
552217 |
552239 |
552241 |
552259 |
552263 |
552271 |
552283 |
552301 |
552317 |
552341 |
552353 |
552379 |
552397 |
552401 |
552403 |
552469 |
552473 |
552481 |
552491 |
552493 |
552511 |
552523 |
552527 |
552553 |
552581 |
552583 |
552589 |
552611 |
552649 |
552659 |
552677 |
552703 |
552707 |
552709 |
552731 |
552749 |
552751 |
552757 |
552787 |
552791 |
552793 |
552809 |
552821 |
552833 |
552841 |
552847 |
552859 |
552883 |
552887 |
552899 |
552913 |
552917 |
552971 |
552983 |
552991 |
553013 |
553037 |
553043 |
553051 |
553057 |
553067 |
553073 |
553093 |
553097 |
553099 |
553103 |
553123 |
553139 |
553141 |
553153 |
553171 |
553181 |
553193 |
553207 |
553211 |
553229 |
553249 |
553253 |
553277 |
553279 |
553309 |
553351 |
553363 |
553369 |
553411 |
553417 |
553433 |
553439 |
553447 |
553457 |
553463 |
553471 |
553481 |
553507 |
553513 |
553517 |
553529 |
553543 |
553549 |
553561 |
553573 |
553583 |
553589 |
553591 |
553601 |
553607 |
553627 |
553643 |
553649 |
553667 |
553681 |
553687 |
553699 |
553703 |
553727 |
553733 |
553747 |
553757 |
553759 |
553769 |
553789 |
553811 |
553837 |
553849 |
553867 |
553873 |
553897 |
553901 |
553919 |
553921 |
553933 |
553961 |
553963 |
553981 |
553991 |
554003 |
554011 |
554017 |
554051 |
554077 |
554087 |
554089 |
554117 |
554123 |
554129 |
554137 |
554167 |
554171 |
554179 |
554189 |
554207 |
554209 |
554233 |
554237 |
554263 |
554269 |
554293 |
554299 |
554303 |
554317 |
554347 |
554377 |
554383 |
554417 |
554419 |
554431 |
554447 |
554453 |
554467 |
554503 |
554527 |
554531 |
554569 |
554573 |
554597 |
554611 |
554627 |
554633 |
554639 |
554641 |
554663 |
554669 |
554677 |
554699 |
554707 |
554711 |
554731 |
554747 |
554753 |
554759 |
554767 |
554779 |
554789 |
554791 |
554797 |
554803 |
554821 |
554833 |
554837 |
554839 |
554843 |
554849 |
554887 |
554891 |
554893 |
554899 |
554923 |
554927 |
554951 |
554959 |
554969 |
554977 |
555029 |
555041 |
555043 |
555053 |
555073 |
555077 |
555083 |
555091 |
555097 |
555109 |
555119 |
555143 |
555167 |
555209 |
555221 |
555251 |
555253 |
555257 |
555277 |
555287 |
555293 |
555301 |
555307 |
555337 |
555349 |
555361 |
555383 |
555391 |
555419 |
555421 |
555439 |
555461 |
555487 |
555491 |
555521 |
555523 |
555557 |
555589 |
555593 |
555637 |
555661 |
555671 |
555677 |
555683 |
555691 |
555697 |
555707 |
555739 |
555743 |
555761 |
555767 |
555823 |
555827 |
555829 |
555853 |
555857 |
555871 |
555931 |
555941 |
555953 |
555967 |
556007 |
556021 |
556027 |
556037 |
556043 |
556051 |
556067 |
556069 |
556093 |
556103 |
556123 |
556159 |
556177 |
556181 |
556211 |
556219 |
556229 |
556243 |
556253 |
556261 |
556267 |
556271 |
556273 |
556279 |
556289 |
556313 |
556321 |
556327 |
556331 |
556343 |
556351 |
556373 |
556399 |
556403 |
556441 |
556459 |
556477 |
556483 |
556487 |
556513 |
556519 |
556537 |
556559 |
556573 |
556579 |
556583 |
556601 |
556607 |
556609 |
556613 |
556627 |
556639 |
556651 |
556679 |
556687 |
556691 |
556693 |
556697 |
556709 |
556723 |
556727 |
556741 |
556753 |
556763 |
556769 |
556781 |
556789 |
556793 |
556799 |
556811 |
556817 |
556819 |
556823 |
556841 |
556849 |
556859 |
556861 |
556867 |
556883 |
556891 |
556931 |
556939 |
556943 |
556957 |
556967 |
556981 |
556987 |
556999 |
557017 |
557021 |
557027 |
557033 |
557041 |
557057 |
557059 |
557069 |
557087 |
557093 |
557153 |
557159 |
557197 |
557201 |
557261 |
557269 |
557273 |
557281 |
557303 |
557309 |
557321 |
557329 |
557339 |
557369 |
557371 |
557377 |
557423 |
557443 |
557449 |
557461 |
557483 |
557489 |
557519 |
557521 |
557533 |
557537 |
557551 |
557567 |
557573 |
557591 |
557611 |
557633 |
557639 |
557663 |
557671 |
557693 |
557717 |
557729 |
557731 |
557741 |
557743 |
557747 |
557759 |
557761 |
557779 |
557789 |
557801 |
557803 |
557831 |
557857 |
557861 |
557863 |
557891 |
557899 |
557903 |
557927 |
557981 |
557987 |
558007 |
558017 |
558029 |
558053 |
558067 |
558083 |
558091 |
558109 |
558113 |
558121 |
558139 |
558149 |
558167 |
558179 |
558197 |
558203 |
558209 |
558223 |
558241 |
558251 |
558253 |
558287 |
558289 |
558307 |
558319 |
558343 |
558401 |
558413 |
558421 |
558427 |
558431 |
558457 |
558469 |
558473 |
558479 |
558491 |
558497 |
558499 |
558521 |
558529 |
558533 |
558539 |
558541 |
558563 |
558583 |
558587 |
558599 |
558611 |
558629 |
558643 |
558661 |
558683 |
558703 |
558721 |
558731 |
558757 |
558769 |
558781 |
558787 |
558791 |
558793 |
558827 |
558829 |
558863 |
558869 |
558881 |
558893 |
558913 |
558931 |
558937 |
558947 |
558973 |
558979 |
558997 |
559001 |
559049 |
559051 |
559067 |
559081 |
559093 |
559099 |
559123 |
559133 |
559157 |
559177 |
559183 |
559201 |
559211 |
559213 |
559217 |
559219 |
559231 |
559243 |
559259 |
559277 |
559297 |
559313 |
559319 |
559343 |
559357 |
559367 |
559369 |
559397 |
559421 |
559451 |
559459 |
559469 |
559483 |
559511 |
559513 |
559523 |
559529 |
559541 |
559547 |
559549 |
559561 |
559571 |
559577 |
559583 |
559591 |
559597 |
559631 |
559633 |
559639 |
559649 |
559667 |
559673 |
559679 |
559687 |
559703 |
559709 |
559739 |
559747 |
559777 |
559781 |
559799 |
559807 |
559813 |
559831 |
559841 |
559849 |
559859 |
559877 |
559883 |
559901 |
559907 |
559913 |
559939 |
559967 |
559973 |
559991 |
560017 |
560023 |
560029 |
560039 |
560047 |
560081 |
560083 |
560089 |
560093 |
560107 |
560113 |
560117 |
560123 |
560137 |
560149 |
560159 |
560171 |
560173 |
560179 |
560191 |
560207 |
560213 |
560221 |
560227 |
560233 |
560237 |
560239 |
560243 |
560249 |
560281 |
560293 |
560297 |
560299 |
560311 |
560317 |
560341 |
560353 |
560393 |
560411 |
560437 |
560447 |
560459 |
560471 |
560477 |
560479 |
560489 |
560491 |
560501 |
560503 |
560531 |
560543 |
560551 |
560561 |
560597 |
560617 |
560621 |
560639 |
560641 |
560653 |
560669 |
560683 |
560689 |
560701 |
560719 |
560737 |
560753 |
560761 |
560767 |
560771 |
560783 |
560797 |
560803 |
560827 |
560837 |
560863 |
560869 |
560873 |
560887 |
560891 |
560893 |
560897 |
560929 |
560939 |
560941 |
560969 |
560977 |
561019 |
561047 |
561053 |
561059 |
561061 |
561079 |
561083 |
561091 |
561097 |
561101 |
561103 |
561109 |
561161 |
561173 |
561181 |
561191 |
561199 |
561229 |
561251 |
561277 |
561307 |
561313 |
561343 |
561347 |
561359 |
561367 |
561373 |
561377 |
561389 |
561409 |
561419 |
561439 |
561461 |
561521 |
561529 |
561551 |
561553 |
561559 |
561599 |
561607 |
561667 |
561703 |
561713 |
561733 |
561761 |
561767 |
561787 |
561797 |
561809 |
561829 |
561839 |
561907 |
561917 |
561923 |
561931 |
561943 |
561947 |
561961 |
561973 |
561983 |
561997 |
562007 |
562019 |
562021 |
562043 |
562091 |
562103 |
562129 |
562147 |
562169 |
562181 |
562193 |
562201 |
562231 |
562259 |
562271 |
562273 |
562283 |
562291 |
562297 |
562301 |
562307 |
562313 |
562333 |
562337 |
562349 |
562351 |
562357 |
562361 |
562399 |
562403 |
562409 |
562417 |
562421 |
562427 |
562439 |
562459 |
562477 |
562493 |
562501 |
562517 |
562519 |
562537 |
562577 |
562579 |
562589 |
562591 |
562607 |
562613 |
562621 |
562631 |
562633 |
562651 |
562663 |
562669 |
562673 |
562691 |
562693 |
562699 |
562703 |
562711 |
562721 |
562739 |
562753 |
562759 |
562763 |
562781 |
562789 |
562813 |
562831 |
562841 |
562871 |
562897 |
562901 |
562909 |
562931 |
562943 |
562949 |
562963 |
562967 |
562973 |
562979 |
562987 |
562997 |
563009 |
563011 |
563021 |
563039 |
563041 |
563047 |
563051 |
563077 |
563081 |
563099 |
563113 |
563117 |
563119 |
563131 |
563149 |
563153 |
563183 |
563197 |
563219 |
563249 |
563263 |
563287 |
563327 |
563351 |
563357 |
563359 |
563377 |
563401 |
563411 |
563413 |
563417 |
563419 |
563447 |
563449 |
563467 |
563489 |
563501 |
563503 |
563543 |
563551 |
563561 |
563587 |
563593 |
563599 |
563623 |
563657 |
563663 |
563723 |
563743 |
563747 |
563777 |
563809 |
563813 |
563821 |
563831 |
563837 |
563851 |
563869 |
563881 |
563887 |
563897 |
563929 |
563933 |
563947 |
563971 |
563987 |
563999 |
564013 |
564017 |
564041 |
564049 |
564059 |
564061 |
564089 |
564097 |
564103 |
564127 |
564133 |
564149 |
564163 |
564173 |
564191 |
564197 |
564227 |
564229 |
564233 |
564251 |
564257 |
564269 |
564271 |
564299 |
564301 |
564307 |
564313 |
564323 |
564353 |
564359 |
564367 |
564371 |
564373 |
564391 |
564401 |
564407 |
564409 |
564419 |
564437 |
564449 |
564457 |
564463 |
564467 |
564491 |
564497 |
564523 |
564533 |
564593 |
564607 |
564617 |
564643 |
564653 |
564667 |
564671 |
564679 |
564701 |
564703 |
564709 |
564713 |
564761 |
564779 |
564793 |
564797 |
564827 |
564871 |
564881 |
564899 |
564917 |
564919 |
564923 |
564937 |
564959 |
564973 |
564979 |
564983 |
564989 |
564997 |
565013 |
565039 |
565049 |
565057 |
565069 |
565109 |
565111 |
565127 |
565163 |
565171 |
565177 |
565183 |
565189 |
565207 |
565237 |
565241 |
565247 |
565259 |
565261 |
565273 |
565283 |
565289 |
565303 |
565319 |
565333 |
565337 |
565343 |
565361 |
565379 |
565381 |
565387 |
565391 |
565393 |
565427 |
565429 |
565441 |
565451 |
565463 |
565469 |
565483 |
565489 |
565507 |
565511 |
565517 |
565519 |
565549 |
565553 |
565559 |
565567 |
565571 |
565583 |
565589 |
565597 |
565603 |
565613 |
565637 |
565651 |
565661 |
565667 |
565723 |
565727 |
565769 |
565771 |
565787 |
565793 |
565813 |
565849 |
565867 |
565889 |
565891 |
565907 |
565909 |
565919 |
565921 |
565937 |
565973 |
565979 |
565997 |
566011 |
566023 |
566047 |
566057 |
566077 |
566089 |
566101 |
566107 |
566131 |
566149 |
566161 |
566173 |
566179 |
566183 |
566201 |
566213 |
566227 |
566231 |
566233 |
566273 |
566311 |
566323 |
566347 |
566387 |
566393 |
566413 |
566417 |
566429 |
566431 |
566437 |
566441 |
566443 |
566453 |
566521 |
566537 |
566539 |
566543 |
566549 |
566551 |
566557 |
566563 |
566567 |
566617 |
566633 |
566639 |
566653 |
566659 |
566677 |
566681 |
566693 |
566701 |
566707 |
566717 |
566719 |
566723 |
566737 |
566759 |
566767 |
566791 |
566821 |
566833 |
566851 |
566857 |
566879 |
566911 |
566939 |
566947 |
566963 |
566971 |
566977 |
566987 |
566999 |
567011 |
567013 |
567031 |
567053 |
567059 |
567067 |
567097 |
567101 |
567107 |
567121 |
567143 |
567179 |
567181 |
567187 |
567209 |
567257 |
567263 |
567277 |
567319 |
567323 |
567367 |
567377 |
567383 |
567389 |
567401 |
567407 |
567439 |
567449 |
567451 |
567467 |
567487 |
567493 |
567499 |
567527 |
567529 |
567533 |
567569 |
567601 |
567607 |
567631 |
567649 |
567653 |
567659 |
567661 |
567667 |
567673 |
567689 |
567719 |
567737 |
567751 |
567761 |
567767 |
567779 |
567793 |
567811 |
567829 |
567841 |
567857 |
567863 |
567871 |
567877 |
567881 |
567883 |
567899 |
567937 |
567943 |
567947 |
567949 |
567961 |
567979 |
567991 |
567997 |
568019 |
568027 |
568033 |
568049 |
568069 |
568091 |
568097 |
568109 |
568133 |
568151 |
568153 |
568163 |
568171 |
568177 |
568187 |
568189 |
568193 |
568201 |
568207 |
568231 |
568237 |
568241 |
568273 |
568279 |
568289 |
568303 |
568349 |
568363 |
568367 |
568387 |
568391 |
568433 |
568439 |
568441 |
568453 |
568471 |
568481 |
568493 |
568523 |
568541 |
568549 |
568577 |
568609 |
568619 |
568627 |
568643 |
568657 |
568669 |
568679 |
568691 |
568699 |
568709 |
568723 |
568751 |
568783 |
568787 |
568807 |
568823 |
568831 |
568853 |
568877 |
568891 |
568903 |
568907 |
568913 |
568921 |
568963 |
568979 |
568987 |
568991 |
568999 |
569003 |
569011 |
569021 |
569047 |
569053 |
569057 |
569071 |
569077 |
569081 |
569083 |
569111 |
569117 |
569137 |
569141 |
569159 |
569161 |
569189 |
569197 |
569201 |
569209 |
569213 |
569237 |
569243 |
569249 |
569251 |
569263 |
569267 |
569269 |
569321 |
569323 |
569369 |
569417 |
569419 |
569423 |
569431 |
569447 |
569461 |
569479 |
569497 |
569507 |
569533 |
569573 |
569579 |
569581 |
569599 |
569603 |
569609 |
569617 |
569623 |
569659 |
569663 |
569671 |
569683 |
569711 |
569713 |
569717 |
569729 |
569731 |
569747 |
569759 |
569771 |
569773 |
569797 |
569809 |
569813 |
569819 |
569831 |
569839 |
569843 |
569851 |
569861 |
569869 |
569887 |
569893 |
569897 |
569903 |
569927 |
569939 |
569957 |
569983 |
570001 |
570013 |
570029 |
570041 |
570043 |
570047 |
570049 |
570071 |
570077 |
570079 |
570083 |
570091 |
570107 |
570109 |
570113 |
570131 |
570139 |
570161 |
570173 |
570181 |
570191 |
570217 |
570221 |
570233 |
570253 |
570329 |
570359 |
570373 |
570379 |
570389 |
570391 |
570403 |
570407 |
570413 |
570419 |
570421 |
570461 |
570463 |
570467 |
570487 |
570491 |
570497 |
570499 |
570509 |
570511 |
570527 |
570529 |
570539 |
570547 |
570553 |
570569 |
570587 |
570601 |
570613 |
570637 |
570643 |
570649 |
570659 |
570667 |
570671 |
570677 |
570683 |
570697 |
570719 |
570733 |
570737 |
570743 |
570781 |
570821 |
570827 |
570839 |
570841 |
570851 |
570853 |
570859 |
570881 |
570887 |
570901 |
570919 |
570937 |
570949 |
570959 |
570961 |
570967 |
570991 |
571001 |
571019 |
571031 |
571037 |
571049 |
571069 |
571093 |
571099 |
571111 |
571133 |
571147 |
571157 |
571163 |
571199 |
571201 |
571211 |
571223 |
571229 |
571231 |
571261 |
571267 |
571279 |
571303 |
571321 |
571331 |
571339 |
571369 |
571381 |
571397 |
571399 |
571409 |
571433 |
571453 |
571471 |
571477 |
571531 |
571541 |
571579 |
571583 |
571589 |
571601 |
571603 |
571633 |
571657 |
571673 |
571679 |
571699 |
571709 |
571717 |
571721 |
571741 |
571751 |
571759 |
571777 |
571783 |
571789 |
571799 |
571801 |
571811 |
571841 |
571847 |
571853 |
571861 |
571867 |
571871 |
571873 |
571877 |
571903 |
571933 |
571939 |
571969 |
571973 |
572023 |
572027 |
572041 |
572051 |
572053 |
572059 |
572063 |
572069 |
572087 |
572093 |
572107 |
572137 |
572161 |
572177 |
572179 |
572183 |
572207 |
572233 |
572239 |
572251 |
572269 |
572281 |
572303 |
572311 |
572321 |
572323 |
572329 |
572333 |
572357 |
572387 |
572399 |
572417 |
572419 |
572423 |
572437 |
572449 |
572461 |
572471 |
572479 |
572491 |
572497 |
572519 |
572521 |
572549 |
572567 |
572573 |
572581 |
572587 |
572597 |
572599 |
572609 |
572629 |
572633 |
572639 |
572651 |
572653 |
572657 |
572659 |
572683 |
572687 |
572699 |
572707 |
572711 |
572749 |
572777 |
572791 |
572801 |
572807 |
572813 |
572821 |
572827 |
572833 |
572843 |
572867 |
572879 |
572881 |
572903 |
572909 |
572927 |
572933 |
572939 |
572941 |
572963 |
572969 |
572993 |
573007 |
573031 |
573047 |
573101 |
573107 |
573109 |
573119 |
573143 |
573161 |
573163 |
573179 |
573197 |
573247 |
573253 |
573263 |
573277 |
573289 |
573299 |
573317 |
573329 |
573341 |
573343 |
573371 |
573379 |
573383 |
573409 |
573437 |
573451 |
573457 |
573473 |
573479 |
573481 |
573487 |
573493 |
573497 |
573509 |
573511 |
573523 |
573527 |
573557 |
573569 |
573571 |
573637 |
573647 |
573673 |
573679 |
573691 |
573719 |
573737 |
573739 |
573757 |
573761 |
573763 |
573787 |
573791 |
573809 |
573817 |
573829 |
573847 |
573851 |
573863 |
573871 |
573883 |
573887 |
573899 |
573901 |
573929 |
573941 |
573953 |
573967 |
573973 |
573977 |
574003 |
574031 |
574033 |
574051 |
574061 |
574081 |
574099 |
574109 |
574127 |
574157 |
574159 |
574163 |
574169 |
574181 |
574183 |
574201 |
574219 |
574261 |
574279 |
574283 |
574289 |
574297 |
574307 |
574309 |
574363 |
574367 |
574373 |
574393 |
574423 |
574429 |
574433 |
574439 |
574477 |
574489 |
574493 |
574501 |
574507 |
574529 |
574543 |
574547 |
574597 |
574619 |
574621 |
574627 |
574631 |
574643 |
574657 |
574667 |
574687 |
574699 |
574703 |
574711 |
574723 |
574727 |
574733 |
574741 |
574789 |
574799 |
574801 |
574813 |
574817 |
574859 |
574907 |
574913 |
574933 |
574939 |
574949 |
574963 |
574967 |
574969 |
575009 |
575027 |
575033 |
575053 |
575063 |
575077 |
575087 |
575119 |
575123 |
575129 |
575131 |
575137 |
575153 |
575173 |
575177 |
575203 |
575213 |
575219 |
575231 |
575243 |
575249 |
575251 |
575257 |
575261 |
575303 |
575317 |
575359 |
575369 |
575371 |
575401 |
575417 |
575429 |
575431 |
575441 |
575473 |
575479 |
575489 |
575503 |
575513 |
575551 |
575557 |
575573 |
575579 |
575581 |
575591 |
575593 |
575611 |
575623 |
575647 |
575651 |
575669 |
575677 |
575689 |
575693 |
575699 |
575711 |
575717 |
575723 |
575747 |
575753 |
575777 |
575791 |
575821 |
575837 |
575849 |
575857 |
575863 |
575867 |
575893 |
575903 |
575921 |
575923 |
575941 |
575957 |
575959 |
575963 |
575987 |
576001 |
576013 |
576019 |
576029 |
576031 |
576041 |
576049 |
576089 |
576101 |
576119 |
576131 |
576151 |
576161 |
576167 |
576179 |
576193 |
576203 |
576211 |
576217 |
576221 |
576223 |
576227 |
576287 |
576293 |
576299 |
576313 |
576319 |
576341 |
576377 |
576379 |
576391 |
576421 |
576427 |
576431 |
576439 |
576461 |
576469 |
576473 |
576493 |
576509 |
576523 |
576529 |
576533 |
576539 |
576551 |
576553 |
576577 |
576581 |
576613 |
576617 |
576637 |
576647 |
576649 |
576659 |
576671 |
576677 |
576683 |
576689 |
576701 |
576703 |
576721 |
576727 |
576731 |
576739 |
576743 |
576749 |
576757 |
576769 |
576787 |
576791 |
576881 |
576883 |
576889 |
576899 |
576943 |
576949 |
576967 |
576977 |
577007 |
577009 |
577033 |
577043 |
577063 |
577067 |
577069 |
577081 |
577097 |
577111 |
577123 |
577147 |
577151 |
577153 |
577169 |
577177 |
577193 |
577219 |
577249 |
577259 |
577271 |
577279 |
577307 |
577327 |
577331 |
577333 |
577349 |
577351 |
577363 |
577387 |
577397 |
577399 |
577427 |
577453 |
577457 |
577463 |
577471 |
577483 |
577513 |
577517 |
577523 |
577529 |
577531 |
577537 |
577547 |
577559 |
577573 |
577589 |
577601 |
577613 |
577627 |
577637 |
577639 |
577667 |
577721 |
577739 |
577751 |
577757 |
577781 |
577799 |
577807 |
577817 |
577831 |
577849 |
577867 |
577873 |
577879 |
577897 |
577901 |
577909 |
577919 |
577931 |
577937 |
577939 |
577957 |
577979 |
577981 |
578021 |
578029 |
578041 |
578047 |
578063 |
578077 |
578093 |
578117 |
578131 |
578167 |
578183 |
578191 |
578203 |
578209 |
578213 |
578251 |
578267 |
578297 |
578299 |
578309 |
578311 |
578317 |
578327 |
578353 |
578363 |
578371 |
578399 |
578401 |
578407 |
578419 |
578441 |
578453 |
578467 |
578477 |
578483 |
578489 |
578497 |
578503 |
578509 |
578533 |
578537 |
578563 |
578573 |
578581 |
578587 |
578597 |
578603 |
578609 |
578621 |
578647 |
578659 |
578687 |
578689 |
578693 |
578701 |
578719 |
578729 |
578741 |
578777 |
578779 |
578789 |
578803 |
578819 |
578821 |
578827 |
578839 |
578843 |
578857 |
578861 |
578881 |
578917 |
578923 |
578957 |
578959 |
578971 |
578999 |
579011 |
579017 |
579023 |
579053 |
579079 |
579083 |
579107 |
579113 |
579119 |
579133 |
579179 |
579197 |
579199 |
579239 |
579251 |
579259 |
579263 |
579277 |
579281 |
579283 |
579287 |
579311 |
579331 |
579353 |
579379 |
579407 |
579409 |
579427 |
579433 |
579451 |
579473 |
579497 |
579499 |
579503 |
579517 |
579521 |
579529 |
579533 |
579539 |
579541 |
579563 |
579569 |
579571 |
579583 |
579587 |
579611 |
579613 |
579629 |
579637 |
579641 |
579643 |
579653 |
579673 |
579701 |
579707 |
579713 |
579721 |
579737 |
579757 |
579763 |
579773 |
579779 |
579809 |
579829 |
579851 |
579869 |
579877 |
579881 |
579883 |
579893 |
579907 |
579947 |
579949 |
579961 |
579967 |
579973 |
579983 |
580001 |
580031 |
580033 |
580079 |
580081 |
580093 |
580133 |
580163 |
580169 |
580183 |
580187 |
580201 |
580213 |
580219 |
580231 |
580259 |
580291 |
580301 |
580303 |
580331 |
580339 |
580343 |
580357 |
580361 |
580373 |
580379 |
580381 |
580409 |
580417 |
580471 |
580477 |
580487 |
580513 |
580529 |
580549 |
580553 |
580561 |
580577 |
580607 |
580627 |
580631 |
580633 |
580639 |
580663 |
580673 |
580687 |
580691 |
580693 |
580711 |
580717 |
580733 |
580747 |
580757 |
580759 |
580763 |
580787 |
580793 |
580807 |
580813 |
580837 |
580843 |
580859 |
580871 |
580889 |
580891 |
580901 |
580913 |
580919 |
580927 |
580939 |
580969 |
580981 |
580997 |
581029 |
581041 |
581047 |
581069 |
581071 |
581089 |
581099 |
581101 |
581137 |
581143 |
581149 |
581171 |
581173 |
581177 |
581183 |
581197 |
581201 |
581227 |
581237 |
581239 |
581261 |
581263 |
581293 |
581303 |
581311 |
581323 |
581333 |
581341 |
581351 |
581353 |
581369 |
581377 |
581393 |
581407 |
581411 |
581429 |
581443 |
581447 |
581459 |
581473 |
581491 |
581521 |
581527 |
581549 |
581551 |
581557 |
581573 |
581597 |
581599 |
581617 |
581639 |
581657 |
581663 |
581683 |
581687 |
581699 |
581701 |
581729 |
581731 |
581743 |
581753 |
581767 |
581773 |
581797 |
581809 |
581821 |
581843 |
581857 |
581863 |
581869 |
581873 |
581891 |
581909 |
581921 |
581941 |
581947 |
581953 |
581981 |
581983 |
582011 |
582013 |
582017 |
582031 |
582037 |
582067 |
582083 |
582119 |
582137 |
582139 |
582157 |
582161 |
582167 |
582173 |
582181 |
582203 |
582209 |
582221 |
582223 |
582227 |
582247 |
582251 |
582299 |
582317 |
582319 |
582371 |
582391 |
582409 |
582419 |
582427 |
582433 |
582451 |
582457 |
582469 |
582499 |
582509 |
582511 |
582541 |
582551 |
582563 |
582587 |
582601 |
582623 |
582643 |
582649 |
582677 |
582689 |
582691 |
582719 |
582721 |
582727 |
582731 |
582737 |
582761 |
582763 |
582767 |
582773 |
582781 |
582793 |
582809 |
582821 |
582851 |
582853 |
582859 |
582887 |
582899 |
582931 |
582937 |
582949 |
582961 |
582971 |
582973 |
582983 |
583007 |
583013 |
583019 |
583021 |
583031 |
583069 |
583087 |
583127 |
583139 |
583147 |
583153 |
583169 |
583171 |
583181 |
583189 |
583207 |
583213 |
583229 |
583237 |
583249 |
583267 |
583273 |
583279 |
583291 |
583301 |
583337 |
583339 |
583351 |
583367 |
583391 |
583397 |
583403 |
583409 |
583417 |
583421 |
583447 |
583459 |
583469 |
583481 |
583493 |
583501 |
583511 |
583519 |
583523 |
583537 |
583543 |
583577 |
583603 |
583613 |
583619 |
583621 |
583631 |
583651 |
583657 |
583669 |
583673 |
583697 |
583727 |
583733 |
583753 |
583769 |
583777 |
583783 |
583789 |
583801 |
583841 |
583853 |
583859 |
583861 |
583873 |
583879 |
583903 |
583909 |
583937 |
583969 |
583981 |
583991 |
583997 |
584011 |
584027 |
584033 |
584053 |
584057 |
584063 |
584081 |
584099 |
584141 |
584153 |
584167 |
584183 |
584203 |
584249 |
584261 |
584279 |
584281 |
584303 |
584347 |
584357 |
584359 |
584377 |
584387 |
584393 |
584399 |
584411 |
584417 |
584429 |
584447 |
584471 |
584473 |
584509 |
584531 |
584557 |
584561 |
584587 |
584593 |
584599 |
584603 |
584609 |
584621 |
584627 |
584659 |
584663 |
584677 |
584693 |
584699 |
584707 |
584713 |
584719 |
584723 |
584737 |
584767 |
584777 |
584789 |
584791 |
584809 |
584849 |
584863 |
584869 |
584873 |
584879 |
584897 |
584911 |
584917 |
584923 |
584951 |
584963 |
584971 |
584981 |
584993 |
584999 |
585019 |
585023 |
585031 |
585037 |
585041 |
585043 |
585049 |
585061 |
585071 |
585073 |
585077 |
585107 |
585113 |
585119 |
585131 |
585149 |
585163 |
585199 |
585217 |
585251 |
585269 |
585271 |
585283 |
585289 |
585313 |
585317 |
585337 |
585341 |
585367 |
585383 |
585391 |
585413 |
585437 |
585443 |
585461 |
585467 |
585493 |
585503 |
585517 |
585547 |
585551 |
585569 |
585577 |
585581 |
585587 |
585593 |
585601 |
585619 |
585643 |
585653 |
585671 |
585677 |
585691 |
585721 |
585727 |
585733 |
585737 |
585743 |
585749 |
585757 |
585779 |
585791 |
585799 |
585839 |
585841 |
585847 |
585853 |
585857 |
585863 |
585877 |
585881 |
585883 |
585889 |
585899 |
585911 |
585913 |
585917 |
585919 |
585953 |
585989 |
585997 |
586009 |
586037 |
586051 |
586057 |
586067 |
586073 |
586087 |
586111 |
586121 |
586123 |
586129 |
586139 |
586147 |
586153 |
586189 |
586213 |
586237 |
586273 |
586277 |
586291 |
586301 |
586309 |
586319 |
586349 |
586361 |
586363 |
586367 |
586387 |
586403 |
586429 |
586433 |
586457 |
586459 |
586463 |
586471 |
586493 |
586499 |
586501 |
586541 |
586543 |
586567 |
586571 |
586577 |
586589 |
586601 |
586603 |
586609 |
586627 |
586631 |
586633 |
586667 |
586679 |
586693 |
586711 |
586723 |
586741 |
586769 |
586787 |
586793 |
586801 |
586811 |
586813 |
586819 |
586837 |
586841 |
586849 |
586871 |
586897 |
586903 |
586909 |
586919 |
586921 |
586933 |
586939 |
586951 |
586961 |
586973 |
586979 |
586981 |
587017 |
587021 |
587033 |
587051 |
587053 |
587057 |
587063 |
587087 |
587101 |
587107 |
587117 |
587123 |
587131 |
587137 |
587143 |
587149 |
587173 |
587179 |
587189 |
587201 |
587219 |
587263 |
587267 |
587269 |
587281 |
587287 |
587297 |
587303 |
587341 |
587371 |
587381 |
587387 |
587413 |
587417 |
587429 |
587437 |
587441 |
587459 |
587467 |
587473 |
587497 |
587513 |
587519 |
587527 |
587533 |
587539 |
587549 |
587551 |
587563 |
587579 |
587599 |
587603 |
587617 |
587621 |
587623 |
587633 |
587659 |
587669 |
587677 |
587687 |
587693 |
587711 |
587731 |
587737 |
587747 |
587749 |
587753 |
587771 |
587773 |
587789 |
587813 |
587827 |
587833 |
587849 |
587863 |
587887 |
587891 |
587897 |
587927 |
587933 |
587947 |
587959 |
587969 |
587971 |
587987 |
587989 |
587999 |
588011 |
588019 |
588037 |
588043 |
588061 |
588073 |
588079 |
588083 |
588097 |
588113 |
588121 |
588131 |
588151 |
588167 |
588169 |
588173 |
588191 |
588199 |
588229 |
588239 |
588241 |
588257 |
588277 |
588293 |
588311 |
588347 |
588359 |
588361 |
588383 |
588389 |
588397 |
588403 |
588433 |
588437 |
588463 |
588481 |
588493 |
588503 |
588509 |
588517 |
588521 |
588529 |
588569 |
588571 |
588619 |
588631 |
588641 |
588647 |
588649 |
588667 |
588673 |
588683 |
588703 |
588733 |
588737 |
588743 |
588767 |
588773 |
588779 |
588811 |
588827 |
588839 |
588871 |
588877 |
588881 |
588893 |
588911 |
588937 |
588941 |
588947 |
588949 |
588953 |
588977 |
589021 |
589027 |
589049 |
589063 |
589109 |
589111 |
589123 |
589139 |
589159 |
589163 |
589181 |
589187 |
589189 |
589207 |
589213 |
589219 |
589231 |
589241 |
589243 |
589273 |
589289 |
589291 |
589297 |
589327 |
589331 |
589349 |
589357 |
589387 |
589409 |
589439 |
589451 |
589453 |
589471 |
589481 |
589493 |
589507 |
589529 |
589531 |
589579 |
589583 |
589591 |
589601 |
589607 |
589609 |
589639 |
589643 |
589681 |
589711 |
589717 |
589751 |
589753 |
589759 |
589763 |
589783 |
589793 |
589807 |
589811 |
589829 |
589847 |
589859 |
589861 |
589873 |
589877 |
589903 |
589921 |
589933 |
589993 |
589997 |
590021 |
590027 |
590033 |
590041 |
590071 |
590077 |
590099 |
590119 |
590123 |
590129 |
590131 |
590137 |
590141 |
590153 |
590171 |
590201 |
590207 |
590243 |
590251 |
590263 |
590267 |
590269 |
590279 |
590309 |
590321 |
590323 |
590327 |
590357 |
590363 |
590377 |
590383 |
590389 |
590399 |
590407 |
590431 |
590437 |
590489 |
590537 |
590543 |
590567 |
590573 |
590593 |
590599 |
590609 |
590627 |
590641 |
590647 |
590657 |
590659 |
590669 |
590713 |
590717 |
590719 |
590741 |
590753 |
590771 |
590797 |
590809 |
590813 |
590819 |
590833 |
590839 |
590867 |
590899 |
590921 |
590923 |
590929 |
590959 |
590963 |
590983 |
590987 |
591023 |
591053 |
591061 |
591067 |
591079 |
591089 |
591091 |
591113 |
591127 |
591131 |
591137 |
591161 |
591163 |
591181 |
591193 |
591233 |
591259 |
591271 |
591287 |
591289 |
591301 |
591317 |
591319 |
591341 |
591377 |
591391 |
591403 |
591407 |
591421 |
591431 |
591443 |
591457 |
591469 |
591499 |
591509 |
591523 |
591553 |
591559 |
591581 |
591599 |
591601 |
591611 |
591623 |
591649 |
591653 |
591659 |
591673 |
591691 |
591709 |
591739 |
591743 |
591749 |
591751 |
591757 |
591779 |
591791 |
591827 |
591841 |
591847 |
591863 |
591881 |
591887 |
591893 |
591901 |
591937 |
591959 |
591973 |
592019 |
592027 |
592049 |
592057 |
592061 |
592073 |
592087 |
592099 |
592121 |
592129 |
592133 |
592139 |
592157 |
592199 |
592217 |
592219 |
592223 |
592237 |
592261 |
592289 |
592303 |
592307 |
592309 |
592321 |
592337 |
592343 |
592351 |
592357 |
592367 |
592369 |
592387 |
592391 |
592393 |
592429 |
592451 |
592453 |
592463 |
592469 |
592483 |
592489 |
592507 |
592517 |
592531 |
592547 |
592561 |
592577 |
592589 |
592597 |
592601 |
592609 |
592621 |
592639 |
592643 |
592649 |
592661 |
592663 |
592681 |
592693 |
592723 |
592727 |
592741 |
592747 |
592759 |
592763 |
592793 |
592843 |
592849 |
592853 |
592861 |
592873 |
592877 |
592897 |
592903 |
592919 |
592931 |
592939 |
592967 |
592973 |
592987 |
592993 |
593003 |
593029 |
593041 |
593051 |
593059 |
593071 |
593081 |
593083 |
593111 |
593119 |
593141 |
593143 |
593149 |
593171 |
593179 |
593183 |
593207 |
593209 |
593213 |
593227 |
593231 |
593233 |
593251 |
593261 |
593273 |
593291 |
593293 |
593297 |
593321 |
593323 |
593353 |
593381 |
593387 |
593399 |
593401 |
593407 |
593429 |
593447 |
593449 |
593473 |
593479 |
593491 |
593497 |
593501 |
593507 |
593513 |
593519 |
593531 |
593539 |
593573 |
593587 |
593597 |
593603 |
593627 |
593629 |
593633 |
593641 |
593647 |
593651 |
593689 |
593707 |
593711 |
593767 |
593777 |
593783 |
593839 |
593851 |
593863 |
593869 |
593899 |
593903 |
593933 |
593951 |
593969 |
593977 |
593987 |
593993 |
594023 |
594037 |
594047 |
594091 |
594103 |
594107 |
594119 |
594137 |
594151 |
594157 |
594161 |
594163 |
594179 |
594193 |
594203 |
594211 |
594227 |
594241 |
594271 |
594281 |
594283 |
594287 |
594299 |
594311 |
594313 |
594329 |
594359 |
594367 |
594379 |
594397 |
594401 |
594403 |
594421 |
594427 |
594449 |
594457 |
594467 |
594469 |
594499 |
594511 |
594521 |
594523 |
594533 |
594551 |
594563 |
594569 |
594571 |
594577 |
594617 |
594637 |
594641 |
594653 |
594667 |
594679 |
594697 |
594709 |
594721 |
594739 |
594749 |
594751 |
594773 |
594793 |
594821 |
594823 |
594827 |
594829 |
594857 |
594889 |
594899 |
594911 |
594917 |
594929 |
594931 |
594953 |
594959 |
594961 |
594977 |
594989 |
595003 |
595037 |
595039 |
595043 |
595057 |
595069 |
595073 |
595081 |
595087 |
595093 |
595097 |
595117 |
595123 |
595129 |
595139 |
595141 |
595157 |
595159 |
595181 |
595183 |
595201 |
595207 |
595229 |
595247 |
595253 |
595261 |
595267 |
595271 |
595277 |
595291 |
595303 |
595313 |
595319 |
595333 |
595339 |
595351 |
595363 |
595373 |
595379 |
595381 |
595411 |
595451 |
595453 |
595481 |
595513 |
595519 |
595523 |
595547 |
595549 |
595571 |
595577 |
595579 |
595613 |
595627 |
595687 |
595703 |
595709 |
595711 |
595717 |
595733 |
595741 |
595801 |
595807 |
595817 |
595843 |
595873 |
595877 |
595927 |
595939 |
595943 |
595949 |
595951 |
595957 |
595961 |
595963 |
595967 |
595981 |
596009 |
596021 |
596027 |
596047 |
596053 |
596059 |
596069 |
596081 |
596083 |
596093 |
596117 |
596119 |
596143 |
596147 |
596159 |
596179 |
596209 |
596227 |
596231 |
596243 |
596251 |
596257 |
596261 |
596273 |
596279 |
596291 |
596293 |
596317 |
596341 |
596363 |
596369 |
596399 |
596419 |
596423 |
596461 |
596489 |
596503 |
596507 |
596537 |
596569 |
596573 |
596579 |
596587 |
596593 |
596599 |
596611 |
596623 |
596633 |
596653 |
596663 |
596669 |
596671 |
596693 |
596707 |
596737 |
596741 |
596749 |
596767 |
596779 |
596789 |
596803 |
596821 |
596831 |
596839 |
596851 |
596857 |
596861 |
596863 |
596879 |
596899 |
596917 |
596927 |
596929 |
596933 |
596941 |
596963 |
596977 |
596983 |
596987 |
597031 |
597049 |
597053 |
597059 |
597073 |
597127 |
597131 |
597133 |
597137 |
597169 |
597209 |
597221 |
597239 |
597253 |
597263 |
597269 |
597271 |
597301 |
597307 |
597349 |
597353 |
597361 |
597367 |
597383 |
597391 |
597403 |
597407 |
597409 |
597419 |
597433 |
597437 |
597451 |
597473 |
597497 |
597521 |
597523 |
597539 |
597551 |
597559 |
597577 |
597581 |
597589 |
597593 |
597599 |
597613 |
597637 |
597643 |
597659 |
597671 |
597673 |
597677 |
597679 |
597689 |
597697 |
597757 |
597761 |
597767 |
597769 |
597781 |
597803 |
597823 |
597827 |
597833 |
597853 |
597859 |
597869 |
597889 |
597899 |
597901 |
597923 |
597929 |
597967 |
597997 |
598007 |
598049 |
598051 |
598057 |
598079 |
598093 |
598099 |
598123 |
598127 |
598141 |
598151 |
598159 |
598163 |
598187 |
598189 |
598193 |
598219 |
598229 |
598261 |
598303 |
598307 |
598333 |
598363 |
598369 |
598379 |
598387 |
598399 |
598421 |
598427 |
598439 |
598447 |
598457 |
598463 |
598487 |
598489 |
598501 |
598537 |
598541 |
598571 |
598613 |
598643 |
598649 |
598651 |
598657 |
598669 |
598681 |
598687 |
598691 |
598711 |
598721 |
598727 |
598729 |
598777 |
598783 |
598789 |
598799 |
598817 |
598841 |
598853 |
598867 |
598877 |
598883 |
598891 |
598903 |
598931 |
598933 |
598963 |
598967 |
598973 |
598981 |
598987 |
598999 |
599003 |
599009 |
599021 |
599023 |
599069 |
599087 |
599117 |
599143 |
599147 |
599149 |
599153 |
599191 |
599213 |
599231 |
599243 |
599251 |
599273 |
599281 |
599303 |
599309 |
599321 |
599341 |
599353 |
599359 |
599371 |
599383 |
599387 |
599399 |
599407 |
599413 |
599419 |
599429 |
599477 |
599479 |
599491 |
599513 |
599519 |
599537 |
599551 |
599561 |
599591 |
599597 |
599603 |
599611 |
599623 |
599629 |
599657 |
599663 |
599681 |
599693 |
599699 |
599701 |
599713 |
599719 |
599741 |
599759 |
599779 |
599783 |
599803 |
599831 |
599843 |
599857 |
599869 |
599891 |
599899 |
599927 |
599933 |
599939 |
599941 |
599959 |
599983 |
599993 |
599999 |
600011 |
600043 |
600053 |
600071 |
600073 |
600091 |
600101 |
600109 |
600167 |
600169 |
600203 |
600217 |
600221 |
600233 |
600239 |
600241 |
600247 |
600269 |
600283 |
600289 |
600293 |
600307 |
600311 |
600317 |
600319 |
600337 |
600359 |
600361 |
600367 |
600371 |
600401 |
600403 |
600407 |
600421 |
600433 |
600449 |
600451 |
600463 |
600469 |
600487 |
600517 |
600529 |
600557 |
600569 |
600577 |
600601 |
600623 |
600631 |
600641 |
600659 |
600673 |
600689 |
600697 |
600701 |
600703 |
600727 |
600751 |
600791 |
600823 |
600827 |
600833 |
600841 |
600857 |
600877 |
600881 |
600883 |
600889 |
600893 |
600931 |
600947 |
600949 |
600959 |
600961 |
600973 |
600979 |
600983 |
601021 |
601031 |
601037 |
601039 |
601043 |
601061 |
601067 |
601079 |
601093 |
601127 |
601147 |
601187 |
601189 |
601193 |
601201 |
601207 |
601219 |
601231 |
601241 |
601247 |
601259 |
601267 |
601283 |
601291 |
601297 |
601309 |
601313 |
601319 |
601333 |
601339 |
601357 |
601379 |
601397 |
601411 |
601423 |
601439 |
601451 |
601457 |
601487 |
601507 |
601541 |
601543 |
601589 |
601591 |
601607 |
601631 |
601651 |
601669 |
601687 |
601697 |
601717 |
601747 |
601751 |
601759 |
601763 |
601771 |
601801 |
601807 |
601813 |
601819 |
601823 |
601831 |
601849 |
601873 |
601883 |
601889 |
601897 |
601903 |
601943 |
601949 |
601961 |
601969 |
601981 |
602029 |
602033 |
602039 |
602047 |
602057 |
602081 |
602083 |
602087 |
602093 |
602099 |
602111 |
602137 |
602141 |
602143 |
602153 |
602179 |
602197 |
602201 |
602221 |
602227 |
602233 |
602257 |
602267 |
602269 |
602279 |
602297 |
602309 |
602311 |
602317 |
602321 |
602333 |
602341 |
602351 |
602377 |
602383 |
602401 |
602411 |
602431 |
602453 |
602461 |
602477 |
602479 |
602489 |
602501 |
602513 |
602521 |
602543 |
602551 |
602593 |
602597 |
602603 |
602621 |
602627 |
602639 |
602647 |
602677 |
602687 |
602689 |
602711 |
602713 |
602717 |
602729 |
602743 |
602753 |
602759 |
602773 |
602779 |
602801 |
602821 |
602831 |
602839 |
602867 |
602873 |
602887 |
602891 |
602909 |
602929 |
602947 |
602951 |
602971 |
602977 |
602983 |
602999 |
603011 |
603013 |
603023 |
603047 |
603077 |
603091 |
603101 |
603103 |
603131 |
603133 |
603149 |
603173 |
603191 |
603203 |
603209 |
603217 |
603227 |
603257 |
603283 |
603311 |
603319 |
603349 |
603389 |
603391 |
603401 |
603431 |
603443 |
603457 |
603467 |
603487 |
603503 |
603521 |
603523 |
603529 |
603541 |
603553 |
603557 |
603563 |
603569 |
603607 |
603613 |
603623 |
603641 |
603667 |
603679 |
603689 |
603719 |
603731 |
603739 |
603749 |
603761 |
603769 |
603781 |
603791 |
603793 |
603817 |
603821 |
603833 |
603847 |
603851 |
603853 |
603859 |
603881 |
603893 |
603899 |
603901 |
603907 |
603913 |
603917 |
603919 |
603923 |
603931 |
603937 |
603947 |
603949 |
603989 |
604001 |
604007 |
604013 |
604031 |
604057 |
604063 |
604069 |
604073 |
604171 |
604189 |
604223 |
604237 |
604243 |
604249 |
604259 |
604277 |
604291 |
604309 |
604313 |
604319 |
604339 |
604343 |
604349 |
604361 |
604369 |
604379 |
604397 |
604411 |
604427 |
604433 |
604441 |
604477 |
604481 |
604517 |
604529 |
604547 |
604559 |
604579 |
604589 |
604603 |
604609 |
604613 |
604619 |
604649 |
604651 |
604661 |
604697 |
604699 |
604711 |
604727 |
604729 |
604733 |
604753 |
604759 |
604781 |
604787 |
604801 |
604811 |
604819 |
604823 |
604829 |
604837 |
604859 |
604861 |
604867 |
604883 |
604907 |
604931 |
604939 |
604949 |
604957 |
604973 |
604997 |
605009 |
605021 |
605023 |
605039 |
605051 |
605069 |
605071 |
605113 |
605117 |
605123 |
605147 |
605167 |
605173 |
605177 |
605191 |
605221 |
605233 |
605237 |
605239 |
605249 |
605257 |
605261 |
605309 |
605323 |
605329 |
605333 |
605347 |
605369 |
605393 |
605401 |
605411 |
605413 |
605443 |
605471 |
605477 |
605497 |
605503 |
605509 |
605531 |
605533 |
605543 |
605551 |
605573 |
605593 |
605597 |
605599 |
605603 |
605609 |
605617 |
605629 |
605639 |
605641 |
605687 |
605707 |
605719 |
605779 |
605789 |
605809 |
605837 |
605849 |
605861 |
605867 |
605873 |
605879 |
605887 |
605893 |
605909 |
605921 |
605933 |
605947 |
605953 |
605977 |
605987 |
605993 |
606017 |
606029 |
606031 |
606037 |
606041 |
606049 |
606059 |
606077 |
606079 |
606083 |
606091 |
606113 |
606121 |
606131 |
606173 |
606181 |
606223 |
606241 |
606247 |
606251 |
606299 |
606301 |
606311 |
606313 |
606323 |
606341 |
606379 |
606383 |
606413 |
606433 |
606443 |
606449 |
606493 |
606497 |
606503 |
606521 |
606527 |
606539 |
606559 |
606569 |
606581 |
606587 |
606589 |
606607 |
606643 |
606649 |
606653 |
606659 |
606673 |
606721 |
606731 |
606733 |
606737 |
606743 |
606757 |
606791 |
606811 |
606829 |
606833 |
606839 |
606847 |
606857 |
606863 |
606899 |
606913 |
606919 |
606943 |
606959 |
606961 |
606967 |
606971 |
606997 |
607001 |
607003 |
607007 |
607037 |
607043 |
607049 |
607063 |
607067 |
607081 |
607091 |
607093 |
607097 |
607109 |
607127 |
607129 |
607147 |
607151 |
607153 |
607157 |
607163 |
607181 |
607199 |
607213 |
607219 |
607249 |
607253 |
607261 |
607301 |
607303 |
607307 |
607309 |
607319 |
607331 |
607337 |
607339 |
607349 |
607357 |
607363 |
607417 |
607421 |
607423 |
607471 |
607493 |
607517 |
607531 |
607549 |
607573 |
607583 |
607619 |
607627 |
607667 |
607669 |
607681 |
607697 |
607703 |
607721 |
607723 |
607727 |
607741 |
607769 |
607813 |
607819 |
607823 |
607837 |
607843 |
607861 |
607883 |
607889 |
607909 |
607921 |
607931 |
607933 |
607939 |
607951 |
607961 |
607967 |
607991 |
607993 |
608011 |
608029 |
608033 |
608087 |
608089 |
608099 |
608117 |
608123 |
608129 |
608131 |
608147 |
608161 |
608177 |
608191 |
608207 |
608213 |
608269 |
608273 |
608297 |
608299 |
608303 |
608339 |
608347 |
608357 |
608359 |
608369 |
608371 |
608383 |
608389 |
608393 |
608401 |
608411 |
608423 |
608429 |
608431 |
608459 |
608471 |
608483 |
608497 |
608519 |
608521 |
608527 |
608581 |
608591 |
608593 |
608609 |
608611 |
608633 |
608653 |
608659 |
608669 |
608677 |
608693 |
608701 |
608737 |
608743 |
608749 |
608759 |
608767 |
608789 |
608819 |
608831 |
608843 |
608851 |
608857 |
608863 |
608873 |
608887 |
608897 |
608899 |
608903 |
608941 |
608947 |
608953 |
608977 |
608987 |
608989 |
608999 |
609043 |
609047 |
609067 |
609071 |
609079 |
609101 |
609107 |
609113 |
609143 |
609149 |
609163 |
609173 |
609179 |
609199 |
609209 |
609221 |
609227 |
609233 |
609241 |
609253 |
609269 |
609277 |
609283 |
609289 |
609307 |
609313 |
609337 |
609359 |
609361 |
609373 |
609379 |
609391 |
609397 |
609403 |
609407 |
609421 |
609437 |
609443 |
609461 |
609487 |
609503 |
609509 |
609517 |
609527 |
609533 |
609541 |
609571 |
609589 |
609593 |
609599 |
609601 |
609607 |
609613 |
609617 |
609619 |
609641 |
609673 |
609683 |
609701 |
609709 |
609743 |
609751 |
609757 |
609779 |
609781 |
609803 |
609809 |
609821 |
609859 |
609877 |
609887 |
609907 |
609911 |
609913 |
609923 |
609929 |
609979 |
609989 |
609991 |
609997 |
610031 |
610063 |
610081 |
610123 |
610157 |
610163 |
610187 |
610193 |
610199 |
610217 |
610219 |
610229 |
610243 |
610271 |
610279 |
610289 |
610301 |
610327 |
610331 |
610339 |
610391 |
610409 |
610417 |
610429 |
610439 |
610447 |
610457 |
610469 |
610501 |
610523 |
610541 |
610543 |
610553 |
610559 |
610567 |
610579 |
610583 |
610619 |
610633 |
610639 |
610651 |
610661 |
610667 |
610681 |
610699 |
610703 |
610721 |
610733 |
610739 |
610741 |
610763 |
610781 |
610783 |
610787 |
610801 |
610817 |
610823 |
610829 |
610837 |
610843 |
610847 |
610849 |
610867 |
610877 |
610879 |
610891 |
610913 |
610919 |
610921 |
610933 |
610957 |
610969 |
610993 |
611011 |
611027 |
611033 |
611057 |
611069 |
611071 |
611081 |
611101 |
611111 |
611113 |
611131 |
611137 |
611147 |
611189 |
611207 |
611213 |
611257 |
611263 |
611279 |
611293 |
611297 |
611323 |
611333 |
611389 |
611393 |
611411 |
611419 |
611441 |
611449 |
611453 |
611459 |
611467 |
611483 |
611497 |
611531 |
611543 |
611549 |
611551 |
611557 |
611561 |
611587 |
611603 |
611621 |
611641 |
611657 |
611671 |
611693 |
611707 |
611729 |
611753 |
611791 |
611801 |
611803 |
611827 |
611833 |
611837 |
611839 |
611873 |
611879 |
611887 |
611903 |
611921 |
611927 |
611939 |
611951 |
611953 |
/relevation/ext/cryptopy-1.2.5.orig/fmath/__init__.py |
---|
0,0 → 1,5 |
""" fmath module |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/fmath/primes_to_5k.py |
---|
0,0 → 1,90 |
""" fmath.primes_to_5k |
All of the prime numbers below 5000 |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
primes_to_5k = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, |
47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, |
103, 107, 109, 113, 127, 131, 137, 139, 149, 151, |
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, |
211, 223, 227, 229, 233, 239, 241, 251, 257, 263, |
269, 271, 277, 281, 283, 293, 307, 311, 313, 317, |
331, 337, 347, 349, 353, 359, 367, 373, 379, 383, |
389, 397, 401, 409, 419, 421, 431, 433, 439, 443, |
449, 457, 461, 463, 467, 479, 487, 491, 499, 503, |
509, 521, 523, 541, 547, 557, 563, 569, 571, 577, |
587, 593, 599, 601, 607, 613, 617, 619, 631, 641, |
643, 647, 653, 659, 661, 673, 677, 683, 691, 701, |
709, 719, 727, 733, 739, 743, 751, 757, 761, 769, |
773, 787, 797, 809, 811, 821, 823, 827, 829, 839, |
853, 857, 859, 863, 877, 881, 883, 887, 907, 911, |
919, 929, 937, 941, 947, 953, 967, 971, 977, 983, |
991, 997, 1009, 1013, 1019, 1021, 1031, 1033, |
1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, |
1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, |
1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, |
1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, |
1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, |
1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, |
1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, |
1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, |
1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, |
1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, |
1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, |
1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, |
1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, |
1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, |
1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, |
1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, |
1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, |
2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, |
2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, |
2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, |
2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, |
2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, |
2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, |
2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, |
2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, |
2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, |
2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, |
2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, |
2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, |
2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, |
2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, |
2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, |
3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, |
3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, |
3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, |
3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, |
3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, |
3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, |
3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, |
3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, |
3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, |
3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, |
3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, |
3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, |
3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, |
3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, |
3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, |
4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, |
4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, |
4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, |
4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, |
4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, |
4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, |
4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, |
4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, |
4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, |
4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, |
4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, |
4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, |
4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, |
4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, |
4957, 4967, 4969, 4973, 4987, 4993, 4999 ] |
/relevation/ext/cryptopy-1.2.5.orig/fmath |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/LICENSE.txt |
---|
0,0 → 1,114 |
The CryptoPy Artistic License Version 1.0 |
Copyright © (c) 2002 by Paul A. Lambert |
Derived from the "Artistic License" at "OpenSource.org". |
PREAMBLE |
The intent of this document is to state the conditions under which a |
Package may be copied, such that the Copyright Holder maintains some |
semblance of artistic control over the development of the package, |
while giving the users of the package the right to use and distribute |
the Package in a more-or-less customary fashion, plus the right to |
make reasonable modifications. |
DEFINITIONS |
o "Package" refers to the script, suite, file, or collection of scripts, |
suites, and/or files distributed by the Copyright Holder, and to |
derivatives of that Package created through textual modification. |
o "Standard Version" refers to such a Package if it has not been |
modified, or has been modified in accordance with the wishes of the |
Copyright Holder. |
o "Copyright Holder" is whoever is named in the copyright statement or |
statements for the package. |
o "You" is you, if you're thinking about copying or distributing this |
Package. |
o "Reasonable copying fee" is whatever you can justify on the basis of |
media cost, duplication charges, time of people involved, and so on. |
(You will not be required to justify it to the Copyright Holder, but |
only to the computing community at large as a market that must bear the |
fee.) |
o "Freely Available" means that no fee is charged for the item itself, |
though there may be fees involved in handling the item. It also means |
that recipients of the item may redistribute it under the same |
conditions they received it. |
TERMS |
1. You may make and give away verbatim copies of the source form of the |
Standard Version of this Package without restriction, provided that you |
duplicate all of the original copyright notices and associated disclaimers. |
2. You may apply bug fixes, portability fixes, and other modifications |
derived from the Public Domain or from the Copyright Holder. A Package |
modified in such a way shall still be considered the Standard Version. |
3. You may otherwise modify your copy of this Package in any way, provided |
that you insert a prominent notice in each changed script, suite, or file |
stating how and when you changed that script, suite, or file, and provided |
that you do at least ONE of the following: |
a) Use the modified Package only within your corporation or |
organization, or retain the modified Package solely for personal use. |
b) Place your modifications in the Public Domain or otherwise make them |
Freely Available, such as by posting said modifications to Usenet or an |
equivalent medium, or placing the modifications on a major archive site |
such as ftp.uu.net, or by allowing the Copyright Holder to include your |
modifications in the Standard Version of the Package. |
c) Rename any non-standard executables so the names do not conflict |
with standard executables, which must also be provided, and provide a |
separate manual page (or equivalent) for each non-standard executable |
that clearly documents how it differs from the Standard Version. |
d) Make other distribution arrangements with the Copyright Holder. |
4. You may distribute the programs of this Package in object code or |
executable form, provided that you do at least ONE of the following: |
a) Distribute a Standard Version of the executables and library files, |
together with instructions (in the manual page or equivalent) on where |
to get the Standard Version. |
b) Accompany the distribution with the machine-readable source of the |
Package with your modifications. |
c) Accompany any non-standard executables with their corresponding |
Standard Version executables, give the non-standard executables |
non-standard names, and clearly document the differences in manual |
pages (or equivalent), together with instructions on where to get the |
Standard Version. |
d) Make other distribution arrangements with the Copyright Holder. |
5. You may charge a reasonable copying fee for any distribution of this |
Package. You may charge any fee you choose for support of this Package. |
You may not charge a fee for this Package itself. However, you may |
distribute this Package in aggregate with other (possibly commercial) |
programs as part of a larger (possibly commercial) software distribution |
provided that you do not advertise this Package as a product of your own. |
6. The scripts and library files supplied as input to or produced as |
output from the programs of this Package do not automatically fall under |
the copyright of this Package, but belong to whomever generated them, and |
may be sold commercially, and may be aggregated with this Package. |
7. Scripts, suites, or programs supplied by you that depend on or |
otherwise make use of this Package shall not be considered part of this |
Package. |
8. The name of the Copyright Holder may not be used to endorse or promote |
products derived from this software without specific prior written |
permission. |
9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED |
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF |
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
/relevation/ext/cryptopy-1.2.5.orig/crypto/common.py |
---|
0,0 → 1,21 |
""" crypto.common |
Common utility routines for crypto modules |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
def xorS(a,b): |
""" XOR two strings """ |
assert len(a)==len(b) |
x = [] |
for i in range(len(a)): |
x.append( chr(ord(a[i])^ord(b[i]))) |
return ''.join(x) |
def xor(a,b): |
""" XOR two strings """ |
x = [] |
for i in range(min(len(a),len(b))): |
x.append( chr(ord(a[i])^ord(b[i]))) |
return ''.join(x) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/app/__init__.py |
---|
0,0 → 1,8 |
""" crypto.app |
Sample applications of CryptoPy |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/app/filecrypt.py |
---|
0,0 → 1,87 |
#!/usr/bin/env python |
""" cipher.app.filecrypt |
File encryption script. |
Current uses an 'extended' AES algorithm. |
2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import sys, getpass, getopt, os |
from crypto.cipher.trolldoll import Trolldoll |
from crypto.errors import DecryptNotBlockAlignedError |
from binascii_plus import * |
def main(): |
""" Main is the command line interface to filecrypt """ |
path, progName = os.path.split(sys.argv[0]) |
usage = """Usage: %s [-d | -e][a][?] [-k <passPhrase>] [-i <infile>] [-o <outfile>]\n""" % progName |
try: |
# use get opt to parse and validate command line |
optlist, args = getopt.getopt( sys.argv[1:], 'edk:i:o:' ) |
except getopt.GetoptError, err : |
sys.exit( "Error: %s\n%s" % (err,usage) ) |
print optlist,'\n------\n',args |
# make a dictionary and check for one occurance of each option |
optdict = {} |
for option in optlist: |
if not optdict.has_key(option[0]): |
optdict[option[0]] = option[1] |
else: |
sys.exit( "Error: duplicate option '%s'\n%s" % (option[0],usage) ) |
if optdict.has_key('-e') and optdict.has_key('-d'): |
sys.exit( "Error: Can not do both encrypt and decrypt, pick either '-e' or '-d'\n%s" % usage ) |
if not(optdict.has_key('-e') or optdict.has_key('-d')): |
sys.exit( "Error: Must select encrypt or decrypt, pick either '-e' or '-d'\n%s" % usage ) |
# determine the passphrase from the command line or by keyboard input |
if optdict.has_key('-k'): |
passPhrase = optdict['-k'] |
else: |
passPhrase = getpass.getpass('Key: ') |
# should really test for a good passphrase ................... |
# get input from file or stdin |
if optdict.has_key('-i'): |
infile = open(optdict['-i'],'rb') |
input = infile.read() |
else: |
input = sys.stdin.read() |
print "input (%d bytes): %s" % (len(input),b2a_pt(input)) |
alg=Trolldoll(ivSize=160) |
alg.setPassphrase( passPhrase ) |
# Encrypt or decrypt depending on the option selected |
if optdict.has_key('-e'): |
output = alg.encrypt(input) |
elif optdict.has_key('-d'): |
try: |
output = alg.decrypt(input) |
except DecryptNotBlockAlignedError, errMessage : |
sys.exit("""Error: %s\n Note this can be caused by inappropriate modification \n of binary files (Win issue with CR/LFs). Try -a mode. """ % errMessage ) |
# should check for integrity failure |
else: |
sys.exit( "Error: Must select encrypt or decrypt, pick either '-e' or '-d'\n%s" % usage ) |
print "output (%d bytes): %s" % (len(output),b2a_pt(output)) |
# put output to file or stdout |
if optdict.has_key('-o'): |
outfile = open(optdict['-o'],'wb') |
outfile.write( output ) |
else: |
sys.stdout.write( output ) |
sys.exit() # normal termination |
if __name__ == "__main__": |
""" Called when run from the command line """ |
main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/app |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto/entropy/__init__.py |
---|
0,0 → 1,8 |
""" crypto.entropy |
Entropy package of CryptoPy |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/entropy/pagingEntropy.py |
---|
0,0 → 1,75 |
""" crypto.entropy.pagingEntropy |
Uses variations in disk access time to generator entropy. A long string is |
created that is bigger than available memory. Virtual memory access' create |
random variations in retrieval time. |
Just an experiment, not recommended for use at this time. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import struct |
class PagingEntropyCollector: |
""" collect entropy from memory paging """ |
def __init__(self, memSize=500000000L): #? how should this be picked? |
""" Initialize paging entropy collector, |
memSize must be larger than allocated memory """ |
self.size = memSize |
self.memBlock = self.size*chr(0) # long string of length self.size |
self.index = 0 |
import random |
self.rand = random.Random(1555551) |
def randomBytes(self, numberOfBytes, secondsPerBit=.05): |
byteString = '' |
for b in range(numberOfBytes): |
aByte = 0 |
for bit in range(8): |
aByte = aByte << 1 |
aByte = aByte ^ self.collectBit(secondsPerBit) |
byteString += chr(aByte) |
return byteString |
def collectBit(self, secondsPerBit=1.0): |
""" Collect an entropy bit by jumping around a long string and |
collecting the variation in time and number of samples per |
time interval """ |
t1 = time() |
count = 0 |
while (time()-t1) < secondsPerBit: # seconds per sample |
# use random to sample various virtual memory locations |
sample = self.memBlock[int(self.rand.random()*self.size)] |
count += 1 |
randomBit = intToParity(count)^floatToParity(time()-t1) |
return randomBit |
def intToParity(integer): |
s = struct.pack('i',integer) |
parity = 0 |
for character in s: |
byte = ord(character) |
parity = parity^(0x01&(byte^(byte>>1)^(byte>>2)^(byte>>3)^(byte>>4)^(byte>>5)^(byte>>6)^(byte>>7))) |
return parity |
def floatToParity(float): |
s = struct.pack('d',float) |
parity = 0 |
for character in s: |
byte = ord(character) |
parity = parity^(0x01&(byte^(byte>>1)^(byte>>2)^(byte>>3)^(byte>>4)^(byte>>5)^(byte>>6)^(byte>>7))) |
return parity |
if __name__ == "__main__": |
from binascii import b2a_hex |
e = PagingEntropyCollector() |
for i in range(20): |
e.rand.seed(1) # make each sample set the same to allow examination of statistics |
print b2a_hex( e.randomBytes(16) ) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/entropy/prn_rijndael_test.py |
---|
0,0 → 1,31 |
#! /usr/bin/env python |
""" crypto.entropy.prn_rijndael_test |
Unit test for prn_rijndael |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.entropy.prn_rijndael import PRN_Rijndael |
from binascii import b2a_hex |
""" Not much of a test yet .... """ |
if __name__ == "__main__": |
r = PRN_Rijndael() |
for i in range(20): |
print b2a_hex(r.getSomeBytes()) |
for i in range (20): |
r.getBytes(i) |
for i in range(40): |
c=r.getBytes(i) |
print b2a_hex(r.getBytes(i)) |
r.reseed(c) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/entropy/prn_rijndael.py |
---|
0,0 → 1,62 |
""" crypto.entropy.prn_rijndael |
A Psudeo Random Number Generator based on Rijndael_256k_256b |
The algorithm is based on Section 13.4 of: |
"AES Proposal: Rijndael", Joan Daemen, Vincent Rijmen |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.rijndael import Rijndael |
from crypto.cipher.base import noPadding |
from binascii import b2a_hex |
defaultSeed = "An arbirary 32 byte string!!!!!!" # can be changed by the truely paranoid |
class PRN_Rijndael: |
""" A Psudeo Random Number Generator based on Rijndael_256k_256b |
The algorithm is based on Section 13.4 of: |
"AES Proposal: Rijndael", Joan Daemen, Vincent Rijmen |
""" |
def __init__(self, seed=defaultSeed): |
self.__algorithm = Rijndael(padding=noPadding(),keySize=32, blockSize=32) |
self.reset() |
self.reseed(seed) |
def reset(self): |
self.__algorithm.setKey(self.__algorithm.keySize*chr(0)) # set key to all zeros |
self.__state = self.__algorithm.blockSize*chr(0) # a single block of zeros |
def reseed(self,seed): |
while len(seed) > 0 : |
if len(seed) < self.__algorithm.blockSize: |
block = seed + (self.__algorithm.blockSize-len(seed))*chr(0) |
seed = '' |
else: |
block = seed[:self.__algorithm.blockSize] |
seed = seed[self.__algorithm.blockSize:] |
self.__algorithm.setKey( self.__algorithm.encrypt(block) ) |
def getBytes(self, numBytes): |
""" Return a psuedo random byte string of length numBytes """ |
bytes = '' |
while len(bytes)< numBytes : |
bytes = bytes + self.getSomeBytes() |
return bytes[:numBytes] # truncate to the requested length |
def getSomeBytes(self): |
""" Psuedo random bytes are generated 16 bytes at a time. |
The state is updated by applying Rijndael using the Cipher |
Key. The first 128 bits of the state are output as a pseudorandom number. |
""" |
self.__state = self.__algorithm.encrypt(self.__state) |
return self.__state[:16] |
/relevation/ext/cryptopy-1.2.5.orig/crypto/entropy |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto/icedoll_test.py |
---|
0,0 → 1,51 |
#! /usr/bin/env python |
""" crypto.cipher.icedoll_test |
Tests for icedoll encryption algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.icedoll import Icedoll |
from crypto.cipher.base import noPadding |
from binascii import a2b_hex |
from binascii_plus import b2a_p, a2b_p |
import unittest |
class Icedoll_Basic_Tests(unittest.TestCase): |
""" Test Icedoll algorithm """ |
def testDctEqPt(self): |
""" test of plaintext = decrypt(encrypt(plaintext)) """ |
alg = Icedoll( 16*chr(0), padding=noPadding()) |
pt = 16*4*'a' # block aligned |
ct = alg.encrypt(pt) |
print 'ct = ',b2a_p(ct) |
dct = alg.decrypt(ct) |
print 'dct = ',b2a_p(dct) |
assert(pt == dct), 'pt != dct' |
alg = Icedoll( 16*chr(0)) # autoPad |
pt = 17*4*'a' # non-block aligned |
ct = alg.encrypt(pt) |
print 'ct = ',b2a_p(ct) |
dct = alg.decrypt(ct) |
print 'dct = ',b2a_p(dct) |
assert(pt == dct), 'pt != dct' |
def testEncrcptDecryptMultiSizesPt(self): |
""" Encrypt decrypt multiple sizes """ |
alg = Icedoll( 16*chr(0)) |
for size in range(100): |
pt = size*'a' |
ct = alg.encrypt(pt) |
#print 'ct = ',b2a_p(ct) |
dct = alg.decrypt(ct) |
#print 'dct = ',b2a_p(dct) |
assert(pt == dct), 'pt != dct' |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/errors.py |
---|
0,0 → 1,26 |
""" errors |
Error classes for cryptographic modules |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
class CryptoError(Exception): |
""" Base class for crypto exceptions """ |
def __init__(self,errorMessage='Error!'): |
self.message = errorMessage |
def __str__(self): |
return self.message |
class InitCryptoError(CryptoError): |
""" Crypto errors during algorithm initialization """ |
class BadKeySizeError(InitCryptoError): |
""" Bad key size error """ |
class EncryptError(CryptoError): |
""" Error in encryption processing """ |
class DecryptError(CryptoError): |
""" Error in decryption processing """ |
class DecryptNotBlockAlignedError(DecryptError): |
""" Error in decryption processing """ |
class IntegrityCheckError(DecryptError): |
""" Bad integrity detected during decryption (integrity aware algorithms) """ |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/__init__.py |
---|
0,0 → 1,3 |
""" The crypto.hash package. |
Part of the CryptoPy framework. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/sha1Hash_test.py |
---|
0,0 → 1,51 |
#!/usr/bin/env python |
""" sha1Hash_test.py |
Unit tests for sha1.py |
""" |
from crypto.hash.sha1Hash import SHA1 |
import unittest |
import struct |
assert struct.calcsize('!IIIII') == 20, '5 integers should be 20 bytes' |
class SHA1_FIPS180_TestCases(unittest.TestCase): |
""" SHA-1 tests from FIPS180-1 Appendix A, B and C """ |
def testFIPS180_1_Appendix_A(self): |
""" APPENDIX A. A SAMPLE MESSAGE AND ITS MESSAGE DIGEST """ |
hashAlg = SHA1() |
message = 'abc' |
message_digest = 0xA9993E36L, 0x4706816AL, 0xBA3E2571L, 0x7850C26CL, 0x9CD0D89DL |
md_string = _toBString(message_digest) |
assert( hashAlg(message) == md_string ), 'FIPS180 Appendix A test Failed' |
def testFIPS180_1_Appendix_B(self): |
""" APPENDIX B. A SECOND SAMPLE MESSAGE AND ITS MESSAGE DIGEST """ |
hashAlg = SHA1() |
message = 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' |
message_digest = 0x84983E44L, 0x1C3BD26EL, 0xBAAE4AA1L, 0xF95129E5L, 0xE54670F1L |
md_string = _toBString(message_digest) |
assert( hashAlg(message) == md_string ), 'FIPS180 Appendix B test Failed' |
def testFIPS180_1_Appendix_C(self): |
""" APPENDIX C. A THIRD SAMPLE MESSAGE AND ITS MESSAGE DIGEST |
Let the message be the binary-coded form of the ASCII string which consists |
of 1,000,000 repetitions of "a". """ |
hashAlg = SHA1() |
message = 1000000*'a' |
message_digest = 0x34AA973CL, 0xD4C4DAA4L, 0xF61EEB2BL, 0xDBAD2731L, 0x6534016FL |
md_string = _toBString(message_digest) |
assert( hashAlg(message) == md_string ), 'FIPS180 Appendix C test Failed' |
def _toBlock(binaryString): |
""" Convert binary string to blocks of 5 words of uint32() """ |
return [uint32(word) for word in struct.unpack('!IIIII', binaryString)] |
def _toBString(block): |
""" Convert block (5 words of 32 bits to binary string """ |
return ''.join([struct.pack('!I',word) for word in block]) |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/sha1Hash.py |
---|
0,0 → 1,37 |
""" crypto.hash.sha1Hash |
Wrapper for python sha module to support crypo module standard interface |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import sha |
from crypto.hash.hash import Hash |
class SHA1(Hash): |
def __init__( self ): |
self.name = 'SHA1' |
self.blocksize = 1 # single octets can be hashed by padding to raw block size |
self.raw_block_size = 64 # SHA1 operates on 512 bit / 64 byte blocks |
self.digest_size = 20 # or 160 bits |
self.reset() |
def reset(self): |
self.pysha1 = sha.new() |
def update(self,data): |
""" Update the sha object with the string arg. Repeated calls are |
equivalent to a single call with the concatenation of all the |
arguments: m.update(a); m.update(b) is equivalent to m.update(a+b). |
""" |
self.pysha1.update(data) |
def digest(self): |
""" Return the digest of the strings passed to the update() |
method so far. This is a 20-byte string which may contain |
non-ASCII characters, including null bytes. |
""" |
return self.pysha1.digest() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/hash.py |
---|
0,0 → 1,36 |
""" crypto.cipher.hash |
Base class for cryptographic hash algorithms |
An alternate interface (no 'new'). |
Copyright © (c) 2002 by Paul A. Lambert. |
""" |
from binascii import b2a_hex |
class Hash: |
def __init__( self ): |
raise 'must overload' |
def reset(self): |
raise 'must overload' |
def __call__(self, data, more=None): |
return self.hash(data,more) |
def hash(self,data,more=None): |
self.update(data) |
digest = self.digest() |
if more==None: |
self.reset() # no more data, reset |
return digest |
def update(self,data): |
""" Update the hash object with the data. Repeated calls are |
equivalent to a single call with the concatenation of all the |
arguments: m.update(a); m.update(b) is equivalent to m.update(a+b). |
""" |
raise 'must overload' |
def digest(self): |
raise 'must overload' |
def final(self,data): |
return self.hash(data) |
def hexdigest(self): |
""" Return the digest of the data in ascii-hex format """ |
return b2a_hex(self.digest()) |
# def hexdigest(self): not supported yet |
# def copy(self): not supported yet ... may change |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/md5Hash_test.py |
---|
0,0 → 1,26 |
#!/usr/bin/env python |
""" md5Hash_test.py |
Unit tests for md5Hash.py (not the default python library!) |
MD5 defined in RFC 1321 |
""" |
from crypto.hash.md5Hash import MD5 |
import unittest |
from binascii import a2b_hex |
class MD5_TestCases(unittest.TestCase): |
""" MD5 tests from ...""" |
def testFIPS180_1_Appendix_A(self): |
""" APPENDIX A. A SAMPLE MESSAGE AND ITS MESSAGE DIGEST """ |
hashAlg = MD5() |
message = 'abc' |
message_digest = '900150983cd24fb0d6963f7d28e17f72' |
md_string = a2b_hex(message_digest) |
assert( hashAlg(message) == md_string ), 'md5 test Failed' |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash/md5Hash.py |
---|
0,0 → 1,31 |
""" md5Hash.py |
Wrapper for python md5 module to support crypo module standard interface |
""" |
import md5 |
from crypto.hash.hash import Hash |
class MD5(Hash): |
def __init__( self ): |
self.name = 'MD5' |
self.blocksize = 1 # single octets can be hashed by padding to raw block size |
self.raw_block_size = 64 # MD5 operates on 512 bits or 64 byte blocks |
self.digest_size = 16 # or 128 bits |
self.reset() |
def reset(self): |
self.pymd5 = md5.new() |
def update(self,data): |
""" Update the md5 object with the string arg. Repeated calls are |
equivalent to a single call with the concatenation of all the |
arguments: m.update(a); m.update(b) is equivalent to m.update(a+b). |
""" |
self.pymd5.update(data) |
def digest(self): |
""" Return the digest of the strings passed to the update() |
method so far. This is a 20-byte string which may contain |
non-ASCII characters, including null bytes. |
""" |
return self.pymd5.digest() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/hash |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/prf_dot11_test.py |
---|
0,0 → 1,54 |
#!/usr/bin/env python |
""" crypto.keyedHash.prf_dot11_test |
Tests of the IEEE 802.11 PRF functions |
""" |
from crypto.keyedHash.prf_dot11 import PRF |
import unittest |
from binascii_plus import b2a_hex, a2b_hex, b2a_p, a2b_p |
class prf_TestVectors(unittest.TestCase): |
""" PRF from IEEE 802.11 testing known values """ |
def testKnowValues(self): |
""" Test vectors from 11-02-298r0-I-suggested-changes-to-RSN.doc |
Modified to show prefix and correct length. |
""" |
for [key,data,digest,prf_know_value] in prfTestVectors: |
# the 298r test vectors do not include the prefix :-( |
prefix = 'prefix' |
# remove white spaces and convert to binary string |
prf_value = a2b_p(prf_know_value) |
lengthInBits=8*len(prf_value) |
a_prf = PRF(key,prefix,data,lengthInBits) |
print 'key = ', b2a_p(key) |
print 'prefix = ', '"'+prefix+'"' |
print 'data = ', b2a_p(data) |
print 'PRF = ', b2a_p(a_prf) |
print 'PRF_v = ', b2a_p(prf_value) |
print 'len prf= ', len(a_prf)* 8 |
self.assertEqual(a_prf, prf_value) |
""" -------------- (key, data, digest, prf_value) ------------------ """ |
prfTestVectors =((a2b_hex('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b'), |
'Hi There', |
'b617318655057264e28bc0b6fb378c8ef146be00', |
'bcd4c650b30b9684951829e0d75f9d54'), |
('Jefe', |
'what do ya want for nothing?', |
'effcdf6ae5eb2fa2d27416d5f184df9c259a7c79', |
"""51f4de5b33f249adf81aeb713a3c20f4fe631446fabdfa58 |
244759ae58ef9009a99abf4eac2ca5fa87e692c440eb40023e |
7babb206d61de7b92f41529092b8fc"""), |
(20*chr(0xaa), |
50*chr(0xdd), #0xdd repeated 50 times |
'125d7342b9ac11cd91a39af48aa17b4f63f175d3', |
"""e1ac546ec4cb636f9976487be5c86be17a0252ca5d8d8df12c |
fb0473525249ce9dd8d177ead710bc9b590547239107aef7b4ab |
d43d87f0a68f1cbd9e2b6f7607""")) |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/tkip_mic_test.py |
---|
0,0 → 1,83 |
#!/usr/bin/env python |
""" Testing of TKIP_MIC Class |
""" |
from crypto.keyedHash.tkip_mic import TKIP_MIC |
from binascii_plus import * |
from struct import pack, unpack |
import unittest |
class TKIP_MIC_Tests(unittest.TestCase): |
""" Test MIC algorithm using know values """ |
def testAdrianExample1(self): |
""" Test 1 from Adrian 2002-12-12""" |
print "==== Test 1 Adrian ====" |
# raw data |
k0 = 0x00000000L # assume is a 'dword' |
k1 = 0x00000000L |
key = pack('<II', k0, k1 ) # pack two integers into string little-endian |
a1 = a2b_p('161514131211') |
a2 = a2b_p('262524232221') |
a3 = a2b_p('363534333231') # assumed to be TA |
a4 = a2b_p('464544434241') |
tcid = 2 |
payload = a2b_p('10 11 12 13 14 15 16 17 18 19 1a 1b 1c') |
# this looks like a 4 addresses example do: |
sa = a2 # a4 |
da = a1 # a3 |
print "key =", b2a_p(key) |
print "sa =", b2a_p(sa) |
print "da =", b2a_p(da) |
print "tcid =", tcid |
print "payload =", b2a_p(payload) |
v0 = 0x85a3fe4cL |
v1 = 0x20f4105fL |
micResultAdrian = pack('<II', v0, v1) # pack little-endian dwords into 8 octets |
tkipMic = TKIP_MIC(key) |
micResult = tkipMic.hash(sa, da, tcid, payload ) |
print "expected MIC =", b2a_p(micResultAdrian) |
print "MIC Result =", b2a_p(micResult) |
v0Result, v1Result = unpack('<II', micResult) |
self.assertEqual( v0, v0Result ), 'failed vo' |
self.assertEqual( v1, v1Result ), 'failed v1' |
def testParagExample1(self): |
""" Test 2 from Parag 2002-12-16""" |
print "==== Test 2 ====" |
# raw data |
k0 = 0x01234567L |
k1 = 0x89abcdefL |
key = pack('<II', k0, k1 ) # pack two integers into string little-endian |
da = a2b_p('aaaaaaaaaaaa') |
sa = a2b_p('bbbbbbbbbbbb') |
priority = 0x03 |
payload = pack('<IIIIIIIIIII',0xdeaf0005L, 0xdeaf0006L, 0xdeaf0007L, 0xdeaf0008L, 0xdeaf0009L, 0xdeaf000aL, 0xdeaf000bL, 0xdeaf000cL, 0xdeaf000dL, 0xdeaf000eL, 0x00ccdd00L) |
payload = payload[:-1] # trim off last octet |
print "key =", b2a_p(key) |
print "sa =", b2a_p(sa) |
print "da =", b2a_p(da) |
print "priority =", priority |
print "payload =", b2a_p(payload) |
# The know MIC is |
v0 = 0xe597b391L |
v1 = 0xb8c4a7b7L |
micResultParag = pack('<II', v0, v1) # pack little-endian dwords into 8 octets |
tkipMic = TKIP_MIC(key) |
tcid = priority |
micResult = tkipMic.hash(sa, da, tcid, payload ) |
print "expected MIC =", b2a_p(micResultParag) |
print "MIC Result =", b2a_p(micResult) |
v0Result, v1Result = unpack('<II', micResult) |
self.assertEqual( v0, v0Result ), 'failed vo' |
self.assertEqual( v1, v1Result ), 'failed v1' |
if __name__ == '__main__': |
unittest.main() # run all the tests |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/__init__.py |
---|
0,0 → 1,7 |
""" crypto.keyedHash |
The keyedHash package. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/prf_dot11.py |
---|
0,0 → 1,38 |
""" prf_dot11.py |
The PRF function is used in a number of places in 802.11i |
to create psuedo random octet strings. |
The parameter 'prefix' is a string that shall be a unique label for each |
different purpose of the PRF. |
""" |
import hmac, sha # available in any Python 2.x |
def PRF( key, prefix, data, number_of_bits): |
""" Key, prefix and data are arbitrary strings . |
number_of_bits must be a multiple of 8 |
HMAC_SHA1 generates 20 byte blocks. Enough are generated to get the |
requested number of octets and the reslut is truncated to the requested size. |
""" |
number_of_octets, remainder = divmod(number_of_bits,8) |
if remainder != 0: |
raise ValueError, 'requested bits not multiple of 8' |
R = '' |
i = 0 |
while len(R) <= number_of_octets : |
hmac_sha_1= hmac.new( key, prefix + chr(0x00) + data + chr(i), sha ) |
i = i + 1 |
R = R + hmac_sha_1.digest() # concatenate latest hash to result string |
return R[:number_of_octets] # return R truncated to 'number_of_octets' |
def PRF_128(key,A,B): return PRF(key,A,B,128) |
def PRF_192(key,A,B): return PRF(key,A,B,192) |
def PRF_256(key,A,B): return PRF(key,A,B,256) |
def PRF_384(key,A,B): return PRF(key,A,B,384) |
def PRF_512(key,A,B): return PRF(key,A,B,512) |
def PRF_768(key,A,B): return PRF(key,A,B,768) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/tkip_mic.py |
---|
0,0 → 1,40 |
""" crypto.keyedHash.tkip_mic |
A reference implementation of the TKIP Message Integrety Chek (MIC) |
that is defined in IEEE 802.11i |
The MIC is based on Michael, a 64-bit MIC, with a design strength of 20 bits. |
(c) 2002 Paul A. Lambert |
""" |
from crypto.keyedHash.michael import Michael |
class TKIP_MIC(Michael): |
""" The TKIP MIC Calculation for IEEE 802.11 TGi |
This MIC algorithm uses the Michael Message Integrity Check (MIC) |
and incorporates the DA, SA, priority and padding as |
part of the MIC calculation |
""" |
def __init__(self, key=None, version='D3'): |
""" """ |
self.version = version |
Michael.__init__(self,key) |
def hash(self, sa, da, priority, msduData ): |
""" The TKIP MIC appends sa, da and priority to msduData |
and uses the result in the Michael keyed hash |
to create an 8 octet MIC value |
""" |
assert( 0 <= priority <= 15 ), 'Priority must be 4 bit value' |
assert( (len(sa)==6) and (len(da)==6) ), 'Addresses must be 6 octets' |
if self.version == 'D3': |
micData = da + sa + chr(priority) + 3*chr(0) + msduData |
elif self.version == 'D2': |
micData = da + sa + msduData |
else: |
raise 'bad version' |
return Michael.hash(self, micData) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/michael_test.py |
---|
0,0 → 1,57 |
#!/usr/bin/env python |
""" crypto.keyedHash.michael_test |
Tests of the Michael Message Integrity Check Algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.keyedHash.michael import Michael |
from binascii import * |
import unittest |
class Michael_TestVectors(unittest.TestCase): |
""" Test MIC algorithm using know values """ |
def testIEEE_BaseKnowValues(self): |
""" Test using vectors from IEEE P802.11i/D2.0 """ |
def runSingleTest(key,data,micResult): |
print "=============================" |
key = a2b_hex(key) |
knownMICResult = a2b_hex(micResult) |
print "key: ",b2a_hex(key) |
print "data: ",b2a_hex(data) |
print "knownMIC: ", b2a_hex(knownMICResult) |
micAlg = Michael(key) |
calculatedMIC = micAlg.hash(data) |
print "CalcMIC: ", b2a_hex(calculatedMIC) |
self.assertEqual( calculatedMIC, knownMICResult ) |
# alternate calling sequence |
micAlg = Michael() |
micAlg.setKey(key) |
calculatedMIC = micAlg.hash(data) |
self.assertEqual( calculatedMIC, knownMICResult ) |
# yet another way to use algorithm |
calculatedMIC = micAlg(data) |
self.assertEqual( calculatedMIC, knownMICResult ) |
runSingleTest( "0000000000000000", "" , "82925c1ca1d130b8" ) |
runSingleTest( "82925c1ca1d130b8", "M" , "434721ca40639b3f" ) |
runSingleTest( "434721ca40639b3f", "Mi" , "e8f9becae97e5d29" ) |
runSingleTest( "e8f9becae97e5d29", "Mic" , "90038fc6cf13c1db" ) |
runSingleTest( "90038fc6cf13c1db", "Mich" , "d55e100510128986" ) |
runSingleTest( "d55e100510128986", "Michael" , "0a942b124ecaa546" ) |
class Michael_Check_Corners(unittest.TestCase): |
def testShortKey(self): |
""" Check for assertion on short key """ |
pass |
def testLongKey(self): |
""" Check for assertion on too long key """ |
pass |
if __name__ == '__main__': |
unittest.main() # run all the tests |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/michael.py |
---|
0,0 → 1,69 |
""" crypto.keyedHash.michael |
A reference implementation of the Michael Message Integrety Chek (MIC) |
that is defined in IEEE 802.11 Task Group 'i' |
Michael is a 64-bit MIC, with a design strength of 20 bits. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from struct import pack, unpack |
from binascii_plus import * |
class Michael: |
""" The Michael keyed hash as defined in IEEE 802.11i D2.0 """ |
def __init__(self, key = None): |
self.name = 'Michael' |
self.blocksize = 1 # single octets can be hashed by padding to raw block size |
self.raw_block_size = 4 # operates on 32 bits or 4 byte blocks |
self.digest_size = 8 # MIC size of 64 bits or 8 bytes |
self.keySize = 8 # key size is 8 octets |
self.strength = 20 |
if key != None: |
self.setKey(key) |
def __del__(self): |
self.setKey(8*chr(0)) # feable attempt to clear keys on exit |
def setKey(self,key): |
""" setKey(key) ... key is binary string """ |
assert( len(key)== self.keySize), 'Key must be 8 octets' |
self._key = unpack('<II', key) # unpack into 2 32bit integers |
def __call__(self,data,more=None): |
return self.hash(data) |
def hash(self,data): |
""" Michael keyed hash """ |
fullBlocks, extraOctets = divmod(len(data),4) |
paddedData = data + chr(0x5a) + chr(0)*(7-extraOctets) |
l, r = self._key |
for i in range(fullBlocks+2): |
mSub_i = unpack('<I', paddedData[i*4:i*4+4])[0] # ith block as 32 bit integer |
l = l ^ mSub_i |
l, r = b(l,r) |
digest = pack('<II', l, r ) |
return digest |
def update(self,data): |
raise 'No update method supported for Michael keyed hash' |
def digest(self): |
raise 'No digest method supported for Michael keyed hash' |
def final(self,data): |
raise 'No final method supported for Michael keyed hash' |
def b(l,r): |
""" The 'b' block function for the IEEE 802.11i Michael Integrity Check """ |
r ^= (((l<<17) & 0xffffffffL)|((l>>15) & 0x1ffffL)) # r = r ^ (l <<< 17) |
l = (l+r) & 0xffffffffL # l = (l+r) mod 2**32 |
r ^= ((l & 0xff00ff00L)>>8)|((l & 0x00ff00ffL)<<8) # r = r ^ XSWAP(l) |
l = (l+r) & 0xffffffffL # l = (l+r) mod 2**32 |
r ^= (((l<<3) & 0xffffffffL) | ((l>>29)& 0x7)) # r = r ^ (l <<< 3) |
l = (l+r) & 0xffffffffL # l = (l+r) mod 2**32 |
r ^= (((l<<30L) & 0xffffffffL)|((l>>2) & 0x3fffffff)) # r = r ^ (l >>> 2) |
l = (l+r) & 0xffffffffL # l = (l+r) mod 2**32 |
return (l,r) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/pbkdf2_test.py |
---|
0,0 → 1,83 |
#!/usr/bin/env python |
""" crypto.keyedHash.pbkdf2_test |
Unit tests for crypto.keyedHash.pbkdf2 |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.keyedHash.pbkdf2 import pbkdf2, dot11PassPhraseToPSK |
import unittest |
from binascii_plus import a2b_p, b2a_p, b2a_hex,b2a_pter |
class PBDKDF22_KnowAnswerTests(unittest.TestCase): |
""" """ |
def pbkdf2KAT(self,testDescription, password, salt, iterations, keySize, ka): |
""" Know Answer Tests from IEEE """ |
knownAnswer = a2b_p(ka) # convert ascii 2 binary |
derivedKey = pbkdf2(password, salt, iterations, keySize) |
print "========== %s ==========" % testDescription |
print 'password = "%s"' % password |
print "salt/ssid = %s" % b2a_pter(salt, frnt=' ')[15:] |
print "iterations =", iterations |
print "keySize =", keySize |
print "derivedKey =", b2a_p(derivedKey, frnt=' ')[15:] |
#print "knownAnswer =", b2a_p(knownAnswer, frnt=' ')[15:] |
self.assertEqual(derivedKey, knownAnswer), "KAT Failed-> %s "% testDescription |
def testKnownAnswerRFC3211_1(self): |
description = "RFC3211 KAT Test 1" |
password = "password" |
salt = a2b_p("12 34 56 78 78 56 34 12") |
iterations = 5 |
keySize = 8 |
knownAnswer = "D1 DA A7 86 15 F2 87 E6" |
self.pbkdf2KAT(description, password, salt, iterations, keySize, knownAnswer) |
def testknownAnswerTGi_1(self): |
description = "pbkdf2 IEEE 802.11 TGi Test 1" |
password = "password" |
ssid = "IEEE" |
iterations = 4096 # IEEE 802.11 TGi spcification |
keySize = 32 # 32 bytes, 256 bits |
knownAnswer = """f4 2c 6f c5 2d f0 eb ef 9e bb 4b 90 b3 8a 5f 90 |
2e 83 fe 1b 13 5a 70 e2 3a ed 76 2e 97 10 a1 2e""" |
self.pbkdf2KAT(description, password, ssid, iterations, keySize, knownAnswer) |
def testknownAnswerTGi_2(self): |
description = "pbkdf2 IEEE 802.11 TGi Test 2" |
password = "ThisIsAPassword" |
ssid = "ThisIsASSID" |
iterations = 4096 # IEEE 802.11 TGi spcification |
keySize = 32 # 32 bytes, 256 bits |
knownAnswer = """0d c0 d6 eb 90 55 5e d6 41 97 56 b9 a1 5e c3 e3 |
20 9b 63 df 70 7d d5 08 d1 45 81 f8 98 27 21 af""" |
self.pbkdf2KAT(description, password, ssid, iterations, keySize, knownAnswer) |
def testknownAnswerTGi_3(self): |
description = "pbkdf2 IEEE 802.11 TGi Test 3" |
password = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
ssid = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" |
iterations = 4096 # IEEE 802.11 TGi spcification |
keySize = 32 # 32 bytes, 256 bits |
knownAnswer = """be cb 93 86 6b b8 c3 83 2c b7 77 c2 f5 59 80 7c |
8c 59 af cb 6e ae 73 48 85 00 13 00 a9 81 cc 62""" |
self.pbkdf2KAT(description, password, ssid, iterations, keySize, knownAnswer) |
def testDot11PassPhraseToPSK(self): |
passPhrase = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
ssid = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" |
knownAnswer = """be cb 93 86 6b b8 c3 83 2c b7 77 c2 f5 59 80 7c |
8c 59 af cb 6e ae 73 48 85 00 13 00 a9 81 cc 62""" |
key = dot11PassPhraseToPSK( passPhrase, ssid ) |
self.assertEqual( a2b_p(knownAnswer), key ) |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/pbkdf2.py |
---|
0,0 → 1,43 |
""" crypto.keyedHash.pbkdf2 |
Password Based Key Derivation Function 2 |
References: RFC2898, B. Kaliski, September 2000, PKCS #5 |
This function is used for IEEE 802.11/WPA passphrase to key hashing |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.keyedHash.hmacHash import HMAC_SHA1 |
from crypto.common import xor |
from math import ceil |
from struct import pack |
def pbkdf2(password, salt, iterations, keySize, PRF=HMAC_SHA1): |
""" Create key of size keySize from password and salt """ |
if len(password)>63: |
raise 'Password too long for pbkdf2' |
#if len(password)<8 : raise 'Password too short for pbkdf2' |
if (keySize > 10000): # spec says >4294967295L*digestSize |
raise 'keySize too long for PBKDF2' |
prf = PRF(key=password) # HMAC_SHA1 |
numBlocks = ceil(1.*keySize/prf.digest_size) # ceiling function |
key = '' |
for block in range(1,numBlocks+1): |
# Calculate F(P, salt, iterations, i) |
F = prf(salt+pack('>i',block)) # i is packed into 4 big-endian bytes |
U = prf(salt+pack('>i',block)) # i is packed into 4 big-endian bytes |
for count in range(2,iterations+1): |
U = prf(U) |
F = xor(F,U) |
key = key + F |
return key[:keySize] |
def dot11PassPhraseToPSK(passPhrase,ssid): |
""" The 802.11 TGi recommended pass-phrase-to-preshared-key mapping. |
This function simply uses pbkdf2 with interations=4096 and keySize=32 |
""" |
assert( 7<len(passPhrase)<64 ), 'Passphrase must be greater than 7 or less than 64 characters' |
return pbkdf2(passPhrase, ssid, iterations=4096, keySize=32) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/tkip_key_mixing_test.py |
---|
0,0 → 1,214 |
#! /usr/bin/env python |
""" crypto.keyedHash.tkip_key_mixing |
Tests for TKIP key mixing function |
Paul Lambert |
November 4, 2002 |
""" |
import unittest |
from crypto.keyedHash.tkip_key_mixing import TKIP_Mixer |
from struct import pack, unpack |
from binascii_plus import a2b_p, b2a_p, b2a_hex |
class TKIP_Mixer_Know_Answer_Tests(unittest.TestCase): |
""" Test TKIP Mixing using know values (aka test vectors) """ |
def testTKIP_Mixer_KnowValues(self): |
""" Test using vectors from IEEE 802.11TGi D2.4.2 """ |
for testCase in TKIP_MixerTestCases: |
description = testCase['testCase'] |
tk = a2b_p(testCase['TK']) |
ta = a2b_p(testCase['TA']) |
iv32 = a2b_p(testCase['IV32']) # last 4 octets of PN/IV field |
iv16 = a2b_p(testCase['IV16']) |
# NOTE - iv16 and iv32 are confused notation from early drafts |
# may not match notation in the future |
pnField = iv16[1]+iv16[0] + iv32[3]+iv32[2]+iv32[1]+iv32[0] |
pn = unpack('<Q', pnField + 2*chr(0) )[0] |
knownP1key = a2b_p(testCase['P1K']) |
knownRC4Key = a2b_p(testCase['RC4KEY']) |
print '===========================================================' |
print 'testCase:%s'%description |
print 'TK: %s'%b2a_p(tk)[9:] |
print 'TA: %s'%b2a_p(ta)[9:] |
print 'IV32: %s'%b2a_p(iv32)[9:] |
print 'IV16: %s'%b2a_p(iv16)[9:] |
keyId = 0 |
eh1 = chr((ord(pnField[1])|0x20)&0x7f) |
eh = pnField[0]+eh1+pnField[1]+chr((keyId<<6)|0x20)+pnField[2:] |
print 'EncHdr: %s (with KeyId=0)' % b2a_p(eh)[9:] |
print 'PNfield: %s' % b2a_p(pnField)[9:] |
print 'PNvalue: hex 0x%012X decimal %d' % (pn,pn) |
#print 'TSC: [0x%04x, 0x%04x, 0x%04x]' % (unpack('<H',pnField[0:2])[0],\ |
# unpack('<H',pnField[2:4])[0],unpack('<H',pnField[4:6])[0]) |
mixer = TKIP_Mixer(tk,ta) |
newRC4Key = mixer.newKey(pnField) |
p1kstring = ''.join([pack('>H',i) for i in mixer.phase1Key]) # a list of int's |
print 'TTAK: [0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x]' % (mixer.phase1Key[0], \ |
mixer.phase1Key[1],mixer.phase1Key[2],mixer.phase1Key[3],mixer.phase1Key[4]) |
print 'P1K: %s'%b2a_p(p1kstring)[9:] |
#print 'knownP1K:%s'%b2a_p(knownP1key)[9:] |
self.assertEqual( p1kstring, knownP1key),'Phase1 Keys dont match' |
print 'RC4Key: %s'% b2a_p(newRC4Key)[9:] |
#print 'knownRC4Key: %s'% b2a_p(knownRC4Key)[9:] |
self.assertEqual( newRC4Key, knownRC4Key ),'Final Key does not match' |
print '===========================================================' |
def xtestTKIP_Mixer_Sequence(self): |
""" Test TKIP Mixing using alternate calling approaches """ |
key = 16*chr(0) |
ta = 6*chr(0) |
tscOctets = 6*chr(0) |
keyMixer = TKIP_Mixer(key) |
keyMixer.setTA(ta) |
newKey = keyMixer.newKey(tscOctets) |
keyMixer = TKIP_Mixer() |
keyMixer.setTA(ta) |
keyMixer.setKey(key) |
newKey = keyMixer.newKey(tscOctets) |
keyMixer = TKIP_Mixer(transmitterAddress=ta) |
keyMixer.setKey(key) |
newKey = keyMixer.newKey(tscOctets) |
def xtestGunarExample1(self): |
""" Test example from Gunnar 2003-01-27 """ |
tk1 = a2b_p( "A9 90 6D C8 3E 78 92 3F 86 04 E9 9E F6 CD BA BB" ) |
ta = a2b_p( "50 30 F1 84 44 08" ) |
iv32 = a2b_p( "B5039776" ) # [transmitted as B5 03 97 76] |
iv16 = a2b_p( "E70C" ) |
p1k = a2b_p( "26D5 F1E1 2A59 2021 0E8E" ) |
rc4Key = a2b_p( "E7 67 0C 68 15 E0 2E 3F 1C 15 92 92 D4 E2 78 82" ) |
mixer = TKIP_Mixer(tk1,ta) |
newRC4Key = mixer.newKey(iv16+iv32) |
print "=== Gunnar Example ===" |
print "rc4Key = ", b2a_p( rc4Key ) |
print "newRC4Key = ", b2a_p( newRC4Key ) |
print "knownp1K = ", b2a_p( p1k ) |
print "calcp1K = %04X %04X %04x %04x %04x" % (mixer.phase1Key[0],mixer.phase1Key[1],mixer.phase1Key[2],mixer.phase1Key[3],mixer.phase1Key[4]) |
self.assertEqual(rc4Key,newRC4Key) |
def xtestTKIP_Mixer_TV_values(self): |
""" Test using vectors from IEEE 802.11TGi D2.4.2 """ |
for testCase in TKIP_TestVector: |
description = testCase['testCase'] |
tk = a2b_p(testCase['TK']) |
ta = a2b_p(testCase['TA']) |
pn = testCase['PN'] |
pnField = pack('<Q', pn)[:6] |
print '===========================================================' |
print 'testCase:%s'%description |
print 'TK: %s'%b2a_p(tk)[9:] |
print 'TA: %s'%b2a_p(ta)[9:] |
keyId = 0 |
eh1 = chr((ord(pnField[1])|0x20)&0x7f) |
eh = pnField[0]+eh1+pnField[1]+chr((keyId<<6)|0x20)+pnField[2:] |
print 'EncHdr: %s (with KeyId=0)' % b2a_p(eh)[9:] |
print 'PNfield: %s' % b2a_p(pnField)[9:] |
print 'PNvalue: 0x%06X' % pn |
print 'TSC?: [0x%04x, 0x%04x, 0x%04x]' % (unpack('<H',pnField[0:2])[0],\ |
unpack('<H',pnField[2:4])[0],unpack('<H',pnField[4:6])[0]) |
mixer = TKIP_Mixer(tk,ta) |
newRC4Key = mixer.newKey(pnField) |
p1kstring = ''.join([pack('>H',i) for i in mixer.phase1Key]) # a list of int's |
print 'TTAK: [0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x]' % (mixer.phase1Key[0], \ |
mixer.phase1Key[1],mixer.phase1Key[2],mixer.phase1Key[3],mixer.phase1Key[4]) |
print 'P1K: %s'%b2a_p(p1kstring)[9:] |
print 'RC4Key: %s' % b2a_p( newRC4Key )[9:] |
print 'kRC4Key: %s' % b2a_p( a2b_p(testCase['RC4KEY']))[9:] |
self.assertEqual(newRC4Key, a2b_p(testCase['RC4KEY'])) |
print '===========================================================' |
""" TKIP_Mixer Know Answer Tests from IEEE TGi """ |
TKIP_MixerTestCases = [ |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #1", |
'TK' : "00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F", |
'TA' : "10 22 33 44 55 66", |
'IV32' : "00000000", |
'IV16' : "0000", |
'P1K' : "3DD2 016E 76F4 8697 B2E8", |
'RC4KEY': "00 20 00 33 EA 8D 2F 60 CA 6D 13 74 23 4A 66 0B"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #2", |
'TK' : "00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F", |
'TA' : "10 22 33 44 55 66", |
'IV32' : "00000000", #[transmitted as 00 00 00 00] |
'IV16' : "0001", |
'P1K' : "3DD2 016E 76F4 8697 B2E8", |
'RC4KEY': "00 20 01 90 FF DC 31 43 89 A9 D9 D0 74 FD 20 AA"}, |
{'testCase':"IEEE TGi TKIP_Mixer Test vector #3", |
'TK' : "63 89 3B 25 08 40 B8 AE 0B D0 FA 7E 61 D2 78 3E", |
'TA' : "64 F2 EA ED DC 25", |
'IV32' : "20DCFD43", |
'IV16' : "FFFF", |
'P1K' : "7C67 49D7 9724 B5E9 B4F1", |
'RC4KEY': "FF 7F FF 93 81 0F C6 E5 8F 5D D3 26 25 15 44 CE"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #4", |
'TK' : "63 89 3B 25 08 40 B8 AE 0B D0 FA 7E 61 D2 78 3E", |
'TA' : "64 F2 EA ED DC 25", |
'IV32' : "20DCFD44", |
'IV16' : "0000", |
'P1K' : "5A5D 73A8 A859 2EC1 DC8B", |
'RC4KEY': "00 20 00 49 8C A4 71 FC FB FA A1 6E 36 10 F0 05"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #5", |
'TK' : "98 3A 16 EF 4F AC B3 51 AA 9E CC 27 1D 73 09 E2", |
'TA' : "50 9C 4B 17 27 D9", |
'IV32' : "F0A410FC", |
'IV16' : "058C", |
'P1K' : "F2DF EBB1 88D3 5923 A07C", |
'RC4KEY': "05 25 8C F4 D8 51 52 F4 D9 AF 1A 64 F1 D0 70 21"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #6", |
'TK' : "98 3A 16 EF 4F AC B3 51 AA 9E CC 27 1D 73 09 E2", |
'TA' : "50 9C 4B 17 27 D9", |
'IV32' : "F0A410FC", |
'IV16' : "058D", |
'P1K' : "F2DF EBB1 88D3 5923 A07C ", |
'RC4KEY': "05 25 8D 09 F8 15 43 B7 6A 59 6F C2 C6 73 8B 30"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #7", |
'TK' : "C8 AD C1 6A 8B 4D DA 3B 4D D5 B6 54 38 35 9B 05", |
'TA' : "94 5E 24 4E 4D 6E", |
'IV32' : "8B1573B7", |
'IV16' : "30F8", |
'P1K' : "EFF1 3F38 A364 60A9 76F3", |
'RC4KEY': "30 30 F8 65 0D A0 73 EA 61 4E A8 F4 74 EE 03 19"}, |
{'testCase': "IEEE TGi TKIP_Mixer Test vector #8", |
'TK' : "C8 AD C1 6A 8B 4D DA 3B 4D D5 B6 54 38 35 9B 05", |
'TA' : "94 5E 24 4E 4D 6E", |
'IV32' : "8B1573B7", |
'IV16' : "30F9", |
'P1K' : "EFF1 3F38 A364 60A9 76F3", |
'RC4KEY': "30 30 F9 31 55 CE 29 34 37 CC 76 71 27 16 AB 8F"} |
] |
TKIP_TestVector = [ |
{'testCase': "-------------TKIP Test Vector 1", |
'TK' : "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f", |
'TA' : "10 22 33 44 55 66", |
'PN' : 0x000000000000, |
'RC4KEY': "00 20 00 33 EA 8D 2F 60 CA 6D 13 74 23 4A 66 0B"}, |
{'testCase': "-------------IEEE TGi TKIP_Mixer Test vector #6 Mod to PN", |
'TK' : "98 3A 16 EF 4F AC B3 51 AA 9E CC 27 1D 73 09 E2", |
'TA' : "50 9C 4B 17 27 D9", |
'PN' : 0xF0A410FC058D, # [transmitted as: 8D 25 05 DefKeyID FC 10 A4 F0] |
'RC4KEY': "05 25 8D 09 F8 15 43 B7 6A 59 6F C2 C6 73 8B 30"}] |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/tkip_key_mixing.py |
---|
0,0 → 1,135 |
""" crypto.keyedHash.tkip_key_mixing.py |
TKIP Temporal Key Mixing Function reference implementation |
2002-11-04 |
""" |
from struct import pack, unpack |
from binascii_plus import * |
def S(word): |
""" TKIP S-Box non-linear substitution of a 16 bit word """ |
return (tkipSbox[0][word & 0x00FF] ^ tkipSbox[1][(word>>8) & 0x00FF]) |
""" tkipSbox consists of two 256 word arrays |
The tkip Sbox is formed from the AES/Rijndael Sbox |
""" |
from crypto.cipher.rijndael import Sbox |
tkipSbox = [range(256),range(256)] # arbitrary initialization |
for i in range(256): |
k = Sbox[i] # the rijndael S box (imported) |
if k & 0x80 : # calculate k*2 polynomial math |
k2 = (k<<1)^0x11b # reduce by rijndael modulas |
else: |
k2 = k<<1 |
k3 = k ^ k2 |
tkipSbox[0][i] = (k2<<8)^k3 |
tkipSbox[1][i] = (k3<<8)^k2 # second array is just byte swap of first array |
def rotR1(v16): |
""" circular right rotate on 16 bits """ |
return ((((v16) >> 1) & 0x7FFF) ^ (((v16) & 1) << 15)) |
class TKIP_Mixer: |
""" The TKIP_Mixer class generates dynamic keys for TKIP based on the |
TK (temporal key), TA and PN |
""" |
def __init__(self, tk1=None, transmitterAddress=None, pnBytes=6*chr(0)): |
""" The TKIP Mixer is initialized with tk1 and TA |
tk1 is a temporal key (16 octet string) |
transmitterAddress is a 6 octet MAC address |
pn is the packet number, here as an integer < (1<<8*6) |
""" |
self.tk = None |
self.ta = None |
self.setPnBytes(pnBytes) # sets self.pnBytes and validates input |
self.upper4SequenceOctets = self.pnBytes[-4:] |
if tk1 != None : |
self.setKey(tk1) |
if transmitterAddress != None : |
self.setTA(transmitterAddress) |
def setKey(self, key): |
""" Set the temporal key (tk1) for key mixing """ |
if len(key)!= 16: raise 'Wrong key size' |
# for readability of subroutines, make tk a list of 1 octet ints |
self.tk = [ord(byte) for byte in key] |
if self.ta != None : # reset phase1 value |
self.phase1Key = phase1KeyMixing( self.tk, self.ta, self.pn) |
def setTA(self, taBytes): |
""" Set the transmitter address """ |
if len(taBytes) != 6: raise 'Bad size for transmitterAddress' |
self.ta = [ord(byte) for byte in taBytes] |
if self.tk != None : # reset phase1 value |
self.phase1Key = phase1KeyMixing( self.tk, self.ta, self.pn ) |
def setPnBytes(self, pnBytes): |
""" Set the pnBytes from the packet number (int) """ |
assert( len(pnBytes)==6 ), 'pnBytes must be 6 octets' |
self.pnBytes = pnBytes |
self.pn = [ord(byte) for byte in pnBytes] # int list for readability |
def newKey(self, pnBytes): |
""" return a new 'mixed' key (16 octets) based on |
the pn in 6 octets, also know as TSC |
""" |
assert(self.ta != None), 'No TA' |
assert(self.tk != None), 'No TK' |
self.setPnBytes(pnBytes) |
if self.pnBytes[-4:] != self.upper4SequenceOctets: # check if upper bits change |
# calculate phase1 key only when upper bytes change |
self.upper4SequenceOctets = pnBytes[-4:] |
self.phase1Key = phase1KeyMixing( self.tk, self.ta, self.pn ) |
return phase2KeyMixing( self.tk, self.phase1Key, self.pn ) |
def phase1KeyMixing(tk,ta,pn): |
""" Create a p1k (5 integers) from TK, TA and upper 4 octets of sequence number pn""" |
p1k = [0,0,0,0,0] # array of 5 integers (each 2 octets) |
p1k[0] = pn[3]*256 + pn[2] |
p1k[1] = pn[5]*256 + pn[4] |
p1k[2] = ta[1]*256 + ta[0] # 2 octets of MAC as an integer (little-endian) |
p1k[3] = ta[3]*256 + ta[2] # 2 octets of MAC as an integer (little-endian) |
p1k[4] = ta[5]*256 + ta[4] # 2 octets of MAC as an integer (little-endian) |
for i in range(8): |
j = 2*(i&1) |
p1k[0] = ( p1k[0] + S( p1k[4]^(tk[j+ 1]*256 + tk[j+ 0]))) & 0xFFFF |
p1k[1] = ( p1k[1] + S( p1k[0]^(tk[j+ 5]*256 + tk[j+ 4]))) & 0xFFFF |
p1k[2] = ( p1k[2] + S( p1k[1]^(tk[j+ 9]*256 + tk[j+ 8]))) & 0xFFFF |
p1k[3] = ( p1k[3] + S( p1k[2]^(tk[j+13]*256 + tk[j+12]))) & 0xFFFF |
p1k[4] = ( p1k[4] + S( p1k[3]^(tk[j+ 1]*256 + tk[j])) + i ) & 0xFFFF |
return p1k |
def phase2KeyMixing(tk,p1k,pn): |
""" Create a 16 octet key from the phase1Key (p1k) |
and 2 octets of sequence counter """ |
ppk = [i for i in p1k] |
ppk.append( p1k[4] + pn[1]*256 + pn[0] ) # append value for ppk[5] |
# Bijective non-linear mixing of the 96 bits of ppk |
ppk[0] = (ppk[0] + S(ppk[5] ^ (tk[1]*256 + tk[0]) )) & 0xFFFF |
ppk[1] = (ppk[1] + S(ppk[0] ^ (tk[3]*256 + tk[2]) )) & 0xFFFF |
ppk[2] = (ppk[2] + S(ppk[1] ^ (tk[5]*256 + tk[4]) )) & 0xFFFF |
ppk[3] = (ppk[3] + S(ppk[2] ^ (tk[7]*256 + tk[6]) )) & 0xFFFF |
ppk[4] = (ppk[4] + S(ppk[3] ^ (tk[9]*256 + tk[8]) )) & 0xFFFF |
ppk[5] = (ppk[5] + S(ppk[4] ^ (tk[11]*256+ tk[10]) )) & 0xFFFF |
# Final sweep |
ppk[0] = (ppk[0] + rotR1(ppk[5] ^ (tk[13]*256+tk[12]))) & 0xFFFF |
ppk[1] = (ppk[1] + rotR1(ppk[0] ^ (tk[15]*256+tk[14]))) & 0xFFFF |
ppk[2] = (ppk[2] + rotR1(ppk[1])) & 0xFFFF |
ppk[3] = (ppk[3] + rotR1(ppk[2])) & 0xFFFF |
ppk[4] = (ppk[4] + rotR1(ppk[3])) & 0xFFFF |
ppk[5] = (ppk[5] + rotR1(ppk[4])) & 0xFFFF |
rc4Key = range(16) |
rc4Key[0] = pn[0] |
rc4Key[1] = (pn[0] | 0x20) & 0x7F |
rc4Key[2] = pn[1] |
rc4Key[3] = 0xFF &((ppk[5]^(tk[1]*256+tk[0]))>>1) |
for i in range(6): |
rc4Key[4+2*i] = ppk[i] & 0xff |
rc4Key[5+2*i] = (ppk[i]>>8) & 0xff |
wepSeed = ''.join([chr(i) for i in rc4Key]) # convert to string |
return wepSeed |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/hmacHash_test.py |
---|
0,0 → 1,121 |
#!/usr/bin/env python |
""" hmacHash_test.py |
Unit tests for hmacHash.py |
So far only runs test vectors from RFC2104 |
References |
[IETF] RFC 2104 "HMAC: Keyed-Hashing for Message Authentication" |
[IETF] RFC 2202 |
""" |
import unittest |
from crypto.keyedHash.hmacHash import HMAC, HMAC_SHA1 |
from crypto.hash.sha1Hash import SHA1 |
from crypto.hash.md5Hash import MD5 |
from binascii import a2b_hex, b2a_hex |
class HMAC_Simple_TestCases(unittest.TestCase): |
""" HMAC constructed ny hand """ |
def testSHA1_NullKey(self): |
""" HMAC_SHA1 testNullKey """ |
ki = ''.join([chr(0x36) for i in range(64)]) |
ko = ''.join([chr(0x5C) for i in range(64)]) |
h = SHA1() |
keyedHashAlg = HMAC(SHA1,key='') |
assert ( keyedHashAlg('') == h(ko+h(ki)) ), 'Null key, Null data test' |
assert ( keyedHashAlg('a') == h(ko+h(ki+'a')) ), 'Null key, a data test' |
assert ( keyedHashAlg('ab') == h(ko+h(ki+'ab')) ), 'Null key, ab data test' |
assert ( keyedHashAlg(50*'a') == h(ko+h(ki+50*'a')) ), 'Null key, 50*a data test' |
# try hmac in two steps of 25 chrs |
manual_hmac = h(ko+h(ki+50*'a')) |
keyedHashAlg.update(25*'a') |
keyedHashAlg.update(25*'a') |
hm = keyedHashAlg.digest() |
assert (hm == manual_hmac), 'HMAC as update, update and digest' |
def testMD5_NullKey(self): |
""" HMAC_MD5 testNullKey """ |
ki = ''.join([chr(0x36) for i in range(64)]) |
ko = ''.join([chr(0x5C) for i in range(64)]) |
h = MD5() |
keyedHashAlg = HMAC(MD5,key='') |
assert ( keyedHashAlg('') == h(ko+h(ki)) ), 'Null key, Null data test' |
assert ( keyedHashAlg('a') == h(ko+h(ki+'a')) ), 'Null key, a data test' |
assert ( keyedHashAlg('ab') == h(ko+h(ki+'ab')) ), 'Null key, ab data test' |
assert ( keyedHashAlg(50*'a') == h(ko+h(ki+50*'a')) ), 'Null key, 50*a data test' |
def testSHA1_oneByteKey(self): |
""" HMAC_SHA1 oneByteKey of 0xFF""" |
ki = ''.join([chr(0x36) for i in range(64)]) |
ko = ''.join([chr(0x5C) for i in range(64)]) |
ki = chr(ord(ki[0])^0xFF)+ ki[1:] |
ko = chr(ord(ko[0])^0xFF)+ ko[1:] |
h = SHA1() |
keyedHashAlg = HMAC(SHA1,chr(0xff)) |
assert ( keyedHashAlg('') == h(ko+h(ki)) ), 'one byte key, Null data test' |
assert ( keyedHashAlg('a') == h(ko+h(ki+'a')) ), 'one byte key, a data test' |
assert ( keyedHashAlg('ab') == h(ko+h(ki+'ab')) ), 'one byte key, ab data test' |
assert ( keyedHashAlg(50*'a') == h(ko+h(ki+50*'a')) ), 'one byte key, 50*a data test' |
class HMAC_RFC2104_TestCases(unittest.TestCase): |
""" HMAC tests from RFC2104 """ |
def testRFC2104_1(self): |
""" RFC2104 test 1 and various calling methods """ |
key = chr(0x0b)*20 |
keyedHashAlg = HMAC(SHA1,key) |
data = "Hi There" |
digest = a2b_hex('b617318655057264e28bc0b6fb378c8ef146be00') |
cd=keyedHashAlg(data) |
assert( cd == digest ), 'RFC2104 test 1 failed' |
hmac_sha1 = HMAC_SHA1(key) |
cd = hmac_sha1.hash(data) |
assert( cd == digest ), 'RFC2104 test 1 failed, HMAC_SHA1 called' |
cd = hmac_sha1.hash(data[:3],more=1) |
cd = hmac_sha1.hash(data[3:]) |
assert( cd == digest ), 'RFC2104 test 1 failed, HMAC_SHA1 called twice' |
hmac_sha1.update(data[:3]) |
hmac_sha1.update(data[3:]) |
cd = hmac_sha1.digest() |
print b2a_hex(cd) |
assert( cd == digest ), 'RFC2104 test 1 failed, HMAC_SHA1 called with update' |
hmac_sha1.reset(data) |
cd1 = hmac_sha1.hash(data) |
cd2 = hmac_sha1.hash(data) |
print b2a_hex(cd1) |
print b2a_hex(cd2) |
assert( cd1 == cd2 ), 'hash method should default to reseting state' |
def testRFC2104_2(self): |
""" RFC2104 test 2 """ |
keyedHashAlg = HMAC(SHA1) |
key = 'Jefe' |
keyedHashAlg.setKey(key) |
data = 'what do ya want for nothing?' |
digest = a2b_hex('effcdf6ae5eb2fa2d27416d5f184df9c259a7c79') |
cd = keyedHashAlg(data) |
assert( cd == digest ), 'RFC2104 test 2 failed' |
def testRFC2104_3(self): |
""" RFC2104 test 3 """ |
key = a2b_hex('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') |
keyedHashAlg = HMAC_SHA1(key) |
data = 50*chr(0xdd) |
digest = a2b_hex('125d7342b9ac11cd91a39af48aa17b4f63f175d3') |
cd = keyedHashAlg(data) |
assert( cd == digest ), 'RFC2104 test 3 failed' |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash/hmacHash.py |
---|
0,0 → 1,83 |
""" hmacHash.py |
Implemention of Request for Comments: 2104 |
HMAC: Keyed-Hashing for Message Authentication |
HMAC is a mechanism for message authentication |
using cryptographic hash functions. HMAC can be used with any |
iterative cryptographic hash function, e.g., MD5, SHA-1, in |
combination with a secret shared key. The cryptographic strength of |
HMAC depends on the properties of the underlying hash function. |
This implementation of HMAC uses a generic cryptographic 'hashFunction' |
(self.H). Hash functions must conform to the crypto.hash method |
conventions and are not directly compatible with the Python sha1 or md5 algorithms. |
[IETF] RFC 2104 "HMAC: Keyed-Hashing for Message Authentication" |
>>>key = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |
>>>keyedHashAlg = HMAC(SHA1, key) |
>>>result = keyedHashAlg(data) |
""" |
from crypto.hash.hash import Hash |
class HMAC(Hash): |
""" To compute HMAC over the data `text' we perform |
H(K XOR opad, H(K XOR ipad, text)) |
""" |
def __init__(self, hashFunction, key = None): |
""" initialize HMAC with hashfunction and optionally the key """ |
# should check for right type of function |
self.H = hashFunction() # a new instance for inner hash |
self.H_outer = hashFunction() # separate outer context to allow intermediate digests |
self.B = self.H.raw_block_size # in bytes, note - hash block size typically 1 |
# and raw_block_size much larger |
# e.g. raw_block_size is 64 bytes for SHA1 and MD5 |
self.name = 'HMAC_'+self.H.name |
self.blocksize = 1 # single octets can be hashed by padding to raw block size |
self.raw_block_size = self.H.raw_block_size |
self.digest_size = self.H.digest_size |
if key != None: |
self.setKey(key) |
else: |
self.keyed = None |
def setKey(self,key): |
""" setKey(key) ... key is binary string """ |
if len(key) > self.B: # if key is too long then hash it |
key = self.H(key) # humm... this is odd, hash can be smaller than B |
else: # should raise error on short key, but breaks tests :-( |
key =key + (self.B-len(key)) * chr(0) |
self.k_xor_ipad = ''.join([chr(ord(bchar)^0x36) for bchar in key]) |
self.k_xor_opad = ''.join([chr(ord(bchar)^0x5C) for bchar in key]) |
self.keyed = 1 |
self.reset() |
def reset(self): |
self.H.reset() |
if self.keyed == None : |
raise 'no key defined' |
self.H.update(self.k_xor_ipad) # start inner hash with key xored with ipad |
# outer hash always called as one full pass (no updates) |
def update(self,data): |
if self.keyed == None : |
raise 'no key defined' |
self.H.update(data) |
def digest(self): |
if self.keyed == None : |
raise 'no key defined' |
return self.H_outer(self.k_xor_opad+self.H.digest()) |
from crypto.hash.sha1Hash import SHA1 |
class HMAC_SHA1(HMAC): |
""" Predefined HMAC built on SHA1 """ |
def __init__(self, key = None): |
""" optionally initialize with key """ |
HMAC.__init__(self,SHA1,key) |
from crypto.hash.md5Hash import MD5 |
class HMAC_MD5(HMAC): |
""" Predefined HMAC built on SHA1 """ |
def __init__(self, key = None): |
""" optionally initialize with key """ |
HMAC.__init__(self,MD5,key) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/keyedHash |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto/passwords/passwordfactory_test.py |
---|
0,0 → 1,32 |
#! /usr/bin/env python |
""" crypto.passwords.passwordfactory_test |
Test classes for password generation |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import unittest |
from crypto.passwords.passwordfactory import * |
class Password_Generation_Tests_Basic(unittest.TestCase): |
def testPasswordFactorySimple(self): |
""" Just print a few to see how they look for now """ |
print "==== PasswordFactorySimple ====" |
makePassword = PasswordFactorySimple("factorySpecificSeed",minSize=6, maxSize=10) |
print "minSize=%d maxSize=%d entropy=%d"% (makePassword.minSize,makePassword.maxSize,makePassword.entropy()) |
for i in range(10): |
print makePassword(chr(i)) |
def testPasswordFactoryReadable_01(self): |
""" Examples of PasswordFactoryReadable_01 """ |
print "======== PasswordFactoryReadable_01 ========" |
makePassword = PasswordFactoryReadable_01("factorySpecificSeed",minSize=6, maxSize=10) |
print "minSize=%d maxSize=%d entropy=%d"% (makePassword.minSize,makePassword.maxSize,makePassword.entropy()) |
for i in range(10): |
print makePassword(chr(i)) |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/passwords/passwordfactory.py |
---|
0,0 → 1,94 |
""" crypto.passwords.passwordfactory |
Python classes to create and recover passwords. Currently contains |
simple password generation. <need to merge the dictionary based pws> |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
August 14, 2002 |
""" |
from random import Random |
from sha import sha # the SHA1 algorithm for cryptographic hashing |
from math import log, ceil |
#from binascii_plus import b2a_p |
class PasswordFactory: |
""" Make passwords using pseudo random seeds. |
Also used to recover passwords by using same pwSeed. |
If the seed is not saved, the password can not be recovered!! |
""" |
def __init__(self, pwFactorySeed, minSize=10, maxSize=10 ): |
""" An abstract class to create passwords """ |
self._factorySeed = pwFactorySeed |
self.minSize = minSize |
self.maxSize = maxSize |
self.rand = Random( self._factorySeed ) |
def getPassword(self, pwSeed): |
raise "MUST be overloaded" |
def __call__(self, pwSeed): |
""" Create a new password as a 'call' """ |
return self.getPassword(pwSeed) |
def entropy(self): |
""" Calculate the security of the password generation as a power of 2 """ |
total = 0 |
for pwSize in range(self.minSize, self.maxSize+1): |
total = total + self.passwordsForSize(pwSize) |
return powof2( total ) |
def powof2(x): |
""" Convert x to a power of 2 """ |
return log(x)/log(2) |
class PasswordFactorySimple(PasswordFactory): |
""" This class implements a very secure but simple selection of numbers and letters. |
Some characters have been removed to prevent confusion between similar shapes |
The removed characters are: (O,0,o), (l,1,I) , (u,v),(U,V) |
""" |
def __init__(self, pwFactorySeed, minSize=10, maxSize=10 ): |
""" Initialize password generation """ |
PasswordFactory.__init__(self, pwFactorySeed, minSize, maxSize ) |
self.lettersReduced = 'abcdefghijkmnpqrstwxyzABCDEFGHJKLMNPQRSTWXYZ' |
self.digitsReduced = '23456789' |
self.specialCharacters = '#%*+$' |
def getPassword(self, pwSeed): |
""" Create a new password from pwSeed. """ |
self.rand.seed( pwSeed + 'getPassword' + self._factorySeed ) # reset prf sequence |
self.passwordSize = self.rand.randrange(self.minSize, self.maxSize+1) |
password = '' |
for i in range(self.passwordSize): |
password = password + self.rand.choice(self.lettersReduced+self.digitsReduced) |
return password |
def passwordsForSize(self,pwSize): |
return (len(self.lettersReduced)+len(self.digitsReduced))**pwSize |
consonants_01 = 'bcdfghjklmnpqrstvwxz' |
vowels_01 = 'aeiouy' |
class PasswordFactoryReadable_01(PasswordFactory): |
""" Readable passwords created by alternating consonate/vowel/consonate ... etc. |
""" |
def getPassword(self, pwSeed): |
""" Create a new password. Also used to recover passwords by using same pwSeed """ |
#self.rand.seed( 'getPassword'+self.__factorySeed+pwSeed ) # reset prf sequence |
self.passwordSize = self.rand.randrange(self.minSize, self.maxSize+1) |
password = '' |
for i in range(self.passwordSize): |
if i == 0 : |
password = password + self.rand.choice(consonants_01) |
else: |
if password[-1] in consonants_01 : |
password = password + self.rand.choice(vowels_01) |
else: |
password = password + self.rand.choice(consonants_01) |
return password |
def passwordsForSize(self,pwSize): |
return (len(vowels_01)**(pwSize/2))*(len(consonants_01)**ceil(pwSize/2)) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/passwords/__init__.py |
---|
0,0 → 1,7 |
""" CryptoPy - a pure python cryptographic libraries |
crypto.passwords package |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/passwords |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto/__init__.py |
---|
0,0 → 1,6 |
""" crypto |
CryptoPy - pure python cryptographic libraries |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/__init__.py |
---|
0,0 → 1,8 |
""" crypto.cipher |
cipher package of CryptoPy |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/ccm_test.py |
---|
0,0 → 1,589 |
#! /usr/bin/env python |
""" crypto.cipher.ccm_test |
Tests for CCM encryption, uses AES for base algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
July 24, 2002 |
""" |
import unittest |
from crypto.cipher.ccm import CCM |
from crypto.cipher.aes import AES |
from crypto.cipher.base import noPadding |
from crypto.common import xor |
from binascii_plus import a2b_p, b2a_p |
class CCM_AES128_TestVectors(unittest.TestCase): |
""" Test CCM with AES128 algorithm using know values """ |
def testKnowValues(self): |
""" Test using vectors from...""" |
def CCMtestVector(testCase,macSize,key,nonce,addAuth,pt,kct): |
""" CCM test vectors using AES algorithm """ |
print '%s %s %s'%('='*((54-len(testCase))/2),testCase,'='*((54-len(testCase))/2)) |
key,nonce,pt,addAuth,kct = a2b_p(key),a2b_p(nonce),a2b_p(pt),a2b_p(addAuth),a2b_p(kct) |
alg = CCM(AES(key,keySize=len(key)),macSize=macSize, nonceSize=len(nonce)) |
print 'alg=%s%skeySize=%3d blockSize=%3d M=%2d L=%2d'%(alg.baseCipher.name, |
' '*(10-len(alg.baseCipher.name)), |
alg.keySize, alg.blockSize, alg.M, alg.L) |
print 'key: %s'%b2a_p(key)[9:] |
print 'nonce: %s'%b2a_p(nonce)[9:] |
print 'addAuth:%s'%b2a_p(addAuth)[9:] |
print 'pt: %s'%b2a_p(pt)[9:] |
ct = alg.encrypt(pt,nonce=nonce,addAuthData=addAuth) |
print 'ct: %s'%b2a_p(ct)[9:] |
print 'kct: %s'%b2a_p(kct)[9:] |
print '========================================================' |
self.assertEqual( ct, kct ) |
dct = alg.decrypt(ct,nonce=nonce,addAuthData=addAuth) |
self.assertEqual( dct, pt ) |
CCMtestVector( |
testCase = "CCM Packet Vector #1 (from D.W.)", |
macSize = 8, |
key = "C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF", |
nonce = "00 00 00 03 02 01 00 A0 A1 A2 A3 A4 A5", |
addAuth = "00 01 02 03 04 05 06 07", |
pt = """ 08 09 0A 0B 0C 0D 0E 0F |
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E """, |
kct = """ 58 8C 97 9A 61 C6 63 D2 |
F0 66 D0 C2 C0 F9 89 80 6D 5F 6B 61 DA C3 84 17 |
E8 D1 2C FD F9 26 E0 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet, no A4 and no QC", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "00 00 02 2d 49 97 b4 06 05 04 03 02 01", |
addAuth = """08 41 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00""", |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """1e e5 2d 13 b1 be 3f 20 42 5b 3f de dd d4 55 2b |
98 71 d8 7b 65 8c fd 57 f7 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet, no A4 and no QC, retry", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "00 00 02 2d 49 97 b4 06 05 04 03 02 01", |
addAuth = """08 41 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 """, |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """1e e5 2d 13 b1 be 3f 20 42 5b 3f de dd d4 55 2b |
98 71 d8 7b 65 8c fd 57 f7 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet,A4 with no QC ", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "00 00 02 2d 49 97 b4 00 00 00 00 00 01", |
addAuth = """08 43 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 41 42 43 44 45 46 """, |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """3b e9 b2 46 c6 fc 7a 51 55 1e 14 c6 a8 85 28 bc |
06 56 67 c8 ef 30 b3 12 69 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet,A4 and QC ", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "04 00 02 2d 49 97 b4 00 00 00 00 00 01", |
addAuth = """88 43 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 41 42 43 44 45 46 04 00""", |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """46 72 f2 9e 41 54 e9 11 58 47 c2 a9 ae dc 10 0c |
e8 82 53 bd a2 04 ae 1d 33 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet,QC no A4", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "04 00 02 2d 49 97 b4 00 00 00 00 00 01", |
addAuth = """88 41 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 04 00 """, |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """46 72 f2 9e 41 54 e9 11 58 47 c2 a9 ae dc 10 0c |
e8 dc 91 98 bf 6a 52 c8 03 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet,QC no A4", |
macSize = 8, |
key = "c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf", |
nonce = "04 00 02 2d 49 97 b4 00 00 00 00 00 01", |
addAuth = """88 41 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 04 00 """, |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """46 72 f2 9e 41 54 e9 11 58 47 c2 a9 ae dc 10 0c |
e8 dc 91 98 bf 6a 52 c8 03 """) |
CCMtestVector( |
testCase = "IEEE 802.11 Data Packet, no A4, No QC, WEP preset", |
macSize = 8, |
key = "00 01 02 03 04 05 06 07 08 c9 0a 0b 0c 0d 0e 0f", |
nonce = "00 00 02 2d 49 97 b4 06 05 04 03 02 01", |
addAuth = """08 41 00 06 25 a7 c4 36 00 02 2d 49 97 b4 00 06 |
25 a7 c4 36 e0 00 """, |
pt = """aa aa 03 00 00 00 88 8e 01 01 00 00 00 00 00 00 |
00""", |
kct = """de bf 2c c9 94 e6 5a 70 2c ee e3 19 84 21 39 c3 |
f2 9a 2e 12 63 11 74 5f 3c """) |
CCMtestVector( |
testCase = "KAT# 1 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "04 e5 1c f0 20 2d 4c 59 0f d2 e1 28 a5 7c 50 30", |
nonce = "f1 84 44 08 ab ae a5 b8 fc ba 33 2e 78", |
addAuth = """ """, |
pt = """ """, |
kct = """6f b0 8f 1f a0 ec e1 f0 """) |
CCMtestVector( |
testCase = "KAT# 2 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "c4 85 98 ee 34 6c 62 1e c9 7c 1f 67 ce 37 11 85", |
nonce = "51 4a 8a 19 f2 bd d5 2f 3a b5 03 97 76", |
addAuth = """0c """, |
pt = """e7 """, |
kct = """13 6d 5e af 39 d5 d3 6f 27 """) |
CCMtestVector( |
testCase = "KAT# 3 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "f8 ba 1a 55 d0 2f 85 ae 96 7b b6 2f b6 cd a8 eb", |
nonce = "7e 78 a0 50 68 dd e8 3a 11 40 85 a2 ea", |
addAuth = """10 """, |
pt = """ """, |
kct = """b8 01 6f 2e fc 56 b2 31 """) |
CCMtestVector( |
testCase = "KAT# 4 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "0c 84 68 50 ee c1 76 2c 88 de af 2e e9 f4 6a 07", |
nonce = "cc ee 9b fb 82 2d 5d 12 fe 9e 30 8f 7a", |
addAuth = """ """, |
pt = """05 """, |
kct = """7d d0 b5 77 e9 0c 1c de b5 """) |
CCMtestVector( |
testCase = "KAT# 5 - AES_CCM 128 M= 4 L= 2", |
macSize = 4, |
key = "77 a5 59 75 29 27 20 97 a6 03 d5 91 31 f3 cb ba", |
nonce = "97 ea 83 a0 63 4b 5e d7 62 7e b9 df 22", |
addAuth = """17 fc 89 c1 fc 0d 63 98 c3 d9 57 7d f7 63 c8 b6 |
a8 8a df 36 91 """, |
pt = """5e 05 74 03 42 de 19 41 """, |
kct = """0c 5f 95 1b 27 29 6a 16 a8 2a 32 d5 """) |
CCMtestVector( |
testCase = "KAT# 6 - AES_CCM 128 M= 6 L= 2", |
macSize = 6, |
key = "8b ca 94 dd 82 f4 ea 74 bf a2 1f 09 1e 67 85 40", |
nonce = "cf b7 a6 2e 88 01 3b d6 d3 af fc c1 91", |
addAuth = """ca 30 a0 e7 50 07 97 22 71 """, |
pt = """04 1e bc 2f dc a0 f3 a5 ae 2c 1b d0 36 83 1c 95 |
49 6c 5f 4d bf 3d 55 9e 72 de 80 2a 18 """, |
kct = """ad 81 34 7b 1f 61 6e b5 34 c0 e9 a0 7b ed 92 57 |
11 cf 4a 4b 2c 3f 9b 01 25 7a 9a e2 76 e6 c1 83 |
f0 2f ad """) |
CCMtestVector( |
testCase = "KAT# 7 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "df 11 db 8e f8 22 73 47 01 59 14 0d d6 46 a2 2f", |
nonce = "c5 d6 81 5d 5a 6d 72 40 ee a5 8c 89 a2", |
addAuth = """70 7f cf 24 b3 2d 38 33 0c f6 70 a5 5a 0f e3 4f |
ad 2b 1c 29 """, |
pt = """eb c9 6c 76 02 """, |
kct = """55 17 b7 c5 78 27 3c dd 6a 15 43 9c a0 """) |
CCMtestVector( |
testCase = "KAT# 8 - AES_CCM 128 M=10 L= 2", |
macSize = 10, |
key = "eb d8 72 fb c3 f3 a0 74 89 8f 8b 2f bb 90 96 66", |
nonce = "d6 c6 38 d6 82 45 de c6 9a 74 80 f3 51", |
addAuth = """c9 6b e2 76 fb e6 c1 27 f2 8a 8c 8e 58 32 f8 b3 |
41 a2 19 a5 74 """, |
pt = """94 6b """, |
kct = """55 cd b0 f0 72 a0 b4 31 37 85 31 55 """) |
CCMtestVector( |
testCase = "KAT# 9 - AES_CCM 128 M=12 L= 2", |
macSize = 12, |
key = "3b b2 5e fd de ff 30 12 2f df d0 66 9d a7 ff e0", |
nonce = "3c 0e 37 28 96 9b 95 4f 26 3a 80 18 a9", |
addAuth = """f9 a6 """, |
pt = """ef 70 a8 b0 51 46 24 81 92 2e 93 fa 94 71 ac 65 |
77 3f 5a f2 84 30 fd ab bf f9 43 b9 """, |
kct = """aa 27 4b a3 37 2e f5 d6 cc ae fe 16 8f de 14 63 |
37 83 e7 d3 0b cc 4a 8f dc f0 18 c9 c6 79 e8 b9 |
10 95 43 3b bf f2 89 f0 """) |
CCMtestVector( |
testCase = "KAT# 10 - AES_CCM 128 M=14 L= 2", |
macSize = 14, |
key = "98 c7 fe 73 71 62 4c 9f fd 3c b3 d9 fb 77 6a f7", |
nonce = "1e ea 4e 1f 58 80 4b 97 17 23 0a d0 61", |
addAuth = """c2 fc a1 """, |
pt = """46 41 5c 6b 81 ec a4 89 89 ab fd a2 2d 3a 0b fc |
9c c1 fc 07 93 63 """, |
kct = """64 e2 0b 0c ef d8 2a 00 27 ed 0f f2 90 1b d3 b7 |
b0 67 6c 1c 4a 4c b7 5c 40 0f db 9c 87 9e 99 c5 |
77 1a 9a 52 """) |
CCMtestVector( |
testCase = "KAT# 11 - AES_CCM 128 M=16 L= 2", |
macSize = 16, |
key = "eb 1d 3c 1d b4 a4 c5 e2 66 8d 9b 50 f4 fd 56 f6", |
nonce = "ef ec 95 20 16 91 83 57 0c 4c cd ee a0", |
addAuth = """48 1b db 34 98 0e 03 81 24 a1 db 1a 89 2b ec 36 |
6a ce 5e ec 40 73 e7 23 98 be ca 86 f4 b3 """, |
pt = """50 a4 20 b9 3c ef f4 e7 62 """, |
kct = """6f 55 64 96 29 95 40 49 34 84 5e 64 dc 68 3c 5f |
40 dc ec 0a 30 17 e5 df ee """) |
CCMtestVector( |
testCase = "KAT# 12 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "0c fd f2 47 24 c5 8e b8 35 66 53 39 e8 1c 37 c0", |
nonce = "95 68 e2 e4 55 2d 5f 72 bb 70 ca 3f 3a", |
addAuth = """5e 55 6e ac 1b f5 4b d5 4e db 23 21 75 43 03 02 |
4c 71 b0 ce fd """, |
pt = """ae 60 c4 8b a9 b5 f8 2c 2f eb 07 e2 9d 82 6b 95 |
a7 64 """, |
kct = """42 eb e1 dc be 9b 60 7b f8 d4 cb 21 6a 7b 5a 57 |
c7 1e 55 97 96 a1 a6 bf 33 2a """) |
CCMtestVector( |
testCase = "KAT# 13 - AES_CCM 128 M= 8 L= 3", |
macSize = 8, |
key = "cc dd 57 cb 5c 0e 5f cd 88 5e 9a 42 39 e9 b9 ca", |
nonce = "d6 0d 64 37 59 79 c2 fc 9a c5 f0 99", |
addAuth = """7d 86 5c 44 c0 6f 28 a6 46 b3 80 49 4b 50 """, |
pt = """f6 85 9a fb 79 8b 8a 4b a4 ad 6d 31 99 85 bc 42 |
9e 8f 0a fa """, |
kct = """fd f2 3f 1f c5 27 9e ec 06 b5 29 e7 69 96 da 50 |
f9 b3 16 5b 6b 27 2c c7 df 89 06 05 """) |
CCMtestVector( |
testCase = "KAT# 14 - AES_CCM 128 M= 8 L= 4", |
macSize = 8, |
key = "46 75 97 1a 48 d0 8c 5b c3 53 cb cd ba 82 e9 34", |
nonce = "37 b3 25 a9 8f 9c 1b d9 c9 3c f3", |
addAuth = """15 2d 76 """, |
pt = """83 ab 9d 98 """, |
kct = """db 12 ef 44 3e f0 a6 aa d4 2f 35 28 """) |
CCMtestVector( |
testCase = "KAT# 15 - AES_CCM 128 M= 8 L= 5", |
macSize = 8, |
key = "32 c6 33 dd 03 9e 4d 75 20 c7 40 ec 29 fa 75 9b", |
nonce = "53 f8 69 fe 27 9a f0 f9 f8 a6", |
addAuth = """2e e1 a3 04 cf 1d 3e 75 fe """, |
pt = """54 16 e3 52 bf d2 70 3d 24 2f 66 c1 ef 48 9e 49 |
bc 3c fe 3f ce 38 95 82 0e 87 """, |
kct = """11 62 22 64 5e 6c a0 d1 c9 95 3a 1b 00 04 59 4e |
3c 90 f0 56 c6 04 f5 37 7e 5a d3 c0 50 0b 33 3a |
4c 19 """) |
CCMtestVector( |
testCase = "KAT# 16 - AES_CCM 128 M= 8 L= 6", |
macSize = 8, |
key = "91 f2 47 2d 7a 12 1c 9c dd 4b 6c 90 80 67 5a 10", |
nonce = "20 aa 00 eb 1f ed cb c9 33", |
addAuth = """9d 52 4a e1 96 d8 ec 48 62 02 be 5c 45 45 67 2a """, |
pt = """e8 a8 29 8c 0b aa 91 90 34 7c eb 9a ab ff d8 3d |
48 86 e5 c2 53 e2 """, |
kct = """86 09 aa 4b 03 c5 67 99 a9 84 4d 4d 62 75 c0 bd |
09 43 f2 69 12 46 88 fa fd ae 6e 06 6a 73 """) |
CCMtestVector( |
testCase = "KAT# 17 - AES_CCM 128 M= 8 L= 7", |
macSize = 8, |
key = "e3 14 d7 0f 1f 9e 85 e7 d2 d6 59 6e 55 d4 f9 a8", |
nonce = "12 e4 a2 8a f7 f3 71 4d", |
addAuth = """f6 62 2e 59 32 f2 18 45 09 23 76 d4 a0 62 a1 5e |
4f aa 28 8b 84 35 bc d8 ac 5a 7e c4 44 e8 """, |
pt = """4b """, |
kct = """5a be a2 22 f4 13 94 50 27 """) |
CCMtestVector( |
testCase = "KAT# 18 - AES_CCM 128 M= 8 L= 8", |
macSize = 8, |
key = "50 53 8b 62 e8 14 02 c2 ee 11 8a 66 62 b4 77 07", |
nonce = "7e d7 94 53 e4 a1 8d", |
addAuth = """48 d5 42 89 16 be 95 29 35 37 b9 aa 08 """, |
pt = """60 43 8c c6 48 4d 6e d0 50 b0 1e 77 fd 8e 43 19 |
81 a2 33 6d 02 f8 cb 84 """, |
kct = """bf fa bd 07 33 ed 9f 6c 90 7c b6 32 0a bf 32 7e |
c3 a5 78 85 5b f2 e2 56 72 c9 3c cc a4 a3 f2 9c """) |
CCMtestVector( |
testCase = "KAT# 19 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "98 8a bd c2 3a 65 bb 5d cd 99 f9 42 67 d3 0b 45", |
nonce = "c7 8e 7d fa 21 24 5a 43 90 8f 80 b3 8b", |
addAuth = """ """, |
pt = """0a 33 d2 12 79 8c f1 32 c5 51 db fd 53 27 7e b4 |
c9 e5 cc 07 e3 c2 e8 1c 58 2e 7d a6 c4 b1 34 5a |
74 """, |
kct = """f3 1f 8e fa 43 b4 cf 36 1d 20 34 62 05 b0 cc fd |
c1 81 79 17 b4 99 c5 84 3e b6 6e c0 b9 6d 27 e5 |
85 9a a9 bd ae a8 00 d1 7a """) |
CCMtestVector( |
testCase = "KAT# 20 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "e0 d7 27 f8 10 5b 00 6d 88 22 96 89 5f 74 dc 0c", |
nonce = "e5 99 95 c7 ed 2a b0 35 7b 0e 7b fd b6", |
addAuth = """c5 """, |
pt = """d0 44 95 d5 24 bb a6 5e 87 f8 5b 00 d0 48 56 4f |
a2 04 df a9 9d 79 94 55 32 67 23 cd 7c 2f 7a 36 |
95 """, |
kct = """ee b1 9c c2 e1 a3 71 3a a0 eb 2f da 57 f3 d3 d8 |
e2 c8 2d e1 2f 39 49 5a ce 8e b0 5d 14 07 9a a2 |
04 e6 29 62 3b a3 a3 0b ea """) |
CCMtestVector( |
testCase = "KAT# 21 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "df 19 a2 25 47 cd 66 d8 75 16 de 8a 18 22 54 26", |
nonce = "c0 8c 9b 85 9a a1 86 50 89 59 2f 7c be", |
addAuth = """9e 27 """, |
pt = """16 5c 95 80 5b d4 ac a2 9d 4e 62 a2 84 31 1b 6f |
5f a9 b8 2d 27 23 88 f2 92 2d 9b 7e """, |
kct = """62 b3 51 dd bc e7 cd f5 80 e8 c8 fd 2b 79 e4 8e |
42 31 11 32 52 b8 6e 7e bd 7a 73 3f 0c 85 7f a6 |
5d 2e 14 4a """) |
CCMtestVector( |
testCase = "KAT# 22 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "b1 20 0c 9a 41 66 58 4d 08 1b 9d ee 30 9b 9e e7", |
nonce = "a7 89 88 53 2f 4c 75 0b 02 63 3f 1b d9", |
addAuth = """86 52 43 02 de 79 1d 5c 3e 3b 3f 93 b5 2c 75 """, |
pt = """92 0a a8 c6 d5 4e a8 d7 e6 c3 fb 9d 6d 9c 9f 8d |
bb 1c ab bb 41 59 d8 93 80 f5 53 40 89 """, |
kct = """2f 8c ac 1a b1 20 0c 0e 41 6c 95 91 b2 6e 89 07 |
75 9b 57 5a eb 90 76 14 f4 fe 64 bb 3c 45 ad 77 |
38 90 37 33 97 """) |
CCMtestVector( |
testCase = "KAT# 23 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "c1 56 c1 1d 02 ff 67 d7 72 bd d2 1f 33 59 12 be", |
nonce = "5b 1f e2 48 8e 6c fe 20 23 77 61 d9 d0", |
addAuth = """d9 da 29 4c d5 20 30 26 2e a0 10 25 e8 e4 20 1e """, |
pt = """ """, |
kct = """f1 22 23 f0 46 71 13 f1 """) |
CCMtestVector( |
testCase = "KAT# 24 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "1b 13 51 12 e0 2e 26 14 5a e5 55 0d 79 b1 5a fc", |
nonce = "70 00 f2 88 ef 21 d3 28 61 7a de da 5b", |
addAuth = """6b 27 87 7e cd 15 af 07 ea f3 06 4d c1 35 cd b9 |
64 """, |
pt = """2e 01 11 9a a1 e1 b6 95 cd 74 22 96 84 8d 0e f2 |
40 ba 3d 29 56 75 7b 43 """, |
kct = """b1 0d 5b a6 c6 9e bf 40 52 cc bf 5e 51 65 8c 95 |
3c 99 f3 9d 18 d8 34 f4 ed 7b b4 c9 7e 3a 6b 39 """) |
CCMtestVector( |
testCase = "KAT# 25 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "99 1c d1 06 71 c6 58 db fd 3e 86 b3 c2 51 ac 0f", |
nonce = "d8 ea cc b4 56 b7 ff 99 98 b4 59 bc b3", |
addAuth = """ed b9 79 05 b3 09 98 54 8f e1 05 d2 26 16 86 2d |
1d 2d dc c7 33 cd 71 fe b5 a7 53 ae ba eb b1 7d """, |
pt = """37 e6 72 ae 6a da 05 dd 88 9d """, |
kct = """db f0 80 9a 74 d3 c6 62 0b f4 c5 1c 91 6c 93 16 |
01 f2 """) |
CCMtestVector( |
testCase = "KAT# 26 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "5f c7 0b 97 11 75 ff bc 69 da e3 e8 bf 08 73 bd", |
nonce = "f8 bb 2c a4 db a6 59 98 d4 2a 28 56 c3", |
addAuth = """71 04 9a 00 2a 1b e2 5c 7b f2 85 8c 31 18 0d ce |
94 f1 8d 20 79 82 """, |
pt = """ """, |
kct = """0d 25 b4 0f 5a be 36 19 """) |
CCMtestVector( |
testCase = "KAT# 27 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "17 40 8b dc 9c 5e 13 94 29 35 dd 2e 7d bd 54 37", |
nonce = "14 7a 47 0d ff ab 27 4c ab a4 38 5d f2", |
addAuth = """ """, |
pt = """df """, |
kct = """dc 49 af 7a 17 61 ce e6 c7 """) |
CCMtestVector( |
testCase = "KAT# 28 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "96 c6 9e f0 99 fc e0 3d 12 fe 0d a0 67 71 6f 0c", |
nonce = "ed 65 37 be f8 08 79 83 78 53 5d 4a 4c", |
addAuth = """3a f1 fa c1 76 5a 19 29 cf 5c 5f 21 94 ac eb 3a |
6d 7e 07 ca 76 fd d7 2b 6f e4 51 f8 c9 b4 b4 c4 """, |
pt = """e0 35 """, |
kct = """d9 b4 34 ee cd 33 3a e8 6c 24 """) |
CCMtestVector( |
testCase = "KAT# 29 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "ca f7 8d 13 4b e2 09 8f 32 62 af 07 32 7c 9f c0", |
nonce = "88 f1 c3 89 76 70 b9 22 72 a1 ae 92 13", |
addAuth = """38 fa 4b bd ca 0b 8f bb 94 1d 23 a1 84 40 """, |
pt = """e2 16 5a """, |
kct = """36 59 64 75 bc a9 1f 8e a1 54 81 """) |
CCMtestVector( |
testCase = "KAT# 30 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "ea 76 e2 95 20 f6 cd 6a 7e 43 b1 5f e4 71 df 47", |
nonce = "68 1f 2c 11 7d 97 10 34 76 3c 3e c5 9b", |
addAuth = """d2 30 20 84 10 67 54 a5 82 32 75 """, |
pt = """4a 27 7e 05 """, |
kct = """88 cc 3d 7d 34 da 0b 2e ff 30 97 e5 """) |
CCMtestVector( |
testCase = "KAT# 31 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "f6 84 fd e0 d5 87 c9 24 66 e0 d3 d6 d6 05 7c ed", |
nonce = "aa 81 33 0b c8 f8 24 82 df 99 d7 57 6b", |
addAuth = """47 99 ee 5f 0c 60 6a 8a d5 1c 04 16 ce 19 63 """, |
pt = """49 7d 2b 08 01 """, |
kct = """c0 2c e4 d5 88 3e e5 36 4a d9 fc c0 ac """) |
CCMtestVector( |
testCase = "KAT# 32 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "75 29 fb 1c db d2 72 2f 14 89 d7 c8 48 29 72 d7", |
nonce = "17 35 b5 aa d2 90 97 28 2f e3 fa 11 37", |
addAuth = """7d 13 21 e4 5c 3c 79 a4 29 78 4c 5c 1f 8c c0 """, |
pt = """d8 94 34 c2 73 b7 """, |
kct = """09 b0 a7 5e 52 66 8c d3 6d 29 97 59 c7 ea """) |
CCMtestVector( |
testCase = "KAT# 33 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "63 9d ac 12 4a 9a 47 03 9c 2b 63 8f 66 48 0b b8", |
nonce = "2f 2d 59 97 8d 0e ef 44 3e 5a ce 50 9b", |
addAuth = """c4 35 4b f6 ca f3 48 4e 6f 2a f3 6f ed ff 1f dc |
0b """, |
pt = """0b 22 97 03 7c 02 9e """, |
kct = """b5 c3 f8 0f 56 b1 9d d8 2c f0 f0 cf dd 7a 22 """) |
CCMtestVector( |
testCase = "KAT# 34 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "25 69 2d 57 e1 de d4 f5 08 34 40 98 c8 fc 70 1e", |
nonce = "a2 db d6 96 04 25 2c 2f d6 3e e7 a9 6b", |
addAuth = """d4 fd 14 f8 18 57 """, |
pt = """69 12 08 9c 94 60 c1 25 """, |
kct = """81 58 32 b4 97 2d 35 e8 0e 9c 10 c0 e0 6b 58 64 """) |
CCMtestVector( |
testCase = "KAT# 35 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "f6 92 a4 95 3e b4 97 c1 cc f1 a1 47 ad 12 59 f1", |
nonce = "e6 cd 88 fd 72 96 90 68 02 24 9d 5c b8", |
addAuth = """db 1b f5 a4 56 93 74 fd cf 34 eb """, |
pt = """fc dc 43 ed 68 17 37 ac 8d """, |
kct = """ba d6 85 af 4c 35 15 03 26 6f 97 69 4f 54 62 7f |
ed """) |
CCMtestVector( |
testCase = "KAT# 36 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "94 c6 17 0a 9b d0 c6 dc e5 66 7b be 9f e9 4e 5d", |
nonce = "b2 bb 6a aa c5 88 ce fb 4e fc c6 2b 61", |
addAuth = """a4 d9 a5 be 4f ee d2 bc eb 0d 9e 59 75 19 72 98 |
f3 be 45 6a 23 ef a9 c7 ed 56 14 """, |
pt = """aa d9 7b 99 47 22 07 9a 25 30 """, |
kct = """11 d7 a8 6e 94 9c 06 d2 48 15 60 2d ca a1 a1 8c |
be 48 """) |
CCMtestVector( |
testCase = "KAT# 37 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "13 28 d8 ea cf 6f 77 da 12 24 72 5b bb 07 43 d2", |
nonce = "21 43 19 d3 f8 67 20 f6 53 3a f5 f1 6c", |
addAuth = """60 1b 7c aa d5 54 1e 9a 7e ea fa """, |
pt = """d5 87 65 96 de 32 a1 e7 85 83 78 """, |
kct = """22 1c f0 92 45 71 38 e7 00 21 af 45 d3 31 28 01 |
69 3a 47 """) |
CCMtestVector( |
testCase = "KAT# 38 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "54 7b 02 1b ef 8c 1c 0f f1 04 ba 1d bf 0e 2c 0b", |
nonce = "f7 a8 59 5b d6 5d 23 e9 cb 17 b1 e1 92", |
addAuth = """ """, |
pt = """64 8c ec 53 c4 79 fe 41 53 17 ba 8e """, |
kct = """6f 52 93 85 89 87 15 21 29 d5 dd 85 0d dc 3d 58 |
60 fb 8a b2 """) |
CCMtestVector( |
testCase = "KAT# 39 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "31 4b 5f 29 01 80 0f 0a 6a 4f ad 8d d1 9b b1 13", |
nonce = "2a a9 31 4e c4 ef 5b 71 b5 3b 2c da 17", |
addAuth = """92 52 e0 44 24 d5 29 f0 00 96 6b a8 87 90 0c 07 |
eb c1 a8 51 02 f0 d0 07 80 20 3d """, |
pt = """40 8d 60 be f0 3c b1 8a 1f 4f 40 5d 9f """, |
kct = """99 a7 5d db a3 72 9f c7 41 22 ba e0 25 4b 7f ba |
05 a1 4b cf 09 """) |
CCMtestVector( |
testCase = "KAT# 40 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "b7 32 3f 57 b7 e5 3d b7 4e bd e0 88 d2 d3 e1 61", |
nonce = "4e 78 a2 6b 45 93 d0 96 9c 8f 9f 63 c1", |
addAuth = """f6 fb 75 4a eb 40 7a 91 6a d8 2c 27 13 01 97 9f |
85 ff 01 80 8e 51 67 29 15 e5 72 """, |
pt = """46 64 14 a0 82 4e 25 9d ef 30 9d 9a 1b 54 """, |
kct = """f9 a1 27 c7 67 4b 39 ea 50 30 c3 eb 45 b1 ff b8 |
b4 5c 86 72 b2 7b """) |
CCMtestVector( |
testCase = "KAT# 41 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "48 28 39 bc 82 e9 4a d1 55 8f b6 79 0b 3e 36 6f", |
nonce = "b8 ed 08 17 e6 f6 df 07 5e f7 87 d2 ef", |
addAuth = """3c 16 89 0f 70 b2 1c ab ba 2b a7 84 35 b0 66 2a |
b6 1c db 78 42 """, |
pt = """52 13 fe 0f 90 8c c5 69 a1 6e 48 c8 c5 d3 92 """, |
kct = """c0 64 0e a7 0a d5 46 f7 3e 7e 44 5f 96 78 f5 57 |
36 22 d9 77 74 93 a4 """) |
CCMtestVector( |
testCase = "KAT# 42 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "73 62 b6 9c e4 dd 9f 02 75 36 9a 60 24 e5 96 69", |
nonce = "c0 a7 67 e3 ba 5c 5d 86 10 6e eb f4 9f", |
addAuth = """2e 37 47 00 22 cc 59 91 a4 a4 13 a0 d8 5a c1 ef |
eb 9a 4a """, |
pt = """16 6a 40 a6 70 60 b2 a6 58 af 1a d5 73 8f 7d 12 """, |
kct = """90 42 65 e5 35 01 bf dd 93 71 87 bd 4c 6c 29 bf |
85 b1 c2 7a 92 70 bb c1 """) |
CCMtestVector( |
testCase = "KAT# 43 - AES_CCM 128 M= 8 L= 2", |
macSize = 8, |
key = "63 de fa 62 5f 45 09 34 78 8f b4 1b 32 69 cc 94", |
nonce = "7f 9d 39 9d 87 26 be f8 10 71 92 90 30", |
addAuth = """ee 42 eb """, |
pt = """0f 3c 27 63 46 fe 7a 72 ad 46 6b 39 a5 62 d5 52 |
5a """, |
kct = """68 72 5d 02 05 49 78 34 6a 7b f5 4e df c6 e6 d8 |
e6 6c 5c 7e e0 3d f8 0a b0 """) |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/ccm.py |
---|
0,0 → 1,242 |
""" crypto.cipher.ccm |
CCM block cipher mode |
The CCM class can wrap any BlockCipher to create a 'CCM' mode |
that provides encryption with a strong integrity check. The |
integrity check can optionally include unencrypted 'addAuthData'. |
CCM requires a nonce that MUST NEVER repeat for a given key. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.base import BlockCipherWithIntegrity, noPadding |
from crypto.common import xor |
from struct import unpack, pack |
from crypto.errors import InitCryptoError, EncryptError, DecryptError, IntegrityCheckError |
class CCM(BlockCipherWithIntegrity): |
""" The CCM class wraps block ciphers to provide integrity and encryption. |
CCM provides both encryption and a strong integrity check. The |
integrity check can optionally include "additional authentication |
data" that is included in the message integrity check, but is not encrypted. |
CCM is composed of two passes of the same base cipher, first |
the instance calculates a CBC Message Authentication Check, |
and then the same algorithm instance is used for the CTR |
(counter) mode encryption. |
This algorithm mode does NOT support streams of data (moreData flag) |
since a full packet must be available for the two pass CBC_MAC |
and CTR encryption process. |
When decrypting, a 'DecryptIntegrityError' exception is raised |
if the integrity check fails. |
>> aes_ccm = CCM(AES(key)) |
>> cipherText = aes_ccm.encrypt(plainText, nonce) |
>> try: |
>> decryptedText = aes_ccm.decrypt(cipherText, nonce) |
>> except IntegrityCheckError: |
>> print 'failed integrity check' |
or ... |
>> cipherText = aes_ccm.encrypt(plainText, nonce, addAuthData=header) |
>> try: |
>> decryptedText = aes_ccm.decrypt(cipherText, nonce, addAuthData=header) |
>> except IntegrityCheckError: |
>> print 'failed integrity check' |
""" |
def __init__(self, blockCipherInstance, autoNonce=None, macSize=8, nonceSize=13): |
""" CCM algorithms are created by initializing with a BlockCipher instance |
blockCipherInstance -> typically AES_ECB |
autoNonce -> sets the intial value of a nonce for automatic nonce |
creation (not available yet) |
macSize -> size of MAC field can be = 4, 6, 8, 10, 12, 14, or 16 |
nonceSize -> size of nonce in bytes (default 13) |
the counter size is blockSize-nonceSize-1 |
""" |
self.baseCipher = blockCipherInstance |
self.name = self.baseCipher.name + '_CCM' |
self.blockSize = self.baseCipher.blockSize |
self.keySize = self.baseCipher.keySize |
self.baseCipher.padding = noPadding() # baseCipher should NOT pad!! |
self.M = macSize # Number of octets |
if not((3 < self.M < 17) and (macSize%2==0)) : |
raise InitCryptoError, 'CCM, M (size of auth field) is out of bounds' |
self.nonceSize = nonceSize |
self.L = self.baseCipher.blockSize - self.nonceSize - 1 |
if not(1 < self.L < 9) : |
raise InitCryptoError, 'CCM, L (size of length field) is out of bounds' |
self.reset() |
def setKey(self, key): |
self.baseCipher.setKey(key) |
self.reset() |
# Overload to reset both CCM state and the wrapped baseCipher |
def resetEncrypt(self): |
BlockCipherWithIntegrity.resetEncrypt(self) # reset CCM encrypt state (super class) |
self.baseCipher.resetEncrypt() # reset base cipher encrypt state |
def resetDecrypt(self): |
BlockCipherWithIntegrity.resetDecrypt(self) # reset CBC state (super class) |
self.baseCipher.resetEncrypt() # CCM uses encryption of base cipher to decrypt! |
def encrypt(self, plainText, nonce, addAuthData=''): |
""" CCM encryption of plainText |
nonce must be unique for each encryption, if set to none |
it will maintain it's own nonce creation |
addAuthData is optional """ |
# construct authentication block zero |
# flag byte fields |
Adata = ((len(addAuthData))>0) << 6 # bit 6 is 1 if auth |
Mfield = ((self.M-2)/2) << 3 # bits 5,4,3 encode macSize |
Lfield = self.L-1 # bits 2,1,0 encode L size = blockSize-nonceSize-1 |
flagsByte = chr(Adata^Mfield^Lfield) |
if len(nonce) != self.nonceSize : |
raise EncryptError, 'wrong sized nonce' |
lenMessage = len(plainText) |
if lenMessage >= 1L<<(8*self.L): |
raise EncryptError, 'CCM plainText too long for given L field size' |
packedLenMessage = pack('!Q', lenMessage)[-self.L:] # pack and truncate to L bytes |
blockZero = flagsByte+nonce+packedLenMessage |
if len(blockZero) != self.baseCipher.blockSize: |
raise EncryptError, 'CCM bad size of first block' |
authLengthField = self._encodeAuthLength(len(addAuthData)) |
cbcInput = blockZero+authLengthField+addAuthData |
authPadSize = self.baseCipher.blockSize-((len(cbcInput)-1)%self.baseCipher.blockSize)-1 |
cbcInput = cbcInput + authPadSize*chr(0) # pad to block size with zeros |
cbcInput = cbcInput + plainText |
cbcEndPad = chr(0x00)*((self.blockSize-((len(cbcInput))%self.blockSize))%self.blockSize) |
cbcInput = cbcInput + cbcEndPad |
# Calculate CBC_MAC |
numCbcBlocks,extra = divmod(len(cbcInput),self.blockSize) |
assert (extra==0), 'bad block size on cbc_mac calculation' |
cbcMicValue = self.blockSize*chr(0x00) |
for i in range(numCbcBlocks) : |
cbcBlock = cbcInput[i*self.blockSize:(i+1)*self.blockSize] |
cbcMicValue = self.baseCipher.encrypt( xor(cbcMicValue, cbcBlock) ) |
counter = 0L |
# the counter mode preload with counter starting at zero |
ctrModePl = chr(self.L-1)+ nonce + pack('>Q', counter)[-self.L:] |
ccmMIC = xor(self.baseCipher.encrypt(ctrModePl),cbcMicValue)[:self.M] # first M bytes of xor |
ct = '' |
numCtrBlocks,extra = divmod(len(plainText)+self.blockSize,self.blockSize) |
while counter < numCtrBlocks : |
counter = counter + 1L |
ctrModePl = chr(self.L-1) + nonce + pack('>Q', counter)[-self.L:] |
ct = ct + xor(self.baseCipher.encrypt(ctrModePl), plainText[(counter-1)*16:counter*16] ) |
ct = ct + ccmMIC |
return ct |
def decrypt(self, cipherText, nonce, addAuthData=''): |
""" CCM decryption of cipherText |
nonce must be unique for each encryption, if set to none |
it will maintain it's own nonce creation |
the nonce is then included in the cipher text |
addAuthData is option """ |
# construct authentication block zero |
# flag byte fields |
Adata = ((len(addAuthData))>0) << 6 # bit 6 is 1 if auth |
Mfield = ((self.M-2)/2) << 3 # bits 5,4,3 encode macSize |
Lfield = self.L-1 # bits 2,1,0 encode L size = blockSize-nonceSize-1 |
flagsByte = chr(Adata^Mfield^Lfield) |
if len(nonce) != self.nonceSize : |
raise DecryptError, 'wrong sized nonce' |
lenMessage = len(cipherText)-self.M |
if lenMessage >= 1L<<(8*self.L): |
raise DecryptError, 'CCM cipherText too long for given L field size' |
if lenMessage < 0 : |
raise DecryptError, 'Too small of cipherText for MIC size' |
packedLenMessage = pack('!Q', lenMessage)[-self.L:] # pack and truncate to L bytes |
pt = '' |
ct = cipherText[:-self.M] # trim of MIC field |
numCtrBlocks,extra = divmod(len(ct)+self.blockSize,self.blockSize) |
for counter in range(1, numCtrBlocks+1) : |
ctrModePl = chr(self.L-1) + nonce + pack('>Q', counter)[-self.L:] |
ctr = self.baseCipher.encrypt(ctrModePl) |
ctBlock = ct[(counter-1)*self.blockSize:counter*self.blockSize] |
pt = pt + xor( ctr, ctBlock ) |
#------- CBC Mac Calculation |
blockZero = flagsByte+nonce+packedLenMessage |
if len(blockZero) != self.baseCipher.blockSize: |
raise DecryptError, 'CCM bad size of first block' |
authLengthField = self._encodeAuthLength(len(addAuthData)) |
cbcInput = blockZero+authLengthField+addAuthData |
authPadSize = self.baseCipher.blockSize-((len(cbcInput)-1)%self.baseCipher.blockSize)-1 |
cbcInput = cbcInput + authPadSize*chr(0) # pad to block size with zeros |
cbcInput = cbcInput + pt |
cbcEndPad = chr(0x00)*((self.blockSize-((len(cbcInput))%self.blockSize))%self.blockSize) |
cbcInput = cbcInput + cbcEndPad |
# Calculate CBC_MAC |
numCbcBlocks,extra = divmod(len(cbcInput),self.blockSize) |
assert (extra==0), 'bad block size on cbc_mac calculation' |
cbcMicValue = self.blockSize*chr(0x00) |
for i in range(numCbcBlocks) : |
cbcBlock = cbcInput[i*self.blockSize:(i+1)*self.blockSize] |
cbcMicValue = self.baseCipher.encrypt( xor(cbcMicValue, cbcBlock) ) |
ctrModePl0 = chr(self.L-1)+ nonce + pack('>Q', 0)[-self.L:] |
ccmMIC = xor(self.baseCipher.encrypt(ctrModePl0),cbcMicValue)[:self.M] # first 8 bytes of xor |
if ccmMIC != cipherText[-self.M:] : |
raise IntegrityCheckError, 'CCM Integrity check failed on decrypt' |
return pt |
def _encodeAuthLength(self, length): |
""" construct byte string representing length, returns 2 to 10 bytes """ |
if length < 0 : |
raise EncryptError, 'CCM illegal length value' |
elif 0 <= length < 0xFF00: |
byteString = pack('!H', length) # pack into two bytes |
elif 0xFF00 <= length < 0x100000000L: |
byteString = pack('!HI',0xFFFE, length) # pack into 0xFFFE + four bytes |
elif 0x100000000L <= length < 0x10000000000000000L: |
byteString = pack('!HQ',0xFFFF, length) # pack into 0xFFFF + eigth bytes |
else: |
raise EncryptError, 'CCM length error' |
return byteString |
def _decodeAuthLength(self, byteString): |
""" decode byte string representing length, returns length |
Only the first 2 to 10 bytes of the byte string are examined """ |
firstTwoOctets == unpack('!H',bytesString[0:2]) # two bytes used for length |
if firstTwoOctets == 0: |
raise DecryptError, 'CCM auth length zero with auth bit set' |
elif 0 < firstTwoOctets < 0xFEFF: |
messageLength == firstTwoOctets |
elif 0xFEFF < firstTwoOctets < 0xFFFE: |
raise DecryptError, 'CCM auth length illegal values' |
elif firstTwoOctets == 0xFFFE: |
messageLength = unpack('!I',byteString[2:6]) # four bytes used for length |
elif firstTwoOctets == 0xFFFF: |
messageLength = unpack('!Q',byteString[2:10]) # eight bytes used for length |
else: |
raise DecryptError, 'CCM auth length error' |
return messageLength |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/aes_sbox_analysis.py |
---|
0,0 → 1,104 |
#! /usr/bin/env python |
""" crypto.cipher.aes_sbox_analysis |
AES Sbox Analysis - a simple analysis of the AES Sbox that determines |
the number and size of the permutation subgroups in the transformation. |
Could be extended to examine any Sbox ... |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-12-05 Added validation of equation form of AES |
2002-06-01 Original |
""" |
# The AES Sbox |
sbbytes = (0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5, |
0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, |
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0, |
0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, |
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc, |
0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, |
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a, |
0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, |
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0, |
0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, |
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b, |
0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, |
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85, |
0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8, |
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5, |
0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2, |
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17, |
0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73, |
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88, |
0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb, |
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c, |
0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79, |
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9, |
0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08, |
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6, |
0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a, |
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e, |
0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e, |
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94, |
0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, |
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68, |
0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16) |
def groups(subbytes): |
gdict={} # a dictionary of the cycles indexed by the first cycle element |
touched=[0 for i in range(len(subbytes))] |
for i in range(len(sbbytes)): |
touched.append(0) |
for i in range(len(sbbytes)): |
element = i |
cycle = [] |
if not touched[element]: |
for j in range (i,len(sbbytes)): |
touched[element] = 1 |
cycle.append(element) |
element = sbbytes[element] |
if element == i: |
break |
gdict[cycle[1]]=cycle |
else: |
pass |
return gdict |
def grpv(subbytes): |
"""" Returns a list of tuples (cycle start, cycle size) """ |
v=[] |
z=groups(subbytes) |
for i in z.keys(): |
v.append( [i, len(z[i])] ) |
return v |
def sgv(subbytes): |
x = grpv(subbytes) |
sum = 0 |
for i in x: |
sum = sum + i[1] |
return sum |
def main(): |
cycles = grpv(sbbytes) |
print 'The AES sbox contains ', |
print len(cycles), |
print 'permutation subgroups' |
print 'The AES sbox subgroups (start, length) are:' |
print cycles |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/trolldoll.py |
---|
0,0 → 1,84 |
""" crypto.cipher.trolldoll |
Modification to Icedoll to take advantage of the better error extension |
and provide a IV for randomization of the output and integrity checking. |
IV is simply prepended to plaintext. |
Integrity check is appended to the end of the plain text as |
zeros with count of the blocks in the ciphertext. |
Note !!!! auto IV uses python default random :-( |
should not be 'too bad' (tm) for this applicaiton |
ALso ... currently just IV .... in test .. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.icedoll import Icedoll |
from crypto.errors import IntegrityCheckError |
from random import Random # should change to crypto.random!!! |
class Trolldoll(Icedoll): |
""" Trolldoll encryption algorithm |
based on Icedoll, which is based on Rijndael |
Trolldoll adds an 'IV' and integrity checking to Icedoll |
""" |
def __init__(self,key=None,keySize=32,blockSize=32,tapRound=6,extraRounds=6,micSize=16,ivSize=16): |
""" """ |
Icedoll.__init__(self,key=None,keySize=32,blockSize=32,tapRound=6,extraRounds=6) |
self.name = 'TROLLDOLL' |
self.micSize = micSize |
self.ivSize = ivSize |
self.r = Random() # for IV generation |
import time |
newSeed = time.ctime()+str(self.r) # seed with instance location |
self.r.seed(newSeed) # to make unique |
self.reset() |
def reset(self): |
Icedoll.reset(self) |
self.hasIV = None |
def _makeIV(self): |
return self.ivSize*'a' |
def _makeIC(self): |
""" Make the integrity check """ |
return self.micSize*chr(0x00) |
def _verifyIC(self,integrityCheck): |
""" Verify the integrity check """ |
if self.micSize*chr(0x00) == integrityCheck : |
return 1 # matches |
else: |
return 0 # fails |
def encrypt(self, plainText, more=None): |
""" """ |
if not(self.hasIV): # On first call to encrypt put in an IV |
plainText = self._makeIV() + plainText # add the 'IV' |
self.hasIV = 1 |
if more == None: # on last call to encrypt append integrity check |
plainText = plainText + self._makeIC() |
return Icedoll.encrypt(self, plainText, more=more) |
def decrypt(self, cipherText, more=None): |
""" Decrypt cipher text, Icedoll automatically removes |
prepended random bits used as IV. |
Note - typically IV is directly used as the first |
cipher text. Here the IV is prepended to the plaintext |
prior to encryption and removed on decryption. |
""" |
plainText = Icedoll.decrypt(self, cipherText, more=more) |
if not(self.hasIV): # on first call to decrypt remove IV |
plainText = plainText[self.ivSize:] # remove the IV |
self.hasIV = 1 |
if more == None: # on last call to encrypt append integrity check |
if not(self._verifyIC(plainText[-self.micSize:])) : |
raise IntegrityCheckError, 'Trolldoll MIC Failure, bad key or modified data' |
plainText = plainText[:-self.micSize] # trim off the integrity check |
return plainText |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/aes_test.py |
---|
0,0 → 1,1581 |
#! /usr/bin/env python |
""" crypto.cipher.aes_test |
Tests for AES encryption algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import unittest |
from crypto.cipher.aes import AES |
from crypto.cipher.base import noPadding |
from binascii import a2b_hex, b2a_hex |
class AES_TestVectors(unittest.TestCase): |
""" Test AES algorithm using know values.""" |
def testAES_KAT(self): |
""" Run AES know answer tests from hex input """ |
def AEStestVector(i, key, pt, ct): |
""" Test vectors provide test name(i), key, plain text (pt) and know cipher text (ct) """ |
bkey, plainText, knownCipherText = a2b_hex(key), a2b_hex(pt), a2b_hex(ct) |
kSize = len(bkey) |
alg = AES(bkey, keySize=kSize, padding=noPadding()) |
self.assertEqual( alg.encrypt(plainText), knownCipherText ) |
self.assertEqual( alg.decrypt(knownCipherText), plainText ) |
""" AES tests using FIPS example vectors """ |
AEStestVector( i = 'NIST Example', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '3925841d02dc09fbdc118597196a0b32') |
AEStestVector( i = 'NIST 128 bit encrypt decrypt example', |
key = '000102030405060708090a0b0c0d0e0f', |
pt = '00112233445566778899aabbccddeeff', |
ct = '69c4e0d86a7b0430d8cdb78070b4c55a') |
""" AES Known Answer Tests with Variable Text (block size only 128) from ecb_vt.txt""" |
AEStestVector( i = 'aes-ecb-vt-128-1', |
key = '00000000000000000000000000000000', |
pt = '80000000000000000000000000000000', |
ct = '3AD78E726C1EC02B7EBFE92B23D9EC34') |
AEStestVector( i = 'aes-ecb-vt-128-2', |
key = '00000000000000000000000000000000', |
pt = '40000000000000000000000000000000', |
ct = '45BC707D29E8204D88DFBA2F0B0CAD9B') |
AEStestVector( i = 'aes-ecb-vt-128-3', |
key = '00000000000000000000000000000000', |
pt = '20000000000000000000000000000000', |
ct = '161556838018F52805CDBD6202002E3F') |
AEStestVector( i = 'aes-ecb-vt-128-4', |
key = '00000000000000000000000000000000', |
pt = '10000000000000000000000000000000', |
ct = 'F5569B3AB6A6D11EFDE1BF0A64C6854A') |
AEStestVector( i = 'aes-ecb-vt-128-5', |
key = '00000000000000000000000000000000', |
pt = '08000000000000000000000000000000', |
ct = '64E82B50E501FBD7DD4116921159B83E') |
AEStestVector( i = 'aes-ecb-vt-128-6', |
key = '00000000000000000000000000000000', |
pt = '04000000000000000000000000000000', |
ct = 'BAAC12FB613A7DE11450375C74034041') |
AEStestVector( i = 'aes-ecb-vt-128-7', |
key = '00000000000000000000000000000000', |
pt = '02000000000000000000000000000000', |
ct = 'BCF176A7EAAD8085EBACEA362462A281') |
AEStestVector( i = 'aes-ecb-vt-128-8', |
key = '00000000000000000000000000000000', |
pt = '01000000000000000000000000000000', |
ct = '47711816E91D6FF059BBBF2BF58E0FD3') |
AEStestVector( i = 'aes-ecb-vt-128-9', |
key = '00000000000000000000000000000000', |
pt = '00800000000000000000000000000000', |
ct = 'B970DFBE40698AF1638FE38BD3DF3B2F') |
AEStestVector( i = 'aes-ecb-vt-128-10', |
key = '00000000000000000000000000000000', |
pt = '00400000000000000000000000000000', |
ct = 'F95B59A44F391E14CF20B74BDC32FCFF') |
AEStestVector( i = 'aes-ecb-vt-128-11', |
key = '00000000000000000000000000000000', |
pt = '00200000000000000000000000000000', |
ct = '720F74AE04A2A435B9A7256E49378F5B') |
AEStestVector( i = 'aes-ecb-vt-128-12', |
key = '00000000000000000000000000000000', |
pt = '00100000000000000000000000000000', |
ct = '2A0445F61D36BFA7E277070730CF76DA') |
AEStestVector( i = 'aes-ecb-vt-128-13', |
key = '00000000000000000000000000000000', |
pt = '00080000000000000000000000000000', |
ct = '8D0536B997AEFEC1D94011BAB6699A03') |
AEStestVector( i = 'aes-ecb-vt-128-14', |
key = '00000000000000000000000000000000', |
pt = '00040000000000000000000000000000', |
ct = '674F002E19F6ED47EFF319E51FAD4498') |
AEStestVector( i = 'aes-ecb-vt-128-15', |
key = '00000000000000000000000000000000', |
pt = '00020000000000000000000000000000', |
ct = '292C02C5CB9163C80AC0F6CF1DD8E92D') |
AEStestVector( i = 'aes-ecb-vt-128-16', |
key = '00000000000000000000000000000000', |
pt = '00010000000000000000000000000000', |
ct = 'FA321CF18EF5FE727DD82A5C1E945141') |
AEStestVector( i = 'aes-ecb-vt-128-17', |
key = '00000000000000000000000000000000', |
pt = '00008000000000000000000000000000', |
ct = 'A5A7AFE1034C39CCCEBE3C584BC0BE05') |
AEStestVector( i = 'aes-ecb-vt-128-18', |
key = '00000000000000000000000000000000', |
pt = '00004000000000000000000000000000', |
ct = '4FF5A52E697E77D081205DBDB21CEA39') |
AEStestVector( i = 'aes-ecb-vt-128-19', |
key = '00000000000000000000000000000000', |
pt = '00002000000000000000000000000000', |
ct = '209E88DC94C9003000CE0769AF7B7166') |
AEStestVector( i = 'aes-ecb-vt-128-20', |
key = '00000000000000000000000000000000', |
pt = '00001000000000000000000000000000', |
ct = '5DEE41AF864CB4B650E5F51551824D38') |
AEStestVector( i = 'aes-ecb-vt-128-21', |
key = '00000000000000000000000000000000', |
pt = '00000800000000000000000000000000', |
ct = 'A79A63FA7E4503AE6D6E09F5F9053030') |
AEStestVector( i = 'aes-ecb-vt-128-22', |
key = '00000000000000000000000000000000', |
pt = '00000400000000000000000000000000', |
ct = 'A48316749FAE7FAC7002031A6AFD8BA7') |
AEStestVector( i = 'aes-ecb-vt-128-23', |
key = '00000000000000000000000000000000', |
pt = '00000200000000000000000000000000', |
ct = 'D6EEE8A7357A0E1D64262CA9C337AC42') |
AEStestVector( i = 'aes-ecb-vt-128-24', |
key = '00000000000000000000000000000000', |
pt = '00000100000000000000000000000000', |
ct = 'B013CA8A62A858053E9FB667ED39829E') |
AEStestVector( i = 'aes-ecb-vt-128-25', |
key = '00000000000000000000000000000000', |
pt = '00000080000000000000000000000000', |
ct = 'DF6EA9E4538A45A52D5C1A43C88F4B55') |
AEStestVector( i = 'aes-ecb-vt-128-26', |
key = '00000000000000000000000000000000', |
pt = '00000040000000000000000000000000', |
ct = '7D03BA451371591D3FD5547D9165C73B') |
AEStestVector( i = 'aes-ecb-vt-128-27', |
key = '00000000000000000000000000000000', |
pt = '00000020000000000000000000000000', |
ct = '0E0426281A6277E186499D365D5F49FF') |
AEStestVector( i = 'aes-ecb-vt-128-28', |
key = '00000000000000000000000000000000', |
pt = '00000010000000000000000000000000', |
ct = 'DBC02169DD2059E6CC4C57C1FEDF5AB4') |
AEStestVector( i = 'aes-ecb-vt-128-29', |
key = '00000000000000000000000000000000', |
pt = '00000008000000000000000000000000', |
ct = '826590E05D167DA6F00DCC75E22788EB') |
AEStestVector( i = 'aes-ecb-vt-128-30', |
key = '00000000000000000000000000000000', |
pt = '00000004000000000000000000000000', |
ct = '34A73F21A04421D9786335FAAB49423A') |
AEStestVector( i = 'aes-ecb-vt-128-31', |
key = '00000000000000000000000000000000', |
pt = '00000002000000000000000000000000', |
ct = 'ED347D0E0128EE1A7392A1D36AB78AA9') |
AEStestVector( i = 'aes-ecb-vt-128-32', |
key = '00000000000000000000000000000000', |
pt = '00000001000000000000000000000000', |
ct = 'EE944B2FE6E9FC888042608DA9615F75') |
AEStestVector( i = 'aes-ecb-vt-128-33', |
key = '00000000000000000000000000000000', |
pt = '00000000800000000000000000000000', |
ct = '9E7C85A909EF7218BA7947CFB4718F46') |
AEStestVector( i = 'aes-ecb-vt-128-34', |
key = '00000000000000000000000000000000', |
pt = '00000000400000000000000000000000', |
ct = '811AE07A0B2B1F816587FA73699AE77D') |
AEStestVector( i = 'aes-ecb-vt-128-35', |
key = '00000000000000000000000000000000', |
pt = '00000000200000000000000000000000', |
ct = '68466FBF43C2FE13D4B18F7EC5EA745F') |
AEStestVector( i = 'aes-ecb-vt-128-36', |
key = '00000000000000000000000000000000', |
pt = '00000000100000000000000000000000', |
ct = 'D20B015C7191B219780956E6101F9354') |
AEStestVector( i = 'aes-ecb-vt-128-37', |
key = '00000000000000000000000000000000', |
pt = '00000000080000000000000000000000', |
ct = '5939D5C1BBF54EE1B3E326D757BDDE25') |
AEStestVector( i = 'aes-ecb-vt-128-38', |
key = '00000000000000000000000000000000', |
pt = '00000000040000000000000000000000', |
ct = 'B1FDAFE9A0240E8FFEA19CE94B5105D3') |
AEStestVector( i = 'aes-ecb-vt-128-39', |
key = '00000000000000000000000000000000', |
pt = '00000000020000000000000000000000', |
ct = 'D62962ECE02CDD68C06BDFEFB2F9495B') |
AEStestVector( i = 'aes-ecb-vt-128-40', |
key = '00000000000000000000000000000000', |
pt = '00000000010000000000000000000000', |
ct = 'B3BB2DE6F3C26587BA8BAC4F7AD9499A') |
AEStestVector( i = 'aes-ecb-vt-128-41', |
key = '00000000000000000000000000000000', |
pt = '00000000008000000000000000000000', |
ct = 'E0B1072D6D9FF703D6FBEF77852B0A6B') |
AEStestVector( i = 'aes-ecb-vt-128-42', |
key = '00000000000000000000000000000000', |
pt = '00000000004000000000000000000000', |
ct = 'D8DD51C907F478DE0228E83E61FD1758') |
AEStestVector( i = 'aes-ecb-vt-128-43', |
key = '00000000000000000000000000000000', |
pt = '00000000002000000000000000000000', |
ct = 'A42DFFE6E7C1671C06A25236FDD10017') |
AEStestVector( i = 'aes-ecb-vt-128-44', |
key = '00000000000000000000000000000000', |
pt = '00000000001000000000000000000000', |
ct = '25ACF141550BFAB9EF451B6C6A5B2163') |
AEStestVector( i = 'aes-ecb-vt-128-45', |
key = '00000000000000000000000000000000', |
pt = '00000000000800000000000000000000', |
ct = '4DA7FCA3949B16E821DBC84F19581018') |
AEStestVector( i = 'aes-ecb-vt-128-46', |
key = '00000000000000000000000000000000', |
pt = '00000000000400000000000000000000', |
ct = '7D49B6347CBCC8919C7FA96A37A7A215') |
AEStestVector( i = 'aes-ecb-vt-128-47', |
key = '00000000000000000000000000000000', |
pt = '00000000000200000000000000000000', |
ct = '900024B29A08C6721B95BA3B753DDB4D') |
AEStestVector( i = 'aes-ecb-vt-128-48', |
key = '00000000000000000000000000000000', |
pt = '00000000000100000000000000000000', |
ct = '6D2182FB283B6934D90BA7848CAB5E66') |
AEStestVector( i = 'aes-ecb-vt-128-49', |
key = '00000000000000000000000000000000', |
pt = '00000000000080000000000000000000', |
ct = 'F73EF01B448D23A4D90DE8B2F9666E7A') |
AEStestVector( i = 'aes-ecb-vt-128-50', |
key = '00000000000000000000000000000000', |
pt = '00000000000040000000000000000000', |
ct = '4AD9CDA2418643E9A3D926AF5E6B0412') |
AEStestVector( i = 'aes-ecb-vt-128-51', |
key = '00000000000000000000000000000000', |
pt = '00000000000020000000000000000000', |
ct = '7CAEC8E7E5953997D545B033201C8C5B') |
AEStestVector( i = 'aes-ecb-vt-128-52', |
key = '00000000000000000000000000000000', |
pt = '00000000000010000000000000000000', |
ct = '3C43CA1F6B6864503E27B48D88230CF5') |
AEStestVector( i = 'aes-ecb-vt-128-53', |
key = '00000000000000000000000000000000', |
pt = '00000000000008000000000000000000', |
ct = '44F779B93108FE9FEEC880D79BA74488') |
AEStestVector( i = 'aes-ecb-vt-128-54', |
key = '00000000000000000000000000000000', |
pt = '00000000000004000000000000000000', |
ct = '9E50E8D9CFD3A682A78E527C9072A1CF') |
AEStestVector( i = 'aes-ecb-vt-128-55', |
key = '00000000000000000000000000000000', |
pt = '00000000000002000000000000000000', |
ct = '68D000CBC838BBE3C505D6F814C01F28') |
AEStestVector( i = 'aes-ecb-vt-128-56', |
key = '00000000000000000000000000000000', |
pt = '00000000000001000000000000000000', |
ct = '2CB2A9FEC1ACD1D9B0FA05205E304F57') |
AEStestVector( i = 'aes-ecb-vt-128-57', |
key = '00000000000000000000000000000000', |
pt = '00000000000000800000000000000000', |
ct = '01EB2806606E46444520A5CC6180CD4B') |
AEStestVector( i = 'aes-ecb-vt-128-58', |
key = '00000000000000000000000000000000', |
pt = '00000000000000400000000000000000', |
ct = 'DAA9B25168CC702326F217F1A0C0B162') |
AEStestVector( i = 'aes-ecb-vt-128-59', |
key = '00000000000000000000000000000000', |
pt = '00000000000000200000000000000000', |
ct = '3E07E648975D9578D03555B1755807ED') |
AEStestVector( i = 'aes-ecb-vt-128-60', |
key = '00000000000000000000000000000000', |
pt = '00000000000000100000000000000000', |
ct = '0B45F52E802C8B8DE09579425B80B711') |
AEStestVector( i = 'aes-ecb-vt-128-61', |
key = '00000000000000000000000000000000', |
pt = '00000000000000080000000000000000', |
ct = '659595DA0B68F6DF0DD6CA77202986E1') |
AEStestVector( i = 'aes-ecb-vt-128-62', |
key = '00000000000000000000000000000000', |
pt = '00000000000000040000000000000000', |
ct = '05FF42873893536E58C8FA98A45C73C4') |
AEStestVector( i = 'aes-ecb-vt-128-63', |
key = '00000000000000000000000000000000', |
pt = '00000000000000020000000000000000', |
ct = 'B5B03421DE8BBFFC4EADEC767339A9BD') |
AEStestVector( i = 'aes-ecb-vt-128-64', |
key = '00000000000000000000000000000000', |
pt = '00000000000000010000000000000000', |
ct = '788BCD111ECF73D4E78D2E21BEF55460') |
AEStestVector( i = 'aes-ecb-vt-128-65', |
key = '00000000000000000000000000000000', |
pt = '00000000000000008000000000000000', |
ct = '909CD9EC6790359F982DC6F2393D5315') |
AEStestVector( i = 'aes-ecb-vt-128-66', |
key = '00000000000000000000000000000000', |
pt = '00000000000000004000000000000000', |
ct = '332950F361535FF24EFAC8C76293F12C') |
AEStestVector( i = 'aes-ecb-vt-128-67', |
key = '00000000000000000000000000000000', |
pt = '00000000000000002000000000000000', |
ct = 'A68CCD4E330FFDA9D576DA436DB53D75') |
AEStestVector( i = 'aes-ecb-vt-128-68', |
key = '00000000000000000000000000000000', |
pt = '00000000000000001000000000000000', |
ct = '27C8A1CCFDB0B015D1ED5B3E77143791') |
AEStestVector( i = 'aes-ecb-vt-128-69', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000800000000000000', |
ct = 'D76A4B95887A77DF610DD3E1D3B20325') |
AEStestVector( i = 'aes-ecb-vt-128-70', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000400000000000000', |
ct = 'C068AB0DE71C66DAE83C361EF4B2D989') |
AEStestVector( i = 'aes-ecb-vt-128-71', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000200000000000000', |
ct = 'C2120BCD49EDA9A288B3B4BE79AC8158') |
AEStestVector( i = 'aes-ecb-vt-128-72', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000100000000000000', |
ct = '0C546F62BF2773CD0F564FCECA7BA688') |
AEStestVector( i = 'aes-ecb-vt-128-73', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000080000000000000', |
ct = '18F3462BEDE4920213CCB66DAB1640AA') |
AEStestVector( i = 'aes-ecb-vt-128-74', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000040000000000000', |
ct = 'FE42F245EDD0E24B216AEBD8B392D690') |
AEStestVector( i = 'aes-ecb-vt-128-75', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000020000000000000', |
ct = '3D3EEBC8D3D1558A194C2D00C337FF2B') |
AEStestVector( i = 'aes-ecb-vt-128-76', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000010000000000000', |
ct = '29AAEDF043E785DB42836F79BE6CBA28') |
AEStestVector( i = 'aes-ecb-vt-128-77', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000008000000000000', |
ct = '215F90C6744E2944358E78619159A611') |
AEStestVector( i = 'aes-ecb-vt-128-78', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000004000000000000', |
ct = '8606B1AA9E1D548E5442B06551E2C6DC') |
AEStestVector( i = 'aes-ecb-vt-128-79', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000002000000000000', |
ct = '987BB4B8740EC0EDE7FEA97DF033B5B1') |
AEStestVector( i = 'aes-ecb-vt-128-80', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000001000000000000', |
ct = 'C0A3500DA5B0AE07D2F450930BEEDF1B') |
AEStestVector( i = 'aes-ecb-vt-128-81', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000800000000000', |
ct = '525FDF8312FE8F32C781481A8DAAAE37') |
AEStestVector( i = 'aes-ecb-vt-128-82', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000400000000000', |
ct = 'BFD2C56AE5FB9C9DE33A6944572A6487') |
AEStestVector( i = 'aes-ecb-vt-128-83', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000200000000000', |
ct = '7975A57A425CDF5AA1FA929101F650B0') |
AEStestVector( i = 'aes-ecb-vt-128-84', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000100000000000', |
ct = 'BF174BC49609A8709B2CD8366DAA79FE') |
AEStestVector( i = 'aes-ecb-vt-128-85', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000080000000000', |
ct = '06C50C43222F56C874B1704E9F44BF7D') |
AEStestVector( i = 'aes-ecb-vt-128-86', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000040000000000', |
ct = '0CEC48CD34043EA29CA3B8ED5278721E') |
AEStestVector( i = 'aes-ecb-vt-128-87', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000020000000000', |
ct = '9548EA34A1560197B304D0ACB8A1698D') |
AEStestVector( i = 'aes-ecb-vt-128-88', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000010000000000', |
ct = '22F9E9B1BD73B6B5B7D3062C986272F3') |
AEStestVector( i = 'aes-ecb-vt-128-89', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000008000000000', |
ct = 'FEE8E934BD0873295059002230E298D4') |
AEStestVector( i = 'aes-ecb-vt-128-90', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000004000000000', |
ct = '1B08E2E3EB820D139CB4ABBDBE81D00D') |
AEStestVector( i = 'aes-ecb-vt-128-91', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000002000000000', |
ct = '0021177681E4D90CEAF69DCED0145125') |
AEStestVector( i = 'aes-ecb-vt-128-92', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000001000000000', |
ct = '4A8E314452CA8A8A3619FC54BC423643') |
AEStestVector( i = 'aes-ecb-vt-128-93', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000800000000', |
ct = '65047474F7222C94C6965425FF1BFD0A') |
AEStestVector( i = 'aes-ecb-vt-128-94', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000400000000', |
ct = 'E123F551A9C4A8489622B16F961A9AA4') |
AEStestVector( i = 'aes-ecb-vt-128-95', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000200000000', |
ct = 'EF05530948B80915028BB2B6FE429380') |
AEStestVector( i = 'aes-ecb-vt-128-96', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000100000000', |
ct = '72535B7FE0F0F777CEDCD55CD77E2DDF') |
AEStestVector( i = 'aes-ecb-vt-128-97', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000080000000', |
ct = '3423D8EFC31FA2F4C365C77D8F3B5C63') |
AEStestVector( i = 'aes-ecb-vt-128-98', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000040000000', |
ct = 'DE0E51C264663F3C5DBC59580A98D8E4') |
AEStestVector( i = 'aes-ecb-vt-128-99', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000020000000', |
ct = 'B2D9391166680947AB09264156719679') |
AEStestVector( i = 'aes-ecb-vt-128-100', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000010000000', |
ct = '10DB79F23B06D263835C424AF749ADB7') |
AEStestVector( i = 'aes-ecb-vt-128-101', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000008000000', |
ct = 'DDF72D27E6B01EC107EA3E005B59563B') |
AEStestVector( i = 'aes-ecb-vt-128-102', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000004000000', |
ct = '8266B57485A5954A4236751DE07F6694') |
AEStestVector( i = 'aes-ecb-vt-128-103', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000002000000', |
ct = '669A501E1F1ADE6E5523DE01D6DBC987') |
AEStestVector( i = 'aes-ecb-vt-128-104', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000001000000', |
ct = 'C20C48F2989725D461D1DB589DC0896E') |
AEStestVector( i = 'aes-ecb-vt-128-105', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000800000', |
ct = 'DE35158E7810ED1191825D2AA98FA97D') |
AEStestVector( i = 'aes-ecb-vt-128-106', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000400000', |
ct = '4FE294F2C0F34D0671B693A237EBDDC8') |
AEStestVector( i = 'aes-ecb-vt-128-107', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000200000', |
ct = '087AE74B10CCBFDF6739FEB9559C01A4') |
AEStestVector( i = 'aes-ecb-vt-128-108', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000100000', |
ct = '5DC278970B7DEF77A5536C77AB59C207') |
AEStestVector( i = 'aes-ecb-vt-128-109', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000080000', |
ct = '7607F078C77085184EAA9B060C1FBFFF') |
AEStestVector( i = 'aes-ecb-vt-128-110', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000040000', |
ct = '9DB841531BCBE7998DAD19993FB3CC00') |
AEStestVector( i = 'aes-ecb-vt-128-111', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000020000', |
ct = 'D6A089B654854A94560BAE13298835B8') |
AEStestVector( i = 'aes-ecb-vt-128-112', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000010000', |
ct = 'E1E223C4CF90CC5D195B370D65114622') |
AEStestVector( i = 'aes-ecb-vt-128-113', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000008000', |
ct = '1CBED73C50D053BDAD372CEEE54836A1') |
AEStestVector( i = 'aes-ecb-vt-128-114', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000004000', |
ct = 'D309E69376D257ADF2BFDA152B26555F') |
AEStestVector( i = 'aes-ecb-vt-128-115', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000002000', |
ct = '740F7649117F0DEE6EAA7789A9994C36') |
AEStestVector( i = 'aes-ecb-vt-128-116', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000001000', |
ct = '76AE64417C297184D668C5FD908B3CE5') |
AEStestVector( i = 'aes-ecb-vt-128-117', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000800', |
ct = '6095FEA4AA8035591F1787A819C48787') |
AEStestVector( i = 'aes-ecb-vt-128-118', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000400', |
ct = 'D1FF4E7ACD1C79967FEBAB0F7465D450') |
AEStestVector( i = 'aes-ecb-vt-128-119', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000200', |
ct = '5F5AD3C42B9489557BB63BF49ECF5F8A') |
AEStestVector( i = 'aes-ecb-vt-128-120', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000100', |
ct = 'FB56CC09B680B1D07C5A52149E29F07C') |
AEStestVector( i = 'aes-ecb-vt-128-121', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000080', |
ct = 'FF49B8DF4A97CBE03833E66197620DAD') |
AEStestVector( i = 'aes-ecb-vt-128-122', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000040', |
ct = '5E070ADE533D2E090ED0F5BE13BC0983') |
AEStestVector( i = 'aes-ecb-vt-128-123', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000020', |
ct = '3AB4FB1D2B7BA376590A2C241D1F508D') |
AEStestVector( i = 'aes-ecb-vt-128-124', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000010', |
ct = '58B2431BC0BEDE02550F40238969EC78') |
AEStestVector( i = 'aes-ecb-vt-128-125', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000008', |
ct = '0253786E126504F0DAB90C48A30321DE') |
AEStestVector( i = 'aes-ecb-vt-128-126', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000004', |
ct = '200211214E7394DA2089B6ACD093ABE0') |
AEStestVector( i = 'aes-ecb-vt-128-127', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000002', |
ct = '0388DACE60B6A392F328C2B971B2FE78') |
AEStestVector( i = 'aes-ecb-vt-128-128', |
key = '00000000000000000000000000000000', |
pt = '00000000000000000000000000000001', |
ct = '58E2FCCEFA7E3061367F1D57A4E7455A') |
AEStestVector( i = 'aes-ecb-vt-192-1', |
key = '000000000000000000000000000000000000000000000000', |
pt = '80000000000000000000000000000000', |
ct = '6CD02513E8D4DC986B4AFE087A60BD0C') |
AEStestVector( i = 'aes-ecb-vt-192-2', |
key = '000000000000000000000000000000000000000000000000', |
pt = '40000000000000000000000000000000', |
ct = '423D2772A0CA56DAABB48D2129062987') |
AEStestVector( i = 'aes-ecb-vt-192-3', |
key = '000000000000000000000000000000000000000000000000', |
pt = '20000000000000000000000000000000', |
ct = '1021F2A8DA70EB2219DC16804445FF98') |
AEStestVector( i = 'aes-ecb-vt-192-4', |
key = '000000000000000000000000000000000000000000000000', |
pt = '10000000000000000000000000000000', |
ct = 'C636E35B402577F96974D8804295EBB8') |
AEStestVector( i = 'aes-ecb-vt-192-5', |
key = '000000000000000000000000000000000000000000000000', |
pt = '08000000000000000000000000000000', |
ct = '1566D2E57E8393C19E29F892EA28A9A7') |
AEStestVector( i = 'aes-ecb-vt-192-6', |
key = '000000000000000000000000000000000000000000000000', |
pt = '04000000000000000000000000000000', |
ct = '883C878FED70B36CC09D040F9619DD19') |
AEStestVector( i = 'aes-ecb-vt-192-7', |
key = '000000000000000000000000000000000000000000000000', |
pt = '02000000000000000000000000000000', |
ct = '06734593A974965790E715594FC34AA9') |
AEStestVector( i = 'aes-ecb-vt-192-8', |
key = '000000000000000000000000000000000000000000000000', |
pt = '01000000000000000000000000000000', |
ct = 'F19B389948D9A45534E5BD36C984134A') |
AEStestVector( i = 'aes-ecb-vt-192-9', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00800000000000000000000000000000', |
ct = 'D8410DFC14FA6D175EC968EA8CAC514C') |
AEStestVector( i = 'aes-ecb-vt-192-10', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00400000000000000000000000000000', |
ct = '7E6C6EBB4029A177CF7B2FDD9AC6BB7A') |
AEStestVector( i = 'aes-ecb-vt-192-11', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00200000000000000000000000000000', |
ct = '4B51DD4850DC0A6C3A46D924003D2C27') |
AEStestVector( i = 'aes-ecb-vt-192-12', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00100000000000000000000000000000', |
ct = '2E510A9D917B15BE32A192B12A668F23') |
AEStestVector( i = 'aes-ecb-vt-192-13', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00080000000000000000000000000000', |
ct = '88F6F79962B0FB77FEA8E7C632D3108E') |
AEStestVector( i = 'aes-ecb-vt-192-14', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00040000000000000000000000000000', |
ct = 'A3A35AB1D88DAF07B52794A0F065383A') |
AEStestVector( i = 'aes-ecb-vt-192-15', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00020000000000000000000000000000', |
ct = 'DC6CC878433E2B3BB193049A4ECBFC53') |
AEStestVector( i = 'aes-ecb-vt-192-16', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00010000000000000000000000000000', |
ct = 'EFCD3763EB7B1A415938248A9A5B4FD5') |
AEStestVector( i = 'aes-ecb-vt-192-17', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00008000000000000000000000000000', |
ct = 'AB7E9FB9A66DBE5BB44854F07D9015EE') |
AEStestVector( i = 'aes-ecb-vt-192-18', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00004000000000000000000000000000', |
ct = '8B8E9D3365F8F6743ECF7E33E99255A4') |
AEStestVector( i = 'aes-ecb-vt-192-19', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00002000000000000000000000000000', |
ct = '54D37B4F176FF3D8F6AFC866066D8572') |
AEStestVector( i = 'aes-ecb-vt-192-20', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00001000000000000000000000000000', |
ct = 'E83310889480FBF3C00342E3126D0D02') |
AEStestVector( i = 'aes-ecb-vt-192-21', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000800000000000000000000000000', |
ct = 'D321AB2511F92F098174AA2DE6E85DA2') |
AEStestVector( i = 'aes-ecb-vt-192-22', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000400000000000000000000000000', |
ct = 'D8E3F40B1112D5149D58C481DFA9983F') |
AEStestVector( i = 'aes-ecb-vt-192-23', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000200000000000000000000000000', |
ct = '2454C4E0806639DDF19854D6C68054AD') |
AEStestVector( i = 'aes-ecb-vt-192-24', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000100000000000000000000000000', |
ct = 'A5506D410F7CA32F3955DD79D9D09418') |
AEStestVector( i = 'aes-ecb-vt-192-25', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000080000000000000000000000000', |
ct = '7908EE40677699568A7DC1AA317C7E4E') |
AEStestVector( i = 'aes-ecb-vt-192-26', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000040000000000000000000000000', |
ct = 'B4B7B29DD43B2F5CF765E25192273982') |
AEStestVector( i = 'aes-ecb-vt-192-27', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000020000000000000000000000000', |
ct = '92AFE9668159BEFFE2A86F8503260164') |
AEStestVector( i = 'aes-ecb-vt-192-28', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000010000000000000000000000000', |
ct = '5C36A232FBA6D187A84657AD4028B18F') |
AEStestVector( i = 'aes-ecb-vt-192-29', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000008000000000000000000000000', |
ct = 'A2E994DFAB3A798DF8F54F6DA87E58E2') |
AEStestVector( i = 'aes-ecb-vt-192-30', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000004000000000000000000000000', |
ct = '6CDAB10A72ADF77D71D0765BAAE95631') |
AEStestVector( i = 'aes-ecb-vt-192-31', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000002000000000000000000000000', |
ct = '9FE3C801BCAAF7BB800F2E6BF3278E21') |
AEStestVector( i = 'aes-ecb-vt-192-32', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000001000000000000000000000000', |
ct = 'B459D90D9A6C392E5493BC91CF5A0863') |
AEStestVector( i = 'aes-ecb-vt-192-33', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000800000000000000000000000', |
ct = '0518A9FA5007F6787E0FB4E5AC27D758') |
AEStestVector( i = 'aes-ecb-vt-192-34', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000400000000000000000000000', |
ct = 'BED9795415D28599700ED7952384A963') |
AEStestVector( i = 'aes-ecb-vt-192-35', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000200000000000000000000000', |
ct = 'F0140421173D60251EF6CAB0229B1B50') |
AEStestVector( i = 'aes-ecb-vt-192-36', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000100000000000000000000000', |
ct = '460EB4652B3F6779EA28CB11B37529ED') |
AEStestVector( i = 'aes-ecb-vt-192-37', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000080000000000000000000000', |
ct = 'C4283D351C960A6AC13CD19CCF03AE38') |
AEStestVector( i = 'aes-ecb-vt-192-38', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000040000000000000000000000', |
ct = '6815A10047B2C834A798EBDCC6786C75') |
AEStestVector( i = 'aes-ecb-vt-192-39', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000020000000000000000000000', |
ct = '99BA19F0CDD5990D0386B32CE56C9C4C') |
AEStestVector( i = 'aes-ecb-vt-192-40', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000010000000000000000000000', |
ct = 'DE76F62C61E07915162DA13E79679DEC') |
AEStestVector( i = 'aes-ecb-vt-192-41', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000008000000000000000000000', |
ct = 'DD0325D6854803D06D1D2277D5FB8D67') |
AEStestVector( i = 'aes-ecb-vt-192-42', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000004000000000000000000000', |
ct = '580B71A41DE37D6FAC83CCB0B3BB1C97') |
AEStestVector( i = 'aes-ecb-vt-192-43', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000002000000000000000000000', |
ct = 'E9B1AB470A1B02EF0FF5E6754A092C96') |
AEStestVector( i = 'aes-ecb-vt-192-44', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000001000000000000000000000', |
ct = '8590620F5AF5993B7410282F4126BC1F') |
AEStestVector( i = 'aes-ecb-vt-192-45', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000800000000000000000000', |
ct = '8D4914D2F1B22B2E268E66E532D29D7C') |
AEStestVector( i = 'aes-ecb-vt-192-46', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000400000000000000000000', |
ct = 'FD826CE48E62C5E30867044B86BA4B56') |
AEStestVector( i = 'aes-ecb-vt-192-47', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000200000000000000000000', |
ct = '100E7B831C9F35FA1271F5F1316C6FCF') |
AEStestVector( i = 'aes-ecb-vt-192-48', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000100000000000000000000', |
ct = '0A2DD0C17F68B996AA96C007003D0B31') |
AEStestVector( i = 'aes-ecb-vt-192-49', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000080000000000000000000', |
ct = 'C95F68C57E06B0A2E1F623C83C5D80BF') |
AEStestVector( i = 'aes-ecb-vt-192-50', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000040000000000000000000', |
ct = '571CAFC92C7C8A5EC54C0741E186905C') |
AEStestVector( i = 'aes-ecb-vt-192-51', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000020000000000000000000', |
ct = '22514353E95312C112255E1EED0B2DF6') |
AEStestVector( i = 'aes-ecb-vt-192-52', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000010000000000000000000', |
ct = '791A8BF462BD17580BD9152C6D11C6C5') |
AEStestVector( i = 'aes-ecb-vt-192-53', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000008000000000000000000', |
ct = '5882A0178D548F84A165DB809C60DC28') |
AEStestVector( i = 'aes-ecb-vt-192-54', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000004000000000000000000', |
ct = '3CE4A90EED4458CA6039E42DDADB71C3') |
AEStestVector( i = 'aes-ecb-vt-192-55', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000002000000000000000000', |
ct = 'D3CBAB261207A16BE2751E77044FD7C9') |
AEStestVector( i = 'aes-ecb-vt-192-56', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000001000000000000000000', |
ct = '24E32B698A7B32217093628B01F424AB') |
AEStestVector( i = 'aes-ecb-vt-192-57', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000800000000000000000', |
ct = '9F6AFC0AF27CF565110C77E3C24F4F5B') |
AEStestVector( i = 'aes-ecb-vt-192-58', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000400000000000000000', |
ct = 'E088AA5CDA20EF267BB039B00C72C45B') |
AEStestVector( i = 'aes-ecb-vt-192-59', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000200000000000000000', |
ct = '5CF1018B7E0BA1775601C2E279900360') |
AEStestVector( i = 'aes-ecb-vt-192-60', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000100000000000000000', |
ct = '3B1A7388B89FB9416AD8753CF5AF35D2') |
AEStestVector( i = 'aes-ecb-vt-192-61', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000080000000000000000', |
ct = '137FA4ED00AFCD9F5D8BC0D14BD5837A') |
AEStestVector( i = 'aes-ecb-vt-192-62', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000040000000000000000', |
ct = '806F5C9B663559BB56F234881E4A3E60') |
AEStestVector( i = 'aes-ecb-vt-192-63', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000020000000000000000', |
ct = '8069A449152292DF2DE8642992C632B6') |
AEStestVector( i = 'aes-ecb-vt-192-64', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000010000000000000000', |
ct = '37C6CF2A1ABD1B1F1922B46C7B4A280D') |
AEStestVector( i = 'aes-ecb-vt-192-65', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000008000000000000000', |
ct = '7A2835260E5A0AA2B5DC301800EC8438') |
AEStestVector( i = 'aes-ecb-vt-192-66', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000004000000000000000', |
ct = 'EE81FAF2F9058213FFCACF281CB8509E') |
AEStestVector( i = 'aes-ecb-vt-192-67', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000002000000000000000', |
ct = '57F22D93C37129BA331FDBA38E005A1E') |
AEStestVector( i = 'aes-ecb-vt-192-68', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000001000000000000000', |
ct = 'EC798782E87B7D9F780CC3C3A46519B5') |
AEStestVector( i = 'aes-ecb-vt-192-69', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000800000000000000', |
ct = '43EA28497F5D40E3A4744FA2EDAA42DE') |
AEStestVector( i = 'aes-ecb-vt-192-70', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000400000000000000', |
ct = '91F004E7DEBF41B3414DD8C5C317372C') |
AEStestVector( i = 'aes-ecb-vt-192-71', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000200000000000000', |
ct = 'C249EAE54E7B4DF43B938C1B4CC28314') |
AEStestVector( i = 'aes-ecb-vt-192-72', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000100000000000000', |
ct = '32C289D7EEFB99D2F17AD7B7D45FE1EC') |
AEStestVector( i = 'aes-ecb-vt-192-73', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000080000000000000', |
ct = 'A675FB2E8DDBF810CEF01CF2B728CD2B') |
AEStestVector( i = 'aes-ecb-vt-192-74', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000040000000000000', |
ct = 'A418AAAB6E6921CC731AA8A349386080') |
AEStestVector( i = 'aes-ecb-vt-192-75', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000020000000000000', |
ct = '2E2B0F44863E67D9B0215C4ABD60417F') |
AEStestVector( i = 'aes-ecb-vt-192-76', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000010000000000000', |
ct = 'F0AF7CB19E911D481F6426DAEFDD2240') |
AEStestVector( i = 'aes-ecb-vt-192-77', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000008000000000000', |
ct = 'CB1304DAAA2DF6878F56AC2E0F887E04') |
AEStestVector( i = 'aes-ecb-vt-192-78', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000004000000000000', |
ct = 'B1B70A7E6A0CD1916D9B78BEA19084AE') |
AEStestVector( i = 'aes-ecb-vt-192-79', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000002000000000000', |
ct = '0CDE9F9BE646A5FCE3436B794A9CFC65') |
AEStestVector( i = 'aes-ecb-vt-192-80', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000001000000000000', |
ct = '68C7946D476A0A36674B36AFD7E5DF33') |
AEStestVector( i = 'aes-ecb-vt-192-81', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000800000000000', |
ct = '48770159A07DD8DFFF06C80105F8D57C') |
AEStestVector( i = 'aes-ecb-vt-192-82', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000400000000000', |
ct = '665E62801B3260E3C45BD3BE34DFDEBE') |
AEStestVector( i = 'aes-ecb-vt-192-83', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000200000000000', |
ct = '4159C1F686BFBE5B0E50BDB0DA532B69') |
AEStestVector( i = 'aes-ecb-vt-192-84', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000100000000000', |
ct = '6333100A5A4AD917DC2D4E78A04869A3') |
AEStestVector( i = 'aes-ecb-vt-192-85', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000080000000000', |
ct = '866A4519AB1D199F25886B89D0539ACC') |
AEStestVector( i = 'aes-ecb-vt-192-86', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000040000000000', |
ct = 'EC0CFD37E4CBC7E8BE385283F7AEA75A') |
AEStestVector( i = 'aes-ecb-vt-192-87', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000020000000000', |
ct = 'CA2F383AACCA0810AA13F3E710621422') |
AEStestVector( i = 'aes-ecb-vt-192-88', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000010000000000', |
ct = '1D0EEF6870444F950937831EC0A55D98') |
AEStestVector( i = 'aes-ecb-vt-192-89', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000008000000000', |
ct = '37839B35ED6801E7670496D479A95017') |
AEStestVector( i = 'aes-ecb-vt-192-90', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000004000000000', |
ct = '02317C8C7098C4F94AB867AC7A49DD8D') |
AEStestVector( i = 'aes-ecb-vt-192-91', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000002000000000', |
ct = 'FFB4CB4E3F7F8BF3367EBD43236518B4') |
AEStestVector( i = 'aes-ecb-vt-192-92', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000001000000000', |
ct = '36BEDEF1E4AA3E4A40A305741713FCBF') |
AEStestVector( i = 'aes-ecb-vt-192-93', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000800000000', |
ct = 'B2DFE3C4870269C1E3FEEC39161540D9') |
AEStestVector( i = 'aes-ecb-vt-192-94', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000400000000', |
ct = '147EF2518AD45DA0026056ECBF6A3DFA') |
AEStestVector( i = 'aes-ecb-vt-192-95', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000200000000', |
ct = '027A75E4DE635790E47ACE90D7928804') |
AEStestVector( i = 'aes-ecb-vt-192-96', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000100000000', |
ct = 'C4CF3CCB59BF87D0AFBD629F48CFBB7B') |
AEStestVector( i = 'aes-ecb-vt-192-97', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000080000000', |
ct = '35165C93F564C97E1C32EF97E8151A87') |
AEStestVector( i = 'aes-ecb-vt-192-98', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000040000000', |
ct = '449DE37F7D5A1BBD628ABBE7E061701D') |
AEStestVector( i = 'aes-ecb-vt-192-99', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000020000000', |
ct = 'B1D45EAF218F1799B149BAD677FE129F') |
AEStestVector( i = 'aes-ecb-vt-192-100', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000010000000', |
ct = 'BE08AC6DB6BD0583AA9D2ABC71C73DCD') |
AEStestVector( i = 'aes-ecb-vt-192-101', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000008000000', |
ct = 'BCC835BD3DF1A79E4C7C145B899A5C25') |
AEStestVector( i = 'aes-ecb-vt-192-102', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000004000000', |
ct = '3D311EA611FF5AF371301C58A8E9912D') |
AEStestVector( i = 'aes-ecb-vt-192-103', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000002000000', |
ct = 'A5A1BEA594ACC7CA80F09EA5ADDB5C71') |
AEStestVector( i = 'aes-ecb-vt-192-104', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000001000000', |
ct = '0F09492429FE7222D6CD8190D9F2FFBF') |
AEStestVector( i = 'aes-ecb-vt-192-105', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000800000', |
ct = '816D2220A16B8AAEE71364FD43636C6F') |
AEStestVector( i = 'aes-ecb-vt-192-106', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000400000', |
ct = 'D7E8702408419ED73191B107EAF75A0B') |
AEStestVector( i = 'aes-ecb-vt-192-107', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000200000', |
ct = '9B170EFB1E235B433C78E276BEA082F0') |
AEStestVector( i = 'aes-ecb-vt-192-108', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000100000', |
ct = '03BBECC5598AE974430F29395522F096') |
AEStestVector( i = 'aes-ecb-vt-192-109', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000080000', |
ct = 'DB53517766C0E8CF42059607CBA89380') |
AEStestVector( i = 'aes-ecb-vt-192-110', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000040000', |
ct = '2E2AF4B7931F0AEFFAC5471148A5BB97') |
AEStestVector( i = 'aes-ecb-vt-192-111', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000020000', |
ct = 'C872C0408266403B984F635FF5683DE4') |
AEStestVector( i = 'aes-ecb-vt-192-112', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000010000', |
ct = '15DCF750B0E3A68AD1F4EFD07E8967B4') |
AEStestVector( i = 'aes-ecb-vt-192-113', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000008000', |
ct = 'B41092048E9E6A749F6FD8CE515A23A3') |
AEStestVector( i = 'aes-ecb-vt-192-114', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000004000', |
ct = '4DA9267D62507994312BD5C99ADDE730') |
AEStestVector( i = 'aes-ecb-vt-192-115', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000002000', |
ct = '9E2FCA6D1D626E9C6A924EBF7DBF618A') |
AEStestVector( i = 'aes-ecb-vt-192-116', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000001000', |
ct = 'E092E8D7EF2C2465AEFB2493C3063590') |
AEStestVector( i = 'aes-ecb-vt-192-117', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000800', |
ct = '1C0E58DA37D1068378A88DBE2EDE4E10') |
AEStestVector( i = 'aes-ecb-vt-192-118', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000400', |
ct = '19063F854232B8509A6A3A6D46809959') |
AEStestVector( i = 'aes-ecb-vt-192-119', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000200', |
ct = '447FB09E54EFA285F7530F25C4EA0022') |
AEStestVector( i = 'aes-ecb-vt-192-120', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000100', |
ct = 'F6ABE86321BE40E1FBFDAFED37CC1D9B') |
AEStestVector( i = 'aes-ecb-vt-192-121', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000080', |
ct = '4E8506CD006666341D6CF51F98B41F35') |
AEStestVector( i = 'aes-ecb-vt-192-122', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000040', |
ct = '53995DE0009CA18BECAFB8307C54C14C') |
AEStestVector( i = 'aes-ecb-vt-192-123', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000020', |
ct = '2006BF99F4C58B6CC2627856593FAEEA') |
AEStestVector( i = 'aes-ecb-vt-192-124', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000010', |
ct = '2DA697D2737CB30B744A4644FA1CBC6E') |
AEStestVector( i = 'aes-ecb-vt-192-125', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000008', |
ct = '47A22ACDB60C3A986A8F76ECD0EA3433') |
AEStestVector( i = 'aes-ecb-vt-192-126', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000004', |
ct = 'FDAA17C2CDE20268FE36E164EA532151') |
AEStestVector( i = 'aes-ecb-vt-192-127', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000002', |
ct = '98E7247C07F0FE411C267E4384B0F600') |
AEStestVector( i = 'aes-ecb-vt-192-128', |
key = '000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000001', |
ct = 'CD33B28AC773F74BA00ED1F312572435') |
AEStestVector( i = 'aes-ecb-vt-256-1', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '80000000000000000000000000000000', |
ct = 'DDC6BF790C15760D8D9AEB6F9A75FD4E') |
AEStestVector( i = 'aes-ecb-vt-256-2', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '40000000000000000000000000000000', |
ct = 'C7098C217C334D0C9BDF37EA13B0822C') |
AEStestVector( i = 'aes-ecb-vt-256-3', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '20000000000000000000000000000000', |
ct = '60F0FB0D4C56A8D4EEFEC5264204042D') |
AEStestVector( i = 'aes-ecb-vt-256-4', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '10000000000000000000000000000000', |
ct = '73376FBBF654D0686E0E84001477106B') |
AEStestVector( i = 'aes-ecb-vt-256-5', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '08000000000000000000000000000000', |
ct = '2F443B52BA5F0C6EA0602C7C4FD259B6') |
AEStestVector( i = 'aes-ecb-vt-256-6', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '04000000000000000000000000000000', |
ct = '75D11B0E3A68C4223D88DBF017977DD7') |
AEStestVector( i = 'aes-ecb-vt-256-7', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '02000000000000000000000000000000', |
ct = '779B38D15BFFB63D8D609D551A5CC98E') |
AEStestVector( i = 'aes-ecb-vt-256-8', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '01000000000000000000000000000000', |
ct = '5275F3D86B4FB8684593133EBFA53CD3') |
AEStestVector( i = 'aes-ecb-vt-256-9', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00800000000000000000000000000000', |
ct = '1CEF2074B336CEC62F12DEA2F6AB1481') |
AEStestVector( i = 'aes-ecb-vt-256-10', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00400000000000000000000000000000', |
ct = '1AEF5ABBAD9D7160874578DCD8BAE172') |
AEStestVector( i = 'aes-ecb-vt-256-11', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00200000000000000000000000000000', |
ct = '46C525DB17E72F26BF03216846B6F609') |
AEStestVector( i = 'aes-ecb-vt-256-12', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00100000000000000000000000000000', |
ct = 'E24411F941BBE08788781E3EC52CBAA4') |
AEStestVector( i = 'aes-ecb-vt-256-13', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00080000000000000000000000000000', |
ct = '83A3DEDD1DD27018F6A6477E40527581') |
AEStestVector( i = 'aes-ecb-vt-256-14', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00040000000000000000000000000000', |
ct = 'B68F8A2CDBAB0C923C67FC8F0F1087DE') |
AEStestVector( i = 'aes-ecb-vt-256-15', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00020000000000000000000000000000', |
ct = '649944A70C32BF87A7409E7AE128FDE8') |
AEStestVector( i = 'aes-ecb-vt-256-16', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00010000000000000000000000000000', |
ct = '2846526D67387539C89314DE9E0C2D02') |
AEStestVector( i = 'aes-ecb-vt-256-17', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00008000000000000000000000000000', |
ct = 'A9A0B8402E53C70DD1688054BA58DDFD') |
AEStestVector( i = 'aes-ecb-vt-256-18', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00004000000000000000000000000000', |
ct = '4A72E6E1B79C83AC4BE3EBA5699EED48') |
AEStestVector( i = 'aes-ecb-vt-256-19', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00002000000000000000000000000000', |
ct = 'B0E36B867BA4FF2B77D0614B0E364E4C') |
AEStestVector( i = 'aes-ecb-vt-256-20', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00001000000000000000000000000000', |
ct = '49B57DE141F6418E3090F24DDD4014B6') |
AEStestVector( i = 'aes-ecb-vt-256-21', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000800000000000000000000000000', |
ct = 'A6C0D5B9797258E1987AC5F6CD20146D') |
AEStestVector( i = 'aes-ecb-vt-256-22', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000400000000000000000000000000', |
ct = '426CF4BDCAA369175965D26E7C71EEA2') |
AEStestVector( i = 'aes-ecb-vt-256-23', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000200000000000000000000000000', |
ct = 'E27F484CE54BC99BC1A52BDA3B518A26') |
AEStestVector( i = 'aes-ecb-vt-256-24', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000100000000000000000000000000', |
ct = 'D16D186284C7E6EE64B8104E0EF20BA5') |
AEStestVector( i = 'aes-ecb-vt-256-25', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000080000000000000000000000000', |
ct = '6431F8538AD54E1E044A9F71F8EF556B') |
AEStestVector( i = 'aes-ecb-vt-256-26', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000040000000000000000000000000', |
ct = 'ECD57CEB451D27EB96C55B2042257E8E') |
AEStestVector( i = 'aes-ecb-vt-256-27', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000020000000000000000000000000', |
ct = '4F0F188DC911B1954AFBC734C9F68872') |
AEStestVector( i = 'aes-ecb-vt-256-28', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000010000000000000000000000000', |
ct = 'B54DEF0337626B65614E81EDFDE620F3') |
AEStestVector( i = 'aes-ecb-vt-256-29', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000008000000000000000000000000', |
ct = '6655D8074CAE0B90B0D3A3FE72D4D9DB') |
AEStestVector( i = 'aes-ecb-vt-256-30', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000004000000000000000000000000', |
ct = 'C6B74B6B9EB4FC0C9A237DB1B616D09A') |
AEStestVector( i = 'aes-ecb-vt-256-31', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000002000000000000000000000000', |
ct = 'D7B5D076EA56EC2B20791D7AD51CCF8F') |
AEStestVector( i = 'aes-ecb-vt-256-32', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000001000000000000000000000000', |
ct = 'FE160C224BF003CE3BDDC90CB52ED22C') |
AEStestVector( i = 'aes-ecb-vt-256-33', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000800000000000000000000000', |
ct = '5E00DA9BA94B5EC0D258D8A8002E0F6A') |
AEStestVector( i = 'aes-ecb-vt-256-34', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000400000000000000000000000', |
ct = '09AC6DCFF4DACFF1651E2BA212A292A3') |
AEStestVector( i = 'aes-ecb-vt-256-35', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000200000000000000000000000', |
ct = 'B283617E318D99AF83A05D9810BA89F7') |
AEStestVector( i = 'aes-ecb-vt-256-36', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000100000000000000000000000', |
ct = '0B5F70CCB40B0EF2538AE9B4A9770B35') |
AEStestVector( i = 'aes-ecb-vt-256-37', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000080000000000000000000000', |
ct = '43282BF180248FB517839B37F4DDAAE4') |
AEStestVector( i = 'aes-ecb-vt-256-38', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000040000000000000000000000', |
ct = 'DDBD534C8B2E6D30A268F88C55AD765B') |
AEStestVector( i = 'aes-ecb-vt-256-39', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000020000000000000000000000', |
ct = 'A41A164E50EC2D9F175E752B755E0B5C') |
AEStestVector( i = 'aes-ecb-vt-256-40', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000010000000000000000000000', |
ct = '37BFF99FF2F7AA97779E4ADF6F13FB10') |
AEStestVector( i = 'aes-ecb-vt-256-41', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000008000000000000000000000', |
ct = '9BA4F7BD298152903A683C4CEC669216') |
AEStestVector( i = 'aes-ecb-vt-256-42', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000004000000000000000000000', |
ct = '5FB750C7CE10DE7B4504248914D0DA06') |
AEStestVector( i = 'aes-ecb-vt-256-43', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000002000000000000000000000', |
ct = '3E748BFA108E086F51D56EC74A9E0FB9') |
AEStestVector( i = 'aes-ecb-vt-256-44', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000001000000000000000000000', |
ct = '31D4E56B99F5B73C1B8437DF332AFB98') |
AEStestVector( i = 'aes-ecb-vt-256-45', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000800000000000000000000', |
ct = '9DC6717B84FC55D266E7B1D9B5C52A5F') |
AEStestVector( i = 'aes-ecb-vt-256-46', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000400000000000000000000', |
ct = '8EF8BA007F23C0A50FC120E07041BCCD') |
AEStestVector( i = 'aes-ecb-vt-256-47', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000200000000000000000000', |
ct = 'C58F38E1839FC1918A12B8C9E88C66B6') |
AEStestVector( i = 'aes-ecb-vt-256-48', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000100000000000000000000', |
ct = 'B695D72A3FCF508C4050E12E40061C2D') |
AEStestVector( i = 'aes-ecb-vt-256-49', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000080000000000000000000', |
ct = '5D2736AD478A50583BC8C11BEFF16D7A') |
AEStestVector( i = 'aes-ecb-vt-256-50', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000040000000000000000000', |
ct = 'DF0EACA8F17847AD41F9578F14C7B56B') |
AEStestVector( i = 'aes-ecb-vt-256-51', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000020000000000000000000', |
ct = 'E5AA14AD48AD0A3C47CC35D5F8020E51') |
AEStestVector( i = 'aes-ecb-vt-256-52', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000010000000000000000000', |
ct = '11BE6C8F58EBD8CEF1A53F591A68E8CE') |
AEStestVector( i = 'aes-ecb-vt-256-53', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000008000000000000000000', |
ct = 'ECFE7BAFCBF42C1FEE015488770B3053') |
AEStestVector( i = 'aes-ecb-vt-256-54', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000004000000000000000000', |
ct = 'E552649F8D8EC4A1E1CD6DF50B6E6777') |
AEStestVector( i = 'aes-ecb-vt-256-55', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000002000000000000000000', |
ct = '521C0629DE93B9119CDB1DDC5809DDEA') |
AEStestVector( i = 'aes-ecb-vt-256-56', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000001000000000000000000', |
ct = 'CB38A62A0BAB1784156BA038CBA99BF6') |
AEStestVector( i = 'aes-ecb-vt-256-57', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000800000000000000000', |
ct = '76CCEE8AAACD394DE1EEF3DDA10CB54B') |
AEStestVector( i = 'aes-ecb-vt-256-58', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000400000000000000000', |
ct = '6AFF910FA1D5673140E2DB59B8416049') |
AEStestVector( i = 'aes-ecb-vt-256-59', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000200000000000000000', |
ct = '064A12C0EF73FB386801BF4F35F3120D') |
AEStestVector( i = 'aes-ecb-vt-256-60', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000100000000000000000', |
ct = '2240E374929D5B1BB8FF0FFDDDF640EC') |
AEStestVector( i = 'aes-ecb-vt-256-61', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000080000000000000000', |
ct = 'D4BA15C904C7692185DE85C02052E180') |
AEStestVector( i = 'aes-ecb-vt-256-62', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000040000000000000000', |
ct = '1714A315AB0166728A44CD91D4AE9018') |
AEStestVector( i = 'aes-ecb-vt-256-63', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000020000000000000000', |
ct = '6C970BDD9F0E222722EA31A1D12DD0AD') |
AEStestVector( i = 'aes-ecb-vt-256-64', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000010000000000000000', |
ct = 'F5956EDF02BD36A401BBB6CE77C3D3FB') |
AEStestVector( i = 'aes-ecb-vt-256-65', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000008000000000000000', |
ct = '0CA11F122CCD7C259DC597EED3DF9BC4') |
AEStestVector( i = 'aes-ecb-vt-256-66', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000004000000000000000', |
ct = '50109AB4912AD2560B206F331B62EB6C') |
AEStestVector( i = 'aes-ecb-vt-256-67', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000002000000000000000', |
ct = 'DBE7C91A4175614889A2D4BEFD64845E') |
AEStestVector( i = 'aes-ecb-vt-256-68', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000001000000000000000', |
ct = '0D3322853A571A6B46B79C0228E0DD25') |
AEStestVector( i = 'aes-ecb-vt-256-69', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000800000000000000', |
ct = '96E4EE0BB9A11C6FB8522F285BADDEB6') |
AEStestVector( i = 'aes-ecb-vt-256-70', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000400000000000000', |
ct = '96705C52D2CFCE82E630C93477C79C49') |
AEStestVector( i = 'aes-ecb-vt-256-71', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000200000000000000', |
ct = 'C50130AED6A126149D71F3888C83C232') |
AEStestVector( i = 'aes-ecb-vt-256-72', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000100000000000000', |
ct = '4816EFE3DEB380566EBA0C17BF582090') |
AEStestVector( i = 'aes-ecb-vt-256-73', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000080000000000000', |
ct = '0390857B4C8C98E4CF7A2B6F3394C507') |
AEStestVector( i = 'aes-ecb-vt-256-74', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000040000000000000', |
ct = '422E73A02025EBE8B8B5D6E0FA24FCB2') |
AEStestVector( i = 'aes-ecb-vt-256-75', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000020000000000000', |
ct = '3271AA7F4BF1D7C38050A43076D4FF76') |
AEStestVector( i = 'aes-ecb-vt-256-76', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000010000000000000', |
ct = 'D2074946F0D37B8975607BFC2E70234C') |
AEStestVector( i = 'aes-ecb-vt-256-77', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000008000000000000', |
ct = '1A509194C1270AB92E5A42D3A9F8D98B') |
AEStestVector( i = 'aes-ecb-vt-256-78', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000004000000000000', |
ct = '512438946360CCC4A5C6D73F6EED7130') |
AEStestVector( i = 'aes-ecb-vt-256-79', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000002000000000000', |
ct = '98CFCDEC46EBEA1A286B3004F2746A0D') |
AEStestVector( i = 'aes-ecb-vt-256-80', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000001000000000000', |
ct = 'A1CF369949677A3AF3D58E3EABF2741B') |
AEStestVector( i = 'aes-ecb-vt-256-81', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000800000000000', |
ct = 'D84C2E1A0E4A52166FA8FF6889D1E5E2') |
AEStestVector( i = 'aes-ecb-vt-256-82', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000400000000000', |
ct = '4AD91CCEEF60119B5078FD162D2735DE') |
AEStestVector( i = 'aes-ecb-vt-256-83', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000200000000000', |
ct = '2860793D818E97AAFF1D339D7702438D') |
AEStestVector( i = 'aes-ecb-vt-256-84', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000100000000000', |
ct = '6F9068BE73364AE250D89D78A6C9CE6F') |
AEStestVector( i = 'aes-ecb-vt-256-85', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000080000000000', |
ct = '024FC3FEF4883FEB1A8DD005305FECCE') |
AEStestVector( i = 'aes-ecb-vt-256-86', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000040000000000', |
ct = '08A61FE0816D75EA15EB3C9FB9CCDED6') |
AEStestVector( i = 'aes-ecb-vt-256-87', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000020000000000', |
ct = '449C86DFA13F260175CE39797686FFA4') |
AEStestVector( i = 'aes-ecb-vt-256-88', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000010000000000', |
ct = '4FFFFC29A59858E1133F2BFB1A8A4817') |
AEStestVector( i = 'aes-ecb-vt-256-89', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000008000000000', |
ct = '19425D1F6480B25096561295697DC2B7') |
AEStestVector( i = 'aes-ecb-vt-256-90', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000004000000000', |
ct = '31974727ECDD2C77C3A428FC3A8CB3FC') |
AEStestVector( i = 'aes-ecb-vt-256-91', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000002000000000', |
ct = 'A57CD704B3C95E744D08DF443458F2F5') |
AEStestVector( i = 'aes-ecb-vt-256-92', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000001000000000', |
ct = '486D8C193DB1ED73ACB17990442FC40B') |
AEStestVector( i = 'aes-ecb-vt-256-93', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000800000000', |
ct = '5E4DBF4E83AB3BC055B9FCC7A6B3A763') |
AEStestVector( i = 'aes-ecb-vt-256-94', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000400000000', |
ct = 'ACF2E0A693FBBCBA4D41B861E0D89E37') |
AEStestVector( i = 'aes-ecb-vt-256-95', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000200000000', |
ct = '32A7CB2AE066A51D2B78FC4B4CFCB608') |
AEStestVector( i = 'aes-ecb-vt-256-96', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000100000000', |
ct = '677D494DBB73CAF55C1990158DA12F14') |
AEStestVector( i = 'aes-ecb-vt-256-97', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000080000000', |
ct = '082A0D2367512ADF0D75A151BFBE0A17') |
AEStestVector( i = 'aes-ecb-vt-256-98', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000040000000', |
ct = '5E5BB7337923C482CE8CBA249E6A8C7D') |
AEStestVector( i = 'aes-ecb-vt-256-99', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000020000000', |
ct = 'D3001BA7C7026EE3E5003179530AFCFC') |
AEStestVector( i = 'aes-ecb-vt-256-100', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000010000000', |
ct = '46EC44F8931E629FE8FD8961312EDDE1') |
AEStestVector( i = 'aes-ecb-vt-256-101', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000008000000', |
ct = 'C5F8ECD79C7B30E81D17E32079969310') |
AEStestVector( i = 'aes-ecb-vt-256-102', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000004000000', |
ct = '5B8AD6919E24CAEBCC55401AEE0C9802') |
AEStestVector( i = 'aes-ecb-vt-256-103', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000002000000', |
ct = 'C2302B7E701B5CC7F8B29E3516DBBFA6') |
AEStestVector( i = 'aes-ecb-vt-256-104', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000001000000', |
ct = 'A1D04D6A76F9F7A94D49FAA64A87F244') |
AEStestVector( i = 'aes-ecb-vt-256-105', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000800000', |
ct = '7FB6F92D35B5CB6C631600EDB9E860BA') |
AEStestVector( i = 'aes-ecb-vt-256-106', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000400000', |
ct = 'B2EF7078BCFACE07AEEC3F9B48830EB3') |
AEStestVector( i = 'aes-ecb-vt-256-107', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000200000', |
ct = 'F475A7493D24C7036E53390374C378B3') |
AEStestVector( i = 'aes-ecb-vt-256-108', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000100000', |
ct = 'B36802AC987377A37BD8EADC97C57D60') |
AEStestVector( i = 'aes-ecb-vt-256-109', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000080000', |
ct = 'ADDCD3D19689C4DDC738CE5F69DC9505') |
AEStestVector( i = 'aes-ecb-vt-256-110', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000040000', |
ct = '0DAF8CA22884915403C0F0BB1F4BD74F') |
AEStestVector( i = 'aes-ecb-vt-256-111', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000020000', |
ct = '4AF36BAE2660503B3248E4685059FD05') |
AEStestVector( i = 'aes-ecb-vt-256-112', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000010000', |
ct = '7D5631814DD8E917D97A0D514C743971') |
AEStestVector( i = 'aes-ecb-vt-256-113', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000008000', |
ct = 'BC3352500FC0CBB9DB5B5F6B491C1BE8') |
AEStestVector( i = 'aes-ecb-vt-256-114', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000004000', |
ct = '6A4A30BA87E87AF65C90AEB7AFEDC76B') |
AEStestVector( i = 'aes-ecb-vt-256-115', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000002000', |
ct = '77E6125897668AC8E73E8C79A6FF8336') |
AEStestVector( i = 'aes-ecb-vt-256-116', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000001000', |
ct = '3FA9D39104EBB323C7AAAA248960DD1E') |
AEStestVector( i = 'aes-ecb-vt-256-117', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000800', |
ct = 'FAD75AD76AB10ADC49036B250E229D39') |
AEStestVector( i = 'aes-ecb-vt-256-118', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000400', |
ct = '2FACAA5FE35B228A16AC74088D702EC4') |
AEStestVector( i = 'aes-ecb-vt-256-119', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000200', |
ct = '88B6CBCFDFEF8AD91720A1BB69A1F33E') |
AEStestVector( i = 'aes-ecb-vt-256-120', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000100', |
ct = 'C7E9D250998632D444356242EF04058D') |
AEStestVector( i = 'aes-ecb-vt-256-121', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000080', |
ct = 'B14DAD8D3D9153F46C0D3A1AD63C7A05') |
AEStestVector( i = 'aes-ecb-vt-256-122', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000040', |
ct = '60ABA678A506608D0845966D29B5F790') |
AEStestVector( i = 'aes-ecb-vt-256-123', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000020', |
ct = '482DC43F2388EF25D24144E144BD834E') |
AEStestVector( i = 'aes-ecb-vt-256-124', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000010', |
ct = '1490A05A7CEE43BDE98B56E309DC0126') |
AEStestVector( i = 'aes-ecb-vt-256-125', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000008', |
ct = 'ABFA77CD6E85DA245FB0BDC5E52CFC29') |
AEStestVector( i = 'aes-ecb-vt-256-126', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000004', |
ct = 'DD4AB1284D4AE17B41E85924470C36F7') |
AEStestVector( i = 'aes-ecb-vt-256-127', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000002', |
ct = 'CEA7403D4D606B6E074EC5D3BAF39D18') |
AEStestVector( i = 'aes-ecb-vt-256-128', |
key = '0000000000000000000000000000000000000000000000000000000000000000', |
pt = '00000000000000000000000000000001', |
ct = '530F8AFBC74536B9A963B4F1C4CB738B') |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/aes.py |
---|
0,0 → 1,33 |
""" crypto.aes |
AES Encryption Algorithm |
The AES algorithm is just Rijndael algorithm restricted to the default |
blockSize of 128 bits. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-06-01 |
""" |
from crypto.cipher.rijndael import Rijndael |
from crypto.cipher.base import BlockCipher, padWithPadLen, noPadding |
from crypto.errors import BadKeySizeError |
class AES(Rijndael): |
""" The AES algorithm is the Rijndael block cipher restricted to block |
sizes of 128 bits and key sizes of 128, 192 or 256 bits |
""" |
def __init__(self, key = None, padding = padWithPadLen(), keySize=16): |
""" Initialize AES, keySize is in bytes """ |
if not (keySize == 16 or keySize == 24 or keySize == 32) : |
raise BadKeySizeError, 'Illegal AES key size, must be 16, 24, or 32 bytes' |
Rijndael.__init__( self, key, padding=padding, keySize=keySize, blockSize=16 ) |
self.name = 'AES' |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/icedoll_test.py |
---|
0,0 → 1,91 |
#! /usr/bin/env python |
""" crypto.cipher.icedoll_test |
Tests for icedoll encryption algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.icedoll import Icedoll |
from crypto.cipher.base import noPadding |
from binascii import a2b_hex |
from binascii_plus import b2a_p, a2b_p |
import unittest |
class Icedoll_Basic_Tests(unittest.TestCase): |
""" Test Icedoll algorithm """ |
def testDctEqPt(self): |
""" test of plaintext = decrypt(encrypt(plaintext)) """ |
alg = Icedoll( 16*chr(0), padding=noPadding()) |
pt = 16*4*'a' # block aligned |
ct = alg.encrypt(pt) |
print 'ct = ',b2a_p(ct) |
dct = alg.decrypt(ct) |
print 'dct = ',b2a_p(dct) |
assert(pt == dct), 'pt != dct' |
alg = Icedoll( 16*chr(0)) # autoPad |
pt = 17*4*'a' # non-block aligned |
ct = alg.encrypt(pt) |
print 'ct = ',b2a_p(ct) |
dct = alg.decrypt(ct) |
print 'dct = ',b2a_p(dct) |
assert(pt == dct), 'pt != dct' |
def xxxtestGladman_dev_vec(self): |
""" All 25 combinations of block and key size. |
These test vectors were generated by Dr Brian Gladman |
using the program aes_vec.cpp <brg@gladman.uk.net> 24th May 2001. |
vectors in file: dev_vec.txt |
http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm |
note -> ket, pt the same .. ct different |
""" |
def IcedollTestVec(i, key, pt, ct): |
""" Run single AES test vector with any legal blockSize |
and any legal key size. """ |
bkey, plainText, cipherText = a2b_hex(key), a2b_hex(pt), a2b_hex(ct) |
kSize = len(bkey) |
bSize = len(cipherText) # set block size to length of block |
alg = Icedoll(bkey, keySize=kSize, blockSize=bSize, padding=noPadding()) |
cct = alg.encrypt(plainText) |
print 'pt =',b2a_p(plainText) |
print 'ct =',b2a_p(cct) |
dcct = alg.decrypt(cct) |
#print '_dcct',b2a_p(dcct) |
self.assertEqual( dcct, plainText ) |
self.assertEqual( alg.encrypt(plainText), cipherText ) |
self.assertEqual( alg.decrypt(cipherText), plainText ) |
IcedollTestVec( i = 'dev_vec.txt 16 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '3925841d02dc09fbdc118597196a0b32') |
IcedollTestVec( i = 'dev_vec.txt 16 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '231d844639b31b412211cfe93712b880') |
IcedollTestVec( i = 'dev_vec.txt 16 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = 'f9fb29aefc384a250340d833b87ebc00') |
IcedollTestVec( i = 'dev_vec.txt 16 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '8faa8fe4dee9eb17caa4797502fc9d3f') |
IcedollTestVec( i = 'dev_vec.txt 16 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '1a6e6c2c662e7da6501ffb62bc9e93f3') |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/base.py |
---|
0,0 → 1,140 |
""" crypto.cipher.base |
Base 'BlockCipher' and Pad classes for cipher instances. |
BlockCipher supports automatic padding and type conversion. The BlockCipher |
class was written to make the actual algorithm code more readable and |
not for performance. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-04-25 changed block input |
""" |
from crypto.errors import DecryptNotBlockAlignedError |
from crypto.keyedHash.pbkdf2 import pbkdf2 |
class BlockCipher: |
""" Block ciphers """ |
def __init__(self): |
self.reset() |
def reset(self): |
self.resetEncrypt() |
self.resetDecrypt() |
def resetEncrypt(self): |
self.encryptBlockCount = 0 |
self.bytesToEncrypt = '' |
def resetDecrypt(self): |
self.decryptBlockCount = 0 |
self.bytesToDecrypt = '' |
def setPassphrase(self,passphrase): |
""" Use pbkdf2 to hash passphrase into a key """ |
self.setKey( pbkdf2( passphrase, self.name, 4096, self.keySize) ) |
def encrypt(self, plainText, more = None): |
""" Encrypt a string and return a binary string """ |
self.bytesToEncrypt += plainText # append plainText to any bytes from prior encrypt |
numBlocks, numExtraBytes = divmod(len(self.bytesToEncrypt), self.blockSize) |
cipherText = '' |
for i in range(numBlocks): |
bStart = i*self.blockSize |
ctBlock = self.encryptBlock(self.bytesToEncrypt[bStart:bStart+self.blockSize]) |
self.encryptBlockCount += 1 |
cipherText += ctBlock |
if numExtraBytes > 0: # save any bytes that are not block aligned |
self.bytesToEncrypt = self.bytesToEncrypt[-numExtraBytes:] |
else: |
self.bytesToEncrypt = '' |
if more == None: # no more data expected from caller |
finalBytes = self.padding.addPad(self.bytesToEncrypt,self.blockSize) |
if len(finalBytes) > 0: |
ctBlock = self.encryptBlock(finalBytes) |
self.encryptBlockCount += 1 |
cipherText += ctBlock |
self.resetEncrypt() |
return cipherText |
def decrypt(self, cipherText, more = None): |
""" Decrypt a string and return a string """ |
self.bytesToDecrypt += cipherText # append to any bytes from prior decrypt |
numBlocks, numExtraBytes = divmod(len(self.bytesToDecrypt), self.blockSize) |
if more == None: # no more calls to decrypt, should have all the data |
if numExtraBytes != 0: |
raise DecryptNotBlockAlignedError, 'Data not block aligned on decrypt' |
# hold back some bytes in case last decrypt has zero len |
if (more != None) and (numExtraBytes == 0) and (numBlocks >0) : |
numBlocks -= 1 |
numExtraBytes = self.blockSize |
plainText = '' |
for i in range(numBlocks): |
bStart = i*self.blockSize |
ptBlock = self.decryptBlock(self.bytesToDecrypt[bStart : bStart+self.blockSize]) |
self.decryptBlockCount += 1 |
plainText += ptBlock |
if numExtraBytes > 0: # save any bytes that are not block aligned |
self.bytesToEncrypt = self.bytesToEncrypt[-numExtraBytes:] |
else: |
self.bytesToEncrypt = '' |
if more == None: # last decrypt remove padding |
plainText = self.padding.removePad(plainText, self.blockSize) |
self.resetDecrypt() |
return plainText |
class BlockCipherWithIntegrity(BlockCipher): |
""" Base class for encryption with integrity checking |
just a holding place for now ... """ |
def __init__(self, authData, plainText): |
self.reset() |
class Pad: |
def __init__(self): |
pass # eventually could put in calculation of min and max size extension |
class padWithPadLen(Pad): |
""" Pad a binary string with the length of the padding """ |
def addPad(self, extraBytes, blockSize): |
""" Add padding to a binary string to make it an even multiple |
of the block size """ |
blocks, numExtraBytes = divmod(len(extraBytes), blockSize) |
padLength = blockSize - numExtraBytes |
return extraBytes + padLength*chr(padLength) |
def removePad(self, paddedBinaryString, blockSize): |
""" Remove padding from a binary string """ |
if not(0<len(paddedBinaryString)): |
raise DecryptNotBlockAlignedError, 'Expected More Data' |
return paddedBinaryString[:-ord(paddedBinaryString[-1])] |
class noPadding(Pad): |
""" No padding. Use this to get ECB behavior from encrypt/decrypt """ |
def addPad(self, extraBytes, blockSize): |
""" Add no padding """ |
return extraBytes |
def removePad(self, paddedBinaryString, blockSize): |
""" Remove no padding """ |
return paddedBinaryString |
class padWithZeros(Pad): |
""" Zero padding. Used in CBC_MAC processing """ |
def addPad(self, extraBytes, blockSize): |
""" Add padding to a binary string to make it an even multiple |
of the block size """ |
blocks, numExtraBytes = divmod(len(extraBytes), blockSize) |
padLength = blockSize - numExtraBytes |
return extraBytes + padLength*chr(0x00) |
def removePad(self, paddedBinaryString, blockSize): |
""" Remove no padding, you really should, but no way to tell padding size """ |
return paddedBinaryString |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/icedoll.py |
---|
0,0 → 1,102 |
""" crypto.cipher.icedoll |
Modification of Rijndael to provide infinite error extension. |
The ith round of Rijndael is tapped and used to process the |
subsequent block. |
Changes to base Rijndael are marked with: '# --------------------------' |
For Rijndael with N rounds, normally ECB mode is C[i] = Ek(N,P[i]) |
Modification is: |
Fi = Ek(t,P[i-1]) ; Fi, with i=0 is nonce or a fixed value |
C[i] = Fi^Ek(N,P[i]^Fi) |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
June 2002 |
February 2003 -> discovered Ron Rivest's "Tweakable Block Ciphers" |
http://theory.lcs.mit.edu/~rivest/publications.html |
These are about the same concept .... |
""" |
from crypto.cipher.base import BlockCipherWithIntegrity, padWithPadLen, noPadding |
from crypto.cipher.rijndael import * |
from binascii_plus import b2a_hex |
from copy import deepcopy |
class Icedoll(Rijndael): |
""" IceDoll encryption algorithm |
based on Rijndael, with added feedback for better integrity processing. |
Note - no integrity check is built into Icedoll directly |
""" |
def __init__(self,key=None,padding=padWithPadLen(),keySize=16,blockSize=16,tapRound=6,extraRounds=6): |
""" key, keysize, blockSize same as Rijndael, tapROund is feedback tap, """ |
self.tapRound = tapRound # <------- !!! change from Rijndael !!! |
self.extraRounds = extraRounds # <------- !!! change from Rijndael !!! |
self.name = 'ICEDOLL' |
self.keySize = keySize |
self.strength = keySize |
self.blockSize = blockSize # blockSize is in bytes |
self.padding = padding # change default to noPadding() to get normal ECB behavior |
assert( keySize%4==0 and NrTable[4].has_key(keySize/4)),'key size must be 16,20,24,29 or 32 bytes' |
assert( blockSize%4==0 and NrTable.has_key(blockSize/4)), 'block size must be 16,20,24,29 or 32 bytes' |
self.Nb = self.blockSize/4 # Nb is number of columns of 32 bit words |
self.Nk = keySize/4 # Nk is the key length in 32-bit words |
self.Nr = NrTable[self.Nb][self.Nk]+extraRounds # <------- !!! change from Rijndael !!! |
if key != None: |
self.setKey(key) |
def setKey(self, key): |
""" Set a key and generate the expanded key """ |
assert( len(key) == (self.Nk*4) ), 'Key length must be same as keySize parameter' |
self.__expandedKey = keyExpansion(self, key) |
self.reset() # BlockCipher.reset() |
def encryptBlock(self, plainTextBlock): |
""" Encrypt a block, plainTextBlock must be a array of bytes [Nb by 4] """ |
self.state = self._toBlock(plainTextBlock) |
if self.encryptBlockCount == 0: # first call, set frdd back |
self.priorFeedBack = self._toBlock(chr(0)*(4*self.Nb)) # <------- !!! change from Rijndael !!! |
AddRoundKey(self, self.priorFeedBack) # <------- !!! change from Rijndael !!! |
AddRoundKey(self, self.__expandedKey[0:self.Nb]) |
for round in range(1,self.Nr): #for round = 1 step 1 to Nr1 |
SubBytes(self) |
ShiftRows(self) |
MixColumns(self) |
if round == self.tapRound: |
nextFeedBack = deepcopy(self.state) # <------- !!! change from Rijndael !!! |
AddRoundKey(self, self.__expandedKey[round*self.Nb:(round+1)*self.Nb]) |
SubBytes(self) |
ShiftRows(self) |
AddRoundKey(self, self.__expandedKey[self.Nr*self.Nb:(self.Nr+1)*self.Nb]) |
AddRoundKey(self, self.priorFeedBack) # <------- !!! change from Rijndael !!! |
self.priorFeedBack = nextFeedBack # <------- !!! change from Rijndael !!! |
return self._toBString(self.state) |
def decryptBlock(self, encryptedBlock): |
""" decrypt a block (array of bytes) """ |
self.state = self._toBlock(encryptedBlock) |
if self.decryptBlockCount == 0: # first call, set frdd back |
self.priorFeedBack = self._toBlock( chr(0)*(4*self.Nb) ) # <------- !!! change from Rijndael !!! |
AddRoundKey(self, self.priorFeedBack) # <------- !!! change from Rijndael !!! |
AddRoundKey(self, self.__expandedKey[self.Nr*self.Nb:(self.Nr+1)*self.Nb]) |
for round in range(self.Nr-1,0,-1): |
InvShiftRows(self) |
InvSubBytes(self) |
AddRoundKey(self, self.__expandedKey[round*self.Nb:(round+1)*self.Nb]) |
if round == self.tapRound: |
nextFeedBack = deepcopy(self.state) # <------- !!! change from Rijndael !!! |
InvMixColumns(self) |
InvShiftRows(self) |
InvSubBytes(self) |
AddRoundKey(self, self.__expandedKey[0:self.Nb]) |
AddRoundKey(self, self.priorFeedBack) # <------- !!! change from Rijndael !!! |
self.priorFeedBack = nextFeedBack # <------- !!! change from Rijndael !!! |
return self._toBString(self.state) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/tkip_encr_test.py |
---|
0,0 → 1,97 |
#! /usr/bin/env python |
""" crypto.cipher.tkip_encr_test |
Tests for tkip encryption (mpdu only, no Michael) |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
January 2003 May have broken key mixing ...need to validate |
November 21, 2002 |
""" |
import unittest |
from crypto.cipher.tkip_encr import TKIP_encr |
from crypto.keyedHash.tkip_key_mixing import TKIP_Mixer |
from binascii_plus import a2b_p, b2a_p |
from struct import pack |
class TKIP_encr_TestVectors(unittest.TestCase): |
""" Test TKIP_encr algorithm using know values """ |
def checkTKIPtestVector(self, description, key, ta, iv, plainText, cipherText): |
""" Process TKIP encryption test vectors (no MIC) """ |
print '%s %s %s'%('='*((54-len(description))/2),description,'='*((54-len(description))/2)) |
# Convert from octet lists to string |
key = a2b_p(key) |
ta = a2b_p(ta) |
iv = a2b_p(iv) |
pt = a2b_p(plainText) |
kct = a2b_p(cipherText) |
mixer = TKIP_Mixer(key,ta) |
rc4key = mixer.newKey(iv) |
alg = TKIP_encr(key) |
alg.setTA(ta) |
print 'key: %s'%b2a_p(key)[9:] |
print 'rc4Key %s'%b2a_p(rc4key)[9:] # calculated |
print 'ta: %s'%b2a_p(ta)[9:] |
print 'iv: %s'%b2a_p(iv)[9:] |
print 'pt: %s'%b2a_p(pt)[9:] |
print 'kct: %s'%b2a_p(kct)[9:] |
ct = alg.encrypt(pt, iv) |
print 'ct: %s'%b2a_p(ct)[9:] |
cpt = alg.decrypt(kct) |
print 'cpt: %s'%b2a_p(cpt)[9:] |
print '========================================================' |
self.assertEqual( ct, kct ) |
alg.setKey(key) |
dct = alg.decrypt( ct ) |
self.assertEqual( dct, pt ) |
def testTKIP_KnownAnswer_01(self): |
""" TKIP Known Answer #1 |
Hand created from GC example 1 to include MIC in plaintext |
note - iv==0 """ |
description = "TKIP encr test 1 - all zero pn " |
key = "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f" |
ta = "10 22 33 44 55 66" |
iv = "00 00 00 00 00 00" |
plainText = """08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 |
18 19 1a 1b |
9c 12 11 62 08 e9 a0 83""" |
cipherText = """00 20 00 20 00 00 00 00 |
06 60 91 dc 37 82 31 ca 75 84 82 b6 54 b7 c5 3a |
81 4a cb bd 31 1e cc 3b 5c f7 df 69 53 0f c5 1b""" |
self.checkTKIPtestVector(description, key, ta, iv, plainText, cipherText) |
def XtestTKIP_KnownAnswer_02(self): |
""" TKIP Known Answer #2 """ |
description = "TKIP encr test 2" |
key = "36 23 0f 41 40 20 c9 e3 02 cb 5d 5d 28 d5 ff bf" |
ta = "01 02 03 04 05 06" |
iv = b2a_p(pack('<Q',0x123456785BA0)[:6]) |
rc4key = "5b 7b a0 31 a1 b0 60 55 f3" |
plainText = """aa aa 03 00 00 00 08 00 45 00 00 4e 66 1a 00 00 |
80 11 be 64 0a 00 01 22 0a ff ff ff 00 89 00 89 |
00 3a 00 00 80 a6 01 10 00 01 00 00 00 00 00""" |
cipherText = """58 11 A0 20 78 56 34 12 |
12 86 13 90 94 44 88 49 a3 9f e1 48 e0 f4 f3 8f |
78 ee de 66 c4 a2 8c a1 bd 39 00 7f 88 9b 95 c6 |
e6 9d cd 19 31 dc 25 61 c3 e1 9a d4 a6 4d 22 |
13 9b fa 26""" |
protectedMPDU = """08 41 23 01 01 02 03 04 05 06 01 02 03 04 05 06 |
01 22 33 44 55 66 00 00 a0 7b 5b 20 78 56 34 12 |
b8 2c 10 90 94 44 80 49 e6 9f e1 06 86 ee f3 8f |
f8 ff 60 02 ce a2 8d 83 b7 c6 ff 80 88 12 95 4f |
e6 a7 cd 19 b1 7a 24 71 c3 e0 9a d4 a6 4d 22 13 |
9b fa 26""" |
self.checkTKIPtestVector(description, key, ta, iv, plainText, cipherText) |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/aes_cbc_test.py |
---|
0,0 → 1,75 |
#! /usr/bin/env python |
""" crypto.cipher.cbc_test |
Tests for cbc encryption, uses AES for base algorithm |
Copyright (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.aes_cbc import AES_CBC |
from crypto.cipher.base import noPadding, padWithPadLen |
import unittest |
from binascii_plus import a2b_hex, b2a_hex, a2b_p |
class AES_CBC_autoIV(unittest.TestCase): |
def testAutoIV(self): |
k = a2b_hex('2b7e151628aed2a6abf7158809cf4f3c') |
alg = AES_CBC(key=k, padding=noPadding()) |
pt = a2b_hex('6bc1bee22e409f96e93d7e117393172a') |
ct = alg.encrypt(pt) |
dct = alg.decrypt(ct) |
self.assertEqual( dct, pt ) # 'AES_CBC auto IV error' |
def testAutoIVandPadding(self): |
k = a2b_hex('2b7e151628aed2a6abf7158809cf4f3c') |
alg = AES_CBC(key=k) # should default to padWithPadLen |
pt = a2b_hex('6bc1bee22e409f96e93d7e117393172a') |
ct = alg.encrypt(pt) |
dct = alg.decrypt(ct) |
self.assertEqual( dct, pt ) # 'AES_CBC auto IV and pad error' |
def testNonDupIV(self): |
""" Test to ensure that two instances of CBC don't get duplicate IV """ |
k = a2b_hex('2b7e151628aed2a6abf7158809cf4f3c') |
alg1 = AES_CBC(k) |
alg2 = AES_CBC(k) |
pt = a2b_hex('6bc1bee22e409f96e93d7e117393172a') |
ct1 = alg1.encrypt(pt) |
ct2 = alg2.encrypt(pt) |
assert( ct1!= ct2 ), 'AES_CBC dup IV error' |
class AES_CBC128_TestVectors(unittest.TestCase): |
""" Test AES_CBC128 algorithm using know values """ |
def testKnowValues(self): |
""" Test using vectors from NIST """ |
def CBCtestVector(key,iv,pt,kct): |
""" CBC test vectors using AES algorithm """ |
key,iv,pt,kct = a2b_hex(key),a2b_hex(iv),a2b_p(pt),a2b_p(kct) |
alg = AES_CBC(key, padding=noPadding()) |
self.assertEqual( alg.encrypt(pt,iv=iv), kct ) |
self.assertEqual( alg.decrypt(iv+kct), pt ) |
# http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf page 34 |
CBCtestVector( key = '2b7e151628aed2a6abf7158809cf4f3c', |
iv = '000102030405060708090a0b0c0d0e0f', |
pt = '6bc1bee22e409f96e93d7e117393172a', |
kct = '7649abac8119b246cee98e9b12e9197d') |
# four blocks of data |
CBCtestVector( key = '2b7e151628aed2a6abf7158809cf4f3c', |
iv = '000102030405060708090a0b0c0d0e0f', |
pt = """6bc1bee22e409f96e93d7e117393172a |
ae2d8a571e03ac9c9eb76fac45af8e51 |
30c81c46a35ce411e5fbc1191a0a52ef |
f69f2445df4f9b17ad2b417be66c3710""", |
kct = """7649abac8119b246cee98e9b12e9197d |
5086cb9b507219ee95db113a917678b2 |
73bed6b8e3c1743b7116e69e22229516 |
3ff1caa1681fac09120eca307586e1a7""") |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/tkip_encr.py |
---|
0,0 → 1,94 |
""" crypto.cipher.tkip_encr |
TKIP encryption from IEEE 802.11 TGi |
TKIP uses WEP (ARC4 with crc32) and key mixing |
This is only the encryption and not the Michael integrity check! |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
November 2002 |
""" |
from crypto.cipher.arc4 import ARC4 |
from zlib import crc32 |
from struct import pack |
from crypto.keyedHash.tkip_key_mixing import TKIP_Mixer |
from crypto.errors import BadKeySizeError, IntegrityCheckError |
from binascii_plus import * |
class TKIP_encr: |
""" TKIP Stream Cipher Algorithm without the Michael integrity check |
TKIP encryption on an MPDU using WEP with a longer 'iv' |
and the TKIP key mixing algorithm . This does NOT include |
the Michael integrity algorithm that operates on the MSDU data. |
""" |
def __init__(self, key=None, transmitterAddress=None, keyID=None): |
""" Initialize TKIP_encr, key -> octet string for key """ |
assert(keyID==0 or keyID==None), 'keyID should be zero in TKIP' |
self.keyId = 0 |
self.name = 'TKIP_encr' |
self.strength = 128 |
self.encryptHeaderSize = 8 # used to skip octets on decrypt |
self.arc4 = ARC4() # base algorithm |
self.keyMixer = TKIP_Mixer(key,transmitterAddress) |
if key != None: # normally in base init, uses adjusted keySize |
self.setKey(key) |
if transmitterAddress!=None: |
self.setTA(transmitterAddress) |
def setKey(self, key, ta=None): |
""" Set key, key string is 16 octets long """ |
self.keyMixer.setKey(key) |
if ta!=None: |
self.setTA(ta) |
def setTA(self, transmitterAddress): |
""" Set the transmitter address """ |
self.keyMixer.setTA(transmitterAddress) |
def _getIVandKeyID(self, cipherText): |
""" Parse the TKIP header to get iv and set KeyID |
iv is returned as octet string and is little-endian!!! |
""" |
assert(ord(cipherText[3])& 0x20),'extIV SHOULD be set in TKIP header' |
self.setCurrentKeyID = (ord(cipherText[3])&0xC0)>>6 |
return cipherText[:3] + cipherText[5:9] # note iv octets are little-endian!!! |
def _makeARC4key(self, tscOctets, keyID=0): |
""" Make an ARC4 key from TKIP Sequence Counter Octets (little-endian) """ |
if keyID!=0 : |
raise 'TKIP expects keyID of zero' |
print "tscOctets in tkmixer=",b2a_p(tscOctets) |
newKey = self.keyMixer.newKey(tscOctets) |
print "newKey=", b2a_p(newKey) |
return newKey |
def encrypt(self, plainText, iv): |
""" Encrypt a string and return a binary string |
iv is 6 octets of little-endian encoded pn |
""" |
assert(len(iv)==6),'TKIP bad IV size on encryption' |
self.pnField = iv |
self.arc4.setKey( self._makeARC4key(iv) ) |
eh1 = chr((ord(iv[0])|0x20)&0x7f) |
encryptionHeader = iv[0] + eh1 + iv[1] + chr((self.keyId<<6)|0x20) + iv[2:] |
crc = pack('<I', crc32(plainText) ) |
cipherText = encryptionHeader + self.arc4.encrypt(plainText+crc) |
return cipherText |
def decrypt(self, cipherText): |
""" Decrypt a WEP packet, assumes WEP 4 byte header on packet """ |
assert(ord(cipherText[3])& 0x20),'extIV SHOULD be set in TKIP header' |
self.setCurrentKeyID = (ord(cipherText[3])&0xC0)>>6 |
iv = cipherText[0]+cipherText[2]+cipherText[4:8] |
self.pnField = iv |
self.arc4.setKey( self._makeARC4key(iv) ) |
plainText = self.arc4.decrypt(cipherText[self.encryptHeaderSize:]) |
if plainText[-4:] != pack('<I',crc32(plainText[:-4])): # check data integrity |
raise IntegrityCheckError, 'WEP CRC Integrity Check Error' |
return plainText[:-4] |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/aes_cbc.py |
---|
0,0 → 1,20 |
""" crypto.cipher.aes_cbc |
AES_CBC Encryption Algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-06-14 |
""" |
from crypto.cipher.aes import AES |
from crypto.cipher.cbc import CBC |
from crypto.cipher.base import BlockCipher, padWithPadLen, noPadding |
class AES_CBC(CBC): |
""" AES encryption in CBC feedback mode """ |
def __init__(self, key=None, padding=padWithPadLen(), keySize=16): |
CBC.__init__( self, AES(key, noPadding(), keySize), padding) |
self.name = 'AES_CBC' |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/tkip_fake_crc_test.py |
---|
0,0 → 1,89 |
#! /usr/bin/env python |
""" crypto.cipher.tkip_fake_crc_test |
This module tests the creation of TKIP data that passes |
the WEP crc, but would fail the Michael MIC check. |
The IEEE TGi specification mandates a 60 second |
dissassociation of all sessions when two of these |
malicious packets are recieved in a 60 second period. |
Copyright © (c) 2003 by Paul A. Lambert. |
See LICENSE.txt for license terms of this software. |
""" |
import unittest |
from crypto.cipher.tkip_encr import TKIP_encr |
from crypto.common import xor |
from binascii_plus import * |
from zlib import crc32 |
from struct import pack, unpack |
class TKIP_tkip_fake_crc_test(unittest.TestCase): |
""" Create TKIP encrypted data, modifiy it and patch the crc32 """ |
def testTKIP_crc_modify(self): |
""" TKIP crc modification test """ |
key = a2b_p( "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f" ) # the PMK |
ta = a2b_p( "10 22 33 44 55 66" ) # the TK (key) is created from the iv and ta |
keyID = 0 |
alg = TKIP_encr(key, ta, keyID) # this is just the encryption algorithm with no Michael MIC |
plainText = ''.join([chr(i) for i in range(20)]) # 20 octets (0 t 19) |
iv = a2b_p( "01 00 00 00 00 00" ) # the little-endian encoded PacketNumber |
cipherText = alg.encrypt(plainText, iv) |
ctHeader = cipherText[0:8] # encoded iv and keyId |
ctData = cipherText[8:-4] |
ctCrcEncrypted = cipherText[-4:] # just the encrypted crc fields |
# lets change the first octet of the data from 0x00 to 0x01 |
base = (len(ctData))*chr(0) |
baseCrc = crc32(base) |
bitMask = chr(1)+(len(ctData)-1)*chr(0) |
maskCrc = crc32(bitMask) |
maskedCt = xor(bitMask,ctData) |
maskedCtCrc = crc32(maskedCt) |
print "--------------- make a modified packet and MIC ------------" |
print "plainText = %s " % b2a_hex(plainText) |
print "cipherText= %s " % b2a_hex(cipherText) |
print "ctData = %s " % b2a_hex(ctData) |
print "ctxtCrc = %s " % b2a_hex(ctCrcEncrypted) |
print "base = %s " % b2a_hex(base) |
print "baseCrc = %0X" % baseCrc |
print "mask = %s " % b2a_hex(bitMask) |
print "maskCrc = %0X" % maskCrc |
print "maskedCt = %s " % b2a_hex(maskedCt) |
print "maskCtCrc= %0X" % maskedCtCrc |
maskDiff = maskCrc ^ baseCrc |
newCtCrc = pack('<I', (maskDiff ^ unpack('<I',ctCrcEncrypted)[0]) ) |
newCt = ctHeader + maskedCt + newCtCrc |
newPt = alg.decrypt(newCt) # this will raise an exception if the crc is 'bad'! |
print "newPt = %s " % b2a_hex(newPt) |
def test_TKIP_MIC_Analysis(self): |
""" Simple analysis of TKIP CRC attacks based on |
given Michael strength of 2^20 |
""" |
michaelStrength = 2.**20 # probability of MIC attack from N.F. |
secondsPerHour = 60.*60. |
secondsPerDay = 24.*secondsPerHour |
secondsPerYear = 365.*secondsPerDay |
attacksPerSecond = 1. |
attacksPerYear = attacksPerSecond * secondsPerYear |
print "\n\n---- Michael Attack Analysis w/wo Countermeasures ----" |
print "%s"%"Attacks Number Counter Mean" |
print "%s"%" per of Measure Success" |
print "%s"%"Second STAs Type Time" |
print "------------------------------------" |
print " 1 1 none %3d days" % (michaelStrength/secondsPerDay/attacksPerSecond) |
attacksPerSecond = 100 |
print " 100 1 none %3d hours" % (michaelStrength/secondsPerHour/attacksPerSecond) |
print " .016 1 60sec/session %3d year" % (michaelStrength/secondsPerYear/(1/60.)) |
print " 100/60 100 60sec/session %3d days" % (michaelStrength/secondsPerDay/(100./60.) ) |
print " 100 1 none %3d hours" % (michaelStrength/secondsPerHour/attacksPerSecond) |
if __name__ == '__main__': |
# Run the tests from the command line |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/test_all_ciphers.py |
---|
0,0 → 1,26 |
#! /usr/bin/env python |
""" crypto.cipher.test_all_ciphers |
All unit tests in the cipher package |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
import unittest |
import crypto.cipher.aes_cbc_test |
import crypto.cipher.aes_test |
import crypto.cipher.arc4_test |
import crypto.cipher.cbc_test |
import crypto.cipher.ccm_test |
import crypto.cipher.icedoll_test |
import crypto.cipher.rijndael_test |
import crypto.cipher.tkip_encr_test |
import crypto.cipher.tkip_fake_crc_test |
import crypto.cipher.wep_test |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/cbc_test.py |
---|
0,0 → 1,127 |
#! /usr/bin/env python |
""" crypto.cipher.cbc_test |
Tests for cbc encryption, uses AES for base algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.cbc import CBC |
from crypto.cipher.aes import AES |
from crypto.cipher.rijndael import Rijndael |
from crypto.cipher.base import noPadding |
import unittest |
from binascii_plus import b2a_hex, a2b_p, b2a_p |
class CBC_AES128_TestVectors(unittest.TestCase): |
""" Test CBC with AES128 algorithm using know values """ |
def testKnowValues(self): |
""" Test using vectors from NIST cbc_e_m.txt""" |
def CBCtestVector(key,iv,pt,kct): |
""" CBC test vectors using AES algorithm """ |
key,iv,pt,kct = a2b_p(key),a2b_p(iv),a2b_p(pt),a2b_p(kct) |
alg = CBC(AES(key), padding=noPadding()) |
self.assertEqual( alg.encrypt(pt,iv=iv), kct ) |
self.assertEqual( alg.decrypt(iv+kct), pt ) |
# http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf page 34 |
CBCtestVector( key = '2b7e151628aed2a6abf7158809cf4f3c', |
iv = '000102030405060708090a0b0c0d0e0f', |
pt = '6bc1bee22e409f96e93d7e117393172a', |
kct = '7649abac8119b246cee98e9b12e9197d') |
# four blocks of data |
CBCtestVector( key = '2b7e151628aed2a6abf7158809cf4f3c', |
iv = '000102030405060708090a0b0c0d0e0f', |
pt = """6bc1bee22e409f96e93d7e117393172a |
ae2d8a571e03ac9c9eb76fac45af8e51 |
30c81c46a35ce411e5fbc1191a0a52ef |
f69f2445df4f9b17ad2b417be66c3710""", |
kct = """7649abac8119b246cee98e9b12e9197d |
5086cb9b507219ee95db113a917678b2 |
73bed6b8e3c1743b7116e69e22229516 |
3ff1caa1681fac09120eca307586e1a7""") |
class CBC_Rijndael_Test(unittest.TestCase): |
""" CBC test with Rijndael """ |
def testCBC_Rijndael_256(self): |
""" Rijndael CBC 256 """ |
key = '2b7e151628aed2a6abf7158809cf4f3c' |
iv = '000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f' |
pt = """6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51 |
30c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710""" |
key,iv,pt = a2b_p(key),a2b_p(iv),a2b_p(pt) |
alg = CBC(Rijndael(key, blockSize=32)) |
ct = alg.encrypt(pt,iv=iv) |
self.assertEqual( alg.decrypt(iv+ct), pt ) |
def testCBC_Rijndael_variable_data(self): |
""" Rijndael CBC 256 """ |
key = '2b7e151628aed2a6abf7158809cf4f3c' |
iv = '000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f' |
key,iv = a2b_p(key),a2b_p(iv) |
alg = CBC(Rijndael(key, blockSize=32)) |
for i in range(100): |
pt = i*'a' |
ct = alg.encrypt(pt,iv=iv) |
self.assertEqual( alg.decrypt(iv+ct), pt ) |
class CBC_Auto_IV_Test(unittest.TestCase): |
""" CBC IV tests""" |
def testIVuniqueness(self): |
""" Test that two different instances have different IVs """ |
key = a2b_p('2b7e151628aed2a6abf7158809cf4f3c') |
pt = "This is a test case" |
alg1 = CBC(Rijndael(key, blockSize=32)) |
alg2 = CBC(Rijndael(key, blockSize=32)) |
ct1 = alg1.encrypt(pt) |
ct2 = alg2.encrypt(pt) |
self.assertNotEqual( ct1,ct2 ) |
def testIVmultencryptUnique(self): |
""" Test that two different encrypts have different IVs """ |
key = a2b_p('2b7e151628aed2a6abf7158809cf4f3c') |
pt = "This is yet another test case" |
alg1 = CBC(Rijndael(key, blockSize=32)) |
ct1 = alg1.encrypt(pt) |
ct2 = alg1.encrypt(pt) |
self.assertNotEqual( ct1, ct2 ) |
self.assertEqual( alg1.decrypt(ct1), pt ) |
self.assertEqual( alg1.decrypt(ct1), alg1.decrypt(ct2) ) |
class CBC_multipart_tests(unittest.TestCase): |
""" Test mulitple calls to encrypt/decrypt with moreData set """ |
def testMultipassEncrypt(self): |
""" Test moreData usage """ |
alg = CBC(Rijndael(16*chr(0), blockSize=32)) |
ct1 = '' |
for i in range(129): |
ct1 += alg.encrypt('a',more=1) |
ct1 += alg.encrypt('') # flush any remaining |
ct2 = alg.encrypt(129*'a') |
self.assertNotEqual( ct1, ct2 ) |
pt1 = alg.decrypt(ct1) |
pt2 = alg.decrypt(ct2) |
self.assertEqual(pt1,pt2) |
pt3 = alg.decrypt('',more=1) |
for i in range(len(ct2)): |
pt3 += alg.decrypt(ct2[i], more=1) |
pt3 += alg.decrypt('') |
class CBC_another_Simple_Test(unittest.TestCase): |
""" Test simple encrypt decrypt """ |
def test(self): |
aes_cbc = CBC(AES()) |
aes_cbc.setKey('aaaaaaaaaaaaaaaa') |
ct1 = aes_cbc.encrypt('test') |
ct2 = aes_cbc.encrypt('test') # note - auto iv, reslt is different ths time |
# text below from cli usage that failed :-( ... bad sized message |
#aes_cbc.decrypt('U+f)f\xfb\x96\xc8vu\xbb\xff7BJ}') |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/rijndael_test.py |
---|
0,0 → 1,164 |
#! /usr/bin/env python |
""" crypto.cipher.rijndael_test |
Tests for the rijndael encryption algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.rijndael import Rijndael |
from crypto.cipher.base import noPadding |
from binascii import a2b_hex |
import unittest |
class Rijndael_TestVectors(unittest.TestCase): |
""" Test Rijndael algorithm using know values.""" |
def testGladman_dev_vec(self): |
""" All 25 combinations of block and key size. |
These test vectors were generated by Dr Brian Gladman |
using the program aes_vec.cpp <brg@gladman.uk.net> 24th May 2001. |
vectors in file: dev_vec.txt |
http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm |
""" |
def RijndaelTestVec(i, key, pt, ct): |
""" Run single AES test vector with any legal blockSize |
and any legal key size. """ |
bkey, plainText, cipherText = a2b_hex(key), a2b_hex(pt), a2b_hex(ct) |
kSize = len(bkey) |
bSize = len(cipherText) # set block size to length of block |
alg = Rijndael(bkey, keySize=kSize, blockSize=bSize, padding=noPadding()) |
self.assertEqual( alg.encrypt(plainText), cipherText ) |
self.assertEqual( alg.decrypt(cipherText), plainText ) |
RijndaelTestVec( i = 'dev_vec.txt 16 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '3925841d02dc09fbdc118597196a0b32') |
RijndaelTestVec( i = 'dev_vec.txt 16 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '231d844639b31b412211cfe93712b880') |
RijndaelTestVec( i = 'dev_vec.txt 16 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = 'f9fb29aefc384a250340d833b87ebc00') |
RijndaelTestVec( i = 'dev_vec.txt 16 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '8faa8fe4dee9eb17caa4797502fc9d3f') |
RijndaelTestVec( i = 'dev_vec.txt 16 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e0370734', |
ct = '1a6e6c2c662e7da6501ffb62bc9e93f3') |
RijndaelTestVec( i = 'dev_vec.txt 20 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e03707344a409382', |
ct = '16e73aec921314c29df905432bc8968ab64b1f51') |
RijndaelTestVec( i = 'dev_vec.txt 20 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e03707344a409382', |
ct = '0553eb691670dd8a5a5b5addf1aa7450f7a0e587') |
RijndaelTestVec( i = 'dev_vec.txt 20 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e03707344a409382', |
ct = '73cd6f3423036790463aa9e19cfcde894ea16623') |
RijndaelTestVec( i = 'dev_vec.txt 20 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e03707344a409382', |
ct = '601b5dcd1cf4ece954c740445340bf0afdc048df') |
RijndaelTestVec( i = 'dev_vec.txt 20 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e03707344a409382', |
ct = '579e930b36c1529aa3e86628bacfe146942882cf') |
RijndaelTestVec( i = 'dev_vec.txt 24 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d', |
ct = 'b24d275489e82bb8f7375e0d5fcdb1f481757c538b65148a') |
RijndaelTestVec( i = 'dev_vec.txt 24 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d', |
ct = '738dae25620d3d3beff4a037a04290d73eb33521a63ea568') |
RijndaelTestVec( i = 'dev_vec.txt 24 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d', |
ct = '725ae43b5f3161de806a7c93e0bca93c967ec1ae1b71e1cf') |
RijndaelTestVec( i = 'dev_vec.txt 24 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d', |
ct = 'bbfc14180afbf6a36382a061843f0b63e769acdc98769130') |
RijndaelTestVec( i = 'dev_vec.txt 24 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d', |
ct = '0ebacf199e3315c2e34b24fcc7c46ef4388aa475d66c194c') |
RijndaelTestVec( i = 'dev_vec.txt 28 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9', |
ct = 'b0a8f78f6b3c66213f792ffd2a61631f79331407a5e5c8d3793aceb1') |
RijndaelTestVec( i = 'dev_vec.txt 28 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9', |
ct = '08b99944edfce33a2acb131183ab0168446b2d15e958480010f545e3') |
RijndaelTestVec( i = 'dev_vec.txt 28 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9', |
ct = 'be4c597d8f7efe22a2f7e5b1938e2564d452a5bfe72399c7af1101e2') |
RijndaelTestVec( i = 'dev_vec.txt 28 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9', |
ct = 'ef529598ecbce297811b49bbed2c33bbe1241d6e1a833dbe119569e8') |
RijndaelTestVec( i = 'dev_vec.txt 28 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9', |
ct = '02fafc200176ed05deb8edb82a3555b0b10d47a388dfd59cab2f6c11') |
RijndaelTestVec( i = 'dev_vec.txt 32 byte block, 16 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8', |
ct = '7d15479076b69a46ffb3b3beae97ad8313f622f67fedb487de9f06b9ed9c8f19') |
RijndaelTestVec( i = 'dev_vec.txt 32 byte block, 20 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8', |
ct = '514f93fb296b5ad16aa7df8b577abcbd484decacccc7fb1f18dc567309ceeffd') |
RijndaelTestVec( i = 'dev_vec.txt 32 byte block, 24 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8', |
ct = '5d7101727bb25781bf6715b0e6955282b9610e23a43c2eb062699f0ebf5887b2') |
RijndaelTestVec( i = 'dev_vec.txt 32 byte block, 28 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8', |
ct = 'd56c5a63627432579e1dd308b2c8f157b40a4bfb56fea1377b25d3ed3d6dbf80') |
RijndaelTestVec( i = 'dev_vec.txt 32 byte block, 32 byte key', |
key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe', |
pt = '3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8', |
ct = 'a49406115dfb30a40418aafa4869b7c6a886ff31602a7dd19c889dc64f7e4e7a') |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/cbc.py |
---|
0,0 → 1,109 |
""" crypto.cipher.cbc |
CBC mode of encryption for block ciphers. |
This algorithm mode wraps any BlockCipher to make a |
Cipher Block Chaining mode. |
Note !!!! auto IV uses python default random :-( |
should not be 'too bad' (tm) for this cbc applicaiton |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from crypto.cipher.base import BlockCipher, padWithPadLen, noPadding |
from crypto.errors import EncryptError |
from crypto.common import xor |
from random import Random # should change to crypto.random!!! |
class CBC(BlockCipher): |
""" The CBC class wraps block ciphers to make cipher block chaining (CBC) mode |
algorithms. The initialization (IV) is automatic if set to None. Padding |
is also automatic based on the Pad class used to initialize the algorithm |
""" |
def __init__(self, blockCipherInstance, padding = padWithPadLen()): |
""" CBC algorithms are created by initializing with a BlockCipher instance """ |
self.baseCipher = blockCipherInstance |
self.name = self.baseCipher.name + '_CBC' |
self.blockSize = self.baseCipher.blockSize |
self.keySize = self.baseCipher.keySize |
self.padding = padding |
self.baseCipher.padding = noPadding() # baseCipher should NOT pad!! |
self.r = Random() # for IV generation, currently uses |
# mediocre standard distro version <---------------- |
import time |
newSeed = time.ctime()+str(self.r) # seed with instance location |
self.r.seed(newSeed) # to make unique |
self.reset() |
def setKey(self, key): |
self.baseCipher.setKey(key) |
# Overload to reset both CBC state and the wrapped baseCipher |
def resetEncrypt(self): |
BlockCipher.resetEncrypt(self) # reset CBC encrypt state (super class) |
self.baseCipher.resetEncrypt() # reset base cipher encrypt state |
def resetDecrypt(self): |
BlockCipher.resetDecrypt(self) # reset CBC state (super class) |
self.baseCipher.resetDecrypt() # reset base cipher decrypt state |
def encrypt(self, plainText, iv=None, more=None): |
""" CBC encryption - overloads baseCipher to allow optional explicit IV |
when iv=None, iv is auto generated! |
""" |
if self.encryptBlockCount == 0: |
self.iv = iv |
else: |
assert(iv==None), 'IV used only on first call to encrypt' |
return BlockCipher.encrypt(self,plainText, more=more) |
def decrypt(self, cipherText, iv=None, more=None): |
""" CBC decryption - overloads baseCipher to allow optional explicit IV |
when iv=None, iv is auto generated! |
""" |
if self.decryptBlockCount == 0: |
self.iv = iv |
else: |
assert(iv==None), 'IV used only on first call to decrypt' |
return BlockCipher.decrypt(self, cipherText, more=more) |
def encryptBlock(self, plainTextBlock): |
""" CBC block encryption, IV is set with 'encrypt' """ |
auto_IV = '' |
if self.encryptBlockCount == 0: |
if self.iv == None: |
# generate IV and use |
self.iv = ''.join([chr(self.r.randrange(256)) for i in range(self.blockSize)]) |
self.prior_encr_CT_block = self.iv |
auto_IV = self.prior_encr_CT_block # prepend IV if it's automatic |
else: # application provided IV |
assert(len(self.iv) == self.blockSize ),'IV must be same length as block' |
self.prior_encr_CT_block = self.iv |
""" encrypt the prior CT XORed with the PT """ |
ct = self.baseCipher.encryptBlock( xor(self.prior_encr_CT_block, plainTextBlock) ) |
self.prior_encr_CT_block = ct |
return auto_IV+ct |
def decryptBlock(self, encryptedBlock): |
""" Decrypt a single block """ |
if self.decryptBlockCount == 0: # first call, process IV |
if self.iv == None: # auto decrypt IV? |
self.prior_CT_block = encryptedBlock |
return '' |
else: |
assert(len(self.iv)==self.blockSize),"Bad IV size on CBC decryption" |
self.prior_CT_block = self.iv |
dct = self.baseCipher.decryptBlock(encryptedBlock) |
""" XOR the prior decrypted CT with the prior CT """ |
dct_XOR_priorCT = xor( self.prior_CT_block, dct ) |
self.prior_CT_block = encryptedBlock |
return dct_XOR_priorCT |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/arc4_test.py |
---|
0,0 → 1,140 |
#! /usr/bin/env python |
""" crypto.cipher.arc4_test |
Tests for arc4 encryption, uses AES for base algorithm |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
July 24, 2002 |
""" |
import unittest |
from crypto.cipher.arc4 import ARC4 |
from binascii_plus import b2a_p |
class ARC4_TestVectors(unittest.TestCase): |
""" Test ARC4 algorithm using know values """ |
def testKnowValues(self): |
""" Test using vectors from...""" |
def ARC4testVector(testCase,plainText,key,cipherText): |
""" Process ARC4 test vectors from RFCxxxx""" |
print '%s %s %s'%('='*((54-len(testCase))/2),testCase,'='*((54-len(testCase))/2)) |
# Convert from octet lists to string |
pt = ''.join([chr(i) for i in plainText]) |
key = ''.join([chr(i) for i in key]) |
kct = ''.join([chr(i) for i in cipherText]) |
alg = ARC4(key) |
print 'key: %s'%b2a_p(key)[9:] |
print 'pt: %s'%b2a_p(pt)[9:] |
ct = alg.encrypt(pt) |
print 'ct: %s'%b2a_p(ct)[9:] |
print 'kct: %s'%b2a_p(kct)[9:] |
print '========================================================' |
self.assertEqual( ct, kct ) |
alg.setKey(key) |
dct = alg.decrypt( ct ) |
self.assertEqual( dct, pt ) |
ARC4testVector( |
testCase = "Test Vectors from [CRYPTLIB]", |
plainText = (0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), |
key = (0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF), |
cipherText = (0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79)) |
ARC4testVector( |
testCase = "Test Vectors from [COMMERCE]", |
plainText = (0xdc, 0xee, 0x4c, 0xf9, 0x2c), |
key = (0x61, 0x8a, 0x63, 0xd2, 0xfb), |
cipherText = (0xf1, 0x38, 0x29, 0xc9, 0xde)) |
ARC4testVector( |
testCase = "Test Vectors from [SSH ARCFOUR]", |
plainText = (0x52, 0x75, 0x69, 0x73, 0x6c, 0x69, 0x6e, 0x6e, |
0x75, 0x6e, 0x20, 0x6c, 0x61, 0x75, 0x6c, 0x75, |
0x20, 0x6b, 0x6f, 0x72, 0x76, 0x69, 0x73, 0x73, |
0x73, 0x61, 0x6e, 0x69, 0x2c, 0x20, 0x74, 0xe4, |
0x68, 0x6b, 0xe4, 0x70, 0xe4, 0x69, 0x64, 0x65, |
0x6e, 0x20, 0x70, 0xe4, 0xe4, 0x6c, 0x6c, 0xe4, |
0x20, 0x74, 0xe4, 0x79, 0x73, 0x69, 0x6b, 0x75, |
0x75, 0x2e, 0x20, 0x4b, 0x65, 0x73, 0xe4, 0x79, |
0xf6, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, |
0x6e, 0x69, 0x20, 0x6f, 0x6d, 0x61, 0x6e, 0x61, |
0x6e, 0x69, 0x2c, 0x20, 0x6b, 0x61, 0x73, 0x6b, |
0x69, 0x73, 0x61, 0x76, 0x75, 0x75, 0x6e, 0x20, |
0x6c, 0x61, 0x61, 0x6b, 0x73, 0x6f, 0x74, 0x20, |
0x76, 0x65, 0x72, 0x68, 0x6f, 0x75, 0x75, 0x2e, |
0x20, 0x45, 0x6e, 0x20, 0x6d, 0x61, 0x20, 0x69, |
0x6c, 0x6f, 0x69, 0x74, 0x73, 0x65, 0x2c, 0x20, |
0x73, 0x75, 0x72, 0x65, 0x20, 0x68, 0x75, 0x6f, |
0x6b, 0x61, 0x61, 0x2c, 0x20, 0x6d, 0x75, 0x74, |
0x74, 0x61, 0x20, 0x6d, 0x65, 0x74, 0x73, 0xe4, |
0x6e, 0x20, 0x74, 0x75, 0x6d, 0x6d, 0x75, 0x75, |
0x73, 0x20, 0x6d, 0x75, 0x6c, 0x6c, 0x65, 0x20, |
0x74, 0x75, 0x6f, 0x6b, 0x61, 0x61, 0x2e, 0x20, |
0x50, 0x75, 0x75, 0x6e, 0x74, 0x6f, 0x20, 0x70, |
0x69, 0x6c, 0x76, 0x65, 0x6e, 0x2c, 0x20, 0x6d, |
0x69, 0x20, 0x68, 0x75, 0x6b, 0x6b, 0x75, 0x75, |
0x2c, 0x20, 0x73, 0x69, 0x69, 0x6e, 0x74, 0x6f, |
0x20, 0x76, 0x61, 0x72, 0x61, 0x6e, 0x20, 0x74, |
0x75, 0x75, 0x6c, 0x69, 0x73, 0x65, 0x6e, 0x2c, |
0x20, 0x6d, 0x69, 0x20, 0x6e, 0x75, 0x6b, 0x6b, |
0x75, 0x75, 0x2e, 0x20, 0x54, 0x75, 0x6f, 0x6b, |
0x73, 0x75, 0x74, 0x20, 0x76, 0x61, 0x6e, 0x61, |
0x6d, 0x6f, 0x6e, 0x20, 0x6a, 0x61, 0x20, 0x76, |
0x61, 0x72, 0x6a, 0x6f, 0x74, 0x20, 0x76, 0x65, |
0x65, 0x6e, 0x2c, 0x20, 0x6e, 0x69, 0x69, 0x73, |
0x74, 0xe4, 0x20, 0x73, 0x79, 0x64, 0xe4, 0x6d, |
0x65, 0x6e, 0x69, 0x20, 0x6c, 0x61, 0x75, 0x6c, |
0x75, 0x6e, 0x20, 0x74, 0x65, 0x65, 0x6e, 0x2e, |
0x20, 0x2d, 0x20, 0x45, 0x69, 0x6e, 0x6f, 0x20, |
0x4c, 0x65, 0x69, 0x6e, 0x6f), |
key = (0x29, 0x04, 0x19, 0x72, 0xfb, 0x42, 0xba, 0x5f, |
0xc7, 0x12, 0x77, 0x12, 0xf1, 0x38, 0x29, 0xc9), |
cipherText = (0x35, 0x81, 0x86, 0x99, 0x90, 0x01, 0xe6, 0xb5, |
0xda, 0xf0, 0x5e, 0xce, 0xeb, 0x7e, 0xee, 0x21, |
0xe0, 0x68, 0x9c, 0x1f, 0x00, 0xee, 0xa8, 0x1f, |
0x7d, 0xd2, 0xca, 0xae, 0xe1, 0xd2, 0x76, 0x3e, |
0x68, 0xaf, 0x0e, 0xad, 0x33, 0xd6, 0x6c, 0x26, |
0x8b, 0xc9, 0x46, 0xc4, 0x84, 0xfb, 0xe9, 0x4c, |
0x5f, 0x5e, 0x0b, 0x86, 0xa5, 0x92, 0x79, 0xe4, |
0xf8, 0x24, 0xe7, 0xa6, 0x40, 0xbd, 0x22, 0x32, |
0x10, 0xb0, 0xa6, 0x11, 0x60, 0xb7, 0xbc, 0xe9, |
0x86, 0xea, 0x65, 0x68, 0x80, 0x03, 0x59, 0x6b, |
0x63, 0x0a, 0x6b, 0x90, 0xf8, 0xe0, 0xca, 0xf6, |
0x91, 0x2a, 0x98, 0xeb, 0x87, 0x21, 0x76, 0xe8, |
0x3c, 0x20, 0x2c, 0xaa, 0x64, 0x16, 0x6d, 0x2c, |
0xce, 0x57, 0xff, 0x1b, 0xca, 0x57, 0xb2, 0x13, |
0xf0, 0xed, 0x1a, 0xa7, 0x2f, 0xb8, 0xea, 0x52, |
0xb0, 0xbe, 0x01, 0xcd, 0x1e, 0x41, 0x28, 0x67, |
0x72, 0x0b, 0x32, 0x6e, 0xb3, 0x89, 0xd0, 0x11, |
0xbd, 0x70, 0xd8, 0xaf, 0x03, 0x5f, 0xb0, 0xd8, |
0x58, 0x9d, 0xbc, 0xe3, 0xc6, 0x66, 0xf5, 0xea, |
0x8d, 0x4c, 0x79, 0x54, 0xc5, 0x0c, 0x3f, 0x34, |
0x0b, 0x04, 0x67, 0xf8, 0x1b, 0x42, 0x59, 0x61, |
0xc1, 0x18, 0x43, 0x07, 0x4d, 0xf6, 0x20, 0xf2, |
0x08, 0x40, 0x4b, 0x39, 0x4c, 0xf9, 0xd3, 0x7f, |
0xf5, 0x4b, 0x5f, 0x1a, 0xd8, 0xf6, 0xea, 0x7d, |
0xa3, 0xc5, 0x61, 0xdf, 0xa7, 0x28, 0x1f, 0x96, |
0x44, 0x63, 0xd2, 0xcc, 0x35, 0xa4, 0xd1, 0xb0, |
0x34, 0x90, 0xde, 0xc5, 0x1b, 0x07, 0x11, 0xfb, |
0xd6, 0xf5, 0x5f, 0x79, 0x23, 0x4d, 0x5b, 0x7c, |
0x76, 0x66, 0x22, 0xa6, 0x6d, 0xe9, 0x2b, 0xe9, |
0x96, 0x46, 0x1d, 0x5e, 0x4d, 0xc8, 0x78, 0xef, |
0x9b, 0xca, 0x03, 0x05, 0x21, 0xe8, 0x35, 0x1e, |
0x4b, 0xae, 0xd2, 0xfd, 0x04, 0xf9, 0x46, 0x73, |
0x68, 0xc4, 0xad, 0x6a, 0xc1, 0x86, 0xd0, 0x82, |
0x45, 0xb2, 0x63, 0xa2, 0x66, 0x6d, 0x1f, 0x6c, |
0x54, 0x20, 0xf1, 0x59, 0x9d, 0xfd, 0x9f, 0x43, |
0x89, 0x21, 0xc2, 0xf5, 0xa4, 0x63, 0x93, 0x8c, |
0xe0, 0x98, 0x22, 0x65, 0xee, 0xf7, 0x01, 0x79, |
0xbc, 0x55, 0x3f, 0x33, 0x9e, 0xb1, 0xa4, 0xc1, |
0xaf, 0x5f, 0x6a, 0x54, 0x7f)) |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/rijndael.py |
---|
0,0 → 1,288 |
""" crypto.cipher.rijndael |
Rijndael encryption algorithm |
This byte oriented implementation is intended to closely |
match FIPS specification for readability. It is not implemented |
for performance. |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-06-01 |
""" |
from crypto.cipher.base import BlockCipher, padWithPadLen, noPadding |
class Rijndael(BlockCipher): |
""" Rijndael encryption algorithm """ |
def __init__(self, key = None, padding = padWithPadLen(), keySize=16, blockSize=16 ): |
self.name = 'RIJNDAEL' |
self.keySize = keySize |
self.strength = keySize*8 |
self.blockSize = blockSize # blockSize is in bytes |
self.padding = padding # change default to noPadding() to get normal ECB behavior |
assert( keySize%4==0 and NrTable[4].has_key(keySize/4)),'key size must be 16,20,24,29 or 32 bytes' |
assert( blockSize%4==0 and NrTable.has_key(blockSize/4)), 'block size must be 16,20,24,29 or 32 bytes' |
self.Nb = self.blockSize/4 # Nb is number of columns of 32 bit words |
self.Nk = keySize/4 # Nk is the key length in 32-bit words |
self.Nr = NrTable[self.Nb][self.Nk] # The number of rounds (Nr) is a function of |
# the block (Nb) and key (Nk) sizes. |
if key != None: |
self.setKey(key) |
def setKey(self, key): |
""" Set a key and generate the expanded key """ |
assert( len(key) == (self.Nk*4) ), 'Key length must be same as keySize parameter' |
self.__expandedKey = keyExpansion(self, key) |
self.reset() # BlockCipher.reset() |
def encryptBlock(self, plainTextBlock): |
""" Encrypt a block, plainTextBlock must be a array of bytes [Nb by 4] """ |
self.state = self._toBlock(plainTextBlock) |
AddRoundKey(self, self.__expandedKey[0:self.Nb]) |
for round in range(1,self.Nr): #for round = 1 step 1 to Nr1 |
SubBytes(self) |
ShiftRows(self) |
MixColumns(self) |
AddRoundKey(self, self.__expandedKey[round*self.Nb:(round+1)*self.Nb]) |
SubBytes(self) |
ShiftRows(self) |
AddRoundKey(self, self.__expandedKey[self.Nr*self.Nb:(self.Nr+1)*self.Nb]) |
return self._toBString(self.state) |
def decryptBlock(self, encryptedBlock): |
""" decrypt a block (array of bytes) """ |
self.state = self._toBlock(encryptedBlock) |
AddRoundKey(self, self.__expandedKey[self.Nr*self.Nb:(self.Nr+1)*self.Nb]) |
for round in range(self.Nr-1,0,-1): |
InvShiftRows(self) |
InvSubBytes(self) |
AddRoundKey(self, self.__expandedKey[round*self.Nb:(round+1)*self.Nb]) |
InvMixColumns(self) |
InvShiftRows(self) |
InvSubBytes(self) |
AddRoundKey(self, self.__expandedKey[0:self.Nb]) |
return self._toBString(self.state) |
def _toBlock(self, bs): |
""" Convert binary string to array of bytes, state[col][row]""" |
assert ( len(bs) == 4*self.Nb ), 'Rijndarl blocks must be of size blockSize' |
return [[ord(bs[4*i]),ord(bs[4*i+1]),ord(bs[4*i+2]),ord(bs[4*i+3])] for i in range(self.Nb)] |
def _toBString(self, block): |
""" Convert block (array of bytes) to binary string """ |
l = [] |
for col in block: |
for rowElement in col: |
l.append(chr(rowElement)) |
return ''.join(l) |
#------------------------------------- |
""" Number of rounds Nr = NrTable[Nb][Nk] |
Nb Nk=4 Nk=5 Nk=6 Nk=7 Nk=8 |
------------------------------------- """ |
NrTable = {4: {4:10, 5:11, 6:12, 7:13, 8:14}, |
5: {4:11, 5:11, 6:12, 7:13, 8:14}, |
6: {4:12, 5:12, 6:12, 7:13, 8:14}, |
7: {4:13, 5:13, 6:13, 7:13, 8:14}, |
8: {4:14, 5:14, 6:14, 7:14, 8:14}} |
#------------------------------------- |
def keyExpansion(algInstance, keyString): |
""" Expand a string of size keySize into a larger array """ |
Nk, Nb, Nr = algInstance.Nk, algInstance.Nb, algInstance.Nr # for readability |
key = [ord(byte) for byte in keyString] # convert string to list |
w = [[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]] for i in range(Nk)] |
for i in range(Nk,Nb*(Nr+1)): |
temp = w[i-1] # a four byte column |
if (i%Nk) == 0 : |
temp = temp[1:]+[temp[0]] # RotWord(temp) |
temp = [ Sbox[byte] for byte in temp ] |
temp[0] ^= Rcon[i/Nk] |
elif Nk > 6 and i%Nk == 4 : |
temp = [ Sbox[byte] for byte in temp ] # SubWord(temp) |
w.append( [ w[i-Nk][byte]^temp[byte] for byte in range(4) ] ) |
return w |
Rcon = (0,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36, # note extra '0' !!! |
0x6c,0xd8,0xab,0x4d,0x9a,0x2f,0x5e,0xbc,0x63,0xc6, |
0x97,0x35,0x6a,0xd4,0xb3,0x7d,0xfa,0xef,0xc5,0x91) |
#------------------------------------- |
def AddRoundKey(algInstance, keyBlock): |
""" XOR the algorithm state with a block of key material """ |
for column in range(algInstance.Nb): |
for row in range(4): |
algInstance.state[column][row] ^= keyBlock[column][row] |
#------------------------------------- |
def SubBytes(algInstance): |
for column in range(algInstance.Nb): |
for row in range(4): |
algInstance.state[column][row] = Sbox[algInstance.state[column][row]] |
def InvSubBytes(algInstance): |
for column in range(algInstance.Nb): |
for row in range(4): |
algInstance.state[column][row] = InvSbox[algInstance.state[column][row]] |
Sbox = (0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5, |
0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76, |
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0, |
0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0, |
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc, |
0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15, |
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a, |
0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75, |
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0, |
0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84, |
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b, |
0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf, |
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85, |
0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8, |
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5, |
0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2, |
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17, |
0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73, |
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88, |
0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb, |
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c, |
0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79, |
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9, |
0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08, |
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6, |
0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a, |
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e, |
0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e, |
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94, |
0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf, |
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68, |
0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16) |
InvSbox = (0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38, |
0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb, |
0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87, |
0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb, |
0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d, |
0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e, |
0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2, |
0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25, |
0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16, |
0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92, |
0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda, |
0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84, |
0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a, |
0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06, |
0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02, |
0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b, |
0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea, |
0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73, |
0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85, |
0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e, |
0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89, |
0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b, |
0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20, |
0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4, |
0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31, |
0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f, |
0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d, |
0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef, |
0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0, |
0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61, |
0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26, |
0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d) |
#------------------------------------- |
""" For each block size (Nb), the ShiftRow operation shifts row i |
by the amount Ci. Note that row 0 is not shifted. |
Nb C1 C2 C3 |
------------------- """ |
shiftOffset = { 4 : ( 0, 1, 2, 3), |
5 : ( 0, 1, 2, 3), |
6 : ( 0, 1, 2, 3), |
7 : ( 0, 1, 2, 4), |
8 : ( 0, 1, 3, 4) } |
def ShiftRows(algInstance): |
tmp = [0]*algInstance.Nb # list of size Nb |
for r in range(1,4): # row 0 reamains unchanged and can be skipped |
for c in range(algInstance.Nb): |
tmp[c] = algInstance.state[(c+shiftOffset[algInstance.Nb][r]) % algInstance.Nb][r] |
for c in range(algInstance.Nb): |
algInstance.state[c][r] = tmp[c] |
def InvShiftRows(algInstance): |
tmp = [0]*algInstance.Nb # list of size Nb |
for r in range(1,4): # row 0 reamains unchanged and can be skipped |
for c in range(algInstance.Nb): |
tmp[c] = algInstance.state[(c+algInstance.Nb-shiftOffset[algInstance.Nb][r]) % algInstance.Nb][r] |
for c in range(algInstance.Nb): |
algInstance.state[c][r] = tmp[c] |
#------------------------------------- |
def MixColumns(a): |
Sprime = [0,0,0,0] |
for j in range(a.Nb): # for each column |
Sprime[0] = mul(2,a.state[j][0])^mul(3,a.state[j][1])^mul(1,a.state[j][2])^mul(1,a.state[j][3]) |
Sprime[1] = mul(1,a.state[j][0])^mul(2,a.state[j][1])^mul(3,a.state[j][2])^mul(1,a.state[j][3]) |
Sprime[2] = mul(1,a.state[j][0])^mul(1,a.state[j][1])^mul(2,a.state[j][2])^mul(3,a.state[j][3]) |
Sprime[3] = mul(3,a.state[j][0])^mul(1,a.state[j][1])^mul(1,a.state[j][2])^mul(2,a.state[j][3]) |
for i in range(4): |
a.state[j][i] = Sprime[i] |
def InvMixColumns(a): |
""" Mix the four bytes of every column in a linear way |
This is the opposite operation of Mixcolumn """ |
Sprime = [0,0,0,0] |
for j in range(a.Nb): # for each column |
Sprime[0] = mul(0x0E,a.state[j][0])^mul(0x0B,a.state[j][1])^mul(0x0D,a.state[j][2])^mul(0x09,a.state[j][3]) |
Sprime[1] = mul(0x09,a.state[j][0])^mul(0x0E,a.state[j][1])^mul(0x0B,a.state[j][2])^mul(0x0D,a.state[j][3]) |
Sprime[2] = mul(0x0D,a.state[j][0])^mul(0x09,a.state[j][1])^mul(0x0E,a.state[j][2])^mul(0x0B,a.state[j][3]) |
Sprime[3] = mul(0x0B,a.state[j][0])^mul(0x0D,a.state[j][1])^mul(0x09,a.state[j][2])^mul(0x0E,a.state[j][3]) |
for i in range(4): |
a.state[j][i] = Sprime[i] |
#------------------------------------- |
def mul(a, b): |
""" Multiply two elements of GF(2^m) |
needed for MixColumn and InvMixColumn """ |
if (a !=0 and b!=0): |
return Alogtable[(Logtable[a] + Logtable[b])%255] |
else: |
return 0 |
Logtable = ( 0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, |
100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193, |
125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120, |
101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142, |
150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56, |
102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16, |
126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186, |
43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87, |
175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232, |
44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160, |
127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, |
204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, |
151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, |
83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, |
68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, |
103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7) |
Alogtable= ( 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, |
95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, |
229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, |
83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, |
76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, |
131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, |
181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, |
254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, |
251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, |
195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, |
159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, |
155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, |
252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, |
69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, |
18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, |
57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1) |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/arc4.py |
---|
0,0 → 1,75 |
""" crypto.cipher.arc4 |
A Stream Cipher Encryption Algorithm 'Arcfour' |
A few lines of code/ideas borrowed from [PING] |
[PING] CipherSaber implementation by Ka-Ping Yee <ping@lfw.org>, 5 May 2000. |
Some documentation text and test vectors taken from [IDARC4] |
[IDARCH4] K.Kaukonen, R.Thayer, "A Stream Cipher Encryption Algorithm 'Arcfour'", |
ftp://ietf.org/draft-kaukonen-cipher-arcfour-03.txt |
Generally munged to map to crypto.cipher calling conventions |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
November 5, 2002 |
""" |
class ARC4: |
""" ARC4 Stream Cipher Algorithm |
""" |
def __init__(self,key=None): |
""" key -> octet string for key """ |
self.name = 'ARC4' |
self.strength = None # depends on keySize |
self.blockSize = 1 # blockSize is in bytes |
if key != None: |
self.setKey(key) |
def setKey(self, key): |
""" Set initial state from key. Never use the same key more than once! |
""" |
self.keySize = len(key) |
self.strength = self.keySize # this does not include subtracting IV size :-( |
i, j, self.state = 0, 0, range(256) |
for i in range(256): |
j = (j + self.state[i] + ord(key[i % len(key)])) % 256 |
self.state[i], self.state[j] = self.state[j], self.state[i] |
self.keyReady = 1 # Ready |
def encrypt(self, plainText, more = None): |
""" Encrypt a string and return a binary string |
multiple sequential calls can be made using more =1, |
this continues the encryption |
New sessions of encrypt can NOT be called twice with the same key!!!! |
""" |
if self.keyReady != 1 : raise 'Error, ARC4 key already used once!' |
if more != 1: |
self.keyReady = None |
cipherText = arcfourBlock(self.state, plainText) |
return cipherText |
def decrypt(self, cipherText, more = None): |
""" Decrypt a string and return a string """ |
if self.keyReady != 1 : |
raise 'set for decryption required' |
if more != 1: |
self.keyReady = None |
plainText = arcfourBlock(self.state, cipherText) |
return plainText |
def arcfourBlock(state, input): |
""" Use state to encrypt input string, returns string """ |
i, j, output = 0, 0, [] |
for byte in input: |
i = (i + 1) % 256 |
j = (j + state[i]) % 256 |
state[i], state[j] = state[j], state[i] |
n = (state[i] + state[j]) % 256 |
output.append(chr(ord(byte) ^ state[n])) |
output = ''.join(output) # convert to string |
return output |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/wep_test.py |
---|
0,0 → 1,71 |
#! /usr/bin/env python |
""" crypto.cipher.wep_test |
Tests for wep encryption |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
2002-11-05 |
""" |
import unittest |
from crypto.cipher.wep import WEP |
from binascii_plus import a2b_p, b2a_p |
from zlib import crc32 |
from struct import pack |
class WEP_TestVectors(unittest.TestCase): |
""" Test WEP algorithm using know values """ |
def testKnowValues(self): |
""" Test using vectors from...""" |
def WEPtestVector(testCase,plainText,iv,key,keyId,cipherText): |
""" Process WEP test vectors from RFCxxxx""" |
print '%s %s %s'%('='*((54-len(testCase))/2),testCase,'='*((54-len(testCase))/2)) |
# Convert from octet lists to string |
pt = a2b_p(plainText) |
iv = a2b_p(iv) |
key = a2b_p(key) |
kct = a2b_p(cipherText) |
alg = WEP(key,keyId=keyId) |
print 'key: %s'%b2a_p(key)[9:] |
print 'keyId: %x'%keyId |
print 'iv: %s'%b2a_p(iv)[9:] |
print 'pt: %s'%b2a_p(pt)[9:] |
print 'kct: %s'%b2a_p(kct)[9:] |
ct = alg.encrypt(pt, iv, keyId) |
print 'ct: %s'%b2a_p(ct)[9:] |
print 'crc: %s'%b2a_p(pack('<I',crc32(plainText)))[9:] |
print '========================================================' |
self.assertEqual( ct, kct ) |
alg.setKey(key,keyId=keyId) |
dct = alg.decrypt( ct ) |
self.assertEqual( dct, pt ) |
WEPtestVector( |
testCase = "Test Vectors from IEEE 802.11 TGi D2.x", |
plainText = """aa aa 03 00 00 00 08 00 45 00 00 4e 66 1a 00 00 |
80 11 be 64 0a 00 01 22 0a ff ff ff 00 89 00 89 |
00 3a 00 00 80 a6 01 10 00 01 00 00 00 00 00 00 |
20 45 43 45 4a 45 48 45 43 46 43 45 50 46 45 45 |
49 45 46 46 43 43 41 43 41 43 41 43 41 43 41 41 |
41 00 00 20 00 01 """, |
iv = "fb 02 9e", |
key = "30 31 32 33 34", |
keyId = 2, |
cipherText = """fb 02 9e 80 |
f6 9c 58 06 bd 6c e8 46 26 bc be fb 94 74 65 0a |
ad 1f 79 09 b0 f6 4d 5f 58 a5 03 a2 58 b7 ed 22 |
eb 0e a6 49 30 d3 a0 56 a5 57 42 fc ce 14 1d 48 |
5f 8a a8 36 de a1 8d f4 2c 53 80 80 5a d0 c6 1a |
5d 6f 58 f4 10 40 b2 4b 7d 1a 69 38 56 ed 0d 43 |
98 e7 ae e3 bf 0e 2a 2c a8 f7 """) |
# Make this test module runnable from the command prompt |
if __name__ == "__main__": |
unittest.main() |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher/wep.py |
---|
0,0 → 1,75 |
""" crypto.cipher.wep |
The WEP encryption algorithm used in IEEE 802.11 |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
September 2002 |
""" |
from crypto.cipher.arc4 import ARC4 |
from crypto.errors import IntegrityCheckError, BadKeySizeError |
from zlib import crc32 |
from struct import pack |
class WEP: |
""" WEP Stream Cipher Algorithm |
Automatically adds and removes IV and KeyId |
""" |
def __init__(self, key=None, keyId=None): |
""" key -> octet string for key """ |
self.name = 'WEP' |
self.strength = None # depends on keySize |
self.arc4 = ARC4() # base algorithm |
self.__key = [None,None,None,None] # four possible keys, initialize to invalid keys |
self.encryptHeaderSize = 4 |
self.setCurrentKeyId(keyId) |
if key != None: |
self.setKey(key) |
def setKey(self, key, keyId=None): |
""" Set key, key string is typically 5 or 13 octets long |
""" |
if not(len(key) in (5,13)): |
raise BadKeySizeError,'Key not valid size of 5 or 13 octets' |
if keyId != None : |
self.setCurrentKeyId(keyId) |
self.__key[self.currentKeyId] = key |
self.keySize = len(key) |
self.strength = self.keySize * 8 |
def setCurrentKeyId(self, keyId): |
if keyId == None : |
self.currentKeyId = 0 |
elif (0<=keyId<4): |
self.currentKeyId = keyId |
else: |
raise 'WEP keyId must be value 0, 1, 2 or 3' |
def encrypt(self, plainText, iv, keyId=None): |
""" Encrypt a string and return a binary string |
Adds WEP encryption header and crc |
""" |
assert(len(iv)==3),'Wrong size WEP IV' |
if keyId != None : |
self.setCurrentKeyId(keyId) |
assert(self.__key[self.currentKeyId]!=None), 'Must set key for specific keyId before encryption' |
self.arc4.setKey( iv + self.__key[self.currentKeyId] ) |
crc = pack('<I',crc32(plainText)) |
cipherText = self.arc4.encrypt(plainText+crc) |
# add header that contains IV |
cipherText = iv + chr((self.currentKeyId<<6)) + cipherText |
return cipherText |
def decrypt(self, cipherText): |
""" Decrypt a WEP packet, assumes WEP 4 byte header on packet """ |
iv = cipherText[:3] |
self.currentKeyId = (ord(cipherText[3])&0xC0)>>6 |
assert(self.__key[self.currentKeyId]!=None), 'Must set key for specific keyId before encryption' |
self.arc4.setKey( iv + self.__key[self.currentKeyId] ) |
plainText = self.arc4.decrypt(cipherText[self.encryptHeaderSize:]) |
if plainText[-self.encryptHeaderSize:] == pack('<I',crc32(plainText)): # check data integrity |
raise IntegrityCheckError, 'WEP Integrity Check Error' |
return plainText[:-4] |
/relevation/ext/cryptopy-1.2.5.orig/crypto/cipher |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/crypto |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/doc/cryptopy-1.ppt |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/doc |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/cryptopy-1.2.5.orig/CHANGES.txt |
---|
0,0 → 1,35 |
CryptoPy Version 1.1.0 (2003-02-21) |
------------------------------------- |
First full published distribution since 1.0 |
Added: full IEEE 802.11 suite of algorithms (WEP, TKIP) |
Version 1.0.2 |
------------------------------------- |
- added in binascii_plus.py (enhanced binascii for hex input and diplay) |
2002-07-29 |
Version 1.0.0 (2002-07-29) |
------------------------ |
- added a README and a few comments |
- release only includes the following algorithms |
- rijndael |
- aes |
- ccm (only tested for AES) |
- cbc |
- aes_cbc |
- also inlcudes 802.11 specific: |
_ ieee_802/ccm_examples.py |
Sat July 27, 2002 |
Changes to version 0.9.1 |
------------------------ |
- added CCM algorithm |
- Distutils support added |
/relevation/ext/cryptopy-1.2.5.orig/__init__.py |
---|
0,0 → 1,6 |
""" cryptopy |
CryptoPy - pure python cryptographic libraries |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
/relevation/ext/cryptopy-1.2.5.orig/setup.py |
---|
0,0 → 1,48 |
#!/usr/bin/env python |
""" cryptopy setup |
Distribution and install script for CryptoPy |
Install: |
>> python setup.py install |
Make the source distribution: |
>> python setup.py sdist --formats=gztar --force-manifest |
See http://software-carpentry.codesourcery.com/entries/build/Distutils/Distutils.html |
for more information about this file |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from distutils.core import setup |
#import sys |
#assert sys.version >= '2', "Error -> Please install Python 2.0 or greater." |
setup( |
# Distribution meta-data |
name = "cryptopy", |
version = "1.2.5", |
description = "CryptoPy - a cryptographic framework for Python", |
author = "Paul A. Lambert", |
author_email = "nymble@users.sourceforge.net", |
url = "https://sourceforge.net/projects/cryptopy/", |
license = "Released under 'artistic license', read LICENSE.txt for license information", |
# Definition of the modules and packages in the distribution |
# Note - MANIFEST.in adds additional text files |
packages = ['', |
'crypto', |
'crypto.app', |
'crypto.cipher', |
'crypto.entropy', |
'crypto.hash', |
'crypto.keyedHash', |
'crypto.passwords', |
'fmath'], |
data_files = [ ('fmath', ['fmath/primes_1st_50k.txt']) ] ) |
/relevation/ext/cryptopy-1.2.5.orig/PKG-INFO |
---|
0,0 → 1,10 |
Metadata-Version: 1.0 |
Name: cryptopy |
Version: 1.2.5 |
Summary: CryptoPy - a cryptographic framework for Python |
Home-page: https://sourceforge.net/projects/cryptopy/ |
Author: Paul A. Lambert |
Author-email: nymble@users.sourceforge.net |
License: Released under 'artistic license', read LICENSE.txt for license information |
Description: UNKNOWN |
Platform: UNKNOWN |
/relevation/ext/cryptopy-1.2.5.orig/README.txt |
---|
0,0 → 1,51 |
CryptoPy |
-------- |
This is a pure Python implementation of various cryptographic algorithms. |
The goal of the package is to provide human readable code for the algorithms |
that closely matches the style and content of the technicla specifications. |
The is intended as a reference implementation and is likely much slower than |
speed optimized versions. |
INSTALLATION |
------------ |
You can use distutils to install CryptoPy by just typing: |
$ setup.py install |
This should work on Unix and Microsoft Windows. Alternatively you can |
install by hand: |
SOurce distribution is created by: |
$ setup.py sdist --formats=gztar --force-manifest |
OPERATION |
--------- |
The test rountines can be run from the command line. |
From the installed directory (typically .../python/Lib/site-packages |
-> ./ieee_802/ccm_examples.py |
-> ./crypto/cipher/ccm_test.py |
Just run the scripts: |
>>python ccm_examples.py |
>>python ccm_test.py |
etc. |
CHANGES |
--------- |
See CHANGES.txt |
FEED BACK |
--------- |
send to nymble@users.sourceforge.net |
/relevation/ext/cryptopy-1.2.5.orig/binascii_plus.py |
---|
0,0 → 1,73 |
""" binascii_plus |
Enhanced hex packet input and display |
Copyright © (c) 2002 by Paul A. Lambert |
Read LICENSE.txt for license information. |
""" |
from binascii import a2b_hex, b2a_hex |
import string |
viewable = string.letters+string.digits+string.punctuation+' ' |
def a2b_p(s): |
""" Convert ascii string of hex bytes to a binary string |
this conversion allows any type of white space""" |
s= ''.join(string.split(s)) |
return a2b_hex(s) |
#--------------- |
def b2a(bString, separator=' '): |
""" Simple conversion of binary string to |
hex digits with default space separator """ |
return string.join(['%.2x'%ord(c) for c in bString], separator) |
def b2a_p(binary_string, frnt=' '): |
""" convert a binary string to formatted ascii hex output """ |
return b2a_pt(binary_string, frnt=frnt, text_trailer=None) |
def b2a_pt(binary_string, frnt=' ', gap=' ', text_trailer=1): |
""" convert a binary string to pretty ascii hex output |
Optional display of ascii text provided at end of hex dump """ |
ascii_byte_list =['%.2x'%ord(c) for c in binary_string] |
pretty_list = [] |
trailer = [] |
for i in range(len(ascii_byte_list)): |
if i != 0: |
if i % 16 == 0: # add trailer + \n every 16 bytes |
if text_trailer != None: |
pretty_list += [gap] + trailer |
trailer = [] |
pretty_list += '\n'+frnt |
elif i % 8 == 0: pretty_list += ' ' # add an extra space every 8 bytes |
else: pretty_list += ' ' # space between bytes |
else: |
pretty_list += '\n'+frnt |
pretty_list += ascii_byte_list[i] |
if string.find(viewable,chr(int(ascii_byte_list[i],16))) >= 0: # if printable and not white space |
trailer += chr(int(ascii_byte_list[i],16)) |
else: |
trailer += '.' |
if text_trailer != None: |
nabs = (16-(len(ascii_byte_list)%16))%16 |
if nabs>7 : pretty_list += ' ' |
pretty_list += nabs*' '+gap+''.join(trailer) |
return ''.join(pretty_list) |
def b2a_pter(s, frnt=' ', gap=' ', text_trailer=None): |
""" convert to pretty display or leave as string if printable and short """ |
if len(s)>50: return b2a_pt(s,' ',gap=gap,text_trailer=text_trailer) |
for char in s: |
if string.find(viewable,char) >= 0: # viewable? |
pass |
else: |
return b2a_pt(s,frnt,gap=gap,text_trailer=text_trailer) |
return '\n'+frnt+'"'+s+'"' |
/relevation/ext/cryptopy-1.2.5.orig |
---|
Property changes: |
Added: bugtraq:number |
+true |
\ No newline at end of property |
/relevation/ext/python-cryptoplus/README |
---|
0,0 → 1,76 |
CRYPTOPLUS |
=========== |
TABLE OF CONTENTS |
================== |
1. WHAT IS CRYPTOPLUS |
2. INSTALLING |
3. GETTING STARTED |
4. LIMITATIONS |
1. WHAT IS CRYPTOPLUS |
====================== |
CryptoPlus is an extions to the Crypto module (www.pycrypto.org) for |
python. CryptoPlus makes the ciphers included in pycrypto and some new |
onse available in pure python code. Some new chain modes are also added |
in pure python, while the ones allready available in pycrypto are also |
avaible in pure python in this package. Making these available in pure |
python has the advantage of easier understandable code and thus making |
it easier to adjust the code to your needs. |
All other functions of pycrypto are available via the interface |
of CryptoPlus. The new cipher implementations can be accessed via |
CryptoPlus.Cipher.python_* while the original ones from pycrypto are |
still available under their original name via CryptoPlus.Cipher.*. When |
using the original Ciphers, the original pycrypto (C) code is used but |
the chains will still be made by my new python code. |
New functions: |
Ciphers: |
Rijndael |
Serpent |
Twofish |
Chain Modes: |
XTS |
CMAC |
Note: for all the cipher algorithms, code has been reused from |
others. Appropriate copyright notices are in the source code. |
2. INSTALLING |
============== |
necessary packages before installing: |
- python-setuptools |
- python-pkg-resources |
python setup.py install |
3. GETTING STARTED |
=================== |
Same API from PyCrypto can be used. See: |
http://www.dlitz.net/software/pycrypto/doc/ |
Biggest changes are the addition of some chain modes and |
block ciphers. There are lot of examples provided in the |
docstrings. Have a look at them by looking in the source code |
'../CryptoPlus/Cipher/*.py' or via an interactive python session by using |
'CryptoPlus.Cipher.python_AES.new?'. Once you constructed a cipher object |
with 'cipher = CryptoPlus.Cipher.python_AES.new(...)' you can get more |
info about encrypting and decrypting by reading the apprioprate docstring |
('cipher.encrypt?','cipher.decrypt?'). |
Some test functions are provided in the docstrings and in the 'test' |
folder. Run all the doctest in the new Cipher function by using |
the '../test/test_doctest.py' script. '../test/test.py' provides |
some test function for the testvectors avaible from the module via |
'CryptoPlus.Cipher.testvectors'. Have a look at the test.py sourcecode |
to have an idea of how to use those test vectors. |
4. LIMITATIONS |
=============== |
CMAC can only be used with ciphers of 64 or 128 bits blocksizes |
XTS can only be used with ciphers of 128 bits blocksize |
/relevation/ext/python-cryptoplus/test/test_doctests.py |
---|
0,0 → 1,35 |
#!/usr/bin/env python |
import unittest |
import doctest |
from pkg_resources import require |
require("CryptoPlus>=1.0") |
#import CryptoPlus.Cipher.python_AES |
from CryptoPlus.Cipher import python_AES, AES, python_DES, DES, python_DES3,\ |
DES3, python_Blowfish, Blowfish, python_Twofish, python_Serpent,\ |
python_Rijndael, CAST, ARC2, python_PRESENT |
from CryptoPlus.Util import padding |
from CryptoPlus.Hash import python_RadioGatun, python_PBKDF2, RIPEMD, python_MD5,\ |
python_SHA,python_SHA256,python_SHA224,python_SHA384,python_SHA512,\ |
python_whirlpool |
try: |
from CryptoPlus.Cipher import IDEA |
from CryptoPlus.Cipher import RC5 |
import_error = 0 |
except ImportError: |
import_error = 1 |
suite = unittest.TestSuite() |
#for mod in (CryptoPlus.Cipher.python_AES,CryptoPlus.Cipher.python_AES): |
for mod in python_AES, AES, python_DES, DES, python_DES3, DES3, python_Blowfish,\ |
Blowfish, python_Twofish, python_Serpent, python_Rijndael, CAST, ARC2,\ |
python_PRESENT, padding, python_RadioGatun, python_PBKDF2, RIPEMD,\ |
python_MD5, python_SHA,python_SHA256,python_SHA224,python_SHA384,python_SHA512,\ |
python_whirlpool: |
suite.addTest(doctest.DocTestSuite(mod)) |
if not import_error: |
suite.addTest(doctest.DocTestSuite(IDEA)) |
suite.addTest(doctest.DocTestSuite(RC5)) |
runner = unittest.TextTestRunner(verbosity=2) |
runner.run(suite) |
/relevation/ext/python-cryptoplus/test/test.py |
---|
0,0 → 1,266 |
#!/usr/bin/env python |
from pkg_resources import require |
require("CryptoPlus>=1.0") |
from CryptoPlus.testvectors import dict_ofb_aes, dict_ctr_aes, dict_cfb_aes, dict_cbc_aes |
from CryptoPlus.testvectors import dict_cmac_aes128,dict_cmac_aes192,dict_cmac_aes256,dict_cmac_tdes2,dict_cmac_tdes3 |
from CryptoPlus.testvectors import dict_des,dict_tdes2,dict_tdes3 |
from CryptoPlus.testvectors import dict_serpent128,dict_serpent192,dict_serpent256 |
from CryptoPlus.testvectors import dict_xts_aes |
from CryptoPlus.testvectors import sha512_all_zero_messages, radiogatun32, radiogatun64 |
## HASHING |
# SHA-512 |
print "SHA-512" |
from CryptoPlus.Hash import python_SHA512 |
for i in range(0,len(sha512_all_zero_messages)): |
hash = sha512_all_zero_messages[i] |
hasher = python_SHA512.new(i*"\x00") |
if hash <> hasher.hexdigest().upper(): |
print 'ERROR! SHA-512 in %i'%i |
# RadioGatun |
print "RadioGatun" |
from CryptoPlus.Hash import python_RadioGatun |
for i in range(0,len(radiogatun32)/2): |
msg = radiogatun32["msg%i"%i] |
hash = radiogatun32["hash%i"%i] |
hasher = python_RadioGatun.new(msg,wl=32) |
if hash <> hasher.hexdigest().upper(): |
print 'ERROR! RadioGatun[32] in %i'%i |
for i in range(0,len(radiogatun64)/2): |
msg = radiogatun64["msg%i"%i] |
hash = radiogatun64["hash%i"%i] |
hasher = python_RadioGatun.new(msg,wl=64) |
if hash <> hasher.hexdigest().upper(): |
print 'ERROR! RadioGatun[64] in %i'%i |
## CIPHERS |
# PRESENT |
print "PRESENT" |
from CryptoPlus.testvectors import dict_present_e80_k12_tvar, dict_present_e128_k12_tvar, dict_present_e128_kvar_t12, dict_present_e80_kvar_t12 |
from CryptoPlus.Cipher import python_PRESENT |
for i in range(1,len(dict_present_e80_k12_tvar)/3): |
msg = dict_present_e80_k12_tvar['msg%i'%i].decode('hex') |
key = dict_present_e80_k12_tvar['key%i'%i].decode('hex') |
cip = dict_present_e80_k12_tvar['cip%i'%i].decode('hex') |
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for present_e80-k12_tvar in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for present_e80-k12_tvar in %i'%i |
for i in range(1,len(dict_present_e128_k12_tvar)/3): |
msg = dict_present_e128_k12_tvar['msg%i'%i].decode('hex') |
key = dict_present_e128_k12_tvar['key%i'%i].decode('hex') |
cip = dict_present_e128_k12_tvar['cip%i'%i].decode('hex') |
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for present_e128-k12_tvar in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for present_e128-k12_tvar in %i'%i |
for i in range(1,len(dict_present_e128_kvar_t12)/3): |
msg = dict_present_e128_kvar_t12['msg%i'%i].decode('hex') |
key = dict_present_e128_kvar_t12['key%i'%i].decode('hex') |
cip = dict_present_e128_kvar_t12['cip%i'%i].decode('hex') |
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for present_e128-kvar_t12 in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for present_e128-kvar_t12 in %i'%i |
for i in range(1,len(dict_present_e80_kvar_t12)/3): |
msg = dict_present_e80_kvar_t12['msg%i'%i].decode('hex') |
key = dict_present_e80_kvar_t12['key%i'%i].decode('hex') |
cip = dict_present_e80_kvar_t12['cip%i'%i].decode('hex') |
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for present_e80-kvar_t12 in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for present_e80-kvar_t12 in %i'%i |
# CBC, CFB, OFB and CTR with AES |
print "AES" |
from CryptoPlus.Cipher import python_AES |
from CryptoPlus.Util import util |
for i in range(1,len(dict_cbc_aes)/4+1): |
msg = dict_cbc_aes['msg%i'%i].decode('hex') |
iv = dict_cbc_aes['iv%i'%i].decode('hex') |
key = dict_cbc_aes['key%i'%i].decode('hex') |
cip = dict_cbc_aes['cip%i'%i].decode('hex') |
cipher = python_AES.new(key,python_AES.MODE_CBC,iv) |
decipher = python_AES.new(key,python_AES.MODE_CBC,iv) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for CBC-AES in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for CBC-AES in %i'%i |
for i in range(1,len(dict_ctr_aes)/4+1): |
msg = dict_ctr_aes['msg%i'%i].decode('hex') |
ctr = dict_ctr_aes['ctr%i'%i].decode('hex') |
key = dict_ctr_aes['key%i'%i].decode('hex') |
cip = dict_ctr_aes['cip%i'%i].decode('hex') |
counter = util.Counter(ctr) |
counter2= util.Counter(ctr) |
cipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter) |
decipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter2) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for CTR-AES in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for CTR-AES in %i'%i |
for i in range(1,len(dict_ofb_aes)/4+1): |
msg = dict_ofb_aes['msg%i'%i].decode('hex') |
iv = dict_ofb_aes['iv%i'%i].decode('hex') |
key = dict_ofb_aes['key%i'%i].decode('hex') |
cip = dict_ofb_aes['cip%i'%i].decode('hex') |
cipher = python_AES.new(key,python_AES.MODE_OFB,IV=iv) |
decipher = python_AES.new(key,python_AES.MODE_OFB,IV=iv) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for OFB-AES in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for OFB-AES in %i'%i |
for i in range(1,len(dict_cfb_aes)/4+1): |
msg = dict_cfb_aes['msg%i'%i].decode('hex') |
iv = dict_cfb_aes['iv%i'%i].decode('hex') |
s = dict_cfb_aes['s%i'%i] |
key = dict_cfb_aes['key%i'%i].decode('hex') |
cip = dict_cfb_aes['cip%i'%i].decode('hex') |
cipher = python_AES.new(key,python_AES.MODE_CFB,IV=iv,segment_size=s) |
decipher = python_AES.new(key,python_AES.MODE_CFB,IV=iv,segment_size=s) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for CFB-AES in %i'%i |
if msg <> decipher.decrypt(cip): |
print 'DECRYPTION ERROR! for CFB-AES in %i'%i |
# DES,TDES2/3 |
print "DES TDES2/3" |
from CryptoPlus.Cipher import python_DES |
for i in range(0,len(dict_des)/3): |
msg = dict_des['msg%i'%i].decode('hex') |
key = dict_des['key%i'%i].decode('hex') |
cip = dict_des['cip%i'%i].decode('hex') |
cipher = python_DES.new(key,python_DES.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for DES in %i'%i |
if msg <> cipher.decrypt(cip): |
print 'DECRYPTION ERROR! for DES in %i'%i |
from CryptoPlus.Cipher import python_DES3 |
for d in dict_tdes2,dict_tdes3: |
for i in range(0,len(d)/3): |
msg = d['msg%i'%i].decode('hex') |
key = d['key%i'%i].decode('hex') |
cip = d['cip%i'%i].decode('hex') |
cipher = python_DES3.new(key,python_DES3.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for TDES2/3 in %i'%i |
if msg <> cipher.decrypt(cip): |
print 'DECRYPTION ERROR! for DES in %i'%i |
# Serpent128/192/256 |
print "Serpent" |
from CryptoPlus.Cipher import python_Serpent |
for d in dict_serpent128,dict_serpent192,dict_serpent256: |
for i in range(0,len(d)/3): |
msg = d['msg%i'%i].decode('hex') |
key = d['key%i'%i].decode('hex') |
cip = d['cip%i'%i].decode('hex') |
cipher = python_Serpent.new(key,python_Serpent.MODE_ECB) |
if cip <> cipher.encrypt(msg): |
print 'ERROR! for Serpent in %i'%i |
if msg <> cipher.decrypt(cip): |
print 'DECRYPTION ERROR! for Serpent in %i'%i |
# CMAC-AES128/192/256 |
print "CMAC-AES" |
from CryptoPlus.Cipher import python_AES |
for d in dict_cmac_aes128,dict_cmac_aes192,dict_cmac_aes256: |
for i in range(0,len(d)/4): |
msg = d['msg%i'%i].decode('hex') |
key = d['key%i'%i].decode('hex') |
if msg == '\x00': |
msg = '' |
mac = d['mac%i'%i].decode('hex') |
cipher = python_AES.new(key,python_AES.MODE_CMAC) |
if mac <> cipher.encrypt(msg)[:d['taglength%i'%i]]: |
print 'ERROR for %i'%i |
# CMAC-TDES2/3 |
print "CMAC-TDES" |
from CryptoPlus.Cipher import python_DES3 |
for d in dict_cmac_tdes2,dict_cmac_tdes3: |
for i in range(0,len(d)/4): |
msg = d['msg%i'%i].decode('hex') |
if msg == '\x00': |
msg = '' |
key = d['key%i'%i].decode('hex') |
mac = d['mac%i'%i].decode('hex') |
cipher = python_DES3.new(key,python_DES3.MODE_CMAC) |
if mac <> cipher.encrypt(msg)[:d['taglength%i'%i]]: |
print 'ERROR! on %i'%i |
# XTS-AES |
print "XTS-AES" |
from CryptoPlus.Cipher import python_AES |
for i in range(0,len(dict_xts_aes)/5): |
msg = dict_xts_aes['msg%i'%i].decode('hex') |
key = ( dict_xts_aes['key1_%i'%i].decode('hex') , dict_xts_aes['key2_%i'%i].decode('hex') ) |
cip = dict_xts_aes['cip%i'%i].decode('hex') |
n = dict_xts_aes['n%i'%i].decode('hex') |
cipher = python_AES.new(key,python_AES.MODE_XTS) |
if cip <> cipher.encrypt(msg,n): |
print 'ERROR! for XTS on %i'%i |
print 'got %s \n expected %s'%(cipher.encrypt(msg,n).encode('hex'),cip.encode('hex')) |
decipher = python_AES.new(key,python_AES.MODE_XTS) |
if msg <> cipher.decrypt(cip,n): |
print 'ERROR! for XTS (decrypt) on %i'%i |
print 'got %s \n expected %s'%(decipher.decrypt(cip,n).encode('hex'),msg.encode('hex')) |
# TWOFISH |
print "Twofish" |
from CryptoPlus.Cipher import python_Twofish |
from CryptoPlus.testvectors import dict_twofish_ecb_vt_k128, dict_twofish_ecb_vt_k192, dict_twofish_ecb_vt_k256 |
from CryptoPlus.testvectors import dict_twofish_ecb_vk_k128, dict_twofish_ecb_vk_k192, dict_twofish_ecb_vk_k256 |
for d in dict_twofish_ecb_vt_k128, dict_twofish_ecb_vt_k192, dict_twofish_ecb_vt_k256,dict_twofish_ecb_vk_k128: |
for i in range(0,len(d)/3): |
msg = d['msg%i'%i].decode('hex') |
key = d['key%i'%i].decode('hex') |
cip = d['cip%i'%i].decode('hex') |
cipher = python_Twofish.new(key,python_Twofish.MODE_ECB) |
if cip <> cipher.encrypt(msg,n): |
print 'ERROR! for Twofish on %i'%i |
print 'got %s \n expected %s'%(cipher.encrypt(msg,n).encode('hex'),cip.encode('hex')) |
decipher = python_Twofish.new(key,python_AES.MODE_ECB) |
if msg <> cipher.decrypt(cip,n): |
print 'DECRYPTION ERROR! for Twofish (decrypt) on %i'%i |
print 'got %s \n expected %s'%(decipher.decrypt(cip,n).encode('hex'),msg.encode('hex')) |
/relevation/ext/python-cryptoplus/LICENSE |
---|
0,0 → 1,37 |
Used implementations of others are distributed under their respective license |
available in the source: |
Ciphers: |
pyblowfish.py, pyDes.py, pyserpent.py, pytwofish.py, rijndael.py |
- pyblowfish.py is being redistributed under the Artistic License |
Hash functions: |
pypbkdf2.py, pywhirlpool.py |
using pypy license: pysha.py, pysha224.py, pysha256.py, pysha384.py, |
pysha512.py, pymd5.py |
All the rest is licensed under the MIT License: |
# ============================================================================= |
# Copyright (c) 2008 Christophe Oosterlynck (christophe.oosterlynck_AT_gmail.com) |
# Philippe Teuwen (philippe.teuwen_AT_nxp.com) |
# |
# Permission is hereby granted, free of charge, to any person obtaining a copy |
# of this software and associated documentation files (the "Software"), to deal |
# in the Software without restriction, including without limitation the rights |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
# copies of the Software, and to permit persons to whom the Software is |
# furnished to do so, subject to the following conditions: |
# |
# The above copyright notice and this permission notice shall be included in |
# all copies or substantial portions of the Software. |
# |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
# THE SOFTWARE. |
# ============================================================================= |
/relevation/ext/python-cryptoplus/README.relevation |
---|
0,0 → 1,4 |
This tree was cloned with git on Mon, 04 Jul 2011 23:31:44 +0000 |
The tree can be located at http://repo.or.cz/w/python-cryptoplus.git |
/relevation/ext/python-cryptoplus/.gitignore |
---|
0,0 → 1,6 |
*.pyc |
*~ |
dist/ |
build/ |
MANIFEST |
CryptoPlus.egg-info/ |
/relevation/ext/python-cryptoplus/setup.py |
---|
0,0 → 1,14 |
#!/usr/bin/env python |
from setuptools import setup, find_packages |
setup(name='CryptoPlus', |
version='1.0', |
description='PyCrypto Cipher extension', |
author='Christophe Oosterlynck', |
author_email='tiftof@gmail.com', |
packages = find_packages('src'), |
install_requires = ['pycrypto'], |
package_dir={'': 'src'} |
) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Random/OSRNG.py |
---|
0,0 → 1,0 |
from Crypto.Random.OSRNG import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Random/Fortuna.py |
---|
0,0 → 1,0 |
from Crypto.Random.Fortuna import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Random/__init__.py |
---|
0,0 → 1,2 |
from Crypto.Random import * |
from Crypto.Random import _UserFriendlyRNG, atfork, random |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_RadioGatun.py |
---|
0,0 → 1,53 |
from pyradiogatun import RadioGatunType |
__all__ = ['new'] |
def new(data=None,wl=64): |
"""Create a new pure python RadioGatun hash object |
wl = wordlength (in bits) of the RadioGatun hash method |
between 1 and 64 (default = 64) |
data = if present, the method call update(arg) is made |
EXAMPLES: (testvectors from: http://radiogatun.noekeon.org/) |
========== |
>>> import python_RadioGatun |
radiogatun[64] |
--------------- |
>>> hasher = python_RadioGatun.new() |
>>> hasher.update('1234567890123456') |
>>> hasher.hexdigest() |
'caaec14b5b4a7960d6854709770e3071d635d60224f58aa385867e549ef4cc42' |
>>> hasher = python_RadioGatun.new() |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest() |
'0d08daf2354fa95aaa5b6a50f514384ecdd35940252e0631002e600e13cd285f' |
radiogatun[32] |
--------------- |
>>> hasher = python_RadioGatun.new(wl=32) |
>>> hasher.update('1234567890123456') |
>>> hasher.hexdigest() |
'59612324f3f42d3096e69125d2733b86143ae668ae9ed561ad785e0eac8dba25' |
>>> hasher = python_RadioGatun.new(wl=32) |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest() |
'041666388ef9655d48996a66dada1193d6646012a7b25a24fb10e6075cf0fc54' |
""" |
crypto = RadioGatunType(wl) |
if data: |
crypto.update(data) |
return crypto |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
print "DOCTEST running... no messages = all good" |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pymd5.py |
---|
0,0 → 1,395 |
#!/usr/bin/env python |
# -*- coding: iso-8859-1 -*- |
# Note that PyPy contains also a built-in module 'md5' which will hide |
# this one if compiled in. |
"""A sample implementation of MD5 in pure Python. |
This is an implementation of the MD5 hash function, as specified by |
RFC 1321, in pure Python. It was implemented using Bruce Schneier's |
excellent book "Applied Cryptography", 2nd ed., 1996. |
Surely this is not meant to compete with the existing implementation |
of the Python standard library (written in C). Rather, it should be |
seen as a Python complement that is more readable than C and can be |
used more conveniently for learning and experimenting purposes in |
the field of cryptography. |
This module tries very hard to follow the API of the existing Python |
standard library's "md5" module, but although it seems to work fine, |
it has not been extensively tested! (But note that there is a test |
module, test_md5py.py, that compares this Python implementation with |
the C one of the Python standard library. |
BEWARE: this comes with no guarantee whatsoever about fitness and/or |
other properties! Specifically, do not use this in any production |
code! License is Python License! |
Special thanks to Aurelian Coman who fixed some nasty bugs! |
Dinu C. Gherman |
""" |
__date__ = '2004-11-17' |
__version__ = 0.91 # Modernised by J. Hallén and L. Creighton for Pypy |
__metaclass__ = type # or genrpy won't work |
import struct, copy |
# ====================================================================== |
# Bit-Manipulation helpers |
# ====================================================================== |
def _bytelist2long(list): |
"Transform a list of characters into a list of longs." |
imax = len(list)/4 |
hl = [0L] * imax |
j = 0 |
i = 0 |
while i < imax: |
b0 = long(ord(list[j])) |
b1 = (long(ord(list[j+1]))) << 8 |
b2 = (long(ord(list[j+2]))) << 16 |
b3 = (long(ord(list[j+3]))) << 24 |
hl[i] = b0 | b1 |b2 | b3 |
i = i+1 |
j = j+4 |
return hl |
def _rotateLeft(x, n): |
"Rotate x (32 bit) left n bits circularly." |
return (x << n) | (x >> (32-n)) |
# ====================================================================== |
# The real MD5 meat... |
# |
# Implemented after "Applied Cryptography", 2nd ed., 1996, |
# pp. 436-441 by Bruce Schneier. |
# ====================================================================== |
# F, G, H and I are basic MD5 functions. |
def F(x, y, z): |
return (x & y) | ((~x) & z) |
def G(x, y, z): |
return (x & z) | (y & (~z)) |
def H(x, y, z): |
return x ^ y ^ z |
def I(x, y, z): |
return y ^ (x | (~z)) |
def XX(func, a, b, c, d, x, s, ac): |
"""Wrapper for call distribution to functions F, G, H and I. |
This replaces functions FF, GG, HH and II from "Appl. Crypto." |
Rotation is separate from addition to prevent recomputation |
(now summed-up in one function). |
""" |
res = 0L |
res = res + a + func(b, c, d) |
res = res + x |
res = res + ac |
res = res & 0xffffffffL |
res = _rotateLeft(res, s) |
res = res & 0xffffffffL |
res = res + b |
return res & 0xffffffffL |
class MD5Type: |
"An implementation of the MD5 hash function in pure Python." |
def __init__(self): |
"Initialisation." |
# Initial message length in bits(!). |
self.length = 0L |
self.count = [0, 0] |
# Initial empty message as a sequence of bytes (8 bit characters). |
self.input = [] |
# Call a separate init function, that can be used repeatedly |
# to start from scratch on the same object. |
self.init() |
def init(self): |
"Initialize the message-digest and set all fields to zero." |
self.length = 0L |
self.count = [0, 0] |
self.input = [] |
# Load magic initialization constants. |
self.A = 0x67452301L |
self.B = 0xefcdab89L |
self.C = 0x98badcfeL |
self.D = 0x10325476L |
def _transform(self, inp): |
"""Basic MD5 step transforming the digest based on the input. |
Note that if the Mysterious Constants are arranged backwards |
in little-endian order and decrypted with the DES they produce |
OCCULT MESSAGES! |
""" |
a, b, c, d = A, B, C, D = self.A, self.B, self.C, self.D |
# Round 1. |
S11, S12, S13, S14 = 7, 12, 17, 22 |
a = XX(F, a, b, c, d, inp[ 0], S11, 0xD76AA478L) # 1 |
d = XX(F, d, a, b, c, inp[ 1], S12, 0xE8C7B756L) # 2 |
c = XX(F, c, d, a, b, inp[ 2], S13, 0x242070DBL) # 3 |
b = XX(F, b, c, d, a, inp[ 3], S14, 0xC1BDCEEEL) # 4 |
a = XX(F, a, b, c, d, inp[ 4], S11, 0xF57C0FAFL) # 5 |
d = XX(F, d, a, b, c, inp[ 5], S12, 0x4787C62AL) # 6 |
c = XX(F, c, d, a, b, inp[ 6], S13, 0xA8304613L) # 7 |
b = XX(F, b, c, d, a, inp[ 7], S14, 0xFD469501L) # 8 |
a = XX(F, a, b, c, d, inp[ 8], S11, 0x698098D8L) # 9 |
d = XX(F, d, a, b, c, inp[ 9], S12, 0x8B44F7AFL) # 10 |
c = XX(F, c, d, a, b, inp[10], S13, 0xFFFF5BB1L) # 11 |
b = XX(F, b, c, d, a, inp[11], S14, 0x895CD7BEL) # 12 |
a = XX(F, a, b, c, d, inp[12], S11, 0x6B901122L) # 13 |
d = XX(F, d, a, b, c, inp[13], S12, 0xFD987193L) # 14 |
c = XX(F, c, d, a, b, inp[14], S13, 0xA679438EL) # 15 |
b = XX(F, b, c, d, a, inp[15], S14, 0x49B40821L) # 16 |
# Round 2. |
S21, S22, S23, S24 = 5, 9, 14, 20 |
a = XX(G, a, b, c, d, inp[ 1], S21, 0xF61E2562L) # 17 |
d = XX(G, d, a, b, c, inp[ 6], S22, 0xC040B340L) # 18 |
c = XX(G, c, d, a, b, inp[11], S23, 0x265E5A51L) # 19 |
b = XX(G, b, c, d, a, inp[ 0], S24, 0xE9B6C7AAL) # 20 |
a = XX(G, a, b, c, d, inp[ 5], S21, 0xD62F105DL) # 21 |
d = XX(G, d, a, b, c, inp[10], S22, 0x02441453L) # 22 |
c = XX(G, c, d, a, b, inp[15], S23, 0xD8A1E681L) # 23 |
b = XX(G, b, c, d, a, inp[ 4], S24, 0xE7D3FBC8L) # 24 |
a = XX(G, a, b, c, d, inp[ 9], S21, 0x21E1CDE6L) # 25 |
d = XX(G, d, a, b, c, inp[14], S22, 0xC33707D6L) # 26 |
c = XX(G, c, d, a, b, inp[ 3], S23, 0xF4D50D87L) # 27 |
b = XX(G, b, c, d, a, inp[ 8], S24, 0x455A14EDL) # 28 |
a = XX(G, a, b, c, d, inp[13], S21, 0xA9E3E905L) # 29 |
d = XX(G, d, a, b, c, inp[ 2], S22, 0xFCEFA3F8L) # 30 |
c = XX(G, c, d, a, b, inp[ 7], S23, 0x676F02D9L) # 31 |
b = XX(G, b, c, d, a, inp[12], S24, 0x8D2A4C8AL) # 32 |
# Round 3. |
S31, S32, S33, S34 = 4, 11, 16, 23 |
a = XX(H, a, b, c, d, inp[ 5], S31, 0xFFFA3942L) # 33 |
d = XX(H, d, a, b, c, inp[ 8], S32, 0x8771F681L) # 34 |
c = XX(H, c, d, a, b, inp[11], S33, 0x6D9D6122L) # 35 |
b = XX(H, b, c, d, a, inp[14], S34, 0xFDE5380CL) # 36 |
a = XX(H, a, b, c, d, inp[ 1], S31, 0xA4BEEA44L) # 37 |
d = XX(H, d, a, b, c, inp[ 4], S32, 0x4BDECFA9L) # 38 |
c = XX(H, c, d, a, b, inp[ 7], S33, 0xF6BB4B60L) # 39 |
b = XX(H, b, c, d, a, inp[10], S34, 0xBEBFBC70L) # 40 |
a = XX(H, a, b, c, d, inp[13], S31, 0x289B7EC6L) # 41 |
d = XX(H, d, a, b, c, inp[ 0], S32, 0xEAA127FAL) # 42 |
c = XX(H, c, d, a, b, inp[ 3], S33, 0xD4EF3085L) # 43 |
b = XX(H, b, c, d, a, inp[ 6], S34, 0x04881D05L) # 44 |
a = XX(H, a, b, c, d, inp[ 9], S31, 0xD9D4D039L) # 45 |
d = XX(H, d, a, b, c, inp[12], S32, 0xE6DB99E5L) # 46 |
c = XX(H, c, d, a, b, inp[15], S33, 0x1FA27CF8L) # 47 |
b = XX(H, b, c, d, a, inp[ 2], S34, 0xC4AC5665L) # 48 |
# Round 4. |
S41, S42, S43, S44 = 6, 10, 15, 21 |
a = XX(I, a, b, c, d, inp[ 0], S41, 0xF4292244L) # 49 |
d = XX(I, d, a, b, c, inp[ 7], S42, 0x432AFF97L) # 50 |
c = XX(I, c, d, a, b, inp[14], S43, 0xAB9423A7L) # 51 |
b = XX(I, b, c, d, a, inp[ 5], S44, 0xFC93A039L) # 52 |
a = XX(I, a, b, c, d, inp[12], S41, 0x655B59C3L) # 53 |
d = XX(I, d, a, b, c, inp[ 3], S42, 0x8F0CCC92L) # 54 |
c = XX(I, c, d, a, b, inp[10], S43, 0xFFEFF47DL) # 55 |
b = XX(I, b, c, d, a, inp[ 1], S44, 0x85845DD1L) # 56 |
a = XX(I, a, b, c, d, inp[ 8], S41, 0x6FA87E4FL) # 57 |
d = XX(I, d, a, b, c, inp[15], S42, 0xFE2CE6E0L) # 58 |
c = XX(I, c, d, a, b, inp[ 6], S43, 0xA3014314L) # 59 |
b = XX(I, b, c, d, a, inp[13], S44, 0x4E0811A1L) # 60 |
a = XX(I, a, b, c, d, inp[ 4], S41, 0xF7537E82L) # 61 |
d = XX(I, d, a, b, c, inp[11], S42, 0xBD3AF235L) # 62 |
c = XX(I, c, d, a, b, inp[ 2], S43, 0x2AD7D2BBL) # 63 |
b = XX(I, b, c, d, a, inp[ 9], S44, 0xEB86D391L) # 64 |
A = (A + a) & 0xffffffffL |
B = (B + b) & 0xffffffffL |
C = (C + c) & 0xffffffffL |
D = (D + d) & 0xffffffffL |
self.A, self.B, self.C, self.D = A, B, C, D |
# Down from here all methods follow the Python Standard Library |
# API of the md5 module. |
def update(self, inBuf): |
"""Add to the current message. |
Update the md5 object with the string arg. Repeated calls |
are equivalent to a single call with the concatenation of all |
the arguments, i.e. m.update(a); m.update(b) is equivalent |
to m.update(a+b). |
The hash is immediately calculated for all full blocks. The final |
calculation is made in digest(). This allows us to keep an |
intermediate value for the hash, so that we only need to make |
minimal recalculation if we call update() to add moredata to |
the hashed string. |
""" |
leninBuf = long(len(inBuf)) |
# Compute number of bytes mod 64. |
index = (self.count[0] >> 3) & 0x3FL |
# Update number of bits. |
self.count[0] = self.count[0] + (leninBuf << 3) |
if self.count[0] < (leninBuf << 3): |
self.count[1] = self.count[1] + 1 |
self.count[1] = self.count[1] + (leninBuf >> 29) |
partLen = 64 - index |
if leninBuf >= partLen: |
self.input[index:] = list(inBuf[:partLen]) |
self._transform(_bytelist2long(self.input)) |
i = partLen |
while i + 63 < leninBuf: |
self._transform(_bytelist2long(list(inBuf[i:i+64]))) |
i = i + 64 |
else: |
self.input = list(inBuf[i:leninBuf]) |
else: |
i = 0 |
self.input = self.input + list(inBuf) |
def digest(self): |
"""Terminate the message-digest computation and return digest. |
Return the digest of the strings passed to the update() |
method so far. This is a 16-byte string which may contain |
non-ASCII characters, including null bytes. |
""" |
A = self.A |
B = self.B |
C = self.C |
D = self.D |
input = [] + self.input |
count = [] + self.count |
index = (self.count[0] >> 3) & 0x3fL |
if index < 56: |
padLen = 56 - index |
else: |
padLen = 120 - index |
padding = ['\200'] + ['\000'] * 63 |
self.update(padding[:padLen]) |
# Append length (before padding). |
bits = _bytelist2long(self.input[:56]) + count |
self._transform(bits) |
# Store state in digest. |
digest = struct.pack("<IIII", self.A, self.B, self.C, self.D) |
self.A = A |
self.B = B |
self.C = C |
self.D = D |
self.input = input |
self.count = count |
return digest |
def hexdigest(self): |
"""Terminate and return digest in HEX form. |
Like digest() except the digest is returned as a string of |
length 32, containing only hexadecimal digits. This may be |
used to exchange the value safely in email or other non- |
binary environments. |
""" |
return ''.join(['%02x' % ord(c) for c in self.digest()]) |
def copy(self): |
"""Return a clone object. |
Return a copy ('clone') of the md5 object. This can be used |
to efficiently compute the digests of strings that share |
a common initial substring. |
""" |
if 0: # set this to 1 to make the flow space crash |
return copy.deepcopy(self) |
clone = self.__class__() |
clone.length = self.length |
clone.count = [] + self.count[:] |
clone.input = [] + self.input |
clone.A = self.A |
clone.B = self.B |
clone.C = self.C |
clone.D = self.D |
return clone |
# ====================================================================== |
# Mimic Python top-level functions from standard library API |
# for consistency with the md5 module of the standard library. |
# ====================================================================== |
digest_size = 16 |
def new(arg=None): |
"""Return a new md5 crypto object. |
If arg is present, the method call update(arg) is made. |
""" |
crypto = MD5Type() |
if arg: |
crypto.update(arg) |
return crypto |
def md5(arg=None): |
"""Same as new(). |
For backward compatibility reasons, this is an alternative |
name for the new() function. |
""" |
return new(arg) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/__init__.py |
---|
0,0 → 1,7 |
# hash functions of pycrypto can be just imported |
# wrapping might be a better idea if docstrings need to be expanded |
# wrapping in Cipher was needed to make the new chaining modes available |
from Crypto.Hash import SHA, SHA256, MD5, MD2, MD4, HMAC |
__all__ = ["SHA","SHA256","MD5","MD2","MD4","HMAC","RIPEMD"] |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_SHA512.py |
---|
0,0 → 1,30 |
from pysha512 import sha512 |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python SHA-512 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: FIPS 180-2 |
========= |
>>> from CryptoPlus.Hash import python_SHA512 |
>>> message = "abc" |
>>> hasher = python_SHA512.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f' |
>>> message = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" |
>>> hasher = python_SHA512.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909' |
""" |
return sha512(data) |
digest_size = sha512.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_SHA224.py |
---|
0,0 → 1,30 |
from pysha224 import sha224 |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python SHA-224 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: FIPS 180-2 |
========= |
>>> from CryptoPlus.Hash import python_SHA224 |
>>> message = "abc" |
>>> hasher = python_SHA224.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7' |
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |
>>> hasher = python_SHA224.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525' |
""" |
return sha224(data) |
digest_size = sha224.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pyradiogatun.py |
---|
0,0 → 1,379 |
# ============================================================================= |
# Copyright (c) 2008 |
# Christophe Oosterlynck (christophe.oosterlynck_AT_gmail.com) |
# Philippe Teuwen (philippe.teuwen_AT_nxp.com) |
# |
# Permission is hereby granted, free of charge, to any person obtaining a copy |
# of this software and associated documentation files (the "Software"), to deal |
# in the Software without restriction, including without limitation the rights |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
# copies of the Software, and to permit persons to whom the Software is |
# furnished to do so, subject to the following conditions: |
# |
# The above copyright notice and this permission notice shall be included in |
# all copies or substantial portions of the Software. |
# |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
# THE SOFTWARE. |
# ============================================================================= |
"""RadioGatun pure python implementation |
Code based on the standard found here: http://radiogatun.noekeon.org/ |
Api and code interface is based on the MD5 implementation of pypy |
http://codespeak.net/pypy/dist/pypy/doc/home.html |
""" |
BELT_WIDTH = 3 |
BELT_LENGTH = 13 |
MILL_SIZE = 2*BELT_WIDTH + BELT_LENGTH |
NUMBER_OF_BLANK_ITERATIONS = 16 |
def state_init(): |
"""construct an empty state variable |
""" |
return {"A":[0]*MILL_SIZE, "B":[[0]*BELT_WIDTH for x in range(BELT_LENGTH)]} |
def XOR_F_i(state, inp, wl): |
"""Input mapping |
mapping input blocks to a state variable + XOR step of the alternating- |
input construction |
input = 1 blocklength string |
wl = wordlength of the RadioGatun hash object |
""" |
for i in xrange(BELT_WIDTH): |
# reverse endianness of byte ordering and convert the input |
# block to integer |
p_i = string2number(inp[i*wl:(i+1)*wl][::-1]) |
state["B"][0][i] ^= p_i |
state["A"][i+MILL_SIZE-BELT_WIDTH] ^= p_i |
return state |
def R(state, wl): |
"""Round function R |
state = the RadioGatun status |
wl = wordlength of the RadioGatun hash object |
""" |
out = state_init() |
# Belt function: simple rotation |
out["B"] = state["B"][-1:]+state["B"][:-1] |
# Mill to belt feedforward |
for i in xrange(BELT_LENGTH - 1): |
out["B"][i+1][i%BELT_WIDTH] ^= state["A"][i+1] |
# Run the mill |
out["A"] = Mill(state["A"], wl) |
# Belt to mill feedforward |
for i in xrange(BELT_WIDTH): |
out["A"][i+BELT_LENGTH] ^= state["B"][-1][i] |
return out |
def Mill(a, wl): |
"""The Mill function |
a = Mill variable of the RadioGatun status |
wl = wordlength of the RadioGatun hash object |
""" |
A = [0]*MILL_SIZE |
# Gamma: Non-linearity |
for i in xrange(MILL_SIZE): |
A[i] = a[i] ^ ~((~a[(i+1)%MILL_SIZE]) & (a[(i+2)%MILL_SIZE]) ) |
# Pi: Intra-word and inter-word dispersion |
for i in xrange(MILL_SIZE): |
a[i] = rotateRight(A[(7*i)%MILL_SIZE], i*(i+1)/2, wl*8) |
# Theta: Diffusion |
for i in xrange(MILL_SIZE): |
A[i] = a[i] ^ a[(i+1)%MILL_SIZE] ^ a[(i+4)%MILL_SIZE] |
# Iota: Asymmetry |
A[0] = A[0] ^ 1 |
return A |
class RadioGatunType: |
"An implementation of the RadioGatun hash function in pure Python." |
def __init__(self, wl): |
"""Initialisation. |
wl = wordlength (in bits) of the RadioGatun hash method |
between 8 and 64 (default = 64) |
""" |
if not ( 8 <= wl <= 64) or not (wl%8 == 0 ): |
raise ValueError, "Wordlength should be a multiple of 8" +\ |
" between 8 and 64" |
# word & block length in bytes |
self.wordlength = wl/8 |
self.blocklength = self.wordlength*BELT_WIDTH |
# Initial message length in bits(!). |
self.length = 0 |
self.count = 0 |
# Initial empty message as a sequence of bytes (8 bit characters). |
self.input = "" |
# Call a separate init function, that can be used repeatedly |
# to start from scratch on the same object. |
self.init() |
def init(self): |
"""Initialize the message-digest and set all fields to zero. |
Can be used to reinitialize the hash object |
""" |
self.S = state_init() |
self.length = 0 |
self.count = 0 |
self.input = "" |
def _transform(self, inp): |
"""Basic RadioGatun step transforming the digest based on the input. |
Performs the inside of the first loop of alternating input construction |
of RadioGatun. The only thing that can be done every time new data is |
submitted to the hash object. |
Mangling and output mapping can only follow when all input data has |
been received. |
""" |
T = XOR_F_i(self.S, inp, self.wordlength) |
self.S = R(T, self.wordlength) |
# Down from here all methods follow the Python Standard Library |
# API of the md5 module. |
def update(self, inBuf): |
"""Add to the current message. |
Update the radiogatun object with the string arg. Repeated calls |
are equivalent to a single call with the concatenation of all |
the arguments, i.e. m.update(a); m.update(b) is equivalent |
to m.update(a+b). |
The hash is immediately calculated for all full blocks. The final |
calculation is made in digest(). This allows us to keep an |
intermediate value for the hash, so that we only need to make |
minimal recalculation if we call update() to add moredata to |
the hashed string. |
""" |
# Amount of bytes given at input |
leninBuf = long(len(inBuf)) |
# Compute number of bytes mod 64. |
index = (self.count >> 3) % self.blocklength |
# Update number of bits. |
self.count = self.count + (leninBuf << 3) |
partLen = self.blocklength - index |
# if length of input is at least |
# the amount of bytes needed to fill a block |
if leninBuf >= partLen: |
self.input = self.input[:index] + inBuf[:partLen] |
self._transform(self.input) |
i = partLen |
while i + self.blocklength - 1 < leninBuf: |
self._transform(inBuf[i:i+self.blocklength]) |
i = i + self.blocklength |
else: |
self.input = inBuf[i:leninBuf] |
# if not enough bytes at input to fill a block |
else: |
i = 0 |
self.input = self.input + inBuf |
def digest(self, length=256): |
"""Terminate the message-digest computation and return digest. |
length = output length of the digest in bits |
any multiple of 8 with a minimum of 8 |
default = 256 |
Return the digest of the strings passed to the update() |
method so far. This is a byte string which may contain |
non-ASCII characters, including null bytes. |
Calling digest() doesn't change the internal state. Adding data via |
update() can still continu after asking for an intermediate digest |
value. |
""" |
S = self.S |
inp = "" + self.input |
count = self.count |
index = (self.count >> 3) % self.blocklength |
padLen = self.blocklength - index |
padding = ['\001'] + ['\000'] * (padLen - 1) |
self.update(''.join(padding)) |
# Mangling = blank rounds |
for i in xrange(NUMBER_OF_BLANK_ITERATIONS): |
self.S = R(self.S, self.wordlength) |
# Extraction |
# Store state in digest. |
digest = "" |
for i in xrange((length)/self.wordlength/2): |
self.S = R(self.S, self.wordlength) |
# F_o |
digest += \ |
number2string_N((self.S["A"][1]), self.wordlength)[::-1] +\ |
number2string_N((self.S["A"][2]), self.wordlength)[::-1] |
self.S = S |
self.input = inp |
self.count = count |
return digest[:length/8] |
def hexdigest(self, length=256): |
"""Terminate and return digest in HEX form. |
length = output length of the digest in bits |
any multiple of 8 with a minimum of 8 |
default = 256 |
Like digest() except the digest is returned as a string of |
length 'length', containing only hexadecimal digits. This may be |
used to exchange the value safely in email or other non- |
binary environments. |
Calling hexdigest() doesn't change the internal state. Adding data via |
update() can still continu after asking for an intermediate digest |
value. |
""" |
return ''.join(['%02x' % ord(c) for c in self.digest(length)]) |
def copy(self): |
"""Return a clone object. |
Return a copy ('clone') of the radiogatun object. This can be used |
to efficiently compute the digests of strings that share |
a common initial substring. |
""" |
import copy |
return copy.deepcopy(self) |
# ====================================================================== |
# TOP LEVEL INTERFACE |
# ====================================================================== |
def new(arg=None, wl=64): |
"""Return a new RadioGatun hash object |
wl = wordlength (in bits) of the RadioGatun hash method |
between 1 and 64 (default = 64) |
arg = if present, the method call update(arg) is made |
EXAMPLES: (testvectors from: http://radiogatun.noekeon.org/) |
========== |
>>> import pyradiogatun |
radiogatun[64] |
--------------- |
>>> hasher = pyradiogatun.new() |
>>> hasher.update('1234567890123456') |
>>> hasher.hexdigest() |
'caaec14b5b4a7960d6854709770e3071d635d60224f58aa385867e549ef4cc42' |
>>> hasher = pyradiogatun.new() |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest(480) |
'0d08daf2354fa95aaa5b6a50f514384ecdd35940252e0631002e600e13cd285f74adb0c0a666adeb1f2d20b1f2489e3d973dae4efc1f2cc5aaa13f2b' |
radiogatun[32] |
--------------- |
>>> hasher = pyradiogatun.new(wl=32) |
>>> hasher.update('1234567890123456') |
>>> hasher.hexdigest() |
'59612324f3f42d3096e69125d2733b86143ae668ae9ed561ad785e0eac8dba25' |
>>> hasher = pyradiogatun.new(wl=32) |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest(512) |
'041666388ef9655d48996a66dada1193d6646012a7b25a24fb10e6075cf0fc54a162949f4022531dbb6f66b64c3579df49f0f3af5951df9d68af310f2703b06d' |
radiogatun[16] |
--------------- |
>>> hasher = pyradiogatun.new(wl=16) |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest() |
'ab2203a8c3de943309b685513a29060339c001acce5900dcd6427a02c1fb8011' |
radiogatun[8] |
-------------- |
>>> hasher = pyradiogatun.new(wl=8) |
>>> hasher.update('Santa Barbara, California') |
>>> hasher.hexdigest() |
'e08f5cdbbfd8f5f3c479464a60ac186963e741d28f654e2c961d2f9bebc7de31' |
""" |
crypto = RadioGatunType(wl) |
if arg: |
crypto.update(arg) |
return crypto |
# ====================================================================== |
# HELPER FUNCTIONS |
# ====================================================================== |
def rotateRight(x, amountToShift, totalBits): |
"""Rotate x (consisting of 'totalBits' bits) n bits to right. |
x = integer input to be rotated |
amountToShift = the amount of bits that should be shifted |
totalBits = total amount bits at the input for rotation |
""" |
x = x%(2**totalBits) |
n_mod = ((amountToShift % totalBits) + totalBits) % totalBits |
return ((x >> n_mod) | ((x << (totalBits-n_mod)))&((2**totalBits)-1)) |
def string2number(i): |
""" Convert a string to a number |
Input: string (big-endian) |
Output: long or integer |
""" |
return int(i.encode('hex'), 16) |
def number2string_N(i, N): |
"""Convert a number to a string of fixed size |
i: long or integer |
N: length of string |
Output: string (big-endian) |
""" |
s = '%0*x' % (N*2, i) |
return s.decode('hex') |
# ====================================================================== |
# DOCTEST ENABLER |
# ====================================================================== |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
print "DOCTEST running... no messages = all good" |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_PBKDF2.py |
---|
0,0 → 1,55 |
import pypbkdf2 |
from CryptoPlus.Hash import SHA as SHA1, HMAC |
__all__ = ['new'] |
def new(passphrase, salt, iterations=1000, digestmodule=SHA1, macmodule=HMAC): |
"""PKCS#5 v2.0 Password-Based Key Derivation |
passphrase = the passphrase, supplied as a raw string, to make a key from |
salt = salt as raw string |
iterations = amount of iterations (default = 1000) |
digestmodule = digest function to use, supply as module |
example: python_SHA from CryptoPlus.Hash |
default: SHA1 |
macmodule = mac function to use, supply as module |
example: HMAC from CryptoPlus.Hash |
default: HMAC |
=> macmodule & digestmodule construct the pseudorandom function |
=> by default: HMAC-SHA1 |
Examples: (from: http://www.ietf.org/rfc/rfc3962.txt) |
========== |
>>> from CryptoPlus.Hash import python_PBKDF2 |
>>> passphrase = "password" |
>>> salt = "ATHENA.MIT.EDUraeburn" |
>>> iterations = 1 |
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations) |
>>> hasher.hexread(16) |
'cdedb5281bb2f801565a1122b2563515' |
>>> passphrase = "password" |
>>> salt = "ATHENA.MIT.EDUraeburn" |
>>> iterations = 1200 |
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations) |
>>> hasher.hexread(32) |
'5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13' |
>>> passphrase = "X"*64 |
>>> salt = "pass phrase equals block size" |
>>> iterations = 1200 |
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations) |
>>> hasher.hexread(32) |
'139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1' |
>>> passphrase = "X"*65 |
>>> salt = "pass phrase exceeds block size" |
>>> iterations = 1200 |
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations) |
>>> hasher.hexread(32) |
'9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a' |
""" |
return pypbkdf2.PBKDF2(passphrase, salt, iterations, digestmodule, macmodule) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_SHA256.py |
---|
0,0 → 1,30 |
from pysha256 import sha256 |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python SHA-256 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: FIPS 180-2 |
========= |
>>> from CryptoPlus.Hash import python_SHA256 |
>>> message = "abc" |
>>> hasher = python_SHA256.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' |
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |
>>> hasher = python_SHA256.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1' |
""" |
return sha256(data) |
digest_size = sha256.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_SHA384.py |
---|
0,0 → 1,30 |
from pysha384 import sha384 |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python SHA-384 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: FIPS 180-2 |
========= |
>>> from CryptoPlus.Hash import python_SHA384 |
>>> message = "abc" |
>>> hasher = python_SHA384.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7' |
>>> message = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" |
>>> hasher = python_SHA384.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039' |
""" |
return sha384(data) |
digest_size = sha384.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pysha224.py |
---|
0,0 → 1,14 |
+ digest_size = 28 |
\ No newline at end of file |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pysha512.py |
---|
0,0 → 1,111 |
+ |
+ return copy.deepcopy(self) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_SHA.py |
---|
0,0 → 1,30 |
import pysha |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python SHA hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: FIPS 180-2 |
========= |
>>> from CryptoPlus.Hash import python_SHA |
>>> message = "abc" |
>>> hasher = python_SHA.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'a9993e364706816aba3e25717850c26c9cd0d89d' |
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |
>>> hasher = python_SHA.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'84983e441c3bd26ebaae4aa1f95129e5e54670f1' |
""" |
return pysha.new(data) |
digest_size = pysha.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_whirlpool.py |
---|
0,0 → 1,30 |
import pywhirlpool |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python Whirlpool hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: (http://paginas.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html) |
========= |
>>> from CryptoPlus.Hash import python_whirlpool |
>>> message = "abc" |
>>> hasher = python_whirlpool.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest().upper() |
'4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5' |
>>> message = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" |
>>> hasher = python_whirlpool.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest().upper() |
'DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467' |
""" |
return pywhirlpool.new(data) |
digest_size = pywhirlpool.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/RIPEMD.py |
---|
0,0 → 1,26 |
from Crypto.Hash import RIPEMD |
def new(data=None): |
"""Create a new RIPEMD-160 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: |
========= |
>>> from CryptoPlus.Hash import RIPEMD |
>>> message = "abc" |
>>> hasher = RIPEMD.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc' |
>>> message = "message digest" |
>>> hasher = RIPEMD.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'5d0689ef49d2fae572b881b123a85ffa21595f36' |
""" |
return RIPEMD.new(data) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pypbkdf2.py |
---|
0,0 → 1,354 |
#!/usr/bin/python |
# -*- coding: ascii -*- |
########################################################################### |
# PBKDF2.py - PKCS#5 v2.0 Password-Based Key Derivation |
# |
# Copyright (C) 2007, 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# All rights reserved. |
# |
# Permission to use, copy, modify, and distribute this software and its |
# documentation for any purpose and without fee is hereby granted, |
# provided that the above copyright notice appear in all copies and that |
# both that copyright notice and this permission notice appear in |
# supporting documentation. |
# |
# THE AUTHOR PROVIDES THIS SOFTWARE ``AS IS'' AND ANY EXPRESSED OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
# Country of origin: Canada |
# |
########################################################################### |
# Sample PBKDF2 usage: |
# from Crypto.Cipher import AES |
# from PBKDF2 import PBKDF2 |
# import os |
# |
# salt = os.urandom(8) # 64-bit salt |
# key = PBKDF2("This passphrase is a secret.", salt).read(32) # 256-bit key |
# iv = os.urandom(16) # 128-bit IV |
# cipher = AES.new(key, AES.MODE_CBC, iv) |
# ... |
# |
# Sample crypt() usage: |
# from PBKDF2 import crypt |
# pwhash = crypt("secret") |
# alleged_pw = raw_input("Enter password: ") |
# if pwhash == crypt(alleged_pw, pwhash): |
# print "Password good" |
# else: |
# print "Invalid password" |
# |
########################################################################### |
# History: |
# |
# 2007-07-27 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# - Initial Release (v1.0) |
# |
# 2007-07-31 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# - Bugfix release (v1.1) |
# - SECURITY: The PyCrypto XOR cipher (used, if available, in the _strxor |
# function in the previous release) silently truncates all keys to 64 |
# bytes. The way it was used in the previous release, this would only be |
# problem if the pseudorandom function that returned values larger than |
# 64 bytes (so SHA1, SHA256 and SHA512 are fine), but I don't like |
# anything that silently reduces the security margin from what is |
# expected. |
# |
# 2008-06-17 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# - Compatibility release (v1.2) |
# - Add support for older versions of Python (2.2 and 2.3). |
# |
########################################################################### |
__version__ = "1.2" |
from struct import pack |
from binascii import b2a_hex |
from random import randint |
import string |
try: |
# Use PyCrypto (if available) |
from Crypto.Hash import HMAC, SHA as SHA1 |
except ImportError: |
# PyCrypto not available. Use the Python standard library. |
import hmac as HMAC |
import sha as SHA1 |
def strxor(a, b): |
return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b)]) |
def b64encode(data, chars="+/"): |
tt = string.maketrans("+/", chars) |
return data.encode('base64').replace("\n", "").translate(tt) |
class PBKDF2(object): |
"""PBKDF2.py : PKCS#5 v2.0 Password-Based Key Derivation |
This implementation takes a passphrase and a salt (and optionally an |
iteration count, a digest module, and a MAC module) and provides a |
file-like object from which an arbitrarily-sized key can be read. |
If the passphrase and/or salt are unicode objects, they are encoded as |
UTF-8 before they are processed. |
The idea behind PBKDF2 is to derive a cryptographic key from a |
passphrase and a salt. |
PBKDF2 may also be used as a strong salted password hash. The |
'crypt' function is provided for that purpose. |
Remember: Keys generated using PBKDF2 are only as strong as the |
passphrases they are derived from. |
""" |
def __init__(self, passphrase, salt, iterations=1000, |
digestmodule=SHA1, macmodule=HMAC): |
self.__macmodule = macmodule |
self.__digestmodule = digestmodule |
self._setup(passphrase, salt, iterations, self._pseudorandom) |
def _pseudorandom(self, key, msg): |
"""Pseudorandom function. e.g. HMAC-SHA1""" |
return self.__macmodule.new(key=key, msg=msg, |
digestmod=self.__digestmodule).digest() |
def read(self, bytes): |
"""Read the specified number of key bytes.""" |
if self.closed: |
raise ValueError("file-like object is closed") |
size = len(self.__buf) |
blocks = [self.__buf] |
i = self.__blockNum |
while size < bytes: |
i += 1 |
if i > 0xffffffffL or i < 1: |
# We could return "" here, but |
raise OverflowError("derived key too long") |
block = self.__f(i) |
blocks.append(block) |
size += len(block) |
buf = "".join(blocks) |
retval = buf[:bytes] |
self.__buf = buf[bytes:] |
self.__blockNum = i |
return retval |
def __f(self, i): |
# i must fit within 32 bits |
assert 1 <= i <= 0xffffffffL |
U = self.__prf(self.__passphrase, self.__salt + pack("!L", i)) |
result = U |
for j in xrange(2, 1+self.__iterations): |
U = self.__prf(self.__passphrase, U) |
result = strxor(result, U) |
return result |
def hexread(self, octets): |
"""Read the specified number of octets. Return them as hexadecimal. |
Note that len(obj.hexread(n)) == 2*n. |
""" |
return b2a_hex(self.read(octets)) |
def _setup(self, passphrase, salt, iterations, prf): |
# Sanity checks: |
# passphrase and salt must be str or unicode (in the latter |
# case, we convert to UTF-8) |
if isinstance(passphrase, unicode): |
passphrase = passphrase.encode("UTF-8") |
if not isinstance(passphrase, str): |
raise TypeError("passphrase must be str or unicode") |
if isinstance(salt, unicode): |
salt = salt.encode("UTF-8") |
if not isinstance(salt, str): |
raise TypeError("salt must be str or unicode") |
# iterations must be an integer >= 1 |
if not isinstance(iterations, (int, long)): |
raise TypeError("iterations must be an integer") |
if iterations < 1: |
raise ValueError("iterations must be at least 1") |
# prf must be callable |
if not callable(prf): |
raise TypeError("prf must be callable") |
self.__passphrase = passphrase |
self.__salt = salt |
self.__iterations = iterations |
self.__prf = prf |
self.__blockNum = 0 |
self.__buf = "" |
self.closed = False |
def close(self): |
"""Close the stream.""" |
if not self.closed: |
del self.__passphrase |
del self.__salt |
del self.__iterations |
del self.__prf |
del self.__blockNum |
del self.__buf |
self.closed = True |
def crypt(word, salt=None, iterations=None): |
"""PBKDF2-based unix crypt(3) replacement. |
The number of iterations specified in the salt overrides the 'iterations' |
parameter. |
The effective hash length is 192 bits. |
""" |
# Generate a (pseudo-)random salt if the user hasn't provided one. |
if salt is None: |
salt = _makesalt() |
# salt must be a string or the us-ascii subset of unicode |
if isinstance(salt, unicode): |
salt = salt.encode("us-ascii") |
if not isinstance(salt, str): |
raise TypeError("salt must be a string") |
# word must be a string or unicode (in the latter case, we convert to UTF-8) |
if isinstance(word, unicode): |
word = word.encode("UTF-8") |
if not isinstance(word, str): |
raise TypeError("word must be a string or unicode") |
# Try to extract the real salt and iteration count from the salt |
if salt.startswith("$p5k2$"): |
(iterations, salt, dummy) = salt.split("$")[2:5] |
if iterations == "": |
iterations = 400 |
else: |
converted = int(iterations, 16) |
if iterations != "%x" % converted: # lowercase hex, minimum digits |
raise ValueError("Invalid salt") |
iterations = converted |
if not (iterations >= 1): |
raise ValueError("Invalid salt") |
# Make sure the salt matches the allowed character set |
allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./" |
for ch in salt: |
if ch not in allowed: |
raise ValueError("Illegal character %r in salt" % (ch,)) |
if iterations is None or iterations == 400: |
iterations = 400 |
salt = "$p5k2$$" + salt |
else: |
salt = "$p5k2$%x$%s" % (iterations, salt) |
rawhash = PBKDF2(word, salt, iterations).read(24) |
return salt + "$" + b64encode(rawhash, "./") |
# Add crypt as a static method of the PBKDF2 class |
# This makes it easier to do "from PBKDF2 import PBKDF2" and still use |
# crypt. |
PBKDF2.crypt = staticmethod(crypt) |
def _makesalt(): |
"""Return a 48-bit pseudorandom salt for crypt(). |
This function is not suitable for generating cryptographic secrets. |
""" |
binarysalt = "".join([pack("@H", randint(0, 0xffff)) for i in range(3)]) |
return b64encode(binarysalt, "./") |
def test_pbkdf2(): |
"""Module self-test""" |
from binascii import a2b_hex |
# |
# Test vectors from RFC 3962 |
# |
# Test 1 |
result = PBKDF2("password", "ATHENA.MIT.EDUraeburn", 1).read(16) |
expected = a2b_hex("cdedb5281bb2f801565a1122b2563515") |
if result != expected: |
raise RuntimeError("self-test failed") |
# Test 2 |
result = PBKDF2("password", "ATHENA.MIT.EDUraeburn", 1200).hexread(32) |
expected = ("5c08eb61fdf71e4e4ec3cf6ba1f5512b" |
"a7e52ddbc5e5142f708a31e2e62b1e13") |
if result != expected: |
raise RuntimeError("self-test failed") |
# Test 3 |
result = PBKDF2("X"*64, "pass phrase equals block size", 1200).hexread(32) |
expected = ("139c30c0966bc32ba55fdbf212530ac9" |
"c5ec59f1a452f5cc9ad940fea0598ed1") |
if result != expected: |
raise RuntimeError("self-test failed") |
# Test 4 |
result = PBKDF2("X"*65, "pass phrase exceeds block size", 1200).hexread(32) |
expected = ("9ccad6d468770cd51b10e6a68721be61" |
"1a8b4d282601db3b36be9246915ec82a") |
if result != expected: |
raise RuntimeError("self-test failed") |
# |
# Other test vectors |
# |
# Chunked read |
f = PBKDF2("kickstart", "workbench", 256) |
result = f.read(17) |
result += f.read(17) |
result += f.read(1) |
result += f.read(2) |
result += f.read(3) |
expected = PBKDF2("kickstart", "workbench", 256).read(40) |
if result != expected: |
raise RuntimeError("self-test failed") |
# |
# crypt() test vectors |
# |
# crypt 1 |
result = crypt("cloadm", "exec") |
expected = '$p5k2$$exec$r1EWMCMk7Rlv3L/RNcFXviDefYa0hlql' |
if result != expected: |
raise RuntimeError("self-test failed") |
# crypt 2 |
result = crypt("gnu", '$p5k2$c$u9HvcT4d$.....') |
expected = '$p5k2$c$u9HvcT4d$Sd1gwSVCLZYAuqZ25piRnbBEoAesaa/g' |
if result != expected: |
raise RuntimeError("self-test failed") |
# crypt 3 |
result = crypt("dcl", "tUsch7fU", iterations=13) |
expected = "$p5k2$d$tUsch7fU$nqDkaxMDOFBeJsTSfABsyn.PYUXilHwL" |
if result != expected: |
raise RuntimeError("self-test failed") |
# crypt 4 (unicode) |
result = crypt(u'\u0399\u03c9\u03b1\u03bd\u03bd\u03b7\u03c2', |
'$p5k2$$KosHgqNo$9mjN8gqjt02hDoP0c2J0ABtLIwtot8cQ') |
expected = '$p5k2$$KosHgqNo$9mjN8gqjt02hDoP0c2J0ABtLIwtot8cQ' |
if result != expected: |
raise RuntimeError("self-test failed") |
if __name__ == '__main__': |
test_pbkdf2() |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pysha256.py |
---|
0,0 → 1,107 |
+ |
+ return copy.deepcopy(self) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pysha384.py |
---|
0,0 → 1,14 |
+ digest_size = 48 |
\ No newline at end of file |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pysha.py |
---|
0,0 → 1,349 |
#!/usr/bin/env python |
# -*- coding: iso-8859-1 |
# Note that PyPy contains also a built-in module 'sha' which will hide |
# this one if compiled in. |
"""A sample implementation of SHA-1 in pure Python. |
Framework adapted from Dinu Gherman's MD5 implementation by |
J. Hallén and L. Creighton. SHA-1 implementation based directly on |
the text of the NIST standard FIPS PUB 180-1. |
""" |
__date__ = '2004-11-17' |
__version__ = 0.91 # Modernised by J. Hallén and L. Creighton for Pypy |
import struct, copy |
# ====================================================================== |
# Bit-Manipulation helpers |
# |
# _long2bytes() was contributed by Barry Warsaw |
# and is reused here with tiny modifications. |
# ====================================================================== |
def _long2bytesBigEndian(n, blocksize=0): |
"""Convert a long integer to a byte string. |
If optional blocksize is given and greater than zero, pad the front |
of the byte string with binary zeros so that the length is a multiple |
of blocksize. |
""" |
# After much testing, this algorithm was deemed to be the fastest. |
s = '' |
pack = struct.pack |
while n > 0: |
s = pack('>I', n & 0xffffffffL) + s |
n = n >> 32 |
# Strip off leading zeros. |
for i in range(len(s)): |
if s[i] <> '\000': |
break |
else: |
# Only happens when n == 0. |
s = '\000' |
i = 0 |
s = s[i:] |
# Add back some pad bytes. This could be done more efficiently |
# w.r.t. the de-padding being done above, but sigh... |
if blocksize > 0 and len(s) % blocksize: |
s = (blocksize - len(s) % blocksize) * '\000' + s |
return s |
def _bytelist2longBigEndian(list): |
"Transform a list of characters into a list of longs." |
imax = len(list)/4 |
hl = [0L] * imax |
j = 0 |
i = 0 |
while i < imax: |
b0 = long(ord(list[j])) << 24 |
b1 = long(ord(list[j+1])) << 16 |
b2 = long(ord(list[j+2])) << 8 |
b3 = long(ord(list[j+3])) |
hl[i] = b0 | b1 | b2 | b3 |
i = i+1 |
j = j+4 |
return hl |
def _rotateLeft(x, n): |
"Rotate x (32 bit) left n bits circularly." |
return (x << n) | (x >> (32-n)) |
# ====================================================================== |
# The SHA transformation functions |
# |
# ====================================================================== |
def f0_19(B, C, D): |
return (B & C) | ((~ B) & D) |
def f20_39(B, C, D): |
return B ^ C ^ D |
def f40_59(B, C, D): |
return (B & C) | (B & D) | (C & D) |
def f60_79(B, C, D): |
return B ^ C ^ D |
f = [f0_19, f20_39, f40_59, f60_79] |
# Constants to be used |
K = [ |
0x5A827999L, # ( 0 <= t <= 19) |
0x6ED9EBA1L, # (20 <= t <= 39) |
0x8F1BBCDCL, # (40 <= t <= 59) |
0xCA62C1D6L # (60 <= t <= 79) |
] |
class sha: |
"An implementation of the MD5 hash function in pure Python." |
def __init__(self): |
"Initialisation." |
# Initial message length in bits(!). |
self.length = 0L |
self.count = [0, 0] |
# Initial empty message as a sequence of bytes (8 bit characters). |
self.input = [] |
# Call a separate init function, that can be used repeatedly |
# to start from scratch on the same object. |
self.init() |
def init(self): |
"Initialize the message-digest and set all fields to zero." |
self.length = 0L |
self.input = [] |
# Initial 160 bit message digest (5 times 32 bit). |
self.H0 = 0x67452301L |
self.H1 = 0xEFCDAB89L |
self.H2 = 0x98BADCFEL |
self.H3 = 0x10325476L |
self.H4 = 0xC3D2E1F0L |
def _transform(self, W): |
for t in range(16, 80): |
W.append(_rotateLeft( |
W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1) & 0xffffffffL) |
A = self.H0 |
B = self.H1 |
C = self.H2 |
D = self.H3 |
E = self.H4 |
""" |
This loop was unrolled to gain about 10% in speed |
for t in range(0, 80): |
TEMP = _rotateLeft(A, 5) + f[t/20] + E + W[t] + K[t/20] |
E = D |
D = C |
C = _rotateLeft(B, 30) & 0xffffffffL |
B = A |
A = TEMP & 0xffffffffL |
""" |
for t in range(0, 20): |
TEMP = _rotateLeft(A, 5) + ((B & C) | ((~ B) & D)) + E + W[t] + K[0] |
E = D |
D = C |
C = _rotateLeft(B, 30) & 0xffffffffL |
B = A |
A = TEMP & 0xffffffffL |
for t in range(20, 40): |
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[1] |
E = D |
D = C |
C = _rotateLeft(B, 30) & 0xffffffffL |
B = A |
A = TEMP & 0xffffffffL |
for t in range(40, 60): |
TEMP = _rotateLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2] |
E = D |
D = C |
C = _rotateLeft(B, 30) & 0xffffffffL |
B = A |
A = TEMP & 0xffffffffL |
for t in range(60, 80): |
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[3] |
E = D |
D = C |
C = _rotateLeft(B, 30) & 0xffffffffL |
B = A |
A = TEMP & 0xffffffffL |
self.H0 = (self.H0 + A) & 0xffffffffL |
self.H1 = (self.H1 + B) & 0xffffffffL |
self.H2 = (self.H2 + C) & 0xffffffffL |
self.H3 = (self.H3 + D) & 0xffffffffL |
self.H4 = (self.H4 + E) & 0xffffffffL |
# Down from here all methods follow the Python Standard Library |
# API of the sha module. |
def update(self, inBuf): |
"""Add to the current message. |
Update the md5 object with the string arg. Repeated calls |
are equivalent to a single call with the concatenation of all |
the arguments, i.e. m.update(a); m.update(b) is equivalent |
to m.update(a+b). |
The hash is immediately calculated for all full blocks. The final |
calculation is made in digest(). It will calculate 1-2 blocks, |
depending on how much padding we have to add. This allows us to |
keep an intermediate value for the hash, so that we only need to |
make minimal recalculation if we call update() to add more data |
to the hashed string. |
""" |
leninBuf = long(len(inBuf)) |
# Compute number of bytes mod 64. |
index = (self.count[1] >> 3) & 0x3FL |
# Update number of bits. |
self.count[1] = self.count[1] + (leninBuf << 3) |
if self.count[1] < (leninBuf << 3): |
self.count[0] = self.count[0] + 1 |
self.count[0] = self.count[0] + (leninBuf >> 29) |
partLen = 64 - index |
if leninBuf >= partLen: |
self.input[index:] = list(inBuf[:partLen]) |
self._transform(_bytelist2longBigEndian(self.input)) |
i = partLen |
while i + 63 < leninBuf: |
self._transform(_bytelist2longBigEndian(list(inBuf[i:i+64]))) |
i = i + 64 |
else: |
self.input = list(inBuf[i:leninBuf]) |
else: |
i = 0 |
self.input = self.input + list(inBuf) |
def digest(self): |
"""Terminate the message-digest computation and return digest. |
Return the digest of the strings passed to the update() |
method so far. This is a 16-byte string which may contain |
non-ASCII characters, including null bytes. |
""" |
H0 = self.H0 |
H1 = self.H1 |
H2 = self.H2 |
H3 = self.H3 |
H4 = self.H4 |
input = [] + self.input |
count = [] + self.count |
index = (self.count[1] >> 3) & 0x3fL |
if index < 56: |
padLen = 56 - index |
else: |
padLen = 120 - index |
padding = ['\200'] + ['\000'] * 63 |
self.update(padding[:padLen]) |
# Append length (before padding). |
bits = _bytelist2longBigEndian(self.input[:56]) + count |
self._transform(bits) |
# Store state in digest. |
digest = _long2bytesBigEndian(self.H0, 4) + \ |
_long2bytesBigEndian(self.H1, 4) + \ |
_long2bytesBigEndian(self.H2, 4) + \ |
_long2bytesBigEndian(self.H3, 4) + \ |
_long2bytesBigEndian(self.H4, 4) |
self.H0 = H0 |
self.H1 = H1 |
self.H2 = H2 |
self.H3 = H3 |
self.H4 = H4 |
self.input = input |
self.count = count |
return digest |
def hexdigest(self): |
"""Terminate and return digest in HEX form. |
Like digest() except the digest is returned as a string of |
length 32, containing only hexadecimal digits. This may be |
used to exchange the value safely in email or other non- |
binary environments. |
""" |
return ''.join(['%02x' % ord(c) for c in self.digest()]) |
def copy(self): |
"""Return a clone object. |
Return a copy ('clone') of the md5 object. This can be used |
to efficiently compute the digests of strings that share |
a common initial substring. |
""" |
return copy.deepcopy(self) |
# ====================================================================== |
# Mimic Python top-level functions from standard library API |
# for consistency with the md5 module of the standard library. |
# ====================================================================== |
# These are mandatory variables in the module. They have constant values |
# in the SHA standard. |
digest_size = digestsize = 20 |
blocksize = 1 |
def new(arg=None): |
"""Return a new sha crypto object. |
If arg is present, the method call update(arg) is made. |
""" |
crypto = sha() |
if arg: |
crypto.update(arg) |
return crypto |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/python_MD5.py |
---|
0,0 → 1,30 |
import pymd5 |
__all__ = ['new','digest_size'] |
def new(data=None): |
"""Create a new pure python MD5 hash object |
data = initial input (raw string) to the hashing object |
if present, the method call update(arg) is made |
EXAMPLE: (http://www.rfc-editor.org/rfc/rfc1321.txt) |
========= |
>>> from CryptoPlus.Hash import MD5 |
>>> message = "abc" |
>>> hasher = MD5.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'900150983cd24fb0d6963f7d28e17f72' |
>>> message = "message digest" |
>>> hasher = MD5.new() |
>>> hasher.update(message) |
>>> hasher.hexdigest() |
'f96b697d7cb7938d525a2f31aaf161d0' |
""" |
return pymd5.new(data) |
digest_size = pymd5.digest_size |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Hash/pywhirlpool.py |
---|
0,0 → 1,795 |
## whirlpool.py - pure Python implementation of the Whirlpool algorithm. |
## Bjorn Edstrom <be@bjrn.se> 16 december 2007. |
## |
## Copyrights |
## ========== |
## |
## This code is based on the reference implementation by |
## Paulo S.L.M. Barreto and Vincent Rijmen. The reference implementation |
## is placed in the public domain but has the following headers: |
## |
## * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS |
## * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
## * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
## * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE |
## * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
## * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
## * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
## * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
## * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
## * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
## * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
## * |
## */ |
## /* The code contained in this file (Whirlpool.c) is in the public domain. */ |
## |
## This Python implementation is therefore also placed in the public domain. |
try: |
import psyco |
psyco.full() |
except ImportError: |
pass |
#block_size = 64 |
digest_size = 64 |
digestsize = 64 |
class Whirlpool: |
"""Return a new Whirlpool object. An optional string argument |
may be provided; if present, this string will be automatically |
hashed.""" |
def __init__(self, arg=None): |
self.ctx = WhirlpoolStruct() |
if arg: |
self.update(arg) |
self.digest_status = 0 |
def update(self, arg): |
"""update(arg)""" |
WhirlpoolAdd(arg, len(arg)*8, self.ctx) |
self.digest_status = 0 |
def digest(self): |
"""digest()""" |
if self.digest_status == 0: |
self.dig = WhirlpoolFinalize(self.ctx) |
self.digest_status = 1 |
return self.dig |
def hexdigest(self): |
"""hexdigest()""" |
dig = self.digest() |
tempstr = '' |
for d in dig: |
xxx = '%02x' % (ord(d)) |
tempstr = tempstr + xxx |
return tempstr |
def copy(self): |
"""copy()""" |
import copy |
return copy.deepcopy(self) |
def new(init=None): |
"""Return a new Whirlpool object. An optional string argument |
may be provided; if present, this string will be automatically |
hashed.""" |
return Whirlpool(init) |
# |
# Private. |
# |
R = 10 |
C0 = [ |
0x18186018c07830d8, 0x23238c2305af4626, 0xc6c63fc67ef991b8, 0xe8e887e8136fcdfb, |
0x878726874ca113cb, 0xb8b8dab8a9626d11, 0x0101040108050209, 0x4f4f214f426e9e0d, |
0x3636d836adee6c9b, 0xa6a6a2a6590451ff, 0xd2d26fd2debdb90c, 0xf5f5f3f5fb06f70e, |
0x7979f979ef80f296, 0x6f6fa16f5fcede30, 0x91917e91fcef3f6d, 0x52525552aa07a4f8, |
0x60609d6027fdc047, 0xbcbccabc89766535, 0x9b9b569baccd2b37, 0x8e8e028e048c018a, |
0xa3a3b6a371155bd2, 0x0c0c300c603c186c, 0x7b7bf17bff8af684, 0x3535d435b5e16a80, |
0x1d1d741de8693af5, 0xe0e0a7e05347ddb3, 0xd7d77bd7f6acb321, 0xc2c22fc25eed999c, |
0x2e2eb82e6d965c43, 0x4b4b314b627a9629, 0xfefedffea321e15d, 0x575741578216aed5, |
0x15155415a8412abd, 0x7777c1779fb6eee8, 0x3737dc37a5eb6e92, 0xe5e5b3e57b56d79e, |
0x9f9f469f8cd92313, 0xf0f0e7f0d317fd23, 0x4a4a354a6a7f9420, 0xdada4fda9e95a944, |
0x58587d58fa25b0a2, 0xc9c903c906ca8fcf, 0x2929a429558d527c, 0x0a0a280a5022145a, |
0xb1b1feb1e14f7f50, 0xa0a0baa0691a5dc9, 0x6b6bb16b7fdad614, 0x85852e855cab17d9, |
0xbdbdcebd8173673c, 0x5d5d695dd234ba8f, 0x1010401080502090, 0xf4f4f7f4f303f507, |
0xcbcb0bcb16c08bdd, 0x3e3ef83eedc67cd3, 0x0505140528110a2d, 0x676781671fe6ce78, |
0xe4e4b7e47353d597, 0x27279c2725bb4e02, 0x4141194132588273, 0x8b8b168b2c9d0ba7, |
0xa7a7a6a7510153f6, 0x7d7de97dcf94fab2, 0x95956e95dcfb3749, 0xd8d847d88e9fad56, |
0xfbfbcbfb8b30eb70, 0xeeee9fee2371c1cd, 0x7c7ced7cc791f8bb, 0x6666856617e3cc71, |
0xdddd53dda68ea77b, 0x17175c17b84b2eaf, 0x4747014702468e45, 0x9e9e429e84dc211a, |
0xcaca0fca1ec589d4, 0x2d2db42d75995a58, 0xbfbfc6bf9179632e, 0x07071c07381b0e3f, |
0xadad8ead012347ac, 0x5a5a755aea2fb4b0, 0x838336836cb51bef, 0x3333cc3385ff66b6, |
0x636391633ff2c65c, 0x02020802100a0412, 0xaaaa92aa39384993, 0x7171d971afa8e2de, |
0xc8c807c80ecf8dc6, 0x19196419c87d32d1, 0x494939497270923b, 0xd9d943d9869aaf5f, |
0xf2f2eff2c31df931, 0xe3e3abe34b48dba8, 0x5b5b715be22ab6b9, 0x88881a8834920dbc, |
0x9a9a529aa4c8293e, 0x262698262dbe4c0b, 0x3232c8328dfa64bf, 0xb0b0fab0e94a7d59, |
0xe9e983e91b6acff2, 0x0f0f3c0f78331e77, 0xd5d573d5e6a6b733, 0x80803a8074ba1df4, |
0xbebec2be997c6127, 0xcdcd13cd26de87eb, 0x3434d034bde46889, 0x48483d487a759032, |
0xffffdbffab24e354, 0x7a7af57af78ff48d, 0x90907a90f4ea3d64, 0x5f5f615fc23ebe9d, |
0x202080201da0403d, 0x6868bd6867d5d00f, 0x1a1a681ad07234ca, 0xaeae82ae192c41b7, |
0xb4b4eab4c95e757d, 0x54544d549a19a8ce, 0x93937693ece53b7f, 0x222288220daa442f, |
0x64648d6407e9c863, 0xf1f1e3f1db12ff2a, 0x7373d173bfa2e6cc, 0x12124812905a2482, |
0x40401d403a5d807a, 0x0808200840281048, 0xc3c32bc356e89b95, 0xecec97ec337bc5df, |
0xdbdb4bdb9690ab4d, 0xa1a1bea1611f5fc0, 0x8d8d0e8d1c830791, 0x3d3df43df5c97ac8, |
0x97976697ccf1335b, 0x0000000000000000, 0xcfcf1bcf36d483f9, 0x2b2bac2b4587566e, |
0x7676c57697b3ece1, 0x8282328264b019e6, 0xd6d67fd6fea9b128, 0x1b1b6c1bd87736c3, |
0xb5b5eeb5c15b7774, 0xafaf86af112943be, 0x6a6ab56a77dfd41d, 0x50505d50ba0da0ea, |
0x45450945124c8a57, 0xf3f3ebf3cb18fb38, 0x3030c0309df060ad, 0xefef9bef2b74c3c4, |
0x3f3ffc3fe5c37eda, 0x55554955921caac7, 0xa2a2b2a2791059db, 0xeaea8fea0365c9e9, |
0x656589650fecca6a, 0xbabad2bab9686903, 0x2f2fbc2f65935e4a, 0xc0c027c04ee79d8e, |
0xdede5fdebe81a160, 0x1c1c701ce06c38fc, 0xfdfdd3fdbb2ee746, 0x4d4d294d52649a1f, |
0x92927292e4e03976, 0x7575c9758fbceafa, 0x06061806301e0c36, 0x8a8a128a249809ae, |
0xb2b2f2b2f940794b, 0xe6e6bfe66359d185, 0x0e0e380e70361c7e, 0x1f1f7c1ff8633ee7, |
0x6262956237f7c455, 0xd4d477d4eea3b53a, 0xa8a89aa829324d81, 0x96966296c4f43152, |
0xf9f9c3f99b3aef62, 0xc5c533c566f697a3, 0x2525942535b14a10, 0x59597959f220b2ab, |
0x84842a8454ae15d0, 0x7272d572b7a7e4c5, 0x3939e439d5dd72ec, 0x4c4c2d4c5a619816, |
0x5e5e655eca3bbc94, 0x7878fd78e785f09f, 0x3838e038ddd870e5, 0x8c8c0a8c14860598, |
0xd1d163d1c6b2bf17, 0xa5a5aea5410b57e4, 0xe2e2afe2434dd9a1, 0x616199612ff8c24e, |
0xb3b3f6b3f1457b42, 0x2121842115a54234, 0x9c9c4a9c94d62508, 0x1e1e781ef0663cee, |
0x4343114322528661, 0xc7c73bc776fc93b1, 0xfcfcd7fcb32be54f, 0x0404100420140824, |
0x51515951b208a2e3, 0x99995e99bcc72f25, 0x6d6da96d4fc4da22, 0x0d0d340d68391a65, |
0xfafacffa8335e979, 0xdfdf5bdfb684a369, 0x7e7ee57ed79bfca9, 0x242490243db44819, |
0x3b3bec3bc5d776fe, 0xabab96ab313d4b9a, 0xcece1fce3ed181f0, 0x1111441188552299, |
0x8f8f068f0c890383, 0x4e4e254e4a6b9c04, 0xb7b7e6b7d1517366, 0xebeb8beb0b60cbe0, |
0x3c3cf03cfdcc78c1, 0x81813e817cbf1ffd, 0x94946a94d4fe3540, 0xf7f7fbf7eb0cf31c, |
0xb9b9deb9a1676f18, 0x13134c13985f268b, 0x2c2cb02c7d9c5851, 0xd3d36bd3d6b8bb05, |
0xe7e7bbe76b5cd38c, 0x6e6ea56e57cbdc39, 0xc4c437c46ef395aa, 0x03030c03180f061b, |
0x565645568a13acdc, 0x44440d441a49885e, 0x7f7fe17fdf9efea0, 0xa9a99ea921374f88, |
0x2a2aa82a4d825467, 0xbbbbd6bbb16d6b0a, 0xc1c123c146e29f87, 0x53535153a202a6f1, |
0xdcdc57dcae8ba572, 0x0b0b2c0b58271653, 0x9d9d4e9d9cd32701, 0x6c6cad6c47c1d82b, |
0x3131c43195f562a4, 0x7474cd7487b9e8f3, 0xf6f6fff6e309f115, 0x464605460a438c4c, |
0xacac8aac092645a5, 0x89891e893c970fb5, 0x14145014a04428b4, 0xe1e1a3e15b42dfba, |
0x16165816b04e2ca6, 0x3a3ae83acdd274f7, 0x6969b9696fd0d206, 0x09092409482d1241, |
0x7070dd70a7ade0d7, 0xb6b6e2b6d954716f, 0xd0d067d0ceb7bd1e, 0xeded93ed3b7ec7d6, |
0xcccc17cc2edb85e2, 0x424215422a578468, 0x98985a98b4c22d2c, 0xa4a4aaa4490e55ed, |
0x2828a0285d885075, 0x5c5c6d5cda31b886, 0xf8f8c7f8933fed6b, 0x8686228644a411c2, |
] |
C1 = [ |
0xd818186018c07830, 0x2623238c2305af46, 0xb8c6c63fc67ef991, 0xfbe8e887e8136fcd, |
0xcb878726874ca113, 0x11b8b8dab8a9626d, 0x0901010401080502, 0x0d4f4f214f426e9e, |
0x9b3636d836adee6c, 0xffa6a6a2a6590451, 0x0cd2d26fd2debdb9, 0x0ef5f5f3f5fb06f7, |
0x967979f979ef80f2, 0x306f6fa16f5fcede, 0x6d91917e91fcef3f, 0xf852525552aa07a4, |
0x4760609d6027fdc0, 0x35bcbccabc897665, 0x379b9b569baccd2b, 0x8a8e8e028e048c01, |
0xd2a3a3b6a371155b, 0x6c0c0c300c603c18, 0x847b7bf17bff8af6, 0x803535d435b5e16a, |
0xf51d1d741de8693a, 0xb3e0e0a7e05347dd, 0x21d7d77bd7f6acb3, 0x9cc2c22fc25eed99, |
0x432e2eb82e6d965c, 0x294b4b314b627a96, 0x5dfefedffea321e1, 0xd5575741578216ae, |
0xbd15155415a8412a, 0xe87777c1779fb6ee, 0x923737dc37a5eb6e, 0x9ee5e5b3e57b56d7, |
0x139f9f469f8cd923, 0x23f0f0e7f0d317fd, 0x204a4a354a6a7f94, 0x44dada4fda9e95a9, |
0xa258587d58fa25b0, 0xcfc9c903c906ca8f, 0x7c2929a429558d52, 0x5a0a0a280a502214, |
0x50b1b1feb1e14f7f, 0xc9a0a0baa0691a5d, 0x146b6bb16b7fdad6, 0xd985852e855cab17, |
0x3cbdbdcebd817367, 0x8f5d5d695dd234ba, 0x9010104010805020, 0x07f4f4f7f4f303f5, |
0xddcbcb0bcb16c08b, 0xd33e3ef83eedc67c, 0x2d0505140528110a, 0x78676781671fe6ce, |
0x97e4e4b7e47353d5, 0x0227279c2725bb4e, 0x7341411941325882, 0xa78b8b168b2c9d0b, |
0xf6a7a7a6a7510153, 0xb27d7de97dcf94fa, 0x4995956e95dcfb37, 0x56d8d847d88e9fad, |
0x70fbfbcbfb8b30eb, 0xcdeeee9fee2371c1, 0xbb7c7ced7cc791f8, 0x716666856617e3cc, |
0x7bdddd53dda68ea7, 0xaf17175c17b84b2e, 0x454747014702468e, 0x1a9e9e429e84dc21, |
0xd4caca0fca1ec589, 0x582d2db42d75995a, 0x2ebfbfc6bf917963, 0x3f07071c07381b0e, |
0xacadad8ead012347, 0xb05a5a755aea2fb4, 0xef838336836cb51b, 0xb63333cc3385ff66, |
0x5c636391633ff2c6, 0x1202020802100a04, 0x93aaaa92aa393849, 0xde7171d971afa8e2, |
0xc6c8c807c80ecf8d, 0xd119196419c87d32, 0x3b49493949727092, 0x5fd9d943d9869aaf, |
0x31f2f2eff2c31df9, 0xa8e3e3abe34b48db, 0xb95b5b715be22ab6, 0xbc88881a8834920d, |
0x3e9a9a529aa4c829, 0x0b262698262dbe4c, 0xbf3232c8328dfa64, 0x59b0b0fab0e94a7d, |
0xf2e9e983e91b6acf, 0x770f0f3c0f78331e, 0x33d5d573d5e6a6b7, 0xf480803a8074ba1d, |
0x27bebec2be997c61, 0xebcdcd13cd26de87, 0x893434d034bde468, 0x3248483d487a7590, |
0x54ffffdbffab24e3, 0x8d7a7af57af78ff4, 0x6490907a90f4ea3d, 0x9d5f5f615fc23ebe, |
0x3d202080201da040, 0x0f6868bd6867d5d0, 0xca1a1a681ad07234, 0xb7aeae82ae192c41, |
0x7db4b4eab4c95e75, 0xce54544d549a19a8, 0x7f93937693ece53b, 0x2f222288220daa44, |
0x6364648d6407e9c8, 0x2af1f1e3f1db12ff, 0xcc7373d173bfa2e6, 0x8212124812905a24, |
0x7a40401d403a5d80, 0x4808082008402810, 0x95c3c32bc356e89b, 0xdfecec97ec337bc5, |
0x4ddbdb4bdb9690ab, 0xc0a1a1bea1611f5f, 0x918d8d0e8d1c8307, 0xc83d3df43df5c97a, |
0x5b97976697ccf133, 0x0000000000000000, 0xf9cfcf1bcf36d483, 0x6e2b2bac2b458756, |
0xe17676c57697b3ec, 0xe68282328264b019, 0x28d6d67fd6fea9b1, 0xc31b1b6c1bd87736, |
0x74b5b5eeb5c15b77, 0xbeafaf86af112943, 0x1d6a6ab56a77dfd4, 0xea50505d50ba0da0, |
0x5745450945124c8a, 0x38f3f3ebf3cb18fb, 0xad3030c0309df060, 0xc4efef9bef2b74c3, |
0xda3f3ffc3fe5c37e, 0xc755554955921caa, 0xdba2a2b2a2791059, 0xe9eaea8fea0365c9, |
0x6a656589650fecca, 0x03babad2bab96869, 0x4a2f2fbc2f65935e, 0x8ec0c027c04ee79d, |
0x60dede5fdebe81a1, 0xfc1c1c701ce06c38, 0x46fdfdd3fdbb2ee7, 0x1f4d4d294d52649a, |
0x7692927292e4e039, 0xfa7575c9758fbcea, 0x3606061806301e0c, 0xae8a8a128a249809, |
0x4bb2b2f2b2f94079, 0x85e6e6bfe66359d1, 0x7e0e0e380e70361c, 0xe71f1f7c1ff8633e, |
0x556262956237f7c4, 0x3ad4d477d4eea3b5, 0x81a8a89aa829324d, 0x5296966296c4f431, |
0x62f9f9c3f99b3aef, 0xa3c5c533c566f697, 0x102525942535b14a, 0xab59597959f220b2, |
0xd084842a8454ae15, 0xc57272d572b7a7e4, 0xec3939e439d5dd72, 0x164c4c2d4c5a6198, |
0x945e5e655eca3bbc, 0x9f7878fd78e785f0, 0xe53838e038ddd870, 0x988c8c0a8c148605, |
0x17d1d163d1c6b2bf, 0xe4a5a5aea5410b57, 0xa1e2e2afe2434dd9, 0x4e616199612ff8c2, |
0x42b3b3f6b3f1457b, 0x342121842115a542, 0x089c9c4a9c94d625, 0xee1e1e781ef0663c, |
0x6143431143225286, 0xb1c7c73bc776fc93, 0x4ffcfcd7fcb32be5, 0x2404041004201408, |
0xe351515951b208a2, 0x2599995e99bcc72f, 0x226d6da96d4fc4da, 0x650d0d340d68391a, |
0x79fafacffa8335e9, 0x69dfdf5bdfb684a3, 0xa97e7ee57ed79bfc, 0x19242490243db448, |
0xfe3b3bec3bc5d776, 0x9aabab96ab313d4b, 0xf0cece1fce3ed181, 0x9911114411885522, |
0x838f8f068f0c8903, 0x044e4e254e4a6b9c, 0x66b7b7e6b7d15173, 0xe0ebeb8beb0b60cb, |
0xc13c3cf03cfdcc78, 0xfd81813e817cbf1f, 0x4094946a94d4fe35, 0x1cf7f7fbf7eb0cf3, |
0x18b9b9deb9a1676f, 0x8b13134c13985f26, 0x512c2cb02c7d9c58, 0x05d3d36bd3d6b8bb, |
0x8ce7e7bbe76b5cd3, 0x396e6ea56e57cbdc, 0xaac4c437c46ef395, 0x1b03030c03180f06, |
0xdc565645568a13ac, 0x5e44440d441a4988, 0xa07f7fe17fdf9efe, 0x88a9a99ea921374f, |
0x672a2aa82a4d8254, 0x0abbbbd6bbb16d6b, 0x87c1c123c146e29f, 0xf153535153a202a6, |
0x72dcdc57dcae8ba5, 0x530b0b2c0b582716, 0x019d9d4e9d9cd327, 0x2b6c6cad6c47c1d8, |
0xa43131c43195f562, 0xf37474cd7487b9e8, 0x15f6f6fff6e309f1, 0x4c464605460a438c, |
0xa5acac8aac092645, 0xb589891e893c970f, 0xb414145014a04428, 0xbae1e1a3e15b42df, |
0xa616165816b04e2c, 0xf73a3ae83acdd274, 0x066969b9696fd0d2, 0x4109092409482d12, |
0xd77070dd70a7ade0, 0x6fb6b6e2b6d95471, 0x1ed0d067d0ceb7bd, 0xd6eded93ed3b7ec7, |
0xe2cccc17cc2edb85, 0x68424215422a5784, 0x2c98985a98b4c22d, 0xeda4a4aaa4490e55, |
0x752828a0285d8850, 0x865c5c6d5cda31b8, 0x6bf8f8c7f8933fed, 0xc28686228644a411, |
] |
C2 = [ |
0x30d818186018c078, 0x462623238c2305af, 0x91b8c6c63fc67ef9, 0xcdfbe8e887e8136f, |
0x13cb878726874ca1, 0x6d11b8b8dab8a962, 0x0209010104010805, 0x9e0d4f4f214f426e, |
0x6c9b3636d836adee, 0x51ffa6a6a2a65904, 0xb90cd2d26fd2debd, 0xf70ef5f5f3f5fb06, |
0xf2967979f979ef80, 0xde306f6fa16f5fce, 0x3f6d91917e91fcef, 0xa4f852525552aa07, |
0xc04760609d6027fd, 0x6535bcbccabc8976, 0x2b379b9b569baccd, 0x018a8e8e028e048c, |
0x5bd2a3a3b6a37115, 0x186c0c0c300c603c, 0xf6847b7bf17bff8a, 0x6a803535d435b5e1, |
0x3af51d1d741de869, 0xddb3e0e0a7e05347, 0xb321d7d77bd7f6ac, 0x999cc2c22fc25eed, |
0x5c432e2eb82e6d96, 0x96294b4b314b627a, 0xe15dfefedffea321, 0xaed5575741578216, |
0x2abd15155415a841, 0xeee87777c1779fb6, 0x6e923737dc37a5eb, 0xd79ee5e5b3e57b56, |
0x23139f9f469f8cd9, 0xfd23f0f0e7f0d317, 0x94204a4a354a6a7f, 0xa944dada4fda9e95, |
0xb0a258587d58fa25, 0x8fcfc9c903c906ca, 0x527c2929a429558d, 0x145a0a0a280a5022, |
0x7f50b1b1feb1e14f, 0x5dc9a0a0baa0691a, 0xd6146b6bb16b7fda, 0x17d985852e855cab, |
0x673cbdbdcebd8173, 0xba8f5d5d695dd234, 0x2090101040108050, 0xf507f4f4f7f4f303, |
0x8bddcbcb0bcb16c0, 0x7cd33e3ef83eedc6, 0x0a2d050514052811, 0xce78676781671fe6, |
0xd597e4e4b7e47353, 0x4e0227279c2725bb, 0x8273414119413258, 0x0ba78b8b168b2c9d, |
0x53f6a7a7a6a75101, 0xfab27d7de97dcf94, 0x374995956e95dcfb, 0xad56d8d847d88e9f, |
0xeb70fbfbcbfb8b30, 0xc1cdeeee9fee2371, 0xf8bb7c7ced7cc791, 0xcc716666856617e3, |
0xa77bdddd53dda68e, 0x2eaf17175c17b84b, 0x8e45474701470246, 0x211a9e9e429e84dc, |
0x89d4caca0fca1ec5, 0x5a582d2db42d7599, 0x632ebfbfc6bf9179, 0x0e3f07071c07381b, |
0x47acadad8ead0123, 0xb4b05a5a755aea2f, 0x1bef838336836cb5, 0x66b63333cc3385ff, |
0xc65c636391633ff2, 0x041202020802100a, 0x4993aaaa92aa3938, 0xe2de7171d971afa8, |
0x8dc6c8c807c80ecf, 0x32d119196419c87d, 0x923b494939497270, 0xaf5fd9d943d9869a, |
0xf931f2f2eff2c31d, 0xdba8e3e3abe34b48, 0xb6b95b5b715be22a, 0x0dbc88881a883492, |
0x293e9a9a529aa4c8, 0x4c0b262698262dbe, 0x64bf3232c8328dfa, 0x7d59b0b0fab0e94a, |
0xcff2e9e983e91b6a, 0x1e770f0f3c0f7833, 0xb733d5d573d5e6a6, 0x1df480803a8074ba, |
0x6127bebec2be997c, 0x87ebcdcd13cd26de, 0x68893434d034bde4, 0x903248483d487a75, |
0xe354ffffdbffab24, 0xf48d7a7af57af78f, 0x3d6490907a90f4ea, 0xbe9d5f5f615fc23e, |
0x403d202080201da0, 0xd00f6868bd6867d5, 0x34ca1a1a681ad072, 0x41b7aeae82ae192c, |
0x757db4b4eab4c95e, 0xa8ce54544d549a19, 0x3b7f93937693ece5, 0x442f222288220daa, |
0xc86364648d6407e9, 0xff2af1f1e3f1db12, 0xe6cc7373d173bfa2, 0x248212124812905a, |
0x807a40401d403a5d, 0x1048080820084028, 0x9b95c3c32bc356e8, 0xc5dfecec97ec337b, |
0xab4ddbdb4bdb9690, 0x5fc0a1a1bea1611f, 0x07918d8d0e8d1c83, 0x7ac83d3df43df5c9, |
0x335b97976697ccf1, 0x0000000000000000, 0x83f9cfcf1bcf36d4, 0x566e2b2bac2b4587, |
0xece17676c57697b3, 0x19e68282328264b0, 0xb128d6d67fd6fea9, 0x36c31b1b6c1bd877, |
0x7774b5b5eeb5c15b, 0x43beafaf86af1129, 0xd41d6a6ab56a77df, 0xa0ea50505d50ba0d, |
0x8a5745450945124c, 0xfb38f3f3ebf3cb18, 0x60ad3030c0309df0, 0xc3c4efef9bef2b74, |
0x7eda3f3ffc3fe5c3, 0xaac755554955921c, 0x59dba2a2b2a27910, 0xc9e9eaea8fea0365, |
0xca6a656589650fec, 0x6903babad2bab968, 0x5e4a2f2fbc2f6593, 0x9d8ec0c027c04ee7, |
0xa160dede5fdebe81, 0x38fc1c1c701ce06c, 0xe746fdfdd3fdbb2e, 0x9a1f4d4d294d5264, |
0x397692927292e4e0, 0xeafa7575c9758fbc, 0x0c3606061806301e, 0x09ae8a8a128a2498, |
0x794bb2b2f2b2f940, 0xd185e6e6bfe66359, 0x1c7e0e0e380e7036, 0x3ee71f1f7c1ff863, |
0xc4556262956237f7, 0xb53ad4d477d4eea3, 0x4d81a8a89aa82932, 0x315296966296c4f4, |
0xef62f9f9c3f99b3a, 0x97a3c5c533c566f6, 0x4a102525942535b1, 0xb2ab59597959f220, |
0x15d084842a8454ae, 0xe4c57272d572b7a7, 0x72ec3939e439d5dd, 0x98164c4c2d4c5a61, |
0xbc945e5e655eca3b, 0xf09f7878fd78e785, 0x70e53838e038ddd8, 0x05988c8c0a8c1486, |
0xbf17d1d163d1c6b2, 0x57e4a5a5aea5410b, 0xd9a1e2e2afe2434d, 0xc24e616199612ff8, |
0x7b42b3b3f6b3f145, 0x42342121842115a5, 0x25089c9c4a9c94d6, 0x3cee1e1e781ef066, |
0x8661434311432252, 0x93b1c7c73bc776fc, 0xe54ffcfcd7fcb32b, 0x0824040410042014, |
0xa2e351515951b208, 0x2f2599995e99bcc7, 0xda226d6da96d4fc4, 0x1a650d0d340d6839, |
0xe979fafacffa8335, 0xa369dfdf5bdfb684, 0xfca97e7ee57ed79b, 0x4819242490243db4, |
0x76fe3b3bec3bc5d7, 0x4b9aabab96ab313d, 0x81f0cece1fce3ed1, 0x2299111144118855, |
0x03838f8f068f0c89, 0x9c044e4e254e4a6b, 0x7366b7b7e6b7d151, 0xcbe0ebeb8beb0b60, |
0x78c13c3cf03cfdcc, 0x1ffd81813e817cbf, 0x354094946a94d4fe, 0xf31cf7f7fbf7eb0c, |
0x6f18b9b9deb9a167, 0x268b13134c13985f, 0x58512c2cb02c7d9c, 0xbb05d3d36bd3d6b8, |
0xd38ce7e7bbe76b5c, 0xdc396e6ea56e57cb, 0x95aac4c437c46ef3, 0x061b03030c03180f, |
0xacdc565645568a13, 0x885e44440d441a49, 0xfea07f7fe17fdf9e, 0x4f88a9a99ea92137, |
0x54672a2aa82a4d82, 0x6b0abbbbd6bbb16d, 0x9f87c1c123c146e2, 0xa6f153535153a202, |
0xa572dcdc57dcae8b, 0x16530b0b2c0b5827, 0x27019d9d4e9d9cd3, 0xd82b6c6cad6c47c1, |
0x62a43131c43195f5, 0xe8f37474cd7487b9, 0xf115f6f6fff6e309, 0x8c4c464605460a43, |
0x45a5acac8aac0926, 0x0fb589891e893c97, 0x28b414145014a044, 0xdfbae1e1a3e15b42, |
0x2ca616165816b04e, 0x74f73a3ae83acdd2, 0xd2066969b9696fd0, 0x124109092409482d, |
0xe0d77070dd70a7ad, 0x716fb6b6e2b6d954, 0xbd1ed0d067d0ceb7, 0xc7d6eded93ed3b7e, |
0x85e2cccc17cc2edb, 0x8468424215422a57, 0x2d2c98985a98b4c2, 0x55eda4a4aaa4490e, |
0x50752828a0285d88, 0xb8865c5c6d5cda31, 0xed6bf8f8c7f8933f, 0x11c28686228644a4, |
] |
C3 = [ |
0x7830d818186018c0, 0xaf462623238c2305, 0xf991b8c6c63fc67e, 0x6fcdfbe8e887e813, |
0xa113cb878726874c, 0x626d11b8b8dab8a9, 0x0502090101040108, 0x6e9e0d4f4f214f42, |
0xee6c9b3636d836ad, 0x0451ffa6a6a2a659, 0xbdb90cd2d26fd2de, 0x06f70ef5f5f3f5fb, |
0x80f2967979f979ef, 0xcede306f6fa16f5f, 0xef3f6d91917e91fc, 0x07a4f852525552aa, |
0xfdc04760609d6027, 0x766535bcbccabc89, 0xcd2b379b9b569bac, 0x8c018a8e8e028e04, |
0x155bd2a3a3b6a371, 0x3c186c0c0c300c60, 0x8af6847b7bf17bff, 0xe16a803535d435b5, |
0x693af51d1d741de8, 0x47ddb3e0e0a7e053, 0xacb321d7d77bd7f6, 0xed999cc2c22fc25e, |
0x965c432e2eb82e6d, 0x7a96294b4b314b62, 0x21e15dfefedffea3, 0x16aed55757415782, |
0x412abd15155415a8, 0xb6eee87777c1779f, 0xeb6e923737dc37a5, 0x56d79ee5e5b3e57b, |
0xd923139f9f469f8c, 0x17fd23f0f0e7f0d3, 0x7f94204a4a354a6a, 0x95a944dada4fda9e, |
0x25b0a258587d58fa, 0xca8fcfc9c903c906, 0x8d527c2929a42955, 0x22145a0a0a280a50, |
0x4f7f50b1b1feb1e1, 0x1a5dc9a0a0baa069, 0xdad6146b6bb16b7f, 0xab17d985852e855c, |
0x73673cbdbdcebd81, 0x34ba8f5d5d695dd2, 0x5020901010401080, 0x03f507f4f4f7f4f3, |
0xc08bddcbcb0bcb16, 0xc67cd33e3ef83eed, 0x110a2d0505140528, 0xe6ce78676781671f, |
0x53d597e4e4b7e473, 0xbb4e0227279c2725, 0x5882734141194132, 0x9d0ba78b8b168b2c, |
0x0153f6a7a7a6a751, 0x94fab27d7de97dcf, 0xfb374995956e95dc, 0x9fad56d8d847d88e, |
0x30eb70fbfbcbfb8b, 0x71c1cdeeee9fee23, 0x91f8bb7c7ced7cc7, 0xe3cc716666856617, |
0x8ea77bdddd53dda6, 0x4b2eaf17175c17b8, 0x468e454747014702, 0xdc211a9e9e429e84, |
0xc589d4caca0fca1e, 0x995a582d2db42d75, 0x79632ebfbfc6bf91, 0x1b0e3f07071c0738, |
0x2347acadad8ead01, 0x2fb4b05a5a755aea, 0xb51bef838336836c, 0xff66b63333cc3385, |
0xf2c65c636391633f, 0x0a04120202080210, 0x384993aaaa92aa39, 0xa8e2de7171d971af, |
0xcf8dc6c8c807c80e, 0x7d32d119196419c8, 0x70923b4949394972, 0x9aaf5fd9d943d986, |
0x1df931f2f2eff2c3, 0x48dba8e3e3abe34b, 0x2ab6b95b5b715be2, 0x920dbc88881a8834, |
0xc8293e9a9a529aa4, 0xbe4c0b262698262d, 0xfa64bf3232c8328d, 0x4a7d59b0b0fab0e9, |
0x6acff2e9e983e91b, 0x331e770f0f3c0f78, 0xa6b733d5d573d5e6, 0xba1df480803a8074, |
0x7c6127bebec2be99, 0xde87ebcdcd13cd26, 0xe468893434d034bd, 0x75903248483d487a, |
0x24e354ffffdbffab, 0x8ff48d7a7af57af7, 0xea3d6490907a90f4, 0x3ebe9d5f5f615fc2, |
0xa0403d202080201d, 0xd5d00f6868bd6867, 0x7234ca1a1a681ad0, 0x2c41b7aeae82ae19, |
0x5e757db4b4eab4c9, 0x19a8ce54544d549a, 0xe53b7f93937693ec, 0xaa442f222288220d, |
0xe9c86364648d6407, 0x12ff2af1f1e3f1db, 0xa2e6cc7373d173bf, 0x5a24821212481290, |
0x5d807a40401d403a, 0x2810480808200840, 0xe89b95c3c32bc356, 0x7bc5dfecec97ec33, |
0x90ab4ddbdb4bdb96, 0x1f5fc0a1a1bea161, 0x8307918d8d0e8d1c, 0xc97ac83d3df43df5, |
0xf1335b97976697cc, 0x0000000000000000, 0xd483f9cfcf1bcf36, 0x87566e2b2bac2b45, |
0xb3ece17676c57697, 0xb019e68282328264, 0xa9b128d6d67fd6fe, 0x7736c31b1b6c1bd8, |
0x5b7774b5b5eeb5c1, 0x2943beafaf86af11, 0xdfd41d6a6ab56a77, 0x0da0ea50505d50ba, |
0x4c8a574545094512, 0x18fb38f3f3ebf3cb, 0xf060ad3030c0309d, 0x74c3c4efef9bef2b, |
0xc37eda3f3ffc3fe5, 0x1caac75555495592, 0x1059dba2a2b2a279, 0x65c9e9eaea8fea03, |
0xecca6a656589650f, 0x686903babad2bab9, 0x935e4a2f2fbc2f65, 0xe79d8ec0c027c04e, |
0x81a160dede5fdebe, 0x6c38fc1c1c701ce0, 0x2ee746fdfdd3fdbb, 0x649a1f4d4d294d52, |
0xe0397692927292e4, 0xbceafa7575c9758f, 0x1e0c360606180630, 0x9809ae8a8a128a24, |
0x40794bb2b2f2b2f9, 0x59d185e6e6bfe663, 0x361c7e0e0e380e70, 0x633ee71f1f7c1ff8, |
0xf7c4556262956237, 0xa3b53ad4d477d4ee, 0x324d81a8a89aa829, 0xf4315296966296c4, |
0x3aef62f9f9c3f99b, 0xf697a3c5c533c566, 0xb14a102525942535, 0x20b2ab59597959f2, |
0xae15d084842a8454, 0xa7e4c57272d572b7, 0xdd72ec3939e439d5, 0x6198164c4c2d4c5a, |
0x3bbc945e5e655eca, 0x85f09f7878fd78e7, 0xd870e53838e038dd, 0x8605988c8c0a8c14, |
0xb2bf17d1d163d1c6, 0x0b57e4a5a5aea541, 0x4dd9a1e2e2afe243, 0xf8c24e616199612f, |
0x457b42b3b3f6b3f1, 0xa542342121842115, 0xd625089c9c4a9c94, 0x663cee1e1e781ef0, |
0x5286614343114322, 0xfc93b1c7c73bc776, 0x2be54ffcfcd7fcb3, 0x1408240404100420, |
0x08a2e351515951b2, 0xc72f2599995e99bc, 0xc4da226d6da96d4f, 0x391a650d0d340d68, |
0x35e979fafacffa83, 0x84a369dfdf5bdfb6, 0x9bfca97e7ee57ed7, 0xb44819242490243d, |
0xd776fe3b3bec3bc5, 0x3d4b9aabab96ab31, 0xd181f0cece1fce3e, 0x5522991111441188, |
0x8903838f8f068f0c, 0x6b9c044e4e254e4a, 0x517366b7b7e6b7d1, 0x60cbe0ebeb8beb0b, |
0xcc78c13c3cf03cfd, 0xbf1ffd81813e817c, 0xfe354094946a94d4, 0x0cf31cf7f7fbf7eb, |
0x676f18b9b9deb9a1, 0x5f268b13134c1398, 0x9c58512c2cb02c7d, 0xb8bb05d3d36bd3d6, |
0x5cd38ce7e7bbe76b, 0xcbdc396e6ea56e57, 0xf395aac4c437c46e, 0x0f061b03030c0318, |
0x13acdc565645568a, 0x49885e44440d441a, 0x9efea07f7fe17fdf, 0x374f88a9a99ea921, |
0x8254672a2aa82a4d, 0x6d6b0abbbbd6bbb1, 0xe29f87c1c123c146, 0x02a6f153535153a2, |
0x8ba572dcdc57dcae, 0x2716530b0b2c0b58, 0xd327019d9d4e9d9c, 0xc1d82b6c6cad6c47, |
0xf562a43131c43195, 0xb9e8f37474cd7487, 0x09f115f6f6fff6e3, 0x438c4c464605460a, |
0x2645a5acac8aac09, 0x970fb589891e893c, 0x4428b414145014a0, 0x42dfbae1e1a3e15b, |
0x4e2ca616165816b0, 0xd274f73a3ae83acd, 0xd0d2066969b9696f, 0x2d12410909240948, |
0xade0d77070dd70a7, 0x54716fb6b6e2b6d9, 0xb7bd1ed0d067d0ce, 0x7ec7d6eded93ed3b, |
0xdb85e2cccc17cc2e, 0x578468424215422a, 0xc22d2c98985a98b4, 0x0e55eda4a4aaa449, |
0x8850752828a0285d, 0x31b8865c5c6d5cda, 0x3fed6bf8f8c7f893, 0xa411c28686228644, |
] |
C4 = [ |
0xc07830d818186018, 0x05af462623238c23, 0x7ef991b8c6c63fc6, 0x136fcdfbe8e887e8, |
0x4ca113cb87872687, 0xa9626d11b8b8dab8, 0x0805020901010401, 0x426e9e0d4f4f214f, |
0xadee6c9b3636d836, 0x590451ffa6a6a2a6, 0xdebdb90cd2d26fd2, 0xfb06f70ef5f5f3f5, |
0xef80f2967979f979, 0x5fcede306f6fa16f, 0xfcef3f6d91917e91, 0xaa07a4f852525552, |
0x27fdc04760609d60, 0x89766535bcbccabc, 0xaccd2b379b9b569b, 0x048c018a8e8e028e, |
0x71155bd2a3a3b6a3, 0x603c186c0c0c300c, 0xff8af6847b7bf17b, 0xb5e16a803535d435, |
0xe8693af51d1d741d, 0x5347ddb3e0e0a7e0, 0xf6acb321d7d77bd7, 0x5eed999cc2c22fc2, |
0x6d965c432e2eb82e, 0x627a96294b4b314b, 0xa321e15dfefedffe, 0x8216aed557574157, |
0xa8412abd15155415, 0x9fb6eee87777c177, 0xa5eb6e923737dc37, 0x7b56d79ee5e5b3e5, |
0x8cd923139f9f469f, 0xd317fd23f0f0e7f0, 0x6a7f94204a4a354a, 0x9e95a944dada4fda, |
0xfa25b0a258587d58, 0x06ca8fcfc9c903c9, 0x558d527c2929a429, 0x5022145a0a0a280a, |
0xe14f7f50b1b1feb1, 0x691a5dc9a0a0baa0, 0x7fdad6146b6bb16b, 0x5cab17d985852e85, |
0x8173673cbdbdcebd, 0xd234ba8f5d5d695d, 0x8050209010104010, 0xf303f507f4f4f7f4, |
0x16c08bddcbcb0bcb, 0xedc67cd33e3ef83e, 0x28110a2d05051405, 0x1fe6ce7867678167, |
0x7353d597e4e4b7e4, 0x25bb4e0227279c27, 0x3258827341411941, 0x2c9d0ba78b8b168b, |
0x510153f6a7a7a6a7, 0xcf94fab27d7de97d, 0xdcfb374995956e95, 0x8e9fad56d8d847d8, |
0x8b30eb70fbfbcbfb, 0x2371c1cdeeee9fee, 0xc791f8bb7c7ced7c, 0x17e3cc7166668566, |
0xa68ea77bdddd53dd, 0xb84b2eaf17175c17, 0x02468e4547470147, 0x84dc211a9e9e429e, |
0x1ec589d4caca0fca, 0x75995a582d2db42d, 0x9179632ebfbfc6bf, 0x381b0e3f07071c07, |
0x012347acadad8ead, 0xea2fb4b05a5a755a, 0x6cb51bef83833683, 0x85ff66b63333cc33, |
0x3ff2c65c63639163, 0x100a041202020802, 0x39384993aaaa92aa, 0xafa8e2de7171d971, |
0x0ecf8dc6c8c807c8, 0xc87d32d119196419, 0x7270923b49493949, 0x869aaf5fd9d943d9, |
0xc31df931f2f2eff2, 0x4b48dba8e3e3abe3, 0xe22ab6b95b5b715b, 0x34920dbc88881a88, |
0xa4c8293e9a9a529a, 0x2dbe4c0b26269826, 0x8dfa64bf3232c832, 0xe94a7d59b0b0fab0, |
0x1b6acff2e9e983e9, 0x78331e770f0f3c0f, 0xe6a6b733d5d573d5, 0x74ba1df480803a80, |
0x997c6127bebec2be, 0x26de87ebcdcd13cd, 0xbde468893434d034, 0x7a75903248483d48, |
0xab24e354ffffdbff, 0xf78ff48d7a7af57a, 0xf4ea3d6490907a90, 0xc23ebe9d5f5f615f, |
0x1da0403d20208020, 0x67d5d00f6868bd68, 0xd07234ca1a1a681a, 0x192c41b7aeae82ae, |
0xc95e757db4b4eab4, 0x9a19a8ce54544d54, 0xece53b7f93937693, 0x0daa442f22228822, |
0x07e9c86364648d64, 0xdb12ff2af1f1e3f1, 0xbfa2e6cc7373d173, 0x905a248212124812, |
0x3a5d807a40401d40, 0x4028104808082008, 0x56e89b95c3c32bc3, 0x337bc5dfecec97ec, |
0x9690ab4ddbdb4bdb, 0x611f5fc0a1a1bea1, 0x1c8307918d8d0e8d, 0xf5c97ac83d3df43d, |
0xccf1335b97976697, 0x0000000000000000, 0x36d483f9cfcf1bcf, 0x4587566e2b2bac2b, |
0x97b3ece17676c576, 0x64b019e682823282, 0xfea9b128d6d67fd6, 0xd87736c31b1b6c1b, |
0xc15b7774b5b5eeb5, 0x112943beafaf86af, 0x77dfd41d6a6ab56a, 0xba0da0ea50505d50, |
0x124c8a5745450945, 0xcb18fb38f3f3ebf3, 0x9df060ad3030c030, 0x2b74c3c4efef9bef, |
0xe5c37eda3f3ffc3f, 0x921caac755554955, 0x791059dba2a2b2a2, 0x0365c9e9eaea8fea, |
0x0fecca6a65658965, 0xb9686903babad2ba, 0x65935e4a2f2fbc2f, 0x4ee79d8ec0c027c0, |
0xbe81a160dede5fde, 0xe06c38fc1c1c701c, 0xbb2ee746fdfdd3fd, 0x52649a1f4d4d294d, |
0xe4e0397692927292, 0x8fbceafa7575c975, 0x301e0c3606061806, 0x249809ae8a8a128a, |
0xf940794bb2b2f2b2, 0x6359d185e6e6bfe6, 0x70361c7e0e0e380e, 0xf8633ee71f1f7c1f, |
0x37f7c45562629562, 0xeea3b53ad4d477d4, 0x29324d81a8a89aa8, 0xc4f4315296966296, |
0x9b3aef62f9f9c3f9, 0x66f697a3c5c533c5, 0x35b14a1025259425, 0xf220b2ab59597959, |
0x54ae15d084842a84, 0xb7a7e4c57272d572, 0xd5dd72ec3939e439, 0x5a6198164c4c2d4c, |
0xca3bbc945e5e655e, 0xe785f09f7878fd78, 0xddd870e53838e038, 0x148605988c8c0a8c, |
0xc6b2bf17d1d163d1, 0x410b57e4a5a5aea5, 0x434dd9a1e2e2afe2, 0x2ff8c24e61619961, |
0xf1457b42b3b3f6b3, 0x15a5423421218421, 0x94d625089c9c4a9c, 0xf0663cee1e1e781e, |
0x2252866143431143, 0x76fc93b1c7c73bc7, 0xb32be54ffcfcd7fc, 0x2014082404041004, |
0xb208a2e351515951, 0xbcc72f2599995e99, 0x4fc4da226d6da96d, 0x68391a650d0d340d, |
0x8335e979fafacffa, 0xb684a369dfdf5bdf, 0xd79bfca97e7ee57e, 0x3db4481924249024, |
0xc5d776fe3b3bec3b, 0x313d4b9aabab96ab, 0x3ed181f0cece1fce, 0x8855229911114411, |
0x0c8903838f8f068f, 0x4a6b9c044e4e254e, 0xd1517366b7b7e6b7, 0x0b60cbe0ebeb8beb, |
0xfdcc78c13c3cf03c, 0x7cbf1ffd81813e81, 0xd4fe354094946a94, 0xeb0cf31cf7f7fbf7, |
0xa1676f18b9b9deb9, 0x985f268b13134c13, 0x7d9c58512c2cb02c, 0xd6b8bb05d3d36bd3, |
0x6b5cd38ce7e7bbe7, 0x57cbdc396e6ea56e, 0x6ef395aac4c437c4, 0x180f061b03030c03, |
0x8a13acdc56564556, 0x1a49885e44440d44, 0xdf9efea07f7fe17f, 0x21374f88a9a99ea9, |
0x4d8254672a2aa82a, 0xb16d6b0abbbbd6bb, 0x46e29f87c1c123c1, 0xa202a6f153535153, |
0xae8ba572dcdc57dc, 0x582716530b0b2c0b, 0x9cd327019d9d4e9d, 0x47c1d82b6c6cad6c, |
0x95f562a43131c431, 0x87b9e8f37474cd74, 0xe309f115f6f6fff6, 0x0a438c4c46460546, |
0x092645a5acac8aac, 0x3c970fb589891e89, 0xa04428b414145014, 0x5b42dfbae1e1a3e1, |
0xb04e2ca616165816, 0xcdd274f73a3ae83a, 0x6fd0d2066969b969, 0x482d124109092409, |
0xa7ade0d77070dd70, 0xd954716fb6b6e2b6, 0xceb7bd1ed0d067d0, 0x3b7ec7d6eded93ed, |
0x2edb85e2cccc17cc, 0x2a57846842421542, 0xb4c22d2c98985a98, 0x490e55eda4a4aaa4, |
0x5d8850752828a028, 0xda31b8865c5c6d5c, 0x933fed6bf8f8c7f8, 0x44a411c286862286, |
] |
C5 = [ |
0x18c07830d8181860, 0x2305af462623238c, 0xc67ef991b8c6c63f, 0xe8136fcdfbe8e887, |
0x874ca113cb878726, 0xb8a9626d11b8b8da, 0x0108050209010104, 0x4f426e9e0d4f4f21, |
0x36adee6c9b3636d8, 0xa6590451ffa6a6a2, 0xd2debdb90cd2d26f, 0xf5fb06f70ef5f5f3, |
0x79ef80f2967979f9, 0x6f5fcede306f6fa1, 0x91fcef3f6d91917e, 0x52aa07a4f8525255, |
0x6027fdc04760609d, 0xbc89766535bcbcca, 0x9baccd2b379b9b56, 0x8e048c018a8e8e02, |
0xa371155bd2a3a3b6, 0x0c603c186c0c0c30, 0x7bff8af6847b7bf1, 0x35b5e16a803535d4, |
0x1de8693af51d1d74, 0xe05347ddb3e0e0a7, 0xd7f6acb321d7d77b, 0xc25eed999cc2c22f, |
0x2e6d965c432e2eb8, 0x4b627a96294b4b31, 0xfea321e15dfefedf, 0x578216aed5575741, |
0x15a8412abd151554, 0x779fb6eee87777c1, 0x37a5eb6e923737dc, 0xe57b56d79ee5e5b3, |
0x9f8cd923139f9f46, 0xf0d317fd23f0f0e7, 0x4a6a7f94204a4a35, 0xda9e95a944dada4f, |
0x58fa25b0a258587d, 0xc906ca8fcfc9c903, 0x29558d527c2929a4, 0x0a5022145a0a0a28, |
0xb1e14f7f50b1b1fe, 0xa0691a5dc9a0a0ba, 0x6b7fdad6146b6bb1, 0x855cab17d985852e, |
0xbd8173673cbdbdce, 0x5dd234ba8f5d5d69, 0x1080502090101040, 0xf4f303f507f4f4f7, |
0xcb16c08bddcbcb0b, 0x3eedc67cd33e3ef8, 0x0528110a2d050514, 0x671fe6ce78676781, |
0xe47353d597e4e4b7, 0x2725bb4e0227279c, 0x4132588273414119, 0x8b2c9d0ba78b8b16, |
0xa7510153f6a7a7a6, 0x7dcf94fab27d7de9, 0x95dcfb374995956e, 0xd88e9fad56d8d847, |
0xfb8b30eb70fbfbcb, 0xee2371c1cdeeee9f, 0x7cc791f8bb7c7ced, 0x6617e3cc71666685, |
0xdda68ea77bdddd53, 0x17b84b2eaf17175c, 0x4702468e45474701, 0x9e84dc211a9e9e42, |
0xca1ec589d4caca0f, 0x2d75995a582d2db4, 0xbf9179632ebfbfc6, 0x07381b0e3f07071c, |
0xad012347acadad8e, 0x5aea2fb4b05a5a75, 0x836cb51bef838336, 0x3385ff66b63333cc, |
0x633ff2c65c636391, 0x02100a0412020208, 0xaa39384993aaaa92, 0x71afa8e2de7171d9, |
0xc80ecf8dc6c8c807, 0x19c87d32d1191964, 0x497270923b494939, 0xd9869aaf5fd9d943, |
0xf2c31df931f2f2ef, 0xe34b48dba8e3e3ab, 0x5be22ab6b95b5b71, 0x8834920dbc88881a, |
0x9aa4c8293e9a9a52, 0x262dbe4c0b262698, 0x328dfa64bf3232c8, 0xb0e94a7d59b0b0fa, |
0xe91b6acff2e9e983, 0x0f78331e770f0f3c, 0xd5e6a6b733d5d573, 0x8074ba1df480803a, |
0xbe997c6127bebec2, 0xcd26de87ebcdcd13, 0x34bde468893434d0, 0x487a75903248483d, |
0xffab24e354ffffdb, 0x7af78ff48d7a7af5, 0x90f4ea3d6490907a, 0x5fc23ebe9d5f5f61, |
0x201da0403d202080, 0x6867d5d00f6868bd, 0x1ad07234ca1a1a68, 0xae192c41b7aeae82, |
0xb4c95e757db4b4ea, 0x549a19a8ce54544d, 0x93ece53b7f939376, 0x220daa442f222288, |
0x6407e9c86364648d, 0xf1db12ff2af1f1e3, 0x73bfa2e6cc7373d1, 0x12905a2482121248, |
0x403a5d807a40401d, 0x0840281048080820, 0xc356e89b95c3c32b, 0xec337bc5dfecec97, |
0xdb9690ab4ddbdb4b, 0xa1611f5fc0a1a1be, 0x8d1c8307918d8d0e, 0x3df5c97ac83d3df4, |
0x97ccf1335b979766, 0x0000000000000000, 0xcf36d483f9cfcf1b, 0x2b4587566e2b2bac, |
0x7697b3ece17676c5, 0x8264b019e6828232, 0xd6fea9b128d6d67f, 0x1bd87736c31b1b6c, |
0xb5c15b7774b5b5ee, 0xaf112943beafaf86, 0x6a77dfd41d6a6ab5, 0x50ba0da0ea50505d, |
0x45124c8a57454509, 0xf3cb18fb38f3f3eb, 0x309df060ad3030c0, 0xef2b74c3c4efef9b, |
0x3fe5c37eda3f3ffc, 0x55921caac7555549, 0xa2791059dba2a2b2, 0xea0365c9e9eaea8f, |
0x650fecca6a656589, 0xbab9686903babad2, 0x2f65935e4a2f2fbc, 0xc04ee79d8ec0c027, |
0xdebe81a160dede5f, 0x1ce06c38fc1c1c70, 0xfdbb2ee746fdfdd3, 0x4d52649a1f4d4d29, |
0x92e4e03976929272, 0x758fbceafa7575c9, 0x06301e0c36060618, 0x8a249809ae8a8a12, |
0xb2f940794bb2b2f2, 0xe66359d185e6e6bf, 0x0e70361c7e0e0e38, 0x1ff8633ee71f1f7c, |
0x6237f7c455626295, 0xd4eea3b53ad4d477, 0xa829324d81a8a89a, 0x96c4f43152969662, |
0xf99b3aef62f9f9c3, 0xc566f697a3c5c533, 0x2535b14a10252594, 0x59f220b2ab595979, |
0x8454ae15d084842a, 0x72b7a7e4c57272d5, 0x39d5dd72ec3939e4, 0x4c5a6198164c4c2d, |
0x5eca3bbc945e5e65, 0x78e785f09f7878fd, 0x38ddd870e53838e0, 0x8c148605988c8c0a, |
0xd1c6b2bf17d1d163, 0xa5410b57e4a5a5ae, 0xe2434dd9a1e2e2af, 0x612ff8c24e616199, |
0xb3f1457b42b3b3f6, 0x2115a54234212184, 0x9c94d625089c9c4a, 0x1ef0663cee1e1e78, |
0x4322528661434311, 0xc776fc93b1c7c73b, 0xfcb32be54ffcfcd7, 0x0420140824040410, |
0x51b208a2e3515159, 0x99bcc72f2599995e, 0x6d4fc4da226d6da9, 0x0d68391a650d0d34, |
0xfa8335e979fafacf, 0xdfb684a369dfdf5b, 0x7ed79bfca97e7ee5, 0x243db44819242490, |
0x3bc5d776fe3b3bec, 0xab313d4b9aabab96, 0xce3ed181f0cece1f, 0x1188552299111144, |
0x8f0c8903838f8f06, 0x4e4a6b9c044e4e25, 0xb7d1517366b7b7e6, 0xeb0b60cbe0ebeb8b, |
0x3cfdcc78c13c3cf0, 0x817cbf1ffd81813e, 0x94d4fe354094946a, 0xf7eb0cf31cf7f7fb, |
0xb9a1676f18b9b9de, 0x13985f268b13134c, 0x2c7d9c58512c2cb0, 0xd3d6b8bb05d3d36b, |
0xe76b5cd38ce7e7bb, 0x6e57cbdc396e6ea5, 0xc46ef395aac4c437, 0x03180f061b03030c, |
0x568a13acdc565645, 0x441a49885e44440d, 0x7fdf9efea07f7fe1, 0xa921374f88a9a99e, |
0x2a4d8254672a2aa8, 0xbbb16d6b0abbbbd6, 0xc146e29f87c1c123, 0x53a202a6f1535351, |
0xdcae8ba572dcdc57, 0x0b582716530b0b2c, 0x9d9cd327019d9d4e, 0x6c47c1d82b6c6cad, |
0x3195f562a43131c4, 0x7487b9e8f37474cd, 0xf6e309f115f6f6ff, 0x460a438c4c464605, |
0xac092645a5acac8a, 0x893c970fb589891e, 0x14a04428b4141450, 0xe15b42dfbae1e1a3, |
0x16b04e2ca6161658, 0x3acdd274f73a3ae8, 0x696fd0d2066969b9, 0x09482d1241090924, |
0x70a7ade0d77070dd, 0xb6d954716fb6b6e2, 0xd0ceb7bd1ed0d067, 0xed3b7ec7d6eded93, |
0xcc2edb85e2cccc17, 0x422a578468424215, 0x98b4c22d2c98985a, 0xa4490e55eda4a4aa, |
0x285d8850752828a0, 0x5cda31b8865c5c6d, 0xf8933fed6bf8f8c7, 0x8644a411c2868622, |
] |
C6 = [ |
0x6018c07830d81818, 0x8c2305af46262323, 0x3fc67ef991b8c6c6, 0x87e8136fcdfbe8e8, |
0x26874ca113cb8787, 0xdab8a9626d11b8b8, 0x0401080502090101, 0x214f426e9e0d4f4f, |
0xd836adee6c9b3636, 0xa2a6590451ffa6a6, 0x6fd2debdb90cd2d2, 0xf3f5fb06f70ef5f5, |
0xf979ef80f2967979, 0xa16f5fcede306f6f, 0x7e91fcef3f6d9191, 0x5552aa07a4f85252, |
0x9d6027fdc0476060, 0xcabc89766535bcbc, 0x569baccd2b379b9b, 0x028e048c018a8e8e, |
0xb6a371155bd2a3a3, 0x300c603c186c0c0c, 0xf17bff8af6847b7b, 0xd435b5e16a803535, |
0x741de8693af51d1d, 0xa7e05347ddb3e0e0, 0x7bd7f6acb321d7d7, 0x2fc25eed999cc2c2, |
0xb82e6d965c432e2e, 0x314b627a96294b4b, 0xdffea321e15dfefe, 0x41578216aed55757, |
0x5415a8412abd1515, 0xc1779fb6eee87777, 0xdc37a5eb6e923737, 0xb3e57b56d79ee5e5, |
0x469f8cd923139f9f, 0xe7f0d317fd23f0f0, 0x354a6a7f94204a4a, 0x4fda9e95a944dada, |
0x7d58fa25b0a25858, 0x03c906ca8fcfc9c9, 0xa429558d527c2929, 0x280a5022145a0a0a, |
0xfeb1e14f7f50b1b1, 0xbaa0691a5dc9a0a0, 0xb16b7fdad6146b6b, 0x2e855cab17d98585, |
0xcebd8173673cbdbd, 0x695dd234ba8f5d5d, 0x4010805020901010, 0xf7f4f303f507f4f4, |
0x0bcb16c08bddcbcb, 0xf83eedc67cd33e3e, 0x140528110a2d0505, 0x81671fe6ce786767, |
0xb7e47353d597e4e4, 0x9c2725bb4e022727, 0x1941325882734141, 0x168b2c9d0ba78b8b, |
0xa6a7510153f6a7a7, 0xe97dcf94fab27d7d, 0x6e95dcfb37499595, 0x47d88e9fad56d8d8, |
0xcbfb8b30eb70fbfb, 0x9fee2371c1cdeeee, 0xed7cc791f8bb7c7c, 0x856617e3cc716666, |
0x53dda68ea77bdddd, 0x5c17b84b2eaf1717, 0x014702468e454747, 0x429e84dc211a9e9e, |
0x0fca1ec589d4caca, 0xb42d75995a582d2d, 0xc6bf9179632ebfbf, 0x1c07381b0e3f0707, |
0x8ead012347acadad, 0x755aea2fb4b05a5a, 0x36836cb51bef8383, 0xcc3385ff66b63333, |
0x91633ff2c65c6363, 0x0802100a04120202, 0x92aa39384993aaaa, 0xd971afa8e2de7171, |
0x07c80ecf8dc6c8c8, 0x6419c87d32d11919, 0x39497270923b4949, 0x43d9869aaf5fd9d9, |
0xeff2c31df931f2f2, 0xabe34b48dba8e3e3, 0x715be22ab6b95b5b, 0x1a8834920dbc8888, |
0x529aa4c8293e9a9a, 0x98262dbe4c0b2626, 0xc8328dfa64bf3232, 0xfab0e94a7d59b0b0, |
0x83e91b6acff2e9e9, 0x3c0f78331e770f0f, 0x73d5e6a6b733d5d5, 0x3a8074ba1df48080, |
0xc2be997c6127bebe, 0x13cd26de87ebcdcd, 0xd034bde468893434, 0x3d487a7590324848, |
0xdbffab24e354ffff, 0xf57af78ff48d7a7a, 0x7a90f4ea3d649090, 0x615fc23ebe9d5f5f, |
0x80201da0403d2020, 0xbd6867d5d00f6868, 0x681ad07234ca1a1a, 0x82ae192c41b7aeae, |
0xeab4c95e757db4b4, 0x4d549a19a8ce5454, 0x7693ece53b7f9393, 0x88220daa442f2222, |
0x8d6407e9c8636464, 0xe3f1db12ff2af1f1, 0xd173bfa2e6cc7373, 0x4812905a24821212, |
0x1d403a5d807a4040, 0x2008402810480808, 0x2bc356e89b95c3c3, 0x97ec337bc5dfecec, |
0x4bdb9690ab4ddbdb, 0xbea1611f5fc0a1a1, 0x0e8d1c8307918d8d, 0xf43df5c97ac83d3d, |
0x6697ccf1335b9797, 0x0000000000000000, 0x1bcf36d483f9cfcf, 0xac2b4587566e2b2b, |
0xc57697b3ece17676, 0x328264b019e68282, 0x7fd6fea9b128d6d6, 0x6c1bd87736c31b1b, |
0xeeb5c15b7774b5b5, 0x86af112943beafaf, 0xb56a77dfd41d6a6a, 0x5d50ba0da0ea5050, |
0x0945124c8a574545, 0xebf3cb18fb38f3f3, 0xc0309df060ad3030, 0x9bef2b74c3c4efef, |
0xfc3fe5c37eda3f3f, 0x4955921caac75555, 0xb2a2791059dba2a2, 0x8fea0365c9e9eaea, |
0x89650fecca6a6565, 0xd2bab9686903baba, 0xbc2f65935e4a2f2f, 0x27c04ee79d8ec0c0, |
0x5fdebe81a160dede, 0x701ce06c38fc1c1c, 0xd3fdbb2ee746fdfd, 0x294d52649a1f4d4d, |
0x7292e4e039769292, 0xc9758fbceafa7575, 0x1806301e0c360606, 0x128a249809ae8a8a, |
0xf2b2f940794bb2b2, 0xbfe66359d185e6e6, 0x380e70361c7e0e0e, 0x7c1ff8633ee71f1f, |
0x956237f7c4556262, 0x77d4eea3b53ad4d4, 0x9aa829324d81a8a8, 0x6296c4f431529696, |
0xc3f99b3aef62f9f9, 0x33c566f697a3c5c5, 0x942535b14a102525, 0x7959f220b2ab5959, |
0x2a8454ae15d08484, 0xd572b7a7e4c57272, 0xe439d5dd72ec3939, 0x2d4c5a6198164c4c, |
0x655eca3bbc945e5e, 0xfd78e785f09f7878, 0xe038ddd870e53838, 0x0a8c148605988c8c, |
0x63d1c6b2bf17d1d1, 0xaea5410b57e4a5a5, 0xafe2434dd9a1e2e2, 0x99612ff8c24e6161, |
0xf6b3f1457b42b3b3, 0x842115a542342121, 0x4a9c94d625089c9c, 0x781ef0663cee1e1e, |
0x1143225286614343, 0x3bc776fc93b1c7c7, 0xd7fcb32be54ffcfc, 0x1004201408240404, |
0x5951b208a2e35151, 0x5e99bcc72f259999, 0xa96d4fc4da226d6d, 0x340d68391a650d0d, |
0xcffa8335e979fafa, 0x5bdfb684a369dfdf, 0xe57ed79bfca97e7e, 0x90243db448192424, |
0xec3bc5d776fe3b3b, 0x96ab313d4b9aabab, 0x1fce3ed181f0cece, 0x4411885522991111, |
0x068f0c8903838f8f, 0x254e4a6b9c044e4e, 0xe6b7d1517366b7b7, 0x8beb0b60cbe0ebeb, |
0xf03cfdcc78c13c3c, 0x3e817cbf1ffd8181, 0x6a94d4fe35409494, 0xfbf7eb0cf31cf7f7, |
0xdeb9a1676f18b9b9, 0x4c13985f268b1313, 0xb02c7d9c58512c2c, 0x6bd3d6b8bb05d3d3, |
0xbbe76b5cd38ce7e7, 0xa56e57cbdc396e6e, 0x37c46ef395aac4c4, 0x0c03180f061b0303, |
0x45568a13acdc5656, 0x0d441a49885e4444, 0xe17fdf9efea07f7f, 0x9ea921374f88a9a9, |
0xa82a4d8254672a2a, 0xd6bbb16d6b0abbbb, 0x23c146e29f87c1c1, 0x5153a202a6f15353, |
0x57dcae8ba572dcdc, 0x2c0b582716530b0b, 0x4e9d9cd327019d9d, 0xad6c47c1d82b6c6c, |
0xc43195f562a43131, 0xcd7487b9e8f37474, 0xfff6e309f115f6f6, 0x05460a438c4c4646, |
0x8aac092645a5acac, 0x1e893c970fb58989, 0x5014a04428b41414, 0xa3e15b42dfbae1e1, |
0x5816b04e2ca61616, 0xe83acdd274f73a3a, 0xb9696fd0d2066969, 0x2409482d12410909, |
0xdd70a7ade0d77070, 0xe2b6d954716fb6b6, 0x67d0ceb7bd1ed0d0, 0x93ed3b7ec7d6eded, |
0x17cc2edb85e2cccc, 0x15422a5784684242, 0x5a98b4c22d2c9898, 0xaaa4490e55eda4a4, |
0xa0285d8850752828, 0x6d5cda31b8865c5c, 0xc7f8933fed6bf8f8, 0x228644a411c28686, |
] |
C7 = [ |
0x186018c07830d818, 0x238c2305af462623, 0xc63fc67ef991b8c6, 0xe887e8136fcdfbe8, |
0x8726874ca113cb87, 0xb8dab8a9626d11b8, 0x0104010805020901, 0x4f214f426e9e0d4f, |
0x36d836adee6c9b36, 0xa6a2a6590451ffa6, 0xd26fd2debdb90cd2, 0xf5f3f5fb06f70ef5, |
0x79f979ef80f29679, 0x6fa16f5fcede306f, 0x917e91fcef3f6d91, 0x525552aa07a4f852, |
0x609d6027fdc04760, 0xbccabc89766535bc, 0x9b569baccd2b379b, 0x8e028e048c018a8e, |
0xa3b6a371155bd2a3, 0x0c300c603c186c0c, 0x7bf17bff8af6847b, 0x35d435b5e16a8035, |
0x1d741de8693af51d, 0xe0a7e05347ddb3e0, 0xd77bd7f6acb321d7, 0xc22fc25eed999cc2, |
0x2eb82e6d965c432e, 0x4b314b627a96294b, 0xfedffea321e15dfe, 0x5741578216aed557, |
0x155415a8412abd15, 0x77c1779fb6eee877, 0x37dc37a5eb6e9237, 0xe5b3e57b56d79ee5, |
0x9f469f8cd923139f, 0xf0e7f0d317fd23f0, 0x4a354a6a7f94204a, 0xda4fda9e95a944da, |
0x587d58fa25b0a258, 0xc903c906ca8fcfc9, 0x29a429558d527c29, 0x0a280a5022145a0a, |
0xb1feb1e14f7f50b1, 0xa0baa0691a5dc9a0, 0x6bb16b7fdad6146b, 0x852e855cab17d985, |
0xbdcebd8173673cbd, 0x5d695dd234ba8f5d, 0x1040108050209010, 0xf4f7f4f303f507f4, |
0xcb0bcb16c08bddcb, 0x3ef83eedc67cd33e, 0x05140528110a2d05, 0x6781671fe6ce7867, |
0xe4b7e47353d597e4, 0x279c2725bb4e0227, 0x4119413258827341, 0x8b168b2c9d0ba78b, |
0xa7a6a7510153f6a7, 0x7de97dcf94fab27d, 0x956e95dcfb374995, 0xd847d88e9fad56d8, |
0xfbcbfb8b30eb70fb, 0xee9fee2371c1cdee, 0x7ced7cc791f8bb7c, 0x66856617e3cc7166, |
0xdd53dda68ea77bdd, 0x175c17b84b2eaf17, 0x47014702468e4547, 0x9e429e84dc211a9e, |
0xca0fca1ec589d4ca, 0x2db42d75995a582d, 0xbfc6bf9179632ebf, 0x071c07381b0e3f07, |
0xad8ead012347acad, 0x5a755aea2fb4b05a, 0x8336836cb51bef83, 0x33cc3385ff66b633, |
0x6391633ff2c65c63, 0x020802100a041202, 0xaa92aa39384993aa, 0x71d971afa8e2de71, |
0xc807c80ecf8dc6c8, 0x196419c87d32d119, 0x4939497270923b49, 0xd943d9869aaf5fd9, |
0xf2eff2c31df931f2, 0xe3abe34b48dba8e3, 0x5b715be22ab6b95b, 0x881a8834920dbc88, |
0x9a529aa4c8293e9a, 0x2698262dbe4c0b26, 0x32c8328dfa64bf32, 0xb0fab0e94a7d59b0, |
0xe983e91b6acff2e9, 0x0f3c0f78331e770f, 0xd573d5e6a6b733d5, 0x803a8074ba1df480, |
0xbec2be997c6127be, 0xcd13cd26de87ebcd, 0x34d034bde4688934, 0x483d487a75903248, |
0xffdbffab24e354ff, 0x7af57af78ff48d7a, 0x907a90f4ea3d6490, 0x5f615fc23ebe9d5f, |
0x2080201da0403d20, 0x68bd6867d5d00f68, 0x1a681ad07234ca1a, 0xae82ae192c41b7ae, |
0xb4eab4c95e757db4, 0x544d549a19a8ce54, 0x937693ece53b7f93, 0x2288220daa442f22, |
0x648d6407e9c86364, 0xf1e3f1db12ff2af1, 0x73d173bfa2e6cc73, 0x124812905a248212, |
0x401d403a5d807a40, 0x0820084028104808, 0xc32bc356e89b95c3, 0xec97ec337bc5dfec, |
0xdb4bdb9690ab4ddb, 0xa1bea1611f5fc0a1, 0x8d0e8d1c8307918d, 0x3df43df5c97ac83d, |
0x976697ccf1335b97, 0x0000000000000000, 0xcf1bcf36d483f9cf, 0x2bac2b4587566e2b, |
0x76c57697b3ece176, 0x82328264b019e682, 0xd67fd6fea9b128d6, 0x1b6c1bd87736c31b, |
0xb5eeb5c15b7774b5, 0xaf86af112943beaf, 0x6ab56a77dfd41d6a, 0x505d50ba0da0ea50, |
0x450945124c8a5745, 0xf3ebf3cb18fb38f3, 0x30c0309df060ad30, 0xef9bef2b74c3c4ef, |
0x3ffc3fe5c37eda3f, 0x554955921caac755, 0xa2b2a2791059dba2, 0xea8fea0365c9e9ea, |
0x6589650fecca6a65, 0xbad2bab9686903ba, 0x2fbc2f65935e4a2f, 0xc027c04ee79d8ec0, |
0xde5fdebe81a160de, 0x1c701ce06c38fc1c, 0xfdd3fdbb2ee746fd, 0x4d294d52649a1f4d, |
0x927292e4e0397692, 0x75c9758fbceafa75, 0x061806301e0c3606, 0x8a128a249809ae8a, |
0xb2f2b2f940794bb2, 0xe6bfe66359d185e6, 0x0e380e70361c7e0e, 0x1f7c1ff8633ee71f, |
0x62956237f7c45562, 0xd477d4eea3b53ad4, 0xa89aa829324d81a8, 0x966296c4f4315296, |
0xf9c3f99b3aef62f9, 0xc533c566f697a3c5, 0x25942535b14a1025, 0x597959f220b2ab59, |
0x842a8454ae15d084, 0x72d572b7a7e4c572, 0x39e439d5dd72ec39, 0x4c2d4c5a6198164c, |
0x5e655eca3bbc945e, 0x78fd78e785f09f78, 0x38e038ddd870e538, 0x8c0a8c148605988c, |
0xd163d1c6b2bf17d1, 0xa5aea5410b57e4a5, 0xe2afe2434dd9a1e2, 0x6199612ff8c24e61, |
0xb3f6b3f1457b42b3, 0x21842115a5423421, 0x9c4a9c94d625089c, 0x1e781ef0663cee1e, |
0x4311432252866143, 0xc73bc776fc93b1c7, 0xfcd7fcb32be54ffc, 0x0410042014082404, |
0x515951b208a2e351, 0x995e99bcc72f2599, 0x6da96d4fc4da226d, 0x0d340d68391a650d, |
0xfacffa8335e979fa, 0xdf5bdfb684a369df, 0x7ee57ed79bfca97e, 0x2490243db4481924, |
0x3bec3bc5d776fe3b, 0xab96ab313d4b9aab, 0xce1fce3ed181f0ce, 0x1144118855229911, |
0x8f068f0c8903838f, 0x4e254e4a6b9c044e, 0xb7e6b7d1517366b7, 0xeb8beb0b60cbe0eb, |
0x3cf03cfdcc78c13c, 0x813e817cbf1ffd81, 0x946a94d4fe354094, 0xf7fbf7eb0cf31cf7, |
0xb9deb9a1676f18b9, 0x134c13985f268b13, 0x2cb02c7d9c58512c, 0xd36bd3d6b8bb05d3, |
0xe7bbe76b5cd38ce7, 0x6ea56e57cbdc396e, 0xc437c46ef395aac4, 0x030c03180f061b03, |
0x5645568a13acdc56, 0x440d441a49885e44, 0x7fe17fdf9efea07f, 0xa99ea921374f88a9, |
0x2aa82a4d8254672a, 0xbbd6bbb16d6b0abb, 0xc123c146e29f87c1, 0x535153a202a6f153, |
0xdc57dcae8ba572dc, 0x0b2c0b582716530b, 0x9d4e9d9cd327019d, 0x6cad6c47c1d82b6c, |
0x31c43195f562a431, 0x74cd7487b9e8f374, 0xf6fff6e309f115f6, 0x4605460a438c4c46, |
0xac8aac092645a5ac, 0x891e893c970fb589, 0x145014a04428b414, 0xe1a3e15b42dfbae1, |
0x165816b04e2ca616, 0x3ae83acdd274f73a, 0x69b9696fd0d20669, 0x092409482d124109, |
0x70dd70a7ade0d770, 0xb6e2b6d954716fb6, 0xd067d0ceb7bd1ed0, 0xed93ed3b7ec7d6ed, |
0xcc17cc2edb85e2cc, 0x4215422a57846842, 0x985a98b4c22d2c98, 0xa4aaa4490e55eda4, |
0x28a0285d88507528, 0x5c6d5cda31b8865c, 0xf8c7f8933fed6bf8, 0x86228644a411c286, |
] |
rc = [ |
0x0000000000000000, |
0x1823c6e887b8014f, |
0x36a6d2f5796f9152, |
0x60bc9b8ea30c7b35, |
0x1de0d7c22e4bfe57, |
0x157737e59ff04ada, |
0x58c9290ab1a06b85, |
0xbd5d10f4cb3e0567, |
0xe427418ba77d95d8, |
0xfbee7c66dd17479e, |
0xca2dbf07ad5a8333 |
] |
DIGESTBYTES = 64 |
class WhirlpoolStruct: |
def __init__(self): |
self.bitLength = [0]*32 |
self.buffer = [0]*64 |
self.bufferBits = 0 |
self.bufferPos = 0 |
self.hash = [0]*8 |
def WhirlpoolInit(ctx): |
ctx = WhirlpoolStruct() |
return |
def WhirlpoolAdd(source, sourceBits, ctx): |
source = [ord(s)&0xff for s in source] |
carry = 0 |
value = sourceBits |
i = 31 |
while i >= 0 and value != 0: |
carry += ctx.bitLength[i] + ((value % 0x100000000) & 0xff) |
ctx.bitLength[i] = carry % 0x100 |
carry >>= 8 |
value >>= 8 |
i -= 1 |
bufferBits = ctx.bufferBits |
bufferPos = ctx.bufferPos |
sourcePos = 0 |
sourceGap = (8 - (sourceBits & 7)) & 7 |
bufferRem = ctx.bufferBits & 7 |
buffr = ctx.buffer |
while sourceBits > 8: |
b = ((source[sourcePos] << sourceGap) & 0xff) | ((source[sourcePos + 1] & 0xff) >> (8 - sourceGap)) |
buffr[bufferPos] |= (b >> bufferRem) % 0x100 |
bufferPos += 1 |
bufferBits += 8 - bufferRem |
if bufferBits == 512: |
processBuffer(ctx) |
bufferBits = 0 |
bufferPos = 0 |
buffr[bufferPos] = b << (8 - bufferRem) |
bufferBits += bufferRem |
sourceBits -= 8 |
sourcePos += 1 |
b = (source[sourcePos] << sourceGap) & 0xff |
buffr[bufferPos] |= b >> bufferRem |
if bufferRem + sourceBits < 8: |
bufferBits += sourceBits |
else: |
bufferPos += 1 |
bufferBits += 8 - bufferRem |
sourceBits -= 8 - bufferRem |
if bufferBits == 512: |
processBuffer(ctx) |
bufferBits = 0 |
bufferPos = 0 |
buffr[bufferPos] = b << (8 - bufferRem) |
bufferBits += sourceBits |
ctx.bufferBits = bufferBits |
ctx.bufferPos = bufferPos |
def WhirlpoolFinalize(ctx): |
bufferPos = ctx.bufferPos |
ctx.buffer[bufferPos] |= 0x80 >> (ctx.bufferBits & 7) |
bufferPos += 1 |
if bufferPos > 32: |
if bufferPos < 64: |
for i in xrange(64 - bufferPos): |
ctx.buffer[bufferPos+i] = 0 |
processBuffer(ctx) |
bufferPos = 0 |
if bufferPos < 32: |
for i in xrange(32 - bufferPos): |
ctx.buffer[bufferPos+i] = 0 |
bufferPos = 32 |
for i in xrange(32): |
ctx.buffer[32+i] = ctx.bitLength[i] |
processBuffer(ctx) |
digest = '' |
for i in xrange(8): |
digest += chr((ctx.hash[i] >> 56) % 0x100) |
digest += chr((ctx.hash[i] >> 48) % 0x100) |
digest += chr((ctx.hash[i] >> 40) % 0x100) |
digest += chr((ctx.hash[i] >> 32) % 0x100) |
digest += chr((ctx.hash[i] >> 24) % 0x100) |
digest += chr((ctx.hash[i] >> 16) % 0x100) |
digest += chr((ctx.hash[i] >> 8) % 0x100) |
digest += chr((ctx.hash[i]) % 0x100) |
ctx.bufferPos = bufferPos |
return digest |
def CDo(buf, a0, a1, a2, a3, a4, a5, a6, a7): |
return C0[((buf[a0] >> 56) % 0x100000000) & 0xff] ^ \ |
C1[((buf[a1] >> 48) % 0x100000000) & 0xff] ^ \ |
C2[((buf[a2] >> 40) % 0x100000000) & 0xff] ^ \ |
C3[((buf[a3] >> 32) % 0x100000000) & 0xff] ^ \ |
C4[((buf[a4] >> 24) % 0x100000000) & 0xff] ^ \ |
C5[((buf[a5] >> 16) % 0x100000000) & 0xff] ^ \ |
C6[((buf[a6] >> 8) % 0x100000000) & 0xff] ^ \ |
C7[((buf[a7] >> 0) % 0x100000000) & 0xff] |
def processBuffer(ctx): |
i, r = 0, 0 |
K = [0]*8 |
block = [0]*8 |
state = [0]*8 |
L = [0]*8 |
buffr = ctx.buffer |
buf_cnt = 0 |
for i in xrange(8): |
block[i] = ((buffr[buf_cnt+0] & 0xff) << 56) ^ \ |
((buffr[buf_cnt+1] & 0xff) << 48) ^ \ |
((buffr[buf_cnt+2] & 0xff) << 40) ^ \ |
((buffr[buf_cnt+3] & 0xff) << 32) ^ \ |
((buffr[buf_cnt+4] & 0xff) << 24) ^ \ |
((buffr[buf_cnt+5] & 0xff) << 16) ^ \ |
((buffr[buf_cnt+6] & 0xff) << 8) ^ \ |
((buffr[buf_cnt+7] & 0xff) << 0) |
buf_cnt += 8 |
for i in xrange(8): |
K[i] = ctx.hash[i] |
state[i] = block[i] ^ K[i] |
for r in xrange(1, R+1): |
L[0] = CDo(K, 0, 7, 6, 5, 4, 3, 2, 1) ^ rc[r] |
L[1] = CDo(K, 1, 0, 7, 6, 5, 4, 3, 2) |
L[2] = CDo(K, 2, 1, 0, 7, 6, 5, 4, 3) |
L[3] = CDo(K, 3, 2, 1, 0, 7, 6, 5, 4) |
L[4] = CDo(K, 4, 3, 2, 1, 0, 7, 6, 5) |
L[5] = CDo(K, 5, 4, 3, 2, 1, 0, 7, 6) |
L[6] = CDo(K, 6, 5, 4, 3, 2, 1, 0, 7) |
L[7] = CDo(K, 7, 6, 5, 4, 3, 2, 1, 0) |
for i in xrange(8): |
K[i] = L[i] |
L[0] = CDo(state, 0, 7, 6, 5, 4, 3, 2, 1) ^ K[0] |
L[1] = CDo(state, 1, 0, 7, 6, 5, 4, 3, 2) ^ K[1] |
L[2] = CDo(state, 2, 1, 0, 7, 6, 5, 4, 3) ^ K[2] |
L[3] = CDo(state, 3, 2, 1, 0, 7, 6, 5, 4) ^ K[3] |
L[4] = CDo(state, 4, 3, 2, 1, 0, 7, 6, 5) ^ K[4] |
L[5] = CDo(state, 5, 4, 3, 2, 1, 0, 7, 6) ^ K[5] |
L[6] = CDo(state, 6, 5, 4, 3, 2, 1, 0, 7) ^ K[6] |
L[7] = CDo(state, 7, 6, 5, 4, 3, 2, 1, 0) ^ K[7] |
for i in xrange(8): |
state[i] = L[i] |
# apply the Miyaguchi-Preneel compression function |
for i in xrange(8): |
ctx.hash[i] ^= state[i] ^ block[i] |
return |
# |
# Tests. |
# |
assert Whirlpool('The quick brown fox jumps over the lazy dog').hexdigest() == \ |
'b97de512e91e3828b40d2b0fdce9ceb3c4a71f9bea8d88e75c4fa854df36725fd2b52eb6544edcacd6f8beddfea403cb55ae31f03ad62a5ef54e42ee82c3fb35' |
assert Whirlpool('The quick brown fox jumps over the lazy eog').hexdigest() == \ |
'c27ba124205f72e6847f3e19834f925cc666d0974167af915bb462420ed40cc50900d85a1f923219d832357750492d5c143011a76988344c2635e69d06f2d38c' |
assert Whirlpool('').hexdigest() == \ |
'19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3' |
/relevation/ext/python-cryptoplus/src/CryptoPlus/__init__.py |
---|
0,0 → 1,9 |
from pkg_resources import parse_version |
import Crypto |
__all__ = ["Cipher","PublicKey","Util","Protocol","Hash","testvectors","SelfTest"] |
if parse_version(Crypto.__version__) > parse_version("2.0.1"): |
__all__.append("Random") |
#del parse_version |
#del Crypto |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Protocol.py |
---|
0,0 → 1,10 |
"""Imports Crypto Protocol |
Now you can do: |
>>> from CryptoPlus.Protocol import * |
OR: |
>>> from CryptoPlus.Protocol import XXX |
but not: |
>>> import CryptoPlus.Protocol.XXX |
""" |
from Crypto.Protocol import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_HMAC.py |
---|
0,0 → 1,194 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/HMAC.py: Self-test for the HMAC module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.HMAC""" |
__revision__ = "$Id$" |
from common import dict # For compatibility with Python 2.1 and 2.2 |
# This is a list of (key, data, results, description) tuples. |
test_data = [ |
## Test vectors from RFC 2202 ## |
# Test that the default hashmod is MD5 |
('0b' * 16, |
'4869205468657265', |
dict(default='9294727a3638bb1c13f48ef8158bfc9d'), |
'default-is-MD5'), |
# Test case 1 (MD5) |
('0b' * 16, |
'4869205468657265', |
dict(MD5='9294727a3638bb1c13f48ef8158bfc9d'), |
'RFC 2202 #1-MD5 (HMAC-MD5)'), |
# Test case 1 (SHA1) |
('0b' * 20, |
'4869205468657265', |
dict(SHA1='b617318655057264e28bc0b6fb378c8ef146be00'), |
'RFC 2202 #1-SHA1 (HMAC-SHA1)'), |
# Test case 2 |
('4a656665', |
'7768617420646f2079612077616e7420666f72206e6f7468696e673f', |
dict(MD5='750c783e6ab0b503eaa86e310a5db738', |
SHA1='effcdf6ae5eb2fa2d27416d5f184df9c259a7c79'), |
'RFC 2202 #2 (HMAC-MD5/SHA1)'), |
# Test case 3 (MD5) |
('aa' * 16, |
'dd' * 50, |
dict(MD5='56be34521d144c88dbb8c733f0e8b3f6'), |
'RFC 2202 #3-MD5 (HMAC-MD5)'), |
# Test case 3 (SHA1) |
('aa' * 20, |
'dd' * 50, |
dict(SHA1='125d7342b9ac11cd91a39af48aa17b4f63f175d3'), |
'RFC 2202 #3-SHA1 (HMAC-SHA1)'), |
# Test case 4 |
('0102030405060708090a0b0c0d0e0f10111213141516171819', |
'cd' * 50, |
dict(MD5='697eaf0aca3a3aea3a75164746ffaa79', |
SHA1='4c9007f4026250c6bc8414f9bf50c86c2d7235da'), |
'RFC 2202 #4 (HMAC-MD5/SHA1)'), |
# Test case 5 (MD5) |
('0c' * 16, |
'546573742057697468205472756e636174696f6e', |
dict(MD5='56461ef2342edc00f9bab995690efd4c'), |
'RFC 2202 #5-MD5 (HMAC-MD5)'), |
# Test case 5 (SHA1) |
# NB: We do not implement hash truncation, so we only test the full hash here. |
('0c' * 20, |
'546573742057697468205472756e636174696f6e', |
dict(SHA1='4c1a03424b55e07fe7f27be1d58bb9324a9a5a04'), |
'RFC 2202 #5-SHA1 (HMAC-SHA1)'), |
# Test case 6 |
('aa' * 80, |
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a' |
+ '65204b6579202d2048617368204b6579204669727374', |
dict(MD5='6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd', |
SHA1='aa4ae5e15272d00e95705637ce8a3b55ed402112'), |
'RFC 2202 #6 (HMAC-MD5/SHA1)'), |
# Test case 7 |
('aa' * 80, |
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a' |
+ '65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d' |
+ '53697a652044617461', |
dict(MD5='6f630fad67cda0ee1fb1f562db3aa53e', |
SHA1='e8e99d0f45237d786d6bbaa7965c7808bbff1a91'), |
'RFC 2202 #7 (HMAC-MD5/SHA1)'), |
## Test vectors from RFC 4231 ## |
# 4.2. Test Case 1 |
('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', |
'4869205468657265', |
dict(SHA256=''' |
b0344c61d8db38535ca8afceaf0bf12b |
881dc200c9833da726e9376c2e32cff7 |
'''), |
'RFC 4231 #1 (HMAC-SHA256)'), |
# 4.3. Test Case 2 - Test with a key shorter than the length of the HMAC |
# output. |
('4a656665', |
'7768617420646f2079612077616e7420666f72206e6f7468696e673f', |
dict(SHA256=''' |
5bdcc146bf60754e6a042426089575c7 |
5a003f089d2739839dec58b964ec3843 |
'''), |
'RFC 4231 #2 (HMAC-SHA256)'), |
# 4.4. Test Case 3 - Test with a combined length of key and data that is |
# larger than 64 bytes (= block-size of SHA-224 and SHA-256). |
('aa' * 20, |
'dd' * 50, |
dict(SHA256=''' |
773ea91e36800e46854db8ebd09181a7 |
2959098b3ef8c122d9635514ced565fe |
'''), |
'RFC 4231 #3 (HMAC-SHA256)'), |
# 4.5. Test Case 4 - Test with a combined length of key and data that is |
# larger than 64 bytes (= block-size of SHA-224 and SHA-256). |
('0102030405060708090a0b0c0d0e0f10111213141516171819', |
'cd' * 50, |
dict(SHA256=''' |
82558a389a443c0ea4cc819899f2083a |
85f0faa3e578f8077a2e3ff46729665b |
'''), |
'RFC 4231 #4 (HMAC-SHA256)'), |
# 4.6. Test Case 5 - Test with a truncation of output to 128 bits. |
# |
# Not included because we do not implement hash truncation. |
# |
# 4.7. Test Case 6 - Test with a key larger than 128 bytes (= block-size of |
# SHA-384 and SHA-512). |
('aa' * 131, |
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a' |
+ '65204b6579202d2048617368204b6579204669727374', |
dict(SHA256=''' |
60e431591ee0b67f0d8a26aacbf5b77f |
8e0bc6213728c5140546040f0ee37f54 |
'''), |
'RFC 4231 #6 (HMAC-SHA256)'), |
# 4.8. Test Case 7 - Test with a key and data that is larger than 128 bytes |
# (= block-size of SHA-384 and SHA-512). |
('aa' * 131, |
'5468697320697320612074657374207573696e672061206c6172676572207468' |
+ '616e20626c6f636b2d73697a65206b657920616e642061206c61726765722074' |
+ '68616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565' |
+ '647320746f20626520686173686564206265666f7265206265696e6720757365' |
+ '642062792074686520484d414320616c676f726974686d2e', |
dict(SHA256=''' |
9b09ffa71b942fcb27635fbcd5b0e944 |
bfdc63644f0713938a7f51535c3a35e2 |
'''), |
'RFC 4231 #7 (HMAC-SHA256)'), |
] |
def get_tests(): |
from CryptoPlus.Hash import HMAC, MD5, SHA as SHA1, SHA256 |
from common import make_mac_tests |
hashmods = dict(MD5=MD5, SHA1=SHA1, SHA256=SHA256, default=None) |
return make_mac_tests(HMAC, "HMAC", test_data, hashmods) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_SHA256.py |
---|
0,0 → 1,65 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/SHA256.py: Self-test for the SHA-256 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHA256LL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.SHA256""" |
__revision__ = "$Id$" |
# Test vectors from FIPS PUB 180-2 |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# FIPS PUB 180-2, B.1 - "One-Block Message" |
('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', |
'abc'), |
# FIPS PUB 180-2, B.2 - "Multi-Block Message" |
('248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1', |
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'), |
# FIPS PUB 180-2, B.3 - "Long Message" |
# ('cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0', |
# 'a' * 10**6, |
# '"a" * 10**6'), |
# Test for an old PyCryptoPlus bug. |
('f7fd017a3c721ce7ff03f3552c0813adcc48b7f33f07e5e2ba71e23ea393d103', |
'This message is precisely 55 bytes long, to test a bug.', |
'Length = 55 (mod 64)'), |
] |
def get_tests(): |
from CryptoPlus.Hash import SHA256 |
from common import make_hash_tests |
return make_hash_tests(SHA256, "SHA256", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/common.py |
---|
0,0 → 1,145 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/common.py: Common code for CryptoPlus.SelfTest.Hash |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-testing for PyCryptoPlus hash modules""" |
__revision__ = "$Id$" |
import sys |
import unittest |
import binascii |
import string |
# For compatibility with Python 2.1 and Python 2.2 |
if sys.hexversion < 0x02030000: |
# Python 2.1 doesn't have a dict() function |
# Python 2.2 dict() function raises TypeError if you do dict(MD5='blah') |
def dict(**kwargs): |
return kwargs.copy() |
else: |
dict = __builtins__['dict'] |
class HashSelfTest(unittest.TestCase): |
def __init__(self, hashmod, description, expected, input): |
unittest.TestCase.__init__(self) |
self.hashmod = hashmod |
self.expected = expected |
self.input = input |
self.description = description |
def shortDescription(self): |
return self.description |
def runTest(self): |
h = self.hashmod.new() |
h.update(self.input) |
out1 = binascii.b2a_hex(h.digest()) |
out2 = h.hexdigest() |
h = self.hashmod.new(self.input) |
out3 = h.hexdigest() |
out4 = binascii.b2a_hex(h.digest()) |
self.assertEqual(self.expected, out1) |
self.assertEqual(self.expected, out2) |
self.assertEqual(self.expected, out3) |
self.assertEqual(self.expected, out4) |
class MACSelfTest(unittest.TestCase): |
def __init__(self, hashmod, description, expected_dict, input, key, hashmods): |
unittest.TestCase.__init__(self) |
self.hashmod = hashmod |
self.expected_dict = expected_dict |
self.input = input |
self.key = key |
self.hashmods = hashmods |
self.description = description |
def shortDescription(self): |
return self.description |
def runTest(self): |
for hashname in self.expected_dict.keys(): |
hashmod = self.hashmods[hashname] |
key = binascii.a2b_hex(self.key) |
data = binascii.a2b_hex(self.input) |
# Strip whitespace from the expected string (which should be in lowercase-hex) |
expected = self.expected_dict[hashname] |
for ch in string.whitespace: |
expected = expected.replace(ch, "") |
h = self.hashmod.new(key, digestmod=hashmod) |
h.update(data) |
out1 = binascii.b2a_hex(h.digest()) |
out2 = h.hexdigest() |
h = self.hashmod.new(key, data, hashmod) |
out3 = h.hexdigest() |
out4 = binascii.b2a_hex(h.digest()) |
# Test .copy() |
h2 = h.copy() |
h.update("blah blah blah") # Corrupt the original hash object |
out5 = binascii.b2a_hex(h2.digest()) # The copied hash object should return the correct result |
self.assertEqual(expected, out1) |
self.assertEqual(expected, out2) |
self.assertEqual(expected, out3) |
self.assertEqual(expected, out4) |
self.assertEqual(expected, out5) |
def make_hash_tests(module, module_name, test_data): |
tests = [] |
for i in range(len(test_data)): |
row = test_data[i] |
if len(row) < 3: |
(expected, input) = row |
description = repr(input) |
else: |
(expected, input, description) = row |
name = "%s #%d: %s" % (module_name, i+1, description) |
tests.append(HashSelfTest(module, name, expected, input)) |
return tests |
def make_mac_tests(module, module_name, test_data, hashmods): |
tests = [] |
for i in range(len(test_data)): |
row = test_data[i] |
(key, data, results, description) = row |
name = "%s #%d: %s" % (module_name, i+1, description) |
tests.append(MACSelfTest(module, name, results, data, key, hashmods)) |
return tests |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_SHA.py |
---|
0,0 → 1,64 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/SHA.py: Self-test for the SHA-1 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.SHA""" |
__revision__ = "$Id$" |
# Test vectors from various sources |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# FIPS PUB 180-2, A.1 - "One-Block Message" |
('a9993e364706816aba3e25717850c26c9cd0d89d', 'abc'), |
# FIPS PUB 180-2, A.2 - "Multi-Block Message" |
('84983e441c3bd26ebaae4aa1f95129e5e54670f1', |
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'), |
# FIPS PUB 180-2, A.3 - "Long Message" |
# ('34aa973cd4c4daa4f61eeb2bdbad27316534016f', |
# 'a' * 10**6, |
# '"a" * 10**6'), |
# RFC 3174: Section 7.3, "TEST4" (multiple of 512 bits) |
('dea356a2cddd90c7a7ecedc5ebb563934f460452', |
"01234567" * 80, |
'"01234567" * 80'), |
] |
def get_tests(): |
from CryptoPlus.Hash import SHA |
from common import make_hash_tests |
return make_hash_tests(SHA, "SHA", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/__init__.py |
---|
0,0 → 1,49 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/__init__.py: Self-test for hash modules |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for hash modules""" |
__revision__ = "$Id$" |
def get_tests(): |
tests = [] |
import test_HMAC; tests += test_HMAC.get_tests() |
import test_MD2; tests += test_MD2.get_tests() |
import test_MD4; tests += test_MD4.get_tests() |
import test_MD5; tests += test_MD5.get_tests() |
import test_RIPEMD; tests += test_RIPEMD.get_tests() |
import test_SHA; tests += test_SHA.get_tests() |
import test_SHA256; tests += test_SHA256.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_RIPEMD.py |
---|
0,0 → 1,73 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/test_RIPEMD.py: Self-test for the RIPEMD-160 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
#"""Self-test suite for CryptoPlus.Hash.RIPEMD""" |
__revision__ = "$Id$" |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# Test vectors downloaded 2008-09-12 from |
# http://homes.esat.kuleuven.be/~bosselae/ripemd160.html |
('9c1185a5c5e9fc54612808977ee8f548b2258d31', '', "'' (empty string)"), |
('0bdc9d2d256b3ee9daae347be6f4dc835a467ffe', 'a'), |
('8eb208f7e05d987a9b044a8e98c6b087f15a0bfc', 'abc'), |
('5d0689ef49d2fae572b881b123a85ffa21595f36', 'message digest'), |
('f71c27109c692c1b56bbdceb5b9d2865b3708dbc', |
'abcdefghijklmnopqrstuvwxyz', |
'a-z'), |
('12a053384a9c0c88e405a06c27dcf49ada62eb2b', |
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', |
'abcdbcd...pnopq'), |
('b0e20b6e3116640286ed3a87a5713079b21f5189', |
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', |
'A-Z, a-z, 0-9'), |
('9b752e45573d4b39f4dbd3323cab82bf63326bfb', |
'1234567890' * 8, |
"'1234567890' * 8"), |
('52783243c1697bdbe16d37f97f68f08325dc1528', |
'a' * 10**6, |
'"a" * 10**6'), |
] |
def get_tests(): |
from CryptoPlus.Hash import RIPEMD |
from common import make_hash_tests |
return make_hash_tests(RIPEMD, "RIPEMD", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD2.py |
---|
0,0 → 1,64 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/MD2.py: Self-test for the MD2 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.MD2""" |
__revision__ = "$Id$" |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# Test vectors from RFC 1319 |
('8350e5a3e24c153df2275c9f80692773', '', "'' (empty string)"), |
('32ec01ec4a6dac72c0ab96fb34c0b5d1', 'a'), |
('da853b0d3f88d99b30283a69e6ded6bb', 'abc'), |
('ab4f496bfb2a530b219ff33031fe06b0', 'message digest'), |
('4e8ddff3650292ab5a4108c3aa47940b', 'abcdefghijklmnopqrstuvwxyz', |
'a-z'), |
('da33def2a42df13975352846c30338cd', |
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', |
'A-Z, a-z, 0-9'), |
('d5976f79d83d3a0dc9806c3c66f3efd8', |
'1234567890123456789012345678901234567890123456' |
+ '7890123456789012345678901234567890', |
"'1234567890' * 8"), |
] |
def get_tests(): |
from CryptoPlus.Hash import MD2 |
from common import make_hash_tests |
return make_hash_tests(MD2, "MD2", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD4.py |
---|
0,0 → 1,64 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/MD4.py: Self-test for the MD4 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.MD4""" |
__revision__ = "$Id$" |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# Test vectors from RFC 1320 |
('31d6cfe0d16ae931b73c59d7e0c089c0', '', "'' (empty string)"), |
('bde52cb31de33e46245e05fbdbd6fb24', 'a'), |
('a448017aaf21d8525fc10ae87aa6729d', 'abc'), |
('d9130a8164549fe818874806e1c7014b', 'message digest'), |
('d79e1c308aa5bbcdeea8ed63df412da9', 'abcdefghijklmnopqrstuvwxyz', |
'a-z'), |
('043f8582f241db351ce627e153e7f0e4', |
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', |
'A-Z, a-z, 0-9'), |
('e33b4ddc9c38f2199c3e7b164fcc0536', |
'1234567890123456789012345678901234567890123456' |
+ '7890123456789012345678901234567890', |
"'1234567890' * 8"), |
] |
def get_tests(): |
from CryptoPlus.Hash import MD4 |
from common import make_hash_tests |
return make_hash_tests(MD4, "MD4", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD5.py |
---|
0,0 → 1,64 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/MD5.py: Self-test for the MD5 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Hash.MD5""" |
__revision__ = "$Id$" |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# Test vectors from RFC 1321 |
('d41d8cd98f00b204e9800998ecf8427e', '', "'' (empty string)"), |
('0cc175b9c0f1b6a831c399e269772661', 'a'), |
('900150983cd24fb0d6963f7d28e17f72', 'abc'), |
('f96b697d7cb7938d525a2f31aaf161d0', 'message digest'), |
('c3fcd3d76192e4007dfb496cca67e13b', 'abcdefghijklmnopqrstuvwxyz', |
'a-z'), |
('d174ab98d277d9f5a5611c2c9f419d9f', |
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', |
'A-Z, a-z, 0-9'), |
('57edf4a22be3c955ac49da2e2107b67a', |
'1234567890123456789012345678901234567890123456' |
+ '7890123456789012345678901234567890', |
"'1234567890' * 8"), |
] |
def get_tests(): |
from CryptoPlus.Hash import MD5 |
from common import make_hash_tests |
return make_hash_tests(MD5, "MD5", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/..new |
---|
--- python-cryptoplus/src/CryptoPlus/SelfTest/st_common.py (nonexistent) |
+++ python-cryptoplus/src/CryptoPlus/SelfTest/st_common.py (revision 182) |
@@ -0,0 +1,62 @@ |
+# -*- coding: utf-8 -*- |
+# |
+# SelfTest/st_common.py: Common functions for SelfTest modules |
+# |
+# ======================================================================= |
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining |
+# a copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, |
+# distribute, sublicense, and/or sell copies of the Software, and to |
+# permit persons to whom the Software is furnished to do so. |
+# |
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+# ======================================================================= |
+# |
+ |
+"""Common functions for SelfTest modules""" |
+ |
+__revision__ = "$Id$" |
+ |
+import unittest |
+import string |
+import binascii |
+ |
+class _list_testloader(unittest.TestLoader): |
+ suiteClass = list |
+ |
+def list_test_cases(class_): |
+ """Return a list of TestCase instances given a TestCase class |
+ |
+ This is useful when you have defined test* methods on your TestCase class. |
+ """ |
+ return _list_testloader().loadTestsFromTestCase(class_) |
+ |
+def strip_whitespace(s): |
+ """Remove whitespace from a string""" |
+ table = string.maketrans(string.whitespace, " " * len(string.whitespace)) |
+ s = s.translate(table).replace(" ", "") |
+ return s |
+ |
+def a2b_hex(s): |
+ """Convert hexadecimal to binary, ignoring whitespace""" |
+ return binascii.a2b_hex(strip_whitespace(s)) |
+ |
+def b2a_hex(s): |
+ """Convert binary to hexadecimal""" |
+ # For completeness |
+ return binascii.b2a_hex(s) |
+ |
+# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/__init__.py |
---|
0,0 → 1,90 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/__init__.py: Self-test for PyCryptoPlus |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self tests |
These tests should perform quickly and can ideally be used every time an |
application runs. |
""" |
__revision__ = "$Id$" |
#import st_common |
#__all__ = ["st_common"] |
import sys |
import unittest |
import StringIO |
class SelfTestError(Exception): |
def __init__(self, message, result): |
Exception.__init__(self, message, result) |
self.message = message |
self.result = result |
def run(module=None, verbosity=0, stream=None, **kwargs): |
"""Execute self-tests. |
This raises SelfTestError if any test is unsuccessful. |
You may optionally pass in a sub-module of SelfTest if you only want to |
perform some of the tests. For example, the following would test only the |
hash modules: |
CryptoPlus.SelfTest.run(CryptoPlus.SelfTest.Hash) |
""" |
suite = unittest.TestSuite() |
if module is None: |
suite.addTests(get_tests()) |
else: |
suite.addTests(module.get_tests()) |
if stream is None: |
kwargs['stream'] = StringIO.StringIO() |
runner = unittest.TextTestRunner(verbosity=verbosity, **kwargs) |
result = runner.run(suite) |
if not result.wasSuccessful(): |
if stream is None: |
sys.stderr.write(stream.getvalue()) |
raise SelfTestError("Self-test failed", result) |
return result |
def get_tests(): |
tests = [] |
import Cipher; tests += Cipher.get_tests() |
import Hash; tests += Hash.get_tests() |
import PublicKey; tests += PublicKey.get_tests() |
# import Random; tests += Random.get_tests() |
# import Util; tests += Util.get_tests() |
return tests |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/PublicKey/test_RSA.py |
---|
0,0 → 1,351 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/PublicKey/test_self.rsa.py: Self-test for the RSA primitive |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.PublicKey.RSA""" |
__revision__ = "$Id$" |
from CryptoPlus.Util.python_compat import * |
import unittest |
from CryptoPlus.SelfTest.st_common import list_test_cases, a2b_hex, b2a_hex |
class RSATest(unittest.TestCase): |
# Test vectors from "RSA-OAEP and RSA-PSS test vectors (.zip file)" |
# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip |
# See RSADSI's PKCS#1 page at |
# http://www.rsa.com/rsalabs/node.asp?id=2125 |
# from oaep-int.txt |
# TODO: PyCryptoPlus treats the message as starting *after* the leading "00" |
# TODO: That behaviour should probably be changed in the future. |
plaintext = """ |
eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2 |
ca 82 31 0b 26 dc d8 7d 5c 68 f1 ee a8 f5 52 67 |
c3 1b 2e 8b b4 25 1f 84 d7 e0 b2 c0 46 26 f5 af |
f9 3e dc fb 25 c9 c2 b3 ff 8a e1 0e 83 9a 2d db |
4c dc fe 4f f4 77 28 b4 a1 b7 c1 36 2b aa d2 9a |
b4 8d 28 69 d5 02 41 21 43 58 11 59 1b e3 92 f9 |
82 fb 3e 87 d0 95 ae b4 04 48 db 97 2f 3a c1 4f |
7b c2 75 19 52 81 ce 32 d2 f1 b7 6d 4d 35 3e 2d |
""" |
ciphertext = """ |
12 53 e0 4d c0 a5 39 7b b4 4a 7a b8 7e 9b f2 a0 |
39 a3 3d 1e 99 6f c8 2a 94 cc d3 00 74 c9 5d f7 |
63 72 20 17 06 9e 52 68 da 5d 1c 0b 4f 87 2c f6 |
53 c1 1d f8 23 14 a6 79 68 df ea e2 8d ef 04 bb |
6d 84 b1 c3 1d 65 4a 19 70 e5 78 3b d6 eb 96 a0 |
24 c2 ca 2f 4a 90 fe 9f 2e f5 c9 c1 40 e5 bb 48 |
da 95 36 ad 87 00 c8 4f c9 13 0a de a7 4e 55 8d |
51 a7 4d df 85 d8 b5 0d e9 68 38 d6 06 3e 09 55 |
""" |
modulus = """ |
bb f8 2f 09 06 82 ce 9c 23 38 ac 2b 9d a8 71 f7 |
36 8d 07 ee d4 10 43 a4 40 d6 b6 f0 74 54 f5 1f |
b8 df ba af 03 5c 02 ab 61 ea 48 ce eb 6f cd 48 |
76 ed 52 0d 60 e1 ec 46 19 71 9d 8a 5b 8b 80 7f |
af b8 e0 a3 df c7 37 72 3e e6 b4 b7 d9 3a 25 84 |
ee 6a 64 9d 06 09 53 74 88 34 b2 45 45 98 39 4e |
e0 aa b1 2d 7b 61 a5 1f 52 7a 9a 41 f6 c1 68 7f |
e2 53 72 98 ca 2a 8f 59 46 f8 e5 fd 09 1d bd cb |
""" |
e = 0x11L # public exponent |
prime_factor = """ |
c9 7f b1 f0 27 f4 53 f6 34 12 33 ea aa d1 d9 35 |
3f 6c 42 d0 88 66 b1 d0 5a 0f 20 35 02 8b 9d 86 |
98 40 b4 16 66 b4 2e 92 ea 0d a3 b4 32 04 b5 cf |
ce 33 52 52 4d 04 16 a5 a4 41 e7 00 af 46 15 03 |
""" |
legacy_interface_only = 0 # Set to 1 to test the original RSA module |
def setUp(self): |
global RSA, Random, bytes_to_long |
from CryptoPlus.PublicKey import RSA |
from CryptoPlus import Random |
from CryptoPlus.Util.number import bytes_to_long, inverse |
self.n = bytes_to_long(a2b_hex(self.modulus)) |
self.p = bytes_to_long(a2b_hex(self.prime_factor)) |
# Compute q, d, and u from n, e, and p |
self.q = self.n / self.p |
self.d = inverse(self.e, (self.p-1)*(self.q-1)) |
self.u = inverse(self.p, self.q) # u = e**-1 (mod q) |
self.rsa = RSA |
def test_generate_1arg(self): |
"""RSA (default implementation) generated key (1 argument)""" |
rsaObj = self.rsa.generate(1024) |
self._check_private_key(rsaObj) |
self._exercise_primitive(rsaObj) |
pub = rsaObj.publickey() |
self._check_public_key(pub) |
self._exercise_public_primitive(rsaObj) |
def test_generate_2arg(self): |
"""RSA (default implementation) generated key (2 arguments)""" |
rsaObj = self.rsa.generate(1024, Random.new().read) |
self._check_private_key(rsaObj) |
self._exercise_primitive(rsaObj) |
pub = rsaObj.publickey() |
self._check_public_key(pub) |
self._exercise_public_primitive(rsaObj) |
def test_construct_2tuple(self): |
"""RSA (default implementation) constructed key (2-tuple)""" |
pub = self.rsa.construct((self.n, self.e)) |
self._check_public_key(pub) |
self._check_encryption(pub) |
def test_construct_3tuple(self): |
"""RSA (default implementation) constructed key (3-tuple)""" |
rsaObj = self.rsa.construct((self.n, self.e, self.d)) |
self._check_encryption(rsaObj) |
self._check_decryption(rsaObj) |
def test_construct_4tuple(self): |
"""RSA (default implementation) constructed key (4-tuple)""" |
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p)) |
self._check_encryption(rsaObj) |
self._check_decryption(rsaObj) |
def test_construct_5tuple(self): |
"""RSA (default implementation) constructed key (5-tuple)""" |
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p, self.q)) |
self._check_encryption(rsaObj) |
self._check_decryption(rsaObj) |
def test_construct_6tuple(self): |
"""RSA (default implementation) constructed key (6-tuple)""" |
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p, self.q, self.u)) |
self._check_private_key(rsaObj) |
self._check_encryption(rsaObj) |
self._check_decryption(rsaObj) |
def _check_private_key(self, rsaObj): |
# Check capabilities |
self.assertEqual(1, rsaObj.has_private()) |
self.assertEqual(1, rsaObj.can_sign()) |
self.assertEqual(1, rsaObj.can_encrypt()) |
self.assertEqual(1, rsaObj.can_blind()) |
# Check rsaObj.[nedpqu] -> rsaObj.key.[nedpqu] mapping |
self.assertEqual(rsaObj.n, rsaObj.key.n) |
self.assertEqual(rsaObj.e, rsaObj.key.e) |
self.assertEqual(rsaObj.d, rsaObj.key.d) |
self.assertEqual(rsaObj.p, rsaObj.key.p) |
self.assertEqual(rsaObj.q, rsaObj.key.q) |
self.assertEqual(rsaObj.u, rsaObj.key.u) |
# Sanity check key data |
self.assertEqual(1, rsaObj.p < rsaObj.q) # p < q |
self.assertEqual(rsaObj.n, rsaObj.p * rsaObj.q) # n = pq |
self.assertEqual(1, rsaObj.d * rsaObj.e % ((rsaObj.p-1) * (rsaObj.q-1))) # ed = 1 (mod (p-1)(q-1)) |
self.assertEqual(1, rsaObj.p * rsaObj.u % rsaObj.q) # pu = 1 (mod q) |
self.assertEqual(1, rsaObj.p > 1) # p > 1 |
self.assertEqual(1, rsaObj.q > 1) # q > 1 |
self.assertEqual(1, rsaObj.e > 1) # e > 1 |
self.assertEqual(1, rsaObj.d > 1) # d > 1 |
def _check_public_key(self, rsaObj): |
# Check capabilities |
self.assertEqual(0, rsaObj.has_private()) |
self.assertEqual(1, rsaObj.can_sign()) |
self.assertEqual(1, rsaObj.can_encrypt()) |
self.assertEqual(1, rsaObj.can_blind()) |
# Check rsaObj.[ne] -> rsaObj.key.[ne] mapping |
self.assertEqual(rsaObj.n, rsaObj.key.n) |
self.assertEqual(rsaObj.e, rsaObj.key.e) |
# Check that private parameters are all missing |
self.assertEqual(0, hasattr(rsaObj, 'd')) |
self.assertEqual(0, hasattr(rsaObj, 'p')) |
self.assertEqual(0, hasattr(rsaObj, 'q')) |
self.assertEqual(0, hasattr(rsaObj, 'u')) |
self.assertEqual(0, hasattr(rsaObj.key, 'd')) |
self.assertEqual(0, hasattr(rsaObj.key, 'p')) |
self.assertEqual(0, hasattr(rsaObj.key, 'q')) |
self.assertEqual(0, hasattr(rsaObj.key, 'u')) |
# Sanity check key data |
self.assertEqual(1, rsaObj.e > 1) # e > 1 |
def _exercise_primitive(self, rsaObj): |
# Since we're using a randomly-generated key, we can't check the test |
# vector, but we can make sure encryption and decryption are inverse |
# operations. |
ciphertext = a2b_hex(self.ciphertext) |
# Test decryption |
plaintext = rsaObj.decrypt((ciphertext,)) |
# Test encryption (2 arguments) |
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "") |
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext2)) |
# Test encryption (1 argument) |
if not self.legacy_interface_only: |
(new_ciphertext1,) = rsaObj.encrypt(plaintext) |
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext1)) |
# Test blinded decryption |
blinding_factor = Random.new().read(len(ciphertext)-1) |
blinded_ctext = rsaObj.blind(ciphertext, blinding_factor) |
blinded_ptext = rsaObj.decrypt((blinded_ctext,)) |
unblinded_plaintext = rsaObj.unblind(blinded_ptext, blinding_factor) |
self.assertEqual(b2a_hex(plaintext), b2a_hex(unblinded_plaintext)) |
def _exercise_public_primitive(self, rsaObj): |
plaintext = a2b_hex(self.plaintext) |
# Test encryption (2 arguments) |
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "") |
# Test encryption (1 argument) |
if not self.legacy_interface_only: |
(new_ciphertext1,) = rsaObj.encrypt(plaintext) |
self.assertEqual(new_ciphertext2, new_ciphertext1) |
def _check_encryption(self, rsaObj): |
plaintext = a2b_hex(self.plaintext) |
ciphertext = a2b_hex(self.ciphertext) |
# Test encryption (2 arguments) |
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "") |
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext2)) |
# Test encryption (1 argument) |
if not self.legacy_interface_only: |
(new_ciphertext1,) = rsaObj.encrypt(plaintext) |
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext1)) |
def _check_decryption(self, rsaObj): |
plaintext = a2b_hex(self.plaintext) |
ciphertext = a2b_hex(self.ciphertext) |
# Test plain decryption |
new_plaintext = rsaObj.decrypt((ciphertext,)) |
self.assertEqual(b2a_hex(plaintext), b2a_hex(new_plaintext)) |
# Test blinded decryption |
blinding_factor = Random.new().read(len(ciphertext)-1) |
blinded_ctext = rsaObj.blind(ciphertext, blinding_factor) |
blinded_ptext = rsaObj.decrypt((blinded_ctext,)) |
unblinded_plaintext = rsaObj.unblind(blinded_ptext, blinding_factor) |
self.assertEqual(b2a_hex(plaintext), b2a_hex(unblinded_plaintext)) |
class RSAFastMathTest(RSATest): |
def setUp(self): |
RSATest.setUp(self) |
self.rsa = RSA.RSAImplementation(use_fast_math=True) |
def test_generate_1arg(self): |
"""RSA (_fastmath implementation) generated key (1 argument)""" |
RSATest.test_generate_1arg(self) |
def test_generate_2arg(self): |
"""RSA (_fastmath implementation) generated key (2 arguments)""" |
RSATest.test_generate_2arg(self) |
def test_construct_2tuple(self): |
"""RSA (_fastmath implementation) constructed key (2-tuple)""" |
RSATest.test_construct_2tuple(self) |
def test_construct_3tuple(self): |
"""RSA (_fastmath implementation) constructed key (3-tuple)""" |
RSATest.test_construct_3tuple(self) |
def test_construct_4tuple(self): |
"""RSA (_fastmath implementation) constructed key (4-tuple)""" |
RSATest.test_construct_4tuple(self) |
def test_construct_5tuple(self): |
"""RSA (_fastmath implementation) constructed key (5-tuple)""" |
RSATest.test_construct_5tuple(self) |
def test_construct_6tuple(self): |
"""RSA (_fastmath implementation) constructed key (6-tuple)""" |
RSATest.test_construct_6tuple(self) |
class RSASlowMathTest(RSATest): |
def setUp(self): |
RSATest.setUp(self) |
self.rsa = RSA.RSAImplementation(use_fast_math=False) |
def test_generate_1arg(self): |
"""RSA (_slowmath implementation) generated key (1 argument)""" |
RSATest.test_generate_1arg(self) |
def test_generate_2arg(self): |
"""RSA (_slowmath implementation) generated key (2 arguments)""" |
RSATest.test_generate_2arg(self) |
def test_construct_2tuple(self): |
"""RSA (_slowmath implementation) constructed key (2-tuple)""" |
RSATest.test_construct_2tuple(self) |
def test_construct_3tuple(self): |
"""RSA (_slowmath implementation) constructed key (3-tuple)""" |
RSATest.test_construct_3tuple(self) |
def test_construct_4tuple(self): |
"""RSA (_slowmath implementation) constructed key (4-tuple)""" |
RSATest.test_construct_4tuple(self) |
def test_construct_5tuple(self): |
"""RSA (_slowmath implementation) constructed key (5-tuple)""" |
RSATest.test_construct_5tuple(self) |
def test_construct_6tuple(self): |
"""RSA (_slowmath implementation) constructed key (6-tuple)""" |
RSATest.test_construct_6tuple(self) |
def get_tests(): |
tests = [] |
tests += list_test_cases(RSATest) |
try: |
from CryptoPlus.PublicKey import _fastmath |
tests += list_test_cases(RSAFastMathTest) |
except ImportError: |
pass |
tests += list_test_cases(RSASlowMathTest) |
return tests |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/PublicKey/__init__.py |
---|
0,0 → 1,45 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/PublicKey/__init__.py: Self-test for public key crypto |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for public-key crypto""" |
__revision__ = "$Id$" |
import os |
def get_tests(): |
tests = [] |
import test_RSA; tests += test_RSA.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_DES.py |
---|
0,0 → 1,302 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/DES.py: Self-test for the (Single) DES cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.DES""" |
__revision__ = "$Id$" |
from common import dict # For compatibility with Python 2.1 and 2.2 |
# This is a list of (plaintext, ciphertext, key, description) tuples. |
SP800_17_B1_KEY = "01" * 8 |
SP800_17_B2_PT = "00" * 8 |
test_data = [ |
# Test vectors from Appendix A of NIST SP 800-17 |
# "Modes of Operation Validation System (MOVS): Requirements and Procedures" |
# http://csrc.nist.gov/publications/nistpubs/800-17/800-17.pdf |
# Appendix A - "Sample Round Outputs for the DES" |
('0000000000000000', '82dcbafbdeab6602', '10316e028c8f3b4a', |
"NIST SP800-17 A"), |
# Table B.1 - Variable Plaintext Known Answer Test |
('8000000000000000', '95f8a5e5dd31d900', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #0'), |
('4000000000000000', 'dd7f121ca5015619', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #1'), |
('2000000000000000', '2e8653104f3834ea', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #2'), |
('1000000000000000', '4bd388ff6cd81d4f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #3'), |
('0800000000000000', '20b9e767b2fb1456', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #4'), |
('0400000000000000', '55579380d77138ef', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #5'), |
('0200000000000000', '6cc5defaaf04512f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #6'), |
('0100000000000000', '0d9f279ba5d87260', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #7'), |
('0080000000000000', 'd9031b0271bd5a0a', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #8'), |
('0040000000000000', '424250b37c3dd951', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #9'), |
('0020000000000000', 'b8061b7ecd9a21e5', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #10'), |
('0010000000000000', 'f15d0f286b65bd28', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #11'), |
('0008000000000000', 'add0cc8d6e5deba1', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #12'), |
('0004000000000000', 'e6d5f82752ad63d1', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #13'), |
('0002000000000000', 'ecbfe3bd3f591a5e', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #14'), |
('0001000000000000', 'f356834379d165cd', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #15'), |
('0000800000000000', '2b9f982f20037fa9', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #16'), |
('0000400000000000', '889de068a16f0be6', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #17'), |
('0000200000000000', 'e19e275d846a1298', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #18'), |
('0000100000000000', '329a8ed523d71aec', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #19'), |
('0000080000000000', 'e7fce22557d23c97', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #20'), |
('0000040000000000', '12a9f5817ff2d65d', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #21'), |
('0000020000000000', 'a484c3ad38dc9c19', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #22'), |
('0000010000000000', 'fbe00a8a1ef8ad72', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #23'), |
('0000008000000000', '750d079407521363', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #24'), |
('0000004000000000', '64feed9c724c2faf', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #25'), |
('0000002000000000', 'f02b263b328e2b60', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #26'), |
('0000001000000000', '9d64555a9a10b852', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #27'), |
('0000000800000000', 'd106ff0bed5255d7', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #28'), |
('0000000400000000', 'e1652c6b138c64a5', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #29'), |
('0000000200000000', 'e428581186ec8f46', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #30'), |
('0000000100000000', 'aeb5f5ede22d1a36', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #31'), |
('0000000080000000', 'e943d7568aec0c5c', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #32'), |
('0000000040000000', 'df98c8276f54b04b', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #33'), |
('0000000020000000', 'b160e4680f6c696f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #34'), |
('0000000010000000', 'fa0752b07d9c4ab8', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #35'), |
('0000000008000000', 'ca3a2b036dbc8502', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #36'), |
('0000000004000000', '5e0905517bb59bcf', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #37'), |
('0000000002000000', '814eeb3b91d90726', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #38'), |
('0000000001000000', '4d49db1532919c9f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #39'), |
('0000000000800000', '25eb5fc3f8cf0621', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #40'), |
('0000000000400000', 'ab6a20c0620d1c6f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #41'), |
('0000000000200000', '79e90dbc98f92cca', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #42'), |
('0000000000100000', '866ecedd8072bb0e', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #43'), |
('0000000000080000', '8b54536f2f3e64a8', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #44'), |
('0000000000040000', 'ea51d3975595b86b', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #45'), |
('0000000000020000', 'caffc6ac4542de31', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #46'), |
('0000000000010000', '8dd45a2ddf90796c', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #47'), |
('0000000000008000', '1029d55e880ec2d0', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #48'), |
('0000000000004000', '5d86cb23639dbea9', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #49'), |
('0000000000002000', '1d1ca853ae7c0c5f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #50'), |
('0000000000001000', 'ce332329248f3228', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #51'), |
('0000000000000800', '8405d1abe24fb942', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #52'), |
('0000000000000400', 'e643d78090ca4207', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #53'), |
('0000000000000200', '48221b9937748a23', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #54'), |
('0000000000000100', 'dd7c0bbd61fafd54', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #55'), |
('0000000000000080', '2fbc291a570db5c4', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #56'), |
('0000000000000040', 'e07c30d7e4e26e12', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #57'), |
('0000000000000020', '0953e2258e8e90a1', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #58'), |
('0000000000000010', '5b711bc4ceebf2ee', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #59'), |
('0000000000000008', 'cc083f1e6d9e85f6', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #60'), |
('0000000000000004', 'd2fd8867d50d2dfe', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #61'), |
('0000000000000002', '06e7ea22ce92708f', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #62'), |
('0000000000000001', '166b40b44aba4bd6', SP800_17_B1_KEY, |
'NIST SP800-17 B.1 #63'), |
# Table B.2 - Variable Key Known Answer Test |
(SP800_17_B2_PT, '95a8d72813daa94d', '8001010101010101', |
'NIST SP800-17 B.2 #0'), |
(SP800_17_B2_PT, '0eec1487dd8c26d5', '4001010101010101', |
'NIST SP800-17 B.2 #1'), |
(SP800_17_B2_PT, '7ad16ffb79c45926', '2001010101010101', |
'NIST SP800-17 B.2 #2'), |
(SP800_17_B2_PT, 'd3746294ca6a6cf3', '1001010101010101', |
'NIST SP800-17 B.2 #3'), |
(SP800_17_B2_PT, '809f5f873c1fd761', '0801010101010101', |
'NIST SP800-17 B.2 #4'), |
(SP800_17_B2_PT, 'c02faffec989d1fc', '0401010101010101', |
'NIST SP800-17 B.2 #5'), |
(SP800_17_B2_PT, '4615aa1d33e72f10', '0201010101010101', |
'NIST SP800-17 B.2 #6'), |
(SP800_17_B2_PT, '2055123350c00858', '0180010101010101', |
'NIST SP800-17 B.2 #7'), |
(SP800_17_B2_PT, 'df3b99d6577397c8', '0140010101010101', |
'NIST SP800-17 B.2 #8'), |
(SP800_17_B2_PT, '31fe17369b5288c9', '0120010101010101', |
'NIST SP800-17 B.2 #9'), |
(SP800_17_B2_PT, 'dfdd3cc64dae1642', '0110010101010101', |
'NIST SP800-17 B.2 #10'), |
(SP800_17_B2_PT, '178c83ce2b399d94', '0108010101010101', |
'NIST SP800-17 B.2 #11'), |
(SP800_17_B2_PT, '50f636324a9b7f80', '0104010101010101', |
'NIST SP800-17 B.2 #12'), |
(SP800_17_B2_PT, 'a8468ee3bc18f06d', '0102010101010101', |
'NIST SP800-17 B.2 #13'), |
(SP800_17_B2_PT, 'a2dc9e92fd3cde92', '0101800101010101', |
'NIST SP800-17 B.2 #14'), |
(SP800_17_B2_PT, 'cac09f797d031287', '0101400101010101', |
'NIST SP800-17 B.2 #15'), |
(SP800_17_B2_PT, '90ba680b22aeb525', '0101200101010101', |
'NIST SP800-17 B.2 #16'), |
(SP800_17_B2_PT, 'ce7a24f350e280b6', '0101100101010101', |
'NIST SP800-17 B.2 #17'), |
(SP800_17_B2_PT, '882bff0aa01a0b87', '0101080101010101', |
'NIST SP800-17 B.2 #18'), |
(SP800_17_B2_PT, '25610288924511c2', '0101040101010101', |
'NIST SP800-17 B.2 #19'), |
(SP800_17_B2_PT, 'c71516c29c75d170', '0101020101010101', |
'NIST SP800-17 B.2 #20'), |
(SP800_17_B2_PT, '5199c29a52c9f059', '0101018001010101', |
'NIST SP800-17 B.2 #21'), |
(SP800_17_B2_PT, 'c22f0a294a71f29f', '0101014001010101', |
'NIST SP800-17 B.2 #22'), |
(SP800_17_B2_PT, 'ee371483714c02ea', '0101012001010101', |
'NIST SP800-17 B.2 #23'), |
(SP800_17_B2_PT, 'a81fbd448f9e522f', '0101011001010101', |
'NIST SP800-17 B.2 #24'), |
(SP800_17_B2_PT, '4f644c92e192dfed', '0101010801010101', |
'NIST SP800-17 B.2 #25'), |
(SP800_17_B2_PT, '1afa9a66a6df92ae', '0101010401010101', |
'NIST SP800-17 B.2 #26'), |
(SP800_17_B2_PT, 'b3c1cc715cb879d8', '0101010201010101', |
'NIST SP800-17 B.2 #27'), |
(SP800_17_B2_PT, '19d032e64ab0bd8b', '0101010180010101', |
'NIST SP800-17 B.2 #28'), |
(SP800_17_B2_PT, '3cfaa7a7dc8720dc', '0101010140010101', |
'NIST SP800-17 B.2 #29'), |
(SP800_17_B2_PT, 'b7265f7f447ac6f3', '0101010120010101', |
'NIST SP800-17 B.2 #30'), |
(SP800_17_B2_PT, '9db73b3c0d163f54', '0101010110010101', |
'NIST SP800-17 B.2 #31'), |
(SP800_17_B2_PT, '8181b65babf4a975', '0101010108010101', |
'NIST SP800-17 B.2 #32'), |
(SP800_17_B2_PT, '93c9b64042eaa240', '0101010104010101', |
'NIST SP800-17 B.2 #33'), |
(SP800_17_B2_PT, '5570530829705592', '0101010102010101', |
'NIST SP800-17 B.2 #34'), |
(SP800_17_B2_PT, '8638809e878787a0', '0101010101800101', |
'NIST SP800-17 B.2 #35'), |
(SP800_17_B2_PT, '41b9a79af79ac208', '0101010101400101', |
'NIST SP800-17 B.2 #36'), |
(SP800_17_B2_PT, '7a9be42f2009a892', '0101010101200101', |
'NIST SP800-17 B.2 #37'), |
(SP800_17_B2_PT, '29038d56ba6d2745', '0101010101100101', |
'NIST SP800-17 B.2 #38'), |
(SP800_17_B2_PT, '5495c6abf1e5df51', '0101010101080101', |
'NIST SP800-17 B.2 #39'), |
(SP800_17_B2_PT, 'ae13dbd561488933', '0101010101040101', |
'NIST SP800-17 B.2 #40'), |
(SP800_17_B2_PT, '024d1ffa8904e389', '0101010101020101', |
'NIST SP800-17 B.2 #41'), |
(SP800_17_B2_PT, 'd1399712f99bf02e', '0101010101018001', |
'NIST SP800-17 B.2 #42'), |
(SP800_17_B2_PT, '14c1d7c1cffec79e', '0101010101014001', |
'NIST SP800-17 B.2 #43'), |
(SP800_17_B2_PT, '1de5279dae3bed6f', '0101010101012001', |
'NIST SP800-17 B.2 #44'), |
(SP800_17_B2_PT, 'e941a33f85501303', '0101010101011001', |
'NIST SP800-17 B.2 #45'), |
(SP800_17_B2_PT, 'da99dbbc9a03f379', '0101010101010801', |
'NIST SP800-17 B.2 #46'), |
(SP800_17_B2_PT, 'b7fc92f91d8e92e9', '0101010101010401', |
'NIST SP800-17 B.2 #47'), |
(SP800_17_B2_PT, 'ae8e5caa3ca04e85', '0101010101010201', |
'NIST SP800-17 B.2 #48'), |
(SP800_17_B2_PT, '9cc62df43b6eed74', '0101010101010180', |
'NIST SP800-17 B.2 #49'), |
(SP800_17_B2_PT, 'd863dbb5c59a91a0', '0101010101010140', |
'NIST SP800-17 B.2 #50'), |
(SP800_17_B2_PT, 'a1ab2190545b91d7', '0101010101010120', |
'NIST SP800-17 B.2 #51'), |
(SP800_17_B2_PT, '0875041e64c570f7', '0101010101010110', |
'NIST SP800-17 B.2 #52'), |
(SP800_17_B2_PT, '5a594528bebef1cc', '0101010101010108', |
'NIST SP800-17 B.2 #53'), |
(SP800_17_B2_PT, 'fcdb3291de21f0c0', '0101010101010104', |
'NIST SP800-17 B.2 #54'), |
(SP800_17_B2_PT, '869efd7f9f265a09', '0101010101010102', |
'NIST SP800-17 B.2 #55'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import DES |
from common import make_block_tests |
return make_block_tests(DES, "DES", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_Blowfish.py |
---|
0,0 → 1,116 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/test_Blowfish.py: Self-test for the Blowfish cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.Blowfish""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
test_data = [ |
# Test vectors from http://www.schneier.com/code/vectors.txt |
('0000000000000000', '4ef997456198dd78', '0000000000000000'), |
('ffffffffffffffff', '51866fd5b85ecb8a', 'ffffffffffffffff'), |
('1000000000000001', '7d856f9a613063f2', '3000000000000000'), |
('1111111111111111', '2466dd878b963c9d', '1111111111111111'), |
('1111111111111111', '61f9c3802281b096', '0123456789abcdef'), |
('0123456789abcdef', '7d0cc630afda1ec7', '1111111111111111'), |
('0000000000000000', '4ef997456198dd78', '0000000000000000'), |
('0123456789abcdef', '0aceab0fc6a0a28d', 'fedcba9876543210'), |
('01a1d6d039776742', '59c68245eb05282b', '7ca110454a1a6e57'), |
('5cd54ca83def57da', 'b1b8cc0b250f09a0', '0131d9619dc1376e'), |
('0248d43806f67172', '1730e5778bea1da4', '07a1133e4a0b2686'), |
('51454b582ddf440a', 'a25e7856cf2651eb', '3849674c2602319e'), |
('42fd443059577fa2', '353882b109ce8f1a', '04b915ba43feb5b6'), |
('059b5e0851cf143a', '48f4d0884c379918', '0113b970fd34f2ce'), |
('0756d8e0774761d2', '432193b78951fc98', '0170f175468fb5e6'), |
('762514b829bf486a', '13f04154d69d1ae5', '43297fad38e373fe'), |
('3bdd119049372802', '2eedda93ffd39c79', '07a7137045da2a16'), |
('26955f6835af609a', 'd887e0393c2da6e3', '04689104c2fd3b2f'), |
('164d5e404f275232', '5f99d04f5b163969', '37d06bb516cb7546'), |
('6b056e18759f5cca', '4a057a3b24d3977b', '1f08260d1ac2465e'), |
('004bd6ef09176062', '452031c1e4fada8e', '584023641aba6176'), |
('480d39006ee762f2', '7555ae39f59b87bd', '025816164629b007'), |
('437540c8698f3cfa', '53c55f9cb49fc019', '49793ebc79b3258f'), |
('072d43a077075292', '7a8e7bfa937e89a3', '4fb05e1515ab73a7'), |
('02fe55778117f12a', 'cf9c5d7a4986adb5', '49e95d6d4ca229bf'), |
('1d9d5c5018f728c2', 'd1abb290658bc778', '018310dc409b26d6'), |
('305532286d6f295a', '55cb3774d13ef201', '1c587f1c13924fef'), |
('0123456789abcdef', 'fa34ec4847b268b2', '0101010101010101'), |
('0123456789abcdef', 'a790795108ea3cae', '1f1f1f1f0e0e0e0e'), |
('0123456789abcdef', 'c39e072d9fac631d', 'e0fee0fef1fef1fe'), |
('ffffffffffffffff', '014933e0cdaff6e4', '0000000000000000'), |
('0000000000000000', 'f21e9a77b71c49bc', 'ffffffffffffffff'), |
('0000000000000000', '245946885754369a', '0123456789abcdef'), |
('ffffffffffffffff', '6b5c5a9c5d9e0a5a', 'fedcba9876543210'), |
('fedcba9876543210', 'f9ad597c49db005e', 'f0'), |
('fedcba9876543210', 'e91d21c1d961a6d6', 'f0e1'), |
('fedcba9876543210', 'e9c2b70a1bc65cf3', 'f0e1d2'), |
('fedcba9876543210', 'be1e639408640f05', 'f0e1d2c3'), |
('fedcba9876543210', 'b39e44481bdb1e6e', 'f0e1d2c3b4'), |
('fedcba9876543210', '9457aa83b1928c0d', 'f0e1d2c3b4a5'), |
('fedcba9876543210', '8bb77032f960629d', 'f0e1d2c3b4a596'), |
('fedcba9876543210', 'e87a244e2cc85e82', 'f0e1d2c3b4a59687'), |
('fedcba9876543210', '15750e7a4f4ec577', 'f0e1d2c3b4a5968778'), |
('fedcba9876543210', '122ba70b3ab64ae0', 'f0e1d2c3b4a596877869'), |
('fedcba9876543210', '3a833c9affc537f6', 'f0e1d2c3b4a5968778695a'), |
('fedcba9876543210', '9409da87a90f6bf2', 'f0e1d2c3b4a5968778695a4b'), |
('fedcba9876543210', '884f80625060b8b4', 'f0e1d2c3b4a5968778695a4b3c'), |
('fedcba9876543210', '1f85031c19e11968', 'f0e1d2c3b4a5968778695a4b3c2d'), |
('fedcba9876543210', '79d9373a714ca34f', 'f0e1d2c3b4a5968778695a4b3c2d1e'), |
('fedcba9876543210', '93142887ee3be15c', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f'), |
('fedcba9876543210', '03429e838ce2d14b', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f00'), |
('fedcba9876543210', 'a4299e27469ff67b', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011'), |
('fedcba9876543210', 'afd5aed1c1bc96a8', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f001122'), |
('fedcba9876543210', '10851c0e3858da9f', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f00112233'), |
('fedcba9876543210', 'e6f51ed79b9db21f', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344'), |
('fedcba9876543210', '64a6e14afd36b46f', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455'), |
('fedcba9876543210', '80c7d7d45a5479ad', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566'), |
('fedcba9876543210', '05044b62fa52d080', |
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344556677'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import Blowfish |
from common import make_block_tests |
return make_block_tests(Blowfish, "Blowfish", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_DES3.py |
---|
0,0 → 1,319 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/DES3.py: Self-test for the Triple-DES cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.DES3""" |
__revision__ = "$Id$" |
from common import dict # For compatibility with Python 2.1 and 2.2 |
# This is a list of (plaintext, ciphertext, key, description) tuples. |
SP800_20_A1_KEY = "01" * 24 |
SP800_20_A2_PT = "00" * 8 |
test_data = [ |
# Test vector from Appendix B of NIST SP 800-67 |
# "Recommendation for the Triple Data Encryption Algorithm (TDEA) Block |
# Cipher" |
# http://csrc.nist.gov/publications/nistpubs/800-67/SP800-67.pdf |
('54686520717566636b2062726f776e20666f78206a756d70', |
'a826fd8ce53b855fcce21c8112256fe668d5c05dd9b6b900', |
'0123456789abcdef23456789abcdef01456789abcdef0123', |
'NIST SP800-67 B.1'), |
# Test vectors "The Multi-block Message Test (MMT) for DES and TDES" |
# http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf |
('326a494cd33fe756', 'b22b8d66de970692', |
'627f460e08104a1043cd265d5840eaf1313edf97df2a8a8c', |
'DESMMT #1', dict(mode='CBC', iv='8e29f75ea77e5475')), |
('84401f78fe6c10876d8ea23094ea5309', '7b1f7c7e3b1c948ebd04a75ffba7d2f5', |
'37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae', |
'DESMMT #2', dict(mode='CBC', iv='3d1de3cc132e3b65')), |
# Test vectors from Appendix A of NIST SP 800-20 |
# "Modes of Operation Validation System for the Triple Data Encryption |
# Algorithm (TMOVS): Requirements and Procedures" |
# http://csrc.nist.gov/publications/nistpubs/800-20/800-20.pdf |
# Table A.1 - Variable Plaintext Known Answer Test |
('8000000000000000', '95f8a5e5dd31d900', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #0'), |
('4000000000000000', 'dd7f121ca5015619', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #1'), |
('2000000000000000', '2e8653104f3834ea', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #2'), |
('1000000000000000', '4bd388ff6cd81d4f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #3'), |
('0800000000000000', '20b9e767b2fb1456', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #4'), |
('0400000000000000', '55579380d77138ef', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #5'), |
('0200000000000000', '6cc5defaaf04512f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #6'), |
('0100000000000000', '0d9f279ba5d87260', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #7'), |
('0080000000000000', 'd9031b0271bd5a0a', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #8'), |
('0040000000000000', '424250b37c3dd951', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #9'), |
('0020000000000000', 'b8061b7ecd9a21e5', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #10'), |
('0010000000000000', 'f15d0f286b65bd28', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #11'), |
('0008000000000000', 'add0cc8d6e5deba1', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #12'), |
('0004000000000000', 'e6d5f82752ad63d1', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #13'), |
('0002000000000000', 'ecbfe3bd3f591a5e', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #14'), |
('0001000000000000', 'f356834379d165cd', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #15'), |
('0000800000000000', '2b9f982f20037fa9', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #16'), |
('0000400000000000', '889de068a16f0be6', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #17'), |
('0000200000000000', 'e19e275d846a1298', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #18'), |
('0000100000000000', '329a8ed523d71aec', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #19'), |
('0000080000000000', 'e7fce22557d23c97', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #20'), |
('0000040000000000', '12a9f5817ff2d65d', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #21'), |
('0000020000000000', 'a484c3ad38dc9c19', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #22'), |
('0000010000000000', 'fbe00a8a1ef8ad72', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #23'), |
('0000008000000000', '750d079407521363', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #24'), |
('0000004000000000', '64feed9c724c2faf', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #25'), |
('0000002000000000', 'f02b263b328e2b60', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #26'), |
('0000001000000000', '9d64555a9a10b852', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #27'), |
('0000000800000000', 'd106ff0bed5255d7', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #28'), |
('0000000400000000', 'e1652c6b138c64a5', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #29'), |
('0000000200000000', 'e428581186ec8f46', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #30'), |
('0000000100000000', 'aeb5f5ede22d1a36', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #31'), |
('0000000080000000', 'e943d7568aec0c5c', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #32'), |
('0000000040000000', 'df98c8276f54b04b', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #33'), |
('0000000020000000', 'b160e4680f6c696f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #34'), |
('0000000010000000', 'fa0752b07d9c4ab8', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #35'), |
('0000000008000000', 'ca3a2b036dbc8502', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #36'), |
('0000000004000000', '5e0905517bb59bcf', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #37'), |
('0000000002000000', '814eeb3b91d90726', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #38'), |
('0000000001000000', '4d49db1532919c9f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #39'), |
('0000000000800000', '25eb5fc3f8cf0621', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #40'), |
('0000000000400000', 'ab6a20c0620d1c6f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #41'), |
('0000000000200000', '79e90dbc98f92cca', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #42'), |
('0000000000100000', '866ecedd8072bb0e', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #43'), |
('0000000000080000', '8b54536f2f3e64a8', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #44'), |
('0000000000040000', 'ea51d3975595b86b', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #45'), |
('0000000000020000', 'caffc6ac4542de31', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #46'), |
('0000000000010000', '8dd45a2ddf90796c', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #47'), |
('0000000000008000', '1029d55e880ec2d0', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #48'), |
('0000000000004000', '5d86cb23639dbea9', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #49'), |
('0000000000002000', '1d1ca853ae7c0c5f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #50'), |
('0000000000001000', 'ce332329248f3228', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #51'), |
('0000000000000800', '8405d1abe24fb942', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #52'), |
('0000000000000400', 'e643d78090ca4207', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #53'), |
('0000000000000200', '48221b9937748a23', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #54'), |
('0000000000000100', 'dd7c0bbd61fafd54', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #55'), |
('0000000000000080', '2fbc291a570db5c4', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #56'), |
('0000000000000040', 'e07c30d7e4e26e12', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #57'), |
('0000000000000020', '0953e2258e8e90a1', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #58'), |
('0000000000000010', '5b711bc4ceebf2ee', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #59'), |
('0000000000000008', 'cc083f1e6d9e85f6', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #60'), |
('0000000000000004', 'd2fd8867d50d2dfe', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #61'), |
('0000000000000002', '06e7ea22ce92708f', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #62'), |
('0000000000000001', '166b40b44aba4bd6', SP800_20_A1_KEY, |
'NIST SP800-20 A.1 #63'), |
# Table A.2 - Variable Key Known Answer Test |
(SP800_20_A2_PT, '95a8d72813daa94d', '8001010101010101'*3, |
'NIST SP800-20 A.2 #0'), |
(SP800_20_A2_PT, '0eec1487dd8c26d5', '4001010101010101'*3, |
'NIST SP800-20 A.2 #1'), |
(SP800_20_A2_PT, '7ad16ffb79c45926', '2001010101010101'*3, |
'NIST SP800-20 A.2 #2'), |
(SP800_20_A2_PT, 'd3746294ca6a6cf3', '1001010101010101'*3, |
'NIST SP800-20 A.2 #3'), |
(SP800_20_A2_PT, '809f5f873c1fd761', '0801010101010101'*3, |
'NIST SP800-20 A.2 #4'), |
(SP800_20_A2_PT, 'c02faffec989d1fc', '0401010101010101'*3, |
'NIST SP800-20 A.2 #5'), |
(SP800_20_A2_PT, '4615aa1d33e72f10', '0201010101010101'*3, |
'NIST SP800-20 A.2 #6'), |
(SP800_20_A2_PT, '2055123350c00858', '0180010101010101'*3, |
'NIST SP800-20 A.2 #7'), |
(SP800_20_A2_PT, 'df3b99d6577397c8', '0140010101010101'*3, |
'NIST SP800-20 A.2 #8'), |
(SP800_20_A2_PT, '31fe17369b5288c9', '0120010101010101'*3, |
'NIST SP800-20 A.2 #9'), |
(SP800_20_A2_PT, 'dfdd3cc64dae1642', '0110010101010101'*3, |
'NIST SP800-20 A.2 #10'), |
(SP800_20_A2_PT, '178c83ce2b399d94', '0108010101010101'*3, |
'NIST SP800-20 A.2 #11'), |
(SP800_20_A2_PT, '50f636324a9b7f80', '0104010101010101'*3, |
'NIST SP800-20 A.2 #12'), |
(SP800_20_A2_PT, 'a8468ee3bc18f06d', '0102010101010101'*3, |
'NIST SP800-20 A.2 #13'), |
(SP800_20_A2_PT, 'a2dc9e92fd3cde92', '0101800101010101'*3, |
'NIST SP800-20 A.2 #14'), |
(SP800_20_A2_PT, 'cac09f797d031287', '0101400101010101'*3, |
'NIST SP800-20 A.2 #15'), |
(SP800_20_A2_PT, '90ba680b22aeb525', '0101200101010101'*3, |
'NIST SP800-20 A.2 #16'), |
(SP800_20_A2_PT, 'ce7a24f350e280b6', '0101100101010101'*3, |
'NIST SP800-20 A.2 #17'), |
(SP800_20_A2_PT, '882bff0aa01a0b87', '0101080101010101'*3, |
'NIST SP800-20 A.2 #18'), |
(SP800_20_A2_PT, '25610288924511c2', '0101040101010101'*3, |
'NIST SP800-20 A.2 #19'), |
(SP800_20_A2_PT, 'c71516c29c75d170', '0101020101010101'*3, |
'NIST SP800-20 A.2 #20'), |
(SP800_20_A2_PT, '5199c29a52c9f059', '0101018001010101'*3, |
'NIST SP800-20 A.2 #21'), |
(SP800_20_A2_PT, 'c22f0a294a71f29f', '0101014001010101'*3, |
'NIST SP800-20 A.2 #22'), |
(SP800_20_A2_PT, 'ee371483714c02ea', '0101012001010101'*3, |
'NIST SP800-20 A.2 #23'), |
(SP800_20_A2_PT, 'a81fbd448f9e522f', '0101011001010101'*3, |
'NIST SP800-20 A.2 #24'), |
(SP800_20_A2_PT, '4f644c92e192dfed', '0101010801010101'*3, |
'NIST SP800-20 A.2 #25'), |
(SP800_20_A2_PT, '1afa9a66a6df92ae', '0101010401010101'*3, |
'NIST SP800-20 A.2 #26'), |
(SP800_20_A2_PT, 'b3c1cc715cb879d8', '0101010201010101'*3, |
'NIST SP800-20 A.2 #27'), |
(SP800_20_A2_PT, '19d032e64ab0bd8b', '0101010180010101'*3, |
'NIST SP800-20 A.2 #28'), |
(SP800_20_A2_PT, '3cfaa7a7dc8720dc', '0101010140010101'*3, |
'NIST SP800-20 A.2 #29'), |
(SP800_20_A2_PT, 'b7265f7f447ac6f3', '0101010120010101'*3, |
'NIST SP800-20 A.2 #30'), |
(SP800_20_A2_PT, '9db73b3c0d163f54', '0101010110010101'*3, |
'NIST SP800-20 A.2 #31'), |
(SP800_20_A2_PT, '8181b65babf4a975', '0101010108010101'*3, |
'NIST SP800-20 A.2 #32'), |
(SP800_20_A2_PT, '93c9b64042eaa240', '0101010104010101'*3, |
'NIST SP800-20 A.2 #33'), |
(SP800_20_A2_PT, '5570530829705592', '0101010102010101'*3, |
'NIST SP800-20 A.2 #34'), |
(SP800_20_A2_PT, '8638809e878787a0', '0101010101800101'*3, |
'NIST SP800-20 A.2 #35'), |
(SP800_20_A2_PT, '41b9a79af79ac208', '0101010101400101'*3, |
'NIST SP800-20 A.2 #36'), |
(SP800_20_A2_PT, '7a9be42f2009a892', '0101010101200101'*3, |
'NIST SP800-20 A.2 #37'), |
(SP800_20_A2_PT, '29038d56ba6d2745', '0101010101100101'*3, |
'NIST SP800-20 A.2 #38'), |
(SP800_20_A2_PT, '5495c6abf1e5df51', '0101010101080101'*3, |
'NIST SP800-20 A.2 #39'), |
(SP800_20_A2_PT, 'ae13dbd561488933', '0101010101040101'*3, |
'NIST SP800-20 A.2 #40'), |
(SP800_20_A2_PT, '024d1ffa8904e389', '0101010101020101'*3, |
'NIST SP800-20 A.2 #41'), |
(SP800_20_A2_PT, 'd1399712f99bf02e', '0101010101018001'*3, |
'NIST SP800-20 A.2 #42'), |
(SP800_20_A2_PT, '14c1d7c1cffec79e', '0101010101014001'*3, |
'NIST SP800-20 A.2 #43'), |
(SP800_20_A2_PT, '1de5279dae3bed6f', '0101010101012001'*3, |
'NIST SP800-20 A.2 #44'), |
(SP800_20_A2_PT, 'e941a33f85501303', '0101010101011001'*3, |
'NIST SP800-20 A.2 #45'), |
(SP800_20_A2_PT, 'da99dbbc9a03f379', '0101010101010801'*3, |
'NIST SP800-20 A.2 #46'), |
(SP800_20_A2_PT, 'b7fc92f91d8e92e9', '0101010101010401'*3, |
'NIST SP800-20 A.2 #47'), |
(SP800_20_A2_PT, 'ae8e5caa3ca04e85', '0101010101010201'*3, |
'NIST SP800-20 A.2 #48'), |
(SP800_20_A2_PT, '9cc62df43b6eed74', '0101010101010180'*3, |
'NIST SP800-20 A.2 #49'), |
(SP800_20_A2_PT, 'd863dbb5c59a91a0', '0101010101010140'*3, |
'NIST SP800-20 A.2 #50'), |
(SP800_20_A2_PT, 'a1ab2190545b91d7', '0101010101010120'*3, |
'NIST SP800-20 A.2 #51'), |
(SP800_20_A2_PT, '0875041e64c570f7', '0101010101010110'*3, |
'NIST SP800-20 A.2 #52'), |
(SP800_20_A2_PT, '5a594528bebef1cc', '0101010101010108'*3, |
'NIST SP800-20 A.2 #53'), |
(SP800_20_A2_PT, 'fcdb3291de21f0c0', '0101010101010104'*3, |
'NIST SP800-20 A.2 #54'), |
(SP800_20_A2_PT, '869efd7f9f265a09', '0101010101010102'*3, |
'NIST SP800-20 A.2 #55'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import DES3 |
from common import make_block_tests |
return make_block_tests(DES3, "DES3", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/__init__.py |
---|
0,0 → 1,53 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/__init__.py: Self-test for cipher modules |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for cipher modules""" |
__revision__ = "$Id$" |
def get_tests(): |
tests = [] |
import test_python_AES; tests += test_python_AES.get_tests() |
import test_AES; tests += test_AES.get_tests() |
import test_ARC2; tests += test_ARC2.get_tests() |
import test_ARC4; tests += test_ARC4.get_tests() |
import test_Blowfish; tests += test_Blowfish.get_tests() |
import test_CAST; tests += test_CAST.get_tests() |
import test_DES3; tests += test_DES3.get_tests() |
import test_DES; tests += test_DES.get_tests() |
import test_IDEA; tests += test_IDEA.get_tests() |
import test_RC5; tests += test_RC5.get_tests() |
import test_XOR; tests += test_XOR.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_IDEA.py |
---|
0,0 → 1,87 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/IDEA.py: Self-test for the IDEA cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.IDEA""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
test_data = [ |
# Test vectors from |
# http://web.archive.org/web/20001006183113/http://www.it-sec.com/pdffiles/testdata.zip |
# Test_Cases_IDEA.txt |
('d53fabbf94ff8b5f', '1d0cb2af1654820a', '729a27ed8f5c3e8baf16560d14c90b43'), |
('848f836780938169', 'd7e0468226d0fc56', '729a27ed8f5c3e8baf16560d14c90b43'), |
('819440ca2065d112', '264a8bba66959075', '729a27ed8f5c3e8baf16560d14c90b43'), |
('6889f5647ab23d59', 'f963468b52f45d4d', '729a27ed8f5c3e8baf16560d14c90b43'), |
('df8c6fc637e3dad1', '29358cc6c83828ae', '729a27ed8f5c3e8baf16560d14c90b43'), |
('ac4856242b121589', '95cd92f44bacb72d', '729a27ed8f5c3e8baf16560d14c90b43'), |
('cbe465f232f9d85c', 'bce24dc8d0961c44', '729a27ed8f5c3e8baf16560d14c90b43'), |
('6c2e3617da2bac35', '1569e0627007b12e', '729a27ed8f5c3e8baf16560d14c90b43'), |
# NewTestCases.txt |
('d53fabbf94ff8b5f', '1320f99bfe052804', '000027ed8f5c3e8baf16560d14c90b43'), |
('848f836780938169', '4821b99f61acebb7', '000027ed8f5c3e8baf16560d14c90b43'), |
('819440ca2065d112', 'c88600093b348575', '000027ed8f5c3e8baf16560d14c90b43'), |
('6889f5647ab23d59', '61d5397046f99637', '000027ed8f5c3e8baf16560d14c90b43'), |
('df8c6fc637e3dad1', 'ef4899b48de5907c', '000027ed8f5c3e8baf16560d14c90b43'), |
('ac4856242b121589', '85c6b232294c2f27', '000027ed8f5c3e8baf16560d14c90b43'), |
('cbe465f232f9d85c', 'b67ac767c0c06a55', '000027ed8f5c3e8baf16560d14c90b43'), |
('6c2e3617da2bac35', 'b2229067630f7045', '000027ed8f5c3e8baf16560d14c90b43'), |
('0000abbf94ff8b5f', '65861be574e1eab6', '729a27ed8f5c3e8baf16560d14c90b43'), |
('848f836780938169', 'd7e0468226d0fc56', '729a27ed8f5c3e8baf16560d14c90b43'), |
('819440ca2065d112', '264a8bba66959075', '729a27ed8f5c3e8baf16560d14c90b43'), |
('6889f5647ab23d59', 'f963468b52f45d4d', '729a27ed8f5c3e8baf16560d14c90b43'), |
('df8c6fc637e3dad1', '29358cc6c83828ae', '729a27ed8f5c3e8baf16560d14c90b43'), |
('ac4856242b121589', '95cd92f44bacb72d', '729a27ed8f5c3e8baf16560d14c90b43'), |
('cbe465f232f9d85c', 'bce24dc8d0961c44', '729a27ed8f5c3e8baf16560d14c90b43'), |
('6c2e3617da2bac35', '1569e0627007b12e', '729a27ed8f5c3e8baf16560d14c90b43'), |
('0000abbf94ff8b5f', 'cbbb2e6c05ee8c89', '000027ed8f5c3e8baf16560d14c90b43'), |
('848f836780938169', '4821b99f61acebb7', '000027ed8f5c3e8baf16560d14c90b43'), |
('819440ca2065d112', 'c88600093b348575', '000027ed8f5c3e8baf16560d14c90b43'), |
('6889f5647ab23d59', '61d5397046f99637', '000027ed8f5c3e8baf16560d14c90b43'), |
('df8c6fc637e3dad1', 'ef4899b48de5907c', '000027ed8f5c3e8baf16560d14c90b43'), |
('ac4856242b121589', '85c6b232294c2f27', '000027ed8f5c3e8baf16560d14c90b43'), |
('cbe465f232f9d85c', 'b67ac767c0c06a55', '000027ed8f5c3e8baf16560d14c90b43'), |
('6c2e3617da2bac35', 'b2229067630f7045', '000027ed8f5c3e8baf16560d14c90b43'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import IDEA |
from common import make_block_tests |
return make_block_tests(IDEA, "IDEA", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_ARC2.py |
---|
0,0 → 1,104 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/ARC2.py: Self-test for the Alleged-RC2 cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.ARC2""" |
__revision__ = "$Id$" |
from common import dict # For compatibility with Python 2.1 and 2.2 |
# This is a list of (plaintext, ciphertext, key[, description[, extra_params]]) tuples. |
test_data = [ |
# Test vectors from RFC 2268 |
# 63-bit effective key length |
('0000000000000000', 'ebb773f993278eff', '0000000000000000', |
'RFC2268-1', dict(effective_keylen=63)), |
# 64-bit effective key length |
('ffffffffffffffff', '278b27e42e2f0d49', 'ffffffffffffffff', |
'RFC2268-2', dict(effective_keylen=64)), |
('1000000000000001', '30649edf9be7d2c2', '3000000000000000', |
'RFC2268-3', dict(effective_keylen=64)), |
('0000000000000000', '61a8a244adacccf0', '88', |
'RFC2268-4', dict(effective_keylen=64)), |
('0000000000000000', '6ccf4308974c267f', '88bca90e90875a', |
'RFC2268-5', dict(effective_keylen=64)), |
('0000000000000000', '1a807d272bbe5db1', '88bca90e90875a7f0f79c384627bafb2', |
'RFC2268-6', dict(effective_keylen=64)), |
# 128-bit effective key length |
('0000000000000000', '2269552ab0f85ca6', '88bca90e90875a7f0f79c384627bafb2', |
"RFC2268-7", dict(effective_keylen=128)), |
('0000000000000000', '5b78d3a43dfff1f1', |
'88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e', |
"RFC2268-8", dict(effective_keylen=129)), |
# Test vectors from PyCryptoPlus 2.0.1's testdata.py |
# 1024-bit effective key length |
('0000000000000000', '624fb3e887419e48', '5068696c6970476c617373', |
'PCTv201-0',dict(effective_keylen=1024)), |
('ffffffffffffffff', '79cadef44c4a5a85', '5068696c6970476c617373', |
'PCTv201-1',dict(effective_keylen=1024)), |
('0001020304050607', '90411525b34e4c2c', '5068696c6970476c617373', |
'PCTv201-2',dict(effective_keylen=1024)), |
('0011223344556677', '078656aaba61cbfb', '5068696c6970476c617373', |
'PCTv201-3',dict(effective_keylen=1024)), |
('0000000000000000', 'd7bcc5dbb4d6e56a', 'ffffffffffffffff', 'PCTv201-4',dict(effective_keylen=1024)), |
('ffffffffffffffff', '7259018ec557b357', 'ffffffffffffffff', 'PCTv201-5',dict(effective_keylen=1024)), |
('0001020304050607', '93d20a497f2ccb62', 'ffffffffffffffff', 'PCTv201-6',dict(effective_keylen=1024)), |
('0011223344556677', 'cb15a7f819c0014d', 'ffffffffffffffff', 'PCTv201-7',dict(effective_keylen=1024)), |
('0000000000000000', '63ac98cdf3843a7a', |
'ffffffffffffffff5065746572477265656e6177617953e5ffe553', |
'PCTv201-8',dict(effective_keylen=1024)), |
('ffffffffffffffff', '3fb49e2fa12371dd', |
'ffffffffffffffff5065746572477265656e6177617953e5ffe553', |
'PCTv201-9',dict(effective_keylen=1024)), |
('0001020304050607', '46414781ab387d5f', |
'ffffffffffffffff5065746572477265656e6177617953e5ffe553', |
'PCTv201-10',dict(effective_keylen=1024)), |
('0011223344556677', 'be09dc81feaca271', |
'ffffffffffffffff5065746572477265656e6177617953e5ffe553', |
'PCTv201-11',dict(effective_keylen=1024)), |
('0000000000000000', 'e64221e608be30ab', '53e5ffe553', 'PCTv201-12',dict(effective_keylen=1024)), |
('ffffffffffffffff', '862bc60fdcd4d9a9', '53e5ffe553', 'PCTv201-13',dict(effective_keylen=1024)), |
('0001020304050607', '6a34da50fa5e47de', '53e5ffe553', 'PCTv201-14',dict(effective_keylen=1024)), |
('0011223344556677', '584644c34503122c', '53e5ffe553', 'PCTv201-15',dict(effective_keylen=1024)), |
] |
def get_tests(): |
from CryptoPlus.Cipher import ARC2 |
from common import make_block_tests |
return make_block_tests(ARC2, "ARC2", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_AES.py |
---|
0,0 → 1,1094 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/AES.py: Self-test for the AES cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.AES""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
test_data = [ |
# FIPS PUB 197 test vectors |
# http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf |
('00112233445566778899aabbccddeeff', '69c4e0d86a7b0430d8cdb78070b4c55a', |
'000102030405060708090a0b0c0d0e0f', 'FIPS 197 C.1 (AES-128)'), |
('00112233445566778899aabbccddeeff', 'dda97ca4864cdfe06eaf70a0ec0d7191', |
'000102030405060708090a0b0c0d0e0f1011121314151617', |
'FIPS 197 C.2 (AES-192)'), |
('00112233445566778899aabbccddeeff', '8ea2b7ca516745bfeafc49904b496089', |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', |
'FIPS 197 C.3 (AES-256)'), |
# Rijndael128 test vectors |
# Downloaded 2008-09-13 from |
# http://www.iaik.tugraz.at/Research/krypto/AES/old/~rijmen/rijndael/testvalues.tar.gz |
# ecb_tbl.txt, KEYSIZE=128 |
('506812a45f08c889b97f5980038b8359', 'd8f532538289ef7d06b506a4fd5be9c9', |
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=1'), |
('5c6d71ca30de8b8b00549984d2ec7d4b', '59ab30f4d4ee6e4ff9907ef65b1fb68c', |
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=2'), |
('53f3f4c64f8616e4e7c56199f48f21f6', 'bf1ed2fcb2af3fd41443b56d85025cb1', |
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=3'), |
('a1eb65a3487165fb0f1c27ff9959f703', '7316632d5c32233edcb0780560eae8b2', |
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=4'), |
('3553ecf0b1739558b08e350a98a39bfa', '408c073e3e2538072b72625e68b8364b', |
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=5'), |
('67429969490b9711ae2b01dc497afde8', 'e1f94dfa776597beaca262f2f6366fea', |
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=6'), |
('93385c1f2aec8bed192f5a8e161dd508', 'f29e986c6a1c27d7b29ffd7ee92b75f1', |
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=7'), |
('b5bf946be19beb8db3983b5f4c6e8ddb', '131c886a57f8c2e713aba6955e2b55b5', |
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=8'), |
('41321ee10e21bd907227c4450ff42324', 'd2ab7662df9b8c740210e5eeb61c199d', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=9'), |
('00a82f59c91c8486d12c0a80124f6089', '14c10554b2859c484cab5869bbe7c470', |
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', 'ecb-tbl-128: I=10'), |
('7ce0fd076754691b4bbd9faf8a1372fe', 'db4d498f0a49cf55445d502c1f9ab3b5', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9da', 'ecb-tbl-128: I=11'), |
('23605a8243d07764541bc5ad355b3129', '6d96fef7d66590a77a77bb2056667f7f', |
'dcdddedfe1e2e3e4e6e7e8e9ebecedee', 'ecb-tbl-128: I=12'), |
('12a8cfa23ea764fd876232b4e842bc44', '316fb68edba736c53e78477bf913725c', |
'f0f1f2f3f5f6f7f8fafbfcfdfe010002', 'ecb-tbl-128: I=13'), |
('bcaf32415e8308b3723e5fdd853ccc80', '6936f2b93af8397fd3a771fc011c8c37', |
'04050607090a0b0c0e0f101113141516', 'ecb-tbl-128: I=14'), |
('89afae685d801ad747ace91fc49adde0', 'f3f92f7a9c59179c1fcc2c2ba0b082cd', |
'2c2d2e2f31323334363738393b3c3d3e', 'ecb-tbl-128: I=15'), |
('f521d07b484357c4a69e76124a634216', '6a95ea659ee3889158e7a9152ff04ebc', |
'40414243454647484a4b4c4d4f505152', 'ecb-tbl-128: I=16'), |
('3e23b3bc065bcc152407e23896d77783', '1959338344e945670678a5d432c90b93', |
'54555657595a5b5c5e5f606163646566', 'ecb-tbl-128: I=17'), |
('79f0fba002be1744670e7e99290d8f52', 'e49bddd2369b83ee66e6c75a1161b394', |
'68696a6b6d6e6f70727374757778797a', 'ecb-tbl-128: I=18'), |
('da23fe9d5bd63e1d72e3dafbe21a6c2a', 'd3388f19057ff704b70784164a74867d', |
'7c7d7e7f81828384868788898b8c8d8e', 'ecb-tbl-128: I=19'), |
('e3f5698ba90b6a022efd7db2c7e6c823', '23aa03e2d5e4cd24f3217e596480d1e1', |
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', 'ecb-tbl-128: I=20'), |
('bdc2691d4f1b73d2700679c3bcbf9c6e', 'c84113d68b666ab2a50a8bdb222e91b9', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2', 'ecb-tbl-128: I=21'), |
('ba74e02093217ee1ba1b42bd5624349a', 'ac02403981cd4340b507963db65cb7b6', |
'08090a0b0d0e0f10121314151718191a', 'ecb-tbl-128: I=22'), |
('b5c593b5851c57fbf8b3f57715e8f680', '8d1299236223359474011f6bf5088414', |
'6c6d6e6f71727374767778797b7c7d7e', 'ecb-tbl-128: I=23'), |
('3da9bd9cec072381788f9387c3bbf4ee', '5a1d6ab8605505f7977e55b9a54d9b90', |
'80818283858687888a8b8c8d8f909192', 'ecb-tbl-128: I=24'), |
('4197f3051121702ab65d316b3c637374', '72e9c2d519cf555e4208805aabe3b258', |
'94959697999a9b9c9e9fa0a1a3a4a5a6', 'ecb-tbl-128: I=25'), |
('9f46c62ec4f6ee3f6e8c62554bc48ab7', 'a8f3e81c4a23a39ef4d745dffe026e80', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9ba', 'ecb-tbl-128: I=26'), |
('0220673fe9e699a4ebc8e0dbeb6979c8', '546f646449d31458f9eb4ef5483aee6c', |
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdce', 'ecb-tbl-128: I=27'), |
('b2b99171337ded9bc8c2c23ff6f18867', '4dbe4bc84ac797c0ee4efb7f1a07401c', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2', 'ecb-tbl-128: I=28'), |
('a7facf4e301e984e5efeefd645b23505', '25e10bfb411bbd4d625ac8795c8ca3b3', |
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', 'ecb-tbl-128: I=29'), |
('f7c762e4a9819160fd7acfb6c4eedcdd', '315637405054ec803614e43def177579', |
'f8f9fafbfdfefe00020304050708090a', 'ecb-tbl-128: I=30'), |
('9b64fc21ea08709f4915436faa70f1be', '60c5bc8a1410247295c6386c59e572a8', |
'0c0d0e0f11121314161718191b1c1d1e', 'ecb-tbl-128: I=31'), |
('52af2c3de07ee6777f55a4abfc100b3f', '01366fc8ca52dfe055d6a00a76471ba6', |
'20212223252627282a2b2c2d2f303132', 'ecb-tbl-128: I=32'), |
('2fca001224386c57aa3f968cbe2c816f', 'ecc46595516ec612449c3f581e7d42ff', |
'34353637393a3b3c3e3f404143444546', 'ecb-tbl-128: I=33'), |
('4149c73658a4a9c564342755ee2c132f', '6b7ffe4c602a154b06ee9c7dab5331c9', |
'48494a4b4d4e4f50525354555758595a', 'ecb-tbl-128: I=34'), |
('af60005a00a1772f7c07a48a923c23d2', '7da234c14039a240dd02dd0fbf84eb67', |
'5c5d5e5f61626364666768696b6c6d6e', 'ecb-tbl-128: I=35'), |
('6fccbc28363759914b6f0280afaf20c6', 'c7dc217d9e3604ffe7e91f080ecd5a3a', |
'70717273757677787a7b7c7d7f808182', 'ecb-tbl-128: I=36'), |
('7d82a43ddf4fefa2fc5947499884d386', '37785901863f5c81260ea41e7580cda5', |
'84858687898a8b8c8e8f909193949596', 'ecb-tbl-128: I=37'), |
('5d5a990eaab9093afe4ce254dfa49ef9', 'a07b9338e92ed105e6ad720fccce9fe4', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aa', 'ecb-tbl-128: I=38'), |
('4cd1e2fd3f4434b553aae453f0ed1a02', 'ae0fb9722418cc21a7da816bbc61322c', |
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbe', 'ecb-tbl-128: I=39'), |
('5a2c9a9641d4299125fa1b9363104b5e', 'c826a193080ff91ffb21f71d3373c877', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2', 'ecb-tbl-128: I=40'), |
('b517fe34c0fa217d341740bfd4fe8dd4', '1181b11b0e494e8d8b0aa6b1d5ac2c48', |
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', 'ecb-tbl-128: I=41'), |
('014baf2278a69d331d5180103643e99a', '6743c3d1519ab4f2cd9a78ab09a511bd', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fa', 'ecb-tbl-128: I=42'), |
('b529bd8164f20d0aa443d4932116841c', 'dc55c076d52bacdf2eefd952946a439d', |
'fcfdfeff01020304060708090b0c0d0e', 'ecb-tbl-128: I=43'), |
('2e596dcbb2f33d4216a1176d5bd1e456', '711b17b590ffc72b5c8e342b601e8003', |
'10111213151617181a1b1c1d1f202122', 'ecb-tbl-128: I=44'), |
('7274a1ea2b7ee2424e9a0e4673689143', '19983bb0950783a537e1339f4aa21c75', |
'24252627292a2b2c2e2f303133343536', 'ecb-tbl-128: I=45'), |
('ae20020bd4f13e9d90140bee3b5d26af', '3ba7762e15554169c0f4fa39164c410c', |
'38393a3b3d3e3f40424344454748494a', 'ecb-tbl-128: I=46'), |
('baac065da7ac26e855e79c8849d75a02', 'a0564c41245afca7af8aa2e0e588ea89', |
'4c4d4e4f51525354565758595b5c5d5e', 'ecb-tbl-128: I=47'), |
('7c917d8d1d45fab9e2540e28832540cc', '5e36a42a2e099f54ae85ecd92e2381ed', |
'60616263656667686a6b6c6d6f707172', 'ecb-tbl-128: I=48'), |
('bde6f89e16daadb0e847a2a614566a91', '770036f878cd0f6ca2268172f106f2fe', |
'74757677797a7b7c7e7f808183848586', 'ecb-tbl-128: I=49'), |
('c9de163725f1f5be44ebb1db51d07fbc', '7e4e03908b716116443ccf7c94e7c259', |
'88898a8b8d8e8f90929394959798999a', 'ecb-tbl-128: I=50'), |
('3af57a58f0c07dffa669572b521e2b92', '482735a48c30613a242dd494c7f9185d', |
'9c9d9e9fa1a2a3a4a6a7a8a9abacadae', 'ecb-tbl-128: I=51'), |
('3d5ebac306dde4604f1b4fbbbfcdae55', 'b4c0f6c9d4d7079addf9369fc081061d', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2', 'ecb-tbl-128: I=52'), |
('c2dfa91bceb76a1183c995020ac0b556', 'd5810fe0509ac53edcd74f89962e6270', |
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', 'ecb-tbl-128: I=53'), |
('c70f54305885e9a0746d01ec56c8596b', '03f17a16b3f91848269ecdd38ebb2165', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9ea', 'ecb-tbl-128: I=54'), |
('c4f81b610e98012ce000182050c0c2b2', 'da1248c3180348bad4a93b4d9856c9df', |
'ecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', 'ecb-tbl-128: I=55'), |
('eaab86b1d02a95d7404eff67489f97d4', '3d10d7b63f3452c06cdf6cce18be0c2c', |
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=56'), |
('7c55bdb40b88870b52bec3738de82886', '4ab823e7477dfddc0e6789018fcb6258', |
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=57'), |
('ba6eaa88371ff0a3bd875e3f2a975ce0', 'e6478ba56a77e70cfdaa5c843abde30e', |
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=58'), |
('08059130c4c24bd30cf0575e4e0373dc', '1673064895fbeaf7f09c5429ff75772d', |
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=59'), |
('9a8eab004ef53093dfcf96f57e7eda82', '4488033ae9f2efd0ca9383bfca1a94e9', |
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=60'), |
('0745b589e2400c25f117b1d796c28129', '978f3b8c8f9d6f46626cac3c0bcb9217', |
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=61'), |
('2f1777781216cec3f044f134b1b92bbe', 'e08c8a7e582e15e5527f1d9e2eecb236', |
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=62'), |
('353a779ffc541b3a3805d90ce17580fc', 'cec155b76ac5ffda4cf4f9ca91e49a7a', |
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=63'), |
('1a1eae4415cefcf08c4ac1c8f68bea8f', 'd5ac7165763225dd2a38cdc6862c29ad', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=64'), |
('e6e7e4e5b0b3b2b5d4d5aaab16111013', '03680fe19f7ce7275452020be70e8204', |
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', 'ecb-tbl-128: I=65'), |
('f8f9fafbfbf8f9e677767170efe0e1e2', '461df740c9781c388e94bb861ceb54f6', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9da', 'ecb-tbl-128: I=66'), |
('63626160a1a2a3a445444b4a75727370', '451bd60367f96483042742219786a074', |
'dcdddedfe1e2e3e4e6e7e8e9ebecedee', 'ecb-tbl-128: I=67'), |
('717073720605040b2d2c2b2a05fafbf9', 'e4dfa42671a02e57ef173b85c0ea9f2b', |
'f0f1f2f3f5f6f7f8fafbfcfdfe010002', 'ecb-tbl-128: I=68'), |
('78797a7beae9e8ef3736292891969794', 'ed11b89e76274282227d854700a78b9e', |
'04050607090a0b0c0e0f101113141516', 'ecb-tbl-128: I=69'), |
('838281803231300fdddcdbdaa0afaead', '433946eaa51ea47af33895f2b90b3b75', |
'18191a1b1d1e1f20222324252728292a', 'ecb-tbl-128: I=70'), |
('18191a1bbfbcbdba75747b7a7f78797a', '6bc6d616a5d7d0284a5910ab35022528', |
'2c2d2e2f31323334363738393b3c3d3e', 'ecb-tbl-128: I=71'), |
('848586879b989996a3a2a5a4849b9a99', 'd2a920ecfe919d354b5f49eae9719c98', |
'40414243454647484a4b4c4d4f505152', 'ecb-tbl-128: I=72'), |
('0001020322212027cacbf4f551565754', '3a061b17f6a92885efbd0676985b373d', |
'54555657595a5b5c5e5f606163646566', 'ecb-tbl-128: I=73'), |
('cecfcccdafacadb2515057564a454447', 'fadeec16e33ea2f4688499d157e20d8f', |
'68696a6b6d6e6f70727374757778797a', 'ecb-tbl-128: I=74'), |
('92939091cdcecfc813121d1c80878685', '5cdefede59601aa3c3cda36fa6b1fa13', |
'7c7d7e7f81828384868788898b8c8d8e', 'ecb-tbl-128: I=75'), |
('d2d3d0d16f6c6d6259585f5ed1eeefec', '9574b00039844d92ebba7ee8719265f8', |
'90919293959697989a9b9c9d9fa0a1a2', 'ecb-tbl-128: I=76'), |
('acadaeaf878485820f0e1110d5d2d3d0', '9a9cf33758671787e5006928188643fa', |
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', 'ecb-tbl-128: I=77'), |
('9091929364676619e6e7e0e1757a7b78', '2cddd634c846ba66bb46cbfea4a674f9', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9ca', 'ecb-tbl-128: I=78'), |
('babbb8b98a89888f74757a7b92959497', 'd28bae029393c3e7e26e9fafbbb4b98f', |
'cccdcecfd1d2d3d4d6d7d8d9dbdcddde', 'ecb-tbl-128: I=79'), |
('8d8c8f8e6e6d6c633b3a3d3ccad5d4d7', 'ec27529b1bee0a9ab6a0d73ebc82e9b7', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2', 'ecb-tbl-128: I=80'), |
('86878485010203040808f7f767606162', '3cb25c09472aff6ee7e2b47ccd7ccb17', |
'f4f5f6f7f9fafbfcfefe010103040506', 'ecb-tbl-128: I=81'), |
('8e8f8c8d656667788a8b8c8d010e0f0c', 'dee33103a7283370d725e44ca38f8fe5', |
'08090a0b0d0e0f10121314151718191a', 'ecb-tbl-128: I=82'), |
('c8c9cacb858687807a7b7475e7e0e1e2', '27f9bcd1aac64bffc11e7815702c1a69', |
'1c1d1e1f21222324262728292b2c2d2e', 'ecb-tbl-128: I=83'), |
('6d6c6f6e5053525d8c8d8a8badd2d3d0', '5df534ffad4ed0749a9988e9849d0021', |
'30313233353637383a3b3c3d3f404142', 'ecb-tbl-128: I=84'), |
('28292a2b393a3b3c0607181903040506', 'a48bee75db04fb60ca2b80f752a8421b', |
'44454647494a4b4c4e4f505153545556', 'ecb-tbl-128: I=85'), |
('a5a4a7a6b0b3b28ddbdadddcbdb2b3b0', '024c8cf70bc86ee5ce03678cb7af45f9', |
'58595a5b5d5e5f60626364656768696a', 'ecb-tbl-128: I=86'), |
('323330316467666130313e3f2c2b2a29', '3c19ac0f8a3a3862ce577831301e166b', |
'6c6d6e6f71727374767778797b7c7d7e', 'ecb-tbl-128: I=87'), |
('27262524080b0a05171611100b141516', 'c5e355b796a57421d59ca6be82e73bca', |
'80818283858687888a8b8c8d8f909192', 'ecb-tbl-128: I=88'), |
('040506074142434435340b0aa3a4a5a6', 'd94033276417abfb05a69d15b6e386e2', |
'94959697999a9b9c9e9fa0a1a3a4a5a6', 'ecb-tbl-128: I=89'), |
('242526271112130c61606766bdb2b3b0', '24b36559ea3a9b9b958fe6da3e5b8d85', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9ba', 'ecb-tbl-128: I=90'), |
('4b4a4948252627209e9f9091cec9c8cb', '20fd4feaa0e8bf0cce7861d74ef4cb72', |
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdce', 'ecb-tbl-128: I=91'), |
('68696a6b6665646b9f9e9998d9e6e7e4', '350e20d5174277b9ec314c501570a11d', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2', 'ecb-tbl-128: I=92'), |
('34353637c5c6c7c0f0f1eeef7c7b7a79', '87a29d61b7c604d238fe73045a7efd57', |
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', 'ecb-tbl-128: I=93'), |
('32333031c2c1c13f0d0c0b0a050a0b08', '2c3164c1cc7d0064816bdc0faa362c52', |
'f8f9fafbfdfefe00020304050708090a', 'ecb-tbl-128: I=94'), |
('cdcccfcebebdbcbbabaaa5a4181f1e1d', '195fe5e8a05a2ed594f6e4400eee10b3', |
'0c0d0e0f11121314161718191b1c1d1e', 'ecb-tbl-128: I=95'), |
('212023223635343ba0a1a6a7445b5a59', 'e4663df19b9a21a5a284c2bd7f905025', |
'20212223252627282a2b2c2d2f303132', 'ecb-tbl-128: I=96'), |
('0e0f0c0da8abaaad2f2e515002050407', '21b88714cfb4e2a933bd281a2c4743fd', |
'34353637393a3b3c3e3f404143444546', 'ecb-tbl-128: I=97'), |
('070605042a2928378e8f8889bdb2b3b0', 'cbfc3980d704fd0fc54378ab84e17870', |
'48494a4b4d4e4f50525354555758595a', 'ecb-tbl-128: I=98'), |
('cbcac9c893909196a9a8a7a6a5a2a3a0', 'bc5144baa48bdeb8b63e22e03da418ef', |
'5c5d5e5f61626364666768696b6c6d6e', 'ecb-tbl-128: I=99'), |
('80818283c1c2c3cc9c9d9a9b0cf3f2f1', '5a1dbaef1ee2984b8395da3bdffa3ccc', |
'70717273757677787a7b7c7d7f808182', 'ecb-tbl-128: I=100'), |
('1213101125262720fafbe4e5b1b6b7b4', 'f0b11cd0729dfcc80cec903d97159574', |
'84858687898a8b8c8e8f909193949596', 'ecb-tbl-128: I=101'), |
('7f7e7d7c3033320d97969190222d2c2f', '9f95314acfddc6d1914b7f19a9cc8209', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aa', 'ecb-tbl-128: I=102'), |
('4e4f4c4d484b4a4d81808f8e53545556', '595736f6f0f70914a94e9e007f022519', |
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbe', 'ecb-tbl-128: I=103'), |
('dcdddedfb0b3b2bd15141312a1bebfbc', '1f19f57892cae586fcdfb4c694deb183', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2', 'ecb-tbl-128: I=104'), |
('93929190282b2a2dc4c5fafb92959497', '540700ee1f6f3dab0b3eddf6caee1ef5', |
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', 'ecb-tbl-128: I=105'), |
('f5f4f7f6c4c7c6d9373631307e717073', '14a342a91019a331687a2254e6626ca2', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fa', 'ecb-tbl-128: I=106'), |
('93929190b6b5b4b364656a6b05020300', '7b25f3c3b2eea18d743ef283140f29ff', |
'fcfdfeff01020304060708090b0c0d0e', 'ecb-tbl-128: I=107'), |
('babbb8b90d0e0f00a4a5a2a3043b3a39', '46c2587d66e5e6fa7f7ca6411ad28047', |
'10111213151617181a1b1c1d1f202122', 'ecb-tbl-128: I=108'), |
('d8d9dadb7f7c7d7a10110e0f787f7e7d', '09470e72229d954ed5ee73886dfeeba9', |
'24252627292a2b2c2e2f303133343536', 'ecb-tbl-128: I=109'), |
('fefffcfdefeced923b3a3d3c6768696a', 'd77c03de92d4d0d79ef8d4824ef365eb', |
'38393a3b3d3e3f40424344454748494a', 'ecb-tbl-128: I=110'), |
('d6d7d4d58a89888f96979899a5a2a3a0', '1d190219f290e0f1715d152d41a23593', |
'4c4d4e4f51525354565758595b5c5d5e', 'ecb-tbl-128: I=111'), |
('18191a1ba8abaaa5303136379b848586', 'a2cd332ce3a0818769616292e87f757b', |
'60616263656667686a6b6c6d6f707172', 'ecb-tbl-128: I=112'), |
('6b6a6968a4a7a6a1d6d72829b0b7b6b5', 'd54afa6ce60fbf9341a3690e21385102', |
'74757677797a7b7c7e7f808183848586', 'ecb-tbl-128: I=113'), |
('000102038a89889755545352a6a9a8ab', '06e5c364ded628a3f5e05e613e356f46', |
'88898a8b8d8e8f90929394959798999a', 'ecb-tbl-128: I=114'), |
('2d2c2f2eb3b0b1b6b6b7b8b9f2f5f4f7', 'eae63c0e62556dac85d221099896355a', |
'9c9d9e9fa1a2a3a4a6a7a8a9abacadae', 'ecb-tbl-128: I=115'), |
('979695943536373856575051e09f9e9d', '1fed060e2c6fc93ee764403a889985a2', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2', 'ecb-tbl-128: I=116'), |
('a4a5a6a7989b9a9db1b0afae7a7d7c7f', 'c25235c1a30fdec1c7cb5c5737b2a588', |
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', 'ecb-tbl-128: I=117'), |
('c1c0c3c2686b6a55a8a9aeafeae5e4e7', '796dbef95147d4d30873ad8b7b92efc0', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9ea', 'ecb-tbl-128: I=118'), |
('c1c0c3c2141716118c8d828364636261', 'cbcf0fb34d98d0bd5c22ce37211a46bf', |
'ecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', 'ecb-tbl-128: I=119'), |
('93929190cccfcec196979091e0fffefd', '94b44da6466126cafa7c7fd09063fc24', |
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=120'), |
('b4b5b6b7f9fafbfc25241b1a6e69686b', 'd78c5b5ebf9b4dbda6ae506c5074c8fe', |
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=121'), |
('868784850704051ac7c6c1c08788898a', '6c27444c27204b043812cf8cf95f9769', |
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=122'), |
('f4f5f6f7aaa9a8affdfcf3f277707172', 'be94524ee5a2aa50bba8b75f4c0aebcf', |
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=123'), |
('d3d2d1d00605040bc3c2c5c43e010003', 'a0aeaae91ba9f31f51aeb3588cf3a39e', |
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=124'), |
('73727170424140476a6b74750d0a0b08', '275297779c28266ef9fe4c6a13c08488', |
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=125'), |
('c2c3c0c10a0908f754555253a1aeafac', '86523d92bb8672cb01cf4a77fd725882', |
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=126'), |
('6d6c6f6ef8fbfafd82838c8df8fffefd', '4b8327640e9f33322a04dd96fcbf9a36', |
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=127'), |
('f5f4f7f684878689a6a7a0a1d2cdcccf', 'ce52af650d088ca559425223f4d32694', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=128'), |
# ecb_tbl.txt, KEYSIZE=192 |
('2d33eef2c0430a8a9ebf45e809c40bb6', 'dff4945e0336df4c1c56bc700eff837f', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c', |
'ecb-tbl-192: I=1'), |
('6aa375d1fa155a61fb72353e0a5a8756', 'b6fddef4752765e347d5d2dc196d1252', |
'1e1f20212324252628292a2b2d2e2f30323334353738393a', |
'ecb-tbl-192: I=2'), |
('bc3736518b9490dcb8ed60eb26758ed4', 'd23684e3d963b3afcf1a114aca90cbd6', |
'3c3d3e3f41424344464748494b4c4d4e5051525355565758', |
'ecb-tbl-192: I=3'), |
('aa214402b46cffb9f761ec11263a311e', '3a7ac027753e2a18c2ceab9e17c11fd0', |
'5a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-192: I=4'), |
('02aea86e572eeab66b2c3af5e9a46fd6', '8f6786bd007528ba26603c1601cdd0d8', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394', |
'ecb-tbl-192: I=5'), |
('e2aef6acc33b965c4fa1f91c75ff6f36', 'd17d073b01e71502e28b47ab551168b3', |
'969798999b9c9d9ea0a1a2a3a5a6a7a8aaabacadafb0b1b2', |
'ecb-tbl-192: I=6'), |
('0659df46427162b9434865dd9499f91d', 'a469da517119fab95876f41d06d40ffa', |
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6c8c9cacbcdcecfd0', |
'ecb-tbl-192: I=7'), |
('49a44239c748feb456f59c276a5658df', '6091aa3b695c11f5c0b6ad26d3d862ff', |
'd2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-192: I=8'), |
('66208f6e9d04525bdedb2733b6a6be37', '70f9e67f9f8df1294131662dc6e69364', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c', |
'ecb-tbl-192: I=9'), |
('3393f8dfc729c97f5480b950bc9666b0', 'd154dcafad8b207fa5cbc95e9996b559', |
'0e0f10111314151618191a1b1d1e1f20222324252728292a', |
'ecb-tbl-192: I=10'), |
('606834c8ce063f3234cf1145325dbd71', '4934d541e8b46fa339c805a7aeb9e5da', |
'2c2d2e2f31323334363738393b3c3d3e4041424345464748', |
'ecb-tbl-192: I=11'), |
('fec1c04f529bbd17d8cecfcc4718b17f', '62564c738f3efe186e1a127a0c4d3c61', |
'4a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-192: I=12'), |
('32df99b431ed5dc5acf8caf6dc6ce475', '07805aa043986eb23693e23bef8f3438', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384', |
'ecb-tbl-192: I=13'), |
('7fdc2b746f3f665296943b83710d1f82', 'df0b4931038bade848dee3b4b85aa44b', |
'868788898b8c8d8e90919293959697989a9b9c9d9fa0a1a2', |
'ecb-tbl-192: I=14'), |
('8fba1510a3c5b87e2eaa3f7a91455ca2', '592d5fded76582e4143c65099309477c', |
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6b8b9babbbdbebfc0', |
'ecb-tbl-192: I=15'), |
('2c9b468b1c2eed92578d41b0716b223b', 'c9b8d6545580d3dfbcdd09b954ed4e92', |
'c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde', |
'ecb-tbl-192: I=16'), |
('0a2bbf0efc6bc0034f8a03433fca1b1a', '5dccd5d6eb7c1b42acb008201df707a0', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfc', |
'ecb-tbl-192: I=17'), |
('25260e1f31f4104d387222e70632504b', 'a2a91682ffeb6ed1d34340946829e6f9', |
'fefe01010304050608090a0b0d0e0f10121314151718191a', |
'ecb-tbl-192: I=18'), |
('c527d25a49f08a5228d338642ae65137', 'e45d185b797000348d9267960a68435d', |
'1c1d1e1f21222324262728292b2c2d2e3031323335363738', |
'ecb-tbl-192: I=19'), |
('3b49fc081432f5890d0e3d87e884a69e', '45e060dae5901cda8089e10d4f4c246b', |
'3a3b3c3d3f40414244454647494a4b4c4e4f505153545556', |
'ecb-tbl-192: I=20'), |
('d173f9ed1e57597e166931df2754a083', 'f6951afacc0079a369c71fdcff45df50', |
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374', |
'ecb-tbl-192: I=21'), |
('8c2b7cafa5afe7f13562daeae1adede0', '9e95e00f351d5b3ac3d0e22e626ddad6', |
'767778797b7c7d7e80818283858687888a8b8c8d8f909192', |
'ecb-tbl-192: I=22'), |
('aaf4ec8c1a815aeb826cab741339532c', '9cb566ff26d92dad083b51fdc18c173c', |
'94959697999a9b9c9e9fa0a1a3a4a5a6a8a9aaabadaeafb0', |
'ecb-tbl-192: I=23'), |
('40be8c5d9108e663f38f1a2395279ecf', 'c9c82766176a9b228eb9a974a010b4fb', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebec', |
'ecb-tbl-192: I=24'), |
('0c8ad9bc32d43e04716753aa4cfbe351', 'd8e26aa02945881d5137f1c1e1386e88', |
'2a2b2c2d2f30313234353637393a3b3c3e3f404143444546', |
'ecb-tbl-192: I=25'), |
('1407b1d5f87d63357c8dc7ebbaebbfee', 'c0e024ccd68ff5ffa4d139c355a77c55', |
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364', |
'ecb-tbl-192: I=26'), |
('e62734d1ae3378c4549e939e6f123416', '0b18b3d16f491619da338640df391d43', |
'84858687898a8b8c8e8f90919394959698999a9b9d9e9fa0', |
'ecb-tbl-192: I=27'), |
('5a752cff2a176db1a1de77f2d2cdee41', 'dbe09ac8f66027bf20cb6e434f252efc', |
'a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe', |
'ecb-tbl-192: I=28'), |
('a9c8c3a4eabedc80c64730ddd018cd88', '6d04e5e43c5b9cbe05feb9606b6480fe', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdc', |
'ecb-tbl-192: I=29'), |
('ee9b3dbbdb86180072130834d305999a', 'dd1d6553b96be526d9fee0fbd7176866', |
'1a1b1c1d1f20212224252627292a2b2c2e2f303133343536', |
'ecb-tbl-192: I=30'), |
('a7fa8c3586b8ebde7568ead6f634a879', '0260ca7e3f979fd015b0dd4690e16d2a', |
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354', |
'ecb-tbl-192: I=31'), |
('37e0f4a87f127d45ac936fe7ad88c10a', '9893734de10edcc8a67c3b110b8b8cc6', |
'929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae', |
'ecb-tbl-192: I=32'), |
('3f77d8b5d92bac148e4e46f697a535c5', '93b30b750516b2d18808d710c2ee84ef', |
'464748494b4c4d4e50515253555657585a5b5c5d5f606162', |
'ecb-tbl-192: I=33'), |
('d25ebb686c40f7e2c4da1014936571ca', '16f65fa47be3cb5e6dfe7c6c37016c0e', |
'828384858788898a8c8d8e8f91929394969798999b9c9d9e', |
'ecb-tbl-192: I=34'), |
('4f1c769d1e5b0552c7eca84dea26a549', 'f3847210d5391e2360608e5acb560581', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbc', |
'ecb-tbl-192: I=35'), |
('8548e2f882d7584d0fafc54372b6633a', '8754462cd223366d0753913e6af2643d', |
'bebfc0c1c3c4c5c6c8c9cacbcdcecfd0d2d3d4d5d7d8d9da', |
'ecb-tbl-192: I=36'), |
('87d7a336cb476f177cd2a51af2a62cdf', '1ea20617468d1b806a1fd58145462017', |
'dcdddedfe1e2e3e4e6e7e8e9ebecedeef0f1f2f3f5f6f7f8', |
'ecb-tbl-192: I=37'), |
('03b1feac668c4e485c1065dfc22b44ee', '3b155d927355d737c6be9dda60136e2e', |
'fafbfcfdfe01000204050607090a0b0c0e0f101113141516', |
'ecb-tbl-192: I=38'), |
('bda15e66819fa72d653a6866aa287962', '26144f7b66daa91b6333dbd3850502b3', |
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334', |
'ecb-tbl-192: I=39'), |
('4d0c7a0d2505b80bf8b62ceb12467f0a', 'e4f9a4ab52ced8134c649bf319ebcc90', |
'363738393b3c3d3e40414243454647484a4b4c4d4f505152', |
'ecb-tbl-192: I=40'), |
('626d34c9429b37211330986466b94e5f', 'b9ddd29ac6128a6cab121e34a4c62b36', |
'54555657595a5b5c5e5f60616364656668696a6b6d6e6f70', |
'ecb-tbl-192: I=41'), |
('333c3e6bf00656b088a17e5ff0e7f60a', '6fcddad898f2ce4eff51294f5eaaf5c9', |
'727374757778797a7c7d7e7f81828384868788898b8c8d8e', |
'ecb-tbl-192: I=42'), |
('687ed0cdc0d2a2bc8c466d05ef9d2891', 'c9a6fe2bf4028080bea6f7fc417bd7e3', |
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabac', |
'ecb-tbl-192: I=43'), |
('487830e78cc56c1693e64b2a6660c7b6', '6a2026846d8609d60f298a9c0673127f', |
'aeafb0b1b3b4b5b6b8b9babbbdbebfc0c2c3c4c5c7c8c9ca', |
'ecb-tbl-192: I=44'), |
('7a48d6b7b52b29392aa2072a32b66160', '2cb25c005e26efea44336c4c97a4240b', |
'cccdcecfd1d2d3d4d6d7d8d9dbdcdddee0e1e2e3e5e6e7e8', |
'ecb-tbl-192: I=45'), |
('907320e64c8c5314d10f8d7a11c8618d', '496967ab8680ddd73d09a0e4c7dcc8aa', |
'eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506', |
'ecb-tbl-192: I=46'), |
('b561f2ca2d6e65a4a98341f3ed9ff533', 'd5af94de93487d1f3a8c577cb84a66a4', |
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324', |
'ecb-tbl-192: I=47'), |
('df769380d212792d026f049e2e3e48ef', '84bdac569cae2828705f267cc8376e90', |
'262728292b2c2d2e30313233353637383a3b3c3d3f404142', |
'ecb-tbl-192: I=48'), |
('79f374bc445bdabf8fccb8843d6054c6', 'f7401dda5ad5ab712b7eb5d10c6f99b6', |
'44454647494a4b4c4e4f50515354555658595a5b5d5e5f60', |
'ecb-tbl-192: I=49'), |
('4e02f1242fa56b05c68dbae8fe44c9d6', '1c9d54318539ebd4c3b5b7e37bf119f0', |
'626364656768696a6c6d6e6f71727374767778797b7c7d7e', |
'ecb-tbl-192: I=50'), |
('cf73c93cbff57ac635a6f4ad2a4a1545', 'aca572d65fb2764cffd4a6eca090ea0d', |
'80818283858687888a8b8c8d8f90919294959697999a9b9c', |
'ecb-tbl-192: I=51'), |
('9923548e2875750725b886566784c625', '36d9c627b8c2a886a10ccb36eae3dfbb', |
'9e9fa0a1a3a4a5a6a8a9aaabadaeafb0b2b3b4b5b7b8b9ba', |
'ecb-tbl-192: I=52'), |
('4888336b723a022c9545320f836a4207', '010edbf5981e143a81d646e597a4a568', |
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdced0d1d2d3d5d6d7d8', |
'ecb-tbl-192: I=53'), |
('f84d9a5561b0608b1160dee000c41ba8', '8db44d538dc20cc2f40f3067fd298e60', |
'dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', |
'ecb-tbl-192: I=54'), |
('c23192a0418e30a19b45ae3e3625bf22', '930eb53bc71e6ac4b82972bdcd5aafb3', |
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314', |
'ecb-tbl-192: I=55'), |
('b84e0690b28b0025381ad82a15e501a7', '6c42a81edcbc9517ccd89c30c95597b4', |
'161718191b1c1d1e20212223252627282a2b2c2d2f303132', |
'ecb-tbl-192: I=56'), |
('acef5e5c108876c4f06269f865b8f0b0', 'da389847ad06df19d76ee119c71e1dd3', |
'34353637393a3b3c3e3f40414344454648494a4b4d4e4f50', |
'ecb-tbl-192: I=57'), |
('0f1b3603e0f5ddea4548246153a5e064', 'e018fdae13d3118f9a5d1a647a3f0462', |
'525354555758595a5c5d5e5f61626364666768696b6c6d6e', |
'ecb-tbl-192: I=58'), |
('fbb63893450d42b58c6d88cd3c1809e3', '2aa65db36264239d3846180fabdfad20', |
'70717273757677787a7b7c7d7f80818284858687898a8b8c', |
'ecb-tbl-192: I=59'), |
('4bef736df150259dae0c91354e8a5f92', '1472163e9a4f780f1ceb44b07ecf4fdb', |
'8e8f90919394959698999a9b9d9e9fa0a2a3a4a5a7a8a9aa', |
'ecb-tbl-192: I=60'), |
('7d2d46242056ef13d3c3fc93c128f4c7', 'c8273fdc8f3a9f72e91097614b62397c', |
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbec0c1c2c3c5c6c7c8', |
'ecb-tbl-192: I=61'), |
('e9c1ba2df415657a256edb33934680fd', '66c8427dcd733aaf7b3470cb7d976e3f', |
'cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', |
'ecb-tbl-192: I=62'), |
('e23ee277b0aa0a1dfb81f7527c3514f1', '146131cb17f1424d4f8da91e6f80c1d0', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304', |
'ecb-tbl-192: I=63'), |
('3e7445b0b63caaf75e4a911e12106b4c', '2610d0ad83659081ae085266a88770dc', |
'060708090b0c0d0e10111213151617181a1b1c1d1f202122', |
'ecb-tbl-192: I=64'), |
('767774752023222544455a5be6e1e0e3', '38a2b5a974b0575c5d733917fb0d4570', |
'24252627292a2b2c2e2f30313334353638393a3b3d3e3f40', |
'ecb-tbl-192: I=65'), |
('72737475717e7f7ce9e8ebea696a6b6c', 'e21d401ebc60de20d6c486e4f39a588b', |
'424344454748494a4c4d4e4f51525354565758595b5c5d5e', |
'ecb-tbl-192: I=66'), |
('dfdedddc25262728c9c8cfcef1eeefec', 'e51d5f88c670b079c0ca1f0c2c4405a2', |
'60616263656667686a6b6c6d6f70717274757677797a7b7c', |
'ecb-tbl-192: I=67'), |
('fffe0100707776755f5e5d5c7675746b', '246a94788a642fb3d1b823c8762380c8', |
'7e7f80818384858688898a8b8d8e8f90929394959798999a', |
'ecb-tbl-192: I=68'), |
('e0e1e2e3424140479f9e9190292e2f2c', 'b80c391c5c41a4c3b30c68e0e3d7550f', |
'9c9d9e9fa1a2a3a4a6a7a8a9abacadaeb0b1b2b3b5b6b7b8', |
'ecb-tbl-192: I=69'), |
('2120272690efeeed3b3a39384e4d4c4b', 'b77c4754fc64eb9a1154a9af0bb1f21c', |
'babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', |
'ecb-tbl-192: I=70'), |
('ecedeeef5350516ea1a0a7a6a3acadae', 'fb554de520d159a06bf219fc7f34a02f', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4', |
'ecb-tbl-192: I=71'), |
('32333c3d25222320e9e8ebeacecdccc3', 'a89fba152d76b4927beed160ddb76c57', |
'f6f7f8f9fbfcfdfe00010203050607080a0b0c0d0f101112', |
'ecb-tbl-192: I=72'), |
('40414243626160678a8bb4b511161714', '5676eab4a98d2e8473b3f3d46424247c', |
'14151617191a1b1c1e1f20212324252628292a2b2d2e2f30', |
'ecb-tbl-192: I=73'), |
('94959293f5fafbf81f1e1d1c7c7f7e79', '4e8f068bd7ede52a639036ec86c33568', |
'323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-192: I=74'), |
('bebfbcbd191a1b14cfcec9c8546b6a69', 'f0193c4d7aff1791ee4c07eb4a1824fc', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c', |
'ecb-tbl-192: I=75'), |
('2c2d3233898e8f8cbbbab9b8333031ce', 'ac8686eeca9ba761afe82d67b928c33f', |
'6e6f70717374757678797a7b7d7e7f80828384858788898a', |
'ecb-tbl-192: I=76'), |
('84858687bfbcbdba37363938fdfafbf8', '5faf8573e33b145b6a369cd3606ab2c9', |
'8c8d8e8f91929394969798999b9c9d9ea0a1a2a3a5a6a7a8', |
'ecb-tbl-192: I=77'), |
('828384857669686b909192930b08090e', '31587e9944ab1c16b844ecad0df2e7da', |
'aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', |
'ecb-tbl-192: I=78'), |
('bebfbcbd9695948b707176779e919093', 'd017fecd91148aba37f6f3068aa67d8a', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4', |
'ecb-tbl-192: I=79'), |
('8b8a85846067666521202322d0d3d2dd', '788ef2f021a73cba2794b616078a8500', |
'e6e7e8e9ebecedeef0f1f2f3f5f6f7f8fafbfcfdfe010002', |
'ecb-tbl-192: I=80'), |
('76777475f1f2f3f4f8f9e6e777707172', '5d1ef20dced6bcbc12131ac7c54788aa', |
'04050607090a0b0c0e0f10111314151618191a1b1d1e1f20', |
'ecb-tbl-192: I=81'), |
('a4a5a2a34f404142b4b5b6b727242522', 'b3c8cf961faf9ea05fdde6d1e4d8f663', |
'222324252728292a2c2d2e2f31323334363738393b3c3d3e', |
'ecb-tbl-192: I=82'), |
('94959697e1e2e3ec16171011839c9d9e', '143075c70605861c7fac6526199e459f', |
'40414243454647484a4b4c4d4f50515254555657595a5b5c', |
'ecb-tbl-192: I=83'), |
('03023d3c06010003dedfdcddfffcfde2', 'a5ae12eade9a87268d898bfc8fc0252a', |
'5e5f60616364656668696a6b6d6e6f70727374757778797a', |
'ecb-tbl-192: I=84'), |
('10111213f1f2f3f4cecfc0c1dbdcddde', '0924f7cf2e877a4819f5244a360dcea9', |
'7c7d7e7f81828384868788898b8c8d8e9091929395969798', |
'ecb-tbl-192: I=85'), |
('67666160724d4c4f1d1c1f1e73707176', '3d9e9635afcc3e291cc7ab3f27d1c99a', |
'9a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', |
'ecb-tbl-192: I=86'), |
('e6e7e4e5a8abaad584858283909f9e9d', '9d80feebf87510e2b8fb98bb54fd788c', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4', |
'ecb-tbl-192: I=87'), |
('71707f7e565150537d7c7f7e6162636c', '5f9d1a082a1a37985f174002eca01309', |
'd6d7d8d9dbdcdddee0e1e2e3e5e6e7e8eaebecedeff0f1f2', |
'ecb-tbl-192: I=88'), |
('64656667212223245555aaaa03040506', 'a390ebb1d1403930184a44b4876646e4', |
'f4f5f6f7f9fafbfcfefe01010304050608090a0b0d0e0f10', |
'ecb-tbl-192: I=89'), |
('9e9f9899aba4a5a6cfcecdcc2b28292e', '700fe918981c3195bb6c4bcb46b74e29', |
'121314151718191a1c1d1e1f21222324262728292b2c2d2e', |
'ecb-tbl-192: I=90'), |
('c7c6c5c4d1d2d3dc626364653a454447', '907984406f7bf2d17fb1eb15b673d747', |
'30313233353637383a3b3c3d3f40414244454647494a4b4c', |
'ecb-tbl-192: I=91'), |
('f6f7e8e9e0e7e6e51d1c1f1e5b585966', 'c32a956dcfc875c2ac7c7cc8b8cc26e1', |
'4e4f50515354555658595a5b5d5e5f60626364656768696a', |
'ecb-tbl-192: I=92'), |
('bcbdbebf5d5e5f5868696667f4f3f2f1', '02646e2ebfa9b820cf8424e9b9b6eb51', |
'6c6d6e6f71727374767778797b7c7d7e8081828385868788', |
'ecb-tbl-192: I=93'), |
('40414647b0afaead9b9a99989b98999e', '621fda3a5bbd54c6d3c685816bd4ead8', |
'8a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6', |
'ecb-tbl-192: I=94'), |
('69686b6a0201001f0f0e0908b4bbbab9', 'd4e216040426dfaf18b152469bc5ac2f', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4', |
'ecb-tbl-192: I=95'), |
('c7c6c9c8d8dfdedd5a5b5859bebdbcb3', '9d0635b9d33b6cdbd71f5d246ea17cc8', |
'c6c7c8c9cbcccdced0d1d2d3d5d6d7d8dadbdcdddfe0e1e2', |
'ecb-tbl-192: I=96'), |
('dedfdcdd787b7a7dfffee1e0b2b5b4b7', '10abad1bd9bae5448808765583a2cc1a', |
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6f8f9fafbfdfefe00', |
'ecb-tbl-192: I=97'), |
('4d4c4b4a606f6e6dd0d1d2d3fbf8f9fe', '6891889e16544e355ff65a793c39c9a8', |
'020304050708090a0c0d0e0f11121314161718191b1c1d1e', |
'ecb-tbl-192: I=98'), |
('b7b6b5b4d7d4d5dae5e4e3e2e1fefffc', 'cc735582e68072c163cd9ddf46b91279', |
'20212223252627282a2b2c2d2f30313234353637393a3b3c', |
'ecb-tbl-192: I=99'), |
('cecfb0b1f7f0f1f2aeafacad3e3d3c23', 'c5c68b9aeeb7f878df578efa562f9574', |
'3e3f40414344454648494a4b4d4e4f50525354555758595a', |
'ecb-tbl-192: I=100'), |
('cacbc8c9cdcecfc812131c1d494e4f4c', '5f4764395a667a47d73452955d0d2ce8', |
'5c5d5e5f61626364666768696b6c6d6e7071727375767778', |
'ecb-tbl-192: I=101'), |
('9d9c9b9ad22d2c2fb1b0b3b20c0f0e09', '701448331f66106cefddf1eb8267c357', |
'7a7b7c7d7f80818284858687898a8b8c8e8f909193949596', |
'ecb-tbl-192: I=102'), |
('7a7b787964676659959493924f404142', 'cb3ee56d2e14b4e1941666f13379d657', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4', |
'ecb-tbl-192: I=103'), |
('aaaba4a5cec9c8cb1f1e1d1caba8a9a6', '9fe16efd18ab6e1981191851fedb0764', |
'b6b7b8b9bbbcbdbec0c1c2c3c5c6c7c8cacbcccdcfd0d1d2', |
'ecb-tbl-192: I=104'), |
('93929190282b2a2dc4c5fafb92959497', '3dc9ba24e1b223589b147adceb4c8e48', |
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6e8e9eaebedeeeff0', |
'ecb-tbl-192: I=105'), |
('efeee9e8ded1d0d339383b3a888b8a8d', '1c333032682e7d4de5e5afc05c3e483c', |
'f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e', |
'ecb-tbl-192: I=106'), |
('7f7e7d7ca2a1a0af78797e7f112e2f2c', 'd593cc99a95afef7e92038e05a59d00a', |
'10111213151617181a1b1c1d1f20212224252627292a2b2c', |
'ecb-tbl-192: I=107'), |
('84859a9b2b2c2d2e868784852625245b', '51e7f96f53b4353923452c222134e1ec', |
'2e2f30313334353638393a3b3d3e3f40424344454748494a', |
'ecb-tbl-192: I=108'), |
('b0b1b2b3070405026869666710171615', '4075b357a1a2b473400c3b25f32f81a4', |
'4c4d4e4f51525354565758595b5c5d5e6061626365666768', |
'ecb-tbl-192: I=109'), |
('acadaaabbda2a3a00d0c0f0e595a5b5c', '302e341a3ebcd74f0d55f61714570284', |
'6a6b6c6d6f70717274757677797a7b7c7e7f808183848586', |
'ecb-tbl-192: I=110'), |
('121310115655544b5253545569666764', '57abdd8231280da01c5042b78cf76522', |
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4', |
'ecb-tbl-192: I=111'), |
('dedfd0d166616063eaebe8e94142434c', '17f9ea7eea17ac1adf0e190fef799e92', |
'a6a7a8a9abacadaeb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2', |
'ecb-tbl-192: I=112'), |
('dbdad9d81417161166677879e0e7e6e5', '2e1bdd563dd87ee5c338dd6d098d0a7a', |
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6d8d9dadbdddedfe0', |
'ecb-tbl-192: I=113'), |
('6a6b6c6de0efeeed2b2a2928c0c3c2c5', 'eb869996e6f8bfb2bfdd9e0c4504dbb2', |
'e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', |
'ecb-tbl-192: I=114'), |
('b1b0b3b21714151a1a1b1c1d5649484b', 'c2e01549e9decf317468b3e018c61ba8', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c', |
'ecb-tbl-192: I=115'), |
('39380706a3a4a5a6c4c5c6c77271706f', '8da875d033c01dd463b244a1770f4a22', |
'1e1f20212324252628292a2b2d2e2f30323334353738393a', |
'ecb-tbl-192: I=116'), |
('5c5d5e5f1013121539383736e2e5e4e7', '8ba0dcf3a186844f026d022f8839d696', |
'3c3d3e3f41424344464748494b4c4d4e5051525355565758', |
'ecb-tbl-192: I=117'), |
('43424544ead5d4d72e2f2c2d64676661', 'e9691ff9a6cc6970e51670a0fd5b88c1', |
'5a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-192: I=118'), |
('55545756989b9a65f8f9feff18171615', 'f2baec06faeed30f88ee63ba081a6e5b', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394', |
'ecb-tbl-192: I=119'), |
('05040b0a525554573c3d3e3f4a494847', '9c39d4c459ae5753394d6094adc21e78', |
'969798999b9c9d9ea0a1a2a3a5a6a7a8aaabacadafb0b1b2', |
'ecb-tbl-192: I=120'), |
('14151617595a5b5c8584fbfa8e89888b', '6345b532a11904502ea43ba99c6bd2b2', |
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6c8c9cacbcdcecfd0', |
'ecb-tbl-192: I=121'), |
('7c7d7a7bfdf2f3f029282b2a51525354', '5ffae3061a95172e4070cedce1e428c8', |
'd2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-192: I=122'), |
('38393a3b1e1d1c1341404746c23d3c3e', '0a4566be4cdf9adce5dec865b5ab34cd', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c', |
'ecb-tbl-192: I=123'), |
('8d8c939240474645818083827c7f7e41', 'ca17fcce79b7404f2559b22928f126fb', |
'0e0f10111314151618191a1b1d1e1f20222324252728292a', |
'ecb-tbl-192: I=124'), |
('3b3a39381a19181f32333c3d45424340', '97ca39b849ed73a6470a97c821d82f58', |
'2c2d2e2f31323334363738393b3c3d3e4041424345464748', |
'ecb-tbl-192: I=125'), |
('f0f1f6f738272625828380817f7c7d7a', '8198cb06bc684c6d3e9b7989428dcf7a', |
'4a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-192: I=126'), |
('89888b8a0407061966676061141b1a19', 'f53c464c705ee0f28d9a4c59374928bd', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384', |
'ecb-tbl-192: I=127'), |
('d3d2dddcaaadacaf9c9d9e9fe8ebeae5', '9adb3d4cca559bb98c3e2ed73dbf1154', |
'868788898b8c8d8e90919293959697989a9b9c9d9fa0a1a2', |
'ecb-tbl-192: I=128'), |
# ecb_tbl.txt, KEYSIZE=256 |
('834eadfccac7e1b30664b1aba44815ab', '1946dabf6a03a2a2c3d0b05080aed6fc', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526', |
'ecb-tbl-256: I=1'), |
('d9dc4dba3021b05d67c0518f72b62bf1', '5ed301d747d3cc715445ebdec62f2fb4', |
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-256: I=2'), |
('a291d86301a4a739f7392173aa3c604c', '6585c8f43d13a6beab6419fc5935b9d0', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-256: I=3'), |
('4264b2696498de4df79788a9f83e9390', '2a5b56a596680fcc0e05f5e0f151ecae', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e', |
'ecb-tbl-256: I=4'), |
('ee9932b3721804d5a83ef5949245b6f6', 'f5d6ff414fd2c6181494d20c37f2b8c4', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', |
'ecb-tbl-256: I=5'), |
('e6248f55c5fdcbca9cbbb01c88a2ea77', '85399c01f59fffb5204f19f8482f00b8', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-256: I=6'), |
('b8358e41b9dff65fd461d55a99266247', '92097b4c88a041ddf98144bc8d22e8e7', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516', |
'ecb-tbl-256: I=7'), |
('f0e2d72260af58e21e015ab3a4c0d906', '89bd5b73b356ab412aef9f76cea2d65c', |
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e', |
'ecb-tbl-256: I=8'), |
('475b8b823ce8893db3c44a9f2a379ff7', '2536969093c55ff9454692f2fac2f530', |
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-256: I=9'), |
('688f5281945812862f5f3076cf80412f', '07fc76a872843f3f6e0081ee9396d637', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e', |
'ecb-tbl-256: I=10'), |
('08d1d2bc750af553365d35e75afaceaa', 'e38ba8ec2aa741358dcc93e8f141c491', |
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', |
'ecb-tbl-256: I=11'), |
('8707121f47cc3efceca5f9a8474950a1', 'd028ee23e4a89075d0b03e868d7d3a42', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde', |
'ecb-tbl-256: I=12'), |
('e51aa0b135dba566939c3b6359a980c5', '8cd9423dfc459e547155c5d1d522e540', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506', |
'ecb-tbl-256: I=13'), |
('069a007fc76a459f98baf917fedf9521', '080e9517eb1677719acf728086040ae3', |
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e', |
'ecb-tbl-256: I=14'), |
('726165c1723fbcf6c026d7d00b091027', '7c1700211a3991fc0ecded0ab3e576b0', |
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556', |
'ecb-tbl-256: I=15'), |
('d7c544de91d55cfcde1f84ca382200ce', 'dabcbcc855839251db51e224fbe87435', |
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e', |
'ecb-tbl-256: I=16'), |
('fed3c9a161b9b5b2bd611b41dc9da357', '68d56fad0406947a4dd27a7448c10f1d', |
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6', |
'ecb-tbl-256: I=17'), |
('4f634cdc6551043409f30b635832cf82', 'da9a11479844d1ffee24bbf3719a9925', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce', |
'ecb-tbl-256: I=18'), |
('109ce98db0dfb36734d9f3394711b4e6', '5e4ba572f8d23e738da9b05ba24b8d81', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', |
'ecb-tbl-256: I=19'), |
('4ea6dfaba2d8a02ffdffa89835987242', 'a115a2065d667e3f0b883837a6e903f8', |
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596', |
'ecb-tbl-256: I=20'), |
('5ae094f54af58e6e3cdbf976dac6d9ef', '3e9e90dc33eac2437d86ad30b137e66e', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe', |
'ecb-tbl-256: I=21'), |
('764d8e8e0f29926dbe5122e66354fdbe', '01ce82d8fbcdae824cb3c48e495c3692', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', |
'ecb-tbl-256: I=22'), |
('3f0418f888cdf29a982bf6b75410d6a9', '0c9cff163ce936faaf083cfd3dea3117', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e', |
'ecb-tbl-256: I=23'), |
('e4a3e7cb12cdd56aa4a75197a9530220', '5131ba9bd48f2bba85560680df504b52', |
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536', |
'ecb-tbl-256: I=24'), |
('211677684aac1ec1a160f44c4ebf3f26', '9dc503bbf09823aec8a977a5ad26ccb2', |
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e', |
'ecb-tbl-256: I=25'), |
('d21e439ff749ac8f18d6d4b105e03895', '9a6db0c0862e506a9e397225884041d7', |
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586', |
'ecb-tbl-256: I=26'), |
('d9f6ff44646c4725bd4c0103ff5552a7', '430bf9570804185e1ab6365fc6a6860c', |
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae', |
'ecb-tbl-256: I=27'), |
('0b1256c2a00b976250cfc5b0c37ed382', '3525ebc02f4886e6a5a3762813e8ce8a', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', |
'ecb-tbl-256: I=28'), |
('b056447ffc6dc4523a36cc2e972a3a79', '07fa265c763779cce224c7bad671027b', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', |
'ecb-tbl-256: I=29'), |
('5e25ca78f0de55802524d38da3fe4456', 'e8b72b4e8be243438c9fff1f0e205872', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526', |
'ecb-tbl-256: I=30'), |
('a5bcf4728fa5eaad8567c0dc24675f83', '109d4f999a0e11ace1f05e6b22cbcb50', |
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-256: I=31'), |
('814e59f97ed84646b78b2ca022e9ca43', '45a5e8d4c3ed58403ff08d68a0cc4029', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-256: I=32'), |
('15478beec58f4775c7a7f5d4395514d7', '196865964db3d417b6bd4d586bcb7634', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e', |
'ecb-tbl-256: I=33'), |
('253548ffca461c67c8cbc78cd59f4756', '60436ad45ac7d30d99195f815d98d2ae', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', |
'ecb-tbl-256: I=34'), |
('fd7ad8d73b9b0f8cc41600640f503d65', 'bb07a23f0b61014b197620c185e2cd75', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-256: I=35'), |
('06199de52c6cbf8af954cd65830bcd56', '5bc0b2850129c854423aff0751fe343b', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516', |
'ecb-tbl-256: I=36'), |
('f17c4ffe48e44c61bd891e257e725794', '7541a78f96738e6417d2a24bd2beca40', |
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e', |
'ecb-tbl-256: I=37'), |
('9a5b4a402a3e8a59be6bf5cd8154f029', 'b0a303054412882e464591f1546c5b9e', |
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-256: I=38'), |
('79bd40b91a7e07dc939d441782ae6b17', '778c06d8a355eeee214fcea14b4e0eef', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e', |
'ecb-tbl-256: I=39'), |
('d8ceaaf8976e5fbe1012d8c84f323799', '09614206d15cbace63227d06db6beebb', |
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', |
'ecb-tbl-256: I=40'), |
('3316e2751e2e388b083da23dd6ac3fbe', '41b97fb20e427a9fdbbb358d9262255d', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde', |
'ecb-tbl-256: I=41'), |
('8b7cfbe37de7dca793521819242c5816', 'c1940f703d845f957652c2d64abd7adf', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506', |
'ecb-tbl-256: I=42'), |
('f23f033c0eebf8ec55752662fd58ce68', 'd2d44fcdae5332343366db297efcf21b', |
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e', |
'ecb-tbl-256: I=43'), |
('59eb34f6c8bdbacc5fc6ad73a59a1301', 'ea8196b79dbe167b6aa9896e287eed2b', |
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556', |
'ecb-tbl-256: I=44'), |
('dcde8b6bd5cf7cc22d9505e3ce81261a', 'd6b0b0c4ba6c7dbe5ed467a1e3f06c2d', |
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e', |
'ecb-tbl-256: I=45'), |
('e33cf7e524fed781e7042ff9f4b35dc7', 'ec51eb295250c22c2fb01816fb72bcae', |
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6', |
'ecb-tbl-256: I=46'), |
('27963c8facdf73062867d164df6d064c', 'aded6630a07ce9c7408a155d3bd0d36f', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce', |
'ecb-tbl-256: I=47'), |
('77b1ce386b551b995f2f2a1da994eef8', '697c9245b9937f32f5d1c82319f0363a', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', |
'ecb-tbl-256: I=48'), |
('f083388b013679efcf0bb9b15d52ae5c', 'aad5ad50c6262aaec30541a1b7b5b19c', |
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e', |
'ecb-tbl-256: I=49'), |
('c5009e0dab55db0abdb636f2600290c8', '7d34b893855341ec625bd6875ac18c0d', |
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546', |
'ecb-tbl-256: I=50'), |
('7804881e26cd532d8514d3683f00f1b9', '7ef05105440f83862f5d780e88f02b41', |
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e', |
'ecb-tbl-256: I=51'), |
('46cddcd73d1eb53e675ca012870a92a3', 'c377c06403382061af2c9c93a8e70df6', |
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596', |
'ecb-tbl-256: I=52'), |
('a9fb44062bb07fe130a8e8299eacb1ab', '1dbdb3ffdc052dacc83318853abc6de5', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe', |
'ecb-tbl-256: I=53'), |
('2b6ff8d7a5cc3a28a22d5a6f221af26b', '69a6eab00432517d0bf483c91c0963c7', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', |
'ecb-tbl-256: I=54'), |
('1a9527c29b8add4b0e3e656dbb2af8b4', '0797f41dc217c80446e1d514bd6ab197', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e', |
'ecb-tbl-256: I=55'), |
('7f99cf2c75244df015eb4b0c1050aeae', '9dfd76575902a637c01343c58e011a03', |
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536', |
'ecb-tbl-256: I=56'), |
('e84ff85b0d9454071909c1381646c4ed', 'acf4328ae78f34b9fa9b459747cc2658', |
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e', |
'ecb-tbl-256: I=57'), |
('89afd40f99521280d5399b12404f6db4', 'b0479aea12bac4fe2384cf98995150c6', |
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586', |
'ecb-tbl-256: I=58'), |
('a09ef32dbc5119a35ab7fa38656f0329', '9dd52789efe3ffb99f33b3da5030109a', |
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae', |
'ecb-tbl-256: I=59'), |
('61773457f068c376c7829b93e696e716', 'abbb755e4621ef8f1214c19f649fb9fd', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', |
'ecb-tbl-256: I=60'), |
('a34f0cae726cce41dd498747d891b967', 'da27fb8174357bce2bed0e7354f380f9', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', |
'ecb-tbl-256: I=61'), |
('856f59496c7388ee2d2b1a27b7697847', 'c59a0663f0993838f6e5856593bdc5ef', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526', |
'ecb-tbl-256: I=62'), |
('cb090c593ef7720bd95908fb93b49df4', 'ed60b264b5213e831607a99c0ce5e57e', |
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-256: I=63'), |
('a0ac75cd2f1923d460fc4d457ad95baf', 'e50548746846f3eb77b8c520640884ed', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-256: I=64'), |
('2a2b282974777689e8e9eeef525d5c5f', '28282cc7d21d6a2923641e52d188ef0c', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e', |
'ecb-tbl-256: I=65'), |
('909192939390919e0f0e09089788898a', '0dfa5b02abb18e5a815305216d6d4f8e', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', |
'ecb-tbl-256: I=66'), |
('777675748d8e8f907170777649464744', '7359635c0eecefe31d673395fb46fb99', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-256: I=67'), |
('717073720605040b2d2c2b2a05fafbf9', '73c679f7d5aef2745c9737bb4c47fb36', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516', |
'ecb-tbl-256: I=68'), |
('64656667fefdfcc31b1a1d1ca5aaaba8', 'b192bd472a4d2eafb786e97458967626', |
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e', |
'ecb-tbl-256: I=69'), |
('dbdad9d86a696867b5b4b3b2c8d7d6d5', '0ec327f6c8a2b147598ca3fde61dc6a4', |
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-256: I=70'), |
('5c5d5e5fe3e0e1fe31303736333c3d3e', 'fc418eb3c41b859b38d4b6f646629729', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e', |
'ecb-tbl-256: I=71'), |
('545556574b48494673727574546b6a69', '30249e5ac282b1c981ea64b609f3a154', |
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', |
'ecb-tbl-256: I=72'), |
('ecedeeefc6c5c4bb56575051f5fafbf8', '5e6e08646d12150776bb43c2d78a9703', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde', |
'ecb-tbl-256: I=73'), |
('464744452724252ac9c8cfced2cdcccf', 'faeb3d5de652cd3447dceb343f30394a', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506', |
'ecb-tbl-256: I=74'), |
('e6e7e4e54142435c878681801c131211', 'a8e88706823f6993ef80d05c1c7b2cf0', |
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e', |
'ecb-tbl-256: I=75'), |
('72737071cfcccdc2f9f8fffe710e0f0c', '8ced86677e6e00a1a1b15968f2d3cce6', |
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556', |
'ecb-tbl-256: I=76'), |
('505152537370714ec3c2c5c4010e0f0c', '9fc7c23858be03bdebb84e90db6786a9', |
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e', |
'ecb-tbl-256: I=77'), |
('a8a9aaab5c5f5e51aeafa8a93d222320', 'b4fbd65b33f70d8cf7f1111ac4649c36', |
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6', |
'ecb-tbl-256: I=78'), |
('dedfdcddf6f5f4eb10111617fef1f0f3', 'c5c32d5ed03c4b53cc8c1bd0ef0dbbf6', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce', |
'ecb-tbl-256: I=79'), |
('bdbcbfbe5e5d5c530b0a0d0cfac5c4c7', 'd1a7f03b773e5c212464b63709c6a891', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', |
'ecb-tbl-256: I=80'), |
('8a8b8889050606f8f4f5f2f3636c6d6e', '6b7161d8745947ac6950438ea138d028', |
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e', |
'ecb-tbl-256: I=81'), |
('a6a7a4a54d4e4f40b2b3b4b539262724', 'fd47a9f7e366ee7a09bc508b00460661', |
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546', |
'ecb-tbl-256: I=82'), |
('9c9d9e9fe9eaebf40e0f08099b949596', '00d40b003dc3a0d9310b659b98c7e416', |
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e', |
'ecb-tbl-256: I=83'), |
('2d2c2f2e1013121dcccdcacbed121310', 'eea4c79dcc8e2bda691f20ac48be0717', |
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596', |
'ecb-tbl-256: I=84'), |
('f4f5f6f7edeeefd0eaebecedf7f8f9fa', 'e78f43b11c204403e5751f89d05a2509', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe', |
'ecb-tbl-256: I=85'), |
('3d3c3f3e282b2a2573727574150a0b08', 'd0f0e3d1f1244bb979931e38dd1786ef', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', |
'ecb-tbl-256: I=86'), |
('b6b7b4b5f8fbfae5b4b5b2b3a0afaead', '042e639dc4e1e4dde7b75b749ea6f765', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e', |
'ecb-tbl-256: I=87'), |
('b7b6b5b4989b9a95878681809ba4a5a6', 'bc032fdd0efe29503a980a7d07ab46a8', |
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536', |
'ecb-tbl-256: I=88'), |
('a8a9aaabe5e6e798e9e8efee4748494a', '0c93ac949c0da6446effb86183b6c910', |
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e', |
'ecb-tbl-256: I=89'), |
('ecedeeefd9dadbd4b9b8bfbe657a7b78', 'e0d343e14da75c917b4a5cec4810d7c2', |
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586', |
'ecb-tbl-256: I=90'), |
('7f7e7d7c696a6b74cacbcccd929d9c9f', '0eafb821748408279b937b626792e619', |
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae', |
'ecb-tbl-256: I=91'), |
('08090a0b0605040bfffef9f8b9c6c7c4', 'fa1ac6e02d23b106a1fef18b274a553f', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', |
'ecb-tbl-256: I=92'), |
('08090a0bf1f2f3ccfcfdfafb68676665', '0dadfe019cd12368075507df33c1a1e9', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', |
'ecb-tbl-256: I=93'), |
('cacbc8c93a393837050403020d121310', '3a0879b414465d9ffbaf86b33a63a1b9', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526', |
'ecb-tbl-256: I=94'), |
('e9e8ebea8281809f8f8e8988343b3a39', '62199fadc76d0be1805d3ba0b7d914bf', |
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-256: I=95'), |
('515053524645444bd0d1d6d7340b0a09', '1b06d6c5d333e742730130cf78e719b4', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-256: I=96'), |
('42434041ecefee1193929594c6c9c8cb', 'f1f848824c32e9dcdcbf21580f069329', |
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e', |
'ecb-tbl-256: I=97'), |
('efeeedecc2c1c0cf76777071455a5b58', '1a09050cbd684f784d8e965e0782f28a', |
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', |
'ecb-tbl-256: I=98'), |
('5f5e5d5c3f3c3d221d1c1b1a19161714', '79c2969e7ded2ba7d088f3f320692360', |
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee', |
'ecb-tbl-256: I=99'), |
('000102034142434c1c1d1a1b8d727371', '091a658a2f7444c16accb669450c7b63', |
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516', |
'ecb-tbl-256: I=100'), |
('8e8f8c8db1b2b38c56575051050a0b08', '97c1e3a72cca65fa977d5ed0e8a7bbfc', |
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e', |
'ecb-tbl-256: I=101'), |
('a7a6a5a4e8ebeae57f7e7978cad5d4d7', '70c430c6db9a17828937305a2df91a2a', |
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566', |
'ecb-tbl-256: I=102'), |
('8a8b888994979689454443429f909192', '629553457fbe2479098571c7c903fde8', |
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e', |
'ecb-tbl-256: I=103'), |
('8c8d8e8fe0e3e2ed45444342f1cecfcc', 'a25b25a61f612669e7d91265c7d476ba', |
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', |
'ecb-tbl-256: I=104'), |
('fffefdfc4c4f4e31d8d9dedfb6b9b8bb', 'eb7e4e49b8ae0f024570dda293254fed', |
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde', |
'ecb-tbl-256: I=105'), |
('fdfcfffecccfcec12f2e29286679787b', '38fe15d61cca84516e924adce5014f67', |
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506', |
'ecb-tbl-256: I=106'), |
('67666564bab9b8a77071767719161714', '3ad208492249108c9f3ebeb167ad0583', |
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e', |
'ecb-tbl-256: I=107'), |
('9a9b98992d2e2f2084858283245b5a59', '299ba9f9bf5ab05c3580fc26edd1ed12', |
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556', |
'ecb-tbl-256: I=108'), |
('a4a5a6a70b0809365c5d5a5b2c232221', '19dc705b857a60fb07717b2ea5717781', |
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e', |
'ecb-tbl-256: I=109'), |
('464744455754555af3f2f5f4afb0b1b2', 'ffc8aeb885b5efcad06b6dbebf92e76b', |
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6', |
'ecb-tbl-256: I=110'), |
('323330317675746b7273747549464744', 'f58900c5e0b385253ff2546250a0142b', |
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce', |
'ecb-tbl-256: I=111'), |
('a8a9aaab181b1a15808186872b141516', '2ee67b56280bc462429cee6e3370cbc1', |
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', |
'ecb-tbl-256: I=112'), |
('e7e6e5e4202323ddaaabacad343b3a39', '20db650a9c8e9a84ab4d25f7edc8f03f', |
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e', |
'ecb-tbl-256: I=113'), |
('a8a9aaab2221202fedecebea1e010003', '3c36da169525cf818843805f25b78ae5', |
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546', |
'ecb-tbl-256: I=114'), |
('f9f8fbfa5f5c5d42424344450e010003', '9a781d960db9e45e37779042fea51922', |
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e', |
'ecb-tbl-256: I=115'), |
('57565554f5f6f7f89697909120dfdedd', '6560395ec269c672a3c288226efdba77', |
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596', |
'ecb-tbl-256: I=116'), |
('f8f9fafbcccfcef1dddcdbda0e010003', '8c772b7a189ac544453d5916ebb27b9a', |
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe', |
'ecb-tbl-256: I=117'), |
('d9d8dbda7073727d80818687c2dddcdf', '77ca5468cc48e843d05f78eed9d6578f', |
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', |
'ecb-tbl-256: I=118'), |
('c5c4c7c6080b0a1588898e8f68676665', '72cdcc71dc82c60d4429c9e2d8195baa', |
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e', |
'ecb-tbl-256: I=119'), |
('83828180dcdfded186878081f0cfcecd', '8080d68ce60e94b40b5b8b69eeb35afa', |
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536', |
'ecb-tbl-256: I=120'), |
('98999a9bdddedfa079787f7e0a050407', '44222d3cde299c04369d58ac0eba1e8e', |
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e', |
'ecb-tbl-256: I=121'), |
('cecfcccd4f4c4d429f9e9998dfc0c1c2', '9b8721b0a8dfc691c5bc5885dbfcb27a', |
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586', |
'ecb-tbl-256: I=122'), |
('404142436665647b29282f2eaba4a5a6', '0dc015ce9a3a3414b5e62ec643384183', |
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae', |
'ecb-tbl-256: I=123'), |
('33323130e6e5e4eb23222524dea1a0a3', '705715448a8da412025ce38345c2a148', |
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', |
'ecb-tbl-256: I=124'), |
('cfcecdccf6f5f4cbe6e7e0e199969794', 'c32b5b0b6fbae165266c569f4b6ecf0b', |
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', |
'ecb-tbl-256: I=125'), |
('babbb8b97271707fdcdddadb29363734', '4dca6c75192a01ddca9476af2a521e87', |
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526', |
'ecb-tbl-256: I=126'), |
('c9c8cbca4447465926272021545b5a59', '058691e627ecbc36ac07b6db423bd698', |
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e', |
'ecb-tbl-256: I=127'), |
('050407067477767956575051221d1c1f', '7444527095838fe080fc2bcdd30847eb', |
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576', |
'ecb-tbl-256: I=128'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import AES |
from common import make_block_tests |
return make_block_tests(AES, "AES", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_XOR.py |
---|
0,0 → 1,68 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/XOR.py: Self-test for the XOR "cipher" |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.XOR""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
test_data = [ |
# Test vectors written from scratch. (Nobody posts XOR test vectors on the web? How disappointing.) |
('01', '01', |
'00', |
'zero key'), |
('0102040810204080', '0003050911214181', |
'01', |
'1-byte key'), |
('0102040810204080', 'cda8c8a2dc8a8c2a', |
'ccaa', |
'2-byte key'), |
('ff'*64, 'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0'*2, |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', |
'32-byte key'), |
# XOR truncates at 32 bytes. |
('ff'*64, 'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0'*2, |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f55', |
'33-byte key (truncated to 32 bytes)'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import XOR |
from common import make_stream_tests |
return make_stream_tests(XOR, "XOR", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/common.py |
---|
0,0 → 1,189 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Hash/common.py: Common code for CryptoPlus.SelfTest.Hash |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-testing for PyCryptoPlus hash modules""" |
__revision__ = "$Id$" |
import sys |
import unittest |
from binascii import a2b_hex, b2a_hex |
# For compatibility with Python 2.1 and Python 2.2 |
if sys.hexversion < 0x02030000: |
# Python 2.1 doesn't have a dict() function |
# Python 2.2 dict() function raises TypeError if you do dict(MD5='blah') |
def dict(**kwargs): |
return kwargs.copy() |
else: |
dict = __builtins__['dict'] |
class _NoDefault: pass # sentinel object |
def _extract(d, k, default=_NoDefault): |
"""Get an item from a dictionary, and remove it from the dictionary.""" |
try: |
retval = d[k] |
except KeyError: |
if default is _NoDefault: |
raise |
return default |
del d[k] |
return retval |
# Generic cipher test case |
class CipherSelfTest(unittest.TestCase): |
def __init__(self, module, params): |
unittest.TestCase.__init__(self) |
self.module = module |
# Extract the parameters |
params = params.copy() |
self.description = _extract(params, 'description') |
self.key = _extract(params, 'key') |
self.plaintext = _extract(params, 'plaintext') |
self.ciphertext = _extract(params, 'ciphertext') |
mode = _extract(params, 'mode', None) |
if mode is not None: |
# Block cipher |
self.mode = getattr(self.module, "MODE_" + mode) |
self.iv = _extract(params, 'iv', None) |
else: |
# Stream cipher |
self.mode = None |
self.iv = None |
self.extra_params = params |
def shortDescription(self): |
return self.description |
def _new(self): |
if self.mode is None: |
# Stream cipher |
return self.module.new(a2b_hex(self.key), **self.extra_params) |
elif self.iv is None: |
# Block cipher without iv |
return self.module.new(a2b_hex(self.key), self.mode, **self.extra_params) |
else: |
# Block cipher with iv |
return self.module.new(a2b_hex(self.key), self.mode, a2b_hex(self.iv), **self.extra_params) |
def runTest(self): |
plaintext = a2b_hex(self.plaintext) |
ciphertext = a2b_hex(self.ciphertext) |
ct1 = b2a_hex(self._new().encrypt(plaintext)) |
pt1 = b2a_hex(self._new().decrypt(ciphertext)) |
ct2 = b2a_hex(self._new().encrypt(plaintext)) |
pt2 = b2a_hex(self._new().decrypt(ciphertext)) |
self.assertEqual(self.ciphertext, ct1) |
self.assertEqual(self.ciphertext, ct2) |
self.assertEqual(self.plaintext, pt1) |
self.assertEqual(self.plaintext, pt2) |
def make_block_tests(module, module_name, test_data): |
tests = [] |
for i in range(len(test_data)): |
row = test_data[i] |
# Build the "params" dictionary |
params = {'mode': 'ECB'} |
if len(row) == 3: |
(params['plaintext'], params['ciphertext'], params['key']) = row |
elif len(row) == 4: |
(params['plaintext'], params['ciphertext'], params['key'], params['description']) = row |
elif len(row) == 5: |
(params['plaintext'], params['ciphertext'], params['key'], params['description'], extra_params) = row |
params.update(extra_params) |
else: |
raise AssertionError("Unsupported tuple size %d" % (len(row),)) |
# Build the display-name for the test |
p2 = params.copy() |
p_key = _extract(p2, 'key') |
p_plaintext = _extract(p2, 'plaintext') |
p_ciphertext = _extract(p2, 'ciphertext') |
p_description = _extract(p2, 'description', None) |
p_mode = p2.get('mode', 'ECB') |
if p_mode == 'ECB': |
_extract(p2, 'mode', 'ECB') |
if p_description is not None: |
description = p_description |
elif p_mode == 'ECB' and not p2: |
description = "p=%s, k=%s" % (p_plaintext, p_key) |
else: |
description = "p=%s, k=%s, %r" % (p_plaintext, p_key, p2) |
name = "%s #%d: %s" % (module_name, i+1, description) |
params['description'] = name |
# Add the test to the test suite |
tests.append(CipherSelfTest(module, params)) |
return tests |
def make_stream_tests(module, module_name, test_data): |
tests = [] |
for i in range(len(test_data)): |
row = test_data[i] |
# Build the "params" dictionary |
params = {} |
if len(row) == 3: |
(params['plaintext'], params['ciphertext'], params['key']) = row |
elif len(row) == 4: |
(params['plaintext'], params['ciphertext'], params['key'], params['description']) = row |
elif len(row) == 5: |
(params['plaintext'], params['ciphertext'], params['key'], params['description'], extra_params) = row |
params.update(extra_params) |
else: |
raise AssertionError("Unsupported tuple size %d" % (len(row),)) |
# Build the display-name for the test |
p2 = params.copy() |
p_key = _extract(p2, 'key') |
p_plaintext = _extract(p2, 'plaintext') |
p_ciphertext = _extract(p2, 'ciphertext') |
p_description = _extract(p2, 'description', None) |
if p_description is not None: |
description = p_description |
elif not p2: |
description = "p=%s, k=%s" % (p_plaintext, p_key) |
else: |
description = "p=%s, k=%s, %r" % (p_plaintext, p_key, p2) |
name = "%s #%d: %s" % (module_name, i+1, description) |
params['description'] = name |
# Add the test to the test suite |
tests.append(CipherSelfTest(module, params)) |
return tests |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_ARC4.py |
---|
0,0 → 1,83 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/ARC4.py: Self-test for the Alleged-RC4 cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.ARC4""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key[, description]) tuples. |
test_data = [ |
# Test vectors from Eric Rescorla's message with the subject |
# "RC4 compatibility testing", sent to the cipherpunks mailing list on |
# September 13, 1994. |
# http://cypherpunks.venona.com/date/1994/09/msg00420.html |
('0123456789abcdef', '75b7878099e0c596', '0123456789abcdef', |
'Test vector 0'), |
('0000000000000000', '7494c2e7104b0879', '0123456789abcdef', |
'Test vector 1'), |
('0000000000000000', 'de188941a3375d3a', '0000000000000000', |
'Test vector 2'), |
('00000000000000000000', 'd6a141a7ec3c38dfbd61', 'ef012345', |
'Test vector 3'), |
('01' * 512, |
'7595c3e6114a09780c4ad452338e1ffd9a1be9498f813d76533449b6778dcad8' |
+ 'c78a8d2ba9ac66085d0e53d59c26c2d1c490c1ebbe0ce66d1b6b1b13b6b919b8' |
+ '47c25a91447a95e75e4ef16779cde8bf0a95850e32af9689444fd377108f98fd' |
+ 'cbd4e726567500990bcc7e0ca3c4aaa304a387d20f3b8fbbcd42a1bd311d7a43' |
+ '03dda5ab078896ae80c18b0af66dff319616eb784e495ad2ce90d7f772a81747' |
+ 'b65f62093b1e0db9e5ba532fafec47508323e671327df9444432cb7367cec82f' |
+ '5d44c0d00b67d650a075cd4b70dedd77eb9b10231b6b5b741347396d62897421' |
+ 'd43df9b42e446e358e9c11a9b2184ecbef0cd8e7a877ef968f1390ec9b3d35a5' |
+ '585cb009290e2fcde7b5ec66d9084be44055a619d9dd7fc3166f9487f7cb2729' |
+ '12426445998514c15d53a18c864ce3a2b7555793988126520eacf2e3066e230c' |
+ '91bee4dd5304f5fd0405b35bd99c73135d3d9bc335ee049ef69b3867bf2d7bd1' |
+ 'eaa595d8bfc0066ff8d31509eb0c6caa006c807a623ef84c3d33c195d23ee320' |
+ 'c40de0558157c822d4b8c569d849aed59d4e0fd7f379586b4b7ff684ed6a189f' |
+ '7486d49b9c4bad9ba24b96abf924372c8a8fffb10d55354900a77a3db5f205e1' |
+ 'b99fcd8660863a159ad4abe40fa48934163ddde542a6585540fd683cbfd8c00f' |
+ '12129a284deacc4cdefe58be7137541c047126c8d49e2755ab181ab7e940b0c0', |
'0123456789abcdef', |
"Test vector 4"), |
] |
def get_tests(): |
from CryptoPlus.Cipher import ARC4 |
from common import make_stream_tests |
return make_stream_tests(ARC4, "ARC4", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_RC5.py |
---|
0,0 → 1,94 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/RC5.py: Self-test for the RC5 cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.RC5""" |
__revision__ = "$Id$" |
from common import dict # For compatibility with Python 2.1 and 2.2 |
# This is a list of (plaintext, ciphertext, key, description or None, extra_params) tuples. |
test_data = [ |
# Test vectors from http://theory.lcs.mit.edu/~rivest/Rivest-rc5rev.pdf |
# Rivest, R. L. (1994). "The RC5 Encryption Algorithm" (pdf). Proceedings |
# of the Second International Workshop on Fast Software Encryption (FSE) |
# 1994e: 86–96. |
('0000000000000000', '21a5dbee154b8f6d', '00000000000000000000000000000000', |
"Rivest94-1", dict(word_size=32, rounds=12)), |
('21a5dbee154b8f6d', 'f7c013ac5b2b8952', '915f4619be41b2516355a50110a9ce91', |
"Rivest94-2", dict(word_size=32, rounds=12)), |
('f7c013ac5b2b8952', '2f42b3b70369fc92', '783348e75aeb0f2fd7b169bb8dc16787', |
"Rivest94-3", dict(word_size=32, rounds=12)), |
('2f42b3b70369fc92', '65c178b284d197cc', 'dc49db1375a5584f6485b413b5f12baf', |
"Rivest94-4", dict(word_size=32, rounds=12)), |
('65c178b284d197cc', 'eb44e415da319824', '5269f149d41ba0152497574d7f153125', |
"Rivest94-5", dict(word_size=32, rounds=12)), |
# Test vectors from RFC 2040 |
('0000000000000000', '7a7bba4d79111d1e', '00', 'RFC2040-1', dict(rounds=0, mode='CBC', iv='0000000000000000')), |
('ffffffffffffffff', '797bba4d78111d1e', '00', 'RFC2040-2', dict(rounds=0, mode='CBC', iv='0000000000000000')), |
('0000000000000000', '7a7bba4d79111d1f', '00', 'RFC2040-3', dict(rounds=0, mode='CBC', iv='0000000000000001')), |
('0000000000000001', '7a7bba4d79111d1f', '00', 'RFC2040-4', dict(rounds=0, mode='CBC', iv='0000000000000000')), |
('1020304050607080', '8b9ded91ce7794a6', '00', 'RFC2040-5', dict(rounds=0, mode='CBC', iv='0102030405060708')), |
('0000000000000000', '2f759fe7ad86a378', '11', 'RFC2040-6', dict(rounds=1, mode='CBC', iv='0000000000000000')), |
('0000000000000000', 'dca2694bf40e0788', '00', 'RFC2040-7', dict(rounds=2, mode='CBC', iv='0000000000000000')), |
('0000000000000000', 'dca2694bf40e0788', '00000000', 'RFC2040-8', dict(rounds=2, mode='CBC', iv='0000000000000000')), |
('0000000000000000', 'dcfe098577eca5ff', '00', 'RFC2040-9', dict(rounds=8, mode='CBC', iv='0000000000000000')), |
('1020304050607080', '9646fb77638f9ca8', '00', 'RFC2040-10', dict(rounds=8, mode='CBC', iv='0102030405060708')), |
('1020304050607080', 'b2b3209db6594da4', '00', 'RFC2040-11', dict(rounds=12, mode='CBC', iv='0102030405060708')), |
('1020304050607080', '545f7f32a5fc3836', '00', 'RFC2040-12', dict(rounds=16, mode='CBC', iv='0102030405060708')), |
('ffffffffffffffff', '8285e7c1b5bc7402', '01020304', 'RFC2040-13', dict(rounds=8, mode='CBC', iv='0000000000000000')), |
('ffffffffffffffff', 'fc586f92f7080934', '01020304', 'RFC2040-14', dict(rounds=12, mode='CBC', iv='0000000000000000')), |
('ffffffffffffffff', 'cf270ef9717ff7c4', '01020304', 'RFC2040-15', dict(rounds=16, mode='CBC', iv='0000000000000000')), |
('ffffffffffffffff', 'e493f1c1bb4d6e8c', '0102030405060708', 'RFC2040-16', dict(rounds=12, mode='CBC', iv='0000000000000000')), |
('1020304050607080', '5c4c041e0f217ac3', '0102030405060708', 'RFC2040-17', dict(rounds=8, mode='CBC', iv='0102030405060708')), |
('1020304050607080', '921f12485373b4f7', '0102030405060708', 'RFC2040-18', dict(rounds=12, mode='CBC', iv='0102030405060708')), |
('1020304050607080', '5ba0ca6bbe7f5fad', '0102030405060708', 'RFC2040-19', dict(rounds=16, mode='CBC', iv='0102030405060708')), |
('1020304050607080', 'c533771cd0110e63', '01020304050607081020304050607080', 'RFC2040-20', dict(rounds=8, mode='CBC', iv='0102030405060708')), |
('1020304050607080', '294ddb46b3278d60', '01020304050607081020304050607080', 'RFC2040-21', dict(rounds=12, mode='CBC', iv='0102030405060708')), |
('1020304050607080', 'dad6bda9dfe8f7e8', '01020304050607081020304050607080', 'RFC2040-22', dict(rounds=16, mode='CBC', iv='0102030405060708')), |
('ffffffffffffffff', '97e0787837ed317f', '0102030405', 'RFC2040-23', dict(rounds=12, mode='CBC', iv='0000000000000000')), |
('ffffffffffffffff', '7875dbf6738c6478', '0102030405', 'RFC2040-24', dict(rounds=8, mode='CBC', iv='0000000000000000')), |
('0808080808080808', '8f34c3c681c99695', '0102030405', 'RFC2040-25', dict(rounds=8, mode='CBC', iv='7875dbf6738c6478')), |
# ('ffffffffffffffff', '7875dbf6738c64788f34c3c681c99695', '0102030405', 'RFC2040-26', dict(rounds=8, mode='CBC-Pad', iv='0000000000000000')), |
('0000000000000000', '7cb3f1df34f94811', '0102030405', 'RFC2040-27', dict(rounds=8, mode='CBC', iv='0000000000000000')), |
('1122334455667701', '7fd1a023a5bba217', '0102030405', 'RFC2040-28', dict(rounds=8, mode='CBC', iv='7cb3f1df34f94811')), |
# ('ffffffffffffffff7875dbf6738c647811223344556677', '7875dbf6738c64787cb3f1df34f948117fd1a023a5bba217', '0102030405', 'RFC2040-29', dict(rounds=8, mode='CBC-Pad', iv='0000000000000000')), |
] |
def get_tests(): |
from CryptoPlus.Cipher import RC5 |
from common import make_block_tests |
return make_block_tests(RC5, "RC5", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_python_AES.py |
---|
0,0 → 1,87 |
"""Self-test suite for CryptoPlus.Cipher.python_AES""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
# TODO: add CTR test vectors |
test_data = [ |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7', |
'2b7e151628aed2a6abf7158809cf4f3c', |
'CBC 1', |
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd', |
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'CBC 2', |
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b', |
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'CBC 3', |
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6', |
'2b7e151628aed2a6abf7158809cf4f3c', |
'CFB 1', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ff', |
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'CFB 2', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471', |
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'CFB 3', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e', |
'2b7e151628aed2a6abf7158809cf4f3c', |
'OFB 1', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a', |
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'OFB 2', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484', |
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'OFB 3', |
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee', |
'2b7e151628aed2a6abf7158809cf4f3c', |
'CTR 1', |
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')", |
'mode': 'CTR'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050', |
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'CTR 2', |
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')", |
'mode': 'CTR'}), |
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6', |
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'CTR 3', |
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')", |
'mode': 'CTR'}) |
] |
def get_tests(): |
from CryptoPlus.Cipher import python_AES |
from common import make_block_tests |
return make_block_tests(python_AES, "python_AES", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
#CONVERSION OLD TEST VECTORS: |
#CFB example: |
#for i in range(1,len(dict_cbc_aes)/4 + 1): |
# test.append((dict_cfb_aes['msg%i'%i],dict_cfb_aes['cip%i'%i],dict_cfb_aes['key%i'%i],"CFB %i"%i,dict(mode='CFB',iv=dict_cfb_aes['iv%i'%i]))) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_CAST.py |
---|
0,0 → 1,59 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Cipher/CAST.py: Self-test for the CAST-128 (CAST5) cipher |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Cipher.CAST""" |
__revision__ = "$Id$" |
# This is a list of (plaintext, ciphertext, key) tuples. |
test_data = [ |
# Test vectors from RFC 2144, B.1 |
('0123456789abcdef', '238b4fe5847e44b2', |
'0123456712345678234567893456789a', |
'128-bit key'), |
('0123456789abcdef', 'eb6a711a2c02271b', |
'01234567123456782345', |
'80-bit key'), |
('0123456789abcdef', '7ac816d16e9b302e', |
'0123456712', |
'40-bit key'), |
] |
def get_tests(): |
from CryptoPlus.Cipher import CAST |
from common import make_block_tests |
return make_block_tests(CAST, "CAST", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Util/test_number.py |
---|
0,0 → 1,241 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_number.py: Self-test for parts of the CryptoPlus.Util.number module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-tests for (some of) CryptoPlus.Util.number""" |
__revision__ = "$Id$" |
from CryptoPlus.Util.python_compat import * |
import unittest |
# NB: In some places, we compare tuples instead of just output values so that |
# if any inputs cause a test failure, we'll be able to tell which ones. |
class MiscTests(unittest.TestCase): |
def setUp(self): |
global number, math |
from CryptoPlus.Util import number |
import math |
def test_ceil_shift(self): |
"""Util.number.ceil_shift""" |
self.assertRaises(AssertionError, number.ceil_shift, -1, 1) |
self.assertRaises(AssertionError, number.ceil_shift, 1, -1) |
# b = 0 |
self.assertEqual(0, number.ceil_shift(0, 0)) |
self.assertEqual(1, number.ceil_shift(1, 0)) |
self.assertEqual(2, number.ceil_shift(2, 0)) |
self.assertEqual(3, number.ceil_shift(3, 0)) |
# b = 1 |
self.assertEqual(0, number.ceil_shift(0, 1)) |
self.assertEqual(1, number.ceil_shift(1, 1)) |
self.assertEqual(1, number.ceil_shift(2, 1)) |
self.assertEqual(2, number.ceil_shift(3, 1)) |
# b = 2 |
self.assertEqual(0, number.ceil_shift(0, 2)) |
self.assertEqual(1, number.ceil_shift(1, 2)) |
self.assertEqual(1, number.ceil_shift(2, 2)) |
self.assertEqual(1, number.ceil_shift(3, 2)) |
self.assertEqual(1, number.ceil_shift(4, 2)) |
self.assertEqual(2, number.ceil_shift(5, 2)) |
self.assertEqual(2, number.ceil_shift(6, 2)) |
self.assertEqual(2, number.ceil_shift(7, 2)) |
self.assertEqual(2, number.ceil_shift(8, 2)) |
self.assertEqual(3, number.ceil_shift(9, 2)) |
for b in range(3, 1+129, 3): # 3, 6, ... , 129 |
self.assertEqual(0, number.ceil_shift(0, b)) |
n = 1L |
while n <= 2L**(b+2): |
(q, r) = divmod(n-1, 2L**b) |
expected = q + int(not not r) |
self.assertEqual((n-1, b, expected), |
(n-1, b, number.ceil_shift(n-1, b))) |
(q, r) = divmod(n, 2L**b) |
expected = q + int(not not r) |
self.assertEqual((n, b, expected), |
(n, b, number.ceil_shift(n, b))) |
(q, r) = divmod(n+1, 2L**b) |
expected = q + int(not not r) |
self.assertEqual((n+1, b, expected), |
(n+1, b, number.ceil_shift(n+1, b))) |
n *= 2 |
def test_ceil_div(self): |
"""Util.number.ceil_div""" |
self.assertRaises(TypeError, number.ceil_div, "1", 1) |
self.assertRaises(ZeroDivisionError, number.ceil_div, 1, 0) |
self.assertRaises(ZeroDivisionError, number.ceil_div, -1, 0) |
# b = -1 |
self.assertEqual(0, number.ceil_div(0, -1)) |
self.assertEqual(-1, number.ceil_div(1, -1)) |
self.assertEqual(-2, number.ceil_div(2, -1)) |
self.assertEqual(-3, number.ceil_div(3, -1)) |
# b = 1 |
self.assertEqual(0, number.ceil_div(0, 1)) |
self.assertEqual(1, number.ceil_div(1, 1)) |
self.assertEqual(2, number.ceil_div(2, 1)) |
self.assertEqual(3, number.ceil_div(3, 1)) |
# b = 2 |
self.assertEqual(0, number.ceil_div(0, 2)) |
self.assertEqual(1, number.ceil_div(1, 2)) |
self.assertEqual(1, number.ceil_div(2, 2)) |
self.assertEqual(2, number.ceil_div(3, 2)) |
self.assertEqual(2, number.ceil_div(4, 2)) |
self.assertEqual(3, number.ceil_div(5, 2)) |
# b = 3 |
self.assertEqual(0, number.ceil_div(0, 3)) |
self.assertEqual(1, number.ceil_div(1, 3)) |
self.assertEqual(1, number.ceil_div(2, 3)) |
self.assertEqual(1, number.ceil_div(3, 3)) |
self.assertEqual(2, number.ceil_div(4, 3)) |
self.assertEqual(2, number.ceil_div(5, 3)) |
self.assertEqual(2, number.ceil_div(6, 3)) |
self.assertEqual(3, number.ceil_div(7, 3)) |
# b = 4 |
self.assertEqual(0, number.ceil_div(0, 4)) |
self.assertEqual(1, number.ceil_div(1, 4)) |
self.assertEqual(1, number.ceil_div(2, 4)) |
self.assertEqual(1, number.ceil_div(3, 4)) |
self.assertEqual(1, number.ceil_div(4, 4)) |
self.assertEqual(2, number.ceil_div(5, 4)) |
self.assertEqual(2, number.ceil_div(6, 4)) |
self.assertEqual(2, number.ceil_div(7, 4)) |
self.assertEqual(2, number.ceil_div(8, 4)) |
self.assertEqual(3, number.ceil_div(9, 4)) |
# b = -4 |
self.assertEqual(3, number.ceil_div(-9, -4)) |
self.assertEqual(2, number.ceil_div(-8, -4)) |
self.assertEqual(2, number.ceil_div(-7, -4)) |
self.assertEqual(2, number.ceil_div(-6, -4)) |
self.assertEqual(2, number.ceil_div(-5, -4)) |
self.assertEqual(1, number.ceil_div(-4, -4)) |
self.assertEqual(1, number.ceil_div(-3, -4)) |
self.assertEqual(1, number.ceil_div(-2, -4)) |
self.assertEqual(1, number.ceil_div(-1, -4)) |
self.assertEqual(0, number.ceil_div(0, -4)) |
self.assertEqual(0, number.ceil_div(1, -4)) |
self.assertEqual(0, number.ceil_div(2, -4)) |
self.assertEqual(0, number.ceil_div(3, -4)) |
self.assertEqual(-1, number.ceil_div(4, -4)) |
self.assertEqual(-1, number.ceil_div(5, -4)) |
self.assertEqual(-1, number.ceil_div(6, -4)) |
self.assertEqual(-1, number.ceil_div(7, -4)) |
self.assertEqual(-2, number.ceil_div(8, -4)) |
self.assertEqual(-2, number.ceil_div(9, -4)) |
def test_exact_log2(self): |
"""Util.number.exact_log2""" |
self.assertRaises(TypeError, number.exact_log2, "0") |
self.assertRaises(ValueError, number.exact_log2, -1) |
self.assertRaises(ValueError, number.exact_log2, 0) |
self.assertEqual(0, number.exact_log2(1)) |
self.assertEqual(1, number.exact_log2(2)) |
self.assertRaises(ValueError, number.exact_log2, 3) |
self.assertEqual(2, number.exact_log2(4)) |
self.assertRaises(ValueError, number.exact_log2, 5) |
self.assertRaises(ValueError, number.exact_log2, 6) |
self.assertRaises(ValueError, number.exact_log2, 7) |
e = 3 |
n = 8 |
while e < 16: |
if n == 2**e: |
self.assertEqual(e, number.exact_log2(n), "expected=2**%d, n=%d" % (e, n)) |
e += 1 |
else: |
self.assertRaises(ValueError, number.exact_log2, n) |
n += 1 |
for e in range(16, 1+64, 2): |
self.assertRaises(ValueError, number.exact_log2, 2L**e-1) |
self.assertEqual(e, number.exact_log2(2L**e)) |
self.assertRaises(ValueError, number.exact_log2, 2L**e+1) |
def test_exact_div(self): |
"""Util.number.exact_div""" |
# Positive numbers |
self.assertEqual(1, number.exact_div(1, 1)) |
self.assertRaises(ValueError, number.exact_div, 1, 2) |
self.assertEqual(1, number.exact_div(2, 2)) |
self.assertRaises(ValueError, number.exact_div, 3, 2) |
self.assertEqual(2, number.exact_div(4, 2)) |
# Negative numbers |
self.assertEqual(-1, number.exact_div(-1, 1)) |
self.assertEqual(-1, number.exact_div(1, -1)) |
self.assertRaises(ValueError, number.exact_div, -1, 2) |
self.assertEqual(1, number.exact_div(-2, -2)) |
self.assertEqual(-2, number.exact_div(-4, 2)) |
# Zero dividend |
self.assertEqual(0, number.exact_div(0, 1)) |
self.assertEqual(0, number.exact_div(0, 2)) |
# Zero divisor (allow_divzero == False) |
self.assertRaises(ZeroDivisionError, number.exact_div, 0, 0) |
self.assertRaises(ZeroDivisionError, number.exact_div, 1, 0) |
# Zero divisor (allow_divzero == True) |
self.assertEqual(0, number.exact_div(0, 0, allow_divzero=True)) |
self.assertRaises(ValueError, number.exact_div, 1, 0, allow_divzero=True) |
def test_floor_div(self): |
"""Util.number.floor_div""" |
self.assertRaises(TypeError, number.floor_div, "1", 1) |
for a in range(-10, 10): |
for b in range(-10, 10): |
if b == 0: |
self.assertRaises(ZeroDivisionError, number.floor_div, a, b) |
else: |
self.assertEqual((a, b, int(math.floor(float(a) / b))), |
(a, b, number.floor_div(a, b))) |
def get_tests(): |
from CryptoPlus.SelfTest.st_common import list_test_cases |
return list_test_cases(MiscTests) |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Util/test_winrandom.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Util.winrandom""" |
__revision__ = "$Id$" |
import unittest |
class WinRandomImportTest(unittest.TestCase): |
def runTest(self): |
"""winrandom: simple test""" |
# Import the winrandom module and try to use it |
from CryptoPlus.Util import winrandom |
randobj = winrandom.new() |
x = randobj.get_bytes(16) |
y = randobj.get_bytes(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [WinRandomImportTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Util/__init__.py |
---|
0,0 → 1,47 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/__init__.py: Self-test for utility modules |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for utility modules""" |
__revision__ = "$Id$" |
import os |
def get_tests(): |
tests = [] |
if os.name == 'nt': |
import test_winrandom; tests += test_winrandom.get_tests() |
import test_number; tests += test_number.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_generic.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_generic.py: Self-test for the OSRNG.new() function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.OSRNG""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.OSRNG.new()""" |
# Import the OSRNG module and try to use it |
import CryptoPlus.Random.OSRNG |
randobj = CryptoPlus.Random.OSRNG.new() |
x = randobj.read(16) |
y = randobj.read(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_winrandom.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.OSRNG.winrandom""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.OSRNG.winrandom""" |
# Import the winrandom module and try to use it |
from CryptoPlus.Random.OSRNG import winrandom |
randobj = winrandom.new() |
x = randobj.get_bytes(16) |
y = randobj.get_bytes(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_fallback.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_fallback.py: Self-test for the OSRNG.fallback.new() function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.OSRNG.fallback""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.OSRNG.fallback.new()""" |
# Import the OSRNG.nt module and try to use it |
import CryptoPlus.Random.OSRNG.fallback |
randobj = CryptoPlus.Random.OSRNG.fallback.new() |
x = randobj.read(16) |
y = randobj.read(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/__init__.py |
---|
0,0 → 1,53 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Random/OSRNG/__init__.py: Self-test for OSRNG modules |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for CryptoPlus.Random.OSRNG package""" |
__revision__ = "$Id$" |
import os |
def get_tests(): |
tests = [] |
if os.name == 'nt': |
import test_nt; tests += test_nt.get_tests() |
import test_winrandom; tests += test_winrandom.get_tests() |
elif os.name == 'posix': |
import test_posix; tests += test_posix.get_tests() |
if hasattr(os, 'urandom'): |
import test_fallback; tests += test_fallback.get_tests() |
import test_generic; tests += test_generic.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_nt.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_generic.py: Self-test for the OSRNG.nt.new() function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.OSRNG.nt""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.OSRNG.nt.new()""" |
# Import the OSRNG.nt module and try to use it |
import CryptoPlus.Random.OSRNG.nt |
randobj = CryptoPlus.Random.OSRNG.nt.new() |
x = randobj.read(16) |
y = randobj.read(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_posix.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_posix.py: Self-test for the OSRNG.posix.new() function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.OSRNG.posix""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.OSRNG.posix.new()""" |
# Import the OSRNG.nt module and try to use it |
import CryptoPlus.Random.OSRNG.posix |
randobj = CryptoPlus.Random.OSRNG.posix.new() |
x = randobj.read(16) |
y = randobj.read(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_SHAd256.py |
---|
0,0 → 1,58 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Random/Fortuna/test_SHAd256.py: Self-test for the SHAd256 hash function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.Fortuna.SHAd256""" |
__revision__ = "$Id$" |
# This is a list of (expected_result, input[, description]) tuples. |
test_data = [ |
# I could not find any test vectors for SHAd256, so I made these vectors by |
# feeding some sample data into several plain SHA256 implementations |
# (including OpenSSL, the "sha256sum" tool, and this implementation). |
# This is a subset of the resulting test vectors. The complete list can be |
# found at: http://www.dlitz.net/crypto/shad256-test-vectors/ |
('5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456', |
'', "'' (empty string)"), |
('4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358', |
'abc'), |
('0cffe17f68954dac3a84fb1458bd5ec99209449749b2b308b7cb55812f9563af', |
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq') |
] |
def get_tests(): |
from CryptoPlus.Random.Fortuna import SHAd256 |
from CryptoPlus.SelfTest.Hash.common import make_hash_tests |
return make_hash_tests(SHAd256, "SHAd256", test_data) |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_FortunaAccumulator.py |
---|
0,0 → 1,190 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Random/Fortuna/test_FortunaAccumulator.py: Self-test for the FortunaAccumulator module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-tests for CryptoPlus.Random.Fortuna.FortunaAccumulator""" |
__revision__ = "$Id$" |
from CryptoPlus.Util.python_compat import * |
import unittest |
from binascii import b2a_hex |
class FortunaAccumulatorTests(unittest.TestCase): |
def setUp(self): |
global FortunaAccumulator |
from CryptoPlus.Random.Fortuna import FortunaAccumulator |
def test_FortunaPool(self): |
"""FortunaAccumulator.FortunaPool""" |
pool = FortunaAccumulator.FortunaPool() |
self.assertEqual(0, pool.length) |
self.assertEqual("5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456", pool.hexdigest()) |
pool.append("abc") |
self.assertEqual(3, pool.length) |
self.assertEqual("4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358", pool.hexdigest()) |
pool.append("dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") |
self.assertEqual(56, pool.length) |
self.assertEqual("0cffe17f68954dac3a84fb1458bd5ec99209449749b2b308b7cb55812f9563af", b2a_hex(pool.digest())) |
pool.reset() |
self.assertEqual(0, pool.length) |
pool.append("a" * 10**6) |
self.assertEqual(10**6, pool.length) |
self.assertEqual("80d1189477563e1b5206b2749f1afe4807e5705e8bd77887a60187a712156688", b2a_hex(pool.digest())) |
def test_which_pools(self): |
"""FortunaAccumulator.which_pools""" |
# which_pools(0) should fail |
self.assertRaises(AssertionError, FortunaAccumulator.which_pools, 0) |
self.assertEqual(FortunaAccumulator.which_pools(1), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(2), [0, 1]) |
self.assertEqual(FortunaAccumulator.which_pools(3), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(4), [0, 1, 2]) |
self.assertEqual(FortunaAccumulator.which_pools(5), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(6), [0, 1]) |
self.assertEqual(FortunaAccumulator.which_pools(7), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(8), [0, 1, 2, 3]) |
for i in range(1, 32): |
self.assertEqual(FortunaAccumulator.which_pools(2L**i-1), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(2L**i), range(i+1)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**i+1), [0]) |
self.assertEqual(FortunaAccumulator.which_pools(2L**31), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**32), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**33), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**34), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**35), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**36), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**64), range(32)) |
self.assertEqual(FortunaAccumulator.which_pools(2L**128), range(32)) |
def test_accumulator(self): |
"""FortunaAccumulator.FortunaAccumulator""" |
fa = FortunaAccumulator.FortunaAccumulator() |
# This should fail, because we haven't seeded the PRNG yet |
self.assertRaises(AssertionError, fa.random_data, 1) |
# Spread some test data across the pools (source number 42) |
# This would be horribly insecure in a real system. |
for p in range(32): |
fa.add_random_event(42, p, "X" * 32) |
self.assertEqual(32+2, fa.pools[p].length) |
# This should still fail, because we haven't seeded the PRNG with 64 bytes yet |
self.assertRaises(AssertionError, fa.random_data, 1) |
# Add more data |
for p in range(32): |
fa.add_random_event(42, p, "X" * 32) |
self.assertEqual((32+2)*2, fa.pools[p].length) |
# The underlying RandomGenerator should get seeded with Pool 0 |
# s = SHAd256(chr(42) + chr(32) + "X"*32 + chr(42) + chr(32) + "X"*32) |
# = SHA256(h'edd546f057b389155a31c32e3975e736c1dec030ddebb137014ecbfb32ed8c6f') |
# = h'aef42a5dcbddab67e8efa118e1b47fde5d697f89beb971b99e6e8e5e89fbf064' |
# The counter and the key before reseeding is: |
# C_0 = 0 |
# K_0 = "\x00" * 32 |
# The counter after reseeding is 1, and the new key after reseeding is |
# C_1 = 1 |
# K_1 = SHAd256(K_0 || s) |
# = SHA256(h'0eae3e401389fab86640327ac919ecfcb067359d95469e18995ca889abc119a6') |
# = h'aafe9d0409fbaaafeb0a1f2ef2014a20953349d3c1c6e6e3b962953bea6184dd' |
# The first block of random data, therefore, is |
# r_1 = AES-256(K_1, 1) |
# = AES-256(K_1, h'01000000000000000000000000000000') |
# = h'b7b86bd9a27d96d7bb4add1b6b10d157' |
# The second block of random data is |
# r_2 = AES-256(K_1, 2) |
# = AES-256(K_1, h'02000000000000000000000000000000') |
# = h'2350b1c61253db2f8da233be726dc15f' |
# The third and fourth blocks of random data (which become the new key) are |
# r_3 = AES-256(K_1, 3) |
# = AES-256(K_1, h'03000000000000000000000000000000') |
# = h'f23ad749f33066ff53d307914fbf5b21' |
# r_4 = AES-256(K_1, 4) |
# = AES-256(K_1, h'04000000000000000000000000000000') |
# = h'da9667c7e86ba247655c9490e9d94a7c' |
# K_2 = r_3 || r_4 |
# = h'f23ad749f33066ff53d307914fbf5b21da9667c7e86ba247655c9490e9d94a7c' |
# The final counter value is 5. |
self.assertEqual("aef42a5dcbddab67e8efa118e1b47fde5d697f89beb971b99e6e8e5e89fbf064", |
fa.pools[0].hexdigest()) |
self.assertEqual(None, fa.generator.key) |
self.assertEqual(0, fa.generator.counter.get_value()) |
result = fa.random_data(32) |
self.assertEqual("b7b86bd9a27d96d7bb4add1b6b10d157" "2350b1c61253db2f8da233be726dc15f", b2a_hex(result)) |
self.assertEqual("f23ad749f33066ff53d307914fbf5b21da9667c7e86ba247655c9490e9d94a7c", b2a_hex(fa.generator.key)) |
self.assertEqual(5, fa.generator.counter.get_value()) |
def test_accumulator_pool_length(self): |
"""FortunaAccumulator.FortunaAccumulator minimum pool length""" |
fa = FortunaAccumulator.FortunaAccumulator() |
# This test case is hard-coded to assume that FortunaAccumulator.min_pool_size is 64. |
self.assertEqual(fa.min_pool_size, 64) |
# The PRNG should not allow us to get random data from it yet |
self.assertRaises(AssertionError, fa.random_data, 1) |
# Add 60 bytes, 4 at a time (2 header + 2 payload) to each of the 32 pools |
for i in range(15): |
for p in range(32): |
# Add the bytes to the pool |
fa.add_random_event(2, p, "XX") |
# The PRNG should not allow us to get random data from it yet |
self.assertRaises(AssertionError, fa.random_data, 1) |
# Add 4 more bytes to pool 0 |
fa.add_random_event(2, 0, "XX") |
# We should now be able to get data from the accumulator |
fa.random_data(1) |
def get_tests(): |
from CryptoPlus.SelfTest.st_common import list_test_cases |
return list_test_cases(FortunaAccumulatorTests) |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/__init__.py |
---|
0,0 → 1,48 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Random/Fortuna/__init__.py: Self-test for Fortuna modules |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test for the CryptoPlus.Random.Fortuna package""" |
__revision__ = "$Id$" |
import os |
def get_tests(): |
tests = [] |
import test_FortunaAccumulator; tests += test_FortunaAccumulator.get_tests() |
import test_FortunaGenerator; tests += test_FortunaGenerator.get_tests() |
import test_SHAd256; tests += test_SHAd256.get_tests() |
return tests |
if __name__ == '__main__': |
import unittest |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_FortunaGenerator.py |
---|
0,0 → 1,84 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Random/Fortuna/test_FortunaGenerator.py: Self-test for the FortunaGenerator module |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-tests for CryptoPlus.Random.Fortuna.FortunaGenerator""" |
__revision__ = "$Id$" |
from CryptoPlus.Util.python_compat import * |
import unittest |
from binascii import b2a_hex |
class FortunaGeneratorTests(unittest.TestCase): |
def setUp(self): |
global FortunaGenerator |
from CryptoPlus.Random.Fortuna import FortunaGenerator |
def test_generator(self): |
"""FortunaGenerator.AESGenerator""" |
fg = FortunaGenerator.AESGenerator() |
# We shouldn't be able to read data until we've seeded the generator |
self.assertRaises(Exception, fg.pseudo_random_data, 1) |
self.assertEqual(0, fg.counter.get_value()) |
# Seed the generator, which should set the key and increment the counter. |
fg.reseed("Hello") |
self.assertEqual("0ea6919d4361551364242a4ba890f8f073676e82cf1a52bb880f7e496648b565", b2a_hex(fg.key)) |
self.assertEqual(1, fg.counter.get_value()) |
# Read 2 full blocks from the generator |
self.assertEqual("7cbe2c17684ac223d08969ee8b565616" + # counter=1 |
"717661c0d2f4758bd6ba140bf3791abd", # counter=2 |
b2a_hex(fg.pseudo_random_data(32))) |
# Meanwhile, the generator will have re-keyed itself and incremented its counter |
self.assertEqual("33a1bb21987859caf2bbfc5615bef56d" + # counter=3 |
"e6b71ff9f37112d0c193a135160862b7", # counter=4 |
b2a_hex(fg.key)) |
self.assertEqual(5, fg.counter.get_value()) |
# Read another 2 blocks from the generator |
self.assertEqual("fd6648ba3086e919cee34904ef09a7ff" + # counter=5 |
"021f77580558b8c3e9248275f23042bf", # counter=6 |
b2a_hex(fg.pseudo_random_data(32))) |
# Try to read more than 2**20 bytes using the internal function. This should fail. |
self.assertRaises(AssertionError, fg._pseudo_random_data, 2**20+1) |
def get_tests(): |
from CryptoPlus.SelfTest.st_common import list_test_cases |
return list_test_cases(FortunaGeneratorTests) |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG.new |
---|
--- python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_rpoolcompat.py (nonexistent) |
+++ python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_rpoolcompat.py (revision 182) |
@@ -0,0 +1,57 @@ |
+# -*- coding: utf-8 -*- |
+# |
+# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module |
+# |
+# ======================================================================= |
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining |
+# a copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, |
+# distribute, sublicense, and/or sell copies of the Software, and to |
+# permit persons to whom the Software is furnished to do so. |
+# |
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+# ======================================================================= |
+# |
+ |
+"""Self-test for the CryptoPlus.Random.RandomPoolCompat class""" |
+ |
+__revision__ = "$Id$" |
+ |
+import unittest |
+ |
+class SimpleTest(unittest.TestCase): |
+ def runTest(self): |
+ """CryptoPlus.Random.RandomPoolCompat""" |
+ # Import the winrandom module and try to use it |
+ from CryptoPlus.Random import RandomPoolCompat |
+ rpool = RandomPoolCompat() |
+ x = rpool.get_bytes(16) |
+ y = rpool.get_bytes(16) |
+ self.assertNotEqual(x, y) |
+ self.assertNotEqual(rpool.entropy, 0) |
+ |
+ rpool.randomize() |
+ rpool.stir('foo') |
+ rpool.add_event('foo') |
+ |
+def get_tests(): |
+ return [SimpleTest()] |
+ |
+if __name__ == '__main__': |
+ suite = lambda: unittest.TestSuite(get_tests()) |
+ unittest.main(defaultTest='suite') |
+ |
+# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna.new |
---|
--- python-cryptoplus/src/CryptoPlus/SelfTest/Random/__init__.py (nonexistent) |
+++ python-cryptoplus/src/CryptoPlus/SelfTest/Random/__init__.py (revision 182) |
@@ -0,0 +1,46 @@ |
+# -*- coding: utf-8 -*- |
+# |
+# SelfTest/Random/__init__.py: Self-test for random number generation modules |
+# |
+# ======================================================================= |
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining |
+# a copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, |
+# distribute, sublicense, and/or sell copies of the Software, and to |
+# permit persons to whom the Software is furnished to do so. |
+# |
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+# ======================================================================= |
+# |
+ |
+"""Self-test for random number generators""" |
+ |
+__revision__ = "$Id$" |
+ |
+def get_tests(): |
+ tests = [] |
+ import Fortuna; tests += Fortuna.get_tests() |
+ import OSRNG; tests += OSRNG.get_tests() |
+ import test_random; tests += test_random.get_tests() |
+ import test_rpoolcompat; tests += test_rpoolcompat.get_tests() |
+ return tests |
+ |
+if __name__ == '__main__': |
+ import unittest |
+ suite = lambda: unittest.TestSuite(get_tests()) |
+ unittest.main(defaultTest='suite') |
+ |
+# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_random.py |
---|
0,0 → 1,52 |
# -*- coding: utf-8 -*- |
# |
# SelfTest/Util/test_generic.py: Self-test for the CryptoPlus.Random.new() function |
# |
# ======================================================================= |
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net> |
# |
# Permission is hereby granted, free of charge, to any person obtaining |
# a copy of this software and associated documentation files (the |
# "Software"), to deal in the Software without restriction, including |
# without limitation the rights to use, copy, modify, merge, publish, |
# distribute, sublicense, and/or sell copies of the Software, and to |
# permit persons to whom the Software is furnished to do so. |
# |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# ======================================================================= |
# |
"""Self-test suite for CryptoPlus.Random.new()""" |
__revision__ = "$Id$" |
import unittest |
class SimpleTest(unittest.TestCase): |
def runTest(self): |
"""CryptoPlus.Random.new()""" |
# Import the OSRNG module and try to use it |
from CryptoPlus import Random |
randobj = Random.new() |
x = randobj.read(16) |
y = randobj.read(16) |
self.assertNotEqual(x, y) |
def get_tests(): |
return [SimpleTest()] |
if __name__ == '__main__': |
suite = lambda: unittest.TestSuite(get_tests()) |
unittest.main(defaultTest='suite') |
# vim:set ts=4 sw=4 sts=4 expandtab: |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/DES3.py |
---|
0,0 → 1,74 |
from blockcipher import * |
import Crypto.Cipher.DES3 |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
DES using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the 2/3 keys |
- DES-EDE2: supply 2 keys as 1 single concatenated 16byte key= key1|key2 |
- DES-EDE3: supply 3 keys as 1 single concatenated 24byte key= key1|key2|key3 |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import DES3 |
CBC TDES-EDE3 EXAMPLE: (using test vectors from http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf) |
------------ |
>>> key = ('37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae').decode('hex') |
>>> IV = ('3d1de3cc132e3b65').decode('hex') |
>>> cipher = DES3.new(key, DES3.MODE_CBC, IV) |
>>> ciphertext = cipher.encrypt(('84401f78fe6c10876d8ea23094ea5309').decode('hex')) |
>>> (ciphertext).encode('hex') |
'7b1f7c7e3b1c948ebd04a75ffba7d2f5' |
>>> decipher = DES3.new(key, DES3.MODE_CBC, IV) |
>>> plaintext = decipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'84401f78fe6c10876d8ea23094ea5309' |
CMAC TDES-EDE3 EXAMPLE: (http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf) |
------------- |
>>> key = '8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a57'.decode('hex') |
>>> cipher = DES3.new(key, DES3.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'743ddbe0ce2dc2ed' |
CMAC TDES-EDE2 EXAMPLE: |
----------------------- |
testvector: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip |
>>> key1 = "5104f2c76180c1d3".decode('hex') |
>>> key2 = "b9df763e31ada716".decode('hex') |
>>> key = key1 + key2 |
>>> plaintext = 'a6866be2fa6678f264a19c4474968e3f4eec24f5086d'.decode('hex') |
>>> cipher = DES3.new(key, DES3.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'32e7758f3f614dbf' |
""" |
return DES3(key,mode,IV,counter,segment_size) |
class DES3(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.DES3.new |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/__init__.py |
---|
0,0 → 1,10 |
from Crypto.Cipher import ARC4, XOR |
__all__ = ["AES","python_AES","python_DES","python_DES3","DES","DES3","Blowfish","python_Blowfish","python_Twofish","python_Serpent","python_Rijndael","ARC4","ARC2","CAST","XOR","python_PRESENT"] |
try: |
import Crypto.Cipher.IDEA |
__all__.append("IDEA") |
__all__.append("RC5") |
except ImportError: |
pass |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_DES3.py |
---|
0,0 → 1,80 |
from blockcipher import * |
import pyDes |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a DES-EDE3 or DES-EDE2 cipher object |
wrapper for pure python 3DES implementation pyDes.py |
key = raw string containing the 2/3 keys |
- DES-EDE2: supply 2 keys as 1 single concatenated 16byte key= key1|key2 |
- DES-EDE3: supply 3 keys as 1 single concatenated 24byte key= key1|key2|key3 |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_DES3 |
CBC TDES-EDE3 EXAMPLE: (using test vectors from http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf) |
------------ |
>>> key = ('37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae').decode('hex') |
>>> IV = ('3d1de3cc132e3b65').decode('hex') |
>>> cipher = python_DES3.new(key, python_DES3.MODE_CBC, IV) |
>>> ciphertext = cipher.encrypt(('84401f78fe6c10876d8ea23094ea5309').decode('hex')) |
>>> (ciphertext).encode('hex') |
'7b1f7c7e3b1c948ebd04a75ffba7d2f5' |
>>> decipher = python_DES3.new(key, python_DES3.MODE_CBC, IV) |
>>> plaintext = decipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'84401f78fe6c10876d8ea23094ea5309' |
CMAC TDES-EDE3 EXAMPLE: |
------------- |
testvector: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf |
>>> key = '8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a57'.decode('hex') |
>>> cipher = python_DES3.new(key, python_DES3.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'743ddbe0ce2dc2ed' |
CMAC TDES-EDE2 EXAMPLE: |
----------------------- |
testvector: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip |
>>> key1 = "5104f2c76180c1d3".decode('hex') |
>>> key2 = "b9df763e31ada716".decode('hex') |
>>> key = key1 + key2 |
>>> plaintext = 'a6866be2fa6678f264a19c4474968e3f4eec24f5086d'.decode('hex') |
>>> cipher = python_DES3.new(key, python_DES3.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'32e7758f3f614dbf'""" |
return python_DES3(key,mode,IV,counter,segment_size) |
class python_DES3(BlockCipher): |
key_error_message = "Key should be 128 or 192 bits" |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = pyDes.triple_des |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def keylen_valid(self,key): |
return len(key) in (16,24) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/IDEA.py |
---|
0,0 → 1,52 |
from blockcipher import * |
try: |
import Crypto.Cipher.IDEA |
except ImportError: |
print "Crypto.Cipher.IDEA isn't available. You're probably using the Debian pycrypto version. Install the original pycrypto for IDEA." |
raise |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
IDEA using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the keys |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import IDEA |
https://www.cosic.esat.kuleuven.be/nessie/testvectors/ |
----------------------------------------- |
>>> from CryptoPlus.Cipher import IDEA |
>>> key = "2BD6459F82C5B300952C49104881FF48".decode('hex') |
>>> plaintext = "F129A6601EF62A47".decode('hex') |
>>> cipher = IDEA.new(key,IDEA.MODE_ECB,) |
>>> cipher.encrypt(plaintext).encode('hex').upper() |
'EA024714AD5C4D84' |
""" |
return IDEA(key,mode,IV,counter,segment_size) |
class IDEA(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.IDEA.new |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/AES.py |
---|
0,0 → 1,147 |
from blockcipher import * |
import Crypto.Cipher.AES |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
key = raw string containing the key, AES-128..256 will be selected according to the key length |
-> when using XTS mode: the key should be a tuple of the 2 keys needed |
mode = AES.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import AES |
ECB EXAMPLE: |
------------- |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> cipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')) |
>>> crypted = cipher.encrypt('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')) |
>>> crypted.encode('hex') |
'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf' |
>>> decipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')) |
>>> decipher.decrypt(crypted).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51' |
CBC EXAMPLE (plaintext = 3 blocksizes): |
----------------------------------------- |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex') |
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex') |
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex') |
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex') |
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex') |
>>> cipher = AES.new(key,AES.MODE_CBC,IV) |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3) |
>>> (ciphertext).encode('hex') |
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516' |
>>> decipher = AES.new(key,AES.MODE_CBC,IV) |
>>> plaintext = decipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
OR: supply plaintext as separate pieces: |
------------------------------------------ |
>>> cipher = AES.new(key,AES.MODE_CBC,IV) |
>>> ( cipher.encrypt(plaintext1 + plaintext2[:-2]) ).encode('hex') |
'7649abac8119b246cee98e9b12e9197d' |
>>> ( cipher.encrypt(plaintext2[-2:] + plaintext3) ).encode('hex') |
'5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516' |
>>> decipher = AES.new(key,AES.MODE_CBC,IV) |
>>> (decipher.decrypt(ciphertext[:22])).encode('hex') |
'6bc1bee22e409f96e93d7e117393172a' |
>>> (decipher.decrypt(ciphertext[22:])).encode('hex') |
'ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
CTR EXAMPLE: |
------------ |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> from CryptoPlus.Util.util import Counter |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> counter = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')) |
>>> cipher = AES.new(key,AES.MODE_CTR,counter=counter) |
>>> plaintext1 = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> plaintext2 = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> plaintext3 = '30c81c46a35ce411e5fbc1191a0a52ef'.decode('hex') |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3) |
>>> ciphertext.encode('hex') |
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab' |
>>> counter2 = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')) |
>>> decipher = AES.new(key,AES.MODE_CTR,counter=counter2) |
>>> decipher.decrypt(ciphertext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
XTS EXAMPLE: |
cipher/decipher plaintext of 3 blocks, provided as a 2 pieces (31 bytes + 33 bytes) |
------------ |
>>> key = (('2b7e151628aed2a6abf7158809cf4f3c').decode('hex'),('2b7e151628aed2a6abf7158809cf4f3c').decode('hex')) |
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex') |
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex') |
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex') |
>>> cipher = AES.new(key,AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2[:15]) |
>>> decipher = AES.new(key,AES.MODE_XTS) |
>>> deciphertext = decipher.decrypt(ciphertext) |
>>> (deciphertext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e' |
>>> ciphertext2 = cipher.encrypt(plaintext2[15:]+plaintext3) |
>>> deciphertext2 = decipher.decrypt(ciphertext2) |
>>> (deciphertext2).encode('hex') |
'5130c81c46a35ce411e5fbc1191a0a52ef' |
XTS-AES-128 applied for a data unit of 512 bytes |
testvector: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf |
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex') |
>>> cipher = AES.new(key,AES.MODE_XTS) |
>>> cipher.encrypt(plaintext).encode('hex') |
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568' |
CMAC EXAMPLE: |
------------- |
NIST publication 800-38B: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> cipher = AES.new(key,AES.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'070a16b46b4d4144f79bdd9dd04a287c' |
CMAC EXAMPLE2: |
-------------- |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411'.decode('hex') |
>>> cipher = AES.new(key,AES.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex') |
'dfa66747de9ae63030ca32611497c827' |
""" |
return AES(key,mode,IV,counter,segment_size) |
class AES(BlockCipher): |
"""AES using pycrypto for algo and pycryptoplus for ciphermode |
""" |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.AES.new |
self.blocksize = 16 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_AES.py |
---|
0,0 → 1,299 |
from blockcipher import * |
from rijndael import rijndael |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
Wrapper for pure python implementation rijndael.py |
key = raw string containing the key, AES-128..256 will be selected according to the key length |
-> when using XTS mode: the key should be a tuple containing the 2 keys needed |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
Notes: |
- Always construct a seperate cipher object for encryption and decryption. Once a cipher object has been used for encryption, |
it can't be used for decryption because it keeps a state (if necessary) for the IV. |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_AES |
ECB EXAMPLE: |
------------- |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> cipher = python_AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')) |
>>> crypted = cipher.encrypt('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')) |
>>> crypted.encode('hex') |
'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf' |
>>> decipher = python_AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')) |
>>> decipher.decrypt(crypted).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51' |
PADDING EXAMPLE: |
----------------- |
>>> cipher = python_AES.new('0123456789012345') |
>>> crypt = cipher.encrypt('0123456789012') |
>>> crypt += cipher.final() |
>>> decipher = python_AES.new('0123456789012345') |
>>> decipher.decrypt(crypt) |
'0123456789012\\x03\\x03\\x03' |
CBC EXAMPLE (plaintext = 3 blocksizes): |
----------------------------------------- |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex') |
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex') |
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex') |
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex') |
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CBC,IV) |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3) |
>>> (ciphertext).encode('hex') |
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516' |
>>> decipher = python_AES.new(key,python_AES.MODE_CBC,IV) |
>>> plaintext = decipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
OR: supply plaintext as seperate pieces: |
------------------------------------------ |
>>> cipher = python_AES.new(key,python_AES.MODE_CBC,IV) |
>>> ( cipher.encrypt(plaintext1 + plaintext2[:-2]) ).encode('hex') |
'7649abac8119b246cee98e9b12e9197d' |
>>> ( cipher.encrypt(plaintext2[-2:] + plaintext3) ).encode('hex') |
'5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516' |
>>> decipher = python_AES.new(key,python_AES.MODE_CBC,IV) |
>>> (decipher.decrypt(ciphertext[:22])).encode('hex') |
'6bc1bee22e409f96e93d7e117393172a' |
>>> (decipher.decrypt(ciphertext[22:])).encode('hex') |
'ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
CFB EXAMPLE: (CFB8-AES192) |
------------ |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex') |
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=8) |
>>> ciphertext = cipher.encrypt(plain) |
>>> ciphertext.encode('hex') |
'3b79424c9c0dd436bace9e0ed4586a4f' |
>>> decipher = python_AES.new(key,python_AES.MODE_CFB,IV) |
>>> decipher.decrypt(ciphertext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172a' |
CFB EXAMPLE: (CFB128-AES192) |
------------ |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex') |
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex') |
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128) |
>>> output1 = cipher.encrypt(plain) |
>>> output1.encode('hex') |
'cdc80d6fddf18cab34c25909c99a4174' |
>>> plain = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> output2 = cipher.encrypt(plain) |
>>> output2.encode('hex') |
'67ce7f7f81173621961a2b70171d3d7a' |
>>> decipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128) |
>>> decipher.decrypt(output1+output2).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51' |
CFB EXAMPLE: same as previous but now as a streamcipher |
------------ |
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex') |
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex') |
>>> plain = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128) |
>>> output = '' |
>>> for i in plain: output += cipher.encrypt(i) |
>>> output.encode('hex') |
'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a' |
OFB EXAMPLE: (OFB128-AES192) |
------------ |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex') |
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex') |
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_OFB,IV) |
>>> output1 = cipher.encrypt(plain) |
>>> output1.encode('hex') |
'cdc80d6fddf18cab34c25909c99a4174' |
>>> plain = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> output2 = cipher.encrypt(plain) |
>>> output2.encode('hex') |
'fcc28b8d4c63837c09e81700c1100401' |
>>> decipher = python_AES.new(key,python_AES.MODE_OFB,IV) |
>>> decipher.decrypt(output1 + output2).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51' |
OFB EXAMPLE: same as previous but now as a streamcipher |
------------ |
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex') |
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex') |
>>> plain = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_OFB,IV) |
>>> output = '' |
>>> for i in plain: output += cipher.encrypt(i) |
>>> output.encode('hex') |
'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c1100401' |
CTR EXAMPLE: |
------------ |
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F |
>>> from CryptoPlus.Util.util import Counter |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> counter = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')) |
>>> cipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter) |
>>> plaintext1 = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> plaintext2 = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex') |
>>> plaintext3 = '30c81c46a35ce411e5fbc1191a0a52ef'.decode('hex') |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3) |
>>> ciphertext.encode('hex') |
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab' |
>>> counter2 = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')) |
>>> decipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter2) |
>>> decipher.decrypt(ciphertext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
XTS EXAMPLE: |
------------ |
XTS-AES-128 applied for a data unit of 512 bytes |
IEEE P1619/D16: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf |
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> ciphertext.encode('hex') |
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext).encode('hex') |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' |
using data sequence number n |
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'22222222222222222222222222222222'.decode('hex')) |
>>> plain ='4444444444444444444444444444444444444444444444444444444444444444'.decode('hex') |
>>> n = '3333333333'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plain,n) |
>>> ciphertext.encode('hex') |
'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'4444444444444444444444444444444444444444444444444444444444444444' |
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex')) |
>>> plain ='72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a'.decode('hex') |
>>> n = 'ff'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> cipher.encrypt(plain,n).encode('hex') |
'3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd' |
>>> key = ('2718281828459045235360287471352662497757247093699959574966967627'.decode('hex'),'3141592653589793238462643383279502884197169399375105820974944592'.decode('hex')) |
>>> plain ='000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex') |
>>> n = 'ffffffffff'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plain,n) |
>>> ciphertext.encode('hex') |
'64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' |
using plaintext not a multiple of 16 |
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f10111213'.decode('hex') |
>>> n = '9a78563412'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plaintext,n) |
>>> ciphertext.encode('hex') |
'9d84c813f719aa2c7be3f66171c7c5c2edbf9dac' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'000102030405060708090a0b0c0d0e0f10111213' |
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f10'.decode('hex') |
>>> n = '9a78563412'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plaintext,n) |
>>> ciphertext.encode('hex') |
'6c1625db4671522d3d7599601de7ca09ed' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'000102030405060708090a0b0c0d0e0f10' |
>>> key = ('e0e1e2e3e4e5e6e7e8e9eaebecedeeef'.decode('hex'),'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex') |
>>> n = '21436587a9'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> ciphertext = cipher.encrypt(plaintext,n) |
>>> ciphertext.encode('hex') |
'38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3' |
>>> decipher = python_AES.new(key,python_AES.MODE_XTS) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' |
CMAC EXAMPLE: |
------------- |
NIST publication 800-38B: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172a'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex')[:16] |
'070a16b46b4d4144' |
CMAC EXAMPLE2: |
-------------- |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex') |
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411'.decode('hex') |
>>> cipher = python_AES.new(key,python_AES.MODE_CMAC) |
>>> cipher.encrypt(plaintext).encode('hex')[:16] |
'dfa66747de9ae630' |
""" |
return python_AES(key,mode,IV,counter,segment_size) |
class python_AES(BlockCipher): |
key_error_message = ("Key should be 128, 192 or 256 bits") |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = rijndael |
args = {'block_size':16} |
self.blocksize = 16 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args) |
def keylen_valid(self,key): |
return len(key) in (16,24,32) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/DES.py |
---|
0,0 → 1,51 |
from blockcipher import * |
import Crypto.Cipher.DES |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
DES using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the keys |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import DES |
EXAMPLE (test vectors from NESSIE): |
----------------------------------- |
>>> cipher = DES.new(('7CA110454A1A6E57').decode('hex')) |
>>> ciphertext = cipher.encrypt(('01A1D6D039776742').decode('hex')) |
>>> (ciphertext).encode('hex') |
'690f5b0d9a26939b' |
>>> plaintext = cipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'01a1d6d039776742' |
""" |
return DES(key,mode,IV,counter,segment_size) |
class DES(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.DES.new |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_DES.py |
---|
0,0 → 1,57 |
from blockcipher import * |
import pyDes |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
wrapper for pure python implementation pyDes.py |
key = raw string containing the key |
mode = python_DES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_DES |
EXAMPLE (test vectors from NESSIE): |
----------------------------------- |
>>> cipher = python_DES.new(('7CA110454A1A6E57').decode('hex')) |
>>> ciphertext = cipher.encrypt(('01A1D6D039776742').decode('hex')) |
>>> (ciphertext).encode('hex') |
'690f5b0d9a26939b' |
>>> plaintext = cipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'01a1d6d039776742' |
""" |
return python_DES(key,mode,IV,counter,segment_size) |
class python_DES(BlockCipher): |
key_error_message = ("Key should be 64 bits") |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = pyDes.des |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def keylen_valid(self,key): |
return len(key) == 8 |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/Blowfish.py |
---|
0,0 → 1,77 |
from blockcipher import * |
import Crypto.Cipher.Blowfish |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
Blowfish using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the key |
mode = Blowfish.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import Blowfish |
ECB EXAMPLE: http://www.schneier.com/code/vectors.txt |
------------- |
>>> cipher = Blowfish.new(('0131D9619DC1376E').decode('hex')) |
>>> ( cipher.encrypt(('5CD54CA83DEF57DA').decode('hex')) ).encode('hex') |
'b1b8cc0b250f09a0' |
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex') |
'5cd54ca83def57da' |
CBC, CFB, OFB EXAMPLE: http://www.schneier.com/code/vectors.txt |
---------------------- |
>>> key = ('0123456789ABCDEFF0E1D2C3B4A59687').decode('hex') |
>>> IV = ('FEDCBA9876543210').decode('hex') |
>>> plaintext = ('37363534333231204E6F77206973207468652074696D6520').decode('hex') |
>>> cipher = Blowfish.new(key,Blowfish.MODE_CBC,IV) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9' |
>>> key = '0123456789ABCDEFF0E1D2C3B4A59687'.decode('hex') |
>>> iv = 'FEDCBA9876543210'.decode('hex') |
>>> plaintext = '37363534333231204E6F77206973207468652074696D6520666F722000'.decode('hex') |
>>> cipher = Blowfish.new(key,Blowfish.MODE_CBC,iv) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9' |
>>> cipher = Blowfish.new(key,Blowfish.MODE_CFB,iv,segment_size=64) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3' |
>>> cipher = Blowfish.new(key,Blowfish.MODE_OFB,iv) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'E73214A2822139CA62B343CC5B65587310DD908D0C241B2263C2CF80DA' |
""" |
return Blowfish(key,mode,IV,counter,segment_size) |
class Blowfish(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.Blowfish.new |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_Blowfish.py |
---|
0,0 → 1,82 |
from blockcipher import * |
from pyblowfish import Blowfish |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
Wrapper for pure python implementation pyblowfish.py |
key = raw string containing the key |
mode = Blowfish.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_Blowfish |
EXAMPLE: (http://www.schneier.com/code/vectors.txt) |
---------- |
>>> cipher = python_Blowfish.new(('0131D9619DC1376E').decode('hex')) |
>>> ( cipher.encrypt(('5CD54CA83DEF57DA').decode('hex')) ).encode('hex') |
'b1b8cc0b250f09a0' |
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex') |
'5cd54ca83def57da' |
CBC, CFB, OFB EXAMPLE: http://www.schneier.com/code/vectors.txt |
---------------------- |
>>> key = ('0123456789ABCDEFF0E1D2C3B4A59687').decode('hex') |
>>> IV = ('FEDCBA9876543210').decode('hex') |
>>> plaintext = ('37363534333231204E6F77206973207468652074696D6520').decode('hex') |
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CBC,IV) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9' |
>>> key = '0123456789ABCDEFF0E1D2C3B4A59687'.decode('hex') |
>>> iv = 'FEDCBA9876543210'.decode('hex') |
>>> plaintext = '37363534333231204E6F77206973207468652074696D6520666F722000'.decode('hex') |
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CBC,iv) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9' |
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CFB,iv,segment_size=64) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3' |
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_OFB,iv) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> (ciphertext).encode('hex').upper() |
'E73214A2822139CA62B343CC5B65587310DD908D0C241B2263C2CF80DA'""" |
return python_Blowfish(key,mode,IV,counter,segment_size) |
class python_Blowfish(BlockCipher): |
key_error_message = "Key should be between 8 and 56 bytes (64 <-> 448 bits)" |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Blowfish |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def keylen_valid(self,key): |
return 8 <= len(key) <= 56 |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_Serpent.py |
---|
0,0 → 1,68 |
from blockcipher import * |
from pyserpent import Serpent |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
Wrapper for pure python implementation pyserpent.py |
key = raw string containing the key |
-> when using XTS mode: the key should be a tuple containing the 2 keys needed |
mode = python_Serpent.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_Serpent |
EXAMPLE: |
--------- |
NESSIE Test Vectors: http://www.cs.technion.ac.il/~biham/Reports/Serpent/Serpent-128-128.verified.test-vectors |
>>> cipher = python_Serpent.new(('000102030405060708090A0B0C0D0E0F').decode('hex')) |
>>> (cipher.encrypt(('33B3DC87EDDD9B0F6A1F407D14919365').decode('hex'))).encode('hex').upper() |
'00112233445566778899AABBCCDDEEFF' |
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper() |
'33B3DC87EDDD9B0F6A1F407D14919365' |
>>> cipher = python_Serpent.new(('FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD').decode('hex')) |
>>> (cipher.encrypt(('FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD').decode('hex'))).encode('hex').upper() |
'81F9163BDF39B5BB2932AB91DF2A5FFC' |
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper() |
'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD' |
CBC EXAMPLE: |
------------- |
>>> key = ('000102030405060708090A0B0C0D0E0F').decode('hex') |
>>> IV = ('00000000000000000000000000000000').decode('hex') |
>>> plaintext = ('33B3DC87EDDD9B0F6A1F407D14919365'*3).decode('hex') |
>>> cipher = python_Serpent.new(key,python_Serpent.MODE_CBC,IV) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> decipher = python_Serpent.new(key,python_Serpent.MODE_CBC,IV) |
>>> ( decipher.decrypt(ciphertext)).encode('hex').upper() |
'33B3DC87EDDD9B0F6A1F407D1491936533B3DC87EDDD9B0F6A1F407D1491936533B3DC87EDDD9B0F6A1F407D14919365' |
""" |
return python_Serpent(key,mode,IV,counter,segment_size) |
class python_Serpent(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
if len(key) not in (16,24,32) and type(key) is not tuple: |
raise ValueError("Key should be 128, 192 or 256 bits") |
cipher_module = Serpent |
self.blocksize = 16 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_PRESENT.py |
---|
0,0 → 1,94 |
from blockcipher import * |
from pypresent import Present |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,rounds=32): |
"""Create a new cipher object |
Wrapper for pure python implementation rijndael.py |
key = raw string containing the key, AES-128..256 will be selected according to the key length |
mode = python_PRESENT.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
rounds = amount of rounds |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
rounds = amount of rounds, default = 32 |
Notes: |
- Always construct a seperate cipher object for encryption and decryption. Once a cipher object has been used for encryption, |
it can't be used for decryption because it keeps a state (if necessary) for the IV. |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_PRESENT |
ECB Test Vectors: |
------------------ |
>>> key = "00000000000000000000".decode('hex') |
>>> plain = "0000000000000000".decode('hex') |
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB) |
>>> cipher.encrypt(plain).encode('hex') |
'5579c1387b228445' |
>>> key = "00000000000000000000000000000000".decode('hex') |
>>> plain = "0000000000000000".decode('hex') |
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=64) |
>>> cipher.encrypt(plain).encode('hex') |
'59a27d01607ebf05' |
>>> key = "00000000000000000000".decode('hex') |
>>> plain = "0000000000000000".decode('hex') |
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=64) |
>>> cipher.encrypt(plain).encode('hex') |
'13991dd588bc1288' |
Test Vectors for maximum rounds supported by PRESENT reference C code: |
----------------------------------------------------------------------- |
>>> key = "0123456789abcdef0123".decode('hex') |
>>> plain = "0123456789abcdef".decode('hex') |
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=65534) |
>>> ciphertext = cipher.encrypt(plain) |
>>> ciphertext.encode('hex') |
'a140dc5d7175ca20' |
>>> cipher.decrypt(ciphertext).encode('hex') |
'0123456789abcdef' |
>>> key = "0123456789abcdef0123456789abcdef".decode('hex') |
>>> plain = "0123456789abcdef".decode('hex') |
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=65534) |
>>> ciphertext = cipher.encrypt(plain) |
>>> ciphertext.encode('hex') |
'21007772e5d4ef14' |
>>> cipher.decrypt(ciphertext).encode('hex') |
'0123456789abcdef' |
""" |
return python_PRESENT(key,mode,IV,counter,rounds,segment_size) |
class python_PRESENT(BlockCipher): |
key_error_message = "Key should be 80 or 128 bits" |
def __init__(self,key,mode,IV,counter,rounds,segment_size): |
cipher_module = Present |
args = {'rounds':rounds} |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args) |
def keylen_valid(self,key): |
return len(key) in (10,16) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_Twofish.py |
---|
0,0 → 1,55 |
from blockcipher import * |
from pytwofish import Twofish |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
Wrapper for pure python implementation pytwofish.py |
key = raw string containing the key |
-> when using XTS mode: the key should be a tuple containing the 2 keys needed |
mode = python_Twofish.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_Twofish |
EXAMPLE: |
---------- |
http://www.schneier.com/code/ecb_ival.txt -> test vector I=5 |
>>> cipher = python_Twofish.new(('019F9809DE1711858FAAC3A3BA20FBC3').decode('hex')) |
>>> (cipher.encrypt(('6363977DE839486297E661C6C9D668EB').decode('hex'))).encode('hex').upper() |
'816D5BD0FAE35342BF2A7412C246F752' |
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper() |
'6363977DE839486297E661C6C9D668EB' |
""" |
return python_Twofish(key,mode,IV,counter,segment_size) |
class python_Twofish(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
if len(key) not in (16,24,32) and type(key) is not tuple: |
raise ValueError("Key should be 128, 192 or 256 bits") |
cipher_module = Twofish |
self.blocksize = 16 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/pyDes.py |
---|
0,0 → 1,803 |
############################################################################# |
# Documentation # |
############################################################################# |
# Author: Todd Whiteman |
# Date: 12th September, 2005 |
# Verion: 1.2 |
# Homepage: http://twhiteman.netfirms.com/des.html |
# |
# This algorithm is a pure python implementation of the DES algorithm. |
# It is in pure python to avoid portability issues, since most DES |
# implementations are programmed in C (for performance reasons). |
# |
# Triple DES class is also implemented, utilising the DES base. Triple DES |
# is either DES-EDE3 with a 24 byte key, or DES-EDE2 with a 16 byte key. |
# |
# See the README.txt that should come with this python module for the |
# implementation methods used. |
# |
# Thanks to David Broadwell for ideas, comments and suggestions. |
# Thanks to Mario Wolff for pointing out and debugging some triple des CBC errors. |
# |
"""A pure python implementation of the DES and TRIPLE DES encryption algorithms |
pyDes.des(key, [mode], [IV]) |
pyDes.triple_des(key, [mode], [IV]) |
key -> String containing the encryption key. 8 bytes for DES, 16 or 24 bytes |
for Triple DES |
mode -> Optional argument for encryption type, can be either |
pyDes.ECB (Electronic Code Book) or pyDes.CBC (Cypher Block Chaining) |
IV -> Optional argument, must be supplied if using CBC mode. Must be 8 bytes |
Example: |
from pyDes import * |
data = "Please encrypt my string" |
k = des("DESCRYPT", " ", CBC, "\0\0\0\0\0\0\0\0") |
d = k.encrypt(data) |
print "Encypted string: " + d |
print "Decypted string: " + k.decrypt(d) |
See the module source (pyDes.py) for more examples of use. |
You can slo run the pyDes.py file without and arguments to see a simple test. |
Note: This code was not written for high-end systems needing a fast |
implementation, but rather a handy portable solution with small usage. |
""" |
# Modes of crypting / cyphering |
ECB = 0 |
CBC = 1 |
############################################################################# |
# DES # |
############################################################################# |
class des: |
"""DES encryption/decrytpion class |
Supports ECB (Electronic Code Book) and CBC (Cypher Block Chaining) modes. |
pyDes.des(key,[mode], [IV]) |
key -> The encryption key string, must be exactly 8 bytes |
mode -> Optional argument for encryption type, can be either pyDes.ECB |
(Electronic Code Book), pyDes.CBC (Cypher Block Chaining) |
IV -> Optional string argument, must be supplied if using CBC mode. |
Must be 8 bytes in length. |
""" |
# Permutation and translation tables for DES |
__pc1 = [56, 48, 40, 32, 24, 16, 8, |
0, 57, 49, 41, 33, 25, 17, |
9, 1, 58, 50, 42, 34, 26, |
18, 10, 2, 59, 51, 43, 35, |
62, 54, 46, 38, 30, 22, 14, |
6, 61, 53, 45, 37, 29, 21, |
13, 5, 60, 52, 44, 36, 28, |
20, 12, 4, 27, 19, 11, 3 |
] |
# number left rotations of pc1 |
__left_rotations = [ |
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 |
] |
# permuted choice key (table 2) |
__pc2 = [ |
13, 16, 10, 23, 0, 4, |
2, 27, 14, 5, 20, 9, |
22, 18, 11, 3, 25, 7, |
15, 6, 26, 19, 12, 1, |
40, 51, 30, 36, 46, 54, |
29, 39, 50, 44, 32, 47, |
43, 48, 38, 55, 33, 52, |
45, 41, 49, 35, 28, 31 |
] |
# initial permutation IP |
__ip = [57, 49, 41, 33, 25, 17, 9, 1, |
59, 51, 43, 35, 27, 19, 11, 3, |
61, 53, 45, 37, 29, 21, 13, 5, |
63, 55, 47, 39, 31, 23, 15, 7, |
56, 48, 40, 32, 24, 16, 8, 0, |
58, 50, 42, 34, 26, 18, 10, 2, |
60, 52, 44, 36, 28, 20, 12, 4, |
62, 54, 46, 38, 30, 22, 14, 6 |
] |
# Expansion table for turning 32 bit blocks into 48 bits |
__expansion_table = [ |
31, 0, 1, 2, 3, 4, |
3, 4, 5, 6, 7, 8, |
7, 8, 9, 10, 11, 12, |
11, 12, 13, 14, 15, 16, |
15, 16, 17, 18, 19, 20, |
19, 20, 21, 22, 23, 24, |
23, 24, 25, 26, 27, 28, |
27, 28, 29, 30, 31, 0 |
] |
# The (in)famous S-boxes |
__sbox = [ |
# S1 |
[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, |
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, |
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, |
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13], |
# S2 |
[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, |
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, |
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, |
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9], |
# S3 |
[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, |
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, |
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, |
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12], |
# S4 |
[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, |
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, |
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, |
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14], |
# S5 |
[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, |
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, |
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, |
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3], |
# S6 |
[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, |
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, |
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, |
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13], |
# S7 |
[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, |
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, |
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, |
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12], |
# S8 |
[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, |
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, |
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, |
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11], |
] |
# 32-bit permutation function P used on the output of the S-boxes |
__p = [ |
15, 6, 19, 20, 28, 11, |
27, 16, 0, 14, 22, 25, |
4, 17, 30, 9, 1, 7, |
23,13, 31, 26, 2, 8, |
18, 12, 29, 5, 21, 10, |
3, 24 |
] |
# final permutation IP^-1 |
__fp = [ |
39, 7, 47, 15, 55, 23, 63, 31, |
38, 6, 46, 14, 54, 22, 62, 30, |
37, 5, 45, 13, 53, 21, 61, 29, |
36, 4, 44, 12, 52, 20, 60, 28, |
35, 3, 43, 11, 51, 19, 59, 27, |
34, 2, 42, 10, 50, 18, 58, 26, |
33, 1, 41, 9, 49, 17, 57, 25, |
32, 0, 40, 8, 48, 16, 56, 24 |
] |
# Type of crypting being done |
ENCRYPT = 0x00 |
DECRYPT = 0x01 |
# Initialisation |
def __init__(self, key, mode=ECB, IV=None): |
if len(key) != 8: |
raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.") |
self.block_size = 8 |
self.key_size = 8 |
self.__padding = '' |
# Set the passed in variables |
self.setMode(mode) |
if IV: |
self.setIV(IV) |
self.L = [] |
self.R = [] |
self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16) |
self.final = [] |
self.setKey(key) |
def getKey(self): |
"""getKey() -> string""" |
return self.__key |
def setKey(self, key): |
"""Will set the crypting key for this object. Must be 8 bytes.""" |
self.__key = key |
self.__create_sub_keys() |
def getMode(self): |
"""getMode() -> pyDes.ECB or pyDes.CBC""" |
return self.__mode |
def setMode(self, mode): |
"""Sets the type of crypting mode, pyDes.ECB or pyDes.CBC""" |
self.__mode = mode |
def getIV(self): |
"""getIV() -> string""" |
return self.__iv |
def setIV(self, IV): |
"""Will set the Initial Value, used in conjunction with CBC mode""" |
if not IV or len(IV) != self.block_size: |
raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes") |
self.__iv = IV |
def getPadding(self): |
"""getPadding() -> string of length 1. Padding character.""" |
return self.__padding |
def __String_to_BitList(self, data): |
"""Turn the string data, into a list of bits (1, 0)'s""" |
l = len(data) * 8 |
result = [0] * l |
pos = 0 |
for c in data: |
i = 7 |
ch = ord(c) |
while i >= 0: |
if ch & (1 << i) != 0: |
result[pos] = 1 |
else: |
result[pos] = 0 |
pos += 1 |
i -= 1 |
return result |
def __BitList_to_String(self, data): |
"""Turn the list of bits -> data, into a string""" |
result = '' |
pos = 0 |
c = 0 |
while pos < len(data): |
c += data[pos] << (7 - (pos % 8)) |
if (pos % 8) == 7: |
result += chr(c) |
c = 0 |
pos += 1 |
return result |
def __permutate(self, table, block): |
"""Permutate this block with the specified table""" |
return map(lambda x: block[x], table) |
# Transform the secret key, so that it is ready for data processing |
# Create the 16 subkeys, K[1] - K[16] |
def __create_sub_keys(self): |
"""Create the 16 subkeys K[1] to K[16] from the given key""" |
key = self.__permutate(des.__pc1, self.__String_to_BitList(self.getKey())) |
i = 0 |
# Split into Left and Right sections |
self.L = key[:28] |
self.R = key[28:] |
while i < 16: |
j = 0 |
# Perform circular left shifts |
while j < des.__left_rotations[i]: |
self.L.append(self.L[0]) |
del self.L[0] |
self.R.append(self.R[0]) |
del self.R[0] |
j += 1 |
# Create one of the 16 subkeys through pc2 permutation |
self.Kn[i] = self.__permutate(des.__pc2, self.L + self.R) |
i += 1 |
# Main part of the encryption algorithm, the number cruncher :) |
def __des_crypt(self, block, crypt_type): |
"""Crypt the block of data through DES bit-manipulation""" |
block = self.__permutate(des.__ip, block) |
self.L = block[:32] |
self.R = block[32:] |
# Encryption starts from Kn[1] through to Kn[16] |
if crypt_type == des.ENCRYPT: |
iteration = 0 |
iteration_adjustment = 1 |
# Decryption starts from Kn[16] down to Kn[1] |
else: |
iteration = 15 |
iteration_adjustment = -1 |
i = 0 |
while i < 16: |
# Make a copy of R[i-1], this will later become L[i] |
tempR = self.R[:] |
# Permutate R[i - 1] to start creating R[i] |
self.R = self.__permutate(des.__expansion_table, self.R) |
# Exclusive or R[i - 1] with K[i], create B[1] to B[8] whilst here |
self.R = map(lambda x, y: x ^ y, self.R, self.Kn[iteration]) |
B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]] |
# Optimization: Replaced below commented code with above |
#j = 0 |
#B = [] |
#while j < len(self.R): |
# self.R[j] = self.R[j] ^ self.Kn[iteration][j] |
# j += 1 |
# if j % 6 == 0: |
# B.append(self.R[j-6:j]) |
# Permutate B[1] to B[8] using the S-Boxes |
j = 0 |
Bn = [0] * 32 |
pos = 0 |
while j < 8: |
# Work out the offsets |
m = (B[j][0] << 1) + B[j][5] |
n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4] |
# Find the permutation value |
v = des.__sbox[j][(m << 4) + n] |
# Turn value into bits, add it to result: Bn |
Bn[pos] = (v & 8) >> 3 |
Bn[pos + 1] = (v & 4) >> 2 |
Bn[pos + 2] = (v & 2) >> 1 |
Bn[pos + 3] = v & 1 |
pos += 4 |
j += 1 |
# Permutate the concatination of B[1] to B[8] (Bn) |
self.R = self.__permutate(des.__p, Bn) |
# Xor with L[i - 1] |
self.R = map(lambda x, y: x ^ y, self.R, self.L) |
# Optimization: This now replaces the below commented code |
#j = 0 |
#while j < len(self.R): |
# self.R[j] = self.R[j] ^ self.L[j] |
# j += 1 |
# L[i] becomes R[i - 1] |
self.L = tempR |
i += 1 |
iteration += iteration_adjustment |
# Final permutation of R[16]L[16] |
self.final = self.__permutate(des.__fp, self.R + self.L) |
return self.final |
# Data to be encrypted/decrypted |
def crypt(self, data, crypt_type): |
"""Crypt the data in blocks, running it through des_crypt()""" |
# Error check the data |
if not data: |
return '' |
if len(data) % self.block_size != 0: |
if crypt_type == des.DECRYPT: # Decryption must work on 8 byte blocks |
raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.") |
if not self.getPadding(): |
raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character") |
else: |
data += (self.block_size - (len(data) % self.block_size)) * self.getPadding() |
# print "Len of data: %f" % (len(data) / self.block_size) |
if self.getMode() == CBC: |
if self.getIV(): |
iv = self.__String_to_BitList(self.getIV()) |
else: |
raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering") |
# Split the data into blocks, crypting each one seperately |
i = 0 |
dict = {} |
result = [] |
#cached = 0 |
#lines = 0 |
while i < len(data): |
# Test code for caching encryption results |
#lines += 1 |
#if dict.has_key(data[i:i+8]): |
#print "Cached result for: %s" % data[i:i+8] |
# cached += 1 |
# result.append(dict[data[i:i+8]]) |
# i += 8 |
# continue |
block = self.__String_to_BitList(data[i:i+8]) |
# Xor with IV if using CBC mode |
if self.getMode() == CBC: |
if crypt_type == des.ENCRYPT: |
block = map(lambda x, y: x ^ y, block, iv) |
#j = 0 |
#while j < len(block): |
# block[j] = block[j] ^ iv[j] |
# j += 1 |
processed_block = self.__des_crypt(block, crypt_type) |
if crypt_type == des.DECRYPT: |
processed_block = map(lambda x, y: x ^ y, processed_block, iv) |
#j = 0 |
#while j < len(processed_block): |
# processed_block[j] = processed_block[j] ^ iv[j] |
# j += 1 |
iv = block |
else: |
iv = processed_block |
else: |
processed_block = self.__des_crypt(block, crypt_type) |
# Add the resulting crypted block to our list |
#d = self.__BitList_to_String(processed_block) |
#result.append(d) |
result.append(self.__BitList_to_String(processed_block)) |
#dict[data[i:i+8]] = d |
i += 8 |
# print "Lines: %d, cached: %d" % (lines, cached) |
# Remove the padding from the last block |
if crypt_type == des.DECRYPT and self.getPadding(): |
#print "Removing decrypt pad" |
s = result[-1] |
while s[-1] == self.getPadding(): |
s = s[:-1] |
result[-1] = s |
# Return the full crypted string |
return ''.join(result) |
def encrypt(self, data, pad=''): |
"""encrypt(data, [pad]) -> string |
data : String to be encrypted |
pad : Optional argument for encryption padding. Must only be one byte |
The data must be a multiple of 8 bytes and will be encrypted |
with the already specified key. Data does not have to be a |
multiple of 8 bytes if the padding character is supplied, the |
data will then be padded to a multiple of 8 bytes with this |
pad character. |
""" |
self.__padding = pad |
return self.crypt(data, des.ENCRYPT) |
def decrypt(self, data, pad=''): |
"""decrypt(data, [pad]) -> string |
data : String to be encrypted |
pad : Optional argument for decryption padding. Must only be one byte |
The data must be a multiple of 8 bytes and will be decrypted |
with the already specified key. If the optional padding character |
is supplied, then the un-encypted data will have the padding characters |
removed from the end of the string. This pad removal only occurs on the |
last 8 bytes of the data (last data block). |
""" |
self.__padding = pad |
return self.crypt(data, des.DECRYPT) |
############################################################################# |
# Triple DES # |
############################################################################# |
class triple_des: |
"""Triple DES encryption/decrytpion class |
This algorithm uses the DES-EDE3 (when a 24 byte key is supplied) or |
the DES-EDE2 (when a 16 byte key is supplied) encryption methods. |
Supports ECB (Electronic Code Book) and CBC (Cypher Block Chaining) modes. |
pyDes.des(key, [mode], [IV]) |
key -> The encryption key string, must be either 16 or 24 bytes long |
mode -> Optional argument for encryption type, can be either pyDes.ECB |
(Electronic Code Book), pyDes.CBC (Cypher Block Chaining) |
IV -> Optional string argument, must be supplied if using CBC mode. |
Must be 8 bytes in length. |
""" |
def __init__(self, key, mode=ECB, IV=None): |
self.block_size = 8 |
self.setMode(mode) |
self.__padding = '' |
self.__iv = IV |
self.setKey(key) |
def getKey(self): |
"""getKey() -> string""" |
return self.__key |
def setKey(self, key): |
"""Will set the crypting key for this object. Either 16 or 24 bytes long.""" |
self.key_size = 24 # Use DES-EDE3 mode |
if len(key) != self.key_size: |
if len(key) == 16: # Use DES-EDE2 mode |
self.key_size = 16 |
else: |
raise ValueError("Invalid triple DES key size. Key must be either 16 or 24 bytes long") |
if self.getMode() == CBC: |
if not self.getIV(): |
# Use the first 8 bytes of the key |
self.setIV(key[:self.block_size]) |
if len(self.getIV()) != self.block_size: |
raise ValueError("Invalid IV, must be 8 bytes in length") |
self.__key1 = des(key[:8], self.getMode(), self.getIV()) |
self.__key2 = des(key[8:16], self.getMode(), self.getIV()) |
if self.key_size == 16: |
self.__key3 = self.__key1 |
else: |
self.__key3 = des(key[16:], self.getMode(), self.getIV()) |
self.__key = key |
def getMode(self): |
"""getMode() -> pyDes.ECB or pyDes.CBC""" |
return self.__mode |
def setMode(self, mode): |
"""Sets the type of crypting mode, pyDes.ECB or pyDes.CBC""" |
self.__mode = mode |
def getIV(self): |
"""getIV() -> string""" |
return self.__iv |
def setIV(self, IV): |
"""Will set the Initial Value, used in conjunction with CBC mode""" |
self.__iv = IV |
def encrypt(self, data, pad=''): |
"""encrypt(data, [pad]) -> string |
data : String to be encrypted |
pad : Optional argument for encryption padding. Must only be one byte |
The data must be a multiple of 8 bytes and will be encrypted |
with the already specified key. Data does not have to be a |
multiple of 8 bytes if the padding character is supplied, the |
data will then be padded to a multiple of 8 bytes with this |
pad character. |
""" |
if self.getMode() == CBC: |
self.__key1.setIV(self.getIV()) |
self.__key2.setIV(self.getIV()) |
self.__key3.setIV(self.getIV()) |
i = 0 |
result = [] |
while i < len(data): |
block = self.__key1.encrypt(data[i:i+8], pad) |
block = self.__key2.decrypt(block) |
block = self.__key3.encrypt(block) |
self.__key1.setIV(block) |
self.__key2.setIV(block) |
self.__key3.setIV(block) |
result.append(block) |
i += 8 |
return ''.join(result) |
else: |
data = self.__key1.encrypt(data, pad) |
data = self.__key2.decrypt(data) |
return self.__key3.encrypt(data) |
def decrypt(self, data, pad=''): |
"""decrypt(data, [pad]) -> string |
data : String to be encrypted |
pad : Optional argument for decryption padding. Must only be one byte |
The data must be a multiple of 8 bytes and will be decrypted |
with the already specified key. If the optional padding character |
is supplied, then the un-encypted data will have the padding characters |
removed from the end of the string. This pad removal only occurs on the |
last 8 bytes of the data (last data block). |
""" |
if self.getMode() == CBC: |
self.__key1.setIV(self.getIV()) |
self.__key2.setIV(self.getIV()) |
self.__key3.setIV(self.getIV()) |
i = 0 |
result = [] |
while i < len(data): |
iv = data[i:i+8] |
block = self.__key3.decrypt(iv) |
block = self.__key2.encrypt(block) |
block = self.__key1.decrypt(block, pad) |
self.__key1.setIV(iv) |
self.__key2.setIV(iv) |
self.__key3.setIV(iv) |
result.append(block) |
i += 8 |
return ''.join(result) |
else: |
data = self.__key3.decrypt(data) |
data = self.__key2.encrypt(data) |
return self.__key1.decrypt(data, pad) |
############################################################################# |
# Examples # |
############################################################################# |
def example_triple_des(): |
from time import time |
# Utility module |
from binascii import unhexlify as unhex |
# example shows triple-des encryption using the des class |
print "Example of triple DES encryption in default ECB mode (DES-EDE3)\n" |
print "Triple des using the des class (3 times)" |
t = time() |
k1 = des(unhex("133457799BBCDFF1")) |
k2 = des(unhex("1122334455667788")) |
k3 = des(unhex("77661100DD223311")) |
d = "Triple DES test string, to be encrypted and decrypted..." |
print "Key1: %s" % k1.getKey() |
print "Key2: %s" % k2.getKey() |
print "Key3: %s" % k3.getKey() |
print "Data: %s" % d |
e1 = k1.encrypt(d) |
e2 = k2.decrypt(e1) |
e3 = k3.encrypt(e2) |
print "Encrypted: " + e3 |
d3 = k3.decrypt(e3) |
d2 = k2.encrypt(d3) |
d1 = k1.decrypt(d2) |
print "Decrypted: " + d1 |
print "DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8)) |
print "" |
# Example below uses the triple-des class to achieve the same as above |
print "Now using triple des class" |
t = time() |
t1 = triple_des(unhex("133457799BBCDFF1112233445566778877661100DD223311")) |
print "Key: %s" % t1.getKey() |
print "Data: %s" % d |
td1 = t1.encrypt(d) |
print "Encrypted: " + td1 |
td2 = t1.decrypt(td1) |
print "Decrypted: " + td2 |
print "Triple DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8)) |
def example_des(): |
from time import time |
# example of DES encrypting in CBC mode with the IV of "\0\0\0\0\0\0\0\0" |
print "Example of DES encryption using CBC mode\n" |
t = time() |
k = des("DESCRYPT", CBC, "\0\0\0\0\0\0\0\0") |
data = "DES encryption algorithm" |
print "Key : " + k.getKey() |
print "Data : " + data |
d = k.encrypt(data) |
print "Encrypted: " + d |
d = k.decrypt(d) |
print "Decrypted: " + d |
print "DES time taken: %f (6 crypt operations)" % (time() - t) |
print "" |
def __test__(): |
example_des() |
example_triple_des() |
def __fulltest__(): |
# This should not produce any unexpected errors or exceptions |
from binascii import unhexlify as unhex |
from binascii import hexlify as dohex |
__test__() |
print "" |
k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0") |
d = k.encrypt("DES encryption algorithm") |
if k.decrypt(d) != "DES encryption algorithm": |
print "Test 1 Error: Unencypted data block does not match start data" |
k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0") |
d = k.encrypt("Default string of text", '*') |
if k.decrypt(d, "*") != "Default string of text": |
print "Test 2 Error: Unencypted data block does not match start data" |
k = des("\r\n\tABC\r\n") |
d = k.encrypt("String to Pad", '*') |
if k.decrypt(d) != "String to Pad***": |
print "'%s'" % k.decrypt(d) |
print "Test 3 Error: Unencypted data block does not match start data" |
k = des("\r\n\tABC\r\n") |
d = k.encrypt(unhex("000102030405060708FF8FDCB04080"), unhex("44")) |
if k.decrypt(d, unhex("44")) != unhex("000102030405060708FF8FDCB04080"): |
print "Test 4a Error: Unencypted data block does not match start data" |
if k.decrypt(d) != unhex("000102030405060708FF8FDCB0408044"): |
print "Test 4b Error: Unencypted data block does not match start data" |
k = triple_des("MyDesKey\r\n\tABC\r\n0987*543") |
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) |
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): |
print "Test 5 Error: Unencypted data block does not match start data" |
k = triple_des("\r\n\tABC\r\n0987*543") |
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) |
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): |
print "Test 6 Error: Unencypted data block does not match start data" |
k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234") |
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080")) |
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"): |
print "Test 7 Error: Triple DES CBC failed." |
k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234") |
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"), '.') |
if k.decrypt(d, '.') != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"): |
print "Test 8 Error: Triple DES CBC with padding failed." |
def __filetest__(): |
from time import time |
f = open("pyDes.py", "rb+") |
d = f.read() |
f.close() |
t = time() |
k = des("MyDESKey") |
d = k.encrypt(d, " ") |
f = open("pyDes.py.enc", "wb+") |
f.write(d) |
f.close() |
d = k.decrypt(d, " ") |
f = open("pyDes.py.dec", "wb+") |
f.write(d) |
f.close() |
print "DES file test time: %f" % (time() - t) |
def __profile__(): |
import profile |
profile.run('__fulltest__()') |
#profile.run('__filetest__()') |
if __name__ == '__main__': |
__test__() |
#__fulltest__() |
#__filetest__() |
#__profile__() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/blockcipher.py |
---|
0,0 → 1,594 |
# ============================================================================= |
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com> |
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> ) |
# |
# Permission is hereby granted, free of charge, to any person obtaining a copy |
# of this software and associated documentation files (the "Software"), to deal |
# in the Software without restriction, including without limitation the rights |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
# copies of the Software, and to permit persons to whom the Software is |
# furnished to do so, subject to the following conditions: |
# |
# The above copyright notice and this permission notice shall be included in |
# all copies or substantial portions of the Software. |
# |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
# THE SOFTWARE. |
# ============================================================================= |
from ..Util import util |
from array import array |
from ..Util import padding |
MODE_ECB = 1 |
MODE_CBC = 2 |
MODE_CFB = 3 |
MODE_OFB = 5 |
MODE_CTR = 6 |
MODE_XTS = 7 |
MODE_CMAC = 8 |
class BlockCipher(): |
""" Base class for all blockciphers |
""" |
key_error_message = "Wrong key size" #should be overwritten in child classes |
def __init__(self,key,mode,IV,counter,cipher_module,segment_size,args={}): |
# Cipher classes inheriting from this one take care of: |
# self.blocksize |
# self.cipher |
self.key = key |
self.mode = mode |
self.cache = '' |
self.ed = None |
if 'keylen_valid' in dir(self): #wrappers for pycrypto functions don't have this function |
if not self.keylen_valid(key) and type(key) is not tuple: |
raise ValueError(self.key_error_message) |
if IV == None: |
self.IV = '\x00'*self.blocksize |
else: |
self.IV = IV |
if segment_size == None: |
segment_size = 8 |
if mode <> MODE_XTS: |
self.cipher = cipher_module(self.key,**args) |
if mode == MODE_ECB: |
self.chain = ECB(self.cipher, self.blocksize) |
elif mode == MODE_CBC: |
if len(self.IV) <> self.blocksize: |
raise Exception,"the IV length should be %i bytes"%self.blocksize |
self.chain = CBC(self.cipher, self.blocksize,self.IV) |
elif mode == MODE_CFB: |
if len(self.IV) <> self.blocksize: |
raise Exception,"the IV length should be %i bytes"%self.blocksize |
if segment_size > self.blocksize*8 or segment_size%8 <> 0: |
# current CFB implementation doesn't support bit level acces => segment_size should be multiple of bytes |
raise ValueError,"segment size should be a multiple of 8 bits between 8 and %i"%(self.blocksize*8) |
self.chain = CFB(self.cipher, self.blocksize,self.IV,segment_size) |
elif mode == MODE_OFB: |
if len(self.IV) <> self.blocksize: |
raise ValueError("the IV length should be %i bytes"%self.blocksize) |
self.chain = OFB(self.cipher, self.blocksize,self.IV) |
elif mode == MODE_CTR: |
if (counter == None) or not callable(counter): |
raise Exception,"Supply a valid counter object for the CTR mode" |
self.chain = CTR(self.cipher,self.blocksize,counter) |
elif mode == MODE_XTS: |
if self.blocksize <> 16: |
raise Exception,'XTS only works with blockcipher that have a 128-bit blocksize' |
if not(type(key) == tuple and len(key) == 2): |
raise Exception,'Supply two keys as a tuple when using XTS' |
if 'keylen_valid' in dir(self): #wrappers for pycrypto functions don't have this function |
if not self.keylen_valid(key[0]) or not self.keylen_valid(key[1]): |
raise ValueError(self.key_error_message) |
self.cipher = cipher_module(self.key[0],**args) |
self.cipher2 = cipher_module(self.key[1],**args) |
self.chain = XTS(self.cipher, self.cipher2) |
elif mode == MODE_CMAC: |
if self.blocksize not in (8,16): |
raise Exception,'CMAC only works with blockcipher that have a 64 or 128-bit blocksize' |
self.chain = CMAC(self.cipher,self.blocksize,self.IV) |
else: |
raise Exception,"Unknown chaining mode!" |
def encrypt(self,plaintext,n=''): |
"""Encrypt some plaintext |
plaintext = a string of binary data |
n = the 'tweak' value when the chaining mode is XTS |
The encrypt function will encrypt the supplied plaintext. |
The behavior varies slightly depending on the chaining mode. |
ECB, CBC: |
--------- |
When the supplied plaintext is not a multiple of the blocksize |
of the cipher, then the remaining plaintext will be cached. |
The next time the encrypt function is called with some plaintext, |
the new plaintext will be concatenated to the cache and then |
cache+plaintext will be encrypted. |
CFB, OFB, CTR: |
-------------- |
When the chaining mode allows the cipher to act as a stream cipher, |
the encrypt function will always encrypt all of the supplied |
plaintext immediately. No cache will be kept. |
XTS: |
---- |
Because the handling of the last two blocks is linked, |
it needs the whole block of plaintext to be supplied at once. |
Every encrypt function called on a XTS cipher will output |
an encrypted block based on the current supplied plaintext block. |
CMAC: |
----- |
Everytime the function is called, the hash from the input data is calculated. |
No finalizing needed. |
The hashlength is equal to block size of the used block cipher. |
""" |
#self.ed = 'e' if chain is encrypting, 'd' if decrypting, |
# None if nothing happened with the chain yet |
#assert self.ed in ('e',None) |
# makes sure you don't encrypt with a cipher that has started decrypting |
self.ed = 'e' |
if self.mode == MODE_XTS: |
# data sequence number (or 'tweak') has to be provided when in XTS mode |
return self.chain.update(plaintext,'e',n) |
else: |
return self.chain.update(plaintext,'e') |
def decrypt(self,ciphertext,n=''): |
"""Decrypt some ciphertext |
ciphertext = a string of binary data |
n = the 'tweak' value when the chaining mode is XTS |
The decrypt function will decrypt the supplied ciphertext. |
The behavior varies slightly depending on the chaining mode. |
ECB, CBC: |
--------- |
When the supplied ciphertext is not a multiple of the blocksize |
of the cipher, then the remaining ciphertext will be cached. |
The next time the decrypt function is called with some ciphertext, |
the new ciphertext will be concatenated to the cache and then |
cache+ciphertext will be decrypted. |
CFB, OFB, CTR: |
-------------- |
When the chaining mode allows the cipher to act as a stream cipher, |
the decrypt function will always decrypt all of the supplied |
ciphertext immediately. No cache will be kept. |
XTS: |
---- |
Because the handling of the last two blocks is linked, |
it needs the whole block of ciphertext to be supplied at once. |
Every decrypt function called on a XTS cipher will output |
a decrypted block based on the current supplied ciphertext block. |
CMAC: |
----- |
Mode not supported for decryption as this does not make sense. |
""" |
#self.ed = 'e' if chain is encrypting, 'd' if decrypting, |
# None if nothing happened with the chain yet |
#assert self.ed in ('d',None) |
# makes sure you don't decrypt with a cipher that has started encrypting |
self.ed = 'd' |
if self.mode == MODE_XTS: |
# data sequence number (or 'tweak') has to be provided when in XTS mode |
return self.chain.update(ciphertext,'d',n) |
else: |
return self.chain.update(ciphertext,'d') |
def final(self,padfct=padding.PKCS7): |
# TODO: after calling final, reset the IV? so the cipher is as good as new? |
"""Finalizes the encryption by padding the cache |
padfct = padding function |
import from CryptoPlus.Util.padding |
For ECB, CBC: the remaining bytes in the cache will be padded and |
encrypted. |
For OFB,CFB, CTR: an encrypted padding will be returned, making the |
total outputed bytes since construction of the cipher |
a multiple of the blocksize of that cipher. |
If the cipher has been used for decryption, the final function won't do |
anything. You have to manually unpad if necessary. |
After finalization, the chain can still be used but the IV, counter etc |
aren't reset but just continue as they were after the last step (finalization step). |
""" |
assert self.mode not in (MODE_XTS, MODE_CMAC) # finalizing (=padding) doesn't make sense when in XTS or CMAC mode |
if self.ed == 'e': |
# when the chain is in encryption mode, finalizing will pad the cache and encrypt this last block |
if self.mode in (MODE_OFB,MODE_CFB,MODE_CTR): |
dummy = '0'*(self.chain.totalbytes%self.blocksize) # a dummy string that will be used to get a valid padding |
else: #ECB, CBC |
dummy = self.chain.cache |
pad = padfct(dummy,padding.PAD,self.blocksize)[len(dummy):] # construct the padding necessary |
return self.chain.update(pad,'e') # supply the padding to the update function => chain cache will be "cache+padding" |
else: |
# final function doesn't make sense when decrypting => padding should be removed manually |
pass |
class ECB: |
"""ECB chaining mode |
""" |
def __init__(self, codebook, blocksize): |
self.cache = '' |
self.codebook = codebook |
self.blocksize = blocksize |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any length |
ed: 'e' for encryption, 'd' for decryption |
Output: |
processed raw string block(s), if any |
When the supplied data is not a multiple of the blocksize |
of the cipher, then the remaining input data will be cached. |
The next time the update function is called with some data, |
the new data will be concatenated to the cache and then |
cache+data will be processed and full blocks will be outputted. |
""" |
output_blocks = [] |
self.cache += data |
if len(self.cache) < self.blocksize: |
return '' |
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize): |
#the only difference between encryption/decryption in the chain is the cipher block |
if ed == 'e': |
output_blocks.append(self.codebook.encrypt( self.cache[i:i + self.blocksize] )) |
else: |
output_blocks.append(self.codebook.decrypt( self.cache[i:i + self.blocksize] )) |
self.cache = self.cache[i+self.blocksize:] |
return ''.join(output_blocks) |
class CBC: |
"""CBC chaining mode |
""" |
def __init__(self, codebook, blocksize, IV): |
self.IV = IV |
self.cache = '' |
self.codebook = codebook |
self.blocksize = blocksize |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any length |
ed: 'e' for encryption, 'd' for decryption |
Output: |
processed raw string block(s), if any |
When the supplied data is not a multiple of the blocksize |
of the cipher, then the remaining input data will be cached. |
The next time the update function is called with some data, |
the new data will be concatenated to the cache and then |
cache+data will be processed and full blocks will be outputted. |
""" |
if ed == 'e': |
encrypted_blocks = '' |
self.cache += data |
if len(self.cache) < self.blocksize: |
return '' |
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize): |
self.IV = self.codebook.encrypt(util.xorstring(self.cache[i:i+self.blocksize],self.IV)) |
encrypted_blocks += self.IV |
self.cache = self.cache[i+self.blocksize:] |
return encrypted_blocks |
else: |
decrypted_blocks = '' |
self.cache += data |
if len(self.cache) < self.blocksize: |
return '' |
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize): |
plaintext = util.xorstring(self.IV,self.codebook.decrypt(self.cache[i:i + self.blocksize])) |
self.IV = self.cache[i:i + self.blocksize] |
decrypted_blocks+=plaintext |
self.cache = self.cache[i+self.blocksize:] |
return decrypted_blocks |
class CFB: |
# TODO: bit access instead of only byte level access |
"""CFB Chaining Mode |
Can be accessed as a stream cipher. |
""" |
def __init__(self, codebook, blocksize, IV,segment_size): |
self.codebook = codebook |
self.IV = IV |
self.blocksize = blocksize |
self.segment_size = segment_size/8 |
self.keystream = [] |
self.totalbytes = 0 |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any multiple of bytes |
ed: 'e' for encryption, 'd' for decryption |
Output: |
processed raw string |
The encrypt/decrypt functions will always process all of the supplied |
input data immediately. No cache will be kept. |
""" |
output = list(data) |
for i in xrange(len(data)): |
if ed =='e': |
if len(self.keystream) == 0: |
block = self.codebook.encrypt(self.IV) |
self.keystream = list(block)[:self.segment_size] # keystream consists of the s MSB's |
self.IV = self.IV[self.segment_size:] # keeping (b-s) LSB's |
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0))) |
self.IV += output[i] # the IV for the next block in the chain is being built byte per byte as the ciphertext flows in |
else: |
if len(self.keystream) == 0: |
block = self.codebook.encrypt(self.IV) |
self.keystream = list(block)[:self.segment_size] |
self.IV = self.IV[self.segment_size:] |
self.IV += output[i] |
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0))) |
self.totalbytes += len(output) |
return ''.join(output) |
class OFB: |
"""OFB Chaining Mode |
Can be accessed as a stream cipher. |
""" |
def __init__(self, codebook, blocksize, IV): |
self.codebook = codebook |
self.IV = IV |
self.blocksize = blocksize |
self.keystream = [] |
self.totalbytes = 0 |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any multiple of bytes |
ed: 'e' for encryption, 'd' for decryption |
Output: |
processed raw string |
The encrypt/decrypt functions will always process all of the supplied |
input data immediately. No cache will be kept. |
""" |
#no difference between encryption and decryption mode |
n = len(data) |
blocksize = self.blocksize |
output = list(data) |
for i in xrange(n): |
if len(self.keystream) == 0: #encrypt a new counter block when the current keystream is fully used |
self.IV = self.codebook.encrypt(self.IV) |
self.keystream = list(self.IV) |
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0))) #as long as an encrypted counter value is available, the output is just "input XOR keystream" |
self.totalbytes += len(output) |
return ''.join(output) |
class CTR: |
"""CTR Chaining Mode |
Can be accessed as a stream cipher. |
""" |
# initial counter value can be choosen, decryption always starts from beginning |
# -> you can start from anywhere yourself: just feed the cipher encoded blocks and feed a counter with the corresponding value |
def __init__(self, codebook, blocksize, counter): |
self.codebook = codebook |
self.counter = counter |
self.blocksize = blocksize |
self.keystream = [] #holds the output of the current encrypted counter value |
self.totalbytes = 0 |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any multiple of bytes |
ed: 'e' for encryption, 'd' for decryption |
Output: |
processed raw string |
The encrypt/decrypt functions will always process all of the supplied |
input data immediately. No cache will be kept. |
""" |
# no need for the encryption/decryption distinction: both are the same |
n = len(data) |
blocksize = self.blocksize |
output = list(data) |
for i in xrange(n): |
if len(self.keystream) == 0: #encrypt a new counter block when the current keystream is fully used |
block = self.codebook.encrypt(self.counter()) |
self.keystream = list(block) |
output[i] = chr(ord(output[i])^ord(self.keystream.pop(0))) #as long as an encrypted counter value is available, the output is just "input XOR keystream" |
self.totalbytes += len(output) |
return ''.join(output) |
class XTS: |
"""XTS Chaining Mode |
Usable with blockciphers with a 16-byte blocksize |
""" |
# TODO: allow other blocksizes besides 16bytes? |
def __init__(self,codebook1, codebook2): |
self.cache = '' |
self.codebook1 = codebook1 |
self.codebook2 = codebook2 |
def update(self, data, ed,tweak=''): |
# supply n as a raw string |
# tweak = data sequence number |
"""Perform a XTS encrypt/decrypt operation. |
Because the handling of the last two blocks is linked, |
it needs the whole block of ciphertext to be supplied at once. |
Every decrypt function called on a XTS cipher will output |
a decrypted block based on the current supplied ciphertext block. |
""" |
output = '' |
assert len(data) > 15, "At least one block of 128 bits needs to be supplied" |
assert len(data) < 128*pow(2,20) |
# initializing T |
# e_k2_n = E_K2(tweak) |
e_k2_n = self.codebook2.encrypt(tweak+ '\x00' * (16-len(tweak)))[::-1] |
self.T = util.string2number(e_k2_n) |
i=0 |
while i < ((len(data) // 16)-1): #Decrypt all the blocks but one last full block and opt one last partial block |
# C = E_K1(P xor T) xor T |
output += self.__xts_step(ed,data[i*16:(i+1)*16],self.T) |
# T = E_K2(n) mul (a pow i) |
self.__T_update() |
i+=1 |
# Check if the data supplied is a multiple of 16 bytes -> one last full block and we're done |
if len(data[i*16:]) == 16: |
# C = E_K1(P xor T) xor T |
output += self.__xts_step(ed,data[i*16:(i+1)*16],self.T) |
# T = E_K2(n) mul (a pow i) |
self.__T_update() |
else: |
T_temp = [self.T] |
self.__T_update() |
T_temp.append(self.T) |
if ed=='d': |
# Permutation of the last two indexes |
T_temp.reverse() |
# Decrypt/Encrypt the last two blocks when data is not a multiple of 16 bytes |
Cm1 = data[i*16:(i+1)*16] |
Cm = data[(i+1)*16:] |
PP = self.__xts_step(ed,Cm1,T_temp[0]) |
Cp = PP[len(Cm):] |
Pm = PP[:len(Cm)] |
CC = Cm+Cp |
Pm1 = self.__xts_step(ed,CC,T_temp[1]) |
output += Pm1 + Pm |
return output |
def __xts_step(self,ed,tocrypt,T): |
T_string = util.number2string_N(T,16)[::-1] |
# C = E_K1(P xor T) xor T |
if ed == 'd': |
return util.xorstring(T_string, self.codebook1.decrypt(util.xorstring(T_string, tocrypt))) |
else: |
return util.xorstring(T_string, self.codebook1.encrypt(util.xorstring(T_string, tocrypt))) |
def __T_update(self): |
# Used for calculating T for a certain step using the T value from the previous step |
self.T = self.T << 1 |
# if (Cout) |
if self.T >> (8*16): |
#T[0] ^= GF_128_FDBK; |
self.T = self.T ^ 0x100000000000000000000000000000087L |
class CMAC: |
"""CMAC chaining mode |
Supports every cipher with a blocksize available |
in the list CMAC.supported_blocksizes. |
The hashlength is equal to block size of the used block cipher. |
Usable with blockciphers with a 8 or 16-byte blocksize |
""" |
# TODO: move to hash module? |
# TODO: change update behaviour to .update() and .digest() as for all hash modules? |
# -> other hash functions in pycrypto: calling update, concatenates current input with previous input and hashes everything |
__Rb_dictionary = {64:0x000000000000001b,128:0x00000000000000000000000000000087} |
supported_blocksizes = __Rb_dictionary.keys() |
def __init__(self,codebook,blocksize,IV): |
# Purpose of init: calculate Lu & Lu2 |
#blocksize (in bytes): to select the Rb constant in the dictionary |
#Rb as a dictionary: adding support for other blocksizes is easy |
self.cache='' |
self.blocksize = blocksize |
self.codebook = codebook |
self.IV = IV |
#Rb_dictionary: holds values for Rb for different blocksizes |
# values for 64 and 128 bits found here: http://www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html |
# explanation from: http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf |
# Rb is a representation of a certain irreducible binary polynomial of degree b, namely, |
# the lexicographically first among all such polynomials with the minimum possible number of |
# nonzero terms. If this polynomial is expressed as ub+cb-1ub-1+...+c2u2+c1u+c0, where the |
# coefficients cb-1, cb-2, ..., c2, c1, c0 are either 0 or 1, then Rb is the bit string cb-1cb-2...c2c1c0. |
self.Rb = self.__Rb_dictionary[blocksize*8] |
mask1 = int(('\xff'*blocksize).encode('hex'),16) |
mask2 = int(('\x80' + '\x00'*(blocksize-1) ).encode('hex'),16) |
L = int(self.codebook.encrypt('\x00'*blocksize).encode('hex'),16) |
if L & mask2: |
Lu = ((L << 1) & mask1) ^ self.Rb |
else: |
Lu = L << 1 |
Lu = Lu & mask1 |
if Lu & mask2: |
Lu2 = ((Lu << 1) & mask1)^ self.Rb |
else: |
Lu2 = Lu << 1 |
Lu2 = Lu2 & mask1 |
self.Lu =util.number2string_N(Lu,self.blocksize) |
self.Lu2=util.number2string_N(Lu2,self.blocksize) |
def update(self, data, ed): |
"""Processes the given ciphertext/plaintext |
Inputs: |
data: raw string of any length |
ed: 'e' for encryption, 'd' for decryption |
Output: |
hashed data as raw string |
This is not really an update function: |
Everytime the function is called, the hash from the input data is calculated. |
No finalizing needed. |
""" |
assert ed == 'e' |
blocksize = self.blocksize |
m = (len(data)+blocksize-1)/blocksize #m = amount of datablocks |
i=0 |
for i in range(1,m): |
self.IV = self.codebook.encrypt( util.xorstring(data[(i-1)*blocksize:(i)*blocksize],self.IV) ) |
if len(data[(i)*blocksize:])==blocksize: |
X = util.xorstring(util.xorstring(data[(i)*blocksize:],self.IV),self.Lu) |
else: |
tmp = data[(i)*blocksize:] + '\x80' + '\x00'*(blocksize - len(data[(i)*blocksize:])-1) |
X = util.xorstring(util.xorstring(tmp,self.IV),self.Lu2) |
T = self.codebook.encrypt(X) |
return T |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/pyblowfish.py |
---|
0,0 → 1,513 |
# |
# blowfish.py |
# Copyright (C) Michael Gilfix <mgilfix@gmail.com> |
# |
# This module is open source; you can redistribute it and/or |
# modify it under the terms of the GPL or Artistic License. |
# These licenses are available at http://www.opensource.org |
# |
# This software must be used and distributed in accordance |
# with the law. The author claims no liability for its |
# misuse. |
# |
# This program is distributed in the hope that it will be useful, |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
# |
""" |
Blowfish Encryption |
This module is a pure python implementation of Bruce Schneier's |
encryption scheme 'Blowfish'. Blowish is a 16-round Feistel Network |
cipher and offers substantial speed gains over DES. |
The key is a string of length anywhere between 64 and 448 bits, or |
equivalently 8 and 56 bytes. The encryption and decryption functions |
operate on 64-bit blocks, or 8 byte strings. |
Send questions, comments, bugs my way. Or, just let me know you're |
using the software: |
Michael Gilfix <mgilfix@gmail.com> |
""" |
__author__ = "Michael Gilfix <mgilfix@gmail.com>" |
import copy |
class Blowfish: |
"""Blowfish encryption Scheme |
This class implements the encryption and decryption |
functionality of the Blowfish cipher. |
Public functions: |
def __init__(self, key) |
Creates an instance of blowfish using 'key' |
as the encryption key. Key is a string of |
length ranging from 8 to 56 bytes (64 to 448 |
bits). Once the instance of the object is |
created, the key is no longer necessary. |
def encrypt(self, data): |
Convenience method. Calls crypt under the covers. |
def decrypt(self, data): |
Convenience method. Calls crypt under the covers. |
def crypt(self, data, direction): |
Performs actual encryption/decryption of data |
depending on the direction. The data is broken |
up into 8 byte chunks for the ciphering |
process. If the data does not align on 8 byte |
chunks, then null padding is added. This is |
removed upon decryption. |
def cipher(self, xl, xr, direction): |
Encrypts a 64-bit block of data where xl is |
the upper 32-bits and xr is the lower 32-bits. |
'direction' is the direction to apply the |
cipher, either ENCRYPT or DECRYPT constants. |
returns a tuple of either encrypted or decrypted |
data of the left half and right half of the |
64-bit block. |
Private members: |
def __round_func(self, xl) |
Performs an obscuring function on the 32-bit |
block of data 'xl', which is the left half of |
the 64-bit block of data. Returns the 32-bit |
result as a long integer. |
""" |
# Cipher directions |
ENCRYPT = 0 |
DECRYPT = 1 |
# For the __round_func |
MODULUS = 2L ** 32 |
# Constants |
BLOCK_SIZE = 8 |
MAX_KEY_LENGTH = 56 |
P_BOXES = [ |
0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, |
0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, |
0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, |
0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, |
0x9216D5D9L, 0x8979FB1BL |
] |
S_BOXES = [ |
[ |
0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, |
0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, |
0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, |
0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, |
0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL, |
0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L, |
0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL, |
0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL, |
0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L, |
0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L, |
0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL, |
0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL, |
0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL, |
0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L, |
0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L, |
0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L, |
0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L, |
0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L, |
0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL, |
0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L, |
0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L, |
0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L, |
0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L, |
0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL, |
0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L, |
0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL, |
0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL, |
0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L, |
0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL, |
0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L, |
0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL, |
0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L, |
0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L, |
0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL, |
0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L, |
0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L, |
0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL, |
0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L, |
0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL, |
0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L, |
0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L, |
0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL, |
0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L, |
0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L, |
0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L, |
0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L, |
0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L, |
0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL, |
0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL, |
0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L, |
0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L, |
0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L, |
0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L, |
0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL, |
0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L, |
0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL, |
0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL, |
0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L, |
0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L, |
0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L, |
0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, |
0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, |
0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, |
0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076A |
], |
[ |
0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, |
0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, |
0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, |
0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, |
0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L, |
0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L, |
0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL, |
0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L, |
0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L, |
0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L, |
0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL, |
0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL, |
0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L, |
0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L, |
0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L, |
0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L, |
0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL, |
0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL, |
0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL, |
0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L, |
0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL, |
0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L, |
0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L, |
0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL, |
0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL, |
0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L, |
0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL, |
0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L, |
0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL, |
0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL, |
0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L, |
0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L, |
0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L, |
0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L, |
0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L, |
0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L, |
0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L, |
0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL, |
0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L, |
0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL, |
0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L, |
0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L, |
0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L, |
0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L, |
0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L, |
0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L, |
0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L, |
0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L, |
0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L, |
0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L, |
0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L, |
0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L, |
0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L, |
0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L, |
0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L, |
0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L, |
0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL, |
0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL, |
0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L, |
0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL, |
0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, |
0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, |
0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, |
0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7 |
], |
[ |
0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, |
0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, |
0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, |
0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, |
0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L, |
0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L, |
0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL, |
0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL, |
0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL, |
0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L, |
0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L, |
0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL, |
0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L, |
0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL, |
0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L, |
0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL, |
0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L, |
0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL, |
0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L, |
0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL, |
0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L, |
0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L, |
0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL, |
0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L, |
0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L, |
0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L, |
0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L, |
0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL, |
0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L, |
0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL, |
0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L, |
0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL, |
0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L, |
0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL, |
0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL, |
0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL, |
0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L, |
0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L, |
0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL, |
0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL, |
0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL, |
0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL, |
0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL, |
0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L, |
0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L, |
0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L, |
0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L, |
0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL, |
0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL, |
0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L, |
0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L, |
0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L, |
0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L, |
0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L, |
0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L, |
0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L, |
0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L, |
0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L, |
0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L, |
0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL, |
0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, |
0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, |
0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, |
0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0 |
], |
[ |
0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, |
0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, |
0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, |
0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, |
0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L, |
0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L, |
0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L, |
0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L, |
0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L, |
0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L, |
0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L, |
0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L, |
0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L, |
0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L, |
0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L, |
0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL, |
0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL, |
0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L, |
0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL, |
0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL, |
0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL, |
0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L, |
0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL, |
0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL, |
0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L, |
0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L, |
0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L, |
0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L, |
0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL, |
0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL, |
0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L, |
0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L, |
0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L, |
0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL, |
0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L, |
0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L, |
0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L, |
0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL, |
0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L, |
0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L, |
0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L, |
0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL, |
0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL, |
0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L, |
0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L, |
0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L, |
0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L, |
0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL, |
0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L, |
0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL, |
0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL, |
0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L, |
0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L, |
0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL, |
0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L, |
0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL, |
0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L, |
0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL, |
0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L, |
0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L, |
0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, |
0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, |
0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, |
0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6 |
] |
] |
def __init__(self, key): |
if not key or len(key) < 8 or len(key) > 56: |
raise ValueError, "Invalid cipher key length: %s" %len(key) |
# Initialize cipher copies from static data |
self.p_boxes = copy.deepcopy(self.P_BOXES) |
self.s_boxes = copy.deepcopy(self.S_BOXES) |
# Cycle through the p-boxes and round-robin XOR the |
# key ordinals with the p-boxes |
key_ord = map(ord, key) |
key_len = len(key_ord) |
index = 0 |
for i in range(len(self.p_boxes)): |
val = (key_ord[index % key_len] << 24) + \ |
(key_ord[(index + 1) % key_len] << 16) + \ |
(key_ord[(index + 2) % key_len] << 8) + \ |
key_ord[(index + 3) % key_len] |
self.p_boxes[i] = self.p_boxes[i] ^ val |
index = index + 4 |
# For the chaining process |
l, r = 0, 0 |
# Begin chain replacing the p-boxes |
for i in range(0, len(self.p_boxes), 2): |
l, r = self.cipher(l, r, self.ENCRYPT) |
self.p_boxes[i] = l |
self.p_boxes[i + 1] = r |
# Chain replace the s-boxes |
for i in range(len(self.s_boxes)): |
for j in range(0, len(self.s_boxes[i]), 2): |
l, r = self.cipher(l, r, self.ENCRYPT) |
self.s_boxes[i][j] = l |
self.s_boxes[i][j + 1] = r |
def cipher(self, xl, xr, direction): |
if direction == self.ENCRYPT: |
for i in range(16): |
xl = xl ^ self.p_boxes[i] |
xr = self.__round_func(xl) ^ xr |
xl, xr = xr, xl |
xl, xr = xr, xl |
xr = xr ^ self.p_boxes[16] |
xl = xl ^ self.p_boxes[17] |
else: |
for i in range(17, 1, -1): |
xl = xl ^ self.p_boxes[i] |
xr = self.__round_func(xl) ^ xr |
xl, xr = xr, xl |
xl, xr = xr, xl |
xr = xr ^ self.p_boxes[1] |
xl = xl ^ self.p_boxes[0] |
return xl, xr |
def __round_func(self, xl): |
a = (xl & 0xFF000000) >> 24 |
b = (xl & 0x00FF0000) >> 16 |
c = (xl & 0x0000FF00) >> 8 |
d = xl & 0x000000FF |
# Perform all ops as longs then and out the last 32-bits to |
# obtain the integer |
f = (self.s_boxes[0][a] + self.s_boxes[1][b]) % self.MODULUS |
f = f ^ self.s_boxes[2][c] |
f = f + self.s_boxes[3][d] |
f = (f % self.MODULUS) & 0xFFFFFFFF |
return int(f) |
def crypt(self, data, direction): |
# Pad the data if need be so it has 8 byte chunks |
align = len(data) % 8 |
if align != 0: |
padding = '\x00' * (8 - align) |
data += padding |
result = '' |
for i in range(0, len(data), 8): |
# Use big endianess since that's what everyone else uses |
chunk = map(ord, data[i : i + 8]) |
xl = chunk[3] | (chunk[2] << 8) | (chunk[1] << 16) | (chunk[0] << 24) |
xr = chunk[7] | (chunk[6] << 8) | (chunk[5] << 16) | (chunk[4] << 24) |
xl, xr = self.cipher(xl, xr, direction) |
chunk = ( |
(xl >> 24) & 0xFF, (xl >> 16) & 0xFF, (xl >> 8) & 0xFF, xl & 0xFF, |
(xr >> 24) & 0xFF, (xr >> 16) & 0xFF, (xr >> 8) & 0xFF, xr & 0xFF |
) |
result += ''.join(map(chr, chunk)) |
# Strip the padding if we decrypted |
if direction == self.DECRYPT: |
result = result.rstrip('\x00') |
return result |
def encrypt(self, data): |
return self.crypt(data, self.ENCRYPT) |
def decrypt(self, data): |
return self.crypt(data, self.DECRYPT) |
def block_size(self): |
return self.BLOCK_SIZE |
def max_key_length(self): |
return self.MAX_KEY_LENGTH |
def max_key_bits(self): |
return self.max_key_length() * self.block_size() |
############################################################## |
# Simple module testing |
if __name__ == '__main__': |
key = 'This is a simple test key' |
cipher = Blowfish(key) |
print "Max key bits: %s" %cipher.max_key_bits() |
print "Testing encryption:" |
xl = 123456 |
xr = 654321 |
print "\tPlain text: (%s, %s)" %(xl, xr) |
cl, cr = cipher.cipher(xl, xr, cipher.ENCRYPT) |
print "\tCrypted is: (%s, %s)" %(cl, cr) |
dl, dr = cipher.cipher(cl, cr, cipher.DECRYPT) |
print "\tUnencrypted is: (%s, %s)" %(dl, dr) |
print "Testing buffer encrypt:" |
text = 'This is my test string. Sample text goes here' |
print "\tText: [%s], len: %s" %(text, len(text)) |
crypted = cipher.encrypt(text) |
print "\tEncrypted: [%s]" %crypted |
decrypted = cipher.decrypt(crypted) |
print "\tDecrypted: [%s]" %decrypted |
print "Testing decryption from separate instances:" |
cipher1 = Blowfish(key) |
crypted = cipher1.encrypt(text) |
print "\tEncrypt cipher1: [%s]" %crypted |
cipher2 = Blowfish(key) |
decrypted = cipher2.decrypt(crypted) |
print "\tDecrypt cipher2: [%s]" %decrypted |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/ARC2.py |
---|
0,0 → 1,59 |
from blockcipher import * |
import Crypto.Cipher.ARC2 |
import Crypto |
from pkg_resources import parse_version |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,effective_keylen=None): |
"""Create a new cipher object |
ARC2 using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the keys |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
effective_keylen = how much bits to effectively use from the supplied key |
-> will only be used when the pycrypto version on your system is >2.0.1 |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import ARC2 |
http://www.ietf.org/rfc/rfc2268.txt |
Doctest will fail when using pycrypto 2.0.1 and older |
------------------------------------ |
>>> key = "0000000000000000".decode('hex') |
>>> plaintext = "0000000000000000".decode('hex') |
>>> ek = 63 |
>>> cipher = ARC2.new(key,ARC2.MODE_ECB,effective_keylen=ek) |
>>> cipher.encrypt(plaintext).encode('hex') |
'ebb773f993278eff' |
""" |
return ARC2(key,mode,IV,counter,effective_keylen,segment_size) |
class ARC2(BlockCipher): |
def __init__(self,key,mode,IV,counter,effective_keylen,segment_size): |
# pycrypto versions newer than 2.0.1 will have support for "effective_keylen" |
if parse_version(Crypto.__version__) <= parse_version("2.0.1"): |
cipher_module = Crypto.Cipher.ARC2.new |
args = {} |
else: |
cipher_module = Crypto.Cipher.ARC2.new |
args = {'effective_keylen':effective_keylen} |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/rijndael.py |
---|
0,0 → 1,392 |
""" |
A pure python (slow) implementation of rijndael with a decent interface |
To include - |
from rijndael import rijndael |
To do a key setup - |
r = rijndael(key, block_size = 16) |
key must be a string of length 16, 24, or 32 |
blocksize must be 16, 24, or 32. Default is 16 |
To use - |
ciphertext = r.encrypt(plaintext) |
plaintext = r.decrypt(ciphertext) |
If any strings are of the wrong length a ValueError is thrown |
""" |
# ported from the Java reference code by Bram Cohen, bram@gawth.com, April 2001 |
# this code is public domain, unless someone makes |
# an intellectual property claim against the reference |
# code, in which case it can be made public domain by |
# deleting all the comments and renaming all the variables |
import copy |
import string |
#----------------------- |
#TREV - ADDED BECAUSE THERE'S WARNINGS ABOUT INT OVERFLOW BEHAVIOR CHANGING IN |
#2.4..... |
import os |
if os.name != "java": |
import exceptions |
if hasattr(exceptions, "FutureWarning"): |
import warnings |
warnings.filterwarnings("ignore", category=FutureWarning, append=1) |
#----------------------- |
shifts = [[[0, 0], [1, 3], [2, 2], [3, 1]], |
[[0, 0], [1, 5], [2, 4], [3, 3]], |
[[0, 0], [1, 7], [3, 5], [4, 4]]] |
# [keysize][block_size] |
num_rounds = {16: {16: 10, 24: 12, 32: 14}, 24: {16: 12, 24: 12, 32: 14}, 32: {16: 14, 24: 14, 32: 14}} |
A = [[1, 1, 1, 1, 1, 0, 0, 0], |
[0, 1, 1, 1, 1, 1, 0, 0], |
[0, 0, 1, 1, 1, 1, 1, 0], |
[0, 0, 0, 1, 1, 1, 1, 1], |
[1, 0, 0, 0, 1, 1, 1, 1], |
[1, 1, 0, 0, 0, 1, 1, 1], |
[1, 1, 1, 0, 0, 0, 1, 1], |
[1, 1, 1, 1, 0, 0, 0, 1]] |
# produce log and alog tables, needed for multiplying in the |
# field GF(2^m) (generator = 3) |
alog = [1] |
for i in xrange(255): |
j = (alog[-1] << 1) ^ alog[-1] |
if j & 0x100 != 0: |
j ^= 0x11B |
alog.append(j) |
log = [0] * 256 |
for i in xrange(1, 255): |
log[alog[i]] = i |
# multiply two elements of GF(2^m) |
def mul(a, b): |
if a == 0 or b == 0: |
return 0 |
return alog[(log[a & 0xFF] + log[b & 0xFF]) % 255] |
# substitution box based on F^{-1}(x) |
box = [[0] * 8 for i in xrange(256)] |
box[1][7] = 1 |
for i in xrange(2, 256): |
j = alog[255 - log[i]] |
for t in xrange(8): |
box[i][t] = (j >> (7 - t)) & 0x01 |
B = [0, 1, 1, 0, 0, 0, 1, 1] |
# affine transform: box[i] <- B + A*box[i] |
cox = [[0] * 8 for i in xrange(256)] |
for i in xrange(256): |
for t in xrange(8): |
cox[i][t] = B[t] |
for j in xrange(8): |
cox[i][t] ^= A[t][j] * box[i][j] |
# S-boxes and inverse S-boxes |
S = [0] * 256 |
Si = [0] * 256 |
for i in xrange(256): |
S[i] = cox[i][0] << 7 |
for t in xrange(1, 8): |
S[i] ^= cox[i][t] << (7-t) |
Si[S[i] & 0xFF] = i |
# T-boxes |
G = [[2, 1, 1, 3], |
[3, 2, 1, 1], |
[1, 3, 2, 1], |
[1, 1, 3, 2]] |
AA = [[0] * 8 for i in xrange(4)] |
for i in xrange(4): |
for j in xrange(4): |
AA[i][j] = G[i][j] |
AA[i][i+4] = 1 |
for i in xrange(4): |
pivot = AA[i][i] |
if pivot == 0: |
t = i + 1 |
while AA[t][i] == 0 and t < 4: |
t += 1 |
assert t != 4, 'G matrix must be invertible' |
for j in xrange(8): |
AA[i][j], AA[t][j] = AA[t][j], AA[i][j] |
pivot = AA[i][i] |
for j in xrange(8): |
if AA[i][j] != 0: |
AA[i][j] = alog[(255 + log[AA[i][j] & 0xFF] - log[pivot & 0xFF]) % 255] |
for t in xrange(4): |
if i != t: |
for j in xrange(i+1, 8): |
AA[t][j] ^= mul(AA[i][j], AA[t][i]) |
AA[t][i] = 0 |
iG = [[0] * 4 for i in xrange(4)] |
for i in xrange(4): |
for j in xrange(4): |
iG[i][j] = AA[i][j + 4] |
def mul4(a, bs): |
if a == 0: |
return 0 |
r = 0 |
for b in bs: |
r <<= 8 |
if b != 0: |
r = r | mul(a, b) |
return r |
T1 = [] |
T2 = [] |
T3 = [] |
T4 = [] |
T5 = [] |
T6 = [] |
T7 = [] |
T8 = [] |
U1 = [] |
U2 = [] |
U3 = [] |
U4 = [] |
for t in xrange(256): |
s = S[t] |
T1.append(mul4(s, G[0])) |
T2.append(mul4(s, G[1])) |
T3.append(mul4(s, G[2])) |
T4.append(mul4(s, G[3])) |
s = Si[t] |
T5.append(mul4(s, iG[0])) |
T6.append(mul4(s, iG[1])) |
T7.append(mul4(s, iG[2])) |
T8.append(mul4(s, iG[3])) |
U1.append(mul4(t, iG[0])) |
U2.append(mul4(t, iG[1])) |
U3.append(mul4(t, iG[2])) |
U4.append(mul4(t, iG[3])) |
# round constants |
rcon = [1] |
r = 1 |
for t in xrange(1, 30): |
r = mul(2, r) |
rcon.append(r) |
del A |
del AA |
del pivot |
del B |
del G |
del box |
del log |
del alog |
del i |
del j |
del r |
del s |
del t |
del mul |
del mul4 |
del cox |
del iG |
class rijndael: |
def __init__(self, key, block_size = 16): |
if block_size != 16 and block_size != 24 and block_size != 32: |
raise ValueError('Invalid block size: ' + str(block_size)) |
if len(key) != 16 and len(key) != 24 and len(key) != 32: |
raise ValueError('Invalid key size: ' + str(len(key))) |
self.block_size = block_size |
ROUNDS = num_rounds[len(key)][block_size] |
BC = block_size / 4 |
# encryption round keys |
Ke = [[0] * BC for i in xrange(ROUNDS + 1)] |
# decryption round keys |
Kd = [[0] * BC for i in xrange(ROUNDS + 1)] |
ROUND_KEY_COUNT = (ROUNDS + 1) * BC |
KC = len(key) / 4 |
# copy user material bytes into temporary ints |
tk = [] |
for i in xrange(0, KC): |
tk.append((ord(key[i * 4]) << 24) | (ord(key[i * 4 + 1]) << 16) | |
(ord(key[i * 4 + 2]) << 8) | ord(key[i * 4 + 3])) |
# copy values into round key arrays |
t = 0 |
j = 0 |
while j < KC and t < ROUND_KEY_COUNT: |
Ke[t / BC][t % BC] = tk[j] |
Kd[ROUNDS - (t / BC)][t % BC] = tk[j] |
j += 1 |
t += 1 |
tt = 0 |
rconpointer = 0 |
while t < ROUND_KEY_COUNT: |
# extrapolate using phi (the round key evolution function) |
tt = tk[KC - 1] |
tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \ |
(S[(tt >> 8) & 0xFF] & 0xFF) << 16 ^ \ |
(S[ tt & 0xFF] & 0xFF) << 8 ^ \ |
(S[(tt >> 24) & 0xFF] & 0xFF) ^ \ |
(rcon[rconpointer] & 0xFF) << 24 |
rconpointer += 1 |
if KC != 8: |
for i in xrange(1, KC): |
tk[i] ^= tk[i-1] |
else: |
for i in xrange(1, KC / 2): |
tk[i] ^= tk[i-1] |
tt = tk[KC / 2 - 1] |
tk[KC / 2] ^= (S[ tt & 0xFF] & 0xFF) ^ \ |
(S[(tt >> 8) & 0xFF] & 0xFF) << 8 ^ \ |
(S[(tt >> 16) & 0xFF] & 0xFF) << 16 ^ \ |
(S[(tt >> 24) & 0xFF] & 0xFF) << 24 |
for i in xrange(KC / 2 + 1, KC): |
tk[i] ^= tk[i-1] |
# copy values into round key arrays |
j = 0 |
while j < KC and t < ROUND_KEY_COUNT: |
Ke[t / BC][t % BC] = tk[j] |
Kd[ROUNDS - (t / BC)][t % BC] = tk[j] |
j += 1 |
t += 1 |
# inverse MixColumn where needed |
for r in xrange(1, ROUNDS): |
for j in xrange(BC): |
tt = Kd[r][j] |
Kd[r][j] = U1[(tt >> 24) & 0xFF] ^ \ |
U2[(tt >> 16) & 0xFF] ^ \ |
U3[(tt >> 8) & 0xFF] ^ \ |
U4[ tt & 0xFF] |
self.Ke = Ke |
self.Kd = Kd |
def encrypt(self, plaintext): |
if len(plaintext) != self.block_size: |
raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(plaintext))) |
Ke = self.Ke |
BC = self.block_size / 4 |
ROUNDS = len(Ke) - 1 |
if BC == 4: |
SC = 0 |
elif BC == 6: |
SC = 1 |
else: |
SC = 2 |
s1 = shifts[SC][1][0] |
s2 = shifts[SC][2][0] |
s3 = shifts[SC][3][0] |
a = [0] * BC |
# temporary work array |
t = [] |
# plaintext to ints + key |
for i in xrange(BC): |
t.append((ord(plaintext[i * 4 ]) << 24 | |
ord(plaintext[i * 4 + 1]) << 16 | |
ord(plaintext[i * 4 + 2]) << 8 | |
ord(plaintext[i * 4 + 3]) ) ^ Ke[0][i]) |
# apply round transforms |
for r in xrange(1, ROUNDS): |
for i in xrange(BC): |
a[i] = (T1[(t[ i ] >> 24) & 0xFF] ^ |
T2[(t[(i + s1) % BC] >> 16) & 0xFF] ^ |
T3[(t[(i + s2) % BC] >> 8) & 0xFF] ^ |
T4[ t[(i + s3) % BC] & 0xFF] ) ^ Ke[r][i] |
t = copy.copy(a) |
# last round is special |
result = [] |
for i in xrange(BC): |
tt = Ke[ROUNDS][i] |
result.append((S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) |
result.append((S[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) |
result.append((S[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) |
result.append((S[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF) |
return string.join(map(chr, result), '') |
def decrypt(self, ciphertext): |
if len(ciphertext) != self.block_size: |
raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(plaintext))) |
Kd = self.Kd |
BC = self.block_size / 4 |
ROUNDS = len(Kd) - 1 |
if BC == 4: |
SC = 0 |
elif BC == 6: |
SC = 1 |
else: |
SC = 2 |
s1 = shifts[SC][1][1] |
s2 = shifts[SC][2][1] |
s3 = shifts[SC][3][1] |
a = [0] * BC |
# temporary work array |
t = [0] * BC |
# ciphertext to ints + key |
for i in xrange(BC): |
t[i] = (ord(ciphertext[i * 4 ]) << 24 | |
ord(ciphertext[i * 4 + 1]) << 16 | |
ord(ciphertext[i * 4 + 2]) << 8 | |
ord(ciphertext[i * 4 + 3]) ) ^ Kd[0][i] |
# apply round transforms |
for r in xrange(1, ROUNDS): |
for i in xrange(BC): |
a[i] = (T5[(t[ i ] >> 24) & 0xFF] ^ |
T6[(t[(i + s1) % BC] >> 16) & 0xFF] ^ |
T7[(t[(i + s2) % BC] >> 8) & 0xFF] ^ |
T8[ t[(i + s3) % BC] & 0xFF] ) ^ Kd[r][i] |
t = copy.copy(a) |
# last round is special |
result = [] |
for i in xrange(BC): |
tt = Kd[ROUNDS][i] |
result.append((Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) |
result.append((Si[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) |
result.append((Si[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) |
result.append((Si[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF) |
return string.join(map(chr, result), '') |
def encrypt(key, block): |
return rijndael(key, len(block)).encrypt(block) |
def decrypt(key, block): |
return rijndael(key, len(block)).decrypt(block) |
def test(): |
def t(kl, bl): |
b = 'b' * bl |
r = rijndael('a' * kl, bl) |
assert r.decrypt(r.encrypt(b)) == b |
t(16, 16) |
t(16, 24) |
t(16, 32) |
t(24, 16) |
t(24, 24) |
t(24, 32) |
t(32, 16) |
t(32, 24) |
t(32, 32) |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/python_Rijndael.py |
---|
0,0 → 1,107 |
from blockcipher import * |
from rijndael import rijndael |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,blocksize=None): |
"""Create a new cipher object |
Wrapper for pure python implementation rijndael.py |
key = raw string containing the key |
-> supported key size are 16, 24 and 32 bytes |
mode = python_Rijndael.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB |
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption |
IV = IV as a raw string, default is "all zero" IV |
-> needed for CBC, CFB and OFB mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy |
see CTR example further on in the docstring |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
blocksize = blocksize in bytes |
-> supported blocksizes are 16, 24 and 32 bytes, must be 16 if XTS mode. |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import python_Rijndael |
EXAMPLE: |
-------- |
24 byte block, 32 byte key (http://fp.gladman.plus.com/cryptography_technology/rijndael/) |
>>> key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe'.decode('hex') |
>>> plaintext ='3243f6a8885a308d313198a2e03707344a4093822299f31d'.decode('hex') |
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_ECB,blocksize=24) |
>>> cipher.encrypt(plaintext).encode('hex') |
'0ebacf199e3315c2e34b24fcc7c46ef4388aa475d66c194c' |
CBC EXAMPLE (plaintext = 3 blocksizes) (AES): |
----------------------------------------- |
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex') |
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex') |
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex') |
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex') |
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex') |
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_CBC,IV,blocksize=16) |
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3) |
>>> (ciphertext).encode('hex') |
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516' |
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_CBC,IV,blocksize=16) |
>>> plaintext = decipher.decrypt(ciphertext) |
>>> (plaintext).encode('hex') |
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef' |
XTS EXAMPLE: |
------------ |
(Examples for XTS-AES) |
XTS-AES-128 applied for a data unit of 512 bytes |
testvector: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf |
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex')) |
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex') |
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16) |
>>> ciphertext = cipher.encrypt(plaintext) |
>>> ciphertext.encode('hex') |
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568' |
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16) |
>>> decipher.decrypt(ciphertext).encode('hex') |
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff' |
using data sequence number n |
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'22222222222222222222222222222222'.decode('hex')) |
>>> plain ='4444444444444444444444444444444444444444444444444444444444444444'.decode('hex') |
>>> n = '3333333333'.decode('hex') |
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16) |
>>> ciphertext = cipher.encrypt(plain,n) |
>>> ciphertext.encode('hex') |
'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89' |
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16) |
>>> decipher.decrypt(ciphertext,n).encode('hex') |
'4444444444444444444444444444444444444444444444444444444444444444' |
""" |
return python_Rijndael(key,mode,IV,counter,blocksize,segment_size) |
class python_Rijndael(BlockCipher): |
key_error_message = ("Key should be 128, 192 or 256 bits") |
def __init__(self,key,mode,IV,counter,blocksize,segment_size): |
if blocksize not in (16,24,32): |
raise ValueError("Blocksize should be 16, 24 or 32") |
cipher_module = rijndael |
args = {'block_size':blocksize} |
self.blocksize = blocksize |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args) |
def keylen_valid(self,key): |
return len(key) in (16,24,32) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/RC5.py |
---|
0,0 → 1,58 |
from blockcipher import * |
try: |
import Crypto.Cipher.RC5 |
except ImportError: |
print "Crypto.Cipher.RC5 isn't available. You're probably using the Debian pycrypto version. Install the original pycrypto for RC5." |
raise |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,rounds=12,word_size=32): |
"""Create a new cipher object |
RC5 using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the keys |
multiple of 8 bits between 0 <-> 2040 bits |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
rounds = amount of rounds, default = 12 |
minimum 12 and multiple of 2 |
word_size = RC5 word size (bits), supported = 16 and 32, default = 32 |
RC5 encrypts blocks of size 2*word_size |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import RC5 |
https://www.cosic.esat.kuleuven.be/nessie/testvectors/ |
----------------------------------------- |
>>> key = "00000000000000000000000000000000".decode('hex') |
>>> plaintext = "0000000000000000".decode('hex') |
>>> rounds = 12 |
>>> cipher = RC5.new(key,RC5.MODE_ECB,rounds=rounds) |
>>> cipher.encrypt(plaintext).encode('hex') |
'21a5dbee154b8f6d' |
""" |
return RC5(key,mode,IV,counter,rounds,word_size,segment_size) |
class RC5(BlockCipher): |
def __init__(self,key,mode,IV,counter,rounds,word_size,segment_size): |
cipher_module = Crypto.Cipher.RC5.new |
args = {'rounds':rounds,'word_size':word_size} |
self.blocksize = (2*word_size)/8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/pypresent.py |
---|
0,0 → 1,229 |
# Python PRESENT implementation |
# Version: 1.0 |
# Date: 13/10/2008 |
# |
# ============================================================================= |
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com> |
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> ) |
# |
# Permission is hereby granted, free of charge, to any person obtaining a copy |
# of this software and associated documentation files (the "Software"), to deal |
# in the Software without restriction, including without limitation the rights |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
# copies of the Software, and to permit persons to whom the Software is |
# furnished to do so, subject to the following conditions: |
# |
# The above copyright notice and this permission notice shall be included in |
# all copies or substantial portions of the Software. |
# |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
# THE SOFTWARE. |
# ============================================================================= |
""" PRESENT block cipher implementation |
USAGE EXAMPLE: |
--------------- |
Importing: |
----------- |
>>> from pypresent import Present |
Encrypting with a 80-bit key: |
------------------------------ |
>>> key = "00000000000000000000".decode('hex') |
>>> plain = "0000000000000000".decode('hex') |
>>> cipher = Present(key) |
>>> encrypted = cipher.encrypt(plain) |
>>> encrypted.encode('hex') |
'5579c1387b228445' |
>>> decrypted = cipher.decrypt(encrypted) |
>>> decrypted.encode('hex') |
'0000000000000000' |
Encrypting with a 128-bit key: |
------------------------------- |
>>> key = "0123456789abcdef0123456789abcdef".decode('hex') |
>>> plain = "0123456789abcdef".decode('hex') |
>>> cipher = Present(key) |
>>> encrypted = cipher.encrypt(plain) |
>>> encrypted.encode('hex') |
'0e9d28685e671dd6' |
>>> decrypted = cipher.decrypt(encrypted) |
>>> decrypted.encode('hex') |
'0123456789abcdef' |
fully based on standard specifications: http://www.crypto.ruhr-uni-bochum.de/imperia/md/content/texte/publications/conferences/present_ches2007.pdf |
test vectors: http://www.crypto.ruhr-uni-bochum.de/imperia/md/content/texte/publications/conferences/slides/present_testvectors.zip |
""" |
class Present: |
def __init__(self,key,rounds=32): |
"""Create a PRESENT cipher object |
key: the key as a 128-bit or 80-bit rawstring |
rounds: the number of rounds as an integer, 32 by default |
""" |
self.rounds = rounds |
if len(key) * 8 == 80: |
self.roundkeys = generateRoundkeys80(string2number(key),self.rounds) |
elif len(key) * 8 == 128: |
self.roundkeys = generateRoundkeys128(string2number(key),self.rounds) |
else: |
raise ValueError, "Key must be a 128-bit or 80-bit rawstring" |
def encrypt(self,block): |
"""Encrypt 1 block (8 bytes) |
Input: plaintext block as raw string |
Output: ciphertext block as raw string |
""" |
state = string2number(block) |
for i in xrange (self.rounds-1): |
state = addRoundKey(state,self.roundkeys[i]) |
state = sBoxLayer(state) |
state = pLayer(state) |
cipher = addRoundKey(state,self.roundkeys[-1]) |
return number2string_N(cipher,8) |
def decrypt(self,block): |
"""Decrypt 1 block (8 bytes) |
Input: ciphertext block as raw string |
Output: plaintext block as raw string |
""" |
state = string2number(block) |
for i in xrange (self.rounds-1): |
state = addRoundKey(state,self.roundkeys[-i-1]) |
state = pLayer_dec(state) |
state = sBoxLayer_dec(state) |
decipher = addRoundKey(state,self.roundkeys[0]) |
return number2string_N(decipher,8) |
def get_block_size(self): |
return 8 |
# 0 1 2 3 4 5 6 7 8 9 a b c d e f |
Sbox= [0xc,0x5,0x6,0xb,0x9,0x0,0xa,0xd,0x3,0xe,0xf,0x8,0x4,0x7,0x1,0x2] |
Sbox_inv = [Sbox.index(x) for x in xrange(16)] |
PBox = [0,16,32,48,1,17,33,49,2,18,34,50,3,19,35,51, |
4,20,36,52,5,21,37,53,6,22,38,54,7,23,39,55, |
8,24,40,56,9,25,41,57,10,26,42,58,11,27,43,59, |
12,28,44,60,13,29,45,61,14,30,46,62,15,31,47,63] |
PBox_inv = [PBox.index(x) for x in xrange(64)] |
def generateRoundkeys80(key,rounds): |
"""Generate the roundkeys for a 80-bit key |
Input: |
key: the key as a 80-bit integer |
rounds: the number of rounds as an integer |
Output: list of 64-bit roundkeys as integers""" |
roundkeys = [] |
for i in xrange(1,rounds+1): # (K1 ... K32) |
# rawkey: used in comments to show what happens at bitlevel |
# rawKey[0:64] |
roundkeys.append(key >>16) |
#1. Shift |
#rawKey[19:len(rawKey)]+rawKey[0:19] |
key = ((key & (2**19-1)) << 61) + (key >> 19) |
#2. SBox |
#rawKey[76:80] = S(rawKey[76:80]) |
key = (Sbox[key >> 76] << 76)+(key & (2**76-1)) |
#3. Salt |
#rawKey[15:20] ^ i |
key ^= i << 15 |
return roundkeys |
def generateRoundkeys128(key,rounds): |
"""Generate the roundkeys for a 128-bit key |
Input: |
key: the key as a 128-bit integer |
rounds: the number of rounds as an integer |
Output: list of 64-bit roundkeys as integers""" |
roundkeys = [] |
for i in xrange(1,rounds+1): # (K1 ... K32) |
# rawkey: used in comments to show what happens at bitlevel |
roundkeys.append(key >>64) |
#1. Shift |
key = ((key & (2**67-1)) << 61) + (key >> 67) |
#2. SBox |
key = (Sbox[key >> 124] << 124)+(Sbox[(key >> 120) & 0xF] << 120)+(key & (2**120-1)) |
#3. Salt |
#rawKey[62:67] ^ i |
key ^= i << 62 |
return roundkeys |
def addRoundKey(state,roundkey): |
return state ^ roundkey |
def sBoxLayer(state): |
"""SBox function for encryption |
Input: 64-bit integer |
Output: 64-bit integer""" |
output = 0 |
for i in xrange(16): |
output += Sbox[( state >> (i*4)) & 0xF] << (i*4) |
return output |
def sBoxLayer_dec(state): |
"""Inverse SBox function for decryption |
Input: 64-bit integer |
Output: 64-bit integer""" |
output = 0 |
for i in xrange(16): |
output += Sbox_inv[( state >> (i*4)) & 0xF] << (i*4) |
return output |
def pLayer(state): |
"""Permutation layer for encryption |
Input: 64-bit integer |
Output: 64-bit integer""" |
output = 0 |
for i in xrange(64): |
output += ((state >> i) & 0x01) << PBox[i] |
return output |
def pLayer_dec(state): |
"""Permutation layer for decryption |
Input: 64-bit integer |
Output: 64-bit integer""" |
output = 0 |
for i in xrange(64): |
output += ((state >> i) & 0x01) << PBox_inv[i] |
return output |
def string2number(i): |
""" Convert a string to a number |
Input: string (big-endian) |
Output: long or integer |
""" |
return int(i.encode('hex'),16) |
def number2string_N(i, N): |
"""Convert a number to a string of fixed size |
i: long or integer |
N: length of string |
Output: string (big-endian) |
""" |
s = '%0*x' % (N*2, i) |
return s.decode('hex') |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/pyserpent.py |
---|
0,0 → 1,1354 |
#!/usr/local/bin/python |
# $Id: serpref.py,v 1.19 1998/09/02 21:28:02 fms Exp $ |
# |
# Python reference implementation of Serpent. |
# |
# Written by Frank Stajano, |
# Olivetti Oracle Research Laboratory <http://www.orl.co.uk/~fms/> and |
# Cambridge University Computer Laboratory <http://www.cl.cam.ac.uk/~fms27/>. |
# |
# (c) 1998 Olivetti Oracle Research Laboratory (ORL) |
# |
# Original (Python) Serpent reference development started on 1998 02 12. |
# C implementation development started on 1998 03 04. |
# |
# Serpent cipher invented by Ross Anderson, Eli Biham, Lars Knudsen. |
# Serpent is a candidate for the Advanced Encryption Standard. |
# -------------------------------------------------------------- |
"""This is an illustrative reference implementation of the Serpent cipher |
invented by Eli Biham, Ross Anderson, Lars Knudsen. It is written for the |
human reader more than for the machine and, as such, it is optimised for |
clarity rather than speed. ("Premature optimisation is the root of all |
evil.") |
It can print out all the intermediate results (such as the subkeys) for a |
given input and key so that implementers debugging erroneous code can |
quickly verify which one of the building blocks is giving the wrong |
answers. |
This version implements Serpent-1, i.e. the variant defined in the final |
submission to NIST. |
""" |
# -------------------------------------------------------------- |
# My own additions |
# -------------------------------------------------------------- |
class Serpent: |
#class to |
def __init__(self,key): |
key = key.encode('hex') |
bitsInKey = keyLengthInBitsOf(key) |
rawKey = convertToBitstring(reverse(key.lower()), bitsInKey) |
self.userKey = makeLongKey(rawKey) |
def encrypt(self,block): |
plainText = convertToBitstring(reverse(block.encode("hex").lower()), 128) |
cipherText = encrypt(plainText, self.userKey) |
return reverse(bitstring2hexstring(cipherText)).decode('hex') |
def decrypt(self,block): |
cipherText = convertToBitstring(reverse(block.encode("hex").lower()), 128) |
plainText = decrypt(cipherText, self.userKey) |
return reverse(bitstring2hexstring(plainText)).decode('hex') |
def get_block_size(self): |
return 16 |
def reverse(toreverse): |
out = "" |
for i in range(len(toreverse)/2): |
out += toreverse[len(toreverse)-i*2-2:len(toreverse)-i*2] |
return out |
# -------------------------------------------------------------- |
# |
# -------------------------------------------------------------- |
# -------------------------------------------------------------- |
# Requires python 1.5, freely available from http://www.python.org/ |
# -------------------------------------------------------------- |
import string |
import sys |
import getopt |
import re |
# -------------------------------------------------------------- |
# Functions used in the formal description of the cipher |
def S(box, input): |
"""Apply S-box number 'box' to 4-bit bitstring 'input' and return a |
4-bit bitstring as the result.""" |
return SBoxBitstring[box%8][input] |
# There used to be 32 different S-boxes in serpent-0. Now there are |
# only 8, each of which is used 4 times (Sboxes 8, 16, 24 are all |
# identical to Sbox 0, etc). Hence the %8. |
def SInverse(box, output): |
"""Apply S-box number 'box' in reverse to 4-bit bitstring 'output' and |
return a 4-bit bitstring (the input) as the result.""" |
return SBoxBitstringInverse[box%8][output] |
def SHat(box, input): |
"""Apply a parallel array of 32 copies of S-box number 'box' to the |
128-bit bitstring 'input' and return a 128-bit bitstring as the |
result.""" |
result = "" |
for i in range(32): |
result = result + S(box, input[4*i:4*(i+1)]) |
return result |
def SHatInverse(box, output): |
"""Apply, in reverse, a parallel array of 32 copies of S-box number |
'box' to the 128-bit bitstring 'output' and return a 128-bit bitstring |
(the input) as the result.""" |
result = "" |
for i in range(32): |
result = result + SInverse(box, output[4*i:4*(i+1)]) |
return result |
def SBitslice(box, words): |
"""Take 'words', a list of 4 32-bit bitstrings, least significant word |
first. Return a similar list of 4 32-bit bitstrings obtained as |
follows. For each bit position from 0 to 31, apply S-box number 'box' |
to the 4 input bits coming from the current position in each of the |
items in 'words'; and put the 4 output bits in the corresponding |
positions in the output words.""" |
result = ["", "", "", ""] |
for i in range(32): # ideally in parallel |
quad = S(box, words[0][i] + words[1][i] + words[2][i] + words[3][i]) |
for j in range(4): |
result[j] = result[j] + quad[j] |
return result |
def SBitsliceInverse(box, words): |
"""Take 'words', a list of 4 32-bit bitstrings, least significant word |
first. Return a similar list of 4 32-bit bitstrings obtained as |
follows. For each bit position from 0 to 31, apply S-box number 'box' |
in reverse to the 4 output bits coming from the current position in |
each of the items in the supplied 'words'; and put the 4 input bits in |
the corresponding positions in the returned words.""" |
result = ["", "", "", ""] |
for i in range(32): # ideally in parallel |
quad = SInverse( |
box, words[0][i] + words[1][i] + words[2][i] + words[3][i]) |
for j in range(4): |
result[j] = result[j] + quad[j] |
return result |
def LT(input): |
"""Apply the table-based version of the linear transformation to the |
128-bit string 'input' and return a 128-bit string as the result.""" |
if len(input) != 128: |
raise ValueError, "input to LT is not 128 bit long" |
result = "" |
for i in range(len(LTTable)): |
outputBit = "0" |
for j in LTTable[i]: |
outputBit = xor(outputBit, input[j]) |
result = result + outputBit |
return result |
def LTInverse(output): |
"""Apply the table-based version of the inverse of the linear |
transformation to the 128-bit string 'output' and return a 128-bit |
string (the input) as the result.""" |
if len(output) != 128: |
raise ValueError, "input to inverse LT is not 128 bit long" |
result = "" |
for i in range(len(LTTableInverse)): |
inputBit = "0" |
for j in LTTableInverse[i]: |
inputBit = xor(inputBit, output[j]) |
result = result + inputBit |
return result |
def LTBitslice(X): |
"""Apply the equations-based version of the linear transformation to |
'X', a list of 4 32-bit bitstrings, least significant bitstring first, |
and return another list of 4 32-bit bitstrings as the result.""" |
X[0] = rotateLeft(X[0], 13) |
X[2] = rotateLeft(X[2], 3) |
X[1] = xor(X[1], X[0], X[2]) |
X[3] = xor(X[3], X[2], shiftLeft(X[0], 3)) |
X[1] = rotateLeft(X[1], 1) |
X[3] = rotateLeft(X[3], 7) |
X[0] = xor(X[0], X[1], X[3]) |
X[2] = xor(X[2], X[3], shiftLeft(X[1], 7)) |
X[0] = rotateLeft(X[0], 5) |
X[2] = rotateLeft(X[2], 22) |
return X |
def LTBitsliceInverse(X): |
"""Apply, in reverse, the equations-based version of the linear |
transformation to 'X', a list of 4 32-bit bitstrings, least significant |
bitstring first, and return another list of 4 32-bit bitstrings as the |
result.""" |
X[2] = rotateRight(X[2], 22) |
X[0] = rotateRight(X[0], 5) |
X[2] = xor(X[2], X[3], shiftLeft(X[1], 7)) |
X[0] = xor(X[0], X[1], X[3]) |
X[3] = rotateRight(X[3], 7) |
X[1] = rotateRight(X[1], 1) |
X[3] = xor(X[3], X[2], shiftLeft(X[0], 3)) |
X[1] = xor(X[1], X[0], X[2]) |
X[2] = rotateRight(X[2], 3) |
X[0] = rotateRight(X[0], 13) |
return X |
def IP(input): |
"""Apply the Initial Permutation to the 128-bit bitstring 'input' |
and return a 128-bit bitstring as the result.""" |
return applyPermutation(IPTable, input) |
def FP(input): |
"""Apply the Final Permutation to the 128-bit bitstring 'input' |
and return a 128-bit bitstring as the result.""" |
return applyPermutation(FPTable, input) |
def IPInverse(output): |
"""Apply the Initial Permutation in reverse.""" |
return FP(output) |
def FPInverse(output): |
"""Apply the Final Permutation in reverse.""" |
return IP(output) |
def applyPermutation(permutationTable, input): |
"""Apply the permutation specified by the 128-element list |
'permutationTable' to the 128-bit bitstring 'input' and return a |
128-bit bitstring as the result.""" |
if len(input) != len(permutationTable): |
raise ValueError, "input size (%d) doesn't match perm table size (%d)"\ |
% (len(input), len(permutationTable)) |
result = "" |
for i in range(len(permutationTable)): |
result = result + input[permutationTable[i]] |
return result |
def R(i, BHati, KHat): |
"""Apply round 'i' to the 128-bit bitstring 'BHati', returning another |
128-bit bitstring (conceptually BHatiPlus1). Do this using the |
appropriately numbered subkey(s) from the 'KHat' list of 33 128-bit |
bitstrings.""" |
#O.show("BHati", BHati, "(i=%2d) BHati" % i) |
xored = xor(BHati, KHat[i]) |
#O.show("xored", xored, "(i=%2d) xored" % i) |
SHati = SHat(i, xored) |
#O.show("SHati", SHati, "(i=%2d) SHati" % i) |
if 0 <= i <= r-2: |
BHatiPlus1 = LT(SHati) |
elif i == r-1: |
BHatiPlus1 = xor(SHati, KHat[r]) |
else: |
raise ValueError, "round %d is out of 0..%d range" % (i, r-1) |
#O.show("BHatiPlus1", BHatiPlus1, "(i=%2d) BHatiPlus1" % i) |
return BHatiPlus1 |
def RInverse(i, BHatiPlus1, KHat): |
"""Apply round 'i' in reverse to the 128-bit bitstring 'BHatiPlus1', |
returning another 128-bit bitstring (conceptually BHati). Do this using |
the appropriately numbered subkey(s) from the 'KHat' list of 33 128-bit |
bitstrings.""" |
#O.show("BHatiPlus1", BHatiPlus1, "(i=%2d) BHatiPlus1" % i) |
if 0 <= i <= r-2: |
SHati = LTInverse(BHatiPlus1) |
elif i == r-1: |
SHati = xor(BHatiPlus1, KHat[r]) |
else: |
raise ValueError, "round %d is out of 0..%d range" % (i, r-1) |
#O.show("SHati", SHati, "(i=%2d) SHati" % i) |
xored = SHatInverse(i, SHati) |
#O.show("xored", xored, "(i=%2d) xored" % i) |
BHati = xor(xored, KHat[i]) |
#O.show("BHati", BHati, "(i=%2d) BHati" % i) |
return BHati |
def RBitslice(i, Bi, K): |
"""Apply round 'i' (bitslice version) to the 128-bit bitstring 'Bi' and |
return another 128-bit bitstring (conceptually B i+1). Use the |
appropriately numbered subkey(s) from the 'K' list of 33 128-bit |
bitstrings.""" |
#O.show("Bi", Bi, "(i=%2d) Bi" % i) |
# 1. Key mixing |
xored = xor (Bi, K[i]) |
#O.show("xored", xored, "(i=%2d) xored" % i) |
# 2. S Boxes |
Si = SBitslice(i, quadSplit(xored)) |
# Input and output to SBitslice are both lists of 4 32-bit bitstrings |
#O.show("Si", Si, "(i=%2d) Si" % i, "tlb") |
# 3. Linear Transformation |
if i == r-1: |
# In the last round, replaced by an additional key mixing |
BiPlus1 = xor(quadJoin(Si), K[r]) |
else: |
BiPlus1 = quadJoin(LTBitslice(Si)) |
# BIPlus1 is a 128-bit bitstring |
#O.show("BiPlus1", BiPlus1, "(i=%2d) BiPlus1" % i) |
return BiPlus1 |
def RBitsliceInverse(i, BiPlus1, K): |
"""Apply the inverse of round 'i' (bitslice version) to the 128-bit |
bitstring 'BiPlus1' and return another 128-bit bitstring (conceptually |
B i). Use the appropriately numbered subkey(s) from the 'K' list of 33 |
128-bit bitstrings.""" |
#O.show("BiPlus1", BiPlus1, "(i=%2d) BiPlus1" % i) |
# 3. Linear Transformation |
if i == r-1: |
# In the last round, replaced by an additional key mixing |
Si = quadSplit(xor(BiPlus1, K[r])) |
else: |
Si = LTBitsliceInverse(quadSplit(BiPlus1)) |
# SOutput (same as LTInput) is a list of 4 32-bit bitstrings |
#O.show("Si", Si, "(i=%2d) Si" % i, "tlb") |
# 2. S Boxes |
xored = SBitsliceInverse(i, Si) |
# SInput and SOutput are both lists of 4 32-bit bitstrings |
#O.show("xored", xored, "(i=%2d) xored" % i) |
# 1. Key mixing |
Bi = xor (quadJoin(xored), K[i]) |
#O.show("Bi", Bi, "(i=%2d) Bi" % i) |
return Bi |
def encrypt(plainText, userKey): |
"""Encrypt the 128-bit bitstring 'plainText' with the 256-bit bitstring |
'userKey', using the normal algorithm, and return a 128-bit ciphertext |
bitstring.""" |
#O.show("fnTitle", "encrypt", None, "tu") |
#O.show("plainText", plainText, "plainText") |
#O.show("userKey", userKey, "userKey") |
K, KHat = makeSubkeys(userKey) |
BHat = IP(plainText) # BHat_0 at this stage |
for i in range(r): |
BHat = R(i, BHat, KHat) # Produce BHat_i+1 from BHat_i |
# BHat is now _32 i.e. _r |
C = FP(BHat) |
#O.show("cipherText", C, "cipherText") |
return C |
def encryptBitslice(plainText, userKey): |
"""Encrypt the 128-bit bitstring 'plainText' with the 256-bit bitstring |
'userKey', using the bitslice algorithm, and return a 128-bit ciphertext |
bitstring.""" |
#O.show("fnTitle", "encryptBitslice", None, "tu") |
#O.show("plainText", plainText, "plainText") |
#O.show("userKey", userKey, "userKey") |
K, KHat = makeSubkeys(userKey) |
B = plainText # B_0 at this stage |
for i in range(r): |
B = RBitslice(i, B, K) # Produce B_i+1 from B_i |
# B is now _r |
#O.show("cipherText", B, "cipherText") |
return B |
def decrypt(cipherText, userKey): |
"""Decrypt the 128-bit bitstring 'cipherText' with the 256-bit |
bitstring 'userKey', using the normal algorithm, and return a 128-bit |
plaintext bitstring.""" |
#O.show("fnTitle", "decrypt", None, "tu") |
#O.show("cipherText", cipherText, "cipherText") |
#O.show("userKey", userKey, "userKey") |
K, KHat = makeSubkeys(userKey) |
BHat = FPInverse(cipherText) # BHat_r at this stage |
for i in range(r-1, -1, -1): # from r-1 down to 0 included |
BHat = RInverse(i, BHat, KHat) # Produce BHat_i from BHat_i+1 |
# BHat is now _0 |
plainText = IPInverse(BHat) |
#O.show("plainText", plainText, "plainText") |
return plainText |
def decryptBitslice(cipherText, userKey): |
"""Decrypt the 128-bit bitstring 'cipherText' with the 256-bit |
bitstring 'userKey', using the bitslice algorithm, and return a 128-bit |
plaintext bitstring.""" |
#O.show("fnTitle", "decryptBitslice", None, "tu") |
#O.show("cipherText", cipherText, "cipherText") |
#O.show("userKey", userKey, "userKey") |
K, KHat = makeSubkeys(userKey) |
B = cipherText # B_r at this stage |
for i in range(r-1, -1, -1): # from r-1 down to 0 included |
B = RBitsliceInverse(i, B, K) # Produce B_i from B_i+1 |
# B is now _0 |
#O.show("plainText", B, "plainText") |
return B |
def makeSubkeys(userKey): |
"""Given the 256-bit bitstring 'userKey' (shown as K in the paper, but |
we can't use that name because of a collision with K[i] used later for |
something else), return two lists (conceptually K and KHat) of 33 |
128-bit bitstrings each.""" |
# Because in Python I can't index a list from anything other than 0, |
# I use a dictionary instead to legibly represent the w_i that are |
# indexed from -8. |
# We write the key as 8 32-bit words w-8 ... w-1 |
# ENOTE: w-8 is the least significant word |
w = {} |
for i in range(-8, 0): |
w[i] = userKey[(i+8)*32:(i+9)*32] |
#O.show("wi", w[i], "(i=%2d) wi" % i) |
# We expand these to a prekey w0 ... w131 with the affine recurrence |
for i in range(132): |
w[i] = rotateLeft( |
xor(w[i-8], w[i-5], w[i-3], w[i-1], |
bitstring(phi, 32), bitstring(i,32)), |
11) |
#O.show("wi", w[i], "(i=%2d) wi" % i) |
# The round keys are now calculated from the prekeys using the S-boxes |
# in bitslice mode. Each k[i] is a 32-bit bitstring. |
k = {} |
for i in range(r+1): |
whichS = (r + 3 - i) % r |
k[0+4*i] = "" |
k[1+4*i] = "" |
k[2+4*i] = "" |
k[3+4*i] = "" |
for j in range(32): # for every bit in the k and w words |
# ENOTE: w0 and k0 are the least significant words, w99 and k99 |
# the most. |
input = w[0+4*i][j] + w[1+4*i][j] + w[2+4*i][j] + w[3+4*i][j] |
output = S(whichS, input) |
for l in range(4): |
k[l+4*i] = k[l+4*i] + output[l] |
# We then renumber the 32 bit values k_j as 128 bit subkeys K_i. |
K = [] |
for i in range(33): |
# ENOTE: k4i is the least significant word, k4i+3 the most. |
K.append(k[4*i] + k[4*i+1] + k[4*i+2] + k[4*i+3]) |
# We now apply IP to the round key in order to place the key bits in |
# the correct column |
KHat = [] |
for i in range(33): |
KHat.append(IP(K[i])) |
#O.show("Ki", K[i], "(i=%2d) Ki" % i) |
#O.show("KHati", KHat[i], "(i=%2d) KHati" % i) |
return K, KHat |
def makeLongKey(k): |
"""Take a key k in bitstring format. Return the long version of that |
key.""" |
l = len(k) |
if l % 32 != 0 or l < 64 or l > 256: |
raise ValueError, "Invalid key length (%d bits)" % l |
if l == 256: |
return k |
else: |
return k + "1" + "0"*(256 -l -1) |
# -------------------------------------------------------------- |
# Generic bit-level primitives |
# Internally, we represent the numbers manipulated by the cipher in a |
# format that we call 'bitstring'. This is a string of "0" and "1" |
# characters containing the binary representation of the number in |
# little-endian format (so that subscripting with an index of i gives bit |
# number i, corresponding to a weight of 2^i). This representation is only |
# defined for nonnegative numbers (you can see why: think of the great |
# unnecessary mess that would result from sign extension, two's complement |
# and so on). Example: 10 decimal is "0101" in bitstring format. |
def bitstring(n, minlen=1): |
"""Translate n from integer to bitstring, padding it with 0s as |
necessary to reach the minimum length 'minlen'. 'n' must be >= 0 since |
the bitstring format is undefined for negative integers. Note that, |
while the bitstring format can represent arbitrarily large numbers, |
this is not so for Python's normal integer type: on a 32-bit machine, |
values of n >= 2^31 need to be expressed as python long integers or |
they will "look" negative and won't work. E.g. 0x80000000 needs to be |
passed in as 0x80000000L, or it will be taken as -2147483648 instead of |
+2147483648L. |
EXAMPLE: bitstring(10, 8) -> "01010000" |
""" |
if minlen < 1: |
raise ValueError, "a bitstring must have at least 1 char" |
if n < 0: |
raise ValueError, "bitstring representation undefined for neg numbers" |
result = "" |
while n > 0: |
if n & 1: |
result = result + "1" |
else: |
result = result + "0" |
n = n >> 1 |
if len(result) < minlen: |
result = result + "0" * (minlen - len(result)) |
return result |
def binaryXor(n1, n2): |
"""Return the xor of two bitstrings of equal length as another |
bitstring of the same length. |
EXAMPLE: binaryXor("10010", "00011") -> "10001" |
""" |
if len(n1) != len(n2): |
raise ValueError, "can't xor bitstrings of different " + \ |
"lengths (%d and %d)" % (len(n1), len(n2)) |
# We assume that they are genuine bitstrings instead of just random |
# character strings. |
result = "" |
for i in range(len(n1)): |
if n1[i] == n2[i]: |
result = result + "0" |
else: |
result = result + "1" |
return result |
def xor(*args): |
"""Return the xor of an arbitrary number of bitstrings of the same |
length as another bitstring of the same length. |
EXAMPLE: xor("01", "11", "10") -> "00" |
""" |
if args == []: |
raise ValueError, "at least one argument needed" |
result = args[0] |
for arg in args[1:]: |
result = binaryXor(result, arg) |
return result |
def rotateLeft(input, places): |
"""Take a bitstring 'input' of arbitrary length. Rotate it left by |
'places' places. Left means that the 'places' most significant bits are |
taken out and reinserted as the least significant bits. Note that, |
because the bitstring representation is little-endian, the visual |
effect is actually that of rotating the string to the right. |
EXAMPLE: rotateLeft("000111", 2) -> "110001" |
""" |
p = places % len(input) |
return input[-p:] + input[:-p] |
def rotateRight(input, places): |
return rotateLeft(input, -places) |
def shiftLeft(input, p): |
"""Take a bitstring 'input' of arbitrary length. Shift it left by 'p' |
places. Left means that the 'p' most significant bits are shifted out |
and dropped, while 'p' 0s are inserted in the the least significant |
bits. Note that, because the bitstring representation is little-endian, |
the visual effect is actually that of shifting the string to the |
right. Negative values for 'p' are allowed, with the effect of shifting |
right instead (i.e. the 0s are inserted in the most significant bits). |
EXAMPLE: shiftLeft("000111", 2) -> "000001" |
shiftLeft("000111", -2) -> "011100" |
""" |
if abs(p) >= len(input): |
# Everything gets shifted out anyway |
return "0" * len(input) |
if p < 0: |
# Shift right instead |
return input[-p:] + "0" * len(input[:-p]) |
elif p == 0: |
return input |
else: # p > 0, normal case |
return "0" * len(input[-p:]) + input[:-p] |
def shiftRight(input, p): |
"""Take a bitstring 'input' and shift it right by 'p' places. See the |
doc for shiftLeft for more details.""" |
return shiftLeft(input, -p) |
def keyLengthInBitsOf(k): |
"""Take a string k in I/O format and return the number of bits in it.""" |
return len(k) * 4 |
# -------------------------------------------------------------- |
# Hex conversion functions |
# For I/O we use BIG-ENDIAN hexstrings. Do not get confused: internal stuff |
# is LITTLE-ENDIAN bitstrings (so that digit i has weight 2^i) while |
# external stuff is in BIG-ENDIAN hexstrings (so that it's shorter and it |
# looks like the numbers you normally write down). The external (I/O) |
# representation is the same as used by the C reference implementation. |
bin2hex = { |
# Given a 4-char bitstring, return the corresponding 1-char hexstring |
"0000": "0", "1000": "1", "0100": "2", "1100": "3", |
"0010": "4", "1010": "5", "0110": "6", "1110": "7", |
"0001": "8", "1001": "9", "0101": "a", "1101": "b", |
"0011": "c", "1011": "d", "0111": "e", "1111": "f", |
} |
# Make the reverse lookup table too |
hex2bin = {} |
for (bin, hex) in bin2hex.items(): |
hex2bin[hex] = bin |
def bitstring2hexstring(b): |
"""Take bitstring 'b' and return the corresponding hexstring.""" |
result = "" |
l = len(b) |
if l % 4: |
b = b + "0" * (4-(l%4)) |
for i in range(0, len(b), 4): |
result = result+bin2hex[b[i:i+4]] |
return reverseString(result) |
def hexstring2bitstring(h): |
"""Take hexstring 'h' and return the corresponding bitstring.""" |
result = "" |
for c in reverseString(h): |
result = result + hex2bin[c] |
return result |
def reverseString(s): |
l = list(s) |
l.reverse() |
return string.join(l, "") |
# -------------------------------------------------------------- |
# Format conversions |
def quadSplit(b128): |
"""Take a 128-bit bitstring and return it as a list of 4 32-bit |
bitstrings, least significant bitstring first.""" |
if len(b128) != 128: |
raise ValueError, "must be 128 bits long, not " + len(b128) |
result = [] |
for i in range(4): |
result.append(b128[(i*32):(i+1)*32]) |
return result |
def quadJoin(l4x32): |
"""Take a list of 4 32-bit bitstrings and return it as a single 128-bit |
bitstring obtained by concatenating the internal ones.""" |
if len(l4x32) != 4: |
raise ValueError, "need a list of 4 bitstrings, not " + len(l4x32) |
return l4x32[0] + l4x32[1] + l4x32[2] + l4x32[3] |
# -------------------------------------------------- |
# Seeing what happens inside |
class Observer: |
"""An object of this class can selectively display the values of the |
variables you want to observe while the program is running. There are |
tags that you can switch on or off. You sprinkle show() statements |
throughout the program to show the value of a variable at a particular |
point: show() will display the relevant variable only if the |
corresponding tag is currently on. The special tag "ALL" forces all |
show() statements to display their variable.""" |
typesOfVariable = { |
"tu": "unknown", "tb": "bitstring", "tlb": "list of bitstrings",} |
def __init__(self, tags=[]): |
self.tags = {} |
for tag in tags: |
self.tags[tag] = 1 |
def addTag(self, *tags): |
"""Add the supplied tag(s) to those that are currently active, |
i.e. those that, if a corresponding "show()" is executed, will |
print something.""" |
for t in tags: |
self.tags[t] = 1 |
def removeTag(self, *tags): |
"""Remove the supplied tag(s) from those currently active.""" |
for t in tags: |
if t in self.tags.keys(): |
del self.tags[t] |
def show(self, tag, variable, label=None, type="tb"): |
"""Conditionally print a message with the current value of |
'variable'. The message will only be printed if the supplied 'tag' |
is among the active ones (or if the 'ALL' tag is active). The |
'label', if not null, is printed before the value of the |
'variable'; if it is null, it is substituted with the 'tag'. The |
'type' of the 'variable' (giving us a clue on how to print it) must |
be one of Observer.typesOfVariable.""" |
if label == None: |
label = tag |
if "ALL" in self.tags.keys() or tag in self.tags.keys(): |
if type == "tu": |
output = `variable` |
elif type == "tb": |
output = bitstring2hexstring(variable) |
elif type == "tlb": |
output = "" |
for item in variable: |
output = output + " %s" % bitstring2hexstring(item) |
output = "[" + output[1:] + "]" |
else: |
raise ValueError, "unknown type: %s. Valid ones are %s" % ( |
type, self.typesOfVariable.keys()) |
print label, |
if output: |
print "=", output |
else: |
# We make one global observer object that is always available |
O = Observer(["plainText", "userKey", "cipherText"]) |
# -------------------------------------------------------------- |
# Constants |
phi = 0x9e3779b9L |
r = 32 |
# -------------------------------------------------------------- |
# Data tables |
# Each element of this list corresponds to one S-box. Each S-box in turn is |
# a list of 16 integers in the range 0..15, without repetitions. Having the |
# value v (say, 14) in position p (say, 0) means that if the input to that |
# S-box is the pattern p (0, or 0x0) then the output will be the pattern v |
# (14, or 0xe). |
SBoxDecimalTable = [ |
[ 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 ], # S0 |
[15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 ], # S1 |
[ 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 ], # S2 |
[ 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 ], # S3 |
[ 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 ], # S4 |
[15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 ], # S5 |
[ 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 ], # S6 |
[ 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 ], # S7 |
] |
# NB: in serpent-0, this was a list of 32 sublists (for the 32 different |
# S-boxes derived from DES). In the final version of Serpent only 8 S-boxes |
# are used, with each one being reused 4 times. |
# Make another version of this table as a list of dictionaries: one |
# dictionary per S-box, where the value of the entry indexed by i tells you |
# the output configuration when the input is i, with both the index and the |
# value being bitstrings. Make also the inverse: another list of |
# dictionaries, one per S-box, where each dictionary gets the output of the |
# S-box as the key and gives you the input, with both values being 4-bit |
# bitstrings. |
SBoxBitstring = [] |
SBoxBitstringInverse = [] |
for line in SBoxDecimalTable: |
dict = {} |
inverseDict = {} |
for i in range(len(line)): |
index = bitstring(i, 4) |
value = bitstring(line[i], 4) |
dict[index] = value |
inverseDict[value] = index |
SBoxBitstring.append(dict) |
SBoxBitstringInverse.append(inverseDict) |
# The Initial and Final permutations are each represented by one list |
# containing the integers in 0..127 without repetitions. Having value v |
# (say, 32) at position p (say, 1) means that the output bit at position p |
# (1) comes from the input bit at position v (32). |
IPTable = [ |
0, 32, 64, 96, 1, 33, 65, 97, 2, 34, 66, 98, 3, 35, 67, 99, |
4, 36, 68, 100, 5, 37, 69, 101, 6, 38, 70, 102, 7, 39, 71, 103, |
8, 40, 72, 104, 9, 41, 73, 105, 10, 42, 74, 106, 11, 43, 75, 107, |
12, 44, 76, 108, 13, 45, 77, 109, 14, 46, 78, 110, 15, 47, 79, 111, |
16, 48, 80, 112, 17, 49, 81, 113, 18, 50, 82, 114, 19, 51, 83, 115, |
20, 52, 84, 116, 21, 53, 85, 117, 22, 54, 86, 118, 23, 55, 87, 119, |
24, 56, 88, 120, 25, 57, 89, 121, 26, 58, 90, 122, 27, 59, 91, 123, |
28, 60, 92, 124, 29, 61, 93, 125, 30, 62, 94, 126, 31, 63, 95, 127, |
] |
FPTable = [ |
0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, |
64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, |
1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, |
65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, |
2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, |
66, 70, 74, 78, 82, 86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126, |
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, |
67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127, |
] |
# The Linear Transformation is represented as a list of 128 lists, one for |
# each output bit. Each one of the 128 lists is composed of a variable |
# number of integers in 0..127 specifying the positions of the input bits |
# that must be XORed together (say, 72, 144 and 125) to yield the output |
# bit corresponding to the position of that list (say, 1). |
LTTable = [ |
[16, 52, 56, 70, 83, 94, 105], |
[72, 114, 125], |
[2, 9, 15, 30, 76, 84, 126], |
[36, 90, 103], |
[20, 56, 60, 74, 87, 98, 109], |
[1, 76, 118], |
[2, 6, 13, 19, 34, 80, 88], |
[40, 94, 107], |
[24, 60, 64, 78, 91, 102, 113], |
[5, 80, 122], |
[6, 10, 17, 23, 38, 84, 92], |
[44, 98, 111], |
[28, 64, 68, 82, 95, 106, 117], |
[9, 84, 126], |
[10, 14, 21, 27, 42, 88, 96], |
[48, 102, 115], |
[32, 68, 72, 86, 99, 110, 121], |
[2, 13, 88], |
[14, 18, 25, 31, 46, 92, 100], |
[52, 106, 119], |
[36, 72, 76, 90, 103, 114, 125], |
[6, 17, 92], |
[18, 22, 29, 35, 50, 96, 104], |
[56, 110, 123], |
[1, 40, 76, 80, 94, 107, 118], |
[10, 21, 96], |
[22, 26, 33, 39, 54, 100, 108], |
[60, 114, 127], |
[5, 44, 80, 84, 98, 111, 122], |
[14, 25, 100], |
[26, 30, 37, 43, 58, 104, 112], |
[3, 118], |
[9, 48, 84, 88, 102, 115, 126], |
[18, 29, 104], |
[30, 34, 41, 47, 62, 108, 116], |
[7, 122], |
[2, 13, 52, 88, 92, 106, 119], |
[22, 33, 108], |
[34, 38, 45, 51, 66, 112, 120], |
[11, 126], |
[6, 17, 56, 92, 96, 110, 123], |
[26, 37, 112], |
[38, 42, 49, 55, 70, 116, 124], |
[2, 15, 76], |
[10, 21, 60, 96, 100, 114, 127], |
[30, 41, 116], |
[0, 42, 46, 53, 59, 74, 120], |
[6, 19, 80], |
[3, 14, 25, 100, 104, 118], |
[34, 45, 120], |
[4, 46, 50, 57, 63, 78, 124], |
[10, 23, 84], |
[7, 18, 29, 104, 108, 122], |
[38, 49, 124], |
[0, 8, 50, 54, 61, 67, 82], |
[14, 27, 88], |
[11, 22, 33, 108, 112, 126], |
[0, 42, 53], |
[4, 12, 54, 58, 65, 71, 86], |
[18, 31, 92], |
[2, 15, 26, 37, 76, 112, 116], |
[4, 46, 57], |
[8, 16, 58, 62, 69, 75, 90], |
[22, 35, 96], |
[6, 19, 30, 41, 80, 116, 120], |
[8, 50, 61], |
[12, 20, 62, 66, 73, 79, 94], |
[26, 39, 100], |
[10, 23, 34, 45, 84, 120, 124], |
[12, 54, 65], |
[16, 24, 66, 70, 77, 83, 98], |
[30, 43, 104], |
[0, 14, 27, 38, 49, 88, 124], |
[16, 58, 69], |
[20, 28, 70, 74, 81, 87, 102], |
[34, 47, 108], |
[0, 4, 18, 31, 42, 53, 92], |
[20, 62, 73], |
[24, 32, 74, 78, 85, 91, 106], |
[38, 51, 112], |
[4, 8, 22, 35, 46, 57, 96], |
[24, 66, 77], |
[28, 36, 78, 82, 89, 95, 110], |
[42, 55, 116], |
[8, 12, 26, 39, 50, 61, 100], |
[28, 70, 81], |
[32, 40, 82, 86, 93, 99, 114], |
[46, 59, 120], |
[12, 16, 30, 43, 54, 65, 104], |
[32, 74, 85], |
[36, 90, 103, 118], |
[50, 63, 124], |
[16, 20, 34, 47, 58, 69, 108], |
[36, 78, 89], |
[40, 94, 107, 122], |
[0, 54, 67], |
[20, 24, 38, 51, 62, 73, 112], |
[40, 82, 93], |
[44, 98, 111, 126], |
[4, 58, 71], |
[24, 28, 42, 55, 66, 77, 116], |
[44, 86, 97], |
[2, 48, 102, 115], |
[8, 62, 75], |
[28, 32, 46, 59, 70, 81, 120], |
[48, 90, 101], |
[6, 52, 106, 119], |
[12, 66, 79], |
[32, 36, 50, 63, 74, 85, 124], |
[52, 94, 105], |
[10, 56, 110, 123], |
[16, 70, 83], |
[0, 36, 40, 54, 67, 78, 89], |
[56, 98, 109], |
[14, 60, 114, 127], |
[20, 74, 87], |
[4, 40, 44, 58, 71, 82, 93], |
[60, 102, 113], |
[3, 18, 72, 114, 118, 125], |
[24, 78, 91], |
[8, 44, 48, 62, 75, 86, 97], |
[64, 106, 117], |
[1, 7, 22, 76, 118, 122], |
[28, 82, 95], |
[12, 48, 52, 66, 79, 90, 101], |
[68, 110, 121], |
[5, 11, 26, 80, 122, 126], |
[32, 86, 99], |
] |
# The following table is necessary for the non-bitslice decryption. |
LTTableInverse = [ |
[53, 55, 72], |
[1, 5, 20, 90], |
[15, 102], |
[3, 31, 90], |
[57, 59, 76], |
[5, 9, 24, 94], |
[19, 106], |
[7, 35, 94], |
[61, 63, 80], |
[9, 13, 28, 98], |
[23, 110], |
[11, 39, 98], |
[65, 67, 84], |
[13, 17, 32, 102], |
[27, 114], |
[1, 3, 15, 20, 43, 102], |
[69, 71, 88], |
[17, 21, 36, 106], |
[1, 31, 118], |
[5, 7, 19, 24, 47, 106], |
[73, 75, 92], |
[21, 25, 40, 110], |
[5, 35, 122], |
[9, 11, 23, 28, 51, 110], |
[77, 79, 96], |
[25, 29, 44, 114], |
[9, 39, 126], |
[13, 15, 27, 32, 55, 114], |
[81, 83, 100], |
[1, 29, 33, 48, 118], |
[2, 13, 43], |
[1, 17, 19, 31, 36, 59, 118], |
[85, 87, 104], |
[5, 33, 37, 52, 122], |
[6, 17, 47], |
[5, 21, 23, 35, 40, 63, 122], |
[89, 91, 108], |
[9, 37, 41, 56, 126], |
[10, 21, 51], |
[9, 25, 27, 39, 44, 67, 126], |
[93, 95, 112], |
[2, 13, 41, 45, 60], |
[14, 25, 55], |
[2, 13, 29, 31, 43, 48, 71], |
[97, 99, 116], |
[6, 17, 45, 49, 64], |
[18, 29, 59], |
[6, 17, 33, 35, 47, 52, 75], |
[101, 103, 120], |
[10, 21, 49, 53, 68], |
[22, 33, 63], |
[10, 21, 37, 39, 51, 56, 79], |
[105, 107, 124], |
[14, 25, 53, 57, 72], |
[26, 37, 67], |
[14, 25, 41, 43, 55, 60, 83], |
[0, 109, 111], |
[18, 29, 57, 61, 76], |
[30, 41, 71], |
[18, 29, 45, 47, 59, 64, 87], |
[4, 113, 115], |
[22, 33, 61, 65, 80], |
[34, 45, 75], |
[22, 33, 49, 51, 63, 68, 91], |
[8, 117, 119], |
[26, 37, 65, 69, 84], |
[38, 49, 79], |
[26, 37, 53, 55, 67, 72, 95], |
[12, 121, 123], |
[30, 41, 69, 73, 88], |
[42, 53, 83], |
[30, 41, 57, 59, 71, 76, 99], |
[16, 125, 127], |
[34, 45, 73, 77, 92], |
[46, 57, 87], |
[34, 45, 61, 63, 75, 80, 103], |
[1, 3, 20], |
[38, 49, 77, 81, 96], |
[50, 61, 91], |
[38, 49, 65, 67, 79, 84, 107], |
[5, 7, 24], |
[42, 53, 81, 85, 100], |
[54, 65, 95], |
[42, 53, 69, 71, 83, 88, 111], |
[9, 11, 28], |
[46, 57, 85, 89, 104], |
[58, 69, 99], |
[46, 57, 73, 75, 87, 92, 115], |
[13, 15, 32], |
[50, 61, 89, 93, 108], |
[62, 73, 103], |
[50, 61, 77, 79, 91, 96, 119], |
[17, 19, 36], |
[54, 65, 93, 97, 112], |
[66, 77, 107], |
[54, 65, 81, 83, 95, 100, 123], |
[21, 23, 40], |
[58, 69, 97, 101, 116], |
[70, 81, 111], |
[58, 69, 85, 87, 99, 104, 127], |
[25, 27, 44], |
[62, 73, 101, 105, 120], |
[74, 85, 115], |
[3, 62, 73, 89, 91, 103, 108], |
[29, 31, 48], |
[66, 77, 105, 109, 124], |
[78, 89, 119], |
[7, 66, 77, 93, 95, 107, 112], |
[33, 35, 52], |
[0, 70, 81, 109, 113], |
[82, 93, 123], |
[11, 70, 81, 97, 99, 111, 116], |
[37, 39, 56], |
[4, 74, 85, 113, 117], |
[86, 97, 127], |
[15, 74, 85, 101, 103, 115, 120], |
[41, 43, 60], |
[8, 78, 89, 117, 121], |
[3, 90], |
[19, 78, 89, 105, 107, 119, 124], |
[45, 47, 64], |
[12, 82, 93, 121, 125], |
[7, 94], |
[0, 23, 82, 93, 109, 111, 123], |
[49, 51, 68], |
[1, 16, 86, 97, 125], |
[11, 98], |
[4, 27, 86, 97, 113, 115, 127], |
] |
# -------------------------------------------------- |
# Handling command line arguments and stuff |
help = """ |
# $Id: serpref.py,v 1.19 1998/09/02 21:28:02 fms Exp $ |
# |
# Python reference implementation of Serpent. |
# |
# Written by Frank Stajano, |
# Olivetti Oracle Research Laboratory <http://www.orl.co.uk/~fms/> and |
# Cambridge University Computer Laboratory <http://www.cl.cam.ac.uk/~fms27/>. |
# |
# (c) 1998 Olivetti Oracle Research Laboratory (ORL) |
# |
# Original (Python) Serpent reference development started on 1998 02 12. |
# C implementation development started on 1998 03 04. |
# |
# Serpent cipher invented by Ross Anderson, Eli Biham, Lars Knudsen. |
# Serpent is a candidate for the Advanced Encryption Standard. |
Encrypts or decrypts one block of data using the Serpent cipher and |
optionally showing you what's going on inside at the various stages of |
the computation. |
SYNTAX: serpref mode [options] |
MODE is one of the following: |
-e -> encrypt |
-d -> decrypt |
-h -> help (the text you're reading right now) |
OPTIONS are: |
-p plainText -> The 128-bit value to be encrypted. Required in mode -e, |
ignored otherwise. Short texts are zeropadded. |
-c cipherText -> The 128-bit value to be decrypted. Required in mode -d, |
ignored otherwise. Short texts are zeropadded. |
-k key -> The value of the key (allowed lengths are from 64 to |
256 bits, but must be a multiple of 32 bits). Keys |
shorter than 256 bits are internally transformed into |
the equivalent long keys (NOT the same as zeropadding!). |
Required for -e and -d. |
-t tagName -> Turn on the observer tag with that name. This means that |
any observer messages associated with this tag will |
now be displayed. This option may be specified several |
times to add multiple tags. |
The special tag ALL turns on all the messages. |
-b -> Use the bitslice version instead of the traditional |
version, which is otherwise used by default. Optional. |
TAGS: |
These are the tags of the quantities you can currently observe with |
-t. Names are modelled on the paper's notation. |
For the non-bitslice: BHati xored SHati BHatiPlus1 wi KHati |
For the bitslice: Bi xored Si BiPlus1 wi Ki |
Generic: plainText userKey cipherText testTitle fnTitle |
I/O FORMAT: |
All I/O is performed using hex numbers of the appropriate size, written |
as sequences of hex digits, most significant digit first (big-endian), |
without any leading or trailing markers such as 0x, &, h or whatever. |
Example: the number ten is "a" in four bits or "000a" in sixteen bits. |
USAGE EXAMPLES: |
serpref -e -k 123456789abcdef -p 0 |
Encrypt the plaintext "all zeros" with the given key. |
serpref -e -b -k 123456789abcdef -p 0 |
Same as above, but the extra -b requests bitslice operation. As |
things are, we won't notice the difference, but see below... |
serpref -e -b -k 123456789abcdef -p 0 -t Bi |
Same as above, but the "-t Bi" prints out all the intermediate |
results with a tag of Bi, allowing you to see what happens inside |
the rounds. Compare this with the following... |
serpref -e -k 123456789abcdef -p 0 -t BHati |
Same as above except that we are back to the non-bitslice version |
(there is no -b) and we are printing the items with the BHati tag |
(which is the equivalent of Bi for the non-bitslice version). |
serpref -e -k 123456789abcdef -p 0 -t xored -t SHati -t BHati |
Same as above but we are requesting even more details, basically |
looking at all the intermediate results of each round as well. (You |
could use the single magic tag -t ALL if you didn't want to have to |
find out the names of the individual tags.) |
""" |
def helpExit(message = None): |
print help |
if message: |
print "ERROR:", message |
sys.exit() |
def convertToBitstring(input, numBits): |
"""Take a string 'input', theoretically in std I/O format, but in |
practice liable to contain any sort of crap since it's user supplied, |
and return its bitstring representation, normalised to numBits |
bits. Raise the appropriate variant of ValueError (with explanatory |
message) if anything can't be done (this includes the case where the |
'input', while otherwise syntactically correct, can't be represented in |
'numBits' bits).""" |
if re.match("^[0-9a-f]+$", input): |
bitstring = hexstring2bitstring(input) |
else: |
raise ValueError, "%s is not a valid hexstring" % input |
# assert: bitstring now contains the bitstring version of the input |
if len(bitstring) > numBits: |
# Last chance: maybe it's got some useless 0s... |
if re.match("^0+$", bitstring[numBits:]): |
bitstring = bitstring[:numBits] |
else: |
raise ValueError, "input too large to fit in %d bits" % numBits |
else: |
bitstring = bitstring + "0" * (numBits-len(bitstring)) |
return bitstring |
def main(): |
optList, rest = getopt.getopt(sys.argv[1:], "edhbt:k:p:c:") |
if rest: |
helpExit("Sorry, can't make sense of this: '%s'" % rest) |
# Transform the list of options into a more comfortable |
# dictionary. This only works with non-repeated options, though, so |
# tags (which are repeated) must be dealt with separately. |
options = {} |
for key, value in optList: |
if key == "-t": |
O.addTag(value) |
else: |
if key in options.keys(): |
helpExit("Multiple occurrences of " + key) |
else: |
options[string.strip(key)] = string.strip(value) |
# Not more than one mode |
mode = None |
for k in options.keys(): |
if k in ["-e", "-d", "-h"]: |
if mode: |
helpExit("you can only specify one mode") |
else: |
mode = k |
if not mode: |
helpExit("No mode specified") |
# Put plainText, userKey, cipherText in bitstring format. |
plainText = userKey = cipherText = None |
if options.has_key("-k"): |
bitsInKey = keyLengthInBitsOf(options["-k"]) |
rawKey = convertToBitstring(options["-k"], bitsInKey) |
userKey = makeLongKey(rawKey) |
if options.has_key("-p"): |
plainText = convertToBitstring(options["-p"], 128) |
if options.has_key("-c"): |
cipherText = convertToBitstring(options["-c"], 128) |
if mode == "-e" or mode == "-d": |
if not userKey: |
helpExit("-k (key) required with -e (encrypt) or -d (decrypt)") |
if mode == "-e": |
if not plainText: |
helpExit("-p (plaintext) is required when doing -e (encrypt)") |
if mode == "-d": |
if not cipherText: |
helpExit("-c (ciphertext) is required when doing -d (decrypt)") |
# Perform the action specified by the mode |
# NOTE that the observer will automatically print the basic stuff such |
# as plainText, userKey and cipherText (in the right format too), so we |
# only need to perform the action, without adding any extra print |
# statements here. |
if mode == "-e": |
if options.has_key("-b"): |
cipherText = encryptBitslice(plainText, userKey) |
else: |
cipherText = encrypt(plainText, userKey) |
elif mode == "-d": |
if options.has_key("-b"): |
plainText = decryptBitslice(cipherText, userKey) |
else: |
plainText = decrypt(cipherText, userKey) |
elif mode == "-s": |
O.addTag("testTitle", "fnTitle") |
printTest(test1(plainText, userKey)) |
printTest(test2(plainText, userKey)) |
printTest(test3(plainText, userKey)) |
else: |
helpExit() |
if __name__ == "__main__": |
main() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/CAST.py |
---|
0,0 → 1,57 |
from blockcipher import * |
import Crypto.Cipher.CAST |
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None): |
"""Create a new cipher object |
CAST using pycrypto for algo and pycryptoplus for ciphermode |
key = raw string containing the keys |
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB |
IV = IV as a raw string, default is "all zero" IV |
-> only needed for CBC mode |
counter = counter object (CryptoPlus.Util.util.Counter) |
-> only needed for CTR mode |
segment_size = amount of bits to use from the keystream in each chain part |
-> supported values: multiple of 8 between 8 and the blocksize |
of the cipher (only per byte access possible), default is 8 |
-> only needed for CFB mode |
EXAMPLES: |
********** |
IMPORTING: |
----------- |
>>> from CryptoPlus.Cipher import CAST |
ECB example: http://www.rfc-editor.org/rfc/rfc2144.txt |
------------- |
128 bit key |
>>> key = "0123456712345678234567893456789A".decode('hex') |
>>> plaintext = "0123456789ABCDEF".decode('hex') |
>>> cipher = CAST.new(key,CAST.MODE_ECB,) |
>>> cipher.encrypt(plaintext).encode('hex') |
'238b4fe5847e44b2' |
40 bit key |
>>> from CryptoPlus.Cipher import CAST |
>>> key = "0123456712".decode('hex') |
>>> plaintext = "0123456789ABCDEF".decode('hex') |
>>> cipher = CAST.new(key,CAST.MODE_ECB,) |
>>> cipher.encrypt(plaintext).encode('hex').upper() |
'7AC816D16E9B302E' |
""" |
return CAST(key,mode,IV,counter,segment_size) |
class CAST(BlockCipher): |
def __init__(self,key,mode,IV,counter,segment_size): |
cipher_module = Crypto.Cipher.CAST.new |
self.blocksize = 8 |
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size) |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Cipher/pytwofish.py |
---|
0,0 → 1,397 |
## twofish.py - pure Python implementation of the Twofish algorithm. |
## Bjorn Edstrom <be@bjrn.se> 13 december 2007. |
## |
## Copyrights |
## ========== |
## |
## This code is a derived from an implementation by Dr Brian Gladman |
## (gladman@seven77.demon.co.uk) which is subject to the following license. |
## This Python implementation is not subject to any other license. |
## |
##/* This is an independent implementation of the encryption algorithm: */ |
##/* */ |
##/* Twofish by Bruce Schneier and colleagues */ |
##/* */ |
##/* which is a candidate algorithm in the Advanced Encryption Standard */ |
##/* programme of the US National Institute of Standards and Technology. */ |
##/* */ |
##/* Copyright in this implementation is held by Dr B R Gladman but I */ |
##/* hereby give permission for its free direct or derivative use subject */ |
##/* to acknowledgment of its origin and compliance with any conditions */ |
##/* that the originators of t he algorithm place on its exploitation. */ |
##/* */ |
##/* My thanks to Doug Whiting and Niels Ferguson for comments that led */ |
##/* to improvements in this implementation. */ |
##/* */ |
##/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 14th January 1999 */ |
## |
## The above copyright notice must not be removed. |
## |
## Information |
## =========== |
## |
## Anyone thinking of using this code should reconsider. It's slow. |
## Try python-mcrypt instead. In case a faster library is not installed |
## on the target system, this code can be used as a portable fallback. |
try: |
import psyco |
psyco.full() |
except ImportError: |
pass |
block_size = 16 |
key_size = 32 |
class Twofish: |
def __init__(self, key=None): |
"""Twofish.""" |
if key: |
self.set_key(key) |
def set_key(self, key): |
"""Init.""" |
key_len = len(key) |
if key_len not in [16, 24, 32]: |
# XXX: add padding? |
raise KeyError, "key must be 16, 24 or 32 bytes" |
if key_len % 4: |
# XXX: add padding? |
raise KeyError, "key not a multiple of 4" |
if key_len > 32: |
# XXX: prune? |
raise KeyError, "key_len > 32" |
self.context = TWI() |
key_word32 = [0] * 32 |
i = 0 |
while key: |
key_word32[i] = struct.unpack("<L", key[0:4])[0] |
key = key[4:] |
i += 1 |
set_key(self.context, key_word32, key_len) |
def decrypt(self, block): |
"""Decrypt blocks.""" |
if len(block) % 16: |
raise ValueError, "block size must be a multiple of 16" |
plaintext = '' |
while block: |
a, b, c, d = struct.unpack("<4L", block[:16]) |
temp = [a, b, c, d] |
decrypt(self.context, temp) |
plaintext += struct.pack("<4L", *temp) |
block = block[16:] |
return plaintext |
def encrypt(self, block): |
"""Encrypt blocks.""" |
if len(block) % 16: |
raise ValueError, "block size must be a multiple of 16" |
ciphertext = '' |
while block: |
a, b, c, d = struct.unpack("<4L", block[0:16]) |
temp = [a, b, c, d] |
encrypt(self.context, temp) |
ciphertext += struct.pack("<4L", *temp) |
block = block[16:] |
return ciphertext |
def get_name(self): |
"""Return the name of the cipher.""" |
return "Twofish" |
def get_block_size(self): |
"""Get cipher block size in bytes.""" |
return 16 |
def get_key_size(self): |
"""Get cipher key size in bytes.""" |
return 32 |
# |
# Private. |
# |
import struct |
import sys |
WORD_BIGENDIAN = 0 |
if sys.byteorder == 'big': |
WORD_BIGENDIAN = 1 |
def rotr32(x, n): |
return (x >> n) | ((x << (32 - n)) & 0xFFFFFFFF) |
def rotl32(x, n): |
return ((x << n) & 0xFFFFFFFF) | (x >> (32 - n)) |
def byteswap32(x): |
return ((x & 0xff) << 24) | (((x >> 8) & 0xff) << 16) | \ |
(((x >> 16) & 0xff) << 8) | ((x >> 24) & 0xff) |
class TWI: |
def __init__(self): |
self.k_len = 0 # word32 |
self.l_key = [0]*40 # word32 |
self.s_key = [0]*4 # word32 |
self.qt_gen = 0 # word32 |
self.q_tab = [[0]*256, [0]*256] # byte |
self.mt_gen = 0 # word32 |
self.m_tab = [[0]*256, [0]*256, [0]*256, [0]*256] # word32 |
self.mk_tab = [[0]*256, [0]*256, [0]*256, [0]*256] # word32 |
def byte(x, n): |
return (x >> (8 * n)) & 0xff |
tab_5b = [0, 90, 180, 238] |
tab_ef = [0, 238, 180, 90] |
ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15] |
ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7] |
qt0 = [[8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4], |
[2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]] |
qt1 = [[14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13], |
[1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]] |
qt2 = [[11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1], |
[4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]] |
qt3 = [[13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10], |
[11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]] |
def qp(n, x): # word32, byte |
n %= 0x100000000 |
x %= 0x100 |
a0 = x >> 4; |
b0 = x & 15; |
a1 = a0 ^ b0; |
b1 = ror4[b0] ^ ashx[a0]; |
a2 = qt0[n][a1]; |
b2 = qt1[n][b1]; |
a3 = a2 ^ b2; |
b3 = ror4[b2] ^ ashx[a2]; |
a4 = qt2[n][a3]; |
b4 = qt3[n][b3]; |
return (b4 << 4) | a4; |
def gen_qtab(pkey): |
for i in xrange(256): |
pkey.q_tab[0][i] = qp(0, i) |
pkey.q_tab[1][i] = qp(1, i) |
def gen_mtab(pkey): |
for i in xrange(256): |
f01 = pkey.q_tab[1][i] |
f01 = pkey.q_tab[1][i]; |
f5b = ((f01) ^ ((f01) >> 2) ^ tab_5b[(f01) & 3]); |
fef = ((f01) ^ ((f01) >> 1) ^ ((f01) >> 2) ^ tab_ef[(f01) & 3]); |
pkey.m_tab[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24); |
pkey.m_tab[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24); |
f01 = pkey.q_tab[0][i]; |
f5b = ((f01) ^ ((f01) >> 2) ^ tab_5b[(f01) & 3]); |
fef = ((f01) ^ ((f01) >> 1) ^ ((f01) >> 2) ^ tab_ef[(f01) & 3]); |
pkey.m_tab[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24); |
pkey.m_tab[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24); |
def gen_mk_tab(pkey, key): |
if pkey.k_len == 2: |
for i in xrange(256): |
by = i % 0x100 |
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[1],0)] ^ byte(key[0],0)]; |
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[1],1)] ^ byte(key[0],1)]; |
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[1],2)] ^ byte(key[0],2)]; |
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[1],3)] ^ byte(key[0],3)]; |
if pkey.k_len == 3: |
for i in xrange(256): |
by = i % 0x100 |
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[2], 0)] ^ byte(key[1], 0)] ^ byte(key[0], 0)]; |
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[2], 1)] ^ byte(key[1], 1)] ^ byte(key[0], 1)]; |
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[2], 2)] ^ byte(key[1], 2)] ^ byte(key[0], 2)]; |
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[2], 3)] ^ byte(key[1], 3)] ^ byte(key[0], 3)]; |
if pkey.k_len == 4: |
for i in xrange(256): |
by = i % 0x100 |
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[3], 0)] ^ byte(key[2], 0)] ^ byte(key[1], 0)] ^ byte(key[0], 0)]; |
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[3], 1)] ^ byte(key[2], 1)] ^ byte(key[1], 1)] ^ byte(key[0], 1)]; |
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[3], 2)] ^ byte(key[2], 2)] ^ byte(key[1], 2)] ^ byte(key[0], 2)]; |
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[3], 3)] ^ byte(key[2], 3)] ^ byte(key[1], 3)] ^ byte(key[0], 3)]; |
def h_fun(pkey, x, key): |
b0 = byte(x, 0); |
b1 = byte(x, 1); |
b2 = byte(x, 2); |
b3 = byte(x, 3); |
if pkey.k_len >= 4: |
b0 = pkey.q_tab[1][b0] ^ byte(key[3], 0); |
b1 = pkey.q_tab[0][b1] ^ byte(key[3], 1); |
b2 = pkey.q_tab[0][b2] ^ byte(key[3], 2); |
b3 = pkey.q_tab[1][b3] ^ byte(key[3], 3); |
if pkey.k_len >= 3: |
b0 = pkey.q_tab[1][b0] ^ byte(key[2], 0); |
b1 = pkey.q_tab[1][b1] ^ byte(key[2], 1); |
b2 = pkey.q_tab[0][b2] ^ byte(key[2], 2); |
b3 = pkey.q_tab[0][b3] ^ byte(key[2], 3); |
if pkey.k_len >= 2: |
b0 = pkey.q_tab[0][pkey.q_tab[0][b0] ^ byte(key[1], 0)] ^ byte(key[0], 0); |
b1 = pkey.q_tab[0][pkey.q_tab[1][b1] ^ byte(key[1], 1)] ^ byte(key[0], 1); |
b2 = pkey.q_tab[1][pkey.q_tab[0][b2] ^ byte(key[1], 2)] ^ byte(key[0], 2); |
b3 = pkey.q_tab[1][pkey.q_tab[1][b3] ^ byte(key[1], 3)] ^ byte(key[0], 3); |
return pkey.m_tab[0][b0] ^ pkey.m_tab[1][b1] ^ pkey.m_tab[2][b2] ^ pkey.m_tab[3][b3]; |
def mds_rem(p0, p1): |
i, t, u = 0, 0, 0 |
for i in xrange(8): |
t = p1 >> 24 |
p1 = ((p1 << 8) & 0xffffffff) | (p0 >> 24) |
p0 = (p0 << 8) & 0xffffffff |
u = (t << 1) & 0xffffffff |
if t & 0x80: |
u ^= 0x0000014d |
p1 ^= t ^ ((u << 16) & 0xffffffff) |
u ^= (t >> 1) |
if t & 0x01: |
u ^= 0x0000014d >> 1 |
p1 ^= ((u << 24) & 0xffffffff) | ((u << 8) & 0xffffffff) |
return p1 |
def set_key(pkey, in_key, key_len): |
pkey.qt_gen = 0 |
if not pkey.qt_gen: |
gen_qtab(pkey) |
pkey.qt_gen = 1 |
pkey.mt_gen = 0 |
if not pkey.mt_gen: |
gen_mtab(pkey) |
pkey.mt_gen = 1 |
pkey.k_len = (key_len * 8) / 64 |
a = 0 |
b = 0 |
me_key = [0,0,0,0] |
mo_key = [0,0,0,0] |
for i in xrange(pkey.k_len): |
if WORD_BIGENDIAN: |
a = byteswap32(in_key[i + 1]) |
me_key[i] = a |
b = byteswap32(in_key[i + i + 1]) |
else: |
a = in_key[i + i] |
me_key[i] = a |
b = in_key[i + i + 1] |
mo_key[i] = b |
pkey.s_key[pkey.k_len - i - 1] = mds_rem(a, b); |
for i in xrange(0, 40, 2): |
a = (0x01010101 * i) % 0x100000000; |
b = (a + 0x01010101) % 0x100000000; |
a = h_fun(pkey, a, me_key); |
b = rotl32(h_fun(pkey, b, mo_key), 8); |
pkey.l_key[i] = (a + b) % 0x100000000; |
pkey.l_key[i + 1] = rotl32((a + 2 * b) % 0x100000000, 9); |
gen_mk_tab(pkey, pkey.s_key) |
def encrypt(pkey, in_blk): |
blk = [0, 0, 0, 0] |
if WORD_BIGENDIAN: |
blk[0] = byteswap32(in_blk[0]) ^ pkey.l_key[0]; |
blk[1] = byteswap32(in_blk[1]) ^ pkey.l_key[1]; |
blk[2] = byteswap32(in_blk[2]) ^ pkey.l_key[2]; |
blk[3] = byteswap32(in_blk[3]) ^ pkey.l_key[3]; |
else: |
blk[0] = in_blk[0] ^ pkey.l_key[0]; |
blk[1] = in_blk[1] ^ pkey.l_key[1]; |
blk[2] = in_blk[2] ^ pkey.l_key[2]; |
blk[3] = in_blk[3] ^ pkey.l_key[3]; |
for i in xrange(8): |
t1 = ( pkey.mk_tab[0][byte(blk[1],3)] ^ pkey.mk_tab[1][byte(blk[1],0)] ^ pkey.mk_tab[2][byte(blk[1],1)] ^ pkey.mk_tab[3][byte(blk[1],2)] ); |
t0 = ( pkey.mk_tab[0][byte(blk[0],0)] ^ pkey.mk_tab[1][byte(blk[0],1)] ^ pkey.mk_tab[2][byte(blk[0],2)] ^ pkey.mk_tab[3][byte(blk[0],3)] ); |
blk[2] = rotr32(blk[2] ^ ((t0 + t1 + pkey.l_key[4 * (i) + 8]) % 0x100000000), 1); |
blk[3] = rotl32(blk[3], 1) ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 9]) % 0x100000000); |
t1 = ( pkey.mk_tab[0][byte(blk[3],3)] ^ pkey.mk_tab[1][byte(blk[3],0)] ^ pkey.mk_tab[2][byte(blk[3],1)] ^ pkey.mk_tab[3][byte(blk[3],2)] ); |
t0 = ( pkey.mk_tab[0][byte(blk[2],0)] ^ pkey.mk_tab[1][byte(blk[2],1)] ^ pkey.mk_tab[2][byte(blk[2],2)] ^ pkey.mk_tab[3][byte(blk[2],3)] ); |
blk[0] = rotr32(blk[0] ^ ((t0 + t1 + pkey.l_key[4 * (i) + 10]) % 0x100000000), 1); |
blk[1] = rotl32(blk[1], 1) ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 11]) % 0x100000000); |
if WORD_BIGENDIAN: |
in_blk[0] = byteswap32(blk[2] ^ pkey.l_key[4]); |
in_blk[1] = byteswap32(blk[3] ^ pkey.l_key[5]); |
in_blk[2] = byteswap32(blk[0] ^ pkey.l_key[6]); |
in_blk[3] = byteswap32(blk[1] ^ pkey.l_key[7]); |
else: |
in_blk[0] = blk[2] ^ pkey.l_key[4]; |
in_blk[1] = blk[3] ^ pkey.l_key[5]; |
in_blk[2] = blk[0] ^ pkey.l_key[6]; |
in_blk[3] = blk[1] ^ pkey.l_key[7]; |
return |
def decrypt(pkey, in_blk): |
blk = [0, 0, 0, 0] |
if WORD_BIGENDIAN: |
blk[0] = byteswap32(in_blk[0]) ^ pkey.l_key[4]; |
blk[1] = byteswap32(in_blk[1]) ^ pkey.l_key[5]; |
blk[2] = byteswap32(in_blk[2]) ^ pkey.l_key[6]; |
blk[3] = byteswap32(in_blk[3]) ^ pkey.l_key[7]; |
else: |
blk[0] = in_blk[0] ^ pkey.l_key[4]; |
blk[1] = in_blk[1] ^ pkey.l_key[5]; |
blk[2] = in_blk[2] ^ pkey.l_key[6]; |
blk[3] = in_blk[3] ^ pkey.l_key[7]; |
for i in xrange(7, -1, -1): |
t1 = ( pkey.mk_tab[0][byte(blk[1],3)] ^ pkey.mk_tab[1][byte(blk[1],0)] ^ pkey.mk_tab[2][byte(blk[1],1)] ^ pkey.mk_tab[3][byte(blk[1],2)] ) |
t0 = ( pkey.mk_tab[0][byte(blk[0],0)] ^ pkey.mk_tab[1][byte(blk[0],1)] ^ pkey.mk_tab[2][byte(blk[0],2)] ^ pkey.mk_tab[3][byte(blk[0],3)] ) |
blk[2] = rotl32(blk[2], 1) ^ ((t0 + t1 + pkey.l_key[4 * (i) + 10]) % 0x100000000) |
blk[3] = rotr32(blk[3] ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 11]) % 0x100000000), 1) |
t1 = ( pkey.mk_tab[0][byte(blk[3],3)] ^ pkey.mk_tab[1][byte(blk[3],0)] ^ pkey.mk_tab[2][byte(blk[3],1)] ^ pkey.mk_tab[3][byte(blk[3],2)] ) |
t0 = ( pkey.mk_tab[0][byte(blk[2],0)] ^ pkey.mk_tab[1][byte(blk[2],1)] ^ pkey.mk_tab[2][byte(blk[2],2)] ^ pkey.mk_tab[3][byte(blk[2],3)] ) |
blk[0] = rotl32(blk[0], 1) ^ ((t0 + t1 + pkey.l_key[4 * (i) + 8]) % 0x100000000) |
blk[1] = rotr32(blk[1] ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 9]) % 0x100000000), 1) |
if WORD_BIGENDIAN: |
in_blk[0] = byteswap32(blk[2] ^ pkey.l_key[0]); |
in_blk[1] = byteswap32(blk[3] ^ pkey.l_key[1]); |
in_blk[2] = byteswap32(blk[0] ^ pkey.l_key[2]); |
in_blk[3] = byteswap32(blk[1] ^ pkey.l_key[3]); |
else: |
in_blk[0] = blk[2] ^ pkey.l_key[0]; |
in_blk[1] = blk[3] ^ pkey.l_key[1]; |
in_blk[2] = blk[0] ^ pkey.l_key[2]; |
in_blk[3] = blk[1] ^ pkey.l_key[3]; |
return |
__testkey = '\xD4\x3B\xB7\x55\x6E\xA3\x2E\x46\xF2\xA2\x82\xB7\xD4\x5B\x4E\x0D\x57\xFF\x73\x9D\x4D\xC9\x2C\x1B\xD7\xFC\x01\x70\x0C\xC8\x21\x6F' |
__testdat = '\x90\xAF\xE9\x1B\xB2\x88\x54\x4F\x2C\x32\xDC\x23\x9B\x26\x35\xE6' |
assert 'l\xb4V\x1c@\xbf\n\x97\x05\x93\x1c\xb6\xd4\x08\xe7\xfa' == Twofish(__testkey).encrypt(__testdat) |
assert __testdat == Twofish(__testkey).decrypt('l\xb4V\x1c@\xbf\n\x97\x05\x93\x1c\xb6\xd4\x08\xe7\xfa') |
/relevation/ext/python-cryptoplus/src/CryptoPlus/testvectors.py |
---|
0,0 → 1,216 |
# CHAIN MODES WITH AES: |
# test vectors from: http://cryptome.org/bcm/sp800-38a.htm |
dict_cbc_aes = { |
'key1' : '2b7e151628aed2a6abf7158809cf4f3c', |
'iv1' : '000102030405060708090a0b0c0d0e0f', |
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip1' : '7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7', |
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'iv2' : '000102030405060708090a0b0c0d0e0f', |
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip2' : '4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd', |
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'iv3' : '000102030405060708090a0b0c0d0e0f', |
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip3' : 'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b', |
} |
dict_ctr_aes = { |
'key1' : '2b7e151628aed2a6abf7158809cf4f3c', |
'ctr1' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip1' : '874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee', |
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'ctr2' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip2' : '1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050', |
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'ctr3' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip3' : '601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6', |
} |
dict_cfb_aes = { |
'key1' : '2b7e151628aed2a6abf7158809cf4f3c', |
'iv1' : '000102030405060708090a0b0c0d0e0f', |
's1' : 128, |
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip1' : '3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6', |
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'iv2' : '000102030405060708090a0b0c0d0e0f', |
's2' : 128, |
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip2' : 'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ff', |
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'iv3' : '000102030405060708090a0b0c0d0e0f', |
's3' : 128, |
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip3' : 'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471', |
} |
dict_ofb_aes = { |
'key1' : '2b7e151628aed2a6abf7158809cf4f3c', |
'iv1' : '000102030405060708090a0b0c0d0e0f', |
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip1' : '3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e', |
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b', |
'iv2' : '000102030405060708090a0b0c0d0e0f', |
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip2' : 'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a', |
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4', |
'iv3' : '000102030405060708090a0b0c0d0e0f', |
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710', |
'cip3' : 'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484', |
} |
# DES |
# test vectors from: https://www.cosic.esat.kuleuven.be/nessie/testvectors/ |
dict_des = {'cip10': '31FE17369B5288C9', 'key339': 'D3D3D3D3D3D3D3D3', 'cip11': 'DFDD3CC64DAE1642', 'msg284': '9C9C9C9C9C9C9C9C', 'cip49': '14C1D7C1CFFEC79E', 'cip48': 'D1399712F99BF02E', 'cip382': '66B2B23EA84693AD', 'key19': '0000100000000000', 'key18': '0000200000000000', 'key17': '0000400000000000', 'key16': '0000800000000000', 'key15': '0001000000000000', 'key14': '0002000000000000', 'key13': '0004000000000000', 'key12': '0008000000000000', 'key11': '0010000000000000', 'key10': '0020000000000000', 'cip213': '3BCDD41E6165A5E8', 'key338': 'D2D2D2D2D2D2D2D2', 'cip212': '531BE5F9405DA715', 'key331': 'CBCBCBCBCBCBCBCB', 'key202': '4A4A4A4A4A4A4A4A', 'key330': 'CACACACACACACACA', 'key337': 'D1D1D1D1D1D1D1D1', 'key336': 'D0D0D0D0D0D0D0D0', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg249': '7979797979797979', 'msg248': '7878787878787878', 'key315': 'BBBBBBBBBBBBBBBB', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'cip355': 'ADE4804C4BE4486E', 'msg329': 'C9C9C9C9C9C9C9C9', 'msg383': 'FFFFFFFFFFFFFFFF', 'cip292': 'CA439007C7245CD0', 'cip219': '35BC6FF838DBA32F', 'key80': '0000000000000000', 'key81': '0000000000000000', 'key82': '0000000000000000', 'key83': '0000000000000000', 'key84': '0000000000000000', 'key85': '0000000000000000', 'key86': '0000000000000000', 'key87': '0000000000000000', 'key88': '0000000000000000', 'key89': '0000000000000000', 'msg332': 'CCCCCCCCCCCCCCCC', 'msg282': '9A9A9A9A9A9A9A9A', 'key288': 'A0A0A0A0A0A0A0A0', 'key309': 'B5B5B5B5B5B5B5B5', 'key350': 'DEDEDEDEDEDEDEDE', 'cip354': 'D9FA6595F0C094CA', 'key180': '3434343434343434', 'key181': '3535353535353535', 'key182': '3636363636363636', 'key183': '3737373737373737', 'key184': '3838383838383838', 'key185': '3939393939393939', 'key186': '3A3A3A3A3A3A3A3A', 'key187': '3B3B3B3B3B3B3B3B', 'key188': '3C3C3C3C3C3C3C3C', 'key189': '3D3D3D3D3D3D3D3D', 'key223': '5F5F5F5F5F5F5F5F', 'key222': '5E5E5E5E5E5E5E5E', 'key225': '6161616161616161', 'key224': '6060606060606060', 'key227': '6363636363636363', 'key226': '6262626262626262', 'cip41': '41B9A79AF79AC208', 'cip40': '8638809E878787A0', 'cip43': '29038D56BA6D2745', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '8000000000000000', 'msg65': '4000000000000000', 'msg66': '2000000000000000', 'msg67': '1000000000000000', 'msg68': '0800000000000000', 'cip45': 'AE13DBD561488933', 'cip291': 'B6D8533731BA1318', 'cip290': '17ED1191CA8D67A3', 'cip297': 'D4E00A9EF5E6D8F3', 'key201': '4949494949494949', 'cip295': 'E415D80048DBA848', 'cip44': '5495C6ABF1E5DF51', 'key200': '4848484848484848', 'key139': '0B0B0B0B0B0B0B0B', 'cip47': '8CA64DE9C1B123A7', 'key135': '0707070707070707', 'key134': '0606060606060606', 'key137': '0909090909090909', 'cip46': '024D1FFA8904E389', 'key131': '0303030303030303', 'key130': '0202020202020202', 'key133': '0505050505050505', 'key132': '0404040404040404', 'cip275': 'F0B00B264381DDBB', 'cip274': '5B365F2FB2CD7F32', 'cip178': 'AC978C247863388F', 'cip179': '0432ED386F2DE328', 'cip271': '50ACE16ADF66BFE8', 'key205': '4D4D4D4D4D4D4D4D', 'cip273': '6050D369017B6E62', 'cip272': 'EEA24369A19F6937', 'cip172': 'DD2CCB29B6C4C349', 'cip173': '7D07A77A2ABD50A7', 'cip170': 'DCAD4338F7523816', 'cip171': 'B81634C1CEAB298C', 'key26': '0000002000000000', 'cip177': '655EA628CF62585F', 'cip174': '30C1B0C1FD91D371', 'cip175': 'C4427B31AC61973B', 'cip296': '26F88D30C0FB8302', 'key280': '9898989898989898', 'msg188': '3C3C3C3C3C3C3C3C', 'msg189': '3D3D3D3D3D3D3D3D', 'msg186': '3A3A3A3A3A3A3A3A', 'msg187': '3B3B3B3B3B3B3B3B', 'msg184': '3838383838383838', 'msg185': '3939393939393939', 'msg182': '3636363636363636', 'msg183': '3737373737373737', 'msg180': '3434343434343434', 'msg181': '3535353535353535', 'cip187': '8D250D58361597FC', 'cip186': 'B04A2AAC925ABB0B', 'cip185': 'E22B19A55086774B', 'cip184': '8940F7B3EACA5939', 'cip183': '5013CA4F62C9CEA0', 'cip182': '37F8759EB77E7BFC', 'cip181': 'B256E34BEDB49801', 'cip180': 'D254014CB986B3C2', 'msg348': 'DCDCDCDCDCDCDCDC', 'msg349': 'DDDDDDDDDDDDDDDD', 'key27': '0000001000000000', 'cip189': '9D0BB4DB830ECB73', 'cip188': '51F0114FB6A6CD37', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'key378': 'FAFAFAFAFAFAFAFA', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip89': '64FEED9C724C2FAF', 'cip88': '750D079407521363', 'cip85': '12A9F5817FF2D65D', 'cip84': 'E7FCE22557D23C97', 'cip87': 'FBE00A8A1EF8AD72', 'cip86': 'A484C3AD38DC9C19', 'cip81': '889DE068A16F0BE6', 'cip80': '2B9F982F20037FA9', 'cip83': '329A8ED523D71AEC', 'cip82': 'E19E275D846A1298', 'key318': 'BEBEBEBEBEBEBEBE', 'msg358': 'E6E6E6E6E6E6E6E6', 'msg115': '0000000000001000', 'msg114': '0000000000002000', 'msg117': '0000000000000400', 'msg116': '0000000000000800', 'msg111': '0000000000010000', 'msg110': '0000000000020000', 'msg113': '0000000000004000', 'msg112': '0000000000008000', 'msg119': '0000000000000100', 'msg118': '0000000000000200', 'cip381': '1ED83D49E267191D', 'key209': '5151515151515151', 'key308': 'B4B4B4B4B4B4B4B4', 'cip261': '69D901A8A691E661', 'key367': 'EFEFEFEFEFEFEFEF', 'cip16': 'A2DC9E92FD3CDE92', 'cip17': 'CAC09F797D031287', 'cip14': 'A8468EE3BC18F06D', 'cip15': '8CA64DE9C1B123A7', 'cip12': '178C83CE2B399D94', 'cip13': '50F636324A9B7F80', 'key42': '0000000000200000', 'key43': '0000000000100000', 'cip345': '4DADD04A0EA70F20', 'key208': '5050505050505050', 'key48': '0000000000008000', 'key49': '0000000000004000', 'cip18': '90BA680B22AEB525', 'cip19': 'CE7A24F350E280B6', 'cip333': '536873DB879CC770', 'cip347': 'F45FC26193E69AEE', 'cip329': 'C8078A6148818403', 'msg347': 'DBDBDBDBDBDBDBDB', 'cip335': '0B844B9D8C4EA14A', 'cip349': 'F0752004EE23D87B', 'cip336': '3BBD84CE539E68C4', 'cip353': '0DB572DDCE388AC7', 'msg288': 'A0A0A0A0A0A0A0A0', 'cip337': 'CF3E4F3E026E2C8E', 'cip313': 'B7FE63A61C646F3A', 'msg241': '7171717171717171', 'key265': '8989898989898989', 'msg365': 'EDEDEDEDEDEDEDED', 'key326': 'C6C6C6C6C6C6C6C6', 'msg240': '7070707070707070', 'msg243': '7373737373737373', 'cip362': '8FE559C7CD6FA56D', 'msg238': '6E6E6E6E6E6E6E6E', 'msg239': '6F6F6F6F6F6F6F6F', 'msg242': '7272727272727272', 'key206': '4E4E4E4E4E4E4E4E', 'msg230': '6666666666666666', 'msg231': '6767676767676767', 'msg232': '6868686868686868', 'msg233': '6969696969696969', 'msg234': '6A6A6A6A6A6A6A6A', 'msg235': '6B6B6B6B6B6B6B6B', 'msg236': '6C6C6C6C6C6C6C6C', 'msg237': '6D6D6D6D6D6D6D6D', 'key171': '2B2B2B2B2B2B2B2B', 'key170': '2A2A2A2A2A2A2A2A', 'key173': '2D2D2D2D2D2D2D2D', 'key172': '2C2C2C2C2C2C2C2C', 'key175': '2F2F2F2F2F2F2F2F', 'key174': '2E2E2E2E2E2E2E2E', 'key177': '3131313131313131', 'key176': '3030303030303030', 'key179': '3333333333333333', 'key178': '3232323232323232', 'msg246': '7676767676767676', 'cip361': 'DFF918E93BDAD292', 'key359': 'E7E7E7E7E7E7E7E7', 'cip239': '115DBC965E6096C8', 'cip238': '9FAF2C96FE84919D', 'key252': '7C7C7C7C7C7C7C7C', 'key253': '7D7D7D7D7D7D7D7D', 'key254': '7E7E7E7E7E7E7E7E', 'key255': '7F7F7F7F7F7F7F7F', 'key256': '8080808080808080', 'key257': '8181818181818181', 'cip231': 'F8D1CD7367B21B5D', 'cip230': 'EBBF4810619C2C55', 'cip233': '5FDFFFC3AAAB0CB3', 'cip232': '9EE703142BF8D7E2', 'cip235': '1E2DC77E36A84693', 'cip234': '26C940AB13574231', 'cip237': 'A4C9A0D04D3280CD', 'cip236': '0F4FF4D9BC7E2244', 'msg304': 'B0B0B0B0B0B0B0B0', 'msg305': 'B1B1B1B1B1B1B1B1', 'msg306': 'B2B2B2B2B2B2B2B2', 'msg307': 'B3B3B3B3B3B3B3B3', 'msg300': 'ACACACACACACACAC', 'msg301': 'ADADADADADADADAD', 'msg302': 'AEAEAEAEAEAEAEAE', 'msg303': 'AFAFAFAFAFAFAFAF', 'msg308': 'B4B4B4B4B4B4B4B4', 'msg309': 'B5B5B5B5B5B5B5B5', 'key382': 'FEFEFEFEFEFEFEFE', 'key383': 'FFFFFFFFFFFFFFFF', 'key380': 'FCFCFCFCFCFCFCFC', 'key268': '8C8C8C8C8C8C8C8C', 'key384': '0001020304050607', 'cip367': '228AEA0D403E807A', 'key334': 'CECECECECECECECE', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip334': '9AA159D7309DA7A0', 'cip309': '62D473F539FA0D8B', 'cip308': '36F0D0B3675704D5', 'cip363': 'C88480835C1A444C', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'D2FD8867D50D2DFE', 'cip124': 'CC083F1E6D9E85F6', 'cip127': '166B40B44ABA4BD6', 'cip126': '06E7EA22CE92708F', 'cip121': 'E07C30D7E4E26E12', 'cip120': '2FBC291A570DB5C4', 'cip123': '5B711BC4CEEBF2EE', 'cip122': '0953E2258E8E90A1', 'cip129': '994D4DC157B96C52', 'cip128': '8CA64DE9C1B123A7', 'key363': 'EBEBEBEBEBEBEBEB', 'key364': 'ECECECECECECECEC', 'key323': 'C3C3C3C3C3C3C3C3', 'cip268': '720479B024C397EE', 'key365': 'EDEDEDEDEDEDEDED', 'msg159': '1F1F1F1F1F1F1F1F', 'msg158': '1E1E1E1E1E1E1E1E', 'key366': 'EEEEEEEEEEEEEEEE', 'msg151': '1717171717171717', 'msg150': '1616161616161616', 'msg153': '1919191919191919', 'msg152': '1818181818181818', 'msg155': '1B1B1B1B1B1B1B1B', 'msg154': '1A1A1A1A1A1A1A1A', 'msg157': '1D1D1D1D1D1D1D1D', 'msg156': '1C1C1C1C1C1C1C1C', 'cip248': '80D9230BDAEB67DC', 'key357': 'E5E5E5E5E5E5E5E5', 'cip249': '3440911019AD68D7', 'cip269': 'BEA27E3795063C89', 'cip301': '3C9A34CA4CB49EEB', 'key301': 'ADADADADADADADAD', 'cip58': 'A1AB2190545B91D7', 'cip59': '0875041E64C570F7', 'key207': '4F4F4F4F4F4F4F4F', 'cip52': 'DA99DBBC9A03F379', 'cip53': 'B7FC92F91D8E92E9', 'cip50': '1DE5279DAE3BED6F', 'cip51': 'E941A33F85501303', 'cip56': '9CC62DF43B6EED74', 'cip57': 'D863DBB5C59A91A0', 'cip54': 'AE8E5CAA3CA04E85', 'cip55': '8CA64DE9C1B123A7', 'cip4': '809F5F873C1FD761', 'cip5': 'C02FAFFEC989D1FC', 'cip6': '4615AA1D33E72F10', 'cip7': '8CA64DE9C1B123A7', 'cip0': '95A8D72813DAA94D', 'cip1': '0EEC1487DD8C26D5', 'cip2': '7AD16FFB79C45926', 'cip3': 'D3746294CA6A6CF3', 'key306': 'B2B2B2B2B2B2B2B2', 'cip8': '2055123350C00858', 'cip9': 'DF3B99D6577397C8', 'key358': 'E6E6E6E6E6E6E6E6', 'cip325': '4FB5D5536DA544F4', 'key329': 'C9C9C9C9C9C9C9C9', 'cip300': 'EEAAC6D17880BD56', 'key250': '7A7A7A7A7A7A7A7A', 'msg278': '9696969696969696', 'msg279': '9797979797979797', 'key251': '7B7B7B7B7B7B7B7B', 'msg274': '9292929292929292', 'msg275': '9393939393939393', 'msg276': '9494949494949494', 'msg277': '9595959595959595', 'msg270': '8E8E8E8E8E8E8E8E', 'msg271': '8F8F8F8F8F8F8F8F', 'msg272': '9090909090909090', 'msg273': '9191919191919191', 'msg359': 'E7E7E7E7E7E7E7E7', 'cip312': 'FABBF7C046FD273F', 'key324': 'C4C4C4C4C4C4C4C4', 'cip351': 'E7562A7F56FF4966', 'key79': '0000000000000000', 'key78': '0000000000000000', 'key325': 'C5C5C5C5C5C5C5C5', 'key75': '0000000000000000', 'key74': '0000000000000000', 'key77': '0000000000000000', 'key76': '0000000000000000', 'key71': '0000000000000000', 'key70': '0000000000000000', 'key73': '0000000000000000', 'key72': '0000000000000000', 'key258': '8282828282828282', 'key327': 'C7C7C7C7C7C7C7C7', 'key259': '8383838383838383', 'key320': 'C0C0C0C0C0C0C0C0', 'key346': 'DADADADADADADADA', 'key313': 'B9B9B9B9B9B9B9B9', 'key321': 'C1C1C1C1C1C1C1C1', 'cip360': 'BAD3EE68BDDB9607', 'key312': 'B8B8B8B8B8B8B8B8', 'key305': 'B1B1B1B1B1B1B1B1', 'key322': 'C2C2C2C2C2C2C2C2', 'key199': '4747474747474747', 'key198': '4646464646464646', 'key197': '4545454545454545', 'key196': '4444444444444444', 'key195': '4343434343434343', 'key194': '4242424242424242', 'key193': '4141414141414141', 'key192': '4040404040404040', 'key191': '3F3F3F3F3F3F3F3F', 'key190': '3E3E3E3E3E3E3E3E', 'msg295': 'A7A7A7A7A7A7A7A7', 'cip24': '5199C29A52C9F059', 'key317': 'BDBDBDBDBDBDBDBD', 'key316': 'BCBCBCBCBCBCBCBC', 'cip341': '2352BCC708ADC7E9', 'cip340': '47E9CB3E3154D673', 'cip343': 'EE5E9FD70CEF00E9', 'cip342': '8C0F3BA0C8601980', 'msg99': '0000000010000000', 'msg98': '0000000020000000', 'key314': 'BABABABABABABABA', 'cip346': 'C1AA16689EE1B482', 'msg95': '0000000100000000', 'msg94': '0000000200000000', 'msg97': '0000000040000000', 'msg96': '0000000080000000', 'msg91': '0000001000000000', 'msg90': '0000002000000000', 'msg93': '0000000400000000', 'msg92': '0000000800000000', 'key108': '0000000000000000', 'key109': '0000000000000000', 'key100': '0000000000000000', 'key101': '0000000000000000', 'key102': '0000000000000000', 'key103': '0000000000000000', 'key104': '0000000000000000', 'key105': '0000000000000000', 'key106': '0000000000000000', 'key107': '0000000000000000', 'cip169': '73F0C45F379FE67F', 'cip168': '11A16028F310FF16', 'cip242': '415D81C86AF9C376', 'cip243': '8DFB864FDB3C6811', 'cip244': '10B1C170E3398F91', 'cip245': 'CFEF7A1C0218DB1E', 'cip246': 'DBAC30A2A40B1B9C', 'key228': '6464646464646464', 'cip161': '88586E1D755B9B5A', 'cip160': '18A9D580A900B699', 'cip163': '2F30446C8312404A', 'cip162': '0F8ADFFB11DC2784', 'cip165': '3E55E997611E4B7D', 'cip164': '0BA03D9E6C196511', 'cip167': '2109425935406AB8', 'cip166': 'B2522FB5F158F0DF', 'msg199': '4747474747474747', 'msg198': '4646464646464646', 'msg195': '4343434343434343', 'msg194': '4242424242424242', 'msg197': '4545454545454545', 'msg196': '4444444444444444', 'msg191': '3F3F3F3F3F3F3F3F', 'key28': '0000000800000000', 'msg193': '4141414141414141', 'msg192': '4040404040404040', 'msg296': 'A8A8A8A8A8A8A8A8', 'msg297': 'A9A9A9A9A9A9A9A9', 'msg294': 'A6A6A6A6A6A6A6A6', 'key29': '0000000400000000', 'msg292': 'A4A4A4A4A4A4A4A4', 'msg293': 'A5A5A5A5A5A5A5A5', 'msg290': 'A2A2A2A2A2A2A2A2', 'msg291': 'A3A3A3A3A3A3A3A3', 'msg357': 'E5E5E5E5E5E5E5E5', 'msg356': 'E4E4E4E4E4E4E4E4', 'msg355': 'E3E3E3E3E3E3E3E3', 'msg354': 'E2E2E2E2E2E2E2E2', 'msg353': 'E1E1E1E1E1E1E1E1', 'msg352': 'E0E0E0E0E0E0E0E0', 'msg298': 'AAAAAAAAAAAAAAAA', 'msg299': 'ABABABABABABABAB', 'key214': '5656565656565656', 'key215': '5757575757575757', 'key216': '5858585858585858', 'key217': '5959595959595959', 'key210': '5252525252525252', 'key211': '5353535353535353', 'key212': '5454545454545454', 'key213': '5555555555555555', 'key218': '5A5A5A5A5A5A5A5A', 'key219': '5B5B5B5B5B5B5B5B', 'cip98': 'B160E4680F6C696F', 'cip99': 'FA0752B07D9C4AB8', 'cip96': 'E943D7568AEC0C5C', 'cip97': 'DF98C8276F54B04B', 'cip94': 'E428581186EC8F46', 'cip95': 'AEB5F5EDE22D1A36', 'cip92': 'D106FF0BED5255D7', 'cip93': 'E1652C6B138C64A5', 'cip90': 'F02B263B328E2B60', 'cip91': '9D64555A9A10B852', 'cip368': '2A2891F65BB8173C', 'key381': 'FDFDFDFDFDFDFDFD', 'cip282': '79BFA264BDA57373', 'msg120': '0000000000000080', 'msg121': '0000000000000040', 'msg122': '0000000000000020', 'msg123': '0000000000000010', 'msg124': '0000000000000008', 'msg125': '0000000000000004', 'msg126': '0000000000000002', 'msg127': '0000000000000001', 'msg128': '0000000000000000', 'msg129': '0101010101010101', 'key340': 'D4D4D4D4D4D4D4D4', 'cip283': 'C50E8FC289BBD876', 'msg351': 'DFDFDFDFDFDFDFDF', 'cip379': 'E0BA8F4488AAF97C', 'key341': 'D5D5D5D5D5D5D5D5', 'cip323': 'AE0FEEB0495932C8', 'key31': '0000000100000000', 'key30': '0000000200000000', 'key33': '0000000040000000', 'key32': '0000000080000000', 'key35': '0000000010000000', 'key34': '0000000020000000', 'key37': '0000000004000000', 'key36': '0000000008000000', 'key39': '0000000001000000', 'key38': '0000000002000000', 'cip29': '1AFA9A66A6DF92AE', 'cip28': '4F644C92E192DFED', 'cip240': 'AF531E9520994017', 'msg350': 'DEDEDEDEDEDEDEDE', 'key221': '5D5D5D5D5D5D5D5D', 'msg190': '3E3E3E3E3E3E3E3E', 'msg326': 'C6C6C6C6C6C6C6C6', 'msg266': '8A8A8A8A8A8A8A8A', 'cip241': 'B971ADE70E5C89EE', 'msg227': '6363636363636363', 'msg226': '6262626262626262', 'msg225': '6161616161616161', 'msg224': '6060606060606060', 'msg223': '5F5F5F5F5F5F5F5F', 'msg222': '5E5E5E5E5E5E5E5E', 'msg221': '5D5D5D5D5D5D5D5D', 'msg220': '5C5C5C5C5C5C5C5C', 'msg384': '0011223344556677', 'msg380': 'FCFCFCFCFCFCFCFC', 'cip299': 'ACE41A06BFA258EA', 'msg229': '6565656565656565', 'msg228': '6464646464646464', 'cip305': '24692773CB9F27FE', 'cip298': 'C4322BE19E9A5A17', 'cip304': '939618DF0AEFAAE7', 'cip356': '007B81F520E6D7DA', 'cip307': 'FCB7E4B7D702E2FB', 'cip357': '961AEB77BFC10B3C', 'cip306': '38703BA5E2315D1D', 'key148': '1414141414141414', 'key149': '1515151515151515', 'key144': '1010101010101010', 'key145': '1111111111111111', 'key146': '1212121212121212', 'key147': '1313131313131313', 'key140': '0C0C0C0C0C0C0C0C', 'key141': '0D0D0D0D0D0D0D0D', 'key142': '0E0E0E0E0E0E0E0E', 'key143': '0F0F0F0F0F0F0F0F', 'cip293': '06FC7FDE1C8389E7', 'cip303': 'F2D9D1BE74376C0C', 'msg69': '0400000000000000', 'cip302': '9527B0287B75F5A3', 'cip358': '8A8DD870C9B14AF2', 'cip359': '3CC02E14B6349B25', 'key249': '7979797979797979', 'key248': '7878787878787878', 'key247': '7777777777777777', 'key246': '7676767676767676', 'key245': '7575757575757575', 'key244': '7474747474747474', 'key243': '7373737373737373', 'key242': '7272727272727272', 'key241': '7171717171717171', 'key240': '7070707070707070', 'msg313': 'B9B9B9B9B9B9B9B9', 'msg312': 'B8B8B8B8B8B8B8B8', 'msg311': 'B7B7B7B7B7B7B7B7', 'msg310': 'B6B6B6B6B6B6B6B6', 'msg317': 'BDBDBDBDBDBDBDBD', 'msg316': 'BCBCBCBCBCBCBCBC', 'msg315': 'BBBBBBBBBBBBBBBB', 'key204': '4C4C4C4C4C4C4C4C', 'msg319': 'BFBFBFBFBFBFBFBF', 'cip294': '7A3C1F3BD60CB3D8', 'cip322': '62F44B247CF1348C', 'key379': 'FBFBFBFBFBFBFBFB', 'key307': 'B3B3B3B3B3B3B3B3', 'cip338': '82F85885D542AF58', 'cip339': '22D334D6493B3CB6', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'key319': 'BFBFBFBFBFBFBFBF', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'cip110': 'CAFFC6AC4542DE31', 'cip111': '8DD45A2DDF90796C', 'cip112': '1029D55E880EC2D0', 'cip113': '5D86CB23639DBEA9', 'cip114': '1D1CA853AE7C0C5F', 'cip115': 'CE332329248F3228', 'cip116': '8405D1ABE24FB942', 'cip117': 'E643D78090CA4207', 'cip118': '48221B9937748A23', 'cip119': 'DD7C0BBD61FAFD54', 'key289': 'A1A1A1A1A1A1A1A1', 'msg164': '2424242424242424', 'msg165': '2525252525252525', 'msg166': '2626262626262626', 'msg167': '2727272727272727', 'msg160': '2020202020202020', 'msg161': '2121212121212121', 'msg162': '2222222222222222', 'msg163': '2323232323232323', 'key355': 'E3E3E3E3E3E3E3E3', 'msg168': '2828282828282828', 'msg169': '2929292929292929', 'key348': 'DCDCDCDCDCDCDCDC', 'cip311': '9C4EA352599731ED', 'msg366': 'EEEEEEEEEEEEEEEE', 'msg367': 'EFEFEFEFEFEFEFEF', 'msg364': 'ECECECECECECECEC', 'key136': '0808080808080808', 'msg362': 'EAEAEAEAEAEAEAEA', 'msg363': 'EBEBEBEBEBEBEBEB', 'msg360': 'E8E8E8E8E8E8E8E8', 'msg361': 'E9E9E9E9E9E9E9E9', 'msg341': 'D5D5D5D5D5D5D5D5', 'msg368': 'F0F0F0F0F0F0F0F0', 'msg369': 'F1F1F1F1F1F1F1F1', 'cip204': '03481B4828FD1D04', 'cip205': 'C78FC45A1DCEA2E2', 'cip206': 'DB96D88C3460D801', 'cip207': '6C69E720F5105518', 'cip200': '63B15CADA668CE12', 'cip201': 'EACC0C1264171071', 'cip202': '9D2B8C0AC605F274', 'cip203': 'C90F2F4C98A8FB2A', 'cip208': '0D262E418BC893F3', 'cip209': '6AD84FD7848A0A5C', 'key376': 'F8F8F8F8F8F8F8F8', 'cip67': '4BD388FF6CD81D4F', 'cip66': '2E8653104F3834EA', 'cip65': 'DD7F121CA5015619', 'cip64': '95F8A5E5DD31D900', 'cip63': '8CA64DE9C1B123A7', 'cip62': '869EFD7F9F265A09', 'cip61': 'FCDB3291DE21F0C0', 'cip60': '5A594528BEBEF1CC', 'msg342': 'D6D6D6D6D6D6D6D6', 'cip277': 'D936BF54ECA8BDCE', 'cip69': '55579380D77138EF', 'cip68': '20B9E767B2FB1456', 'cip276': 'E1D23881C957B96C', 'cip365': '6932D887B2EA9C1A', 'key328': 'C8C8C8C8C8C8C8C8', 'key351': 'DFDFDFDFDFDFDFDF', 'cip364': 'D6EE30A16B2CC01E', 'key375': 'F7F7F7F7F7F7F7F7', 'cip270': '468E5218F1A37611', 'key353': 'E1E1E1E1E1E1E1E1', 'key352': 'E0E0E0E0E0E0E0E0', 'cip328': 'AFEC35B09D36315F', 'cip315': 'F91DCAD912332F3B', 'cip373': 'F5D779FCFBB28BF3', 'msg262': '8686868686868686', 'cip321': '169F7629C970C1E5', 'key374': 'F6F6F6F6F6F6F6F6', 'msg269': '8D8D8D8D8D8D8D8D', 'msg268': '8C8C8C8C8C8C8C8C', 'msg263': '8787878787878787', 'cip176': 'F47BB46273B15EB5', 'msg261': '8585858585858585', 'msg260': '8484848484848484', 'msg267': '8B8B8B8B8B8B8B8B', 'key159': '1F1F1F1F1F1F1F1F', 'msg265': '8989898989898989', 'msg264': '8888888888888888', 'key158': '1E1E1E1E1E1E1E1E', 'cip378': 'C66F54067298D4E9', 'cip374': '0FEC6BBF9B859184', 'key68': '0000000000000000', 'key69': '0000000000000000', 'key66': '0000000000000000', 'key67': '0000000000000000', 'key64': '0000000000000000', 'key65': '0000000000000000', 'key62': '0000000000000002', 'key63': '0000000000000001', 'key60': '0000000000000008', 'key61': '0000000000000004', 'key281': '9999999999999999', 'key372': 'F4F4F4F4F4F4F4F4', 'key300': 'ACACACACACACACAC', 'key138': '0A0A0A0A0A0A0A0A', 'cip384': '3EF0A891CF8ED990', 'key335': 'CFCFCFCFCFCFCFCF', 'cip350': '77A791E28AA464A5', 'key267': '8B8B8B8B8B8B8B8B', 'key266': '8A8A8A8A8A8A8A8A', 'key371': 'F3F3F3F3F3F3F3F3', 'key155': '1B1B1B1B1B1B1B1B', 'msg218': '5A5A5A5A5A5A5A5A', 'msg219': '5B5B5B5B5B5B5B5B', 'msg216': '5858585858585858', 'msg217': '5959595959595959', 'msg214': '5656565656565656', 'key154': '1A1A1A1A1A1A1A1A', 'msg212': '5454545454545454', 'msg213': '5555555555555555', 'msg210': '5252525252525252', 'msg211': '5353535353535353', 'key117': '0000000000000000', 'key116': '0000000000000000', 'key115': '0000000000000000', 'key114': '0000000000000000', 'key113': '0000000000000000', 'key112': '0000000000000000', 'msg88': '0000008000000000', 'key110': '0000000000000000', 'msg86': '0000020000000000', 'msg87': '0000010000000000', 'msg84': '0000080000000000', 'msg85': '0000040000000000', 'msg82': '0000200000000000', 'msg83': '0000100000000000', 'msg80': '0000800000000000', 'msg81': '0000400000000000', 'key302': 'AEAEAEAEAEAEAEAE', 'key370': 'F2F2F2F2F2F2F2F2', 'key360': 'E8E8E8E8E8E8E8E8', 'cip372': '9CA66E96BD08BC70', 'key303': 'AFAFAFAFAFAFAFAF', 'cip320': 'A3B357885B1E16D2', 'cip247': '89D3BF37052162E9', 'key276': '9494949494949494', 'key277': '9595959595959595', 'key274': '9292929292929292', 'key275': '9393939393939393', 'key272': '9090909090909090', 'key273': '9191919191919191', 'cip259': '161BFABD4224C162', 'cip258': '752666EB4CAB46EE', 'cip257': '907A46722ED34EC4', 'cip256': 'EFECF25C3C5DC6DB', 'cip255': '10130DA3C3A23924', 'cip254': '6F85B98DD12CB13B', 'cip253': '8AD99914B354B911', 'cip252': 'E9E40542BDDB3E9D', 'cip251': 'DEA0B796624BB5BA', 'cip250': '9626FE57596E199E', 'msg340': 'D4D4D4D4D4D4D4D4', 'msg343': 'D7D7D7D7D7D7D7D7', 'key304': 'B0B0B0B0B0B0B0B0', 'msg344': 'D8D8D8D8D8D8D8D8', 'cip225': '29932350C098DB5D', 'msg345': 'D9D9D9D9D9D9D9D9', 'msg285': '9D9D9D9D9D9D9D9D', 'cip23': '8CA64DE9C1B123A7', 'msg287': '9F9F9F9F9F9F9F9F', 'msg286': '9E9E9E9E9E9E9E9E', 'msg281': '9999999999999999', 'msg280': '9898989898989898', 'msg283': '9B9B9B9B9B9B9B9B', 'cip22': 'C71516C29C75D170', 'msg322': 'C2C2C2C2C2C2C2C2', 'msg323': 'C3C3C3C3C3C3C3C3', 'msg320': 'C0C0C0C0C0C0C0C0', 'msg321': 'C1C1C1C1C1C1C1C1', 'msg289': 'A1A1A1A1A1A1A1A1', 'cip21': '25610288924511C2', 'msg324': 'C4C4C4C4C4C4C4C4', 'msg325': 'C5C5C5C5C5C5C5C5', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'cip27': 'A81FBD448F9E522F', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'cip26': 'EE371483714C02EA', 'key9': '0040000000000000', 'key8': '0080000000000000', 'cip25': 'C22F0A294A71F29F', 'key3': '1000000000000000', 'key2': '2000000000000000', 'key1': '4000000000000000', 'key0': '8000000000000000', 'key7': '0100000000000000', 'key6': '0200000000000000', 'key5': '0400000000000000', 'key4': '0800000000000000', 'key311': 'B7B7B7B7B7B7B7B7', 'msg376': 'F8F8F8F8F8F8F8F8', 'msg139': '0B0B0B0B0B0B0B0B', 'msg138': '0A0A0A0A0A0A0A0A', 'msg137': '0909090909090909', 'msg136': '0808080808080808', 'msg135': '0707070707070707', 'msg134': '0606060606060606', 'msg133': '0505050505050505', 'msg132': '0404040404040404', 'msg131': '0303030303030303', 'msg130': '0202020202020202', 'cip154': '69E51488403EF4C3', 'cip155': 'FF847E0ADF192825', 'cip156': '521B7FB3B41BB791', 'cip157': '26059A6A0F3F6B35', 'cip150': '2006E716C4252D6D', 'cip151': '452C1197422469F8', 'cip152': 'C33FD1EB49CB64DA', 'cip153': '7572278F364EB50D', 'cip158': 'F24A8D2231C77538', 'cip159': '4FD96EC0D3304EF6', 'cip348': 'D0CFBB937CEDBFB5', 'key22': '0000020000000000', 'key23': '0000010000000000', 'key20': '0000080000000000', 'key21': '0000040000000000', 'cip38': '5570530829705592', 'cip39': '8CA64DE9C1B123A7', 'key24': '0000008000000000', 'key25': '0000004000000000', 'cip34': 'B7265F7F447AC6F3', 'cip35': '9DB73B3C0D163F54', 'cip36': '8181B65BABF4A975', 'cip37': '93C9B64042EAA240', 'cip30': 'B3C1CC715CB879D8', 'cip31': '8CA64DE9C1B123A7', 'cip32': '19D032E64AB0BD8B', 'cip33': '3CFAA7A7DC8720DC', 'cip218': 'F9038021E37C7618', 'cip344': 'DEF6BDA6CABF9547', 'key361': 'E9E9E9E9E9E9E9E9', 'msg252': '7C7C7C7C7C7C7C7C', 'msg253': '7D7D7D7D7D7D7D7D', 'msg250': '7A7A7A7A7A7A7A7A', 'msg251': '7B7B7B7B7B7B7B7B', 'msg256': '8080808080808080', 'msg257': '8181818181818181', 'msg254': '7E7E7E7E7E7E7E7E', 'msg255': '7F7F7F7F7F7F7F7F', 'msg258': '8282828282828282', 'msg259': '8383838383838383', 'msg334': 'CECECECECECECECE', 'cip376': '39ADBDDB7363090D', 'key362': 'EAEAEAEAEAEAEAEA', 'key294': 'A6A6A6A6A6A6A6A6', 'key97': '0000000000000000', 'key96': '0000000000000000', 'key95': '0000000000000000', 'key94': '0000000000000000', 'key93': '0000000000000000', 'key92': '0000000000000000', 'key91': '0000000000000000', 'key90': '0000000000000000', 'key153': '1919191919191919', 'key152': '1818181818181818', 'key151': '1717171717171717', 'key150': '1616161616161616', 'key157': '1D1D1D1D1D1D1D1D', 'key156': '1C1C1C1C1C1C1C1C', 'key99': '0000000000000000', 'key98': '0000000000000000', 'cip327': '76BF084C1535A6C6', 'key238': '6E6E6E6E6E6E6E6E', 'key239': '6F6F6F6F6F6F6F6F', 'cip326': '1DD4E65AAF7988B4', 'key232': '6868686868686868', 'key233': '6969696969696969', 'key230': '6666666666666666', 'key231': '6767676767676767', 'key236': '6C6C6C6C6C6C6C6C', 'key237': '6D6D6D6D6D6D6D6D', 'key234': '6A6A6A6A6A6A6A6A', 'key235': '6B6B6B6B6B6B6B6B', 'cip316': '46E7EF47323A701D', 'cip324': '72DAF2A7C9EA6803', 'cip317': '8DB18CCD9692F758', 'cip288': '10EDB8977B348B35', 'cip314': '10ADB6E2AB972BBE', 'cip289': '6446C5769D8409A0', 'msg77': '0004000000000000', 'msg76': '0008000000000000', 'msg75': '0010000000000000', 'msg74': '0020000000000000', 'msg73': '0040000000000000', 'msg72': '0080000000000000', 'msg71': '0100000000000000', 'msg70': '0200000000000000', 'cip284': 'A399D3D63E169FA9', 'cip285': '4B8919B667BD53AB', 'cip286': 'D66CDCAF3F6724A2', 'cip287': 'E40E81FF3F618340', 'cip280': '072E328C984DE4A2', 'cip281': '1440B7EF9E63D3AA', 'msg79': '0001000000000000', 'msg78': '0002000000000000', 'cip42': '7A9BE42F2009A892', 'cip375': 'EF88D2BF052DBDA8', 'cip310': '1533F3ED9BE8EF8E', 'key128': '0000000000000000', 'key129': '0101010101010101', 'key126': '0000000000000000', 'key127': '0000000000000000', 'key124': '0000000000000000', 'key125': '0000000000000000', 'key122': '0000000000000000', 'key123': '0000000000000000', 'key120': '0000000000000000', 'key121': '0000000000000000', 'cip266': '301085E3FDE724E1', 'cip267': 'EF4E3E8F1CC6706E', 'cip264': '762C40C8FADE9D16', 'cip265': '2453CF5D5BF4E463', 'cip262': 'CBBF6EEFE6529728', 'cip263': '7F26DCF425149823', 'cip109': 'EA51D3975595B86B', 'cip108': '8B54536F2F3E64A8', 'cip107': '866ECEDD8072BB0E', 'cip106': '79E90DBC98F92CCA', 'cip105': 'AB6A20C0620D1C6F', 'cip104': '25EB5FC3F8CF0621', 'cip103': '4D49DB1532919C9F', 'cip102': '814EEB3B91D90726', 'cip101': '5E0905517BB59BCF', 'cip100': 'CA3A2B036DBC8502', 'msg173': '2D2D2D2D2D2D2D2D', 'msg172': '2C2C2C2C2C2C2C2C', 'msg171': '2B2B2B2B2B2B2B2B', 'msg170': '2A2A2A2A2A2A2A2A', 'msg177': '3131313131313131', 'msg176': '3030303030303030', 'msg175': '2F2F2F2F2F2F2F2F', 'msg174': '2E2E2E2E2E2E2E2E', 'msg179': '3333333333333333', 'msg178': '3232323232323232', 'msg375': 'F7F7F7F7F7F7F7F7', 'msg374': 'F6F6F6F6F6F6F6F6', 'msg377': 'F9F9F9F9F9F9F9F9', 'msg215': '5757575757575757', 'msg371': 'F3F3F3F3F3F3F3F3', 'msg370': 'F2F2F2F2F2F2F2F2', 'msg373': 'F5F5F5F5F5F5F5F5', 'msg372': 'F4F4F4F4F4F4F4F4', 'msg327': 'C7C7C7C7C7C7C7C7', 'key349': 'DDDDDDDDDDDDDDDD', 'msg379': 'FBFBFBFBFBFBFBFB', 'msg378': 'FAFAFAFAFAFAFAFA', 'cip198': '48019C59E39B90C5', 'cip199': '0544083FB902D8C0', 'cip211': '1155392E877F42A9', 'cip210': 'C365CB35B34B6114', 'cip217': '85C3E0C429F34C27', 'cip216': '1BEA27FFB72457B7', 'cip215': 'D90772CF3F047CFD', 'cip214': '2B1FF5610A19270C', 'cip190': 'E96089D6368F3E1A', 'cip191': '5C4CA877A4E1E92D', 'cip192': '6D55DDBC8DEA95FF', 'cip193': '19DF84AC95551003', 'cip194': '724E7332696D08A7', 'cip195': 'B91810B8CDC58FE2', 'cip196': '06E23526EDCCD0C4', 'cip197': 'EF52491D5468D441', 'cip70': '6CC5DEFAAF04512F', 'cip71': '0D9F279BA5D87260', 'cip72': 'D9031B0271BD5A0A', 'cip73': '424250B37C3DD951', 'cip74': 'B8061B7ECD9A21E5', 'cip75': 'F15D0F286B65BD28', 'cip76': 'ADD0CC8D6E5DEBA1', 'cip77': 'E6D5F82752AD63D1', 'cip78': 'ECBFE3BD3F591A5E', 'cip79': 'F356834379D165CD', 'key368': 'F0F0F0F0F0F0F0F0', 'msg381': 'FDFDFDFDFDFDFDFD', 'key292': 'A4A4A4A4A4A4A4A4', 'msg382': 'FEFEFEFEFEFEFEFE', 'key298': 'AAAAAAAAAAAAAAAA', 'key333': 'CDCDCDCDCDCDCDCD', 'key299': 'ABABABABABABABAB', 'msg106': '0000000000200000', 'msg107': '0000000000100000', 'msg104': '0000000000800000', 'msg105': '0000000000400000', 'msg102': '0000000002000000', 'key111': '0000000000000000', 'msg100': '0000000008000000', 'msg101': '0000000004000000', 'msg89': '0000004000000000', 'key369': 'F1F1F1F1F1F1F1F1', 'msg108': '0000000000080000', 'msg109': '0000000000040000', 'key293': 'A5A5A5A5A5A5A5A5', 'key295': 'A7A7A7A7A7A7A7A7', 'key332': 'CCCCCCCCCCCCCCCC', 'key296': 'A8A8A8A8A8A8A8A8', 'msg247': '7777777777777777', 'key297': 'A9A9A9A9A9A9A9A9', 'key347': 'DBDBDBDBDBDBDBDB', 'key290': 'A2A2A2A2A2A2A2A2', 'cip383': '7359B2163E4EDC58', 'key344': 'D8D8D8D8D8D8D8D8', 'key291': 'A3A3A3A3A3A3A3A3', 'key345': 'D9D9D9D9D9D9D9D9', 'key119': '0000000000000000', 'msg314': 'BABABABABABABABA', 'key342': 'D6D6D6D6D6D6D6D6', 'key118': '0000000000000000', 'cip332': 'FBCD12C790D21CD7', 'key343': 'D7D7D7D7D7D7D7D7', 'key59': '0000000000000010', 'key58': '0000000000000020', 'cip260': '215F48699DB44A45', 'key53': '0000000000000400', 'key52': '0000000000000800', 'key51': '0000000000001000', 'key50': '0000000000002000', 'key57': '0000000000000040', 'key56': '0000000000000080', 'key55': '0000000000000100', 'key54': '0000000000000200', 'cip370': '1C0A9280EECF5D48', 'cip369': '5D1B8FAF7839494B', 'cip20': '882BFF0AA01A0B87', 'key354': 'E2E2E2E2E2E2E2E2', 'key356': 'E4E4E4E4E4E4E4E4', 'msg103': '0000000001000000', 'msg209': '5151515151515151', 'msg208': '5050505050505050', 'key269': '8D8D8D8D8D8D8D8D', 'msg205': '4D4D4D4D4D4D4D4D', 'msg204': '4C4C4C4C4C4C4C4C', 'msg207': '4F4F4F4F4F4F4F4F', 'msg206': '4E4E4E4E4E4E4E4E', 'msg201': '4949494949494949', 'msg200': '4848484848484848', 'msg203': '4B4B4B4B4B4B4B4B', 'msg202': '4A4A4A4A4A4A4A4A', 'key162': '2222222222222222', 'key163': '2323232323232323', 'key160': '2020202020202020', 'key161': '2121212121212121', 'key166': '2626262626262626', 'key167': '2727272727272727', 'key164': '2424242424242424', 'key165': '2525252525252525', 'key283': '9B9B9B9B9B9B9B9B', 'key282': '9A9A9A9A9A9A9A9A', 'key168': '2828282828282828', 'key169': '2929292929292929', 'key287': '9F9F9F9F9F9F9F9F', 'key286': '9E9E9E9E9E9E9E9E', 'key285': '9D9D9D9D9D9D9D9D', 'key284': '9C9C9C9C9C9C9C9C', 'cip377': 'C0AEAF445F7E2A7A', 'cip279': '6118FCEBD407281D', 'cip330': '4DA91CB4124B67FE', 'cip366': '0BFC865461F13ACC', 'msg245': '7575757575757575', 'key264': '8888888888888888', 'cip228': '3AF1703D76442789', 'cip229': '86405D9B425A8C8C', 'key261': '8585858585858585', 'key260': '8484848484848484', 'key263': '8787878787878787', 'key262': '8686868686868686', 'cip222': '9BB93A89627BF65F', 'cip223': 'EF12476884CB74CA', 'cip220': '4927ACC8CE45ECE7', 'cip221': 'E812EE6E3572985C', 'cip226': 'B476E6499842AC54', 'cip227': '5C662C29C1E96056', 'cip224': '1BF17E00C09E7CBF', 'msg147': '1313131313131313', 'msg318': 'BEBEBEBEBEBEBEBE', 'cip278': 'A020003C5554F34C', 'cip331': '2DABFEB346794C3D', 'msg244': '7474747474747474', 'msg339': 'D3D3D3D3D3D3D3D3', 'msg338': 'D2D2D2D2D2D2D2D2', 'key310': 'B6B6B6B6B6B6B6B6', 'key270': '8E8E8E8E8E8E8E8E', 'msg331': 'CBCBCBCBCBCBCBCB', 'msg330': 'CACACACACACACACA', 'msg333': 'CDCDCDCDCDCDCDCD', 'key271': '8F8F8F8F8F8F8F8F', 'msg335': 'CFCFCFCFCFCFCFCF', 'msg328': 'C8C8C8C8C8C8C8C8', 'msg337': 'D1D1D1D1D1D1D1D1', 'msg336': 'D0D0D0D0D0D0D0D0', 'key377': 'F9F9F9F9F9F9F9F9', 'cip140': '934316AE443CF08B', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': 'E6207B536AAAEFFC', 'cip319': '92AA224372156A00', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'msg20': '0000000000000000', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'cip136': '10772D40FAD24257', 'cip137': 'F0139440647A6E7B', 'cip134': '3F5150BBA081D585', 'cip135': 'C65242248C9CF6F2', 'cip132': '1F4570BB77550683', 'cip133': '3990ABF98D672B16', 'cip130': 'E127C2B61D98E6E2', 'cip131': '984C91D78A269CE3', 'key373': 'F5F5F5F5F5F5F5F5', 'key229': '6565656565656565', 'cip352': 'B026913F2CCFB109', 'cip138': '0A288603044D740C', 'cip139': '6359916942F7438F', 'cip371': '6CBCE951BBC30F74', 'key278': '9696969696969696', 'cip380': '67B36E2875D9631C', 'key279': '9797979797979797', 'key44': '0000000000080000', 'msg148': '1414141414141414', 'msg149': '1515151515151515', 'key45': '0000000000040000', 'msg142': '0E0E0E0E0E0E0E0E', 'msg143': '0F0F0F0F0F0F0F0F', 'msg140': '0C0C0C0C0C0C0C0C', 'msg141': '0D0D0D0D0D0D0D0D', 'msg146': '1212121212121212', 'key46': '0000000000020000', 'msg144': '1010101010101010', 'msg145': '1111111111111111', 'cip143': 'D5D76E09A447E8C3', 'cip142': 'A2E4705087C6B6B4', 'cip141': 'E3F56D7F1130A2B7', 'key47': '0000000000010000', 'cip147': '2911CF5E94D33FE1', 'cip146': '96CD27784D1563E5', 'cip145': 'F40379AB9E0EC533', 'cip144': 'DD7515F2BFC17F85', 'key40': '0000000000800000', 'cip149': '701AA63832905A92', 'cip148': '377B7F7CA3E5BBB3', 'key220': '5C5C5C5C5C5C5C5C', 'key203': '4B4B4B4B4B4B4B4B', 'msg346': 'DADADADADADADADA', 'key41': '0000000000400000'} |
dict_tdes2 = {'msg418': 'E2E2E2E2E2E2E2E2', 'cip10': '7B1C09D39C205B7B', 'key339': '93939393939393939393939393939393', 'cip410': 'C1AA16689EE1B482', 'msg415': 'DFDFDFDFDFDFDFDF', 'msg416': 'E0E0E0E0E0E0E0E0', 'cip11': '7C940466050ADBAE', 'msg410': 'DADADADADADADADA', 'msg411': 'DBDBDBDBDBDBDBDB', 'msg412': 'DCDCDCDCDCDCDCDC', 'msg284': '5C5C5C5C5C5C5C5C', 'cip49': 'EE8DC918A74545F1', 'cip48': 'F3B2D1D19B852861', 'msg448': '0011223344556677', 'cip382': 'E6207B536AAAEFFC', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'cip213': '701AA63832905A92', 'key338': '92929292929292929292929292929292', 'cip212': '377B7F7CA3E5BBB3', 'key331': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key202': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg414': 'DEDEDEDEDEDEDEDE', 'key330': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key417': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key337': '91919191919191919191919191919191', 'key336': '90909090909090909090909090909090', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg249': '3939393939393939', 'msg248': '3838383838383838', 'cip401': 'CF3E4F3E026E2C8E', 'key315': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'cip416': 'B026913F2CCFB109', 'msg417': 'E1E1E1E1E1E1E1E1', 'cip355': 'B6D8533731BA1318', 'msg329': '8989898989898989', 'msg383': 'BFBFBFBFBFBFBFBF', 'cip292': '3AF1703D76442789', 'msg413': 'DDDDDDDDDDDDDDDD', 'key418': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'cip219': 'FF847E0ADF192825', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'msg332': '8C8C8C8C8C8C8C8C', 'msg282': '5A5A5A5A5A5A5A5A', 'key288': '60606060606060606060606060606060', 'key309': '75757575757575757575757575757575', 'key350': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key409': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'cip354': '17ED1191CA8D67A3', 'key180': '00000000000000000000000000000000', 'key181': '00000000000000000000000000000000', 'key182': '00000000000000000000000000000000', 'key183': '00000000000000000000000000000000', 'key184': '00000000000000000000000000000000', 'key185': '00000000000000000000000000000000', 'key186': '00000000000000000000000000000000', 'key187': '00000000000000000000000000000000', 'key188': '00000000000000000000000000000000', 'key189': '00000000000000000000000000000000', 'key223': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key222': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key225': '21212121212121212121212121212121', 'key224': '20202020202020202020202020202020', 'key227': '23232323232323232323232323232323', 'key226': '22222222222222222222222222222222', 'cip41': 'D1CF3B57F6294D0E', 'cip40': 'E21113D2C6870FBE', 'key440': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'cip43': '198774D2FC7A641B', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '0000000000000000', 'msg65': '0000000000000000', 'msg66': '0000000000000000', 'msg67': '0000000000000000', 'msg68': '0000000000000000', 'cip45': 'A854715C1EE8B311', 'cip291': '5C662C29C1E96056', 'cip290': 'B476E6499842AC54', 'cip297': '5FDFFFC3AAAB0CB3', 'key201': '09090909090909090909090909090909', 'cip295': 'F8D1CD7367B21B5D', 'cip44': 'F3AC68FDC060AE6E', 'msg403': 'D3D3D3D3D3D3D3D3', 'key200': '08080808080808080808080808080808', 'key139': '00000000000000000000000000000000', 'cip47': '8CA64DE9C1B123A7', 'key135': '00000000000000000000000000000000', 'key134': '00000000000000000000000000000000', 'key137': '00000000000000000000000000000000', 'cip46': 'D140934E0D5171DB', 'key131': '00000000000000000000000000000000', 'key130': '00000000000000000000000000000000', 'key133': '00000000000000000000000000000000', 'key132': '00000000000000000000000000000000', 'cip275': '1155392E877F42A9', 'cip274': 'C365CB35B34B6114', 'cip178': '1D1CA853AE7C0C5F', 'cip179': 'CE332329248F3228', 'cip271': '6C69E720F5105518', 'key205': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'cip273': '6AD84FD7848A0A5C', 'cip272': '0D262E418BC893F3', 'cip172': '8B54536F2F3E64A8', 'cip173': 'EA51D3975595B86B', 'cip170': '79E90DBC98F92CCA', 'cip171': '866ECEDD8072BB0E', 'key26': '00000020000000000000000000000000', 'cip177': '5D86CB23639DBEA9', 'cip174': 'CAFFC6AC4542DE31', 'cip175': '8DD45A2DDF90796C', 'cip296': '9EE703142BF8D7E2', 'key280': '58585858585858585858585858585858', 'key392': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg188': '0000000000000008', 'msg189': '0000000000000004', 'msg186': '0000000000000020', 'msg187': '0000000000000010', 'msg184': '0000000000000080', 'msg185': '0000000000000040', 'msg182': '0000000000000200', 'msg183': '0000000000000100', 'msg180': '0000000000000800', 'msg181': '0000000000000400', 'cip187': '5B711BC4CEEBF2EE', 'cip186': '0953E2258E8E90A1', 'cip185': 'E07C30D7E4E26E12', 'cip184': '2FBC291A570DB5C4', 'cip183': 'DD7C0BBD61FAFD54', 'cip182': '48221B9937748A23', 'cip181': 'E643D78090CA4207', 'cip180': '8405D1ABE24FB942', 'msg348': '9C9C9C9C9C9C9C9C', 'msg349': '9D9D9D9D9D9D9D9D', 'key27': '00000010000000000000000000000000', 'cip189': 'D2FD8867D50D2DFE', 'cip188': 'CC083F1E6D9E85F6', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'key378': 'BABABABABABABABABABABABABABABABA', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip402': '82F85885D542AF58', 'msg444': 'FCFCFCFCFCFCFCFC', 'cip89': 'E74CA11808ED17A3', 'cip88': '8CCFCD2418E85750', 'cip85': '78C8CBCAC3B7FD35', 'cip84': '482863934D17804B', 'cip87': '8CA64DE9C1B123A7', 'cip86': '7B8B051E6C8AA8B6', 'cip81': 'D26D9656F91A1EE2', 'cip80': 'D47ADF8B94CACA7A', 'cip83': 'D19BA61DD59CE9A1', 'cip82': 'EE31B8E767C9B337', 'key318': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg358': 'A6A6A6A6A6A6A6A6', 'cip403': '22D334D6493B3CB6', 'msg115': '0000000000000000', 'msg114': '0000000000000000', 'msg117': '0000000000000000', 'msg116': '0000000000000000', 'msg111': '0000000000000000', 'msg110': '0000000000000000', 'msg113': '0000000000000000', 'msg112': '0000000000000000', 'msg119': '0000000000000000', 'msg118': '0000000000000000', 'cip381': '8DB18CCD9692F758', 'msg399': 'CFCFCFCFCFCFCFCF', 'cip405': '2352BCC708ADC7E9', 'key209': '11111111111111111111111111111111', 'key308': '74747474747474747474747474747474', 'msg447': 'FFFFFFFFFFFFFFFF', 'msg446': 'FEFEFEFEFEFEFEFE', 'msg445': 'FDFDFDFDFDFDFDFD', 'msg431': 'EFEFEFEFEFEFEFEF', 'msg443': 'FBFBFBFBFBFBFBFB', 'msg442': 'FAFAFAFAFAFAFAFA', 'msg441': 'F9F9F9F9F9F9F9F9', 'msg440': 'F8F8F8F8F8F8F8F8', 'cip261': 'EF52491D5468D441', 'key367': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'cip16': 'A286DE6C7ABCE306', 'cip17': 'A19DB1122136903C', 'cip14': '1885BEE3774FF50B', 'cip15': '8CA64DE9C1B123A7', 'cip12': '7B6456C45945CCA3', 'cip13': '076B2C8A7ADDFE68', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'cip345': '1440B7EF9E63D3AA', 'key208': '10101010101010101010101010101010', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip18': 'A77F2F3085DC2D16', 'cip19': 'B39C1E6C3C65E45A', 'cip333': 'BEA27E3795063C89', 'cip347': 'C50E8FC289BBD876', 'msg428': 'ECECECECECECECEC', 'cip329': '2453CF5D5BF4E463', 'cip427': 'C88480835C1A444C', 'msg347': '9B9B9B9B9B9B9B9B', 'cip335': '50ACE16ADF66BFE8', 'cip349': '4B8919B667BD53AB', 'key414': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip336': 'EEA24369A19F6937', 'cip353': '6446C5769D8409A0', 'msg288': '6060606060606060', 'cip337': '6050D369017B6E62', 'cip313': '3440911019AD68D7', 'cip408': 'DEF6BDA6CABF9547', 'msg241': '3131313131313131', 'key265': '49494949494949494949494949494949', 'msg365': 'ADADADADADADADAD', 'key416': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key326': '86868686868686868686868686868686', 'msg240': '3030303030303030', 'msg243': '3333333333333333', 'cip362': 'C4322BE19E9A5A17', 'msg238': '2E2E2E2E2E2E2E2E', 'msg239': '2F2F2F2F2F2F2F2F', 'msg242': '3232323232323232', 'key206': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'cip407': 'EE5E9FD70CEF00E9', 'msg230': '2626262626262626', 'msg231': '2727272727272727', 'msg232': '2828282828282828', 'msg233': '2929292929292929', 'msg234': '2A2A2A2A2A2A2A2A', 'msg235': '2B2B2B2B2B2B2B2B', 'msg236': '2C2C2C2C2C2C2C2C', 'msg237': '2D2D2D2D2D2D2D2D', 'key171': '00000000000000000000000000000000', 'key170': '00000000000000000000000000000000', 'key173': '00000000000000000000000000000000', 'key172': '00000000000000000000000000000000', 'key175': '00000000000000000000000000000000', 'key174': '00000000000000000000000000000000', 'key177': '00000000000000000000000000000000', 'key176': '00000000000000000000000000000000', 'key179': '00000000000000000000000000000000', 'key178': '00000000000000000000000000000000', 'msg246': '3636363636363636', 'cip361': 'D4E00A9EF5E6D8F3', 'cip396': 'FBCD12C790D21CD7', 'key438': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key359': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'cip404': '47E9CB3E3154D673', 'key439': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'cip239': 'C4427B31AC61973B', 'cip238': '30C1B0C1FD91D371', 'key252': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key253': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key254': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key255': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key256': '40404040404040404040404040404040', 'key257': '41414141414141414141414141414141', 'cip231': '2109425935406AB8', 'cip230': 'B2522FB5F158F0DF', 'cip233': '73F0C45F379FE67F', 'cip232': '11A16028F310FF16', 'cip235': 'B81634C1CEAB298C', 'cip234': 'DCAD4338F7523816', 'cip237': '7D07A77A2ABD50A7', 'cip236': 'DD2CCB29B6C4C349', 'msg304': '7070707070707070', 'msg305': '7171717171717171', 'msg306': '7272727272727272', 'msg307': '7373737373737373', 'msg300': '6C6C6C6C6C6C6C6C', 'msg301': '6D6D6D6D6D6D6D6D', 'msg302': '6E6E6E6E6E6E6E6E', 'msg303': '6F6F6F6F6F6F6F6F', 'cip415': 'E7562A7F56FF4966', 'msg308': '7474747474747474', 'msg309': '7575757575757575', 'key415': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'cip414': '77A791E28AA464A5', 'key382': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key383': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key380': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key268': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key386': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key387': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key384': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key385': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'cip367': 'F2D9D1BE74376C0C', 'key388': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key389': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'cip394': '4DA91CB4124B67FE', 'key334': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip334': '468E5218F1A37611', 'cip309': 'CFEF7A1C0218DB1E', 'cip308': '10B1C170E3398F91', 'cip363': 'ACE41A06BFA258EA', 'cip418': 'D9FA6595F0C094CA', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'EF840B00DA448234', 'cip124': 'DF4A77123610F2B1', 'cip127': '8CA64DE9C1B123A7', 'cip126': 'FFCCC32A699CB7C5', 'cip121': '502CD2BF4FC0B793', 'cip120': '46F5E7077CB869A8', 'cip123': '52710C55818FAF52', 'cip122': 'C0278007230589E4', 'cip129': 'DD7F121CA5015619', 'cip128': '95F8A5E5DD31D900', 'cip438': '0FEC6BBF9B859184', 'key363': 'ABABABABABABABABABABABABABABABAB', 'cip409': '4DADD04A0EA70F20', 'key364': 'ACACACACACACACACACACACACACACACAC', 'key413': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key323': '83838383838383838383838383838383', 'cip268': '03481B4828FD1D04', 'key365': 'ADADADADADADADADADADADADADADADAD', 'msg159': '0000000100000000', 'msg158': '0000000200000000', 'msg391': 'C7C7C7C7C7C7C7C7', 'key366': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg151': '0000010000000000', 'msg150': '0000020000000000', 'msg153': '0000004000000000', 'msg152': '0000008000000000', 'msg155': '0000001000000000', 'msg154': '0000002000000000', 'msg157': '0000000400000000', 'msg156': '0000000800000000', 'cip248': '8940F7B3EACA5939', 'key357': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'cip249': 'E22B19A55086774B', 'key410': 'DADADADADADADADADADADADADADADADA', 'cip269': 'C78FC45A1DCEA2E2', 'key443': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg390': 'C6C6C6C6C6C6C6C6', 'msg409': 'D9D9D9D9D9D9D9D9', 'msg408': 'D8D8D8D8D8D8D8D8', 'cip301': 'A4C9A0D04D3280CD', 'msg402': 'D2D2D2D2D2D2D2D2', 'msg401': 'D1D1D1D1D1D1D1D1', 'msg400': 'D0D0D0D0D0D0D0D0', 'key301': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg406': 'D6D6D6D6D6D6D6D6', 'msg405': 'D5D5D5D5D5D5D5D5', 'msg404': 'D4D4D4D4D4D4D4D4', 'cip58': 'F75ACF1692C115D2', 'cip59': '5A448A95522AF894', 'key207': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'cip52': 'C55C05072C072CBE', 'cip53': 'FB4808530D49FFD3', 'cip50': '99B2175DCE3D348C', 'cip51': '73AE9A4A6376637E', 'cip56': 'A38DC58A5AEF3CAA', 'cip57': '4F29AB3449FBA969', 'cip54': '3C1B66BD5170F2A1', 'cip55': '8CA64DE9C1B123A7', 'cip4': '794FE1DC2F80CD38', 'cip5': '15052BCDF21A1F1E', 'cip6': '3A830D0BDA044EBB', 'cip7': '8CA64DE9C1B123A7', 'cip0': 'FAFD5084374FCE34', 'cip1': '60CC37B7B537A1DC', 'cip2': 'BE3E7304FE92C2BC', 'cip3': '49F9E7A60C406DBF', 'key306': '72727272727272727272727272727272', 'cip8': '0C1971C6874548E2', 'cip9': '52C2F3FF100668BC', 'key358': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'cip325': '69D901A8A691E661', 'key329': '89898989898989898989898989898989', 'cip300': '0F4FF4D9BC7E2244', 'key250': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'cip391': '76BF084C1535A6C6', 'msg278': '5656565656565656', 'msg279': '5757575757575757', 'key251': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg274': '5252525252525252', 'msg275': '5353535353535353', 'msg276': '5454545454545454', 'msg277': '5555555555555555', 'msg270': '4E4E4E4E4E4E4E4E', 'msg271': '4F4F4F4F4F4F4F4F', 'msg272': '5050505050505050', 'msg273': '5151515151515151', 'msg419': 'E3E3E3E3E3E3E3E3', 'msg359': 'A7A7A7A7A7A7A7A7', 'cip421': '961AEB77BFC10B3C', 'cip312': '80D9230BDAEB67DC', 'key324': '84848484848484848484848484848484', 'cip351': 'E40E81FF3F618340', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key325': '85858585858585858585858585858585', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'key258': '42424242424242424242424242424242', 'key327': '87878787878787878787878787878787', 'key259': '43434343434343434343434343434343', 'key320': '80808080808080808080808080808080', 'key346': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key313': '79797979797979797979797979797979', 'key321': '81818181818181818181818181818181', 'cip360': '26F88D30C0FB8302', 'key312': '78787878787878787878787878787878', 'key305': '71717171717171717171717171717171', 'key322': '82828282828282828282828282828282', 'key199': '07070707070707070707070707070707', 'key198': '06060606060606060606060606060606', 'key197': '05050505050505050505050505050505', 'key196': '04040404040404040404040404040404', 'key195': '03030303030303030303030303030303', 'key194': '02020202020202020202020202020202', 'key193': '01010101010101010101010101010101', 'key192': '00000000000000000000000000000000', 'key191': '00000000000000000000000000000000', 'key190': '00000000000000000000000000000000', 'msg295': '6767676767676767', 'cip24': 'E788FF69D915395A', 'key317': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key316': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'cip341': 'D936BF54ECA8BDCE', 'cip340': 'E1D23881C957B96C', 'cip343': '6118FCEBD407281D', 'cip342': 'A020003C5554F34C', 'msg99': '0000000000000000', 'msg98': '0000000000000000', 'key314': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'cip346': '79BFA264BDA57373', 'msg95': '0000000000000000', 'msg94': '0000000000000000', 'msg97': '0000000000000000', 'msg96': '0000000000000000', 'msg91': '0000000000000000', 'msg90': '0000000000000000', 'msg93': '0000000000000000', 'msg92': '0000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'cip169': 'AB6A20C0620D1C6F', 'cip168': '25EB5FC3F8CF0621', 'cip242': 'AC978C247863388F', 'cip243': '0432ED386F2DE328', 'cip244': 'D254014CB986B3C2', 'cip245': 'B256E34BEDB49801', 'cip246': '37F8759EB77E7BFC', 'key228': '24242424242424242424242424242424', 'cip161': 'DF98C8276F54B04B', 'cip160': 'E943D7568AEC0C5C', 'cip163': 'FA0752B07D9C4AB8', 'cip162': 'B160E4680F6C696F', 'cip165': '5E0905517BB59BCF', 'cip164': 'CA3A2B036DBC8502', 'cip167': '4D49DB1532919C9F', 'cip166': '814EEB3B91D90726', 'msg199': '0707070707070707', 'msg198': '0606060606060606', 'msg195': '0303030303030303', 'msg194': '0202020202020202', 'msg197': '0505050505050505', 'msg196': '0404040404040404', 'msg191': '0000000000000001', 'key28': '00000008000000000000000000000000', 'msg193': '0101010101010101', 'msg192': '0000000000000000', 'msg296': '6868686868686868', 'msg297': '6969696969696969', 'msg294': '6666666666666666', 'key29': '00000004000000000000000000000000', 'msg292': '6464646464646464', 'msg293': '6565656565656565', 'msg290': '6262626262626262', 'msg291': '6363636363636363', 'msg357': 'A5A5A5A5A5A5A5A5', 'msg356': 'A4A4A4A4A4A4A4A4', 'msg355': 'A3A3A3A3A3A3A3A3', 'msg354': 'A2A2A2A2A2A2A2A2', 'msg353': 'A1A1A1A1A1A1A1A1', 'msg352': 'A0A0A0A0A0A0A0A0', 'msg298': '6A6A6A6A6A6A6A6A', 'msg299': '6B6B6B6B6B6B6B6B', 'key214': '16161616161616161616161616161616', 'key215': '17171717171717171717171717171717', 'key216': '18181818181818181818181818181818', 'key217': '19191919191919191919191919191919', 'key210': '12121212121212121212121212121212', 'key211': '13131313131313131313131313131313', 'key212': '14141414141414141414141414141414', 'key213': '15151515151515151515151515151515', 'key218': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key219': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'cip389': '4FB5D5536DA544F4', 'cip98': '83E55C4A19ABCB56', 'cip99': '96E6A993443B9DD4', 'cip96': 'A9FE6341C8621918', 'cip97': 'CE99FD5D50B22CEF', 'cip94': '7E6C8995AA52D298', 'cip95': '8CA64DE9C1B123A7', 'cip92': 'AD5F11ED913E918C', 'cip93': '3CE4B119BC1FC701', 'cip90': '0A634C7A69897F35', 'cip91': '6C2C0F27E973CE29', 'cip368': '939618DF0AEFAAE7', 'key381': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'cip398': '9AA159D7309DA7A0', 'cip435': '6CBCE951BBC30F74', 'cip282': 'F9038021E37C7618', 'msg120': '0000000000000000', 'msg121': '0000000000000000', 'msg122': '0000000000000000', 'msg123': '0000000000000000', 'msg124': '0000000000000000', 'msg125': '0000000000000000', 'msg126': '0000000000000000', 'msg127': '0000000000000000', 'msg128': '8000000000000000', 'msg129': '4000000000000000', 'key340': '94949494949494949494949494949494', 'cip399': '0B844B9D8C4EA14A', 'cip434': '1C0A9280EECF5D48', 'cip283': '35BC6FF838DBA32F', 'msg432': 'F0F0F0F0F0F0F0F0', 'msg433': 'F1F1F1F1F1F1F1F1', 'msg430': 'EEEEEEEEEEEEEEEE', 'msg351': '9F9F9F9F9F9F9F9F', 'key424': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'cip379': 'F91DCAD912332F3B', 'msg434': 'F2F2F2F2F2F2F2F2', 'msg435': 'F3F3F3F3F3F3F3F3', 'msg438': 'F6F6F6F6F6F6F6F6', 'msg439': 'F7F7F7F7F7F7F7F7', 'key341': '95959595959595959595959595959595', 'cip323': '161BFABD4224C162', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'cip29': '0DC6A2C01EADE617', 'cip28': 'DD311EB7A3202393', 'cip240': 'F47BB46273B15EB5', 'msg350': '9E9E9E9E9E9E9E9E', 'key221': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg190': '0000000000000002', 'msg326': '8686868686868686', 'msg266': '4A4A4A4A4A4A4A4A', 'cip241': '655EA628CF62585F', 'msg227': '2323232323232323', 'msg226': '2222222222222222', 'msg225': '2121212121212121', 'msg224': '2020202020202020', 'msg223': '1F1F1F1F1F1F1F1F', 'msg222': '1E1E1E1E1E1E1E1E', 'msg221': '1D1D1D1D1D1D1D1D', 'msg220': '1C1C1C1C1C1C1C1C', 'msg384': 'C0C0C0C0C0C0C0C0', 'msg385': 'C1C1C1C1C1C1C1C1', 'msg386': 'C2C2C2C2C2C2C2C2', 'msg387': 'C3C3C3C3C3C3C3C3', 'msg380': 'BCBCBCBCBCBCBCBC', 'cip299': '1E2DC77E36A84693', 'msg229': '2525252525252525', 'msg228': '2424242424242424', 'cip305': 'B971ADE70E5C89EE', 'cip298': '26C940AB13574231', 'cip304': 'AF531E9520994017', 'cip356': 'CA439007C7245CD0', 'cip388': '72DAF2A7C9EA6803', 'cip307': '8DFB864FDB3C6811', 'key421': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'cip357': '06FC7FDE1C8389E7', 'cip306': '415D81C86AF9C376', 'key148': '00000000000000000000000000000000', 'key149': '00000000000000000000000000000000', 'key419': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key144': '00000000000000000000000000000000', 'key145': '00000000000000000000000000000000', 'key146': '00000000000000000000000000000000', 'key147': '00000000000000000000000000000000', 'key140': '00000000000000000000000000000000', 'key141': '00000000000000000000000000000000', 'key142': '00000000000000000000000000000000', 'key143': '00000000000000000000000000000000', 'cip293': '86405D9B425A8C8C', 'cip303': '115DBC965E6096C8', 'msg69': '0000000000000000', 'cip302': '9FAF2C96FE84919D', 'key420': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip358': '7A3C1F3BD60CB3D8', 'key405': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'cip359': 'E415D80048DBA848', 'key249': '39393939393939393939393939393939', 'key248': '38383838383838383838383838383838', 'key247': '37373737373737373737373737373737', 'key246': '36363636363636363636363636363636', 'key245': '35353535353535353535353535353535', 'key244': '34343434343434343434343434343434', 'key243': '33333333333333333333333333333333', 'key242': '32323232323232323232323232323232', 'key241': '31313131313131313131313131313131', 'key240': '30303030303030303030303030303030', 'msg313': '7979797979797979', 'msg312': '7878787878787878', 'msg311': '7777777777777777', 'msg310': '7676767676767676', 'msg317': '7D7D7D7D7D7D7D7D', 'msg316': '7C7C7C7C7C7C7C7C', 'msg315': '7B7B7B7B7B7B7B7B', 'key204': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key401': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg319': '7F7F7F7F7F7F7F7F', 'cip294': 'EBBF4810619C2C55', 'key400': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key391': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key390': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key393': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'cip322': '752666EB4CAB46EE', 'key379': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key394': 'CACACACACACACACACACACACACACACACA', 'key397': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key396': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key307': '73737373737373737373737373737373', 'key398': 'CECECECECECECECECECECECECECECECE', 'key402': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'cip338': '5B365F2FB2CD7F32', 'cip339': 'F0B00B264381DDBB', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'key319': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'cip110': '4871C3B7436121DE', 'cip111': '8CA64DE9C1B123A7', 'cip112': '41BBC8EF36654838', 'cip113': 'FCBD166CA0EA87E2', 'cip114': '9DFFC6EE9751B5CF', 'cip115': 'C01B7878EBCE8DD3', 'cip116': '357E5A4DC162D715', 'cip117': '268F93CAEB248E2E', 'cip118': 'A5D4174744B84E7D', 'cip119': '8CA64DE9C1B123A7', 'key289': '61616161616161616161616161616161', 'key408': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg164': '0000000008000000', 'msg165': '0000000004000000', 'msg166': '0000000002000000', 'msg167': '0000000001000000', 'msg160': '0000000080000000', 'msg161': '0000000040000000', 'msg162': '0000000020000000', 'msg163': '0000000010000000', 'key355': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'cip406': '8C0F3BA0C8601980', 'msg436': 'F4F4F4F4F4F4F4F4', 'msg394': 'CACACACACACACACA', 'msg168': '0000000000800000', 'msg169': '0000000000400000', 'key348': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'cip311': '89D3BF37052162E9', 'msg366': 'AEAEAEAEAEAEAEAE', 'msg367': 'AFAFAFAFAFAFAFAF', 'msg364': 'ACACACACACACACAC', 'key136': '00000000000000000000000000000000', 'msg362': 'AAAAAAAAAAAAAAAA', 'msg363': 'ABABABABABABABAB', 'msg360': 'A8A8A8A8A8A8A8A8', 'msg361': 'A9A9A9A9A9A9A9A9', 'msg341': '9595959595959595', 'msg368': 'B0B0B0B0B0B0B0B0', 'msg369': 'B1B1B1B1B1B1B1B1', 'cip204': '934316AE443CF08B', 'cip205': 'E3F56D7F1130A2B7', 'cip206': 'A2E4705087C6B6B4', 'cip207': 'D5D76E09A447E8C3', 'cip200': '10772D40FAD24257', 'cip201': 'F0139440647A6E7B', 'cip202': '0A288603044D740C', 'cip203': '6359916942F7438F', 'msg437': 'F5F5F5F5F5F5F5F5', 'cip413': 'F0752004EE23D87B', 'cip208': 'DD7515F2BFC17F85', 'cip209': 'F40379AB9E0EC533', 'key376': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'cip67': 'DED028F0C1F5A774', 'cip66': '81B838A1E9CD59B3', 'cip65': '5E87809F6B8A7ED5', 'cip64': 'C2A4DD96151453C2', 'cip63': '8CA64DE9C1B123A7', 'cip62': '41792F90E798B8E2', 'cip61': '7A7907DEB712DD81', 'cip60': 'FEEA19D1125CEB53', 'msg342': '9696969696969696', 'cip419': 'ADE4804C4BE4486E', 'cip277': '3BCDD41E6165A5E8', 'cip69': 'C1A75845F22BE951', 'cip68': '48C983815809FC87', 'cip276': '531BE5F9405DA715', 'cip365': '3C9A34CA4CB49EEB', 'key328': '88888888888888888888888888888888', 'key351': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'cip364': 'EEAAC6D17880BD56', 'key375': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'cip428': 'D6EE30A16B2CC01E', 'cip270': 'DB96D88C3460D801', 'cip420': '007B81F520E6D7DA', 'key353': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'cip411': 'F45FC26193E69AEE', 'key430': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key352': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'cip328': '762C40C8FADE9D16', 'cip315': 'DEA0B796624BB5BA', 'cip373': '62D473F539FA0D8B', 'msg262': '4646464646464646', 'key406': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'cip321': '907A46722ED34EC4', 'key374': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'cip429': '6932D887B2EA9C1A', 'key444': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg269': '4D4D4D4D4D4D4D4D', 'msg268': '4C4C4C4C4C4C4C4C', 'key431': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg263': '4747474747474747', 'cip176': '1029D55E880EC2D0', 'msg261': '4545454545454545', 'msg260': '4444444444444444', 'msg267': '4B4B4B4B4B4B4B4B', 'key159': '00000000000000000000000000000000', 'msg265': '4949494949494949', 'msg264': '4848484848484848', 'key158': '00000000000000000000000000000000', 'cip378': '10ADB6E2AB972BBE', 'key432': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'cip374': '1533F3ED9BE8EF8E', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'cip433': '5D1B8FAF7839494B', 'key281': '59595959595959595959595959595959', 'key372': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'cip432': '2A2891F65BB8173C', 'key300': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'cip431': '228AEA0D403E807A', 'key138': '00000000000000000000000000000000', 'key433': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'cip430': '0BFC865461F13ACC', 'cip384': 'A3B357885B1E16D2', 'key335': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'cip350': 'D66CDCAF3F6724A2', 'key267': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'cip436': '9CA66E96BD08BC70', 'key266': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key371': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key155': '00000000000000000000000000000000', 'msg218': '1A1A1A1A1A1A1A1A', 'msg219': '1B1B1B1B1B1B1B1B', 'msg216': '1818181818181818', 'msg217': '1919191919191919', 'msg214': '1616161616161616', 'key154': '00000000000000000000000000000000', 'msg212': '1414141414141414', 'msg213': '1515151515151515', 'msg210': '1212121212121212', 'msg211': '1313131313131313', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'msg88': '0000000000000000', 'key110': '00000000000000000000000000020000', 'msg86': '0000000000000000', 'msg87': '0000000000000000', 'msg84': '0000000000000000', 'msg85': '0000000000000000', 'msg82': '0000000000000000', 'msg83': '0000000000000000', 'msg80': '0000000000000000', 'msg81': '0000000000000000', 'key302': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key370': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'cip425': 'DFF918E93BDAD292', 'key360': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'cip372': '36F0D0B3675704D5', 'key303': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key434': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'cip320': 'EFECF25C3C5DC6DB', 'cip247': '5013CA4F62C9CEA0', 'key435': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key276': '54545454545454545454545454545454', 'key277': '55555555555555555555555555555555', 'key274': '52525252525252525252525252525252', 'key275': '53535353535353535353535353535353', 'key272': '50505050505050505050505050505050', 'key273': '51515151515151515151515151515151', 'cip259': 'B91810B8CDC58FE2', 'cip258': '724E7332696D08A7', 'cip257': '19DF84AC95551003', 'cip256': '6D55DDBC8DEA95FF', 'cip255': '5C4CA877A4E1E92D', 'cip254': 'E96089D6368F3E1A', 'cip253': '9D0BB4DB830ECB73', 'cip252': '51F0114FB6A6CD37', 'cip251': '8D250D58361597FC', 'cip250': 'B04A2AAC925ABB0B', 'cip426': '8FE559C7CD6FA56D', 'msg340': '9494949494949494', 'msg343': '9797979797979797', 'key304': '70707070707070707070707070707070', 'msg344': '9898989898989898', 'cip225': '88586E1D755B9B5A', 'key436': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg345': '9999999999999999', 'msg285': '5D5D5D5D5D5D5D5D', 'cip23': '8CA64DE9C1B123A7', 'msg287': '5F5F5F5F5F5F5F5F', 'msg286': '5E5E5E5E5E5E5E5E', 'msg281': '5959595959595959', 'msg280': '5858585858585858', 'msg283': '5B5B5B5B5B5B5B5B', 'cip22': 'E954174CC0C75C5D', 'msg322': '8282828282828282', 'msg323': '8383838383838383', 'msg320': '8080808080808080', 'msg321': '8181818181818181', 'msg289': '6161616161616161', 'cip21': '743C3DBD464ABE66', 'msg324': '8484848484848484', 'msg325': '8585858585858585', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'cip27': '5A015BF03B8FF6D2', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'key448': '000102030405060708090A0B0C0D0E0F', 'cip26': '71986C565B7A4697', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'cip25': 'DA518384A7F98F8F', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'key311': '77777777777777777777777777777777', 'key445': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'cip448': 'D117BD6373549FAA', 'cip397': '536873DB879CC770', 'msg376': 'B8B8B8B8B8B8B8B8', 'key429': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg139': '0010000000000000', 'msg138': '0020000000000000', 'msg137': '0040000000000000', 'msg136': '0080000000000000', 'msg135': '0100000000000000', 'msg134': '0200000000000000', 'msg133': '0400000000000000', 'msg132': '0800000000000000', 'msg131': '1000000000000000', 'msg130': '2000000000000000', 'cip154': 'F02B263B328E2B60', 'cip155': '9D64555A9A10B852', 'cip156': 'D106FF0BED5255D7', 'cip157': 'E1652C6B138C64A5', 'cip150': 'A484C3AD38DC9C19', 'cip151': 'FBE00A8A1EF8AD72', 'cip152': '750D079407521363', 'cip153': '64FEED9C724C2FAF', 'cip158': 'E428581186EC8F46', 'cip159': 'AEB5F5EDE22D1A36', 'msg421': 'E5E5E5E5E5E5E5E5', 'msg420': 'E4E4E4E4E4E4E4E4', 'msg423': 'E7E7E7E7E7E7E7E7', 'msg422': 'E6E6E6E6E6E6E6E6', 'msg425': 'E9E9E9E9E9E9E9E9', 'msg424': 'E8E8E8E8E8E8E8E8', 'msg427': 'EBEBEBEBEBEBEBEB', 'msg426': 'EAEAEAEAEAEAEAEA', 'msg429': 'EDEDEDEDEDEDEDED', 'msg407': 'D7D7D7D7D7D7D7D7', 'cip348': 'A399D3D63E169FA9', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'cip38': 'FB3B39E43C76D53D', 'cip39': '8CA64DE9C1B123A7', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'cip34': 'D42EF0A1B9BC4392', 'cip35': '9E1D42F406FE0387', 'cip36': '8DB9EE4A1773C8FE', 'cip37': '8195C0ED7D066F6B', 'cip30': 'D1EAE0F689C433DE', 'cip31': '8CA64DE9C1B123A7', 'cip32': '833803AFBCE49177', 'cip33': '94EBB684C7C41EF5', 'cip445': '1ED83D49E267191D', 'cip218': '69E51488403EF4C3', 'cip400': '3BBD84CE539E68C4', 'cip344': '072E328C984DE4A2', 'cip443': 'E0BA8F4488AAF97C', 'key361': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg252': '3C3C3C3C3C3C3C3C', 'msg253': '3D3D3D3D3D3D3D3D', 'msg250': '3A3A3A3A3A3A3A3A', 'msg251': '3B3B3B3B3B3B3B3B', 'msg256': '4040404040404040', 'msg257': '4141414141414141', 'msg254': '3E3E3E3E3E3E3E3E', 'msg255': '3F3F3F3F3F3F3F3F', 'msg393': 'C9C9C9C9C9C9C9C9', 'msg392': 'C8C8C8C8C8C8C8C8', 'msg258': '4242424242424242', 'msg259': '4343434343434343', 'msg397': 'CDCDCDCDCDCDCDCD', 'msg396': 'CCCCCCCCCCCCCCCC', 'msg395': 'CBCBCBCBCBCBCBCB', 'msg334': '8E8E8E8E8E8E8E8E', 'cip376': 'FABBF7C046FD273F', 'key362': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key294': '66666666666666666666666666666666', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key153': '00000000000000000000000000000000', 'key152': '00000000000000000000000000000000', 'key151': '00000000000000000000000000000000', 'key150': '00000000000000000000000000000000', 'key157': '00000000000000000000000000000000', 'key156': '00000000000000000000000000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'key428': 'ECECECECECECECECECECECECECECECEC', 'cip327': '7F26DCF425149823', 'key238': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key239': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'cip326': 'CBBF6EEFE6529728', 'key232': '28282828282828282828282828282828', 'key233': '29292929292929292929292929292929', 'key230': '26262626262626262626262626262626', 'key231': '27272727272727272727272727272727', 'key236': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key237': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key234': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key235': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'cip316': 'E9E40542BDDB3E9D', 'cip324': '215F48699DB44A45', 'cip317': '8AD99914B354B911', 'cip288': '1BF17E00C09E7CBF', 'cip314': '9626FE57596E199E', 'cip289': '29932350C098DB5D', 'msg77': '0000000000000000', 'msg76': '0000000000000000', 'msg75': '0000000000000000', 'msg74': '0000000000000000', 'msg73': '0000000000000000', 'msg72': '0000000000000000', 'msg71': '0000000000000000', 'msg70': '0000000000000000', 'cip284': '4927ACC8CE45ECE7', 'cip285': 'E812EE6E3572985C', 'cip286': '9BB93A89627BF65F', 'cip287': 'EF12476884CB74CA', 'cip280': '1BEA27FFB72457B7', 'cip281': '85C3E0C429F34C27', 'msg79': '0000000000000000', 'msg78': '0000000000000000', 'cip42': '8990AAB2362CCE0F', 'key403': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'cip375': '9C4EA352599731ED', 'cip310': 'DBAC30A2A40B1B9C', 'key128': '00000000000000000000000000000000', 'key129': '00000000000000000000000000000000', 'key126': '00000000000000000000000000000002', 'key127': '00000000000000000000000000000001', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'cip266': '9D2B8C0AC605F274', 'cip267': 'C90F2F4C98A8FB2A', 'cip264': '63B15CADA668CE12', 'cip265': 'EACC0C1264171071', 'cip262': '48019C59E39B90C5', 'cip263': '0544083FB902D8C0', 'cip109': '67DB327ED5DF89E3', 'cip108': '270A943BEABEA8EC', 'cip107': '7497A098AA651D00', 'cip106': 'FF7B0E870FB1FD0B', 'cip105': 'A5AB6F6EB66057A9', 'cip104': '60B4B8E3A8F5CBEC', 'cip103': '8CA64DE9C1B123A7', 'cip102': 'AC8B09EC3153D57B', 'cip101': 'D9EF04E272D1A78A', 'cip100': '6781B65D74A6B9FB', 'msg173': '0000000000040000', 'msg172': '0000000000080000', 'msg171': '0000000000100000', 'msg170': '0000000000200000', 'msg177': '0000000000004000', 'msg176': '0000000000008000', 'msg175': '0000000000010000', 'msg174': '0000000000020000', 'msg388': 'C4C4C4C4C4C4C4C4', 'msg179': '0000000000001000', 'msg178': '0000000000002000', 'msg389': 'C5C5C5C5C5C5C5C5', 'msg375': 'B7B7B7B7B7B7B7B7', 'msg374': 'B6B6B6B6B6B6B6B6', 'msg377': 'B9B9B9B9B9B9B9B9', 'msg215': '1717171717171717', 'msg371': 'B3B3B3B3B3B3B3B3', 'msg370': 'B2B2B2B2B2B2B2B2', 'msg373': 'B5B5B5B5B5B5B5B5', 'msg372': 'B4B4B4B4B4B4B4B4', 'msg327': '8787878787878787', 'key349': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key411': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg379': 'BBBBBBBBBBBBBBBB', 'msg378': 'BABABABABABABABA', 'cip198': '3F5150BBA081D585', 'cip199': 'C65242248C9CF6F2', 'cip211': '2911CF5E94D33FE1', 'cip210': '96CD27784D1563E5', 'cip217': '7572278F364EB50D', 'cip216': 'C33FD1EB49CB64DA', 'cip215': '452C1197422469F8', 'cip214': '2006E716C4252D6D', 'cip190': '06E7EA22CE92708F', 'cip191': '166B40B44ABA4BD6', 'cip192': '8CA64DE9C1B123A7', 'cip193': '994D4DC157B96C52', 'cip194': 'E127C2B61D98E6E2', 'cip195': '984C91D78A269CE3', 'cip196': '1F4570BB77550683', 'cip197': '3990ABF98D672B16', 'cip70': 'C60F823E8E994489', 'cip71': '8CA64DE9C1B123A7', 'cip72': '709F8FCB044172FE', 'cip73': '26BC2DE634BFFFD4', 'cip74': 'D98126355C2E03E6', 'cip75': '49AAA91B49345137', 'cip76': 'A59854DCE009126D', 'cip77': '21C46B9FDE5CD36B', 'cip78': 'DEB4AE36E07BC053', 'cip79': '8CA64DE9C1B123A7', 'cip437': 'F5D779FCFBB28BF3', 'key368': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg381': 'BDBDBDBDBDBDBDBD', 'cip446': '66B2B23EA84693AD', 'key292': '64646464646464646464646464646464', 'msg382': 'BEBEBEBEBEBEBEBE', 'cip447': '7359B2163E4EDC58', 'key298': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key333': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'cip390': '1DD4E65AAF7988B4', 'cip444': '67B36E2875D9631C', 'key299': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg106': '0000000000000000', 'msg107': '0000000000000000', 'msg104': '0000000000000000', 'msg105': '0000000000000000', 'msg102': '0000000000000000', 'key111': '00000000000000000000000000010000', 'msg100': '0000000000000000', 'msg101': '0000000000000000', 'cip442': 'C66F54067298D4E9', 'msg89': '0000000000000000', 'key369': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'cip412': 'D0CFBB937CEDBFB5', 'msg108': '0000000000000000', 'msg109': '0000000000000000', 'key442': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key293': '65656565656565656565656565656565', 'cip440': '39ADBDDB7363090D', 'key295': '67676767676767676767676767676767', 'key332': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'cip441': 'C0AEAF445F7E2A7A', 'key296': '68686868686868686868686868686868', 'msg247': '3737373737373737', 'key447': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key297': '69696969696969696969696969696969', 'key395': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key347': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key290': '62626262626262626262626262626262', 'cip383': '92AA224372156A00', 'key344': '98989898989898989898989898989898', 'key291': '63636363636363636363636363636363', 'key425': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key345': '99999999999999999999999999999999', 'key119': '00000000000000000000000000000100', 'msg314': '7A7A7A7A7A7A7A7A', 'key342': '96969696969696969696969696969696', 'key118': '00000000000000000000000000000200', 'key412': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'cip332': '720479B024C397EE', 'key343': '97979797979797979797979797979797', 'key446': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'cip260': '06E23526EDCCD0C4', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'key427': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key404': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key426': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'cip370': '38703BA5E2315D1D', 'cip385': '169F7629C970C1E5', 'cip369': '24692773CB9F27FE', 'cip20': 'E90963FB7F2B1193', 'key354': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'cip417': '0DB572DDCE388AC7', 'key423': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key356': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key422': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key407': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg103': '0000000000000000', 'msg209': '1111111111111111', 'msg208': '1010101010101010', 'key269': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key399': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg205': '0D0D0D0D0D0D0D0D', 'msg204': '0C0C0C0C0C0C0C0C', 'msg207': '0F0F0F0F0F0F0F0F', 'msg206': '0E0E0E0E0E0E0E0E', 'msg201': '0909090909090909', 'msg200': '0808080808080808', 'msg203': '0B0B0B0B0B0B0B0B', 'msg202': '0A0A0A0A0A0A0A0A', 'key162': '00000000000000000000000000000000', 'key163': '00000000000000000000000000000000', 'key160': '00000000000000000000000000000000', 'key161': '00000000000000000000000000000000', 'key166': '00000000000000000000000000000000', 'key167': '00000000000000000000000000000000', 'key164': '00000000000000000000000000000000', 'key165': '00000000000000000000000000000000', 'key283': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key282': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key168': '00000000000000000000000000000000', 'key169': '00000000000000000000000000000000', 'key287': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key286': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key285': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key284': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'cip377': 'B7FE63A61C646F3A', 'cip424': 'BAD3EE68BDDB9607', 'cip279': 'D90772CF3F047CFD', 'cip330': '301085E3FDE724E1', 'cip366': '9527B0287B75F5A3', 'cip387': 'AE0FEEB0495932C8', 'msg245': '3535353535353535', 'key264': '48484848484848484848484848484848', 'cip228': '0BA03D9E6C196511', 'cip229': '3E55E997611E4B7D', 'key261': '45454545454545454545454545454545', 'key260': '44444444444444444444444444444444', 'key263': '47474747474747474747474747474747', 'key262': '46464646464646464646464646464646', 'cip222': 'F24A8D2231C77538', 'cip223': '4FD96EC0D3304EF6', 'cip220': '521B7FB3B41BB791', 'cip221': '26059A6A0F3F6B35', 'cip226': '0F8ADFFB11DC2784', 'cip227': '2F30446C8312404A', 'cip224': '18A9D580A900B699', 'msg147': '0000100000000000', 'msg318': '7E7E7E7E7E7E7E7E', 'cip278': '2B1FF5610A19270C', 'cip395': '2DABFEB346794C3D', 'cip331': 'EF4E3E8F1CC6706E', 'cip392': 'AFEC35B09D36315F', 'cip423': '3CC02E14B6349B25', 'cip386': '62F44B247CF1348C', 'msg244': '3434343434343434', 'cip393': 'C8078A6148818403', 'msg339': '9393939393939393', 'msg338': '9292929292929292', 'key310': '76767676767676767676767676767676', 'key270': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg331': '8B8B8B8B8B8B8B8B', 'msg330': '8A8A8A8A8A8A8A8A', 'msg333': '8D8D8D8D8D8D8D8D', 'key271': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg335': '8F8F8F8F8F8F8F8F', 'msg328': '8888888888888888', 'msg337': '9191919191919191', 'msg336': '9090909090909090', 'key377': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'cip140': 'ADD0CC8D6E5DEBA1', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': '6F85B98DD12CB13B', 'cip319': '10130DA3C3A23924', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'msg20': '0000000000000000', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'cip136': 'D9031B0271BD5A0A', 'cip137': '424250B37C3DD951', 'cip134': '6CC5DEFAAF04512F', 'cip135': '0D9F279BA5D87260', 'cip132': '20B9E767B2FB1456', 'cip133': '55579380D77138EF', 'cip130': '2E8653104F3834EA', 'cip131': '4BD388FF6CD81D4F', 'key373': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key229': '25252525252525252525252525252525', 'cip352': '10EDB8977B348B35', 'cip138': 'B8061B7ECD9A21E5', 'cip139': 'F15D0F286B65BD28', 'cip371': 'FCB7E4B7D702E2FB', 'key278': '56565656565656565656565656565656', 'key437': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'cip380': '46E7EF47323A701D', 'key279': '57575757575757575757575757575757', 'cip439': 'EF88D2BF052DBDA8', 'cip422': '8A8DD870C9B14AF2', 'key441': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key44': '00000000000800000000000000000000', 'msg148': '0000080000000000', 'msg149': '0000040000000000', 'key45': '00000000000400000000000000000000', 'msg142': '0002000000000000', 'msg143': '0001000000000000', 'msg140': '0008000000000000', 'msg141': '0004000000000000', 'msg146': '0000200000000000', 'key46': '00000000000200000000000000000000', 'msg144': '0000800000000000', 'msg145': '0000400000000000', 'cip143': 'F356834379D165CD', 'cip142': 'ECBFE3BD3F591A5E', 'cip141': 'E6D5F82752AD63D1', 'key47': '00000000000100000000000000000000', 'cip147': '329A8ED523D71AEC', 'cip146': 'E19E275D846A1298', 'cip145': '889DE068A16F0BE6', 'cip144': '2B9F982F20037FA9', 'msg398': 'CECECECECECECECE', 'key40': '00000000008000000000000000000000', 'cip149': '12A9F5817FF2D65D', 'cip148': 'E7FCE22557D23C97', 'key220': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key203': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg346': '9A9A9A9A9A9A9A9A', 'key41': '00000000004000000000000000000000'} |
dict_tdes3 = {'msg418': 'A2A2A2A2A2A2A2A2', 'msg419': 'A3A3A3A3A3A3A3A3', 'msg414': '9E9E9E9E9E9E9E9E', 'msg415': '9F9F9F9F9F9F9F9F', 'msg416': 'A0A0A0A0A0A0A0A0', 'msg417': 'A1A1A1A1A1A1A1A1', 'msg410': '9A9A9A9A9A9A9A9A', 'msg411': '9B9B9B9B9B9B9B9B', 'msg412': '9C9C9C9C9C9C9C9C', 'msg413': '9D9D9D9D9D9D9D9D', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '0000000000000000', 'msg65': '0000000000000000', 'cip354': 'B476E6499842AC54', 'cip355': '5C662C29C1E96056', 'msg68': '0000000000000000', 'msg69': '0000000000000000', 'cip358': 'EBBF4810619C2C55', 'cip359': 'F8D1CD7367B21B5D', 'cip178': '1DE5279DAE3BED6F', 'cip179': 'E941A33F85501303', 'cip172': '5495C6ABF1E5DF51', 'cip173': 'AE13DBD561488933', 'cip170': '7A9BE42F2009A892', 'cip171': '29038D56BA6D2745', 'cip176': 'D1399712F99BF02E', 'cip177': '14C1D7C1CFFEC79E', 'cip174': '024D1FFA8904E389', 'cip175': '8CA64DE9C1B123A7', 'msg188': '0000000000000000', 'msg189': '0000000000000000', 'msg186': '0000000000000000', 'msg187': '0000000000000000', 'msg184': '0000000000000000', 'msg185': '0000000000000000', 'msg182': '0000000000000000', 'msg183': '0000000000000000', 'msg180': '0000000000000000', 'msg181': '0000000000000000', 'msg340': '5454545454545454', 'msg341': '5555555555555555', 'msg342': '5656565656565656', 'msg343': '5757575757575757', 'msg344': '5858585858585858', 'msg345': '5959595959595959', 'msg346': '5A5A5A5A5A5A5A5A', 'msg347': '5B5B5B5B5B5B5B5B', 'msg348': '5C5C5C5C5C5C5C5C', 'msg349': '5D5D5D5D5D5D5D5D', 'cip16': 'A2DC9E92FD3CDE92', 'cip17': 'CAC09F797D031287', 'cip14': 'A8468EE3BC18F06D', 'cip15': '8CA64DE9C1B123A7', 'cip12': '178C83CE2B399D94', 'cip13': '50F636324A9B7F80', 'cip10': '31FE17369B5288C9', 'cip11': 'DFDD3CC64DAE1642', 'cip18': '90BA680B22AEB525', 'cip19': 'CE7A24F350E280B6', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'key319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key311': '373737373737373737373737373737373737373737373737', 'key310': '363636363636363636363636363636363636363636363636', 'key313': '393939393939393939393939393939393939393939393939', 'key312': '383838383838383838383838383838383838383838383838', 'key315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key405': '959595959595959595959595959595959595959595959595', 'key404': '949494949494949494949494949494949494949494949494', 'key407': '979797979797979797979797979797979797979797979797', 'key406': '969696969696969696969696969696969696969696969696', 'key401': '919191919191919191919191919191919191919191919191', 'key400': '909090909090909090909090909090909090909090909090', 'key403': '939393939393939393939393939393939393939393939393', 'key402': '929292929292929292929292929292929292929292929292', 'key409': '999999999999999999999999999999999999999999999999', 'key408': '989898989898989898989898989898989898989898989898', 'msg409': '9999999999999999', 'msg408': '9898989898989898', 'msg403': '9393939393939393', 'msg402': '9292929292929292', 'msg401': '9191919191919191', 'msg400': '9090909090909090', 'msg407': '9797979797979797', 'msg406': '9696969696969696', 'msg405': '9595959595959595', 'msg404': '9494949494949494', 'cip4': '809F5F873C1FD761', 'cip5': 'C02FAFFEC989D1FC', 'cip6': '4615AA1D33E72F10', 'cip7': '8CA64DE9C1B123A7', 'cip0': '95A8D72813DAA94D', 'cip1': '0EEC1487DD8C26D5', 'cip2': '7AD16FFB79C45926', 'cip3': 'D3746294CA6A6CF3', 'cip8': '2055123350C00858', 'cip9': 'DF3B99D6577397C8', 'cip341': '3BCDD41E6165A5E8', 'cip340': '531BE5F9405DA715', 'cip343': 'D90772CF3F047CFD', 'cip342': '2B1FF5610A19270C', 'cip345': '85C3E0C429F34C27', 'msg98': '0000000000000000', 'cip347': '35BC6FF838DBA32F', 'cip346': 'F9038021E37C7618', 'cip349': 'E812EE6E3572985C', 'msg94': '0000000000000000', 'msg97': '0000000000000000', 'msg96': '0000000000000000', 'msg91': '0000000000000000', 'msg90': '0000000000000000', 'msg93': '0000000000000000', 'msg92': '0000000000000000', 'cip169': '41B9A79AF79AC208', 'cip168': '8638809E878787A0', 'cip161': '3CFAA7A7DC8720DC', 'cip160': '19D032E64AB0BD8B', 'cip163': '9DB73B3C0D163F54', 'cip162': 'B7265F7F447AC6F3', 'cip165': '93C9B64042EAA240', 'cip164': '8181B65BABF4A975', 'cip167': '8CA64DE9C1B123A7', 'cip166': '5570530829705592', 'msg199': '0100000000000000', 'msg198': '0200000000000000', 'msg195': '1000000000000000', 'msg194': '2000000000000000', 'msg197': '0400000000000000', 'msg196': '0800000000000000', 'msg191': '0000000000000000', 'msg190': '0000000000000000', 'msg193': '4000000000000000', 'msg192': '8000000000000000', 'msg359': '6767676767676767', 'msg358': '6666666666666666', 'msg357': '6565656565656565', 'msg356': '6464646464646464', 'msg355': '6363636363636363', 'msg354': '6262626262626262', 'msg353': '6161616161616161', 'msg352': '6060606060606060', 'msg351': '5F5F5F5F5F5F5F5F', 'msg350': '5E5E5E5E5E5E5E5E', 'cip23': '8CA64DE9C1B123A7', 'cip22': 'C71516C29C75D170', 'cip21': '25610288924511C2', 'cip20': '882BFF0AA01A0B87', 'cip27': 'A81FBD448F9E522F', 'cip26': 'EE371483714C02EA', 'cip25': 'C22F0A294A71F29F', 'cip24': '5199C29A52C9F059', 'cip29': '1AFA9A66A6DF92AE', 'cip28': '4F644C92E192DFED', 'cip352': '1BF17E00C09E7CBF', 'cip353': '29932350C098DB5D', 'cip350': '9BB93A89627BF65F', 'cip351': 'EF12476884CB74CA', 'cip356': '3AF1703D76442789', 'cip357': '86405D9B425A8C8C', 'key148': '000000000000000000000000000000000000080000000000', 'msg66': '0000000000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'msg67': '0000000000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'key430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key324': '444444444444444444444444444444444444444444444444', 'key325': '454545454545454545454545454545454545454545454545', 'key326': '464646464646464646464646464646464646464646464646', 'key327': '474747474747474747474747474747474747474747474747', 'key320': '404040404040404040404040404040404040404040404040', 'key321': '414141414141414141414141414141414141414141414141', 'key322': '424242424242424242424242424242424242424242424242', 'key323': '434343434343434343434343434343434343434343434343', 'key328': '484848484848484848484848484848484848484848484848', 'key329': '494949494949494949494949494949494949494949494949', 'msg502': 'F6F6F6F6F6F6F6F6', 'msg503': 'F7F7F7F7F7F7F7F7', 'msg500': 'F4F4F4F4F4F4F4F4', 'msg501': 'F5F5F5F5F5F5F5F5', 'msg506': 'FAFAFAFAFAFAFAFA', 'msg507': 'FBFBFBFBFBFBFBFB', 'msg504': 'F8F8F8F8F8F8F8F8', 'msg505': 'F9F9F9F9F9F9F9F9', 'msg508': 'FCFCFCFCFCFCFCFC', 'msg509': 'FDFDFDFDFDFDFDFD', 'cip488': 'BAD3EE68BDDB9607', 'cip489': 'DFF918E93BDAD292', 'cip482': 'D9FA6595F0C094CA', 'cip483': 'ADE4804C4BE4486E', 'cip480': 'B026913F2CCFB109', 'cip481': '0DB572DDCE388AC7', 'cip486': '8A8DD870C9B14AF2', 'cip487': '3CC02E14B6349B25', 'cip484': '007B81F520E6D7DA', 'cip485': '961AEB77BFC10B3C', 'msg218': '0000002000000000', 'msg219': '0000001000000000', 'msg216': '0000008000000000', 'msg217': '0000004000000000', 'msg214': '0000020000000000', 'msg215': '0000010000000000', 'msg212': '0000080000000000', 'msg213': '0000040000000000', 'msg210': '0000200000000000', 'msg211': '0000100000000000', 'cip378': '9626FE57596E199E', 'cip379': 'DEA0B796624BB5BA', 'msg88': '0000000000000000', 'msg89': '0000000000000000', 'cip374': 'DBAC30A2A40B1B9C', 'msg87': '0000000000000000', 'msg84': '0000000000000000', 'msg85': '0000000000000000', 'msg82': '0000000000000000', 'msg83': '0000000000000000', 'msg80': '0000000000000000', 'cip373': 'CFEF7A1C0218DB1E', 'cip396': '720479B024C397EE', 'cip397': 'BEA27E3795063C89', 'cip394': '301085E3FDE724E1', 'cip395': 'EF4E3E8F1CC6706E', 'cip392': '762C40C8FADE9D16', 'cip393': '2453CF5D5BF4E463', 'cip390': 'CBBF6EEFE6529728', 'cip391': '7F26DCF425149823', 'cip398': '468E5218F1A37611', 'cip399': '50ACE16ADF66BFE8', 'msg328': '4848484848484848', 'msg329': '4949494949494949', 'msg322': '4242424242424242', 'msg323': '4343434343434343', 'msg320': '4040404040404040', 'msg321': '4141414141414141', 'msg326': '4646464646464646', 'msg327': '4747474747474747', 'msg324': '4444444444444444', 'msg325': '4545454545454545', 'cip154': 'EE371483714C02EA', 'cip155': 'A81FBD448F9E522F', 'cip156': '4F644C92E192DFED', 'cip157': '1AFA9A66A6DF92AE', 'cip150': 'C71516C29C75D170', 'cip151': '8CA64DE9C1B123A7', 'cip152': '5199C29A52C9F059', 'cip153': 'C22F0A294A71F29F', 'cip158': 'B3C1CC715CB879D8', 'cip159': '8CA64DE9C1B123A7', 'cip38': '5570530829705592', 'cip39': '8CA64DE9C1B123A7', 'cip34': 'B7265F7F447AC6F3', 'cip35': '9DB73B3C0D163F54', 'cip36': '8181B65BABF4A975', 'cip37': '93C9B64042EAA240', 'cip30': 'B3C1CC715CB879D8', 'cip31': '8CA64DE9C1B123A7', 'cip32': '19D032E64AB0BD8B', 'cip33': '3CFAA7A7DC8720DC', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key429': 'ADADADADADADADADADADADADADADADADADADADADADADADAD', 'key428': 'ACACACACACACACACACACACACACACACACACACACACACACACAC', 'key427': 'ABABABABABABABABABABABABABABABABABABABABABABABAB', 'key426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key337': '515151515151515151515151515151515151515151515151', 'key336': '505050505050505050505050505050505050505050505050', 'key335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key339': '535353535353535353535353535353535353535353535353', 'key338': '525252525252525252525252525252525252525252525252', 'msg511': 'FFFFFFFFFFFFFFFF', 'msg510': 'FEFEFEFEFEFEFEFE', 'msg512': '0011223344556677', 'cip499': '6CBCE951BBC30F74', 'cip498': '1C0A9280EECF5D48', 'cip491': 'C88480835C1A444C', 'cip490': '8FE559C7CD6FA56D', 'cip493': '6932D887B2EA9C1A', 'cip492': 'D6EE30A16B2CC01E', 'cip495': '228AEA0D403E807A', 'cip494': '0BFC865461F13ACC', 'cip497': '5D1B8FAF7839494B', 'cip496': '2A2891F65BB8173C', 'msg209': '0000400000000000', 'msg208': '0000800000000000', 'msg205': '0004000000000000', 'msg204': '0008000000000000', 'msg207': '0001000000000000', 'msg206': '0002000000000000', 'msg201': '0040000000000000', 'msg200': '0080000000000000', 'msg203': '0010000000000000', 'msg202': '0020000000000000', 'cip369': 'B971ADE70E5C89EE', 'cip368': 'AF531E9520994017', 'cip363': '1E2DC77E36A84693', 'cip362': '26C940AB13574231', 'cip361': '5FDFFFC3AAAB0CB3', 'cip360': '9EE703142BF8D7E2', 'cip367': '115DBC965E6096C8', 'cip366': '9FAF2C96FE84919D', 'cip365': 'A4C9A0D04D3280CD', 'cip364': '0F4FF4D9BC7E2244', 'cip425': 'D4E00A9EF5E6D8F3', 'cip385': '907A46722ED34EC4', 'cip384': 'EFECF25C3C5DC6DB', 'cip387': '161BFABD4224C162', 'cip386': '752666EB4CAB46EE', 'cip381': '8AD99914B354B911', 'cip380': 'E9E40542BDDB3E9D', 'cip383': '10130DA3C3A23924', 'cip382': '6F85B98DD12CB13B', 'cip389': '69D901A8A691E661', 'cip388': '215F48699DB44A45', 'cip423': 'E415D80048DBA848', 'msg339': '5353535353535353', 'msg338': '5252525252525252', 'msg331': '4B4B4B4B4B4B4B4B', 'msg330': '4A4A4A4A4A4A4A4A', 'msg333': '4D4D4D4D4D4D4D4D', 'msg332': '4C4C4C4C4C4C4C4C', 'msg335': '4F4F4F4F4F4F4F4F', 'msg334': '4E4E4E4E4E4E4E4E', 'msg337': '5151515151515151', 'msg336': '5050505050505050', 'cip143': '8CA64DE9C1B123A7', 'cip142': 'A8468EE3BC18F06D', 'cip141': '50F636324A9B7F80', 'cip140': '178C83CE2B399D94', 'cip147': 'CE7A24F350E280B6', 'cip146': '90BA680B22AEB525', 'cip145': 'CAC09F797D031287', 'cip144': 'A2DC9E92FD3CDE92', 'cip149': '25610288924511C2', 'cip148': '882BFF0AA01A0B87', 'cip49': '14C1D7C1CFFEC79E', 'cip48': 'D1399712F99BF02E', 'cip41': '41B9A79AF79AC208', 'cip40': '8638809E878787A0', 'cip43': '29038D56BA6D2745', 'cip42': '7A9BE42F2009A892', 'cip45': 'AE13DBD561488933', 'cip44': '5495C6ABF1E5DF51', 'cip47': '8CA64DE9C1B123A7', 'cip46': '024D1FFA8904E389', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'key458': 'CACACACACACACACACACACACACACACACACACACACACACACACA', 'key459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'cip330': '9D2B8C0AC605F274', 'cip331': 'C90F2F4C98A8FB2A', 'cip332': '03481B4828FD1D04', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'msg238': '0000000000020000', 'msg239': '0000000000010000', 'msg230': '0000000002000000', 'msg231': '0000000001000000', 'msg232': '0000000000800000', 'msg233': '0000000000400000', 'msg234': '0000000000200000', 'msg235': '0000000000100000', 'msg236': '0000000000080000', 'msg237': '0000000000040000', 'msg304': '3030303030303030', 'msg305': '3131313131313131', 'msg306': '3232323232323232', 'msg307': '3333333333333333', 'msg300': '2C2C2C2C2C2C2C2C', 'msg301': '2D2D2D2D2D2D2D2D', 'msg302': '2E2E2E2E2E2E2E2E', 'msg303': '2F2F2F2F2F2F2F2F', 'msg308': '3434343434343434', 'msg309': '3535353535353535', 'cip58': 'A1AB2190545B91D7', 'cip59': '0875041E64C570F7', 'cip52': 'DA99DBBC9A03F379', 'cip53': 'B7FC92F91D8E92E9', 'cip50': '1DE5279DAE3BED6F', 'cip51': 'E941A33F85501303', 'cip56': '9CC62DF43B6EED74', 'cip57': 'D863DBB5C59A91A0', 'cip54': 'AE8E5CAA3CA04E85', 'cip55': '8CA64DE9C1B123A7', 'key199': '000000000000000000000000000000000000000000000000', 'key198': '000000000000000000000000000000000000000000000000', 'key197': '000000000000000000000000000000000000000000000000', 'key196': '000000000000000000000000000000000000000000000000', 'key195': '000000000000000000000000000000000000000000000000', 'key194': '000000000000000000000000000000000000000000000000', 'key193': '000000000000000000000000000000000000000000000000', 'key192': '000000000000000000000000000000000000000000000000', 'key191': '000000000000000000000000000000000000000000000001', 'key190': '000000000000000000000000000000000000000000000002', 'key449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key442': 'BABABABABABABABABABABABABABABABABABABABABABABABA', 'key445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg227': '0000000010000000', 'msg226': '0000000020000000', 'msg225': '0000000040000000', 'msg224': '0000000080000000', 'msg223': '0000000100000000', 'msg222': '0000000200000000', 'msg221': '0000000400000000', 'msg220': '0000000800000000', 'msg229': '0000000004000000', 'msg228': '0000000008000000', 'cip503': 'EF88D2BF052DBDA8', 'cip502': '0FEC6BBF9B859184', 'msg313': '3939393939393939', 'msg312': '3838383838383838', 'msg311': '3737373737373737', 'msg310': '3636363636363636', 'msg317': '3D3D3D3D3D3D3D3D', 'msg316': '3C3C3C3C3C3C3C3C', 'msg315': '3B3B3B3B3B3B3B3B', 'msg314': '3A3A3A3A3A3A3A3A', 'msg319': '3F3F3F3F3F3F3F3F', 'msg318': '3E3E3E3E3E3E3E3E', 'cip67': 'DED028F0C1F5A774', 'cip66': '81B838A1E9CD59B3', 'cip65': '5E87809F6B8A7ED5', 'cip64': 'C2A4DD96151453C2', 'cip63': '8CA64DE9C1B123A7', 'cip62': '869EFD7F9F265A09', 'cip61': 'FCDB3291DE21F0C0', 'cip60': '5A594528BEBEF1CC', 'cip69': 'C1A75845F22BE951', 'cip68': '48C983815809FC87', 'cip229': '5E0905517BB59BCF', 'key298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key294': '262626262626262626262626262626262626262626262626', 'key295': '272727272727272727272727272727272727272727272727', 'key296': '282828282828282828282828282828282828282828282828', 'key297': '292929292929292929292929292929292929292929292929', 'key290': '222222222222222222222222222222222222222222222222', 'key291': '232323232323232323232323232323232323232323232323', 'key292': '242424242424242424242424242424242424242424242424', 'key293': '252525252525252525252525252525252525252525252525', 'key508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key276': '141414141414141414141414141414141414141414141414', 'key277': '151515151515151515151515151515151515151515151515', 'key274': '121212121212121212121212121212121212121212121212', 'key275': '131313131313131313131313131313131313131313131313', 'key272': '101010101010101010101010101010101010101010101010', 'key273': '111111111111111111111111111111111111111111111111', 'key270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key278': '161616161616161616161616161616161616161616161616', 'key279': '171717171717171717171717171717171717171717171717', 'key474': 'DADADADADADADADADADADADADADADADADADADADADADADADA', 'key475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg252': '0000000000000008', 'msg253': '0000000000000004', 'msg250': '0000000000000020', 'msg251': '0000000000000010', 'msg256': '0000000000000000', 'msg257': '0101010101010101', 'msg254': '0000000000000002', 'msg255': '0000000000000001', 'msg258': '0202020202020202', 'msg259': '0303030303030303', 'msg494': 'EEEEEEEEEEEEEEEE', 'msg495': 'EFEFEFEFEFEFEFEF', 'msg496': 'F0F0F0F0F0F0F0F0', 'msg497': 'F1F1F1F1F1F1F1F1', 'msg490': 'EAEAEAEAEAEAEAEA', 'msg491': 'EBEBEBEBEBEBEBEB', 'msg492': 'ECECECECECECECEC', 'msg493': 'EDEDEDEDEDEDEDED', 'msg498': 'F2F2F2F2F2F2F2F2', 'msg499': 'F3F3F3F3F3F3F3F3', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'cip288': '18A9D580A900B699', 'cip289': '88586E1D755B9B5A', 'cip284': '521B7FB3B41BB791', 'cip285': '26059A6A0F3F6B35', 'cip286': 'F24A8D2231C77538', 'cip287': '4FD96EC0D3304EF6', 'cip280': 'C33FD1EB49CB64DA', 'cip281': '7572278F364EB50D', 'cip282': '69E51488403EF4C3', 'cip283': 'FF847E0ADF192825', 'msg75': '0000000000000000', 'cip448': 'A3B357885B1E16D2', 'cip449': '169F7629C970C1E5', 'cip446': 'E6207B536AAAEFFC', 'cip447': '92AA224372156A00', 'cip444': '46E7EF47323A701D', 'cip445': '8DB18CCD9692F758', 'cip442': '10ADB6E2AB972BBE', 'cip443': 'F91DCAD912332F3B', 'cip440': 'FABBF7C046FD273F', 'cip441': 'B7FE63A61C646F3A', 'cip266': '0A288603044D740C', 'cip267': '6359916942F7438F', 'cip264': '10772D40FAD24257', 'cip265': 'F0139440647A6E7B', 'cip262': '3F5150BBA081D585', 'cip263': 'C65242248C9CF6F2', 'cip260': '1F4570BB77550683', 'cip261': '3990ABF98D672B16', 'cip268': '934316AE443CF08B', 'cip269': 'E3F56D7F1130A2B7', 'cip198': '6CC5DEFAAF04512F', 'cip199': '0D9F279BA5D87260', 'cip190': '869EFD7F9F265A09', 'cip191': '8CA64DE9C1B123A7', 'cip192': '95F8A5E5DD31D900', 'cip193': 'DD7F121CA5015619', 'cip194': '2E8653104F3834EA', 'cip195': '4BD388FF6CD81D4F', 'cip196': '20B9E767B2FB1456', 'cip197': '55579380D77138EF', 'cip70': 'C60F823E8E994489', 'cip71': '8CA64DE9C1B123A7', 'cip72': '709F8FCB044172FE', 'cip73': '26BC2DE634BFFFD4', 'cip74': 'D98126355C2E03E6', 'cip75': '49AAA91B49345137', 'cip76': 'A59854DCE009126D', 'cip77': '21C46B9FDE5CD36B', 'cip78': 'DEB4AE36E07BC053', 'cip79': '8CA64DE9C1B123A7', 'msg106': '0000000000000000', 'msg107': '0000000000000000', 'msg104': '0000000000000000', 'msg105': '0000000000000000', 'msg102': '0000000000000000', 'msg103': '0000000000000000', 'msg100': '0000000000000000', 'msg101': '0000000000000000', 'msg108': '0000000000000000', 'msg109': '0000000000000000', 'key289': '212121212121212121212121212121212121212121212121', 'key288': '202020202020202020202020202020202020202020202020', 'key283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key281': '191919191919191919191919191919191919191919191919', 'key280': '181818181818181818181818181818181818181818181818', 'key287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key512': '000102030405060708090A0B0C0D0E0F1011121314151617', 'key511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key265': '090909090909090909090909090909090909090909090909', 'key264': '080808080808080808080808080808080808080808080808', 'key267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key261': '050505050505050505050505050505050505050505050505', 'key260': '040404040404040404040404040404040404040404040404', 'key263': '070707070707070707070707070707070707070707070707', 'key262': '060606060606060606060606060606060606060606060606', 'key269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key462': 'CECECECECECECECECECECECECECECECECECECECECECECECE', 'key461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'cip510': '66B2B23EA84693AD', 'cip511': '7359B2163E4EDC58', 'cip512': '97A25BA82B564F4C', 'msg241': '0000000000004000', 'msg240': '0000000000008000', 'msg243': '0000000000001000', 'msg242': '0000000000002000', 'msg245': '0000000000000400', 'msg244': '0000000000000800', 'msg247': '0000000000000100', 'msg246': '0000000000000200', 'msg249': '0000000000000040', 'msg248': '0000000000000080', 'msg483': 'E3E3E3E3E3E3E3E3', 'msg482': 'E2E2E2E2E2E2E2E2', 'msg481': 'E1E1E1E1E1E1E1E1', 'msg480': 'E0E0E0E0E0E0E0E0', 'msg487': 'E7E7E7E7E7E7E7E7', 'msg486': 'E6E6E6E6E6E6E6E6', 'msg485': 'E5E5E5E5E5E5E5E5', 'msg484': 'E4E4E4E4E4E4E4E4', 'msg489': 'E9E9E9E9E9E9E9E9', 'msg488': 'E8E8E8E8E8E8E8E8', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'cip299': 'B81634C1CEAB298C', 'cip298': 'DCAD4338F7523816', 'cip293': '3E55E997611E4B7D', 'cip292': '0BA03D9E6C196511', 'cip291': '2F30446C8312404A', 'cip290': '0F8ADFFB11DC2784', 'cip297': '73F0C45F379FE67F', 'cip296': '11A16028F310FF16', 'cip295': '2109425935406AB8', 'cip294': 'B2522FB5F158F0DF', 'cip459': '2DABFEB346794C3D', 'cip458': '4DA91CB4124B67FE', 'cip455': '76BF084C1535A6C6', 'cip454': '1DD4E65AAF7988B4', 'cip457': 'C8078A6148818403', 'cip456': 'AFEC35B09D36315F', 'cip451': 'AE0FEEB0495932C8', 'cip450': '62F44B247CF1348C', 'cip453': '4FB5D5536DA544F4', 'cip452': '72DAF2A7C9EA6803', 'cip275': '2911CF5E94D33FE1', 'cip274': '96CD27784D1563E5', 'cip277': '701AA63832905A92', 'cip276': '377B7F7CA3E5BBB3', 'cip271': 'D5D76E09A447E8C3', 'cip270': 'A2E4705087C6B6B4', 'cip273': 'F40379AB9E0EC533', 'cip272': 'DD7515F2BFC17F85', 'cip279': '452C1197422469F8', 'cip278': '2006E716C4252D6D', 'cip187': '0875041E64C570F7', 'cip186': 'A1AB2190545B91D7', 'cip185': 'D863DBB5C59A91A0', 'cip184': '9CC62DF43B6EED74', 'cip183': '8CA64DE9C1B123A7', 'cip182': 'AE8E5CAA3CA04E85', 'cip181': 'B7FC92F91D8E92E9', 'cip180': 'DA99DBBC9A03F379', 'cip189': 'FCDB3291DE21F0C0', 'cip188': '5A594528BEBEF1CC', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip89': 'E74CA11808ED17A3', 'cip88': '8CCFCD2418E85750', 'cip85': '78C8CBCAC3B7FD35', 'cip84': '482863934D17804B', 'cip87': '8CA64DE9C1B123A7', 'cip86': '7B8B051E6C8AA8B6', 'cip81': 'D26D9656F91A1EE2', 'cip80': 'D47ADF8B94CACA7A', 'cip83': 'D19BA61DD59CE9A1', 'cip82': 'EE31B8E767C9B337', 'msg115': '0000000000000000', 'msg114': '0000000000000000', 'msg117': '0000000000000000', 'msg116': '0000000000000000', 'msg111': '0000000000000000', 'msg110': '0000000000000000', 'msg113': '0000000000000000', 'msg112': '0000000000000000', 'msg119': '0000000000000000', 'msg118': '0000000000000000', 'msg99': '0000000000000000', 'cip344': '1BEA27FFB72457B7', 'msg95': '0000000000000000', 'cip348': '4927ACC8CE45ECE7', 'key250': '000000000000000000000000000000000000000000000000', 'key251': '000000000000000000000000000000000000000000000000', 'key252': '000000000000000000000000000000000000000000000000', 'key253': '000000000000000000000000000000000000000000000000', 'key254': '000000000000000000000000000000000000000000000000', 'key255': '000000000000000000000000000000000000000000000000', 'key256': '000000000000000000000000000000000000000000000000', 'key257': '010101010101010101010101010101010101010101010101', 'key258': '020202020202020202020202020202020202020202020202', 'key259': '030303030303030303030303030303030303030303030303', 'key382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key386': '828282828282828282828282828282828282828282828282', 'key387': '838383838383838383838383838383838383838383838383', 'key384': '808080808080808080808080808080808080808080808080', 'key385': '818181818181818181818181818181818181818181818181', 'key388': '848484848484848484848484848484848484848484848484', 'key389': '858585858585858585858585858585858585858585858585', 'key498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key492': 'ECECECECECECECECECECECECECECECECECECECECECECECEC', 'key493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg278': '1616161616161616', 'msg279': '1717171717171717', 'msg274': '1212121212121212', 'msg275': '1313131313131313', 'msg276': '1414141414141414', 'msg277': '1515151515151515', 'msg270': '0E0E0E0E0E0E0E0E', 'msg271': '0F0F0F0F0F0F0F0F', 'msg272': '1010101010101010', 'msg273': '1111111111111111', 'msg478': 'DEDEDEDEDEDEDEDE', 'msg479': 'DFDFDFDFDFDFDFDF', 'msg476': 'DCDCDCDCDCDCDCDC', 'msg477': 'DDDDDDDDDDDDDDDD', 'msg474': 'DADADADADADADADA', 'msg475': 'DBDBDBDBDBDBDBDB', 'msg472': 'D8D8D8D8D8D8D8D8', 'msg473': 'D9D9D9D9D9D9D9D9', 'msg470': 'D6D6D6D6D6D6D6D6', 'msg471': 'D7D7D7D7D7D7D7D7', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'cip468': '47E9CB3E3154D673', 'cip469': '2352BCC708ADC7E9', 'cip460': 'FBCD12C790D21CD7', 'cip461': '536873DB879CC770', 'cip462': '9AA159D7309DA7A0', 'cip463': '0B844B9D8C4EA14A', 'cip464': '3BBD84CE539E68C4', 'cip465': 'CF3E4F3E026E2C8E', 'cip466': '82F85885D542AF58', 'cip467': '22D334D6493B3CB6', 'cip240': '1029D55E880EC2D0', 'cip241': '5D86CB23639DBEA9', 'cip242': '1D1CA853AE7C0C5F', 'cip243': 'CE332329248F3228', 'cip244': '8405D1ABE24FB942', 'cip245': 'E643D78090CA4207', 'cip246': '48221B9937748A23', 'cip247': 'DD7C0BBD61FAFD54', 'cip248': '2FBC291A570DB5C4', 'cip249': 'E07C30D7E4E26E12', 'msg296': '2828282828282828', 'msg297': '2929292929292929', 'msg294': '2626262626262626', 'msg295': '2727272727272727', 'msg292': '2424242424242424', 'msg293': '2525252525252525', 'msg290': '2222222222222222', 'msg291': '2323232323232323', 'msg298': '2A2A2A2A2A2A2A2A', 'msg299': '2B2B2B2B2B2B2B2B', 'cip98': '83E55C4A19ABCB56', 'cip99': '96E6A993443B9DD4', 'cip96': 'A9FE6341C8621918', 'cip97': 'CE99FD5D50B22CEF', 'cip94': '7E6C8995AA52D298', 'cip95': '8CA64DE9C1B123A7', 'cip92': 'AD5F11ED913E918C', 'cip93': '3CE4B119BC1FC701', 'cip90': '0A634C7A69897F35', 'cip91': '6C2C0F27E973CE29', 'msg120': '0000000000000000', 'msg121': '0000000000000000', 'msg122': '0000000000000000', 'msg123': '0000000000000000', 'msg124': '0000000000000000', 'msg125': '0000000000000000', 'msg126': '0000000000000000', 'msg127': '0000000000000000', 'msg128': '0000000000000000', 'msg129': '0000000000000000', 'key249': '000000000000000000000000000000000000000000000000', 'key248': '000000000000000000000000000000000000000000000000', 'key247': '000000000000000000000000000000000000000000000000', 'key246': '000000000000000000000000000000000000000000000000', 'key245': '000000000000000000000000000000000000000000000000', 'key244': '000000000000000000000000000000000000000000000000', 'key243': '000000000000000000000000000000000000000000000000', 'key242': '000000000000000000000000000000000000000000000000', 'key241': '000000000000000000000000000000000000000000000000', 'key240': '000000000000000000000000000000000000000000000000', 'key391': '878787878787878787878787878787878787878787878787', 'key390': '868686868686868686868686868686868686868686868686', 'key393': '898989898989898989898989898989898989898989898989', 'key392': '888888888888888888888888888888888888888888888888', 'key395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg269': '0D0D0D0D0D0D0D0D', 'msg268': '0C0C0C0C0C0C0C0C', 'msg263': '0707070707070707', 'msg262': '0606060606060606', 'msg261': '0505050505050505', 'msg260': '0404040404040404', 'msg267': '0B0B0B0B0B0B0B0B', 'msg266': '0A0A0A0A0A0A0A0A', 'msg265': '0909090909090909', 'msg264': '0808080808080808', 'msg469': 'D5D5D5D5D5D5D5D5', 'msg468': 'D4D4D4D4D4D4D4D4', 'msg465': 'D1D1D1D1D1D1D1D1', 'msg464': 'D0D0D0D0D0D0D0D0', 'msg467': 'D3D3D3D3D3D3D3D3', 'msg466': 'D2D2D2D2D2D2D2D2', 'msg461': 'CDCDCDCDCDCDCDCD', 'msg460': 'CCCCCCCCCCCCCCCC', 'msg463': 'CFCFCFCFCFCFCFCF', 'msg462': 'CECECECECECECECE', 'cip509': '1ED83D49E267191D', 'cip508': '67B36E2875D9631C', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'cip477': 'F0752004EE23D87B', 'cip476': 'D0CFBB937CEDBFB5', 'cip475': 'F45FC26193E69AEE', 'cip474': 'C1AA16689EE1B482', 'cip473': '4DADD04A0EA70F20', 'cip472': 'DEF6BDA6CABF9547', 'cip471': 'EE5E9FD70CEF00E9', 'cip470': '8C0F3BA0C8601980', 'cip479': 'E7562A7F56FF4966', 'cip478': '77A791E28AA464A5', 'cip259': '984C91D78A269CE3', 'cip258': 'E127C2B61D98E6E2', 'cip257': '994D4DC157B96C52', 'cip256': '8CA64DE9C1B123A7', 'cip255': '166B40B44ABA4BD6', 'cip254': '06E7EA22CE92708F', 'cip253': 'D2FD8867D50D2DFE', 'cip252': 'CC083F1E6D9E85F6', 'cip251': '5B711BC4CEEBF2EE', 'cip250': '0953E2258E8E90A1', 'msg285': '1D1D1D1D1D1D1D1D', 'msg284': '1C1C1C1C1C1C1C1C', 'msg287': '1F1F1F1F1F1F1F1F', 'msg286': '1E1E1E1E1E1E1E1E', 'msg281': '1919191919191919', 'msg280': '1818181818181818', 'msg283': '1B1B1B1B1B1B1B1B', 'msg282': '1A1A1A1A1A1A1A1A', 'msg289': '2121212121212121', 'msg288': '2020202020202020', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '0000000000000000', 'msg138': '0000000000000000', 'msg137': '0000000000000000', 'msg136': '0000000000000000', 'msg135': '0000000000000000', 'msg134': '0000000000000000', 'msg133': '0000000000000000', 'msg132': '0000000000000000', 'msg131': '0000000000000000', 'msg130': '0000000000000000', 'msg77': '0000000000000000', 'key238': '000000000000000000000000000000000000000000000000', 'key239': '000000000000000000000000000000000000000000000000', 'msg76': '0000000000000000', 'key232': '000000000000000000000000000000000000000000000000', 'key233': '000000000000000000000000000000000000000000000000', 'key230': '000000000000000000000000000000000000000000000000', 'key231': '000000000000000000000000000000000000000000000000', 'key236': '000000000000000000000000000000000000000000000000', 'key237': '000000000000000000000000000000000000000000000000', 'key234': '000000000000000000000000000000000000000000000000', 'key235': '000000000000000000000000000000000000000000000000', 'msg74': '0000000000000000', 'msg73': '0000000000000000', 'msg72': '0000000000000000', 'msg71': '0000000000000000', 'msg70': '0000000000000000', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'key346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key344': '585858585858585858585858585858585858585858585858', 'key345': '595959595959595959595959595959595959595959595959', 'key342': '565656565656565656565656565656565656565656565656', 'key343': '575757575757575757575757575757575757575757575757', 'key340': '545454545454545454545454545454545454545454545454', 'key341': '555555555555555555555555555555555555555555555555', 'key348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg79': '0000000000000000', 'msg78': '0000000000000000', 'msg458': 'CACACACACACACACA', 'msg459': 'CBCBCBCBCBCBCBCB', 'msg450': 'C2C2C2C2C2C2C2C2', 'msg451': 'C3C3C3C3C3C3C3C3', 'msg452': 'C4C4C4C4C4C4C4C4', 'msg453': 'C5C5C5C5C5C5C5C5', 'msg454': 'C6C6C6C6C6C6C6C6', 'msg455': 'C7C7C7C7C7C7C7C7', 'msg456': 'C8C8C8C8C8C8C8C8', 'msg457': 'C9C9C9C9C9C9C9C9', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'key149': '000000000000000000000000000000000000040000000000', 'cip402': '5B365F2FB2CD7F32', 'cip403': 'F0B00B264381DDBB', 'cip400': 'EEA24369A19F6937', 'cip401': '6050D369017B6E62', 'cip406': 'A020003C5554F34C', 'cip407': '6118FCEBD407281D', 'cip404': 'E1D23881C957B96C', 'cip405': 'D936BF54ECA8BDCE', 'cip408': '072E328C984DE4A2', 'cip409': '1440B7EF9E63D3AA', 'cip228': 'CA3A2B036DBC8502', 'key147': '000000000000000000000000000000000000100000000000', 'cip222': 'E428581186EC8F46', 'cip223': 'AEB5F5EDE22D1A36', 'cip220': 'D106FF0BED5255D7', 'cip221': 'E1652C6B138C64A5', 'cip226': 'B160E4680F6C696F', 'cip227': 'FA0752B07D9C4AB8', 'cip224': 'E943D7568AEC0C5C', 'cip225': 'DF98C8276F54B04B', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': 'E96089D6368F3E1A', 'cip319': '5C4CA877A4E1E92D', 'cip316': '51F0114FB6A6CD37', 'cip317': '9D0BB4DB830ECB73', 'cip314': 'B04A2AAC925ABB0B', 'cip315': '8D250D58361597FC', 'cip312': '8940F7B3EACA5939', 'cip313': 'E22B19A55086774B', 'cip310': '37F8759EB77E7BFC', 'cip311': '5013CA4F62C9CEA0', 'cip136': '2055123350C00858', 'cip137': 'DF3B99D6577397C8', 'cip134': '4615AA1D33E72F10', 'cip135': '8CA64DE9C1B123A7', 'cip132': '809F5F873C1FD761', 'cip133': 'C02FAFFEC989D1FC', 'cip130': '7AD16FFB79C45926', 'cip131': 'D3746294CA6A6CF3', 'cip138': '31FE17369B5288C9', 'cip139': 'DFDD3CC64DAE1642', 'msg148': '0000000000000000', 'msg149': '0000000000000000', 'msg142': '0000000000000000', 'msg143': '0000000000000000', 'msg140': '0000000000000000', 'msg141': '0000000000000000', 'msg146': '0000000000000000', 'msg147': '0000000000000000', 'msg144': '0000000000000000', 'msg145': '0000000000000000', 'key229': '000000000000000000000000000000000000000000000000', 'key228': '000000000000000000000000000000000000000000000000', 'key221': '000000000000000000000000000000000000000000000000', 'key220': '000000000000000000000000000000000000000000000000', 'key223': '000000000000000000000000000000000000000000000000', 'key222': '000000000000000000000000000000000000000000000000', 'key225': '000000000000000000000000000000000000000000000000', 'key224': '000000000000000000000000000000000000000000000000', 'key227': '000000000000000000000000000000000000000000000000', 'key226': '000000000000000000000000000000000000000000000000', 'key139': '000000000000000000000000000000000010000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'key355': '636363636363636363636363636363636363636363636363', 'key354': '626262626262626262626262626262626262626262626262', 'key357': '656565656565656565656565656565656565656565656565', 'key356': '646464646464646464646464646464646464646464646464', 'key351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key353': '616161616161616161616161616161616161616161616161', 'key352': '606060606060606060606060606060606060606060606060', 'msg20': '0000000000000000', 'key359': '676767676767676767676767676767676767676767676767', 'key358': '666666666666666666666666666666666666666666666666', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'msg447': 'BFBFBFBFBFBFBFBF', 'msg446': 'BEBEBEBEBEBEBEBE', 'msg445': 'BDBDBDBDBDBDBDBD', 'msg444': 'BCBCBCBCBCBCBCBC', 'msg443': 'BBBBBBBBBBBBBBBB', 'msg442': 'BABABABABABABABA', 'msg441': 'B9B9B9B9B9B9B9B9', 'msg440': 'B8B8B8B8B8B8B8B8', 'msg449': 'C1C1C1C1C1C1C1C1', 'msg448': 'C0C0C0C0C0C0C0C0', 'key44': '000000000008000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'key47': '000000000001000000000000000000000000000000000000', 'key40': '000000000080000000000000000000000000000000000000', 'key41': '000000000040000000000000000000000000000000000000', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip411': 'C50E8FC289BBD876', 'cip410': '79BFA264BDA57373', 'cip413': '4B8919B667BD53AB', 'cip412': 'A399D3D63E169FA9', 'cip415': 'E40E81FF3F618340', 'cip414': 'D66CDCAF3F6724A2', 'cip417': '6446C5769D8409A0', 'cip416': '10EDB8977B348B35', 'cip419': 'B6D8533731BA1318', 'cip418': '17ED1191CA8D67A3', 'cip239': '8DD45A2DDF90796C', 'cip238': 'CAFFC6AC4542DE31', 'cip231': '4D49DB1532919C9F', 'cip230': '814EEB3B91D90726', 'cip233': 'AB6A20C0620D1C6F', 'cip232': '25EB5FC3F8CF0621', 'cip235': '866ECEDD8072BB0E', 'cip234': '79E90DBC98F92CCA', 'cip237': 'EA51D3975595B86B', 'cip236': '8B54536F2F3E64A8', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip309': 'B256E34BEDB49801', 'cip308': 'D254014CB986B3C2', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'EF840B00DA448234', 'cip124': 'DF4A77123610F2B1', 'cip127': '8CA64DE9C1B123A7', 'cip126': 'FFCCC32A699CB7C5', 'cip121': '502CD2BF4FC0B793', 'cip120': '46F5E7077CB869A8', 'cip123': '52710C55818FAF52', 'cip122': 'C0278007230589E4', 'cip129': '0EEC1487DD8C26D5', 'cip128': '95A8D72813DAA94D', 'msg159': '0000000000000000', 'msg158': '0000000000000000', 'msg151': '0000000000000000', 'msg150': '0000000000000000', 'msg153': '0000000000000000', 'msg152': '0000000000000000', 'msg155': '0000000000000000', 'msg154': '0000000000000000', 'msg157': '0000000000000000', 'msg156': '0000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'key360': '686868686868686868686868686868686868686868686868', 'key361': '696969696969696969696969696969696969696969696969', 'key362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key368': '707070707070707070707070707070707070707070707070', 'key369': '717171717171717171717171717171717171717171717171', 'key214': '000000000000000000000000000000000000000000000000', 'key215': '000000000000000000000000000000000000000000000000', 'key216': '000000000000000000000000000000000000000000000000', 'key217': '000000000000000000000000000000000000000000000000', 'key210': '000000000000000000000000000000000000000000000000', 'key211': '000000000000000000000000000000000000000000000000', 'key212': '000000000000000000000000000000000000000000000000', 'key213': '000000000000000000000000000000000000000000000000', 'key218': '000000000000000000000000000000000000000000000000', 'key219': '000000000000000000000000000000000000000000000000', 'msg432': 'B0B0B0B0B0B0B0B0', 'msg433': 'B1B1B1B1B1B1B1B1', 'msg430': 'AEAEAEAEAEAEAEAE', 'msg431': 'AFAFAFAFAFAFAFAF', 'msg436': 'B4B4B4B4B4B4B4B4', 'msg437': 'B5B5B5B5B5B5B5B5', 'msg434': 'B2B2B2B2B2B2B2B2', 'msg435': 'B3B3B3B3B3B3B3B3', 'msg438': 'B6B6B6B6B6B6B6B6', 'msg439': 'B7B7B7B7B7B7B7B7', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'msg388': '8484848484848484', 'msg389': '8585858585858585', 'msg384': '8080808080808080', 'msg385': '8181818181818181', 'msg386': '8282828282828282', 'msg387': '8383838383838383', 'msg380': '7C7C7C7C7C7C7C7C', 'msg381': '7D7D7D7D7D7D7D7D', 'msg382': '7E7E7E7E7E7E7E7E', 'msg383': '7F7F7F7F7F7F7F7F', 'cip305': '655EA628CF62585F', 'cip304': 'F47BB46273B15EB5', 'cip307': '0432ED386F2DE328', 'cip306': 'AC978C247863388F', 'cip428': 'EEAAC6D17880BD56', 'cip429': '3C9A34CA4CB49EEB', 'cip424': '26F88D30C0FB8302', 'cip301': '7D07A77A2ABD50A7', 'cip426': 'C4322BE19E9A5A17', 'cip427': 'ACE41A06BFA258EA', 'cip420': 'CA439007C7245CD0', 'cip421': '06FC7FDE1C8389E7', 'cip422': '7A3C1F3BD60CB3D8', 'cip300': 'DD2CCB29B6C4C349', 'cip303': 'C4427B31AC61973B', 'cip302': '30C1B0C1FD91D371', 'cip338': 'C365CB35B34B6114', 'cip339': '1155392E877F42A9', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'cip333': 'C78FC45A1DCEA2E2', 'cip334': 'DB96D88C3460D801', 'cip335': '6C69E720F5105518', 'cip336': '0D262E418BC893F3', 'cip337': '6AD84FD7848A0A5C', 'cip110': '4871C3B7436121DE', 'cip111': '8CA64DE9C1B123A7', 'cip112': '41BBC8EF36654838', 'cip113': 'FCBD166CA0EA87E2', 'cip114': '9DFFC6EE9751B5CF', 'cip115': 'C01B7878EBCE8DD3', 'cip116': '357E5A4DC162D715', 'cip117': '268F93CAEB248E2E', 'cip118': 'A5D4174744B84E7D', 'cip119': '8CA64DE9C1B123A7', 'msg164': '0000000000000000', 'msg165': '0000000000000000', 'msg166': '0000000000000000', 'msg167': '0000000000000000', 'msg160': '0000000000000000', 'msg161': '0000000000000000', 'msg162': '0000000000000000', 'msg163': '0000000000000000', 'msg168': '0000000000000000', 'msg169': '0000000000000000', 'msg366': '6E6E6E6E6E6E6E6E', 'msg367': '6F6F6F6F6F6F6F6F', 'msg364': '6C6C6C6C6C6C6C6C', 'msg365': '6D6D6D6D6D6D6D6D', 'msg362': '6A6A6A6A6A6A6A6A', 'msg363': '6B6B6B6B6B6B6B6B', 'msg360': '6868686868686868', 'msg361': '6969696969696969', 'msg368': '7070707070707070', 'msg369': '7171717171717171', 'cip204': 'ADD0CC8D6E5DEBA1', 'cip205': 'E6D5F82752AD63D1', 'cip206': 'ECBFE3BD3F591A5E', 'cip207': 'F356834379D165CD', 'cip200': 'D9031B0271BD5A0A', 'cip201': '424250B37C3DD951', 'cip202': 'B8061B7ECD9A21E5', 'cip203': 'F15D0F286B65BD28', 'cip208': '2B9F982F20037FA9', 'cip209': '889DE068A16F0BE6', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key377': '797979797979797979797979797979797979797979797979', 'key376': '787878787878787878787878787878787878787878787878', 'key375': '777777777777777777777777777777777777777777777777', 'key374': '767676767676767676767676767676767676767676767676', 'key373': '757575757575757575757575757575757575757575757575', 'key372': '747474747474747474747474747474747474747474747474', 'key371': '737373737373737373737373737373737373737373737373', 'key370': '727272727272727272727272727272727272727272727272', 'key203': '000000000000000000000000000000000000000000000000', 'key202': '000000000000000000000000000000000000000000000000', 'key201': '000000000000000000000000000000000000000000000000', 'key200': '000000000000000000000000000000000000000000000000', 'key207': '000000000000000000000000000000000000000000000000', 'key206': '000000000000000000000000000000000000000000000000', 'key205': '000000000000000000000000000000000000000000000000', 'key204': '000000000000000000000000000000000000000000000000', 'key209': '000000000000000000000000000000000000000000000000', 'key208': '000000000000000000000000000000000000000000000000', 'cip501': 'F5D779FCFBB28BF3', 'cip500': '9CA66E96BD08BC70', 'cip507': 'E0BA8F4488AAF97C', 'cip506': 'C66F54067298D4E9', 'cip505': 'C0AEAF445F7E2A7A', 'cip504': '39ADBDDB7363090D', 'msg421': 'A5A5A5A5A5A5A5A5', 'msg420': 'A4A4A4A4A4A4A4A4', 'msg423': 'A7A7A7A7A7A7A7A7', 'msg422': 'A6A6A6A6A6A6A6A6', 'msg425': 'A9A9A9A9A9A9A9A9', 'msg424': 'A8A8A8A8A8A8A8A8', 'msg427': 'ABABABABABABABAB', 'msg426': 'AAAAAAAAAAAAAAAA', 'msg429': 'ADADADADADADADAD', 'msg428': 'ACACACACACACACAC', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'key26': '000000200000000000000000000000000000000000000000', 'key27': '000000100000000000000000000000000000000000000000', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'msg399': '8F8F8F8F8F8F8F8F', 'msg398': '8E8E8E8E8E8E8E8E', 'msg393': '8989898989898989', 'msg392': '8888888888888888', 'msg391': '8787878787878787', 'msg390': '8686868686868686', 'msg397': '8D8D8D8D8D8D8D8D', 'msg396': '8C8C8C8C8C8C8C8C', 'msg395': '8B8B8B8B8B8B8B8B', 'msg394': '8A8A8A8A8A8A8A8A', 'cip439': '9C4EA352599731ED', 'cip438': '1533F3ED9BE8EF8E', 'cip433': '24692773CB9F27FE', 'cip432': '939618DF0AEFAAE7', 'cip431': 'F2D9D1BE74376C0C', 'cip430': '9527B0287B75F5A3', 'cip437': '62D473F539FA0D8B', 'cip436': '36F0D0B3675704D5', 'cip435': 'FCB7E4B7D702E2FB', 'cip434': '38703BA5E2315D1D', 'cip327': '0544083FB902D8C0', 'cip326': '48019C59E39B90C5', 'cip325': 'EF52491D5468D441', 'cip324': '06E23526EDCCD0C4', 'cip323': 'B91810B8CDC58FE2', 'cip322': '724E7332696D08A7', 'cip321': '19DF84AC95551003', 'cip320': '6D55DDBC8DEA95FF', 'cip329': 'EACC0C1264171071', 'cip328': '63B15CADA668CE12', 'cip109': '67DB327ED5DF89E3', 'cip108': '270A943BEABEA8EC', 'cip107': '7497A098AA651D00', 'cip106': 'FF7B0E870FB1FD0B', 'cip105': 'A5AB6F6EB66057A9', 'cip104': '60B4B8E3A8F5CBEC', 'cip103': '8CA64DE9C1B123A7', 'cip102': 'AC8B09EC3153D57B', 'cip101': 'D9EF04E272D1A78A', 'cip100': '6781B65D74A6B9FB', 'msg173': '0000000000000000', 'msg172': '0000000000000000', 'msg171': '0000000000000000', 'msg170': '0000000000000000', 'msg177': '0000000000000000', 'msg176': '0000000000000000', 'msg175': '0000000000000000', 'msg174': '0000000000000000', 'msg179': '0000000000000000', 'msg178': '0000000000000000', 'msg375': '7777777777777777', 'msg374': '7676767676767676', 'msg377': '7979797979797979', 'msg376': '7878787878787878', 'msg371': '7373737373737373', 'msg370': '7272727272727272', 'msg373': '7575757575757575', 'msg372': '7474747474747474', 'msg379': '7B7B7B7B7B7B7B7B', 'msg378': '7A7A7A7A7A7A7A7A', 'cip213': '12A9F5817FF2D65D', 'cip212': 'E7FCE22557D23C97', 'cip211': '329A8ED523D71AEC', 'cip210': 'E19E275D846A1298', 'cip217': '64FEED9C724C2FAF', 'cip216': '750D079407521363', 'cip215': 'FBE00A8A1EF8AD72', 'cip214': 'A484C3AD38DC9C19', 'cip219': '9D64555A9A10B852', 'cip218': 'F02B263B328E2B60', 'msg86': '0000000000000000', 'cip375': '89D3BF37052162E9', 'cip376': '80D9230BDAEB67DC', 'cip377': '3440911019AD68D7', 'cip370': '415D81C86AF9C376', 'cip371': '8DFB864FDB3C6811', 'cip372': '10B1C170E3398F91', 'msg81': '0000000000000000', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'key308': '343434343434343434343434343434343434343434343434', 'key309': '353535353535353535353535353535353535353535353535', 'key302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key306': '323232323232323232323232323232323232323232323232', 'key307': '333333333333333333333333333333333333333333333333', 'key304': '303030303030303030303030303030303030303030303030', 'key305': '313131313131313131313131313131313131313131313131', 'key416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3'} |
#Serpent |
dict_serpent128 = {'msg418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'msg415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': 'F63284B09D2B068CA864AADAE5022ADF', 'cip355': 'E6CBEBD8313EE854739D5ADEA063F42A', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'A88517D3A0BBAE0CB9D7A47B005F2B8F', 'cip359': '3FB64F9080A0649EE0BA983F4C6D85F8', 'cip178': '8E2444DDF34F5320A150471E01AC2F85', 'cip179': '9CB3B00CA62767D7A1D45AF44D74957F', 'cip172': 'C9F389C56576B8C74A687BC5AAB8D503', 'cip173': '3FB63882764779902321A2E594275C6B', 'cip170': 'AA9F1568B6D0F5AFAC34847E0D7152B2', 'cip171': 'A96B20E51FCB48A0C58306086094154B', 'cip176': 'C80F1E35ED81AC45835129665CA5C0B5', 'cip177': '27FE1A77E6BF18887DBF7D48FC1EAB65', 'cip174': '160C3C22EF0B0D3E4F2FDC914138C229', 'cip175': '265AC0BE8E47750E7CA22BAF01153B4D', 'msg188': '00000000000000080000000000000000', 'msg189': '00000000000000040000000000000000', 'msg186': '00000000000000200000000000000000', 'msg187': '00000000000000100000000000000000', 'msg184': '00000000000000800000000000000000', 'msg185': '00000000000000400000000000000000', 'msg182': '00000000000002000000000000000000', 'msg183': '00000000000001000000000000000000', 'msg180': '00000000000008000000000000000000', 'msg181': '00000000000004000000000000000000', 'msg340': '54545454545454545454545454545454', 'msg341': '55555555555555555555555555555555', 'msg342': '56565656565656565656565656565656', 'msg343': '57575757575757575757575757575757', 'msg344': '58585858585858585858585858585858', 'msg345': '59595959595959595959595959595959', 'msg346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'cip16': 'A3C980B5DA0B8E3B32818AF08F5310DA', 'cip17': '12651FD76182C532CD03B36DD121A43A', 'cip14': 'CF5CE38D2033AD6E6891ED24DB39EA66', 'cip15': '3E63AF44877F258840B165CC3D47424C', 'cip12': 'CFBD333352A34ED7F73D3E569D78C693', 'cip13': '5F04350AB2EFB6075F381EE1DBB8477F', 'cip10': '1426ABD1FE61695A62B7A55AB5DA6145', 'cip11': '80C615975140248186BE3CD6FD8D7740', 'cip18': '6D91A4600722340B8ECAE1055B8DF790', 'cip19': '2B1F49C97807430719A958271B5DA303', 'key171': '00000000000000000000000000000000', 'key170': '00000000000000000000000000000000', 'key173': '00000000000000000000000000000000', 'key172': '00000000000000000000000000000000', 'key175': '00000000000000000000000000000000', 'key174': '00000000000000000000000000000000', 'key177': '00000000000000000000000000000000', 'key176': '00000000000000000000000000000000', 'key179': '00000000000000000000000000000000', 'key178': '00000000000000000000000000000000', 'key319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key311': '37373737373737373737373737373737', 'key310': '36363636363636363636363636363636', 'key313': '39393939393939393939393939393939', 'key312': '38383838383838383838383838383838', 'key315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key405': '95959595959595959595959595959595', 'key404': '94949494949494949494949494949494', 'key407': '97979797979797979797979797979797', 'key406': '96969696969696969696969696969696', 'key401': '91919191919191919191919191919191', 'key400': '90909090909090909090909090909090', 'key403': '93939393939393939393939393939393', 'key402': '92929292929292929292929292929292', 'key409': '99999999999999999999999999999999', 'key408': '98989898989898989898989898989898', 'msg409': '99999999999999999999999999999999', 'msg408': '98989898989898989898989898989898', 'msg403': '93939393939393939393939393939393', 'msg402': '92929292929292929292929292929292', 'msg401': '91919191919191919191919191919191', 'msg400': '90909090909090909090909090909090', 'msg407': '97979797979797979797979797979797', 'msg406': '96969696969696969696969696969696', 'msg405': '95959595959595959595959595959595', 'msg404': '94949494949494949494949494949494', 'cip4': '34B355520DF861F3F5C66A2379FBDA15', 'cip5': '5E86BB8F6B1175510C6B244281A0B04A', 'cip6': 'B9213190C7A9C5F13764D29B6DE843A1', 'cip7': '4ECA55033294D1FF6F0204B2456046C8', 'cip0': '264E5481EFF42A4606ABDA06C0BFDA3D', 'cip1': '4A231B3BC727993407AC6EC8350E8524', 'cip2': 'E03269F9E9FD853C7D8156DF14B98D56', 'cip3': 'A798181C3081AC59D5BA89754DACC48F', 'cip8': '97BACE474E820FDEEB1E66D06139D2F9', 'cip9': '114CB849EC2735AEECDB2E51A1C45A38', 'cip341': '7113B6347D1BEF61A1ABFAC6266B742B', 'cip340': '5BC5238384E5215EA05B27369823F13A', 'cip343': 'B2AA117852CEBD61EBB134C1BB5818E5', 'cip342': '2E76A05B140556ACDDC435042390A9A9', 'cip345': '018E19F636DCB8E1E71EF446906B103A', 'msg98': '00000000000000000000000000000000', 'cip347': 'C576DD22DC0AD2693F274C4867CC3C02', 'cip346': 'C657A2E7024A51C7ABC4B97BEA889AAE', 'cip349': 'FDD402F505C7FB226AC3DEBEDA7B823C', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip169': 'B969F1B6F56E885025F12E58F87B4099', 'cip168': '6801BAF0FBAF3352F3950F0940173352', 'cip161': 'E47D5889218FF4CE45EA249EDC9B71C7', 'cip160': 'C1842F4CA2DDC78E55CD91E07AD23A12', 'cip163': '5FBF0927A8B293A04024B187AB1BF6C1', 'cip162': 'FB7566732AB52FE99454CFB07A0F1F0A', 'cip165': 'CD3EEEBA162879FF20ABD158C236E3F3', 'cip164': 'CFFBC514515878E10E07556988D8E721', 'cip167': 'BDB475694748128D9959141682174CAF', 'cip166': 'F96D1082131DAE899EBD32CC562F0BB9', 'msg199': '00000000000000000100000000000000', 'msg198': '00000000000000000200000000000000', 'msg195': '00000000000000001000000000000000', 'msg194': '00000000000000002000000000000000', 'msg197': '00000000000000000400000000000000', 'msg196': '00000000000000000800000000000000', 'msg191': '00000000000000010000000000000000', 'msg190': '00000000000000020000000000000000', 'msg193': '00000000000000004000000000000000', 'msg192': '00000000000000008000000000000000', 'msg359': '67676767676767676767676767676767', 'msg358': '66666666666666666666666666666666', 'msg357': '65656565656565656565656565656565', 'msg356': '64646464646464646464646464646464', 'msg355': '63636363636363636363636363636363', 'msg354': '62626262626262626262626262626262', 'msg353': '61616161616161616161616161616161', 'msg352': '60606060606060606060606060606060', 'msg351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'cip23': '8EFA3AC040AC5235F2F4AC3A82B7018E', 'cip22': '158B5F6CBB33E547735E45559CEF3E5B', 'cip21': '5B8FF678F88EB96FE73BCBF14AD9304B', 'cip20': '9E29DADC12AA1ED228CDC78D70C829B7', 'cip27': '17E352C6C963F7DA5A1CB163ACCB8573', 'cip26': 'D46BA09B00007974C24FC8C0CB13330D', 'cip25': '7511818C4C8408EB0AF22019DDF7F6F6', 'cip24': '50AA945A945A8BE43E4C137F0D7CA62A', 'cip29': 'AD351E157AFC89A9C0D8CF15DDBF3A7D', 'cip28': '6CED1C994D0F7B2862715D514840A780', 'cip352': '29117FA8B347C7A9A4CE899C5A546548', 'cip353': '6BD6EFD76B760609F786753E0C9DAA12', 'cip350': '498CD0B199A3D7FFDE132B44DB20D8DE', 'cip351': '78F3E0CF077ECFDDC2A52F28A2BD0828', 'cip356': 'FC29321AF873B7F65BFA66103CA960B6', 'cip357': '3EC850EE464D2084E4C33B5072EC7DC2', 'key148': '00000000000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'key144': '00000000000000000000000000000000', 'key145': '00000000000000000000000000000000', 'key146': '00000000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'key140': '00000000000000000000000000000000', 'key141': '00000000000000000000000000000000', 'key142': '00000000000000000000000000000000', 'key143': '00000000000000000000000000000000', 'key430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key324': '44444444444444444444444444444444', 'key325': '45454545454545454545454545454545', 'key326': '46464646464646464646464646464646', 'key327': '47474747474747474747474747474747', 'key320': '40404040404040404040404040404040', 'key321': '41414141414141414141414141414141', 'key322': '42424242424242424242424242424242', 'key323': '43434343434343434343434343434343', 'key328': '48484848484848484848484848484848', 'key329': '49494949494949494949494949494949', 'msg502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'msg507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'cip488': '51094B8DD6D357EA7BCD4A70AB148DCF', 'cip489': '6F94D10569A2D4E911D88493A757ADB8', 'cip482': '6E13DB429B9F11618C9201F8FCE986F8', 'cip483': '781B7DCD5AA2A773586E43816CD0156D', 'cip480': '7461AEAB059182BE62CF3D6A04C99AD8', 'cip481': 'A251481E0DB2C65A80C5765017575551', 'cip486': '1AF2F44B2FE11A0138232245E0372583', 'cip487': '47DCFCBFB9C6D51DD02A8CA38EE30462', 'cip484': 'B54A1570C73639E3A1799116ADCD109B', 'cip485': 'B9CF1DAF99FE593DCC840B4EBA7460E3', 'msg218': '00000000000000000000002000000000', 'msg219': '00000000000000000000001000000000', 'msg216': '00000000000000000000008000000000', 'msg217': '00000000000000000000004000000000', 'msg214': '00000000000000000000020000000000', 'msg215': '00000000000000000000010000000000', 'msg212': '00000000000000000000080000000000', 'msg213': '00000000000000000000040000000000', 'msg210': '00000000000000000000200000000000', 'msg211': '00000000000000000000100000000000', 'cip378': '242491C4A74BAE34EFD1C1F2B110156E', 'cip379': 'FE0647492C2E820F70030FDC7B26BE91', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': 'D408A940C87BD22AFD6037CE68486067', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': '373C7DB642302E74A1348B7C890AA164', 'cip396': '3905397B0D4DE6E95F4A8BD587DA58F8', 'cip397': '2250AB3B666DEEFC346D1DAB7E2CE09E', 'cip394': 'EAFC5BBE584E87D8FFD5520CA3002CE8', 'cip395': '1BC5B6D54B80C84688E2BD7C647D8EA5', 'cip392': '4E6CD7AEAFC8F51CF438029F42A43DEC', 'cip393': 'AA481BE373338B5EA19ED4932F9C1A81', 'cip390': 'C3DCD2DAC02FA812F9B8A109E8D80C77', 'cip391': 'C57A0A8D9201040267FF1F866B6237EB', 'cip398': '8243E0EFCED8E173AA64FE34A4BB2043', 'cip399': 'C169078C4C77D3D985EF66D5B3A4E6FA', 'msg328': '48484848484848484848484848484848', 'msg329': '49494949494949494949494949494949', 'msg322': '42424242424242424242424242424242', 'msg323': '43434343434343434343434343434343', 'msg320': '40404040404040404040404040404040', 'msg321': '41414141414141414141414141414141', 'msg326': '46464646464646464646464646464646', 'msg327': '47474747474747474747474747474747', 'msg324': '44444444444444444444444444444444', 'msg325': '45454545454545454545454545454545', 'cip154': 'F20B001C13A0F857FB89C64FFF4CDA83', 'cip155': 'F38EE20A32B15A5B9129B67BA1FF3125', 'cip156': '41ED367E96E013C651AF3FAEA764FE40', 'cip157': '55C30FBD291D89E50A9DADCB48E52296', 'cip150': 'E9732D7A112DE03068EC10D10AF8D972', 'cip151': '1D17312BE6675B0797C5175DDCC1DE7E', 'cip152': 'A5E0C2E39B9821F2CD42875B0EC0A65E', 'cip153': 'A1397FFDA7C2A4E9A60E0AB48947B933', 'cip158': '3FE7F1A404C0E4395FCC985F369735D4', 'cip159': '6E131502B6A4F30B56AA52EB67989809', 'cip38': '6C4FCEEFF2768549EA590FC20310B95D', 'cip39': 'FC46909BE47E944F4776956A98E9C43B', 'cip34': '72F3659183D9749128AE6CAFBEAADDE5', 'cip35': '77DD6EA2D669A36E4C409564A8604EC4', 'cip36': '27D4EC7E2AE30CBE54B7CE9F764E3D27', 'cip37': '0D68C4922498D08BFEFA450B85659D23', 'cip30': '79AFB080BADC325DA8C5E88200743603', 'cip31': 'D326FEA25FE2CA220CEC62DB9574AAFD', 'cip32': '7435911B23F1DBACA5BF86C91B0D11B1', 'cip33': '79E59CE5B78A6D8259B2AD1B5F50F523', 'key159': '00000000000000000000000000000000', 'key158': '00000000000000000000000000000000', 'key153': '00000000000000000000000000000000', 'key152': '00000000000000000000000000000000', 'key151': '00000000000000000000000000000000', 'key150': '00000000000000000000000000000000', 'key157': '00000000000000000000000000000000', 'key156': '00000000000000000000000000000000', 'key155': '00000000000000000000000000000000', 'key154': '00000000000000000000000000000000', 'key429': 'ADADADADADADADADADADADADADADADAD', 'key428': 'ACACACACACACACACACACACACACACACAC', 'key427': 'ABABABABABABABABABABABABABABABAB', 'key426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key337': '51515151515151515151515151515151', 'key336': '50505050505050505050505050505050', 'key335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key339': '53535353535353535353535353535353', 'key338': '52525252525252525252525252525252', 'msg511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg512': '00112233445566778899AABBCCDDEEFF', 'cip499': '2F46D95D6D25791FDA09C1E503E9566B', 'cip498': 'FA94663C5C0F660B39DDC1189DA09FC9', 'cip491': '06E1609FD3BC7C33D0C2BDD3B46F2A3B', 'cip490': 'DE905E9FA7B1EE84E29113B98078ACFB', 'cip493': '584DCDFC72000E4035FC9EECAACFCF89', 'cip492': 'DC5A1E0B000C5E91ADC6DF83CDC7FF78', 'cip495': '970C3BB7760251463CB3AA412BB0B4E8', 'cip494': 'E65041269FADE5588AF5A044C0DFBCB1', 'cip497': 'F63EE17EAFFB3D08F973E7E70072266C', 'cip496': '2CF1433C1B5DB42882255D1C4705E59D', 'msg209': '00000000000000000000400000000000', 'msg208': '00000000000000000000800000000000', 'msg205': '00000000000000000004000000000000', 'msg204': '00000000000000000008000000000000', 'msg207': '00000000000000000001000000000000', 'msg206': '00000000000000000002000000000000', 'msg201': '00000000000000000040000000000000', 'msg200': '00000000000000000080000000000000', 'msg203': '00000000000000000010000000000000', 'msg202': '00000000000000000020000000000000', 'cip369': 'C518589021D783FD30617AA6E22E8419', 'cip368': 'F0E795E437BE07332E777EB4A2CA18F4', 'cip363': 'C2E3BF83E2A94E776D216E079472A792', 'cip362': '4BAF4E9D2D30921BD09FF58871961F46', 'cip361': '2CA8018408BF5A6F0653DE69E9AB4C23', 'cip360': '1F5EC3E78ADA38C7C2A874D777E5C47A', 'cip367': 'A9CAD0B9D6EA5C241882FCC70434CBD1', 'cip366': '02E540157EC71EEE5A20FE40F9337BBF', 'cip365': 'C884208DA1A05932109602B969349B54', 'cip364': 'EBB64A42067013DEC1DCE3197A1E478D', 'cip425': '87AFF541F18316E02E020DBC78C97F76', 'cip385': 'AB1C9035B040DD6113D083283CA6BAAB', 'cip384': 'C4FAF7787CABBF3EAA8995592638E1D1', 'cip387': 'F40DABF93E41C5EC5A5786F704B7DC34', 'cip386': 'A64ED14F4D91A1BF278F7567E5DCCEC9', 'cip381': 'A080B58F3C824C4695E7F595181882B4', 'cip380': '037BBA00BE778BE88B9C5266F1CA249A', 'cip383': '279957819359DE247D1E399DE541BDEC', 'cip382': '4AFC161FD6FA20D44B3C85A9876CD716', 'cip389': '20BA1C8B044E44306B5DA155C4E66475', 'cip388': '3DBAFDA4D53AAFEB3991849CFE08A2E7', 'cip423': '4CF3189FE08EB2CE97D6A206E088EB06', 'msg339': '53535353535353535353535353535353', 'msg338': '52525252525252525252525252525252', 'msg331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg337': '51515151515151515151515151515151', 'msg336': '50505050505050505050505050505050', 'cip143': 'BFF82E042A92224FBD3D41C22D07B610', 'cip142': '6C2C4F22E738C56B5246971540E5E3A1', 'cip141': '5F93FBFB11A527DFDFB5E4713E431E34', 'cip140': 'DE2FCC081DF9B136EC62922351E18D94', 'cip147': '87DCE0F133442B7D4FAF7082F5489407', 'cip146': '1DFF6937399E060342348C34E88B5985', 'cip145': '7C6DF10118A3AB6545A504790543C89E', 'cip144': '3EA36D91871DFF568FBE623DC31EBCE5', 'cip149': 'DF23BC0E0C0B7F502E0210AF8B353165', 'cip148': 'CBEF868AE34C80C542766358534A148B', 'cip49': '32B7E10E04100FCDA94DC223BBC19075', 'cip48': '1F6213DC933AEF4C582AAD041E140619', 'cip41': '548091B07326BF829BA56C786053727F', 'cip40': '77679D9E63DB7DF79C0484423FA18A57', 'cip43': '627F14CA091AC156FB56302D6C3373DC', 'cip42': 'A8FA704EE06EEED6F7F71A598EF921FB', 'cip45': 'CC7F5DF0CF522B2242163112E4421D08', 'cip44': 'BC2CAB97EB09919CBC0E6AFEC6581CF5', 'cip47': 'D3C6597474B740BA1053090A247AB5C5', 'cip46': '084AC3BF07F1E64F0093A014C2690CE5', 'key180': '00000000000000000000000000000000', 'key181': '00000000000000000000000000000000', 'key182': '00000000000000000000000000000000', 'key183': '00000000000000000000000000000000', 'key184': '00000000000000000000000000000000', 'key185': '00000000000000000000000000000000', 'key186': '00000000000000000000000000000000', 'key187': '00000000000000000000000000000000', 'key188': '00000000000000000000000000000000', 'key189': '00000000000000000000000000000000', 'key458': 'CACACACACACACACACACACACACACACACA', 'key459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'cip330': '75044F932FEACE44942A86E3975436B9', 'cip331': 'BEF793629AEA8CD254AD999B045DFCDE', 'cip332': '76720F5BF5DBFE75B575164BE3B739C0', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000000000000000000020000', 'msg239': '00000000000000000000000000010000', 'msg230': '00000000000000000000000002000000', 'msg231': '00000000000000000000000001000000', 'msg232': '00000000000000000000000000800000', 'msg233': '00000000000000000000000000400000', 'msg234': '00000000000000000000000000200000', 'msg235': '00000000000000000000000000100000', 'msg236': '00000000000000000000000000080000', 'msg237': '00000000000000000000000000040000', 'msg304': '30303030303030303030303030303030', 'msg305': '31313131313131313131313131313131', 'msg306': '32323232323232323232323232323232', 'msg307': '33333333333333333333333333333333', 'msg300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'msg301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg308': '34343434343434343434343434343434', 'msg309': '35353535353535353535353535353535', 'cip58': 'AAB52A0482E0A1B84EF07213F8BCF63F', 'cip59': 'E477DDE4A88A17339157E4198DC39801', 'cip52': 'B56126C52D0DD2B8FDC5C4A05091F2B1', 'cip53': '6FF5B6F133BEB75DDDD0385F9B3AEEE5', 'cip50': '72FA9C8731E45CF575CFFEBD6F3981C5', 'cip51': 'AEE9355B2FBD96A06F8F74DC8882E893', 'cip56': 'A5B8DF0ABDBA5DA09B8D8383F06957E2', 'cip57': '344B6F348ADA08FF4E97C722463DCB08', 'cip54': '6541C5BCE4B3F93F4EC1E7DFED0F98DB', 'cip55': 'BF9ED60D8A243F1E010345537A5C081D', 'key199': '00000000000000000000000000000000', 'key198': '00000000000000000000000000000000', 'key197': '00000000000000000000000000000000', 'key196': '00000000000000000000000000000000', 'key195': '00000000000000000000000000000000', 'key194': '00000000000000000000000000000000', 'key193': '00000000000000000000000000000000', 'key192': '00000000000000000000000000000000', 'key191': '00000000000000000000000000000000', 'key190': '00000000000000000000000000000000', 'key449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key442': 'BABABABABABABABABABABABABABABABA', 'key445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg227': '00000000000000000000000010000000', 'msg226': '00000000000000000000000020000000', 'msg225': '00000000000000000000000040000000', 'msg224': '00000000000000000000000080000000', 'msg223': '00000000000000000000000100000000', 'msg222': '00000000000000000000000200000000', 'msg221': '00000000000000000000000400000000', 'msg220': '00000000000000000000000800000000', 'msg229': '00000000000000000000000004000000', 'msg228': '00000000000000000000000008000000', 'cip503': '77E43406A64DBCB8EED2E254DA5EE9CF', 'cip502': 'AC05403A90781B4855613CE169FA1919', 'msg313': '39393939393939393939393939393939', 'msg312': '38383838383838383838383838383838', 'msg311': '37373737373737373737373737373737', 'msg310': '36363636363636363636363636363636', 'msg317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'msg319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'msg318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'cip67': 'BF4FE13163EA85E003EF8E9D4BAF48C8', 'cip66': 'CE277A5063C40BA1418A30721A0DE8AF', 'cip65': '94EF7F345D1FF0DB4494D9DB56ADFFED', 'cip64': '230375EE7B65A2C948809B6DE69D1F50', 'cip63': '83ACED5FB21035A41B858136D4797BEE', 'cip62': 'B2B67CDC8371B5739F5E213FDD8B60EC', 'cip61': '2C06278683B5759C12B147DE2B0E0BB1', 'cip60': '33401CDFBECCF499B3226B4C6AD8FDDF', 'cip69': '6F31A90BCEEA0BC85843086C7258EA9E', 'cip68': 'C8F9F9F1DB54EB0635C227CAE447055C', 'cip229': '98E2FBF128A1E2F80CABF2DB3F9E62AF', 'key298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key294': '26262626262626262626262626262626', 'key295': '27272727272727272727272727272727', 'key296': '28282828282828282828282828282828', 'key297': '29292929292929292929292929292929', 'key290': '22222222222222222222222222222222', 'key291': '23232323232323232323232323232323', 'key292': '24242424242424242424242424242424', 'key293': '25252525252525252525252525252525', 'key508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key276': '14141414141414141414141414141414', 'key277': '15151515151515151515151515151515', 'key274': '12121212121212121212121212121212', 'key275': '13131313131313131313131313131313', 'key272': '10101010101010101010101010101010', 'key273': '11111111111111111111111111111111', 'key270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key278': '16161616161616161616161616161616', 'key279': '17171717171717171717171717171717', 'key474': 'DADADADADADADADADADADADADADADADA', 'key475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg252': '00000000000000000000000000000008', 'msg253': '00000000000000000000000000000004', 'msg250': '00000000000000000000000000000020', 'msg251': '00000000000000000000000000000010', 'msg256': '00000000000000000000000000000000', 'msg257': '01010101010101010101010101010101', 'msg254': '00000000000000000000000000000002', 'msg255': '00000000000000000000000000000001', 'msg258': '02020202020202020202020202020202', 'msg259': '03030303030303030303030303030303', 'msg494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg492': 'ECECECECECECECECECECECECECECECEC', 'msg493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': 'BB36013C6A6D8F002AF79C66C49FA3F4', 'cip289': 'DC4E0A9B747E0DD80FBBE8D8A93AACF2', 'cip284': '9FE45EA709FEBB92E010B6CDE4A2BFE8', 'cip285': 'AF328CC432AFAA667327A572E5033028', 'cip286': 'A643FB28B9D80B8851A1C18844337115', 'cip287': 'A511F49C5090940AB1FD1AF29EBAF572', 'cip280': 'BB737A0A2883FB4F9ABEF0321CBB3AEE', 'cip281': '7C7683199FCD0F0FD9F54D4BAFD6B294', 'cip282': '50EC96EEA22958475952B818D2910039', 'cip283': '14AF43ED3889BCC4F1E6F2FF0FD7213A', 'msg75': '00000000000000000000000000000000', 'cip448': '011D6B57726FEFAAACFC6023FB4378A3', 'cip449': '57B683712E875783C663BB782B14B535', 'cip446': '51589B5DD5BE085ADD20B6AF045C56F2', 'cip447': 'AF39614E747B9331C38B797F527EBEA6', 'cip444': 'B0C59FCBB2F82A70E3433B2520F9B893', 'cip445': 'B0D389F14350C51DBD46F7D3A573795A', 'cip442': '7B1789F480CA9DC50AEDD40728C6C091', 'cip443': 'E5374AD88614078345CC61B6E509AA57', 'cip440': '36940CFCAD524EB5F08AB575CC40EBCD', 'cip441': '5434C12EF2078008B755CB85C9F4382E', 'cip266': '24C2085D5F78454F0DB8F536B27C65B0', 'cip267': 'FF3182308D26F37FE14C7CD14CE0A520', 'cip264': 'D36720D269BF938975611E5CB6B10E45', 'cip265': '7DD44AFBD27D3061C5BF49A114B84356', 'cip262': '1884971F41D8E20AA962913083C71829', 'cip263': '7BB8BAFFE29DA9BD6B2424597F976DE8', 'cip260': '496EC57B85F33B9E4105534DE17F3128', 'cip261': '5808C3C634C0ED8C92B29516DAE1EC2E', 'cip268': '64A5797718F05FCE1F475A0B7BB84BBB', 'cip269': '97DCB6200AF23400E00EFF6C3D4BD40E', 'cip198': 'C0380B9660722514C1EA4322FE45955C', 'cip199': '66521E5F953F2D2E237A259BDEE9C400', 'cip190': 'E521E33E82289A176467E24CBAD5D92C', 'cip191': '9609C701F895754A623D3BF3EAC48334', 'cip192': '986EFA59113F5C8A66BBAA7EF978A125', 'cip193': 'B8CB15A238CA60157C3CB3317021B92C', 'cip194': 'F262212AC5485BA7D92CBF5A9C58D8AD', 'cip195': 'DF54C6D917675E73A3659560D5813E56', 'cip196': '925D0E759AF1EB36CEEB0FB6D51FAB7A', 'cip197': '99BC9E5870190269C4FE5B6FC23C8D8C', 'cip70': '334EFC7C6930BC0B839C845E1B22F8C3', 'cip71': '1E92F9F2E576C864A24F36402F84107D', 'cip72': '8D646E78DC20F616A859074DE82D1107', 'cip73': 'E98DE4AAAC62C1E4251054B42D92F4C3', 'cip74': 'B0FC458F4759641C6FA64FED926C8347', 'cip75': '61F381FA99E58E9B3CEBCBADDE6559D2', 'cip76': '2C7EAF752E2B02734A3C3506CDA4867D', 'cip77': '600F284E1AB1C8194D6FE065DBDF1BBF', 'cip78': 'DB84C4BA65B89D0CD51BE73605084568', 'cip79': '4C75C41A4ABC17E0ADC00228394F0037', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'key289': '21212121212121212121212121212121', 'key288': '20202020202020202020202020202020', 'key283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key281': '19191919191919191919191919191919', 'key280': '18181818181818181818181818181818', 'key287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key512': '000102030405060708090A0B0C0D0E0F', 'key511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key265': '09090909090909090909090909090909', 'key264': '08080808080808080808080808080808', 'key267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key261': '05050505050505050505050505050505', 'key260': '04040404040404040404040404040404', 'key263': '07070707070707070707070707070707', 'key262': '06060606060606060606060606060606', 'key269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key462': 'CECECECECECECECECECECECECECECECE', 'key461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'cip510': 'DCAFAFAF80E044DF6582C735E63479A3', 'cip511': '2DEE675B6B7401367DA2A80FB44B8065', 'cip512': '563E2CF8740A27C164804560391E9B27', 'msg241': '00000000000000000000000000004000', 'msg240': '00000000000000000000000000008000', 'msg243': '00000000000000000000000000001000', 'msg242': '00000000000000000000000000002000', 'msg245': '00000000000000000000000000000400', 'msg244': '00000000000000000000000000000800', 'msg247': '00000000000000000000000000000100', 'msg246': '00000000000000000000000000000200', 'msg249': '00000000000000000000000000000040', 'msg248': '00000000000000000000000000000080', 'msg483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'msg489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'cip299': 'C631E4B4C54445849A063463053292F4', 'cip298': '15181869D61F4EF057037FAC366E8CD1', 'cip293': 'B7E011540F04E4ABFE34ADC98471CA2A', 'cip292': 'D3BCFFC66518DA572CF0E27E6A8C9B3C', 'cip291': '8087BBCEABA5BD66DC37EC8C00106B27', 'cip290': '18FC1DB652B198ACCF681E20F80EC885', 'cip297': '77B7254AA1EF4FC2C2319EABD17FB105', 'cip296': '0C46350BA4F09162952BC4A82B929A07', 'cip295': '5E9448B640F0CAEE9D70E158DC943CD9', 'cip294': 'D6C7A8C0802985DC9FB1FF85C6B69D89', 'cip459': '3B27FA81385C2E2417953DC786E99CA4', 'cip458': '5301A78E6CF4DBEFDF42D543A4F2A2B1', 'cip455': 'C86051C427E4095E021BE9A171B8B984', 'cip454': 'A6C8D16F7245CFB032B848939EB52E6F', 'cip457': 'AB202FD3C2D36403DE12951DC511F8C7', 'cip456': '620F4EC62D4A667C973B3B8F7FE016C3', 'cip451': '4AE1DA4EF3BF9EBBAC9CF114162F2445', 'cip450': 'EA7D8F0B95A47F7485DEAAB131AAB5E4', 'cip453': '63066FF48752B574976AAF22F121CC7F', 'cip452': '55434E0CB86BBBB04805BA85D480C0FE', 'cip275': '873C11712228256B52DE6E7C7CF3EA0F', 'cip274': '933E63A78E6AA1216A1B1CE2559D42BF', 'cip277': '7947EC0F52D77C7EC093736E213F56FE', 'cip276': 'E696C89DB8CD674BF7D2825AACA540F7', 'cip271': '4FF63965D45FFEAF4F1CE43D9163F833', 'cip270': '823AD8FAF56C0116B9215C8109DFDBBE', 'cip273': 'F84F5C8EEEA4D3527F734428F4B3AED6', 'cip272': '185EFBCD1AC2EFF75CF764F05CFAFD33', 'cip279': '14105E6C6B085CC03E3153AE2BA0E222', 'cip278': '12DD34CD1E4A581EBAB03F56C6C43692', 'cip187': '6CAC3A5E20E13162FB3A31804CB6C7AE', 'cip186': 'CF4D5EAD4E69313709EA9399F5ABF8D9', 'cip185': 'A11495F4358A5FA63024A2DC02E20480', 'cip184': '1EB43E99040A614F77361601A1806651', 'cip183': 'DCA8A545689A58F663B0B7A540F41E24', 'cip182': 'F9DED80456581D2E6F09BDB09B77C04A', 'cip181': '4CCD47A10722175D4018709698E52881', 'cip180': 'A07252FB0F05EA2264F558BDDF162BBB', 'cip189': 'B2FFBF55E5E2E0CB0935504430E173F8', 'cip188': 'BFEE053ED49F33F5A388359721FE20FA', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': 'DD4FF8498D45936888B48EEFD24CE9F6', 'cip88': '8F8827ED63EAFC702A4C7F855E6806A0', 'cip85': '79C577AC301DE5ED03AD6D0AACB1D958', 'cip84': 'E76340173FDA4B6F1E2703A732C4C482', 'cip87': '6C87E4E87CB3773520F7B3EDB51DAEAF', 'cip86': 'A2A8D78F3511B65EA03262314F0C8F8A', 'cip81': '80DF5AD31BF557F9C75701B1395C4AD2', 'cip80': 'A4F7B40448470061B7873A62072CE112', 'cip83': '72BABC19EE59F6F76F17DDFBE2FCC33A', 'cip82': '46CE4708ABA4835764EA9C4678335954', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg99': '00000000000000000000000000000000', 'cip344': 'D1E1AA0D0134CADD6397DE019CE96022', 'msg95': '00000000000000000000000000000000', 'cip348': 'FBCF5254704605256035282E822E8E90', 'key250': '00000000000000000000000000000000', 'key251': '00000000000000000000000000000000', 'key252': '00000000000000000000000000000000', 'key253': '00000000000000000000000000000000', 'key254': '00000000000000000000000000000000', 'key255': '00000000000000000000000000000000', 'key256': '00000000000000000000000000000000', 'key257': '01010101010101010101010101010101', 'key258': '02020202020202020202020202020202', 'key259': '03030303030303030303030303030303', 'key382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key386': '82828282828282828282828282828282', 'key387': '83838383838383838383838383838383', 'key384': '80808080808080808080808080808080', 'key385': '81818181818181818181818181818181', 'key388': '84848484848484848484848484848484', 'key389': '85858585858585858585858585858585', 'key498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key492': 'ECECECECECECECECECECECECECECECEC', 'key493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg278': '16161616161616161616161616161616', 'msg279': '17171717171717171717171717171717', 'msg274': '12121212121212121212121212121212', 'msg275': '13131313131313131313131313131313', 'msg276': '14141414141414141414141414141414', 'msg277': '15151515151515151515151515151515', 'msg270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg272': '10101010101010101010101010101010', 'msg273': '11111111111111111111111111111111', 'msg478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'msg479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'msg474': 'DADADADADADADADADADADADADADADADA', 'msg475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'cip468': '83C8763AFA8DE421C342F32BD629AC75', 'cip469': 'FA233028F802E83AB504F7DD7D6FB5E3', 'cip460': 'AF9CBDE0670139E9258679C6B5766C95', 'cip461': '101DDE12CA5BBF7BE513420B32C7A127', 'cip462': '66593841189BA1488BB1504C2216CF32', 'cip463': '6FCC6695110BE607CC44C21BBCD4D996', 'cip464': '63193BFB6ADFE1A4905D3ED30B6C0AEF', 'cip465': '3BCCFCADB080E312897026B662A2172E', 'cip466': '81D44F913E6FA1C8E07782870E0909B9', 'cip467': 'F34B4A3FBE6C419157F3BB73309C96C9', 'cip240': 'A174B66C47C53B2C34AA9F06FECBB7B2', 'cip241': '333827335F88EBB93A0A7436E51398F0', 'cip242': '03A7D7D70F4F50AE96835F12B73F79D3', 'cip243': 'B8B9F2029769952D9664A6FDE9706BBF', 'cip244': 'A7DCE248EC5A060388CA14598B986454', 'cip245': '1A21EED739C6C39A56E0B4C6A17D3375', 'cip246': '9073DBCF760A0B9E0E84A2FD6DF164F9', 'cip247': 'CEE83B85568AD8133D8842DC883052CE', 'cip248': '4AE9A20B2B14A10290CBB820B7FFB510', 'cip249': '2C6EE9F8F64B5B1B5587CDF17E84A791', 'msg296': '28282828282828282828282828282828', 'msg297': '29292929292929292929292929292929', 'msg294': '26262626262626262626262626262626', 'msg295': '27272727272727272727272727272727', 'msg292': '24242424242424242424242424242424', 'msg293': '25252525252525252525252525252525', 'msg290': '22222222222222222222222222222222', 'msg291': '23232323232323232323232323232323', 'msg298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'cip98': 'ED735C651F003ABCAFE1926472E0CC32', 'cip99': '970CDDD5BCCAE7F7BD0F7B67B6707580', 'cip96': '573FB9B1E047670331D54E87F3BDD48D', 'cip97': '03CF30E2ED5C9311F6BF9964C8A7DBB8', 'cip94': 'B9F43C559CCB8C1933FD323ED51AF997', 'cip95': 'D11D4485EB7AAA6CB1A8F16E24ECDE7A', 'cip92': '9EEC294CEBAEFC664DFA9D1C8B48B0B2', 'cip93': 'CAFB5B1D66E147006DB2E4CFC8405DA3', 'cip90': 'DE8BF1BCB7C106D93AA60C744240651F', 'cip91': 'FC45CB6A1B9267A8B330FC1399BC0F34', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '80000000000000000000000000000000', 'msg129': '40000000000000000000000000000000', 'key249': '00000000000000000000000000000000', 'key248': '00000000000000000000000000000000', 'key247': '00000000000000000000000000000000', 'key246': '00000000000000000000000000000000', 'key245': '00000000000000000000000000000000', 'key244': '00000000000000000000000000000000', 'key243': '00000000000000000000000000000000', 'key242': '00000000000000000000000000000000', 'key241': '00000000000000000000000000000000', 'key240': '00000000000000000000000000000000', 'key391': '87878787878787878787878787878787', 'key390': '86868686868686868686868686868686', 'key393': '89898989898989898989898989898989', 'key392': '88888888888888888888888888888888', 'key395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg263': '07070707070707070707070707070707', 'msg262': '06060606060606060606060606060606', 'msg261': '05050505050505050505050505050505', 'msg260': '04040404040404040404040404040404', 'msg267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg265': '09090909090909090909090909090909', 'msg264': '08080808080808080808080808080808', 'msg469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'msg465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'msg461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg462': 'CECECECECECECECECECECECECECECECE', 'cip509': '81F9163BDF39B5BB2932AB91DF2A5FFC', 'cip508': '831859AA5925E7CCC84D9520676DF18B', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'cip477': 'A00F780539C02164125535464A047DAD', 'cip476': 'AF21417BEFB3375C67CDDF17AB000F29', 'cip475': 'C1AD56BF3C66A6688853D00905D34C11', 'cip474': 'D08C89CF7EA42955B2E45CE732E965D0', 'cip473': '20EA07F19C8E93FDA30F6B822AD5D486', 'cip472': '48C76D0783F8A6D195F5297AC0388FAF', 'cip471': '0F27D294EE2FDDB4F3C46408D8593362', 'cip470': '9B69B68E43C5367FBA81BA0893BA7B94', 'cip479': '92D6FB2F3DD8DA87B5614DA91AA4F8AC', 'cip478': 'C82B177FC8E9988825A4C2F1385882E1', 'cip259': '1F830AF7D2A1B18F7A011C6FD0EEE8FB', 'cip258': '1AE5355487F88F824B6462B45C4C6AA5', 'cip257': '5107E36DBE81D9996D1EF7F3656FFC63', 'cip256': '3620B17AE6A993D09618B8768266BAE9', 'cip255': '9BEDCEA16BDE863526A937208CBF0ABC', 'cip254': '0C5DABB01245E3A3544E291F3B0F250F', 'cip253': 'B598247AA82F5C79F9FF0E7EC61B83C4', 'cip252': '1587FF28ABDF9DF5A3F4DAF7405D273B', 'cip251': '2AE6E19905D89A8E53A1DF26AD5C89B4', 'cip250': '29141D06A6B42CE22EFB8383CEAE325D', 'msg285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'msg281': '19191919191919191919191919191919', 'msg280': '18181818181818181818181818181818', 'msg283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg289': '21212121212121212121212121212121', 'msg288': '20202020202020202020202020202020', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'msg139': '00100000000000000000000000000000', 'msg138': '00200000000000000000000000000000', 'msg137': '00400000000000000000000000000000', 'msg136': '00800000000000000000000000000000', 'msg135': '01000000000000000000000000000000', 'msg134': '02000000000000000000000000000000', 'msg133': '04000000000000000000000000000000', 'msg132': '08000000000000000000000000000000', 'msg131': '10000000000000000000000000000000', 'msg130': '20000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '00000000000000000000000000000000', 'key239': '00000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'key232': '00000000000000000000000000000000', 'key233': '00000000000000000000000000000000', 'key230': '00000000000000000000000000000000', 'key231': '00000000000000000000000000000000', 'key236': '00000000000000000000000000000000', 'key237': '00000000000000000000000000000000', 'key234': '00000000000000000000000000000000', 'key235': '00000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '00000000000000000000000000000000', 'key129': '00000000000000000000000000000000', 'key126': '00000000000000000000000000000002', 'key127': '00000000000000000000000000000001', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'key346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key344': '58585858585858585858585858585858', 'key345': '59595959595959595959595959595959', 'key342': '56565656565656565656565656565656', 'key343': '57575757575757575757575757575757', 'key340': '54545454545454545454545454545454', 'key341': '55555555555555555555555555555555', 'key348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'msg458': 'CACACACACACACACACACACACACACACACA', 'msg459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'msg450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'msg451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'key149': '00000000000000000000000000000000', 'cip402': '9BF43D3DE9AFE886D205C10A4203C76A', 'cip403': 'D9B03E777B9FC287D521B8217661359E', 'cip400': '7F30697EF540F85638AACFA683753038', 'cip401': '5B027C49EE0253EA4997C7FBA69AEFE0', 'cip406': 'DD0949D0EDFA622C8D39FD916605D692', 'cip407': '36F4ACAC85A2A7CD0A383C3D5AB204F3', 'cip404': '1CFD3563B98179AA5CF8F4A517F50DC5', 'cip405': '4CA42C179888E806B5CDFE5AFD21D1E9', 'cip408': 'BB86594991B56F3FCA388449D17DFD9D', 'cip409': 'E5FC87E797737036560BF498EC559A2C', 'cip228': 'C12E44B3F253295CF742441FFA2712DB', 'key147': '00000000000000000000000000000000', 'cip222': '57A991425DC55325EB159A0274140EFA', 'cip223': '856CD3630F436DACD3FE27AB73F4A956', 'cip220': 'B30C571F161EF0DAC78816A4DC1339FF', 'cip221': '214CB9151303EDA5CD14E35E701DE887', 'cip226': '81B2AF04CC40E2E3DDFFBE3F6AEF8A33', 'cip227': '6970437809D0A34E5A76B22F88F5282B', 'cip224': '3EB8325BCA6C583DC04019F01D4BC90D', 'cip225': '240A1E99A51C7EED2E9127DB7D86903E', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': 'EFE8F7F507CAD557A7D70200051A9443', 'cip319': 'B53598AC68303A7013850C82B12AC114', 'cip316': 'BD2DBD2EB4193A2773CDB9906A34376D', 'cip317': 'FE0139D7DDE3CB197D4CDC770C0089BB', 'cip314': '242585CEBBA8B0C305A356393F2A3AD5', 'cip315': 'D22C029E52C0385105AAD7BD8EA789C5', 'cip312': '32F860F0424C2A550489301A1EAC2F18', 'cip313': '5BC2D4054CE071EF6855D5596F3700FA', 'cip310': '75F16BB0872EE866388E7FF5BC4AD3A3', 'cip311': '460EC241B2050E61EC38A7BF70E4CFF4', 'cip136': '0DB0D17349C89E090C845CBEF963F225', 'cip137': 'C7128FD1A5EF5202550873EA885551C5', 'cip134': '69DD947EFADCD15A06A0D79E078B35AE', 'cip135': '32F1FA100E43561146DCA08D15B90636', 'cip132': 'CEE3C6CE66A7AC0C1767923B263B2EBD', 'cip133': '88DE61FFC3AD277687626D5F7705DEF3', 'cip130': '8F773194B78EF2B2740237EF12D08608', 'cip131': '8B1EA69EE8D7C8D95B1DE4A670EC6997', 'cip138': '761D7F9855C95AB6148833503958F96E', 'cip139': '1D406059F0E1030FA66C52A46751D092', 'msg148': '00000800000000000000000000000000', 'msg149': '00000400000000000000000000000000', 'msg142': '00020000000000000000000000000000', 'msg143': '00010000000000000000000000000000', 'msg140': '00080000000000000000000000000000', 'msg141': '00040000000000000000000000000000', 'msg146': '00002000000000000000000000000000', 'msg147': '00001000000000000000000000000000', 'msg144': '00008000000000000000000000000000', 'msg145': '00004000000000000000000000000000', 'key229': '00000000000000000000000000000000', 'key228': '00000000000000000000000000000000', 'key221': '00000000000000000000000000000000', 'key220': '00000000000000000000000000000000', 'key223': '00000000000000000000000000000000', 'key222': '00000000000000000000000000000000', 'key225': '00000000000000000000000000000000', 'key224': '00000000000000000000000000000000', 'key227': '00000000000000000000000000000000', 'key226': '00000000000000000000000000000000', 'key139': '00000000000000000000000000000000', 'key138': '00000000000000000000000000000000', 'key135': '00000000000000000000000000000000', 'key134': '00000000000000000000000000000000', 'key137': '00000000000000000000000000000000', 'key136': '00000000000000000000000000000000', 'key131': '00000000000000000000000000000000', 'key130': '00000000000000000000000000000000', 'key133': '00000000000000000000000000000000', 'key132': '00000000000000000000000000000000', 'key355': '63636363636363636363636363636363', 'key354': '62626262626262626262626262626262', 'key357': '65656565656565656565656565656565', 'key356': '64646464646464646464646464646464', 'key351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key353': '61616161616161616161616161616161', 'key352': '60606060606060606060606060606060', 'msg20': '00000000000000000000000000000000', 'key359': '67676767676767676767676767676767', 'key358': '66666666666666666666666666666666', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'msg444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg442': 'BABABABABABABABABABABABABABABABA', 'msg441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'msg448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key44': '00000000000800000000000000000000', 'key45': '00000000000400000000000000000000', 'key46': '00000000000200000000000000000000', 'key47': '00000000000100000000000000000000', 'key40': '00000000008000000000000000000000', 'key41': '00000000004000000000000000000000', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip411': '2E2F167944534DEBFD0E88EE63829748', 'cip410': '509324D4B10F19DBCD53F023E4077844', 'cip413': '86CF5B02838C3604CDA675DB8B81A862', 'cip412': '880B511572568FEDF62CB7EE06462B19', 'cip415': '9A464C03A56C01A61A112E9256A81925', 'cip414': 'C662F3E1AF3A4FAAD5413C189B90AE02', 'cip417': '1AA598EB7010CF91F731F3B1DE2E72C8', 'cip416': '386D4927DCD7D7939ECF7C3978052180', 'cip419': '5AEE95897C882A0EE72494585309C5B6', 'cip418': 'D7E3DECF5227314DCA03E8417EB73A44', 'cip239': '75BAF3E8194EA04577133509B50FF4C3', 'cip238': '85FE597694444D1A8D7F1CE219913F4F', 'cip231': 'E51D907B84D877250D0BCEC17D292DFD', 'cip230': '3F2B1D74B9D0D84C0B0DDAD31352E67A', 'cip233': '9F997F2AC950E52666207183DB935899', 'cip232': '151940BA15A175FCD39CE2D3A0259EFF', 'cip235': '4A7D36598525699F49667AF4B46BB99B', 'cip234': '015B7DF6BFB9367BF8F690FC0B77DEB0', 'cip237': '1367EC90627601E9C1BD1371454B772F', 'cip236': '306248FD603DFC18E41CF0864D2C352C', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '772F6DD96FA5C94102881F5F3CA9F9EF', 'cip308': '7DBFC2680C3A5A2C2AEF801074CD7B8F', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': 'D69C8CCF5DEC9EFA90684C7B70FCDFAF', 'cip124': '8C9A19CEBB5709C38EA1AE1D12E291C1', 'cip127': 'F668C7091F81B2827DA77DD419B708E1', 'cip126': '39B65E77A4D26218E5ED7092AB64D07E', 'cip121': 'FA735E9BE7961050C202BD794E2E1E0C', 'cip120': 'DDD26B98A5FFD82C05345A9DADBFAF49', 'cip123': '5F35BF3061423D0BC02C07BED67602BD', 'cip122': '7B2D8D2348DC4CE112AEF4311BE769D7', 'cip129': '04ABCFE4E0AF27FF92A2BB10949D7DD2', 'cip128': 'A3B35DE7C358DDD82644678C64B8BCBB', 'msg159': '00000001000000000000000000000000', 'msg158': '00000002000000000000000000000000', 'msg151': '00000100000000000000000000000000', 'msg150': '00000200000000000000000000000000', 'msg153': '00000040000000000000000000000000', 'msg152': '00000080000000000000000000000000', 'msg155': '00000010000000000000000000000000', 'msg154': '00000020000000000000000000000000', 'msg157': '00000004000000000000000000000000', 'msg156': '00000008000000000000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'key360': '68686868686868686868686868686868', 'key361': '69696969696969696969696969696969', 'key362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key368': '70707070707070707070707070707070', 'key369': '71717171717171717171717171717171', 'key214': '00000000000000000000000000000000', 'key215': '00000000000000000000000000000000', 'key216': '00000000000000000000000000000000', 'key217': '00000000000000000000000000000000', 'key210': '00000000000000000000000000000000', 'key211': '00000000000000000000000000000000', 'key212': '00000000000000000000000000000000', 'key213': '00000000000000000000000000000000', 'key218': '00000000000000000000000000000000', 'key219': '00000000000000000000000000000000', 'msg432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'msg438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'msg388': '84848484848484848484848484848484', 'msg389': '85858585858585858585858585858585', 'msg384': '80808080808080808080808080808080', 'msg385': '81818181818181818181818181818181', 'msg386': '82828282828282828282828282828282', 'msg387': '83838383838383838383838383838383', 'msg380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'msg382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'cip305': '19EB5033E0B2BB781A0BA20704D09DB2', 'cip304': 'B4C146F5C4F42122D58208A209E938DA', 'cip307': 'A7CDA6DC7F1AADBCE58E1428982AC39F', 'cip306': '80367CAD87DAFCF2819E857B291549C5', 'cip428': 'CEE52E89A3224BB263C5C57899A9A22C', 'cip429': '1F1A2A628E7659D06DBCE745DDEA10CD', 'cip424': 'B299AD5B90F6CA14F9884F41851A79F2', 'cip301': '5F83069E288A1A5303289680E08F1C2A', 'cip426': 'D51BBC5FCE7FF5BF4A22278129CE69F1', 'cip427': '1CA5B3C175266785D2D2BB9C6A7F08CF', 'cip420': 'C1392DF2DAD08454ECC6D8A1F373431F', 'cip421': '480AE95A7DF90FE31A6D35D43BE3B888', 'cip422': 'C35276718DC49FE6B2398FEC5B8C5E2C', 'cip300': '5699BDB2FFAFB2D259362EFD804797E8', 'cip303': 'BE2F1364C92B9D1A5C239EB975D8530F', 'cip302': 'E605C2EF7EFFDAC2316796EB7C15FAC7', 'cip338': 'D2E4094CD9BC1D10CF0D954547904502', 'cip339': '841AAC464625D296C3756C7A3B13CD2F', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': '45F463F2C3F6F1E3B937B0FA0C116417', 'cip334': '98ED6E1754160139FB821934133F6C5F', 'cip335': '16E6C73932DB7BB2602AB6E8B4BF6574', 'cip336': '0AEBB100F4A71C51C8A2011CA0D8FC4F', 'cip337': '5DE7037F2AB8CD8E709232A276EC7216', 'cip110': '864E7B400A96420A98765AF993AAD852', 'cip111': 'B8F75A0553AA33DC30B3F2D0027F97EA', 'cip112': '7106BED662E6B6AE72FDC726C98AD746', 'cip113': '043AA312B19B6737C3CEBAF830DB6DB8', 'cip114': 'F95E6F00854F17DBB68CC679570D5FD5', 'cip115': 'D23FAE81FF497000583F2CFCE54FCE9C', 'cip116': 'EF5C7DC4DBCE5A51F98011969693DBE8', 'cip117': '34D2F0546C260EA4002B4BCC2C12CCAB', 'cip118': 'B3787BE95735A9581817C64D81F07E13', 'cip119': 'EB31DC31E4016F7FD8901C5872DCED1A', 'msg164': '00000000080000000000000000000000', 'msg165': '00000000040000000000000000000000', 'msg166': '00000000020000000000000000000000', 'msg167': '00000000010000000000000000000000', 'msg160': '00000000800000000000000000000000', 'msg161': '00000000400000000000000000000000', 'msg162': '00000000200000000000000000000000', 'msg163': '00000000100000000000000000000000', 'msg168': '00000000008000000000000000000000', 'msg169': '00000000004000000000000000000000', 'msg366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'msg365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg360': '68686868686868686868686868686868', 'msg361': '69696969696969696969696969696969', 'msg368': '70707070707070707070707070707070', 'msg369': '71717171717171717171717171717171', 'cip204': 'EB667F97B9D94B0C41C873C4B56B334C', 'cip205': 'A065550C6371DEC580E16276E03F13D4', 'cip206': 'CDAC7C0A0E363FE8BA16BC11D1F6DC57', 'cip207': 'FF792A72BF23CABD13EA587C57D05D3F', 'cip200': '8C30672FF7F1DB4681BA36E48B3374A3', 'cip201': '0D56FA9193C8A6FBF653D75D3F61407E', 'cip202': '08C0C170A7B0F0C07E1CDEF95AEE8113', 'cip203': 'F05F7E94EC7FECF973EF5732B565E016', 'cip208': 'E5D5DC0D6834E44697BDD5D8427A054F', 'cip209': 'CAB879F5684241583F4900B2653D76C9', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'key111': '00000000000000000000000000010000', 'key110': '00000000000000000000000000020000', 'key119': '00000000000000000000000000000100', 'key118': '00000000000000000000000000000200', 'key379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key377': '79797979797979797979797979797979', 'key376': '78787878787878787878787878787878', 'key375': '77777777777777777777777777777777', 'key374': '76767676767676767676767676767676', 'key373': '75757575757575757575757575757575', 'key372': '74747474747474747474747474747474', 'key371': '73737373737373737373737373737373', 'key370': '72727272727272727272727272727272', 'key203': '00000000000000000000000000000000', 'key202': '00000000000000000000000000000000', 'key201': '00000000000000000000000000000000', 'key200': '00000000000000000000000000000000', 'key207': '00000000000000000000000000000000', 'key206': '00000000000000000000000000000000', 'key205': '00000000000000000000000000000000', 'key204': '00000000000000000000000000000000', 'key209': '00000000000000000000000000000000', 'key208': '00000000000000000000000000000000', 'cip501': '4B3DEE78E7CA56D985788A9AC2F5197F', 'cip500': '035FBB00942D042DD88115169C2E2AE2', 'cip507': '26A931AB8FC298D328598B77620F2F71', 'cip506': 'DEFAF32AEF76FE6130651C37C47C1301', 'cip505': 'CD8AF08F6B03C1D69DBC3DA0B6ECD295', 'cip504': '1BB1D68FBECF50E20C854DAA9E5C6D21', 'msg421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'msg423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'msg427': 'ABABABABABABABABABABABABABABABAB', 'msg426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg429': 'ADADADADADADADADADADADADADADADAD', 'msg428': 'ACACACACACACACACACACACACACACACAC', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'key26': '00000020000000000000000000000000', 'key27': '00000010000000000000000000000000', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'key28': '00000008000000000000000000000000', 'key29': '00000004000000000000000000000000', 'msg399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg393': '89898989898989898989898989898989', 'msg392': '88888888888888888888888888888888', 'msg391': '87878787878787878787878787878787', 'msg390': '86868686868686868686868686868686', 'msg397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'msg394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'cip439': 'DB254D2BEB85274726F5582F191B5008', 'cip438': '70CC3DD97FE808353E558DE39D7B3783', 'cip433': '8CF0AFE0D51907E8488CF660A6F8B377', 'cip432': 'ABEAC01D51FBC237E91B66A729E0C978', 'cip431': 'D0FBBF36E727F565A053AE220555574D', 'cip430': 'F035455E3D4FC0FF8D15622B58C87378', 'cip437': '32A119FC7DA3164125A6CF0C48C04771', 'cip436': '3F773A0F5400AB687DF5224A4098791E', 'cip435': '7FA552B4DA6A9EBB7099FEE03932FABA', 'cip434': 'AF8ADC32B4C8469BAC400638EE7DC428', 'cip327': 'F1DF91E2ED49CD44957F30B0FF03CBB5', 'cip326': '10995A37BB28DA7B96AF16A7734D083E', 'cip325': '64D20DAF523070033D3F061250511704', 'cip324': 'D7A3FC9E7A45AADFA2823563C7D189C6', 'cip323': 'D9DC02ADB41F02B6DBEA8B2D55A70727', 'cip322': '30602E07780EB354077B2C07C82F9AD2', 'cip321': '3A37783916A0D5876CD05F287A363714', 'cip320': '9CDA52F0C58BAE909ABC2E3EF75436D1', 'cip329': 'CA49B664DE330A675ED772FB26C84637', 'cip328': '9D98D41D45B4CBAB99649307B4500EF3', 'cip109': '7171E845509F8F4F134BE53EFD8A34DC', 'cip108': '11DD97B8ADAF7F6B34EB3BBB9A438892', 'cip107': '05C861F7F71591C8AECF8A26EB020F4D', 'cip106': '90DF345556AB04CB12D0799B9C5049BB', 'cip105': '463B27CF0DA63219ED2CEBDBF5C16922', 'cip104': '43D607D9D0009C01DBFB117126BC4395', 'cip103': '0C43854DF7DD96DC3323DCC311CD418C', 'cip102': 'F25D50BBA7FD6496CD70ACE570706ECC', 'cip101': '8367C4564B707B6C0A4A92ECA38C6EDA', 'cip100': '6D1C5788F69DC2E1EF928D9C831F3826', 'msg173': '00000000000400000000000000000000', 'msg172': '00000000000800000000000000000000', 'msg171': '00000000001000000000000000000000', 'msg170': '00000000002000000000000000000000', 'msg177': '00000000000040000000000000000000', 'msg176': '00000000000080000000000000000000', 'msg175': '00000000000100000000000000000000', 'msg174': '00000000000200000000000000000000', 'msg179': '00000000000010000000000000000000', 'msg178': '00000000000020000000000000000000', 'msg375': '77777777777777777777777777777777', 'msg374': '76767676767676767676767676767676', 'msg377': '79797979797979797979797979797979', 'msg376': '78787878787878787878787878787878', 'msg371': '73737373737373737373737373737373', 'msg370': '72727272727272727272727272727272', 'msg373': '75757575757575757575757575757575', 'msg372': '74747474747474747474747474747474', 'msg379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'cip213': '900FEDE23DBB68E48BA9D9806E606F19', 'cip212': '45D486C0AC551C76AA17E356404726F2', 'cip211': '1D7850062F3F8B2415F22BC4D95A1367', 'cip210': '43FE63C8C08E0CE5D1DAB79348F1B64E', 'cip217': '6DDCBD01AC098B04AAA084D4C579DAC9', 'cip216': '19E6063C7529E5268E4A45703AFC8AC4', 'cip215': '07AF806C0B6ECF9DD508C0D108572C37', 'cip214': 'F573C581080C5654A6C426DD8971E68B', 'cip219': '24B199E30672EF17362468CC8C0F4E46', 'cip218': 'AFC268DB7CD2A453EA87BA6A0E923DEC', 'msg86': '00000000000000000000000000000000', 'cip375': '3FEA78D33CBBE719339555162F735CDE', 'cip376': '33800F98338B723C85566C352AB08162', 'cip377': '4C363032829D38D7D8B19F8225E03C25', 'cip370': 'D248EADFDCEF91A787DBAD04007C4A2B', 'cip371': 'B39F4A534C71B5377E54FA84BA7153CF', 'cip372': '78846BEAD6C8B1D4B28702C887EB895F', 'msg81': '00000000000000000000000000000000', 'key162': '00000000000000000000000000000000', 'key163': '00000000000000000000000000000000', 'key160': '00000000000000000000000000000000', 'key161': '00000000000000000000000000000000', 'key166': '00000000000000000000000000000000', 'key167': '00000000000000000000000000000000', 'key164': '00000000000000000000000000000000', 'key165': '00000000000000000000000000000000', 'key168': '00000000000000000000000000000000', 'key169': '00000000000000000000000000000000', 'key308': '34343434343434343434343434343434', 'key309': '35353535353535353535353535353535', 'key302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key306': '32323232323232323232323232323232', 'key307': '33333333333333333333333333333333', 'key304': '30303030303030303030303030303030', 'key305': '31313131313131313131313131313131', 'key416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3'} |
dict_serpent192 = {'msg418': '62626262626262626262626262626262', 'msg419': '63636363636363636363636363636363', 'msg414': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'msg415': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg416': '60606060606060606060606060606060', 'msg417': '61616161616161616161616161616161', 'msg410': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg411': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg412': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg413': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg568': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg569': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg560': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg561': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg562': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg563': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'msg564': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg565': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg566': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg567': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': '4085D9745145C4AF8FE6D41BB58AA882', 'cip355': '92F4066413BA6DA36571822DECFAC787', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'F6F6D7FD966BFCEF3A2054C6CC2003A8', 'cip359': 'E00A4D6744941824456D88AE63375EC9', 'cip536': '701E0096FDD0F583B068337963805119', 'cip178': '10514AB50FB935D4DF8D36697E9A892C', 'cip179': '23BA3FE846E2AE8CD99FC3FE58228A05', 'cip172': 'B5142CABF118C8BA5DA8A201E7E04448', 'cip173': '2B078B616E4802ECC0104510E3E7E44C', 'cip170': 'D6661DE82FD241500194134F40C30071', 'cip171': 'B03A391CCAAE863B0ED315B0CC4FF99D', 'cip176': '40520018C4AC2BBA285AEEB9BCB58755', 'cip177': 'FB12E82326B5B32A88C73962E6B15A73', 'cip174': 'CE8A95407154E3B8DA3979FDA451F288', 'cip175': 'EF5D9D75A6A31712BAD7D332FCEF52D7', 'msg188': '00000000000000000000000000000000', 'msg189': '00000000000000000000000000000000', 'msg186': '00000000000000000000000000000000', 'msg187': '00000000000000000000000000000000', 'msg184': '00000000000000000000000000000000', 'msg185': '00000000000000000000000000000000', 'msg182': '00000000000000000000000000000000', 'msg183': '00000000000000000000000000000000', 'msg180': '00000000000000000000000000000000', 'msg181': '00000000000000000000000000000000', 'msg340': '14141414141414141414141414141414', 'msg341': '15151515151515151515151515151515', 'msg342': '16161616161616161616161616161616', 'msg343': '17171717171717171717171717171717', 'msg344': '18181818181818181818181818181818', 'msg345': '19191919191919191919191919191919', 'msg346': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg347': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg348': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg349': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'cip16': '39057A7055ADC3DF052632BA75845405', 'cip17': '0637B291488FCBC39EA131C5D0393617', 'cip14': '9A15675F3631BD2AF387A7B69DCEB89E', 'cip15': '893978E492FED5662D13AA2F759DC89A', 'cip12': 'C9BA9FC07BD7FAD3CBD56DBF9A7C5B00', 'cip13': '8B660D768B8E32F0C4E15386C5F3450D', 'cip10': '7F6347B6A370FDBCD26C91E5F1BE4E77', 'cip11': '3D8DC8CEF60F4F0F021BEA3B8A268740', 'cip18': '53A6EAA591C754B9AFB8E14B39BFFE79', 'cip19': 'AF9DD24F6FD3C9BAD97466F4E19D008E', 'key575': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key574': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key576': '000102030405060708090A0B0C0D0E0F1011121314151617', 'key571': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key570': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key573': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key572': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'key319': '000000000000000000000000000000000000000000000000', 'key318': '000000000000000000000000000000000000000000000000', 'key311': '000000000000000000000000000000000000000000000000', 'key310': '000000000000000000000000000000000000000000000000', 'key313': '000000000000000000000000000000000000000000000000', 'key312': '000000000000000000000000000000000000000000000000', 'key315': '000000000000000000000000000000000000000000000000', 'key314': '000000000000000000000000000000000000000000000000', 'key317': '000000000000000000000000000000000000000000000000', 'key316': '000000000000000000000000000000000000000000000000', 'key405': '555555555555555555555555555555555555555555555555', 'key404': '545454545454545454545454545454545454545454545454', 'key407': '575757575757575757575757575757575757575757575757', 'key406': '565656565656565656565656565656565656565656565656', 'key401': '515151515151515151515151515151515151515151515151', 'key400': '505050505050505050505050505050505050505050505050', 'key403': '535353535353535353535353535353535353535353535353', 'key402': '525252525252525252525252525252525252525252525252', 'key409': '595959595959595959595959595959595959595959595959', 'key408': '585858585858585858585858585858585858585858585858', 'cip521': 'A3B79D257CCCC1F2C600F1DBBCD52DC4', 'msg409': '59595959595959595959595959595959', 'msg408': '58585858585858585858585858585858', 'cip520': 'FED23ADD5F44B4399F8B33F9CEFB21C4', 'msg403': '53535353535353535353535353535353', 'msg402': '52525252525252525252525252525252', 'msg401': '51515151515151515151515151515151', 'msg400': '50505050505050505050505050505050', 'msg407': '57575757575757575757575757575757', 'msg406': '56565656565656565656565656565656', 'msg405': '55555555555555555555555555555555', 'msg404': '54545454545454545454545454545454', 'cip522': 'B9A343883E1A39CEC8514078B1633D17', 'cip525': 'BE0D705A990614581A320706CE825CCC', 'cip524': '7604BA91460217B4F805AF53F05F7493', 'cip4': '257A79F891BB8D0C13FEEF1ACC264214', 'cip5': '8B3EDD5BA04CB6FF80A3874411C1B8B7', 'cip6': '73C83EA96AE151230B2DEE7110B15E2C', 'cip7': '0ABD62FC8802C9BC86E2544909AC610F', 'cip0': '9E274EAD9B737BB21EFCFCA548602689', 'cip1': '92FC8E510399E46A041BF365E7B3AE82', 'cip2': '5E0DA386C46AD493DEA203FDC6F57D70', 'cip3': 'BEC1E37824CF721E5D87F6CB4EBFB9BE', 'cip526': 'E20E39A5E682C88EB58EF73ADB33F103', 'cip8': '3948D1EF7CE021CEF9C6C1405BB5A6F9', 'cip9': '5B8AC83847FDCD6006F7D59A04BE703C', 'cip529': '037C98A775EB3D7A13EE029FC526A4D4', 'cip528': '0F301A5A411A8BEA926222326898F8E3', 'cip535': '78CFC345ED78BAB2E5443E8EFCA0C9FC', 'msg575': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg574': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg573': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'msg572': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg571': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg570': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'cip341': 'E0A98F2778073F4BF37ABE41E104149C', 'cip340': '2203AE71CC50C451703237EF2DFC83A8', 'cip343': 'F1762E8334761F9413CA1B86407ADD1C', 'cip342': '02B8FA106F816EDB8070F58321392620', 'cip345': '4A92F136A82A027E345EA452BD2021E8', 'msg98': '00000000000000000000000000000000', 'cip347': 'D71E2B78F9E5896D83F390715000A3CB', 'cip346': '56C91E67D98871521C74CC5985736336', 'cip349': '60B95E8B8B84A25DB62EC0A7D4C7DE6A', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip169': 'FD007EFCBF67C125F8532A7FD54724CC', 'cip168': '8BE4D123F250436A35AC1506BF462E25', 'cip161': '7117137E956133BF65BCDA326A8156F3', 'cip160': 'CE6430157E4EAEA967B972C35C78036C', 'cip163': '2AE14DC8A1CD98E1BD20D4E01E32DDD2', 'cip162': '7D0D165BDB56D794FAC1B1C5020270B1', 'cip165': '3A2612AF977665D4E8D05E3EA9947E60', 'cip164': 'AE266BE3BF863707C6AECE963D16530E', 'cip167': '8A1E5D419E900C9FD046BA1F74C49DC8', 'cip166': '95491F2AD7B48986522E3B1EA14DE24F', 'msg199': '01000000000000000000000000000000', 'msg198': '02000000000000000000000000000000', 'msg195': '10000000000000000000000000000000', 'msg194': '20000000000000000000000000000000', 'msg197': '04000000000000000000000000000000', 'msg196': '08000000000000000000000000000000', 'msg191': '00000000000000000000000000000000', 'msg190': '00000000000000000000000000000000', 'msg193': '40000000000000000000000000000000', 'msg192': '80000000000000000000000000000000', 'msg359': '27272727272727272727272727272727', 'msg358': '26262626262626262626262626262626', 'msg357': '25252525252525252525252525252525', 'msg356': '24242424242424242424242424242424', 'msg355': '23232323232323232323232323232323', 'msg354': '22222222222222222222222222222222', 'msg353': '21212121212121212121212121212121', 'msg352': '20202020202020202020202020202020', 'msg351': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg350': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'cip23': 'AADD759F77507F990D3856F6EFC91978', 'cip22': 'DC077DA2CBF96509A74980CE12786C41', 'cip21': '00DCD917419399ED52E2A528ECAB86C5', 'cip20': '6F6C9FDBB84546B3BD98703730A71292', 'cip27': '1460BD4CE7589DFC8CA2A341CEDE21A2', 'cip26': '40288DA36DC4A581CFC6BF52768AEAC0', 'cip25': 'C972EAE644F542F2D61581105DAA2DE9', 'cip24': 'AA8B04CFD3F03D913981888D65F595F4', 'cip29': '52841B754B398E76A046A808D0254DB1', 'cip28': '415E3D395E8AF9F0B367B18279EC9D36', 'key548': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip352': '6787E76F2144158ADDC7405F6CDBD3D3', 'cip353': 'DE415BC84C595193CAC4389C90D70635', 'key540': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key541': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key542': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key543': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'key544': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'cip350': '2101BDD277124358EB687636D7E72799', 'key546': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'key547': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'cip351': '93F3ECA02F0074263B3CAD70FF69D857', 'cip356': '79FD6B7CA20212B01CD2B2F4D9EAD715', 'cip357': '1B8D5ECF81B227C0830EAA73FB45A344', 'key148': '000000000000000000000000000000000000080000000000', 'msg66': '00000000000000000000000000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'msg67': '00000000000000000000000000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'key430': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key431': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key432': '707070707070707070707070707070707070707070707070', 'key433': '717171717171717171717171717171717171717171717171', 'key434': '727272727272727272727272727272727272727272727272', 'key435': '737373737373737373737373737373737373737373737373', 'key436': '747474747474747474747474747474747474747474747474', 'key437': '757575757575757575757575757575757575757575757575', 'key438': '767676767676767676767676767676767676767676767676', 'key439': '777777777777777777777777777777777777777777777777', 'key324': '040404040404040404040404040404040404040404040404', 'key325': '050505050505050505050505050505050505050505050505', 'key326': '060606060606060606060606060606060606060606060606', 'key327': '070707070707070707070707070707070707070707070707', 'key320': '000000000000000000000000000000000000000000000000', 'key321': '010101010101010101010101010101010101010101010101', 'key322': '020202020202020202020202020202020202020202020202', 'key323': '030303030303030303030303030303030303030303030303', 'key328': '080808080808080808080808080808080808080808080808', 'key329': '090909090909090909090909090909090909090909090909', 'msg502': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg503': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'msg500': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg501': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg506': 'BABABABABABABABABABABABABABABABA', 'msg507': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg504': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg505': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg508': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg509': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'cip488': 'A10D2BB490B3E094D8F10C2FBD10F769', 'cip489': '89577B5BDB54B3392C701CF05AF13D80', 'cip482': 'D7EC76F1551103661327D9F49B24BE29', 'cip483': 'B4F3556B075F45C31300AFD946E18C7B', 'cip480': '014399C4F9D3C6E2B9433C5FC1503D62', 'cip481': 'A54887894994563D48C3F8AF810499A0', 'cip486': '85140E6EE560021743538B935A1A6017', 'cip487': 'BCAD881D9F995D2EBB8683A28F9A2164', 'cip484': 'B1012690ED1FEAEC22F6A123705749BF', 'cip485': 'DD4C9178D843A67A73A3696569294E60', 'msg218': '00000020000000000000000000000000', 'msg219': '00000010000000000000000000000000', 'msg216': '00000080000000000000000000000000', 'msg217': '00000040000000000000000000000000', 'msg214': '00000200000000000000000000000000', 'msg215': '00000100000000000000000000000000', 'msg212': '00000800000000000000000000000000', 'msg213': '00000400000000000000000000000000', 'msg210': '00002000000000000000000000000000', 'msg211': '00001000000000000000000000000000', 'cip378': '0F49BE67B3F2CF04BC8ECA60FE7882CA', 'cip379': 'ABFE3D7BD753341FADBAB8FFCBDF88C2', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': 'DC3C54D2034BF661CCE9B37282E7740D', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': 'CD55E0280203FC1B4AAC7376C2C395D7', 'cip576': '6AB816C82DE53B93005008AFA2246A02', 'cip574': 'A59BD7823058443E5707A964F9C4480A', 'cip575': '08FC09BD2580A3FFBC8453FAF21417C0', 'cip572': '317508AEE1F13E2FFC1863892CC8D9AD', 'cip573': '7510879F6854807D0B5063E6302483E9', 'cip570': '9578B4A42F8F8B52E264A6194310C54D', 'cip571': '62E65752C03D9F20BE7455BB44CE2EEF', 'cip396': '01FA4038C04186CFBD0F89FF1AC6A200', 'cip397': '9E69FEC5A105B64FBB1CFFD4CA3E040E', 'cip394': 'FD9F615C311E9A2D14AEC51E79727F25', 'cip395': 'F6294BF1EAE7B5FA9C5397BF2D35C580', 'cip392': '5221086B83558B77B7DDCC0118548CD2', 'cip393': 'AC5B4E39044BEFC78D6104B919D5D358', 'cip390': '6A63904FA0877C079DF0820328F34D41', 'cip391': '01308ACD539F8C4DA4C820EC7C8E12FC', 'cip398': '344253C38D033436622DBADE296302A3', 'cip399': 'EBE2CAF6665895790ED5E27643070D97', 'msg328': '08080808080808080808080808080808', 'msg329': '09090909090909090909090909090909', 'msg322': '02020202020202020202020202020202', 'msg323': '03030303030303030303030303030303', 'msg320': '00000000000000000000000000000000', 'msg321': '01010101010101010101010101010101', 'msg326': '06060606060606060606060606060606', 'msg327': '07070707070707070707070707070707', 'msg324': '04040404040404040404040404040404', 'msg325': '05050505050505050505050505050505', 'cip154': '84E74236D365A90B6417221C0E5ED058', 'cip155': '7DC0D45689A260233E52B56EE49F326B', 'cip156': 'E69EE6C58AE686AC193F4A118E5C7680', 'cip157': '7FCF4D217B2A37C8D3A822C43B1A119E', 'cip150': '4D80946E2267E0E485CDF4CBEA0BDE73', 'cip151': 'EAE07676A063EB5F7F99FAED7B065188', 'cip152': 'E407985AF526A75AB42DB52D64987992', 'cip153': '6C6EAD1E4101F16AD0FC4DE34DA19D8A', 'cip158': '6D37043BF5B8D45F1E44A7C0E792A343', 'cip159': 'ED46DEA31CAC83EE9F812C9006891C32', 'cip38': '19E972ACB8159AF2BE06C2CEB13F17CB', 'cip39': 'D3181CAF92EB933472AB5D7D9A79359F', 'cip34': '2A1A31C9F9EC3F0041E4981C14075C9B', 'cip35': '668D25EAB49A68A353170FB9804C49E9', 'cip36': 'B0851073E77BEBADB5E4620A5ECAB48F', 'cip37': '0D7DD474F2ADD4E616C2BDCB31AE295E', 'cip30': 'E28C2E20BF18DAD62ADA7B46D46C51AC', 'cip31': 'EACF9AD4EAC19266F886CB3AE50B2CA8', 'cip32': '9EF148F4819E1AD53458FF7B97512719', 'cip33': '8B992E1FD9026C14545D3B45BA12DD26', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key557': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key556': 'ECECECECECECECECECECECECECECECECECECECECECECECEC', 'key555': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key554': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key553': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key552': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key551': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key550': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key559': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key558': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key429': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key428': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key427': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key426': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key425': '696969696969696969696969696969696969696969696969', 'key424': '686868686868686868686868686868686868686868686868', 'key423': '676767676767676767676767676767676767676767676767', 'key422': '666666666666666666666666666666666666666666666666', 'key421': '656565656565656565656565656565656565656565656565', 'key420': '646464646464646464646464646464646464646464646464', 'key333': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key332': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key331': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key330': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key337': '111111111111111111111111111111111111111111111111', 'key336': '101010101010101010101010101010101010101010101010', 'key335': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key334': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key339': '131313131313131313131313131313131313131313131313', 'key338': '121212121212121212121212121212121212121212121212', 'msg511': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg510': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg513': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'msg512': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'msg515': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg514': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'msg517': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg516': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg519': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg518': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg549': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg543': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'cip499': '8288276E59D75A79C1774106B59B053F', 'cip498': '9A8E5E765EBBA0ECD7BDDA2B59F2F2DC', 'cip491': 'AF5E72A0182C7B0346E185AD2787637C', 'cip490': 'A516A194C5778CF819C5839359EE37E7', 'cip493': '4FEC832823472C8EBD8B4789DEF3D803', 'cip492': 'A88C2FC1D51A3E541D81C32028AE6513', 'cip495': '2E3FB14353E7FD03C1FFD680859DB914', 'cip494': 'B1A7D900B7F60D0D7476BEEAD9628BE5', 'cip497': '157D004EE3DA6B7E2F1B08F49931BF83', 'cip496': '8AAB4C4B812FEA56C4CA9E8C2436F40C', 'msg209': '00004000000000000000000000000000', 'msg208': '00008000000000000000000000000000', 'msg205': '00040000000000000000000000000000', 'msg204': '00080000000000000000000000000000', 'msg207': '00010000000000000000000000000000', 'msg206': '00020000000000000000000000000000', 'msg201': '00400000000000000000000000000000', 'msg200': '00800000000000000000000000000000', 'msg203': '00100000000000000000000000000000', 'msg202': '00200000000000000000000000000000', 'cip369': 'CE2BB59331BF6C243DC04C23EA7945CE', 'cip368': 'D8F2B7397A4BC2B20D96EDA800F46D78', 'cip363': 'A6B8945484E63E9EE0DD932BFE240CCC', 'cip362': '26792B75353FB1048D514E13EF5F4E08', 'cip361': '9E2F6696107057FDD2FC7ECD351C1012', 'cip360': '374819F887A8CEF3E5AFB7EFE6AF565F', 'cip367': 'F02832F22DFDE7132D000F4BD5818EB1', 'cip366': 'A50117625F2637E53E08C28439B83AD3', 'cip365': '0A98830E74A8E47963620A24ABFD309D', 'cip364': '77FF543AC4BDA10D8CECEBF68D0D7D4F', 'cip569': '537C2B538CCF4176C462A2141E7CD82C', 'cip568': '1E0F3F9FE91BCBB9A2EEF1246871B245', 'cip425': '73E32D38EE52293BACB8C5DC34A9C64D', 'cip565': 'A730A22B16F932F282125137CF544499', 'cip564': '18AE78589D8F0B88A05595DE86D106D6', 'cip567': '9F70595DCA4A1269578C6B925418F452', 'cip566': '6B6F84D457610058D8E9AB8920BDA204', 'cip561': '92FD563566B073BF339FF2E88248D8B7', 'cip560': '48786EDF237C90217024415454F13924', 'cip563': 'E341038E785D58BDCEBABE1C04B6A82F', 'cip562': '4067AAC21B2CB46478F95BB0E64769B5', 'cip385': '1A76B6A8D30EF847FCAA10475C035E4B', 'cip384': '1DB43A51022B17096BA69697CCD908E0', 'cip387': '2D167031BEC25D808268E035694F6F5A', 'cip386': '5C33534B269D1C3B1DE7D93F1AB983A9', 'cip381': 'F987D1BCCB79B514B72B82D8002C43D0', 'cip380': '9B89376FB4EE9D5AFBDA22D1F67E7155', 'cip383': '902718F3B134E870B58D28509EC791C3', 'cip382': '9D9B6F0780B2D4F72EC8BCAEF6771739', 'cip389': '24C09E09BDEB87BB85526B56B3DD9F0C', 'cip388': '4FFA26B873B2C679D0DCE01AA93C00A1', 'cip423': '9398DC0C30E4BBDD651AC0EC3567859A', 'msg339': '13131313131313131313131313131313', 'msg338': '12121212121212121212121212121212', 'msg331': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg330': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg333': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg332': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg335': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg334': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg337': '11111111111111111111111111111111', 'msg336': '10101010101010101010101010101010', 'cip143': '86F93C8B9552D8971367EAE2A366312F', 'cip142': 'E0E5399FEF15563392741BC333246873', 'cip141': '479C1979DDB0052BA7DF875314CB2A35', 'cip140': '894D2F50F43BA36B539DE43637927AC9', 'cip147': 'CF2793EDA6299C358F79D0F15853E075', 'cip146': '9F3BF5E17F297B3B3F3D6311B2874FC1', 'cip145': 'E733109E82EEDEFBB02512F1C030FF35', 'cip144': 'DABC07C4DFDDA34A8B61D1E1F0461196', 'cip149': '409F6D08C56C0129A485A2CD503AA754', 'cip148': '4CFCD92E08E82B0B3FC7C0CB8A2193CE', 'cip49': '9B5B6DFFFCB2201390728372E1259012', 'cip48': '399800963634CD1B96D9FCEFE1D0815E', 'cip41': 'FE2893A03D01523DF7BCF0EC76A71E76', 'cip40': '2B06E5A2CB8E141B6F194E7987D32E14', 'cip43': '20D29D2A08CAED608CEE792B82E9F900', 'cip42': '018056BEED112C1B11C6D58F383E51F3', 'cip45': '81FC9F0C865FC970721180942F0DADDE', 'cip44': 'FB4786827E61312B24889E8A75BFE0E8', 'cip47': '5509A6F21705DA67E685C1D2515FC40F', 'cip46': '179BA8EFBE611F1358B2D7C8A14F6056', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'key522': 'CACACACACACACACACACACACACACACACACACACACACACACACA', 'key523': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key520': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key521': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key526': 'CECECECECECECECECECECECECECECECECECECECECECECECE', 'key527': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key524': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key525': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key528': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key529': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key458': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key459': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key452': '848484848484848484848484848484848484848484848484', 'key453': '858585858585858585858585858585858585858585858585', 'key450': '828282828282828282828282828282828282828282828282', 'key451': '838383838383838383838383838383838383838383838383', 'key456': '888888888888888888888888888888888888888888888888', 'key457': '898989898989898989898989898989898989898989898989', 'key454': '868686868686868686868686868686868686868686868686', 'key455': '878787878787878787878787878787878787878787878787', 'msg528': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg529': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg524': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg525': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg526': 'CECECECECECECECECECECECECECECECE', 'msg527': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg520': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg521': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'msg522': 'CACACACACACACACACACACACACACACACA', 'msg523': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'cip330': '7F0A2F539FEF406A387AE2175E76BE79', 'cip331': '6A76EBAE8FA0825D36A84A6120CAA72B', 'cip332': '84C31062C66D4AB90FDB0BFFB6F08B9C', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000200000000000000000000', 'msg239': '00000000000100000000000000000000', 'msg230': '00000000020000000000000000000000', 'msg231': '00000000010000000000000000000000', 'msg232': '00000000008000000000000000000000', 'msg233': '00000000004000000000000000000000', 'msg234': '00000000002000000000000000000000', 'msg235': '00000000001000000000000000000000', 'msg236': '00000000000800000000000000000000', 'msg237': '00000000000400000000000000000000', 'cip558': 'ACC1756DD43F155A33977DB6E86BABCE', 'cip559': 'E966ACAE63A9BBBAAA6262CF5FAB0474', 'cip550': '6B21C73A7056B59F3F3F0F2662396E0A', 'cip551': '00D2A1DC5E137A2868FD0D04E236DCD9', 'cip552': '28B1AACC18DC4A838C08534FC813696D', 'cip553': 'D2B6E01150E16C62BFA599689E80B2C5', 'cip554': 'FD4B2CF3DF4C71E85C052C5F5B832CF3', 'cip555': '41F6838C82F6A81D2EF53A75A2352B6F', 'cip556': '1378A3562194E4706417E4EE5309F2DE', 'cip557': '0CB3C27162B9B52F098D183B588D91C2', 'msg304': '00000000000000000000000000008000', 'msg305': '00000000000000000000000000004000', 'msg306': '00000000000000000000000000002000', 'msg307': '00000000000000000000000000001000', 'msg300': '00000000000000000000000000080000', 'msg301': '00000000000000000000000000040000', 'msg302': '00000000000000000000000000020000', 'msg303': '00000000000000000000000000010000', 'msg308': '00000000000000000000000000000800', 'msg309': '00000000000000000000000000000400', 'cip58': '7A960A521E193922ED2275B1FCEB484F', 'cip59': '357E6FBCA32874FDCE99AD14BD10C4B8', 'cip52': '7F57B51D6B2E5E8C3DBEDF6B68A3ACDB', 'cip53': '5DE80D7BF3FC0B05ACEB1311BE12E31B', 'cip50': '0DB33144E4EB0FCAC271AB4D26F7B3B3', 'cip51': 'D7987CAA9C1CAB111984C2BA993F95B9', 'cip56': '8AF02339AC04EEDDC5D29B1D8AB85E34', 'cip57': 'D11C7DCD0E9B857DDC1A8D73169BBA2D', 'cip54': 'BE2C16F62E116A472C43D526D582A2F2', 'cip55': '0D9AED1721E71B09C7CF34650315ADD4', 'key199': '000000000000000000000000000000000000000000000000', 'key198': '000000000000000000000000000000000000000000000000', 'key197': '000000000000000000000000000000000000000000000000', 'key196': '000000000000000000000000000000000000000000000000', 'key195': '000000000000000000000000000000000000000000000000', 'key194': '000000000000000000000000000000000000000000000000', 'key193': '000000000000000000000000000000000000000000000000', 'key192': '000000000000000000000000000000000000000000000000', 'key191': '000000000000000000000000000000000000000000000001', 'key190': '000000000000000000000000000000000000000000000002', 'key531': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key530': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key533': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key532': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key535': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key534': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key537': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key536': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key539': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key538': 'DADADADADADADADADADADADADADADADADADADADADADADADA', 'key449': '818181818181818181818181818181818181818181818181', 'key448': '808080808080808080808080808080808080808080808080', 'key441': '797979797979797979797979797979797979797979797979', 'key440': '787878787878787878787878787878787878787878787878', 'key443': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key442': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key445': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key444': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key447': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key446': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg539': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg538': 'DADADADADADADADADADADADADADADADA', 'msg533': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg532': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'msg531': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg530': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'msg537': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg536': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg535': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg534': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg227': '00000000100000000000000000000000', 'msg226': '00000000200000000000000000000000', 'msg225': '00000000400000000000000000000000', 'msg224': '00000000800000000000000000000000', 'msg223': '00000001000000000000000000000000', 'msg222': '00000002000000000000000000000000', 'msg221': '00000004000000000000000000000000', 'msg220': '00000008000000000000000000000000', 'msg229': '00000000040000000000000000000000', 'msg228': '00000000080000000000000000000000', 'cip503': '62DEECC84AB4651CAF1BCF83F75521AA', 'cip547': '19C6754D56CDE195FBA5E9F289D1876B', 'cip546': '00A8004E465299FA1D925E9D947DB7AE', 'cip545': '855A63F82AEFC19694919C2E28C5851D', 'cip544': '483859C1C874565D7FCB8CDC8A3C35A1', 'cip543': 'B4E41B577752BC40AE6960F5E5AFE2A5', 'cip542': '360F3DCC93B9D72B0591659DD052CC07', 'cip541': '998AE4749292D4994115D2015C198BAA', 'cip540': 'E39D38F6BD6B280435AFB9C7DCA932D2', 'cip549': '258517DBF0E07A9218A265FC566A8522', 'cip548': '3859068F6715C1D206D7CCA9BA417D02', 'cip502': '8B55D46F203C664C03ED479EF680BB90', 'msg313': '00000000000000000000000000000040', 'msg312': '00000000000000000000000000000080', 'msg311': '00000000000000000000000000000100', 'msg310': '00000000000000000000000000000200', 'msg317': '00000000000000000000000000000004', 'msg316': '00000000000000000000000000000008', 'msg315': '00000000000000000000000000000010', 'msg314': '00000000000000000000000000000020', 'msg319': '00000000000000000000000000000001', 'msg318': '00000000000000000000000000000002', 'cip67': '556424407058A1BF639387032BB4972B', 'cip66': '47CB1114753A29FA68E83BF3754F5713', 'cip65': '00300AD85514851A32376A583B99416A', 'cip64': 'EBC56A2AB4DC394C8409EBC529103C09', 'cip63': '19A8882B0FDB10E143FF9DF9D32DA301', 'cip62': 'EF923294B89B78F017C874FC4472762E', 'cip61': '038A5BB1246BB8F0460ADC7826211268', 'cip60': '1AC04248825E32B8E71C34875371F307', 'cip69': '570D68BC03C1AD3173316BB3484166DB', 'cip68': 'C573C69439543B71A1EAF6A38D1DB977', 'cip229': 'F15ED8B81B74BD35586E1594AB3B0F73', 'key298': '000000000000000000000000000000000000000000000000', 'key299': '000000000000000000000000000000000000000000000000', 'key294': '000000000000000000000000000000000000000000000000', 'key295': '000000000000000000000000000000000000000000000000', 'key296': '000000000000000000000000000000000000000000000000', 'key297': '000000000000000000000000000000000000000000000000', 'key290': '000000000000000000000000000000000000000000000000', 'key291': '000000000000000000000000000000000000000000000000', 'key292': '000000000000000000000000000000000000000000000000', 'key293': '000000000000000000000000000000000000000000000000', 'key508': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key509': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key504': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key505': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key506': 'BABABABABABABABABABABABABABABABABABABABABABABABA', 'key507': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key500': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key501': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key502': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key503': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key276': '000000000000000000000000000000000000000000000000', 'key277': '000000000000000000000000000000000000000000000000', 'key274': '000000000000000000000000000000000000000000000000', 'key275': '000000000000000000000000000000000000000000000000', 'key272': '000000000000000000000000000000000000000000000000', 'key273': '000000000000000000000000000000000000000000000000', 'key270': '000000000000000000000000000000000000000000000000', 'key271': '000000000000000000000000000000000000000000000000', 'key278': '000000000000000000000000000000000000000000000000', 'key279': '000000000000000000000000000000000000000000000000', 'cip515': '545A627EC5FC0D3BEBC9663EAEBE4B8D', 'key474': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key475': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key476': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key477': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key470': '969696969696969696969696969696969696969696969696', 'key471': '979797979797979797979797979797979797979797979797', 'key472': '989898989898989898989898989898989898989898989898', 'key473': '999999999999999999999999999999999999999999999999', 'key478': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key479': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg252': '00000000000000080000000000000000', 'msg253': '00000000000000040000000000000000', 'msg250': '00000000000000200000000000000000', 'msg251': '00000000000000100000000000000000', 'msg256': '00000000000000008000000000000000', 'msg257': '00000000000000004000000000000000', 'msg254': '00000000000000020000000000000000', 'msg255': '00000000000000010000000000000000', 'msg258': '00000000000000002000000000000000', 'msg259': '00000000000000001000000000000000', 'msg494': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg495': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg496': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg497': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg490': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg491': 'ABABABABABABABABABABABABABABABAB', 'msg492': 'ACACACACACACACACACACACACACACACAC', 'msg493': 'ADADADADADADADADADADADADADADADAD', 'msg498': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg499': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'cip538': '35DA444A095B7D63D4E06554189AFCB7', 'cip539': 'ED5F9434F2F92EBDD179F1062D47B72D', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'cip514': 'E66A7E11B0CF0DB448B35C74358A265F', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': '5DA9109BC3193E5D2ABA0CA577CBBCD4', 'cip289': 'BC46C6FE8F7E549CCC402FC4633C670C', 'cip284': '602BE82E95A1BEF5C2742099A6CB70D9', 'cip285': 'B53F1354FE1291679B6D418AC4A3E26D', 'cip286': '0F68F7C1FFB5FA997D8CC007CF4F5BA8', 'cip287': '3B90014CDF2D614A339B48A6F374D1C4', 'cip280': '4FF5F65E2089279F1FFF7BF06EC6D527', 'cip281': 'B0C818F70672EF5E6F20515214DDDF7A', 'cip282': '2A4D0F00CA19EDCEEF86D7F283221A97', 'cip283': 'F9E6A04D60D5C06994E196EEF788ED59', 'msg75': '00000000000000000000000000000000', 'cip448': '1C3D07DA0CA9A696CCAB1EF2BACDEF00', 'cip449': 'B5FF3824FEE87A20560F41C3EB292748', 'cip446': '5586D2D1536F620E6F8E890D31677003', 'cip447': '559A2DABA379F7C0B70BC63D714B248B', 'cip444': 'C5AB41C539A1C24CF7E943D319F12F6D', 'cip445': 'C23AFEAE23394F5C4FB4F326670F52D0', 'cip442': 'C9916FC4263B3EA2CC8DF3603317B117', 'cip443': '4328207EE0DB37B36E8F986A6AD9B3C9', 'cip440': 'C2F47523A605A6A2362EACAF6F3A6BF8', 'cip441': '7E6591A9D3383087676902ADBC1D366C', 'cip266': 'F8BFC6819A8F1683DD314AFEDAA80F33', 'cip267': '28552459A3EB05AE69463C26F6413B73', 'cip264': 'EC74DC99FDB377E35EBA6E5C920C9E20', 'cip265': '12F92E9FF675FFE132FEC127A61ED1D6', 'cip262': 'B9B7F96A83494D61C0D476E15CF9FC40', 'cip263': '9F61E523005A37B71A589C35E2320580', 'cip260': '5684B43817E24580EE373B54B57126C1', 'cip261': 'D31DC022A55A6CB7116D5AA79713EBEF', 'cip268': 'E018CED8C1FC6FE1849E945550602D46', 'cip269': '8A46B1349AE83730266EBFB1D62BA1EB', 'cip198': 'D4257D927C7F2A6390DF198B573DD1BA', 'cip199': '7610F6DBE8F3F19682DCC01AF57DCD79', 'cip190': '4209B9F47FE46DA7095E093698227280', 'cip191': '5D058517AC7CC5AFD5C33253D4703B46', 'cip192': '23F5F432AD687E0D4574C16459618ABB', 'cip193': '56CD894936F6E9A4A4304CAE06F97CE3', 'cip194': 'B604D94F461AF9F4771BC53F8E3C227B', 'cip195': 'BB852AC4756880630D6D63951D3D2602', 'cip196': '319C206CD98D2C98993FC2CDAAB3259C', 'cip197': 'D271595956451E3B7D957A3485ADE9F7', 'cip70': '2ABE779A9A42BF593A2D20495C6F5A37', 'cip71': '7D648B890DCE86ADAE607B24B17F7ADC', 'cip72': '56463A7AEB3D1B104868B5F0CB88479B', 'cip73': '1A00009A7CAE8EF56B167F94F9932585', 'cip74': 'BA0BDE829631F63E14FE1995C57CBE29', 'cip75': 'A0625DDE21DF874E27751F460DB24939', 'cip76': '3A850B3917B926B7C1861AA8557548DB', 'cip77': '33FB35F2ED3A0F9A9C0D62868890B706', 'cip78': '8EB519BF9B7F9841FC429C21930730AA', 'cip79': '973672A4178DA471DB7C2CC9F3349DA4', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'msg576': '00112233445566778899AABBCCDDEEFF', 'key289': '000000000000000000000000000000000000000000000000', 'key288': '000000000000000000000000000000000000000000000000', 'key283': '000000000000000000000000000000000000000000000000', 'key282': '000000000000000000000000000000000000000000000000', 'key281': '000000000000000000000000000000000000000000000000', 'key280': '000000000000000000000000000000000000000000000000', 'key287': '000000000000000000000000000000000000000000000000', 'key286': '000000000000000000000000000000000000000000000000', 'key285': '000000000000000000000000000000000000000000000000', 'key284': '000000000000000000000000000000000000000000000000', 'key519': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key518': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key513': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key512': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key511': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key510': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key517': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key516': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key515': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key514': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key265': '000000000000000000000000000000000000000000000000', 'key264': '000000000000000000000000000000000000000000000000', 'key267': '000000000000000000000000000000000000000000000000', 'key266': '000000000000000000000000000000000000000000000000', 'key261': '000000000000000000000000000000000000000000000000', 'key260': '000000000000000000000000000000000000000000000000', 'key263': '000000000000000000000000000000000000000000000000', 'key262': '000000000000000000000000000000000000000000000000', 'key269': '000000000000000000000000000000000000000000000000', 'key268': '000000000000000000000000000000000000000000000000', 'cip518': 'F331010DCE907213D38FDF73DFE92AA0', 'cip519': 'B4B996316FAD0DEE6D09E16E8D121F3E', 'key463': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key462': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key461': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key460': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key467': '939393939393939393939393939393939393939393939393', 'key466': '929292929292929292929292929292929292929292929292', 'key465': '919191919191919191919191919191919191919191919191', 'key464': '909090909090909090909090909090909090909090909090', 'key469': '959595959595959595959595959595959595959595959595', 'key468': '949494949494949494949494949494949494949494949494', 'cip516': '3CAACFD178F5F7D85E9066F3C0CBF9A2', 'cip517': 'CE48B06CCA614EF2065F99D495F219DD', 'cip523': '5FCAB21E2A5A324B9EF2359D066023FA', 'cip510': '7C9A3D94E87F71B65C471223D64E74C8', 'cip511': 'B91C5A6582A87D13A17E3B17842F3FCC', 'cip512': '7C7357F26929DCCA4BEF9BC878076303', 'cip513': '7C0E803576A640239114CDC753800CDD', 'msg241': '00000000000040000000000000000000', 'msg240': '00000000000080000000000000000000', 'msg243': '00000000000010000000000000000000', 'msg242': '00000000000020000000000000000000', 'msg245': '00000000000004000000000000000000', 'msg244': '00000000000008000000000000000000', 'msg247': '00000000000001000000000000000000', 'msg246': '00000000000002000000000000000000', 'msg249': '00000000000000400000000000000000', 'msg248': '00000000000000800000000000000000', 'msg483': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg482': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg481': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg480': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg487': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg486': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg485': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg484': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'msg489': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg488': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'cip527': '1F35585C0908BBA94F1008D64EC71F13', 'cip299': '81CA67898765727FFDEDBC7DC25EC8FF', 'cip298': '774D83990DCBAF6B9186DF250DC721A9', 'cip293': 'EA4491C7F5A9D671DA358C535965E1C3', 'cip292': '3734062F8FCF37FBD1C48B5AAEF00C5F', 'cip291': '84DD300A8FDE4AC126F41EA0692F3E07', 'cip290': '60A11AFFABBEE4D5D5564A74C7F94C91', 'cip297': '319D430B55E2A2C942B089755D4C6035', 'cip296': '14148C222620E009AC51EE2321641D25', 'cip295': '45A5744C068AC6C7BC028C4D40885F20', 'cip294': 'D46899CC964A2A082C80AB7E0A4B153A', 'cip459': '2A8EBDA9F50C054E597966755CDADDBF', 'cip458': '5527616D9992C8F28BDD2DAF9C3F0452', 'cip455': 'CD40807E6803B0C00F1F2EF431B57800', 'cip454': '34CA295068D57F416BF094FA83A042CB', 'cip457': 'AADACD44DEA9BBE5C101915A1BE1D51A', 'cip456': 'EE152711BFC799FB360AD32361F5ACC6', 'cip451': 'D69952DD9A6B538D9C9CE4F19EE32A30', 'cip450': 'C09E29BB663693CBC8D63EB21AA041B9', 'cip453': 'D7D5CBF782F1F61F9839ECB0DECE4458', 'cip452': '7472F0EF8E98AB4C314D6830497C71B0', 'cip275': 'E0F6B38346E3E0AE2C5763C25C01ACB9', 'cip274': 'B8CD6C76DAD863B3A2342265A42C7878', 'cip277': '305E7A77DC3B62F110688AB334002132', 'cip276': '96E295724B3F296016A3F6853B679079', 'cip271': '6BCD123081CB4DA2197A9204947C4765', 'cip270': 'AEA0972033ACDA2FE228A3619511B0CF', 'cip273': '675A3322BCCCF4D78F3376ECC2C8A415', 'cip272': '3D8075B415AC9DEB6008B51597CE28F4', 'cip279': '23EB8F12867D39E24E5A71606E3B5C1E', 'cip278': '324E96A82CE897DAB3850047C38E9B18', 'cip187': '1B9DD629B9E11BCD27C4148887AE662A', 'cip186': '19D13A0AC90F83E5B3CA943C6462D295', 'cip185': '9EA538A95E21B6738B0F4BDD0D5A6423', 'cip184': '660CF6A3F77836AC685519C702548EE7', 'cip183': '81421CDE68390C877C025D60D7578959', 'cip182': '79386D808CC081C0888E83C047411490', 'cip181': '16F61AE21DEF7E6FF252F7A7C0A1FD33', 'cip180': '68E7992B17261F9F50693B291B40DE29', 'cip189': '8AF1A83901D7DD153FF8D271B210E3AB', 'cip188': '14EF2BA201698B1185B4F45D3C4BF7C1', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': '15955CDA082E2278B2EAB498BAE90A5D', 'cip88': '26474A9B6A125DA80A989286F1AADB77', 'cip85': 'CBB867073A139F7A39A5ABFB1F9B7084', 'cip84': '9915EB2B534C901AB3E208F0B8274438', 'cip87': '871D4D57145444F7858A3A1727FEE068', 'cip86': '487B9F02DF40531F6B1BD096A8E32377', 'cip81': '174FC71F855D61484B8C05DEB12988BA', 'cip80': '21C3E9BDB411A2CF58ACFCDDA07CA06E', 'cip83': 'D671E381AE4CBFBC4D360ACE36538EB6', 'cip82': '337671C8D092C431778655358AE1A622', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg99': '00000000000000000000000000000000', 'cip344': '390D65ABAE7EA70BEF4F727EE8737211', 'msg95': '00000000000000000000000000000000', 'cip348': 'A038C74CD4645FFBF4DA32CC28B3FCA6', 'key250': '000000000000000000000000000000000000000000000000', 'key251': '000000000000000000000000000000000000000000000000', 'key252': '000000000000000000000000000000000000000000000000', 'key253': '000000000000000000000000000000000000000000000000', 'key254': '000000000000000000000000000000000000000000000000', 'key255': '000000000000000000000000000000000000000000000000', 'key256': '000000000000000000000000000000000000000000000000', 'key257': '000000000000000000000000000000000000000000000000', 'key258': '000000000000000000000000000000000000000000000000', 'key259': '000000000000000000000000000000000000000000000000', 'key382': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key383': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key380': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key381': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key386': '424242424242424242424242424242424242424242424242', 'key387': '434343434343434343434343434343434343434343434343', 'key384': '404040404040404040404040404040404040404040404040', 'key385': '414141414141414141414141414141414141414141414141', 'key388': '444444444444444444444444444444444444444444444444', 'key389': '454545454545454545454545454545454545454545454545', 'key498': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key499': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key496': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key497': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key494': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key495': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key492': 'ACACACACACACACACACACACACACACACACACACACACACACACAC', 'key493': 'ADADADADADADADADADADADADADADADADADADADADADADADAD', 'key490': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key491': 'ABABABABABABABABABABABABABABABABABABABABABABABAB', 'cip530': '0319C5A1C2DE28E0F3B6F516BA30B312', 'msg278': '00000000000000000000020000000000', 'msg279': '00000000000000000000010000000000', 'msg274': '00000000000000000000200000000000', 'msg275': '00000000000000000000100000000000', 'msg276': '00000000000000000000080000000000', 'msg277': '00000000000000000000040000000000', 'msg270': '00000000000000000002000000000000', 'msg271': '00000000000000000001000000000000', 'msg272': '00000000000000000000800000000000', 'msg273': '00000000000000000000400000000000', 'msg478': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'msg479': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg476': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg477': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'msg474': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg475': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg472': '98989898989898989898989898989898', 'msg473': '99999999999999999999999999999999', 'msg470': '96969696969696969696969696969696', 'msg471': '97979797979797979797979797979797', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'cip537': '4A72FE0EBE8205E44261A8F2B5DA532E', 'cip468': 'E551242033F13D2384586508D71FDC40', 'cip469': 'AA54E408753CC97FDB6CD532F8F18532', 'cip460': 'E5A11D4DE71F2ABB2DEB72C8BB95C74D', 'cip461': 'A55341D7557B4A99CD9A2DDF24FE3C51', 'cip462': '758E281DA45E90F75AFC447F364EF6A9', 'cip463': 'C14C56A05B419EED6D75A46CAA1DEDFB', 'cip464': 'DF73BF1BC45AE87CD5C1222D697EDF75', 'cip465': '4C265114EEED48122B4C8F5ACB37AE49', 'cip466': '30CE4670005B4262C23055C3A505F0EB', 'cip467': '570D0AB8947FBAC84AB18ED58DA39AA6', 'cip240': '67A133B6981D6CFFFB0894B5CD60C384', 'cip241': 'B9724EFA90EE77242862C6D107053799', 'cip242': '6CC4B4806D82C681027375553BEEF871', 'cip243': 'D05EA01E7AE0768FFE5B499D4A0EA833', 'cip244': 'EB5259D268854E583B02C445F0DBB33D', 'cip245': '273792A497CBE6058FB8CE518C05A9A7', 'cip246': '629EE820F46138558FE7AA6D547F971E', 'cip247': 'F04FF6EC27F7412350CA62E6A3BE479F', 'cip248': '2F19CFB18D4B538C688FF0FF73EEF402', 'cip249': '2B2D1598BD1A57A6277D0F1182423E70', 'msg296': '00000000000000000000000000800000', 'msg297': '00000000000000000000000000400000', 'msg294': '00000000000000000000000002000000', 'msg295': '00000000000000000000000001000000', 'msg292': '00000000000000000000000008000000', 'msg293': '00000000000000000000000004000000', 'msg290': '00000000000000000000000020000000', 'msg291': '00000000000000000000000010000000', 'msg298': '00000000000000000000000000200000', 'msg299': '00000000000000000000000000100000', 'cip98': 'B384BE1E8CEAD9DE1E209FC92BA6A3D3', 'cip99': '4E512E32F6B60CFE5660D7CFA21E13FC', 'cip96': '1E9F7474C984CC73B7F90F8EC01F547D', 'cip97': '9CAAD32B4195E293A792CF2403839879', 'cip94': '97289170C25CE1EC2011B27487DC8903', 'cip95': '3BC60DC98B29BA75D7DBA12D78BED74D', 'cip92': '7FF3E31C19BB193B4A2CCD488CB44F97', 'cip93': '2FB402BFAAACCC4F55C9EBA37D2AA543', 'cip90': '04191E4D8945BA1E9D02098EEFCD65DF', 'cip91': 'C1841B80C1E0E4608F0C261F8FF91199', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '00000000000000000000000000000000', 'msg129': '00000000000000000000000000000000', 'key249': '000000000000000000000000000000000000000000000000', 'key248': '000000000000000000000000000000000000000000000000', 'key247': '000000000000000000000000000000000000000000000000', 'key246': '000000000000000000000000000000000000000000000000', 'key245': '000000000000000000000000000000000000000000000000', 'key244': '000000000000000000000000000000000000000000000000', 'key243': '000000000000000000000000000000000000000000000000', 'key242': '000000000000000000000000000000000000000000000000', 'key241': '000000000000000000000000000000000000000000000000', 'key240': '000000000000000000000000000000000000000000000000', 'key391': '474747474747474747474747474747474747474747474747', 'key390': '464646464646464646464646464646464646464646464646', 'key393': '494949494949494949494949494949494949494949494949', 'key392': '484848484848484848484848484848484848484848484848', 'key395': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key394': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key397': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key396': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key399': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key398': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key489': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key488': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key485': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key484': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key487': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key486': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key481': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key480': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key483': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'key482': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'cip532': 'F048B1D976A0021CFBD24185F15A5782', 'msg269': '00000000000000000004000000000000', 'msg268': '00000000000000000008000000000000', 'cip533': '545D9D689A4480EC958ABCF85B981CCE', 'msg263': '00000000000000000100000000000000', 'msg262': '00000000000000000200000000000000', 'msg261': '00000000000000000400000000000000', 'msg260': '00000000000000000800000000000000', 'msg267': '00000000000000000010000000000000', 'msg266': '00000000000000000020000000000000', 'msg265': '00000000000000000040000000000000', 'msg264': '00000000000000000080000000000000', 'cip531': 'D0200CB02EBF55A63DAB24175BDBEB33', 'msg469': '95959595959595959595959595959595', 'msg468': '94949494949494949494949494949494', 'msg465': '91919191919191919191919191919191', 'msg464': '90909090909090909090909090909090', 'msg467': '93939393939393939393939393939393', 'msg466': '92929292929292929292929292929292', 'msg461': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg460': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg463': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg462': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'cip509': '18CB3C52EA63293380258C88D86FFC62', 'cip508': 'FC47C7EDB8EF2DE5713DCDCF955B5654', 'cip534': '7B46E5B1A82587C58987811DE8728495', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'cip477': 'C00EDE0B34F918795015517B41FCF181', 'cip476': 'FB4F2BBF54FE2E488B35F3EAA4F35392', 'cip475': '6C4B65B51F11C2B99BE63EAE3E803CEC', 'cip474': '3ABDD853578888C16E47C9B2245AB50D', 'cip473': 'BB52E1855B75DFF797D2A46A85699196', 'cip472': '2738C4544E2998DD27BE8F11C587A830', 'cip471': '9F40DDE1BEE1CFA4CF5A60BEA894CA34', 'cip470': 'A6FCB9C0C6B3CC512B066C628DBC6BD7', 'cip479': '68177B56822F5D0CD6C664D4D18F27EA', 'cip478': 'FA32A18FF9D3E5226554980751FDF5DD', 'cip259': '4159191656BAE5F059625051F329E674', 'cip258': '6B38158548081550B6931773C3348995', 'cip257': 'E6D1727A0BC893BBE5A048B73296FF43', 'cip256': '1CA839C433F49B9CAC257C7CBE38C571', 'cip255': '7F60DD3212B5FD34A33E95B7CD3C98B4', 'cip254': '9D5D7F82A45E543A28769767F0B4220B', 'cip253': '8B9060A226A976B4D8701B61A0E16E05', 'cip252': '594C7334C5C77F1F311743DBF880A848', 'cip251': '4E8F6CD48030ABFB6BFAA8C79DF29132', 'cip250': 'FB589E7803F8DEC257644DD8968B3BF9', 'msg285': '00000000000000000000000400000000', 'msg284': '00000000000000000000000800000000', 'msg287': '00000000000000000000000100000000', 'msg286': '00000000000000000000000200000000', 'msg281': '00000000000000000000004000000000', 'msg280': '00000000000000000000008000000000', 'msg283': '00000000000000000000001000000000', 'msg282': '00000000000000000000002000000000', 'msg289': '00000000000000000000000040000000', 'msg288': '00000000000000000000000080000000', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '00000000000000000000000000000000', 'msg138': '00000000000000000000000000000000', 'msg137': '00000000000000000000000000000000', 'msg136': '00000000000000000000000000000000', 'msg135': '00000000000000000000000000000000', 'msg134': '00000000000000000000000000000000', 'msg133': '00000000000000000000000000000000', 'msg132': '00000000000000000000000000000000', 'msg131': '00000000000000000000000000000000', 'msg130': '00000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '000000000000000000000000000000000000000000000000', 'key239': '000000000000000000000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'key232': '000000000000000000000000000000000000000000000000', 'key233': '000000000000000000000000000000000000000000000000', 'key230': '000000000000000000000000000000000000000000000000', 'key231': '000000000000000000000000000000000000000000000000', 'key236': '000000000000000000000000000000000000000000000000', 'key237': '000000000000000000000000000000000000000000000000', 'key234': '000000000000000000000000000000000000000000000000', 'key235': '000000000000000000000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'key346': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key347': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key344': '181818181818181818181818181818181818181818181818', 'key345': '191919191919191919191919191919191919191919191919', 'key342': '161616161616161616161616161616161616161616161616', 'key343': '171717171717171717171717171717171717171717171717', 'key340': '141414141414141414141414141414141414141414141414', 'key341': '151515151515151515151515151515151515151515151515', 'key348': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key349': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'key545': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg458': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'msg459': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'msg450': '82828282828282828282828282828282', 'msg451': '83838383838383838383838383838383', 'msg452': '84848484848484848484848484848484', 'msg453': '85858585858585858585858585858585', 'msg454': '86868686868686868686868686868686', 'msg455': '87878787878787878787878787878787', 'msg456': '88888888888888888888888888888888', 'msg457': '89898989898989898989898989898989', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'key149': '000000000000000000000000000000000000040000000000', 'cip402': 'D8023F1ABAFAF0C66E5B82B97D6EADF6', 'cip403': 'B4A3E22767CA7A769B658D2E5DBD4DE5', 'cip400': '9AE888193B6654BAA995E332F85E878F', 'cip401': '8E7F0D4B02126E2B609AEA1EB117E957', 'cip406': '54D172ABBBD78E77E6DB34325CAB1049', 'cip407': '1B79C9EFA88EC7FCEAA1619716944602', 'cip404': '8285788003001D9A8A4A0D111FB5A6FE', 'cip405': 'FD1B577E2478F5D0C3618A77C39AFBE8', 'cip408': 'EA60553D4A24752EB4C9A66F056E8979', 'cip409': '5BC7D9B9CC701E8ACD677E04620FFF8F', 'cip228': '2334F78508F6259862FAA5842E6B1E7B', 'key147': '000000000000000000000000000000000000100000000000', 'cip222': 'B329A557C9BFED767B44CA25F43C0924', 'cip223': '1909B5B407CB28E7050F8889104B73F5', 'cip220': '28D9BEB7444B7801C510D74C90F3183A', 'cip221': '9D8949E7F531F30FFD1C6891154FFB8A', 'cip226': '7A3B3E4FA8DF6DD964161EF9ADB7EC90', 'cip227': 'DBA5DD3EE2B0F03D402D5BADAE4E34C9', 'cip224': '99B0CC109580893A14B960F78C867DF7', 'cip225': '4FBCBA60C491EFA9C5B8B8CC9471C26A', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': '444E6201556F1C9D73299183B7ABCA9D', 'cip319': '497EA15A5AAB3CB115C3E0091C2E4047', 'cip316': 'E11B01524EA1F465A2A20043EB9F7E8A', 'cip317': '9BAC7EE501F03D6DEBE0F9EE68FBB3C1', 'cip314': 'D3F12A67FABEC165545D25F5E5FEAE6F', 'cip315': '97580203AACE7E6F0DEB71BC631D9E40', 'cip312': 'D9D076F0512B4F29E15752A21B270BB1', 'cip313': '9668F388DD4F122A4D9DD8D6B8A322D5', 'cip310': 'EE23DB4E914D12A53BE8428161F3DE24', 'cip311': 'E76E230F4BA91426325C16FA168CA44B', 'cip136': 'A783EB0A14B5212A9BC439F225F33834', 'cip137': '524282FABF8B62D291AAAADA12423AE9', 'cip134': '07C856A3CE6F131D785BDE2E3DB3D36A', 'cip135': 'A06931BD2C6D9C3701E0286016AB8555', 'cip132': '51ECA17E2C529F17592F9A117F6F592B', 'cip133': 'A51036D7D90699DDA88ED9A16EE6C556', 'cip130': '456C1BE9ACEFA86AFB9742AB867692B1', 'cip131': '89EE6EBDDCB44B7F17157C154BB99221', 'cip138': '306D0E55364394631EC18BE972EF0B66', 'cip139': '87D8BA08354745FE85BBB710FCF5EB39', 'msg148': '00000000000000000000000000000000', 'msg149': '00000000000000000000000000000000', 'msg142': '00000000000000000000000000000000', 'msg143': '00000000000000000000000000000000', 'msg140': '00000000000000000000000000000000', 'msg141': '00000000000000000000000000000000', 'msg146': '00000000000000000000000000000000', 'msg147': '00000000000000000000000000000000', 'msg144': '00000000000000000000000000000000', 'msg145': '00000000000000000000000000000000', 'key229': '000000000000000000000000000000000000000000000000', 'key228': '000000000000000000000000000000000000000000000000', 'key221': '000000000000000000000000000000000000000000000000', 'key220': '000000000000000000000000000000000000000000000000', 'key223': '000000000000000000000000000000000000000000000000', 'key222': '000000000000000000000000000000000000000000000000', 'key225': '000000000000000000000000000000000000000000000000', 'key224': '000000000000000000000000000000000000000000000000', 'key227': '000000000000000000000000000000000000000000000000', 'key226': '000000000000000000000000000000000000000000000000', 'key139': '000000000000000000000000000000000010000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'key355': '232323232323232323232323232323232323232323232323', 'key354': '222222222222222222222222222222222222222222222222', 'key357': '252525252525252525252525252525252525252525252525', 'key356': '242424242424242424242424242424242424242424242424', 'key351': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key350': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key353': '212121212121212121212121212121212121212121212121', 'key352': '202020202020202020202020202020202020202020202020', 'msg20': '00000000000000000000000000000000', 'key359': '272727272727272727272727272727272727272727272727', 'key358': '262626262626262626262626262626262626262626262626', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg446': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg445': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'msg444': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg443': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg442': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'msg441': '79797979797979797979797979797979', 'msg440': '78787878787878787878787878787878', 'msg449': '81818181818181818181818181818181', 'msg448': '80808080808080808080808080808080', 'key44': '000000000008000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'key47': '000000000001000000000000000000000000000000000000', 'key40': '000000000080000000000000000000000000000000000000', 'key41': '000000000040000000000000000000000000000000000000', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip411': '4C45468945F81A9DDBA64096F7459105', 'cip410': '3A00B2ADDCB948E9A7CB79EDA8C03ED4', 'cip413': '64586AC41D941AB28C4F513CD96C82D5', 'cip412': '8D46CEE68004BE80A7F6BA7E5FC28933', 'cip415': 'D4CD607FFC06A35859D0193ECBED4E40', 'cip414': '8DAF315A1D806E11177B17DD89778197', 'cip417': '5682B7157B14B53179B5D96326CAEC0D', 'cip416': 'EABA630108BD5CAD3DF7687921437F12', 'cip419': '05B28231EA131E068247DD00AC08646F', 'cip418': '8A06DA18F3FB230DB26FE2929EEB63E7', 'cip239': '5E7648E3575B7A02BEA8C69A19ED06BC', 'cip238': '545F83ECF5366475A1867BF81DE59780', 'cip231': 'E71506E96ADACE02580EA035601850C3', 'cip230': 'A654EE4634624A3593DCC272C0AB8566', 'cip233': '79A075A5778E5BED4F0663FC86D92A56', 'cip232': 'CAF26B388D8A81C408FC3506CA523C72', 'cip235': '30DF4AFE05F0D0EC4495C4A7A3D3A1AF', 'cip234': '90E59EE9F97DE1590D4C454169890932', 'cip237': '2C2286B2537AFDF52A7EF59D620E7E46', 'cip236': 'BF6D54D156EDE791A177F8A5BA5DC1D0', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '93B8DD3F9A59DD9231B0885601A2354C', 'cip308': 'AFFA71EA9A2F6C4A018CF2F5F22B9B13', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '019754956B6DC021D25731EF988BDAC9', 'cip124': 'CA66CEA4EAE07B83E1EEB737FE72EADC', 'cip127': 'DEAB7388A6F1C61D41E25A0D88F062C4', 'cip126': '786EC65CC6C717A171822F1DD1AB3CE8', 'cip121': 'FD008310340BA35239165FCA8F52B3DF', 'cip120': '3A07686652A8F7E35FC9B3333EA97D16', 'cip123': '86C0CBEB5633EF88ABD436BA54AC4D7B', 'cip122': 'FC7E859D16DBF0F92FB8B3286C110315', 'cip129': '53BD3E8475DB67F72910B945BF8C768E', 'cip128': '9F18DF64A519FEC0581C0C27F805F484', 'msg159': '00000000000000000000000000000000', 'msg158': '00000000000000000000000000000000', 'msg151': '00000000000000000000000000000000', 'msg150': '00000000000000000000000000000000', 'msg153': '00000000000000000000000000000000', 'msg152': '00000000000000000000000000000000', 'msg155': '00000000000000000000000000000000', 'msg154': '00000000000000000000000000000000', 'msg157': '00000000000000000000000000000000', 'msg156': '00000000000000000000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'key360': '282828282828282828282828282828282828282828282828', 'key361': '292929292929292929292929292929292929292929292929', 'key362': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key363': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key364': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key365': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key366': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key367': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key368': '303030303030303030303030303030303030303030303030', 'key369': '313131313131313131313131313131313131313131313131', 'key214': '000000000000000000000000000000000000000000000000', 'key215': '000000000000000000000000000000000000000000000000', 'key216': '000000000000000000000000000000000000000000000000', 'key217': '000000000000000000000000000000000000000000000000', 'key210': '000000000000000000000000000000000000000000000000', 'key211': '000000000000000000000000000000000000000000000000', 'key212': '000000000000000000000000000000000000000000000000', 'key213': '000000000000000000000000000000000000000000000000', 'key218': '000000000000000000000000000000000000000000000000', 'key219': '000000000000000000000000000000000000000000000000', 'msg432': '70707070707070707070707070707070', 'msg433': '71717171717171717171717171717171', 'msg430': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg431': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg436': '74747474747474747474747474747474', 'msg437': '75757575757575757575757575757575', 'msg434': '72727272727272727272727272727272', 'msg435': '73737373737373737373737373737373', 'msg438': '76767676767676767676767676767676', 'msg439': '77777777777777777777777777777777', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'msg388': '44444444444444444444444444444444', 'msg389': '45454545454545454545454545454545', 'msg384': '40404040404040404040404040404040', 'msg385': '41414141414141414141414141414141', 'msg386': '42424242424242424242424242424242', 'msg387': '43434343434343434343434343434343', 'msg380': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg381': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg382': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg383': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'cip305': '4815634545F268ED3BF50021AC0265B2', 'msg548': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip304': 'A306CFDAFE5C8C2A955956BB61FFE5CD', 'msg546': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg547': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg544': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg545': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg542': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip307': '8EAA16AEA0535498D21245BAE97ED0D4', 'msg540': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg541': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'cip306': '3B075AFF8F75956DC4BE7D5121BF07B6', 'cip428': '8A26AD8FF37DC290E65E5B369FFD913B', 'cip429': '94C8F172221098FF69736FE5AD34FAFB', 'cip424': '2DCB3664B51276A60A35153A2B7545E8', 'cip301': 'CC2DE08FA80BE8A13C8860174AF9F55D', 'cip426': 'E8EDF33CBB67FDD3583E5B1300E3A959', 'cip427': '5B51498F716F42E20B59C619269A0573', 'cip420': '0BF60ED777E40CE7845F1C9C045108FA', 'cip421': '5B6927171ADC162B16CA9622E4202359', 'cip422': 'BC08F9A6142454F7FC9EF6418F6931B5', 'cip300': 'BEFC19FD8A41103B6892AD4A3CB08122', 'cip303': 'D78FE49AB8E11EBA118687045D04A70F', 'cip302': '4935E35A180FEC382D3DCFD5ED572AFB', 'cip338': '7CC04EDE1EC605160B5F23265B5A074C', 'cip339': '6839E2FDD27EB0E79C44B6C11F1A9046', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': 'EC3A2E73EF80449F5EAFF258B743E145', 'cip334': 'C81C0D1D8BCFE8C95209C708A48DEA51', 'cip335': '618F3B5CB992C9B3EFFC9DAC6E355CCA', 'cip336': '8FF90E91ECA31C767C88B5FBA1AC885A', 'cip337': '5A591008778D540E22648F7146360682', 'cip110': '5F6BF404C25C812FF2E814E4FEBAF636', 'cip111': '92B8C78C75EE5BB1C27DAC75EF76D2E0', 'cip112': 'F08DF5D467F41CB7D157C6E6C78900FE', 'cip113': '0225B99C3E40C8A5FD0156BD6A2B9349', 'cip114': '6B8D89725A7AEB5AA433011ACF5B72EC', 'cip115': '6A8B55F69923153ED6A95BF4B78CCE6E', 'cip116': '199B86F903787EE3EDD60F8393F4A89A', 'cip117': 'BFE08316360801D0B929BBE1786A8570', 'cip118': '887B6ECDBF12DEB314C50F07B870EC3B', 'cip119': 'C82FDE13839BD8BD8FC408131F559648', 'msg164': '00000000000000000000000000000000', 'msg165': '00000000000000000000000000000000', 'msg166': '00000000000000000000000000000000', 'msg167': '00000000000000000000000000000000', 'msg160': '00000000000000000000000000000000', 'msg161': '00000000000000000000000000000000', 'msg162': '00000000000000000000000000000000', 'msg163': '00000000000000000000000000000000', 'msg168': '00000000000000000000000000000000', 'msg169': '00000000000000000000000000000000', 'msg366': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg367': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg364': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'msg365': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg362': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg363': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'msg360': '28282828282828282828282828282828', 'msg361': '29292929292929292929292929292929', 'msg368': '30303030303030303030303030303030', 'msg369': '31313131313131313131313131313131', 'cip204': '2810428BA5177BB0D91C11683008E68D', 'cip205': '3863C205AED373BB3EF9E6D85D0AD08F', 'cip206': 'DD207AA0894DFBEDD7D9802823C04D7B', 'cip207': 'A6EAC9ECAAE9CC8621198BA547E9B74F', 'cip200': '4BD66B7E897E76BF51F1F00671092169', 'cip201': '4A72C588A0FA490D521640D1F245E4BC', 'cip202': '32205DCCC1D7A129B934C6FABAADEB1C', 'cip203': '74F79A4CF6F99359D7EC47DA87104658', 'cip208': 'DA51B1E831305D9E6AC7F0CDF49F3AE5', 'cip209': '4A091855C4AA2436F3C61A11FA4B9DA5', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key379': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key378': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key377': '393939393939393939393939393939393939393939393939', 'key376': '383838383838383838383838383838383838383838383838', 'key375': '373737373737373737373737373737373737373737373737', 'key374': '363636363636363636363636363636363636363636363636', 'key373': '353535353535353535353535353535353535353535353535', 'key372': '343434343434343434343434343434343434343434343434', 'key371': '333333333333333333333333333333333333333333333333', 'key370': '323232323232323232323232323232323232323232323232', 'key203': '000000000000000000000000000000000000000000000000', 'key202': '000000000000000000000000000000000000000000000000', 'key201': '000000000000000000000000000000000000000000000000', 'key200': '000000000000000000000000000000000000000000000000', 'key207': '000000000000000000000000000000000000000000000000', 'key206': '000000000000000000000000000000000000000000000000', 'key205': '000000000000000000000000000000000000000000000000', 'key204': '000000000000000000000000000000000000000000000000', 'key209': '000000000000000000000000000000000000000000000000', 'key208': '000000000000000000000000000000000000000000000000', 'cip501': '7BDF54DD81E5C6546E32AC307374DC62', 'cip500': '5AFF37A198C71247C5D76956CA5E667F', 'cip507': '492E614E802B5E3A07805E1D828D2AC1', 'cip506': 'C94B21B30A89295B175FAA34D7CEA4BE', 'cip505': 'F384F2A6A01DA2F3368DFBE75557698F', 'cip504': 'D0B94CAE1DA8EA0FEE9BD8F3089858A5', 'msg421': '65656565656565656565656565656565', 'msg420': '64646464646464646464646464646464', 'msg423': '67676767676767676767676767676767', 'msg422': '66666666666666666666666666666666', 'msg425': '69696969696969696969696969696969', 'msg424': '68686868686868686868686868686868', 'msg427': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg426': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg429': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg428': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key549': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'key26': '000000200000000000000000000000000000000000000000', 'key27': '000000100000000000000000000000000000000000000000', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'msg399': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg398': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg393': '49494949494949494949494949494949', 'msg392': '48484848484848484848484848484848', 'msg391': '47474747474747474747474747474747', 'msg390': '46464646464646464646464646464646', 'msg397': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg396': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg395': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg394': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg559': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg558': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg555': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg554': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg557': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg556': 'ECECECECECECECECECECECECECECECEC', 'msg551': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg550': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg553': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg552': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'cip439': 'D481B427B613981D70824D4262BD992E', 'cip438': 'B6F28A8C7C208ACCF232E72A06A9F6E4', 'cip433': 'F3B374B9A2716389D9BF73262E051FE1', 'cip432': '1F898A3560ADFFC1E5D698F36351400B', 'cip431': '91372A2BA8947F134F6F24C2B1DF2D5E', 'cip430': 'BBB75C0935978DA267C86556E8696049', 'cip437': '05A7DF2D347081EEA1FFBA6D660FF61E', 'cip436': '5715F533B6AA0A6630F79B34171E6BF3', 'cip435': '898EA594D074EA7ADFF39FEE27E9E829', 'cip434': '6AFBE7CEAD548DF43EE4B71CAD5166D8', 'cip327': '8FC0AE5F1F3B6887B27F9A35B35A8BA0', 'cip326': '8D16EFBAF1570FA0046E94BC81E066FA', 'cip325': '3ED53B6FD14571EA0246A354A0C51880', 'cip324': 'B7B8FF58B8450EAC2863923153E8590C', 'cip323': '59F34E9685DB0A7067F12F68E0D8D7BB', 'cip322': '9CCCE11543D31C4527860F2411FC6435', 'cip321': '3C30CC53B1408BF333B85DD1C6632A29', 'cip320': 'A583EF976A292B406BBD5DC8256B0442', 'cip329': '9E105E4DBCFF1EAD738FAE894C8066BB', 'cip328': '80F250B4EE37E370B5956A6A4698D27F', 'cip109': '87C3730E07C280D110EE11BBDB2C7BF6', 'cip108': '59F44B4178A92AF2CA778BDA351247F1', 'cip107': 'EAF6266AC9F0A0E96ECF6E602DE61B73', 'cip106': 'A9EFF0A790FEB09727558C1FFB4247A4', 'cip105': 'CDFD5AF33A61EA9BA8C6E4DD3E84949D', 'cip104': '0482615608212073881C83A90A0B2721', 'cip103': 'C52FECB8EDDA2D9BF3E5856231B87F6F', 'cip102': '804E4F4C6FD215D4300704142407020A', 'cip101': '27549DC43C2DEEAFFB1C52AC37AD9728', 'cip100': '832615D6654549BB930EC8DBACC5AE92', 'msg173': '00000000000000000000000000000000', 'msg172': '00000000000000000000000000000000', 'msg171': '00000000000000000000000000000000', 'msg170': '00000000000000000000000000000000', 'msg177': '00000000000000000000000000000000', 'msg176': '00000000000000000000000000000000', 'msg175': '00000000000000000000000000000000', 'msg174': '00000000000000000000000000000000', 'msg179': '00000000000000000000000000000000', 'msg178': '00000000000000000000000000000000', 'msg375': '37373737373737373737373737373737', 'msg374': '36363636363636363636363636363636', 'msg377': '39393939393939393939393939393939', 'msg376': '38383838383838383838383838383838', 'msg371': '33333333333333333333333333333333', 'msg370': '32323232323232323232323232323232', 'msg373': '35353535353535353535353535353535', 'msg372': '34343434343434343434343434343434', 'msg379': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg378': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'cip213': '3FB48878619B70DB717F410550B03069', 'cip212': 'C2613B1D8937C2B1C9D7B0249D938E95', 'cip211': '13A1376760534FF5F7D5ED1B62D93D4B', 'cip210': 'DB8350915843684F18B4B358579A9446', 'cip217': 'BB828D0A587EA543A78A60B6F63CC159', 'cip216': '00D43BE69B9387B28A4234D2E5BEF038', 'cip215': '5AC9C030789D810698AAB706BA6BCCA8', 'cip214': '0589BD5D8ECDAAE7ECABC8816EF3C7EB', 'cip219': 'D26286844B1BE4D73B44B77A2C4449DD', 'cip218': '427338CBFA6B652CDCE9C30F29F6E660', 'msg86': '00000000000000000000000000000000', 'cip375': 'FAF9E80A21AAC7AC3FCD224CB5A26899', 'cip376': '4FA06E6B011E89A9F71EB9DB7136E748', 'cip377': 'DE264324D38C6B042FDF07351E729D6B', 'cip370': '2A71C095B1324FC906C3CACBBED4CF33', 'cip371': '03B9EEBD2ADA8481CAFABBF6DE6912F8', 'cip372': '52A49FEC535D74AAF41C634127D87AA3', 'msg81': '00000000000000000000000000000000', 'key568': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key569': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key566': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key567': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key564': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key565': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key562': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key563': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key560': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key561': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'key308': '000000000000000000000000000000000000000000000000', 'key309': '000000000000000000000000000000000000000000000000', 'key302': '000000000000000000000000000000000000000000000000', 'key303': '000000000000000000000000000000000000000000000000', 'key300': '000000000000000000000000000000000000000000000000', 'key301': '000000000000000000000000000000000000000000000000', 'key306': '000000000000000000000000000000000000000000000000', 'key307': '000000000000000000000000000000000000000000000000', 'key304': '000000000000000000000000000000000000000000000000', 'key305': '000000000000000000000000000000000000000000000000', 'key416': '606060606060606060606060606060606060606060606060', 'key417': '616161616161616161616161616161616161616161616161', 'key414': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key415': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key412': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key413': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key410': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key411': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key418': '626262626262626262626262626262626262626262626262', 'key419': '636363636363636363636363636363636363636363636363'} |
dict_serpent256 = {'msg418': '22222222222222222222222222222222', 'msg419': '23232323232323232323232323232323', 'msg414': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'msg415': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg416': '20202020202020202020202020202020', 'msg417': '21212121212121212121212121212121', 'msg410': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg411': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg412': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg413': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key19': '0000100000000000000000000000000000000000000000000000000000000000', 'key18': '0000200000000000000000000000000000000000000000000000000000000000', 'key17': '0000400000000000000000000000000000000000000000000000000000000000', 'key16': '0000800000000000000000000000000000000000000000000000000000000000', 'key15': '0001000000000000000000000000000000000000000000000000000000000000', 'key14': '0002000000000000000000000000000000000000000000000000000000000000', 'key13': '0004000000000000000000000000000000000000000000000000000000000000', 'key12': '0008000000000000000000000000000000000000000000000000000000000000', 'key11': '0010000000000000000000000000000000000000000000000000000000000000', 'key10': '0020000000000000000000000000000000000000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg568': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg569': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg560': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg561': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg562': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg563': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'msg564': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg565': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg566': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg567': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': '96961DBEC1C476AE00972E54DE621F19', 'cip355': 'A31A56562516BDAE02215CD5F0DF0569', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'BCA04C7CAB888EE6950B7696F5899502', 'cip359': '6655B0542BE057664DE9B2733CA0E555', 'cip594': 'DFFD26FD3531E099739AFBEBA7CC4A4B', 'cip595': '9A19B04A3E68CF708E0F9B6A6FEFF092', 'cip596': '0EB45B61661B82E5031D149894E06353', 'cip597': '2EF37F5DDDAFF4E1A837B0ADC6A2B4AC', 'cip590': '39A2A53FBDB6329B94439EA2C4F4083F', 'cip591': 'D45E577405868579FC2BCEADE98ACF46', 'cip592': '8812A2146D83B908C0263BB381A25926', 'cip593': 'FE06CE17437F47A021AC10BB8C843314', 'cip598': '34DB3F71586C255819FD573C38897C5B', 'cip599': '99FC401591FDBC7869497790F3DB72A2', 'cip536': '387E5B8C776E4C29F0D56D36AFE1AEDD', 'cip178': 'CDEA1849DE224D92034BEC826682AD47', 'cip179': '7343B1923DB7C28C195660252857ABA3', 'cip172': '9CA79528107403A7430CD50578029990', 'cip173': '45A104CAE36E600B6EF91B91FC1C657C', 'cip170': '28E64B7DC148055040950974E718B27A', 'cip171': '08C9B5E67B8954FDFE74F391B7AFB754', 'cip176': '18DF0F25A865A0B6EC844D810D25FD87', 'cip177': '35D6DB5996115E7E8C1BE200823E7C63', 'cip174': 'D9CF9457265E7ACC57EFE25736A11FBE', 'cip175': 'D1DD8AE84D38D129A5FA0E9D9520ECF8', 'key623': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg188': '00000000000000000000000000000000', 'msg189': '00000000000000000000000000000000', 'msg186': '00000000000000000000000000000000', 'msg187': '00000000000000000000000000000000', 'msg184': '00000000000000000000000000000000', 'msg185': '00000000000000000000000000000000', 'msg182': '00000000000000000000000000000000', 'msg183': '00000000000000000000000000000000', 'msg180': '00000000000000000000000000000000', 'msg181': '00000000000000000000000000000000', 'msg340': '00000000000000000000080000000000', 'msg341': '00000000000000000000040000000000', 'msg342': '00000000000000000000020000000000', 'msg343': '00000000000000000000010000000000', 'msg344': '00000000000000000000008000000000', 'msg345': '00000000000000000000004000000000', 'msg346': '00000000000000000000002000000000', 'msg347': '00000000000000000000001000000000', 'msg348': '00000000000000000000000800000000', 'msg349': '00000000000000000000000400000000', 'cip630': '6ED3879FD72D65D6364ED513F54C3CD6', 'cip636': '19413773DD579D26B934C72EA0A6A5B3', 'cip16': '2B504288F018B2A867597EB53EEA6DB1', 'cip17': 'B3FA8074A573A00B4897DF6CD0D99B5D', 'cip14': '7978DBD4794AF35DFB0403423B4E81A9', 'cip15': '4F990737145AAA9100BFEDCA53B69F6D', 'cip12': '97905460E140685960B561204ABC09A9', 'cip13': 'B893B8766A12AAAD7691565C46651623', 'cip10': 'D30979DDC6C09B1158FA41EEB6F2A21B', 'cip11': 'C36705BB2A9BAFCFCB64C4468964D568', 'cip18': '38B56FD4C1FEDF5282208EF5F796A2C9', 'cip19': 'BFE421423C53A9942C78D04CB4B231D8', 'key579': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key578': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key575': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key574': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key577': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key576': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key571': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key570': 'BABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA', 'key573': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key572': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key171': '0000000000000000000000000000000000000000001000000000000000000000', 'key170': '0000000000000000000000000000000000000000002000000000000000000000', 'key173': '0000000000000000000000000000000000000000000400000000000000000000', 'key172': '0000000000000000000000000000000000000000000800000000000000000000', 'key175': '0000000000000000000000000000000000000000000100000000000000000000', 'key174': '0000000000000000000000000000000000000000000200000000000000000000', 'key177': '0000000000000000000000000000000000000000000040000000000000000000', 'key176': '0000000000000000000000000000000000000000000080000000000000000000', 'key179': '0000000000000000000000000000000000000000000010000000000000000000', 'key178': '0000000000000000000000000000000000000000000020000000000000000000', 'key319': '0000000000000000000000000000000000000000000000000000000000000000', 'key318': '0000000000000000000000000000000000000000000000000000000000000000', 'key311': '0000000000000000000000000000000000000000000000000000000000000000', 'key310': '0000000000000000000000000000000000000000000000000000000000000000', 'key313': '0000000000000000000000000000000000000000000000000000000000000000', 'key312': '0000000000000000000000000000000000000000000000000000000000000000', 'key315': '0000000000000000000000000000000000000000000000000000000000000000', 'key314': '0000000000000000000000000000000000000000000000000000000000000000', 'key317': '0000000000000000000000000000000000000000000000000000000000000000', 'key316': '0000000000000000000000000000000000000000000000000000000000000000', 'cip640': '2868B7A2D28ECD5E4FDEFAC3C4330074', 'key405': '1515151515151515151515151515151515151515151515151515151515151515', 'key404': '1414141414141414141414141414141414141414141414141414141414141414', 'key407': '1717171717171717171717171717171717171717171717171717171717171717', 'key406': '1616161616161616161616161616161616161616161616161616161616161616', 'key401': '1111111111111111111111111111111111111111111111111111111111111111', 'key400': '1010101010101010101010101010101010101010101010101010101010101010', 'key403': '1313131313131313131313131313131313131313131313131313131313131313', 'key402': '1212121212121212121212121212121212121212121212121212121212121212', 'key409': '1919191919191919191919191919191919191919191919191919191919191919', 'key408': '1818181818181818181818181818181818181818181818181818181818181818', 'cip626': '237AAE313D64562FDE36A0D9C72B7CDF', 'cip627': '1A2743EB7B27C23C5A0F7DCA8F7C60D4', 'cip624': 'B282CD70F1CB116FF4370B15980F7E23', 'cip625': '100F57A554C12DDCE0B06F54DE7060E8', 'cip622': 'DAD9C744E15C5A2EE69B2EEFA0E47AA7', 'cip623': '0EE91C74A7A8919330BB78ADCAD91914', 'cip521': '05E201ECB1D9941FDEA972D4B1AF450C', 'msg409': '19191919191919191919191919191919', 'msg408': '18181818181818181818181818181818', 'cip620': '49C6D3459FD462203BD84FC71B15A472', 'cip520': '659B79328B7016CB66620D01FF2B4BA6', 'msg403': '13131313131313131313131313131313', 'msg402': '12121212121212121212121212121212', 'msg401': '11111111111111111111111111111111', 'msg400': '10101010101010101010101010101010', 'msg407': '17171717171717171717171717171717', 'msg406': '16161616161616161616161616161616', 'msg405': '15151515151515151515151515151515', 'msg404': '14141414141414141414141414141414', 'cip522': '429ED1C42243BDAC9B6D2DFCDC260E04', 'cip525': '58B7BFA0D953B835822C291CF5E549FC', 'cip524': '0E9A222FBCA839CDDAF4DC4D375DA919', 'cip4': 'EC9D6557EED58E6CF89A746BBDB6C9B7', 'cip5': 'AD2314BF713CD796E8C7EC6E9C59CB8D', 'cip6': '33D8944A2D2FACBBA555EC18543AFCF0', 'cip7': 'E0885D4460373469D1FA6C36A6E1C52F', 'cip0': 'A223AA1288463C0E2BE38EBD825616C0', 'cip1': 'EAE1D405570174DF7DF2F9966D509159', 'cip2': '65F37684471E921DC8A30F45B43C4499', 'cip3': '0EE036D0BC32B89C1CEF987F5229E4A9', 'cip526': '583C9E6D2C564C0DC39C931C976086B3', 'cip8': '2CCA19AE45B976236D88E4E1AD3BACEA', 'cip9': '052D166AA678A987C07256C582283986', 'cip529': '7F93B0B73F40E573F13D9EC28E4CC73C', 'cip528': '4D8445920AD89C5174898E2A416EA76D', 'msg577': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'cip535': 'A84EAAAF203B92356AE1025B1D93D073', 'msg575': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg574': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg573': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'msg572': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg571': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg570': 'BABABABABABABABABABABABABABABABA', 'msg579': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg578': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'cip341': 'B33C4D6DF1259C4E5799D19B375420EA', 'cip340': '60AE8E3F60A099EEF38EFF4ED27DE3EC', 'cip343': '3CF54D30E493CDD7439E1F34FBB098F3', 'cip342': '4D1BA08EB1E30F2A3B3E5D1DAE9792A9', 'cip345': 'B3D6DC13CF612951F9ACB05EAEEDE7E3', 'msg98': '00000000000000000000000000000000', 'cip347': '9F227635FDAB7D31A7E1F08BBCC34371', 'cip346': '301378F0D3D30AE6613A9E7CF113821F', 'cip349': 'CF51A2A45F9CBFDE788D108B1B4D33A5', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip583': '56A96770FD19284193F125B6E3B81C58', 'cip582': '9A4D04EDEC1D30ED99CE5D8E663B2B61', 'cip581': '274C29DC4667E5259672E0FE8CB6BD85', 'cip580': 'D243F210B340F55AFE2A0AF1B984CC78', 'cip587': 'F26557393B35B278DF8CFB4A2E055C2B', 'cip586': '1640B5A7A10334C9656C615BED2E79CF', 'cip585': '8A10AF3CC3EE06CC85B6BF8F204EEF0C', 'cip584': 'C65F33703C6037C9C41B3AE2DB110CD8', 'cip589': '8459D97B128173F07A49A8F4D3C38E6D', 'cip588': '1442BBD470F6999C63779E58E3C21B3A', 'cip169': 'DAD3F4D3B96EF51C2D4D2869FAEA4C1D', 'cip168': 'E5BD5E55A80FE196A2AEBCDB6798614E', 'cip161': 'A2622ED785815C12C949EBED89094FC3', 'cip160': '43FB732672D6243DDC9C547E46711FBE', 'cip163': 'CD3681FF583D4BC4886D864CFA94EF97', 'cip162': 'FBB93B64CA5D94692B4E6EED934112D8', 'cip165': '3CA305833473AC6990A41E37A7BE551A', 'cip164': '37ED3CE092A1AE925264751DFFF6B50E', 'cip167': '51C23A4293BB9B963AD17E349B8A71C5', 'cip166': 'CEF8EC0353A04B3DB1309F88265FDABF', 'msg199': '00000000000000000000000000000000', 'msg198': '00000000000000000000000000000000', 'msg195': '00000000000000000000000000000000', 'msg194': '00000000000000000000000000000000', 'msg197': '00000000000000000000000000000000', 'msg196': '00000000000000000000000000000000', 'msg191': '00000000000000000000000000000000', 'msg190': '00000000000000000000000000000000', 'msg193': '00000000000000000000000000000000', 'msg192': '00000000000000000000000000000000', 'msg359': '00000000000000000000000001000000', 'msg358': '00000000000000000000000002000000', 'msg357': '00000000000000000000000004000000', 'msg356': '00000000000000000000000008000000', 'msg355': '00000000000000000000000010000000', 'msg354': '00000000000000000000000020000000', 'msg353': '00000000000000000000000040000000', 'msg352': '00000000000000000000000080000000', 'msg351': '00000000000000000000000100000000', 'msg350': '00000000000000000000000200000000', 'cip23': '23A626E559D0B8E4E4AB3F7C38750D4A', 'cip22': 'FB5D6CD1B6EE155D6744E5BE62A650F6', 'cip21': 'AC38F8F6DF320D4409BA6A1CD93A482E', 'cip20': 'EF102196C479E513AE8B776D524631B9', 'cip27': 'EFF062AF33726C788D261FBFDDA15109', 'cip26': '3BC82EC5FBE24B5AAF230895BBA9DCD1', 'cip25': 'F5D9875A70158C9C64136703D231E3F5', 'cip24': '4A7E5D441526F7D4D2987AEDF48F0231', 'cip29': 'E16066A35F943A426FE47AD1A1FC69AD', 'cip28': 'E2A342E2683D3F970983D941656823AA', 'key548': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'cip352': 'FFE1B843D7DC5F52852705221ED5EECA', 'cip353': '0E8B9ACE62AA90B258D8090EF2188BC4', 'key540': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key541': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key542': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key543': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key544': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'cip350': '3E70F946FB77C6841D9F001104347659', 'key546': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key547': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'cip351': 'A3EB98B3BE360FAE3B8EC43D5B77FF7C', 'cip356': 'A2316B6B9E6AD55D7013A24BDB1EAEB9', 'cip357': '709F715313E17EFB3ECAE3A5D9ED94AF', 'key148': '0000000000000000000000000000000000000800000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'key144': '0000000000000000000000000000000000008000000000000000000000000000', 'key145': '0000000000000000000000000000000000004000000000000000000000000000', 'key146': '0000000000000000000000000000000000002000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'key140': '0000000000000000000000000000000000080000000000000000000000000000', 'key141': '0000000000000000000000000000000000040000000000000000000000000000', 'key142': '0000000000000000000000000000000000020000000000000000000000000000', 'key143': '0000000000000000000000000000000000010000000000000000000000000000', 'key430': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key431': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key432': '3030303030303030303030303030303030303030303030303030303030303030', 'key433': '3131313131313131313131313131313131313131313131313131313131313131', 'key434': '3232323232323232323232323232323232323232323232323232323232323232', 'key435': '3333333333333333333333333333333333333333333333333333333333333333', 'key436': '3434343434343434343434343434343434343434343434343434343434343434', 'key437': '3535353535353535353535353535353535353535353535353535353535353535', 'key438': '3636363636363636363636363636363636363636363636363636363636363636', 'key439': '3737373737373737373737373737373737373737373737373737373737373737', 'key324': '0000000000000000000000000000000000000000000000000000000000000000', 'key325': '0000000000000000000000000000000000000000000000000000000000000000', 'key326': '0000000000000000000000000000000000000000000000000000000000000000', 'key327': '0000000000000000000000000000000000000000000000000000000000000000', 'key320': '0000000000000000000000000000000000000000000000000000000000000000', 'key321': '0000000000000000000000000000000000000000000000000000000000000000', 'key322': '0000000000000000000000000000000000000000000000000000000000000000', 'key323': '0000000000000000000000000000000000000000000000000000000000000000', 'key328': '0000000000000000000000000000000000000000000000000000000000000000', 'key329': '0000000000000000000000000000000000000000000000000000000000000000', 'msg502': '76767676767676767676767676767676', 'msg503': '77777777777777777777777777777777', 'msg500': '74747474747474747474747474747474', 'msg501': '75757575757575757575757575757575', 'msg506': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'msg507': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg504': '78787878787878787878787878787878', 'msg505': '79797979797979797979797979797979', 'msg508': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg509': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'cip488': 'C5084F64184243B2320910EC283DE2FB', 'cip489': '391BABAE870C456075F6149B3019BF47', 'cip482': 'CD81C028668A06FBD038ACD7E189D4B4', 'cip483': '2B4BCFD95DE2C813E4689C6003367BAA', 'cip480': 'B51EC90B59D99FC982D2FF159B8C20B2', 'cip481': 'E07A3D644F1343378586B1506FD7B5B9', 'cip486': '9D4E0D202C95C7C087A61F6B397448EC', 'cip487': '0554906ECFD0430B8FED00C1CB6AD87E', 'cip484': '0BB4071EFFECEDE72FFF2BE7E72A4A8C', 'cip485': 'DBE484806B90A7DA31C325AE1E872728', 'msg218': '00000000000000000000000000000000', 'msg219': '00000000000000000000000000000000', 'msg216': '00000000000000000000000000000000', 'msg217': '00000000000000000000000000000000', 'msg214': '00000000000000000000000000000000', 'msg215': '00000000000000000000000000000000', 'msg212': '00000000000000000000000000000000', 'msg213': '00000000000000000000000000000000', 'msg210': '00000000000000000000000000000000', 'msg211': '00000000000000000000000000000000', 'cip378': 'BB654CB6528C21D78E5CB79D5DA677A4', 'cip379': 'E0B2836175A6808D61FEA4CB529401F8', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': '8658E3A6DBAC89EBA6E045881B172E9C', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': 'B77FE10336DA7531E1BF2DC41C7E6E95', 'cip578': '8231F24F73CF40CCCADB36835B94E678', 'cip579': 'EA3DF9EB959E6B2110F64E78FD799094', 'cip576': '2D04D93AEDE2B11D48285086FF40DA49', 'cip577': '36E691E654FBE01597628982FDF3F489', 'cip574': '8FBC2395A530EC8F45E0D5F4081ACCD9', 'cip575': '052BD61DFCCEBF17FDDBA5BBEB947613', 'cip572': '5D23F0F58FB496A928B8194BFD7D9BF3', 'cip573': 'B68501A56B52F94ADBA2DA4407F2131E', 'cip570': '1D66994A7ABE4F96E20E56FAA9808A24', 'cip571': '098688F6CDC75B93415E3DBC821334FD', 'cip396': '6374751DE549B543B6531719D58480B1', 'cip397': 'FD8BEB77DB7A335D3CF690DD441CCB02', 'cip394': '3AA08D9770A9DF1B57C856E3BF2BBE90', 'cip395': '28B1952EB49BA893B5368E500CC45EF1', 'cip392': '74BFD6C979CD2D673748FD242A8D6500', 'cip393': '3E5D22A9B6BDAE9E4DF9FB1755AC7A3F', 'cip390': '79A65AB74C785E50294126F4FCCEBB76', 'cip391': '8F6853EF6802FE9A93161579A2D91137', 'cip398': '0C517DB958743218F988C8C2A428611D', 'cip399': '32FF7D7373872E36B8F0E29117C7B8D5', 'msg328': '00000000000000000080000000000000', 'msg329': '00000000000000000040000000000000', 'msg322': '00000000000000002000000000000000', 'msg323': '00000000000000001000000000000000', 'msg320': '00000000000000008000000000000000', 'msg321': '00000000000000004000000000000000', 'msg326': '00000000000000000200000000000000', 'msg327': '00000000000000000100000000000000', 'msg324': '00000000000000000800000000000000', 'msg325': '00000000000000000400000000000000', 'cip154': 'E4CBB63909992197E9654069BF4EE3EE', 'cip155': '14B1DF955B3A20EADFF35C3869B0B624', 'cip156': '4D9019A6223F39E2075C95C7724959FC', 'cip157': '5352A5E6F316C51F0256B3A0BC283D47', 'cip150': 'BDE3013E16AFDF64A0F24991D7EE5752', 'cip151': '71500F21B4145961271727E896C62F24', 'cip152': 'B324D96D901DB388CC1DF28092714335', 'cip153': 'E572F8132305A28A1E09BF5ED8ABAA8D', 'cip158': '9F570DD55188193525D0C0244CBA2CFD', 'cip159': '1B206FEA626AD786255A3186AC5F5132', 'cip628': 'C0449FA4F1B97ADE97C1F4F97D9A2CDB', 'cip629': '5E116CE30BBAB2D01898E127F2820885', 'cip38': '4284A05C4A0AF59DFF15604ACBB82743', 'cip39': '986A05E8447024C8468A1EBF7743F689', 'cip34': '318B1983222E49F5B57E26E70890A5B6', 'cip35': 'D8DF0A98604C987283ACF7F211D906C7', 'cip36': '92697CF743A72D2D4D7864132A9ADE0B', 'cip37': '2C450C8BCDAA9CB59F930DDAE88CBDB3', 'cip30': 'D89F891B578FF6B441E97849DD2F2798', 'cip31': '4A800443B44112493226E08BD9521912', 'cip32': '765DF290B8D90C9169E6884A0D4D4B92', 'cip33': 'F9EEBAB9F5CEBF94196FEF3872C46881', 'key159': '0000000000000000000000000000000000000001000000000000000000000000', 'key158': '0000000000000000000000000000000000000002000000000000000000000000', 'key153': '0000000000000000000000000000000000000040000000000000000000000000', 'key152': '0000000000000000000000000000000000000080000000000000000000000000', 'key151': '0000000000000000000000000000000000000100000000000000000000000000', 'key150': '0000000000000000000000000000000000000200000000000000000000000000', 'key157': '0000000000000000000000000000000000000004000000000000000000000000', 'key156': '0000000000000000000000000000000000000008000000000000000000000000', 'key155': '0000000000000000000000000000000000000010000000000000000000000000', 'key154': '0000000000000000000000000000000000000020000000000000000000000000', 'key557': 'ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD', 'key556': 'ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC', 'key555': 'ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB', 'key554': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key553': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key552': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key551': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key550': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key559': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key558': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key429': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key428': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key427': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key426': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key425': '2929292929292929292929292929292929292929292929292929292929292929', 'key424': '2828282828282828282828282828282828282828282828282828282828282828', 'key423': '2727272727272727272727272727272727272727272727272727272727272727', 'key422': '2626262626262626262626262626262626262626262626262626262626262626', 'key421': '2525252525252525252525252525252525252525252525252525252525252525', 'key420': '2424242424242424242424242424242424242424242424242424242424242424', 'key333': '0000000000000000000000000000000000000000000000000000000000000000', 'key332': '0000000000000000000000000000000000000000000000000000000000000000', 'key331': '0000000000000000000000000000000000000000000000000000000000000000', 'key330': '0000000000000000000000000000000000000000000000000000000000000000', 'key337': '0000000000000000000000000000000000000000000000000000000000000000', 'key336': '0000000000000000000000000000000000000000000000000000000000000000', 'key335': '0000000000000000000000000000000000000000000000000000000000000000', 'key334': '0000000000000000000000000000000000000000000000000000000000000000', 'key339': '0000000000000000000000000000000000000000000000000000000000000000', 'key338': '0000000000000000000000000000000000000000000000000000000000000000', 'msg511': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg510': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg513': '81818181818181818181818181818181', 'msg512': '80808080808080808080808080808080', 'msg515': '83838383838383838383838383838383', 'msg514': '82828282828282828282828282828282', 'msg517': '85858585858585858585858585858585', 'msg516': '84848484848484848484848484848484', 'msg519': '87878787878787878787878787878787', 'msg518': '86868686868686868686868686868686', 'msg549': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg543': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'cip499': '6F534BC4B14D5E9656197119CDC505CB', 'cip498': 'AE8C1932E50AC3A8D77C31E68C149A7E', 'cip491': '831AA4C763D12D037C75D9D3467D272A', 'cip490': '70ED1E10F7EC90C8C1686A0517E1DC5D', 'cip493': '52104225BF07DC16DB78EA620027F799', 'cip492': 'C4B4C92CC0101A7872A767674B0F4E94', 'cip495': 'A151FE2AC952565D8EDFB212A8638401', 'cip494': '2A0304AC7F91FFF8AC8CE4540D7A5935', 'cip497': '2E7997933BDD4559B35F101EC2B46E93', 'cip496': 'E305EAF646924EFD5607FF9FB45225EC', 'msg209': '00000000000000000000000000000000', 'msg208': '00000000000000000000000000000000', 'msg205': '00000000000000000000000000000000', 'msg204': '00000000000000000000000000000000', 'msg207': '00000000000000000000000000000000', 'msg206': '00000000000000000000000000000000', 'msg201': '00000000000000000000000000000000', 'msg200': '00000000000000000000000000000000', 'msg203': '00000000000000000000000000000000', 'msg202': '00000000000000000000000000000000', 'cip369': '6D03E3381991EDC800513D30BE07DE5A', 'cip368': 'AE042A69C879D524DC4BCC70B84B1B37', 'cip363': '267FCBA295A670CB9EC18AFBB819CE91', 'cip362': '71BC0D1DEA15FE3BC4AA6DD829C8E957', 'cip361': 'AAECA9394EF359D851CC9F244D4D1E54', 'cip360': '56C2530D97A43944BE7874E6FA9121FD', 'cip367': 'B210E51F2C154205DA4A1D1B892DCC63', 'cip366': '368A8D2610A773A477B924028DAD455F', 'cip365': '63E94B466C955B7204285E418A156B29', 'cip364': 'D18CC92248E209FF8C9AF4AC93588727', 'cip569': 'C8DBD7B0DAB1FF4451A63E5BA5F29D18', 'cip568': 'EED18337C79B8E42EEFA41F16D9431FC', 'cip425': '59EA9AA37AAE3AB10C6DFD214B044F1A', 'cip565': '7F1147B387043382664C20A3F9A297AF', 'cip564': 'B5D6C8104284868D51C98EFAC2B31D2C', 'cip567': '699A3AC95FA20E356A04DE87180118C2', 'cip566': '003358CC7FEC5EEA24E67DC089BB3E0A', 'cip561': '38D962F1FA639DB51032C220BE33936C', 'cip560': '866C8D28DE55C93B6852F85A3D915DCF', 'cip563': '95255A7DEBC7C31C78BA05B875C0DD03', 'cip562': '4B95BE31348C8EB73BA9E14DE17F9549', 'cip385': 'EC9723B15B2A6489F84C4524FFFC2748', 'cip384': '49672BA898D98DF95019180445491089', 'cip387': '021F144BE75CB5180F65308AFDB50429', 'cip386': '1187F485538514476184E567DA0421C7', 'cip381': '9D9286D5E97CCDEC47E03CB12C34B339', 'cip380': '824C5F6FECE3E0FC4293821B987B3BD4', 'cip383': 'AD86DE83231C3203A86AE33B721EAA9F', 'cip382': 'BC2C09F0B3FC63CE17F1BE7F267E3E0A', 'cip389': '04718DA0C5A6EAAA95ABC9DCC013DE81', 'cip388': '7925C603690B0EF3ADA5921194444511', 'cip423': 'AAA4E5A9B0808C2F56CAAC77E09639CE', 'msg339': '00000000000000000000100000000000', 'msg338': '00000000000000000000200000000000', 'msg331': '00000000000000000010000000000000', 'msg330': '00000000000000000020000000000000', 'msg333': '00000000000000000004000000000000', 'msg332': '00000000000000000008000000000000', 'msg335': '00000000000000000001000000000000', 'msg334': '00000000000000000002000000000000', 'msg337': '00000000000000000000400000000000', 'msg336': '00000000000000000000800000000000', 'cip143': '446B5ADE1FE91D73511403B34F20FF16', 'cip142': '675F1E9F7C895DD0B4E1F8D4EED1D2C9', 'cip141': 'E17C717EC7A1CF3492710D9FE53A26AD', 'cip140': '6316DDDD174659C16CF3324A770225EB', 'cip147': 'B190C3C5AC183F95F71495A93C679BDB', 'cip146': '9112A5FEB40E3134C26303F379F29AF6', 'cip145': 'FED174EAC6701DAD5DF03DD8A438D99C', 'cip144': 'D7078E2A1CB16142851F7C5F86FF4E64', 'cip149': '5550900FAF11F9D2DDC6CF2F1D7AAEDB', 'cip148': '5777C456EEDBB7756AE316517C1072A8', 'cip639': '6AC7579D9377845A816CA6D758F3FEFF', 'cip638': 'CBB014220EA4B36A5B5554140AFD721A', 'cip49': '36CD300072D4EC94A0FF3595F7A2C1FE', 'cip48': 'ECE089620BF6866A66FB6070C491C74C', 'cip41': '1BD0EEF566BEFB4D57CE7120B731125E', 'cip40': 'C9642C4E3F420CA73E8F1C15C6EB011F', 'cip43': 'D88F55DAC599BEA8440B4BA9E3C50016', 'cip42': 'CB0705AE3DB537AD1C202DD6635202DA', 'cip45': 'CC55A4F4086043F1E1ABA9CC91E4395A', 'cip44': 'FF227EC8AF4640198173A79B124CEFDF', 'cip47': '343E1B000FEDAC000376EE138FD8F0F7', 'cip46': '8D2BAD986865A229601855B024D9A557', 'msg640': '00112233445566778899AABBCCDDEEFF', 'key180': '0000000000000000000000000000000000000000000008000000000000000000', 'key181': '0000000000000000000000000000000000000000000004000000000000000000', 'key182': '0000000000000000000000000000000000000000000002000000000000000000', 'key183': '0000000000000000000000000000000000000000000001000000000000000000', 'key184': '0000000000000000000000000000000000000000000000800000000000000000', 'key185': '0000000000000000000000000000000000000000000000400000000000000000', 'key186': '0000000000000000000000000000000000000000000000200000000000000000', 'key187': '0000000000000000000000000000000000000000000000100000000000000000', 'key188': '0000000000000000000000000000000000000000000000080000000000000000', 'key189': '0000000000000000000000000000000000000000000000040000000000000000', 'key634': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key635': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key632': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key633': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key630': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key631': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key522': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key523': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key520': '8888888888888888888888888888888888888888888888888888888888888888', 'key521': '8989898989898989898989898989898989898989898989898989898989898989', 'key526': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key527': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key524': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key525': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key528': '9090909090909090909090909090909090909090909090909090909090909090', 'key529': '9191919191919191919191919191919191919191919191919191919191919191', 'key458': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key459': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key452': '4444444444444444444444444444444444444444444444444444444444444444', 'key453': '4545454545454545454545454545454545454545454545454545454545454545', 'key450': '4242424242424242424242424242424242424242424242424242424242424242', 'key451': '4343434343434343434343434343434343434343434343434343434343434343', 'key456': '4848484848484848484848484848484848484848484848484848484848484848', 'key457': '4949494949494949494949494949494949494949494949494949494949494949', 'key454': '4646464646464646464646464646464646464646464646464646464646464646', 'key455': '4747474747474747474747474747474747474747474747474747474747474747', 'msg528': '90909090909090909090909090909090', 'msg529': '91919191919191919191919191919191', 'msg524': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg525': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg526': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg527': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg520': '88888888888888888888888888888888', 'msg521': '89898989898989898989898989898989', 'msg522': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'msg523': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'cip330': '294A16831BF660536203030B59DA20F3', 'cip331': 'D189C5A12722ABFEBA16F155975068E6', 'cip332': '9A9248C1FEDF207CE64F68E73B22A77C', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000000000000000000000000', 'msg239': '00000000000000000000000000000000', 'msg230': '00000000000000000000000000000000', 'msg231': '00000000000000000000000000000000', 'msg232': '00000000000000000000000000000000', 'msg233': '00000000000000000000000000000000', 'msg234': '00000000000000000000000000000000', 'msg235': '00000000000000000000000000000000', 'msg236': '00000000000000000000000000000000', 'msg237': '00000000000000000000000000000000', 'cip558': '192A5DB642285A59B806E4EE067706F0', 'cip559': '0A685729783559213DB06520387FCCD7', 'cip550': '888CFA357E1E2EDDE93B9B0279DC809D', 'cip551': '6F318A0BB65CC2676CE9C280FA60A9A2', 'cip552': 'F9A26E3DC6A20BA4687B535F99E74374', 'cip553': '38412D11CF8B5764725787C4E6AB6C78', 'cip554': '577336D810624ADA5A7520809DB36FB9', 'cip555': '11EA26CEC2BB1C69A8C7C622DE3A3154', 'cip556': '470064AD263F461F77B800DC3AD98924', 'cip557': '08F6C1EC99A7AA82C833FC1F73086E5A', 'msg304': '00000000000080000000000000000000', 'msg305': '00000000000040000000000000000000', 'msg306': '00000000000020000000000000000000', 'msg307': '00000000000010000000000000000000', 'msg300': '00000000000800000000000000000000', 'msg301': '00000000000400000000000000000000', 'msg302': '00000000000200000000000000000000', 'msg303': '00000000000100000000000000000000', 'msg308': '00000000000008000000000000000000', 'msg309': '00000000000004000000000000000000', 'cip600': '331500BC3E6B20EB1E8A1346E6DBFB51', 'cip601': 'CACDF4F6BEED9FA67E85B0FCCF5FA73F', 'cip602': 'B2CAECBD6DA08FA66E031F21EE64B98B', 'cip603': '0A1EB4F434970A5DA20E0DC5A997DCC9', 'cip604': '384736EE38CEBEBB4EAAA30DEE43B175', 'cip605': '2C6FEC52D4490F3DB9B703354CCC8BF1', 'cip606': '8DDC2ED210A96A8319980EF9FC179216', 'cip607': '9C79BAF04FC371244B61D7EC0445643C', 'cip608': 'EE7FAC7B841FFADA50502BA8A017D55E', 'cip609': 'B1BC8478575D63EA9F4A7CEEC512F01B', 'cip58': '98D5AE45E15A836C141CF7F64DC7D551', 'cip59': 'EEFBED56D7BD47D088B3AD657A6CB8B8', 'cip52': '45A32C5EA3E2E548A9E6313BEF957308', 'cip53': 'C2105CC6264024EBEC6BA0F825FD5163', 'cip50': 'F939CB3D8316B59600F164234E78D228', 'cip51': '17C6258E6009E282661869D525F7D204', 'cip56': 'D9732CE2055E7F935468A63A170B598C', 'cip57': 'E9F396623AF12ADF24C0378F42F7B4BD', 'cip54': '85F3D2169883A7CD54A67DA7C4AC613C', 'cip55': 'B5FFC7D92EA2815C0F4DC9182DA160C6', 'cip621': '0B151C81FDEDF1458D24A114830BDC90', 'key629': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key628': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key199': '0000000000000000000000000000000000000000000000000100000000000000', 'key198': '0000000000000000000000000000000000000000000000000200000000000000', 'key197': '0000000000000000000000000000000000000000000000000400000000000000', 'key196': '0000000000000000000000000000000000000000000000000800000000000000', 'key195': '0000000000000000000000000000000000000000000000001000000000000000', 'key194': '0000000000000000000000000000000000000000000000002000000000000000', 'key193': '0000000000000000000000000000000000000000000000004000000000000000', 'key192': '0000000000000000000000000000000000000000000000008000000000000000', 'key191': '0000000000000000000000000000000000000000000000010000000000000000', 'key190': '0000000000000000000000000000000000000000000000020000000000000000', 'key531': '9393939393939393939393939393939393939393939393939393939393939393', 'key530': '9292929292929292929292929292929292929292929292929292929292929292', 'key533': '9595959595959595959595959595959595959595959595959595959595959595', 'key532': '9494949494949494949494949494949494949494949494949494949494949494', 'key535': '9797979797979797979797979797979797979797979797979797979797979797', 'key534': '9696969696969696969696969696969696969696969696969696969696969696', 'key537': '9999999999999999999999999999999999999999999999999999999999999999', 'key536': '9898989898989898989898989898989898989898989898989898989898989898', 'key539': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key538': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key449': '4141414141414141414141414141414141414141414141414141414141414141', 'key448': '4040404040404040404040404040404040404040404040404040404040404040', 'key441': '3939393939393939393939393939393939393939393939393939393939393939', 'key440': '3838383838383838383838383838383838383838383838383838383838383838', 'key443': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key442': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key445': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key444': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key447': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key446': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg539': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg538': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg533': '95959595959595959595959595959595', 'msg532': '94949494949494949494949494949494', 'msg531': '93939393939393939393939393939393', 'msg530': '92929292929292929292929292929292', 'msg537': '99999999999999999999999999999999', 'msg536': '98989898989898989898989898989898', 'msg535': '97979797979797979797979797979797', 'msg534': '96969696969696969696969696969696', 'msg227': '00000000000000000000000000000000', 'msg226': '00000000000000000000000000000000', 'msg225': '00000000000000000000000000000000', 'msg224': '00000000000000000000000000000000', 'msg223': '00000000000000000000000000000000', 'msg222': '00000000000000000000000000000000', 'msg221': '00000000000000000000000000000000', 'msg220': '00000000000000000000000000000000', 'msg229': '00000000000000000000000000000000', 'msg228': '00000000000000000000000000000000', 'cip503': '69FC347C83B45B6D3BA7862C849A083D', 'cip547': '0B02B87EF9F3F85DD31861E5A7DB1761', 'cip546': 'F3A494D3C212527D80D2C57FF0BF7CEA', 'cip545': 'A7CD068A84DC2504A4B159172C7D5123', 'cip544': 'FF1B226F4C5C2E7986B334E1E88E2CB5', 'cip543': '7F7FCAA3D9F022C04066C3351C9BBF12', 'cip542': '9410E98F3F75065FC13C98DB1E1E5506', 'cip541': 'C8862D018227474619C1697A51E53F58', 'cip540': '53DB82B8ED957EBA39A2239D8D5FE1DD', 'cip549': '369D214973487767999F97290C5CE69E', 'cip548': '4A713295B2EA861D77B3E26484D03F02', 'cip502': '69D3B8CBDF7AB187383B257A5B534BBF', 'msg313': '00000000000000400000000000000000', 'msg312': '00000000000000800000000000000000', 'msg311': '00000000000001000000000000000000', 'msg310': '00000000000002000000000000000000', 'msg317': '00000000000000040000000000000000', 'msg316': '00000000000000080000000000000000', 'msg315': '00000000000000100000000000000000', 'msg314': '00000000000000200000000000000000', 'msg319': '00000000000000010000000000000000', 'msg318': '00000000000000020000000000000000', 'cip619': 'A424E92075F49A130B70AC930DD398EC', 'cip618': 'CB31CB7BD552BE41473D7A96039F551E', 'cip617': 'C425E08D8C71F60BD6B72824FD956A3B', 'cip616': 'E6C318E2F049B55B4A53FE91F5885016', 'cip615': 'CB11B820694DFE241B153B92347DE0C6', 'cip614': '5A1DF9EFF495A0C54E07BC1613CC8A23', 'cip613': 'B19E7A5D36278425625006E4291EF3D7', 'cip612': '64062F4B350EC2E63F2FFD9CCC75BC54', 'cip611': 'B94DE0128490A18C0A5B32F3ED235DEF', 'cip610': '80158AB36BD015228487AFD6A4844AA3', 'cip67': '2A3BAC4370DAA0D68CA90939F43E33CC', 'cip66': '4BB9FD26E225C913F9BE1B697D31B5B9', 'cip65': 'DD6A02B2DC091212A746C8FC9967B8BE', 'cip64': 'BCC02339FCFFCAE0536FB5410AF91129', 'cip63': 'D48E45670FD978FA4DB161C0E5D59FC0', 'cip62': '66602FD71F84B2637B2283CD81DE3080', 'cip61': '25C35298C0A1224F2BEE7EE8AAA86E51', 'cip60': 'A99342C96F331950D97AFBFC8C0D4E08', 'cip69': 'E620C37AD1650DCEAEBEAE1F57BD8AD9', 'cip68': '8576F1070E25B5FD944C366E08CC9102', 'key618': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key619': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key610': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'key611': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key612': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key613': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key614': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key615': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key616': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key617': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'cip229': 'A2E337EFDF4B888C2B94B86AE20FF8E8', 'key298': '0000000000000000000000000000000000000000000000000000000000000000', 'key299': '0000000000000000000000000000000000000000000000000000000000000000', 'key294': '0000000000000000000000000000000000000000000000000000000000000000', 'key295': '0000000000000000000000000000000000000000000000000000000000000000', 'key296': '0000000000000000000000000000000000000000000000000000000000000000', 'key297': '0000000000000000000000000000000000000000000000000000000000000000', 'key290': '0000000000000000000000000000000000000000000000000000000000000000', 'key291': '0000000000000000000000000000000000000000000000000000000000000000', 'key292': '0000000000000000000000000000000000000000000000000000000000000000', 'key293': '0000000000000000000000000000000000000000000000000000000000000000', 'key508': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key509': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key504': '7878787878787878787878787878787878787878787878787878787878787878', 'key505': '7979797979797979797979797979797979797979797979797979797979797979', 'key506': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key507': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key500': '7474747474747474747474747474747474747474747474747474747474747474', 'key501': '7575757575757575757575757575757575757575757575757575757575757575', 'key502': '7676767676767676767676767676767676767676767676767676767676767676', 'key503': '7777777777777777777777777777777777777777777777777777777777777777', 'key276': '0000000000000000000000000000000000000000000000000000000000000000', 'key277': '0000000000000000000000000000000000000000000000000000000000000000', 'key274': '0000000000000000000000000000000000000000000000000000000000000000', 'key275': '0000000000000000000000000000000000000000000000000000000000000000', 'key272': '0000000000000000000000000000000000000000000000000000000000000000', 'key273': '0000000000000000000000000000000000000000000000000000000000000000', 'key270': '0000000000000000000000000000000000000000000000000000000000000000', 'key271': '0000000000000000000000000000000000000000000000000000000000000000', 'key278': '0000000000000000000000000000000000000000000000000000000000000000', 'key279': '0000000000000000000000000000000000000000000000000000000000000000', 'cip515': '6AF7ED0E39E59D12A0AFE6E99FFCBE63', 'key474': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key475': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key476': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key477': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key470': '5656565656565656565656565656565656565656565656565656565656565656', 'key471': '5757575757575757575757575757575757575757575757575757575757575757', 'key472': '5858585858585858585858585858585858585858585858585858585858585858', 'key473': '5959595959595959595959595959595959595959595959595959595959595959', 'key478': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key479': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg252': '00000000000000000000000000000000', 'msg253': '00000000000000000000000000000000', 'msg250': '00000000000000000000000000000000', 'msg251': '00000000000000000000000000000000', 'msg256': '80000000000000000000000000000000', 'msg257': '40000000000000000000000000000000', 'msg254': '00000000000000000000000000000000', 'msg255': '00000000000000000000000000000000', 'msg258': '20000000000000000000000000000000', 'msg259': '10000000000000000000000000000000', 'msg494': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg495': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg496': '70707070707070707070707070707070', 'msg497': '71717171717171717171717171717171', 'msg490': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg491': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg492': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'msg493': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg498': '72727272727272727272727272727272', 'msg499': '73737373737373737373737373737373', 'key97': '0000000000000000000000004000000000000000000000000000000000000000', 'key96': '0000000000000000000000008000000000000000000000000000000000000000', 'key95': '0000000000000000000000010000000000000000000000000000000000000000', 'key94': '0000000000000000000000020000000000000000000000000000000000000000', 'key93': '0000000000000000000000040000000000000000000000000000000000000000', 'key92': '0000000000000000000000080000000000000000000000000000000000000000', 'key91': '0000000000000000000000100000000000000000000000000000000000000000', 'key90': '0000000000000000000000200000000000000000000000000000000000000000', 'cip538': 'C5C8FD84078B49544A522A451B4EF12D', 'cip539': '94D7D8BF5DDF87B4C5C18863951D81DF', 'key99': '0000000000000000000000001000000000000000000000000000000000000000', 'key98': '0000000000000000000000002000000000000000000000000000000000000000', 'cip514': 'AAA92B00896FE228BDF5AA3BA534CA44', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': '0F7CE54A338AB05E2C38F1725DA8B127', 'cip289': 'CAD8158D26EED67D4355BB66D0812ADE', 'cip284': '3A259B7AEE3155C0C4DF7A32EF40FB19', 'cip285': '028EFD3B6E686C87B402151F414B13AD', 'cip286': 'D4F61CC61FA1DBD68B8C48541AE77289', 'cip287': 'DFCCE96C8C244586A3BCF098306C6374', 'cip280': 'C02ED6499331AF8C6CF30A63BB5E89CA', 'cip281': 'B5F166B94EC31A17662E24757FBB3FC5', 'cip282': '17D20FBDA96D4AD0D99DAE64DE5F317B', 'cip283': '320FA060BBB901F66A9E4CFF221E6A4A', 'msg75': '00000000000000000000000000000000', 'cip448': 'EAA29A98E10A4AB9B5915AD5A4CF18D1', 'cip449': '138814DA7AB2564415BF2B1975E8AEE3', 'cip446': 'E64CD5838022B9B0510F912D73DF770A', 'cip447': 'C7C82772A2A8E0096CA52536B842C95B', 'cip444': '052C775722AFEF0010C5795C521B9D25', 'cip445': '9255BCA646A86FFBADE6F6632F0A0EFC', 'cip442': 'E59FD8D22CE84AAB7EAD2C21DFD10F57', 'cip443': '5415206EFE692AD90272E8A8CB6F638D', 'cip440': 'E43D1D06F03122F900E304751B2DD0C5', 'cip441': '8FBBC002A6C016F7A3B7AF5076C9F6DA', 'cip266': 'DF581405DFBDEFACB35AD3BC510FE895', 'cip267': '45B3C3DAC439F884447567B282DE329C', 'cip264': '2B451B22A3EBAB1C7A7619551DDF149F', 'cip265': '3ABE3CAEDA54E5583269803BE04CBB2C', 'cip262': 'DF5E38BE0362C35E8AF472C6327987DA', 'cip263': '07E5E5AD7097B849BADC2D5D803B7F6A', 'cip260': '8229E6539268BB39F3218E2903110C4F', 'cip261': '935A7835E2FAF9F7F20CE85662EE281F', 'cip268': '4192DE2B562CDD43EC4358EA730250C3', 'cip269': '27E310D8032E16CF970F635C517E7D2E', 'cip198': 'E92FEBFA44950BE01CE755EB4607563B', 'cip199': 'A583EF976A292B406BBD5DC8256B0442', 'cip190': 'F7E405B065FB1A03EBD539CFCAD08E17', 'cip191': '0872458B2E2C4725CE7DEC3FFFC47F4A', 'cip192': '853E0E5DD1CA7C9C55388DDBA2F138FD', 'cip193': '6991C5D5E1BD766597115C5A213F6CFB', 'cip194': '4E0D7A3C6816CC844ABA4BB6AA0F3592', 'cip195': '1A93F22F2E11AFC3CECA1FC17065ECEC', 'cip196': '1519F9986E85E5B942A66DFE1D6ECBE7', 'cip197': '2B583F2363F6C1D981BD2D0C3F965F3A', 'cip70': '7761ECD209CB564EEACAB4E62DB26BDD', 'cip71': '67D23F0CF1A57BA0E43FE82A3F4FBBB6', 'cip72': '6ED568AD50C256B77945E19C04086D98', 'cip73': 'F2398F417C685FE664735E29DB29BBA9', 'cip74': '37D20B991D910044C6BEF068028125D4', 'cip75': '35721318ED63062B43D37C4F14101962', 'cip76': '74A004A5D483CCA7219EA12AD4AF5CA4', 'cip77': 'BBCEA8A80619D2AC53037313E71AB56C', 'cip78': '646E434C0FEF5CD6CD9C7A26BA972BB1', 'cip79': '8F2AD3F65E9716E611501D5B7AD81127', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'msg576': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key289': '0000000000000000000000000000000000000000000000000000000000000000', 'key288': '0000000000000000000000000000000000000000000000000000000000000000', 'key283': '0000000000000000000000000000000000000000000000000000000000000000', 'key282': '0000000000000000000000000000000000000000000000000000000000000000', 'key281': '0000000000000000000000000000000000000000000000000000000000000000', 'key280': '0000000000000000000000000000000000000000000000000000000000000000', 'key287': '0000000000000000000000000000000000000000000000000000000000000000', 'key286': '0000000000000000000000000000000000000000000000000000000000000000', 'key285': '0000000000000000000000000000000000000000000000000000000000000000', 'key284': '0000000000000000000000000000000000000000000000000000000000000000', 'key519': '8787878787878787878787878787878787878787878787878787878787878787', 'key518': '8686868686868686868686868686868686868686868686868686868686868686', 'key513': '8181818181818181818181818181818181818181818181818181818181818181', 'key512': '8080808080808080808080808080808080808080808080808080808080808080', 'key511': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key510': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key517': '8585858585858585858585858585858585858585858585858585858585858585', 'key516': '8484848484848484848484848484848484848484848484848484848484848484', 'key515': '8383838383838383838383838383838383838383838383838383838383838383', 'key514': '8282828282828282828282828282828282828282828282828282828282828282', 'key265': '0000000000000000000000000000000000000000000000000000000000000000', 'key264': '0000000000000000000000000000000000000000000000000000000000000000', 'key267': '0000000000000000000000000000000000000000000000000000000000000000', 'key266': '0000000000000000000000000000000000000000000000000000000000000000', 'key261': '0000000000000000000000000000000000000000000000000000000000000000', 'key260': '0000000000000000000000000000000000000000000000000000000000000000', 'key263': '0000000000000000000000000000000000000000000000000000000000000000', 'key262': '0000000000000000000000000000000000000000000000000000000000000000', 'key269': '0000000000000000000000000000000000000000000000000000000000000000', 'key268': '0000000000000000000000000000000000000000000000000000000000000000', 'cip635': '8D586E53318116E54E4AC82DC997DDF4', 'cip634': '88DAF93AB4A8321F728B8B7C95ADF18A', 'cip637': '8B54C5B81ADBE4E1712931515684E692', 'key607': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'key606': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key605': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key604': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key603': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key602': 'DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA', 'key601': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key600': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'cip631': '87328511D8F05DFF8E6E2D285ED2FEBC', 'key609': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key608': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'cip633': 'BF34687415B3801531D51929FBB4DEFB', 'cip632': '52B0617576697BC68FC70197951CE2CD', 'cip518': '43783BD064B66455AA52EA05ECA7BBDC', 'cip519': '150AC66FE2263640E7C4EEA57C7A5DD4', 'key463': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key462': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key461': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key460': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key467': '5353535353535353535353535353535353535353535353535353535353535353', 'key466': '5252525252525252525252525252525252525252525252525252525252525252', 'key465': '5151515151515151515151515151515151515151515151515151515151515151', 'key464': '5050505050505050505050505050505050505050505050505050505050505050', 'key469': '5555555555555555555555555555555555555555555555555555555555555555', 'key468': '5454545454545454545454545454545454545454545454545454545454545454', 'cip516': 'BCADFBB980B87CDC8B841483991E545F', 'cip517': '87694A51BFE0B78B2AAC63BB2EAFA25F', 'cip523': '05D906E3FFA5E5E32CE099060FDAFCE4', 'cip510': 'C77C11CBD96C18F7633552AE6380C370', 'key624': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'cip511': '5695D175E8B526CFD2DCB59D088ED296', 'cip512': 'B300F700987E62DDB46AEAB2835E2861', 'cip513': 'C20C03C9C5F61BAFEC147FC399B363F4', 'msg241': '00000000000000000000000000000000', 'msg240': '00000000000000000000000000000000', 'msg243': '00000000000000000000000000000000', 'msg242': '00000000000000000000000000000000', 'msg245': '00000000000000000000000000000000', 'msg244': '00000000000000000000000000000000', 'msg247': '00000000000000000000000000000000', 'msg246': '00000000000000000000000000000000', 'msg249': '00000000000000000000000000000000', 'msg248': '00000000000000000000000000000000', 'msg483': '63636363636363636363636363636363', 'msg482': '62626262626262626262626262626262', 'msg481': '61616161616161616161616161616161', 'msg480': '60606060606060606060606060606060', 'msg487': '67676767676767676767676767676767', 'msg486': '66666666666666666666666666666666', 'msg485': '65656565656565656565656565656565', 'msg484': '64646464646464646464646464646464', 'msg489': '69696969696969696969696969696969', 'msg488': '68686868686868686868686868686868', 'key80': '0000000000000000000080000000000000000000000000000000000000000000', 'key81': '0000000000000000000040000000000000000000000000000000000000000000', 'key82': '0000000000000000000020000000000000000000000000000000000000000000', 'key83': '0000000000000000000010000000000000000000000000000000000000000000', 'key84': '0000000000000000000008000000000000000000000000000000000000000000', 'key85': '0000000000000000000004000000000000000000000000000000000000000000', 'key86': '0000000000000000000002000000000000000000000000000000000000000000', 'key87': '0000000000000000000001000000000000000000000000000000000000000000', 'key88': '0000000000000000000000800000000000000000000000000000000000000000', 'key89': '0000000000000000000000400000000000000000000000000000000000000000', 'cip527': '1FAD1B0BF748B6EE4FBC8FD0ACB20B62', 'cip299': 'CFD3A8EE62F68692A8917C814290E979', 'cip298': 'A9E22B14D403C7F0FA9D95C064CBA9D3', 'cip293': 'C0F6B4881776765507CF91DB0A32C70F', 'cip292': '29A5D9977C881DB067136B755BB68E54', 'cip291': '308CD48EC851D7C1251174228B943B11', 'cip290': '5332616A057A657FD2FD6562AF33EFC9', 'cip297': '2002487C2CFE5A223E3A3C19A6B23670', 'cip296': '0F6D2E73CF929A92BADF0A372FFB31A5', 'cip295': '58D7E0D60E315EEBA97F0DFA2D7307B0', 'cip294': '47E518209CB5533F9A7EE02C4F07391B', 'cip459': '499882932A9B954E9C497259AF74FB91', 'cip458': 'E7AC316166FD3903AEE82D89A72D70E9', 'cip455': '513282367E9270ACA63EEF5066455B64', 'cip454': 'F508590EC0E2D11D23B892885E32737E', 'cip457': 'F2DBB82CAAA21B8288B33E06B572B46E', 'cip456': '5B0931DEA2295EF51C6612C9CE34E1F1', 'cip451': 'CE449A1BED32DD4143AB84161EE5D276', 'cip450': 'B9A210C0ECD3A13E19EA2C0F0023A928', 'cip453': '3539BA5C1F7C679B9721A47B0309837E', 'cip452': '5CDF709917EC5CFF1099A3D8E8D48F56', 'cip275': 'B666AA7C5BA5209CBCEDE07EB66064D3', 'cip274': '11BB660CF8431F2625AB9EF603975BB7', 'cip277': 'ED29F7805804E2E95F664B2E36C20A67', 'cip276': 'CAD843E927DDE8F92DBBB33C1B4E87F9', 'cip271': 'B4AD06B55E31DE8F1F77C2B7AE8B73FD', 'cip270': '573CAE2A23968DE1D40036C24F9FEFA4', 'cip273': 'EA3C7C9B02AE7297B4BE551C8C551440', 'cip272': 'BD5426FFD3CC9FC735EBAB7C72FD2D9B', 'cip279': 'E47A19E8579807B5C44AC62619372673', 'cip278': '980F61BF6EBDE1A30607A1D51FFFB8D6', 'cip187': '6E71FFAC10EDBF08A6DC42BDA14AE1CE', 'cip186': 'E85D57184DA2B982C18C8B13B1348838', 'cip185': 'F502C9674BEBFAE010527C808CA03F5C', 'cip184': '08D8A40BCA6BC1C31BADCC9DDA387D9C', 'cip183': 'A577782DBA6EDE990B2A28FBF52899B0', 'cip182': '0CE37E34B01BAF724841EC58A6B90990', 'cip181': 'ADCAFB490DD340784F084779CE182FFE', 'cip180': 'F02FA74352855E5FC194F18476DC2916', 'cip189': 'CBC811575660AF9F7E869631ED779F66', 'cip188': '0F2D7BEE48845D8A17ECF93F52F9036A', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': 'C899A00A2585C1F654694700F1EC1531', 'cip88': 'AD4B018D50E3A28124A0A1259DC667D4', 'cip85': '5E6F28690F31CDC0DAD21D8E3E1BC985', 'cip84': 'C11856EE23FA27F2F426844EE9C7B081', 'cip87': '4A567C948597B47A1ABF5F8CCD77AE4F', 'cip86': '712D271BAB597FF6728C0A55CE6C3CDB', 'cip81': 'DDB074D9E22B61FCDCB2323A52046221', 'cip80': 'B4B30728F0DDBB28402E252DC6DDBA4E', 'cip83': '25415EF8615CC222B1EC77046B094C35', 'cip82': '91ABBBFECEC752159297B832055E99FE', 'msg597': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg596': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key626': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg99': '00000000000000000000000000000000', 'cip344': '7407623C54E38D13B48B84306DD8F244', 'msg95': '00000000000000000000000000000000', 'cip348': 'F08620D46001C366FD6DCBEBC806C182', 'key627': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key250': '0000000000000000000000000000000000000000000000000000000000000020', 'key251': '0000000000000000000000000000000000000000000000000000000000000010', 'key252': '0000000000000000000000000000000000000000000000000000000000000008', 'key253': '0000000000000000000000000000000000000000000000000000000000000004', 'key254': '0000000000000000000000000000000000000000000000000000000000000002', 'key255': '0000000000000000000000000000000000000000000000000000000000000001', 'key256': '0000000000000000000000000000000000000000000000000000000000000000', 'key257': '0000000000000000000000000000000000000000000000000000000000000000', 'key258': '0000000000000000000000000000000000000000000000000000000000000000', 'key259': '0000000000000000000000000000000000000000000000000000000000000000', 'key382': '0000000000000000000000000000000000000000000000000000000000000000', 'key383': '0000000000000000000000000000000000000000000000000000000000000000', 'key380': '0000000000000000000000000000000000000000000000000000000000000000', 'key381': '0000000000000000000000000000000000000000000000000000000000000000', 'key386': '0202020202020202020202020202020202020202020202020202020202020202', 'key387': '0303030303030303030303030303030303030303030303030303030303030303', 'key384': '0000000000000000000000000000000000000000000000000000000000000000', 'key385': '0101010101010101010101010101010101010101010101010101010101010101', 'key388': '0404040404040404040404040404040404040404040404040404040404040404', 'key389': '0505050505050505050505050505050505050505050505050505050505050505', 'key498': '7272727272727272727272727272727272727272727272727272727272727272', 'key499': '7373737373737373737373737373737373737373737373737373737373737373', 'key496': '7070707070707070707070707070707070707070707070707070707070707070', 'key497': '7171717171717171717171717171717171717171717171717171717171717171', 'key494': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key495': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key492': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key493': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key490': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key491': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key620': 'ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC', 'cip530': '3376EB6475507938793833C05F01AEF4', 'msg278': '00000200000000000000000000000000', 'msg279': '00000100000000000000000000000000', 'msg274': '00002000000000000000000000000000', 'msg275': '00001000000000000000000000000000', 'msg276': '00000800000000000000000000000000', 'msg277': '00000400000000000000000000000000', 'msg270': '00020000000000000000000000000000', 'msg271': '00010000000000000000000000000000', 'msg272': '00008000000000000000000000000000', 'msg273': '00004000000000000000000000000000', 'msg478': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'msg479': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg476': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg477': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg474': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg475': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg472': '58585858585858585858585858585858', 'msg473': '59595959595959595959595959595959', 'msg470': '56565656565656565656565656565656', 'msg471': '57575757575757575757575757575757', 'key79': '0000000000000000000100000000000000000000000000000000000000000000', 'key78': '0000000000000000000200000000000000000000000000000000000000000000', 'key75': '0000000000000000001000000000000000000000000000000000000000000000', 'key74': '0000000000000000002000000000000000000000000000000000000000000000', 'key77': '0000000000000000000400000000000000000000000000000000000000000000', 'key76': '0000000000000000000800000000000000000000000000000000000000000000', 'key71': '0000000000000000010000000000000000000000000000000000000000000000', 'key70': '0000000000000000020000000000000000000000000000000000000000000000', 'key73': '0000000000000000004000000000000000000000000000000000000000000000', 'key72': '0000000000000000008000000000000000000000000000000000000000000000', 'key625': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'cip537': '930031A0EED54C389CA3D6DAD0C8BFCD', 'msg618': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg619': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg612': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'msg613': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg610': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg611': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg616': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'msg617': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg614': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg615': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg588': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg589': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg582': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg583': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg580': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg581': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg586': 'CACACACACACACACACACACACACACACACA', 'msg587': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'msg584': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg585': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'cip468': 'B15B34732A77582685EC39D206AD7971', 'cip469': '3D4A329E2C0CB82C3B55DC65D82C8F5D', 'cip460': '6D391061B2808CB51861BFF04D1D13FB', 'cip461': '3300163873719E2614ECBAE9FF1F0EE5', 'cip462': '3F8577CBA87F31DE3B075321AABF1840', 'cip463': '89EF16A9192ABD0A14166857B473DA63', 'cip464': '4ED19F98FD9527425802105888860339', 'cip465': 'B474DE1B8EA648B22F70C9A7ACD589C1', 'cip466': '20ED60D6AFF842956D9E9E57D9F06E62', 'cip467': '17B7CCDA23125B87A69C467A19270464', 'cip240': '82EDDDC59E207131F1AE2A2A06A83284', 'cip241': '1C17A9F76290FB6C0F0267BB1CE832C6', 'cip242': '6DD6415CC9EFB2323FA78ED28EEE06C7', 'cip243': '48FD01A424E995B0E0840353439B1A4B', 'cip244': '2B139C4C4200A8DA4DAF8169F84A4089', 'cip245': '0D7E0A00E181F592C1D75250AC940517', 'cip246': '9250D327F678E8EDBC25CB40EA70391E', 'cip247': '4D715D9421FCB51C7B4C94DEF2B5C210', 'cip248': '1908EF821AD2EBC0CB28BF66E796EDAB', 'cip249': '8D88B1E7BB45E0DD5603D8FCCD589695', 'msg296': '00000000008000000000000000000000', 'msg297': '00000000004000000000000000000000', 'msg294': '00000000020000000000000000000000', 'msg295': '00000000010000000000000000000000', 'msg292': '00000000080000000000000000000000', 'msg293': '00000000040000000000000000000000', 'msg290': '00000000200000000000000000000000', 'msg291': '00000000100000000000000000000000', 'key639': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg298': '00000000002000000000000000000000', 'msg299': '00000000001000000000000000000000', 'key636': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key637': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key621': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'cip98': 'FFF5A17155933F6084EA4C1BE1245769', 'cip99': '64CA3D5422833F7A4AD1FA5331C08A78', 'cip96': '5F3DB2DEE7074DAE2340174109D6BEF0', 'cip97': 'E530BC0CE5A24E03AD0D215A7E9D9A15', 'cip94': '9E457544FC14C723884DD15DEBC25157', 'cip95': 'E0767EC3934ECF169116B485ED0C755B', 'cip92': '97FD2DDD6045805A7B34879A6AB55D3C', 'cip93': '547D61C02DEF0D9869DF43907D3B8124', 'cip90': 'BAE53DCFCF6D6E360A27755F9CE81B6D', 'cip91': '6E181C731459C3360778BEA1BA86164D', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '00000000000000000000000000000000', 'msg129': '00000000000000000000000000000000', 'key622': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key249': '0000000000000000000000000000000000000000000000000000000000000040', 'key248': '0000000000000000000000000000000000000000000000000000000000000080', 'key247': '0000000000000000000000000000000000000000000000000000000000000100', 'key246': '0000000000000000000000000000000000000000000000000000000000000200', 'key245': '0000000000000000000000000000000000000000000000000000000000000400', 'key244': '0000000000000000000000000000000000000000000000000000000000000800', 'key243': '0000000000000000000000000000000000000000000000000000000000001000', 'key242': '0000000000000000000000000000000000000000000000000000000000002000', 'key241': '0000000000000000000000000000000000000000000000000000000000004000', 'key240': '0000000000000000000000000000000000000000000000000000000000008000', 'key391': '0707070707070707070707070707070707070707070707070707070707070707', 'key390': '0606060606060606060606060606060606060606060606060606060606060606', 'key393': '0909090909090909090909090909090909090909090909090909090909090909', 'key392': '0808080808080808080808080808080808080808080808080808080808080808', 'key395': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key394': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key397': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key396': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key399': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key398': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key640': '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F', 'key489': '6969696969696969696969696969696969696969696969696969696969696969', 'key488': '6868686868686868686868686868686868686868686868686868686868686868', 'key485': '6565656565656565656565656565656565656565656565656565656565656565', 'key484': '6464646464646464646464646464646464646464646464646464646464646464', 'key487': '6767676767676767676767676767676767676767676767676767676767676767', 'key486': '6666666666666666666666666666666666666666666666666666666666666666', 'key481': '6161616161616161616161616161616161616161616161616161616161616161', 'key480': '6060606060606060606060606060606060606060606060606060606060606060', 'key483': '6363636363636363636363636363636363636363636363636363636363636363', 'key482': '6262626262626262626262626262626262626262626262626262626262626262', 'cip532': 'E1A5BB56F536C178AE13DF9072C546E1', 'msg269': '00040000000000000000000000000000', 'msg268': '00080000000000000000000000000000', 'cip533': '2F70EC2D4A3B230EA16E8BDC562F59BA', 'msg263': '01000000000000000000000000000000', 'msg262': '02000000000000000000000000000000', 'msg261': '04000000000000000000000000000000', 'msg260': '08000000000000000000000000000000', 'msg267': '00100000000000000000000000000000', 'msg266': '00200000000000000000000000000000', 'msg265': '00400000000000000000000000000000', 'msg264': '00800000000000000000000000000000', 'cip531': '6EC9A5766B8951B4BAC92DC2CC70A604', 'msg469': '55555555555555555555555555555555', 'msg468': '54545454545454545454545454545454', 'msg465': '51515151515151515151515151515151', 'msg464': '50505050505050505050505050505050', 'msg467': '53535353535353535353535353535353', 'msg466': '52525252525252525252525252525252', 'msg461': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg460': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg463': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg462': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'cip509': 'F8072B98D842A73848E4C25301EEF78F', 'cip508': '426DD1AEB527F1DEC349979DA04D20D4', 'cip534': '239281E30A83651F2DA2E4B49F115F55', 'key68': '0000000000000000080000000000000000000000000000000000000000000000', 'key69': '0000000000000000040000000000000000000000000000000000000000000000', 'key66': '0000000000000000200000000000000000000000000000000000000000000000', 'key67': '0000000000000000100000000000000000000000000000000000000000000000', 'key64': '0000000000000000800000000000000000000000000000000000000000000000', 'key65': '0000000000000000400000000000000000000000000000000000000000000000', 'key62': '0000000000000002000000000000000000000000000000000000000000000000', 'key63': '0000000000000001000000000000000000000000000000000000000000000000', 'key60': '0000000000000008000000000000000000000000000000000000000000000000', 'key61': '0000000000000004000000000000000000000000000000000000000000000000', 'key638': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg609': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg608': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg601': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg600': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg603': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg602': 'DADADADADADADADADADADADADADADADA', 'msg605': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'msg604': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg607': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg606': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip477': 'FEE3A130BD54E4E4B4787DC5D9FCEBBF', 'cip476': '0B465E7A5F6804AB25B0AD0B4CD772A3', 'cip475': 'A8571CA6EDE2797A412CA47060982498', 'cip474': 'A62012B731A685C4FA6A7723D28EF8E4', 'cip473': 'EBB6B99456AE0E5DE95464C677210DC1', 'cip472': '9141BC1A33548F693C9303378FD787CB', 'cip471': '8B7C143FE71080D1693486D5CCE8D31B', 'cip470': '989ADAD903362FF282A18BBC765ADBEA', 'msg591': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg590': 'CECECECECECECECECECECECECECECECE', 'msg593': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg592': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg595': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg594': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'cip479': '042E3D48CFA03DF12941904385B045B7', 'cip478': '2B7A118ADB12D2E6303BB4AAF3749EF3', 'cip259': '917B2F6A11DDDCEB53FEA01E194A6CC9', 'cip258': '302F8325DEB1E1A0955D6273368A0DC4', 'cip257': '893BF67B1A845579C8FADC05BFDC0894', 'cip256': '8314675E8AD5C3ECD83D852BCF7F566E', 'cip255': '9858FD31C9C6B54AC0C99CC52324ED34', 'cip254': 'A6726CE53BD62BC873F6C0463A5841FC', 'cip253': 'F6899D57F734AFD6473278DBDE8FB99D', 'cip252': '869A570998988F68819CCF301EB015DF', 'cip251': '66487D053A660BD840D7DE39A3B1F139', 'cip250': '284CDF6476175B6BB414E7FAC09CD404', 'msg285': '00000004000000000000000000000000', 'msg284': '00000008000000000000000000000000', 'msg287': '00000001000000000000000000000000', 'msg286': '00000002000000000000000000000000', 'msg281': '00000040000000000000000000000000', 'msg280': '00000080000000000000000000000000', 'msg283': '00000010000000000000000000000000', 'msg282': '00000020000000000000000000000000', 'msg289': '00000000400000000000000000000000', 'msg288': '00000000800000000000000000000000', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '0040000000000000000000000000000000000000000000000000000000000000', 'key8': '0080000000000000000000000000000000000000000000000000000000000000', 'key3': '1000000000000000000000000000000000000000000000000000000000000000', 'key2': '2000000000000000000000000000000000000000000000000000000000000000', 'key1': '4000000000000000000000000000000000000000000000000000000000000000', 'key0': '8000000000000000000000000000000000000000000000000000000000000000', 'key7': '0100000000000000000000000000000000000000000000000000000000000000', 'key6': '0200000000000000000000000000000000000000000000000000000000000000', 'key5': '0400000000000000000000000000000000000000000000000000000000000000', 'key4': '0800000000000000000000000000000000000000000000000000000000000000', 'msg139': '00000000000000000000000000000000', 'msg138': '00000000000000000000000000000000', 'msg137': '00000000000000000000000000000000', 'msg136': '00000000000000000000000000000000', 'msg135': '00000000000000000000000000000000', 'msg134': '00000000000000000000000000000000', 'msg133': '00000000000000000000000000000000', 'msg132': '00000000000000000000000000000000', 'msg131': '00000000000000000000000000000000', 'msg130': '00000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '0000000000000000000000000000000000000000000000000000000000020000', 'key239': '0000000000000000000000000000000000000000000000000000000000010000', 'msg76': '00000000000000000000000000000000', 'key232': '0000000000000000000000000000000000000000000000000000000000800000', 'key233': '0000000000000000000000000000000000000000000000000000000000400000', 'key230': '0000000000000000000000000000000000000000000000000000000002000000', 'key231': '0000000000000000000000000000000000000000000000000000000001000000', 'key236': '0000000000000000000000000000000000000000000000000000000000080000', 'key237': '0000000000000000000000000000000000000000000000000000000000040000', 'key234': '0000000000000000000000000000000000000000000000000000000000200000', 'key235': '0000000000000000000000000000000000000000000000000000000000100000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '0000000000000000000000000000000080000000000000000000000000000000', 'key129': '0000000000000000000000000000000040000000000000000000000000000000', 'key126': '0000000000000000000000000000000200000000000000000000000000000000', 'key127': '0000000000000000000000000000000100000000000000000000000000000000', 'key124': '0000000000000000000000000000000800000000000000000000000000000000', 'key125': '0000000000000000000000000000000400000000000000000000000000000000', 'key122': '0000000000000000000000000000002000000000000000000000000000000000', 'key123': '0000000000000000000000000000001000000000000000000000000000000000', 'key120': '0000000000000000000000000000008000000000000000000000000000000000', 'key121': '0000000000000000000000000000004000000000000000000000000000000000', 'key346': '0000000000000000000000000000000000000000000000000000000000000000', 'key347': '0000000000000000000000000000000000000000000000000000000000000000', 'key344': '0000000000000000000000000000000000000000000000000000000000000000', 'key345': '0000000000000000000000000000000000000000000000000000000000000000', 'key342': '0000000000000000000000000000000000000000000000000000000000000000', 'key343': '0000000000000000000000000000000000000000000000000000000000000000', 'key340': '0000000000000000000000000000000000000000000000000000000000000000', 'key341': '0000000000000000000000000000000000000000000000000000000000000000', 'key348': '0000000000000000000000000000000000000000000000000000000000000000', 'key349': '0000000000000000000000000000000000000000000000000000000000000000', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'key545': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg458': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg459': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg450': '42424242424242424242424242424242', 'msg451': '43434343434343434343434343434343', 'msg452': '44444444444444444444444444444444', 'msg453': '45454545454545454545454545454545', 'msg454': '46464646464646464646464646464646', 'msg455': '47474747474747474747474747474747', 'msg456': '48484848484848484848484848484848', 'msg457': '49494949494949494949494949494949', 'key59': '0000000000000010000000000000000000000000000000000000000000000000', 'key58': '0000000000000020000000000000000000000000000000000000000000000000', 'key53': '0000000000000400000000000000000000000000000000000000000000000000', 'key52': '0000000000000800000000000000000000000000000000000000000000000000', 'key51': '0000000000001000000000000000000000000000000000000000000000000000', 'key50': '0000000000002000000000000000000000000000000000000000000000000000', 'key57': '0000000000000040000000000000000000000000000000000000000000000000', 'key56': '0000000000000080000000000000000000000000000000000000000000000000', 'key55': '0000000000000100000000000000000000000000000000000000000000000000', 'key54': '0000000000000200000000000000000000000000000000000000000000000000', 'msg634': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'msg635': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg636': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg637': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'msg630': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg631': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg632': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg633': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg638': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg639': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key149': '0000000000000000000000000000000000000400000000000000000000000000', 'cip402': '34C9A82AFA5AF48071F5F7BC90C1BC85', 'cip403': '2C38D49B104D172DCDD692809C95F910', 'cip400': '0058F8E377AA222F712C2479F4A562AF', 'cip401': 'A482EAA5D5771F2FDB2EA1A5F141B9E2', 'cip406': 'E413732866AB0D7DD6CFA3D4756B79E1', 'cip407': 'A3DDD67A05BE8D34C15759E2561BC287', 'cip404': '1F04D4F92BD3B745C44F263A8FCA505B', 'cip405': 'CD571C726E1D807F63CF33F33FB3C4FD', 'cip408': 'B569DC825826F1282026976227500327', 'cip409': '77330D7691112CF9BB306DAB27D37AB6', 'cip228': '1DD21FD2291C7419B5593EE8D6712198', 'key147': '0000000000000000000000000000000000001000000000000000000000000000', 'cip222': 'F14145E5DCB1EFA30A5A6CA08EC8F8FE', 'cip223': '4D08CD60B971B10854A0912DAF5CC3A8', 'cip220': '940218AC849FD119D89B0E15376213DD', 'cip221': 'C07DE68CB0ED8C8D398B87D6547BD15B', 'cip226': '83DB5E464D300A76EDA858E108902EBF', 'cip227': 'C7FB67AAA9F7417DC5977B57B723D278', 'cip224': '17A457DA5304D77BD0BC4B5B8BB02FDD', 'cip225': 'B6DF6B6C45A38ECE7E940C45FE1E847E', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': 'FD8E2C7604621D13E64B58315DCC65CD', 'cip319': 'A7126988773129D5F6CC330C1A0EF30B', 'cip316': '0EBC3926D924F37BFD716F404CA8450D', 'cip317': '53CADA57C7855AEB96B48F8C85915DE9', 'cip314': 'F51234B609D397B1D6DA8BB625C0993C', 'cip315': '0AF5205E41F184D0989A78BF149DB675', 'cip312': '4DDBA0F24964591307AB909009BB41EF', 'cip313': '5D9333754035534CEF4EEFA73EA3F8C9', 'cip310': 'E33261C4E54AB7B117C3ABA1C9E11C1E', 'cip311': 'B84E741AC92A42F37A77F05D6F464E10', 'cip136': '801CA8E44FB6BAB5DF7FB96AA5F39F8D', 'cip137': '9EB5169E8F72673301D0ABF9E85422BF', 'cip134': '97E97C261C31046F115FEC15820E3822', 'cip135': '3620B17AE6A993D09618B8768266BAE9', 'cip132': '4459D2EA77E8E8041DA46EB36705B054', 'cip133': 'E76A69F531CCC2C1A4C56AEE55B63C29', 'cip130': 'C2441BB36C7B7977B0E6EED5AED1BE09', 'cip131': '63A33251E59FF5A6CE0482EB4B80E70B', 'cip138': 'CB377E74144F9E9405355F089CA3918B', 'cip139': '1EE82E9E6E525DAEB21DF068DFF7AB09', 'msg148': '00000000000000000000000000000000', 'msg149': '00000000000000000000000000000000', 'msg142': '00000000000000000000000000000000', 'msg143': '00000000000000000000000000000000', 'msg140': '00000000000000000000000000000000', 'msg141': '00000000000000000000000000000000', 'msg146': '00000000000000000000000000000000', 'msg147': '00000000000000000000000000000000', 'msg144': '00000000000000000000000000000000', 'msg145': '00000000000000000000000000000000', 'key229': '0000000000000000000000000000000000000000000000000000000004000000', 'key228': '0000000000000000000000000000000000000000000000000000000008000000', 'key221': '0000000000000000000000000000000000000000000000000000000400000000', 'key220': '0000000000000000000000000000000000000000000000000000000800000000', 'key223': '0000000000000000000000000000000000000000000000000000000100000000', 'key222': '0000000000000000000000000000000000000000000000000000000200000000', 'key225': '0000000000000000000000000000000000000000000000000000000040000000', 'key224': '0000000000000000000000000000000000000000000000000000000080000000', 'key227': '0000000000000000000000000000000000000000000000000000000010000000', 'key226': '0000000000000000000000000000000000000000000000000000000020000000', 'key139': '0000000000000000000000000000000000100000000000000000000000000000', 'key138': '0000000000000000000000000000000000200000000000000000000000000000', 'key135': '0000000000000000000000000000000001000000000000000000000000000000', 'key134': '0000000000000000000000000000000002000000000000000000000000000000', 'key137': '0000000000000000000000000000000000400000000000000000000000000000', 'key136': '0000000000000000000000000000000000800000000000000000000000000000', 'key131': '0000000000000000000000000000000010000000000000000000000000000000', 'key130': '0000000000000000000000000000000020000000000000000000000000000000', 'key133': '0000000000000000000000000000000004000000000000000000000000000000', 'key132': '0000000000000000000000000000000008000000000000000000000000000000', 'key355': '0000000000000000000000000000000000000000000000000000000000000000', 'key354': '0000000000000000000000000000000000000000000000000000000000000000', 'key357': '0000000000000000000000000000000000000000000000000000000000000000', 'key356': '0000000000000000000000000000000000000000000000000000000000000000', 'key351': '0000000000000000000000000000000000000000000000000000000000000000', 'key350': '0000000000000000000000000000000000000000000000000000000000000000', 'key353': '0000000000000000000000000000000000000000000000000000000000000000', 'key352': '0000000000000000000000000000000000000000000000000000000000000000', 'msg20': '00000000000000000000000000000000', 'key359': '0000000000000000000000000000000000000000000000000000000000000000', 'key358': '0000000000000000000000000000000000000000000000000000000000000000', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'msg446': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg445': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg444': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg443': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg442': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'msg441': '39393939393939393939393939393939', 'msg440': '38383838383838383838383838383838', 'msg449': '41414141414141414141414141414141', 'msg448': '40404040404040404040404040404040', 'key44': '0000000000080000000000000000000000000000000000000000000000000000', 'key45': '0000000000040000000000000000000000000000000000000000000000000000', 'key46': '0000000000020000000000000000000000000000000000000000000000000000', 'key47': '0000000000010000000000000000000000000000000000000000000000000000', 'key40': '0000000000800000000000000000000000000000000000000000000000000000', 'key41': '0000000000400000000000000000000000000000000000000000000000000000', 'key42': '0000000000200000000000000000000000000000000000000000000000000000', 'key43': '0000000000100000000000000000000000000000000000000000000000000000', 'key48': '0000000000008000000000000000000000000000000000000000000000000000', 'key49': '0000000000004000000000000000000000000000000000000000000000000000', 'msg623': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg622': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg621': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg620': 'ECECECECECECECECECECECECECECECEC', 'msg627': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'msg626': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg625': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg624': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg629': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg628': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'cip411': 'AA066781289FDDAB83A33D80A887610F', 'cip410': 'BFBB4C2155D0A63166CF52A7BB76EA54', 'cip413': '1D443C71CCD43FB7C0E1F768BC183CEA', 'cip412': 'D28A4BD878533E1C3BCEE9E1E6698531', 'cip415': '523A2CCAF30FB3409B8FB82EDB335576', 'cip414': '3F3A93AD3D7CE10131637BF234AFE7A1', 'cip417': '1331DA989CB20374CA729374F1EE76AA', 'cip416': '09475D9935447EA1F20A01A1D3F1AAE2', 'cip419': '4D93AF45FE56DB560F5DE0D87B8CF21F', 'cip418': '3D79BAB4D86B73AD28E004F4A7EC4514', 'cip239': 'A94CC5DCC946C9B4F38D1D46BF1C0335', 'cip238': 'AC06EB8186A501262CE9B06FC88F9774', 'cip231': '6FC6C5718FD0B81194A198F873EDE7EA', 'cip230': '61F70FEAB04DB61D959A69E9C1BAAA9D', 'cip233': 'BB75015A768AB1E9BC4AF49D2D156C4F', 'cip232': '19DD5DEC75CEE00003995BF2EA643E2F', 'cip235': '360D02F49944ECAE2EE2050E634904CE', 'cip234': '46EFE1B09EFB606CB11717415511862E', 'cip237': '2E71481D28ED6BD01157F4D054F01961', 'cip236': '93E207973539B6E2EF7D49C772E32D86', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '4AE9F03EF61BAA670CE46F3A6C205BD5', 'cip308': '59300BA5323CF6D84A9FF12B042A5AFF', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '39FA2682ABFABA6A705780E72BDA0128', 'cip124': '8C8F6AF8078C29D23B2958CAE6858A09', 'cip127': '47BFD757C13ADA4001DF9B0989E7CB80', 'cip126': 'A812C9D68212B21A14E9CEBCA8960750', 'cip121': '265829FC78FD18069B3631AE596DC9BF', 'cip120': '4172B0BEBBEF90672EB0623A709FC734', 'cip123': '8EBF95D561DD65F9BC66B82A6905828C', 'cip122': 'E89B25E3E40E28D37BA6E78C55A611F8', 'cip129': '57159E7BE66463408FAE89C376318FA8', 'cip128': 'C19171490B5595E8555C61B352935DEB', 'msg159': '00000000000000000000000000000000', 'msg158': '00000000000000000000000000000000', 'msg151': '00000000000000000000000000000000', 'msg150': '00000000000000000000000000000000', 'msg153': '00000000000000000000000000000000', 'msg152': '00000000000000000000000000000000', 'msg155': '00000000000000000000000000000000', 'msg154': '00000000000000000000000000000000', 'msg157': '00000000000000000000000000000000', 'msg156': '00000000000000000000000000000000', 'key584': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key585': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key586': 'CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA', 'key587': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key580': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key581': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key582': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key583': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key588': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key589': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key108': '0000000000000000000000000008000000000000000000000000000000000000', 'key109': '0000000000000000000000000004000000000000000000000000000000000000', 'key100': '0000000000000000000000000800000000000000000000000000000000000000', 'key101': '0000000000000000000000000400000000000000000000000000000000000000', 'key102': '0000000000000000000000000200000000000000000000000000000000000000', 'key103': '0000000000000000000000000100000000000000000000000000000000000000', 'key104': '0000000000000000000000000080000000000000000000000000000000000000', 'key105': '0000000000000000000000000040000000000000000000000000000000000000', 'key106': '0000000000000000000000000020000000000000000000000000000000000000', 'key107': '0000000000000000000000000010000000000000000000000000000000000000', 'key360': '0000000000000000000000000000000000000000000000000000000000000000', 'key361': '0000000000000000000000000000000000000000000000000000000000000000', 'key362': '0000000000000000000000000000000000000000000000000000000000000000', 'key363': '0000000000000000000000000000000000000000000000000000000000000000', 'key364': '0000000000000000000000000000000000000000000000000000000000000000', 'key365': '0000000000000000000000000000000000000000000000000000000000000000', 'key366': '0000000000000000000000000000000000000000000000000000000000000000', 'key367': '0000000000000000000000000000000000000000000000000000000000000000', 'key368': '0000000000000000000000000000000000000000000000000000000000000000', 'key369': '0000000000000000000000000000000000000000000000000000000000000000', 'key214': '0000000000000000000000000000000000000000000000000000020000000000', 'key215': '0000000000000000000000000000000000000000000000000000010000000000', 'key216': '0000000000000000000000000000000000000000000000000000008000000000', 'key217': '0000000000000000000000000000000000000000000000000000004000000000', 'key210': '0000000000000000000000000000000000000000000000000000200000000000', 'key211': '0000000000000000000000000000000000000000000000000000100000000000', 'key212': '0000000000000000000000000000000000000000000000000000080000000000', 'key213': '0000000000000000000000000000000000000000000000000000040000000000', 'key218': '0000000000000000000000000000000000000000000000000000002000000000', 'key219': '0000000000000000000000000000000000000000000000000000001000000000', 'msg432': '30303030303030303030303030303030', 'msg433': '31313131313131313131313131313131', 'msg430': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg431': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg436': '34343434343434343434343434343434', 'msg437': '35353535353535353535353535353535', 'msg434': '32323232323232323232323232323232', 'msg435': '33333333333333333333333333333333', 'msg438': '36363636363636363636363636363636', 'msg439': '37373737373737373737373737373737', 'key31': '0000000100000000000000000000000000000000000000000000000000000000', 'key30': '0000000200000000000000000000000000000000000000000000000000000000', 'key33': '0000000040000000000000000000000000000000000000000000000000000000', 'key32': '0000000080000000000000000000000000000000000000000000000000000000', 'key35': '0000000010000000000000000000000000000000000000000000000000000000', 'key34': '0000000020000000000000000000000000000000000000000000000000000000', 'key37': '0000000004000000000000000000000000000000000000000000000000000000', 'key36': '0000000008000000000000000000000000000000000000000000000000000000', 'key39': '0000000001000000000000000000000000000000000000000000000000000000', 'key38': '0000000002000000000000000000000000000000000000000000000000000000', 'msg388': '04040404040404040404040404040404', 'msg389': '05050505050505050505050505050505', 'msg384': '00000000000000000000000000000000', 'msg385': '01010101010101010101010101010101', 'msg386': '02020202020202020202020202020202', 'msg387': '03030303030303030303030303030303', 'msg380': '00000000000000000000000000000008', 'msg381': '00000000000000000000000000000004', 'msg382': '00000000000000000000000000000002', 'msg383': '00000000000000000000000000000001', 'cip305': '6AD3CCBC31E2ECF88C6B54F84E638AA2', 'msg548': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'cip304': '72C791409F94CE23F4CD61D714670B39', 'msg546': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg547': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg544': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg545': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg542': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'cip307': '3ABBF724E6C7B2D05D93A2C6D058E5AC', 'msg540': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg541': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'cip306': '9FE143250D00E25696B01E0A2ED05DB3', 'cip428': '7CC5B4BC78C6701F283147C8C3E12836', 'cip429': 'E51AF54B277F6B8763496B5072222260', 'cip424': '244CFA983E06C20505C9660524FEDA9B', 'cip301': 'E74D77BB281F542A0A78C3D8436783F4', 'cip426': 'E02DDE6976A5CC925D064E61E9DC9203', 'cip427': '3556F84DCBED727BEA4B491FC8A75B17', 'cip420': 'DB85A7C351C63D1E2E808285DC261BEA', 'cip421': '5C840DDA0234FA87E9B3BFE66467646A', 'cip422': '17699D8C6AA7E05304C165F83D7D2EB1', 'cip300': 'AECA2C8C0CA8B6F0EF594A13C85E83CF', 'cip303': 'DE964C9FF34F5A79FF43C6AB148DC395', 'cip302': 'B81755986C8B60A935F5D9169A2A7655', 'cip338': '311471549CCBB1EC27BAA384EC32F30F', 'cip339': '3C4DA8FF90590FB9FC529580DD40E7EF', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': 'CC668772F50D2ED7DF83FF85A0D76576', 'cip334': '685CA45E48D087563E1886DBDD63342F', 'cip335': 'FCE8BFBA1BB12F4990C6DF32C6D71EBD', 'cip336': '4F6E01D8A2437547B50E070498BCD4F9', 'cip337': '4F80F4048084E1150AA6A36A6BB3D7EA', 'cip110': 'C007AEA2279ED965AD5F037359DE24C4', 'cip111': 'BE5FCBE21961382305B6EDBC74B6D73E', 'cip112': 'A95ADAA6A53D1BF0FA4E46EA5D1EE88C', 'cip113': 'D1031805010BBACD8BB316EFA437EC4A', 'cip114': '7B6A4380AF9337C902AA691243F6A2E6', 'cip115': 'BDEF751D35F3B8BC6A9AB61F6B04A94A', 'cip116': '51CFB9ED07D3628D0854C2E85FC4B866', 'cip117': '0CDA37833BE087D8B997A54D5CFBDCFD', 'cip118': '938D2E6F2149D1E0B6F8878D472F0469', 'cip119': '3857B0C25F235A22F347E0ACCD008FAD', 'msg164': '00000000000000000000000000000000', 'msg165': '00000000000000000000000000000000', 'msg166': '00000000000000000000000000000000', 'msg167': '00000000000000000000000000000000', 'msg160': '00000000000000000000000000000000', 'msg161': '00000000000000000000000000000000', 'msg162': '00000000000000000000000000000000', 'msg163': '00000000000000000000000000000000', 'msg168': '00000000000000000000000000000000', 'msg169': '00000000000000000000000000000000', 'msg366': '00000000000000000000000000020000', 'msg367': '00000000000000000000000000010000', 'msg364': '00000000000000000000000000080000', 'msg365': '00000000000000000000000000040000', 'msg362': '00000000000000000000000000200000', 'msg363': '00000000000000000000000000100000', 'msg360': '00000000000000000000000000800000', 'msg361': '00000000000000000000000000400000', 'msg368': '00000000000000000000000000008000', 'msg369': '00000000000000000000000000004000', 'cip204': 'AAB1879D98592963B8F90C8F06804207', 'cip205': 'E221625345B6E73DD09235C7A3957CA3', 'cip206': '02B055320E02DA991986BB53A1CC69B9', 'cip207': 'FCA1B117007B2C06165E3D773CCEB0C9', 'cip200': '3CF2E1206969ED3A85E28EFA16162E53', 'cip201': '801DB46F97025BB099F7755595C532E3', 'cip202': '4322F95A6D70B9D4F53B733505A11D79', 'cip203': 'D1A200ED8E473284B70EB16E93B55ECD', 'cip208': '73C96C4F08BC5F9725CD2F719402DF4B', 'cip209': '488AF3D7E9223041C2C26AB496BBF0E5', 'key593': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key592': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key591': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key590': 'CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE', 'key597': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key596': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key595': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key594': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key599': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key598': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key117': '0000000000000000000000000000040000000000000000000000000000000000', 'key116': '0000000000000000000000000000080000000000000000000000000000000000', 'key115': '0000000000000000000000000000100000000000000000000000000000000000', 'key114': '0000000000000000000000000000200000000000000000000000000000000000', 'key113': '0000000000000000000000000000400000000000000000000000000000000000', 'key112': '0000000000000000000000000000800000000000000000000000000000000000', 'key111': '0000000000000000000000000001000000000000000000000000000000000000', 'key110': '0000000000000000000000000002000000000000000000000000000000000000', 'key119': '0000000000000000000000000000010000000000000000000000000000000000', 'key118': '0000000000000000000000000000020000000000000000000000000000000000', 'key379': '0000000000000000000000000000000000000000000000000000000000000000', 'key378': '0000000000000000000000000000000000000000000000000000000000000000', 'key377': '0000000000000000000000000000000000000000000000000000000000000000', 'key376': '0000000000000000000000000000000000000000000000000000000000000000', 'key375': '0000000000000000000000000000000000000000000000000000000000000000', 'key374': '0000000000000000000000000000000000000000000000000000000000000000', 'key373': '0000000000000000000000000000000000000000000000000000000000000000', 'key372': '0000000000000000000000000000000000000000000000000000000000000000', 'key371': '0000000000000000000000000000000000000000000000000000000000000000', 'key370': '0000000000000000000000000000000000000000000000000000000000000000', 'key203': '0000000000000000000000000000000000000000000000000010000000000000', 'key202': '0000000000000000000000000000000000000000000000000020000000000000', 'key201': '0000000000000000000000000000000000000000000000000040000000000000', 'key200': '0000000000000000000000000000000000000000000000000080000000000000', 'key207': '0000000000000000000000000000000000000000000000000001000000000000', 'key206': '0000000000000000000000000000000000000000000000000002000000000000', 'key205': '0000000000000000000000000000000000000000000000000004000000000000', 'key204': '0000000000000000000000000000000000000000000000000008000000000000', 'key209': '0000000000000000000000000000000000000000000000000000400000000000', 'key208': '0000000000000000000000000000000000000000000000000000800000000000', 'cip501': '2EC93D1C3D32C757FEBA960A4BD738EE', 'cip500': '4628C6CF99872B4918A114BBDD5E93CF', 'cip507': '2A5688CFD4BFF712C47394F0607DE6B9', 'cip506': '0FEF945E46A16AA6877CD9B4B6B5ACE4', 'cip505': 'FC6BD18F64FF6DB8635C4964DAE51FDF', 'cip504': 'E7A5B502A965F15E558D7D81B554CB0E', 'msg421': '25252525252525252525252525252525', 'msg420': '24242424242424242424242424242424', 'msg423': '27272727272727272727272727272727', 'msg422': '26262626262626262626262626262626', 'msg425': '29292929292929292929292929292929', 'msg424': '28282828282828282828282828282828', 'msg427': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'msg426': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg429': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg428': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key549': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key22': '0000020000000000000000000000000000000000000000000000000000000000', 'key23': '0000010000000000000000000000000000000000000000000000000000000000', 'key20': '0000080000000000000000000000000000000000000000000000000000000000', 'key21': '0000040000000000000000000000000000000000000000000000000000000000', 'key26': '0000002000000000000000000000000000000000000000000000000000000000', 'key27': '0000001000000000000000000000000000000000000000000000000000000000', 'key24': '0000008000000000000000000000000000000000000000000000000000000000', 'key25': '0000004000000000000000000000000000000000000000000000000000000000', 'key28': '0000000800000000000000000000000000000000000000000000000000000000', 'key29': '0000000400000000000000000000000000000000000000000000000000000000', 'msg399': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg398': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg393': '09090909090909090909090909090909', 'msg392': '08080808080808080808080808080808', 'msg391': '07070707070707070707070707070707', 'msg390': '06060606060606060606060606060606', 'msg397': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg396': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg395': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg394': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg559': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg558': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg555': 'ABABABABABABABABABABABABABABABAB', 'msg554': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg557': 'ADADADADADADADADADADADADADADADAD', 'msg556': 'ACACACACACACACACACACACACACACACAC', 'msg551': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg550': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg553': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg552': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'cip439': 'DB70003BB09D767E4FDB5A0ED4F64513', 'cip438': '37FADA450DEE930DFB872F3FC4D5297D', 'cip433': 'BA24DB4B5C6B13B9989BC214A6F4671E', 'cip432': 'EF176E7363132B266238EF91C4256886', 'cip431': '22F4452CA000F6E458B867214C85ADB9', 'cip430': '5AF35F729233B7548DDECE1B9BC8E927', 'cip437': 'C8B25B4F2A9D701EFFC516F3CA57017D', 'cip436': '33603C4963593BA961212BF400D86FE6', 'cip435': '6CB5F3429037AB55423408D1F0E0F8D6', 'cip434': 'C2F547C0FB7064F6621EF7226398D940', 'cip327': '645F0F938A2898A3869190A1D99A3078', 'cip326': '983F654090C661264BE8F921063B7DE5', 'cip325': '8FA78734E057E8A9486862E00A9886D8', 'cip324': '237AE2CDD5D2819EDAE0947AFB9D040F', 'cip323': '9721099476B1F963EF87DD29E82227F8', 'cip322': '0D2638505AAE1A5532D74C4F45C136D3', 'cip321': 'FA9CAF3BBC2D52806EF9B3D01F5B8398', 'cip320': '645D7562E523058E7708FF03F1712BE8', 'cip329': 'B4ED85D72C04A357958D7045BE13C4FF', 'cip328': 'F8958250D6D6772B20051E36666906BD', 'cip109': '49A3F4514E983616F55580EA4EA12DBF', 'cip108': 'AB8301BFFFF3B24A3CE63F553443F2C7', 'cip107': '0FF47C9330A69D2B5C52434394A2D1CA', 'cip106': '510B105E4809B4115C999AB346D21570', 'cip105': '0F5E7BF2A2590F7A65D17DAA4E828F7D', 'cip104': '3BAADE8819E09549CDA6AA160F4C626A', 'cip103': '735E7FB4B1B2D54C6D33E3D0C714BFA0', 'cip102': '8A1D4467260F12AB493334133D5928DD', 'cip101': '97823D74887FBE3E6B412407A256A018', 'cip100': 'E42C18F2B56A0E536E4908F84DE06419', 'msg173': '00000000000000000000000000000000', 'msg172': '00000000000000000000000000000000', 'msg171': '00000000000000000000000000000000', 'msg170': '00000000000000000000000000000000', 'msg177': '00000000000000000000000000000000', 'msg176': '00000000000000000000000000000000', 'msg175': '00000000000000000000000000000000', 'msg174': '00000000000000000000000000000000', 'msg179': '00000000000000000000000000000000', 'msg178': '00000000000000000000000000000000', 'msg375': '00000000000000000000000000000100', 'msg374': '00000000000000000000000000000200', 'msg377': '00000000000000000000000000000040', 'msg376': '00000000000000000000000000000080', 'msg371': '00000000000000000000000000001000', 'msg370': '00000000000000000000000000002000', 'msg373': '00000000000000000000000000000400', 'msg372': '00000000000000000000000000000800', 'msg379': '00000000000000000000000000000010', 'msg378': '00000000000000000000000000000020', 'cip213': '07B3D3BB79520764234D247A7A0036C2', 'cip212': '845416D12195B8FC18F299AD41D8F569', 'cip211': 'C38D3776A560BBC5453E96C1587B0E59', 'cip210': 'CD5038A80ECEC3424E1E9614CD3267DD', 'cip217': '965A8653210830C831353A28CBBFD16C', 'cip216': 'DFDB243581A8D3DA8A3F268AA8E6207E', 'cip215': 'CC547CD2016122227D7CE3B4BFBE3EAF', 'cip214': 'BD6816944B3A1353229B02907CD0E87C', 'cip219': 'B261BC4E7FAE6629FC5F5D588E417CAF', 'cip218': 'E3442D2FC126CC50AB364E09A0872B18', 'msg599': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg598': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg86': '00000000000000000000000000000000', 'cip375': 'D2FE26FC85AA40C3C6827B0DFF96AB0C', 'cip376': '2055DEA7C84B008C6FAEB4B192795ADA', 'cip377': 'CB98F1C490F33B4F7A3D3E821B3551F3', 'cip370': '576807DCB0F1A8D73904DBAA84BE818E', 'cip371': '96DD8A88157832B7E45C639C25170333', 'cip372': '9C1A7B580B29888F397743E76C4E7A39', 'msg81': '00000000000000000000000000000000', 'key568': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key569': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key566': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key567': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key564': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key565': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key562': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key563': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key560': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key561': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key162': '0000000000000000000000000000000000000000200000000000000000000000', 'key163': '0000000000000000000000000000000000000000100000000000000000000000', 'key160': '0000000000000000000000000000000000000000800000000000000000000000', 'key161': '0000000000000000000000000000000000000000400000000000000000000000', 'key166': '0000000000000000000000000000000000000000020000000000000000000000', 'key167': '0000000000000000000000000000000000000000010000000000000000000000', 'key164': '0000000000000000000000000000000000000000080000000000000000000000', 'key165': '0000000000000000000000000000000000000000040000000000000000000000', 'key168': '0000000000000000000000000000000000000000008000000000000000000000', 'key169': '0000000000000000000000000000000000000000004000000000000000000000', 'key308': '0000000000000000000000000000000000000000000000000000000000000000', 'key309': '0000000000000000000000000000000000000000000000000000000000000000', 'key302': '0000000000000000000000000000000000000000000000000000000000000000', 'key303': '0000000000000000000000000000000000000000000000000000000000000000', 'key300': '0000000000000000000000000000000000000000000000000000000000000000', 'key301': '0000000000000000000000000000000000000000000000000000000000000000', 'key306': '0000000000000000000000000000000000000000000000000000000000000000', 'key307': '0000000000000000000000000000000000000000000000000000000000000000', 'key304': '0000000000000000000000000000000000000000000000000000000000000000', 'key305': '0000000000000000000000000000000000000000000000000000000000000000', 'key416': '2020202020202020202020202020202020202020202020202020202020202020', 'key417': '2121212121212121212121212121212121212121212121212121212121212121', 'key414': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key415': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key412': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key413': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key410': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key411': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key418': '2222222222222222222222222222222222222222222222222222222222222222', 'key419': '2323232323232323232323232323232323232323232323232323232323232323'} |
# CMAC |
# test vectors from: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip |
dict_cmac_aes128 = {'mac121': '7696', 'mac115': 'ffe397c84431d057b1e245ec69987e0d', 'mac126': '99de', 'mac114': '1c219defb5b2b9502e07144bb6587a0f', 'mac127': 'f8b8', 'mac124': '04ae', 'key19': '7b7f4f38a45af7d260c70faca9a38f30', 'key18': 'e7555cc2cceb0ca0b2fdc4ebb48e8e5a', 'key17': '3c42fd18d4a7878a8c9aa29f5a459ff3', 'key16': '539c78eed9e25d57950a0e0b6900147b', 'key15': 'cb9fbd84fba13db2a837e4bad32bea4a', 'key14': 'aa6257104cd33dee3ca13038376be718', 'key13': '5c458b6ba695580aef827838fdcd77de', 'key12': 'c5511a28b129f897868594f229c4a0b3', 'key11': 'bb8a182e9f653605c33b2bfc97cf8301', 'key10': '3e7cd53f8c35f72c0e1376a7fa7ee683', 'mac57': 'ec23c3b4cd5a9859', 'mac56': 'ecdb7d8577c056e2', 'mac55': '9f4e', 'mac54': '719b', 'mac53': '72b6', 'mac52': '38e0', 'mac51': '995b', 'mac50': '2bb2', 'mac59': '006c879091fe8b6a', 'mac58': 'd5f4799d6fbf880b', 'key119': '97b665a3bbe8344ac60755a5bb590fae', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '36ebc5f80716a961d4d91d0df63dd66d', 'key81': '5cd57cc4e681dac1e5e0ee38ad42d49e', 'key82': 'b0d2d0572d98046547c54f544b7f09a9', 'key83': '336d81f2c83ab2cb2e6d2a73482c01ef', 'key84': 'a05d8ac6fa1451e9688af142ee7fb936', 'key85': '154037569ecb688fd1d69855c27a8637', 'key86': '8f6513e68a378ee09950b46276d02e43', 'key87': '2ac17b41c0c07b89520bd40e51a09d5a', 'key88': 'c68ceb632d6d45a2d0a869f6d4dc4c13', 'key89': '93da7f56f2690f2732c7d577a1a11a74', 'taglength141': 16, 'taglength140': 16, 'taglength143': 16, 'taglength142': 16, 'msg60': '45e188912e1e2ae1da83008e85ab4ba49ba4ee4e28997c9c8fae9683802c7426', 'msg33': 'e36bf563a627f218c64f2ba1cc9398e7', 'msg62': 'd9fa0ca0f66f84f9f0b55ac3f1dbaeaeb639cee3955e5898be4a9fe2c1de50cb', 'msg63': '2783f4befba7ebf63f57a5abbd46db3ea102b3d0daca42b2c39f501d039d5c24', 'taglength18': 16, 'taglength19': 16, 'msg66': '79e5d5d51684db60e410974fe9c65f763eb02bb9c082eb1709c21ee89f2ba062', 'msg67': '6ce53aacf28026f14b3cd8687e1a1d3b60a81e80fcd1e2b038f9145ab64a0718', 'taglength14': 8, 'taglength15': 8, 'taglength16': 16, 'taglength17': 16, 'taglength10': 8, 'taglength11': 8, 'taglength12': 8, 'taglength13': 8, 'msg30': 'c45500960266b3140524637f9548be5f', 'key139': '5e7b763eab4a2cf734d173cfe26320db', 'key138': 'd62c9baa530654e8a62ebe45fb2c0db9', 'key135': '3d21214cb56b65545e69c085487a635a', 'msg37': '5a307b64bf1ca753d7645fbc2a01097a', 'key137': '638867d1b0300963d28034cc1e4c0405', 'key136': '45beb88bf96d89beb09d3c1e6a1df391', 'key131': '73b8086b3d07590024990afb4f0f0822', 'key130': '1b5ba42152b5dbe6feff52c7ca892245', 'key133': '705f8c84d0412156e989d2eb6e6c0cd0', 'msg36': '1e073f31387ecbfadadf1510fd8d0788', 'msg35': '301018b7a89cde6bb5321bf2ade7680a', 'msg34': '4c4347b46eec61669dd3925e5318cbdc', 'msg39': 'ca706c60b64f266b314d1df09d575a6c', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '31083e1bf64528be2e74544d84a56475420f814e6ea79d8c39f1fbf99b16f2233738ee518402b7bc', 'msg114': '59c652257697a328d296af29a0f76a9d917926e0a5ec07d440f0b7cc80ff5ca8ceaec741b32fee07', 'mac99': 'e666', 'mac98': '0a57', 'msg111': 'd4c65fb409ff69b4ebf5fce5dfc2d4deb05c23da3c74e4bc6d9e6c506bb342d4107330b79d6f9aa0', 'msg110': '0efa6e9de0581b81b1ad0351e7585b7eff712a05d2ffaa44176bf10b2a35d0f70ce6fcfbaa466b40', 'msg113': 'd4545dd90e24afdc5e6985ad2d76306cea8d4276510bf037eddfbb3fdb405097d2a0ac5560db836e', 'msg112': '680c489364c93e5d3ae74471c72329337295bd02a74ae205872fe528dd300e6154a27538e8de1886', 'mac93': 'a02493f7dbab542b594b70ce81f7e392', 'mac92': 'c02b8dd46c2e1da34dff0feb9f933330', 'mac91': 'fe23a520676c915a56611f5b413b1c92', 'mac90': '07df5e916c520fc3ad57f2b7c89ea4e6', 'mac97': '4bc5', 'mac96': '2100', 'mac95': 'e525bacfd0c7c118a983f431b1c6c027', 'mac94': 'a6b84ca5bfe108b8c305ccf0e358e10b', 'key44': '3c45ea6c87802440c9c47b1015e83d86', 'key45': 'f3bc72cf2ce9a54ac063d809b523f4e5', 'key46': 'ca5d0bc191bc17629e004a0d0aaf9f25', 'key47': 'f8612e5dfebffc7955facbc970c555ad', 'key40': '5f45469851067ccb779ddc7c352d0d81', 'key41': '19e7edfe0e05de86a8e281302ffd6817', 'key42': '03ef069df488327694669b6f49a7f934', 'key43': '5777652205fc64b2e7d5981dd2d8889c', 'msg99': 'de1a5fd321e8706e21b2eea2bf6c4d1ebe53252c122393855a8bdd6aabde54f08f0b7f9c4dcf752f', 'mac119': '92244082383183f4c11004c7c987e503', 'mac118': '07dfd21a66876d9345951a824fb44664', 'key48': '8938467bb1bb0c80dad9270ddc19d7ef', 'key49': '23da4ce250a63970e661cf99ee03f82d', 'msg98': 'c68af82ff1a608134dbe7cbf711c4ae2a2ff80e4f635851cb8eca1430fc6bf28db2b72a6e0e337d3', 'msg95': '2eccb2b2ce90b6f35c351b05a22c227217dd', 'msg94': '5d0f5ac54c50a9de324ee1e64f9764843fab', 'taglength109': 8, 'taglength108': 8, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 8, 'taglength104': 8, 'taglength107': 8, 'taglength106': 8, 'msg32': '6755dfb390e25c0c555dce4d091c4029', 'taglength65': 16, 'taglength64': 16, 'taglength67': 16, 'taglength66': 16, 'taglength61': 8, 'taglength60': 8, 'taglength63': 8, 'taglength62': 8, 'msg51': 'b60a25c09ea49ec198fff3c8a99afb66eeae5bb9df60ef3cd53a6ce3cadc4368', 'msg50': 'eaf28381664c4702bfef97a3698a3aa1fc6720b89540eb977953af91fcb8f695', 'msg53': 'f6c7b5fa70e9e107d943536cb0e825f26ffa43df111a1410d0245d48331962c8', 'msg52': 'b2a23a676d65523ed2c1e0eef20e2bb7e0a96fed71a1cb4c3fb35a8cf479a135', 'taglength69': 16, 'taglength68': 16, 'msg57': 'be0b4a889119c950a6d1f609ff82f5120930cd2d1536763b0b2f34475d1723c6', 'msg56': '56292b66dc3667c5c6a4dc71ecfabe57d3bb5c20d1f35d63720f49191bf14c52', 'msg31': 'd2e49304a3a00cd2ccab9769a58bf889', 'mac125': 'fe7d', 'mac40': '1b7882ba9db374988699d98cf9b9d89a', 'mac41': 'd2ecaca30e18ee6ce90349340d21f20b', 'mac42': '29f38728b3be2e3dd51e7ae226a2e92c', 'mac43': 'd5b8c8c98bbd49d6843503683adb1cdf', 'mac44': 'd1224f99472dd7fae10078a924f7ef30', 'mac45': '9f61e6959a49962804713275648a73a7', 'mac46': '56b26adff25389380bca12d91be39d05', 'mac47': 'a3ddcbfcd2f6d58d5ea03726a526275d', 'mac48': '57c4', 'mac49': 'd8d5', 'mac101': '4239', 'mac128': 'f32bce2795a2697f', 'mac129': '3780a0888981ad43', 'key79': '43b917f0fdbfab80a9e2094ec6393f42', 'key78': 'a89987b0cb6aabbb7f0ad36b3e9fdf29', 'key75': '7cb53a0ba910cabfa4160a428f3a382d', 'key74': '1c57b1f3f19be0b6f5df5aaf0ecb3c5c', 'key77': 'eb3ad7daf3310b3055176f012fe91dcc', 'key76': 'fff437b8479528ad56df255e80e5c993', 'key71': '200be1cc352ba938e09a48e0a072bbd6', 'key70': '62d3f22af2bea501e9aca0fd69083775', 'key73': 'ed7e3ddfcc3c32a9ae146eed3aa46364', 'key72': '3250974e306b4b678f914b514d1e90f6', 'mac35': 'b6f9716cca768a47', 'mac34': '1a16cfcac5b35f3f', 'mac37': '90d1e6bc30fd60e2', 'mac36': '980380e8c875cd23', 'mac31': 'e008', 'mac30': '7cdd', 'mac33': 'f27bddce63e8173c', 'mac32': 'd3c6096edccc95e7', 'mac39': 'd3d010ac9574b79b', 'mac38': '0747178ec7197d01', 'taglength130': 8, 'taglength131': 8, 'taglength132': 8, 'taglength133': 8, 'taglength134': 8, 'taglength135': 8, 'taglength136': 16, 'taglength137': 16, 'taglength138': 16, 'taglength139': 16, 'taglength21': 16, 'taglength20': 16, 'taglength23': 16, 'taglength22': 16, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': '9916c00c3ca104da47615d3d135d8e7c1e28abeeb0fbd9b2be06559f0e08b87e9c1e79773dd8b3ca', 'msg96': '7d4ec02e47c326e3aa4eaa2a9f5230254bb516852f400f089f492f3f758f42950665628d5513c94b', 'msg91': 'bcc6ea691aa983100c5f000142e72f6298ba', 'msg90': '0ddd7e19c0991343cd100f6a432c86e66a1f', 'msg93': '6b5b2fb54d76ddf9e0e847b8ed25a7959a89', 'msg92': 'ebbb53e1e7b5d9357c87f56f6157428f2abe', 'key108': '9252679963d4441dc428261d196ec149', 'key109': 'e5800b453ae20349a86263c4a17b4ea1', 'key100': 'f7a6d92e52acbed1ac1271529e1de959', 'key101': 'a00b64bdf923faa583fa5243f4016da6', 'key102': '7e8a8c893a19d315afb26b69a24d78e7', 'key103': '216795ba3148fab1167908e3ac7422b7', 'key104': '39a9c2a81272a77e4307b339bae976f6', 'key105': '91d7d0f40b31aed828c284fd077f83a0', 'key106': '602a057cf22d163c18d12e2fd126ea07', 'key107': '169ceb449ae8b90807b55858ce7ced18', 'mac132': 'aa7eee0865e76e8d', 'taglength122': 2, 'mac84': '9e82fb6a1324733c', 'mac85': 'd4f1401cc899d579', 'mac86': '7ef9765cfe7ab74e', 'mac87': '924cfe0505ee1c64', 'mac80': '65cba8e051b617c3', 'mac81': 'fb05ac32ffe3837f', 'mac82': 'b5b7950dffc75a2c', 'mac83': '9819a8ca1705a80a', 'mac88': 'e7ba99a1c730efedb8979a7647385db9', 'mac89': '709a98b297f18ee329f63fd4b0a1698c', 'msg120': '3c53659e5bd778cbdd737f663b0cd921f083fa702c92be8fccf7fdc68ad560ec7157732a9596fb0100bd898eef', 'msg121': '55f24093d78194d88155e0da0764155a749844ae1422a7b99112e51a5c2492a44eddf50e90d70fecb85ad8de34', 'msg122': 'ac4423c58ce0dc2fd5b68bd317a5dfb519e878031e474cee688e4ab8fb3f3e0ea384f5993867a1d021457e1017', 'msg123': 'ac37a2ad55eda66b027d7d98a261c332d2170f400b81cc591a8c4465d110fea8fdf74afc98a21a5d3f8813abe6', 'msg124': '537c96377d5c188a2f832ded62143db2710d1fe87d1c97d210b51c980061de3b975907cef05341e4a49c7945a7', 'msg125': '485fc6bdbfb8c1fcb5f9d38330a0d8cc8b2d998d761df1483e1c2f1d4f77bce4f7d0fe786c157b5511b34266f5', 'msg126': '12a4109229bdecce4b18d07e687bbfa8402f2b096dfa17a9a44d79b338bde284dfb76002b970a42f8e1c60fe58', 'msg127': '74f7cddaf413e39af0a7cc365de8b5b3723c3cce515031a7e96499b71beaf9071b50d1a41a1a664e2233c47041', 'msg128': '47c54d5b31e1a58b39425b2670c2a811788de0dfe9ebf845f25a45ce44e086d02b9f259ffeaaba00ba17d1e1ea', 'msg129': '0b3d6427ea719b513e344f7b2b6fd96ee2df0f7414bb5e1aac981a33bd8b1120b98d664fe5239d02093ef2526c', 'mac7': '0360', 'mac6': '5f9c', 'mac5': 'cce4', 'mac4': '078e', 'mac3': 'e354', 'mac2': '0d9b', 'mac1': '71b9', 'mac0': 'e727', 'mac9': 'd806ab38af2b3f92', 'mac8': '30c4e22b86fca233', 'key31': '5d2f3697453a0c72d94ab81f0864bb66', 'key30': '56fad4630ff6b0a50afa00e20d09cada', 'key33': 'b7923c7c2d3a69cb079fa32330cd5592', 'key32': 'b3cca41d617aae07ca0cd92abd5f9ce9', 'key35': '2b0bc1ce876c7b466b1d98a37abf82b7', 'key34': '85831c87d0c62437aea943c19891d85b', 'key37': '7aa5117214d3d4850c98c05328f2e975', 'key36': 'e8b010b5a3b59d7862a77a0c67921083', 'key39': '56253e13295dcb10887a03ff315721c4', 'key38': 'b7a791508d94b5631cd7633d2536110a', 'msg59': 'afe33ebd3cb6957fdd5d40e1d464a775f8967df7aa1c508a0be95e446d55abed', 'msg58': 'f84dd3a33cc8cfa8813801cb2d3d194d84d6a8cdc228d523677b518dd3868d09', 'mac79': '96f5', 'mac78': '4892', 'mac71': 'd0fe3716e4ba9a0521ca7fc4604adea1', 'mac70': 'eb23ea749675df0e92ca4e2d368dccdc', 'mac73': 'ef4a', 'mac72': '4e3d', 'mac75': 'cb9c', 'mac74': 'd9c3', 'mac77': '1325', 'mac76': '80c8', 'msg61': 'd87d82c2885770c5589ad64dd52a548a38eb8da1ea35d1b64782fa4aa36a93c8', 'msg64': '0b6ac8f0a13cd483fe2949b4019db07132156539613256d38a0b0841fcc8dbf0', 'msg65': '4b4b205120431713249259027c5bcf71ffa5b0c93e54a623c1582d1594243ccb', 'msg55': 'deb9c47ead3ca6d7e7fe5332ede8e3db2bc6bf23fa9da958c53ffdf46b1c3615', 'key140': 'fbae224bada35e867912e0d83406d1de', 'key141': '6fe7e913b366c8a0d00d1e02be3ed058', 'key142': 'c09ee3680bfc4ddcdc409ddc47fea251', 'msg54': 'b1289dddb326dbbf77d035e991006d26690bd69083f4b56103e0ed0570cadc74', 'msg68': '197acbab02cafcf2dc6acfa19a15636af03cb36b5afabeba614ae5411a7894cc', 'msg69': '12842ee1a8e4e8605f5de4800791042837ca3e06334a9f8413dc90f822af591b', 'taglength87': 8, 'taglength86': 8, 'taglength85': 8, 'taglength84': 8, 'taglength83': 8, 'taglength82': 8, 'taglength81': 8, 'taglength80': 8, 'taglength89': 16, 'taglength88': 16, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 16, 'taglength71': 16, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': '04d3d147803a4ef939e50bccdddcba4041b07e7849c6f33409f26fff294787aa', 'msg49': '933f06ff18ee7674aba548592dc8214b1af8e929242f87c81b0cebe8106b5267', 'msg42': '1b6b128d3b81ae600f623873fa71dc5a', 'msg43': '3465a7503b36bbbf2de46faf79e8e212', 'msg40': '3eba9aae434181c6da2138e208579314', 'msg41': 'e54fbb2daaeb6ec1250d8639b7abf554', 'msg46': '511b40b45e3f2a336cb42f39592f3ecb', 'msg47': 'afa5736efdbc6b0ccc9069e11e6e9645', 'msg44': '0f75044138fab1c64d13a571fa469927', 'msg45': '9af2f10ce29da51698468eed9ed251b1', 'key134': 'ccd3b51debe192b1f0d1fefaafff76cd', 'key132': 'a03027fc434918b7a995f8091951e233', 'taglength127': 2, 'msg117': 'dd70712afb052308caa271f3cd8c1bf8f0cf8f241a8414ea055049c44e2dce1dc86d416f16fc6ca9', 'taglength126': 2, 'msg116': '53aed98efe756c602857e1eefba9cfc2e9e357c740eb59aefe96e891e66cfcd6d3ab67574d8f0bbf', 'mac140': '73da51a8a3be4b09349cc9cdd4a97393', 'mac141': 'a15a44e9f1b0357656222ddd22a24b7f', 'mac142': '15cd20b2fedfff132a06e006ffa65352', 'mac143': 'dbf63fd93c4296609e2d66bf79251cb5', 'mac139': 'ce0c9fd405e2ca122b5da89650765a51', 'mac138': 'f594db071c2c0293675936692575b9f6', 'key68': 'ca82ce00dbe23574c49bf0d32fff14b3', 'key69': 'ccd3b51debe192b1f0d1fefaafff76cd', 'key66': 'e04e5772ebd607cce417fc024142f5ea', 'key67': '47c354466e2bc82272975a2a65e44341', 'key64': '6a413946f16db223c4f654cd54d737ce', 'key65': 'ceb77be7eea50e5a509059929a16d33a', 'key62': 'f86bbc40faeaf5aea649eccd82496ffd', 'key63': '366a420bb0f5f924efde8dba75af32c2', 'key60': '210ae1d20fd9eb985a653d004674d61f', 'key61': 'e4c8a36a41a861583da3e2bf897680e0', 'mac26': '9ed3', 'mac27': '31bd', 'mac24': '9186', 'mac25': '309c', 'mac22': 'dc3a87716fbddbb6f206dd4324e19519', 'mac23': 'd8b2b5da22eefd471fceec695ca661c8', 'mac20': '14069fe111904d6f75f65732494e3d48', 'mac21': '247d0d64219d8c28b726725f2431ab6f', 'mac28': '6d9c', 'mac29': '20da', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 8, 'taglength128': 8, 'taglength8': 8, 'taglength9': 8, 'taglength36': 8, 'taglength37': 8, 'taglength34': 8, 'taglength35': 8, 'taglength32': 8, 'taglength33': 8, 'taglength30': 2, 'taglength31': 2, 'msg86': '3fb0cdd87c764c2b56ad8fe7d65272065f48', 'msg87': '00ea6ae280c9f311d26b7d644ee0a984424a', 'msg84': '0d7eddd810a426145a0776f67c87827366e4', 'msg85': '5b7bc1ebad1a67b176ab2e31ad1ed38efd3d', 'msg82': 'c260d3467773462a538d2b1fc96827c453a1', 'msg83': 'd4c2726630d40e5d27951992cb215294001a', 'msg80': '194788595b5fe97c5d6110c0a782eda3ced4', 'taglength39': 8, 'taglength43': 16, 'taglength42': 16, 'taglength41': 16, 'taglength40': 16, 'taglength47': 16, 'taglength46': 16, 'taglength45': 16, 'taglength44': 16, 'taglength49': 2, 'msg38': '1625fd1ac7e2a3d9b7cafece0790c85c', 'mac133': 'dc9296f21e1ef5e6', 'key9': '850f208d5dda093866dde04e8e639888', 'key8': 'ab8cbbeb92a73a3d69f709ceffa010f4', 'key3': '5a220032ebc553c7c3b55b6604dc6ddf', 'key2': '3210d3e5530c022c3d4e7e36e548fead', 'key1': 'ba165b2bd3c698cc285f46a053246535', 'key0': 'cc44c4bed047cf9a80a892dc5987fdc4', 'key7': '02026d17c75ca0f9f2a98df8de6bfcd1', 'key6': 'c4173b274b5a297a3917a144876f10cd', 'key5': 'e7241285e936d691fb9e0606cdd97d63', 'key4': 'cd0206413033a9f767bbc5c4e6d306ab', 'mac137': '61d7fbc0bdf1ff30eff5a85292c89d6c', 'mac136': '86e01def3f8d54f99d0b2ae23ca88f3f', 'msg139': 'aca5bd1bff8ca6c60f6a2543e82948f8ac75de0c36cd361bfcda2a2e3a005cea4d34c0075c0d5b043e1d4a1998', 'msg138': 'b5110542b39736a6de49c45120fc7ee269717835f3846537cba548f98d8c4c036e29efea80da662532e13d1c16', 'msg137': '693c92d0477f746bf2460256aed73a2904aa882e65778d1610941fea367e91445bb634beffce1dab7ec3290535', 'msg136': '4b88f286c1da23bff4eb38e781705f889d5c16375a0c906827c25a8796553e446327682eb156c7839637b646da', 'msg135': 'c07d0d779a018a217a04da69374eaf0e204ade5aeb1ffe5fee1c328192594334049bf2072d798ce2e5bdbe8b63', 'msg134': '12842ee1a8e4e8605f5de4800791042837ca3e06334a9f8413dc90f822af591b8564e3bd1d66c2b7ae7a722040', 'msg133': 'f1c84479c748f8009401ab8b434141027044d999cd055048c553077c5f27e70c6435a26ec4c13b2b36b4c8901f', 'msg132': '3969041ebe02ff1d3684fae3fb30484c0a5dec18b862f7eca0b6119be05655a4856762fc431dae0d6adb1efe15', 'msg131': '36883189f606c00258b08c8273d9ec10f8f5d2ecff51abdb060286bf361c796ae92440b46ac728cbfbcb2ccb1d', 'msg130': '6efb4aaefe4c9649e98ffcc6abe46f5679377a6ecbb7ded518897dfce0bd768df0819246e294df08e3fe9a2bb9', 'key22': '788b1b02b7cba9afefa5cd688fa479ae', 'key23': '08cbadf8f1661b33f58194a643dde8b0', 'key20': '54a9f32687e6f342238307803527cc5e', 'key21': '0801dd9e4baaca5fb2b52bf9f113fb0a', 'key26': '608f8c2519b27d8890afa0115e4df1dd', 'key27': 'e8af17962ba43e51a7678ed20fb07422', 'key24': '1416cda1a9b60cc6da8ba019f82a1405', 'key25': '66a9f8f0cd9bf0dfbcd85b83665c8eeb', 'key28': '9a6106932a9fc438e6a82cb3967a5890', 'key29': '8a8199ce63f28f4ff736094cfc759fd1', 'mac68': 'edafee89867a5ded78476d99aba22a7c', 'mac69': 'fa8ff66477470969ff07206fb2bb6892', 'mac62': '66bf4c569e632aee', 'mac63': '2428182c15daa5da', 'mac60': '9d5854114d10b14d', 'mac61': '968eed443de5f590', 'mac66': 'c390b054064e16e25a33345129fc0a92', 'mac67': '19c074aff4eb5af8f8d8ffd2cbc2b7e9', 'mac64': 'e732e0cd22060cf3fb0093834d17478c', 'mac65': '11e2662a6d69d96744762417610fc730', 'key97': 'd648910efbb3fcffce8bc7f1477646ef', 'key96': '4f377bea5b7bae890df5d4a26d18e15e', 'key95': '766c7e1db0d440210103890750570c42', 'key94': '22de3f10b1c034a0ee80c6b1abc2de16', 'key93': '2f74a540560fe59172d0a299e22bd37f', 'key92': 'c4647bc2fc0fc6419f0872b5156a3fb1', 'key91': '23ebba485fc4ca8b7cf9c02677e896f9', 'key90': 'f83c653d2caa3e8eea9f103ea4577b81', 'key99': '63ab37dcbf8eebe67631ed5bdfdb7860', 'key98': '4ee8480fbaa4527630842cbb30577ab8', 'msg28': '8b5ec3e8a7524e538890311738cae21f', 'msg29': '5ff513c96589a3758ec21ed44471dd6b', 'taglength94': 16, 'taglength95': 16, 'taglength96': 2, 'taglength97': 2, 'taglength90': 16, 'taglength91': 16, 'taglength92': 16, 'taglength93': 16, 'taglength98': 2, 'taglength99': 2, 'msg24': 'f223f96c9e1389d844ab61adf546c42b', 'taglength59': 8, 'msg77': '84e7a9117e3a2b5c6b47ca68cdd643d05d0a', 'msg76': 'fed74e14afc5c048b703463d84d7589af33c', 'msg75': 'ff1320502b0a0d5301261b412fef04fae762', 'msg74': 'ca044a08cf670378eb0a7742626d39778bd7', 'msg73': '2c63896dab5e7168dd9d76537220674d5b24', 'msg72': 'cf132fd4ebc25fd3866f1a95a6193a1a9cdf', 'msg71': '62c77113bbcb6f3d167392c3f4c41bf33e99c9a44097fac6f564143d851423f0', 'msg70': '22dd45f6135c16d9ad0bd095f9e15dfdd55627639676db51f2346d7a1e005cef', 'taglength121': 2, 'msg79': '3dfc582ce356a769f30e05fa7b0c8a2ed946', 'msg78': '4e5a4af0902d4fad37db981189a53971daa0', 'taglength120': 2, 'key128': '4eed2e7d0be10df3af24fa479cdb9863', 'key129': 'a5a1a51ed1503ea87eae35cc2f804d1b', 'key126': '2e4a3b8b62fa89c87a86aa5c18db614d', 'key127': 'd5e155236608948a07e7efcf780f44a5', 'key124': 'ae3b4a29da8a25824df7c42eee63db20', 'key125': '0a801cbe27e9dfbc999613af500451a0', 'key122': '56aba28d48cc95f1a8534d1a764b7f7c', 'key123': '323f2ae8204dba4cf9f85ac5c339f22a', 'key120': '1ca3f77404ec5eb51b5b3506eae6ea27', 'key121': '2f32f483c6d800a1e264fd0cbfb1a4a3', 'key110': 'f5d088b69a51f7db1c41064b310dc5e8', 'taglength125': 2, 'taglength124': 2, 'key117': 'c88e9acbee53e7515479af901400fe30', 'key116': '05ff2f3689c428b02de5e55fb0ef48ec', 'key115': 'eb38e3a0ddbc8d4259628dab26260052', 'key114': 'd189d93144e6da21d841cd814b6911c2', 'key113': '65a25d400d383439ee7327b6b79974cc', 'mac131': 'a1bcbc8600b77caa', 'key112': '94648a4c9674591f9e1c66283296911a', 'msg106': '6d515d05d86949e3927f7f17b9043e30abb3e367d3175f3ac34ee956830cf0ba29e3541aaac1d581', 'msg107': '25ddfa4436de9ac0f0661f1488258f014791925f3ad1c91b2ada607cced8e7aa40cf5d70ae828e41', 'msg104': '3baa77f536f42b65866202b74a2ca8fb21ff646835f340f378bc6a212d24da19abb935fd5dc2f17a', 'msg105': 'b6c773020e6db9d008934e3b8621cc8a7ec57700fee965686de3e2f1136c123cdc54d8b45874f71e', 'msg102': '081fc63c08ccf165d6c715fb471f51baf591c05a8ab7e7633b7c4f4392d3729d71a9dce554178a2a', 'msg88': '81164bc14e4b1e3669cb61597682e9000686', 'msg100': '416a230c0336cb327961de7d4ffcf9a2b77c90dc530eeade552a6d0de56b1cecc39e5ed72d1901f5', 'msg101': '20fe66958627144d52214e6bd44b03f38d70e49ce5a7bed72177070c8f3fb72703d55953876e6105', 'key111': '3cd4e1ab2a09872f7eadfaf4147d1a2d', 'msg89': '58dea00d9aa8cc28af78703fa13e8be6034f', 'msg108': 'def889e78a9aef123941204e55bf752494fffdf61f98c235f4a14ed588c86efeb19e3605c435459a', 'msg109': '1e1c940599d91692ef17d52af2f6c300d0772c3fdd309c599345fe9bd79301067e2ec05a100ea173', 'mac130': '3de1a0328cc2d41a', 'msg119': '650f7f93197316ccbbebd8454c817979b09b961e0fd13b9f7cfca8ccd48f55d1e92b3364e06d3543', 'msg118': '32ff657f44ee7111a7b58da95c6260e1e18bf81e56e30fc5e00a8dac4baa4ecff3bf2445e4362072', 'mac104': 'b4a97cd9ea6926d4', 'mac105': 'a2113f4296e103b7', 'mac106': 'd1c03aa930f25d22', 'mac107': '29192a662fd63eef', 'mac100': '17af', 'taglength38': 8, 'mac102': '36ad', 'mac103': '5152', 'msg81': 'ab4b0342c62633b5a135663de80546e83e3c', 'mac108': 'd912e4c34d85ced4', 'mac109': 'ab7a01c1c7f68a64', 'key59': 'b77354e54ac584255c58ad4081c41a2a', 'key58': 'a416a10e8fe1d6e8d2e4ae00edaa565c', 'key53': '97a5fd1d34b84309742f79ddda91d580', 'key52': '085b9871aa63fc10a61ff5e04b35e1d1', 'key51': '61b50a8d349b7efbc49ab5fb13fce1c5', 'key50': '99a6b26b573ac7f0b78ac85c6ad40785', 'key57': '6a205d7ad23190ee96c572b3420dfb35', 'key56': '8b3afac3fa8f4f08a369816cc55aeeab', 'key55': 'dd4f965eddc901d39d718fdabbc1df5f', 'key54': '01fad26de1a625b29e0f4f4bd5aafefa', 'mac13': '63c9b452c86e1259', 'mac12': 'af0ad711ef6d07c9', 'mac11': '006236d1e0b9eeb0', 'mac10': '7e6abd95ae093a85', 'mac17': '61482875cb4b71df01ee9f6ef3ec659a', 'mac16': '3a3a5e39aeb9203126d2fdb4894ef572', 'mac15': '518c0041fb7f2eb5', 'mac14': 'ea203df8daaa22e2', 'mac19': 'dc08e81a6abc0095faf949ecefd1025c', 'mac18': '5d3888c6c27a0fc4d94c2e8e865aa1b0', 'taglength118': 16, 'taglength119': 16, 'taglength116': 16, 'taglength117': 16, 'taglength114': 16, 'taglength115': 16, 'taglength112': 16, 'taglength113': 16, 'taglength110': 8, 'taglength111': 8, 'msg103': '3cc95aad927a7032ece9e3d551197ec480d3b4391f3de1ac15aed34735c1899a1ca83a905cc39aa1', 'mac135': '2ecb9f744548e693', 'key118': 'adef0a884f27475c6d3bfe9dba6591f3', 'mac134': '6e15dc036eed1913', 'key143': '6c3473624099e17ff3a39ff6bdf6cc38', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 8, 'taglength57': 8, 'taglength58': 8, 'msg25': 'f946f32127d537c33bee3141b5db96d1', 'msg26': 'e2f0659ed673fdab6fa99e4761c2bfdc', 'msg27': '9501f6dd856470c122f3d59caf32a6be', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '6728d74619a840f066547cf7512bd572', 'mac112': 'e5c288997d5441f4b1779398658d307c', 'msg142': '1a439b0b82338e2599012d6d92e16b591e939a433de4de0e5377e20c7ec5c91f2763681fd784b27c4cbe7325cd', 'msg143': 'eeab9ac8fb19cb012849536168b5d6c7a5e6c5b2fcdc32bc29b0e3654078a5129f6be2562046766f93eebf146b', 'msg140': '0e876cc1e57c60a824218c19340cb80c39a248a1e796b6be97ac40fa9ac3debacd1277996db2540e2d5cd54986', 'msg141': 'dd5f0aa574d533c778c9942cecc4e1cabd8e13c946a00b9219dc7829fd7cfabc3349887cfe0d0fab624a5bf62b', 'mac111': 'e10dece1d57c300e', 'mac122': '731e', 'mac110': 'a795aa3ebe5a8c3b', 'mac123': '5633', 'mac117': 'a0cc8d18d852789083274958bf3ed712', 'mac120': '1f64', 'mac116': '032c35ee4e828958dafb67f5332daaa7'} |
dict_cmac_aes192 = {'mac121': 'cfc5', 'mac115': 'c2bba9ddbd27cce7', 'mac126': '4bc8', 'mac114': 'bf684aa744fad20f', 'mac127': '2ff1', 'mac124': '3587', 'key19': '5ab1f8718e4eb6b6789eda4a03714a86e92535ee7a61f879', 'key18': '237ca5c118c1ab692e9721607f408f1b7df890db342b3383', 'key17': 'fc97d45dafe5f42622652aa38dbd944d18c9b07a4a3d6f28', 'key16': 'cbcc204eb36c76e4672ddef3a959c14cd46eff6265869159', 'key15': '4d1e78b414e802a2edb8c30dde8d8e11e57bf680e0fd5ad3', 'key14': '04177d1fadd551b10ac7a675b13669359659cee42fdd95d4', 'key13': '330fd3ea2dba438bb71973558b4a1af62f0c08c726250151', 'key12': '94f868f3b08c362d57d9bf79f7ad7024fbcec05837d6b590', 'key11': '759dc755b8dc34d13f9851cd920901f0ccad5e3ff148ab3e', 'key10': '32204730c5c7757f937179a7bc4d1c61ebf0e620909286ea', 'mac57': '9a0b27a5', 'mac56': 'c5e5540b', 'mac55': 'cac0', 'mac54': 'a806', 'mac53': '80e4', 'mac52': '14fc', 'mac51': 'c185', 'mac50': '269d', 'mac59': '9a1fee8d', 'mac58': 'c031da3a', 'key119': '8a34592dd88fb12a167a43bbc87855a4f189b5087eff42d9', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '27b43ffcde5c2104f7b76290a5faeb3533177ffc99f7eec3', 'key81': '1b8bee5e346a11f4b65e10acb23e333b5989cb411dfd737c', 'key82': '58ca3f734fc2fe7e96f5927bb598ece841bb6af8b1ce4e38', 'key83': '3e6a6eb9050606ebbc3b99df19b7ac55efd3c211ff18d281', 'key84': 'bbcbd0d19139fd2e1133da6e086832c52dbc255e4de17094', 'key85': '7ea77b07802a9af418836a30a0763135b9edc3dfe33daece', 'key86': 'a37f15058f91988b0e2104348e72df7d6611d081160a03ca', 'key87': 'fd73065d55e1956272495b52183157825e227e6004abb19f', 'key88': '60af6ed79a8a81f67c6b8c0fbe37ad5e031a3281b9d6a575', 'key89': 'ca11c53f7e6b9863798470b72e94f15a0ed7bc804f3f4bc5', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': 'a7d0b74f4a011988c273759f46d2d73a6fa3c1a6ec287dd47883b2a2091d365c', 'msg33': '086ef911cff60b19396dc8c3dedd9c18', 'msg62': '36665c9d5fb83ea6703fbe2d092c1416cda1a9b60cc6da8ba019f82a14059378', 'msg63': '5f44469e2bb3be2af168d19bdb3028caf33d3c1b96cb694a2604456800212f20', 'taglength18': 8, 'taglength19': 8, 'msg66': '8b0d97f943c415d6e4748733ef2c16a86d61ab88302b54b95bb2e9c325e2ef26', 'msg67': '57f7e12fd32e7316880f13abaa48c9a89714f3c2c45fdce6f62b90c3b532ef88', 'taglength14': 4, 'taglength15': 4, 'taglength16': 8, 'taglength17': 8, 'taglength10': 4, 'taglength11': 4, 'taglength12': 4, 'taglength13': 4, 'msg30': 'f965d6d8835b7c90a175125fbcc76d9a', 'key139': '1271cc418351d957cc0f119d75e949e11ec856f85cc67e61', 'key138': '51e8fd62b8d417bcedaa7058669dc805860d4854654268f2', 'key135': '3bee23cd648f2e1d57449e601d8757f076a8b4d41a0ae293', 'msg37': '7f81b8cd10b1bd416cb3b9892228d8f1', 'key137': '93bb9c9e96e3ca5acc41f45a9ab444ab21e88c6965e289eb', 'key136': '8fc4b4273a2d7b0e0d594dd63d7632b63020e4d093278313', 'key131': '0091a34836853f4fdab695d3fd81df364a70cd7b8eb02856', 'key130': '5339e47fc8d275f919e17d7fe69c2a1f58939dfe4d403791', 'key133': 'c8801f991afd93c540caab3aeedc629597ea5a828e0c21e8', 'msg36': 'f5805bc15c157cfffe5b6749426cde28', 'msg35': '7eee1912e98cda3b6c4ff210d791e35c', 'msg34': 'ff53ded97f79b5b50ea9d398efa832a5', 'msg39': '1c2a5309c1bf475e7baa753ce0bac9f8', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': 'de877b46a534b228a96a8b6cab36ee2cef1f56c5ed0a28db495b449e055dd94bf6e47df574317d85', 'msg114': 'adec175414600acdeb51116657a58fc202aba2581246b3bd584e4c26ca33292934e391c32aeee79f', 'mac99': '920a', 'mac98': '6b26', 'msg111': 'b23fadd8e4440ab99b58642718c8a4f92c2ccfb1a13f87f3d5eed53ca8af25d0981492f42ba0645e', 'msg110': 'e7d4e59685a89d1557825d22843bb2ec1019d19e0b3b74e00837e4a0d1015712590f7df5f2ba5619', 'msg113': '5143b72f3ddf080e684a45201abd938448682f11b80ab29066c09329271aed1c8c7482b209840172', 'msg112': 'e36bfb432e1693f10b0f3f6774b1fc85598248a04d167a83803154b3ed2cdbf8d49a66186b2bf6e6', 'mac93': '8f90bed41fb9e6be', 'mac92': '8664a9bc4af84f64', 'mac91': '0634a5c5e36c8ae8', 'mac90': '090f7d545e3538ab', 'mac97': '707c', 'mac96': '0f6c', 'mac95': '12d721cf45165e88', 'mac94': '8190d4995d50dae4', 'key44': '76eb0110e1a231be61c90d7978e7cc369da63f08e2e49edc', 'key45': '7061869e6ea53f1e2afec907204d8de92f418f8b927afd30', 'key46': '15e19615eed67b615eccffe1fcd582c45022fc732d0deeb9', 'key47': 'd2017ca261c233d8f1bd816bfb974e3a3246811a666c0acb', 'key40': 'd42600efdf481583e433a03aff65bd095e281d304f59b61d', 'key41': 'fc561cbabd112dfdd36d7b311c23e5898ea137746d67fc1f', 'key42': '0ac2d4621abda6e5e88ec221c19dff6449523be46d33ef04', 'key43': 'c619ea8e0c40cb29bde7e7ddc793c3eafc20d9b3c3a8ebc2', 'msg99': '3124347f9ef2d0d556d05cf9d1ee9dab9b322a389c75cd4e9dee2c0d08eea961efce869050264d0f', 'mac119': '487933e0c1519183', 'mac118': 'ffa8072f893be627', 'key48': 'a104843ae43062bf3db082ba7d9fe92a77169823bfe76920', 'key49': 'bc258baaca9f703e80689975088c33d59cf5d1b801de0e5a', 'msg98': 'b6f8bd40f122eedfc0f20c206ed5dd8111da422bbc171078f6491cb36bba951fe268973a6f63fc42', 'msg95': 'c9774ce3ca42be517797ee7a14b9dde852a6', 'msg94': '8b2a867789d5dcb54e4686fbed55d0f7ab45', 'taglength109': 4, 'taglength108': 4, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 4, 'taglength104': 4, 'taglength107': 4, 'taglength106': 4, 'msg32': 'a2e3a86ec6f43f8a107f9fa06bd4ae91', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 4, 'taglength60': 4, 'taglength63': 4, 'taglength62': 4, 'msg51': 'f93878ef537ee23727402deb8fb6f936dd82b7db979ec6c8c092dced59eaa84e', 'msg50': '9aae4635b502a25ec764f244ca77a1bd10d8296884517989345099140c979008', 'msg53': '54475fb19c29c9842e8f81d50cc1c6ba8525727364a7cff2675dab9bf26baf48', 'msg52': 'd00f42861296037cc21036429278b8d0ec9dea93d978b56222bdcbb3b5b02f0f', 'taglength69': 8, 'taglength68': 8, 'msg57': 'd658ff740bd18d1a6523b87ed05be4bb0c0af18a0048256452f866e7344ead7b', 'msg56': 'ab795a4b6d132b35d6aa36eb6df856ad06d0257838bd14ce11e6bbb509346d02', 'msg31': 'a6d797d25ef4b16e08bd4528bd345ab6', 'mac125': 'd669', 'mac40': '27d7f1732237eba1', 'mac41': '2a8e3b5759ad981d', 'mac42': '2ec435b40124b1af', 'mac43': 'd8f43e4b7edd95b3', 'mac44': '108ee24301ced6e1', 'mac45': '373df1feea7e252b', 'mac46': 'f112075c00218de0', 'mac47': '360ab81624920bdc', 'mac48': '7f30', 'mac49': 'aeb4', 'mac101': '2777', 'mac128': '02eef392', 'mac129': '8c3ccf9b', 'key79': '3f42b26bd2d74cd049c0e73c908aed4085ea4cdfada4cd95', 'key78': 'f0ff6e39bef0c5f492aa39f9a258d5747e1cc142a0567253', 'key75': 'ad036542121e752d41fec89cfdeecc53cbefce7df6ac1c44', 'key74': '2da154bdea589bdcee6a4c542816787dde9b32b34f4d4e08', 'key77': '8f53ac66ddb6dffec242cdba3c0b0f5d50126f1eac5ea75a', 'key76': '03de9e176d594135438ebea869dfbf066db4de0d69cbb092', 'key71': '378638743350e39a91068b8567fa874068a3c808ab4bbda3', 'key70': '580076f831f64d8497e93e930beb63e02ea4176dca431618', 'key73': 'f32a8d3cd687a5a4cd5080b4fceb79abb13b791f3d216a9f', 'key72': 'f627553646318dd6d381f7c1d18b0e1d1dc63d352400e772', 'mac35': 'f5e15e94', 'mac34': 'dea244b1', 'mac37': '9f0c7d3a', 'mac36': '7aee6693', 'mac31': '72ac', 'mac30': '568d', 'mac33': 'd94a0e4f', 'mac32': 'd92d7521', 'mac39': '444f2b15', 'mac38': '74eaa443', 'taglength130': 4, 'taglength131': 4, 'taglength132': 4, 'taglength133': 4, 'taglength134': 4, 'taglength135': 4, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': 'ce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da125d15d3d8383c77de9133d34efb0e36', 'msg96': 'b61b9326aec22fdc2f98e45532809933e5c10893fe08b7354fb129dd9b4255f8a938578396076629', 'msg91': '1baec344f10a51f12404e8e176e9efed2d70', 'msg90': 'c2e34387816c931c76b293e4049968021182', 'msg93': 'd3fb9c1f4dcf9bf2ab73b1e18435cbbeb784', 'msg92': '853f70aac87edf1f63fdb2f91e350d1e54e4', 'key108': '31765a889fe428193b61fcf8cb6dea3b1c6d4f1999f3084f', 'key109': '0af02b66e7fd5d05a3389eafa08ff3e0ba78ccdd738541e9', 'key100': '5d5f87ba8a8c24b950347fe83e374b443194ddd8d2d8d6d5', 'key101': '5bf851aaa2211bbe5386c66d71ed91503f5bf93a56da751b', 'key102': 'a2d23a08b6d5ae6f79e7ae13e2ef10c491dd929362ee1337', 'key103': 'ed1f96bd9458a5a1f64bc1b4cce1fa52517513c9ebe63d0d', 'key104': 'd60bbfd95a1df153ff32e70c4260b6d77740df42c5e77426', 'key105': '6cc7510e345e00eb262bee66280ec78be5953a62152858c3', 'key106': '655db94f423912b9dc1c95f2315e44be819477e7ff6d2e3c', 'key107': '77d0c6d40ab96b0846bc74f2bcfc0d5a2420cfcbf29ceff1', 'mac132': '4948be0a', 'taglength122': 2, 'mac84': '75446767', 'mac85': '7d8bcc95', 'mac86': 'd9e5e38f', 'mac87': '89493091', 'mac80': '4c390630', 'mac81': '5ca4256e', 'mac82': '9c9a37aa', 'mac83': '34cc4069', 'mac88': '768ac423765ddad8', 'mac89': 'b5b42265a268b770', 'msg120': '63eee89474188e778bd39dc95c538cf434fb3e1f32c6d6b0b3e5cc0f0eaa41ad82a48f466c0c2563bd5f9222ac', 'msg121': '87953e3528b9f7d90ed28ead0ab88de312dbb014f22a3e3d3e3399078b8b144bde7006d565ad1d6865bef40374', 'msg122': '4cd3380daed8e21d9331085d038d289ca4d41f9b4367546eb0a93325cfbeddacec931df04f1e9f4310e75c022d', 'msg123': '7fb4fc1fb71dd0b8ebbc776b15bb4db801be2ba2f6042e6398aeba5e0d5ebe555f0439dc21f5fd0d563eb37e8e', 'msg124': 'd4c759d48111c9dba635e81f37a4703feb8bf25bf1af261bdf9b80f3ebfe03a55d4f5a0744b22506681f91eb81', 'msg125': 'a483c3619b1cb87b9e5c5f8f82925b091130e1935cd1b439537a53ca922070817e6ba5e491ba63edf2672b6849', 'msg126': '8551d8304fadd061b5d58fc0fffd474b8726c32d1ef2f032abb79d7d15d27f7d633e781d2265183b0735655cd6', 'msg127': '905a46159d199ba490a70187ebcd287c01e12717afa2c9c0476328fbcd6c7eec669d371a0d544b738891ca909a', 'msg128': 'e418d63f07d27c0d9f4995872034cb3e2eb6868e02336a150e61216ae4a25a0c54911199d4da11412650b87934', 'msg129': '74962da5f879782a71331d00e346e8d11adea547ee0589d9c616cde45b749cfdbf7b2f869db7377fc2547b9fdc', 'mac7': 'de38', 'mac6': 'c8b4', 'mac5': '7217', 'mac4': '6d9e', 'mac3': '9a35', 'mac2': '6dc6', 'mac1': 'e92a', 'mac0': 'd70c', 'mac9': '66ad00bb', 'mac8': '0b7c30a2', 'key31': 'c9eb48d8638197f045985bcd78e50172fd35b3b761b187a7', 'key30': '582ecdfcfe3605a453931922e9dd575d9fc9a866d09567fd', 'key33': 'a77403624de4c90f8c94b49c3ad06f5a71190b68e524f2d6', 'key32': 'ba96de1e049589688724ca137ab424290ac8db6d444bfc49', 'key35': '7c660736e3e6af0a4270577bf77cedcff9b9ae5d17478f5b', 'key34': 'c7256ba6433201ed9020f5183cd7df6d44f14276d66e6b57', 'key37': 'ecf432e82732e9b143c0dd3caaaeecbe5462f7673d3bf12c', 'key36': 'e416dc25696e5e455ed49e6c6f544b2548f61adbfe92524a', 'key39': 'ffd55500ec0fe3e0f058454179f9f3ca63ea4f66bf8c8897', 'key38': 'ca10cb1f065a393cbe44847cd6b255f9d3a8edff9a030965', 'msg59': '684ef950f401234dca53eaffe99d590fe17da1bb88c06cdaef866f1a94a03e8d', 'msg58': 'f82df0ebe0428adb1bb120ad26504384250358fcd7de336bca89e867cbe9dd88', 'mac79': 'c3d7', 'mac78': '466a', 'mac71': 'f940bc5340be43a3', 'mac70': '470c45f9b92fc97c', 'mac73': '594f', 'mac72': 'c307', 'mac75': '44e4', 'mac74': '1479', 'mac77': 'bf55', 'mac76': 'e86f', 'msg61': 'd020aa0c99c6f4bd14e8130a7340f2fe1fdf66eead5cbeba0e309c4f05610370', 'msg64': 'd6ecdd21ff97ac8699ab06ee3b73df0e176c8f72da9cd26ed4251356591aeaf1', 'msg65': '3c052ce80dbebd3d360cb8d9fc312a2475f87c75ed90f585889a81242981b12a', 'msg55': '8500ac41eb1f97e511bae6ddb65e7bd4ebac0aff2515cefd91e17a01a7767332', 'key140': '3bbcd9955b873a6e19b0d59adcd4624239014b760c776117', 'key141': 'c8801f991afd93c540caab3aeedc629597ea5a828e0c21e8', 'key142': 'ed6cd559440d42675c3c91265adc2936e63f25112747ef4b', 'msg54': '27f1102ba546eb514d444d56040e60047b60829b0416ad75a5ee36e66b8ebb66', 'msg68': 'c9a5a3e6978275713341c909f3aad165c3ccf69978f9cd3b611147c41f04283a', 'msg69': '738bab810d2bc0a8aa64258722fe95be273077e77a0ab31c5e10c5ba4e281065', 'taglength87': 4, 'taglength86': 4, 'taglength85': 4, 'taglength84': 4, 'taglength83': 4, 'taglength82': 4, 'taglength81': 4, 'taglength80': 4, 'taglength89': 8, 'taglength88': 8, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 8, 'taglength71': 8, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': 'a9f828f17b5f98eaf2146cdf0544e39ca13504a392919a1ea7027e1711fe14eb', 'msg49': 'dcc87e9c7486f56ab406ea608d8c6aeb060c64cf2785ad1a159147567e39e303', 'msg42': '05200b0883ae8b45d4e1bc9869bc9fce', 'msg43': '7d0d02aacd01bfe11696e7f3869b1dc3', 'msg40': 'a64c8ce19497a9d51733a996d241ff59', 'msg41': 'f618db094c8879aa399ee88a51698dca', 'msg46': '0f91f4c558b9b90430b099579e726ebe', 'msg47': 'bbf92dbbc01596878b68bfe23579a529', 'msg44': '569d275c7475416594a549c45026e2e1', 'msg45': 'cb2eb4c39e29a0a15d20649ed2c0c7f1', 'key134': '404d3489e377c3f496c4ea96abd0240b222a1870700578bd', 'key132': 'a52f9d634f86e2f6ad61aacfd417450a3cd2814fc187ce5f', 'taglength127': 2, 'msg117': 'e3f9f382d19ff6e0bff8bf4b7346d92d7874d3ef664e9ec964ee36d9ea768473cc0584b974e3a36b', 'taglength126': 2, 'msg116': '4415c5fd71ed5b1f9a02b58b291d4284a2cc2f113d6e2db0d58a74490065076180d33a90da4d7235', 'mac140': '751476cf6f0edce6', 'mac141': '39ef32b7667bbc3b', 'mac142': '4d463b6910f058a8', 'mac143': '725cc69af4ec17c8', 'mac139': '7703e4539280727b', 'mac138': '9cb28d38a6f76405', 'key68': '0c329e37854148ef7a4bb065488938467bace05e3f7b5f5c', 'key69': '160cfaeb5afc37511157e2591e0790584d3417d4dcb83b9a', 'key66': 'd1283edbd13b108a9d8d331179e5a87e0cdded6764da227f', 'key67': '77a462047840f0770dfc859a41cc1a0f7e7c1637f48ccda4', 'key64': '059e95e116185e1af3314befdf6cdea990f6a084e48b6db3', 'key65': '0405159926a6606fb8eecaadd06f2f07631753895bfa8b7c', 'key62': 'fd6d1ff5de521b446d7581e552b0541fc820ce96f4285270', 'key63': 'af060dc3706835a307430451f0f2ff8908ab11dfa14939a6', 'key60': '254d09ebf6f21809fa08a914d8b0314142df9b5e1df98d08', 'key61': '6bac5ca5b10316758403f09b36c3730c36032ea937bffd6e', 'mac26': '5b30', 'mac27': 'bf17', 'mac24': '3ac1', 'mac25': 'deb9', 'mac22': '50e48ab1ee8c8477', 'mac23': '07a40d7a58698903', 'mac20': 'd54c746fc73b7eaa', 'mac21': 'e6c9f02091f06fc2', 'mac28': '5905', 'mac29': 'c6e6', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 4, 'taglength128': 4, 'taglength8': 4, 'taglength9': 4, 'taglength36': 4, 'taglength37': 4, 'taglength34': 4, 'taglength35': 4, 'taglength32': 4, 'taglength33': 4, 'taglength30': 2, 'taglength31': 2, 'msg86': '7ee932a498501fbeedb023836b0ec5b0eda7', 'msg87': '18f0c0b45dc0b3fa71163ef0091fecc52b1d', 'msg84': '2ca73445d9f97421ae7f11fc467a1742afcd', 'msg85': '46a66ba3d65c60bed3bb7a0869d6d14819ba', 'msg82': '5c03d9a83bb032bbe54ade8c34512cb9a16c', 'msg83': '3794b3a12cf9f6c62be99abce71d08933fc7', 'msg80': '051290d6af5837b9c032b842439703333c85', 'taglength39': 4, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 2, 'msg38': '0425f750812ca53c1e75abcbd75b06d0', 'mac133': '39ef32b7', 'key9': '42d065ddfb7e15df008fbf836d827bd33157d6776596c7da', 'key8': '487cb53b05c988db1fcbd14a2ec9921ac911ae2aa88c39d5', 'key3': '9eced759ac1bca392b860e1ab88a46eb1d15b3b6c7324a6b', 'key2': '12bf0cdc3306761d3200e10f03e478c5b492684197272f9f', 'key1': 'c1dca8d8c208d676a84d5f1756d64fe35fb30aff64da3db4', 'key0': '2b2aaa666be161ed16648e862ac9bd1e317f71bc69e268b5', 'key7': 'a233d55e2a817906b39b4984b3737908246af89c7974fd65', 'key6': 'adef0a884f27475c6d3bfe9dba6591f3cd2c7bbd1a87e355', 'key5': 'a84f3462f3e06a4bdc79e54bc545328fb772da4e9f92334e', 'key4': '86398a482b9ca760d8f3ceaafeb625031551fad6ea26b33e', 'mac137': '052720e1ace435f5', 'mac136': 'f7e11c213a588e94', 'msg139': '4b0c5ce743e4ced9d24f8ce714843d28966c73f619598d4593f5dc34777904e2361fa58306d93bb3e2434309d2', 'msg138': 'c9e75b84afa8fb3a076e835bbd4264dff7850cd1a43416b0586bbd1457289794f05280e80cfad34b06e0e123bd', 'msg137': '7c283ce6a4eb859731a3817a4186dc9f7541dd3df6ee8e49b6401d47f901826113bf62b673c233f4e041a22903', 'msg136': '9dde4ca51ed53c8c81aa098c908f639f2f68f4dee239fa9891df35a188ff03ecc23dca5c67ae96d8938f039e59', 'msg135': '2e8613a18b80354c8f9e9e07c50e5603a14591f71440e17d5e10abb82495d83bc28acc26e2c19c924eb07b3002', 'msg134': 'f90828d1e9da0d4f2a215b41ffe585a1869cba308dab5d17a82ab6ce80e7e73d6eae212149c817b27cc2b3835b', 'msg133': 'c57e7712e10591f000ba796556d5131704bfb45332d5daf35e681a85f30859a91e023fbbdd27e9b259cfde4875', 'msg132': '21393eb6640843915bcf2d54cd832e3a9cd54126af59bbe42fe822b2f64343ff44f87f72b48a662e6fcc8755a0', 'msg131': 'a38b961dc584ce4fe15b126e03b6fbffade2384429d0845f1e5ed5b962d8d6a50fbf9841d9c9849d9e2895203f', 'msg130': '357415c100afce98b7124a7a4fd2b76fff55b131e94808e0fcecc4f719b0667f740571833e6e29c381d69bac4b', 'key22': '39a8c98e750e89b70292bc1e0908f5dec9048db98df73a5d', 'key23': 'c6798ac9e28877f8b6268b32e836ac15aaecd309d78dbd23', 'key20': '6820a24d26c06c2d0ea90e700aac65926f5710c3826f1bf5', 'key21': 'e54dc7f39476f0d32958a4e3aee8d8da51abcf7f0ac8dd60', 'key26': '4177a424392801f64c9aecb7c4401524fe4df89e66d46b73', 'key27': '01f5ecff906a6a351f7080be6926e04fdf8aa7649c97ee86', 'key24': '21a4600f4bf06583a112d303096d4e30e7e1060d869f386e', 'key25': 'c494cbe067b39c289c274460a53cb34791d511f76100001b', 'key28': 'a5f2d20e35de772422c9dfaf781f189262ec4d60f093a2ba', 'key29': '1aa1480d4206bc06968bef6ca9c2370aab70596597ed5745', 'mac68': '5cf81deae10b0d2f', 'mac69': '52064dbdc05567e7', 'mac62': '0e76695b', 'mac63': '1f6090e7', 'mac60': '894e3059', 'mac61': 'f2b8ff6a', 'mac66': '55144cead273b208', 'mac67': '3e2347bea0e5202a', 'mac64': '7f92724ca5304c1c', 'mac65': 'e70f4c4a819e2ae1', 'key97': 'f7c5bbe6ad32039e12985270a50ac022e0a73afbbd1427d8', 'key96': '3df2ca48e82bae34a3bfe5f669896fdd5cf69567150cd461', 'key95': '6c1977183650572f0cbb8d65228d141b67cf5f4212a692c4', 'key94': 'f30ca59e18657f9fa83e96b2a6df23fb372895015678e0b2', 'key93': 'e5ee26b2e48003a4b64f0b6fe743d4664d70725a4648e16b', 'key92': '7a05b2ade91b7f5405d664a74895d2a0d9b24a0b6007cf2f', 'key91': 'c45506768a5453ee4ae477443d6522fd289cd4243c06e73d', 'key90': 'b6d9db88969ca9125a6b2b0267e806b8b107f25bd1cd6ec0', 'key99': '5e0b6e7773254e876eeffd933bf6e23a8e697dc31c7e42a9', 'key98': '6af00d5c678dba069aa5a009b23b86a04f7daf93679c5daf', 'msg28': '1fd5f5f93076d64b9c4b4c4abbdb11da', 'msg29': '1a93cddb6eb0687b82ddeb16839d9b6f', 'taglength94': 8, 'taglength95': 8, 'taglength96': 2, 'taglength97': 2, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 2, 'taglength99': 2, 'msg24': 'fe4c4429c016f90f40449fcb40e51886', 'taglength59': 4, 'msg77': '90ed25c291deb910c32f4ff756e623cf0c43', 'msg76': '8ef8f77306eb4d26129817988a068d34fc19', 'msg75': '1433bc1fefc7d3a4435d9ee0f653ce54d15c', 'msg74': '150fee1f95c474e09441cf8f81c8918918b6', 'msg73': 'df91092aa05fab5dfab9ac70bdba097d6b6f', 'msg72': 'ba91f8b0b358ceea0985fb860e30067d1f57', 'msg71': '7f149c5a8c657c87e5fb1bbf355e36e2ae8b25f809e901c4c87e079cbf634178', 'msg70': '40fe01b41c4da83f331e37ce1412d9ac6c70cbf47cc86d54cad6991017a8334a', 'taglength121': 2, 'msg79': 'ed1da2847ee327b3fa96df5ec21eded73086', 'msg78': '171296a0f40d345659870c4573ccc4bf5572', 'taglength120': 2, 'key128': 'a2e2a974a0a181e9894a95bf11d6c9d9de5fa13c323105c3', 'key129': '170327340a4262dc4923259944e50baa07f023f2c0549507', 'key126': '69a7ba09b55637377d49bdca92dfbebe14867f958782c840', 'key127': 'ce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da', 'key124': '237da4bb3d146a09b4cc2c40d93e74d2278a2d0d839108ef', 'key125': '534c451912b843a232645b43d242c91d1a27223d742a2d21', 'key122': 'a30e0c44321afb7ac30a83188d07bc2485035acf2f412711', 'key123': '8fd71ca7e7af2bf0e567357e773b519b0df3fd5db67062d7', 'key120': 'fc59090e70eac9b3119754a3d7c6831c9451de5a29e46d16', 'key121': 'b64ed097cc3fa17969e18f717cf5ab5b4257ac24c57891dc', 'key110': 'ac045e5caf8293f48273beb7afce4d6bb0af3a30fa4d3310', 'taglength125': 2, 'taglength124': 2, 'key117': '85f137f579652491bb96eb6cde595e21d95ac9d70a0d1ed0', 'key116': '20bbb4ddd19e70bc3d7f9efd58d3ef5f74f663b2b5ca5e96', 'key115': '8dcd939d9ac591355f0d332168d37fa1ff063bb04516a5e7', 'key114': '1f88b65e7fc13985355a7cd82de0e3f51b83f226b4761ae3', 'key113': '86cc68f51f61c5cd0c7b1c1b69ce205620b398bdc47b6048', 'mac131': '8ebe6f20', 'key112': 'e80dc49dc525ad911ebc45f0cc925c1b39bec175d04d5822', 'msg106': '5242bd159f7bea4627d54f0568dc126b62a8c35fb46a9ac5024400f2995e51635636e1afc4373dbb', 'msg107': 'd6352f6ed620edf63b3df30eb5cd8ca8fcf55da20a1b3c488793461b857b2bd16de3cd9c39320aaf', 'msg104': '7ec857d87914fd88bf7f416958438917fe817f62d22867524d19b0697889c82760a635d4c47de279', 'msg105': 'ec842341681e6b67391e533c5a234a7e5815ee685a132c3f5eada928c554613c120e8fdeef6fcc4c', 'msg102': 'ea43aa9042ebe0a51e4b2cc1090ba179d410a8674258502b0526e5b0e960c4b150356d7bde02daf4', 'msg88': 'b1bc7c89a7ebf92cab58845afc186879746e', 'msg100': '9d5bdb5f392eaf3ae4baaca8ae5c06181b1803d1288d14868928452b3599d80724832d095778e65f', 'msg101': '51b5bff09a57a51fb361c63c1b28b6dc2876a4c39fd38e4a8203b10429d044a0940a651100cb54ed', 'key111': '22117c82cf3da73e29ca71cdf537f03e17ad37a76186cdc4', 'msg89': '0fc244dde9af4d8db30475e38842c70bf299', 'msg108': '0913004ba39d9e0212de76e5633ab0928f5e9144b576e7a5a7a0a8e4a8a1d60874d8a5848170e00b', 'msg109': '1290b5d966c6befd7756068024f38449426dd84891d5debaefe283a8cc93d7b1de16640a16e9bfc3', 'mac130': '95f9a1c8', 'msg119': 'f243d53e97fced6ceba738e6ae131b0c09d1ae29748ec05ed7a01bdcefde0856f4b516b779781810', 'msg118': '6f52114d213d8c6b5b0fd976a24554ecc780eb95c6d82370ee725bed4255555c2079f2a620213d3b', 'mac104': '4d2ddecf', 'mac105': '53eaacb4', 'mac106': 'a50987ed', 'mac107': '23c0895b', 'mac100': '547b', 'taglength38': 4, 'mac102': '19b8', 'mac103': '1bfd', 'msg81': '80cdf87476c1dcc6c63a743afc283d6621fe', 'mac108': '90227785', 'mac109': 'e968d7c0', 'key59': '1fb60d614c01f1a5f10457670cd1d7728da8821fbac86bc8', 'key58': '96f81c41d30eb9149a340ff886f0a2296d092b54da31a35a', 'key53': 'da54c77930d6f70a5fea19c9f1ffb0be24717b3d495bf65e', 'key52': '6d1d1f93baecd7465736d4fb6e8f2c084d1d3fd60da88592', 'key51': '7aa21e3ed80c97f689add31cc531e7446065785044e0cd36', 'key50': '0c981ffa492acd03339e19628691bf36faa95900171ed24c', 'key57': '2ab007fb28b3499576b2cebc209d9ceff511a6e130709529', 'key56': '936b6aceaa67f105e46536b1a9f81496c19da1bc2240a915', 'key55': 'dac2e3e6da74f7646cd7c17438c73684ffcf490973a76121', 'key54': '833dc249e1467ed058f7627e831375495357d3f153ad0cd8', 'mac13': '99e82480', 'mac12': 'c43f568b', 'mac11': '3b32fa54', 'mac10': 'a3e5b0b3', 'mac17': '153f70f96e0871c6', 'mac16': 'e1b8ad36e1ea97a9', 'mac15': '77cbeae8', 'mac14': 'e98cccc6', 'mac19': 'b2450e3012f352db', 'mac18': '12f77f2ca8d7007e', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 4, 'taglength111': 4, 'msg103': '4e2cf3e6e83f562e0166c76304b22aac120ccbf5f764f2345c0cb8f13d5e18059ea549a27a3b4b93', 'mac135': 'bb9ea42d', 'key118': 'f7e2aa64f343ca7d7c6a5137a3337a701f8b4f98ef836f65', 'mac134': 'd9de1a1c', 'key143': '1a5215377cdca15233e53ca41204ecabf4b60ceaa3b04cdb', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 4, 'taglength57': 4, 'taglength58': 4, 'msg25': 'e9cb061f251087ee04cf77d759dd6501', 'msg26': '722083489f54fcdc1f616a133ef6112a', 'msg27': '10eda8b255d6097d668f595aaa74d59f', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '10d74f58b89ca190', 'mac112': 'a48a28572dcfdb54', 'msg142': 'be8ebacf75c056a243c153ece1b552991c7fbe3ad0e25c4c13e623bdb17e4dacd967ae71155345dd7f4711c233', 'msg143': '2967ba8ed918a8ff19e1f5624f6053f4d459092f4cb6e8ef33cc81d4b9e095e7d0eacd808398ab678996c1391a', 'msg140': '94e7006e285c45eb0501e3b216e536f7c88c44fd63f3ac399aced9b461147bb1febd389063cb9ef2bb875d1e43', 'msg141': 'c57e7712e10591f000ba796556d5131704bfb45332d5daf35e681a85f30859a91e023fbbdd27e9b259cfde4875', 'mac111': '2eecbcde', 'mac122': 'ad9a', 'mac110': '93ede4a9', 'mac123': '0886', 'mac117': '27a107ce1bec0ea9', 'mac120': '29c9', 'mac116': '2dce8272c4d1883d'} |
dict_cmac_aes256 = {'mac121': '44abd89601654b89', 'mac115': '7c009af7e777c4906b2c7187953a7206', 'mac126': '42e3b8b4737aa56b', 'mac114': '8920b02bc94d71778f69b13a5a55c7e4', 'mac127': '33eaab6d893e4365', 'mac124': '40aa464550ebb302', 'key19': 'b1d677d3b134837c923f96ea97812196e7d1b0af86767b60848f385175b23470', 'key18': 'a284014d8e0fb28257b6f267fc11457fc0e4b1ca7152209af04d05a2ee514250', 'key17': 'ac9649c9b324f213407b35b36a2210fc44b43a156a2b5c5bd95e7e0104c9bff9', 'key16': '765c09d13e1acdceace08e967952ef8e7eb4b4bac9ad7a95f04ba540a5489bdf', 'key15': 'f64b1e5bf3f38c20b8a7a76b44fb0391680aa09fcf6711ed3d57def6143d2866', 'key14': '1d4de41d29cfab1b726cb2b5dcc61c4dd1efc71c3689db769e2ba34fbe079cff', 'key13': '6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2f', 'key12': 'a487afaf744813d262bb43e29633dd54c17225ab68b3fb9c80ee0a703a5743ab', 'key11': '786c394b5b4564e2891eec4b88b8a2e5c612915dd2d5d52ccceeb1611b7ddba1', 'key10': '54c2f556f4cb5ecac9f523f51fb00463e283788255f4fca907acab5804d70fc2', 'mac57': 'e04d7c081856e53cd35783e82c5d', 'mac56': '4687b9c20d1082a2fb7a5424f155', 'mac55': 'a773a0d38bdf9b44', 'mac54': '6be2305c67fdbf73', 'mac53': 'baaecafebb854fd3', 'mac52': 'b9e875ba12e75110', 'mac51': '6de657fd4b42c88a', 'mac50': '4b1c0c10e93baa35', 'mac59': '9377e40c4ea5a2f708efd680554a', 'mac58': '416f01383779c10efeb77f7e4395', 'key119': '0d60f53a5281ff0f35f58cf4277b2cc3ecd1715745cdb141cca907bc1f9f9be4', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '0af2248084617ccde4ad94cb516f74f9a038388f772558b4b2b42df205d6b1e7', 'key81': '6185bf4f51e649ed0c3bf8162c48d1cf7842821cae86465e808b09dfdc15cdac', 'key82': '9cf5998d41e6668c5d8ccaa290d685e7a13dbd361505388b01c0ceaf1c151e18', 'key83': '8f16e010c40d732b37a9019adf12e3e4762c3a30da6a7bb5b4e72c7157b3e81e', 'key84': '030808cd616d9dfe3ad8b7e4332f31382e982bee633bba14b249dffc373db69d', 'key85': '7e3b59b374efb8614c0bb8a10b8f2c89c45060c6bd925bd7cdd8607a08fbbb64', 'key86': 'ab094ba4ae00adebcc08acea1d6db36d0a831c79559550e05a1e2f12943bb236', 'key87': '5e3db1cff43ea25d68c3b194d48a7349063fb5a2df4d0585f9f375508c9a9bcb', 'key88': '0e2abeba4bfcf168adccd5fb7729d013565727b0dcf213f42fd3182b03389208', 'key89': '508d486fe10985e43e00ba36b39845dc32143047ada5b260c482f931a03a26e2', 'taglength141': 16, 'taglength140': 16, 'taglength143': 16, 'taglength142': 16, 'msg60': 'dc5482a7db461bcae7057d0d296046615b7d17b9387ba2c93055040d610a560e', 'msg33': 'a6da842512cd4e2445e71d9977d7f749', 'msg62': '934b8df7d7d04c11c29f6a594a29a16c269a826b82bac5fef711de98ba4fd1fd', 'msg63': '5637a698b08dbc51da52e0c7121f5bf2ff4d3095e85af5c4248de2a4d2dd2872', 'taglength18': 16, 'taglength19': 16, 'msg66': '95f08e57fe357f80d01bf9d5ce6a6c909b4b38291f1227c92c5b3b036158abbf', 'msg67': 'c2c367b688822f88cfb6bcab4ccc1120ccee06747832a6955711d5e4141a368b', 'taglength14': 14, 'taglength15': 14, 'taglength16': 16, 'taglength17': 16, 'taglength10': 14, 'taglength11': 14, 'taglength12': 14, 'taglength13': 14, 'msg30': 'a5ce0308012cd700f8e31a3f5d91c07e', 'key139': 'd5535ddee9d2f03bd8337accd3784cb540fba54502a51bcafa603caacdcf76af', 'key138': '809f9b8a46e4436e4c058fc6cf17ca029599093180b4626662c25961130e9b6b', 'key135': 'fd7d9441500c8e97c3987c562ab571d3da720fbe0f30029d8bb4cd78807ac9d6', 'msg37': '7f93204dbe336c2344c1a0325ceef6d6', 'key137': '71860aeceb2b22c91d74e7d6241bfcb85b222ba17b67a98307789b7de7a8d89a', 'key136': '531bf50182c1ae1ab00f7eb8e87370d01aaf88611bd1ee04ed6650c541eb8131', 'key131': '2f445b03735ab083ba71e4b4fa77c3886d8b7bbfe705990867b63469ec7168e0', 'key130': '8f800f2f958118308137c6f31139e660a048c5e3f9d49f1469c25a93186d7436', 'key133': 'b7c480d4ad53bda100735723c962e6a10ab20169a6426064b16d3eedea8101e3', 'msg36': '1761ce564226f0e401edd3d2b2a873bc', 'msg35': '5cb3a6d84f335865fc6f20e34495fca4', 'msg34': 'f099ee76fa0840e0d957cffc65504d85', 'msg39': 'fa212421cdd1d8fe8bd362f1404f5907', 'taglength48': 8, 'taglength123': 8, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '1a40a8d7476c5196171740372f216a275312c2dd35a3af768a80bd9d634c', 'msg114': '680d41ad012d5d247b5c3b8d7803aa4c575529b5abeaf9d1ebaa775f6bed', 'mac99': '699686cea50dee06', 'mac98': 'a9f9a678160fac47', 'msg111': '414b4055a7b0866513dafd5f481023d958a9400b68c34926b73804e7ddce', 'msg110': '2e35e6b127f2fcd0eb83f4237c708a8c05cbd8c91c63bf48443a883cb639', 'msg113': '8befae5b85a2eed1bf639d319a20c0f8f34fc76a4982cacd223b12d4aa02', 'msg112': '91f7b3a68c0ab245147e70fb67693e208993555c937bc8c64e9bb64d00ed', 'mac93': '531d10fd28933e668465054e00f9be7c', 'mac92': '9083fe4da31d35994e6def6f648a2bd4', 'mac91': '55ccb05f69ef720c7ed870c9505705ee', 'mac90': '33a7aa1fd64348ff69e9969522c82597', 'mac97': 'f27c16e004d8f8ce', 'mac96': 'c0b387da301300d7', 'mac95': '6587c779b5a30b3f8d1ea7c9287e4386', 'mac94': '3252fb1c00350b57574631d6eacc6494', 'key44': '37d66b441eccbdef7ae1482e58b6b756c9eeb3b5efee9e7857e084cc89fe4e44', 'key45': '2178032041668bccad12f9703559c083040e7ef9d354d4c25d4a749313ee7be8', 'key46': '4a41926d25181eded34338ff6ad7b4208355206b33cf55253d4c4c31856e33d6', 'key47': '06d67ac9de840e6fff2a4781cfe0ed767e6cc1daf562109509908770f59849d5', 'key40': '4bf9fa471e51bfd03f02b90482dc82e17e6a8be841d56c2243067861990b95c8', 'key41': '7233e4e8c4e70ce5b2af3df6d09fcb703056698f3083991595a86734de1e57ae', 'key42': 'e8cff94d862a831e0dee6fef169c4beab646f054b0f35710e845ae651b59ab01', 'key43': 'ebbb53e1e7b5d9357c87f56f6157428f2abe079077290ceb6c80ac5c61062ce8', 'msg99': '635b0ae78053700a584b4f58f13b91a12999a038587129a731b820a0e9de', 'mac119': '5b5da918fe09a6aafda4fd46533b885a', 'mac118': 'bf250c3836542d6e8446078a8ca1e200', 'key48': 'c9b80486bd16847ac68f9ceb85528cabdbcedea7507dee5eb100aa98fd719754', 'key49': '99f3f10608ef64b61e7b99cef8d036690e131706b9cef096f3a134d35e3536d4', 'msg98': '5570c96c6aeb66ad9fa56f317c1354349c7721220eb10407fa580a478809', 'msg95': '45f0fcdd9fd89c342fa6fa005db06958adf72e76', 'msg94': '6fd29440530b7c08bad55ee8c9d514e0d42035bc', 'taglength109': 14, 'taglength108': 14, 'taglength101': 8, 'taglength100': 8, 'taglength103': 8, 'taglength102': 8, 'taglength105': 14, 'taglength104': 14, 'taglength107': 14, 'taglength106': 14, 'msg32': '672782cf3bb3041354f3def9820de80e', 'taglength65': 16, 'taglength64': 16, 'taglength67': 16, 'taglength66': 16, 'taglength61': 14, 'taglength60': 14, 'taglength63': 14, 'taglength62': 14, 'msg51': 'd92a5dbe61135ae1edd42c6d81ad23430d1fcb8e9e51c149d6b2c6029ae012dd', 'msg50': '930acf735d0de50f2fe7a72231728f0ad8a1d9e55a1f94546533fa8010e7fd5b', 'msg53': '793be833cb4fcf5a07ca10c09ee84998c59bf7807a7c970fc1080bad340940a8', 'msg52': '7e6ca9cb05e54de9cf60952cf55e86d5c5c8fba316ea99f4d8bf062eef6f565d', 'taglength69': 16, 'taglength68': 16, 'msg57': '986bd949795a98adafdce973709ddc3d6ae4a834b4bb424a05502fc3249b96f3', 'msg56': '16fd869fe842c4febc34e8e7460272a43be2d7adc1b18b6d24d95f49ca780ddf', 'msg31': '60bcf0efd07db7ba4fa49a4a337bc9e0', 'mac125': 'acd1585f139a9ec9', 'mac40': '9f61fdf70147e5bb42342d8174dbe66d', 'mac41': '3b0029736bcd06b13b435d5a366c448c', 'mac42': 'bf7ea202bea7a9a47bb58acd14ec278d', 'mac43': 'd6b61671a73fbcc83b16835aa79eb67b', 'mac44': 'c1bddd0de0f086f5b7d79960b15caf07', 'mac45': '23b23b80b6f8789417e2ffec7589eaa0', 'mac46': '81c44c83ae2ba33d4dd8d9feeaf548c0', 'mac47': '1a289f915605be97f2902d86ff397a47', 'mac48': '50a1666054b34129', 'mac49': '74bf27f528876669', 'mac101': '9c2abc36618834fe', 'mac128': '6eaee10162b6c032ff73de5db55f', 'mac129': 'e4bfd3a4096966c94ca818ed7dc7', 'key79': '18003400cf7a254dc6393862e1240a793d6f4b8db8126670b37a6418167e0d39', 'key78': 'b69c0f337df43e3fcfd360e30af0d93fd821be6c00d9421b82ee7278e2a02355', 'key75': '5948c94ce32dd053b44620d22a482bc3699a486cab5daa86d7aa939f541ac5bd', 'key74': 'f9f8ba65ff0f3ad619bd7595d0fdcc8c391bab87be686b8b2032776abdf3ae94', 'key77': '9eac026e15ce48dd431541c64edd6ef1f3c18b81d5a6791b14fc7c4a2240a622', 'key76': 'ff2488d5b239fe9453fef70910b73e281aa39ce1b3c9930089f54f5242fdda09', 'key71': 'f4892f7d867d92d3405a1928c2917e1eb576d54301a167944094bd40729ffbae', 'key70': '6f5504815d05c8faddfac6ad0506561e9101c3face195208b76a805c5dcf8cce', 'key73': '6aa0da87a1639f5237ffed411b7d3b4299c46218735f52453480042ec145b07a', 'key72': 'b56137119f140ffcc72481fa11b8aef8c9bc62e33726460d737e57d37b9d967d', 'mac35': 'dbc797d48197dea915372bac1102', 'mac34': 'ce8e4d2e2f5c35aefc3afe98b1df', 'mac37': '02825f7c31ac049a60a0c96af50b', 'mac36': '09a315127a024eb3928fd3fedebd', 'mac31': 'b9af365373d40097', 'mac30': '156d09e8bd24ee52', 'mac33': '0a967c30a66ab411855bb15b76e1', 'mac32': '1e605ae41c76f63975a13af55533', 'mac39': 'ecc628a1c7f8f1eec40e16cf0537', 'mac38': 'baf7d89032113456ae6220c4c567', 'taglength130': 14, 'taglength131': 14, 'taglength132': 14, 'taglength133': 14, 'taglength134': 14, 'taglength135': 14, 'taglength136': 16, 'taglength137': 16, 'taglength138': 16, 'taglength139': 16, 'taglength21': 16, 'taglength20': 16, 'taglength23': 16, 'taglength22': 16, 'taglength25': 8, 'taglength24': 8, 'taglength27': 8, 'taglength26': 8, 'taglength29': 8, 'taglength28': 8, 'msg97': '35f1a680f6b682a594ede2b613a17531417423f3df364d6301b656edb8d8', 'msg96': '030808cd616d9dfe3ad8b7e4332f31382e982bee633bba14b249dffc373d', 'msg91': '41e6b3cbf93c7f3f563c76b813cbb864fa9b029d', 'msg90': 'b7a3aae23c58fae59d3794b0b9b3f35e89f07665', 'msg93': '684d0036569d058689def3e338bdd8f6fcbc3509', 'msg92': 'cade88ce60ee26c63f3ac59be31fdf32b14118ef', 'key108': 'e30b5b0859cee72211d09b12540d135aabb64e4a3a31a7214f6107753b2758d5', 'key109': '62400e9d760ae6bb70643dc756d2d884b53663002e4410b1313781c309c2e8b1', 'key100': '0d014e1ff44bb366f7f6d3da5ebadffa7a344682e623203f0dd6cd21ece5d992', 'key101': '684c0616de8ca55fcd9e07a9e0da3c95c08e6688cfe512af190dc9408898e103', 'key102': '14f2047bfdf40c7bf565f06e85ba20914834a84d4cb6b6b1bcd45620bc2c8147', 'key103': 'ef77577c305bfaea230b8a9e1b257c49daed53709b43c40856d218423f8bd3a8', 'key104': 'e56122ad576d1da3fd1b6ee1f27114394f6d233fe6ed164f33cc67d28f4e5dbc', 'key105': 'fbfa68cdc0f5dc849e8dbb2f10217ea99016823665647121bd54fda3fb88d507', 'key106': '7ead616ff7b913121d58439e66f834994ff073aaf3c00cfddc9afde91922ebd0', 'key107': '6fa2441c0dba65c144eb971f9301840227cbd5420a7a0346974b6ac73166a0d6', 'mac132': '438c14e754b1b2be297bcf4d7aaa', 'taglength122': 8, 'mac84': 'a9326ca65d1dfc90bf8c4e20b66c', 'mac85': '17070d93d027c6dab958d2880c44', 'mac86': 'b6505638db30ff08b9a7a80ad921', 'mac87': '40b4b1aea26f9981e3657963b53a', 'mac80': '9bef26cdb665c16c676bfb676357', 'mac81': '53c299c069acd588297149f903fa', 'mac82': '255ed467e76d45c092f099ca48a8', 'mac83': '9342a125f6e561c8672e97e56a9f', 'mac88': 'f5c2ad3e4e084dfd628925f0a2440bfe', 'mac89': '8f209dbe450434a65da95958e72f943a', 'msg120': 'c4371dd8cc322de825d38d42e859cc4dae89ef06565c5d5102f5f88c63d58d6a37526eff0f455d17', 'msg121': 'a475482fc7c663f08aae5b395c6dbe6ee49e0c1e456a1bd8a1fcba40dc349561a2a05945aba818c3', 'msg122': '0dad34dbdde4dd3415b152855b7875f0d80ae66d31c88c12b90c7293e5c4d50500607be71fef4662', 'msg123': '01b820aa77c1ff6295d7b49e0d2eb3d605a47376cba3c2e0c4495bb5a6c6ba51e7062f94769132e8', 'msg124': '9bcc2fd27324c863ec76dd461f83f76d8aeb0d866bfb03766dc670038677a4d020e5ea8f77680a72', 'msg125': 'c949eff99b6625f8fd620806e7a86a84c541415b71f5423c5eb4b12d16357741e6dd75a6d7e218e5', 'msg126': 'e17bae7b92c3ff4b198ccdb0c63504af1a8959ff7d9f951033fe314d8d05249f5c8bf932abc2247b', 'msg127': 'eb3ad6d41883cad1db4c7ae189e70183385e51b7755980053a4263c01aa85e8cbfe17a1e96f4b843', 'msg128': 'f41246343a651d7e352ed363a4c2bc010336e147551aea4c216442e5bbab7576c496dd08f4937d9c', 'msg129': 'f984b890dee1c05d07fcf37cc3b44363c9ba2cf18399a299adf448c31f0fe26fe7920d1c9b892ee8', 'mac7': '8e6c52162d77ff1e', 'mac6': '859a2c3d9b48fa9b', 'mac5': 'a72bb640a8a1fe6b', 'mac4': 'a8cd502d07a74732', 'mac3': 'fee118b1eb09f53b', 'mac2': '6fcda48f51766bc5', 'mac1': 'c6bf4ec40e6a2d3e', 'mac0': '15c7c168be50fc8d', 'mac9': 'eb589b0662b9d9848be18532b191', 'mac8': '1859ce71849ddc3f95eccefb7e37', 'key31': 'f497a9af5ad4e75f55081e7ee9b51ab9e207aab91808fff5f21356ca298bd7cd', 'key30': 'be0a506ef3b5ab88655cffed4da275f9236f617a11955f6fa7b4a110d05b870e', 'key33': '330fd3ea2dba438bb71973558b4a1af62f0c08c7262501516702cb110e9e8678', 'key32': '603a79c864e7898f6df428a1a92b08bb72ca79b8c62b8258f7a43041a3ad2e43', 'key35': '58fb89aa58caf22dd48a5a41f64ae1967d62d355be61cfb4e94728c98ef58b9b', 'key34': 'cf330bacbe5903c6a736e6ed05e8ad4537e14efc85e0dfdd5e1fff22e3ce728a', 'key37': 'aec84854b95cab093b364216e21952f74904713eccb4f5359b6aacc50deece96', 'key36': '92912c081ae0ceb79036e75827466edb9c330e0a21adc1c99a5ea09c0b84fa6b', 'key39': '799b896ea0977b290009b314be8c32c37367f1d68d626971f2d858ece60ec3cb', 'key38': 'f0bbc3629155c23cc1c89d50cefd2580297371d6ba3fd0b37751012935f8a7a5', 'msg59': 'f54f0ba9cc1fe7777b078abe589c85dc194ce4b6db4958506aca969cbc73fa90', 'msg58': 'e5deb26c4d74d1b0daf6061db640d2fb918c9401dcdb5bd23897f9c72e7659ef', 'mac79': 'd07b20ffff5a9e8f', 'mac78': '7920b4b450613eb0', 'mac71': '76bf75642797be0d102709c3f850d29e', 'mac70': 'bef9d6fab1b7ee6c4b8c2570749c4fb2', 'mac73': '10c26ff022a2e686', 'mac72': 'c93bcdc9a0bb5724', 'mac75': '8b8e63383e654676', 'mac74': 'a8c02cc464a73828', 'mac77': '3bf82be6b2ce9c35', 'mac76': '29010d8bf253924a', 'msg61': 'f5500ba3f171a618013c959eb29a6993c3dd81e82baf2ebd5c481431cae5d478', 'msg64': 'e31acf54ca88597567f396832c12310ebd088f725539574e665b32377fd0cfad', 'msg65': '780c980f85fdb81390e048f66814b9bb18469707bfef03cb9c1e63236978587e', 'msg55': 'd1f6f4a4c8331bdb5ff96a4b3833b2d0d036840a5747a102bf5db21013293afc', 'key140': 'c85d5093e54bf3a216e4e6cad34e098288d5c69a98df38cca12293950214c043', 'key141': '74c77dbd896f0db3f487fa8bcd16411e1b564023475dc7f6d1fc739842e837f6', 'key142': 'f340e21036e2f13ce38840cef154352394be39921de7bb5a1b2977d8c7f3f8fe', 'msg54': '5a62bfbb4035fb29d03813bcc3959b8a6f9ab7f33a602f6f54aac68aa60fc82c', 'msg68': '0465b6d4fbee0c3eb12d6e02f012183211e34ddf6edf5ede1a2208cbcfc8024f', 'msg69': 'ded7ad1b6b5eccdd0c103e3442f4398ba5d9a441e1473345ffb5d4e3e6fc4add', 'taglength87': 14, 'taglength86': 14, 'taglength85': 14, 'taglength84': 14, 'taglength83': 14, 'taglength82': 14, 'taglength81': 14, 'taglength80': 14, 'taglength89': 16, 'taglength88': 16, 'taglength78': 8, 'taglength79': 8, 'taglength72': 8, 'taglength73': 8, 'taglength70': 16, 'taglength71': 16, 'taglength76': 8, 'taglength77': 8, 'taglength74': 8, 'taglength75': 8, 'msg48': 'fddd347d26543a66bcd720ab4a585bfd883e08142215d4febb841ab7327f4cf9', 'msg49': 'aa70cb62983bf1a00c9020c8b57220143312324c7c9d983d7f59586608f03ef4', 'msg42': 'c4647bc2fc0fc6419f0872b5156a3fb1', 'msg43': '7a635fb4849cef947c2b1bc50578b999', 'msg40': '805068b580ba28b9e95edcfe38597ea4', 'msg41': '879152e74f8e9c834a73ab5af6170b99', 'msg46': '303e759bfdcb3665b59d0a4634f6c025', 'msg47': '0280f7f05ac772ce11f91c4f541a3bac', 'msg44': '9d514d7b3e03b605936b8ba49cd8ecc8', 'msg45': '9f22b2aaf7e16404daa708789b4aa937', 'key134': 'b2b2a9d3573124b7e324c79a22f6e4cc2e2a7f9540e4bdd8c7ab99f0b76dd9de', 'key132': '8d7e5ae84cacd6a8b7a76c9328f8d0a4847bbdb50614dcdd3e9ee8fc59241094', 'taglength127': 8, 'msg117': 'e319d53a2d253bad257ea0687a32b0f5d84823bf51983f8201e09ffff213', 'taglength126': 8, 'msg116': 'bff6efda837d1e3ec6a4174907fef144b7493f099b46927371c84013d60a', 'mac140': 'e49ffb5e72fd5a1590d94d1a2976a8cc', 'mac141': '4c080c823836d56af4ce2fee762ededf', 'mac142': 'a4794b9335a5952a83113a03b216bdce', 'mac143': 'dd4c68c701db75d7b1ccc640e64a3b9c', 'mac139': '9482b00aa3267505842ae289dc0826ab', 'mac138': 'e972f63557a422eaa2e82f743f298608', 'key68': '0956ac29abe5e2195c8b07addd967bcf3975457e4b28b4d980f54579df5dc804', 'key69': '0b4cdf53e41aae7ed9175eb2ab915ac1b802811b7a88cce75195315282e8c727', 'key66': 'd1c7a48083e10494e90fa382015f23f223e125909cba0ebe9a740b85489852d2', 'key67': '9b7cfd0387a7ee0e039b1f9d2fc7c8572aa023d9275822a0c4ed612998665a56', 'key64': '6d2d93df2ca64999ad59cf6c469449bc5f6f80fe28b035be87ebb5e755eead3f', 'key65': '0ac3cd7cb720c4ac2903b93c727e807c2e13a79771d307cffec8990aba918b8e', 'key62': '72642e20ccef0094f04305bc1251c01f6cfdd2ed3d161a92128c208b44ddb478', 'key63': 'cee9c51ff6ad02098e242158dcc9c8e8dbfbe2caeceaf144c8b7a518b9d7ad09', 'key60': '1d53c4a5187084603280775df92aba11a2204667fb477c05a11800d07346cbb2', 'key61': 'c0fd8a84683399851a3e56f610bfef1a13aa9433edef8a45205a7b1cd8b71190', 'mac26': '6fd7dc05693342df', 'mac27': '4abcc5b36bec6b30', 'mac24': 'a918731cbd90df99', 'mac25': 'eba1c77a5866f85f', 'mac22': 'd2df5aceb95eee68c539dd9133550448', 'mac23': '3547210f0075ead782019e4282277d40', 'mac20': '1406c02c53b10443f2f6dda9f947c74f', 'mac21': '011a3ea790765c0fdbef0175e5fbbeb6', 'mac28': 'a4ca0eaaea750a51', 'mac29': '0ef4a96eae0ac075', 'taglength6': 8, 'taglength7': 8, 'taglength4': 8, 'taglength5': 8, 'taglength2': 8, 'taglength3': 8, 'taglength0': 8, 'taglength1': 8, 'taglength129': 14, 'taglength128': 14, 'taglength8': 14, 'taglength9': 14, 'taglength36': 14, 'taglength37': 14, 'taglength34': 14, 'taglength35': 14, 'taglength32': 14, 'taglength33': 14, 'taglength30': 8, 'taglength31': 8, 'msg86': 'b67b3361830adbab28d788aa5223825e938d02e9', 'msg87': 'ee39920d794f705057fdc8630d4cceb71b46b3cf', 'msg84': '4f02445e9f9b1e259137336a71c24e1d87351a90', 'msg85': '8fb34ca1b3fe8bcdbb81710e5caef888fede6975', 'msg82': '053ef4a0662371eb7f27b27b18c6da358cbb435f', 'msg83': 'e9d78d17e4f15d8b1cc899d7763fe5224dd514ff', 'msg80': '80d1e5c24fec371d8a99578c10c9bfb0d13f728e', 'taglength39': 14, 'taglength43': 16, 'taglength42': 16, 'taglength41': 16, 'taglength40': 16, 'taglength47': 16, 'taglength46': 16, 'taglength45': 16, 'taglength44': 16, 'taglength49': 8, 'msg38': '0db31463cb84b779d5c5172d78dc14b4', 'mac133': '714fe23cf15667648a3a248da6bb', 'key9': '112686b9955219f92dc84127f2cc80cd18504d95736bba5b3a0654860cd94b99', 'key8': '8c04c43d195cff03a276d5546f0776b2d1af54d8632c849390ce67d3552a8902', 'key3': '09caadfecc135c926f4c89c5eae003f8a9d5c31485f77dcaf43375207c419429', 'key2': '67b480f440d8493bc86767c1cfc2449d244c4bdcab299d6bb04506377b982f92', 'key1': '45f0fcdd9fd89c342fa6fa005db06958adf72e7643a12cc9a6a9c145c4d5ebfe', 'key0': '054c6ed23a79c57793d6b6d13eeb77d0b94d18d53773081f45c5dc85adf64c6b', 'key7': '5f8311e89000a73e886bb27deb241eb12146ab6d068a40c8e36983a69e81a639', 'key6': '357cb06be56649df0cac89285892b5465ab6065b3bf100b2ab7eff011b5e13eb', 'key5': 'b7a4a4fcdabc18addfac8acb6b9373776fb0e21707bd7c4ca27ec12564999192', 'key4': 'aa803acd8206c31a1cf30674e45ad929819341f54ce08ac9075097cacce4769d', 'mac137': 'cec625f246e4d7b664617022cb0fba3a', 'mac136': '823cb1f00d96f3e8460051985a286015', 'msg139': '19cafe7bed47d648c5458d4a8bd1938050879e189e9d9e900923f41b0888de46036136dbad665d05', 'msg138': '416736b9505d2f7c3c37050b94595c0fb1cce9f5969179e71b3535fb4ba624aa0a45f183fb3cef20', 'msg137': 'c61ae3a8aaa3e9f1fe5cdef979734403e2e04566c748028d722229431918c52d55b05b98d52b3276', 'msg136': 'b7f3d7d2a0e6336141533d930251bfd5256a2f93fbfa87b558d8516a44380124f3d088e4f83a26b7', 'msg135': '1e2b08510a9389e6443bcf9bc9fbe0b4e2c96d67f8384c85a93f295d1c3c78de9138adfb3c6db054', 'msg134': '3b3d55a22ab949d2baea5028b545a34e2c62014f0e47edfdfae9169052f0178f91bb60f4dea4748b', 'msg133': 'ae6c9467bd3f5b9005578113d617eb174b79bbffc5b16a37970d162d03201d9d661fea12af8b0faa', 'msg132': '4fe35bc6bc26387ee6f03d87c2b814b663909940b60533c46f47658c438aa01058ab5cbbfa1767f2', 'msg131': '95c2316ece58e62756e51461a159f92c0ee613e31d61edb0ddea3a52a3cf201e01aed644f6da7154', 'msg130': '9fa32eb2eb66320900178ee7ceb8cefb570f33d008a7a9f54918f95b538840fe4172a0c76aa635b1', 'key22': 'e00018d73a216a057d262b90b347c605bd2b53f08b51685a93b0328f7b9ac425', 'key23': '0639075867a556f43693c448aa27733432e86216c5c454ee73550dc04162c43a', 'key20': '0280f010d2d8d2f4cc39078aabfcd70d8a69bd1c5e270dc8c4f7d9ecfda316bd', 'key21': '582dd3e260d2e7dc121e230738fcd644ba093cb3ccf54f31662be11ff4b4e866', 'key26': '5a5dd84deff840ab5299442f57127dde832aa45a7942a6acb639fb407e8e3431', 'key27': 'b8ebf75566a0dcdb75d4622931f257a2001576e498713b4e6feff6c073171fa1', 'key24': 'b3ce985777ef2cf5c6c1bb80c621b963c37cf70123ed2ff89ca5dea7a49051ee', 'key25': '0a739baccba4ea574027fb9381c25067cec7bde92e3126fa55ef8a30cb804014', 'key28': 'a6db7e3faf306ceb875c14b529b87862d5d7f0bcc1687c920c5e5901f34fd2f2', 'key29': '021d638149b78a6f95d08bc3d0b6514fd5ec1ce08ec6c9705932549cb1d99b58', 'mac68': '99230ff6848d9428e7d9003b35ad20b0', 'mac69': '24e2cbd2f1c938d4b1a309e1d6366f47', 'mac62': '812b330fe07c98093b4a592173b9', 'mac63': 'edb11de267d20263b94eca2168ef', 'mac60': '8250c84156099a89c26532e3a228', 'mac61': '95dc0b2e8674efa5fc84d5363fab', 'mac66': '82fa66f5430ec574b9b1d95b089e360f', 'mac67': '056a6e9626033934b5aaac8dd4c66f0d', 'mac64': '2e7886c3329a325c9b35744045f3e8f3', 'mac65': '4e4ccec8e3411eb961ee614778464433', 'key97': '4745ca6ddac1f64e5447ccd3ef350466c15cf9879b56aebf32190fd57ccd7a45', 'key96': '497bb641df76c93a9996c769d4cbad63207f11f959266469131774d53b9a34f3', 'key95': 'a30a1ff07e415fc585e0aba6d2641e917e53b3e972c5b61a7a23787b9c2f4778', 'key94': '220208365d8234ead3a6765b1e32d28a055bf67f467e1d9893123320dadc3a23', 'key93': 'acb625a087bc97076142020bc9f08226dfb6596709b14073e84efbca8bb1304b', 'key92': '6b4bc14f3e574cde494f562b643f09c9a376c8a020391340fab9ab769d42f71d', 'key91': '44775f52e59925b6d4b54ffbfba1abc73559941a55f417de69d654bf4026263c', 'key90': 'c38b371ce499021a06180f97eb9b355750b3501b0bb6f17d56bf531b6bf691f7', 'key99': '95f188719b999e471190eff07f4beda8800ba4db23b33f9590d6ce3aef154677', 'key98': '3935c7b37a32cede750645e656bd516c0335ab55a28d47d85bdb33d55f1dc169', 'msg28': '18003400cf7a254dc6393862e1240a79', 'msg29': 'eabf402fc0e0348b40e6d8c176f8c4da', 'taglength94': 16, 'taglength95': 16, 'taglength96': 8, 'taglength97': 8, 'taglength90': 16, 'taglength91': 16, 'taglength92': 16, 'taglength93': 16, 'taglength98': 8, 'taglength99': 8, 'msg24': 'b52feedf70b95cac035bae537508d492', 'taglength59': 14, 'msg77': '6f22c70f3e88565da3b01b91ba9144f6346b1f69', 'msg76': '97d6475b176e79172c8e36c2c245e677992365ed', 'msg75': '91a880d1c6df9791b1d8bd33d0abf3c2d2da08e0', 'msg74': '35d0c9aefccc1f11edf10b7d5bd41e50fce0666f', 'msg73': '137c543f1be0f0545ed328bc384de44a80d95309', 'msg72': 'a9d459eb46aef8c6c92ea76fe9b78b89912070ba', 'msg71': '34848a0d716a41eb0d3545ec27d7d42311a8f259044fb80d12e6efb95d59dd57', 'msg70': '969b751ac17cebad68a06c9f712b1fce4f8f3ae31a52be31e51262e04cc6cc4a', 'taglength121': 8, 'msg79': 'bb495aaa24a3cf032f8468c57d1871a0559b03d2', 'msg78': '71f712ad48a2bfda688b68f225871f103b30a053', 'taglength120': 8, 'key128': '78ba7206840b60cfab50a9f76d966c2b970b7226c371c9ca1ecdae6f6e5fb17b', 'key129': '2638ae370ea82c98a010d5353a29122a9b8aaa6cf26f7eac3ab8787fca35bebb', 'key126': '6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2f', 'key127': '8561469c3979a2dbc538756c2ee40061d5a7d3d6ed35e2be32aedbe2d8c6b726', 'key124': 'ea1ee750f8c5c293f8af86fbe5bb2ceca30bd94b93500ee465481e092d85e67c', 'key125': 'dd8d61ae1cc32b46ae3e65da71b8f19084220790fd8d870bda4a8d7c3b50462d', 'key122': '8d5004e47e6c1e87fcfd90044906dc2713562cbd00c28af88ab253150ddfe93b', 'key123': 'c63cb99441f16b4de7cdab4de3201cfe0c356d9bbad4d3ddd80bb7d83b2fac1f', 'key120': '4da1eedb807e2fcdcf6835b668de4f37bd9c190be66efd854047fb3a5b8da6fb', 'key121': '34a272a555de2691b87c3acfd6e10f8a354c73a93a5f18663fdb443ce5abcb07', 'key110': '3ddb7c5bea6c43d54c122ec1c33f334c94b2694131a66cdbbb4903d7c56f00cc', 'taglength125': 8, 'taglength124': 8, 'key117': 'e04d5778c583482b5ee2f121e7441032a864c807784d442b80129d6541c0fe46', 'key116': 'd6ca073568492a2ab03a389ad1c60714ed18663ce810011d6e3c85c1370404ff', 'key115': 'cd3de43cbb5437b53a5fc253e1267a48ec88108f3b6f197d9e036b994f1ecaad', 'key114': '72f132255a02e595a877a2490823814c6aff21089d72e4ad20cf5cd73520006b', 'key113': '387a7284cd209037cc1deb6f8415e619027099f2d70abee51b2cce94b1bc6735', 'mac131': 'f1a89f0f8f21243059371e359b32', 'key112': 'f193070e8379c6c2d483f68e9fcf4b22691c98d6b830a03480782ab6deef53d0', 'msg106': '31b61811f453d07b49e4b44f8a2618e5c0d45c6d7228638bbba046459ffe', 'msg107': 'a2d047cfa06030817c32ccbdd92cf34a70ee5760a912b90c6cb25dd5342b', 'msg104': '112686b9955219f92dc84127f2cc80cd18504d95736bba5b3a0654860cd9', 'msg105': 'c61ae3a8aaa3e9f1fe5cdef979734403e2e04566c748028d722229431918', 'msg102': '5b8b35371ed5d904ccce29a38423f0420f8fc8a07bf4e0c505aafdf13d16', 'msg88': '8c655e9867b50af956f465e4e78dfc3ebaaa1daf', 'msg100': 'c794803365e2616f594d89fdda8201945a7edfc2b5f51878aff596c99dc7', 'msg101': '587ff9eb62c43e20f7afc205327b22d43b436194c8738a32e47d96d3f0cd', 'key111': '93ede0f617fd1e30c515a85a3349d5bb99bec44828b14cc79dba36341552aa64', 'msg89': '35cfd0945f680049ac7c1461a9f49d371720fabd', 'msg108': 'c741600aebdfa904b97dfdc4892018a29d14eb60043c9c18bfa6cd722362', 'msg109': '1dc0e0189cbcc61ab9381427e6f45c20d3ec7701d62d115b90e86804cec5', 'mac130': '10b1720fa8a0260a38c76f6b5773', 'msg119': '93677d7bf78e544fa63b5e3fef557703bbedfad665c3381ecc0c224fa772', 'msg118': 'f3f84ae5556e51cfd47cccb46357e89c3a6541417b53a7c31562229de801', 'mac104': '59cb9988538d0c8df03acc76412f', 'mac105': '3ce5ff543c5fcdb0ee5fad88d4db', 'mac106': 'b70e61dcc75defd65e125ea7d42a', 'mac107': '02f93dda45051f1f25113f9c4323', 'mac100': '8062afec7d2c3b2f', 'taglength38': 14, 'mac102': 'a9d892cd9e218317', 'mac103': 'cba38d4063f177da', 'msg81': '9c326bc3e27d71382de4aa8795ec15ff3ff422a3', 'mac108': '75f3ee7c3e9d20c45d81fcfcbfc7', 'mac109': 'e624f239d65fd351bc5f7079a322', 'key59': 'bd8fb3e91324756985364a089296d3b202402aecd48374187862b5f43e3be965', 'key58': 'ad746d036f96113d8c1548b8fe59efababfd442fdd75f8fef1f4857a538cc1f1', 'key53': '5669e9ea56f8cec8595c9fa805b1d0b821b405a5fa8e8e0c05ed2d32c55920f4', 'key52': 'b5100b28153317df9dd4cd366e1cfec983b00b83efe34e6c662ab5c1ffd0b04a', 'key51': '0f93eddff61dd7cc71258f734f52efd7d6e21432abf661e7f230c7b8b5804439', 'key50': '2d8eec3d3dd6ecfa165d64abee515a9802c819262c046f44b8f6190574027c8e', 'key57': 'c81e8b2909edaa67c4a21aae6b7777391f9c88c773e51fef73c041b4e5698759', 'key56': 'e1e8d0cf9efee1dee6047e3f5b1d095c0f27bb18a44ae807b1d185de6839e728', 'key55': '02a5b930a5ed90df3794c215786ab0397f3ebdb759f50db0f3d98df039333320', 'key54': '890be89282de732860a4429aaf08648b1566d4d988304f23bf906389e64ec9b3', 'mac13': 'afb96c5f9090007f504b1b91eb4c', 'mac12': '06e51e4fd1a7f533a84c4a9c41dc', 'mac11': '738982769bf59c8520ea165009a2', 'mac10': '8c70553a37daeb4102fb01016992', 'mac17': 'c248d65eff12ca53f340153a1b354ce2', 'mac16': 'ee0d83bf573b02e5331f2efd571e5f5e', 'mac15': '336fe8f15fc7bab705dbf8dcf962', 'mac14': 'd1a5136bac2e78710b124015722f', 'mac19': '03376c9f4455b6cd89a793dbfdb5cdff', 'mac18': '5e99a7dd94f36b02a46732600d0ffdc6', 'taglength118': 16, 'taglength119': 16, 'taglength116': 16, 'taglength117': 16, 'taglength114': 16, 'taglength115': 16, 'taglength112': 16, 'taglength113': 16, 'taglength110': 14, 'taglength111': 14, 'msg103': '437b46c036d6e03353551e886725c97321caa8b21611a0a007461e0867a8', 'mac135': '33717ec8261edc97b24cc5d6dfa7', 'key118': '171688cf5527308662a6035c308baaa8c984a832e73d8c97bedf6bef1dd78dac', 'mac134': '34a1affaceb67801c167ddc2d183', 'key143': '37a614462c39462f380162be20c7de22ad37858b9a367727b176715030474e04', 'taglength50': 8, 'taglength51': 8, 'taglength52': 8, 'taglength53': 8, 'taglength54': 8, 'taglength55': 8, 'taglength56': 14, 'taglength57': 14, 'taglength58': 14, 'msg25': 'fe56d107e093b1e417c8cbafac67188e', 'msg26': '20bea13184760d727aa9776f12778cf2', 'msg27': 'c48551b46d0a89fc01443529251a32f4', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': 'ba8b54bdedc98e14ffac361c04ab29f1', 'mac112': '322e9d6013e4975939ec95ce9a4d6197', 'msg142': 'e0d2c1d36de0b2e5c27c5001d455d3894b06c2f886ff1775dfc39ea830559ecc96ecbb0574ee1bf4', 'msg143': '3f700f4f2706a4ca492ad7911799455bbbe10e57febbdd1a689a22dca884a2e5372132423912bfbc', 'msg140': '15c0bb49cf99592b319b1cc8ea0a462b61fca2beefbd5fc84d711e3548fb4a96bc1ea868bfe22f99', 'msg141': '3292490cc0a230571ffdf0df6f98bfd2b1bfc7847bfc7a6ff03a2679f02ac9758ce626ebbdd5181c', 'mac111': '3275f4e7ee4b762fbd961134f497', 'mac122': '828ac98b94d0ec95', 'mac110': '480fe7525bf1c14ae2a23c8222fc', 'mac123': 'f12aecc1b62e2e6a', 'mac117': 'cf9f5d6ddcaa29e11bbdd951efbcee2e', 'mac120': 'e872c3846973d9c8', 'mac116': '7ebfddfb2985b4908dc7ef33eb22998c'} |
dict_cmac_tdes2 = {'mac121': '9524', 'mac115': '0fd74e2129110ae8', 'mac126': '7b83', 'mac114': '0ec0bef1953be953', 'mac127': '08e7', 'mac124': '352b', 'key19': '045ed0735e0dd58079adf1f429c76d6b', 'key18': '0d92388cf8ec138551b9ad454c2f40d5', 'key17': '73e0bfdfc2f4b5a1a746a77ff8b57016', 'key16': 'd5a489c873b3e958c420c22abf9783d6', 'key15': 'b6923797cb9d8692a779e9cbc473432f', 'key14': '8f7a68b9ea92da791683ab263b105279', 'key13': 'd5e63b8502e9cd494fe554e0588a5746', 'key12': '51b9ad3e7383017579bc643bbfd39d5e', 'key11': '7c45324a4c982cae40e5bf92e3c70151', 'key10': '10ecae98b673eab6ea323b2558200d2a', 'mac57': '03e8e448', 'mac56': '090b31db', 'mac55': '3b1b', 'mac54': '3d42', 'mac53': '09c3', 'mac52': '8015', 'mac51': 'f51b', 'mac50': 'c3ec', 'mac59': '0b8d61b8', 'mac58': '1d62c5c9', 'key119': '8f255b439864c7b68ff4043ecb251097', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '7594386be302fb3ddf751aad5b4fe57f', 'key81': 'd5921c683d40989de938238cceae8649', 'key82': '085d918a46c71ad93e1a40cba179cd6e', 'key83': '38453bfeecec403120896ba4c8977c0d', 'key84': 'f829049d07162f852f70bfd304d32a15', 'key85': '6b5494078f13205220f8794c89a8fb57', 'key86': 'a81904bc9b9dba1fc15e1ffe2f9e04a2', 'key87': '49a8190b9740026d6210c4619254b0ad', 'key88': '3bbfd3a81f3d16d6e0a41f100ec7fdef', 'key89': '0b7c2f704fbf85643d45f14c0e6ec419', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': '2e4b35a5005ea78fbcfba078c9bbe266', 'msg33': '54b66e5e36ea882d', 'msg62': 'f88e9126b68a36ab14f0c40246f42caf', 'msg63': '594abc85f9a24e41b0fb0228340b473d', 'taglength18': 8, 'taglength19': 8, 'msg66': 'a03caefadcd82fb33b590f28dcb57d9d', 'msg67': '02558d41415f57639379193230cce4c2', 'taglength14': 4, 'taglength15': 4, 'taglength16': 8, 'taglength17': 8, 'taglength10': 4, 'taglength11': 4, 'taglength12': 4, 'taglength13': 4, 'msg30': '44568380ecafc222', 'key139': 'e9d68f1cbf9e9eea6eeadc49ef2f042f', 'key138': '2f25736b91e5cbdc5129bae632977fbf', 'key135': '2cd3970e91c4ae5251499e9d8f1cc28a', 'msg37': '2d115c84227d794c', 'key137': '26549eba2f6734d6103ed5a2b96243f8', 'key136': '4a6b02087ac85de0cd7515dc3beaa483', 'key131': 'b52567dcfd7c02516240157ffef88694', 'key130': '7916192c979d2f3737e6d9b008988f68', 'key133': 'bf2640f7ef20f426329dd00e32df89b3', 'msg36': '538b0a88c9c4cc3c', 'msg35': 'eebc024e8348bc43', 'msg34': '47e336f8ef04cc90', 'msg39': '7251cc80a75bf18b', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '7b7b62eacb2f9b7c9c682c5a95020de6a10e9f4f42d29db628', 'msg114': '3b189362e0922bc0944faa6290f42dc1fb5d32345f3faab65a', 'mac99': '9f22', 'mac98': '0bcd', 'msg111': 'b21eca26636c064baf9c7829b7dde97923c7e1ae678f10ce44', 'msg110': '14766edc7fffb895d3c9436d18cdfd304145050d0b03b38e28', 'msg113': '16a9667b49ec4ef3952e52cd9ba3a5fbd4e74519c09239a141', 'msg112': 'b198ac84723a59098172c0eae18b10666459df8f661c7a4eba', 'mac93': '5708d5cf3014b1c6', 'mac92': '787b6e155c8ab924', 'mac91': '2f34568319d18a67', 'mac90': '89259115b55f1974', 'mac97': '444b', 'mac96': 'cd15', 'mac95': '7e233f570a847e1f', 'mac94': '47229b262b054e72', 'key44': '5e45469e2ab3bf2a7a1332c4200eb519', 'key45': 'c773ab46ce94df13add31a042f683e1f', 'key46': '2f25736b91e5cbdc5129bae632977fbf', 'key47': '4a7c6b834f9dcb625d3229cb80024901', 'key40': '29fb9834f231850d701fcefb7ad379f4', 'key41': '759820d93440b5b925f834800dc85e76', 'key42': '07380d38ef94f7cdbcd364a1c8ae19fb', 'key43': '9e29922c0bd5fdeaea5bb98c75080e9e', 'msg99': 'ce19153c6151d8f18a44f3026c9a3d7e32e1df75f5dd5af4e0', 'mac119': '7245be79b6252729', 'mac118': '544835a10384b97e', 'key48': '7f3d52ce1352d62923649da46e921c49', 'key49': '89fb7a269813a1ae252c2c19fd08b575', 'msg98': '786a3f31bee1451a48a9f62fd6d721cce15225aace34be6068', 'msg95': 'fe0d7fba090a6f757436dd90320c6bf41b', 'msg94': 'b7556b478ca35d1f3746c33e2bb7c47af4', 'taglength109': 4, 'taglength108': 4, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 4, 'taglength104': 4, 'taglength107': 4, 'taglength106': 4, 'msg32': '560b42c91e1441c0', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 4, 'taglength60': 4, 'taglength63': 4, 'taglength62': 4, 'msg51': '51489e9d8e1cc38be7e914ad8640b12f', 'msg50': 'f6a7d248ef10dd99ed87686e4ffe6a72', 'msg53': '9f95b486f1bd1fdc66337fb04e954da8', 'msg52': '9b7ff037c26f2b9d85850cd49188c988', 'taglength69': 8, 'taglength68': 8, 'msg57': 'ec6734c3220da489cf4c54745cfa902f', 'msg56': '1a1fd2e6d6718edbb4db7dc31f7176e5', 'msg31': 'f17618903d6800e3', 'mac125': 'd85f', 'mac40': '3a1e35116910c475', 'mac41': 'bad444627298c5db', 'mac42': '8fa6147e325e0b20', 'mac43': '6ecf3872ed9721f3', 'mac44': '60540fe5902a1820', 'mac45': '4e81e4a969345ddb', 'mac46': '5df42c2d559719eb', 'mac47': 'c5f11ecd2a010170', 'mac48': '7391', 'mac49': 'ec5b', 'mac101': 'fbb1', 'mac128': 'b7b0e897', 'mac129': 'a2417fc3', 'key79': '16762325c8d3fb1c0ec72a4a3bec080b', 'key78': 'b37f6480b0c41340fddf26b0611c76f4', 'key75': '10e9c14adf46915e195edc26e00df4b5', 'key74': '80c719ec86200280836b1f3210231629', 'key77': 'bc94a13113a28f61511c40ae8592e9d3', 'key76': '497abc264313ab73383e9b68cbeca252', 'key71': 'c71010ec803bd31c92ae1a8085435237', 'key70': 'd35e2aa8fd43a2192a5ee0ec4c15b0f2', 'key73': '267a61f49edf1089a4072cc21f266294', 'key72': '80e9efd91f6e85dc1c64320b268f157a', 'mac35': 'de9ec742', 'mac34': '6bde69bf', 'mac37': 'd1362d7d', 'mac36': '491ecf23', 'mac31': 'c5f1', 'mac30': '5df4', 'mac33': 'ed2440d7', 'mac32': '6ceb6f93', 'mac39': '701e99f2', 'mac38': '3638fea0', 'taglength130': 4, 'taglength131': 4, 'taglength132': 4, 'taglength133': 4, 'taglength134': 4, 'taglength135': 4, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': 'b5908835e46526433d0e48c4478c3ed67610c15cf1b3da5198', 'msg96': 'f17a05de16935b392e10da19b546131edb7ac75192a49f0ae5', 'msg91': 'd214e3220e44e2bac9cb6913355c6c1f0f', 'msg90': '60f1277b8c5e471fca623b812fd05b218d', 'msg93': 'ef6302a3f5536df39408d4667fbaa488a0', 'msg92': '309195c476cdedcf566d96808657a91695', 'key108': 'ab407a452c971ab9f8387308f1e301fe', 'key109': '9e4c6713c7753de62fe0c794624ac725', 'key100': '200158ce9d9d923dc76d0e923485e30d', 'key101': '5b9215b932c870e98c73d9cb3b0d5e85', 'key102': '1fb02cd95e611961733b79b320aee652', 'key103': 'ba40c4e0c7daf494e589e5e0ec38b9f7', 'key104': '7f67bc7c2cbaf292f2a17c64ab8fbad3', 'key105': '6b2fd3c745ec0240dfe3341904ece5d9', 'key106': '5dc4153e5e52ea804a134349e0c70797', 'key107': '2f208cfd3ea80e5e493bfe9deca20210', 'mac132': 'ea082ac1', 'taglength122': 2, 'mac84': 'ecb4ad5c', 'mac85': 'f4158065', 'mac86': '48b9a0b5', 'mac87': '612be96d', 'mac80': 'fa460dfd', 'mac81': '2b3ab4ea', 'mac82': '24855f5f', 'mac83': '4deee7dd', 'mac88': '49a6988d0e1af21a', 'mac89': '47e7d2809ac66abf', 'msg120': 'c33ef77a593624f4265c4906b69eeb2b657bdb041fbb15ab695de845a5d1', 'msg121': '22659ca56e921d494fcf07e7a196bde77ea8c83a61a51f918bdaa5cda65a', 'msg122': 'e06f2d645cd1ca874653bf7551f1e82cd2b8f03c6ad9157ce6fc2bfa63d6', 'msg123': '27e58f136e53b58d7a0b3f1b8fca4482348f19d9f1502de058eb3093425f', 'msg124': '2669f974f15e61a65870931a22dd22212d9f7698b09c2abdc41eb2412382', 'msg125': 'f8ddc4fc7cb4515f779677caddb2770d89899fcedf001036b0b3c5ea5d8d', 'msg126': '2d0e694fe6b63cbd3162d5586cc3b5ed4a9732cedf6f25bdf7b6e40cacef', 'msg127': '31765a889fe428193b61fcf8cb6dea3b1c6d4f1999f3084f1b40e1c10307', 'msg128': '85f137f579652491bb96eb6cde595e21d95ac9d70a0d1ed07be74f3f63cd', 'msg129': '8d40957895a04c0eeb99aa581a1f2212c5d51c14307f986c03ba15b04aeb', 'mac7': '9ef5', 'mac6': '5ab1', 'mac5': 'fa8e', 'mac4': '778b', 'mac3': '20fd', 'mac2': 'f59d', 'mac1': 'bd6f', 'mac0': '58e0', 'mac9': '282bfa31', 'mac8': '6108ab6e', 'key31': '4a7c6b834f9dcb625d3229cb80024901', 'key30': '2f25736b91e5cbdc5129bae632977fbf', 'key33': 'b9857c79045438017586c419979d468a', 'key32': '7f3d52ce1352d62923649da46e921c49', 'key35': 'f7f40d0419d6d986408a04b9ab618f40', 'key34': 'f26e380e297568fd5e681598ab08da8f', 'key37': '290720328abf9d08d691dc7a4a4f9e97', 'key36': '64e615d94ab079a21fbcf2cbc2916bc2', 'key39': 'b9eaf75467a1dcda73fbba2fa7ec7f51', 'key38': '4915347c1a8f45265de6ea2af49e6bdc', 'msg59': 'ecb1802b98fb04c0b35338af8734bde2', 'msg58': '135e6ba7386b0badb38c33d98943aae3', 'mac79': 'd751', 'mac78': 'e34d', 'mac71': '7f4606909a3512b0', 'mac70': 'e1f597d392ed91e3', 'mac73': '57c1', 'mac72': '0ec4', 'mac75': '8543', 'mac74': 'b21d', 'mac77': '4e0e', 'mac76': 'c0b7', 'msg61': 'b6b8ffb69db3467db36f54c9af1cafd6', 'msg64': 'a5af1a701db8f25a4e9c255dad878517', 'msg65': '73ea52a3450f4db0622dd2c091c1fdd0', 'msg55': 'c0fe84a4e045f8acd57e413168a18b7c', 'key140': 'e60729ec04c1f1ea4c15f1b0a1ada846', 'key141': '0e08e3ef2cc1ce324f0e0b4f04cb7086', 'key142': 'da5d5d438c9dd3763b9dfdbf89f1947a', 'msg54': '5a6e46b3fe16d1c6e83135bce0f71baa', 'msg68': '75bf9d404f2ab62d28091f21fcb6d9eb', 'msg69': 'baf198eb89a07aba02c49fda2ed4efa8', 'taglength87': 4, 'taglength86': 4, 'taglength85': 4, 'taglength84': 4, 'taglength83': 4, 'taglength82': 4, 'taglength81': 4, 'taglength80': 4, 'taglength89': 8, 'taglength88': 8, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 8, 'taglength71': 8, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': '560b42c91e1441c0a192f16f96ee68a6', 'msg49': '1452a5b7d33cb84beea394c3a55d09bb', 'msg42': 'bcd26b81519cb9d4', 'msg43': '2fd25348f19054d1', 'msg40': 'e3cb9c7e045e3ec0', 'msg41': '2669f974f15e61a6', 'msg46': '44568380ecafc222', 'msg47': 'f17618903d6800e3', 'msg44': '6dd1d912a79b5847', 'msg45': '77a6563e8eb56e65', 'key134': '265797d5cbcb529d087c7543a24c61a4', 'key132': 'c70b753dc1d9167640799d38fddfdf5e', 'taglength127': 2, 'msg117': 'fbbd97971f5ed1d9ce35db4a0c0bee91f25f1cc849ab87db57', 'taglength126': 2, 'msg116': '333e2aeefbfafbab73c34fe46a3b0e72a03299bf2c7753361b', 'mac140': '562ccf185cd9850a', 'mac141': 'fa8dd292219d0a60', 'mac142': '3642773f3252bafa', 'mac143': '2dea013484637b6f', 'mac139': '68f7b8234e2ccd7b', 'mac138': '0a2ad3d6fe3cc833', 'key68': 'c170867fda20b3851352ea8926cb948a', 'key69': '40238ae023c22ac443bc0b253886e60e', 'key66': '8aaef1d90be086cee5c4bcfdf16ba7da', 'key67': '64f197fd37fe3126fdf868d39ba21fe5', 'key64': '9ee5e65bb9e63b918c298c62c41ffe4c', 'key65': 'c8577010d0585bbcec4afe6daec1c10b', 'key62': '4332f852e63b3e9d3b579da4ea2f919b', 'key63': '15ae52c4466b68ea6d86986b438a38c2', 'key60': '1c831aa8e5b03d8086044cdce9cd7623', 'key61': '9186a4fecdf734fdb6f4cb0db65bb051', 'mac26': 'f22f', 'mac27': '1e80', 'mac24': 'c002', 'mac25': '6aa7', 'mac22': '194fe9b595b1c4da', 'mac23': '08c856e5e71866b6', 'mac20': '98512d2bfd2a96fa', 'mac21': '0bc415f7d140b4e1', 'mac28': '4769', 'mac29': '9462', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 4, 'taglength128': 4, 'taglength8': 4, 'taglength9': 4, 'taglength36': 4, 'taglength37': 4, 'taglength34': 4, 'taglength35': 4, 'taglength32': 4, 'taglength33': 4, 'taglength30': 2, 'taglength31': 2, 'msg86': 'b1192991416c686c22ac3b78b9fb507257', 'msg87': '8c29867d63821d14c8117b1a9457ec3f02', 'msg84': '9f12443f0d16928ac94322cc6c62f0226d', 'msg85': '20ab40915fe3fe69e75ba48c80ced2ac62', 'msg82': 'e6fc9b090a96f8b6ff08f01f0c4c28ab0b', 'msg83': 'cd42caaa0c91f232b9fe91e04da998f4d7', 'msg80': '3d6e5a07de316242809a7d312e582e9f9f', 'taglength39': 4, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 2, 'msg38': 'f87f17fabce1237e', 'mac133': 'd5d51050', 'key9': 'e60eb6d001ecea204c0d102f8cb91061', 'key8': 'bfc4a4a27a752a8f3bfba4e59b8364e0', 'key3': 'd33e4fd602583e83976d19376d4c92b5', 'key2': '7c0275c7d0d6c7ad97f7232634ab9b4c', 'key1': 'e552ae5b0b0468f116791c4540e55b45', 'key0': 'a20b1ff17f405ec4a7c23738150ee5c4', 'key7': '6d318032df7fe64f1aa149131cb5fd64', 'key6': '865773e5e9bfcd6726452f4f459b615d', 'key5': 'e3d07c07f2fe19048098ba0258456b29', 'key4': '670898317c91dc0d08aeb69449b9731c', 'mac137': '30dfb48b1c6c7f02', 'mac136': '671eb8751b781029', 'msg139': '396517d0e5d7a4c672251790e68fc6025a1ba800ac80b089734359f53820', 'msg138': '44568380ecafc2222db978c243d554e6f0c5d89766095d5967685861abcd', 'msg137': 'df040425134cc55c41850ee2c7e848506d6d97089733afbdc023e93623d1', 'msg136': '11c6e67ec00a6d2a34899dd2d22897a26a84543e6085e8f90a3607485ad4', 'msg135': '8669db6596407d48d512a0558e879a986c37f781f4191cef533e2a8e5abf', 'msg134': '795acbea26d514276d51f0dda5d51f61256e475164c738c75ffa74d33ba6', 'msg133': '27660540b5962417d585a6e3bf1d21f0621e9e33a85bfa25fb268dd20809', 'msg132': '8a61b617086c4a8291af282ef589c8087deeda4e80b07cf231fdaf43bb2a', 'msg131': 'ec257c260ae71fbffb1f9a219162fdb5e677c393fb699c3d9fda708c939a', 'msg130': '99bc005955f931500e377e91101e4416418d30e361d3a7df902365e21142', 'key22': '8f34c2c81f92b9f8850e2673bf76ea70', 'key23': 'd98904e575a42949e5b05b62a486d931', 'key20': '37b97cc7d9baf7103b7a26d9cb51547f', 'key21': '6e835b8a04f2c17a54d65110b6c28c9b', 'key26': 'daa89be51901b09d3e856429620e31c1', 'key27': '1683ab2361621319f73bb6d56bc49ddf', 'key24': '493710493bcb675de5c4b61c687c0701', 'key25': '6b583d7c38015e0b980752a72c8373bf', 'key28': '1a80675bc12fb9988908f4586d68f438', 'key29': '7c15da467f58768fb3c8b9ce894f52b0', 'mac68': 'bb60e46f9c6ad7de', 'mac69': '43a55a6cb30673f0', 'mac62': 'c9855f9c', 'mac63': 'c16b9619', 'mac60': '170a8b8c', 'mac61': 'd038caf2', 'mac66': 'cc6c1479942d6104', 'mac67': '3740b93b22ca20a8', 'mac64': 'ec3d927c3baf1be4', 'mac65': 'b09e32361b7fcc3f', 'key97': 'e34385c275c873b6b961f24afedfb67a', 'key96': '2f0889c8f815627980ecda2cd0462092', 'key95': '9bd9b0eaa816fe265de9dc5e3167a86b', 'key94': '43cd6dc837c7387610f443621538c423', 'key93': '32f2e5670dfb3b4c3849294cc4199d89', 'key92': '7fc75dbfdcb0dfc18abc70ea67257c34', 'key91': 'cd8f102c1fe3703134c2545db0646b5e', 'key90': '029745e532321f8cce1a08709d191580', 'key99': '5b80a75223abe0ce68e0e5c2d351c4cd', 'key98': '1513da6d6eefce3749df49ab16d97038', 'msg28': 'f224eca6b48807c6', 'msg29': '6427c79bb5959ef3', 'taglength94': 8, 'taglength95': 8, 'taglength96': 2, 'taglength97': 2, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 2, 'taglength99': 2, 'msg24': '9eb983864bc07ea1', 'taglength59': 4, 'msg77': '684eff307befc4270f14fec491babdada5', 'msg76': 'ee6ae225094605d8da52a5eff71b27041b', 'msg75': 'c9a8961ad34ab200b52bb63f566bd2968e', 'msg74': '4ff4c92ccb44c9997d882e144b9eb2825b', 'msg73': '82125893ed31220661ac6942b9c3031791', 'msg72': 'a19b4f3b8cce1ce2ae63a89ca35a821088', 'msg71': '437d3fdad33afefb94ca15a319054a8c', 'msg70': '9703a444464a1270a6c31b36ef5659db', 'taglength121': 2, 'msg79': 'b198b264fa28fae2c632d4af89a8740528', 'msg78': '3d9db10bab7219623b4458c00c49221c10', 'taglength120': 2, 'key128': 'a7648f10017c155d6bb343074fe54f34', 'key129': '46daa22f913df123b0e5f204858ad907', 'key126': 'e3c208b5a7976452ada1d0cd26614a6e', 'key127': '6480895476eab3dc8a3bf4dc98f26dd0', 'key124': '759820d93440b5b925f834800dc85e76', 'key125': '6b026efd8c20c80e2a29b04ccd7c4325', 'key122': '4aa132a8fb61cbae2a2f91d5bc1c1c6b', 'key123': '7fa875201f8fb9bad385f2c8ce576102', 'key120': '408ff8ece529cbce7a1ac1aef4e6efad', 'key121': '6e7acda12f1a86e57f6baeb067832f20', 'key110': 'b5f21ca4f4750ea1025d29f101c21308', 'taglength125': 2, 'taglength124': 2, 'key117': 'cd195b0eb6e0b531f11a64a2404aae6b', 'key116': '3dc1800b04757926cd7f9de0ae29fedf', 'key115': 'ba1cfdc1f4c737abb95ef82a86ce5754', 'key114': 'd00d4f52d6cec7ec0dbca246c7b0b0ae', 'key113': '1cc2d9323820e5e061073d5d20195851', 'mac131': '40c053db', 'key112': '7c89dc20793231676db9d6dc6107ab61', 'msg106': '2d22caea319b0a664ae5b31c596955eb0d2bb70e06591c4d3a', 'msg107': '880fd5e05b09ce7e230325ecc3a9e6d5c6a818f194129687ec', 'msg104': 'f7622e572411bb19db30d6aacac339642c2b99bfedb2e37f0f', 'msg105': 'ed9e1f914d1536169ad05aeb9b8e1ee422e68e6f34db70c86a', 'msg102': '05d0de134473116ab6fa1e957a1bb80e772ea6134184c39c40', 'msg88': 'd969222d181fe37bb9e2eda88f86d0d5cc', 'msg100': 'ad4db1a9870bd5642505abd72828f9059538086129cc9eebed', 'msg101': 'f86daf7535b2323d2834d903e509712fc96a6450b1138ea869', 'key111': '1370d326e5ecba912c469204290286f2', 'msg89': '669c7ebef9459c53a829572d3f37f15040', 'msg108': 'a774fd82c5f5283647d4a0d791b30cbbad47dae99a603435e6', 'msg109': '1b5e9175058e789c3c292b39852dc0d8cd24a6fc1b4c3963c4', 'mac130': '014f0e9e', 'msg119': '55e0def3b2ee85cfee070df774bc5a135c955ca03c9e869541', 'msg118': '8fd03b1ff90f51ac25526fd65ad8b2d73cc27e12f1b2c24983', 'mac104': 'fddcbabb', 'mac105': '731bac53', 'mac106': 'b1cd9a28', 'mac107': '910635da', 'mac100': '0490', 'taglength38': 4, 'mac102': 'cf35', 'mac103': '1ad3', 'msg81': 'c907375b83409f2e28354fb31c11d70992', 'mac108': 'ba16d83a', 'mac109': '6fd142ba', 'key59': '43ce64e3d52a573e91dac42946f8ea67', 'key58': '7ab0986bd3b5ab23ea1fe07070d620ba', 'key53': 'ef9b324375eadac18a5243cb97b0d62f', 'key52': '4cc8b00e1649cb20d6eae9e6e9202f98', 'key51': '91a786b6297c79c82cd3970e91c4ae52', 'key50': 'cde0314fbf38e63d76d99891342080da', 'key57': '089b57fbfed3a473ba701cdfba6e6b57', 'key56': '23b0e32c5b91dca72cf180ad4fe6d558', 'key55': '64571f9e83d55713521561324a4c924c', 'key54': 'ba7f913107d61f0832bcb3c1b5b68c20', 'mac13': '71fe6f62', 'mac12': '43090719', 'mac11': '6a2f7401', 'mac10': '6e7c9195', 'mac17': 'eab70046758a4e27', 'mac16': 'af2df5ea7d2160a9', 'mac15': 'a058fb9b', 'mac14': '035ae837', 'mac19': '58f9318051b0c396', 'mac18': '5e44a88150a31ac2', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 4, 'taglength111': 4, 'msg103': '168d77f8292e46b5b2925ee6f678d0644095cdaede89c7806c', 'mac135': '34db7de8', 'key118': '34fd2c79b597584376582362ecdc1351', 'mac134': 'e7c3f2ff', 'key143': '1019136849ea67468fa4d9544043197a', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 4, 'taglength57': 4, 'taglength58': 4, 'msg25': 'a510baa519525cca', 'msg26': '2c6676c15f360d1e', 'msg27': '5d5012693e247007', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '2439123fe624e29d', 'mac112': '27a9e53c4f88bda2', 'msg142': '15df9d012a1f9ef89722fde5f1f61cf4c1cff28fda070181ea63885b5098', 'msg143': '8e2e28186030fc52cfcbaeeb373ca08e2430d208c271fb0795c5d9226a14', 'msg140': '86ca75c1e49a883e89912fe4060d1f245532c058bc3a30b0f40b8b6f8b0f', 'msg141': 'd86b1b42dbd5c1e3808cefa49a6435a55b187514c7ecf2f26890aa1a4448', 'mac111': '018b9c8c', 'mac122': 'f5bf', 'mac110': '10773d05', 'mac123': 'ae53', 'mac117': 'aaf10440c99b32c0', 'mac120': 'fb2a', 'mac116': 'c95fb66f25eb7d5c'} |
dict_cmac_tdes3 = {'mac121': 'b823dbbd', 'mac115': 'd7bff44e70fa1c3d', 'mac126': '3d0f760a', 'mac114': '9f6bfd4e9316b775', 'mac127': '32c49533', 'mac124': '2155cec2', 'key19': '891a5de3ce4626da2a159485d62651bab97ae9aea78c5e92', 'key18': '4fe35bc7bc26387ff2cee02f6158f404ab1ab3255b835dce', 'key17': 'f7d33dfee5253862347029732685734346fb85e6ecc237ef', 'key16': 'da6dc8a89dba62926e1c1f98949819a480e6fba4e3a7494f', 'key15': '4c100462c8804ff15437ea6b041c9791d0d51fb357385820', 'key14': '0423fe3dbf76c8d5b358a829c83bd56852297613df07a27f', 'key13': 'bcdfe6bfd94f8f1f8667e051d38a9ee026433734a7374394', 'key12': 'bf89d36125839b2529bcd3c43b25fb7338311f37f7974fc7', 'key11': '4cd6255b86043e7549c8f7e36bd9a761df374976b9b9d9d3', 'key10': 'bf708c5e620e545d912602c4f7ae892c2aefd34a67ae7308', 'mac57': 'dcea89fd608b', 'mac56': '733df85bb921', 'mac55': '56415a32', 'mac54': '9ed4039c', 'mac53': '23c721a2', 'mac52': 'f5ea6377', 'mac51': '49d44a59', 'mac50': '7cd2f49a', 'mac59': '88c444fc8365', 'mac58': 'bec0d9123493', 'key119': 'bafb26d55e79b54fef9b324375eadac18a5243cb97b0d62f', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '3bd332436823e5806bc1bc3efde9e51f1994c7f40d158643', 'key81': '3445c4a2940bf8b040c8cb2f3b1a583892545bcd9e9b80ad', 'key82': 'cb92434c4c9da8c716b6e68ca4314358a80897578a7f2904', 'key83': '6e68641aa7ea97a45b5be51f8fdf457ab916610b5bb538a4', 'key84': '79df3b2657201fba807fbfb94cfbe0d949fe257c0ec2d5ce', 'key85': '80efce610d0e5e23233bec1c25efe540706d07b6a49875e3', 'key86': 'd52507d540e5f7bc7fd9c43e89328fa2298a917594b9e9fb', 'key87': '3e02f2e37c67a46edcf1ef37cb37326d0438520b4523d30d', 'key88': 'bf7379b316e6f11320d6ab4652f85b32e0ced57fb908162f', 'key89': 'fbda861a3e1cd916c7150220ba0210adbaa26716c2765e04', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': 'f8ef259ca14760680ae34aad6f5a3254a28b86dcb7843259', 'msg33': '2550fc1f31b955987df2964b3b703373', 'msg62': 'd39a02c4ff758ffcf6f522520caf4532ce889cc68a28800f', 'msg63': 'e3c8a94ac99702318263f6853294e47e3cce6a9158ba1d4d', 'taglength18': 8, 'taglength19': 8, 'msg66': '97049e5ee4ae3037e7381251a136daf40a48f6e59e924e83', 'msg67': '8533e9b2099c09824b0390f901d38dfd4842ae90ec84a8a4', 'taglength14': 6, 'taglength15': 6, 'taglength16': 8, 'taglength17': 8, 'taglength10': 6, 'taglength11': 6, 'taglength12': 6, 'taglength13': 6, 'msg30': '0724b384074a0b5c205b042eb5beb7bb', 'key139': '343edf3b1f7c7f92b34f156446203d58681fae13104aef3e', 'key138': '62232501b9e9c1b554209d7c075d2c3173a2f289a84c49ce', 'key135': 'a21a867607705107d0a4d57a4f316470dce66154ce0d3837', 'msg37': 'c7a2fb653939b5fa6dfb8d5301a69e2f', 'key137': '4f5b4aeab57f0d4f1f79400d325885d3e908d954c7a7929b', 'key136': '7c86e507dcce139e2c647ca7c1d3ef57835bb0c7265745ae', 'key131': '70e5b00d230eb0d00d62e97567f77cfdabea620dcb8ac845', 'key130': '8afe23a7f75d6125b0854ae54ca74a016b86df3d971a1502', 'key133': '8a5243cb97b0d62f9e94b586f1bc1fdc20b9bac2323b52f4', 'msg36': '54b9619271b1c5bc34e6ee2c650f8574', 'msg35': '1a40aeb7cf5af26f5cd754fcd83ecec6', 'msg34': 'cb7bf45e4fde3d68c311351060bbf5d5', 'msg39': 'e1e9cae93c6200a62779755b0cfd8a74', 'taglength48': 4, 'taglength123': 4, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': 'e3cd90b81ad3bcaf0002c5129e17022a283e7d2a', 'msg114': 'f477cddd61ea83caad0c464530e9c3d89d73ee36', 'mac99': '80de13ca', 'mac98': '64116790', 'msg111': '8079df315f5a0694e5f4f2e5f9e6d45c7fd4ce62', 'msg110': '485ecd9d47a661d6fab9e748d9bd3c6a4ffeca0c', 'msg113': '44973b24de83884b7cb12734b46e03a97aed519d', 'msg112': '8379947e82dc8a7b2850416388290660f10f395f', 'mac93': 'dea8577c194741ef', 'mac92': '383ca5d1d2712ff9', 'mac91': '33b4dfa8470848e5', 'mac90': 'a8b231f21bc11c5f', 'mac97': '7f284e78', 'mac96': '52a5228b', 'mac95': '57880db6626f8629', 'mac94': '0ab03e60a964243d', 'key44': '02548c40405e5762fed9404fc43b3e374cd03ef8ea2304b5', 'key45': 'fbfd542073cd793b19b69de0a261089edfe5236db6c7808f', 'key46': '8c0d5226ef3438976e8c3420dc9d37c89d37523134ba2cb5', 'key47': 'c46efde5e65d7fc20d329e37854049ef10da4032a8545b9b', 'key40': 'e33216578cfda13d6b2cdf920825c7b3da52cd58b9c497e3', 'key41': '4979c8ec2c9d2c85b602453e8ab004da80b5b06dda9e529e', 'key42': 'e35b86f7bc5d209e4516bf160e5179e6c1c7520461ae8adf', 'key43': '7f7c10518c153d2a1f23349bbad9b5702a230eb6ab7ca446', 'msg99': '481b1be0b76f7ce56a4d42bbb6430d8ee015e653', 'mac119': 'a2cb9b3848a3b96f', 'mac118': '11a3685484bb9299', 'key48': 'e6081c2040892c7afdd692e604549d896d7fb9e92c98a1dc', 'key49': 'dabcf79edaf7dc6d1058d0f19e5b0ea8f498a2c8f8370426', 'msg98': '4c048245b7e0d7ccd1c6d02345401d4ae07b88f8', 'msg95': '4d4bdb7ecbb43bd4acad', 'msg94': '00ee573059f54e6896cb', 'taglength109': 6, 'taglength108': 6, 'taglength101': 4, 'taglength100': 4, 'taglength103': 4, 'taglength102': 4, 'taglength105': 6, 'taglength104': 6, 'taglength107': 6, 'taglength106': 6, 'msg32': '51f57e7aefc64d80c0e47e93dae1e487', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 6, 'taglength60': 6, 'taglength63': 6, 'taglength62': 6, 'msg51': 'b138122824e04e13cdf3305a69058bda7b5d16b89efc658d', 'msg50': '063cfa8ca36c9383b87db07e0de87565fd693a7bcd058386', 'msg53': '701153c9a77b2569c858163f898e428a7887420f9d3df2c7', 'msg52': '4e98153fce27792047a96e123f9b4ba25d1890dcceaa6fbe', 'taglength69': 8, 'taglength68': 8, 'msg57': '164bbf5a1108c1ebdd65a4942ce03de90cdbb876b14d7e0b', 'msg56': '88ce1d3c68360755d50b767a520f37123c80a0ebb73c237e', 'msg31': '0c2229eb1387d59b2427b5f470841a93', 'mac125': '99c6a320', 'mac40': '67c86d9f1b5c4bed', 'mac41': '0b429cd939556e70', 'mac42': '5a6cac47b6ad032a', 'mac43': 'ce0509ae5560aaf8', 'mac44': '117cdc8030e1d43e', 'mac45': '54bf3058633ed140', 'mac46': 'c9965a9d7dc7bd5f', 'mac47': '2118fc18af04d6b2', 'mac48': 'c051fb9d', 'mac49': 'a2d4e669', 'mac101': '8bf2e1cf', 'mac128': '34a549bb01dd', 'mac129': 'a2f1042230d3', 'key79': '0ba4e5e5d5addf074654459bd56b087a7a268f7fe304e3e9', 'key78': 'b0d57fb913d064b55bc8fba7d5e0629ecb9bd616ab648334', 'key75': 'cd3ed676d0c8b5a21602262f3194207cb0ecc7c1aef2efda', 'key74': 'efdaf1cdc8588320e054ec43234a2398989b314c469b51cd', 'key77': '26ba256454ea9b23a82f5891fbf707b6d6ab257f0dc2e55d', 'key76': 'a46e62c75137ead3b961ec649d43d543dc76589273949d26', 'key71': '6db3f7547067d31aabc1f27075da8a43a47934837a9e01a7', 'key70': 'e0c207aecde923f2f298a2c21c8ac4c7f84cd3a23dc8cea8', 'key73': '5d0e5bcb26feea3df26e380e297568fd5e681598ab08da8f', 'key72': '20ae32c49bab3bf8f86bb66173fb54d53e700868c46bc291', 'mac35': '03f805a4a358', 'mac34': 'b8f47cfe42a7', 'mac37': 'd5e4fc223fa2', 'mac36': 'd7837df2782a', 'mac31': '7ee3dc34', 'mac30': '2396736e', 'mac33': '0f0038ed6a98', 'mac32': 'c64ca691bb7d', 'mac39': '6cad7063919a', 'mac38': '8072aca0cf09', 'taglength130': 6, 'taglength131': 6, 'taglength132': 6, 'taglength133': 6, 'taglength134': 6, 'taglength135': 6, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 4, 'taglength24': 4, 'taglength27': 4, 'taglength26': 4, 'taglength29': 4, 'taglength28': 4, 'msg97': '0f8573ad22c683405d768b1d292e523caa503fbd', 'msg96': 'e9e8f59d6b214ecd6ea0769f57071f508017905b', 'msg91': '6a432d8006e23011c0ab', 'msg90': '66b96d3c3e56633212fb', 'msg93': '26c999b0c6a60d7651ae', 'msg92': '0ec82a455f3ec7abb8d8', 'key108': '80fe498c07b9704f15ef1046c22cceec79e3e3a1dabc9ed0', 'key109': '3d4f7f37e549fead9dc7438a75a7ae6d6d3b54ea2f38bac2', 'key100': '92705716a8e50bfda840c7f7081598d0a7343ef297d93e75', 'key101': '643740c7ae3eb31f9e76d0c8bc8998b06b0468162a85e6d6', 'key102': 'c2ae0dfdc78a02b6072c8c20b9a1c108b64cd67c2fda83b0', 'key103': '25ba6b31cecd3402a270a1ad687ca2790d5180efe0c78cbc', 'key104': '49d66b2fdc921ab30db01a492f2098b3d5a783e31016071f', 'key105': 'e3853d64689d3bdf7fad616ef7b913132558d5bae3100b45', 'key106': '38e68cf7516dd0f12f851986ef1c1685ea7f83ab461fcd89', 'key107': 'c8ef3b07c49b92202552f158462fd386f2c15e162a67bf40', 'mac132': '237c0fdacc13', 'taglength122': 4, 'mac84': '0b2af1f1e7d3', 'mac85': 'e2afff749deb', 'mac86': '0ba9749e09c1', 'mac87': '9d94d4921cad', 'mac80': '3a3968dc2cb7', 'mac81': '51cebcd095fa', 'mac82': '0b4d18225127', 'mac83': '4a490f059880', 'mac88': '999695327222af2d', 'mac89': '93b5844afd798c07', 'msg120': 'da8f9f953309e4eeedcd02924535c0bddd6874f86173c8d86b9cbee8a4f2', 'msg121': '2264a28bd02efe810e5a10cbefb63cce98e85c885d0407c5275e1396199d', 'msg122': '37843f5a95ecc4d35090946ab61a062783e35c55a7aaa6d74a8ce3bb0e30', 'msg123': '69273dfce62428d3dd0e423db96e7eb12126c9bb85b23d5bf7ad97a83d97', 'msg124': '00dcf0b0ac739f86bebd780e28bb0ce915b9075ec2d0aafc8fae7c81569a', 'msg125': '7753361bee60f85ae3acd1d69e2f6ae13870c0d8ad48d40231e9a5bcc81e', 'msg126': '2553e973e592f14eba1d6fbdf514d00613101aaae2b72d97e58e4a9ff80f', 'msg127': '869c1eb73cac8fbf541c5e36811a105f8d9ecc91064db438349e761c4d3b', 'msg128': '2639a85786ba8bbf5b50c170920cae8cd6b979eda7aac00cacb68b214a80', 'msg129': 'a746a67ef8b571168c2ac448b3c1183f3b2249f0940ee25032379bc53355', 'mac7': '843058c9', 'mac6': '6967e39c', 'mac5': 'dc84c95e', 'mac4': '46b10d83', 'mac3': '76e41eae', 'mac2': 'c3988c7c', 'mac1': '646f3602', 'mac0': 'eb61515b', 'mac9': 'c31e50d32bec', 'mac8': '42ef068e45b6', 'key31': '7c4cc715a861081c8064857c76101a23516e61d023e65edf', 'key30': '43577c9b8913e0e91a5d9d3bef19fbade6ab6e1aa708bf3b', 'key33': '1cd346926e91349d921a37f8e53dd651a8fe0e521640d0a8', 'key32': '9b29e3bf6e4019dc4a2a3e9e9e6b13a7f79b512adf706776', 'key35': 'f81c7ca4493458e69b7568324f32d340c7cbb6b36d686e15', 'key34': 'e63b6173e6f440f14a294a6489f494b64a8fd308d5cdbaa4', 'key37': '58d6c191616275a1703134800201683751136713d33b3226', 'key36': '4f9134bcba34e03b7626d34a5de67cc864e0298a70851c4c', 'key39': '0e76043d5e4c6e67ea4c3e5ba1b3ba1364d5a192b3a246ae', 'key38': '0d92388cf8ec138551b9ad454c2f40d5762ac47abc0179f8', 'msg59': 'd9474c4281d2621fd071205425d9f8daa17143fa815a346a', 'msg58': '27a1dd5cb9c912fb64698fad135231ee1b1597eec173cd9f', 'mac79': '193281a0', 'mac78': 'a3d3c70c', 'mac71': '9d552f79c1ea97a7', 'mac70': '42802dab0691fd8b', 'mac73': '13a8633b', 'mac72': '0d62f14f', 'mac75': '3c65c292', 'mac74': '13666372', 'mac77': '895e3212', 'mac76': '02443cf2', 'msg61': '577571e8ef87e6c4eb20b6c7c8156c2283c402b509b3f6d5', 'msg64': '84f42a23da7f20c1c4b6e3839b18430a4e6d3f6e61b423d4', 'msg65': 'b860f34bffdfb67b43d5cf7c951d7b2caca4c3fb877b469f', 'msg55': '87e4710aeee3128e70784175a176d842c995fd90e66749a6', 'key140': '6e627fb3315b1c861f388389b9971fd00e76043d5e4c6e67', 'key141': '5b9215b932c870e98c73d9cb3b0d5e85f86dae7534b3323d', 'key142': '01e0d61ffdae5b02e9bc92cdd9a8d33d2ab3010eec6826fd', 'msg54': '2d647ca7c1d3ef57d95258a97be384c77c139cc7e7d0a721', 'msg68': '42a10eda2e3d5dbf44e5e4f48e918756c031457f604476f5', 'msg69': '2d9d618e893e9face54b543c6b5892946a89bd1df8a74904', 'taglength87': 6, 'taglength86': 6, 'taglength85': 6, 'taglength84': 6, 'taglength83': 6, 'taglength82': 6, 'taglength81': 6, 'taglength80': 6, 'taglength89': 8, 'taglength88': 8, 'taglength78': 4, 'taglength79': 4, 'taglength72': 4, 'taglength73': 4, 'taglength70': 8, 'taglength71': 8, 'taglength76': 4, 'taglength77': 4, 'taglength74': 4, 'taglength75': 4, 'msg48': '7ec75db901029d62043f552e0161edb6c352b0e11ded25f3', 'msg49': 'd194602fdd75f11e6905e4a10eccad2b017a50808b867575', 'msg42': '8a90073a4dbd61c90799f0f82b5d58e6', 'msg43': 'fb7fcc48e063a665bd6705495515dd61', 'msg40': 'aeb9d3026df4f8576b48528564121afb', 'msg41': '66998a8abd7d5fc4263f6af6dc77f01e', 'msg46': '47751b8b4565cc3550669e7d7f0678fb', 'msg47': '03ea1f2fa34b77f916c7cce2dd23db88', 'msg44': '65f196f65b51efc796d9ee43f67523c9', 'msg45': '81498e13f4b630ade8d5203b69145fc7', 'key134': 'ba010757736d4c340d85bf61fe45fe580bfea497ba52b091', 'key132': 'a21c86702cc20ea708fdf731fb6e0ee3702c4f13b3c4aeb9', 'taglength127': 4, 'msg117': '1cd347926e90349d177b07b07ab75fbc59512dbf', 'taglength126': 4, 'msg116': '59070ac8696b6951218e5d9b119118611ba19ee6', 'mac140': 'ccb488224ce490dd', 'mac141': 'c82c73040eb32171', 'mac142': 'a1f0c3131068018c', 'mac143': 'd12b2746eb648f23', 'mac139': '264a54e8ab0c3a37', 'mac138': 'a05674f2c905d153', 'key68': 'd55edff71fc425fe64f48a2a97192c576115abc80be52acb', 'key69': 'b531e6f4346e3815459ed6d39ee645f1e6d3ec7ce6457f4f', 'key66': '6dae0b0d73e9b92564010b43cd0b621ab9f77f52fe2ff4d9', 'key67': '6dc264c15b32a494f8f7c1513d585d6d675dbf34a4d5f4f2', 'key64': 'c28a3dfd6d86a2f27f5454fd7f3843b0d5d5dae6dc57bf40', 'key65': 'c2041f587a57f7b09e496efe04bf5e7fe34385c275c873b6', 'key62': 'f426a1effd5d4a4ff1cb31cd7a2094b55e8316cef29d8976', 'key63': '1f31a8e62c9226c429f7b0c7a1f2cb8fb58f8f1a4601087a', 'key60': 'd65de5e35d0e49970b64265b7f3d37a4a416a10e8fe0d6e9', 'key61': '4f13b3cb8967f19e23ecb362fd26e952f44683a17f344fbc', 'mac26': 'd98d3472', 'mac27': '2a9ad8e9', 'mac24': '862f0e2b', 'mac25': '75fcc06c', 'mac22': '0691fa5832929efe', 'mac23': '3d426c34163df80c', 'mac20': '999ddb9b1e17419d', 'mac21': '3046b0063714d08c', 'mac28': '71cb1e64', 'mac29': 'be428f39', 'taglength6': 4, 'taglength7': 4, 'taglength4': 4, 'taglength5': 4, 'taglength2': 4, 'taglength3': 4, 'taglength0': 4, 'taglength1': 4, 'taglength129': 6, 'taglength128': 6, 'taglength8': 6, 'taglength9': 6, 'taglength36': 6, 'taglength37': 6, 'taglength34': 6, 'taglength35': 6, 'taglength32': 6, 'taglength33': 6, 'taglength30': 4, 'taglength31': 4, 'msg86': 'f5d088b69a51f7db1c41', 'msg87': '80bd8a088cf50a4cb6d6', 'msg84': '1155ddbd6293d119e972', 'msg85': '5ff220952ac166e60cd8', 'msg82': '5668f0d0b994b00018e6', 'msg83': '1c821aa20a02fb20735f', 'msg80': '1f15b48384e67eada9ce', 'taglength39': 6, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 4, 'msg38': 'bf56901559c5ca0dbfe3bb9d28a1da6f', 'mac133': 'e5170c3a87ea', 'key9': '7f6baeb067832f2023649da46e921c49570b43c81f1540c1', 'key8': '312f015464bf04701aa2432cba191c2c3b899b253d0bc8d0', 'key3': '61e65ba4c4921385e538b9f189ab807a62d3f80b7aad45da', 'key2': 'd310f1f2ad2ae68a9270513720f76b2391fba7dac7d0efd5', 'key1': 'ae0807dc0ecb546bd3738a43462970c27c0275c7d0d6c7ad', 'key0': 'f8fba7b9b3e9d68a2f70bfd304d32a159e13453e0d16928a', 'key7': '049e94da3d6b1cba5b515734b9070be632df89ad4a040e7c', 'key6': 'f225f2863d76a89efeb37f1554c26185d55edff71fc425fe', 'key5': '5da81fdab6a44068ab4a0243c72632b59d43d929f29b0252', 'key4': 'bfb53d161998f8efbfa2c8d0808cc7fbd9d54a6786f7a746', 'mac137': 'de88566bd671f7e1', 'mac136': 'b16ad9880f87ae8f', 'msg139': '905a46159d199ba490a70187ebcd287c01e12717afa2c9c0476328fbcd6c', 'msg138': 'adaf4bfffab79ffb60b94647faac634929c56e694052881881e60b1149b6', 'msg137': 'f2f49c8949e432de444171586e376c0f8e47302e358cf75493439e3a8e8a', 'msg136': '00c0fa4c03c6f66f96617062dc72d3b3bc955e7394027a3b2bb14b6de8c2', 'msg135': 'bbdb3e3d7b04cfa82297c01a3750ebda7b3d34061d2361202d1f2dc95389', 'msg134': '950d77f5bb57a685f52ce3d72376c240155e1c4705bcb2b665d112f1dc38', 'msg133': '024225c194dda881bb6b3189f506c6dd06f1ebfc3dce0bb7fa111a426db4', 'msg132': '8fb44c9bd950496e41b67befb6acdd3fa77006a60ea94f28ae9e385998a6', 'msg131': 'deb6d14a72746948641466fb8a27e2a96045e7bef25c7ac0fd47d88551a3', 'msg130': 'b4a4e9cf2e4bf4ec569126873332ddd438a4469c189dd0e1dcd5e1c5320d', 'key22': '89ce1c3d68370754d5b5f72f83d07973c2df5d1f0bdc19fe', 'key23': '0eecf26b0d01c7f4ad1c618c1c67fe7cd55deac2e5fde970', 'key20': '3723abe5a82f9b1510df3267e31a972ad001c75b19ecf151', 'key21': 'fdaed698d025e36d13ae9e7625e9e5026e8a40e6c726b9d9', 'key26': 'f264ab2a2f4a6ec8d5a19d7a98868c01bf89d36125839b25', 'key27': '9298c7b3fe9749fe047cb90e1c2ffb85f29e8f10f7b51f1c', 'key24': '344a6732dc5e5431e98a4f7c323dc1c46b0275dc150e68e9', 'key25': '25c104e08f31f1a875a7a1ea9185a81ff849e654629d7552', 'key28': '016ece5da138bcf2617a3270316891161504671a23861a85', 'key29': 'd0975b497ad910e545b031923b8ab3206408e5e5580e5b26', 'mac68': '81e23a51eda6b4f5', 'mac69': 'cded1056615d85b8', 'mac62': 'e7cacbdff911', 'mac63': '76882712c9e5', 'mac60': '4efc345327b1', 'mac61': '6e151b21e855', 'mac66': '011f2a23e7e17be1', 'mac67': 'e59bc558e9b6f92e', 'mac64': 'd5bd50153f6834de', 'mac65': '3fd9082228bea2f3', 'key97': 'cd9e79b0a7136173d6d0a2e529ade6d06792ab08a88ac7df', 'key96': 'b9d991d5b91f2cf891c46e54e69e9eceb09119b53bc43d3d', 'key95': 'd370970e0b613232f45104c26883073e3ea73eefa79d1397', 'key94': '4379586d83fd457f911f6efb98e6adc14a312ae69de92c9d', 'key93': '64d6a18cd9f707510e731008238532d9d9cdb69d292fcdd9', 'key92': 'b979f4804673626240465201f4d6eaaeb34f1a45ce10dc32', 'key91': '25132ae9912349ec43a208f4cba17c8607835bab1adcd9c2', 'key90': '2adf64e55891e3ef8ab3e3076dfb83fe2f9875468ac185b5', 'key99': 'c15d2ac4192986b3fd16527058c445e9c87f2c5e048915d6', 'key98': 'e5e68a02251c46fe8c103e7aa20ed54ccd6e29943d6e8a8a', 'msg28': 'e7f2c853bbdb234137d4335f3129a4fe', 'msg29': '9b7a09c97132702006e53d472505abdd', 'taglength94': 8, 'taglength95': 8, 'taglength96': 4, 'taglength97': 4, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 4, 'taglength99': 4, 'msg24': '25db0710fb165d316e7c32dd25648ed0', 'taglength59': 6, 'msg77': '43a9a2a48b05382d54bf', 'msg76': '8cc5f9f3b40f16ef0b73', 'msg75': '1dc4cc6675e721707d97', 'msg74': '7c5699caf91add90310d', 'msg73': '47e336f8ef04cc905e53', 'msg72': '582bd9c8c36ec815d0a9', 'msg71': '3cf5bd7d23f2eac325a9d22dcc49710f27776dcc1d4d04f9', 'msg70': 'e87dd34485382bda285ecff01c1dfe5b350bcb73b3751d0f', 'taglength121': 4, 'msg79': 'eb9e6463a1a4125612b5', 'msg78': 'e02a886cb62467a8ba31', 'taglength120': 4, 'key128': '1c019e9b167f2c1cd04a15c7688991e649c702a854642973', 'key129': 'cb4c977afbaee56ea7e50d23ab5d642073e0bfdfc2f4b5a1', 'key126': '0229e59e5b57019254c4e3aba7a4fb805786d96e76b6d607', 'key127': 'eab3bf168aeffec7eca113cb628ab5049129fddf9410a7f4', 'key124': '450845e53bfb255b76c82545c2670e8901c88937d99e3102', 'key125': '9dfe2f579eae40fb040e9da27391fb2a0ea84992df67c23d', 'key122': '37191cfdd55761807a04b3ade91a7f54cde0373420d5c875', 'key123': '70e008919e7331baa84a4ffb7c51f12c0185e33e32f2ce25', 'key120': 'c70297c18692c1f1cdf1a4a10b9e9beff8c77032d0b58686', 'key121': '85ab9202ae67021316e53e974c1f3dd6ba3ed3ad8c15b907', 'key110': '312f015464bf04701aa2432cba191c2c3b899b253d0bc8d0', 'taglength125': 4, 'taglength124': 4, 'key117': 'd9fef8efce9bdf5161585d869b1a0eba5434f731efa719a2', 'key116': '0b9b1029ab45c832f786f776f7267a0470dc1c3dea9b9404', 'key115': '34316bead315cbe06bfe898f3be50e925bd675d9a837b629', 'key114': '23572658fdd9abf71cc2d34cd68302a8801a380e2676798c', 'key113': 'd3926134b623327cf21c19ea8a20f1f21c4cdf3da1e00b43', 'mac131': '4ffb463be19b', 'key112': 'e6efdafe0702868afb8667f2c41920ad9b4ca7feba6737ef', 'msg106': '1f66e072e874b8294de9ae84c3330bfbf12ec9f0', 'msg107': '602cfe96909135035946244b83066b204538a443', 'msg104': 'cdff130df46b6d68e4d1d88d83120579a43f0eef', 'msg105': 'b174e35ec67759be9d4c103f6e1b1bf219157c26', 'msg102': '1ac21efeb4017fc1f9c7b2e0ba712b4d2b32e469', 'msg88': '588d6e3dae2cf2d2c69d', 'msg100': '657ca1e725aef85f87628ad5e1687e26a539f837', 'msg101': '86d6fdb9a27b5edba18a51e4236f9f4561d45999', 'key111': '5d381032f791c21fef519b2349d0bc100ec7312ac2daa8e3', 'msg89': 'f74345bf419dd67330e9', 'msg108': '781ef9afab90c71c232d1cd9fabd740131487f15', 'msg109': '6a50ae983dd566d593e4445ed2de6fcbfd4aa9e9', 'mac130': 'ee995766cc3b', 'msg119': '9f95b486f1bd1fdc66337fb04e954da880ebc229', 'msg118': 'ddd01266d14dcfd7c4e01548ed2f04239d9c887a', 'mac104': '2295d626315e', 'mac105': 'bd830d085569', 'mac106': '33fbbee54b83', 'mac107': '722a374e94e9', 'mac100': '20dfaa66', 'taglength38': 6, 'mac102': '36fed727', 'mac103': 'a47bc7ec', 'msg81': '315a6424f7367f021304', 'mac108': 'c3d73f0785c5', 'mac109': '4d9cffa467f5', 'key59': '043758f1a7bfb545156e8f5b6b0d20ae40a4fb290768b916', 'key58': '0b6bc110194c34ab3ef27f970dad311ccea41a4ca2bf40b0', 'key53': '6715202f1620f40b108626f46b9bc4c85d57f8d0b5b3e925', 'key52': '9eba7ca1e9259d68e537bfd6ea4661b3469110efec13754c', 'key51': '8f19d345fed5b0ba2683f4bffba7eaf75bf4a82f1f859ba7', 'key50': '2a2aab676be061ec98ef4a915e0126fed51f2073a402bffd', 'key57': '3e62941c52ae513e76ea07f7433e13f734d0c8a8231fdfb3', 'key56': 'd9511ff8d08c3792621f38ad040e2301c1752cfb61bc329b', 'key55': 'ef38920d794f7051cdc43bea168a3e254f4302e9f40bc786', 'key54': '1604204fa8a480a4dc15c41c86d673687c86e507dcce139e', 'mac13': '21bcb97ab5bc', 'mac12': 'd3206d0c03b0', 'mac11': 'aa755c97187f', 'mac10': '7e667dcc3f5c', 'mac17': '787298936048a495', 'mac16': '6dc376b2e3a3cde4', 'mac15': 'c85d07955275', 'mac14': '9509e5489bb8', 'mac19': '57b1e3d96677a874', 'mac18': '14b4a07be1c33ceb', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 6, 'taglength111': 6, 'msg103': 'b2b0b59941bca6c9e66fe5441933c7520d3a4462', 'mac135': '4e887731cd88', 'key118': '3792b9868f94d9fe9ba1c41c7f0e6d9b857c3d01e0264af2', 'mac134': '64b6521b2917', 'key143': '92dc739107df8c160dbf9d616413ce76b357ae0e2ad6b6a1', 'taglength50': 4, 'taglength51': 4, 'taglength52': 4, 'taglength53': 4, 'taglength54': 4, 'taglength55': 4, 'taglength56': 6, 'taglength57': 6, 'taglength58': 6, 'msg25': 'e2e0f15264b98a581985a3d58abda128', 'msg26': '28bcd3c53b24fb7206908d78059e856d', 'msg27': '4a20bc7bb41d5b237107758b5a28c1dd', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '2d73e70c4c3e589d', 'mac112': 'cbec47bb6ad5a9df', 'msg142': 'ea8274daa738c9b9b54d0da219ff9761011917b9b21827a9c28b23ee87c0', 'msg143': 'e8db7a65bd1db8e2e0277d2a8be0676dfd175817c3b9d8a53648b4b74588', 'msg140': 'eb4c3e5aa0b3ba122d2556a969ae3bb16b9fcd12493d8a5d25b6345c6b59', 'msg141': '8e0b59122b7e5c2fa5e5ea7b1cae477b141b3e20cb4513eccb60b856bb40', 'mac111': '4522b4178359', 'mac122': '77bd4d34', 'mac110': '14f4f1f803d8', 'mac123': 'd1652e44', 'mac117': '1eb1758a2ebea6cd', 'mac120': '6a8179f3', 'mac116': 'e9b969465284ff97'} |
# XTS |
# test vectors from: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf |
dict_xts_aes = { |
'key1_0':'00000000000000000000000000000000', |
'key2_0':'00000000000000000000000000000000', |
'n0':'00', |
'msg0':'0000000000000000000000000000000000000000000000000000000000000000', |
'cip0':'917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e', |
'key1_1':'11111111111111111111111111111111', |
'key2_1':'22222222222222222222222222222222', |
'n1':'3333333333', |
'msg1':'4444444444444444444444444444444444444444444444444444444444444444', |
'cip1':'c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0', |
'key1_2':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0', |
'key2_2':'22222222222222222222222222222222', |
'n2':'3333333333', |
'msg2':'4444444444444444444444444444444444444444444444444444444444444444', |
'cip2':'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89', |
'key1_3':'27182818284590452353602874713526', |
'key2_3':'31415926535897932384626433832795', |
'n3':'00', |
'msg3':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip3':'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568', |
'key1_4':'27182818284590452353602874713526', |
'key2_4':'31415926535897932384626433832795', |
'n4':'01', |
'msg4':'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568', |
'cip4':'264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd', |
'key1_5':'27182818284590452353602874713526', |
'key2_5':'31415926535897932384626433832795', |
'n5':'02', |
'msg5':'264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd', |
'cip5':'fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6', |
'key1_6':'27182818284590452353602874713526', |
'key2_6':'31415926535897932384626433832795', |
'n6':'fd', |
'msg6':'8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888', |
'cip6':'d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637', |
'key1_7':'27182818284590452353602874713526', |
'key2_7':'31415926535897932384626433832795', |
'n7':'fe', |
'msg7':'d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637', |
'cip7':'72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a', |
'key1_8':'27182818284590452353602874713526', |
'key2_8':'31415926535897932384626433832795', |
'n8':'ff', |
'msg8':'72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a', |
'cip8':'3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd', |
'key1_9':'2718281828459045235360287471352662497757247093699959574966967627', |
'key2_9':'3141592653589793238462643383279502884197169399375105820974944592', |
'n9':'ff', |
'msg9':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip9':'1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151', |
'key1_10':'2718281828459045235360287471352662497757247093699959574966967627', |
'key2_10':'3141592653589793238462643383279502884197169399375105820974944592', |
'n10':'ffff', |
'msg10':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip10':'77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803', |
'key1_11':'2718281828459045235360287471352662497757247093699959574966967627', |
'key2_11':'3141592653589793238462643383279502884197169399375105820974944592', |
'n11':'ffffff', |
'msg11':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip11':'e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826', |
'key1_12':'2718281828459045235360287471352662497757247093699959574966967627', |
'key2_12':'3141592653589793238462643383279502884197169399375105820974944592', |
'n12':'ffffffff', |
'msg12':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip12':'bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220', |
'key1_13':'2718281828459045235360287471352662497757247093699959574966967627', |
'key2_13':'3141592653589793238462643383279502884197169399375105820974944592', |
'n13':'ffffffffff', |
'msg13':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip13':'64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9', |
'key1_14':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0', |
'key2_14':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0', |
'n14':'9a78563412', |
'msg14':'000102030405060708090a0b0c0d0e0f10', |
'cip14':'6c1625db4671522d3d7599601de7ca09ed', |
'key1_15':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0', |
'key2_15':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0', |
'n15':'9a78563412', |
'msg15':'000102030405060708090a0b0c0d0e0f1011', |
'cip15':'d069444b7a7e0cab09e24447d24deb1fedbf', |
'key1_16':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0', |
'key2_16':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0', |
'n16':'9a78563412', |
'msg16':'000102030405060708090a0b0c0d0e0f101112', |
'cip16':'e5df1351c0544ba1350b3363cd8ef4beedbf9d', |
'key1_17':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0', |
'key2_17':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0', |
'n17':'9a78563412', |
'msg17':'000102030405060708090a0b0c0d0e0f10111213', |
'cip17':'9d84c813f719aa2c7be3f66171c7c5c2edbf9dac', |
'key1_18':'e0e1e2e3e4e5e6e7e8e9eaebecedeeef', |
'key2_18':'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf', |
'n18':'21436587a9', |
'msg18':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff', |
'cip18':'38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3', |
} |
#PRESENT |
# testvectors with constant 128bit key and varying plaintext |
dict_present_e128_k12_tvar= {'cip0': '6fdbbca937dc1ee9', 'cip1': '151d40aca3bda726', 'cip10': 'eeff4bd4905a0523', 'cip11': '044b8bc03ec2d433', 'cip12': '9934db7010582bfc', 'cip13': '7896fff60ce37826', 'cip14': '8cbc4e078f232cc5', 'cip15': '9f8991210ee08aa8', 'cip2': '20977863556da6f4', 'cip3': 'f5b93038ba5672dc', 'cip4': 'f5a66a60f44d0039', 'cip5': '3a5def544afd1007', 'cip6': '2ac0b55aaf15b9ae', 'cip7': '28c78a485bb0edc1', 'cip8': '6826d666e911ef6e', 'cip9': '3565447d71f6df0d', 'key0': '0123456789abcdef0123456789abcdef', 'key1': '0123456789abcdef0123456789abcdef', 'key10': '0123456789abcdef0123456789abcdef', 'key11': '0123456789abcdef0123456789abcdef', 'key12': '0123456789abcdef0123456789abcdef', 'key13': '0123456789abcdef0123456789abcdef', 'key14': '0123456789abcdef0123456789abcdef', 'key15': '0123456789abcdef0123456789abcdef', 'key2': '0123456789abcdef0123456789abcdef', 'key3': '0123456789abcdef0123456789abcdef', 'key4': '0123456789abcdef0123456789abcdef', 'key5': '0123456789abcdef0123456789abcdef', 'key6': '0123456789abcdef0123456789abcdef', 'key7': '0123456789abcdef0123456789abcdef', 'key8': '0123456789abcdef0123456789abcdef', 'key9': '0123456789abcdef0123456789abcdef', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'} |
# testvectors with varying 128bit key and constant plaintext |
dict_present_e128_kvar_t12= {'cip0': '6aa78def1e56bd64', 'cip1': 'd11bf7c9ebeb5f2a', 'cip10': 'bd17d9c04e61a0ee', 'cip11': '7beea04716f98160', 'cip12': '9db697051ed2a6fd', 'cip13': '10ac486c1fae1797', 'cip14': '82029daf135b5ea0', 'cip15': 'e6aff662a22e6a82', 'cip2': '0f02f4374c983d54', 'cip3': '9467d6a56e1ae620', 'cip4': '969d033beca4bacf', 'cip5': '7cf8757b82462b53', 'cip6': '0219814156ecfe5c', 'cip7': 'a77fa7d7205bf834', 'cip8': '39d1e2da674bc609', 'cip9': '97af61eae8a24aee', 'key0': '0123456789abcdef0123', 'key1': '0123456789abcdef0123', 'key10': '0123456789abcdef0123', 'key11': '0123456789abcdef0123', 'key12': '0123456789abcdef0123', 'key13': '0123456789abcdef0123', 'key14': '0123456789abcdef0123', 'key15': '0123456789abcdef0123', 'key2': '0123456789abcdef0123', 'key3': '0123456789abcdef0123', 'key4': '0123456789abcdef0123', 'key5': '0123456789abcdef0123', 'key6': '0123456789abcdef0123', 'key7': '0123456789abcdef0123', 'key8': '0123456789abcdef0123', 'key9': '0123456789abcdef0123', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'} |
# testvectors with constant 80bit key and varying plaintext |
dict_present_e80_k12_tvar= {'cip0': '6aa78def1e56bd64', 'cip1': 'd11bf7c9ebeb5f2a', 'cip10': 'bd17d9c04e61a0ee', 'cip11': '7beea04716f98160', 'cip12': '9db697051ed2a6fd', 'cip13': '10ac486c1fae1797', 'cip14': '82029daf135b5ea0', 'cip15': 'e6aff662a22e6a82', 'cip2': '0f02f4374c983d54', 'cip3': '9467d6a56e1ae620', 'cip4': '969d033beca4bacf', 'cip5': '7cf8757b82462b53', 'cip6': '0219814156ecfe5c', 'cip7': 'a77fa7d7205bf834', 'cip8': '39d1e2da674bc609', 'cip9': '97af61eae8a24aee', 'key0': '0123456789abcdef0123', 'key1': '0123456789abcdef0123', 'key10': '0123456789abcdef0123', 'key11': '0123456789abcdef0123', 'key12': '0123456789abcdef0123', 'key13': '0123456789abcdef0123', 'key14': '0123456789abcdef0123', 'key15': '0123456789abcdef0123', 'key2': '0123456789abcdef0123', 'key3': '0123456789abcdef0123', 'key4': '0123456789abcdef0123', 'key5': '0123456789abcdef0123', 'key6': '0123456789abcdef0123', 'key7': '0123456789abcdef0123', 'key8': '0123456789abcdef0123', 'key9': '0123456789abcdef0123', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'} |
# testvectors with varying 80bit key and constant plaintext |
dict_present_e80_kvar_t12={'cip0': '6047e90ed080513b', 'cip1': 'af2b954515e7e03d', 'cip10': 'ec5448698c85ef50', 'cip11': '7aa3c9694f868e2a', 'cip12': 'f104d4e9e2c22368', 'cip13': '1dea3abda5a4105c', 'cip14': 'ff56b887e6e403a2', 'cip15': '8b37e72e60fd126d', 'cip16': '701efac813c9c84a', 'cip17': 'bb6fbfc423782c0d', 'cip18': '58a55751c6122fe5', 'cip19': 'd40936d4b245d95f', 'cip2': '9c9f2db024b7e898', 'cip20': '0f5663c0f1aa56da', 'cip3': 'b437977b988c3f51', 'cip4': '10272901fa59c553', 'cip5': 'f7b051c203969e8a', 'cip6': '0a9c44d8f745dbdc', 'cip7': '211bc39399ec1550', 'cip8': '4526f7436c8633a5', 'cip9': '7f948db4b77060b2', 'key0': '00000000000000000000', 'key1': '0000000000000000000f', 'key10': '0000000000ffffffffff', 'key11': '000000000fffffffffff', 'key12': '00000000ffffffffffff', 'key13': '0000000fffffffffffff', 'key14': '000000ffffffffffffff', 'key15': '00000fffffffffffffff', 'key16': '0000ffffffffffffffff', 'key17': '000fffffffffffffffff', 'key18': '00ffffffffffffffffff', 'key19': '0fffffffffffffffffff', 'key2': '000000000000000000ff', 'key20': 'ffffffffffffffffffff', 'key3': '00000000000000000fff', 'key4': '0000000000000000ffff', 'key5': '000000000000000fffff', 'key6': '00000000000000ffffff', 'key7': '0000000000000fffffff', 'key8': '000000000000ffffffff', 'key9': '00000000000fffffffff', 'msg0': '0123456789abcdef', 'msg1': '0123456789abcdef', 'msg10': '0123456789abcdef', 'msg11': '0123456789abcdef', 'msg12': '0123456789abcdef', 'msg13': '0123456789abcdef', 'msg14': '0123456789abcdef', 'msg15': '0123456789abcdef', 'msg16': '0123456789abcdef', 'msg17': '0123456789abcdef', 'msg18': '0123456789abcdef', 'msg19': '0123456789abcdef', 'msg2': '0123456789abcdef', 'msg20': '0123456789abcdef', 'msg3': '0123456789abcdef', 'msg4': '0123456789abcdef', 'msg5': '0123456789abcdef', 'msg6': '0123456789abcdef', 'msg7': '0123456789abcdef', 'msg8': '0123456789abcdef', 'msg9': '0123456789abcdef'} |
#TWOFISH |
#constant key of all zero's and variable plaintext |
dict_twofish_ecb_vt_k128 = {'cip10': '670A4ED16EA1BDE23E16CB52DBD31CB0', 'cip11': 'A52335AA9F42886084E21400DE48B62F', 'cip49': 'C4D45503484DBC83CB52D3DB4AD0A7CC', 'cip48': '41EACB7F6B5F9E3E3D299CA416EA2C59', 'key19': '00000000000000000000000000000000', 'key18': '00000000000000000000000000000000', 'key17': '00000000000000000000000000000000', 'key16': '00000000000000000000000000000000', 'key15': '00000000000000000000000000000000', 'key14': '00000000000000000000000000000000', 'key13': '00000000000000000000000000000000', 'key12': '00000000000000000000000000000000', 'key11': '00000000000000000000000000000000', 'key10': '00000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '00000000000000000000000000000000', 'key81': '00000000000000000000000000000000', 'key82': '00000000000000000000000000000000', 'key83': '00000000000000000000000000000000', 'key84': '00000000000000000000000000000000', 'key85': '00000000000000000000000000000000', 'key86': '00000000000000000000000000000000', 'key87': '00000000000000000000000000000000', 'key88': '00000000000000000000000000000000', 'key89': '00000000000000000000000000000000', 'cip41': 'A984F6F70E93FE65C8798C01D4E5D30C', 'cip40': '9BE294C97C2A963006A2BD4541DC7DB5', 'cip43': '646771D16BAEDAC3F8E9D00C212518A2', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': '6850AFECD8064E77F4F6944BDF5B324D', 'cip44': '9D2D410DC6F3BEC913D64BDBDEF3285E', 'cip47': '0CA58E149C2120A8EBF9A7885A89ACBC', 'cip46': '2E341142550F73F4C8E9DCCC5931A158', 'key26': '00000000000000000000000000000000', 'key27': '00000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '24C65ADDE5C3CD24B75C343782E87F6E', 'cip88': 'B22E9707E738F723CD9B99386CE0162E', 'cip85': '803939C10EE11BB254A7768FAD053DA4', 'cip84': '0035A5F7557B1B009327109D0C62F25C', 'cip87': 'DE8381198215D45B1BE787E4E8438500', 'cip86': '35D493255A870959C12F26170E6A1B64', 'cip81': '064BA0E8ADDD8E9DF4496E6931AD25F4', 'cip80': '504C1D7FAE3AB9A62323F21BF9A80A67', 'cip83': '1A20EA3DB071121460244EDE27DA7A39', 'cip82': '51D0B15C08FF32F1DCE7B28320875566', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': '6758972B3171F0EA46304542776337FC', 'cip17': 'EC9B591DB8476C26C3CFDA618C1DBBD8', 'cip14': '20C9F20A8045AEDEE9D6E1CDA948339A', 'cip15': 'DF1606EEF4FEE3F4FC9EC26E2AB388AB', 'cip12': 'A5A240EBFED79F38F31497EA4C9CFCDA', 'cip13': '46A64A07123E1212FE9E2F30EDFD80FF', 'key42': '00000000000000000000000000000000', 'key43': '00000000000000000000000000000000', 'key48': '00000000000000000000000000000000', 'key49': '00000000000000000000000000000000', 'cip18': '651551E741359E0A10BB4EE6A1C07C02', 'cip19': '88BC2BF1F8A55562B95F8547C9A19E56', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': 'F97C415886D05C12598F2C95F6B3EB16', 'cip124': 'EEE324733E6409500FC9F9D6DCA185E0', 'cip126': 'F0FC7D86D814589A09D8EC136F95A124', 'cip121': '80C38900313E9350219EAE9AA7DA5E1B', 'cip120': 'FD7A0B33D397DA035D146DD56C869960', 'cip123': '58A06DC5AD2D7C0550771D6E9D59D58B', 'cip122': 'F50D8495C3DCBFF4DFED0736F92475BB', 'cip58': 'C5094DE7E36CAEBE1B76EC3AC2C875F5', 'cip59': '7DF8910A2D256FFB5D56FD1358F131FE', 'cip52': 'B05E771660493DCE3A275B0252D343A7', 'cip53': '83D0034D231E179207F6A97FB1457FEB', 'cip50': 'CC52B159C2BCF87EE5F4926C6E7B7744', 'cip51': '7E8A4023B8890A2DBF0D54E330FDF2A2', 'cip56': '26031449FBD6C84201B0BFB53B2C23CA', 'cip57': 'AFC8E9D2B9BFED9CE0B898F28607DF4C', 'cip54': '7132BF130E8732C41F68107F49153FF2', 'cip55': 'B93021593B9EA2588F16E87D3C5DE0EC', 'cip4': 'B62324BE427332A6089C7BE40D40292E', 'cip5': '929B4789E9D6940C9A158880CA21C0E2', 'cip6': 'C14830DB50BA7221B27DC033B0D8D331', 'cip7': '743342B02EBE647AE47092D435FA60F6', 'cip0': '73B9FF14CF2589901FF52A0D6F4B7EDE', 'cip1': 'F5A9150BAB6D6AEBD6B4F97D9E93B28B', 'cip2': 'C30F8B221FD6D3996F973CDCDC6E305C', 'cip3': 'D6A531FE826CB0454F2D567A20018CB7', 'cip8': '4F02AF45C09373D879CD01506A4E7D14', 'cip9': '92BC9085AB0BA8FFEC2EA6D360864817', 'key79': '00000000000000000000000000000000', 'key78': '00000000000000000000000000000000', 'key75': '00000000000000000000000000000000', 'key74': '00000000000000000000000000000000', 'key77': '00000000000000000000000000000000', 'key76': '00000000000000000000000000000000', 'key71': '00000000000000000000000000000000', 'key70': '00000000000000000000000000000000', 'key73': '00000000000000000000000000000000', 'key72': '00000000000000000000000000000000', 'cip24': 'F3B4662918864BA94C1CF79C73B1F259', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '00000000000000000000000000000000', 'key109': '00000000000000000000000000000000', 'key100': '00000000000000000000000000000000', 'key101': '00000000000000000000000000000000', 'key102': '00000000000000000000000000000000', 'key103': '00000000000000000000000000000000', 'key104': '00000000000000000000000000000000', 'key105': '00000000000000000000000000000000', 'key106': '00000000000000000000000000000000', 'key107': '00000000000000000000000000000000', 'key28': '00000000000000000000000000000000', 'key29': '00000000000000000000000000000000', 'cip98': 'BB610990F42303F4ECCD795E16780A13', 'cip99': 'A38330C5C0B464FFD6983972CF9541CC', 'cip96': '77628153A62DFD455B1C0E5B6CE9688C', 'cip97': '8AE9DF2D94F6E85C86459132130E1BF5', 'cip94': '3DBB85509557BB00FE0F2013A90A5753', 'cip95': 'F2D75E45A62D1758C7A542BC805AC482', 'cip92': '223D6117FE4864C2B3C513EAC2A5266A', 'cip93': '3DBF645715ED7AD1964E2DCDE2F8806A', 'cip90': '0050FF2C1A3C2AA68207D333F9956A72', 'cip91': '162F7B8D35C1A98305BA0FE2A91FF27A', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '00000000000000000000000000000000', 'key30': '00000000000000000000000000000000', 'key33': '00000000000000000000000000000000', 'key32': '00000000000000000000000000000000', 'key35': '00000000000000000000000000000000', 'key34': '00000000000000000000000000000000', 'key37': '00000000000000000000000000000000', 'key36': '00000000000000000000000000000000', 'key39': '00000000000000000000000000000000', 'key38': '00000000000000000000000000000000', 'cip29': '797224710FD09F9830B0F160AE9051E8', 'cip28': 'C0AD52D4B4F67A9333A5E4B1B1176EEC', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': 'FCA9BAD58DD9C77B0BC0E616E7DE7F2D', 'cip111': '798DA99BEFFBF99B23A3C15A31F60CB1', 'cip112': '015CD86F000C87948BF3591C3DE4391F', 'cip113': 'B40B9945EEF7BC52E0B244ED71FAD3D3', 'cip114': 'D9BBB27B7D8AB20241E60F04108F1E12', 'cip115': '6EC3F259B3FA960505CDE9D20F9EB905', 'cip116': '01C1772AD104A988B2978447B91199F0', 'cip117': 'F8D5E997A8DD1B5BBE79C9F36B94C73C', 'cip118': '4040058B08B27B6A585F18BFDBAE3E29', 'cip119': '55547D09ACAF0C915B24E15ABAB0C827', 'cip67': 'BB26ABB17AD5482B1DCC4018E7DB0950', 'cip66': '18B039EECB68A05CBF8C65EE85BDC4BC', 'cip65': '3B2554E422F9CEBB8271D7A48C94E03F', 'cip64': 'F16305404AE6266C619DC8ACA2D492E1', 'cip63': '80D1463F9E9416A143B2FF69DE629510', 'cip62': 'FC5C4893AD148E4134EAEB3B1B190E29', 'cip61': '5F1861F1523CDA0C95644B0C4F2EE6D1', 'cip60': 'D93F84C1519D6627465E984675AA800B', 'cip69': 'BD8A3B64849E54CC2D8379DCA9E42FDD', 'cip68': '7E7AC0FD5B98157CEAD4BBAB643BE4CA', 'key68': '00000000000000000000000000000000', 'key69': '00000000000000000000000000000000', 'key66': '00000000000000000000000000000000', 'key67': '00000000000000000000000000000000', 'key64': '00000000000000000000000000000000', 'key65': '00000000000000000000000000000000', 'key62': '00000000000000000000000000000000', 'key63': '00000000000000000000000000000000', 'key60': '00000000000000000000000000000000', 'key61': '00000000000000000000000000000000', 'key117': '00000000000000000000000000000000', 'key116': '00000000000000000000000000000000', 'key115': '00000000000000000000000000000000', 'key114': '00000000000000000000000000000000', 'key113': '00000000000000000000000000000000', 'key112': '00000000000000000000000000000000', 'key111': '00000000000000000000000000000000', 'key110': '00000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': '5BAC94C97A4069400875A5ABC07BCB17', 'cip22': 'EC3922A728DA9E4C212D910E5C4AE632', 'cip21': '7B68DA568ABA5AE69D93C915E37DEE91', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'B20F456519D353AF91C012793576F9B8', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': '74139BD645DED7690F606490CCA44DD2', 'key9': '00000000000000000000000000000000', 'key8': '00000000000000000000000000000000', 'cip25': '6FBF5A9A93EFA6640AFB80D9A2D22CF7', 'key3': '00000000000000000000000000000000', 'key2': '00000000000000000000000000000000', 'key1': '00000000000000000000000000000000', 'key0': '00000000000000000000000000000000', 'key7': '00000000000000000000000000000000', 'key6': '00000000000000000000000000000000', 'key5': '00000000000000000000000000000000', 'key4': '00000000000000000000000000000000', 'key22': '00000000000000000000000000000000', 'key23': '00000000000000000000000000000000', 'key20': '00000000000000000000000000000000', 'key21': '00000000000000000000000000000000', 'cip38': 'F9354B12C2366F1CE10F9A0550281267', 'cip39': '684FDA9FCF3B3B5648A452CDA07CF002', 'key24': '00000000000000000000000000000000', 'key25': '00000000000000000000000000000000', 'cip34': '6037FE38896C05745C58C28CDF7FF386', 'cip35': '92F5817D0BE37241F9292F6FF918A8E5', 'cip36': '20C9A2A684563495C255A5751C1AC01E', 'cip37': 'AC6B6DB6D069B6895F2283435D33BD43', 'cip30': '73669B64C292F4461FAA3A3D091D08DA', 'cip31': 'EFE0E893CE04008935CB7D43A7DC9ADD', 'cip32': '3B0A2D3B236324221F81BFCAE45217D8', 'cip33': 'CE6F569FC89127B1AE19466FA36DD6E4', 'key97': '00000000000000000000000000000000', 'key96': '00000000000000000000000000000000', 'key95': '00000000000000000000000000000000', 'key94': '00000000000000000000000000000000', 'key93': '00000000000000000000000000000000', 'key92': '00000000000000000000000000000000', 'key91': '00000000000000000000000000000000', 'key90': '00000000000000000000000000000000', 'key99': '00000000000000000000000000000000', 'key98': '00000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': 'E06A6CE2D74DB3D78E8F5D991C322B87', 'key126': '00000000000000000000000000000000', 'key124': '00000000000000000000000000000000', 'key125': '00000000000000000000000000000000', 'key122': '00000000000000000000000000000000', 'key123': '00000000000000000000000000000000', 'key120': '00000000000000000000000000000000', 'key121': '00000000000000000000000000000000', 'cip109': 'B8EE7182E563888E4F99335CF0372598', 'cip108': 'DD8C11B46F768B7CB2EAEE7E3448DD37', 'cip107': 'F6C56A841A31D58A90F5693F87380A3F', 'cip106': '337FCEE0AD0BDCA24AF5411B69D39B37', 'cip105': '5C8241DA3FB0DC7328271B9FF72C91BA', 'cip104': '1119C20F08D4EA77A13C331678D4D71F', 'cip103': 'CBF5EF38DDEBCA39F2F6BEB2F3042D96', 'cip102': 'FCF7BE4B89B54547C0BEF84EB85734F6', 'cip101': '3BC6740BF141DD33D65FDEAA10BF1655', 'cip100': 'EFD11CA98FEBB6F1ECBEBBCB8BD5E35B', 'cip70': '58C388DFB41FF3E14394C73FD8AAC56A', 'cip71': '944B295E23C5B2542DED57A155D33EF8', 'cip72': '067B4DD07DCA1292CFF0D80D75BDACA5', 'cip73': '7D7344373196C5B30676F270BFC90B07', 'cip74': '988C5164A82254B29326C98812A716CE', 'cip75': '8FFD48787C28542E0450FAD4CBAD34D0', 'cip76': 'C50E7CD771628964E708425160FFB02C', 'cip77': 'B293B07F92D68C18FEC1466996B78020', 'cip78': 'DE21B2A6C8D7B90A7714DB3EF5209A6B', 'cip79': '4700E22C08FE953CABAC7E78A3F747A7', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '00000000000000000000000000000000', 'key118': '00000000000000000000000000000000', 'key59': '00000000000000000000000000000000', 'key58': '00000000000000000000000000000000', 'key53': '00000000000000000000000000000000', 'key52': '00000000000000000000000000000000', 'key51': '00000000000000000000000000000000', 'key50': '00000000000000000000000000000000', 'key57': '00000000000000000000000000000000', 'key56': '00000000000000000000000000000000', 'key55': '00000000000000000000000000000000', 'key54': '00000000000000000000000000000000', 'cip20': '1A6CCCBD8D40AA14810ED615A6A6E24D', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '00000000000000000000000000000000', 'key45': '00000000000000000000000000000000', 'key46': '00000000000000000000000000000000', 'key47': '00000000000000000000000000000000', 'key40': '00000000000000000000000000000000', 'key41': '00000000000000000000000000000000'} |
dict_twofish_ecb_vt_k192 = {'cip10': 'A11AE84E6D2C56DED2B9497FEC7504A7', 'cip11': 'B3A1A1E271BF94DA3A5ECFF1D4293A56', 'cip49': 'A2CB209DA6AA40E043E6FB9DD2476100', 'cip48': '3C678BADA3FB1B872C018DC035AE16E8', 'key19': '000000000000000000000000000000000000000000000000', 'key18': '000000000000000000000000000000000000000000000000', 'key17': '000000000000000000000000000000000000000000000000', 'key16': '000000000000000000000000000000000000000000000000', 'key15': '000000000000000000000000000000000000000000000000', 'key14': '000000000000000000000000000000000000000000000000', 'key13': '000000000000000000000000000000000000000000000000', 'key12': '000000000000000000000000000000000000000000000000', 'key11': '000000000000000000000000000000000000000000000000', 'key10': '000000000000000000000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '000000000000000000000000000000000000000000000000', 'key81': '000000000000000000000000000000000000000000000000', 'key82': '000000000000000000000000000000000000000000000000', 'key83': '000000000000000000000000000000000000000000000000', 'key84': '000000000000000000000000000000000000000000000000', 'key85': '000000000000000000000000000000000000000000000000', 'key86': '000000000000000000000000000000000000000000000000', 'key87': '000000000000000000000000000000000000000000000000', 'key88': '000000000000000000000000000000000000000000000000', 'key89': '000000000000000000000000000000000000000000000000', 'cip41': '3E4DB71B9C737C7F8AEF632A5ADEF61D', 'cip40': '13BB56699085842B81DBE8FAA8B26269', 'cip43': '527D14E58B74224622DF7F3FD65932F5', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': 'C57D3ECB71A7DA4708DE6F338BC13E09', 'cip44': '708703993AD1DDE5C7F8714686F3AF32', 'cip47': '01877AC646A283472DA74182FDC1E2B5', 'cip46': 'B31FF60BE0FDC17001CAF87FC7FC0B2D', 'key26': '000000000000000000000000000000000000000000000000', 'key27': '000000000000000000000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '311292EDE1F30E9F22F1EEF8FD19BD80', 'cip88': 'CB5D8A62D16220123EF0005876E35B19', 'cip85': 'FDBFE2C3FFC82792D338388A1FC6D22E', 'cip84': 'FCD07057EF4820154075A0DDCBFC0BBD', 'cip87': 'B1784A7BF395FB525471EE3DC8972FED', 'cip86': '04D5F7CD68FC2352BDDBC82CFE35DA80', 'cip81': '2891C81846949C917E757EBAE20D34EE', 'cip80': '8291F94EDF578E8A70CD0CF8F3FB3558', 'cip83': 'CC6807D209B728C559C32336FD8FB71D', 'cip82': '762D85A32DAF0C9F3CFB3388E808FEC2', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': '1F80E1CE3F12C96F2E647BACB6DA78D8', 'cip17': '12D34A7875E716B37A7E250D37AFFDEA', 'cip14': '76EB4C046F052AE4ED41060BF60067FB', 'cip15': '1273A4BC420BCC9E29619567B1E61762', 'cip12': '5577374ADCF2F58EEEFFC432C42AEB76', 'cip13': 'CD9D355C3574343BC7FBE645CE7EA721', 'key42': '000000000000000000000000000000000000000000000000', 'key43': '000000000000000000000000000000000000000000000000', 'key48': '000000000000000000000000000000000000000000000000', 'key49': '000000000000000000000000000000000000000000000000', 'cip18': '5A54D764EEFFC4B64143A58B071514B4', 'cip19': 'F4F1567BDC5B1F938D5A214419090FE0', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': '4DE2B8FFF3588A5D4E62CADB720E5BCC', 'cip124': 'E26C6B2CBE2130729A5BF96E7CD29912', 'cip126': 'B96DD46C6A286BFF721693A98491F529', 'cip121': 'C464728025916B4E8D56E4A9F98C1A25', 'cip120': '31C62401D6E9E4995C0913747BFE7C7E', 'cip123': '0C06EAC3043ABE6554C2DA42F21E7B05', 'cip122': '0D4643EE09ABD6D6062187789AE9A77D', 'cip58': 'E08686BFAA936E1890AEEC834E3B474A', 'cip59': '10DC4FFCAC5F5A1FB668277E8E75BEAB', 'cip52': 'E68CC86CA4D952BC3890AEC0A7AAA4B5', 'cip53': '02A88364BF94A677124F670A566E3F0D', 'cip50': '4F9402FF56D04C8FB37DBE1A3109D2DE', 'cip51': '342DAAD90F0F1699048D5CD16FDA2EC7', 'cip56': 'B27063442470BE07DCC2256EC71A4F1A', 'cip57': '222CC5A29084A4BDB05D4C2FD95648DF', 'cip54': 'C961EF325E2A32A4359CC63BE1EE2C77', 'cip55': '03BF43C9083E4D9919D12FE5C0315E67', 'cip4': 'C6A61053C48D7ECD7DDD12DB0F316AD7', 'cip5': 'EA5833714F1324DAB7F53CACC63F784F', 'cip6': '450BCB0C7351CB1CDAC5D02E80D13C64', 'cip7': 'C267D3634F84215FB7B4635AFA385E52', 'cip0': '62EF193EDB7D399ACA50EC1CBE5398D8', 'cip1': 'E7A58D547688BA8B69DA949E38AA6FAD', 'cip2': '71579F70A8EDB2BA5C00C513E2D7DEEB', 'cip3': 'C6171EF892F8224DC5FAE230AF629F52', 'cip8': '6DB5B1B156DA1C36B9AB5AB59B063C29', 'cip9': 'EDF2D9B19FF75561E8FA6F411C4A0431', 'key79': '000000000000000000000000000000000000000000000000', 'key78': '000000000000000000000000000000000000000000000000', 'key75': '000000000000000000000000000000000000000000000000', 'key74': '000000000000000000000000000000000000000000000000', 'key77': '000000000000000000000000000000000000000000000000', 'key76': '000000000000000000000000000000000000000000000000', 'key71': '000000000000000000000000000000000000000000000000', 'key70': '000000000000000000000000000000000000000000000000', 'key73': '000000000000000000000000000000000000000000000000', 'key72': '000000000000000000000000000000000000000000000000', 'cip24': '4FE9A0CF34BBCFFF906D8450197CC9D1', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '000000000000000000000000000000000000000000000000', 'key109': '000000000000000000000000000000000000000000000000', 'key100': '000000000000000000000000000000000000000000000000', 'key101': '000000000000000000000000000000000000000000000000', 'key102': '000000000000000000000000000000000000000000000000', 'key103': '000000000000000000000000000000000000000000000000', 'key104': '000000000000000000000000000000000000000000000000', 'key105': '000000000000000000000000000000000000000000000000', 'key106': '000000000000000000000000000000000000000000000000', 'key107': '000000000000000000000000000000000000000000000000', 'key28': '000000000000000000000000000000000000000000000000', 'key29': '000000000000000000000000000000000000000000000000', 'cip98': 'D18104617258AB02AAE02ECCF552A891', 'cip99': '8DC66F1D7648EB62F1DCBEB3CD237985', 'cip96': '774EDF219459A4744AA1CCDE7D969A60', 'cip97': '1D7B340C4CE68AC97369FFF0FF9980C8', 'cip94': '0C8746747460A540E2304B55C12EA672', 'cip95': 'DD6D4D2AA3EB702C597E4E2DE59BF4C9', 'cip92': '0EE175DF45B889CED6974E9C2B8F8A78', 'cip93': '6131A1A18F00CFDA5B4AF4FBE5487445', 'cip90': '382BC583EC9B6E16E3DF2188CF0BF1E8', 'cip91': '632C9AD674BD1B8A15827A789BD133A7', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '000000000000000000000000000000000000000000000000', 'key30': '000000000000000000000000000000000000000000000000', 'key33': '000000000000000000000000000000000000000000000000', 'key32': '000000000000000000000000000000000000000000000000', 'key35': '000000000000000000000000000000000000000000000000', 'key34': '000000000000000000000000000000000000000000000000', 'key37': '000000000000000000000000000000000000000000000000', 'key36': '000000000000000000000000000000000000000000000000', 'key39': '000000000000000000000000000000000000000000000000', 'key38': '000000000000000000000000000000000000000000000000', 'cip29': 'B1F92601B6D8C6B81176A46EE7341D28', 'cip28': '91544D597F679E7DFE6D16D475809851', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': '9B421C68873D49F07E3B9025AD609787', 'cip111': '5B182593B47DC674D8B1942CB97224B2', 'cip112': 'A896871A3157CCD1F5A788E253A6B0FD', 'cip113': '789A3D2B2A70181EFCCE5529F200DC44', 'cip114': '7F9462D23DB6E99AD0A54EA84DBD94E2', 'cip115': '23EAFE1F7CCE96B6BFE2484E1DFC4AB9', 'cip116': 'A76C323805F9C252C8B86C83294B9987', 'cip117': 'D8CA1075B7A3F2CF2DAC0980B1B66CC1', 'cip118': '8206D89F2A07BA6403647FB85A2F4D7D', 'cip119': '3DE7573CD46D85488364472B038869F9', 'cip67': '1779BDFAC6DB722BCAF4D3A8D9D2E725', 'cip66': '59723DB66EDB29A9C81175668903777F', 'cip65': '9570E7A96D4674C800AF8DCD01DEFF64', 'cip64': 'B5D919DFD9828C4FF4427E72ABFC77B2', 'cip63': '96B3608C06112F619B156105EB082BBE', 'cip62': '2072191C277EE40FD557FF5F67A2A546', 'cip61': 'DDF718A1BEB37CC1B0905520DB7C1611', 'cip60': '03A9199978F9D652A4C528FF86C39CE9', 'cip69': '36A6CAA08BD5D2B332E9323F7C2E76CA', 'cip68': '5107B50A150998C6EA01C14697FC0E53', 'key68': '000000000000000000000000000000000000000000000000', 'key69': '000000000000000000000000000000000000000000000000', 'key66': '000000000000000000000000000000000000000000000000', 'key67': '000000000000000000000000000000000000000000000000', 'key64': '000000000000000000000000000000000000000000000000', 'key65': '000000000000000000000000000000000000000000000000', 'key62': '000000000000000000000000000000000000000000000000', 'key63': '000000000000000000000000000000000000000000000000', 'key60': '000000000000000000000000000000000000000000000000', 'key61': '000000000000000000000000000000000000000000000000', 'key117': '000000000000000000000000000000000000000000000000', 'key116': '000000000000000000000000000000000000000000000000', 'key115': '000000000000000000000000000000000000000000000000', 'key114': '000000000000000000000000000000000000000000000000', 'key113': '000000000000000000000000000000000000000000000000', 'key112': '000000000000000000000000000000000000000000000000', 'key111': '000000000000000000000000000000000000000000000000', 'key110': '000000000000000000000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': '1CAD0512E3CC51210B411EE452DF62E4', 'cip22': '49A746CC225C1B6009A93649CDD9EDCD', 'cip21': 'C082154A07AF64FF6ECA811B0E3302E6', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'F0F518F73795AB51BFB6E0AA99A0DAC7', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': '08DB3F476F551D19D9643A9E139E0553', 'key9': '000000000000000000000000000000000000000000000000', 'key8': '000000000000000000000000000000000000000000000000', 'cip25': '38DB8EF6C8993F17BB4D1614B9DE15D4', 'key3': '000000000000000000000000000000000000000000000000', 'key2': '000000000000000000000000000000000000000000000000', 'key1': '000000000000000000000000000000000000000000000000', 'key0': '000000000000000000000000000000000000000000000000', 'key7': '000000000000000000000000000000000000000000000000', 'key6': '000000000000000000000000000000000000000000000000', 'key5': '000000000000000000000000000000000000000000000000', 'key4': '000000000000000000000000000000000000000000000000', 'key22': '000000000000000000000000000000000000000000000000', 'key23': '000000000000000000000000000000000000000000000000', 'key20': '000000000000000000000000000000000000000000000000', 'key21': '000000000000000000000000000000000000000000000000', 'cip38': 'BFBB2A537B2C1339D6230F35A256F289', 'cip39': '70E79718C97DDB187411436AC072B148', 'key24': '000000000000000000000000000000000000000000000000', 'key25': '000000000000000000000000000000000000000000000000', 'cip34': 'B6F5C012E4BA15DC86536F328B137FC0', 'cip35': '1C3031DD05EAA4C278B55EF0E7E4C1F9', 'cip36': '3D72A53BD537D04AC59E0AF36D105ED9', 'cip37': 'A6FFE499A2050C38F4E89DBF12B27430', 'cip30': '796C3A8CBC6450E51FA6F8765ACD0F10', 'cip31': '5F7BFE71BD2E81599DDA3411BC1CA579', 'cip32': '2DF7D576EC6296101CAB16012092C12C', 'cip33': '20769DE071FBE22AE49E7B3F5D646418', 'key97': '000000000000000000000000000000000000000000000000', 'key96': '000000000000000000000000000000000000000000000000', 'key95': '000000000000000000000000000000000000000000000000', 'key94': '000000000000000000000000000000000000000000000000', 'key93': '000000000000000000000000000000000000000000000000', 'key92': '000000000000000000000000000000000000000000000000', 'key91': '000000000000000000000000000000000000000000000000', 'key90': '000000000000000000000000000000000000000000000000', 'key99': '000000000000000000000000000000000000000000000000', 'key98': '000000000000000000000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': 'D7A254B7341C7677C72F9DE729A3BB78', 'key126': '000000000000000000000000000000000000000000000000', 'key124': '000000000000000000000000000000000000000000000000', 'key125': '000000000000000000000000000000000000000000000000', 'key122': '000000000000000000000000000000000000000000000000', 'key123': '000000000000000000000000000000000000000000000000', 'key120': '000000000000000000000000000000000000000000000000', 'key121': '000000000000000000000000000000000000000000000000', 'cip109': '75F7005CA9C6EE5A1F9A4897FA67C661', 'cip108': 'D307263273E250C0B9E08FF23003B0D1', 'cip107': '971D07AEEDBCA5B7BDCD033F708C97DB', 'cip106': 'B442FF3318822EA7F60E2A8A082A043A', 'cip105': '047CBACDC5EA84771A61FE1204813D46', 'cip104': '16F53F3A6CC3B4F86DDA1B8792244901', 'cip103': 'EFE662AF24D9997FAE45CAD4F92F3091', 'cip102': '6E1CDC049333211B4D7533E21504D200', 'cip101': '89239AAFE9BA86E5EC794397E0180111', 'cip100': 'ABF090054ABE052ECE0B07BE6B6CC6DB', 'cip70': 'D1CF37451667EDB8D2E9934D39A27A92', 'cip71': '4E96227B0A018755FBE8AD5BF0E421B0', 'cip72': '3221B3D3A24745B483BBF99509B330A0', 'cip73': '98A4AB39B84D21D36A5DDC2660BD68C5', 'cip74': 'E5C351E1783465EDBA5CE0592BC77E8E', 'cip75': '35489488EE33D0344C1BDB6263D28286', 'cip76': '97EA899F53C60536DAFEB18123FD6C5B', 'cip77': '8511B11C7D2D8FBF63702A7E3AACA08A', 'cip78': 'FE0C90596E4F47FD8A9927D83F4DCA52', 'cip79': '186FE000683CC19F621BC6C2DA300B71', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '000000000000000000000000000000000000000000000000', 'key118': '000000000000000000000000000000000000000000000000', 'key59': '000000000000000000000000000000000000000000000000', 'key58': '000000000000000000000000000000000000000000000000', 'key53': '000000000000000000000000000000000000000000000000', 'key52': '000000000000000000000000000000000000000000000000', 'key51': '000000000000000000000000000000000000000000000000', 'key50': '000000000000000000000000000000000000000000000000', 'key57': '000000000000000000000000000000000000000000000000', 'key56': '000000000000000000000000000000000000000000000000', 'key55': '000000000000000000000000000000000000000000000000', 'key54': '000000000000000000000000000000000000000000000000', 'cip20': '6CB91B935A0FBF49636CDF64A12955B7', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '000000000000000000000000000000000000000000000000', 'key45': '000000000000000000000000000000000000000000000000', 'key46': '000000000000000000000000000000000000000000000000', 'key47': '000000000000000000000000000000000000000000000000', 'key40': '000000000000000000000000000000000000000000000000', 'key41': '000000000000000000000000000000000000000000000000'} |
dict_twofish_ecb_vt_k256 = {'cip10': 'CB4F69BCC76A2499C6FCFBBE4CEB8CFB', 'cip11': '0442F15EA2BD6D9EB773F9B99804DF56', 'cip49': '95C18EBA59E3CB6359DE7CCE9E8751F9', 'cip48': 'BCDF1C8686E68810FE90B16ECAB46147', 'key19': '0000000000000000000000000000000000000000000000000000000000000000', 'key18': '0000000000000000000000000000000000000000000000000000000000000000', 'key17': '0000000000000000000000000000000000000000000000000000000000000000', 'key16': '0000000000000000000000000000000000000000000000000000000000000000', 'key15': '0000000000000000000000000000000000000000000000000000000000000000', 'key14': '0000000000000000000000000000000000000000000000000000000000000000', 'key13': '0000000000000000000000000000000000000000000000000000000000000000', 'key12': '0000000000000000000000000000000000000000000000000000000000000000', 'key11': '0000000000000000000000000000000000000000000000000000000000000000', 'key10': '0000000000000000000000000000000000000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '0000000000000000000000000000000000000000000000000000000000000000', 'key81': '0000000000000000000000000000000000000000000000000000000000000000', 'key82': '0000000000000000000000000000000000000000000000000000000000000000', 'key83': '0000000000000000000000000000000000000000000000000000000000000000', 'key84': '0000000000000000000000000000000000000000000000000000000000000000', 'key85': '0000000000000000000000000000000000000000000000000000000000000000', 'key86': '0000000000000000000000000000000000000000000000000000000000000000', 'key87': '0000000000000000000000000000000000000000000000000000000000000000', 'key88': '0000000000000000000000000000000000000000000000000000000000000000', 'key89': '0000000000000000000000000000000000000000000000000000000000000000', 'cip41': '079BDF2DAD2CE6FB7D21BBD76A7ABF48', 'cip40': '4E1FD4BC99AEA3BCC6B9066EC6329D43', 'cip43': 'FD854A50372E5D301367D8E98CC88028', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': '73A43C713898BA7D7D2B6BC8673A7AAA', 'cip44': '8CE94A2C43B01825CE5F271135481BB2', 'cip47': '3F168CD782896F22C56A92A09EA7E162', 'cip46': '13873CFBDED482C0B7B435025A9F1CF4', 'key26': '0000000000000000000000000000000000000000000000000000000000000000', 'key27': '0000000000000000000000000000000000000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '22D29CFEF3A6DC0EC67A9EA8523D6158', 'cip88': '59A9E8C14ACBCEC235529425CF86998E', 'cip85': '3D234C0F78ECBEFCCDCE1EA6EC98C145', 'cip84': 'E93AEB7AD76A6AD0AF4092F363421F1B', 'cip87': '1CF1A160FAD7E744F08BA1454A999211', 'cip86': 'BA300B0234F0C96125D33123CDD7D6A4', 'cip81': 'F7BA140AED4756B26789498A17EBF62D', 'cip80': 'ACE4949143D4D1441AA854331E7F511B', 'cip83': '4CF26F088604368B17DDC09FF9D0146D', 'cip82': 'F23E08B81ACB75FE2326A94ECC5968AC', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': 'B27A42D2C870DC96BC6C551218C44CC4', 'cip17': 'CE8D23E64E6BC18208CEEB282E387326', 'cip14': 'D08EF37A59D94ED645B1D1B160E3E816', 'cip15': 'E91891CAC17FE493C7167C6CB59DCB69', 'cip12': '9CE6896C15C3CC00E2AA1944D7117B98', 'cip13': 'E934066740023616B349F45582442647', 'key42': '0000000000000000000000000000000000000000000000000000000000000000', 'key43': '0000000000000000000000000000000000000000000000000000000000000000', 'key48': '0000000000000000000000000000000000000000000000000000000000000000', 'key49': '0000000000000000000000000000000000000000000000000000000000000000', 'cip18': '36F76678A27F2F5A436073D5ADA4AB3B', 'cip19': 'D0EAA36F9A648905B277F0BD24B1A339', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': '0137C87257A8CBD18C218A867B3AB5F8', 'cip124': '8FD0F15E2504A8F4FD751CA7799FFB1D', 'cip126': '3DB0F1674F187DF1CB036DB33A05A0D7', 'cip121': '40CD83A5F0BFD0E1D7FE14299CECFB7C', 'cip120': 'F218D92AED363C6829F7FA3BA346E0FB', 'cip123': 'C7A5A88356152E95F36739AB5EF9F63F', 'cip122': '512F022157AEF0015E93F3737911A35E', 'cip58': '1344C1E04A9D97668A240D82396AC021', 'cip59': '9067BAA44C264E9A2AEC292390A6F492', 'cip52': '453912532144CED54B7D4049BC8B8CF2', 'cip53': 'C6DBBF405A056A80CA788267538FE8F0', 'cip50': '03CFEA7D36D56552CDEF806215EA7596', 'cip51': 'CC189A2E8F529EB139DCA2033109F40B', 'cip56': '9CC3EB61A9907F5F22251239A9EB38ED', 'cip57': '726A3EE922EDFE52206C2191E1F045F4', 'cip54': '2EB5E272874CE244A328BA6410480B4C', 'cip55': '263BFB611CBD9D9C7FF6B1A9E3276696', 'cip4': 'DC3B1C37C69B4059EAADF03FCD016EB4', 'cip5': '3C9D9BD904E0E6916089A4BAC35E5368', 'cip6': 'C47DA045701B93A388E76FCBCD349F22', 'cip7': '52F264B196925A345CA5ADC57C234B96', 'cip0': '23A385F617F313DAC05BCB7EABD61807', 'cip1': '35BE2B4738602A1DA3DE5C9E7E871923', 'cip2': '03E8BB7A568E95BA792DCE77D5523C2B', 'cip3': 'D3ACBE92C482D2E806FD837E41DBB288', 'cip8': 'C923754C5AD2E3F842D01705A716BE8A', 'cip9': '630075C7563CDBACDFEADB781CC9467C', 'key79': '0000000000000000000000000000000000000000000000000000000000000000', 'key78': '0000000000000000000000000000000000000000000000000000000000000000', 'key75': '0000000000000000000000000000000000000000000000000000000000000000', 'key74': '0000000000000000000000000000000000000000000000000000000000000000', 'key77': '0000000000000000000000000000000000000000000000000000000000000000', 'key76': '0000000000000000000000000000000000000000000000000000000000000000', 'key71': '0000000000000000000000000000000000000000000000000000000000000000', 'key70': '0000000000000000000000000000000000000000000000000000000000000000', 'key73': '0000000000000000000000000000000000000000000000000000000000000000', 'key72': '0000000000000000000000000000000000000000000000000000000000000000', 'cip24': 'FE776B4476A4F029E5EA9293E3C1BCA1', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '0000000000000000000000000000000000000000000000000000000000000000', 'key109': '0000000000000000000000000000000000000000000000000000000000000000', 'key100': '0000000000000000000000000000000000000000000000000000000000000000', 'key101': '0000000000000000000000000000000000000000000000000000000000000000', 'key102': '0000000000000000000000000000000000000000000000000000000000000000', 'key103': '0000000000000000000000000000000000000000000000000000000000000000', 'key104': '0000000000000000000000000000000000000000000000000000000000000000', 'key105': '0000000000000000000000000000000000000000000000000000000000000000', 'key106': '0000000000000000000000000000000000000000000000000000000000000000', 'key107': '0000000000000000000000000000000000000000000000000000000000000000', 'key28': '0000000000000000000000000000000000000000000000000000000000000000', 'key29': '0000000000000000000000000000000000000000000000000000000000000000', 'cip98': '4A2A6EB6845723C1C790D693B596CDE3', 'cip99': 'EF3D7C67417CA1FEEF03EF71441BDDFE', 'cip96': '9E12338BF484106249754EAA6C441192', 'cip97': 'F13303DC759CA65097EC87F8D854163C', 'cip94': '545BDE9D1C11239ED70D93060F24E397', 'cip95': '720622F5194578B3C24B5DDDC7E30327', 'cip92': 'CD62AD57393A38607436FAF0985C2D50', 'cip93': '5209ADE137B93BA0963528E3E1A40F2A', 'cip90': '513971F979FC906FADD982D7F08E4F05', 'cip91': '6A95C07D7FACF2CD36DF362116A2DD5F', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '0000000000000000000000000000000000000000000000000000000000000000', 'key30': '0000000000000000000000000000000000000000000000000000000000000000', 'key33': '0000000000000000000000000000000000000000000000000000000000000000', 'key32': '0000000000000000000000000000000000000000000000000000000000000000', 'key35': '0000000000000000000000000000000000000000000000000000000000000000', 'key34': '0000000000000000000000000000000000000000000000000000000000000000', 'key37': '0000000000000000000000000000000000000000000000000000000000000000', 'key36': '0000000000000000000000000000000000000000000000000000000000000000', 'key39': '0000000000000000000000000000000000000000000000000000000000000000', 'key38': '0000000000000000000000000000000000000000000000000000000000000000', 'cip29': '287D27FB1CA40821294B1AFC868F3A6F', 'cip28': '96C88E46C1C2BA0B583F30FE0248A794', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': '18BD598BFA2C77E21DBD594EE0E5CDCB', 'cip111': '248CF533016A6AB1F84F85B2C5CD41A7', 'cip112': 'A3B12F578353514CCC500ADD6C495A6C', 'cip113': 'EE2DC099B37D200B4D3930A6DE07208E', 'cip114': '412C9F198D58A0F01F66DF07CF211636', 'cip115': '5B3532BA46716B02E761339DBAFBAAB0', 'cip116': '0148187CA72EC46B522E4FE7E1261522', 'cip117': '84C529CC4E23683AB90A24A6690662ED', 'cip118': '0D1EF0481593A3D95F0361C776D9A4D2', 'cip119': 'D622171C73726DB6620FFDA6540D510E', 'cip67': 'C324FF5F71A974F13F5D83226441E3BD', 'cip66': '019D3B42FA31A9F9175759E6C3193A07', 'cip65': '4584FCBB487171176C4318082EFEFDF7', 'cip64': '7604D9F3110F8440917ABCEA49710ADA', 'cip63': '76C59131EFFAE14058D99E22698B602D', 'cip62': '44BAD80B0BA01E971ADC4139D6DE0C36', 'cip61': 'DF0D31D14D81FD086E8E32479919FDBC', 'cip60': '1176621BD24D35670B08D6A065806B02', 'cip69': 'FBB99A524AC23D74047D814EC0AEDBE2', 'cip68': 'D9DF41408DFF80DE7C9571706B39038F', 'key68': '0000000000000000000000000000000000000000000000000000000000000000', 'key69': '0000000000000000000000000000000000000000000000000000000000000000', 'key66': '0000000000000000000000000000000000000000000000000000000000000000', 'key67': '0000000000000000000000000000000000000000000000000000000000000000', 'key64': '0000000000000000000000000000000000000000000000000000000000000000', 'key65': '0000000000000000000000000000000000000000000000000000000000000000', 'key62': '0000000000000000000000000000000000000000000000000000000000000000', 'key63': '0000000000000000000000000000000000000000000000000000000000000000', 'key60': '0000000000000000000000000000000000000000000000000000000000000000', 'key61': '0000000000000000000000000000000000000000000000000000000000000000', 'key117': '0000000000000000000000000000000000000000000000000000000000000000', 'key116': '0000000000000000000000000000000000000000000000000000000000000000', 'key115': '0000000000000000000000000000000000000000000000000000000000000000', 'key114': '0000000000000000000000000000000000000000000000000000000000000000', 'key113': '0000000000000000000000000000000000000000000000000000000000000000', 'key112': '0000000000000000000000000000000000000000000000000000000000000000', 'key111': '0000000000000000000000000000000000000000000000000000000000000000', 'key110': '0000000000000000000000000000000000000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': 'C784C5EA8CE3897F153336047D2FE3E0', 'cip22': '0A7FCF71DAC023718153FFB761BAEBEF', 'cip21': '013CAE3986083F8D321273D68CA9784D', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'C5579556F710EACFAD9319AA85B89F6F', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': 'E6C43F6F62F1EEE0BDB3484F325053B6', 'key9': '0000000000000000000000000000000000000000000000000000000000000000', 'key8': '0000000000000000000000000000000000000000000000000000000000000000', 'cip25': '302A5F9A73B07D83699EB9DE1D86DB7B', 'key3': '0000000000000000000000000000000000000000000000000000000000000000', 'key2': '0000000000000000000000000000000000000000000000000000000000000000', 'key1': '0000000000000000000000000000000000000000000000000000000000000000', 'key0': '0000000000000000000000000000000000000000000000000000000000000000', 'key7': '0000000000000000000000000000000000000000000000000000000000000000', 'key6': '0000000000000000000000000000000000000000000000000000000000000000', 'key5': '0000000000000000000000000000000000000000000000000000000000000000', 'key4': '0000000000000000000000000000000000000000000000000000000000000000', 'key22': '0000000000000000000000000000000000000000000000000000000000000000', 'key23': '0000000000000000000000000000000000000000000000000000000000000000', 'key20': '0000000000000000000000000000000000000000000000000000000000000000', 'key21': '0000000000000000000000000000000000000000000000000000000000000000', 'cip38': 'BE346B07869425CBCA54F93D7A1F4035', 'cip39': '60EE2023B03033A972E28E4A21C7005F', 'key24': '0000000000000000000000000000000000000000000000000000000000000000', 'key25': '0000000000000000000000000000000000000000000000000000000000000000', 'cip34': '2AB8B9254ADBDCE17F0A719815DEFF7E', 'cip35': '75A30CEAA03AF66E44A85DC66DEB20C9', 'cip36': 'C37E64CE86B615573C4C42BBE71DACD8', 'cip37': '284CB50259A96CCED1C1C64D8B603024', 'cip30': 'F4602DF76A24010DE5A1353043CF178E', 'cip31': '47F98AA9DF5E7314D3D5571EF6B95284', 'cip32': '77CBF7DCA60F913FD9C82AC65212EBB2', 'cip33': 'BEB1C2BC4B5C363FCF5A0466883079A9', 'key97': '0000000000000000000000000000000000000000000000000000000000000000', 'key96': '0000000000000000000000000000000000000000000000000000000000000000', 'key95': '0000000000000000000000000000000000000000000000000000000000000000', 'key94': '0000000000000000000000000000000000000000000000000000000000000000', 'key93': '0000000000000000000000000000000000000000000000000000000000000000', 'key92': '0000000000000000000000000000000000000000000000000000000000000000', 'key91': '0000000000000000000000000000000000000000000000000000000000000000', 'key90': '0000000000000000000000000000000000000000000000000000000000000000', 'key99': '0000000000000000000000000000000000000000000000000000000000000000', 'key98': '0000000000000000000000000000000000000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': '6B933D9914169C2A704E52EC6D7E4E1D', 'key126': '0000000000000000000000000000000000000000000000000000000000000000', 'key124': '0000000000000000000000000000000000000000000000000000000000000000', 'key125': '0000000000000000000000000000000000000000000000000000000000000000', 'key122': '0000000000000000000000000000000000000000000000000000000000000000', 'key123': '0000000000000000000000000000000000000000000000000000000000000000', 'key120': '0000000000000000000000000000000000000000000000000000000000000000', 'key121': '0000000000000000000000000000000000000000000000000000000000000000', 'cip109': '2F3AA68FFE3B99DC92621782F3F9ED67', 'cip108': 'BEF65A32FF7383CFDB5A90C2F3B93837', 'cip107': '1C11730D62BCA6F847B1457B5287BD12', 'cip106': '5AF4F5E8491EE7F87EB809D82AEC12DB', 'cip105': '4C9902E89253D7A172BABFA87DB94816', 'cip104': 'E650CB445AF48A77E8DB6E2EFBCE6FA7', 'cip103': '05C6D61B75312924E0BCEDCB4B8D55DD', 'cip102': 'AC9D55D4A4FBB80C9B79C9077BA381B1', 'cip101': 'DCFFDB5E44574D0D593A70ADA4C79474', 'cip100': '214FB38A7511A87CF160F59CCA2B8E33', 'cip70': '877C855E25345F6C7DB4237ECF64C874', 'cip71': '206500F822C1305F9D61F49FC57AFBF2', 'cip72': 'C7538D97A78844C3C00740865E26755B', 'cip73': 'FADBC4A6E4564041ADA094C603CABAA4', 'cip74': '04C482E0707DE6DC1917727D00C4FA6B', 'cip75': 'EE36B8996AFF98BEA6E2115B9D173321', 'cip76': 'DBA4A5F38B104985D796ECDDD812B605', 'cip77': '1DC0F910CD5AF1E5734169459E170192', 'cip78': 'C3B7D6914052503D377B01DB4E3A630D', 'cip79': '54D807506602ECF7D6B8C4D923317738', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '0000000000000000000000000000000000000000000000000000000000000000', 'key118': '0000000000000000000000000000000000000000000000000000000000000000', 'key59': '0000000000000000000000000000000000000000000000000000000000000000', 'key58': '0000000000000000000000000000000000000000000000000000000000000000', 'key53': '0000000000000000000000000000000000000000000000000000000000000000', 'key52': '0000000000000000000000000000000000000000000000000000000000000000', 'key51': '0000000000000000000000000000000000000000000000000000000000000000', 'key50': '0000000000000000000000000000000000000000000000000000000000000000', 'key57': '0000000000000000000000000000000000000000000000000000000000000000', 'key56': '0000000000000000000000000000000000000000000000000000000000000000', 'key55': '0000000000000000000000000000000000000000000000000000000000000000', 'key54': '0000000000000000000000000000000000000000000000000000000000000000', 'cip20': '82BE0E3673E7872BF79BBE2A45F4BD93', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '0000000000000000000000000000000000000000000000000000000000000000', 'key45': '0000000000000000000000000000000000000000000000000000000000000000', 'key46': '0000000000000000000000000000000000000000000000000000000000000000', 'key47': '0000000000000000000000000000000000000000000000000000000000000000', 'key40': '0000000000000000000000000000000000000000000000000000000000000000', 'key41': '0000000000000000000000000000000000000000000000000000000000000000'} |
#constant plaintext of all zero's and variable keys |
dict_twofish_ecb_vk_k128 = {'cip10': 'D4580FC395979689221C57A23598358B', 'cip11': '35CA62BA8126F015FABFEF8F9119AE6B', 'cip49': '913EB9205DB2E17A96A23A724EDF4C84', 'cip48': 'C2652FDB48B9DDBFC43B3F7CDD831D6F', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'cip41': 'D50A1F966058C6D702D1AFCD700DA0E8', 'cip40': '3E1BC58269B6B8C8C8D00806975F8337', 'cip43': '9ED4EA506A0CBA89B246C14D1B5B96A9', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'msg68': '00000000000000000000000000000000', 'cip45': '06562AC497C60F802B68B47DB5B86B6A', 'cip44': 'C395A92C1A6884857B263F01F43542DB', 'cip47': 'B8FD6A8227D0565A4C174AD270EC1205', 'cip46': '255A726F2106177FEFA7006BDE05D059', 'key26': '00000020000000000000000000000000', 'key27': '00000010000000000000000000000000', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': '325163F073E5A27EBAF339B1FA53682D', 'cip88': 'C0860A7B47544872B9DB5C220088DE5C', 'cip85': 'E8B4F95053617F6A10120DB196AAC4D1', 'cip84': '594B2917DE6119B62BE3DDF10A1A47E0', 'cip87': '5E7E6175F6B548E5389C1B1C391CBEE2', 'cip86': '79646B1CC19708973215B9891A2C1019', 'cip81': '6CE0A0BA02041CB5E6C0A46DE1B71A43', 'cip80': 'C0A7B6BCE0675A48E95D39A7659CB20A', 'cip83': 'BB652196955BB7BE7E8CB8E2E992A750', 'cip82': 'E54045C33A386555C5754ADB0A181244', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'cip16': 'FD49069AE9F1874A264A7BFD894ED886', 'cip17': '232755C754075BB5CC5B85ABFEA38779', 'cip14': 'A0941008068D401DEAB6400C86CA53AD', 'cip15': '2B63BEF50BA87A58BFFCA4CF44C22927', 'cip12': 'C81FACB16E087EEFA823CF34E02FE482', 'cip13': '07400F04E4CC6625AE3FB41ECC863F2A', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip18': '41358B9C76E959037E13F7E5050E0B42', 'cip19': '8978CD09C054BB1ABDFFBED09D1CF7EC', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '7DD12AD3BC7A419F92753D8CC39637F0', 'cip124': '6C4C8811B4DF74F2A7D7F79A6253CEA7', 'cip126': 'A465B01EA32B2F4F87C85FD06F9B0A02', 'cip121': 'DB720E7B04462829DFA258ED9E7C7F2F', 'cip120': '4E171141E51234DE6E4B236643A6DC85', 'cip123': 'F0E35BFF226C064E08368AF440298DB9', 'cip122': '8B10E11115FF4336DE57F2EA13AABBFA', 'cip58': '46B1EB96EC9EB10897F1562E59287253', 'cip59': '1793F1D4E1A1606F99C7019C19E85129', 'cip52': 'E70F0D4ED829A81E05D42E511EDE9376', 'cip53': '140BB7CAD8D6A3553BEF7A3D52347BD8', 'cip50': '9A6694FEB5EA44FF0572124FDB265658', 'cip51': 'E347498DECA6B211C30E21FD0B47A333', 'cip56': 'E2799D5C380B49D2F6997009079D03D3', 'cip57': '06AFBD8077909E847AF467BB2D47E893', 'cip54': '5FA55360F440DCCA20925A3E15B42764', 'cip55': '6D5B969DFC3EA0A6682CC66488D221DA', 'cip4': 'F026BFDF6BFBC7E50C46C533BD271C24', 'cip5': 'F3023228D77045D37D1B9CD77437395A', 'cip6': 'F67467BF6B490209809714D50679B2D7', 'cip7': '2C8431B922C5F560095E9867B1A41256', 'cip0': '6BFD32804A1C3206C4BF85EB11241F89', 'cip1': 'F097147AE851845984DC97D5FAE40CF9', 'cip2': '6117F1977C5ABD9647C56544D9458444', 'cip3': '75A6240AAE357DEDDF99936705618284', 'cip8': '1FB76E90D207BA4C770F67284D6B1359', 'cip9': 'A70AECE1D41DCA9F24BCE8393F6D54BF', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'cip24': 'FCD577A23F455ACDE3732C262EBD2D86', 'msg99': '00000000000000000000000000000000', 'msg98': '00000000000000000000000000000000', 'msg95': '00000000000000000000000000000000', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'key28': '00000008000000000000000000000000', 'key29': '00000004000000000000000000000000', 'cip98': '34589936B79E4F43260DC6CCD1820D6D', 'cip99': 'C7A8FF65CD38D008EC6745897E010122', 'cip96': 'D80D1378E30036D92B4A359F68D0CBFE', 'cip97': 'EDA13B315897290E4ACEB4B513E9749B', 'cip94': 'B6AD728D2970637642723FF06204EEAD', 'cip95': '0ADF4A82FFE602BC13002AA8AB24EA71', 'cip92': 'D3B9999669509564741F236EEF2401F3', 'cip93': '3376DA406D82B76591B610C6C9FC3F9E', 'cip90': '1A0C4583CEFF5810F3AB42A471415A1D', 'cip91': 'F8DDF239D19363957C7C8C9B537893FA', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'cip29': 'AC4CDB534844EA86000B845FCDAD605F', 'cip28': '29A9D577BB3824209FEA64128247CE6C', 'msg69': '00000000000000000000000000000000', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'cip110': '178FB7443FBD17DCF1AF122D4D117239', 'cip111': 'C55C99851BD135155A080A9C4E54B919', 'cip112': 'AD75C80D72EA278B3EDE380DAAB1F708', 'cip113': '95054D1ECA74F75515AE8C17941D3A54', 'cip114': '8E0B0D4F95C9C9D65420B4B1869A1D3E', 'cip115': '7712EA2F0598CC8CFB9A934DEC848B5F', 'cip116': '9D730E0F7450183C0804D6817CBE058E', 'cip117': '3FA52E9B242F9AF61322FBB6BA583A01', 'cip118': '3D47D74F667D60458188922EE8D8A7A0', 'cip119': '036B4E4E02D84C56AC61007DAC33EC33', 'cip67': '929B29DD0D952161FFDA8CB417B166EC', 'cip66': 'C9BDCFFD4B9F3BBBB33A2D2C51BA83F6', 'cip65': '4C8D0E13996F4D32CB7984B7BB1B34FB', 'cip64': '6C5E5719D5F31E929FF9C44F086EFADB', 'cip63': '06FFB5E13438BA8DBD8A3EDADFAC73A1', 'cip62': '150C12DEF6EDC844B0B45361C2B3AECE', 'cip61': '298DF7334670B7391BE203DF7E8890C7', 'cip60': 'ED785D0BA19553CE73B69F4D570C3A9D', 'cip69': '6FDFD0BC8F49BE420CD68A894C7CA4E9', 'cip68': '87F9DFCB07275916E7A446D3DCE74232', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'key111': '00000000000000000000000000010000', 'key110': '00000000000000000000000000020000', 'msg86': '00000000000000000000000000000000', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'msg81': '00000000000000000000000000000000', 'cip23': '9D3C6C8ED48C9DE7A64CD05D8BF41D54', 'cip22': 'BCD56984E45DBF087BAC8757FC4EFF5A', 'cip21': '6AA2F0627F312A77C68D1F15DF0E1379', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'cip27': '88BD93610040DFE248C2FE05EF9F4FE0', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'cip26': '5742CA8CF1193491C1FBC148627D856E', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'cip25': '022E2430D81858888C9E575411D4064F', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'cip38': '932218D99553BB2D4BFC69F1EA67CAAE', 'cip39': '399D066426F7FEF66F8983086DC044D8', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'cip34': '2176DEBC78D6B4A6D0FB37AFA6B51081', 'cip35': 'FDB1B57379B85A85392613E8B4597B63', 'cip36': '58AB1112E0598586E07FC8359DDFC7EC', 'cip37': 'DD6D1D2629F333528CB66869453BC273', 'cip30': 'AAC6098597D46B8145A60F40D4EC5308', 'cip31': '3A7DFD0855A5BE0B16CACBD685FACEF5', 'cip32': 'ACEBA627EBA87AD051C3E0CA0DEF6CD7', 'cip33': 'F0A55DCDBC513EFDD603EA455EB9228C', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'msg77': '00000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'msg75': '00000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'cip42': '6E7A6BB3554F12AD1F88C289D621CD0F', 'key126': '00000000000000000000000000000002', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'cip109': '5C78C4BC8F15DC964FE9EC75203AD7D8', 'cip108': 'B7C226C60B6F3031A1E2160823A62679', 'cip107': '0F714C096C244BED865A9E064576FE5D', 'cip106': 'EC7FE3578906291B2DCF0AD7FF8B5358', 'cip105': '713738F580CED6E358D2CDCEDA64F99F', 'cip104': '5E9B5966ED3A2358005C9773F8690AD9', 'cip103': '3A3064DFF6E0B54D864E81FA76270065', 'cip102': '610D5528725B34FD70ADC66E83BAE266', 'cip101': '27994D1AA909806C7CC8E4AC4CD5479B', 'cip100': '3AFE23D89E79E9F8A54F103ED51EB14D', 'cip70': 'CDDC09DE42DC2CBCD9287A2072A30D23', 'cip71': '9B2FF668BA9D77AD1E9F30BA0173EBD4', 'cip72': 'DEF29890D59A511B32A30322D7471E38', 'cip73': '5094EAEC9F23D0DBFAB8240A42ED5BF1', 'cip74': '79CB87BC375F58DE8DA780B9BAD3DEA3', 'cip75': '7139B3D980B85D3B77A3BBDB6CB79756', 'cip76': '148ED6E8FEC02168377C96956AE18D93', 'cip77': '0AFED5A710F2BF11C77F152951AE32CB', 'cip78': 'C265AC354817550FAE12A51C2DCD749C', 'cip79': 'A3B089F79D0A07EA0893BB48D508B35B', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg88': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'key119': '00000000000000000000000000000100', 'key118': '00000000000000000000000000000200', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'cip20': '9F2A7CE5FD51FD5D7E2D42407EEF8F6A', 'msg103': '00000000000000000000000000000000', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'msg20': '00000000000000000000000000000000', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'key44': '00000000000800000000000000000000', 'key45': '00000000000400000000000000000000', 'key46': '00000000000200000000000000000000', 'key47': '00000000000100000000000000000000', 'key40': '00000000008000000000000000000000', 'key41': '00000000004000000000000000000000'} |
dict_twofish_ecb_vk_k192 = {'cip10': '35FFC8038CB124B8078EC5C7C7928F14', 'cip11': '086025FC1CC6056367304C51DE871DEA', 'cip49': '6557BDB19F03E62D823C0613BEA0FAFB', 'cip48': '09D32779D0C8D02E0670F377187756FC', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '000000000000000000000000000000000000000000000000', 'msg4': '000000000000000000000000000000000000000000000000', 'msg7': '000000000000000000000000000000000000000000000000', 'msg6': '000000000000000000000000000000000000000000000000', 'msg1': '000000000000000000000000000000000000000000000000', 'msg0': '000000000000000000000000000000000000000000000000', 'msg3': '000000000000000000000000000000000000000000000000', 'msg2': '000000000000000000000000000000000000000000000000', 'msg9': '000000000000000000000000000000000000000000000000', 'msg8': '000000000000000000000000000000000000000000000000', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'cip41': '8D489E0496B54F91A0254E4103804145', 'cip40': '7FF241BA32E6878542978957F137856F', 'cip43': '6ED9A5F014FAFAE3D05C4AE027066873', 'msg60': '000000000000000000000000000000000000000000000000', 'msg61': '000000000000000000000000000000000000000000000000', 'msg62': '000000000000000000000000000000000000000000000000', 'msg63': '000000000000000000000000000000000000000000000000', 'msg64': '000000000000000000000000000000000000000000000000', 'msg65': '000000000000000000000000000000000000000000000000', 'msg66': '000000000000000000000000000000000000000000000000', 'msg67': '000000000000000000000000000000000000000000000000', 'msg68': '000000000000000000000000000000000000000000000000', 'cip45': '1EE0680BF9A798A1C63636EA917B17B5', 'cip44': '958453307A371EE2D3DA8DD327D9B51B', 'key139': '000000000000000000000000000000000010000000000000', 'cip47': '9034DDEFF43C9CC82FADE8DE0A2476BB', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'cip46': 'C0CEFB2475B21AA8937E3048604D9928', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'cip178': '8E045AE3022AF7562106681B2B8CB70E', 'cip179': '2C73832593114BF299424E30C5848625', 'cip172': 'D22D10708CBA6566DC096B8ABE3F9679', 'cip173': '1FFC5754FC94465A073B714267DEC18C', 'cip170': '1BFAC7B1B8EB14C26ADA2055E0C9CD36', 'cip171': '9FCA8C1340C47C586D6A2FAD9FAA6833', 'key26': '000000200000000000000000000000000000000000000000', 'cip177': '6E148020BAB1DD04492299F6A9D9BA22', 'cip174': 'FDED0173236B23DF4DFC1953355AA78E', 'cip175': 'FBE9178C4B27E51E24BF17053724AA2F', 'msg188': '000000000000000000000000000000000000000000000000', 'msg189': '000000000000000000000000000000000000000000000000', 'msg186': '000000000000000000000000000000000000000000000000', 'msg187': '000000000000000000000000000000000000000000000000', 'msg184': '000000000000000000000000000000000000000000000000', 'msg185': '000000000000000000000000000000000000000000000000', 'msg182': '000000000000000000000000000000000000000000000000', 'msg183': '000000000000000000000000000000000000000000000000', 'msg180': '000000000000000000000000000000000000000000000000', 'msg181': '000000000000000000000000000000000000000000000000', 'cip187': '682C20B72DDFE4F678B2379FA25715CA', 'cip186': '50434829C09BFB7C174E1BE33642FEFB', 'cip185': 'A6EBD68D0A6F46DA22CD17D4B55BC4FE', 'cip184': '5588729059256CE49AF2DA14EE4C9D00', 'cip183': '18F3BEB5D5A6B6AC512752AAA65EA3BD', 'cip182': '21B968BF3EFFC638F54BC1524D8D378F', 'cip181': 'B25FABDA9D6E6704F23F33B0D907B762', 'cip180': '127FC7BCF85F44F5041158A5EB3D040C', 'key27': '000000100000000000000000000000000000000000000000', 'cip189': '32929E53C8E8D85657B9B55A4911028C', 'cip188': '925721E954372C9EA115BFF97BBE9A12', 'msg15': '000000000000000000000000000000000000000000000000', 'msg14': '000000000000000000000000000000000000000000000000', 'msg17': '000000000000000000000000000000000000000000000000', 'msg16': '000000000000000000000000000000000000000000000000', 'msg11': '000000000000000000000000000000000000000000000000', 'msg10': '000000000000000000000000000000000000000000000000', 'msg13': '000000000000000000000000000000000000000000000000', 'msg12': '000000000000000000000000000000000000000000000000', 'msg19': '000000000000000000000000000000000000000000000000', 'msg18': '000000000000000000000000000000000000000000000000', 'cip89': '9F13CC1BF91C1B49AB6DDD7AF7A05ABA', 'cip88': 'B1ECC134EB7221CE00EBB977E08020E2', 'cip85': 'DE0B6B80C40ED4447E36A84A62EB235D', 'cip84': 'D8E96A3F240666FC02F31E84CD1CEEF1', 'cip87': '02DAE104DA462934D87FDC73EB4011A9', 'cip86': '8B15F04C34FC0F35F96C86837665CB38', 'cip81': 'C3E359420C4C4AF445C470AB347B3667', 'cip80': '7600A0FCF96F24A21419103466B937B5', 'cip83': 'A0001FC4E31664ED8C375644D02717AE', 'cip82': 'D915133DAA11BECB43E020266B709BEC', 'msg115': '000000000000000000000000000000000000000000000000', 'msg114': '000000000000000000000000000000000000000000000000', 'msg117': '000000000000000000000000000000000000000000000000', 'msg116': '000000000000000000000000000000000000000000000000', 'msg111': '000000000000000000000000000000000000000000000000', 'msg110': '000000000000000000000000000000000000000000000000', 'msg113': '000000000000000000000000000000000000000000000000', 'msg112': '000000000000000000000000000000000000000000000000', 'msg119': '000000000000000000000000000000000000000000000000', 'msg118': '000000000000000000000000000000000000000000000000', 'cip16': 'C014C9A992E6366B3BD2EABDF1508187', 'cip17': '4344D702AC78A5808F4AB566D5509B75', 'cip14': 'E2313E3CFCB5E745EBAB983BF2867579', 'cip15': 'B4394412F7B4A1A4A22B73C93BAFD85D', 'cip12': '950F0B7BDFFC78AE3AFF022F78E1670E', 'cip13': 'CADF4568B43C950FB688C6608AAF5FAE', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip18': '937893DA40E9D7F2ECE9028FAA4DE6A4', 'cip19': 'E77874759C6AACB611B715A52A37234A', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'msg59': '000000000000000000000000000000000000000000000000', 'msg58': '000000000000000000000000000000000000000000000000', 'msg51': '000000000000000000000000000000000000000000000000', 'msg50': '000000000000000000000000000000000000000000000000', 'msg53': '000000000000000000000000000000000000000000000000', 'msg52': '000000000000000000000000000000000000000000000000', 'msg55': '000000000000000000000000000000000000000000000000', 'msg54': '000000000000000000000000000000000000000000000000', 'msg57': '000000000000000000000000000000000000000000000000', 'msg56': '000000000000000000000000000000000000000000000000', 'cip125': '5EB1E7293616CD444011950212E53E78', 'cip124': '78665BAC269A5DB3FFE165526A42F688', 'cip127': 'EAAEEA26A8AE037C288DDA6791580418', 'cip126': 'FD682F200B2D5D17D177E785EBCE6C08', 'cip121': 'FCCE30A6961099AD269080FF07A24E1E', 'cip120': '7D6C9C9F375EDDE4A23D83B8B62E198F', 'cip123': 'B96890D4CC0BD3C41A14D0547F98E077', 'cip122': 'C822629D39268498E02E6E4D642E7921', 'cip129': '09C8F1F28B94167498D9377CB9909458', 'cip128': 'AA525000B28A88169212096B6D5FF58D', 'msg159': '000000000000000000000000000000000000000000000000', 'msg158': '000000000000000000000000000000000000000000000000', 'msg151': '000000000000000000000000000000000000000000000000', 'msg150': '000000000000000000000000000000000000000000000000', 'msg153': '000000000000000000000000000000000000000000000000', 'msg152': '000000000000000000000000000000000000000000000000', 'msg155': '000000000000000000000000000000000000000000000000', 'msg154': '000000000000000000000000000000000000000000000000', 'msg157': '000000000000000000000000000000000000000000000000', 'msg156': '000000000000000000000000000000000000000000000000', 'cip58': 'E74FB07622191A053368131DA36FC299', 'cip59': '3CFF40E0E9A86F67D938D2483BDD08F0', 'cip52': 'E3AA0A67CDF79DBAB013103E39E8C822', 'cip53': 'AF3D0C9B673C322355480E8681237D13', 'cip50': '83505664DED694967F2D9E7853BC4B43', 'cip51': '0BBABE3B7F381C3B3D8A9D846D8CCEAC', 'cip56': '76C59CD9185C518D65EC641EB73C6387', 'cip57': '735567D0B8A52203492220804F3D62E6', 'cip54': '60D325226EC8DFB9E08DFADB479649A0', 'cip55': '845B92A3C56880E8007B452B57B73B75', 'cip4': 'E51ADC9773E785730586E6812A0F0FA5', 'cip5': '97067E60FE010AEEA48C0D3224AD0941', 'cip6': 'BB73A7C859E6377A5E42EFCD55CD2C5B', 'cip7': '914BFE25D7FDEE49B46FB5C2B60DACA5', 'cip0': 'B5AED133641004F4121B66E7DB8F2FF0', 'cip1': '998110F200555A32C6C123E66CF87DE9', 'cip2': '2DBAEEEC682DCC957C2D51B0990E123A', 'cip3': 'BAEC0A31F6557D6D13B888A94F63058C', 'cip8': 'EFEF0047892A043A1D594118477CA513', 'cip9': 'BE59CF7C4E4B482843E67B4EB65B3038', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'key190': '000000000000000000000000000000000000000000000002', 'cip24': '5F015060D28C6CCB2E5FDCB5AFDCF309', 'msg99': '000000000000000000000000000000000000000000000000', 'msg98': '000000000000000000000000000000000000000000000000', 'msg95': '000000000000000000000000000000000000000000000000', 'msg94': '000000000000000000000000000000000000000000000000', 'msg97': '000000000000000000000000000000000000000000000000', 'msg96': '000000000000000000000000000000000000000000000000', 'msg91': '000000000000000000000000000000000000000000000000', 'msg90': '000000000000000000000000000000000000000000000000', 'msg93': '000000000000000000000000000000000000000000000000', 'msg92': '000000000000000000000000000000000000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'cip169': '8EA212BFBBF476CE35939066A7F1757D', 'cip168': '2BCFAD82613FFD8D9BCBC539C1158BC9', 'cip161': 'BF9D54F977A978797A4268CFC84132C4', 'cip160': '1B485B0E4A063B844BC2AE8B722D0757', 'cip163': '776EED1A9849173A7AC46E94C9B2681B', 'cip162': '90C50CB6D84B6A74F3D64A419B0419EA', 'cip165': '6F8B5F268B3DBEA72BF0D1F92B13684E', 'cip164': 'A42F612CBF53529173E148ABA2B55D63', 'cip167': '17FE109D4638A9E1FAF130D621C160CB', 'cip166': '9379DA858CEC7AC58856E7DBF79C4757', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'cip98': '40C7CC6385BB634FB68F73CCB5C446C2', 'cip99': '7F0CE574F643711ECFC5011C0BCCD49A', 'cip96': '9516AE03F102950795E1869E07BE0AFB', 'cip97': '4748E60F70C6172E5D5B0C21E67F366C', 'cip94': 'C7CABAB4D7DFFD44C5943EB8E9441C3D', 'cip95': '6DA6716020FDE292E8ADFB2A31BC6B24', 'cip92': 'FA45D9E00E4C221A14C359742AC25C35', 'cip93': 'BC2AC98007820862150CC1B1E3E11ED1', 'cip90': '414D1178475679525B5EE7ED373E2A0A', 'cip91': 'E69F2CC70EF18DBD360DFDD5C6573EBD', 'msg120': '000000000000000000000000000000000000000000000000', 'msg121': '000000000000000000000000000000000000000000000000', 'msg122': '000000000000000000000000000000000000000000000000', 'msg123': '000000000000000000000000000000000000000000000000', 'msg124': '000000000000000000000000000000000000000000000000', 'msg125': '000000000000000000000000000000000000000000000000', 'msg126': '000000000000000000000000000000000000000000000000', 'msg127': '000000000000000000000000000000000000000000000000', 'msg128': '000000000000000000000000000000000000000000000000', 'msg129': '000000000000000000000000000000000000000000000000', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'cip29': 'B96C1E40D0D407ED90D11892503A296F', 'cip28': 'F01FB3FA3E84DEA6057F3D88CD651876', 'msg190': '000000000000000000000000000000000000000000000000', 'key148': '000000000000000000000000000000000000080000000000', 'key149': '000000000000000000000000000000000000040000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'key147': '000000000000000000000000000000000000100000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'msg69': '000000000000000000000000000000000000000000000000', 'msg48': '000000000000000000000000000000000000000000000000', 'msg49': '000000000000000000000000000000000000000000000000', 'msg42': '000000000000000000000000000000000000000000000000', 'msg43': '000000000000000000000000000000000000000000000000', 'msg40': '000000000000000000000000000000000000000000000000', 'msg41': '000000000000000000000000000000000000000000000000', 'msg46': '000000000000000000000000000000000000000000000000', 'msg47': '000000000000000000000000000000000000000000000000', 'msg44': '000000000000000000000000000000000000000000000000', 'msg45': '000000000000000000000000000000000000000000000000', 'cip110': '066AF29F6138FE67D676925DBC375ED1', 'cip111': '60E1109A80F56DBCBCAC75AF9EE3A982', 'cip112': '84E692562A2DBE9452CDC7F5F7DCD4E6', 'cip113': 'DA5C0CB7DE7C2A9DEFC76348955FB51B', 'cip114': '26AC1CB6870A598585E211852F9C980A', 'cip115': '49776D30C4A10352FF0FBA170F09F275', 'cip116': 'D02E72C408A05C89F80C9EC450419FBF', 'cip117': '993D122B38640477385BBFC79177C212', 'cip118': '1482C5D53BE2F16634C22B9294D6E10B', 'cip119': '4B9518E3188D68E20266DCAA5B26337F', 'msg164': '000000000000000000000000000000000000000000000000', 'msg165': '000000000000000000000000000000000000000000000000', 'msg166': '000000000000000000000000000000000000000000000000', 'msg167': '000000000000000000000000000000000000000000000000', 'msg160': '000000000000000000000000000000000000000000000000', 'msg161': '000000000000000000000000000000000000000000000000', 'msg162': '000000000000000000000000000000000000000000000000', 'msg163': '000000000000000000000000000000000000000000000000', 'msg168': '000000000000000000000000000000000000000000000000', 'msg169': '000000000000000000000000000000000000000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'cip67': '707EF1166D2F11FD1519B37FB00D23EB', 'cip66': '978E4BA4EEA6739B1769FF4389F0367E', 'cip65': '03D44830C40510CE7866FB86FAC6E1DC', 'cip64': '5298367E93E9B9CB5CF402A8BA9EFC62', 'cip63': 'A4E84B8A7B8CC3766307D66A9C6AECB9', 'cip62': 'F7D50E95931755A98B143AE254090F9D', 'cip61': '0B3CA10C02E24BA82261E65BE4413512', 'cip60': '7C502AE730F5A9ABEACB15240EA1E8F6', 'cip69': 'F3DC32DD6931A302391F9B992A5B6122', 'cip68': '435088DBDD8646A7FCA8851CA2FA1FB5', 'cip176': 'F02818D3D58D1F3345594670D3009DF4', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'msg86': '000000000000000000000000000000000000000000000000', 'msg87': '000000000000000000000000000000000000000000000000', 'msg84': '000000000000000000000000000000000000000000000000', 'msg85': '000000000000000000000000000000000000000000000000', 'msg82': '000000000000000000000000000000000000000000000000', 'msg83': '000000000000000000000000000000000000000000000000', 'msg80': '000000000000000000000000000000000000000000000000', 'msg81': '000000000000000000000000000000000000000000000000', 'cip23': 'F58B1AE230B417541649CB035FB5231C', 'cip22': '5254F42B5DD207461693C278B6ABC855', 'cip21': '6AC04A6988F1CE601E4C48241D42C1CF', 'msg33': '000000000000000000000000000000000000000000000000', 'msg32': '000000000000000000000000000000000000000000000000', 'msg31': '000000000000000000000000000000000000000000000000', 'msg30': '000000000000000000000000000000000000000000000000', 'msg37': '000000000000000000000000000000000000000000000000', 'msg36': '000000000000000000000000000000000000000000000000', 'msg35': '000000000000000000000000000000000000000000000000', 'msg34': '000000000000000000000000000000000000000000000000', 'cip27': '671D87102E35609B32F40A91A7E29E04', 'msg39': '000000000000000000000000000000000000000000000000', 'msg38': '000000000000000000000000000000000000000000000000', 'cip26': '1235DF200338F96E39E881484B6B11EE', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'cip25': 'B0DBAA257FEFFE48A688FE247D0460B7', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '000000000000000000000000000000000000000000000000', 'msg138': '000000000000000000000000000000000000000000000000', 'msg137': '000000000000000000000000000000000000000000000000', 'msg136': '000000000000000000000000000000000000000000000000', 'msg135': '000000000000000000000000000000000000000000000000', 'msg134': '000000000000000000000000000000000000000000000000', 'msg133': '000000000000000000000000000000000000000000000000', 'msg132': '000000000000000000000000000000000000000000000000', 'msg131': '000000000000000000000000000000000000000000000000', 'msg130': '000000000000000000000000000000000000000000000000', 'cip154': '7A814893FBF78A6F5345F4E250DA454C', 'cip155': '8C8B9E24399A6DF8293B0117307D6084', 'cip156': '11BB87A542E9135ECEB6143A07E0B65E', 'cip157': '495A92DB6E242E0A878EB4AC4C886802', 'cip150': 'F5BA874DAE43AD835B3F1344653411B6', 'cip151': 'F0185396A6A69D48BBEADFE5B644EED4', 'cip152': 'DA0DEC6F13B5AEFC056F5D040C5DA310', 'cip153': '7E1DBDE7B45F9C3E01A285EA575AD5ED', 'cip158': '97A5A7E3DAB800B3D4E7D468B4CCB951', 'cip159': 'C74D778D3F0440EB91981C23CC4F5669', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'cip38': '5F0DEF37FB14F956BB31703F1FC968EB', 'cip39': 'CF0A28C9598D7BBCA6992238B03EF4EB', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'cip34': '41714E55E90E0E154802FBBFC0BF58C5', 'cip35': '69480F26BC5DFF8F6D8A0F10E0959BF1', 'cip36': 'A39E4BE5A7E13BA3C48CFD98A52CFA70', 'cip37': '95809A16888FB49F5053375A6533CD58', 'cip30': '2E27350191DE6C2E9DCC51022A3C96CB', 'cip31': 'BDD6CFE5D00E7F8D698143E653A0163B', 'cip32': 'FEDABEF20F51910E57CF5ECEF878A8E1', 'cip33': 'EEBF9FE247A78C6FF2A91428C54D70DA', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'msg77': '000000000000000000000000000000000000000000000000', 'msg76': '000000000000000000000000000000000000000000000000', 'msg75': '000000000000000000000000000000000000000000000000', 'msg74': '000000000000000000000000000000000000000000000000', 'msg73': '000000000000000000000000000000000000000000000000', 'msg72': '000000000000000000000000000000000000000000000000', 'msg71': '000000000000000000000000000000000000000000000000', 'msg70': '000000000000000000000000000000000000000000000000', 'msg79': '000000000000000000000000000000000000000000000000', 'msg78': '000000000000000000000000000000000000000000000000', 'cip42': '9925949BE93F4A0BF4114CCA2E05B566', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'cip109': '33D0841FC04A6394056AC82D68DBFA02', 'cip108': 'E6C0BEE988E017E708FF1A1DCFE38FC8', 'cip107': 'F7F08E268646EF8B9D728D422195A88B', 'cip106': 'E6B06BC172CA8892C8A04D6717AB08CE', 'cip105': '00C19303036D6D3227B9C7AF806BEBDD', 'cip104': '3072C09636828285E7135E92B04C3601', 'cip103': '69698FE789F29872F0A4116CD8714255', 'cip102': '503FCDFCCB2AEBEEE6FB59326D06745E', 'cip101': '6E8C11B5EA12D40CE9F83693314BD836', 'cip100': '2628849CC2C62FEB305A1287F24B9693', 'msg173': '000000000000000000000000000000000000000000000000', 'msg172': '000000000000000000000000000000000000000000000000', 'msg171': '000000000000000000000000000000000000000000000000', 'msg170': '000000000000000000000000000000000000000000000000', 'msg177': '000000000000000000000000000000000000000000000000', 'msg176': '000000000000000000000000000000000000000000000000', 'msg175': '000000000000000000000000000000000000000000000000', 'msg174': '000000000000000000000000000000000000000000000000', 'msg179': '000000000000000000000000000000000000000000000000', 'msg178': '000000000000000000000000000000000000000000000000', 'cip190': '8EE624F18BF5AA25ACE8667643D0D80D', 'cip70': 'D93286DD8A05432614FD03169F36ED15', 'cip71': '59F83FEA4BC9B24BF69A98CA3959CEFC', 'cip72': 'A689BC3A8DB36A22763E911370C9DE2B', 'cip73': '04EB5BA604BA64DD112BCAE830C27966', 'cip74': '7EF653E2D804E80BD678C3A6CB222625', 'cip75': 'A94EC287E7F70C6503DC0B891920C622', 'cip76': '8A78497E9D18A365599444C972359F0D', 'cip77': '2F1832E285C8D24F226B50CCD71FE46A', 'cip78': '0B6675F4BD4BD6951BB96AF62D3C9B96', 'cip79': 'D6DEDAAAECE52984A261155ED7AF5290', 'msg106': '000000000000000000000000000000000000000000000000', 'msg107': '000000000000000000000000000000000000000000000000', 'msg104': '000000000000000000000000000000000000000000000000', 'msg105': '000000000000000000000000000000000000000000000000', 'msg102': '000000000000000000000000000000000000000000000000', 'msg88': '000000000000000000000000000000000000000000000000', 'msg100': '000000000000000000000000000000000000000000000000', 'msg101': '000000000000000000000000000000000000000000000000', 'msg89': '000000000000000000000000000000000000000000000000', 'msg108': '000000000000000000000000000000000000000000000000', 'msg109': '000000000000000000000000000000000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'cip20': '841FC7FC0EF6CE08CFC6056B3C557F23', 'msg103': '000000000000000000000000000000000000000000000000', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'msg147': '000000000000000000000000000000000000000000000000', 'cip140': 'BB364F05F769FFBFE18288BD782D20EB', 'msg28': '000000000000000000000000000000000000000000000000', 'msg29': '000000000000000000000000000000000000000000000000', 'msg24': '000000000000000000000000000000000000000000000000', 'msg25': '000000000000000000000000000000000000000000000000', 'msg26': '000000000000000000000000000000000000000000000000', 'msg27': '000000000000000000000000000000000000000000000000', 'msg20': '000000000000000000000000000000000000000000000000', 'msg21': '000000000000000000000000000000000000000000000000', 'msg22': '000000000000000000000000000000000000000000000000', 'msg23': '000000000000000000000000000000000000000000000000', 'cip136': '8FF0BF7F0088916764CF9FF21E1BDA67', 'cip137': '5DE1FF41440B4CA0EEF22C8C3F96F23F', 'cip134': '69E749DFCA9AC8A990444E9FFB6CBA09', 'cip135': '9B2262EBF59AB552E04D57A72FE6F013', 'cip132': '3896FB03AF06F69CFDDDFBFCDF8E10A7', 'cip133': 'FED04C2F49DB4BE1D7BC5E187FB1612B', 'cip130': '847E4FFAD40194940A0F7FA0E34739B4', 'cip131': '50DCE06E775C1A6DDA24B2A926C9EF8E', 'cip138': 'FEBE3209C8D61E85024DEF2122AF0268', 'cip139': 'DB63B702C6E39A283B64B90F36FBD426', 'key44': '000000000008000000000000000000000000000000000000', 'msg148': '000000000000000000000000000000000000000000000000', 'msg149': '000000000000000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'msg142': '000000000000000000000000000000000000000000000000', 'msg143': '000000000000000000000000000000000000000000000000', 'msg140': '000000000000000000000000000000000000000000000000', 'msg141': '000000000000000000000000000000000000000000000000', 'msg146': '000000000000000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'msg144': '000000000000000000000000000000000000000000000000', 'msg145': '000000000000000000000000000000000000000000000000', 'cip143': '3979A57AB9EB520E1475D745F897A9A9', 'cip142': 'C5AE232EB4F293497E79E20E436B5A4C', 'cip141': '8A929CBDE0CD9A9545A08DA2D16BA838', 'key47': '000000000001000000000000000000000000000000000000', 'cip147': 'C3475809C89275DE82F9F22D59A3DA37', 'cip146': 'D5A76D2E0D00BE53B401ACB0EE70F8FB', 'cip145': '260AC31933A32B75C13364E868FD84DB', 'cip144': '469B440BBD0711C31B9AAA2564ECB68A', 'key40': '000000000080000000000000000000000000000000000000', 'cip149': 'C662358CCCD46730D243DEE03B871DC3', 'cip148': 'C9B8FBFBF1A120BF47D0F2F48DD23661', 'key41': '000000000040000000000000000000000000000000000000'} |
dict_twofish_ecb_vk_k256 = {'cip10': '56BA650835E125201400380C4D2D5D99', 'cip11': 'EB48A1B279E95EBF8FAAC13D70F8F452', 'cip49': 'D2C6E9C239B4FA5A1E76D038EA4660F3', 'cip48': '13D46AE35D868401D23C891ED92621EE', 'key19': '0000100000000000000000000000000000000000000000000000000000000000', 'key18': '0000200000000000000000000000000000000000000000000000000000000000', 'key17': '0000400000000000000000000000000000000000000000000000000000000000', 'key16': '0000800000000000000000000000000000000000000000000000000000000000', 'key15': '0001000000000000000000000000000000000000000000000000000000000000', 'key14': '0002000000000000000000000000000000000000000000000000000000000000', 'key13': '0004000000000000000000000000000000000000000000000000000000000000', 'key12': '0008000000000000000000000000000000000000000000000000000000000000', 'key11': '0010000000000000000000000000000000000000000000000000000000000000', 'key10': '0020000000000000000000000000000000000000000000000000000000000000', 'cip213': 'CC014984ABDFB760A835846668340929', 'cip212': '5094418C55B7D591EFDB7097CB95B16D', 'key202': '0000000000000000000000000000000000000000000000000020000000000000', 'msg5': '0000000000000000000000000000000000000000000000000000000000000000', 'msg4': '0000000000000000000000000000000000000000000000000000000000000000', 'msg7': '0000000000000000000000000000000000000000000000000000000000000000', 'msg6': '0000000000000000000000000000000000000000000000000000000000000000', 'msg1': '0000000000000000000000000000000000000000000000000000000000000000', 'msg0': '0000000000000000000000000000000000000000000000000000000000000000', 'msg3': '0000000000000000000000000000000000000000000000000000000000000000', 'msg2': '0000000000000000000000000000000000000000000000000000000000000000', 'msg249': '0000000000000000000000000000000000000000000000000000000000000000', 'msg248': '0000000000000000000000000000000000000000000000000000000000000000', 'msg9': '0000000000000000000000000000000000000000000000000000000000000000', 'msg8': '0000000000000000000000000000000000000000000000000000000000000000', 'cip219': 'F1218B59E947816041B21AC28685EF36', 'key80': '0000000000000000000080000000000000000000000000000000000000000000', 'key81': '0000000000000000000040000000000000000000000000000000000000000000', 'key82': '0000000000000000000020000000000000000000000000000000000000000000', 'key83': '0000000000000000000010000000000000000000000000000000000000000000', 'key84': '0000000000000000000008000000000000000000000000000000000000000000', 'key85': '0000000000000000000004000000000000000000000000000000000000000000', 'key86': '0000000000000000000002000000000000000000000000000000000000000000', 'key87': '0000000000000000000001000000000000000000000000000000000000000000', 'key88': '0000000000000000000000800000000000000000000000000000000000000000', 'key89': '0000000000000000000000400000000000000000000000000000000000000000', 'key180': '0000000000000000000000000000000000000000000008000000000000000000', 'key181': '0000000000000000000000000000000000000000000004000000000000000000', 'key182': '0000000000000000000000000000000000000000000002000000000000000000', 'key183': '0000000000000000000000000000000000000000000001000000000000000000', 'key184': '0000000000000000000000000000000000000000000000800000000000000000', 'key185': '0000000000000000000000000000000000000000000000400000000000000000', 'key186': '0000000000000000000000000000000000000000000000200000000000000000', 'key187': '0000000000000000000000000000000000000000000000100000000000000000', 'key188': '0000000000000000000000000000000000000000000000080000000000000000', 'key189': '0000000000000000000000000000000000000000000000040000000000000000', 'key223': '0000000000000000000000000000000000000000000000000000000100000000', 'key222': '0000000000000000000000000000000000000000000000000000000200000000', 'key225': '0000000000000000000000000000000000000000000000000000000040000000', 'key224': '0000000000000000000000000000000000000000000000000000000080000000', 'key227': '0000000000000000000000000000000000000000000000000000000010000000', 'key226': '0000000000000000000000000000000000000000000000000000000020000000', 'cip41': 'C93968EC0EE02DACD3F3EE9AC2320B88', 'cip40': '0A0EBA6ACED7899AA633CE67E8923936', 'cip43': 'BBADB03D5F0FCF375E671F8B009F3AF1', 'msg60': '0000000000000000000000000000000000000000000000000000000000000000', 'msg61': '0000000000000000000000000000000000000000000000000000000000000000', 'msg62': '0000000000000000000000000000000000000000000000000000000000000000', 'msg63': '0000000000000000000000000000000000000000000000000000000000000000', 'msg64': '0000000000000000000000000000000000000000000000000000000000000000', 'msg65': '0000000000000000000000000000000000000000000000000000000000000000', 'msg66': '0000000000000000000000000000000000000000000000000000000000000000', 'msg67': '0000000000000000000000000000000000000000000000000000000000000000', 'msg68': '0000000000000000000000000000000000000000000000000000000000000000', 'cip45': '8B650EC280BE261CCED5B5FC7F8A9BA7', 'key201': '0000000000000000000000000000000000000000000000000040000000000000', 'cip44': 'DAC60B05A1C3A203C6B4FE882E780079', 'key200': '0000000000000000000000000000000000000000000000000080000000000000', 'key139': '0000000000000000000000000000000000100000000000000000000000000000', 'cip47': '40B1042CBE87D64DDBEA4BAC8CF1F08C', 'key135': '0000000000000000000000000000000001000000000000000000000000000000', 'key134': '0000000000000000000000000000000002000000000000000000000000000000', 'key137': '0000000000000000000000000000000000400000000000000000000000000000', 'cip46': '35EB82F0BB6735E2DE661AE4E9E9EE57', 'key131': '0000000000000000000000000000000010000000000000000000000000000000', 'key130': '0000000000000000000000000000000020000000000000000000000000000000', 'key133': '0000000000000000000000000000000004000000000000000000000000000000', 'key132': '0000000000000000000000000000000008000000000000000000000000000000', 'cip178': 'A990117E78D1C5BD7833B96A4A180744', 'cip179': 'E63684CDC37E6768C45012EA00D008E4', 'key205': '0000000000000000000000000000000000000000000000000004000000000000', 'cip172': 'F83BD19A357BD7901C0E8FBEFCF857ED', 'cip173': 'F42BB427C894A072C861C1425CBD71BC', 'cip170': 'AC421C73A789D79B452623DAFD3D6D0B', 'cip171': '995207D8CF8C10904C0F47652C9C4287', 'key26': '0000002000000000000000000000000000000000000000000000000000000000', 'cip177': '5FE1C3BCD24818948514CB5A32FFD0A1', 'cip174': '3D1EC73B166DC0120DDF24267907C0F9', 'cip175': '8EF136AF5D7D1B513FB59FA21F7837A1', 'msg188': '0000000000000000000000000000000000000000000000000000000000000000', 'msg189': '0000000000000000000000000000000000000000000000000000000000000000', 'msg186': '0000000000000000000000000000000000000000000000000000000000000000', 'msg187': '0000000000000000000000000000000000000000000000000000000000000000', 'msg184': '0000000000000000000000000000000000000000000000000000000000000000', 'msg185': '0000000000000000000000000000000000000000000000000000000000000000', 'msg182': '0000000000000000000000000000000000000000000000000000000000000000', 'msg183': '0000000000000000000000000000000000000000000000000000000000000000', 'msg180': '0000000000000000000000000000000000000000000000000000000000000000', 'msg181': '0000000000000000000000000000000000000000000000000000000000000000', 'cip187': 'A466821BD64F552C0610ADB737C562CD', 'cip186': '94A91373701569B8C21487A7BDB164B6', 'cip185': '10112F5ABBF246996860B843FC7159F5', 'cip184': '4EFB0E18FB2F96FB6F81514BCE0A7BBD', 'cip183': 'A3C5BF72F39940DC7DAFB474A77A6114', 'cip182': 'F51410475B33FBD3DB2117B5C17C82D4', 'cip181': '85B7F0D391AF9268643D9C0B72433A99', 'cip180': '78B711F290DA924CAF1E4F1E11A08F4F', 'key27': '0000001000000000000000000000000000000000000000000000000000000000', 'cip189': '5578CCF8B92D48363EED4601661EB56E', 'cip188': '511BE2BA9F2A272CA2F5C1D0F3E249C1', 'msg15': '0000000000000000000000000000000000000000000000000000000000000000', 'msg14': '0000000000000000000000000000000000000000000000000000000000000000', 'msg17': '0000000000000000000000000000000000000000000000000000000000000000', 'msg16': '0000000000000000000000000000000000000000000000000000000000000000', 'msg11': '0000000000000000000000000000000000000000000000000000000000000000', 'msg10': '0000000000000000000000000000000000000000000000000000000000000000', 'msg13': '0000000000000000000000000000000000000000000000000000000000000000', 'msg12': '0000000000000000000000000000000000000000000000000000000000000000', 'msg19': '0000000000000000000000000000000000000000000000000000000000000000', 'msg18': '0000000000000000000000000000000000000000000000000000000000000000', 'cip89': '773A30DFDA8EBCE50EDFB925343C9ECC', 'cip88': '662EA9D88A9A2C89581502EAAAD074D5', 'cip85': 'A7C8C1A59E141D608BC91BB69E7B2859', 'cip84': 'D73CB079FB7101C933176352A93BB028', 'cip87': 'AC2DB35ED86D358616648D22B52DF012', 'cip86': 'B2DA67AFE49B33E5EDFAF148A17BF06B', 'cip81': '88542C9E680C27FE8FBE090AD73410B9', 'cip80': '0CF408A2FBDA07068BDB13A371867FCC', 'cip83': 'B84FA0FA046D5D77EA94CF3E8FDED147', 'cip82': '7A8BA6DC89A1AD4385D0696AFDD89496', 'msg115': '0000000000000000000000000000000000000000000000000000000000000000', 'msg114': '0000000000000000000000000000000000000000000000000000000000000000', 'msg117': '0000000000000000000000000000000000000000000000000000000000000000', 'msg116': '0000000000000000000000000000000000000000000000000000000000000000', 'msg111': '0000000000000000000000000000000000000000000000000000000000000000', 'msg110': '0000000000000000000000000000000000000000000000000000000000000000', 'msg113': '0000000000000000000000000000000000000000000000000000000000000000', 'msg112': '0000000000000000000000000000000000000000000000000000000000000000', 'msg119': '0000000000000000000000000000000000000000000000000000000000000000', 'msg118': '0000000000000000000000000000000000000000000000000000000000000000', 'key209': '0000000000000000000000000000000000000000000000000000400000000000', 'cip16': '5AE3ABA331C5D765E3D112B1DA09E7BC', 'cip17': '767F9CBDA1BA9914EBA40D7A172A4077', 'cip14': 'CA16B1969FA373F43EF09D19B3379F3F', 'cip15': '6D1B6F14090368034E10CF0C1E4F5744', 'cip12': 'E52435C29F7C9687B268C539BF6598B1', 'cip13': '27785BDF6F6258EAC396BFD0F56BEE82', 'key42': '0000000000200000000000000000000000000000000000000000000000000000', 'key43': '0000000000100000000000000000000000000000000000000000000000000000', 'key208': '0000000000000000000000000000000000000000000000000000800000000000', 'key48': '0000000000008000000000000000000000000000000000000000000000000000', 'key49': '0000000000004000000000000000000000000000000000000000000000000000', 'cip18': '8FAE713F677A82075D773DB73D58763E', 'cip19': '616CA9A15D710CA38FCA9A8E0B16A21C', 'msg241': '0000000000000000000000000000000000000000000000000000000000000000', 'msg240': '0000000000000000000000000000000000000000000000000000000000000000', 'msg243': '0000000000000000000000000000000000000000000000000000000000000000', 'msg238': '0000000000000000000000000000000000000000000000000000000000000000', 'msg239': '0000000000000000000000000000000000000000000000000000000000000000', 'msg242': '0000000000000000000000000000000000000000000000000000000000000000', 'key206': '0000000000000000000000000000000000000000000000000002000000000000', 'msg230': '0000000000000000000000000000000000000000000000000000000000000000', 'msg231': '0000000000000000000000000000000000000000000000000000000000000000', 'msg232': '0000000000000000000000000000000000000000000000000000000000000000', 'msg233': '0000000000000000000000000000000000000000000000000000000000000000', 'msg234': '0000000000000000000000000000000000000000000000000000000000000000', 'msg235': '0000000000000000000000000000000000000000000000000000000000000000', 'msg236': '0000000000000000000000000000000000000000000000000000000000000000', 'msg237': '0000000000000000000000000000000000000000000000000000000000000000', 'key171': '0000000000000000000000000000000000000000001000000000000000000000', 'key170': '0000000000000000000000000000000000000000002000000000000000000000', 'key173': '0000000000000000000000000000000000000000000400000000000000000000', 'key172': '0000000000000000000000000000000000000000000800000000000000000000', 'key175': '0000000000000000000000000000000000000000000100000000000000000000', 'key174': '0000000000000000000000000000000000000000000200000000000000000000', 'key177': '0000000000000000000000000000000000000000000040000000000000000000', 'key176': '0000000000000000000000000000000000000000000080000000000000000000', 'key179': '0000000000000000000000000000000000000000000010000000000000000000', 'key178': '0000000000000000000000000000000000000000000020000000000000000000', 'msg246': '0000000000000000000000000000000000000000000000000000000000000000', 'cip239': '58F79FF1810CA4B0E0178F7D9C24A581', 'cip238': '02116E6AEFC21A4D4D64CA27AB7AF31E', 'key252': '0000000000000000000000000000000000000000000000000000000000000008', 'key253': '0000000000000000000000000000000000000000000000000000000000000004', 'key254': '0000000000000000000000000000000000000000000000000000000000000002', 'cip231': 'FD8220818731607D8B69AC5963D0FAC9', 'cip230': '86C3BB221834F7507505434E4F98DC92', 'cip233': '8AB5E8973A5D6648517D151295091C0E', 'cip232': '550726375ABB0F9A7C010DC4E47833F9', 'cip235': '332D696EC49DF4B58C5FA9CC84773F47', 'cip234': '338BB4B5569AA06411B9911381F350B2', 'cip237': '89A49D3AB772D0FDAE05FC692EAF6C7B', 'cip236': 'DEB5AC8F895AFF45BA5815D4912D8371', 'msg59': '0000000000000000000000000000000000000000000000000000000000000000', 'msg58': '0000000000000000000000000000000000000000000000000000000000000000', 'msg51': '0000000000000000000000000000000000000000000000000000000000000000', 'msg50': '0000000000000000000000000000000000000000000000000000000000000000', 'msg53': '0000000000000000000000000000000000000000000000000000000000000000', 'msg52': '0000000000000000000000000000000000000000000000000000000000000000', 'msg55': '0000000000000000000000000000000000000000000000000000000000000000', 'msg54': '0000000000000000000000000000000000000000000000000000000000000000', 'msg57': '0000000000000000000000000000000000000000000000000000000000000000', 'msg56': '0000000000000000000000000000000000000000000000000000000000000000', 'cip125': '175D44DFDE1EAD6E0E6862B511AA7007', 'cip124': '4DABE13A3E656E95150440F81DD92666', 'cip127': '68D0E4CCA0119EED57ABF3C7574BDA8B', 'cip126': '09B690F493F5C779E8B6ACD09667A997', 'cip121': '7DB7B15E4ACBDBB0BFF4C4EAEDC2231E', 'cip120': 'FD30E2D851211506C112D5701B859BC6', 'cip123': 'E53B053D9B2E06656138D4A1EFA58888', 'cip122': 'F0AFDED56AD72D4C1E57A66EEDF4816E', 'cip129': '5DCE21AF0D23BC5AEFD4EA331B16219A', 'cip128': '12C00618DA7EBA5EFA5E58D2696D891F', 'msg159': '0000000000000000000000000000000000000000000000000000000000000000', 'msg158': '0000000000000000000000000000000000000000000000000000000000000000', 'msg151': '0000000000000000000000000000000000000000000000000000000000000000', 'msg150': '0000000000000000000000000000000000000000000000000000000000000000', 'msg153': '0000000000000000000000000000000000000000000000000000000000000000', 'msg152': '0000000000000000000000000000000000000000000000000000000000000000', 'msg155': '0000000000000000000000000000000000000000000000000000000000000000', 'msg154': '0000000000000000000000000000000000000000000000000000000000000000', 'msg157': '0000000000000000000000000000000000000000000000000000000000000000', 'msg156': '0000000000000000000000000000000000000000000000000000000000000000', 'cip248': '644555DFB9CE8EDAF888EE142B5577F1', 'cip249': '716E2BBCBD8FF7E7335784B767F27CA9', 'cip58': '9934453FBAAE1CB362A0012204967AE8', 'cip59': 'E9C98A03713835EB4497346866791190', 'key207': '0000000000000000000000000000000000000000000000000001000000000000', 'cip52': '59F622ACBBA15E522717A9EAF7047949', 'cip53': 'BB2939FFBD77B308DA93220AD68A21AC', 'cip50': 'DE3BC7CDFAF9AB7143E255DC87645F3E', 'cip51': '8FB6CA966B5ACFB180A296EA5D93711F', 'cip56': '49C27499EEC1989626B1E50435BA0273', 'cip57': '39E97018F547A8A802578B80952F2457', 'cip54': 'CEBE5EDD9BACF0A0FB75B259DE7097CD', 'cip55': '3448844E63AC2BD809E254AC3BAA6B3B', 'cip4': '9E953EBAA3B13F43F90908B53DAA0C09', 'cip5': '4579140290095FB25B3144444505D203', 'cip6': '5FD5F687596A9AA9EA105A2F7CF59A94', 'cip7': '005EA3AF8AFF3DDA323148690537853C', 'cip0': '785229B51B515F30A1FCC88B969A4E47', 'cip1': 'B095E0619E70CDF5F4BC6E88079CF22F', 'cip2': '44F32AEAE82516AC8857C1985B7109EC', 'cip3': 'B2BBE93B433C8F0415B90282E788C071', 'cip8': 'CD8E33C4F06FC0586E821522B2FEB08D', 'cip9': 'CABEC07E46D11086778C3E1937CD0797', 'key250': '0000000000000000000000000000000000000000000000000000000000000020', 'key251': '0000000000000000000000000000000000000000000000000000000000000010', 'key79': '0000000000000000000100000000000000000000000000000000000000000000', 'key78': '0000000000000000000200000000000000000000000000000000000000000000', 'key75': '0000000000000000001000000000000000000000000000000000000000000000', 'key74': '0000000000000000002000000000000000000000000000000000000000000000', 'key77': '0000000000000000000400000000000000000000000000000000000000000000', 'key76': '0000000000000000000800000000000000000000000000000000000000000000', 'key71': '0000000000000000010000000000000000000000000000000000000000000000', 'key70': '0000000000000000020000000000000000000000000000000000000000000000', 'key73': '0000000000000000004000000000000000000000000000000000000000000000', 'key72': '0000000000000000008000000000000000000000000000000000000000000000', 'key199': '0000000000000000000000000000000000000000000000000100000000000000', 'key198': '0000000000000000000000000000000000000000000000000200000000000000', 'key197': '0000000000000000000000000000000000000000000000000400000000000000', 'key196': '0000000000000000000000000000000000000000000000000800000000000000', 'key195': '0000000000000000000000000000000000000000000000001000000000000000', 'key194': '0000000000000000000000000000000000000000000000002000000000000000', 'key193': '0000000000000000000000000000000000000000000000004000000000000000', 'key192': '0000000000000000000000000000000000000000000000008000000000000000', 'key191': '0000000000000000000000000000000000000000000000010000000000000000', 'key190': '0000000000000000000000000000000000000000000000020000000000000000', 'cip24': '74DA788FB7A6172B65FBB62C7ED4FECC', 'msg99': '0000000000000000000000000000000000000000000000000000000000000000', 'msg98': '0000000000000000000000000000000000000000000000000000000000000000', 'msg95': '0000000000000000000000000000000000000000000000000000000000000000', 'msg94': '0000000000000000000000000000000000000000000000000000000000000000', 'msg97': '0000000000000000000000000000000000000000000000000000000000000000', 'msg96': '0000000000000000000000000000000000000000000000000000000000000000', 'msg91': '0000000000000000000000000000000000000000000000000000000000000000', 'msg90': '0000000000000000000000000000000000000000000000000000000000000000', 'msg93': '0000000000000000000000000000000000000000000000000000000000000000', 'msg92': '0000000000000000000000000000000000000000000000000000000000000000', 'key108': '0000000000000000000000000008000000000000000000000000000000000000', 'key109': '0000000000000000000000000004000000000000000000000000000000000000', 'key100': '0000000000000000000000000800000000000000000000000000000000000000', 'key101': '0000000000000000000000000400000000000000000000000000000000000000', 'key102': '0000000000000000000000000200000000000000000000000000000000000000', 'key103': '0000000000000000000000000100000000000000000000000000000000000000', 'key104': '0000000000000000000000000080000000000000000000000000000000000000', 'key105': '0000000000000000000000000040000000000000000000000000000000000000', 'key106': '0000000000000000000000000020000000000000000000000000000000000000', 'key107': '0000000000000000000000000010000000000000000000000000000000000000', 'cip169': '2B8DE8D2D3332E6A30215ACC10A69847', 'cip168': '72B9D7628AB21DF89666E50517C50574', 'cip242': '2A94B92CC9C4776817C0A77D49E24F22', 'cip243': '890583A6C9549A3DCAFBD54BF391BC8F', 'cip244': 'EA88A883197E483B4AA16316EA97CCBB', 'cip245': 'CC5732CEB99A0A0353BABA6432BCBE9F', 'cip246': '88811B506D565779F09DE9BDF8702BD8', 'key228': '0000000000000000000000000000000000000000000000000000000008000000', 'cip161': '8085B7A7B939FA37BC4E1D746E9F9B37', 'cip160': 'D293D438C563B8EB3FF26E23A7323B74', 'cip163': 'A5C2AC88B6FD4C57CB4F2C2920A584EF', 'cip162': 'D628AD150E15F413010BE15E391D3F48', 'cip165': '3B2116BD2E362FC8985A0F0C618DF58A', 'cip164': 'D7F5183F6BAB04B87A1ABAA3914DA848', 'cip167': 'AA04A56C13507AE5137657546766AE2D', 'cip166': 'BF31E8DE8342A32BBD80A8F91507BADA', 'msg199': '0000000000000000000000000000000000000000000000000000000000000000', 'msg198': '0000000000000000000000000000000000000000000000000000000000000000', 'msg195': '0000000000000000000000000000000000000000000000000000000000000000', 'msg194': '0000000000000000000000000000000000000000000000000000000000000000', 'msg197': '0000000000000000000000000000000000000000000000000000000000000000', 'msg196': '0000000000000000000000000000000000000000000000000000000000000000', 'msg191': '0000000000000000000000000000000000000000000000000000000000000000', 'key28': '0000000800000000000000000000000000000000000000000000000000000000', 'msg193': '0000000000000000000000000000000000000000000000000000000000000000', 'msg192': '0000000000000000000000000000000000000000000000000000000000000000', 'key29': '0000000400000000000000000000000000000000000000000000000000000000', 'key214': '0000000000000000000000000000000000000000000000000000020000000000', 'key215': '0000000000000000000000000000000000000000000000000000010000000000', 'key216': '0000000000000000000000000000000000000000000000000000008000000000', 'key217': '0000000000000000000000000000000000000000000000000000004000000000', 'key210': '0000000000000000000000000000000000000000000000000000200000000000', 'key211': '0000000000000000000000000000000000000000000000000000100000000000', 'key212': '0000000000000000000000000000000000000000000000000000080000000000', 'key213': '0000000000000000000000000000000000000000000000000000040000000000', 'key218': '0000000000000000000000000000000000000000000000000000002000000000', 'key219': '0000000000000000000000000000000000000000000000000000001000000000', 'cip98': '88C342961D0EE83902CB78C29539923D', 'cip99': 'CF3B48A6351C4561752D6A209F93A30F', 'cip96': '0A44FDEAA17E5F3E536A08D7A5B3267B', 'cip97': 'BAC72F53EE39296D3A23B126F8D8B20B', 'cip94': '3D5819934619E09F10E90C4EA7F30F40', 'cip95': '710446D0A254F68975CD6AAAE92212FD', 'cip92': '13F7406746C6E0CD5666EC04C0E540E2', 'cip93': '9382384DCAF80CF537E24FC5F2F71A8A', 'cip90': '10B7242D9C7CA610C20F1183BB949514', 'cip91': 'B7DF971F9C3444EFCC13210292126942', 'msg120': '0000000000000000000000000000000000000000000000000000000000000000', 'msg121': '0000000000000000000000000000000000000000000000000000000000000000', 'msg122': '0000000000000000000000000000000000000000000000000000000000000000', 'msg123': '0000000000000000000000000000000000000000000000000000000000000000', 'msg124': '0000000000000000000000000000000000000000000000000000000000000000', 'msg125': '0000000000000000000000000000000000000000000000000000000000000000', 'msg126': '0000000000000000000000000000000000000000000000000000000000000000', 'msg127': '0000000000000000000000000000000000000000000000000000000000000000', 'msg128': '0000000000000000000000000000000000000000000000000000000000000000', 'msg129': '0000000000000000000000000000000000000000000000000000000000000000', 'key31': '0000000100000000000000000000000000000000000000000000000000000000', 'key30': '0000000200000000000000000000000000000000000000000000000000000000', 'key33': '0000000040000000000000000000000000000000000000000000000000000000', 'key32': '0000000080000000000000000000000000000000000000000000000000000000', 'key35': '0000000010000000000000000000000000000000000000000000000000000000', 'key34': '0000000020000000000000000000000000000000000000000000000000000000', 'key37': '0000000004000000000000000000000000000000000000000000000000000000', 'key36': '0000000008000000000000000000000000000000000000000000000000000000', 'key39': '0000000001000000000000000000000000000000000000000000000000000000', 'key38': '0000000002000000000000000000000000000000000000000000000000000000', 'cip29': 'A1B7E0CC8B69B3C0C6F635F962D0A22F', 'cip28': '3F6F7B1157906913B09BD2AE2627C6B0', 'cip240': '686FB1ED659D9BF17DA2BB79AC636C93', 'key221': '0000000000000000000000000000000000000000000000000000000400000000', 'msg190': '0000000000000000000000000000000000000000000000000000000000000000', 'cip241': '1C5C176C4F5796B2C34D2A12858EB511', 'msg227': '0000000000000000000000000000000000000000000000000000000000000000', 'msg226': '0000000000000000000000000000000000000000000000000000000000000000', 'msg225': '0000000000000000000000000000000000000000000000000000000000000000', 'msg224': '0000000000000000000000000000000000000000000000000000000000000000', 'msg223': '0000000000000000000000000000000000000000000000000000000000000000', 'msg222': '0000000000000000000000000000000000000000000000000000000000000000', 'msg221': '0000000000000000000000000000000000000000000000000000000000000000', 'msg220': '0000000000000000000000000000000000000000000000000000000000000000', 'msg229': '0000000000000000000000000000000000000000000000000000000000000000', 'msg228': '0000000000000000000000000000000000000000000000000000000000000000', 'key148': '0000000000000000000000000000000000000800000000000000000000000000', 'key149': '0000000000000000000000000000000000000400000000000000000000000000', 'key144': '0000000000000000000000000000000000008000000000000000000000000000', 'key145': '0000000000000000000000000000000000004000000000000000000000000000', 'key146': '0000000000000000000000000000000000002000000000000000000000000000', 'key147': '0000000000000000000000000000000000001000000000000000000000000000', 'key140': '0000000000000000000000000000000000080000000000000000000000000000', 'key141': '0000000000000000000000000000000000040000000000000000000000000000', 'key142': '0000000000000000000000000000000000020000000000000000000000000000', 'key143': '0000000000000000000000000000000000010000000000000000000000000000', 'msg69': '0000000000000000000000000000000000000000000000000000000000000000', 'key249': '0000000000000000000000000000000000000000000000000000000000000040', 'key248': '0000000000000000000000000000000000000000000000000000000000000080', 'key247': '0000000000000000000000000000000000000000000000000000000000000100', 'key246': '0000000000000000000000000000000000000000000000000000000000000200', 'key245': '0000000000000000000000000000000000000000000000000000000000000400', 'key244': '0000000000000000000000000000000000000000000000000000000000000800', 'key243': '0000000000000000000000000000000000000000000000000000000000001000', 'key242': '0000000000000000000000000000000000000000000000000000000000002000', 'key241': '0000000000000000000000000000000000000000000000000000000000004000', 'key240': '0000000000000000000000000000000000000000000000000000000000008000', 'key204': '0000000000000000000000000000000000000000000000000008000000000000', 'msg48': '0000000000000000000000000000000000000000000000000000000000000000', 'msg49': '0000000000000000000000000000000000000000000000000000000000000000', 'msg42': '0000000000000000000000000000000000000000000000000000000000000000', 'msg43': '0000000000000000000000000000000000000000000000000000000000000000', 'msg40': '0000000000000000000000000000000000000000000000000000000000000000', 'msg41': '0000000000000000000000000000000000000000000000000000000000000000', 'msg46': '0000000000000000000000000000000000000000000000000000000000000000', 'msg47': '0000000000000000000000000000000000000000000000000000000000000000', 'msg44': '0000000000000000000000000000000000000000000000000000000000000000', 'msg45': '0000000000000000000000000000000000000000000000000000000000000000', 'cip110': '4D10D177334397F49211BCB10F207905', 'cip111': 'C8E608BAFE61254A0DDF866BB4D063DD', 'cip112': '05DDAB3DAEA0C64C1077BE22DA7ACDD4', 'cip113': '951388F2BE1DD7013A00327FC6DB7905', 'cip114': '62F8283651EFDF475DE8511EA7256AD6', 'cip115': '5B259EEE6B19EE12D4CE20D2F38D4BCF', 'cip116': '704414E13DCAD9DF7F593F630E68E13C', 'cip117': '41AD9DAAC24ECCBB454DBAF75D5B9989', 'cip118': '919C54C126B54D7A570D8ABA9FCE5D08', 'cip119': 'BC665541FF0F2E86DBDF4444C01AC0EA', 'msg164': '0000000000000000000000000000000000000000000000000000000000000000', 'msg165': '0000000000000000000000000000000000000000000000000000000000000000', 'msg166': '0000000000000000000000000000000000000000000000000000000000000000', 'msg167': '0000000000000000000000000000000000000000000000000000000000000000', 'msg160': '0000000000000000000000000000000000000000000000000000000000000000', 'msg161': '0000000000000000000000000000000000000000000000000000000000000000', 'msg162': '0000000000000000000000000000000000000000000000000000000000000000', 'msg163': '0000000000000000000000000000000000000000000000000000000000000000', 'msg168': '0000000000000000000000000000000000000000000000000000000000000000', 'msg169': '0000000000000000000000000000000000000000000000000000000000000000', 'key136': '0000000000000000000000000000000000800000000000000000000000000000', 'cip204': '3F055452FCD596C6D588BD48BB5D5080', 'cip205': 'A1D97F66DEF90DE14CC2BFAFF09286BB', 'cip206': '80442DC4EBFB53B86E232D886CA166B9', 'cip207': '76A593802C6A691152E8A04E5DE2D05A', 'cip200': '7CE998A357384159C9B34A9A8AC7DF78', 'cip201': '51BE07BA8106A19CCC2005B8B3932FBF', 'cip202': '2634245A6EC3F17A35B7FE1D3E17F769', 'cip203': '24D4114760BCE04C0109C06CCE199F6C', 'cip208': 'F923A147E00807D58FB9C686E01F7E07', 'cip209': '8EA3B396D561A3CFCE729A0B59647760', 'cip67': '0B0D61E162A88E04C38C19CA668C2DDC', 'cip66': '27A0BF748F513F18D4F7831527A3608F', 'cip65': '6A2C94C488D5BD32742F143B2E8D0659', 'cip64': 'F29B1370BA8D8CC19AC8DF5DF77F7319', 'cip63': '13645DBEDE21FF7C79C06141AD9E4CD1', 'cip62': 'B054259980B45B9D2D7CD6C13200BAFC', 'cip61': '3A84B0A26CEA6A8D8A94D5B791A0D3E8', 'cip60': 'E026C858938B47D28A8758CCFAEF0FA8', 'cip69': '99699B31EBBE6ABE1F7B2AFEC86DC7E2', 'cip68': '4055BA24216EF49FE36E6145A5CD31D4', 'cip176': 'EB4BBA7F94CE9429255A583D2F9810CD', 'key159': '0000000000000000000000000000000000000001000000000000000000000000', 'key158': '0000000000000000000000000000000000000002000000000000000000000000', 'key68': '0000000000000000080000000000000000000000000000000000000000000000', 'key69': '0000000000000000040000000000000000000000000000000000000000000000', 'key66': '0000000000000000200000000000000000000000000000000000000000000000', 'key67': '0000000000000000100000000000000000000000000000000000000000000000', 'key64': '0000000000000000800000000000000000000000000000000000000000000000', 'key65': '0000000000000000400000000000000000000000000000000000000000000000', 'key62': '0000000000000002000000000000000000000000000000000000000000000000', 'key63': '0000000000000001000000000000000000000000000000000000000000000000', 'key60': '0000000000000008000000000000000000000000000000000000000000000000', 'key61': '0000000000000004000000000000000000000000000000000000000000000000', 'key138': '0000000000000000000000000000000000200000000000000000000000000000', 'key155': '0000000000000000000000000000000000000010000000000000000000000000', 'msg218': '0000000000000000000000000000000000000000000000000000000000000000', 'msg219': '0000000000000000000000000000000000000000000000000000000000000000', 'msg216': '0000000000000000000000000000000000000000000000000000000000000000', 'msg217': '0000000000000000000000000000000000000000000000000000000000000000', 'msg214': '0000000000000000000000000000000000000000000000000000000000000000', 'key154': '0000000000000000000000000000000000000020000000000000000000000000', 'msg212': '0000000000000000000000000000000000000000000000000000000000000000', 'msg213': '0000000000000000000000000000000000000000000000000000000000000000', 'msg210': '0000000000000000000000000000000000000000000000000000000000000000', 'msg211': '0000000000000000000000000000000000000000000000000000000000000000', 'key117': '0000000000000000000000000000040000000000000000000000000000000000', 'key116': '0000000000000000000000000000080000000000000000000000000000000000', 'key115': '0000000000000000000000000000100000000000000000000000000000000000', 'key114': '0000000000000000000000000000200000000000000000000000000000000000', 'key113': '0000000000000000000000000000400000000000000000000000000000000000', 'key112': '0000000000000000000000000000800000000000000000000000000000000000', 'key111': '0000000000000000000000000001000000000000000000000000000000000000', 'key110': '0000000000000000000000000002000000000000000000000000000000000000', 'msg86': '0000000000000000000000000000000000000000000000000000000000000000', 'msg87': '0000000000000000000000000000000000000000000000000000000000000000', 'msg84': '0000000000000000000000000000000000000000000000000000000000000000', 'msg85': '0000000000000000000000000000000000000000000000000000000000000000', 'msg82': '0000000000000000000000000000000000000000000000000000000000000000', 'msg83': '0000000000000000000000000000000000000000000000000000000000000000', 'msg80': '0000000000000000000000000000000000000000000000000000000000000000', 'msg81': '0000000000000000000000000000000000000000000000000000000000000000', 'cip247': 'E11FEE3AD4A9A03956704B58720C92DD', 'cip254': '8CB4E2498382B523DCE6F7C17C91400B', 'cip253': '3C943E1A2E7E56E4B185302D2D5C5DBD', 'cip252': 'B3EFCF17F0E1B275D413DD4D3A5CAE68', 'cip251': '5E2833EC95ACE6B93AF28C6FCDBCE5D5', 'cip250': '83588863F183ECE04E95629A322F9A09', 'cip225': '5EA6D1B9881CE230B8EABAC59B7F5393', 'cip23': '1329EA7551CE6C335DB924D563694058', 'cip22': '69B24511DF9BE48CFDB416F08908315F', 'cip21': 'E68E3A421462A49AF8D7E544F7789301', 'msg33': '0000000000000000000000000000000000000000000000000000000000000000', 'msg32': '0000000000000000000000000000000000000000000000000000000000000000', 'msg31': '0000000000000000000000000000000000000000000000000000000000000000', 'msg30': '0000000000000000000000000000000000000000000000000000000000000000', 'msg37': '0000000000000000000000000000000000000000000000000000000000000000', 'msg36': '0000000000000000000000000000000000000000000000000000000000000000', 'msg35': '0000000000000000000000000000000000000000000000000000000000000000', 'msg34': '0000000000000000000000000000000000000000000000000000000000000000', 'cip27': '7F9F21E8C45D1E8A843060B963CC628B', 'msg39': '0000000000000000000000000000000000000000000000000000000000000000', 'msg38': '0000000000000000000000000000000000000000000000000000000000000000', 'cip26': '824D4C002C401677D5785D6C6DA96C68', 'key9': '0040000000000000000000000000000000000000000000000000000000000000', 'key8': '0080000000000000000000000000000000000000000000000000000000000000', 'cip25': '862703854F75F433135601000CD9363B', 'key3': '1000000000000000000000000000000000000000000000000000000000000000', 'key2': '2000000000000000000000000000000000000000000000000000000000000000', 'key1': '4000000000000000000000000000000000000000000000000000000000000000', 'key0': '8000000000000000000000000000000000000000000000000000000000000000', 'key7': '0100000000000000000000000000000000000000000000000000000000000000', 'key6': '0200000000000000000000000000000000000000000000000000000000000000', 'key5': '0400000000000000000000000000000000000000000000000000000000000000', 'key4': '0800000000000000000000000000000000000000000000000000000000000000', 'msg139': '0000000000000000000000000000000000000000000000000000000000000000', 'msg138': '0000000000000000000000000000000000000000000000000000000000000000', 'msg137': '0000000000000000000000000000000000000000000000000000000000000000', 'msg136': '0000000000000000000000000000000000000000000000000000000000000000', 'msg135': '0000000000000000000000000000000000000000000000000000000000000000', 'msg134': '0000000000000000000000000000000000000000000000000000000000000000', 'msg133': '0000000000000000000000000000000000000000000000000000000000000000', 'msg132': '0000000000000000000000000000000000000000000000000000000000000000', 'msg131': '0000000000000000000000000000000000000000000000000000000000000000', 'msg130': '0000000000000000000000000000000000000000000000000000000000000000', 'cip154': 'A94203746A266C5744C16BF4E8DFA6D7', 'cip155': 'D3BA78AD6B01CC7221FA7778699C8316', 'cip156': '994FDCC09C25400D14C05117B936EECD', 'cip157': '4012F67B2A0BEF2623CA6AC5B054BE62', 'cip150': '82AA2DB6FEE9212968D8282A1BF3242B', 'cip151': '220C8B197F54F8E86DAE575B07A570EF', 'cip152': '873C47F6F75BE9F710F91F2C54A69A7A', 'cip153': '0392FA7BB908FEF23774772F74AC968D', 'cip158': '1134AF65E6D3D5E3D3C23A499EE2F677', 'cip159': '6B35A344BD8DFD4002F5F22EA288F8E6', 'key22': '0000020000000000000000000000000000000000000000000000000000000000', 'key23': '0000010000000000000000000000000000000000000000000000000000000000', 'key20': '0000080000000000000000000000000000000000000000000000000000000000', 'key21': '0000040000000000000000000000000000000000000000000000000000000000', 'cip38': '83C5D584511836263D8B0DE7CEF0AD16', 'cip39': 'E09206EB6A5E8AC933BAAB46547E4CD9', 'key24': '0000008000000000000000000000000000000000000000000000000000000000', 'key25': '0000004000000000000000000000000000000000000000000000000000000000', 'cip34': 'F61EF2509D173E348E01839A26D033FF', 'cip35': '9D37D036C8568D2173654423CC7AAB39', 'cip36': 'A93D98C055DDAA592390CADB0F0C468D', 'cip37': 'F19CB2A5067E9FBADBD4F0D103007A54', 'cip30': '6FC34DDFF0C74674CE124D85E8A3447F', 'cip31': '436A5D315AF443DEA9BEF8D1E817E7E0', 'cip32': '8B0434C9C98CDA4B313DAD6F1E64A943', 'cip33': 'AF9BD15EF1535259C63D688BF67119C4', 'cip218': '39AE859D255487A68093A376D358BBC2', 'msg252': '0000000000000000000000000000000000000000000000000000000000000000', 'msg253': '0000000000000000000000000000000000000000000000000000000000000000', 'msg250': '0000000000000000000000000000000000000000000000000000000000000000', 'msg251': '0000000000000000000000000000000000000000000000000000000000000000', 'msg254': '0000000000000000000000000000000000000000000000000000000000000000', 'key97': '0000000000000000000000004000000000000000000000000000000000000000', 'key96': '0000000000000000000000008000000000000000000000000000000000000000', 'key95': '0000000000000000000000010000000000000000000000000000000000000000', 'key94': '0000000000000000000000020000000000000000000000000000000000000000', 'key93': '0000000000000000000000040000000000000000000000000000000000000000', 'key92': '0000000000000000000000080000000000000000000000000000000000000000', 'key91': '0000000000000000000000100000000000000000000000000000000000000000', 'key90': '0000000000000000000000200000000000000000000000000000000000000000', 'key153': '0000000000000000000000000000000000000040000000000000000000000000', 'key152': '0000000000000000000000000000000000000080000000000000000000000000', 'key151': '0000000000000000000000000000000000000100000000000000000000000000', 'key150': '0000000000000000000000000000000000000200000000000000000000000000', 'key157': '0000000000000000000000000000000000000004000000000000000000000000', 'key156': '0000000000000000000000000000000000000008000000000000000000000000', 'key99': '0000000000000000000000001000000000000000000000000000000000000000', 'key98': '0000000000000000000000002000000000000000000000000000000000000000', 'key238': '0000000000000000000000000000000000000000000000000000000000020000', 'key239': '0000000000000000000000000000000000000000000000000000000000010000', 'key232': '0000000000000000000000000000000000000000000000000000000000800000', 'key233': '0000000000000000000000000000000000000000000000000000000000400000', 'key230': '0000000000000000000000000000000000000000000000000000000002000000', 'key231': '0000000000000000000000000000000000000000000000000000000001000000', 'key236': '0000000000000000000000000000000000000000000000000000000000080000', 'key237': '0000000000000000000000000000000000000000000000000000000000040000', 'key234': '0000000000000000000000000000000000000000000000000000000000200000', 'key235': '0000000000000000000000000000000000000000000000000000000000100000', 'msg77': '0000000000000000000000000000000000000000000000000000000000000000', 'msg76': '0000000000000000000000000000000000000000000000000000000000000000', 'msg75': '0000000000000000000000000000000000000000000000000000000000000000', 'msg74': '0000000000000000000000000000000000000000000000000000000000000000', 'msg73': '0000000000000000000000000000000000000000000000000000000000000000', 'msg72': '0000000000000000000000000000000000000000000000000000000000000000', 'msg71': '0000000000000000000000000000000000000000000000000000000000000000', 'msg70': '0000000000000000000000000000000000000000000000000000000000000000', 'msg79': '0000000000000000000000000000000000000000000000000000000000000000', 'msg78': '0000000000000000000000000000000000000000000000000000000000000000', 'cip42': '64D62934D409F36505EEC3B925BE914D', 'key128': '0000000000000000000000000000000080000000000000000000000000000000', 'key129': '0000000000000000000000000000000040000000000000000000000000000000', 'key126': '0000000000000000000000000000000200000000000000000000000000000000', 'key127': '0000000000000000000000000000000100000000000000000000000000000000', 'key124': '0000000000000000000000000000000800000000000000000000000000000000', 'key125': '0000000000000000000000000000000400000000000000000000000000000000', 'key122': '0000000000000000000000000000002000000000000000000000000000000000', 'key123': '0000000000000000000000000000001000000000000000000000000000000000', 'key120': '0000000000000000000000000000008000000000000000000000000000000000', 'key121': '0000000000000000000000000000004000000000000000000000000000000000', 'cip109': '782D8A4D30EE841EDB2E7E88C63B851A', 'cip108': '62D8460820B18811DEBB617DE7B8EC8C', 'cip107': '27BCC9206AEC78DA48C1E9AB8D1A7A07', 'cip106': '59CF38A7C863C623991B5392944CB43C', 'cip105': 'FD7B1DD7C7FE279E6A5E2926DD890B5E', 'cip104': '258F95A0E86EE0EE8FC020B4A01900F2', 'cip103': '9F2BCB0C28768DA3B76206979B14EBC2', 'cip102': '955B8619F99F7609201CEEB338F32795', 'cip101': '23675E18C1C66B483D55E14AC7F9CC80', 'cip100': '957B107D23F3694F3FFD9957BBE13168', 'msg173': '0000000000000000000000000000000000000000000000000000000000000000', 'msg172': '0000000000000000000000000000000000000000000000000000000000000000', 'msg171': '0000000000000000000000000000000000000000000000000000000000000000', 'msg170': '0000000000000000000000000000000000000000000000000000000000000000', 'msg177': '0000000000000000000000000000000000000000000000000000000000000000', 'msg176': '0000000000000000000000000000000000000000000000000000000000000000', 'msg175': '0000000000000000000000000000000000000000000000000000000000000000', 'msg174': '0000000000000000000000000000000000000000000000000000000000000000', 'msg179': '0000000000000000000000000000000000000000000000000000000000000000', 'msg178': '0000000000000000000000000000000000000000000000000000000000000000', 'msg215': '0000000000000000000000000000000000000000000000000000000000000000', 'cip198': '7488F9790FEC8AAE2AADDF6A600629B3', 'cip199': '669C36695C33B63F16077CAE9AA940AA', 'cip211': '7F7C322D82557737F5407A797069B711', 'cip210': '4AA735D710704790C060BAD696DACABE', 'cip217': '04C7B0268EAEFED098C815935D868CF9', 'cip216': '684085D0BE8AE0D617B2EFEF62CAAC93', 'cip215': 'AFCF921E4FA24FDEF85EDAC12CD479F1', 'cip214': '18F86EA6C633228579C5728FF070AC21', 'cip190': 'BF90E87173A45115C811B6319C24FC4A', 'cip191': '8029EE840D130319330B432D95DB9AA7', 'cip192': '19D6D9F45582481A573D77917E778F3C', 'cip193': '556D552FDE7C64227E2B72776488D6C1', 'cip194': '3E81B51A214CC1F1CF6F35F9106A84BC', 'cip195': '4E48243857ECB700F8F16872E0BB4FA9', 'cip196': '681654DF6668CDDF1D3D604483AB483B', 'cip197': 'BD6CEEFD85A336E4F12D42076573ECA2', 'cip70': 'C8D70448CBA770CD94088F60CBF8C5AC', 'cip71': '56C89F1BA6D3AB20465F01F81D00A894', 'cip72': '919FC5BBFAB8C31F8B2A346FBC2AB282', 'cip73': 'FF57E3AB8751DAA252DD0DD917BEAD8B', 'cip74': '90B94853B317FFA8D41F2A32A3A061AB', 'cip75': 'F4A0257D0CF6C8C87D154746C2C94B52', 'cip76': '03666F848F252B501754773CB68CF3B2', 'cip77': 'F3D0941DDC7412A981C5F6CCAB082DC2', 'cip78': '21EDD2A11C57EE97AEADFACEC20A8691', 'cip79': '577CF09B5606F1443E8B57952004C68D', 'msg106': '0000000000000000000000000000000000000000000000000000000000000000', 'msg107': '0000000000000000000000000000000000000000000000000000000000000000', 'msg104': '0000000000000000000000000000000000000000000000000000000000000000', 'msg105': '0000000000000000000000000000000000000000000000000000000000000000', 'msg102': '0000000000000000000000000000000000000000000000000000000000000000', 'msg88': '0000000000000000000000000000000000000000000000000000000000000000', 'msg100': '0000000000000000000000000000000000000000000000000000000000000000', 'msg101': '0000000000000000000000000000000000000000000000000000000000000000', 'msg89': '0000000000000000000000000000000000000000000000000000000000000000', 'msg108': '0000000000000000000000000000000000000000000000000000000000000000', 'msg109': '0000000000000000000000000000000000000000000000000000000000000000', 'msg247': '0000000000000000000000000000000000000000000000000000000000000000', 'key119': '0000000000000000000000000000010000000000000000000000000000000000', 'key118': '0000000000000000000000000000020000000000000000000000000000000000', 'key59': '0000000000000010000000000000000000000000000000000000000000000000', 'key58': '0000000000000020000000000000000000000000000000000000000000000000', 'key53': '0000000000000400000000000000000000000000000000000000000000000000', 'key52': '0000000000000800000000000000000000000000000000000000000000000000', 'key51': '0000000000001000000000000000000000000000000000000000000000000000', 'key50': '0000000000002000000000000000000000000000000000000000000000000000', 'key57': '0000000000000040000000000000000000000000000000000000000000000000', 'key56': '0000000000000080000000000000000000000000000000000000000000000000', 'key55': '0000000000000100000000000000000000000000000000000000000000000000', 'key54': '0000000000000200000000000000000000000000000000000000000000000000', 'cip20': 'D36754729DB34ECA1ECAC2CE2B381713', 'msg103': '0000000000000000000000000000000000000000000000000000000000000000', 'msg209': '0000000000000000000000000000000000000000000000000000000000000000', 'msg208': '0000000000000000000000000000000000000000000000000000000000000000', 'msg205': '0000000000000000000000000000000000000000000000000000000000000000', 'msg204': '0000000000000000000000000000000000000000000000000000000000000000', 'msg207': '0000000000000000000000000000000000000000000000000000000000000000', 'msg206': '0000000000000000000000000000000000000000000000000000000000000000', 'msg201': '0000000000000000000000000000000000000000000000000000000000000000', 'msg200': '0000000000000000000000000000000000000000000000000000000000000000', 'msg203': '0000000000000000000000000000000000000000000000000000000000000000', 'msg202': '0000000000000000000000000000000000000000000000000000000000000000', 'key162': '0000000000000000000000000000000000000000200000000000000000000000', 'key163': '0000000000000000000000000000000000000000100000000000000000000000', 'key160': '0000000000000000000000000000000000000000800000000000000000000000', 'key161': '0000000000000000000000000000000000000000400000000000000000000000', 'key166': '0000000000000000000000000000000000000000020000000000000000000000', 'key167': '0000000000000000000000000000000000000000010000000000000000000000', 'key164': '0000000000000000000000000000000000000000080000000000000000000000', 'key165': '0000000000000000000000000000000000000000040000000000000000000000', 'key168': '0000000000000000000000000000000000000000008000000000000000000000', 'key169': '0000000000000000000000000000000000000000004000000000000000000000', 'msg245': '0000000000000000000000000000000000000000000000000000000000000000', 'cip228': '68AC18DB2FBF0A4A095A4B3344BF035D', 'cip229': '563868079C5DF91E3B47B370B0BBB820', 'cip222': '7AD12485E896037A8D1A4ABE8A80B9BB', 'cip223': 'CEC561C6F4C45CC944371E5D1C18EDF1', 'cip220': 'B9BE024D06447F8965E480B33975E36F', 'cip221': '24ECD5B3178150233BD38A4B9F8EBC86', 'cip226': '8023134FAC8BF5FDA86368BDA618AEF7', 'cip227': 'D37285234A927061BEC9F8AAE0E796C8', 'cip224': 'F4B1088B0858A3737DF2C90FD919D1D4', 'msg147': '0000000000000000000000000000000000000000000000000000000000000000', 'msg244': '0000000000000000000000000000000000000000000000000000000000000000', 'cip140': 'BA5D708CBA34F782DA00C7643C971DB9', 'msg28': '0000000000000000000000000000000000000000000000000000000000000000', 'msg29': '0000000000000000000000000000000000000000000000000000000000000000', 'msg24': '0000000000000000000000000000000000000000000000000000000000000000', 'msg25': '0000000000000000000000000000000000000000000000000000000000000000', 'msg26': '0000000000000000000000000000000000000000000000000000000000000000', 'msg27': '0000000000000000000000000000000000000000000000000000000000000000', 'msg20': '0000000000000000000000000000000000000000000000000000000000000000', 'msg21': '0000000000000000000000000000000000000000000000000000000000000000', 'msg22': '0000000000000000000000000000000000000000000000000000000000000000', 'msg23': '0000000000000000000000000000000000000000000000000000000000000000', 'cip136': '545690C09C8C396F1273510DA9065C12', 'cip137': '16D86FCC5910E2DD0CEA4DD5219B2D03', 'cip134': '90CA81DF4000404B567F5CFA9D193CB3', 'cip135': 'A2E6864259483D059B57BB921B7FBD99', 'cip132': '324D30DDC6979F17A3BEAEA3A76AD44C', 'cip133': 'A1AA0E04E2B61861796FD2AA30FBEB05', 'cip130': 'A5D7135A053B904D44B40E4E21693751', 'cip131': '3257CEC675BF755FEE67A44D7EDF2731', 'key229': '0000000000000000000000000000000000000000000000000000000004000000', 'cip138': 'EC4114C19DD5711CD927B0DBE34AAB4B', 'cip139': 'A78C62D8FD439E5B10A7EF436714AC22', 'key44': '0000000000080000000000000000000000000000000000000000000000000000', 'msg148': '0000000000000000000000000000000000000000000000000000000000000000', 'msg149': '0000000000000000000000000000000000000000000000000000000000000000', 'key45': '0000000000040000000000000000000000000000000000000000000000000000', 'msg142': '0000000000000000000000000000000000000000000000000000000000000000', 'msg143': '0000000000000000000000000000000000000000000000000000000000000000', 'msg140': '0000000000000000000000000000000000000000000000000000000000000000', 'msg141': '0000000000000000000000000000000000000000000000000000000000000000', 'msg146': '0000000000000000000000000000000000000000000000000000000000000000', 'key46': '0000000000020000000000000000000000000000000000000000000000000000', 'msg144': '0000000000000000000000000000000000000000000000000000000000000000', 'msg145': '0000000000000000000000000000000000000000000000000000000000000000', 'cip143': '187A1824D390AD2798E4F2264E5F1F21', 'cip142': '8A025CED99AF1047C5345358A291CDBB', 'cip141': '7DB9ADCFA26C1E784E7F485BD0A0A52C', 'key47': '0000000000010000000000000000000000000000000000000000000000000000', 'cip147': '96B8429F476485F8CC2E204534A8B64E', 'cip146': 'F9C79D54CEEE6170B195F4D30FA63FE0', 'cip145': '5D486AB86A883029EC74916851FFFA11', 'cip144': 'BA28DE5C32353C65B97A59889E7A7A40', 'key40': '0000000000800000000000000000000000000000000000000000000000000000', 'cip149': 'C72DC86F70B40169B3456783A611DAE9', 'cip148': '13061D65FEF26F5ACAAF3B55FDB98C36', 'key220': '0000000000000000000000000000000000000000000000000000000800000000', 'key203': '0000000000000000000000000000000000000000000000000010000000000000', 'key41': '0000000000400000000000000000000000000000000000000000000000000000'} |
## HASH |
# SHA-512 |
# all_zero_messages: each element of the the tuple is the SHA-256 hash of a message consist of an amount of zero bytes equal to the index of the hash in the tuple |
sha512_all_zero_messages = ('CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E', 'B8244D028981D693AF7B456AF8EFA4CAD63D282E19FF14942C246E50D9351D22704A802A71C3580B6370DE4CEB293C324A8423342557D4E5C38438F0E36910EE', '5EA71DC6D0B4F57BF39AADD07C208C35F06CD2BAC5FDE210397F70DE11D439C62EC1CDF3183758865FD387FCEA0BADA2F6C37A4A17851DD1D78FEFE6F204EE54', '6D518F8B31D1882FEACE10A9215F5D8CF5AFE037652A1D11D9C1408D988C2A4F71A5EDFC85D0712FA3F4E21B2C0A244C8C0D333BAB454311E24067D2A83E5E59', 'EC2D57691D9B2D40182AC565032054B7D784BA96B18BCB5BE0BB4E70E3FB041EFF582C8AF66EE50256539F2181D7F9E53627C0189DA7E75A4D5EF10EA93B20B3', '65FAA9D920E0E9CFF43FC3F30AB02BA2E8CF6F4643B58F7C1E64583FBEC8A268E677B0EC4D54406E748BECB53FDA210F5D4F39CF2A5014B1CA496B0805182649', 'C11D53B386F5EE0C042C9246D4A38B1E032A3BC9EA3F6827A9482D4F31B6E4A1973C97190BDC59D961D5B6F1D5B06C25C4B9E94CA04EAEF395A928FA851493D6', '76AFCA18A9B81FFB967FFCF0460ED221C3605D3820057214D785FA88259BB5CB729576178E6EDB0134F645D2E2E92CBABF1333462F3B9058692C950F51C64A92', '1B7409CCF0D5A34D3A77EAABFA9FE27427655BE9297127EE9522AA1BF4046D4F945983678169CB1A7348EDCAC47EF0D9E2C924130E5BCC5F0D94937852C42F1B', 'A85DE39409374651002C84CBA7C928EB96FB82F88ACC2AEAC392985DEF3E1389346122B82C9C47B743A5C2764BB0E3F5C309AF7202DBE723E69A5193E84FCBC4', '19BD3CBB62B1937957A11CABD0D39860582B6928E77D0E0EA5EE7F3B2F8CACB3DEA8EA0972651ADC3245FD10926F2F31E80377196E4E6C7EE2BD74051E58BCBA', '84BCD394CF4D2F2D59A04391726FE7CC0438664E13907418D69FDCCB0297ED79FA0C6BA2046CDD8F07E13D9C40D5C783F051260DE5FD2902890817E6F74D03FB', '666A9A1A7542E895A9F447D1C3E0FFD679BBF6346E0C43F5C7A733C46F5E56C2F65E69DFD4769A9CAD2B79B31D282F1CA2AA296EF41BD9833947ADA194F46940', 'B4286A45FED95442F6BDC6CA03D29687AED2D25F9AF548F099D05DCDDCCE291182BB900D2519B36A0B708A027204708E3959320A4AA3F4E79C6D94C6932018EB', '7CF95CDE6D8D85F13497DDBABC60A56BCA0ABEABD2BC3E723C0A4A8C0784B14C4EE3317620B79D260D42608C8B907571499187078D14304A5E7A84BC55193CE9', 'DA7852FB298E7456612A129EC356BFB6329720E795BE483F5F07ADAA146EAEC0DB2907902C087456F5F8C85B05995665380CC7E25CEFE1663F6D7158D1191419', '0B6CBAC838DFE7F47EA1BD0DF00EC282FDF45510C92161072CCFB84035390C4DA743D9C3B954EAA1B0F86FC9861B23CC6C8667AB232C11C686432EBB5C8C3F27', '1D1DDBA67C614373460ECDF0185069B4758286990E71266176F7483258D94EA404E3A65D7D8D7BC8516FBE2A9F8D9CE1BF27859EB779285199D69316F96453F3', 'B6814EB4BF32768B13C7A5DC04F7EFB18D5FBB48F561505511567F7EF183A03B776A097AFF26F098703766E1C97940C087E3E0A4F6E2AD60646EC9D3218C6AED', '2D6F4BCE07D729E2385A3B7F3643C4EE8EAA7AB88AEC3486F0DA1D49325047B143867043E2506C1531C96286528BA646EB081BB54C0E3DB403CA82C85340F1B3', 'D296B892B3A7964BD0CC882FC7C0BE948B6BBD8EB1EFF8C13942FCAABF1F38772DD56BA4D8ECD0B626FF5CEF1CD045A1B0A76910396F3C7430B215A85950E9C3', '8EDC8E22D78C7582525BF3A94AAF1EA0286A03DB90A0CB13E136AEF1BF8AA152AE4B8B72CE3940B7CFEE03AA6AB3CFEC42093D3081AD407DB4BDB2076BED7F30', 'A080CD443A054FEDEB357009663F325C075B3AB77182BC6B2369F3E7B03D3446A38DB84A7611FD5D35C4533DFA35F597DA1ADE685EBE94EB77D86A60C3602023', 'D92BA2A6F94BDCD17C2C18C8FD85B93D430F22615D152FDFC25CD58FE489D88036C09E0E664C5F57F9D7098B2818A65CD9260732D298FC3B6B017AB348235EB7', '11BB994B5D2EAB48B18667C7D8943E82C9011CB1D974304B8F2B6247A7E6B7F55CA2F7C62893644C3728D17DAFD74AE3BA46271CF6287BB9E751C779A26FEFC5', 'B7C0D359932E2CC0E85B731A285A66D57972B16893E0426D1605FA727AB698A25C54ABDFB06436885AF68DC5E2C85C0BFA997818EC3258068DEEE038470E249D', 'EB5A2D684D93699169F8243A966EFE83879F4D6434F7C90B4DB7599D123DC15FE92A46BE37BBC3417CBDA85BAB67AA924D75C7A235972C1953A96A78185A4CB1', '4F85061EF6C66BF0E030AF017AF8C7154ED3F7953594AE2CF6F663E8B95BA978A54C171B01F212880E2711C2FD745A12B959ED27E7F6B1847273F70A4010CCDE', '1A74152F13D085BC31C6B98C3A16C6F0C8DE26DBDC395CE8E0F96B2C099B4F2B418607435033D0471CFF047293F1068B4D238BB6BD467D8D82F2577F7A78FE78', '2B9F6D92EFA9E224F293D7004DEF25E45F0E2839277B28AD4CC68CCC67717BA2519B9A732740033B9EBBFA5793D4A94BE333CC6B64A3805610E6F2533E2B92AF', '6BA146A01B3AB7B81E81C9FFB30AC81B1BC891DB1AFCDD4386EB9A5F4A9B02B3FFA6042C914196B0E75EC344B0372CFFD3F73188721343BC458F063342EBB98B', '524A7BD2CB646A7ACFB6F62B4088839BB7697196CF820934061344CF70190A0BD691CB2E0E46B882D854C6C36946AF29B0F00C2ED7802E19424CD474C245E5DD', '5046ADC1DBA838867B2BBBFDD0C3423E58B57970B5267A90F57960924A87F1960A6A85EAA642DAC835424B5D7C8D637C00408C7A73DA672B7F498521420B6DD3', '3D4321D657903224B06051EB2FE69F0E1BD5B1E12F1976F09B39FA5ED2705228B2F384FD98EF1F221081730DA2CE1CB2FBBF4854260DEF49998B429FACECE3BA', 'F5C17634C4ABC78CD6DCE4B04D0E24BB8B7D5CF2D3A7702776B2B221B99AB0D760D119C2D2A7B95D5663A415435D3FABFE492FFEFD7388C8F47D9E160329B18F', '0543CF83E7B8BFB8E8E28515F02B4CFA8F07BE1283A125B06824D4AA9ACAF828F84E802CA41F7961FBFABBBA892F1FC19CE94AE1939CAF906C173347D4BF6396', '85531D8882578FCF9BCD90C2A24C5CA2FD6A49966F0D4A9B47E2017B21ACA0D2C2B66905BD56C7DD40A0014F44997698ED06F03EA247BE353FB1D12EC22CB658', '694A32501AF20C3A846F24207599151C629941747308CF69FC821646F3EEB975BF9D87A0946D8E28F5FEB39BE1255C5F2535AB13F69B49CE5BD44AD068D329D6', '4A2732D16513E4945E3BF846710A4D0F983F5856AD5469EAFA569811204EB8BED2057E4AF73E744EA2ECB1016912558DB129E5FC979A71E077B0E7F460FFDBCA', '986179B274230F2D5CC9F48679F50A0AB55F3D2A8EC9D3B6E78BEC32AA8D3D486F75F804F752768D016821EC933538350BA60895741E5D48F29E7D1B28C1BE29', '1080F871E39CC839E5BCC9F852F9A8F3DDC03CF7E72E9FD1D6E4A71D7E74936F58ADC646C9A9DC382FDE85C5D281C2A44A459CAF6AFA58272D7FA006152E4CB1', '5D8C1AA556FC17D6DC28D618F521AEE37FC0E1826FDBCF8D106E456FC3BCD3C76E712D23FEF3378BD2BE17B80EB5BFD884CCD89B67490B63C7BD118EAAC471D8', '8AC7790C0687F86D2D0CA82CFC9921C8CD6E6F5392594317D5EE6F3661500DE58EBD5EF6300A412C23ED1CD2748C5EADEEB9719F32758590BD4168A0259BBD70', '583B16C7F5D686420BAA33B90D6AF41B43A21ECC5B62B4F7B258FB9FEF4D0C8A1D0DE5B3B60642CD643AEC7266D4F589433B870D7F9E504373B6B8C24A6BE1D0', '63736DBB4E24DA288E552BDB3D8A68728C522DE7E77D06FC5BE87279E43FADFAC4321A2D935C4F9FFA496C901F64AC92FE8F4CA876F9126974E801983C0B1A7B', '4D6154EFBF78352538CDA06E64420FB4C99B4778E8111250F87A9B0C5E07F5FF36FEBCC52F4542C41C5F43B940052704BC825370FF3933D7925459C3FAD1A7AC', '26A4398BFFB0C0AEF9A6EC53CD3367A2D0ABF2F70097F711BBBF1E9E32FD9F1A72121691BB6A39EEB55D596EDD527934E541B4DEFB3B1426B1D1A6429804DC61', '6E6570A7CC802760730DB659A4EDE4221AC2CD944F4B0D97B0A5C8A9F2A072899E3C3FC5DAC336B53F8ACCDE81CBEECA6C5998A1471A2F91EB60E3E13620368D', 'ED68F5F49945DCD0D81DFEBE2F2FD1FCFE016807D5C64EE0377D046EFEB0A7FD9B4B9589B3DF8A14194D51DCFFBD89C8AAA072CEA2AD4E7976BDF53528EA90CC', '989A38778FC961EB2C79E70621EABFB4B22D6537F08A71359B27AF495646E304EE252A523769F66B75BC2FAF546ACB22A71B358B51221174AC0D964DA7A62821', 'E116D2D486BC802E99D5FFE83A666D5E324887A65965C7E0D90B238A4EE1DB97E28F59AED23E6F968868902D762DF06146833BE62064C4A74D7C9384DFB0C7F6', 'EF4F446491BD3788945DE1A8CE4291AB7C2A5013AB4A448C08C19E74F90949FEA8C9F25C59B37860BECFD3EF00F2E6713F15EC8AF9E6AECDF1F8E0214B87424D', 'C331A2A21695186C1EBD2C9FACDC5FA856BEDC757A50936B72577E76147373747D26BACFCE0E165F089E182CC227ADA737A0B42E51D9BDEC16FB5F8CA795B091', '49C014805DE283DDB14F9D15E359CD4A4002A54E9137997D5F22AA0D802E9C42BDCA7D56AE4E164B677E31D87D35884093D58F375D64D18693A00E1AA6E0D598', 'E72F5495AF804A0A93941422C9346AEE488463E1E17AE74E65E85F1BF5B0C40528BC27D15AD831B7B8CB371A84EA9309565536146223EDB0FCEFB65FC0C9122E', '2C2481278F62CD07726383B036775306AE6B693F199A6C700F735FE22507C9084BB91CE5F6458D3C3926514970226C563464723AA99C210B77518830576F8C0B', '2146AA8AB60C48ACFF43AE8C33C5DA4C2586F20A39F8F1308AEFB6F833B758AD7158BD5E9A386E45FEBA446F33855D393857B557FE8BA6FE52364E7A7AF3BE9B', '904F1892EC5C43C557199325FDA79CACAEE2E8F1B4A1D41B85C893D967C3209F0C58081C0C9A6083F85FD4866611DFEB490C11F3163C12F4F0579ADDA2C68100', 'D1ECFD1B7DD8E49BC005DD6549F73117DEC2E0008C3E81934B7B09C5BF922316B7B07F726B4AAA38780B00281AF470607F88B5AB67A17F23FC87E1FC860C011F', '7E0AC842735810E69B321F624906A6D6828AC65C292ED02CBAF60DD895D2CD7022CC8CACD6D4D18A6B589CBD90829E12C0194EAC3930A9F0B18DBEC2EBE419CF', '0A2CBDC97D1B676A5842DCA27A58404AF4AC09CE8BF0D4EE3C356082CA7EE203642B1502910FD30AFBCBB1EAA4264CC8EFF73F1350806A2B82660E3B1E4CB02C', '1D9BEA9A2A4C0C566C91D855CBB389C78AEC76105F79537A8CC9C7A8AC88A673757EA9F46370CA607235873EB2F43EF1C7578E9501F9908F5537055F2CE06528', '23AB3A7BA2CC3E9CBFEE0AC89AD27AD406C32A7F5BE639723BC79621D7782FA210A058FF6FB983EB61D1CF5E12095B6D669E8F852939B491A214F01A407DFB2A', 'A405DEC5087E201200212D9B99C62298C3B126681B5D607F39E9356BCFBF5FE618C53D5C31D31903D5A1D76F7EF8225D8C6DCA92DF040C6CC7CA3393F25131DC', '7BE9FDA48F4179E611C698A73CFF09FAF72869431EFEE6EAAD14DE0CB44BBF66503F752B7A8EB17083355F3CE6EB7D2806F236B25AF96A24E22B887405C20081', '19DC6AE12DE08B21B36C1EC7F353CE9E7CEF73FA4D1354C436234167F0847BC9E2B85E2F36208F773EF324E2D79E6AF1BECA4470E44B8672B47D077EFE33A1F8', '6C0E9557CF0FADF4DB740E203DF3D499F7247A472D9132B7E474420B142AE83E6CAB592F93AA096D51C04F732098FA7355622E955B459F1C6D87BAE8ABC73264', 'DD0A0B9213182C99444BB7FB2EBA5B28F521A768880BE2539706730693ED9EA462FEB4FD46B1DEB5E7D4F31A284F2803B476209B451C9DC4D6ED056D71736D64', '038EBCC2B60D7BEFE506172B841FE225D71849AF86F408EAEBB3B9D7C03D6CF0C6CC30203E7BB7B39BE6D5D0E6613689349C245B71C5F16FF8083DBE2EBF680D', 'E0841DE72B39EA1EBFA8C5FAC01AC64A1A48AF40423FABBBA9FC18BA31B8C412D73F882EF45BAA32ABD47C2E9F27A837FE72C95AFDDE0CA6754C987BD1D88918', '3A4AC70AEAA4C39FA67D80018EF7EB6509DF394B801A2B4B7421420DFA75CDA9746786391DEC6A9E7741394F65E400D92860E4195D8A6FA940F30AB962B75BDF', 'E1403027C2F55D2DC4972B35B16E9401D0A9B5E055839E650B242FB12051051F72EF760214BF436BA9DD2B0D67DAA2D55A783E782717D53966465B8C291ACBFC', '5EC97CC048A3CB5DA03093BC6D2B63CF5252ABAB6A72B24214FF885C062F58DC43C6CC05C0DC428A1A4E4B95EA84140A8883D81795416281B4AC4FD52290E0A1', 'E64C06BB828A1E41E494D4A153BA411D5B6F33B46DD0008C1E793EF0B6B12E9312CCCC321BC2161EC859BBCBB79B874DB8793DEA1B0EA1414E13185BFA7FF178', '6D55A0D1C6D689E702EC802DBA0388E19D898D9693A4CEBA31F000A4B447A50A2694C452991CC3B64F4C241518B66D6B0C70E2BE88075BC3C207CD88B5862BBF', 'EE5D694D66BB3EE0D55129C96C83116E7AF28B6838854D110CAFE9DCB530FC05EF8B97469D7FE0C864481298FBA5008C97EB2B503E90B58B1E33F8856CB132D2', '1E31651EDC2568B2FDCB50CFF0E8F2C53E0A9A76F32E5E38C023348C3733CC6D7DEA3E88DD2BA743CBBA9E133207DD57EBA95722A0197C3C23DD37E8D3BFFD1E', '6DB5955477A9BB5386C1AF03DF526496F9E64533E6C3071C8E5C44062541E91E9BB39096DA947A91BDFA5E7DE53C1E047DCF427C1DFDE94554D7458F8F0862EA', '05660148AFDDF48072B43854BDDB1D1C0571EDD3A4387262A487AD18D72E238725F8599D5B298DEC375FB463074A9F77AD93E7022B001C62DC94152E6DB3408F', 'DF452E0838104CB82540EFA412A70C507E1115EEACFE8A68D32B98D30CB396B25013F24376EC5324D9B12219AAD6FF931791E8AAF36E3B4074139053E53FD974', 'B6B4C190CCD537F7B879658FB3AB39A81347E1ECB68246DAB95648560587B8437ECB02B7825F46A9141059AE61887EC7B011C1314CBCC5741C9FAE953EAA02EC', '90C6DDA39740F839FB470F838C35D5F264A0A8664C57CBC66C431082710EE633CA4672B3B64902E7BBB7A61E9B9F4EEA251A7D8B6D5126DE6D73D3480FDEDE5D', '25581416BCC99A8C590FE9F215DEBEE0E172070961C7130EB9B3923E6D2F06FF2947657F678F0EE2F34A7E3C9F9E395D6CB0E7CE6EF235BA056F32F6815E3124', 'DF26CA83E1816B3283FE2412DBF69686EC221A1933FC15060AFAC985537CE79420AD1591CE18CF6FDE66B2295AABBDD2A87C31772E4E23299078D18D48C3FF16', '6B83E8FC9A2AD34694319EFF2972435D2FACFFB23F6E5D6B2EB7381BD9012A489912C56AB6DFCE07CA387B777496F612E63842AA294A208F5360077F37E87B1D', 'D4E72F43C75DE83DEB0526233423726503354D7112618B44C94E695D159A02B6DA4823A2C9A2BE8CF71D2C7E42108D0DB7EDBB54A640579F853E6D110E7599ED', '6A9746BEF52DCD5CBE2E455C808ED0025187E60BA58E2AB901EE5443323B652B45262AC7DFC37D0D21B81C15DFC5FA98F1C43BDC05F6AFFE70CEFF01EFFCFBA6', 'E74AFF12F2C3C6569C4BC031E6D65A3EA2E6857982E69AB07D81E46AFABB368B61F0C4262DB1AB445CD7D9C7B384E7561D29BFE729CBE6F3DB1FD5C04A1305D5', 'F58CC598FDEA5E45261B678570F64E75A64F9FAA7E268015A128EDEAF1B717EE583B3E2F6690AE31DCB515A95234D3D371148FBC14C26ECFA74E6A51F3D6E5F9', 'BF0772423BDC11A4029439ACEF8922C6C541519CE98BCE97681D1A1DA32BBF3A73F506138D494D9CC860B6AFB3584094565DB7683F6B2A2CB30E3E94430D1933', '6A7C465BC9531B9E1D75DF0E167CFA848D98EC994C43D68E651E6D782FC2C81DEC703033A44C267822BCB6A1EF31A1364AB57D29B99D1A3A3CA9E5E8D0CDFE5F', 'C4E61253D52C63B227943F42691201BF61321F7033C08888CA14D13C2587A3D97D40849F946E407DF3A569AEEE4F2AAA7EE44BB63B4D17694D31106E880F53FA', 'FC4A6C0BBF6E9F20FE5EBC966EC7B7A56102204F8CEE56799A220BB94A44DC51563F04E2975DD425F3637B8CF722743C7C907ACFDF38F95D7D36BA80C15E4917', 'BDD9BFE471648E8A116AB65D97E56F38B2D7516E0BA522DE25B284C7B29D089DC039BB653F1B08E6EA0792150CAD576ADC48890DD6956A6AA29E5175CC5E2F0A', '18EDFB05E5102DB1660D2CC6CE2078E8506BFE56BCDCAD81880D26C7F344ACE11EE77673E0415CF4EC00E14893D0447957D73F977E98CEB101A76EEF1C6565B4', '47E7E7C96BDA3D2385E50E15C6357D16C5872049F61EE62A033C341CDEE0DFAF905BD1F9FA24D1C53132159621D21D1774C2BBBF33F40E0386C4B80F3B12ED3D', 'E866B15DA9E5B18D4B3BDE250FC08A208399440F37471313C5B4006E4151B0F4464B2CD7246899935D58660C0749CD11570BB8240760A6E46BB175BE18CDAFFE', '3C01530D43156962F4A2305472EB5DC77464AE3BD88F932A2F55E72355C4C1DB1DF050C94951A1375ED6F69BBC4102EF6EA45574F4CA293123685564A1334596', '4A84147472604753A90ECB5CDC9614194FB947429B53EF773890B535E18223D04817F5E38C7064DE44F6DD0C84B4677A79B97F819CE111131BF816D11A92E18E', '6EDF7FF286DC9038E790E27B600ABADECCF74542CE91196B8EE6C4AC9308529CBD7DC65C82F82021F01863E2C08F846621E1930768E6F3590B2315C72298FBA1', 'F206F4F0EF09B90837F1D15A07C6CF4BD291D817663F9F85A0FC4341EC19910719AD571B6102A366AE848CD0F187D0DAEF912E05898B82C35213CD49A45EE8E0', '2DB5F3B0000212518614C74C73DCA3205CDA5751AA2504AD9BF9B98BE46E98143C064980DCE9A8A6372305840946717C38E244D9E1F2ECBDFF683FC1F0A8FBB5', '98E04E394B9BD572C13FCF46A965BEA43C2FC333E582AA57D5101587D194AD9AD68E43D6790A6AAE89DD9D32A68F699B9C6A0F20835CB78976D9961EA4DAFF05', '3EEABFB9888432E76A4AC77ABD24F85A65C6715B7C28880D8EBB2442B43CA10397533698450F2E4DC5A854880981E5609425C785E3B2BA14E2740DC600947857', 'FF61EBF3C2BCF802F3A3405E8BFC9CF78A41E45963CBD8A9CB65D1179DFBF7FB18F89C9F7A70A9BEEB88ADB3F9C122B0E8B7BE9E967B30807EF535D7C2830E65', 'A6AF7912278D814025FD2825A16943917461C881A8F2FF1972497A3A9F6998E349C5E375D69BC8697AE7197054083E0988198C4FC57CAB3184F98F82A07A1A1D', 'D9AD640884F40495B4255BD221F0902FF64F84E3136053D03ABEE7CA417D32A1D72F24A75CB67BC50629E102BDB2F81C0BB087E0EB5CB82FA3D67C4FA5D92450', '49EE1BFCDB996DA7444CC1EF41D1502790062E4CD54F0B22B88977ADA4476690E774B649794FE023B5DB35D6F8DC164215B946B2121912FF586A759463CB05F6', 'A3E171C1C71E0C8FB05DF6D783F5AC9C7CE0F9C3BBE653952EA048ADCE025192D5EBA4ED8CC7800BD52AFD265256ECEA887EA63725C49CF563455FF321D45E76', '169E21AD25319E522E1A1CDFE34F829B8CD9BCE19406B50ED22A1A75C388B432BDEBE050B155980E76D6B949786B2C89D1E2C5AB66D83D28EEBC14EE8F44A49D', '1C5C8D28E1B0088005604E2D0325A521449955F05F8544DA497C875377E9DC73E4550F04DBB8A2D370AF70036522B43FCEC2B78B5CD01875A384A40EAAD519FD', '77DDD3A542E530FD047B8977C657BA6CE72F1492E360B2B2212CD264E75EC03882E4FF0525517AB4207D14C70C2259BA88D4D335EE0E7E20543D22102AB1788C', '2BE2E788C8A8ADEAA9C89A7F78904CACEA6E39297D75E0573A73C756234534D6627AB4156B48A6657B29AB8BEB73334040AD39EAD81446BB09C70704EC707952', '0E67910BCF0F9CCDE5464C63B9C850A12A759227D16B040D98986D54253F9F34322318E56B8FEB86C5FB2270ED87F31252F7F68493EE759743909BD75E4BB544', 'E94480D20B6665599C4ED1BC3FC6949C9BE332FD91A14CEF14B3E263AB1000666E706B51869BC93B4F479BB6389351674E707E79562020510C1B6DFE4B90CC51', '39C8EF9B28A0A103843A97F402AE3C35EB25425147375B0D5461DD327EA3A7BF7131F1D0BC656E51C0DB203B111C63097DC5367F0647FAE10D729822F59AB80C', '48524FF46D1C5BF4C6A5560A2E13AAE75B8E096CB912A7A0AA2D5D59B8667C0889453E34070D74FA6CE6E8294E3E703C4AA3B58B351086449DE5FA7F1D07D8EF', '0BB9C76171FFA588DF5E07525C8CC0AFC532CEC39F97BB529AA07FCD3FA888D3533582FD5A2BA6F93925D90FAC300CE91ADCE0783B79CCEF2F52FD279626F482', '8488DEA55B0F962C4F16715AD3195FE4EF6ED61D4EC95BBDDC1F1A9ABBC3C1AEF167F960807BEF59DEC11C4CB498DF05440CEEB37174F0DDD43D567B504D55AD', 'C2E210F2674A648D9B58683E651F8FCA5CE4270C0489773D8E4FFAECD46B22B1D5273697F45275A7C441C9E4CA91A39BDB3E3B7EB74CBDB85266EEF8F30AC860', 'C106C47AD6EB79CD2290681CB04CB183EFFBD0B49402151385B2D07BE966E2D50BC9DB78E00BF30BB567CCDD3A1C7847260C94173BA215A0FEABB0EDEB643FF0', 'BEF13FA741340CB7C1174406F76F9C65445C76EC091E47DAA8537B5F769AD2231347C61144CE8F6E4CB16FD5CD27BB169930C3F8C3B5B9E24E6609491FBBD4E3', '4F3F095D015BE4A7A7CC0B8C04DA4AA09E74351E3A97651F744C23716EBD9B3E822E5077A01BAA5CC0ED45B9249E88AB343D4333539DF21ED229DA6F4A514E0F', 'BD0C9C169AFB486930933E393F0839380B97E5F0AC88892C7D36B2CCB2E0A31C9B7B8F09B2D9A664E9BD93785E0050959C54CB064050B8DAEB4D1DB1CBFEFDE2', 'BB78C9783303A24DBE8E5FCB112D9A4872D8521F30662770C6A4182CC6FD78BA865C467A5AE3D4D6348A5011AEB6DF95B46B6C99CF2BCED2BEEFEABA04EE458C', 'E46B5C1865B53513BB10BE9E3A2C2A54EE9E88F83E8802E85E728A2364AB649ECD4AF605B41D7583688F8A78D1B49E36F1EF5B8824AB89885578EED8EBDBFD15', 'D4BF12247A7396FFC0B16BD3B0094EB7CD3CD8558D961F77D9F1898DCF04E8559715F78CF6D80579C8DC2318631D1954A8A0599269AC5A4EA9B1331A3AB9A487', '876FEE26A8DC66D652341B4951D4A96F4F2652803231ED5EC625BBE0D5C49EA70941F5299D775A1ACE2291FC33B26016F73C81ACDE83B3C495BE55B6916890A1') |
# RadioGatun |
# from: http://radiogatun.noekeon.org/ |
# messages are raw string, hashes are in hex notation |
radiogatun32 = {'hash34': '5DD047238DD574B45621DFEDAFADD6BCB4594B6E0551E78CA2B62BCBD975D429', 'msg35': 'August 24-25, 2006', 'hash33': '4884DACCBDA87F1E02814152F0224DAB291B49FFD86516A30EA6C9D546730ECF', 'msg14': '12345', 'msg31': '1234567890123456789012', 'hash18': 'D77629174F56D8451F73CBE80EC7A20EF2DD65C46A1480CD004CBAA96F3FA1FD', 'hash29': '8BD3D5953ED234F7A0051A993776630A9722978D06240EECC66E05A0B2CB60C7', 'msg19': '1234567890', 'hash21': '15EDA58156CA398AF49CBE9C9E62BF036A66B303ACB0043FB57ECADF9E9C8EDA', 'hash32': '4CAE588C3F3C08DF85564379332309EA5F73A51405CD4408C9DBFFF1615EF297', 'hash15': '862B75D2E8E7F08F93812168502AF97BCE530C66688D4372A08EEA0951B5024A', 'hash14': 'B333C8413087FA49882BBD4F76A9223C4AA633A252514852C3F7C0C5F8F4D87B', 'hash17': 'E69E29BA139C20846116D8AD406E6197F1701D8243CC53BB86F2B72C62320A39', 'hash16': '90B7061A244CE7FBA80F9813787CB90EC3FBB3398AEE740AF1C0D44BC5282B73', 'hash11': 'A7FDB34FD5D85D564A62C0B1B1B60CFA3D7A0C778231C95CDCD9BD293CCA16C6', 'hash10': 'D4D08F6612F8EB58A855B2F5AABFC504E2972BA829DA94EDD960193D18BAD8D1', 'hash13': '9EBDD24F469993796C4AAC6A821735A65A3CDEF8A359944CE71F34E7A08E1182', 'hash12': '57364D849286C7B3E98F3FC898094F7DC1675BA881A620B75D70F39631A4AA5B', 'hash37': '4311D3CDC46EFE38FDB5C3023A160C3069B26A2AF0CE0CCAAFFA3F3C61629AD6', 'hash36': '041666388EF9655D48996A66DADA1193D6646012A7B25A24FB10E6075CF0FC54', 'hash35': '277C1598E324185706F8F3EA72B7DC8FBE361EA02DBB0A35AFC7F0E088ACF2F5', 'msg30': '123456789012345678901', 'hash19': '4F88759143CD9D11F6DE8DA4D3724C36C745223A5CFB7AD0E74DA87C80A43326', 'msg15': '123456', 'hash31': 'F769558AF4FB0ACB6643B893D3595C2E5B110C60256D1CEB672EB33999EF0887', 'hash30': '381957046BEC1DFC08EAA0B2818D9FA07BCF78386C43AA41C069B5CF33E4F9AB', 'msg34': 'SECOND CRYPTOGRAPHIC HASH WORKSHOP', 'msg16': '1234567', 'msg28': '1234567890123456789', 'msg29': '12345678901234567890', 'msg24': '123456789012345', 'msg11': '12', 'msg26': '12345678901234567', 'msg27': '123456789012345678', 'msg20': '12345678901', 'msg21': '123456789012', 'msg22': '1234567890123', 'msg10': '9', 'msg5': '4', 'msg4': '3', 'msg7': '6', 'msg6': '5', 'msg1': '0', 'msg0': '', 'msg3': '2', 'msg2': '1', 'msg37': 'In response to the SHA-1 vulnerability that was announced in Feb. 2005, NIST held a Cryptographic Hash Workshop on Oct. 31-Nov. 1, 2005 to solicit public input on its cryptographic hash function policy and standards. NIST continues to recommend a transition from SHA-1 to the larger approved hash functions (SHA-224, SHA-256, SHA-384, and SHA-512). In response to the workshop, NIST has also decided that it would be prudent in the long-term to develop an additional hash function through a public competition, similar to the development process for the block cipher in the Advanced Encryption Standard (AES).', 'msg12': '123', 'msg9': '8', 'msg8': '7', 'msg32': '12345678901234567890123', 'msg33': '123456789012345678901234', 'msg25': '1234567890123456', 'hash20': '5FC6C16C29CDD2EF78EE4F3C864C1942A052C110FD5A9711FE9BCF953A2D2D5B', 'msg13': '1234', 'hash22': '99F13E01DBF89E6BBF60C87E99F4F18C851D3385D9B5A1678C705E8F31F70B84', 'hash23': '0AC434523B00F5C3D1D2AEEDBAE851D3EEAF3D76963CFD70A8B1D875638C8CD4', 'hash24': '0EC6EAE7879543772B64F320BC5056C81ACE91AEA20F360CEFA57272E2C07197', 'hash25': '59612324F3F42D3096E69125D2733B86143AE668AE9ED561AD785E0EAC8DBA25', 'hash26': 'D52161B6BB583955B1ABB5781D2044BE8F4174904241533973C66B87880EDB53', 'hash27': 'E42EA26B8B696541CFEA557C47886ED41440A04EF8CCC055CEB6583F6ACF6015', 'hash28': '687BDEC54F854303E48300A52C9099E3153F481CE34E12CDC178D841C0926B51', 'msg17': '12345678', 'msg36': 'Santa Barbara, California', 'msg18': '123456789', 'hash5': '2D438E83A3D99929F44A1B0AB5A994EB4ABDFE11F9E72D62DE925BF120CAFCCD', 'hash4': 'E1D20A1B67028A7C102CF77B444E0F4D8489F95506C76E4F27CE43D4958810AD', 'hash7': '904573304A5BC7BA040F8DEF9EECA4138F7DDD7DA30E4B8FB97B7F6E06076BED', 'hash6': '8C3C9529C6CC4D266760670F38C7470D6ABA5A0905170A3692AE87E4ABF291FB', 'hash1': 'AF0D3F51B98E90EEEBAE86DD0B304A4003AC5F755FA2CAC2B6866A0A91C5C752', 'hash0': 'F30028B54AFAB6B3E55355D277711109A19BEDA7091067E9A492FB5ED9F20117', 'hash3': '070182313AB302CFC82459786F4A30EC66260C6676495CE86E72B3BE7C60F7AD', 'hash2': '896C580EF77A68C36B040DCD5A650C09B8B5D915ECE298AD0210A21ED5811C95', 'msg23': '12345678901234', 'hash9': '54E7013E72D94B31324D4878F91AE19A7085F20EFE9DAAB96A1FE559C78AE825', 'hash8': 'E7195ED9189C0169C90AFFEEFCF8810627DB1607F394FB13C7B43D06C74B1D4B'} |
radiogatun64 = {'hash34': '4B9A38E4A968A2096F70A896DCAD202BC1D2D29B4470227F739BEA973233B43F', 'msg35': 'August 24-25, 2006', 'hash33': 'EE7A689B4548FA98D83AB6B71432D4327AC172E3AD1302B0D5235D675B8D4952', 'msg14': '12345', 'msg31': '1234567890123456789012', 'hash18': '76A565017A42B258F5C8C9D2D9FD4C7347947A659ED142FF61C1BEA592F103C5', 'hash29': '073ED06E210785942E619BA6BE2C00D4E8A8C991AAD67FEA3ED5E75A3A1CA534', 'msg19': '1234567890', 'hash21': '54877BD9BA9DCC929B152EFD72F46AFC6A772A84FCEDA7ED85398932B185D5A4', 'hash32': '540D61172733EF9A691C487E3739B49DF4406861D0F0AA8C373A56D5A81CBAC9', 'hash15': '1A41026D8183CB13B39819ACD5281617A25BE557C9C09E939F07EEC72347CE34', 'hash14': 'CE8CEEA40E4FDA63EB2453E2CFFF0C9C68E969BFF13757987B0FF9B242394FC7', 'hash17': '4C92EE54656958C6017A7C780E569695F6C354510537AC87206EE887B1E8F258', 'hash16': '89C6A058B9E8A2C7176A429E941BBEE5F214A9B0603420562991CBF2751CB817', 'hash11': 'BA12168F91F5C124F8AE3908815DC7F3FBF6BCF6E3C66BB8507B16B9B269541E', 'hash10': 'E2F59B35CB58EFE2200D9544A0BA5FC0659F6019D3EDD4E94A1BB0363166AFD9', 'hash13': '733E2B49A53FB166B6F3BD341919578B8C931880F8B8BD7C0FBBEE1A538E7307', 'hash12': '9719B972D31893EA2B24BD4AC88ACBA598AEFE75DD596692BDA08414080778C4', 'hash37': '2C9EC1EFC5D2FEEFFC2817CD571F394328111DB8068FC79E2FB84A42416BF5D3', 'hash36': '0D08DAF2354FA95AAA5B6A50F514384ECDD35940252E0631002E600E13CD285F', 'hash35': '0950DF1B217D3079CAF7D2F5A7F91D3FEBF1A41C4887297B828E36FEB1998534', 'msg30': '123456789012345678901', 'hash19': '93B2D9E81645DDCD588EDCB8EB0E18160C2CBF891760CB831D88C3D81F218061', 'msg15': '123456', 'hash31': '20E64EC450D4FFE67138850E0F4AFE9C7805AB0F1E0B191DF6E57A5555DA6676', 'hash30': '4B71AF0C9D20CF9E827598592835B58235001D65BAA3779136BC45C8C7B26859', 'msg34': 'SECOND CRYPTOGRAPHIC HASH WORKSHOP', 'msg16': '1234567', 'msg28': '1234567890123456789', 'msg29': '12345678901234567890', 'msg24': '123456789012345', 'msg11': '12', 'msg26': '12345678901234567', 'msg27': '123456789012345678', 'msg20': '12345678901', 'msg21': '123456789012', 'msg22': '1234567890123', 'msg10': '9', 'msg5': '4', 'msg4': '3', 'msg7': '6', 'msg6': '5', 'msg1': '0', 'msg0': '', 'msg3': '2', 'msg2': '1', 'msg37': 'In response to the SHA-1 vulnerability that was announced in Feb. 2005, NIST held a Cryptographic Hash Workshop on Oct. 31-Nov. 1, 2005 to solicit public input on its cryptographic hash function policy and standards. NIST continues to recommend a transition from SHA-1 to the larger approved hash functions (SHA-224, SHA-256, SHA-384, and SHA-512). In response to the workshop, NIST has also decided that it would be prudent in the long-term to develop an additional hash function through a public competition, similar to the development process for the block cipher in the Advanced Encryption Standard (AES).', 'msg12': '123', 'msg9': '8', 'msg8': '7', 'msg32': '12345678901234567890123', 'msg33': '123456789012345678901234', 'msg25': '1234567890123456', 'hash20': '09C7288E06FC1040C330962737E95887DC6D8BC2985D04A5CAC122BE2689F26C', 'msg13': '1234', 'hash22': '8DA9DC13C922E28DE1D2AC136904B18B8CA5C9332C89982D9FAED2B00C1D0AF9', 'hash23': '64421D3084602E7388679364D5767AA5381F54ABD92CDBA4F05DAD06227F55AF', 'hash24': 'FDE56263C4A79F19A7EB663D1BB427243A6AD3522EC31FC00D81775EB6891978', 'hash25': 'CAAEC14B5B4A7960D6854709770E3071D635D60224F58AA385867E549EF4CC42', 'hash26': 'A0C5AC2493B71A5E9A4D41DD1854DAC0383193BAE0B5E7CA035F86AD052F46AA', 'hash27': '7898EE3F72838E94336E3DE2AFB4C9A7881D395B21ED74473186D919C78A8B88', 'hash28': 'F0D6C1B2EFC3D88C52B30DDF46920A22008F07FC4FFC9600FDDF1650FAF3FCB9', 'msg17': '12345678', 'msg36': 'Santa Barbara, California', 'msg18': '123456789', 'hash5': '05B7B2D2F2C0D48415E292325AD0901009F12EF1F9581A7A19C422795CF36459', 'hash4': '449B69EF4ACA0D081B6B2CE9C8BD22BE30BC1CAA130FB0714C8621E42FFA631D', 'hash7': 'ED37ECED317B65B676F72F88CEA918B9B878C3F245E79D0C2D35D86C4DEE5A8F', 'hash6': '95A02B2899296E69988B11D47B4B9FBA51AF22A09A854523924E8DFFE0EC8922', 'hash1': '5DB6B188AFEF88AD8D2E426105ACFFCD42EE439CC26275D11F87B530DE94D066', 'hash0': '64A9A7FA139905B57BDAB35D33AA216370D5EAE13E77BFCDD85513408311A584', 'hash3': '66E36CE1926EC1F7457B670D7B68BD819B2D546A75E5CDFD2691CB5F3DC2818A', 'hash2': '3A3D7A7B79D1EC5A4DB4DC032B685574F7CA7517105F1634B61A34AA2575FCD3', 'msg23': '12345678901234', 'hash9': '7338658BFD49605F1EBB186E7E1EC3E75CF672655BCCE499CB8B3952B448B0B4', 'hash8': '8862FC05C7E23677904020462809A1F2784E117C349AD1D0D8CB0F433021D75C'} |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/padding.py |
---|
0,0 → 1,247 |
# ============================================================================= |
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com> |
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> ) |
# |
# Permission is hereby granted, free of charge, to any person obtaining a copy |
# of this software and associated documentation files (the "Software"), to deal |
# in the Software without restriction, including without limitation the rights |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
# copies of the Software, and to permit persons to whom the Software is |
# furnished to do so, subject to the following conditions: |
# |
# The above copyright notice and this permission notice shall be included in |
# all copies or substantial portions of the Software. |
# |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
# THE SOFTWARE. |
# ============================================================================= |
"""Module for padding functions |
padding info here: http://en.wikipedia.org/wiki/Padding_(cryptography) |
""" |
import random |
PAD = 0 |
UNPAD = 1 |
def bitPadding (padData, direction, length=None): |
"""Pad a string using bitPadding |
padData = raw string to pad/unpad |
direction = PAD or UNPAD |
length = amount of bytes the padded string should be a multiple of |
(length variable is not used when unpadding) |
returns: (un)padded raw string |
A new block full of padding will be added when padding data that is |
already a multiple of the length. |
Example: |
========= |
>>> import padding |
>>> padding.bitPadding('test', padding.PAD, 8) |
'test\\x80\\x00\\x00\\x00' |
>>> padding.bitPadding(_,padding.UNPAD) |
'test'""" |
if direction == PAD: |
if length == None: |
raise ValueError,"Supply a valid length" |
return __bitPadding(padData, length) |
elif direction == UNPAD: |
return __bitPadding_unpad(padData) |
else: |
raise ValueError,"Supply a valid direction" |
def __bitPadding (toPad,length): |
padded = toPad + '\x80' + '\x00'*(length - len(toPad)%length -1) |
return padded |
def __bitPadding_unpad (padded): |
if padded.rstrip('\x00')[-1] == '\x80': |
return padded.rstrip('\x00')[:-1] |
else: |
return padded |
def zerosPadding (padData, direction, length=None): |
"""Pad a string using zerosPadding |
padData = raw string to pad/unpad |
direction = PAD or UNPAD |
beware: padding and unpadding a string ending in 0's |
will remove those 0's too |
length = amount of bytes the padded string should be a multiple of |
(length variable is not used when unpadding) |
returns: (un)padded raw string |
No padding will be added when padding data that is already a |
multiple of the given length. |
Example: |
========= |
>>> import padding |
>>> padding.zerosPadding('12345678',padding.PAD,16) |
'12345678\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' |
>>> padding.zerosPadding(_,padding.UNPAD) |
'12345678'""" |
if direction == PAD: |
if length == None: |
raise ValueError,"Supply a valid length" |
return __zerosPadding(padData, length) |
elif direction == UNPAD: |
return __zerosPadding_unpad(padData) |
else: |
raise ValueError,"Supply a valid direction" |
def __zerosPadding (toPad, length): |
padLength = (length - len(toPad))%length |
return toPad + '\x00'*padLength |
def __zerosPadding_unpad (padded ): |
return padded.rstrip('\x00') |
def PKCS7(padData, direction, length=None): |
"""Pad a string using PKCS7 |
padData = raw string to pad/unpad |
direction = PAD or UNPAD |
length = amount of bytes the padded string should be a multiple of |
(length variable is not used when unpadding) |
returns: (un)padded raw string |
A new block full of padding will be added when padding data that is |
already a multiple of the given length. |
Example: |
========= |
>>> import padding |
>>> padding.PKCS7('12345678',padding.PAD,16) |
'12345678\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08' |
>>> padding.PKCS7(_,padding.UNPAD) |
'12345678'""" |
if direction == PAD: |
if length == None: |
raise ValueError,"Supply a valid length" |
return __PKCS7(padData, length) |
elif direction == UNPAD: |
return __PKCS7_unpad(padData) |
else: |
raise ValueError,"Supply a valid direction" |
def __PKCS7 (toPad, length): |
amount = length - len(toPad)%length |
pattern = chr(amount) |
pad = pattern*amount |
return toPad + pad |
def __PKCS7_unpad (padded): |
pattern = padded[-1] |
length = ord(pattern) |
#check if the bytes to be removed are all the same pattern |
if padded.endswith(pattern*length): |
return padded[:-length] |
else: |
return padded |
print 'error: padding pattern not recognized' |
def ANSI_X923 (padData, direction, length=None): |
"""Pad a string using ANSI_X923 |
padData = raw string to pad/unpad |
direction = PAD or UNPAD |
length = amount of bytes the padded string should be a multiple of |
(length variable is not used when unpadding) |
returns: (un)padded raw string |
A new block full of padding will be added when padding data that is |
already a multiple of the given length. |
Example: |
========= |
>>> import padding |
>>> padding.ANSI_X923('12345678',padding.PAD,16) |
'12345678\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x08' |
>>> padding.ANSI_X923(_,padding.UNPAD) |
'12345678'""" |
if direction == PAD: |
if length == None: |
raise ValueError,"Supply a valid length" |
return __ANSI_X923(padData, length) |
elif direction == UNPAD: |
return __ANSI_X923_unpad(padData) |
else: |
raise ValueError,"Supply a valid direction" |
def __ANSI_X923 (toPad, length): |
bytesToPad = length - len(toPad)%length |
trail = chr(bytesToPad) |
pattern = '\x00'*(bytesToPad -1) + trail |
return toPad + pattern |
def __ANSI_X923_unpad (padded): |
length =ord(padded[-1]) |
#check if the bytes to be removed are all zero |
if padded.count('\x00',-length,-1) == length - 1: |
return padded[:-length] |
else: |
print 'error: padding pattern not recognized %s' % padded.count('\x00',-length,-1) |
return padded |
def ISO_10126 (padData, direction, length=None): |
"""Pad a string using ISO_10126 |
padData = raw string to pad/unpad |
direction = PAD or UNPAD |
length = amount of bytes the padded string should be a multiple of |
(length variable is not used when unpadding) |
returns: (un)padded raw string |
A new block full of padding will be added when padding data that is |
already a multiple of the given length. |
Example: |
========= |
>>> import padding |
>>> padded = padding.ISO_10126('12345678',padding.PAD,16) |
>>> padding.ISO_10126(padded,padding.UNPAD) |
'12345678'""" |
if direction == PAD: |
if length == None: |
raise ValueError,"Supply a valid length" |
return __ISO_10126(padData, length) |
elif direction == UNPAD: |
return __ISO_10126_unpad(padData) |
else: |
raise ValueError,"Supply a valid direction" |
def __ISO_10126 (toPad, length): |
bytesToPad = length - len(toPad)%length |
randomPattern = ''.join(chr(random.randint(0,255)) for x in range(0,bytesToPad-1)) |
return toPad + randomPattern + chr(bytesToPad) |
def __ISO_10126_unpad (padded): |
return padded[0:len(padded)-ord(padded[-1])] |
def _test(): |
import doctest |
doctest.testmod() |
if __name__ == "__main__": |
_test() |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/RFC1751.py |
---|
0,0 → 1,0 |
from Crypto.Util.RFC1751 import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/number.py |
---|
0,0 → 1,0 |
from Crypto.Util.number import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/util.py |
---|
0,0 → 1,55 |
def number2string(i): |
"""Convert a number to a string |
Input: long or integer |
Output: string (big-endian) |
""" |
s=hex(i)[2:].rstrip('L') |
if len(s) % 2: |
s = '0' + s |
return s.decode('hex') |
def number2string_N(i, N): |
"""Convert a number to a string of fixed size |
i: long or integer |
N: length of string |
Output: string (big-endian) |
""" |
s = '%0*x' % (N*2, i) |
return s.decode('hex') |
def string2number(i): |
""" Convert a string to a number |
Input: string (big-endian) |
Output: long or integer |
""" |
return int(i.encode('hex'),16) |
def xorstring(a,b): |
"""XOR two strings of same length |
For more complex cases, see CryptoPlus.Cipher.XOR""" |
assert len(a) == len(b) |
return number2string_N(string2number(a)^string2number(b), len(a)) |
class Counter(str): |
#found here: http://www.lag.net/pipermail/paramiko/2008-February.txt |
"""Necessary for CTR chaining mode |
Initializing a counter object (ctr = Counter('xxx'), gives a value to the counter object. |
Everytime the object is called ( ctr() ) it returns the current value and increments it by 1. |
Input/output is a raw string. |
Counter value is big endian""" |
def __init__(self, initial_ctr): |
if not isinstance(initial_ctr, str): |
raise TypeError("nonce must be str") |
self.c = int(initial_ctr.encode('hex'), 16) |
def __call__(self): |
# This might be slow, but it works as a demonstration |
ctr = ("%032x" % (self.c,)).decode('hex') |
self.c += 1 |
return ctr |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/randpool.py |
---|
0,0 → 1,0 |
from Crypto.Util.randpool import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/__init__.py |
---|
0,0 → 1,17 |
"""Util initialization |
makes the Util modules from Crypto AND CryptoPlus available here |
""" |
#import Crypto |
#from Crypto.Util import number, randpool, RFC1751 |
import padding, util, python_compat, number, randpool, RFC1751 |
from pkg_resources import parse_version |
__all__ = ["padding","util","number","randpool","RFC1751","python_compat"] |
#if parse_version(Crypto.__version__) > parse_version("2.0.1"): |
# from Crypto.Util import python_compat |
# __all__.append("python_compat") |
#del Crypto |
/relevation/ext/python-cryptoplus/src/CryptoPlus/Util/python_compat.py |
---|
0,0 → 1,6 |
from pkg_resources import parse_version |
import Crypto |
if parse_version(Crypto.__version__) > parse_version("2.0.1"): |
del Crypto |
from Crypto.Util.python_compat import * |
/relevation/ext/python-cryptoplus/src/CryptoPlus/PublicKey.py |
---|
0,0 → 1,11 |
"""Imports Crypto PublicKey |
Now you can do: |
>>> from CryptoPlus.PublicKey import * |
OR: |
>>> from CryptoPlus.PublicKey import RSA |
but not: |
>>> import CryptoPlus.PublicKey.RSA |
""" |
from Crypto.PublicKey import * |
/relevation/ext/python-cryptoplus |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /relevation/branches/0.2/python-cryptoplus:r122-130 |
Merged /relevation/branches/0.3/python-cryptoplus:r133-141 |
Merged /relevation/branches/1.0/python-cryptoplus:r142-156 |
Merged /relevation/tags/1.0/python-cryptoplus:r163 |
Merged /relevation/branches/1.1-PyCryptoPlus/python-cryptoplus:r168 |