From 3c40c7f134b4e87baa43b0cacb435b6f96245e2f Mon Sep 17 00:00:00 2001 From: Zhanna Tsitkov Date: Mon, 3 Aug 2009 14:19:16 +0000 Subject: Crypto modularity proj: Separate files under crypto directory based on their functionality. Move Kerberos specific files into krb subdir and MIT specific - into builtin subdir. Place all tests into crypto_tests subfolder. bigredbutton: whitespace git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@22477 dc483132-0cff-0310-8789-dd5450dbe970 --- src/Makefile.in | 60 +- src/configure.in | 12 +- src/lib/crypto/Makefile.in | 371 +- src/lib/crypto/aead.c | 573 -- src/lib/crypto/aead.h | 123 - src/lib/crypto/aes/Makefile.in | 72 - src/lib/crypto/aes/aes-gen.c | 326 - src/lib/crypto/aes/aes-test.c | 138 - src/lib/crypto/aes/aes.h | 97 - src/lib/crypto/aes/aes.txt | 70 - src/lib/crypto/aes/aes_s2k.c | 90 - src/lib/crypto/aes/aes_s2k.h | 4 - src/lib/crypto/aes/aescpp.h | 55 - src/lib/crypto/aes/aescrypp.c | 487 -- src/lib/crypto/aes/aescrypt.asm | 402 -- src/lib/crypto/aes/aescrypt.c | 421 -- src/lib/crypto/aes/aeskey.c | 369 - src/lib/crypto/aes/aeskeypp.c | 399 -- src/lib/crypto/aes/aesopt.h | 851 --- src/lib/crypto/aes/aessrc.url | 1 - src/lib/crypto/aes/aestab.c | 494 -- src/lib/crypto/aes/deps | 20 - src/lib/crypto/aes/expect-vk.txt | 1548 ----- src/lib/crypto/aes/expect-vt.txt | 1036 --- src/lib/crypto/aes/test/Readme.txt | 22 - src/lib/crypto/aes/test/cbc_d_m.txt | 7224 -------------------- src/lib/crypto/aes/test/cbc_e_m.txt | 7224 -------------------- src/lib/crypto/aes/test/ecb_d_m.txt | 6024 ---------------- src/lib/crypto/aes/test/ecb_e_m.txt | 6024 ---------------- src/lib/crypto/aes/test/ecb_iv.readme | 19 - src/lib/crypto/aes/test/ecb_iv.txt | 123 - src/lib/crypto/aes/test/ecb_tbl.txt | 1955 ------ src/lib/crypto/aes/test/ecb_vk.txt | 2334 ------- src/lib/crypto/aes/test/ecb_vt.txt | 1566 ----- src/lib/crypto/aes/test/katmct.pdf | Bin 100812 -> 0 bytes src/lib/crypto/aes/uitypes.h | 83 - src/lib/crypto/aes/vb.txt | 87 - src/lib/crypto/arcfour/Makefile.in | 43 - src/lib/crypto/arcfour/arcfour-int.h | 32 - src/lib/crypto/arcfour/arcfour.c | 334 - src/lib/crypto/arcfour/arcfour.h | 43 - src/lib/crypto/arcfour/arcfour_aead.c | 325 - src/lib/crypto/arcfour/arcfour_s2k.c | 59 - src/lib/crypto/arcfour/deps | 37 - src/lib/crypto/block_size.c | 47 - src/lib/crypto/builtin/Makefile.in | 123 + src/lib/crypto/builtin/aes/Makefile.in | 61 + src/lib/crypto/builtin/aes/aes-gen.c | 326 + src/lib/crypto/builtin/aes/aes.h | 97 + src/lib/crypto/builtin/aes/aes.txt | 70 + src/lib/crypto/builtin/aes/aes_s2k.c | 90 + src/lib/crypto/builtin/aes/aes_s2k.h | 4 + src/lib/crypto/builtin/aes/aescpp.h | 55 + src/lib/crypto/builtin/aes/aescrypp.c | 487 ++ src/lib/crypto/builtin/aes/aescrypt.asm | 402 ++ src/lib/crypto/builtin/aes/aescrypt.c | 421 ++ src/lib/crypto/builtin/aes/aeskey.c | 369 + src/lib/crypto/builtin/aes/aeskeypp.c | 399 ++ src/lib/crypto/builtin/aes/aesopt.h | 851 +++ src/lib/crypto/builtin/aes/aessrc.url | 1 + src/lib/crypto/builtin/aes/aestab.c | 494 ++ src/lib/crypto/builtin/aes/deps | 21 + src/lib/crypto/builtin/aes/uitypes.h | 83 + src/lib/crypto/builtin/arcfour/Makefile.in | 41 + src/lib/crypto/builtin/arcfour/arcfour-int.h | 32 + src/lib/crypto/builtin/arcfour/arcfour.c | 335 + src/lib/crypto/builtin/arcfour/arcfour.h | 43 + src/lib/crypto/builtin/arcfour/arcfour_aead.c | 325 + src/lib/crypto/builtin/arcfour/arcfour_s2k.c | 59 + src/lib/crypto/builtin/arcfour/deps | 38 + src/lib/crypto/builtin/deps | 25 + src/lib/crypto/builtin/des/ISSUES | 13 + src/lib/crypto/builtin/des/Makefile.in | 76 + src/lib/crypto/builtin/des/afsstring2key.c | 570 ++ src/lib/crypto/builtin/des/d3_aead.c | 207 + src/lib/crypto/builtin/des/d3_cbc.c | 223 + src/lib/crypto/builtin/des/d3_kysched.c | 50 + src/lib/crypto/builtin/des/deps | 158 + src/lib/crypto/builtin/des/des_int.h | 382 ++ src/lib/crypto/builtin/des/des_prf.c | 54 + src/lib/crypto/builtin/des/doc/libdes.doc | 208 + src/lib/crypto/builtin/des/f_aead.c | 192 + src/lib/crypto/builtin/des/f_cbc.c | 274 + src/lib/crypto/builtin/des/f_cksum.c | 136 + src/lib/crypto/builtin/des/f_parity.c | 56 + src/lib/crypto/builtin/des/f_sched.c | 359 + src/lib/crypto/builtin/des/f_tables.c | 370 + src/lib/crypto/builtin/des/f_tables.h | 279 + src/lib/crypto/builtin/des/key_sched.c | 61 + src/lib/crypto/builtin/des/string2key.c | 261 + src/lib/crypto/builtin/des/weak_key.c | 85 + src/lib/crypto/builtin/hmac.c | 165 + src/lib/crypto/builtin/md4/ISSUES | 3 + src/lib/crypto/builtin/md4/Makefile.in | 39 + src/lib/crypto/builtin/md4/deps | 13 + src/lib/crypto/builtin/md4/md4.c | 246 + src/lib/crypto/builtin/md4/rsa-md4.h | 94 + src/lib/crypto/builtin/md5/ISSUES | 3 + src/lib/crypto/builtin/md5/Makefile.in | 37 + src/lib/crypto/builtin/md5/deps | 13 + src/lib/crypto/builtin/md5/md5.c | 343 + src/lib/crypto/builtin/md5/rsa-md5.h | 60 + src/lib/crypto/builtin/pbkdf2.c | 265 + src/lib/crypto/builtin/sha1/ISSUES | 7 + src/lib/crypto/builtin/sha1/Makefile.in | 37 + src/lib/crypto/builtin/sha1/deps | 13 + src/lib/crypto/builtin/sha1/shs.c | 381 ++ src/lib/crypto/builtin/sha1/shs.h | 45 + src/lib/crypto/cf2.c | 154 - src/lib/crypto/checksum_length.c | 53 - src/lib/crypto/cksumtype_to_string.c | 45 - src/lib/crypto/cksumtypes.c | 91 - src/lib/crypto/cksumtypes.h | 62 - src/lib/crypto/coll_proof_cksum.c | 50 - src/lib/crypto/combine_keys.c | 349 - src/lib/crypto/crc32/CRC.pm | 156 - src/lib/crypto/crc32/Makefile.in | 41 - src/lib/crypto/crc32/Poly.pm | 182 - src/lib/crypto/crc32/crc-32.h | 71 - src/lib/crypto/crc32/crc.pl | 111 - src/lib/crypto/crc32/crc32.c | 192 - src/lib/crypto/crc32/deps | 13 - src/lib/crypto/crc32/t_crc.c | 213 - src/lib/crypto/crypto_length.c | 170 - src/lib/crypto/crypto_libinit.c | 33 - src/lib/crypto/crypto_tests/Makefile.in | 177 + src/lib/crypto/crypto_tests/aes-test.c | 138 + src/lib/crypto/crypto_tests/deps | 1 + src/lib/crypto/crypto_tests/destest.c | 247 + src/lib/crypto/crypto_tests/expect-vk.txt | 1548 +++++ src/lib/crypto/crypto_tests/expect-vt.txt | 1036 +++ src/lib/crypto/crypto_tests/keytest.data | 171 + src/lib/crypto/crypto_tests/t_afss2k.c | 136 + src/lib/crypto/crypto_tests/t_cf2.c | 88 + src/lib/crypto/crypto_tests/t_cf2.comments | 6 + src/lib/crypto/crypto_tests/t_cf2.expected | 5 + src/lib/crypto/crypto_tests/t_cf2.in | 25 + src/lib/crypto/crypto_tests/t_cksum.c | 139 + src/lib/crypto/crypto_tests/t_crc.c | 213 + src/lib/crypto/crypto_tests/t_cts.c | 176 + src/lib/crypto/crypto_tests/t_encrypt.c | 214 + src/lib/crypto/crypto_tests/t_hmac.c | 273 + src/lib/crypto/crypto_tests/t_mdcksum.c | 206 + src/lib/crypto/crypto_tests/t_mddriver.c | 323 + src/lib/crypto/crypto_tests/t_nfold.c | 165 + src/lib/crypto/crypto_tests/t_pkcs5.c | 105 + src/lib/crypto/crypto_tests/t_prf.c | 91 + src/lib/crypto/crypto_tests/t_prf.comments | 8 + src/lib/crypto/crypto_tests/t_prf.expected | 6 + src/lib/crypto/crypto_tests/t_prf.in | 18 + src/lib/crypto/crypto_tests/t_prng.c | 87 + src/lib/crypto/crypto_tests/t_prng.comments | 14 + src/lib/crypto/crypto_tests/t_prng.expected | 4 + src/lib/crypto/crypto_tests/t_prng.reseedtest | 31 + .../crypto/crypto_tests/t_prng.reseedtest-comments | 21 + .../crypto/crypto_tests/t_prng.reseedtest-expected | 1 + src/lib/crypto/crypto_tests/t_prng.seed | 25 + src/lib/crypto/crypto_tests/t_shs.c | 135 + src/lib/crypto/crypto_tests/t_shs3.c | 592 ++ src/lib/crypto/crypto_tests/t_verify.c | 418 ++ src/lib/crypto/crypto_tests/test/Readme.txt | 22 + src/lib/crypto/crypto_tests/test/cbc_d_m.txt | 7224 ++++++++++++++++++++ src/lib/crypto/crypto_tests/test/cbc_e_m.txt | 7224 ++++++++++++++++++++ src/lib/crypto/crypto_tests/test/ecb_d_m.txt | 6024 ++++++++++++++++ src/lib/crypto/crypto_tests/test/ecb_e_m.txt | 6024 ++++++++++++++++ src/lib/crypto/crypto_tests/test/ecb_iv.readme | 19 + src/lib/crypto/crypto_tests/test/ecb_iv.txt | 123 + src/lib/crypto/crypto_tests/test/ecb_tbl.txt | 1955 ++++++ src/lib/crypto/crypto_tests/test/ecb_vk.txt | 2334 +++++++ src/lib/crypto/crypto_tests/test/ecb_vt.txt | 1566 +++++ src/lib/crypto/crypto_tests/test/katmct.pdf | Bin 0 -> 100812 bytes src/lib/crypto/crypto_tests/vb.txt | 87 + src/lib/crypto/crypto_tests/vectors.c | 457 ++ src/lib/crypto/crypto_tests/ytest.c | 385 ++ src/lib/crypto/decrypt.c | 67 - src/lib/crypto/decrypt_iov.c | 61 - src/lib/crypto/default_state.c | 63 - src/lib/crypto/deps | 526 +- src/lib/crypto/des/ISSUES | 13 - src/lib/crypto/des/Makefile.in | 104 - src/lib/crypto/des/afsstring2key.c | 570 -- src/lib/crypto/des/d3_aead.c | 207 - src/lib/crypto/des/d3_cbc.c | 223 - src/lib/crypto/des/d3_kysched.c | 50 - src/lib/crypto/des/deps | 146 - src/lib/crypto/des/des_int.h | 382 -- src/lib/crypto/des/des_prf.c | 54 - src/lib/crypto/des/destest.c | 247 - src/lib/crypto/des/doc/libdes.doc | 208 - src/lib/crypto/des/f_aead.c | 192 - src/lib/crypto/des/f_cbc.c | 274 - src/lib/crypto/des/f_cksum.c | 136 - src/lib/crypto/des/f_parity.c | 56 - src/lib/crypto/des/f_sched.c | 359 - src/lib/crypto/des/f_tables.c | 370 - src/lib/crypto/des/f_tables.h | 279 - src/lib/crypto/des/key_sched.c | 61 - src/lib/crypto/des/keytest.data | 171 - src/lib/crypto/des/string2key.c | 261 - src/lib/crypto/des/t_afss2k.c | 136 - src/lib/crypto/des/t_verify.c | 418 -- src/lib/crypto/des/weak_key.c | 85 - src/lib/crypto/dk/Makefile.in | 55 - src/lib/crypto/dk/checksum.c | 168 - src/lib/crypto/dk/deps | 76 - src/lib/crypto/dk/derive.c | 217 - src/lib/crypto/dk/dk.h | 124 - src/lib/crypto/dk/dk_aead.c | 386 -- src/lib/crypto/dk/dk_decrypt.c | 200 - src/lib/crypto/dk/dk_encrypt.c | 358 - src/lib/crypto/dk/dk_prf.c | 64 - src/lib/crypto/dk/stringtokey.c | 96 - src/lib/crypto/enc_provider/Makefile.in | 42 - src/lib/crypto/enc_provider/aes.c | 415 -- src/lib/crypto/enc_provider/deps | 48 - src/lib/crypto/enc_provider/des.c | 181 - src/lib/crypto/enc_provider/des3.c | 221 - src/lib/crypto/enc_provider/enc_provider.h | 36 - src/lib/crypto/enc_provider/rc4.c | 271 - src/lib/crypto/encrypt.c | 63 - src/lib/crypto/encrypt_iov.c | 55 - src/lib/crypto/encrypt_length.c | 59 - src/lib/crypto/enctype_compare.c | 55 - src/lib/crypto/enctype_to_string.c | 45 - src/lib/crypto/etypes.c | 169 - src/lib/crypto/etypes.h | 83 - src/lib/crypto/hash_provider/Makefile.in | 37 - src/lib/crypto/hash_provider/deps | 47 - src/lib/crypto/hash_provider/hash_crc32.c | 55 - src/lib/crypto/hash_provider/hash_md4.c | 55 - src/lib/crypto/hash_provider/hash_md5.c | 55 - src/lib/crypto/hash_provider/hash_provider.h | 32 - src/lib/crypto/hash_provider/hash_sha1.c | 57 - src/lib/crypto/hmac.c | 165 - src/lib/crypto/keyblocks.c | 79 - src/lib/crypto/keyed_checksum_types.c | 89 - src/lib/crypto/keyed_cksum.c | 55 - src/lib/crypto/keyhash_provider/Makefile.in | 56 - src/lib/crypto/keyhash_provider/deps | 60 - src/lib/crypto/keyhash_provider/descbc.c | 72 - src/lib/crypto/keyhash_provider/hmac_md5.c | 144 - src/lib/crypto/keyhash_provider/k5_md4des.c | 194 - src/lib/crypto/keyhash_provider/k5_md5des.c | 191 - src/lib/crypto/keyhash_provider/keyhash_provider.h | 35 - src/lib/crypto/keyhash_provider/md5_hmac.c | 65 - src/lib/crypto/keyhash_provider/t_cksum.c | 139 - src/lib/crypto/keylengths.c | 61 - src/lib/crypto/krb/Makefile.in | 253 + src/lib/crypto/krb/aead.c | 573 ++ src/lib/crypto/krb/aead.h | 123 + src/lib/crypto/krb/block_size.c | 47 + src/lib/crypto/krb/cf2.c | 154 + src/lib/crypto/krb/checksum_length.c | 53 + src/lib/crypto/krb/cksumtype_to_string.c | 45 + src/lib/crypto/krb/cksumtypes.c | 91 + src/lib/crypto/krb/cksumtypes.h | 62 + src/lib/crypto/krb/coll_proof_cksum.c | 50 + src/lib/crypto/krb/combine_keys.c | 349 + src/lib/crypto/krb/crc32/CRC.pm | 156 + src/lib/crypto/krb/crc32/Makefile.in | 34 + src/lib/crypto/krb/crc32/Poly.pm | 182 + src/lib/crypto/krb/crc32/crc-32.h | 71 + src/lib/crypto/krb/crc32/crc.pl | 111 + src/lib/crypto/krb/crc32/crc32.c | 192 + src/lib/crypto/krb/crc32/deps | 13 + src/lib/crypto/krb/crypto_length.c | 170 + src/lib/crypto/krb/crypto_libinit.c | 33 + src/lib/crypto/krb/decrypt.c | 67 + src/lib/crypto/krb/decrypt_iov.c | 61 + src/lib/crypto/krb/default_state.c | 63 + src/lib/crypto/krb/deps | 445 ++ src/lib/crypto/krb/dk/Makefile.in | 53 + src/lib/crypto/krb/dk/checksum.c | 168 + src/lib/crypto/krb/dk/deps | 79 + src/lib/crypto/krb/dk/derive.c | 217 + src/lib/crypto/krb/dk/dk.h | 124 + src/lib/crypto/krb/dk/dk_aead.c | 386 ++ src/lib/crypto/krb/dk/dk_decrypt.c | 200 + src/lib/crypto/krb/dk/dk_encrypt.c | 358 + src/lib/crypto/krb/dk/dk_prf.c | 64 + src/lib/crypto/krb/dk/stringtokey.c | 96 + src/lib/crypto/krb/enc_provider/Makefile.in | 41 + src/lib/crypto/krb/enc_provider/aes.c | 415 ++ src/lib/crypto/krb/enc_provider/deps | 50 + src/lib/crypto/krb/enc_provider/des.c | 181 + src/lib/crypto/krb/enc_provider/des3.c | 221 + src/lib/crypto/krb/enc_provider/enc_provider.h | 36 + src/lib/crypto/krb/enc_provider/rc4.c | 271 + src/lib/crypto/krb/encrypt.c | 63 + src/lib/crypto/krb/encrypt_iov.c | 55 + src/lib/crypto/krb/encrypt_length.c | 59 + src/lib/crypto/krb/enctype_compare.c | 55 + src/lib/crypto/krb/enctype_to_string.c | 45 + src/lib/crypto/krb/etypes.c | 169 + src/lib/crypto/krb/etypes.h | 83 + src/lib/crypto/krb/hash_provider/Makefile.in | 35 + src/lib/crypto/krb/hash_provider/deps | 48 + src/lib/crypto/krb/hash_provider/hash_crc32.c | 55 + src/lib/crypto/krb/hash_provider/hash_md4.c | 55 + src/lib/crypto/krb/hash_provider/hash_md5.c | 55 + src/lib/crypto/krb/hash_provider/hash_provider.h | 32 + src/lib/crypto/krb/hash_provider/hash_sha1.c | 57 + src/lib/crypto/krb/keyblocks.c | 79 + src/lib/crypto/krb/keyed_checksum_types.c | 89 + src/lib/crypto/krb/keyed_cksum.c | 55 + src/lib/crypto/krb/keyhash_provider/Makefile.in | 34 + src/lib/crypto/krb/keyhash_provider/deps | 65 + src/lib/crypto/krb/keyhash_provider/descbc.c | 72 + src/lib/crypto/krb/keyhash_provider/hmac_md5.c | 144 + src/lib/crypto/krb/keyhash_provider/k5_md4des.c | 194 + src/lib/crypto/krb/keyhash_provider/k5_md5des.c | 191 + .../crypto/krb/keyhash_provider/keyhash_provider.h | 35 + src/lib/crypto/krb/keyhash_provider/md5_hmac.c | 65 + src/lib/crypto/krb/keylengths.c | 61 + src/lib/crypto/krb/make_checksum.c | 129 + src/lib/crypto/krb/make_checksum_iov.c | 82 + src/lib/crypto/krb/make_random_key.c | 83 + src/lib/crypto/krb/mandatory_sumtype.c | 41 + src/lib/crypto/krb/nfold.c | 130 + src/lib/crypto/krb/old/Makefile.in | 35 + src/lib/crypto/krb/old/deps | 37 + src/lib/crypto/krb/old/des_stringtokey.c | 58 + src/lib/crypto/krb/old/old.h | 52 + src/lib/crypto/krb/old/old_decrypt.c | 143 + src/lib/crypto/krb/old/old_encrypt.c | 110 + src/lib/crypto/krb/old_api_glue.c | 328 + src/lib/crypto/krb/prf.c | 87 + src/lib/crypto/krb/prng.c | 215 + src/lib/crypto/krb/random_to_key.c | 73 + src/lib/crypto/krb/raw/Makefile.in | 34 + src/lib/crypto/krb/raw/deps | 37 + src/lib/crypto/krb/raw/raw.h | 49 + src/lib/crypto/krb/raw/raw_aead.c | 163 + src/lib/crypto/krb/raw/raw_decrypt.c | 38 + src/lib/crypto/krb/raw/raw_encrypt.c | 50 + src/lib/crypto/krb/state.c | 72 + src/lib/crypto/krb/string_to_cksumtype.c | 53 + src/lib/crypto/krb/string_to_enctype.c | 53 + src/lib/crypto/krb/string_to_key.c | 101 + src/lib/crypto/krb/valid_cksumtype.c | 47 + src/lib/crypto/krb/valid_enctype.c | 68 + src/lib/crypto/krb/verify_checksum.c | 92 + src/lib/crypto/krb/verify_checksum_iov.c | 98 + src/lib/crypto/krb/yarrow/ASSUMPTIONS | 101 + src/lib/crypto/krb/yarrow/LICENSE | 21 + src/lib/crypto/krb/yarrow/Makefile.in | 37 + src/lib/crypto/krb/yarrow/README | 94 + src/lib/crypto/krb/yarrow/TODO | 9 + src/lib/crypto/krb/yarrow/deps | 27 + src/lib/crypto/krb/yarrow/yarrow.c | 958 +++ src/lib/crypto/krb/yarrow/yarrow.h | 186 + src/lib/crypto/krb/yarrow/yarrow.man | 315 + src/lib/crypto/krb/yarrow/yarrow.pod | 112 + src/lib/crypto/krb/yarrow/ycipher.c | 96 + src/lib/crypto/krb/yarrow/ycipher.h | 42 + src/lib/crypto/krb/yarrow/yexcep.h | 107 + src/lib/crypto/krb/yarrow/yhash.h | 29 + src/lib/crypto/krb/yarrow/ylock.h | 24 + src/lib/crypto/krb/yarrow/ystate.h | 28 + src/lib/crypto/krb/yarrow/ytypes.h | 27 + src/lib/crypto/make_checksum.c | 129 - src/lib/crypto/make_checksum_iov.c | 82 - src/lib/crypto/make_random_key.c | 83 - src/lib/crypto/mandatory_sumtype.c | 41 - src/lib/crypto/md4/ISSUES | 3 - src/lib/crypto/md4/Makefile.in | 58 - src/lib/crypto/md4/deps | 13 - src/lib/crypto/md4/md4.c | 246 - src/lib/crypto/md4/rsa-md4.h | 94 - src/lib/crypto/md5/ISSUES | 3 - src/lib/crypto/md5/Makefile.in | 48 - src/lib/crypto/md5/deps | 13 - src/lib/crypto/md5/md5.c | 343 - src/lib/crypto/md5/rsa-md5.h | 60 - src/lib/crypto/md5/t_cksum.c | 206 - src/lib/crypto/md5/t_mddriver.c | 323 - src/lib/crypto/nfold.c | 130 - src/lib/crypto/old/Makefile.in | 35 - src/lib/crypto/old/deps | 34 - src/lib/crypto/old/des_stringtokey.c | 58 - src/lib/crypto/old/old.h | 52 - src/lib/crypto/old/old_decrypt.c | 143 - src/lib/crypto/old/old_encrypt.c | 110 - src/lib/crypto/old_api_glue.c | 328 - src/lib/crypto/pbkdf2.c | 265 - src/lib/crypto/prf.c | 87 - src/lib/crypto/prng.c | 215 - src/lib/crypto/random_to_key.c | 73 - src/lib/crypto/raw/Makefile.in | 34 - src/lib/crypto/raw/deps | 34 - src/lib/crypto/raw/raw.h | 49 - src/lib/crypto/raw/raw_aead.c | 163 - src/lib/crypto/raw/raw_decrypt.c | 38 - src/lib/crypto/raw/raw_encrypt.c | 50 - src/lib/crypto/sha1/ISSUES | 7 - src/lib/crypto/sha1/Makefile.in | 53 - src/lib/crypto/sha1/deps | 13 - src/lib/crypto/sha1/shs.c | 381 -- src/lib/crypto/sha1/shs.h | 45 - src/lib/crypto/sha1/t_shs.c | 135 - src/lib/crypto/sha1/t_shs3.c | 592 -- src/lib/crypto/state.c | 72 - src/lib/crypto/string_to_cksumtype.c | 53 - src/lib/crypto/string_to_enctype.c | 53 - src/lib/crypto/string_to_key.c | 101 - src/lib/crypto/t_cf2.c | 88 - src/lib/crypto/t_cf2.comments | 6 - src/lib/crypto/t_cf2.expected | 5 - src/lib/crypto/t_cf2.in | 25 - src/lib/crypto/t_cts.c | 176 - src/lib/crypto/t_encrypt.c | 214 - src/lib/crypto/t_hmac.c | 273 - src/lib/crypto/t_nfold.c | 165 - src/lib/crypto/t_pkcs5.c | 105 - src/lib/crypto/t_prf.c | 91 - src/lib/crypto/t_prf.comments | 8 - src/lib/crypto/t_prf.expected | 6 - src/lib/crypto/t_prf.in | 18 - src/lib/crypto/t_prng.c | 87 - src/lib/crypto/t_prng.comments | 14 - src/lib/crypto/t_prng.expected | 4 - src/lib/crypto/t_prng.reseedtest | 31 - src/lib/crypto/t_prng.reseedtest-comments | 21 - src/lib/crypto/t_prng.reseedtest-expected | 1 - src/lib/crypto/t_prng.seed | 25 - src/lib/crypto/valid_cksumtype.c | 47 - src/lib/crypto/valid_enctype.c | 68 - src/lib/crypto/vectors.c | 457 -- src/lib/crypto/verify_checksum.c | 92 - src/lib/crypto/verify_checksum_iov.c | 98 - src/lib/crypto/yarrow/ASSUMPTIONS | 101 - src/lib/crypto/yarrow/LICENSE | 21 - src/lib/crypto/yarrow/Makefile.in | 39 - src/lib/crypto/yarrow/README | 94 - src/lib/crypto/yarrow/TODO | 9 - src/lib/crypto/yarrow/deps | 25 - src/lib/crypto/yarrow/yarrow.c | 958 --- src/lib/crypto/yarrow/yarrow.h | 186 - src/lib/crypto/yarrow/yarrow.man | 315 - src/lib/crypto/yarrow/yarrow.pod | 112 - src/lib/crypto/yarrow/ycipher.c | 96 - src/lib/crypto/yarrow/ycipher.h | 42 - src/lib/crypto/yarrow/yexcep.h | 107 - src/lib/crypto/yarrow/yhash.h | 29 - src/lib/crypto/yarrow/ylock.h | 24 - src/lib/crypto/yarrow/ystate.h | 28 - src/lib/crypto/yarrow/ytest.c | 385 -- src/lib/crypto/yarrow/ytypes.h | 27 - src/util/collected-client-lib/Makefile.in | 30 +- 449 files changed, 64484 insertions(+), 64372 deletions(-) delete mode 100644 src/lib/crypto/aead.c delete mode 100644 src/lib/crypto/aead.h delete mode 100644 src/lib/crypto/aes/Makefile.in delete mode 100644 src/lib/crypto/aes/aes-gen.c delete mode 100644 src/lib/crypto/aes/aes-test.c delete mode 100644 src/lib/crypto/aes/aes.h delete mode 100644 src/lib/crypto/aes/aes.txt delete mode 100644 src/lib/crypto/aes/aes_s2k.c delete mode 100644 src/lib/crypto/aes/aes_s2k.h delete mode 100644 src/lib/crypto/aes/aescpp.h delete mode 100644 src/lib/crypto/aes/aescrypp.c delete mode 100644 src/lib/crypto/aes/aescrypt.asm delete mode 100644 src/lib/crypto/aes/aescrypt.c delete mode 100644 src/lib/crypto/aes/aeskey.c delete mode 100644 src/lib/crypto/aes/aeskeypp.c delete mode 100644 src/lib/crypto/aes/aesopt.h delete mode 100644 src/lib/crypto/aes/aessrc.url delete mode 100644 src/lib/crypto/aes/aestab.c delete mode 100644 src/lib/crypto/aes/deps delete mode 100644 src/lib/crypto/aes/expect-vk.txt delete mode 100644 src/lib/crypto/aes/expect-vt.txt delete mode 100644 src/lib/crypto/aes/test/Readme.txt delete mode 100644 src/lib/crypto/aes/test/cbc_d_m.txt delete mode 100644 src/lib/crypto/aes/test/cbc_e_m.txt delete mode 100644 src/lib/crypto/aes/test/ecb_d_m.txt delete mode 100644 src/lib/crypto/aes/test/ecb_e_m.txt delete mode 100644 src/lib/crypto/aes/test/ecb_iv.readme delete mode 100644 src/lib/crypto/aes/test/ecb_iv.txt delete mode 100644 src/lib/crypto/aes/test/ecb_tbl.txt delete mode 100644 src/lib/crypto/aes/test/ecb_vk.txt delete mode 100644 src/lib/crypto/aes/test/ecb_vt.txt delete mode 100644 src/lib/crypto/aes/test/katmct.pdf delete mode 100644 src/lib/crypto/aes/uitypes.h delete mode 100644 src/lib/crypto/aes/vb.txt delete mode 100644 src/lib/crypto/arcfour/Makefile.in delete mode 100644 src/lib/crypto/arcfour/arcfour-int.h delete mode 100644 src/lib/crypto/arcfour/arcfour.c delete mode 100644 src/lib/crypto/arcfour/arcfour.h delete mode 100644 src/lib/crypto/arcfour/arcfour_aead.c delete mode 100644 src/lib/crypto/arcfour/arcfour_s2k.c delete mode 100644 src/lib/crypto/arcfour/deps delete mode 100644 src/lib/crypto/block_size.c create mode 100644 src/lib/crypto/builtin/Makefile.in create mode 100644 src/lib/crypto/builtin/aes/Makefile.in create mode 100644 src/lib/crypto/builtin/aes/aes-gen.c create mode 100644 src/lib/crypto/builtin/aes/aes.h create mode 100644 src/lib/crypto/builtin/aes/aes.txt create mode 100644 src/lib/crypto/builtin/aes/aes_s2k.c create mode 100644 src/lib/crypto/builtin/aes/aes_s2k.h create mode 100644 src/lib/crypto/builtin/aes/aescpp.h create mode 100644 src/lib/crypto/builtin/aes/aescrypp.c create mode 100644 src/lib/crypto/builtin/aes/aescrypt.asm create mode 100644 src/lib/crypto/builtin/aes/aescrypt.c create mode 100644 src/lib/crypto/builtin/aes/aeskey.c create mode 100644 src/lib/crypto/builtin/aes/aeskeypp.c create mode 100644 src/lib/crypto/builtin/aes/aesopt.h create mode 100644 src/lib/crypto/builtin/aes/aessrc.url create mode 100644 src/lib/crypto/builtin/aes/aestab.c create mode 100644 src/lib/crypto/builtin/aes/deps create mode 100644 src/lib/crypto/builtin/aes/uitypes.h create mode 100644 src/lib/crypto/builtin/arcfour/Makefile.in create mode 100644 src/lib/crypto/builtin/arcfour/arcfour-int.h create mode 100644 src/lib/crypto/builtin/arcfour/arcfour.c create mode 100644 src/lib/crypto/builtin/arcfour/arcfour.h create mode 100644 src/lib/crypto/builtin/arcfour/arcfour_aead.c create mode 100644 src/lib/crypto/builtin/arcfour/arcfour_s2k.c create mode 100644 src/lib/crypto/builtin/arcfour/deps create mode 100644 src/lib/crypto/builtin/deps create mode 100644 src/lib/crypto/builtin/des/ISSUES create mode 100644 src/lib/crypto/builtin/des/Makefile.in create mode 100644 src/lib/crypto/builtin/des/afsstring2key.c create mode 100644 src/lib/crypto/builtin/des/d3_aead.c create mode 100644 src/lib/crypto/builtin/des/d3_cbc.c create mode 100644 src/lib/crypto/builtin/des/d3_kysched.c create mode 100644 src/lib/crypto/builtin/des/deps create mode 100644 src/lib/crypto/builtin/des/des_int.h create mode 100644 src/lib/crypto/builtin/des/des_prf.c create mode 100644 src/lib/crypto/builtin/des/doc/libdes.doc create mode 100644 src/lib/crypto/builtin/des/f_aead.c create mode 100644 src/lib/crypto/builtin/des/f_cbc.c create mode 100644 src/lib/crypto/builtin/des/f_cksum.c create mode 100644 src/lib/crypto/builtin/des/f_parity.c create mode 100644 src/lib/crypto/builtin/des/f_sched.c create mode 100644 src/lib/crypto/builtin/des/f_tables.c create mode 100644 src/lib/crypto/builtin/des/f_tables.h create mode 100644 src/lib/crypto/builtin/des/key_sched.c create mode 100644 src/lib/crypto/builtin/des/string2key.c create mode 100644 src/lib/crypto/builtin/des/weak_key.c create mode 100644 src/lib/crypto/builtin/hmac.c create mode 100644 src/lib/crypto/builtin/md4/ISSUES create mode 100644 src/lib/crypto/builtin/md4/Makefile.in create mode 100644 src/lib/crypto/builtin/md4/deps create mode 100644 src/lib/crypto/builtin/md4/md4.c create mode 100644 src/lib/crypto/builtin/md4/rsa-md4.h create mode 100644 src/lib/crypto/builtin/md5/ISSUES create mode 100644 src/lib/crypto/builtin/md5/Makefile.in create mode 100644 src/lib/crypto/builtin/md5/deps create mode 100644 src/lib/crypto/builtin/md5/md5.c create mode 100644 src/lib/crypto/builtin/md5/rsa-md5.h create mode 100644 src/lib/crypto/builtin/pbkdf2.c create mode 100644 src/lib/crypto/builtin/sha1/ISSUES create mode 100644 src/lib/crypto/builtin/sha1/Makefile.in create mode 100644 src/lib/crypto/builtin/sha1/deps create mode 100644 src/lib/crypto/builtin/sha1/shs.c create mode 100644 src/lib/crypto/builtin/sha1/shs.h delete mode 100644 src/lib/crypto/cf2.c delete mode 100644 src/lib/crypto/checksum_length.c delete mode 100644 src/lib/crypto/cksumtype_to_string.c delete mode 100644 src/lib/crypto/cksumtypes.c delete mode 100644 src/lib/crypto/cksumtypes.h delete mode 100644 src/lib/crypto/coll_proof_cksum.c delete mode 100644 src/lib/crypto/combine_keys.c delete mode 100644 src/lib/crypto/crc32/CRC.pm delete mode 100644 src/lib/crypto/crc32/Makefile.in delete mode 100644 src/lib/crypto/crc32/Poly.pm delete mode 100644 src/lib/crypto/crc32/crc-32.h delete mode 100644 src/lib/crypto/crc32/crc.pl delete mode 100644 src/lib/crypto/crc32/crc32.c delete mode 100644 src/lib/crypto/crc32/deps delete mode 100644 src/lib/crypto/crc32/t_crc.c delete mode 100644 src/lib/crypto/crypto_length.c delete mode 100644 src/lib/crypto/crypto_libinit.c create mode 100644 src/lib/crypto/crypto_tests/Makefile.in create mode 100644 src/lib/crypto/crypto_tests/aes-test.c create mode 100644 src/lib/crypto/crypto_tests/deps create mode 100644 src/lib/crypto/crypto_tests/destest.c create mode 100644 src/lib/crypto/crypto_tests/expect-vk.txt create mode 100644 src/lib/crypto/crypto_tests/expect-vt.txt create mode 100644 src/lib/crypto/crypto_tests/keytest.data create mode 100644 src/lib/crypto/crypto_tests/t_afss2k.c create mode 100644 src/lib/crypto/crypto_tests/t_cf2.c create mode 100644 src/lib/crypto/crypto_tests/t_cf2.comments create mode 100644 src/lib/crypto/crypto_tests/t_cf2.expected create mode 100644 src/lib/crypto/crypto_tests/t_cf2.in create mode 100644 src/lib/crypto/crypto_tests/t_cksum.c create mode 100644 src/lib/crypto/crypto_tests/t_crc.c create mode 100644 src/lib/crypto/crypto_tests/t_cts.c create mode 100644 src/lib/crypto/crypto_tests/t_encrypt.c create mode 100644 src/lib/crypto/crypto_tests/t_hmac.c create mode 100644 src/lib/crypto/crypto_tests/t_mdcksum.c create mode 100644 src/lib/crypto/crypto_tests/t_mddriver.c create mode 100644 src/lib/crypto/crypto_tests/t_nfold.c create mode 100644 src/lib/crypto/crypto_tests/t_pkcs5.c create mode 100644 src/lib/crypto/crypto_tests/t_prf.c create mode 100644 src/lib/crypto/crypto_tests/t_prf.comments create mode 100644 src/lib/crypto/crypto_tests/t_prf.expected create mode 100644 src/lib/crypto/crypto_tests/t_prf.in create mode 100644 src/lib/crypto/crypto_tests/t_prng.c create mode 100644 src/lib/crypto/crypto_tests/t_prng.comments create mode 100644 src/lib/crypto/crypto_tests/t_prng.expected create mode 100644 src/lib/crypto/crypto_tests/t_prng.reseedtest create mode 100644 src/lib/crypto/crypto_tests/t_prng.reseedtest-comments create mode 100644 src/lib/crypto/crypto_tests/t_prng.reseedtest-expected create mode 100644 src/lib/crypto/crypto_tests/t_prng.seed create mode 100644 src/lib/crypto/crypto_tests/t_shs.c create mode 100644 src/lib/crypto/crypto_tests/t_shs3.c create mode 100644 src/lib/crypto/crypto_tests/t_verify.c create mode 100644 src/lib/crypto/crypto_tests/test/Readme.txt create mode 100644 src/lib/crypto/crypto_tests/test/cbc_d_m.txt create mode 100644 src/lib/crypto/crypto_tests/test/cbc_e_m.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_d_m.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_e_m.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_iv.readme create mode 100644 src/lib/crypto/crypto_tests/test/ecb_iv.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_tbl.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_vk.txt create mode 100644 src/lib/crypto/crypto_tests/test/ecb_vt.txt create mode 100644 src/lib/crypto/crypto_tests/test/katmct.pdf create mode 100644 src/lib/crypto/crypto_tests/vb.txt create mode 100644 src/lib/crypto/crypto_tests/vectors.c create mode 100644 src/lib/crypto/crypto_tests/ytest.c delete mode 100644 src/lib/crypto/decrypt.c delete mode 100644 src/lib/crypto/decrypt_iov.c delete mode 100644 src/lib/crypto/default_state.c delete mode 100644 src/lib/crypto/des/ISSUES delete mode 100644 src/lib/crypto/des/Makefile.in delete mode 100644 src/lib/crypto/des/afsstring2key.c delete mode 100644 src/lib/crypto/des/d3_aead.c delete mode 100644 src/lib/crypto/des/d3_cbc.c delete mode 100644 src/lib/crypto/des/d3_kysched.c delete mode 100644 src/lib/crypto/des/deps delete mode 100644 src/lib/crypto/des/des_int.h delete mode 100644 src/lib/crypto/des/des_prf.c delete mode 100644 src/lib/crypto/des/destest.c delete mode 100644 src/lib/crypto/des/doc/libdes.doc delete mode 100644 src/lib/crypto/des/f_aead.c delete mode 100644 src/lib/crypto/des/f_cbc.c delete mode 100644 src/lib/crypto/des/f_cksum.c delete mode 100644 src/lib/crypto/des/f_parity.c delete mode 100644 src/lib/crypto/des/f_sched.c delete mode 100644 src/lib/crypto/des/f_tables.c delete mode 100644 src/lib/crypto/des/f_tables.h delete mode 100644 src/lib/crypto/des/key_sched.c delete mode 100644 src/lib/crypto/des/keytest.data delete mode 100644 src/lib/crypto/des/string2key.c delete mode 100644 src/lib/crypto/des/t_afss2k.c delete mode 100644 src/lib/crypto/des/t_verify.c delete mode 100644 src/lib/crypto/des/weak_key.c delete mode 100644 src/lib/crypto/dk/Makefile.in delete mode 100644 src/lib/crypto/dk/checksum.c delete mode 100644 src/lib/crypto/dk/deps delete mode 100644 src/lib/crypto/dk/derive.c delete mode 100644 src/lib/crypto/dk/dk.h delete mode 100644 src/lib/crypto/dk/dk_aead.c delete mode 100644 src/lib/crypto/dk/dk_decrypt.c delete mode 100644 src/lib/crypto/dk/dk_encrypt.c delete mode 100644 src/lib/crypto/dk/dk_prf.c delete mode 100644 src/lib/crypto/dk/stringtokey.c delete mode 100644 src/lib/crypto/enc_provider/Makefile.in delete mode 100644 src/lib/crypto/enc_provider/aes.c delete mode 100644 src/lib/crypto/enc_provider/deps delete mode 100644 src/lib/crypto/enc_provider/des.c delete mode 100644 src/lib/crypto/enc_provider/des3.c delete mode 100644 src/lib/crypto/enc_provider/enc_provider.h delete mode 100644 src/lib/crypto/enc_provider/rc4.c delete mode 100644 src/lib/crypto/encrypt.c delete mode 100644 src/lib/crypto/encrypt_iov.c delete mode 100644 src/lib/crypto/encrypt_length.c delete mode 100644 src/lib/crypto/enctype_compare.c delete mode 100644 src/lib/crypto/enctype_to_string.c delete mode 100644 src/lib/crypto/etypes.c delete mode 100644 src/lib/crypto/etypes.h delete mode 100644 src/lib/crypto/hash_provider/Makefile.in delete mode 100644 src/lib/crypto/hash_provider/deps delete mode 100644 src/lib/crypto/hash_provider/hash_crc32.c delete mode 100644 src/lib/crypto/hash_provider/hash_md4.c delete mode 100644 src/lib/crypto/hash_provider/hash_md5.c delete mode 100644 src/lib/crypto/hash_provider/hash_provider.h delete mode 100644 src/lib/crypto/hash_provider/hash_sha1.c delete mode 100644 src/lib/crypto/hmac.c delete mode 100644 src/lib/crypto/keyblocks.c delete mode 100644 src/lib/crypto/keyed_checksum_types.c delete mode 100644 src/lib/crypto/keyed_cksum.c delete mode 100644 src/lib/crypto/keyhash_provider/Makefile.in delete mode 100644 src/lib/crypto/keyhash_provider/deps delete mode 100644 src/lib/crypto/keyhash_provider/descbc.c delete mode 100644 src/lib/crypto/keyhash_provider/hmac_md5.c delete mode 100644 src/lib/crypto/keyhash_provider/k5_md4des.c delete mode 100644 src/lib/crypto/keyhash_provider/k5_md5des.c delete mode 100644 src/lib/crypto/keyhash_provider/keyhash_provider.h delete mode 100644 src/lib/crypto/keyhash_provider/md5_hmac.c delete mode 100644 src/lib/crypto/keyhash_provider/t_cksum.c delete mode 100644 src/lib/crypto/keylengths.c create mode 100644 src/lib/crypto/krb/Makefile.in create mode 100644 src/lib/crypto/krb/aead.c create mode 100644 src/lib/crypto/krb/aead.h create mode 100644 src/lib/crypto/krb/block_size.c create mode 100644 src/lib/crypto/krb/cf2.c create mode 100644 src/lib/crypto/krb/checksum_length.c create mode 100644 src/lib/crypto/krb/cksumtype_to_string.c create mode 100644 src/lib/crypto/krb/cksumtypes.c create mode 100644 src/lib/crypto/krb/cksumtypes.h create mode 100644 src/lib/crypto/krb/coll_proof_cksum.c create mode 100644 src/lib/crypto/krb/combine_keys.c create mode 100644 src/lib/crypto/krb/crc32/CRC.pm create mode 100644 src/lib/crypto/krb/crc32/Makefile.in create mode 100644 src/lib/crypto/krb/crc32/Poly.pm create mode 100644 src/lib/crypto/krb/crc32/crc-32.h create mode 100644 src/lib/crypto/krb/crc32/crc.pl create mode 100644 src/lib/crypto/krb/crc32/crc32.c create mode 100644 src/lib/crypto/krb/crc32/deps create mode 100644 src/lib/crypto/krb/crypto_length.c create mode 100644 src/lib/crypto/krb/crypto_libinit.c create mode 100644 src/lib/crypto/krb/decrypt.c create mode 100644 src/lib/crypto/krb/decrypt_iov.c create mode 100644 src/lib/crypto/krb/default_state.c create mode 100644 src/lib/crypto/krb/deps create mode 100644 src/lib/crypto/krb/dk/Makefile.in create mode 100644 src/lib/crypto/krb/dk/checksum.c create mode 100644 src/lib/crypto/krb/dk/deps create mode 100644 src/lib/crypto/krb/dk/derive.c create mode 100644 src/lib/crypto/krb/dk/dk.h create mode 100644 src/lib/crypto/krb/dk/dk_aead.c create mode 100644 src/lib/crypto/krb/dk/dk_decrypt.c create mode 100644 src/lib/crypto/krb/dk/dk_encrypt.c create mode 100644 src/lib/crypto/krb/dk/dk_prf.c create mode 100644 src/lib/crypto/krb/dk/stringtokey.c create mode 100644 src/lib/crypto/krb/enc_provider/Makefile.in create mode 100644 src/lib/crypto/krb/enc_provider/aes.c create mode 100644 src/lib/crypto/krb/enc_provider/deps create mode 100644 src/lib/crypto/krb/enc_provider/des.c create mode 100644 src/lib/crypto/krb/enc_provider/des3.c create mode 100644 src/lib/crypto/krb/enc_provider/enc_provider.h create mode 100644 src/lib/crypto/krb/enc_provider/rc4.c create mode 100644 src/lib/crypto/krb/encrypt.c create mode 100644 src/lib/crypto/krb/encrypt_iov.c create mode 100644 src/lib/crypto/krb/encrypt_length.c create mode 100644 src/lib/crypto/krb/enctype_compare.c create mode 100644 src/lib/crypto/krb/enctype_to_string.c create mode 100644 src/lib/crypto/krb/etypes.c create mode 100644 src/lib/crypto/krb/etypes.h create mode 100644 src/lib/crypto/krb/hash_provider/Makefile.in create mode 100644 src/lib/crypto/krb/hash_provider/deps create mode 100644 src/lib/crypto/krb/hash_provider/hash_crc32.c create mode 100644 src/lib/crypto/krb/hash_provider/hash_md4.c create mode 100644 src/lib/crypto/krb/hash_provider/hash_md5.c create mode 100644 src/lib/crypto/krb/hash_provider/hash_provider.h create mode 100644 src/lib/crypto/krb/hash_provider/hash_sha1.c create mode 100644 src/lib/crypto/krb/keyblocks.c create mode 100644 src/lib/crypto/krb/keyed_checksum_types.c create mode 100644 src/lib/crypto/krb/keyed_cksum.c create mode 100644 src/lib/crypto/krb/keyhash_provider/Makefile.in create mode 100644 src/lib/crypto/krb/keyhash_provider/deps create mode 100644 src/lib/crypto/krb/keyhash_provider/descbc.c create mode 100644 src/lib/crypto/krb/keyhash_provider/hmac_md5.c create mode 100644 src/lib/crypto/krb/keyhash_provider/k5_md4des.c create mode 100644 src/lib/crypto/krb/keyhash_provider/k5_md5des.c create mode 100644 src/lib/crypto/krb/keyhash_provider/keyhash_provider.h create mode 100644 src/lib/crypto/krb/keyhash_provider/md5_hmac.c create mode 100644 src/lib/crypto/krb/keylengths.c create mode 100644 src/lib/crypto/krb/make_checksum.c create mode 100644 src/lib/crypto/krb/make_checksum_iov.c create mode 100644 src/lib/crypto/krb/make_random_key.c create mode 100644 src/lib/crypto/krb/mandatory_sumtype.c create mode 100644 src/lib/crypto/krb/nfold.c create mode 100644 src/lib/crypto/krb/old/Makefile.in create mode 100644 src/lib/crypto/krb/old/deps create mode 100644 src/lib/crypto/krb/old/des_stringtokey.c create mode 100644 src/lib/crypto/krb/old/old.h create mode 100644 src/lib/crypto/krb/old/old_decrypt.c create mode 100644 src/lib/crypto/krb/old/old_encrypt.c create mode 100644 src/lib/crypto/krb/old_api_glue.c create mode 100644 src/lib/crypto/krb/prf.c create mode 100644 src/lib/crypto/krb/prng.c create mode 100644 src/lib/crypto/krb/random_to_key.c create mode 100644 src/lib/crypto/krb/raw/Makefile.in create mode 100644 src/lib/crypto/krb/raw/deps create mode 100644 src/lib/crypto/krb/raw/raw.h create mode 100644 src/lib/crypto/krb/raw/raw_aead.c create mode 100644 src/lib/crypto/krb/raw/raw_decrypt.c create mode 100644 src/lib/crypto/krb/raw/raw_encrypt.c create mode 100644 src/lib/crypto/krb/state.c create mode 100644 src/lib/crypto/krb/string_to_cksumtype.c create mode 100644 src/lib/crypto/krb/string_to_enctype.c create mode 100644 src/lib/crypto/krb/string_to_key.c create mode 100644 src/lib/crypto/krb/valid_cksumtype.c create mode 100644 src/lib/crypto/krb/valid_enctype.c create mode 100644 src/lib/crypto/krb/verify_checksum.c create mode 100644 src/lib/crypto/krb/verify_checksum_iov.c create mode 100644 src/lib/crypto/krb/yarrow/ASSUMPTIONS create mode 100644 src/lib/crypto/krb/yarrow/LICENSE create mode 100644 src/lib/crypto/krb/yarrow/Makefile.in create mode 100644 src/lib/crypto/krb/yarrow/README create mode 100644 src/lib/crypto/krb/yarrow/TODO create mode 100644 src/lib/crypto/krb/yarrow/deps create mode 100644 src/lib/crypto/krb/yarrow/yarrow.c create mode 100644 src/lib/crypto/krb/yarrow/yarrow.h create mode 100644 src/lib/crypto/krb/yarrow/yarrow.man create mode 100644 src/lib/crypto/krb/yarrow/yarrow.pod create mode 100644 src/lib/crypto/krb/yarrow/ycipher.c create mode 100644 src/lib/crypto/krb/yarrow/ycipher.h create mode 100644 src/lib/crypto/krb/yarrow/yexcep.h create mode 100644 src/lib/crypto/krb/yarrow/yhash.h create mode 100644 src/lib/crypto/krb/yarrow/ylock.h create mode 100644 src/lib/crypto/krb/yarrow/ystate.h create mode 100644 src/lib/crypto/krb/yarrow/ytypes.h delete mode 100644 src/lib/crypto/make_checksum.c delete mode 100644 src/lib/crypto/make_checksum_iov.c delete mode 100644 src/lib/crypto/make_random_key.c delete mode 100644 src/lib/crypto/mandatory_sumtype.c delete mode 100644 src/lib/crypto/md4/ISSUES delete mode 100644 src/lib/crypto/md4/Makefile.in delete mode 100644 src/lib/crypto/md4/deps delete mode 100644 src/lib/crypto/md4/md4.c delete mode 100644 src/lib/crypto/md4/rsa-md4.h delete mode 100644 src/lib/crypto/md5/ISSUES delete mode 100644 src/lib/crypto/md5/Makefile.in delete mode 100644 src/lib/crypto/md5/deps delete mode 100644 src/lib/crypto/md5/md5.c delete mode 100644 src/lib/crypto/md5/rsa-md5.h delete mode 100644 src/lib/crypto/md5/t_cksum.c delete mode 100644 src/lib/crypto/md5/t_mddriver.c delete mode 100644 src/lib/crypto/nfold.c delete mode 100644 src/lib/crypto/old/Makefile.in delete mode 100644 src/lib/crypto/old/deps delete mode 100644 src/lib/crypto/old/des_stringtokey.c delete mode 100644 src/lib/crypto/old/old.h delete mode 100644 src/lib/crypto/old/old_decrypt.c delete mode 100644 src/lib/crypto/old/old_encrypt.c delete mode 100644 src/lib/crypto/old_api_glue.c delete mode 100644 src/lib/crypto/pbkdf2.c delete mode 100644 src/lib/crypto/prf.c delete mode 100644 src/lib/crypto/prng.c delete mode 100644 src/lib/crypto/random_to_key.c delete mode 100644 src/lib/crypto/raw/Makefile.in delete mode 100644 src/lib/crypto/raw/deps delete mode 100644 src/lib/crypto/raw/raw.h delete mode 100644 src/lib/crypto/raw/raw_aead.c delete mode 100644 src/lib/crypto/raw/raw_decrypt.c delete mode 100644 src/lib/crypto/raw/raw_encrypt.c delete mode 100644 src/lib/crypto/sha1/ISSUES delete mode 100644 src/lib/crypto/sha1/Makefile.in delete mode 100644 src/lib/crypto/sha1/deps delete mode 100644 src/lib/crypto/sha1/shs.c delete mode 100644 src/lib/crypto/sha1/shs.h delete mode 100644 src/lib/crypto/sha1/t_shs.c delete mode 100644 src/lib/crypto/sha1/t_shs3.c delete mode 100644 src/lib/crypto/state.c delete mode 100644 src/lib/crypto/string_to_cksumtype.c delete mode 100644 src/lib/crypto/string_to_enctype.c delete mode 100644 src/lib/crypto/string_to_key.c delete mode 100644 src/lib/crypto/t_cf2.c delete mode 100644 src/lib/crypto/t_cf2.comments delete mode 100644 src/lib/crypto/t_cf2.expected delete mode 100644 src/lib/crypto/t_cf2.in delete mode 100644 src/lib/crypto/t_cts.c delete mode 100644 src/lib/crypto/t_encrypt.c delete mode 100644 src/lib/crypto/t_hmac.c delete mode 100644 src/lib/crypto/t_nfold.c delete mode 100644 src/lib/crypto/t_pkcs5.c delete mode 100644 src/lib/crypto/t_prf.c delete mode 100644 src/lib/crypto/t_prf.comments delete mode 100644 src/lib/crypto/t_prf.expected delete mode 100644 src/lib/crypto/t_prf.in delete mode 100644 src/lib/crypto/t_prng.c delete mode 100644 src/lib/crypto/t_prng.comments delete mode 100644 src/lib/crypto/t_prng.expected delete mode 100644 src/lib/crypto/t_prng.reseedtest delete mode 100644 src/lib/crypto/t_prng.reseedtest-comments delete mode 100644 src/lib/crypto/t_prng.reseedtest-expected delete mode 100644 src/lib/crypto/t_prng.seed delete mode 100644 src/lib/crypto/valid_cksumtype.c delete mode 100644 src/lib/crypto/valid_enctype.c delete mode 100644 src/lib/crypto/vectors.c delete mode 100644 src/lib/crypto/verify_checksum.c delete mode 100644 src/lib/crypto/verify_checksum_iov.c delete mode 100644 src/lib/crypto/yarrow/ASSUMPTIONS delete mode 100644 src/lib/crypto/yarrow/LICENSE delete mode 100644 src/lib/crypto/yarrow/Makefile.in delete mode 100644 src/lib/crypto/yarrow/README delete mode 100644 src/lib/crypto/yarrow/TODO delete mode 100644 src/lib/crypto/yarrow/deps delete mode 100644 src/lib/crypto/yarrow/yarrow.c delete mode 100644 src/lib/crypto/yarrow/yarrow.h delete mode 100644 src/lib/crypto/yarrow/yarrow.man delete mode 100644 src/lib/crypto/yarrow/yarrow.pod delete mode 100644 src/lib/crypto/yarrow/ycipher.c delete mode 100644 src/lib/crypto/yarrow/ycipher.h delete mode 100644 src/lib/crypto/yarrow/yexcep.h delete mode 100644 src/lib/crypto/yarrow/yhash.h delete mode 100644 src/lib/crypto/yarrow/ylock.h delete mode 100644 src/lib/crypto/yarrow/ystate.h delete mode 100644 src/lib/crypto/yarrow/ytest.c delete mode 100644 src/lib/crypto/yarrow/ytypes.h diff --git a/src/Makefile.in b/src/Makefile.in index 4f459a30e..bd67ad677 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -194,14 +194,15 @@ WINMAKEFILES=Makefile \ clients\kcpytkt\Makefile clients\kdeltkt\Makefile \ include\Makefile \ lib\Makefile lib\crypto\Makefile \ - lib\crypto\crc32\Makefile lib\crypto\des\Makefile \ - lib\crypto\dk\Makefile lib\crypto\enc_provider\Makefile \ - lib\crypto\hash_provider\Makefile \ - lib\crypto\keyhash_provider\Makefile \ - lib\crypto\raw\Makefile lib\crypto\old\Makefile \ - lib\crypto\sha1\Makefile lib\crypto\arcfour\Makefile \ - lib\crypto\md4\Makefile lib\crypto\md5\Makefile \ - lib\crypto\yarrow\Makefile lib\crypto\aes\Makefile \ + lib\crypto\krb\crc32\Makefile lib\crypto\builtin\des\Makefile \ + lib\crypto\krb\dk\Makefile lib\crypto\krb\enc_provider\Makefile \ + lib\crypto\krb\hash_provider\Makefile \ + lib\crypto\krb\keyhash_provider\Makefile \ + lib\crypto\krb\raw\Makefile lib\crypto\old\Makefile \ + lib\crypto\builtin\sha1\Makefile lib\crypto\builtin\arcfour\Makefile \ + lib\crypto\builtin\md4\Makefile lib\crypto\builtin\md5\Makefile \ + lib\crypto\krb\yarrow\Makefile lib\crypto\builtin\aes\Makefile \ + lib\crypto\crypto_tests \ lib\gssapi\Makefile lib\gssapi\generic\Makefile \ lib\gssapi\krb5\Makefile lib\gssapi\mechglue\Makefile \ lib\gssapi\spnego\Makefile \ @@ -261,33 +262,37 @@ WINMAKEFILES=Makefile \ ##DOS## $(WCONFIG) config < $@.in > $@ ##DOS##lib\crypto\Makefile: lib\crypto\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\crc32\Makefile: lib\crypto\crc32\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\crc32\Makefile: lib\crypto\krb\crc32\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\des\Makefile: lib\crypto\des\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\des\Makefile: lib\crypto\builtin\des\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\dk\Makefile: lib\crypto\dk\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\dk\Makefile: lib\crypto\krb\dk\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\enc_provider\Makefile: lib\crypto\enc_provider\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\enc_provider\Makefile: lib\crypto\krb\enc_provider\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\hash_provider\Makefile: lib\crypto\hash_provider\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\hash_provider\Makefile: lib\crypto\krb\hash_provider\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\keyhash_provider\Makefile: lib\crypto\keyhash_provider\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\keyhash_provider\Makefile: lib\crypto\krb\keyhash_provider\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\sha1\Makefile: lib\crypto\sha1\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\sha1\Makefile: lib\crypto\builtin\sha1\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\arcfour\Makefile: lib\crypto\arcfour\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\arcfour\Makefile: lib\crypto\builtin\arcfour\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\md4\Makefile: lib\crypto\md4\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\md4\Makefile: lib\crypto\builtin\md4\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\md5\Makefile: lib\crypto\md5\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\md5\Makefile: lib\crypto\md5\builtin\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\yarrow\Makefile: lib\crypto\yarrow\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\yarrow\Makefile: lib\crypto\krb\yarrow\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\aes\Makefile: lib\crypto\aes\Makefile.in $(MKFDEP) +##DOS##lib\crypto\builtin\aes\Makefile: lib\crypto\builtin\aes\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\old\Makefile: lib\crypto\old\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\old\Makefile: lib\crypto\krb\old\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ -##DOS##lib\crypto\raw\Makefile: lib\crypto\raw\Makefile.in $(MKFDEP) +##DOS##lib\crypto\krb\raw\Makefile: lib\crypto\krb\raw\Makefile.in $(MKFDEP) +##DOS## $(WCONFIG) config < $@.in > $@ +##DOS##lib\crypto\krb\Makefile: lib\crypto\krb\Makefile.in $(MKFDEP) +##DOS## $(WCONFIG) config < $@.in > $@ +##DOS##lib\crypto\builtin\Makefile: lib\crypto\builtin\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ ##DOS##lib\gssapi\Makefile: lib\gssapi\Makefile.in $(MKFDEP) ##DOS## $(WCONFIG) config < $@.in > $@ @@ -389,11 +394,12 @@ FILES= ./* \ clients/kpasswd/* clients/kcpytkt/* clients/kdeltkt/* \ config/* include/* include/kerberosIV/* \ include/krb5/* include/krb5/stock/* include/sys/* lib/* \ - lib/crypto/* lib/crypto/crc32/* lib/crypto/des/* lib/crypto/dk/* \ - lib/crypto/enc_provider/* lib/crypto/hash_provider/* \ - lib/crypto/keyhash_provider/* lib/crypto/old/* lib/crypto/raw/* \ - lib/crypto/sha1/* lib/crypto/arcfour/* lib/crypto/md4/* \ - lib/crypto/md5/* lib/crypto/yarrow/* \ + lib/crypto/* lib/crypto/krb/crc32/* lib/crypto/builtin/des/* lib/crypto/krb/dk/* \ + lib/crypto/krb/enc_provider/* lib/crypto/krb/hash_provider/* \ + lib/crypto/krb/keyhash_provider/* lib/crypto/krb/old/* lib/crypto/krb/raw/* \ + lib/crypto/builtin/sha1/* lib/crypto/builtin/arcfour/* lib/crypto/builtin/md4/* \ + lib/crypto/builtin/md5/* lib/crypto/krb/yarrow/* \ + lib/crypto/builtin/* lib/crypto/krb/* lib/crypto/crypto_tests \ lib/gssapi/* lib/gssapi/generic/* lib/gssapi/krb5/* \ lib/gssapi/mechglue/* lib/gssapi/spnego/* \ lib/krb5/* lib/krb5/asn.1/* lib/krb5/krb/* \ diff --git a/src/configure.in b/src/configure.in index 9556c949d..b8ca81980 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1059,11 +1059,13 @@ V5_AC_OUTPUT_MAKEFILE(. lib lib/kdb - lib/crypto lib/crypto/crc32 lib/crypto/des lib/crypto/dk - lib/crypto/enc_provider lib/crypto/hash_provider - lib/crypto/keyhash_provider lib/crypto/md4 lib/crypto/md5 - lib/crypto/old lib/crypto/raw lib/crypto/sha1 - lib/crypto/arcfour lib/crypto/yarrow lib/crypto/aes + lib/crypto lib/crypto/krb/ lib/crypto/krb/crc32 lib/crypto/builtin/des lib/crypto/krb/dk + lib/crypto/krb/enc_provider lib/crypto/krb/hash_provider + lib/crypto/krb/keyhash_provider + lib/crypto/builtin lib/crypto/builtin/md4 lib/crypto/builtin/md5 + lib/crypto/krb/old lib/crypto/krb/raw lib/crypto/builtin/sha1 + lib/crypto/builtin/arcfour lib/crypto/krb/yarrow lib/crypto/builtin/aes + lib/crypto/crypto_tests lib/krb5 lib/krb5/error_tables lib/krb5/asn.1 lib/krb5/ccache dnl lib/krb5/ccache/ccapi diff --git a/src/lib/crypto/Makefile.in b/src/lib/crypto/Makefile.in index 85e32e483..b68ef554f 100644 --- a/src/lib/crypto/Makefile.in +++ b/src/lib/crypto/Makefile.in @@ -2,170 +2,16 @@ thisconfigdir=../.. myfulldir=lib/crypto mydir=lib/crypto BUILDTOP=$(REL)..$(S).. -SUBDIRS=crc32 des dk enc_provider hash_provider keyhash_provider \ - md4 md5 old raw sha1 arcfour yarrow aes -LOCALINCLUDES = -I$(srcdir)/enc_provider \ - -I$(srcdir)/hash_provider -I$(srcdir)/keyhash_provider \ - -I$(srcdir)/aes \ - -I$(srcdir)/old -I$(srcdir)/raw -I$(srcdir)/dk -I$(srcdir)/arcfour \ - -I$(srcdir)/yarrow -I$(srcdir)/sha1 -I$(srcdir)/md5 +SUBDIRS=krb builtin crypto_tests + RUN_SETUP = @KRB5_RUN_ENV@ PROG_LIBPATH=-L$(TOPLIBD) PROG_RPATH=$(KRB5_LIBDIR) DEFS= -EXTRADEPSRCS=\ - $(srcdir)/t_nfold.c \ - $(srcdir)/t_cf2.c \ - $(srcdir)/t_encrypt.c \ - $(srcdir)/t_prf.c \ - $(srcdir)/t_prng.c \ - $(srcdir)/t_hmac.c \ - $(srcdir)/t_pkcs5.c \ - $(srcdir)/t_cts.c \ - $(srcdir)/vectors.c - -##DOSBUILDTOP = ..\.. -##DOSLIBNAME=$(OUTPRE)crypto.lib -##DOSOBJFILE=$(OUTPRE)crypto.lst -##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst -##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst - PROG_LIBPATH=-L$(TOPLIBD) PROG_RPATH=$(KRB5_LIBDIR) -STLIBOBJS=\ - aead.o \ - block_size.o \ - cf2.o \ - checksum_length.o \ - cksumtype_to_string.o \ - cksumtypes.o \ - coll_proof_cksum.o \ - combine_keys.o \ - crypto_length.o \ - crypto_libinit.o \ - default_state.o \ - decrypt.o \ - decrypt_iov.o \ - encrypt.o \ - encrypt_iov.o \ - encrypt_length.o \ - enctype_compare.o \ - enctype_to_string.o \ - etypes.o \ - hmac.o \ - keyblocks.o \ - keyed_cksum.o \ - keyed_checksum_types.o \ - keylengths.o \ - make_checksum.o \ - make_checksum_iov.o \ - make_random_key.o \ - mandatory_sumtype.o \ - nfold.o \ - old_api_glue.o \ - pbkdf2.o \ - prf.o \ - prng.o \ - random_to_key.o \ - state.o \ - string_to_cksumtype.o \ - string_to_enctype.o \ - string_to_key.o \ - valid_cksumtype.o \ - valid_enctype.o \ - verify_checksum.o \ - verify_checksum_iov.o - -OBJS=\ - $(OUTPRE)aead.$(OBJEXT) \ - $(OUTPRE)block_size.$(OBJEXT) \ - $(OUTPRE)cf2$(OBJEXT) \ - $(OUTPRE)checksum_length.$(OBJEXT) \ - $(OUTPRE)cksumtype_to_string.$(OBJEXT) \ - $(OUTPRE)cksumtypes.$(OBJEXT) \ - $(OUTPRE)coll_proof_cksum.$(OBJEXT) \ - $(OUTPRE)combine_keys.$(OBJEXT) \ - $(OUTPRE)crypto_length.$(OBJEXT) \ - $(OUTPRE)crypto_libinit.$(OBJEXT) \ - $(OUTPRE)default_state.$(OBJEXT) \ - $(OUTPRE)decrypt.$(OBJEXT) \ - $(OUTPRE)decrypt_iov.$(OBJEXT) \ - $(OUTPRE)encrypt.$(OBJEXT) \ - $(OUTPRE)encrypt_iov.$(OBJEXT) \ - $(OUTPRE)encrypt_length.$(OBJEXT) \ - $(OUTPRE)enctype_compare.$(OBJEXT) \ - $(OUTPRE)enctype_to_string.$(OBJEXT) \ - $(OUTPRE)etypes.$(OBJEXT) \ - $(OUTPRE)hmac.$(OBJEXT) \ - $(OUTPRE)keyblocks.$(OBJEXT) \ - $(OUTPRE)keyed_cksum.$(OBJEXT) \ - $(OUTPRE)keyed_checksum_types.$(OBJEXT) \ - $(OUTPRE)keylengths.$(OBJEXT) \ - $(OUTPRE)make_checksum.$(OBJEXT) \ - $(OUTPRE)make_checksum_iov.$(OBJEXT) \ - $(OUTPRE)make_random_key.$(OBJEXT) \ - $(OUTPRE)mandatory_sumtype.$(OBJEXT) \ - $(OUTPRE)nfold.$(OBJEXT) \ - $(OUTPRE)old_api_glue.$(OBJEXT) \ - $(OUTPRE)pbkdf2.$(OBJEXT) \ - $(OUTPRE)prf.$(OBJEXT) \ - $(OUTPRE)prng.$(OBJEXT) \ - $(OUTPRE)random_to_key.$(OBJEXT) \ - $(OUTPRE)state.$(OBJEXT) \ - $(OUTPRE)string_to_cksumtype.$(OBJEXT) \ - $(OUTPRE)string_to_enctype.$(OBJEXT) \ - $(OUTPRE)string_to_key.$(OBJEXT) \ - $(OUTPRE)valid_cksumtype.$(OBJEXT) \ - $(OUTPRE)valid_enctype.$(OBJEXT) \ - $(OUTPRE)verify_checksum.$(OBJEXT) \ - $(OUTPRE)verify_checksum_iov.$(OBJEXT) - -SRCS=\ - $(srcdir)/aead.c \ - $(srcdir)/block_size.c \ - $(srcdir)/checksum_length.c \ - $(srcdir)/cksumtype_to_string.c \ - $(srcdir)/cksumtypes.c \ - $(srcdir)/coll_proof_cksum.c \ - $(srcdir)/combine_keys.c \ - $(srcdir)/crypto_length.c \ - $(srcdir)/crypto_libinit.c \ - $(srcdir)/default_state.c \ - $(srcdir)/decrypt.c \ - $(srcdir)/decrypt_iov.c \ - $(srcdir)/encrypt.c \ - $(srcdir)/encrypt_iov.c \ - $(srcdir)/encrypt_length.c \ - $(srcdir)/enctype_compare.c \ - $(srcdir)/enctype_to_string.c \ - $(srcdir)/etypes.c \ - $(srcdir)/hmac.c \ - $(srcdir)/keyblocks.c \ - $(srcdir)/keyed_cksum.c \ - $(srcdir)/keyed_checksum_types.c\ - $(srcdir)/keylengths.c \ - $(srcdir)/make_checksum.c \ - $(srcdir)/make_checksum_iov.c \ - $(srcdir)/make_random_key.c \ - $(srcdir)/mandatory_sumtype.c \ - $(srcdir)/nfold.c \ - $(srcdir)/old_api_glue.c \ - $(srcdir)/pbkdf2.c \ - $(srcdir)/prf.c \ - $(srcdir)/cf2.c \ - $(srcdir)/prng.c \ - $(srcdir)/random_to_key.c \ - $(srcdir)/state.c \ - $(srcdir)/string_to_cksumtype.c \ - $(srcdir)/string_to_enctype.c \ - $(srcdir)/string_to_key.c \ - $(srcdir)/valid_cksumtype.c \ - $(srcdir)/valid_enctype.c \ - $(srcdir)/verify_checksum.c \ - $(srcdir)/verify_checksum_iov.c - LIBBASE=k5crypto LIBMAJOR=3 @@ -174,17 +20,19 @@ LIBINITFUNC=cryptoint_initialize_library LIBFINIFUNC=cryptoint_cleanup_library RELDIR=crypto -STOBJLISTS=crc32/OBJS.ST des/OBJS.ST dk/OBJS.ST enc_provider/OBJS.ST \ - hash_provider/OBJS.ST keyhash_provider/OBJS.ST md4/OBJS.ST \ - md5/OBJS.ST old/OBJS.ST raw/OBJS.ST sha1/OBJS.ST arcfour/OBJS.ST \ - aes/OBJS.ST \ - yarrow/OBJS.ST \ - OBJS.ST -SUBDIROBJLISTS=crc32/OBJS.ST des/OBJS.ST dk/OBJS.ST enc_provider/OBJS.ST \ - hash_provider/OBJS.ST keyhash_provider/OBJS.ST md4/OBJS.ST \ - md5/OBJS.ST old/OBJS.ST raw/OBJS.ST sha1/OBJS.ST arcfour/OBJS.ST \ - aes/OBJS.ST \ - yarrow/OBJS.ST +STOBJLISTS=krb/crc32/OBJS.ST krb/dk/OBJS.ST krb/enc_provider/OBJS.ST \ + krb/hash_provider/OBJS.ST krb/keyhash_provider/OBJS.ST \ + krb/old/OBJS.ST krb/raw/OBJS.ST krb/yarrow/OBJS.ST \ + @CRYPTO_IMPL@/md4/OBJS.ST @CRYPTO_IMPL@/md5/OBJS.ST @CRYPTO_IMPL@/sha1/OBJS.ST \ + @CRYPTO_IMPL@/arcfour/OBJS.ST @CRYPTO_IMPL@/aes/OBJS.ST @CRYPTO_IMPL@/des/OBJS.ST \ + krb/OBJS.ST @CRYPTO_IMPL@/OBJS.ST + +SUBDIROBJLISTS=krb/crc32/OBJS.ST krb/dk/OBJS.ST krb/enc_provider/OBJS.ST \ + krb/hash_provider/OBJS.ST krb/keyhash_provider/OBJS.ST \ + krb/old/OBJS.ST krb/raw/OBJS.ST krb/yarrow/OBJS.ST \ + @CRYPTO_IMPL@/md4/OBJS.ST @CRYPTO_IMPL@/md5/OBJS.ST @CRYPTO_IMPL@/sha1/OBJS.ST \ + @CRYPTO_IMPL@/arcfour/OBJS.ST @CRYPTO_IMPL@/aes/OBJS.ST @CRYPTO_IMPL@/des/OBJS.ST \ + krb/OBJS.ST @CRYPTO_IMPL@/OBJS.ST # No dependencies. Record places to find this shared object if the target # link editor and loader support it. @@ -201,196 +49,39 @@ SHLIB_RDIRS=$(KRB5_LIBDIR) all-unix:: all-liblinks install-unix:: install-libs + +# all-unix:: +# install-unix:: + libcrypto.lib: libdir crypto.lib clean-unix:: clean-liblinks clean-libs clean-libobjs -check-unix:: t_nfold t_encrypt t_prf t_prng t_hmac t_pkcs5 t_cf2 - $(RUN_SETUP) $(VALGRIND) ./t_nfold - $(RUN_SETUP) $(VALGRIND) ./t_encrypt - $(RUN_SETUP) $(VALGRIND) ./t_prng <$(srcdir)/t_prng.seed >t_prng.output && \ - diff t_prng.output $(srcdir)/t_prng.expected - $(RUN_SETUP) $(VALGRIND) ./t_hmac - $(RUN_SETUP) $(VALGRIND) ./t_prf <$(srcdir)/t_prf.in >t_prf.output - diff t_prf.output $(srcdir)/t_prf.expected - $(RUN_SETUP) $(VALGRIND) ./t_cf2 <$(srcdir)/t_cf2.in >t_cf2.output - diff t_cf2.output $(srcdir)/t_cf2.expected - - -# $(RUN_SETUP) $(VALGRIND) ./t_pkcs5 - -t_nfold$(EXEEXT): t_nfold.$(OBJEXT) nfold.$(OBJEXT) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_nfold.$(OBJEXT) nfold.$(OBJEXT) $(SUPPORT_LIB) - -t_encrypt$(EXEEXT): t_encrypt.$(OBJEXT) nfold.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_encrypt.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) - -t_prf$(EXEEXT): t_prf.$(OBJEXT) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_prf.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) - -t_cf2$(EXEEXT): t_cf2.$(OBJEXT) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_cf2.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) - - -t_prng$(EXEEXT): t_prng.$(OBJEXT) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_prng.$(OBJEXT) -lk5crypto -lcom_err $(SUPPORT_LIB) - -t_hmac$(EXEEXT): t_hmac.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_hmac.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) - -t_pkcs5$(EXEEXT): t_pkcs5.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_pkcs5.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) - -vectors$(EXEEXT): vectors.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ vectors.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) - -t_cts$(EXEEXT): t_cts.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_cts.$(OBJEXT) \ - $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) - - -clean:: - $(RM) t_nfold.o t_nfold t_encrypt t_encrypt.o t_prng.o t_prng \ - t_hmac.o t_hmac t_pkcs5.o t_pkcs5 pbkdf2.o t_prf t_prf.o t_cf2 t_cf2.o - -$(RM) t_prng.output - all-windows:: - cd crc32 - @echo Making in crypto\crc32 - $(MAKE) -$(MFLAGS) - cd ..\des - @echo Making in crypto\des + cd krb + @echo Making in crypto\krb $(MAKE) -$(MFLAGS) - cd ..\dk - @echo Making in crypto\dk + cd ..\@CRYPTO_IMPL@ + @echo Making in crypto\@CRYPTO_IMPL@ $(MAKE) -$(MFLAGS) - cd ..\enc_provider - @echo Making in crypto\enc_provider - $(MAKE) -$(MFLAGS) - cd ..\hash_provider - @echo Making in crypto\hash_provider - $(MAKE) -$(MFLAGS) - cd ..\keyhash_provider - @echo Making in crypto\keyhash_provider - $(MAKE) -$(MFLAGS) - cd ..\md4 - @echo Making in crypto\md4 - $(MAKE) -$(MFLAGS) - cd ..\md5 - @echo Making in crypto\md5 - $(MAKE) -$(MFLAGS) - cd ..\old - @echo Making in crypto\old - $(MAKE) -$(MFLAGS) - cd ..\raw - @echo Making in crypto\raw - $(MAKE) -$(MFLAGS) - cd ..\sha1 - @echo Making in crypto\sha1 - $(MAKE) -$(MFLAGS) - cd ..\arcfour - @echo Making in crypto\arcfour - $(MAKE) -$(MFLAGS) - cd ..\yarrow - @echo Making in crypto\yarrow - $(MAKE) -$(MFLAGS) - cd ..\aes - @echo Making in crypto\aes + cd ..\crypto_tests + @echo Making in crypto\crypto_tests $(MAKE) -$(MFLAGS) cd .. clean-windows:: - cd crc32 - @echo Making in clean crypto\crc32 - $(MAKE) -$(MFLAGS) clean - cd ..\des - @echo Making clean in crypto\des - $(MAKE) -$(MFLAGS) clean - cd ..\dk - @echo Making clean in crypto\dk + cd krb + @echo Making in clean crypto\krb $(MAKE) -$(MFLAGS) clean - cd ..\enc_provider - @echo Making clean in crypto\enc_provider + cd ..\@CRYPTO_IMPL@ + @echo Making clean in crypto\@CRYPTO_IMPL@ $(MAKE) -$(MFLAGS) clean - cd ..\hash_provider - @echo Making clean in crypto\hash_provider - $(MAKE) -$(MFLAGS) clean - cd ..\keyhash_provider - @echo Making clean in crypto\keyhash_provider - $(MAKE) -$(MFLAGS) clean - cd ..\md4 - @echo Making clean in crypto\md4 - $(MAKE) -$(MFLAGS) clean - cd ..\md5 - @echo Making clean in crypto\md5 - $(MAKE) -$(MFLAGS) clean - cd ..\old - @echo Making clean in crypto\old - $(MAKE) -$(MFLAGS) clean - cd ..\raw - @echo Making clean in crypto\raw - $(MAKE) -$(MFLAGS) clean - cd ..\sha1 - @echo Making clean in crypto\sha1 - $(MAKE) -$(MFLAGS) clean - cd ..\arcfour - @echo Making clean in crypto\arcfour - $(MAKE) -$(MFLAGS) clean - cd ..\yarrow - @echo Making clean in crypto\yarrow - $(MAKE) -$(MFLAGS) clean - cd ..\aes - @echo Making clean in crypto\aes + cd ..\crypto_tests + @echo Making clean in crypto\crypto_tests $(MAKE) -$(MFLAGS) clean cd .. -check-windows:: - cd crc32 - @echo Making in check crypto\crc32 - $(MAKE) -$(MFLAGS) check - cd ..\des - @echo Making check in crypto\des - $(MAKE) -$(MFLAGS) check - cd ..\dk - @echo Making check in crypto\dk - $(MAKE) -$(MFLAGS) check - cd ..\enc_provider - @echo Making check in crypto\enc_provider - $(MAKE) -$(MFLAGS) check - cd ..\hash_provider - @echo Making check in crypto\hash_provider - $(MAKE) -$(MFLAGS) check - cd ..\keyhash_provider - @echo Making check in crypto\keyhash_provider - $(MAKE) -$(MFLAGS) check - cd ..\md4 - @echo Making check in crypto\md4 - $(MAKE) -$(MFLAGS) check - cd ..\md5 - @echo Making check in crypto\md5 - $(MAKE) -$(MFLAGS) check - cd ..\old - @echo Making check in crypto\old - $(MAKE) -$(MFLAGS) check - cd ..\raw - @echo Making check in crypto\raw - $(MAKE) -$(MFLAGS) check - cd ..\sha1 - @echo Making check in crypto\sha1 - $(MAKE) -$(MFLAGS) check - cd ..\arcfour - @echo Making check in crypto\arcfour - $(MAKE) -$(MFLAGS) check - cd ..\yarrow - @echo Making check in crypto\yarrow - $(MAKE) -$(MFLAGS) check - cd ..\aes - @echo Making check in crypto\aes - $(MAKE) -$(MFLAGS) check - cd .. - - @lib_frag@ @libobj_frag@ diff --git a/src/lib/crypto/aead.c b/src/lib/crypto/aead.c deleted file mode 100644 index 2d9a8353a..000000000 --- a/src/lib/crypto/aead.c +++ /dev/null @@ -1,573 +0,0 @@ -/* - * lib/crypto/aead.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "cksumtypes.h" -#include "dk.h" -#include "aead.h" - -krb5_crypto_iov * -krb5int_c_locate_iov(krb5_crypto_iov *data, - size_t num_data, - krb5_cryptotype type) -{ - size_t i; - krb5_crypto_iov *iov = NULL; - - if (data == NULL) - return NULL; - - for (i = 0; i < num_data; i++) { - if (data[i].flags == type) { - if (iov == NULL) - iov = &data[i]; - else - return NULL; /* can't appear twice */ - } - } - - return iov; -} - -static krb5_error_code -make_unkeyed_checksum_iov(const struct krb5_hash_provider *hash_provider, - const krb5_crypto_iov *data, - size_t num_data, - krb5_data *output) -{ - krb5_data *sign_data; - size_t num_sign_data; - krb5_error_code ret; - size_t i, j; - - /* Create a checksum over all the data to be signed */ - for (i = 0, num_sign_data = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (SIGN_IOV(iov)) - num_sign_data++; - } - - /* XXX cleanup to avoid alloc */ - sign_data = (krb5_data *)calloc(num_sign_data, sizeof(krb5_data)); - if (sign_data == NULL) - return ENOMEM; - - for (i = 0, j = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (SIGN_IOV(iov)) - sign_data[j++] = iov->data; - } - - ret = hash_provider->hash(num_sign_data, sign_data, output); - - free(sign_data); - - return ret; -} - -krb5_error_code -krb5int_c_make_checksum_iov(const struct krb5_cksumtypes *cksum_type, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_crypto_iov *data, - size_t num_data, - krb5_data *cksum_data) -{ - int e1, e2; - krb5_error_code ret; - - if (cksum_type->keyhash != NULL) { - /* check if key is compatible */ - - if (cksum_type->keyed_etype) { - for (e1=0; e1keyed_etype) - break; - - for (e2=0; e2enctype) - break; - - if ((e1 == krb5_enctypes_length) || - (e2 == krb5_enctypes_length) || - (krb5_enctypes_list[e1].enc != krb5_enctypes_list[e2].enc)) { - ret = KRB5_BAD_ENCTYPE; - goto cleanup; - } - } - - if (cksum_type->keyhash->hash_iov == NULL) { - return KRB5_BAD_ENCTYPE; - } - - ret = (*(cksum_type->keyhash->hash_iov))(key, usage, 0, - data, num_data, cksum_data); - } else if (cksum_type->flags & KRB5_CKSUMFLAG_DERIVE) { - ret = krb5int_dk_make_checksum_iov(cksum_type->hash, - key, usage, data, num_data, - cksum_data); - } else { - ret = make_unkeyed_checksum_iov(cksum_type->hash, data, num_data, - cksum_data); - } - - if (ret == 0) { - if (cksum_type->trunc_size) { - cksum_data->length = cksum_type->trunc_size; - } - } - -cleanup: - if (ret != 0) { - memset(cksum_data->data, 0, cksum_data->length); - } - - return ret; -} - -const struct krb5_cksumtypes * -krb5int_c_find_checksum_type(krb5_cksumtype cksumtype) -{ - size_t i; - - for (i = 0; i < krb5_cksumtypes_length; i++) { - if (krb5_cksumtypes_list[i].ctype == cksumtype) - break; - } - - if (i == krb5_cksumtypes_length) - return NULL; - - return &krb5_cksumtypes_list[i]; -} - -#ifdef DEBUG_IOV -static void -dump_block(const char *tag, - size_t i, - size_t j, - unsigned char *block, - size_t block_size) -{ - size_t k; - - printf("[%s: %d.%d] ", tag, i, j); - - for (k = 0; k < block_size; k++) - printf("%02x ", block[k] & 0xFF); - - printf("\n"); -} -#endif - -static int -process_block_p(const krb5_crypto_iov *data, - size_t num_data, - struct iov_block_state *iov_state, - size_t i) -{ - const krb5_crypto_iov *iov = &data[i]; - int process_block; - - switch (iov->flags) { - case KRB5_CRYPTO_TYPE_SIGN_ONLY: - process_block = iov_state->include_sign_only; - break; - case KRB5_CRYPTO_TYPE_PADDING: - process_block = (iov_state->pad_to_boundary == 0); - break; - case KRB5_CRYPTO_TYPE_HEADER: - process_block = (iov_state->ignore_header == 0); - break; - case KRB5_CRYPTO_TYPE_DATA: - process_block = 1; - break; - default: - process_block = 0; - break; - } - - return process_block; -} - -/* - * Returns TRUE if, having reached the end of the current buffer, - * we should pad the rest of the block with zeros. - */ -static int -pad_to_boundary_p(const krb5_crypto_iov *data, - size_t num_data, - struct iov_block_state *iov_state, - size_t i, - size_t j) -{ - /* If the pad_to_boundary flag is unset, return FALSE */ - if (iov_state->pad_to_boundary == 0) - return 0; - - /* If we haven't got any data, we need to get some */ - if (j == 0) - return 0; - - /* No boundary between adjacent buffers marked for processing */ - if (data[iov_state->iov_pos].flags == data[i].flags) - return 0; - - return 1; -} - -krb5_boolean -krb5int_c_iov_get_block(unsigned char *block, - size_t block_size, - const krb5_crypto_iov *data, - size_t num_data, - struct iov_block_state *iov_state) -{ - size_t i, j = 0; - - for (i = iov_state->iov_pos; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - size_t nbytes; - - if (!process_block_p(data, num_data, iov_state, i)) - continue; - - if (pad_to_boundary_p(data, num_data, iov_state, i, j)) - break; - - iov_state->iov_pos = i; - - nbytes = iov->data.length - iov_state->data_pos; - if (nbytes > block_size - j) - nbytes = block_size - j; - - memcpy(block + j, iov->data.data + iov_state->data_pos, nbytes); - - iov_state->data_pos += nbytes; - j += nbytes; - - assert(j <= block_size); - - if (j == block_size) - break; - - assert(iov_state->data_pos == iov->data.length); - - iov_state->data_pos = 0; - } - - iov_state->iov_pos = i; - - if (j != block_size) - memset(block + j, 0, block_size - j); - -#ifdef DEBUG_IOV - dump_block("get_block", i, j, block, block_size); -#endif - - return (iov_state->iov_pos < num_data); -} - -krb5_boolean -krb5int_c_iov_put_block(const krb5_crypto_iov *data, - size_t num_data, - unsigned char *block, - size_t block_size, - struct iov_block_state *iov_state) -{ - size_t i, j = 0; - - for (i = iov_state->iov_pos; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - size_t nbytes; - - if (!process_block_p(data, num_data, iov_state, i)) - continue; - - if (pad_to_boundary_p(data, num_data, iov_state, i, j)) - break; - - iov_state->iov_pos = i; - - nbytes = iov->data.length - iov_state->data_pos; - if (nbytes > block_size - j) - nbytes = block_size - j; - - memcpy(iov->data.data + iov_state->data_pos, block + j, nbytes); - - iov_state->data_pos += nbytes; - j += nbytes; - - assert(j <= block_size); - - if (j == block_size) - break; - - assert(iov_state->data_pos == iov->data.length); - - iov_state->data_pos = 0; - } - - iov_state->iov_pos = i; - -#ifdef DEBUG_IOV - dump_block("put_block", i, j, block, block_size); -#endif - - return (iov_state->iov_pos < num_data); -} - -krb5_error_code -krb5int_c_iov_decrypt_stream(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage keyusage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - unsigned int header_len, trailer_len, padding_len; - krb5_crypto_iov *iov; - krb5_crypto_iov *stream; - size_t i, j; - int got_data = 0; - - stream = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM); - assert(stream != NULL); - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, &header_len); - if (ret != 0) - return ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &trailer_len); - if (ret != 0) - return ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &padding_len); - if (ret != 0) - return ret; - - if (stream->data.length < header_len + trailer_len) - return KRB5_BAD_MSIZE; - - iov = (krb5_crypto_iov *)calloc(num_data + 2, sizeof(krb5_crypto_iov)); - if (iov == NULL) - return ENOMEM; - - i = 0; - - iov[i].flags = KRB5_CRYPTO_TYPE_HEADER; /* takes place of STREAM */ - iov[i].data.data = stream->data.data; - iov[i].data.length = header_len; - i++; - - for (j = 0; j < num_data; j++) { - if (data[j].flags == KRB5_CRYPTO_TYPE_DATA) { - if (got_data) { - free(iov); - return KRB5_BAD_MSIZE; - } - - got_data++; - - data[j].data.data = stream->data.data + header_len; - data[j].data.length = stream->data.length - header_len - trailer_len; - } - if (data[j].flags == KRB5_CRYPTO_TYPE_SIGN_ONLY || - data[j].flags == KRB5_CRYPTO_TYPE_DATA) - iov[i++] = data[j]; - } - - /* XXX not self-describing with respect to length, this is the best we can do */ - iov[i].flags = KRB5_CRYPTO_TYPE_PADDING; - iov[i].data.data = NULL; - iov[i].data.length = 0; - i++; - - iov[i].flags = KRB5_CRYPTO_TYPE_TRAILER; - iov[i].data.data = stream->data.data + stream->data.length - trailer_len; - iov[i].data.length = trailer_len; - i++; - - assert(i <= num_data + 2); - - ret = aead->decrypt_iov(aead, enc, hash, key, keyusage, ivec, iov, i); - - free(iov); - - return ret; -} - -krb5_error_code -krb5int_c_padding_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t data_length, - unsigned int *pad_length) -{ - unsigned int padding; - krb5_error_code ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &padding); - if (ret != 0) - return ret; - - if (padding == 0 || (data_length % padding) == 0) - *pad_length = 0; - else - *pad_length = padding - (data_length % padding); - - return 0; -} - -krb5_error_code -krb5int_c_encrypt_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - krb5_crypto_iov iov[4]; - krb5_error_code ret; - unsigned int header_len = 0; - unsigned int padding_len = 0; - unsigned int trailer_len = 0; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, - &header_len); - if (ret != 0) - return ret; - - ret = krb5int_c_padding_length(aead, enc, hash, input->length, &padding_len); - if (ret != 0) - return ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, - &trailer_len); - if (ret != 0) - return ret; - - if (output->length < header_len + input->length + padding_len + trailer_len) - return KRB5_BAD_MSIZE; - - iov[0].flags = KRB5_CRYPTO_TYPE_HEADER; - iov[0].data.data = output->data; - iov[0].data.length = header_len; - - iov[1].flags = KRB5_CRYPTO_TYPE_DATA; - iov[1].data.data = iov[0].data.data + iov[0].data.length; - iov[1].data.length = input->length; - memcpy(iov[1].data.data, input->data, input->length); - - iov[2].flags = KRB5_CRYPTO_TYPE_PADDING; - iov[2].data.data = iov[1].data.data + iov[1].data.length; - iov[2].data.length = padding_len; - - iov[3].flags = KRB5_CRYPTO_TYPE_TRAILER; - iov[3].data.data = iov[2].data.data + iov[2].data.length; - iov[3].data.length = trailer_len; - - ret = aead->encrypt_iov(aead, enc, hash, key, - usage, ivec, - iov, sizeof(iov)/sizeof(iov[0])); - - if (ret != 0) - zap(iov[1].data.data, iov[1].data.length); - - output->length = iov[0].data.length + iov[1].data.length + - iov[2].data.length + iov[3].data.length; - - return ret; -} - -krb5_error_code -krb5int_c_decrypt_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - krb5_crypto_iov iov[2]; - krb5_error_code ret; - - iov[0].flags = KRB5_CRYPTO_TYPE_STREAM; - iov[0].data.data = malloc(input->length); - if (iov[0].data.data == NULL) - return ENOMEM; - - memcpy(iov[0].data.data, input->data, input->length); - iov[0].data.length = input->length; - - iov[1].flags = KRB5_CRYPTO_TYPE_DATA; - iov[1].data.data = NULL; - iov[1].data.length = 0; - - ret = krb5int_c_iov_decrypt_stream(aead, enc, hash, key, - usage, ivec, - iov, sizeof(iov)/sizeof(iov[0])); - if (ret != 0) - goto cleanup; - - if (output->length < iov[1].data.length) { - ret = KRB5_BAD_MSIZE; - goto cleanup; - } - - memcpy(output->data, iov[1].data.data, iov[1].data.length); - output->length = iov[1].data.length; - -cleanup: - zap(iov[0].data.data, iov[0].data.length); - free(iov[0].data.data); - - return ret; -} - -void -krb5int_c_encrypt_length_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length) -{ - unsigned int header_len = 0; - unsigned int padding_len = 0; - unsigned int trailer_len = 0; - - aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, &header_len); - krb5int_c_padding_length(aead, enc, hash, inputlen, &padding_len); - aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &trailer_len); - - *length = header_len + inputlen + padding_len + trailer_len; -} - diff --git a/src/lib/crypto/aead.h b/src/lib/crypto/aead.h deleted file mode 100644 index 2c99eb868..000000000 --- a/src/lib/crypto/aead.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * lib/crypto/aead.h - * - * Copyright 2008, 2009 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -/* AEAD helpers */ - -krb5_crypto_iov * -krb5int_c_locate_iov(krb5_crypto_iov *data, - size_t num_data, - krb5_cryptotype type); - -krb5_error_code -krb5int_c_make_checksum_iov(const struct krb5_cksumtypes *cksum, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_crypto_iov *data, - size_t num_data, - krb5_data *cksum_data); - -const struct krb5_cksumtypes * -krb5int_c_find_checksum_type(krb5_cksumtype cksumtype); - -#define ENCRYPT_CONF_IOV(_iov) ((_iov)->flags == KRB5_CRYPTO_TYPE_HEADER) - -#define ENCRYPT_DATA_IOV(_iov) ((_iov)->flags == KRB5_CRYPTO_TYPE_DATA || \ - (_iov)->flags == KRB5_CRYPTO_TYPE_PADDING) - -#define ENCRYPT_IOV(_iov) (ENCRYPT_CONF_IOV(_iov) || ENCRYPT_DATA_IOV(_iov)) - -#define SIGN_IOV(_iov) (ENCRYPT_IOV(_iov) || \ - (_iov)->flags == KRB5_CRYPTO_TYPE_SIGN_ONLY ) - -struct iov_block_state { - size_t iov_pos; /* index into iov array */ - size_t data_pos; /* index into iov contents */ - unsigned int ignore_header : 1; /* have/should we process HEADER */ - unsigned int include_sign_only : 1; /* should we process SIGN_ONLY blocks */ - unsigned int pad_to_boundary : 1; /* should we zero fill blocks until next buffer */ -}; - -#define IOV_BLOCK_STATE_INIT(_state) ((_state)->iov_pos = \ - (_state)->data_pos = \ - (_state)->ignore_header = \ - (_state)->include_sign_only = \ - (_state)->pad_to_boundary = 0) - -krb5_boolean -krb5int_c_iov_get_block(unsigned char *block, - size_t block_size, - const krb5_crypto_iov *data, - size_t num_data, - struct iov_block_state *iov_state); - -krb5_boolean -krb5int_c_iov_put_block(const krb5_crypto_iov *data, - size_t num_data, - unsigned char *block, - size_t block_size, - struct iov_block_state *iov_state); - -krb5_error_code -krb5int_c_iov_decrypt_stream(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage keyusage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data); - -krb5_error_code -krb5int_c_decrypt_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output); - -krb5_error_code -krb5int_c_encrypt_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output); - -void -krb5int_c_encrypt_length_aead_compat(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length); - -krb5_error_code -krb5int_c_padding_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t data_length, - unsigned int *pad_length); diff --git a/src/lib/crypto/aes/Makefile.in b/src/lib/crypto/aes/Makefile.in deleted file mode 100644 index 4ed8ef7bf..000000000 --- a/src/lib/crypto/aes/Makefile.in +++ /dev/null @@ -1,72 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/aes -mydir=lib/crypto/aes -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../dk -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=aes -##DOS##OBJFILE=..\$(OUTPRE)aes.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS=\ - aescrypt.o \ - aestab.o \ - aeskey.o \ - aes_s2k.o - -OBJS=\ - $(OUTPRE)aescrypt.$(OBJEXT) \ - $(OUTPRE)aestab.$(OBJEXT) \ - $(OUTPRE)aeskey.$(OBJEXT) \ - $(OUTPRE)aes_s2k.$(OBJEXT) - -SRCS=\ - $(srcdir)/aescrypt.c \ - $(srcdir)/aestab.c \ - $(srcdir)/aeskey.c \ - $(srcdir)/aes_s2k.c - -GEN_OBJS=\ - $(OUTPRE)aescrypt.$(OBJEXT) \ - $(OUTPRE)aestab.$(OBJEXT) \ - $(OUTPRE)aeskey.$(OBJEXT) - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs # aes-gen - -includes:: depend - -depend:: $(SRCS) - -aes-gen: aes-gen.o $(GEN_OBJS) - $(CC_LINK) -o aes-gen aes-gen.o $(GEN_OBJS) - -run-aes-gen: aes-gen - ./aes-gen > kresults.out - -check:: run-aes-gen - -aes-test: aes-test.$(OBJEXT) $(CRYPTO_DEPLIB) - $(CC_LINK) -o aes-test aes-test.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) - -check:: run-aes-test -run-aes-test: aes-test - $(RUN_SETUP) $(VALGRIND) ./aes-test -k > vk.txt - cmp vk.txt $(srcdir)/expect-vk.txt - $(RUN_SETUP) $(VALGRIND) ./aes-test > vt.txt - cmp vt.txt $(srcdir)/expect-vt.txt - -clean-unix:: clean-libobjs - -clean:: - -$(RM) aes-gen aes-gen.o vt.txt vk.txt kresults.out aes-test aes-test.o - -@libobj_frag@ - diff --git a/src/lib/crypto/aes/aes-gen.c b/src/lib/crypto/aes/aes-gen.c deleted file mode 100644 index 855e6a470..000000000 --- a/src/lib/crypto/aes/aes-gen.c +++ /dev/null @@ -1,326 +0,0 @@ -/* - * To be compiled against the AES code from: - * http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm - */ -#include -#include -#include -#include -#include "aes.h" - -#define B 16U -unsigned char key[16]; -unsigned char test_case_len[] = { B+1, 2*B-1, 2*B, 2*B+1, 3*B-1, 3*B, 4*B, }; -#define NTESTS (sizeof(test_case_len)) -struct { - unsigned char ivec[16]; - unsigned char input[4*16]; - unsigned char output[4*16]; -} test_case[NTESTS]; -aes_ctx ctx, dctx; - -static void init () -{ - int i, j, r; - - srand(42); - for (i = 0; i < 16; i++) - key[i] = 0xff & rand(); - memset(test_case, 0, sizeof(test_case)); - for (i = 0; i < NTESTS; i++) - for (j = 0; j < test_case_len[i]; j++) { - test_case[i].input[j] = 0xff & rand(); - } - - r = aes_enc_key (key, sizeof(key), &ctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - r = aes_dec_key (key, sizeof(key), &dctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); -} - -static void hexdump(const unsigned char *ptr, size_t len) -{ - int i; - for (i = 0; i < len; i++) - printf ("%s%02X", (i % 16 == 0) ? "\n " : " ", ptr[i]); -} - -static void fips_test () -{ - static const unsigned char fipskey[16] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - static const unsigned char input[16] = { - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, - }; - static const unsigned char expected[16] = { - 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, - 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a, - }; - unsigned char output[16]; - unsigned char tmp[16]; - aes_ctx fipsctx; - int r; - - printf ("FIPS test:\nkey:"); - hexdump (fipskey, 16); - printf ("\ninput:"); - hexdump (input, 16); - r = aes_enc_key (fipskey, sizeof(fipskey), &fipsctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - r = aes_enc_blk (input, output, &fipsctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - printf ("\noutput:"); - hexdump (output, 16); - printf ("\n"); - if (memcmp(expected, output, 16)) - fprintf(stderr, "wrong results!!!\n"), exit (1); - r = aes_dec_key (fipskey, sizeof(fipskey), &fipsctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - r = aes_dec_blk (output, tmp, &fipsctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - if (memcmp(input, tmp, 16)) - fprintf(stderr, "decryption failed!!\n"), exit(1); - printf ("ok.\n\n"); -} - -static void -xor (unsigned char *out, const unsigned char *a, const unsigned char *b) -{ - int i; - for (i = 0; i < B; i++) - out[i] = a[i] ^ b[i]; -} - -static void -ecb_enc (unsigned char *out, unsigned char *in, unsigned int len) -{ - int i, r; - for (i = 0; i < len; i += 16) { - r = aes_enc_blk (in + i, out + i, &ctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - } - if (i != len) abort (); -} - -static void -ecb_dec (unsigned char *out, unsigned char *in, unsigned int len) -{ - int i, r; - for (i = 0; i < len; i += 16) { - r = aes_dec_blk (in + i, out + i, &dctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - } - if (i != len) abort (); -} - -#define D(X) (printf("%s %d: %s=",__FUNCTION__,__LINE__, #X),hexdump(X,B),printf("\n")) - -#undef D -#define D(X) - -static void -cbc_enc (unsigned char *out, unsigned char *in, unsigned char *iv, - unsigned int len) -{ - int i, r; - unsigned char tmp[B]; - D(iv); - memcpy (tmp, iv, B); - for (i = 0; i < len; i += B) { - D(in+i); - xor (tmp, tmp, in + i); - D(tmp); - r = aes_enc_blk (tmp, out + i, &ctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - memcpy (tmp, out + i, B); - D(out+i); - } - if (i != len) abort (); -} - -static void -cbc_dec (unsigned char *out, unsigned char *in, unsigned char *iv, - unsigned int len) -{ - int i, r; - unsigned char tmp[B]; - memcpy (tmp, iv, B); - for (i = 0; i < len; i += B) { - r = aes_dec_blk (in + i, tmp, &dctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - xor (tmp, tmp, iv); - iv = in + i; - memcpy (out + i, tmp, B); - } - if (i != len) abort (); -} - -static void -cts_enc (unsigned char *out, unsigned char *in, unsigned char *iv, - unsigned int len) -{ - int r; - unsigned int len2; - unsigned char pn1[B], pn[B], cn[B], cn1[B]; - - if (len < B + 1) abort (); - len2 = (len - B - 1) & ~(B-1); - cbc_enc (out, in, iv, len2); - out += len2; - in += len2; - len -= len2; - if (len2) - iv = out - B; - if (len <= B || len > 2 * B) - abort (); - printf ("(did CBC mode for %d)\n", len2); - - D(in); - xor (pn1, in, iv); - D(pn1); - r = aes_enc_blk (pn1, cn, &ctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - D(cn); - memset (pn, 0, sizeof(pn)); - memcpy (pn, in+B, len-B); - D(pn); - xor (pn, pn, cn); - D(pn); - r = aes_enc_blk (pn, cn1, &ctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - D(cn1); - memcpy(out, cn1, B); - memcpy(out+B, cn, len-B); -} - -static void -cts_dec (unsigned char *out, unsigned char *in, unsigned char *iv, - unsigned int len) -{ - int r; - unsigned int len2; - unsigned char pn1[B], pn[B], cn[B], cn1[B]; - - if (len < B + 1) abort (); - len2 = (len - B - 1) & ~(B-1); - cbc_dec (out, in, iv, len2); - out += len2; - in += len2; - len -= len2; - if (len2) - iv = in - B; - if (len <= B || len > 2 * B) - abort (); - - memcpy (cn1, in, B); - r = aes_dec_blk (cn1, pn, &dctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - memset (cn, 0, sizeof(cn)); - memcpy (cn, in+B, len-B); - xor (pn, pn, cn); - memcpy (cn+len-B, pn+len-B, 2*B-len); - r = aes_dec_blk (cn, pn1, &dctx); - if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); - xor (pn1, pn1, iv); - memcpy(out, pn1, B); - memcpy(out+B, pn, len-B); -} - -static void ecb_test () -{ - int testno; - unsigned char tmp[4*B]; - - printf ("ECB tests:\n"); - printf ("key:"); - hexdump (key, sizeof(key)); - for (testno = 0; testno < NTESTS; testno++) { - unsigned len = (test_case_len[testno] + 15) & ~15; - printf ("\ntest %d - %d bytes\n", testno, len); - printf ("input:"); - hexdump (test_case[testno].input, len); - printf ("\n"); - ecb_enc (test_case[testno].output, test_case[testno].input, len); - printf ("output:"); - hexdump (test_case[testno].output, len); - printf ("\n"); - ecb_dec (tmp, test_case[testno].output, len); - if (memcmp (tmp, test_case[testno].input, len)) { - printf ("ecb decrypt failed!!"); - hexdump (tmp, len); - printf ("\n"); - exit (1); - } - } - printf ("\n"); -} - -unsigned char ivec[16] = { 0 }; - -static void cbc_test () -{ - int testno; - unsigned char tmp[4*B]; - - printf ("CBC tests:\n"); - printf ("initial vector:"); - hexdump (ivec, sizeof(ivec)); - for (testno = 0; testno < NTESTS; testno++) { - unsigned len = (test_case_len[testno] + 15) & ~15; - printf ("\ntest %d - %d bytes\n", testno, len); - printf ("input:"); - hexdump (test_case[testno].input, len); - printf ("\n"); - cbc_enc (test_case[testno].output, test_case[testno].input, ivec, len); - printf ("output:"); - hexdump (test_case[testno].output, len); - printf ("\n"); - cbc_dec (tmp, test_case[testno].output, ivec, len); - if (memcmp (tmp, test_case[testno].input, len)) { - printf("cbc decrypt failed!!"); - hexdump (tmp, len); - printf ("\n"); - exit(1); - } - } - printf ("\n"); -} - -static void cts_test () -{ - int testno; - unsigned char tmp[4*B]; - - printf ("CTS tests:\n"); - printf ("initial vector:"); - hexdump (ivec, sizeof(ivec)); - for (testno = 0; testno < NTESTS; testno++) { - unsigned int len = test_case_len[testno]; - printf ("\ntest %d - %d bytes\n", testno, len); - printf ("input:"); - hexdump (test_case[testno].input, len); - printf ("\n"); - cts_enc (test_case[testno].output, test_case[testno].input, ivec, len); - printf ("output:"); - hexdump (test_case[testno].output, len); - printf ("\n"); - cts_dec (tmp, test_case[testno].output, ivec, len); - if (memcmp (tmp, test_case[testno].input, len)) - fprintf (stderr, "cts decrypt failed!!\n"), exit(1); - } - printf ("\n"); -} - -int main () -{ - init (); - fips_test (); - - ecb_test(); - cbc_test(); - cts_test(); - - return 0; -} diff --git a/src/lib/crypto/aes/aes-test.c b/src/lib/crypto/aes/aes-test.c deleted file mode 100644 index c05fd26e3..000000000 --- a/src/lib/crypto/aes/aes-test.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * lib/crypto/aes/aes-test.c - * - * Copyright (C) 2002 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Subset of NIST tests for AES; specifically, the variable-key and - * variable-text tests for 128- and 256-bit keys. - */ - -#include -#include "k5-int.h" - -static char key[32]; -static char plain[16], cipher[16], zero[16]; - -static krb5_keyblock enc_key; -static krb5_data ivec; -static krb5_data in, out; -static void init() -{ - enc_key.contents = key; - enc_key.length = 16; - ivec.data = zero; - ivec.length = 16; - in.data = plain; - in.length = 16; - out.data = cipher; - out.length = 16; -} -static void enc() -{ - krb5int_aes_encrypt(&enc_key, &ivec, &in, &out); -} - -static void hexdump(const char *label, const char *cp, int len) -{ - printf("%s=", label); - while (len--) printf("%02X", 0xff & *cp++); - printf("\n"); -} - -static void set_bit(char *ptr, int bitnum) -{ - int bytenum; - bytenum = bitnum / 8; - bitnum %= 8; - /* First bit is the high bit! */ - ptr[bytenum] = 1 << (7 - bitnum); -} - -/* Variable-Key tests */ -static void vk_test_1(int len) -{ - int i; - - enc_key.length = len; - printf("\nKEYSIZE=%d\n\n", len * 8); - memset(plain, 0, sizeof(plain)); - hexdump("PT", plain, 16); - for (i = 0; i < len * 8; i++) { - memset(key, 0, len); - set_bit(key, i); - printf("\nI=%d\n", i+1); - hexdump("KEY", key, len); - enc(); - hexdump("CT", cipher, 16); - } - printf("\n==========\n"); -} -static void vk_test() -{ - vk_test_1(16); - vk_test_1(32); -} - -/* Variable-Text tests */ -static void vt_test_1(int len) -{ - int i; - - enc_key.length = len; - printf("\nKEYSIZE=%d\n\n", len * 8); - memset(key, 0, len); - hexdump("KEY", key, len); - for (i = 0; i < 16 * 8; i++) { - memset(plain, 0, sizeof(plain)); - set_bit(plain, i); - printf("\nI=%d\n", i+1); - hexdump("PT", plain, 16); - enc(); - hexdump("CT", cipher, 16); - } - printf("\n==========\n"); -} -static void vt_test() -{ - vt_test_1(16); - vt_test_1(32); -} - - -int main (int argc, char *argv[]) -{ - if (argc > 2 || (argc == 2 && strcmp(argv[1], "-k"))) { - fprintf(stderr, - "usage:\t%s -k\tfor variable-key tests\n" - " or:\t%s \tfor variable-plaintext tests\n", - argv[0], argv[0]); - return 1; - } - init(); - if (argc == 2) - vk_test(); - else - vt_test(); - return 0; -} diff --git a/src/lib/crypto/aes/aes.h b/src/lib/crypto/aes/aes.h deleted file mode 100644 index ac1c1b89e..000000000 --- a/src/lib/crypto/aes/aes.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the definitions required to use AES (Rijndael) in C. -*/ - -#ifndef _AES_H -#define _AES_H - -#include "uitypes.h" - -/* BLOCK_SIZE is in BYTES: 16, 24, 32 or undefined for aes.c and 16, 20, - 24, 28, 32 or undefined for aespp.c. When left undefined a slower - version that provides variable block length is compiled. -*/ - -#define BLOCK_SIZE 16 - -/* key schedule length (in 32-bit words) */ - -#if !defined(BLOCK_SIZE) -#define KS_LENGTH 128 -#else -#define KS_LENGTH 4 * BLOCK_SIZE -#endif - -#if defined(__cplusplus) -extern "C" -{ -#endif - -typedef uint16_t aes_fret; /* type for function return value */ -#define aes_bad 0 /* bad function return value */ -#define aes_good 1 /* good function return value */ -#ifndef AES_DLL /* implement normal or DLL functions */ -#define aes_rval aes_fret -#else -#define aes_rval aes_fret __declspec(dllexport) _stdcall -#endif - -typedef struct /* the AES context for encryption */ -{ uint32_t k_sch[KS_LENGTH]; /* the encryption key schedule */ - uint32_t n_rnd; /* the number of cipher rounds */ - uint32_t n_blk; /* the number of bytes in the state */ -} aes_ctx; - -/* for Kerberos 5 tree -- hide names! */ -#define aes_blk_len krb5int_aes_blk_len -#define aes_enc_key krb5int_aes_enc_key -#define aes_enc_blk krb5int_aes_enc_blk -#define aes_dec_key krb5int_aes_dec_key -#define aes_dec_blk krb5int_aes_dec_blk -#define fl_tab krb5int_fl_tab -#define ft_tab krb5int_ft_tab -#define il_tab krb5int_il_tab -#define im_tab krb5int_im_tab -#define it_tab krb5int_it_tab -#define rcon_tab krb5int_rcon_tab - -aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); - -aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); -aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); - -aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); -aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/src/lib/crypto/aes/aes.txt b/src/lib/crypto/aes/aes.txt deleted file mode 100644 index b644b5eb4..000000000 --- a/src/lib/crypto/aes/aes.txt +++ /dev/null @@ -1,70 +0,0 @@ - -An AES (Rijndael) Implementation in C/C++ (as specified in FIPS-197) --------------------------------------------------------------------- - -The source code files are as follows: - -1. aes.h: the header file required to use AES in C -2. aescpp.h the header file required to use AES in C++ -3. aescrypt.c the main C source code file for encryption and decryption -4. aeskey.c the main C source code file for the key schedule -5. aestab.c the main file for the AES tables -6. aesopt.h the file for common code and for setting build options -7. aescrypt.asm a faster alternative to 3 above in assembler (using NASM) -8. uitypes.h a file for defining fixed length unsigned integer types -9. aescrypp.c an alternative to 3 for all Rijndael block and key sizes -10.aeskeypp.c an alternative to 4 for all Rijndael block and key sizes -11.aesxam.c an example of AES use - -Source files 9 and 10 are much slower than 4 and 5 for normal use and -should not be used unless support for 20 and 28 byte blocks and keys -is necessary. Files 4 and 5 provide support for block and key sizes -of 16, 24 and 32 bytes (fixed or variable) but the assemler code in -file 7 only supports the 16 byte AES block length. It does, however, -offer the three key sizes when used with file 4. The use of files 4 -and 5 (or 9 and 10) with variable block size should be avoided since -the code is much faster when the block size is fixed. - -The VC++ AES Development Project --------------------------------- - -The VC++ SOlution contains the following sub-projects - -1. aes_asm this project tests the assembler code implementation -2. aes_dll this project builds the DLL version -3. aes_gav this project re-creates the test vector files and - optionally checks them against a reference set -4. aes_rav this project checks the values produced by the code - against the values in the test vector files -5. aes_tmr this project measures the speed of the code -6. aes_tst this project is set up to test the extended version - of Rijndael with block and key sizes of 16, 20, 24, - 28 and 32 bytes -7. aes_xam this project builds the example of AES use in a - simple file encryption program - -Note that the paths for the various directories have to be set up in -aestst.h - -The AES and Rijndael Test Vector Files --------------------------------------- - -These files fall in the following groups (where is a two digit -number): - -1. ecbvk.txt ECB vectors with variable key -2. ecbvt.txt ECB vectors with variable text -3. ecbnk.txt new ECB vectors with variable key -4. ecbnt.txt new ECB vectors with variable text -5. ecbme.txt ECB monte carlo encryption test vectors -6. ecbmd.txt ECB monte carlo decryption test vectors -7. cbcme.txt CBC monte carlo encryption test vectors -8. cbcmd.txt CBC monte carlo decryption test vectors - -The first digit of the numeric suffix on the filename gives the -block size in 32bit units and the second numeric digit gives the -key size. For example, the file ecbvk44.txt provides the test -vectors for ECB encryption with a 128 bit block size and a 128 -bit key size. - - Brian Gladman \ No newline at end of file diff --git a/src/lib/crypto/aes/aes_s2k.c b/src/lib/crypto/aes/aes_s2k.c deleted file mode 100644 index 36045edc0..000000000 --- a/src/lib/crypto/aes/aes_s2k.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * lib/crypto/aes/aes_s2k.c - * - * Copyright 2003 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * krb5int_aes_string_to_key - */ - -#include "k5-int.h" -#include "dk.h" -#include "aes_s2k.h" - -#define DEFAULT_ITERATION_COUNT 4096 /* was 0xb000L in earlier drafts */ -#define MAX_ITERATION_COUNT 0x1000000L - -krb5_error_code -krb5int_aes_string_to_key(const struct krb5_enc_provider *enc, - const krb5_data *string, - const krb5_data *salt, - const krb5_data *params, - krb5_keyblock *key) -{ - unsigned long iter_count; - krb5_data out; - static const krb5_data usage = { KV5M_DATA, 8, "kerberos" }; - krb5_error_code err; - - if (params) { - unsigned char *p = (unsigned char *) params->data; - if (params->length != 4) - return KRB5_ERR_BAD_S2K_PARAMS; - /* The first two need casts in case 'int' is 16 bits. */ - iter_count = load_32_be(p); - if (iter_count == 0) { - iter_count = (1UL << 16) << 16; - if (((iter_count >> 16) >> 16) != 1) - return KRB5_ERR_BAD_S2K_PARAMS; - } - } else - iter_count = DEFAULT_ITERATION_COUNT; - - /* This is not a protocol specification constraint; this is an - implementation limit, which should eventually be controlled by - a config file. */ - if (iter_count >= MAX_ITERATION_COUNT) - return KRB5_ERR_BAD_S2K_PARAMS; - - /* - * Dense key space, no parity bits or anything, so take a shortcut - * and use the key contents buffer for the generated bytes. - */ - out.data = (char *) key->contents; - out.length = key->length; - if (out.length != 16 && out.length != 32) - return KRB5_CRYPTO_INTERNAL; - - err = krb5int_pbkdf2_hmac_sha1 (&out, iter_count, string, salt); - if (err) { - memset(out.data, 0, out.length); - return err; - } - - err = krb5_derive_key (enc, key, key, &usage); - if (err) { - memset(out.data, 0, out.length); - return err; - } - return 0; -} diff --git a/src/lib/crypto/aes/aes_s2k.h b/src/lib/crypto/aes/aes_s2k.h deleted file mode 100644 index b6804a991..000000000 --- a/src/lib/crypto/aes/aes_s2k.h +++ /dev/null @@ -1,4 +0,0 @@ -extern krb5_error_code -krb5int_aes_string_to_key (const struct krb5_enc_provider *, - const krb5_data *, const krb5_data *, - const krb5_data *, krb5_keyblock *key); diff --git a/src/lib/crypto/aes/aescpp.h b/src/lib/crypto/aes/aescpp.h deleted file mode 100644 index e685485e1..000000000 --- a/src/lib/crypto/aes/aescpp.h +++ /dev/null @@ -1,55 +0,0 @@ - -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - TERMS - - Redistribution and use in source and binary forms, with or without - modification, are permitted subject to the following conditions: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The copyright holder's name must not be used to endorse or promote - any products derived from this software without his specific prior - written permission. - - This software is provided 'as is' with no express or implied warranties - of correctness or fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the definitions required to use AES (Rijndael) in C++. -*/ - -#ifndef _AESCPP_H -#define _AESCPP_H - -#include "aes.h" - -class AESclass -{ aes_ctx cx[1]; -public: -#if defined(BLOCK_SIZE) - AESclass() { cx->n_blk = BLOCK_SIZE; cx->n_rnd = 0; } -#else - AESclass(unsigned int blen = 16) { cx->n_blk = blen; cx->n_rnd = 0; } -#endif - aes_rval blk_len(unsigned int blen) { return aes_blk_len(blen, cx); } - aes_rval enc_key(const unsigned char in_key[], unsigned int klen) - { return aes_enc_key(in_key, klen, cx); } - aes_rval dec_key(const unsigned char in_key[], unsigned int klen) - { return aes_dec_key(in_key, klen, cx); } - aes_rval enc_blk(const unsigned char in_blk[], unsigned char out_blk[]) - { return aes_enc_blk(in_blk, out_blk, cx); } - aes_rval dec_blk(const unsigned char in_blk[], unsigned char out_blk[]) - { return aes_dec_blk(in_blk, out_blk, cx); } -}; - -#endif diff --git a/src/lib/crypto/aes/aescrypp.c b/src/lib/crypto/aes/aescrypp.c deleted file mode 100644 index 87b634179..000000000 --- a/src/lib/crypto/aes/aescrypp.c +++ /dev/null @@ -1,487 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the code for implementing encryption and decryption - for AES (Rijndael) for block and key sizes of 16, 20, 24, 28 and 32 bytes. - It can optionally be replaced by code written in assembler using NASM. -*/ - -#include "aesopt.h" - -#define unused 77 /* Sunset Strip */ - -#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c] -#define so(y,x,c) word_out(y + 4 * c, s(x,c)) - -#if BLOCK_SIZE == 16 - -#if defined(ARRAYS) -#define locals(y,x) x[4],y[4] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,y##0,y##1,y##2,y##3 - /* - the following defines prevent the compiler requiring the declaration - of generated but unused variables in the fwd_var and inv_var macros - */ -#define b04 unused -#define b05 unused -#define b06 unused -#define b07 unused -#define b14 unused -#define b15 unused -#define b16 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) - -#elif BLOCK_SIZE == 20 - -#if defined(ARRAYS) -#define locals(y,x) x[5],y[5] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,y##0,y##1,y##2,y##3,y##4 -#define b05 unused -#define b06 unused -#define b07 unused -#define b15 unused -#define b16 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); s(y,4) = s(x,4); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); si(y,x,k,4) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); so(y,x,4) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); rm(y,x,k,4) - -#elif BLOCK_SIZE == 24 - -#if defined(ARRAYS) -#define locals(y,x) x[6],y[6] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5, \ - y##0,y##1,y##2,y##3,y##4,y##5 -#define b06 unused -#define b07 unused -#define b16 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); \ - s(y,4) = s(x,4); s(y,5) = s(x,5); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ - si(y,x,k,3); si(y,x,k,4); si(y,x,k,5) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ - so(y,x,3); so(y,x,4); so(y,x,5) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ - rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5) - -#elif BLOCK_SIZE == 28 - -#if defined(ARRAYS) -#define locals(y,x) x[7],y[7] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6 \ - y##0,y##1,y##2,y##3,y##4,y##5,y##6 -#define b07 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); \ - s(y,4) = s(x,4); s(y,5) = s(x,5);; s(y,6) = s(x,6); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ - si(y,x,k,3); si(y,x,k,4); si(y,x,k,5); si(y,x,k,6) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ - so(y,x,3); so(y,x,4); so(y,x,5); so(y,x,6) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ - rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6) -#else - -#if defined(ARRAYS) -#define locals(y,x) x[8],y[8] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7, \ - y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); \ - s(y,4) = s(x,4); s(y,5) = s(x,5); \ - s(y,6) = s(x,6); s(y,7) = s(x,7); - -#if BLOCK_SIZE == 32 - -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); \ - si(y,x,k,4); si(y,x,k,5); si(y,x,k,6); si(y,x,k,7) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); \ - so(y,x,4); so(y,x,5); so(y,x,6); so(y,x,7) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); \ - rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6); rm(y,x,k,7) -#else - -#define state_in(y,x,k) \ -switch(nc) \ -{ case 8: si(y,x,k,7); \ - case 7: si(y,x,k,6); \ - case 6: si(y,x,k,5); \ - case 5: si(y,x,k,4); \ - case 4: si(y,x,k,3); si(y,x,k,2); \ - si(y,x,k,1); si(y,x,k,0); \ -} - -#define state_out(y,x) \ -switch(nc) \ -{ case 8: so(y,x,7); \ - case 7: so(y,x,6); \ - case 6: so(y,x,5); \ - case 5: so(y,x,4); \ - case 4: so(y,x,3); so(y,x,2); \ - so(y,x,1); so(y,x,0); \ -} - -#if defined(FAST_VARIABLE) - -#define round(rm,y,x,k) \ -switch(nc) \ -{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ - rm(y,x,k,5); rm(y,x,k,4); \ - rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ - case 7: rm(y,x,k,6); rm(y,x,k,5); \ - rm(y,x,k,4); rm(y,x,k,3); \ - rm(y,x,k,2); rm(y,x,k,1); \ - rm(y,x,k,0); \ - break; \ - case 6: rm(y,x,k,5); rm(y,x,k,4); \ - rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ - case 5: rm(y,x,k,4); rm(y,x,k,3); \ - rm(y,x,k,2); rm(y,x,k,1); \ - rm(y,x,k,0); \ - break; \ - case 4: rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ -} -#else - -#define round(rm,y,x,k) \ -switch(nc) \ -{ case 8: rm(y,x,k,7); \ - case 7: rm(y,x,k,6); \ - case 6: rm(y,x,k,5); \ - case 5: rm(y,x,k,4); \ - case 4: rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ -} - -#endif - -#endif -#endif - -#if defined(ENCRYPTION) - -/* I am grateful to Frank Yellin for the following construction - (and that for decryption) which, given the column (c) of the - output state variable, gives the input state variables which - are needed for each row (r) of the state. - - For the fixed block size options, compilers should reduce these - two expressions to fixed variable references. But for variable - block size code conditional clauses will sometimes be returned. - - y = output word, x = input word, r = row, c = column for r = 0, - 1, 2 and 3 = column accessed for row r. -*/ - -#define fwd_var(x,r,c) \ - ( r==0 ? \ - ( c==0 ? s(x,0) \ - : c==1 ? s(x,1) \ - : c==2 ? s(x,2) \ - : c==3 ? s(x,3) \ - : c==4 ? s(x,4) \ - : c==5 ? s(x,5) \ - : c==6 ? s(x,6) \ - : s(x,7)) \ - : r==1 ? \ - ( c==0 ? s(x,1) \ - : c==1 ? s(x,2) \ - : c==2 ? s(x,3) \ - : c==3 ? nc==4 ? s(x,0) : s(x,4) \ - : c==4 ? nc==5 ? s(x,0) : s(x,5) \ - : c==5 ? nc==6 ? s(x,0) : s(x,6) \ - : c==6 ? nc==7 ? s(x,0) : s(x,7) \ - : s(x,0)) \ - : r==2 ? \ - ( c==0 ? nc==8 ? s(x,3) : s(x,2) \ - : c==1 ? nc==8 ? s(x,4) : s(x,3) \ - : c==2 ? nc==8 ? s(x,5) : nc==4 ? s(x,0) : s(x,4) \ - : c==3 ? nc==8 ? s(x,6) : nc==5 ? s(x,0) : nc==4 ? s(x,1) : s(x,5) \ - : c==4 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : nc==6 ? s(x,0) : s(x,1) \ - : c==5 ? nc==6 ? s(x,1) : s(x,0) \ - : c==6 ? s(x,1) \ - : s(x,2)) \ - : \ - ( c==0 ? nc>6 ? s(x,4) : s(x,3) \ - : c==1 ? nc>6 ? s(x,5) : nc==4 ? s(x,0) : s(x,4) \ - : c==2 ? nc>6 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,0) : s(x,1) \ - : c==3 ? nc==8 ? s(x,7) : nc==5 ? s(x,1) : nc==4 ? s(x,2) : s(x,0) \ - : c==4 ? nc==8 ? s(x,0) : nc==5 ? s(x,2) : s(x,1) \ - : c==5 ? nc==8 ? s(x,1) : s(x,2) \ - : c==6 ? nc==8 ? s(x,2) : s(x,3) \ - : s(x,3))) - -#if defined(FT4_SET) -#undef dec_fmvars -#define dec_fmvars -#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c) -#elif defined(FT1_SET) -#undef dec_fmvars -#define dec_fmvars -#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,ft_tab,fwd_var,rf1,c) -#else -#define fwd_rnd(y,x,k,c) s(y,c) = fwd_mcol(no_table(x,s_box,fwd_var,rf1,c)) ^ (k)[c] -#endif - -#if defined(FL4_SET) -#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c) -#elif defined(FL1_SET) -#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,fl_tab,fwd_var,rf1,c) -#else -#define fwd_lrnd(y,x,k,c) s(y,c) = no_table(x,s_box,fwd_var,rf1,c) ^ (k)[c] -#endif - -aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) -{ uint32_t locals(b0, b1); - const uint32_t *kp = cx->k_sch; - dec_fmvars /* declare variables for fwd_mcol() if needed */ - - if(!(cx->n_blk & 1)) return aes_bad; - -#if (ENC_UNROLL == FULL) - - state_in((cx->n_rnd & 1 ? b1 : b0), in_blk, kp); - kp += (cx->n_rnd - 9) * nc; - - switch(cx->n_rnd) - { - case 14: round(fwd_rnd, b1, b0, kp - 4 * nc); - case 13: round(fwd_rnd, b0, b1, kp - 3 * nc); - case 12: round(fwd_rnd, b1, b0, kp - 2 * nc); - case 11: round(fwd_rnd, b0, b1, kp - nc); - case 10: round(fwd_rnd, b1, b0, kp ); - round(fwd_rnd, b0, b1, kp + nc); - round(fwd_rnd, b1, b0, kp + 2 * nc); - round(fwd_rnd, b0, b1, kp + 3 * nc); - round(fwd_rnd, b1, b0, kp + 4 * nc); - round(fwd_rnd, b0, b1, kp + 5 * nc); - round(fwd_rnd, b1, b0, kp + 6 * nc); - round(fwd_rnd, b0, b1, kp + 7 * nc); - round(fwd_rnd, b1, b0, kp + 8 * nc); - round(fwd_lrnd, b0, b1, kp + 9 * nc); - } -#else - { uint32_t rnd; - - state_in(b0, in_blk, kp); - -#if (ENC_UNROLL == PARTIAL) - - for(rnd = 0; rnd < (cx->n_rnd - 1) >> 1; ++rnd) - { - kp += nc; - round(fwd_rnd, b1, b0, kp); - kp += nc; - round(fwd_rnd, b0, b1, kp); - } - - if(cx->n_rnd & 1) - { - l_copy(b1, b0); - } - else - { - kp += nc; - round(fwd_rnd, b1, b0, kp); - } -#else - for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) - { - kp += nc; - round(fwd_rnd, b1, b0, kp); - l_copy(b0, b1); - } -#endif - kp += nc; - round(fwd_lrnd, b0, b1, kp); - } -#endif - - state_out(out_blk, b0); - return aes_good; -} - -#endif - -#if defined(DECRYPTION) - -#define inv_var(x,r,c) \ - ( r==0 ? \ - ( c==0 ? s(x,0) \ - : c==1 ? s(x,1) \ - : c==2 ? s(x,2) \ - : c==3 ? s(x,3) \ - : c==4 ? s(x,4) \ - : c==5 ? s(x,5) \ - : c==6 ? s(x,6) \ - : s(x,7)) \ - : r==1 ? \ - ( c==0 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,4) : s(x,3) \ - : c==1 ? s(x,0) \ - : c==2 ? s(x,1) \ - : c==3 ? s(x,2) \ - : c==4 ? s(x,3) \ - : c==5 ? s(x,4) \ - : c==6 ? s(x,5) \ - : s(x,6)) \ - : r==2 ? \ - ( c==0 ? nc>6 ? s(x,5) : nc==6 ? s(x,4) : nc==5 ? s(x,3) : s(x,2) \ - : c==1 ? nc>6 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,4) : s(x,3) \ - : c==2 ? nc==8 ? s(x,7) : s(x,0) \ - : c==3 ? nc==8 ? s(x,0) : s(x,1) \ - : c==4 ? nc==8 ? s(x,1) : s(x,2) \ - : c==5 ? nc==8 ? s(x,2) : s(x,3) \ - : c==6 ? nc==8 ? s(x,3) : s(x,4) \ - : s(x,4)) \ - : \ - ( c==0 ? nc==8 ? s(x,4) : nc==5 ? s(x,2) : nc==4 ? s(x,1) : s(x,3) \ - : c==1 ? nc==8 ? s(x,5) : nc==5 ? s(x,3) : nc==4 ? s(x,2) : s(x,4) \ - : c==2 ? nc==8 ? s(x,6) : nc==5 ? s(x,4) : nc==4 ? s(x,3) : s(x,5) \ - : c==3 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : s(x,0) \ - : c==4 ? nc>6 ? s(x,0) : s(x,1) \ - : c==5 ? nc==6 ? s(x,2) : s(x,1) \ - : c==6 ? s(x,2) \ - : s(x,3))) - -#if defined(IT4_SET) -#undef dec_imvars -#define dec_imvars -#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,it_tab,inv_var,rf1,c) -#elif defined(IT1_SET) -#undef dec_imvars -#define dec_imvars -#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,it_tab,inv_var,rf1,c) -#else -#define inv_rnd(y,x,k,c) s(y,c) = inv_mcol(no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c]) -#endif - -#if defined(IL4_SET) -#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,il_tab,inv_var,rf1,c) -#elif defined(IL1_SET) -#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,il_tab,inv_var,rf1,c) -#else -#define inv_lrnd(y,x,k,c) s(y,c) = no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c] -#endif - -aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) -{ uint32_t locals(b0, b1); - const uint32_t *kp = cx->k_sch + nc * cx->n_rnd; - dec_imvars /* declare variables for inv_mcol() if needed */ - - if(!(cx->n_blk & 2)) return aes_bad; - -#if (DEC_UNROLL == FULL) - - state_in((cx->n_rnd & 1 ? b1 : b0), in_blk, kp); - kp = cx->k_sch + 9 * nc; - - switch(cx->n_rnd) - { - case 14: round(inv_rnd, b1, b0, kp + 4 * nc); - case 13: round(inv_rnd, b0, b1, kp + 3 * nc); - case 12: round(inv_rnd, b1, b0, kp + 2 * nc); - case 11: round(inv_rnd, b0, b1, kp + nc); - case 10: round(inv_rnd, b1, b0, kp ); - round(inv_rnd, b0, b1, kp - nc); - round(inv_rnd, b1, b0, kp - 2 * nc); - round(inv_rnd, b0, b1, kp - 3 * nc); - round(inv_rnd, b1, b0, kp - 4 * nc); - round(inv_rnd, b0, b1, kp - 5 * nc); - round(inv_rnd, b1, b0, kp - 6 * nc); - round(inv_rnd, b0, b1, kp - 7 * nc); - round(inv_rnd, b1, b0, kp - 8 * nc); - round(inv_lrnd, b0, b1, kp - 9 * nc); - } -#else - { uint32_t rnd; - - state_in(b0, in_blk, kp); - -#if (DEC_UNROLL == PARTIAL) - - for(rnd = 0; rnd < (cx->n_rnd - 1) >> 1; ++rnd) - { - kp -= nc; - round(inv_rnd, b1, b0, kp); - kp -= nc; - round(inv_rnd, b0, b1, kp); - } - - if(cx->n_rnd & 1) - { - l_copy(b1, b0); - } - else - { - kp -= nc; - round(inv_rnd, b1, b0, kp); - } -#else - for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) - { - kp -= nc; - round(inv_rnd, b1, b0, kp); - l_copy(b0, b1); - } -#endif - kp -= nc; - round(inv_lrnd, b0, b1, kp); - } -#endif - - state_out(out_blk, b0); - return aes_good; -} - -#endif diff --git a/src/lib/crypto/aes/aescrypt.asm b/src/lib/crypto/aes/aescrypt.asm deleted file mode 100644 index 35a6818b6..000000000 --- a/src/lib/crypto/aes/aescrypt.asm +++ /dev/null @@ -1,402 +0,0 @@ - -; ------------------------------------------------------------------------- -; Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. -; All rights reserved. -; -; LICENSE TERMS -; -; The free distribution and use of this software in both source and binary -; form is allowed (with or without changes) provided that: -; -; 1. distributions of this source code include the above copyright -; notice, this list of conditions and the following disclaimer; -; -; 2. distributions in binary form include the above copyright -; notice, this list of conditions and the following disclaimer -; in the documentation and/or other associated materials; -; -; 3. the copyright holder's name is not used to endorse products -; built using this software without specific written permission. -; -; DISCLAIMER -; -; This software is provided 'as is' with no explcit or implied warranties -; in respect of any properties, including, but not limited to, correctness -; and fitness for purpose. -; ------------------------------------------------------------------------- -; Issue Date: 15/01/2002 - -; An AES (Rijndael) implementation for the Pentium MMX family using the NASM -; assembler . This version only implements -; the standard AES block length (128 bits, 16 bytes) with the same interface -; as that used in my C/C++ implementation. This code does not preserve the -; eax, ecx or edx registers or the artihmetic status flags. However, the ebx, -; esi, edi, and ebp registers are preserved across calls. Only encryption -; and decryption are implemented here, the key schedule code being that from -; compiling aes.c with USE_ASM defined. This code uses VC++ register saving -; conentions; if it is used with another compiler, its conventions for using -; and saving registers will need to be checked. - - section .text use32 - -; aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); -; aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); - - global _aes_enc_blk - global _aes_dec_blk - - extern _ft_tab - extern _fl_tab - extern _it_tab - extern _il_tab - -;%define USE_MMX ; include this to use MMX registers for temporary storage -;%define USE_EMMS ; include this if you make use of floating point operations - -%ifdef USE_MMX -%ifdef USE_EMMS -%define EMMS_ON -%endif -%endif - -tlen: equ 1024 ; length of each of 4 'xor' arrays (256 32-bit words) - -; offsets to parameters with one register pushed onto stack - -in_blk: equ 8 ; input byte array address parameter -out_blk:equ 12 ; output byte array address parameter -ctx: equ 16 ; AES context structure - -; offsets in context structure - -ksch: equ 0 ; encryption key schedule base address -nrnd: equ 256 ; number of rounds -nblk: equ 260 ; number of rounds - -; register mapping for encrypt and decrypt subroutines - -%define r0 eax -%define r1 ebx -%define r2 ecx -%define r3 edx -%define r4 esi -%define r5 edi -%define r6 ebp - -%define eaxl al -%define eaxh ah -%define ebxl bl -%define ebxh bh -%define ecxl cl -%define ecxh ch -%define edxl dl -%define edxh dh - -; This macro takes a 32-bit word representing a column and uses -; each of its four bytes to index into four tables of 256 32-bit -; words to obtain values that are then xored into the appropriate -; output registers r0, r1, r4 or r5. - -; Parameters: -; %1 out_state[0] -; %2 out_state[1] -; %3 out_state[2] -; %4 out_state[3] -; %5 table base address -; %6 input register for the round (destroyed) -; %7 scratch register for the round - -%macro do_col 7 - - movzx %7,%6l - xor %1,[4*%7+%5] - movzx %7,%6h - shr %6,16 - xor %2,[4*%7+%5+tlen] - movzx %7,%6l - movzx %6,%6h - xor %3,[4*%7+%5+2*tlen] - xor %4,[4*%6+%5+3*tlen] - -%endmacro - -; initialise output registers from the key schedule - -%macro do_fcol 8 - - mov %1,[%8] - movzx %7,%6l - mov %2,[%8+12] - xor %1,[4*%7+%5] - mov %4,[%8+ 4] - movzx %7,%6h - shr %6,16 - xor %2,[4*%7+%5+tlen] - movzx %7,%6l - movzx %6,%6h - xor %4,[4*%6+%5+3*tlen] - mov %6,%3 - mov %3,[%8+ 8] - xor %3,[4*%7+%5+2*tlen] - -%endmacro - -; initialise output registers from the key schedule - -%macro do_icol 8 - - mov %1,[%8] - movzx %7,%6l - mov %2,[%8+ 4] - xor %1,[4*%7+%5] - mov %4,[%8+12] - movzx %7,%6h - shr %6,16 - xor %2,[4*%7+%5+tlen] - movzx %7,%6l - movzx %6,%6h - xor %4,[4*%6+%5+3*tlen] - mov %6,%3 - mov %3,[%8+ 8] - xor %3,[4*%7+%5+2*tlen] - -%endmacro - -; These macros implement either MMX or stack based local variables - -%ifdef USE_MMX - -%macro save 2 - movd mm%1,%2 -%endmacro - -%macro restore 2 - movd %1,mm%2 -%endmacro - -%else - -%macro save 2 - mov [esp+4*%1],%2 -%endmacro - -%macro restore 2 - mov %1,[esp+4*%2] -%endmacro - -%endif - -; This macro performs a forward encryption cycle. It is entered with -; the first previous round column values in r0, r1, r4 and r5 and -; exits with the final values in the same registers, using the MMX -; registers mm0-mm1 for temporary storage - -%macro fwd_rnd 1-2 _ft_tab - -; mov current column values into the MMX registers - - mov r2,r0 - save 0,r1 - save 1,r5 - -; compute new column values - - do_fcol r0,r5,r4,r1, %2, r2,r3, %1 - do_col r4,r1,r0,r5, %2, r2,r3 - restore r2,0 - do_col r1,r0,r5,r4, %2, r2,r3 - restore r2,1 - do_col r5,r4,r1,r0, %2, r2,r3 - -%endmacro - -; This macro performs an inverse encryption cycle. It is entered with -; the first previous round column values in r0, r1, r4 and r5 and -; exits with the final values in the same registers, using the MMX -; registers mm0-mm1 for temporary storage - -%macro inv_rnd 1-2 _it_tab - -; mov current column values into the MMX registers - - mov r2,r0 - save 0,r1 - save 1,r5 - -; compute new column values - - do_icol r0,r1,r4,r5, %2, r2,r3, %1 - do_col r4,r5,r0,r1, %2, r2,r3 - restore r2,0 - do_col r1,r4,r5,r0, %2, r2,r3 - restore r2,1 - do_col r5,r0,r1,r4, %2, r2,r3 - -%endmacro - -; AES (Rijndael) Encryption Subroutine - -_aes_enc_blk: - push ebp - mov ebp,[esp+ctx] ; pointer to context - xor eax,eax - test [ebp+nblk],byte 1 - je .0 - cmp eax,[ebp+nrnd] ; encryption/decryption flags - jne short .1 -.0: pop ebp - ret - -; CAUTION: the order and the values used in these assigns -; rely on the register mappings - -.1: push ebx - mov r2,[esp+in_blk+4] - push esi - mov r3,[ebp+nrnd] ; number of rounds - push edi - lea r6,[ebp+ksch] ; key pointer - -; input four columns and xor in first round key - - mov r0,[r2] - mov r1,[r2+4] - mov r4,[r2+8] - mov r5,[r2+12] - xor r0,[r6] - xor r1,[r6+4] - xor r4,[r6+8] - xor r5,[r6+12] - -%ifndef USE_MMX - sub esp,8 ; space for register saves on stack -%endif - add r6,16 ; increment to next round key - sub r3,10 - je .4 ; 10 rounds for 128-bit key - add r6,32 - sub r3,2 - je .3 ; 12 rounds for 128-bit key - add r6,32 - -.2: fwd_rnd r6-64 ; 14 rounds for 128-bit key - fwd_rnd r6-48 -.3: fwd_rnd r6-32 ; 12 rounds for 128-bit key - fwd_rnd r6-16 -.4: fwd_rnd r6 ; 10 rounds for 128-bit key - fwd_rnd r6+ 16 - fwd_rnd r6+ 32 - fwd_rnd r6+ 48 - fwd_rnd r6+ 64 - fwd_rnd r6+ 80 - fwd_rnd r6+ 96 - fwd_rnd r6+112 - fwd_rnd r6+128 - fwd_rnd r6+144,_fl_tab ; last round uses a different table - -; move final values to the output array. CAUTION: the -; order of these assigns rely on the register mappings - -%ifndef USE_MMX - add esp,8 -%endif - mov r6,[esp+out_blk+12] - mov [r6+12],r5 - pop edi - mov [r6+8],r4 - pop esi - mov [r6+4],r1 - pop ebx - mov [r6],r0 - pop ebp - mov eax,1 -%ifdef EMMS_ON - emms -%endif - ret - -; AES (Rijndael) Decryption Subroutine - -_aes_dec_blk: - push ebp - mov ebp,[esp+ctx] ; pointer to context - xor eax,eax - test [ebp+nblk],byte 2 - je .0 - cmp eax,[ebp+nrnd] ; encryption/decryption flags - jne short .1 -.0: pop ebp - ret - -; CAUTION: the order and the values used in these assigns -; rely on the register mappings - -.1: push ebx - mov r2,[esp+in_blk+4] - push esi - mov r3,[ebp+nrnd] ; number of rounds - push edi - lea r6,[ebp+ksch] ; key pointer - mov r0,r3 - shl r0,4 - add r6,r0 - -; input four columns and xor in first round key - - mov r0,[r2] - mov r1,[r2+4] - mov r4,[r2+8] - mov r5,[r2+12] - xor r0,[r6] - xor r1,[r6+4] - xor r4,[r6+8] - xor r5,[r6+12] - -%ifndef USE_MMX - sub esp,8 ; space for register saves on stack -%endif - sub r6,16 ; increment to next round key - sub r3,10 - je .4 ; 10 rounds for 128-bit key - sub r6,32 - sub r3,2 - je .3 ; 12 rounds for 128-bit key - sub r6,32 - -.2: inv_rnd r6+64 ; 14 rounds for 128-bit key - inv_rnd r6+48 -.3: inv_rnd r6+32 ; 12 rounds for 128-bit key - inv_rnd r6+16 -.4: inv_rnd r6 ; 10 rounds for 128-bit key - inv_rnd r6- 16 - inv_rnd r6- 32 - inv_rnd r6- 48 - inv_rnd r6- 64 - inv_rnd r6- 80 - inv_rnd r6- 96 - inv_rnd r6-112 - inv_rnd r6-128 - inv_rnd r6-144,_il_tab ; last round uses a different table - -; move final values to the output array. CAUTION: the -; order of these assigns rely on the register mappings - -%ifndef USE_MMX - add esp,8 -%endif - mov r6,[esp+out_blk+12] - mov [r6+12],r5 - pop edi - mov [r6+8],r4 - pop esi - mov [r6+4],r1 - pop ebx - mov [r6],r0 - pop ebp - mov eax,1 -%ifdef EMMS_ON - emms -%endif - ret - - end diff --git a/src/lib/crypto/aes/aescrypt.c b/src/lib/crypto/aes/aescrypt.c deleted file mode 100644 index 9db66e284..000000000 --- a/src/lib/crypto/aes/aescrypt.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the code for implementing encryption and decryption - for AES (Rijndael) for block and key sizes of 16, 24 and 32 bytes. It - can optionally be replaced by code written in assembler using NASM. -*/ - -#include "aesopt.h" - -#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) -#error An illegal block size has been specified. -#endif - -#define unused 77 /* Sunset Strip */ - -#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c] -#define so(y,x,c) word_out(y + 4 * c, s(x,c)) - -#if BLOCK_SIZE == 16 - -#if defined(ARRAYS) -#define locals(y,x) x[4],y[4] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,y##0,y##1,y##2,y##3 - /* - the following defines prevent the compiler requiring the declaration - of generated but unused variables in the fwd_var and inv_var macros - */ -#define b04 unused -#define b05 unused -#define b06 unused -#define b07 unused -#define b14 unused -#define b15 unused -#define b16 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) - -#elif BLOCK_SIZE == 24 - -#if defined(ARRAYS) -#define locals(y,x) x[6],y[6] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5, \ - y##0,y##1,y##2,y##3,y##4,y##5 -#define b06 unused -#define b07 unused -#define b16 unused -#define b17 unused -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); \ - s(y,4) = s(x,4); s(y,5) = s(x,5); -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ - si(y,x,k,3); si(y,x,k,4); si(y,x,k,5) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ - so(y,x,3); so(y,x,4); so(y,x,5) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ - rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5) -#else - -#if defined(ARRAYS) -#define locals(y,x) x[8],y[8] -#else -#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7, \ - y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 -#endif -#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ - s(y,2) = s(x,2); s(y,3) = s(x,3); \ - s(y,4) = s(x,4); s(y,5) = s(x,5); \ - s(y,6) = s(x,6); s(y,7) = s(x,7); - -#if BLOCK_SIZE == 32 - -#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); \ - si(y,x,k,4); si(y,x,k,5); si(y,x,k,6); si(y,x,k,7) -#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); \ - so(y,x,4); so(y,x,5); so(y,x,6); so(y,x,7) -#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); \ - rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6); rm(y,x,k,7) -#else - -#define state_in(y,x,k) \ -switch(nc) \ -{ case 8: si(y,x,k,7); si(y,x,k,6); \ - case 6: si(y,x,k,5); si(y,x,k,4); \ - case 4: si(y,x,k,3); si(y,x,k,2); \ - si(y,x,k,1); si(y,x,k,0); \ -} - -#define state_out(y,x) \ -switch(nc) \ -{ case 8: so(y,x,7); so(y,x,6); \ - case 6: so(y,x,5); so(y,x,4); \ - case 4: so(y,x,3); so(y,x,2); \ - so(y,x,1); so(y,x,0); \ -} - -#if defined(FAST_VARIABLE) - -#define round(rm,y,x,k) \ -switch(nc) \ -{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ - rm(y,x,k,5); rm(y,x,k,4); \ - rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ - case 6: rm(y,x,k,5); rm(y,x,k,4); \ - rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ - case 4: rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ - break; \ -} -#else - -#define round(rm,y,x,k) \ -switch(nc) \ -{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ - case 6: rm(y,x,k,5); rm(y,x,k,4); \ - case 4: rm(y,x,k,3); rm(y,x,k,2); \ - rm(y,x,k,1); rm(y,x,k,0); \ -} - -#endif - -#endif -#endif - -#if defined(ENCRYPTION) - -/* I am grateful to Frank Yellin for the following construction - (and that for decryption) which, given the column (c) of the - output state variable, gives the input state variables which - are needed in its computation for each row (r) of the state. - - For the fixed block size options, compilers should be able to - reduce this complex expression (and the equivalent one for - decryption) to a static variable reference at compile time. - But for variable block size code, there will be some limbs on - which conditional clauses will be returned. -*/ - -/* y = output word, x = input word, r = row, c = column for r = 0, - 1, 2 and 3 = column accessed for row r. -*/ - -#define fwd_var(x,r,c) \ - ( r==0 ? \ - ( c==0 ? s(x,0) \ - : c==1 ? s(x,1) \ - : c==2 ? s(x,2) \ - : c==3 ? s(x,3) \ - : c==4 ? s(x,4) \ - : c==5 ? s(x,5) \ - : c==6 ? s(x,6) \ - : s(x,7)) \ - : r==1 ? \ - ( c==0 ? s(x,1) \ - : c==1 ? s(x,2) \ - : c==2 ? s(x,3) \ - : c==3 ? nc==4 ? s(x,0) : s(x,4) \ - : c==4 ? s(x,5) \ - : c==5 ? nc==8 ? s(x,6) : s(x,0) \ - : c==6 ? s(x,7) \ - : s(x,0)) \ - : r==2 ? \ - ( c==0 ? nc==8 ? s(x,3) : s(x,2) \ - : c==1 ? nc==8 ? s(x,4) : s(x,3) \ - : c==2 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \ - : c==3 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \ - : c==4 ? nc==8 ? s(x,7) : s(x,0) \ - : c==5 ? nc==8 ? s(x,0) : s(x,1) \ - : c==6 ? s(x,1) \ - : s(x,2)) \ - : \ - ( c==0 ? nc==8 ? s(x,4) : s(x,3) \ - : c==1 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \ - : c==2 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \ - : c==3 ? nc==4 ? s(x,2) : nc==8 ? s(x,7) : s(x,0) \ - : c==4 ? nc==8 ? s(x,0) : s(x,1) \ - : c==5 ? nc==8 ? s(x,1) : s(x,2) \ - : c==6 ? s(x,2) \ - : s(x,3))) - -#if defined(FT4_SET) -#undef dec_fmvars -#define dec_fmvars -#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c) -#elif defined(FT1_SET) -#undef dec_fmvars -#define dec_fmvars -#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,ft_tab,fwd_var,rf1,c) -#else -#define fwd_rnd(y,x,k,c) s(y,c) = fwd_mcol(no_table(x,s_box,fwd_var,rf1,c)) ^ (k)[c] -#endif - -#if defined(FL4_SET) -#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c) -#elif defined(FL1_SET) -#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,fl_tab,fwd_var,rf1,c) -#else -#define fwd_lrnd(y,x,k,c) s(y,c) = no_table(x,s_box,fwd_var,rf1,c) ^ (k)[c] -#endif - -aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) -{ uint32_t locals(b0, b1); - const uint32_t *kp = cx->k_sch; - dec_fmvars /* declare variables for fwd_mcol() if needed */ - - if(!(cx->n_blk & 1)) return aes_bad; - - state_in(b0, in_blk, kp); - -#if (ENC_UNROLL == FULL) - - kp += (cx->n_rnd - 9) * nc; - - switch(cx->n_rnd) - { - case 14: round(fwd_rnd, b1, b0, kp - 4 * nc); - round(fwd_rnd, b0, b1, kp - 3 * nc); - case 12: round(fwd_rnd, b1, b0, kp - 2 * nc); - round(fwd_rnd, b0, b1, kp - nc); - case 10: round(fwd_rnd, b1, b0, kp ); - round(fwd_rnd, b0, b1, kp + nc); - round(fwd_rnd, b1, b0, kp + 2 * nc); - round(fwd_rnd, b0, b1, kp + 3 * nc); - round(fwd_rnd, b1, b0, kp + 4 * nc); - round(fwd_rnd, b0, b1, kp + 5 * nc); - round(fwd_rnd, b1, b0, kp + 6 * nc); - round(fwd_rnd, b0, b1, kp + 7 * nc); - round(fwd_rnd, b1, b0, kp + 8 * nc); - round(fwd_lrnd, b0, b1, kp + 9 * nc); - } -#else - -#if (ENC_UNROLL == PARTIAL) - { uint32_t rnd; - for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) - { - kp += nc; - round(fwd_rnd, b1, b0, kp); - kp += nc; - round(fwd_rnd, b0, b1, kp); - } - kp += nc; - round(fwd_rnd, b1, b0, kp); -#else - { uint32_t rnd, *p0 = b0, *p1 = b1, *pt; - for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) - { - kp += nc; - round(fwd_rnd, p1, p0, kp); - pt = p0, p0 = p1, p1 = pt; - } -#endif - kp += nc; - round(fwd_lrnd, b0, b1, kp); - } -#endif - - state_out(out_blk, b0); - return aes_good; -} - -#endif - -#if defined(DECRYPTION) - -#define inv_var(x,r,c) \ - ( r==0 ? \ - ( c==0 ? s(x,0) \ - : c==1 ? s(x,1) \ - : c==2 ? s(x,2) \ - : c==3 ? s(x,3) \ - : c==4 ? s(x,4) \ - : c==5 ? s(x,5) \ - : c==6 ? s(x,6) \ - : s(x,7)) \ - : r==1 ? \ - ( c==0 ? nc==4 ? s(x,3) : nc==8 ? s(x,7) : s(x,5) \ - : c==1 ? s(x,0) \ - : c==2 ? s(x,1) \ - : c==3 ? s(x,2) \ - : c==4 ? s(x,3) \ - : c==5 ? s(x,4) \ - : c==6 ? s(x,5) \ - : s(x,6)) \ - : r==2 ? \ - ( c==0 ? nc==4 ? s(x,2) : nc==8 ? s(x,5) : s(x,4) \ - : c==1 ? nc==4 ? s(x,3) : nc==8 ? s(x,6) : s(x,5) \ - : c==2 ? nc==8 ? s(x,7) : s(x,0) \ - : c==3 ? nc==8 ? s(x,0) : s(x,1) \ - : c==4 ? nc==8 ? s(x,1) : s(x,2) \ - : c==5 ? nc==8 ? s(x,2) : s(x,3) \ - : c==6 ? s(x,3) \ - : s(x,4)) \ - : \ - ( c==0 ? nc==4 ? s(x,1) : nc==8 ? s(x,4) : s(x,3) \ - : c==1 ? nc==4 ? s(x,2) : nc==8 ? s(x,5) : s(x,4) \ - : c==2 ? nc==4 ? s(x,3) : nc==8 ? s(x,6) : s(x,5) \ - : c==3 ? nc==8 ? s(x,7) : s(x,0) \ - : c==4 ? nc==8 ? s(x,0) : s(x,1) \ - : c==5 ? nc==8 ? s(x,1) : s(x,2) \ - : c==6 ? s(x,2) \ - : s(x,3))) - -#if defined(IT4_SET) -#undef dec_imvars -#define dec_imvars -#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,it_tab,inv_var,rf1,c) -#elif defined(IT1_SET) -#undef dec_imvars -#define dec_imvars -#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,it_tab,inv_var,rf1,c) -#else -#define inv_rnd(y,x,k,c) s(y,c) = inv_mcol(no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c]) -#endif - -#if defined(IL4_SET) -#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,il_tab,inv_var,rf1,c) -#elif defined(IL1_SET) -#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,il_tab,inv_var,rf1,c) -#else -#define inv_lrnd(y,x,k,c) s(y,c) = no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c] -#endif - -aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) -{ uint32_t locals(b0, b1); - const uint32_t *kp = cx->k_sch + nc * cx->n_rnd; - dec_imvars /* declare variables for inv_mcol() if needed */ - - if(!(cx->n_blk & 2)) return aes_bad; - - state_in(b0, in_blk, kp); - -#if (DEC_UNROLL == FULL) - - kp = cx->k_sch + 9 * nc; - switch(cx->n_rnd) - { - case 14: round(inv_rnd, b1, b0, kp + 4 * nc); - round(inv_rnd, b0, b1, kp + 3 * nc); - case 12: round(inv_rnd, b1, b0, kp + 2 * nc); - round(inv_rnd, b0, b1, kp + nc ); - case 10: round(inv_rnd, b1, b0, kp ); - round(inv_rnd, b0, b1, kp - nc); - round(inv_rnd, b1, b0, kp - 2 * nc); - round(inv_rnd, b0, b1, kp - 3 * nc); - round(inv_rnd, b1, b0, kp - 4 * nc); - round(inv_rnd, b0, b1, kp - 5 * nc); - round(inv_rnd, b1, b0, kp - 6 * nc); - round(inv_rnd, b0, b1, kp - 7 * nc); - round(inv_rnd, b1, b0, kp - 8 * nc); - round(inv_lrnd, b0, b1, kp - 9 * nc); - } -#else - -#if (DEC_UNROLL == PARTIAL) - { uint32_t rnd; - for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) - { - kp -= nc; - round(inv_rnd, b1, b0, kp); - kp -= nc; - round(inv_rnd, b0, b1, kp); - } - kp -= nc; - round(inv_rnd, b1, b0, kp); -#else - { uint32_t rnd, *p0 = b0, *p1 = b1, *pt; - for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) - { - kp -= nc; - round(inv_rnd, p1, p0, kp); - pt = p0, p0 = p1, p1 = pt; - } -#endif - kp -= nc; - round(inv_lrnd, b0, b1, kp); - } -#endif - - state_out(out_blk, b0); - return aes_good; -} - -#endif diff --git a/src/lib/crypto/aes/aeskey.c b/src/lib/crypto/aes/aeskey.c deleted file mode 100644 index 60f766b8a..000000000 --- a/src/lib/crypto/aes/aeskey.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the code for implementing the key schedule for AES - (Rijndael) for block and key sizes of 16, 24, and 32 bytes. -*/ - -#include "aesopt.h" - -#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) -#error An illegal block size has been specified. -#endif - -/* Subroutine to set the block size (if variable) in bytes, legal - values being 16, 24 and 32. -*/ - -#if !defined(BLOCK_SIZE) && defined(SET_BLOCK_LENGTH) - -aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]) -{ -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - - if((blen & 7) || blen < 16 || blen > 32) - { - cx->n_blk = 0; return aes_bad; - } - - cx->n_blk = blen; - return aes_good; -} - -#endif - -/* Initialise the key schedule from the user supplied key. The key - length is now specified in bytes - 16, 24 or 32 as appropriate. - This corresponds to bit lengths of 128, 192 and 256 bits, and - to Nk values of 4, 6 and 8 respectively. - - The following macros implement a single cycle in the key - schedule generation process. The number of cycles needed - for each cx->n_col and nk value is: - - nk = 4 5 6 7 8 - ------------------------------ - cx->n_col = 4 10 9 8 7 7 - cx->n_col = 5 14 11 10 9 9 - cx->n_col = 6 19 15 12 11 11 - cx->n_col = 7 21 19 16 13 14 - cx->n_col = 8 29 23 19 17 14 -*/ - -#if defined(ENCRYPTION_KEY_SCHEDULE) - -#define ke4(k,i) \ -{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ - k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ -} -#define kel4(k,i) \ -{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ - k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ -} - -#define ke6(k,i) \ -{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ - k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ - k[6*(i)+10] = ss[4] ^= ss[3]; k[6*(i)+11] = ss[5] ^= ss[4]; \ -} -#define kel6(k,i) \ -{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ - k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ -} - -#define ke8(k,i) \ -{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ - k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ - k[8*(i)+12] = ss[4] ^= ls_box(ss[3],0); k[8*(i)+13] = ss[5] ^= ss[4]; \ - k[8*(i)+14] = ss[6] ^= ss[5]; k[8*(i)+15] = ss[7] ^= ss[6]; \ -} -#define kel8(k,i) \ -{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ - k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ -} - -aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) -{ uint32_t ss[8]; - -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - -#if !defined(BLOCK_SIZE) - if(!cx->n_blk) cx->n_blk = 16; -#else - cx->n_blk = BLOCK_SIZE; -#endif - - cx->n_blk = (cx->n_blk & ~3U) | 1; - - cx->k_sch[0] = ss[0] = word_in(in_key ); - cx->k_sch[1] = ss[1] = word_in(in_key + 4); - cx->k_sch[2] = ss[2] = word_in(in_key + 8); - cx->k_sch[3] = ss[3] = word_in(in_key + 12); - -#if (BLOCK_SIZE == 16) && (ENC_UNROLL != NONE) - - switch(klen) - { - case 16: ke4(cx->k_sch, 0); ke4(cx->k_sch, 1); - ke4(cx->k_sch, 2); ke4(cx->k_sch, 3); - ke4(cx->k_sch, 4); ke4(cx->k_sch, 5); - ke4(cx->k_sch, 6); ke4(cx->k_sch, 7); - ke4(cx->k_sch, 8); kel4(cx->k_sch, 9); - cx->n_rnd = 10; break; - case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - ke6(cx->k_sch, 0); ke6(cx->k_sch, 1); - ke6(cx->k_sch, 2); ke6(cx->k_sch, 3); - ke6(cx->k_sch, 4); ke6(cx->k_sch, 5); - ke6(cx->k_sch, 6); kel6(cx->k_sch, 7); - cx->n_rnd = 12; break; - case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - cx->k_sch[6] = ss[6] = word_in(in_key + 24); - cx->k_sch[7] = ss[7] = word_in(in_key + 28); - ke8(cx->k_sch, 0); ke8(cx->k_sch, 1); - ke8(cx->k_sch, 2); ke8(cx->k_sch, 3); - ke8(cx->k_sch, 4); ke8(cx->k_sch, 5); - kel8(cx->k_sch, 6); - cx->n_rnd = 14; break; - default: cx->n_rnd = 0; return aes_bad; - } -#else - { uint32_t i, l; - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - l = (nc * cx->n_rnd + nc - 1) / (klen >> 2); - - switch(klen) - { - case 16: for(i = 0; i < l; ++i) - ke4(cx->k_sch, i); - break; - case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - for(i = 0; i < l; ++i) - ke6(cx->k_sch, i); - break; - case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - cx->k_sch[6] = ss[6] = word_in(in_key + 24); - cx->k_sch[7] = ss[7] = word_in(in_key + 28); - for(i = 0; i < l; ++i) - ke8(cx->k_sch, i); - break; - default: cx->n_rnd = 0; return aes_bad; - } - } -#endif - - return aes_good; -} - -#endif - -#if defined(DECRYPTION_KEY_SCHEDULE) - -#if (DEC_ROUND != NO_TABLES) -#define d_vars dec_imvars -#define ff(x) inv_mcol(x) -#else -#define ff(x) (x) -#define d_vars -#endif - -#if 1 -#define kdf4(k,i) \ -{ ss[0] = ss[0] ^ ss[2] ^ ss[1] ^ ss[3]; ss[1] = ss[1] ^ ss[3]; ss[2] = ss[2] ^ ss[3]; ss[3] = ss[3]; \ - ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; \ - ss[4] ^= k[4*(i)]; k[4*(i)+4] = ff(ss[4]); ss[4] ^= k[4*(i)+1]; k[4*(i)+5] = ff(ss[4]); \ - ss[4] ^= k[4*(i)+2]; k[4*(i)+6] = ff(ss[4]); ss[4] ^= k[4*(i)+3]; k[4*(i)+7] = ff(ss[4]); \ -} -#define kd4(k,i) \ -{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; ss[4] = ff(ss[4]); \ - k[4*(i)+4] = ss[4] ^= k[4*(i)]; k[4*(i)+5] = ss[4] ^= k[4*(i)+1]; \ - k[4*(i)+6] = ss[4] ^= k[4*(i)+2]; k[4*(i)+7] = ss[4] ^= k[4*(i)+3]; \ -} -#define kdl4(k,i) \ -{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; \ - k[4*(i)+4] = (ss[0] ^= ss[1]) ^ ss[2] ^ ss[3]; k[4*(i)+5] = ss[1] ^ ss[3]; \ - k[4*(i)+6] = ss[0]; k[4*(i)+7] = ss[1]; \ -} -#else -#define kdf4(k,i) \ -{ ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+ 4] = ff(ss[0]); ss[1] ^= ss[0]; k[4*(i)+ 5] = ff(ss[1]); \ - ss[2] ^= ss[1]; k[4*(i)+ 6] = ff(ss[2]); ss[3] ^= ss[2]; k[4*(i)+ 7] = ff(ss[3]); \ -} -#define kd4(k,i) \ -{ ss[4] = ls_box(ss[3],3) ^ rcon_tab[i]; \ - ss[0] ^= ss[4]; ss[4] = ff(ss[4]); k[4*(i)+ 4] = ss[4] ^= k[4*(i)]; \ - ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[4] ^= k[4*(i)+ 1]; \ - ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[4] ^= k[4*(i)+ 2]; \ - ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[4] ^= k[4*(i)+ 3]; \ -} -#define kdl4(k,i) \ -{ ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+ 4] = ss[0]; ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[1]; \ - ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[2]; ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[3]; \ -} -#endif - -#define kdf6(k,i) \ -{ ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 6] = ff(ss[0]); ss[1] ^= ss[0]; k[6*(i)+ 7] = ff(ss[1]); \ - ss[2] ^= ss[1]; k[6*(i)+ 8] = ff(ss[2]); ss[3] ^= ss[2]; k[6*(i)+ 9] = ff(ss[3]); \ - ss[4] ^= ss[3]; k[6*(i)+10] = ff(ss[4]); ss[5] ^= ss[4]; k[6*(i)+11] = ff(ss[5]); \ -} -#define kd6(k,i) \ -{ ss[6] = ls_box(ss[5],3) ^ rcon_tab[i]; \ - ss[0] ^= ss[6]; ss[6] = ff(ss[6]); k[6*(i)+ 6] = ss[6] ^= k[6*(i)]; \ - ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[6] ^= k[6*(i)+ 1]; \ - ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[6] ^= k[6*(i)+ 2]; \ - ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[6] ^= k[6*(i)+ 3]; \ - ss[4] ^= ss[3]; k[6*(i)+10] = ss[6] ^= k[6*(i)+ 4]; \ - ss[5] ^= ss[4]; k[6*(i)+11] = ss[6] ^= k[6*(i)+ 5]; \ -} -#define kdl6(k,i) \ -{ ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 6] = ss[0]; ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[1]; \ - ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[2]; ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[3]; \ -} - -#define kdf8(k,i) \ -{ ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 8] = ff(ss[0]); ss[1] ^= ss[0]; k[8*(i)+ 9] = ff(ss[1]); \ - ss[2] ^= ss[1]; k[8*(i)+10] = ff(ss[2]); ss[3] ^= ss[2]; k[8*(i)+11] = ff(ss[3]); \ - ss[4] ^= ls_box(ss[3],0); k[8*(i)+12] = ff(ss[4]); ss[5] ^= ss[4]; k[8*(i)+13] = ff(ss[5]); \ - ss[6] ^= ss[5]; k[8*(i)+14] = ff(ss[6]); ss[7] ^= ss[6]; k[8*(i)+15] = ff(ss[7]); \ -} -#define kd8(k,i) \ -{ uint32_t g = ls_box(ss[7],3) ^ rcon_tab[i]; \ - ss[0] ^= g; g = ff(g); k[8*(i)+ 8] = g ^= k[8*(i)]; \ - ss[1] ^= ss[0]; k[8*(i)+ 9] = g ^= k[8*(i)+ 1]; \ - ss[2] ^= ss[1]; k[8*(i)+10] = g ^= k[8*(i)+ 2]; \ - ss[3] ^= ss[2]; k[8*(i)+11] = g ^= k[8*(i)+ 3]; \ - g = ls_box(ss[3],0); \ - ss[4] ^= g; g = ff(g); k[8*(i)+12] = g ^= k[8*(i)+ 4]; \ - ss[5] ^= ss[4]; k[8*(i)+13] = g ^= k[8*(i)+ 5]; \ - ss[6] ^= ss[5]; k[8*(i)+14] = g ^= k[8*(i)+ 6]; \ - ss[7] ^= ss[6]; k[8*(i)+15] = g ^= k[8*(i)+ 7]; \ -} -#define kdl8(k,i) \ -{ ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 8] = ss[0]; ss[1] ^= ss[0]; k[8*(i)+ 9] = ss[1]; \ - ss[2] ^= ss[1]; k[8*(i)+10] = ss[2]; ss[3] ^= ss[2]; k[8*(i)+11] = ss[3]; \ -} - -aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) -{ uint32_t ss[8]; - d_vars - -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - -#if !defined(BLOCK_SIZE) - if(!cx->n_blk) cx->n_blk = 16; -#else - cx->n_blk = BLOCK_SIZE; -#endif - - cx->n_blk = (cx->n_blk & ~3U) | 2; - - cx->k_sch[0] = ss[0] = word_in(in_key ); - cx->k_sch[1] = ss[1] = word_in(in_key + 4); - cx->k_sch[2] = ss[2] = word_in(in_key + 8); - cx->k_sch[3] = ss[3] = word_in(in_key + 12); - -#if (BLOCK_SIZE == 16) && (DEC_UNROLL != NONE) - - switch(klen) - { - case 16: kdf4(cx->k_sch, 0); kd4(cx->k_sch, 1); - kd4(cx->k_sch, 2); kd4(cx->k_sch, 3); - kd4(cx->k_sch, 4); kd4(cx->k_sch, 5); - kd4(cx->k_sch, 6); kd4(cx->k_sch, 7); - kd4(cx->k_sch, 8); kdl4(cx->k_sch, 9); - cx->n_rnd = 10; break; - case 24: ss[4] = word_in(in_key + 16); - cx->k_sch[4] = ff(ss[4]); - ss[5] = word_in(in_key + 20); - cx->k_sch[5] = ff(ss[5]); - kdf6(cx->k_sch, 0); kd6(cx->k_sch, 1); - kd6(cx->k_sch, 2); kd6(cx->k_sch, 3); - kd6(cx->k_sch, 4); kd6(cx->k_sch, 5); - kd6(cx->k_sch, 6); kdl6(cx->k_sch, 7); - cx->n_rnd = 12; break; - case 32: ss[4] = word_in(in_key + 16); - cx->k_sch[4] = ff(ss[4]); - ss[5] = word_in(in_key + 20); - cx->k_sch[5] = ff(ss[5]); - ss[6] = word_in(in_key + 24); - cx->k_sch[6] = ff(ss[6]); - ss[7] = word_in(in_key + 28); - cx->k_sch[7] = ff(ss[7]); - kdf8(cx->k_sch, 0); kd8(cx->k_sch, 1); - kd8(cx->k_sch, 2); kd8(cx->k_sch, 3); - kd8(cx->k_sch, 4); kd8(cx->k_sch, 5); - kdl8(cx->k_sch, 6); - cx->n_rnd = 14; break; - default: cx->n_rnd = 0; return aes_bad; - } -#else - { uint32_t i, l; - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - l = (nc * cx->n_rnd + nc - 1) / (klen >> 2); - - switch(klen) - { - case 16: - for(i = 0; i < l; ++i) - ke4(cx->k_sch, i); - break; - case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - for(i = 0; i < l; ++i) - ke6(cx->k_sch, i); - break; - case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); - cx->k_sch[5] = ss[5] = word_in(in_key + 20); - cx->k_sch[6] = ss[6] = word_in(in_key + 24); - cx->k_sch[7] = ss[7] = word_in(in_key + 28); - for(i = 0; i < l; ++i) - ke8(cx->k_sch, i); - break; - default: cx->n_rnd = 0; return aes_bad; - } -#if (DEC_ROUND != NO_TABLES) - for(i = nc; i < nc * cx->n_rnd; ++i) - cx->k_sch[i] = inv_mcol(cx->k_sch[i]); -#endif - } -#endif - - return aes_good; -} - -#endif diff --git a/src/lib/crypto/aes/aeskeypp.c b/src/lib/crypto/aes/aeskeypp.c deleted file mode 100644 index 89fd9006d..000000000 --- a/src/lib/crypto/aes/aeskeypp.c +++ /dev/null @@ -1,399 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 21/01/2002 - - This file contains the code for implementing the key schedule for AES - (Rijndael) for block and key sizes of 16, 20, 24, 28 and 32 bytes. -*/ - -#include "aesopt.h" - -/* Subroutine to set the block size (if variable) in bytes, legal - values being 16, 24 and 32. -*/ - -#if !defined(BLOCK_SIZE) && defined(SET_BLOCK_LENGTH) - -/* Subroutine to set the block size (if variable) in bytes, legal - values being 16, 24 and 32. -*/ - -aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]) -{ -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - - if((blen & 3) || blen < 16 || blen > 32) - { - cx->n_blk = 0; return aes_bad; - } - - cx->n_blk = blen; - return aes_good; -} - -#endif - -/* Initialise the key schedule from the user supplied key. The key - length is now specified in bytes - 16, 24 or 32 as appropriate. - This corresponds to bit lengths of 128, 192 and 256 bits, and - to Nk values of 4, 6 and 8 respectively. - - The following macros implement a single cycle in the key - schedule generation process. The number of cycles needed - for each cx->n_blk and nk value is: - - nk = 4 5 6 7 8 - ------------------------------ - cx->n_blk = 4 10 9 8 7 7 - cx->n_blk = 5 14 11 10 9 9 - cx->n_blk = 6 19 15 12 11 11 - cx->n_blk = 7 21 19 16 13 14 - cx->n_blk = 8 29 23 19 17 14 -*/ - -/* Initialise the key schedule from the user supplied key. The key - length is now specified in bytes - 16, 20, 24, 28 or 32 as - appropriate. This corresponds to bit lengths of 128, 160, 192, - 224 and 256 bits, and to Nk values of 4, 5, 6, 7 & 8 respectively. - */ - -#define mx(t,f) (*t++ = inv_mcol(*f),f++) -#define cp(t,f) *t++ = *f++ - -#if BLOCK_SIZE == 16 -#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s) -#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s) -#elif BLOCK_SIZE == 20 -#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ - cp(d,s) -#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ - mx(d,s) -#elif BLOCK_SIZE == 24 -#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ - cp(d,s); cp(d,s) -#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ - mx(d,s); mx(d,s) -#elif BLOCK_SIZE == 28 -#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ - cp(d,s); cp(d,s); cp(d,s) -#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ - mx(d,s); mx(d,s); mx(d,s) -#elif BLOCK_SIZE == 32 -#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ - cp(d,s); cp(d,s); cp(d,s); cp(d,s) -#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ - mx(d,s); mx(d,s); mx(d,s); mx(d,s) -#else - -#define cpy(d,s) \ -switch(nc) \ -{ case 8: cp(d,s); \ - case 7: cp(d,s); \ - case 6: cp(d,s); \ - case 5: cp(d,s); \ - case 4: cp(d,s); cp(d,s); \ - cp(d,s); cp(d,s); \ -} - -#define mix(d,s) \ -switch(nc) \ -{ case 8: mx(d,s); \ - case 7: mx(d,s); \ - case 6: mx(d,s); \ - case 5: mx(d,s); \ - case 4: mx(d,s); mx(d,s); \ - mx(d,s); mx(d,s); \ -} - -#endif - -/* The following macros implement a single cycle in the key - schedule generation process. The number of cycles needed - for each cx->n_blk and nk value is: - - nk = 4 5 6 7 8 - ----------------------- - cx->n_blk = 4 10 9 8 7 7 - cx->n_blk = 5 14 11 10 9 9 - cx->n_blk = 6 19 15 12 11 11 - cx->n_blk = 7 21 19 16 13 14 - cx->n_blk = 8 29 23 19 17 14 -*/ - -#define ks4(i) \ -{ p ^= ls_box(s,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ - cx->k_sch[4*(i)+4] = p; \ - cx->k_sch[4*(i)+5] = q; \ - cx->k_sch[4*(i)+6] = r; \ - cx->k_sch[4*(i)+7] = s; \ -} - -#define ks5(i) \ -{ p ^= ls_box(t,3) ^ rcon_tab[i]; q ^= p; \ - r ^= q; s ^= r; t ^= s; \ - cx->k_sch[5*(i)+ 5] = p; \ - cx->k_sch[5*(i)+ 6] = q; \ - cx->k_sch[5*(i)+ 7] = r; \ - cx->k_sch[5*(i)+ 8] = s; \ - cx->k_sch[5*(i)+ 9] = t; \ -} - -#define ks6(i) \ -{ p ^= ls_box(u,3) ^ rcon_tab[i]; q ^= p; \ - r ^= q; s ^= r; t ^= s; u ^= t; \ - cx->k_sch[6*(i)+ 6] = p; \ - cx->k_sch[6*(i)+ 7] = q; \ - cx->k_sch[6*(i)+ 8] = r; \ - cx->k_sch[6*(i)+ 9] = s; \ - cx->k_sch[6*(i)+10] = t; \ - cx->k_sch[6*(i)+11] = u; \ -} - -#define ks7(i) \ -{ p ^= ls_box(v,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ - t ^= ls_box(s,0); u ^= t; v ^= u; \ - cx->k_sch[7*(i)+ 7] = p; \ - cx->k_sch[7*(i)+ 8] = q; \ - cx->k_sch[7*(i)+ 9] = r; \ - cx->k_sch[7*(i)+10] = s; \ - cx->k_sch[7*(i)+11] = t; \ - cx->k_sch[7*(i)+12] = u; \ - cx->k_sch[7*(i)+13] = v; \ -} - -#define ks8(i) \ -{ p ^= ls_box(w,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ - t ^= ls_box(s,0); u ^= t; v ^= u; w ^= v; \ - cx->k_sch[8*(i)+ 8] = p; \ - cx->k_sch[8*(i)+ 9] = q; \ - cx->k_sch[8*(i)+10] = r; \ - cx->k_sch[8*(i)+11] = s; \ - cx->k_sch[8*(i)+12] = t; \ - cx->k_sch[8*(i)+13] = u; \ - cx->k_sch[8*(i)+14] = v; \ - cx->k_sch[8*(i)+15] = w; \ -} - -#if defined(ENCRYPTION_KEY_SCHEDULE) - -aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) -{ uint32_t i,p,q,r,s,t,u,v,w; - -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - -#if !defined(BLOCK_SIZE) - if(!cx->n_blk) cx->n_blk = 16; -#else - cx->n_blk = BLOCK_SIZE; -#endif - - cx->n_blk = (cx->n_blk & ~3) | 1; - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - - cx->k_sch[0] = p = word_in(in_key ); - cx->k_sch[1] = q = word_in(in_key + 4); - cx->k_sch[2] = r = word_in(in_key + 8); - cx->k_sch[3] = s = word_in(in_key + 12); - -#if BLOCK_SIZE == 16 && defined(UNROLL) - - switch(klen >> 2) - { - case 4: ks4(0); ks4(1); ks4(2); ks4(3); - ks4(4); ks4(5); ks4(6); ks4(7); - ks4(8); ks4(9); - cx->n_rnd = 10; break; - case 5: cx->k_sch[4] = t = word_in(in_key + 16); - ks5(0); ks5(1); ks5(2); ks5(3); - ks5(4); ks5(5); ks5(6); ks5(7); - ks5(8); - cx->n_rnd = 11; break; - case 6: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - ks6(0); ks6(1); ks6(2); ks6(3); - ks6(4); ks6(5); ks6(6); ks6(7); - cx->n_rnd = 12; break; - case 7: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - ks7(0); ks7(1); ks7(2); ks7(3); - ks7(4); ks7(5); ks7(6); - cx->n_rnd = 13; break; - case 8: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - cx->k_sch[7] = w = word_in(in_key + 28); - ks8(0); ks8(1); ks8(2); ks8(3); - ks8(4); ks8(5); ks8(6); - cx->n_rnd = 14; break; - default:cx->n_rnd = 0; return aes_bad; - } -#else - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - { - uint32_t l = (nc * (cx->n_rnd + 1) - 1) / (klen >> 2); - switch(klen >> 2) - { - case 4: for(i = 0; i < l; ++i) - ks4(i); - break; - case 5: cx->k_sch[4] = t = word_in(in_key + 16); - for(i = 0; i < l; ++i) - ks5(i); - break; - case 6: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - for(i = 0; i < l; ++i) - ks6(i); - break; - case 7: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - for(i = 0; i < l; ++i) - ks7(i); - break; - case 8: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - cx->k_sch[7] = w = word_in(in_key + 28); - for(i = 0; i < l; ++i) - ks8(i); - break; - } - } -#endif - - return aes_good; -} - -#endif - -#if defined(DECRYPTION_KEY_SCHEDULE) - -aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) -{ uint32_t i,p,q,r,s,t,u,v,w; - dec_imvars - -#if !defined(FIXED_TABLES) - if(!tab_init) gen_tabs(); -#endif - -#if !defined(BLOCK_SIZE) - if(!cx->n_blk) cx->n_blk = 16; -#else - cx->n_blk = BLOCK_SIZE; -#endif - - cx->n_blk = (cx->n_blk & ~3) | 2; - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - - cx->k_sch[0] = p = word_in(in_key ); - cx->k_sch[1] = q = word_in(in_key + 4); - cx->k_sch[2] = r = word_in(in_key + 8); - cx->k_sch[3] = s = word_in(in_key + 12); - -#if BLOCK_SIZE == 16 && defined(UNROLL) - - switch(klen >> 2) - { - case 4: ks4(0); ks4(1); ks4(2); ks4(3); - ks4(4); ks4(5); ks4(6); ks4(7); - ks4(8); ks4(9); - cx->n_rnd = 10; break; - case 5: cx->k_sch[4] = t = word_in(in_key + 16); - ks5(0); ks5(1); ks5(2); ks5(3); - ks5(4); ks5(5); ks5(6); ks5(7); - ks5(8); - cx->n_rnd = 11; break; - case 6: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - ks6(0); ks6(1); ks6(2); ks6(3); - ks6(4); ks6(5); ks6(6); ks6(7); - cx->n_rnd = 12; break; - case 7: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - ks7(0); ks7(1); ks7(2); ks7(3); - ks7(4); ks7(5); ks7(6); - cx->n_rnd = 13; break; - case 8: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - cx->k_sch[7] = w = word_in(in_key + 28); - ks8(0); ks8(1); ks8(2); ks8(3); - ks8(4); ks8(5); ks8(6); - cx->n_rnd = 14; break; - default:cx->n_rnd = 0; return aes_bad; - } -#else - cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; - { - uint32_t l = (nc * (cx->n_rnd + 1) - 1) / (klen >> 2); - switch(klen >> 2) - { - case 4: for(i = 0; i < l; ++i) - ks4(i); - break; - case 5: cx->k_sch[4] = t = word_in(in_key + 16); - for(i = 0; i < l; ++i) - ks5(i); - break; - case 6: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - for(i = 0; i < l; ++i) - ks6(i); - break; - case 7: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - for(i = 0; i < l; ++i) - ks7(i); - break; - case 8: cx->k_sch[4] = t = word_in(in_key + 16); - cx->k_sch[5] = u = word_in(in_key + 20); - cx->k_sch[6] = v = word_in(in_key + 24); - cx->k_sch[7] = w = word_in(in_key + 28); - for(i = 0; i < l; ++i) - ks8(i); - break; - } - } -#endif - -#if (DEC_ROUND != NO_TABLES) - for(i = nc; i < nc * cx->n_rnd; ++i) - cx->k_sch[i] = inv_mcol(cx->k_sch[i]); -#endif - - return aes_good; -} - -#endif diff --git a/src/lib/crypto/aes/aesopt.h b/src/lib/crypto/aes/aesopt.h deleted file mode 100644 index 006fbb3eb..000000000 --- a/src/lib/crypto/aes/aesopt.h +++ /dev/null @@ -1,851 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 07/02/2002 - - This file contains the compilation options for AES (Rijndael) and code - that is common across encryption, key scheduling and table generation. - - - OPERATION - - These source code files implement the AES algorithm Rijndael designed by - Joan Daemen and Vincent Rijmen. The version in aes.c is designed for - block and key sizes of 128, 192 and 256 bits (16, 24 and 32 bytes) while - that in aespp.c provides for block and keys sizes of 128, 160, 192, 224 - and 256 bits (16, 20, 24, 28 and 32 bytes). This file is a common header - file for these two implementations and for aesref.c, which is a reference - implementation. - - This version is designed for flexibility and speed using operations on - 32-bit words rather than operations on bytes. It provides aes_both fixed - and dynamic block and key lengths and can also run with either big or - little endian internal byte order (see aes.h). It inputs block and key - lengths in bytes with the legal values being 16, 24 and 32 for aes.c and - 16, 20, 24, 28 and 32 for aespp.c - - THE CIPHER INTERFACE - - uint8_t (an unsigned 8-bit type) - uint32_t (an unsigned 32-bit type) - aes_fret (a signed 16 bit type for function return values) - aes_good (value != 0, a good return) - aes_bad (value == 0, an error return) - struct aes_ctx (structure for the cipher encryption context) - struct aes_ctx (structure for the cipher decryption context) - aes_rval the function return type (aes_fret if not DLL) - - C subroutine calls: - - aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); - aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); - aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); - - aes_rval aes_dec_len(unsigned int blen, aes_ctx cx[1]); - aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); - aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); - - IMPORTANT NOTE: If you are using this C interface and your compiler does - not set the memory used for objects to zero before use, you will need to - ensure that cx.s_flg is set to zero before using these subroutine calls. - - C++ aes class subroutines: - - class AESclass for encryption - class AESclass for decryption - - aes_rval len(unsigned int blen = 16); - aes_rval key(const unsigned char in_key[], unsigned int klen); - aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); - - aes_rval len(unsigned int blen = 16); - aes_rval key(const unsigned char in_key[], unsigned int klen); - aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); - - The block length inputs to set_block and set_key are in numbers of - BYTES, not bits. The calls to subroutines must be made in the above - order but multiple calls can be made without repeating earlier calls - if their parameters have not changed. If the cipher block length is - variable but set_blk has not been called before cipher operations a - value of 16 is assumed (that is, the AES block size). In contrast to - earlier versions the block and key length parameters are now checked - for correctness and the encryption and decryption routines check to - ensure that an appropriate key has been set before they are called. - - COMPILATION - - The files used to provide AES (Rijndael) are - - a. aes.h for the definitions needed for use in C. - b. aescpp.h for the definitions needed for use in C++. - c. aesopt.h for setting compilation options (also includes common - code). - d. aescrypt.c for encryption and decrytpion, or - e. aescrypt.asm for encryption and decryption using assembler code. - f. aeskey.c for key scheduling. - g. aestab.c for table loading or generation. - h. uitypes.h for defining fixed length unsigned integers. - - The assembler code uses the NASM assembler. The above files provice - block and key lengths of 16, 24 and 32 bytes (128, 192 and 256 bits). - If aescrypp.c and aeskeypp.c are used instead of aescrypt.c and - aeskey.c respectively, the block and key lengths can then be 16, 20, - 24, 28 or 32 bytes. However this code has not been optimised to the - same extent and is hence slower (esepcially for the AES block size - of 16 bytes). - - To compile AES (Rijndael) for use in C code use aes.h and exclude - the AES_DLL define in aes.h - - To compile AES (Rijndael) for use in in C++ code use aescpp.h and - exclude the AES_DLL define in aes.h - - To compile AES (Rijndael) in C as a Dynamic Link Library DLL) use - aes.h, include the AES_DLL define and compile the DLL. If using - the test files to test the DLL, exclude aes.c from the test build - project and compile it with the same defines as used for the DLL - (ensure that the DLL path is correct) - - CONFIGURATION OPTIONS (here and in aes.h) - - a. define BLOCK_SIZE in aes.h to set the cipher block size (16, 24 - or 32 for the standard code, or 16, 20, 24, 28 or 32 for the - extended code) or leave this undefined for dynamically variable - block size (this will result in much slower code). - b. set AES_DLL in aes.h if AES (Rijndael) is to be compiled as a DLL - c. You may need to set PLATFORM_BYTE_ORDER to define the byte order. - d. If you want the code to run in a specific internal byte order, then - INTERNAL_BYTE_ORDER must be set accordingly. - e. set other configuration options decribed below. -*/ - -#ifndef _AESOPT_H -#define _AESOPT_H - -/* START OF CONFIGURATION OPTIONS - - USE OF DEFINES - - Later in this section there are a number of defines that control - the operation of the code. In each section, the purpose of each - define is explained so that the relevant form can be included or - excluded by setting either 1's or 0's respectively on the branches - of the related #if clauses. -*/ - -#include "autoconf.h" - -/* 1. PLATFORM SPECIFIC INCLUDES */ - -#if /* defined(__GNUC__) || */ defined(__GNU_LIBRARY__) -# include -# include -#elif defined(__CRYPTLIB__) -# if defined( INC_ALL ) -# include "crypt.h" -# elif defined( INC_CHILD ) -# include "../crypt.h" -# else -# include "crypt.h" -# endif -# if defined(DATA_LITTLEENDIAN) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -# else -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -# endif -#elif defined(_MSC_VER) -# include -#elif defined(__m68k__) && defined(__palmos__) -# include /* defines BIG_ENDIAN */ -#elif defined(_MIPSEB) -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -#elif defined(_MIPSEL) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -#elif defined(_WIN32) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -#elif !defined(_WIN32) -# include -# if defined(HAVE_ENDIAN_H) -# include -# elif defined(HAVE_MACHINE_ENDIAN_H) -# include -# else -# include -# endif -#endif - -/* 2. BYTE ORDER IN 32-BIT WORDS - - To obtain the highest speed on processors with 32-bit words, this code - needs to determine the order in which bytes are packed into such words. - The following block of code is an attempt to capture the most obvious - ways in which various environemnts specify heir endian definitions. It - may well fail, in which case the definitions will need to be set by - editing at the points marked **** EDIT HERE IF NECESSARY **** below. -*/ -#define AES_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ -#define AES_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ - -#if !defined(PLATFORM_BYTE_ORDER) -#if defined(LITTLE_ENDIAN) || defined(BIG_ENDIAN) -# if defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) -# if defined(BYTE_ORDER) -# if (BYTE_ORDER == LITTLE_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -# elif (BYTE_ORDER == BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -# endif -# endif -# elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -# elif !defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -# endif -#elif defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN) -# if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) -# if defined(_BYTE_ORDER) -# if (_BYTE_ORDER == _LITTLE_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -# elif (_BYTE_ORDER == _BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -# endif -# endif -# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -# elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) -# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -# endif -#elif 0 /* **** EDIT HERE IF NECESSARY **** */ -#define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -#elif 0 /* **** EDIT HERE IF NECESSARY **** */ -#define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN -#elif 1 -#define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN -#define UNKNOWN_BYTE_ORDER /* we're guessing */ -#endif -#endif - -/* 3. ASSEMBLER SUPPORT - - If the assembler code is used for encryption and decryption this file only - provides key scheduling so the following defines are used -*/ -#ifdef AES_ASM -#define ENCRYPTION_KEY_SCHEDULE -#define DECRYPTION_KEY_SCHEDULE -#endif - -/* 4. FUNCTIONS REQUIRED - - This implementation provides five main subroutines which provide for - setting block length, setting encryption and decryption keys and for - encryption and decryption. When the assembler code is not being used - the following definition blocks allow the selection of the routines - that are to be included in the compilation. -*/ -#if 1 -#ifndef AES_ASM -#define SET_BLOCK_LENGTH -#endif -#endif - -#if 1 -#ifndef AES_ASM -#define ENCRYPTION_KEY_SCHEDULE -#endif -#endif - -#if 1 -#ifndef AES_ASM -#define DECRYPTION_KEY_SCHEDULE -#endif -#endif - -#if 1 -#ifndef AES_ASM -#define ENCRYPTION -#endif -#endif - -#if 1 -#ifndef AES_ASM -#define DECRYPTION -#endif -#endif - -/* 5. BYTE ORDER WITHIN 32 BIT WORDS - - The fundamental data processing units in Rijndael are 8-bit bytes. The - input, output and key input are all enumerated arrays of bytes in which - bytes are numbered starting at zero and increasing to one less than the - number of bytes in the array in question. This enumeration is only used - for naming bytes and does not imply any adjacency or order relationship - from one byte to another. When these inputs and outputs are considered - as bit sequences, bits 8*n to 8*n+7 of the bit sequence are mapped to - byte[n] with bit 8n+i in the sequence mapped to bit 7-i within the byte. - In this implementation bits are numbered from 0 to 7 starting at the - numerically least significant end of each byte (bit n represents 2^n). - - However, Rijndael can be implemented more efficiently using 32-bit - words by packing bytes into words so that bytes 4*n to 4*n+3 are placed - into word[n]. While in principle these bytes can be assembled into words - in any positions, this implementation only supports the two formats in - which bytes in adjacent positions within words also have adjacent byte - numbers. This order is called big-endian if the lowest numbered bytes - in words have the highest numeric significance and little-endian if the - opposite applies. - - This code can work in either order irrespective of the order used by the - machine on which it runs. Normally the internal byte order will be set - to the order of the processor on which the code is to be run but this - define can be used to reverse this in special situations -*/ -#if 1 -#define INTERNAL_BYTE_ORDER PLATFORM_BYTE_ORDER -#elif defined(AES_LITTLE_ENDIAN) -#define INTERNAL_BYTE_ORDER AES_LITTLE_ENDIAN -#elif defined(AES_BIG_ENDIAN) -#define INTERNAL_BYTE_ORDER AES_BIG_ENDIAN -#endif - -/* 6. FAST INPUT/OUTPUT OPERATIONS. - - On some machines it is possible to improve speed by transferring the - bytes in the input and output arrays to and from the internal 32-bit - variables by addressing these arrays as if they are arrays of 32-bit - words. On some machines this will always be possible but there may - be a large performance penalty if the byte arrays are not aligned on - the normal word boundaries. On other machines this technique will - lead to memory access errors when such 32-bit word accesses are not - properly aligned. The option SAFE_IO avoids such problems but will - often be slower on those machines that support misaligned access - (especially so if care is taken to align the input and output byte - arrays on 32-bit word boundaries). If SAFE_IO is not defined it is - assumed that access to byte arrays as if they are arrays of 32-bit - words will not cause problems when such accesses are misaligned. -*/ -#if 1 -#define SAFE_IO -#endif - -/* - * If PLATFORM_BYTE_ORDER does not match the actual machine byte - * order, the fast word-access code will cause incorrect results. - * Therefore, SAFE_IO is required when the byte order is unknown. - */ -#if !defined(SAFE_IO) && defined(UNKNOWN_BYTE_ORDER) -# error "SAFE_IO must be defined if machine byte order is unknown." -#endif - -/* 7. LOOP UNROLLING - - The code for encryption and decrytpion cycles through a number of rounds - that can be implemented either in a loop or by expanding the code into a - long sequence of instructions, the latter producing a larger program but - one that will often be much faster. The latter is called loop unrolling. - There are also potential speed advantages in expanding two iterations in - a loop with half the number of iterations, which is called partial loop - unrolling. The following options allow partial or full loop unrolling - to be set independently for encryption and decryption -*/ -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) -#define ENC_UNROLL FULL -#elif 0 -#define ENC_UNROLL PARTIAL -#else -#define ENC_UNROLL NONE -#endif - -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) -#define DEC_UNROLL FULL -#elif 0 -#define DEC_UNROLL PARTIAL -#else -#define DEC_UNROLL NONE -#endif - -/* 8. FIXED OR DYNAMIC TABLES - - When this section is included the tables used by the code are compiled - statically into the binary file. Otherwise they are computed once when - the code is first used. -*/ -#if 1 -#define FIXED_TABLES -#endif - -/* 9. FAST FINITE FIELD OPERATIONS - - If this section is included, tables are used to provide faster finite - field arithmetic (this has no effect if FIXED_TABLES is defined). -*/ -#if 1 -#define FF_TABLES -#endif - -/* 10. INTERNAL STATE VARIABLE FORMAT - - The internal state of Rijndael is stored in a number of local 32-bit - word varaibles which can be defined either as an array or as individual - names variables. Include this section if you want to store these local - varaibles in arrays. Otherwise individual local variables will be used. -*/ -#if 1 -#define ARRAYS -#endif - -/* In this implementation the columns of the state array are each held in - 32-bit words. The state array can be held in various ways: in an array - of words, in a number of individual word variables or in a number of - processor registers. The following define maps a variable name x and - a column number c to the way the state array variable is to be held. - The first define below maps the state into an array x[c] whereas the - second form maps the state into a number of individual variables x0, - x1, etc. Another form could map individual state colums to machine - register names. -*/ - -#if defined(ARRAYS) -#define s(x,c) x[c] -#else -#define s(x,c) x##c -#endif - -/* 11. VARIABLE BLOCK SIZE SPEED - - This section is only relevant if you wish to use the variable block - length feature of the code. Include this section if you place more - emphasis on speed rather than code size. -*/ -#if 1 -#define FAST_VARIABLE -#endif - -/* 12. INTERNAL TABLE CONFIGURATION - - This cipher proceeds by repeating in a number of cycles known as 'rounds' - which are implemented by a round function which can optionally be speeded - up using tables. The basic tables are each 256 32-bit words, with either - one or four tables being required for each round function depending on - how much speed is required. The encryption and decryption round functions - are different and the last encryption and decrytpion round functions are - different again making four different round functions in all. - - This means that: - 1. Normal encryption and decryption rounds can each use either 0, 1 - or 4 tables and table spaces of 0, 1024 or 4096 bytes each. - 2. The last encryption and decryption rounds can also use either 0, 1 - or 4 tables and table spaces of 0, 1024 or 4096 bytes each. - - Include or exclude the appropriate definitions below to set the number - of tables used by this implementation. -*/ - -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the normal encryption round */ -#define ENC_ROUND FOUR_TABLES -#elif 0 -#define ENC_ROUND ONE_TABLE -#else -#define ENC_ROUND NO_TABLES -#endif - -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the last encryption round */ -#define LAST_ENC_ROUND FOUR_TABLES -#elif 0 -#define LAST_ENC_ROUND ONE_TABLE -#else -#define LAST_ENC_ROUND NO_TABLES -#endif - -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the normal decryption round */ -#define DEC_ROUND FOUR_TABLES -#elif 0 -#define DEC_ROUND ONE_TABLE -#else -#define DEC_ROUND NO_TABLES -#endif - -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the last decryption round */ -#define LAST_DEC_ROUND FOUR_TABLES -#elif 0 -#define LAST_DEC_ROUND ONE_TABLE -#else -#define LAST_DEC_ROUND NO_TABLES -#endif - -/* The decryption key schedule can be speeded up with tables in the same - way that the round functions can. Include or exclude the following - defines to set this requirement. -*/ -#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) -#define KEY_SCHED FOUR_TABLES -#elif 0 -#define KEY_SCHED ONE_TABLE -#else -#define KEY_SCHED NO_TABLES -#endif - -/* END OF CONFIGURATION OPTIONS */ - -#define NO_TABLES 0 /* DO NOT CHANGE */ -#define ONE_TABLE 1 /* DO NOT CHANGE */ -#define FOUR_TABLES 4 /* DO NOT CHANGE */ -#define NONE 0 /* DO NOT CHANGE */ -#define PARTIAL 1 /* DO NOT CHANGE */ -#define FULL 2 /* DO NOT CHANGE */ - -#if defined(BLOCK_SIZE) && ((BLOCK_SIZE & 3) || BLOCK_SIZE < 16 || BLOCK_SIZE > 32) -#error An illegal block size has been specified. -#endif - -#if !defined(BLOCK_SIZE) -#define RC_LENGTH 29 -#else -#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11) -#endif - -/* Disable at least some poor combinations of options */ - -#if ENC_ROUND == NO_TABLES && LAST_ENC_ROUND != NO_TABLES -#undef LAST_ENC_ROUND -#define LAST_ENC_ROUND NO_TABLES -#elif ENC_ROUND == ONE_TABLE && LAST_ENC_ROUND == FOUR_TABLES -#undef LAST_ENC_ROUND -#define LAST_ENC_ROUND ONE_TABLE -#endif - -#if ENC_ROUND == NO_TABLES && ENC_UNROLL != NONE -#undef ENC_UNROLL -#define ENC_UNROLL NONE -#endif - -#if DEC_ROUND == NO_TABLES && LAST_DEC_ROUND != NO_TABLES -#undef LAST_DEC_ROUND -#define LAST_DEC_ROUND NO_TABLES -#elif DEC_ROUND == ONE_TABLE && LAST_DEC_ROUND == FOUR_TABLES -#undef LAST_DEC_ROUND -#define LAST_DEC_ROUND ONE_TABLE -#endif - -#if DEC_ROUND == NO_TABLES && DEC_UNROLL != NONE -#undef DEC_UNROLL -#define DEC_UNROLL NONE -#endif - -#include "aes.h" - - /* - upr(x,n): rotates bytes within words by n positions, moving bytes to - higher index positions with wrap around into low positions - ups(x,n): moves bytes by n positions to higher index positions in - words but without wrap around - bval(x,n): extracts a byte from a word - */ - -#if (INTERNAL_BYTE_ORDER == AES_LITTLE_ENDIAN) -#if defined(_MSC_VER) -#define upr(x,n) _lrotl((x), 8 * (n)) -#else -#define upr(x,n) (((x) << (8 * (n))) | ((x) >> (32 - 8 * (n)))) -#endif -#define ups(x,n) ((x) << (8 * (n))) -#define bval(x,n) ((uint8_t)((x) >> (8 * (n)))) -#define bytes2word(b0, b1, b2, b3) \ - (((uint32_t)(b3) << 24) | ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | (b0)) -#endif - -#if (INTERNAL_BYTE_ORDER == AES_BIG_ENDIAN) -#define upr(x,n) (((x) >> (8 * (n))) | ((x) << (32 - 8 * (n)))) -#define ups(x,n) ((x) >> (8 * (n)))) -#define bval(x,n) ((uint8_t)((x) >> (24 - 8 * (n)))) -#define bytes2word(b0, b1, b2, b3) \ - (((uint32_t)(b0) << 24) | ((uint32_t)(b1) << 16) | ((uint32_t)(b2) << 8) | (b3)) -#endif - -#if defined(SAFE_IO) - -#define word_in(x) bytes2word((x)[0], (x)[1], (x)[2], (x)[3]) -#define word_out(x,v) { (x)[0] = bval(v,0); (x)[1] = bval(v,1); \ - (x)[2] = bval(v,2); (x)[3] = bval(v,3); } - -#elif (INTERNAL_BYTE_ORDER == PLATFORM_BYTE_ORDER) - -#define word_in(x) *(uint32_t*)(x) -#define word_out(x,v) *(uint32_t*)(x) = (v) - -#else - -#if !defined(bswap_32) -#if !defined(_MSC_VER) -#define _lrotl(x,n) (((x) << n) | ((x) >> (32 - n))) -#endif -#define bswap_32(x) ((_lrotl((x),8) & 0x00ff00ff) | (_lrotl((x),24) & 0xff00ff00)) -#endif - -#define word_in(x) bswap_32(*(uint32_t*)(x)) -#define word_out(x,v) *(uint32_t*)(x) = bswap_32(v) - -#endif - -/* the finite field modular polynomial and elements */ - -#define WPOLY 0x011b -#define BPOLY 0x1b - -/* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ - -#define m1 0x80808080 -#define m2 0x7f7f7f7f -#define FFmulX(x) ((((x) & m2) << 1) ^ ((((x) & m1) >> 7) * BPOLY)) - -/* The following defines provide alternative definitions of FFmulX that might - give improved performance if a fast 32-bit multiply is not available. Note - that a temporary variable u needs to be defined where FFmulX is used. - -#define FFmulX(x) (u = (x) & m1, u |= (u >> 1), ((x) & m2) << 1) ^ ((u >> 3) | (u >> 6)) -#define m4 (0x01010101 * BPOLY) -#define FFmulX(x) (u = (x) & m1, ((x) & m2) << 1) ^ ((u - (u >> 7)) & m4) -*/ - -/* Work out which tables are needed for the different options */ - -#ifdef AES_ASM -#ifdef ENC_ROUND -#undef ENC_ROUND -#endif -#define ENC_ROUND FOUR_TABLES -#ifdef LAST_ENC_ROUND -#undef LAST_ENC_ROUND -#endif -#define LAST_ENC_ROUND FOUR_TABLES -#ifdef DEC_ROUND -#undef DEC_ROUND -#endif -#define DEC_ROUND FOUR_TABLES -#ifdef LAST_DEC_ROUND -#undef LAST_DEC_ROUND -#endif -#define LAST_DEC_ROUND FOUR_TABLES -#ifdef KEY_SCHED -#undef KEY_SCHED -#define KEY_SCHED FOUR_TABLES -#endif -#endif - -#if defined(ENCRYPTION) || defined(AES_ASM) -#if ENC_ROUND == ONE_TABLE -#define FT1_SET -#elif ENC_ROUND == FOUR_TABLES -#define FT4_SET -#else -#define SBX_SET -#endif -#if LAST_ENC_ROUND == ONE_TABLE -#define FL1_SET -#elif LAST_ENC_ROUND == FOUR_TABLES -#define FL4_SET -#elif !defined(SBX_SET) -#define SBX_SET -#endif -#endif - -#if defined(DECRYPTION) || defined(AES_ASM) -#if DEC_ROUND == ONE_TABLE -#define IT1_SET -#elif DEC_ROUND == FOUR_TABLES -#define IT4_SET -#else -#define ISB_SET -#endif -#if LAST_DEC_ROUND == ONE_TABLE -#define IL1_SET -#elif LAST_DEC_ROUND == FOUR_TABLES -#define IL4_SET -#elif !defined(ISB_SET) -#define ISB_SET -#endif -#endif - -#if defined(ENCRYPTION_KEY_SCHEDULE) || defined(DECRYPTION_KEY_SCHEDULE) -#if KEY_SCHED == ONE_TABLE -#define LS1_SET -#define IM1_SET -#elif KEY_SCHED == FOUR_TABLES -#define LS4_SET -#define IM4_SET -#elif !defined(SBX_SET) -#define SBX_SET -#endif -#endif - -#ifdef FIXED_TABLES -#define prefx extern const -#else -#define prefx extern -extern uint8_t tab_init; -void gen_tabs(void); -#endif - -prefx uint32_t rcon_tab[29]; - -#ifdef SBX_SET -prefx uint8_t s_box[256]; -#endif - -#ifdef ISB_SET -prefx uint8_t inv_s_box[256]; -#endif - -#ifdef FT1_SET -prefx uint32_t ft_tab[256]; -#endif - -#ifdef FT4_SET -prefx uint32_t ft_tab[4][256]; -#endif - -#ifdef FL1_SET -prefx uint32_t fl_tab[256]; -#endif - -#ifdef FL4_SET -prefx uint32_t fl_tab[4][256]; -#endif - -#ifdef IT1_SET -prefx uint32_t it_tab[256]; -#endif - -#ifdef IT4_SET -prefx uint32_t it_tab[4][256]; -#endif - -#ifdef IL1_SET -prefx uint32_t il_tab[256]; -#endif - -#ifdef IL4_SET -prefx uint32_t il_tab[4][256]; -#endif - -#ifdef LS1_SET -#ifdef FL1_SET -#undef LS1_SET -#else -prefx uint32_t ls_tab[256]; -#endif -#endif - -#ifdef LS4_SET -#ifdef FL4_SET -#undef LS4_SET -#else -prefx uint32_t ls_tab[4][256]; -#endif -#endif - -#ifdef IM1_SET -prefx uint32_t im_tab[256]; -#endif - -#ifdef IM4_SET -prefx uint32_t im_tab[4][256]; -#endif - -/* Set the number of columns in nc. Note that it is important */ -/* that nc is a constant which is known at compile time if the */ -/* highest speed version of the code is needed */ - -#if defined(BLOCK_SIZE) -#define nc (BLOCK_SIZE >> 2) -#else -#define nc (cx->n_blk >> 2) -#endif - -/* generic definitions of Rijndael macros that use of tables */ - -#define no_table(x,box,vf,rf,c) bytes2word( \ - box[bval(vf(x,0,c),rf(0,c))], \ - box[bval(vf(x,1,c),rf(1,c))], \ - box[bval(vf(x,2,c),rf(2,c))], \ - box[bval(vf(x,3,c),rf(3,c))]) - -#define one_table(x,op,tab,vf,rf,c) \ - ( tab[bval(vf(x,0,c),rf(0,c))] \ - ^ op(tab[bval(vf(x,1,c),rf(1,c))],1) \ - ^ op(tab[bval(vf(x,2,c),rf(2,c))],2) \ - ^ op(tab[bval(vf(x,3,c),rf(3,c))],3)) - -#define four_tables(x,tab,vf,rf,c) \ - ( tab[0][bval(vf(x,0,c),rf(0,c))] \ - ^ tab[1][bval(vf(x,1,c),rf(1,c))] \ - ^ tab[2][bval(vf(x,2,c),rf(2,c))] \ - ^ tab[3][bval(vf(x,3,c),rf(3,c))]) - -#define vf1(x,r,c) (x) -#define rf1(r,c) (r) -#define rf2(r,c) ((r-c)&3) - -/* perform forward and inverse column mix operation on four bytes in long word x in */ -/* parallel. NOTE: x must be a simple variable, NOT an expression in these macros. */ - -#define dec_fmvars -#if defined(FM4_SET) /* not currently used */ -#define fwd_mcol(x) four_tables(x,fm_tab,vf1,rf1,0) -#elif defined(FM1_SET) /* not currently used */ -#define fwd_mcol(x) one_table(x,upr,fm_tab,vf1,rf1,0) -#else -#undef dec_fmvars -#define dec_fmvars uint32_t f1, f2; -#define fwd_mcol(x) (f1 = (x), f2 = FFmulX(f1), f2 ^ upr(f1 ^ f2, 3) ^ upr(f1, 2) ^ upr(f1, 1)) -#endif - -#define dec_imvars -#if defined(IM4_SET) -#define inv_mcol(x) four_tables(x,im_tab,vf1,rf1,0) -#elif defined(IM1_SET) -#define inv_mcol(x) one_table(x,upr,im_tab,vf1,rf1,0) -#else -#undef dec_imvars -#define dec_imvars uint32_t f2, f4, f8, f9; -#define inv_mcol(x) \ - (f9 = (x), f2 = FFmulX(f9), f4 = FFmulX(f2), f8 = FFmulX(f4), f9 ^= f8, \ - f2 ^= f4 ^ f8 ^ upr(f2 ^ f9,3) ^ upr(f4 ^ f9,2) ^ upr(f9,1)) -#endif - -#if defined(FL4_SET) -#define ls_box(x,c) four_tables(x,fl_tab,vf1,rf2,c) -#elif defined(LS4_SET) -#define ls_box(x,c) four_tables(x,ls_tab,vf1,rf2,c) -#elif defined(FL1_SET) -#define ls_box(x,c) one_table(x,upr,fl_tab,vf1,rf2,c) -#elif defined(LS1_SET) -#define ls_box(x,c) one_table(x,upr,ls_tab,vf1,rf2,c) -#else -#define ls_box(x,c) no_table(x,s_box,vf1,rf2,c) -#endif - -#endif diff --git a/src/lib/crypto/aes/aessrc.url b/src/lib/crypto/aes/aessrc.url deleted file mode 100644 index 0758737db..000000000 --- a/src/lib/crypto/aes/aessrc.url +++ /dev/null @@ -1 +0,0 @@ -http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm diff --git a/src/lib/crypto/aes/aestab.c b/src/lib/crypto/aes/aestab.c deleted file mode 100644 index 7a5d69f7d..000000000 --- a/src/lib/crypto/aes/aestab.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 07/02/2002 -*/ - -#include "aesopt.h" - -#if defined(FIXED_TABLES) || !defined(FF_TABLES) - -/* finite field arithmetic operations */ - -#define f2(x) ((x<<1) ^ (((x>>7) & 1) * WPOLY)) -#define f4(x) ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY)) -#define f8(x) ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \ - ^ (((x>>5) & 4) * WPOLY)) -#define f3(x) (f2(x) ^ x) -#define f9(x) (f8(x) ^ x) -#define fb(x) (f8(x) ^ f2(x) ^ x) -#define fd(x) (f8(x) ^ f4(x) ^ x) -#define fe(x) (f8(x) ^ f4(x) ^ f2(x)) - -#endif - -#if defined(FIXED_TABLES) - -#define sb_data(w) \ - w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\ - w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\ - w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\ - w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\ - w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\ - w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\ - w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\ - w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\ - w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\ - w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\ - w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\ - w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\ - w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\ - w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\ - w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\ - w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\ - w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\ - w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\ - w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\ - w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\ - w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\ - w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\ - w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\ - w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\ - w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\ - w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\ - w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\ - w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\ - w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\ - w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\ - w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\ - w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) - -#define isb_data(w) \ - w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\ - w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\ - w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\ - w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\ - w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\ - w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\ - w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\ - w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\ - w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\ - w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\ - w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\ - w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\ - w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\ - w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\ - w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\ - w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\ - w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\ - w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\ - w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\ - w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\ - w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\ - w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\ - w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\ - w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\ - w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\ - w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\ - w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\ - w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\ - w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\ - w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\ - w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\ - w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d), - -#define mm_data(w) \ - w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\ - w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\ - w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\ - w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\ - w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\ - w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\ - w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\ - w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\ - w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\ - w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\ - w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\ - w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\ - w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\ - w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\ - w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\ - w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\ - w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\ - w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\ - w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\ - w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\ - w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\ - w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\ - w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\ - w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\ - w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\ - w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\ - w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\ - w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\ - w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\ - w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\ - w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\ - w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) - -#define h0(x) (x) - -/* These defines are used to ensure tables are generated in the - right format depending on the internal byte order required -*/ - -#define w0(p) bytes2word(p, 0, 0, 0) -#define w1(p) bytes2word(0, p, 0, 0) -#define w2(p) bytes2word(0, 0, p, 0) -#define w3(p) bytes2word(0, 0, 0, p) - -/* Number of elements required in this table for different - block and key lengths is: - - Rcon Table key length (bytes) - Length 16 20 24 28 32 - --------------------- - block 16 | 10 9 8 7 7 - length 20 | 14 11 10 9 9 - (bytes) 24 | 19 15 12 11 11 - 28 | 24 19 16 13 13 - 32 | 29 23 19 17 14 - - this table can be a table of bytes if the key schedule - code is adjusted accordingly -*/ - -#define u0(p) bytes2word(f2(p), p, p, f3(p)) -#define u1(p) bytes2word(f3(p), f2(p), p, p) -#define u2(p) bytes2word(p, f3(p), f2(p), p) -#define u3(p) bytes2word(p, p, f3(p), f2(p)) - -#define v0(p) bytes2word(fe(p), f9(p), fd(p), fb(p)) -#define v1(p) bytes2word(fb(p), fe(p), f9(p), fd(p)) -#define v2(p) bytes2word(fd(p), fb(p), fe(p), f9(p)) -#define v3(p) bytes2word(f9(p), fd(p), fb(p), fe(p)) - -const uint32_t rcon_tab[29] = -{ - w0(0x01), w0(0x02), w0(0x04), w0(0x08), - w0(0x10), w0(0x20), w0(0x40), w0(0x80), - w0(0x1b), w0(0x36), w0(0x6c), w0(0xd8), - w0(0xab), w0(0x4d), w0(0x9a), w0(0x2f), - w0(0x5e), w0(0xbc), w0(0x63), w0(0xc6), - w0(0x97), w0(0x35), w0(0x6a), w0(0xd4), - w0(0xb3), w0(0x7d), w0(0xfa), w0(0xef), - w0(0xc5) -}; - -#ifdef SBX_SET -const uint8_t s_box[256] = { sb_data(h0) }; -#endif -#ifdef ISB_SET -const uint8_t inv_s_box[256] = { isb_data(h0) }; -#endif - -#ifdef FT1_SET -const uint32_t ft_tab[256] = { sb_data(u0) }; -#endif -#ifdef FT4_SET -const uint32_t ft_tab[4][256] = - { { sb_data(u0) }, { sb_data(u1) }, { sb_data(u2) }, { sb_data(u3) } }; -#endif - -#ifdef FL1_SET -const uint32_t fl_tab[256] = { sb_data(w0) }; -#endif -#ifdef FL4_SET -const uint32_t fl_tab[4][256] = - { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; -#endif - -#ifdef IT1_SET -const uint32_t it_tab[256] = { isb_data(v0) }; -#endif -#ifdef IT4_SET -const uint32_t it_tab[4][256] = - { { isb_data(v0) }, { isb_data(v1) }, { isb_data(v2) }, { isb_data(v3) } }; -#endif - -#ifdef IL1_SET -const uint32_t il_tab[256] = { isb_data(w0) }; -#endif -#ifdef IL4_SET -const uint32_t il_tab[4][256] = - { { isb_data(w0) }, { isb_data(w1) }, { isb_data(w2) }, { isb_data(w3) } }; -#endif - -#ifdef LS1_SET -const uint32_t ls_tab[256] = { sb_data(w0) }; -#endif -#ifdef LS4_SET -const uint32_t ls_tab[4][256] = - { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; -#endif - -#ifdef IM1_SET -const uint32_t im_tab[256] = { mm_data(v0) }; -#endif -#ifdef IM4_SET -const uint32_t im_tab[4][256] = - { { mm_data(v0) }, { mm_data(v1) }, { mm_data(v2) }, { mm_data(v3) } }; -#endif - -#else /* dynamic table generation */ - -uint8_t tab_init = 0; - -#define const - -uint32_t rcon_tab[RC_LENGTH]; - -#ifdef SBX_SET -uint8_t s_box[256]; -#endif -#ifdef ISB_SET -uint8_t inv_s_box[256]; -#endif - -#ifdef FT1_SET -uint32_t ft_tab[256]; -#endif -#ifdef FT4_SET -uint32_t ft_tab[4][256]; -#endif - -#ifdef FL1_SET -uint32_t fl_tab[256]; -#endif -#ifdef FL4_SET -uint32_t fl_tab[4][256]; -#endif - -#ifdef IT1_SET -uint32_t it_tab[256]; -#endif -#ifdef IT4_SET -uint32_t it_tab[4][256]; -#endif - -#ifdef IL1_SET -uint32_t il_tab[256]; -#endif -#ifdef IL4_SET -uint32_t il_tab[4][256]; -#endif - -#ifdef LS1_SET -uint32_t ls_tab[256]; -#endif -#ifdef LS4_SET -uint32_t ls_tab[4][256]; -#endif - -#ifdef IM1_SET -uint32_t im_tab[256]; -#endif -#ifdef IM4_SET -uint32_t im_tab[4][256]; -#endif - -#if !defined(FF_TABLES) - -/* Generate the tables for the dynamic table option - - It will generally be sensible to use tables to compute finite - field multiplies and inverses but where memory is scarse this - code might sometimes be better. But it only has effect during - initialisation so its pretty unimportant in overall terms. -*/ - -/* return 2 ^ (n - 1) where n is the bit number of the highest bit - set in x with x in the range 1 < x < 0x00000200. This form is - used so that locals within fi can be bytes rather than words -*/ - -static uint8_t hibit(const uint32_t x) -{ uint8_t r = (uint8_t)((x >> 1) | (x >> 2)); - - r |= (r >> 2); - r |= (r >> 4); - return (r + 1) >> 1; -} - -/* return the inverse of the finite field element x */ - -static uint8_t fi(const uint8_t x) -{ uint8_t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0; - - if(x < 2) return x; - - for(;;) - { - if(!n1) return v1; - - while(n2 >= n1) - { - n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2); - } - - if(!n2) return v2; - - while(n1 >= n2) - { - n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1); - } - } -} - -#else - -/* define the finite field multiplies required for Rijndael */ - -#define f2(x) ((x) ? pow[log[x] + 0x19] : 0) -#define f3(x) ((x) ? pow[log[x] + 0x01] : 0) -#define f9(x) ((x) ? pow[log[x] + 0xc7] : 0) -#define fb(x) ((x) ? pow[log[x] + 0x68] : 0) -#define fd(x) ((x) ? pow[log[x] + 0xee] : 0) -#define fe(x) ((x) ? pow[log[x] + 0xdf] : 0) -#define fi(x) ((x) ? pow[255 - log[x]]: 0) - -#endif - -/* The forward and inverse affine transformations used in the S-box */ - -#define fwd_affine(x) \ - (w = (uint32_t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(uint8_t)(w^(w>>8))) - -#define inv_affine(x) \ - (w = (uint32_t)x, w = (w<<1)^(w<<3)^(w<<6), 0x05^(uint8_t)(w^(w>>8))) - -void gen_tabs(void) -{ uint32_t i, w; - -#if defined(FF_TABLES) - - uint8_t pow[512], log[256]; - - /* log and power tables for GF(2^8) finite field with - WPOLY as modular polynomial - the simplest primitive - root is 0x03, used here to generate the tables - */ - - i = 0; w = 1; - do - { - pow[i] = (uint8_t)w; - pow[i + 255] = (uint8_t)w; - log[w] = (uint8_t)i++; - w ^= (w << 1) ^ (w & 0x80 ? WPOLY : 0); - } - while (w != 1); - -#endif - - for(i = 0, w = 1; i < RC_LENGTH; ++i) - { - rcon_tab[i] = bytes2word(w, 0, 0, 0); - w = f2(w); - } - - for(i = 0; i < 256; ++i) - { uint8_t b; - - b = fwd_affine(fi((uint8_t)i)); - w = bytes2word(f2(b), b, b, f3(b)); - -#ifdef SBX_SET - s_box[i] = b; -#endif - -#ifdef FT1_SET /* tables for a normal encryption round */ - ft_tab[i] = w; -#endif -#ifdef FT4_SET - ft_tab[0][i] = w; - ft_tab[1][i] = upr(w,1); - ft_tab[2][i] = upr(w,2); - ft_tab[3][i] = upr(w,3); -#endif - w = bytes2word(b, 0, 0, 0); - -#ifdef FL1_SET /* tables for last encryption round (may also */ - fl_tab[i] = w; /* be used in the key schedule) */ -#endif -#ifdef FL4_SET - fl_tab[0][i] = w; - fl_tab[1][i] = upr(w,1); - fl_tab[2][i] = upr(w,2); - fl_tab[3][i] = upr(w,3); -#endif - -#ifdef LS1_SET /* table for key schedule if fl_tab above is */ - ls_tab[i] = w; /* not of the required form */ -#endif -#ifdef LS4_SET - ls_tab[0][i] = w; - ls_tab[1][i] = upr(w,1); - ls_tab[2][i] = upr(w,2); - ls_tab[3][i] = upr(w,3); -#endif - - b = fi(inv_affine((uint8_t)i)); - w = bytes2word(fe(b), f9(b), fd(b), fb(b)); - -#ifdef IM1_SET /* tables for the inverse mix column operation */ - im_tab[b] = w; -#endif -#ifdef IM4_SET - im_tab[0][b] = w; - im_tab[1][b] = upr(w,1); - im_tab[2][b] = upr(w,2); - im_tab[3][b] = upr(w,3); -#endif - -#ifdef ISB_SET - inv_s_box[i] = b; -#endif -#ifdef IT1_SET /* tables for a normal decryption round */ - it_tab[i] = w; -#endif -#ifdef IT4_SET - it_tab[0][i] = w; - it_tab[1][i] = upr(w,1); - it_tab[2][i] = upr(w,2); - it_tab[3][i] = upr(w,3); -#endif - w = bytes2word(b, 0, 0, 0); -#ifdef IL1_SET /* tables for last decryption round */ - il_tab[i] = w; -#endif -#ifdef IL4_SET - il_tab[0][i] = w; - il_tab[1][i] = upr(w,1); - il_tab[2][i] = upr(w,2); - il_tab[3][i] = upr(w,3); -#endif - } - - tab_init = 1; -} - -#endif diff --git a/src/lib/crypto/aes/deps b/src/lib/crypto/aes/deps deleted file mode 100644 index 4434425fd..000000000 --- a/src/lib/crypto/aes/deps +++ /dev/null @@ -1,20 +0,0 @@ -# -# Generated makefile dependencies follow. -# -aescrypt.so aescrypt.po $(OUTPRE)aescrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h aes.h aescrypt.c aesopt.h \ - uitypes.h -aestab.so aestab.po $(OUTPRE)aestab.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - aes.h aesopt.h aestab.c uitypes.h -aeskey.so aeskey.po $(OUTPRE)aeskey.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - aes.h aeskey.c aesopt.h uitypes.h -aes_s2k.so aes_s2k.po $(OUTPRE)aes_s2k.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../dk/dk.h aes_s2k.c aes_s2k.h diff --git a/src/lib/crypto/aes/expect-vk.txt b/src/lib/crypto/aes/expect-vk.txt deleted file mode 100644 index bbd2c587b..000000000 --- a/src/lib/crypto/aes/expect-vk.txt +++ /dev/null @@ -1,1548 +0,0 @@ - -KEYSIZE=128 - -PT=00000000000000000000000000000000 - -I=1 -KEY=80000000000000000000000000000000 -CT=0EDD33D3C621E546455BD8BA1418BEC8 - -I=2 -KEY=40000000000000000000000000000000 -CT=C0CC0C5DA5BD63ACD44A80774FAD5222 - -I=3 -KEY=20000000000000000000000000000000 -CT=2F0B4B71BC77851B9CA56D42EB8FF080 - -I=4 -KEY=10000000000000000000000000000000 -CT=6B1E2FFFE8A114009D8FE22F6DB5F876 - -I=5 -KEY=08000000000000000000000000000000 -CT=9AA042C315F94CBB97B62202F83358F5 - -I=6 -KEY=04000000000000000000000000000000 -CT=DBE01DE67E346A800C4C4B4880311DE4 - -I=7 -KEY=02000000000000000000000000000000 -CT=C117D2238D53836ACD92DDCDB85D6A21 - -I=8 -KEY=01000000000000000000000000000000 -CT=DC0ED85DF9611ABB7249CDD168C5467E - -I=9 -KEY=00800000000000000000000000000000 -CT=807D678FFF1F56FA92DE3381904842F2 - -I=10 -KEY=00400000000000000000000000000000 -CT=0E53B3FCAD8E4B130EF73AEB957FB402 - -I=11 -KEY=00200000000000000000000000000000 -CT=969FFD3B7C35439417E7BDE923035D65 - -I=12 -KEY=00100000000000000000000000000000 -CT=A99B512C19CA56070491166A1503BF15 - -I=13 -KEY=00080000000000000000000000000000 -CT=6E9985252126EE344D26AE369D2327E3 - -I=14 -KEY=00040000000000000000000000000000 -CT=B85F4809F904C275491FCDCD1610387E - -I=15 -KEY=00020000000000000000000000000000 -CT=ED365B8D7D20C1F5D53FB94DD211DF7B - -I=16 -KEY=00010000000000000000000000000000 -CT=B3A575E86A8DB4A7135D604C43304896 - -I=17 -KEY=00008000000000000000000000000000 -CT=89704BCB8E69F846259EB0ACCBC7F8A2 - -I=18 -KEY=00004000000000000000000000000000 -CT=C56EE7C92197861F10D7A92B90882055 - -I=19 -KEY=00002000000000000000000000000000 -CT=92F296F6846E0EAF9422A5A24A08B069 - -I=20 -KEY=00001000000000000000000000000000 -CT=E67E32BB8F11DEB8699318BEE9E91A60 - -I=21 -KEY=00000800000000000000000000000000 -CT=B08EEF85EAF626DD91B65C4C3A97D92B - -I=22 -KEY=00000400000000000000000000000000 -CT=661083A6ADDCE79BB4E0859AB5538013 - -I=23 -KEY=00000200000000000000000000000000 -CT=55DFE2941E0EB10AFC0B333BD34DE1FE - -I=24 -KEY=00000100000000000000000000000000 -CT=6BFE5945E715C9662609770F8846087A - -I=25 -KEY=00000080000000000000000000000000 -CT=79848E9C30C2F8CDA8B325F7FED2B139 - -I=26 -KEY=00000040000000000000000000000000 -CT=7A713A53B99FEF34AC04DEEF80965BD0 - -I=27 -KEY=00000020000000000000000000000000 -CT=18144A2B46620D32C3C32CE52D49257F - -I=28 -KEY=00000010000000000000000000000000 -CT=872E827C70887C80749F7B8BB1847C7E - -I=29 -KEY=00000008000000000000000000000000 -CT=6B86C6A4FE6A60C59B1A3102F8DE49F3 - -I=30 -KEY=00000004000000000000000000000000 -CT=9848BB3DFDF6F532F094679A4C231A20 - -I=31 -KEY=00000002000000000000000000000000 -CT=925AD528E852E329B2091CD3F1C2BCEE - -I=32 -KEY=00000001000000000000000000000000 -CT=80DF436544B0DD596722E46792A40CD8 - -I=33 -KEY=00000000800000000000000000000000 -CT=525DAF18F93E83E1E74BBBDDE4263BBA - -I=34 -KEY=00000000400000000000000000000000 -CT=F65C9D2EE485D24701FFA3313B9D5BE6 - -I=35 -KEY=00000000200000000000000000000000 -CT=E4FC8D8BCA06425BDF94AFA40FCC14BA - -I=36 -KEY=00000000100000000000000000000000 -CT=A53F0A5CA1E4E6440BB975FF320DE6F8 - -I=37 -KEY=00000000080000000000000000000000 -CT=D55313B9394080462E87E02899B553F0 - -I=38 -KEY=00000000040000000000000000000000 -CT=34A71D761F71BCD344384C7F97D27906 - -I=39 -KEY=00000000020000000000000000000000 -CT=233F3D819599612EBC89580245C996A8 - -I=40 -KEY=00000000010000000000000000000000 -CT=B4F1374E5268DBCB676E447529E53F89 - -I=41 -KEY=00000000008000000000000000000000 -CT=0816BD27861D2BA891D1044E39951E96 - -I=42 -KEY=00000000004000000000000000000000 -CT=F3BE9EA3F10C73CA64FDE5DB13A951D1 - -I=43 -KEY=00000000002000000000000000000000 -CT=2448086A8106FBD03048DDF857D3F1C8 - -I=44 -KEY=00000000001000000000000000000000 -CT=670756E65BEC8B68F03D77CDCDCE7B91 - -I=45 -KEY=00000000000800000000000000000000 -CT=EF968CF0D36FD6C6EFFD225F6FB44CA9 - -I=46 -KEY=00000000000400000000000000000000 -CT=2E8767157922E3826DDCEC1B0CC1E105 - -I=47 -KEY=00000000000200000000000000000000 -CT=78CE7EEC670E45A967BAB17E26A1AD36 - -I=48 -KEY=00000000000100000000000000000000 -CT=3C5CEE825655F098F6E81A2F417DA3FB - -I=49 -KEY=00000000000080000000000000000000 -CT=67BFDB431DCE1292200BC6F5207ADB12 - -I=50 -KEY=00000000000040000000000000000000 -CT=7540FD38E447C0779228548747843A6F - -I=51 -KEY=00000000000020000000000000000000 -CT=B85E513301F8A936EA9EC8A21A85B5E6 - -I=52 -KEY=00000000000010000000000000000000 -CT=04C67DBF16C11427D507A455DE2C9BC5 - -I=53 -KEY=00000000000008000000000000000000 -CT=03F75EB8959E55079CFFB4FF149A37B6 - -I=54 -KEY=00000000000004000000000000000000 -CT=74550287F666C63BB9BC7838433434B0 - -I=55 -KEY=00000000000002000000000000000000 -CT=7D537200195EBC3AEFD1EAAB1C385221 - -I=56 -KEY=00000000000001000000000000000000 -CT=CE24E4D40C68A82B535CBD3C8E21652A - -I=57 -KEY=00000000000000800000000000000000 -CT=AB20072405AA8FC40265C6F1F3DC8BC0 - -I=58 -KEY=00000000000000400000000000000000 -CT=6CFD2CF688F566B093F67B9B3839E80A - -I=59 -KEY=00000000000000200000000000000000 -CT=BD95977E6B7239D407A012C5544BF584 - -I=60 -KEY=00000000000000100000000000000000 -CT=DF9C0130AC77E7C72C997F587B46DBE0 - -I=61 -KEY=00000000000000080000000000000000 -CT=E7F1B82CADC53A648798945B34EFEFF2 - -I=62 -KEY=00000000000000040000000000000000 -CT=932C6DBF69255CF13EDCDB72233ACEA3 - -I=63 -KEY=00000000000000020000000000000000 -CT=5C76002BC7206560EFE550C80B8F12CC - -I=64 -KEY=00000000000000010000000000000000 -CT=F6B7BDD1CAEEBAB574683893C4475484 - -I=65 -KEY=00000000000000008000000000000000 -CT=A920E37CC6DC6B31DA8C0169569F5034 - -I=66 -KEY=00000000000000004000000000000000 -CT=919380ECD9C778BC513148B0C28D65FD - -I=67 -KEY=00000000000000002000000000000000 -CT=EE67308DD3F2D9E6C2170755E5784BE1 - -I=68 -KEY=00000000000000001000000000000000 -CT=3CC73E53B85609023A05E149B223AE09 - -I=69 -KEY=00000000000000000800000000000000 -CT=983E8AF7CF05EBB28D71EB841C9406E6 - -I=70 -KEY=00000000000000000400000000000000 -CT=0F3099B2D31FA5299EE5BF43193287FC - -I=71 -KEY=00000000000000000200000000000000 -CT=B763D84F38C27FE6931DCEB6715D4DB6 - -I=72 -KEY=00000000000000000100000000000000 -CT=5AE3C9B0E3CC29C0C61565CD01F8A248 - -I=73 -KEY=00000000000000000080000000000000 -CT=F58083572CD90981958565D48D2DEE25 - -I=74 -KEY=00000000000000000040000000000000 -CT=7E6255EEF8F70C0EF10337AAB1CCCEF8 - -I=75 -KEY=00000000000000000020000000000000 -CT=AAD4BAC34DB22821841CE2F631961902 - -I=76 -KEY=00000000000000000010000000000000 -CT=D7431C0409BB1441BA9C6858DC7D4E81 - -I=77 -KEY=00000000000000000008000000000000 -CT=EF9298C65E339F6E801A59C626456993 - -I=78 -KEY=00000000000000000004000000000000 -CT=53FE29F68FF541ABC3F0EF3350B72F7E - -I=79 -KEY=00000000000000000002000000000000 -CT=F6BBA5C10DB02529E2C2DA3FB582CC14 - -I=80 -KEY=00000000000000000001000000000000 -CT=E4239AA37FC531A386DAD1126FC0E9CD - -I=81 -KEY=00000000000000000000800000000000 -CT=8F7758F857D15BBE7BFD0E416404C365 - -I=82 -KEY=00000000000000000000400000000000 -CT=D273EB57C687BCD1B4EA7218A509E7B8 - -I=83 -KEY=00000000000000000000200000000000 -CT=65D64F8D76E8B3423FA25C4EB58A210A - -I=84 -KEY=00000000000000000000100000000000 -CT=623D802B4EC450D66A16625702FCDBE0 - -I=85 -KEY=00000000000000000000080000000000 -CT=7496460CB28E5791BAEAF9B68FB00022 - -I=86 -KEY=00000000000000000000040000000000 -CT=34EA600F18BB0694B41681A49D510C1D - -I=87 -KEY=00000000000000000000020000000000 -CT=5F8FF0D47D5766D29B5D6E8F46423BD8 - -I=88 -KEY=00000000000000000000010000000000 -CT=225F9286C5928BF09F84D3F93F541959 - -I=89 -KEY=00000000000000000000008000000000 -CT=B21E90D25DF383416A5F072CEBEB1FFB - -I=90 -KEY=00000000000000000000004000000000 -CT=4AEFCDA089318125453EB9E8EB5E492E - -I=91 -KEY=00000000000000000000002000000000 -CT=4D3E75C6CD40EC4869BC85158591ADB8 - -I=92 -KEY=00000000000000000000001000000000 -CT=63A8B904405436A1B99D7751866771B7 - -I=93 -KEY=00000000000000000000000800000000 -CT=64F0DAAE47529199792EAE172BA53293 - -I=94 -KEY=00000000000000000000000400000000 -CT=C3EEF84BEA18225D515A8C852A9047EE - -I=95 -KEY=00000000000000000000000200000000 -CT=A44AC422B47D47B81AF73B3E9AC9596E - -I=96 -KEY=00000000000000000000000100000000 -CT=D16E04A8FBC435094F8D53ADF25F5084 - -I=97 -KEY=00000000000000000000000080000000 -CT=EF13DC34BAB03E124EEAD8B6BF44B532 - -I=98 -KEY=00000000000000000000000040000000 -CT=D94799075C24DCC067AF0D392049250D - -I=99 -KEY=00000000000000000000000020000000 -CT=14F431771EDDCE4764C21A2254B5E3C8 - -I=100 -KEY=00000000000000000000000010000000 -CT=7039329F36F2ED682B02991F28D64679 - -I=101 -KEY=00000000000000000000000008000000 -CT=124EE24EDE5551639DB8B8B941F6141D - -I=102 -KEY=00000000000000000000000004000000 -CT=C2852879A34D5184E478EC918B993FEE - -I=103 -KEY=00000000000000000000000002000000 -CT=86A806A3525B93E432053C9AB5ABBEDF - -I=104 -KEY=00000000000000000000000001000000 -CT=C1609BF5A4F07E37C17A36366EC23ECC - -I=105 -KEY=00000000000000000000000000800000 -CT=7E81E7CB92159A51FFCEA331B1E8EA53 - -I=106 -KEY=00000000000000000000000000400000 -CT=37A7BE002856C5A59A6E03EAFCE7729A - -I=107 -KEY=00000000000000000000000000200000 -CT=BDF98A5A4F91E890C9A1D1E5FAAB138F - -I=108 -KEY=00000000000000000000000000100000 -CT=4E96ACB66E051F2BC739CC3D3E34A26B - -I=109 -KEY=00000000000000000000000000080000 -CT=EE996CDD120EB86E21ECFA49E8E1FCF1 - -I=110 -KEY=00000000000000000000000000040000 -CT=61B9E6B579DBF6070C351A1440DD85FF - -I=111 -KEY=00000000000000000000000000020000 -CT=AC369E484316440B40DFC83AA96E28E7 - -I=112 -KEY=00000000000000000000000000010000 -CT=0A2D16DE985C76D45C579C1159413BBE - -I=113 -KEY=00000000000000000000000000008000 -CT=DA3FDC38DA1D374FA4802CDA1A1C6B0F - -I=114 -KEY=00000000000000000000000000004000 -CT=B842523D4C41C2211AFE43A5800ADCE3 - -I=115 -KEY=00000000000000000000000000002000 -CT=9E2CDA90D8E992DBA6C73D8229567192 - -I=116 -KEY=00000000000000000000000000001000 -CT=D49583B781D9E20F5BE101415957FC49 - -I=117 -KEY=00000000000000000000000000000800 -CT=EF09DA5C12B376E458B9B8670032498E - -I=118 -KEY=00000000000000000000000000000400 -CT=A96BE0463DA774461A5E1D5A9DD1AC10 - -I=119 -KEY=00000000000000000000000000000200 -CT=32CEE3341060790D2D4B1362EF397090 - -I=120 -KEY=00000000000000000000000000000100 -CT=21CEA416A3D3359D2C4D58FB6A035F06 - -I=121 -KEY=00000000000000000000000000000080 -CT=172AEAB3D507678ECAF455C12587ADB7 - -I=122 -KEY=00000000000000000000000000000040 -CT=B6F897941EF8EBFF9FE80A567EF38478 - -I=123 -KEY=00000000000000000000000000000020 -CT=A9723259D94A7DC662FB0C782CA3F1DD - -I=124 -KEY=00000000000000000000000000000010 -CT=2F91C984B9A4839F30001B9F430493B4 - -I=125 -KEY=00000000000000000000000000000008 -CT=0472406345A610B048CB99EE0EF3FA0F - -I=126 -KEY=00000000000000000000000000000004 -CT=F5F39086646F8C05ED16EFA4B617957C - -I=127 -KEY=00000000000000000000000000000002 -CT=26D50F485A30408D5AF47A5736292450 - -I=128 -KEY=00000000000000000000000000000001 -CT=0545AAD56DA2A97C3663D1432A3D1C84 - -========== - -KEYSIZE=256 - -PT=00000000000000000000000000000000 - -I=1 -KEY=8000000000000000000000000000000000000000000000000000000000000000 -CT=E35A6DCB19B201A01EBCFA8AA22B5759 - -I=2 -KEY=4000000000000000000000000000000000000000000000000000000000000000 -CT=5075C2405B76F22F553488CAE47CE90B - -I=3 -KEY=2000000000000000000000000000000000000000000000000000000000000000 -CT=49DF95D844A0145A7DE01C91793302D3 - -I=4 -KEY=1000000000000000000000000000000000000000000000000000000000000000 -CT=E7396D778E940B8418A86120E5F421FE - -I=5 -KEY=0800000000000000000000000000000000000000000000000000000000000000 -CT=05F535C36FCEDE4657BE37F4087DB1EF - -I=6 -KEY=0400000000000000000000000000000000000000000000000000000000000000 -CT=D0C1DDDD10DA777C68AB36AF51F2C204 - -I=7 -KEY=0200000000000000000000000000000000000000000000000000000000000000 -CT=1C55FB811B5C6464C4E5DE1535A75514 - -I=8 -KEY=0100000000000000000000000000000000000000000000000000000000000000 -CT=52917F3AE957D5230D3A2AF57C7B5A71 - -I=9 -KEY=0080000000000000000000000000000000000000000000000000000000000000 -CT=C6E3D5501752DD5E9AEF086D6B45D705 - -I=10 -KEY=0040000000000000000000000000000000000000000000000000000000000000 -CT=A24A9C7AF1D9B1E17E1C9A3E711B3FA7 - -I=11 -KEY=0020000000000000000000000000000000000000000000000000000000000000 -CT=B881ECA724A6D43DBC6B96F6F59A0D20 - -I=12 -KEY=0010000000000000000000000000000000000000000000000000000000000000 -CT=EC524D9A24DFFF2A9639879B83B8E137 - -I=13 -KEY=0008000000000000000000000000000000000000000000000000000000000000 -CT=34C4F345F5466215A037F443635D6F75 - -I=14 -KEY=0004000000000000000000000000000000000000000000000000000000000000 -CT=5BA5055BEDB8895F672E29F2EB5A355D - -I=15 -KEY=0002000000000000000000000000000000000000000000000000000000000000 -CT=B3F692AA3A435259EBBEF9B51AD1E08D - -I=16 -KEY=0001000000000000000000000000000000000000000000000000000000000000 -CT=414FEB4376F2C64A5D2FBB2ED531BA7D - -I=17 -KEY=0000800000000000000000000000000000000000000000000000000000000000 -CT=A20D519E3BCA3303F07E81719F61605E - -I=18 -KEY=0000400000000000000000000000000000000000000000000000000000000000 -CT=A08D10E520AF811F45BD60A2DC0DC4B1 - -I=19 -KEY=0000200000000000000000000000000000000000000000000000000000000000 -CT=B06893A8C563C430E6F3858826EFBBE4 - -I=20 -KEY=0000100000000000000000000000000000000000000000000000000000000000 -CT=0FFEE26AE2D3929C6BD9C6BEDFF84409 - -I=21 -KEY=0000080000000000000000000000000000000000000000000000000000000000 -CT=4D0F5E906ED77801FC0EF53EDC5F9E2B - -I=22 -KEY=0000040000000000000000000000000000000000000000000000000000000000 -CT=8B6EC00119AD8B026DCE56EA7DEFE930 - -I=23 -KEY=0000020000000000000000000000000000000000000000000000000000000000 -CT=69026591D43363EE9D83B5007F0B484E - -I=24 -KEY=0000010000000000000000000000000000000000000000000000000000000000 -CT=27135D86950C6A2F86872706279A4761 - -I=25 -KEY=0000008000000000000000000000000000000000000000000000000000000000 -CT=35E6DB8723F281DA410C3AC8535ED77C - -I=26 -KEY=0000004000000000000000000000000000000000000000000000000000000000 -CT=57427CF214B8C28E4BBF487CCB8D0E09 - -I=27 -KEY=0000002000000000000000000000000000000000000000000000000000000000 -CT=6DF01BF56E5131AC87F96E99CAB86367 - -I=28 -KEY=0000001000000000000000000000000000000000000000000000000000000000 -CT=3856C5B55790B768BBF7D43031579BCF - -I=29 -KEY=0000000800000000000000000000000000000000000000000000000000000000 -CT=1E6ED8FB7C15BC4D2F63BA7037ED44D0 - -I=30 -KEY=0000000400000000000000000000000000000000000000000000000000000000 -CT=E1B2ED6CD8D93D455534E401156D4BCF - -I=31 -KEY=0000000200000000000000000000000000000000000000000000000000000000 -CT=EFBCCA5BDFDAD10E875F02336212CE36 - -I=32 -KEY=0000000100000000000000000000000000000000000000000000000000000000 -CT=0B777F02FD18DCE2646DCFE868DFAFAD - -I=33 -KEY=0000000080000000000000000000000000000000000000000000000000000000 -CT=C8A104B5693D1B14F5BF1F10100BF508 - -I=34 -KEY=0000000040000000000000000000000000000000000000000000000000000000 -CT=4CCE6615244AFCB38408FECE219962EA - -I=35 -KEY=0000000020000000000000000000000000000000000000000000000000000000 -CT=F99E7845D3A255B394C9C050CBA258B1 - -I=36 -KEY=0000000010000000000000000000000000000000000000000000000000000000 -CT=B4AFBB787F9BCFB7B55FDF447F611295 - -I=37 -KEY=0000000008000000000000000000000000000000000000000000000000000000 -CT=AE1C426A697FAF2808B7EF6ADDB5C020 - -I=38 -KEY=0000000004000000000000000000000000000000000000000000000000000000 -CT=7572F92811A85B9BDD38DEAD9945BCAE - -I=39 -KEY=0000000002000000000000000000000000000000000000000000000000000000 -CT=71BC7AA46E43FB95A181527D9F6A360F - -I=40 -KEY=0000000001000000000000000000000000000000000000000000000000000000 -CT=5542EF2923066F1EC8F546DD0D8E7CA8 - -I=41 -KEY=0000000000800000000000000000000000000000000000000000000000000000 -CT=6B92317C7D623790B748FDD7EFC42422 - -I=42 -KEY=0000000000400000000000000000000000000000000000000000000000000000 -CT=0FE7C097E899C71EF045360F8D6C25CF - -I=43 -KEY=0000000000200000000000000000000000000000000000000000000000000000 -CT=4ECE7EE107D0264D04693151C25B9DF6 - -I=44 -KEY=0000000000100000000000000000000000000000000000000000000000000000 -CT=FD6AE687CBFCA9E301045888D3BB9605 - -I=45 -KEY=0000000000080000000000000000000000000000000000000000000000000000 -CT=476B579C8556C7254424902CC1D6D36E - -I=46 -KEY=0000000000040000000000000000000000000000000000000000000000000000 -CT=4133CBCDFDD6B8860A1FC18665D6D71B - -I=47 -KEY=0000000000020000000000000000000000000000000000000000000000000000 -CT=3B36EC2664798C108B816812C65DFDC7 - -I=48 -KEY=0000000000010000000000000000000000000000000000000000000000000000 -CT=364E20A234FEA385D48DC5A09C9E70CF - -I=49 -KEY=0000000000008000000000000000000000000000000000000000000000000000 -CT=4A4BA25969DE3F5EE5642C71AAD0EFD1 - -I=50 -KEY=0000000000004000000000000000000000000000000000000000000000000000 -CT=E42CBAAE43297F67A76C1C501BB79E36 - -I=51 -KEY=0000000000002000000000000000000000000000000000000000000000000000 -CT=23CEDEDA4C15B4C037E8C61492217937 - -I=52 -KEY=0000000000001000000000000000000000000000000000000000000000000000 -CT=A1719147A1F4A1A1180BD16E8593DCDE - -I=53 -KEY=0000000000000800000000000000000000000000000000000000000000000000 -CT=AB82337E9FB0EC60D1F25A1D0014192C - -I=54 -KEY=0000000000000400000000000000000000000000000000000000000000000000 -CT=74BF2D8FC5A8388DF1A3A4D7D33FC164 - -I=55 -KEY=0000000000000200000000000000000000000000000000000000000000000000 -CT=D5B493317E6FBC6FFFD664B3C491368A - -I=56 -KEY=0000000000000100000000000000000000000000000000000000000000000000 -CT=BA767381586DA56A2A8D503D5F7ADA0B - -I=57 -KEY=0000000000000080000000000000000000000000000000000000000000000000 -CT=E8E6BC57DFE9CCADB0DECABF4E5CF91F - -I=58 -KEY=0000000000000040000000000000000000000000000000000000000000000000 -CT=3C8E5A5CDC9CEED90815D1F84BB2998C - -I=59 -KEY=0000000000000020000000000000000000000000000000000000000000000000 -CT=283843020BA38F056001B2FD585F7CC9 - -I=60 -KEY=0000000000000010000000000000000000000000000000000000000000000000 -CT=D8ADC7426F623ECE8741A70621D28870 - -I=61 -KEY=0000000000000008000000000000000000000000000000000000000000000000 -CT=D7C5C215592D06F00E6A80DA69A28EA9 - -I=62 -KEY=0000000000000004000000000000000000000000000000000000000000000000 -CT=52CF6FA433C3C870CAC70190358F7F16 - -I=63 -KEY=0000000000000002000000000000000000000000000000000000000000000000 -CT=F63D442A584DA71786ADEC9F3346DF75 - -I=64 -KEY=0000000000000001000000000000000000000000000000000000000000000000 -CT=549078F4B0CA7079B45F9A5ADAFAFD99 - -I=65 -KEY=0000000000000000800000000000000000000000000000000000000000000000 -CT=F2A5986EE4E9984BE2BAFB79EA8152FA - -I=66 -KEY=0000000000000000400000000000000000000000000000000000000000000000 -CT=8A74535017B4DB2776668A1FAE64384C - -I=67 -KEY=0000000000000000200000000000000000000000000000000000000000000000 -CT=E613342F57A97FD95DC088711A5D0ECD - -I=68 -KEY=0000000000000000100000000000000000000000000000000000000000000000 -CT=3FFAEBF6B22CF1DC82AE17CD48175B01 - -I=69 -KEY=0000000000000000080000000000000000000000000000000000000000000000 -CT=BAFD52EFA15C248CCBF9757735E6B1CE - -I=70 -KEY=0000000000000000040000000000000000000000000000000000000000000000 -CT=7AF94BC018D9DDD4539D2DD1C6F4000F - -I=71 -KEY=0000000000000000020000000000000000000000000000000000000000000000 -CT=FE177AD61CA0FDB281086FBA8FE76803 - -I=72 -KEY=0000000000000000010000000000000000000000000000000000000000000000 -CT=74DBEA15E2E9285BAD163D7D534251B6 - -I=73 -KEY=0000000000000000008000000000000000000000000000000000000000000000 -CT=23DD21331B3A92F200FE56FF050FFE74 - -I=74 -KEY=0000000000000000004000000000000000000000000000000000000000000000 -CT=A69C5AA34AB20A858CAFA766EACED6D8 - -I=75 -KEY=0000000000000000002000000000000000000000000000000000000000000000 -CT=3F72BB4DF2A4F941A4A09CB78F04B97A - -I=76 -KEY=0000000000000000001000000000000000000000000000000000000000000000 -CT=72CC43577E1FD5FD14622D24D97FCDCC - -I=77 -KEY=0000000000000000000800000000000000000000000000000000000000000000 -CT=D83AF8EBE93E0B6B99CAFADE224937D1 - -I=78 -KEY=0000000000000000000400000000000000000000000000000000000000000000 -CT=44042329128D56CAA8D084C8BD769D1E - -I=79 -KEY=0000000000000000000200000000000000000000000000000000000000000000 -CT=14102D72290DE4F2C430ADD1ED64BA1D - -I=80 -KEY=0000000000000000000100000000000000000000000000000000000000000000 -CT=449124097B1ECD0AE7065206DF06F03C - -I=81 -KEY=0000000000000000000080000000000000000000000000000000000000000000 -CT=D060A99F8CC153A42E11E5F97BD7584A - -I=82 -KEY=0000000000000000000040000000000000000000000000000000000000000000 -CT=65605B3EA9261488D53E48602ADEA299 - -I=83 -KEY=0000000000000000000020000000000000000000000000000000000000000000 -CT=C5E5CAD7A208DE8EA6BE049EFE5C7346 - -I=84 -KEY=0000000000000000000010000000000000000000000000000000000000000000 -CT=4C280C46D2181646048DD5BC0C0831A5 - -I=85 -KEY=0000000000000000000008000000000000000000000000000000000000000000 -CT=5DD65CF37F2A0929559AABAFDA08E730 - -I=86 -KEY=0000000000000000000004000000000000000000000000000000000000000000 -CT=31F2335CAAF264172F69A693225E6D22 - -I=87 -KEY=0000000000000000000002000000000000000000000000000000000000000000 -CT=3E28B35F99A72662590DA96426DD377F - -I=88 -KEY=0000000000000000000001000000000000000000000000000000000000000000 -CT=570F40F5D7B20441486578ED344343BE - -I=89 -KEY=0000000000000000000000800000000000000000000000000000000000000000 -CT=C54308AD1C9E3B19F8B7417873045A8C - -I=90 -KEY=0000000000000000000000400000000000000000000000000000000000000000 -CT=CBF335E39CE13ADE2B696179E8FD0CE1 - -I=91 -KEY=0000000000000000000000200000000000000000000000000000000000000000 -CT=9C2FBF422355D8293083D51F4A3C18A9 - -I=92 -KEY=0000000000000000000000100000000000000000000000000000000000000000 -CT=5ED8B5A31ECEFAB16C9AA6986DA67BCE - -I=93 -KEY=0000000000000000000000080000000000000000000000000000000000000000 -CT=627815DCFC814ABC75900041B1DD7B59 - -I=94 -KEY=0000000000000000000000040000000000000000000000000000000000000000 -CT=9EF3E82A50A59F166260494F7A7F2CC3 - -I=95 -KEY=0000000000000000000000020000000000000000000000000000000000000000 -CT=878CD0D8D920888B5935D6C351128737 - -I=96 -KEY=0000000000000000000000010000000000000000000000000000000000000000 -CT=E44429474D6FC3084EB2A6B8B46AF754 - -I=97 -KEY=0000000000000000000000008000000000000000000000000000000000000000 -CT=EBAACF9641D54E1FB18D0A2BE4F19BE5 - -I=98 -KEY=0000000000000000000000004000000000000000000000000000000000000000 -CT=13B3BF497CEE780E123C7E193DEA3A01 - -I=99 -KEY=0000000000000000000000002000000000000000000000000000000000000000 -CT=6E8F381DE00A41161F0DF03B4155BFD4 - -I=100 -KEY=0000000000000000000000001000000000000000000000000000000000000000 -CT=35E4F29BBA2BAE01144910783C3FEF49 - -I=101 -KEY=0000000000000000000000000800000000000000000000000000000000000000 -CT=55B17BD66788CEAC366398A31F289FFB - -I=102 -KEY=0000000000000000000000000400000000000000000000000000000000000000 -CT=11341F56C0D6D1008D28741DAA7679CE - -I=103 -KEY=0000000000000000000000000200000000000000000000000000000000000000 -CT=4DF7253DF421D83358BDBE924745D98C - -I=104 -KEY=0000000000000000000000000100000000000000000000000000000000000000 -CT=BAE2EE651116D93EDC8E83B5F3347BE1 - -I=105 -KEY=0000000000000000000000000080000000000000000000000000000000000000 -CT=F9721ABD06709157183AF3965A659D9D - -I=106 -KEY=0000000000000000000000000040000000000000000000000000000000000000 -CT=19A1C252A613FE2860A4AE6D75CE6FA3 - -I=107 -KEY=0000000000000000000000000020000000000000000000000000000000000000 -CT=B5DDB2F5D9752C949FBDE3FFF5556C6E - -I=108 -KEY=0000000000000000000000000010000000000000000000000000000000000000 -CT=81B044FCFFC78ECCFCD171AAD0405C66 - -I=109 -KEY=0000000000000000000000000008000000000000000000000000000000000000 -CT=C640566D3C06020EB2C42F1D62E56A9B - -I=110 -KEY=0000000000000000000000000004000000000000000000000000000000000000 -CT=EA6C4BCF425291679FDFFD26A424FBCC - -I=111 -KEY=0000000000000000000000000002000000000000000000000000000000000000 -CT=57F6901465D9440D9F15EE2CBA5A4090 - -I=112 -KEY=0000000000000000000000000001000000000000000000000000000000000000 -CT=FBCFA74CADC7406260F63D96C8AAB6B1 - -I=113 -KEY=0000000000000000000000000000800000000000000000000000000000000000 -CT=DFF4F096CEA211D4BBDACA033D0EC7D1 - -I=114 -KEY=0000000000000000000000000000400000000000000000000000000000000000 -CT=1EE5190D551F0F42F675227A381296A9 - -I=115 -KEY=0000000000000000000000000000200000000000000000000000000000000000 -CT=F98E1905012E580F097623C10B93054F - -I=116 -KEY=0000000000000000000000000000100000000000000000000000000000000000 -CT=E7D43743D21DD3C9F168C86856558B9A - -I=117 -KEY=0000000000000000000000000000080000000000000000000000000000000000 -CT=632A9DDA730DAB67593C5D08D8AC1059 - -I=118 -KEY=0000000000000000000000000000040000000000000000000000000000000000 -CT=E084317000715B9057BC9DE9F3AB6124 - -I=119 -KEY=0000000000000000000000000000020000000000000000000000000000000000 -CT=61F9EF33A0BB4E666C2ED99101919FAB - -I=120 -KEY=0000000000000000000000000000010000000000000000000000000000000000 -CT=6DC1D68A11834657D46703C22578D59A - -I=121 -KEY=0000000000000000000000000000008000000000000000000000000000000000 -CT=53AC1548863D3D16F1D4DC7242E05F2C - -I=122 -KEY=0000000000000000000000000000004000000000000000000000000000000000 -CT=E82CD587A408306AD78CEAE0916B9F8C - -I=123 -KEY=0000000000000000000000000000002000000000000000000000000000000000 -CT=0FD2D40EA6AD17A3A767F0A8600D6295 - -I=124 -KEY=0000000000000000000000000000001000000000000000000000000000000000 -CT=AD84CC8255ADB39DFCA23F92761AE7E9 - -I=125 -KEY=0000000000000000000000000000000800000000000000000000000000000000 -CT=F4F20CF7D51BEE7DA024A2B11A7ECA0B - -I=126 -KEY=0000000000000000000000000000000400000000000000000000000000000000 -CT=5057691B85D9CE93A193214DB0A016B6 - -I=127 -KEY=0000000000000000000000000000000200000000000000000000000000000000 -CT=0F58C960876390BDEF4BB6BE95CAA1EE - -I=128 -KEY=0000000000000000000000000000000100000000000000000000000000000000 -CT=9A3E66EEBC21BC0BD9430B341EF465FA - -I=129 -KEY=0000000000000000000000000000000080000000000000000000000000000000 -CT=20415035F34B8BCBCB28ABF07F78F0D4 - -I=130 -KEY=0000000000000000000000000000000040000000000000000000000000000000 -CT=AC89FC7BA10479EBF10DE65BCEF89B3C - -I=131 -KEY=0000000000000000000000000000000020000000000000000000000000000000 -CT=068FA75A30BE443171AF3F6FEB1A20D2 - -I=132 -KEY=0000000000000000000000000000000010000000000000000000000000000000 -CT=50E02F213246C525A8C27700CA34B502 - -I=133 -KEY=0000000000000000000000000000000008000000000000000000000000000000 -CT=227DA47D5A0906DB3AB042BB0A695FB6 - -I=134 -KEY=0000000000000000000000000000000004000000000000000000000000000000 -CT=8663AC30ED12514F1DE46777F4514BFC - -I=135 -KEY=0000000000000000000000000000000002000000000000000000000000000000 -CT=A987D4BC12E1DE9F4B6DF43567C34A8B - -I=136 -KEY=0000000000000000000000000000000001000000000000000000000000000000 -CT=6D5A0370F599ACA605F63B04E5143D0C - -I=137 -KEY=0000000000000000000000000000000000800000000000000000000000000000 -CT=9809266E378B07B7AFDB3BAA97B7E442 - -I=138 -KEY=0000000000000000000000000000000000400000000000000000000000000000 -CT=8F753252B30CCCACE12D9A301F4D5090 - -I=139 -KEY=0000000000000000000000000000000000200000000000000000000000000000 -CT=032465F6C0CE34D41962F561692A1AFF - -I=140 -KEY=0000000000000000000000000000000000100000000000000000000000000000 -CT=C50E9AD5BEB8F3B00821DD47FF8AC093 - -I=141 -KEY=0000000000000000000000000000000000080000000000000000000000000000 -CT=9C6FEA3D46268D54A6829B2AD25BB276 - -I=142 -KEY=0000000000000000000000000000000000040000000000000000000000000000 -CT=0FD8575E87706F561343D7B3A41E044A - -I=143 -KEY=0000000000000000000000000000000000020000000000000000000000000000 -CT=BEE9BEB3739540D88CBCE77925F0A114 - -I=144 -KEY=0000000000000000000000000000000000010000000000000000000000000000 -CT=D24EAEE7FFFBAC3D6F26C2DCE0DCDE28 - -I=145 -KEY=0000000000000000000000000000000000008000000000000000000000000000 -CT=47771A90398FF0F7FA821C2F8F5E1398 - -I=146 -KEY=0000000000000000000000000000000000004000000000000000000000000000 -CT=4639741B6F84B135AD118C8249B64ED0 - -I=147 -KEY=0000000000000000000000000000000000002000000000000000000000000000 -CT=8EE5505EC85567697A3306F250A27720 - -I=148 -KEY=0000000000000000000000000000000000001000000000000000000000000000 -CT=7C8A19AC1AEFBC5E0119D91A5F05D4C2 - -I=149 -KEY=0000000000000000000000000000000000000800000000000000000000000000 -CT=5141B9B672E54773B672E3A6C424887B - -I=150 -KEY=0000000000000000000000000000000000000400000000000000000000000000 -CT=B5A2D3CD206653C6402F34FB0AE3613D - -I=151 -KEY=0000000000000000000000000000000000000200000000000000000000000000 -CT=0F5BD9408738231D114B0A82753279A3 - -I=152 -KEY=0000000000000000000000000000000000000100000000000000000000000000 -CT=FEF033FF4268EA487FC74C5E43A45338 - -I=153 -KEY=0000000000000000000000000000000000000080000000000000000000000000 -CT=A3EDC09DCD529B113910D904AD855581 - -I=154 -KEY=0000000000000000000000000000000000000040000000000000000000000000 -CT=AB8FBB6F27A0AC7C55B59FDD36B72F1C - -I=155 -KEY=0000000000000000000000000000000000000020000000000000000000000000 -CT=EEA44D5ED4D769CC930CD83D8999EC46 - -I=156 -KEY=0000000000000000000000000000000000000010000000000000000000000000 -CT=6972276803AE9AA7C6F431AB10979C34 - -I=157 -KEY=0000000000000000000000000000000000000008000000000000000000000000 -CT=86DEAA9F39244101818178474D7DBDE9 - -I=158 -KEY=0000000000000000000000000000000000000004000000000000000000000000 -CT=88C6B466EA361D662D8D08CBF181F4FE - -I=159 -KEY=0000000000000000000000000000000000000002000000000000000000000000 -CT=91AB2C6B7C63FF59F7CBEEBF91B20B95 - -I=160 -KEY=0000000000000000000000000000000000000001000000000000000000000000 -CT=2DFE6C146AD5B3D8C3C1718F13B48E01 - -I=161 -KEY=0000000000000000000000000000000000000000800000000000000000000000 -CT=C7CFF1623451711391A302EEC3584AAA - -I=162 -KEY=0000000000000000000000000000000000000000400000000000000000000000 -CT=089FE845CC05011686C66019D18BE050 - -I=163 -KEY=0000000000000000000000000000000000000000200000000000000000000000 -CT=08C8410B9B427211A67124B0DCCEAD48 - -I=164 -KEY=0000000000000000000000000000000000000000100000000000000000000000 -CT=8D91592F5566085254784606334D7629 - -I=165 -KEY=0000000000000000000000000000000000000000080000000000000000000000 -CT=3298FEAAF2E1201D6299FF8846639C97 - -I=166 -KEY=0000000000000000000000000000000000000000040000000000000000000000 -CT=C497CB9F0BDFE0EFC8C2F3F90760AA72 - -I=167 -KEY=0000000000000000000000000000000000000000020000000000000000000000 -CT=2788AFD046E0309CBE4424690DA2AB89 - -I=168 -KEY=0000000000000000000000000000000000000000010000000000000000000000 -CT=E9891707F25EF29FEE372890D4258982 - -I=169 -KEY=0000000000000000000000000000000000000000008000000000000000000000 -CT=DB041D94A23D45D4D4DCED5A030CAF61 - -I=170 -KEY=0000000000000000000000000000000000000000004000000000000000000000 -CT=FFAFDBF0ECB18DF9EA02C27077448E6D - -I=171 -KEY=0000000000000000000000000000000000000000002000000000000000000000 -CT=2DAAA42A7D0A1D3B0E4761D99CF2150A - -I=172 -KEY=0000000000000000000000000000000000000000001000000000000000000000 -CT=3B7A54CB7CF30ABE263DD6ED5BFE8D63 - -I=173 -KEY=0000000000000000000000000000000000000000000800000000000000000000 -CT=EEFA090174C590C448A55D43648F534A - -I=174 -KEY=0000000000000000000000000000000000000000000400000000000000000000 -CT=9E15798731ED42F43EA2740A691DA872 - -I=175 -KEY=0000000000000000000000000000000000000000000200000000000000000000 -CT=31FBD661540A5DEAAD1017CFD3909EC8 - -I=176 -KEY=0000000000000000000000000000000000000000000100000000000000000000 -CT=CDA9AE05F224140E28CB951721B44D6A - -I=177 -KEY=0000000000000000000000000000000000000000000080000000000000000000 -CT=0C5BC512C60A1EAC3434EFB1A8FBB182 - -I=178 -KEY=0000000000000000000000000000000000000000000040000000000000000000 -CT=AA863610DEEEEB62D045E87EA30B59B5 - -I=179 -KEY=0000000000000000000000000000000000000000000020000000000000000000 -CT=6AC2448DE568D279C7EEBE1DF403920C - -I=180 -KEY=0000000000000000000000000000000000000000000010000000000000000000 -CT=E2011E3D292B26888AE801215FD0CB40 - -I=181 -KEY=0000000000000000000000000000000000000000000008000000000000000000 -CT=E06F3E15EE3A61672D1C99BADE5B9DBE - -I=182 -KEY=0000000000000000000000000000000000000000000004000000000000000000 -CT=BB7027F0548CF6712CEB4C7A4B28E178 - -I=183 -KEY=0000000000000000000000000000000000000000000002000000000000000000 -CT=061EC21FB70FADBDF87C3BD2AE23825B - -I=184 -KEY=0000000000000000000000000000000000000000000001000000000000000000 -CT=4C21F26FE94ABBAC381352375314C3EB - -I=185 -KEY=0000000000000000000000000000000000000000000000800000000000000000 -CT=F7CEE6DD99909C2B569EEDA61ED8942E - -I=186 -KEY=0000000000000000000000000000000000000000000000400000000000000000 -CT=CE98C4A876C65E4CCB261EBB1D9DF7F5 - -I=187 -KEY=0000000000000000000000000000000000000000000000200000000000000000 -CT=A5491881CF833C3604ABC08044F402AC - -I=188 -KEY=0000000000000000000000000000000000000000000000100000000000000000 -CT=A1BA16E64CCCB3087D57A768507B0BFC - -I=189 -KEY=0000000000000000000000000000000000000000000000080000000000000000 -CT=D55951E202D2949EBD3BE43120C738BF - -I=190 -KEY=0000000000000000000000000000000000000000000000040000000000000000 -CT=EBB8E43069E69F450EFEC65DCD52B7FD - -I=191 -KEY=0000000000000000000000000000000000000000000000020000000000000000 -CT=2B292135663B4AA5ABFE9423D57E7EE9 - -I=192 -KEY=0000000000000000000000000000000000000000000000010000000000000000 -CT=E91BF974B3BE3AD966249D8655292A85 - -I=193 -KEY=0000000000000000000000000000000000000000000000008000000000000000 -CT=384365998EAA9562236CC58F6ADF9610 - -I=194 -KEY=0000000000000000000000000000000000000000000000004000000000000000 -CT=C2E997012AA3D4D8D359C9A947CBE69F - -I=195 -KEY=0000000000000000000000000000000000000000000000002000000000000000 -CT=F49421204148BA213BE87E2D5C22B0BF - -I=196 -KEY=0000000000000000000000000000000000000000000000001000000000000000 -CT=82ED0ED9953AA92E4DF30929CA65C00F - -I=197 -KEY=0000000000000000000000000000000000000000000000000800000000000000 -CT=291EB1D11653C8479437C74A977F5106 - -I=198 -KEY=0000000000000000000000000000000000000000000000000400000000000000 -CT=BCB997B1939B8983ABD550D6025683E3 - -I=199 -KEY=0000000000000000000000000000000000000000000000000200000000000000 -CT=1FBA2592C6F489775CAADA71F9B983E9 - -I=200 -KEY=0000000000000000000000000000000000000000000000000100000000000000 -CT=969F66F217AF1A3DB9E41C1B29039824 - -I=201 -KEY=0000000000000000000000000000000000000000000000000080000000000000 -CT=A54BB7D6B17E423AC0A7744C19073CB8 - -I=202 -KEY=0000000000000000000000000000000000000000000000000040000000000000 -CT=B0AC6E6578D1021F47DCF9748A32EAD5 - -I=203 -KEY=0000000000000000000000000000000000000000000000000020000000000000 -CT=B87B361C3B7B194C77A4358D4669153E - -I=204 -KEY=0000000000000000000000000000000000000000000000000010000000000000 -CT=46A133847F96EAA8282A799DC8899D58 - -I=205 -KEY=0000000000000000000000000000000000000000000000000008000000000000 -CT=2265EC3A9F2D5C9547A091CC8CFB18EA - -I=206 -KEY=0000000000000000000000000000000000000000000000000004000000000000 -CT=54CBF3A6FC4FE56D426117AA1FFD1DDE - -I=207 -KEY=0000000000000000000000000000000000000000000000000002000000000000 -CT=5312877CCEAB6CFB0905394A370A8003 - -I=208 -KEY=0000000000000000000000000000000000000000000000000001000000000000 -CT=7190BD6EC613FE38B84ECFE28F702FE4 - -I=209 -KEY=0000000000000000000000000000000000000000000000000000800000000000 -CT=D1FA5B9CA89A43B04C05F0EF29EF68CD - -I=210 -KEY=0000000000000000000000000000000000000000000000000000400000000000 -CT=808285751548ED934FD1056D2D9AE8BA - -I=211 -KEY=0000000000000000000000000000000000000000000000000000200000000000 -CT=2758DEF3E7B95A9AE89777BE64D5A6CF - -I=212 -KEY=0000000000000000000000000000000000000000000000000000100000000000 -CT=07D81F87DB3E0ACC82B01E08FB22F3C1 - -I=213 -KEY=0000000000000000000000000000000000000000000000000000080000000000 -CT=8DA250E5553D650711A75EE1CB4FD1C7 - -I=214 -KEY=0000000000000000000000000000000000000000000000000000040000000000 -CT=A93D946BD0E87F32719DF5F158CEE669 - -I=215 -KEY=0000000000000000000000000000000000000000000000000000020000000000 -CT=03945236EC2A4D4EAF30B8ABEB54330D - -I=216 -KEY=0000000000000000000000000000000000000000000000000000010000000000 -CT=11CC35301F24B79DDE31AEA2D1354F88 - -I=217 -KEY=0000000000000000000000000000000000000000000000000000008000000000 -CT=E73715B3E8D9A290F44AE6FFBF247E5D - -I=218 -KEY=0000000000000000000000000000000000000000000000000000004000000000 -CT=7345E07732B71CB158BBF64CCA5C5B96 - -I=219 -KEY=0000000000000000000000000000000000000000000000000000002000000000 -CT=6E128F296D24705A1924FD9B70C4ED04 - -I=220 -KEY=0000000000000000000000000000000000000000000000000000001000000000 -CT=95A789776F036783FBD330947083F54F - -I=221 -KEY=0000000000000000000000000000000000000000000000000000000800000000 -CT=360DEC2533EA4AA2E3E54FD3DE2906EB - -I=222 -KEY=0000000000000000000000000000000000000000000000000000000400000000 -CT=E68EFD7FECF4D601EA22727BD764965B - -I=223 -KEY=0000000000000000000000000000000000000000000000000000000200000000 -CT=9065C64A8BFF44AC33EDBB611CF83D7B - -I=224 -KEY=0000000000000000000000000000000000000000000000000000000100000000 -CT=8F33C8DF2A7A51CE8090E8F123BC3723 - -I=225 -KEY=0000000000000000000000000000000000000000000000000000000080000000 -CT=807F391FFBA8291BA625623210F99018 - -I=226 -KEY=0000000000000000000000000000000000000000000000000000000040000000 -CT=5E8B3F3A701522CE5CAA761C929D6292 - -I=227 -KEY=0000000000000000000000000000000000000000000000000000000020000000 -CT=3BA404DC38735A78289E3809E8364835 - -I=228 -KEY=0000000000000000000000000000000000000000000000000000000010000000 -CT=D23BEDBAD229F8305DC425B6B759DCC9 - -I=229 -KEY=0000000000000000000000000000000000000000000000000000000008000000 -CT=44880F21CF5913040AE376AEE2A10AD8 - -I=230 -KEY=0000000000000000000000000000000000000000000000000000000004000000 -CT=9BC98E29D057C0E828C3B5CCE69256C1 - -I=231 -KEY=0000000000000000000000000000000000000000000000000000000002000000 -CT=B293CC7A975DA141A68279368057CC41 - -I=232 -KEY=0000000000000000000000000000000000000000000000000000000001000000 -CT=8D60FB87ACD91385B313BE5F1D7BD30F - -I=233 -KEY=0000000000000000000000000000000000000000000000000000000000800000 -CT=2C8E56132D70291B303C48FDF75543CD - -I=234 -KEY=0000000000000000000000000000000000000000000000000000000000400000 -CT=D1F80035B826791F6CE4E59B7DB1BB0D - -I=235 -KEY=0000000000000000000000000000000000000000000000000000000000200000 -CT=42CE6224FC36469339A133DD08173BD4 - -I=236 -KEY=0000000000000000000000000000000000000000000000000000000000100000 -CT=61817155EA41BCBA2AF7F06AE7CBF585 - -I=237 -KEY=0000000000000000000000000000000000000000000000000000000000080000 -CT=D1923A9866068D2EF5FB77D57C3315B6 - -I=238 -KEY=0000000000000000000000000000000000000000000000000000000000040000 -CT=B37CBDB5D719F49691CA968EF2E84140 - -I=239 -KEY=0000000000000000000000000000000000000000000000000000000000020000 -CT=EC974E653A055D7F8F22171030F68E1D - -I=240 -KEY=0000000000000000000000000000000000000000000000000000000000010000 -CT=DDE5D3B9AAD9C32213BB3675A822499C - -I=241 -KEY=0000000000000000000000000000000000000000000000000000000000008000 -CT=D3B6E9216EA1AE57EB1C628A3C38AB78 - -I=242 -KEY=0000000000000000000000000000000000000000000000000000000000004000 -CT=82C99ECC69472B7E96324B042AE8B87A - -I=243 -KEY=0000000000000000000000000000000000000000000000000000000000002000 -CT=97144DC5338C43600F84439C0AA0D147 - -I=244 -KEY=0000000000000000000000000000000000000000000000000000000000001000 -CT=400AC4A0BBADA1DB2121EB144C7E5209 - -I=245 -KEY=0000000000000000000000000000000000000000000000000000000000000800 -CT=EFD9D550EB419ED278F4885A490AB54C - -I=246 -KEY=0000000000000000000000000000000000000000000000000000000000000400 -CT=2AB7816E149B7C0404C88A8857793670 - -I=247 -KEY=0000000000000000000000000000000000000000000000000000000000000200 -CT=5B591DFF9E8DEE15BAD24C025DBCA481 - -I=248 -KEY=0000000000000000000000000000000000000000000000000000000000000100 -CT=0C06633E30721C3749F49AD8CBF2B754 - -I=249 -KEY=0000000000000000000000000000000000000000000000000000000000000080 -CT=96D6D31A41B5123B2035FD91A921D4CA - -I=250 -KEY=0000000000000000000000000000000000000000000000000000000000000040 -CT=E7F6C34D86668BC2805CA7793C5E86AD - -I=251 -KEY=0000000000000000000000000000000000000000000000000000000000000020 -CT=F46DFF5FF500D6879C4D3E45CF0CF0F3 - -I=252 -KEY=0000000000000000000000000000000000000000000000000000000000000010 -CT=60D842D9C61DA7495C116197B7CECBBE - -I=253 -KEY=0000000000000000000000000000000000000000000000000000000000000008 -CT=D45B24EDB673353EBDF248B8FA06B67A - -I=254 -KEY=0000000000000000000000000000000000000000000000000000000000000004 -CT=119EAEBCC165D0BD02C0D35DC82EF992 - -I=255 -KEY=0000000000000000000000000000000000000000000000000000000000000002 -CT=E673143680414ADA301D0ED34626B9FE - -I=256 -KEY=0000000000000000000000000000000000000000000000000000000000000001 -CT=6B6CFE160A6263631B292F879EEFF926 - -========== diff --git a/src/lib/crypto/aes/expect-vt.txt b/src/lib/crypto/aes/expect-vt.txt deleted file mode 100644 index 02b238c04..000000000 --- a/src/lib/crypto/aes/expect-vt.txt +++ /dev/null @@ -1,1036 +0,0 @@ - -KEYSIZE=128 - -KEY=00000000000000000000000000000000 - -I=1 -PT=80000000000000000000000000000000 -CT=3AD78E726C1EC02B7EBFE92B23D9EC34 - -I=2 -PT=40000000000000000000000000000000 -CT=45BC707D29E8204D88DFBA2F0B0CAD9B - -I=3 -PT=20000000000000000000000000000000 -CT=161556838018F52805CDBD6202002E3F - -I=4 -PT=10000000000000000000000000000000 -CT=F5569B3AB6A6D11EFDE1BF0A64C6854A - -I=5 -PT=08000000000000000000000000000000 -CT=64E82B50E501FBD7DD4116921159B83E - -I=6 -PT=04000000000000000000000000000000 -CT=BAAC12FB613A7DE11450375C74034041 - -I=7 -PT=02000000000000000000000000000000 -CT=BCF176A7EAAD8085EBACEA362462A281 - -I=8 -PT=01000000000000000000000000000000 -CT=47711816E91D6FF059BBBF2BF58E0FD3 - -I=9 -PT=00800000000000000000000000000000 -CT=B970DFBE40698AF1638FE38BD3DF3B2F - -I=10 -PT=00400000000000000000000000000000 -CT=F95B59A44F391E14CF20B74BDC32FCFF - -I=11 -PT=00200000000000000000000000000000 -CT=720F74AE04A2A435B9A7256E49378F5B - -I=12 -PT=00100000000000000000000000000000 -CT=2A0445F61D36BFA7E277070730CF76DA - -I=13 -PT=00080000000000000000000000000000 -CT=8D0536B997AEFEC1D94011BAB6699A03 - -I=14 -PT=00040000000000000000000000000000 -CT=674F002E19F6ED47EFF319E51FAD4498 - -I=15 -PT=00020000000000000000000000000000 -CT=292C02C5CB9163C80AC0F6CF1DD8E92D - -I=16 -PT=00010000000000000000000000000000 -CT=FA321CF18EF5FE727DD82A5C1E945141 - -I=17 -PT=00008000000000000000000000000000 -CT=A5A7AFE1034C39CCCEBE3C584BC0BE05 - -I=18 -PT=00004000000000000000000000000000 -CT=4FF5A52E697E77D081205DBDB21CEA39 - -I=19 -PT=00002000000000000000000000000000 -CT=209E88DC94C9003000CE0769AF7B7166 - -I=20 -PT=00001000000000000000000000000000 -CT=5DEE41AF864CB4B650E5F51551824D38 - -I=21 -PT=00000800000000000000000000000000 -CT=A79A63FA7E4503AE6D6E09F5F9053030 - -I=22 -PT=00000400000000000000000000000000 -CT=A48316749FAE7FAC7002031A6AFD8BA7 - -I=23 -PT=00000200000000000000000000000000 -CT=D6EEE8A7357A0E1D64262CA9C337AC42 - -I=24 -PT=00000100000000000000000000000000 -CT=B013CA8A62A858053E9FB667ED39829E - -I=25 -PT=00000080000000000000000000000000 -CT=DF6EA9E4538A45A52D5C1A43C88F4B55 - -I=26 -PT=00000040000000000000000000000000 -CT=7D03BA451371591D3FD5547D9165C73B - -I=27 -PT=00000020000000000000000000000000 -CT=0E0426281A6277E186499D365D5F49FF - -I=28 -PT=00000010000000000000000000000000 -CT=DBC02169DD2059E6CC4C57C1FEDF5AB4 - -I=29 -PT=00000008000000000000000000000000 -CT=826590E05D167DA6F00DCC75E22788EB - -I=30 -PT=00000004000000000000000000000000 -CT=34A73F21A04421D9786335FAAB49423A - -I=31 -PT=00000002000000000000000000000000 -CT=ED347D0E0128EE1A7392A1D36AB78AA9 - -I=32 -PT=00000001000000000000000000000000 -CT=EE944B2FE6E9FC888042608DA9615F75 - -I=33 -PT=00000000800000000000000000000000 -CT=9E7C85A909EF7218BA7947CFB4718F46 - -I=34 -PT=00000000400000000000000000000000 -CT=811AE07A0B2B1F816587FA73699AE77D - -I=35 -PT=00000000200000000000000000000000 -CT=68466FBF43C2FE13D4B18F7EC5EA745F - -I=36 -PT=00000000100000000000000000000000 -CT=D20B015C7191B219780956E6101F9354 - -I=37 -PT=00000000080000000000000000000000 -CT=5939D5C1BBF54EE1B3E326D757BDDE25 - -I=38 -PT=00000000040000000000000000000000 -CT=B1FDAFE9A0240E8FFEA19CE94B5105D3 - -I=39 -PT=00000000020000000000000000000000 -CT=D62962ECE02CDD68C06BDFEFB2F9495B - -I=40 -PT=00000000010000000000000000000000 -CT=B3BB2DE6F3C26587BA8BAC4F7AD9499A - -I=41 -PT=00000000008000000000000000000000 -CT=E0B1072D6D9FF703D6FBEF77852B0A6B - -I=42 -PT=00000000004000000000000000000000 -CT=D8DD51C907F478DE0228E83E61FD1758 - -I=43 -PT=00000000002000000000000000000000 -CT=A42DFFE6E7C1671C06A25236FDD10017 - -I=44 -PT=00000000001000000000000000000000 -CT=25ACF141550BFAB9EF451B6C6A5B2163 - -I=45 -PT=00000000000800000000000000000000 -CT=4DA7FCA3949B16E821DBC84F19581018 - -I=46 -PT=00000000000400000000000000000000 -CT=7D49B6347CBCC8919C7FA96A37A7A215 - -I=47 -PT=00000000000200000000000000000000 -CT=900024B29A08C6721B95BA3B753DDB4D - -I=48 -PT=00000000000100000000000000000000 -CT=6D2182FB283B6934D90BA7848CAB5E66 - -I=49 -PT=00000000000080000000000000000000 -CT=F73EF01B448D23A4D90DE8B2F9666E7A - -I=50 -PT=00000000000040000000000000000000 -CT=4AD9CDA2418643E9A3D926AF5E6B0412 - -I=51 -PT=00000000000020000000000000000000 -CT=7CAEC8E7E5953997D545B033201C8C5B - -I=52 -PT=00000000000010000000000000000000 -CT=3C43CA1F6B6864503E27B48D88230CF5 - -I=53 -PT=00000000000008000000000000000000 -CT=44F779B93108FE9FEEC880D79BA74488 - -I=54 -PT=00000000000004000000000000000000 -CT=9E50E8D9CFD3A682A78E527C9072A1CF - -I=55 -PT=00000000000002000000000000000000 -CT=68D000CBC838BBE3C505D6F814C01F28 - -I=56 -PT=00000000000001000000000000000000 -CT=2CB2A9FEC1ACD1D9B0FA05205E304F57 - -I=57 -PT=00000000000000800000000000000000 -CT=01EB2806606E46444520A5CC6180CD4B - -I=58 -PT=00000000000000400000000000000000 -CT=DAA9B25168CC702326F217F1A0C0B162 - -I=59 -PT=00000000000000200000000000000000 -CT=3E07E648975D9578D03555B1755807ED - -I=60 -PT=00000000000000100000000000000000 -CT=0B45F52E802C8B8DE09579425B80B711 - -I=61 -PT=00000000000000080000000000000000 -CT=659595DA0B68F6DF0DD6CA77202986E1 - -I=62 -PT=00000000000000040000000000000000 -CT=05FF42873893536E58C8FA98A45C73C4 - -I=63 -PT=00000000000000020000000000000000 -CT=B5B03421DE8BBFFC4EADEC767339A9BD - -I=64 -PT=00000000000000010000000000000000 -CT=788BCD111ECF73D4E78D2E21BEF55460 - -I=65 -PT=00000000000000008000000000000000 -CT=909CD9EC6790359F982DC6F2393D5315 - -I=66 -PT=00000000000000004000000000000000 -CT=332950F361535FF24EFAC8C76293F12C - -I=67 -PT=00000000000000002000000000000000 -CT=A68CCD4E330FFDA9D576DA436DB53D75 - -I=68 -PT=00000000000000001000000000000000 -CT=27C8A1CCFDB0B015D1ED5B3E77143791 - -I=69 -PT=00000000000000000800000000000000 -CT=D76A4B95887A77DF610DD3E1D3B20325 - -I=70 -PT=00000000000000000400000000000000 -CT=C068AB0DE71C66DAE83C361EF4B2D989 - -I=71 -PT=00000000000000000200000000000000 -CT=C2120BCD49EDA9A288B3B4BE79AC8158 - -I=72 -PT=00000000000000000100000000000000 -CT=0C546F62BF2773CD0F564FCECA7BA688 - -I=73 -PT=00000000000000000080000000000000 -CT=18F3462BEDE4920213CCB66DAB1640AA - -I=74 -PT=00000000000000000040000000000000 -CT=FE42F245EDD0E24B216AEBD8B392D690 - -I=75 -PT=00000000000000000020000000000000 -CT=3D3EEBC8D3D1558A194C2D00C337FF2B - -I=76 -PT=00000000000000000010000000000000 -CT=29AAEDF043E785DB42836F79BE6CBA28 - -I=77 -PT=00000000000000000008000000000000 -CT=215F90C6744E2944358E78619159A611 - -I=78 -PT=00000000000000000004000000000000 -CT=8606B1AA9E1D548E5442B06551E2C6DC - -I=79 -PT=00000000000000000002000000000000 -CT=987BB4B8740EC0EDE7FEA97DF033B5B1 - -I=80 -PT=00000000000000000001000000000000 -CT=C0A3500DA5B0AE07D2F450930BEEDF1B - -I=81 -PT=00000000000000000000800000000000 -CT=525FDF8312FE8F32C781481A8DAAAE37 - -I=82 -PT=00000000000000000000400000000000 -CT=BFD2C56AE5FB9C9DE33A6944572A6487 - -I=83 -PT=00000000000000000000200000000000 -CT=7975A57A425CDF5AA1FA929101F650B0 - -I=84 -PT=00000000000000000000100000000000 -CT=BF174BC49609A8709B2CD8366DAA79FE - -I=85 -PT=00000000000000000000080000000000 -CT=06C50C43222F56C874B1704E9F44BF7D - -I=86 -PT=00000000000000000000040000000000 -CT=0CEC48CD34043EA29CA3B8ED5278721E - -I=87 -PT=00000000000000000000020000000000 -CT=9548EA34A1560197B304D0ACB8A1698D - -I=88 -PT=00000000000000000000010000000000 -CT=22F9E9B1BD73B6B5B7D3062C986272F3 - -I=89 -PT=00000000000000000000008000000000 -CT=FEE8E934BD0873295059002230E298D4 - -I=90 -PT=00000000000000000000004000000000 -CT=1B08E2E3EB820D139CB4ABBDBE81D00D - -I=91 -PT=00000000000000000000002000000000 -CT=0021177681E4D90CEAF69DCED0145125 - -I=92 -PT=00000000000000000000001000000000 -CT=4A8E314452CA8A8A3619FC54BC423643 - -I=93 -PT=00000000000000000000000800000000 -CT=65047474F7222C94C6965425FF1BFD0A - -I=94 -PT=00000000000000000000000400000000 -CT=E123F551A9C4A8489622B16F961A9AA4 - -I=95 -PT=00000000000000000000000200000000 -CT=EF05530948B80915028BB2B6FE429380 - -I=96 -PT=00000000000000000000000100000000 -CT=72535B7FE0F0F777CEDCD55CD77E2DDF - -I=97 -PT=00000000000000000000000080000000 -CT=3423D8EFC31FA2F4C365C77D8F3B5C63 - -I=98 -PT=00000000000000000000000040000000 -CT=DE0E51C264663F3C5DBC59580A98D8E4 - -I=99 -PT=00000000000000000000000020000000 -CT=B2D9391166680947AB09264156719679 - -I=100 -PT=00000000000000000000000010000000 -CT=10DB79F23B06D263835C424AF749ADB7 - -I=101 -PT=00000000000000000000000008000000 -CT=DDF72D27E6B01EC107EA3E005B59563B - -I=102 -PT=00000000000000000000000004000000 -CT=8266B57485A5954A4236751DE07F6694 - -I=103 -PT=00000000000000000000000002000000 -CT=669A501E1F1ADE6E5523DE01D6DBC987 - -I=104 -PT=00000000000000000000000001000000 -CT=C20C48F2989725D461D1DB589DC0896E - -I=105 -PT=00000000000000000000000000800000 -CT=DE35158E7810ED1191825D2AA98FA97D - -I=106 -PT=00000000000000000000000000400000 -CT=4FE294F2C0F34D0671B693A237EBDDC8 - -I=107 -PT=00000000000000000000000000200000 -CT=087AE74B10CCBFDF6739FEB9559C01A4 - -I=108 -PT=00000000000000000000000000100000 -CT=5DC278970B7DEF77A5536C77AB59C207 - -I=109 -PT=00000000000000000000000000080000 -CT=7607F078C77085184EAA9B060C1FBFFF - -I=110 -PT=00000000000000000000000000040000 -CT=9DB841531BCBE7998DAD19993FB3CC00 - -I=111 -PT=00000000000000000000000000020000 -CT=D6A089B654854A94560BAE13298835B8 - -I=112 -PT=00000000000000000000000000010000 -CT=E1E223C4CF90CC5D195B370D65114622 - -I=113 -PT=00000000000000000000000000008000 -CT=1CBED73C50D053BDAD372CEEE54836A1 - -I=114 -PT=00000000000000000000000000004000 -CT=D309E69376D257ADF2BFDA152B26555F - -I=115 -PT=00000000000000000000000000002000 -CT=740F7649117F0DEE6EAA7789A9994C36 - -I=116 -PT=00000000000000000000000000001000 -CT=76AE64417C297184D668C5FD908B3CE5 - -I=117 -PT=00000000000000000000000000000800 -CT=6095FEA4AA8035591F1787A819C48787 - -I=118 -PT=00000000000000000000000000000400 -CT=D1FF4E7ACD1C79967FEBAB0F7465D450 - -I=119 -PT=00000000000000000000000000000200 -CT=5F5AD3C42B9489557BB63BF49ECF5F8A - -I=120 -PT=00000000000000000000000000000100 -CT=FB56CC09B680B1D07C5A52149E29F07C - -I=121 -PT=00000000000000000000000000000080 -CT=FF49B8DF4A97CBE03833E66197620DAD - -I=122 -PT=00000000000000000000000000000040 -CT=5E070ADE533D2E090ED0F5BE13BC0983 - -I=123 -PT=00000000000000000000000000000020 -CT=3AB4FB1D2B7BA376590A2C241D1F508D - -I=124 -PT=00000000000000000000000000000010 -CT=58B2431BC0BEDE02550F40238969EC78 - -I=125 -PT=00000000000000000000000000000008 -CT=0253786E126504F0DAB90C48A30321DE - -I=126 -PT=00000000000000000000000000000004 -CT=200211214E7394DA2089B6ACD093ABE0 - -I=127 -PT=00000000000000000000000000000002 -CT=0388DACE60B6A392F328C2B971B2FE78 - -I=128 -PT=00000000000000000000000000000001 -CT=58E2FCCEFA7E3061367F1D57A4E7455A - -========== - -KEYSIZE=256 - -KEY=0000000000000000000000000000000000000000000000000000000000000000 - -I=1 -PT=80000000000000000000000000000000 -CT=DDC6BF790C15760D8D9AEB6F9A75FD4E - -I=2 -PT=40000000000000000000000000000000 -CT=C7098C217C334D0C9BDF37EA13B0822C - -I=3 -PT=20000000000000000000000000000000 -CT=60F0FB0D4C56A8D4EEFEC5264204042D - -I=4 -PT=10000000000000000000000000000000 -CT=73376FBBF654D0686E0E84001477106B - -I=5 -PT=08000000000000000000000000000000 -CT=2F443B52BA5F0C6EA0602C7C4FD259B6 - -I=6 -PT=04000000000000000000000000000000 -CT=75D11B0E3A68C4223D88DBF017977DD7 - -I=7 -PT=02000000000000000000000000000000 -CT=779B38D15BFFB63D8D609D551A5CC98E - -I=8 -PT=01000000000000000000000000000000 -CT=5275F3D86B4FB8684593133EBFA53CD3 - -I=9 -PT=00800000000000000000000000000000 -CT=1CEF2074B336CEC62F12DEA2F6AB1481 - -I=10 -PT=00400000000000000000000000000000 -CT=1AEF5ABBAD9D7160874578DCD8BAE172 - -I=11 -PT=00200000000000000000000000000000 -CT=46C525DB17E72F26BF03216846B6F609 - -I=12 -PT=00100000000000000000000000000000 -CT=E24411F941BBE08788781E3EC52CBAA4 - -I=13 -PT=00080000000000000000000000000000 -CT=83A3DEDD1DD27018F6A6477E40527581 - -I=14 -PT=00040000000000000000000000000000 -CT=B68F8A2CDBAB0C923C67FC8F0F1087DE - -I=15 -PT=00020000000000000000000000000000 -CT=649944A70C32BF87A7409E7AE128FDE8 - -I=16 -PT=00010000000000000000000000000000 -CT=2846526D67387539C89314DE9E0C2D02 - -I=17 -PT=00008000000000000000000000000000 -CT=A9A0B8402E53C70DD1688054BA58DDFD - -I=18 -PT=00004000000000000000000000000000 -CT=4A72E6E1B79C83AC4BE3EBA5699EED48 - -I=19 -PT=00002000000000000000000000000000 -CT=B0E36B867BA4FF2B77D0614B0E364E4C - -I=20 -PT=00001000000000000000000000000000 -CT=49B57DE141F6418E3090F24DDD4014B6 - -I=21 -PT=00000800000000000000000000000000 -CT=A6C0D5B9797258E1987AC5F6CD20146D - -I=22 -PT=00000400000000000000000000000000 -CT=426CF4BDCAA369175965D26E7C71EEA2 - -I=23 -PT=00000200000000000000000000000000 -CT=E27F484CE54BC99BC1A52BDA3B518A26 - -I=24 -PT=00000100000000000000000000000000 -CT=D16D186284C7E6EE64B8104E0EF20BA5 - -I=25 -PT=00000080000000000000000000000000 -CT=6431F8538AD54E1E044A9F71F8EF556B - -I=26 -PT=00000040000000000000000000000000 -CT=ECD57CEB451D27EB96C55B2042257E8E - -I=27 -PT=00000020000000000000000000000000 -CT=4F0F188DC911B1954AFBC734C9F68872 - -I=28 -PT=00000010000000000000000000000000 -CT=B54DEF0337626B65614E81EDFDE620F3 - -I=29 -PT=00000008000000000000000000000000 -CT=6655D8074CAE0B90B0D3A3FE72D4D9DB - -I=30 -PT=00000004000000000000000000000000 -CT=C6B74B6B9EB4FC0C9A237DB1B616D09A - -I=31 -PT=00000002000000000000000000000000 -CT=D7B5D076EA56EC2B20791D7AD51CCF8F - -I=32 -PT=00000001000000000000000000000000 -CT=FE160C224BF003CE3BDDC90CB52ED22C - -I=33 -PT=00000000800000000000000000000000 -CT=5E00DA9BA94B5EC0D258D8A8002E0F6A - -I=34 -PT=00000000400000000000000000000000 -CT=09AC6DCFF4DACFF1651E2BA212A292A3 - -I=35 -PT=00000000200000000000000000000000 -CT=B283617E318D99AF83A05D9810BA89F7 - -I=36 -PT=00000000100000000000000000000000 -CT=0B5F70CCB40B0EF2538AE9B4A9770B35 - -I=37 -PT=00000000080000000000000000000000 -CT=43282BF180248FB517839B37F4DDAAE4 - -I=38 -PT=00000000040000000000000000000000 -CT=DDBD534C8B2E6D30A268F88C55AD765B - -I=39 -PT=00000000020000000000000000000000 -CT=A41A164E50EC2D9F175E752B755E0B5C - -I=40 -PT=00000000010000000000000000000000 -CT=37BFF99FF2F7AA97779E4ADF6F13FB10 - -I=41 -PT=00000000008000000000000000000000 -CT=9BA4F7BD298152903A683C4CEC669216 - -I=42 -PT=00000000004000000000000000000000 -CT=5FB750C7CE10DE7B4504248914D0DA06 - -I=43 -PT=00000000002000000000000000000000 -CT=3E748BFA108E086F51D56EC74A9E0FB9 - -I=44 -PT=00000000001000000000000000000000 -CT=31D4E56B99F5B73C1B8437DF332AFB98 - -I=45 -PT=00000000000800000000000000000000 -CT=9DC6717B84FC55D266E7B1D9B5C52A5F - -I=46 -PT=00000000000400000000000000000000 -CT=8EF8BA007F23C0A50FC120E07041BCCD - -I=47 -PT=00000000000200000000000000000000 -CT=C58F38E1839FC1918A12B8C9E88C66B6 - -I=48 -PT=00000000000100000000000000000000 -CT=B695D72A3FCF508C4050E12E40061C2D - -I=49 -PT=00000000000080000000000000000000 -CT=5D2736AD478A50583BC8C11BEFF16D7A - -I=50 -PT=00000000000040000000000000000000 -CT=DF0EACA8F17847AD41F9578F14C7B56B - -I=51 -PT=00000000000020000000000000000000 -CT=E5AA14AD48AD0A3C47CC35D5F8020E51 - -I=52 -PT=00000000000010000000000000000000 -CT=11BE6C8F58EBD8CEF1A53F591A68E8CE - -I=53 -PT=00000000000008000000000000000000 -CT=ECFE7BAFCBF42C1FEE015488770B3053 - -I=54 -PT=00000000000004000000000000000000 -CT=E552649F8D8EC4A1E1CD6DF50B6E6777 - -I=55 -PT=00000000000002000000000000000000 -CT=521C0629DE93B9119CDB1DDC5809DDEA - -I=56 -PT=00000000000001000000000000000000 -CT=CB38A62A0BAB1784156BA038CBA99BF6 - -I=57 -PT=00000000000000800000000000000000 -CT=76CCEE8AAACD394DE1EEF3DDA10CB54B - -I=58 -PT=00000000000000400000000000000000 -CT=6AFF910FA1D5673140E2DB59B8416049 - -I=59 -PT=00000000000000200000000000000000 -CT=064A12C0EF73FB386801BF4F35F3120D - -I=60 -PT=00000000000000100000000000000000 -CT=2240E374929D5B1BB8FF0FFDDDF640EC - -I=61 -PT=00000000000000080000000000000000 -CT=D4BA15C904C7692185DE85C02052E180 - -I=62 -PT=00000000000000040000000000000000 -CT=1714A315AB0166728A44CD91D4AE9018 - -I=63 -PT=00000000000000020000000000000000 -CT=6C970BDD9F0E222722EA31A1D12DD0AD - -I=64 -PT=00000000000000010000000000000000 -CT=F5956EDF02BD36A401BBB6CE77C3D3FB - -I=65 -PT=00000000000000008000000000000000 -CT=0CA11F122CCD7C259DC597EED3DF9BC4 - -I=66 -PT=00000000000000004000000000000000 -CT=50109AB4912AD2560B206F331B62EB6C - -I=67 -PT=00000000000000002000000000000000 -CT=DBE7C91A4175614889A2D4BEFD64845E - -I=68 -PT=00000000000000001000000000000000 -CT=0D3322853A571A6B46B79C0228E0DD25 - -I=69 -PT=00000000000000000800000000000000 -CT=96E4EE0BB9A11C6FB8522F285BADDEB6 - -I=70 -PT=00000000000000000400000000000000 -CT=96705C52D2CFCE82E630C93477C79C49 - -I=71 -PT=00000000000000000200000000000000 -CT=C50130AED6A126149D71F3888C83C232 - -I=72 -PT=00000000000000000100000000000000 -CT=4816EFE3DEB380566EBA0C17BF582090 - -I=73 -PT=00000000000000000080000000000000 -CT=0390857B4C8C98E4CF7A2B6F3394C507 - -I=74 -PT=00000000000000000040000000000000 -CT=422E73A02025EBE8B8B5D6E0FA24FCB2 - -I=75 -PT=00000000000000000020000000000000 -CT=3271AA7F4BF1D7C38050A43076D4FF76 - -I=76 -PT=00000000000000000010000000000000 -CT=D2074946F0D37B8975607BFC2E70234C - -I=77 -PT=00000000000000000008000000000000 -CT=1A509194C1270AB92E5A42D3A9F8D98B - -I=78 -PT=00000000000000000004000000000000 -CT=512438946360CCC4A5C6D73F6EED7130 - -I=79 -PT=00000000000000000002000000000000 -CT=98CFCDEC46EBEA1A286B3004F2746A0D - -I=80 -PT=00000000000000000001000000000000 -CT=A1CF369949677A3AF3D58E3EABF2741B - -I=81 -PT=00000000000000000000800000000000 -CT=D84C2E1A0E4A52166FA8FF6889D1E5E2 - -I=82 -PT=00000000000000000000400000000000 -CT=4AD91CCEEF60119B5078FD162D2735DE - -I=83 -PT=00000000000000000000200000000000 -CT=2860793D818E97AAFF1D339D7702438D - -I=84 -PT=00000000000000000000100000000000 -CT=6F9068BE73364AE250D89D78A6C9CE6F - -I=85 -PT=00000000000000000000080000000000 -CT=024FC3FEF4883FEB1A8DD005305FECCE - -I=86 -PT=00000000000000000000040000000000 -CT=08A61FE0816D75EA15EB3C9FB9CCDED6 - -I=87 -PT=00000000000000000000020000000000 -CT=449C86DFA13F260175CE39797686FFA4 - -I=88 -PT=00000000000000000000010000000000 -CT=4FFFFC29A59858E1133F2BFB1A8A4817 - -I=89 -PT=00000000000000000000008000000000 -CT=19425D1F6480B25096561295697DC2B7 - -I=90 -PT=00000000000000000000004000000000 -CT=31974727ECDD2C77C3A428FC3A8CB3FC - -I=91 -PT=00000000000000000000002000000000 -CT=A57CD704B3C95E744D08DF443458F2F5 - -I=92 -PT=00000000000000000000001000000000 -CT=486D8C193DB1ED73ACB17990442FC40B - -I=93 -PT=00000000000000000000000800000000 -CT=5E4DBF4E83AB3BC055B9FCC7A6B3A763 - -I=94 -PT=00000000000000000000000400000000 -CT=ACF2E0A693FBBCBA4D41B861E0D89E37 - -I=95 -PT=00000000000000000000000200000000 -CT=32A7CB2AE066A51D2B78FC4B4CFCB608 - -I=96 -PT=00000000000000000000000100000000 -CT=677D494DBB73CAF55C1990158DA12F14 - -I=97 -PT=00000000000000000000000080000000 -CT=082A0D2367512ADF0D75A151BFBE0A17 - -I=98 -PT=00000000000000000000000040000000 -CT=5E5BB7337923C482CE8CBA249E6A8C7D - -I=99 -PT=00000000000000000000000020000000 -CT=D3001BA7C7026EE3E5003179530AFCFC - -I=100 -PT=00000000000000000000000010000000 -CT=46EC44F8931E629FE8FD8961312EDDE1 - -I=101 -PT=00000000000000000000000008000000 -CT=C5F8ECD79C7B30E81D17E32079969310 - -I=102 -PT=00000000000000000000000004000000 -CT=5B8AD6919E24CAEBCC55401AEE0C9802 - -I=103 -PT=00000000000000000000000002000000 -CT=C2302B7E701B5CC7F8B29E3516DBBFA6 - -I=104 -PT=00000000000000000000000001000000 -CT=A1D04D6A76F9F7A94D49FAA64A87F244 - -I=105 -PT=00000000000000000000000000800000 -CT=7FB6F92D35B5CB6C631600EDB9E860BA - -I=106 -PT=00000000000000000000000000400000 -CT=B2EF7078BCFACE07AEEC3F9B48830EB3 - -I=107 -PT=00000000000000000000000000200000 -CT=F475A7493D24C7036E53390374C378B3 - -I=108 -PT=00000000000000000000000000100000 -CT=B36802AC987377A37BD8EADC97C57D60 - -I=109 -PT=00000000000000000000000000080000 -CT=ADDCD3D19689C4DDC738CE5F69DC9505 - -I=110 -PT=00000000000000000000000000040000 -CT=0DAF8CA22884915403C0F0BB1F4BD74F - -I=111 -PT=00000000000000000000000000020000 -CT=4AF36BAE2660503B3248E4685059FD05 - -I=112 -PT=00000000000000000000000000010000 -CT=7D5631814DD8E917D97A0D514C743971 - -I=113 -PT=00000000000000000000000000008000 -CT=BC3352500FC0CBB9DB5B5F6B491C1BE8 - -I=114 -PT=00000000000000000000000000004000 -CT=6A4A30BA87E87AF65C90AEB7AFEDC76B - -I=115 -PT=00000000000000000000000000002000 -CT=77E6125897668AC8E73E8C79A6FF8336 - -I=116 -PT=00000000000000000000000000001000 -CT=3FA9D39104EBB323C7AAAA248960DD1E - -I=117 -PT=00000000000000000000000000000800 -CT=FAD75AD76AB10ADC49036B250E229D39 - -I=118 -PT=00000000000000000000000000000400 -CT=2FACAA5FE35B228A16AC74088D702EC4 - -I=119 -PT=00000000000000000000000000000200 -CT=88B6CBCFDFEF8AD91720A1BB69A1F33E - -I=120 -PT=00000000000000000000000000000100 -CT=C7E9D250998632D444356242EF04058D - -I=121 -PT=00000000000000000000000000000080 -CT=B14DAD8D3D9153F46C0D3A1AD63C7A05 - -I=122 -PT=00000000000000000000000000000040 -CT=60ABA678A506608D0845966D29B5F790 - -I=123 -PT=00000000000000000000000000000020 -CT=482DC43F2388EF25D24144E144BD834E - -I=124 -PT=00000000000000000000000000000010 -CT=1490A05A7CEE43BDE98B56E309DC0126 - -I=125 -PT=00000000000000000000000000000008 -CT=ABFA77CD6E85DA245FB0BDC5E52CFC29 - -I=126 -PT=00000000000000000000000000000004 -CT=DD4AB1284D4AE17B41E85924470C36F7 - -I=127 -PT=00000000000000000000000000000002 -CT=CEA7403D4D606B6E074EC5D3BAF39D18 - -I=128 -PT=00000000000000000000000000000001 -CT=530F8AFBC74536B9A963B4F1C4CB738B - -========== diff --git a/src/lib/crypto/aes/test/Readme.txt b/src/lib/crypto/aes/test/Readme.txt deleted file mode 100644 index 69dbb5b9c..000000000 --- a/src/lib/crypto/aes/test/Readme.txt +++ /dev/null @@ -1,22 +0,0 @@ -README - -Algorithm: Rijndael -Submitter: Joan Daemen and Vincent Rijmen - -Test values: Known Answer Tests and Monte Carlo Tests ------------------------------------------------------------ - -This directory contains the following files: - -Readme.txt: This file. - -cbc_d_m.txt: Test values for the CBC decryption MCT. -cbc_e_m.txt: Test values for the CBC encryption MCT. -ecb_d_m.txt: Test values for the ECB decryption MCT. -ecb_e_m.txt: Test values for the ECB encryption MCT. -ecb_vk.txt: Test values for the Variable Key KAT. -ecb_vt.txt: Test values for the Variable Text KAT. -ecb_iv.txt: Test values for the Intermediate Values KAT. -ecb_iv.readme: Detailed information about the Intermediate Values KAT. -ecb_tbl.txt: Test values for the Table KAT. - diff --git a/src/lib/crypto/aes/test/cbc_d_m.txt b/src/lib/crypto/aes/test/cbc_d_m.txt deleted file mode 100644 index e216f3b87..000000000 --- a/src/lib/crypto/aes/test/cbc_d_m.txt +++ /dev/null @@ -1,7224 +0,0 @@ - -========================= - -FILENAME: "cbc_d_m.txt" - -Cipher Block Chaining (CBC) Mode - DECRYPTION -Monte Carlo Test - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 - -I=0 -KEY=00000000000000000000000000000000 -IV=00000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=FACA37E0B0C85373DF706E73F7C9AF86 - -I=1 -KEY=FACA37E0B0C85373DF706E73F7C9AF86 -IV=52D0C29FF8793A519BD6A8289FC80E6A -CT=FACA37E0B0C85373DF706E73F7C9AF86 -PT=F5372F9735C5685F1DA362AF6ECB2940 - -I=2 -KEY=0FFD1877850D3B2CC2D30CDC990286C6 -IV=DD74BB1AC6F0F866C7992C61F59D5594 -CT=F5372F9735C5685F1DA362AF6ECB2940 -PT=5496A4C29C7670F61B5D5DF6181F5947 - -I=3 -KEY=5B6BBCB5197B4BDAD98E512A811DDF81 -IV=3795C88134F7C011433397D1443FEB3A -CT=5496A4C29C7670F61B5D5DF6181F5947 -PT=940CC5A2AF4F1F8D1862B47BCF63E4CA - -I=4 -KEY=CF677917B6345457C1ECE5514E7E3B4B -IV=0FC1413900225B47AF9E139E1650EA23 -CT=940CC5A2AF4F1F8D1862B47BCF63E4CA -PT=08832415D97820DE305A58A9AD111A9E - -I=5 -KEY=C7E45D026F4C7489F1B6BDF8E36F21D5 -IV=3032F64674FA243D61DF8C16313D81F3 -CT=08832415D97820DE305A58A9AD111A9E -PT=BD4089775FD1BDB0A6C4F36D1DDAA93E - -I=6 -KEY=7AA4D475309DC93957724E95FEB588EB -IV=47D7F440B43888F173AE5A492F1A99F8 -CT=BD4089775FD1BDB0A6C4F36D1DDAA93E -PT=AB9955F74612859267D61FEA85A75ADC - -I=7 -KEY=D13D8182768F4CAB30A4517F7B12D237 -IV=6D9E57242195D27771D1C7A748378AB0 -CT=AB9955F74612859267D61FEA85A75ADC -PT=168F213FB678D8A46D0E55EFD1C49BB3 - -I=8 -KEY=C7B2A0BDC0F7940F5DAA0490AAD64984 -IV=1B98968FB5ABD95930525C1257DEB364 -CT=168F213FB678D8A46D0E55EFD1C49BB3 -PT=3C4CEECFF9560501C5D8C901D87C8E7B - -I=9 -KEY=FBFE4E7239A1910E9872CD9172AAC7FF -IV=35EB7B6D3F63AAE927C5346C9C2CB91D -CT=3C4CEECFF9560501C5D8C901D87C8E7B -PT=9D206BE0CC60296BF3A486A8C69778EF - -I=10 -KEY=66DE2592F5C1B8656BD64B39B43DBF10 -IV=226646B36D8E9B9279F94378CCBF8FBA -CT=9D206BE0CC60296BF3A486A8C69778EF -PT=9DA7B8094BD0F0BEA26848C84B8E083C - -I=11 -KEY=FB799D9BBE1148DBC9BE03F1FFB3B72C -IV=3E3A2B0E1C70A19BCD7222708AA94F26 -CT=9DA7B8094BD0F0BEA26848C84B8E083C -PT=6A93B2F318C14C2D3E58455B86A4F5D7 - -I=12 -KEY=91EA2F68A6D004F6F7E646AA791742FB -IV=1F256942B3CD691858A20664BB24545E -CT=6A93B2F318C14C2D3E58455B86A4F5D7 -PT=4A19AC6C6FEB654D3675A2BE32E5A820 - -I=13 -KEY=DBF38304C93B61BBC193E4144BF2EADB -IV=631F2EDE05C1C950BCE67DF53BA53ED6 -CT=4A19AC6C6FEB654D3675A2BE32E5A820 -PT=799EAB8E9C864A13490FD6B089F764C5 - -I=14 -KEY=A26D288A55BD2BA8889C32A4C2058E1E -IV=F6AD064E0DBF4AF4AA5165E1FE0E86FA -CT=799EAB8E9C864A13490FD6B089F764C5 -PT=2FA3F38CA1216C6D911C1779F333413E - -I=15 -KEY=8DCEDB06F49C47C5198025DD3136CF20 -IV=DA039AC5F4EDCD84472B23CFA1252EC3 -CT=2FA3F38CA1216C6D911C1779F333413E -PT=2FC703AD6A7DAF8B0BDDD8586C1D67D0 - -I=16 -KEY=A209D8AB9EE1E84E125DFD855D2BA8F0 -IV=341B5FDA8AB434461A7B7A87EF0C530C -CT=2FC703AD6A7DAF8B0BDDD8586C1D67D0 -PT=54723CABFBE32DEEDFEBF4292A5710FA - -I=17 -KEY=F67BE4006502C5A0CDB609AC777CB80A -IV=2C42AD577B0BE057555C3FCB6FC0089E -CT=54723CABFBE32DEEDFEBF4292A5710FA -PT=6B1E2A8C1A9CBB95D1B34AAFE15A78D3 - -I=18 -KEY=9D65CE8C7F9E7E351C0543039626C0D9 -IV=E5E06583A834BF16118ED5FA401A2D6F -CT=6B1E2A8C1A9CBB95D1B34AAFE15A78D3 -PT=F4E57BFAB65375B3AD49CD78814F0C16 - -I=19 -KEY=6980B576C9CD0B86B14C8E7B1769CCCF -IV=71E59389FF6F992225B32960593F9362 -CT=F4E57BFAB65375B3AD49CD78814F0C16 -PT=90A31B5934FCF6822526C973114BD953 - -I=20 -KEY=F923AE2FFD31FD04946A47080622159C -IV=2A4B31492B9BAEC402C255978BB96D40 -CT=90A31B5934FCF6822526C973114BD953 -PT=61F88BA8D438A0FD23F0101465C7FD4E - -I=21 -KEY=98DB258729095DF9B79A571C63E5E8D2 -IV=607640CEA12DCF7F188B2B65C7F4153D -CT=61F88BA8D438A0FD23F0101465C7FD4E -PT=F62D206DF53F41CA898F3A8EB6A843FF - -I=22 -KEY=6EF605EADC361C333E156D92D54DAB2D -IV=D69C32E12303361B465BE9A484BCA723 -CT=F62D206DF53F41CA898F3A8EB6A843FF -PT=364BC3F9FDA5FB1AEEA7691550A58320 - -I=23 -KEY=58BDC6132193E729D0B2048785E8280D -IV=C207B8347B8DB8BC6845827BB6986B0E -CT=364BC3F9FDA5FB1AEEA7691550A58320 -PT=DAA6386A073CD1653E9A9DB0A97970BA - -I=24 -KEY=821BFE7926AF364CEE2899372C9158B7 -IV=6C5D2B186393280253D6922A8421C3A9 -CT=DAA6386A073CD1653E9A9DB0A97970BA -PT=AAF74F0E0A0141A811853AE8B120BC00 - -I=25 -KEY=28ECB1772CAE77E4FFADA3DF9DB1E4B7 -IV=3CB62EF0E649027DDDB76206D0F4D355 -CT=AAF74F0E0A0141A811853AE8B120BC00 -PT=22A0F9611447C1A85F397DD79E3206F9 - -I=26 -KEY=0A4C481638E9B64CA094DE080383E24E -IV=C4320FA90686AE0F9E979CBF1391F6D6 -CT=22A0F9611447C1A85F397DD79E3206F9 -PT=1871ABDEAA7E057E76D41ED9191FAC39 - -I=27 -KEY=123DE3C89297B332D640C0D11A9C4E77 -IV=FBFD18AADF7C5E8E96EB976A535BF312 -CT=1871ABDEAA7E057E76D41ED9191FAC39 -PT=BF52994F41B1DEF78C6A057642C52D89 - -I=28 -KEY=AD6F7A87D3266DC55A2AC5A7585963FE -IV=C195141578ADF4C92113C8A9A63FF072 -CT=BF52994F41B1DEF78C6A057642C52D89 -PT=3EAFB00E3B4A0E6DF74743A7EDAD0FE4 - -I=29 -KEY=93C0CA89E86C63A8AD6D8600B5F46C1A -IV=D1C4E98C4A9AC79B7CCBC052ACF78913 -CT=3EAFB00E3B4A0E6DF74743A7EDAD0FE4 -PT=4393544AB2387A93496D683C2B8970C7 - -I=30 -KEY=D0539EC35A54193BE400EE3C9E7D1CDD -IV=80517C6341DAF4DCBCCAE452F3040147 -CT=4393544AB2387A93496D683C2B8970C7 -PT=51DAC594293708A918E9EFC04F7F2F1C - -I=31 -KEY=81895B5773631192FCE901FCD10233C1 -IV=69DE50406B4E3E8A94C1367E1E3D5464 -CT=51DAC594293708A918E9EFC04F7F2F1C -PT=035B64F06C8166000C82BF15CC88446D - -I=32 -KEY=82D23FA71FE27792F06BBEE91D8A77AC -IV=8EA2E38145BBD79881B7EB31B8818A21 -CT=035B64F06C8166000C82BF15CC88446D -PT=F3EFFA770A21741551F309E1967CC2E4 - -I=33 -KEY=713DC5D015C30387A198B7088BF6B548 -IV=0DCAA309668E11509828152553FF2306 -CT=F3EFFA770A21741551F309E1967CC2E4 -PT=62BA0548E7AD136BEB4E38AECD7942D9 - -I=34 -KEY=1387C098F26E10EC4AD68FA6468FF791 -IV=D031FCA5F3C88926CC3BDDC448537B69 -CT=62BA0548E7AD136BEB4E38AECD7942D9 -PT=38E3D4C7AF0C3E494F1D580AC5430634 - -I=35 -KEY=2B64145F5D622EA505CBD7AC83CCF1A5 -IV=6FFA5A45EDA60294B0224EEB8C36C455 -CT=38E3D4C7AF0C3E494F1D580AC5430634 -PT=2231EB6A6588CBCB56B930B7F1CF9E04 - -I=36 -KEY=0955FF3538EAE56E5372E71B72036FA1 -IV=B5375674631ECC3334A318993CB81F9A -CT=2231EB6A6588CBCB56B930B7F1CF9E04 -PT=59692274C130D6820287EA10F7E64602 - -I=37 -KEY=503CDD41F9DA33EC51F50D0B85E529A3 -IV=A93D6E028B5C2BD17A29C6CA1617A0A2 -CT=59692274C130D6820287EA10F7E64602 -PT=5975A95327DE7749EA8DEDC580E5E8C7 - -I=38 -KEY=09497412DE0444A5BB78E0CE0500C164 -IV=26E00CB161145FCD00C39BC4FB1E5CBB -CT=5975A95327DE7749EA8DEDC580E5E8C7 -PT=D1F7E36BC8FF4439820CB617E745A9CC - -I=39 -KEY=D8BE977916FB009C397456D9E24568A8 -IV=72E78D9E15C8FBA864C6C40CEBB190B8 -CT=D1F7E36BC8FF4439820CB617E745A9CC -PT=76FB4F20C902E9AA89854440631092B5 - -I=40 -KEY=AE45D859DFF9E936B0F112998155FA1D -IV=4B6C585FEF52490EA62BAAD08FAA3DCF -CT=76FB4F20C902E9AA89854440631092B5 -PT=6D7D4487DCD624B2FC5002DFE7D2D347 - -I=41 -KEY=C3389CDE032FCD844CA110466687295A -IV=E94FD23A598DDE077CD1DAEE97FDADD9 -CT=6D7D4487DCD624B2FC5002DFE7D2D347 -PT=7297F8F85B21E1A5CB902DCC5F6738F9 - -I=42 -KEY=B1AF6426580E2C2187313D8A39E011A3 -IV=86E495D31EEFCBC30064414FBD78FAE5 -CT=7297F8F85B21E1A5CB902DCC5F6738F9 -PT=4A6978AACC6968931FB1B83D53D31FEF - -I=43 -KEY=FBC61C8C946744B2988085B76A330E4C -IV=6BA7664AB5ED4F7956D6C3FAA7C42961 -CT=4A6978AACC6968931FB1B83D53D31FEF -PT=6B63FAAF9DB43A2B6025F29B1D6A331C - -I=44 -KEY=90A5E62309D37E99F8A5772C77593D50 -IV=37D17D1702EA34A3C75376AA0F9D24AD -CT=6B63FAAF9DB43A2B6025F29B1D6A331C -PT=8317A07BEE0BF16B88D7D197884AC6CF - -I=45 -KEY=13B24658E7D88FF27072A6BBFF13FB9F -IV=29B89B238062495C260AF44C63AA809F -CT=8317A07BEE0BF16B88D7D197884AC6CF -PT=0443BFEBCA7C85CBD0CB66AB9D75425D - -I=46 -KEY=17F1F9B32DA40A39A0B9C0106266B9C2 -IV=08CF82854AE07429C4A866AA727CEA2E -CT=0443BFEBCA7C85CBD0CB66AB9D75425D -PT=6B1EB033CB844F9BDD96BA2C67D139C7 - -I=47 -KEY=7CEF4980E62045A27D2F7A3C05B78005 -IV=05579F3E0017EBF6083756DC0A50A2E9 -CT=6B1EB033CB844F9BDD96BA2C67D139C7 -PT=E7904CBFB41EBE4178B4D633AFC9B311 - -I=48 -KEY=9B7F053F523EFBE3059BAC0FAA7E3314 -IV=E6B2CB0CE57E02A230DCD16C08614823 -CT=E7904CBFB41EBE4178B4D633AFC9B311 -PT=96EAAA148F05FAD1F0FC06E135EC5DF8 - -I=49 -KEY=0D95AF2BDD3B0132F567AAEE9F926EEC -IV=4268294B10AD58BE9E570A9485963682 -CT=96EAAA148F05FAD1F0FC06E135EC5DF8 -PT=9F2F712F62DE747EE479A0A74384B196 - -I=50 -KEY=92BADE04BFE5754C111E0A49DC16DF7A -IV=A5C558F5D4658089CD9FB295EDAE64DB -CT=9F2F712F62DE747EE479A0A74384B196 -PT=9CF7F00094C4E2D96D752C2312FC135E - -I=51 -KEY=0E4D2E042B2197957C6B266ACEEACC24 -IV=1CE301F294BDF4C906E5F0A6FA7C22BB -CT=9CF7F00094C4E2D96D752C2312FC135E -PT=ABA58D548DB6E9BE977FDDC85E16C2DE - -I=52 -KEY=A5E8A350A6977E2BEB14FBA290FC0EFA -IV=66C1FF1E4B52A3542B48306EC33F171D -CT=ABA58D548DB6E9BE977FDDC85E16C2DE -PT=802948E1A5177FBE97ABA26B996FDF1B - -I=53 -KEY=25C1EBB1038001957CBF59C90993D1E1 -IV=197A546DEB2E19E17507276B9ED95135 -CT=802948E1A5177FBE97ABA26B996FDF1B -PT=67D931C0946ECDF2F8E41000726D1A56 - -I=54 -KEY=4218DA7197EECC67845B49C97BFECBB7 -IV=D11DA3CE92ADA0686F7BF12A4796D9F7 -CT=67D931C0946ECDF2F8E41000726D1A56 -PT=386C68821385E8CFCDD5678FE2AA89F8 - -I=55 -KEY=7A74B2F3846B24A8498E2E469954424F -IV=4DDE413EBC3F30E2F3A9F48DA1258DAF -CT=386C68821385E8CFCDD5678FE2AA89F8 -PT=1638C741EFE3B1CC45C7754783350825 - -I=56 -KEY=6C4C75B26B8895640C495B011A614A6A -IV=5B4F013B085E3A04A16A409E8C3BB270 -CT=1638C741EFE3B1CC45C7754783350825 -PT=91AB00C3828D3DF72BEC487EF4652567 - -I=57 -KEY=FDE77571E905A89327A5137FEE046F0D -IV=98074F522144682FF1498C61581F8B0E -CT=91AB00C3828D3DF72BEC487EF4652567 -PT=BC5BA874D2F3039837528993FB275EBA - -I=58 -KEY=41BCDD053BF6AB0B10F79AEC152331B7 -IV=B65C1A6F80CA024B92176D57061ECDFE -CT=BC5BA874D2F3039837528993FB275EBA -PT=B7DE1BEE1867F4DC3F974E0D8B416DB0 - -I=59 -KEY=F662C6EB23915FD72F60D4E19E625C07 -IV=7268C08FA807D83C9830F54A59F32662 -CT=B7DE1BEE1867F4DC3F974E0D8B416DB0 -PT=19769B9EB30B8DE5FD640ACE78F01F0A - -I=60 -KEY=EF145D75909AD232D204DE2FE692430D -IV=B260792BAB22BAAB6CCF3AE1DD3A0F85 -CT=19769B9EB30B8DE5FD640ACE78F01F0A -PT=2079F2C0A0DE164CD41FCE29D8CE3178 - -I=61 -KEY=CF6DAFB53044C47E061B10063E5C7275 -IV=6ABCE7B41E112B91B8E6BC0DBE37600C -CT=2079F2C0A0DE164CD41FCE29D8CE3178 -PT=0D3A678FAB06E743A9134C103B39B61D - -I=62 -KEY=C257C83A9B42233DAF085C160565C468 -IV=CEB1E776DBEF46BF8B949C0AF0EBEAD2 -CT=0D3A678FAB06E743A9134C103B39B61D -PT=80339ADB34BCDE3384D66170373AEEAC - -I=63 -KEY=426452E1AFFEFD0E2BDE3D66325F2AC4 -IV=EAAC373FCA05E610C1C5D4437AFD5631 -CT=80339ADB34BCDE3384D66170373AEEAC -PT=38D52D75E5783A08FBFE622633D6CF47 - -I=64 -KEY=7AB17F944A86C706D0205F400189E583 -IV=2A25ED6933CAAA95569ADA1AC7480942 -CT=38D52D75E5783A08FBFE622633D6CF47 -PT=3204F1EACBB520A69F0939F45BC82041 - -I=65 -KEY=48B58E7E8133E7A04F2966B45A41C5C2 -IV=9C6819799DAF61111ACC3C0ECEB0F8BF -CT=3204F1EACBB520A69F0939F45BC82041 -PT=16BD33EE541798BEE114E9D7F9141A9C - -I=66 -KEY=5E08BD90D5247F1EAE3D8F63A355DF5E -IV=C181F4DF1EE0E13BF76044A3DA5E3BC4 -CT=16BD33EE541798BEE114E9D7F9141A9C -PT=A0A68CF016C6AD8DAC4D5634EAADEBE5 - -I=67 -KEY=FEAE3160C3E2D2930270D95749F834BB -IV=2A4EE2CD011AF421616789DB790354FD -CT=A0A68CF016C6AD8DAC4D5634EAADEBE5 -PT=FCE7D92FD0B3A1C7920558F653E1019B - -I=68 -KEY=0249E84F13517354907581A11A193520 -IV=A7F7E2B701F34F308C0F28514DFAA15F -CT=FCE7D92FD0B3A1C7920558F653E1019B -PT=F16A084B2DE16D5E3E5405665DE3C623 - -I=69 -KEY=F323E0043EB01E0AAE2184C747FAF303 -IV=6D319828AAA75DFE99BEEDD21B983C7D -CT=F16A084B2DE16D5E3E5405665DE3C623 -PT=CE20AE629887DF02064F2D9DB092E1DB - -I=70 -KEY=3D034E66A637C108A86EA95AF76812D8 -IV=9484E76149F41901AF8AFD3152C56506 -CT=CE20AE629887DF02064F2D9DB092E1DB -PT=B457A655282213C1B7C5C2A206C7FCB9 - -I=71 -KEY=8954E8338E15D2C91FAB6BF8F1AFEE61 -IV=329E089DC915BD71B1F8D0713BFC4F97 -CT=B457A655282213C1B7C5C2A206C7FCB9 -PT=A89B8F7541FFF719A3C7DE1577CE1C3F - -I=72 -KEY=21CF6746CFEA25D0BC6CB5ED8661F25E -IV=FA381CAC5777234E6DF8A28A4E6671D8 -CT=A89B8F7541FFF719A3C7DE1577CE1C3F -PT=C4E73D25647350527C1F93F6C1D90296 - -I=73 -KEY=E5285A63AB997582C073261B47B8F0C8 -IV=082ACF3D2661514F0E00BDABC9015946 -CT=C4E73D25647350527C1F93F6C1D90296 -PT=34BF6DECECFE1C9AE3AA34B6DB3741EF - -I=74 -KEY=D197378F4767691823D912AD9C8FB127 -IV=3E56B658F899B6DBBA4EAF6E629F3555 -CT=34BF6DECECFE1C9AE3AA34B6DB3741EF -PT=FD86C78538176DC5D48BE2EC6B89D581 - -I=75 -KEY=2C11F00A7F7004DDF752F041F70664A6 -IV=765B823193F2738E6CACBB0154C941B1 -CT=FD86C78538176DC5D48BE2EC6B89D581 -PT=524E035AB9DEB29E467B9586A90F3A42 - -I=76 -KEY=7E5FF350C6AEB643B12965C75E095EE4 -IV=DE2B3EC0A3FF29EC67BBE1B124E9451A -CT=524E035AB9DEB29E467B9586A90F3A42 -PT=83DE1E768EED94BA09E623845A057834 - -I=77 -KEY=FD81ED26484322F9B8CF4643040C26D0 -IV=A5CF4D996D8460E71DDA938461BB884B -CT=83DE1E768EED94BA09E623845A057834 -PT=D8381D17B9BCF942F408DBB2B7B2D6B7 - -I=78 -KEY=25B9F031F1FFDBBB4CC79DF1B3BEF067 -IV=899696B8EDC4E8B60489742A2559C909 -CT=D8381D17B9BCF942F408DBB2B7B2D6B7 -PT=BF1D8175015D0A0341427DE1F7DDE379 - -I=79 -KEY=9AA47144F0A2D1B80D85E0104463131E -IV=AD76D13B2F2A3F938F5C810A38A83D09 -CT=BF1D8175015D0A0341427DE1F7DDE379 -PT=58114DEFF8CFF10F06B390EB01B13394 - -I=80 -KEY=C2B53CAB086D20B70B3670FB45D2208A -IV=9EC540C144AB57D4E5A9185F55E71E50 -CT=58114DEFF8CFF10F06B390EB01B13394 -PT=53E72B9603CE221F0160791DF51F6B3E - -I=81 -KEY=9152173D0BA302A80A5609E6B0CD4BB4 -IV=B780257238CA60FD998819B2D04CEB92 -CT=53E72B9603CE221F0160791DF51F6B3E -PT=AF0238554AAFFB0FB5DFAC35E3CE8F4C - -I=82 -KEY=3E502F68410CF9A7BF89A5D35303C4F8 -IV=3509BC884089ADEB90137A39AEA75CFC -CT=AF0238554AAFFB0FB5DFAC35E3CE8F4C -PT=20844D3F4F637B974D38B7E5F1C84205 - -I=83 -KEY=1ED462570E6F8230F2B11236A2CB86FD -IV=52BAB07EB72804630E4BD769F0172FDA -CT=20844D3F4F637B974D38B7E5F1C84205 -PT=68404E006D2F16572EDFAE636A62C537 - -I=84 -KEY=76942C5763409467DC6EBC55C8A943CA -IV=E4B417D85F36F3A25CF04AB05157F247 -CT=68404E006D2F16572EDFAE636A62C537 -PT=13C8DF4117D4EA3645F1825700F8FFA5 - -I=85 -KEY=655CF31674947E51999F3E02C851BC6F -IV=3FE0683442B6B5DF515209DE16F8FD4B -CT=13C8DF4117D4EA3645F1825700F8FFA5 -PT=42307D929439F2723202A5206D640431 - -I=86 -KEY=276C8E84E0AD8C23AB9D9B22A535B85E -IV=33FAD11D9D4057E7ED989F1520450C32 -CT=42307D929439F2723202A5206D640431 -PT=5ED8AF875ACF37BE8FAAC16D4AB8072B - -I=87 -KEY=79B42103BA62BB9D24375A4FEF8DBF75 -IV=807852E5AD0EB5E0C3A2AAF18DFB14F9 -CT=5ED8AF875ACF37BE8FAAC16D4AB8072B -PT=79C950A45ECDC8B676A5CFF324A81DA8 - -I=88 -KEY=007D71A7E4AF732B529295BCCB25A2DD -IV=516BC35B52C26C99E21C0147CB7DD99E -CT=79C950A45ECDC8B676A5CFF324A81DA8 -PT=595C3DDCFBD90661A3A70B94C470A26B - -I=89 -KEY=59214C7B1F76754AF1359E280F5500B6 -IV=FDABDD4BD60725F5E640629416F417D3 -CT=595C3DDCFBD90661A3A70B94C470A26B -PT=7957CF3989083D25B54C6890EC58DB0C - -I=90 -KEY=20768342967E486F4479F6B8E30DDBBA -IV=CADFADF417898DE3786D5DF869396611 -CT=7957CF3989083D25B54C6890EC58DB0C -PT=6C1E8DF34FC80DD2ECA00A1EDC5FC239 - -I=91 -KEY=4C680EB1D9B645BDA8D9FCA63F521983 -IV=A7DF9FA44AA2B49B9E26C6148CCAF36F -CT=6C1E8DF34FC80DD2ECA00A1EDC5FC239 -PT=72B5A426C9DC3B336756FB10B00626CE - -I=92 -KEY=3EDDAA97106A7E8ECF8F07B68F543F4D -IV=50FF574915D407A97A74CC399DE2D901 -CT=72B5A426C9DC3B336756FB10B00626CE -PT=194826159D7FAB9166D64F1DD6F627B0 - -I=93 -KEY=27958C828D15D51FA95948AB59A218FD -IV=A1E3BC848C019B6FC3F7072F9A866C52 -CT=194826159D7FAB9166D64F1DD6F627B0 -PT=0186B2316FC29104D3549C49F92AE414 - -I=94 -KEY=26133EB3E2D7441B7A0DD4E2A088FCE9 -IV=4DBA42F1031AE32016524C7F86781528 -CT=0186B2316FC29104D3549C49F92AE414 -PT=373384DB7383D3A4914C0141BB104B81 - -I=95 -KEY=1120BA68915497BFEB41D5A31B98B768 -IV=FFCB87107AC596D71BA807902D524247 -CT=373384DB7383D3A4914C0141BB104B81 -PT=25465CE5FA2AD65D75586064A18516A8 - -I=96 -KEY=3466E68D6B7E41E29E19B5C7BA1DA1C0 -IV=55879596C3F0A295FA00CFEF1B056248 -CT=25465CE5FA2AD65D75586064A18516A8 -PT=2311A52CEC4A16B5F4FCA613BC0BDB83 - -I=97 -KEY=177743A1873457576AE513D406167A43 -IV=B1A7DABF3D2384BF8754B829659B3989 -CT=2311A52CEC4A16B5F4FCA613BC0BDB83 -PT=357F4BF62308CD5C48F34E9E644DD515 - -I=98 -KEY=22080857A43C9A0B22165D4A625BAF56 -IV=72BF477FE8CF428CFA856323E18B3135 -CT=357F4BF62308CD5C48F34E9E644DD515 -PT=17758539D1896B92BFB811D30C9BA134 - -I=99 -KEY=357D8D6E75B5F1999DAE4C996EC00E62 -IV=4CBA048DFA50910EC94FE5D6AA5DD502 -CT=17758539D1896B92BFB811D30C9BA134 -PT=372B6DCEE44D18D3791C4E8FB0A91971 - -I=100 -KEY=0256E0A091F8E94AE4B20216DE691713 -IV=86F4F670CA3B191B860D6C8A9A35A872 -CT=372B6DCEE44D18D3791C4E8FB0A91971 -PT=66D3FABC4885C1F4897D9160C152D570 - -I=101 -KEY=64851A1CD97D28BE6DCF93761F3BC263 -IV=08490B2E8588FE564F0112D76D6108E9 -CT=66D3FABC4885C1F4897D9160C152D570 -PT=926278E71894F32B5E2A5A1F5FA695E7 - -I=102 -KEY=F6E762FBC1E9DB9533E5C969409D5784 -IV=D3A2E4AFFDD8A7CC1498EF0E812087B7 -CT=926278E71894F32B5E2A5A1F5FA695E7 -PT=A455F5D65D91563D9C15E6B745F29531 - -I=103 -KEY=52B2972D9C788DA8AFF02FDE056FC2B5 -IV=6CB8822EA67C247A6A0CBAD830B3562C -CT=A455F5D65D91563D9C15E6B745F29531 -PT=4544371A5E3A8E7AD9885AECD3868AF3 - -I=104 -KEY=17F6A037C24203D276787532D6E94846 -IV=93E3CAD8BE023F6451ADAA525988A974 -CT=4544371A5E3A8E7AD9885AECD3868AF3 -PT=8473F4F1D77AC1F46706EBD108CB48A5 - -I=105 -KEY=938554C61538C226117E9EE3DE2200E3 -IV=A7E7B354606EF4C1D00BF4F128CCE966 -CT=8473F4F1D77AC1F46706EBD108CB48A5 -PT=787ADE453DCE2FA7F6F24CD33C9A5CDC - -I=106 -KEY=EBFF8A8328F6ED81E78CD230E2B85C3F -IV=97A2CF706C1871B502D15B028C5F0D80 -CT=787ADE453DCE2FA7F6F24CD33C9A5CDC -PT=E6A7E5B65DC124FBE1C1FFFE18A34D8A - -I=107 -KEY=0D586F357537C97A064D2DCEFA1B11B5 -IV=9BBDCAF2A3CC7FC5BF6285631A4636FD -CT=E6A7E5B65DC124FBE1C1FFFE18A34D8A -PT=6A391E9F475546720836312BBEB0B3A9 - -I=108 -KEY=676171AA32628F080E7B1CE544ABA21C -IV=603EEDE91F925A2228537E8BDD26C96B -CT=6A391E9F475546720836312BBEB0B3A9 -PT=D75086BA446563AAB1873FDEBE611D67 - -I=109 -KEY=B031F7107607ECA2BFFC233BFACABF7B -IV=546B8CA37AACE2BC2C85014F2ACD6315 -CT=D75086BA446563AAB1873FDEBE611D67 -PT=63A4D826625CBD9F10083E62330BCFBC - -I=110 -KEY=D3952F36145B513DAFF41D59C9C170C7 -IV=BC2E6E9DD10152C8281B798F711A9334 -CT=63A4D826625CBD9F10083E62330BCFBC -PT=41275EFDFC86B5BDCCCDCA2BBFA5B90D - -I=111 -KEY=92B271CBE8DDE4806339D7727664C9CA -IV=D940A8D1B3448AA9148C7F6DFC266B00 -CT=41275EFDFC86B5BDCCCDCA2BBFA5B90D -PT=56AC1BCB285044710D26EFC42A0ABA56 - -I=112 -KEY=C41E6A00C08DA0F16E1F38B65C6E739C -IV=214238FF5F4D01F3A6694EC80E15BCF7 -CT=56AC1BCB285044710D26EFC42A0ABA56 -PT=5AF2877973AB9787E42202AC0C6E7538 - -I=113 -KEY=9EECED79B32637768A3D3A1A500006A4 -IV=561B4934904E327F3B3639CED6C7A995 -CT=5AF2877973AB9787E42202AC0C6E7538 -PT=787F52F6D9CD9085D782B95FD68F70F8 - -I=114 -KEY=E693BF8F6AEBA7F35DBF8345868F765C -IV=06B93FB1A99BD387A091509B8C6D3482 -CT=787F52F6D9CD9085D782B95FD68F70F8 -PT=E7B1DB917C92E488C6B02AC4C42AFD79 - -I=115 -KEY=0122641E1679437B9B0FA98142A58B25 -IV=1D57A61FED51218BD8C1357CE58F21EB -CT=E7B1DB917C92E488C6B02AC4C42AFD79 -PT=2FBAB770D511EACA849F654DE429DE84 - -I=116 -KEY=2E98D36EC368A9B11F90CCCCA68C55A1 -IV=CB311C43EC32D59941CEF81BB9CF4E57 -CT=2FBAB770D511EACA849F654DE429DE84 -PT=A8FE17AEA961C2A450DD5EAABAA19613 - -I=117 -KEY=8666C4C06A096B154F4D92661C2DC3B2 -IV=B9D7B74D62DD89A01EE3093A5C2A0470 -CT=A8FE17AEA961C2A450DD5EAABAA19613 -PT=D9E598A4DBAF82BDF9474BE13B997FF5 - -I=118 -KEY=5F835C64B1A6E9A8B60AD98727B4BC47 -IV=6398D8A38C38A9B54DCF18C0D76758BA -CT=D9E598A4DBAF82BDF9474BE13B997FF5 -PT=291DB2BC325CD7A94032E7C1208921A5 - -I=119 -KEY=769EEED883FA3E01F6383E46073D9DE2 -IV=4774C7E1BB97117BCA26A897B9302EFA -CT=291DB2BC325CD7A94032E7C1208921A5 -PT=DFC55866F85055F06E752E04AAC4C36A - -I=120 -KEY=A95BB6BE7BAA6BF1984D1042ADF95E88 -IV=BDA0616700CD2817FE4425F6F541E8C1 -CT=DFC55866F85055F06E752E04AAC4C36A -PT=7CACB3A88E7114F7737B05D0FB3AF7F3 - -I=121 -KEY=D5F70516F5DB7F06EB36159256C3A97B -IV=1EF4836BD363B89EE73911B14EBE9262 -CT=7CACB3A88E7114F7737B05D0FB3AF7F3 -PT=3282F1F6B3C04E325FB13E85D18CDBBC - -I=122 -KEY=E775F4E0461B3134B4872B17874F72C7 -IV=E35D47CEDBD30701A64FE504C6BC4199 -CT=3282F1F6B3C04E325FB13E85D18CDBBC -PT=BFB9748A3C825CDA3EA5D001F6AD305F - -I=123 -KEY=58CC806A7A996DEE8A22FB1671E24298 -IV=7A3676377E0B4F815B4B8C9A98DCAB4D -CT=BFB9748A3C825CDA3EA5D001F6AD305F -PT=B33787380A4C3BD5B32EC335916F9229 - -I=124 -KEY=EBFB075270D5563B390C3823E08DD0B1 -IV=B3E40B27DBF6D985D4F57BD4D2899DC8 -CT=B33787380A4C3BD5B32EC335916F9229 -PT=BCD5E40A3B4885ACA82BEC952BA8A973 - -I=125 -KEY=572EE3584B9DD3979127D4B6CB2579C2 -IV=897608FE3238F80CD24192CC64F4F695 -CT=BCD5E40A3B4885ACA82BEC952BA8A973 -PT=793E22E0B01FFE63E89C84A0D0FE1216 - -I=126 -KEY=2E10C1B8FB822DF479BB50161BDB6BD4 -IV=D84401CF83566FEA8FB859C446C22632 -CT=793E22E0B01FFE63E89C84A0D0FE1216 -PT=96858A96FEB19712B10A44FBF8E633D9 - -I=127 -KEY=B8954B2E0533BAE6C8B114EDE33D580D -IV=7210E127BFB706EF9CD24139C0927E01 -CT=96858A96FEB19712B10A44FBF8E633D9 -PT=28A34CC75A215117331D6B88387E16F8 - -I=128 -KEY=903607E95F12EBF1FBAC7F65DB434EF5 -IV=744B8DD281919F79FC529DA15AA0F18F -CT=28A34CC75A215117331D6B88387E16F8 -PT=43FE41DC9FFB88F93ADC43D41BA3E4B2 - -I=129 -KEY=D3C84635C0E96308C1703CB1C0E0AA47 -IV=5C7379A90F1E47F88C7424E8CD31E55D -CT=43FE41DC9FFB88F93ADC43D41BA3E4B2 -PT=66D6D0E84CEB8672D38DDE557CCCFFF6 - -I=130 -KEY=B51E96DD8C02E57A12FDE2E4BC2C55B1 -IV=529B92CD068415627C4BE49874347F98 -CT=66D6D0E84CEB8672D38DDE557CCCFFF6 -PT=F817D013CB041CA41B6D611ED261FAE9 - -I=131 -KEY=4D0946CE4706F9DE099083FA6E4DAF58 -IV=9B4452DD48C3EECEFDB6A6CFAE670117 -CT=F817D013CB041CA41B6D611ED261FAE9 -PT=56420C70CC459A131CD531EDC39ED6E9 - -I=132 -KEY=1B4B4ABE8B4363CD1545B217ADD379B1 -IV=264ABBC30CC98DA3C06B935B1364A317 -CT=56420C70CC459A131CD531EDC39ED6E9 -PT=650DA8C4CB11E4ABFE8841D20443BB04 - -I=133 -KEY=7E46E27A40528766EBCDF3C5A990C2B5 -IV=DBABF7B18568FED50C69DA0C9AA5395D -CT=650DA8C4CB11E4ABFE8841D20443BB04 -PT=94E6CE02AE253F3BE4A59775CAB7B11B - -I=134 -KEY=EAA02C78EE77B85D0F6864B0632773AE -IV=F0D2E456CE063CB68988C1C397038480 -CT=94E6CE02AE253F3BE4A59775CAB7B11B -PT=124F09DAC6A45E6077DCECE971B24ED1 - -I=135 -KEY=F8EF25A228D3E63D78B4885912953D7F -IV=C19A6D2D35E606E552580B002023C966 -CT=124F09DAC6A45E6077DCECE971B24ED1 -PT=AAD649FD1168DFCB431A7216571ED4C1 - -I=136 -KEY=52396C5F39BB39F63BAEFA4F458BE9BE -IV=DF1A307B1D25BC2751ECDC791EC51B16 -CT=AAD649FD1168DFCB431A7216571ED4C1 -PT=992749C940CBBB0944F5248E8D65268C - -I=137 -KEY=CB1E2596797082FF7F5BDEC1C8EECF32 -IV=D8B0466FC4344C6BF4E57584E5F48A36 -CT=992749C940CBBB0944F5248E8D65268C -PT=FF16B9246C325A3B96250875A9D5C4BE - -I=138 -KEY=34089CB21542D8C4E97ED6B4613B0B8C -IV=B8C3E4ECF57631CE1EEA74AD99545BA2 -CT=FF16B9246C325A3B96250875A9D5C4BE -PT=72EDB906165FE6A19E02435AC6457C9A - -I=139 -KEY=46E525B4031D3E65777C95EEA77E7716 -IV=9C4F78D05257C64D752C576B5BB16245 -CT=72EDB906165FE6A19E02435AC6457C9A -PT=0C2F00362B8733D343DCAF884A6BFD46 - -I=140 -KEY=4ACA2582289A0DB634A03A66ED158A50 -IV=C51122198D2FD566ACA1BD07C28BCC7A -CT=0C2F00362B8733D343DCAF884A6BFD46 -PT=C7F5C00F42695CF7870240DA73D487F7 - -I=141 -KEY=8D3FE58D6AF35141B3A27ABC9EC10DA7 -IV=14769B7962371925822C42F0411BDC65 -CT=C7F5C00F42695CF7870240DA73D487F7 -PT=F4BC8A4310A4CD2F396F43B81BD060EB - -I=142 -KEY=79836FCE7A579C6E8ACD390485116D4C -IV=CDA4414DF23427B937D586C1A8164479 -CT=F4BC8A4310A4CD2F396F43B81BD060EB -PT=1B996A525174C35466103BCBD53ECB9C - -I=143 -KEY=621A059C2B235F3AECDD02CF502FA6D0 -IV=1DA9E7C02BE868E118E4B9BF5928BFCF -CT=1B996A525174C35466103BCBD53ECB9C -PT=2B4EC5CB9DE50257B5901C6D49B5EB54 - -I=144 -KEY=4954C057B6C65D6D594D1EA2199A4D84 -IV=55433149AA93215BF53CB8FE66CD683A -CT=2B4EC5CB9DE50257B5901C6D49B5EB54 -PT=5A5B9ACA3BDA951DC4C4DFB7DD15AD18 - -I=145 -KEY=130F5A9D8D1CC8709D89C115C48FE09C -IV=695C69EA8C4257D2758364AFF6387DA0 -CT=5A5B9ACA3BDA951DC4C4DFB7DD15AD18 -PT=5BB08593BA52E94F07CB14FF564AF299 - -I=146 -KEY=48BFDF0E374E213F9A42D5EA92C51205 -IV=665463164601CD0045C684729CDD5E7D -CT=5BB08593BA52E94F07CB14FF564AF299 -PT=DB1840467889551150026A90E3FC272F - -I=147 -KEY=93A79F484FC7742ECA40BF7A7139352A -IV=355C4B87A682712460C80ABA630F7BE8 -CT=DB1840467889551150026A90E3FC272F -PT=9F7BD8EF96A1ECC75B4E3031E65FE8FC - -I=148 -KEY=0CDC47A7D96698E9910E8F4B9766DDD6 -IV=FBF20FEC0A9E9B530DD3745955A1960C -CT=9F7BD8EF96A1ECC75B4E3031E65FE8FC -PT=DCF003E1DDD4B52F5B680568B42EEECF - -I=149 -KEY=D02C444604B22DC6CA668A2323483319 -IV=04EADC638E309466B9500B1C3A308856 -CT=DCF003E1DDD4B52F5B680568B42EEECF -PT=DDD2F2AEFEF4A4641747699170DF0129 - -I=150 -KEY=0DFEB6E8FA4689A2DD21E3B253973230 -IV=FB521123E5BB45F1AC7083C382B95E10 -CT=DDD2F2AEFEF4A4641747699170DF0129 -PT=7D6C54E4369E965513DE1E95E8A37433 - -I=151 -KEY=7092E20CCCD81FF7CEFFFD27BB344603 -IV=0E71300101915AEE97563493B4B2EFB9 -CT=7D6C54E4369E965513DE1E95E8A37433 -PT=B7F5C4275EF7D3A23E8E9A4BC2BCA700 - -I=152 -KEY=C767262B922FCC55F071676C7988E103 -IV=8BBC970D4E24F6F1A92859BBAE70B757 -CT=B7F5C4275EF7D3A23E8E9A4BC2BCA700 -PT=679FA9A8AB3EE2F0663D4DC95FEC3847 - -I=153 -KEY=A0F88F8339112EA5964C2AA52664D944 -IV=B8D28B6903859465F996A0DF491DDAAA -CT=679FA9A8AB3EE2F0663D4DC95FEC3847 -PT=914DCEAC5B00940A415C2144DAA1EF03 - -I=154 -KEY=31B5412F6211BAAFD7100BE1FCC53647 -IV=06E1FF99E63E0EDDA1D95682B541D026 -CT=914DCEAC5B00940A415C2144DAA1EF03 -PT=A718031A531395DA071B828A10A2B9DC - -I=155 -KEY=96AD423531022F75D00B896BEC678F9B -IV=F18546028693CC0A72E218460AC932E9 -CT=A718031A531395DA071B828A10A2B9DC -PT=19D996B9FF549029D800CF977C0E0A88 - -I=156 -KEY=8F74D48CCE56BF5C080B46FC90698513 -IV=7E98DAFA8DE35537A0B0AA8FA32E01DF -CT=19D996B9FF549029D800CF977C0E0A88 -PT=6A7D514FBE9963987E0EE5DD22FDC8BD - -I=157 -KEY=E50985C370CFDCC47605A321B2944DAE -IV=071F44277D12AD6E653FB747C11BEFB7 -CT=6A7D514FBE9963987E0EE5DD22FDC8BD -PT=AB07C464DF72DF58411A7CBF906F43A6 - -I=158 -KEY=4E0E41A7AFBD039C371FDF9E22FB0E08 -IV=BDA8979A0DE78999AE0659D2744BC21B -CT=AB07C464DF72DF58411A7CBF906F43A6 -PT=A8ABC34FF51FD998427A7837BB0F22BB - -I=159 -KEY=E6A582E85AA2DA047565A7A999F42CB3 -IV=3CA763C4375A6C70F072B52C42A02560 -CT=A8ABC34FF51FD998427A7837BB0F22BB -PT=9E82A41AB2A2748695663075C5BF1C09 - -I=160 -KEY=782726F2E800AE82E00397DC5C4B30BA -IV=B1DD4DC8715CA0B8BA3426395B61ABA4 -CT=9E82A41AB2A2748695663075C5BF1C09 -PT=3C891AEFC6645F3C23A2E3A2E1A522EF - -I=161 -KEY=44AE3C1D2E64F1BEC3A1747EBDEE1255 -IV=932F28E3FC0F85A0E703AD6079A68CC0 -CT=3C891AEFC6645F3C23A2E3A2E1A522EF -PT=D4FDD9C3D36E80E0AFA95ABEC2E62FB9 - -I=162 -KEY=9053E5DEFD0A715E6C082EC07F083DEC -IV=1AD1530DE6274BBA3A097004D85DF8FA -CT=D4FDD9C3D36E80E0AFA95ABEC2E62FB9 -PT=9FACBB106FBF34D9B25A83AD4F45AA38 - -I=163 -KEY=0FFF5ECE92B54587DE52AD6D304D97D4 -IV=8412EAA361AB8193AD529FA36944FE3D -CT=9FACBB106FBF34D9B25A83AD4F45AA38 -PT=E95628B6A14326AC153B228C0DD25063 - -I=164 -KEY=E6A9767833F6632BCB698FE13D9FC7B7 -IV=9F1D906FD25CCCA7565D82CDA44B4A57 -CT=E95628B6A14326AC153B228C0DD25063 -PT=7B1ECD07E452D593D00E326F8FD9F2B5 - -I=165 -KEY=9DB7BB7FD7A4B6B81B67BD8EB2463502 -IV=9C91B12734A86451492400EE5759C190 -CT=7B1ECD07E452D593D00E326F8FD9F2B5 -PT=A99874C1ECA463D335B37179348AEF4F - -I=166 -KEY=342FCFBE3B00D56B2ED4CCF786CCDA4D -IV=9060C6E8E2B51E5F1000860ECB5A608C -CT=A99874C1ECA463D335B37179348AEF4F -PT=F9296E658C3048C58FE6404AB6E0186C - -I=167 -KEY=CD06A1DBB7309DAEA1328CBD302CC221 -IV=ADCB427405EDF8078622AFC6C731D3EF -CT=F9296E658C3048C58FE6404AB6E0186C -PT=8D3A4ABFB8F57AEBB1284B78BFDD240D - -I=168 -KEY=403CEB640FC5E745101AC7C58FF1E62C -IV=4CED30477756892A49FE6358700F5DE7 -CT=8D3A4ABFB8F57AEBB1284B78BFDD240D -PT=7C71310D5241B8B461847FA7E2B4D506 - -I=169 -KEY=3C4DDA695D845FF1719EB8626D45332A -IV=52A3B8E21588368AA3AD2131B283B34C -CT=7C71310D5241B8B461847FA7E2B4D506 -PT=380A1E2925FC8061FBC69B08B4C7C6C8 - -I=170 -KEY=0447C4407878DF908A58236AD982F5E2 -IV=B7AD265DF50ABD77C1D1D02BAF06CEBD -CT=380A1E2925FC8061FBC69B08B4C7C6C8 -PT=6931E262570F27732A75629A384492CA - -I=171 -KEY=6D7626222F77F8E3A02D41F0E1C66728 -IV=DD7D3CA7F6CE54775836734B10685A99 -CT=6931E262570F27732A75629A384492CA -PT=336D0AB3F9A793469C544E98CFDC8AD6 - -I=172 -KEY=5E1B2C91D6D06BA53C790F682E1AEDFE -IV=54087C05437049FBAFC9BF6C56AD16CC -CT=336D0AB3F9A793469C544E98CFDC8AD6 -PT=0098A640F1D04E5557F748B80215082A - -I=173 -KEY=5E838AD1270025F06B8E47D02C0FE5D4 -IV=DD13A93C7FAEF14820D6A168AF9969DB -CT=0098A640F1D04E5557F748B80215082A -PT=48660EDDC3ACAC1A814AE088650DE007 - -I=174 -KEY=16E5840CE4AC89EAEAC4A758490205D3 -IV=589C43A680F7AE6E15DE25FD50F18BED -CT=48660EDDC3ACAC1A814AE088650DE007 -PT=047740C48160A14563C0049316C7B78E - -I=175 -KEY=1292C4C865CC28AF8904A3CB5FC5B25D -IV=22DB095AF8268D37AC536FDA3A81B7C2 -CT=047740C48160A14563C0049316C7B78E -PT=D9679ABB1AED1524E8DA2ECA89172853 - -I=176 -KEY=CBF55E737F213D8B61DE8D01D6D29A0E -IV=77FDCCC9BAB3B7E81D7B9D14540ED3A7 -CT=D9679ABB1AED1524E8DA2ECA89172853 -PT=C774AD9EF683A59747AB41DA044471C4 - -I=177 -KEY=0C81F3ED89A2981C2675CCDBD296EBCA -IV=2E266970512C0F6D404367978C70B5C6 -CT=C774AD9EF683A59747AB41DA044471C4 -PT=927C98AFDE6F108268A306A1A818EE89 - -I=178 -KEY=9EFD6B4257CD889E4ED6CA7A7A8E0543 -IV=E2B0A0F146E931136932D8188B7DC980 -CT=927C98AFDE6F108268A306A1A818EE89 -PT=D3C11AF1EF255D65EAAEE5B5C5BF3CD9 - -I=179 -KEY=4D3C71B3B8E8D5FBA4782FCFBF31399A -IV=ABA118A590A8A69D41D20ED13F7DA4C9 -CT=D3C11AF1EF255D65EAAEE5B5C5BF3CD9 -PT=760B1C47EB476A246CE41163B7425C7B - -I=180 -KEY=3B376DF453AFBFDFC89C3EAC087365E1 -IV=8A395FFEE93FF820FBC086932216324F -CT=760B1C47EB476A246CE41163B7425C7B -PT=4EEAE25D1654A461D6A56896EDFFEAB7 - -I=181 -KEY=75DD8FA945FB1BBE1E39563AE58C8F56 -IV=82D68DE458D38127E2A17DA736BC1651 -CT=4EEAE25D1654A461D6A56896EDFFEAB7 -PT=BD7ABD27F3515B9FD337ADADBA5E9EC9 - -I=182 -KEY=C8A7328EB6AA4021CD0EFB975FD2119F -IV=95757C38F4CB26C29DF174FD8B1F35E8 -CT=BD7ABD27F3515B9FD337ADADBA5E9EC9 -PT=E32EF56DE91CC21C158822BDB841A02C - -I=183 -KEY=2B89C7E35FB6823DD886D92AE793B1B3 -IV=AFFB434005E300E99E815A8E5B46E159 -CT=E32EF56DE91CC21C158822BDB841A02C -PT=578B7692D68BD4D65A159C9CCDC81F64 - -I=184 -KEY=7C02B171893D56EB829345B62A5BAED7 -IV=15E783551969F275EF25A429F68BA0DB -CT=578B7692D68BD4D65A159C9CCDC81F64 -PT=0F70D77F31DE8F0010628377C8E4A1C3 - -I=185 -KEY=7372660EB8E3D9EB92F1C6C1E2BF0F14 -IV=078B6E3FC7C79D52A5C49847A7C5D0BB -CT=0F70D77F31DE8F0010628377C8E4A1C3 -PT=A4F29F6A50A4A15789D4647774C96997 - -I=186 -KEY=D780F964E84778BC1B25A2B696766683 -IV=C9B2C903F131856C0D8218146479513A -CT=A4F29F6A50A4A15789D4647774C96997 -PT=7AD4F764911F8F1E8C9356F00B1468EE - -I=187 -KEY=AD540E007958F7A297B6F4469D620E6D -IV=780DAD9DBA12DDC713ECF44057B8B56E -CT=7AD4F764911F8F1E8C9356F00B1468EE -PT=A00EAFD28A95C7F39137773F28F9A0D3 - -I=188 -KEY=0D5AA1D2F3CD305106818379B59BAEBE -IV=6643BF26488FB21BCDAA7D4FABAA5BC3 -CT=A00EAFD28A95C7F39137773F28F9A0D3 -PT=FC884EEEB73B2F66C97D742A441B0463 - -I=189 -KEY=F1D2EF3C44F61F37CFFCF753F180AADD -IV=7B707442550BF1FA4C1B74F0DC3237FC -CT=FC884EEEB73B2F66C97D742A441B0463 -PT=9C260AA82C6902B068495B4844507F7D - -I=190 -KEY=6DF4E594689F1D87A7B5AC1BB5D0D5A0 -IV=8329E8DE2980225DA61158BF467B1D79 -CT=9C260AA82C6902B068495B4844507F7D -PT=1C12FEAA35AD2DD21DE6411C3A3BB6D5 - -I=191 -KEY=71E61B3E5D323055BA53ED078FEB6375 -IV=EFD514D7CF3FAC49DBB5BB3505B9B18F -CT=1C12FEAA35AD2DD21DE6411C3A3BB6D5 -PT=15F26D34E8E1037A5A2393CEA5DB396B - -I=192 -KEY=6414760AB5D3332FE0707EC92A305A1E -IV=9EFC37C295552B965B29A23AC2788D8B -CT=15F26D34E8E1037A5A2393CEA5DB396B -PT=76F0C79955566A0A091AA46E0C59455E - -I=193 -KEY=12E4B193E0855925E96ADAA726691F40 -IV=5BA54E33128A7526A9130E632BE00D65 -CT=76F0C79955566A0A091AA46E0C59455E -PT=1EA06231EBEEB995E2F94B88A4004333 - -I=194 -KEY=0C44D3A20B6BE0B00B93912F82695C73 -IV=9B1C6FA42510E530D2282BF8C5516DCE -CT=1EA06231EBEEB995E2F94B88A4004333 -PT=16C36348884B32AC1CB1DE2D3C158981 - -I=195 -KEY=1A87B0EA8320D21C17224F02BE7CD5F2 -IV=F755F641EED4C828DCBECC327D93F4AF -CT=16C36348884B32AC1CB1DE2D3C158981 -PT=6581A3FB5F61C6C1904F35E787BF552D - -I=196 -KEY=7F061311DC4114DD876D7AE539C380DF -IV=5D799F356C1672707716C47DA4384C01 -CT=6581A3FB5F61C6C1904F35E787BF552D -PT=0BA11F8EE845E03641928825B3344994 - -I=197 -KEY=74A70C9F3404F4EBC6FFF2C08AF7C94B -IV=89A5592031795CEAECF1C1F274813818 -CT=0BA11F8EE845E03641928825B3344994 -PT=1CF907A6C8A33C7806819EB97B854588 - -I=198 -KEY=685E0B39FCA7C893C07E6C79F1728CC3 -IV=BBE87558AF456066B9CE3EBB8729D554 -CT=1CF907A6C8A33C7806819EB97B854588 -PT=722BB2E53CE7846F40B5EA18AF1430B0 - -I=199 -KEY=1A75B9DCC0404CFC80CB86615E66BC73 -IV=2CC42E6DA36883482ACB5D9D92823186 -CT=722BB2E53CE7846F40B5EA18AF1430B0 -PT=E667D6A95E9C56BB56E4436CC1B69874 - -I=200 -KEY=FC126F759EDC1A47D62FC50D9FD02407 -IV=F18DD0388BF5692B7394BAFDC4854308 -CT=E667D6A95E9C56BB56E4436CC1B69874 -PT=3C9A76798C468470EEBC5F7B915879A3 - -I=201 -KEY=C088190C129A9E3738939A760E885DA4 -IV=8262D8603FE0F4AE8BF5795690992F1C -CT=3C9A76798C468470EEBC5F7B915879A3 -PT=3CAFB994BDEF76370D8A5129B63BECDB - -I=202 -KEY=FC27A098AF75E8003519CB5FB8B3B17F -IV=AB090F7A86CFD9A7C1BD8869BBB4D27B -CT=3CAFB994BDEF76370D8A5129B63BECDB -PT=50D037733D2C3242024BD322ADDF01CB - -I=203 -KEY=ACF797EB9259DA423752187D156CB0B4 -IV=3581D6724722C3892C712B2AA1066824 -CT=50D037733D2C3242024BD322ADDF01CB -PT=0D7CB755305EF09692FCED530CCC1336 - -I=204 -KEY=A18B20BEA2072AD4A5AEF52E19A0A382 -IV=9D0DAD6448895ECBE05F8DC73E014E3C -CT=0D7CB755305EF09692FCED530CCC1336 -PT=D66389E01F44C60B26BCF3F9B39DAB55 - -I=205 -KEY=77E8A95EBD43ECDF831206D7AA3D08D7 -IV=7BDC3CD62CD79C7E6CB8FAE104175DE4 -CT=D66389E01F44C60B26BCF3F9B39DAB55 -PT=CC9F59409D636BE5C555AC2841650CD7 - -I=206 -KEY=BB77F01E2020873A4647AAFFEB580400 -IV=A4FBE42983B236097E40C1E244B14748 -CT=CC9F59409D636BE5C555AC2841650CD7 -PT=34804672FCEF79481269B1D254DDCAF9 - -I=207 -KEY=8FF7B66CDCCFFE72542E1B2DBF85CEF9 -IV=700B37E771E88E5DCD9C81D6FD16B995 -CT=34804672FCEF79481269B1D254DDCAF9 -PT=62FC00FDF1F6BF44FFBEB5BED5589A64 - -I=208 -KEY=ED0BB6912D394136AB90AE936ADD549D -IV=F3A9954079382ACD97C3EC198522AE69 -CT=62FC00FDF1F6BF44FFBEB5BED5589A64 -PT=F7901904A02544E064400A2625121C4C - -I=209 -KEY=1A9BAF958D1C05D6CFD0A4B54FCF48D1 -IV=3799F5DEF76C56F8B0A69889B85760AA -CT=F7901904A02544E064400A2625121C4C -PT=A915D55AE8E14497F2693A55F83041F5 - -I=210 -KEY=B38E7ACF65FD41413DB99EE0B7FF0924 -IV=5421F3F4CDD3C6F9BF38184BC61904AA -CT=A915D55AE8E14497F2693A55F83041F5 -PT=66EA0D0968631F3BDA46921078E495C1 - -I=211 -KEY=D56477C60D9E5E7AE7FF0CF0CF1B9CE5 -IV=3B87243EE38BD474E4CBF34A7C592CFC -CT=66EA0D0968631F3BDA46921078E495C1 -PT=283826367D00718849A6539EE8CAD8BF - -I=212 -KEY=FD5C51F0709E2FF2AE595F6E27D1445A -IV=0FB53077D2BC27C544CD400A28212291 -CT=283826367D00718849A6539EE8CAD8BF -PT=B15EA2718FB406D457C8B96530EDC014 - -I=213 -KEY=4C02F381FF2A2926F991E60B173C844E -IV=8BFE654E422E9BCCE7F1357053E1130C -CT=B15EA2718FB406D457C8B96530EDC014 -PT=44238CE0F1765C7983BF408D5ECFA2BA - -I=214 -KEY=08217F610E5C755F7A2EA68649F326F4 -IV=86841D597FA91F54CBAD3C57FC1FC492 -CT=44238CE0F1765C7983BF408D5ECFA2BA -PT=BB6408099CA64F1216D204865449E967 - -I=215 -KEY=B345776892FA3A4D6CFCA2001DBACF93 -IV=849198CEA19F4AD76013D172867A0D20 -CT=BB6408099CA64F1216D204865449E967 -PT=B7E109C6813E686ADA396DDB277AD960 - -I=216 -KEY=04A47EAE13C45227B6C5CFDB3AC016F3 -IV=9C5E0182124701DA958CF68E1B9F8CC1 -CT=B7E109C6813E686ADA396DDB277AD960 -PT=65C77CB822CA10AE1F95B91F0A3F6436 - -I=217 -KEY=61630216310E4289A95076C430FF72C5 -IV=2BB9026F793A64A325E02B922E3A51DD -CT=65C77CB822CA10AE1F95B91F0A3F6436 -PT=48E9DB9FC3F883AD28A0299561444197 - -I=218 -KEY=298AD989F2F6C12481F05F5151BB3352 -IV=6BE0B03639C858D8F2CAE00EFE8FECCA -CT=48E9DB9FC3F883AD28A0299561444197 -PT=02B277AB327BCB5C91831BD376DC5211 - -I=219 -KEY=2B38AE22C08D0A781073448227676143 -IV=ADC033E3EEC3705031D2FB24205823A2 -CT=02B277AB327BCB5C91831BD376DC5211 -PT=FE288D6703CF6AB1635483305A82F192 - -I=220 -KEY=D5102345C34260C97327C7B27DE590D1 -IV=F637C38CB5DF86458225143E157B9415 -CT=FE288D6703CF6AB1635483305A82F192 -PT=B07BF02F795D13D972D5D6E556E8BA37 - -I=221 -KEY=656BD36ABA1F731001F211572B0D2AE6 -IV=824B7BBB3A339BF045C3CFEA9FD842B9 -CT=B07BF02F795D13D972D5D6E556E8BA37 -PT=D4661C2E102C6644724DA54BE291215D - -I=222 -KEY=B10DCF44AA33155473BFB41CC99C0BBB -IV=21FA242B2B9FFF0C7DC6B712A38A333B -CT=D4661C2E102C6644724DA54BE291215D -PT=F7EDEE448559A6ACD68815B6EEAF6E38 - -I=223 -KEY=46E021002F6AB3F8A537A1AA27336583 -IV=390906ECE51C92800D620E1CD1FD3574 -CT=F7EDEE448559A6ACD68815B6EEAF6E38 -PT=07257C91424F65E6752470A6960DF6D9 - -I=224 -KEY=41C55D916D25D61ED013D10CB13E935A -IV=918A010EC2B106DE32A220315999DF7D -CT=07257C91424F65E6752470A6960DF6D9 -PT=CCB4F3FCFFDEE9E93DD3AB4CC2DB870E - -I=225 -KEY=8D71AE6D92FB3FF7EDC07A4073E51454 -IV=7CF6B4948C4E04ED235F2CC96B0A6B49 -CT=CCB4F3FCFFDEE9E93DD3AB4CC2DB870E -PT=C455220E8C8847FF2592074A53104105 - -I=226 -KEY=49248C631E737808C8527D0A20F55551 -IV=4839E74C868786D0A109603CF98F1100 -CT=C455220E8C8847FF2592074A53104105 -PT=B4D0F5B4C15D7AD556ED4964A94C898F - -I=227 -KEY=FDF479D7DF2E02DD9EBF346E89B9DCDE -IV=5C6D9649E47FAA8A2DCAFB317B6BC0EA -CT=B4D0F5B4C15D7AD556ED4964A94C898F -PT=B515D2904555793DDC142618DCFF8464 - -I=228 -KEY=48E1AB479A7B7BE042AB1276554658BA -IV=E3573B4137C13BBA6CDD10D71042B8F6 -CT=B515D2904555793DDC142618DCFF8464 -PT=2C272D6589E2E6EE09067882795E9FB9 - -I=229 -KEY=64C6862213999D0E4BAD6AF42C18C703 -IV=08E335104FC5D18E2C11EF34B805F060 -CT=2C272D6589E2E6EE09067882795E9FB9 -PT=B38E39322245C4A2E170EBF36D764AD5 - -I=230 -KEY=D748BF1031DC59ACAADD8107416E8DD6 -IV=E134D0DEA38A23983766DA18DADA70E0 -CT=B38E39322245C4A2E170EBF36D764AD5 -PT=E7556255602B48D7CAC710A004FFFD2E - -I=231 -KEY=301DDD4551F7117B601A91A7459170F8 -IV=301C2808833418F45D5F97FB09A99504 -CT=E7556255602B48D7CAC710A004FFFD2E -PT=D4356D51B1C486AAC8BCF2F65312758C - -I=232 -KEY=E428B014E03397D1A8A6635116830574 -IV=264D556FA9A9D73510F562BBF983A4F7 -CT=D4356D51B1C486AAC8BCF2F65312758C -PT=B4D003D6C542B576A3EAEC8F1B017F5B - -I=233 -KEY=50F8B3C2257122A70B4C8FDE0D827A2F -IV=8821647AD3E9E529909E60D0F75DA400 -CT=B4D003D6C542B576A3EAEC8F1B017F5B -PT=10056819F314FF21114BE6209AB5508C - -I=234 -KEY=40FDDBDBD665DD861A0769FE97372AA3 -IV=CBD574F4DB1EFEE4E2EC9485D1192E04 -CT=10056819F314FF21114BE6209AB5508C -PT=6E7AA061FE85B6F8972CB0E793BE0CB0 - -I=235 -KEY=2E877BBA28E06B7E8D2BD91904892613 -IV=4F98EE1501681EC0E7834FE941DF6C6B -CT=6E7AA061FE85B6F8972CB0E793BE0CB0 -PT=45E0C0014219D77686E82E74E60608CA - -I=236 -KEY=6B67BBBB6AF9BC080BC3F76DE28F2ED9 -IV=1D34CAB2FF836A7E6568823784519170 -CT=45E0C0014219D77686E82E74E60608CA -PT=ACF686F9D6723EAFDBFE512AB3A8C6B1 - -I=237 -KEY=C7913D42BC8B82A7D03DA6475127E868 -IV=BEA74B4435F9F79D39B8CCE1F090D4B8 -CT=ACF686F9D6723EAFDBFE512AB3A8C6B1 -PT=F11FE34D158D40DEA10033BCE0253F30 - -I=238 -KEY=368EDE0FA906C279713D95FBB102D758 -IV=DF30EE5D8CA298BE630DDE4B6D8AD7AA -CT=F11FE34D158D40DEA10033BCE0253F30 -PT=4E970ACAB8B19C942C85FAA7825C5E67 - -I=239 -KEY=7819D4C511B75EED5DB86F5C335E893F -IV=DC3CCC928C02710EE91391032A3B557D -CT=4E970ACAB8B19C942C85FAA7825C5E67 -PT=0FF6C292507CF135036E04A391210466 - -I=240 -KEY=77EF165741CBAFD85ED66BFFA27F8D59 -IV=7CC57A486E05E36F852278450C03D39F -CT=0FF6C292507CF135036E04A391210466 -PT=BBEF94C8179E7A124492A252507D58E7 - -I=241 -KEY=CC00829F5655D5CA1A44C9ADF202D5BE -IV=BBB92F65197F8D6B388191E78E90A858 -CT=BBEF94C8179E7A124492A252507D58E7 -PT=BAF11150DD418ED7C28072A718815954 - -I=242 -KEY=76F193CF8B145B1DD8C4BB0AEA838CEA -IV=99DA5A29F934BE23EB74B6DE4E8CC740 -CT=BAF11150DD418ED7C28072A718815954 -PT=A935099B91A35655C850939D2FED1569 - -I=243 -KEY=DFC49A541AB70D4810942897C56E9983 -IV=92401B7E92A49FA5A6905E51E49D51C2 -CT=A935099B91A35655C850939D2FED1569 -PT=F60E1B5D10CDA17FC762798B86B8708D - -I=244 -KEY=29CA81090A7AAC37D7F6511C43D6E90E -IV=C2A57521674EB0FB3E46DE2CC1DCF419 -CT=F60E1B5D10CDA17FC762798B86B8708D -PT=0B976079B61F46E7F3CCCD17E23D872F - -I=245 -KEY=225DE170BC65EAD0243A9C0BA1EB6E21 -IV=66970AE807FED1E3581496C9FBE5FF50 -CT=0B976079B61F46E7F3CCCD17E23D872F -PT=FB44F0094A5FC03BD0A27391E58D0AA3 - -I=246 -KEY=D9191179F63A2AEBF498EF9A44666482 -IV=ED7B2ED1AFF7DB9B514D6E4DFAEA484B -CT=FB44F0094A5FC03BD0A27391E58D0AA3 -PT=41A534A69AD25FEB39BB9F754F15D8FE - -I=247 -KEY=98BC25DF6CE87500CD2370EF0B73BC7C -IV=B7E8C7F08BCE1CF1CC2568E18C18C92B -CT=41A534A69AD25FEB39BB9F754F15D8FE -PT=022B28D4F7355E14F99F654B6C35BC16 - -I=248 -KEY=9A970D0B9BDD2B1434BC15A46746006A -IV=F2EF32464FC7E5F3D397C259CB963B7F -CT=022B28D4F7355E14F99F654B6C35BC16 -PT=28F18EA03ADEB36C40FD8FBC590EC6C8 - -I=249 -KEY=B26683ABA103987874419A183E48C6A2 -IV=687E822CCFC5800E88E59ED7DEC1409D -CT=28F18EA03ADEB36C40FD8FBC590EC6C8 -PT=661F9AEA300100333D64FCDD1212C663 - -I=250 -KEY=D47919419102984B492566C52C5A00C1 -IV=3922BB08EE1B4CC75881D1D6F66B8EE0 -CT=661F9AEA300100333D64FCDD1212C663 -PT=11C4D360F585EDF544D5479AE1ABDBE6 - -I=251 -KEY=C5BDCA21648775BE0DF0215FCDF1DB27 -IV=9B7C0D7D0EA8CAD77B331F2E0CA1E639 -CT=11C4D360F585EDF544D5479AE1ABDBE6 -PT=2E4695733B01CC78993E6EB464784223 - -I=252 -KEY=EBFB5F525F86B9C694CE4FEBA9899904 -IV=A2BF273F12FE1F4B2F56A86CAFD9C5BF -CT=2E4695733B01CC78993E6EB464784223 -PT=1CC514E9F4B13FFEF3B076DAC8C62877 - -I=253 -KEY=F73E4BBBAB378638677E3931614FB173 -IV=1D4960EBE667AC5DE5ED767183838846 -CT=1CC514E9F4B13FFEF3B076DAC8C62877 -PT=3B1A7D179DDED66A37F3053B8B231EEA - -I=254 -KEY=CC2436AC36E95052508D3C0AEA6CAF99 -IV=974643FDFDB695A44B7EF8676A2B87DD -CT=3B1A7D179DDED66A37F3053B8B231EEA -PT=620A4E7A25E8D05779C0FB8CEBA55A74 - -I=255 -KEY=AE2E78D613018005294DC78601C9F5ED -IV=C9A1D92DB7D553DCAEB3BB81B489257A -CT=620A4E7A25E8D05779C0FB8CEBA55A74 -PT=93508503278ECECE65D67B5F50962C4E - -I=256 -KEY=3D7EFDD5348F4ECB4C9BBCD9515FD9A3 -IV=108E736F1DCD178A8648F6AA6D527732 -CT=93508503278ECECE65D67B5F50962C4E -PT=EA9E953D8B62FFAFF9FAFB97F614D65C - -I=257 -KEY=D7E068E8BFEDB164B561474EA74B0FFF -IV=B893A94302C0DAFB19D7B6656085DCA9 -CT=EA9E953D8B62FFAFF9FAFB97F614D65C -PT=1452ED26E774029EF30D272F8548C2F8 - -I=258 -KEY=C3B285CE5899B3FA466C60612203CD07 -IV=668FF6719E5A29A99876227EEDE5818F -CT=1452ED26E774029EF30D272F8548C2F8 -PT=4083167E5ED1A1A449C1825B84F321E1 - -I=259 -KEY=833193B00648125E0FADE23AA6F0ECE6 -IV=9F6375A022543AB8303368A235813F02 -CT=4083167E5ED1A1A449C1825B84F321E1 -PT=9206639D076685FD2078F9B984B7A03F - -I=260 -KEY=1137F02D012E97A32FD51B8322474CD9 -IV=1B95128E90B110AED9D543D2A996271F -CT=9206639D076685FD2078F9B984B7A03F -PT=AAA3F2BD0126DFD5007DD2835CCB0109 - -I=261 -KEY=BB940290000848762FA8C9007E8C4DD0 -IV=BB2E26A9CDEF9D1B2940EFFBA1971A5D -CT=AAA3F2BD0126DFD5007DD2835CCB0109 -PT=B58BB3761519C1726D75AE96313FB7DE - -I=262 -KEY=0E1FB1E61511890442DD67964FB3FA0E -IV=68D3EC37EE43E3F24072F69F2DFA768D -CT=B58BB3761519C1726D75AE96313FB7DE -PT=4558CD47C012B7293396D7EDFE3CEA85 - -I=263 -KEY=4B477CA1D5033E2D714BB07BB18F108B -IV=F7E107DBF4DDBF7974B699536A4E2803 -CT=4558CD47C012B7293396D7EDFE3CEA85 -PT=6F43B6B28AEF5DD1B66279ACAAB9A589 - -I=264 -KEY=2404CA135FEC63FCC729C9D71B36B502 -IV=B3E6DA8DE5DDF7ED6F832D1306A1C04A -CT=6F43B6B28AEF5DD1B66279ACAAB9A589 -PT=1BA743E148BC164C4C8324D665B5A3BD - -I=265 -KEY=3FA389F2175075B08BAAED017E8316BF -IV=8BBBB56B39893C8F286561EF6E47E66A -CT=1BA743E148BC164C4C8324D665B5A3BD -PT=49A40365092DD1360D916AAEAFD03FC1 - -I=266 -KEY=76078A971E7DA486863B87AFD153297E -IV=48BA08703A306F772E78F660173A26B3 -CT=49A40365092DD1360D916AAEAFD03FC1 -PT=DF7DEB5968D683AAA274B0D5D3F9AA03 - -I=267 -KEY=A97A61CE76AB272C244F377A02AA837D -IV=0C7832F9CDF65DADA7FA809B8DE709C3 -CT=DF7DEB5968D683AAA274B0D5D3F9AA03 -PT=69689E97E9B166DA53E25BDFBCAF4A97 - -I=268 -KEY=C012FF599F1A41F677AD6CA5BE05C9EA -IV=05BC03F59CD8C5FAE4A7240E6168CF41 -CT=69689E97E9B166DA53E25BDFBCAF4A97 -PT=5F87DC71EF2918F75A94E43007FF50E6 - -I=269 -KEY=9F952328703359012D398895B9FA990C -IV=4233E654802B55155E158B650B64718E -CT=5F87DC71EF2918F75A94E43007FF50E6 -PT=4F170790775A6A147E99D251C401969A - -I=270 -KEY=D08224B80769331553A05AC47DFB0F96 -IV=4AEAE53003D5085F5963CC36C4589941 -CT=4F170790775A6A147E99D251C401969A -PT=E566D46360EF38E5CFF0C2E7E7E0D679 - -I=271 -KEY=35E4F0DB67860BF09C5098239A1BD9EF -IV=F6CBFF51F6E59B7AAA9EB1261707429A -CT=E566D46360EF38E5CFF0C2E7E7E0D679 -PT=F7189C4B9E1048ED66D9B7CCD089C5F9 - -I=272 -KEY=C2FC6C90F996431DFA892FEF4A921C16 -IV=0A05A4BFBBCC8B3E218C123A95FFF475 -CT=F7189C4B9E1048ED66D9B7CCD089C5F9 -PT=68FB0909789DBFA672BEEF5DF0017B63 - -I=273 -KEY=AA076599810BFCBB8837C0B2BA936775 -IV=DF1A3AF147E72C2CEAE5D8713D52F572 -CT=68FB0909789DBFA672BEEF5DF0017B63 -PT=AF2784590089186BED3A48ADC1B68562 - -I=274 -KEY=0520E1C08182E4D0650D881F7B25E217 -IV=BFDC5ECF596F5F3CFFEAAF4B961209FA -CT=AF2784590089186BED3A48ADC1B68562 -PT=E8C29D3C129AB8FA797EFDCE4CE4D4F2 - -I=275 -KEY=EDE27CFC93185C2A1C7375D137C136E5 -IV=49195E71516D5117C26814F98FD94C31 -CT=E8C29D3C129AB8FA797EFDCE4CE4D4F2 -PT=6ACF2AE12C38DB520F49E6C90D4B8F03 - -I=276 -KEY=872D561DBF208778133A93183A8AB9E6 -IV=E4FA7788D6E7AFBD08884BFCFA74D30C -CT=6ACF2AE12C38DB520F49E6C90D4B8F03 -PT=78FEA3B57D6176C44CE753FB01416CA6 - -I=277 -KEY=FFD3F5A8C241F1BC5FDDC0E33BCBD540 -IV=08E333F43615229D95E7C425A04EA2B7 -CT=78FEA3B57D6176C44CE753FB01416CA6 -PT=5030D7131ABBD7AC323BA31B602B776E - -I=278 -KEY=AFE322BBD8FA26106DE663F85BE0A22E -IV=64BDE35106D9A66A4216EA20F6C52D06 -CT=5030D7131ABBD7AC323BA31B602B776E -PT=14B32E8BD3BD9D82613E32536E6A9F91 - -I=279 -KEY=BB500C300B47BB920CD851AB358A3DBF -IV=8FB9E6BDCD50610E97CF731216CFE698 -CT=14B32E8BD3BD9D82613E32536E6A9F91 -PT=1F22542AFCE63AA92CCDAF45F8DAEEF0 - -I=280 -KEY=A472581AF7A1813B2015FEEECD50D34F -IV=E18B3C5EDA8CDA9E94A376CEEF687D9F -CT=1F22542AFCE63AA92CCDAF45F8DAEEF0 -PT=FC986510E3ED40994D1C33201D0EDB27 - -I=281 -KEY=58EA3D0A144CC1A26D09CDCED05E0868 -IV=D1828C9DDB263064AD259A2360B3DFBA -CT=FC986510E3ED40994D1C33201D0EDB27 -PT=06C1CE557C9AC5D40560CF2D40DCC47C - -I=282 -KEY=5E2BF35F68D60476686902E39082CC14 -IV=3454FD0698CC8CD949970509C23E50F6 -CT=06C1CE557C9AC5D40560CF2D40DCC47C -PT=4287FA420FD9AFCAB7E290273BDF4054 - -I=283 -KEY=1CAC091D670FABBCDF8B92C4AB5D8C40 -IV=C2F0C044A975ADBD20DE56858A074886 -CT=4287FA420FD9AFCAB7E290273BDF4054 -PT=447AFDD3ACF0DEEB0385799789FBAFF0 - -I=284 -KEY=58D6F4CECBFF7557DC0EEB5322A623B0 -IV=299C337821B0779A7ADC3A04316A6373 -CT=447AFDD3ACF0DEEB0385799789FBAFF0 -PT=BA0BBC980827E87EEA51E66C92C96B31 - -I=285 -KEY=E2DD4856C3D89D29365F0D3FB06F4881 -IV=2368291AD179C3C143E636898EB3E104 -CT=BA0BBC980827E87EEA51E66C92C96B31 -PT=77A6131415B251049423FFFB1F3A8A3A - -I=286 -KEY=957B5B42D66ACC2DA27CF2C4AF55C2BB -IV=14300EA81B57E102AEDD97CCD466E18A -CT=77A6131415B251049423FFFB1F3A8A3A -PT=A7AEC0CC599D56347A72D934DDAC7899 - -I=287 -KEY=32D59B8E8FF79A19D80E2BF072F9BA22 -IV=FD62415C90DACCD22EC364877DB0CB24 -CT=A7AEC0CC599D56347A72D934DDAC7899 -PT=1B1100FCB9F85D8CCFDEC5865083B44D - -I=288 -KEY=29C49B72360FC79517D0EE76227A0E6F -IV=6CB24892D26E43E63819C372D5EB4F6D -CT=1B1100FCB9F85D8CCFDEC5865083B44D -PT=33E9BBD018604F301C2543878FCCCA5C - -I=289 -KEY=1A2D20A22E6F88A50BF5ADF1ADB6C433 -IV=50D84A03998B897D1AE217FEA9A955C4 -CT=33E9BBD018604F301C2543878FCCCA5C -PT=07163D652DB035C091830042D6047DF3 - -I=290 -KEY=1D3B1DC703DFBD659A76ADB37BB2B9C0 -IV=092DF26C855F07690836203E3E1790D0 -CT=07163D652DB035C091830042D6047DF3 -PT=AD6647AF8EFCD4F3B2ECDB4D6FFFC1EB - -I=291 -KEY=B05D5A688D236996289A76FE144D782B -IV=68634C941957E3F58F71BE37D7C5C78B -CT=AD6647AF8EFCD4F3B2ECDB4D6FFFC1EB -PT=D2B51122154D10F67D2C07BD75D5E8E2 - -I=292 -KEY=62E84B4A986E796055B67143619890C9 -IV=3C85044F6438FAA021BB7985A63A959D -CT=D2B51122154D10F67D2C07BD75D5E8E2 -PT=4131E9296FECD2DF35EDFBF0CBD0E54B - -I=293 -KEY=23D9A263F782ABBF605B8AB3AA487582 -IV=46D47F3F12B6ADD5580CE8CE7C7359CD -CT=4131E9296FECD2DF35EDFBF0CBD0E54B -PT=5AEA3E73A6EC0D9D683A3526AC1C0E58 - -I=294 -KEY=79339C10516EA6220861BF9506547BDA -IV=D3C58B190FDA0838C770C2185C553D97 -CT=5AEA3E73A6EC0D9D683A3526AC1C0E58 -PT=A21B17CB4588C30CAD6DF25A5E83E273 - -I=295 -KEY=DB288BDB14E6652EA50C4DCF58D799A9 -IV=870E7F0E3109712E84C58BEC0E7032F6 -CT=A21B17CB4588C30CAD6DF25A5E83E273 -PT=0021FF3BB8336E607B8DE10117005230 - -I=296 -KEY=DB0974E0ACD50B4EDE81ACCE4FD7CB99 -IV=2FC82B298A60FC40DA3EFD4E800DB063 -CT=0021FF3BB8336E607B8DE10117005230 -PT=2EFA32680ECD84891B447393F7C1AC88 - -I=297 -KEY=F5F34688A2188FC7C5C5DF5DB8166711 -IV=E1B86C9FC466B72BE40F65973FC41FC4 -CT=2EFA32680ECD84891B447393F7C1AC88 -PT=722117C1EE83FBA840EFEE86A930579F - -I=298 -KEY=87D251494C9B746F852A31DB1126308E -IV=48E347A705B6E322153BFE567931346F -CT=722117C1EE83FBA840EFEE86A930579F -PT=A684344231EC4C03726A0DC20EADA36D - -I=299 -KEY=2156650B7D77386CF7403C191F8B93E3 -IV=4CD618E5F959FC4C66602263F6C5C652 -CT=A684344231EC4C03726A0DC20EADA36D -PT=F40BFBEAC1C1BD1621FBAE1B605BD092 - -I=300 -KEY=D55D9EE1BCB6857AD6BB92027FD04371 -IV=5A41E8952E6B1C551C4691DE9C0A4B6D -CT=F40BFBEAC1C1BD1621FBAE1B605BD092 -PT=6ECDBFB3947C7E81C7BD4BE93B603728 - -I=301 -KEY=BB90215228CAFBFB1106D9EB44B07459 -IV=52E2726B0855F993E1075077B3AB1E77 -CT=6ECDBFB3947C7E81C7BD4BE93B603728 -PT=71E051375A3B974FE523DA47862E24AE - -I=302 -KEY=CA70706572F16CB4F42503ACC29E50F7 -IV=76B6637161FBE4760FCE90E9868B441A -CT=71E051375A3B974FE523DA47862E24AE -PT=CC6CFBCF9A62A3AE55F6B040673B25B3 - -I=303 -KEY=061C8BAAE893CF1AA1D3B3ECA5A57544 -IV=5563B0C2350A4ED76EE0C322480884FB -CT=CC6CFBCF9A62A3AE55F6B040673B25B3 -PT=DA71B26C4EE3FB1FD413FD0757B379E6 - -I=304 -KEY=DC6D39C6A670340575C04EEBF2160CA2 -IV=45C1C5DAF8DE9170C01E554DD36C564E -CT=DA71B26C4EE3FB1FD413FD0757B379E6 -PT=BCD4BC394FFB46207EF0A8EC9883BD55 - -I=305 -KEY=60B985FFE98B72250B30E6076A95B1F7 -IV=38E5B69E6D82A760BFD65CBAACC56F8A -CT=BCD4BC394FFB46207EF0A8EC9883BD55 -PT=FD997E7A7B77E5DF637182399779AF75 - -I=306 -KEY=9D20FB8592FC97FA6841643EFDEC1E82 -IV=8EB39B261910419E43B178DCD6803572 -CT=FD997E7A7B77E5DF637182399779AF75 -PT=71749C51136457B604CD8B4C193928A8 - -I=307 -KEY=EC5467D48198C04C6C8CEF72E4D5362A -IV=6DFA447305215066A0B5671E5AB80951 -CT=71749C51136457B604CD8B4C193928A8 -PT=DF48D76E54B4264304B0EC036DFDADDE - -I=308 -KEY=331CB0BAD52CE60F683C037189289BF4 -IV=8C2B316ECA96DB57322853E07BE47AB3 -CT=DF48D76E54B4264304B0EC036DFDADDE -PT=5E2BD374B9856C573A4DEBF1B8F453EC - -I=309 -KEY=6D3763CE6CA98A585271E88031DCC818 -IV=E541AC59CFDBEA97D1AE5221F849838E -CT=5E2BD374B9856C573A4DEBF1B8F453EC -PT=D7F97B76A8D3076D343A22459EC4765D - -I=310 -KEY=BACE18B8C47A8D35664BCAC5AF18BE45 -IV=B359889A22B9502571E4817C47BC5348 -CT=D7F97B76A8D3076D343A22459EC4765D -PT=E24F05EEE812BD3389AC0AAC4172F5C6 - -I=311 -KEY=58811D562C683006EFE7C069EE6A4B83 -IV=33F8D881A783051987103096B6C734C3 -CT=E24F05EEE812BD3389AC0AAC4172F5C6 -PT=A2AB44CC9C41A8748201DA6F9429AB39 - -I=312 -KEY=FA2A599AB02998726DE61A067A43E0BA -IV=2028704442AE252BCF1D081C5EE2D80B -CT=A2AB44CC9C41A8748201DA6F9429AB39 -PT=E8FA100D1D28186196BAF990A80109AA - -I=313 -KEY=12D04997AD018013FB5CE396D242E910 -IV=6384E3612062BC6850C94C3B14934A6F -CT=E8FA100D1D28186196BAF990A80109AA -PT=683AEF47A8990E2F8AAD8813789069B1 - -I=314 -KEY=7AEAA6D005988E3C71F16B85AAD280A1 -IV=12F78728F3B0EFAC7D304257E47ED5C8 -CT=683AEF47A8990E2F8AAD8813789069B1 -PT=F3121C95A5BACDEAEFA87C4EE40B6C6D - -I=315 -KEY=89F8BA45A02243D69E5917CB4ED9ECCC -IV=FE654BC69677E13383C4206BFB7896A6 -CT=F3121C95A5BACDEAEFA87C4EE40B6C6D -PT=AE9701378E128847A2669B516795D586 - -I=316 -KEY=276FBB722E30CB913C3F8C9A294C394A -IV=E79D5C468BCBA36A79B74F32F28FA635 -CT=AE9701378E128847A2669B516795D586 -PT=D97D988A40C5B323794F160FE8639262 - -I=317 -KEY=FE1223F86EF578B245709A95C12FAB28 -IV=4F3055450C627AD4712E042666AC0812 -CT=D97D988A40C5B323794F160FE8639262 -PT=32381BA55D5C0C91D683D57593772496 - -I=318 -KEY=CC2A385D33A9742393F34FE052588FBE -IV=172165B468B83B62B41A2B4310461193 -CT=32381BA55D5C0C91D683D57593772496 -PT=4D555F31A60F1007B96FBB458B06A619 - -I=319 -KEY=817F676C95A664242A9CF4A5D95E29A7 -IV=5D5EEBEA67DCD5F7851619F1BAA6414E -CT=4D555F31A60F1007B96FBB458B06A619 -PT=23D1AC0F18C20FCE7E5CC4619F8376D5 - -I=320 -KEY=A2AECB638D646BEA54C030C446DD5F72 -IV=54154B82B5820D5892DABD15B403345D -CT=23D1AC0F18C20FCE7E5CC4619F8376D5 -PT=2E55905A38F818CC04D8A792D2007332 - -I=321 -KEY=8CFB5B39B59C73265018975694DD2C40 -IV=AC47D7619A587DC8213B749918FCFEA8 -CT=2E55905A38F818CC04D8A792D2007332 -PT=010F3396885F8F6BF15170B8E6D221BD - -I=322 -KEY=8DF468AF3DC3FC4DA149E7EE720F0DFD -IV=6CE249D2E89C61ACD029AA3C122427D1 -CT=010F3396885F8F6BF15170B8E6D221BD -PT=4DB3972D9851B8A4B3150A43210D36F0 - -I=323 -KEY=C047FF82A59244E9125CEDAD53023B0D -IV=07A578889914E113C1C4DE01DC4B1DE4 -CT=4DB3972D9851B8A4B3150A43210D36F0 -PT=84F64CFFD705E82704FF3DA4FC074B34 - -I=324 -KEY=44B1B37D7297ACCE16A3D009AF057039 -IV=CE73ADCD7BCF1807C084276EDD765256 -CT=84F64CFFD705E82704FF3DA4FC074B34 -PT=5964DF8E8D656846EE574635787F7B18 - -I=325 -KEY=1DD56CF3FFF2C488F8F4963CD77A0B21 -IV=679903574013011E62CC5798B9633607 -CT=5964DF8E8D656846EE574635787F7B18 -PT=E28E7E3AA93802BEEFE258F38F5D2E5C - -I=326 -KEY=FF5B12C956CAC6361716CECF5827257D -IV=678D8583A022C60BCE2C227627A548B2 -CT=E28E7E3AA93802BEEFE258F38F5D2E5C -PT=D297684A7C50765C413BFA37B5E1E256 - -I=327 -KEY=2DCC7A832A9AB06A562D34F8EDC6C72B -IV=4EF9AACC21733B65B4DD0B1F105D4037 -CT=D297684A7C50765C413BFA37B5E1E256 -PT=9EF5F9A2B14B090A201DE74E4CF714C8 - -I=328 -KEY=B33983219BD1B9607630D3B6A131D3E3 -IV=5CC41FCC9EC19619BA06D10BBC6E1F5F -CT=9EF5F9A2B14B090A201DE74E4CF714C8 -PT=81EF000CF6CA737E0F449927E66F6392 - -I=329 -KEY=32D6832D6D1BCA1E79744A91475EB071 -IV=6DE60CE2986CF80C5D588FA1F9A8C3A0 -CT=81EF000CF6CA737E0F449927E66F6392 -PT=3BE177EE9F8F7BE3BCE0FAA70C0A5025 - -I=330 -KEY=0937F4C3F294B1FDC594B0364B54E054 -IV=BE2F86A52BEED4497790D6134CF0D64E -CT=3BE177EE9F8F7BE3BCE0FAA70C0A5025 -PT=DD313134DB126529F349808B3E766795 - -I=331 -KEY=D406C5F72986D4D436DD30BD752287C1 -IV=A89E52478FDEF91AF151097CED84579C -CT=DD313134DB126529F349808B3E766795 -PT=330203EA36484C8E091F00CD2255E599 - -I=332 -KEY=E704C61D1FCE985A3FC2307057776258 -IV=1AEF7BA63A3E3B6D2EB8EB1980D3E581 -CT=330203EA36484C8E091F00CD2255E599 -PT=E28A47CDB7DB0351006C1D9FB227FCEF - -I=333 -KEY=058E81D0A8159B0B3FAE2DEFE5509EB7 -IV=F67C7FCF8C5AA1574A165D8CBE694BF4 -CT=E28A47CDB7DB0351006C1D9FB227FCEF -PT=ACF869797690853BE142BB7BAC735FC8 - -I=334 -KEY=A976E8A9DE851E30DEEC96944923C17F -IV=636F181C4735E700897928BFC60A43EB -CT=ACF869797690853BE142BB7BAC735FC8 -PT=60FF9BF36809DAEB94F823FC6458B26A - -I=335 -KEY=C989735AB68CC4DB4A14B5682D7B7315 -IV=0829C0EE6B170C490C7A73401761CEAA -CT=60FF9BF36809DAEB94F823FC6458B26A -PT=17630CBEAB904F7996301515F24A1F27 - -I=336 -KEY=DEEA7FE41D1C8BA2DC24A07DDF316C32 -IV=A4E0624D86F1098D2DD4D0408897ACED -CT=17630CBEAB904F7996301515F24A1F27 -PT=A1E35C3E2FA1B1DB11DB96E7DD58AB37 - -I=337 -KEY=7F0923DA32BD3A79CDFF369A0269C705 -IV=D3639A296FF168ED773785CFCACD1015 -CT=A1E35C3E2FA1B1DB11DB96E7DD58AB37 -PT=14F5408460708A69A22A2023B01969CE - -I=338 -KEY=6BFC635E52CDB0106FD516B9B270AECB -IV=37CD0428A0C08CC6AABAAA05D8830557 -CT=14F5408460708A69A22A2023B01969CE -PT=516991CA6530D20AB121394F51288880 - -I=339 -KEY=3A95F29437FD621ADEF42FF6E358264B -IV=FB52F5A95F2E3665D44F0AEACB88B108 -CT=516991CA6530D20AB121394F51288880 -PT=FB0C32B66729736F8E5EC8C92D80FDC5 - -I=340 -KEY=C199C02250D4117550AAE73FCED8DB8E -IV=403B43C740215D94E8FBAE22846D3B0A -CT=FB0C32B66729736F8E5EC8C92D80FDC5 -PT=C243054D022E7E9EFC21F965C71D63EB - -I=341 -KEY=03DAC56F52FA6FEBAC8B1E5A09C5B865 -IV=663796B211E7F6E05B4A107B16A904B0 -CT=C243054D022E7E9EFC21F965C71D63EB -PT=6CA56F6792355B2A7A60A4467A85F71E - -I=342 -KEY=6F7FAA08C0CF34C1D6EBBA1C73404F7B -IV=A23B73DF1477EC98202135164C6EF1AB -CT=6CA56F6792355B2A7A60A4467A85F71E -PT=BC590C8B427B013F873B2F5F8D66D5D1 - -I=343 -KEY=D326A68382B435FE51D09543FE269AAA -IV=E84DF462C62D594AAD94C33C446E18FC -CT=BC590C8B427B013F873B2F5F8D66D5D1 -PT=D37CAA9BEA300FF6219349DBA25DA0A6 - -I=344 -KEY=005A0C1868843A087043DC985C7B3A0C -IV=9AAD322884EBE93D0FA084E144600174 -CT=D37CAA9BEA300FF6219349DBA25DA0A6 -PT=AE50C328AFFC39A103C767C1FD337449 - -I=345 -KEY=AE0ACF30C77803A97384BB59A1484E45 -IV=9CEE91362FB0D50ABCEB58EF49EC3614 -CT=AE50C328AFFC39A103C767C1FD337449 -PT=882939453C6E156CD023B468EDD16C95 - -I=346 -KEY=2623F675FB1616C5A3A70F314C9922D0 -IV=5626126CC424BF26D92C822442E4221E -CT=882939453C6E156CD023B468EDD16C95 -PT=B9A97FE0DEF66604F6CE928AAB532EC2 - -I=347 -KEY=9F8A899525E070C155699DBBE7CA0C12 -IV=E5BB374C14E36FD0C2D5F9191C967EC7 -CT=B9A97FE0DEF66604F6CE928AAB532EC2 -PT=6ED0FF2FE8DA900A33AE20F7C1C2E457 - -I=348 -KEY=F15A76BACD3AE0CB66C7BD4C2608E845 -IV=4493B9F0FF63D392273302B6932C8F77 -CT=6ED0FF2FE8DA900A33AE20F7C1C2E457 -PT=B7583A56BED55067A520B4F5E5C1528F - -I=349 -KEY=46024CEC73EFB0ACC3E709B9C3C9BACA -IV=12E2BFD3EAB69E5132E3CDF8BAFBD45E -CT=B7583A56BED55067A520B4F5E5C1528F -PT=28874485575E292B0C83E1B568019BF0 - -I=350 -KEY=6E85086924B19987CF64E80CABC8213A -IV=3CEFDC726C919CA265CD6C28A05DE542 -CT=28874485575E292B0C83E1B568019BF0 -PT=A35D16BBB96BF3F9E06D96EDA9BB44BB - -I=351 -KEY=CDD81ED29DDA6A7E2F097EE102736581 -IV=4AE79901700F018D1E5D95A9FAD762F2 -CT=A35D16BBB96BF3F9E06D96EDA9BB44BB -PT=367E6880D369D482E7E64CFCD1BCC870 - -I=352 -KEY=FBA676524EB3BEFCC8EF321DD3CFADF1 -IV=52EEDB058A8E1FE7C651D484F86F941F -CT=367E6880D369D482E7E64CFCD1BCC870 -PT=32B33E97C94953392A738A964DB121FC - -I=353 -KEY=C91548C587FAEDC5E29CB88B9E7E8C0D -IV=B3704291187E9D55901DD237EC1E2F24 -CT=32B33E97C94953392A738A964DB121FC -PT=965A9A0C0287AB8535436E95CC9BFB99 - -I=354 -KEY=5F4FD2C9857D4640D7DFD61E52E57794 -IV=B3878FC256FA4F9ED0BA05FF51C0CE2A -CT=965A9A0C0287AB8535436E95CC9BFB99 -PT=367A5C93099ACF72353DAC320A3B766E - -I=355 -KEY=69358E5A8CE78932E2E27A2C58DE01FA -IV=774EA78AECAF5A1D7CC1785DE91CAB01 -CT=367A5C93099ACF72353DAC320A3B766E -PT=116EDEB1D0E6F8D1BB58AF648429B792 - -I=356 -KEY=785B50EB5C0171E359BAD548DCF7B668 -IV=FB1EC4218C5F733A54DEA7F753F45D68 -CT=116EDEB1D0E6F8D1BB58AF648429B792 -PT=EF3C679822E3A906F380CD07EBE65F09 - -I=357 -KEY=976737737EE2D8E5AA3A184F3711E961 -IV=8BBE09AFE41C5A78EBA0524212AC570F -CT=EF3C679822E3A906F380CD07EBE65F09 -PT=291B066A30A3B11681D414A4BB5311D5 - -I=358 -KEY=BE7C31194E4169F32BEE0CEB8C42F8B4 -IV=4E8F651C06778A964AA7D43999E41FD6 -CT=291B066A30A3B11681D414A4BB5311D5 -PT=764F8FD22FE0BD98852F259EA6DC6F7C - -I=359 -KEY=C833BECB61A1D46BAEC129752A9E97C8 -IV=E90A35007EE7F001D1F5982BF2477C82 -CT=764F8FD22FE0BD98852F259EA6DC6F7C -PT=66016373A6B1A3797A1B2D2B19B73126 - -I=360 -KEY=AE32DDB8C7107712D4DA045E3329A6EE -IV=46FF289808B1AF6B290CB5AF05747085 -CT=66016373A6B1A3797A1B2D2B19B73126 -PT=3367064ECF5CA978001887DBDE40DE5A - -I=361 -KEY=9D55DBF6084CDE6AD4C28385ED6978B4 -IV=9BAC8819E1CA613CFAA730FBC2034168 -CT=3367064ECF5CA978001887DBDE40DE5A -PT=5C4F01D47C9DA94DE95FC26763CC1146 - -I=362 -KEY=C11ADA2274D177273D9D41E28EA569F2 -IV=A5CE34A846E1D0A737963C49FAD6378E -CT=5C4F01D47C9DA94DE95FC26763CC1146 -PT=D41D854E42863F161E76A2397020C321 - -I=363 -KEY=15075F6C3657483123EBE3DBFE85AAD3 -IV=2CC823722DD3E8F15035875ED43513E2 -CT=D41D854E42863F161E76A2397020C321 -PT=1C542DC0B54A053471AF583C909AB3C4 - -I=364 -KEY=095372AC831D4D055244BBE76E1F1917 -IV=9799D03B6AD46BECD981279B35DF707C -CT=1C542DC0B54A053471AF583C909AB3C4 -PT=958D0254D7AFE1E678A9844DF4F4D18D - -I=365 -KEY=9CDE70F854B2ACE32AED3FAA9AEBC89A -IV=E0E401C7BA5E319F0D60AB765CBEE176 -CT=958D0254D7AFE1E678A9844DF4F4D18D -PT=C54888169B30587E732BD7213EE5B1A3 - -I=366 -KEY=5996F8EECF82F49D59C6E88BA40E7939 -IV=711DA6521732E6868111DCC1C835F9DF -CT=C54888169B30587E732BD7213EE5B1A3 -PT=446F234FCADA809A8B2E167A86C9EB36 - -I=367 -KEY=1DF9DBA105587407D2E8FEF122C7920F -IV=B7008BC907C546A56743C292185C2B02 -CT=446F234FCADA809A8B2E167A86C9EB36 -PT=6AD93BC7E18B48810664CD1C528BA6C4 - -I=368 -KEY=7720E066E4D33C86D48C33ED704C34CB -IV=4D7DD98183E56F71D72DB76187FC5F95 -CT=6AD93BC7E18B48810664CD1C528BA6C4 -PT=0D75BD2B8683FB819EB7F71E2E0836A7 - -I=369 -KEY=7A555D4D6250C7074A3BC4F35E44026C -IV=F4DCFB73BBE7EB5348D56F81BCBC0971 -CT=0D75BD2B8683FB819EB7F71E2E0836A7 -PT=8CBE14862E93FE011A4F45518C7258FA - -I=370 -KEY=F6EB49CB4CC33906507481A2D2365A96 -IV=5432FBF1480AA398F09CA5AF375FA394 -CT=8CBE14862E93FE011A4F45518C7258FA -PT=4026D669905762F0790B6497646A2D4D - -I=371 -KEY=B6CD9FA2DC945BF6297FE535B65C77DB -IV=CA462DC9F029A8311CA45A4116DADC1D -CT=4026D669905762F0790B6497646A2D4D -PT=A8CD2E187CF274756E5736D420853435 - -I=372 -KEY=1E00B1BAA0662F834728D3E196D943EE -IV=4FC9E7688352F4700C5F380BFD1F4FB2 -CT=A8CD2E187CF274756E5736D420853435 -PT=A99410B60322340E279C87D3D26793AA - -I=373 -KEY=B794A10CA3441B8D60B4543244BED044 -IV=4D90B1A30EB7E957FAE3DC8C132F4F42 -CT=A99410B60322340E279C87D3D26793AA -PT=D136F990196C667EC35E3A0492C39968 - -I=374 -KEY=66A2589CBA287DF3A3EA6E36D67D492C -IV=6FAD87F358F0C702C5E9E599093219ED -CT=D136F990196C667EC35E3A0492C39968 -PT=8CE49C1BAACAB69432DDA2FF4250C7B2 - -I=375 -KEY=EA46C48710E2CB679137CCC9942D8E9E -IV=2B6FF495B7E482360E31949C7C9B2E2B -CT=8CE49C1BAACAB69432DDA2FF4250C7B2 -PT=7942B80F57EA24FA200451B37899F9E2 - -I=376 -KEY=93047C884708EF9DB1339D7AECB4777C -IV=21FDC4C9B03A1A9A3F87FF9AAC80FAAE -CT=7942B80F57EA24FA200451B37899F9E2 -PT=DE156D56E199FDBB2600DBF9FC254003 - -I=377 -KEY=4D1111DEA6911226973346831091377F -IV=387612E399C62916B394A9FC6BC0F059 -CT=DE156D56E199FDBB2600DBF9FC254003 -PT=C302C494D910640271695324E64B0992 - -I=378 -KEY=8E13D54A7F817624E65A15A7F6DA3EED -IV=34BCABDE4646BCC05CAF7E61CBF1F8D2 -CT=C302C494D910640271695324E64B0992 -PT=110CE84E5B81867CE4FCCD1BBB5FD792 - -I=379 -KEY=9F1F3D042400F05802A6D8BC4D85E97F -IV=C7898DA9ABF2A3D364C228A83525B04F -CT=110CE84E5B81867CE4FCCD1BBB5FD792 -PT=7B94C0E4849AD65291F0F7BD464C544C - -I=380 -KEY=E48BFDE0A09A260A93562F010BC9BD33 -IV=00E079EEBC47AF3ED3796DBF4A2B55FC -CT=7B94C0E4849AD65291F0F7BD464C544C -PT=D6518596BB53E44452393BD4440D805C - -I=381 -KEY=32DA78761BC9C24EC16F14D54FC43D6F -IV=03E168F8AF2303593E0F936648D253DC -CT=D6518596BB53E44452393BD4440D805C -PT=0C4B51FB33380BB215F29F3FCE7CA0DA - -I=382 -KEY=3E91298D28F1C9FCD49D8BEA81B89DB5 -IV=15E1ECD59BC092C974FA4738C66D9604 -CT=0C4B51FB33380BB215F29F3FCE7CA0DA -PT=3FC98D86A558B711807930AAA391C9BF - -I=383 -KEY=0158A40B8DA97EED54E4BB402229540A -IV=303BD4A407015A9E899816E0FABF288D -CT=3FC98D86A558B711807930AAA391C9BF -PT=85D77D90C312FE938F6C1983014BD572 - -I=384 -KEY=848FD99B4EBB807EDB88A2C323628178 -IV=E018FA96FD433CFD162E8E67D4F37015 -CT=85D77D90C312FE938F6C1983014BD572 -PT=4F49C1740EA88B5767CE36C95158DD63 - -I=385 -KEY=CBC618EF40130B29BC46940A723A5C1B -IV=84013D3E2AA0C77650644CD6862096A7 -CT=4F49C1740EA88B5767CE36C95158DD63 -PT=E6F1409ABA890AC3A50FC4AAD82E1872 - -I=386 -KEY=2D375875FA9A01EA194950A0AA144469 -IV=8BFD137593BFF254414349F1147B9BFF -CT=E6F1409ABA890AC3A50FC4AAD82E1872 -PT=66F6E29696CFDC72EE905636614D2A72 - -I=387 -KEY=4BC1BAE36C55DD98F7D90696CB596E1B -IV=8EC295602FB66C4A2DCA65F66B07E010 -CT=66F6E29696CFDC72EE905636614D2A72 -PT=553B45792AE0625B357C4B68A4BB767F - -I=388 -KEY=1EFAFF9A46B5BFC3C2A54DFE6FE21864 -IV=5999E221475D06295451E52FF88F9F97 -CT=553B45792AE0625B357C4B68A4BB767F -PT=FAB6F53166BFDB89DF68D46D423C243E - -I=389 -KEY=E44C0AAB200A644A1DCD99932DDE3C5A -IV=49D1944CBD7BE00C671B8E996F9A3EB9 -CT=FAB6F53166BFDB89DF68D46D423C243E -PT=308DDB3FE0415C46AE450C78FC5F2558 - -I=390 -KEY=D4C1D194C04B380CB38895EBD1811902 -IV=9785FEE180794318514967B4199CFB93 -CT=308DDB3FE0415C46AE450C78FC5F2558 -PT=6659969D1BD493A3851E75981BACCCB0 - -I=391 -KEY=B2984709DB9FABAF3696E073CA2DD5B2 -IV=4FD1DAE14DB75AC0E6C94388805AC3B5 -CT=6659969D1BD493A3851E75981BACCCB0 -PT=B56B950D84DCA131FD8A5E2601037B36 - -I=392 -KEY=07F3D2045F430A9ECB1CBE55CB2EAE84 -IV=3ED415E7DDDADD2DC7F0376E6CA42EFE -CT=B56B950D84DCA131FD8A5E2601037B36 -PT=8648F40FA13018563E6F1A799D9FCD91 - -I=393 -KEY=81BB260BFE7312C8F573A42C56B16315 -IV=FEAF76717C0905A601509BD68C6D08E5 -CT=8648F40FA13018563E6F1A799D9FCD91 -PT=66DE6D7A74B36C7EE2737DA526F5C8CD - -I=394 -KEY=E7654B718AC07EB61700D9897044ABD8 -IV=2B808C340320DD64AB9278A9D9A3E247 -CT=66DE6D7A74B36C7EE2737DA526F5C8CD -PT=9BB0D29CDA21452F60B5897186F3FAFB - -I=395 -KEY=7CD599ED50E13B9977B550F8F6B75123 -IV=D2EB48117E2E9FB2058800DE1A442799 -CT=9BB0D29CDA21452F60B5897186F3FAFB -PT=489CDC3A2C1AE7510E03AE36D5EAB0E5 - -I=396 -KEY=344945D77CFBDCC879B6FECE235DE1C6 -IV=427765E0671AA6D32634447687E9B209 -CT=489CDC3A2C1AE7510E03AE36D5EAB0E5 -PT=1D65D0E1235AE47DBCC2C65B59892C4C - -I=397 -KEY=292C95365FA138B5C57438957AD4CD8A -IV=D75E9F074D965FE902287B3BB1483315 -CT=1D65D0E1235AE47DBCC2C65B59892C4C -PT=E75B7AE5A8C3B93F15D0E3EBD04E1B4B - -I=398 -KEY=CE77EFD3F762818AD0A4DB7EAA9AD6C1 -IV=5455FD9A01E04E48CA777CF8185697ED -CT=E75B7AE5A8C3B93F15D0E3EBD04E1B4B -PT=11F4A35F6C225A9DF1CA6BAF92E11B07 - -I=399 -KEY=DF834C8C9B40DB17216EB0D1387BCDC6 -IV=3C608F664492626B2208DC92E819411A -CT=11F4A35F6C225A9DF1CA6BAF92E11B07 -PT=9B8FB71E035CEFF9CBFA1346E5ACEFE0 - -========== - -KEYSIZE=192 - -I=0 -KEY=000000000000000000000000000000000000000000000000 -IV=00000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=5DF678DD17BA4E75B61768C6ADEF7C7B - -I=1 -KEY=8AB601AF30C47B225DF678DD17BA4E75B61768C6ADEF7C7B -IV=3B243F1A9BA094EE8AB601AF30C47B22 -CT=5DF678DD17BA4E75B61768C6ADEF7C7B -PT=F9604074F8FA45AC71959888DD056F9F - -I=2 -KEY=D443B8E25A882D05A49638A9EF400BD9C782F04E70EA13E4 -IV=467E32A79443B0735EF5B94D6A4C5627 -CT=F9604074F8FA45AC71959888DD056F9F -PT=98A957EA6DBE623B7E08F919812A3898 - -I=3 -KEY=5742DCD38C8FD46D3C3F6F4382FE69E2B98A0957F1C02B7C -IV=B9E1062EEDD9A1ED83016431D607F968 -CT=98A957EA6DBE623B7E08F919812A3898 -PT=AD6D29D6482764BB4BC27A87AE5CD877 - -I=4 -KEY=B33625F7872DE4A191524695CAD90D59F24873D05F9CF30B -IV=BD1AAC94D2D39445E474F9240BA230CC -CT=AD6D29D6482764BB4BC27A87AE5CD877 -PT=DA5EB591FDC48F0D9E4EBD373E5717A3 - -I=5 -KEY=35DA9F0A5DB187964B0CF304371D82546C06CEE761CBE4A8 -IV=4782561ED717916986ECBAFDDA9C6337 -CT=DA5EB591FDC48F0D9E4EBD373E5717A3 -PT=3F6E771434E26D4FA5A57CEF9DEE05D6 - -I=6 -KEY=A8182E4F8FD8C7987462841003FFEF1BC9A3B208FC25E17E -IV=093273C6E96EA5399DC2B145D269400E -CT=3F6E771434E26D4FA5A57CEF9DEE05D6 -PT=F8FBFC8CBDD4AA8E8DA58DEA7F2F344C - -I=7 -KEY=71A581F408C35DA48C99789CBE2B459544063FE2830AD532 -IV=3900E8650CA62A25D9BDAFBB871B9A3C -CT=F8FBFC8CBDD4AA8E8DA58DEA7F2F344C -PT=B969AA871D3B35C260D8B36C7E9E8913 - -I=8 -KEY=BCD0E4B5F0B7FB5035F0D21BA310705724DE8C8EFD945C21 -IV=0E2BCF13C2A18FF5CD756541F874A6F4 -CT=B969AA871D3B35C260D8B36C7E9E8913 -PT=6205EECCDD965D45339A2DFE85F52AD7 - -I=9 -KEY=A2796321044D9F5557F53CD77E862D121744A170786176F6 -IV=8B935AB4C17D24D21EA98794F4FA6405 -CT=6205EECCDD965D45339A2DFE85F52AD7 -PT=6BC27204DA1B9BC27E463D0E71557D99 - -I=10 -KEY=AD4506295D5309603C374ED3A49DB6D069029C7E09340B6F -IV=A9AF68AB4EFDB7770F3C6508591E9635 -CT=6BC27204DA1B9BC27E463D0E71557D99 -PT=DB1576A8F1BD88F73E6938E72F9C6DCD - -I=11 -KEY=61ECB6C8660E5E20E722387B55203E27576BA49926A866A2 -IV=DF83746D72419F65CCA9B0E13B5D5740 -CT=DB1576A8F1BD88F73E6938E72F9C6DCD -PT=150D14977B15FD304890D7B9C4F8536E - -I=12 -KEY=03679C91B6C57828F22F2CEC2E35C3171FFB7320E25035CC -IV=59D101131EA2FD7F628B2A59D0CB2608 -CT=150D14977B15FD304890D7B9C4F8536E -PT=7AE22B73B412A81D0BCF422C68DA37F8 - -I=13 -KEY=9A087B9DBC37B12988CD079F9A276B0A1434310C8A8A0234 -IV=F26F03A3C84A49F0996FE70C0AF2C901 -CT=7AE22B73B412A81D0BCF422C68DA37F8 -PT=2D1584CE9B85E7264228A8AFF8FAFF01 - -I=14 -KEY=07489932E5335B38A5D8835101A28C2C561C99A37270FD35 -IV=E76AB1C798119F5D9D40E2AF5904EA11 -CT=2D1584CE9B85E7264228A8AFF8FAFF01 -PT=C1067030225453E808F1FF324C44BE7F - -I=15 -KEY=DC3726E33013BC9964DEF36123F6DFC45EED66913E34434A -IV=55010D6199E792E3DB7FBFD1D520E7A1 -CT=C1067030225453E808F1FF324C44BE7F -PT=3AD7DBD96BB69D63BE39B9A16574AC74 - -I=16 -KEY=EDD4EC10B074A36C5E0928B8484042A7E0D4DF305B40EF3E -IV=18C6FE6D0A2FDD7E31E3CAF380671FF5 -CT=3AD7DBD96BB69D63BE39B9A16574AC74 -PT=3D5D82A4C06B9DDCCC8A6B8BF228482F - -I=17 -KEY=23824573BD3CE30D6354AA1C882BDF7B2C5EB4BBA968A711 -IV=E1DEAECBCFC06BCCCE56A9630D484061 -CT=3D5D82A4C06B9DDCCC8A6B8BF228482F -PT=C0E5F9618F2FAB97EA82F8164DC89860 - -I=18 -KEY=AAA43BC528933502A3B1537D070474ECC6DC4CADE4A03F71 -IV=2CE22FDF7E87B7CC89267EB695AFD60F -CT=C0E5F9618F2FAB97EA82F8164DC89860 -PT=6942155FC9EF8F7CFE37CD6FED03CECF - -I=19 -KEY=A2686C442D636D31CAF34622CEEBFB9038EB81C209A3F1BE -IV=B7772CF7B44B856308CC578105F05833 -CT=6942155FC9EF8F7CFE37CD6FED03CECF -PT=6BA4C261F5173862A6789FB026099571 - -I=20 -KEY=29F645A446D84EACA15784433BFCC3F29E931E722FAA64CF -IV=15CA23A60D99FFF68B9E29E06BBB239D -CT=6BA4C261F5173862A6789FB026099571 -PT=AA9E8C6497CAC6B0C8CC92F8DFE7B455 - -I=21 -KEY=5E9165527010387F0BC90827AC360542565F8C8AF04DD09A -IV=53193227307BBE49776720F636C876D3 -CT=AA9E8C6497CAC6B0C8CC92F8DFE7B455 -PT=7DA426C712E7F2F35087D6AA31CF56AB - -I=22 -KEY=92DC0EEE09F5169E766D2EE0BED1F7B106D85A20C1828631 -IV=85A3D20949963F95CC4D6BBC79E52EE1 -CT=7DA426C712E7F2F35087D6AA31CF56AB -PT=09B9FF5E5833B6CE0010C3D0C4A84C19 - -I=23 -KEY=C45B938E7C18B4107FD4D1BEE6E2417F06C899F0052ACA28 -IV=292A007187D730B956879D6075EDA28E -CT=09B9FF5E5833B6CE0010C3D0C4A84C19 -PT=178F7AC0FF63C33683A001F5C4171316 - -I=24 -KEY=03D99546E931B761685BAB7E1981824985689805C13DD93E -IV=A8D8CD3B96215FCDC78206C895290371 -CT=178F7AC0FF63C33683A001F5C4171316 -PT=C39B82763CF6901170902BE6DC1B9305 - -I=25 -KEY=B52384CAC0B230F5ABC0290825771258F5F8B3E31D264A3B -IV=451968C3AA8D0319B6FA118C29838794 -CT=C39B82763CF6901170902BE6DC1B9305 -PT=85D827F61EC17FD00B10356292C863E2 - -I=26 -KEY=DCF617A990AC4CBB2E180EFE3BB66D88FEE886818FEE29D9 -IV=575103DAEFD233E269D59363501E7C4E -CT=85D827F61EC17FD00B10356292C863E2 -PT=535BAC956D5CAB917E1A1BC28E82F28F - -I=27 -KEY=14D0FCAFFD961CFD7D43A26B56EAC61980F29D43016CDB56 -IV=7DE780ACCF9F1896C826EB066D3A5046 -CT=535BAC956D5CAB917E1A1BC28E82F28F -PT=7E73E89F187EA6D5F5A3044A19C85941 - -I=28 -KEY=AF5BFBC086F1392203304AF44E9460CC7551990918A48217 -IV=633F0251217DECEDBB8B076F7B6725DF -CT=7E73E89F187EA6D5F5A3044A19C85941 -PT=B0976DFD4F0620203AC4ED89D395BAFF - -I=29 -KEY=79FFB93DCF243047B3A72709019240EC4F957480CB3138E8 -IV=C1AAE3E35613DAADD6A442FD49D50965 -CT=B0976DFD4F0620203AC4ED89D395BAFF -PT=5ECB838EC7F9F2E7ADBD719599F829B9 - -I=30 -KEY=681F54ADA7685555ED6CA487C66BB20BE228051552C91151 -IV=4F00D9CD31BE1CC611E0ED90684C6512 -CT=5ECB838EC7F9F2E7ADBD719599F829B9 -PT=8DDA96BD88D3D756306D249ABF99F5F9 - -I=31 -KEY=8663BEBF11817A3060B6323A4EB8655DD245218FED50E4A8 -IV=7CC24DC4B003DE90EE7CEA12B6E92F65 -CT=8DDA96BD88D3D756306D249ABF99F5F9 -PT=479E96E558540B71508FEF3173A6FC68 - -I=32 -KEY=831519BE48B0021A2728A4DF16EC6E2C82CACEBE9EF618C0 -IV=59FFA792DC8618070576A7015931782A -CT=479E96E558540B71508FEF3173A6FC68 -PT=080EA053745BEEBDBC5F7D964EEBD2F7 - -I=33 -KEY=AFC20AF72699543A2F26048C62B780913E95B328D01DCA37 -IV=4E5BDD875324CAC02CD713496E295620 -CT=080EA053745BEEBDBC5F7D964EEBD2F7 -PT=B5A58D345C0260A9E274E2E593B76C44 - -I=34 -KEY=46AEAF002B9A297E9A8389B83EB5E038DCE151CD43AAA673 -IV=C67419FDA89E68B1E96CA5F70D037D44 -CT=B5A58D345C0260A9E274E2E593B76C44 -PT=5200F2D475CA388841CB0DD02C7EB7F6 - -I=35 -KEY=1598E4DD7DA3D7B0C8837B6C4B7FD8B09D2A5C1D6FD41185 -IV=9F5C74A1FE2DFF2153364BDD5639FECE -CT=5200F2D475CA388841CB0DD02C7EB7F6 -PT=B2639C2D26BF2CAF2371CA3A4F3D3476 - -I=36 -KEY=FE63AA4A158B41AE7AE0E7416DC0F41FBE5B962720E925F3 -IV=2DC59704D531C890EBFB4E976828961E -CT=B2639C2D26BF2CAF2371CA3A4F3D3476 -PT=C758ADC41E334CCBF34C40E2AEAA3852 - -I=37 -KEY=86B214FA7F89CE06BDB84A8573F3B8D44D17D6C58E431DA1 -IV=D0982ADEECE45CCC78D1BEB06A028FA8 -CT=C758ADC41E334CCBF34C40E2AEAA3852 -PT=F8E0AA1E780F18A50371CBCB1B63E83F - -I=38 -KEY=C0C34A59DC653DCE4558E09B0BFCA0714E661D0E9520F59E -IV=A252B0F29766A24B46715EA3A3ECF3C8 -CT=F8E0AA1E780F18A50371CBCB1B63E83F -PT=554B524391A7A1679210CFC0152A65CE - -I=39 -KEY=3CF3D7DDFFF704231013B2D89A5B0116DC76D2CE800A9050 -IV=42EE716B821C18FCFC309D84239239ED -CT=554B524391A7A1679210CFC0152A65CE -PT=3273E6C51751407B7E4ECDED7970746D - -I=40 -KEY=7FCC684C43B958F02260541D8D0A416DA2381F23F97AE43D -IV=A4FCB2B8AB7158B9433FBF91BC4E5CD3 -CT=3273E6C51751407B7E4ECDED7970746D -PT=D90B75848AC14ACA3CAD9AF2A15F315F - -I=41 -KEY=240724B451241314FB6B219907CB0BA79E9585D15825D562 -IV=5C4FA1918B04D5F85BCB4CF8129D4BE4 -CT=D90B75848AC14ACA3CAD9AF2A15F315F -PT=753C59B87C45B21D527527C6C2DDEB0D - -I=42 -KEY=F0BEECC2DB5D16F98E5778217B8EB9BACCE0A2179AF83E6F -IV=4E41A4AB69AEE73FD4B9C8768A7905ED -CT=753C59B87C45B21D527527C6C2DDEB0D -PT=156E851810ADB0BF2D28B6150D32CAC7 - -I=43 -KEY=C2FB954C95633B5B9B39FD396B230905E1C8140297CAF4A8 -IV=983906FA7F156CF33245798E4E3E2DA2 -CT=156E851810ADB0BF2D28B6150D32CAC7 -PT=26E671DACE32070A601796207BD045B5 - -I=44 -KEY=BF0BD4C6DDBE22DABDDF8CE3A5110E0F81DF8222EC1AB11D -IV=B3188D29356783AF7DF0418A48DD1981 -CT=26E671DACE32070A601796207BD045B5 -PT=ADAD9072859250A8590F6F54C24E5A77 - -I=45 -KEY=2E4F07AD61768CC010721C9120835EA7D8D0ED762E54EB6A -IV=639F27016A9D99B99144D36BBCC8AE1A -CT=ADAD9072859250A8590F6F54C24E5A77 -PT=AC8AD3933D51D5D71CA90FB73A53F6AD - -I=46 -KEY=9963998A6F982462BCF8CF021DD28B70C479E2C114071DC7 -IV=B2A3ACB0CE942F13B72C9E270EEEA8A2 -CT=AC8AD3933D51D5D71CA90FB73A53F6AD -PT=7319F2825648168F07D525618DA9979A - -I=47 -KEY=417FD42690AAE310CFE13D804B9A9DFFC3ACC7A099AE8A5D -IV=EBB0EF7CE1ACF152D81C4DACFF32C772 -CT=7319F2825648168F07D525618DA9979A -PT=4FC19392439D6CBE6699419355E0590B - -I=48 -KEY=30CD3A2A0910C7268020AE120807F141A5358633CC4ED356 -IV=4DCACE79E4C3ADFE71B2EE0C99BA2436 -CT=4FC19392439D6CBE6699419355E0590B -PT=047FF92A523900A3C46D906163927DDD - -I=49 -KEY=F13EE3ACC9C19E4C845F57385A3EF1E261581652AFDCAE8B -IV=E260680204844E6FC1F3D986C0D1596A -CT=047FF92A523900A3C46D906163927DDD -PT=2DAE78D178D069918CCC11D675E09655 - -I=50 -KEY=91556C720DC982D5A9F12FE922EE9873ED940784DA3C38DE -IV=A4E4973E74B61315606B8FDEC4081C99 -CT=2DAE78D178D069918CCC11D675E09655 -PT=6315A6A029ED7FC5AB3CD38D8DAE561A - -I=51 -KEY=9120A23E63AF3BC2CAE489490B03E7B646A8D40957926EC4 -IV=C02DA24531C794BD0075CE4C6E66B917 -CT=6315A6A029ED7FC5AB3CD38D8DAE561A -PT=65A796C69B769E59D34AD19803F117C6 - -I=52 -KEY=5C6847E25C66145DAF431F8F907579EF95E2059154637902 -IV=0D72A6B0F3959C89CD48E5DC3FC92F9F -CT=65A796C69B769E59D34AD19803F117C6 -PT=70770D19D03DF488FB627F460A225F39 - -I=53 -KEY=F5ECA4C905FF0EC2DF34129640488D676E807AD75E41263B -IV=2F60424B5062D978A984E32B59991A9F -CT=70770D19D03DF488FB627F460A225F39 -PT=C8A66A2CD18286D2148230BAB7D81E11 - -I=54 -KEY=FF86E251C5EC6129179278BA91CA0BB57A024A6DE999382A -IV=CC7330AE077936B10A6A4698C0136FEB -CT=C8A66A2CD18286D2148230BAB7D81E11 -PT=FC0B47BA3E51927A632F457A919818DC - -I=55 -KEY=5C0A7344D6FD6983EB993F00AF9B99CF192D0F17780120F6 -IV=CA119AEE5576E06EA38C9115131108AA -CT=FC0B47BA3E51927A632F457A919818DC -PT=AEEDB360C58C4CDC7ACE87AA1A4B785B - -I=56 -KEY=426948BD499E8A9845748C606A17D51363E388BD624A58AD -IV=920C491DE39D52501E633BF99F63E31B -CT=AEEDB360C58C4CDC7ACE87AA1A4B785B -PT=737ECC4294FF69495DC37DC795EC13CE - -I=57 -KEY=F8AD0E545AA212E6360A4022FEE8BC5A3E20F57AF7A64B63 -IV=B975B70450A41A2DBAC446E9133C987E -CT=737ECC4294FF69495DC37DC795EC13CE -PT=3E7CDC26CCC69E02D08248224A22961E - -I=58 -KEY=C2834233A26DCD8A08769C04322E2258EEA2BD58BD84DD7D -IV=A88326DC57AB80FC3A2E4C67F8CFDF6C -CT=3E7CDC26CCC69E02D08248224A22961E -PT=88177B6502254344A364023BCAD29E79 - -I=59 -KEY=962D892D6CDED6798061E761300B611C4DC6BF6377564304 -IV=D95CFF470B1796D754AECB1ECEB31BF3 -CT=88177B6502254344A364023BCAD29E79 -PT=A10FA825EB6DA0E242D9A381F607472D - -I=60 -KEY=3ADA98C76065214A216E4F44DB66C1FE0F1F1CE281510429 -IV=FBD25798351AF35DACF711EA0CBBF733 -CT=A10FA825EB6DA0E242D9A381F607472D -PT=6B5EE3A222DF46560A12E91C006D303F - -I=61 -KEY=C6AB975CF71B6DDF4A30ACE6F9B987A8050DF5FE813C3416 -IV=6CDB3875008754DAFC710F9B977E4C95 -CT=6B5EE3A222DF46560A12E91C006D303F -PT=A0047B92A93ACF32138A818B6E32B3EE - -I=62 -KEY=FFD0E16A5C955EBAEA34D7745083489A16877475EF0E87F8 -IV=F7061CA37B11E445397B7636AB8E3365 -CT=A0047B92A93ACF32138A818B6E32B3EE -PT=1707FC063700E98FF5FDA98A07A8A1C7 - -I=63 -KEY=AA71EC7061FA246CFD332B726783A115E37ADDFFE8A6263F -IV=1853E27FC0689E6755A10D1A3D6F7AD6 -CT=1707FC063700E98FF5FDA98A07A8A1C7 -PT=06320FA4C0E2F42B364B991243FA053D - -I=64 -KEY=D8685685696CBF5CFB0124D6A761553ED53144EDAB5C2302 -IV=E19A3BEC7EBCA3C87219BAF508969B30 -CT=06320FA4C0E2F42B364B991243FA053D -PT=BB70503E9715D653710C0630211755A7 - -I=65 -KEY=28C2AFFA406EF763407174E83074836DA43D42DD8A4B76A5 -IV=5F3BCA36562AFA82F0AAF97F2902483F -CT=BB70503E9715D653710C0630211755A7 -PT=D632FEF42560770DF318C570AFC85285 - -I=66 -KEY=260B8E0723E9AF3D96438A1C1514F460572587AD25832420 -IV=328A42D3898A81C20EC921FD6387585E -CT=D632FEF42560770DF318C570AFC85285 -PT=B1C847FFF455D002E55FCFAF4A4F69A4 - -I=67 -KEY=F39D3CD6A68DC6BC278BCDE3E1412462B27A48026FCC4D84 -IV=C89E7B4C1BAED0FAD596B2D185646981 -CT=B1C847FFF455D002E55FCFAF4A4F69A4 -PT=9C484252E1FE52CD2DFCCAA3E0118F07 - -I=68 -KEY=61A9714C87B94F27BBC38FB100BF76AF9F8682A18FDDC283 -IV=56B7D716EC6F9A6D92344D9A2134899B -CT=9C484252E1FE52CD2DFCCAA3E0118F07 -PT=85A142323B9877E86F3A5874EA613E87 - -I=69 -KEY=B504BE17C673E81F3E62CD833B270147F0BCDAD565BCFC04 -IV=BEF2C82884510475D4ADCF5B41CAA738 -CT=85A142323B9877E86F3A5874EA613E87 -PT=53D0EF74268F55C1B6CA84415E5A2F6F - -I=70 -KEY=1A63CC27BE45C5106DB222F71DA8548646765E943BE6D36B -IV=CC958CC3874510F0AF67723078362D0F -CT=53D0EF74268F55C1B6CA84415E5A2F6F -PT=7B7DB0F3EFAD244FFCC6991452001DF6 - -I=71 -KEY=4B17520C49F46EAF16CF9204F20570C9BAB0C78069E6CE9D -IV=48D7C0690532AFCC51749E2BF7B1ABBF -CT=7B7DB0F3EFAD244FFCC6991452001DF6 -PT=DD0661DCA2BE8C20E95B3A84CCACDB10 - -I=72 -KEY=1ADE412393310021CBC9F3D850BBFCE953EBFD04A54A158D -IV=4B96B2D0CCADFF7D51C9132FDAC56E8E -CT=DD0661DCA2BE8C20E95B3A84CCACDB10 -PT=E505435777F3781121A4A374684E3268 - -I=73 -KEY=493467065AE405B82ECCB08F274884F8724F5E70CD0427E5 -IV=1E8116EB95B94AFC53EA2625C9D50599 -CT=E505435777F3781121A4A374684E3268 -PT=EF4B4E997DA0DCCBDBB36C020D03E8B5 - -I=74 -KEY=4C94816DF6EBDEF5C187FE165AE85833A9FC3272C007CF50 -IV=29094410F6017E5805A0E66BAC0FDB4D -CT=EF4B4E997DA0DCCBDBB36C020D03E8B5 -PT=FA9BAB377C654ED894024BEBDCED2FA0 - -I=75 -KEY=697A0BC179C07A633B1C5521268D16EB3DFE79991CEAE0F0 -IV=83DD12597A405FB725EE8AAC8F2BA496 -CT=FA9BAB377C654ED894024BEBDCED2FA0 -PT=DD1FDA63382552D007F6F8E995820640 - -I=76 -KEY=D40786ED2A6C15E8E6038F421EA8443B3A0881708968E6B0 -IV=2F3AE5594D9CCEDCBD7D8D2C53AC6F8B -CT=DD1FDA63382552D007F6F8E995820640 -PT=C5FF0EB50BA651F436D0566385860ADA - -I=77 -KEY=9D47680C0159F69A23FC81F7150E15CF0CD8D7130CEEEC6A -IV=1BCFAD6802C41B9A4940EEE12B35E372 -CT=C5FF0EB50BA651F436D0566385860ADA -PT=67AE61A77D77CBFD48C080B21313BBAB - -I=78 -KEY=86E61E031542D2DB4452E0506879DE32441857A11FFD57C1 -IV=3DF4DA1F65C739511BA1760F141B2441 -CT=67AE61A77D77CBFD48C080B21313BBAB -PT=68C8512217CB9C3BBF28011FA5BED044 - -I=79 -KEY=4F93757DE614CB1D2C9AB1727FB24209FB3056BEBA438785 -IV=B2C15424EF4E4637C9756B7EF35619C6 -CT=68C8512217CB9C3BBF28011FA5BED044 -PT=233898C850826172965695499748A1B0 - -I=80 -KEY=C56E54BBB54B22CC0FA229BA2F30237B6D66C3F72D0B2635 -IV=DC2FF5992D9383EF8AFD21C6535FE9D1 -CT=233898C850826172965695499748A1B0 -PT=70069F5E963A820D640B40697BD24716 - -I=81 -KEY=A1EF05CB5AAE7A977FA4B6E4B90AA176096D839E56D96123 -IV=EE8CB982124A394C64815170EFE5585B -CT=70069F5E963A820D640B40697BD24716 -PT=B136CA2EF42A9CFF53410554B28A8F65 - -I=82 -KEY=ACEC084A8CED2F4FCE927CCA4D203D895A2C86CAE453EE46 -IV=515D8B6C167EC8570D030D81D64355D8 -CT=B136CA2EF42A9CFF53410554B28A8F65 -PT=123600CD1B5A664430413021DDC8CBBE - -I=83 -KEY=8325A9391B4E106ADCA47C07567A5BCD6A6DB6EB399B25F8 -IV=5A55A24EC8154E532FC9A17397A33F25 -CT=123600CD1B5A664430413021DDC8CBBE -PT=8ECCA03E10D415557C4E7D92DDBFD791 - -I=84 -KEY=DB877966BE0E84575268DC3946AE4E981623CB79E424F269 -IV=659705F3774E141758A2D05FA540943D -CT=8ECCA03E10D415557C4E7D92DDBFD791 -PT=CB70B675AC6BF92237F1C479516E7E6A - -I=85 -KEY=59027658DEC2B5DE99186A4CEAC5B7BA21D20F00B54A8C03 -IV=C9B803CE2D57D26F82850F3E60CC3189 -CT=CB70B675AC6BF92237F1C479516E7E6A -PT=5D99D06E9BEB82AB1CE22201E8467DBC - -I=86 -KEY=652E430F984201E0C481BA22712E35113D302D015D0CF1BF -IV=1838FACBEAC13CF73C2C35574680B43E -CT=5D99D06E9BEB82AB1CE22201E8467DBC -PT=11D7AED0B552D62677DEB874BF7CF8ED - -I=87 -KEY=8377A2C11B73082DD55614F2C47CE3374AEE9575E2700952 -IV=068170C7E11427DFE659E1CE833109CD -CT=11D7AED0B552D62677DEB874BF7CF8ED -PT=74B108D32ABE8401D22F2C3FB008F670 - -I=88 -KEY=7B89A5C45B0A22BBA1E71C21EEC2673698C1B94A5278FF22 -IV=5283DAD6FA2B605DF8FE070540792A96 -CT=74B108D32ABE8401D22F2C3FB008F670 -PT=7883BD8C4DA81C21C4A5847AD801B7AE - -I=89 -KEY=101261A4D23FDA13D964A1ADA36A7B175C643D308A79488C -IV=E2ED92DE4829CB526B9BC4608935F8A8 -CT=7883BD8C4DA81C21C4A5847AD801B7AE -PT=C865B27C21F6F6E681759C318607D2B9 - -I=90 -KEY=E6A6A13B7A64EB51110113D1829C8DF1DD11A1010C7E9A35 -IV=AB325AD4F1FF1C52F6B4C09FA85B3142 -CT=C865B27C21F6F6E681759C318607D2B9 -PT=E31D7AC0E8ADB302BC6C23A0B1D693ED - -I=91 -KEY=64D366C4F61E139BF21C69116A313EF3617D82A1BDA809D8 -IV=A5201D1770A12A898275C7FF8C7AF8CA -CT=E31D7AC0E8ADB302BC6C23A0B1D693ED -PT=CAE6A97EE64228EEEF02E135944C5C62 - -I=92 -KEY=B006CEF05093DE2238FAC06F8C73161D8E7F639429E455BA -IV=62BD7E3EA22E26BAD4D5A834A68DCDB9 -CT=CAE6A97EE64228EEEF02E135944C5C62 -PT=B7AEF117099F799BB0752C7260A2DFB5 - -I=93 -KEY=160AFF18C06B6C4A8F54317885EC6F863E0A4FE649468A0F -IV=AEBB967838133F64A60C31E890F8B268 -CT=B7AEF117099F799BB0752C7260A2DFB5 -PT=81CCC6EDAD41D9C7986D4E175C71551D - -I=94 -KEY=21112CBE896259CE0E98F79528ADB641A66701F11537DF12 -IV=B695BBE7FA331039371BD3A649093584 -CT=81CCC6EDAD41D9C7986D4E175C71551D -PT=9039E01C6485040A2EDAF4C27FE93870 - -I=95 -KEY=60272333C1B4CCC39EA117894C28B24B88BDF5336ADEE762 -IV=4EE830907337D60241360F8D48D6950D -CT=9039E01C6485040A2EDAF4C27FE93870 -PT=44D359DBE4BE436D5133CD81B72DB5C7 - -I=96 -KEY=25C676A781511A98DA724E52A896F126D98E38B2DDF352A5 -IV=38491C9FD517260445E1559440E5D65B -CT=44D359DBE4BE436D5133CD81B72DB5C7 -PT=7B47F95ED30563BE218E40DB4EAAE836 - -I=97 -KEY=59A7B7512B5DC429A135B70C7B939298F80078699359BA93 -IV=1FD8B8BA8B0492E67C61C1F6AA0CDEB1 -CT=7B47F95ED30563BE218E40DB4EAAE836 -PT=C417F6A6824B165D4C26D631F77E45AC - -I=98 -KEY=82E6CF234BC0AA10652241AAF9D884C5B426AE586427FF3F -IV=5FB017B65FE4AF34DB417872609D6E39 -CT=C417F6A6824B165D4C26D631F77E45AC -PT=41EC9A06B318A4D06636ED5403F46CB7 - -I=99 -KEY=82D69A1D747CF6E024CEDBAC4AC02015D210430C67D39388 -IV=1CC1F56321366F420030553E3FBC5CF0 -CT=41EC9A06B318A4D06636ED5403F46CB7 -PT=38E467F81D919F0A1704E9F5CDF4D5FC - -I=100 -KEY=29EFCA26B9C67E141C2ABC545751BF1FC514AAF9AA274674 -IV=A83BDBF4326AE806AB39503BCDBA88F4 -CT=38E467F81D919F0A1704E9F5CDF4D5FC -PT=A08359A20D6F405018F8180A3E8D0FD1 - -I=101 -KEY=AB20AC8C3C5DA5BEBCA9E5F65A3EFF4FDDECB2F394AA49A5 -IV=A14B10E1A998B04E82CF66AA859BDBAA -CT=A08359A20D6F405018F8180A3E8D0FD1 -PT=A16C303138057144A3ECA63E7398DC93 - -I=102 -KEY=86C5E861B9CEAF041DC5D5C7623B8E0B7E0014CDE7329536 -IV=181D943EA950561D2DE544ED85930ABA -CT=A16C303138057144A3ECA63E7398DC93 -PT=EA1A2E30D890D01979D2BCE1EBE6C922 - -I=103 -KEY=90321C401E4B6B30F7DFFBF7BAAB5E1207D2A82C0CD45C14 -IV=12BDB944D898BC5A16F7F421A785C434 -CT=EA1A2E30D890D01979D2BCE1EBE6C922 -PT=C0D620FCF33031DAD617ADBE8F6D13AC - -I=104 -KEY=84964C3B41FE8E4F3709DB0B499B6FC8D1C5059283B94FB8 -IV=0615AD27B29C55F814A4507B5FB5E57F -CT=C0D620FCF33031DAD617ADBE8F6D13AC -PT=EC4B9AEDBE44C4B74B693D08AA1D175A - -I=105 -KEY=6C6361F2C87BC168DB4241E6F7DFAB7F9AAC389A29A458E2 -IV=E79F33FFCD79681CE8F52DC989854F27 -CT=EC4B9AEDBE44C4B74B693D08AA1D175A -PT=F34D426225ADEC3BD2580BF21EF24B3E - -I=106 -KEY=FDA3FB79F1A16865280F0384D272474448F43368375613DC -IV=1DFE18B10032D35F91C09A8B39DAA90D -CT=F34D426225ADEC3BD2580BF21EF24B3E -PT=E14841B0D0CC1E698DE8053B9F1621E1 - -I=107 -KEY=562D3BF792909255C947423402BE592DC51C3653A840323D -IV=247A46C43AE54F1FAB8EC08E6331FA30 -CT=E14841B0D0CC1E698DE8053B9F1621E1 -PT=D21381B5032426EC3582BBD23739E04E - -I=108 -KEY=9D375E6E32C30A801B54C381019A7FC1F09E8D819F79D273 -IV=E05018C26DC38BBDCB1A6599A05398D5 -CT=D21381B5032426EC3582BBD23739E04E -PT=82034FF505FE67B94373770348A934E5 - -I=109 -KEY=7D1A900B515478DB99578C7404641878B3EDFA82D7D0E696 -IV=498AEA38AB55250CE02DCE656397725B -CT=82034FF505FE67B94373770348A934E5 -PT=018B5B1787138D222F6B39C1291ECD2C - -I=110 -KEY=E74B55A39F67C54298DCD7638377955A9C86C343FECE2BBA -IV=DD89DF396236F9A59A51C5A8CE33BD99 -CT=018B5B1787138D222F6B39C1291ECD2C -PT=CABCB7EA14E821726602272A46CEB825 - -I=111 -KEY=D3FFFE0F27D9200352606089979FB428FA84E469B800939F -IV=A707D154BAC28BDC34B4ABACB8BEE541 -CT=CABCB7EA14E821726602272A46CEB825 -PT=0840D09DF2B14ED4B340D32101D68A54 - -I=112 -KEY=485EC313821A37095A20B014652EFAFC49C43748B9D619CB -IV=ADEF6A8A49BF208B9BA13D1CA5C3170A -CT=0840D09DF2B14ED4B340D32101D68A54 -PT=5EB0166FB04AF38F9EA60929FD641844 - -I=113 -KEY=E841074638A154D90490A67BD5640973D7623E6144B2018F -IV=B1956D86A4F79E40A01FC455BABB63D0 -CT=5EB0166FB04AF38F9EA60929FD641844 -PT=2ECBDAFBD0336A436D89FC12944750EC - -I=114 -KEY=17E86798DB7A64E42A5B7C8005576330BAEBC273D0F55163 -IV=0AFFE19CA1425218FFA960DEE3DB303D -CT=2ECBDAFBD0336A436D89FC12944750EC -PT=A326D8C07EF7A21302A3C6A9C67C371A - -I=115 -KEY=D1A6F2AB7C130A60897DA4407BA0C123B84804DA16896679 -IV=6F630069CD0333BDC64E9533A7696E84 -CT=A326D8C07EF7A21302A3C6A9C67C371A -PT=6D06DDFB9B12A71298E32318F582EF72 - -I=116 -KEY=C7D58104581CB5C5E47B79BBE0B2663120AB27C2E30B890B -IV=80E47BA8410247C5167373AF240FBFA5 -CT=6D06DDFB9B12A71298E32318F582EF72 -PT=E1391A50F140E255A9B2E628F25B9B1D - -I=117 -KEY=00D8EEC433F7D68E054263EB11F284648919C1EA11501216 -IV=96F652822C5D4496C70D6FC06BEB634B -CT=E1391A50F140E255A9B2E628F25B9B1D -PT=1418A2DC8D6DBA4942932D6944011D8A - -I=118 -KEY=71D444358CCCF986115AC1379C9F3E2DCB8AEC8355510F9C -IV=410374DE0D8A79FA710CAAF1BF3B2F08 -CT=1418A2DC8D6DBA4942932D6944011D8A -PT=A70A2C48CF5786868844274B8C493C56 - -I=119 -KEY=B9FD9626EC74A129B650ED7F53C8B8AB43CECBC8D91833CA -IV=8362FAE290801C25C829D21360B858AF -CT=A70A2C48CF5786868844274B8C493C56 -PT=3484BA42558B199E8477B8F8280CDE91 - -I=120 -KEY=94CAEE912A7B443582D4573D0643A135C7B97330F114ED5B -IV=F6ABE3F0A7FFC9E02D3778B7C60FE51C -CT=3484BA42558B199E8477B8F8280CDE91 -PT=5D79433F85C7D4C258487080E340F049 - -I=121 -KEY=1D2F762CF08FAE0ADFAD1402838475F79FF103B012541D12 -IV=A0C57652FBF9107C89E598BDDAF4EA3F -CT=5D79433F85C7D4C258487080E340F049 -PT=C51891EA2E68BC60E84912A91F470201 - -I=122 -KEY=9E691D03A3AEB6491AB585E8ADECC99777B811190D131F13 -IV=8426C338234DB9E183466B2F53211843 -CT=C51891EA2E68BC60E84912A91F470201 -PT=F946FD67DD7F92A7A6B93B4F71F70243 - -I=123 -KEY=61EA6FD274C07ADDE3F3788F70935B30D1012A567CE41D50 -IV=2C2AF70B07E9E6F9FF8372D1D76ECC94 -CT=F946FD67DD7F92A7A6B93B4F71F70243 -PT=B4CB0EFF14F8CDC693CC8E7DCEE8E0B0 - -I=124 -KEY=84F27E5BF8B55DA657387670646B96F642CDA42BB20CFDE0 -IV=693782638B439464E51811898C75277B -CT=B4CB0EFF14F8CDC693CC8E7DCEE8E0B0 -PT=EF6DDB56AAE9CFFE128FB3776DD94D20 - -I=125 -KEY=5B1111EADAECDD73B855AD26CE8259085042175CDFD5B0C0 -IV=A14AAEF7A1BF063BDFE36FB1225980D5 -CT=EF6DDB56AAE9CFFE128FB3776DD94D20 -PT=4ACC6AF28293A647093AE788BA778835 - -I=126 -KEY=A924DC707FB16DF1F299C7D44C11FF4F5978F0D465A238F5 -IV=3F7E73BFA24B0C02F235CD9AA55DB082 -CT=4ACC6AF28293A647093AE788BA778835 -PT=5A7989DC61AD6B66B3E83A29168BEDB9 - -I=127 -KEY=164FBEF9EBAEEF03A8E04E082DBC9429EA90CAFD7329D54C -IV=2FB4F1A000B78156BF6B6289941F82F2 -CT=5A7989DC61AD6B66B3E83A29168BEDB9 -PT=246A94AB8488B39C52DE68E8CA5AE0D2 - -I=128 -KEY=B1F4A368B64A78EC8C8ADAA3A93427B5B84EA215B973359E -IV=5D178EC8305B804FA7BB1D915DE497EF -CT=246A94AB8488B39C52DE68E8CA5AE0D2 -PT=F7C758F8DC8FC0891907EBBF299F70B8 - -I=129 -KEY=9161A39C256814AA7B4D825B75BBE73CA14949AA90EC4526 -IV=C87E61A9434EB29F209500F493226C46 -CT=F7C758F8DC8FC0891907EBBF299F70B8 -PT=E2D82C5506BEFA7D7BF032E4C72141CF - -I=130 -KEY=0BFDA1B2CF4B15199995AE0E73051D41DAB97B4E57CD04E9 -IV=5D00992780D9832B9A9C022EEA2301B3 -CT=E2D82C5506BEFA7D7BF032E4C72141CF -PT=F3A0DF1793FC88117E87478FD9E5A1A8 - -I=131 -KEY=F8F5F6016FECDCAF6A357119E0F99550A43E3CC18E28A541 -IV=2800EECA83EB078CF30857B3A0A7C9B6 -CT=F3A0DF1793FC88117E87478FD9E5A1A8 -PT=BEB572C53E9985218ED9012BAB4A9F5B - -I=132 -KEY=84F3E0D153E140D6D48003DCDE6010712AE73DEA25623A1A -IV=E2BEAF80F4A1DDA27C0616D03C0D9C79 -CT=BEB572C53E9985218ED9012BAB4A9F5B -PT=7F4B21C4B7466149CB890B77AC538752 - -I=133 -KEY=B69E5A72FE9B1B85ABCB221869267138E16E369D8931BD48 -IV=FE0A667B9B2BDD29326DBAA3AD7A5B53 -CT=7F4B21C4B7466149CB890B77AC538752 -PT=4B239C8F83F0A10DC6A3497CC3CF9C8E - -I=134 -KEY=0BCF87D2538E0EADE0E8BE97EAD6D03527CD7FE14AFE21C6 -IV=878250C5EA7834CFBD51DDA0AD151528 -CT=4B239C8F83F0A10DC6A3497CC3CF9C8E -PT=89F2B4B8C5AB2988CDEA61F4D4A1BCD4 - -I=135 -KEY=97A4FDCD2E0C993E691A0A2F2F7DF9BDEA271E159E5F9D12 -IV=95E34D44C3E2FE319C6B7A1F7D829793 -CT=89F2B4B8C5AB2988CDEA61F4D4A1BCD4 -PT=C622E28004842564F193C0E58AB40FCB - -I=136 -KEY=38F0A45980CEF0B9AF38E8AF2BF9DCD91BB4DEF014EB92D9 -IV=1BC195727D154539AF545994AEC26987 -CT=C622E28004842564F193C0E58AB40FCB -PT=DF360FBC1607BCC1E6EE9088AEE62EC7 - -I=137 -KEY=6638E0333D7A6765700EE7133DFE6018FD5A4E78BA0DBC1E -IV=F0AB65A69AA4486A5EC8446ABDB497DC -CT=DF360FBC1607BCC1E6EE9088AEE62EC7 -PT=9A8E5BFE223FA9D747164FC1C98B9CDC - -I=138 -KEY=5103611D32D7A1EFEA80BCED1FC1C9CFBA4C01B9738620C2 -IV=A6617B5DA41B2A32373B812E0FADC68A -CT=9A8E5BFE223FA9D747164FC1C98B9CDC -PT=F0143DD4EC3A85F9FA4D5579BD7268A1 - -I=139 -KEY=64FD310AF27CF98C1A948139F3FB4C36400154C0CEF44863 -IV=EBCB744B477F25E635FE5017C0AB5863 -CT=F0143DD4EC3A85F9FA4D5579BD7268A1 -PT=C5C1FED629BF81EE343E4DAEE6BC4D44 - -I=140 -KEY=9390B012FA7D48D9DF557FEFDA44CDD8743F196E28480527 -IV=7AF352D33C08F3FEF76D81180801B155 -CT=C5C1FED629BF81EE343E4DAEE6BC4D44 -PT=26C4460F0B79E16263C38C240C276E5C - -I=141 -KEY=F578E5DF6818CB58F99139E0D13D2CBA17FC954A246F6B7B -IV=05DA148A4EB4D12966E855CD92658381 -CT=26C4460F0B79E16263C38C240C276E5C -PT=E0E249ADB3A39EE2BB48959426874123 - -I=142 -KEY=F23F67282BAFE10E1973704D629EB258ACB400DE02E82A58 -IV=7748B1652DE54EF9074782F743B72A56 -CT=E0E249ADB3A39EE2BB48959426874123 -PT=C2299AAE24C941DC44E5D492BC492FED - -I=143 -KEY=5CAC16BD99EC5067DB5AEAE34657F384E851D44CBEA105B5 -IV=4F599B9C20378305AE937195B243B169 -CT=C2299AAE24C941DC44E5D492BC492FED -PT=780DA1D6FD961DA4756375A15B8BA620 - -I=144 -KEY=9FF7C1766F7F6F9FA3574B35BBC1EE209D32A1EDE52AA395 -IV=044A8C7FFE220414C35BD7CBF6933FF8 -CT=780DA1D6FD961DA4756375A15B8BA620 -PT=E63FE8BE6566E9ECCCDBEC442BCCCBD5 - -I=145 -KEY=3EA408C4CD15E6F24568A38BDEA707CC51E94DA9CEE66840 -IV=05DE81CD5892F1FEA153C9B2A26A896D -CT=E63FE8BE6566E9ECCCDBEC442BCCCBD5 -PT=19F5E5DDDF0F6FABA9B16B732C6058B8 - -I=146 -KEY=29FF0DD567A810385C9D465601A86867F85826DAE28630F8 -IV=0A2A8BF3BE53E2B5175B0511AABDF6CA -CT=19F5E5DDDF0F6FABA9B16B732C6058B8 -PT=41FCD9F8972431F43669863F37B4A18C - -I=147 -KEY=842E4C2F46849E731D619FAE968C5993CE31A0E5D5329174 -IV=1EABD419CA4C0D0BADD141FA212C8E4B -CT=41FCD9F8972431F43669863F37B4A18C -PT=9857CFE1CFE1046F88DF3EB8ECC92E40 - -I=148 -KEY=8EE3344CCB9DE2038536504F596D5DFC46EE9E5D39FBBF34 -IV=FA266CF1AF82A2250ACD78638D197C70 -CT=9857CFE1CFE1046F88DF3EB8ECC92E40 -PT=DE4C55865FB82BDA1FC0D024791C1B22 - -I=149 -KEY=DEEEC86215A6098D5B7A05C906D57626592E4E7940E7A416 -IV=F9B4CFCA36A1B0AB500DFC2EDE3BEB8E -CT=DE4C55865FB82BDA1FC0D024791C1B22 -PT=077F866BF30097D12650855C71B7DB9C - -I=150 -KEY=50872D11A2E463D65C0583A2F5D5E1F77F7ECB2531507F8A -IV=53D4E4CE2C06FCC38E69E573B7426A5B -CT=077F866BF30097D12650855C71B7DB9C -PT=670BBCB81CDE03B883D9B784124F5851 - -I=151 -KEY=7DE3AF7C8550901C3B0E3F1AE90BE24FFCA77CA1231F27DB -IV=C26330B1219C4B4A2D64826D27B4F3CA -CT=670BBCB81CDE03B883D9B784124F5851 -PT=D6141C300F5E5119E1B5F4BBF415A6DD - -I=152 -KEY=BB126D64220A8DB9ED1A232AE655B3561D12881AD70A8106 -IV=74D773D0F053239CC6F1C218A75A1DA5 -CT=D6141C300F5E5119E1B5F4BBF415A6DD -PT=8F742130206F1047FE9CAAE4F2C31B19 - -I=153 -KEY=9845C3A02214A55D626E021AC63AA311E38E22FE25C99A1F -IV=7EC0B4E8BD4BD3EB2357AEC4001E28E4 -CT=8F742130206F1047FE9CAAE4F2C31B19 -PT=47D0D28AF3164CC77FBAB5C015CAC1C9 - -I=154 -KEY=BBC47FAB874E0ED425BED090352CEFD69C34973E30035BD6 -IV=833EC00D894BD8502381BC0BA55AAB89 -CT=47D0D28AF3164CC77FBAB5C015CAC1C9 -PT=3202B04CFC260747BF839FF754A01E26 - -I=155 -KEY=BCC028DA5F286DE017BC60DCC90AE89123B708C964A345F0 -IV=8BCC8079D2175F4407045771D8666334 -CT=3202B04CFC260747BF839FF754A01E26 -PT=75E9FBADAD8885FB2398427EE94C5899 - -I=156 -KEY=352B0CD3E3BA0EB462559B7164826D6A002F4AB78DEF1D69 -IV=0B159F18C1F33EA389EB2409BC926354 -CT=75E9FBADAD8885FB2398427EE94C5899 -PT=90DA906982058C84D2E75B5DAE0EA756 - -I=157 -KEY=6F32D4393B37EA77F28F0B18E687E1EED2C811EA23E1BA3F -IV=2F5C35DA76038E4F5A19D8EAD88DE4C3 -CT=90DA906982058C84D2E75B5DAE0EA756 -PT=705C22072FDFB807A49BAE0FD4D254AF - -I=158 -KEY=5740616769DDF57482D3291FC95859E97653BFE5F733EE90 -IV=B276B0CE56828D683872B55E52EA1F03 -CT=705C22072FDFB807A49BAE0FD4D254AF -PT=A966EE217CF2BDBC17A0BB55AE769FEB - -I=159 -KEY=C9E379BDBC05CC402BB5C73EB5AAE45561F304B05945717B -IV=E1F41EF2147CB5CE9EA318DAD5D83934 -CT=A966EE217CF2BDBC17A0BB55AE769FEB -PT=239D761F1F0437935464C4959546B6BB - -I=160 -KEY=7B2C4F503FCC91AE0828B121AAAED3C63597C025CC03C7C0 -IV=6F90097C7822030DB2CF36ED83C95DEE -CT=239D761F1F0437935464C4959546B6BB -PT=499477B6476BA58CAEF81290ABDD46C4 - -I=161 -KEY=42BC1C4F29D1801D41BCC697EDC5764A9B6FD2B567DE8104 -IV=1571EE53AE1ACAEF3990531F161D11B3 -CT=499477B6476BA58CAEF81290ABDD46C4 -PT=ACC1FB947EB4C7F115871859CD254D96 - -I=162 -KEY=9BE24C041BF4DEECED7D3D039371B1BB8EE8CAECAAFBCC92 -IV=E24F4DBEF2122A73D95E504B32255EF1 -CT=ACC1FB947EB4C7F115871859CD254D96 -PT=85DC9D7ADF342B0733CF9812CFD58F0A - -I=163 -KEY=83BEBEB5727649F268A1A0794C459ABCBD2752FE652E4398 -IV=AF0690E77B1F140B185CF2B16982971E -CT=85DC9D7ADF342B0733CF9812CFD58F0A -PT=7ED8B4DCBD1D13BEA5C819E99ECF75AA - -I=164 -KEY=7020802D561D88AD167914A5F158890218EF4B17FBE13632 -IV=F0AC93D8DDD31D5BF39E3E98246BC15F -CT=7ED8B4DCBD1D13BEA5C819E99ECF75AA -PT=C81F0464C2DE212229370C7A4ED2E890 - -I=165 -KEY=39F8EA2D638410ABDE6610C13386A82031D8476DB533DEA2 -IV=FD6338FAE6F6B00B49D86A0035999806 -CT=C81F0464C2DE212229370C7A4ED2E890 -PT=23A0FA99C632BCC62A035A09514C3EBA - -I=166 -KEY=52FA33F30EFD8D0FFDC6EA58F5B414E61BDB1D64E47FE018 -IV=04C6E0136D8E04C16B02D9DE6D799DA4 -CT=23A0FA99C632BCC62A035A09514C3EBA -PT=9F7F1081AE4B6AD51D395D764D2D5B68 - -I=167 -KEY=95C21BD9257B233A62B9FAD95BFF7E3306E24012A952BB70 -IV=72410E03AAE65889C738282A2B86AE35 -CT=9F7F1081AE4B6AD51D395D764D2D5B68 -PT=5F088092968BF4AF04BF862A6721DF2B - -I=168 -KEY=058F749326AE1DD53DB17A4BCD748A9C025DC638CE73645B -IV=D678325E266D12D7904D6F4A03D53EEF -CT=5F088092968BF4AF04BF862A6721DF2B -PT=15670F60D1D70E129418AC14A425DD70 - -I=169 -KEY=23D2D59C5EF4AF3D28D6752B1CA3848E96456A2C6A56B92B -IV=BB7B672A91E9A61A265DA10F785AB2E8 -CT=15670F60D1D70E129418AC14A425DD70 -PT=3273AC9D250F729AE790A941739C79BF - -I=170 -KEY=E11B1F94517914C81AA5D9B639ACF61471D5C36D19CAC094 -IV=AB84F623EFA11728C2C9CA080F8DBBF5 -CT=3273AC9D250F729AE790A941739C79BF -PT=9B135880CB56A8E6CF3A364CC6E02175 - -I=171 -KEY=66F867085DBE626581B68136F2FA5EF2BEEFF521DF2AE1E1 -IV=01ED899C8DC9C09E87E3789C0CC776AD -CT=9B135880CB56A8E6CF3A364CC6E02175 -PT=681D6FC5447CCFE1152156CFF6172B6A - -I=172 -KEY=98505FCD27DAB39EE9ABEEF3B6869113ABCEA3EE293DCA8B -IV=A58C8285C31035B1FEA838C57A64D1FB -CT=681D6FC5447CCFE1152156CFF6172B6A -PT=6E30DF3FBD67A5FD491E315EF3A268A0 - -I=173 -KEY=9F904A41C19B57A9879B31CC0BE134EEE2D092B0DA9FA22B -IV=6F46DCB3A84FD96907C0158CE641E437 -CT=6E30DF3FBD67A5FD491E315EF3A268A0 -PT=5B4980E24D8F9CABE017991326FBBE95 - -I=174 -KEY=A330D5A6779731D6DCD2B12E466EA84502C70BA3FC641CBE -IV=C5BDAB77E0CA95463CA09FE7B60C667F -CT=5B4980E24D8F9CABE017991326FBBE95 -PT=7324530BF94BD80D286C9BE2FE4113D3 - -I=175 -KEY=20F008DE76D7968AAFF6E225BF2570482AAB904102250F6D -IV=32F5EC4AEBB997C583C0DD780140A75C -CT=7324530BF94BD80D286C9BE2FE4113D3 -PT=B163425AB21DF6AFBD2C7000E777E902 - -I=176 -KEY=0F48153B232E71F41E95A07F0D3886E79787E041E552E66F -IV=3D1854E0C481B28E2FB81DE555F9E77E -CT=B163425AB21DF6AFBD2C7000E777E902 -PT=EB1A6C86C3811E3081325F35BA7F2DCA - -I=177 -KEY=96EE2134FD40CA34F58FCCF9CEB998D716B5BF745F2DCBA5 -IV=8629366A8B8E266499A6340FDE6EBBC0 -CT=EB1A6C86C3811E3081325F35BA7F2DCA -PT=E9675AF0035C3F8E9D5E58D0652BF5C7 - -I=178 -KEY=BF754C828BFE309B1CE89609CDE5A7598BEBE7A43A063E62 -IV=566D5FCEC3FF7D43299B6DB676BEFAAF -CT=E9675AF0035C3F8E9D5E58D0652BF5C7 -PT=24B4DA85EEFAA123948C6B5E0E07EB08 - -I=179 -KEY=F0223B4AF5C885B4385C4C8C231F067A1F678CFA3401D56A -IV=67B98EC651B057104F5777C87E36B52F -CT=24B4DA85EEFAA123948C6B5E0E07EB08 -PT=753CFEBBB9E623453B8BB2976B8D7BD4 - -I=180 -KEY=04665169E091DEF74D60B2379AF9253F24EC3E6D5F8CAEBE -IV=BC3806A9E56A1DACF4446A2315595B43 -CT=753CFEBBB9E623453B8BB2976B8D7BD4 -PT=6949284723B4F795D530B366FAE70876 - -I=181 -KEY=9CABB1CFD4E46F8324299A70B94DD2AAF1DC8D0BA56BA6C8 -IV=8C864563BB8D45A098CDE0A63475B174 -CT=6949284723B4F795D530B366FAE70876 -PT=D43FED9A25C62349787F0336BFFBBFEB - -I=182 -KEY=4407065E88AE79D9F01677EA9C8BF1E389A38E3D1A901923 -IV=539CC5888B34198FD8ACB7915C4A165A -CT=D43FED9A25C62349787F0336BFFBBFEB -PT=030733E175916579F582A778B261DA1C - -I=183 -KEY=84D1EE80E8FA54DEF311440BE91A949A7C212945A8F1C33F -IV=78306F4F56DEF759C0D6E8DE60542D07 -CT=030733E175916579F582A778B261DA1C -PT=F7B1ABE4B4AE3CB726F9A88B06D4552A - -I=184 -KEY=E885BEA6176A75D804A0EFEF5DB4A82D5AD881CEAE259615 -IV=3AC80B78F744208A6C545026FF902106 -CT=F7B1ABE4B4AE3CB726F9A88B06D4552A -PT=DA984A2C346A4B758E066EB509079168 - -I=185 -KEY=2E0317B2DB3F9893DE38A5C369DEE358D4DEEF7BA722077D -IV=FC74E03B1068A6FEC686A914CC55ED4B -CT=DA984A2C346A4B758E066EB509079168 -PT=21F473636EF27B91F29BB1CE67908763 - -I=186 -KEY=850E1B37E1F7DD89FFCCD6A0072C98C926455EB5C0B2801E -IV=7DFD76EE7EF97796AB0D0C853AC8451A -CT=21F473636EF27B91F29BB1CE67908763 -PT=9EEF6E211CC8EDBD3C4FBE3E14B13C70 - -I=187 -KEY=655D365D66CAA5C36123B8811BE475741A0AE08BD403BC6E -IV=33318C04CC0B3CBDE0532D6A873D784A -CT=9EEF6E211CC8EDBD3C4FBE3E14B13C70 -PT=8AB49333CA7B2E58E7B24536BB34DEE7 - -I=188 -KEY=BE3C315647F981DCEB972BB2D19F5B2CFDB8A5BD6F376289 -IV=79D06A0D66B5C2B1DB61070B2133241F -CT=8AB49333CA7B2E58E7B24536BB34DEE7 -PT=323D1E775FD729005DA7A2853A855ED4 - -I=189 -KEY=3126E544A65724C4D9AA35C58E48722CA01F073855B23C5D -IV=CC5C9D95685AF1228F1AD412E1AEA518 -CT=323D1E775FD729005DA7A2853A855ED4 -PT=E283016FEDADEBA2BEC7ADB5A8DEA8B9 - -I=190 -KEY=BCF052AFAFA4852D3B2934AA63E5998E1ED8AA8DFD6C94E4 -IV=2753144E0A26D9FE8DD6B7EB09F3A1E9 -CT=E283016FEDADEBA2BEC7ADB5A8DEA8B9 -PT=9A9BB977D53BBD47550DC60A49AFA0FA - -I=191 -KEY=ECB724A85CBC7B58A1B28DDDB6DE24C94BD56C87B4C3341E -IV=27F910046A94AA3B50477607F318FE75 -CT=9A9BB977D53BBD47550DC60A49AFA0FA -PT=AF4C7AC3B02C1B077E8F97B59AE52A21 - -I=192 -KEY=BCA9E9794F9004AB0EFEF71E06F23FCE355AFB322E261E3F -IV=8AF06705FE272571501ECDD1132C7FF3 -CT=AF4C7AC3B02C1B077E8F97B59AE52A21 -PT=A97DEE2A64DFA7C198B6A4F21E80F7DF - -I=193 -KEY=10DCC14B9A309E25A7831934622D980FADEC5FC030A6E9E0 -IV=B04E1C6FC657B8AEAC752832D5A09A8E -CT=A97DEE2A64DFA7C198B6A4F21E80F7DF -PT=34E8228A24C7A16F9ED3F4B9A94AA70D - -I=194 -KEY=9CB6EE6AAEFAFBED936B3BBE46EA3960333FAB7999EC4EED -IV=6A966EBB8F80A1608C6A2F2134CA65C8 -CT=34E8228A24C7A16F9ED3F4B9A94AA70D -PT=99E6CA896906CBAA9B8D01155D1DB162 - -I=195 -KEY=461916712E8BD6F10A8DF1372FECF2CAA8B2AA6CC4F1FF8F -IV=EAF849974783FAA7DAAFF81B80712D1C -CT=99E6CA896906CBAA9B8D01155D1DB162 -PT=6009B53EB4690C1F1F10639F1FD7640A - -I=196 -KEY=5B9B91A966F9CE146A8444099B85FED5B7A2C9F3DB269B85 -IV=3FB045D182F781EB1D8287D8487218E5 -CT=6009B53EB4690C1F1F10639F1FD7640A -PT=88ED4BC34A27F4C4B480B99857EBF541 - -I=197 -KEY=404F7D8B0E966F02E2690FCAD1A20A110322706B8CCD6EC4 -IV=49C0F4571BAEBE4C1BD4EC22686FA116 -CT=88ED4BC34A27F4C4B480B99857EBF541 -PT=B88F0E3E01FEDF97766AC6B762D2EBC3 - -I=198 -KEY=CB2EA99F330A3A865AE601F4D05CD5867548B6DCEE1F8507 -IV=2518DA0D88C02EC38B61D4143D9C5584 -CT=B88F0E3E01FEDF97766AC6B762D2EBC3 -PT=C1C167FF37E89937DCB8D79C9BC9EC74 - -I=199 -KEY=913C795CF72CD1219B27660BE7B44CB1A9F0614075D66973 -IV=37769A59390261FB5A12D0C3C426EBA7 -CT=C1C167FF37E89937DCB8D79C9BC9EC74 -PT=64D912270A1E60192CDAAD8168219E56 - -I=200 -KEY=05F19DF919E44144FFFE742CEDAA2CA8852ACCC11DF7F725 -IV=63E9D4D1BDD7FEAD94CDE4A5EEC89065 -CT=64D912270A1E60192CDAAD8168219E56 -PT=C9AD2DBB1C686A67A3E21A5659576A2B - -I=201 -KEY=099D0DCE5E4E194236535997F1C246CF26C8D69744A09D0E -IV=A01E3F917EF4652F0C6C903747AA5806 -CT=C9AD2DBB1C686A67A3E21A5659576A2B -PT=244C740B4B136C6C480D0147163868D1 - -I=202 -KEY=EA1F242E9C75C712121F2D9CBAD12AA36EC5D7D05298F5DF -IV=C9D2288C473BCB3EE38229E0C23BDE50 -CT=244C740B4B136C6C480D0147163868D1 -PT=A6B125A9C570CC3ECBB5D302ADB96E34 - -I=203 -KEY=CD5D7C91FBDC81A1B4AE08357FA1E69DA57004D2FF219BEB -IV=871F525F8ED73B7F274258BF67A946B3 -CT=A6B125A9C570CC3ECBB5D302ADB96E34 -PT=0F9862A4A21E1FB365135C07577FB3EE - -I=204 -KEY=F7D9B8C22BDC8005BB366A91DDBFF92EC06358D5A85E2805 -IV=01BB0A9A8737C19D3A84C453D00001A4 -CT=0F9862A4A21E1FB365135C07577FB3EE -PT=D833DB436E1751B882D03FADF683690B - -I=205 -KEY=83F81E3CED72F22F6305B1D2B3A8A89642B367785EDD410E -IV=80E0E7001CCA60CA7421A6FEC6AE722A -CT=D833DB436E1751B882D03FADF683690B -PT=0AE2C64D2C577C420F26F2F48AA58D62 - -I=206 -KEY=63310E5F2F8F0E0769E7779F9FFFD4D44D95958CD478CC6C -IV=57E54995CDC9417DE0C91063C2FDFC28 -CT=0AE2C64D2C577C420F26F2F48AA58D62 -PT=B0E2976AA3891A2C71AFEB063E3C4383 - -I=207 -KEY=F3AE2989B3980DC9D905E0F53C76CEF83C3A7E8AEA448FEF -IV=999DD6C2B1C528E2909F27D69C1703CE -CT=B0E2976AA3891A2C71AFEB063E3C4383 -PT=16F8A305177ECDBA15403FE5D8EEF60D - -I=208 -KEY=52CF17D8DEA4CE5ACFFD43F02B080342297A416F32AA79E2 -IV=C9F5BC961057F845A1613E516D3CC393 -CT=16F8A305177ECDBA15403FE5D8EEF60D -PT=A607A3EE165E82711B30B44CF4E0C4CF - -I=209 -KEY=E22ADE79E75FE58E69FAE01E3D568133324AF523C64ABD2D -IV=E153F25DD207351AB0E5C9A139FB2BD4 -CT=A607A3EE165E82711B30B44CF4E0C4CF -PT=5191CDD0D077AD6BE956AF8E8E39FECA - -I=210 -KEY=38C58EA4EA1E8D4C386B2DCEED212C58DB1C5AAD487343E7 -IV=F55357187F06B142DAEF50DD0D4168C2 -CT=5191CDD0D077AD6BE956AF8E8E39FECA -PT=F63A42508522E5F09C31F160298E8E6F - -I=211 -KEY=8C29CD4F1330EF25CE516F9E6803C9A8472DABCD61FDCD88 -IV=2CBD520E6F6F89C7B4EC43EBF92E6269 -CT=F63A42508522E5F09C31F160298E8E6F -PT=E58ED2EA8671DC5D527CDE01C6D9655D - -I=212 -KEY=3650C9671F38CD752BDFBD74EE7215F5155175CCA724A8D5 -IV=73CA969AECA5574BBA7904280C082250 -CT=E58ED2EA8671DC5D527CDE01C6D9655D -PT=5FFCACC68357B6709F5B10D48C65EA40 - -I=213 -KEY=6F68A078A75FF5A1742311B26D25A3858A0A65182B414295 -IV=DEA2D7D8F9FE3E7D5938691FB86738D4 -CT=5FFCACC68357B6709F5B10D48C65EA40 -PT=10BBA695F25C1F9412DB80F59F937F84 - -I=214 -KEY=9E08E5F9EEC5A7606498B7279F79BC1198D1E5EDB4D23D11 -IV=20E4DE61513233E5F1604581499A52C1 -CT=10BBA695F25C1F9412DB80F59F937F84 -PT=36CAF539734BCAF8250595E5E5DB3E94 - -I=215 -KEY=F72A5636B3A2D23B5252421EEC3276E9BDD4700851090385 -IV=9DEBE05128A2A1A06922B3CF5D67755B -CT=36CAF539734BCAF8250595E5E5DB3E94 -PT=C64074C9A34850C6FD1B12CD8AE9EF30 - -I=216 -KEY=D74FABF587AB10AA941236D74F7A262F40CF62C5DBE0ECB5 -IV=DEF3A637247B78C02065FDC33409C291 -CT=C64074C9A34850C6FD1B12CD8AE9EF30 -PT=DF663CE4199BC64ACB9B6F99D69EC679 - -I=217 -KEY=8D12BAEA80612A284B740A3356E1E0658B540D5C0D7E2ACC -IV=7D9C0365E66F1A355A5D111F07CA3A82 -CT=DF663CE4199BC64ACB9B6F99D69EC679 -PT=CD1BCBDCE7F8C008177E25B83604EE83 - -I=218 -KEY=57B4196767474175866FC1EFB119206D9C2A28E43B7AC44F -IV=41846FA05FC28ABCDAA6A38DE7266B5D -CT=CD1BCBDCE7F8C008177E25B83604EE83 -PT=CD7E96FE44368C4AD22E9D4F6BE3C2C2 - -I=219 -KEY=CBA15BF34D728F0E4B115711F52FAC274E04B5AB5099068D -IV=873A6522E20108C09C1542942A35CE7B -CT=CD7E96FE44368C4AD22E9D4F6BE3C2C2 -PT=BCC88D6EAF2E41D9AA6E7C91DADCF92E - -I=220 -KEY=D3071140E7C7E244F7D9DA7F5A01EDFEE46AC93A8A45FFA3 -IV=A50F782EA949C2A718A64AB3AAB56D4A -CT=BCC88D6EAF2E41D9AA6E7C91DADCF92E -PT=1FFD3EC8E0D0AD8F3D23961703C0C445 - -I=221 -KEY=3F44AB6E12394D24E824E4B7BAD14071D9495F2D89853BE6 -IV=501500DC8A97D00BEC43BA2EF5FEAF60 -CT=1FFD3EC8E0D0AD8F3D23961703C0C445 -PT=1D3D85A9A4BF101E12CC79640D716AC6 - -I=222 -KEY=D6B97A7D0CEBEA71F519611E1E6E506FCB85264984F45120 -IV=84933D2D2F1F6C13E9FDD1131ED2A755 -CT=1D3D85A9A4BF101E12CC79640D716AC6 -PT=A2228D0483F9CF74CAA301FD30D7DB68 - -I=223 -KEY=E86CCBF22BAF7B31573BEC1A9D979F1B012627B4B4238A48 -IV=4AE5BFEB7168981E3ED5B18F27449140 -CT=A2228D0483F9CF74CAA301FD30D7DB68 -PT=D43E1D2C7447B7C08BCA25F8371AEECF - -I=224 -KEY=0279786975DB97998305F136E9D028DB8AEC024C83396487 -IV=2FC19D77503C0296EA15B39B5E74ECA8 -CT=D43E1D2C7447B7C08BCA25F8371AEECF -PT=4F97B6C0B7D10763CD5CE3A45855FEC0 - -I=225 -KEY=7F842708B71AD43BCC9247F65E012FB847B0E1E8DB6C9A47 -IV=BAC3ED277430C4537DFD5F61C2C143A2 -CT=4F97B6C0B7D10763CD5CE3A45855FEC0 -PT=067B1521895AE654CA0C20492A9714B8 - -I=226 -KEY=2FA21F709793A1C7CAE952D7D75BC9EC8DBCC1A1F1FB8EFF -IV=66014BDC0AD70ABB50263878208975FC -CT=067B1521895AE654CA0C20492A9714B8 -PT=E07E7A1D3F39E45E3A755A82EE3C2EBC - -I=227 -KEY=671468BAD93EDBD32A9728CAE8622DB2B7C99B231FC7A043 -IV=47BFF88E3EC2E8DC48B677CA4EAD7A14 -CT=E07E7A1D3F39E45E3A755A82EE3C2EBC -PT=0933D51670E8918147A56816B838BC74 - -I=228 -KEY=9749A2F6B448445023A4FDDC988ABC33F06CF335A7FF1C37 -IV=58F8C33F4725EED2F05DCA4C6D769F83 -CT=0933D51670E8918147A56816B838BC74 -PT=E90570CDFC2CDCC99826780CA7CD7A1C - -I=229 -KEY=C43D753C2489B403CAA18D1164A660FA684A8B390032662B -IV=C4027E5BF29E96A65374D7CA90C1F053 -CT=E90570CDFC2CDCC99826780CA7CD7A1C -PT=65B6C303491459554CDDA630AAB36C12 - -I=230 -KEY=32F2C804DF89C908AF174E122DB239AF24972D09AA810A39 -IV=51DE94724DCE9B10F6CFBD38FB007D0B -CT=65B6C303491459554CDDA630AAB36C12 -PT=A0B1694685785EFBDD6DB8E4FC312BC4 - -I=231 -KEY=9431549183D690920FA62754A8CA6754F9FA95ED56B021FD -IV=5CBDC9F06F45D2F5A6C39C955C5F599A -CT=A0B1694685785EFBDD6DB8E4FC312BC4 -PT=C271A8F639D1A293F4B8899428F618C2 - -I=232 -KEY=0AA1211F2A2134DACDD78FA2911BC5C70D421C797E46393F -IV=E52D7ACAF5DFAF799E90758EA9F7A448 -CT=C271A8F639D1A293F4B8899428F618C2 -PT=AB7968C2A1859D5AEBFAEB201910B672 - -I=233 -KEY=88BFBDDC6D21FC0E66AEE760309E589DE6B8F75967568F4D -IV=15AF9C49191BF995821E9CC34700C8D4 -CT=AB7968C2A1859D5AEBFAEB201910B672 -PT=59D394BB9C41BE21C050A9DF2DD94C2B - -I=234 -KEY=05AB922FA8B6F5FF3F7D73DBACDFE6BC26E85E864A8FC366 -IV=0FB568270892E7A98D142FF3C59709F1 -CT=59D394BB9C41BE21C050A9DF2DD94C2B -PT=43F89BAE0DCCB0EAF30411E6239A753C - -I=235 -KEY=7A7ED7932DED53767C85E875A1135656D5EC4F606915B65A -IV=48F1E1DAEE9C16CD7FD545BC855BA689 -CT=43F89BAE0DCCB0EAF30411E6239A753C -PT=8196A2F49E2508443F86B294D71A5D5E - -I=236 -KEY=8955F595C21BF3AAFD134A813F365E12EA6AFDF4BE0FEB04 -IV=B3DEB1ED557CB477F32B2206EFF6A0DC -CT=8196A2F49E2508443F86B294D71A5D5E -PT=5ED45F8741E7FC5C77CAACA9D3DFA26D - -I=237 -KEY=09205C9C2A528A5BA3C715067ED1A24E9DA0515D6DD04969 -IV=3742941BC0992AAC8075A909E84979F1 -CT=5ED45F8741E7FC5C77CAACA9D3DFA26D -PT=F60C9F9616A03B40655CB733EE1C3B68 - -I=238 -KEY=46DAA0A9A034745355CB8A906871990EF8FCE66E83CC7201 -IV=A3E1EA7D9E5BA6CE4FFAFC358A66FE08 -CT=F60C9F9616A03B40655CB733EE1C3B68 -PT=E73F7E14A3A245B1E594F659D996ED06 - -I=239 -KEY=DA145A69C9D459E1B2F4F484CBD3DCBF1D6810375A5A9F07 -IV=F5D4EB0EAB3486D29CCEFAC069E02DB2 -CT=E73F7E14A3A245B1E594F659D996ED06 -PT=52651C2039168170765B235D85BF6CEC - -I=240 -KEY=61CD045E05969B9FE091E8A4F2C55DCF6B33336ADFE5F3EB -IV=F7162437A85A186ABBD95E37CC42C27E -CT=52651C2039168170765B235D85BF6CEC -PT=665C920C4BB95B5C716D60AE9C30DB1B - -I=241 -KEY=BDF9F289D095660D86CD7AA8B97C06931A5E53C443D528F0 -IV=ADD7416105DB0CF0DC34F6D7D503FD92 -CT=665C920C4BB95B5C716D60AE9C30DB1B -PT=F6E1D36CF7D41F70885587A85B897EA2 - -I=242 -KEY=4CBAF7692571D8C5702CA9C44EA819E3920BD46C185C5652 -IV=9FBF3815905FCD9FF14305E0F5E4BEC8 -CT=F6E1D36CF7D41F70885587A85B897EA2 -PT=137DB7F20F98671E37F55E401D0482E2 - -I=243 -KEY=CEBF572BB09CC72963511E3641307EFDA5FE8A2C0558D4B0 -IV=0C3951BDCA9582CA8205A04295ED1FEC -CT=137DB7F20F98671E37F55E401D0482E2 -PT=72125C79A48573158496EFCC5CA552D4 - -I=244 -KEY=0D8978CF8179CBBF1143424FE5B50DE8216865E059FD8664 -IV=898422AB0DB951B1C3362FE431E50C96 -CT=72125C79A48573158496EFCC5CA552D4 -PT=6B12016832DE435A963FFFA857824CF7 - -I=245 -KEY=180D2DA794FEAF777A514327D76B4EB2B7579A480E7FCA93 -IV=0B47A508EAD8008015845568158764C8 -CT=6B12016832DE435A963FFFA857824CF7 -PT=18693A241FB5687CF3A793B9B7EE4B15 - -I=246 -KEY=3D6C36453DCA611462387903C8DE26CE44F009F1B9918186 -IV=857CC19C3E72C1AD25611BE2A934CE63 -CT=18693A241FB5687CF3A793B9B7EE4B15 -PT=4E04BD363AFC26BDDD3D98892A7C705A - -I=247 -KEY=8B626E8D8E075BCE2C3CC435F222007399CD917893EDF1DC -IV=6E4FCD034F6E2AF5B60E58C8B3CD3ADA -CT=4E04BD363AFC26BDDD3D98892A7C705A -PT=06FB2C371C3F54518AA0A2766CE1CCF3 - -I=248 -KEY=A5ECEB5BAE22C2E72AC7E802EE1D5422136D330EFF0C3D2F -IV=4A23E1EFBB43855E2E8E85D620259929 -CT=06FB2C371C3F54518AA0A2766CE1CCF3 -PT=D7DE2C298EB1EF273A6386986BDEC555 - -I=249 -KEY=B25537EEFD5BDA7AFD19C42B60ACBB05290EB59694D2F87A -IV=9034BBDBF74A369E17B9DCB55379189D -CT=D7DE2C298EB1EF273A6386986BDEC555 -PT=0F4A1CEA83DA845DEC063ADFF173F424 - -I=250 -KEY=39FEF1C45697DABCF253D8C1E3763F58C5088F4965A10C5E -IV=2B5EF64E50A2CF5F8BABC62AABCC00C6 -CT=0F4A1CEA83DA845DEC063ADFF173F424 -PT=CE27F8AF55009D3658D166B960CA12D6 - -I=251 -KEY=5657BBA1106032F13C74206EB676A26E9DD9E9F0056B1E88 -IV=CE96953F749BBFD66FA94A6546F7E84D -CT=CE27F8AF55009D3658D166B960CA12D6 -PT=BF1458E052637EFC0EEF352621606029 - -I=252 -KEY=A1BC53DEFD62921A8360788EE415DC929336DCD6240B7EA1 -IV=B944FC42142E4940F7EBE87FED02A0EB -CT=BF1458E052637EFC0EEF352621606029 -PT=E4D96706DB5B0DA8FA429BB65BFBE4D8 - -I=253 -KEY=DAC8C0328BA4104167B91F883F4ED13A697447607FF09A79 -IV=A8D8E3A3BB687ECC7B7493EC76C6825B -CT=E4D96706DB5B0DA8FA429BB65BFBE4D8 -PT=1B11FF1367FE94F7759D1BEC40B8FDCC - -I=254 -KEY=03AE3AA5E62CA4927CA8E09B58B045CD1CE95C8C3F4867B5 -IV=35D7DB1466E14E3ED966FA976D88B4D3 -CT=1B11FF1367FE94F7759D1BEC40B8FDCC -PT=0989D688C947C616AC13B63892E35E74 - -I=255 -KEY=EAD5A60BB601C1147521361391F783DBB0FAEAB4ADAB39C1 -IV=59BA56CC11EFA9A2E97B9CAE502D6586 -CT=0989D688C947C616AC13B63892E35E74 -PT=978C150575871FB2C8847AA0CB092108 - -I=256 -KEY=C608EE8A971A0383E2AD2316E4709C69787E901466A218C9 -IV=253A79448D79B0B72CDD4881211BC297 -CT=978C150575871FB2C8847AA0CB092108 -PT=D08629CCCF6B869B10768DE9E2984B2E - -I=257 -KEY=D8EB4FC4230D3E39322B0ADA2B1B1AF268081DFD843A53E7 -IV=E9A7FDB26A37B6601EE3A14EB4173DBA -CT=D08629CCCF6B869B10768DE9E2984B2E -PT=E320AECF3803401AB95E09EB50A6EDA5 - -I=258 -KEY=E3F18E12233B5A30D10BA41513185AE8D1561416D49CBE42 -IV=4C6B62E3E6658BE73B1AC1D600366409 -CT=E320AECF3803401AB95E09EB50A6EDA5 -PT=D29E97683C9989C75D5D73EAADC23EE2 - -I=259 -KEY=7D9DEAA58D97A2FC0395337D2F81D32F8C0B67FC795E80A0 -IV=414A2961119CE4D79E6C64B7AEACF8CC -CT=D29E97683C9989C75D5D73EAADC23EE2 -PT=8D859D878DF32FDD26AF4984D48A1BD2 - -I=260 -KEY=E4A19E3554E8D73B8E10AEFAA272FCF2AAA42E78ADD49B72 -IV=9DF8066FCF854065993C7490D97F75C7 -CT=8D859D878DF32FDD26AF4984D48A1BD2 -PT=7B524B71439722F0555D4681F7EEAAC9 - -I=261 -KEY=0C93CDDA4435E903F542E58BE1E5DE02FFF968F95A3A31BB -IV=9529BF1B1ACEEDA5E83253EF10DD3E38 -CT=7B524B71439722F0555D4681F7EEAAC9 -PT=8C8ECC9829F06F73497EA90D48CD7FC5 - -I=262 -KEY=637747C6EF7B72B579CC2913C815B171B687C1F412F74E7E -IV=ADC9666D259469516FE48A1CAB4E9BB6 -CT=8C8ECC9829F06F73497EA90D48CD7FC5 -PT=6E416C2563212821F0D8E7D75297B11F - -I=263 -KEY=7E4BB22E1A7C4E25178D4536AB349950465F26234060FF61 -IV=C3BE9A54FDDA99731D3CF5E8F5073C90 -CT=6E416C2563212821F0D8E7D75297B11F -PT=EFC73DFA5FB87EA16284E25D22360C2F - -I=264 -KEY=62B7D329DC5EA208F84A78CCF48CE7F124DBC47E6256F34E -IV=E2145312DF24CBDB1CFC6107C622EC2D -CT=EFC73DFA5FB87EA16284E25D22360C2F -PT=1191FC5E2EFA9F19004C7D00E1F4D8B1 - -I=265 -KEY=039B0E1DE399831EE9DB8492DA7678E82497B97E83A22BFF -IV=0931D0D100EEB87D612CDD343FC72116 -CT=1191FC5E2EFA9F19004C7D00E1F4D8B1 -PT=717B1B902086B97296B7E97BC01C259E - -I=266 -KEY=CB02B3C8CA4A0C9498A09F02FAF0C19AB220500543BE0E61 -IV=65D0C1DFC85C7FB9C899BDD529D38F8A -CT=717B1B902086B97296B7E97BC01C259E -PT=569097DA8C43871CC5A55AC150ABCD31 - -I=267 -KEY=5FFAEE959D35C247CE3008D876B3468677850AC41315C350 -IV=7A4A448600ACA08994F85D5D577FCED3 -CT=569097DA8C43871CC5A55AC150ABCD31 -PT=4046F3DF53DFC1B56400501F08200FE0 - -I=268 -KEY=0CA33FAAA4B25FEB8E76FB07256C873313855ADB1B35CCB0 -IV=C83E2121AA25A5295359D13F39879DAC -CT=4046F3DF53DFC1B56400501F08200FE0 -PT=87C5362AAF3F31B05C92189E38FD9C66 - -I=269 -KEY=5B782B675EE9A8A509B3CD2D8A53B6834F17424523C850D6 -IV=567E0CD5EAFC699457DB14CDFA5BF74E -CT=87C5362AAF3F31B05C92189E38FD9C66 -PT=03A5CD79734810F4D9559FDC97A4B1A1 - -I=270 -KEY=B069B5DCAADA727F0A160054F91BA6779642DD99B46CE177 -IV=5397ED8A6DF7641EEB119EBBF433DADA -CT=03A5CD79734810F4D9559FDC97A4B1A1 -PT=1B1ECDDFD726C66594DF7B050F6758FF - -I=271 -KEY=52477DE5EFBAE2621108CD8B2E3D6012029DA69CBB0BB988 -IV=52151355DA4369C8E22EC8394560901D -CT=1B1ECDDFD726C66594DF7B050F6758FF -PT=26E9A7A560DD36D9767A51DA06301BBD - -I=272 -KEY=6E59FF11BED37F8837E16A2E4EE056CB74E7F746BD3BA235 -IV=FB1A5F8FA1C3D1F43C1E82F451699DEA -CT=26E9A7A560DD36D9767A51DA06301BBD -PT=C2FAB5CDDB329F2EA1E1459251A3CB1B - -I=273 -KEY=504DE2EC58CE17BBF51BDFE395D2C9E5D506B2D4EC98692E -IV=6BCD90C4D648AB783E141DFDE61D6833 -CT=C2FAB5CDDB329F2EA1E1459251A3CB1B -PT=4293D0A26E81DBE9FED6113B1954D59F - -I=274 -KEY=CC6C6C4150E763AAB7880F41FB53120C2BD0A3EFF5CCBCB1 -IV=0F61DAA62B7E95A79C218EAD08297411 -CT=4293D0A26E81DBE9FED6113B1954D59F -PT=5DC81F054088DB9B3D1F8AD4BACC2039 - -I=275 -KEY=BD3B4967A596578FEA401044BBDBC99716CF293B4F009C88 -IV=0C6435697122955071572526F5713425 -CT=5DC81F054088DB9B3D1F8AD4BACC2039 -PT=B6FB950586C671E968FFC709B79E8AF8 - -I=276 -KEY=9A08B753E07CD6535CBB85413D1DB87E7E30EE32F89E1670 -IV=377A670B7487B3EB2733FE3445EA81DC -CT=B6FB950586C671E968FFC709B79E8AF8 -PT=ED69B1E52F5F095EFF0AC73A76039B65 - -I=277 -KEY=E5FAA83242346B4EB1D234A41242B120813A29088E9D8D15 -IV=DBEEED8784AD80B57FF21F61A248BD1D -CT=ED69B1E52F5F095EFF0AC73A76039B65 -PT=FBC0C9A6FBC2CCD02BF5A009B43FE903 - -I=278 -KEY=44770F6B1653E2754A12FD02E9807DF0AACF89013AA26416 -IV=7D9B061A6209E0FAA18DA7595467893B -CT=FBC0C9A6FBC2CCD02BF5A009B43FE903 -PT=ADBE2B6C2C979C90E019991C5E81F69E - -I=279 -KEY=89A3B49BBE885D34E7ACD66EC517E1604AD6101D64239288 -IV=5495C29E4DDA4E26CDD4BBF0A8DBBF41 -CT=ADBE2B6C2C979C90E019991C5E81F69E -PT=E382D6611C0B2591BE9B7B6BC66D479D - -I=280 -KEY=457D838277C2797B042E000FD91CC4F1F44D6B76A24ED515 -IV=0303BB8A65CCE419CCDE3719C94A244F -CT=E382D6611C0B2591BE9B7B6BC66D479D -PT=7A39D5BFC7ADB6B7539A1AA45A31A7E5 - -I=281 -KEY=814AD70FBAF9D8AA7E17D5B01EB17246A7D771D2F87F72F0 -IV=550BD125E57ADE94C437548DCD3BA1D1 -CT=7A39D5BFC7ADB6B7539A1AA45A31A7E5 -PT=3CB8FF426FF48FA93EFAEDC559833C86 - -I=282 -KEY=89599F584B46337342AF2AF27145FDEF992D9C17A1FC4E76 -IV=45800DE7659A8FD008134857F1BFEBD9 -CT=3CB8FF426FF48FA93EFAEDC559833C86 -PT=2F5C7660310DE65B1C5254E2176A15CA - -I=283 -KEY=8EF84BDE14C7412B6DF35C9240481BB4857FC8F5B6965BBC -IV=5142FFEADEC300C107A1D4865F817258 -CT=2F5C7660310DE65B1C5254E2176A15CA -PT=7A3056742CF8CFDE9CBEAE32607E8DE3 - -I=284 -KEY=F076085EE3EA165617C30AE66CB0D46A19C166C7D6E8D65F -IV=02FBB83EDCB092957E8E4380F72D577D -CT=7A3056742CF8CFDE9CBEAE32607E8DE3 -PT=B2B7B7551B2A1D59601003C6EDD70A78 - -I=285 -KEY=7D74D286D9CEC1C3A574BDB3779AC93379D165013B3FDC27 -IV=890E42EAA4C59B078D02DAD83A24D795 -CT=B2B7B7551B2A1D59601003C6EDD70A78 -PT=8B617CCD9B1289F485167DC13126795C - -I=286 -KEY=8BA3AA3C04001B9D2E15C17EEC8840C7FCC718C00A19A57B -IV=F96182D81751ECCAF6D778BADDCEDA5E -CT=8B617CCD9B1289F485167DC13126795C -PT=D4800EE4A5E29A18C655AD5CE23063F9 - -I=287 -KEY=E51B3BF1DF7B0D54FA95CF9A496ADADF3A92B59CE829C682 -IV=46297563D303DF226EB891CDDB7B16C9 -CT=D4800EE4A5E29A18C655AD5CE23063F9 -PT=4A6008072DCEB7602BF120F0984FF1D6 - -I=288 -KEY=82091A039C558D36B0F5C79D64A46DBF1163956C70663754 -IV=28E82D15BAC860EA671221F2432E8062 -CT=4A6008072DCEB7602BF120F0984FF1D6 -PT=B05CD61BC646851726441B147FBB1AD3 - -I=289 -KEY=C503B4B113DE349700A91186A2E2E8A837278E780FDD2D87 -IV=342F9FDEEEBE130A470AAEB28F8BB9A1 -CT=B05CD61BC646851726441B147FBB1AD3 -PT=33E1834199EE6CD5C6F950D4823B2337 - -I=290 -KEY=4B06065B748AFB69334892C73B0C847DF1DEDEAC8DE60EB0 -IV=02928C43C0FF24968E05B2EA6754CFFE -CT=33E1834199EE6CD5C6F950D4823B2337 -PT=BA0BD1FFA54258361D3A8BD9F3C689E4 - -I=291 -KEY=AD0B10216B5D496B894343389E4EDC4BECE455757E208754 -IV=50DC56062E88C9CAE60D167A1FD7B202 -CT=BA0BD1FFA54258361D3A8BD9F3C689E4 -PT=4911046D8F1D2BCF54F22B5A83AF5AE1 - -I=292 -KEY=AF6CC229A2618121C05247551153F784B8167E2FFD8FDDB5 -IV=A7CC6A2B280A9DE80267D208C93CC84A -CT=4911046D8F1D2BCF54F22B5A83AF5AE1 -PT=254CA1983D7B794911B455E857CE902B - -I=293 -KEY=66413E8C7D11836FE51EE6CD2C288ECDA9A22BC7AA414D9E -IV=D01066ADC643A032C92DFCA5DF70024E -CT=254CA1983D7B794911B455E857CE902B -PT=B0A100E60D0404D123D10AE78E9CFFCB - -I=294 -KEY=D13AF271F9C3337455BFE62B212C8A1C8A73212024DDB255 -IV=20D00A218F07ECEDB77BCCFD84D2B01B -CT=B0A100E60D0404D123D10AE78E9CFFCB -PT=D4CD0CC7D2EBAB050108E94365D34FAA - -I=295 -KEY=8B3C7094C3AD8B018172EAECF3C721198B7BC863410EFDFF -IV=EC5F46869A00FFC25A0682E53A6EB875 -CT=D4CD0CC7D2EBAB050108E94365D34FAA -PT=DF913CC34675469401CCA41DB50BFBA4 - -I=296 -KEY=7DCF9D4559C3EA3A5EE3D62FB5B2678D8AB76C7EF405065B -IV=8718728B7105A417F6F3EDD19A6E613B -CT=DF913CC34675469401CCA41DB50BFBA4 -PT=5B09F0AF91EA41851A232543E97A6ED4 - -I=297 -KEY=C3E6C2A9975117B605EA2680245826089094493D1D7F688F -IV=21D001128A401EBFBE295FECCE92FD8C -CT=5B09F0AF91EA41851A232543E97A6ED4 -PT=8544DFD1E46D14FF1B0E9CF43A7E9EB6 - -I=298 -KEY=54C6D7971066FDD380AEF951C03532F78B9AD5C92701F639 -IV=F861E1C66C3F21779720153E8737EA65 -CT=8544DFD1E46D14FF1B0E9CF43A7E9EB6 -PT=586696A67E355CCDC41AD16D87786773 - -I=299 -KEY=B47A128050D1FC84D8C86FF7BE006E3A4F8004A4A079914A -IV=55A87D49D3640887E0BCC51740B70157 -CT=586696A67E355CCDC41AD16D87786773 -PT=6C7FF8D2F033B33C729C556E0731ACFF - -I=300 -KEY=C66EA18D75351D93B4B797254E33DD063D1C51CAA7483DB5 -IV=7224A11A5D122A607214B30D25E4E117 -CT=6C7FF8D2F033B33C729C556E0731ACFF -PT=BC031D9B497C64B15EE143CF4D2130B1 - -I=301 -KEY=00432A82295B2C6708B48ABE074FB9B763FD1205EA690D04 -IV=61D8239BE618CC39C62D8B0F5C6E31F4 -CT=BC031D9B497C64B15EE143CF4D2130B1 -PT=325D14CCDE09311A8069C5522FD050FD - -I=302 -KEY=E03B01935511FA7E3AE99E72D94688ADE394D757C5B95DF9 -IV=339B83266B282A96E0782B117C4AD619 -CT=325D14CCDE09311A8069C5522FD050FD -PT=FA25D0913004A26A3232F743ACC7677E - -I=303 -KEY=47F79639F27D47E9C0CC4EE3E9422AC7D1A62014697E3A87 -IV=C5F60E2EC86A0971A7CC97AAA76CBD97 -CT=FA25D0913004A26A3232F743ACC7677E -PT=61AA67B567F1CE94326B4711F8115727 - -I=304 -KEY=EE86C028A3B01E7EA16629568EB3E453E3CD6705916F6DA0 -IV=4037462A5B08A27FA971561151CD5997 -CT=61AA67B567F1CE94326B4711F8115727 -PT=35D0FD8AFF6CBDF34065CED4796D9D27 - -I=305 -KEY=EE88DBE9CCC930CB94B6D4DC71DF59A0A3A8A9D1E802F087 -IV=20CB619D26A05953000E1BC16F792EB5 -CT=35D0FD8AFF6CBDF34065CED4796D9D27 -PT=DD69B839EAE7D0DF79F5D06140D54325 - -I=306 -KEY=C77ADB703861D01649DF6CE59B38897FDA5D79B0A8D7B3A2 -IV=16CFCF6A4F3272EA29F20099F4A8E0DD -CT=DD69B839EAE7D0DF79F5D06140D54325 -PT=CA93E79E612893AA0D979ABDF5CA788A - -I=307 -KEY=3F486F048B5D9716834C8B7BFA101AD5D7CAE30D5D1DCB28 -IV=58332C3A8F187A96F832B474B33C4700 -CT=CA93E79E612893AA0D979ABDF5CA788A -PT=39974A1C62DF12F62EC9F75704B0EFA8 - -I=308 -KEY=B9022C8EA2C6FEF4BADBC16798CF0823F903145A59AD2480 -IV=3C09D97EFC480CD6864A438A299B69E2 -CT=39974A1C62DF12F62EC9F75704B0EFA8 -PT=B840EFC34BCD941BF551E437D633BB3A - -I=309 -KEY=D22317E3BB60B9FA029B2EA4D3029C380C52F06D8F9E9FBA -IV=C755A4CF1FAD90046B213B6D19A6470E -CT=B840EFC34BCD941BF551E437D633BB3A -PT=979F6217FD73CAB73A1DE1FACF68542C - -I=310 -KEY=E196EBBFCDA64F7095044CB32E71568F364F119740F6CB96 -IV=D342A7B4EF6CB49F33B5FC5C76C6F68A -CT=979F6217FD73CAB73A1DE1FACF68542C -PT=A290A25CFBCB1BEE137AFB860BB2CF29 - -I=311 -KEY=B756B878A99088B83794EEEFD5BA4D612535EA114B4404BF -IV=D92C9835E799541056C053C76436C7C8 -CT=A290A25CFBCB1BEE137AFB860BB2CF29 -PT=7E99249836CA5167C88BD3431C78C2E0 - -I=312 -KEY=2515F524203B507E490DCA77E3701C06EDBE3952573CC65F -IV=FD7219F6C131C4BD92434D5C89ABD8C6 -CT=7E99249836CA5167C88BD3431C78C2E0 -PT=5B7DAB9C2148A2B7ACCE4723D1D63B3F - -I=313 -KEY=28A33899811FE9B7127061EBC238BEB141707E7186EAFD60 -IV=F6B29A78141D8F8A0DB6CDBDA124B9C9 -CT=5B7DAB9C2148A2B7ACCE4723D1D63B3F -PT=12BAE3836257C52B88ECEEAAE8DE3B80 - -I=314 -KEY=85C6089FEF19163500CA8268A06F7B9AC99C90DB6E34C6E0 -IV=AE11E9BE14B4ECB1AD6530066E06FF82 -CT=12BAE3836257C52B88ECEEAAE8DE3B80 -PT=71C5D9F8747D428DE30736C4DD33E3E5 - -I=315 -KEY=86665ED5DA56FE90710F5B90D41239172A9BA61FB3072505 -IV=2CBAA91201D1980B03A0564A354FE8A5 -CT=71C5D9F8747D428DE30736C4DD33E3E5 -PT=D824A3FB80554CCD519D730D25EED2AF - -I=316 -KEY=F6D0840D75423D5CA92BF86B544775DA7B06D51296E9F7AA -IV=66AA086063C3768C70B6DAD8AF14C3CC -CT=D824A3FB80554CCD519D730D25EED2AF -PT=C974BCBE88ACA9D29312192BE52885BD - -I=317 -KEY=56F2FDAAB52A8691605F44D5DCEBDC08E814CC3973C17217 -IV=14D16CCEDE70F435A02279A7C068BBCD -CT=C974BCBE88ACA9D29312192BE52885BD -PT=23B74C4B5E661FA157F571F4C13AA3AE - -I=318 -KEY=676109782F02525643E8089E828DC3A9BFE1BDCDB2FBD1B9 -IV=46BB517768227D1D3193F4D29A28D4C7 -CT=23B74C4B5E661FA157F571F4C13AA3AE -PT=BDF2A1A79D553C85F5867B2BD5259A82 - -I=319 -KEY=D21B20B085B317EDFE1AA9391FD8FF2C4A67C6E667DE4B3B -IV=054B26F10A7F2D69B57A29C8AAB145BB -CT=BDF2A1A79D553C85F5867B2BD5259A82 -PT=1E02970BE31FEE63C9BCCC79FB41F670 - -I=320 -KEY=3CF3F93D44647FB7E0183E32FCC7114F83DB0A9F9C9FBD4B -IV=C44342FC579F9083EEE8D98DC1D7685A -CT=1E02970BE31FEE63C9BCCC79FB41F670 -PT=70F71372F64174D7C8757F043812439F - -I=321 -KEY=2C83CB76D99E054E90EF2D400A8665984BAE759BA48DFED4 -IV=884B46D9FBE7D99C1070324B9DFA7AF9 -CT=70F71372F64174D7C8757F043812439F -PT=46B20E91579B5CC0ADE9327478DF25FA - -I=322 -KEY=0ADEA18FAA36E94BD65D23D15D1D3958E64747EFDC52DB2E -IV=F256BC3206E11E9C265D6AF973A8EC05 -CT=46B20E91579B5CC0ADE9327478DF25FA -PT=51FE245369F67740615E159E28C2D56C - -I=323 -KEY=E0C00F8BFD4ADCD087A3078234EB4E1887195271F4900E42 -IV=836F6756B9EC572DEA1EAE04577C359B -CT=51FE245369F67740615E159E28C2D56C -PT=58A1B407358C1F9783A05C0A43D5B4FB - -I=324 -KEY=EEA0B17E70A6FC53DF02B3850167518F04B90E7BB745BAB9 -IV=0E584BF6D72F08310E60BEF58DEC2083 -CT=58A1B407358C1F9783A05C0A43D5B4FB -PT=6212DD8752996CC4D747790D5F2BC7E7 - -I=325 -KEY=B6E49EEA07D03112BD106E0253FE3D4BD3FE7776E86E7D5E -IV=2BA760FB0CC14D1858442F947776CD41 -CT=6212DD8752996CC4D747790D5F2BC7E7 -PT=DB16C25BDE0B95F4EC7B34FA2096E6A6 - -I=326 -KEY=F64DCEBA5E71D73E6606AC598DF5A8BF3F85438CC8F89BF8 -IV=674AA4866EE9988E40A9505059A1E62C -CT=DB16C25BDE0B95F4EC7B34FA2096E6A6 -PT=BB98BBB3289F3B5A96C5D3DA92F8CD0F - -I=327 -KEY=23CBCCA3D63DABB8DD9E17EAA56A93E5A94090565A0056F7 -IV=E3D676539CBD9676D5860219884C7C86 -CT=BB98BBB3289F3B5A96C5D3DA92F8CD0F -PT=324C1661B1E289EA3DAC27AF14E026C5 - -I=328 -KEY=D6F7C4A098C4E809EFD2018B14881A0F94ECB7F94EE07032 -IV=E7FB3F340E160FB5F53C08034EF943B1 -CT=324C1661B1E289EA3DAC27AF14E026C5 -PT=6EDA104789445C38F66EC2562F95FBDB - -I=329 -KEY=4B795FAB98879223810811CC9DCC4637628275AF61758BE9 -IV=C5E830814D72E9449D8E9B0B00437A2A -CT=6EDA104789445C38F66EC2562F95FBDB -PT=C834C54858181891C7D654A7502C0B60 - -I=330 -KEY=AA317465E376BAF2493CD484C5D45EA6A554210831598089 -IV=2388FCCDB47CB5DBE1482BCE7BF128D1 -CT=C834C54858181891C7D654A7502C0B60 -PT=9C5F5599557D176050BBAC4258B87F66 - -I=331 -KEY=B601C39C0E5F02DED563811D90A949C6F5EF8D4A69E1FFEF -IV=10C2528D377387311C30B7F9ED29B82C -CT=9C5F5599557D176050BBAC4258B87F66 -PT=ED5F51A6AFA843D467E21F6C68992273 - -I=332 -KEY=44A1FE3F8349D500383CD0BB3F010A12920D92260178DD9C -IV=9E73D9FB1D2471E8F2A03DA38D16D7DE -CT=ED5F51A6AFA843D467E21F6C68992273 -PT=D7A5F18382F892264008F75707254D95 - -I=333 -KEY=568F031D75B9B48FEF992138BDF99834D2056571065D9009 -IV=DEC9B60FA5A91887122EFD22F6F0618F -CT=D7A5F18382F892264008F75707254D95 -PT=D13A34D9F57884ECEE2FA1A412584BE4 - -I=334 -KEY=72CFCCE9FE5EB48A3EA315E148811CD83C2AC4D51405DBED -IV=75C70261D0C49D692440CFF48BE70005 -CT=D13A34D9F57884ECEE2FA1A412584BE4 -PT=064D550098F0813D145A2AA296064CCF - -I=335 -KEY=58448186BD1ED1FC38EE40E1D0719DE52870EE7782039722 -IV=754A1B79A75BD3B32A8B4D6F43406576 -CT=064D550098F0813D145A2AA296064CCF -PT=D7CD7D2B23E42F7A9808D48C28982743 - -I=336 -KEY=6FF7BCC770079D57EF233DCAF395B29FB0783AFBAA9BB061 -IV=25EE1F4D8F257C6437B33D41CD194CAB -CT=D7CD7D2B23E42F7A9808D48C28982743 -PT=6F55D4C7A13F08A1D936C5F0177040CA - -I=337 -KEY=7ECBB104AA3505E58076E90D52AABA3E694EFF0BBDEBF0AB -IV=E21F1527B69B89C8113C0DC3DA3298B2 -CT=6F55D4C7A13F08A1D936C5F0177040CA -PT=7F061908571CDDBC1F8F82A31A3AF1F9 - -I=338 -KEY=135D99B5F2482FFAFF70F00505B6678276C17DA8A7D10152 -IV=5DA54CDB26A0DC2D6D9628B1587D2A1F -CT=7F061908571CDDBC1F8F82A31A3AF1F9 -PT=30AB085953DE3E8027DE0C8A185A7D02 - -I=339 -KEY=3C76458A987B66F0CFDBF85C56685902511F7122BF8B7C50 -IV=E0614E072D2563DD2F2BDC3F6A33490A -CT=30AB085953DE3E8027DE0C8A185A7D02 -PT=92C915E98AEBF6265C43A66AC5B40787 - -I=340 -KEY=EBD41B4484EA67A05D12EDB5DC83AF240D5CD7487A3F7BD7 -IV=6EA27DF02FA0A9A9D7A25ECE1C910150 -CT=92C915E98AEBF6265C43A66AC5B40787 -PT=E9AC0996F97FFBA0F7C860A089CDF99F - -I=341 -KEY=85B6BBBC8E2243D3B4BEE42325FC5484FA94B7E8F3F28248 -IV=46D915F802932C936E62A0F80AC82473 -CT=E9AC0996F97FFBA0F7C860A089CDF99F -PT=BA1D082EDB28E255CB37AFEDB497D43A - -I=342 -KEY=BDA8736E56DDB34F0EA3EC0DFED4B6D131A3180547655672 -IV=0A7B9BCBE89E4CDE381EC8D2D8FFF09C -CT=BA1D082EDB28E255CB37AFEDB497D43A -PT=63298FE15A14C4A4E582C57772A0581E - -I=343 -KEY=9B5DC0C3B097B7CE6D8A63ECA4C07275D421DD7235C50E6C -IV=81F4666446CB470526F5B3ADE64A0481 -CT=63298FE15A14C4A4E582C57772A0581E -PT=AE79390C6789DFCF7110BA93281E9895 - -I=344 -KEY=E64DDC6A55048E35C3F35AE0C349ADBAA53167E11DDB96F9 -IV=DB4439803A1ACA807D101CA9E59339FB -CT=AE79390C6789DFCF7110BA93281E9895 -PT=2C9DF2ED511595756E5CF6D33442D3A3 - -I=345 -KEY=9C75AC9CBA0918CDEF6EA80D925C38CFCB6D91322999455A -IV=B73DBACA0C10AD0A7A3870F6EF0D96F8 -CT=2C9DF2ED511595756E5CF6D33442D3A3 -PT=90FDAEAEDC379128B73515CB2AAC9B7A - -I=346 -KEY=A045744F6BB9205F7F9306A34E6BA9E77C5884F90335DE20 -IV=356BBCDD4EBDA8F93C30D8D3D1B03892 -CT=90FDAEAEDC379128B73515CB2AAC9B7A -PT=E66EA385E1F20791090CA24ADB250AFC - -I=347 -KEY=48E94FAC40CFC94B99FDA526AF99AE76755426B3D810D4DC -IV=ABAF17EBE3658829E8AC3BE32B76E914 -CT=E66EA385E1F20791090CA24ADB250AFC -PT=A17C6802F4322D97C6966B523B54CF88 - -I=348 -KEY=3FC9CD7847FF49D73881CD245BAB83E1B3C24DE1E3441B54 -IV=7D25F4EE8B874E2D772082D40730809C -CT=A17C6802F4322D97C6966B523B54CF88 -PT=CBEC825D143BF30C58B608B58ABFB618 - -I=349 -KEY=D4464B5CD3CFAD06F36D4F794F9070EDEB74455469FBAD4C -IV=93D0E88641960F8EEB8F86249430E4D1 -CT=CBEC825D143BF30C58B608B58ABFB618 -PT=D7A8E224DAA4DB7629790D3D4D5A8560 - -I=350 -KEY=73DD2DA38114D0BD24C5AD5D9534AB9BC20D486924A1282C -IV=3E6B8F8084BAA391A79B66FF52DB7DBB -CT=D7A8E224DAA4DB7629790D3D4D5A8560 -PT=EB7EAD5CF27BA091DEF8D7839EFD7C90 - -I=351 -KEY=CDA609EB23BB90EBCFBB0001674F0B0A1CF59FEABA5C54BC -IV=8EEE61573B01F1E4BE7B2448A2AF4056 -CT=EB7EAD5CF27BA091DEF8D7839EFD7C90 -PT=2EFA41B666ECBBB1D699C1FB8CA9E175 - -I=352 -KEY=768FCC098B8F48FFE14141B701A3B0BBCA6C5E1136F5B5C9 -IV=60BC671273707E17BB29C5E2A834D814 -CT=2EFA41B666ECBBB1D699C1FB8CA9E175 -PT=44D7245914CF3BF73831D4225BD32FDD - -I=353 -KEY=91F2FFA6BB520FD1A59665EE156C8B4CF25D8A336D269A14 -IV=21187FBCFC5E01BEE77D33AF30DD472E -CT=44D7245914CF3BF73831D4225BD32FDD -PT=E9FA049C77C326A4F03D2C9E740DE4A1 - -I=354 -KEY=2FC9C39B5DBC560E4C6C617262AFADE80260A6AD192B7EB5 -IV=72912E59A0095846BE3B3C3DE6EE59DF -CT=E9FA049C77C326A4F03D2C9E740DE4A1 -PT=9A62281465C72FDAA73E00E343A99BC3 - -I=355 -KEY=F401ED3768BC72D4D60E496607688232A55EA64E5A82E576 -IV=88022668FE843060DBC82EAC350024DA -CT=9A62281465C72FDAA73E00E343A99BC3 -PT=FAD9ADA4B98A4141A2857F93F6F71DEB - -I=356 -KEY=1AD741BDF8A18D8E2CD7E4C2BEE2C37307DBD9DDAC75F89D -IV=F98FECC470C84631EED6AC8A901DFF5A -CT=FAD9ADA4B98A4141A2857F93F6F71DEB -PT=630453171FEE434834490229830E1C1A - -I=357 -KEY=24F7B99681335EAD4FD3B7D5A10C803B3392DBF42F7BE487 -IV=5D69B4D81847DABD3E20F82B7992D323 -CT=630453171FEE434834490229830E1C1A -PT=DE613189001598BA6AE67F259F9FD349 - -I=358 -KEY=60E401E96083FF2291B2865CA11918815974A4D1B0E437CE -IV=AADE84AD4127FCDA4413B87FE1B0A18F -CT=DE613189001598BA6AE67F259F9FD349 -PT=CA18925634072DEC80F2F724A0F24235 - -I=359 -KEY=66831E7F4FC51DB95BAA140A951E356DD98653F5101675FB -IV=1C1E2F698C5DD62006671F962F46E29B -CT=CA18925634072DEC80F2F724A0F24235 -PT=B289F06551C56B77F5CDF7B321E0E8E3 - -I=360 -KEY=48FB1A5B41F634D5E923E46FC4DB5E1A2C4BA44631F69D18 -IV=6A872620ED13A14B2E7804240E33296C -CT=B289F06551C56B77F5CDF7B321E0E8E3 -PT=13B1F93DD388A192D6FB836C90E0E022 - -I=361 -KEY=F13FA6E33170F596FA921D521753FF88FAB0272AA1167D3A -IV=40BF714207DA180BB9C4BCB87086C143 -CT=13B1F93DD388A192D6FB836C90E0E022 -PT=298B7B19A27EA1BE9574588A5885F64B - -I=362 -KEY=CE171639A4DDA77DD319664BB52D5E366FC47FA0F9938B71 -IV=8FB32729166E154F3F28B0DA95AD52EB -CT=298B7B19A27EA1BE9574588A5885F64B -PT=11FA000C73485654A8918360DF3C1F5E - -I=363 -KEY=9322B0E9AE4D6B20C2E36647C6650862C755FCC026AF942F -IV=809DE75B169C56BE5D35A6D00A90CC5D -CT=11FA000C73485654A8918360DF3C1F5E -PT=05533E642958E2F6F29BB1848BE225CB - -I=364 -KEY=21B86D89874D627FC7B05823EF3DEA9435CE4D44AD4DB1E4 -IV=81CF24C876471695B29ADD602900095F -CT=05533E642958E2F6F29BB1848BE225CB -PT=613DB485B9565B4889887282A3C8CFB5 - -I=365 -KEY=6E5AD95BDDA04D12A68DECA6566BB1DCBC463FC60E857E51 -IV=7E3AC16D28733BD84FE2B4D25AED2F6D -CT=613DB485B9565B4889887282A3C8CFB5 -PT=0CDDDA3B3375430B601BA1CCBD567284 - -I=366 -KEY=807937B80E55E814AA50369D651EF2D7DC5D9E0AB3D30CD5 -IV=C49324EE3A928684EE23EEE3D3F5A506 -CT=0CDDDA3B3375430B601BA1CCBD567284 -PT=C47A6E22A123AB6397F9C2AFFA6D45AB - -I=367 -KEY=20B3595EFE3D3DA76E2A58BFC43D59B44BA45CA549BE497E -IV=B188E4D3A2AC3F42A0CA6EE6F068D5B3 -CT=C47A6E22A123AB6397F9C2AFFA6D45AB -PT=71592AFCA1FEEE8AB6D6CEF22C14A21D - -I=368 -KEY=A97EAD081EDF66D11F73724365C3B73EFD72925765AAEB63 -IV=0DFF90FA3722469289CDF456E0E25B76 -CT=71592AFCA1FEEE8AB6D6CEF22C14A21D -PT=F4E0C4BCF8B386CF1BD457BD1FB65646 - -I=369 -KEY=DA90448D67D59E3CEB93B6FF9D7031F1E6A6C5EA7A1CBD25 -IV=154DB6488872217073EEE985790AF8ED -CT=F4E0C4BCF8B386CF1BD457BD1FB65646 -PT=9ED1119909322C280FE92B7840792605 - -I=370 -KEY=CF62D3016C8507F17542A76694421DD9E94FEE923A659B20 -IV=ED45F0A7D33FC08515F2978C0B5099CD -CT=9ED1119909322C280FE92B7840792605 -PT=F812615F1BE701E74FCEEFC288303C7C - -I=371 -KEY=C2681849C663E45A8D50C6398FA51C3EA6810150B255A75C -IV=19E09027253115100D0ACB48AAE6E3AB -CT=F812615F1BE701E74FCEEFC288303C7C -PT=25897C51C5FEDBFDC630BF8E9F3B2875 - -I=372 -KEY=F47C452077541CEEA8D9BA684A5BC7C360B1BEDE2D6E8F29 -IV=2C2EE28C518163DF36145D69B137F8B4 -CT=25897C51C5FEDBFDC630BF8E9F3B2875 -PT=9929E5E9F0CA00D0E02022E2FCFAFC3F - -I=373 -KEY=F7BF8679C8D86E2C31F05F81BA91C71380919C3CD1947316 -IV=FCF0C5D85049463103C3C359BF8C72C2 -CT=9929E5E9F0CA00D0E02022E2FCFAFC3F -PT=3B603A3FDAA669E7C965708C9789E329 - -I=374 -KEY=9312EDA0B14017910A9065BE6037AEF449F4ECB0461D903F -IV=364CDACF5762B18864AD6BD9799879BD -CT=3B603A3FDAA669E7C965708C9789E329 -PT=AC33F7B1A778C36617668C98E20B318A - -I=375 -KEY=D5BC989407D78D82A6A3920FC74F6D925E926028A416A1B5 -IV=5FB00506C71711D046AE7534B6979A13 -CT=AC33F7B1A778C36617668C98E20B318A -PT=B408AF5509EF45E0AEDF12570FAE3651 - -I=376 -KEY=6BBB14591C12578112AB3D5ACEA02872F04D727FABB897E4 -IV=D41F58F192CF60D6BE078CCD1BC5DA03 -CT=B408AF5509EF45E0AEDF12570FAE3651 -PT=39EB055E027AC0DEA5992B7BA3753AB5 - -I=377 -KEY=3F71566EA7D07EBF2B403804CCDAE8AC55D4590408CDAD51 -IV=7E495DEC2224696554CA4237BBC2293E -CT=39EB055E027AC0DEA5992B7BA3753AB5 -PT=832B01D2AD4F0EE077244CF9B6ABE31C - -I=378 -KEY=0BDC563CE47527D1A86B39D66195E64C22F015FDBE664E4D -IV=4FE13E98163C3F7734AD005243A5596E -CT=832B01D2AD4F0EE077244CF9B6ABE31C -PT=926EB7E17FA4262D1D390D83CDAC6FB2 - -I=379 -KEY=07D4D606747858B63A058E371E31C0613FC9187E73CA21FF -IV=12D459160DCFFEFE0C08803A900D7F67 -CT=926EB7E17FA4262D1D390D83CDAC6FB2 -PT=DBFBC3313F86C26BA54B9F69BA93C665 - -I=380 -KEY=84BE014D4BFA8ACCE1FE4D0621B7020A9A828717C959E79A -IV=179322B7D19F3A38836AD74B3F82D27A -CT=DBFBC3313F86C26BA54B9F69BA93C665 -PT=39B00A1A655B298F56271B2BDBA6B16B - -I=381 -KEY=A921F537F5F324CAD84E471C44EC2B85CCA59C3C12FF56F1 -IV=D4B03D3AB6FF79D22D9FF47ABE09AE06 -CT=39B00A1A655B298F56271B2BDBA6B16B -PT=7C5DABBF7C7951808DCD35DB2617B763 - -I=382 -KEY=3BB6AACEEEC21A9FA413ECA338957A054168A9E734E8E192 -IV=5C92A3C4C3C8567792975FF91B313E55 -CT=7C5DABBF7C7951808DCD35DB2617B763 -PT=BD88FB3B815415503D4F9264AFEA7887 - -I=383 -KEY=008F402C3524BCA8199B1798B9C16F557C273B839B029915 -IV=08360D06E31B3AA43B39EAE2DBE6A637 -CT=BD88FB3B815415503D4F9264AFEA7887 -PT=B2813AFBC477618F4C6A436C97AA26F2 - -I=384 -KEY=8AB9F9FC4EE8B2D4AB1A2D637DB60EDA304D78EF0CA8BFE7 -IV=DCF7EF19F68916268A36B9D07BCC0E7C -CT=B2813AFBC477618F4C6A436C97AA26F2 -PT=1E96D52E46B1D73EB00778B203946F28 - -I=385 -KEY=CA9D4CE917399619B58CF84D3B07D9E4804A005D0F3CD0CF -IV=63A112DB63DDECB54024B51559D124CD -CT=1E96D52E46B1D73EB00778B203946F28 -PT=C03D770FE4B1733C5E59DD68F0060D5A - -I=386 -KEY=1D8268F833FC772575B18F42DFB6AAD8DE13DD35FF3ADD95 -IV=8B7AC769F85BA650D71F241124C5E13C -CT=C03D770FE4B1733C5E59DD68F0060D5A -PT=6495A8A3667DEDE2CAB58BA3B2F7034E - -I=387 -KEY=CCCEE884786AF28A112427E1B9CB473A14A656964DCDDEDB -IV=280C5BD88E3B88ACD14C807C4B9685AF -CT=6495A8A3667DEDE2CAB58BA3B2F7034E -PT=4CC3C2AC85EBD619E708988C9FEC60C6 - -I=388 -KEY=8B85284B2B06874D5DE7E54D3C209123F3AECE1AD221BE1D -IV=62E112946391FEFB474BC0CF536C75C7 -CT=4CC3C2AC85EBD619E708988C9FEC60C6 -PT=1522371FD5D53919F52CD97258CEBDA7 - -I=389 -KEY=B2EBBE81CF234A7E48C5D252E9F5A83A068217688AEF03BA -IV=8A936BAE971C0C9F396E96CAE425CD33 -CT=1522371FD5D53919F52CD97258CEBDA7 -PT=4AA882DCB39AA79E8439E9ECE9F4F3BD - -I=390 -KEY=043B9FDDEC299802026D508E5A6F0FA482BBFE84631BF007 -IV=6FA7FCDBA3B1BCA5B6D0215C230AD27C -CT=4AA882DCB39AA79E8439E9ECE9F4F3BD -PT=28C1E45D8D01AD148FA7D7C4F41ACE04 - -I=391 -KEY=1074F9BD3FFD4EAF2AACB4D3D76EA2B00D1C294097013E03 -IV=1210BAF1D69B23FE144F6660D3D4D6AD -CT=28C1E45D8D01AD148FA7D7C4F41ACE04 -PT=3ABE04FC59C3BDF9D7721902DEFCB439 - -I=392 -KEY=D97F3440E3684D291012B02F8EAD1F49DA6E304249FD8A3A -IV=C271800852E147D5C90BCDFDDC950386 -CT=3ABE04FC59C3BDF9D7721902DEFCB439 -PT=3A563A6A047E16123B289B047BB54C4E - -I=393 -KEY=49A10E68A38B02F42A448A458AD3095BE146AB463248C674 -IV=9DB6856C7E01CF3690DE3A2840E34FDD -CT=3A563A6A047E16123B289B047BB54C4E -PT=F8CB54B8D16274E9A20C0F026866E52F - -I=394 -KEY=9DD96DCFD4A1B11FD28FDEFD5BB17DB2434AA4445A2E235B -IV=233C069312D97A03D47863A7772AB3EB -CT=F8CB54B8D16274E9A20C0F026866E52F -PT=0302D25C39BF21F67F1AF2E1951D40F9 - -I=395 -KEY=746E55928D7E549DD18D0CA1620E5C443C5056A5CF3363A2 -IV=B6086C5FEEE9A078E9B7385D59DFE582 -CT=0302D25C39BF21F67F1AF2E1951D40F9 -PT=721192A3A5140DD63D93E0D6ACC4A4B8 - -I=396 -KEY=7E6FC505EAAB07E4A39C9E02C71A519201C3B67363F7C71A -IV=9828A03F0ADCE33E0A01909767D55379 -CT=721192A3A5140DD63D93E0D6ACC4A4B8 -PT=1C0F7440EF41FF18E263392741AD9D8B - -I=397 -KEY=D13AD442CAE026C3BF93EA42285BAE8AE3A08F54225A5A91 -IV=4FC707A846B4469AAF551147204B2127 -CT=1C0F7440EF41FF18E263392741AD9D8B -PT=442F978615AC3983AA5ABEA81AD1ACA6 - -I=398 -KEY=043A4EFFCD44EEB1FBBC7DC43DF7970949FA31FC388BF637 -IV=05D58B4A88A961AFD5009ABD07A4C872 -CT=442F978615AC3983AA5ABEA81AD1ACA6 -PT=E75C29413A33AA1210F36AADEC02FCEE - -I=399 -KEY=81492E2C6296C9341CE0548507C43D1B59095B51D4890AD9 -IV=D89794EAA1791507857360D3AFD22785 -CT=E75C29413A33AA1210F36AADEC02FCEE -PT=6342BFDDD2F6610350458B6695463484 - -========== - -KEYSIZE=256 - -I=0 -KEY=0000000000000000000000000000000000000000000000000000000000000000 -IV=00000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=4804E1818FE6297519A3E88C57310413 - -I=1 -KEY=098E3797788EA3BCD5477BF1660373944804E1818FE6297519A3E88C57310413 -IV=098E3797788EA3BCD5477BF166037394 -CT=4804E1818FE6297519A3E88C57310413 -PT=D36C27EBB8FA0BC9FA368DF850FD45FB - -I=2 -KEY=D949E143F98BDE24BD40A256F9E369339B68C66A371C22BCE395657407CC41E8 -IV=D0C7D6D481057D986807D9A79FE01AA7 -CT=D36C27EBB8FA0BC9FA368DF850FD45FB -PT=EBCB4DC84155682856D94B442BC597EE - -I=3 -KEY=296352DA0158E197EBC80771EC1ECC7D70A38BA276494A94B54C2E302C09D606 -IV=F02AB399F8D33FB35688A52715FDA54E -CT=EBCB4DC84155682856D94B442BC597EE -PT=23AA6A6B4BE8C04E19707CA330804C4E - -I=4 -KEY=5D3E9E2EA4DEDDB65A58DADB5B9679BC5309E1C93DA18ADAAC3C52931C899A48 -IV=745DCCF4A5863C21B190DDAAB788B5C1 -CT=23AA6A6B4BE8C04E19707CA330804C4E -PT=9B1AA0F33416484BA68740E821F95CD3 - -I=5 -KEY=E35024184CCA14687DB19E13093D2A31C813413A09B7C2910ABB127B3D70C69B -IV=BE6EBA36E814C9DE27E944C852AB538D -CT=9B1AA0F33416484BA68740E821F95CD3 -PT=8A8C6ADF453CB7A2FC4F3690FF7C6F23 - -I=6 -KEY=FDC6EB83FF93BA06DE2D09CB33F05406429F2BE54C8B7533F6F424EBC20CA9B8 -IV=1E96CF9BB359AE6EA39C97D83ACD7E37 -CT=8A8C6ADF453CB7A2FC4F3690FF7C6F23 -PT=B104182A3D85B857FB342BD06063E989 - -I=7 -KEY=7177668BAC9407FB2835524D58F1311EF39B33CF710ECD640DC00F3BA26F4031 -IV=8CB18D085307BDFDF6185B866B016518 -CT=B104182A3D85B857FB342BD06063E989 -PT=68AD7EB507FAEE8FF54E5B7EB4314208 - -I=8 -KEY=790AE8470B39A60E9F32F4025B2251849B364D7A76F423EBF88E5445165E0239 -IV=087D8ECCA7ADA1F5B707A64F03D3609A -CT=68AD7EB507FAEE8FF54E5B7EB4314208 -PT=99736D55B2730FDBC4FCD9128A3E6F06 - -I=9 -KEY=4EAF05AC15913059B6B0E43EFA7ADC1C0245202FC4872C303C728D579C606D3F -IV=37A5EDEB1EA896572982103CA1588D98 -CT=99736D55B2730FDBC4FCD9128A3E6F06 -PT=DF326CEE98EE253C855D171D93AA9455 - -I=10 -KEY=55EE1CCDBA5A04040F4212DFBF6ABC89DD774CC15C69090CB92F9A4A0FCAF96A -IV=1B411961AFCB345DB9F2F6E145106095 -CT=DF326CEE98EE253C855D171D93AA9455 -PT=B4E41BD5257CD7AF0A6F020BEE5F4067 - -I=11 -KEY=6190A91725B7D4E8DD42F3F3B4E42E14699357147915DEA3B3409841E195B90D -IV=347EB5DA9FEDD0ECD200E12C0B8E929D -CT=B4E41BD5257CD7AF0A6F020BEE5F4067 -PT=3608F41CA4C677E74F48B113D9B336B0 - -I=12 -KEY=0A93E973CCBAC75C9C0AA05502A43E945F9BA308DDD3A944FC08295238268FBD -IV=6B034064E90D13B4414853A6B6401080 -CT=3608F41CA4C677E74F48B113D9B336B0 -PT=FB54DBB9C0C7176C4C9E1E4E6688B570 - -I=13 -KEY=584CCAEDD52F491A935D892AD132F75AA4CF78B11D14BE28B096371C5EAE3ACD -IV=52DF239E19958E460F57297FD396C9CE -CT=FB54DBB9C0C7176C4C9E1E4E6688B570 -PT=F40A6A6AE95E9D163D88AAE9A2D359BC - -I=14 -KEY=0DD784E96CAB96D702DD3972E95317FD50C512DBF44A233E8D1E9DF5FC7D6371 -IV=559B4E04B984DFCD9180B0583861E0A7 -CT=F40A6A6AE95E9D163D88AAE9A2D359BC -PT=0FE04B8BB249E49E24FEB6FFE106121C - -I=15 -KEY=2BC3A4EBD80215F0130EC1F76821BC515F2559504603C7A0A9E02B0A1D7B716D -IV=26142002B4A9832711D3F8858172ABAC -CT=0FE04B8BB249E49E24FEB6FFE106121C -PT=EBA4EF8D541919A0D0947359344D61C9 - -I=16 -KEY=0B5856BE9A78457868F7CF9C9C58EF7AB481B6DD121ADE0079745853293610A4 -IV=209BF255427A50887BF90E6BF479532B -CT=EBA4EF8D541919A0D0947359344D61C9 -PT=06484C36A29BD3CA7CBAB7FBEA47313B - -I=17 -KEY=C004F13C83AA1FD5C2A592D27B47C437B2C9FAEBB0810DCA05CEEFA8C371219F -IV=CB5CA78219D25AADAA525D4EE71F2B4D -CT=06484C36A29BD3CA7CBAB7FBEA47313B -PT=376157B7DB3B027980C5EF0E88B3F9EF - -I=18 -KEY=AD89203CAD17908C4F44F3FD2D61505385A8AD5C6BBA0FB3850B00A64BC2D870 -IV=6D8DD1002EBD8F598DE1612F56269464 -CT=376157B7DB3B027980C5EF0E88B3F9EF -PT=756783C2F0EE73BBD81B908F660AA6F7 - -I=19 -KEY=FBE990A6247EABC0CD5090DF0C566E01F0CF2E9E9B547C085D1090292DC87E87 -IV=5660B09A89693B4C8214632221373E52 -CT=756783C2F0EE73BBD81B908F660AA6F7 -PT=6CC64B773ECDFA9749DB33197F7EA0AB - -I=20 -KEY=FEC46AD20DA3E667B26D79B11A82A40F9C0965E9A599869F14CBA33052B6DE2C -IV=052DFA7429DD4DA77F3DE96E16D4CA0E -CT=6CC64B773ECDFA9749DB33197F7EA0AB -PT=9230E4DCA927E2F8E617A2EBC4F11477 - -I=21 -KEY=F4396B035E4E1BD914877124D1CD4B370E3981350CBE6467F2DC01DB9647CA5B -IV=0AFD01D153EDFDBEA6EA0895CB4FEF38 -CT=9230E4DCA927E2F8E617A2EBC4F11477 -PT=6ACD9F3939A86EE4236A3C060D2F5C3C - -I=22 -KEY=49C90E620094D6A85E75BD886FAFE79264F41E0C35160A83D1B63DDD9B689667 -IV=BDF065615EDACD714AF2CCACBE62ACA5 -CT=6ACD9F3939A86EE4236A3C060D2F5C3C -PT=E5F4F050827F69B60B417063AC1060E4 - -I=23 -KEY=1AED4D36938AB2D5D884EF2F106D2CEF8100EE5CB7696335DAF74DBE3778F683 -IV=53244354931E647D86F152A77FC2CB7D -CT=E5F4F050827F69B60B417063AC1060E4 -PT=5CE4B0B3C32700B6B887E05A88EE0239 - -I=24 -KEY=EF14B937F6E0F19AC8ADBD208DD60EE5DDE45EEF744E63836270ADE4BF96F4BA -IV=F5F9F401656A434F1029520F9DBB220A -CT=5CE4B0B3C32700B6B887E05A88EE0239 -PT=4794284E2BB56A47332E84AD7A2006A2 - -I=25 -KEY=182581A233332DDCD43C25AF9AA3AD7F9A7076A15FFB09C4515E2949C5B6F218 -IV=F7313895C5D3DC461C91988F1775A39A -CT=4794284E2BB56A47332E84AD7A2006A2 -PT=C8AE2CAA7C257508C3AB75BE28D2602F - -I=26 -KEY=ABE7FE236E28332AE7A74A9EA03B97A952DE5A0B23DE7CCC92F55CF7ED649237 -IV=B3C27F815D1B1EF6339B6F313A983AD6 -CT=C8AE2CAA7C257508C3AB75BE28D2602F -PT=A9FD4B9D4833B647FF60F8013C3B5B9D - -I=27 -KEY=08248BDC5F9186DCD65DA6344A10C57EFB2311966BEDCA8B6D95A4F6D15FC9AA -IV=A3C375FF31B9B5F631FAECAAEA2B52D7 -CT=A9FD4B9D4833B647FF60F8013C3B5B9D -PT=C871D7B4C0167DCFDD79AF1DEAC49D4F - -I=28 -KEY=BF29FB1B11AA7DB8742FF06458C384853352C622ABFBB744B0EC0BEB3B9B54E5 -IV=B70D70C74E3BFB64A272565012D341FB -CT=C871D7B4C0167DCFDD79AF1DEAC49D4F -PT=E2DE7BAC726C404FC7BA5099E39409CA - -I=29 -KEY=1810253DDF0CC5ECE2381FB4C2BEEDCCD18CBD8ED997F70B77565B72D80F5D2F -IV=A739DE26CEA6B8549617EFD09A7D6949 -CT=E2DE7BAC726C404FC7BA5099E39409CA -PT=D4A8257110EF7FFE2A1F026B28D7483A - -I=30 -KEY=F343D1EC9AEB200B65DB4AA369F6A47E052498FFC97888F55D495919F0D81515 -IV=EB53F4D145E7E5E787E35517AB4849B2 -CT=D4A8257110EF7FFE2A1F026B28D7483A -PT=9EA25895CFEAEAD224095C4687726D06 - -I=31 -KEY=86A93B0F219E1FFEBC0E4BA0334046AA9B86C06A069262277940055F77AA7813 -IV=75EAEAE3BB753FF5D9D501035AB6E2D4 -CT=9EA25895CFEAEAD224095C4687726D06 -PT=5C5DD66E7AD197DA86844D53C8ACEA0E - -I=32 -KEY=2278C61356CB0A951DAE3B6DC76868C9C7DB16047C43F5FDFFC4480CBF06921D -IV=A4D1FD1C7755156BA1A070CDF4282E63 -CT=5C5DD66E7AD197DA86844D53C8ACEA0E -PT=011959D35C8FE620E1C49D1804912F26 - -I=33 -KEY=E1972A31ACF850A22CBC592AF6CAF6F0C6C24FD720CC13DD1E00D514BB97BD3B -IV=C3EFEC22FA335A373112624731A29E39 -CT=011959D35C8FE620E1C49D1804912F26 -PT=895DDA7BB43DC3060B41DA70CAE4D2ED - -I=34 -KEY=BB4A76B5E8FD3820CC5D4A44F527E6704F9F95AC94F1D0DB15410F6471736FD6 -IV=5ADD5C8444056882E0E1136E03ED1080 -CT=895DDA7BB43DC3060B41DA70CAE4D2ED -PT=94E8BBC942B4127A0A8EBEC59319CF57 - -I=35 -KEY=4D98C60F0FA316B2DA3D11CFB3B9FE0CDB772E65D645C2A11FCFB1A1E26AA081 -IV=F6D2B0BAE75E2E9216605B8B469E187C -CT=94E8BBC942B4127A0A8EBEC59319CF57 -PT=274FE85E229321D4A6B2E9D4F0D3830F - -I=36 -KEY=A9FC5AC4A7B3550BC34E4BA94C0D328BFC38C63BF4D6E375B97D587512B9238E -IV=E4649CCBA81043B919735A66FFB4CC87 -CT=274FE85E229321D4A6B2E9D4F0D3830F -PT=256AC08E72D79B0CB7457B26769AC226 - -I=37 -KEY=1C44DEF03398188AC1B2EF6A6E91A33FD95206B5860178790E3823536423E1A8 -IV=B5B88434942B4D8102FCA4C3229C91B4 -CT=256AC08E72D79B0CB7457B26769AC226 -PT=366D17A14CA0FC192DBB731C1C305874 - -I=38 -KEY=3D80B92C01F9721032366B20D97DC097EF3F1114CAA184602383504F7813B9DC -IV=21C467DC32616A9AF384844AB7EC63A8 -CT=366D17A14CA0FC192DBB731C1C305874 -PT=000B4A6054663874ECAE310144BA9377 - -I=39 -KEY=48DD38DC16A4CE76338C95A866C1C795EF345B749EC7BC14CF2D614E3CA92AAB -IV=755D81F0175DBC6601BAFE88BFBC0702 -CT=000B4A6054663874ECAE310144BA9377 -PT=32B32D65566626D794FB296CA816B0A8 - -I=40 -KEY=C62EFA02F23FE796799BF9151FBFD8D7DD877611C8A19AC35BD6482294BF9A03 -IV=8EF3C2DEE49B29E04A176CBD797E1F42 -CT=32B32D65566626D794FB296CA816B0A8 -PT=D743A090101B1BAF5B83E8C06517E193 - -I=41 -KEY=91400A96EEADA906ABD4C3F6863CE4750AC4D681D8BA816C0055A0E2F1A87B90 -IV=576EF0941C924E90D24F3AE399833CA2 -CT=D743A090101B1BAF5B83E8C06517E193 -PT=2DE61760BEE8F811B3FEB44D2C566DB0 - -I=42 -KEY=9983EAD4BF987E39644D7D0963F93DB62722C1E16652797DB3AB14AFDDFE1620 -IV=08C3E0425135D73FCF99BEFFE5C5D9C3 -CT=2DE61760BEE8F811B3FEB44D2C566DB0 -PT=E97598EFFED4128DCCCDD7A04D8405E1 - -I=43 -KEY=B72929D2D02A00D36E7C3BD11CDB9FA4CE57590E98866BF07F66C30F907A13C1 -IV=2EAAC3066FB27EEA0A3146D87F22A212 -CT=E97598EFFED4128DCCCDD7A04D8405E1 -PT=5983276B92B95898302385F5156B6201 - -I=44 -KEY=CC9928E45F7885515986E0D431F3288E97D47E650A3F33684F4546FA851171C0 -IV=7BB001368F52858237FADB052D28B72A -CT=5983276B92B95898302385F5156B6201 -PT=ABDEFF06E04995FD2C5472D05056A0A3 - -I=45 -KEY=59A2D8FCED30176B73FF5642BCE4A9163C0A8163EA76A6956311342AD547D163 -IV=953BF018B248923A2A79B6968D178198 -CT=ABDEFF06E04995FD2C5472D05056A0A3 -PT=E4210D117B05F3EADC8AF75D1A80B823 - -I=46 -KEY=FFCCE373B679DE040165054D9EECA460D82B8C729173557FBF9BC377CFC76940 -IV=A66E3B8F5B49C96F729A530F22080D76 -CT=E4210D117B05F3EADC8AF75D1A80B823 -PT=4786111E1B0F2CA78E43CC0D154BC1EA - -I=47 -KEY=36E29D3C942DBC6A12B53088632260649FAD9D6C8A7C79D831D80F7ADA8CA8AA -IV=C92E7E4F2254626E13D035C5FDCEC404 -CT=4786111E1B0F2CA78E43CC0D154BC1EA -PT=122DC3B40007BA36BC7E7EE808911DAE - -I=48 -KEY=3692660415E53226D2758E60FD6E3F5F8D805ED88A7BC3EE8DA67192D21DB504 -IV=0070FB3881C88E4CC0C0BEE89E4C5F3B -CT=122DC3B40007BA36BC7E7EE808911DAE -PT=5E443EC882C1B938C2A4C412D3A92FDF - -I=49 -KEY=E3C167B38A29EDFBDC37A50F434C7056D3C4601008BA7AD64F02B58001B49ADB -IV=D55301B79FCCDFDD0E422B6FBE224F09 -CT=5E443EC882C1B938C2A4C412D3A92FDF -PT=14A8F43BA8829B134D6BD110E6D43F92 - -I=50 -KEY=8AD38A575E425D347C5B5BFB08A5173CC76C942BA038E1C502696490E760A549 -IV=6912EDE4D46BB0CFA06CFEF44BE9676A -CT=14A8F43BA8829B134D6BD110E6D43F92 -PT=025982911796C2FE34C89157BF2959BD - -I=51 -KEY=AE4ABA37DD2C3C5109B13C3DD9FCB67EC53516BAB7AE233B36A1F5C75849FCF4 -IV=24993060836E616575EA67C6D159A142 -CT=025982911796C2FE34C89157BF2959BD -PT=BC658642A8EEBEC6DBE2A76BCD70799B - -I=52 -KEY=31AC934C58BF87AD1EE4357BBE315175795090F81F409DFDED4352AC9539856F -IV=9FE6297B8593BBFC1755094667CDE70B -CT=BC658642A8EEBEC6DBE2A76BCD70799B -PT=132CE1CC36EFE58A4A53534B962D2D70 - -I=53 -KEY=79F7C18CA600203D404363908749B22F6A7C713429AF7877A71001E70314A81F -IV=485B52C0FEBFA7905EA756EB3978E35A -CT=132CE1CC36EFE58A4A53534B962D2D70 -PT=8D2BA39F08ED00BEB51543C0FCCFA57C - -I=54 -KEY=162A4089A1E46EAB5C9592BF1F98BCC2E757D2AB214278C912054227FFDB0D63 -IV=6FDD810507E44E961CD6F12F98D10EED -CT=8D2BA39F08ED00BEB51543C0FCCFA57C -PT=2E8D05A8A3066094025FE07F3A53A94E - -I=55 -KEY=DB5F33F93F2B795EDA54095937B79E4CC9DAD7038244185D105AA258C588A42D -IV=CD7573709ECF17F586C19BE6282F228E -CT=2E8D05A8A3066094025FE07F3A53A94E -PT=D39EC2261C53AD45F91627E1B1F62D22 - -I=56 -KEY=CCA770427DF8CF5350864D4E86E6D8891A4415259E17B518E94C85B9747E890F -IV=17F843BB42D3B60D8AD24417B15146C5 -CT=D39EC2261C53AD45F91627E1B1F62D22 -PT=F517DC01890C3D300520B6CE343B7F94 - -I=57 -KEY=25F53E7CC6590220E9426296568DE496EF53C924171B8828EC6C33774045F69B -IV=E9524E3EBBA1CD73B9C42FD8D06B3C1F -CT=F517DC01890C3D300520B6CE343B7F94 -PT=ECBCCBB21AC2D07E3ECACD26D42E4444 - -I=58 -KEY=6D4A92C82C6C3D44CED65D76BB33B23E03EF02960DD95856D2A6FE51946BB2DF -IV=48BFACB4EA353F6427943FE0EDBE56A8 -CT=ECBCCBB21AC2D07E3ECACD26D42E4444 -PT=6FF7C241A5FF025FAA8C4DAF5E0950AE - -I=59 -KEY=A3D0AB0A0F8EDF232D111458D3B8B1C66C18C0D7A8265A09782AB3FECA62E271 -IV=CE9A39C223E2E267E3C7492E688B03F8 -CT=6FF7C241A5FF025FAA8C4DAF5E0950AE -PT=3B7E4B74F021F9E995627DE42B03D7D8 - -I=60 -KEY=A8E2D59CF188CDA75C80FA49889F7EE357668BA35807A3E0ED48CE1AE16135A9 -IV=0B327E96FE0612847191EE115B27CF25 -CT=3B7E4B74F021F9E995627DE42B03D7D8 -PT=6759C15ED1049A51953E814C2445F3C6 - -I=61 -KEY=092010B28BD3C8E59D09CE85169190BB303F4AFD890339B178764F56C524C66F -IV=A1C2C52E7A5B0542C18934CC9E0EEE58 -CT=6759C15ED1049A51953E814C2445F3C6 -PT=05F681CB7984491E2CE5B1025F860BEB - -I=62 -KEY=538E3068E1059FE89C27D5F19405274835C9CB36F08770AF5493FE549AA2CD84 -IV=5AAE20DA6AD6570D012E1B748294B7F3 -CT=05F681CB7984491E2CE5B1025F860BEB -PT=E046F5B143CEEAC44EF520F2C3BFA96E - -I=63 -KEY=78B5D2551099875910844A17ABBACD64D58F3E87B3499A6B1A66DEA6591D64EA -IV=2B3BE23DF19C18B18CA39FE63FBFEA2C -CT=E046F5B143CEEAC44EF520F2C3BFA96E -PT=0F508DD1BCC6C520A81AE7EC75361179 - -I=64 -KEY=8D6E7E66F496C358A369EF7C49D117A3DADFB3560F8F5F4BB27C394A2C2B7593 -IV=F5DBAC33E40F4401B3EDA56BE26BDAC7 -CT=0F508DD1BCC6C520A81AE7EC75361179 -PT=BAE114FFF19FD11336D454BF0FF6954D - -I=65 -KEY=781164DD6F90037E9896672FD24F1AF6603EA7A9FE108E5884A86DF523DDE0DE -IV=F57F1ABB9B06C0263BFF88539B9E0D55 -CT=BAE114FFF19FD11336D454BF0FF6954D -PT=FE73CE62C227459729E8FDC9116EC6BB - -I=66 -KEY=9268D6C0E8DE5AFBCCE137EADE6293E49E4D69CB3C37CBCFAD40903C32B32665 -IV=EA79B21D874E5985547750C50C2D8912 -CT=FE73CE62C227459729E8FDC9116EC6BB -PT=B13971219C12C12A8308213759196B0D - -I=67 -KEY=701EB5AEF8262D8634B53AF1768ED68E2F7418EAA0250AE52E48B10B6BAA4D68 -IV=E276636E10F8777DF8540D1BA8EC456A -CT=B13971219C12C12A8308213759196B0D -PT=4F5A36173C16ED45F5D36B9D1AED84FF - -I=68 -KEY=40D027792516E1FE962F63B9C939677C602E2EFD9C33E7A0DB9BDA967147C997 -IV=30CE92D7DD30CC78A29A5948BFB7B1F2 -CT=4F5A36173C16ED45F5D36B9D1AED84FF -PT=9FB89D6FEFE606058FE40B5492643596 - -I=69 -KEY=CAAFC0DD2E4FC86AC19B40BC34F14630FF96B39273D5E1A5547FD1C2E323FC01 -IV=8A7FE7A40B59299457B42305FDC8214C -CT=9FB89D6FEFE606058FE40B5492643596 -PT=F6D0717F197CBAE383B55117FCBE07AC - -I=70 -KEY=CE03D67B6DAB9CFAA0C20129475620230946C2ED6AA95B46D7CA80D51F9DFBAD -IV=04AC16A643E454906159419573A76613 -CT=F6D0717F197CBAE383B55117FCBE07AC -PT=7747114FF82F8C7568BE51912CFDB51A - -I=71 -KEY=DDCEDD32E5F0D26F7707DAE453288B537E01D3A29286D733BF74D14433604EB7 -IV=13CD0B49885B4E95D7C5DBCD147EAB70 -CT=7747114FF82F8C7568BE51912CFDB51A -PT=E75313A8DFA7EB0AD1664B14D2DBE284 - -I=72 -KEY=6B032958C3379BD4BEC22CD4271EB4589952C00A4D213C396E129A50E1BBAC33 -IV=B6CDF46A26C749BBC9C5F63074363F0B -CT=E75313A8DFA7EB0AD1664B14D2DBE284 -PT=42FEDBDC4F0BD11DA42163D76E952DC7 - -I=73 -KEY=1710F6CF86EDB5F1364F19CA676ED69BDBAC1BD6022AED24CA33F9878F2E81F4 -IV=7C13DF9745DA2E25888D351E407062C3 -CT=42FEDBDC4F0BD11DA42163D76E952DC7 -PT=6E0166BA404B3AEFACCA8E972F087EA5 - -I=74 -KEY=9D9711F138D0C2D1003E2C99BB0F0447B5AD7D6C4261D7CB66F97710A026FF51 -IV=8A87E73EBE3D772036713553DC61D2DC -CT=6E0166BA404B3AEFACCA8E972F087EA5 -PT=644A1DCFCA2EC01C3E8911768837D99E - -I=75 -KEY=1BD7E446FADA5507ECE26BBB635045E7D1E760A3884F17D758706666281126CF -IV=8640F5B7C20A97D6ECDC4722D85F41A0 -CT=644A1DCFCA2EC01C3E8911768837D99E -PT=4E69AE75BD37DB8024DBD1A11D6D414E - -I=76 -KEY=3454FD4B259FB4C086288ADAFF6464CD9F8ECED63578CC577CABB7C7357C6781 -IV=2F83190DDF45E1C76ACAE1619C34212A -CT=4E69AE75BD37DB8024DBD1A11D6D414E -PT=F63964784AD35374EAFC933AC11A48B6 - -I=77 -KEY=97EFD593918FB16F2D6889C118C5ED4469B7AAAE7FAB9F23965724FDF4662F37 -IV=A3BB28D8B41005AFAB40031BE7A18989 -CT=F63964784AD35374EAFC933AC11A48B6 -PT=51CBF7F67A22DA909567D67F1919ECEF - -I=78 -KEY=481E90BC31903905C08D0E5AEF79A514387C5D58058945B30330F282ED7FC3D8 -IV=DFF1452FA01F886AEDE5879BF7BC4850 -CT=51CBF7F67A22DA909567D67F1919ECEF -PT=9AE181DE8DB65E7E242926091A17D0B1 - -I=79 -KEY=35A4F86146CED63BDCB485B0AE4C205AA29DDC86883F1BCD2719D48BF7681369 -IV=7DBA68DD775EEF3E1C398BEA4135854E -CT=9AE181DE8DB65E7E242926091A17D0B1 -PT=47E15B5AC96A7FDB805F3B8862D9055F - -I=80 -KEY=5ECF20C5884FDF95C2B7C17D40CD6923E57C87DC41556416A746EF0395B11636 -IV=6B6BD8A4CE8109AE1E0344CDEE814979 -CT=47E15B5AC96A7FDB805F3B8862D9055F -PT=1806C474A1ECE5D8183E725804FB92C3 - -I=81 -KEY=AC473047ADF97E75C100CBBD73FA0892FD7A43A8E0B981CEBF789D5B914A84F5 -IV=F288108225B6A1E003B70AC0333761B1 -CT=1806C474A1ECE5D8183E725804FB92C3 -PT=0A0615424DAD4EFC25EC43B13C672727 - -I=82 -KEY=6620AE39484EDD0EC21A3E3F659537DDF77C56EAAD14CF329A94DEEAAD2DA3D2 -IV=CA679E7EE5B7A37B031AF582166F3F4F -CT=0A0615424DAD4EFC25EC43B13C672727 -PT=551639A520D0D043CAD42CB02900D5EF - -I=83 -KEY=04D696BB056CC59492B376CB3A0286EAA26A6F4F8DC41F715040F25A842D763D -IV=62F638824D22189A50A948F45F97B137 -CT=551639A520D0D043CAD42CB02900D5EF -PT=DF906B0E72FEACC9B45381B992E23A5A - -I=84 -KEY=0AED1F2A6660BDBA660E00137E38C1C97DFA0441FF3AB3B8E41373E316CF4C67 -IV=0E3B8991630C782EF4BD76D8443A4723 -CT=DF906B0E72FEACC9B45381B992E23A5A -PT=D477C6287D05C0F83B27B1FD91F5F908 - -I=85 -KEY=E0A51B848A913A860FD2C39941C8C3A1A98DC269823F7340DF34C21E873AB56F -IV=EA4804AEECF1873C69DCC38A3FF00268 -CT=D477C6287D05C0F83B27B1FD91F5F908 -PT=6AB7E109C085B0BA7C8A8B76482F9C80 - -I=86 -KEY=A8B0500EC0292EF668A03E8293E235BAC33A236042BAC3FAA3BE4968CF1529EF -IV=48154B8A4AB814706772FD1BD22AF61B -CT=6AB7E109C085B0BA7C8A8B76482F9C80 -PT=71A31000A5763A0C79B6353E39FFBE84 - -I=87 -KEY=34C53C34901B693F4611F20F1DD5125EB2993360E7CCF9F6DA087C56F6EA976B -IV=9C756C3A503247C92EB1CC8D8E3727E4 -CT=71A31000A5763A0C79B6353E39FFBE84 -PT=B5B377EBEBC0B32A5A0C7E2A2504C32A - -I=88 -KEY=A13850B9164EF60EB77E06819605AC01072A448B0C0C4ADC8004027CD3EE5441 -IV=95FD6C8D86559F31F16FF48E8BD0BE5F -CT=B5B377EBEBC0B32A5A0C7E2A2504C32A -PT=B74459D1E7C5CF9106C362572FE9C917 - -I=89 -KEY=37261F6D588FF9028A23319CE02DDA71B06E1D5AEBC9854D86C7602BFC079D56 -IV=961E4FD44EC10F0C3D5D371D76287670 -CT=B74459D1E7C5CF9106C362572FE9C917 -PT=5777A0854A6E00DB0B6B199BDD35447A - -I=90 -KEY=085A7B276E58B9175204A87D74B9E78AE719BDDFA1A785968DAC79B02132D92C -IV=3F7C644A36D74015D82799E194943DFB -CT=5777A0854A6E00DB0B6B199BDD35447A -PT=01CC73B6EE44403DFED2C91D6F0DC441 - -I=91 -KEY=61DC99DD0C1470F511D79DCC2541002AE6D5CE694FE3C5AB737EB0AD4E3F1D6D -IV=6986E2FA624CC9E243D335B151F8E7A0 -CT=01CC73B6EE44403DFED2C91D6F0DC441 -PT=8993161CF3E75DE836BB2C1955581DB6 - -I=92 -KEY=AEB68207F1E4395794BA7E28CE9BF7996F46D875BC04984345C59CB41B6700DB -IV=CF6A1BDAFDF049A2856DE3E4EBDAF7B3 -CT=8993161CF3E75DE836BB2C1955581DB6 -PT=2A4D6929ED3A66E71EFC40F1840CD649 - -I=93 -KEY=DBF8A8AED7B6D7BCFD1B5BEEC3F01AC0450BB15C513EFEA45B39DC459F6BD692 -IV=754E2AA92652EEEB69A125C60D6BED59 -CT=2A4D6929ED3A66E71EFC40F1840CD649 -PT=596CE09B1176A9FB5A9973086A0E4C12 - -I=94 -KEY=1A61C7F2FB652E256190C0896F800CD61C6751C74048575F01A0AF4DF5659A80 -IV=C1996F5C2CD3F9999C8B9B67AC701616 -CT=596CE09B1176A9FB5A9973086A0E4C12 -PT=B57AC41360C13F6831689C311BD0ED2C - -I=95 -KEY=FC3828E6A9487698231D11C10C353F2DA91D95D42089683730C8337CEEB577AC -IV=E659EF14522D58BD428DD14863B533FB -CT=B57AC41360C13F6831689C311BD0ED2C -PT=F58AA69EEBF25943C728FA26524DE154 - -I=96 -KEY=9D16CAD42D19D1A3B9CB12566745B2765C97334ACB7B3174F7E0C95ABCF896F8 -IV=612EE2328451A73B9AD603976B708D5B -CT=F58AA69EEBF25943C728FA26524DE154 -PT=4A678FED6C5E5898A47F2DFE9DF71DF2 - -I=97 -KEY=D9A8554717435E69EFD4A617CA70B0D216F0BCA7A72569EC539FE4A4210F8B0A -IV=44BE9F933A5A8FCA561FB441AD3502A4 -CT=4A678FED6C5E5898A47F2DFE9DF71DF2 -PT=38011537A04E6C4A81510899741F2FFC - -I=98 -KEY=AA9D9A7B4E187F8D78AAEE11967A20A42EF1A990076B05A6D2CEEC3D5510A4F6 -IV=7335CF3C595B21E4977E48065C0A9076 -CT=38011537A04E6C4A81510899741F2FFC -PT=6472060F536BC5F83A3C247F63C3580E - -I=99 -KEY=90A5D8CD93F0AE068E8DC72CA5DD6E184A83AF9F5400C05EE8F2C84236D3FCF8 -IV=3A3842B6DDE8D18BF627293D33A74EBC -CT=6472060F536BC5F83A3C247F63C3580E -PT=08B99B59D0584DAC0412796871FE3F27 - -I=100 -KEY=489520777A18D5BF65B85AAEA29DB3D8423A34C684588DF2ECE0B12A472DC3DF -IV=D830F8BAE9E87BB9EB359D820740DDC0 -CT=08B99B59D0584DAC0412796871FE3F27 -PT=E8B8579DF9E918B3D24C18E17068AD66 - -I=101 -KEY=69542EE000ACEEFB5E0EB471F3CD0927AA82635B7DB195413EACA9CB37456EB9 -IV=21C10E977AB43B443BB6EEDF5150BAFF -CT=E8B8579DF9E918B3D24C18E17068AD66 -PT=9B6C3234993F6900B3E572B5A43CA644 - -I=102 -KEY=E88C863186548F35DF6EFB48743B7C1831EE516FE48EFC418D49DB7E9379C8FD -IV=81D8A8D186F861CE81604F3987F6753F -CT=9B6C3234993F6900B3E572B5A43CA644 -PT=E0A2962A02698489813292D33D02D0AB - -I=103 -KEY=C9DD7904D060B79B83F97A1FC93E50DED14CC745E6E778C80C7B49ADAE7B1856 -IV=2151FF35563438AE5C978157BD052CC6 -CT=E0A2962A02698489813292D33D02D0AB -PT=10C80B22D8EC54B855E103D6B76C03BC - -I=104 -KEY=D208B7A87003A507561FA5C7422A85C5C184CC673E0B2C70599A4A7B19171BEA -IV=1BD5CEACA063129CD5E6DFD88B14D51B -CT=10C80B22D8EC54B855E103D6B76C03BC -PT=CE88B76CC2223EB68BA9B5852C1921DB - -I=105 -KEY=27B0E1BF8EA57E8AD51BC3FA278369780F0C7B0BFC2912C6D233FFFE350E3A31 -IV=F5B85617FEA6DB8D8304663D65A9ECBD -CT=CE88B76CC2223EB68BA9B5852C1921DB -PT=00401EEE034A193C86A23152AF4B767E - -I=106 -KEY=45E37A710D9E754EE90B7C1DBB894DC20F4C65E5FF630BFA5491CEAC9A454C4F -IV=62539BCE833B0BC43C10BFE79C0A24BA -CT=00401EEE034A193C86A23152AF4B767E -PT=CEF1DC8A618BF71C68720E6EEDE31EEF - -I=107 -KEY=B432E78F49D50B045C8B598EEA3D4142C1BDB96F9EE8FCE63CE3C0C277A652A0 -IV=F1D19DFE444B7E4AB580259351B40C80 -CT=CEF1DC8A618BF71C68720E6EEDE31EEF -PT=EF8FB3790627F31E5CBF21B31FF942DE - -I=108 -KEY=F5CE9C0AF13DA60D32912620673AEE572E320A1698CF0FF8605CE171685F107E -IV=41FC7B85B8E8AD096E1A7FAE8D07AF15 -CT=EF8FB3790627F31E5CBF21B31FF942DE -PT=2EF1C697D948D712AA177855B0D56650 - -I=109 -KEY=DA14D71084F47D87385EF58128C7517F00C3CC814187D8EACA4B9924D88A762E -IV=2FDA4B1A75C9DB8A0ACFD3A14FFDBF28 -CT=2EF1C697D948D712AA177855B0D56650 -PT=0A20E82375680D134FE05AC74E3A0217 - -I=110 -KEY=B68F8C980984E2508E9706117256A4A70AE324A234EFD5F985ABC3E396B07439 -IV=6C9B5B888D709FD7B6C9F3905A91F5D8 -CT=0A20E82375680D134FE05AC74E3A0217 -PT=46AF886AB871A3DABDEB32F1738E180B - -I=111 -KEY=078A8955ECB2F6ACB249E2DB36B660794C4CACC88C9E76233840F112E53E6C32 -IV=B10505CDE53614FC3CDEE4CA44E0C4DE -CT=46AF886AB871A3DABDEB32F1738E180B -PT=79949181E3D20A3042C1E7BDAE73330B - -I=112 -KEY=7CB2A8360EE65417A979D9B5D4A32D2935D83D496F4C7C137A8116AF4B4D5F39 -IV=7B382163E254A2BB1B303B6EE2154D50 -CT=79949181E3D20A3042C1E7BDAE73330B -PT=12C5E55F6EA47BC44392AE9FB888C1FB - -I=113 -KEY=E5835F97C4FF1B007D695DD0E72324A9271DD81601E807D73913B830F3C59EC2 -IV=9931F7A1CA194F17D410846533800980 -CT=12C5E55F6EA47BC44392AE9FB888C1FB -PT=FCA15AB64A01FA6E89FE41F72A67D9E8 - -I=114 -KEY=50932FF04CCCE411AA0541726C1C4CD7DBBC82A04BE9FDB9B0EDF9C7D9A2472A -IV=B51070678833FF11D76C1CA28B3F687E -CT=FCA15AB64A01FA6E89FE41F72A67D9E8 -PT=7B75EC39F707C3C90691BE561AD5CAC6 - -I=115 -KEY=ECAEC5FD6AF5F7DF2587C1A40CB046ADA0C96E99BCEE3E70B67C4791C3778DEC -IV=BC3DEA0D263913CE8F8280D660AC0A7A -CT=7B75EC39F707C3C90691BE561AD5CAC6 -PT=1D3D15FFA0B69EFA8E146301411DFA49 - -I=116 -KEY=82F88C3850CC3D111C2125F34840A9A2BDF47B661C58A08A38682490826A77A5 -IV=6E5649C53A39CACE39A6E45744F0EF0F -CT=1D3D15FFA0B69EFA8E146301411DFA49 -PT=34AFB3D6F0BD9ACB6954BB96B1067F9E - -I=117 -KEY=702FEC9E7F0D2369FF35D4B7A1269AD3895BC8B0ECE53A41513C9F06336C083B -IV=F2D760A62FC11E78E314F144E9663371 -CT=34AFB3D6F0BD9ACB6954BB96B1067F9E -PT=899E4C8192661CCA7C73CDFBC3DCA2F3 - -I=118 -KEY=A1DF98E4585C1A4C15C42AD0782C925000C584317E83268B2D4F52FDF0B0AAC8 -IV=D1F0747A27513925EAF1FE67D90A0883 -CT=899E4C8192661CCA7C73CDFBC3DCA2F3 -PT=3097C0413291E217FB0E3A8A2D908C12 - -I=119 -KEY=9F9082177BF33D8AF6131018E1EFD49F305244704C12C49CD6416877DD2026DA -IV=3E4F1AF323AF27C6E3D73AC899C346CF -CT=3097C0413291E217FB0E3A8A2D908C12 -PT=6C71968295905F881F95DC8BA481CA72 - -I=120 -KEY=B7E5B267EDBFFD4DB4526BA2A1978C105C23D2F2D9829B14C9D4B4FC79A1ECA8 -IV=28753070964CC0C742417BBA4078588F -CT=6C71968295905F881F95DC8BA481CA72 -PT=96D0AB98DBD0CB94A68FC41BEF0B418D - -I=121 -KEY=127FAA6C94663FA9008A1FB7A419C036CAF3796A025250806F5B70E796AAAD25 -IV=A59A180B79D9C2E4B4D87415058E4C26 -CT=96D0AB98DBD0CB94A68FC41BEF0B418D -PT=9E3E4428A911FB328A9F89D7D5E527DB - -I=122 -KEY=1B9493F07E7E5F07473E6997AE15CCDC54CD3D42AB43ABB2E5C4F930434F8AFE -IV=09EB399CEA1860AE47B476200A0C0CEA -CT=9E3E4428A911FB328A9F89D7D5E527DB -PT=0DB5EF3481A9945BAF2E499B5CDE8DDC - -I=123 -KEY=7B2B8201EEF1601C44006A6D7E06EE355978D2762AEA3FE94AEAB0AB1F910722 -IV=60BF11F1908F3F1B033E03FAD01322E9 -CT=0DB5EF3481A9945BAF2E499B5CDE8DDC -PT=C0569DD7DCAE99859D3987B04FFD8CF0 - -I=124 -KEY=B2D7FEE25A564FA00CEDC8E05BAC7F7D992E4FA1F644A66CD7D3371B506C8BD2 -IV=C9FC7CE3B4A72FBC48EDA28D25AA9148 -CT=C0569DD7DCAE99859D3987B04FFD8CF0 -PT=D8AF74B5BB8E632299D32E8DD4DDA012 - -I=125 -KEY=5A06C176A290538BC549CAA8041539A941813B144DCAC54E4E00199684B12BC0 -IV=E8D13F94F8C61C2BC9A402485FB946D4 -CT=D8AF74B5BB8E632299D32E8DD4DDA012 -PT=0821FB911EDE8CDCD97DDAEDCCDB7B1C - -I=126 -KEY=1318D23A3A966D16FDEEE300571F3A8549A0C08553144992977DC37B486A50DC -IV=491E134C98063E9D38A729A8530A032C -CT=0821FB911EDE8CDCD97DDAEDCCDB7B1C -PT=BCB2831AF3721C020FC1D683C19AEBEA - -I=127 -KEY=D6D24AA79B3CA4434CCE2B1470B4FE18F512439FA066559098BC15F889F0BB36 -IV=C5CA989DA1AAC955B120C81427ABC49D -CT=BCB2831AF3721C020FC1D683C19AEBEA -PT=BE869BB3C18EB622CCAC81B6F5B62CC4 - -I=128 -KEY=5F62348BCD9ADB23A19E683400D968404B94D82C61E8E3B25410944E7C4697F2 -IV=89B07E2C56A67F60ED504320706D9658 -CT=BE869BB3C18EB622CCAC81B6F5B62CC4 -PT=C8D3EDD549FEA614B4F2348F82DE5531 - -I=129 -KEY=A64795E417B7C9344185F6B0C66C096B834735F9281645A6E0E2A0C1FE98C2C3 -IV=F925A16FDA2D1217E01B9E84C6B5612B -CT=C8D3EDD549FEA614B4F2348F82DE5531 -PT=4049BDBD9C302D8F2E06F10D34317784 - -I=130 -KEY=CD1F9AB35436014B0CF7ECE9FF98C2BDC30E8844B4266829CEE451CCCAA9B547 -IV=6B580F574381C87F4D721A5939F4CBD6 -CT=4049BDBD9C302D8F2E06F10D34317784 -PT=E1338EA5C5462E8C458E5546FA60324D - -I=131 -KEY=78F7558C14BB5100CE93CD49C22BE2D9223D06E1716046A58B6A048A30C9870A -IV=B5E8CF3F408D504BC26421A03DB32064 -CT=E1338EA5C5462E8C458E5546FA60324D -PT=055984AA929F4D45F5812DC719D4EF24 - -I=132 -KEY=2DBC5092C4C7AB427576EBA2855E00562764824BE3FF0BE07EEB294D291D682E -IV=554B051ED07CFA42BBE526EB4775E28F -CT=055984AA929F4D45F5812DC719D4EF24 -PT=ABC519C4290C69D98BF7AC2A56767202 - -I=133 -KEY=68FA1D8FE36FC5B48A7486FBB34A7B598CA19B8FCAF36239F51C85677F6B1A2C -IV=45464D1D27A86EF6FF026D5936147B0F -CT=ABC519C4290C69D98BF7AC2A56767202 -PT=C825E44799B1739A1F4CB406BBEABEDD - -I=134 -KEY=A2302849850FD33D4048B898DB6C7B0244847FC8534211A3EA503161C481A4F1 -IV=CACA35C666601689CA3C3E636826005B -CT=C825E44799B1739A1F4CB406BBEABEDD -PT=D24EE8D56CE09AFE1061B4016ADD61F7 - -I=135 -KEY=9B2E669EA4BB938072E6E97B0ACF834E96CA971D3FA28B5DFA318560AE5CC506 -IV=391E4ED721B440BD32AE51E3D1A3F84C -CT=D24EE8D56CE09AFE1061B4016ADD61F7 -PT=50FECB118EABF93BB97102E9212C883D - -I=136 -KEY=A07C5EBAC9D0F862AD525C76460B4BA9C6345C0CB1097266434087898F704D3B -IV=3B5238246D6B6BE2DFB4B50D4CC4C8E7 -CT=50FECB118EABF93BB97102E9212C883D -PT=C370C26BD3805211A4679399DFA4DDCB - -I=137 -KEY=414C776222058D6285574741B2B4D11D05449E6762892077E727141050D490F0 -IV=E13029D8EBD5750028051B37F4BF9AB4 -CT=C370C26BD3805211A4679399DFA4DDCB -PT=79715A04DF9216268C77A152CA96C2F6 - -I=138 -KEY=5E54A416470FE8BA263C0FC88FD884297C35C463BD1B36516B50B5429A425206 -IV=1F18D374650A65D8A36B48893D6C5534 -CT=79715A04DF9216268C77A152CA96C2F6 -PT=06DF18B5FAF35F03FE22E39CAE430655 - -I=139 -KEY=98C55CFFB53FA72345EF936283F64BB17AEADCD647E86952957256DE34015453 -IV=C691F8E9F2304F9963D39CAA0C2ECF98 -CT=06DF18B5FAF35F03FE22E39CAE430655 -PT=1AED42EB32C4BAEAF9946818AA00C324 - -I=140 -KEY=B8332B1EE5D6A4E1BBFA20AEAE22330560079E3D752CD3B86CE63EC69E019777 -IV=20F677E150E903C2FE15B3CC2DD478B4 -CT=1AED42EB32C4BAEAF9946818AA00C324 -PT=D276B6A6D480165A944572EF76D4B3E8 - -I=141 -KEY=6E50753A2A0814A778FA2BC773C6A7A2B271289BA1ACC5E2F8A34C29E8D5249F -IV=D6635E24CFDEB046C3000B69DDE494A7 -CT=D276B6A6D480165A944572EF76D4B3E8 -PT=BA46F59DFADC6CA2CBB7D80E33D7B24B - -I=142 -KEY=D8E1763EAD728AB8AA2284964BE586880837DD065B70A94033149427DB0296D4 -IV=B6B10304877A9E1FD2D8AF513823212A -CT=BA46F59DFADC6CA2CBB7D80E33D7B24B -PT=FC9B9F7B5120E1D8B2DD58D211EFF053 - -I=143 -KEY=458CB146C73342F9D5EE4364C400E8E5F4AC427D0A50489881C9CCF5CAED6687 -IV=9D6DC7786A41C8417FCCC7F28FE56E6D -CT=FC9B9F7B5120E1D8B2DD58D211EFF053 -PT=6AD8BCAEFF6F0BF9F360FF601C9B7A43 - -I=144 -KEY=F1FBE00DA1F634ACACB6E2F4F15C11179E74FED3F53F436172A93395D6761CC4 -IV=B477514B66C576557958A190355CF9F2 -CT=6AD8BCAEFF6F0BF9F360FF601C9B7A43 -PT=BB6E45D060E186323AC2B50CFB988856 - -I=145 -KEY=3FBC35054FFF43657936BB676A5C5D1F251ABB0395DEC553486B86992DEE9492 -IV=CE47D508EE0977C9D58059939B004C08 -CT=BB6E45D060E186323AC2B50CFB988856 -PT=31B6157397933EE35DEE5B40FE7237BB - -I=146 -KEY=D49B4E96F8FC2D91FBED3985C53BEB8314ACAE70024DFBB01585DDD9D39CA329 -IV=EB277B93B7036EF482DB82E2AF67B69C -CT=31B6157397933EE35DEE5B40FE7237BB -PT=EFEB82ED91C5C60FB8F910542804B57B - -I=147 -KEY=8D4ABC926827F066B4391FF4B3D6EC99FB472C9D93883DBFAD7CCD8DFB981652 -IV=59D1F20490DBDDF74FD4267176ED071A -CT=EFEB82ED91C5C60FB8F910542804B57B -PT=E30D071737AB9991F000302502BE84A6 - -I=148 -KEY=086A14365F781B2FAF533B1534F458D2184A2B8AA423A42E5D7CFDA8F92692F4 -IV=8520A8A4375FEB491B6A24E18722B44B -CT=E30D071737AB9991F000302502BE84A6 -PT=856AF9DF9A9FE5038B75C98E0E1C720F - -I=149 -KEY=A64DE8CF2DF04ADB60E88C769F7025BC9D20D2553EBC412DD6093426F73AE0FB -IV=AE27FCF9728851F4CFBBB763AB847D6E -CT=856AF9DF9A9FE5038B75C98E0E1C720F -PT=D84910F298F91E081480A912B1AF32D6 - -I=150 -KEY=C52575277A0BD189E2F746FC51CA77844569C2A7A6455F25C2899D344695D22D -IV=63689DE857FB9B52821FCA8ACEBA5238 -CT=D84910F298F91E081480A912B1AF32D6 -PT=57E4A4A2D639D414ED7F82583B4FFA52 - -I=151 -KEY=CB9A5219490F7EE31B030ECE521C589B128D6605707C8B312FF61F6C7DDA287F -IV=0EBF273E3304AF6AF9F4483203D62F1F -CT=57E4A4A2D639D414ED7F82583B4FFA52 -PT=1CECC8218392F2047C0B70BEBFCC5846 - -I=152 -KEY=AA6412AAC8FC309E6BCDFFD1DA01B6470E61AE24F3EE793553FD6FD2C2167039 -IV=61FE40B381F34E7D70CEF11F881DEEDC -CT=1CECC8218392F2047C0B70BEBFCC5846 -PT=EC2B86A04DB2B4F41830E5EA035531E3 - -I=153 -KEY=EFF5BC892E47F4C7EA859969255AC665E24A2884BE5CCDC14BCD8A38C14341DA -IV=4591AE23E6BBC459814866B8FF5B7022 -CT=EC2B86A04DB2B4F41830E5EA035531E3 -PT=8A1A8EE6E08F61E99FC37AC177881C8A - -I=154 -KEY=D62E9405D7402765E30FDAD7A29B2E716850A6625ED3AC28D40EF0F9B6CB5D50 -IV=39DB288CF907D3A2098A43BE87C1E814 -CT=8A1A8EE6E08F61E99FC37AC177881C8A -PT=F21583AC8C5F03C19A1A9B856C97D6E0 - -I=155 -KEY=D49F229B7DB6973EDE6BD14AB20234379A4525CED28CAFE94E146B7CDA5C8BB0 -IV=02B1B69EAAF6B05B3D640B9D10991A46 -CT=F21583AC8C5F03C19A1A9B856C97D6E0 -PT=323191D5997CF0424B7F5501CBD55B17 - -I=156 -KEY=08B1021CD316864EF5B370CBF891FD27A874B41B4BF05FAB056B3E7D1189D0A7 -IV=DC2E2087AEA011702BD8A1814A93C910 -CT=323191D5997CF0424B7F5501CBD55B17 -PT=B2BBCC6E54CB33319536A81174B0D73B - -I=157 -KEY=786AE1D89ECC32C8883D984E7DC5FD0A1ACF78751F3B6C9A905D966C6539079C -IV=70DBE3C44DDAB4867D8EE8858554002D -CT=B2BBCC6E54CB33319536A81174B0D73B -PT=6E4ADDA6895734D891F328C6D0C71467 - -I=158 -KEY=E6C7441B75AF8701E29376287A126CB07485A5D3966C584201AEBEAAB5FE13FB -IV=9EADA5C3EB63B5C96AAEEE6607D791BA -CT=6E4ADDA6895734D891F328C6D0C71467 -PT=8BED3D2AAB5271F90EE5335520E87AA2 - -I=159 -KEY=22D515400072783951742ACDF2FA6DC8FF6898F93D3E29BB0F4B8DFF95166959 -IV=C412515B75DDFF38B3E75CE588E80178 -CT=8BED3D2AAB5271F90EE5335520E87AA2 -PT=D3059CA1B293AA1F52D459643C5FAB5C - -I=160 -KEY=D6E6A383AF38A1CD2889A5F79A23CE512C6D04588FAD83A45D9FD49BA949C205 -IV=F433B6C3AF4AD9F479FD8F3A68D9A399 -CT=D3059CA1B293AA1F52D459643C5FAB5C -PT=C20D8580ACA043B0ED2F409EEA42C0F0 - -I=161 -KEY=AA95A47ADECB61AAD1A05DA0CE6B17BDEE6081D8230DC014B0B09405430B02F5 -IV=7C7307F971F3C067F929F8575448D9EC -CT=C20D8580ACA043B0ED2F409EEA42C0F0 -PT=61C0D0081F176C53DE83B70608201EE6 - -I=162 -KEY=168A56A528A70354AD74C59A8AF33A508FA051D03C1AAC476E3323034B2B1C13 -IV=BC1FF2DFF66C62FE7CD4983A44982DED -CT=61C0D0081F176C53DE83B70608201EE6 -PT=C016536FEFC08B69867AB2946FFBE011 - -I=163 -KEY=92157F38953622D8C0E191DAC4179A6A4FB602BFD3DA272EE849919724D0FC02 -IV=849F299DBD91218C6D9554404EE4A03A -CT=C016536FEFC08B69867AB2946FFBE011 -PT=6923FF03C812710270438F67EF2F42D1 - -I=164 -KEY=CCB6779947D31DF17182FB54555B49422695FDBC1BC8562C980A1EF0CBFFBED3 -IV=5EA308A1D2E53F29B1636A8E914CD328 -CT=6923FF03C812710270438F67EF2F42D1 -PT=0D1674014AD9DC2150E073E2FCF006A8 - -I=165 -KEY=22AA52C07B42CFEB5E75687D395D86092B8389BD51118A0DC8EA6D12370FB87B -IV=EE1C25593C91D21A2FF793296C06CF4B -CT=0D1674014AD9DC2150E073E2FCF006A8 -PT=6399A65CC66E9318F2CEE1103B8FFB90 - -I=166 -KEY=527EF084271AC57F5D33F2E7C7BE1FF1481A2FE1977F19153A248C020C8043EB -IV=70D4A2445C580A9403469A9AFEE399F8 -CT=6399A65CC66E9318F2CEE1103B8FFB90 -PT=511CBDD6CFA31788A43C765301D6BAAB - -I=167 -KEY=D826E762C9EA31B6F4415B3AE5ED888B1906923758DC0E9D9E18FA510D56F940 -IV=8A5817E6EEF0F4C9A972A9DD2253977A -CT=511CBDD6CFA31788A43C765301D6BAAB -PT=B04E78AB18AE3F5B825087D9D5794BD7 - -I=168 -KEY=B4C2DEE60A738C428B187EC3A3A4A982A948EA9C407231C61C487D88D82FB297 -IV=6CE43984C399BDF47F5925F946492109 -CT=B04E78AB18AE3F5B825087D9D5794BD7 -PT=6B013F9A972D82BD5A87DA6C1DD5FD0F - -I=169 -KEY=C4A41F8C4B26391F6C0D629C6B052BD8C249D506D75FB37B46CFA7E4C5FA4F98 -IV=7066C16A4155B55DE7151C5FC8A1825A -CT=6B013F9A972D82BD5A87DA6C1DD5FD0F -PT=9005F8243C6486F63590E7508503719C - -I=170 -KEY=91A18F2681FCACE1C80DC772BD0F2628524C2D22EB3B358D735F40B440F93E04 -IV=550590AACADA95FEA400A5EED60A0DF0 -CT=9005F8243C6486F63590E7508503719C -PT=39DEEEC3D3AEEBBF4B573462B375B5E4 - -I=171 -KEY=E8FF0EE1269AFDCA213F69757C84704D6B92C3E13895DE32380874D6F38C8BE0 -IV=795E81C7A766512BE932AE07C18B5665 -CT=39DEEEC3D3AEEBBF4B573462B375B5E4 -PT=1910F8E7C3D863784058CB35D674AEEB - -I=172 -KEY=F00751EFCCECA0ECA3C252F396B4078E72823B06FB4DBD4A7850BFE325F8250B -IV=18F85F0EEA765D2682FD3B86EA3077C3 -CT=1910F8E7C3D863784058CB35D674AEEB -PT=4A71250E55629D3C5CC62B18B4B67653 - -I=173 -KEY=383A1B81E82B8174A9B9F0AF9EA498A338F31E08AE2F2076249694FB914E5358 -IV=C83D4A6E24C721980A7BA25C08109F2D -CT=4A71250E55629D3C5CC62B18B4B67653 -PT=19CBB63FBB92C7A10B676DBB5EB29060 - -I=174 -KEY=A6695341053BD5B1E15A6CD73DEF84E12138A83715BDE7D72FF1F940CFFCC338 -IV=9E5348C0ED1054C548E39C78A34B1C42 -CT=19CBB63FBB92C7A10B676DBB5EB29060 -PT=18BA0A45E67D2CFEC691203FC2509837 - -I=175 -KEY=71B4C384EF619E5D6CADBFC7D53564913982A272F3C0CB29E960D97F0DAC5B0F -IV=D7DD90C5EA5A4BEC8DF7D310E8DAE070 -CT=18BA0A45E67D2CFEC691203FC2509837 -PT=7699C8550933C30D630AC16D8DA6F13D - -I=176 -KEY=7D0527970FD45C35817091A317A2EAB04F1B6A27FAF308248A6A1812800AAA32 -IV=0CB1E413E0B5C268EDDD2E64C2978E21 -CT=7699C8550933C30D630AC16D8DA6F13D -PT=78FE8EEC14618ED34F63E8671434ADA7 - -I=177 -KEY=204ECE43E91409C515077FACC37C4DF837E5E4CBEE9286F7C509F075943E0795 -IV=5D4BE9D4E6C055F09477EE0FD4DEA748 -CT=78FE8EEC14618ED34F63E8671434ADA7 -PT=0907F75149A74B49F302D2C08CF18AF5 - -I=178 -KEY=8E80DC69B6CC0F0D7F1F0BE6E9F178AD3EE2139AA735CDBE360B22B518CF8D60 -IV=AECE122A5FD806C86A18744A2A8D3555 -CT=0907F75149A74B49F302D2C08CF18AF5 -PT=FE24023BCABCD83E6212FA53E7320D92 - -I=179 -KEY=5152CCE87D9CCC930D7B376C4F1B334BC0C611A16D8915805419D8E6FFFD80F2 -IV=DFD21081CB50C39E72643C8AA6EA4BE6 -CT=FE24023BCABCD83E6212FA53E7320D92 -PT=9526CDED534CB3366306F8C731F87CD6 - -I=180 -KEY=00C9D78F67F1B63181ADE21A02675C6755E0DC4C3EC5A6B6371F2021CE05FC24 -IV=519B1B671A6D7AA28CD6D5764D7C6F2C -CT=9526CDED534CB3366306F8C731F87CD6 -PT=801F005EA2E9287FFD8D9B01BE8E2205 - -I=181 -KEY=442603CF6A012BDB23086BD7EFD7396ED5FFDC129C2C8EC9CA92BB20708BDE21 -IV=44EFD4400DF09DEAA2A589CDEDB06509 -CT=801F005EA2E9287FFD8D9B01BE8E2205 -PT=7558994ACE0299E34EB586B832C98560 - -I=182 -KEY=B153C7C49983077FB0C79C30266A487AA0A74558522E172A84273D9842425B41 -IV=F575C40BF3822CA493CFF7E7C9BD7114 -CT=7558994ACE0299E34EB586B832C98560 -PT=324273A52FFBFBCAC5401CFCD3075C98 - -I=183 -KEY=0E038D82F7FAD738824EF9FEB6F6627692E536FD7DD5ECE041672164914507D9 -IV=BF504A466E79D047328965CE909C2A0C -CT=324273A52FFBFBCAC5401CFCD3075C98 -PT=509E651E053E85340A5B545AA0E40A71 - -I=184 -KEY=B2237D5D0E16B5F9A8FD7274F4CA1206C27B53E378EB69D44B3C753E31A10DA8 -IV=BC20F0DFF9EC62C12AB38B8A423C7070 -CT=509E651E053E85340A5B545AA0E40A71 -PT=1716AB4DCAB205D62EF356E4C565BA70 - -I=185 -KEY=CBE25CF8F3CAB9849F44F330AD8B17E1D56DF8AEB2596C0265CF23DAF4C4B7D8 -IV=79C121A5FDDC0C7D37B98144594105E7 -CT=1716AB4DCAB205D62EF356E4C565BA70 -PT=093CA7764E7F6828EF210E89D3D01C73 - -I=186 -KEY=2BF3C06B0CAE728C8A6134634D5DEAF1DC515FD8FC26042A8AEE2D532714ABAB -IV=E0119C93FF64CB081525C753E0D6FD10 -CT=093CA7764E7F6828EF210E89D3D01C73 -PT=86F8B39DB10EB8B3CFED4C98BBBFFAE1 - -I=187 -KEY=A2C742CFF575CA98D3261BE7DA99E3935AA9EC454D28BC99450361CB9CAB514A -IV=893482A4F9DBB81459472F8497C40962 -CT=86F8B39DB10EB8B3CFED4C98BBBFFAE1 -PT=8BF9C14617B3CE1511ABBD484439D041 - -I=188 -KEY=F8AB8BAD8F2C5A54ED4C80AD094A36D4D1502D035A9B728C54A8DC83D892810B -IV=5A6CC9627A5990CC3E6A9B4AD3D3D547 -CT=8BF9C14617B3CE1511ABBD484439D041 -PT=C41B937B1D5E10D982C7850685997862 - -I=189 -KEY=4DBA6859C8D681253E8F6278BE76D87D154BBE7847C56255D66F59855D0BF969 -IV=B511E3F447FADB71D3C3E2D5B73CEEA9 -CT=C41B937B1D5E10D982C7850685997862 -PT=467114F3F33C8BA65AA76C297E9DA11C - -I=190 -KEY=2738E652A9F41B48B443B487B2AF6D7C533AAA8BB4F9E9F38CC835AC23965875 -IV=6A828E0B61229A6D8ACCD6FF0CD9B501 -CT=467114F3F33C8BA65AA76C297E9DA11C -PT=CB9D772C72BC5BB3E18087CABADDE5B2 - -I=191 -KEY=A1C138E8AFAA19465AE9BD1968C19E8798A7DDA7C645B2406D48B266994BBDC7 -IV=86F9DEBA065E020EEEAA099EDA6EF3FB -CT=CB9D772C72BC5BB3E18087CABADDE5B2 -PT=678837A26F65190F44107C19A01F97E6 - -I=192 -KEY=CD73AF62C6130630324F71F35042BC9AFF2FEA05A920AB4F2958CE7F39542A21 -IV=6CB2978A69B91F7668A6CCEA3883221D -CT=678837A26F65190F44107C19A01F97E6 -PT=E395804E9F2D61447B5207AA438F7D98 - -I=193 -KEY=F076EAF59DAC3F3975E9CBED6697A21B1CBA6A4B360DCA0B520AC9D57ADB57B9 -IV=3D0545975BBF390947A6BA1E36D51E81 -CT=E395804E9F2D61447B5207AA438F7D98 -PT=CA6E3E780C170E950306FEE08CAB46D9 - -I=194 -KEY=87DD7A9906E626E1AC55611A52EBC196D6D454333A1AC49E510C3735F6701160 -IV=77AB906C9B4A19D8D9BCAAF7347C638D -CT=CA6E3E780C170E950306FEE08CAB46D9 -PT=419B7C538E827E431B2C2BA5AEB95373 - -I=195 -KEY=C8D569C710030750FDA3A48E748BED26974F2860B498BADD4A201C9058C94213 -IV=4F08135E16E521B151F6C59426602CB0 -CT=419B7C538E827E431B2C2BA5AEB95373 -PT=1D6607B51B0DA629C62D00CB20870FEA - -I=196 -KEY=A3A22E3CED89316BC747E3326CB53C448A292FD5AF951CF48C0D1C5B784E4DF9 -IV=6B7747FBFD8A363B3AE447BC183ED162 -CT=1D6607B51B0DA629C62D00CB20870FEA -PT=58169D0006C9031C7CCE502F086B0CD6 - -I=197 -KEY=DDB2F456CFE201D5E1DD9EFC6593813FD23FB2D5A95C1FE8F0C34C747025412F -IV=7E10DA6A226B30BE269A7DCE0926BD7B -CT=58169D0006C9031C7CCE502F086B0CD6 -PT=8001E1BDAE24A2A9ABE102C2BEB4AD70 - -I=198 -KEY=A990048427C8E19BABE1D0BB5D6A83CA523E53680778BD415B224EB6CE91EC5F -IV=7422F0D2E82AE04E4A3C4E4738F902F5 -CT=8001E1BDAE24A2A9ABE102C2BEB4AD70 -PT=EA143E99846F5DF1C1A2AD0565D3AE45 - -I=199 -KEY=5074E20E5B70B571A7155A3AAFE3AF2AB82A6DF18317E0B09A80E3B3AB42421A -IV=F9E4E68A7CB854EA0CF48A81F2892CE0 -CT=EA143E99846F5DF1C1A2AD0565D3AE45 -PT=C1EBFE1B00D813BB5AC9E4B007977B19 - -I=200 -KEY=50315F6BF520F26A044751215225348179C193EA83CFF30BC0490703ACD53903 -IV=0045BD65AE50471BA3520B1BFDC69BAB -CT=C1EBFE1B00D813BB5AC9E4B007977B19 -PT=3476AA08CB11F13D8DD858CF10472D03 - -I=201 -KEY=03D2536F9830D74A9B2AEDD1508CE4764DB739E248DE02364D915FCCBC921400 -IV=53E30C046D1025209F6DBCF002A9D0F7 -CT=3476AA08CB11F13D8DD858CF10472D03 -PT=C79BED3BB201F29B65CDF5709654317C - -I=202 -KEY=4AC2173AD99E09ECCB4A647AF96C26F98A2CD4D9FADFF0AD285CAABC2AC6257C -IV=4910445541AEDEA6506089ABA9E0C28F -CT=C79BED3BB201F29B65CDF5709654317C -PT=E5E144D56A2FF95D644D51E73AEAE922 - -I=203 -KEY=9F46778CA9C15CB9978C0DF359056F3D6FCD900C90F009F04C11FB5B102CCC5E -IV=D58460B6705F55555CC66989A06949C4 -CT=E5E144D56A2FF95D644D51E73AEAE922 -PT=38582F30FDE74A162CCD85955C2E48FC - -I=204 -KEY=63038F8EA2934D0C65F181BE92B9664A5795BF3C6D1743E660DC7ECE4C0284A2 -IV=FC45F8020B5211B5F27D8C4DCBBC0977 -CT=38582F30FDE74A162CCD85955C2E48FC -PT=266E808D7E9206C9294F0349D1CEF1DA - -I=205 -KEY=D43CC15DCAB5047B8C67D61F1735C6A471FB3FB11385452F49937D879DCC7578 -IV=B73F4ED368264977E99657A1858CA0EE -CT=266E808D7E9206C9294F0349D1CEF1DA -PT=8E3D1F7DC678C32352782D52E4CD44D5 - -I=206 -KEY=9979232A388E0E6C766279CFE7E047B4FFC620CCD5FD860C1BEB50D5790131AD -IV=4D45E277F23B0A17FA05AFD0F0D58110 -CT=8E3D1F7DC678C32352782D52E4CD44D5 -PT=DDC8075418E2A649D4E78144528682F9 - -I=207 -KEY=43479EA72BF3B417CF224B15749043C5220E2798CD1F2045CF0CD1912B87B354 -IV=DA3EBD8D137DBA7BB94032DA93700471 -CT=DDC8075418E2A649D4E78144528682F9 -PT=4096B4F51C77C8A00A5308D8C3175B6A - -I=208 -KEY=7AE39630885C3ACDCF915625141DF45A6298936DD168E8E5C55FD949E890E83E -IV=39A40897A3AF8EDA00B31D30608DB79F -CT=4096B4F51C77C8A00A5308D8C3175B6A -PT=60D0385ECE913BEC6760BAA0BCCDE853 - -I=209 -KEY=82496ADB8A91DAE80C249D2BD8F00C990248AB331FF9D309A23F63E9545D006D -IV=F8AAFCEB02CDE025C3B5CB0ECCEDF8C3 -CT=60D0385ECE913BEC6760BAA0BCCDE853 -PT=79A86909141C27366744FC614808705B - -I=210 -KEY=EF7FEE5E3FDAC015E8016A7A9D3EB8677BE0C23A0BE5F43FC57B9F881C557036 -IV=6D368485B54B1AFDE425F75145CEB4FE -CT=79A86909141C27366744FC614808705B -PT=9817CE82A9D821189878991B32360409 - -I=211 -KEY=A400D423453A59F64968E8B80140AAF6E3F70CB8A23DD5275D0306932E63743F -IV=4B7F3A7D7AE099E3A16982C29C7E1291 -CT=9817CE82A9D821189878991B32360409 -PT=C3259E5D4A3E82FDC862E862E4449DA2 - -I=212 -KEY=B9280C8996C8BEC6888CB4D9D1E76B0620D292E5E80357DA9561EEF1CA27E99D -IV=1D28D8AAD3F2E730C1E45C61D0A7C1F0 -CT=C3259E5D4A3E82FDC862E862E4449DA2 -PT=F035078B9A3E45B4ED561F001DB21E47 - -I=213 -KEY=9686D9BB259CD14FA7D58C9789932385D0E7956E723D126E7837F1F1D795F7DA -IV=2FAED532B3546F892F59384E58744883 -CT=F035078B9A3E45B4ED561F001DB21E47 -PT=596B9F7F2122A11C599626B16B6AC340 - -I=214 -KEY=736E847DDC4C794A3AA2E22C1AF85EF1898C0A11531FB37221A1D740BCFF349A -IV=E5E85DC6F9D0A8059D776EBB936B7D74 -CT=596B9F7F2122A11C599626B16B6AC340 -PT=800FCC5CE3B08CFFDD70FB5270DED220 - -I=215 -KEY=728D3E35CD653621D41E591530770B370983C64DB0AF3F8DFCD12C12CC21E6BA -IV=01E3BA4811294F6BEEBCBB392A8F55C6 -CT=800FCC5CE3B08CFFDD70FB5270DED220 -PT=5515A58EB0013D2EE561BD2826761209 - -I=216 -KEY=929F6FD8250BAD33FAE4ED108843A2645C9663C300AE02A319B0913AEA57F4B3 -IV=E01251EDE86E9B122EFAB405B834A953 -CT=5515A58EB0013D2EE561BD2826761209 -PT=8B7B3AB73287CEAAA0098D41F0B3A28B - -I=217 -KEY=3F54C218B02F6097C3F31A05F5CCB8C4D7ED59743229CC09B9B91C7B1AE45638 -IV=ADCBADC09524CDA43917F7157D8F1AA0 -CT=8B7B3AB73287CEAAA0098D41F0B3A28B -PT=90CDCF132600F622D1339197B441A4C0 - -I=218 -KEY=2F60AEE4E6A6F7109193112BC756D7F24720966714293A2B688A8DECAEA5F2F8 -IV=10346CFC5689978752600B2E329A6F36 -CT=90CDCF132600F622D1339197B441A4C0 -PT=EA089BEC0DEE1305828522B8AD4F5A99 - -I=219 -KEY=33623A9F86F3AF456D92076B132E46A3AD280D8B19C7292EEA0FAF5403EAA861 -IV=1C02947B60555855FC011640D4789151 -CT=EA089BEC0DEE1305828522B8AD4F5A99 -PT=339C14562AE38F84BE0FB1569C234287 - -I=220 -KEY=6291ED0B63ED8C18A713DDCBFCA054E19EB419DD3324A6AA54001E029FC9EAE6 -IV=51F3D794E51E235DCA81DAA0EF8E1242 -CT=339C14562AE38F84BE0FB1569C234287 -PT=31050E95B1F08B9139EF7F8D42110978 - -I=221 -KEY=7BEF1BE3E67AA478C5D9F50350D221CCAFB1174882D42D3B6DEF618FDDD8E39E -IV=197EF6E88597286062CA28C8AC72752D -CT=31050E95B1F08B9139EF7F8D42110978 -PT=18DE66E3B58C9ABAB99987826AF0D0AF - -I=222 -KEY=3DEB69283844069B400C2E7127B8CD2EB76F71AB3758B781D476E60DB7283331 -IV=460472CBDE3EA2E385D5DB72776AECE2 -CT=18DE66E3B58C9ABAB99987826AF0D0AF -PT=B75D11E28C94DB969FE009B984DA956B - -I=223 -KEY=754C5BEC642540EC8BAD0778773CA8E700326049BBCC6C174B96EFB433F2A65A -IV=48A732C45C614677CBA12909508465C9 -CT=B75D11E28C94DB969FE009B984DA956B -PT=7CEEE835FC734108785B367A28C62058 - -I=224 -KEY=01B0A659138DEE7CF1EFA11DD0A209247CDC887C47BF2D1F33CDD9CE1B348602 -IV=74FCFDB577A8AE907A42A665A79EA1C3 -CT=7CEEE835FC734108785B367A28C62058 -PT=F1E848F6C257D6D56B4FBCA36900614C - -I=225 -KEY=F9531CEDC3C5C76A90195BF1E5FB5ED98D34C08A85E8FBCA5882656D7234E74E -IV=F8E3BAB4D048291661F6FAEC355957FD -CT=F1E848F6C257D6D56B4FBCA36900614C -PT=7B06A193C8B84977E56B382D424D2A78 - -I=226 -KEY=D409DB9768430BCA0E2B68BA1CFE93A5F63261194D50B2BDBDE95D403079CD36 -IV=2D5AC77AAB86CCA09E32334BF905CD7C -CT=7B06A193C8B84977E56B382D424D2A78 -PT=413356E3367ACBDD88ADA6DF5E09FFC6 - -I=227 -KEY=8425B50A014625BA114ABAC1585C3F68B70137FA7B2A79603544FB9F6E7032F0 -IV=502C6E9D69052E701F61D27B44A2ACCD -CT=413356E3367ACBDD88ADA6DF5E09FFC6 -PT=13B524E8AEBFE32CC9559B500D9E9A82 - -I=228 -KEY=3ED2EEDFF8C12697C9CEB18B8DC86798A4B41312D5959A4CFC1160CF63EEA872 -IV=BAF75BD5F987032DD8840B4AD59458F0 -CT=13B524E8AEBFE32CC9559B500D9E9A82 -PT=91775D8DF510277669BC11697965AE99 - -I=229 -KEY=B3C35FF0F6B2DDCF5522A35E75040BB135C34E9F2085BD3A95AD71A61A8B06EB -IV=8D11B12F0E73FB589CEC12D5F8CC6C29 -CT=91775D8DF510277669BC11697965AE99 -PT=0AA5B5A593FED4CE1FD66736774649D2 - -I=230 -KEY=5581EEED032A31D6F8077BEED79ABB1E3F66FB3AB37B69F48A7B16906DCD4F39 -IV=E642B11DF598EC19AD25D8B0A29EB0AF -CT=0AA5B5A593FED4CE1FD66736774649D2 -PT=3DB595E23D32347092E5D94A8376DB5D - -I=231 -KEY=2337ABB014AD70D3E290033BD6FC75D702D36ED88E495D84189ECFDAEEBB9464 -IV=76B6455D178741051A9778D50166CEC9 -CT=3DB595E23D32347092E5D94A8376DB5D -PT=2AF2DEC9D2D4F0BA81D1FC88E421C034 - -I=232 -KEY=7C8A43D8CA68E782BBD49C18477683052821B0115C9DAD3E994F33520A9A5450 -IV=5FBDE868DEC5975159449F23918AF6D2 -CT=2AF2DEC9D2D4F0BA81D1FC88E421C034 -PT=8AF90FCCBEDCDF709AEE93FEF45C03EC - -I=233 -KEY=37FDC789E91F58F691931C86C4505926A2D8BFDDE241724E03A1A0ACFEC657BC -IV=4B7784512377BF742A47809E8326DA23 -CT=8AF90FCCBEDCDF709AEE93FEF45C03EC -PT=8E98DF785A601DF26465D9A0D163D650 - -I=234 -KEY=57C30D92BD234BE693F15534768970FC2C4060A5B8216FBC67C4790C2FA581EC -IV=603ECA1B543C1310026249B2B2D929DA -CT=8E98DF785A601DF26465D9A0D163D650 -PT=21D3EAC95A088A548E5C0E56001BD103 - -I=235 -KEY=1F9A07E73DB0530F84B6DB88C5EA0AFD0D938A6CE229E5E8E998775A2FBE50EF -IV=48590A75809318E917478EBCB3637A01 -CT=21D3EAC95A088A548E5C0E56001BD103 -PT=48A8853D9E4E4A6351E5F5734911D569 - -I=236 -KEY=219E87740C05905A3DAC677C78C5E6D4453B0F517C67AF8BB87D822966AF8586 -IV=3E04809331B5C355B91ABCF4BD2FEC29 -CT=48A8853D9E4E4A6351E5F5734911D569 -PT=C75ECB64A655DC6803FC976A1CAE78A9 - -I=237 -KEY=D445B2CF4C6B8AF073FCDFF8907C4B278265C435DA3273E3BB8115437A01FD2F -IV=F5DB35BB406E1AAA4E50B884E8B9ADF3 -CT=C75ECB64A655DC6803FC976A1CAE78A9 -PT=F063E6C6A62D07B1CA90594CB9041DE4 - -I=238 -KEY=3DECAA3153A9658A2CAA5578AF2C55CD720622F37C1F745271114C0FC305E0CB -IV=E9A918FE1FC2EF7A5F568A803F501EEA -CT=F063E6C6A62D07B1CA90594CB9041DE4 -PT=45F375DDBA20D20CB6C5EAB28AA85D06 - -I=239 -KEY=31766034845DF8A1AEDFC70CE3CD5B1D37F5572EC63FA65EC7D4A6BD49ADBDCD -IV=0C9ACA05D7F49D2B827592744CE10ED0 -CT=45F375DDBA20D20CB6C5EAB28AA85D06 -PT=5D117AAC285D5A6948390FDAFBDACAD5 - -I=240 -KEY=BF17727E1D5DCA94C9CCA8E11DFBF22A6AE42D82EE62FC378FEDA967B2777718 -IV=8E61124A9900323567136FEDFE36A937 -CT=5D117AAC285D5A6948390FDAFBDACAD5 -PT=C8B61B172D930641A88E9E13236E11F9 - -I=241 -KEY=B82DB30F4271245293FC4CB6A0C10D4FA2523695C3F1FA7627633774911966E1 -IV=073AC1715F2CEEC65A30E457BD3AFF65 -CT=C8B61B172D930641A88E9E13236E11F9 -PT=FE05708E08F8568BB55175CEEF9E0433 - -I=242 -KEY=28AE9BD5E181AC41CF2F9B4710DD160C5C57461BCB09ACFD923242BA7E8762D2 -IV=908328DAA3F088135CD3D7F1B01C1B43 -CT=FE05708E08F8568BB55175CEEF9E0433 -PT=D7DB71EAC2EF31AE105227E34134AD3C - -I=243 -KEY=437D385B59B4AB247A5BCFC0C0F8596F8B8C37F109E69D53826065593FB3CFEE -IV=6BD3A38EB8350765B5745487D0254F63 -CT=D7DB71EAC2EF31AE105227E34134AD3C -PT=ECD51D08C870983992708FC1FDFA9D15 - -I=244 -KEY=4EF45D9C1FCA58D42D9E7E2E9C7D0B8F67592AF9C196056A1010EA98C24952FB -IV=0D8965C7467EF3F057C5B1EE5C8552E0 -CT=ECD51D08C870983992708FC1FDFA9D15 -PT=F436BA32E9D089248AC47E40AA6B4BAC - -I=245 -KEY=D3F16D0CF75471A24F273B3E8EF0A3A0936F90CB28468C4E9AD494D868221957 -IV=9D053090E89E297662B94510128DA82F -CT=F436BA32E9D089248AC47E40AA6B4BAC -PT=F43E89C3DBD391B5778B30A36A9E42F3 - -I=246 -KEY=953E7AB7369425A4F396D764F3EA047F67511908F3951DFBED5FA47B02BC5BA4 -IV=46CF17BBC1C05406BCB1EC5A7D1AA7DF -CT=F43E89C3DBD391B5778B30A36A9E42F3 -PT=B12ABB428A29703B929EFDB0031694D1 - -I=247 -KEY=C8DDFEFD3C72822B72C78757EE8EF856D67BA24A79BC6DC07FC159CB01AACF75 -IV=5DE3844A0AE6A78F815150331D64FC29 -CT=B12ABB428A29703B929EFDB0031694D1 -PT=79F19D2BD0A025D2D9822A28F5304446 - -I=248 -KEY=870A25E9511D3F1BCFA941DA41FD00C0AF8A3F61A91C4812A64373E3F49A8B33 -IV=4FD7DB146D6FBD30BD6EC68DAF73F896 -CT=79F19D2BD0A025D2D9822A28F5304446 -PT=C52D5EF8D7A1353F5C1FF7BA33F9ED97 - -I=249 -KEY=178B86564949AE1A0CE50E61F4D3F8776AA761997EBD7D2DFA5C8459C76366A4 -IV=9081A3BF18549101C34C4FBBB52EF8B7 -CT=C52D5EF8D7A1353F5C1FF7BA33F9ED97 -PT=82FAB7DF4BE409880B8F66210DE8D2E5 - -I=250 -KEY=C3F845809E635052F94076E1F3026779E85DD646355974A5F1D3E278CA8BB441 -IV=D473C3D6D72AFE48F5A5788007D19F0E -CT=82FAB7DF4BE409880B8F66210DE8D2E5 -PT=52C05722F125348666DFCF0F2D052530 - -I=251 -KEY=34AE823E21F4C45784F2E125CF5039FCBA9D8164C47C4023970C2D77E78E9171 -IV=F756C7BEBF9794057DB297C43C525E85 -CT=52C05722F125348666DFCF0F2D052530 -PT=DE7FAAF4A10D4D5404847FA080C1DC1C - -I=252 -KEY=9D1EEFC6B62427F5A2CBB2047AB0E41B64E22B9065710D77938852D7674F4D6D -IV=A9B06DF897D0E3A226395321B5E0DDE7 -CT=DE7FAAF4A10D4D5404847FA080C1DC1C -PT=49327927599012EE87FF64F45AC9A9AE - -I=253 -KEY=2C7B21A79BE0B5B0E4DCC427DE8D91572DD052B73CE11F99147736233D86E4C3 -IV=B165CE612DC4924546177623A43D754C -CT=49327927599012EE87FF64F45AC9A9AE -PT=6E11B9F592DD99CD94F8999D9476F4CF - -I=254 -KEY=F4A72FB6D161B9E15A41576C5A7CBF3F43C1EB42AE3C8654808FAFBEA9F0100C -IV=D8DC0E114A810C51BE9D934B84F12E68 -CT=6E11B9F592DD99CD94F8999D9476F4CF -PT=108AC1FE3E008D1C3058917157003E2C - -I=255 -KEY=2E5FE97C58B060C9BACA9E9CC14CFC89534B2ABC903C0B48B0D73ECFFEF02E20 -IV=DAF8C6CA89D1D928E08BC9F09B3043B6 -CT=108AC1FE3E008D1C3058917157003E2C -PT=B315EF45A3BD77688AD0976EF5DCA26B - -I=256 -KEY=9D763A80B96B112E1DAEA50A98C0B6F7E05EC5F933817C203A07A9A10B2C8C4B -IV=B329D3FCE1DB71E7A7643B96598C4A7E -CT=B315EF45A3BD77688AD0976EF5DCA26B -PT=7BF8DABED803049DF8D1F34ED00536F7 - -I=257 -KEY=DF5F07523E7E305B48AAD9C205AE826C9BA61F47EB8278BDC2D65AEFDB29BABC -IV=42293DD28715217555047CC89D6E349B -CT=7BF8DABED803049DF8D1F34ED00536F7 -PT=E55FE84DF3137D16E74DC01A1BFDA4A7 - -I=258 -KEY=80CF537EC8836ADD0FB72F35B2EF703D7EF9F70A189105AB259B9AF5C0D41E1B -IV=5F90542CF6FD5A86471DF6F7B741F251 -CT=E55FE84DF3137D16E74DC01A1BFDA4A7 -PT=6019F9DA2DFDCDCB14C2C6CE5B34432D - -I=259 -KEY=4469D3622A022CFB7614C9C9EB36E6031EE00ED0356CC86031595C3B9BE05D36 -IV=C4A6801CE281462679A3E6FC59D9963E -CT=6019F9DA2DFDCDCB14C2C6CE5B34432D -PT=6D2788861A8F9526D1EC8A6A8AFBA629 - -I=260 -KEY=DED804546FA6B0BCD8C9FD9119616F9873C786562FE35D46E0B5D651111BFB1F -IV=9AB1D73645A49C47AEDD3458F257899B -CT=6D2788861A8F9526D1EC8A6A8AFBA629 -PT=81D5CDEA70E433A2A341FFB13ECCEC54 - -I=261 -KEY=24FD3D900606EEF8F31156D30EA094ADF2124BBC5F076EE443F429E02FD7174B -IV=FA2539C469A05E442BD8AB4217C1FB35 -CT=81D5CDEA70E433A2A341FFB13ECCEC54 -PT=F74B4869E92F918A95B508E382A83FA6 - -I=262 -KEY=C24CA269EAADDFBA060AAF15C2265DE6055903D5B628FF6ED6412103AD7F28ED -IV=E6B19FF9ECAB3142F51BF9C6CC86C94B -CT=F74B4869E92F918A95B508E382A83FA6 -PT=EF3293511A17D0E089A8F88E396B4F31 - -I=263 -KEY=789C94E8D2B6D6FD022ED678F42E796CEA6B9084AC3F2F8E5FE9D98D941467DC -IV=BAD03681381B09470424796D3608248A -CT=EF3293511A17D0E089A8F88E396B4F31 -PT=0D70FCE243309D716D8FA672A11EBCB8 - -I=264 -KEY=B8DFB47D720C26AE22AD6C87785CCB97E71B6C66EF0FB2FF32667FFF350ADB64 -IV=C0432095A0BAF0532083BAFF8C72B2FB -CT=0D70FCE243309D716D8FA672A11EBCB8 -PT=831365AB30D062F2B1C051A9EA03AEEB - -I=265 -KEY=938BCEFF0FD9AEC61CF2B0509A645A19640809CDDFDFD00D83A62E56DF09758F -IV=2B547A827DD588683E5FDCD7E238918E -CT=831365AB30D062F2B1C051A9EA03AEEB -PT=EFE7E9DC254FF4AA70ABF327566A5448 - -I=266 -KEY=BBF0C86D05BF543EC3B9A9240833187F8BEFE011FA9024A7F30DDD71896321C7 -IV=287B06920A66FAF8DF4B197492574266 -CT=EFE7E9DC254FF4AA70ABF327566A5448 -PT=2D41BEE483BD2BAD16026AD7AA5ABA07 - -I=267 -KEY=B744A9326EC1D56CBFF51D969D075C7DA6AE5EF5792D0F0AE50FB7A623399BC0 -IV=0CB4615F6B7E81527C4CB4B295344402 -CT=2D41BEE483BD2BAD16026AD7AA5ABA07 -PT=079460C9B745A53999932C5ECFE6A37B - -I=268 -KEY=AE49C59DD393E9EC9030AEDAD7FC61FEA13A3E3CCE68AA337C9C9BF8ECDF38BB -IV=190D6CAFBD523C802FC5B34C4AFB3D83 -CT=079460C9B745A53999932C5ECFE6A37B -PT=CE7C5851D0437368FEDC7E39270A7430 - -I=269 -KEY=8176855633B6FB2445BDDC2FD8D299576F46666D1E2BD95B8240E5C1CBD54C8B -IV=2F3F40CBE02512C8D58D72F50F2EF8A9 -CT=CE7C5851D0437368FEDC7E39270A7430 -PT=A0C3F2D688E4370AD2F08C09B28DBCC1 - -I=270 -KEY=050E71C47B278C5825DE84513A732D11CF8594BB96CFEE5150B069C87958F04A -IV=8478F4924891777C6063587EE2A1B446 -CT=A0C3F2D688E4370AD2F08C09B28DBCC1 -PT=BE472E609ABB030B96739A959EDBDD21 - -I=271 -KEY=502E4BDCF449E96CB16D5B6C097D20CC71C2BADB0C74ED5AC6C3F35DE7832D6B -IV=55203A188F6E653494B3DF3D330E0DDD -CT=BE472E609ABB030B96739A959EDBDD21 -PT=FE4227D6AC71519FA0F2078433DF69CA - -I=272 -KEY=C3DDDE6B2E80381010569BC093561F628F809D0DA005BCC56631F4D9D45C44A1 -IV=93F395B7DAC9D17CA13BC0AC9A2B3FAE -CT=FE4227D6AC71519FA0F2078433DF69CA -PT=3F8439C7648C5C2B5877643C536E14F9 - -I=273 -KEY=1CC65CB104317D620D729EDEB4C4B512B004A4CAC489E0EE3E4690E587325058 -IV=DF1B82DA2AB145721D24051E2792AA70 -CT=3F8439C7648C5C2B5877643C536E14F9 -PT=E189B969BF38C8A2F38BF3F12267B5B4 - -I=274 -KEY=D121C8556039F07E231F9E88DE60572B518D1DA37BB1284CCDCD6314A555E5EC -IV=CDE794E464088D1C2E6D00566AA4E239 -CT=E189B969BF38C8A2F38BF3F12267B5B4 -PT=EF15CCEC56DCD62681FC7564A1095ECD - -I=275 -KEY=C87070F4AA767BE043B29FE3AF258C91BE98D14F2D6DFE6A4C311670045CBB21 -IV=1951B8A1CA4F8B9E60AD016B7145DBBA -CT=EF15CCEC56DCD62681FC7564A1095ECD -PT=BD38CD579A7124DD0814DB21FC0E7D96 - -I=276 -KEY=08167C643CA7CAD8729B17EB91918AC103A01C18B71CDAB74425CD51F852C6B7 -IV=C0660C9096D1B138312988083EB40650 -CT=BD38CD579A7124DD0814DB21FC0E7D96 -PT=565F580B61E456544D8D553948AD95FD - -I=277 -KEY=55BB77ED49C419EEA418365F2750857355FF4413D6F88CE309A89868B0FF534A -IV=5DAD0B897563D336D68321B4B6C10FB2 -CT=565F580B61E456544D8D553948AD95FD -PT=1AA68EAC78C2B5BFF996F0B58C56432F - -I=278 -KEY=8FEC3C85819F24EE1DA186AB212A19D44F59CABFAE3A395CF03E68DD3CA91065 -IV=DA574B68C85B3D00B9B9B0F4067A9CA7 -CT=1AA68EAC78C2B5BFF996F0B58C56432F -PT=65660FBF6C166604D9E717671488D734 - -I=279 -KEY=D1D19B25C23EA5923D45493905B867D12A3FC500C22C5F5829D97FBA2821C751 -IV=5E3DA7A043A1817C20E4CF9224927E05 -CT=65660FBF6C166604D9E717671488D734 -PT=477CBD97B467AA1AAB738E294092FAA3 - -I=280 -KEY=E1972BE045093EC4475DCE6351CDEDCB6D437897764BF54282AAF19368B33DF2 -IV=3046B0C587379B567A18875A54758A1A -CT=477CBD97B467AA1AAB738E294092FAA3 -PT=C0ED90D90AE11390A275BD03BE00E1D5 - -I=281 -KEY=6F622A270D77AE65084E2070343E8C7FADAEE84E7CAAE6D220DF4C90D6B3DC27 -IV=8EF501C7487E90A14F13EE1365F361B4 -CT=C0ED90D90AE11390A275BD03BE00E1D5 -PT=296FED9B8CF7C532721A2188DDB1A441 - -I=282 -KEY=FF7209EA94C0401544991FDB57F77F2084C105D5F05D23E052C56D180B027866 -IV=901023CD99B7EE704CD73FAB63C9F35F -CT=296FED9B8CF7C532721A2188DDB1A441 -PT=4AE1C2EB8D1CEB5804FA992708150590 - -I=283 -KEY=73C6F94AD63DE39C289AE20179FDDDD7CE20C73E7D41C8B8563FF43F03177DF6 -IV=8CB4F0A042FDA3896C03FDDA2E0AA2F7 -CT=4AE1C2EB8D1CEB5804FA992708150590 -PT=A4EAC8940C12F9CEAC78DFDC99DF68B4 - -I=284 -KEY=A7369886016682F6075678509FFB86ED6ACA0FAA71533176FA472BE39AC81542 -IV=D4F061CCD75B616A2FCC9A51E6065B3A -CT=A4EAC8940C12F9CEAC78DFDC99DF68B4 -PT=70B05A9959E7C4E4545BB3AECCD8B33D - -I=285 -KEY=F01B9FF32CE9CA699F69ADBBC209BBD21A7A553328B4F592AE1C984D5610A67F -IV=572D07752D8F489F983FD5EB5DF23D3F -CT=70B05A9959E7C4E4545BB3AECCD8B33D -PT=F4978960F1382713A5A7183B9694DE85 - -I=286 -KEY=FF05A97961A5CA725CD2E1B2A9D58304EEEDDC53D98CD2810BBB8076C08478FA -IV=0F1E368A4D4C001BC3BB4C096BDC38D6 -CT=F4978960F1382713A5A7183B9694DE85 -PT=EDCC3B8D26928086F1C6727833405424 - -I=287 -KEY=AA4DB35CCBD936D13D1B7DB64638B99A0321E7DEFF1E5207FA7DF20EF3C42CDE -IV=55481A25AA7CFCA361C99C04EFED3A9E -CT=EDCC3B8D26928086F1C6727833405424 -PT=12A36AC1DA72345291CF206FA04F102F - -I=288 -KEY=611E32BF030B7B377AEC338C7FA6D88311828D1F256C66556BB2D261538B3CF1 -IV=CB5381E3C8D24DE647F74E3A399E6119 -CT=12A36AC1DA72345291CF206FA04F102F -PT=8DA0003E090444453B932F0CDBBFA54E - -I=289 -KEY=43E230241EF150AC761C1307C43C3E209C228D212C6822105021FD6D883499BF -IV=22FC029B1DFA2B9B0CF0208BBB9AE6A3 -CT=8DA0003E090444453B932F0CDBBFA54E -PT=A3D9F2112895CEA937A2B18ABB589CC0 - -I=290 -KEY=1FE38E9028DAC8A1E65A04C78BD0E7523FFB7F3004FDECB967834CE7336C057F -IV=5C01BEB4362B980D904617C04FECD972 -CT=A3D9F2112895CEA937A2B18ABB589CC0 -PT=191EE02B9FED198599B5BC2F36271ABB - -I=291 -KEY=5FFD20799D7A7E7A328BD57B13F6E52F26E59F1B9B10F53CFE36F0C8054B1FC4 -IV=401EAEE9B5A0B6DBD4D1D1BC9826027D -CT=191EE02B9FED198599B5BC2F36271ABB -PT=EFC32006AE746D1E3F65E6C7ADF32804 - -I=292 -KEY=EFEFD2A0F1917EB5BFD2337260E11023C926BF1D35649822C153160FA8B837C0 -IV=B012F2D96CEB00CF8D59E6097317F50C -CT=EFC32006AE746D1E3F65E6C7ADF32804 -PT=F9C49B0BFFA354EEBBE3DE29BF9D2623 - -I=293 -KEY=7676D792019D370A67526977EC5FDB5B30E22416CAC7CCCC7AB0C826172511E3 -IV=99990532F00C49BFD8805A058CBECB78 -CT=F9C49B0BFFA354EEBBE3DE29BF9D2623 -PT=EAEAE4BFF789E64D80D88CE5BC0E15CC - -I=294 -KEY=69202B4EB33EB35987DD82026714F603DA08C0A93D4E2A81FA6844C3AB2B042F -IV=1F56FCDCB2A38453E08FEB758B4B2D58 -CT=EAEAE4BFF789E64D80D88CE5BC0E15CC -PT=96C362F59FD2457A5ED68A116B4AA682 - -I=295 -KEY=DE8B4CC7995B3E061E126157B0C2AF984CCBA25CA29C6FFBA4BECED2C061A2AD -IV=B7AB67892A658D5F99CFE355D7D6599B -CT=96C362F59FD2457A5ED68A116B4AA682 -PT=5498BE46DCE840F7B593BE2BC0D252CB - -I=296 -KEY=1BFE119E1B63BA06E9A590709A2985D218531C1A7E742F0C112D70F900B3F066 -IV=C5755D5982388400F7B7F1272AEB2A4A -CT=5498BE46DCE840F7B593BE2BC0D252CB -PT=697482966F491ACB46E7171A4813D916 - -I=297 -KEY=9E6361F9775A88FAAD09711E9691798C71279E8C113D35C757CA67E348A02970 -IV=859D70676C3932FC44ACE16E0CB8FC5E -CT=697482966F491ACB46E7171A4813D916 -PT=A799874DC7721D96DEEFAB5FE1A01A8E - -I=298 -KEY=7D1EF621D3ADC4BD4EC1861167FA5B0CD6BE19C1D64F28518925CCBCA90033FE -IV=E37D97D8A4F74C47E3C8F70FF16B2280 -CT=A799874DC7721D96DEEFAB5FE1A01A8E -PT=2D19344625CF5E6DE07EE960F4AEC5CF - -I=299 -KEY=7DFD0BE692B47C022DC789EF5291D2F5FBA72D87F380763C695B25DC5DAEF631 -IV=00E3FDC74119B8BF63060FFE356B89F9 -CT=2D19344625CF5E6DE07EE960F4AEC5CF -PT=F80C5143F173AE672DA4DDC8272C13EF - -I=300 -KEY=A78C66D30475B93F0A87E6E4A8BFA3AE03AB7CC402F3D85B44FFF8147A82E5DE -IV=DA716D3596C1C53D27406F0BFA2E715B -CT=F80C5143F173AE672DA4DDC8272C13EF -PT=76BDB7A63614A41C9D52718B3514E03C - -I=301 -KEY=9542E4B9D92DAF7B463C83DA257422B37516CB6234E77C47D9AD899F4F9605E2 -IV=32CE826ADD5816444CBB653E8DCB811D -CT=76BDB7A63614A41C9D52718B3514E03C -PT=93F65B7B961EE6B623A026576FF8890B - -I=302 -KEY=6932CD66A25D1DE274C7D5DF540917BFE6E09019A2F99AF1FA0DAFC8206E8CE9 -IV=FC7029DF7B70B29932FB5605717D350C -CT=93F65B7B961EE6B623A026576FF8890B -PT=FA5BEB508ABCBCB1B1D56C0E207A032D - -I=303 -KEY=595CCC3640445FF5BBF303FF7845AB821CBB7B49284526404BD8C3C600148FC4 -IV=306E0150E2194217CF34D6202C4CBC3D -CT=FA5BEB508ABCBCB1B1D56C0E207A032D -PT=BFAEA3EB7C617567EB302D571DBF2811 - -I=304 -KEY=BF5382311BF88FC9E32D5BADC832BE48A315D8A254245327A0E8EE911DABA7D5 -IV=E60F4E075BBCD03C58DE5852B07715CA -CT=BFAEA3EB7C617567EB302D571DBF2811 -PT=4B0E63933414184D43B0AA714AA31E02 - -I=305 -KEY=B50A2FF8FAC6820638CCBA3A0CA6519CE81BBB3160304B6AE35844E05708B9D7 -IV=0A59ADC9E13E0DCFDBE1E197C494EFD4 -CT=4B0E63933414184D43B0AA714AA31E02 -PT=0073CA04B300003AF3C1035C664E0646 - -I=306 -KEY=1A32AA7CA8B5D83C47F56C5D24EDBD38E8687135D3304B50109947BC3146BF91 -IV=AF38858452735A3A7F39D667284BECA4 -CT=0073CA04B300003AF3C1035C664E0646 -PT=75CFE6D4A4F05D8EBB5C614AC7FB48C8 - -I=307 -KEY=C321C5381F5A334C8B82DD2F0E4C73AE9DA797E177C016DEABC526F6F6BDF759 -IV=D9136F44B7EFEB70CC77B1722AA1CE96 -CT=75CFE6D4A4F05D8EBB5C614AC7FB48C8 -PT=B0D8DB37DF5C3A87B9E5D562283E8FEE - -I=308 -KEY=40879EA19753F0F22B1C1BF438A446532D7F4CD6A89C2C591220F394DE8378B7 -IV=83A65B998809C3BEA09EC6DB36E835FD -CT=B0D8DB37DF5C3A87B9E5D562283E8FEE -PT=9C885637CC7666C04B424DD6EF1F3EDB - -I=309 -KEY=B6824C9F800B1E7825135F250DB99FC8B1F71AE164EA4A995962BE42319C466C -IV=F605D23E1758EE8A0E0F44D1351DD99B -CT=9C885637CC7666C04B424DD6EF1F3EDB -PT=3E7F4437656E63E0ADC6C764B20FE92D - -I=310 -KEY=7FA3CDE5856B1F0D9AE33E9E6ED1532E8F885ED601842979F4A479268393AF41 -IV=C921817A05600175BFF061BB6368CCE6 -CT=3E7F4437656E63E0ADC6C764B20FE92D -PT=B19CCFDAADEC54C8DD5F4FD53D3C5824 - -I=311 -KEY=3E3ABA34DB005D9FF2CEF1321BCD018E3E14910CAC687DB129FB36F3BEAFF765 -IV=419977D15E6B4292682DCFAC751C52A0 -CT=B19CCFDAADEC54C8DD5F4FD53D3C5824 -PT=84F7D061322A4042913C0BD14F5F1391 - -I=312 -KEY=FB474D499955CB1F37FBA309DD55E09DBAE3416D9E423DF3B8C73D22F1F0E4F4 -IV=C57DF77D42559680C535523BC698E113 -CT=84F7D061322A4042913C0BD14F5F1391 -PT=CBCD716DA9C53D7AFFFE65B780926660 - -I=313 -KEY=7C1D07031362A7439F9DD5272DAD1D9B712E3000378700894739589571628294 -IV=875A4A4A8A376C5CA866762EF0F8FD06 -CT=CBCD716DA9C53D7AFFFE65B780926660 -PT=F605D205704496C5BFCEE88130920CDE - -I=314 -KEY=7E9E72A6032523643F0965E8BFCB0793872BE20547C3964CF8F7B01441F08E4A -IV=028375A510478427A094B0CF92661A08 -CT=F605D205704496C5BFCEE88130920CDE -PT=CFA8B47DEB5770925EA29484D82CDBB4 - -I=315 -KEY=518CA0A8C81E9DDCE1060410C69F0ACE48835678AC94E6DEA655249099DC55FE -IV=2F12D20ECB3BBEB8DE0F61F879540D5D -CT=CFA8B47DEB5770925EA29484D82CDBB4 -PT=1065AD49D2DD48EB9540F23A69469B92 - -I=316 -KEY=45E6A5A17D8D1AEA04CD8E184D0A1BF758E6FB317E49AE353315D6AAF09ACE6C -IV=146A0509B5938736E5CB8A088B951139 -CT=1065AD49D2DD48EB9540F23A69469B92 -PT=DB12EE00C65069CFEA509BA5BD5BB6BC - -I=317 -KEY=FC8F8F7F8A440A6CEB920D4311851B3A83F41531B819C7FAD9454D0F4DC178D0 -IV=B9692ADEF7C91086EF5F835B5C8F00CD -CT=DB12EE00C65069CFEA509BA5BD5BB6BC -PT=B66316FB3CCC9B262A34C205AE43F42B - -I=318 -KEY=42D666DF2C1575E3B346FCBCD208AD9F359703CA84D55CDCF3718F0AE3828CFB -IV=BE59E9A0A6517F8F58D4F1FFC38DB6A5 -CT=B66316FB3CCC9B262A34C205AE43F42B -PT=4C851D9BDC164194A6D1FDE274C06D1B - -I=319 -KEY=786B9456901DFA9FF85C686DEEDCA02079121E5158C31D4855A072E89742E1E0 -IV=3ABDF289BC088F7C4B1A94D13CD40DBF -CT=4C851D9BDC164194A6D1FDE274C06D1B -PT=5507F1EB271BDBC0A6DD8BBAEC843A05 - -I=320 -KEY=C79B5CD424E592D392FECD3233CEA70B2C15EFBA7FD8C688F37DF9527BC6DBE5 -IV=BFF0C882B4F8684C6AA2A55FDD12072B -CT=5507F1EB271BDBC0A6DD8BBAEC843A05 -PT=BB10EF7C98DE0255C836D5319B94B166 - -I=321 -KEY=10ABC5B835E6E6BD02E90B63D22EF9E7970500C6E706C4DD3B4B2C63E0526A83 -IV=D730996C1103746E9017C651E1E05EEC -CT=BB10EF7C98DE0255C836D5319B94B166 -PT=E8B797AFDC378DB47F172260963A6E2C - -I=322 -KEY=75E05AAAB4E6981A20E4177D214B81EA7FB297693B314969445C0E03766804AF -IV=654B9F1281007EA7220D1C1EF365780D -CT=E8B797AFDC378DB47F172260963A6E2C -PT=58ED1CC5A208A0E7340167E79F5DA7C2 - -I=323 -KEY=A69FECC296D12216128BD1D2C48B373D275F8BAC9939E98E705D69E4E935A36D -IV=D37FB6682237BA0C326FC6AFE5C0B6D7 -CT=58ED1CC5A208A0E7340167E79F5DA7C2 -PT=FEDA5FB215819B441BE18B0AED27A1FD - -I=324 -KEY=7EED1776E603DD6C20F08B4C6B121525D985D41E8CB872CA6BBCE2EE04120290 -IV=D872FBB470D2FF7A327B5A9EAF992218 -CT=FEDA5FB215819B441BE18B0AED27A1FD -PT=7CD64E29A704F13688DB206F7F337685 - -I=325 -KEY=D4479A0AF29AF7145EC3FB89FEF8BBA7A5539A372BBC83FCE367C2817B217415 -IV=AAAA8D7C14992A787E3370C595EAAE82 -CT=7CD64E29A704F13688DB206F7F337685 -PT=25D6728244F28F79D1BC707BE94ECA13 - -I=326 -KEY=7FB45D09003B25EFEB5F68CCB7E09C008085E8B56F4E0C8532DBB2FA926FBE06 -IV=ABF3C703F2A1D2FBB59C9345491827A7 -CT=25D6728244F28F79D1BC707BE94ECA13 -PT=47AF03717893A10D7F40D5A3D9B82534 - -I=327 -KEY=35EE9428D4EC49EC103EDF32F4FBEE16C72AEBC417DDAD884D9B67594BD79B32 -IV=4A5AC921D4D76C03FB61B7FE431B7216 -CT=47AF03717893A10D7F40D5A3D9B82534 -PT=B6C25C0E4CA560707588321AAF41119C - -I=328 -KEY=B12C0149A6EDD2DC3742D10822FEDDF771E8B7CA5B78CDF838135543E4968AAE -IV=84C2956172019B30277C0E3AD60533E1 -CT=B6C25C0E4CA560707588321AAF41119C -PT=09137DF5460434E863647B4B50E17A60 - -I=329 -KEY=CFEC596CE216B14A955E7CBC095C198678FBCA3F1D7CF9105B772E08B477F0CE -IV=7EC0582544FB6396A21CADB42BA2C471 -CT=09137DF5460434E863647B4B50E17A60 -PT=17A26688B271E9765F41C71CD8CF0C25 - -I=330 -KEY=35903FF91CC199C048C6C031AA2F4FC96F59ACB7AF0D10660436E9146CB8FCEB -IV=FA7C6695FED7288ADD98BC8DA373564F -CT=17A26688B271E9765F41C71CD8CF0C25 -PT=62E3C4D53DECB83FCD5F57D1971D58FB - -I=331 -KEY=F262476804B79C1F85FEB875CCD5FC3E0DBA686292E1A859C969BEC5FBA5A410 -IV=C7F27891187605DFCD38784466FAB3F7 -CT=62E3C4D53DECB83FCD5F57D1971D58FB -PT=3495C5855D819B6FF779FC7AC59BEB53 - -I=332 -KEY=DC61E5CFC9BAE6B23B894486AD478ADD392FADE7CF6033363E1042BF3E3E4F43 -IV=2E03A2A7CD0D7AADBE77FCF3619276E3 -CT=3495C5855D819B6FF779FC7AC59BEB53 -PT=7440ABE9E1374208CFBCCC18ADC6089F - -I=333 -KEY=C9D2E747A1A6D594CCAE434B7605C8FB4D6F060E2E57713EF1AC8EA793F847DC -IV=15B30288681C3326F72707CDDB424226 -CT=7440ABE9E1374208CFBCCC18ADC6089F -PT=B6802F0F62A28AF7326CDB2144E8DE87 - -I=334 -KEY=99FEF610CFFFACBE8C6AD0A2B0C8F8A7FBEF29014CF5FBC9C3C05586D710995B -IV=502C11576E59792A40C493E9C6CD305C -CT=B6802F0F62A28AF7326CDB2144E8DE87 -PT=B84D7D91E60C131F6F042D403D85C47B - -I=335 -KEY=91EB2713A930B6A53993029D5A056B4143A25490AAF9E8D6ACC478C6EA955D20 -IV=0815D10366CF1A1BB5F9D23FEACD93E6 -CT=B84D7D91E60C131F6F042D403D85C47B -PT=4DDF64827A16F90B5E6B306E8F227DB7 - -I=336 -KEY=C15019D3523304CC9231B33C53C7FE1E0E7D3012D0EF11DDF2AF48A865B72097 -IV=50BB3EC0FB03B269ABA2B1A109C2955F -CT=4DDF64827A16F90B5E6B306E8F227DB7 -PT=FDF6E5B6486E11839EB3A7F5C3898F54 - -I=337 -KEY=E24B749901384F48B2E740C51175E311F38BD5A49881005E6C1CEF5DA63EAFC3 -IV=231B6D4A530B4B8420D6F3F942B21D0F -CT=FDF6E5B6486E11839EB3A7F5C3898F54 -PT=841EF37B4AF82CC5EB00E11775079D81 - -I=338 -KEY=44B7FFFA042DCA1BF276D4911D4B0BE2779526DFD2792C9B871C0E4AD3393242 -IV=A6FC8B6305158553409194540C3EE8F3 -CT=841EF37B4AF82CC5EB00E11775079D81 -PT=1725AF7F70B65FBB060D29B3BCDF0A31 - -I=339 -KEY=B724B2CD569E436B20594E10576934BF60B089A0A2CF7320811127F96FE63873 -IV=F3934D3752B38970D22F9A814A223F5D -CT=1725AF7F70B65FBB060D29B3BCDF0A31 -PT=2CCC6D09954E5FE6C6A87E18950EED02 - -I=340 -KEY=E9EB02E31CABD14DFF231F1F649294044C7CE4A937812CC647B959E1FAE8D571 -IV=5ECFB02E4A359226DF7A510F33FBA0BB -CT=2CCC6D09954E5FE6C6A87E18950EED02 -PT=C82C82AF68EACE2AF22C3266F898F573 - -I=341 -KEY=90C8F71B05BE122AFE5D58A7A1AAB666845066065F6BE2ECB5956B8702702002 -IV=7923F5F81915C367017E47B8C5382262 -CT=C82C82AF68EACE2AF22C3266F898F573 -PT=377F6966928959F2D68F3A2BD0EA3735 - -I=342 -KEY=1BE70B607CF9A9E35DF916C4CC103FEBB32F0F60CDE2BB1E631A51ACD29A1737 -IV=8B2FFC7B7947BBC9A3A44E636DBA898D -CT=377F6966928959F2D68F3A2BD0EA3735 -PT=3A8CCF4943B9866A9ABBEC0BA46F25DB - -I=343 -KEY=631B2C30FEA26433F0CBCD01B1CE974089A3C0298E5B3D74F9A1BDA776F532EC -IV=78FC2750825BCDD0AD32DBC57DDEA8AB -CT=3A8CCF4943B9866A9ABBEC0BA46F25DB -PT=3B767EAB7F0C2D24BBE5565E93DC3E24 - -I=344 -KEY=8785E70A8CD45A8FE1E4382DC62D563DB2D5BE82F15710504244EBF9E5290CC8 -IV=E49ECB3A72763EBC112FF52C77E3C17D -CT=3B767EAB7F0C2D24BBE5565E93DC3E24 -PT=619610C6A4A8E9B196E65D2E5D463968 - -I=345 -KEY=B49BAD1E8EB8B9CF7F32048A81E5BCD3D343AE4455FFF9E1D4A2B6D7B86F35A0 -IV=331E4A14026CE3409ED63CA747C8EAEE -CT=619610C6A4A8E9B196E65D2E5D463968 -PT=F12AF66580B33C3113C45CF5EFD52F4F - -I=346 -KEY=3C92453C6342B6CDC18BFE05241EB5D922695821D54CC5D0C766EA2257BA1AEF -IV=8809E822EDFA0F02BEB9FA8FA5FB090A -CT=F12AF66580B33C3113C45CF5EFD52F4F -PT=A427E0B2CD34285167999A9F18295D26 - -I=347 -KEY=24A1F21CA68CF23F1674BF5328219987864EB8931878ED81A0FF70BD4F9347C9 -IV=1833B720C5CE44F2D7FF41560C3F2C5E -CT=A427E0B2CD34285167999A9F18295D26 -PT=85F5855ACB2741070E1C89F904CBDBEA - -I=348 -KEY=B5479F4D4A0DBBFFBF86C576009F241403BB3DC9D35FAC86AEE3F9444B589C23 -IV=91E66D51EC8149C0A9F27A2528BEBD93 -CT=85F5855ACB2741070E1C89F904CBDBEA -PT=295D7A02348A185F5C54113C734E9003 - -I=349 -KEY=AA9CE82B0B649063C874699C71E8A94E2AE647CBE7D5B4D9F2B7E87838160C20 -IV=1FDB776641692B9C77F2ACEA71778D5A -CT=295D7A02348A185F5C54113C734E9003 -PT=E466F369B840296AAB1A24ED32A19F51 - -I=350 -KEY=A2BA72E2906E04C42C0047EF222FFFE6CE80B4A25F959DB359ADCC950AB79371 -IV=08269AC99B0A94A7E4742E7353C756A8 -CT=E466F369B840296AAB1A24ED32A19F51 -PT=099CEB8099DD025E4A57015168F75388 - -I=351 -KEY=EA9B425CCD937976EB04693F16C4DAC4C71C5F22C6489FED13FACDC46240C0F9 -IV=482130BE5DFD7DB2C7042ED034EB2522 -CT=099CEB8099DD025E4A57015168F75388 -PT=E40CD2C0A7E7CB35C64AEB396338A801 - -I=352 -KEY=D31BCE56BA19A7CB6057C5F2CCB3786223108DE261AF54D8D5B026FD017868F8 -IV=39808C0A778ADEBD8B53ACCDDA77A2A6 -CT=E40CD2C0A7E7CB35C64AEB396338A801 -PT=12E94732A52D15C624A8E554AB54C9A4 - -I=353 -KEY=F0CD039C509E0EFF71B18AE3FEEB186D31F9CAD0C482411EF118C3A9AA2CA15C -IV=23D6CDCAEA87A93411E64F113258600F -CT=12E94732A52D15C624A8E554AB54C9A4 -PT=241C32C2C0C5C6CBE4BB354C054C68D7 - -I=354 -KEY=0579BEABF73DD177C1F1F0827DA20BA115E5F812044787D515A3F6E5AF60C98B -IV=F5B4BD37A7A3DF88B0407A61834913CC -CT=241C32C2C0C5C6CBE4BB354C054C68D7 -PT=E4EA5643CF19EF64820A1B591DE1C378 - -I=355 -KEY=99C7C61F7153FFA0F07380D052431667F10FAE51CB5E68B197A9EDBCB2810AF3 -IV=9CBE78B4866E2ED7318270522FE11DC6 -CT=E4EA5643CF19EF64820A1B591DE1C378 -PT=BC86D5465171B667CE837F874D933FF4 - -I=356 -KEY=C2A65A0A2E71F6E7E2BD9FBB5049F7914D897B179A2FDED6592A923BFF123507 -IV=5B619C155F22094712CE1F6B020AE1F6 -CT=BC86D5465171B667CE837F874D933FF4 -PT=EEB9DC4EBD27720AD3527A1323D85413 - -I=357 -KEY=B635E7EFD987991CD29414B3EBAB2EA4A330A7592708ACDC8A78E828DCCA6114 -IV=7493BDE5F7F66FFB30298B08BBE2D935 -CT=EEB9DC4EBD27720AD3527A1323D85413 -PT=78591E006B877AC6880834E3F98FD6B0 - -I=358 -KEY=F5849125E52B6DF3CD8144DDB64178DDDB69B9594C8FD61A0270DCCB2545B7A4 -IV=43B176CA3CACF4EF1F15506E5DEA5679 -CT=78591E006B877AC6880834E3F98FD6B0 -PT=8F9A67CF96F4608D56923CB267855F3F - -I=359 -KEY=41885734A072249ADE0091A0AD87F47854F3DE96DA7BB69754E2E07942C0E89B -IV=B40CC611455949691381D57D1BC68CA5 -CT=8F9A67CF96F4608D56923CB267855F3F -PT=1B0B8D9118CBECBA2D5AD17A261F9D56 - -I=360 -KEY=FF1A5B86E3545D9CB01A1222EC99A81C4FF85307C2B05A2D79B8310364DF75CD -IV=BE920CB2432679066E1A8382411E5C64 -CT=1B0B8D9118CBECBA2D5AD17A261F9D56 -PT=6225E63F0C1A5DE00FD63032908A51F3 - -I=361 -KEY=836FB4DC9C17E5AD70404B41CC4A043E2DDDB538CEAA07CD766E0131F455243E -IV=7C75EF5A7F43B831C05A596320D3AC22 -CT=6225E63F0C1A5DE00FD63032908A51F3 -PT=7C66E540C016FB81A345E10331FCAFF3 - -I=362 -KEY=63CA7D0E2675E43626B5311A7BA7131B51BB50780EBCFC4CD52BE032C5A98BCD -IV=E0A5C9D2BA62019B56F57A5BB7ED1725 -CT=7C66E540C016FB81A345E10331FCAFF3 -PT=2F010053D3C59BB8ACB5B13B197A4204 - -I=363 -KEY=6B5C4A2DD70FFF3023B2A775BECF05607EBA502BDD7967F4799E5109DCD3C9C9 -IV=08963723F17A1B060507966FC568167B -CT=2F010053D3C59BB8ACB5B13B197A4204 -PT=8918E06B8619B43E859171A345E246AE - -I=364 -KEY=575661F811B8D8B50980A55848A48949F7A2B0405B60D3CAFC0F20AA99318F67 -IV=3C0A2BD5C6B727852A32022DF66B8C29 -CT=8918E06B8619B43E859171A345E246AE -PT=60FF920A8495AD880459737525C109D6 - -I=365 -KEY=5FACBE49DE8F64786918067E7E361681975D224ADFF57E42F85653DFBCF086B1 -IV=08FADFB1CF37BCCD6098A32636929FC8 -CT=60FF920A8495AD880459737525C109D6 -PT=03F09A2C18DB8BAE5CCC93B9165A1D16 - -I=366 -KEY=9BFDA5803AC1C3004F0B138885DE59FE94ADB866C72EF5ECA49AC066AAAA9BA7 -IV=C4511BC9E44EA778261315F6FBE84F7F -CT=03F09A2C18DB8BAE5CCC93B9165A1D16 -PT=52CB3AF36047F4D14C2EAEE3C3F8AF2A - -I=367 -KEY=614239035D7EF489DE2F88FDB6188EC3C6668295A769013DE8B46E856952348D -IV=FABF9C8367BF378991249B7533C6D73D -CT=52CB3AF36047F4D14C2EAEE3C3F8AF2A -PT=249794B3822BB06708B5D5777D297C40 - -I=368 -KEY=20BEFE90BA9C7EE9CFB1E569FE354258E2F116262542B15AE001BBF2147B48CD -IV=41FCC793E7E28A60119E6D94482DCC9B -CT=249794B3822BB06708B5D5777D297C40 -PT=1836AE59EAE452DAC108618DECD666BD - -I=369 -KEY=E11E8BF6DE253E4FBADEDFD44B34BE15FAC7B87FCFA6E3802109DA7FF8AD2E70 -IV=C1A0756664B940A6756F3ABDB501FC4D -CT=1836AE59EAE452DAC108618DECD666BD -PT=20EE84DEB0E7B0C83D74CE251AA1615C - -I=370 -KEY=D519038D457B4BCD9DD50C8F64FE2F2ADA293CA17F4153481C7D145AE20C4F2C -IV=3407887B9B5E7582270BD35B2FCA913F -CT=20EE84DEB0E7B0C83D74CE251AA1615C -PT=6FA7D3584A2E4B803AC1AC07B09931A2 - -I=371 -KEY=82F1611CFB9E7AF9F9274C6BF1B96BEBB58EEFF9356F18C826BCB85D52957E8E -IV=57E86291BEE5313464F240E4954744C1 -CT=6FA7D3584A2E4B803AC1AC07B09931A2 -PT=A7B8F8AC07BAB843F4E7942A6E4A85D5 - -I=372 -KEY=DFF5A6DE8ADE9AB78CF1E637F44FD3351236175532D5A08BD25B2C773CDFFB5B -IV=5D04C7C27140E04E75D6AA5C05F6B8DE -CT=A7B8F8AC07BAB843F4E7942A6E4A85D5 -PT=7F3C3702404E6E013474A0AA0EF85527 - -I=373 -KEY=9C6A11136F64F462E7C5CB30049CDA056D0A2057729BCE8AE62F8CDD3227AE7C -IV=439FB7CDE5BA6ED56B342D07F0D30930 -CT=7F3C3702404E6E013474A0AA0EF85527 -PT=7C0C44DC96872DEE0BAC71DDBDCC84E3 - -I=374 -KEY=2C95624ADD9B1E09F13AE579333B22BB1106648BE41CE364ED83FD008FEB2A9F -IV=B0FF7359B2FFEA6B16FF2E4937A7F8BE -CT=7C0C44DC96872DEE0BAC71DDBDCC84E3 -PT=B9E4597C562E9B5C0E6815E64F767CE9 - -I=375 -KEY=CBB3F14A21E49825990B89E7D07BC386A8E23DF7B2327838E3EBE8E6C09D5676 -IV=E7269300FC7F862C68316C9EE340E13D -CT=B9E4597C562E9B5C0E6815E64F767CE9 -PT=4B37A1FD978F50BE9EA482CFBEACFA08 - -I=376 -KEY=65B742FFD29D9B07F3956625AED7382EE3D59C0A25BD28867D4F6A297E31AC7E -IV=AE04B3B5F37903226A9EEFC27EACFBA8 -CT=4B37A1FD978F50BE9EA482CFBEACFA08 -PT=D3406B71FFC847C364199666A808C43A - -I=377 -KEY=6C6A4DE74AF6C443B4F6A1C7DAB4A28E3095F77BDA756F451956FC4FD6396844 -IV=09DD0F18986B5F444763C7E274639AA0 -CT=D3406B71FFC847C364199666A808C43A -PT=94744ECE39108CB8084DF8A17C49CDCC - -I=378 -KEY=AD09E82AFAA9F5168CD9B83F44C096A0A4E1B9B5E365E3FD111B04EEAA70A588 -IV=C163A5CDB05F3155382F19F89E74342E -CT=94744ECE39108CB8084DF8A17C49CDCC -PT=45EF43A20D7F174DA1463DDA678BBFFB - -I=379 -KEY=DC29CBF4E8B92311A9AA788C437A8EDDE10EFA17EE1AF4B0B05D3934CDFB1A73 -IV=712023DE1210D6072573C0B307BA187D -CT=45EF43A20D7F174DA1463DDA678BBFFB -PT=4480FB073AA197507E376C56B824C753 - -I=380 -KEY=93308B36D3A2E1A952B96FE4687B2DF9A58E0110D4BB63E0CE6A556275DFDD20 -IV=4F1940C23B1BC2B8FB1317682B01A324 -CT=4480FB073AA197507E376C56B824C753 -PT=C8BBB77D206EF37C7C40DB175D105271 - -I=381 -KEY=9682C995955D18471758C504201E93AC6D35B66DF4D5909CB22A8E7528CF8F51 -IV=05B242A346FFF9EE45E1AAE04865BE55 -CT=C8BBB77D206EF37C7C40DB175D105271 -PT=50C0B9001C716D53470FC9B011191402 - -I=382 -KEY=60854B33BE79B0E631B1AF9046C46D153DF50F6DE8A4FDCFF52547C539D69B53 -IV=F60782A62B24A8A126E96A9466DAFEB9 -CT=50C0B9001C716D53470FC9B011191402 -PT=8DB5367A34C5E5B93486AB07CA8BB02E - -I=383 -KEY=7EE74E63D01F31D44B3860471B0BE50FB0403917DC611876C1A3ECC2F35D2B7D -IV=1E6205506E6681327A89CFD75DCF881A -CT=8DB5367A34C5E5B93486AB07CA8BB02E -PT=4F9B922C88C1750829D9088F16EDB529 - -I=384 -KEY=A65EE6CE576182F487D2C21C4F8539F3FFDBAB3B54A06D7EE87AE44DE5B09E54 -IV=D8B9A8AD877EB320CCEAA25B548EDCFC -CT=4F9B922C88C1750829D9088F16EDB529 -PT=05A705F6B55D3ACF3E95E8264FEFFDCC - -I=385 -KEY=64F9A7DF5DA898C968746F96692F1892FA7CAECDE1FD57B1D6EF0C6BAA5F6398 -IV=C2A741110AC91A3DEFA6AD8A26AA2161 -CT=05A705F6B55D3ACF3E95E8264FEFFDCC -PT=D1FB7C1A698990AC81068D08BE1CE91F - -I=386 -KEY=019663655974433AD5731BC4388A067D2B87D2D78874C71D57E9816314438A87 -IV=656FC4BA04DCDBF3BD07745251A51EEF -CT=D1FB7C1A698990AC81068D08BE1CE91F -PT=A1CD24AAFCEE3A60A025B983D10D8E54 - -I=387 -KEY=16EF87A84F0627345CED6385A62374778A4AF67D749AFD7DF7CC38E0C54E04D3 -IV=1779E4CD1672640E899E78419EA9720A -CT=A1CD24AAFCEE3A60A025B983D10D8E54 -PT=B9064D063D2C8D8D935B53CBEF3224E2 - -I=388 -KEY=80931C61E23BA976FFC9288F74AD876D334CBB7B49B670F064976B2B2A7C2031 -IV=967C9BC9AD3D8E42A3244B0AD28EF31A -CT=B9064D063D2C8D8D935B53CBEF3224E2 -PT=8AD3B2222D84A4B25DC1311378027207 - -I=389 -KEY=227ACE0315678DEE433049D8CDFEE2D8B99F09596432D44239565A38527E5236 -IV=A2E9D262F75C2498BCF96157B95365B5 -CT=8AD3B2222D84A4B25DC1311378027207 -PT=3A7FC9D43F1F997FAF4931101C5B5FD4 - -I=390 -KEY=11799A22D50C53A89EDF396B7C7565AD83E0C08D5B2D4D3D961F6B284E250DE2 -IV=33035421C06BDE46DDEF70B3B18B8775 -CT=3A7FC9D43F1F997FAF4931101C5B5FD4 -PT=930860056FE2FDDC10059D09385C0415 - -I=391 -KEY=58DE85D9975D5F8A16C47C834568EF1D10E8A08834CFB0E1861AF621767909F7 -IV=49A71FFB42510C22881B45E8391D8AB0 -CT=930860056FE2FDDC10059D09385C0415 -PT=F41CCB823840FF7D16C6990A14E591D9 - -I=392 -KEY=3C8567CD05AF33761FE05FBDC2596EBFE4F46B0A0C8F4F9C90DC6F2B629C982E -IV=645BE21492F26CFC0924233E873181A2 -CT=F41CCB823840FF7D16C6990A14E591D9 -PT=82899B698456363C175791B845D5736F - -I=393 -KEY=F50F05CBDDFEBE7A656EE5C08CC24FF5667DF06388D979A0878BFE932749EB41 -IV=C98A6206D8518D0C7A8EBA7D4E9B214A -CT=82899B698456363C175791B845D5736F -PT=CF85BFDA1DFF5ADFFAF1B3E000B407F3 - -I=394 -KEY=B44AA91A374D1C5A7BD00557CBD24962A9F84FB99526237F7D7A4D7327FDECB2 -IV=4145ACD1EAB3A2201EBEE09747100697 -CT=CF85BFDA1DFF5ADFFAF1B3E000B407F3 -PT=34EEA75CC20C6EDEE9A5379C3B5CF01A - -I=395 -KEY=4C401127C0AFABBEA4C93FD80BA009CC9D16E8E5572A4DA194DF7AEF1CA11CA8 -IV=F80AB83DF7E2B7E4DF193A8FC07240AE -CT=34EEA75CC20C6EDEE9A5379C3B5CF01A -PT=27C6392ABE790B448CC9216B3FCF5454 - -I=396 -KEY=44D59CB8EBCC91362462D1D8FE193270BAD0D1CFE95346E518165B84236E48FC -IV=08958D9F2B633A8880ABEE00F5B93BBC -CT=27C6392ABE790B448CC9216B3FCF5454 -PT=2C39AC10C7D51B61D8F437D9BAA24A55 - -I=397 -KEY=E42795DA2BF8FA7A3B0E83923A5E243196E97DDF2E865D84C0E26C5D99CC02A9 -IV=A0F20962C0346B4C1F6C524AC4471641 -CT=2C39AC10C7D51B61D8F437D9BAA24A55 -PT=F828BC735827C106E61F8FFFE9453A77 - -I=398 -KEY=7F05DC0CD80178018D3A90E4A0CE63156EC1C1AC76A19C8226FDE3A2708938DE -IV=9B2249D6F3F9827BB63413769A904724 -CT=F828BC735827C106E61F8FFFE9453A77 -PT=DF8129A79852FEE2A8015A2379A7215B - -I=399 -KEY=935560C6072D897477D71AC4C12188D0B140E80BEEF362608EFCB981092E1985 -IV=EC50BCCADF2CF175FAED8A2061EFEBC5 -CT=DF8129A79852FEE2A8015A2379A7215B -PT=CD6429CF3F81F8B4F82BC627A8283096 - -=========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/cbc_e_m.txt b/src/lib/crypto/aes/test/cbc_e_m.txt deleted file mode 100644 index cd344785f..000000000 --- a/src/lib/crypto/aes/test/cbc_e_m.txt +++ /dev/null @@ -1,7224 +0,0 @@ - -========================= - -FILENAME: "cbc_e_m.txt" - -Cipher Block Chaining (CBC) Mode - ENCRYPTION -Monte Carlo Test - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 - -I=0 -KEY=00000000000000000000000000000000 -IV=00000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=8A05FC5E095AF4848A08D328D3688E3D - -I=1 -KEY=8A05FC5E095AF4848A08D328D3688E3D -IV=8A05FC5E095AF4848A08D328D3688E3D -PT=204F17E2444381F6114FF53934C0BCD3 -CT=192D9B3AA10BB2F7846CCBA0085C657A - -I=2 -KEY=93286764A85146730E641888DB34EB47 -IV=192D9B3AA10BB2F7846CCBA0085C657A -PT=983BF6F5A6DFBCDAA19370666E83A99A -CT=40D8DAF6D1FDA0A073B3BD18B7695D2E - -I=3 -KEY=D3F0BD9279ACE6D37DD7A5906C5DB669 -IV=40D8DAF6D1FDA0A073B3BD18B7695D2E -PT=C48CD503A21C8AD0B2483EF15F79571D -CT=3EDBE80D69A1D2248CA55FC17C4EF3C5 - -I=4 -KEY=ED2B559F100D34F7F172FA51101345AC -IV=3EDBE80D69A1D2248CA55FC17C4EF3C5 -PT=6A49A07B90CE830C20BC239646D936C0 -CT=D87891CF573C99EAE4349A70CA099415 - -I=5 -KEY=3553C4504731AD1D15466021DA1AD1B9 -IV=D87891CF573C99EAE4349A70CA099415 -PT=0ACB9A969946F523317BB932CE1561A4 -CT=24E8F1013F479BBE655DF088C9316BC7 - -I=6 -KEY=11BB3551787636A3701B90A9132BBA7E -IV=24E8F1013F479BBE655DF088C9316BC7 -PT=3DFC8683C1D626A26E2513EB747E8B0F -CT=2C92E80D8D1F70B411C28BD9FDABF21D - -I=7 -KEY=3D29DD5CF569461761D91B70EE804863 -IV=2C92E80D8D1F70B411C28BD9FDABF21D -PT=FAE2D6A36DBD17199F257643C89EB608 -CT=A61810A2798A70A9D2B37E88DEF9AE0F - -I=8 -KEY=9B31CDFE8CE336BEB36A65F83079E66C -IV=A61810A2798A70A9D2B37E88DEF9AE0F -PT=CB97F090318A6B10F5044EB8333ECDD6 -CT=0034FA480DE6F65D98D30B026118718F - -I=9 -KEY=9B0537B68105C0E32BB96EFA516197E3 -IV=0034FA480DE6F65D98D30B026118718F -PT=1B8030AC682BA677A7A3ACDC7FB33BB6 -CT=BEA24548CBC4A6630C9F1251F2C3DC51 - -I=10 -KEY=25A772FE4AC1668027267CABA3A24BB2 -IV=BEA24548CBC4A6630C9F1251F2C3DC51 -PT=D0524282C9AC395508CB2991822E8F42 -CT=4F278DD0B06CBFBAA928635E7CA81B68 - -I=11 -KEY=6A80FF2EFAADD93A8E0E1FF5DF0A50DA -IV=4F278DD0B06CBFBAA928635E7CA81B68 -PT=49EA900E2F61DF8CDEA7D479F59C4C30 -CT=EDFF930BB183F8DAC2FC0BD01AD65882 - -I=12 -KEY=877F6C254B2E21E04CF21425C5DC0858 -IV=EDFF930BB183F8DAC2FC0BD01AD65882 -PT=A1BBEB4E44EF725497B8C589192CC900 -CT=A6FE530E9509D48BAF30F601D04DB19D - -I=13 -KEY=21813F2BDE27F56BE3C2E2241591B9C5 -IV=A6FE530E9509D48BAF30F601D04DB19D -PT=4AD71402771A83F41F7E3AC004150CB7 -CT=FF1148A2E07401F7291B418D62618B65 - -I=14 -KEY=DE9077893E53F49CCAD9A3A977F032A0 -IV=FF1148A2E07401F7291B418D62618B65 -PT=AC47A1FD3490D6E809D40D4BEB8FF639 -CT=4420D4686F7A4D77A72810E89A5E0DF1 - -I=15 -KEY=9AB0A3E15129B9EB6DF1B341EDAE3F51 -IV=4420D4686F7A4D77A72810E89A5E0DF1 -PT=F22E1865DD87A88238173FC693C382E7 -CT=A4C7DE5DF9E2B6A20A1E22F8D7496ACD - -I=16 -KEY=3E777DBCA8CB0F4967EF91B93AE7559C -IV=A4C7DE5DF9E2B6A20A1E22F8D7496ACD -PT=929EFB34B1C552221B648A3D2C678EC9 -CT=D93DBCCA25FA4D9D8C37B3F107FCFA3C - -I=17 -KEY=E74AC1768D3142D4EBD822483D1BAFA0 -IV=D93DBCCA25FA4D9D8C37B3F107FCFA3C -PT=771C61ABB1E9BAB6F678336C8193307E -CT=75F491C2EA85184ACA3C96B769FA9698 - -I=18 -KEY=92BE50B467B45A9E21E4B4FF54E13938 -IV=75F491C2EA85184ACA3C96B769FA9698 -PT=55E42F98CCED821FE211D29674E77F48 -CT=A9C7536B77265ECBF7AC5ECD1EF5DDE2 - -I=19 -KEY=3B7903DF10920455D648EA324A14E4DA -IV=A9C7536B77265ECBF7AC5ECD1EF5DDE2 -PT=56BC0FA54F6F1E04A9A8893D3964EA68 -CT=3C749BF7EFA55CE924D1B33291C2B586 - -I=20 -KEY=070D9828FF3758BCF2995900DBD6515C -IV=3C749BF7EFA55CE924D1B33291C2B586 -PT=45D9BBBB1F3BB33EE182F09C90B1661C -CT=C4708DBAEBD202CDD2054DDCB1AF7BAB - -I=21 -KEY=C37D159214E55A71209C14DC6A792AF7 -IV=C4708DBAEBD202CDD2054DDCB1AF7BAB -PT=37765B154264AD781BBE5F5717DE7038 -CT=87457FD2EE747645576A27F46B00EC30 - -I=22 -KEY=44386A40FA912C3477F633280179C6C7 -IV=87457FD2EE747645576A27F46B00EC30 -PT=A7150BBC7BE3837E145AB83E554B49DE -CT=E25743DAD8E627803DA6C5E587C82384 - -I=23 -KEY=A66F299A22770BB44A50F6CD86B1E543 -IV=E25743DAD8E627803DA6C5E587C82384 -PT=173343A8488146FC9E4B59C2DF42BAF3 -CT=0D0A78CD5E3EB40F92FB55351122E92B - -I=24 -KEY=AB6551577C49BFBBD8ABA3F897930C68 -IV=0D0A78CD5E3EB40F92FB55351122E92B -PT=3B68CFE78B5DEA8F5165A2034D8C2823 -CT=1921B523A2F9B5F53C740D451C9FCE0C - -I=25 -KEY=B244E474DEB00A4EE4DFAEBD8B0CC264 -IV=1921B523A2F9B5F53C740D451C9FCE0C -PT=FDDD484B52C7F3A32F4514BEF5A646E3 -CT=6EAC2BB6EDF35C1267FF4F10700F3CD7 - -I=26 -KEY=DCE8CFC23343565C8320E1ADFB03FEB3 -IV=6EAC2BB6EDF35C1267FF4F10700F3CD7 -PT=CDAD592E5467AD1FA1B71D8AC050FCE0 -CT=D9624E40A8C9A2C58ABEDBAEB865DC1F - -I=27 -KEY=058A81829B8AF499099E3A03436622AC -IV=D9624E40A8C9A2C58ABEDBAEB865DC1F -PT=F9E90A4D7A9EF66818004CBC47C8C6EA -CT=DE15C7322B32738BB493E7FA27AFE6E2 - -I=28 -KEY=DB9F46B0B0B88712BD0DDDF964C9C44E -IV=DE15C7322B32738BB493E7FA27AFE6E2 -PT=FE3CC4AE4A13AC8946407CEEE220290B -CT=5822C79D627AD8A0C4975873D62C5E11 - -I=29 -KEY=83BD812DD2C25FB2799A858AB2E59A5F -IV=5822C79D627AD8A0C4975873D62C5E11 -PT=A5106EBD8888CC3A6884AC8E8EA9C97A -CT=F5AD0473A4228662D9F76E7A5ED4DBDD - -I=30 -KEY=7610855E76E0D9D0A06DEBF0EC314182 -IV=F5AD0473A4228662D9F76E7A5ED4DBDD -PT=4F30B073FB95CD0F0317E749F20E7A7D -CT=4B39DA1FA331CFEB1D6713054C6E9474 - -I=31 -KEY=3D295F41D5D1163BBD0AF8F5A05FD5F6 -IV=4B39DA1FA331CFEB1D6713054C6E9474 -PT=4850735E17F01A3B131E1B78B3A6EB96 -CT=32D1BE8640859CFAB16D64CE8795729B - -I=32 -KEY=0FF8E1C795548AC10C679C3B27CAA76D -IV=32D1BE8640859CFAB16D64CE8795729B -PT=A8C4B9E0069935CB046ACBB49C0B1205 -CT=47DC1150929AA9610938CB0CFE92995E - -I=33 -KEY=4824F09707CE23A0055F5737D9583E33 -IV=47DC1150929AA9610938CB0CFE92995E -PT=13F5DA56D399A7DAA004D0BE76845E68 -CT=BCA6BD8971837B8A81B923E5B2ED0D83 - -I=34 -KEY=F4824D1E764D582A84E674D26BB533B0 -IV=BCA6BD8971837B8A81B923E5B2ED0D83 -PT=8397C79E02FDFE6B7D47FA0181EA453A -CT=23D991B7DA5E96966830E7B40B5A2D8A - -I=35 -KEY=D75BDCA9AC13CEBCECD6936660EF1E3A -IV=23D991B7DA5E96966830E7B40B5A2D8A -PT=18987E5504E23C0F862BCA8DFFC2B07F -CT=17AA31C49F584DEF77C8E7891B11652B - -I=36 -KEY=C0F1ED6D334B83539B1E74EF7BFE7B11 -IV=17AA31C49F584DEF77C8E7891B11652B -PT=A34D44CC1C6E171D7D48447F87E2F2C1 -CT=DD1F90F66D4062E6823F0F229562D110 - -I=37 -KEY=1DEE7D9B5E0BE1B519217BCDEE9CAA01 -IV=DD1F90F66D4062E6823F0F229562D110 -PT=C9793582E22B8840BBAA3D7669208CCC -CT=8F5B876777F7CA903B1D6346AA8BDAE7 - -I=38 -KEY=92B5FAFC29FC2B25223C188B441770E6 -IV=8F5B876777F7CA903B1D6346AA8BDAE7 -PT=730EACFEE3817A94B88117ABB3F9CDE4 -CT=388780BA989C0A8BB5BD9E4086D91EF7 - -I=39 -KEY=AA327A46B16021AE978186CBC2CE6E11 -IV=388780BA989C0A8BB5BD9E4086D91EF7 -PT=F004D3A14C6C94FA2D39BE0C71119658 -CT=7F4C33E4F5C055C05DB4B7691061B307 - -I=40 -KEY=D57E49A244A0746ECA3531A2D2AFDD16 -IV=7F4C33E4F5C055C05DB4B7691061B307 -PT=575F86A5D1637CB86449F8BC0F1573D3 -CT=F6FE1919F174065AB31AC43E0D733A81 - -I=41 -KEY=238050BBB5D47234792FF59CDFDCE797 -IV=F6FE1919F174065AB31AC43E0D733A81 -PT=14F8E2DB61B05E094CA4C0E9DA7800EE -CT=4CB876F2DC169F955E639C6C916340A6 - -I=42 -KEY=6F38264969C2EDA1274C69F04EBFA731 -IV=4CB876F2DC169F955E639C6C916340A6 -PT=F88BA2E4AA4ABDD381778DFD1DA1856F -CT=AEEB80B469D89E45BC3426B6CCC50440 - -I=43 -KEY=C1D3A6FD001A73E49B784F46827AA371 -IV=AEEB80B469D89E45BC3426B6CCC50440 -PT=195F74019B65C0F7D724491BDE8C8B88 -CT=2FD7CCDBDB2B2037C104F0A707A11EDA - -I=44 -KEY=EE046A26DB3153D35A7CBFE185DBBDAB -IV=2FD7CCDBDB2B2037C104F0A707A11EDA -PT=FF51887AB5FEC9C97CB61BB2DE9CDBC6 -CT=8DF7BB99B781C63F4F8B2A7D5DFF2960 - -I=45 -KEY=63F3D1BF6CB095EC15F7959CD82494CB -IV=8DF7BB99B781C63F4F8B2A7D5DFF2960 -PT=A35AAB0055E99FA980D59B242B8C6257 -CT=7D96ECC20571E9E85C16E3BDADA374CA - -I=46 -KEY=1E653D7D69C17C0449E176217587E001 -IV=7D96ECC20571E9E85C16E3BDADA374CA -PT=02CC392194874CD531025588C96E2D22 -CT=AA1DC2E69CE582DFA9A1B435854FCBB1 - -I=47 -KEY=B478FF9BF524FEDBE040C214F0C82BB0 -IV=AA1DC2E69CE582DFA9A1B435854FCBB1 -PT=94CC5DB118EF53C904B0EEC23AC650FD -CT=DA0CA33BCCE4ABA1936833127D1F5E25 - -I=48 -KEY=6E745CA039C0557A7328F1068DD77595 -IV=DA0CA33BCCE4ABA1936833127D1F5E25 -PT=52F009E929526E923BE4F43B66876725 -CT=B5E80FF4DADD69BB7493B9F72A752811 - -I=49 -KEY=DB9C5354E31D3CC107BB48F1A7A25D84 -IV=B5E80FF4DADD69BB7493B9F72A752811 -PT=6B88B42E99E5B4F838064A711B71DE1F -CT=5CDDCE45516C6D1654647A1A541AC435 - -I=50 -KEY=87419D11B27151D753DF32EBF3B899B1 -IV=5CDDCE45516C6D1654647A1A541AC435 -PT=9E25CBDD8E2D7D68FF72932E35879175 -CT=3C7E88A9A6462D08ADA5910A3FCE611A - -I=51 -KEY=BB3F15B814377CDFFE7AA3E1CC76F8AB -IV=3C7E88A9A6462D08ADA5910A3FCE611A -PT=72A4EF1D82A3AC5C1DFDF8C4DCFB9F6E -CT=E428200E1C3BE9A5141F73590B7473B8 - -I=52 -KEY=5F1735B6080C957AEA65D0B8C7028B13 -IV=E428200E1C3BE9A5141F73590B7473B8 -PT=7CD8053F2FD743A44CC39F75C1E81075 -CT=AB3B8A79653E884053AFC8C14504AF77 - -I=53 -KEY=F42CBFCF6D321D3AB9CA187982062464 -IV=AB3B8A79653E884053AFC8C14504AF77 -PT=0731077A8B6854CB90AFFAE3A3B199C4 -CT=53B7DFD6D12DDE7966C62FCC1946A4AC - -I=54 -KEY=A79B6019BC1FC343DF0C37B59B4080C8 -IV=53B7DFD6D12DDE7966C62FCC1946A4AC -PT=E4E26CA1DA697F30E0542763313A79B7 -CT=6DEC201BBB90B66A3B2DFF4FA1DDF7C4 - -I=55 -KEY=CA774002078F7529E421C8FA3A9D770C -IV=6DEC201BBB90B66A3B2DFF4FA1DDF7C4 -PT=C2CF11681C4767A78B2F95AFB50CF155 -CT=F535B7CD4135A39E0E344BD2CFA14B83 - -I=56 -KEY=3F42F7CF46BAD6B7EA158328F53C3C8F -IV=F535B7CD4135A39E0E344BD2CFA14B83 -PT=606618948C1ED454B9B0F92435381D2D -CT=209AC483682C48AA197BB64417127656 - -I=57 -KEY=1FD8334C2E969E1DF36E356CE22E4AD9 -IV=209AC483682C48AA197BB64417127656 -PT=8F8A70AADF2F8BFB5E137F86AC83D32F -CT=76F5F43A888D7F22D698A73810ED5B15 - -I=58 -KEY=692DC776A61BE13F25F69254F2C311CC -IV=76F5F43A888D7F22D698A73810ED5B15 -PT=E9E8AEBF16A5F4E1C26B4A385163E844 -CT=625C62F33C9548F2651FB0A08BF45286 - -I=59 -KEY=0B71A5859A8EA9CD40E922F47937434A -IV=625C62F33C9548F2651FB0A08BF45286 -PT=C69CFD36C50EBA06E3B3C4AB7C9B694E -CT=3931CE6DF783063F26920D4048B00C82 - -I=60 -KEY=32406BE86D0DAFF2667B2FB431874FC8 -IV=3931CE6DF783063F26920D4048B00C82 -PT=5DFE322DD692BA8DD9CD328A5AF9A3B7 -CT=A3CA3ECE725C84281144052A80EA5176 - -I=61 -KEY=918A55261F512BDA773F2A9EB16D1EBE -IV=A3CA3ECE725C84281144052A80EA5176 -PT=4BBD16BF74226F816767A7207C672C9A -CT=94552690A231354F8F9BEF295E55F142 - -I=62 -KEY=05DF73B6BD601E95F8A4C5B7EF38EFFC -IV=94552690A231354F8F9BEF295E55F142 -PT=7055D0C535B2B0501FF6AAEE46E03818 -CT=771908987F00C2D822897E7EEA148F29 - -I=63 -KEY=72C67B2EC260DC4DDA2DBBC9052C60D5 -IV=771908987F00C2D822897E7EEA148F29 -PT=7336B9D4977BDDA811C0C5EBEA539574 -CT=7AA84598115B181863081AFCC239EDD2 - -I=64 -KEY=086E3EB6D33BC455B925A135C7158D07 -IV=7AA84598115B181863081AFCC239EDD2 -PT=5296C8546532BAEACBEC9F29916FB6B2 -CT=3D95967035AF639B2D2814DEB9B7F86A - -I=65 -KEY=35FBA8C6E694A7CE940DB5EB7EA2756D -IV=3D95967035AF639B2D2814DEB9B7F86A -PT=430880F5576C7783BC1336F900DDD037 -CT=4D70AAD2FC9EF403B463A72DB4CFE640 - -I=66 -KEY=788B02141A0A53CD206E12C6CA6D932D -IV=4D70AAD2FC9EF403B463A72DB4CFE640 -PT=E489B93778DE0C42FEFB6122ECA46BDC -CT=165DDB405546934E81CB6B0B89B4A40E - -I=67 -KEY=6ED6D9544F4CC083A1A579CD43D93723 -IV=165DDB405546934E81CB6B0B89B4A40E -PT=8E5481ACD58BFC5D141C1F71CDE91E37 -CT=693775A3661CE9D0E4CB4888431C64A5 - -I=68 -KEY=07E1ACF729502953456E314500C55386 -IV=693775A3661CE9D0E4CB4888431C64A5 -PT=4AAA5E507EFB9FAD15E5F4C77F46AF89 -CT=C42391D50B1210C67B6AD642745A4DAC - -I=69 -KEY=C3C23D22224239953E04E707749F1E2A -IV=C42391D50B1210C67B6AD642745A4DAC -PT=4E0748F8716801B099494037485B8BA4 -CT=A4CB7F010AC42B4C3C14F02353F3644A - -I=70 -KEY=67094223288612D902101724276C7A60 -IV=A4CB7F010AC42B4C3C14F02353F3644A -PT=0B7B41D57885DB37A2FC355C8D03FF3C -CT=1BB0CBD24537B36EB555BE8C0FEC3A1F - -I=71 -KEY=7CB989F16DB1A1B7B745A9A82880407F -IV=1BB0CBD24537B36EB555BE8C0FEC3A1F -PT=4696F9A564354194142AB7B8630B4279 -CT=18B10BAE39D4FA58F586A067A8E38BC5 - -I=72 -KEY=6408825F54655BEF42C309CF8063CBBA -IV=18B10BAE39D4FA58F586A067A8E38BC5 -PT=0B59EBABAB994F2DDB3DE383454BECE8 -CT=C09C6670B93ECD303BA53DE58DD81A64 - -I=73 -KEY=A494E42FED5B96DF7966342A0DBBD1DE -IV=C09C6670B93ECD303BA53DE58DD81A64 -PT=2F897F3385E71133CEC8367411E830A3 -CT=45EA7CB9119DF7367294F9FE36D4A09F - -I=74 -KEY=E17E9896FCC661E90BF2CDD43B6F7141 -IV=45EA7CB9119DF7367294F9FE36D4A09F -PT=8CDE9D975B51A098F4CAC93DC58C002F -CT=02DDD735439A8AE03E976E629A6C992C - -I=75 -KEY=E3A34FA3BF5CEB093565A3B6A103E86D -IV=02DDD735439A8AE03E976E629A6C992C -PT=1E20571F82C2C6884A6F90A23FD3A925 -CT=B040686B866AE80A88B899031F2F0EE4 - -I=76 -KEY=53E327C839360303BDDD3AB5BE2CE689 -IV=B040686B866AE80A88B899031F2F0EE4 -PT=0851624711970ADE2F456D5DAFB17E05 -CT=201756BC061706513264A3C489D95A0C - -I=77 -KEY=73F471743F2105528FB9997137F5BC85 -IV=201756BC061706513264A3C489D95A0C -PT=E8B1410DE742136E71F54D31FEAA72EB -CT=2EF27C31AA488648FCE0F1804D658092 - -I=78 -KEY=5D060D459569831A735968F17A903C17 -IV=2EF27C31AA488648FCE0F1804D658092 -PT=97E0CA84C9B22C8942C7FC5088EAED04 -CT=7545F1D9C8F5F8B441EDCDAF00462344 - -I=79 -KEY=2843FC9C5D9C7BAE32B4A55E7AD61F53 -IV=7545F1D9C8F5F8B441EDCDAF00462344 -PT=7B5572C09E998656B55C53748CF77C21 -CT=347875EFD6BD978CD1B2EA949F7E2358 - -I=80 -KEY=1C3B89738B21EC22E3064FCAE5A83C0B -IV=347875EFD6BD978CD1B2EA949F7E2358 -PT=A30001AA29D70B0A141B8FC8B9B2E210 -CT=9C956408BA335CCC9F02F31CC45FD5E6 - -I=81 -KEY=80AEED7B3112B0EE7C04BCD621F7E9ED -IV=9C956408BA335CCC9F02F31CC45FD5E6 -PT=839783D75859393B215010F63159FA45 -CT=B70E700F4A7ED08618754960B83BD0F2 - -I=82 -KEY=37A09D747B6C60686471F5B699CC391F -IV=B70E700F4A7ED08618754960B83BD0F2 -PT=1E3C630BC8C34BF8822686043D14E4D6 -CT=4721B6796F82D47D6EEB9CB11A19605E - -I=83 -KEY=70812B0D14EEB4150A9A690783D55941 -IV=4721B6796F82D47D6EEB9CB11A19605E -PT=CEE1B977E8B75623CC4E2C4F4765FE2A -CT=3382E1B076680BBBE7C451582016DD11 - -I=84 -KEY=4303CABD6286BFAEED5E385FA3C38450 -IV=3382E1B076680BBBE7C451582016DD11 -PT=02365457AB60C892A0C34A7067AB7608 -CT=AB581732E06B90AA0C835C1C7B6D18B5 - -I=85 -KEY=E85BDD8F82ED2F04E1DD6443D8AE9CE5 -IV=AB581732E06B90AA0C835C1C7B6D18B5 -PT=222B7ED84C648C12FFDD6E8E13EEC651 -CT=3E2E592CEEAD3B5E16860E80E406E882 - -I=86 -KEY=D67584A36C40145AF75B6AC33CA87467 -IV=3E2E592CEEAD3B5E16860E80E406E882 -PT=7D24BD646EEBA44ED27B11DA42D72FF8 -CT=9163F6DBE0D8BB79A154D92E37A07E1C - -I=87 -KEY=471672788C98AF23560FB3ED0B080A7B -IV=9163F6DBE0D8BB79A154D92E37A07E1C -PT=42B571FFB3275F5A8E26616A3F0E3403 -CT=E1340E61513FE8146F29E111392E2C3A - -I=88 -KEY=A6227C19DDA74737392652FC32262641 -IV=E1340E61513FE8146F29E111392E2C3A -PT=6EFD16D48E03B6E1CD74777ABC891DA8 -CT=3D703B4FD8A8A7F015D0FD47DE0C5A28 - -I=89 -KEY=9B524756050FE0C72CF6AFBBEC2A7C69 -IV=3D703B4FD8A8A7F015D0FD47DE0C5A28 -PT=7956129687AC95397E14821A17F267DE -CT=C5C6D2BAABDBE0B82CDFFFE7A92C8344 - -I=90 -KEY=5E9495ECAED4007F0029505C4506FF2D -IV=C5C6D2BAABDBE0B82CDFFFE7A92C8344 -PT=AC661770332FE0A45B80791C3A5D1241 -CT=6F7BDE1BD17C5B10064B52EB54EE90B0 - -I=91 -KEY=31EF4BF77FA85B6F066202B711E86F9D -IV=6F7BDE1BD17C5B10064B52EB54EE90B0 -PT=1DE0702C81667A979E5E3542DA95C5AD -CT=DC7E35D5B02AFF4B92C190265E01C0F8 - -I=92 -KEY=ED917E22CF82A42494A392914FE9AF65 -IV=DC7E35D5B02AFF4B92C190265E01C0F8 -PT=A491CB4321C757FD353B560C0B3EA4D0 -CT=D753F5A6C5D7E17F4024FD8675B23E7F - -I=93 -KEY=3AC28B840A55455BD4876F173A5B911A -IV=D753F5A6C5D7E17F4024FD8675B23E7F -PT=418FA3B3E9B4E463D04AC3A3361DCA57 -CT=B635529E8080B33E9AD6D79B8203112D - -I=94 -KEY=8CF7D91A8AD5F6654E51B88CB8588037 -IV=B635529E8080B33E9AD6D79B8203112D -PT=C87E4ED505989807D1DBDA4769804EA3 -CT=43E763CD1B9EE4BC474B79C1E0DA2564 - -I=95 -KEY=CF10BAD7914B12D9091AC14D5882A553 -IV=43E763CD1B9EE4BC474B79C1E0DA2564 -PT=042F084454D0EE01AB00D3921E1BCA06 -CT=C799956FF8A7A05B71123EBC4AA09C0C - -I=96 -KEY=08892FB869ECB2827808FFF11222395F -IV=C799956FF8A7A05B71123EBC4AA09C0C -PT=9A8E40400C51A438DCE498AD3455DE51 -CT=76679B0E26B1B6CA2A8D90944777C57F - -I=97 -KEY=7EEEB4B64F5D044852856F655555FC20 -IV=76679B0E26B1B6CA2A8D90944777C57F -PT=227E122D3AF18A3CAA973B33B3356CE7 -CT=B2F52396F02D2DFFE36C5F9238AC1EBE - -I=98 -KEY=CC1B9720BF7029B7B1E930F76DF9E29E -IV=B2F52396F02D2DFFE36C5F9238AC1EBE -PT=0D9CDD97E2FE0E78CF16B1596DC20ABA -CT=7C8EDD3A079835954238E0FE4872AAE1 - -I=99 -KEY=B0954A1AB8E81C22F3D1D009258B487F -IV=7C8EDD3A079835954238E0FE4872AAE1 -PT=925A7ECD233B3B3CCDE2221A03C5F720 -CT=D7C9FD3EF010C8577087591149D5640F - -I=100 -KEY=675CB72448F8D475835689186C5E2C70 -IV=D7C9FD3EF010C8577087591149D5640F -PT=59FEFBE5179F0E7E48F3D97CDA314FF5 -CT=2608CCE6BA917551DEF84FA7BCA9B23C - -I=101 -KEY=41547BC2F269A1245DAEC6BFD0F79E4C -IV=2608CCE6BA917551DEF84FA7BCA9B23C -PT=7F24A1BA8762294194F76322A6B28A16 -CT=EFF1513B52D5D74D2202898AC99552C4 - -I=102 -KEY=AEA52AF9A0BC76697FAC4F351962CC88 -IV=EFF1513B52D5D74D2202898AC99552C4 -PT=79B43F27F3E144C4EFBF383698A1EC90 -CT=B4B3B020D44D059666E86D22072916B5 - -I=103 -KEY=1A169AD974F173FF194422171E4BDA3D -IV=B4B3B020D44D059666E86D22072916B5 -PT=8BF20B60B4774354857BA2979CD396F9 -CT=6F1A3D43CC2171A808AE8D38396DE1D1 - -I=104 -KEY=750CA79AB8D0025711EAAF2F27263BEC -IV=6F1A3D43CC2171A808AE8D38396DE1D1 -PT=74955DDACFB8A5467D069F1EF341248B -CT=47C23A68DA351C22EBF86FDBD8F723B4 - -I=105 -KEY=32CE9DF262E51E75FA12C0F4FFD11858 -IV=47C23A68DA351C22EBF86FDBD8F723B4 -PT=25D7A186ED990020E10A23C5CFB1CEF9 -CT=D5F2E2C2CED730479D87E0AF0FEF8A73 - -I=106 -KEY=E73C7F30AC322E326795205BF03E922B -IV=D5F2E2C2CED730479D87E0AF0FEF8A73 -PT=13480F2EDCCB62B8F9A7DF98238571FC -CT=F29A46A7F1B1D1D4F5FE30E569D7A801 - -I=107 -KEY=15A639975D83FFE6926B10BE99E93A2A -IV=F29A46A7F1B1D1D4F5FE30E569D7A801 -PT=75E138123B5A98596303ACF9DAEEA714 -CT=9F6E9A13913DF78AC67BD20303AF49B5 - -I=108 -KEY=8AC8A384CCBE086C5410C2BD9A46739F -IV=9F6E9A13913DF78AC67BD20303AF49B5 -PT=DBD0AE00FD06761626366EB251412A32 -CT=46AC9F42239B22A163CE0FDEAA103D44 - -I=109 -KEY=CC643CC6EF252ACD37DECD6330564EDB -IV=46AC9F42239B22A163CE0FDEAA103D44 -PT=B8768A8AF461C9547D1F982FE90E96B6 -CT=95D7C8F969B0EEB03FEC257043597315 - -I=110 -KEY=59B3F43F8695C47D0832E813730F3DCE -IV=95D7C8F969B0EEB03FEC257043597315 -PT=3D20CC8AD484048251C7A81C7E3CA59C -CT=6B74AF42435BC640A826EC443207574E - -I=111 -KEY=32C75B7DC5CE023DA014045741086A80 -IV=6B74AF42435BC640A826EC443207574E -PT=BF719F78B23BAFD4A50634BCD9361095 -CT=31E3919F36D79FBF61884227110C10FF - -I=112 -KEY=0324CAE2F3199D82C19C467050047A7F -IV=31E3919F36D79FBF61884227110C10FF -PT=E1D32740BB8B6D67AD3038887899F090 -CT=A1CD90683CE041D6CA20780176FDD5F4 - -I=113 -KEY=A2E95A8ACFF9DC540BBC3E7126F9AF8B -IV=A1CD90683CE041D6CA20780176FDD5F4 -PT=3069EA97F092ACDCF41649377B8FCBC8 -CT=7220F866A10DC711DC1D277B4C8F204D - -I=114 -KEY=D0C9A2EC6EF41B45D7A1190A6A768FC6 -IV=7220F866A10DC711DC1D277B4C8F204D -PT=B0563A5E0EE1E2B96F3F7D04EE39EA7C -CT=CF81CA348B98C532B172F032AE0A6FED - -I=115 -KEY=1F4868D8E56CDE7766D3E938C47CE02B -IV=CF81CA348B98C532B172F032AE0A6FED -PT=B1B78BD75C30DD4E1E198ACB98B498A6 -CT=99C990D64D27D47ED0C1E7F186AC6674 - -I=116 -KEY=8681F80EA84B0A09B6120EC942D0865F -IV=99C990D64D27D47ED0C1E7F186AC6674 -PT=D413E3CC66E9938E4E0CFC1975E38C8C -CT=30C7DAD86FEF77C43A44A3EF8B116354 - -I=117 -KEY=B64622D6C7A47DCD8C56AD26C9C1E50B -IV=30C7DAD86FEF77C43A44A3EF8B116354 -PT=CD85D9334481AE85B8816233CA4AF7DB -CT=9E717B45239DD908138837154B803654 - -I=118 -KEY=28375993E439A4C59FDE9A338241D35F -IV=9E717B45239DD908138837154B803654 -PT=925BA3760D655D5B788802DDE25732BB -CT=4A6E32C01709EBCCC9BCA43FD5DFDFB3 - -I=119 -KEY=62596B53F3304F0956623E0C579E0CEC -IV=4A6E32C01709EBCCC9BCA43FD5DFDFB3 -PT=0AA6264BFCC7BD07FA8F94E1EF739633 -CT=7263392DC9DA868BC0317A6D4AD52553 - -I=120 -KEY=103A527E3AEAC982965344611D4B29BF -IV=7263392DC9DA868BC0317A6D4AD52553 -PT=FB385BD8ECE7C4DFE2351D851141888D -CT=AA49B1DDA3AF4D05D861667E88AD61AB - -I=121 -KEY=BA73E3A3994584874E32221F95E64814 -IV=AA49B1DDA3AF4D05D861667E88AD61AB -PT=510E13E20BB06EAD335F10F2C69831D3 -CT=3AC256A92F69AF35DB05DDCA61CF1EE4 - -I=122 -KEY=80B1B50AB62C2BB29537FFD5F42956F0 -IV=3AC256A92F69AF35DB05DDCA61CF1EE4 -PT=0A07CAA0EC6CB726F1A38847253BECB6 -CT=037497736381429A5E5A139C44A6C64A - -I=123 -KEY=83C52279D5AD6928CB6DEC49B08F90BA -IV=037497736381429A5E5A139C44A6C64A -PT=864FEF67C8902757E2CFB28DA2EF3C8D -CT=5393D7F9F37A5B9F1F82C1BE20435149 - -I=124 -KEY=D056F58026D732B7D4EF2DF790CCC1F3 -IV=5393D7F9F37A5B9F1F82C1BE20435149 -PT=ED2D2A671677067B30540D4C9D86905F -CT=2969AC5FB94EC76209C6DF58F6B8AA01 - -I=125 -KEY=F93F59DF9F99F5D5DD29F2AF66746BF2 -IV=2969AC5FB94EC76209C6DF58F6B8AA01 -PT=67ED14454DAD764C1772BCB1E0527954 -CT=150F94E1940F9D2ACC735F79B0912A06 - -I=126 -KEY=EC30CD3E0B9668FF115AADD6D6E541F4 -IV=150F94E1940F9D2ACC735F79B0912A06 -PT=517A4852F68370EDD879E32F52FD4D2B -CT=6EFD8E4E4C096A2033B3DA8A1F0066AF - -I=127 -KEY=82CD4370479F02DF22E9775CC9E5275B -IV=6EFD8E4E4C096A2033B3DA8A1F0066AF -PT=DBF4CAD912437115658E5BA5E1724739 -CT=899D9126CD85D2D4053AD9EE7156041B - -I=128 -KEY=0B50D2568A1AD00B27D3AEB2B8B32340 -IV=899D9126CD85D2D4053AD9EE7156041B -PT=69B302F96AFCF802AC639EBABC52ECFB -CT=819E4B8319807088FF306E125E52DAD3 - -I=129 -KEY=8ACE99D5939AA083D8E3C0A0E6E1F993 -IV=819E4B8319807088FF306E125E52DAD3 -PT=F5CA57371833F0AF98F0EC02DFE518ED -CT=4DFA3739235D14660DF7D5FDE36F6567 - -I=130 -KEY=C734AEECB0C7B4E5D514155D058E9CF4 -IV=4DFA3739235D14660DF7D5FDE36F6567 -PT=29BBD9264B9792BED8A8EFA43F943A7D -CT=4EA36ECCBCCD9FAFD8FB588BD53826A7 - -I=131 -KEY=8997C0200C0A2B4A0DEF4DD6D0B6BA53 -IV=4EA36ECCBCCD9FAFD8FB588BD53826A7 -PT=149120CFC3D7C671F287AA77A4A3EF97 -CT=0282357C78C8944A5520AF80506DE30D - -I=132 -KEY=8B15F55C74C2BF0058CFE25680DB595E -IV=0282357C78C8944A5520AF80506DE30D -PT=02C2E0CCB12F5216213D493325F38FC3 -CT=C827C36F654137A2BB127D1782285B10 - -I=133 -KEY=43323633118388A2E3DD9F4102F3024E -IV=C827C36F654137A2BB127D1782285B10 -PT=FA1693AD90401791FF9093A562EC66EB -CT=3723A94BC91032BF8DB599ABEFB784D1 - -I=134 -KEY=74119F78D893BA1D6E6806EAED44869F -IV=3723A94BC91032BF8DB599ABEFB784D1 -PT=5410CBE33ABB58AB0B0E86F5817E6F2C -CT=26A520B5B475632EE8806648BFC028AF - -I=135 -KEY=52B4BFCD6CE6D93386E860A25284AE30 -IV=26A520B5B475632EE8806648BFC028AF -PT=B01A11D200C24F4333029DE3BFF49601 -CT=36D5E00E0A53D7CE1498215AFA686905 - -I=136 -KEY=64615FC366B50EFD927041F8A8ECC735 -IV=36D5E00E0A53D7CE1498215AFA686905 -PT=252E4460E9A391D54CE9E516663E59AE -CT=829F0B7B17ED5F2FB7A014A6CD9D8052 - -I=137 -KEY=E6FE54B8715851D225D0555E65714767 -IV=829F0B7B17ED5F2FB7A014A6CD9D8052 -PT=BCC51A6493F6847BEA8219329F67308D -CT=BAB1D358D08DA13BEC485051F2EBFE2E - -I=138 -KEY=5C4F87E0A1D5F0E9C998050F979AB949 -IV=BAB1D358D08DA13BEC485051F2EBFE2E -PT=D89236011B3C2338E95322D4716AEE59 -CT=29BA99F8CF8B48134B1330E75BD7254E - -I=139 -KEY=75F51E186E5EB8FA828B35E8CC4D9C07 -IV=29BA99F8CF8B48134B1330E75BD7254E -PT=21D0EB5857C93A0D4D75253E1020C00E -CT=9D557274FE14AA69673441117A2D7DA2 - -I=140 -KEY=E8A06C6C904A1293E5BF74F9B660E1A5 -IV=9D557274FE14AA69673441117A2D7DA2 -PT=3C3BB454584C4C7570089B6E631BA035 -CT=543EF50A024E77ACE685BD0BBB47232D - -I=141 -KEY=BC9E99669204653F033AC9F20D27C288 -IV=543EF50A024E77ACE685BD0BBB47232D -PT=8ED890BC903AEAC7C3C685980EDB3370 -CT=884BD68868D89DE9DEDB2D95A8B992FB - -I=142 -KEY=34D54FEEFADCF8D6DDE1E467A59E5073 -IV=884BD68868D89DE9DEDB2D95A8B992FB -PT=684DEBD6DEDE24BD0F4F8AFA47F08AEF -CT=DB00984CAEB14CF5A1FDE8E8E9C03830 - -I=143 -KEY=EFD5D7A2546DB4237C1C0C8F4C5E6843 -IV=DB00984CAEB14CF5A1FDE8E8E9C03830 -PT=C42B245443F2695F306455199C7C76FE -CT=0CA808425E8EBDDD5519130F4900329F - -I=144 -KEY=E37DDFE00AE309FE29051F80055E5ADC -IV=0CA808425E8EBDDD5519130F4900329F -PT=1655F89334CCB6ED8E140088997BD2D1 -CT=0DAE2F85CD81874DCD7368277D0C386D - -I=145 -KEY=EED3F065C7628EB3E47677A7785262B1 -IV=0DAE2F85CD81874DCD7368277D0C386D -PT=2B7A2DF6E0CAC83837AFDC8B2134E6A6 -CT=E3BF66A6784432E6CE61B769C3CFDB35 - -I=146 -KEY=0D6C96C3BF26BC552A17C0CEBB9DB984 -IV=E3BF66A6784432E6CE61B769C3CFDB35 -PT=8FED19E77B9690EC8F70272364B4EB74 -CT=473925552401311F24EE4F40B5A3ECB5 - -I=147 -KEY=4A55B3969B278D4A0EF98F8E0E3E5531 -IV=473925552401311F24EE4F40B5A3ECB5 -PT=032D9AF654037E2586B12CF031E4AB4C -CT=E9E1E4ACF3F4E25CB8093F6B27665DFF - -I=148 -KEY=A3B4573A68D36F16B6F0B0E5295808CE -IV=E9E1E4ACF3F4E25CB8093F6B27665DFF -PT=E6EF26B3721F6C772D231584DD480441 -CT=2D9F85D63FED609876DF97F0E6B85564 - -I=149 -KEY=8E2BD2EC573E0F8EC02F2715CFE05DAA -IV=2D9F85D63FED609876DF97F0E6B85564 -PT=E641EBC4A734C71669D948F1BEEE675A -CT=3A61F4BED09FD7A7AED71E9FD53D2EE3 - -I=150 -KEY=B44A265287A1D8296EF8398A1ADD7349 -IV=3A61F4BED09FD7A7AED71E9FD53D2EE3 -PT=36DB43747CD9215857886A0DE2008509 -CT=6BE2AD95F4A642F3FD73D9543B53D479 - -I=151 -KEY=DFA88BC773079ADA938BE0DE218EA730 -IV=6BE2AD95F4A642F3FD73D9543B53D479 -PT=58A73313B31B8C1EB3C144C9363EE94B -CT=BF198D336DF857BFBA069634C25CF45B - -I=152 -KEY=60B106F41EFFCD65298D76EAE3D2536B -IV=BF198D336DF857BFBA069634C25CF45B -PT=E0974E1BBEFE21422ECED27858535F87 -CT=7945132F6F7EED6B61E1CF9C47E2AB2A - -I=153 -KEY=19F415DB7181200E486CB976A430F841 -IV=7945132F6F7EED6B61E1CF9C47E2AB2A -PT=6F36B63A1A8B426282CA4E61B7E37B3A -CT=AF441F330C8C199E9776D92A92B02216 - -I=154 -KEY=B6B00AE87D0D3990DF1A605C3680DA57 -IV=AF441F330C8C199E9776D92A92B02216 -PT=99AD2B814D3A4C0E1C27D4251C55C74A -CT=F34463A538E46E87B0F24EAA36B674A7 - -I=155 -KEY=45F4694D45E957176FE82EF60036AEF0 -IV=F34463A538E46E87B0F24EAA36B674A7 -PT=6D05C19E42D0561C198A10FA55F4C870 -CT=5D54D3C72D55015D0149FA1591208824 - -I=156 -KEY=18A0BA8A68BC564A6EA1D4E3911626D4 -IV=5D54D3C72D55015D0149FA1591208824 -PT=7AA7A04DE8CD21F59BA5369CA175CEC3 -CT=D2EBE35C33210B39CD4F443BB577DBD8 - -I=157 -KEY=CA4B59D65B9D5D73A3EE90D82461FD0C -IV=D2EBE35C33210B39CD4F443BB577DBD8 -PT=2DA2A48FE13FA4DD5271A02FB7F98AEC -CT=2F4AD89C0D915DF978160E9E882AD28E - -I=158 -KEY=E501814A560C008ADBF89E46AC4B2F82 -IV=2F4AD89C0D915DF978160E9E882AD28E -PT=82EB831B9FF9DA7D06553A456133766B -CT=09A04C7CBED3D60ADB6CFDD012DEED17 - -I=159 -KEY=ECA1CD36E8DFD68000946396BE95C295 -IV=09A04C7CBED3D60ADB6CFDD012DEED17 -PT=8D4FD1CE8CB9745E9E65182D94F8307A -CT=193C6FAB40C87C7029983EDD52628400 - -I=160 -KEY=F59DA29DA817AAF0290C5D4BECF74695 -IV=193C6FAB40C87C7029983EDD52628400 -PT=F06A061082E499E65A5DED0D22323F57 -CT=7166BD655D8128E7B09D37B38478B480 - -I=161 -KEY=84FB1FF8F596821799916AF8688FF215 -IV=7166BD655D8128E7B09D37B38478B480 -PT=DCEC808551EA98534E1A9EDF457125DA -CT=5DFAAFB695D34A7AF2D39CD2D01FD4BD - -I=162 -KEY=D901B04E6045C86D6B42F62AB89026A8 -IV=5DFAAFB695D34A7AF2D39CD2D01FD4BD -PT=FAE59C96604D062F49C8C93FA7E4D5FC -CT=85F63AFC88A1CED4E73B849C295692F2 - -I=163 -KEY=5CF78AB2E8E406B98C7972B691C6B45A -IV=85F63AFC88A1CED4E73B849C295692F2 -PT=7FE1EA6A7A525A7E0222D6269F7D6A40 -CT=DC60A8554BF9E783D0E92283EC0D00AF - -I=164 -KEY=809722E7A31DE13A5C9050357DCBB4F5 -IV=DC60A8554BF9E783D0E92283EC0D00AF -PT=89C93828CE30D4CD7025D9F2CF864371 -CT=EF10720E8F10FBABC96BB5F4E5287D12 - -I=165 -KEY=6F8750E92C0D1A9195FBE5C198E3C9E7 -IV=EF10720E8F10FBABC96BB5F4E5287D12 -PT=A8DEA35D4A712ACE8F38A2CA2CB6BCFB -CT=EED271733DC7B81AD09C86C8F8D69255 - -I=166 -KEY=8155219A11CAA28B4567630960355BB2 -IV=EED271733DC7B81AD09C86C8F8D69255 -PT=6720AD239EFECF5785B238D4DA39DD6A -CT=DC47B1FAC154CB0C39ADF4C92F8C2902 - -I=167 -KEY=5D129060D09E69877CCA97C04FB972B0 -IV=DC47B1FAC154CB0C39ADF4C92F8C2902 -PT=D41DEA3BC44CC552B5ACCFEEFAF225F5 -CT=AD4828834513730BF275C854D35BF09E - -I=168 -KEY=F05AB8E3958D1A8C8EBF5F949CE2822E -IV=AD4828834513730BF275C854D35BF09E -PT=5059DA9258A7DE12865E1E2173399BC9 -CT=82CA6B085A452CFDFFBDE5C7B738CDAB - -I=169 -KEY=7290D3EBCFC836717102BA532BDA4F85 -IV=82CA6B085A452CFDFFBDE5C7B738CDAB -PT=9625B8A444C3E4D3554A8C6E33E1B810 -CT=4F44C38189E1011970690D0ED4BCB9C7 - -I=170 -KEY=3DD4106A46293768016BB75DFF66F642 -IV=4F44C38189E1011970690D0ED4BCB9C7 -PT=373FBCA7529A9FA9AF77295FC55B0BEE -CT=27BE0578B0F898C04133AA4D3C1A5A7C - -I=171 -KEY=1A6A1512F6D1AFA840581D10C37CAC3E -IV=27BE0578B0F898C04133AA4D3C1A5A7C -PT=37FC0A286DFFD5A76643D1D45C858F64 -CT=B9C70B34F78F3DA7796C32D0918474A5 - -I=172 -KEY=A3AD1E26015E920F39342FC052F8D89B -IV=B9C70B34F78F3DA7796C32D0918474A5 -PT=E1EAC69AA2A8F05B8747E2624D00F4BB -CT=846985C471F10676E63BCD09C32506F3 - -I=173 -KEY=27C49BE270AF9479DF0FE2C991DDDE68 -IV=846985C471F10676E63BCD09C32506F3 -PT=6EB0046D9C6854C63447296F4F6D3D21 -CT=F754559746C52113C29AF782E96B6105 - -I=174 -KEY=D090CE75366AB56A1D95154B78B6BF6D -IV=F754559746C52113C29AF782E96B6105 -PT=F65269422328F40D8A53F4F14DB88583 -CT=AE6B4EABF8DC479A1E3F8C3F30A4A797 - -I=175 -KEY=7EFB80DECEB6F2F003AA9974481218FA -IV=AE6B4EABF8DC479A1E3F8C3F30A4A797 -PT=765B38DC041DEC130A3A294D9F89A16D -CT=87645926B9D85AC4AB023D2104CC3FA2 - -I=176 -KEY=F99FD9F8776EA834A8A8A4554CDE2758 -IV=87645926B9D85AC4AB023D2104CC3FA2 -PT=8070950120E0FBE07C70B171364AD173 -CT=0125D51139CE00DB848B8A9AD3FEB90B - -I=177 -KEY=F8BA0CE94EA0A8EF2C232ECF9F209E53 -IV=0125D51139CE00DB848B8A9AD3FEB90B -PT=1EF45DD2CD61667469569CFAD445341C -CT=E1651756A2C0D132C671D74748244E49 - -I=178 -KEY=19DF1BBFEC6079DDEA52F988D704D01A -IV=E1651756A2C0D132C671D74748244E49 -PT=26BEF7E8A3D0AC50DC64B8215CCBC44F -CT=94049FBD554A6CFFE7927D6EC07D6242 - -I=179 -KEY=8DDB8402B92A15220DC084E61779B258 -IV=94049FBD554A6CFFE7927D6EC07D6242 -PT=803F34FA967583623D0CA4D76FC56787 -CT=974BBE04952D8F0DD70F4353FEB092EB - -I=180 -KEY=1A903A062C079A2FDACFC7B5E9C920B3 -IV=974BBE04952D8F0DD70F4353FEB092EB -PT=023E5D307CE85244144D59A53DB504E7 -CT=2615B9F94F9024EA616648FF15E3B65F - -I=181 -KEY=3C8583FF6397BEC5BBA98F4AFC2A96EC -IV=2615B9F94F9024EA616648FF15E3B65F -PT=1A84130B09CE3E7AB1F400B9FE295BEB -CT=39A2A3B6EFB5EBE805CBAD5817EAEEDA - -I=182 -KEY=052720498C22552DBE622212EBC07836 -IV=39A2A3B6EFB5EBE805CBAD5817EAEEDA -PT=B83609055302D99DE46B7153AE3DFCE2 -CT=93F72B839E2AD731B5E894B56ADADCF4 - -I=183 -KEY=96D00BCA1208821C0B8AB6A7811AA4C2 -IV=93F72B839E2AD731B5E894B56ADADCF4 -PT=85E69EBDE13C05526EA8AE1D24B487F3 -CT=D0ADA333801DFDBFC2420B73CD2B92A5 - -I=184 -KEY=467DA8F992157FA3C9C8BDD44C313667 -IV=D0ADA333801DFDBFC2420B73CD2B92A5 -PT=F24782E953B9B1BBF3B925659C99415B -CT=F59A3D0B65E8F16DC73CCD6C27E8C705 - -I=185 -KEY=B3E795F2F7FD8ECE0EF470B86BD9F162 -IV=F59A3D0B65E8F16DC73CCD6C27E8C705 -PT=73BE517552E054D78583BEA03B84A245 -CT=7904DBE3A103D936EB4B960C180B0651 - -I=186 -KEY=CAE34E1156FE57F8E5BFE6B473D2F733 -IV=7904DBE3A103D936EB4B960C180B0651 -PT=91998E9582D8357DD5D8B95A9D85912F -CT=C2DE0D0145A45DEABD6DE1FD62161EB1 - -I=187 -KEY=083D4310135A0A1258D2074911C4E982 -IV=C2DE0D0145A45DEABD6DE1FD62161EB1 -PT=2A5D4EC49712B9CF1E2D9C6C5EFACC2A -CT=974264BDC574C738243DDC008EC4C15A - -I=188 -KEY=9F7F27ADD62ECD2A7CEFDB499F0028D8 -IV=974264BDC574C738243DDC008EC4C15A -PT=F74520C3745B9B9F9D19642AA57451FB -CT=F4EE51C2ECC32F4806F9C8588880525B - -I=189 -KEY=6B91766F3AEDE2627A16131117807A83 -IV=F4EE51C2ECC32F4806F9C8588880525B -PT=4A7D6FC6712F451F58DF0AC2D517189E -CT=F4978F5F53AA4C336BEE0C62F432B44F - -I=190 -KEY=9F06F9306947AE5111F81F73E3B2CECC -IV=F4978F5F53AA4C336BEE0C62F432B44F -PT=00DAD17491C973991FEC296972B691BC -CT=09DAA53C2E394BF83113BE48E5D0CCA2 - -I=191 -KEY=96DC5C0C477EE5A920EBA13B0662026E -IV=09DAA53C2E394BF83113BE48E5D0CCA2 -PT=C00943704C1336F01A1D23FD98BE7E8B -CT=D0DE529664BF241DBED3168DA5BC1B28 - -I=192 -KEY=46020E9A23C1C1B49E38B7B6A3DE1946 -IV=D0DE529664BF241DBED3168DA5BC1B28 -PT=A07FAD9770CC32C5680F33A2D67044A4 -CT=F6A44922B3744BE96C46742A79A49CBB - -I=193 -KEY=B0A647B890B58A5DF27EC39CDA7A85FD -IV=F6A44922B3744BE96C46742A79A49CBB -PT=D5450C670BE84169AD1E62C5ECB8365F -CT=47D229908D4C1EA34E429C34B7D635F5 - -I=194 -KEY=F7746E281DF994FEBC3C5FA86DACB008 -IV=47D229908D4C1EA34E429C34B7D635F5 -PT=9E90D30BE92104667A16522237D645A6 -CT=6463AC2096842A0958ACF45370C0626F - -I=195 -KEY=9317C2088B7DBEF7E490ABFB1D6CD267 -IV=6463AC2096842A0958ACF45370C0626F -PT=74382A7BF713DE8E8D17AE389E03C3AC -CT=ECDCEF7613C362D288AC23D38722DC4C - -I=196 -KEY=7FCB2D7E98BEDC256C3C88289A4E0E2B -IV=ECDCEF7613C362D288AC23D38722DC4C -PT=DB2EC6F41A72F426D9F5DBC65CEC1C5C -CT=DFE2DA423ACE2DFB053265E9E9B214E2 - -I=197 -KEY=A029F73CA270F1DE690EEDC173FC1AC9 -IV=DFE2DA423ACE2DFB053265E9E9B214E2 -PT=35998CB9958DC9DE0550FC3EA722D571 -CT=5EBCA79BF99165D9FFE355D9B24ECB5D - -I=198 -KEY=FE9550A75BE1940796EDB818C1B2D194 -IV=5EBCA79BF99165D9FFE355D9B24ECB5D -PT=9BDA7BC96736FE2140911C98E8E02E1C -CT=782D3EFD5F599E8D3C85D06128677EC2 - -I=199 -KEY=86B86E5A04B80A8AAA686879E9D5AF56 -IV=782D3EFD5F599E8D3C85D06128677EC2 -PT=8014C1F398E4DCC7F4E5E09E5FAFB080 -CT=E01AE2D961F31BBAE3DA7429627572AB - -I=200 -KEY=66A28C83654B113049B21C508BA0DDFD -IV=E01AE2D961F31BBAE3DA7429627572AB -PT=97D66D66D1731EEFF14519620616A10B -CT=BC41ED9D568D6ED36212C92DEEB40A0E - -I=201 -KEY=DAE3611E33C67FE32BA0D57D6514D7F3 -IV=BC41ED9D568D6ED36212C92DEEB40A0E -PT=F7646B60C237ED24F467141980EB4F00 -CT=CB8DF2D164E5B4AB3193D02E71959F63 - -I=202 -KEY=116E93CF5723CB481A33055314814890 -IV=CB8DF2D164E5B4AB3193D02E71959F63 -PT=4A3A241B26AC7A1C88AA2FB750DF6E5A -CT=E396FB47A686ABAA350B84C250E5EAE9 - -I=203 -KEY=F2F86888F1A560E22F3881914464A279 -IV=E396FB47A686ABAA350B84C250E5EAE9 -PT=A71348309D176A072167C4B1B8A295C0 -CT=29AF21F96564EB591E9A60B1BE88DEC7 - -I=204 -KEY=DB57497194C18BBB31A2E120FAEC7CBE -IV=29AF21F96564EB591E9A60B1BE88DEC7 -PT=BC528364EF78D6432177FE0CF1CDECD1 -CT=34CD9D96D4455AE0C15B6B970F1EC905 - -I=205 -KEY=EF9AD4E74084D15BF0F98AB7F5F2B5BB -IV=34CD9D96D4455AE0C15B6B970F1EC905 -PT=18972F6992299533EE23AA5824C25892 -CT=2E05E3E2079A055310FD9318590A6F41 - -I=206 -KEY=C19F3705471ED408E00419AFACF8DAFA -IV=2E05E3E2079A055310FD9318590A6F41 -PT=5441FF0D0A4062D5D0DF29BF2FDA85B4 -CT=47D4EAECE59C733EEFCB7B9D5BE95A98 - -I=207 -KEY=864BDDE9A282A7360FCF6232F7118062 -IV=47D4EAECE59C733EEFCB7B9D5BE95A98 -PT=ED3E19B5AB5389AA3A58D97F6604F4C0 -CT=00525B7D5BFC0651AEF6770F6281E6DC - -I=208 -KEY=86198694F97EA167A139153D959066BE -IV=00525B7D5BFC0651AEF6770F6281E6DC -PT=8BD4869C88A9BD3DCFE89B98B93F6EB3 -CT=AFB2215E6DC04E9467F44227FD4BDB98 - -I=209 -KEY=29ABA7CA94BEEFF3C6CD571A68DBBD26 -IV=AFB2215E6DC04E9467F44227FD4BDB98 -PT=6E7269FC27BDCC42D64CEF41A612F771 -CT=7B769B90279C95E31D8B3D792FA27FA8 - -I=210 -KEY=52DD3C5AB3227A10DB466A634779C28E -IV=7B769B90279C95E31D8B3D792FA27FA8 -PT=E00316E79DC10D179002B1BACC146027 -CT=E3870CDE5CF99B7C4C489AF81153002F - -I=211 -KEY=B15A3084EFDBE16C970EF09B562AC2A1 -IV=E3870CDE5CF99B7C4C489AF81153002F -PT=FB2FC78A79C33225E6EAAA06B76FA793 -CT=4DFC91F8971635348EF35141E8C291F7 - -I=212 -KEY=FCA6A17C78CDD45819FDA1DABEE85356 -IV=4DFC91F8971635348EF35141E8C291F7 -PT=69C8EE14F21832BB077F1A5414851FFE -CT=DA51BE36F96AA8C80DED9DB2A701D72F - -I=213 -KEY=26F71F4A81A77C9014103C6819E98479 -IV=DA51BE36F96AA8C80DED9DB2A701D72F -PT=766EC1664D2194E0F89B69861A4A8501 -CT=2ACA6359CD935CA2294F9FB5A50F4993 - -I=214 -KEY=0C3D7C134C3420323D5FA3DDBCE6CDEA -IV=2ACA6359CD935CA2294F9FB5A50F4993 -PT=1D95E551169BD538836CC349BC6B1772 -CT=315518F0AC6C1DC9939CB802336DA968 - -I=215 -KEY=3D6864E3E0583DFBAEC31BDF8F8B6482 -IV=315518F0AC6C1DC9939CB802336DA968 -PT=4F6BFE727AECDAB5A32DF8CFFC43D6A9 -CT=34C3ECD89376B4D771CA0669C2C3E26C - -I=216 -KEY=09AB883B732E892CDF091DB64D4886EE -IV=34C3ECD89376B4D771CA0669C2C3E26C -PT=AA8B1DA2E015D482EE08FA2B4A2B77B6 -CT=A3F4DD9DDC375C90579C274527612C6E - -I=217 -KEY=AA5F55A6AF19D5BC88953AF36A29AA80 -IV=A3F4DD9DDC375C90579C274527612C6E -PT=2EE6982D9E0AA5FCB61F3E66E52A0D6D -CT=C45C9E4DE76782E2599BD73B132BFE90 - -I=218 -KEY=6E03CBEB487E575ED10EEDC879025410 -IV=C45C9E4DE76782E2599BD73B132BFE90 -PT=6E58E5B1EDF1BFABAD643D8223F0FA81 -CT=32221DA62DA2B441B5E66A197A5C69F1 - -I=219 -KEY=5C21D64D65DCE31F64E887D1035E3DE1 -IV=32221DA62DA2B441B5E66A197A5C69F1 -PT=D5A81DF4B6BE17A531478961D78CAB46 -CT=E1FEB5C31B1671F15DC1F7713E5DD7FE - -I=220 -KEY=BDDF638E7ECA92EE392970A03D03EA1F -IV=E1FEB5C31B1671F15DC1F7713E5DD7FE -PT=D360948141A1D3ECFF5E8D6BDC022685 -CT=FF07F02135FB458D63EE68C4B1463A99 - -I=221 -KEY=42D893AF4B31D7635AC718648C45D086 -IV=FF07F02135FB458D63EE68C4B1463A99 -PT=E3C1E44333C9307E90EE2FBA6A7708A5 -CT=1AE4E8466B84B59EECF5E6BEB6140DF2 - -I=222 -KEY=583C7BE920B562FDB632FEDA3A51DD74 -IV=1AE4E8466B84B59EECF5E6BEB6140DF2 -PT=653AA343CE35F72E2ADB5FFCD2DFCBA8 -CT=3CB44BC123DDCD55B812D265CC5E974E - -I=223 -KEY=648830280368AFA80E202CBFF60F4A3A -IV=3CB44BC123DDCD55B812D265CC5E974E -PT=E96A66BFE5F0E8083A01664A47226672 -CT=BB6C54E118FA895F2AC4CC036166E390 - -I=224 -KEY=DFE464C91B9226F724E4E0BC9769A9AA -IV=BB6C54E118FA895F2AC4CC036166E390 -PT=A5B240D8E5731E1BFA7C4FDFB4EED81F -CT=DA20870677A6214F26FDACBA81B41882 - -I=225 -KEY=05C4E3CF6C3407B802194C0616DDB128 -IV=DA20870677A6214F26FDACBA81B41882 -PT=92FF6EAB4A6D1AD3941E6A91D8C9105B -CT=F079AA86FC9FD361DBA0C21CCD4B0F6C - -I=226 -KEY=F5BD494990ABD4D9D9B98E1ADB96BE44 -IV=F079AA86FC9FD361DBA0C21CCD4B0F6C -PT=DFF005175EF746B83CB00AC13337E248 -CT=B6021E0AA1A921C7BCC3FDAB1C3EA44A - -I=227 -KEY=43BF57433102F51E657A73B1C7A81A0E -IV=B6021E0AA1A921C7BCC3FDAB1C3EA44A -PT=DDDC1AA804AD13813C6AEA540557C097 -CT=41F0E4AB03801DCE585727B7C41F48BD - -I=228 -KEY=024FB3E83282E8D03D2D540603B752B3 -IV=41F0E4AB03801DCE585727B7C41F48BD -PT=4C6421E5A487C9C452958CAB38AC7098 -CT=6EFDD855BAF2D13437C01097ABB633DE - -I=229 -KEY=6CB26BBD887039E40AED4491A801616D -IV=6EFDD855BAF2D13437C01097ABB633DE -PT=2A11519D5463F2B96A5E0FCE6E4710D7 -CT=5E8243E5C54A109CCC0BF622A299EF68 - -I=230 -KEY=323028584D3A2978C6E6B2B30A988E05 -IV=5E8243E5C54A109CCC0BF622A299EF68 -PT=252145DACAD23E8B85AB7637B22C42F2 -CT=2C9A476418F01C589ADC0CA10BF4A183 - -I=231 -KEY=1EAA6F3C55CA35205C3ABE12016C2F86 -IV=2C9A476418F01C589ADC0CA10BF4A183 -PT=A22C36DC7D00645FEFE8683EA4231787 -CT=DA3A4AC19EF6A0F950E26B00834AFE41 - -I=232 -KEY=C49025FDCB3C95D90CD8D5128226D1C7 -IV=DA3A4AC19EF6A0F950E26B00834AFE41 -PT=B0DC92D3B4878156B768923286F0433F -CT=10BBC2A8C8F650FD8EED7CC9F5EAD05D - -I=233 -KEY=D42BE75503CAC5248235A9DB77CC019A -IV=10BBC2A8C8F650FD8EED7CC9F5EAD05D -PT=83A9338157091D4AECAF60E887AE09F7 -CT=757993A70F78B25F02FA0355E04DE27B - -I=234 -KEY=A15274F20CB2777B80CFAA8E9781E3E1 -IV=757993A70F78B25F02FA0355E04DE27B -PT=9D818ACA2C753E7314F51699D3062031 -CT=E2E74C76C09516135876D54AFC940D80 - -I=235 -KEY=43B53884CC276168D8B97FC46B15EE61 -IV=E2E74C76C09516135876D54AFC940D80 -PT=BDD36F881F8D1FC56780E291D1359EE1 -CT=22F76A2DB98544549DEA21FFCDC2B943 - -I=236 -KEY=614252A975A2253C45535E3BA6D75722 -IV=22F76A2DB98544549DEA21FFCDC2B943 -PT=4C9C16802A4BB1202D4FAC9E76C57A43 -CT=166B0FF778D72B6102D6ADF990A70A23 - -I=237 -KEY=77295D5E0D750E5D4785F3C236705D01 -IV=166B0FF778D72B6102D6ADF990A70A23 -PT=0045ECDDAA51EE6FDB226E2D9471F46C -CT=D7724DC8A1413BC1B9D6F305794426F0 - -I=238 -KEY=A05B1096AC34359CFE5300C74F347BF1 -IV=D7724DC8A1413BC1B9D6F305794426F0 -PT=25C55C60290DF3D0DC3274CD2AE0ED21 -CT=41F0196DFE0B1F664A107D12A6FF3D79 - -I=239 -KEY=E1AB09FB523F2AFAB4437DD5E9CB4688 -IV=41F0196DFE0B1F664A107D12A6FF3D79 -PT=9A44454F7A335C89BEFF1D94D3FDB320 -CT=3F37D7ADFB9933FFBAC1F7D07F31046E - -I=240 -KEY=DE9CDE56A9A619050E828A0596FA42E6 -IV=3F37D7ADFB9933FFBAC1F7D07F31046E -PT=03D7F09054233696BEF84AB8D5B77091 -CT=02D226A748153C27A723F02461FFF913 - -I=241 -KEY=DC4EF8F1E1B32522A9A17A21F705BBF5 -IV=02D226A748153C27A723F02461FFF913 -PT=D5C82A6F048A2AA0E5CF4F1EDADD68B3 -CT=4BD7486C212E7F78228478BBF0A7AD3D - -I=242 -KEY=9799B09DC09D5A5A8B25029A07A216C8 -IV=4BD7486C212E7F78228478BBF0A7AD3D -PT=936431AD9F800606240C33EAF661D3DA -CT=3EFE00CA0A96AF4425E683512DAC0164 - -I=243 -KEY=A967B057CA0BF51EAEC381CB2A0E17AC -IV=3EFE00CA0A96AF4425E683512DAC0164 -PT=280DC27864BED0D548B5B4F9A7FA38DE -CT=7023640C8D6B02F6C4C7E007C169C592 - -I=244 -KEY=D944D45B4760F7E86A0461CCEB67D23E -IV=7023640C8D6B02F6C4C7E007C169C592 -PT=CD0F58962915E5A514E5D6DA8BB868E8 -CT=D08419A75363E9622FAA09DB589915F1 - -I=245 -KEY=09C0CDFC14031E8A45AE6817B3FEC7CF -IV=D08419A75363E9622FAA09DB589915F1 -PT=09A6099FDDDBBC15EE79224B01C49DF0 -CT=6CDD2B0279D9DB3C71329C1BB2C24C2F - -I=246 -KEY=651DE6FE6DDAC5B6349CF40C013C8BE0 -IV=6CDD2B0279D9DB3C71329C1BB2C24C2F -PT=B24B11FD8A6FC6B2703FFBEBC85B6C44 -CT=CCB0F6F32BDE2339A1842A7EDC8C99C7 - -I=247 -KEY=A9AD100D4604E68F9518DE72DDB01227 -IV=CCB0F6F32BDE2339A1842A7EDC8C99C7 -PT=2E471506C55D1762CDB9EAEF29E23C01 -CT=DAD62227A5F328CC33F054EEB346E3D3 - -I=248 -KEY=737B322AE3F7CE43A6E88A9C6EF6F1F4 -IV=DAD62227A5F328CC33F054EEB346E3D3 -PT=5598344020E32F9B2C509D06F4E7804A -CT=18DE226F7CAA4EF2712A223C4709C9E2 - -I=249 -KEY=6BA510459F5D80B1D7C2A8A029FF3816 -IV=18DE226F7CAA4EF2712A223C4709C9E2 -PT=549A87BE74B62BAC3F0FDC2A878F5669 -CT=DB082C8D70948B6BF08D4848E4DB0231 - -I=250 -KEY=B0AD3CC8EFC90BDA274FE0E8CD243A27 -IV=DB082C8D70948B6BF08D4848E4DB0231 -PT=08946428BF90FBF0951A35D6FB72A48A -CT=29CBD3E3F2074514E63A7B2A651AB031 - -I=251 -KEY=9966EF2B1DCE4ECEC1759BC2A83E8A16 -IV=29CBD3E3F2074514E63A7B2A651AB031 -PT=7EBEC38F7787EE1BDD6A648334FA3076 -CT=0037935821278E879BCBB2FBE4ECC23E - -I=252 -KEY=99517C733CE9C0495ABE29394CD24828 -IV=0037935821278E879BCBB2FBE4ECC23E -PT=01D77828928164A830C249D96AC6F8B4 -CT=47501831F9DF42C234E9FE9169075888 - -I=253 -KEY=DE016442C536828B6E57D7A825D510A0 -IV=47501831F9DF42C234E9FE9169075888 -PT=608349FF8FFC31B072CFA7DF649E15B8 -CT=BC10B1D412BC05404B2E38A1D75DA421 - -I=254 -KEY=6211D596D78A87CB2579EF09F288B481 -IV=BC10B1D412BC05404B2E38A1D75DA421 -PT=B16325BD78FC0451216FF476D4CAE293 -CT=6ABD8010E9CBAE61E05A9E30C622B501 - -I=255 -KEY=08AC55863E4129AAC523713934AA0180 -IV=6ABD8010E9CBAE61E05A9E30C622B501 -PT=E613C244F74C61B078C9E59E06E7AD85 -CT=E896B8BD539C30D9A58E5EF6629B279C - -I=256 -KEY=E03AED3B6DDD197360AD2FCF5631261C -IV=E896B8BD539C30D9A58E5EF6629B279C -PT=6CFF7A909AAB2C0DC61FB8F11B45E661 -CT=30D15AAA05F56FA2D21E9974FB3FF5DA - -I=257 -KEY=D0EBB791682876D1B2B3B6BBAD0ED3C6 -IV=30D15AAA05F56FA2D21E9974FB3FF5DA -PT=6BFAC8E8FB9C3D5AF813B4DF90AD863B -CT=43B99F3DA3C1BCCE9038118E2968EFA1 - -I=258 -KEY=935228ACCBE9CA1F228BA73584663C67 -IV=43B99F3DA3C1BCCE9038118E2968EFA1 -PT=064D09E9F5104602E191DC39F18E6A1A -CT=EBC5796519BE4E05262A10D56FA0F72D - -I=259 -KEY=789751C9D257841A04A1B7E0EBC6CB4A -IV=EBC5796519BE4E05262A10D56FA0F72D -PT=C2B528D69ED3028A359D4472D98807A7 -CT=5F2B51DD025E775A63DFE5B9FBF54986 - -I=260 -KEY=27BC0014D009F340677E5259103382CC -IV=5F2B51DD025E775A63DFE5B9FBF54986 -PT=D5CF62940967AF7225F79E87136751F5 -CT=F56D88E433CEA445C6E4D6298DFB6C27 - -I=261 -KEY=D2D188F0E3C75705A19A84709DC8EEEB -IV=F56D88E433CEA445C6E4D6298DFB6C27 -PT=3BE3171202E762846D2CA00FB2CB141A -CT=4C168A0129F2D48E249777A366D1AEF1 - -I=262 -KEY=9EC702F1CA35838B850DF3D3FB19401A -IV=4C168A0129F2D48E249777A366D1AEF1 -PT=5B82A34141C236FAED7E1A78D3C426C4 -CT=E11FEBEF79E425480442D45A8C105B44 - -I=263 -KEY=7FD8E91EB3D1A6C3814F278977091B5E -IV=E11FEBEF79E425480442D45A8C105B44 -PT=86CFADD3F1B368B3A6E57148CA343D38 -CT=5F5F3548BDBB2A5337FBF07DF76526DD - -I=264 -KEY=2087DC560E6A8C90B6B4D7F4806C3D83 -IV=5F5F3548BDBB2A5337FBF07DF76526DD -PT=A4474ACA97100C7A357A66119D678798 -CT=013ADA262021F88617773CF478067EC8 - -I=265 -KEY=21BD06702E4B7416A1C3EB00F86A434B -IV=013ADA262021F88617773CF478067EC8 -PT=6D66801C39DB803B5DA5A80E30DB0D89 -CT=F46BE70F65FC5641318292AE0C79E5C5 - -I=266 -KEY=D5D6E17F4BB72257904179AEF413A68E -IV=F46BE70F65FC5641318292AE0C79E5C5 -PT=C9499B32D8F47313EB351139DB81AB25 -CT=8573A25F86C7784BF7A0153DF812805C - -I=267 -KEY=50A54320CD705A1C67E16C930C0126D2 -IV=8573A25F86C7784BF7A0153DF812805C -PT=4B09D37A4A57B320C34B1D70F74EB36A -CT=036913128A2B71CE3D05D52D61E48E86 - -I=268 -KEY=53CC5032475B2BD25AE4B9BE6DE5A854 -IV=036913128A2B71CE3D05D52D61E48E86 -PT=EA3A92794B204C0345765CEE2A04AF27 -CT=5A53E929182859CC28D4EB1CB9579B71 - -I=269 -KEY=099FB91B5F73721E723052A2D4B23325 -IV=5A53E929182859CC28D4EB1CB9579B71 -PT=2714E38858426C5631BB2BB4FA289985 -CT=DF4BD734DEC60475D47FE40502439AAE - -I=270 -KEY=D6D46E2F81B5766BA64FB6A7D6F1A98B -IV=DF4BD734DEC60475D47FE40502439AAE -PT=69AC3FD2273926E2DAD3F5BED9F21491 -CT=EBCCD0B121C4009EA7F038F30F5B6B05 - -I=271 -KEY=3D18BE9EA07176F501BF8E54D9AAC28E -IV=EBCCD0B121C4009EA7F038F30F5B6B05 -PT=07520CD471E27BAC35387DB47E706784 -CT=299FE603BBA51BD1582CBD42BC9568EA - -I=272 -KEY=1487589D1BD46D2459933316653FAA64 -IV=299FE603BBA51BD1582CBD42BC9568EA -PT=39598B70B8EB190049823472E3596E42 -CT=68DD98FE52B454F85D6F6A6C742223FA - -I=273 -KEY=7C5AC063496039DC04FC597A111D899E -IV=68DD98FE52B454F85D6F6A6C742223FA -PT=C7E13ABBBA75F527AB1320DD930B24F1 -CT=906B569E44263A4E6F41A52802D3FC59 - -I=274 -KEY=EC3196FD0D4603926BBDFC5213CE75C7 -IV=906B569E44263A4E6F41A52802D3FC59 -PT=9F5D8E50F06895D5D7E6D1DAA247D45F -CT=E5ECBDCC55A9D952BE0F93DFA0FE2C31 - -I=275 -KEY=09DD2B3158EFDAC0D5B26F8DB33059F6 -IV=E5ECBDCC55A9D952BE0F93DFA0FE2C31 -PT=EC3F35C1E6371F106443BD1446D58A0A -CT=4837A3D703E80BFE50D742E378956F3A - -I=276 -KEY=41EA88E65B07D13E85652D6ECBA536CC -IV=4837A3D703E80BFE50D742E378956F3A -PT=7998C3B7B5C94540DFC5BF777D700D48 -CT=DF1564E5E47503A779020D27394571E9 - -I=277 -KEY=9EFFEC03BF72D299FC672049F2E04725 -IV=DF1564E5E47503A779020D27394571E9 -PT=63BEA75A2440C5D123F335F72137B0B6 -CT=5147239C3F6E4A158989BE96C0275D41 - -I=278 -KEY=CFB8CF9F801C988C75EE9EDF32C71A64 -IV=5147239C3F6E4A158989BE96C0275D41 -PT=09C656A0DFCF893DDBE5E2B3D88E5F1F -CT=7E4DEE30DED62EE15CD957530B62559D - -I=279 -KEY=B1F521AF5ECAB66D2937C98C39A54FF9 -IV=7E4DEE30DED62EE15CD957530B62559D -PT=71DC22F489DD422CDE09F01DAA427567 -CT=6F62D6359F07F6BDBB4C02BBE50B273C - -I=280 -KEY=DE97F79AC1CD40D0927BCB37DCAE68C5 -IV=6F62D6359F07F6BDBB4C02BBE50B273C -PT=C2A9BC94CAE48DBEB37B4B506AD4336A -CT=902D9E9F82DE4E66E42B4FEA79AF4077 - -I=281 -KEY=4EBA690543130EB6765084DDA50128B2 -IV=902D9E9F82DE4E66E42B4FEA79AF4077 -PT=69EE7E15EEC2EA953A32E1714961BA9E -CT=72CB5DE8AF6CDC60A00A15CEAF249DBD - -I=282 -KEY=3C7134EDEC7FD2D6D65A91130A25B50F -IV=72CB5DE8AF6CDC60A00A15CEAF249DBD -PT=4C0A3B88FDFAEFEC38858A927C38AE6A -CT=68C2BFA5DE837B927BD75C6DE6008595 - -I=283 -KEY=54B38B4832FCA944AD8DCD7EEC25309A -IV=68C2BFA5DE837B927BD75C6DE6008595 -PT=CE75CCA2D7B0199EB1DA7E33A0E50AB7 -CT=4FFCCBB31FB1FCC0FCB38F0B557BE67A - -I=284 -KEY=1B4F40FB2D4D5584513E4275B95ED6E0 -IV=4FFCCBB31FB1FCC0FCB38F0B557BE67A -PT=E0ECA2ABC1F389B149E746CFB039539E -CT=249FB11DF8C0ED1F346F6D69B8FD0470 - -I=285 -KEY=3FD0F1E6D58DB89B65512F1C01A3D290 -IV=249FB11DF8C0ED1F346F6D69B8FD0470 -PT=BFA871CA5EC16C0B353679782BE04394 -CT=8127E6D8EEC1111518065EDC34CD4B4C - -I=286 -KEY=BEF7173E3B4CA98E7D5771C0356E99DC -IV=8127E6D8EEC1111518065EDC34CD4B4C -PT=1EF816C565B2F56E772C96AD5C92842D -CT=C8DC75AE1E2DBD005D94E69D6776C498 - -I=287 -KEY=762B62902561148E20C3975D52185D44 -IV=C8DC75AE1E2DBD005D94E69D6776C498 -PT=9F2B9873F88EBF21A3BB3DCD853C812E -CT=861D4FF061E85D44173252244F143692 - -I=288 -KEY=F0362D60448949CA37F1C5791D0C6BD6 -IV=861D4FF061E85D44173252244F143692 -PT=6CDEA8A806516A1A0E1CBB5AA123862A -CT=16DA4EE5C5044F66EFCC313754FBCD9E - -I=289 -KEY=E6EC6385818D06ACD83DF44E49F7A648 -IV=16DA4EE5C5044F66EFCC313754FBCD9E -PT=5B637BB469073B5E54EC006F47C4D546 -CT=C2C50037BBBEC252B7D5CF10C38BD665 - -I=290 -KEY=242963B23A33C4FE6FE83B5E8A7C702D -IV=C2C50037BBBEC252B7D5CF10C38BD665 -PT=38DADBF2BA4A80A6A190D9E2AA245167 -CT=721222A5A67E96246DA1B9C59B67DDD5 - -I=291 -KEY=563B41179C4D52DA0249829B111BADF8 -IV=721222A5A67E96246DA1B9C59B67DDD5 -PT=CB52378F6E4E7FCB1891D3BB4D086B9F -CT=D28B8F54E8BDA9A20965984D5DA27FC9 - -I=292 -KEY=84B0CE4374F0FB780B2C1AD64CB9D231 -IV=D28B8F54E8BDA9A20965984D5DA27FC9 -PT=E66015A1B848EF190F981DEFEDB98C93 -CT=012C5D9B847C9583B0BE03999D24E277 - -I=293 -KEY=859C93D8F08C6EFBBB92194FD19D3046 -IV=012C5D9B847C9583B0BE03999D24E277 -PT=F5B2BAD53323A52A2B99CC12782CD6F9 -CT=D1EFB7E7A34F75887038FC4827E894C1 - -I=294 -KEY=5473243F53C31B73CBAAE507F675A487 -IV=D1EFB7E7A34F75887038FC4827E894C1 -PT=11C0C41C3F547B5D7FC94115327AB3D5 -CT=2CF97D8995AA8FDC4C05205D3D8B757F - -I=295 -KEY=788A59B6C66994AF87AFC55ACBFED1F8 -IV=2CF97D8995AA8FDC4C05205D3D8B757F -PT=3F911029D8B69CA1A323A277090B9C07 -CT=44BB04C6253F3ADD454264EA97490475 - -I=296 -KEY=3C315D70E356AE72C2EDA1B05CB7D58D -IV=44BB04C6253F3ADD454264EA97490475 -PT=9D7724EFD1AE76904458EF1360953AA4 -CT=5D6F876E4FDD6921B243EB1F6EF50F82 - -I=297 -KEY=615EDA1EAC8BC75370AE4AAF3242DA0F -IV=5D6F876E4FDD6921B243EB1F6EF50F82 -PT=44A26554FE355D95706431B344701B03 -CT=5F3226B39DF230163D2C474F04BAD36E - -I=298 -KEY=3E6CFCAD3179F7454D820DE036F80961 -IV=5F3226B39DF230163D2C474F04BAD36E -PT=5D8B62C8CD3B04451A599989F3165530 -CT=A247CF8E1D8F480DA4155DA846A2B64E - -I=299 -KEY=9C2B33232CF6BF48E9975048705ABF2F -IV=A247CF8E1D8F480DA4155DA846A2B64E -PT=610D3798E62E9338D5987BAC82D48CD7 -CT=2A92B5AAEA43CFBAA62842DEE7F43A19 - -I=300 -KEY=B6B98689C6B570F24FBF129697AE8536 -IV=2A92B5AAEA43CFBAA62842DEE7F43A19 -PT=F77943AA429BCCC5253156474E719389 -CT=7D475AFF824080E9C95D4E49D4F5090D - -I=301 -KEY=CBFEDC7644F5F01B86E25CDF435B8C3B -IV=7D475AFF824080E9C95D4E49D4F5090D -PT=5E6269D157164B2C544D3052E9DB8553 -CT=AD4628B05F5A765E557015B4A41505EA - -I=302 -KEY=66B8F4C61BAF8645D392496BE74E89D1 -IV=AD4628B05F5A765E557015B4A41505EA -PT=77126BD6C08A094981FEC9E2DE91B2BF -CT=59C24F269E3884A4F8E3F9FB05BF448F - -I=303 -KEY=3F7ABBE0859702E12B71B090E2F1CD5E -IV=59C24F269E3884A4F8E3F9FB05BF448F -PT=7775F90D2189E91B75AB8AD93C0D44F2 -CT=B72873115D4761B8BAEB5B5892B79DF8 - -I=304 -KEY=8852C8F1D8D06359919AEBC8704650A6 -IV=B72873115D4761B8BAEB5B5892B79DF8 -PT=03D9C45A2A152ADAA53E1D42AB33555B -CT=FE0C3F22E6B467DC1C628C928D03DB5B - -I=305 -KEY=765EF7D33E6404858DF8675AFD458BFD -IV=FE0C3F22E6B467DC1C628C928D03DB5B -PT=279791AC4189634A6066BCDCAA2EF9B4 -CT=7F3ABBA943C8E3EF19C3BA2C98C9685F - -I=306 -KEY=09644C7A7DACE76A943BDD76658CE3A2 -IV=7F3ABBA943C8E3EF19C3BA2C98C9685F -PT=E46E5FB6019BA52524A383A18A89583A -CT=C96D250343B134241221490AB39931DB - -I=307 -KEY=C00969793E1DD34E861A947CD615D279 -IV=C96D250343B134241221490AB39931DB -PT=A3A544B8982C2F9EA0CD0ABC4D6392E2 -CT=951D54AABDF6F5B70E700C4896EB2685 - -I=308 -KEY=55143DD383EB26F9886A983440FEF4FC -IV=951D54AABDF6F5B70E700C4896EB2685 -PT=43FEB2051478A02BA1F054C9E82F0209 -CT=1F90165BE29C6C86D09AD07B1C006CA6 - -I=309 -KEY=4A842B8861774A7F58F0484F5CFE985A -IV=1F90165BE29C6C86D09AD07B1C006CA6 -PT=558AD95B25BAB5205FB7E529C96E5B59 -CT=40C0A0427C12AB1F72A7ADF96F82D437 - -I=310 -KEY=0A448BCA1D65E1602A57E5B6337C4C6D -IV=40C0A0427C12AB1F72A7ADF96F82D437 -PT=BABA13A1244DEFF5E4A2AB8183775773 -CT=FB08FDF3BF4394BA1A92C45B7F5F3060 - -I=311 -KEY=F14C7639A22675DA30C521ED4C237C0D -IV=FB08FDF3BF4394BA1A92C45B7F5F3060 -PT=46E036ECCDBE88931E552E45CBBC2BDC -CT=311AE8C2B7CB633178874BDEEEE0602F - -I=312 -KEY=C0569EFB15ED16EB48426A33A2C31C22 -IV=311AE8C2B7CB633178874BDEEEE0602F -PT=4D5C919959478AD0D9862BA509233102 -CT=1DC85D9A8877C79698C7D1C1610CBAE9 - -I=313 -KEY=DD9EC3619D9AD17DD085BBF2C3CFA6CB -IV=1DC85D9A8877C79698C7D1C1610CBAE9 -PT=D423E31E9FD6E4F4373FA7AD31CC6011 -CT=FC55E7BEA15BD539EDACB202F0218D4A - -I=314 -KEY=21CB24DF3CC104443D2909F033EE2B81 -IV=FC55E7BEA15BD539EDACB202F0218D4A -PT=52C2C696A4343C0F280A3BC8F6AA19EA -CT=FFD9FECD3A4EC194568A96C5A899E8D2 - -I=315 -KEY=DE12DA12068FC5D06BA39F359B77C353 -IV=FFD9FECD3A4EC194568A96C5A899E8D2 -PT=3B2266FAB514211E8E33AFA566898083 -CT=DC1A545F354365A0002180BACCE0AD25 - -I=316 -KEY=02088E4D33CCA0706B821F8F57976E76 -IV=DC1A545F354365A0002180BACCE0AD25 -PT=DC20E6BD8B8AC822CF2B505E580E6A80 -CT=51CF4C11F15B8B565B875F769C2FD37F - -I=317 -KEY=53C7C25CC2972B26300540F9CBB8BD09 -IV=51CF4C11F15B8B565B875F769C2FD37F -PT=67B4C3E2AFC3402901549265186303FB -CT=A118B7E5B10DAB4DDB449877AB1E6897 - -I=318 -KEY=F2DF75B9739A806BEB41D88E60A6D59E -IV=A118B7E5B10DAB4DDB449877AB1E6897 -PT=971952EE322CD68462B4CE8B772BBA48 -CT=A2988AAC94D8A7EFB32B34CC07911F3E - -I=319 -KEY=5047FF15E7422784586AEC426737CAA0 -IV=A2988AAC94D8A7EFB32B34CC07911F3E -PT=64C2665506EDDED98EC55D2CCED7762C -CT=86AEB7B90565D05293A8D9146880C307 - -I=320 -KEY=D6E948ACE227F7D6CBC235560FB709A7 -IV=86AEB7B90565D05293A8D9146880C307 -PT=A5E7E411209DD2A34AA8CDA3153A69E4 -CT=27746442FAC1DF26B11A55251AAFD865 - -I=321 -KEY=F19D2CEE18E628F07AD860731518D1C2 -IV=27746442FAC1DF26B11A55251AAFD865 -PT=83A41EF5F664A909BC47939D7858C221 -CT=619A164C3F2119FFCA3832A5EA958E01 - -I=322 -KEY=90073AA227C7310FB0E052D6FF8D5FC3 -IV=619A164C3F2119FFCA3832A5EA958E01 -PT=1F5A31EBB2C515728DB07EE3160D03CD -CT=DEE1692D386EF5A8861BE5D8A4630906 - -I=323 -KEY=4EE6538F1FA9C4A736FBB70E5BEE56C5 -IV=DEE1692D386EF5A8861BE5D8A4630906 -PT=297B343F5EE6221FB6CC40E0C836B387 -CT=B2BA45B0A776A950C32DD5F302201FC3 - -I=324 -KEY=FC5C163FB8DF6DF7F5D662FD59CE4906 -IV=B2BA45B0A776A950C32DD5F302201FC3 -PT=CC3601DC94B13116DF3012860A522D2D -CT=6D141746B23B4E1EF20DFE6C14D6ECE4 - -I=325 -KEY=914801790AE423E907DB9C914D18A5E2 -IV=6D141746B23B4E1EF20DFE6C14D6ECE4 -PT=FE07DA9A6E8B712B1FDFC3C1CC87146D -CT=0D80E8F5557A88A271133F8929125C72 - -I=326 -KEY=9CC8E98C5F9EAB4B76C8A318640AF990 -IV=0D80E8F5557A88A271133F8929125C72 -PT=EBDC0192755A685D6275532E93D33890 -CT=B88A629A8E22A78BAF98C9E623F48134 - -I=327 -KEY=24428B16D1BC0CC0D9506AFE47FE78A4 -IV=B88A629A8E22A78BAF98C9E623F48134 -PT=78AD3067BE2E9536ADB58DA49D7CA6DA -CT=0A9C2D318240F4FA4FF91CC5D23A371F - -I=328 -KEY=2EDEA62753FCF83A96A9763B95C44FBB -IV=0A9C2D318240F4FA4FF91CC5D23A371F -PT=04C72A08CCC36B4211AFE98637C4CEFF -CT=A42618A89B9E618DDD7A983081E086B9 - -I=329 -KEY=8AF8BE8FC86299B74BD3EE0B1424C902 -IV=A42618A89B9E618DDD7A983081E086B9 -PT=22D4A346027B8E5FEE1C0C0C45CA7DCB -CT=7CC4479AE05A295723F27545E1A46B7B - -I=330 -KEY=F63CF9152838B0E068219B4EF580A279 -IV=7CC4479AE05A295723F27545E1A46B7B -PT=05090A5C8F3CD0E7F7EA11B33CDF3C1D -CT=815BCEB2A29EA2A491C8E39B117790EC - -I=331 -KEY=776737A78AA61244F9E978D5E4F73295 -IV=815BCEB2A29EA2A491C8E39B117790EC -PT=7B40F8A4AC0E4C6BD73A59FFC91CA77D -CT=E4ED412F3ECDD4B7409BEEAEDC2C755F - -I=332 -KEY=938A7688B46BC6F3B972967B38DB47CA -IV=E4ED412F3ECDD4B7409BEEAEDC2C755F -PT=047E2E4681A97ED20308F1FE4B132F7B -CT=10153209AED4115329587180D65A0B97 - -I=333 -KEY=839F44811ABFD7A0902AE7FBEE814C5D -IV=10153209AED4115329587180D65A0B97 -PT=32671E6C0D28744AB457587BBB6DD21E -CT=847F781EDF77A870C4EA99CCC1721917 - -I=334 -KEY=07E03C9FC5C87FD054C07E372FF3554A -IV=847F781EDF77A870C4EA99CCC1721917 -PT=EC3159B002B95054F00D57049D91E32B -CT=05CC06529764F6747FCB2B62569C428C - -I=335 -KEY=022C3ACD52AC89A42B0B5555796F17C6 -IV=05CC06529764F6747FCB2B62569C428C -PT=9A930743113957D10EC643D8D8034C73 -CT=D1C7957073C2A44D9483DD11F3FA2B1E - -I=336 -KEY=D3EBAFBD216E2DE9BF8888448A953CD8 -IV=D1C7957073C2A44D9483DD11F3FA2B1E -PT=2E061A5B483D0D834D3019954E54CF80 -CT=0AC3300C59DB7A76A1E16DC5BF167B70 - -I=337 -KEY=D9289FB178B5579F1E69E581358347A8 -IV=0AC3300C59DB7A76A1E16DC5BF167B70 -PT=2A6E00DF7820913341D26EF611A7BEC1 -CT=5A5A1BE396D3C56DB0690B92A925D8D8 - -I=338 -KEY=83728452EE6692F2AE00EE139CA69F70 -IV=5A5A1BE396D3C56DB0690B92A925D8D8 -PT=E871C79BA6132F15C80A85F4BC732E77 -CT=829ABA07496E1269437680257308029D - -I=339 -KEY=01E83E55A708809BED766E36EFAE9DED -IV=829ABA07496E1269437680257308029D -PT=5955643AB76251E6AF97BC2490D09A72 -CT=3FEDBF80B703D067126EF55B02A41175 - -I=340 -KEY=3E0581D5100B50FCFF189B6DED0A8C98 -IV=3FEDBF80B703D067126EF55B02A41175 -PT=32BCF86ECA6CCE8F9C1C87AD9FDF8238 -CT=B59D6C5FCA91EDBFE75E795638CAD286 - -I=341 -KEY=8B98ED8ADA9ABD431846E23BD5C05E1E -IV=B59D6C5FCA91EDBFE75E795638CAD286 -PT=01A08051FC1D98C1BDAE4CA1D41D91E6 -CT=21CB8EF8BBE6C371A26BFF92701C3D1A - -I=342 -KEY=AA536372617C7E32BA2D1DA9A5DC6304 -IV=21CB8EF8BBE6C371A26BFF92701C3D1A -PT=5F5D891DF8D595D3FEDAEF0174B0A1D1 -CT=23D0FB6489113D3D4AA6470210698391 - -I=343 -KEY=89839816E86D430FF08B5AABB5B5E095 -IV=23D0FB6489113D3D4AA6470210698391 -PT=54FEAB37EFCD36D28E943DD85E803812 -CT=45F0556ED9A8ED0E1C8B0A0BA648E069 - -I=344 -KEY=CC73CD7831C5AE01EC0050A013FD00FC -IV=45F0556ED9A8ED0E1C8B0A0BA648E069 -PT=7AF4BC398ACAD37F526BDE12F3ED59ED -CT=C41E115EE06FFE5DED10480A1BE5B720 - -I=345 -KEY=086DDC26D1AA505C011018AA0818B7DC -IV=C41E115EE06FFE5DED10480A1BE5B720 -PT=CF15E4B6DDF60A4EE0CB6CBFA8AD499B -CT=1098A41E2C97C9D70626E4D1841F5CC1 - -I=346 -KEY=18F57838FD3D998B0736FC7B8C07EB1D -IV=1098A41E2C97C9D70626E4D1841F5CC1 -PT=BAD4050A0013AB8BC556F367AB634D94 -CT=D9B58211EB935246A5E04FCD3BE10B54 - -I=347 -KEY=C140FA2916AECBCDA2D6B3B6B7E6E049 -IV=D9B58211EB935246A5E04FCD3BE10B54 -PT=CEFF0AF7EF4EA7EF3B0E8BF7FB756E77 -CT=50FAE8C770EF7F9D5FE93B090B9D5C66 - -I=348 -KEY=91BA12EE6641B450FD3F88BFBC7BBC2F -IV=50FAE8C770EF7F9D5FE93B090B9D5C66 -PT=3B8C412B4156B413AD06CB181B4C5EAA -CT=E47249D4B5F24FF415B0E669EBF471B1 - -I=349 -KEY=75C85B3AD3B3FBA4E88F6ED6578FCD9E -IV=E47249D4B5F24FF415B0E669EBF471B1 -PT=56C612C5C594CAFB7B1CE8131E786DF0 -CT=6AF057199C217EECB886D940F61B91C5 - -I=350 -KEY=1F380C234F9285485009B796A1945C5B -IV=6AF057199C217EECB886D940F61B91C5 -PT=5629EF768743AB63D5B79B511C0A6BEF -CT=A5A76C330984D34310D021A6C2BDE9BC - -I=351 -KEY=BA9F60104616560B40D996306329B5E7 -IV=A5A76C330984D34310D021A6C2BDE9BC -PT=ED8DF427A02692C09D7AAEF2EDAA1249 -CT=8AAEFBA5DE0AAA41D947E3238B279913 - -I=352 -KEY=30319BB5981CFC4A999E7513E80E2CF4 -IV=8AAEFBA5DE0AAA41D947E3238B279913 -PT=949339605F30310FC557F2CA4815B034 -CT=9408BCB67EA573E7B5359B67918C16B9 - -I=353 -KEY=A4392703E6B98FAD2CABEE7479823A4D -IV=9408BCB67EA573E7B5359B67918C16B9 -PT=03607642CBBCCA2134837AC4BB452682 -CT=90660AF3DD0EAC1B61BB60EB49408586 - -I=354 -KEY=345F2DF03BB723B64D108E9F30C2BFCB -IV=90660AF3DD0EAC1B61BB60EB49408586 -PT=DE00E32930E14BD4297F9D789D0C25A1 -CT=1C48AC020174C0D87443229C113E2838 - -I=355 -KEY=281781F23AC3E36E3953AC0321FC97F3 -IV=1C48AC020174C0D87443229C113E2838 -PT=9CA7A04855F8404176D7D30B594B65AC -CT=7ACCB3FD4F9C7A5BFB83A969EB6D211A - -I=356 -KEY=52DB320F755F9935C2D0056ACA91B6E9 -IV=7ACCB3FD4F9C7A5BFB83A969EB6D211A -PT=DC0B392E998A347ECB789A51A09F1B1D -CT=22BED79EF2CAFF83BE8CEE5D7001DE21 - -I=357 -KEY=7065E591879566B67C5CEB37BA9068C8 -IV=22BED79EF2CAFF83BE8CEE5D7001DE21 -PT=07210334590A9314031D98F7DFBB84B9 -CT=44B16879886BC331407D1E7C7F247A04 - -I=358 -KEY=34D48DE80FFEA5873C21F54BC5B412CC -IV=44B16879886BC331407D1E7C7F247A04 -PT=27DDF18405E56989E59ED442C8825DD6 -CT=2787AD57159450916A45C72D0E074D53 - -I=359 -KEY=135320BF1A6AF51656643266CBB35F9F -IV=2787AD57159450916A45C72D0E074D53 -PT=4F43202A454BB0F3A9440DA558BEE228 -CT=3C1B83C66CEEEB27644BC66ACC3117E8 - -I=360 -KEY=2F48A37976841E31322FF40C07824877 -IV=3C1B83C66CEEEB27644BC66ACC3117E8 -PT=28ED6A88BDE4ADEFDA5C0F629109A7A3 -CT=B6009481F8C5D3EE37C645CF238238A1 - -I=361 -KEY=994837F88E41CDDF05E9B1C3240070D6 -IV=B6009481F8C5D3EE37C645CF238238A1 -PT=48DC5A3700CD4A7A9B066DC0E2667544 -CT=C1A20854601D7A81CAC51E9237BDC030 - -I=362 -KEY=58EA3FACEE5CB75ECF2CAF5113BDB0E6 -IV=C1A20854601D7A81CAC51E9237BDC030 -PT=1F84C71120B50FDF715B60DB69DECBE0 -CT=663EDB4EFD3F6AC2259A43C926ACE66D - -I=363 -KEY=3ED4E4E21363DD9CEAB6EC983511568B -IV=663EDB4EFD3F6AC2259A43C926ACE66D -PT=D6F9C59367A57E1DBDC2F4627524BC9A -CT=CA84A10F987212D75B744A7966ABBABA - -I=364 -KEY=F45045ED8B11CF4BB1C2A6E153BAEC31 -IV=CA84A10F987212D75B744A7966ABBABA -PT=1D8BC84060844CE5C40C716F2190C2BB -CT=ABAEEB339C4D150E894392444E021710 - -I=365 -KEY=5FFEAEDE175CDA45388134A51DB8FB21 -IV=ABAEEB339C4D150E894392444E021710 -PT=1300843AABCFB110198F0F0102C0A4D5 -CT=DBA9A1F8EE9AB8300D0273F71EAC5D1C - -I=366 -KEY=84570F26F9C66275358347520314A63D -IV=DBA9A1F8EE9AB8300D0273F71EAC5D1C -PT=1EA11B05D7DA9D770BA9AB619267B7A3 -CT=4921F1CB4A9AA6594C205D8FF0B2DEC9 - -I=367 -KEY=CD76FEEDB35CC42C79A31ADDF3A678F4 -IV=4921F1CB4A9AA6594C205D8FF0B2DEC9 -PT=9ABA414156563E88A8CCDB3BD226F66C -CT=4CF623AC6E145E2D61CAD28BFBF1F1E5 - -I=368 -KEY=8180DD41DD489A011869C85608578911 -IV=4CF623AC6E145E2D61CAD28BFBF1F1E5 -PT=FEF20625FA0C788DB8A20298F6933F6F -CT=67C491A5CA1A065980BDECE44B7979F1 - -I=369 -KEY=E6444CE417529C5898D424B2432EF0E0 -IV=67C491A5CA1A065980BDECE44B7979F1 -PT=79C4A475D0E064D72D48AF6357A0E6A0 -CT=529766CDD1223ED05C055108F91E6526 - -I=370 -KEY=B4D32A29C670A288C4D175BABA3095C6 -IV=529766CDD1223ED05C055108F91E6526 -PT=0758AA9195AE8684B9FEEBEF8E1226AE -CT=2AEC009219ECD0499DD729352C220E7D - -I=371 -KEY=9E3F2ABBDF9C72C159065C8F96129BBB -IV=2AEC009219ECD0499DD729352C220E7D -PT=886713433798AB16E87A8AD3A8CD0C87 -CT=0DE2A7554E343B6FFC6D1ECF4A8AF0DD - -I=372 -KEY=93DD8DEE91A849AEA56B4240DC986B66 -IV=0DE2A7554E343B6FFC6D1ECF4A8AF0DD -PT=984E8BA3DFFB4E9A1244D65BEA7DC594 -CT=8111340B4AF2CD82FF15447143069276 - -I=373 -KEY=12CCB9E5DB5A842C5A7E06319F9EF910 -IV=8111340B4AF2CD82FF15447143069276 -PT=A4F6C8ACF4F1050D11E42FEF1B6C8B68 -CT=BB4693FA1399583EACB21D2675E6D156 - -I=374 -KEY=A98A2A1FC8C3DC12F6CC1B17EA782846 -IV=BB4693FA1399583EACB21D2675E6D156 -PT=C5DBE1A937D6EA2FDD9A1A2FD25217B9 -CT=BC01B078339637D796F822B7E58D968D - -I=375 -KEY=158B9A67FB55EBC5603439A00FF5BECB -IV=BC01B078339637D796F822B7E58D968D -PT=DBD0494B0FE3149F8BCB8A70D344E811 -CT=600C1EFBDCA314A6F9714DEE413B9BD2 - -I=376 -KEY=7587849C27F6FF639945744E4ECE2519 -IV=600C1EFBDCA314A6F9714DEE413B9BD2 -PT=FCA88DCB484317D7F886E7437BC9E669 -CT=2E3788A647105DD0A286E2EFFD469C99 - -I=377 -KEY=5BB00C3A60E6A2B33BC396A1B388B980 -IV=2E3788A647105DD0A286E2EFFD469C99 -PT=65AF28E41B3DA5ACE3B2CC9A25EAD28C -CT=5411E48B57058A52C8560423BCFFBCD2 - -I=378 -KEY=0FA1E8B137E328E1F39592820F770552 -IV=5411E48B57058A52C8560423BCFFBCD2 -PT=6DD82A9F1CF0A5134A76899B04BE37D5 -CT=C3F69C8ED682BF252D5119D1695126E1 - -I=379 -KEY=CC57743FE16197C4DEC48B53662623B3 -IV=C3F69C8ED682BF252D5119D1695126E1 -PT=DE729AB3803144FD958D8597396BC8ED -CT=0941B78975FD2945B4AA81E8C58E3CB2 - -I=380 -KEY=C516C3B6949CBE816A6E0ABBA3A81F01 -IV=0941B78975FD2945B4AA81E8C58E3CB2 -PT=D8404E7A17254EB40683A8919A9563B4 -CT=BF647E0346C013E138A2F0B06E7BB142 - -I=381 -KEY=7A72BDB5D25CAD6052CCFA0BCDD3AE43 -IV=BF647E0346C013E138A2F0B06E7BB142 -PT=214089EC2996CE9FA2BBFEFBCAC03509 -CT=AFDA67B9451FF758CC87BBD93C7D4BE4 - -I=382 -KEY=D5A8DA0C97435A389E4B41D2F1AEE5A7 -IV=AFDA67B9451FF758CC87BBD93C7D4BE4 -PT=9406E9D4FB4592A609BBDB23CE5F9D7F -CT=B18202E4CA510695540371A8B6523616 - -I=383 -KEY=642AD8E85D125CADCA48307A47FCD3B1 -IV=B18202E4CA510695540371A8B6523616 -PT=FEE45BE0503B4093747AFCEA9881D30D -CT=64E149A4A1840F93D675B041ED81D45A - -I=384 -KEY=00CB914CFC96533E1C3D803BAA7D07EB -IV=64E149A4A1840F93D675B041ED81D45A -PT=880368D5609350167C7826DA30DCFF59 -CT=65A363E9837DFBBDA2688E6F4FBE6C35 - -I=385 -KEY=6568F2A57FEBA883BE550E54E5C36BDE -IV=65A363E9837DFBBDA2688E6F4FBE6C35 -PT=29C5940D09A8723B441FC469C909813A -CT=2A47FDF5BF600891DF4D9E8AA34748BA - -I=386 -KEY=4F2F0F50C08BA012611890DE46842364 -IV=2A47FDF5BF600891DF4D9E8AA34748BA -PT=20AF0FF7BAC0F468C12BD2816A8B1620 -CT=68A637E4B94EC150C84A6EBB005BB79B - -I=387 -KEY=278938B479C56142A952FE6546DF94FF -IV=68A637E4B94EC150C84A6EBB005BB79B -PT=42906D013A3F0A426B01B489ECA6CAD7 -CT=A090CA02FCD40F01CA0D1A699E30C164 - -I=388 -KEY=8719F2B685116E43635FE40CD8EF559B -IV=A090CA02FCD40F01CA0D1A699E30C164 -PT=05A02D4D7D90BCA74ECE791CD865CB88 -CT=F70109F0EBBA56959B3013565E2BDFFC - -I=389 -KEY=7018FB466EAB38D6F86FF75A86C48A67 -IV=F70109F0EBBA56959B3013565E2BDFFC -PT=C373AB7B8F770212F9D5CEF40099086C -CT=67221CC1F104809B8A5D35431963812D - -I=390 -KEY=173AE7879FAFB84D7232C2199FA70B4A -IV=67221CC1F104809B8A5D35431963812D -PT=8C59B2A7FD50EC66ABACC0531BE33237 -CT=E06166175F68155DB86E268F3C5524AE - -I=391 -KEY=F75B8190C0C7AD10CA5CE496A3F22FE4 -IV=E06166175F68155DB86E268F3C5524AE -PT=D39790AED2970355A6337AAD2CA4D501 -CT=85E89883242A3B68F4AAF922646EB385 - -I=392 -KEY=72B31913E4ED96783EF61DB4C79C9C61 -IV=85E89883242A3B68F4AAF922646EB385 -PT=87D4160C7C97476D0884A22B5983AA65 -CT=038C79FDFAA0B4F4AD9DC336F46CACDF - -I=393 -KEY=713F60EE1E4D228C936BDE8233F030BE -IV=038C79FDFAA0B4F4AD9DC336F46CACDF -PT=3B59088B5ADC77E4B3FC31897C6389B5 -CT=F6C92ECB3332E5E93C9DE29F27F94BB3 - -I=394 -KEY=87F64E252D7FC765AFF63C1D14097B0D -IV=F6C92ECB3332E5E93C9DE29F27F94BB3 -PT=68BA9BEBB40B3E35D2E577A2831CF9DB -CT=7B72342488233DAD5ACF0A8D54EA9E8B - -I=395 -KEY=FC847A01A55CFAC8F539369040E3E586 -IV=7B72342488233DAD5ACF0A8D54EA9E8B -PT=7816251219B8C7F009ADD7A1898D02CF -CT=45CBA66AD6045917C3E8257D3ECBECDB - -I=396 -KEY=B94FDC6B7358A3DF36D113ED7E28095D -IV=45CBA66AD6045917C3E8257D3ECBECDB -PT=F542FEAB12E2EA9AE761E58108784E37 -CT=82E289465F5838036B9880C33AEBCB83 - -I=397 -KEY=3BAD552D2C009BDC5D49932E44C3C2DE -IV=82E289465F5838036B9880C33AEBCB83 -PT=3B8208791DAE56383CC2BCB44097C9D3 -CT=F02F2B89DE46D01F46AD95C82AF0C20E - -I=398 -KEY=CB827EA4F2464BC31BE406E66E3300D0 -IV=F02F2B89DE46D01F46AD95C82AF0C20E -PT=3F2C0F7A0AEAB04F318C661ABCFED153 -CT=8D4FAF6332578524301ACA22AD86965B - -I=399 -KEY=46CDD1C7C011CEE72BFECCC4C3B5968B -IV=8D4FAF6332578524301ACA22AD86965B -PT=A27200B51D69AAC22F1C567F8BCEABFA -CT=2F844CBF78EBA70DA7A49601388F1AB6 - -========== - -KEYSIZE=192 - -I=0 -KEY=000000000000000000000000000000000000000000000000 -IV=00000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=7BD966D53AD8C1BB85D2ADFAE87BB104 - -I=1 -KEY=506339DAE3B35BEB7BD966D53AD8C1BB85D2ADFAE87BB104 -IV=7BD966D53AD8C1BB85D2ADFAE87BB104 -PT=0555C410F44C7AA4506339DAE3B35BEB -CT=869C061BE9CFEAB5D285B0724A9A8970 - -I=2 -KEY=74D3414C2374367BFD4560CED3172B0E57571D88A2E13874 -IV=869C061BE9CFEAB5D285B0724A9A8970 -PT=C6FB25A188CF7F3F24B07896C0C76D90 -CT=9E58A52B3840DBE16E8063A18220FEE4 - -I=3 -KEY=DDE2DF4EEC312FA3631DC5E5EB57F0EF39D77E2920C1C690 -IV=9E58A52B3840DBE16E8063A18220FEE4 -PT=84E3D4168A8469A6A9319E02CF4519D8 -CT=730A256C202B9D57F3C0D73AD4B6CBED - -I=4 -KEY=9D973AECAF19E9951017E089CB7C6DB8CA17A913F4770D7D -IV=730A256C202B9D57F3C0D73AD4B6CBED -PT=E000CE26CD3185B44075E5A24328C636 -CT=E79EF11C5C1FD1AB75280BCFFCFE89D4 - -I=5 -KEY=7A52007B2C40C9F4F78911959763BC13BF3FA2DC088984A9 -IV=E79EF11C5C1FD1AB75280BCFFCFE89D4 -PT=19D79403BB238816E7C53A9783592061 -CT=65744444724F1052D0B8674EDC8083B5 - -I=6 -KEY=40D50426A8D09F3292FD55D1E52CAC416F87C592D409071C -IV=65744444724F1052D0B8674EDC8083B5 -PT=FDFA33685E2B5BBC3A87045D849056C6 -CT=23C6377D3D076491AD93E2B6112289C7 - -I=7 -KEY=6FD062412FE1AE4EB13B62ACD82BC8D0C2142724C52B8EDB -IV=23C6377D3D076491AD93E2B6112289C7 -PT=5056DDDEF15831502F0566678731317C -CT=F13A83088536BF30E5E9018BE57D7D89 - -I=8 -KEY=EB4DB5F469D0EE9B4001E1A45D1D77E027FD26AF2056F352 -IV=F13A83088536BF30E5E9018BE57D7D89 -PT=0EE535A4A524668F849DD7B5463140D5 -CT=3F496CB19B21C37159528BF345473E6D - -I=9 -KEY=AA6E5744B909D9A87F488D15C63CB4917EAFAD5C6511CD3F -IV=3F496CB19B21C37159528BF345473E6D -PT=3A11F90EB51C81ED4123E2B0D0D93733 -CT=CF79C1EDEE17A68DC7E673006AEC90D9 - -I=10 -KEY=64AB0C0C9471B77FB0314CF8282B121CB949DE5C0FFD5DE6 -IV=CF79C1EDEE17A68DC7E673006AEC90D9 -PT=85187E7F91280A5BCEC55B482D786ED7 -CT=92D1757BEBCE6E0406407819AF82353F - -I=11 -KEY=9E5720C1DC2E285C22E03983C3E57C18BF09A645A07F68D9 -IV=92D1757BEBCE6E0406407819AF82353F -PT=45147511BC08EC76FAFC2CCD485F9F23 -CT=8C0228F57523D746E67D27A8E6C426D9 - -I=12 -KEY=EBBB8245582E4367AEE21176B6C6AB5E597481ED46BB4E00 -IV=8C0228F57523D746E67D27A8E6C426D9 -PT=73B9EEAC644CBB8875ECA28484006B3B -CT=D0025BF1FC35DD9BDA20F42DF775AF71 - -I=13 -KEY=5F938EE9CC63C9E87EE04A874AF376C5835475C0B1CEE171 -IV=D0025BF1FC35DD9BDA20F42DF775AF71 -PT=DE2507F01BC8B212B4280CAC944D8A8F -CT=3FDDD3E04B2CBE79BB07D82182CD3787 - -I=14 -KEY=B94E2EC5F6E86EDC413D996701DFC8BC3853ADE13303D6F6 -IV=3FDDD3E04B2CBE79BB07D82182CD3787 -PT=90CE32BCC16C20F7E6DDA02C3A8BA734 -CT=F7B491E4C40B60BE8ACF16D68E3ED60F - -I=15 -KEY=DE41ABD8C44F5DF6B6890883C5D4A802B29CBB37BD3D00F9 -IV=F7B491E4C40B60BE8ACF16D68E3ED60F -PT=B7ACCA62BB9974BC670F851D32A7332A -CT=7ED4055D367CB31A4CF1CC17132E00B5 - -I=16 -KEY=E2A57C71F23BC4DEC85D0DDEF3A81B18FE6D7720AE13004C -IV=7ED4055D367CB31A4CF1CC17132E00B5 -PT=1CA59C2384797B803CE4D7A936749928 -CT=8D50A87F14D466323929BB52FA60FA42 - -I=17 -KEY=2FA1A78B8BCC301C450DA5A1E77C7D2AC744CC725473FA0E -IV=8D50A87F14D466323929BB52FA60FA42 -PT=0A623319F2A051ACCD04DBFA79F7F4C2 -CT=7C02D378606FC33DFCEF8AA2A000383E - -I=18 -KEY=A949CE493892DF58390F76D98713BE173BAB46D0F473C230 -IV=7C02D378606FC33DFCEF8AA2A000383E -PT=EE8F5FF6A7FF813386E869C2B35EEF44 -CT=CAE55B9CCBB5A68EBF0D2AB55E079FD4 - -I=19 -KEY=E159445FE4201A6CF3EA2D454CA6189984A66C65AA745DE4 -IV=CAE55B9CCBB5A68EBF0D2AB55E079FD4 -PT=9699456986535C4648108A16DCB2C534 -CT=9056685FBFECC7A6143DB5AC314DAC88 - -I=20 -KEY=EE4F7BF96BF1163E63BC451AF34ADF3F909BD9C99B39F16C -IV=9056685FBFECC7A6143DB5AC314DAC88 -PT=16D6C34C3B57AC0A0F163FA68FD10C52 -CT=4D6A5542F0680CE37E88119141F321F5 - -I=21 -KEY=27F8CEE0120E8A0F2ED610580322D3DCEE13C858DACAD099 -IV=4D6A5542F0680CE37E88119141F321F5 -PT=337839926E36EC77C9B7B51979FF9C31 -CT=78E16D6027F0D190E78825C2F52E5364 - -I=22 -KEY=0AF4D3D8EB9FF18A56377D3824D2024C099BED9A2FE483FD -IV=78E16D6027F0D190E78825C2F52E5364 -PT=8F96B66F934467C72D0C1D38F9917B85 -CT=82A81B33F80A105DD7D9CC6DDFECDB96 - -I=23 -KEY=AD2AFC821170D967D49F660BDCD81211DE4221F7F008586B -IV=82A81B33F80A105DD7D9CC6DDFECDB96 -PT=E2CB8E6E329C6660A7DE2F5AFAEF28ED -CT=0BCD68A063BA3540B3E04C885DF45BD0 - -I=24 -KEY=5B50EE72BD6CE837DF520EABBF6227516DA26D7FADFC03BB -IV=0BCD68A063BA3540B3E04C885DF45BD0 -PT=31A14C64CD8BCC8FF67A12F0AC1C3150 -CT=DB27EA5834BF572EA50E03E0773C1010 - -I=25 -KEY=BF4D8A58F54D47620475E4F38BDD707FC8AC6E9FDAC013AB -IV=DB27EA5834BF572EA50E03E0773C1010 -PT=26755B5C0BE60998E41D642A4821AF55 -CT=655A896243B5E86B2F74299A317A2E4C - -I=26 -KEY=8DC190D88B17EAB9612F6D91C8689814E7D84705EBBA3DE7 -IV=655A896243B5E86B2F74299A317A2E4C -PT=C6920ADCED82F661328C1A807E5AADDB -CT=9F45472FDBB732C745AD228810392EA2 - -I=27 -KEY=B44071C6F14CDA97FE6A2ABE13DFAAD3A275658DFB831345 -IV=9F45472FDBB732C745AD228810392EA2 -PT=2178DFA9784E563E3981E11E7A5B302E -CT=9F985FBF08235845E396BFCE54BCE7C8 - -I=28 -KEY=A3C12E42B53D829E61F275011BFCF29641E3DA43AF3FF48D -IV=9F985FBF08235845E396BFCE54BCE7C8 -PT=44977E2274DA25AE17815F8444715809 -CT=033EAF4FAC934D123012279B1663C80B - -I=29 -KEY=8FD2B79E25E39C4A62CCDA4EB76FBF8471F1FDD8B95C3C86 -IV=033EAF4FAC934D123012279B1663C80B -PT=425088D4626CD7972C1399DC90DE1ED4 -CT=A962CB4707B0048BB81F4225EFC85E48 - -I=30 -KEY=3D68793EF46B8125CBAE1109B0DFBB0FC9EEBFFD569462CE -IV=A962CB4707B0048BB81F4225EFC85E48 -PT=EF21ED587C272175B2BACEA0D1881D6F -CT=6F3A0D63A22C003F7F65B09098F667DB - -I=31 -KEY=6A4FB651BE9D0BAFA4941C6A12F3BB30B68B0F6DCE620515 -IV=6F3A0D63A22C003F7F65B09098F667DB -PT=16054E60B460B2D15727CF6F4AF68A8A -CT=8BB46230FF03665765F2E5AAEA14104F - -I=32 -KEY=3F5991D63C15A1822F207E5AEDF0DD67D379EAC72476155A -IV=8BB46230FF03665765F2E5AAEA14104F -PT=82D0B12FEA88917F551627878288AA2D -CT=8E1A664131FAB09E786E111C3C20A7BB - -I=33 -KEY=456F69D38929ED82A13A181BDC0A6DF9AB17FBDB1856B2E1 -IV=8E1A664131FAB09E786E111C3C20A7BB -PT=1384D3B7CAEB528A7A36F805B53C4C00 -CT=92D99BF1D71026D2BF78E32421E34E52 - -I=34 -KEY=658891F63379484C33E383EA0B1A4B2B146F18FF39B5FCB3 -IV=92D99BF1D71026D2BF78E32421E34E52 -PT=9F60C3117269E88920E7F825BA50A5CE -CT=7DB6782C68EC5FC75A2A75E4EA7B4071 - -I=35 -KEY=9193E2EACE8423F64E55FBC663F614EC4E456D1BD3CEBCC2 -IV=7DB6782C68EC5FC75A2A75E4EA7B4071 -PT=232ECA0370EBD920F41B731CFDFD6BBA -CT=D76A1E73E977533E6D7C74277DAFEB48 - -I=36 -KEY=F4C34FE273D0FCB5993FE5B58A8147D22339193CAE61578A -IV=D76A1E73E977533E6D7C74277DAFEB48 -PT=5BCD8C6C4D14321F6550AD08BD54DF43 -CT=4A69E9081DDD43A6061700C7DA8F5E73 - -I=37 -KEY=DC82C155896C5D5CD3560CBD975C0474252E19FB74EE09F9 -IV=4A69E9081DDD43A6061700C7DA8F5E73 -PT=C914BB961EA890D828418EB7FABCA1E9 -CT=91EE5BE28C27F055258BC3E1F37E2DEC - -I=38 -KEY=08F1655EA3656F1C42B8575F1B7BF42100A5DA1A87902415 -IV=91EE5BE28C27F055258BC3E1F37E2DEC -PT=11804F73D788115CD473A40B2A093240 -CT=86B9BE5AFD2A8A49E2651C314CAE0918 - -I=39 -KEY=59D7EFD92140A147C401E905E6517E68E2C0C62BCB3E2D0D -IV=86B9BE5AFD2A8A49E2651C314CAE0918 -PT=6E2A1E436926174E51268A878225CE5B -CT=C642F5ED78DB76738A89296B1C4A0932 - -I=40 -KEY=F6E75E7867D0FB4A02431CE89E8A081B6849EF40D774243F -IV=C642F5ED78DB76738A89296B1C4A0932 -PT=15896B8B864CF068AF30B1A146905A0D -CT=24288AE027547E499EBADE9260C8F037 - -I=41 -KEY=9A048C2BC98E15B2266B9608B9DE7652F6F331D2B7BCD408 -IV=24288AE027547E499EBADE9260C8F037 -PT=FF9A330C205DC3006CE3D253AE5EEEF8 -CT=BD9B3D670D24EDDA1EAD1DB06C8A83C7 - -I=42 -KEY=97E8C017644E9FED9BF0AB6FB4FA9B88E85E2C62DB3657CF -IV=BD9B3D670D24EDDA1EAD1DB06C8A83C7 -PT=C9A3916C34A7CCD90DEC4C3CADC08A5F -CT=1FCCBC65C44E4680E1593EE0EEFEA9A9 - -I=43 -KEY=3A2862113BD3312D843C170A70B4DD080907128235C8FE66 -IV=1FCCBC65C44E4680E1593EE0EEFEA9A9 -PT=EAF9C4A80EE93585ADC0A2065F9DAEC0 -CT=2C0004064936696B10D039D9795BABC7 - -I=44 -KEY=33FAE356C0C96F17A83C130C3982B46319D72B5B4C9355A1 -IV=2C0004064936696B10D039D9795BABC7 -PT=4181525880CA468909D28147FB1A5E3A -CT=79F193EB9A9A48464FF007D73E9B4106 - -I=45 -KEY=2136A7940C9B9FAFD1CD80E7A318FC2556272C8C720814A7 -IV=79F193EB9A9A48464FF007D73E9B4106 -PT=2899D75DFB84950E12CC44C2CC52F0B8 -CT=DA12307CE9A6BA0FCE5A76AE1747E619 - -I=46 -KEY=0C839679750274320BDFB09B4ABE462A987D5A22654FF2BE -IV=DA12307CE9A6BA0FCE5A76AE1747E619 -PT=2C71B8623CA5BF292DB531ED7999EB9D -CT=A59997FA19B58BC71CB05E7140386C94 - -I=47 -KEY=4D3CDB92797645C1AE462761530BCDED84CD045325779E2A -IV=A59997FA19B58BC71CB05E7140386C94 -PT=63F4FC202A1B921241BF4DEB0C7431F3 -CT=49E65D7422398035DD1E4EBAD37C699D - -I=48 -KEY=38082D7CC27EBABBE7A07A1571324DD859D34AE9F60BF7B7 -IV=49E65D7422398035DD1E4EBAD37C699D -PT=7F0E2FD5D4B5A0CB7534F6EEBB08FF7A -CT=64DF24483FC73174FB6482A6E2B895E0 - -I=49 -KEY=1557398CFBFF31F8837F5E5D4EF57CACA2B7C84F14B36257 -IV=64DF24483FC73174FB6482A6E2B895E0 -PT=0F525FCF2A1E3D612D5F14F039818B43 -CT=028880CC8AA1B92CB807F1102663E658 - -I=50 -KEY=229C31F1D34A529581F7DE91C454C5801AB0395F32D0840F -IV=028880CC8AA1B92CB807F1102663E658 -PT=219604B99FF2BE7B37CB087D28B5636D -CT=FAC8B66D1BA7849392CC235D0276110E - -I=51 -KEY=C75DE76D40D536277B3F68FCDFF34113887C1A0230A69501 -IV=FAC8B66D1BA7849392CC235D0276110E -PT=3319C80C038E565FE5C1D69C939F64B2 -CT=79770F286419EEFD855868EC4ADF3775 - -I=52 -KEY=5F0B08B451490B27024867D4BBEAAFEE0D2472EE7A79A274 -IV=79770F286419EEFD855868EC4ADF3775 -PT=E173A8580816CAFA9856EFD9119C3D00 -CT=FC0AA487B09DF657DB58DBF83E13E137 - -I=53 -KEY=E86E8BFBF1D65541FE42C3530B7759B9D67CA916446A4343 -IV=FC0AA487B09DF657DB58DBF83E13E137 -PT=01274C45F202C22CB765834FA09F5E66 -CT=9691EA44FC67CA29E50E7FF7DBC4D0CA - -I=54 -KEY=7849550CA6CCD87268D32917F71093903372D6E19FAE9389 -IV=9691EA44FC67CA29E50E7FF7DBC4D0CA -PT=026BD493499B7BA99027DEF7571A8D33 -CT=5206F7CF45A59FD6444CCBB6B034CF45 - -I=55 -KEY=52D81D6104DBF6DF3AD5DED8B2B50C46773E1D572F9A5CCC -IV=5206F7CF45A59FD6444CCBB6B034CF45 -PT=33CA15B3D921E7752A91486DA2172EAD -CT=F4A41D18E3EF9DE46917BADB1B5EC613 - -I=56 -KEY=36FB680165ABD632CE71C3C0515A91A21E29A78C34C49ADF -IV=F4A41D18E3EF9DE46917BADB1B5EC613 -PT=65F3084285AA869464237560617020ED -CT=6C4154D3245D2546979118A36120A911 - -I=57 -KEY=6E7548B98AA0640AA23097137507B4E489B8BF2F55E433CE -IV=6C4154D3245D2546979118A36120A911 -PT=6CF540F502D90886588E20B8EF0BB238 -CT=2A52376A7E494ADEDD53A416F73FE9C0 - -I=58 -KEY=A0D840A0E3CC1EA58862A0790B4EFE3A54EB1B39A2DBDA0E -IV=2A52376A7E494ADEDD53A416F73FE9C0 -PT=708AE2375F305572CEAD0819696C7AAF -CT=7A0EF052184147EA279839380B3DBB32 - -I=59 -KEY=153CF68E4A1C1FCEF26C502B130FB9D073732201A9E6613C -IV=7A0EF052184147EA279839380B3DBB32 -PT=A8267215107D3DD0B5E4B62EA9D0016B -CT=F193B80D57571F94A4F5373149163AA1 - -I=60 -KEY=E0B0657A66C37D8703FFE8264458A644D7861530E0F05B9D -IV=F193B80D57571F94A4F5373149163AA1 -PT=EE4B04302CB02990F58C93F42CDF6249 -CT=A28E99815C930AC05ADA4524A7E5968C - -I=61 -KEY=94760F8A93926E4DA17171A718CBAC848D5C50144715CD11 -IV=A28E99815C930AC05ADA4524A7E5968C -PT=34D122B717CBA59174C66AF0F55113CA -CT=6F9342E7915613450E823EC9A781DAA3 - -I=62 -KEY=0B352460A1579376CEE23340899DBFC183DE6EDDE09417B2 -IV=6F9342E7915613450E823EC9A781DAA3 -PT=D8689ED21F3EA8E29F432BEA32C5FD3B -CT=584BB944532A830F7F8DCDBE42E7DBFC - -I=63 -KEY=999A5CEB73DFCC1796A98A04DAB73CCEFC53A363A273CC4E -IV=584BB944532A830F7F8DCDBE42E7DBFC -PT=4E87F73D46D0C0AF92AF788BD2885F61 -CT=4AC372A4D3273C71F69D50168A9235A1 - -I=64 -KEY=42C59FFD5AA69C11DC6AF8A0099000BF0ACEF37528E1F9EF -IV=4AC372A4D3273C71F69D50168A9235A1 -PT=324DC9C2D34E95F9DB5FC31629795006 -CT=60E53CC2D5E4900D48A0C5F7EE3BC810 - -I=65 -KEY=843EBDEF0CEEBA5BBC8FC462DC7490B2426E3682C6DA31FF -IV=60E53CC2D5E4900D48A0C5F7EE3BC810 -PT=8B94F018A7115B3AC6FB22125648264A -CT=4BD7DF7DFD03A24809B751F59FACF417 - -I=66 -KEY=98E40853FA954FF5F7581B1F217732FA4BD967775976C5E8 -IV=4BD7DF7DFD03A24809B751F59FACF417 -PT=109C734AC21ED2631CDAB5BCF67BF5AE -CT=B7A3CF7E58A413C5065E9CFD23C750F9 - -I=67 -KEY=5419462C5329544A40FBD46179D3213F4D87FB8A7AB19511 -IV=B7A3CF7E58A413C5065E9CFD23C750F9 -PT=8CA507ACCDB3A793CCFD4E7FA9BC1BBF -CT=6285C3D0FD2645192C5DD046D73414CE - -I=68 -KEY=B58628819840885D227E17B184F5642661DA2BCCAD8581DF -IV=6285C3D0FD2645192C5DD046D73414CE -PT=7DE48BAD03BB9F53E19F6EADCB69DC17 -CT=583FBCEB09646CEC19D00620E5455FD5 - -I=69 -KEY=73F7F00EF22ED1B07A41AB5A8D9108CA780A2DEC48C0DE0A -IV=583FBCEB09646CEC19D00620E5455FD5 -PT=126D3F2A0BC1B168C671D88F6A6E59ED -CT=886A5273055AF7AE37EFB726DC90FD9E - -I=70 -KEY=69735F80F0B876DAF22BF92988CBFF644FE59ACA94502394 -IV=886A5273055AF7AE37EFB726DC90FD9E -PT=0B4D3F58D83D866A1A84AF8E0296A76A -CT=FD068F02BB6C2611EF78CD963EF2F78F - -I=71 -KEY=92E5FF32D46494880F2D762B33A7D975A09D575CAAA2D41B -IV=FD068F02BB6C2611EF78CD963EF2F78F -PT=705667CBCC87BF3DFB96A0B224DCE252 -CT=34713FD3FA07F0B3F94EC0FB17BB465F - -I=72 -KEY=A0DF9DCB873A1ADC3B5C49F8C9A029C659D397A7BD199244 -IV=34713FD3FA07F0B3F94EC0FB17BB465F -PT=4BF66F55275D6CB3323A62F9535E8E54 -CT=82C8A179661207B7FE178A266C607074 - -I=73 -KEY=2D1604ADAA49C3FBB994E881AFB22E71A7C41D81D179E230 -IV=82C8A179661207B7FE178A266C607074 -PT=167203BBB933707A8DC999662D73D927 -CT=DCDBCC8D11C632CB220C6E95B399A1CC - -I=74 -KEY=7D2C4B0C0D0B001A654F240CBE741CBA85C8731462E043FC -IV=DCDBCC8D11C632CB220C6E95B399A1CC -PT=668F998350BDA831503A4FA1A742C3E1 -CT=8827EBFCB24470266D5C0BA05D5974A4 - -I=75 -KEY=BE3A4CF21186C2C7ED68CFF00C306C9CE89478B43FB93758 -IV=8827EBFCB24470266D5C0BA05D5974A4 -PT=B8D1D48F3C41094EC31607FE1C8DC2DD -CT=61E59DECE1AEFFDEB9B216828953D70F - -I=76 -KEY=D0CE372842DC32508C8D521CED9E934251266E36B6EAE057 -IV=61E59DECE1AEFFDEB9B216828953D70F -PT=49A4495257D08AA56EF47BDA535AF097 -CT=ECD04FFB385CCC1D13C312A5C31810DE - -I=77 -KEY=E7274C14C4163169605D1DE7D5C25F5F42E57C9375F2F089 -IV=ECD04FFB385CCC1D13C312A5C31810DE -PT=3EED6F60FD9050A737E97B3C86CA0339 -CT=D9C90455AFBF5465F89752FB6F60BDFF - -I=78 -KEY=71E35A00CAFB898BB99419B27A7D0B3ABA722E681A924D76 -IV=D9C90455AFBF5465F89752FB6F60BDFF -PT=5CE6E7F07945191396C416140EEDB8E2 -CT=F6E795B326CFD6CCC0E230E4FE770878 - -I=79 -KEY=79DFA388989B29204F738C015CB2DDF67A901E8CE4E5450E -IV=F6E795B326CFD6CCC0E230E4FE770878 -PT=314A5784B7909F89083CF9885260A0AB -CT=6B3A00F05F79F25E4E9EDA81034A9B7B - -I=80 -KEY=75F6D5983AE6D7AC24498CF103CB2FA8340EC40DE7AFDE75 -IV=6B3A00F05F79F25E4E9EDA81034A9B7B -PT=DEC42B1A6184FDF80C297610A27DFE8C -CT=6A19BEA8826427E309BD55BCBBE246B4 - -I=81 -KEY=E47EEE65549BF1634E50325981AF084B3DB391B15C4D98C1 -IV=6A19BEA8826427E309BD55BCBBE246B4 -PT=63C46CFF49FF13B291883BFD6E7D26CF -CT=738C0B0E580C0B1ED488DDE8502CB754 - -I=82 -KEY=E6DBE45547556F403DDC3957D9A30355E93B4C590C612F95 -IV=738C0B0E580C0B1ED488DDE8502CB754 -PT=E951F5C902BD351502A50A3013CE9E23 -CT=389E33F3DAB3FAB7B2ACB853C0150B8D - -I=83 -KEY=EBA5A1BDF9FC558905420AA40310F9E25B97F40ACC742418 -IV=389E33F3DAB3FAB7B2ACB853C0150B8D -PT=54EFC45B4036B60D0D7E45E8BEA93AC9 -CT=EACAE8A4B5CCBDB28ED2162670DBD4B1 - -I=84 -KEY=B570945030615F75EF88E200B6DC4450D545E22CBCAFF0A9 -IV=EACAE8A4B5CCBDB28ED2162670DBD4B1 -PT=7F3BA6FE23AE45665ED535EDC99D0AFC -CT=535FEA61623ECD22FA1A95BF95320252 - -I=85 -KEY=F332D3DE8556F82EBCD70861D4E289722F5F7793299DF2FB -IV=535FEA61623ECD22FA1A95BF95320252 -PT=8FEB6943B22437D34642478EB537A75B -CT=CD23D928E1D3221E4D3C51670C071276 - -I=86 -KEY=1402D325D7EBA90871F4D1493531AB6C626326F4259AE08D -IV=CD23D928E1D3221E4D3C51670C071276 -PT=8B01EE4509B58B49E73000FB52BD5126 -CT=56DC7F1BE2CC26A369B3BCA71BF8FAB8 - -I=87 -KEY=389C95DC5BF411B62728AE52D7FD8DCF0BD09A533E621A35 -IV=56DC7F1BE2CC26A369B3BCA71BF8FAB8 -PT=9BFE561402B07B4C2C9E46F98C1FB8BE -CT=A059CFB443009F0ACD8E5051BD16C837 - -I=88 -KEY=89180FBFF0A12019877161E694FD12C5C65ECA028374D202 -IV=A059CFB443009F0ACD8E5051BD16C837 -PT=C8D55810C7A22E30B1849A63AB5531AF -CT=62CEB7D9A6D23B40CFD75990D1040BA4 - -I=89 -KEY=08BE01CF1E620DBEE5BFD63F322F2985098993925270D9A6 -IV=62CEB7D9A6D23B40CFD75990D1040BA4 -PT=F888764A970B03BC81A60E70EEC32DA7 -CT=F6D89003ABBF003AF013EB221AF17F99 - -I=90 -KEY=5EB9AC53FC544ADE1367463C999029BFF99A78B04881A63F -IV=F6D89003ABBF003AF013EB221AF17F99 -PT=26A25CFC1E699D8B5607AD9CE2364760 -CT=74C9E920DC16396E89774B82E7803EF5 - -I=91 -KEY=D8FAD6E8CDC96CEF67AEAF1C458610D170ED3332AF0198CA -IV=74C9E920DC16396E89774B82E7803EF5 -PT=76AFDD045A30FAA486437ABB319D2631 -CT=A5B997689B88AAC0611C2963C8C1B7CE - -I=92 -KEY=7E774E64A5F209B2C2173874DE0EBA1111F11A5167C02F04 -IV=A5B997689B88AAC0611C2963C8C1B7CE -PT=ABF525144D3415DEA68D988C683B655D -CT=7A2F39D97547C3CD336577E41C0483ED - -I=93 -KEY=0406C21AE6E015E0B83801ADAB4979DC22946DB57BC4ACE9 -IV=7A2F39D97547C3CD336577E41C0483ED -PT=E0C2466426630D1B7A718C7E43121C52 -CT=67899F7D0890E90383C05A7984604241 - -I=94 -KEY=D9249A4AFDF40BEADFB19ED0A3D990DFA15437CCFFA4EEA8 -IV=67899F7D0890E90383C05A7984604241 -PT=07E55341FCD016D7DD2258501B141E0A -CT=7B1CBCD270B09E9A1D15714D8366D174 - -I=95 -KEY=B2242464CD4D2448A4AD2202D3690E45BC4146817CC23FDC -IV=7B1CBCD270B09E9A1D15714D8366D174 -PT=25C6E62F44ABFF406B00BE2E30B92FA2 -CT=C86E27E5CA4461CE656D893A16477966 - -I=96 -KEY=602CDF824C043C836CC305E7192D6F8BD92CCFBB6A8546BA -IV=C86E27E5CA4461CE656D893A16477966 -PT=3F9D262E375F057BD208FBE6814918CB -CT=8129054CF746CB79112942AE35142E4D - -I=97 -KEY=73F82C9EE4B4D0E8EDEA00ABEE6BA4F2C8058D155F9168F7 -IV=8129054CF746CB79112942AE35142E4D -PT=7BC798EAC4C17B2D13D4F31CA8B0EC6B -CT=36F21910B1677AF19586E55E360FB8DD - -I=98 -KEY=E5FC538A60CC29A3DB1819BB5F0CDE035D83684B699ED02A -IV=36F21910B1677AF19586E55E360FB8DD -PT=D3E39037253E5BAA96047F148478F94B -CT=BA7CE80E0853D264368EE61D8E71EEBE - -I=99 -KEY=D9381EF81441B6C16164F1B5575F0C676B0D8E56E7EF3E94 -IV=BA7CE80E0853D264368EE61D8E71EEBE -PT=DE4FFDFADB81FABB3CC44D72748D9F62 -CT=971AD82D1F46F1087B37103B4BE5DD8C - -I=100 -KEY=A0BF8B4740D929C9F67E29984819FD6F103A9E6DAC0AE318 -IV=971AD82D1F46F1087B37103B4BE5DD8C -PT=FE6355B5D860522B798795BF54989F08 -CT=D17268155EE586F352BB031929441700 - -I=101 -KEY=477A0AB591FFEC5C270C418D16FC7B9C42819D74854EF418 -IV=D17268155EE586F352BB031929441700 -PT=166A50EEE05F4A39E7C581F2D126C595 -CT=2CD84FB5B587BE8B04638A9EDBA17AE2 - -I=102 -KEY=50005B4C4B11BFB20BD40E38A37BC51746E217EA5EEF8EFA -IV=2CD84FB5B587BE8B04638A9EDBA17AE2 -PT=1296DC2C1741EB2A177A51F9DAEE53EE -CT=8C2A5A31951FB2D9E8D35CD3C007B8B3 - -I=103 -KEY=E1E88DDBA5D849DF87FE5409366477CEAE314B399EE83649 -IV=8C2A5A31951FB2D9E8D35CD3C007B8B3 -PT=57C5E1A070E3C2AEB1E8D697EEC9F66D -CT=AA9E935BA264C9FD0C07072AF8499CD7 - -I=104 -KEY=D465F0FB195068CF2D60C7529400BE33A2364C1366A1AA9E -IV=AA9E935BA264C9FD0C07072AF8499CD7 -PT=77D0522670E00BD7358D7D20BC882110 -CT=A22DF6CE12C75FB99F5159A1E3E4249F - -I=105 -KEY=4DEB1B5E6398E4AD8F4D319C86C7E18A3D6715B285458E01 -IV=A22DF6CE12C75FB99F5159A1E3E4249F -PT=D6F96D22896A2574998EEBA57AC88C62 -CT=B356102A9158C569469E61093146B9F0 - -I=106 -KEY=D73E5CA946860BDD3C1B21B6179F24E37BF974BBB40337F1 -IV=B356102A9158C569469E61093146B9F0 -PT=2E72F61FC21F57A09AD547F7251EEF70 -CT=AB2BABFB88D3C3ACE4CBA81E0E250AD3 - -I=107 -KEY=6B592CE635873DE197308A4D9F4CE74F9F32DCA5BA263D22 -IV=AB2BABFB88D3C3ACE4CBA81E0E250AD3 -PT=39B02C01155705C9BC67704F7301363C -CT=8A4AC90E9095479F3C02DE7B08C01F1C - -I=108 -KEY=1026EE98CAC684081D7A43430FD9A0D0A33002DEB2E6223E -IV=8A4AC90E9095479F3C02DE7B08C01F1C -PT=14F49DBECEE88DBB7B7FC27EFF41B9E9 -CT=62E4E3C43938D014D90C4A1D8CD09639 - -I=109 -KEY=20972278E7C0FFC17F9EA08736E170C47A3C48C33E36B407 -IV=62E4E3C43938D014D90C4A1D8CD09639 -PT=56EFB0EA336A674930B1CCE02D067BC9 -CT=5E8EB865BFC1999D57A67280E37CA129 - -I=110 -KEY=2BEE1A1965A7F17C211018E28920E9592D9A3A43DD4A152E -IV=5E8EB865BFC1999D57A67280E37CA129 -PT=9CF6F073F2F0C7CB0B79386182670EBD -CT=D3B98A4562FAB47ED3D09C55E75EE51B - -I=111 -KEY=EB85E491647FD6ACF2A992A7EBDA5D27FE4AA6163A14F035 -IV=D3B98A4562FAB47ED3D09C55E75EE51B -PT=61964EF472752F21C06BFE8801D827D0 -CT=CF3D65AEEDD747416AF436A3B909828F - -I=112 -KEY=E94E6286941EC36D3D94F709060D1A6694BE90B5831D72BA -IV=CF3D65AEEDD747416AF436A3B909828F -PT=6C0B536EA1099A4202CB8617F06115C1 -CT=5DB0625B34C01C47490B5200E8A205FC - -I=113 -KEY=F5D756E568CA6BA06024955232CD0621DDB5C2B56BBF7746 -IV=5DB0625B34C01C47490B5200E8A205FC -PT=08D5CD9945D190AB1C993463FCD4A8CD -CT=771B5C66F79E262FAAC6F92F128669CB - -I=114 -KEY=462C74E6E222DE77173FC934C553200E77733B9A79391E8D -IV=771B5C66F79E262FAAC6F92F128669CB -PT=5628EC55D7AB7634B3FB22038AE8B5D7 -CT=31C436E7CA7343A93AA0B74A38CCDAC0 - -I=115 -KEY=5062F2489F4C68FE26FBFFD30F2063A74DD38CD041F5C44D -IV=31C436E7CA7343A93AA0B74A38CCDAC0 -PT=F279C45DBD75C458164E86AE7D6EB689 -CT=845320B41FD6F1D4DBB36D19D8A4A268 - -I=116 -KEY=5A27EC509FED17B6A2A8DF6710F692739660E1C999516625 -IV=845320B41FD6F1D4DBB36D19D8A4A268 -PT=7C0CB5E4FFE703260A451E1800A17F48 -CT=D8F9FB52BE1B342D6FBBB8A7FCDEFD89 - -I=117 -KEY=E925EC8E99BF11E97A512435AEEDA65EF9DB596E658F9BAC -IV=D8F9FB52BE1B342D6FBBB8A7FCDEFD89 -PT=187F3648643AF8E6B30200DE0652065F -CT=240647A32D765031C79D8893CC19EBA9 - -I=118 -KEY=5574034BCE64FADD5E576396839BF66F3E46D1FDA9967005 -IV=240647A32D765031C79D8893CC19EBA9 -PT=AF808097E0C68C8FBC51EFC557DBEB34 -CT=2A3805A7D773F9C00635779752C9CCE7 - -I=119 -KEY=D842A9983BBDAA5E746F663154E80FAF3873A66AFB5FBCE2 -IV=2A3805A7D773F9C00635779752C9CCE7 -PT=D44486CCC61C68588D36AAD3F5D95083 -CT=2219F0C7A805BEC4A4931F84CBFFC598 - -I=120 -KEY=CD622302BD70E2CD567696F6FCEDB16B9CE0B9EE30A0797A -IV=2219F0C7A805BEC4A4931F84CBFFC598 -PT=67DA1BC4F2BC2F3315208A9A86CD4893 -CT=8B1F4353CF6969888BBD6654AB65C2A8 - -I=121 -KEY=80A1D0CA7667F291DD69D5A53384D8E3175DDFBA9BC5BBD2 -IV=8B1F4353CF6969888BBD6654AB65C2A8 -PT=D114FDA8E61BEAC44DC3F3C8CB17105C -CT=B6F0C0F016A1FA033C37D1128D9B2EF3 - -I=122 -KEY=2C9B755C3B8B44416B991555252522E02B6A0EA8165E9521 -IV=B6F0C0F016A1FA033C37D1128D9B2EF3 -PT=738DBCE3EE7E70EAAC3AA5964DECB6D0 -CT=14FB0A67CB0729CA25152581D8C3FEEF - -I=123 -KEY=5D05BDFBF482E4D37F621F32EE220B2A0E7F2B29CE9D6BCE -IV=14FB0A67CB0729CA25152581D8C3FEEF -PT=D3186497981F294B719EC8A7CF09A092 -CT=14C988C52C7ED50EBD10219F1F58C213 - -I=124 -KEY=9E044D195FA8557C6BAB97F7C25CDE24B36F0AB6D1C5A9DD -IV=14C988C52C7ED50EBD10219F1F58C213 -PT=C062585284FDE540C301F0E2AB2AB1AF -CT=1FE7E153E69F95F102624ACEB9067FA1 - -I=125 -KEY=2B116B6F1FD581C6744C76A424C34BD5B10D407868C3D67C -IV=1FE7E153E69F95F102624ACEB9067FA1 -PT=F18294D40CAA674DB5152676407DD4BA -CT=AB43B2C61C9F23B96EFE293C6730A98F - -I=126 -KEY=EAF1AFBDD2CEDB9ADF0FC462385C686CDFF369440FF37FF3 -IV=AB43B2C61C9F23B96EFE293C6730A98F -PT=7D465730C5422413C1E0C4D2CD1B5A5C -CT=B1413F447CA81C678287EE2366544547 - -I=127 -KEY=4FA6C7DA7A84D4CB6E4EFB2644F4740B5D74876769A73AB4 -IV=B1413F447CA81C678287EE2366544547 -PT=C7BFA1BFA26828F7A5576867A84A0F51 -CT=7AE90F988557F3A41BBDB4B69C5FF56A - -I=128 -KEY=C9B0E3C7CEF4003014A7F4BEC1A387AF46C933D1F5F8CFDE -IV=7AE90F988557F3A41BBDB4B69C5FF56A -PT=5173C32806105AD18616241DB470D4FB -CT=F2EF675645D284F042FAEBE87AE3ECAE - -I=129 -KEY=DB855274F6CC030BE64893E88471035F0433D8398F1B2370 -IV=F2EF675645D284F042FAEBE87AE3ECAE -PT=6DF6B7F917B2F8431235B1B33838033B -CT=30D4F068BC2FDEC79CF81A4FA641A495 - -I=130 -KEY=F37DBF11472A4F87D69C6380385EDD9898CBC276295A87E5 -IV=30D4F068BC2FDEC79CF81A4FA641A495 -PT=F4C98D268B7D175728F8ED65B1E64C8C -CT=0CEB234560B935E5B08C7EA2AA4A962D - -I=131 -KEY=1A2F5A0827B2F861DA7740C558E7E87D2847BCD4831011C8 -IV=0CEB234560B935E5B08C7EA2AA4A962D -PT=9873E312B815DC81E952E5196098B7E6 -CT=7BED84EFC02836F6D165AD27DEEF2B21 - -I=132 -KEY=9C815F2A4EC42D02A19AC42A98CFDE8BF92211F35DFF3AE9 -IV=7BED84EFC02836F6D165AD27DEEF2B21 -PT=D8765DE55131DC4186AE05226976D563 -CT=C36FEDCB97DA734243A20C49D5942DD1 - -I=133 -KEY=9A12CC40F3C185AA62F529E10F15ADC9BA801DBA886B1738 -IV=C36FEDCB97DA734243A20C49D5942DD1 -PT=18B252CEB124BD110693936ABD05A8A8 -CT=94C9A6BDB97522FACEE2E869C3C48FB0 - -I=134 -KEY=F08C23DDC110ED40F63C8F5CB6608F337462F5D34BAF9888 -IV=94C9A6BDB97522FACEE2E869C3C48FB0 -PT=154FF810E3F0CE586A9EEF9D32D168EA -CT=AFC8D15F80F19F942FCA22DA0DF79937 - -I=135 -KEY=B1224FF7293C5DC559F45E03369110A75BA8D709465801BF -IV=AFC8D15F80F19F942FCA22DA0DF79937 -PT=259A6B069CA3273C41AE6C2AE82CB085 -CT=5AADC1716B2ED4FC7CA9825A32EA2FB1 - -I=136 -KEY=D29A829813CC5B4103599F725DBFC45B2701555374B22E0E -IV=5AADC1716B2ED4FC7CA9825A32EA2FB1 -PT=CB78C574D9B1B9EF63B8CD6F3AF00684 -CT=EACB8D3001640F340DFB459CD8D162BD - -I=137 -KEY=1049116DD39F7B30E99212425CDBCB6F2AFA10CFAC634CB3 -IV=EACB8D3001640F340DFB459CD8D162BD -PT=DF461D135DE19FA2C2D393F5C0532071 -CT=9115EB33739C04AAE22765621A8852C5 - -I=138 -KEY=A129CBBF89658D977887F9712F47CFC5C8DD75ADB6EB1E76 -IV=9115EB33739C04AAE22765621A8852C5 -PT=E32AF908A190B95FB160DAD25AFAF6A7 -CT=B171D8AC24C6873B54F42D5DAC51ED34 - -I=139 -KEY=EE7226D88DFA48DFC9F621DD0B8148FE9C2958F01ABAF342 -IV=B171D8AC24C6873B54F42D5DAC51ED34 -PT=0A669BB00E2123B54F5BED67049FC548 -CT=CFFC81B70593A36D022248D1CBE7FC58 - -I=140 -KEY=C907918503B2C1C0060AA06A0E12EB939E0B1021D15D0F1A -IV=CFFC81B70593A36D022248D1CBE7FC58 -PT=E9B1E6FA006D4CEE2775B75D8E48891F -CT=0B3B02FC8A8D677B8077D7FDF9EB0396 - -I=141 -KEY=E468A0560DB602C10D31A296849F8CE81E7CC7DC28B60C8C -IV=0B3B02FC8A8D677B8077D7FDF9EB0396 -PT=AA3626C69662AE442D6F31D30E04C301 -CT=2C78C31D4B2EBAEF54CB6D04C4375196 - -I=142 -KEY=EB8BCD80D3E35CCB2149618BCFB136074AB7AAD8EC815D1A -IV=2C78C31D4B2EBAEF54CB6D04C4375196 -PT=5017BD9EB52514180FE36DD6DE555E0A -CT=67D2DD54A0881186DFA6A608C036CE61 - -I=143 -KEY=7065D92686BA37E9469BBCDF6F39278195110CD02CB7937B -IV=67D2DD54A0881186DFA6A608C036CE61 -PT=6CBC1C2DAA3A7F7B9BEE14A655596B22 -CT=62163C88A40E7CFF7522A3DC32F30BCF - -I=144 -KEY=E0B4AE9D6C9A5A92248D8057CB375B7EE033AF0C1E4498B4 -IV=62163C88A40E7CFF7522A3DC32F30BCF -PT=0F6C44EE5E2587A790D177BBEA206D7B -CT=B84A631DE451F109C48785DE3D4099C2 - -I=145 -KEY=DDCDB4F73AA0C8789CC7E34A2F66AA7724B42AD223040176 -IV=B84A631DE451F109C48785DE3D4099C2 -PT=EE1EA5C5340C2F263D791A6A563A92EA -CT=D438E983DB81DA9341CE1AC45F4E7E52 - -I=146 -KEY=813604E941CBDF6448FF0AC9F4E770E4657A30167C4A7F24 -IV=D438E983DB81DA9341CE1AC45F4E7E52 -PT=08E1F94874432DBD5CFBB01E7B6B171C -CT=0E1C069CB75D4EDF4243D1E6D7175425 - -I=147 -KEY=D64EB9DE5A3B546B46E30C5543BA3E3B2739E1F0AB5D2B01 -IV=0E1C069CB75D4EDF4243D1E6D7175425 -PT=CFCDC1C0EFE678FB5778BD371BF08B0F -CT=CBC0ED542E26A1943926EF7897A79E97 - -I=148 -KEY=D1659785D1D551948D23E1016D9C9FAF1E1F0E883CFAB596 -IV=CBC0ED542E26A1943926EF7897A79E97 -PT=1FEA178A348CAE8B072B2E5B8BEE05FF -CT=C743A7B60EB7C24867DA82AFF15ED18A - -I=149 -KEY=05786C3E1FBE51864A6046B7632B5DE779C58C27CDA4641C -IV=C743A7B60EB7C24867DA82AFF15ED18A -PT=3A4EF6696CD26875D41DFBBBCE6B0012 -CT=EA23014227CF7B563AEFF86DB947FAC4 - -I=150 -KEY=CE1E5D5BF32BF0CAA04347F544E426B1432A744A74E39ED8 -IV=EA23014227CF7B563AEFF86DB947FAC4 -PT=DFDF9B4032986E90CB663165EC95A14C -CT=EAF762B60A106C03B76742E69CEE385A - -I=151 -KEY=F8EAC01B3F7E925A4AB425434EF44AB2F44D36ACE80DA682 -IV=EAF762B60A106C03B76742E69CEE385A -PT=2BDC6EAB1D86311D36F49D40CC556290 -CT=E6CC0491C3509240ED848AE304CC3385 - -I=152 -KEY=BF5AE8B244244B4BAC7821D28DA4D8F219C9BC4FECC19507 -IV=E6CC0491C3509240ED848AE304CC3385 -PT=81D4E28E02717AB347B028A97B5AD911 -CT=11EE9D22AC798AB5FEF6C6188845F425 - -I=153 -KEY=5C6538235111334FBD96BCF021DD5247E73F7A5764846122 -IV=11EE9D22AC798AB5FEF6C6188845F425 -PT=DDE402413BB09DFBE33FD09115357804 -CT=3F054911089500FD2CD0645DBFE2A8D3 - -I=154 -KEY=FAC914FA6B6CA1AB8293F5E1294852BACBEF1E0ADB66C9F1 -IV=3F054911089500FD2CD0645DBFE2A8D3 -PT=345343E023AC39FFA6AC2CD93A7D92E4 -CT=7538E78DE8FC09D203010C61422E6B5A - -I=155 -KEY=1E62F54271EA4374F7AB126CC1B45B68C8EE126B9948A2AB -IV=7538E78DE8FC09D203010C61422E6B5A -PT=0EC4357C476EB76AE4ABE1B81A86E2DF -CT=3A4D0093A2B7FF807BAA6A815538507E - -I=156 -KEY=5AD3B884BE5653BBCDE612FF6303A4E8B34478EACC70F2D5 -IV=3A4D0093A2B7FF807BAA6A815538507E -PT=F59FD86893B7DF7244B14DC6CFBC10CF -CT=2C2FD7DF94FDDC2CA1C05EF5878583FF - -I=157 -KEY=B9039E1678902ECCE1C9C520F7FE78C41284261F4BF5712A -IV=2C2FD7DF94FDDC2CA1C05EF5878583FF -PT=4600E6CCD65B575AE3D02692C6C67D77 -CT=59C9FA2E4A2227C3E5B831899A3CCBFD - -I=158 -KEY=394A8245256D72B8B8003F0EBDDC5F07F73C1796D1C9BAD7 -IV=59C9FA2E4A2227C3E5B831899A3CCBFD -PT=3030D8E24F7BEA0580491C535DFD5C74 -CT=DEAFC4A07A3FB5D5AA09FF6A2515AB4A - -I=159 -KEY=2496931DFCFF2E7166AFFBAEC7E3EAD25D35E8FCF4DC119D -IV=DEAFC4A07A3FB5D5AA09FF6A2515AB4A -PT=63CD1CC241B267791DDC1158D9925CC9 -CT=B1B0AED275FCE241B5726E943B37C130 - -I=160 -KEY=53CBA419E5CED1C8D71F557CB21F0893E8478668CFEBD0AD -IV=B1B0AED275FCE241B5726E943B37C130 -PT=85F4E06A05C8704A775D37041931FFB9 -CT=B0DFD3EF3AF538791E69AF59CAA7B8CC - -I=161 -KEY=DFB0E5440EB582F667C0869388EA30EAF62E2931054C6861 -IV=B0DFD3EF3AF538791E69AF59CAA7B8CC -PT=B7BDA6C504797C8B8C7B415DEB7B533E -CT=220F810B0D5A9ED8794932D0BF6150D6 - -I=162 -KEY=B26A70894070BC9B45CF079885B0AE328F671BE1BA2D38B7 -IV=220F810B0D5A9ED8794932D0BF6150D6 -PT=0113567BFAC19EB86DDA95CD4EC53E6D -CT=56C77682CA1A041B312061F3FB9A1A59 - -I=163 -KEY=36EDA74B7133D5871308711A4FAAAA29BE477A1241B722EE -IV=56C77682CA1A041B312061F3FB9A1A59 -PT=4D39AD87258968FA8487D7C23143691C -CT=4F18208E63B2D84CC7A0707617DD7B63 - -I=164 -KEY=F7589312CE997AFE5C1051942C18726579E70A64566A598D -IV=4F18208E63B2D84CC7A0707617DD7B63 -PT=1B82F5C849E0F965C1B53459BFAAAF79 -CT=85CE0310DEFB36474B38C4347D7EEE8B - -I=165 -KEY=F770FC7B1E183E31D9DE5284F2E3442232DFCE502B14B706 -IV=85CE0310DEFB36474B38C4347D7EEE8B -PT=7B56EBC47E780FB000286F69D08144CF -CT=CB5AE674DB1426618F577BBD63309EA4 - -I=166 -KEY=79AD3040CCC9FD521284B4F029F76243BD88B5ED482429A2 -IV=CB5AE674DB1426618F577BBD63309EA4 -PT=47A5B213BC3DF61B8EDDCC3BD2D1C363 -CT=1E26AB2D8B156913995FCAC1ABD99D68 - -I=167 -KEY=10BB9597F823B61F0CA21FDDA2E20B5024D77F2CE3FDB4CA -IV=1E26AB2D8B156913995FCAC1ABD99D68 -PT=D31FC11C9FD6E7F86916A5D734EA4B4D -CT=84E0E24F155E5EFCA9AE9C5F2F26BD25 - -I=168 -KEY=E1264A2AD33800FF8842FD92B7BC55AC8D79E373CCDB09EF -IV=84E0E24F155E5EFCA9AE9C5F2F26BD25 -PT=F77FE11AE4BEB403F19DDFBD2B1BB6E0 -CT=B41973B0D807A43A822EB57555B818D4 - -I=169 -KEY=A19ABDD25ED272693C5B8E226FBBF1960F5756069963113B -IV=B41973B0D807A43A822EB57555B818D4 -PT=FECAAA8EA9C1883640BCF7F88DEA7296 -CT=949634E68FB9086AE623EAF5E867D4A5 - -I=170 -KEY=DD904ECCC94F64D0A8CDBAC4E002F9FCE974BCF37104C59E -IV=949634E68FB9086AE623EAF5E867D4A5 -PT=E8A413C2ADB97D387C0AF31E979D16B9 -CT=96BE2B618F8A961E5DC892F429A8B6FC - -I=171 -KEY=1B83C20396D7D0D33E7391A56F886FE2B4BC2E0758AC7362 -IV=96BE2B618F8A961E5DC892F429A8B6FC -PT=1408434BF0C3432BC6138CCF5F98B403 -CT=C0A9596F56E48F459D2C405F47DCA44C - -I=172 -KEY=B04C71DBEA60DB15FEDAC8CA396CE0A729906E581F70D72E -IV=C0A9596F56E48F459D2C405F47DCA44C -PT=5E7F070C7EE8A852ABCFB3D87CB70BC6 -CT=A4739C93911C72C959E89544500843BD - -I=173 -KEY=9BFC8026BC1D965B5AA95459A870926E7078FB1C4F789493 -IV=A4739C93911C72C959E89544500843BD -PT=718C23D1F537A6E72BB0F1FD567D4D4E -CT=4D581200B1E446CC3AD306138BF2898B - -I=174 -KEY=FEA9DF8F4FECB3ED17F146591994D4A24AABFD0FC48A1D18 -IV=4D581200B1E446CC3AD306138BF2898B -PT=E4DD231D871795E065555FA9F3F125B6 -CT=E53EFC19D8048073167B1473C5EBA6D9 - -I=175 -KEY=62DF036D6F96D937F2CFBA40C19054D15CD0E97C0161BBC1 -IV=E53EFC19D8048073167B1473C5EBA6D9 -PT=9AB809114F10C3FD9C76DCE2207A6ADA -CT=BDB0C3D9732DE5813C4C72CF01FF5194 - -I=176 -KEY=CFEF04F0343587004F7F7999B2BDB150609C9BB3009EEA55 -IV=BDB0C3D9732DE5813C4C72CF01FF5194 -PT=B4CFE094F8B4EEE5AD30079D5BA35E37 -CT=D00B5B980D8B10DF3D7D4C0BE5975C1C - -I=177 -KEY=CBF2C475C11FA6B89F742201BF36A18F5DE1D7B8E509B649 -IV=D00B5B980D8B10DF3D7D4C0BE5975C1C -PT=34B39728291953DC041DC085F52A21B8 -CT=ADF5CDFDCC23AD8AD111454B2DB69013 - -I=178 -KEY=C96820A08056F7C23281EFFC73150C058CF092F3C8BF265A -IV=ADF5CDFDCC23AD8AD111454B2DB69013 -PT=4C8152CCAA0A23AC029AE4D54149517A -CT=F070979F68BAEBBD6CE8CE8A549C0E12 - -I=179 -KEY=61A6BBDB58B4C9D4C2F178631BAFE7B8E0185C799C232848 -IV=F070979F68BAEBBD6CE8CE8A549C0E12 -PT=0B6AF20EF8550A1BA8CE9B7BD8E23E16 -CT=8A75D276384A4F468B459466A304D418 - -I=180 -KEY=D3EC560DE8B1BBEE4884AA1523E5A8FE6B5DC81F3F27FC50 -IV=8A75D276384A4F468B459466A304D418 -PT=259A18BABFD09145B24AEDD6B005723A -CT=B7C04F66EB771CBD97F948098E23C655 - -I=181 -KEY=16FE806749FDDF8CFF44E573C892B443FCA48016B1043A05 -IV=B7C04F66EB771CBD97F948098E23C655 -PT=E00B5E4B3D9E64D0C512D66AA14C6462 -CT=29FB08289BD19BCC0FEB0F433D5CACEE - -I=182 -KEY=9CC345922C8912D5D6BFED5B53432F8FF34F8F558C5896EB -IV=29FB08289BD19BCC0FEB0F433D5CACEE -PT=07BAA266554EAE0C8A3DC5F56574CD59 -CT=495C245E2F3CC52499B9C1AD7C4484BA - -I=183 -KEY=7DDDCF7DE759FDEC9FE3C9057C7FEAAB6AF64EF8F01C1251 -IV=495C245E2F3CC52499B9C1AD7C4484BA -PT=2E5360D5563EB7D4E11E8AEFCBD0EF39 -CT=68267051421D3AFA19A2E43D501B940B - -I=184 -KEY=4BA2EAD4106DD4B7F7C5B9543E62D0517354AAC5A007865A -IV=68267051421D3AFA19A2E43D501B940B -PT=050EBC6942F92D95367F25A9F734295B -CT=1781558A2A8B7C29AC82D6610B67E3CF - -I=185 -KEY=CFCCD4ECD20E051CE044ECDE14E9AC78DFD67CA4AB606595 -IV=1781558A2A8B7C29AC82D6610B67E3CF -PT=1AC90B21EB197E26846E3E38C263D1AB -CT=BF5FE87A2E882A64493850EC3A0E93A5 - -I=186 -KEY=C9EA5F992C77DD9C5F1B04A43A61861C96EE2C48916EF630 -IV=BF5FE87A2E882A64493850EC3A0E93A5 -PT=58F997704D085DC506268B75FE79D880 -CT=8F43A961964E3452094E8E71295177CD - -I=187 -KEY=1136648F9E0A53C3D058ADC5AC2FB24E9FA0A239B83F81FD -IV=8F43A961964E3452094E8E71295177CD -PT=086041AB29E423EFD8DC3B16B27D8E5F -CT=BF69230BAB6200B7828DC04A13B88E83 - -I=188 -KEY=47040E2D6DFBE3006F318ECE074DB2F91D2D6273AB870F7E -IV=BF69230BAB6200B7828DC04A13B88E83 -PT=57865A8650D3202056326AA2F3F1B0C3 -CT=A012FAEE65E2C4F0AC22CB63AB75E35D - -I=189 -KEY=868F8310E79C0473CF23742062AF7609B10FA91000F2EC23 -IV=A012FAEE65E2C4F0AC22CB63AB75E35D -PT=F3ABB47DAE94B82EC18B8D3D8A67E773 -CT=F35BBD3C516F86384DA3BB6B5CCC8B37 - -I=190 -KEY=5C71ADCE480714DA3C78C91C33C0F031FCAC127B5C3E6714 -IV=F35BBD3C516F86384DA3BB6B5CCC8B37 -PT=CDB3E57FA6DDFF9FDAFE2EDEAF9B10A9 -CT=627A15E65B37C2B9575E8A781271AE64 - -I=191 -KEY=B603092BC5FD004F5E02DCFA68F73288ABF298034E4FC970 -IV=627A15E65B37C2B9575E8A781271AE64 -PT=7E04F9A0F723DF00EA72A4E58DFA1495 -CT=15427D27E783A5476345C83F3E8A3319 - -I=192 -KEY=4DB5A9F825C5E8C24B40A1DD8F7497CFC8B7503C70C5FA69 -IV=15427D27E783A5476345C83F3E8A3319 -PT=842B94BE25E8747BFBB6A0D3E038E88D -CT=35812AFD1A90B0B7D52B45EAD9CAF083 - -I=193 -KEY=D4F2CCC0734F9ACD7EC18B2095E427781D9C15D6A90F0AEA -IV=35812AFD1A90B0B7D52B45EAD9CAF083 -PT=3FAB7D4C741B8CD499476538568A720F -CT=C1A59CD3D9E6650F0D16947D26BFC20D - -I=194 -KEY=CB28A8313E133469BF6417F34C024277108A81AB8FB0C8E7 -IV=C1A59CD3D9E6650F0D16947D26BFC20D -PT=37AC888DCE5CDFD31FDA64F14D5CAEA4 -CT=CB0313E9A046711866CA65702A45CDB6 - -I=195 -KEY=C5BFEB8246ABAF467467041AEC44336F7640E4DBA5F50551 -IV=CB0313E9A046711866CA65702A45CDB6 -PT=326C9E3EB49138ED0E9743B378B89B2F -CT=ACE8FC6C6ABBC8124FE35C7976585DF6 - -I=196 -KEY=110891F8FDF0F254D88FF87686FFFB7D39A3B8A2D3AD58A7 -IV=ACE8FC6C6ABBC8124FE35C7976585DF6 -PT=964239EB84C57F61D4B77A7ABB5B5D12 -CT=0762EF13B80A8B77D04AF797B67D5AA6 - -I=197 -KEY=EFF558976586AC91DFED17653EF5700AE9E94F3565D00201 -IV=0762EF13B80A8B77D04AF797B67D5AA6 -PT=5ECA17ADFE3C2C21FEFDC96F98765EC5 -CT=B60CC9CD9DE93E2A6FB0B59369B1628E - -I=198 -KEY=4494A36EABE3555E69E1DEA8A31C4E208659FAA60C61608F -IV=B60CC9CD9DE93E2A6FB0B59369B1628E -PT=7A659E803888296BAB61FBF9CE65F9CF -CT=73258A43C7DA66FFE4DC9384FC7A60C1 - -I=199 -KEY=1780249B48B8F7561AC454EB64C628DF62856922F01B004E -IV=73258A43C7DA66FFE4DC9384FC7A60C1 -PT=8D9C3DCF612320B4531487F5E35BA208 -CT=F0F5D51C06F2D900CC4BE8D3512CA4B6 - -I=200 -KEY=9FF03D1E23BD9959EA3181F76234F1DFAECE81F1A137A4F8 -IV=F0F5D51C06F2D900CC4BE8D3512CA4B6 -PT=F002AEC878B80A0B887019856B056E0F -CT=E1321C52A51D9345296A0EF2A9DC9CC5 - -I=201 -KEY=6042967162EDA50B0B039DA5C729629A87A48F0308EB383D -IV=E1321C52A51D9345296A0EF2A9DC9CC5 -PT=C5EA4A519D9BAF8FFFB2AB6F41503C52 -CT=ED79D8FC9C60B583E29D0A65A6A5F321 - -I=202 -KEY=250C416206B9D0A9E67A45595B49D71965398566AE4ECB1C -IV=ED79D8FC9C60B583E29D0A65A6A5F321 -PT=34D771B44B3943DE454ED713645475A2 -CT=7A08F9096109535C262407EB323EF7BC - -I=203 -KEY=6357BC1B7B12F1C09C72BC503A408445431D828D9C703CA0 -IV=7A08F9096109535C262407EB323EF7BC -PT=60A1EEAE2B16841A465BFD797DAB2169 -CT=24C7F1A39F8B2F03C256F5C59B69C31A - -I=204 -KEY=18BF29D147A9675BB8B54DF3A5CBAB46814B77480719FFBA -IV=24C7F1A39F8B2F03C256F5C59B69C31A -PT=BFD7B314F959298B7BE895CA3CBB969B -CT=7DDA5DF3CC7C69AA490FB597888396B2 - -I=205 -KEY=E8B13C48FBABCD19C56F100069B7C2ECC844C2DF8F9A6908 -IV=7DDA5DF3CC7C69AA490FB597888396B2 -PT=23F8A60BD2354901F00E1599BC02AA42 -CT=04CEB4BE252293A822C77B9C4C27822B - -I=206 -KEY=BF275C4D9FC54BC0C1A1A4BE4C955144EA83B943C3BDEB23 -IV=04CEB4BE252293A822C77B9C4C27822B -PT=2182C0577EAA3C2A57966005646E86D9 -CT=0F24034642E351984620BB2647F5D649 - -I=207 -KEY=40B459144A6415C2CE85A7F80E7600DCACA3026584483D6A -IV=0F24034642E351984620BB2647F5D649 -PT=F59318D1D3D9A9E0FF930559D5A15E02 -CT=DB98808C46668D79AB059C5554CEEB1A - -I=208 -KEY=D5A01AB42D709E6A151D277448108DA507A69E30D086D670 -IV=DB98808C46668D79AB059C5554CEEB1A -PT=49CF142E621D1A8D951443A067148BA8 -CT=15C32FE5E9BCA5F8D09EA2E4D145FE3D - -I=209 -KEY=8191AB3C11B4B72700DE0891A1AC285DD7383CD401C3284D -IV=15C32FE5E9BCA5F8D09EA2E4D145FE3D -PT=5C1E9B721987B8BF5431B1883CC4294D -CT=AA7CA217D0514CA4F20C50293121E8D8 - -I=210 -KEY=69D24875B8A5B5D1AAA2AA8671FD64F925346CFD30E2C095 -IV=AA7CA217D0514CA4F20C50293121E8D8 -PT=8239553D8FB88E17E843E349A91102F6 -CT=C4068B901CB07904F843BF6F3CDC4FF8 - -I=211 -KEY=12BAE3B5B2C03E746EA421166D4D1DFDDD77D3920C3E8F6D -IV=C4068B901CB07904F843BF6F3CDC4FF8 -PT=80D797C671D3BFF67B68ABC00A658BA5 -CT=9F835417C4D622DB52651897DC23E1C3 - -I=212 -KEY=1A0CFD7FA1284652F1277501A99B3F268F12CB05D01D6EAE -IV=9F835417C4D622DB52651897DC23E1C3 -PT=C36513D78FBBFDCC08B61ECA13E87826 -CT=0156C998E85BE92F0EF998442204EB19 - -I=213 -KEY=7829D1FE113103B0F071BC9941C0D60981EB5341F21985B7 -IV=0156C998E85BE92F0EF998442204EB19 -PT=000894F1AF39A67562252C81B01945E2 -CT=6A554057C0A3EB723B693258BC5E899D - -I=214 -KEY=D719D37FC9087D2F9A24FCCE81633D7BBA8261194E470C2A -IV=6A554057C0A3EB723B693258BC5E899D -PT=B92413276BF142D0AF300281D8397E9F -CT=395F80E405813D97576954A23C77C2CA - -I=215 -KEY=39E173517A321A5AA37B7C2A84E200ECEDEB35BB7230CEE0 -IV=395F80E405813D97576954A23C77C2CA -PT=AA95F2BD255DBE23EEF8A02EB33A6775 -CT=1B1BC5D3DABD536E91177EF1BF2B7E39 - -I=216 -KEY=EE1FB67D907C597BB860B9F95E5F53827CFC4B4ACD1BB0D9 -IV=1B1BC5D3DABD536E91177EF1BF2B7E39 -PT=985E81E0BF5FF6EFD7FEC52CEA4E4321 -CT=20F42326749CC7CCD54188DEA46F4EC1 - -I=217 -KEY=41D333EC5E537B8098949ADF2AC3944EA9BDC3946974FE18 -IV=20F42326749CC7CCD54188DEA46F4EC1 -PT=901FD7D22F220608AFCC8591CE2F22FB -CT=AFFC6F2668097B58A0CFF619A3FDD1CB - -I=218 -KEY=F6E392EF75572C6A3768F5F942CAEF160972358DCA892FD3 -IV=AFFC6F2668097B58A0CFF619A3FDD1CB -PT=45AEB51360C50AB1B730A1032B0457EA -CT=1B75CF440CE8521069599B7889F21C1D - -I=219 -KEY=47C82CF46472D3732C1D3ABD4E22BD06602BAEF5437B33CE -IV=1B75CF440CE8521069599B7889F21C1D -PT=7E931056CC33D22CB12BBE1B1125FF19 -CT=F6079ADBAA8D28F371F0156B170FB7BD - -I=220 -KEY=DDA62A9922B04902DA1AA066E4AF95F511DBBB9E54748473 -IV=F6079ADBAA8D28F371F0156B170FB7BD -PT=2BE3DA337C9187109A6E066D46C29A71 -CT=7D2FC16B26971DDC20C6F7510C47B352 - -I=221 -KEY=570C8CA5236A2E65A735610DC2388829311D4CCF58333721 -IV=7D2FC16B26971DDC20C6F7510C47B352 -PT=43596064590570F88AAAA63C01DA6767 -CT=5FBA845FB25FE6AE015E4E8A228ED645 - -I=222 -KEY=6CEA158ED663A4B7F88FE55270676E87304302457ABDE164 -IV=5FBA845FB25FE6AE015E4E8A228ED645 -PT=1E265F0AA9A20C603BE6992BF5098AD2 -CT=A729E250D736A43966DD0D9C461ECEC0 - -I=223 -KEY=AACCE3387C0DF35D5FA60702A751CABE569E0FD93CA32FA4 -IV=A729E250D736A43966DD0D9C461ECEC0 -PT=B08AAE113CCE6226C626F6B6AA6E57EA -CT=A8192E964A74A6ABDB463ECFA483A1E3 - -I=224 -KEY=207F19ABDA13F728F7BF2994ED256C158DD8311698208E47 -IV=A8192E964A74A6ABDB463ECFA483A1E3 -PT=858CF92E6B1793448AB3FA93A61E0475 -CT=060C7CCCD58E6348518161C7878AA71B - -I=225 -KEY=AB05AD81CF07091AF1B3555838AB0F5DDC5950D11FAA295C -IV=060C7CCCD58E6348518161C7878AA71B -PT=424D175035503C728B7AB42A1514FE32 -CT=8ECAA12830B0C5B4C6950E69AFD31B66 - -I=226 -KEY=3A8E1CC01464AF9B7F79F470081BCAE91ACC5EB8B079323A -IV=8ECAA12830B0C5B4C6950E69AFD31B66 -PT=6E5A94391F1FE5A9918BB141DB63A681 -CT=65C3A891192324A7FA3C882B2C09CB8D - -I=227 -KEY=8004AB13CF38B3ED1ABA5CE11138EE4EE0F0D6939C70F9B7 -IV=65C3A891192324A7FA3C882B2C09CB8D -PT=584E219335CA4642BA8AB7D3DB5C1C76 -CT=F29F8735A403414621F2100AF38A500C - -I=228 -KEY=D37BB962CFC53E77E825DBD4B53BAF08C102C6996FFAA9BB -IV=F29F8735A403414621F2100AF38A500C -PT=CCB996C23C627D4D537F127100FD8D9A -CT=9C6A7655E25E9231E46C0D3B57C7FCAB - -I=229 -KEY=C23B3C983C79179A744FAD8157653D39256ECBA2383D5510 -IV=9C6A7655E25E9231E46C0D3B57C7FCAB -PT=5D727E12D3932F56114085FAF3BC29ED -CT=6C5AA7364755AF599AB6F86EC8B24C52 - -I=230 -KEY=4462CD1DD817170C18150AB710309260BFD833CCF08F1942 -IV=6C5AA7364755AF599AB6F86EC8B24C52 -PT=D7A99C8F3BC37AD08659F185E46E0096 -CT=821D7EAC8FD041C0C8CF1011661FBB9E - -I=231 -KEY=1BA52BEF2B010D169A08741B9FE0D3A0771723DD9690A2DC -IV=821D7EAC8FD041C0C8CF1011661FBB9E -PT=704F3525510FCC745FC7E6F2F3161A1A -CT=44591D71D64FC38010E402874853E9BC - -I=232 -KEY=C6A6818229CC65E6DE51696A49AF102067F3215ADEC34B60 -IV=44591D71D64FC38010E402874853E9BC -PT=5D5769AE155C9F43DD03AA6D02CD68F0 -CT=E5647FF6C843543E484FC13B58A345B9 - -I=233 -KEY=41F27DD5905B299C3B35169C81EC441E2FBCE06186600ED9 -IV=E5647FF6C843543E484FC13B58A345B9 -PT=ADF29030DFDFCCEE8754FC57B9974C7A -CT=E6EA42E2F046D3ED75081A50770563D1 - -I=234 -KEY=3A8018855EDC80D2DDDF547E71AA97F35AB4FA31F1656D08 -IV=E6EA42E2F046D3ED75081A50770563D1 -PT=096F74717D5583477B726550CE87A94E -CT=D75682FE37396887659E87895F1C6441 - -I=235 -KEY=6C94C2634142DA310A89D6804693FF743F2A7DB8AE790949 -IV=D75682FE37396887659E87895F1C6441 -PT=F1B527DD4935FBDE5614DAE61F9E5AE3 -CT=15755CFE84E113AA751E4D5BB098ABC7 - -I=236 -KEY=4BA407D7C6426C641FFC8A7EC272ECDE4A3430E31EE1A28E -IV=15755CFE84E113AA751E4D5BB098ABC7 -PT=7C4433DCC314DBD72730C5B48700B655 -CT=B048F209CE1B1FAEC33392D2D8F326A1 - -I=237 -KEY=A56FD7BCEEA55474AFB478770C69F3708907A231C612842F -IV=B048F209CE1B1FAEC33392D2D8F326A1 -PT=D40C7CD8D80C8C6CEECBD06B28E73810 -CT=8E1F4830F94004C286C39D0EC014A963 - -I=238 -KEY=0730B7B664CFD1E321AB3047F529F7B20FC43F3F06062D4C -IV=8E1F4830F94004C286C39D0EC014A963 -PT=B16772FE8C8A573FA25F600A8A6A8597 -CT=3FB92771D2BE2D33C40AB0409998B229 - -I=239 -KEY=0A08E43B13C57EB41E1217362797DA81CBCE8F7F9F9E9F65 -IV=3FB92771D2BE2D33C40AB0409998B229 -PT=D4883476825EA2D30D38538D770AAF57 -CT=190106DE79836016C57A16BBBA6893D2 - -I=240 -KEY=195B7E1B67872B0D071311E85E14BA970EB499C425F60CB7 -IV=190106DE79836016C57A16BBBA6893D2 -PT=3B8F4F140FDFFB6B13539A20744255B9 -CT=C06398537B4F534203D57184543E6516 - -I=241 -KEY=BE0C4A8A9B581D16C77089BB255BE9D50D61E84071C869A1 -IV=C06398537B4F534203D57184543E6516 -PT=E50D127AE258061DA7573491FCDF361B -CT=FF615CCC9F2D3DBB3074C835ECE4224E - -I=242 -KEY=662A224DAB1233C83811D577BA76D46E3D1520759D2C4BEF -IV=FF615CCC9F2D3DBB3074C835ECE4224E -PT=347C976D20470968D82668C7304A2EDE -CT=B5FB1BCCBC838B87FDB10FEFE6CDC45B - -I=243 -KEY=F4F3B47D9CC8BA798DEACEBB06F55FE9C0A42F9A7BE18FB4 -IV=B5FB1BCCBC838B87FDB10FEFE6CDC45B -PT=BC276D1002C5DD8292D9963037DA89B1 -CT=151F88A44A76568FAC756011B827778D - -I=244 -KEY=7EA3C03193B737DE98F5461F4C8309666CD14F8BC3C6F839 -IV=151F88A44A76568FAC756011B827778D -PT=BCD9054596EE644E8A50744C0F7F8DA7 -CT=C1B0B6FDD717881442496794A2C890F2 - -I=245 -KEY=C4D94D5C4169EE4B5945F0E29B9481722E98281F610E68CB -IV=C1B0B6FDD717881442496794A2C890F2 -PT=3D7F68D3014F3BEDBA7A8D6DD2DED995 -CT=181100A04881DCF9813E4A22C6C1BB3B - -I=246 -KEY=A9A9483D9FC46DD34154F042D3155D8BAFA6623DA7CFD3F0 -IV=181100A04881DCF9813E4A22C6C1BB3B -PT=0FE2E2A97DFFB4966D700561DEAD8398 -CT=AA4BEC4007C38C7B86B6F9EED33E5EB1 - -I=247 -KEY=5F08A3C09F4AE90BEB1F1C02D4D6D1F029109BD374F18D41 -IV=AA4BEC4007C38C7B86B6F9EED33E5EB1 -PT=C2392264CE43C57AF6A1EBFD008E84D8 -CT=A0756CCDA72462CD89DF9990C0FE6676 - -I=248 -KEY=6A1A4F2D25DFC9F94B6A70CF73F2B33DA0CF0243B40FEB37 -IV=A0756CCDA72462CD89DF9990C0FE6676 -PT=A6650A3432CCA74A3512ECEDBA9520F2 -CT=F5044AECC6F35C99FCDBA26DD15E1474 - -I=249 -KEY=B475174A46D0CDC2BE6E3A23B501EFA45C14A02E6551FF43 -IV=F5044AECC6F35C99FCDBA26DD15E1474 -PT=07967DE17DEB720CDE6F5867630F043B -CT=60645B559E7321D7FA8A3F925CFC0FA4 - -I=250 -KEY=8DBB9D8A4A2E7E61DE0A61762B72CE73A69E9FBC39ADF0E7 -IV=60645B559E7321D7FA8A3F925CFC0FA4 -PT=D8D3FD2077545DD039CE8AC00CFEB3A3 -CT=C4C6FD53A2572D643AA631FB85B84D0B - -I=251 -KEY=97D34E4B3B9E081A1ACC9C258925E3179C38AE47BC15BDEC -IV=C4C6FD53A2572D643AA631FB85B84D0B -PT=F31D8F3C8AC67E081A68D3C171B0767B -CT=E1A0E460E2D1483FE954F26F45CCE7A0 - -I=252 -KEY=5372C72A4ABF72D9FB6C78456BF4AB28756C5C28F9D95A4C -IV=E1A0E460E2D1483FE954F26F45CCE7A0 -PT=422C5429CE7BD811C4A1896171217AC3 -CT=2695923CFB2141F05A0F144FF021BD36 - -I=253 -KEY=A8CA6DB8A8758322DDF9EA7990D5EAD82F63486709F8E77A -IV=2695923CFB2141F05A0F144FF021BD36 -PT=780771C65FCB907BFBB8AA92E2CAF1FB -CT=A9820B527F71E95CC1F53033149FB26F - -I=254 -KEY=62ABF1F4178F3C73747BE12BEFA40384EE9678541D675515 -IV=A9820B527F71E95CC1F53033149FB26F -PT=CCC14BD8DF1CA8A4CA619C4CBFFABF51 -CT=2BAD4E8CD7D6420D36DC2F8E77DCA072 - -I=255 -KEY=C79B767D31D9F0FC5FD6AFA738724189D84A57DA6ABBF567 -IV=2BAD4E8CD7D6420D36DC2F8E77DCA072 -PT=1EFF63C71B10DCC7A53087892656CC8F -CT=C21303AAB04E2CAF1893396DD405B265 - -I=256 -KEY=1F3C7FF71340DEEC9DC5AC0D883C6D26C0D96EB7BEBE4702 -IV=C21303AAB04E2CAF1893396DD405B265 -PT=209270B7768E5553D8A7098A22992E10 -CT=B220025B5307C9D5D1EEB4B427E7263F - -I=257 -KEY=867CB381E6D532B32FE5AE56DB3BA4F31137DA039959613D -IV=B220025B5307C9D5D1EEB4B427E7263F -PT=8546A6C9B4CEF0229940CC76F595EC5F -CT=B925C660EBE409050DA369E58C601F4D - -I=258 -KEY=33B33F93622E509296C0683630DFADF61C94B3E615397E70 -IV=B925C660EBE409050DA369E58C601F4D -PT=1F4930242C2951C4B5CF8C1284FB6221 -CT=67DA7B4BEAB2152D21C54F389F9282D4 - -I=259 -KEY=E8EC3394AF44DD34F11A137DDA6DB8DB3D51FCDE8AABFCA4 -IV=67DA7B4BEAB2152D21C54F389F9282D4 -PT=41611AE93BE61306DB5F0C07CD6A8DA6 -CT=4C116D3ED0B021129CCD1764D132A72D - -I=260 -KEY=92F61F4CB5794268BD0B7E430ADD99C9A19CEBBA5B995B89 -IV=4C116D3ED0B021129CCD1764D132A72D -PT=E7B1E63FBD5B4CA77A1A2CD81A3D9F5C -CT=FE1C3096C14AF2A4DC840207BFFFC0AF - -I=261 -KEY=08DC826B4DDBAC4D43174ED5CB976B6D7D18E9BDE4669B26 -IV=FE1C3096C14AF2A4DC840207BFFFC0AF -PT=9A0D034B1931FD599A2A9D27F8A2EE25 -CT=ED500812A10CC6C4EED0836871F85AA9 - -I=262 -KEY=486EBC43A876FF2AAE4746C76A9BADA993C86AD5959EC18F -IV=ED500812A10CC6C4EED0836871F85AA9 -PT=8237641B58069AFD40B23E28E5AD5367 -CT=0AD90C1C13E7C1318057A417C0B9B97C - -I=263 -KEY=F340D2CAC4645595A49E4ADB797C6C98139FCEC2552778F3 -IV=0AD90C1C13E7C1318057A417C0B9B97C -PT=905119E1F11E4B04BB2E6E896C12AABF -CT=B260FFA5806A4A6D8845FA6146A565ED - -I=264 -KEY=DF326741BD1EE2FF16FEB57EF91626F59BDA34A313821D1E -IV=B260FFA5806A4A6D8845FA6146A565ED -PT=4F639233904531162C72B58B797AB76A -CT=2D27A1A3968E30EBCA463C8709D0FD83 - -I=265 -KEY=D4C684692E05983C3BD914DD6F98161E519C08241A52E09D -IV=2D27A1A3968E30EBCA463C8709D0FD83 -PT=428B700FB3CD18790BF4E328931B7AC3 -CT=D350CCF3B440006C9F18E99DD5B69920 - -I=266 -KEY=9DD5275FFDCD5D2DE889D82EDBD81672CE84E1B9CFE479BD -IV=D350CCF3B440006C9F18E99DD5B69920 -PT=97F4A6256A9E22FB4913A336D3C8C511 -CT=F5A0571EB7E4719B862EBC47141EA319 - -I=267 -KEY=0A3B329A4973D7A21D298F306C3C67E948AA5DFEDBFADAA4 -IV=F5A0571EB7E4719B862EBC47141EA319 -PT=E355F7EBA4DAC16B97EE15C5B4BE8A8F -CT=4F18730073D3E78CAD356441F1317B2D - -I=268 -KEY=3BB3A19EF4EB8A755231FC301FEF8065E59F39BF2ACBA189 -IV=4F18730073D3E78CAD356441F1317B2D -PT=A20B3B6C41E88E9D31889304BD985DD7 -CT=AEAECB17B9009AAF1E4E9CC02653194B - -I=269 -KEY=4B9DDD2F821CE4D1FC9F3727A6EF1ACAFBD1A57F0C98B8C2 -IV=AEAECB17B9009AAF1E4E9CC02653194B -PT=5D2E4A96F9BB4AD4702E7CB176F76EA4 -CT=26851709960A42D5711EBDC7D40535FC - -I=270 -KEY=D7273499C5BA2842DA1A202E30E5581F8ACF18B8D89D8D3E -IV=26851709960A42D5711EBDC7D40535FC -PT=202534EA0A1952A19CBAE9B647A6CC93 -CT=FF8BFFB98EDA7E54664AE879551B5497 - -I=271 -KEY=7870FF6B66070AB02591DF97BE3F264BEC85F0C18D86D9A9 -IV=FF8BFFB98EDA7E54664AE879551B5497 -PT=365CFE282B9508CFAF57CBF2A3BD22F2 -CT=D0809C84A97221E6F8DCB483B38EC7E1 - -I=272 -KEY=F4E6DFDF4A081200F5114313174D07AD145944423E081E48 -IV=D0809C84A97221E6F8DCB483B38EC7E1 -PT=915323F59134AB838C9620B42C0F18B0 -CT=DC8A24B8DECF81E0412DBF10127119EC - -I=273 -KEY=336A7C81A4BE3FE9299B67ABC982864D5574FB522C7907A4 -IV=DC8A24B8DECF81E0412DBF10127119EC -PT=0FC4387E49F666B8C78CA35EEEB62DE9 -CT=84E370DF6CA478BA85FC0874393CE442 - -I=274 -KEY=F8ADC39E17CDDEB0AD781774A526FEF7D088F3261545E3E6 -IV=84E370DF6CA478BA85FC0874393CE442 -PT=34BFEFD3E43D8EE0CBC7BF1FB373E159 -CT=2C109A8363D1D0FB69CA77ABFA922F05 - -I=275 -KEY=2B26D271208BD64F81688DF7C6F72E0CB942848DEFD7CCE3 -IV=2C109A8363D1D0FB69CA77ABFA922F05 -PT=D28D86D5199E7E30D38B11EF374608FF -CT=F1749EFE66D339BC99AE4D9F63C90490 - -I=276 -KEY=ACB8D3E6F5A45F0C701C1309A02417B020ECC9128C1EC873 -IV=F1749EFE66D339BC99AE4D9F63C90490 -PT=2ADAFA1911C5E9BD879E0197D52F8943 -CT=3B2A7C4278E1F071BFA29A6B0BFF4A15 - -I=277 -KEY=CCEE75264DD770C44B366F4BD8C5E7C19F4E537987E18266 -IV=3B2A7C4278E1F071BFA29A6B0BFF4A15 -PT=84E244B62DF08DC76056A6C0B8732FC8 -CT=A35F83A5EE0B1C3B9DAD76DEAED96D72 - -I=278 -KEY=F8F9239CDB5CC963E869ECEE36CEFBFA02E325A72938EF14 -IV=A35F83A5EE0B1C3B9DAD76DEAED96D72 -PT=F0B652F296CF162B341756BA968BB9A7 -CT=D5867FFE2FB75E309D3345611B25E3B0 - -I=279 -KEY=509A10ABA5EAF2963DEF93101979A5CA9FD060C6321D0CA4 -IV=D5867FFE2FB75E309D3345611B25E3B0 -PT=C47D42AE34131463A86333377EB63BF5 -CT=6E136F01638AFBE3554218431DF44E7E - -I=280 -KEY=9B52C39C38F16CCE53FCFC117AF35E29CA9278852FE942DA -IV=6E136F01638AFBE3554218431DF44E7E -PT=78E05783EAEBE1BDCBC8D3379D1B9E58 -CT=FB6ACD3D0CF805374AD07EF5C038EBF6 - -I=281 -KEY=2044F086923D5E43A896312C760B5B1E80420670EFD1A92C -IV=FB6ACD3D0CF805374AD07EF5C038EBF6 -PT=02415B8E4D915492BB16331AAACC328D -CT=0086C26DA11540FF5F485D7B238FD98C - -I=282 -KEY=12CE4C4109606CD7A810F341D71E1BE1DF0A5B0BCC5E70A0 -IV=0086C26DA11540FF5F485D7B238FD98C -PT=0A2988237132B0B3328ABCC79B5D3294 -CT=F2E94C71A2AE0FCB096D8259B931CF8D - -I=283 -KEY=21BBCDA7FBC5229C5AF9BF3075B0142AD667D952756FBF2D -IV=F2E94C71A2AE0FCB096D8259B931CF8D -PT=4234B6C7F1CE98A3337581E6F2A54E4B -CT=3B52E7834263C6790763706943741FD8 - -I=284 -KEY=BB451732881A996161AB58B337D3D253D104A93B361BA0F5 -IV=3B52E7834263C6790763706943741FD8 -PT=F8509FB57E14501F9AFEDA9573DFBBFD -CT=93FCA9F122CB707213D0CD72D8E6BF74 - -I=285 -KEY=857D076E9A127A84F257F1421518A221C2D46449EEFD1F81 -IV=93FCA9F122CB707213D0CD72D8E6BF74 -PT=AA4D07DFAD030BE03E38105C1208E3E5 -CT=50717568D21862AECFAA898337405C96 - -I=286 -KEY=1BCFD020D63709E0A226842AC700C08F0D7EEDCAD9BD4317 -IV=50717568D21862AECFAA898337405C96 -PT=7B488D7BBB2D538E9EB2D74E4C257364 -CT=0338D74260CB6CBB1B220DE7E4CC0BCF - -I=287 -KEY=CCDDF5D0BBCE202DA11E5368A7CBAC34165CE02D3D7148D8 -IV=0338D74260CB6CBB1B220DE7E4CC0BCF -PT=16E01F8B3E94AC26D71225F06DF929CD -CT=698AD17BB2F5F06C0465BEE34A7DCEDD - -I=288 -KEY=B7F556BC9BB4DC49C8948213153E5C5812395ECE770C8605 -IV=698AD17BB2F5F06C0465BEE34A7DCEDD -PT=3ED0C80AFDEFE8BF7B28A36C207AFC64 -CT=E20129557F795C2B1CC32A5494824A4B - -I=289 -KEY=4B00D75969C3549C2A95AB466A4700730EFA749AE38ECC4E -IV=E20129557F795C2B1CC32A5494824A4B -PT=20BE0CD6C2244384FCF581E5F27788D5 -CT=C2F9DD55E91F4796636FEC9745410087 - -I=290 -KEY=5EDCC5155BA684A4E86C7613835847E56D95980DA6CFCCC9 -IV=C2F9DD55E91F4796636FEC9745410087 -PT=B2DF53DF1139FB9915DC124C3265D038 -CT=015D51CD3568EB4EC210B58FFA89A409 - -I=291 -KEY=21BA26AC6880AACDE93127DEB630ACABAF852D825C4668C0 -IV=015D51CD3568EB4EC210B58FFA89A409 -PT=401094B8B47CBDC87F66E3B933262E69 -CT=2987D39C19E6997957BDD0CAF010F778 - -I=292 -KEY=BBA7ABC0A20CCBDEC0B6F442AFD635D2F838FD48AC569FB8 -IV=2987D39C19E6997957BDD0CAF010F778 -PT=EFC30498827AAD9A9A1D8D6CCA8C6113 -CT=E01AA987C9520EF8EBF53E97371D056B - -I=293 -KEY=5322D81BAA29410320AC5DC566843B2A13CDC3DF9B4B9AD3 -IV=E01AA987C9520EF8EBF53E97371D056B -PT=685D6F660D40105CE88573DB08258ADD -CT=D1265ABFCFA75FC65E94983BFF75CD48 - -I=294 -KEY=19DF73EBF1CEF669F18A077AA92364EC4D595BE4643E579B -IV=D1265ABFCFA75FC65E94983BFF75CD48 -PT=DD6E090E9981E5F24AFDABF05BE7B76A -CT=605FDD1CA95B8FE1A5E26DBA10241914 - -I=295 -KEY=F7D1D0CA3DAA851891D5DA660078EB0DE8BB365E741A4E8F -IV=605FDD1CA95B8FE1A5E26DBA10241914 -PT=9F8442EE8B5A325FEE0EA321CC647371 -CT=76D67121FDEAEB6B81DBB29565F71E8E - -I=296 -KEY=FFFF200EA04824E9E703AB47FD920066696084CB11ED5001 -IV=76D67121FDEAEB6B81DBB29565F71E8E -PT=5AF386509F0C8BAA082EF0C49DE2A1F1 -CT=7E1D833DC8D73228B7DFDE918E31E5E7 - -I=297 -KEY=2A7D40B689490FC7991E287A3545324EDEBF5A5A9FDCB5E6 -IV=7E1D833DC8D73228B7DFDE918E31E5E7 -PT=02AB05F508ACDD21D58260B829012B2E -CT=D6CA06D415EA5D750B5D06C252645A43 - -I=298 -KEY=134154161A39E2CF4FD42EAE20AF6F3BD5E25C98CDB8EFA5 -IV=D6CA06D415EA5D750B5D06C252645A43 -PT=E63873AE14DD3BA8393C14A09370ED08 -CT=BFEA32E77BC1607921C54027C01C3EDF - -I=299 -KEY=AD8AF90935A6B455F03E1C495B6E0F42F4271CBF0DA4D17A -IV=BFEA32E77BC1607921C54027C01C3EDF -PT=BAD47B1FBF949870BECBAD1F2F9F569A -CT=A86FFC9A91C79AFE47899B3934F3E05E - -I=300 -KEY=D88A2E828514CEC25851E0D3CAA995BCB3AE878639573124 -IV=A86FFC9A91C79AFE47899B3934F3E05E -PT=2A2115074A9767747500D78BB0B27A97 -CT=507ED155CC3ED3B1922BBC166812A7FE - -I=301 -KEY=2CDDF1A577A3C86C082F31860697460D21853B90514596DA -IV=507ED155CC3ED3B1922BBC166812A7FE -PT=308D27178ABA22BCF457DF27F2B706AE -CT=87F4EEA7CD2438F3EDCB650824A2D638 - -I=302 -KEY=2B9D006908018D648FDBDF21CBB37EFECC4E5E9875E740E2 -IV=87F4EEA7CD2438F3EDCB650824A2D638 -PT=28F6C452D061E3DB0740F1CC7FA24508 -CT=DBA57DDA73A4E987EA32EF113877E908 - -I=303 -KEY=FC69838410D06425547EA2FBB8179779267CB1894D90A9EA -IV=DBA57DDA73A4E987EA32EF113877E908 -PT=91CFB50FFBE97D8AD7F483ED18D1E941 -CT=1720ED3E3B685A19CDA66BD09BD4DA5F - -I=304 -KEY=541AAB6191E2C51F435E4FC5837FCD60EBDADA59D64473B5 -IV=1720ED3E3B685A19CDA66BD09BD4DA5F -PT=78FF980C48FAEBA0A87328E58132A13A -CT=ED2E260103CAA77598FD195D02B484C8 - -I=305 -KEY=761B0A3F50E2ACC1AE7069C480B56A157327C304D4F0F77D -IV=ED2E260103CAA77598FD195D02B484C8 -PT=8C01554039D8F8EE2201A15EC10069DE -CT=A9F0E16716B3AC14E06F18F5AEECB541 - -I=306 -KEY=70056CD35CF430D5078088A39606C6019348DBF17A1C423C -IV=A9F0E16716B3AC14E06F18F5AEECB541 -PT=C139651464D1614B061E66EC0C169C14 -CT=A41DDF008E0D52B627982D4196C3069E - -I=307 -KEY=EE1932746487B7BEA39D57A3180B94B7B4D0F6B0ECDF44A2 -IV=A41DDF008E0D52B627982D4196C3069E -PT=C617572884721A3D9E1C5EA73873876B -CT=44E5304E35A21660C450FAF84D87B13B - -I=308 -KEY=13D43E4526F8243FE77867ED2DA982D770800C48A158F599 -IV=44E5304E35A21660C450FAF84D87B13B -PT=9C72E08DD264D6B7FDCD0C31427F9381 -CT=173B2C7A54A1A3CF3D39DCB68DA1C539 - -I=309 -KEY=7CB72DE2CAED4080F0434B97790821184DB9D0FE2CF930A0 -IV=173B2C7A54A1A3CF3D39DCB68DA1C539 -PT=4DF3764F679E29446F6313A7EC1564BF -CT=F1A167A3EB8F3FAB9F9B1570475ED15A - -I=310 -KEY=A7E6340A1278A3E801E22C3492871EB3D222C58E6BA7E1FA -IV=F1A167A3EB8F3FAB9F9B1570475ED15A -PT=2ED419EA11AAF8F3DB5119E8D895E368 -CT=2C5C5B10E285FE6C7E4750D2F9C1BD23 - -I=311 -KEY=4B535B4D088F09192DBE77247002E0DFAC65955C92665CD9 -IV=2C5C5B10E285FE6C7E4750D2F9C1BD23 -PT=A3E9EA99771D0C02ECB56F471AF7AAF1 -CT=A12B4A15DBFAE2E7D4A7A792CD3C121A - -I=312 -KEY=2F0E7BAD76DC0A718C953D31ABF8023878C232CE5F5A4EC3 -IV=A12B4A15DBFAE2E7D4A7A792CD3C121A -PT=1CC105D2604628B7645D20E07E530368 -CT=65CE700B785D901C5E5E08F7E74BB296 - -I=313 -KEY=6111C386DE35C954E95B4D3AD3A59224269C3A39B811FC55 -IV=65CE700B785D901C5E5E08F7E74BB296 -PT=F902717AF7F0794E4E1FB82BA8E9C325 -CT=E7F3BD1056C504285FFC7F65B395DCAE - -I=314 -KEY=3B8F85E6FD28C4610EA8F02A8560960C7960455C0B8420FB -IV=E7F3BD1056C504285FFC7F65B395DCAE -PT=20A5529420D6D4C35A9E4660231D0D35 -CT=6CC36458ADECCA8B7198FD272A8C76C8 - -I=315 -KEY=D404C97E089F240B626B9472288C5C8708F8B87B21085633 -IV=6CC36458ADECCA8B7198FD272A8C76C8 -PT=1094639F6723C9B0EF8B4C98F5B7E06A -CT=D01C3C1E036D804563F04926ED203146 - -I=316 -KEY=4779B44770085E18B277A86C2BE1DCC26B08F15DCC286775 -IV=D01C3C1E036D804563F04926ED203146 -PT=A482437681DFE307937D7D3978977A13 -CT=319D579DE9E55C8A3B2097EE8C93375F - -I=317 -KEY=22362304D7417BB483EAFFF1C2048048502866B340BB502A -IV=319D579DE9E55C8A3B2097EE8C93375F -PT=7AF0C8274B5C243B654F9743A74925AC -CT=5F722165B8B422E088814B77A6B4D8E4 - -I=318 -KEY=06FDA49350C16FEADC98DE947AB0A2A8D8A92DC4E60F88CE -IV=5F722165B8B422E088814B77A6B4D8E4 -PT=A37964FA3E8145EF24CB87978780145E -CT=C0417773DFD3FC83C2CE12D388F5DD8F - -I=319 -KEY=366245F8CBC490611CD9A9E7A5635E2B1A673F176EFA5541 -IV=C0417773DFD3FC83C2CE12D388F5DD8F -PT=5D7E1E14F7BD7DB6309FE16B9B05FF8B -CT=2EAE64B58C18AC7ADD2EE62896AB708D - -I=320 -KEY=A1BB8A9F9BE8F1383277CD52297BF251C749D93FF85125CC -IV=2EAE64B58C18AC7ADD2EE62896AB708D -PT=3ADC6991BF15554F97D9CF67502C6159 -CT=069FC966F8A985AD41617CB0148D2B96 - -I=321 -KEY=7AB228E4114C14AB34E80434D1D277FC8628A58FECDC0E5A -IV=069FC966F8A985AD41617CB0148D2B96 -PT=4405B80CCE92FD71DB09A27B8AA4E593 -CT=13459A0239A33BC41424A5D03C6B2864 - -I=322 -KEY=78D1BC27E5CBBB1D27AD9E36E8714C38920C005FD0B7263E -IV=13459A0239A33BC41424A5D03C6B2864 -PT=B9BAA861988616CD026394C3F487AFB6 -CT=08DA968A2BAEB9B763EB42BF555A2BFA - -I=323 -KEY=F53B033A22EA1D7B2F7708BCC3DFF58FF1E742E085ED0DC4 -IV=08DA968A2BAEB9B763EB42BF555A2BFA -PT=30654265AD0FB24E8DEABF1DC721A666 -CT=E8412BDC1E75AC8E2C28552E2195795E - -I=324 -KEY=4928B51AF5C2408CC7362360DDAA5901DDCF17CEA478749A -IV=E8412BDC1E75AC8E2C28552E2195795E -PT=EEB05E487EEB907FBC13B620D7285DF7 -CT=E01839F95680D27E048383236D59EE85 - -I=325 -KEY=C4DB91EAFC4C26D7272E1A998B2A8B7FD94C94EDC9219A1F -IV=E01839F95680D27E048383236D59EE85 -PT=BA0160229D7471FE8DF324F0098E665B -CT=D41902E6BE946CEB1612CFEE2F33F7CD - -I=326 -KEY=B550731E659834A1F337187F35BEE794CF5E5B03E6126DD2 -IV=D41902E6BE946CEB1612CFEE2F33F7CD -PT=7DC970AFAF99BA6C718BE2F499D41276 -CT=326C3523173D62E9E145592E7A774311 - -I=327 -KEY=5F87F6C2402B2352C15B2D5C2283857D2E1B022D9C652EC3 -IV=326C3523173D62E9E145592E7A774311 -PT=24ED6DAE1B24CC2BEAD785DC25B317F3 -CT=DDAE8AFF94604FFA82AE4FFB06953C01 - -I=328 -KEY=3636C04061996CD01CF5A7A3B6E3CA87ACB54DD69AF012C2 -IV=DDAE8AFF94604FFA82AE4FFB06953C01 -PT=98E262805B8D9FD169B1368221B24F82 -CT=0D75DCFA4941BCE658DB2C71CB270BE7 - -I=329 -KEY=64B9A0DE7DDA73C011807B59FFA27661F46E61A751D71925 -IV=0D75DCFA4941BCE658DB2C71CB270BE7 -PT=2BC34C226D41D8CE528F609E1C431F10 -CT=D70ED1DCDB9420E4B4A0D2A7C5148DE3 - -I=330 -KEY=F64196479D35F74BC68EAA852436568540CEB30094C394C6 -IV=D70ED1DCDB9420E4B4A0D2A7C5148DE3 -PT=1015CB1E4569986C92F83699E0EF848B -CT=524314DCCF2ADE5F8C3D241824C2BA73 - -I=331 -KEY=686AB32115A2884C94CDBE59EB1C88DACCF39718B0012EB5 -IV=524314DCCF2ADE5F8C3D241824C2BA73 -PT=FB8B49053F724B7D9E2B256688977F07 -CT=7C579324F7251EDF95BDE2320104ACA6 - -I=332 -KEY=34DD68E6F442F6D9E89A2D7D1C399605594E752AB1058213 -IV=7C579324F7251EDF95BDE2320104ACA6 -PT=A3B71504A8DAA3515CB7DBC7E1E07E95 -CT=921A66278A6D1E61D4B509F199F8FE55 - -I=333 -KEY=19C9F40A858DD9EA7A804B5A965488648DFB7CDB28FD7C46 -IV=921A66278A6D1E61D4B509F199F8FE55 -PT=B0B651905E1B38FB2D149CEC71CF2F33 -CT=F2C37CF94514C902A0E438159C2C9F5F - -I=334 -KEY=B68812FC7D4E40D6884337A3D34041662D1F44CEB4D1E319 -IV=F2C37CF94514C902A0E438159C2C9F5F -PT=7DE03F498839F8DAAF41E6F6F8C3993C -CT=4596A25A85D06BCC74F686F8F1E8C203 - -I=335 -KEY=2836F982CA563379CDD595F956902AAA59E9C2364539211A -IV=4596A25A85D06BCC74F686F8F1E8C203 -PT=D5425E42151014ED9EBEEB7EB71873AF -CT=0BA46EFA61FB07430C51D7CE267E1F47 - -I=336 -KEY=BC8C7F9051C98892C671FB03376B2DE955B815F863473E5D -IV=0BA46EFA61FB07430C51D7CE267E1F47 -PT=5D060EEC179C1B9E94BA86129B9FBBEB -CT=49F7D7D7BAB7795A4E74A854C8C1AC53 - -I=337 -KEY=E661F49B22BC92358F862CD48DDC54B31BCCBDACAB86920E -IV=49F7D7D7BAB7795A4E74A854C8C1AC53 -PT=C598926A437A27A45AED8B0B73751AA7 -CT=0EB97E32AEC4CE3959197C5B72C1ABC5 - -I=338 -KEY=E625AB8664BCF057813F52E623189A8A42D5C1F7D94739CB -IV=0EB97E32AEC4CE3959197C5B72C1ABC5 -PT=B7272C4D712F9CF500445F1D46006262 -CT=DA9F53564E69AED610BCCAD13C00A241 - -I=339 -KEY=75FC1D46AFD886915BA001B06D71345C52690B26E5479B8A -IV=DA9F53564E69AED610BCCAD13C00A241 -PT=FE7513CF9353BBF093D9B6C0CB6476C6 -CT=7F61B6F9B7C14EB6179F2DA597EC1183 - -I=340 -KEY=F92D3201DA84422024C1B749DAB07AEA45F6268372AB8A09 -IV=7F61B6F9B7C14EB6179F2DA597EC1183 -PT=4E4D3DF58D7D9C338CD12F47755CC4B1 -CT=F9216373C300AA9BE96BD8C98F9716B7 - -I=341 -KEY=680384A1E522C848DDE0D43A19B0D071AC9DFE4AFD3C9CBE -IV=F9216373C300AA9BE96BD8C98F9716B7 -PT=1A7B30192D54142E912EB6A03FA68A68 -CT=8512BA1B57BC04EF3C021DB1EC3CA9C6 - -I=342 -KEY=DE3B85BD09EC93B858F26E214E0CD49E909FE3FB11003578 -IV=8512BA1B57BC04EF3C021DB1EC3CA9C6 -PT=86587FF85D73F77FB638011CECCE5BF0 -CT=FA582C37D4063D61428C886A9FD54C84 - -I=343 -KEY=C574CA7322F443FBA2AA42169A0AE9FFD2136B918ED579FC -IV=FA582C37D4063D61428C886A9FD54C84 -PT=3A7425A8B7BC3A941B4F4FCE2B18D043 -CT=7571B4D46CBC671964AB5BDE9C843DCF - -I=344 -KEY=078109812EFBA9DBD7DBF6C2F6B68EE6B6B8304F12514433 -IV=7571B4D46CBC671964AB5BDE9C843DCF -PT=5224060F0848F028C2F5C3F20C0FEA20 -CT=DA9EB72D65D492FE88B819674B8433C1 - -I=345 -KEY=5BF7FA2E15A87C850D4541EF93621C183E00292859D577F2 -IV=DA9EB72D65D492FE88B819674B8433C1 -PT=2622B2A19CBBAD065C76F3AF3B53D55E -CT=C66EF470CEDDD499AE6214E75DE9051B - -I=346 -KEY=ECBE2377CAF0C9E9CB2BB59F5DBFC88190623DCF043C72E9 -IV=C66EF470CEDDD499AE6214E75DE9051B -PT=833F22A76D51E360B749D959DF58B56C -CT=57407E3DEFFF753E879619424FCE5713 - -I=347 -KEY=4EAB83DA78D60CB09C6BCBA2B240BDBF17F4248D4BF225FA -IV=57407E3DEFFF753E879619424FCE5713 -PT=25781A534FB9192CA215A0ADB226C559 -CT=644D89381439E7BBED7DC344CBF4C886 - -I=348 -KEY=C4977EF1F6271D6CF826429AA6795A04FA89E7C98006ED7C -IV=644D89381439E7BBED7DC344CBF4C886 -PT=E8EDD9AA25A8C5B08A3CFD2B8EF111DC -CT=CA4B2680D0EE8E28818BE8DE8D625ADC - -I=349 -KEY=80212F6D11C6DAE2326D641A7697D42C7B020F170D64B7A0 -IV=CA4B2680D0EE8E28818BE8DE8D625ADC -PT=8F667EEDB79E930644B6519CE7E1C78E -CT=5497F477AD5E65BB748A781533F1BCEF - -I=350 -KEY=A05DF1DF7E0393A566FA906DDBC9B1970F8877023E950B4F -IV=5497F477AD5E65BB748A781533F1BCEF -PT=099FDB76E6D21788207CDEB26FC54947 -CT=C8C541B359BF1B53441C4EFFFD2F65AF - -I=351 -KEY=3970F236F800D18BAE3FD1DE8276AAC44B9439FDC3BA6EE0 -IV=C8C541B359BF1B53441C4EFFFD2F65AF -PT=C79FA2079ECCEBCD992D03E98603422E -CT=E59765A861DE0168161EA1360B5966A9 - -I=352 -KEY=8ED3BFA3E4C9453C4BA8B476E3A8ABAC5D8A98CBC8E30849 -IV=E59765A861DE0168161EA1360B5966A9 -PT=AFBCD48F06709730B7A34D951CC994B7 -CT=5A65435BD1B4DB742E8AFF8C402927FC - -I=353 -KEY=2A3F01E56E45895B11CDF72D321C70D87300674788CA2FB5 -IV=5A65435BD1B4DB742E8AFF8C402927FC -PT=CF684F64B8CCD2EDA4ECBE468A8CCC67 -CT=551AF68D50D23408F47214C0B18E6C8A - -I=354 -KEY=CA12AC8D17941E6244D701A062CE44D0877273873944433F -IV=551AF68D50D23408F47214C0B18E6C8A -PT=561072AC144854C1E02DAD6879D19739 -CT=ADFF035C89E040A4C3CCE190D6CB7283 - -I=355 -KEY=D1CA1B08A51B5086E92802FCEB2E047444BE9217EF8F31BC -IV=ADFF035C89E040A4C3CCE190D6CB7283 -PT=827ADE7D0F329D9A1BD8B785B28F4EE4 -CT=425F5596D3FD37243EE59D6FC1F5ADCC - -I=356 -KEY=54EC325FE63AA470AB77576A38D333507A5B0F782E7A9C70 -IV=425F5596D3FD37243EE59D6FC1F5ADCC -PT=4AAF21E64F8DBDB0852629574321F4F6 -CT=D85520FE860C9F320CDC8192A900F499 - -I=357 -KEY=5B4612BC35BFC12473227794BEDFAC6276878EEA877A68E9 -IV=D85520FE860C9F320CDC8192A900F499 -PT=0D046A402A1860C70FAA20E3D3856554 -CT=11C20F3ACED79B37402B2F04886D4CC7 - -I=358 -KEY=5052384CE705101562E078AE7008375536ACA1EE0F17242E -IV=11C20F3ACED79B37402B2F04886D4CC7 -PT=7546E6521BBBFAFE0B142AF0D2BAD131 -CT=BCDA339266E3AFB779AF17CE34218BE5 - -I=359 -KEY=F7ECFB2AA4FC6DE2DE3A4B3C16EB98E24F03B6203B36AFCB -IV=BCDA339266E3AFB779AF17CE34218BE5 -PT=85DF7958789E9090A7BEC36643F97DF7 -CT=300D46EAB6466314BB00DBC869C77F4E - -I=360 -KEY=1E27229506EC9555EE370DD6A0ADFBF6F4036DE852F1D085 -IV=300D46EAB6466314BB00DBC869C77F4E -PT=C6CED700614467A0E9CBD9BFA210F8B7 -CT=51735C075A14FE95D4A02F527A9474D3 - -I=361 -KEY=857F653E1E811CABBF4451D1FAB9056320A342BA2865A456 -IV=51735C075A14FE95D4A02F527A9474D3 -PT=53D436401D6811B19B5847AB186D89FE -CT=827017531E56980C4357549D0E70114F - -I=362 -KEY=1BCE612F3A5262223D344682E4EF9D6F63F416272615B519 -IV=827017531E56980C4357549D0E70114F -PT=4C1BD17FFD65AB2C9EB1041124D37E89 -CT=751BCA9516123906561FB8AF2208CEE1 - -I=363 -KEY=7C7034EC27524FC3482F8C17F2FDA46935EBAE88041D7BF8 -IV=751BCA9516123906561FB8AF2208CEE1 -PT=7C23D6E77039F35267BE55C31D002DE1 -CT=82CAFBBE859FA80B2A8E58CEC074B01A - -I=364 -KEY=7F31EEE0447BB53CCAE577A977620C621F65F646C469CBE2 -IV=82CAFBBE859FA80B2A8E58CEC074B01A -PT=B91FF7759419BBB10341DA0C6329FAFF -CT=B7614376C9BAFC92E17E39D2BDF1F2EF - -I=365 -KEY=E705144BCE40FC987D8434DFBED8F0F0FE1BCF947998390D -IV=B7614376C9BAFC92E17E39D2BDF1F2EF -PT=72B3472217AC80979834FAAB8A3B49A4 -CT=A63BA38FDDFE99D28BA447871BBA6211 - -I=366 -KEY=15C813D2D9AD1494DBBF97506326692275BF881362225B1C -IV=A63BA38FDDFE99D28BA447871BBA6211 -PT=349F8E5FAE004B51F2CD079917EDE80C -CT=C87E448872E619419766CB46787F2581 - -I=367 -KEY=B12B790C217821DA13C1D3D811C07063E2D943551A5D7E9D -IV=C87E448872E619419766CB46787F2581 -PT=EC474C794E3C8322A4E36ADEF8D5354E -CT=73DD478F7F41857F7A5DE7EDF3F1AF7B - -I=368 -KEY=1CFA6A54B3E572DC601C94576E81F51C9884A4B8E9ACD1E6 -IV=73DD478F7F41857F7A5DE7EDF3F1AF7B -PT=48F8361EF11F94C1ADD11358929D5306 -CT=8B85DE2CBE5C96CBDFE16064079754D9 - -I=369 -KEY=6718C10E683F4D73EB994A7BD0DD63D74765C4DCEE3B853F -IV=8B85DE2CBE5C96CBDFE16064079754D9 -PT=59BFDA108542EDDB7BE2AB5ADBDA3FAF -CT=56FF53384CED780F604F86EC0CE26B26 - -I=370 -KEY=704ED4F1E96776A2BD6619439C301BD8272A4230E2D9EE19 -IV=56FF53384CED780F604F86EC0CE26B26 -PT=468FDBDB8BC26B5A175615FF81583BD1 -CT=7B0C2436262A262C5FAFC3A9B786DB00 - -I=371 -KEY=67AFB86317B622B2C66A3D75BA1A3DF478858199555F3519 -IV=7B0C2436262A262C5FAFC3A9B786DB00 -PT=768BE978E5E8CA6E17E16C92FED15410 -CT=D32206D5D1521AB667516391810F5719 - -I=372 -KEY=0BF4E0C32EA3D69615483BA06B4827421FD4E208D4506200 -IV=D32206D5D1521AB667516391810F5719 -PT=1943C5D93D10A0E36C5B58A03915F424 -CT=6BCE2BEC0D5A0DA9051AF2B34A873694 - -I=373 -KEY=924D1C527572A2EF7E86104C66122AEB1ACE10BB9ED75494 -IV=6BCE2BEC0D5A0DA9051AF2B34A873694 -PT=E3020D099D0841C299B9FC915BD17479 -CT=3BEBA6BA0762BF5FAA4D26B70071B4A9 - -I=374 -KEY=CFA41DB53F2F8766456DB6F6617095B4B083360C9EA6E03D -IV=3BEBA6BA0762BF5FAA4D26B70071B4A9 -PT=31F7316F0D1012CD5DE901E74A5D2589 -CT=C4253CED7F88DF97596B08A15BAEF533 - -I=375 -KEY=E2B9D43008C1537281488A1B1EF84A23E9E83EADC508150E -IV=C4253CED7F88DF97596B08A15BAEF533 -PT=00365D6755A898E62D1DC98537EED414 -CT=2D4EB6BA84D1C0C978EA20C1693BB75C - -I=376 -KEY=43EA75DFD5B35CCBAC063CA19A298AEA91021E6CAC33A252 -IV=2D4EB6BA84D1C0C978EA20C1693BB75C -PT=599279C68B67A988A153A1EFDD720FB9 -CT=03698CC5E133AD8855B847C124FD2778 - -I=377 -KEY=8F2C76FCFBD8060DAF6FB0647B1A2762C4BA59AD88CE852A -IV=03698CC5E133AD8855B847C124FD2778 -PT=47EFAF7E090B94B5CCC603232E6B5AC6 -CT=8D44C11C25ADE5631E05FAAECCA70AF7 - -I=378 -KEY=E02084775A2E1A4E222B71785EB7C201DABFA30344698FDD -IV=8D44C11C25ADE5631E05FAAECCA70AF7 -PT=394EC624EBC0D79E6F0CF28BA1F61C43 -CT=5EB407847213D5E950C66787B140BC35 - -I=379 -KEY=D8208A70940589F47C9F76FC2CA417E88A79C484F52933E8 -IV=5EB407847213D5E950C66787B140BC35 -PT=F28816D227AC09F538000E07CE2B93BA -CT=2D4FBD74A027526BADC8C2A433963C22 - -I=380 -KEY=858193C76AFE48D951D0CB888C83458327B10620C6BF0FCA -IV=2D4FBD74A027526BADC8C2A433963C22 -PT=FBAA6C644F8E08885DA119B7FEFBC12D -CT=FA2DAE761EBBFDE4B77CBCD2381165DB - -I=381 -KEY=DA9A9F800056FC6EABFD65FE9238B86790CDBAF2FEAE6A11 -IV=FA2DAE761EBBFDE4B77CBCD2381165DB -PT=F66A574C26D0F15C5F1B0C476AA8B4B7 -CT=DB18F5B16BF19C2BCCA36091A302BF38 - -I=382 -KEY=BD2AB07F036032AB70E5904FF9C9244C5C6EDA635DACD529 -IV=DB18F5B16BF19C2BCCA36091A302BF38 -PT=04B0C1A19C6D38B467B02FFF0336CEC5 -CT=D3F01581B21DF4E470EE595CAB44912C - -I=383 -KEY=7EF57F6BDE41D79CA31585CE4BD4D0A82C80833FF6E84405 -IV=D3F01581B21DF4E470EE595CAB44912C -PT=83BF32E0F3F3CEE7C3DFCF14DD21E537 -CT=10C69B9A04E0851B63D85D025BBACA29 - -I=384 -KEY=22057A9912BB6B76B3D31E544F3455B34F58DE3DAD528E2C -IV=10C69B9A04E0851B63D85D025BBACA29 -PT=150ACC96322893CC5CF005F2CCFABCEA -CT=2743FE5769DDA5D591318E200AF672D0 - -I=385 -KEY=742A2117B51176E69490E00326E9F066DE69501DA7A4FCFC -IV=2743FE5769DDA5D591318E200AF672D0 -PT=93246C1A26F66DAF562F5B8EA7AA1D90 -CT=5CA8FC8DB4A20B2CA8AB86B1B40DA1A1 - -I=386 -KEY=3C09F8C3B20BE749C8381C8E924BFB4A76C2D6AC13A95D5D -IV=5CA8FC8DB4A20B2CA8AB86B1B40DA1A1 -PT=D91806E0F3451C374823D9D4071A91AF -CT=25701E4C6685C98333566EB75498AEB7 - -I=387 -KEY=DD0386F2D0D1E8FFED4802C2F4CE32C94594B81B4731F3EA -IV=25701E4C6685C98333566EB75498AEB7 -PT=701A5D7027053688E10A7E3162DA0FB6 -CT=E4A5889FC49B62F767F61F1D2810801A - -I=388 -KEY=BB9A1FA7287B0D3D09ED8A5D3055503E2262A7066F2173F0 -IV=E4A5889FC49B62F767F61F1D2810801A -PT=A110B0A38255279B66999955F8AAE5C2 -CT=F1A9BDA2045F3EAE2AB9CEE2AD352270 - -I=389 -KEY=21B561DC3C44B5A5F84437FF340A6E9008DB69E4C2145180 -IV=F1A9BDA2045F3EAE2AB9CEE2AD352270 -PT=1562CF8420963B479A2F7E7B143FB898 -CT=E7E2BA657D3482A4825D643B8C01B52E - -I=390 -KEY=60A0FA1F5FA435401FA68D9A493EEC348A860DDF4E15E4AE -IV=E7E2BA657D3482A4825D643B8C01B52E -PT=930490633BC4EDC941159BC363E080E5 -CT=2FDBCD145EB8620594834B0D63BBD137 - -I=391 -KEY=7DD1686F811E4017307D408E17868E311E0546D22DAE3599 -IV=2FDBCD145EB8620594834B0D63BBD137 -PT=4BB1C43F4ABC51CD1D719270DEBA7557 -CT=B703658AD9FFCDE05E2C7E252990402E - -I=392 -KEY=18203DC5AAA632F5877E2504CE7943D1402938F7043E75B7 -IV=B703658AD9FFCDE05E2C7E252990402E -PT=47931942F275F05E65F155AA2BB872E2 -CT=5B79CB7FA90D3BB5A979A4588D4DE434 - -I=393 -KEY=9F6D532CBAF42FCDDC07EE7B67747864E9509CAF89739183 -IV=5B79CB7FA90D3BB5A979A4588D4DE434 -PT=E3A36DF4EB896B4D874D6EE910521D38 -CT=61BF460521E67B3CAC638F3298EF9310 - -I=394 -KEY=ED4F97BC99036E83BDB8A87E469203584533139D119C0293 -IV=61BF460521E67B3CAC638F3298EF9310 -PT=55EABDF72CCB5D737222C49023F7414E -CT=8A27D87B53B2FB8BBAFF7851AF1D51F2 - -I=395 -KEY=E1B9A7291D885F8E379F70051520F8D3FFCC6BCCBE815361 -IV=8A27D87B53B2FB8BBAFF7851AF1D51F2 -PT=D30271EA236E948F0CF63095848B310D -CT=15075FDCBD2D6FC15B9A3841A2D58C34 - -I=396 -KEY=976B101EE3E10E0822982FD9A80D9712A456538D1C54DF55 -IV=15075FDCBD2D6FC15B9A3841A2D58C34 -PT=879EED3434159D8076D2B737FE695186 -CT=6896582462983FAAE443078F9768B339 - -I=397 -KEY=A7A3277BF5F605FC4A0E77FDCA95A8B8401554028B3C6C6C -IV=6896582462983FAAE443078F9768B339 -PT=89DDABE96D1069ED30C8376516170BF4 -CT=96FE6B921416B667AA5B34D2D2E25747 - -I=398 -KEY=DD57026B1D4E32A8DCF01C6FDE831EDFEA4E60D059DE3B2B -IV=96FE6B921416B667AA5B34D2D2E25747 -PT=8144C8BB09FC72827AF42510E8B83754 -CT=EEDC3677AB7B57829F6D733F8090DA8A - -I=399 -KEY=B4D1BDF297DC0574322C2A1875F8495D752313EFD94EE1A1 -IV=EEDC3677AB7B57829F6D733F8090DA8A -PT=510F7A55799B39786986BF998A9237DC -CT=BA50C94440C04A8C0899D42658E25437 - -========== - -KEYSIZE=256 - -I=0 -KEY=0000000000000000000000000000000000000000000000000000000000000000 -IV=00000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=FE3C53653E2F45B56FCD88B2CC898FF0 - -I=1 -KEY=B2493DE29713367D9FAA93469F8EF596FE3C53653E2F45B56FCD88B2CC898FF0 -IV=FE3C53653E2F45B56FCD88B2CC898FF0 -PT=B2493DE29713367D9FAA93469F8EF596 -CT=7CE2ABAF8BEF23C4816DC8CE842048A7 - -I=2 -KEY=33A36646FE56F70DC0C51A3117E639F182DEF8CAB5C06671EEA0407C48A9C757 -IV=7CE2ABAF8BEF23C4816DC8CE842048A7 -PT=81EA5BA46945C1705F6F89778868CC67 -CT=50CD14A12C6852D39654C816BFAF9AC2 - -I=3 -KEY=0D6A3DACE75B104CA8A303A32670BF3AD213EC6B99A834A278F4886AF7065D95 -IV=50CD14A12C6852D39654C816BFAF9AC2 -PT=3EC95BEA190DE74168661992319686CB -CT=3F411DAD0E339FE281637133BF46BD13 - -I=4 -KEY=A53BE0709BF686A7DB7C3848D81AB66BED52F1C6979BAB40F997F9594840E086 -IV=3F411DAD0E339FE281637133BF46BD13 -PT=A851DDDC7CAD96EB73DF3BEBFE6A0951 -CT=5BA2C7663A4061719A7CCC2AF2A3EE8A - -I=5 -KEY=ECF3490CB7717A5236A3A94811BEBF13B6F036A0ADDBCA3163EB3573BAE30E0C -IV=5BA2C7663A4061719A7CCC2AF2A3EE8A -PT=49C8A97C2C87FCF5EDDF9100C9A40978 -CT=F105031CE7E5111317745C64F4F6D150 - -I=6 -KEY=CE8A062A2A9F9EDE2EFB43A8602BB47847F535BC4A3EDB22749F69174E15DF5C -IV=F105031CE7E5111317745C64F4F6D150 -PT=22794F269DEEE48C1858EAE071950B6B -CT=C8F030398A873550A34386D9A153D833 - -I=7 -KEY=2BE39545B8FC27444178BF0004C7F1048F050585C0B9EE72D7DCEFCEEF46076F -IV=C8F030398A873550A34386D9A153D833 -PT=E569936F9263B99A6F83FCA864EC457C -CT=519CF42C0BBFCBD79679089BC5E963B4 - -I=8 -KEY=80E9C0F78F99E309935C0A69B961D787DE99F1A9CB0625A541A5E7552AAF64DB -IV=519CF42C0BBFCBD79679089BC5E963B4 -PT=AB0A55B23765C44DD224B569BDA62683 -CT=64AC8FEA3B83584E9B7379B48F88B7A4 - -I=9 -KEY=48DDBDA704BA7702960820A0D2CA485CBA357E43F0857DEBDAD69EE1A527D37F -IV=64AC8FEA3B83584E9B7379B48F88B7A4 -PT=C8347D508B23940B05542AC96BAB9FDB -CT=2B1F53F35A308673E9B1E004C32B2080 - -I=10 -KEY=D26C4C6BE601D63BDDE6F1A49B5124CB912A2DB0AAB5FB9833677EE5660CF3FF -IV=2B1F53F35A308673E9B1E004C32B2080 -PT=9AB1F1CCE2BBA1394BEED104499B6C97 -CT=0DAE66B5741FE38E544D9EC4E90ABDAF - -I=11 -KEY=D241355DB8FC5F23D0D207F72E290F189C844B05DEAA1816672AE0218F064E50 -IV=0DAE66B5741FE38E544D9EC4E90ABDAF -PT=002D79365EFD89180D34F653B5782BD3 -CT=D00122636CC0D9D62E614EAF0963C448 - -I=12 -KEY=1BC3268A0B674A05B2FC6E18460231564C856966B26AC1C0494BAE8E86658A18 -IV=D00122636CC0D9D62E614EAF0963C448 -PT=C98213D7B39B1526622E69EF682B3E4E -CT=30EF014D1766651C524B3CC82F0140C6 - -I=13 -KEY=50BE5951A5C2403C52425897C442A8457C6A682BA50CA4DC1B009246A964CADE -IV=30EF014D1766651C524B3CC82F0140C6 -PT=4B7D7FDBAEA50A39E0BE368F82409913 -CT=BAD488702B447FABEC2074E1DD37E631 - -I=14 -KEY=C007EE52430FF98EDD206C94ED349DE6C6BEE05B8E48DB77F720E6A774532CEF -IV=BAD488702B447FABEC2074E1DD37E631 -PT=90B9B703E6CDB9B28F623403297635A3 -CT=EC3862EB60E7D8D0827645BD690F71B8 - -I=15 -KEY=AE37C1DBEBF9B269E8D10CC4F046F9FC2A8682B0EEAF03A77556A31A1D5C5D57 -IV=EC3862EB60E7D8D0827645BD690F71B8 -PT=6E302F89A8F64BE735F160501D72641A -CT=6073D1F25F3697C1E07384C67D71D8AE - -I=16 -KEY=86E8B9050AB24200E3757B67F08761534AF55342B1999466952527DC602D85F9 -IV=6073D1F25F3697C1E07384C67D71D8AE -PT=28DF78DEE14BF0690BA477A300C198AF -CT=90EF55AB8837792F82CF0F002E36F8DB - -I=17 -KEY=DE93EA10BB6DC2B0A6D3919561CE5AE4DA1A06E939AEED4917EA28DC4E1B7D22 -IV=90EF55AB8837792F82CF0F002E36F8DB -PT=587B5315B1DF80B045A6EAF291493BB7 -CT=063783CB1A2137732D10CA6233C5CE93 - -I=18 -KEY=3D147E3727A1FEB2C6F36AB9DF772E97DC2D8522238FDA3A3AFAE2BE7DDEB3B1 -IV=063783CB1A2137732D10CA6233C5CE93 -PT=E38794279CCC3C026020FB2CBEB97473 -CT=79C5CEEE64BFD33948D2E08EBE25B7E9 - -I=19 -KEY=34586C52923969647663A0D69436D7D1A5E84BCC4730090372280230C3FB0458 -IV=79C5CEEE64BFD33948D2E08EBE25B7E9 -PT=094C1265B59897D6B090CA6F4B41F946 -CT=87DFB65D575F56670DB739C988FD7DE5 - -I=20 -KEY=53724BF79612A7F0237927604619DD592237FD91106F5F647F9F3BF94B0679BD -IV=87DFB65D575F56670DB739C988FD7DE5 -PT=672A27A5042BCE94551A87B6D22F0A88 -CT=643F46BC77A5FE2434753B9C38142583 - -I=21 -KEY=8FBC30746F29985FFFA43C8BD3C4FC664608BB2D67CAA1404BEA006573125C3E -IV=643F46BC77A5FE2434753B9C38142583 -PT=DCCE7B83F93B3FAFDCDD1BEB95DD213F -CT=FD774BD6874EA7C0D790A5015440B664 - -I=22 -KEY=9A61A910701A4A42873549F78D3D9FD1BB7FF0FBE08406809C7AA5642752EA5A -IV=FD774BD6874EA7C0D790A5015440B664 -PT=15DD99641F33D21D7891757C5EF963B7 -CT=BFCEF4403428F5C96C24C249962371D4 - -I=23 -KEY=8D98738F6DF30113AF69A7A61C1582EE04B104BBD4ACF349F05E672DB1719B8E -IV=BFCEF4403428F5C96C24C249962371D4 -PT=17F9DA9F1DE94B51285CEE5191281D3F -CT=CC79F35C41F0E6C0EB03472B1D13029E - -I=24 -KEY=976C27F1A15FF6780043636FC4777090C8C8F7E7955C15891B5D2006AC629910 -IV=CC79F35C41F0E6C0EB03472B1D13029E -PT=1AF4547ECCACF76BAF2AC4C9D862F27E -CT=0629B80F94FBC2C1984985B9F3B85BDD - -I=25 -KEY=E8934C533DED166F58D65C9E60A906A5CEE14FE801A7D7488314A5BF5FDAC2CD -IV=0629B80F94FBC2C1984985B9F3B85BDD -PT=7FFF6BA29CB2E01758953FF1A4DE7635 -CT=F2A70F4ED1A836696841D523F2650B55 - -I=26 -KEY=8116688C16D2C26D162C4D813FB267103C4640A6D00FE121EB55709CADBFC998 -IV=F2A70F4ED1A836696841D523F2650B55 -PT=698524DF2B3FD4024EFA111F5F1B61B5 -CT=A9B5565EB9B5D5DAC52BE0F449FBE11A - -I=27 -KEY=5A7062E77C6D20563AFD0BFDAAE04BE995F316F869BA34FB2E7E9068E4442882 -IV=A9B5565EB9B5D5DAC52BE0F449FBE11A -PT=DB660A6B6ABFE23B2CD1467C95522CF9 -CT=E47F675379D4CE3DDABA0F906BE014B2 - -I=28 -KEY=4DDC0A5938F4A3DC1AF8D3AFD3DF6198718C71AB106EFAC6F4C49FF88FA43C30 -IV=E47F675379D4CE3DDABA0F906BE014B2 -PT=17AC68BE4499838A2005D852793F2A71 -CT=7B95AB0E030C70B7940ECDAEFCA570A5 - -I=29 -KEY=E287EFC66626600AF3453F68BE53E5250A19DAA513628A7160CA525673014C95 -IV=7B95AB0E030C70B7940ECDAEFCA570A5 -PT=AF5BE59F5ED2C3D6E9BDECC76D8C84BD -CT=E854E5DE0C42D57B869C29FC8D5AFFF3 - -I=30 -KEY=7F3415A538F60B24A58447E1D38805B3E24D3F7B1F205F0AE6567BAAFE5BB366 -IV=E854E5DE0C42D57B869C29FC8D5AFFF3 -PT=9DB3FA635ED06B2E56C178896DDBE096 -CT=4E55EDEDC35CDEAB3BFB2B5D39871625 - -I=31 -KEY=59E5F5ECC5693DA07046636094970E8CAC18D296DC7C81A1DDAD50F7C7DCA543 -IV=4E55EDEDC35CDEAB3BFB2B5D39871625 -PT=26D1E049FD9F3684D5C22481471F0B3F -CT=3355C2CC762E58FA941E0004209CA710 - -I=32 -KEY=0B62CF7EA869036A529E9D184574CD609F4D105AAA52D95B49B350F3E7400253 -IV=3355C2CC762E58FA941E0004209CA710 -PT=52873A926D003ECA22D8FE78D1E3C3EC -CT=9B86680D69D38870268D42E78EDA2B50 - -I=33 -KEY=CEDC9CCC4DC42CB055EDC50597EE24DF04CB7857C381512B6F3E1214699A2903 -IV=9B86680D69D38870268D42E78EDA2B50 -PT=C5BE53B2E5AD2FDA0773581DD29AE9BF -CT=05DD4896F08EEAA6A53FA7BCF183F538 - -I=34 -KEY=CA30B422016C86247D75B618D19247AC011630C1330FBB8DCA01B5A89819DC3B -IV=05DD4896F08EEAA6A53FA7BCF183F538 -PT=04EC28EE4CA8AA942898731D467C6373 -CT=F81E56F4390D65C7959348A6FBD8A94E - -I=35 -KEY=B7096A2EC0259DA21ACA6DBE637A9F15F90866350A02DE4A5F92FD0E63C17575 -IV=F81E56F4390D65C7959348A6FBD8A94E -PT=7D39DE0CC1491B8667BFDBA6B2E8D8B9 -CT=4364CA2D90FA256084DF8E2FCDC62AB3 - -I=36 -KEY=436C0894D4436149EE685F0061BDF3AEBA6CAC189AF8FB2ADB4D7321AE075FC6 -IV=4364CA2D90FA256084DF8E2FCDC62AB3 -PT=F46562BA1466FCEBF4A232BE02C76CBB -CT=0991DE19A5ABE5F7E8AE24120789B9AB - -I=37 -KEY=44E1636AFF962EC4F1C446A89B9393C6B3FD72013F531EDD33E35733A98EE66D -IV=0991DE19A5ABE5F7E8AE24120789B9AB -PT=078D6BFE2BD54F8D1FAC19A8FA2E6068 -CT=0F4EF4FA608671AC5F71063CF6C1EBDE - -I=38 -KEY=44289918A9E99F859FC2F604FE38B86EBCB386FB5FD56F716C92510F5F4F0DB3 -IV=0F4EF4FA608671AC5F71063CF6C1EBDE -PT=00C9FA72567FB1416E06B0AC65AB2BA8 -CT=2D6A2A1CC9D208C16236BBC9451EC5E1 - -I=39 -KEY=BE5907C77B0939D20575F27427A2C3FE91D9ACE7960767B00EA4EAC61A51C852 -IV=2D6A2A1CC9D208C16236BBC9451EC5E1 -PT=FA719EDFD2E0A6579AB70470D99A7B90 -CT=237A8DFBA42708BBF7E540766F2059F1 - -I=40 -KEY=CD97125720F2002207AC44C456CDDF0DB2A3211C32206F0BF941AAB0757191A3 -IV=237A8DFBA42708BBF7E540766F2059F1 -PT=73CE15905BFB39F002D9B6B0716F1CF3 -CT=2D1AB5CF3E9C27ADA9FB45F15007A7BB - -I=41 -KEY=123F64F2A28C80C2F6E000F69C8E5A639FB994D30CBC48A650BAEF4125763618 -IV=2D1AB5CF3E9C27ADA9FB45F15007A7BB -PT=DFA876A5827E80E0F14C4432CA43856E -CT=7039C9AF1E10FE99A91483EA578AE6DD - -I=42 -KEY=6CD69C4F5AD7CB5E9E4574F6A48FDB28EF805D7C12ACB63FF9AE6CAB72FCD0C5 -IV=7039C9AF1E10FE99A91483EA578AE6DD -PT=7EE9F8BDF85B4B9C68A574003801814B -CT=116DD8566366A19EEAF2F3E744B3EF9C - -I=43 -KEY=C73969C7D6D057003E2E215D94978792FEED852A71CA17A1135C9F4C364F3F59 -IV=116DD8566366A19EEAF2F3E744B3EF9C -PT=ABEFF5888C079C5EA06B55AB30185CBA -CT=648A801EF27E77D964BB751A32B8CFE8 - -I=44 -KEY=E0960DD6E807F3D0B5DF057D0D1E6DCC9A67053483B4607877E7EA5604F7F0B1 -IV=648A801EF27E77D964BB751A32B8CFE8 -PT=27AF64113ED7A4D08BF124209989EA5E -CT=D18AE728717C535049868FA6F1B4294E - -I=45 -KEY=466AE043435C6CCA67FF1C5D4B4175DA4BEDE21CF2C833283E6165F0F543D9FF -IV=D18AE728717C535049868FA6F1B4294E -PT=A6FCED95AB5B9F1AD2201920465F1816 -CT=169B55360728DA8F582C488F2569411F - -I=46 -KEY=27E1BC4931601D667CD807454D58B2BB5D76B72AF5E0E9A7664D2D7FD02A98E0 -IV=169B55360728DA8F582C488F2569411F -PT=618B5C0A723C71AC1B271B180619C761 -CT=67DADCF7C31CA394F46F18AB1AEA022E - -I=47 -KEY=2D4EB1F3A709F0A4CA5E2CD47F8F10123AAC6BDD36FC4A33922235D4CAC09ACE -IV=67DADCF7C31CA394F46F18AB1AEA022E -PT=0AAF0DBA9669EDC2B6862B9132D7A2A9 -CT=A5D49BDF099335166BBFDCBE29C90B80 - -I=48 -KEY=2A90CE470EB8C9400B056307D53452BE9F78F0023F6F7F25F99DE96AE309914E -IV=A5D49BDF099335166BBFDCBE29C90B80 -PT=07DE7FB4A9B139E4C15B4FD3AABB42AC -CT=5AFC238F19E369E77278593C6E20A946 - -I=49 -KEY=90B696E9A0792BFF7BF21BE373731CB5C584D38D268C16C28BE5B0568D293808 -IV=5AFC238F19E369E77278593C6E20A946 -PT=BA2658AEAEC1E2BF70F778E4A6474E0B -CT=2861A363922099D0F0B2A5AD2A5F421E - -I=50 -KEY=4FE5C563B7DB98C6B9CCA52F313FBAFCEDE570EEB4AC8F127B5715FBA7767A16 -IV=2861A363922099D0F0B2A5AD2A5F421E -PT=DF53538A17A2B339C23EBECC424CA649 -CT=D76E51B6EA5F74D0116C4D16EDD0DFAC - -I=51 -KEY=EBF784D98E40372429819EE23BE85B723A8B21585EF3FBC26A3B58ED4AA6A5BA -IV=D76E51B6EA5F74D0116C4D16EDD0DFAC -PT=A41241BA399BAFE2904D3BCD0AD7E18E -CT=6214F5E50EC99F40B86951CE395C8315 - -I=52 -KEY=C01A5093C6A29CEED72D14D903BD17E8589FD4BD503A6482D252092373FA26AF -IV=6214F5E50EC99F40B86951CE395C8315 -PT=2BEDD44A48E2ABCAFEAC8A3B38554C9A -CT=6CFC2188E40E806BBE277988B924627E - -I=53 -KEY=A8C3A10380B6D4D1CEFABF57F3C695193463F535B434E4E96C7570ABCADE44D1 -IV=6CFC2188E40E806BBE277988B924627E -PT=68D9F1904614483F19D7AB8EF07B82F1 -CT=B98E851902AEC129FD1607DECA9E0669 - -I=54 -KEY=B828711ABA1D06408099944287112DE58DED702CB69A25C091637775004042B8 -IV=B98E851902AEC129FD1607DECA9E0669 -PT=10EBD0193AABD2914E632B1574D7B8FC -CT=DBDA9DB56E6FF915D67D7DEE541DD6A3 - -I=55 -KEY=3B0E9FE343D665ABB3706243EF023C765637ED99D8F5DCD5471E0A9B545D941B -IV=DBDA9DB56E6FF915D67D7DEE541DD6A3 -PT=8326EEF9F9CB63EB33E9F60168131193 -CT=399802CE3FF3878A73C7D85E19FDD54B - -I=56 -KEY=9270D72D972B46C8E630FBD1AA67FBED6FAFEF57E7065B5F34D9D2C54DA04150 -IV=399802CE3FF3878A73C7D85E19FDD54B -PT=A97E48CED4FD2363554099924565C79B -CT=40FABA067414961FD964EC91196943E3 - -I=57 -KEY=017211AC512541BFBDD0292385AA20862F5555519312CD40EDBD3E5454C902B3 -IV=40FABA067414961FD964EC91196943E3 -PT=9302C681C60E07775BE0D2F22FCDDB6B -CT=6BF1125E581341510FD02B9450886B17 - -I=58 -KEY=AC2652A877F924710178641D20B239B944A4470FCB018C11E26D15C0044169A4 -IV=6BF1125E581341510FD02B9450886B17 -PT=AD54430426DC65CEBCA84D3EA518193F -CT=74871D2EF6D1F29181B0A2530885EEC8 - -I=59 -KEY=0BF012A9F0CB194C1F00893D4803E10130235A213DD07E8063DDB7930CC4876C -IV=74871D2EF6D1F29181B0A2530885EEC8 -PT=A7D6400187323D3D1E78ED2068B1D8B8 -CT=2A2DC9F5CB47C94D430ECAAAB1D0811E - -I=60 -KEY=8D22EEEA013E327509E84630166331DB1A0E93D4F697B7CD20D37D39BD140672 -IV=2A2DC9F5CB47C94D430ECAAAB1D0811E -PT=86D2FC43F1F52B3916E8CF0D5E60D0DA -CT=BC318E32957CE6577CD06E2D3166CD1F - -I=61 -KEY=1C4909D11840D978FD7232D0FBC0E6A3A63F1DE663EB519A5C0313148C72CB6D -IV=BC318E32957CE6577CD06E2D3166CD1F -PT=916BE73B197EEB0DF49A74E0EDA3D778 -CT=E9858DBB1B5145ABB598ADE882346DDB - -I=62 -KEY=DD2ED3C6FCE0034F19259D57A35B60CF4FBA905D78BA1431E99BBEFC0E46A6B6 -IV=E9858DBB1B5145ABB598ADE882346DDB -PT=C167DA17E4A0DA37E457AF87589B866C -CT=1E04B15BBF727BEAC33C0C26141636DD - -I=63 -KEY=81C434CDF7EABAA49252EC86DFE15FBA51BE2106C7C86FDB2AA7B2DA1A50906B -IV=1E04B15BBF727BEAC33C0C26141636DD -PT=5CEAE70B0B0AB9EB8B7771D17CBA3F75 -CT=EB21AED731D594017F5729262A1E23B4 - -I=64 -KEY=AEF6BF8323CAE4C2270CC5E51B0A3BFFBA9F8FD1F61DFBDA55F09BFC304EB3DF -IV=EB21AED731D594017F5729262A1E23B4 -PT=2F328B4ED4205E66B55E2963C4EB6445 -CT=EB73CFADA0ACB98B37091CB81489CC7C - -I=65 -KEY=BC3BD548867FA82FF80EF67B38016A1E51EC407C56B1425162F9874424C77FA3 -IV=EB73CFADA0ACB98B37091CB81489CC7C -PT=12CD6ACBA5B54CEDDF02339E230B51E1 -CT=1FEEF226D6759E8813B98A5D43B2F22A - -I=66 -KEY=E1F5760C694DBE5688A0241B5517B4B14E02B25A80C4DCD971400D1967758D89 -IV=1FEEF226D6759E8813B98A5D43B2F22A -PT=5DCEA344EF32167970AED2606D16DEAF -CT=9C591D087F0F45C8AE3DEC9C455FE200 - -I=67 -KEY=ABF2D79C472D0159FA9AE646D0C0FC9CD25BAF52FFCB9911DF7DE185222A6F89 -IV=9C591D087F0F45C8AE3DEC9C455FE200 -PT=4A07A1902E60BF0F723AC25D85D7482D -CT=62C4F4D7E4AC5ABC03BECA3CA56DA4FD - -I=68 -KEY=E58A351A4DD79A2ED6D386E11A8563F2B09F5B851B67C3ADDCC32BB98747CB74 -IV=62C4F4D7E4AC5ABC03BECA3CA56DA4FD -PT=4E78E2860AFA9B772C4960A7CA459F6E -CT=AD8557C0D04675CC312C7A106D5C8B83 - -I=69 -KEY=BCF7BB1010AF5CEB05E06339689067E31D1A0C45CB21B661EDEF51A9EA1B40F7 -IV=AD8557C0D04675CC312C7A106D5C8B83 -PT=597D8E0A5D78C6C5D333E5D872150411 -CT=80159F4F5E0C2DC07D3CD3C52A1A8E6D - -I=70 -KEY=328BB8EB86055D2BB52A02E40BB5D2C39D0F930A952D9BA190D3826CC001CE9A -IV=80159F4F5E0C2DC07D3CD3C52A1A8E6D -PT=8E7C03FB96AA01C0B0CA61DD6325B520 -CT=F58A2EE5A5BDE8CA0A96F4F4B64BE737 - -I=71 -KEY=F192AE51D926A2B68C38EA4E48A0590F6885BDEF3090736B9A457698764A29AD -IV=F58A2EE5A5BDE8CA0A96F4F4B64BE737 -PT=C31916BA5F23FF9D3912E8AA43158BCC -CT=B4C0DD55013AEFE12D94F31B861134CC - -I=72 -KEY=5EE48E38C2C805E2AACC89AD8682E552DC4560BA31AA9C8AB7D18583F05B1D61 -IV=B4C0DD55013AEFE12D94F31B861134CC -PT=AF7620691BEEA75426F463E3CE22BC5D -CT=FD8B06AEF9B3C25D11B950A6648276BB - -I=73 -KEY=F425B9BF4D114251736EE7FCDB430B6721CE6614C8195ED7A668D52594D96BDA -IV=FD8B06AEF9B3C25D11B950A6648276BB -PT=AAC137878FD947B3D9A26E515DC1EE35 -CT=31BE8DF4A8A749FBF11AB07D8479A10B - -I=74 -KEY=61A2D5337BCB827887F884AD98C67BEA1070EBE060BE172C5772655810A0CAD1 -IV=31BE8DF4A8A749FBF11AB07D8479A10B -PT=95876C8C36DAC029F49663514385708D -CT=E9A2EF0C882781788D50033B79FE181F - -I=75 -KEY=E930B2277AC4475FB0A94519F60DE552F9D204ECE8999654DA226663695ED2CE -IV=E9A2EF0C882781788D50033B79FE181F -PT=88926714010FC5273751C1B46ECB9EB8 -CT=17FFCD5A010709A2737570E038D63B27 - -I=76 -KEY=B944CE978DF68F8FBFF0A5EA62AAC299EE2DC9B6E99E9FF6A95716835188E9E9 -IV=17FFCD5A010709A2737570E038D63B27 -PT=50747CB0F732C8D00F59E0F394A727CB -CT=E12B89FA1B1DD3B29F02219FD3D7D3D2 - -I=77 -KEY=0E2D7FCEB557462267BED2CCA8B48CD70F06404CF2834C443655371C825F3A3B -IV=E12B89FA1B1DD3B29F02219FD3D7D3D2 -PT=B769B15938A1C9ADD84E7726CA1E4E4E -CT=75AE99B6022B08E36FB88A6F4D7698BF - -I=78 -KEY=8046D73D60912221694B2AFE703EDB167AA8D9FAF0A844A759EDBD73CF29A284 -IV=75AE99B6022B08E36FB88A6F4D7698BF -PT=8E6BA8F3D5C664030EF5F832D88A57C1 -CT=CF32DCE11FDB098A6435315342796064 - -I=79 -KEY=20716D6975C32231968BF76725144CBAB59A051BEF734D2D3DD88C208D50C2E0 -IV=CF32DCE11FDB098A6435315342796064 -PT=A037BA5415520010FFC0DD99552A97AC -CT=80F12B261317C66F21AC811230848468 - -I=80 -KEY=AD5A2011E425AFFD57E7191336D37D25356B2E3DFC648B421C740D32BDD44688 -IV=80F12B261317C66F21AC811230848468 -PT=8D2B4D7891E68DCCC16CEE7413C7319F -CT=F2C6B70C19A5748C6D2B5DE41544854F - -I=81 -KEY=49D4228508C789105CF457D10FA56048C7AD9931E5C1FFCE715F50D6A890C3C7 -IV=F2C6B70C19A5748C6D2B5DE41544854F -PT=E48E0294ECE226ED0B134EC239761D6D -CT=A31FB3535978DAA555DD617FAB27A97A - -I=82 -KEY=67CE710A3E778CB4A37D1F2274D4462D64B22A62BCB9256B248231A903B76ABD -IV=A31FB3535978DAA555DD617FAB27A97A -PT=2E1A538F36B005A4FF8948F37B712665 -CT=97336ECFAE89015E0B5A7D1C154C71BF - -I=83 -KEY=A87C517EF43CACC6D41EEB661DD1142CF38144AD123024352FD84CB516FB1B02 -IV=97336ECFAE89015E0B5A7D1C154C71BF -PT=CFB22074CA4B20727763F44469055201 -CT=466CD227A6A9D5FC3C0579064530FCE0 - -I=84 -KEY=D73F926A5B5DD8F5B82DE8F77E0E0697B5ED968AB499F1C913DD35B353CBE7E2 -IV=466CD227A6A9D5FC3C0579064530FCE0 -PT=7F43C314AF6174336C33039163DF12BB -CT=4F444B4554E965A113DC0097AA8FAD7A - -I=85 -KEY=7A19BE1C42A13B85B754834E9808DF4BFAA9DDCFE070946800013524F9444A98 -IV=4F444B4554E965A113DC0097AA8FAD7A -PT=AD262C7619FCE3700F796BB9E606D9DC -CT=F7078ABE7617867274CBBEDA1082B987 - -I=86 -KEY=D256675EDBF987B5CA86C21DE177C6A00DAE57719667121A74CA8BFEE9C6F31F -IV=F7078ABE7617867274CBBEDA1082B987 -PT=A84FD9429958BC307DD24153797F19EB -CT=676ACAB66B04597F1A33FF462BD5E0EE - -I=87 -KEY=C025616AB6F89BB1B90AA0E8F63FF1CC6AC49DC7FD634B656EF974B8C21313F1 -IV=676ACAB66B04597F1A33FF462BD5E0EE -PT=127306346D011C04738C62F51748376C -CT=BF66B8DD1E540A4FED759FDB9A44B439 - -I=88 -KEY=2A437D44D93C25B3233FB168D63751A5D5A2251AE337412A838CEB635857A7C8 -IV=BF66B8DD1E540A4FED759FDB9A44B439 -PT=EA661C2E6FC4BE029A3511802008A069 -CT=EC8DBB5B3FE245180856B312D3052A87 - -I=89 -KEY=838278123F0261D1F287C9FF94CA4A55392F9E41DCD504328BDA58718B528D4F -IV=EC8DBB5B3FE245180856B312D3052A87 -PT=A9C10556E63E4462D1B8789742FD1BF0 -CT=02E1E60312BB371912C35E3EBC6EA755 - -I=90 -KEY=64F3A47C8C7CFA9FF2AC88637C598E6A3BCE7842CE6E332B9919064F373C2A1A -IV=02E1E60312BB371912C35E3EBC6EA755 -PT=E771DC6EB37E9B4E002B419CE893C43F -CT=73D7499EBB38716D71CCB737CFFFA3FB - -I=91 -KEY=585ABE6B779F22400FC2AC3B55B39E91481931DC75564246E8D5B178F8C389E1 -IV=73D7499EBB38716D71CCB737CFFFA3FB -PT=3CA91A17FBE3D8DFFD6E245829EA10FB -CT=CEE7721855B7381D369ECC1C9337BB02 - -I=92 -KEY=7BC1E883465CBBB9BA624FF99308259386FE43C420E17A5BDE4B7D646BF432E3 -IV=CEE7721855B7381D369ECC1C9337BB02 -PT=239B56E831C399F9B5A0E3C2C6BBBB02 -CT=B6F48D369383974D163E4F17FDFC59EF - -I=93 -KEY=70032AF50BB5E080D4AA7722CEDC7DA9300ACEF2B362ED16C875327396086B0C -IV=B6F48D369383974D163E4F17FDFC59EF -PT=0BC2C2764DE95B396EC838DB5DD4583A -CT=E8372DA404126C63190626D95583629D - -I=94 -KEY=5C61B59BDA2FF51D4F4F740578466EA9D83DE356B7708175D17314AAC38B0991 -IV=E8372DA404126C63190626D95583629D -PT=2C629F6ED19A159D9BE50327B69A1300 -CT=F717B53E51665D0854C895EA1D1D7E77 - -I=95 -KEY=59A35E82B9C8D8FF25CFC5BAD979A9052F2A5668E616DC7D85BB8140DE9677E6 -IV=F717B53E51665D0854C895EA1D1D7E77 -PT=05C2EB1963E72DE26A80B1BFA13FC7AC -CT=7D3EE90EEF7C16872F98296977AA9557 - -I=96 -KEY=5BC419836F7C4F57957E13E39B2181455214BF66096ACAFAAA23A829A93CE2B1 -IV=7D3EE90EEF7C16872F98296977AA9557 -PT=02674701D6B497A8B0B1D65942582840 -CT=6DCD0C4B5633078FDEA9AE24781CB212 - -I=97 -KEY=E6D2BB67584AA2FAAE1D0DAD8C9C60253FD9B32D5F59CD75748A060DD12050A3 -IV=6DCD0C4B5633078FDEA9AE24781CB212 -PT=BD16A2E43736EDAD3B631E4E17BDE160 -CT=6515251260A73AE868E992B6D49579C5 - -I=98 -KEY=57637851C3C08A2923EBD2FEA27472DC5ACC963F3FFEF79D1C6394BB05B52966 -IV=6515251260A73AE868E992B6D49579C5 -PT=B1B1C3369B8A28D38DF6DF532EE812F9 -CT=1A40C2C15F03867E81F951B545396BB4 - -I=99 -KEY=E08E94110F1E64554848AB1966299B7D408C54FE60FD71E39D9AC50E408C42D2 -IV=1A40C2C15F03867E81F951B545396BB4 -PT=B7EDEC40CCDEEE7C6BA379E7C45DE9A1 -CT=DD331F336D669EFD37106099EA51010D - -I=100 -KEY=17F2544156745EC108BF97DA806752C39DBF4BCD0D9BEF1EAA8AA597AADD43DF -IV=DD331F336D669EFD37106099EA51010D -PT=F77CC050596A3A9440F73CC3E64EC9BE -CT=0EF37EC0B6071874FF68926D98A0EEAB - -I=101 -KEY=C97ABFF115E20A6C72A6206DB63EC0FD934C350DBB9CF76A55E237FA327DAD74 -IV=0EF37EC0B6071874FF68926D98A0EEAB -PT=DE88EBB0439654AD7A19B7B73659923E -CT=DA1DAEB42178A7657A40BD72A06CEDDC - -I=102 -KEY=77AB469FBC999BB2922D460413E2012049519BB99AE4500F2FA28A88921140A8 -IV=DA1DAEB42178A7657A40BD72A06CEDDC -PT=BED1F96EA97B91DEE08B6669A5DCC1DD -CT=E78523134FC8EAA77CC85E0EEC60FCD3 - -I=103 -KEY=4F88FA6F4053B3A15094ED532C2F47DCAED4B8AAD52CBAA8536AD4867E71BC7B -IV=E78523134FC8EAA77CC85E0EEC60FCD3 -PT=3823BCF0FCCA2813C2B9AB573FCD46FC -CT=BC540D1838D7AD8E8B1C44B96684DD31 - -I=104 -KEY=D178E105443700CFEE007AB3BAA71E4C1280B5B2EDFB1726D876903F18F5614A -IV=BC540D1838D7AD8E8B1C44B96684DD31 -PT=9EF01B6A0464B36EBE9497E096885990 -CT=6C6B95A5D8F4E7F1A5864DDBFCDCEED8 - -I=105 -KEY=8F6A589BA0ED1A67FE426368A7E523047EEB2017350FF0D77DF0DDE4E4298F92 -IV=6C6B95A5D8F4E7F1A5864DDBFCDCEED8 -PT=5E12B99EE4DA1AA8104219DB1D423D48 -CT=B58C92AE19B332621E7A4E5512C88596 - -I=106 -KEY=147895B157BF16B87C32AAA17480A886CB67B2B92CBCC2B5638A93B1F6E10A04 -IV=B58C92AE19B332621E7A4E5512C88596 -PT=9B12CD2AF7520CDF8270C9C9D3658B82 -CT=4D1D90F007BB5099C382E69C9CD1F7E5 - -I=107 -KEY=4C8441FCEBBD595999864A6CC37F7EDB867A22492B07922CA008752D6A30FDE1 -IV=4D1D90F007BB5099C382E69C9CD1F7E5 -PT=58FCD44DBC024FE1E5B4E0CDB7FFD65D -CT=7F59920056EC32FA48F8A9CCCFFE437A - -I=108 -KEY=CD922EEA60F0F136A799C650F5D4B030F923B0497DEBA0D6E8F0DCE1A5CEBE9B -IV=7F59920056EC32FA48F8A9CCCFFE437A -PT=81166F168B4DA86F3E1F8C3C36ABCEEB -CT=A546F57E48A783694577D59F7FD01D9E - -I=109 -KEY=90DE3ECB26E68BDD3C4B7AB9B9CDE6195C654537354C23BFAD87097EDA1EA305 -IV=A546F57E48A783694577D59F7FD01D9E -PT=5D4C102146167AEB9BD2BCE94C195629 -CT=6342B8CB1E493F916585FF1BBFC42AB3 - -I=110 -KEY=ADF1869FEA15122394E1F6FF6B51E5DE3F27FDFC2B051C2EC802F66565DA89B6 -IV=6342B8CB1E493F916585FF1BBFC42AB3 -PT=3D2FB854CCF399FEA8AA8C46D29C03C7 -CT=052AEDF54016429320B04243E308ECFE - -I=111 -KEY=DF52D7982845CBAEB4E56592906B63943A0D10096B135EBDE8B2B42686D26548 -IV=052AEDF54016429320B04243E308ECFE -PT=72A35107C250D98D2004936DFB3A864A -CT=EE147A64DC2E31222A3A14B133769ACE - -I=112 -KEY=5D6B5899612FF15825029DEB0B37CB4ED4196A6DB73D6F9FC288A097B5A4FF86 -IV=EE147A64DC2E31222A3A14B133769ACE -PT=82398F01496A3AF691E7F8799B5CA8DA -CT=8330EF868E72D33172D7DEC7B440056C - -I=113 -KEY=FC23917C478894C9490A6585CCB8A716572985EB394FBCAEB05F7E5001E4FAEA -IV=8330EF868E72D33172D7DEC7B440056C -PT=A148C9E526A765916C08F86EC78F6C58 -CT=DC83E3727C4E9754A82BFCFFD924ACB3 - -I=114 -KEY=BCD556FA7AFA27F9675F45922924DFA68BAA669945012BFA187482AFD8C05659 -IV=DC83E3727C4E9754A82BFCFFD924ACB3 -PT=40F6C7863D72B3302E552017E59C78B0 -CT=C0B97D9320DC3E893953E1D93859D3E4 - -I=115 -KEY=A0F23A11C85F008CFEC20F76BD6751054B131B0A65DD157321276376E09985BD -IV=C0B97D9320DC3E893953E1D93859D3E4 -PT=1C276CEBB2A52775999D4AE494438EA3 -CT=8C28875C39211D01A084A59BA71D0C31 - -I=116 -KEY=2BB58C8FE9FE5BAEC5DB3F6A7EB98187C73B9C565CFC087281A3C6ED4784898C -IV=8C28875C39211D01A084A59BA71D0C31 -PT=8B47B69E21A15B223B19301CC3DED082 -CT=7865E390E8019259A117669082ED5CCC - -I=117 -KEY=6035A1AC1F0C1871EA06773DEA40B5C5BF5E7FC6B4FD9A2B20B4A07DC569D540 -IV=7865E390E8019259A117669082ED5CCC -PT=4B802D23F6F243DF2FDD485794F93442 -CT=DC7BA7C54217B8DEE966C0672DBE79CD - -I=118 -KEY=CCA70BB373BA65736D25078BB99980F66325D803F6EA22F5C9D2601AE8D7AC8D -IV=DC7BA7C54217B8DEE966C0672DBE79CD -PT=AC92AA1F6CB67D02872370B653D93533 -CT=CBB60FB6BE7240A2037CDA46DAAAC4E4 - -I=119 -KEY=E6D9E4347ABCE875CDFB026A9B1CE767A893D7B548986257CAAEBA5C327D6869 -IV=CBB60FB6BE7240A2037CDA46DAAAC4E4 -PT=2A7EEF8709068D06A0DE05E122856791 -CT=3B0863884DCFFDAAE439E3BCFC2E0491 - -I=120 -KEY=90C0678C9B9796FACBD3A9E8E40A46E6939BB43D05579FFD2E9759E0CE536CF8 -IV=3B0863884DCFFDAAE439E3BCFC2E0491 -PT=761983B8E12B7E8F0628AB827F16A181 -CT=1407CDBD04CA6450D15A276B0E45D500 - -I=121 -KEY=A3505D86BF4B95AEC0F720B4CBDF4985879C7980019DFBADFFCD7E8BC016B9F8 -IV=1407CDBD04CA6450D15A276B0E45D500 -PT=33903A0A24DC03540B24895C2FD50F63 -CT=94B64DF8376EAF94F24EB0457DF81418 - -I=122 -KEY=EAD741BA44D8637A4D49A089E4A122F2132A347836F354390D83CECEBDEEADE0 -IV=94B64DF8376EAF94F24EB0457DF81418 -PT=49871C3CFB93F6D48DBE803D2F7E6B77 -CT=6E2DE304D4A21A218291FD9B59FED9BF - -I=123 -KEY=278551B22B73239BF36E61370FFF43EA7D07D77CE2514E188F123355E410745F -IV=6E2DE304D4A21A218291FD9B59FED9BF -PT=CD5210086FAB40E1BE27C1BEEB5E6118 -CT=72A1E7B22D6B8B8C38C4CCD545466879 - -I=124 -KEY=C7046CA82928EA5AE1E6998399A090BB0FA630CECF3AC594B7D6FF80A1561C26 -IV=72A1E7B22D6B8B8C38C4CCD545466879 -PT=E0813D1A025BC9C11288F8B4965FD351 -CT=F5F1B011C644D119625733433C3DBB40 - -I=125 -KEY=82AF7079A309A3B1367E4DC8EE90B8C5FA5780DF097E148DD581CCC39D6BA766 -IV=F5F1B011C644D119625733433C3DBB40 -PT=45AB1CD18A2149EBD798D44B7730287E -CT=FDD90319FC2878AE4E23CE63C6660D1A - -I=126 -KEY=EB439411E1412BA8D6DB9F3052753D3F078E83C6F5566C239BA202A05B0DAA7C -IV=FDD90319FC2878AE4E23CE63C6660D1A -PT=69ECE46842488819E0A5D2F8BCE585FA -CT=0B3948AEFD674622289CB41E3F668A5C - -I=127 -KEY=C2FDF3EB8C01693C7FB990CE6D7F56E10CB7CB6808312A01B33EB6BE646B2020 -IV=0B3948AEFD674622289CB41E3F668A5C -PT=29BE67FA6D404294A9620FFE3F0A6BDE -CT=9F5BF60EB5CCF9D9F3A20DA569209636 - -I=128 -KEY=ECF0B5C32A3163495086894AB263166D93EC3D66BDFDD3D8409CBB1B0D4BB616 -IV=9F5BF60EB5CCF9D9F3A20DA569209636 -PT=2E0D4628A6300A752F3F1984DF1C408C -CT=3FED40A5796B3D1FF8805E5EF8922511 - -I=129 -KEY=259CAA194EE9BE90B2B1E7654CBDCD03AC017DC3C496EEC7B81CE545F5D99307 -IV=3FED40A5796B3D1FF8805E5EF8922511 -PT=C96C1FDA64D8DDD9E2376E2FFEDEDB6E -CT=2973A39E09EF5F4F42B29E6730ECC127 - -I=130 -KEY=FAAB18CE5FA7895BAA9EC69A55F690208572DE5DCD79B188FAAE7B22C5355220 -IV=2973A39E09EF5F4F42B29E6730ECC127 -PT=DF37B2D7114E37CB182F21FF194B5D23 -CT=F8C4C1A86B0665E2124CFFA9128FFEFD - -I=131 -KEY=3806BAB3764E794DF526A17BCE0112877DB61FF5A67FD46AE8E2848BD7BAACDD -IV=F8C4C1A86B0665E2124CFFA9128FFEFD -PT=C2ADA27D29E9F0165FB867E19BF782A7 -CT=90996F6629A41FC86A9520DD33AE5B3F - -I=132 -KEY=B7F781357E024140C3797D01C286E72BED2F70938FDBCBA28277A456E414F7E2 -IV=90996F6629A41FC86A9520DD33AE5B3F -PT=8FF13B86084C380D365FDC7A0C87F5AC -CT=9DAFB2F259BFD18945A0A6EFF9A81A75 - -I=133 -KEY=B67D37A8E281AFD015C38A72F5662BEE7080C261D6641A2BC7D702B91DBCED97 -IV=9DAFB2F259BFD18945A0A6EFF9A81A75 -PT=018AB69D9C83EE90D6BAF77337E0CCC5 -CT=C89F523289AE2A7C8F796C2252CB0597 - -I=134 -KEY=A47B97F34FB4A8F219ED7A59EFE40080B81F90535FCA305748AE6E9B4F77E800 -IV=C89F523289AE2A7C8F796C2252CB0597 -PT=1206A05BAD3507220C2EF02B1A822B6E -CT=3AACC4E5DE152BB1730C6D10C9A81A0A - -I=135 -KEY=E8EBBFDA61B6BC6735953F8E448B5E0282B354B681DF1BE63BA2038B86DFF20A -IV=3AACC4E5DE152BB1730C6D10C9A81A0A -PT=4C9028292E0214952C7845D7AB6F5E82 -CT=1E315BFFFDC3DA42438E683263B496DD - -I=136 -KEY=EE950FF3D603DECEE18F4ACF99A623589C820F497C1CC1A4782C6BB9E56B64D7 -IV=1E315BFFFDC3DA42438E683263B496DD -PT=067EB029B7B562A9D41A7541DD2D7D5A -CT=9B021A44CD9FF920DFE1EC97B3EE8AE4 - -I=137 -KEY=E073E1149A4A605E041167F3739F17240780150DB1833884A7CD872E5685EE33 -IV=9B021A44CD9FF920DFE1EC97B3EE8AE4 -PT=0EE6EEE74C49BE90E59E2D3CEA39347C -CT=4F62EE03D7A8337ECB3DCC0EA5444C2D - -I=138 -KEY=BF449E4B7DFA404D3F18C0266725F67248E2FB0E662B0BFA6CF04B20F3C1A21E -IV=4F62EE03D7A8337ECB3DCC0EA5444C2D -PT=5F377F5FE7B020133B09A7D514BAE156 -CT=AC8767B1E15D6D1ECACCCBF2D0FAB043 - -I=139 -KEY=3AB2898399D0F8467B37A5C916D9117AE4659CBF877666E4A63C80D2233B125D -IV=AC8767B1E15D6D1ECACCCBF2D0FAB043 -PT=85F617C8E42AB80B442F65EF71FCE708 -CT=9CA6E27F1966AE133CB7B98C2B13C1DA - -I=140 -KEY=06A09B6D5A6BCA82B26D0625F2A89FA178C37EC09E10C8F79A8B395E0828D387 -IV=9CA6E27F1966AE133CB7B98C2B13C1DA -PT=3C1212EEC3BB32C4C95AA3ECE4718EDB -CT=B7A6788E6D9886047D1450B093F5B6FE - -I=141 -KEY=79A26263675E11BE581DDEA79A20CAACCF65064EF3884EF3E79F69EE9BDD6579 -IV=B7A6788E6D9886047D1450B093F5B6FE -PT=7F02F90E3D35DB3CEA70D8826888550D -CT=5C1785DC27BC301DEAFAEF325A4CCBFD - -I=142 -KEY=21DEF781026D9ACB4108C6F9847C635F93728392D4347EEE0D6586DCC191AE84 -IV=5C1785DC27BC301DEAFAEF325A4CCBFD -PT=587C95E265338B751915185E1E5CA9F3 -CT=9577E8F6DF5921C4B518974A2F1FCF07 - -I=143 -KEY=EB000BAA170733EA4D077BDD7DA1623506056B640B6D5F2AB87D1196EE8E6183 -IV=9577E8F6DF5921C4B518974A2F1FCF07 -PT=CADEFC2B156AA9210C0FBD24F9DD016A -CT=09F8E3DA7C5E39F2F13C2B72001D1D56 - -I=144 -KEY=D56A1025AB5F7B5F943B3AECAF87A2800FFD88BE773366D849413AE4EE937CD5 -IV=09F8E3DA7C5E39F2F13C2B72001D1D56 -PT=3E6A1B8FBC5848B5D93C4131D226C0B5 -CT=7344F33968E177F3864908F02915739A - -I=145 -KEY=876077EA9BDB2134098B73CAD4411D997CB97B871FD2112BCF083214C7860F4F -IV=7344F33968E177F3864908F02915739A -PT=520A67CF30845A6B9DB049267BC6BF19 -CT=EC286360EF2A54CE894ED06ACF39970C - -I=146 -KEY=AA9943761AD545F47EBCF5CD4584C3B3909118E7F0F845E54646E27E08BF9843 -IV=EC286360EF2A54CE894ED06ACF39970C -PT=2DF9349C810E64C07737860791C5DE2A -CT=89F4BE70D36A05C84FD2124F6A69786B - -I=147 -KEY=5C285D3FD07EF5F6664B1F4C4CA771E31965A6972392402D0994F03162D6E028 -IV=89F4BE70D36A05C84FD2124F6A69786B -PT=F6B11E49CAABB00218F7EA810923B250 -CT=9A65E99C06E0744056365C4A26CD001F - -I=148 -KEY=F28851656D77922A55655DBE4610993683004F0B2572346D5FA2AC7B441BE037 -IV=9A65E99C06E0744056365C4A26CD001F -PT=AEA00C5ABD0967DC332E42F20AB7E8D5 -CT=566ECB7B317C81CF87BC483B4B6CF417 - -I=149 -KEY=62428DD3F6B04C564CA6D9DA9A9A64B3D56E8470140EB5A2D81EE4400F771420 -IV=566ECB7B317C81CF87BC483B4B6CF417 -PT=90CADCB69BC7DE7C19C38464DC8AFD85 -CT=16E3F727D2D4CC2E88C2A4B0DFEF34AF - -I=150 -KEY=78A68A0EC33E2C0198538C1EA591AF46C38D7357C6DA798C50DC40F0D098208F -IV=16E3F727D2D4CC2E88C2A4B0DFEF34AF -PT=1AE407DD358E6057D4F555C43F0BCBF5 -CT=6F6606018F5491FC43864FC29B572551 - -I=151 -KEY=4EFBCF71F7A0DA7564DAF1F0488AA933ACEB7556498EE870135A0F324BCF05DE -IV=6F6606018F5491FC43864FC29B572551 -PT=365D457F349EF674FC897DEEED1B0675 -CT=BC07194E716B4D78F64E14B6E5762439 - -I=152 -KEY=A4BBF15395604071DF929A4922A129DD10EC6C1838E5A508E5141B84AEB921E7 -IV=BC07194E716B4D78F64E14B6E5762439 -PT=EA403E2262C09A04BB486BB96A2B80EE -CT=BF1994171481FB4F84AB092F437EA9C7 - -I=153 -KEY=665F10926596E8F5691ACE10AA5075AEAFF5F80F2C645E4761BF12ABEDC78820 -IV=BF1994171481FB4F84AB092F437EA9C7 -PT=C2E4E1C1F0F6A884B688545988F15C73 -CT=254FE05D25B67D3BF6C2688F46A7FAD8 - -I=154 -KEY=15F4BA29EBAAF160AC95507FDA03D7D58ABA185209D2237C977D7A24AB6072F8 -IV=254FE05D25B67D3BF6C2688F46A7FAD8 -PT=73ABAABB8E3C1995C58F9E6F7053A27B -CT=A03B8DB2C1C9B6C574A8499C6E5869CF - -I=155 -KEY=96A760AB52E1D6A5ACFCA016E98D0BA12A8195E0C81B95B9E3D533B8C5381B37 -IV=A03B8DB2C1C9B6C574A8499C6E5869CF -PT=8353DA82B94B27C50069F069338EDC74 -CT=088F141F097F659145DE8E1EDB2300B5 - -I=156 -KEY=7C06F9EE0327C811CEE3CC3B2B492620220E81FFC164F028A60BBDA61E1B1B82 -IV=088F141F097F659145DE8E1EDB2300B5 -PT=EAA1994551C61EB4621F6C2DC2C42D81 -CT=43703327BFDAF109F6F9C5969D3C7649 - -I=157 -KEY=0F8AC1E3014DD99D1A440A693CB73B51617EB2D87EBE012150F2783083276DCB -IV=43703327BFDAF109F6F9C5969D3C7649 -PT=738C380D026A118CD4A7C65217FE1D71 -CT=BDAC873D0A674CDA98105DC3070F7BE4 - -I=158 -KEY=E595998ABEF32CABDD4A441B4042BF8BDCD235E574D94DFBC8E225F38428162F -IV=BDAC873D0A674CDA98105DC3070F7BE4 -PT=EA1F5869BFBEF536C70E4E727CF584DA -CT=A1A89122CF532FBC69E74A70F1E7346F - -I=159 -KEY=FBA3999F7BF540184E9BE7715CA8C0497D7AA4C7BB8A6247A1056F8375CF2240 -IV=A1A89122CF532FBC69E74A70F1E7346F -PT=1E360015C5066CB393D1A36A1CEA7FC2 -CT=68C2A6FF8EABE7EA05E5DD6093C00129 - -I=160 -KEY=65AF7CB5F5CEF75FEF0BF5F746D7DD7D15B80238352185ADA4E0B2E3E60F2369 -IV=68C2A6FF8EABE7EA05E5DD6093C00129 -PT=9E0CE52A8E3BB747A19012861A7F1D34 -CT=1EA92E63C6926082B04F69E658CFA478 - -I=161 -KEY=7D3BA807729873EB2021AC1817B2C7D30B112C5BF3B3E52F14AFDB05BEC08711 -IV=1EA92E63C6926082B04F69E658CFA478 -PT=1894D4B2875684B4CF2A59EF51651AAE -CT=45A943F0B6430ABA20C562469AE98A6D - -I=162 -KEY=5ECAEF5BF4EC899C7BFAEE2F50B864924EB86FAB45F0EF95346AB94324290D7C -IV=45A943F0B6430ABA20C562469AE98A6D -PT=23F1475C8674FA775BDB4237470AA341 -CT=6CDF579A8429606CC9BC56D010845954 - -I=163 -KEY=8D394BD1C8C1D1F8A67A3BA16530662A22673831C1D98FF9FDD6EF9334AD5428 -IV=6CDF579A8429606CC9BC56D010845954 -PT=D3F3A48A3C2D5864DD80D58E358802B8 -CT=96E9E19694DB9931AC09A7B6296FEAA8 - -I=164 -KEY=9ABEC4725C717368463710CB2D45774DB48ED9A7550216C851DF48251DC2BE80 -IV=96E9E19694DB9931AC09A7B6296FEAA8 -PT=17878FA394B0A290E04D2B6A48751167 -CT=176C9B9B32A539F35BDFB21B38C42134 - -I=165 -KEY=3CA1E23510949D81242F16DE0E9B2B3AA3E2423C67A72F3B0A00FA3E25069FB4 -IV=176C9B9B32A539F35BDFB21B38C42134 -PT=A61F26474CE5EEE96218061523DE5C77 -CT=06004480169FB7B6D4DBA7453A85E54D - -I=166 -KEY=2A72AA0C7EAA3113480EF57A83C272D7A5E206BC7138988DDEDB5D7B1F837AF9 -IV=06004480169FB7B6D4DBA7453A85E54D -PT=16D348396E3EAC926C21E3A48D5959ED -CT=FF2F4F6E32133CE8C70252937FE5BDA6 - -I=167 -KEY=90C0C8FC5B65BE92E643956293A70AF35ACD49D2432BA46519D90FE86066C75F -IV=FF2F4F6E32133CE8C70252937FE5BDA6 -PT=BAB262F025CF8F81AE4D601810657824 -CT=0972CCC79C412DB6FBC5918B8E6EAB7C - -I=168 -KEY=E0AF49BAC4BD146E83C884327FFB682353BF8515DF6A89D3E21C9E63EE086C23 -IV=0972CCC79C412DB6FBC5918B8E6EAB7C -PT=706F81469FD8AAFC658B1150EC5C62D0 -CT=2D8C668310308FCF7B3E325F50AA89E5 - -I=169 -KEY=E5C29451893B7B94249E89469E58DEAD7E33E396CF5A061C9922AC3CBEA2E5C6 -IV=2D8C668310308FCF7B3E325F50AA89E5 -PT=056DDDEB4D866FFAA7560D74E1A3B68E -CT=8342DD95F1040E763C82E36F8F74822F - -I=170 -KEY=4A9AD7CAFA46AE63362069120B502D33FD713E033E5E086AA5A04F5331D667E9 -IV=8342DD95F1040E763C82E36F8F74822F -PT=AF58439B737DD5F712BEE0549508F39E -CT=8CA83627884D9B7A62F096BD37C14EFF - -I=171 -KEY=21AEFC00E7CC2942F319630702ECCC6B71D90824B6139310C750D9EE06172916 -IV=8CA83627884D9B7A62F096BD37C14EFF -PT=6B342BCA1D8A8721C5390A1509BCE158 -CT=13073AB95C0C0587372564189A4C176F - -I=172 -KEY=7E615F002723795F6E37182ECC0C429E62DE329DEA1F9697F075BDF69C5B3E79 -IV=13073AB95C0C0587372564189A4C176F -PT=5FCFA300C0EF501D9D2E7B29CEE08EF5 -CT=247A01C6A7072F64CB463E6580DA222E - -I=173 -KEY=C2A25232803E901B35080B5CA64DEC2646A4335B4D18B9F33B3383931C811C57 -IV=247A01C6A7072F64CB463E6580DA222E -PT=BCC30D32A71DE9445B3F13726A41AEB8 -CT=562355D078402DA76B0CCAAC2BE63DAE - -I=174 -KEY=46C06B83AD1C5CD849C53A11C05137141087668B35589454503F493F376721F9 -IV=562355D078402DA76B0CCAAC2BE63DAE -PT=846239B12D22CCC37CCD314D661CDB32 -CT=841B1644CCE1BF9DB0D537733047DB7F - -I=175 -KEY=CB3AD5FB9E07D380841D712E7A71FC15949C70CFF9B92BC9E0EA7E4C0720FA86 -IV=841B1644CCE1BF9DB0D537733047DB7F -PT=8DFABE78331B8F58CDD84B3FBA20CB01 -CT=DE34C065627DB86A2D0AE89FB31BDA86 - -I=176 -KEY=240CFC15D60F6AE4A53D2C25BD71DD6E4AA8B0AA9BC493A3CDE096D3B43B2000 -IV=DE34C065627DB86A2D0AE89FB31BDA86 -PT=EF3629EE4808B96421205D0BC700217B -CT=38DD744B95756614261178685FBF097F - -I=177 -KEY=FAA7CBA4AAAD9576591C12233960F1C87275C4E10EB1F5B7EBF1EEBBEB84297F -IV=38DD744B95756614261178685FBF097F -PT=DEAB37B17CA2FF92FC213E0684112CA6 -CT=DC1CF4E4633355111AD09BE1C6BC1E39 - -I=178 -KEY=29E0D33A81FFDCE220D1587C36C5EB09AE6930056D82A0A6F121755A2D383746 -IV=DC1CF4E4633355111AD09BE1C6BC1E39 -PT=D347189E2B52499479CD4A5F0FA51AC1 -CT=2A5DC4E8C16753D202B638E5003AF83D - -I=179 -KEY=956C5751C5B439990A006DB1B52336E78434F4EDACE5F374F3974DBF2D02CF7B -IV=2A5DC4E8C16753D202B638E5003AF83D -PT=BC8C846B444BE57B2AD135CD83E6DDEE -CT=70F5676DC7646EA8F8A913AE6AD21949 - -I=180 -KEY=8AD9D44BC9018FD05B103360575592FEF4C193806B819DDC0B3E5E1147D0D632 -IV=70F5676DC7646EA8F8A913AE6AD21949 -PT=1FB5831A0CB5B64951105ED1E276A419 -CT=C44DA6A603A1E9C02F18123D5CAD5291 - -I=181 -KEY=DA77F2DA5CD7148B15FE8CA898C9A25E308C35266820741C24264C2C1B7D84A3 -IV=C44DA6A603A1E9C02F18123D5CAD5291 -PT=50AE269195D69B5B4EEEBFC8CF9C30A0 -CT=53C2D89EC4D5867DC79168D21C9B8755 - -I=182 -KEY=4A4FD6AED6825A2A0C2114460F029EDA634EEDB8ACF5F261E3B724FE07E603F6 -IV=53C2D89EC4D5867DC79168D21C9B8755 -PT=903824748A554EA119DF98EE97CB3C84 -CT=79B9DABE5171A614CAFDEA11637A1800 - -I=183 -KEY=29102930967275801BD019D6766FDA1A1AF73706FD845475294ACEEF649C1BF6 -IV=79B9DABE5171A614CAFDEA11637A1800 -PT=635FFF9E40F02FAA17F10D90796D44C0 -CT=8AB92FA5EA50F1185112FE4D8D2FCC21 - -I=184 -KEY=F4ABA34B232C18EAD6D367320651C374904E18A317D4A56D785830A2E9B3D7D7 -IV=8AB92FA5EA50F1185112FE4D8D2FCC21 -PT=DDBB8A7BB55E6D6ACD037EE4703E196E -CT=FB97C84040732D7B308C5959059D90A9 - -I=185 -KEY=FB140F98A79F5D5D68B80301CB7B640E6BD9D0E357A7881648D469FBEC2E477E -IV=FB97C84040732D7B308C5959059D90A9 -PT=0FBFACD384B345B7BE6B6433CD2AA77A -CT=D0D0119D500519BF5B4770C494B41680 - -I=186 -KEY=BC98221C0792D22B6EB258E57DB0D8B0BB09C17E07A291A91393193F789A51FE -IV=D0D0119D500519BF5B4770C494B41680 -PT=478C2D84A00D8F76060A5BE4B6CBBCBE -CT=94842399FC93828D30979DAD9210B827 - -I=187 -KEY=C92F345AC3CB803EA91C123F97E7005A2F8DE2E7FB31132423048492EA8AE9D9 -IV=94842399FC93828D30979DAD9210B827 -PT=75B71646C4595215C7AE4ADAEA57D8EA -CT=5BDB886E7A7DBBA8679704F13F44B981 - -I=188 -KEY=3EACAF51FEA9A9886D0B9D1B6BA8436574566A89814CA88C44938063D5CE5058 -IV=5BDB886E7A7DBBA8679704F13F44B981 -PT=F7839B0B3D6229B6C4178F24FC4F433F -CT=A2DA893257EE0F732A80FC52887A0788 - -I=189 -KEY=72E26FEDC250C5FED59FE29C966B61FAD68CE3BBD6A2A7FF6E137C315DB457D0 -IV=A2DA893257EE0F732A80FC52887A0788 -PT=4C4EC0BC3CF96C76B8947F87FDC3229F -CT=2F7877481B1162B01616C9F3268B4C44 - -I=190 -KEY=901C1268AD3582E6A9FA4C5CBB99D07EF9F494F3CDB3C54F7805B5C27B3F1B94 -IV=2F7877481B1162B01616C9F3268B4C44 -PT=E2FE7D856F6547187C65AEC02DF2B184 -CT=9FFA4AF8D0F096CC40A9F879076211E0 - -I=191 -KEY=EAF814EC49F2254E4933FAF977D7BEEC660EDE0B1D43538338AC4DBB7C5D0A74 -IV=9FFA4AF8D0F096CC40A9F879076211E0 -PT=7AE40684E4C7A7A8E0C9B6A5CC4E6E92 -CT=886097F5BC20C157A605CBEFCA5663D7 - -I=192 -KEY=8ED70BBA192093A0C9AD62E86C27091FEE6E49FEA16392D49EA98654B60B69A3 -IV=886097F5BC20C157A605CBEFCA5663D7 -PT=642F1F5650D2B6EE809E98111BF0B7F3 -CT=00DBBB84F52B3C9B28325161072753B6 - -I=193 -KEY=18280464C9E683CFFF9B75A5FD74EE96EEB5F27A5448AE4FB69BD735B12C3A15 -IV=00DBBB84F52B3C9B28325161072753B6 -PT=96FF0FDED0C6106F3636174D9153E789 -CT=714A27832B326F0A8FA745012DE4D936 - -I=194 -KEY=F464EE1298B09059016082CCC5ABC0129FFFD5F97F7AC145393C92349CC8E323 -IV=714A27832B326F0A8FA745012DE4D936 -PT=EC4CEA7651561396FEFBF76938DF2E84 -CT=5DE8A5CDBA7A6111A646AA17CA5324D4 - -I=195 -KEY=EE7301D63C482593ABB33CF4A57F1101C2177034C500A0549F7A3823569BC7F7 -IV=5DE8A5CDBA7A6111A646AA17CA5324D4 -PT=1A17EFC4A4F8B5CAAAD3BE3860D4D113 -CT=EA197ECF36E63616EBB0D9D7C1BD9A22 - -I=196 -KEY=10528506D50D143EAC40D83731DD55F0280E0EFBF3E6964274CAE1F497265DD5 -IV=EA197ECF36E63616EBB0D9D7C1BD9A22 -PT=FE2184D0E94531AD07F3E4C394A244F1 -CT=798349D56EC37993B0E131F8E3F64860 - -I=197 -KEY=438E1B672254504B972927644802ED36518D472E9D25EFD1C42BD00C74D015B5 -IV=798349D56EC37993B0E131F8E3F64860 -PT=53DC9E61F75944753B69FF5379DFB8C6 -CT=545E4CD72E74F5A91B29DDBA60BCEB5A - -I=198 -KEY=7E32F16A4E2E125A95FF9963C6F9796105D30BF9B3511A78DF020DB6146CFEEF -IV=545E4CD72E74F5A91B29DDBA60BCEB5A -PT=3DBCEA0D6C7A421102D6BE078EFB9457 -CT=084142F2C892DCF8A37A509DF0D669BC - -I=199 -KEY=B1BEC1C124A0941D0BA6C75239C17E250D92490B7BC3C6807C785D2BE4BA9753 -IV=084142F2C892DCF8A37A509DF0D669BC -PT=CF8C30AB6A8E86479E595E31FF380744 -CT=0A96C326C9D642F1F84C8772BCF8EB4A - -I=200 -KEY=80D7A5A2AE29B42143046D45B6B6B36C07048A2DB21584718434DA5958427C19 -IV=0A96C326C9D642F1F84C8772BCF8EB4A -PT=316964638A89203C48A2AA178F77CD49 -CT=273916ED09A517CE5C6A294D82E78980 - -I=201 -KEY=4D1C892DF27868BBB0FE803145C1D731203D9CC0BBB093BFD85EF314DAA5F599 -IV=273916ED09A517CE5C6A294D82E78980 -PT=CDCB2C8F5C51DC9AF3FAED74F377645D -CT=7183A7C83964ECFB2A1E44FFCFEBB7C1 - -I=202 -KEY=8C9B28041ECD5149A51207ACE38F0D0351BE3B0882D47F44F240B7EB154E4258 -IV=7183A7C83964ECFB2A1E44FFCFEBB7C1 -PT=C187A129ECB539F215EC879DA64EDA32 -CT=6015DF395D795DECA0A2F833E3614000 - -I=203 -KEY=FF175C7C745BB06E51EEDAA4F2C61E0F31ABE431DFAD22A852E24FD8F62F0258 -IV=6015DF395D795DECA0A2F833E3614000 -PT=738C74786A96E127F4FCDD081149130C -CT=B6B466B56B0E994E672072C273BA067D - -I=204 -KEY=0C84C64E1BB3B86E9AF5A8405D950B3A871F8284B4A3BBE635C23D1A85950425 -IV=B6B466B56B0E994E672072C273BA067D -PT=F3939A326FE80800CB1B72E4AF531535 -CT=C8566E37DF2E2958DDD5D2DB49889BA8 - -I=205 -KEY=5FF4C2A08B85338172D2779BF789DA234F49ECB36B8D92BEE817EFC1CC1D9F8D -IV=C8566E37DF2E2958DDD5D2DB49889BA8 -PT=537004EE90368BEFE827DFDBAA1CD119 -CT=C4A8D14DB86637E94AF515764BC7DF44 - -I=206 -KEY=BD81DE1813AEC9BAFDDC90E4A563CB338BE13DFED3EBA557A2E2FAB787DA40C9 -IV=C4A8D14DB86637E94AF515764BC7DF44 -PT=E2751CB8982BFA3B8F0EE77F52EA1110 -CT=5707495E4CBA3727FBA5D7F4F61AF35C - -I=207 -KEY=AE1B09CB7D99BAC0A71B3E83815F10A2DCE674A09F51927059472D4371C0B395 -IV=5707495E4CBA3727FBA5D7F4F61AF35C -PT=139AD7D36E37737A5AC7AE67243CDB91 -CT=C770CD182DFF66E4D6A7BFEFE2820AE1 - -I=208 -KEY=4F7491F03447293C42DE8393E7AD91741B96B9B8B2AEF4948FE092AC9342B974 -IV=C770CD182DFF66E4D6A7BFEFE2820AE1 -PT=E16F983B49DE93FCE5C5BD1066F281D6 -CT=E2044134ACD21D5AD026671BDC0CB2E4 - -I=209 -KEY=A747EF80608CED4309800CA0B1C73081F992F88C1E7CE9CE5FC6F5B74F4E0B90 -IV=E2044134ACD21D5AD026671BDC0CB2E4 -PT=E8337E7054CBC47F4B5E8F33566AA1F5 -CT=303CF7780126AD06B5272A8350639C93 - -I=210 -KEY=E5EBF5E471F2CA9F38492F604438B9C0C9AE0FF41F5A44C8EAE1DF341F2D9703 -IV=303CF7780126AD06B5272A8350639C93 -PT=42AC1A64117E27DC31C923C0F5FF8941 -CT=DACCD42953603A1321CAD9C236454598 - -I=211 -KEY=B5E5C9211A5C43F2267B4A2411FC2CC21362DBDD4C3A7EDBCB2B06F62968D29B -IV=DACCD42953603A1321CAD9C236454598 -PT=500E3CC56BAE896D1E32654455C49502 -CT=F9AB4D1D8255E83B330031EBE2ECE5C6 - -I=212 -KEY=8D78453D63A2DD8D08BF5F250F2581CFEAC996C0CE6F96E0F82B371DCB84375D -IV=F9AB4D1D8255E83B330031EBE2ECE5C6 -PT=389D8C1C79FE9E7F2EC415011ED9AD0D -CT=0F28E2D4CC948D36E18F80184A594841 - -I=213 -KEY=2E921775036404FD9939EE83C9585481E5E1741402FB1BD619A4B70581DD7F1C -IV=0F28E2D4CC948D36E18F80184A594841 -PT=A3EA524860C6D9709186B1A6C67DD54E -CT=A4756EAB45BCF716A52038C729E420C6 - -I=214 -KEY=9F86FEF42701B1D779BD46BE515680FC41941ABF4747ECC0BC848FC2A8395FDA -IV=A4756EAB45BCF716A52038C729E420C6 -PT=B114E9812465B52AE084A83D980ED47D -CT=9834425E009006673E777E3552E83D20 - -I=215 -KEY=2212046FFD03BA552089FBF7B2F3EF32D9A058E147D7EAA782F3F1F7FAD162FA -IV=9834425E009006673E777E3552E83D20 -PT=BD94FA9BDA020B825934BD49E3A56FCE -CT=AEA572D530A3694EAFF6DFDE30B80D5A - -I=216 -KEY=F73BB21F916D8011751AFDDDCD130A6477052A34777483E92D052E29CA696FA0 -IV=AEA572D530A3694EAFF6DFDE30B80D5A -PT=D529B6706C6E3A445593062A7FE0E556 -CT=86394E06B621147758CAB012852035A6 - -I=217 -KEY=EE44A367A3CDDFED7DBD980BF731B4E5F13C6432C155979E75CF9E3B4F495A06 -IV=86394E06B621147758CAB012852035A6 -PT=197F117832A05FFC08A765D63A22BE81 -CT=3CBC18C1AC02C0A7595199E08F1F552B - -I=218 -KEY=1558BABB3DCD830F693E7950F736BCADCD807CF36D5757392C9E07DBC0560F2D -IV=3CBC18C1AC02C0A7595199E08F1F552B -PT=FB1C19DC9E005CE21483E15B00070848 -CT=5A9CFD8BFE10CF7FBD0F9A3FAF6C117B - -I=219 -KEY=D083F58141F5E5AF3D5479739D55780D971C81789347984691919DE46F3A1E56 -IV=5A9CFD8BFE10CF7FBD0F9A3FAF6C117B -PT=C5DB4F3A7C3866A0546A00236A63C4A0 -CT=61A437D4E2F1C3779F1EBE906C5D2C12 - -I=220 -KEY=C60824F2DDC67623D270974E9F87BD27F6B8B6AC71B65B310E8F237403673244 -IV=61A437D4E2F1C3779F1EBE906C5D2C12 -PT=168BD1739C33938CEF24EE3D02D2C52A -CT=FC675EE1B12B47410A20CFAC23FD20EE - -I=221 -KEY=F73A715AD84DB0A6F55AD584922001920ADFE84DC09D1C7004AFECD8209A12AA -IV=FC675EE1B12B47410A20CFAC23FD20EE -PT=313255A8058BC685272A42CA0DA7BCB5 -CT=82E3FB6189716D94C8E9D30E1ECCABC4 - -I=222 -KEY=6ABBDCE21E2ECECBCAA3473897A2E178883C132C49EC71E4CC463FD63E56B96E -IV=82E3FB6189716D94C8E9D30E1ECCABC4 -PT=9D81ADB8C6637E6D3FF992BC0582E0EA -CT=BD84DCE4994B505EED71596B454BDF85 - -I=223 -KEY=0D4F68CDB9B53B08E22DDDFE4FD5FCC035B8CFC8D0A721BA213766BD7B1D66EB -IV=BD84DCE4994B505EED71596B454BDF85 -PT=67F4B42FA79BF5C3288E9AC6D8771DB8 -CT=1B3AA490C6E874BA77CE55D71789616C - -I=224 -KEY=3D8E3121698DD7E9D1835EFF5FA02DB22E826B58164F550056F9336A6C940787 -IV=1B3AA490C6E874BA77CE55D71789616C -PT=30C159ECD038ECE133AE83011075D172 -CT=D6EE171B39B5E40535FBF5A7CB4C6953 - -I=225 -KEY=1A5B2249CA785F0DB58FF5B07CCCFCDEF86C7C432FFAB1056302C6CDA7D86ED4 -IV=D6EE171B39B5E40535FBF5A7CB4C6953 -PT=27D51368A3F588E4640CAB4F236CD16C -CT=8691BE10D13B4C08246938750EE33643 - -I=226 -KEY=48AD5DEF217F83DC5039ECD1191ABE3A7EFDC253FEC1FD0D476BFEB8A93B5897 -IV=8691BE10D13B4C08246938750EE33643 -PT=52F67FA6EB07DCD1E5B6196165D642E4 -CT=E40AD0EE818639E37349E1132B138D63 - -I=227 -KEY=FEB84B0B264A8A6FB8D4DE065DA68A479AF712BD7F47C4EE34221FAB8228D5F4 -IV=E40AD0EE818639E37349E1132B138D63 -PT=B61516E4073509B3E8ED32D744BC347D -CT=6E40A22767A39C978F279D40B447099D - -I=228 -KEY=2FE79FCC3C959901BAAEE8C55B71D01FF4B7B09A18E45879BB0582EB366FDC69 -IV=6E40A22767A39C978F279D40B447099D -PT=D15FD4C71ADF136E027A36C306D75A58 -CT=C2DE8C5200F6FCBF1A4D6178909DF110 - -I=229 -KEY=C3EB1424EFD0ACDF3670C4943CB2CF5936693CC81812A4C6A148E393A6F22D79 -IV=C2DE8C5200F6FCBF1A4D6178909DF110 -PT=EC0C8BE8D34535DE8CDE2C5167C31F46 -CT=104CBECB1134CAE09B2FE8C5CE2E0901 - -I=230 -KEY=DF9F70702DA816906F3907575DF4D3032625820309266E263A670B5668DC2478 -IV=104CBECB1134CAE09B2FE8C5CE2E0901 -PT=1C746454C278BA4F5949C3C361461C5A -CT=65287F66F01AC054B1051D700EDDBF2B - -I=231 -KEY=F6C4CE3006A43EFBE18C5FF305F32C37430DFD65F93CAE728B62162666019B53 -IV=65287F66F01AC054B1051D700EDDBF2B -PT=295BBE402B0C286B8EB558A45807FF34 -CT=4933D44FD414225CB1E6951240D28150 - -I=232 -KEY=3963CE7465D89FBE550649326262DB450A3E292A2D288C2E3A84833426D31A03 -IV=4933D44FD414225CB1E6951240D28150 -PT=CFA70044637CA145B48A16C16791F772 -CT=3733351F76DE0E07581F84600E38EFDD - -I=233 -KEY=42468662273D8CB3EFAB19DBC802888B3D0D1C355BF68229629B075428EBF5DE -IV=3733351F76DE0E07581F84600E38EFDD -PT=7B25481642E5130DBAAD50E9AA6053CE -CT=F16F22EB9CCD854591AE2FC28E1D4B59 - -I=234 -KEY=E2B3E5EA6573FC8ABE4E890FA4F5502DCC623EDEC73B076CF3352896A6F6BE87 -IV=F16F22EB9CCD854591AE2FC28E1D4B59 -PT=A0F56388424E703951E590D46CF7D8A6 -CT=1D607C6E9BAD454DD5DE785F2A78F990 - -I=235 -KEY=FDB55AF96E09AF677AA4737992E13C9ED10242B05C96422126EB50C98C8E4717 -IV=1D607C6E9BAD454DD5DE785F2A78F990 -PT=1F06BF130B7A53EDC4EAFA7636146CB3 -CT=7B16B6A8F88E05F6A9A036A67CB8A2B6 - -I=236 -KEY=E546D74518CF4AA64B399EA321C570CAAA14F418A41847D78F4B666FF036E5A1 -IV=7B16B6A8F88E05F6A9A036A67CB8A2B6 -PT=18F38DBC76C6E5C1319DEDDAB3244C54 -CT=63AD66FCF9D52195CD0339443F554311 - -I=237 -KEY=2F9B91A24BEF0E503DC576E4F8D32C16C9B992E45DCD664242485F2BCF63A6B0 -IV=63AD66FCF9D52195CD0339443F554311 -PT=CADD46E7532044F676FCE847D9165CDC -CT=6293FBB897D8F0C60171BEA3072CA512 - -I=238 -KEY=97B7DF112EFFE9279D5EDF932889D84BAB2A695CCA1596844339E188C84F03A2 -IV=6293FBB897D8F0C60171BEA3072CA512 -PT=B82C4EB36510E777A09BA977D05AF45D -CT=9555D7F244448C80E965CE6AB7EF0F7B - -I=239 -KEY=39F26B429FE4111DAA984F03112B339F3E7FBEAE8E511A04AA5C2FE27FA00CD9 -IV=9555D7F244448C80E965CE6AB7EF0F7B -PT=AE45B453B11BF83A37C6909039A2EBD4 -CT=FA242C9DB2984E9EFA8CD98AE7C29D6F - -I=240 -KEY=64C6D001CB3C8AFC24A72DA11D172727C45B92333CC9549A50D0F668986291B6 -IV=FA242C9DB2984E9EFA8CD98AE7C29D6F -PT=5D34BB4354D89BE18E3F62A20C3C14B8 -CT=2998B59B0441F068D7F3FCE7AEAA6FD9 - -I=241 -KEY=FE56E2EB2434CA49D46A684DBCE2426CEDC327A83888A4F287230A8F36C8FE6F -IV=2998B59B0441F068D7F3FCE7AEAA6FD9 -PT=9A9032EAEF0840B5F0CD45ECA1F5654B -CT=A3F77BBA27BA88F33D4330EB2CC0EFBA - -I=242 -KEY=0F9B3CAD0EDFA9C429F3A005C78FE9F84E345C121F322C01BA603A641A0811D5 -IV=A3F77BBA27BA88F33D4330EB2CC0EFBA -PT=F1CDDE462AEB638DFD99C8487B6DAB94 -CT=9C751C64BCB82229ABA5130353455CCB - -I=243 -KEY=1725A4C019FB909FB1DE2ACA00E9A33DD2414076A38A0E2811C52967494D4D1E -IV=9C751C64BCB82229ABA5130353455CCB -PT=18BE986D1724395B982D8ACFC7664AC5 -CT=540DE482B7170E925FA4B429F6BCD458 - -I=244 -KEY=E2A619367235AA4611A72FD4FAF68FB3864CA4F4149D00BA4E619D4EBFF19946 -IV=540DE482B7170E925FA4B429F6BCD458 -PT=F583BDF66BCE3AD9A079051EFA1F2C8E -CT=6AADE1E1A12F5C83AF434CAD95B29678 - -I=245 -KEY=8629FB2CC8C06A07EC910681499E917FECE14515B5B25C39E122D1E32A430F3E -IV=6AADE1E1A12F5C83AF434CAD95B29678 -PT=648FE21ABAF5C041FD362955B3681ECC -CT=11308758A1C2075FEAECD260867CA343 - -I=246 -KEY=5EDD76C395D2A0D3D547CFB394B439EAFDD1C24D14705B660BCE0383AC3FAC7D -IV=11308758A1C2075FEAECD260867CA343 -PT=D8F48DEF5D12CAD439D6C932DD2AA895 -CT=14C9A904A3909A8FF44D88E22F8626DF - -I=247 -KEY=AF3FA8D6034564D7151C3933C7986CFCE9186B49B7E0C1E9FF838B6183B98AA2 -IV=14C9A904A3909A8FF44D88E22F8626DF -PT=F1E2DE159697C404C05BF680532C5516 -CT=A042D7F391A37E5A3EDB3022400EC797 - -I=248 -KEY=8ACC720216DBDBDB4C213FE65E575A09495ABCBA2643BFB3C158BB43C3B74D35 -IV=A042D7F391A37E5A3EDB3022400EC797 -PT=25F3DAD4159EBF0C593D06D599CF36F5 -CT=439FEF326223A65F7A555C6231178190 - -I=249 -KEY=F2882A52603203A71895A5870CCF7EE40AC55388446019ECBB0DE721F2A0CCA5 -IV=439FEF326223A65F7A555C6231178190 -PT=7844585076E9D87C54B49A61529824ED -CT=6FE1286C19AA3BC802F1C6C7B58DB4C4 - -I=250 -KEY=57EFB10BFC21E28397A9D5E5A533D35B65247BE45DCA2224B9FC21E6472D7861 -IV=6FE1286C19AA3BC802F1C6C7B58DB4C4 -PT=A5679B599C13E1248F3C7062A9FCADBF -CT=C38D763981392FF038573CA341DD8EA1 - -I=251 -KEY=19328A5147BC2E7C5149DA257487D734A6A90DDDDCF30DD481AB1D4506F0F6C0 -IV=C38D763981392FF038573CA341DD8EA1 -PT=4EDD3B5ABB9DCCFFC6E00FC0D1B4046F -CT=5FD553A2848C683B138D50F2741B124D - -I=252 -KEY=ED66DE43FE0F966850EF6754E21B69A0F97C5E7F587F65EF92264DB772EBE48D -IV=5FD553A2848C683B138D50F2741B124D -PT=F4545412B9B3B81401A6BD71969CBE94 -CT=910CDCBE38068A51185A879FF2B45B9C - -I=253 -KEY=E53D9016DE7DF4E2377968864B6F69F8687082C16079EFBE8A7CCA28805FBF11 -IV=910CDCBE38068A51185A879FF2B45B9C -PT=085B4E552072628A67960FD2A9740058 -CT=E0A0E68A14893501D75BC42B8EFC6F96 - -I=254 -KEY=C88C4383E2D16541765E5DB85957C59188D0644B74F0DABF5D270E030EA3D087 -IV=E0A0E68A14893501D75BC42B8EFC6F96 -PT=2DB1D3953CAC91A34127353E1238AC69 -CT=A66DD21DA627347F962A0AB7DCA887ED - -I=255 -KEY=6F01CC5C22DE71C7C2D5B429AA756A392EBDB656D2D7EEC0CB0D04B4D20B576A -IV=A66DD21DA627347F962A0AB7DCA887ED -PT=A78D8FDFC00F1486B48BE991F322AFA8 -CT=87551BC7A6B6D9B76239CB8A31FF1993 - -I=256 -KEY=DAC405506CD3779FC2400B459B7C6B6EA9E8AD9174613777A934CF3EE3F44EF9 -IV=87551BC7A6B6D9B76239CB8A31FF1993 -PT=B5C5C90C4E0D06580095BF6C31090157 -CT=B909B206A041F33EB3AC7ED481DFBA21 - -I=257 -KEY=E482333E6FBAA8427A2E30D56069E0B810E11F97D420C4491A98B1EA622BF4D8 -IV=B909B206A041F33EB3AC7ED481DFBA21 -PT=3E46366E0369DFDDB86E3B90FB158BD6 -CT=DE5E71F446794D3402400C96FBFEB93F - -I=258 -KEY=176CAD69CD20690B95DA40B95C43AC54CEBF6E639259897D18D8BD7C99D54DE7 -IV=DE5E71F446794D3402400C96FBFEB93F -PT=F3EE9E57A29AC149EFF4706C3C2A4CEC -CT=175A7C580A99E985A2FD2F185D9BAADB - -I=259 -KEY=FA4DD79A64960C8264624CDF215B54A1D9E5123B98C060F8BA259264C44EE73C -IV=175A7C580A99E985A2FD2F185D9BAADB -PT=ED217AF3A9B66589F1B80C667D18F8F5 -CT=413EB5D166C1D196F0239FF34D184013 - -I=260 -KEY=49855C1008EAF59432518A9F3807A0B398DBA7EAFE01B16E4A060D978956A72F -IV=413EB5D166C1D196F0239FF34D184013 -PT=B3C88B8A6C7CF9165633C640195CF412 -CT=69A3A63C580336296FF826600C754747 - -I=261 -KEY=849D231AE9F90F233F328BE6EE0AC180F17801D6A602874725FE2BF78523E068 -IV=69A3A63C580336296FF826600C754747 -PT=CD187F0AE113FAB70D630179D60D6133 -CT=B9AF0CA2B502C2DEB66834BD729AA528 - -I=262 -KEY=40E3F7EA3E7CFBDBF57935DBB124CF7F48D70D741300459993961F4AF7B94540 -IV=B9AF0CA2B502C2DEB66834BD729AA528 -PT=C47ED4F0D785F4F8CA4BBE3D5F2E0EFF -CT=99E16968796AB521FC460A8DF6744FA8 - -I=263 -KEY=4FDF8D16B85E527490FBE95EA34138D6D136641C6A6AF0B86FD015C701CD0AE8 -IV=99E16968796AB521FC460A8DF6744FA8 -PT=0F3C7AFC8622A9AF6582DC851265F7A9 -CT=7B871B0153657949D1FE7259E16791B7 - -I=264 -KEY=6AD7099EA6DC50F5CC836C3EB934CF92AAB17F1D390F89F1BE2E679EE0AA9B5F -IV=7B871B0153657949D1FE7259E16791B7 -PT=250884881E8202815C7885601A75F744 -CT=8D6B80EAC01BF7E204A79DD14BFDB71A - -I=265 -KEY=0860DD776AD2014ED90D0837A5A298B627DAFFF7F9147E13BA89FA4FAB572C45 -IV=8D6B80EAC01BF7E204A79DD14BFDB71A -PT=62B7D4E9CC0E51BB158E64091C965724 -CT=DAD6A83408559AD3003C6995DC099303 - -I=266 -KEY=9E8757199D96CA08B9C3CEF817E902B8FD0C57C3F141E4C0BAB593DA775EBF46 -IV=DAD6A83408559AD3003C6995DC099303 -PT=96E78A6EF744CB4660CEC6CFB24B9A0E -CT=AA6EF32AFC8AA6ADCDE86D86CC59AFB4 - -I=267 -KEY=483AD9696154B929F35016B648F5952B5762A4E90DCB426D775DFE5CBB0710F2 -IV=AA6EF32AFC8AA6ADCDE86D86CC59AFB4 -PT=D6BD8E70FCC273214A93D84E5F1C9793 -CT=713F9516A55FBFA4AE8155EC12A3AB5D - -I=268 -KEY=027B7F5F83B26099A4CE8FCC1AB84529265D31FFA894FDC9D9DCABB0A9A4BBAF -IV=713F9516A55FBFA4AE8155EC12A3AB5D -PT=4A41A636E2E6D9B0579E997A524DD002 -CT=B2E4BEAF6DB84214E379B89697191379 - -I=269 -KEY=D7AEFAD28855BB04A9604527F8376CAF94B98F50C52CBFDD3AA513263EBDA8D6 -IV=B2E4BEAF6DB84214E379B89697191379 -PT=D5D5858D0BE7DB9D0DAECAEBE28F2986 -CT=9FE3B8941D9F85B1400CC45B7BDE8E9F - -I=270 -KEY=B5EBE7CB901F69E61EC6F011E6A46A2E0B5A37C4D8B33A6C7AA9D77D45632649 -IV=9FE3B8941D9F85B1400CC45B7BDE8E9F -PT=62451D19184AD2E2B7A6B5361E930681 -CT=E9ABFC5563B4AD1718EF4A91F7D60913 - -I=271 -KEY=571805B63BC20F5784AF56FDB71CBCD7E2F1CB91BB07977B62469DECB2B52F5A -IV=E9ABFC5563B4AD1718EF4A91F7D60913 -PT=E2F3E27DABDD66B19A69A6EC51B8D6F9 -CT=D825DC1C8C73A84BDFEFD9799D9E3960 - -I=272 -KEY=9EED79D9ABB11094FB4475ED2EC042133AD4178D37743F30BDA944952F2B163A -IV=D825DC1C8C73A84BDFEFD9799D9E3960 -PT=C9F57C6F90731FC37FEB231099DCFEC4 -CT=7D0DC4C31259FD0A46D2D2282F1FE22E - -I=273 -KEY=EF905E20846E064A3B3281FD2BD59AB647D9D34E252DC23AFB7B96BD0034F414 -IV=7D0DC4C31259FD0A46D2D2282F1FE22E -PT=717D27F92FDF16DEC076F4100515D8A5 -CT=93FAFC16EFF504A9D2B791A272A78135 - -I=274 -KEY=8F219C67ACF0F1C745FA0ABBADE96015D4232F58CAD8C69329CC071F72937521 -IV=93FAFC16EFF504A9D2B791A272A78135 -PT=60B1C247289EF78D7EC88B46863CFAA3 -CT=EF387517F8C781A79700C8196DCA6F1A - -I=275 -KEY=48C6408FD8FA84D30DD53B83B31C425D3B1B5A4F321F4734BECCCF061F591A3B -IV=EF387517F8C781A79700C8196DCA6F1A -PT=C7E7DCE8740A7514482F31381EF52248 -CT=A6166002C7239645D55494BB64840B26 - -I=276 -KEY=1C9EB0648715CA5738A4FD27A63693A09D0D3A4DF53CD1716B985BBD7BDD111D -IV=A6166002C7239645D55494BB64840B26 -PT=5458F0EB5FEF4E843571C6A4152AD1FD -CT=FB35646B2008AD29AFF508B94179F223 - -I=277 -KEY=4AA2E4BAC74E8CD9AEA969550D27877866385E26D5347C58C46D53043AA4E33E -IV=FB35646B2008AD29AFF508B94179F223 -PT=563C54DE405B468E960D9472AB1114D8 -CT=59C1692D4598AD622B6586A06892E11D - -I=278 -KEY=B9F5A3BAAA0C2F6EA5E835F6E6E5D50E3FF9370B90ACD13AEF08D5A452360223 -IV=59C1692D4598AD622B6586A06892E11D -PT=F35747006D42A3B70B415CA3EBC25276 -CT=3131E251A6A4AC7226A1809553198AB8 - -I=279 -KEY=EF46814F8656D3D8ABAF3B08EFEBC3150EC8D55A36087D48C9A95531012F889B -IV=3131E251A6A4AC7226A1809553198AB8 -PT=56B322F52C5AFCB60E470EFE090E161B -CT=2E30D8D5B7B636307A6D354FBED41A2D - -I=280 -KEY=3DFBE0FE20F0421CAABD62E2CDB0E60F20F80D8F81BE4B78B3C4607EBFFB92B6 -IV=2E30D8D5B7B636307A6D354FBED41A2D -PT=D2BD61B1A6A691C4011259EA225B251A -CT=6D791952F9416FC09B78517A2FFE986F - -I=281 -KEY=5197CF05753D155C5B08A5EB51B82F2D4D8114DD78FF24B828BC310490050AD9 -IV=6D791952F9416FC09B78517A2FFE986F -PT=6C6C2FFB55CD5740F1B5C7099C08C922 -CT=37A8E0B9375AD5669A396D980D68D0F3 - -I=282 -KEY=B3EFE2F914264AAAB7C7FD9C4843619E7A29F4644FA5F1DEB2855C9C9D6DDA2A -IV=37A8E0B9375AD5669A396D980D68D0F3 -PT=E2782DFC611B5FF6ECCF587719FB4EB3 -CT=BC65630DB71EE8DA2194E5DFBC48360E - -I=283 -KEY=CAAB7758FF4AFF39A98C2202A26165CFC64C9769F8BB19049311B9432125EC24 -IV=BC65630DB71EE8DA2194E5DFBC48360E -PT=794495A1EB6CB5931E4BDF9EEA220451 -CT=9C47136C1B510BFCEFA7F6659BDA08C2 - -I=284 -KEY=CC38852E17544DB004372C4A3AA3DFDB5A0B8405E3EA12F87CB64F26BAFFE4E6 -IV=9C47136C1B510BFCEFA7F6659BDA08C2 -PT=0693F276E81EB289ADBB0E4898C2BA14 -CT=68AC57D13EC53C250FEBFC64B1992B1C - -I=285 -KEY=108FE55553F353DFABD421E15A18C9F532A7D3D4DD2F2EDD735DB3420B66CFFA -IV=68AC57D13EC53C250FEBFC64B1992B1C -PT=DCB7607B44A71E6FAFE30DAB60BB162E -CT=9A8C11E031E57B77138A3637784D1D71 - -I=286 -KEY=C432EA6E854DE8C191C6F0ED4A2BF1D7A82BC234ECCA55AA60D78575732BD28B -IV=9A8C11E031E57B77138A3637784D1D71 -PT=D4BD0F3BD6BEBB1E3A12D10C10333822 -CT=3BBB1E76A491A5AA145ED931BB886333 - -I=287 -KEY=980941D5FEFD458061B1B443E39818299390DC42485BF00074895C44C8A3B1B8 -IV=3BBB1E76A491A5AA145ED931BB886333 -PT=5C3BABBB7BB0AD41F07744AEA9B3E9FE -CT=F79F1B46F57BDD36B58DDA33619D3920 - -I=288 -KEY=B4FF33FB094612B6A3438A285C3AEA41640FC704BD202D36C1048677A93E8898 -IV=F79F1B46F57BDD36B58DDA33619D3920 -PT=2CF6722EF7BB5736C2F23E6BBFA2F268 -CT=F1C3ED72D0B6D917DD6F8AE86CFD8CBF - -I=289 -KEY=BC81027596771F9C591BE6C61762B1E795CC2A766D96F4211C6B0C9FC5C30427 -IV=F1C3ED72D0B6D917DD6F8AE86CFD8CBF -PT=087E318E9F310D2AFA586CEE4B585BA6 -CT=EAF1AACEEB9F9BE0E880911BFEEAC2AC - -I=290 -KEY=D41458000DDED43B83DAA81B1D7FFB597F3D80B886096FC1F4EB9D843B29C68B -IV=EAF1AACEEB9F9BE0E880911BFEEAC2AC -PT=68955A759BA9CBA7DAC14EDD0A1D4ABE -CT=7B35179E67E9B40346F7DE6356EDC98F - -I=291 -KEY=FACDC2B3BA9E125B2A734DE75F99F48C04089726E1E0DBC2B21C43E76DC40F04 -IV=7B35179E67E9B40346F7DE6356EDC98F -PT=2ED99AB3B740C660A9A9E5FC42E60FD5 -CT=0EDE849D7E56B296B12C1EDF37436A8D - -I=292 -KEY=E73022253439EB4464CE0B205BBB0F1F0AD613BB9FB6695403305D385A876589 -IV=0EDE849D7E56B296B12C1EDF37436A8D -PT=1DFDE0968EA7F91F4EBD46C70422FB93 -CT=D02F1EAF3CF6A6B681BAF8ECB921FFC4 - -I=293 -KEY=9F3671205266DC4F7C771EBA74265F36DAF90D14A340CFE2828AA5D4E3A69A4D -IV=D02F1EAF3CF6A6B681BAF8ECB921FFC4 -PT=78065305665F370B18B9159A2F9D5029 -CT=E365BE1A125C6930DFDCBB33E6937EC5 - -I=294 -KEY=111A3E012C9D5CB2967E8BD22907D6F7399CB30EB11CA6D25D561EE70535E488 -IV=E365BE1A125C6930DFDCBB33E6937EC5 -PT=8E2C4F217EFB80FDEA0995685D2189C1 -CT=C5B24EEC5CDD17AA56838B09EC4AB725 - -I=295 -KEY=15DA3EE4EE9A560B05493FFC971713A5FC2EFDE2EDC1B1780BD595EEE97F53AD -IV=C5B24EEC5CDD17AA56838B09EC4AB725 -PT=04C000E5C2070AB99337B42EBE10C552 -CT=4D8A43CD28BBCB86953FA55A409BF130 - -I=296 -KEY=2C8B30484D954192818342F3766C1415B1A4BE2FC57A7AFE9EEA30B4A9E4A29D -IV=4D8A43CD28BBCB86953FA55A409BF130 -PT=39510EACA30F179984CA7D0FE17B07B0 -CT=A524A6329E6DCE041F72459234ECDE78 - -I=297 -KEY=0F162BAD5F298EE0B0164CFED6A7AC271480181D5B17B4FA819875269D087CE5 -IV=A524A6329E6DCE041F72459234ECDE78 -PT=239D1BE512BCCF7231950E0DA0CBB832 -CT=90BBC5130D1C06182F737FE7F0FCD00D - -I=298 -KEY=62744CA02B6684D05A91F2049D403480843BDD0E560BB2E2AEEB0AC16DF4ACE8 -IV=90BBC5130D1C06182F737FE7F0FCD00D -PT=6D62670D744F0A30EA87BEFA4BE798A7 -CT=35F293EDDEC8D9446A4ACD34602839B5 - -I=299 -KEY=21F5373DA5D6BF15BC163383F62EA92FB1C94EE388C36BA6C4A1C7F50DDC955D -IV=35F293EDDEC8D9446A4ACD34602839B5 -PT=43817B9D8EB03BC5E687C1876B6E9DAF -CT=E45CF478D7C84325143165F58B041A13 - -I=300 -KEY=4CF4A508B4DF37A831916353620DC1F45595BA9B5F0B2883D090A20086D88F4E -IV=E45CF478D7C84325143165F58B041A13 -PT=6D019235110988BD8D8750D0942368DB -CT=964983C30745D7EEA1BD5E287DAC466C - -I=301 -KEY=35C99C004D01E89F94A9B3BC79C492D7C3DC3958584EFF6D712DFC28FB74C922 -IV=964983C30745D7EEA1BD5E287DAC466C -PT=793D3908F9DEDF37A538D0EF1BC95323 -CT=6834813D8403A963AD36C1A18CA605C0 - -I=302 -KEY=F185723D6A2D2A6F9F4B9194A444AA2AABE8B865DC4D560EDC1B3D8977D2CCE2 -IV=6834813D8403A963AD36C1A18CA605C0 -PT=C44CEE3D272CC2F00BE22228DD8038FD -CT=61F35AA76E1E0EC2D5E4F4F432B68260 - -I=303 -KEY=B571B0BC6CFD2BA23611FB9A900A31FACA1BE2C2B25358CC09FFC97D45644E82 -IV=61F35AA76E1E0EC2D5E4F4F432B68260 -PT=44F4C28106D001CDA95A6A0E344E9BD0 -CT=DD081A96602E6665B860466B8D14050E - -I=304 -KEY=2A5757156C596DE633D0D8908011C3771713F854D27D3EA9B19F8F16C8704B8C -IV=DD081A96602E6665B860466B8D14050E -PT=9F26E7A900A4464405C1230A101BF28D -CT=5BF18EA3D7F3ED1D941EA1B995313B98 - -I=305 -KEY=DA008B517FA48E908A72B8525CC31AEF4CE276F7058ED3B425812EAF5D417014 -IV=5BF18EA3D7F3ED1D941EA1B995313B98 -PT=F057DC4413FDE376B9A260C2DCD2D998 -CT=74C361B6A13013E9ABF6841601513539 - -I=306 -KEY=E313244DC22AC16C1D59AC494AA728D738211741A4BEC05D8E77AAB95C10452D -IV=74C361B6A13013E9ABF6841601513539 -PT=3913AF1CBD8E4FFC972B141B16643238 -CT=9937614570FD404D5B39BA43D3A20602 - -I=307 -KEY=92A7173E943CBA80AF56203552625E8AA1167604D4438010D54E10FA8FB2432F -IV=9937614570FD404D5B39BA43D3A20602 -PT=71B4337356167BECB20F8C7C18C5765D -CT=726FCDDF8E6738B51D767828EBDFC71E - -I=308 -KEY=242C75C141A58DC403020E52421BB347D379BBDB5A24B8A5C83868D2646D8431 -IV=726FCDDF8E6738B51D767828EBDFC71E -PT=B68B62FFD5993744AC542E671079EDCD -CT=78F735344BF10EED47969F1C02ECBF8C - -I=309 -KEY=5247008C3EB79AA67E5D2E0B95D0AC3AAB8E8EEF11D5B6488FAEF7CE66813BBD -IV=78F735344BF10EED47969F1C02ECBF8C -PT=766B754D7F1217627D5F2059D7CB1F7D -CT=7D6A6CA54B084105DF6A778A4913BB04 - -I=310 -KEY=06E7C1A6C8BC6A3355A86F61B41E70C6D6E4E24A5ADDF74D50C480442F9280B9 -IV=7D6A6CA54B084105DF6A778A4913BB04 -PT=54A0C12AF60BF0952BF5416A21CEDCFC -CT=11F0A303D6C0ED5E18F40248AF1A794B - -I=311 -KEY=D7722746B58D494BE9B97F586CA4BB0AC71441498C1D1A134830820C8088F9F2 -IV=11F0A303D6C0ED5E18F40248AF1A794B -PT=D195E6E07D312378BC111039D8BACBCC -CT=2A715E8AC7101415E65EBF34CC4CD786 - -I=312 -KEY=98B1E5954DE8000B6FFFE98D918B6237ED651FC34B0D0E06AE6E3D384CC42E74 -IV=2A715E8AC7101415E65EBF34CC4CD786 -PT=4FC3C2D3F8654940864696D5FD2FD93D -CT=965E8AF93D390E424C9F4F1FBF9D98A5 - -I=313 -KEY=74B910207ACD1D7C801724D53ED6BBC47B3B953A76340044E2F17227F359B6D1 -IV=965E8AF93D390E424C9F4F1FBF9D98A5 -PT=EC08F5B537251D77EFE8CD58AF5DD9F3 -CT=294782DD29C65B6C445C5D92F50E6D19 - -I=314 -KEY=3E1AD36FDCC33F6B3425B5D52717845E527C17E75FF25B28A6AD2FB50657DBC8 -IV=294782DD29C65B6C445C5D92F50E6D19 -PT=4AA3C34FA60E2217B432910019C13F9A -CT=E22098E7EDBEECC49FA8E31B76E925CA - -I=315 -KEY=BE9F93FE153DF61370F6709F8265DCCDB05C8F00B24CB7EC3905CCAE70BEFE02 -IV=E22098E7EDBEECC49FA8E31B76E925CA -PT=80854091C9FEC97844D3C54AA5725893 -CT=24E80C1F59A4EA36044358E0C0D4F29D - -I=316 -KEY=A790F593CFA1643BD2EB3A1AAB8176A294B4831FEBE85DDA3D46944EB06A0C9F -IV=24E80C1F59A4EA36044358E0C0D4F29D -PT=190F666DDA9C9228A21D4A8529E4AA6F -CT=63CF21803941B521532FF36F9FBFC7BD - -I=317 -KEY=0CF6F000352B4B583E4AEE707D111DC9F77BA29FD2A9E8FB6E6967212FD5CB22 -IV=63CF21803941B521532FF36F9FBFC7BD -PT=AB660593FA8A2F63ECA1D46AD6906B6B -CT=250941C1D45C82B0D9C381293CDD833A - -I=318 -KEY=1F875BCF1967857990EC97864B1EA9F8D272E35E06F56A4BB7AAE60813084818 -IV=250941C1D45C82B0D9C381293CDD833A -PT=1371ABCF2C4CCE21AEA679F6360FB431 -CT=8303B962DAFC4A225C0FD6EA60D29CF4 - -I=319 -KEY=42FE25BF51418FE7A7C7A1828219E1DB51715A3CDC092069EBA530E273DAD4EC -IV=8303B962DAFC4A225C0FD6EA60D29CF4 -PT=5D797E7048260A9E372B3604C9074823 -CT=29E2DB359FAB42C0A83A4059A059CB51 - -I=320 -KEY=6C821A4893FE0EAC88FC1F98BD44AD0A7893810943A262A9439F70BBD3831FBD -IV=29E2DB359FAB42C0A83A4059A059CB51 -PT=2E7C3FF7C2BF814B2F3BBE1A3F5D4CD1 -CT=02BDB7EC18279FA9B7788D95FEB4000E - -I=321 -KEY=411670D389D0A04859FDC26DE5AAD1297A2E36E55B85FD00F4E7FD2E2D371FB3 -IV=02BDB7EC18279FA9B7788D95FEB4000E -PT=2D946A9B1A2EAEE4D101DDF558EE7C23 -CT=3960A92A34967F13B754F2265A6F68C1 - -I=322 -KEY=851BCD18F6043DE625BBEA33E1E860E3434E9FCF6F13821343B30F0877587772 -IV=3960A92A34967F13B754F2265A6F68C1 -PT=C40DBDCB7FD49DAE7C46285E0442B1CA -CT=EF396AB8613AC6083932734D38869458 - -I=323 -KEY=1944F363F3143A380F26BD4831A6BD9EAC77F5770E29441B7A817C454FDEE32A -IV=EF396AB8613AC6083932734D38869458 -PT=9C5F3E7B051007DE2A9D577BD04EDD7D -CT=CB73B8D257CC1A8235E48DA0E6AECC4E - -I=324 -KEY=C2F3C203F591C78914E31BA1E083AB9867044DA559E55E994F65F1E5A9702F64 -IV=CB73B8D257CC1A8235E48DA0E6AECC4E -PT=DBB731600685FDB11BC5A6E9D1251606 -CT=3B0B12757B5D1B6E0130FCC306E9DBAA - -I=325 -KEY=0DCB66B972631AFBB1DA22F1418EE1C45C0F5FD022B845F74E550D26AF99F4CE -IV=3B0B12757B5D1B6E0130FCC306E9DBAA -PT=CF38A4BA87F2DD72A5393950A10D4A5C -CT=CCEF4079CE8FAF0E6B8CD4C8751059E1 - -I=326 -KEY=8FF976D3C735506D86A3540664F1C40590E01FA9EC37EAF925D9D9EEDA89AD2F -IV=CCEF4079CE8FAF0E6B8CD4C8751059E1 -PT=8232106AB5564A96377976F7257F25C1 -CT=D835D2FA5583D9B2C16424960163DF7F - -I=327 -KEY=3499925B26E4F846CAA230EC069F127F48D5CD53B9B4334BE4BDFD78DBEA7250 -IV=D835D2FA5583D9B2C16424960163DF7F -PT=BB60E488E1D1A82B4C0164EA626ED67A -CT=4634485DB5D9C40FA2F6EF36E477F0B7 - -I=328 -KEY=7A133EEC3DD747FE38A3370F8927A3C70EE1850E0C6DF744464B124E3F9D82E7 -IV=4634485DB5D9C40FA2F6EF36E477F0B7 -PT=4E8AACB71B33BFB8F20107E38FB8B1B8 -CT=AE30CD2A5D84CEF10B9C15EE1FE20CEB - -I=329 -KEY=F573665345317BAB5F14881777A0D789A0D1482451E939B54DD707A0207F8E0C -IV=AE30CD2A5D84CEF10B9C15EE1FE20CEB -PT=8F6058BF78E63C5567B7BF18FE87744E -CT=B3926CDE5BFB1363DCCA28CDA2DC4CD8 - -I=330 -KEY=FEFB661FA786BF2DA1B70FD7D06B86E8134324FA0A122AD6911D2F6D82A3C2D4 -IV=B3926CDE5BFB1363DCCA28CDA2DC4CD8 -PT=0B88004CE2B7C486FEA387C0A7CB5161 -CT=633388FA9EAE0DB2036F63CB2E21C266 - -I=331 -KEY=BFC495DFBA60078708D992724C9201577070AC0094BC276492724CA6AC8200B2 -IV=633388FA9EAE0DB2036F63CB2E21C266 -PT=413FF3C01DE6B8AAA96E9DA59CF987BF -CT=54ACB838D247D26A1544B2E42F18CF3F - -I=332 -KEY=EB0113E4FFE1201B59EAE94706B2571F24DC143846FBF50E8736FE42839ACF8D -IV=54ACB838D247D26A1544B2E42F18CF3F -PT=54C5863B4581279C51337B354A205648 -CT=B9210B8A8639CA5C94A1CF1169F89DDB - -I=333 -KEY=0E1D5F7873FD6440227C5529AEB4C7999DFD1FB2C0C23F5213973153EA625256 -IV=B9210B8A8639CA5C94A1CF1169F89DDB -PT=E51C4C9C8C1C445B7B96BC6EA8069086 -CT=8990488561B43B03CF9FE631E2E7D5E7 - -I=334 -KEY=8B2759471137DBF37906B394EFEF96D2146D5737A1760451DC08D762088587B1 -IV=8990488561B43B03CF9FE631E2E7D5E7 -PT=853A063F62CABFB35B7AE6BD415B514B -CT=9DCE77D8CCC0F041FA717C28474E9A30 - -I=335 -KEY=0D4B29E8D6F39CA01BC01CE73E2834C689A320EF6DB6F4102679AB4A4FCB1D81 -IV=9DCE77D8CCC0F041FA717C28474E9A30 -PT=866C70AFC7C4475362C6AF73D1C7A214 -CT=E1DA174FE5848D21735E55B91CA48A9B - -I=336 -KEY=55228F6FF93B7DE9304CD75991C133A5687937A0883279315527FEF3536F971A -IV=E1DA174FE5848D21735E55B91CA48A9B -PT=5869A6872FC8E1492B8CCBBEAFE90763 -CT=C578F53AD69AD508711E674F8DD2A843 - -I=337 -KEY=35CA943437046860F72A1F8554127676AD01C29A5EA8AC39243999BCDEBD3F59 -IV=C578F53AD69AD508711E674F8DD2A843 -PT=60E81B5BCE3F1589C766C8DCC5D345D3 -CT=177A50196260D3F0A3F97423899EBEE2 - -I=338 -KEY=B8C3B8414C112FC2E2E848733D5CF69CBA7B92833CC87FC987C0ED9F572381BB -IV=177A50196260D3F0A3F97423899EBEE2 -PT=8D092C757B1547A215C257F6694E80EA -CT=6B03A799C51C7D0A9D3C9929617E69B1 - -I=339 -KEY=E82B651AE5740119104FE3284CE780E4D178351AF9D402C31AFC74B6365DE80A -IV=6B03A799C51C7D0A9D3C9929617E69B1 -PT=50E8DD5BA9652EDBF2A7AB5B71BB7678 -CT=8D4C7C1157422E7B6DDA47C5C2C246F4 - -I=340 -KEY=3C0B660F2B78F768812AC671D3107AD85C34490BAE962CB877263373F49FAEFE -IV=8D4C7C1157422E7B6DDA47C5C2C246F4 -PT=D4200315CE0CF671916525599FF7FA3C -CT=787B3C51094569BC1F139102964DF5AF - -I=341 -KEY=A197B59C700A4786E840733047964FD4244F755AA7D345046835A27162D25B51 -IV=787B3C51094569BC1F139102964DF5AF -PT=9D9CD3935B72B0EE696AB5419486350C -CT=AE02945B4E63AC35B6AC2DFA2DF3CEBA - -I=342 -KEY=00E75C4B909D44A94FA20EDA6C3628418A4DE101E9B0E931DE998F8B4F2195EB -IV=AE02945B4E63AC35B6AC2DFA2DF3CEBA -PT=A170E9D7E097032FA7E27DEA2BA06795 -CT=AC4AACD3597FE73F519F7CEDAFE6E000 - -I=343 -KEY=4626BE31853C15DE412EF2A42328D47326074DD2B0CF0E0E8F06F366E0C775EB -IV=AC4AACD3597FE73F519F7CEDAFE6E000 -PT=46C1E27A15A151770E8CFC7E4F1EFC32 -CT=5EB8B35708A135E041603BA323663F34 - -I=344 -KEY=1733A037E76437411F49821D948A098978BFFE85B86E3BEECE66C8C5C3A14ADF -IV=5EB8B35708A135E041603BA323663F34 -PT=51151E066258229F5E6770B9B7A2DDFA -CT=6674FB922570377334A4F22D13E95BD8 - -I=345 -KEY=8474275A2E4D5E5448EB8D34B65EE7081ECB05179D1E0C9DFAC23AE8D0481107 -IV=6674FB922570377334A4F22D13E95BD8 -PT=9347876DC929691557A20F2922D4EE81 -CT=F0E3F09C0350C0172E449A01F24AB828 - -I=346 -KEY=765AA3F4014B8475CF832DE6128F7F2DEE28F58B9E4ECC8AD486A0E92202A92F -IV=F0E3F09C0350C0172E449A01F24AB828 -PT=F22E84AE2F06DA218768A0D2A4D19825 -CT=CC156010299679ADEE9CC000FD5C90E5 - -I=347 -KEY=DD3D3AFC83B7EEBC58CE35B35719B587223D959BB7D8B5273A1A60E9DF5E39CA -IV=CC156010299679ADEE9CC000FD5C90E5 -PT=AB67990882FC6AC9974D18554596CAAA -CT=80354EDEA10038E903C4896313236CE5 - -I=348 -KEY=4764BB8C98BCF3FD4A21A370AE5432BBA208DB4516D88DCE39DEE98ACC7D552F -IV=80354EDEA10038E903C4896313236CE5 -PT=9A5981701B0B1D4112EF96C3F94D873C -CT=15140DC26F383EB99425FB51D445CC98 - -I=349 -KEY=DF729AB7D09BC85489F8AD373EBDDA70B71CD68779E0B377ADFB12DB183899B7 -IV=15140DC26F383EB99425FB51D445CC98 -PT=9816213B48273BA9C3D90E4790E9E8CB -CT=163465787010C97D3C2023D803F62556 - -I=350 -KEY=A945B0C5997C596B5155A6BCA5055127A128B3FF09F07A0A91DB31031BCEBCE1 -IV=163465787010C97D3C2023D803F62556 -PT=76372A7249E7913FD8AD0B8B9BB88B57 -CT=23E861D557EE72534C8B729240E3A54F - -I=351 -KEY=0E1C166F2B947D14D0C7E6ABD280A31E82C0D22A5E1E0859DD5043915B2D19AE -IV=23E861D557EE72534C8B729240E3A54F -PT=A759A6AAB2E8247F819240177785F239 -CT=652CA6A199D7DBC37936FCD70636989F - -I=352 -KEY=208A37149072011877E3E85B3DC7F4A7E7EC748BC7C9D39AA466BF465D1B8131 -IV=652CA6A199D7DBC37936FCD70636989F -PT=2E96217BBBE67C0CA7240EF0EF4757B9 -CT=7C29D6F4788553E3C50A48027478A98F - -I=353 -KEY=A8FFCB194C077EEED66632AEBE01652E9BC5A27FBF4C8079616CF744296328BE -IV=7C29D6F4788553E3C50A48027478A98F -PT=8875FC0DDC757FF6A185DAF583C69189 -CT=7B886FC819D625B224F2516901788E88 - -I=354 -KEY=3716969BDDBF04FF4010D4667CCA994AE04DCDB7A69AA5CB459EA62D281BA636 -IV=7B886FC819D625B224F2516901788E88 -PT=9FE95D8291B87A119676E6C8C2CBFC64 -CT=3EAB925C025F379153CE2C7191026976 - -I=355 -KEY=991D0D313717C7AC62537C8572DE094BDEE65FEBA4C5925A16508A5CB919CF40 -IV=3EAB925C025F379153CE2C7191026976 -PT=AE0B9BAAEAA8C3532243A8E30E149001 -CT=B9904B8BDF431FDDB9166086C9D3E24C - -I=356 -KEY=315772BB82A3DD286FE5891934B19434677614607B868D87AF46EADA70CA2D0C -IV=B9904B8BDF431FDDB9166086C9D3E24C -PT=A84A7F8AB5B41A840DB6F59C466F9D7F -CT=3C7029336ECCA5D352DB9D0C060D3830 - -I=357 -KEY=C99E4E6A8C1D42A9E431FF8B2A8ACA615B063D53154A2854FD9D77D676C7153C -IV=3C7029336ECCA5D352DB9D0C060D3830 -PT=F8C93CD10EBE9F818BD476921E3B5E55 -CT=4AF4290AA79EB96435D2D3FC745033D7 - -I=358 -KEY=55317B8B407B7D089ED2CEF7BE80E99111F21459B2D49130C84FA42A029726EB -IV=4AF4290AA79EB96435D2D3FC745033D7 -PT=9CAF35E1CC663FA17AE3317C940A23F0 -CT=BFCA0B6B31AAD81F1BDC743B48B7CCA4 - -I=359 -KEY=6EAE6D8B06AA25493BA3608357D71404AE381F32837E492FD393D0114A20EA4F -IV=BFCA0B6B31AAD81F1BDC743B48B7CCA4 -PT=3B9F160046D15841A571AE74E957FD95 -CT=89C1D565569A12A68B2E808AB5CFA2E3 - -I=360 -KEY=3245D7C1F5571A1329E1B2303F8A689D27F9CA57D5E45B8958BD509BFFEF48AC -IV=89C1D565569A12A68B2E808AB5CFA2E3 -PT=5CEBBA4AF3FD3F5A1242D2B3685D7C99 -CT=EC8EEAED7894646B1D1A5E058ED41178 - -I=361 -KEY=1DE05811428569D3F89CF1C01AF434AFCB7720BAAD703FE245A70E9E713B59D4 -IV=EC8EEAED7894646B1D1A5E058ED41178 -PT=2FA58FD0B7D273C0D17D43F0257E5C32 -CT=92802F392579C66AD72D2E85776720E8 - -I=362 -KEY=0A8FB6D844AB0B73C05A121085E07FFE59F70F838809F988928A201B065C793C -IV=92802F392579C66AD72D2E85776720E8 -PT=176FEEC9062E62A038C6E3D09F144B51 -CT=461DBCF9894F5319FE772F6529FBCEC0 - -I=363 -KEY=4E6818B3BBEF69FA7ABEC1EBE2E54CDC1FEAB37A0146AA916CFD0F7E2FA7B7FC -IV=461DBCF9894F5319FE772F6529FBCEC0 -PT=44E7AE6BFF446289BAE4D3FB67053322 -CT=794CA9DC41BAE95D415A6D1119582763 - -I=364 -KEY=4A1EABB13924B188441724141F1C88A966A61AA640FC43CC2DA7626F36FF909F -IV=794CA9DC41BAE95D415A6D1119582763 -PT=0476B30282CBD8723EA9E5FFFDF9C475 -CT=B761EAF5CC07651BD33D8BF93913EAE8 - -I=365 -KEY=FFE4E48F8D96710A1BE7DBE36F4905CDD1C7F0538CFB26D7FE9AE9960FEC7A77 -IV=B761EAF5CC07651BD33D8BF93913EAE8 -PT=B5FA4F3EB4B2C0825FF0FFF770558D64 -CT=0B5146EB77161E60D6D1E2FAEAE80694 - -I=366 -KEY=7A4F383AF4BB2DC6588E75EE82C7D9CFDA96B6B8FBED38B7284B0B6CE5047CE3 -IV=0B5146EB77161E60D6D1E2FAEAE80694 -PT=85ABDCB5792D5CCC4369AE0DED8EDC02 -CT=07635064CE85F6AE17961AF1F2B44469 - -I=367 -KEY=EFFE7F8BBBEC8BEC83FA199102763BEDDDF5E6DC3568CE193FDD119D17B0388A -IV=07635064CE85F6AE17961AF1F2B44469 -PT=95B147B14F57A62ADB746C7F80B1E222 -CT=3A9CD5F30C421FF333BA2C2F0A7AD07D - -I=368 -KEY=1DF51B7A35E11E2AF79E8C59094A1ECFE769332F392AD1EA0C673DB21DCAE8F7 -IV=3A9CD5F30C421FF333BA2C2F0A7AD07D -PT=F20B64F18E0D95C6746495C80B3C2522 -CT=F60032C249CF561CB02421DA189A57D1 - -I=369 -KEY=CC09FFE72A10AE27FE14934A6628AB83116901ED70E587F6BC431C680550BF26 -IV=F60032C249CF561CB02421DA189A57D1 -PT=D1FCE49D1FF1B00D098A1F136F62B54C -CT=EAD5844B160C08F9CDAA15FD5936EF26 - -I=370 -KEY=09C84CA0DA0B9FD79D3090E690BAB419FBBC85A666E98F0F71E909955C665000 -IV=EAD5844B160C08F9CDAA15FD5936EF26 -PT=C5C1B347F01B31F0632403ACF6921F9A -CT=26AD72F011133FD4CED8F38A1ABE7D73 - -I=371 -KEY=74FA53C172A2003EC5933F486FCC7BBFDD11F75677FAB0DBBF31FA1F46D82D73 -IV=26AD72F011133FD4CED8F38A1ABE7D73 -PT=7D321F61A8A99FE958A3AFAEFF76CFA6 -CT=F115FBC0D3F386527176D1DF6AD4B38A - -I=372 -KEY=0E5BA209B7BC28D184E73BD37F35C1312C040C96A4093689CE472BC02C0C9EF9 -IV=F115FBC0D3F386527176D1DF6AD4B38A -PT=7AA1F1C8C51E28EF4174049B10F9BA8E -CT=27ED0BA04734E70317BF58E11B0DD051 - -I=373 -KEY=9404D9139B6597D1F7C7519713C6CBC80BE90736E33DD18AD9F8732137014EA8 -IV=27ED0BA04734E70317BF58E11B0DD051 -PT=9A5F7B1A2CD9BF0073206A446CF30AF9 -CT=24080A577426F8F270A13F3A5F3DB546 - -I=374 -KEY=E72476BC679C8DCBAB92BBA5D48BF6D32FE10D61971B2978A9594C1B683CFBEE -IV=24080A577426F8F270A13F3A5F3DB546 -PT=7320AFAFFCF91A1A5C55EA32C74D3D1B -CT=A754CC0464E35B387435790505F2DCE5 - -I=375 -KEY=4548DE389CCAD4A65B02A9B5FE90930188B5C165F3F87240DD6C351E6DCE270B -IV=A754CC0464E35B387435790505F2DCE5 -PT=A26CA884FB56596DF09012102A1B65D2 -CT=D9AED2566884E97D081EADB45780AA7D - -I=376 -KEY=2E54365B503140D0EC9074DFA05F4B2C511B13339B7C9B3DD57298AA3A4E8D76 -IV=D9AED2566884E97D081EADB45780AA7D -PT=6B1CE863CCFB9476B792DD6A5ECFD82D -CT=9FA221E082CAD838AB4B210A8794BD8F - -I=377 -KEY=7C9FB092B8A96465076E14C575E9A8F0CEB932D319B643057E39B9A0BDDA30F9 -IV=9FA221E082CAD838AB4B210A8794BD8F -PT=52CB86C9E89824B5EBFE601AD5B6E3DC -CT=AAEA6DE5734CF14BED503512EB071C2A - -I=378 -KEY=90AB85A18F2B0255D4F43AF5E98DAA7E64535F366AFAB24E93698CB256DD2CD3 -IV=AAEA6DE5734CF14BED503512EB071C2A -PT=EC34353337826630D39A2E309C64028E -CT=1359A157B415EB63E038AB7354E6B0F2 - -I=379 -KEY=9135D4D54A1CE6BBF4F23AFDE23F537C770AFE61DEEF592D735127C1023B9C21 -IV=1359A157B415EB63E038AB7354E6B0F2 -PT=019E5174C537E4EE200600080BB2F902 -CT=0764EBDBFAE8FD447244408A5153CC3B - -I=380 -KEY=4B5F1BC60EF5DCE83474A3970EB2ABA8706E15BA2407A4690115674B5368501A -IV=0764EBDBFAE8FD447244408A5153CC3B -PT=DA6ACF1344E93A53C086996AEC8DF8D4 -CT=A31F69E0055E8D4162AC06C088925FBA - -I=381 -KEY=9DD8E8D75BE2E4D1BC70B30DAE0B375FD3717C5A2159292863B9618BDBFA0FA0 -IV=A31F69E0055E8D4162AC06C088925FBA -PT=D687F311551738398804109AA0B99CF7 -CT=EB84AC035534CDF1698E660F529E0EC7 - -I=382 -KEY=4A2B2FC8446B4C2575CFE584A490680238F5D059746DE4D90A37078489640167 -IV=EB84AC035534CDF1698E660F529E0EC7 -PT=D7F3C71F1F89A8F4C9BF56890A9B5F5D -CT=9236D37A28C2CF29237127173B93C5D5 - -I=383 -KEY=9BE42576823EEAADB34657A5CBB44B21AAC303235CAF2BF029462093B2F7C4B2 -IV=9236D37A28C2CF29237127173B93C5D5 -PT=D1CF0ABEC655A688C689B2216F242323 -CT=86C122CFA62B1356FEE33FECF598ACC9 - -I=384 -KEY=5DFC1838B052E95A948D0AC31736CBE62C0221ECFA8438A6D7A51F7F476F687B -IV=86C122CFA62B1356FEE33FECF598ACC9 -PT=C6183D4E326C03F727CB5D66DC8280C7 -CT=8A9926125B1CA354B1D7A9FED0850FEE - -I=385 -KEY=2B12FA914EE7674EADED81C47A67A1B4A69B07FEA1989BF26672B68197EA6795 -IV=8A9926125B1CA354B1D7A9FED0850FEE -PT=76EEE2A9FEB58E1439608B076D516A52 -CT=AD99A2A427BFF7A17C375DB38764EBFC - -I=386 -KEY=10607DE088CB92382089EF99B7C054280B02A55A86276C531A45EB32108E8C69 -IV=AD99A2A427BFF7A17C375DB38764EBFC -PT=3B728771C62CF5768D646E5DCDA7F59C -CT=0E141FD7D6928E7B7885638B6334947C - -I=387 -KEY=605ECCB38F9FFD9DAB2DB523313FFADB0516BA8D50B5E22862C088B973BA1815 -IV=0E141FD7D6928E7B7885638B6334947C -PT=703EB15307546FA58BA45ABA86FFAEF3 -CT=996CB8723B08B99A4959072DC8A73292 - -I=388 -KEY=C6371257BDA461F3A4D2F1ED5DD4B0B69C7A02FF6BBD5BB22B998F94BB1D2A87 -IV=996CB8723B08B99A4959072DC8A73292 -PT=A669DEE4323B9C6E0FFF44CE6CEB4A6D -CT=72966BAA5E4D7FA9129088F2C072E301 - -I=389 -KEY=DDD8877C25005F9B8336823CBF4D4B1DEEEC695535F0241B390907667B6FC986 -IV=72966BAA5E4D7FA9129088F2C072E301 -PT=1BEF952B98A43E6827E473D1E299FBAB -CT=32C321C999A2D68EA4517D332C785FC4 - -I=390 -KEY=00882DCBC6CFDED1A2ED7D9892F494A5DC2F489CAC52F2959D587A5557179642 -IV=32C321C999A2D68EA4517D332C785FC4 -PT=DD50AAB7E3CF814A21DBFFA42DB9DFB8 -CT=391D95DD63982E0A9AF3980A234DB5B9 - -I=391 -KEY=234B9097BD6519EFE106103720AC937DE532DD41CFCADC9F07ABE25F745A23FB -IV=391D95DD63982E0A9AF3980A234DB5B9 -PT=23C3BD5C7BAAC73E43EB6DAFB25807D8 -CT=D3A279EE1BABABA71DB01DC35EBA879D - -I=392 -KEY=AFF7D52D959CC7E41F1F3FF3CA2425053690A4AFD46177381A1BFF9C2AE0A466 -IV=D3A279EE1BABABA71DB01DC35EBA879D -PT=8CBC45BA28F9DE0BFE192FC4EA88B678 -CT=B4696871EE3A9D035BC32308DA5A5DA7 - -I=393 -KEY=B557440CEEB6E4EF54F6CD1B222246AC82F9CCDE3A5BEA3B41D8DC94F0BAF9C1 -IV=B4696871EE3A9D035BC32308DA5A5DA7 -PT=1AA091217B2A230B4BE9F2E8E80663A9 -CT=C5047AFD7884E0124928229AA6E72F67 - -I=394 -KEY=BF64C071FAAD2C48CB269C03563FA06147FDB62342DF0A2908F0FE0E565DD6A6 -IV=C5047AFD7884E0124928229AA6E72F67 -PT=0A33847D141BC8A79FD05118741DE6CD -CT=240D684E6BAD3FD4E41D58DB871E93CD - -I=395 -KEY=F6945509258A1584398F5438DFD679DB63F0DE6D297235FDECEDA6D5D143456B -IV=240D684E6BAD3FD4E41D58DB871E93CD -PT=49F09578DF2739CCF2A9C83B89E9D9BA -CT=F66917F0C3C67774F9263062F918DDD5 - -I=396 -KEY=A8E48107D59287ABBA374E7CE5BC28E89599C99DEAB4428915CB96B7285B98BE -IV=F66917F0C3C67774F9263062F918DDD5 -PT=5E70D40EF018922F83B81A443A6A5133 -CT=85C42456F11D0191BC4B4DD4EA0406EE - -I=397 -KEY=E4F367569F4F9114AFE937A0190C9738105DEDCB1BA94318A980DB63C25F9E50 -IV=85C42456F11D0191BC4B4DD4EA0406EE -PT=4C17E6514ADD16BF15DE79DCFCB0BFD0 -CT=D48B6C87A25C71113947569411C2186A - -I=398 -KEY=987ED2D586DA9AB08C584BBEA0478953C4D6814CB9F5320990C78DF7D39D863A -IV=D48B6C87A25C71113947569411C2186A -PT=7C8DB58319950BA423B17C1EB94B1E6B -CT=AB6957C2F3D360593E9096F3A392A701 - -I=399 -KEY=3DF2BF13B7FF97CA13567A890E11C9796FBFD68E4A265250AE571B04700F213B -IV=AB6957C2F3D360593E9096F3A392A701 -PT=A58C6DC631250D7A9F0E3137AE56402A -CT=C0FEFFF07506A0B4CD7B8B0CF25D3664 - -=========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_d_m.txt b/src/lib/crypto/aes/test/ecb_d_m.txt deleted file mode 100644 index d99a69af3..000000000 --- a/src/lib/crypto/aes/test/ecb_d_m.txt +++ /dev/null @@ -1,6024 +0,0 @@ - -========================= - -FILENAME: "ecb_d_m.txt" - -Electronic Codebook (ECB) Mode - DECRYPTION -Monte Carlo Test - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========================= - -KEYSIZE=128 - -I=0 -KEY=00000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=44416AC2D1F53C583303917E6BE9EBE0 - -I=1 -KEY=44416AC2D1F53C583303917E6BE9EBE0 -CT=44416AC2D1F53C583303917E6BE9EBE0 -PT=E3FD51123B48A2E2AB1DB29894202222 - -I=2 -KEY=A7BC3BD0EABD9EBA981E23E6FFC9C9C2 -CT=E3FD51123B48A2E2AB1DB29894202222 -PT=877B88A77AEF04F05546539E17259F53 - -I=3 -KEY=20C7B37790529A4ACD587078E8EC5691 -CT=877B88A77AEF04F05546539E17259F53 -PT=C7A71C1B46261602EB1EE48FDA8155A4 - -I=4 -KEY=E760AF6CD6748C48264694F7326D0335 -CT=C7A71C1B46261602EB1EE48FDA8155A4 -PT=6B6AC8E00FAF7E045ECCFC426A137221 - -I=5 -KEY=8C0A678CD9DBF24C788A68B5587E7114 -CT=6B6AC8E00FAF7E045ECCFC426A137221 -PT=3F252821FA79AFC3F1798B343AAD41EE - -I=6 -KEY=B32F4FAD23A25D8F89F3E38162D330FA -CT=3F252821FA79AFC3F1798B343AAD41EE -PT=0B55C691E1F97205D137FF34478E5BC9 - -I=7 -KEY=B87A893CC25B2F8A58C41CB5255D6B33 -CT=0B55C691E1F97205D137FF34478E5BC9 -PT=F6CCC1CC18A3199D6427EDCA0BB2DF90 - -I=8 -KEY=4EB648F0DAF836173CE3F17F2EEFB4A3 -CT=F6CCC1CC18A3199D6427EDCA0BB2DF90 -PT=0CDD7D9734B1515C73DDA60EFF28CD89 - -I=9 -KEY=426B3567EE49674B4F3E5771D1C7792A -CT=0CDD7D9734B1515C73DDA60EFF28CD89 -PT=3E813131EDD440D9054799CEA508FF6F - -I=10 -KEY=7CEA0456039D27924A79CEBF74CF8645 -CT=3E813131EDD440D9054799CEA508FF6F -PT=8C6859BD0B6E078FAA6B686297653232 - -I=11 -KEY=F0825DEB08F3201DE012A6DDE3AAB477 -CT=8C6859BD0B6E078FAA6B686297653232 -PT=C966A4106C1DCE062D1346EB5E5133BB - -I=12 -KEY=39E4F9FB64EEEE1BCD01E036BDFB87CC -CT=C966A4106C1DCE062D1346EB5E5133BB -PT=4F4AE38B53FD7800F0E9F5C214E16F2A - -I=13 -KEY=76AE1A703713961B3DE815F4A91AE8E6 -CT=4F4AE38B53FD7800F0E9F5C214E16F2A -PT=C73A033491DC0B6A77FEA2FBCC9D305E - -I=14 -KEY=B1941944A6CF9D714A16B70F6587D8B8 -CT=C73A033491DC0B6A77FEA2FBCC9D305E -PT=C928C2A05BB44816EFBE6B13E94BC70E - -I=15 -KEY=78BCDBE4FD7BD567A5A8DC1C8CCC1FB6 -CT=C928C2A05BB44816EFBE6B13E94BC70E -PT=A7C1593E7B4BAEE5256D4081337E7CAF - -I=16 -KEY=DF7D82DA86307B8280C59C9DBFB26319 -CT=A7C1593E7B4BAEE5256D4081337E7CAF -PT=7ECD305AC27AEBFA2B8F85F9AC312638 - -I=17 -KEY=A1B0B280444A9078AB4A196413834521 -CT=7ECD305AC27AEBFA2B8F85F9AC312638 -PT=A24D1403A58B94798F5F3565ABFD3B44 - -I=18 -KEY=03FDA683E1C1040124152C01B87E7E65 -CT=A24D1403A58B94798F5F3565ABFD3B44 -PT=5B6E097B3B0E21DCC9CE9970701C7BD5 - -I=19 -KEY=5893AFF8DACF25DDEDDBB571C86205B0 -CT=5B6E097B3B0E21DCC9CE9970701C7BD5 -PT=4E21CEA52B3111AC8F6B204A1F5E65E2 - -I=20 -KEY=16B2615DF1FE347162B0953BD73C6052 -CT=4E21CEA52B3111AC8F6B204A1F5E65E2 -PT=806DDC5C37ADEEBB6FCE4730939D7A99 - -I=21 -KEY=96DFBD01C653DACA0D7ED20B44A11ACB -CT=806DDC5C37ADEEBB6FCE4730939D7A99 -PT=3462F7C6D3E071A0D3ACE7FD79149776 - -I=22 -KEY=A2BD4AC715B3AB6ADED235F63DB58DBD -CT=3462F7C6D3E071A0D3ACE7FD79149776 -PT=AF0FFF307B72284E794C8A64C30299D2 - -I=23 -KEY=0DB2B5F76EC18324A79EBF92FEB7146F -CT=AF0FFF307B72284E794C8A64C30299D2 -PT=E482B613FBCF9C4422D85E3160B1FB0F - -I=24 -KEY=E93003E4950E1F608546E1A39E06EF60 -CT=E482B613FBCF9C4422D85E3160B1FB0F -PT=FADC8EF9C95540AD69897DECAB2D50D5 - -I=25 -KEY=13EC8D1D5C5B5FCDECCF9C4F352BBFB5 -CT=FADC8EF9C95540AD69897DECAB2D50D5 -PT=2A765E237FB5230D792D455596A17118 - -I=26 -KEY=399AD33E23EE7CC095E2D91AA38ACEAD -CT=2A765E237FB5230D792D455596A17118 -PT=0887DA8012C7F95BD6ADB18D1ED3C2DB - -I=27 -KEY=311D09BE3129859B434F6897BD590C76 -CT=0887DA8012C7F95BD6ADB18D1ED3C2DB -PT=3BB831A7B6FAC3649176471012FAD1C1 - -I=28 -KEY=0AA5381987D346FFD2392F87AFA3DDB7 -CT=3BB831A7B6FAC3649176471012FAD1C1 -PT=E4F8629AB3489A0945B8B7188B953DE5 - -I=29 -KEY=EE5D5A83349BDCF69781989F2436E052 -CT=E4F8629AB3489A0945B8B7188B953DE5 -PT=1D4B0B5B321EB711939AB481239E2541 - -I=30 -KEY=F31651D806856BE7041B2C1E07A8C513 -CT=1D4B0B5B321EB711939AB481239E2541 -PT=71A368D5A33665D6FF9F33FECAFC6884 - -I=31 -KEY=82B5390DA5B30E31FB841FE0CD54AD97 -CT=71A368D5A33665D6FF9F33FECAFC6884 -PT=8ACF418080075BA23B05A52552773B84 - -I=32 -KEY=087A788D25B45593C081BAC59F239613 -CT=8ACF418080075BA23B05A52552773B84 -PT=E0E6058735F4FE765E882521D769FB41 - -I=33 -KEY=E89C7D0A1040ABE59E099FE4484A6D52 -CT=E0E6058735F4FE765E882521D769FB41 -PT=70DCE91F818DF2CDC4269F1B4EA0A465 - -I=34 -KEY=9840941591CD59285A2F00FF06EAC937 -CT=70DCE91F818DF2CDC4269F1B4EA0A465 -PT=E2F809D6DD77D72EF6DB5A82C42BF1CF - -I=35 -KEY=7AB89DC34CBA8E06ACF45A7DC2C138F8 -CT=E2F809D6DD77D72EF6DB5A82C42BF1CF -PT=0741D11DDD877957E753ECF8DB91C72B - -I=36 -KEY=7DF94CDE913DF7514BA7B6851950FFD3 -CT=0741D11DDD877957E753ECF8DB91C72B -PT=03E411012CA3B5B3CC163677D4B52456 - -I=37 -KEY=7E1D5DDFBD9E42E287B180F2CDE5DB85 -CT=03E411012CA3B5B3CC163677D4B52456 -PT=0270D90790EF8347ACFB87EB2FEC2710 - -I=38 -KEY=7C6D84D82D71C1A52B4A0719E209FC95 -CT=0270D90790EF8347ACFB87EB2FEC2710 -PT=3AE40270512374AF4022638E0A7A6D8E - -I=39 -KEY=468986A87C52B50A6B686497E873911B -CT=3AE40270512374AF4022638E0A7A6D8E -PT=8008D87E928A980FECA08CAF1EC91DDA - -I=40 -KEY=C6815ED6EED82D0587C8E838F6BA8CC1 -CT=8008D87E928A980FECA08CAF1EC91DDA -PT=1D479A54832FF1A81D30008EFDF16A34 - -I=41 -KEY=DBC6C4826DF7DCAD9AF8E8B60B4BE6F5 -CT=1D479A54832FF1A81D30008EFDF16A34 -PT=9E731FECD9A767BDA0C84B4C4D552BD3 - -I=42 -KEY=45B5DB6EB450BB103A30A3FA461ECD26 -CT=9E731FECD9A767BDA0C84B4C4D552BD3 -PT=C2211A6B16CD27C6C73A5C3C1A0132AC - -I=43 -KEY=8794C105A29D9CD6FD0AFFC65C1FFF8A -CT=C2211A6B16CD27C6C73A5C3C1A0132AC -PT=7E523DD6F25706F971F020F88FFA0CF7 - -I=44 -KEY=F9C6FCD350CA9A2F8CFADF3ED3E5F37D -CT=7E523DD6F25706F971F020F88FFA0CF7 -PT=0EDC01C6C1A8DA6A7C9EEE3587CB098E - -I=45 -KEY=F71AFD1591624045F064310B542EFAF3 -CT=0EDC01C6C1A8DA6A7C9EEE3587CB098E -PT=EE479106871DA872632794633B1ACF0E - -I=46 -KEY=195D6C13167FE8379343A5686F3435FD -CT=EE479106871DA872632794633B1ACF0E -PT=7EC1A4578D911F336184DACCCA92D943 - -I=47 -KEY=679CC8449BEEF704F2C77FA4A5A6ECBE -CT=7EC1A4578D911F336184DACCCA92D943 -PT=53715F25AE02513F181E3DECBB007803 - -I=48 -KEY=34ED976135ECA63BEAD942481EA694BD -CT=53715F25AE02513F181E3DECBB007803 -PT=304D5764B5206F8204A69D1BED11FA62 - -I=49 -KEY=04A0C00580CCC9B9EE7FDF53F3B76EDF -CT=304D5764B5206F8204A69D1BED11FA62 -PT=5A7590ADEF208BFD808499A2BFE9B011 - -I=50 -KEY=5ED550A86FEC42446EFB46F14C5EDECE -CT=5A7590ADEF208BFD808499A2BFE9B011 -PT=2502C0F68A721A93ECE8D7B6C2097BA4 - -I=51 -KEY=7BD7905EE59E58D7821391478E57A56A -CT=2502C0F68A721A93ECE8D7B6C2097BA4 -PT=1C814E26A6464086D606C7B4C6DFD85B - -I=52 -KEY=6756DE7843D81851541556F348887D31 -CT=1C814E26A6464086D606C7B4C6DFD85B -PT=9D55D6EA99BA391190068205DD9AE69C - -I=53 -KEY=FA030892DA622140C413D4F695129BAD -CT=9D55D6EA99BA391190068205DD9AE69C -PT=9D1212D0BD8C26422EEFF4DDB16B2EF3 - -I=54 -KEY=67111A4267EE0702EAFC202B2479B55E -CT=9D1212D0BD8C26422EEFF4DDB16B2EF3 -PT=54DF71E70141E1712449CDC1AC7D07F6 - -I=55 -KEY=33CE6BA566AFE673CEB5EDEA8804B2A8 -CT=54DF71E70141E1712449CDC1AC7D07F6 -PT=AF3DE6F3510978928C129CFC19FB29B4 - -I=56 -KEY=9CF38D5637A69EE142A7711691FF9B1C -CT=AF3DE6F3510978928C129CFC19FB29B4 -PT=830DB7014774C7DF870C8456BC0162AB - -I=57 -KEY=1FFE3A5770D2593EC5ABF5402DFEF9B7 -CT=830DB7014774C7DF870C8456BC0162AB -PT=6606C0A36A18BEFF33485F95B82C30E7 - -I=58 -KEY=79F8FAF41ACAE7C1F6E3AAD595D2C950 -CT=6606C0A36A18BEFF33485F95B82C30E7 -PT=4B1E64672B89056DF693E73B419E786E - -I=59 -KEY=32E69E933143E2AC00704DEED44CB13E -CT=4B1E64672B89056DF693E73B419E786E -PT=1877DEEAFF10A5A3F5E9A811BF7595BA - -I=60 -KEY=2A914079CE53470FF599E5FF6B392484 -CT=1877DEEAFF10A5A3F5E9A811BF7595BA -PT=A11A48215BF59CC53BC8A009DCA3973D - -I=61 -KEY=8B8B085895A6DBCACE5145F6B79AB3B9 -CT=A11A48215BF59CC53BC8A009DCA3973D -PT=E80535676DE8898A3624B8127EC21024 - -I=62 -KEY=638E3D3FF84E5240F875FDE4C958A39D -CT=E80535676DE8898A3624B8127EC21024 -PT=E2977A804EC9A8B03C85234AD3A95B52 - -I=63 -KEY=811947BFB687FAF0C4F0DEAE1AF1F8CF -CT=E2977A804EC9A8B03C85234AD3A95B52 -PT=D776D8BF13F736483862328571C06C61 - -I=64 -KEY=566F9F00A570CCB8FC92EC2B6B3194AE -CT=D776D8BF13F736483862328571C06C61 -PT=3AF7969F3247A0914037209556997164 - -I=65 -KEY=6C98099F97376C29BCA5CCBE3DA8E5CA -CT=3AF7969F3247A0914037209556997164 -PT=4F87DDC715CEE3A9D67645AD920DF74A - -I=66 -KEY=231FD45882F98F806AD38913AFA51280 -CT=4F87DDC715CEE3A9D67645AD920DF74A -PT=9E88CA52E6B0C160E52B23F36882DBA1 - -I=67 -KEY=BD971E0A64494EE08FF8AAE0C727C921 -CT=9E88CA52E6B0C160E52B23F36882DBA1 -PT=CAD26E5881D9D4E52C7595C773E0FDAB - -I=68 -KEY=77457052E5909A05A38D3F27B4C7348A -CT=CAD26E5881D9D4E52C7595C773E0FDAB -PT=C2D0B3D713CFCA5ABB7B9DED14429F37 - -I=69 -KEY=B595C385F65F505F18F6A2CAA085ABBD -CT=C2D0B3D713CFCA5ABB7B9DED14429F37 -PT=DD7AADA7524A4878F7C598C4CBCD9CAB - -I=70 -KEY=68EF6E22A4151827EF333A0E6B483716 -CT=DD7AADA7524A4878F7C598C4CBCD9CAB -PT=A0F33B1FCC3F4A4B0982F0823C4ED3C9 - -I=71 -KEY=C81C553D682A526CE6B1CA8C5706E4DF -CT=A0F33B1FCC3F4A4B0982F0823C4ED3C9 -PT=B22BB23CD68E8779A8C0FC9A350CB756 - -I=72 -KEY=7A37E701BEA4D5154E713616620A5389 -CT=B22BB23CD68E8779A8C0FC9A350CB756 -PT=EA4D96AC54BD8387AD36AC8C855A9D44 - -I=73 -KEY=907A71ADEA195692E3479A9AE750CECD -CT=EA4D96AC54BD8387AD36AC8C855A9D44 -PT=A3B90CFDE355723BC94999784534FA74 - -I=74 -KEY=33C37D50094C24A92A0E03E2A26434B9 -CT=A3B90CFDE355723BC94999784534FA74 -PT=55636C86A64383768CB948FF57B29322 - -I=75 -KEY=66A011D6AF0FA7DFA6B74B1DF5D6A79B -CT=55636C86A64383768CB948FF57B29322 -PT=B29CCDFD8E7BE50892F0D77DD969F97E - -I=76 -KEY=D43CDC2B217442D734479C602CBF5EE5 -CT=B29CCDFD8E7BE50892F0D77DD969F97E -PT=9CF0432822EABDF489B57EDD9CEF7FEA - -I=77 -KEY=48CC9F03039EFF23BDF2E2BDB050210F -CT=9CF0432822EABDF489B57EDD9CEF7FEA -PT=AA753B7D38E807D691005899385DC6DA - -I=78 -KEY=E2B9A47E3B76F8F52CF2BA24880DE7D5 -CT=AA753B7D38E807D691005899385DC6DA -PT=E4F0681527FA7AD3D1E7C78C03FB79FA - -I=79 -KEY=0649CC6B1C8C8226FD157DA88BF69E2F -CT=E4F0681527FA7AD3D1E7C78C03FB79FA -PT=7923AF8E50F378B9C97D2F162348025B - -I=80 -KEY=7F6A63E54C7FFA9F346852BEA8BE9C74 -CT=7923AF8E50F378B9C97D2F162348025B -PT=3BEFAB920CA31A6B8B87E11DF97B42DE - -I=81 -KEY=4485C87740DCE0F4BFEFB3A351C5DEAA -CT=3BEFAB920CA31A6B8B87E11DF97B42DE -PT=4661D6B8004611976A21C69804D102C0 - -I=82 -KEY=02E41ECF409AF163D5CE753B5514DC6A -CT=4661D6B8004611976A21C69804D102C0 -PT=B861DF2279F2AEE4FCFD7D322AD0BE2B - -I=83 -KEY=BA85C1ED39685F87293308097FC46241 -CT=B861DF2279F2AEE4FCFD7D322AD0BE2B -PT=1785745618A541F9454443FFB494F2E9 - -I=84 -KEY=AD00B5BB21CD1E7E6C774BF6CB5090A8 -CT=1785745618A541F9454443FFB494F2E9 -PT=AA7507A80B4CCF33E8B4F09E2D7004F6 - -I=85 -KEY=0775B2132A81D14D84C3BB68E620945E -CT=AA7507A80B4CCF33E8B4F09E2D7004F6 -PT=433412B8F10F81A557AC461823097FC7 - -I=86 -KEY=4441A0ABDB8E50E8D36FFD70C529EB99 -CT=433412B8F10F81A557AC461823097FC7 -PT=EC3206BDB3765876B74952C411D40373 - -I=87 -KEY=A873A61668F8089E6426AFB4D4FDE8EA -CT=EC3206BDB3765876B74952C411D40373 -PT=F7F994027D328FA3D70C9DEABD3BE733 - -I=88 -KEY=5F8A321415CA873DB32A325E69C60FD9 -CT=F7F994027D328FA3D70C9DEABD3BE733 -PT=E2A8419BF86A2408ED8D0274A5CE0E10 - -I=89 -KEY=BD22738FEDA0A3355EA7302ACC0801C9 -CT=E2A8419BF86A2408ED8D0274A5CE0E10 -PT=80FB8CD5243C89D77F503B2F16979F90 - -I=90 -KEY=3DD9FF5AC99C2AE221F70B05DA9F9E59 -CT=80FB8CD5243C89D77F503B2F16979F90 -PT=F7773137F233AE2609C2C9AC36F58224 - -I=91 -KEY=CAAECE6D3BAF84C42835C2A9EC6A1C7D -CT=F7773137F233AE2609C2C9AC36F58224 -PT=F3D0A1DADA4A009E8E4C0EF717469BCD - -I=92 -KEY=397E6FB7E1E5845AA679CC5EFB2C87B0 -CT=F3D0A1DADA4A009E8E4C0EF717469BCD -PT=0AC0FF22EB653A26A3F1F0CFE3808609 - -I=93 -KEY=33BE90950A80BE7C05883C9118AC01B9 -CT=0AC0FF22EB653A26A3F1F0CFE3808609 -PT=28FF865CE11720BB1B56EF49D7D1840D - -I=94 -KEY=1B4116C9EB979EC71EDED3D8CF7D85B4 -CT=28FF865CE11720BB1B56EF49D7D1840D -PT=001FAF58E22F5E8ED6BCC7FD581D7C2F - -I=95 -KEY=1B5EB99109B8C049C86214259760F99B -CT=001FAF58E22F5E8ED6BCC7FD581D7C2F -PT=32B41303A58AB49CB4CB2322B77383B3 - -I=96 -KEY=29EAAA92AC3274D57CA9370720137A28 -CT=32B41303A58AB49CB4CB2322B77383B3 -PT=9C52020FCDE0306C8E19CDF68FEFDF50 - -I=97 -KEY=B5B8A89D61D244B9F2B0FAF1AFFCA578 -CT=9C52020FCDE0306C8E19CDF68FEFDF50 -PT=2E3452997687D12E3A8C59B9178B09E2 - -I=98 -KEY=9B8CFA0417559597C83CA348B877AC9A -CT=2E3452997687D12E3A8C59B9178B09E2 -PT=872CF16DBB7CD6EA8EBB91A60BDE0C6F - -I=99 -KEY=1CA00B69AC29437D468732EEB3A9A0F5 -CT=872CF16DBB7CD6EA8EBB91A60BDE0C6F -PT=7862C78E3B209535E6C6BE92F5EDF42B - -I=100 -KEY=64C2CCE79709D648A0418C7C464454DE -CT=7862C78E3B209535E6C6BE92F5EDF42B -PT=9185D8487C1D2DB679A52FDA2FE5FFCD - -I=101 -KEY=F54714AFEB14FBFED9E4A3A669A1AB13 -CT=9185D8487C1D2DB679A52FDA2FE5FFCD -PT=77C3AF8C81CDB1CDEF5C0429CF3E5DA4 - -I=102 -KEY=8284BB236AD94A3336B8A78FA69FF6B7 -CT=77C3AF8C81CDB1CDEF5C0429CF3E5DA4 -PT=6F36C74290EA6332E98CD23D08AEF7F9 - -I=103 -KEY=EDB27C61FA332901DF3475B2AE31014E -CT=6F36C74290EA6332E98CD23D08AEF7F9 -PT=4A7831538FA1D32E3F8631BEFD99AA73 - -I=104 -KEY=A7CA4D327592FA2FE0B2440C53A8AB3D -CT=4A7831538FA1D32E3F8631BEFD99AA73 -PT=5D2B599D9AF9054A99C25577C9286C9E - -I=105 -KEY=FAE114AFEF6BFF657970117B9A80C7A3 -CT=5D2B599D9AF9054A99C25577C9286C9E -PT=65E4088200BCC01FCEE39C6E42082FD8 - -I=106 -KEY=9F051C2DEFD73F7AB7938D15D888E87B -CT=65E4088200BCC01FCEE39C6E42082FD8 -PT=4588E0D3AABBEFE611B9576391B903E9 - -I=107 -KEY=DA8DFCFE456CD09CA62ADA764931EB92 -CT=4588E0D3AABBEFE611B9576391B903E9 -PT=A55622F833FF271DD8A8F01CF5828FCF - -I=108 -KEY=7FDBDE067693F7817E822A6ABCB3645D -CT=A55622F833FF271DD8A8F01CF5828FCF -PT=8C954010C870B2DB7FA44E1DEBFE6DE8 - -I=109 -KEY=F34E9E16BEE3455A01266477574D09B5 -CT=8C954010C870B2DB7FA44E1DEBFE6DE8 -PT=58B7BD00ED18FC81E618807DE65305B8 - -I=110 -KEY=ABF9231653FBB9DBE73EE40AB11E0C0D -CT=58B7BD00ED18FC81E618807DE65305B8 -PT=EF82E5F4879039F2A1A4CC2F2044BD14 - -I=111 -KEY=447BC6E2D46B8029469A2825915AB119 -CT=EF82E5F4879039F2A1A4CC2F2044BD14 -PT=2B6C12307F14FD50B41D8F972B19AC76 - -I=112 -KEY=6F17D4D2AB7F7D79F287A7B2BA431D6F -CT=2B6C12307F14FD50B41D8F972B19AC76 -PT=C9B6D042CE76892D17F70D4EE00A0D79 - -I=113 -KEY=A6A104906509F454E570AAFC5A491016 -CT=C9B6D042CE76892D17F70D4EE00A0D79 -PT=1B08F9293BBFC44DDCF2C1D26A9DD00B - -I=114 -KEY=BDA9FDB95EB6301939826B2E30D4C01D -CT=1B08F9293BBFC44DDCF2C1D26A9DD00B -PT=4FD353B247048FAAA728E10C691C70CA - -I=115 -KEY=F27AAE0B19B2BFB39EAA8A2259C8B0D7 -CT=4FD353B247048FAAA728E10C691C70CA -PT=0BBB6FDBC62C428B85111BC7C93AE994 - -I=116 -KEY=F9C1C1D0DF9EFD381BBB91E590F25943 -CT=0BBB6FDBC62C428B85111BC7C93AE994 -PT=9C1A213A5772DE6C15CE7406F84BED03 - -I=117 -KEY=65DBE0EA88EC23540E75E5E368B9B440 -CT=9C1A213A5772DE6C15CE7406F84BED03 -PT=AB3DE06BBDB213D64F735CA990DC373C - -I=118 -KEY=CEE60081355E30824106B94AF865837C -CT=AB3DE06BBDB213D64F735CA990DC373C -PT=6C004A1A114E90C7903AA4A0120A2B10 - -I=119 -KEY=A2E64A9B2410A045D13C1DEAEA6FA86C -CT=6C004A1A114E90C7903AA4A0120A2B10 -PT=6405A033C294E72119A8955712548121 - -I=120 -KEY=C6E3EAA8E6844764C89488BDF83B294D -CT=6405A033C294E72119A8955712548121 -PT=AE8A3BAC7279B1BC152A5AD8EBAC3EAD - -I=121 -KEY=6869D10494FDF6D8DDBED265139717E0 -CT=AE8A3BAC7279B1BC152A5AD8EBAC3EAD -PT=4ADDA9999D2BE20D8925F39699563294 - -I=122 -KEY=22B4789D09D614D5549B21F38AC12574 -CT=4ADDA9999D2BE20D8925F39699563294 -PT=BC5CA33CB2A1A580EB92946C77A63467 - -I=123 -KEY=9EE8DBA1BB77B155BF09B59FFD671113 -CT=BC5CA33CB2A1A580EB92946C77A63467 -PT=F7ABEAD301264A3E59EABA0B9606DC92 - -I=124 -KEY=69433172BA51FB6BE6E30F946B61CD81 -CT=F7ABEAD301264A3E59EABA0B9606DC92 -PT=2566114A10BE9BF19E0910486DAB6BE5 - -I=125 -KEY=4C252038AAEF609A78EA1FDC06CAA664 -CT=2566114A10BE9BF19E0910486DAB6BE5 -PT=AF72E1B179660A1B833D9D4FC8473B6B - -I=126 -KEY=E357C189D3896A81FBD78293CE8D9D0F -CT=AF72E1B179660A1B833D9D4FC8473B6B -PT=DFF968B761D8E154B74C9D568C12008E - -I=127 -KEY=3CAEA93EB2518BD54C9B1FC5429F9D81 -CT=DFF968B761D8E154B74C9D568C12008E -PT=42DF098BCB57D0D25269E29C9BC99DE6 - -I=128 -KEY=7E71A0B579065B071EF2FD59D9560067 -CT=42DF098BCB57D0D25269E29C9BC99DE6 -PT=66C34CAAEFC2009B985D1E622FC61AB4 - -I=129 -KEY=18B2EC1F96C45B9C86AFE33BF6901AD3 -CT=66C34CAAEFC2009B985D1E622FC61AB4 -PT=150C1BF943982C5EA1A6839D94F23288 - -I=130 -KEY=0DBEF7E6D55C77C2270960A66262285B -CT=150C1BF943982C5EA1A6839D94F23288 -PT=048BFBB28879206964C5F3B41264011A - -I=131 -KEY=09350C545D2557AB43CC931270062941 -CT=048BFBB28879206964C5F3B41264011A -PT=54D2DC53B87EC949F0FA0E134EE26D50 - -I=132 -KEY=5DE7D007E55B9EE2B3369D013EE44411 -CT=54D2DC53B87EC949F0FA0E134EE26D50 -PT=1BA46AFE1AE87C4F0254BF02DF3B6D37 - -I=133 -KEY=4643BAF9FFB3E2ADB1622203E1DF2926 -CT=1BA46AFE1AE87C4F0254BF02DF3B6D37 -PT=7733E74E743C9E997AC2ED36B2E89CE8 - -I=134 -KEY=31705DB78B8F7C34CBA0CF355337B5CE -CT=7733E74E743C9E997AC2ED36B2E89CE8 -PT=670AEA160FAC67ABCECA140EB8195EB5 - -I=135 -KEY=567AB7A184231B9F056ADB3BEB2EEB7B -CT=670AEA160FAC67ABCECA140EB8195EB5 -PT=7CFD74D510AC894FF5B698280386F4FF - -I=136 -KEY=2A87C374948F92D0F0DC4313E8A81F84 -CT=7CFD74D510AC894FF5B698280386F4FF -PT=10D03F32C0694E9FFF598E101998105E - -I=137 -KEY=3A57FC4654E6DC4F0F85CD03F1300FDA -CT=10D03F32C0694E9FFF598E101998105E -PT=351D6E8D1C26F36973356F6235B8ABAD - -I=138 -KEY=0F4A92CB48C02F267CB0A261C488A477 -CT=351D6E8D1C26F36973356F6235B8ABAD -PT=0DDDA7AA09FBD986C0B9EA2B018FAE4F - -I=139 -KEY=02973561413BF6A0BC09484AC5070A38 -CT=0DDDA7AA09FBD986C0B9EA2B018FAE4F -PT=31C5B68B7A08D1B7320FAB052CC3B0D1 - -I=140 -KEY=335283EA3B3327178E06E34FE9C4BAE9 -CT=31C5B68B7A08D1B7320FAB052CC3B0D1 -PT=501B8D9EE91468522029020A39484DB5 - -I=141 -KEY=63490E74D2274F45AE2FE145D08CF75C -CT=501B8D9EE91468522029020A39484DB5 -PT=2714FBA566DFD4909B8ABF29B1D5A8E8 - -I=142 -KEY=445DF5D1B4F89BD535A55E6C61595FB4 -CT=2714FBA566DFD4909B8ABF29B1D5A8E8 -PT=94485381E5088D67BC1335C89FA5C2B8 - -I=143 -KEY=D015A65051F016B289B66BA4FEFC9D0C -CT=94485381E5088D67BC1335C89FA5C2B8 -PT=BE5BEE26D6686A0EB5838C237FEF79B7 - -I=144 -KEY=6E4E487687987CBC3C35E7878113E4BB -CT=BE5BEE26D6686A0EB5838C237FEF79B7 -PT=417F73D46CFBE3C5C9AD513BCBC6D185 - -I=145 -KEY=2F313BA2EB639F79F598B6BC4AD5353E -CT=417F73D46CFBE3C5C9AD513BCBC6D185 -PT=AE3B07350B3BE7D4F9F6FE2F95622449 - -I=146 -KEY=810A3C97E05878AD0C6E4893DFB71177 -CT=AE3B07350B3BE7D4F9F6FE2F95622449 -PT=7BD4231225A7B665953AB034E24A7C7A - -I=147 -KEY=FADE1F85C5FFCEC89954F8A73DFD6D0D -CT=7BD4231225A7B665953AB034E24A7C7A -PT=3C1FBE8F3CEB1438B4A64E59FAF291CF - -I=148 -KEY=C6C1A10AF914DAF02DF2B6FEC70FFCC2 -CT=3C1FBE8F3CEB1438B4A64E59FAF291CF -PT=ACFF7F1E71AA952CF8ADB24FEE18A7BB - -I=149 -KEY=6A3EDE1488BE4FDCD55F04B129175B79 -CT=ACFF7F1E71AA952CF8ADB24FEE18A7BB -PT=3C3A6D3FD73B36317417106A92E2B43E - -I=150 -KEY=5604B32B5F8579EDA14814DBBBF5EF47 -CT=3C3A6D3FD73B36317417106A92E2B43E -PT=F34F8C719A4A74DD8F4FA4CBC520827A - -I=151 -KEY=A54B3F5AC5CF0D302E07B0107ED56D3D -CT=F34F8C719A4A74DD8F4FA4CBC520827A -PT=6A5D56FB6C7EBA15112AF8A093F3E1E1 - -I=152 -KEY=CF1669A1A9B1B7253F2D48B0ED268CDC -CT=6A5D56FB6C7EBA15112AF8A093F3E1E1 -PT=8BF39EE3B8ED0F6A6EA92319A81B10E6 - -I=153 -KEY=44E5F742115CB84F51846BA9453D9C3A -CT=8BF39EE3B8ED0F6A6EA92319A81B10E6 -PT=2BC796D320C444BBBAD466D686F460F6 - -I=154 -KEY=6F2261913198FCF4EB500D7FC3C9FCCC -CT=2BC796D320C444BBBAD466D686F460F6 -PT=2CF595F424ED50B1A146E387B128CBA3 - -I=155 -KEY=43D7F4651575AC454A16EEF872E1376F -CT=2CF595F424ED50B1A146E387B128CBA3 -PT=56F2E856045BAE66EA003A6C39205344 - -I=156 -KEY=15251C33112E0223A016D4944BC1642B -CT=56F2E856045BAE66EA003A6C39205344 -PT=31C83401BD83424BA6E94C0D6D453D9A - -I=157 -KEY=24ED2832ACAD406806FF9899268459B1 -CT=31C83401BD83424BA6E94C0D6D453D9A -PT=A687F05992CCB57CDE61AFF8878913ED - -I=158 -KEY=826AD86B3E61F514D89E3761A10D4A5C -CT=A687F05992CCB57CDE61AFF8878913ED -PT=16E771193C2473502F415C27FB101D94 - -I=159 -KEY=948DA97202458644F7DF6B465A1D57C8 -CT=16E771193C2473502F415C27FB101D94 -PT=C69CDBA29C9EDC3407C1C73A756A0B6E - -I=160 -KEY=521172D09EDB5A70F01EAC7C2F775CA6 -CT=C69CDBA29C9EDC3407C1C73A756A0B6E -PT=566D82281F48E3217F3852115CF2E944 - -I=161 -KEY=047CF0F88193B9518F26FE6D7385B5E2 -CT=566D82281F48E3217F3852115CF2E944 -PT=B3FEBC8F8F0F0B652C4358BCC9BF54DF - -I=162 -KEY=B7824C770E9CB234A365A6D1BA3AE13D -CT=B3FEBC8F8F0F0B652C4358BCC9BF54DF -PT=BBB84877094B3EB86203D17C92CF5168 - -I=163 -KEY=0C3A040007D78C8CC16677AD28F5B055 -CT=BBB84877094B3EB86203D17C92CF5168 -PT=2C45E5A3F8C564862DA4D8AD428D3E67 - -I=164 -KEY=207FE1A3FF12E80AECC2AF006A788E32 -CT=2C45E5A3F8C564862DA4D8AD428D3E67 -PT=10ADC2AF56600D95AD8BB579EF5170C9 - -I=165 -KEY=30D2230CA972E59F41491A798529FEFB -CT=10ADC2AF56600D95AD8BB579EF5170C9 -PT=1854BB8AC568F3599153BE1AC60BA78D - -I=166 -KEY=288698866C1A16C6D01AA46343225976 -CT=1854BB8AC568F3599153BE1AC60BA78D -PT=E641765C80D8812A1A0F4606C639642E - -I=167 -KEY=CEC7EEDAECC297ECCA15E265851B3D58 -CT=E641765C80D8812A1A0F4606C639642E -PT=317AC70CEAA87AE66A15C22BD5E534E5 - -I=168 -KEY=FFBD29D6066AED0AA000204E50FE09BD -CT=317AC70CEAA87AE66A15C22BD5E534E5 -PT=BFFB8D7B3D9F54727944ABC3F6474362 - -I=169 -KEY=4046A4AD3BF5B978D9448B8DA6B94ADF -CT=BFFB8D7B3D9F54727944ABC3F6474362 -PT=060765D1D9D289B862DA274CFDB4D7A0 - -I=170 -KEY=4641C17CE22730C0BB9EACC15B0D9D7F -CT=060765D1D9D289B862DA274CFDB4D7A0 -PT=FBAFA4C1D6CEF2A45E9E084311FDF858 - -I=171 -KEY=BDEE65BD34E9C264E500A4824AF06527 -CT=FBAFA4C1D6CEF2A45E9E084311FDF858 -PT=F7F36BFDA77362B470B0B074241C58E9 - -I=172 -KEY=4A1D0E40939AA0D095B014F66EEC3DCE -CT=F7F36BFDA77362B470B0B074241C58E9 -PT=2FC236EDCD573A6DCFBA7930E9CF4698 - -I=173 -KEY=65DF38AD5ECD9ABD5A0A6DC687237B56 -CT=2FC236EDCD573A6DCFBA7930E9CF4698 -PT=949A9994DC976595BFACA5F31116A165 - -I=174 -KEY=F145A139825AFF28E5A6C8359635DA33 -CT=949A9994DC976595BFACA5F31116A165 -PT=19373CA9D519BF83EAA4C17E1EE8225C - -I=175 -KEY=E8729D90574340AB0F02094B88DDF86F -CT=19373CA9D519BF83EAA4C17E1EE8225C -PT=685C783918997A7572B0A09315F1F2DB - -I=176 -KEY=802EE5A94FDA3ADE7DB2A9D89D2C0AB4 -CT=685C783918997A7572B0A09315F1F2DB -PT=FC0CB1792EADB7E8DECB021A435DE1E7 - -I=177 -KEY=7C2254D061778D36A379ABC2DE71EB53 -CT=FC0CB1792EADB7E8DECB021A435DE1E7 -PT=797C5E5B4F3B38E7C72FF7AAAB270E86 - -I=178 -KEY=055E0A8B2E4CB5D164565C687556E5D5 -CT=797C5E5B4F3B38E7C72FF7AAAB270E86 -PT=A5AB675262EA186F777681647B6AA1F9 - -I=179 -KEY=A0F56DD94CA6ADBE1320DD0C0E3C442C -CT=A5AB675262EA186F777681647B6AA1F9 -PT=08CDF6AF55BBB247D0DE1A69CD041A78 - -I=180 -KEY=A8389B76191D1FF9C3FEC765C3385E54 -CT=08CDF6AF55BBB247D0DE1A69CD041A78 -PT=DED1F3C30AB5EC3455C7B6A756E5FF03 - -I=181 -KEY=76E968B513A8F3CD963971C295DDA157 -CT=DED1F3C30AB5EC3455C7B6A756E5FF03 -PT=C759A17B354D668D1BA5541D16241D9F - -I=182 -KEY=B1B0C9CE26E595408D9C25DF83F9BCC8 -CT=C759A17B354D668D1BA5541D16241D9F -PT=97E011FE7B327B8292270D4CD18BD9AC - -I=183 -KEY=2650D8305DD7EEC21FBB289352726564 -CT=97E011FE7B327B8292270D4CD18BD9AC -PT=9F004E4282F790C06681F16262EF78CF - -I=184 -KEY=B9509672DF207E02793AD9F1309D1DAB -CT=9F004E4282F790C06681F16262EF78CF -PT=6B34AA95EFD874915DAE275CE34A04B9 - -I=185 -KEY=D2643CE730F80A932494FEADD3D71912 -CT=6B34AA95EFD874915DAE275CE34A04B9 -PT=96966D118C50B67849F93B109492B5EB - -I=186 -KEY=44F251F6BCA8BCEB6D6DC5BD4745ACF9 -CT=96966D118C50B67849F93B109492B5EB -PT=2CA6F85E4F29BE884392A0FEDD08D5A7 - -I=187 -KEY=6854A9A8F38102632EFF65439A4D795E -CT=2CA6F85E4F29BE884392A0FEDD08D5A7 -PT=21B71D4F23DDC002CAAFB7426009BD27 - -I=188 -KEY=49E3B4E7D05CC261E450D201FA44C479 -CT=21B71D4F23DDC002CAAFB7426009BD27 -PT=BF059F1945E9E51B22B308849757B475 - -I=189 -KEY=F6E62BFE95B5277AC6E3DA856D13700C -CT=BF059F1945E9E51B22B308849757B475 -PT=434F4E756A3178472E12B80A1C2ED83E - -I=190 -KEY=B5A9658BFF845F3DE8F1628F713DA832 -CT=434F4E756A3178472E12B80A1C2ED83E -PT=37DB2B0D5967700CDE348FB60661A6D4 - -I=191 -KEY=82724E86A6E32F3136C5ED39775C0EE6 -CT=37DB2B0D5967700CDE348FB60661A6D4 -PT=D31C5130F8F217AC0014B5F37B9BB86B - -I=192 -KEY=516E1FB65E11389D36D158CA0CC7B68D -CT=D31C5130F8F217AC0014B5F37B9BB86B -PT=3B8CD15967907F9C617697EBEF395B16 - -I=193 -KEY=6AE2CEEF3981470157A7CF21E3FEED9B -CT=3B8CD15967907F9C617697EBEF395B16 -PT=AF17B5E5236BF46576379CD4E5AF8A34 - -I=194 -KEY=C5F57B0A1AEAB364219053F5065167AF -CT=AF17B5E5236BF46576379CD4E5AF8A34 -PT=88286D6FB237181EC239C1D70C0D6675 - -I=195 -KEY=4DDD1665A8DDAB7AE3A992220A5C01DA -CT=88286D6FB237181EC239C1D70C0D6675 -PT=8A5207BB1283343B3692045183451A7D - -I=196 -KEY=C78F11DEBA5E9F41D53B967389191BA7 -CT=8A5207BB1283343B3692045183451A7D -PT=53C12FAC4B0185AA0CE067FC67EC5B9C - -I=197 -KEY=944E3E72F15F1AEBD9DBF18FEEF5403B -CT=53C12FAC4B0185AA0CE067FC67EC5B9C -PT=BBA2BB9B1CA48D2E97E0C39E500EB9C0 - -I=198 -KEY=2FEC85E9EDFB97C54E3B3211BEFBF9FB -CT=BBA2BB9B1CA48D2E97E0C39E500EB9C0 -PT=8BA2341064B7B5184CD7E7A40FA0358E - -I=199 -KEY=A44EB1F9894C22DD02ECD5B5B15BCC75 -CT=8BA2341064B7B5184CD7E7A40FA0358E -PT=97121EEEA68CC6200FBC0B311849E625 - -I=200 -KEY=335CAF172FC0E4FD0D50DE84A9122A50 -CT=97121EEEA68CC6200FBC0B311849E625 -PT=027FA370A9412B342043A15F19294961 - -I=201 -KEY=31230C678681CFC92D137FDBB03B6331 -CT=027FA370A9412B342043A15F19294961 -PT=72CFBE6BA03AB28A53A6727717D1199A - -I=202 -KEY=43ECB20C26BB7D437EB50DACA7EA7AAB -CT=72CFBE6BA03AB28A53A6727717D1199A -PT=7A15B1B4B4ED35F9C208500FE7C4C1C7 - -I=203 -KEY=39F903B8925648BABCBD5DA3402EBB6C -CT=7A15B1B4B4ED35F9C208500FE7C4C1C7 -PT=AF46496D09254FAB5F381E93EEB4FBB0 - -I=204 -KEY=96BF4AD59B730711E3854330AE9A40DC -CT=AF46496D09254FAB5F381E93EEB4FBB0 -PT=ADA064E0F4324E8B0C062F6E33C7D016 - -I=205 -KEY=3B1F2E356F41499AEF836C5E9D5D90CA -CT=ADA064E0F4324E8B0C062F6E33C7D016 -PT=7723A61733BD5BBFAB8C559ED379B8B5 - -I=206 -KEY=4C3C88225CFC1225440F39C04E24287F -CT=7723A61733BD5BBFAB8C559ED379B8B5 -PT=5D210E8F35DD863316E89FADA70E8392 - -I=207 -KEY=111D86AD6921941652E7A66DE92AABED -CT=5D210E8F35DD863316E89FADA70E8392 -PT=92B1D20E7D87787950990052DE2ABA4F - -I=208 -KEY=83AC54A314A6EC6F027EA63F370011A2 -CT=92B1D20E7D87787950990052DE2ABA4F -PT=178E494D23AA6AC13AC180727C47FD2A - -I=209 -KEY=94221DEE370C86AE38BF264D4B47EC88 -CT=178E494D23AA6AC13AC180727C47FD2A -PT=CB9C10817C059D5BE4F123576FF459C6 - -I=210 -KEY=5FBE0D6F4B091BF5DC4E051A24B3B54E -CT=CB9C10817C059D5BE4F123576FF459C6 -PT=4934C56CC7BAF0A8DEBB62CFB2B0DEBF - -I=211 -KEY=168AC8038CB3EB5D02F567D596036BF1 -CT=4934C56CC7BAF0A8DEBB62CFB2B0DEBF -PT=F6F2A4B90B357D88401702C968D9EC02 - -I=212 -KEY=E0786CBA878696D542E2651CFEDA87F3 -CT=F6F2A4B90B357D88401702C968D9EC02 -PT=06A35CAD7B36751BEE345C33112EB6D1 - -I=213 -KEY=E6DB3017FCB0E3CEACD6392FEFF43122 -CT=06A35CAD7B36751BEE345C33112EB6D1 -PT=3244CDE10DF48795DA702CD8C2F4CABD - -I=214 -KEY=D49FFDF6F144645B76A615F72D00FB9F -CT=3244CDE10DF48795DA702CD8C2F4CABD -PT=47C06F5BEA8C3503512E0E200966C546 - -I=215 -KEY=935F92AD1BC8515827881BD724663ED9 -CT=47C06F5BEA8C3503512E0E200966C546 -PT=68A077D25CBEA7F76B88D8C6A414D0CE - -I=216 -KEY=FBFFE57F4776F6AF4C00C3118072EE17 -CT=68A077D25CBEA7F76B88D8C6A414D0CE -PT=DDF110C2C79B46C5132CCEF654280D7E - -I=217 -KEY=260EF5BD80EDB06A5F2C0DE7D45AE369 -CT=DDF110C2C79B46C5132CCEF654280D7E -PT=0AB610A0082813076D052011C12DC924 - -I=218 -KEY=2CB8E51D88C5A36D32292DF615772A4D -CT=0AB610A0082813076D052011C12DC924 -PT=8C42F49EDAE1BD6B631E74B68B1B8444 - -I=219 -KEY=A0FA118352241E06513759409E6CAE09 -CT=8C42F49EDAE1BD6B631E74B68B1B8444 -PT=B5A5B6E50B3A066D16DF883F353019FE - -I=220 -KEY=155FA766591E186B47E8D17FAB5CB7F7 -CT=B5A5B6E50B3A066D16DF883F353019FE -PT=70CFA25AFC9919937E2FC90900F0B398 - -I=221 -KEY=6590053CA58701F839C71876ABAC046F -CT=70CFA25AFC9919937E2FC90900F0B398 -PT=B927A5911AE33DEAB619DAFEE22CD0DF - -I=222 -KEY=DCB7A0ADBF643C128FDEC2884980D4B0 -CT=B927A5911AE33DEAB619DAFEE22CD0DF -PT=10C548438C5B976EDD624129B2102D7A - -I=223 -KEY=CC72E8EE333FAB7C52BC83A1FB90F9CA -CT=10C548438C5B976EDD624129B2102D7A -PT=4549E45DA2F8FE82972DC7DF3548CAFF - -I=224 -KEY=893B0CB391C755FEC591447ECED83335 -CT=4549E45DA2F8FE82972DC7DF3548CAFF -PT=2B85505E64089FEB6B5763011E778C96 - -I=225 -KEY=A2BE5CEDF5CFCA15AEC6277FD0AFBFA3 -CT=2B85505E64089FEB6B5763011E778C96 -PT=4B157930F9A6EBE3D9D6AC9FADDEB35C - -I=226 -KEY=E9AB25DD0C6921F677108BE07D710CFF -CT=4B157930F9A6EBE3D9D6AC9FADDEB35C -PT=12341C0FE9EB6757BFFCC4BC1A8F2585 - -I=227 -KEY=FB9F39D2E58246A1C8EC4F5C67FE297A -CT=12341C0FE9EB6757BFFCC4BC1A8F2585 -PT=5422D62D794B02FC04BE01198EE23ACE - -I=228 -KEY=AFBDEFFF9CC9445DCC524E45E91C13B4 -CT=5422D62D794B02FC04BE01198EE23ACE -PT=42D43022FD6DB571BCB2FDE653C9068C - -I=229 -KEY=ED69DFDD61A4F12C70E0B3A3BAD51538 -CT=42D43022FD6DB571BCB2FDE653C9068C -PT=80BD3AAED5D519B75D22BF060EF1DFC6 - -I=230 -KEY=6DD4E573B471E89B2DC20CA5B424CAFE -CT=80BD3AAED5D519B75D22BF060EF1DFC6 -PT=B72973F9016A348CDDCCFFC2DD291B5A - -I=231 -KEY=DAFD968AB51BDC17F00EF367690DD1A4 -CT=B72973F9016A348CDDCCFFC2DD291B5A -PT=5692E61C86A7B2C043ABBED712390361 - -I=232 -KEY=8C6F709633BC6ED7B3A54DB07B34D2C5 -CT=5692E61C86A7B2C043ABBED712390361 -PT=75138737269AA27855C2CFD2DCEDEFC4 - -I=233 -KEY=F97CF7A11526CCAFE6678262A7D93D01 -CT=75138737269AA27855C2CFD2DCEDEFC4 -PT=A022AA28CECC4BB5EB28BA5B7828AB6E - -I=234 -KEY=595E5D89DBEA871A0D4F3839DFF1966F -CT=A022AA28CECC4BB5EB28BA5B7828AB6E -PT=17B0BF87EE02AA44705B1B1B4DF7D3F4 - -I=235 -KEY=4EEEE20E35E82D5E7D1423229206459B -CT=17B0BF87EE02AA44705B1B1B4DF7D3F4 -PT=095A5A041C43DCFEB5D0DF3E7659344A - -I=236 -KEY=47B4B80A29ABF1A0C8C4FC1CE45F71D1 -CT=095A5A041C43DCFEB5D0DF3E7659344A -PT=9DCE0D1C572509F3367EE952B89044E5 - -I=237 -KEY=DA7AB5167E8EF853FEBA154E5CCF3534 -CT=9DCE0D1C572509F3367EE952B89044E5 -PT=E6075BCC82399A91E52034EA2F197058 - -I=238 -KEY=3C7DEEDAFCB762C21B9A21A473D6456C -CT=E6075BCC82399A91E52034EA2F197058 -PT=431D243CEE96B424B0FA4FEC5E707036 - -I=239 -KEY=7F60CAE61221D6E6AB606E482DA6355A -CT=431D243CEE96B424B0FA4FEC5E707036 -PT=5EF70106A2EA454CA9405A8AA1B54EF0 - -I=240 -KEY=2197CBE0B0CB93AA022034C28C137BAA -CT=5EF70106A2EA454CA9405A8AA1B54EF0 -PT=09B003CB7E2ADDD587A2ABCDD03D234F - -I=241 -KEY=2827C82BCEE14E7F85829F0F5C2E58E5 -CT=09B003CB7E2ADDD587A2ABCDD03D234F -PT=3647FAC6EF758113DC768E7737098DE9 - -I=242 -KEY=1E6032ED2194CF6C59F411786B27D50C -CT=3647FAC6EF758113DC768E7737098DE9 -PT=C043BD96A88492C85431B72C708C3C60 - -I=243 -KEY=DE238F7B89105DA40DC5A6541BABE96C -CT=C043BD96A88492C85431B72C708C3C60 -PT=299A25142A6B5D334158D359DD9CD574 - -I=244 -KEY=F7B9AA6FA37B00974C9D750DC6373C18 -CT=299A25142A6B5D334158D359DD9CD574 -PT=21E56C2202C8D6F81EDC63A8A1EA4B6A - -I=245 -KEY=D65CC64DA1B3D66F524116A567DD7772 -CT=21E56C2202C8D6F81EDC63A8A1EA4B6A -PT=FD3565957E3845065B7AEF27A900FDD5 - -I=246 -KEY=2B69A3D8DF8B9369093BF982CEDD8AA7 -CT=FD3565957E3845065B7AEF27A900FDD5 -PT=A4DB9120D1ED0419342AFC2CBF114647 - -I=247 -KEY=8FB232F80E6697703D1105AE71CCCCE0 -CT=A4DB9120D1ED0419342AFC2CBF114647 -PT=27FDDEA1E746BD217CFB4CD7A511BACE - -I=248 -KEY=A84FEC59E9202A5141EA4979D4DD762E -CT=27FDDEA1E746BD217CFB4CD7A511BACE -PT=6A9189FD46E47B22F151A213D023442B - -I=249 -KEY=C2DE65A4AFC45173B0BBEB6A04FE3205 -CT=6A9189FD46E47B22F151A213D023442B -PT=1C729701404C76D5D7A156C39CF52542 - -I=250 -KEY=DEACF2A5EF8827A6671ABDA9980B1747 -CT=1C729701404C76D5D7A156C39CF52542 -PT=6F97CB4564E0783DFE962DCB13FEDF72 - -I=251 -KEY=B13B39E08B685F9B998C90628BF5C835 -CT=6F97CB4564E0783DFE962DCB13FEDF72 -PT=F818140A280299B182CDA37CBE9B27AB - -I=252 -KEY=49232DEAA36AC62A1B41331E356EEF9E -CT=F818140A280299B182CDA37CBE9B27AB -PT=20E9F2BE7017C2945005FD8A420A5B7D - -I=253 -KEY=69CADF54D37D04BE4B44CE947764B4E3 -CT=20E9F2BE7017C2945005FD8A420A5B7D -PT=60BB97C634161EF6A36056193B6EDDB0 - -I=254 -KEY=09714892E76B1A48E824988D4C0A6953 -CT=60BB97C634161EF6A36056193B6EDDB0 -PT=E4B9777B7390EF430A93FF7DD0B68CD4 - -I=255 -KEY=EDC83FE994FBF50BE2B767F09CBCE587 -CT=E4B9777B7390EF430A93FF7DD0B68CD4 -PT=E5E3BD960CF15BBDB8A6C08711A884CF - -I=256 -KEY=082B827F980AAEB65A11A7778D146148 -CT=E5E3BD960CF15BBDB8A6C08711A884CF -PT=71A6AEFD0181DCE69A116585044C7F66 - -I=257 -KEY=798D2C82998B7250C000C2F289581E2E -CT=71A6AEFD0181DCE69A116585044C7F66 -PT=8E9C1CFFDB8972617D74DA0E9ED065D1 - -I=258 -KEY=F711307D42020031BD7418FC17887BFF -CT=8E9C1CFFDB8972617D74DA0E9ED065D1 -PT=CE7882AB901A199910FC463A4D1D626A - -I=259 -KEY=3969B2D6D21819A8AD885EC65A951995 -CT=CE7882AB901A199910FC463A4D1D626A -PT=2334546032E850D0029CB1AD6AFCEA7A - -I=260 -KEY=1A5DE6B6E0F04978AF14EF6B3069F3EF -CT=2334546032E850D0029CB1AD6AFCEA7A -PT=88B4CF0D4AB7BD00BE98DA1626063A69 - -I=261 -KEY=92E929BBAA47F478118C357D166FC986 -CT=88B4CF0D4AB7BD00BE98DA1626063A69 -PT=5A7FF831F28E5EC4A11DA524E2323925 - -I=262 -KEY=C896D18A58C9AABCB0919059F45DF0A3 -CT=5A7FF831F28E5EC4A11DA524E2323925 -PT=DF000551EF9BBD914969BD1B353BDC8C - -I=263 -KEY=1796D4DBB752172DF9F82D42C1662C2F -CT=DF000551EF9BBD914969BD1B353BDC8C -PT=1EECBC47697208193C354E28D23E8CE9 - -I=264 -KEY=097A689CDE201F34C5CD636A1358A0C6 -CT=1EECBC47697208193C354E28D23E8CE9 -PT=DF85CD4B3F821A7411F9F5D1FDF9DB85 - -I=265 -KEY=D6FFA5D7E1A20540D43496BBEEA17B43 -CT=DF85CD4B3F821A7411F9F5D1FDF9DB85 -PT=038E765F1910D8C0C1251254605218F2 - -I=266 -KEY=D571D388F8B2DD80151184EF8EF363B1 -CT=038E765F1910D8C0C1251254605218F2 -PT=FBA8FE850294EEAEE75F56C974BF7DE4 - -I=267 -KEY=2ED92D0DFA26332EF24ED226FA4C1E55 -CT=FBA8FE850294EEAEE75F56C974BF7DE4 -PT=47F9D6F7A3E2A1BFA360EA1BA8B0450E - -I=268 -KEY=6920FBFA59C49291512E383D52FC5B5B -CT=47F9D6F7A3E2A1BFA360EA1BA8B0450E -PT=FD6F4A4825DE5E776BFD569223CB5A2C - -I=269 -KEY=944FB1B27C1ACCE63AD36EAF71370177 -CT=FD6F4A4825DE5E776BFD569223CB5A2C -PT=10430ED7EE0FDB8FBC348F8E08286622 - -I=270 -KEY=840CBF659215176986E7E121791F6755 -CT=10430ED7EE0FDB8FBC348F8E08286622 -PT=4B75D5C573185303B01EB649884758B1 - -I=271 -KEY=CF796AA0E10D446A36F95768F1583FE4 -CT=4B75D5C573185303B01EB649884758B1 -PT=85CCA4271A941517D55D05B4F29527C3 - -I=272 -KEY=4AB5CE87FB99517DE3A452DC03CD1827 -CT=85CCA4271A941517D55D05B4F29527C3 -PT=615EA2D44C52D639B6AD05D621B4A1A6 - -I=273 -KEY=2BEB6C53B7CB87445509570A2279B981 -CT=615EA2D44C52D639B6AD05D621B4A1A6 -PT=1DFD1E93D34ABFE45BA6BF6BD3FBF30E - -I=274 -KEY=361672C0648138A00EAFE861F1824A8F -CT=1DFD1E93D34ABFE45BA6BF6BD3FBF30E -PT=B65C3F09FFFF752DEE2F8F2D441A51CA - -I=275 -KEY=804A4DC99B7E4D8DE080674CB5981B45 -CT=B65C3F09FFFF752DEE2F8F2D441A51CA -PT=3B36D6FD4F7ACAD4681FF4398AC7AFB3 - -I=276 -KEY=BB7C9B34D4048759889F93753F5FB4F6 -CT=3B36D6FD4F7ACAD4681FF4398AC7AFB3 -PT=F3CDEFABE450D887CD585C280BB22367 - -I=277 -KEY=48B1749F30545FDE45C7CF5D34ED9791 -CT=F3CDEFABE450D887CD585C280BB22367 -PT=ECC49251BAD79981CA1B1F683A843531 - -I=278 -KEY=A475E6CE8A83C65F8FDCD0350E69A2A0 -CT=ECC49251BAD79981CA1B1F683A843531 -PT=8BE43F0A30663108513A0E5F49F9152C - -I=279 -KEY=2F91D9C4BAE5F757DEE6DE6A4790B78C -CT=8BE43F0A30663108513A0E5F49F9152C -PT=DB3D559FCEBE0FAF3B218161BA6B3F07 - -I=280 -KEY=F4AC8C5B745BF8F8E5C75F0BFDFB888B -CT=DB3D559FCEBE0FAF3B218161BA6B3F07 -PT=8F0C3AE11B03433C07CABD26BF47A430 - -I=281 -KEY=7BA0B6BA6F58BBC4E20DE22D42BC2CBB -CT=8F0C3AE11B03433C07CABD26BF47A430 -PT=73578DC3464CE3EE0314B206E1E9504C - -I=282 -KEY=08F73B792914582AE119502BA3557CF7 -CT=73578DC3464CE3EE0314B206E1E9504C -PT=60DA2C12B296804C608348A54EE1C60D - -I=283 -KEY=682D176B9B82D866819A188EEDB4BAFA -CT=60DA2C12B296804C608348A54EE1C60D -PT=A960934724BDC61E5429E59856FC1902 - -I=284 -KEY=C14D842CBF3F1E78D5B3FD16BB48A3F8 -CT=A960934724BDC61E5429E59856FC1902 -PT=6B7E71535C6B7B09BDF19AF79CD58C95 - -I=285 -KEY=AA33F57FE3546571684267E1279D2F6D -CT=6B7E71535C6B7B09BDF19AF79CD58C95 -PT=B95E0126EF320F1E6F288366DB7F2773 - -I=286 -KEY=136DF4590C666A6F076AE487FCE2081E -CT=B95E0126EF320F1E6F288366DB7F2773 -PT=6403B99D6FE0F85128FDD1F05B81AA6E - -I=287 -KEY=776E4DC46386923E2F973577A763A270 -CT=6403B99D6FE0F85128FDD1F05B81AA6E -PT=9EBA25F2D6CE5817F4317F3AFE6421E7 - -I=288 -KEY=E9D46836B548CA29DBA64A4D59078397 -CT=9EBA25F2D6CE5817F4317F3AFE6421E7 -PT=5E77AAE8A3C5EEAF4732BB310DAC3771 - -I=289 -KEY=B7A3C2DE168D24869C94F17C54ABB4E6 -CT=5E77AAE8A3C5EEAF4732BB310DAC3771 -PT=5FD00675371300B60C30EFCEE0171080 - -I=290 -KEY=E873C4AB219E243090A41EB2B4BCA466 -CT=5FD00675371300B60C30EFCEE0171080 -PT=482D701DBCE3AE108F65836C12A41C2C - -I=291 -KEY=A05EB4B69D7D8A201FC19DDEA618B84A -CT=482D701DBCE3AE108F65836C12A41C2C -PT=2966D81642542925891D8F7409051E4A - -I=292 -KEY=89386CA0DF29A30596DC12AAAF1DA600 -CT=2966D81642542925891D8F7409051E4A -PT=2FD6F3DB9DD1DEDED9F32D1806AE69D6 - -I=293 -KEY=A6EE9F7B42F87DDB4F2F3FB2A9B3CFD6 -CT=2FD6F3DB9DD1DEDED9F32D1806AE69D6 -PT=9B59277165B792790E29ADB53ADE60DB - -I=294 -KEY=3DB7B80A274FEFA241069207936DAF0D -CT=9B59277165B792790E29ADB53ADE60DB -PT=A4873C5246044200B56C25FFADAB15D6 - -I=295 -KEY=99308458614BADA2F46AB7F83EC6BADB -CT=A4873C5246044200B56C25FFADAB15D6 -PT=9E2BBBD65649EB2A0CD974AD32BF382F - -I=296 -KEY=071B3F8E37024688F8B3C3550C7982F4 -CT=9E2BBBD65649EB2A0CD974AD32BF382F -PT=F83F4408675892DADA4833A43F22FFC8 - -I=297 -KEY=FF247B86505AD45222FBF0F1335B7D3C -CT=F83F4408675892DADA4833A43F22FFC8 -PT=19C337CCBF8D06DC68D9A16DB294EF44 - -I=298 -KEY=E6E74C4AEFD7D28E4A22519C81CF9278 -CT=19C337CCBF8D06DC68D9A16DB294EF44 -PT=433578E0901A4F4B134E6DCF68249FC7 - -I=299 -KEY=A5D234AA7FCD9DC5596C3C53E9EB0DBF -CT=433578E0901A4F4B134E6DCF68249FC7 -PT=7F317CB0B3279C894B8A08289797FFF1 - -I=300 -KEY=DAE3481ACCEA014C12E6347B7E7CF24E -CT=7F317CB0B3279C894B8A08289797FFF1 -PT=AFFB4CA21A2A36FD24BB18C5AED17789 - -I=301 -KEY=751804B8D6C037B1365D2CBED0AD85C7 -CT=AFFB4CA21A2A36FD24BB18C5AED17789 -PT=394DA5EC353A68B844D1BC24A468DA5C - -I=302 -KEY=4C55A154E3FA5F09728C909A74C55F9B -CT=394DA5EC353A68B844D1BC24A468DA5C -PT=C649C174B98A06351F26C117D14FF290 - -I=303 -KEY=8A1C60205A70593C6DAA518DA58AAD0B -CT=C649C174B98A06351F26C117D14FF290 -PT=2E122AA7C90B57304A80C19480627DD7 - -I=304 -KEY=A40E4A87937B0E0C272A901925E8D0DC -CT=2E122AA7C90B57304A80C19480627DD7 -PT=9841ADE6A65834CE89959EFE8F059ED6 - -I=305 -KEY=3C4FE76135233AC2AEBF0EE7AAED4E0A -CT=9841ADE6A65834CE89959EFE8F059ED6 -PT=6B70D74762A4BEFBD15B9EC6835CB69B - -I=306 -KEY=573F3026578784397FE4902129B1F891 -CT=6B70D74762A4BEFBD15B9EC6835CB69B -PT=2E8B5DEF53E2294C0C953A9B8BD9399D - -I=307 -KEY=79B46DC90465AD757371AABAA268C10C -CT=2E8B5DEF53E2294C0C953A9B8BD9399D -PT=D32D00F78BA00F6CEA792598B89779E4 - -I=308 -KEY=AA996D3E8FC5A21999088F221AFFB8E8 -CT=D32D00F78BA00F6CEA792598B89779E4 -PT=7059DCC6CB8D295B95F2978F25927B31 - -I=309 -KEY=DAC0B1F844488B420CFA18AD3F6DC3D9 -CT=7059DCC6CB8D295B95F2978F25927B31 -PT=833A1AFA7DC4CAF54F5B36981A98D7E3 - -I=310 -KEY=59FAAB02398C41B743A12E3525F5143A -CT=833A1AFA7DC4CAF54F5B36981A98D7E3 -PT=4CC5A526400B493AAA28909A2F4932BF - -I=311 -KEY=153F0E247987088DE989BEAF0ABC2685 -CT=4CC5A526400B493AAA28909A2F4932BF -PT=D7134DEE2967104D161876A0802B3727 - -I=312 -KEY=C22C43CA50E018C0FF91C80F8A9711A2 -CT=D7134DEE2967104D161876A0802B3727 -PT=C45DB7BC52D7A0D53399B91EFB686D32 - -I=313 -KEY=0671F4760237B815CC08711171FF7C90 -CT=C45DB7BC52D7A0D53399B91EFB686D32 -PT=2F49EA2A8D7F44909BCF41C3640FD0AB - -I=314 -KEY=29381E5C8F48FC8557C730D215F0AC3B -CT=2F49EA2A8D7F44909BCF41C3640FD0AB -PT=6D416059758F4AC555A05D83E9CFC4DE - -I=315 -KEY=44797E05FAC7B64002676D51FC3F68E5 -CT=6D416059758F4AC555A05D83E9CFC4DE -PT=2721015DDF85EC87ED8480A87705CD37 - -I=316 -KEY=63587F5825425AC7EFE3EDF98B3AA5D2 -CT=2721015DDF85EC87ED8480A87705CD37 -PT=3B045F5DD5ADC6E5D341E2E6A5B919D3 - -I=317 -KEY=585C2005F0EF9C223CA20F1F2E83BC01 -CT=3B045F5DD5ADC6E5D341E2E6A5B919D3 -PT=85DA9719FF16899B343BE56FDF9F86BF - -I=318 -KEY=DD86B71C0FF915B90899EA70F11C3ABE -CT=85DA9719FF16899B343BE56FDF9F86BF -PT=67FD32AC2783C381E77AE0BB8ACEECCD - -I=319 -KEY=BA7B85B0287AD638EFE30ACB7BD2D673 -CT=67FD32AC2783C381E77AE0BB8ACEECCD -PT=D8BEC715849E6A2A164F0139B8EC038E - -I=320 -KEY=62C542A5ACE4BC12F9AC0BF2C33ED5FD -CT=D8BEC715849E6A2A164F0139B8EC038E -PT=6ECA9375A207148E36203C8BD885A520 - -I=321 -KEY=0C0FD1D00EE3A89CCF8C37791BBB70DD -CT=6ECA9375A207148E36203C8BD885A520 -PT=A96877A8369B7086EF76D8281C066068 - -I=322 -KEY=A567A6783878D81A20FAEF5107BD10B5 -CT=A96877A8369B7086EF76D8281C066068 -PT=2D6DDF2C136F5ACDC12D33D52ECD6397 - -I=323 -KEY=880A79542B1782D7E1D7DC8429707322 -CT=2D6DDF2C136F5ACDC12D33D52ECD6397 -PT=E2F3EFF780EEDAD7B820CF57F946AB21 - -I=324 -KEY=6AF996A3ABF9580059F713D3D036D803 -CT=E2F3EFF780EEDAD7B820CF57F946AB21 -PT=D083829AB624DC46BF55F15C2ACA2CDC - -I=325 -KEY=BA7A14391DDD8446E6A2E28FFAFCF4DF -CT=D083829AB624DC46BF55F15C2ACA2CDC -PT=637A1328711A701F011B0D66953A11FC - -I=326 -KEY=D90007116CC7F459E7B9EFE96FC6E523 -CT=637A1328711A701F011B0D66953A11FC -PT=9230F9E8C4AA7D697641B4E800AECE8B - -I=327 -KEY=4B30FEF9A86D893091F85B016F682BA8 -CT=9230F9E8C4AA7D697641B4E800AECE8B -PT=CABC2F3EBCB87AEF4550060FB6F95C7D - -I=328 -KEY=818CD1C714D5F3DFD4A85D0ED99177D5 -CT=CABC2F3EBCB87AEF4550060FB6F95C7D -PT=25C93DA609BEDFD48D88B7E005EA9D4D - -I=329 -KEY=A445EC611D6B2C0B5920EAEEDC7BEA98 -CT=25C93DA609BEDFD48D88B7E005EA9D4D -PT=E445C1B43DC6AA0D47C766675676CA29 - -I=330 -KEY=40002DD520AD86061EE78C898A0D20B1 -CT=E445C1B43DC6AA0D47C766675676CA29 -PT=3F8A99E9D556F0CE0B0F3B4FE89A7C15 - -I=331 -KEY=7F8AB43CF5FB76C815E8B7C662975CA4 -CT=3F8A99E9D556F0CE0B0F3B4FE89A7C15 -PT=BE04197CADBDBC917AB288D85C554D4A - -I=332 -KEY=C18EAD405846CA596F5A3F1E3EC211EE -CT=BE04197CADBDBC917AB288D85C554D4A -PT=2CF8FE59EED67AF15BD6C09C8DA37882 - -I=333 -KEY=ED765319B690B0A8348CFF82B361696C -CT=2CF8FE59EED67AF15BD6C09C8DA37882 -PT=FF8CBF98D0B15198ACDC53D7247511C5 - -I=334 -KEY=12FAEC816621E1309850AC55971478A9 -CT=FF8CBF98D0B15198ACDC53D7247511C5 -PT=27794678855BAE2BDE7EB75487813E28 - -I=335 -KEY=3583AAF9E37A4F1B462E1B0110954681 -CT=27794678855BAE2BDE7EB75487813E28 -PT=5681B2CECDE71663A864D0288607D86B - -I=336 -KEY=630218372E9D5978EE4ACB2996929EEA -CT=5681B2CECDE71663A864D0288607D86B -PT=8936EB6E65F2CD2B3AFD1310B5B2D6C8 - -I=337 -KEY=EA34F3594B6F9453D4B7D83923204822 -CT=8936EB6E65F2CD2B3AFD1310B5B2D6C8 -PT=16045490148187B05CC46B80099A4530 - -I=338 -KEY=FC30A7C95FEE13E38873B3B92ABA0D12 -CT=16045490148187B05CC46B80099A4530 -PT=FE909FFB1D490B028867288FE682EEE9 - -I=339 -KEY=02A0383242A718E100149B36CC38E3FB -CT=FE909FFB1D490B028867288FE682EEE9 -PT=7B3E5C0017089A7842866ABA6364FFEA - -I=340 -KEY=799E643255AF82994292F18CAF5C1C11 -CT=7B3E5C0017089A7842866ABA6364FFEA -PT=CC263F129618975F204AE499F115C69B - -I=341 -KEY=B5B85B20C3B715C662D815155E49DA8A -CT=CC263F129618975F204AE499F115C69B -PT=997ACE7EABF6EBF9CC7BBCC2670CF1A0 - -I=342 -KEY=2CC2955E6841FE3FAEA3A9D739452B2A -CT=997ACE7EABF6EBF9CC7BBCC2670CF1A0 -PT=88D4A74B19278ED442068D0954DFA8B2 - -I=343 -KEY=A4163215716670EBECA524DE6D9A8398 -CT=88D4A74B19278ED442068D0954DFA8B2 -PT=F1CC6407AB254178DEFEF983112D6AC5 - -I=344 -KEY=55DA5612DA433193325BDD5D7CB7E95D -CT=F1CC6407AB254178DEFEF983112D6AC5 -PT=689A0E429CDAF1BD1197C160BF962544 - -I=345 -KEY=3D4058504699C02E23CC1C3DC321CC19 -CT=689A0E429CDAF1BD1197C160BF962544 -PT=54CF618196D978C0460CF8051DF5BE18 - -I=346 -KEY=698F39D1D040B8EE65C0E438DED47201 -CT=54CF618196D978C0460CF8051DF5BE18 -PT=4AA0EF106F23B43C3DD371C66404C602 - -I=347 -KEY=232FD6C1BF630CD2581395FEBAD0B403 -CT=4AA0EF106F23B43C3DD371C66404C602 -PT=A5185CAE1718143FC6CC329D9F233E17 - -I=348 -KEY=86378A6FA87B18ED9EDFA76325F38A14 -CT=A5185CAE1718143FC6CC329D9F233E17 -PT=A2A7E8855D25A0C475961E9B7ED7BE35 - -I=349 -KEY=249062EAF55EB829EB49B9F85B243421 -CT=A2A7E8855D25A0C475961E9B7ED7BE35 -PT=E0B7536B335FB98F197F762B3B97CECE - -I=350 -KEY=C4273181C60101A6F236CFD360B3FAEF -CT=E0B7536B335FB98F197F762B3B97CECE -PT=C45C38164083871528D8B3BA7423BFEA - -I=351 -KEY=007B0997868286B3DAEE7C6914904505 -CT=C45C38164083871528D8B3BA7423BFEA -PT=017AEBDEF43CF9664C582356A4A0C374 - -I=352 -KEY=0101E24972BE7FD596B65F3FB0308671 -CT=017AEBDEF43CF9664C582356A4A0C374 -PT=BBB48EA21B5EDCCF5346A7B4E6796BED - -I=353 -KEY=BAB56CEB69E0A31AC5F0F88B5649ED9C -CT=BBB48EA21B5EDCCF5346A7B4E6796BED -PT=3A53DFCB6067F9E98653136A44A4B537 - -I=354 -KEY=80E6B32009875AF343A3EBE112ED58AB -CT=3A53DFCB6067F9E98653136A44A4B537 -PT=951BA0E2272E46FC8CC3990E002EEFF0 - -I=355 -KEY=15FD13C22EA91C0FCF6072EF12C3B75B -CT=951BA0E2272E46FC8CC3990E002EEFF0 -PT=249202E40BC5892B9CEE96279E69432A - -I=356 -KEY=316F1126256C9524538EE4C88CAAF471 -CT=249202E40BC5892B9CEE96279E69432A -PT=B90CE5BF126163B37F75032A88AFD615 - -I=357 -KEY=8863F499370DF6972CFBE7E204052264 -CT=B90CE5BF126163B37F75032A88AFD615 -PT=E0BDD9E1FF493D82777BD7FB4035D309 - -I=358 -KEY=68DE2D78C844CB155B8030194430F16D -CT=E0BDD9E1FF493D82777BD7FB4035D309 -PT=0A3A5E377CDB2D1F6CB09E200494F578 - -I=359 -KEY=62E4734FB49FE60A3730AE3940A40415 -CT=0A3A5E377CDB2D1F6CB09E200494F578 -PT=483DF6E2936389D1FC09921497AF8AE7 - -I=360 -KEY=2AD985AD27FC6FDBCB393C2DD70B8EF2 -CT=483DF6E2936389D1FC09921497AF8AE7 -PT=7A90B7B1E493109323A54AD285090EC6 - -I=361 -KEY=5049321CC36F7F48E89C76FF52028034 -CT=7A90B7B1E493109323A54AD285090EC6 -PT=B6471BF36A24B5B0CAC19BDD4C83DC50 - -I=362 -KEY=E60E29EFA94BCAF8225DED221E815C64 -CT=B6471BF36A24B5B0CAC19BDD4C83DC50 -PT=EFBDC6ECADCE6AA5DBD302E7A0647700 - -I=363 -KEY=09B3EF030485A05DF98EEFC5BEE52B64 -CT=EFBDC6ECADCE6AA5DBD302E7A0647700 -PT=783A89B88CC875F743B645BA1449CEE7 - -I=364 -KEY=718966BB884DD5AABA38AA7FAAACE583 -CT=783A89B88CC875F743B645BA1449CEE7 -PT=EAD61D2577852D4EA276F3699EFB2BDC - -I=365 -KEY=9B5F7B9EFFC8F8E4184E59163457CE5F -CT=EAD61D2577852D4EA276F3699EFB2BDC -PT=9E804D8814AF4FC67BA931D1C72774C7 - -I=366 -KEY=05DF3616EB67B72263E768C7F370BA98 -CT=9E804D8814AF4FC67BA931D1C72774C7 -PT=7C383CC27D8C2B117AC72088EB334FD9 - -I=367 -KEY=79E70AD496EB9C331920484F1843F541 -CT=7C383CC27D8C2B117AC72088EB334FD9 -PT=9D4BE61ECECB2E60EC621A6320C0E844 - -I=368 -KEY=E4ACECCA5820B253F542522C38831D05 -CT=9D4BE61ECECB2E60EC621A6320C0E844 -PT=227992ADFC526D9AA99BA629E7523198 - -I=369 -KEY=C6D57E67A472DFC95CD9F405DFD12C9D -CT=227992ADFC526D9AA99BA629E7523198 -PT=93A265FB7650BE75CBDD8732F65F09A5 - -I=370 -KEY=55771B9CD22261BC97047337298E2538 -CT=93A265FB7650BE75CBDD8732F65F09A5 -PT=5AB3354B8D28F041C5A7FDAB828996BC - -I=371 -KEY=0FC42ED75F0A91FD52A38E9CAB07B384 -CT=5AB3354B8D28F041C5A7FDAB828996BC -PT=BA5C6566701BD3791C2DA51CDC5AB6DD - -I=372 -KEY=B5984BB12F1142844E8E2B80775D0559 -CT=BA5C6566701BD3791C2DA51CDC5AB6DD -PT=2C96CE0653EFB1113C6E822DD4AE6200 - -I=373 -KEY=990E85B77CFEF39572E0A9ADA3F36759 -CT=2C96CE0653EFB1113C6E822DD4AE6200 -PT=1065F5519472C78BADAB79EC00BBCABA - -I=374 -KEY=896B70E6E88C341EDF4BD041A348ADE3 -CT=1065F5519472C78BADAB79EC00BBCABA -PT=049AA7D4B4C1A59C1A16E3E5D8B46515 - -I=375 -KEY=8DF1D7325C4D9182C55D33A47BFCC8F6 -CT=049AA7D4B4C1A59C1A16E3E5D8B46515 -PT=C8F1C4179DD8FCD6942D07AF7392F481 - -I=376 -KEY=45001325C1956D545170340B086E3C77 -CT=C8F1C4179DD8FCD6942D07AF7392F481 -PT=9C9AE90AFE18822197EA47FE2F48813F - -I=377 -KEY=D99AFA2F3F8DEF75C69A73F52726BD48 -CT=9C9AE90AFE18822197EA47FE2F48813F -PT=DFBABE8688391CC868CDE134DDFFE1F0 - -I=378 -KEY=062044A9B7B4F3BDAE5792C1FAD95CB8 -CT=DFBABE8688391CC868CDE134DDFFE1F0 -PT=72BE585F98DA4DC03998B5820D5230A9 - -I=379 -KEY=749E1CF62F6EBE7D97CF2743F78B6C11 -CT=72BE585F98DA4DC03998B5820D5230A9 -PT=BCF3D47B888599A27AD63D6EFD8FB86F - -I=380 -KEY=C86DC88DA7EB27DFED191A2D0A04D47E -CT=BCF3D47B888599A27AD63D6EFD8FB86F -PT=62F7A2AD05BB46CB81B9601129100455 - -I=381 -KEY=AA9A6A20A25061146CA07A3C2314D02B -CT=62F7A2AD05BB46CB81B9601129100455 -PT=FA4D3B82232D19BE14A57422012C7751 - -I=382 -KEY=50D751A2817D78AA78050E1E2238A77A -CT=FA4D3B82232D19BE14A57422012C7751 -PT=40953AAA3D6C1BBE375A1E275754C98C - -I=383 -KEY=10426B08BC1163144F5F1039756C6EF6 -CT=40953AAA3D6C1BBE375A1E275754C98C -PT=CE9123C6A5A66AF788A8515721D646A0 - -I=384 -KEY=DED348CE19B709E3C7F7416E54BA2856 -CT=CE9123C6A5A66AF788A8515721D646A0 -PT=E45F3483E343F5C3C0AC77E955369AB3 - -I=385 -KEY=3A8C7C4DFAF4FC20075B3687018CB2E5 -CT=E45F3483E343F5C3C0AC77E955369AB3 -PT=6E7CE5F4BE070EC870691CDD494A767E - -I=386 -KEY=54F099B944F3F2E877322A5A48C6C49B -CT=6E7CE5F4BE070EC870691CDD494A767E -PT=2BB1EE551920A632E90EB9E462280365 - -I=387 -KEY=7F4177EC5DD354DA9E3C93BE2AEEC7FE -CT=2BB1EE551920A632E90EB9E462280365 -PT=692E0FA8B1C39CB96A11E21EA1B3365E - -I=388 -KEY=166F7844EC10C863F42D71A08B5DF1A0 -CT=692E0FA8B1C39CB96A11E21EA1B3365E -PT=345C0DE98A9F472B6BCBE241BB346590 - -I=389 -KEY=223375AD668F8F489FE693E130699430 -CT=345C0DE98A9F472B6BCBE241BB346590 -PT=D9D9313DC80FB90608614ECCC962207F - -I=390 -KEY=FBEA4490AE80364E9787DD2DF90BB44F -CT=D9D9313DC80FB90608614ECCC962207F -PT=7AEE31C488D1DD54B9AD8EE3AEFE546C - -I=391 -KEY=810475542651EB1A2E2A53CE57F5E023 -CT=7AEE31C488D1DD54B9AD8EE3AEFE546C -PT=9CF27E1202080D9F3A9B5E02290204EA - -I=392 -KEY=1DF60B462459E68514B10DCC7EF7E4C9 -CT=9CF27E1202080D9F3A9B5E02290204EA -PT=670085C6D3B95C6017DB9163B9D2D565 - -I=393 -KEY=7AF68E80F7E0BAE5036A9CAFC72531AC -CT=670085C6D3B95C6017DB9163B9D2D565 -PT=2A36E88DF74BA4B24283FEE52DDE5AA4 - -I=394 -KEY=50C0660D00AB1E5741E9624AEAFB6B08 -CT=2A36E88DF74BA4B24283FEE52DDE5AA4 -PT=81B75B31F130467F4A1FA6CA4A329E5E - -I=395 -KEY=D1773D3CF19B58280BF6C480A0C9F556 -CT=81B75B31F130467F4A1FA6CA4A329E5E -PT=D0A0347102BD11F9E2BD8E8A72D53ADC - -I=396 -KEY=01D7094DF32649D1E94B4A0AD21CCF8A -CT=D0A0347102BD11F9E2BD8E8A72D53ADC -PT=97F0187509608DF1D9B27AB5D005E505 - -I=397 -KEY=96271138FA46C42030F930BF02192A8F -CT=97F0187509608DF1D9B27AB5D005E505 -PT=E60139E36ECD7B24C7C98772C92A1E87 - -I=398 -KEY=702628DB948BBF04F730B7CDCB333408 -CT=E60139E36ECD7B24C7C98772C92A1E87 -PT=7E92E19E07A469E7D49D3D07EF719157 - -I=399 -KEY=0EB4C945932FD6E323AD8ACA2442A55F -CT=7E92E19E07A469E7D49D3D07EF719157 -PT=F5BF8B37136F2E1F6BEC6F572021E3BA - -========================= - -KEYSIZE=192 - -I=0 -KEY=000000000000000000000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=48E31E9E256718F29229319C19F15BA4 - -I=1 -KEY=9643D8334A63DF4D48E31E9E256718F29229319C19F15BA4 -CT=48E31E9E256718F29229319C19F15BA4 -PT=CC01684BE9B29ED01EA7923E7D2380AA - -I=2 -KEY=EF334C87288C43DE84E276D5CCD586228C8EA3A264D2DB0E -CT=CC01684BE9B29ED01EA7923E7D2380AA -PT=8726B4E66D6B8FBAA22D42981A5A40CC - -I=3 -KEY=0891A045BB044B9D03C4C233A1BE09982EA3E13A7E889BC2 -CT=8726B4E66D6B8FBAA22D42981A5A40CC -PT=83B9A21A0710FDB9C603797613772ED6 - -I=4 -KEY=A5233519DE914717807D6029A6AEF421E8A0984C6DFFB514 -CT=83B9A21A0710FDB9C603797613772ED6 -PT=F15479A2B2C250F7E5C11D333D867CBD - -I=5 -KEY=A1CB19726DB4C2C77129198B146CA4D60D61857F5079C9A9 -CT=F15479A2B2C250F7E5C11D333D867CBD -PT=C1AF401BD4E62D8BA15BEC3690F2FB25 - -I=6 -KEY=04B03C15DB8324B3B0865990C08A895DAC3A6949C08B328C -CT=C1AF401BD4E62D8BA15BEC3690F2FB25 -PT=01E01E3B10470286035EBD7502EF11A0 - -I=7 -KEY=A1CB0164AB1E88EDB16647ABD0CD8BDBAF64D43CC264232C -CT=01E01E3B10470286035EBD7502EF11A0 -PT=A681127825B718411291106AB416779A - -I=8 -KEY=27BFD9CB824C525617E755D3F57A939ABDF5C456767254B6 -CT=A681127825B718411291106AB416779A -PT=5C2EBA728589A9CAA15E28E7D8E59AA0 - -I=9 -KEY=B308E0DCE108194C4BC9EFA170F33A501CABECB1AE97CE16 -CT=5C2EBA728589A9CAA15E28E7D8E59AA0 -PT=E738305279BE636648B6D5FFA3E97E4A - -I=10 -KEY=FE787701EE66664BACF1DFF3094D5936541D394E0D7EB05C -CT=E738305279BE636648B6D5FFA3E97E4A -PT=5AF7D4C9439C7412FD7236E7685659DF - -I=11 -KEY=DD93D742AFA0B19CF6060B3A4AD12D24A96F0FA96528E983 -CT=5AF7D4C9439C7412FD7236E7685659DF -PT=30D0681D4060E24D1427D1AAC498DB1B - -I=12 -KEY=D5D19C2FEA9DC94BC6D663270AB1CF69BD48DE03A1B03298 -CT=30D0681D4060E24D1427D1AAC498DB1B -PT=FC9B6752064B1CCE75EBFBE91AF8F2CD - -I=13 -KEY=EB0954ECE44620833A4D04750CFAD3A7C8A325EABB48C055 -CT=FC9B6752064B1CCE75EBFBE91AF8F2CD -PT=61E6AE6E035BCC3C94EF00101216904A - -I=14 -KEY=E6E5AB38545B6DF75BABAA1B0FA11F9B5C4C25FAA95E501F -CT=61E6AE6E035BCC3C94EF00101216904A -PT=BF738A4E55F036126CC9B56DED530B8C - -I=15 -KEY=E8C670F71E5B62B6E4D820555A51298930859097440D5B93 -CT=BF738A4E55F036126CC9B56DED530B8C -PT=6B9CD4C227FC30C14FD881B838D9F8F5 - -I=16 -KEY=23FF647DD75770418F44F4977DAD19487F5D112F7CD4A366 -CT=6B9CD4C227FC30C14FD881B838D9F8F5 -PT=6173EF2B5C9B569A1BD4B62C7C913844 - -I=17 -KEY=DB94124B11CC03D9EE371BBC21364FD26489A70300459B22 -CT=6173EF2B5C9B569A1BD4B62C7C913844 -PT=709EF90F853E55123A917FB258E900F9 - -I=18 -KEY=4821CA96B50ACA049EA9E2B3A4081AC05E18D8B158AC9BDB -CT=709EF90F853E55123A917FB258E900F9 -PT=5D73D99E47B1DB28E0ED9B9D1C212CFA - -I=19 -KEY=FA47C5BF5E688F8BC3DA3B2DE3B9C1E8BEF5432C448DB721 -CT=5D73D99E47B1DB28E0ED9B9D1C212CFA -PT=32016FFCB2AA5EA6EA0C808F60613CA2 - -I=20 -KEY=C66A73E0D1261C2CF1DB54D151139F4E54F9C3A324EC8B83 -CT=32016FFCB2AA5EA6EA0C808F60613CA2 -PT=CAA3704F7FD76EBACB1D2A266A0899FF - -I=21 -KEY=FAE8E04094E572A33B78249E2EC4F1F49FE4E9854EE4127C -CT=CAA3704F7FD76EBACB1D2A266A0899FF -PT=E32DBD027A1A36B2EC8D0A98C9293E7E - -I=22 -KEY=8F2FBF9E40182950D855999C54DEC7467369E31D87CD2C02 -CT=E32DBD027A1A36B2EC8D0A98C9293E7E -PT=1C117311882C0D5159A9DFD5C3C68D95 - -I=23 -KEY=F6FB8F6DFAA034BFC444EA8DDCF2CA172AC03CC8440BA197 -CT=1C117311882C0D5159A9DFD5C3C68D95 -PT=5E379C2471DB04582CD861E6F8A419D7 - -I=24 -KEY=699DCA67F4EF50C49A7376A9AD29CE4F06185D2EBCAFB840 -CT=5E379C2471DB04582CD861E6F8A419D7 -PT=5932A84C6ACBD8452EE9AC47CE4B6BD8 - -I=25 -KEY=F568B4F126486CE4C341DEE5C7E2160A28F1F16972E4D398 -CT=5932A84C6ACBD8452EE9AC47CE4B6BD8 -PT=00634EED1D18C84AE0A8198CF791DE81 - -I=26 -KEY=C49E5E8D366B6FE7C3229008DAFADE40C859E8E585750D19 -CT=00634EED1D18C84AE0A8198CF791DE81 -PT=E10C93B1C466FFF0B6EB6DB50AF271EC - -I=27 -KEY=22B07DB9ED443A9D222E03B91E9C21B07EB285508F877CF5 -CT=E10C93B1C466FFF0B6EB6DB50AF271EC -PT=58A0C680F565E63A7E41C6EAC50A3B01 - -I=28 -KEY=2BDF4CCE2B4CAFDD7A8EC539EBF9C78A00F343BA4A8D47F4 -CT=58A0C680F565E63A7E41C6EAC50A3B01 -PT=92921B2AA7FC6367199A4C42FAE0E2A4 - -I=29 -KEY=E2BE29F6905D41C5E81CDE134C05A4ED19690FF8B06DA550 -CT=92921B2AA7FC6367199A4C42FAE0E2A4 -PT=B6EC2A692D2657E5506F2C3BA1912799 - -I=30 -KEY=E43634FD3DB719C75EF0F47A6123F308490623C311FC82C9 -CT=B6EC2A692D2657E5506F2C3BA1912799 -PT=23ECD0813B1A7090CF9BE874D6B0846C - -I=31 -KEY=ACA2F21EF46E30B57D1C24FB5A398398869DCBB7C74C06A5 -CT=23ECD0813B1A7090CF9BE874D6B0846C -PT=04BD52F4C1AB8DF4816A6E11F8B54452 - -I=32 -KEY=0130B37AFE24D66079A1760F9B920E6C07F7A5A63FF942F7 -CT=04BD52F4C1AB8DF4816A6E11F8B54452 -PT=DFA0074DEFEDB44D0D96AD6020D1A37D - -I=33 -KEY=00AC6BF5E3AD20FFA6017142747FBA210A6108C61F28E18A -CT=DFA0074DEFEDB44D0D96AD6020D1A37D -PT=5AB15057E05F73FAAF12C0EC26D3F02F - -I=34 -KEY=E3A70EBF3D9167AAFCB021159420C9DBA573C82A39FB11A5 -CT=5AB15057E05F73FAAF12C0EC26D3F02F -PT=6ECC2F23AB7854E97F215C52EF1E62E0 - -I=35 -KEY=CBCD9116DC78FA64927C0E363F589D32DA529478D6E57345 -CT=6ECC2F23AB7854E97F215C52EF1E62E0 -PT=930B3EBDE0989049056022E83FC9EF1E - -I=36 -KEY=FBB5E5462DE715180177308BDFC00D7BDF32B690E92C9C5B -CT=930B3EBDE0989049056022E83FC9EF1E -PT=1EE4ABB9ACD70B93A83BCD8751F858DE - -I=37 -KEY=E5D2B1ACD8BE6DF21F939B32731706E877097B17B8D4C485 -CT=1EE4ABB9ACD70B93A83BCD8751F858DE -PT=FCAC610EA0D309C6D36EED5A4BC04036 - -I=38 -KEY=54DD0B6CB083BDE8E33FFA3CD3C40F2EA467964DF31484B3 -CT=FCAC610EA0D309C6D36EED5A4BC04036 -PT=161D5EE8F50A3F69A11ADFEAF1A2A2AA - -I=39 -KEY=28309F7EB99AAEE1F522A4D426CE3047057D49A702B62619 -CT=161D5EE8F50A3F69A11ADFEAF1A2A2AA -PT=D9D365B061D2F3BF9DF94181837621B4 - -I=40 -KEY=E55ECDDFAE95A2C92CF1C164471CC3F89884082681C007AD -CT=D9D365B061D2F3BF9DF94181837621B4 -PT=938647A6AAD455D89A6DFEFE60D62331 - -I=41 -KEY=C9CEE1C9D89DF76ABF7786C2EDC8962002E9F6D8E116249C -CT=938647A6AAD455D89A6DFEFE60D62331 -PT=06A002DDC7DC4F22F9B1D5734C312AAA - -I=42 -KEY=B26709109B66C916B9D7841F2A14D902FB5823ABAD270E36 -CT=06A002DDC7DC4F22F9B1D5734C312AAA -PT=BB45E9BE2237E3288F56EDD0D9AD6734 - -I=43 -KEY=2FAD2FF32E10680502926DA108233A2A740ECE7B748A6902 -CT=BB45E9BE2237E3288F56EDD0D9AD6734 -PT=CF5A1338F5FA7ED4C77F6EA3836F079A - -I=44 -KEY=63D3D62540C790D1CDC87E99FDD944FEB371A0D8F7E56E98 -CT=CF5A1338F5FA7ED4C77F6EA3836F079A -PT=32F2D628117ADB46383FC101B58E95A6 - -I=45 -KEY=0DF38CE71CF26A19FF3AA8B1ECA39FB88B4E61D9426BFB3E -CT=32F2D628117ADB46383FC101B58E95A6 -PT=3A3CCEA99D43887AC64498AB4EFC87DD - -I=46 -KEY=7EEEB78A0C9BAA9FC506661871E017C24D0AF9720C977CE3 -CT=3A3CCEA99D43887AC64498AB4EFC87DD -PT=787DC1C632C4AA77D42324338C510146 - -I=47 -KEY=4DF02EE427AE29A1BD7BA7DE4324BDB59929DD4180C67DA5 -CT=787DC1C632C4AA77D42324338C510146 -PT=BB0635A471D26B80E5E387E4F14A1626 - -I=48 -KEY=D6983F5E8BE728D9067D927A32F6D6357CCA5AA5718C6B83 -CT=BB0635A471D26B80E5E387E4F14A1626 -PT=14A9AA3EE6343C2D57E0F2ED7A05DC0D - -I=49 -KEY=BD84A7CD471613B512D43844D4C2EA182B2AA8480B89B78E -CT=14A9AA3EE6343C2D57E0F2ED7A05DC0D -PT=25E254AD6C33908BC07B3DEC4052F549 - -I=50 -KEY=E54A2146242AADFB37366CE9B8F17A93EB5195A44BDB42C7 -CT=25E254AD6C33908BC07B3DEC4052F549 -PT=10E09F426E6F33CD21DF1EB748A46088 - -I=51 -KEY=0517B745BCE24E0527D6F3ABD69E495ECA8E8B13037F224F -CT=10E09F426E6F33CD21DF1EB748A46088 -PT=B65D2FFE83F9469AA2B1ABC559EAAB87 - -I=52 -KEY=8297790C75E8931C918BDC5555670FC4683F20D65A9589C8 -CT=B65D2FFE83F9469AA2B1ABC559EAAB87 -PT=E743F6441CCF9703FF4B8E3F4921ACDF - -I=53 -KEY=7EC47C0C5663CD4C76C82A1149A898C79774AEE913B42517 -CT=E743F6441CCF9703FF4B8E3F4921ACDF -PT=BECC5CF2F2C62A9E7D3CF979A9E96F94 - -I=54 -KEY=FBB1F10529FABEB3C80476E3BB6EB259EA485790BA5D4A83 -CT=BECC5CF2F2C62A9E7D3CF979A9E96F94 -PT=3718199958EAA473B980B95F9C76E03F - -I=55 -KEY=EE4113D30720269DFF1C6F7AE384162A53C8EECF262BAABC -CT=3718199958EAA473B980B95F9C76E03F -PT=D15525B8BBB6D209E0BB3B6F5ACB2556 - -I=56 -KEY=488286944DC6B0842E494AC25832C423B373D5A07CE08FEA -CT=D15525B8BBB6D209E0BB3B6F5ACB2556 -PT=0270AF07DDA52DF7CA7B0EE7DF098A80 - -I=57 -KEY=A32A880A84E7EDB82C39E5C58597E9D47908DB47A3E9056A -CT=0270AF07DDA52DF7CA7B0EE7DF098A80 -PT=2D380F99A182CD14CFFEF5E88B93B416 - -I=58 -KEY=DBD0FD5053BC52C60101EA5C241524C0B6F62EAF287AB17C -CT=2D380F99A182CD14CFFEF5E88B93B416 -PT=47FE8C67DCBC616E4C984D323EA4A45B - -I=59 -KEY=D79F78A4726F5FCA46FF663BF8A945AEFA6E639D16DE1527 -CT=47FE8C67DCBC616E4C984D323EA4A45B -PT=FA595C69C3286771FB8C921DFBBFFC2E - -I=60 -KEY=0C88AAD46F951FB6BCA63A523B8122DF01E2F180ED61E909 -CT=FA595C69C3286771FB8C921DFBBFFC2E -PT=8FA64C511FCE6FC987B327D12EBDADAD - -I=61 -KEY=762EEA21D382067E33007603244F4D168651D651C3DC44A4 -CT=8FA64C511FCE6FC987B327D12EBDADAD -PT=8F52C709508408B40C241FD38E515E76 - -I=62 -KEY=EA05788C20FB364EBC52B10A74CB45A28A75C9824D8D1AD2 -CT=8F52C709508408B40C241FD38E515E76 -PT=7CFD332B306684AC92279CE06F1287D8 - -I=63 -KEY=D4B2582B094D874DC0AF822144ADC10E18525562229F9D0A -CT=7CFD332B306684AC92279CE06F1287D8 -PT=0DA14F6619665E0128044355481BD658 - -I=64 -KEY=C080E7033FDF1BCFCD0ECD475DCB9F0F305616376A844B52 -CT=0DA14F6619665E0128044355481BD658 -PT=FEDEBE73AA4047AF27E86A8B9E8E2ED7 - -I=65 -KEY=C5BA9667999CF2D633D07334F78BD8A017BE7CBCF40A6585 -CT=FEDEBE73AA4047AF27E86A8B9E8E2ED7 -PT=12CD6896129E376AAB9C0E980F3B7CD2 - -I=66 -KEY=65FF092A539C4600211D1BA2E515EFCABC227224FB311957 -CT=12CD6896129E376AAB9C0E980F3B7CD2 -PT=04E7939B352F7B5C38B7EC5784EC78C2 - -I=67 -KEY=F98E7062F9EBE61C25FA8839D03A949684959E737FDD6195 -CT=04E7939B352F7B5C38B7EC5784EC78C2 -PT=0184996278A57E36E608E95616C46964 - -I=68 -KEY=306FBEFB3BF4E241247E115BA89FEAA0629D7725691908F1 -CT=0184996278A57E36E608E95616C46964 -PT=92179E392E05C8B96A0CFAC36109B09E - -I=69 -KEY=EE641F5DB58F9057B6698F62869A221908918DE60810B86F -CT=92179E392E05C8B96A0CFAC36109B09E -PT=7F197B01172C809635198E6B156D13BC - -I=70 -KEY=EADB8B255F98FD9DC970F46391B6A28F3D88038D1D7DABD3 -CT=7F197B01172C809635198E6B156D13BC -PT=46F6DD79AD079DCFBC451B24ECDDA4FA - -I=71 -KEY=47225D75FE68FFA08F86291A3CB13F4081CD18A9F1A00F29 -CT=46F6DD79AD079DCFBC451B24ECDDA4FA -PT=B5DAA09E3545F92FF44176187A1F9179 - -I=72 -KEY=7CDECC21E72E54F43A5C898409F4C66F758C6EB18BBF9E50 -CT=B5DAA09E3545F92FF44176187A1F9179 -PT=F51A35F3DD410132EEC9E9F22A6F6FAB - -I=73 -KEY=75D1AAFDBFE72C94CF46BC77D4B5C75D9B458743A1D0F1FB -CT=F51A35F3DD410132EEC9E9F22A6F6FAB -PT=D1CC6D95B58793C342CF14AF250D5E40 - -I=74 -KEY=41874C54BD58757A1E8AD1E26132549ED98A93EC84DDAFBB -CT=D1CC6D95B58793C342CF14AF250D5E40 -PT=A1FAB3B352A887A829357528FED4B80E - -I=75 -KEY=1D94704F4A51A5CABF706251339AD336F0BFE6C47A0917B5 -CT=A1FAB3B352A887A829357528FED4B80E -PT=CBC6473B3AA4DE2D64EED554CA241EAC - -I=76 -KEY=A41B52E0AE7E568074B6256A093E0D1B94513390B02D0919 -CT=CBC6473B3AA4DE2D64EED554CA241EAC -PT=19DC6E89D71DCE5DCECD1A6F85C3FBD6 - -I=77 -KEY=85F21BCD70691F596D6A4BE3DE23C3465A9C29FF35EEF2CF -CT=19DC6E89D71DCE5DCECD1A6F85C3FBD6 -PT=EC6974E51B21F26A100E66183C68FD15 - -I=78 -KEY=CAD0B254A88B669681033F06C502312C4A924FE709860FDA -CT=EC6974E51B21F26A100E66183C68FD15 -PT=A16B6F78009B6E30CB758E87AD4D8034 - -I=79 -KEY=8AC49B19582BFCF32068507EC5995F1C81E7C160A4CB8FEE -CT=A16B6F78009B6E30CB758E87AD4D8034 -PT=CB5C20AAFA898193BC34FF3EE460B313 - -I=80 -KEY=988F8D4F3A66AC99EB3470D43F10DE8F3DD33E5E40AB3CFD -CT=CB5C20AAFA898193BC34FF3EE460B313 -PT=397F92C8E69E0916E30DC6889779799E - -I=81 -KEY=DE2D26C6130E006ED24BE21CD98ED799DEDEF8D6D7D24563 -CT=397F92C8E69E0916E30DC6889779799E -PT=9A9CBD9380E2187855CAE5A73D58480F - -I=82 -KEY=BF6BE6D55C04977348D75F8F596CCFE18B141D71EA8A0D6C -CT=9A9CBD9380E2187855CAE5A73D58480F -PT=B67B360EE0FF297D3662F5B7CDB82CB9 - -I=83 -KEY=6582BCA895FA1221FEAC6981B993E69CBD76E8C6273221D5 -CT=B67B360EE0FF297D3662F5B7CDB82CB9 -PT=2D146ED9236082D2D71810969A1AB1FB - -I=84 -KEY=6AC68BB8BBC7F520D3B807589AF3644E6A6EF850BD28902E -CT=2D146ED9236082D2D71810969A1AB1FB -PT=4B9F55652C40B6DA963A98D875ADACE4 - -I=85 -KEY=180DAB1B14A92DB29827523DB6B3D294FC546088C8853CCA -CT=4B9F55652C40B6DA963A98D875ADACE4 -PT=FC0A8A3D511F5FAFF0A3DD13B49E5A13 - -I=86 -KEY=7ABD7440D5EE5FE2642DD800E7AC8D3B0CF7BD9B7C1B66D9 -CT=FC0A8A3D511F5FAFF0A3DD13B49E5A13 -PT=4231C02AD3231C3EB7AEB9135B95AC4B - -I=87 -KEY=54ACAE182B5FDACF261C182A348F9105BB590488278ECA92 -CT=4231C02AD3231C3EB7AEB9135B95AC4B -PT=4C3A949ACCCBB55F9415C81B1413FD9D - -I=88 -KEY=015706F99E81CC026A268CB0F844245A2F4CCC93339D370F -CT=4C3A949ACCCBB55F9415C81B1413FD9D -PT=E9B1CEAF77B64A88CC3E020B16E1BF7E - -I=89 -KEY=929BD0A1CC6450E78397421F8FF26ED2E372CE98257C8871 -CT=E9B1CEAF77B64A88CC3E020B16E1BF7E -PT=98FFEA0827068CB0B508CA520D8B43F7 - -I=90 -KEY=9B81EC47D8442D311B68A817A8F4E262567A04CA28F7CB86 -CT=98FFEA0827068CB0B508CA520D8B43F7 -PT=BEDA572C3CA3FEF97F7071DA35414EA1 - -I=91 -KEY=93B211B869CBECCBA5B2FF3B94571C9B290A75101DB68527 -CT=BEDA572C3CA3FEF97F7071DA35414EA1 -PT=35E8CB8302748C8623A09980909FB516 - -I=92 -KEY=BC5320E4025EB960905A34B89623901D0AAAEC908D293031 -CT=35E8CB8302748C8623A09980909FB516 -PT=E136148B2FA5AF5CD3F8BC3883566CB8 - -I=93 -KEY=C4EC937F948D0B5A716C2033B9863F41D95250A80E7F5C89 -CT=E136148B2FA5AF5CD3F8BC3883566CB8 -PT=B7CE40E3E3D30191CDF4AB5BE98F347A - -I=94 -KEY=6D381856C149D9DCC6A260D05A553ED014A6FBF3E7F068F3 -CT=B7CE40E3E3D30191CDF4AB5BE98F347A -PT=A821E934DAAE37FF3136E769DAC315FB - -I=95 -KEY=A3679C5957C656DE6E8389E480FB092F25901C9A3D337D08 -CT=A821E934DAAE37FF3136E769DAC315FB -PT=4227B96A0CC6CA1C21BCF8B1ADB3BDE1 - -I=96 -KEY=BE7112453B1DF3EC2CA4308E8C3DC333042CE42B9080C0E9 -CT=4227B96A0CC6CA1C21BCF8B1ADB3BDE1 -PT=EE36BBFDDF19165F9E64AE79B4CF06A9 - -I=97 -KEY=AEA4A2D5CD0A2FC7C2928B735324D56C9A484A52244FC640 -CT=EE36BBFDDF19165F9E64AE79B4CF06A9 -PT=C3DFE088C6767BC939F492C1FA9604CD - -I=98 -KEY=A16FC5F22F03984F014D6BFB9552AEA5A3BCD893DED9C28D -CT=C3DFE088C6767BC939F492C1FA9604CD -PT=DB1202E468119D977868F6E294E3CC3A - -I=99 -KEY=A4E0565DD419BDD1DA5F691FFD433332DBD42E714A3A0EB7 -CT=DB1202E468119D977868F6E294E3CC3A -PT=6F2F682BA4F95EB8C5B883C7660B2653 - -I=100 -KEY=3CAEE44D0E85058EB570013459BA6D8A1E6CADB62C3128E4 -CT=6F2F682BA4F95EB8C5B883C7660B2653 -PT=1036B4AA6C897D36DFE6658A953E5075 - -I=101 -KEY=4E883A500CA89963A546B59E353310BCC18AC83CB90F7891 -CT=1036B4AA6C897D36DFE6658A953E5075 -PT=04FCB3A81E5319A16CCF212719906229 - -I=102 -KEY=ADED5A405C5C095AA1BA06362B60091DAD45E91BA09F1AB8 -CT=04FCB3A81E5319A16CCF212719906229 -PT=CD79BAC069BB58605D43005B927816E5 - -I=103 -KEY=5499B441405D16B06CC3BCF642DB517DF006E94032E70C5D -CT=CD79BAC069BB58605D43005B927816E5 -PT=DB5B3C625D1F66CF28A86CC100472398 - -I=104 -KEY=D31221246382CA8EB79880941FC437B2D8AE858132A02FC5 -CT=DB5B3C625D1F66CF28A86CC100472398 -PT=D8732A2C16EC6AE202371AF03A6F91E8 - -I=105 -KEY=CDF928E97051F08B6FEBAAB809285D50DA999F7108CFBE2D -CT=D8732A2C16EC6AE202371AF03A6F91E8 -PT=F0A1A353A8AB9A893F621F0BEA3B4F01 - -I=106 -KEY=10CC2EED0ECBD1E69F4A09EBA183C7D9E5FB807AE2F4F12C -CT=F0A1A353A8AB9A893F621F0BEA3B4F01 -PT=27E4451BD15E43F301E138713DC12E78 - -I=107 -KEY=03C4F5E1FD3D34D1B8AE4CF070DD842AE41AB80BDF35DF54 -CT=27E4451BD15E43F301E138713DC12E78 -PT=C7FA931DA414CB37A9BDB6F128E082EE - -I=108 -KEY=CC5D7D36D085E3257F54DFEDD4C94F1D4DA70EFAF7D55DBA -CT=C7FA931DA414CB37A9BDB6F128E082EE -PT=A6777D51A0A1C94DD74A18795341015F - -I=109 -KEY=9F4EE4750FF3F53AD923A2BC746886509AED1683A4945CE5 -CT=A6777D51A0A1C94DD74A18795341015F -PT=32A4D930A5597E02D7076E399D18D895 - -I=110 -KEY=8525417BB6D8095BEB877B8CD131F8524DEA78BA398C8470 -CT=32A4D930A5597E02D7076E399D18D895 -PT=1B78FCF274EEB1E597998EE4EFFF9F8B - -I=111 -KEY=54EFA98071F1EF62F0FF877EA5DF49B7DA73F65ED6731BFB -CT=1B78FCF274EEB1E597998EE4EFFF9F8B -PT=2997FEE2823CC84DA14E8439449F5C7C - -I=112 -KEY=2505931CE4D41D16D968799C27E381FA7B3D726792EC4787 -CT=2997FEE2823CC84DA14E8439449F5C7C -PT=810534A9E8DB2808FEE681B13C04411D - -I=113 -KEY=C2DF863BEB4F27AB586D4D35CF38A9F285DBF3D6AEE8069A -CT=810534A9E8DB2808FEE681B13C04411D -PT=BE2380994365F1D7FC8278E86C8B497D - -I=114 -KEY=036C0C95D0C26B66E64ECDAC8C5D582579598B3EC2634FE7 -CT=BE2380994365F1D7FC8278E86C8B497D -PT=EFEC3977D5A21DC4AC786E786CA3ECE9 - -I=115 -KEY=BD05AD63A0A9F1B509A2F4DB59FF45E1D521E546AEC0A30E -CT=EFEC3977D5A21DC4AC786E786CA3ECE9 -PT=22A7280D8231895EA4F0B6A39AC583C3 - -I=116 -KEY=A16DFA00981597B42B05DCD6DBCECCBF71D153E5340520CD -CT=22A7280D8231895EA4F0B6A39AC583C3 -PT=0CC61E91B3CBCD0E190D52059E27647A - -I=117 -KEY=ABC1AD453235832727C3C247680501B168DC01E0AA2244B7 -CT=0CC61E91B3CBCD0E190D52059E27647A -PT=5CE91F77F7C8F0AB1BBA802D2FFF0E9B - -I=118 -KEY=64D40ACA0F526EC67B2ADD309FCDF11A736681CD85DD4A2C -CT=5CE91F77F7C8F0AB1BBA802D2FFF0E9B -PT=255459BE5A27E08942A049F6EC44582E - -I=119 -KEY=8BB5C7D8B2B177855E7E848EC5EA119331C6C83B69991202 -CT=255459BE5A27E08942A049F6EC44582E -PT=28E2E20115C3665D9D88CB74681301EA - -I=120 -KEY=4E30FCC4C182F471769C668FD02977CEAC4E034F018A13E8 -CT=28E2E20115C3665D9D88CB74681301EA -PT=2E96E6BBCD999F4B1507C7EC9E4B8430 - -I=121 -KEY=906B361E9D72E107580A80341DB0E885B949C4A39FC197D8 -CT=2E96E6BBCD999F4B1507C7EC9E4B8430 -PT=03DED0A95164E5FA215E9C49C433E95B - -I=122 -KEY=F656F5D9D973C02C5BD4509D4CD40D7F981758EA5BF27E83 -CT=03DED0A95164E5FA215E9C49C433E95B -PT=AD9C16D2567B73FCA4866FE16CF09CDA - -I=123 -KEY=8811A4ACDF37A140F648464F1AAF7E833C91370B3702E259 -CT=AD9C16D2567B73FCA4866FE16CF09CDA -PT=68539BFF0F8CC23A0A3267796A11B75C - -I=124 -KEY=E5AF2E8CDBAD01589E1BDDB01523BCB936A350725D135505 -CT=68539BFF0F8CC23A0A3267796A11B75C -PT=B15F623E5A7D73452A419EB04AFCF72E - -I=125 -KEY=C9E743CAD731A62E2F44BF8E4F5ECFFC1CE2CEC217EFA22B -CT=B15F623E5A7D73452A419EB04AFCF72E -PT=520142AFDA69E9CFA98D8DD59CCB12BC - -I=126 -KEY=6CF6C656FFBB77807D45FD2195372633B56F43178B24B097 -CT=520142AFDA69E9CFA98D8DD59CCB12BC -PT=7EC2A8430F23A5E183E0032DAB5232C5 - -I=127 -KEY=772CEE9F934D57D4038755629A1483D2368F403A20768252 -CT=7EC2A8430F23A5E183E0032DAB5232C5 -PT=E5E3A5D968B1FF774B55CCA06BE3BD65 - -I=128 -KEY=9A4DAB93F3C74EBBE664F0BBF2A57CA57DDA8C9A4B953F37 -CT=E5E3A5D968B1FF774B55CCA06BE3BD65 -PT=9608643D0A34DA28372A7E7E34427E1B - -I=129 -KEY=EF0F60BCBA3374E0706C9486F891A68D4AF0F2E47FD7412C -CT=9608643D0A34DA28372A7E7E34427E1B -PT=B22BD410584F29610801B18EDAB1BD19 - -I=130 -KEY=DE013A6C3440AFF3C2474096A0DE8FEC42F1436AA566FC35 -CT=B22BD410584F29610801B18EDAB1BD19 -PT=ADEC4519F1A7AD74BCCECABEDCF20D73 - -I=131 -KEY=2B5B547A934A5A376FAB058F51792298FE3F89D47994F146 -CT=ADEC4519F1A7AD74BCCECABEDCF20D73 -PT=E04D4FF54191BEEEF5B295A32DA2ADE5 - -I=132 -KEY=BF356F2FFC2C538F8FE64A7A10E89C760B8D1C7754365CA3 -CT=E04D4FF54191BEEEF5B295A32DA2ADE5 -PT=3F9531EDD5072F7A9F2A62ECC2CCE50A - -I=133 -KEY=7CEBD7310CC4791AB0737B97C5EFB30C94A77E9B96FAB9A9 -CT=3F9531EDD5072F7A9F2A62ECC2CCE50A -PT=C3DC95781FAE7BB6C02BD08B3617DDF1 - -I=134 -KEY=192741D2AB9C887673AFEEEFDA41C8BA548CAE10A0ED6458 -CT=C3DC95781FAE7BB6C02BD08B3617DDF1 -PT=F69B837F168B9A9E637E7357B65F2B60 - -I=135 -KEY=38552740A79FB5BF85346D90CCCA522437F2DD4716B24F38 -CT=F69B837F168B9A9E637E7357B65F2B60 -PT=40DCDF58E7EFDD62C114A83F8AC898BB - -I=136 -KEY=A0AED2C07C2168B6C5E8B2C82B258F46F6E675789C7AD783 -CT=40DCDF58E7EFDD62C114A83F8AC898BB -PT=27F78F3BD8E04A8646EBF364155A71ED - -I=137 -KEY=2B4FAEBF17993E12E21F3DF3F3C5C5C0B00D861C8920A66E -CT=27F78F3BD8E04A8646EBF364155A71ED -PT=F305DFC8EAD44E786F59B0551C7104F5 - -I=138 -KEY=96819F6E9738209F111AE23B19118BB8DF5436499551A29B -CT=F305DFC8EAD44E786F59B0551C7104F5 -PT=2E47F833BE7C06ED1E42AC11366F4BEF - -I=139 -KEY=AAEA16BAC3E84DD73F5D1A08A76D8D55C1169A58A33EE974 -CT=2E47F833BE7C06ED1E42AC11366F4BEF -PT=A9D3A511C3D76779B607AAB2556823AD - -I=140 -KEY=F66BA47C56AC5A36968EBF1964BAEA2C771130EAF656CAD9 -CT=A9D3A511C3D76779B607AAB2556823AD -PT=153A7CC2387C05289F759C85076CDD88 - -I=141 -KEY=1D892BCCFAF3DA1083B4C3DB5CC6EF04E864AC6FF13A1751 -CT=153A7CC2387C05289F759C85076CDD88 -PT=76B6089030D914F0F4C6078193207A7D - -I=142 -KEY=DAEBAF980095A397F502CB4B6C1FFBF41CA2ABEE621A6D2C -CT=76B6089030D914F0F4C6078193207A7D -PT=EB71D127848BA397451D45801830461E - -I=143 -KEY=85F86FADA92076AB1E731A6CE894586359BFEE6E7A2A2B32 -CT=EB71D127848BA397451D45801830461E -PT=B79D9BE1B2DB808B412413C203C710DF - -I=144 -KEY=BEADDA5CE1E7F3D4A9EE818D5A4FD8E8189BFDAC79ED3BED -CT=B79D9BE1B2DB808B412413C203C710DF -PT=E6423467C3CA69D94C944FA2A97BB61F - -I=145 -KEY=D4664C8DCFA8304D4FACB5EA9985B131540FB20ED0968DF2 -CT=E6423467C3CA69D94C944FA2A97BB61F -PT=18EFF53B7D62A9D9ED8AB9ABE67FC110 - -I=146 -KEY=9CCF1EEAF55FEA5A574340D1E4E718E8B9850BA536E94CE2 -CT=18EFF53B7D62A9D9ED8AB9ABE67FC110 -PT=8E6A4AC577153D806ED71A07319CAB67 - -I=147 -KEY=7D840184CB9D3A05D9290A1493F22568D75211A20775E785 -CT=8E6A4AC577153D806ED71A07319CAB67 -PT=B7B23D8E7D344F39B3EA0D67CCF37377 - -I=148 -KEY=D72F35B6DD825B656E9B379AEEC66A5164B81CC5CB8694F2 -CT=B7B23D8E7D344F39B3EA0D67CCF37377 -PT=3385AD0503AF68BFBFBEAA89B1C87736 - -I=149 -KEY=48335F06D7C27C955D1E9A9FED6902EEDB06B64C7A4EE3C4 -CT=3385AD0503AF68BFBFBEAA89B1C87736 -PT=9FC40A6B984BEEC182AB650B05CEF38C - -I=150 -KEY=A66149286535FD6EC2DA90F47522EC2F59ADD3477F801048 -CT=9FC40A6B984BEEC182AB650B05CEF38C -PT=4CEC52C9DE143486DFC9D098637DFBB5 - -I=151 -KEY=7EA78450FAEEF8BF8E36C23DAB36D8A9866403DF1CFDEBFD -CT=4CEC52C9DE143486DFC9D098637DFBB5 -PT=EB8E40333ACD18EFB04DC0A857DDCD7A - -I=152 -KEY=197DDF842BAEF36E65B8820E91FBC0463629C3774B202687 -CT=EB8E40333ACD18EFB04DC0A857DDCD7A -PT=F1AFF04058F819B0F191398C8022130F - -I=153 -KEY=D68841CF848B0F619417724EC903D9F6C7B8FAFBCB023588 -CT=F1AFF04058F819B0F191398C8022130F -PT=6DF4A95D8D602C0E53F5A5C350D3EB64 - -I=154 -KEY=6DFA0F7B01A2F011F9E3DB134463F5F8944D5F389BD1DEEC -CT=6DF4A95D8D602C0E53F5A5C350D3EB64 -PT=057D8F9BE9260BB3A0382CD2EF7D1FCA - -I=155 -KEY=88227C4AD1CBC8F0FC9E5488AD45FE4B347573EA74ACC126 -CT=057D8F9BE9260BB3A0382CD2EF7D1FCA -PT=D4EDACCB9B7B35F2A0690E22C91E25AE - -I=156 -KEY=848B8E3213D366B22873F843363ECBB9941C7DC8BDB2E488 -CT=D4EDACCB9B7B35F2A0690E22C91E25AE -PT=A2F61B5BDD9F580B26C329B878BAFA3C - -I=157 -KEY=FA3A476D1C6E33FD8A85E318EBA193B2B2DF5470C5081EB4 -CT=A2F61B5BDD9F580B26C329B878BAFA3C -PT=5A0616880CD40B72B58CF268EC8F934B - -I=158 -KEY=C9F77D58F58D5FEDD083F590E77598C00753A61829878DFF -CT=5A0616880CD40B72B58CF268EC8F934B -PT=0E42047D7EDE2A5FBB37767A69A45B9B - -I=159 -KEY=00A523C700FBB663DEC1F1ED99ABB29FBC64D0624023D664 -CT=0E42047D7EDE2A5FBB37767A69A45B9B -PT=2AFA823A10BB436A7B00816C80A52711 - -I=160 -KEY=660275323A59E807F43B73D78910F1F5C764510EC086F175 -CT=2AFA823A10BB436A7B00816C80A52711 -PT=B2406F3F9160E25DF7C9AA81AF6EB449 - -I=161 -KEY=47A4FCDB97D4A383467B1CE8187013A830ADFB8F6FE8453C -CT=B2406F3F9160E25DF7C9AA81AF6EB449 -PT=B1E01D2A401495F8DDAEAB7B04BEB23D - -I=162 -KEY=2BDD5B54D4EB236AF79B01C258648650ED0350F46B56F701 -CT=B1E01D2A401495F8DDAEAB7B04BEB23D -PT=390572A9ECE28A0E0BBDC729DBE5F79A - -I=163 -KEY=328202460B65D004CE9E736BB4860C5EE6BE97DDB0B3009B -CT=390572A9ECE28A0E0BBDC729DBE5F79A -PT=5D41665811702124C597DB4E3BD950E1 - -I=164 -KEY=94457C0A759DF4E993DF1533A5F62D7A23294C938B6A507A -CT=5D41665811702124C597DB4E3BD950E1 -PT=689EB1CB1586D127696E8725DEE49E58 - -I=165 -KEY=4E0226CA850DDC79FB41A4F8B070FC5D4A47CBB6558ECE22 -CT=689EB1CB1586D127696E8725DEE49E58 -PT=A2D9DF62AC8BF8A93E7A954416864052 - -I=166 -KEY=659C817A1C10A24D59987B9A1CFB04F4743D5EF243088E70 -CT=A2D9DF62AC8BF8A93E7A954416864052 -PT=507835696F1920BD4A05797563DF5769 - -I=167 -KEY=92192D9175187FB409E04EF373E224493E38278720D7D919 -CT=507835696F1920BD4A05797563DF5769 -PT=2070413F5103482B6C83129304E5AC87 - -I=168 -KEY=6959063FBA59CCEC29900FCC22E16C6252BB35142432759E -CT=2070413F5103482B6C83129304E5AC87 -PT=BF7FD1E21B41B1F1C2625C1097F1BCB8 - -I=169 -KEY=5722993710D811B196EFDE2E39A0DD9390D96904B3C3C926 -CT=BF7FD1E21B41B1F1C2625C1097F1BCB8 -PT=6E2236654F2999545F50FA9CF63F9F2E - -I=170 -KEY=038FA98E7A226A9FF8CDE84B768944C7CF89939845FC5608 -CT=6E2236654F2999545F50FA9CF63F9F2E -PT=3F370291CEDCB115C8EE409A8EEB46D6 - -I=171 -KEY=CACF0199725D5466C7FAEADAB855F5D20767D302CB1710DE -CT=3F370291CEDCB115C8EE409A8EEB46D6 -PT=84023DB96D373EC8315AE78A3B7E82FB - -I=172 -KEY=7B40321CB11520D143F8D763D562CB1A363D3488F0699225 -CT=84023DB96D373EC8315AE78A3B7E82FB -PT=C35064D82A3016FE2C2E2CC0627E7B5C - -I=173 -KEY=F045CFEC2A6BC7E580A8B3BBFF52DDE41A1318489217E979 -CT=C35064D82A3016FE2C2E2CC0627E7B5C -PT=D78DFFE87C0F95856C31A07BADA23084 - -I=174 -KEY=86B3CA5F50CEF6C557254C53835D48617622B8333FB5D9FD -CT=D78DFFE87C0F95856C31A07BADA23084 -PT=5B5B5D3CA5C6E5CF18F3E4EE802BE82B - -I=175 -KEY=E6D99DC0C58655B70C7E116F269BADAE6ED15CDDBF9E31D6 -CT=5B5B5D3CA5C6E5CF18F3E4EE802BE82B -PT=DB65A82F6EB7A410A367165900E85117 - -I=176 -KEY=B8F770CFBE47D070D71BB940482C09BECDB64A84BF7660C1 -CT=DB65A82F6EB7A410A367165900E85117 -PT=FE8BE8484D925043102238FF63FDAC57 - -I=177 -KEY=FF09ADB06FE587192990510805BE59FDDD94727BDC8BCC96 -CT=FE8BE8484D925043102238FF63FDAC57 -PT=AC36E01A7AD482A8D89703D2A6528720 - -I=178 -KEY=B5C937A4019CDAD185A6B1127F6ADB55050371A97AD94BB6 -CT=AC36E01A7AD482A8D89703D2A6528720 -PT=9F3698CE06C6497C89B58CA723F7ECAA - -I=179 -KEY=F60CAF8FB99B63B21A9029DC79AC92298CB6FD0E592EA71C -CT=9F3698CE06C6497C89B58CA723F7ECAA -PT=FB8CE2E1D332FE4557B6C5CF1676F2FB - -I=180 -KEY=B7CF2BABD58B5FDCE11CCB3DAA9E6C6CDB0038C14F5855E7 -CT=FB8CE2E1D332FE4557B6C5CF1676F2FB -PT=A2631F612698318AD454E9DB10319DA6 - -I=181 -KEY=FD99B4137CAFC47F437FD45C8C065DE60F54D11A5F69C841 -CT=A2631F612698318AD454E9DB10319DA6 -PT=FCA42B332B5974EE6DFA54B54EC89AC7 - -I=182 -KEY=271CEEF189AD367DBFDBFF6FA75F290862AE85AF11A15286 -CT=FCA42B332B5974EE6DFA54B54EC89AC7 -PT=A70DBBDFCE54B8648C3FC4A8A58CCDF8 - -I=183 -KEY=7B78F7ECC9B28EC718D644B0690B916CEE914107B42D9F7E -CT=A70DBBDFCE54B8648C3FC4A8A58CCDF8 -PT=C90CE914F9310F9C3EE065DD95281A51 - -I=184 -KEY=762F521ADF6C5F24D1DAADA4903A9EF0D07124DA2105852F -CT=C90CE914F9310F9C3EE065DD95281A51 -PT=63E8430CE22F531E4A4D4583533F6FC4 - -I=185 -KEY=A88A493EB3C28C49B232EEA87215CDEE9A3C6159723AEAEB -CT=63E8430CE22F531E4A4D4583533F6FC4 -PT=E7562DC647910A052F4AFBF165A68A3A - -I=186 -KEY=1C97343A60EE05035564C36E3584C7EBB5769AA8179C60D1 -CT=E7562DC647910A052F4AFBF165A68A3A -PT=3E070B3F65FD01B49849513B556DB199 - -I=187 -KEY=C5110692100A332E6B63C8515079C65F2D3FCB9342F1D148 -CT=3E070B3F65FD01B49849513B556DB199 -PT=3DE5A45B2CAA4FAFAC3032F89F15195D - -I=188 -KEY=D94D8CAA9EBD67F056866C0A7CD389F0810FF96BDDE4C815 -CT=3DE5A45B2CAA4FAFAC3032F89F15195D -PT=A36A163E8806B1E053EBE439B0D1302F - -I=189 -KEY=1C1D7A3E9358048CF5EC7A34F4D53810D2E41D526D35F83A -CT=A36A163E8806B1E053EBE439B0D1302F -PT=67CA4B988CCABA4E4DBEE6C387562762 - -I=190 -KEY=9182E40D14973087922631AC781F825E9F5AFB91EA63DF58 -CT=67CA4B988CCABA4E4DBEE6C387562762 -PT=9F404F0E1A9FE5A988CE6E4A54FE9E23 - -I=191 -KEY=7D89ECFC0DCFFE0A0D667EA2628067F7179495DBBE9D417B -CT=9F404F0E1A9FE5A988CE6E4A54FE9E23 -PT=D71EFD794457C71614E4266C77193444 - -I=192 -KEY=AC7A11D29CDA0FB6DA7883DB26D7A0E10370B3B7C984753F -CT=D71EFD794457C71614E4266C77193444 -PT=185DBF418A6834CD118B16EAF381F3CB - -I=193 -KEY=1029D5FA3D38927EC2253C9AACBF942C12FBA55D3A0586F4 -CT=185DBF418A6834CD118B16EAF381F3CB -PT=737A502DEE68DDFA3FEECD42ACE124EA - -I=194 -KEY=F261B484C642750CB15F6CB742D749D62D15681F96E4A21E -CT=737A502DEE68DDFA3FEECD42ACE124EA -PT=FD11B0F356455913E892928B5B16946B - -I=195 -KEY=BCCFAF05FF47A5EC4C4EDC44149210C5C587FA94CDF23675 -CT=FD11B0F356455913E892928B5B16946B -PT=4B06F6D6D149BAF25D4C76E46EFF8571 - -I=196 -KEY=1000A15983B73D6807482A92C5DBAA3798CB8C70A30DB304 -CT=4B06F6D6D149BAF25D4C76E46EFF8571 -PT=450713DA24492403C48CB16D2F39744E - -I=197 -KEY=306F097E64B634AC424F3948E1928E345C473D1D8C34C74A -CT=450713DA24492403C48CB16D2F39744E -PT=998CA5E3C80B66EB11EAD376FA358A92 - -I=198 -KEY=13965208C3EF77E1DBC39CAB2999E8DF4DADEE6B76014DD8 -CT=998CA5E3C80B66EB11EAD376FA358A92 -PT=F54A34F6F0833CA808D60A8F75BB0585 - -I=199 -KEY=1A6DC3FDD0D1F97C2E89A85DD91AD477457BE4E403BA485D -CT=F54A34F6F0833CA808D60A8F75BB0585 -PT=8760D5CBD1DA48807BAEAF7F781680F2 - -I=200 -KEY=228897B4E2F16967A9E97D9608C09CF73ED54B9B7BACC8AF -CT=8760D5CBD1DA48807BAEAF7F781680F2 -PT=EF57DF7161E1BC0F7B466A50C576691A - -I=201 -KEY=D0E8190E72A305C946BEA2E7692120F8459321CBBEDAA1B5 -CT=EF57DF7161E1BC0F7B466A50C576691A -PT=E01ECA338A93EA38E43B2F364314C121 - -I=202 -KEY=087F0486B80659F0A6A068D4E3B2CAC0A1A80EFDFDCE6094 -CT=E01ECA338A93EA38E43B2F364314C121 -PT=A7683273638D02272FF6A311BB94256F - -I=203 -KEY=1D807E4730DDA3EB01C85AA7803FC8E78E5EADEC465A45FB -CT=A7683273638D02272FF6A311BB94256F -PT=1BCC3DF6B07BD2615C13E381F5F877C3 - -I=204 -KEY=D4D4F2780D52D7521A04675130441A86D24D4E6DB3A23238 -CT=1BCC3DF6B07BD2615C13E381F5F877C3 -PT=D1B3B793D1377E82A2DE5D46E53791FB - -I=205 -KEY=86D08D85652DB662CBB7D0C2E17364047093132B5695A3C3 -CT=D1B3B793D1377E82A2DE5D46E53791FB -PT=9AC7AF9B82621E18E4FF613EAA609F46 - -I=206 -KEY=C03996907AC99A7A51707F5963117A1C946C7215FCF53C85 -CT=9AC7AF9B82621E18E4FF613EAA609F46 -PT=57F3FA35A42C29F33DEC4671140264A4 - -I=207 -KEY=F8CA52D95C587EF80683856CC73D53EFA9803464E8F75821 -CT=57F3FA35A42C29F33DEC4671140264A4 -PT=A887ED8BF6C19F5012F317A4FCF3D7BF - -I=208 -KEY=DE99CC8F9756C1DCAE0468E731FCCCBFBB7323C014048F9E -CT=A887ED8BF6C19F5012F317A4FCF3D7BF -PT=A29C8D764BCF211C789158A9B8EB330C - -I=209 -KEY=9228DB1B61E0D8670C98E5917A33EDA3C3E27B69ACEFBC92 -CT=A29C8D764BCF211C789158A9B8EB330C -PT=EB6AFD9B36315DB322EC8C4243043F50 - -I=210 -KEY=24AFE14097C2A217E7F2180A4C02B010E10EF72BEFEB83C2 -CT=EB6AFD9B36315DB322EC8C4243043F50 -PT=05C8AC90CCD00E2A3809C68C11D6D65A - -I=211 -KEY=32810943F9313BD0E23AB49A80D2BE3AD90731A7FE3D5598 -CT=05C8AC90CCD00E2A3809C68C11D6D65A -PT=E39991B58C52154166AD09367B04C67A - -I=212 -KEY=FBEC72A177254EA501A3252F0C80AB7BBFAA3891853993E2 -CT=E39991B58C52154166AD09367B04C67A -PT=CBC8974F72F77A1821FC69B29FE2DB60 - -I=213 -KEY=C706D206DE538439CA6BB2607E77D1639E5651231ADB4882 -CT=CBC8974F72F77A1821FC69B29FE2DB60 -PT=1D08F4E2B8DFED1032B6CA5211B3E34C - -I=214 -KEY=9A7EB0A4F8E67F87D7634682C6A83C73ACE09B710B68ABCE -CT=1D08F4E2B8DFED1032B6CA5211B3E34C -PT=1888CEC22449EFF96BDC2C7A242BBBDC - -I=215 -KEY=70CA2CAD6A50D22BCFEB8840E2E1D38AC73CB70B2F431012 -CT=1888CEC22449EFF96BDC2C7A242BBBDC -PT=032E6155677B6A72D7F94C7A9A9AA53F - -I=216 -KEY=B16697FEA247CDB9CCC5E915859AB9F810C5FB71B5D9B52D -CT=032E6155677B6A72D7F94C7A9A9AA53F -PT=9B43BBD1C0CEBF7593E9BC0ABB626E96 - -I=217 -KEY=7A3E844BEB897A63578652C44554068D832C477B0EBBDBBB -CT=9B43BBD1C0CEBF7593E9BC0ABB626E96 -PT=8D661E03C61C28D5786EBCEBE0D5B63D - -I=218 -KEY=E7A1B96EFC4D5FB5DAE04CC783482E58FB42FB90EE6E6D86 -CT=8D661E03C61C28D5786EBCEBE0D5B63D -PT=F61D5DCBF8F2F3F0EAB387149790E079 - -I=219 -KEY=0EDA761C06FBA0A02CFD110C7BBADDA811F17C8479FE8DFF -CT=F61D5DCBF8F2F3F0EAB387149790E079 -PT=1F03E0957B6892533BBEAB06EB35AD4F - -I=220 -KEY=E242AD5B7141916133FEF19900D24FFB2A4FD78292CB20B0 -CT=1F03E0957B6892533BBEAB06EB35AD4F -PT=BB9E7343035F88764B229D506E7ADC7B - -I=221 -KEY=D901A6CF874A6A77886082DA038DC78D616D4AD2FCB1FCCB -CT=BB9E7343035F88764B229D506E7ADC7B -PT=3934EBF7AD2243C0D09734E30B41C0E4 - -I=222 -KEY=0F488E86E7D92F29B154692DAEAF844DB1FA7E31F7F03C2F -CT=3934EBF7AD2243C0D09734E30B41C0E4 -PT=B9CE1A1A9595E7235F5B10FBA29ACCD2 - -I=223 -KEY=A7E2CF991692247A089A73373B3A636EEEA16ECA556AF0FD -CT=B9CE1A1A9595E7235F5B10FBA29ACCD2 -PT=624EBA65EE9E3E1BDF8C5AA7E1283A65 - -I=224 -KEY=1DE03E09395E56CE6AD4C952D5A45D75312D346DB442CA98 -CT=624EBA65EE9E3E1BDF8C5AA7E1283A65 -PT=375132E5F47DA19E80CC8652BE5A3692 - -I=225 -KEY=51B6813629EFE53C5D85FBB721D9FCEBB1E1B23F0A18FC0A -CT=375132E5F47DA19E80CC8652BE5A3692 -PT=8165A4126FE75EFC6AFF7BFD732F94A6 - -I=226 -KEY=8DD50DFF93624339DCE05FA54E3EA217DB1EC9C2793768AC -CT=8165A4126FE75EFC6AFF7BFD732F94A6 -PT=35012FABD289E6B7FB07946591D18F0D - -I=227 -KEY=C7A4F75CB74C7F3DE9E1700E9CB744A020195DA7E8E6E7A1 -CT=35012FABD289E6B7FB07946591D18F0D -PT=C26F37D700677ED72F4FC2C8F6AEADE2 - -I=228 -KEY=198B572CD0E711352B8E47D99CD03A770F569F6F1E484A43 -CT=C26F37D700677ED72F4FC2C8F6AEADE2 -PT=CB29ECE41596736B72AED2460AEEFBA2 - -I=229 -KEY=0A1FB41CA720E357E0A7AB3D8946491C7DF84D2914A6B1E1 -CT=CB29ECE41596736B72AED2460AEEFBA2 -PT=7F7BD6FAF9C37D5522A3BF480CCEBF20 - -I=230 -KEY=7E383601899DEA729FDC7DC7708534495F5BF26118680EC1 -CT=7F7BD6FAF9C37D5522A3BF480CCEBF20 -PT=C501E371005DF57E0037F41A744D026F - -I=231 -KEY=13ACF410865B41E15ADD9EB670D8C1375F6C067B6C250CAE -CT=C501E371005DF57E0037F41A744D026F -PT=624EF8749580108CDC7A020179F81D0F - -I=232 -KEY=75F025072AA2406F389366C2E558D1BB8316047A15DD11A1 -CT=624EF8749580108CDC7A020179F81D0F -PT=40D72550603522C67180DE6EC3D30139 - -I=233 -KEY=C5ED76F88EA65C3D78444392856DF37DF296DA14D60E1098 -CT=40D72550603522C67180DE6EC3D30139 -PT=96C6F647AFB90F804431F9E2F1780F29 - -I=234 -KEY=E827DFF88D0B1A43EE82B5D52AD4FCFDB6A723F627761FB1 -CT=96C6F647AFB90F804431F9E2F1780F29 -PT=CCB934A501DDAD11E994938A214EB189 - -I=235 -KEY=F0777D1BFF12EE42223B81702B0951EC5F33B07C0638AE38 -CT=CCB934A501DDAD11E994938A214EB189 -PT=07825F2D35E761C76893B697E30E4D08 - -I=236 -KEY=6912B59C06C90D3725B9DE5D1EEE302B37A006EBE536E330 -CT=07825F2D35E761C76893B697E30E4D08 -PT=1F674E97F88EB1DA1DD24C0AB4321258 - -I=237 -KEY=AE24933526FAE5F83ADE90CAE66081F12A724AE15104F168 -CT=1F674E97F88EB1DA1DD24C0AB4321258 -PT=B6DE499EBE0B3C30F1DAC8E40FE9F10C - -I=238 -KEY=F348F88852CF356C8C00D954586BBDC1DBA882055EED0064 -CT=B6DE499EBE0B3C30F1DAC8E40FE9F10C -PT=105E31DBDE33764B098862AF6D0B6CD2 - -I=239 -KEY=83B06CC00A17D3149C5EE88F8658CB8AD220E0AA33E66CB6 -CT=105E31DBDE33764B098862AF6D0B6CD2 -PT=697D6537677B20C188246FBF4997C7CB - -I=240 -KEY=A5381A9C91D61A01F5238DB8E123EB4B5A048F157A71AB7D -CT=697D6537677B20C188246FBF4997C7CB -PT=4FBFB0EFBA92C1E0189E2C3097AA35BA - -I=241 -KEY=FDF831A7D1345AFEBA9C3D575BB12AAB429AA325EDDB9EC7 -CT=4FBFB0EFBA92C1E0189E2C3097AA35BA -PT=600288531DCEB99B69A7890CE804FA9F - -I=242 -KEY=A10ED54E7B2B2B2BDA9EB504467F93302B3D2A2905DF6458 -CT=600288531DCEB99B69A7890CE804FA9F -PT=EE94D4376D9332C8DCD05C695EDB124F - -I=243 -KEY=2F69F01250D7745F340A61332BECA1F8F7ED76405B047617 -CT=EE94D4376D9332C8DCD05C695EDB124F -PT=7EDC3182C36DC5A172B170A919524888 - -I=244 -KEY=FCD5F8FAB347624E4AD650B1E8816459855C06E942563E9F -CT=7EDC3182C36DC5A172B170A919524888 -PT=95FA03C96DFCB9ABCFF23B5ABFBABCDE - -I=245 -KEY=A9307E62197A747EDF2C5378857DDDF24AAE3DB3FDEC8241 -CT=95FA03C96DFCB9ABCFF23B5ABFBABCDE -PT=6CE2C6CFC61667965C20B0BE11B55DDE - -I=246 -KEY=DA3B03896DDFDE08B3CE95B7436BBA64168E8D0DEC59DF9F -CT=6CE2C6CFC61667965C20B0BE11B55DDE -PT=3DBDFBE63A6FAE7572C778108A62A27C - -I=247 -KEY=7D766BAD6E536CE38E736E51790414116449F51D663B7DE3 -CT=3DBDFBE63A6FAE7572C778108A62A27C -PT=1C197D3449FED6ED6924E14B43A17BF0 - -I=248 -KEY=36F69C30B0272CAB926A136530FAC2FC0D6D1456259A0613 -CT=1C197D3449FED6ED6924E14B43A17BF0 -PT=0B0CCC6F508C18168284F7976AD81BEE - -I=249 -KEY=632661C312B2EB5D9966DF0A6076DAEA8FE9E3C14F421DFD -CT=0B0CCC6F508C18168284F7976AD81BEE -PT=F437B8FD92CE37D8D74550C5BE29BF99 - -I=250 -KEY=5FB1BDFC29EFE2DA6D5167F7F2B8ED3258ACB304F16BA264 -CT=F437B8FD92CE37D8D74550C5BE29BF99 -PT=78F6E6F6480A04F5632EA112170F928C - -I=251 -KEY=2B24C5188F4A2E7B15A78101BAB2E9C73B821216E66430E8 -CT=78F6E6F6480A04F5632EA112170F928C -PT=2FD38831EE4D09DD8DB9A84B5825B528 - -I=252 -KEY=F816FB720A08828C3A74093054FFE01AB63BBA5DBE4185C0 -CT=2FD38831EE4D09DD8DB9A84B5825B528 -PT=ED307697B51CFAD7052A3A7B3A564990 - -I=253 -KEY=776B08F4778FAB96D7447FA7E1E31ACDB31180268417CC50 -CT=ED307697B51CFAD7052A3A7B3A564990 -PT=DB9952A98F0D4B045C624EFA5619CAF9 - -I=254 -KEY=C7A944C9BA2D5F740CDD2D0E6EEE51C9EF73CEDCD20E06A9 -CT=DB9952A98F0D4B045C624EFA5619CAF9 -PT=DADA40BF0E367AF50874BB2628251AA3 - -I=255 -KEY=69B8688D9C1ECD95D6076DB160D82B3CE70775FAFA2B1C0A -CT=DADA40BF0E367AF50874BB2628251AA3 -PT=35DFA85D3F2D7F47DD7865EA0BC73A5C - -I=256 -KEY=7E6C7E90EDE36F44E3D8C5EC5FF5547B3A7F1010F1EC2656 -CT=35DFA85D3F2D7F47DD7865EA0BC73A5C -PT=EE0231F994C2DB6C7C04746170F03E54 - -I=257 -KEY=0E56C8FD184AB5D40DDAF415CB378F17467B6471811C1802 -CT=EE0231F994C2DB6C7C04746170F03E54 -PT=D9F314FEAD11122CE8F532ED0C0B129C - -I=258 -KEY=267BC5325796002BD429E0EB66269D3BAE8E569C8D170A9E -CT=D9F314FEAD11122CE8F532ED0C0B129C -PT=74A32BDFF53A59F09AAFB328977E05B1 - -I=259 -KEY=889B6087CAAD1B43A08ACB34931CC4CB3421E5B41A690F2F -CT=74A32BDFF53A59F09AAFB328977E05B1 -PT=D4CCC3077C15EE470D5EFCF815A48410 - -I=260 -KEY=F9AE78D077E3F98574460833EF092A8C397F194C0FCD8B3F -CT=D4CCC3077C15EE470D5EFCF815A48410 -PT=29284B0E7776DFB8BB536B3C16399D62 - -I=261 -KEY=71BBCD4B1F4B04265D6E433D987FF534822C727019F4165D -CT=29284B0E7776DFB8BB536B3C16399D62 -PT=202326CEAD57A5C13592FFBFFD5BF508 - -I=262 -KEY=F6F461C7931CF0317D4D65F3352850F5B7BE8DCFE4AFE355 -CT=202326CEAD57A5C13592FFBFFD5BF508 -PT=B9AFAD0658E1A4A1EECAA25B2863AD53 - -I=263 -KEY=BC0D82D3B7909D54C4E2C8F56DC9F45459742F94CCCC4E06 -CT=B9AFAD0658E1A4A1EECAA25B2863AD53 -PT=DE7AC7F7381DD34F3148911F306F4161 - -I=264 -KEY=339FFE2E01AB1D621A980F0255D4271B683CBE8BFCA30F67 -CT=DE7AC7F7381DD34F3148911F306F4161 -PT=F197DE9FED1EA08F6C17E631BF5449FE - -I=265 -KEY=EC908F9A4F266644EB0FD19DB8CA8794042B58BA43F74699 -CT=F197DE9FED1EA08F6C17E631BF5449FE -PT=7E1416C06ED3F56782DB5CB536B9B56E - -I=266 -KEY=CFE36CCCC94F8A5B951BC75DD61972F386F0040F754EF3F7 -CT=7E1416C06ED3F56782DB5CB536B9B56E -PT=BE1FE1F7B4CFF55D15BBCB6D9313729D - -I=267 -KEY=90690906407FB8AC2B0426AA62D687AE934BCF62E65D816A -CT=BE1FE1F7B4CFF55D15BBCB6D9313729D -PT=50E6818C06583D3D1C99C4A127D118CF - -I=268 -KEY=5D2A712578EC47217BE2A726648EBA938FD20BC3C18C99A5 -CT=50E6818C06583D3D1C99C4A127D118CF -PT=E1BFD3ED18E9A6D7BF383D590DA23B59 - -I=269 -KEY=3CA141EE57D7E0FC9A5D74CB7C671C4430EA369ACC2EA2FC -CT=E1BFD3ED18E9A6D7BF383D590DA23B59 -PT=03961127347C141C01F5276CB9BB31F7 - -I=270 -KEY=65E9B8AE22DC52A599CB65EC481B0858311F11F67595930B -CT=03961127347C141C01F5276CB9BB31F7 -PT=E9A8336DC0B530A86988B2DE74EDFFA1 - -I=271 -KEY=870A30E0F3B836FA7063568188AE38F05897A32801786CAA -CT=E9A8336DC0B530A86988B2DE74EDFFA1 -PT=B5FA5E388CFFFE2BA33436CC39A73972 - -I=272 -KEY=4B81E55C765F570CC59908B90451C6DBFBA395E438DF55D8 -CT=B5FA5E388CFFFE2BA33436CC39A73972 -PT=CEF4896BBC86F1E02312479C40D96DAE - -I=273 -KEY=0FAB0DCFB6E3E7940B6D81D2B8D7373BD8B1D27878063876 -CT=CEF4896BBC86F1E02312479C40D96DAE -PT=F195F5321FCAA68B0B0CBA83978A8084 - -I=274 -KEY=F860076D3847A80BFAF874E0A71D91B0D3BD68FBEF8CB8F2 -CT=F195F5321FCAA68B0B0CBA83978A8084 -PT=861575205386223EBC6B48B22C35A2A6 - -I=275 -KEY=B2DB77DC3E18C3A77CED01C0F49BB38E6FD62049C3B91A54 -CT=861575205386223EBC6B48B22C35A2A6 -PT=DC074F3D41C62DA9D609A982DEB9E074 - -I=276 -KEY=E632B0C6EE68910EA0EA4EFDB55D9E27B9DF89CB1D00FA20 -CT=DC074F3D41C62DA9D609A982DEB9E074 -PT=6933F4F193B028A22B913453B0B4C9A2 - -I=277 -KEY=88AA3FEE5FDFA336C9D9BA0C26EDB685924EBD98ADB43382 -CT=6933F4F193B028A22B913453B0B4C9A2 -PT=56811E665DDFBEA07A7C2C762F0D5C73 - -I=278 -KEY=2A0A1FE31ADFC64F9F58A46A7B320825E83291EE82B96FF1 -CT=56811E665DDFBEA07A7C2C762F0D5C73 -PT=CFF92E47C8C973ADA7B57D9FE320B356 - -I=279 -KEY=7958F9D10B6DC91050A18A2DB3FB7B884F87EC716199DCA7 -CT=CFF92E47C8C973ADA7B57D9FE320B356 -PT=A55A4F827552761580DC27E0712051B1 - -I=280 -KEY=ADDB73FE13D439CAF5FBC5AFC6A90D9DCF5BCB9110B98D16 -CT=A55A4F827552761580DC27E0712051B1 -PT=734B095C3C54FCDE26C33659C82CACCB - -I=281 -KEY=E979AF9C739F60AE86B0CCF3FAFDF143E998FDC8D89521DD -CT=734B095C3C54FCDE26C33659C82CACCB -PT=122A4F2ADE6C69364943658517A56587 - -I=282 -KEY=E05BDC75E94EB2A8949A83D924919875A0DB984DCF30445A -CT=122A4F2ADE6C69364943658517A56587 -PT=C6EF3170C5EF69B479AC6653E8B7E979 - -I=283 -KEY=67AF0BE0DE572F595275B2A9E17EF1C1D977FE1E2787AD23 -CT=C6EF3170C5EF69B479AC6653E8B7E979 -PT=51113FF8A1000A5449F24E8E5363FB72 - -I=284 -KEY=7C8DCBB512AE775603648D51407EFB959085B09074E45651 -CT=51113FF8A1000A5449F24E8E5363FB72 -PT=B9341E24A41C9D9CE56D6E4F17A7A311 - -I=285 -KEY=EEBE49DAF88030F5BA509375E462660975E8DEDF6343F540 -CT=B9341E24A41C9D9CE56D6E4F17A7A311 -PT=26A135C466B061791DE40A40E9366FC6 - -I=286 -KEY=A06A0B9127769EF79CF1A6B182D20770680CD49F8A759A86 -CT=26A135C466B061791DE40A40E9366FC6 -PT=AE832B68C147CF8A70A8E5CCC3FF05F2 - -I=287 -KEY=CD394B7808099B2832728DD94395C8FA18A43153498A9F74 -CT=AE832B68C147CF8A70A8E5CCC3FF05F2 -PT=72747F478E3AE57C6C7D6D4E5C4FCE71 - -I=288 -KEY=80D4A1BD538D11434006F29ECDAF2D8674D95C1D15C55105 -CT=72747F478E3AE57C6C7D6D4E5C4FCE71 -PT=21539022400BEE401E8FE7E9F0F7AAC3 - -I=289 -KEY=C8BCB868E11B46E3615562BC8DA4C3C66A56BBF4E532FBC6 -CT=21539022400BEE401E8FE7E9F0F7AAC3 -PT=44149C7C375F07B7169C8A9A14133C8C - -I=290 -KEY=DFC35DD4FAD95C2A2541FEC0BAFBC4717CCA316EF121C74A -CT=44149C7C375F07B7169C8A9A14133C8C -PT=2A7FA9D2EACC0C5444510E7D69EB3FD6 - -I=291 -KEY=73B0B53EE6D591140F3E57125037C825389B3F1398CAF89C -CT=2A7FA9D2EACC0C5444510E7D69EB3FD6 -PT=9949145B8C88D03BBA46FEBE9856B732 - -I=292 -KEY=7BFBD6A0A317DEE996774349DCBF181E82DDC1AD009C4FAE -CT=9949145B8C88D03BBA46FEBE9856B732 -PT=714E072347ECDEA4F8EB2B02746FBC66 - -I=293 -KEY=CA326A1D191B2BC6E739446A9B53C6BA7A36EAAF74F3F3C8 -CT=714E072347ECDEA4F8EB2B02746FBC66 -PT=CCF2295814759A5004E8C3E2B97C4958 - -I=294 -KEY=428400F7196D32C62BCB6D328F265CEA7EDE294DCD8FBA90 -CT=CCF2295814759A5004E8C3E2B97C4958 -PT=12108AB0753EAAE007DEFF2EBA8A3EF0 - -I=295 -KEY=3E38F6FA3F49742339DBE782FA18F60A7900D66377058460 -CT=12108AB0753EAAE007DEFF2EBA8A3EF0 -PT=0109AC127FB55B91BC922EDFF3C43819 - -I=296 -KEY=07C585ABD1C227D638D24B9085ADAD9BC592F8BC84C1BC79 -CT=0109AC127FB55B91BC922EDFF3C43819 -PT=33FF03F6966E81EE28889CFA0B9BA8B9 - -I=297 -KEY=FB823872148252C20B2D486613C32C75ED1A64468F5A14C0 -CT=33FF03F6966E81EE28889CFA0B9BA8B9 -PT=D8468C180BAC0F6D703611DDAD951014 - -I=298 -KEY=F81900EAD21ECE3BD36BC47E186F23189D2C759B22CF04D4 -CT=D8468C180BAC0F6D703611DDAD951014 -PT=07994906A8377D64F2D32DB4BB170EF1 - -I=299 -KEY=2ADC8C0244307531D4F28D78B0585E7C6FFF582F99D80A25 -CT=07994906A8377D64F2D32DB4BB170EF1 -PT=48382015F82AA7EC8944C40275595CEF - -I=300 -KEY=2E917F5C5BAB80939CCAAD6D4872F990E6BB9C2DEC8156CA -CT=48382015F82AA7EC8944C40275595CEF -PT=D4EEE0A1A56118EB8F6AE16FE16F70ED - -I=301 -KEY=126D396B29E0252248244DCCED13E17B69D17D420DEE2627 -CT=D4EEE0A1A56118EB8F6AE16FE16F70ED -PT=358E5FAE4A4ED6B1058E32942AE030DB - -I=302 -KEY=D390A60684F5C9147DAA1262A75D37CA6C5F4FD6270E16FC -CT=358E5FAE4A4ED6B1058E32942AE030DB -PT=B9730D311EA8312DAC34F444A4560DDC - -I=303 -KEY=0B2A03E62FCD9B06C4D91F53B9F506E7C06BBB9283581B20 -CT=B9730D311EA8312DAC34F444A4560DDC -PT=D64F286B32B4058A51B73844BCA93DDA - -I=304 -KEY=5858183C5713BBD6129637388B41036D91DC83D63FF126FA -CT=D64F286B32B4058A51B73844BCA93DDA -PT=78425B7FE64D972C642ED17369ED8844 - -I=305 -KEY=C555D9DC23D3A1846AD46C476D0C9441F5F252A5561CAEBE -CT=78425B7FE64D972C642ED17369ED8844 -PT=2DE9202F4CD7F67C7B7F94CF7F3B9B5A - -I=306 -KEY=7BA871DA6E336CFA473D4C6821DB623D8E8DC66A292735E4 -CT=2DE9202F4CD7F67C7B7F94CF7F3B9B5A -PT=A30322EC9A51266B50153995BCEBC846 - -I=307 -KEY=55BF35687EBA169AE43E6E84BB8A4456DE98FFFF95CCFDA2 -CT=A30322EC9A51266B50153995BCEBC846 -PT=14754B0469683F36E4791FD9B8B1C585 - -I=308 -KEY=0404CAE90360F118F04B2580D2E27B603AE1E0262D7D3827 -CT=14754B0469683F36E4791FD9B8B1C585 -PT=E8592DC147A1DC4F48D43E365B9D63FF - -I=309 -KEY=109E16AA717A4EF4181208419543A72F7235DE1076E05BD8 -CT=E8592DC147A1DC4F48D43E365B9D63FF -PT=47A3BF0743562C7D412563C94C2CD717 - -I=310 -KEY=0A8DC7647F8C06D15FB1B746D6158B523310BDD93ACC8CCF -CT=47A3BF0743562C7D412563C94C2CD717 -PT=63F8C6A062937471364050815D856793 - -I=311 -KEY=CC9B8854C13F73623C4971E6B486FF230550ED586749EB5C -CT=63F8C6A062937471364050815D856793 -PT=E70443AF44BF549607251A86CD83A4D3 - -I=312 -KEY=2D067D896DF1E749DB4D3249F039ABB50275F7DEAACA4F8F -CT=E70443AF44BF549607251A86CD83A4D3 -PT=ACEF2AE95CA660AEE513BF48BCF7D125 - -I=313 -KEY=DEC45DD3C0DAD30A77A218A0AC9FCB1BE7664896163D9EAA -CT=ACEF2AE95CA660AEE513BF48BCF7D125 -PT=859E9E4001245A50ED76055539672F1A - -I=314 -KEY=6F208E93D9C89CE8F23C86E0ADBB914B0A104DC32F5AB1B0 -CT=859E9E4001245A50ED76055539672F1A -PT=42B059061FE4C86C7AC2B7C8B62820C2 - -I=315 -KEY=86EC7CE558994E8EB08CDFE6B25F592770D2FA0B99729172 -CT=42B059061FE4C86C7AC2B7C8B62820C2 -PT=01C6296F1532450F182D6A3FC8249DD7 - -I=316 -KEY=C74B31CEC9B31130B14AF689A76D1C2868FF903451560CA5 -CT=01C6296F1532450F182D6A3FC8249DD7 -PT=14334054946821E3FE8D72D1EF402EE1 - -I=317 -KEY=AC636B2AD3699560A579B6DD33053DCB9672E2E5BE162244 -CT=14334054946821E3FE8D72D1EF402EE1 -PT=F09B2FE9A8F17CD847532D4979D2A8C4 - -I=318 -KEY=6F956E3680FC783155E299349BF44113D121CFACC7C48A80 -CT=F09B2FE9A8F17CD847532D4979D2A8C4 -PT=4C97BD8822E63C7A2EE0E444563AF1C8 - -I=319 -KEY=C69B2FB718C41B1A197524BCB9127D69FFC12BE891FE7B48 -CT=4C97BD8822E63C7A2EE0E444563AF1C8 -PT=344E85BE2C8B36430C8058B310062171 - -I=320 -KEY=BFFA143B8A18CACF2D3BA10295994B2AF341735B81F85A39 -CT=344E85BE2C8B36430C8058B310062171 -PT=FF3F882CB22D13A8631DCA6DD702D0E0 - -I=321 -KEY=22F58A0FC077AB5FD204292E27B45882905CB93656FA8AD9 -CT=FF3F882CB22D13A8631DCA6DD702D0E0 -PT=866B2E52CF71505973D9D6642C8178BB - -I=322 -KEY=DC8CE7A9130F3662546F077CE8C508DBE3856F527A7BF262 -CT=866B2E52CF71505973D9D6642C8178BB -PT=4802741ADF67A3811A8AEC7008D8827E - -I=323 -KEY=743B09AA8FD3C6A01C6D736637A2AB5AF90F832272A3701C -CT=4802741ADF67A3811A8AEC7008D8827E -PT=FD3701579815D02BE878C74ABB98C59B - -I=324 -KEY=865B3EC9EFBE27D0E15A7231AFB77B7111774468C93BB587 -CT=FD3701579815D02BE878C74ABB98C59B -PT=99BCA8250D54F3A9A72054AF5578F842 - -I=325 -KEY=041C037E08923FFF78E6DA14A2E388D8B65710C79C434DC5 -CT=99BCA8250D54F3A9A72054AF5578F842 -PT=F0DA5C0E446547356D5027BA346A831C - -I=326 -KEY=FBABCE025CF5FF3D883C861AE686CFEDDB07377DA829CED9 -CT=F0DA5C0E446547356D5027BA346A831C -PT=EED0140AF408652DD879E3289536C389 - -I=327 -KEY=3F12399A3E5C0F9566EC9210128EAAC0037ED4553D1F0D50 -CT=EED0140AF408652DD879E3289536C389 -PT=FDC7299A95BDB941A299478B7B409EF8 - -I=328 -KEY=D541517B701036E39B2BBB8A87331381A1E793DE465F93A8 -CT=FDC7299A95BDB941A299478B7B409EF8 -PT=5BE5AEC30578CD03BA7B17E8B16AAFBF - -I=329 -KEY=6657840FF425DD8AC0CE1549824BDE821B9C8436F7353C17 -CT=5BE5AEC30578CD03BA7B17E8B16AAFBF -PT=3C7A9745F48DA61CF7875A449E24C735 - -I=330 -KEY=52D29BBD64550DFBFCB4820C76C6789EEC1BDE726911FB22 -CT=3C7A9745F48DA61CF7875A449E24C735 -PT=69516DE0343F3552830D28CE8B9A282C - -I=331 -KEY=3699B16BB0349B9195E5EFEC42F94DCC6F16F6BCE28BD30E -CT=69516DE0343F3552830D28CE8B9A282C -PT=EB09EE300286690EA65A30526A43B86B - -I=332 -KEY=60E79B9E7C41814E7EEC01DC407F24C2C94CC6EE88C86B65 -CT=EB09EE300286690EA65A30526A43B86B -PT=A235384FE517A5F455BBE6B850C05E33 - -I=333 -KEY=11F650282BBCB584DCD93993A56881369CF72056D8083556 -CT=A235384FE517A5F455BBE6B850C05E33 -PT=41E297350390E91EC00FF875B3CA60BA - -I=334 -KEY=11B449F7EE983AB89D3BAEA6A6F868285CF8D8236BC255EC -CT=41E297350390E91EC00FF875B3CA60BA -PT=5FB9F6408D54401A9A76288AE3A04944 - -I=335 -KEY=54CBA9A5782ED91FC28258E62BAC2832C68EF0A988621CA8 -CT=5FB9F6408D54401A9A76288AE3A04944 -PT=7C9CD2510E96FF37BF75E57E84098535 - -I=336 -KEY=871169F28E704C95BE1E8AB7253AD70579FB15D70C6B999D -CT=7C9CD2510E96FF37BF75E57E84098535 -PT=8E041B8C74A84D747B02714452B34F11 - -I=337 -KEY=7F44ED6AA755957A301A913B51929A7102F964935ED8D68C -CT=8E041B8C74A84D747B02714452B34F11 -PT=3698639F56657A40D52B9B8015448C2A - -I=338 -KEY=EEAF09001996BA6E0682F2A407F7E031D7D2FF134B9C5AA6 -CT=3698639F56657A40D52B9B8015448C2A -PT=79FB5E4A065D29E1CA3E15897B60032F - -I=339 -KEY=D21CCA06254A64C97F79ACEE01AAC9D01DECEA9A30FC5989 -CT=79FB5E4A065D29E1CA3E15897B60032F -PT=C582F5F8D9D2E9323C769B2B1AE369BD - -I=340 -KEY=29D2F84E4568BA6FBAFB5916D87820E2219A71B12A1F3034 -CT=C582F5F8D9D2E9323C769B2B1AE369BD -PT=916405DC8F2AD50548997D87BCCADBFB - -I=341 -KEY=43AC4D54A8A0222F2B9F5CCA5752F5E769030C3696D5EBCF -CT=916405DC8F2AD50548997D87BCCADBFB -PT=0E9FF0E147A47056EC6B09837C9E0E62 - -I=342 -KEY=9AF110B8274794772500AC2B10F685B1856805B5EA4BE5AD -CT=0E9FF0E147A47056EC6B09837C9E0E62 -PT=3B6E3CAAC358427980E66E3D30D39E4F - -I=343 -KEY=49F910E7957BC95C1E6E9081D3AEC7C8058E6B88DA987BE2 -CT=3B6E3CAAC358427980E66E3D30D39E4F -PT=25CBE5AB4C6785C0F2847CF89F2635AB - -I=344 -KEY=64D90092DD97AC3C3BA5752A9FC94208F70A177045BE4E49 -CT=25CBE5AB4C6785C0F2847CF89F2635AB -PT=3D9200D39461D8B2CE7874DA20BFD9DA - -I=345 -KEY=C7A8403AFB011673063775F90BA89ABA397263AA65019793 -CT=3D9200D39461D8B2CE7874DA20BFD9DA -PT=E61E7E06A1E1F656AE8F8C29C96E5A16 - -I=346 -KEY=071AF635AF7A9602E0290BFFAA496CEC97FDEF83AC6FCD85 -CT=E61E7E06A1E1F656AE8F8C29C96E5A16 -PT=7488BB35F06E94F31A744D1EA95E71D0 - -I=347 -KEY=A4B5ECB7047E08D694A1B0CA5A27F81F8D89A29D0531BC55 -CT=7488BB35F06E94F31A744D1EA95E71D0 -PT=3912DC00C0AB79C473CA2CC8F69262F0 - -I=348 -KEY=BD4478B38A0E9347ADB36CCA9A8C81DBFE438E55F3A3DEA5 -CT=3912DC00C0AB79C473CA2CC8F69262F0 -PT=C4B546F134A016DADA8E7C478B1E7D45 - -I=349 -KEY=F7B6F476517483AD69062A3BAE2C970124CDF21278BDA3E0 -CT=C4B546F134A016DADA8E7C478B1E7D45 -PT=298524C5D468EBFA97DEFEC7B80EE752 - -I=350 -KEY=8E0C5244F7417C2440830EFE7A447CFBB3130CD5C0B344B2 -CT=298524C5D468EBFA97DEFEC7B80EE752 -PT=B27EFB90BA3A27A1077C6742D5B68396 - -I=351 -KEY=C6E8F264FA0C9A9AF2FDF56EC07E5B5AB46F6B971505C724 -CT=B27EFB90BA3A27A1077C6742D5B68396 -PT=D02C27A94DD3B772B338C7462379B009 - -I=352 -KEY=AD694D243DCC6B7B22D1D2C78DADEC280757ACD1367C772D -CT=D02C27A94DD3B772B338C7462379B009 -PT=1CED06084E67BA4BAD3C331F4074B9FF - -I=353 -KEY=68AEF48D86D395583E3CD4CFC3CA5663AA6B9FCE7608CED2 -CT=1CED06084E67BA4BAD3C331F4074B9FF -PT=C0D7811FE8630B3E7C3A60DA9042A6B2 - -I=354 -KEY=670A8D40573F598AFEEB55D02BA95D5DD651FF14E64A6860 -CT=C0D7811FE8630B3E7C3A60DA9042A6B2 -PT=45F92C84CE2AEC6E7953C8AAC5901D0F - -I=355 -KEY=D44FD97B0D59C923BB127954E583B133AF0237BE23DA756F -CT=45F92C84CE2AEC6E7953C8AAC5901D0F -PT=23A4863C994EFE93E7CE1C89FE14143D - -I=356 -KEY=4E08C6A539C74A6598B6FF687CCD4FA048CC2B37DDCE6152 -CT=23A4863C994EFE93E7CE1C89FE14143D -PT=85EB5F46988211E3077FDBE38F1EBE6B - -I=357 -KEY=21B17D5E461224B31D5DA02EE44F5E434FB3F0D452D0DF39 -CT=85EB5F46988211E3077FDBE38F1EBE6B -PT=59CF6CCC81A8BC17A52D7550B40C7514 - -I=358 -KEY=6CC595309F161F3E4492CCE265E7E254EA9E8584E6DCAA2D -CT=59CF6CCC81A8BC17A52D7550B40C7514 -PT=13DF4C2AA74A4B9123B3A57FE94F85BE - -I=359 -KEY=77B90151B41B1B7D574D80C8C2ADA9C5C92D20FB0F932F93 -CT=13DF4C2AA74A4B9123B3A57FE94F85BE -PT=6DEDE53AD5DC2A87744DA0EA561977A3 - -I=360 -KEY=8E1683C57C1817C23AA065F217718342BD608011598A5830 -CT=6DEDE53AD5DC2A87744DA0EA561977A3 -PT=F9D912AAB5ED1ACBD0475411DF98F49C - -I=361 -KEY=E9FDD94AE4B4FABAC3797758A29C99896D27D4008612ACAC -CT=F9D912AAB5ED1ACBD0475411DF98F49C -PT=853C907D9FD35B61D2ABBE5C1A89DB4B - -I=362 -KEY=BCC524DF4D452AE14645E7253D4FC2E8BF8C6A5C9C9B77E7 -CT=853C907D9FD35B61D2ABBE5C1A89DB4B -PT=874C4BC1993FBA12136443B57F9523BE - -I=363 -KEY=9F5EFA7196589240C109ACE4A47078FAACE829E9E30E5459 -CT=874C4BC1993FBA12136443B57F9523BE -PT=E6B6E9133DD0EC2844EF3CC0C2F9E4AC - -I=364 -KEY=2F0731DB4FA3024127BF45F799A094D2E807152921F7B0F5 -CT=E6B6E9133DD0EC2844EF3CC0C2F9E4AC -PT=20B41EE01134041DF8D11BB7F86928EA - -I=365 -KEY=7E44D240F06AAA5E070B5B17889490CF10D60E9ED99E981F -CT=20B41EE01134041DF8D11BB7F86928EA -PT=BF6B03096DCDC052B1325CC34BF6E56C - -I=366 -KEY=D8D3E3D538C8CA34B860581EE559509DA1E4525D92687D73 -CT=BF6B03096DCDC052B1325CC34BF6E56C -PT=5ED3E40FB5C34DD1F370C3AD72C7C24D - -I=367 -KEY=F3DF20767CDA5E0CE6B3BC11509A1D4C529491F0E0AFBF3E -CT=5ED3E40FB5C34DD1F370C3AD72C7C24D -PT=3EA6BCE2317C5D696DF8240C481B34DD - -I=368 -KEY=484932A15D75173FD81500F361E640253F6CB5FCA8B48BE3 -CT=3EA6BCE2317C5D696DF8240C481B34DD -PT=41D6E077746FE1A9307E1107631A5D2C - -I=369 -KEY=EF960956685DE1CE99C3E0841589A18C0F12A4FBCBAED6CF -CT=41D6E077746FE1A9307E1107631A5D2C -PT=D0C6DDEF0A623686BA303C278D445964 - -I=370 -KEY=82477D8D682C1D4849053D6B1FEB970AB52298DC46EA8FAB -CT=D0C6DDEF0A623686BA303C278D445964 -PT=EEFFA6025D6CAFBF9DC18E5B1B99A6ED - -I=371 -KEY=15D8DCF80A26856AA7FA9B69428738B528E316875D732946 -CT=EEFFA6025D6CAFBF9DC18E5B1B99A6ED -PT=38E222ABAA07CDAE9CC02FAC84EC0FC1 - -I=372 -KEY=556151278277D7579F18B9C2E880F51BB423392BD99F2687 -CT=38E222ABAA07CDAE9CC02FAC84EC0FC1 -PT=B00C719E6A320E4385794EB7F23C0D80 - -I=373 -KEY=777F91003E4410572F14C85C82B2FB58315A779C2BA32B07 -CT=B00C719E6A320E4385794EB7F23C0D80 -PT=0E667CA932023D2EFD8DDBDED5A43D78 - -I=374 -KEY=130507FC817F14432172B4F5B0B0C676CCD7AC42FE07167F -CT=0E667CA932023D2EFD8DDBDED5A43D78 -PT=6B15DA892F0B5916F31BB74FC7D03F9A - -I=375 -KEY=D045A84BBF62DE2E4A676E7C9FBB9F603FCC1B0D39D729E5 -CT=6B15DA892F0B5916F31BB74FC7D03F9A -PT=EBEF6DC298D63BF6E6E46F833B217033 - -I=376 -KEY=7742FB68CDF60735A18803BE076DA496D928748E02F659D6 -CT=EBEF6DC298D63BF6E6E46F833B217033 -PT=48DC6F65F193AFCCE559EA6F04FBD79A - -I=377 -KEY=5CE32BC22C77B664E9546CDBF6FE0B5A3C719EE1060D8E4C -CT=48DC6F65F193AFCCE559EA6F04FBD79A -PT=D0596880F92716C51E41519C640AEFDA - -I=378 -KEY=2DA6B73C5131E24C390D045B0FD91D9F2230CF7D62076196 -CT=D0596880F92716C51E41519C640AEFDA -PT=ABB7C3E499086F53C4DB97640168943B - -I=379 -KEY=E41C1A826978491892BAC7BF96D172CCE6EB5819636FF5AD -CT=ABB7C3E499086F53C4DB97640168943B -PT=0CC58B3D0370317E1025E1AF97962646 - -I=380 -KEY=501012EE411DCDC59E7F4C8295A143B2F6CEB9B6F4F9D3EB -CT=0CC58B3D0370317E1025E1AF97962646 -PT=28920AED2B644C4346FC146903887244 - -I=381 -KEY=97B7E8C1147A5062B6ED466FBEC50FF1B032ADDFF771A1AF -CT=28920AED2B644C4346FC146903887244 -PT=E7A28DA5EC871DAF8C2D196C7ED8977F - -I=382 -KEY=988B9928402BCD63514FCBCA5242125E3C1FB4B389A936D0 -CT=E7A28DA5EC871DAF8C2D196C7ED8977F -PT=013876A92413AED2E360A241FE021B25 - -I=383 -KEY=3432357430ACC9135077BD637651BC8CDF7F16F277AB2DF5 -CT=013876A92413AED2E360A241FE021B25 -PT=10F1A56A8CFDA1D5044D5D0E53F6A773 - -I=384 -KEY=CE94F859CD3E85F440861809FAAC1D59DB324BFC245D8A86 -CT=10F1A56A8CFDA1D5044D5D0E53F6A773 -PT=941C717EE6642DD474719F099AEEB1EB - -I=385 -KEY=A1BFA52EA232FDF0D49A69771CC8308DAF43D4F5BEB33B6D -CT=941C717EE6642DD474719F099AEEB1EB -PT=F31B47230ABC94977E14E1080528C1C9 - -I=386 -KEY=37B36A8E7A3B4F2A27812E541674A41AD15735FDBB9BFAA4 -CT=F31B47230ABC94977E14E1080528C1C9 -PT=A91264221890CA93541B662F64A11C62 - -I=387 -KEY=04F603F98A9D1AC78E934A760EE46E89854C53D2DF3AE6C6 -CT=A91264221890CA93541B662F64A11C62 -PT=05F5171B639825EC67A37B3671F2F884 - -I=388 -KEY=A294EBBBD53D18DD8B665D6D6D7C4B65E2EF28E4AEC81E42 -CT=05F5171B639825EC67A37B3671F2F884 -PT=B6FE84EB2987DE956953DEBA6FD2E029 - -I=389 -KEY=E0E38A82F60E8EED3D98D98644FB95F08BBCF65EC11AFE6B -CT=B6FE84EB2987DE956953DEBA6FD2E029 -PT=2741338CF00FBC70C4B1C67C97E85B97 - -I=390 -KEY=2193D386143F6D761AD9EA0AB4F429804F0D302256F2A5FC -CT=2741338CF00FBC70C4B1C67C97E85B97 -PT=E56C7C453E2E13028AD812F9CDB78E2F - -I=391 -KEY=05AD3BC4F1B29F17FFB5964F8ADA3A82C5D522DB9B452BD3 -CT=E56C7C453E2E13028AD812F9CDB78E2F -PT=9A9B49AC0691F1576D515E935F042229 - -I=392 -KEY=1588C005075F4674652EDFE38C4BCBD5A8847C48C44109FA -CT=9A9B49AC0691F1576D515E935F042229 -PT=143E5F64AD38373D3B54FA24CC7C0AF5 - -I=393 -KEY=731083CCCB22E7CF711080872173FCE893D0866C083D030F -CT=143E5F64AD38373D3B54FA24CC7C0AF5 -PT=61F6AF426601588CB7C525255EC1A06D - -I=394 -KEY=DACEE3906B98DFC110E62FC54772A4642415A34956FCA362 -CT=61F6AF426601588CB7C525255EC1A06D -PT=DB5DC1C3B3413F653D72F8744C2DD881 - -I=395 -KEY=D9ACA0F56DCA4FC0CBBBEE06F4339B0119675B3D1AD17BE3 -CT=DB5DC1C3B3413F653D72F8744C2DD881 -PT=4E9D548DA49E992AD3123F53558909C9 - -I=396 -KEY=12C2FE0C57D21C208526BA8B50AD022BCA75646E4F58722A -CT=4E9D548DA49E992AD3123F53558909C9 -PT=EB2E835192E64ABC30C3F2662B703C47 - -I=397 -KEY=7A43322D6174BA786E0839DAC24B4897FAB6960864284E6D -CT=EB2E835192E64ABC30C3F2662B703C47 -PT=CD0690863F63F2B263D4C11190A7985B - -I=398 -KEY=EBC6D71978D39185A30EA95CFD28BA2599625719F48FD636 -CT=CD0690863F63F2B263D4C11190A7985B -PT=C044E800B65CA78559D0642C370C7D3E - -I=399 -KEY=A1B6CE2EEC5FC386634A415C4B741DA0C0B23335C383AB08 -CT=C044E800B65CA78559D0642C370C7D3E -PT=F1A81B68F6E5A6271A8CB24E7D9491EF - -========================= - -KEYSIZE=256 - -I=0 -KEY=0000000000000000000000000000000000000000000000000000000000000000 -CT=00000000000000000000000000000000 -PT=058CCFFDBBCB382D1F6F56585D8A4ADE - -I=1 -KEY=85C6B2BB2300148F945AEBF1F021CF79058CCFFDBBCB382D1F6F56585D8A4ADE -CT=058CCFFDBBCB382D1F6F56585D8A4ADE -PT=15173A0EB65F5CC05E704EFE61D9E346 - -I=2 -KEY=2447EC44111548FBB670B98F182D5DEE109BF5F30D9464ED411F18A63C53A998 -CT=15173A0EB65F5CC05E704EFE61D9E346 -PT=85F083ACC676D91EDD1ABFB43935237A - -I=3 -KEY=85D3E1D750CAA89BEE274AA7C32C2207956B765FCBE2BDF39C05A71205668AE2 -CT=85F083ACC676D91EDD1ABFB43935237A -PT=42C8F0ABC58E0BEAC32911D2DD9FA8C8 - -I=4 -KEY=CE86B24954745B2BAAF27010202EE7FAD7A386F40E6CB6195F2CB6C0D8F9222A -CT=42C8F0ABC58E0BEAC32911D2DD9FA8C8 -PT=5E44123D2CA07981B073BB2749F557D6 - -I=5 -KEY=CD7BCBBA4555A0D034FD7B528A1D042C89E794C922CCCF98EF5F0DE7910C75FC -CT=5E44123D2CA07981B073BB2749F557D6 -PT=8B649458EA90F4F7E13467E509B7F164 - -I=6 -KEY=EF28DFAED7794B1C7B892F3C98FCDC9602830091C85C3B6F0E6B6A0298BB8498 -CT=8B649458EA90F4F7E13467E509B7F164 -PT=F240D1F579DA2CA8839F7072DF52EBA3 - -I=7 -KEY=C66605EC92F96B49F08CBC6276A0DC68F0C3D164B18617C78DF41A7047E96F3B -CT=F240D1F579DA2CA8839F7072DF52EBA3 -PT=B05297490A394B4A1736DE7F8DC12969 - -I=8 -KEY=347403B6E6344E1525B8D2BD4DCA343F4091462DBBBF5C8D9AC2C40FCA284652 -CT=B05297490A394B4A1736DE7F8DC12969 -PT=8BA49D44B98E67501235CE1C2F26BB28 - -I=9 -KEY=B932CD0C70488602C56F92A0DA57BE27CB35DB6902313BDD88F70A13E50EFD7A -CT=8BA49D44B98E67501235CE1C2F26BB28 -PT=86CE4E4D040C49F2717407157454162E - -I=10 -KEY=28F8B6B4AB2B0B81F3676F6E422D438C4DFB9524063D722FF9830D06915AEB54 -CT=86CE4E4D040C49F2717407157454162E -PT=4E9CA7FB0FF9F38FC821CA91052483F9 - -I=11 -KEY=5CD19F4D3C5B58602B101E15B39F51E4036732DF09C481A031A2C797947E68AD -CT=4E9CA7FB0FF9F38FC821CA91052483F9 -PT=55E49ED59245C1850CB0C17C1CEEA05E - -I=12 -KEY=E822BB0D1F25F3DCA6FE0CB1A8AF39F15683AC0A9B8140253D1206EB8890C8F3 -CT=55E49ED59245C1850CB0C17C1CEEA05E -PT=F7F0BFA319AC289C9F64E6FCDD531B44 - -I=13 -KEY=8B64FF354C6E303F14EA34C9F667FEC9A17313A9822D68B9A276E01755C3D3B7 -CT=F7F0BFA319AC289C9F64E6FCDD531B44 -PT=6ACB8A177226AE47E2170F77D2FE4923 - -I=14 -KEY=1A9D440EBAC3F3625E229B66C5D9249CCBB899BEF00BC6FE4061EF60873D9A94 -CT=6ACB8A177226AE47E2170F77D2FE4923 -PT=BAA9BB819332A87D6004164927EAC699 - -I=15 -KEY=97F92B9AD44A3182FF10E07747C560B37111223F63396E832065F929A0D75C0D -CT=BAA9BB819332A87D6004164927EAC699 -PT=EB84793E2D68632900B0517392EC4B94 - -I=16 -KEY=2AEEBA2AC59870A7B4274B80FE74D55A9A955B014E510DAA20D5A85A323B1799 -CT=EB84793E2D68632900B0517392EC4B94 -PT=6C662FBE2B22394CC1D45453772C72BA - -I=17 -KEY=EEA4B3C4F96C42E3B7DF5A3870C85B69F6F374BF657334E6E101FC0945176523 -CT=6C662FBE2B22394CC1D45453772C72BA -PT=70D2BBC1FA7D49848D94112DA93A3C3C - -I=18 -KEY=F930D1529C654F31549809C6CD5CC4608621CF7E9F0E7D626C95ED24EC2D591F -CT=70D2BBC1FA7D49848D94112DA93A3C3C -PT=1AFF91E67039133946638E4E505310C2 - -I=19 -KEY=5D0F461C1A5FF7BA5C93F0CED9DD49FF9CDE5E98EF376E5B2AF6636ABC7E49DD -CT=1AFF91E67039133946638E4E505310C2 -PT=8E4358B22DE7BCDC8B8409E6250633BF - -I=20 -KEY=AA4B475845EB19F601856A40AB517594129D062AC2D0D287A1726A8C99787A62 -CT=8E4358B22DE7BCDC8B8409E6250633BF -PT=2A79FE5A222C9503954346D6C15AC679 - -I=21 -KEY=9703F4DD85A3BE85343FFD15950A266B38E4F870E0FC478434312C5A5822BC1B -CT=2A79FE5A222C9503954346D6C15AC679 -PT=0FF812C5B863282C294D7069F830EE86 - -I=22 -KEY=3DD1B2ACBC6568851E767D20D82AD324371CEAB5589F6FA81D7C5C33A012529D -CT=0FF812C5B863282C294D7069F830EE86 -PT=D449218625DE49D2B9514E032CA096E7 - -I=23 -KEY=95CC16235D3DFF4F7DB2116D2B380F39E355CB337D41267AA42D12308CB2C47A -CT=D449218625DE49D2B9514E032CA096E7 -PT=F951EAC3BC78DB0AE13FDC33048D2D81 - -I=24 -KEY=A6F55AFBDA7EA939F6F2A28530C416781A0421F0C139FD704512CE03883FE9FB -CT=F951EAC3BC78DB0AE13FDC33048D2D81 -PT=7D5A03A955F6403F918AC915AC22B797 - -I=25 -KEY=7C5D39885F4C0F4FCF672321B711C5B7675E225994CFBD4FD4980716241D5E6C -CT=7D5A03A955F6403F918AC915AC22B797 -PT=CA2E1C274073AD2A3AE35C60ECA52A58 - -I=26 -KEY=4E7B914B84BFA1A2D7BD409AFADD2EDCAD703E7ED4BC1065EE7B5B76C8B87434 -CT=CA2E1C274073AD2A3AE35C60ECA52A58 -PT=C5048FA0148CED10A06E107269DA9C95 - -I=27 -KEY=F62D8C4822C5F89D51E3C68695D91CA66874B1DEC030FD754E154B04A162E8A1 -CT=C5048FA0148CED10A06E107269DA9C95 -PT=CB9B457A7A24577DA71AC335F0572DAB - -I=28 -KEY=C37AAD7CB20087F4B98390C59D3ECFB2A3EFF4A4BA14AA08E90F88315135C50A -CT=CB9B457A7A24577DA71AC335F0572DAB -PT=FA60BFF170DD30C29DF1807C1612CD67 - -I=29 -KEY=1A2C6858B37D0341BF8796FB72D00B72598F4B55CAC99ACA74FE084D4727086D -CT=FA60BFF170DD30C29DF1807C1612CD67 -PT=E2FACFB5DF4E69C911838FCC546D0C8E - -I=30 -KEY=039B73E3A8DCF3C678FBC246AAECDAECBB7584E01587F303657D8781134A04E3 -CT=E2FACFB5DF4E69C911838FCC546D0C8E -PT=749AB2B9176AFDB8B6714DF44BBF2B58 - -I=31 -KEY=773D90EA7ECA29DFD9141A42EB2BBC64CFEF365902ED0EBBD30CCA7558F52FBB -CT=749AB2B9176AFDB8B6714DF44BBF2B58 -PT=0285E58D09A8D33FB196FD16A8DF37C0 - -I=32 -KEY=598262B046B44784D977F6BE2553C6ACCD6AD3D40B45DD84629A3763F02A187B -CT=0285E58D09A8D33FB196FD16A8DF37C0 -PT=1C952C46AE829D8805031A44F9D85521 - -I=33 -KEY=AFAE657D3220CD1E6199A49754525F4AD1FFFF92A5C7400C67992D2709F24D5A -CT=1C952C46AE829D8805031A44F9D85521 -PT=EED0A47E63FF354B4D9C53F7FD75D720 - -I=34 -KEY=A61F583BCFD120B8CABE1E4C616F4FC73F2F5BECC63875472A057ED0F4879A7A -CT=EED0A47E63FF354B4D9C53F7FD75D720 -PT=10C1F0F7C32AD36F03AEA8DCE6AAE7BC - -I=35 -KEY=FB76D4B83A7F50482A92F5A92CB60F522FEEAB1B0512A62829ABD60C122D7DC6 -CT=10C1F0F7C32AD36F03AEA8DCE6AAE7BC -PT=372488DF6543180F1F2AE15E5B0C8785 - -I=36 -KEY=35EAC2BA73F55570CB727220C027FE6218CA23C46051BE27368137524921FA43 -CT=372488DF6543180F1F2AE15E5B0C8785 -PT=3DE420FF3699D68DB69966F57D09045A - -I=37 -KEY=48B6E08B9FD9B5C130E1829CD4540D9C252E033B56C868AA801851A73428FE19 -CT=3DE420FF3699D68DB69966F57D09045A -PT=7858F396DC520131C789CB8F8C919CCD - -I=38 -KEY=DB39C13F29241FF29C5BEB839705AD5B5D76F0AD8A9A699B47919A28B8B962D4 -CT=7858F396DC520131C789CB8F8C919CCD -PT=07BE8BBF9FCD7D04888E61935DD7222F - -I=39 -KEY=A5F9B675531AB58C1FFC316C9359EA335AC87B121557149FCF1FFBBBE56E40FB -CT=07BE8BBF9FCD7D04888E61935DD7222F -PT=EDD619B7C12E2AF6BDAA953B2E7871EF - -I=40 -KEY=A02D1F14A64BBC67DD7EE9EAB3FB0EADB71E62A5D4793E6972B56E80CB163114 -CT=EDD619B7C12E2AF6BDAA953B2E7871EF -PT=C748CDB645F1A1E44A63FAF00B2C3A45 - -I=41 -KEY=177D7A6843B5ABBEB212E68734A7A05C7056AF1391889F8D38D69470C03A0B51 -CT=C748CDB645F1A1E44A63FAF00B2C3A45 -PT=BD3ED4C8CD7DBF4299AC63FE119D291E - -I=42 -KEY=BD9BDC6BD09DEED3E75C918BE55E5332CD687BDB5CF520CFA17AF78ED1A7224F -CT=BD3ED4C8CD7DBF4299AC63FE119D291E -PT=A16B82F958441E90A965427C854EECBB - -I=43 -KEY=E6325C33EC76F8EDE02707A3AE82F1096C03F92204B13E5F081FB5F254E9CEF4 -CT=A16B82F958441E90A965427C854EECBB -PT=E04E642689D1AB78E7CDE26D0563901C - -I=44 -KEY=B8543DB3071AB9F0802D4106FBDA59648C4D9D048D609527EFD2579F518A5EE8 -CT=E04E642689D1AB78E7CDE26D0563901C -PT=08E59C72C13C030DA3C50300861EA097 - -I=45 -KEY=ECDD43A6B225DB325BFFE5462B66E97884A801764C5C962A4C17549FD794FE7F -CT=08E59C72C13C030DA3C50300861EA097 -PT=C224B2EFEE07AAC33F1F6EB1295D9A50 - -I=46 -KEY=741D627C8B47BED4497C71FDC9854912468CB399A25B3CE973083A2EFEC9642F -CT=C224B2EFEE07AAC33F1F6EB1295D9A50 -PT=1653CE734D27B44369D4FE582E7A885F - -I=47 -KEY=A47BDC62B1D80815AC6BF04481C5601F50DF7DEAEF7C88AA1ADCC476D0B3EC70 -CT=1653CE734D27B44369D4FE582E7A885F -PT=CADC89828B6147FAEC581DDCFF3C0960 - -I=48 -KEY=CB91E738F51C111DAC2E0A3BF7B076A39A03F468641DCF50F684D9AA2F8FE510 -CT=CADC89828B6147FAEC581DDCFF3C0960 -PT=49402F0F4AFA2518D57C5D1CFCECC0F2 - -I=49 -KEY=BDA1FFAEE7B93EDFCA4374871A149550D343DB672EE7EA4823F884B6D36325E2 -CT=49402F0F4AFA2518D57C5D1CFCECC0F2 -PT=EBFF53AB449DE5A53EDC6E595AA47B10 - -I=50 -KEY=18D865B8E8C779268D3876C22AF479FB38BC88CC6A7A0FED1D24EAEF89C75EF2 -CT=EBFF53AB449DE5A53EDC6E595AA47B10 -PT=30073458509F9AC9DA21B2DF566AB3BE - -I=51 -KEY=967E2580238300563A34A6E70D84B4FF08BBBC943AE59524C7055830DFADED4C -CT=30073458509F9AC9DA21B2DF566AB3BE -PT=5AB9F90CC2A7603A68E2ACA95A2DE55D - -I=52 -KEY=A469A4E2F0B3847F3B52886FAD7DBAF652024598F842F51EAFE7F49985800811 -CT=5AB9F90CC2A7603A68E2ACA95A2DE55D -PT=F22A13F395B6064172CA9DC572C26B2E - -I=53 -KEY=9EA4946ED73FF8BB8700C18967C01968A028566B6DF4F35FDD2D695CF742633F -CT=F22A13F395B6064172CA9DC572C26B2E -PT=26E44B9F3DEBA8EE3531DDFA42F1DC14 - -I=54 -KEY=3D25EEEACEF18702FD3896283CFF8A8386CC1DF4501F5BB1E81CB4A6B5B3BF2B -CT=26E44B9F3DEBA8EE3531DDFA42F1DC14 -PT=32D9F05174FFF34594E952B7ADE09737 - -I=55 -KEY=8BF2A692F6A35980C0CF02FF4650871BB415EDA524E0A8F47CF5E6111853281C -CT=32D9F05174FFF34594E952B7ADE09737 -PT=7BEF027DEB1FF22774CE8A8A101DD41B - -I=56 -KEY=C90BF0E1A8B615B4C8BD318260BB80AECFFAEFD8CFFF5AD3083B6C9B084EFC07 -CT=7BEF027DEB1FF22774CE8A8A101DD41B -PT=CF6B2444DFBBFE5B6A1CA99F2D13DE9A - -I=57 -KEY=C2A4C82B4AAEE0A22315026C6FE396900091CB9C1044A4886227C504255D229D -CT=CF6B2444DFBBFE5B6A1CA99F2D13DE9A -PT=14AD8C7B0F0460A3F48D5CD2CFFB385C - -I=58 -KEY=BF76E610192E2AEF42FF8F487CDDC318143C47E71F40C42B96AA99D6EAA61AC1 -CT=14AD8C7B0F0460A3F48D5CD2CFFB385C -PT=A5A850FC44A09C5985CE9661AF84F186 - -I=59 -KEY=1E42AEC368C600F18CBFA305EB559946B194171B5BE0587213640FB74522EB47 -CT=A5A850FC44A09C5985CE9661AF84F186 -PT=E2895D416951FDA66B695ABFA313F89D - -I=60 -KEY=4E9BC121E32849DAA501BEA4E534D9C2531D4A5A32B1A5D4780D5508E63113DA -CT=E2895D416951FDA66B695ABFA313F89D -PT=91E93AAECC5FB253F7463F101B2A4132 - -I=61 -KEY=ACC045A67F680F14D3F8DA454C922071C2F470F4FEEE17878F4B6A18FD1B52E8 -CT=91E93AAECC5FB253F7463F101B2A4132 -PT=F0F339022B4001E72F3BCC1A140603AD - -I=62 -KEY=4B47D2639B4A04D3C87D35DB4E63E563320749F6D5AE1660A070A602E91D5145 -CT=F0F339022B4001E72F3BCC1A140603AD -PT=DBECAFF90EDD4555A5D9A23817520D51 - -I=63 -KEY=C73B1C617BE90F2710DFF2C3AC60E0F9E9EBE60FDB73533505A9043AFE4F5C14 -CT=DBECAFF90EDD4555A5D9A23817520D51 -PT=73315A63A8889095AFED497AEFE657B4 - -I=64 -KEY=7F368758F7B303DE356481ED8EBFA46F9ADABC6C73FBC3A0AA444D4011A90BA0 -CT=73315A63A8889095AFED497AEFE657B4 -PT=3AB7E2F81D24D857308A1FC785559333 - -I=65 -KEY=6D7EF76412498AB3C70AA3006CC87188A06D5E946EDF1BF79ACE528794FC9893 -CT=3AB7E2F81D24D857308A1FC785559333 -PT=7EAA2814E372F674AB0B6E0E428D1AF4 - -I=66 -KEY=D626AD50A7B86153BF9215A6A8F7E908DEC776808DADED8331C53C89D6718267 -CT=7EAA2814E372F674AB0B6E0E428D1AF4 -PT=ADD212A59AC9EF6A55AEAC22D35A1BFE - -I=67 -KEY=4B9C7ED9AC7835C87DAB8BEF3ED6878B73156425176402E9646B90AB052B9999 -CT=ADD212A59AC9EF6A55AEAC22D35A1BFE -PT=203ECD34AE1BB2F23BC673DBD74FA07B - -I=68 -KEY=E34FBDEF9D81B464DD1138093F132051532BA911B97FB01B5FADE370D26439E2 -CT=203ECD34AE1BB2F23BC673DBD74FA07B -PT=0A18AFD5EEBBD338299897EA1F01324C - -I=69 -KEY=77BD51D39775121C22343FFC66D40F0B593306C457C463237635749ACD650BAE -CT=0A18AFD5EEBBD338299897EA1F01324C -PT=2892A6AE9517642A0977942360FB8104 - -I=70 -KEY=2761BF5478726AF184C86B45AE331A7E71A1A06AC2D307097F42E0B9AD9E8AAA -CT=2892A6AE9517642A0977942360FB8104 -PT=8A4CD7685B9A1E663C3130C34BC418B9 - -I=71 -KEY=DD168B81E90D806FF468BE5E551F3344FBED77029949196F4373D07AE65A9213 -CT=8A4CD7685B9A1E663C3130C34BC418B9 -PT=C7C0A15A1A22363B378D5DD27A69D4C2 - -I=72 -KEY=3442C07C0E98F523F9278D934F424BD83C2DD658836B2F5474FE8DA89C3346D1 -CT=C7C0A15A1A22363B378D5DD27A69D4C2 -PT=55A8EF8CAE213FE3FD6AA77E7415400A - -I=73 -KEY=291BD1577921B2947BC470C19727F0BD698539D42D4A10B789942AD6E82606DB -CT=55A8EF8CAE213FE3FD6AA77E7415400A -PT=0B07BEB71461356645936996AC45EB87 - -I=74 -KEY=46475B4C21F0F4895FEFCC67632DBCDC62828763392B25D1CC0743404463ED5C -CT=0B07BEB71461356645936996AC45EB87 -PT=6DFA5978F740C18CEE6F70FF50008BFD - -I=75 -KEY=CF89BDDE5D363B3C44DB6FED2DAB47AA0F78DE1BCE6BE45D226833BF146366A1 -CT=6DFA5978F740C18CEE6F70FF50008BFD -PT=6F58747F0336A2C4D2A397511E06D703 - -I=76 -KEY=85F7D4A4503F7C3D52998384F8B29BEF6020AA64CD5D4699F0CBA4EE0A65B1A2 -CT=6F58747F0336A2C4D2A397511E06D703 -PT=32AC7B1B8FFA7D411F46C129EEFFAF13 - -I=77 -KEY=CDE87D2DFB6198CFC737D93433419757528CD17F42A73BD8EF8D65C7E49A1EB1 -CT=32AC7B1B8FFA7D411F46C129EEFFAF13 -PT=CF5D039714814E72ECE7B9D5D1B27D11 - -I=78 -KEY=BCB9F75F11496AABFE2633E393B59B449DD1D2E8562675AA036ADC12352863A0 -CT=CF5D039714814E72ECE7B9D5D1B27D11 -PT=3455F997002A1818967E2679A07C1D56 - -I=79 -KEY=99E143B3524E724A009533AEC659E15BA9842B7F560C6DB29514FA6B95547EF6 -CT=3455F997002A1818967E2679A07C1D56 -PT=1F2113D44E290F1379A3CEC6D57D6279 - -I=80 -KEY=90086C83794D6878FF2CE748ECA6EDF4B6A538AB182562A1ECB734AD40291C8F -CT=1F2113D44E290F1379A3CEC6D57D6279 -PT=88866DB676AA3B21954AFDE0A0F33007 - -I=81 -KEY=FA254EB868F6CD5965346ACAE326BD2A3E23551D6E8F598079FDC94DE0DA2C88 -CT=88866DB676AA3B21954AFDE0A0F33007 -PT=A1665AD0252764E2691E65FEFB609CDA - -I=82 -KEY=92032C92FEEB0A5CD5D71AAF1BF5F47D9F450FCD4BA83D6210E3ACB31BBAB052 -CT=A1665AD0252764E2691E65FEFB609CDA -PT=988CE348430A206546379A8C684C00F1 - -I=83 -KEY=CF32144187F7B98256B5B4204DFABC8807C9EC8508A21D0756D4363F73F6B0A3 -CT=988CE348430A206546379A8C684C00F1 -PT=60289F0B6A9ADD08BF8924AA6D7F4D12 - -I=84 -KEY=A7BD244360E3C325F3EA315C86959DD867E1738E6238C00FE95D12951E89FDB1 -CT=60289F0B6A9ADD08BF8924AA6D7F4D12 -PT=FA3EA122499D7E083D81F147D9D68B09 - -I=85 -KEY=86213610EDC35A883A3364E8D529C6459DDFD2AC2BA5BE07D4DCE3D2C75F76B8 -CT=FA3EA122499D7E083D81F147D9D68B09 -PT=8E0B2452EF0515FC554A0AADF107714D - -I=86 -KEY=92CC3AE4A2A68CD93634075E902C66CB13D4F6FEC4A0ABFB8196E97F365807F5 -CT=8E0B2452EF0515FC554A0AADF107714D -PT=463CEAE83A50BA54280E792AB6B29B94 - -I=87 -KEY=6D86FA00DBB949A29D4A6166F1EF531E55E81C16FEF011AFA998905580EA9C61 -CT=463CEAE83A50BA54280E792AB6B29B94 -PT=416CA710B874E50CC98DF842B3435AD1 - -I=88 -KEY=C9400C98A04F5041BE1C6090A866F7DA1484BB064684F4A36015681733A9C6B0 -CT=416CA710B874E50CC98DF842B3435AD1 -PT=3BA8BB5C572C0404E4B8199528825904 - -I=89 -KEY=ED5043E9699B37844033E8BD170588342F2C005A11A8F0A784AD71821B2B9FB4 -CT=3BA8BB5C572C0404E4B8199528825904 -PT=1D2812DE70AA2D59894DA4DA7FE906FC - -I=90 -KEY=1964C6C301EEEF60B34E8E35175CAF8D320412846102DDFE0DE0D55864C29948 -CT=1D2812DE70AA2D59894DA4DA7FE906FC -PT=2735CAAFE653442FFC2E878AE2829998 - -I=91 -KEY=567B1E0737D0F72F82EB3A47D17209191531D82B875199D1F1CE52D2864000D0 -CT=2735CAAFE653442FFC2E878AE2829998 -PT=07B5FA4835E5DFC67E02F490A497145D - -I=92 -KEY=89AAD6DCA6A8973580D02768EBC8372412842263B2B446178FCCA64222D7148D -CT=07B5FA4835E5DFC67E02F490A497145D -PT=A31272EC8623213B015811FAE12330CE - -I=93 -KEY=4B4AB47A0DBA39907D8E919767E69518B196508F3497672C8E94B7B8C3F42443 -CT=A31272EC8623213B015811FAE12330CE -PT=9132AB51C9738A62CABDE4977947E0BF - -I=94 -KEY=BEC71999AEE5517C243B65830D30DEBB20A4FBDEFDE4ED4E4429532FBAB3C4FC -CT=9132AB51C9738A62CABDE4977947E0BF -PT=689375EA83B61894631E6EFA2D509531 - -I=95 -KEY=77CE2C97A458300D7C95C6871CEB56D648378E347E52F5DA27373DD597E351CD -CT=689375EA83B61894631E6EFA2D509531 -PT=AAA5C6C5917DFC103383DE6C79EB2BA6 - -I=96 -KEY=0AD691774612F7EFA41FE39B8B3A2D14E29248F1EF2F09CA14B4E3B9EE087A6B -CT=AAA5C6C5917DFC103383DE6C79EB2BA6 -PT=29D9945BDB3770ED2A41D2760D0DC51D - -I=97 -KEY=4E1D42ADC4CEF6BAE3A5B9E08F7ACD65CB4BDCAA341879273EF531CFE305BF76 -CT=29D9945BDB3770ED2A41D2760D0DC51D -PT=2F9B3C4E1FDCDC8F7D5DFBEA342284F2 - -I=98 -KEY=2D76A3E35C075DB14E40A59F46E07A81E4D0E0E42BC4A5A843A8CA25D7273B84 -CT=2F9B3C4E1FDCDC8F7D5DFBEA342284F2 -PT=ED4CFCF1C8D226EBACCC8FF11B1C81B8 - -I=99 -KEY=E7364D0D17D723A69C0BA956778BD0E9099C1C15E3168343EF6445D4CC3BBA3C -CT=ED4CFCF1C8D226EBACCC8FF11B1C81B8 -PT=2F9B5E1392B767E8497F849D00E98193 - -I=100 -KEY=709380C7012CB4272A69F6D4936B163E2607420671A1E4ABA61BC149CCD23BAF -CT=2F9B5E1392B767E8497F849D00E98193 -PT=3BE783A4A38EFB44150AA7A08E1888F6 - -I=101 -KEY=98FF27B8AB7B91F690231E24608076EF1DE0C1A2D22F1FEFB31166E942CAB359 -CT=3BE783A4A38EFB44150AA7A08E1888F6 -PT=F35AED9C83E53D2EADDE507345096218 - -I=102 -KEY=24F9D2FF633EE9AAED7321CFCF4D1D20EEBA2C3E51CA22C11ECF369A07C3D141 -CT=F35AED9C83E53D2EADDE507345096218 -PT=A22BF93FD521A6E59C196022FF252DC2 - -I=103 -KEY=70E491840BC5C42A878655E18E9AAAA74C91D50184EB842482D656B8F8E6FC83 -CT=A22BF93FD521A6E59C196022FF252DC2 -PT=11E67B52F8CD97D63268485EB546E1FE - -I=104 -KEY=098FF2D6DE55FF5C66D5AD7D5949643A5D77AE537C2613F2B0BE1EE64DA01D7D -CT=11E67B52F8CD97D63268485EB546E1FE -PT=1E67AF3F7E7FDEFB868696E96F718ACC - -I=105 -KEY=B89EA7CBAE57B8AD39F23B22A8F651A44310016C0259CD093638880F22D197B1 -CT=1E67AF3F7E7FDEFB868696E96F718ACC -PT=332B0045710B2DD6EC3D619051580C7F - -I=106 -KEY=39F71BC56EBFA91088499DC41A0C5B5B703B01297352E0DFDA05E99F73899BCE -CT=332B0045710B2DD6EC3D619051580C7F -PT=86F3D75D18F7AB31C6C52C19B0C35023 - -I=107 -KEY=417147DB03FDA0B26BEED7FE8A9487D5F6C8D6746BA54BEE1CC0C586C34ACBED -CT=86F3D75D18F7AB31C6C52C19B0C35023 -PT=452E6C2DA8B93A1E282F1A86AECB9F15 - -I=108 -KEY=C4336C26C20AD7811578044800A51E8EB3E6BA59C31C71F034EFDF006D8154F8 -CT=452E6C2DA8B93A1E282F1A86AECB9F15 -PT=637F010BAC28AC108331F4E26B262D3A - -I=109 -KEY=D0369C75D40EEF29CF7588FB87EE2ED2D099BB526F34DDE0B7DE2BE206A779C2 -CT=637F010BAC28AC108331F4E26B262D3A -PT=3F3DCA8B4C2DDFD556880A17FB575E7B - -I=110 -KEY=4DE25218630A678C287EC42F93985D22EFA471D923190235E15621F5FDF027B9 -CT=3F3DCA8B4C2DDFD556880A17FB575E7B -PT=3DA8C1D40B51A8BC6E728D7A1E6B3B2E - -I=111 -KEY=C0526C3096805B532433C0248E153A00D20CB00D2848AA898F24AC8FE39B1C97 -CT=3DA8C1D40B51A8BC6E728D7A1E6B3B2E -PT=449B050578191E4C156F7040EF27D5EC - -I=112 -KEY=6A1B7384328BAA25B6A857FB12A90FD49697B5085051B4C59A4BDCCF0CBCC97B -CT=449B050578191E4C156F7040EF27D5EC -PT=D58ACA128F936803BDD5EC1E6DECAB04 - -I=113 -KEY=44B7F3EB0EF0EF4325353D30F35C4D71431D7F1ADFC2DCC6279E30D16150627F -CT=D58ACA128F936803BDD5EC1E6DECAB04 -PT=77F1011F968AD46338CA68D5DF37959E - -I=114 -KEY=E1E6BBD70AEAC4D65159422B3DFE82DF34EC7E05494808A51F545804BE67F7E1 -CT=77F1011F968AD46338CA68D5DF37959E -PT=FC692161766A29C9E6A86C353E2F3FE5 - -I=115 -KEY=5C33A88179175BB12593D6574245A6A6C8855F643F22216CF9FC34318048C804 -CT=FC692161766A29C9E6A86C353E2F3FE5 -PT=F5FD2F77BC4908F470142417048C6233 - -I=116 -KEY=E6A3CDD47570AEC4FC3B3453F78F253F3D787013836B299889E8102684C4AA37 -CT=F5FD2F77BC4908F470142417048C6233 -PT=FBDC2774D7E426CBD8B62ABD0E0EAA6F - -I=117 -KEY=4F5B3EDC53366D4C74D94663E17CBDB6C6A45767548F0F53515E3A9B8ACA0058 -CT=FBDC2774D7E426CBD8B62ABD0E0EAA6F -PT=796D978C9D724C1C9445EC5BD272CEB0 - -I=118 -KEY=9119AD19E78100B3D04BED87FF5C22B5BFC9C0EBC9FD434FC51BD6C058B8CEE8 -CT=796D978C9D724C1C9445EC5BD272CEB0 -PT=15ECF7D3F516D3CBA0307959287A5BAB - -I=119 -KEY=600B4D7604FF2650611C453A50D02275AA2537383CEB9084652BAF9970C29543 -CT=15ECF7D3F516D3CBA0307959287A5BAB -PT=DA67996084E9C74C143310FC3CF207DD - -I=120 -KEY=3B8E0B73BBF745BB360EA50E7DA9B3297042AE58B80257C87118BF654C30929E -CT=DA67996084E9C74C143310FC3CF207DD -PT=6E9BC50580D45D54FEEC74830C0D9516 - -I=121 -KEY=231592D0CE761359AE2E85CC4E4156A01ED96B5D38D60A9C8FF4CBE6403D0788 -CT=6E9BC50580D45D54FEEC74830C0D9516 -PT=A4B0F6A50C72C5EE755FA5595334DF2E - -I=122 -KEY=7ABD82D278910B909B0D6219EF5E0D98BA699DF834A4CF72FAAB6EBF1309D8A6 -CT=A4B0F6A50C72C5EE755FA5595334DF2E -PT=24CDAEEB54A1EB7E2D4A0BEE526EA6E0 - -I=123 -KEY=5C8F7B23850BD287F011E257D691F8979EA433136005240CD7E1655141677E46 -CT=24CDAEEB54A1EB7E2D4A0BEE526EA6E0 -PT=84F24CDC0AA63CEA2DDE8F94C8776765 - -I=124 -KEY=DF8EEE46309021F6E7D7D41908B6CABE1A567FCF6AA318E6FA3FEAC589101923 -CT=84F24CDC0AA63CEA2DDE8F94C8776765 -PT=EEA20542DEDB0B99A2144942FFEAC820 - -I=125 -KEY=8634A663D618B3BB54F44A5849170ACDF4F47A8DB478137F582BA38776FAD103 -CT=EEA20542DEDB0B99A2144942FFEAC820 -PT=CDD91737753BE9F672A60DD722202127 - -I=126 -KEY=E41913E97F21A4E6A948ABEB45279E0D392D6DBAC143FA892A8DAE5054DAF024 -CT=CDD91737753BE9F672A60DD722202127 -PT=E6E2F7846E06BB90F19B21521DD4D238 - -I=127 -KEY=1E63624B5EADBE7D42255F208CC7D348DFCF9A3EAF454119DB168F02490E221C -CT=E6E2F7846E06BB90F19B21521DD4D238 -PT=0110CA2647D43C8BD012976113EFB860 - -I=128 -KEY=8476329019AA4D0D91C71E0DFFF47906DEDF5018E8917D920B0418635AE19A7C -CT=0110CA2647D43C8BD012976113EFB860 -PT=CC9AACC98876387D09565F1A20D329AF - -I=129 -KEY=DB1C0803BC1AD91C5621FA8C54AA83EF1245FCD160E745EF025247797A32B3D3 -CT=CC9AACC98876387D09565F1A20D329AF -PT=55AB296D67DEEBA179AD8093C1952CC2 - -I=130 -KEY=5C0887FF7C888D7800C43BC9E88D9B3B47EED5BC0739AE4E7BFFC7EABBA79F11 -CT=55AB296D67DEEBA179AD8093C1952CC2 -PT=27016691505182706848CD5D7A2C5CAB - -I=131 -KEY=0FFBE12ADFA17F3BF26622C20311D38960EFB32D57682C3E13B70AB7C18BC3BA -CT=27016691505182706848CD5D7A2C5CAB -PT=5E6C9FAF480FFE51D7687ADE203D5367 - -I=132 -KEY=C4C12330BC21062618E2E83EC3755DAC3E832C821F67D26FC4DF7069E1B690DD -CT=5E6C9FAF480FFE51D7687ADE203D5367 -PT=082FF20DC6AFBA3888348E5724F5C526 - -I=133 -KEY=3F6BF56A0136C1058924FCD831A65EBC36ACDE8FD9C868574CEBFE3EC54355FB -CT=082FF20DC6AFBA3888348E5724F5C526 -PT=67AE68CDDA349A067339F28FA216A188 - -I=134 -KEY=4AB9E8E9B5BB84353006AB43065C6B8F5102B64203FCF2513FD20CB16755F473 -CT=67AE68CDDA349A067339F28FA216A188 -PT=3316F37F97D679B78A537A0E107923AB - -I=135 -KEY=E04DE045508423D735B20168C7974CC26214453D942A8BE6B58176BF772CD7D8 -CT=3316F37F97D679B78A537A0E107923AB -PT=00AEB331686999C5F5FB1E7C6CCF1072 - -I=136 -KEY=D4D19E570760468E9703F0E49C4AC9F262BAF60CFC431223407A68C31BE3C7AA -CT=00AEB331686999C5F5FB1E7C6CCF1072 -PT=29A5DB93D2AE9B1ED9714213EAD9AA1C - -I=137 -KEY=6D6789354D2CC3EFA9ABFC466F21A6E24B1F2D9F2EED893D990B2AD0F13A6DB6 -CT=29A5DB93D2AE9B1ED9714213EAD9AA1C -PT=E98426CB0F858A084EB66311188D9200 - -I=138 -KEY=06ED66801B81943BF1640AAE222A23C7A29B0B5421680335D7BD49C1E9B7FFB6 -CT=E98426CB0F858A084EB66311188D9200 -PT=21527326577425261F2D40268C428E29 - -I=139 -KEY=2232758279A806C21870C85273C12FA883C97872761C2613C89009E765F5719F -CT=21527326577425261F2D40268C428E29 -PT=CC9393A43B8A8194C0EC29F989E597A6 - -I=140 -KEY=E7E22C2A6E6D4A1BFE7B706047094AF44F5AEBD64D96A787087C201EEC10E639 -CT=CC9393A43B8A8194C0EC29F989E597A6 -PT=714846062B262A823B24164900DF91AD - -I=141 -KEY=89A78F64BCAEE02CAC92928134C2567C3E12ADD066B08D0533583657ECCF7794 -CT=714846062B262A823B24164900DF91AD -PT=1D0AC79D1E9BB36A6A6A8E49538C08FF - -I=142 -KEY=4F6E8D81296C95FAA0FE6F2D324A392223186A4D782B3E6F5932B81EBF437F6B -CT=1D0AC79D1E9BB36A6A6A8E49538C08FF -PT=403D8B10E0AB31493589AFFA8E8B1BEE - -I=143 -KEY=24E398291CF018E4666728F4F635F74D6325E15D98800F266CBB17E431C86485 -CT=403D8B10E0AB31493589AFFA8E8B1BEE -PT=9E0516EDA401DAAF6AC013841C0D63C8 - -I=144 -KEY=F80CF8AF1FA463D2ED7C7F59C1B239B0FD20F7B03C81D589067B04602DC5074D -CT=9E0516EDA401DAAF6AC013841C0D63C8 -PT=74B2B200922B21AA20A0C5860CFB7E4D - -I=145 -KEY=577A5456424E1A76C3E113EB82CCDF34899245B0AEAAF42326DBC1E6213E7900 -CT=74B2B200922B21AA20A0C5860CFB7E4D -PT=25AFF27E13888A638CDA2673D7F16AFD - -I=146 -KEY=7C623BBD4777E6EF9BC058DF5BA27BEAAC3DB7CEBD227E40AA01E795F6CF13FD -CT=25AFF27E13888A638CDA2673D7F16AFD -PT=A54F400AB9C52913D7302BA36BF217DD - -I=147 -KEY=A8B33E433720C4B925C4F0315DDB73B00972F7C404E757537D31CC369D3D0420 -CT=A54F400AB9C52913D7302BA36BF217DD -PT=48A263A07112AA95EA1414CE03545790 - -I=148 -KEY=DA864B91AED3E2FAC25782F4A50C13C841D0946475F5FDC69725D8F89E6953B0 -CT=48A263A07112AA95EA1414CE03545790 -PT=541547E924522E59C1721D130B64D92F - -I=149 -KEY=EEB5FF6F9C435510E12934F5E806553E15C5D38D51A7D39F5657C5EB950D8A9F -CT=541547E924522E59C1721D130B64D92F -PT=5830544939EB4607145538388840248B - -I=150 -KEY=24E609AD29E4C601189CB2FE119767884DF587C4684C95984202FDD31D4DAE14 -CT=5830544939EB4607145538388840248B -PT=CBE1F82FD3318448AA36ADB5967EF865 - -I=151 -KEY=5A7EBB76C38C2E5F038612A06E84BB2C86147FEBBB7D11D0E83450668B335671 -CT=CBE1F82FD3318448AA36ADB5967EF865 -PT=3B104547D2D620879E3CB2B5774C0FB4 - -I=152 -KEY=827EFCB7BC862C2466B8C79FC297AD3DBD043AAC69AB31577608E2D3FC7F59C5 -CT=3B104547D2D620879E3CB2B5774C0FB4 -PT=B667F7544FE49A07611A160E3312F69A - -I=153 -KEY=9BC6C18805144F98CAEA7B252B3EE2930B63CDF8264FAB501712F4DDCF6DAF5F -CT=B667F7544FE49A07611A160E3312F69A -PT=C3E928FDEB5D7DDF7CF32C4DBCFE32F3 - -I=154 -KEY=2BC00DF6D26F9A968C3BFF47AE761718C88AE505CD12D68F6BE1D89073939DAC -CT=C3E928FDEB5D7DDF7CF32C4DBCFE32F3 -PT=72A9CF7AA2EDAF1907D77D10A02A45DE - -I=155 -KEY=15A0EE054E2D5E7EDCF3FC766860ACCDBA232A7F6FFF79966C36A580D3B9D872 -CT=72A9CF7AA2EDAF1907D77D10A02A45DE -PT=97ABFAAD506940F88FDC8F55AD7EA919 - -I=156 -KEY=C56C11F3A96852119C16751963C24CD42D88D0D23F96396EE3EA2AD57EC7716B -CT=97ABFAAD506940F88FDC8F55AD7EA919 -PT=DD55A02B1EB01EB091CA6337D0BEB5BD - -I=157 -KEY=8634CC7B3416FCE337AAFA39791D1545F0DD70F9212627DE722049E2AE79C4D6 -CT=DD55A02B1EB01EB091CA6337D0BEB5BD -PT=C5EB3DF5A328B267F3895CECD4A828AF - -I=158 -KEY=DDC1361E1432CCAC3551E2478A321A0035364D0C820E95B981A9150E7AD1EC79 -CT=C5EB3DF5A328B267F3895CECD4A828AF -PT=49952DACD97FD5583A7D9C4FF515EC17 - -I=159 -KEY=52658EEC2A7441D866CFA15944BB12857CA360A05B7140E1BBD489418FC4006E -CT=49952DACD97FD5583A7D9C4FF515EC17 -PT=4971EEEF871E935AC470BD770802B04B - -I=160 -KEY=05FC7A181B1935EA8DCEC961B0DFC14B35D28E4FDC6FD3BB7FA4343687C6B025 -CT=4971EEEF871E935AC470BD770802B04B -PT=3DB5E9165C24EC3790DC3E53E5E5D2DE - -I=161 -KEY=8D2793B7BDCF80338AA39C86008361BC08676759804B3F8CEF780A65622362FB -CT=3DB5E9165C24EC3790DC3E53E5E5D2DE -PT=1FDB5D4FBB59F082B3B617C8A23734F1 - -I=162 -KEY=37BE37961B77866869826907BB9E9C1717BC3A163B12CF0E5CCE1DADC014560A -CT=1FDB5D4FBB59F082B3B617C8A23734F1 -PT=8C59775AD3FF7C337B22C8E785321E25 - -I=163 -KEY=F3184EA1C8FFE3D436BEE076AA999B659BE54D4CE8EDB33D27ECD54A4526482F -CT=8C59775AD3FF7C337B22C8E785321E25 -PT=0CB834FCC0CFDAECAF4AFC5A2E38DF23 - -I=164 -KEY=CACF50D99B066EB84CBFAEEC9B0D6769975D79B0282269D188A629106B1E970C -CT=0CB834FCC0CFDAECAF4AFC5A2E38DF23 -PT=229EB7B6A97D91921BCD8C95A0D7C17B - -I=165 -KEY=3FA80E4FB785B9FC3B058CC62D289958B5C3CE06815FF843936BA585CBC95677 -CT=229EB7B6A97D91921BCD8C95A0D7C17B -PT=0D7692C281DD4FF35D9B1620E1385C34 - -I=166 -KEY=CE2A3A893C96A4F1AA81AD52EBCC3C23B8B55CC40082B7B0CEF0B3A52AF10A43 -CT=0D7692C281DD4FF35D9B1620E1385C34 -PT=D3C5FE594F5C8C5A359235448EB20146 - -I=167 -KEY=FC8642DB8CB42D1B1251CB7FE6AFF90D6B70A29D4FDE3BEAFB6286E1A4430B05 -CT=D3C5FE594F5C8C5A359235448EB20146 -PT=8C0F88460C700D96847249807B84223F - -I=168 -KEY=2A9C9FD184A5B2418FD415A228A5C0AFE77F2ADB43AE367C7F10CF61DFC7293A -CT=8C0F88460C700D96847249807B84223F -PT=5A4237A5C2DABDCDA6389D5FC66032F6 - -I=169 -KEY=FDB533163E989D2FA32CCA5D3CC5D376BD3D1D7E81748BB1D928523E19A71BCC -CT=5A4237A5C2DABDCDA6389D5FC66032F6 -PT=BF8AAC6B1536CCCCECCC9D6BE970EB3E - -I=170 -KEY=3C4B3CF0FD0C4292B2497175D4400F8902B7B1159442477D35E4CF55F0D7F0F2 -CT=BF8AAC6B1536CCCCECCC9D6BE970EB3E -PT=97CE58407FD26D63C86765CB05EA6277 - -I=171 -KEY=367862F3E2C5520EA2269392B6139E9C9579E955EB902A1EFD83AA9EF53D9285 -CT=97CE58407FD26D63C86765CB05EA6277 -PT=B411687B044B624077A92D8C130697B9 - -I=172 -KEY=0300AF491DAF6C607417FB1FD9B1EC612168812EEFDB485E8A2A8712E63B053C -CT=B411687B044B624077A92D8C130697B9 -PT=D22E92A5132EA85F4FB25EE19C248008 - -I=173 -KEY=7C92EF49A7D27E97F1884299B635F0ADF346138BFCF5E001C598D9F37A1F8534 -CT=D22E92A5132EA85F4FB25EE19C248008 -PT=FD6817CD680A2A8CE93E4B4F9CAA72AA - -I=174 -KEY=80EABB1D8C9B5F769FCAC87ED8D0C9CA0E2E044694FFCA8D2CA692BCE6B5F79E -CT=FD6817CD680A2A8CE93E4B4F9CAA72AA -PT=8DDD9B3B9278D2DE3453EA6769E1C39C - -I=175 -KEY=FB345E2D7BBBED527259FAEAEA79C05D83F39F7D0687185318F578DB8F543402 -CT=8DDD9B3B9278D2DE3453EA6769E1C39C -PT=AE69F5CD8D342E74113E979ACE3539F2 - -I=176 -KEY=7D93DC33FF2266770291160CD317C65E2D9A6AB08BB3362709CBEF4141610DF0 -CT=AE69F5CD8D342E74113E979ACE3539F2 -PT=30E19A4E84997172486DAE4FB4C41E58 - -I=177 -KEY=82362FF3E9C1AD93474CF4CABD354E7E1D7BF0FE0F2A475541A6410EF5A513A8 -CT=30E19A4E84997172486DAE4FB4C41E58 -PT=75B3D07617EB189512DC5161908940C1 - -I=178 -KEY=8EFD0FCB3855CCC16BD919FBD17596C768C8208818C15FC0537A106F652C5369 -CT=75B3D07617EB189512DC5161908940C1 -PT=FD13E89107FAFA44998721AD726C620F - -I=179 -KEY=2299D22282C798107F489637DCD479C395DBC8191F3BA584CAFD31C217403166 -CT=FD13E89107FAFA44998721AD726C620F -PT=C1B0210C0387864717BD7D02063B6A69 - -I=180 -KEY=75E05597A2BBDF23E5BD172C83548C9B546BE9151CBC23C3DD404CC0117B5B0F -CT=C1B0210C0387864717BD7D02063B6A69 -PT=0E442B38E9024CCA5DC43A7B8D5F6FCF - -I=181 -KEY=4DBC8DCB8C25B5F4AD374BA3064216555A2FC22DF5BE6F09808476BB9C2434C0 -CT=0E442B38E9024CCA5DC43A7B8D5F6FCF -PT=8FD213EC19D62FD2C19E6C91B97E56A0 - -I=182 -KEY=E393BAD07E955EBC1446B847DE5A891ED5FDD1C1EC6840DB411A1A2A255A6260 -CT=8FD213EC19D62FD2C19E6C91B97E56A0 -PT=F52ADFD33A68EE198F33708E676D0CE9 - -I=183 -KEY=3F33A76F87DB0388C2D66C7F2EFAA1B820D70E12D600AEC2CE296AA442376E89 -CT=F52ADFD33A68EE198F33708E676D0CE9 -PT=7649EB4283505EEEE1BE16DB6677B3F5 - -I=184 -KEY=04BC65DE70C9E01EEEDA5A507C218C8D569EE5505550F02C2F977C7F2440DD7C -CT=7649EB4283505EEEE1BE16DB6677B3F5 -PT=6FB1C4AD8A5B8A606621A8BF4277F3DC - -I=185 -KEY=8A6EF9710F4AE10EB60C8D25A8F67C50392F21FDDF0B7A4C49B6D4C066372EA0 -CT=6FB1C4AD8A5B8A606621A8BF4277F3DC -PT=22C2CF9572D708F688291056E2F8E120 - -I=186 -KEY=ED6D084D5F8AA4F201F9C20EA26A90E81BEDEE68ADDC72BAC19FC49684CFCF80 -CT=22C2CF9572D708F688291056E2F8E120 -PT=28AC7257911ECEB549D910BFA0905AE5 - -I=187 -KEY=BA2735927D6A76B952C08A219FBB572233419C3F3CC2BC0F8846D429245F9565 -CT=28AC7257911ECEB549D910BFA0905AE5 -PT=2A1F3842DF988CDA0C6415450A657DB2 - -I=188 -KEY=53BCC06CCCBC31A5BEE2CE88E6EAEFAC195EA47DE35A30D58422C16C2E3AE8D7 -CT=2A1F3842DF988CDA0C6415450A657DB2 -PT=6055EB3A24DE4D87C6BA5073A5BAC919 - -I=189 -KEY=DF88C3CEC31C7B88D8AC0C7AAA2CED99790B4F47C7847D524298911F8B8021CE -CT=6055EB3A24DE4D87C6BA5073A5BAC919 -PT=CC051CCD37068B41935FD14538DFEF82 - -I=190 -KEY=265B351B93FF456D5A1EAADD2BEA1296B50E538AF082F613D1C7405AB35FCE4C -CT=CC051CCD37068B41935FD14538DFEF82 -PT=225B63F455DD72EC87CF6FD5DF0FDAF3 - -I=191 -KEY=BAC4C541E0A693CF8A3892A82F67CD959755307EA55F84FF56082F8F6C5014BF -CT=225B63F455DD72EC87CF6FD5DF0FDAF3 -PT=64027F6B72F0A11628F66D5C502658E8 - -I=192 -KEY=E8F68EF4909A128F331DFEFAE8560EBCF3574F15D7AF25E97EFE42D33C764C57 -CT=64027F6B72F0A11628F66D5C502658E8 -PT=529AAF9163EDA1BC39E66D2556BE938B - -I=193 -KEY=1951B1A50BED04096C17E816D4EC6225A1CDE084B442845547182FF66AC8DFDC -CT=529AAF9163EDA1BC39E66D2556BE938B -PT=F93E85D98EB9BDDD7D3844421235FBAB - -I=194 -KEY=D39AF070909FBC0E3226E28041B0286158F3655D3AFB39883A206BB478FD2477 -CT=F93E85D98EB9BDDD7D3844421235FBAB -PT=16B6B3CC08003BA36C9E84B1EE9CD7CC - -I=195 -KEY=B705C6CCD010B980E386B8690C83E96C4E45D69132FB022B56BEEF059661F3BB -CT=16B6B3CC08003BA36C9E84B1EE9CD7CC -PT=301AFE66055149FA5775A9CE19F1FF63 - -I=196 -KEY=B3C813D4FCBD31ED95E7E71CEC15153E7E5F28F737AA4BD101CB46CB8F900CD8 -CT=301AFE66055149FA5775A9CE19F1FF63 -PT=1090E68F7C8400861589E304A5B815CD - -I=197 -KEY=0EBC30ADB6946B6415C0309D636C79F46ECFCE784B2E4B571442A5CF2A281915 -CT=1090E68F7C8400861589E304A5B815CD -PT=2778F0C712804C0B8D085B196A4D73C4 - -I=198 -KEY=9C5815C6705B39DEECB8BDDDC9329A0D49B73EBF59AE075C994AFED640656AD1 -CT=2778F0C712804C0B8D085B196A4D73C4 -PT=14FECB137DC9C38A04D92B60A177A61D - -I=199 -KEY=9D83B41F8F415B5F3B2C08682383471B5D49F5AC2467C4D69D93D5B6E112CCCC -CT=14FECB137DC9C38A04D92B60A177A61D -PT=0EF1321EA52EAA7624E3F2EFD0C886AF - -I=200 -KEY=2960CEE0AF043ED1A549BA223F6C1CF153B8C7B281496EA0B970275931DA4A63 -CT=0EF1321EA52EAA7624E3F2EFD0C886AF -PT=AFA8B2129577EC178B59D42D1B92D313 - -I=201 -KEY=51E0DECF48A151021C70EC3EE3CE9008FC1075A0143E82B73229F3742A489970 -CT=AFA8B2129577EC178B59D42D1B92D313 -PT=3351631344E6EF86712327D3C05EBDEB - -I=202 -KEY=5F34A789B0B1185BA7D1BB3EF2677060CF4116B350D86D31430AD4A7EA16249B -CT=3351631344E6EF86712327D3C05EBDEB -PT=C299D0556B0D15014627CADBCCC3DC33 - -I=203 -KEY=FC3E420F84F4C75802DCF68ABF0030E70DD8C6E63BD57830052D1E7C26D5F8A8 -CT=C299D0556B0D15014627CADBCCC3DC33 -PT=CEB83A2B9DD76B649BAAE48A8B772A5C - -I=204 -KEY=C04448AD77DBF33F22A2346C7A40F813C360FCCDA60213549E87FAF6ADA2D2F4 -CT=CEB83A2B9DD76B649BAAE48A8B772A5C -PT=A8C6AEC94E82BC68AC8E29A8CB9504F6 - -I=205 -KEY=3FA863ECC4AFA141DD7349C44F94FEE16BA65204E880AF3C3209D35E6637D602 -CT=A8C6AEC94E82BC68AC8E29A8CB9504F6 -PT=1EDED55C8D3309F828C17AF072C79D7A - -I=206 -KEY=8893E5FB27191AE09E4AB5F062289F117578875865B3A6C41AC8A9AE14F04B78 -CT=1EDED55C8D3309F828C17AF072C79D7A -PT=FD2AC22891FB294EB0AD2BADFE759C29 - -I=207 -KEY=90BA1205BB7927E86F9895855648D3EB88524570F4488F8AAA658203EA85D751 -CT=FD2AC22891FB294EB0AD2BADFE759C29 -PT=2FE6AE59ACD516EE1567A7A1C43FDE2A - -I=208 -KEY=278FD88834EA67564F301785C4045D6FA7B4EB29589D9964BF0225A22EBA097B -CT=2FE6AE59ACD516EE1567A7A1C43FDE2A -PT=35BEC13F159F61C7EF4C860AD3B41A75 - -I=209 -KEY=E9D2F23C213D02724737A5E907BFBDF0920A2A164D02F8A3504EA3A8FD0E130E -CT=35BEC13F159F61C7EF4C860AD3B41A75 -PT=650D65D6ED716DA515EAAF1A7447C3FB - -I=210 -KEY=4A0A997634E2D9305795FC90291F6FD9F7074FC0A073950645A40CB28949D0F5 -CT=650D65D6ED716DA515EAAF1A7447C3FB -PT=7AFE0D2F234A6CDEDD7103DA09147285 - -I=211 -KEY=BD671DD81F8FCD9D472564589AA13F5D8DF942EF8339F9D898D50F68805DA270 -CT=7AFE0D2F234A6CDEDD7103DA09147285 -PT=40627620B17313AF42EA7DD6CFD900F9 - -I=212 -KEY=5668F777C46BF78DC664E72186626BF5CD9B34CF324AEA77DA3F72BE4F84A289 -CT=40627620B17313AF42EA7DD6CFD900F9 -PT=0C62985837C8C6FB468BD6E3928F8497 - -I=213 -KEY=B82B5D4C3DEF62CFAE064CFDB5D904EFC1F9AC9705822C8C9CB4A45DDD0B261E -CT=0C62985837C8C6FB468BD6E3928F8497 -PT=A1FFF4635AAF2AD8AE6EA8C70858EF3B - -I=214 -KEY=6A179EF63528EFA2B12DBA23D1EC8D21600658F45F2D065432DA0C9AD553C925 -CT=A1FFF4635AAF2AD8AE6EA8C70858EF3B -PT=403F8E2D050E2976487BBEDD6466357E - -I=215 -KEY=6857720AC4DDCFFE8A96B455C973901A2039D6D95A232F227AA1B247B135FC5B -CT=403F8E2D050E2976487BBEDD6466357E -PT=2DD7EB8476988C850E8D95DC598FC61A - -I=216 -KEY=5B938E230BFE9056471E7C83A6ED03930DEE3D5D2CBBA3A7742C279BE8BA3A41 -CT=2DD7EB8476988C850E8D95DC598FC61A -PT=676B96F400AE18138B302FD3D70D490E - -I=217 -KEY=4CE7ECA340DEC23715C53343EB9162DA6A85ABA92C15BBB4FF1C08483FB7734F -CT=676B96F400AE18138B302FD3D70D490E -PT=620AAA14B94BF6B60A83129085BCF02B - -I=218 -KEY=1024ECE618D140CAE8B9DFC8EB1DE137088F01BD955E4D02F59F1AD8BA0B8364 -CT=620AAA14B94BF6B60A83129085BCF02B -PT=B701A38325DC282045C6F914394B9F70 - -I=219 -KEY=6B8C6DA855E1E72E4A6AC44601B24D60BF8EA23EB0826522B059E3CC83401C14 -CT=B701A38325DC282045C6F914394B9F70 -PT=808D0B334B775C59F8C34A3524CB4126 - -I=220 -KEY=C50A625A89465321DACCB9EB40DEF57D3F03A90DFBF5397B489AA9F9A78B5D32 -CT=808D0B334B775C59F8C34A3524CB4126 -PT=4E29C921CC295F6A3082C1BC02ACDA70 - -I=221 -KEY=973341A4E3DB315FA97C7EEDF493EA71712A602C37DC661178186845A5278742 -CT=4E29C921CC295F6A3082C1BC02ACDA70 -PT=77BC204E50EFCA2AEBDC16D3F3C3D739 - -I=222 -KEY=639EB8FB16B34B55550705FDCFF7C8CC069640626733AC3B93C47E9656E4507B -CT=77BC204E50EFCA2AEBDC16D3F3C3D739 -PT=A677A7B55AA03EB0587EE00123D047F3 - -I=223 -KEY=610A9602B725E4D87AB2904E91050D90A0E1E7D73D93928BCBBA9E9775341788 -CT=A677A7B55AA03EB0587EE00123D047F3 -PT=09AF5421548AC11466370484F8C556DE - -I=224 -KEY=314A6E0BD202458489059738917B6678A94EB3F66919539FAD8D9A138DF14156 -CT=09AF5421548AC11466370484F8C556DE -PT=B6CDD2336AB8735EE7A9946A1FE7EE0C - -I=225 -KEY=73658C0F88490F7C3B9F2B7B39551BBF1F8361C503A120C14A240E799216AF5A -CT=B6CDD2336AB8735EE7A9946A1FE7EE0C -PT=B5A2F3B47E4AC87BC06612587253930E - -I=226 -KEY=968794DEC3E866DE4F999C860E9851E9AA2192717DEBE8BA8A421C21E0453C54 -CT=B5A2F3B47E4AC87BC06612587253930E -PT=09C9C38BB3348147EB284FFA24D87244 - -I=227 -KEY=205605E66A4BE2CF61E13243E104FED9A3E851FACEDF69FD616A53DBC49D4E10 -CT=09C9C38BB3348147EB284FFA24D87244 -PT=9D1EDCA2674E5A30416DF7CC2938DC63 - -I=228 -KEY=9CA7508C83DB6E56EFF3489F2BD30C573EF68D58A99133CD2007A417EDA59273 -CT=9D1EDCA2674E5A30416DF7CC2938DC63 -PT=E8A2282B47DAB6A666A4607BBC857FC6 - -I=229 -KEY=0F98884E85FEB533CFC281C2F4437915D654A573EE4B856B46A3C46C5120EDB5 -CT=E8A2282B47DAB6A666A4607BBC857FC6 -PT=B6675D2263DC1C1E0F04A9A9BC666D2D - -I=230 -KEY=3F3ED6DC6E08DF2515D08273832429286033F8518D97997549A76DC5ED468098 -CT=B6675D2263DC1C1E0F04A9A9BC666D2D -PT=D6FF2642FD84C80674EAF8674242248D - -I=231 -KEY=67910C06B57CD52767674B70F59337D8B6CCDE13701351733D4D95A2AF04A415 -CT=D6FF2642FD84C80674EAF8674242248D -PT=47D4419A669253C39A0CC96C7CD612C0 - -I=232 -KEY=43EE254E414DB89044EE2F703B340F6AF1189F89168102B0A7415CCED3D2B6D5 -CT=47D4419A669253C39A0CC96C7CD612C0 -PT=B2B3FD7A1D4B0695B3499430F2E44CEA - -I=233 -KEY=89C9881E6D6CEFF00DDFC5618655FA4543AB62F30BCA04251408C8FE2136FA3F -CT=B2B3FD7A1D4B0695B3499430F2E44CEA -PT=4AAD0AE20AFF0675CF78992DFD2B685C - -I=234 -KEY=2C24846D047677F89EF73B917962D0FA0906681101350250DB7051D3DC1D9263 -CT=4AAD0AE20AFF0675CF78992DFD2B685C -PT=C90343412CFE70201CE22D9AD2222788 - -I=235 -KEY=770637F8F8F32915BF7630919D0726AEC0052B502DCB7270C7927C490E3FB5EB -CT=C90343412CFE70201CE22D9AD2222788 -PT=923FE89134FAF362802C5A2EBF399D2C - -I=236 -KEY=426891CF6B068FAC7FFB5A04874AEC78523AC3C11931811247BE2667B10628C7 -CT=923FE89134FAF362802C5A2EBF399D2C -PT=9C08F05026196BA3550A2496049B720B - -I=237 -KEY=B66BCCA5EFAF3F448BDD52DC48F2B904CE3233913F28EAB112B402F1B59D5ACC -CT=9C08F05026196BA3550A2496049B720B -PT=7B487FD67D0C2D987C3DEFD335C2EF17 - -I=238 -KEY=079CCBC13FCFB0D032293FDFEC563F86B57A4C474224C7296E89ED22805FB5DB -CT=7B487FD67D0C2D987C3DEFD335C2EF17 -PT=CEC12158856704CE8ABF0CA6C6F3006B - -I=239 -KEY=998AFEF458902CA632D60843A88D36637BBB6D1FC743C3E7E436E18446ACB5B0 -CT=CEC12158856704CE8ABF0CA6C6F3006B -PT=DA19C7C7283ADD9C5145ABBA53F1E7E1 - -I=240 -KEY=95EDAF196289EE6D24AA752DF489DEFCA1A2AAD8EF791E7BB5734A3E155D5251 -CT=DA19C7C7283ADD9C5145ABBA53F1E7E1 -PT=F043A57E686C1FE7DACB858F0C3E6857 - -I=241 -KEY=3050D2C04C0860414427BF5B19792D7651E10FA68715019C6FB8CFB119633A06 -CT=F043A57E686C1FE7DACB858F0C3E6857 -PT=2FB7B264BB4B3FAFA01A6BB93CC2958D - -I=242 -KEY=26186DD7BE83659550BA3B52D99975037E56BDC23C5E3E33CFA2A40825A1AF8B -CT=2FB7B264BB4B3FAFA01A6BB93CC2958D -PT=D46BBD3ABD958DA722F3591578C30F5E - -I=243 -KEY=DE1D625B9C840580FDDE57EDE82419D1AA3D00F881CBB394ED51FD1D5D62A0D5 -CT=D46BBD3ABD958DA722F3591578C30F5E -PT=3D69379AB60535902C38AB5E121DD035 - -I=244 -KEY=FF9396CB65FFB9D47EF4E0253FD98BBA9754376237CE8604C16956434F7F70E0 -CT=3D69379AB60535902C38AB5E121DD035 -PT=A5767F4E6C8482290BC7B76D23EEF145 - -I=245 -KEY=B98B5F1CA9752B1B07514B72C3D585F23222482C5B4A042DCAAEE12E6C9181A5 -CT=A5767F4E6C8482290BC7B76D23EEF145 -PT=9388736A82C99337C49BB4F32437B1DA - -I=246 -KEY=5F130919FB4ED29397E4781550B1D444A1AA3B46D983971A0E3555DD48A6307F -CT=9388736A82C99337C49BB4F32437B1DA -PT=915C6C5181E797DADC289F8FFF60CD19 - -I=247 -KEY=D3F202F140D38545C8A04EC2D0993E2B30F65717586400C0D21DCA52B7C6FD66 -CT=915C6C5181E797DADC289F8FFF60CD19 -PT=A61167CDBE95ABFAD9C1A58BDA90F0D4 - -I=248 -KEY=FBFA83B249C3B13C83E8FC111611391296E730DAE6F1AB3A0BDC6FD96D560DB2 -CT=A61167CDBE95ABFAD9C1A58BDA90F0D4 -PT=9AF2B4CF00B037976D0F5CAC4201885D - -I=249 -KEY=CC24CC54D0889912C7AD2473EBA8BBB30C158415E6419CAD66D333752F5785EF -CT=9AF2B4CF00B037976D0F5CAC4201885D -PT=A9B74046119B6699FD5EFD1E476BEE64 - -I=250 -KEY=F520F18D9FACA98E5F57226127FA9B6BA5A2C453F7DAFA349B8DCE6B683C6B8B -CT=A9B74046119B6699FD5EFD1E476BEE64 -PT=CD7EAA1EF3B91B69FD3E54FCC5A802E9 - -I=251 -KEY=9BFD59A9F78FB1BE6F13B701D7EB0F6268DC6E4D0463E15D66B39A97AD946962 -CT=CD7EAA1EF3B91B69FD3E54FCC5A802E9 -PT=FD7095C419E2722425E6D4CA1A393D8C - -I=252 -KEY=C1C39AC5158C8CDBE82CF37D00B7896995ACFB891D81937943554E5DB7AD54EE -CT=FD7095C419E2722425E6D4CA1A393D8C -PT=9963CE47EB0322135C5D20B923FC341A - -I=253 -KEY=C9E26AE18D08643029C92F11BD3E8AA40CCF35CEF682B16A1F086EE4945160F4 -CT=9963CE47EB0322135C5D20B923FC341A -PT=11589A1BDD037FABABBB9BF5AAC859A7 - -I=254 -KEY=2183FF3C1EB1DF48DB8FA5F87F279F891D97AFD52B81CEC1B4B3F5113E993953 -CT=11589A1BDD037FABABBB9BF5AAC859A7 -PT=B6CEE1CD709BE6E055041FC2E1A87539 - -I=255 -KEY=738690954B4B92CE2367567B3A960E8DAB594E185B1A2821E1B7EAD3DF314C6A -CT=B6CEE1CD709BE6E055041FC2E1A87539 -PT=D776658F01CCEC460FA7145C6C6CBD42 - -I=256 -KEY=71AB2DBD9923F08E516D8DF0CF57CC227C2F2B975AD6C467EE10FE8FB35DF128 -CT=D776658F01CCEC460FA7145C6C6CBD42 -PT=0C6D2578060A0A1024230D838AA45234 - -I=257 -KEY=1C0E18C83D74E46DDF65BFC3335CFF0D70420EEF5CDCCE77CA33F30C39F9A31C -CT=0C6D2578060A0A1024230D838AA45234 -PT=BFD55D67EF4883200FDAEEA5D44F0302 - -I=258 -KEY=7DA814BD80D8CBBEE778E030682E7F34CF975388B3944D57C5E91DA9EDB6A01E -CT=BFD55D67EF4883200FDAEEA5D44F0302 -PT=E821629542650FAFEF08D94AC889078A - -I=259 -KEY=10490CD6F16D915CE9891C69E10884D827B6311DF1F142F82AE1C4E3253FA794 -CT=E821629542650FAFEF08D94AC889078A -PT=F2F81CD9CBD3E932686B6195A97EE13A - -I=260 -KEY=F0114F7C7101931F6A4595A6C3D2F34AD54E2DC43A22ABCA428AA5768C4146AE -CT=F2F81CD9CBD3E932686B6195A97EE13A -PT=C90348C14450EE3D9BFA30377D4B2440 - -I=261 -KEY=C5802B19BA4921D3750A590F02658F621C4D65057E7245F7D9709541F10A62EE -CT=C90348C14450EE3D9BFA30377D4B2440 -PT=619E907C4E7FD3A723E34B8D3880D71B - -I=262 -KEY=236500CE70AC49E98907DC4EDAE41CCA7DD3F579300D9650FA93DECCC98AB5F5 -CT=619E907C4E7FD3A723E34B8D3880D71B -PT=932A17E8FDA853F6DB1C9271EC4FBF56 - -I=263 -KEY=7BB7D14473E7E2D70F3C8C90D4B1035CEEF9E291CDA5C5A6218F4CBD25C50AA3 -CT=932A17E8FDA853F6DB1C9271EC4FBF56 -PT=549CB80C490E592E18ACC04FAA933489 - -I=264 -KEY=415AD8391B32F6E61A861B4C8A4BBC6DBA655A9D84AB9C8839238CF28F563E2A -CT=549CB80C490E592E18ACC04FAA933489 -PT=BF6337BEDE116D5A60B06DA8B270159C - -I=265 -KEY=058F24C125EB3E94B54BB6F1F099501C05066D235ABAF1D25993E15A3D262BB6 -CT=BF6337BEDE116D5A60B06DA8B270159C -PT=CBD3D52496E6DF0DBD065BD924C5001F - -I=266 -KEY=B85B96EC639098C392FD33D11A49251ECED5B807CC5C2EDFE495BA8319E32BA9 -CT=CBD3D52496E6DF0DBD065BD924C5001F -PT=AF8879C67DF265E118096478FBA003AD - -I=267 -KEY=526BF9DCAF4A4DFD05FAD0EA3B58131D615DC1C1B1AE4B3EFC9CDEFBE2432804 -CT=AF8879C67DF265E118096478FBA003AD -PT=C627176029E2D22A51F5630B129A1095 - -I=268 -KEY=553316781F120EE83A2D083D97D19F99A77AD6A1984C9914AD69BDF0F0D93891 -CT=C627176029E2D22A51F5630B129A1095 -PT=F46AC5870C65636D6C200312F2A15BE6 - -I=269 -KEY=E9A37578C1402447D6CC1161F126D5C7531013269429FA79C149BEE202786377 -CT=F46AC5870C65636D6C200312F2A15BE6 -PT=4FBBFF3856FC0DEC7EE18585FFA4AC16 - -I=270 -KEY=78521B42D0FBE8EA8BB6D44D66AE476D1CABEC1EC2D5F795BFA83B67FDDCCF61 -CT=4FBBFF3856FC0DEC7EE18585FFA4AC16 -PT=8711DAE7DD9B3F6D9FAD03669C1C8F5E - -I=271 -KEY=851C9A078620280FBCDDFB4FD3745C749BBA36F91F4EC8F82005380161C0403F -CT=8711DAE7DD9B3F6D9FAD03669C1C8F5E -PT=050E884136E09368DEFBC43F6B3182CC - -I=272 -KEY=50CCAA51D781B7090285D907E68B1F7A9EB4BEB829AE5B90FEFEFC3E0AF1C2F3 -CT=050E884136E09368DEFBC43F6B3182CC -PT=CEC37197CEE3E0D797F441CC0541B851 - -I=273 -KEY=DAB5ECB43982EAE8412102E2B7BC7CEA5077CF2FE74DBB47690ABDF20FB07AA2 -CT=CEC37197CEE3E0D797F441CC0541B851 -PT=197ECC091E5620DCA63BA2E6CFBC9F43 - -I=274 -KEY=57974D1C4BBF761C9E09B8DAD3E510DF49090326F91B9B9BCF311F14C00CE5E1 -CT=197ECC091E5620DCA63BA2E6CFBC9F43 -PT=F2E836DEE9668E81D74A3C0F03CF3C10 - -I=275 -KEY=E37677110C5A9A59EC06E0968BF5D14EBBE135F8107D151A187B231BC3C3D9F1 -CT=F2E836DEE9668E81D74A3C0F03CF3C10 -PT=DD581BB9F4A7BEC66CAC7916871F55C8 - -I=276 -KEY=2CD760C245E62EA5B477BDA094B3AD5166B92E41E4DAABDC74D75A0D44DC8C39 -CT=DD581BB9F4A7BEC66CAC7916871F55C8 -PT=7B05D43A3BE733E0DE6E2CE494141B46 - -I=277 -KEY=DE35BF6BC48E8B8E6A30DB886C9D75DD1DBCFA7BDF3D983CAAB976E9D0C8977F -CT=7B05D43A3BE733E0DE6E2CE494141B46 -PT=1D561DCAA42E92568DD6ACD583FF7BCE - -I=278 -KEY=8AD7FCADA5D092DD5D221532EED3FD1000EAE7B17B130A6A276FDA3C5337ECB1 -CT=1D561DCAA42E92568DD6ACD583FF7BCE -PT=1E9AB09A76FD91CC33B85390BDE631F8 - -I=279 -KEY=534EEF6B1450693335980E00CD3CDE361E70572B0DEE9BA614D789ACEED1DD49 -CT=1E9AB09A76FD91CC33B85390BDE631F8 -PT=CBD0E3A07952EAC118A81B76D09276FD - -I=280 -KEY=8A39C2221622785E4DA9B14DAAE6ADF3D5A0B48B74BC71670C7F92DA3E43ABB4 -CT=CBD0E3A07952EAC118A81B76D09276FD -PT=AC20057B857E6C34F7E68A5765573538 - -I=281 -KEY=50887AD2D325CBC04B5FD69518318BAD7980B1F0F1C21D53FB99188D5B149E8C -CT=AC20057B857E6C34F7E68A5765573538 -PT=DDFFD26BA5B33AEA36A0A6D75EAA047C - -I=282 -KEY=9613965C1776C5BAEA3CEE6154AABC9FA47F639B547127B9CD39BE5A05BE9AF0 -CT=DDFFD26BA5B33AEA36A0A6D75EAA047C -PT=F0883B6DD3CA0515CB9F1ABA646CCB69 - -I=283 -KEY=E7F6DB8A94597956CEE07447F9BB5CA454F758F687BB22AC06A6A4E061D25199 -CT=F0883B6DD3CA0515CB9F1ABA646CCB69 -PT=F4E27CA9E27B3E81B981298738C01FDA - -I=284 -KEY=0CB665943D6E6E32886A94C070366FB2A015245F65C01C2DBF278D6759124E43 -CT=F4E27CA9E27B3E81B981298738C01FDA -PT=B03B2EB7A1E13E1A17C51FF5684E2A72 - -I=285 -KEY=1EA698290E4B1D41B0CC4F3B9A9398FF102E0AE8C4212237A8E29292315C6431 -CT=B03B2EB7A1E13E1A17C51FF5684E2A72 -PT=BE133CCCE406C1C0BC1707115B5B0C84 - -I=286 -KEY=BA38F49FA3D4A74ED41F8DA958A953C7AE3D36242027E3F714F595836A0768B5 -CT=BE133CCCE406C1C0BC1707115B5B0C84 -PT=A15B1C9BCF319AEF262E366C142A0DCF - -I=287 -KEY=935F2CEECBBCF3465DB9B0DB927AF4310F662ABFEF16791832DBA3EF7E2D657A -CT=A15B1C9BCF319AEF262E366C142A0DCF -PT=7A8DA23874D28EB75261D87D57451EAE - -I=288 -KEY=B8E67B884E3E229EBB516065499F790275EB88879BC4F7AF60BA7B9229687BD4 -CT=7A8DA23874D28EB75261D87D57451EAE -PT=9331C989A7E291FD94BA4C945A79126E - -I=289 -KEY=CFB51BE6CDA499D66E7B36CAAC220FB7E6DA410E3C266652F4003706731169BA -CT=9331C989A7E291FD94BA4C945A79126E -PT=70A2F921A8BB0548D91A114478308448 - -I=290 -KEY=19821B21FED0C1659AF4E16F49F63B699678B82F949D631A2D1A26420B21EDF2 -CT=70A2F921A8BB0548D91A114478308448 -PT=8ED8FC98045BA0EF9C15E9565EECE5BB - -I=291 -KEY=27DA5E31E794D670BDB701F361B8977018A044B790C6C3F5B10FCF1455CD0849 -CT=8ED8FC98045BA0EF9C15E9565EECE5BB -PT=F6621989AFC0427E3E84039B6C6C2E75 - -I=292 -KEY=64E8F7C4292DF7D0B01BED3FAE08DA4FEEC25D3E3F06818B8F8BCC8F39A1263C -CT=F6621989AFC0427E3E84039B6C6C2E75 -PT=68F4804D1E8D383FAF4E76F80FB8F92B - -I=293 -KEY=EE626AFFE4997C11CAE2714FF96D84B18636DD73218BB9B420C5BA773619DF17 -CT=68F4804D1E8D383FAF4E76F80FB8F92B -PT=2D61F123E2479D56AE5C327A57F6A28B - -I=294 -KEY=EA24B2DB953084C818B0E6F34BA1584DAB572C50C3CC24E28E99880D61EF7D9C -CT=2D61F123E2479D56AE5C327A57F6A28B -PT=C6CD16E7A122D105EE398E6C7F15B4EF - -I=295 -KEY=F209D1ADE0869F674F6FEDCD3DB7D2EB6D9A3AB762EEF5E760A006611EFAC973 -CT=C6CD16E7A122D105EE398E6C7F15B4EF -PT=EDD6BBA5787DA2BF6A1ADF297DB98281 - -I=296 -KEY=302BEB9AA2ACB3594D7E50859C187294804C81121A9357580ABAD94863434BF2 -CT=EDD6BBA5787DA2BF6A1ADF297DB98281 -PT=4A51E54F4F81469A06F6001F2F32F4AC - -I=297 -KEY=3270FC87B4DC04FDD3F20C01407BE123CA1D645D551211C20C4CD9574C71BF5E -CT=4A51E54F4F81469A06F6001F2F32F4AC -PT=F7A2303EA59907BCC32AA4FC5A6DE448 - -I=298 -KEY=C85326465BF46A442BC1E544F9041C4A3DBF5463F08B167ECF667DAB161C5B16 -CT=F7A2303EA59907BCC32AA4FC5A6DE448 -PT=2274E43F9F8A7081DF74D5225EC28AD8 - -I=299 -KEY=A54E889A4D9FFBF993C53A9DD3B951391FCBB05C6F0166FF1012A88948DED1CE -CT=2274E43F9F8A7081DF74D5225EC28AD8 -PT=0C8358EC431313223B59126BDBB36571 - -I=300 -KEY=FA14699C20CFFE7DB68786E6117F95851348E8B02C1275DD2B4BBAE2936DB4BF -CT=0C8358EC431313223B59126BDBB36571 -PT=03237A81EEA2EAFBB5AC0B3E635CC1AC - -I=301 -KEY=B3744022A5397A735A4271261A2C96DF106B9231C2B09F269EE7B1DCF0317513 -CT=03237A81EEA2EAFBB5AC0B3E635CC1AC -PT=409EBF7DF31FD9557118B1B5CAB5EBE3 - -I=302 -KEY=8C7A22A934DCBC5E084E472DBAE4848350F52D4C31AF4673EFFF00693A849EF0 -CT=409EBF7DF31FD9557118B1B5CAB5EBE3 -PT=6CF5C9CF4A62C668B6481F7A12EE43DB - -I=303 -KEY=DB0497ED308C95BC9703265174B654D23C00E4837BCD801B59B71F13286ADD2B -CT=6CF5C9CF4A62C668B6481F7A12EE43DB -PT=D8A84E93CFF3EB9DC891333BDA5F3560 - -I=304 -KEY=7A88D30D4CC9AB8EFA76139B68F0028AE4A8AA10B43E6B8691262C28F235E84B -CT=D8A84E93CFF3EB9DC891333BDA5F3560 -PT=009E0C2454E321326336CC56D0660F91 - -I=305 -KEY=55A78B8839B395B552630641648DFCE5E436A634E0DD4AB4F210E07E2253E7DA -CT=009E0C2454E321326336CC56D0660F91 -PT=EBC89334F29560D9B9AEAE2F1D9DC65B - -I=306 -KEY=B41A907C82EDE32C6C1FD0DFED0A232D0FFE350012482A6D4BBE4E513FCE2181 -CT=EBC89334F29560D9B9AEAE2F1D9DC65B -PT=4DA63E94EBB4DA255800C9B25068E47E - -I=307 -KEY=3E428E8A77067008EFDE7BD6174B05B742580B94F9FCF04813BE87E36FA6C5FF -CT=4DA63E94EBB4DA255800C9B25068E47E -PT=6833E2CEFA8CF4B5B4607FA49D7B658D - -I=308 -KEY=39D17AE8C7232386F8339427E4A79AAC2A6BE95A037004FDA7DEF847F2DDA072 -CT=6833E2CEFA8CF4B5B4607FA49D7B658D -PT=41D882B653BEFEEEB9AE354F5ABCC058 - -I=309 -KEY=E8D52C97FA4149312A45D3EFE0A326086BB36BEC50CEFA131E70CD08A861602A -CT=41D882B653BEFEEEB9AE354F5ABCC058 -PT=D54A329BCF56B703BE0F02EE3AACB933 - -I=310 -KEY=D36FAED6CF436A491111890449BC3C66BEF959779F984D10A07FCFE692CDD919 -CT=D54A329BCF56B703BE0F02EE3AACB933 -PT=5FAAEB95E0F9D0C3C43BF725DADC9595 - -I=311 -KEY=9D7BCBB15816A0A941BBB787D2EEA155E153B2E27F619DD3644438C348114C8C -CT=5FAAEB95E0F9D0C3C43BF725DADC9595 -PT=BC699D5E82FD43B45A7B925E8C1A2F3C - -I=312 -KEY=F2EB78917ECAC2E77C19B892E846AE715D3A2FBCFD9CDE673E3FAA9DC40B63B0 -CT=BC699D5E82FD43B45A7B925E8C1A2F3C -PT=773D115B40F0E9EF780B2D10846FA684 - -I=313 -KEY=B10B9F0CECA554749EC178F3C63547DD2A073EE7BD6C37884634878D4064C534 -CT=773D115B40F0E9EF780B2D10846FA684 -PT=50095809CC96520EB8E3A66F499EE147 - -I=314 -KEY=E86E52AEB04DE0D3DC85A91E9B10D2677A0E66EE71FA6586FED721E209FA2473 -CT=50095809CC96520EB8E3A66F499EE147 -PT=6994CF8BA4C731CA33DAFE33D2A0BF94 - -I=315 -KEY=44C3C8A2F0F931926AC73F3E5351B114139AA965D53D544CCD0DDFD1DB5A9BE7 -CT=6994CF8BA4C731CA33DAFE33D2A0BF94 -PT=981902A8FD71DF8B67D52E6FC2813B90 - -I=316 -KEY=2D309D3D2603EC7E7B4EA626E9BDECFE8B83ABCD284C8BC7AAD8F1BE19DBA077 -CT=981902A8FD71DF8B67D52E6FC2813B90 -PT=35FA9A93AE142F562E62771991752B78 - -I=317 -KEY=E80939BCB4DB83768EBAD3CF2DD3F270BE79315E8658A49184BA86A788AE8B0F -CT=35FA9A93AE142F562E62771991752B78 -PT=A3651DBF8585004F0729AF4CA615C674 - -I=318 -KEY=BF1A4C57D4434FA59A2E45DB589AA16F1D1C2CE103DDA4DE839329EB2EBB4D7B -CT=A3651DBF8585004F0729AF4CA615C674 -PT=AF31F082CACEB768627B93A4D3E5349A - -I=319 -KEY=6EB47730BACAAB2207A3D12B0652B0CDB22DDC63C91313B6E1E8BA4FFD5E79E1 -CT=AF31F082CACEB768627B93A4D3E5349A -PT=57B75D2B640F45DB2D4A1F71F08545A5 - -I=320 -KEY=3EB0F3D31E648E260FE9F6FA8812ADD1E59A8148AD1C566DCCA2A53E0DDB3C44 -CT=57B75D2B640F45DB2D4A1F71F08545A5 -PT=A812DA38D7B82DF310366FA62FFD11E6 - -I=321 -KEY=0409A87F024E710C27E456CA170B60184D885B707AA47B9EDC94CA9822262DA2 -CT=A812DA38D7B82DF310366FA62FFD11E6 -PT=447F235914368F2BECD5FF98D1A34205 - -I=322 -KEY=7DE3A1E7234BF755908324E13DF413EB09F778296E92F4B530413500F3856FA7 -CT=447F235914368F2BECD5FF98D1A34205 -PT=5205860E4562B5CD6748EF89BF2791E9 - -I=323 -KEY=12EE9519335A2D827649D4EB047EB5255BF2FE272BF041785709DA894CA2FE4E -CT=5205860E4562B5CD6748EF89BF2791E9 -PT=30C0229AFDFF59E24426ACAD8D4AEFDB - -I=324 -KEY=78FF32A055D51E0A9D6E77D838AE72AD6B32DCBDD60F189A132F7624C1E81195 -CT=30C0229AFDFF59E24426ACAD8D4AEFDB -PT=FF467C6E0F82F5D2F9487DDBDB43EFB3 - -I=325 -KEY=6E49FA4CDEFC70619F739B488DD434969474A0D3D98DED48EA670BFF1AABFE26 -CT=FF467C6E0F82F5D2F9487DDBDB43EFB3 -PT=7E375B3D13871B09CA4D3357AC5EBB0E - -I=326 -KEY=90791666C996FF15EED1E20BAFB6B4B3EA43FBEECA0AF641202A38A8B6F54528 -CT=7E375B3D13871B09CA4D3357AC5EBB0E -PT=E64A319F6FBD96BD799760C4077F9713 - -I=327 -KEY=7F0D0CAB938585CF65726A6CB01DE8B00C09CA71A5B760FC59BD586CB18AD23B -CT=E64A319F6FBD96BD799760C4077F9713 -PT=1487C8488C675BD46FAF2EEC0BC7AE7E - -I=328 -KEY=7B429E6D59D4D65E16ED325F49E93D9C188E023929D03B2836127680BA4D7C45 -CT=1487C8488C675BD46FAF2EEC0BC7AE7E -PT=1F103E64A4F5239C9157E70487C50941 - -I=329 -KEY=AF20B02C3C5BD4E33E34359B86BBF2CF079E3C5D8D2518B4A74591843D887504 -CT=1F103E64A4F5239C9157E70487C50941 -PT=24C8481DD1A2245735597A18A2433E41 - -I=330 -KEY=E4F3CE6AFF9926837BAAB04C311F72A7235674405C873CE3921CEB9C9FCB4B45 -CT=24C8481DD1A2245735597A18A2433E41 -PT=3D9E715A686DE9AF8EE37AF54F82AA8A - -I=331 -KEY=A9BACBEC55AA453A83FF82CFDDB7F2F91EC8051A34EAD54C1CFF9169D049E1CF -CT=3D9E715A686DE9AF8EE37AF54F82AA8A -PT=B330735D9AB5B96501CDAF61A8EAD19F - -I=332 -KEY=5826BE9127DB557D401AF4DE6343F8AFADF87647AE5F6C291D323E0878A33050 -CT=B330735D9AB5B96501CDAF61A8EAD19F -PT=61AE40475EA11DBCC364F5377673CE37 - -I=333 -KEY=A8F0146E46A5391D0663380DF9F1FD6FCC563600F0FE7195DE56CB3F0ED0FE67 -CT=61AE40475EA11DBCC364F5377673CE37 -PT=525C1ED538B23D7CFA4A43114CF35BD4 - -I=334 -KEY=20F90A51E7A0BB9B88AE1DD28C8B484A9E0A28D5C84C4CE9241C882E4223A5B3 -CT=525C1ED538B23D7CFA4A43114CF35BD4 -PT=C2957E002E35236D455F53006495E4B7 - -I=335 -KEY=A71CC695B7AEB0D5148FA622536669385C9F56D5E6796F846143DB2E26B64104 -CT=C2957E002E35236D455F53006495E4B7 -PT=76F9C97A4B414E5DE532082BB12F5362 - -I=336 -KEY=617CF5726F26BD9A3B52FC0D902A97AD2A669FAFAD3821D98471D30597991266 -CT=76F9C97A4B414E5DE532082BB12F5362 -PT=F4D9E814D4C61B2FB1D7CDCCBAF14AA1 - -I=337 -KEY=D4DBBCC269A61933E4D63C3BDA5F522EDEBF77BB79FE3AF635A61EC92D6858C7 -CT=F4D9E814D4C61B2FB1D7CDCCBAF14AA1 -PT=6B51AF38B42F226D62474A97BD001FFF - -I=338 -KEY=512FAF06A5885D032A885EC030AF3C18B5EED883CDD1189B57E1545E90684738 -CT=6B51AF38B42F226D62474A97BD001FFF -PT=868C58D6B805CF8F9EB04A8BA123371A - -I=339 -KEY=BDD2CB78E9B554FC7FEEEC05D02309F23362805575D4D714C9511ED5314B7022 -CT=868C58D6B805CF8F9EB04A8BA123371A -PT=1752558A1F90975140CA41F68BE5333F - -I=340 -KEY=15CC46826BFD5B45ABAE9B0B2756D39C2430D5DF6A444045899B5F23BAAE431D -CT=1752558A1F90975140CA41F68BE5333F -PT=68801EAB4042E7390E64AA53C38C1D15 - -I=341 -KEY=DF5FB425C5B25E15EA717736D8ABE6644CB0CB742A06A77C87FFF57079225E08 -CT=68801EAB4042E7390E64AA53C38C1D15 -PT=02FE87211909D8954EC90EF53100F26D - -I=342 -KEY=CD73FCED5EBA6038DD8B8A000111BEF94E4E4C55330F7FE9C936FB854822AC65 -CT=02FE87211909D8954EC90EF53100F26D -PT=3A51FAFD22A2CC95B532023A37BBF0FE - -I=343 -KEY=EF890ED47D9F1581CC98C88F3BF7F88D741FB6A811ADB37C7C04F9BF7F995C9B -CT=3A51FAFD22A2CC95B532023A37BBF0FE -PT=D233A6BBC315BA5F4630AE7F99F77116 - -I=344 -KEY=AA9CA1A7DFA24E1936E49D34054F7749A62C1013D2B809233A3457C0E66E2D8D -CT=D233A6BBC315BA5F4630AE7F99F77116 -PT=E6B9619D7B0E1DF6CFE79FD51533406B - -I=345 -KEY=ADC4161B346687F98D4CB5B661662A8A4095718EA9B614D5F5D3C815F35D6DE6 -CT=E6B9619D7B0E1DF6CFE79FD51533406B -PT=A746D31BCB29F7512E3F6E5EFD14FDAD - -I=346 -KEY=9C1CA3776C9ED13D220453C8AEFA0ECDE7D3A295629FE384DBECA64B0E49904B -CT=A746D31BCB29F7512E3F6E5EFD14FDAD -PT=B2489A51878848EC37E6782FB2110122 - -I=347 -KEY=B64A5B45ABFDEC3EF8164FCEAE89919E559B38C4E517AB68EC0ADE64BC589169 -CT=B2489A51878848EC37E6782FB2110122 -PT=EF77F9367A063FDB874C9FC96983EAD1 - -I=348 -KEY=AEFFDEE2501961FEEB985134E2B651EDBAECC1F29F1194B36B4641ADD5DB7BB8 -CT=EF77F9367A063FDB874C9FC96983EAD1 -PT=4ECFF4DA51BB2BE1EF8E85C4BBE51C69 - -I=349 -KEY=6B28BA96CEB25B3862F413A2CBED4889F4233528CEAABF5284C8C4696E3E67D1 -CT=4ECFF4DA51BB2BE1EF8E85C4BBE51C69 -PT=0CAEAF484505A1AF13BB0ADCC665F91C - -I=350 -KEY=2062889724A47DD541F1F0A3FC8C5952F88D9A608BAF1EFD9773CEB5A85B9ECD -CT=0CAEAF484505A1AF13BB0ADCC665F91C -PT=6C75CA469CACCCE29CAE88202E02727C - -I=351 -KEY=C2115A8A6EE164B944A8C8128EBAB8E694F850261703D21F0BDD46958659ECB1 -CT=6C75CA469CACCCE29CAE88202E02727C -PT=567060CEFF3AEDDE8AB5823450E35967 - -I=352 -KEY=C3D2704E15936C6916073E234D0012CCC28830E8E8393FC18168C4A1D6BAB5D6 -CT=567060CEFF3AEDDE8AB5823450E35967 -PT=E04F927E409060080EC530D5C344CA24 - -I=353 -KEY=49173A9FB3283181B71264E3FB5591FA22C7A296A8A95FC98FADF47415FE7FF2 -CT=E04F927E409060080EC530D5C344CA24 -PT=4D473408396C17D4BA3DBB63B46E7727 - -I=354 -KEY=8BF3DDDC9217496E29F46E61233D62B66F80969E91C5481D35904F17A19008D5 -CT=4D473408396C17D4BA3DBB63B46E7727 -PT=BB6779933AC9E435C637CDA146A04284 - -I=355 -KEY=6ACA3C31248BFBB5BB9FD54C4B31BC21D4E7EF0DAB0CAC28F3A782B6E7304A51 -CT=BB6779933AC9E435C637CDA146A04284 -PT=5C2129A55114540ED68591C60E45D6CF - -I=356 -KEY=1A270DAD402DC752332671216A6C3BFF88C6C6A8FA18F82625221370E9759C9E -CT=5C2129A55114540ED68591C60E45D6CF -PT=57790B87F69BF1C007E563A82987EEAE - -I=357 -KEY=6E39E75268AC2C51ABE11CE3CE16CAF3DFBFCD2F0C8309E622C770D8C0F27230 -CT=57790B87F69BF1C007E563A82987EEAE -PT=58790B192C8B90B76F34990E28A6689A - -I=358 -KEY=2367A67114D722A79F9434B5A418BEEB87C6C636200899514DF3E9D6E8541AAA -CT=58790B192C8B90B76F34990E28A6689A -PT=599CA8B58EFE301A87CE72540CCB4067 - -I=359 -KEY=A4CE195518F7E36D7E0D5C9666802411DE5A6E83AEF6A94BCA3D9B82E49F5ACD -CT=599CA8B58EFE301A87CE72540CCB4067 -PT=4483131C7E03089F898166A5B3E85E3A - -I=360 -KEY=73C5204211D3648DAAF5FE071186C0E99AD97D9FD0F5A1D443BCFD27577704F7 -CT=4483131C7E03089F898166A5B3E85E3A -PT=DBF64C5A0897B343BAF7047A6C564D02 - -I=361 -KEY=1A3831AFF223BB2FE79C8EF8845E553C412F31C5D8621297F94BF95D3B2149F5 -CT=DBF64C5A0897B343BAF7047A6C564D02 -PT=B24420DA45E3620B619978CB09F1860C - -I=362 -KEY=31EF243EF87C32148751F8F299151042F36B111F9D81709C98D2819632D0CFF9 -CT=B24420DA45E3620B619978CB09F1860C -PT=12B466EF6AE6F28AF78AC184DB8B3C83 - -I=363 -KEY=9E935E6F5D76BEE2E639F2880C8352EEE1DF77F0F76782166F584012E95BF37A -CT=12B466EF6AE6F28AF78AC184DB8B3C83 -PT=518E89A35CF55D591DE8BB924D8F96E7 - -I=364 -KEY=C6398957838B02B5948A95DCBFBF2813B051FE53AB92DF4F72B0FB80A4D4659D -CT=518E89A35CF55D591DE8BB924D8F96E7 -PT=1FDF7FE52BD46EF54F1F7A6242B04BD8 - -I=365 -KEY=5764E84D9000518C185717581E0D70E5AF8E81B68046B1BA3DAF81E2E6642E45 -CT=1FDF7FE52BD46EF54F1F7A6242B04BD8 -PT=2C68E67C37B50056E80DC09B9ED84AA8 - -I=366 -KEY=5F8CB51BF30B954B4AC09620B0A20FCA83E667CAB7F3B1ECD5A2417978BC64ED -CT=2C68E67C37B50056E80DC09B9ED84AA8 -PT=14CC2D821B03BE21355A779B9066BE41 - -I=367 -KEY=50B32E6D62EE3B8CE2DD5797BA70D8D2972A4A48ACF00FCDE0F836E2E8DADAAC -CT=14CC2D821B03BE21355A779B9066BE41 -PT=BB09D339888C27294E73326E64AC3B21 - -I=368 -KEY=E1B2199CAF1C3FA78E973ACF5C3AC8702C239971247C28E4AE8B048C8C76E18D -CT=BB09D339888C27294E73326E64AC3B21 -PT=BCFBD8255802CC8233AEA86E49089328 - -I=369 -KEY=3403D2498A4562E73734D065E9B44AD890D841547C7EE4669D25ACE2C57E72A5 -CT=BCFBD8255802CC8233AEA86E49089328 -PT=5A919AC72F12DB1FAB8E4876FBA8842B - -I=370 -KEY=B979FA15F93E5ACA1F6E452C9053751BCA49DB93536C3F7936ABE4943ED6F68E -CT=5A919AC72F12DB1FAB8E4876FBA8842B -PT=BDB03BD29FD3828AF1AE8C729F37F88A - -I=371 -KEY=A8CDF9FE3C0227A9107C700C404AE39777F9E041CCBFBDF3C70568E6A1E10E04 -CT=BDB03BD29FD3828AF1AE8C729F37F88A -PT=0AAC43CE316476F3A532D44B4DFBF4B8 - -I=372 -KEY=B4D497FBD5DE2CA68FF60C701E208A257D55A38FFDDBCB006237BCADEC1AFABC -CT=0AAC43CE316476F3A532D44B4DFBF4B8 -PT=853A5EE7CB3C4BB3F0120BB2CFFB4436 - -I=373 -KEY=A019DCC09A4CAAA3772BF4C54C8828E9F86FFD6836E780B39225B71F23E1BE8A -CT=853A5EE7CB3C4BB3F0120BB2CFFB4436 -PT=B525599C918446AF4EA9F6965F3971EA - -I=374 -KEY=238BF8B851B0864F9BEC8E242B7795D14D4AA4F4A763C61CDC8C41897CD8CF60 -CT=B525599C918446AF4EA9F6965F3971EA -PT=A8377EC293D41F74A0A2DB66BA7D3D2F - -I=375 -KEY=AF9E313988F294AE6A8155BC76F2514BE57DDA3634B7D9687C2E9AEFC6A5F24F -CT=A8377EC293D41F74A0A2DB66BA7D3D2F -PT=301BD4D318101A02166EBC23DED9C12D - -I=376 -KEY=3B6186F7ACE8E9B022DDE0ECF5D808D3D5660EE52CA7C36A6A4026CC187C3362 -CT=301BD4D318101A02166EBC23DED9C12D -PT=05BD0686BE53B94FB1B42AE407BE081C - -I=377 -KEY=EADED20A0F405D9E3AAE404FB074162ED0DB086392F47A25DBF40C281FC23B7E -CT=05BD0686BE53B94FB1B42AE407BE081C -PT=7A3AF681F2043806EDB761F65D9A6C3A - -I=378 -KEY=AA6F474F5F5FF513FC992E4232061B75AAE1FEE260F0422336436DDE42585744 -CT=7A3AF681F2043806EDB761F65D9A6C3A -PT=3C297DE35CCF4E6E0A800B9A3EE37C95 - -I=379 -KEY=68BFE30863F135A09B81BE2800CBBC3796C883013C3F0C4D3CC366447CBB2BD1 -CT=3C297DE35CCF4E6E0A800B9A3EE37C95 -PT=5F8AAC15C74CC7EA87A1AC185103A9D7 - -I=380 -KEY=9093DEBE66D714180BEB8FE51C4807ADC9422F14FB73CBA7BB62CA5C2DB88206 -CT=5F8AAC15C74CC7EA87A1AC185103A9D7 -PT=083AF3AF30961FD5A077F5564D55E9E9 - -I=381 -KEY=A1E1049159A94DF638092C90F7707CD7C178DCBBCBE5D4721B153F0A60ED6BEF -CT=083AF3AF30961FD5A077F5564D55E9E9 -PT=89BEFF6AB40B18ECD9413446E848253A - -I=382 -KEY=7C506732A8863DB1BF61EFC710F22D2348C623D17FEECC9EC2540B4C88A54ED5 -CT=89BEFF6AB40B18ECD9413446E848253A -PT=095B2C04636C9C5BF9735BCA21211EAA - -I=383 -KEY=7283413612863BA1E1B5AE93DF1318F5419D0FD51C8250C53B275086A984507F -CT=095B2C04636C9C5BF9735BCA21211EAA -PT=E95DB3DB1E3A478C8A31212B28E0E7BC - -I=384 -KEY=BE861CED86D725162D938727D7AEFC1BA8C0BC0E02B81749B11671AD8164B7C3 -CT=E95DB3DB1E3A478C8A31212B28E0E7BC -PT=9927F1D7EF0631500E1DF058932BF320 - -I=385 -KEY=45AA89CBCE192CEEC22BF5F33DDE0E8D31E74DD9EDBE2619BF0B81F5124F44E3 -CT=9927F1D7EF0631500E1DF058932BF320 -PT=4B1147179F2AF27E5C9DBB7F01CC56A8 - -I=386 -KEY=B08A08DABC52884E9EBB310236815BFE7AF60ACE7294D467E3963A8A1383124B -CT=4B1147179F2AF27E5C9DBB7F01CC56A8 -PT=E9752A7D47734DACAC6E74A1A3EC4956 - -I=387 -KEY=34B4424CE75A4A1BCE9E6C825F5F0DC1938320B335E799CB4FF84E2BB06F5B1D -CT=E9752A7D47734DACAC6E74A1A3EC4956 -PT=AB2D652BCEE42804C5155980DA02CECC - -I=388 -KEY=F9954BB1A793565A79AA2B9DF408A34A38AE4598FB03B1CF8AED17AB6A6D95D1 -CT=AB2D652BCEE42804C5155980DA02CECC -PT=3C6651362E89F6C6B28C04CA22F110EC - -I=389 -KEY=9548931715FB259E318020E30D68165604C814AED58A470938611361489C853D -CT=3C6651362E89F6C6B28C04CA22F110EC -PT=15598364698838475AB96F95CFCF3342 - -I=390 -KEY=1CDB0706417BBE66B559237109353221119197CABC027F4E62D87CF48753B67F -CT=15598364698838475AB96F95CFCF3342 -PT=D8B3BB941893206E1CA6654B81F403E4 - -I=391 -KEY=8C4AD897B595252B0987673F45EE73F2C9222C5EA4915F207E7E19BF06A7B59B -CT=D8B3BB941893206E1CA6654B81F403E4 -PT=ECE471CC2FF45C26C7143C41702F90D2 - -I=392 -KEY=A6D3DF3279B7405256C0D22DA240524125C65D928B650306B96A25FE76882549 -CT=ECE471CC2FF45C26C7143C41702F90D2 -PT=AB387AE5A5FC892C311D97C22467940D - -I=393 -KEY=36F250F7C3906C7E0020055422CDB8B28EFE27772E998A2A8877B23C52EFB144 -CT=AB387AE5A5FC892C311D97C22467940D -PT=FF48C2C77D5F52DF27C4060DF7F895D7 - -I=394 -KEY=4FF045275860B943EDE02C802F34B71B71B6E5B053C6D8F5AFB3B431A5172493 -CT=FF48C2C77D5F52DF27C4060DF7F895D7 -PT=221BC444E2A6A7F8DE9DA16AB01EB2AC - -I=395 -KEY=E15B4E0E242FBABF1D47E9DBE6D0660253AD21F4B1607F0D712E155B1509963F -CT=221BC444E2A6A7F8DE9DA16AB01EB2AC -PT=DE252D19973ABD9F182049D39455784B - -I=396 -KEY=401023A611A3133C895A3684AB3E7C9D8D880CED265AC292690E5C88815CEE74 -CT=DE252D19973ABD9F182049D39455784B -PT=843163BD101982EE948039915C8F60D8 - -I=397 -KEY=B9DDF52C271F143E523532E45E6F368D09B96F503643407CFD8E6519DDD38EAC -CT=843163BD101982EE948039915C8F60D8 -PT=6FD9D36B751854C3417F29E8F3B654D9 - -I=398 -KEY=AC7F45F8630CE02525F9F4941B4E13206660BC3B435B14BFBCF14CF12E65DA75 -CT=6FD9D36B751854C3417F29E8F3B654D9 -PT=E1268BA8A1473DEDE6CA64DDF2C8B805 - -I=399 -KEY=DE11FF0A429E1CD3DE016DAC294F771187463793E21C29525A3B282CDCAD6270 -CT=E1268BA8A1473DEDE6CA64DDF2C8B805 -PT=4DE0C6DF7CB1697284604D60271BC59A - -=========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_e_m.txt b/src/lib/crypto/aes/test/ecb_e_m.txt deleted file mode 100644 index 40a95e7ca..000000000 --- a/src/lib/crypto/aes/test/ecb_e_m.txt +++ /dev/null @@ -1,6024 +0,0 @@ - -========================= - -FILENAME: "ecb_e_m.txt" - -Electronic Codebook (ECB) Mode - ENCRYPTION -Monte Carlo Test - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========================= - -KEYSIZE=128 - -I=0 -KEY=00000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=C34C052CC0DA8D73451AFE5F03BE297F - -I=1 -KEY=C34C052CC0DA8D73451AFE5F03BE297F -PT=C34C052CC0DA8D73451AFE5F03BE297F -CT=0AC15A9AFBB24D54AD99E987208272E2 - -I=2 -KEY=C98D5FB63B68C027E88317D8233C5B9D -PT=0AC15A9AFBB24D54AD99E987208272E2 -CT=A3D43BFFA65D0E80092F67A314857870 - -I=3 -KEY=6A5964499D35CEA7E1AC707B37B923ED -PT=A3D43BFFA65D0E80092F67A314857870 -CT=355F697E8B868B65B25A04E18D782AFA - -I=4 -KEY=5F060D3716B345C253F6749ABAC10917 -PT=355F697E8B868B65B25A04E18D782AFA -CT=ACC863637868E3E068D2FD6E3508454A - -I=5 -KEY=F3CE6E546EDBA6223B2489F48FC94C5D -PT=ACC863637868E3E068D2FD6E3508454A -CT=665F9F12A824F3D52A1C71D6210D5470 - -I=6 -KEY=9591F146C6FF55F71138F822AEC4182D -PT=665F9F12A824F3D52A1C71D6210D5470 -CT=9B27361DBC8E5618E8E98036F5AD40B0 - -I=7 -KEY=0EB6C75B7A7103EFF9D178145B69589D -PT=9B27361DBC8E5618E8E98036F5AD40B0 -CT=21D9BD7EBA0163A293F2D56C316CBD36 - -I=8 -KEY=2F6F7A25C070604D6A23AD786A05E5AB -PT=21D9BD7EBA0163A293F2D56C316CBD36 -CT=3E8037A9988E28FF81F2A7154ACD91BE - -I=9 -KEY=11EF4D8C58FE48B2EBD10A6D20C87415 -PT=3E8037A9988E28FF81F2A7154ACD91BE -CT=014EE14F1AA8C0D4A47A72F197F4DCB0 - -I=10 -KEY=10A1ACC3425688664FAB789CB73CA8A5 -PT=014EE14F1AA8C0D4A47A72F197F4DCB0 -CT=0B542083DBC03A96AA00C1A5AE58C9F1 - -I=11 -KEY=1BF58C409996B2F0E5ABB93919646154 -PT=0B542083DBC03A96AA00C1A5AE58C9F1 -CT=7340B59E1E3BB9211CE167F2DEBDB090 - -I=12 -KEY=68B539DE87AD0BD1F94ADECBC7D9D1C4 -PT=7340B59E1E3BB9211CE167F2DEBDB090 -CT=67E05F75135BA834CBCDCFF068541BBE - -I=13 -KEY=0F5566AB94F6A3E53287113BAF8DCA7A -PT=67E05F75135BA834CBCDCFF068541BBE -CT=8BD5553105C3507B0A07FDB351B25B4F - -I=14 -KEY=8480339A9135F39E3880EC88FE3F9135 -PT=8BD5553105C3507B0A07FDB351B25B4F -CT=649F061F95C0A79BD3066EFFE5B27CAB - -I=15 -KEY=E01F358504F55405EB8682771B8DED9E -PT=649F061F95C0A79BD3066EFFE5B27CAB -CT=697F4EB0603340E90FE91C27B6D9CEAA - -I=16 -KEY=89607B3564C614ECE46F9E50AD542334 -PT=697F4EB0603340E90FE91C27B6D9CEAA -CT=A8CBBA624FA28A7F8637324E1E20CB9C - -I=17 -KEY=21ABC1572B649E936258AC1EB374E8A8 -PT=A8CBBA624FA28A7F8637324E1E20CB9C -CT=73B852132DE715872A40EB25B1133C00 - -I=18 -KEY=5213934406838B144818473B0267D4A8 -PT=73B852132DE715872A40EB25B1133C00 -CT=1328A1C2F386BB3E4D4BE0942B8249A2 - -I=19 -KEY=413B3286F505302A0553A7AF29E59D0A -PT=1328A1C2F386BB3E4D4BE0942B8249A2 -CT=06F72DEA0067F543AA8C342CC9191745 - -I=20 -KEY=47CC1F6CF562C569AFDF9383E0FC8A4F -PT=06F72DEA0067F543AA8C342CC9191745 -CT=110B6011B60C94382C2321BFCAA62A1C - -I=21 -KEY=56C77F7D436E515183FCB23C2A5AA053 -PT=110B6011B60C94382C2321BFCAA62A1C -CT=80C90EF6794361DFA400EFE922F45A59 - -I=22 -KEY=D60E718B3A2D308E27FC5DD508AEFA0A -PT=80C90EF6794361DFA400EFE922F45A59 -CT=F8DF0AC62EE229245DB1F300F2E5B143 - -I=23 -KEY=2ED17B4D14CF19AA7A4DAED5FA4B4B49 -PT=F8DF0AC62EE229245DB1F300F2E5B143 -CT=45390146539E773B502E84A0C29AD5B0 - -I=24 -KEY=6BE87A0B47516E912A632A7538D19EF9 -PT=45390146539E773B502E84A0C29AD5B0 -CT=B07721757865838BDFC2329998B5174F - -I=25 -KEY=DB9F5B7E3F34ED1AF5A118ECA06489B6 -PT=B07721757865838BDFC2329998B5174F -CT=B83F3B7A9FFBA35DF1D6661A0F8AD0F4 - -I=26 -KEY=63A06004A0CF4E4704777EF6AFEE5942 -PT=B83F3B7A9FFBA35DF1D6661A0F8AD0F4 -CT=7098C99B1B245DE623B78F1B07D08EBE - -I=27 -KEY=1338A99FBBEB13A127C0F1EDA83ED7FC -PT=7098C99B1B245DE623B78F1B07D08EBE -CT=58A095EF9268B923920238486D0B13E1 - -I=28 -KEY=4B983C702983AA82B5C2C9A5C535C41D -PT=58A095EF9268B923920238486D0B13E1 -CT=97DD8052CE0D87715075A42942C120ED - -I=29 -KEY=DC45BC22E78E2DF3E5B76D8C87F4E4F0 -PT=97DD8052CE0D87715075A42942C120ED -CT=F480B5A67DAFCB9524DC21453AF66FAF - -I=30 -KEY=28C509849A21E666C16B4CC9BD028B5F -PT=F480B5A67DAFCB9524DC21453AF66FAF -CT=71CE64CE8C98367F2F12E6851AC70FF3 - -I=31 -KEY=590B6D4A16B9D019EE79AA4CA7C584AC -PT=71CE64CE8C98367F2F12E6851AC70FF3 -CT=81C3AA693CC1C647399701DA17D5FDD5 - -I=32 -KEY=D8C8C7232A78165ED7EEAB96B0107979 -PT=81C3AA693CC1C647399701DA17D5FDD5 -CT=5BB93103F6DDF0415592EE2217704D41 - -I=33 -KEY=8371F620DCA5E61F827C45B4A7603438 -PT=5BB93103F6DDF0415592EE2217704D41 -CT=87B8B17FF9079829AB5C47E055FFCEE3 - -I=34 -KEY=04C9475F25A27E3629200254F29FFADB -PT=87B8B17FF9079829AB5C47E055FFCEE3 -CT=615FE7D34154F42D6CE9D647904295E0 - -I=35 -KEY=6596A08C64F68A1B45C9D41362DD6F3B -PT=615FE7D34154F42D6CE9D647904295E0 -CT=A60C213CDF9B54DF9041948F98585CE2 - -I=36 -KEY=C39A81B0BB6DDEC4D588409CFA8533D9 -PT=A60C213CDF9B54DF9041948F98585CE2 -CT=FB126C61071EB9167B6FF28E5244E624 - -I=37 -KEY=3888EDD1BC7367D2AEE7B212A8C1D5FD -PT=FB126C61071EB9167B6FF28E5244E624 -CT=8A79CE45F030B91B53D1591D10FF1B02 - -I=38 -KEY=B2F123944C43DEC9FD36EB0FB83ECEFF -PT=8A79CE45F030B91B53D1591D10FF1B02 -CT=BE20190BAE15162F43E93F67A580192B - -I=39 -KEY=0CD13A9FE256C8E6BEDFD4681DBED7D4 -PT=BE20190BAE15162F43E93F67A580192B -CT=0107D3E3511F91545D02B498A9E3C318 - -I=40 -KEY=0DD6E97CB34959B2E3DD60F0B45D14CC -PT=0107D3E3511F91545D02B498A9E3C318 -CT=2A832A1205D6B5FCF1B20126EE59DD9D - -I=41 -KEY=2755C36EB69FEC4E126F61D65A04C951 -PT=2A832A1205D6B5FCF1B20126EE59DD9D -CT=F362782F550DCBFC49CEF15C3A0ABA7A - -I=42 -KEY=D437BB41E39227B25BA1908A600E732B -PT=F362782F550DCBFC49CEF15C3A0ABA7A -CT=51A8A0C6434A3BE8C939B6DDD56EAA53 - -I=43 -KEY=859F1B87A0D81C5A92982657B560D978 -PT=51A8A0C6434A3BE8C939B6DDD56EAA53 -CT=89D3F1086F3D96C18A76C61F25A52221 - -I=44 -KEY=0C4CEA8FCFE58A9B18EEE04890C5FB59 -PT=89D3F1086F3D96C18A76C61F25A52221 -CT=A5F7E0A5FA70DDB718EF970F50EB7B86 - -I=45 -KEY=A9BB0A2A3595572C00017747C02E80DF -PT=A5F7E0A5FA70DDB718EF970F50EB7B86 -CT=7BB64305538E71AFBF993B5BD23D5523 - -I=46 -KEY=D20D492F661B2683BF984C1C1213D5FC -PT=7BB64305538E71AFBF993B5BD23D5523 -CT=E6BF8F5338568603EC668C6D15331FA5 - -I=47 -KEY=34B2C67C5E4DA08053FEC0710720CA59 -PT=E6BF8F5338568603EC668C6D15331FA5 -CT=27644649FCDF52085CDB20E3DEE1E2F6 - -I=48 -KEY=13D68035A292F2880F25E092D9C128AF -PT=27644649FCDF52085CDB20E3DEE1E2F6 -CT=7629AACAED7F49938373C83410AD1744 - -I=49 -KEY=65FF2AFF4FEDBB1B8C5628A6C96C3FEB -PT=7629AACAED7F49938373C83410AD1744 -CT=D440FC6E9A65819934FAF8641C05A17C - -I=50 -KEY=B1BFD691D5883A82B8ACD0C2D5699E97 -PT=D440FC6E9A65819934FAF8641C05A17C -CT=FBEE29FEFD725E1852B58502D3076C46 - -I=51 -KEY=4A51FF6F28FA649AEA1955C0066EF2D1 -PT=FBEE29FEFD725E1852B58502D3076C46 -CT=E345A47A6C89BE4350CDD8C9D319529D - -I=52 -KEY=A9145B154473DAD9BAD48D09D577A04C -PT=E345A47A6C89BE4350CDD8C9D319529D -CT=1C6A7CBAF21E483B6025DB6DA573C5C6 - -I=53 -KEY=B57E27AFB66D92E2DAF156647004658A -PT=1C6A7CBAF21E483B6025DB6DA573C5C6 -CT=2B05F4D8EB50D851A013798753B65A1F - -I=54 -KEY=9E7BD3775D3D4AB37AE22FE323B23F95 -PT=2B05F4D8EB50D851A013798753B65A1F -CT=CEFE04978228A0DBCCE9EE42B21DD34A - -I=55 -KEY=5085D7E0DF15EA68B60BC1A191AFECDF -PT=CEFE04978228A0DBCCE9EE42B21DD34A -CT=7B41DF8CD85B61EA800536648DBDA2AE - -I=56 -KEY=2BC4086C074E8B82360EF7C51C124E71 -PT=7B41DF8CD85B61EA800536648DBDA2AE -CT=08688872151D18CD19E2FC14B9E4C962 - -I=57 -KEY=23AC801E1253934F2FEC0BD1A5F68713 -PT=08688872151D18CD19E2FC14B9E4C962 -CT=F08C88BE5E748C4D82D2E7D7813A33AF - -I=58 -KEY=D32008A04C271F02AD3EEC0624CCB4BC -PT=F08C88BE5E748C4D82D2E7D7813A33AF -CT=319B7D38AB1AC3AEA0A0490C341F4F20 - -I=59 -KEY=E2BB7598E73DDCAC0D9EA50A10D3FB9C -PT=319B7D38AB1AC3AEA0A0490C341F4F20 -CT=EE70748772E8D88B2717D78F31F0EA86 - -I=60 -KEY=0CCB011F95D504272A8972852123111A -PT=EE70748772E8D88B2717D78F31F0EA86 -CT=A3A5DC791EA1BBB9D7A2B292572DFD5C - -I=61 -KEY=AF6EDD668B74BF9EFD2BC017760EEC46 -PT=A3A5DC791EA1BBB9D7A2B292572DFD5C -CT=255692B06B3A18498BCAF99F7B3EE374 - -I=62 -KEY=8A384FD6E04EA7D776E139880D300F32 -PT=255692B06B3A18498BCAF99F7B3EE374 -CT=500E492232891293875F50279B5DC5C3 - -I=63 -KEY=DA3606F4D2C7B544F1BE69AF966DCAF1 -PT=500E492232891293875F50279B5DC5C3 -CT=57C3FCCE9B5BA3BC19BBF7BB9B37A9AC - -I=64 -KEY=8DF5FA3A499C16F8E8059E140D5A635D -PT=57C3FCCE9B5BA3BC19BBF7BB9B37A9AC -CT=BF06FDFDB687C8B24FB0E2A6D6D37EA5 - -I=65 -KEY=32F307C7FF1BDE4AA7B57CB2DB891DF8 -PT=BF06FDFDB687C8B24FB0E2A6D6D37EA5 -CT=6D459ED545CF3C6FF2746411CD9B3E31 - -I=66 -KEY=5FB69912BAD4E22555C118A3161223C9 -PT=6D459ED545CF3C6FF2746411CD9B3E31 -CT=C74E0704A9D9EC2D90F75B34FC95CD32 - -I=67 -KEY=98F89E16130D0E08C5364397EA87EEFB -PT=C74E0704A9D9EC2D90F75B34FC95CD32 -CT=0453D4FBC2D7F8E0AD0AD90F98D1EC5C - -I=68 -KEY=9CAB4AEDD1DAF6E8683C9A98725602A7 -PT=0453D4FBC2D7F8E0AD0AD90F98D1EC5C -CT=5BBA052D6C39DC1E9553B7646CB7344B - -I=69 -KEY=C7114FC0BDE32AF6FD6F2DFC1EE136EC -PT=5BBA052D6C39DC1E9553B7646CB7344B -CT=9870FFE04984426501ECB55FFBB363CB - -I=70 -KEY=5F61B020F4676893FC8398A3E5525527 -PT=9870FFE04984426501ECB55FFBB363CB -CT=1363D65F7C943FC4512E41A717D3704D - -I=71 -KEY=4C02667F88F35757ADADD904F281256A -PT=1363D65F7C943FC4512E41A717D3704D -CT=664762AED6BC5FB74A646A928837FC83 - -I=72 -KEY=2A4504D15E4F08E0E7C9B3967AB6D9E9 -PT=664762AED6BC5FB74A646A928837FC83 -CT=655CB6BAB4B0532273689E4DC9234C42 - -I=73 -KEY=4F19B26BEAFF5BC294A12DDBB39595AB -PT=655CB6BAB4B0532273689E4DC9234C42 -CT=E8AAE0E0B9D2BE6259AEBC478DC90FD9 - -I=74 -KEY=A7B3528B532DE5A0CD0F919C3E5C9A72 -PT=E8AAE0E0B9D2BE6259AEBC478DC90FD9 -CT=FECACAF43DD920FA3078256C6A587741 - -I=75 -KEY=5979987F6EF4C55AFD77B4F05404ED33 -PT=FECACAF43DD920FA3078256C6A587741 -CT=11F3F56529B8B172D87A4C86BB90F3B6 - -I=76 -KEY=488A6D1A474C7428250DF876EF941E85 -PT=11F3F56529B8B172D87A4C86BB90F3B6 -CT=B44340D44F1ABA37CB09FE57FC771A9E - -I=77 -KEY=FCC92DCE0856CE1FEE04062113E3041B -PT=B44340D44F1ABA37CB09FE57FC771A9E -CT=C49F12B88C34A0D696FE283B01D5710C - -I=78 -KEY=38563F7684626EC978FA2E1A12367517 -PT=C49F12B88C34A0D696FE283B01D5710C -CT=58D6D2D36C14DDBDA7604AB740918D76 - -I=79 -KEY=6080EDA5E876B374DF9A64AD52A7F861 -PT=58D6D2D36C14DDBDA7604AB740918D76 -CT=21F735F77B0EAD7551CE06900A568EB3 - -I=80 -KEY=4177D85293781E018E54623D58F176D2 -PT=21F735F77B0EAD7551CE06900A568EB3 -CT=FE2E9BDB393BF6D1BBF108B8AC3B6818 - -I=81 -KEY=BF594389AA43E8D035A56A85F4CA1ECA -PT=FE2E9BDB393BF6D1BBF108B8AC3B6818 -CT=FECFCD3722C6C8E6608258341220E739 - -I=82 -KEY=41968EBE88852036552732B1E6EAF9F3 -PT=FECFCD3722C6C8E6608258341220E739 -CT=10A8BB234C9D9A22DEC7887E931F85BD - -I=83 -KEY=513E359DC418BA148BE0BACF75F57C4E -PT=10A8BB234C9D9A22DEC7887E931F85BD -CT=767EB7DBA70BC7094DF7A5BDD233EB5C - -I=84 -KEY=2740824663137D1DC6171F72A7C69712 -PT=767EB7DBA70BC7094DF7A5BDD233EB5C -CT=FCD7184F3F4DB7CA182225B9A358209D - -I=85 -KEY=DB979A095C5ECAD7DE353ACB049EB78F -PT=FCD7184F3F4DB7CA182225B9A358209D -CT=A5CD025AEBF0380EAC66EF034806179F - -I=86 -KEY=7E5A9853B7AEF2D97253D5C84C98A010 -PT=A5CD025AEBF0380EAC66EF034806179F -CT=FE46F4A72C7031FE8D900152CD20B95F - -I=87 -KEY=801C6CF49BDEC327FFC3D49A81B8194F -PT=FE46F4A72C7031FE8D900152CD20B95F -CT=CF1ACB502A4B608C61364891E34F93A0 - -I=88 -KEY=4F06A7A4B195A3AB9EF59C0B62F78AEF -PT=CF1ACB502A4B608C61364891E34F93A0 -CT=95AB1367FF6C03DE87FFA282A3E52200 - -I=89 -KEY=DAADB4C34EF9A075190A3E89C112A8EF -PT=95AB1367FF6C03DE87FFA282A3E52200 -CT=762B6393252B347F55AF3E4CA16F2FC9 - -I=90 -KEY=AC86D7506BD2940A4CA500C5607D8726 -PT=762B6393252B347F55AF3E4CA16F2FC9 -CT=A63491A22E23AD921ADAB9CC0DA20521 - -I=91 -KEY=0AB246F245F13998567FB9096DDF8207 -PT=A63491A22E23AD921ADAB9CC0DA20521 -CT=C0852A5E7CEEAFB5FA87C440B598BFD6 - -I=92 -KEY=CA376CAC391F962DACF87D49D8473DD1 -PT=C0852A5E7CEEAFB5FA87C440B598BFD6 -CT=485747C528B08033169E991E98E4CBB5 - -I=93 -KEY=82602B6911AF161EBA66E45740A3F664 -PT=485747C528B08033169E991E98E4CBB5 -CT=415B95B222161A8C9ED20CF99C26848C - -I=94 -KEY=C33BBEDB33B90C9224B4E8AEDC8572E8 -PT=415B95B222161A8C9ED20CF99C26848C -CT=7E673E6348C38CD40C9B11F4C9F3E3A0 - -I=95 -KEY=BD5C80B87B7A8046282FF95A15769148 -PT=7E673E6348C38CD40C9B11F4C9F3E3A0 -CT=B88508E55279AFF0D848C38DBEC76B2C - -I=96 -KEY=05D9885D29032FB6F0673AD7ABB1FA64 -PT=B88508E55279AFF0D848C38DBEC76B2C -CT=3902B5DC34E815BA50A53DB9C8FFAA92 - -I=97 -KEY=3CDB3D811DEB3A0CA0C2076E634E50F6 -PT=3902B5DC34E815BA50A53DB9C8FFAA92 -CT=FEF57F51360547EA6B88085B8656A1D0 - -I=98 -KEY=C22E42D02BEE7DE6CB4A0F35E518F126 -PT=FEF57F51360547EA6B88085B8656A1D0 -CT=94D052E1F097106A5B714ADD0EF79E64 - -I=99 -KEY=56FE1031DB796D8C903B45E8EBEF6F42 -PT=94D052E1F097106A5B714ADD0EF79E64 -CT=7FD3EF411360E5270F63A8BACCCC74C0 - -I=100 -KEY=292DFF70C81988AB9F58ED5227231B82 -PT=7FD3EF411360E5270F63A8BACCCC74C0 -CT=F572692DE6EFBC2309B947D1A75BE009 - -I=101 -KEY=DC5F965D2EF6348896E1AA838078FB8B -PT=F572692DE6EFBC2309B947D1A75BE009 -CT=BFD3233C513448C283C05311B8085B5C - -I=102 -KEY=638CB5617FC27C4A1521F9923870A0D7 -PT=BFD3233C513448C283C05311B8085B5C -CT=078739F570071AA1A96A1F00F31E05FD - -I=103 -KEY=640B8C940FC566EBBC4BE692CB6EA52A -PT=078739F570071AA1A96A1F00F31E05FD -CT=947CA236277CDD0AC13C194B99E8CF16 - -I=104 -KEY=F0772EA228B9BBE17D77FFD952866A3C -PT=947CA236277CDD0AC13C194B99E8CF16 -CT=34DE5F2D355BC4ACE54AD0CB8C008CB8 - -I=105 -KEY=C4A9718F1DE27F4D983D2F12DE86E684 -PT=34DE5F2D355BC4ACE54AD0CB8C008CB8 -CT=E5729CBD84C89B914F35412F902A2CA3 - -I=106 -KEY=21DBED32992AE4DCD7086E3D4EACCA27 -PT=E5729CBD84C89B914F35412F902A2CA3 -CT=EB326D6ABAFC93EADBEC9B05CE4AAF0C - -I=107 -KEY=CAE9805823D677360CE4F53880E6652B -PT=EB326D6ABAFC93EADBEC9B05CE4AAF0C -CT=9F088089F8D8E8E28A9A2A1FF50F2ED3 - -I=108 -KEY=55E100D1DB0E9FD4867EDF2775E94BF8 -PT=9F088089F8D8E8E28A9A2A1FF50F2ED3 -CT=C8D2BF3D6ADB57F478656D4808142160 - -I=109 -KEY=9D33BFECB1D5C820FE1BB26F7DFD6A98 -PT=C8D2BF3D6ADB57F478656D4808142160 -CT=062016811215B9DBDD3C794A15FBEBBA - -I=110 -KEY=9B13A96DA3C071FB2327CB2568068122 -PT=062016811215B9DBDD3C794A15FBEBBA -CT=71F9F04E9AED1C302E5ED2AD36B5C7F5 - -I=111 -KEY=EAEA5923392D6DCB0D7919885EB346D7 -PT=71F9F04E9AED1C302E5ED2AD36B5C7F5 -CT=253982568F6C3FDFDE173E46B614989C - -I=112 -KEY=CFD3DB75B6415214D36E27CEE8A7DE4B -PT=253982568F6C3FDFDE173E46B614989C -CT=6D51D51276A6FA9C933E4D4496D0455E - -I=113 -KEY=A2820E67C0E7A88840506A8A7E779B15 -PT=6D51D51276A6FA9C933E4D4496D0455E -CT=B9A6924F773CE826BBBC6DDBFA4E146A - -I=114 -KEY=1B249C28B7DB40AEFBEC075184398F7F -PT=B9A6924F773CE826BBBC6DDBFA4E146A -CT=474943C523162BC81186779A07144BC6 - -I=115 -KEY=5C6DDFED94CD6B66EA6A70CB832DC4B9 -PT=474943C523162BC81186779A07144BC6 -CT=20128A092B99B4BC212B1107C3BA1DF9 - -I=116 -KEY=7C7F55E4BF54DFDACB4161CC4097D940 -PT=20128A092B99B4BC212B1107C3BA1DF9 -CT=90330B8FB5A50E958250A953EF5145C7 - -I=117 -KEY=EC4C5E6B0AF1D14F4911C89FAFC69C87 -PT=90330B8FB5A50E958250A953EF5145C7 -CT=C1B788D0EB2C8C7B9E020CC2BEACD595 - -I=118 -KEY=2DFBD6BBE1DD5D34D713C45D116A4912 -PT=C1B788D0EB2C8C7B9E020CC2BEACD595 -CT=EF87960DABBE82F6CFA8045CE4A9EED0 - -I=119 -KEY=C27C40B64A63DFC218BBC001F5C3A7C2 -PT=EF87960DABBE82F6CFA8045CE4A9EED0 -CT=405C8408D5027DF90CBE3159701D161A - -I=120 -KEY=8220C4BE9F61A23B1405F15885DEB1D8 -PT=405C8408D5027DF90CBE3159701D161A -CT=FCAB7F88E85D6573A98D23D684A5A5F3 - -I=121 -KEY=7E8BBB36773CC748BD88D28E017B142B -PT=FCAB7F88E85D6573A98D23D684A5A5F3 -CT=191E6F1EECBF5149F4D49446E97D8820 - -I=122 -KEY=6795D4289B839601495C46C8E8069C0B -PT=191E6F1EECBF5149F4D49446E97D8820 -CT=C77128F53D48594194EFBA67E46C6B23 - -I=123 -KEY=A0E4FCDDA6CBCF40DDB3FCAF0C6AF728 -PT=C77128F53D48594194EFBA67E46C6B23 -CT=DFB898170571450CC5E2244AE4D3AF43 - -I=124 -KEY=7F5C64CAA3BA8A4C1851D8E5E8B9586B -PT=DFB898170571450CC5E2244AE4D3AF43 -CT=3BD1633B5053609A3B42CC098F9F5D87 - -I=125 -KEY=448D07F1F3E9EAD6231314EC672605EC -PT=3BD1633B5053609A3B42CC098F9F5D87 -CT=AC15B23F205AEB10470F853BA18361E0 - -I=126 -KEY=E898B5CED3B301C6641C91D7C6A5640C -PT=AC15B23F205AEB10470F853BA18361E0 -CT=2DA73BA6E01B1ADFBEEAFA2E37942078 - -I=127 -KEY=C53F8E6833A81B19DAF66BF9F1314474 -PT=2DA73BA6E01B1ADFBEEAFA2E37942078 -CT=C5B3D7089173958B32340B88D35B738B - -I=128 -KEY=008C5960A2DB8E92E8C26071226A37FF -PT=C5B3D7089173958B32340B88D35B738B -CT=8318BAA96569F3ADCD30C08D54494392 - -I=129 -KEY=8394E3C9C7B27D3F25F2A0FC7623746D -PT=8318BAA96569F3ADCD30C08D54494392 -CT=4F6F2A06A1A344B261084563BCCC5A5A - -I=130 -KEY=CCFBC9CF6611398D44FAE59FCAEF2E37 -PT=4F6F2A06A1A344B261084563BCCC5A5A -CT=07EC18166362BF049A48D146A63FF378 - -I=131 -KEY=CB17D1D905738689DEB234D96CD0DD4F -PT=07EC18166362BF049A48D146A63FF378 -CT=81CB17ABAC28A3ED135442454C212646 - -I=132 -KEY=4ADCC672A95B2564CDE6769C20F1FB09 -PT=81CB17ABAC28A3ED135442454C212646 -CT=C1CBDE45E27B9B1198CE93A51E38D9C5 - -I=133 -KEY=8B1718374B20BE755528E5393EC922CC -PT=C1CBDE45E27B9B1198CE93A51E38D9C5 -CT=8E4EB89DDFEE065784556FA0B426954A - -I=134 -KEY=0559A0AA94CEB822D17D8A998AEFB786 -PT=8E4EB89DDFEE065784556FA0B426954A -CT=6A966414CC6FE52F957E9DE7012EC4BD - -I=135 -KEY=6FCFC4BE58A15D0D4403177E8BC1733B -PT=6A966414CC6FE52F957E9DE7012EC4BD -CT=7C88474D963BFDFE61F052F51D1796EF - -I=136 -KEY=134783F3CE9AA0F325F3458B96D6E5D4 -PT=7C88474D963BFDFE61F052F51D1796EF -CT=6269F5DA04B09D442DDCB46001573AE9 - -I=137 -KEY=712E7629CA2A3DB7082FF1EB9781DF3D -PT=6269F5DA04B09D442DDCB46001573AE9 -CT=FBD2965ACE0B360A12EF39873A8F3805 - -I=138 -KEY=8AFCE07304210BBD1AC0C86CAD0EE738 -PT=FBD2965ACE0B360A12EF39873A8F3805 -CT=5B46EF12C9BE55DCD5571D82E5BC6FF1 - -I=139 -KEY=D1BA0F61CD9F5E61CF97D5EE48B288C9 -PT=5B46EF12C9BE55DCD5571D82E5BC6FF1 -CT=403DEFDB60876F3161CF02F319F5EA9A - -I=140 -KEY=9187E0BAAD183150AE58D71D51476253 -PT=403DEFDB60876F3161CF02F319F5EA9A -CT=70FD321C583C1B54ED6AD3A79721E84A - -I=141 -KEY=E17AD2A6F5242A04433204BAC6668A19 -PT=70FD321C583C1B54ED6AD3A79721E84A -CT=32AE26E948D563782532AC711BFAB644 - -I=142 -KEY=D3D4F44FBDF1497C6600A8CBDD9C3C5D -PT=32AE26E948D563782532AC711BFAB644 -CT=ECF948F5EBB98E4C7286046E0F7AF127 - -I=143 -KEY=3F2DBCBA5648C7301486ACA5D2E6CD7A -PT=ECF948F5EBB98E4C7286046E0F7AF127 -CT=818F87EFA0B5E4098E737AD44DB537BA - -I=144 -KEY=BEA23B55F6FD23399AF5D6719F53FAC0 -PT=818F87EFA0B5E4098E737AD44DB537BA -CT=029F170737413F1BFBE02C292D506E44 - -I=145 -KEY=BC3D2C52C1BC1C226115FA58B2039484 -PT=029F170737413F1BFBE02C292D506E44 -CT=77A7C520912761121373E35FD3B5AF0F - -I=146 -KEY=CB9AE972509B7D307266190761B63B8B -PT=77A7C520912761121373E35FD3B5AF0F -CT=D407B965C368E1F77195ED446BEEBA73 - -I=147 -KEY=1F9D501793F39CC703F3F4430A5881F8 -PT=D407B965C368E1F77195ED446BEEBA73 -CT=D1F304E0B3614A4840F128AA364BA6A3 - -I=148 -KEY=CE6E54F72092D68F4302DCE93C13275B -PT=D1F304E0B3614A4840F128AA364BA6A3 -CT=69B748543EE72474D0CC301BDBD50A6C - -I=149 -KEY=A7D91CA31E75F2FB93CEECF2E7C62D37 -PT=69B748543EE72474D0CC301BDBD50A6C -CT=BA471D91DBC6D27EBA7B510E67830C3F - -I=150 -KEY=1D9E0132C5B3208529B5BDFC80452108 -PT=BA471D91DBC6D27EBA7B510E67830C3F -CT=7C0CF396D078E01A741613B1E1D7A9CB - -I=151 -KEY=6192F2A415CBC09F5DA3AE4D619288C3 -PT=7C0CF396D078E01A741613B1E1D7A9CB -CT=6F670A289398F49C75ACBBE9EAC2ABFC - -I=152 -KEY=0EF5F88C86533403280F15A48B50233F -PT=6F670A289398F49C75ACBBE9EAC2ABFC -CT=C392EF479528BF1B02296E6C894E4FDD - -I=153 -KEY=CD6717CB137B8B182A267BC8021E6CE2 -PT=C392EF479528BF1B02296E6C894E4FDD -CT=C4226C8C98D5F137A4C6A239E04B0FB3 - -I=154 -KEY=09457B478BAE7A2F8EE0D9F1E2556351 -PT=C4226C8C98D5F137A4C6A239E04B0FB3 -CT=2382714FC945AD4A1E03858B63973B9E - -I=155 -KEY=2AC70A0842EBD76590E35C7A81C258CF -PT=2382714FC945AD4A1E03858B63973B9E -CT=E41F350AC9320A8A23E27C0349978168 - -I=156 -KEY=CED83F028BD9DDEFB3012079C855D9A7 -PT=E41F350AC9320A8A23E27C0349978168 -CT=7E9137997CB7676F3D0141797C6F31A8 - -I=157 -KEY=B049089BF76EBA808E006100B43AE80F -PT=7E9137997CB7676F3D0141797C6F31A8 -CT=4BF7EBC15369A757981EE4A0B7F55706 - -I=158 -KEY=FBBEE35AA4071DD7161E85A003CFBF09 -PT=4BF7EBC15369A757981EE4A0B7F55706 -CT=EC677E86A8D2A5935D33D6471A58A781 - -I=159 -KEY=17D99DDC0CD5B8444B2D53E719971888 -PT=EC677E86A8D2A5935D33D6471A58A781 -CT=F31066D48884BC9B37F218FCF385344B - -I=160 -KEY=E4C9FB08845104DF7CDF4B1BEA122CC3 -PT=F31066D48884BC9B37F218FCF385344B -CT=51CFEA4E482A7B7BCF4D31DA5CED4370 - -I=161 -KEY=B5061146CC7B7FA4B3927AC1B6FF6FB3 -PT=51CFEA4E482A7B7BCF4D31DA5CED4370 -CT=89F3CD1590669A16F8460991BFD3CF5C - -I=162 -KEY=3CF5DC535C1DE5B24BD47350092CA0EF -PT=89F3CD1590669A16F8460991BFD3CF5C -CT=9930DA8E5DBC1F6C87B0B41BD386E2E0 - -I=163 -KEY=A5C506DD01A1FADECC64C74BDAAA420F -PT=9930DA8E5DBC1F6C87B0B41BD386E2E0 -CT=41A8CB583E5B9D2BA7CDA3763B6529C0 - -I=164 -KEY=E46DCD853FFA67F56BA9643DE1CF6BCF -PT=41A8CB583E5B9D2BA7CDA3763B6529C0 -CT=53479DCFB0C69624B42B9C272B0A1A85 - -I=165 -KEY=B72A504A8F3CF1D1DF82F81ACAC5714A -PT=53479DCFB0C69624B42B9C272B0A1A85 -CT=E72F27AE86E913EF55309120358BAD35 - -I=166 -KEY=500577E409D5E23E8AB2693AFF4EDC7F -PT=E72F27AE86E913EF55309120358BAD35 -CT=9B1EF901BACC70819DBC627C7CDC8CD9 - -I=167 -KEY=CB1B8EE5B31992BF170E0B46839250A6 -PT=9B1EF901BACC70819DBC627C7CDC8CD9 -CT=9546C7B789345E4C32EE84BCE8E78C7E - -I=168 -KEY=5E5D49523A2DCCF325E08FFA6B75DCD8 -PT=9546C7B789345E4C32EE84BCE8E78C7E -CT=33700B93E03CE8202BAC7E64E3255108 - -I=169 -KEY=6D2D42C1DA1124D30E4CF19E88508DD0 -PT=33700B93E03CE8202BAC7E64E3255108 -CT=44246615BCA5C0A8DCB7E63729398F0A - -I=170 -KEY=290924D466B4E47BD2FB17A9A16902DA -PT=44246615BCA5C0A8DCB7E63729398F0A -CT=3215FC55FEE5A30BFA11F8EBBC912652 - -I=171 -KEY=1B1CD8819851477028EAEF421DF82488 -PT=3215FC55FEE5A30BFA11F8EBBC912652 -CT=796C9136407BC4F484B253DAEB206912 - -I=172 -KEY=627049B7D82A8384AC58BC98F6D84D9A -PT=796C9136407BC4F484B253DAEB206912 -CT=B18977B404F0671C10AA979389408CCA - -I=173 -KEY=D3F93E03DCDAE498BCF22B0B7F98C150 -PT=B18977B404F0671C10AA979389408CCA -CT=B2592621EE947D4ED9AD4295E0675F93 - -I=174 -KEY=61A01822324E99D6655F699E9FFF9EC3 -PT=B2592621EE947D4ED9AD4295E0675F93 -CT=62D3B7E28765DA8F83EBE19C97293C0A - -I=175 -KEY=0373AFC0B52B4359E6B4880208D6A2C9 -PT=62D3B7E28765DA8F83EBE19C97293C0A -CT=F417D650D6B7631542CFF8F95FC81C9B - -I=176 -KEY=F7647990639C204CA47B70FB571EBE52 -PT=F417D650D6B7631542CFF8F95FC81C9B -CT=700A5DE153D6B438FFF7BA902DEC32FF - -I=177 -KEY=876E2471304A94745B8CCA6B7AF28CAD -PT=700A5DE153D6B438FFF7BA902DEC32FF -CT=67DC08A48F1EC7E32121B8693BB23621 - -I=178 -KEY=E0B22CD5BF5453977AAD72024140BA8C -PT=67DC08A48F1EC7E32121B8693BB23621 -CT=90038BB156A7F7992E260E9CBFAC0D82 - -I=179 -KEY=70B1A764E9F3A40E548B7C9EFEECB70E -PT=90038BB156A7F7992E260E9CBFAC0D82 -CT=C6BB1407C2D037BF238BEC772BA95352 - -I=180 -KEY=B60AB3632B2393B1770090E9D545E45C -PT=C6BB1407C2D037BF238BEC772BA95352 -CT=8C3D249574FF74F84053977219D69F5E - -I=181 -KEY=3A3797F65FDCE7493753079BCC937B02 -PT=8C3D249574FF74F84053977219D69F5E -CT=131F7FC5A1528AD5DCB167AFAA8BFD47 - -I=182 -KEY=2928E833FE8E6D9CEBE2603466188645 -PT=131F7FC5A1528AD5DCB167AFAA8BFD47 -CT=6E68AE6FDF2C10B42B85486D3EFBCEB9 - -I=183 -KEY=4740465C21A27D28C067285958E348FC -PT=6E68AE6FDF2C10B42B85486D3EFBCEB9 -CT=26808ABFA3967D742D64A26CADF8DD70 - -I=184 -KEY=61C0CCE38234005CED038A35F51B958C -PT=26808ABFA3967D742D64A26CADF8DD70 -CT=8BBCBA5E4C219D000A2F6B701CDA09C3 - -I=185 -KEY=EA7C76BDCE159D5CE72CE145E9C19C4F -PT=8BBCBA5E4C219D000A2F6B701CDA09C3 -CT=5D707BB328BEFF51C8C1D984C1608AA0 - -I=186 -KEY=B70C0D0EE6AB620D2FED38C128A116EF -PT=5D707BB328BEFF51C8C1D984C1608AA0 -CT=8D0A485482B914FC282C2DA9F7147D0C - -I=187 -KEY=3A06455A641276F107C11568DFB56BE3 -PT=8D0A485482B914FC282C2DA9F7147D0C -CT=C5678BC12445627CBAA94177F070F736 - -I=188 -KEY=FF61CE9B4057148DBD68541F2FC59CD5 -PT=C5678BC12445627CBAA94177F070F736 -CT=EB9B50846E92C20CD6EDBA7A3A260684 - -I=189 -KEY=14FA9E1F2EC5D6816B85EE6515E39A51 -PT=EB9B50846E92C20CD6EDBA7A3A260684 -CT=E2178B471A3F72A271013C4CBE41FA1C - -I=190 -KEY=F6ED155834FAA4231A84D229ABA2604D -PT=E2178B471A3F72A271013C4CBE41FA1C -CT=C10C8084A17D90339E5ED8C638B902A4 - -I=191 -KEY=37E195DC9587341084DA0AEF931B62E9 -PT=C10C8084A17D90339E5ED8C638B902A4 -CT=03C839CCF269548279F30A1F45C30556 - -I=192 -KEY=3429AC1067EE6092FD2900F0D6D867BF -PT=03C839CCF269548279F30A1F45C30556 -CT=1C5DC5C94B5C7E332D4122A0A4FACD96 - -I=193 -KEY=287469D92CB21EA1D06822507222AA29 -PT=1C5DC5C94B5C7E332D4122A0A4FACD96 -CT=E7292B7D15E9311F242FACFAFC0B0B81 - -I=194 -KEY=CF5D42A4395B2FBEF4478EAA8E29A1A8 -PT=E7292B7D15E9311F242FACFAFC0B0B81 -CT=EA6DF86EEE09613104DB81B97B949AEC - -I=195 -KEY=2530BACAD7524E8FF09C0F13F5BD3B44 -PT=EA6DF86EEE09613104DB81B97B949AEC -CT=8FBCCDEBA43FE3FFDE4C3C279BDD4A27 - -I=196 -KEY=AA8C7721736DAD702ED033346E607163 -PT=8FBCCDEBA43FE3FFDE4C3C279BDD4A27 -CT=985971BE962C63B0F50D1004963E9BED - -I=197 -KEY=32D5069FE541CEC0DBDD2330F85EEA8E -PT=985971BE962C63B0F50D1004963E9BED -CT=F2CC0FF4B6D2F88766F1B8BE370FE463 - -I=198 -KEY=C019096B53933647BD2C9B8ECF510EED -PT=F2CC0FF4B6D2F88766F1B8BE370FE463 -CT=FE33F823B7B97FC017B35B6E22415D3E - -I=199 -KEY=3E2AF148E42A4987AA9FC0E0ED1053D3 -PT=FE33F823B7B97FC017B35B6E22415D3E -CT=465D804A6053EC2580B59F0CD645C060 - -I=200 -KEY=787771028479A5A22A2A5FEC3B5593B3 -PT=465D804A6053EC2580B59F0CD645C060 -CT=DE05AD28693E3D471B8F39BAD1803C0E - -I=201 -KEY=A672DC2AED4798E531A56656EAD5AFBD -PT=DE05AD28693E3D471B8F39BAD1803C0E -CT=61EB397D55A2FC3D78974C8A10200AC6 - -I=202 -KEY=C799E557B8E564D849322ADCFAF5A57B -PT=61EB397D55A2FC3D78974C8A10200AC6 -CT=BD95D742D81AD795AA4E10FB41F54294 - -I=203 -KEY=7A0C321560FFB34DE37C3A27BB00E7EF -PT=BD95D742D81AD795AA4E10FB41F54294 -CT=F43A1E8C6E057E68414D23DA6932DE2C - -I=204 -KEY=8E362C990EFACD25A23119FDD23239C3 -PT=F43A1E8C6E057E68414D23DA6932DE2C -CT=8EBB208032245988E851148B34B92F0E - -I=205 -KEY=008D0C193CDE94AD4A600D76E68B16CD -PT=8EBB208032245988E851148B34B92F0E -CT=2F18B4B14A360E06C50C89A4E6FE6C17 - -I=206 -KEY=2F95B8A876E89AAB8F6C84D200757ADA -PT=2F18B4B14A360E06C50C89A4E6FE6C17 -CT=681E131FA7EA5EBE10B59D3F16009582 - -I=207 -KEY=478BABB7D102C4159FD919ED1675EF58 -PT=681E131FA7EA5EBE10B59D3F16009582 -CT=376FA31CC9D18E756E96715D61403C5D - -I=208 -KEY=70E408AB18D34A60F14F68B07735D305 -PT=376FA31CC9D18E756E96715D61403C5D -CT=519E87E4A1AC61C376842F028D1BD75F - -I=209 -KEY=217A8F4FB97F2BA387CB47B2FA2E045A -PT=519E87E4A1AC61C376842F028D1BD75F -CT=BFAED9E9964967342808C6C332E02204 - -I=210 -KEY=9ED456A62F364C97AFC38171C8CE265E -PT=BFAED9E9964967342808C6C332E02204 -CT=5A9F55C61A03D6A3196FFD6879CBCA02 - -I=211 -KEY=C44B036035359A34B6AC7C19B105EC5C -PT=5A9F55C61A03D6A3196FFD6879CBCA02 -CT=0FD872478223CDE765A62036EDD6F42F - -I=212 -KEY=CB937127B71657D3D30A5C2F5CD31873 -PT=0FD872478223CDE765A62036EDD6F42F -CT=965ED2AF7D26CDA8A8B7E7B2F1ADA768 - -I=213 -KEY=5DCDA388CA309A7B7BBDBB9DAD7EBF1B -PT=965ED2AF7D26CDA8A8B7E7B2F1ADA768 -CT=05599B8D42D92457605A69200C6DC0AA - -I=214 -KEY=5894380588E9BE2C1BE7D2BDA1137FB1 -PT=05599B8D42D92457605A69200C6DC0AA -CT=3436A49EE590788F625A6FB44BF72FA3 - -I=215 -KEY=6CA29C9B6D79C6A379BDBD09EAE45012 -PT=3436A49EE590788F625A6FB44BF72FA3 -CT=DB181195EFF35E307167BADA138A837A - -I=216 -KEY=B7BA8D0E828A989308DA07D3F96ED368 -PT=DB181195EFF35E307167BADA138A837A -CT=45E06B534233447E3CB696C1DD179477 - -I=217 -KEY=F25AE65DC0B9DCED346C91122479471F -PT=45E06B534233447E3CB696C1DD179477 -CT=D2EDC4E2B4EDD671D984E8AA5BABAAD7 - -I=218 -KEY=20B722BF74540A9CEDE879B87FD2EDC8 -PT=D2EDC4E2B4EDD671D984E8AA5BABAAD7 -CT=DB92F4E9F2DD6A61E20A79CFC82CD061 - -I=219 -KEY=FB25D656868960FD0FE20077B7FE3DA9 -PT=DB92F4E9F2DD6A61E20A79CFC82CD061 -CT=79383629DF124FD94A1C36BECB711747 - -I=220 -KEY=821DE07F599B2F2445FE36C97C8F2AEE -PT=79383629DF124FD94A1C36BECB711747 -CT=3F3F592FB3DB51CF08B70E6F2174AB43 - -I=221 -KEY=BD22B950EA407EEB4D4938A65DFB81AD -PT=3F3F592FB3DB51CF08B70E6F2174AB43 -CT=D34FDA2917E9697118502CB7A6CAE07C - -I=222 -KEY=6E6D6379FDA9179A55191411FB3161D1 -PT=D34FDA2917E9697118502CB7A6CAE07C -CT=24D2C38E5C52A404DBE0D8BB6DA44AEE - -I=223 -KEY=4ABFA0F7A1FBB39E8EF9CCAA96952B3F -PT=24D2C38E5C52A404DBE0D8BB6DA44AEE -CT=2ED6A7503B3547C04E0B7B709218CD4A - -I=224 -KEY=646907A79ACEF45EC0F2B7DA048DE675 -PT=2ED6A7503B3547C04E0B7B709218CD4A -CT=4F11BE7A8B5D1A04AB82F60000BC7B50 - -I=225 -KEY=2B78B9DD1193EE5A6B7041DA04319D25 -PT=4F11BE7A8B5D1A04AB82F60000BC7B50 -CT=B98B51B76B262CB9ED157567A05770AF - -I=226 -KEY=92F3E86A7AB5C2E3866534BDA466ED8A -PT=B98B51B76B262CB9ED157567A05770AF -CT=D6CA5483F89D5AA01DBCFEBE30C26F5E - -I=227 -KEY=4439BCE9822898439BD9CA0394A482D4 -PT=D6CA5483F89D5AA01DBCFEBE30C26F5E -CT=7706922EBA53937E287084C8FDFEB33F - -I=228 -KEY=333F2EC7387B0B3DB3A94ECB695A31EB -PT=7706922EBA53937E287084C8FDFEB33F -CT=0F2DA3B8BFCB1046CA94EC9322320BF9 - -I=229 -KEY=3C128D7F87B01B7B793DA2584B683A12 -PT=0F2DA3B8BFCB1046CA94EC9322320BF9 -CT=29CAD5CDC5A2834A5D533335FED2EA81 - -I=230 -KEY=15D858B242129831246E916DB5BAD093 -PT=29CAD5CDC5A2834A5D533335FED2EA81 -CT=A48A2D319552BF02E84E4662E75884DB - -I=231 -KEY=B1527583D7402733CC20D70F52E25448 -PT=A48A2D319552BF02E84E4662E75884DB -CT=334560ECD22BB9F660BC4FFAB13891C9 - -I=232 -KEY=8217156F056B9EC5AC9C98F5E3DAC581 -PT=334560ECD22BB9F660BC4FFAB13891C9 -CT=DAAEB8436205DFB6688D9DE0A21A6B9D - -I=233 -KEY=58B9AD2C676E4173C411051541C0AE1C -PT=DAAEB8436205DFB6688D9DE0A21A6B9D -CT=E38798615C2158872704125A7CFC6540 - -I=234 -KEY=BB3E354D3B4F19F4E315174F3D3CCB5C -PT=E38798615C2158872704125A7CFC6540 -CT=BACB9EA5499A093F6595E8D1D5CF7E50 - -I=235 -KEY=01F5ABE872D510CB8680FF9EE8F3B50C -PT=BACB9EA5499A093F6595E8D1D5CF7E50 -CT=813B0D4AC4C2B8371A1A132927D24F62 - -I=236 -KEY=80CEA6A2B617A8FC9C9AECB7CF21FA6E -PT=813B0D4AC4C2B8371A1A132927D24F62 -CT=D1AD1AE650B377520EE19370D9E968A9 - -I=237 -KEY=5163BC44E6A4DFAE927B7FC716C892C7 -PT=D1AD1AE650B377520EE19370D9E968A9 -CT=3CEC25102A51A5A4C26E7391590D54ED - -I=238 -KEY=6D8F9954CCF57A0A50150C564FC5C62A -PT=3CEC25102A51A5A4C26E7391590D54ED -CT=505FD54017E89E9FAA6376E399F2FF09 - -I=239 -KEY=3DD04C14DB1DE495FA767AB5D6373923 -PT=505FD54017E89E9FAA6376E399F2FF09 -CT=1B45550B4E3AB908A2CC72FFFB38701A - -I=240 -KEY=2695191F95275D9D58BA084A2D0F4939 -PT=1B45550B4E3AB908A2CC72FFFB38701A -CT=E2469D9D2F91E3AA88DC7970C94E7237 - -I=241 -KEY=C4D38482BAB6BE37D066713AE4413B0E -PT=E2469D9D2F91E3AA88DC7970C94E7237 -CT=9352C72F2B5093D1AF52BA959963F59B - -I=242 -KEY=578143AD91E62DE67F34CBAF7D22CE95 -PT=9352C72F2B5093D1AF52BA959963F59B -CT=F26DE32F035B270BA42075574056564E - -I=243 -KEY=A5ECA08292BD0AEDDB14BEF83D7498DB -PT=F26DE32F035B270BA42075574056564E -CT=6AC08B3D91FC31A34B3A81F7C300587E - -I=244 -KEY=CF2C2BBF03413B4E902E3F0FFE74C0A5 -PT=6AC08B3D91FC31A34B3A81F7C300587E -CT=E5E6455304C3B5E2349E2372D6E4B0B8 - -I=245 -KEY=2ACA6EEC07828EACA4B01C7D2890701D -PT=E5E6455304C3B5E2349E2372D6E4B0B8 -CT=90524F27C63CCA1E4CA9674381786C30 - -I=246 -KEY=BA9821CBC1BE44B2E8197B3EA9E81C2D -PT=90524F27C63CCA1E4CA9674381786C30 -CT=44625D68290415039E2C6C05B4954896 - -I=247 -KEY=FEFA7CA3E8BA51B17635173B1D7D54BB -PT=44625D68290415039E2C6C05B4954896 -CT=EC401B0D3780FDB4A3952706B07F6CEF - -I=248 -KEY=12BA67AEDF3AAC05D5A0303DAD023854 -PT=EC401B0D3780FDB4A3952706B07F6CEF -CT=DCEDC88021F6FD1C61C08DAABF0E73BA - -I=249 -KEY=CE57AF2EFECC5119B460BD97120C4BEE -PT=DCEDC88021F6FD1C61C08DAABF0E73BA -CT=C15C85D8161B97DD61EB8B514CDCFFD5 - -I=250 -KEY=0F0B2AF6E8D7C6C4D58B36C65ED0B43B -PT=C15C85D8161B97DD61EB8B514CDCFFD5 -CT=B68B65E041C84433DEA4D9E15E9F98AB - -I=251 -KEY=B9804F16A91F82F70B2FEF27004F2C90 -PT=B68B65E041C84433DEA4D9E15E9F98AB -CT=8122505A5B6F8D985A8D9D7E9E2FF4F3 - -I=252 -KEY=38A21F4CF2700F6F51A272599E60D863 -PT=8122505A5B6F8D985A8D9D7E9E2FF4F3 -CT=8F72F8FFA71D24C900D2BBE8784B9C48 - -I=253 -KEY=B7D0E7B3556D2BA65170C9B1E62B442B -PT=8F72F8FFA71D24C900D2BBE8784B9C48 -CT=1D541D794774264680CF3689365CD845 - -I=254 -KEY=AA84FACA12190DE0D1BFFF38D0779C6E -PT=1D541D794774264680CF3689365CD845 -CT=CBAE9336C5C1F038176B5123CC205BF7 - -I=255 -KEY=612A69FCD7D8FDD8C6D4AE1B1C57C799 -PT=CBAE9336C5C1F038176B5123CC205BF7 -CT=C4CE2DC1BAE3028392BD8A005A360F56 - -I=256 -KEY=A5E4443D6D3BFF5B5469241B4661C8CF -PT=C4CE2DC1BAE3028392BD8A005A360F56 -CT=549B7075DE975B759A6DAE7D761CDC01 - -I=257 -KEY=F17F3448B3ACA42ECE048A66307D14CE -PT=549B7075DE975B759A6DAE7D761CDC01 -CT=2338FFEEE2A391B2DAFD1EBB0ECF19E3 - -I=258 -KEY=D247CBA6510F359C14F994DD3EB20D2D -PT=2338FFEEE2A391B2DAFD1EBB0ECF19E3 -CT=B27705C512C6849DE6012A490F834F36 - -I=259 -KEY=6030CE6343C9B101F2F8BE943131421B -PT=B27705C512C6849DE6012A490F834F36 -CT=33A239E0426921192F8C89C6FBCDD23C - -I=260 -KEY=5392F78301A09018DD743752CAFC9027 -PT=33A239E0426921192F8C89C6FBCDD23C -CT=90CCBE46338C7E9FB25409F82BF81234 - -I=261 -KEY=C35E49C5322CEE876F203EAAE1048213 -PT=90CCBE46338C7E9FB25409F82BF81234 -CT=873D1CAF1F2C2A56BEE419FE8A01489F - -I=262 -KEY=4463556A2D00C4D1D1C427546B05CA8C -PT=873D1CAF1F2C2A56BEE419FE8A01489F -CT=1E9ED35EB85ADD9AB88B6D85299FD8E7 - -I=263 -KEY=5AFD8634955A194B694F4AD1429A126B -PT=1E9ED35EB85ADD9AB88B6D85299FD8E7 -CT=36871F8BD629B27EEDE04E086FC539C4 - -I=264 -KEY=6C7A99BF4373AB3584AF04D92D5F2BAF -PT=36871F8BD629B27EEDE04E086FC539C4 -CT=10D10983F98D799235E8142BD67C1FD2 - -I=265 -KEY=7CAB903CBAFED2A7B14710F2FB23347D -PT=10D10983F98D799235E8142BD67C1FD2 -CT=193CEDEEE0410DE79F1B2FC077B14199 - -I=266 -KEY=65977DD25ABFDF402E5C3F328C9275E4 -PT=193CEDEEE0410DE79F1B2FC077B14199 -CT=1EC99AD6EEF155B6B5F61452D2E73A7D - -I=267 -KEY=7B5EE704B44E8AF69BAA2B605E754F99 -PT=1EC99AD6EEF155B6B5F61452D2E73A7D -CT=92DA7D1858210C87B32C6FEA1CC6A0E6 - -I=268 -KEY=E9849A1CEC6F86712886448A42B3EF7F -PT=92DA7D1858210C87B32C6FEA1CC6A0E6 -CT=A06C4ACCA35DE95CFAD365349969271D - -I=269 -KEY=49E8D0D04F326F2DD25521BEDBDAC862 -PT=A06C4ACCA35DE95CFAD365349969271D -CT=4B892CB63A35A3DED0F43BA4309CBB2E - -I=270 -KEY=0261FC667507CCF302A11A1AEB46734C -PT=4B892CB63A35A3DED0F43BA4309CBB2E -CT=E05F73446706A68A5099088279B58064 - -I=271 -KEY=E23E8F2212016A795238129892F3F328 -PT=E05F73446706A68A5099088279B58064 -CT=542D8314299AF433EC549EBFFCF2B3D9 - -I=272 -KEY=B6130C363B9B9E4ABE6C8C276E0140F1 -PT=542D8314299AF433EC549EBFFCF2B3D9 -CT=4935A91590E8A70D9F75489F6D5B70E7 - -I=273 -KEY=FF26A523AB7339472119C4B8035A3016 -PT=4935A91590E8A70D9F75489F6D5B70E7 -CT=C3A4940C6EC7D0E2F11C3CF60AB2C31D - -I=274 -KEY=3C82312FC5B4E9A5D005F84E09E8F30B -PT=C3A4940C6EC7D0E2F11C3CF60AB2C31D -CT=F109AC488D917B5FC28BA28C9720A46F - -I=275 -KEY=CD8B9D67482592FA128E5AC29EC85764 -PT=F109AC488D917B5FC28BA28C9720A46F -CT=65234934641FA21D8C3A3804D09208F3 - -I=276 -KEY=A8A8D4532C3A30E79EB462C64E5A5F97 -PT=65234934641FA21D8C3A3804D09208F3 -CT=DE015A71CB9C9A3B11C2C9B744B6B5ED - -I=277 -KEY=76A98E22E7A6AADC8F76AB710AECEA7A -PT=DE015A71CB9C9A3B11C2C9B744B6B5ED -CT=973D0C12D7826B45CC7824EF09D82BAB - -I=278 -KEY=E19482303024C199430E8F9E0334C1D1 -PT=973D0C12D7826B45CC7824EF09D82BAB -CT=EBD2D23B9D08F63385A0D21FF76FAC33 - -I=279 -KEY=0A46500BAD2C37AAC6AE5D81F45B6DE2 -PT=EBD2D23B9D08F63385A0D21FF76FAC33 -CT=A7A460A555E4C4E53457AE00FC0D9BA8 - -I=280 -KEY=ADE230AEF8C8F34FF2F9F3810856F64A -PT=A7A460A555E4C4E53457AE00FC0D9BA8 -CT=56F0329103B5238E03C781E2AB0E7A2D - -I=281 -KEY=FB12023FFB7DD0C1F13E7263A3588C67 -PT=56F0329103B5238E03C781E2AB0E7A2D -CT=0D5710472E980CF439109BAC3EAB19A8 - -I=282 -KEY=F6451278D5E5DC35C82EE9CF9DF395CF -PT=0D5710472E980CF439109BAC3EAB19A8 -CT=063CB786AD88ECADC4EAC8FE39A84286 - -I=283 -KEY=F079A5FE786D30980CC42131A45BD749 -PT=063CB786AD88ECADC4EAC8FE39A84286 -CT=825BD1E57F0E16D744C2A69233C8654B - -I=284 -KEY=7222741B0763264F480687A39793B202 -PT=825BD1E57F0E16D744C2A69233C8654B -CT=8EA54322F26DC051F831A5CBBD07A73C - -I=285 -KEY=FC873739F50EE61EB03722682A94153E -PT=8EA54322F26DC051F831A5CBBD07A73C -CT=803F3194726F4D5C5BD80D12D1284F0A - -I=286 -KEY=7CB806AD8761AB42EBEF2F7AFBBC5A34 -PT=803F3194726F4D5C5BD80D12D1284F0A -CT=5A1D90E682989AB1A84F01422CE69F82 - -I=287 -KEY=26A5964B05F931F343A02E38D75AC5B6 -PT=5A1D90E682989AB1A84F01422CE69F82 -CT=3F5AFCD41950EEFBC3D7CEF744F0C060 - -I=288 -KEY=19FF6A9F1CA9DF088077E0CF93AA05D6 -PT=3F5AFCD41950EEFBC3D7CEF744F0C060 -CT=2EE3691BD58D7645DA91CD4943F10157 - -I=289 -KEY=371C0384C924A94D5AE62D86D05B0481 -PT=2EE3691BD58D7645DA91CD4943F10157 -CT=BEF4B188364E87A9E49855CC68C02A50 - -I=290 -KEY=89E8B20CFF6A2EE4BE7E784AB89B2ED1 -PT=BEF4B188364E87A9E49855CC68C02A50 -CT=2263387A7A52AB73704774D07EA5AA69 - -I=291 -KEY=AB8B8A7685388597CE390C9AC63E84B8 -PT=2263387A7A52AB73704774D07EA5AA69 -CT=84E68DA3E9D999016D0B734DAE8C128B - -I=292 -KEY=2F6D07D56CE11C96A3327FD768B29633 -PT=84E68DA3E9D999016D0B734DAE8C128B -CT=978F5F49D7BA1189F16FC0635231DF5F - -I=293 -KEY=B8E2589CBB5B0D1F525DBFB43A83496C -PT=978F5F49D7BA1189F16FC0635231DF5F -CT=FE59B2F2BDE0AB5E1700A1771EDF8663 - -I=294 -KEY=46BBEA6E06BBA641455D1EC3245CCF0F -PT=FE59B2F2BDE0AB5E1700A1771EDF8663 -CT=A94B982DC50C338E25ABFB4113F904A8 - -I=295 -KEY=EFF07243C3B795CF60F6E58237A5CBA7 -PT=A94B982DC50C338E25ABFB4113F904A8 -CT=79A5BB282D8247192AC9F8A3DB431EA1 - -I=296 -KEY=9655C96BEE35D2D64A3F1D21ECE6D506 -PT=79A5BB282D8247192AC9F8A3DB431EA1 -CT=FC339DA0D4593CD79D407CD6F1E1E7ED - -I=297 -KEY=6A6654CB3A6CEE01D77F61F71D0732EB -PT=FC339DA0D4593CD79D407CD6F1E1E7ED -CT=08EAB51652B85C6E9BC07B718E57E144 - -I=298 -KEY=628CE1DD68D4B26F4CBF1A869350D3AF -PT=08EAB51652B85C6E9BC07B718E57E144 -CT=9EA63934609F947AAA926443D0D5BEFA - -I=299 -KEY=FC2AD8E9084B2615E62D7EC543856D55 -PT=9EA63934609F947AAA926443D0D5BEFA -CT=7FE121C45E158FF1F527BAFDDBEAE223 - -I=300 -KEY=83CBF92D565EA9E4130AC438986F8F76 -PT=7FE121C45E158FF1F527BAFDDBEAE223 -CT=B1B70D5AD08BE5DCB8126D8700F25969 - -I=301 -KEY=327CF47786D54C38AB18A9BF989DD61F -PT=B1B70D5AD08BE5DCB8126D8700F25969 -CT=389812FA2D4A6419380A2AC8961CCDA6 - -I=302 -KEY=0AE4E68DAB9F2821931283770E811BB9 -PT=389812FA2D4A6419380A2AC8961CCDA6 -CT=CEF20323EE53A2BA576F4DF86A7AC078 - -I=303 -KEY=C416E5AE45CC8A9BC47DCE8F64FBDBC1 -PT=CEF20323EE53A2BA576F4DF86A7AC078 -CT=A65611BF1901C940B883D746F1694278 - -I=304 -KEY=6240F4115CCD43DB7CFE19C9959299B9 -PT=A65611BF1901C940B883D746F1694278 -CT=7E43C2A99D11C656351B96CECD400E75 - -I=305 -KEY=1C0336B8C1DC858D49E58F0758D297CC -PT=7E43C2A99D11C656351B96CECD400E75 -CT=7DE74D06851AD329C60DD1934C34CBE4 - -I=306 -KEY=61E47BBE44C656A48FE85E9414E65C28 -PT=7DE74D06851AD329C60DD1934C34CBE4 -CT=A99B66FE5825C895DCC6BE718AB8BE34 - -I=307 -KEY=C87F1D401CE39E31532EE0E59E5EE21C -PT=A99B66FE5825C895DCC6BE718AB8BE34 -CT=4752E30DDA44BA393EF197270C111AB7 - -I=308 -KEY=8F2DFE4DC6A724086DDF77C2924FF8AB -PT=4752E30DDA44BA393EF197270C111AB7 -CT=5A3FC324D12AC30FE5BBE87FC4B655F0 - -I=309 -KEY=D5123D69178DE70788649FBD56F9AD5B -PT=5A3FC324D12AC30FE5BBE87FC4B655F0 -CT=79061587E9D9FEEF52F753AE9BCDC4B1 - -I=310 -KEY=AC1428EEFE5419E8DA93CC13CD3469EA -PT=79061587E9D9FEEF52F753AE9BCDC4B1 -CT=86C32E69874EAA0D103581199AFA813A - -I=311 -KEY=2AD70687791AB3E5CAA64D0A57CEE8D0 -PT=86C32E69874EAA0D103581199AFA813A -CT=82A924A5928570E29D18DE200F8558DD - -I=312 -KEY=A87E2222EB9FC30757BE932A584BB00D -PT=82A924A5928570E29D18DE200F8558DD -CT=2D3E0ECCC1FEA93736BD205A5217D830 - -I=313 -KEY=85402CEE2A616A306103B3700A5C683D -PT=2D3E0ECCC1FEA93736BD205A5217D830 -CT=52FA0FCF771191A4A4C4E48C7B11DC1F - -I=314 -KEY=D7BA23215D70FB94C5C757FC714DB422 -PT=52FA0FCF771191A4A4C4E48C7B11DC1F -CT=C2A47519AACA187B97C884D20ED1D825 - -I=315 -KEY=151E5638F7BAE3EF520FD32E7F9C6C07 -PT=C2A47519AACA187B97C884D20ED1D825 -CT=66F1D0799F3C473978C189F745695293 - -I=316 -KEY=73EF86416886A4D62ACE5AD93AF53E94 -PT=66F1D0799F3C473978C189F745695293 -CT=803361A1428EAC3E134B0726E5CF0754 - -I=317 -KEY=F3DCE7E02A0808E839855DFFDF3A39C0 -PT=803361A1428EAC3E134B0726E5CF0754 -CT=2CC85CEDEE03D7AB279D766D3F2BADF4 - -I=318 -KEY=DF14BB0DC40BDF431E182B92E0119434 -PT=2CC85CEDEE03D7AB279D766D3F2BADF4 -CT=706626C1CE6731DD4DBA263C4D7EAB67 - -I=319 -KEY=AF729DCC0A6CEE9E53A20DAEAD6F3F53 -PT=706626C1CE6731DD4DBA263C4D7EAB67 -CT=BD7A59659E3774B85465C91740017628 - -I=320 -KEY=1208C4A9945B9A2607C7C4B9ED6E497B -PT=BD7A59659E3774B85465C91740017628 -CT=F1778330059467556D08223682EC32AA - -I=321 -KEY=E37F479991CFFD736ACFE68F6F827BD1 -PT=F1778330059467556D08223682EC32AA -CT=7B3C6979DCEE500E3FBB2CF4E17B0A3B - -I=322 -KEY=98432EE04D21AD7D5574CA7B8EF971EA -PT=7B3C6979DCEE500E3FBB2CF4E17B0A3B -CT=AFEBC6E81B90C3D82ECE26D788AB2412 - -I=323 -KEY=37A8E80856B16EA57BBAECAC065255F8 -PT=AFEBC6E81B90C3D82ECE26D788AB2412 -CT=E4087042AB32B9C43128AADACB4F7FA6 - -I=324 -KEY=D3A0984AFD83D7614A924676CD1D2A5E -PT=E4087042AB32B9C43128AADACB4F7FA6 -CT=07E1230BC456A3DCE7DF8A4EF7265BC8 - -I=325 -KEY=D441BB4139D574BDAD4DCC383A3B7196 -PT=07E1230BC456A3DCE7DF8A4EF7265BC8 -CT=88F0C30172B9A0EA8CD657CE6847AC94 - -I=326 -KEY=5CB178404B6CD457219B9BF6527CDD02 -PT=88F0C30172B9A0EA8CD657CE6847AC94 -CT=710FE26B2DAB5A12D147D6446732B272 - -I=327 -KEY=2DBE9A2B66C78E45F0DC4DB2354E6F70 -PT=710FE26B2DAB5A12D147D6446732B272 -CT=9C30630A9ADF9B4EBF099452AB75D14A - -I=328 -KEY=B18EF921FC18150B4FD5D9E09E3BBE3A -PT=9C30630A9ADF9B4EBF099452AB75D14A -CT=77526DA4D9AE9FD4347AAC10EA4728AA - -I=329 -KEY=C6DC948525B68ADF7BAF75F0747C9690 -PT=77526DA4D9AE9FD4347AAC10EA4728AA -CT=A9EDBD1A190BC67AC91D27BB7F5A1BD1 - -I=330 -KEY=6F31299F3CBD4CA5B2B2524B0B268D41 -PT=A9EDBD1A190BC67AC91D27BB7F5A1BD1 -CT=B8700A2BAEABCB0C67251C26F82ACEF7 - -I=331 -KEY=D74123B4921687A9D5974E6DF30C43B6 -PT=B8700A2BAEABCB0C67251C26F82ACEF7 -CT=FF5F30BA14A8C49276B040B00864BE29 - -I=332 -KEY=281E130E86BE433BA3270EDDFB68FD9F -PT=FF5F30BA14A8C49276B040B00864BE29 -CT=B448E87BE1E1A41FF94353F6018929C8 - -I=333 -KEY=9C56FB75675FE7245A645D2BFAE1D457 -PT=B448E87BE1E1A41FF94353F6018929C8 -CT=9F59D422CB9265C17732E0B16DEF352A - -I=334 -KEY=030F2F57ACCD82E52D56BD9A970EE17D -PT=9F59D422CB9265C17732E0B16DEF352A -CT=06FD7DB54E62FAC3C511F4DE5C1E93B9 - -I=335 -KEY=05F252E2E2AF7826E8474944CB1072C4 -PT=06FD7DB54E62FAC3C511F4DE5C1E93B9 -CT=0DDA3E4AD600F8D3EA6B06AE465DF3BC - -I=336 -KEY=08286CA834AF80F5022C4FEA8D4D8178 -PT=0DDA3E4AD600F8D3EA6B06AE465DF3BC -CT=17305FA95D26FB72995165DA8A07FCDF - -I=337 -KEY=1F18330169897B879B7D2A30074A7DA7 -PT=17305FA95D26FB72995165DA8A07FCDF -CT=12B56FEBEE2773A2258FC6E0F9115728 - -I=338 -KEY=0DAD5CEA87AE0825BEF2ECD0FE5B2A8F -PT=12B56FEBEE2773A2258FC6E0F9115728 -CT=36440D1A561E8F77B89DF6EA3D8EC7F5 - -I=339 -KEY=3BE951F0D1B08752066F1A3AC3D5ED7A -PT=36440D1A561E8F77B89DF6EA3D8EC7F5 -CT=752C4D620413C0F4A313CF37EB34CFDD - -I=340 -KEY=4EC51C92D5A347A6A57CD50D28E122A7 -PT=752C4D620413C0F4A313CF37EB34CFDD -CT=B2A282D0B6A9EB8B7B7C962675AEC843 - -I=341 -KEY=FC679E42630AAC2DDE00432B5D4FEAE4 -PT=B2A282D0B6A9EB8B7B7C962675AEC843 -CT=D0C3D785B5507C1460DDC44B123ED5FE - -I=342 -KEY=2CA449C7D65AD039BEDD87604F713F1A -PT=D0C3D785B5507C1460DDC44B123ED5FE -CT=4DAE52B77F8001CBAB8D1949E73DD578 - -I=343 -KEY=610A1B70A9DAD1F215509E29A84CEA62 -PT=4DAE52B77F8001CBAB8D1949E73DD578 -CT=29AA82197E8158D88FFFE5BEAFC0C967 - -I=344 -KEY=48A09969D75B892A9AAF7B97078C2305 -PT=29AA82197E8158D88FFFE5BEAFC0C967 -CT=58C665AA97945F7D3AA23BE8B8DDA20D - -I=345 -KEY=1066FCC340CFD657A00D407FBF518108 -PT=58C665AA97945F7D3AA23BE8B8DDA20D -CT=5A104A7093DB3308EB4009829B5E26B1 - -I=346 -KEY=4A76B6B3D314E55F4B4D49FD240FA7B9 -PT=5A104A7093DB3308EB4009829B5E26B1 -CT=8C8EA0BEE4640F6BB6D906A7A6EA3810 - -I=347 -KEY=C6F8160D3770EA34FD944F5A82E59FA9 -PT=8C8EA0BEE4640F6BB6D906A7A6EA3810 -CT=1517ED0B6D4EC3B85479AB28DF48BFDB - -I=348 -KEY=D3EFFB065A3E298CA9EDE4725DAD2072 -PT=1517ED0B6D4EC3B85479AB28DF48BFDB -CT=9546CCBB8094E65E464C38E0809552E3 - -I=349 -KEY=46A937BDDAAACFD2EFA1DC92DD387291 -PT=9546CCBB8094E65E464C38E0809552E3 -CT=7D5AD8DEDB92F80D2B28C3458843AE84 - -I=350 -KEY=3BF3EF63013837DFC4891FD7557BDC15 -PT=7D5AD8DEDB92F80D2B28C3458843AE84 -CT=E62676E27ED61D0FD7DFE170E0938361 - -I=351 -KEY=DDD599817FEE2AD01356FEA7B5E85F74 -PT=E62676E27ED61D0FD7DFE170E0938361 -CT=DA9865198B9463681C66FB96C2C1DAA5 - -I=352 -KEY=074DFC98F47A49B80F300531772985D1 -PT=DA9865198B9463681C66FB96C2C1DAA5 -CT=62CD9DAA9487F34AF168E6E20A0684CF - -I=353 -KEY=6580613260FDBAF2FE58E3D37D2F011E -PT=62CD9DAA9487F34AF168E6E20A0684CF -CT=10BA978FDABA586691946145BE246D3C - -I=354 -KEY=753AF6BDBA47E2946FCC8296C30B6C22 -PT=10BA978FDABA586691946145BE246D3C -CT=13443CF524213B08776D7F5169B79C0F - -I=355 -KEY=667ECA489E66D99C18A1FDC7AABCF02D -PT=13443CF524213B08776D7F5169B79C0F -CT=6507336876ED4F6DB3E35D6CF5A89A2B - -I=356 -KEY=0379F920E88B96F1AB42A0AB5F146A06 -PT=6507336876ED4F6DB3E35D6CF5A89A2B -CT=B84902B5CBBC6DB8111CA45BC5F99991 - -I=357 -KEY=BB30FB952337FB49BA5E04F09AEDF397 -PT=B84902B5CBBC6DB8111CA45BC5F99991 -CT=20973140A999B8AD9982B9B706F7C32E - -I=358 -KEY=9BA7CAD58AAE43E423DCBD479C1A30B9 -PT=20973140A999B8AD9982B9B706F7C32E -CT=EE7FF1177C5E080AA03854A2A819565E - -I=359 -KEY=75D83BC2F6F04BEE83E4E9E5340366E7 -PT=EE7FF1177C5E080AA03854A2A819565E -CT=7A4F74EC2181269AC17D0E48A4DA2A88 - -I=360 -KEY=0F974F2ED7716D744299E7AD90D94C6F -PT=7A4F74EC2181269AC17D0E48A4DA2A88 -CT=5B7A7751F0FD91E203A14CE518838DD7 - -I=361 -KEY=54ED387F278CFC964138AB48885AC1B8 -PT=5B7A7751F0FD91E203A14CE518838DD7 -CT=71319FDDBACB038354A37A41F1910F94 - -I=362 -KEY=25DCA7A29D47FF15159BD10979CBCE2C -PT=71319FDDBACB038354A37A41F1910F94 -CT=81AC58FD503FC3AA78199168AE2C9085 - -I=363 -KEY=A470FF5FCD783CBF6D824061D7E75EA9 -PT=81AC58FD503FC3AA78199168AE2C9085 -CT=1F668F512038142C1155B950B0B040EC - -I=364 -KEY=BB16700EED4028937CD7F93167571E45 -PT=1F668F512038142C1155B950B0B040EC -CT=6B27D7791E9B14A5AC3D9582DBDBD929 - -I=365 -KEY=D031A777F3DB3C36D0EA6CB3BC8CC76C -PT=6B27D7791E9B14A5AC3D9582DBDBD929 -CT=9B7151FDC4E135EE93DAB2D9EB74D59C - -I=366 -KEY=4B40F68A373A09D84330DE6A57F812F0 -PT=9B7151FDC4E135EE93DAB2D9EB74D59C -CT=1F199945BCFA624B1AD3DCBBD95291B2 - -I=367 -KEY=54596FCF8BC06B9359E302D18EAA8342 -PT=1F199945BCFA624B1AD3DCBBD95291B2 -CT=E2C82FA8FE98F26283A6E0B75D0A58C6 - -I=368 -KEY=B6914067755899F1DA45E266D3A0DB84 -PT=E2C82FA8FE98F26283A6E0B75D0A58C6 -CT=5A240FFB99C3594C273B51CACF01B28B - -I=369 -KEY=ECB54F9CEC9BC0BDFD7EB3AC1CA1690F -PT=5A240FFB99C3594C273B51CACF01B28B -CT=D01847391534848FB102CA85C97749B1 - -I=370 -KEY=3CAD08A5F9AF44324C7C7929D5D620BE -PT=D01847391534848FB102CA85C97749B1 -CT=DC5CF60EBDF4A8DDDDF997E7ACA67515 - -I=371 -KEY=E0F1FEAB445BECEF9185EECE797055AB -PT=DC5CF60EBDF4A8DDDDF997E7ACA67515 -CT=749E3815FE305B307D9F4DB6A7E4658C - -I=372 -KEY=946FC6BEBA6BB7DFEC1AA378DE943027 -PT=749E3815FE305B307D9F4DB6A7E4658C -CT=8152C1E676A4FC8B0CD093FEB4B51615 - -I=373 -KEY=153D0758CCCF4B54E0CA30866A212632 -PT=8152C1E676A4FC8B0CD093FEB4B51615 -CT=0847044668710F6E5C93DD248AC921BA - -I=374 -KEY=1D7A031EA4BE443ABC59EDA2E0E80788 -PT=0847044668710F6E5C93DD248AC921BA -CT=1D6C3EFB413A59AB40F34CEFBFF25C17 - -I=375 -KEY=00163DE5E5841D91FCAAA14D5F1A5B9F -PT=1D6C3EFB413A59AB40F34CEFBFF25C17 -CT=5D7C206A79D61868FFE7AA28044996D3 - -I=376 -KEY=5D6A1D8F9C5205F9034D0B655B53CD4C -PT=5D7C206A79D61868FFE7AA28044996D3 -CT=78B4DE3B84D5D1010245CA3077A41BAC - -I=377 -KEY=25DEC3B41887D4F80108C1552CF7D6E0 -PT=78B4DE3B84D5D1010245CA3077A41BAC -CT=9E003AACEDECDBB077BDE832465F40C7 - -I=378 -KEY=BBDEF918F56B0F4876B529676AA89627 -PT=9E003AACEDECDBB077BDE832465F40C7 -CT=EEFF9E6C73E6DC5432AA446385AA1499 - -I=379 -KEY=55216774868DD31C441F6D04EF0282BE -PT=EEFF9E6C73E6DC5432AA446385AA1499 -CT=03252A19E37D9F040C56E4D712982798 - -I=380 -KEY=56044D6D65F04C18484989D3FD9AA526 -PT=03252A19E37D9F040C56E4D712982798 -CT=CF59A752BA0E14BE23AFD09437B39C65 - -I=381 -KEY=995DEA3FDFFE58A66BE65947CA293943 -PT=CF59A752BA0E14BE23AFD09437B39C65 -CT=8B08FB7974A77167DFB234F57C8DFFE1 - -I=382 -KEY=12551146AB5929C1B4546DB2B6A4C6A2 -PT=8B08FB7974A77167DFB234F57C8DFFE1 -CT=DD2A93C1106CFDAE4A1684EE02C82FE2 - -I=383 -KEY=CF7F8287BB35D46FFE42E95CB46CE940 -PT=DD2A93C1106CFDAE4A1684EE02C82FE2 -CT=38696128584F60636354E9F802590391 - -I=384 -KEY=F716E3AFE37AB40C9D1600A4B635EAD1 -PT=38696128584F60636354E9F802590391 -CT=7E552E3AD28729F642D590E3C289D598 - -I=385 -KEY=8943CD9531FD9DFADFC3904774BC3F49 -PT=7E552E3AD28729F642D590E3C289D598 -CT=17A40392AA00D7B5A6E9F59007E60C22 - -I=386 -KEY=9EE7CE079BFD4A4F792A65D7735A336B -PT=17A40392AA00D7B5A6E9F59007E60C22 -CT=A048D6755C2AD24DD8833DDCEB145BA6 - -I=387 -KEY=3EAF1872C7D79802A1A9580B984E68CD -PT=A048D6755C2AD24DD8833DDCEB145BA6 -CT=2F1CCE852396986EC4B2852E5F684CD2 - -I=388 -KEY=11B3D6F7E441006C651BDD25C726241F -PT=2F1CCE852396986EC4B2852E5F684CD2 -CT=2C28BD1E98DA63B95C0C81202BBCFE39 - -I=389 -KEY=3D9B6BE97C9B63D539175C05EC9ADA26 -PT=2C28BD1E98DA63B95C0C81202BBCFE39 -CT=6AE097A8E685B58BA2309B59D6A9EB2B - -I=390 -KEY=577BFC419A1ED65E9B27C75C3A33310D -PT=6AE097A8E685B58BA2309B59D6A9EB2B -CT=6EFC01751753999843A9BB6749097E0C - -I=391 -KEY=3987FD348D4D4FC6D88E7C3B733A4F01 -PT=6EFC01751753999843A9BB6749097E0C -CT=6B6B75F78016052E4F89C73EA826D2F2 - -I=392 -KEY=52EC88C30D5B4AE89707BB05DB1C9DF3 -PT=6B6B75F78016052E4F89C73EA826D2F2 -CT=1E9890E8F0AABCBFB8C4EDAEA0F563EF - -I=393 -KEY=4C74182BFDF1F6572FC356AB7BE9FE1C -PT=1E9890E8F0AABCBFB8C4EDAEA0F563EF -CT=143ED9FE6FD7DFB822C31DE8A3E868A9 - -I=394 -KEY=584AC1D5922629EF0D004B43D80196B5 -PT=143ED9FE6FD7DFB822C31DE8A3E868A9 -CT=9C2834AA5C95F2874DC6B267C0469E14 - -I=395 -KEY=C462F57FCEB3DB6840C6F924184708A1 -PT=9C2834AA5C95F2874DC6B267C0469E14 -CT=0720377F673352693EE2EF76D4FCFB0F - -I=396 -KEY=C342C200A98089017E241652CCBBF3AE -PT=0720377F673352693EE2EF76D4FCFB0F -CT=E83ED303F4B0ABF675C7BBC470B924FE - -I=397 -KEY=2B7C11035D3022F70BE3AD96BC02D750 -PT=E83ED303F4B0ABF675C7BBC470B924FE -CT=D87ADD68CBCAEA46DFFF99AE3723BC94 - -I=398 -KEY=F306CC6B96FAC8B1D41C34388B216BC4 -PT=D87ADD68CBCAEA46DFFF99AE3723BC94 -CT=2C290AE7C65B6E5BBAA32DE577DBA343 - -I=399 -KEY=DF2FC68C50A1A6EA6EBF19DDFCFAC887 -PT=2C290AE7C65B6E5BBAA32DE577DBA343 -CT=A04377ABE259B0D0B5BA2D40A501971B - -========================= - -KEYSIZE=192 - -I=0 -KEY=000000000000000000000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=F3F6752AE8D7831138F041560631B114 - -I=1 -KEY=AAFE47EE82411A2BF3F6752AE8D7831138F041560631B114 -PT=F3F6752AE8D7831138F041560631B114 -CT=77BA00ED5412DFF27C8ED91F3C376172 - -I=2 -KEY=A92B07597B52873C844C75C7BCC55CE3447E98493A06D066 -PT=77BA00ED5412DFF27C8ED91F3C376172 -CT=2D92DE893574463412BD7D121A94952F - -I=3 -KEY=5FD632DA76165EDBA9DEAB4E89B11AD756C3E55B20924549 -PT=2D92DE893574463412BD7D121A94952F -CT=96650F835912F5E748422727802C6CE1 - -I=4 -KEY=984A4BEC5D3474103FBBA4CDD0A3EF301E81C27CA0BE29A8 -PT=96650F835912F5E748422727802C6CE1 -CT=5FCCD4B5F125ADC5B85A56DB32283732 - -I=5 -KEY=6B7EDEEAC755885F60777078218642F5A6DB94A792961E9A -PT=5FCCD4B5F125ADC5B85A56DB32283732 -CT=EA5B1DAE2E4F9FD254A2CC28E128EB9B - -I=6 -KEY=CA5585D8C9727F208A2C6DD60FC9DD27F279588F73BEF501 -PT=EA5B1DAE2E4F9FD254A2CC28E128EB9B -CT=BB87C0FF5DB4B2A593B93398407F823A - -I=7 -KEY=BADA7C0D4A0CDD4631ABAD29527D6F8261C06B1733C1773B -PT=BB87C0FF5DB4B2A593B93398407F823A -CT=D5AF7D56281F86E3E079BE6B9465DBB4 - -I=8 -KEY=FF98AB620A203FFCE404D07F7A62E96181B9D57CA7A4AC8F -PT=D5AF7D56281F86E3E079BE6B9465DBB4 -CT=511331CCA62B067CAC47475800EE33CD - -I=9 -KEY=1186A7F46656EA07B517E1B3DC49EF1D2DFE9224A74A9F42 -PT=511331CCA62B067CAC47475800EE33CD -CT=64ACDC3579D7871644DD585C582AF3A2 - -I=10 -KEY=313ADFF9712EABE4D1BB3D86A59E680B6923CA78FF606CE0 -PT=64ACDC3579D7871644DD585C582AF3A2 -CT=EA3C45FB8A6E548DAB14BAE07966246C - -I=11 -KEY=DDABAC02BE6C40493B87787D2FF03C86C23770988606488C -PT=EA3C45FB8A6E548DAB14BAE07966246C -CT=6BC276C465C9ADBE900049A5B58D2DCB - -I=12 -KEY=9A9F7E267C2BFCD150450EB94A3991385237393D338B6547 -PT=6BC276C465C9ADBE900049A5B58D2DCB -CT=E2F0FFA8D6DF327CA0FB80A325B21931 - -I=13 -KEY=80246B9FB6224226B2B5F1119CE6A344F2CCB99E16397C76 -PT=E2F0FFA8D6DF327CA0FB80A325B21931 -CT=ACEE4C9B8A00A7760DD9CD2F6C6DFA8C - -I=14 -KEY=60CDC3E8265B71E81E5BBD8A16E60432FF1574B17A5486FA -PT=ACEE4C9B8A00A7760DD9CD2F6C6DFA8C -CT=9579E43690FD2800FED810F7442D366B - -I=15 -KEY=9DEC584DB87D63F48B2259BC861B2C3201CD64463E79B091 -PT=9579E43690FD2800FED810F7442D366B -CT=72D4D064851A050D415FC94E3FBB6A1C - -I=16 -KEY=BBC1ED636907611EF9F689D80301293F4092AD0801C2DA8D -PT=72D4D064851A050D415FC94E3FBB6A1C -CT=0CCC3B9B35CE3584D7B78C14905BEE55 - -I=17 -KEY=AE398529289F7994F53AB24336CF1CBB9725211C919934D8 -PT=0CCC3B9B35CE3584D7B78C14905BEE55 -CT=66B6A61BF7BCC6392B8FEC12152E5363 - -I=18 -KEY=4617E60BD8AF29D5938C1458C173DA82BCAACD0E84B767BB -PT=66B6A61BF7BCC6392B8FEC12152E5363 -CT=6C2247EA3BC566A84A30BF0B30AB4EEC - -I=19 -KEY=6B762D1391AA17CBFFAE53B2FAB6BC2AF69A7205B41C2957 -PT=6C2247EA3BC566A84A30BF0B30AB4EEC -CT=C16FBCDFAE34E839BA449D697452550D - -I=20 -KEY=374499A8C09A60DA3EC1EF6D548254134CDEEF6CC04E7C5A -PT=C16FBCDFAE34E839BA449D697452550D -CT=C8B704B4AFE68AF5C91A810F2873F13F - -I=21 -KEY=09DCC638DD59F37CF676EBD9FB64DEE685C46E63E83D8D65 -PT=C8B704B4AFE68AF5C91A810F2873F13F -CT=FC9C31036B26234ED1CBA46E0BE944EE - -I=22 -KEY=CE2CEB8869D7EC160AEADADA9042FDA8540FCA0DE3D4C98B -PT=FC9C31036B26234ED1CBA46E0BE944EE -CT=DCF13203AD179CD008779F189EBC78F0 - -I=23 -KEY=505FBECF6B0B083CD61BE8D93D5561785C7855157D68B17B -PT=DCF13203AD179CD008779F189EBC78F0 -CT=24AEB937E259D44D352FF39C1A8A79E0 - -I=24 -KEY=1D1649FDB7484DD2F2B551EEDF0CB5356957A68967E2C89B -PT=24AEB937E259D44D352FF39C1A8A79E0 -CT=19016D033872CB7694A712A84DBC43F2 - -I=25 -KEY=9BE41771C0F74BDEEBB43CEDE77E7E43FDF0B4212A5E8B69 -PT=19016D033872CB7694A712A84DBC43F2 -CT=0536107FEA26AB6A4FE2667EF7FCF16A - -I=26 -KEY=FF3619AED9A1F724EE822C920D58D529B212D25FDDA27A03 -PT=0536107FEA26AB6A4FE2667EF7FCF16A -CT=5D35213390FCA53AD422DC2ED4BF674D - -I=27 -KEY=59D2F5AF4BB6F28BB3B70DA19DA4701366300E71091D1D4E -PT=5D35213390FCA53AD422DC2ED4BF674D -CT=04A6F9B1AE64AD03659C4E375A690852 - -I=28 -KEY=C8384D35CAF0074EB711F41033C0DD1003AC40465374151C -PT=04A6F9B1AE64AD03659C4E375A690852 -CT=18AB347EFC2F8F93655E16732BB509DE - -I=29 -KEY=910CE58F963B684EAFBAC06ECFEF528366F2563578C11CC2 -PT=18AB347EFC2F8F93655E16732BB509DE -CT=F6037C06C71793BD14A4FC89A05D918F - -I=30 -KEY=5D1EF94FBA1E098459B9BC6808F8C13E7256AABCD89C8D4D -PT=F6037C06C71793BD14A4FC89A05D918F -CT=75094DD9B2FDDAC96B49CAB676057288 - -I=31 -KEY=61FDA8DA3EF8949C2CB0F1B1BA051BF7191F600AAE99FFC5 -PT=75094DD9B2FDDAC96B49CAB676057288 -CT=346F9F9E70C05B53DCDAF736FE59749D - -I=32 -KEY=5C383CCC2DCAE66A18DF6E2FCAC540A4C5C5973C50C08B58 -PT=346F9F9E70C05B53DCDAF736FE59749D -CT=1DB82CC8EF5B736AAEFD1F1B9CE5B67D - -I=33 -KEY=1EC7FDBB8AE4FF05056742E7259E33CE6B388827CC253D25 -PT=1DB82CC8EF5B736AAEFD1F1B9CE5B67D -CT=31B5E80D946AE577268973AF865151EB - -I=34 -KEY=FFE21FDAB07E755034D2AAEAB1F4D6B94DB1FB884A746CCE -PT=31B5E80D946AE577268973AF865151EB -CT=9FD63EB3EC6A15FC149A4F058EDA7080 - -I=35 -KEY=7EC4053A63B2353BAB0494595D9EC345592BB48DC4AE1C4E -PT=9FD63EB3EC6A15FC149A4F058EDA7080 -CT=41730A9E9D197435AC36902C57B16588 - -I=36 -KEY=FB6D2FAFD47FE8D1EA779EC7C087B770F51D24A1931F79C6 -PT=41730A9E9D197435AC36902C57B16588 -CT=08AD282171F0772F85C0A43E8BACEC74 - -I=37 -KEY=9531B1BBE0863D44E2DAB6E6B177C05F70DD809F18B395B2 -PT=08AD282171F0772F85C0A43E8BACEC74 -CT=8561E508FA237E4170CECD3A8352CFA4 - -I=38 -KEY=0AB0CF2D1CA2957A67BB53EE4B54BE1E00134DA59BE15A16 -PT=8561E508FA237E4170CECD3A8352CFA4 -CT=4470EFA3C3172EBF64A064F59AE364A9 - -I=39 -KEY=291FD5C38E400CFA23CBBC4D884390A164B3295001023EBF -PT=4470EFA3C3172EBF64A064F59AE364A9 -CT=FCC5636DFE9E45CB7761DD14A1CF4773 - -I=40 -KEY=114E4DEF0447E1D5DF0EDF2076DDD56A13D2F444A0CD79CC -PT=FCC5636DFE9E45CB7761DD14A1CF4773 -CT=2130BA8736D4933678C3B536AEDBC500 - -I=41 -KEY=0C19F74860652278FE3E65A74009465C6B1141720E16BCCC -PT=2130BA8736D4933678C3B536AEDBC500 -CT=1725EECBA8F9A542E9956168390C82C2 - -I=42 -KEY=EF9E7E57576D8A3EE91B8B6CE8F0E31E8284201A371A3E0E -PT=1725EECBA8F9A542E9956168390C82C2 -CT=60912D3EEDC962D68A29AED73DDAA24D - -I=43 -KEY=CE6464925302B9F4898AA652053981C808AD8ECD0AC09C43 -PT=60912D3EEDC962D68A29AED73DDAA24D -CT=43A8B490BBC75DC8D2D2F060C8672E9E - -I=44 -KEY=8657F15C75C74469CA2212C2BEFEDC00DA7F7EADC2A7B2DD -PT=43A8B490BBC75DC8D2D2F060C8672E9E -CT=67D856AF692A4BA7DEC7C8C14A37BD50 - -I=45 -KEY=2D566517DCC2D4EBADFA446DD7D497A704B8B66C88900F8D -PT=67D856AF692A4BA7DEC7C8C14A37BD50 -CT=293C5A05F31E863C6CA26DB8018751CA - -I=46 -KEY=826DFA3FD5229B9B84C61E6824CA119B681ADBD489175E47 -PT=293C5A05F31E863C6CA26DB8018751CA -CT=9421BF2E7727F49C252D644B952C76C4 - -I=47 -KEY=A5A13E0D1C01D7CF10E7A14653EDE5074D37BF9F1C3B2883 -PT=9421BF2E7727F49C252D644B952C76C4 -CT=CEE8F6FCF7CAF1C5EA9F746C10BD405B - -I=48 -KEY=923D8EE015266BA8DE0F57BAA42714C2A7A8CBF30C8668D8 -PT=CEE8F6FCF7CAF1C5EA9F746C10BD405B -CT=403220B81E6E0837ACCEDA5ACB3730BE - -I=49 -KEY=B41FA03C1181401A9E3D7702BA491CF50B6611A9C7B15866 -PT=403220B81E6E0837ACCEDA5ACB3730BE -CT=8C5D05679F78F853CF83CB8E5BBEBA44 - -I=50 -KEY=00B6D7172075472F126072652531E4A6C4E5DA279C0FE222 -PT=8C5D05679F78F853CF83CB8E5BBEBA44 -CT=6F9C74C0BB40608AAD1A1202FCAF62EB - -I=51 -KEY=BEB1F890B29E8EFE7DFC06A59E71842C69FFC82560A080C9 -PT=6F9C74C0BB40608AAD1A1202FCAF62EB -CT=B812DB4E295951BB04B1636A9CE91DDB - -I=52 -KEY=9455ABC4AC495686C5EEDDEBB728D5976D4EAB4FFC499D12 -PT=B812DB4E295951BB04B1636A9CE91DDB -CT=B164574EAECAD5A06FFB4F3E6C607D61 - -I=53 -KEY=1E9CCB2A3541F810748A8AA519E2003702B5E4719029E073 -PT=B164574EAECAD5A06FFB4F3E6C607D61 -CT=1433D23C1500EDBA0EFFD03D96E18F20 - -I=54 -KEY=F4817B9409F1F1D160B958990CE2ED8D0C4A344C06C86F53 -PT=1433D23C1500EDBA0EFFD03D96E18F20 -CT=B81C889B6FAF5DA800AEBA561992853B - -I=55 -KEY=49F7CD1535080039D8A5D002634DB0250CE48E1A1F5AEA68 -PT=B81C889B6FAF5DA800AEBA561992853B -CT=5B558B7C5916CF14FA5BC9266CFE875F - -I=56 -KEY=FCD5479474EA721783F05B7E3A5B7F31F6BF473C73A46D37 -PT=5B558B7C5916CF14FA5BC9266CFE875F -CT=49BE310D74A9980E9A78B0A8BB3BA1AB - -I=57 -KEY=6A68208CC7D6782ECA4E6A734EF2E73F6CC7F794C89FCC9C -PT=49BE310D74A9980E9A78B0A8BB3BA1AB -CT=7BD5BABAD7F1EEAA56E17BF9B6678DC8 - -I=58 -KEY=38DE1A69C03EF9C1B19BD0C9990309953A268C6D7EF84154 -PT=7BD5BABAD7F1EEAA56E17BF9B6678DC8 -CT=62448A767C344E7E7CDB02112F475EFE - -I=59 -KEY=02634EC657B436A8D3DF5ABFE53747EB46FD8E7C51BF1FAA -PT=62448A767C344E7E7CDB02112F475EFE -CT=F490A20D8B5C53E34C4CF5B7B72A4591 - -I=60 -KEY=DCDAAB8CBD526850274FF8B26E6B14080AB17BCBE6955A3B -PT=F490A20D8B5C53E34C4CF5B7B72A4591 -CT=ACFFD7CD5C01B183AB92DBB62DC088F6 - -I=61 -KEY=51EB6B7172C22A248BB02F7F326AA58BA123A07DCB55D2CD -PT=ACFFD7CD5C01B183AB92DBB62DC088F6 -CT=0BEDDFA8E7A1AC84E3E164A59D599BAB - -I=62 -KEY=4796B5FA7B22626B805DF0D7D5CB090F42C2C4D8560C4966 -PT=0BEDDFA8E7A1AC84E3E164A59D599BAB -CT=9CC82E2B6B96254345C1FDBAD667275E - -I=63 -KEY=D8E112F9657BD2BF1C95DEFCBE5D2C4C07033962806B6E38 -PT=9CC82E2B6B96254345C1FDBAD667275E -CT=75926F4D3503411CD3C059DA4FFABD62 - -I=64 -KEY=A19B892107C4F8F86907B1B18B5E6D50D4C360B8CF91D35A -PT=75926F4D3503411CD3C059DA4FFABD62 -CT=1073561CF6BA28EC57F4B7E5073D27FA - -I=65 -KEY=AEFE35F52D8D54A27974E7AD7DE445BC8337D75DC8ACF4A0 -PT=1073561CF6BA28EC57F4B7E5073D27FA -CT=83E161BA51E6F3A4588C94F7A24BA81F - -I=66 -KEY=5E41A6382F88A350FA9586172C02B618DBBB43AA6AE75CBF -PT=83E161BA51E6F3A4588C94F7A24BA81F -CT=BD693B4C49378F17322D175932B87111 - -I=67 -KEY=A2D760EE839234F147FCBD5B6535390FE99654F3585F2DAE -PT=BD693B4C49378F17322D175932B87111 -CT=101A83CF8487BEDD2C93180BB5024EC9 - -I=68 -KEY=0F463C72AF8E4B5357E63E94E1B287D2C5054CF8ED5D6367 -PT=101A83CF8487BEDD2C93180BB5024EC9 -CT=757949BE62D3328D09E2F45DF2AD095A - -I=69 -KEY=C3C0A16686A5D66B229F772A8361B55FCCE7B8A51FF06A3D -PT=757949BE62D3328D09E2F45DF2AD095A -CT=63EBBF9E15BECEC1A0885BECB3D06BF8 - -I=70 -KEY=3A0B55738CF3B3E94174C8B496DF7B9E6C6FE349AC2001C5 -PT=63EBBF9E15BECEC1A0885BECB3D06BF8 -CT=E176B5C7AFCE06E8ED0C63A4CF7E3034 - -I=71 -KEY=450F848D964934DAA0027D7339117D76816380ED635E31F1 -PT=E176B5C7AFCE06E8ED0C63A4CF7E3034 -CT=97B91F0A898E5B3A77A0883140D477BC - -I=72 -KEY=F3AF781D6EA3529237BB6279B09F264CF6C308DC238A464D -PT=97B91F0A898E5B3A77A0883140D477BC -CT=346AD1C470309DFE6CB08DCC24E17470 - -I=73 -KEY=4E43AB584BF1F8C603D1B3BDC0AFBBB29A738510076B323D -PT=346AD1C470309DFE6CB08DCC24E17470 -CT=F8B462FB7D758B3AF2CDF7D9244B738F - -I=74 -KEY=5A1F023E8F0987B4FB65D146BDDA308868BE72C9232041B2 -PT=F8B462FB7D758B3AF2CDF7D9244B738F -CT=B44D090FD0B7F762146FF6301C6DBF54 - -I=75 -KEY=FFC4BB75031165DA4F28D8496D6DC7EA7CD184F93F4DFEE6 -PT=B44D090FD0B7F762146FF6301C6DBF54 -CT=15CB042313710F2CD1C3409B5F3AF419 - -I=76 -KEY=8107240E1FB855765AE3DC6A7E1CC8C6AD12C46260770AFF -PT=15CB042313710F2CD1C3409B5F3AF419 -CT=0AB01B03F415A58D52CF7A1E40856275 - -I=77 -KEY=4493743ADE27D1D85053C7698A096D4BFFDDBE7C20F2688A -PT=0AB01B03F415A58D52CF7A1E40856275 -CT=05BE037C28719B4C4EEBEA329FAC63D5 - -I=78 -KEY=F582EC062155016255EDC415A278F607B136544EBF5E0B5F -PT=05BE037C28719B4C4EEBEA329FAC63D5 -CT=74C3C4F42B3F575C6B8D5BAD9AF0191F - -I=79 -KEY=8FAF8EEAA5E2D76B212E00E18947A15BDABB0FE325AE1240 -PT=74C3C4F42B3F575C6B8D5BAD9AF0191F -CT=92CB4A3DF34E6711FB56391F26D949AD - -I=80 -KEY=1CAD393CC06BC104B3E54ADC7A09C64A21ED36FC03775BED -PT=92CB4A3DF34E6711FB56391F26D949AD -CT=3754BB3D8C3D7370EDBA842CDF17D5C0 - -I=81 -KEY=E3AB53BB36BDFBBB84B1F1E1F634B53ACC57B2D0DC608E2D -PT=3754BB3D8C3D7370EDBA842CDF17D5C0 -CT=94EAC7FD54D228619791BCCBF9F633F4 - -I=82 -KEY=480B1D923E853259105B361CA2E69D5B5BC60E1B2596BDD9 -PT=94EAC7FD54D228619791BCCBF9F633F4 -CT=CAB29222355968E9CF492D5BF08B0999 - -I=83 -KEY=D8F6791107FB3D26DAE9A43E97BFF5B2948F2340D51DB440 -PT=CAB29222355968E9CF492D5BF08B0999 -CT=00837C78B88005288DB39452F1EB8F13 - -I=84 -KEY=6521B6B771FE24B2DA6AD8462F3FF09A193CB71224F63B53 -PT=00837C78B88005288DB39452F1EB8F13 -CT=2082F77D48A63E223A79217CD4516854 - -I=85 -KEY=9D9F3198682E2476FAE82F3B6799CEB82345966EF0A75307 -PT=2082F77D48A63E223A79217CD4516854 -CT=C5074D4B3F455346B078DAFBC1327AB6 - -I=86 -KEY=61832291235DC7C33FEF627058DC9DFE933D4C95319529B1 -PT=C5074D4B3F455346B078DAFBC1327AB6 -CT=72EE56572A2B7CEC53FC4E4FC0293D63 - -I=87 -KEY=5C2877854338D45D4D01342772F7E112C0C102DAF1BC14D2 -PT=72EE56572A2B7CEC53FC4E4FC0293D63 -CT=7350039161DF9E8E45B360E6139E4226 - -I=88 -KEY=A8225CF65297BA953E5137B613287F9C8572623CE22256F4 -PT=7350039161DF9E8E45B360E6139E4226 -CT=4339288215BE1BB87E31AF8FB35DEDC1 - -I=89 -KEY=51649B52A8458F4B7D681F3406966424FB43CDB3517FBB35 -PT=4339288215BE1BB87E31AF8FB35DEDC1 -CT=4D7AB61CC2C930CBB0DF43EEE92EBA1F - -I=90 -KEY=750E4E7E9183E2FF3012A928C45F54EF4B9C8E5DB851012A -PT=4D7AB61CC2C930CBB0DF43EEE92EBA1F -CT=1090FE663EA77DC2EC30E8F89E662918 - -I=91 -KEY=B65FBDF702246E442082574EFAF8292DA7AC66A526372832 -PT=1090FE663EA77DC2EC30E8F89E662918 -CT=14307A2CC40BDFB0413DF10F961337CA - -I=92 -KEY=7BEC3480AA0A44FF34B22D623EF3F69DE69197AAB0241FF8 -PT=14307A2CC40BDFB0413DF10F961337CA -CT=8F378E272D82DE8E63EC418912EF8642 - -I=93 -KEY=63921E8700657D6ABB85A34513712813857DD623A2CB99BA -PT=8F378E272D82DE8E63EC418912EF8642 -CT=3947DDC00E3C4D958E508DF58AB4982A - -I=94 -KEY=754B2E8355FABCAF82C27E851D4D65860B2D5BD6287F0190 -PT=3947DDC00E3C4D958E508DF58AB4982A -CT=492DB375B3CC640DD8FEDBAF2C943535 - -I=95 -KEY=E8F8C2450F8597B3CBEFCDF0AE81018BD3D3807904EB34A5 -PT=492DB375B3CC640DD8FEDBAF2C943535 -CT=D74BD4118D448B674935B80E4B1BFB93 - -I=96 -KEY=34A2C5B010AE479A1CA419E123C58AEC9AE638774FF0CF36 -PT=D74BD4118D448B674935B80E4B1BFB93 -CT=E9742B41295BC3ED3AA66E80E8718665 - -I=97 -KEY=0E11D08AA9EC81A4F5D032A00A9E4901A04056F7A7814953 -PT=E9742B41295BC3ED3AA66E80E8718665 -CT=5FB17BFE146B410F90EC922B1385D0E4 - -I=98 -KEY=B15779E61FD27B02AA61495E1EF5080E30ACC4DCB40499B7 -PT=5FB17BFE146B410F90EC922B1385D0E4 -CT=1B0CCF643F19DDBC0E3ED0EEAE83ACC1 - -I=99 -KEY=861B580225193DD5B16D863A21ECD5B23E9214321A873576 -PT=1B0CCF643F19DDBC0E3ED0EEAE83ACC1 -CT=B3A7D434E30DC0CDEE4D17BBC27B855E - -I=100 -KEY=B6DF2A8726C31D6E02CA520EC2E1157FD0DF0389D8FCB028 -PT=B3A7D434E30DC0CDEE4D17BBC27B855E -CT=57DE2345D91E26A2AB7CA88AEA23A84F - -I=101 -KEY=6976D3780B5F01E25514714B1BFF33DD7BA3AB0332DF1867 -PT=57DE2345D91E26A2AB7CA88AEA23A84F -CT=7B03541D239B569FEE7ABD8980F1BD05 - -I=102 -KEY=734CAC477A2727542E1725563864654295D9168AB22EA562 -PT=7B03541D239B569FEE7ABD8980F1BD05 -CT=5CB7E72B2E6CFF8C18AEB026FE40C2FA - -I=103 -KEY=B59171BEBC7BFB8672A0C27D16089ACE8D77A6AC4C6E6798 -PT=5CB7E72B2E6CFF8C18AEB026FE40C2FA -CT=50B9186306DA92FE785D6EB9223E43A9 - -I=104 -KEY=E460BA8A2F82DBB72219DA1E10D20830F52AC8156E502431 -PT=50B9186306DA92FE785D6EB9223E43A9 -CT=B3D8CE8B04B99CF2F82571E1588C358B - -I=105 -KEY=CE7C790CD4B34C4791C11495146B94C20D0FB9F436DC11BA -PT=B3D8CE8B04B99CF2F82571E1588C358B -CT=9845F0A5681A40A6DC3D9BCA639FE786 - -I=106 -KEY=699FE59B482743180984E4307C71D464D132223E5543F63C -PT=9845F0A5681A40A6DC3D9BCA639FE786 -CT=C7EBF5CEAAD5652563A8550020EC7070 - -I=107 -KEY=FEBE2836F5099F53CE6F11FED6A4B141B29A773E75AF864C -PT=C7EBF5CEAAD5652563A8550020EC7070 -CT=DE94A376634FE9856A84E2EE6EED86E8 - -I=108 -KEY=22BCFFB0740FC30510FBB288B5EB58C4D81E95D01B4200A4 -PT=DE94A376634FE9856A84E2EE6EED86E8 -CT=64B9917E23328A4FE1F8FDB8AE43E7F3 - -I=109 -KEY=E8491AFDF41F0DFB744223F696D9D28B39E66868B501E757 -PT=64B9917E23328A4FE1F8FDB8AE43E7F3 -CT=2C59820184ABC99E82A7F51D4E3A86A8 - -I=110 -KEY=3BE5F390D72ABE6A581BA1F712721B15BB419D75FB3B61FF -PT=2C59820184ABC99E82A7F51D4E3A86A8 -CT=387ACD0BAD539773287C209A0876581F - -I=111 -KEY=B7388762F772C83560616CFCBF218C66933DBDEFF34D39E0 -PT=387ACD0BAD539773287C209A0876581F -CT=F12D3E1F21AFB9CACAB541EFB7334438 - -I=112 -KEY=FBD600191276FA5C914C52E39E8E35AC5988FC00447E7DD8 -PT=F12D3E1F21AFB9CACAB541EFB7334438 -CT=68D2FA1BB635D9D35E4BF440335CBD80 - -I=113 -KEY=1E2B19106450AA2FF99EA8F828BBEC7F07C308407722C058 -PT=68D2FA1BB635D9D35E4BF440335CBD80 -CT=4532507D5E0227054CB36CBD3C489D53 - -I=114 -KEY=C0B60F65BAD77DA4BCACF88576B9CB7A4B7064FD4B6A5D0B -PT=4532507D5E0227054CB36CBD3C489D53 -CT=6DB8FD7DE7924B7E92CF27BC0AD11D16 - -I=115 -KEY=451836B53318CC33D11405F8912B8004D9BF434141BB401D -PT=6DB8FD7DE7924B7E92CF27BC0AD11D16 -CT=A3D5F6A8D4372B66F8D3DD9FF945DECA - -I=116 -KEY=0E57235F9B527C5172C1F350451CAB62216C9EDEB8FE9ED7 -PT=A3D5F6A8D4372B66F8D3DD9FF945DECA -CT=BEDFF233AD31EEB9943EEBF52F66AABF - -I=117 -KEY=BB7E1C438E5F36A3CC1E0163E82D45DBB552752B97983468 -PT=BEDFF233AD31EEB9943EEBF52F66AABF -CT=4531EDEC06570582755199A0C4745EA5 - -I=118 -KEY=DE70EC87811AFD32892FEC8FEE7A4059C003EC8B53EC6ACD -PT=4531EDEC06570582755199A0C4745EA5 -CT=F3189383C202A472CE238571D187F8EB - -I=119 -KEY=CA2AE67397E9238A7A377F0C2C78E42B0E2069FA826B9226 -PT=F3189383C202A472CE238571D187F8EB -CT=B48952CBAC43D0114985A9035DFF0382 - -I=120 -KEY=335EF040D622E95BCEBE2DC7803B343A47A5C0F9DF9491A4 -PT=B48952CBAC43D0114985A9035DFF0382 -CT=9B71302FDFBC47DF6276AB73D4D0D8B3 - -I=121 -KEY=683CC10DFBC6C09C55CF1DE85F8773E525D36B8A0B444917 -PT=9B71302FDFBC47DF6276AB73D4D0D8B3 -CT=69EED4A0C5428005199DF12B338393E2 - -I=122 -KEY=B86C9A2F1A978E123C21C9489AC5F3E03C4E9AA138C7DAF5 -PT=69EED4A0C5428005199DF12B338393E2 -CT=D0C2ACA653E6D7D80D32F445B0DD2347 - -I=123 -KEY=EF7E3DCDF05FFA86ECE365EEC9232438317C6EE4881AF9B2 -PT=D0C2ACA653E6D7D80D32F445B0DD2347 -CT=F373D4DBD7ADAFEF582621EC8C7CD2A2 - -I=124 -KEY=B8059C7A6BA2273E1F90B1351E8E8BD7695A4F0804662B10 -PT=F373D4DBD7ADAFEF582621EC8C7CD2A2 -CT=0AD37AFC8C929513F9BDB976E69C7CF3 - -I=125 -KEY=F5C9ECCBB672D46F1543CBC9921C1EC490E7F67EE2FA57E3 -PT=0AD37AFC8C929513F9BDB976E69C7CF3 -CT=E80B118DFB34F11DB344B6AE34EDEBC8 - -I=126 -KEY=AA67DC18543A7A88FD48DA446928EFD923A340D0D617BC2B -PT=E80B118DFB34F11DB344B6AE34EDEBC8 -CT=628D5C42DDEBA9AE4983F51D339366B4 - -I=127 -KEY=BF0C30A039C0FEE89FC58606B4C346776A20B5CDE584DA9F -PT=628D5C42DDEBA9AE4983F51D339366B4 -CT=1BE2A5A8CCA8E065557F6982AF3E056F - -I=128 -KEY=A219F6B8E2FF1AA3842723AE786BA6123F5FDC4F4ABADFF0 -PT=1BE2A5A8CCA8E065557F6982AF3E056F -CT=5E1187D78AEB34780F07905A84D2EBBA - -I=129 -KEY=851DDD078D4B7802DA36A479F280926A30584C15CE68344A -PT=5E1187D78AEB34780F07905A84D2EBBA -CT=31EE3AC2EC79D14EBCA71E760326CD74 - -I=130 -KEY=E6741084FEDEEFFEEBD89EBB1EF943248CFF5263CD4EF93E -PT=31EE3AC2EC79D14EBCA71E760326CD74 -CT=298E3A00F280BBF8364CF8D6D44CF54E - -I=131 -KEY=8A41136FE9DB1FB5C256A4BBEC79F8DCBAB3AAB519020C70 -PT=298E3A00F280BBF8364CF8D6D44CF54E -CT=39B7A0416C1F9B19C7B99A1F6A70258C - -I=132 -KEY=E1F1B622EB8BC9B1FBE104FA806663C57D0A30AA737229FC -PT=39B7A0416C1F9B19C7B99A1F6A70258C -CT=B1655FA9AB2C4956E2C56F7A6C421BE5 - -I=133 -KEY=0EE0B7E1AF7093694A845B532B4A2A939FCF5FD01F303219 -PT=B1655FA9AB2C4956E2C56F7A6C421BE5 -CT=1AD9CBB1A28F7A2A6CBC7EC98EF483FC - -I=134 -KEY=180A2BD07F77D34E505D90E289C550B9F373211991C4B1E5 -PT=1AD9CBB1A28F7A2A6CBC7EC98EF483FC -CT=6363BE57D6D587EE3ABA9FE81F3D3A10 - -I=135 -KEY=848B7408CAACF02E333E2EB55F10D757C9C9BEF18EF98BF5 -PT=6363BE57D6D587EE3ABA9FE81F3D3A10 -CT=05618580D7915AA7398EF4DB7D1F1DE3 - -I=136 -KEY=E581D7B4F84F2860365FAB3588818DF0F0474A2AF3E69616 -PT=05618580D7915AA7398EF4DB7D1F1DE3 -CT=F8D0118087404FD729F96CA6551338AD - -I=137 -KEY=6C81D6873EFFF763CE8FBAB50FC1C227D9BE268CA6F5AEBB -PT=F8D0118087404FD729F96CA6551338AD -CT=784913B38D32A7395D73AF1378A0DC56 - -I=138 -KEY=D971137D872F606EB6C6A90682F3651E84CD899FDE5572ED -PT=784913B38D32A7395D73AF1378A0DC56 -CT=D07C418BD183457B6683AE99C457FC0B - -I=139 -KEY=196BBA79E35EEC7966BAE88D53702065E24E27061A028EE6 -PT=D07C418BD183457B6683AE99C457FC0B -CT=5595D16DF7668779825BC135D1408013 - -I=140 -KEY=6F140EC274635FA2332F39E0A416A71C6015E633CB420EF5 -PT=5595D16DF7668779825BC135D1408013 -CT=1AB9F5075E063403FEFD976044C89C95 - -I=141 -KEY=926F3A2AA0BD8C952996CCE7FA10931F9EE871538F8A9260 -PT=1AB9F5075E063403FEFD976044C89C95 -CT=6DF413E53FCEDA296D7ABA796179D600 - -I=142 -KEY=740F74BF0E0C38154462DF02C5DE4936F392CB2AEEF34460 -PT=6DF413E53FCEDA296D7ABA796179D600 -CT=0D0F499B0D51948A9CCBC4B6531A05F7 - -I=143 -KEY=2500C9B63042B24B496D9699C88FDDBC6F590F9CBDE94197 -PT=0D0F499B0D51948A9CCBC4B6531A05F7 -CT=85833A1072B6A0ED932D4D89D53A785A - -I=144 -KEY=FCB377C07622271FCCEEAC89BA397D51FC74421568D339CD -PT=85833A1072B6A0ED932D4D89D53A785A -CT=545EDE1A4B737F1E51CBDAE311E91D5C - -I=145 -KEY=BB108ABE391C394E98B07293F14A024FADBF98F6793A2491 -PT=545EDE1A4B737F1E51CBDAE311E91D5C -CT=DA8CC635CF1450685DDAAA5A56BC3BD9 - -I=146 -KEY=34F8623EC93A6C2A423CB4A63E5E5227F06532AC2F861F48 -PT=DA8CC635CF1450685DDAAA5A56BC3BD9 -CT=FE73162BF90B52DEE7D0EA9D73F8444D - -I=147 -KEY=5E3CB25583365D5EBC4FA28DC75500F917B5D8315C7E5B05 -PT=FE73162BF90B52DEE7D0EA9D73F8444D -CT=BC75D12F66C232E1979D0F6C3E1ED8F1 - -I=148 -KEY=EABE655116470AE1003A73A2A19732188028D75D626083F4 -PT=BC75D12F66C232E1979D0F6C3E1ED8F1 -CT=661A3FA0530BF47C266D609FE01DAF48 - -I=149 -KEY=97A1B8E97CF217C366204C02F29CC664A645B7C2827D2CBC -PT=661A3FA0530BF47C266D609FE01DAF48 -CT=791144514CF8E4CC15BC6ADE3291F9CD - -I=150 -KEY=5189DC6F535B5A091F310853BE6422A8B3F9DD1CB0ECD571 -PT=791144514CF8E4CC15BC6ADE3291F9CD -CT=4369FDB3626F399A6526C476373A52D4 - -I=151 -KEY=21CD36EDB27428AB5C58F5E0DC0B1B32D6DF196A87D687A5 -PT=4369FDB3626F399A6526C476373A52D4 -CT=4C8869494C044703CFDD09F83B2208AA - -I=152 -KEY=85C08C7D4667AE3710D09CA9900F5C3119021092BCF48F0F -PT=4C8869494C044703CFDD09F83B2208AA -CT=06BC45BDB38A7028CB2D189E9E0C3046 - -I=153 -KEY=807182BD7E1F29BE166CD91423852C19D22F080C22F8BF49 -PT=06BC45BDB38A7028CB2D189E9E0C3046 -CT=74AFD5F37F8F0712710585FB8DB22FF8 - -I=154 -KEY=1AF15D0DE00CEF3F62C30CE75C0A2B0BA32A8DF7AF4A90B1 -PT=74AFD5F37F8F0712710585FB8DB22FF8 -CT=B1A4EE894A12794E0C1A286DDBC01CFD - -I=155 -KEY=E0732BA619DCF2F5D367E26E16185245AF30A59A748A8C4C -PT=B1A4EE894A12794E0C1A286DDBC01CFD -CT=0EA90279135DFFC7F58DB959F9E8BFE1 - -I=156 -KEY=AE8779E669BFF77EDDCEE0170545AD825ABD1CC38D6233AD -PT=0EA90279135DFFC7F58DB959F9E8BFE1 -CT=3717C67E520D87778350E62525C01730 - -I=157 -KEY=79D13142BE9066A2EAD9266957482AF5D9EDFAE6A8A2249D -PT=3717C67E520D87778350E62525C01730 -CT=A8F96DA7AE81EF8810A317AB4C9B82A9 - -I=158 -KEY=597D70828E56003942204BCEF9C9C57DC94EED4DE439A634 -PT=A8F96DA7AE81EF8810A317AB4C9B82A9 -CT=8C373A065986BAC9E345475F5D83FBCF - -I=159 -KEY=96C8CF3884D5DA18CE1771C8A04F7FB42A0BAA12B9BA5DFB -PT=8C373A065986BAC9E345475F5D83FBCF -CT=8E4D562CBEDC360EFB25B857DD4C4FF2 - -I=160 -KEY=5A0A29B58F17F9F9405A27E41E9349BAD12E124564F61209 -PT=8E4D562CBEDC360EFB25B857DD4C4FF2 -CT=192CCD79E3B4C8F5617D1F55B789B7A3 - -I=161 -KEY=29A4692EDE3EAABE5976EA9DFD27814FB0530D10D37FA5AA -PT=192CCD79E3B4C8F5617D1F55B789B7A3 -CT=8A5F181E1748C98121D1C22204591B23 - -I=162 -KEY=5E5CA30210E78677D329F283EA6F48CE9182CF32D726BE89 -PT=8A5F181E1748C98121D1C22204591B23 -CT=14512A4997094A0536594E63ACC5EF4A - -I=163 -KEY=7DA5F9C99B68DFB0C778D8CA7D6602CBA7DB81517BE351C3 -PT=14512A4997094A0536594E63ACC5EF4A -CT=F91BA751D5E2ADC074FC6CC14476DE67 - -I=164 -KEY=658144C57CCFDAD83E637F9BA884AF0BD327ED903F958FA4 -PT=F91BA751D5E2ADC074FC6CC14476DE67 -CT=5F7FED22BABA25D48C95C4E2CAEDB3F4 - -I=165 -KEY=13C5D7A44396F6FD611C92B9123E8ADF5FB22972F5783C50 -PT=5F7FED22BABA25D48C95C4E2CAEDB3F4 -CT=0FCFB3CB93B2E7FDF7E156486929BD17 - -I=166 -KEY=99DBAC1D5D268DB06ED32172818C6D22A8537F3A9C518147 -PT=0FCFB3CB93B2E7FDF7E156486929BD17 -CT=3E16265A02271FF68AE6310A6BFDEE60 - -I=167 -KEY=A8876A49E2F1CC5250C5072883AB72D422B54E30F7AC6F27 -PT=3E16265A02271FF68AE6310A6BFDEE60 -CT=1657BF722B57D083D8864B6447317E05 - -I=168 -KEY=0A615A71BC2BE3E94692B85AA8FCA257FA330554B09D1122 -PT=1657BF722B57D083D8864B6447317E05 -CT=018B742E941E27C547451B9E41F245F5 - -I=169 -KEY=6AE11571E3D54C4B4719CC743CE28592BD761ECAF16F54D7 -PT=018B742E941E27C547451B9E41F245F5 -CT=8C5BB61774502B6A9C44BEE8D6C44A63 - -I=170 -KEY=DCE75079013F0865CB427A6348B2AEF82132A02227AB1EB4 -PT=8C5BB61774502B6A9C44BEE8D6C44A63 -CT=361D3B51C751298194CB1AA32C0A86EE - -I=171 -KEY=E73232D50D457866FD5F41328FE38779B5F9BA810BA1985A -PT=361D3B51C751298194CB1AA32C0A86EE -CT=7B734F34DD4F332CBE5CFC7659C390BF - -I=172 -KEY=BEEF9073227655EB862C0E0652ACB4550BA546F7526208E5 -PT=7B734F34DD4F332CBE5CFC7659C390BF -CT=63CCC9CE5DADA5B5AC68870E6C675943 - -I=173 -KEY=1E9078C198526C1DE5E0C7C80F0111E0A7CDC1F93E0551A6 -PT=63CCC9CE5DADA5B5AC68870E6C675943 -CT=7BBC6F7B62807CBE1C93CADB5E6CAE0A - -I=174 -KEY=AD26AC70784FF1B99E5CA8B36D816D5EBB5E0B226069FFAC -PT=7BBC6F7B62807CBE1C93CADB5E6CAE0A -CT=E95B0C766EF9049163D3A249E196DDB8 - -I=175 -KEY=E17835A277F1D1EE7707A4C5037869CFD88DA96B81FF2214 -PT=E95B0C766EF9049163D3A249E196DDB8 -CT=968263CBCDB4582FC9CDFD0C9FD0B4F0 - -I=176 -KEY=22F9EB31E67C62DBE185C70ECECC31E0114054671E2F96E4 -PT=968263CBCDB4582FC9CDFD0C9FD0B4F0 -CT=9F573A339DFA07B844E4034718A4FE88 - -I=177 -KEY=0FEC8766966A42DA7ED2FD3D5336365855A45720068B686C -PT=9F573A339DFA07B844E4034718A4FE88 -CT=A0809BA3A742C0EB1BDA613B7472F56A - -I=178 -KEY=98E655519C9A8A95DE52669EF474F6B34E7E361B72F99D06 -PT=A0809BA3A742C0EB1BDA613B7472F56A -CT=9BF1D85440818035FA6AC36E5A5F00A7 - -I=179 -KEY=A8D37BE0EB386F8045A3BECAB4F57686B414F57528A69DA1 -PT=9BF1D85440818035FA6AC36E5A5F00A7 -CT=924E309AC04A655C50980360914E9830 - -I=180 -KEY=7D89F156EA181E92D7ED8E5074BF13DAE48CF615B9E80591 -PT=924E309AC04A655C50980360914E9830 -CT=427819CDAE419A046D4586FF5A784A1C - -I=181 -KEY=B028A265666F69629595979DDAFE89DE89C970EAE3904F8D -PT=427819CDAE419A046D4586FF5A784A1C -CT=D8B51EEC0A6A6D17F1E476C922AD8548 - -I=182 -KEY=DF20B45B990C5E734D208971D094E4C9782D0623C13DCAC5 -PT=D8B51EEC0A6A6D17F1E476C922AD8548 -CT=7823F1BBA96105168195CDAC34AB5315 - -I=183 -KEY=AF4C64F7E4AA6DE2350378CA79F5E1DFF9B8CB8FF59699D0 -PT=7823F1BBA96105168195CDAC34AB5315 -CT=85DD0256BC29EAA867DB77C1A049574D - -I=184 -KEY=4047F74604E37A00B0DE7A9CC5DC0B779E63BC4E55DFCE9D -PT=85DD0256BC29EAA867DB77C1A049574D -CT=64C1880D34408CB1A92BBA354941D5B6 - -I=185 -KEY=9C3BF36E47110C08D41FF291F19C87C63748067B1C9E1B2B -PT=64C1880D34408CB1A92BBA354941D5B6 -CT=25B80866FE3198C775F64C412E734348 - -I=186 -KEY=FAE7368F99242159F1A7FAF70FAD1F0142BE4A3A32ED5863 -PT=25B80866FE3198C775F64C412E734348 -CT=8D3D7E9A195363C96334C48120BC343A - -I=187 -KEY=5F48BD86A9C4DC897C9A846D16FE7CC8218A8EBB12516C59 -PT=8D3D7E9A195363C96334C48120BC343A -CT=E886EEA0F2D556D693DC94FFC588D1F4 - -I=188 -KEY=B7406993C120EA20941C6ACDE42B2A1EB2561A44D7D9BDAD -PT=E886EEA0F2D556D693DC94FFC588D1F4 -CT=76CB89CBB935D422DED9784D4548A84F - -I=189 -KEY=4DB740C3FA55F4ABE2D7E3065D1EFE3C6C8F6209929115E2 -PT=76CB89CBB935D422DED9784D4548A84F -CT=93D7AC7B18A1196D5C166203C44A43D3 - -I=190 -KEY=353A0293DEFB648071004F7D45BFE7513099000A56DB5631 -PT=93D7AC7B18A1196D5C166203C44A43D3 -CT=8982BD77485524EE9E49769591E922CE - -I=191 -KEY=F6FC1F7E838CD8A7F882F20A0DEAC3BFAED0769FC73274FF -PT=8982BD77485524EE9E49769591E922CE -CT=89012A1E3F7669C76C5F5F4987108662 - -I=192 -KEY=A1AA84E01EBC3E837183D814329CAA78C28F29D64022F29D -PT=89012A1E3F7669C76C5F5F4987108662 -CT=139E37ADA17990054AF8EF5B717E884B - -I=193 -KEY=C631229E9871F2AC621DEFB993E53A7D8877C68D315C7AD6 -PT=139E37ADA17990054AF8EF5B717E884B -CT=CEC8F9C90B2E393BDA4602C2A83F953C - -I=194 -KEY=824604723CD82F95ACD5167098CB03465231C44F9963EFEA -PT=CEC8F9C90B2E393BDA4602C2A83F953C -CT=2A2E1344AE4C6BA40568E170BF67FD74 - -I=195 -KEY=2B17489FA71F683B86FB0534368768E25759253F2604129E -PT=2A2E1344AE4C6BA40568E170BF67FD74 -CT=7402AC6982DBB0BED678746E4523556C - -I=196 -KEY=DA9C0CF5A89D3D94F2F9A95DB45CD85C81215151632747F2 -PT=7402AC6982DBB0BED678746E4523556C -CT=36A36B5B55F950F00B9F3E31156BFD65 - -I=197 -KEY=543619886B56830BC45AC206E1A588AC8ABE6F60764CBA97 -PT=36A36B5B55F950F00B9F3E31156BFD65 -CT=D7B36A117E824A49A5944C37BEE27F06 - -I=198 -KEY=9494630598E7618213E9A8179F27C2E52F2A2357C8AEC591 -PT=D7B36A117E824A49A5944C37BEE27F06 -CT=2D60BC0BC950EEE7E36D50E971CF68D0 - -I=199 -KEY=B0328218DF523A0C3E89141C56772C02CC4773BEB961AD41 -PT=2D60BC0BC950EEE7E36D50E971CF68D0 -CT=49A4643E535F45A1ABDEF41ABABBE268 - -I=200 -KEY=5E3FD7ACD8EF334D772D7022052869A3679987A403DA4F29 -PT=49A4643E535F45A1ABDEF41ABABBE268 -CT=D5EEB5CC40AF8612708BAABE85685E4C - -I=201 -KEY=A232D0267D606002A2C3C5EE4587EFB117122D1A86B21165 -PT=D5EEB5CC40AF8612708BAABE85685E4C -CT=3F5B875DE202C5441165FE5C5CA2D258 - -I=202 -KEY=844ED6FAFA342BFE9D9842B3A7852AF50677D346DA10C33D -PT=3F5B875DE202C5441165FE5C5CA2D258 -CT=9B5F0210E0EC623C6ACF1C0BC06EBF51 - -I=203 -KEY=109F8CEC689E0F5306C740A3476948C96CB8CF4D1A7E7C6C -PT=9B5F0210E0EC623C6ACF1C0BC06EBF51 -CT=E57015FAB0006446E544704DB6629059 - -I=204 -KEY=D9ABCBAC4B271B04E3B75559F7692C8F89FCBF00AC1CEC35 -PT=E57015FAB0006446E544704DB6629059 -CT=85F0DF6B1ED933E87F6A9F609D516346 - -I=205 -KEY=09915869AE1F57F766478A32E9B01F67F6962060314D8F73 -PT=85F0DF6B1ED933E87F6A9F609D516346 -CT=471B931539C155478A1D4B9BA50DCE43 - -I=206 -KEY=BFB70AA6C4F05C1D215C1927D0714A207C8B6BFB94404130 -PT=471B931539C155478A1D4B9BA50DCE43 -CT=9AC55C1CC77E7B59CC9204898A38CEA7 - -I=207 -KEY=660972D79B056F14BB99453B170F3179B0196F721E788F97 -PT=9AC55C1CC77E7B59CC9204898A38CEA7 -CT=19B00FEB13145F9F356173B42184D516 - -I=208 -KEY=F09576EB17FB1A07A2294AD0041B6EE685781CC63FFC5A81 -PT=19B00FEB13145F9F356173B42184D516 -CT=5F1379E25F6DD8653B73F58E738D6243 - -I=209 -KEY=8D170BBC5E3662BEFD3A33325B76B683BE0BE9484C7138C2 -PT=5F1379E25F6DD8653B73F58E738D6243 -CT=AEF55C09E7AD76CC9BA7B83874A0A86B - -I=210 -KEY=1A7BD2572D3CDB8C53CF6F3BBCDBC04F25AC517038D190A9 -PT=AEF55C09E7AD76CC9BA7B83874A0A86B -CT=6BEF52E6D86DC15D2A03B5CB3EBAB130 - -I=211 -KEY=B4BC0603F59BE3D038203DDD64B601120FAFE4BB066B2199 -PT=6BEF52E6D86DC15D2A03B5CB3EBAB130 -CT=FDC093FFED096B7812E77E23AD9C7C71 - -I=212 -KEY=C00A0DDA74D55250C5E0AE2289BF6A6A1D489A98ABF75DE8 -PT=FDC093FFED096B7812E77E23AD9C7C71 -CT=072625CB0C022827E195DE8AB4FE7E0C - -I=213 -KEY=6534CBAB46880CE0C2C68BE985BD424DFCDD44121F0923E4 -PT=072625CB0C022827E195DE8AB4FE7E0C -CT=11AA47C5557437AEE8A8BE31A849A047 - -I=214 -KEY=C204AFE794D81224D36CCC2CD0C975E31475FA23B74083A3 -PT=11AA47C5557437AEE8A8BE31A849A047 -CT=4C91B3031567DFFC22829CBC3C419B6D - -I=215 -KEY=01A4820CC4D281B99FFD7F2FC5AEAA1F36F7669F8B0118CE -PT=4C91B3031567DFFC22829CBC3C419B6D -CT=54C0F95B0179CB753917A2592F58BD77 - -I=216 -KEY=B5C1DD77446C8FD1CB3D8674C4D7616A0FE0C4C6A459A5B9 -PT=54C0F95B0179CB753917A2592F58BD77 -CT=A2A19A98250E432131F9EF4AE473677F - -I=217 -KEY=9FDC1167AC2D1A51699C1CECE1D9224B3E192B8C402AC2C6 -PT=A2A19A98250E432131F9EF4AE473677F -CT=9B5780CA9669A92688F54887E303F2D3 - -I=218 -KEY=C734A73F4A32D311F2CB9C2677B08B6DB6EC630BA3293015 -PT=9B5780CA9669A92688F54887E303F2D3 -CT=F1750745D1E74E41A07B99482ECABAAA - -I=219 -KEY=1612B86730F487EF03BE9B63A657C52C1697FA438DE38ABF -PT=F1750745D1E74E41A07B99482ECABAAA -CT=30F510DBDDAEC6FC0D2504C11DF23CFA - -I=220 -KEY=D52E3B50F72B085D334B8BB87BF903D01BB2FE829011B645 -PT=30F510DBDDAEC6FC0D2504C11DF23CFA -CT=64998C3018185D722477A2DBFB84ABB8 - -I=221 -KEY=7F9F2A23D320792E57D2078863E15EA23FC55C596B951DFD -PT=64998C3018185D722477A2DBFB84ABB8 -CT=9293A4FF9ED5D57D81BB8A63381BF66A - -I=222 -KEY=B529B6E7080E0AE4C541A377FD348BDFBE7ED63A538EEB97 -PT=9293A4FF9ED5D57D81BB8A63381BF66A -CT=A389ABCF609B41F28CC3188B2C126915 - -I=223 -KEY=A5C4C3A89459F79566C808B89DAFCA2D32BDCEB17F9C8282 -PT=A389ABCF609B41F28CC3188B2C126915 -CT=5F4BC60608A3DF788631EBB66763E7DF - -I=224 -KEY=F59456291C6CF0C83983CEBE950C1555B48C250718FF655D -PT=5F4BC60608A3DF788631EBB66763E7DF -CT=EFDE2113118EDFD5A15D4DFA1C1E79B4 - -I=225 -KEY=9A4CD87E44EA7DEED65DEFAD8482CA8015D168FD04E11CE9 -PT=EFDE2113118EDFD5A15D4DFA1C1E79B4 -CT=2526BA56DA8A9F9A5799A9D2BE96AEBA - -I=226 -KEY=A19D5DFAEC1C9B9DF37B55FB5E08551A4248C12FBA77B253 -PT=2526BA56DA8A9F9A5799A9D2BE96AEBA -CT=83F237712EF89A7B1E84D69DEFC9B9B9 - -I=227 -KEY=C48B0103470544867089628A70F0CF615CCC17B255BE0BEA -PT=83F237712EF89A7B1E84D69DEFC9B9B9 -CT=13B7E26895FEEFE2356306D8D822DDD3 - -I=228 -KEY=B366B0FE6BB3DB17633E80E2E50E208369AF116A8D9CD639 -PT=13B7E26895FEEFE2356306D8D822DDD3 -CT=BF8C47559B230A3311543BEAA90D4DA1 - -I=229 -KEY=BE5A735484B72645DCB2C7B77E2D2AB078FB2A8024919B98 -PT=BF8C47559B230A3311543BEAA90D4DA1 -CT=D3C9AFCED64F46AC74FFF73302DE10EB - -I=230 -KEY=1DFD852FE9F131840F7B6879A8626C1C0C04DDB3264F8B73 -PT=D3C9AFCED64F46AC74FFF73302DE10EB -CT=004386EABD8F3C60971D34B5A5F220F8 - -I=231 -KEY=BB9831D80259A5A40F38EE9315ED507C9B19E90683BDAB8B -PT=004386EABD8F3C60971D34B5A5F220F8 -CT=119A244F6A3ED1947A764CFE96568213 - -I=232 -KEY=93B0F09E78E610741EA2CADC7FD381E8E16FA5F815EB2998 -PT=119A244F6A3ED1947A764CFE96568213 -CT=4C8D061BD62737E674DDCACEFC37DA11 - -I=233 -KEY=43E5036A09590404522FCCC7A9F4B60E95B26F36E9DCF389 -PT=4C8D061BD62737E674DDCACEFC37DA11 -CT=7B5EFE44536B5AB9CF75A457BB8C2417 - -I=234 -KEY=869CF7BF36FBB5D829713283FA9FECB75AC7CB615250D79E -PT=7B5EFE44536B5AB9CF75A457BB8C2417 -CT=25771915A1C0F8149634963E1C91BD26 - -I=235 -KEY=C9BD373897A760E30C062B965B5F14A3CCF35D5F4EC16AB8 -PT=25771915A1C0F8149634963E1C91BD26 -CT=8BB2BC7E7BAAEA1AAF7A9E285BEEB8F1 - -I=236 -KEY=D2EE543EACA1592687B497E820F5FEB96389C377152FD249 -PT=8BB2BC7E7BAAEA1AAF7A9E285BEEB8F1 -CT=05556B6AB68D2DABCDB32FB724D44F57 - -I=237 -KEY=9583438F7194754F82E1FC829678D312AE3AECC031FB9D1E -PT=05556B6AB68D2DABCDB32FB724D44F57 -CT=A4CE8197B0EAE6AD57D5A0630D0CABD0 - -I=238 -KEY=A5B96A3EFB2EF0C7262F7D15269235BFF9EF4CA33CF736CE -PT=A4CE8197B0EAE6AD57D5A0630D0CABD0 -CT=8E40F09865AA8EA114EA7F36E11815C3 - -I=239 -KEY=8E7A04E47969F5DBA86F8D8D4338BB1EED053395DDEF230D -PT=8E40F09865AA8EA114EA7F36E11815C3 -CT=194A76947319ED92D96D292684C29B5A - -I=240 -KEY=E52197304B446A01B125FB193021568C34681AB3592DB857 -PT=194A76947319ED92D96D292684C29B5A -CT=93526BBB6405BDEA68AC01F1C807EBF7 - -I=241 -KEY=DA4552EC2C076DC3227790A25424EB665CC41B42912A53A0 -PT=93526BBB6405BDEA68AC01F1C807EBF7 -CT=59860971F900B739B36CB97D35B082D1 - -I=242 -KEY=E7329ED9491CA8227BF199D3AD245C5FEFA8A23FA49AD171 -PT=59860971F900B739B36CB97D35B082D1 -CT=92F430D5B1F35B469ECDDFDCB2A110F5 - -I=243 -KEY=1ADC19560D9AEF09E905A9061CD7071971657DE3163BC184 -PT=92F430D5B1F35B469ECDDFDCB2A110F5 -CT=F81D2505FD9A569A71502B23894DA535 - -I=244 -KEY=6ED932F2BEBD486911188C03E14D5183003556C09F7664B1 -PT=F81D2505FD9A569A71502B23894DA535 -CT=93BACD72A0E761D34E8603FC44F6BA5E - -I=245 -KEY=F0A52339F0C68F5782A2417141AA30504EB3553CDB80DEEF -PT=93BACD72A0E761D34E8603FC44F6BA5E -CT=631DB808708B5EBB54A2DE6B62519235 - -I=246 -KEY=0B262E7EA7109C03E1BFF97931216EEB1A118B57B9D14CDA -PT=631DB808708B5EBB54A2DE6B62519235 -CT=C402023DA5F2F230FEEACE1C5F8B5390 - -I=247 -KEY=1E7EB042CA0EA74F25BDFB4494D39CDBE4FB454BE65A1F4A -PT=C402023DA5F2F230FEEACE1C5F8B5390 -CT=CAD88E79E0AB4A3B324F6D3ABBEA211C - -I=248 -KEY=215E3E970705BE3DEF65753D7478D6E0D6B428715DB03E56 -PT=CAD88E79E0AB4A3B324F6D3ABBEA211C -CT=1B2303C4FEB78105B5BF35BC1C5C2FF9 - -I=249 -KEY=512CE443B55593D9F44676F98ACF57E5630B1DCD41EC11AF -PT=1B2303C4FEB78105B5BF35BC1C5C2FF9 -CT=06CAE1EED611AF829C83216697F8AEFA - -I=250 -KEY=533251960972B2BFF28C97175CDEF867FF883CABD614BF55 -PT=06CAE1EED611AF829C83216697F8AEFA -CT=170194A7E4E85B0A339BF86460E5ABC6 - -I=251 -KEY=B484A158FBC3D31FE58D03B0B836A36DCC13C4CFB6F11493 -PT=170194A7E4E85B0A339BF86460E5ABC6 -CT=AF7014D972F55B0CD759CAFBC0D9483B - -I=252 -KEY=C470759A6962C1934AFD1769CAC3F8611B4A0E3476285CA8 -PT=AF7014D972F55B0CD759CAFBC0D9483B -CT=E8BD547419DADD980682B701CCEF3C7E - -I=253 -KEY=D27A5BF9DD3B6F61A240431DD31925F91DC8B935BAC760D6 -PT=E8BD547419DADD980682B701CCEF3C7E -CT=E8F9CFAA891A471EBBC5806F03E0E18A - -I=254 -KEY=041C2FF776BAF2334AB98CB75A0362E7A60D395AB927815C -PT=E8F9CFAA891A471EBBC5806F03E0E18A -CT=F90F888C03CEBFC9A807DF2100488B24 - -I=255 -KEY=9BB4307835C91BA4B3B6043B59CDDD2E0E0AE67BB96F0A78 -PT=F90F888C03CEBFC9A807DF2100488B24 -CT=7874C642B44810334C2CF572DA0DEF68 - -I=256 -KEY=56E742B84F293B68CBC2C279ED85CD1D422613096362E510 -PT=7874C642B44810334C2CF572DA0DEF68 -CT=064513BBD5E667B651B93502E86B6C43 - -I=257 -KEY=66E28C26E01570FCCD87D1C23863AAAB139F260B8B098953 -PT=064513BBD5E667B651B93502E86B6C43 -CT=D461A03D7D8669BBC32430D00D437E59 - -I=258 -KEY=5674831937969B7619E671FF45E5C310D0BB16DB864AF70A -PT=D461A03D7D8669BBC32430D00D437E59 -CT=0A07F858DBD1909FF970C95ED7287FB3 - -I=259 -KEY=D45BCD0FF3E14A7013E189A79E34538F29CBDF85516288B9 -PT=0A07F858DBD1909FF970C95ED7287FB3 -CT=C2E45D29C1DF02CB4D768682ADD73E6B - -I=260 -KEY=40F81EBEF03AAAABD105D48E5FEB514464BD5907FCB5B6D2 -PT=C2E45D29C1DF02CB4D768682ADD73E6B -CT=01E21E496061DAC195F24F6D1CF22B8A - -I=261 -KEY=99C8875EE8221C3FD0E7CAC73F8A8B85F14F166AE0479D58 -PT=01E21E496061DAC195F24F6D1CF22B8A -CT=71D1C35E1126F6907CDB5414B8C97E84 - -I=262 -KEY=F1582613B3466D7FA13609992EAC7D158D94427E588EE3DC -PT=71D1C35E1126F6907CDB5414B8C97E84 -CT=8B7BBAF63C993D4BBB098A22D00C5608 - -I=263 -KEY=4679A2F69656CFD32A4DB36F1235405E369DC85C8882B5D4 -PT=8B7BBAF63C993D4BBB098A22D00C5608 -CT=651B19F5C1B67FC52151E7C5F1246485 - -I=264 -KEY=A404FC3490DFC7244F56AA9AD3833F9B17CC2F9979A6D151 -PT=651B19F5C1B67FC52151E7C5F1246485 -CT=158F0AE36B5585868DFB998520318FEB - -I=265 -KEY=F7DCCA4394981F2D5AD9A079B8D6BA1D9A37B61C59975EBA -PT=158F0AE36B5585868DFB998520318FEB -CT=B62EC94231405F3FB0D160FBFF2DE27E - -I=266 -KEY=1F38711C9B6BD060ECF7693B8996E5222AE6D6E7A6BABCC4 -PT=B62EC94231405F3FB0D160FBFF2DE27E -CT=464AFFA35373CEE71523FF0AFBFB1F51 - -I=267 -KEY=6B846AAC0C448654AABD9698DAE52BC53FC529ED5D41A395 -PT=464AFFA35373CEE71523FF0AFBFB1F51 -CT=C729EA9A05D5482491CE31DBBC03CE24 - -I=268 -KEY=BD539A9B4001B6876D947C02DF3063E1AE0B1836E1426DB1 -PT=C729EA9A05D5482491CE31DBBC03CE24 -CT=C755C048ADAD22A628B077163097415F - -I=269 -KEY=18B524EEF606589DAAC1BC4A729D414786BB6F20D1D52CEE -PT=C755C048ADAD22A628B077163097415F -CT=2DADB8F8FC76D8C997627449E44D14B2 - -I=270 -KEY=3C2C6A047706E3DD876C04B28EEB998E11D91B693598385C -PT=2DADB8F8FC76D8C997627449E44D14B2 -CT=2D7109526C2F1B5D08DD356B163498D7 - -I=271 -KEY=40593D776B6C5920AA1D0DE0E2C482D319042E0223ACA08B -PT=2D7109526C2F1B5D08DD356B163498D7 -CT=D9C1D988ABD5C892B2E5BA7BF4F584D3 - -I=272 -KEY=72B53E4711B3DE9873DCD46849114A41ABE19479D7592458 -PT=D9C1D988ABD5C892B2E5BA7BF4F584D3 -CT=0A32E78440A8AE4A3FF74B20A3F5F7DE - -I=273 -KEY=C0BEF126899B305B79EE33EC09B9E40B9416DF5974ACD386 -PT=0A32E78440A8AE4A3FF74B20A3F5F7DE -CT=E7AA36688851D8E4E08E9EFE6987C571 - -I=274 -KEY=D16257EFEE63CC399E44058481E83CEF749841A71D2B16F7 -PT=E7AA36688851D8E4E08E9EFE6987C571 -CT=0E3E2E99FFA84F8A69CAA897017DD09C - -I=275 -KEY=3509E5A7A66648B9907A2B1D7E4073651D52E9301C56C66B -PT=0E3E2E99FFA84F8A69CAA897017DD09C -CT=96766B7F6E78537994466BDC62607C85 - -I=276 -KEY=46BC3EB6FA22C8AC060C40621038201C891482EC7E36BAEE -PT=96766B7F6E78537994466BDC62607C85 -CT=AA42980BBABA21DACE6D9FCD28A5B0BA - -I=277 -KEY=26FC66C5E5C6E585AC4ED869AA8201C647791D2156930A54 -PT=AA42980BBABA21DACE6D9FCD28A5B0BA -CT=EC057F10222EC91403E1B6CEFCE3556A - -I=278 -KEY=91FBDF7B24B0FEB4404BA77988ACC8D24498ABEFAA705F3E -PT=EC057F10222EC91403E1B6CEFCE3556A -CT=E6E91EC6B977C3547D08F717F6702E80 - -I=279 -KEY=5BD8360BB35CE209A6A2B9BF31DB0B8639905CF85C0071BE -PT=E6E91EC6B977C3547D08F717F6702E80 -CT=DF9BE6A5A61CC4B66C76447202CBFADA - -I=280 -KEY=E58D0EFAB72342BD79395F1A97C7CF3055E6188A5ECB8B64 -PT=DF9BE6A5A61CC4B66C76447202CBFADA -CT=8466FA526E1038CC14A2EC6D85FC4EDF - -I=281 -KEY=7EB51DD43B05BB26FD5FA548F9D7F7FC4144F4E7DB37C5BB -PT=8466FA526E1038CC14A2EC6D85FC4EDF -CT=5C5A965E386B16D50F3487D54C04AA6B - -I=282 -KEY=8F4BEBA429FE57C4A1053316C1BCE1294E70733297336FD0 -PT=5C5A965E386B16D50F3487D54C04AA6B -CT=BCD57B57FAA6E3F81660113345CD24F9 - -I=283 -KEY=4A5DA421D27E62821DD048413B1A02D158106201D2FE4B29 -PT=BCD57B57FAA6E3F81660113345CD24F9 -CT=7450D38B3A6D8C4987EE3F7F71C68FFC - -I=284 -KEY=77934AE2BB39BC4469809BCA01778E98DFFE5D7EA338C4D5 -PT=7450D38B3A6D8C4987EE3F7F71C68FFC -CT=A6D1D5A31BAB1CE9F027376539B2AAE2 - -I=285 -KEY=2C6FD4455E96F2F6CF514E691ADC92712FD96A1B9A8A6E37 -PT=A6D1D5A31BAB1CE9F027376539B2AAE2 -CT=10894E2E6275D172259D4C23332508B9 - -I=286 -KEY=2608AB9AA8CED631DFD8004778A943030A442638A9AF668E -PT=10894E2E6275D172259D4C23332508B9 -CT=53C2AB8E42B4EF7FF659D3FB251453C7 - -I=287 -KEY=68840BD9639AC3128C1AABC93A1DAC7CFC1DF5C38CBB3549 -PT=53C2AB8E42B4EF7FF659D3FB251453C7 -CT=3A9C38D026561B83B0F3E7B566C66CD2 - -I=288 -KEY=EFCDF07C0E70D051B68693191C4BB7FF4CEE1276EA7D599B -PT=3A9C38D026561B83B0F3E7B566C66CD2 -CT=B9F7E495B96BE7C0307D8F7A53200193 - -I=289 -KEY=87DFC62793B45EF60F71778CA520503F7C939D0CB95D5808 -PT=B9F7E495B96BE7C0307D8F7A53200193 -CT=2425FE8AAA7ED06A5FFEC11D7B289891 - -I=290 -KEY=5FD78DA64A9F50142B5489060F5E8055236D5C11C275C099 -PT=2425FE8AAA7ED06A5FFEC11D7B289891 -CT=93BC83BCF69DBB256C27AF250FDEFAEB - -I=291 -KEY=81C88579E065FD16B8E80ABAF9C33B704F4AF334CDAB3A72 -PT=93BC83BCF69DBB256C27AF250FDEFAEB -CT=A1AF953D4BD1A474B1173D4686EBB8CF - -I=292 -KEY=DEE7FFE9A3814D2B19479F87B2129F04FE5DCE724B4082BD -PT=A1AF953D4BD1A474B1173D4686EBB8CF -CT=00AAC1CD74952011A03714A6BB091653 - -I=293 -KEY=8331CC8136829F1E19ED5E4AC687BF155E6ADAD4F04994EE -PT=00AAC1CD74952011A03714A6BB091653 -CT=00B92CBFFC3589CEB3ECAA7D221C3F0B - -I=294 -KEY=FF862EBFECC11E93195472F53AB236DBED8670A9D255ABE5 -PT=00B92CBFFC3589CEB3ECAA7D221C3F0B -CT=2E07858E94AD300A35448EFA848A767A - -I=295 -KEY=18B8678C5497708E3753F77BAE1F06D1D8C2FE5356DFDD9F -PT=2E07858E94AD300A35448EFA848A767A -CT=B02F0C98F3B7BB7807F35F6DFD925238 - -I=296 -KEY=C90D1E18331CA38F877CFBE35DA8BDA9DF31A13EAB4D8FA7 -PT=B02F0C98F3B7BB7807F35F6DFD925238 -CT=EAACC8624146D29129ED8B904E89F04A - -I=297 -KEY=A08AD721EE869F2E6DD033811CEE6F38F6DC2AAEE5C47FED -PT=EAACC8624146D29129ED8B904E89F04A -CT=8949A5A4289B65A32C5116E8A4B55A50 - -I=298 -KEY=CED3055CB1AC48CAE499962534750A9BDA8D3C46417125BD -PT=8949A5A4289B65A32C5116E8A4B55A50 -CT=B632C5FD8EB9676B5504A8BA13E63E2D - -I=299 -KEY=AD1DA883EFFC2F3052AB53D8BACC6DF08F8994FC52971B90 -PT=B632C5FD8EB9676B5504A8BA13E63E2D -CT=EF28A1297C07A575686B3429AC9B62D1 - -I=300 -KEY=007F57339EC932CCBD83F2F1C6CBC885E7E2A0D5FE0C7941 -PT=EF28A1297C07A575686B3429AC9B62D1 -CT=C99F15E4000944120D1C3DD283D99BFF - -I=301 -KEY=3688FDD4FD7822F2741CE715C6C28C97EAFE9D077DD5E2BE -PT=C99F15E4000944120D1C3DD283D99BFF -CT=0AC0219E2BD43F9F19F3A0997FCB9FCD - -I=302 -KEY=AB54BF259C6F5CEE7EDCC68BED16B308F30D3D9E021E7D73 -PT=0AC0219E2BD43F9F19F3A0997FCB9FCD -CT=E27242BC80823BDC09C33C1BDB2EA3BE - -I=303 -KEY=9C88F101B483F8399CAE84376D9488D4FACE0185D930DECD -PT=E27242BC80823BDC09C33C1BDB2EA3BE -CT=7ABF9BD872F54E12FB7F0B11A6D10472 - -I=304 -KEY=971A26707E5B8BC2E6111FEF1F61C6C601B10A947FE1DABF -PT=7ABF9BD872F54E12FB7F0B11A6D10472 -CT=336653E5166F1B4146DBEAED74D72BB7 - -I=305 -KEY=1FFD085658F88F24D5774C0A090EDD87476AE0790B36F108 -PT=336653E5166F1B4146DBEAED74D72BB7 -CT=4849136D0509CE6C404E5685FBEEE9B8 - -I=306 -KEY=411DF55702805FE69D3E5F670C0713EB0724B6FCF0D818B0 -PT=4849136D0509CE6C404E5685FBEEE9B8 -CT=6CF8DCFD53E2ED214A449398D8BF0F6C - -I=307 -KEY=504BFF39E24E870FF1C6839A5FE5FECA4D602564286717DC -PT=6CF8DCFD53E2ED214A449398D8BF0F6C -CT=9C8326B89B3054A46ECA3BB76BC2F292 - -I=308 -KEY=E4F4B55125D2D1056D45A522C4D5AA6E23AA1ED343A5E54E -PT=9C8326B89B3054A46ECA3BB76BC2F292 -CT=C85479C9E038BA5495F67D6E8B2BEB64 - -I=309 -KEY=F2E9B605207E0FD4A511DCEB24ED103AB65C63BDC88E0E2A -PT=C85479C9E038BA5495F67D6E8B2BEB64 -CT=145607ACFFA06C08AB958DCB7BC0BDBC - -I=310 -KEY=CC0D3F478519145BB147DB47DB4D7C321DC9EE76B34EB396 -PT=145607ACFFA06C08AB958DCB7BC0BDBC -CT=ED7EE0DA132D9964BE5E7B2581C3C270 - -I=311 -KEY=EB3AFCDD9AAB59705C393B9DC860E556A3979553328D71E6 -PT=ED7EE0DA132D9964BE5E7B2581C3C270 -CT=6B576FD09F34ED38774AA383BB88B385 - -I=312 -KEY=866ECC1B3691532D376E544D5754086ED4DD36D08905C263 -PT=6B576FD09F34ED38774AA383BB88B385 -CT=E540518151453A18C29BE22B5DE84D5B - -I=313 -KEY=2B3BF12A0A10E6F9D22E05CC061132761646D4FBD4ED8F38 -PT=E540518151453A18C29BE22B5DE84D5B -CT=7865DE74099D486ECB584BE7890F3078 - -I=314 -KEY=3C6EA741634001E0AA4BDBB80F8C7A18DD1E9F1C5DE2BF40 -PT=7865DE74099D486ECB584BE7890F3078 -CT=5226B72FA16653187980D265EB6C7C6D - -I=315 -KEY=A32E19E0F06CB649F86D6C97AEEA2900A49E4D79B68EC32D -PT=5226B72FA16653187980D265EB6C7C6D -CT=CA0D39D92B042BECABF7A14115B3A307 - -I=316 -KEY=E48451707115D4A03260554E85EE02EC0F69EC38A33D602A -PT=CA0D39D92B042BECABF7A14115B3A307 -CT=EC1658D60F1D94EF514FA8EDADAB3C1D - -I=317 -KEY=89A589616229672BDE760D988AF396035E2644D50E965C37 -PT=EC1658D60F1D94EF514FA8EDADAB3C1D -CT=F278CD13BF2C6A1F2D9A9F0C1113205D - -I=318 -KEY=6013E84EFD076E402C0EC08B35DFFC1C73BCDBD91F857C6A -PT=F278CD13BF2C6A1F2D9A9F0C1113205D -CT=0B1A35F604DDB043BCD0573DC0850AF0 - -I=319 -KEY=68BCE1DC00C592E22714F57D31024C5FCF6C8CE4DF00769A -PT=0B1A35F604DDB043BCD0573DC0850AF0 -CT=EAC4FE6F8A04871AC434322CB06308E3 - -I=320 -KEY=1BE682363F216340CDD00B12BB06CB450B58BEC86F637E79 -PT=EAC4FE6F8A04871AC434322CB06308E3 -CT=64B6BA31C6B15BE040DC2C0A07FFE60F - -I=321 -KEY=2082C6C0D49B4DECA966B1237DB790A54B8492C2689C9876 -PT=64B6BA31C6B15BE040DC2C0A07FFE60F -CT=5ECDC37FEA4176145C6A308F91659D43 - -I=322 -KEY=23668EEA68987F8CF7AB725C97F6E6B117EEA24DF9F90535 -PT=5ECDC37FEA4176145C6A308F91659D43 -CT=BB25C81945A062A7D53531593D9910F6 - -I=323 -KEY=10B544566773DD5F4C8EBA45D2568416C2DB9314C46015C3 -PT=BB25C81945A062A7D53531593D9910F6 -CT=48D98FFFC4E378D42CFC785B53DFC38D - -I=324 -KEY=7F96DD27E1C0B7B7045735BA16B5FCC2EE27EB4F97BFD64E -PT=48D98FFFC4E378D42CFC785B53DFC38D -CT=7DCE20BAE8345CB68103461B4AFA9F09 - -I=325 -KEY=A73354FC47570B2679991500FE81A0746F24AD54DD454947 -PT=7DCE20BAE8345CB68103461B4AFA9F09 -CT=099B315B4DD55CAB5D02163154DA521C - -I=326 -KEY=92A57B873A1D292F7002245BB354FCDF3226BB65899F1B5B -PT=099B315B4DD55CAB5D02163154DA521C -CT=37207C17099989D3EA0D13DBD6DF7FEF - -I=327 -KEY=7048AF52E1763E8E4722584CBACD750CD82BA8BE5F4064B4 -PT=37207C17099989D3EA0D13DBD6DF7FEF -CT=7CE37081A6751A1518F03B70FBC1479D - -I=328 -KEY=24E37AF6A4BC72403BC128CD1CB86F19C0DB93CEA4812329 -PT=7CE37081A6751A1518F03B70FBC1479D -CT=201BBD8456F70ED0BB4E19A7AE36F1A6 - -I=329 -KEY=17E541A643CB8EE01BDA95494A4F61C97B958A690AB7D28F -PT=201BBD8456F70ED0BB4E19A7AE36F1A6 -CT=3384168E4F022049B0E3AD6899B71DC9 - -I=330 -KEY=31D5A160B61690A0285E83C7054D4180CB7627019300CF46 -PT=3384168E4F022049B0E3AD6899B71DC9 -CT=C83AA6AE617CB17E2977D394EBC4AD19 - -I=331 -KEY=6EBA775B83D704AAE06425696431F0FEE201F49578C4625F -PT=C83AA6AE617CB17E2977D394EBC4AD19 -CT=8AC467890AF8E729C7A86A471ADEB378 - -I=332 -KEY=C1237F715488582E6AA042E06EC917D725A99ED2621AD127 -PT=8AC467890AF8E729C7A86A471ADEB378 -CT=B89CE4F733A9D67C8E504BC4BC2F7664 - -I=333 -KEY=0A9E4BDAD3E856F1D23CA6175D60C1ABABF9D516DE35A743 -PT=B89CE4F733A9D67C8E504BC4BC2F7664 -CT=47B421469B794A5188255ACE84D89721 - -I=334 -KEY=4BE367B885F7AF9195888751C6198BFA23DC8FD85AED3062 -PT=47B421469B794A5188255ACE84D89721 -CT=B6B09DBF9E62C60951368C9C8B63A860 - -I=335 -KEY=CDFB62995E4C5D4E23381AEE587B4DF372EA0344D18E9802 -PT=B6B09DBF9E62C60951368C9C8B63A860 -CT=68933B4BD0BC23EB3178347DFE68E7F6 - -I=336 -KEY=8887EBF40DE51F064BAB21A588C76E18439237392FE67FF4 -PT=68933B4BD0BC23EB3178347DFE68E7F6 -CT=C6F16CDDF00C982A927609B559B0BCBD - -I=337 -KEY=221D949B8CA9F4C48D5A4D7878CBF632D1E43E8C7656C349 -PT=C6F16CDDF00C982A927609B559B0BCBD -CT=CBEE831F7623E3214E72AF57706525C7 - -I=338 -KEY=3D35666DACEFF3C846B4CE670EE815139F9691DB0633E68E -PT=CBEE831F7623E3214E72AF57706525C7 -CT=DFE0297AE9B69F0AD69D6189C1447333 - -I=339 -KEY=43370C9C958216DC9954E71DE75E8A19490BF052C77795BD -PT=DFE0297AE9B69F0AD69D6189C1447333 -CT=59C3B4D6055B9F73064B715CD5213C99 - -I=340 -KEY=DF43233D68EE5C4AC09753CBE205156A4F40810E1256A924 -PT=59C3B4D6055B9F73064B715CD5213C99 -CT=5373F13BB16B3653FCC138FC9A9E8A47 - -I=341 -KEY=472E0A65B06B4F4693E4A2F0536E2339B381B9F288C82363 -PT=5373F13BB16B3653FCC138FC9A9E8A47 -CT=9C7514B7FEDF2DC26B0C2C1954745077 - -I=342 -KEY=1409E4DF955583A00F91B647ADB10EFBD88D95EBDCBC7314 -PT=9C7514B7FEDF2DC26B0C2C1954745077 -CT=2480D7C35D6B0207D84A9CEFA1C2CFDC - -I=343 -KEY=458552CAB6B1A8AC2B116184F0DA0CFC00C709047D7EBCC8 -PT=2480D7C35D6B0207D84A9CEFA1C2CFDC -CT=46DE3E51F1355FA76652C8DA3642409B - -I=344 -KEY=2065D6F033E1EE2E6DCF5FD501EF535B6695C1DE4B3CFC53 -PT=46DE3E51F1355FA76652C8DA3642409B -CT=13F328173D057A64DA3917468528DB4F - -I=345 -KEY=6D30053E2C95BC5A7E3C77C23CEA293FBCACD698CE14271C -PT=13F328173D057A64DA3917468528DB4F -CT=33D71B6CD0A68B685C89C9F2D70FDFCE - -I=346 -KEY=59D69C2D25BFB6A34DEB6CAEEC4CA257E0251F6A191BF8D2 -PT=33D71B6CD0A68B685C89C9F2D70FDFCE -CT=8E9F57B5E945CD7DFC2B9FCD5AF96DFB - -I=347 -KEY=F41ABD021E5C144EC3743B1B05096F2A1C0E80A743E29529 -PT=8E9F57B5E945CD7DFC2B9FCD5AF96DFB -CT=71295B41B9E5872E1BD4D5C3C4C62D71 - -I=348 -KEY=41C1194732CD4654B25D605ABCECE80407DA55648724B858 -PT=71295B41B9E5872E1BD4D5C3C4C62D71 -CT=E704FBBAA917788CE906A54B2A56A232 - -I=349 -KEY=AF58932371569CE655599BE015FB9088EEDCF02FAD721A6A -PT=E704FBBAA917788CE906A54B2A56A232 -CT=8DBA56CF3E019B8EA80CCB772551CA5B - -I=350 -KEY=B1E68A05A144F4FAD8E3CD2F2BFA0B0646D03B588823D031 -PT=8DBA56CF3E019B8EA80CCB772551CA5B -CT=18F8A23F785AFEFC4ECD527AC6DBE609 - -I=351 -KEY=456D39FF40B1622BC01B6F1053A0F5FA081D69224EF83638 -PT=18F8A23F785AFEFC4ECD527AC6DBE609 -CT=073F93A707D6B9A82E99990CB13BD00E - -I=352 -KEY=1FF446993B6927C6C724FCB754764C522684F02EFFC3E636 -PT=073F93A707D6B9A82E99990CB13BD00E -CT=76723E1239356EDC37FB5E1EAFDF4678 - -I=353 -KEY=0DED89E36C3B06B9B156C2A56D43228E117FAE30501CA04E -PT=76723E1239356EDC37FB5E1EAFDF4678 -CT=1B57D35B4E2484D3945B82D59114A531 - -I=354 -KEY=E433448EB970D64FAA0111FE2367A65D85242CE5C108057F -PT=1B57D35B4E2484D3945B82D59114A531 -CT=4466DCB75F6B83885EE32D9FD533A902 - -I=355 -KEY=3751EC4737F029E3EE67CD497C0C25D5DBC7017A143BAC7D -PT=4466DCB75F6B83885EE32D9FD533A902 -CT=A8B62B9FCAA9331A3282899DB475AADE - -I=356 -KEY=6C1042FACD259CC346D1E6D6B6A516CFE94588E7A04E06A3 -PT=A8B62B9FCAA9331A3282899DB475AADE -CT=DFE1CB42B29F119E44F37F60A8C2BD7C - -I=357 -KEY=640D2DB3E708999A99302D94043A0751ADB6F787088CBBDF -PT=DFE1CB42B29F119E44F37F60A8C2BD7C -CT=891B211EE1BEA05AD7BA478FDFEBC507 - -I=358 -KEY=C434FF9BD02BDF6C102B0C8AE584A70B7A0CB008D7677ED8 -PT=891B211EE1BEA05AD7BA478FDFEBC507 -CT=16ABB92A1E0F433250C551F84AE177CF - -I=359 -KEY=22A76DAFC8A7748E0680B5A0FB8BE4392AC9E1F09D860917 -PT=16ABB92A1E0F433250C551F84AE177CF -CT=1A2F4BF6ED0CADB7FA3FC52F3C6AF191 - -I=360 -KEY=5DDEDF839CF5C0D11CAFFE561687498ED0F624DFA1ECF886 -PT=1A2F4BF6ED0CADB7FA3FC52F3C6AF191 -CT=16AE687EE38FB85C0F70E20F5585F750 - -I=361 -KEY=13D0157C6A30C26C0A019628F508F1D2DF86C6D0F4690FD6 -PT=16AE687EE38FB85C0F70E20F5585F750 -CT=6CD2D70F641B2A7814014177C4880107 - -I=362 -KEY=6DBFF188E61696C966D341279113DBAACB8787A730E10ED1 -PT=6CD2D70F641B2A7814014177C4880107 -CT=8CAD28041AE53AA64CE0173DBD9046C2 - -I=363 -KEY=44A13B269C44F018EA7E69238BF6E10C8767909A8D714813 -PT=8CAD28041AE53AA64CE0173DBD9046C2 -CT=FC8D4274BA1EF15CC39E750DD1848F7B - -I=364 -KEY=B7A8311B81A3B82C16F32B5731E8105044F9E5975CF5C768 -PT=FC8D4274BA1EF15CC39E750DD1848F7B -CT=01CBDAEAADE486CF655401D8F7F7E84E - -I=365 -KEY=A3AC668823C917DE1738F1BD9C0C969F21ADE44FAB022F26 -PT=01CBDAEAADE486CF655401D8F7F7E84E -CT=494C3219700E06EE9C4DCB61EF932FDF - -I=366 -KEY=05CC07DC3CBB1A4B5E74C3A4EC029071BDE02F2E449100F9 -PT=494C3219700E06EE9C4DCB61EF932FDF -CT=BB0E7D5CD93B1839DF5CAED7996F9560 - -I=367 -KEY=8768468EFC3CE954E57ABEF83539884862BC81F9DDFE9599 -PT=BB0E7D5CD93B1839DF5CAED7996F9560 -CT=CC1F9A504A67C24621ED127C63AE2A36 - -I=368 -KEY=470E251F98662CEC296524A87F5E4A0E43519385BE50BFAF -PT=CC1F9A504A67C24621ED127C63AE2A36 -CT=A48D3751956B71F925680073B35BC0A3 - -I=369 -KEY=533C67C061CE6B9E8DE813F9EA353BF7663993F60D0B7F0C -PT=A48D3751956B71F925680073B35BC0A3 -CT=80143AC021E94718146EBC7808A9DDD8 - -I=370 -KEY=0303563B9274349D0DFC2939CBDC7CEF72572F8E05A2A2D4 -PT=80143AC021E94718146EBC7808A9DDD8 -CT=B90AC6ADEE1B60228096D022EE5C681B - -I=371 -KEY=1E7D3A52CC112BDCB4F6EF9425C71CCDF2C1FFACEBFECACF -PT=B90AC6ADEE1B60228096D022EE5C681B -CT=CB8553B21250642107E824E8FB27CAEA - -I=372 -KEY=750A36009059323E7F73BC26379778ECF529DB4410D90025 -PT=CB8553B21250642107E824E8FB27CAEA -CT=9C86DA9646FCFEA7E778A5498F50E01E - -I=373 -KEY=6876C614C460B02CE3F566B0716B864B12517E0D9F89E03B -PT=9C86DA9646FCFEA7E778A5498F50E01E -CT=1481357AD5690762FD6F3809F1E5F219 - -I=374 -KEY=7CE6B00F6B651FAEF77453CAA4028129EF3E46046E6C1222 -PT=1481357AD5690762FD6F3809F1E5F219 -CT=39B64998D4370E0CB47C1DC23EDCDD03 - -I=375 -KEY=C3F72A84EF6F4A0CCEC21A5270358F255B425BC650B0CF21 -PT=39B64998D4370E0CB47C1DC23EDCDD03 -CT=EB1BA96272D7BB044A3381439BA4CD5B - -I=376 -KEY=C670185A26E7DA4A25D9B33002E234211171DA85CB14027A -PT=EB1BA96272D7BB044A3381439BA4CD5B -CT=F87EC3D7F55DA25790718E461BA2E194 - -I=377 -KEY=72ECF820AC459D8DDDA770E7F7BF9676810054C3D0B6E3EE -PT=F87EC3D7F55DA25790718E461BA2E194 -CT=AD7EA1621AD7FBA975D6BB0AB9AED116 - -I=378 -KEY=CE4ECAD1C7D17D1170D9D185ED686DDFF4D6EFC9691832F8 -PT=AD7EA1621AD7FBA975D6BB0AB9AED116 -CT=473B6484F6EAE1FC837A2710AE8D462F - -I=379 -KEY=3273752C9A8682F237E2B5011B828C2377ACC8D9C79574D7 -PT=473B6484F6EAE1FC837A2710AE8D462F -CT=0E3634529E49692762F4D80333738045 - -I=380 -KEY=8C2CFBB98A4E5E3839D4815385CBE504155810DAF4E6F492 -PT=0E3634529E49692762F4D80333738045 -CT=F8EFEBD78C115CC620F25AB66038F2A0 - -I=381 -KEY=0416DBCAFA0850D8C13B6A8409DAB9C235AA4A6C94DE0632 -PT=F8EFEBD78C115CC620F25AB66038F2A0 -CT=B4442C38E3B8E87D8AAE2C17A5571CE9 - -I=382 -KEY=7A7815A748696E99757F46BCEA6251BFBF04667B31891ADB -PT=B4442C38E3B8E87D8AAE2C17A5571CE9 -CT=576A20E194015AB069D769FCA7D842FC - -I=383 -KEY=3848903CD019B4572215665D7E630B0FD6D30F8796515827 -PT=576A20E194015AB069D769FCA7D842FC -CT=E253D9FB4075B021DF452B3AD51204D6 - -I=384 -KEY=3E468D281DF03284C046BFA63E16BB2E099624BD43435CF1 -PT=E253D9FB4075B021DF452B3AD51204D6 -CT=D9454AE62207E70A34F13B0063498A8F - -I=385 -KEY=860E4E60B132A8851903F5401C115C243D671FBD200AD67E -PT=D9454AE62207E70A34F13B0063498A8F -CT=A21F7DA8A298670D631F677D23504757 - -I=386 -KEY=27B82EDF5FFD15DDBB1C88E8BE893B295E7878C0035A9129 -PT=A21F7DA8A298670D631F677D23504757 -CT=1D239EFBABD09A029FE11C59A385C909 - -I=387 -KEY=631BCB74800FD13AA63F16131559A12BC1996499A0DF5820 -PT=1D239EFBABD09A029FE11C59A385C909 -CT=C87EB2AB019AFA608BE99CE77717B333 - -I=388 -KEY=EE1326871289985E6E41A4B814C35B4B4A70F87ED7C8EB13 -PT=C87EB2AB019AFA608BE99CE77717B333 -CT=528DBF70307431E33815D1AA44C30FA8 - -I=389 -KEY=F1D72A84C2FE044F3CCC1BC824B76AA8726529D4930BE4BB -PT=528DBF70307431E33815D1AA44C30FA8 -CT=6C8014B427ED6331A5C174CF2846B70A - -I=390 -KEY=A1610602C8DD2836504C0F7C035A0999D7A45D1BBB4D53B1 -PT=6C8014B427ED6331A5C174CF2846B70A -CT=3DF4C4BE003A13030E73026F7027ADB1 - -I=391 -KEY=B2418E725A1435DD6DB8CBC203601A9AD9D75F74CB6AFE00 -PT=3DF4C4BE003A13030E73026F7027ADB1 -CT=39C50365300DCC5B47F827054879C642 - -I=392 -KEY=761AF29E74671706547DC8A7336DD6C19E2F787183133842 -PT=39C50365300DCC5B47F827054879C642 -CT=847F488B3CEC2E1E4E1C6B9F37E4F631 - -I=393 -KEY=C912116E7B47169AD002802C0F81F8DFD03313EEB4F7CE73 -PT=847F488B3CEC2E1E4E1C6B9F37E4F631 -CT=9A581179C883C5E057CC560A3DF6CD34 - -I=394 -KEY=B08B1226353C6BD34A5A9155C7023D3F87FF45E489010347 -PT=9A581179C883C5E057CC560A3DF6CD34 -CT=799B437C3EF3663EFBD6F186EDFDF21A - -I=395 -KEY=1ECAE821E161A2C833C1D229F9F15B017C29B46264FCF15D -PT=799B437C3EF3663EFBD6F186EDFDF21A -CT=138A858B14FE28D9A47C76BB3FAE9AA1 - -I=396 -KEY=3AD2B951E451EEA8204B57A2ED0F73D8D855C2D95B526BFC -PT=138A858B14FE28D9A47C76BB3FAE9AA1 -CT=5E35BC76C5AC8765A6C396DFE5689579 - -I=397 -KEY=791E5F91477E986E7E7EEBD428A3F4BD7E965406BE3AFE85 -PT=5E35BC76C5AC8765A6C396DFE5689579 -CT=53F8361BF47A82EF27492322BA6F57AD - -I=398 -KEY=194A170B3D4FA6E62D86DDCFDCD9765259DF77240455A928 -PT=53F8361BF47A82EF27492322BA6F57AD -CT=FF626D77AE144C11480610EC1ABB5028 - -I=399 -KEY=C9DC82F000187721D2E4B0B872CD3A4311D967C81EEEF900 -PT=FF626D77AE144C11480610EC1ABB5028 -CT=4E46F8C5092B29E29A971A0CD1F610FB - -========================= - -KEYSIZE=256 - -I=0 -KEY=0000000000000000000000000000000000000000000000000000000000000000 -PT=00000000000000000000000000000000 -CT=8B79EECC93A0EE5DFF30B4EA21636DA4 - -I=1 -KEY=AD3965683E6FA98B5F38AC26653679288B79EECC93A0EE5DFF30B4EA21636DA4 -PT=8B79EECC93A0EE5DFF30B4EA21636DA4 -CT=C737317FE0846F132B23C8C2A672CE22 - -I=2 -KEY=28E79E2AFC5F7745FCCABE2F6257C2EF4C4EDFB37324814ED4137C288711A386 -PT=C737317FE0846F132B23C8C2A672CE22 -CT=E58B82BFBA53C0040DC610C642121168 - -I=3 -KEY=0721E93EACF9DC6C870D8133376B7C0DA9C55D0CC977414AD9D56CEEC503B2EE -PT=E58B82BFBA53C0040DC610C642121168 -CT=10B296ABB40504995DB71DDA0B7E26FB - -I=4 -KEY=0ECE1E210ADA32EBC497AD50F516602EB977CBA77D7245D384627134CE7D9415 -PT=10B296ABB40504995DB71DDA0B7E26FB -CT=B7198D8E88BAA25234C18517E99BB70D - -I=5 -KEY=D31313ACD90A9BB7D6596DEAB752003F0E6E4629F5C8E781B0A3F42327E62318 -PT=B7198D8E88BAA25234C18517E99BB70D -CT=6125097DB5738C64513E125872EA436C - -I=6 -KEY=488B6A78D9AA23FEA7289E250928BDE36F4B4F5440BB6BE5E19DE67B550C6074 -PT=6125097DB5738C64513E125872EA436C -CT=07FF2ED24B522F1E31D46E94BE5C505B - -I=7 -KEY=03DDD56B142AD3B0E4FFD2BAC6568E5468B461860BE944FBD04988EFEB50302F -PT=07FF2ED24B522F1E31D46E94BE5C505B -CT=EB3C1E3328F840B110E934B0129F2F23 - -I=8 -KEY=20F9D92C65B2F00183464197B23BE5AF83887FB52311044AC0A0BC5FF9CF1F0C -PT=EB3C1E3328F840B110E934B0129F2F23 -CT=107CB7B403DC3F6F09EC30EC1718D183 - -I=9 -KEY=79CF0BCF8EFE3DE82E27778923D1AA1993F4C80120CD3B25C94C8CB3EED7CE8F -PT=107CB7B403DC3F6F09EC30EC1718D183 -CT=CE9DB77B1FAE0CFEC5341FA5AF4CDE8A - -I=10 -KEY=F50ADABA26525BFA7BF6EEF2402450785D697F7A3F6337DB0C789316419B1005 -PT=CE9DB77B1FAE0CFEC5341FA5AF4CDE8A -CT=157B5946862DA3E9A1A83E45857E207D - -I=11 -KEY=3B6947995411D0AE50645129D13BACC04812263CB94E9432ADD0AD53C4E53078 -PT=157B5946862DA3E9A1A83E45857E207D -CT=4AE3583491DF78918CAB3AC241286855 - -I=12 -KEY=AAD12F02F5E5681D16236B668EF2C46702F17E082891ECA3217B979185CD582D -PT=4AE3583491DF78918CAB3AC241286855 -CT=05400C32DC84F1AB486A9BADB1415B50 - -I=13 -KEY=EA02EB82D4B2112DD3BD64C1C908CEC307B1723AF4151D0869110C3C348C037D -PT=05400C32DC84F1AB486A9BADB1415B50 -CT=E4C0781A2EA68D142504739731EF396E - -I=14 -KEY=D51A1846DFEB738F0AF138F74C968DCCE3710A20DAB3901C4C157FAB05633A13 -PT=E4C0781A2EA68D142504739731EF396E -CT=44CC8A9C84E6AD66BD24F1EE1F925EC3 - -I=15 -KEY=B6401DFC35AF21E53CD254431CC639E9A7BD80BC5E553D7AF1318E451AF164D0 -PT=44CC8A9C84E6AD66BD24F1EE1F925EC3 -CT=20AF5FDDF65856D1A60ADC03567AE163 - -I=16 -KEY=D1D2E8B5644910077B3EDB245F029C0D8712DF61A80D6BAB573B52464C8B85B3 -PT=20AF5FDDF65856D1A60ADC03567AE163 -CT=CEB74DD6FBEAFDCEE54930D58AF22ACA - -I=17 -KEY=9F932DC2AB83FA5153E7081E7360ABB449A592B753E79665B2726293C679AF79 -PT=CEB74DD6FBEAFDCEE54930D58AF22ACA -CT=72FB3F7BBBDBA9C036C94531A32E937D - -I=18 -KEY=06AABCA83922297791C9D07AEB639BDD3B5EADCCE83C3FA584BB27A265573C04 -PT=72FB3F7BBBDBA9C036C94531A32E937D -CT=299B26D5D6DFA2C20824D8A84E98A244 - -I=19 -KEY=6124BC71768DE5E9C14D37915D90F1AE12C58B193EE39D678C9FFF0A2BCF9E40 -PT=299B26D5D6DFA2C20824D8A84E98A244 -CT=0A35C0D4170BDE0258D79B668C7C98F4 - -I=20 -KEY=282B067BD441670E11E576F26C4EA67D18F04BCD29E84365D448646CA7B306B4 -PT=0A35C0D4170BDE0258D79B668C7C98F4 -CT=F4E3E981FFC8B50FC9146B85A22E71D4 - -I=21 -KEY=2864E2A3986F99C55EC21C225E3498ECEC13A24CD620F66A1D5C0FE9059D7760 -PT=F4E3E981FFC8B50FC9146B85A22E71D4 -CT=130ACF4CEAFE3277DF057D4D170582ED - -I=22 -KEY=600FD4DFD03132B0DB7B2432DBE027C2FF196D003CDEC41DC25972A41298F58D -PT=130ACF4CEAFE3277DF057D4D170582ED -CT=50001D54F2EA5EAA3BE2206F3845D9A9 - -I=23 -KEY=C1CBE3A1679D6C1913EABE3400993100AF197054CE349AB7F9BB52CB2ADD2C24 -PT=50001D54F2EA5EAA3BE2206F3845D9A9 -CT=69F3EE4B230B2DB2492FE0E36B949154 - -I=24 -KEY=7C6C63E14606A0B09254A531CACB45A0C6EA9E1FED3FB705B094B2284149BD70 -PT=69F3EE4B230B2DB2492FE0E36B949154 -CT=CEEE40F3D2FD9A5521F44AD3AB55198D - -I=25 -KEY=22BB6E21BCA0450240DB117B028837AF0804DEEC3FC22D509160F8FBEA1CA4FD -PT=CEEE40F3D2FD9A5521F44AD3AB55198D -CT=1FA1F1AE7BF2A8C66A6ED6D5F276846B - -I=26 -KEY=7364D9AE40CBB0CCA6640B7E542DBA2617A52F4244308596FB0E2E2E186A2096 -PT=1FA1F1AE7BF2A8C66A6ED6D5F276846B -CT=6D5BD8391C73507D57B902AB3D58D228 - -I=27 -KEY=A2D8BF7602FCD22755ADA9979B2DD33B7AFEF77B5843D5EBACB72C852532F2BE -PT=6D5BD8391C73507D57B902AB3D58D228 -CT=15ACD05539318363F275C857FBC5D86C - -I=28 -KEY=3AD56A33CE89D8D3510C4152DEE734126F52272E617256885EC2E4D2DEF72AD2 -PT=15ACD05539318363F275C857FBC5D86C -CT=B54F8D944301A899A2A88440FE8AB631 - -I=29 -KEY=13ED08137C66C2000D3FE9E167387864DA1DAABA2273FE11FC6A6092207D9CE3 -PT=B54F8D944301A899A2A88440FE8AB631 -CT=23B4BF936BF383325F0DAF0548E32851 - -I=30 -KEY=3C2C53CCDB4721F44B6C057BF758361AF9A9152949807D23A367CF97689EB4B2 -PT=23B4BF936BF383325F0DAF0548E32851 -CT=8B4984C6F39C7FD543B4A8629EAC6740 - -I=31 -KEY=95E744B66044529E2DC2B06BF84FF3D672E091EFBA1C02F6E0D367F5F632D3F2 -PT=8B4984C6F39C7FD543B4A8629EAC6740 -CT=108834058381578E8AA7988E03942230 - -I=32 -KEY=E7715B09238876A93F9858D9548CBEA56268A5EA399D55786A74FF7BF5A6F1C2 -PT=108834058381578E8AA7988E03942230 -CT=EE3974A2ECEA5A1E6FC09535323BFF29 - -I=33 -KEY=08F25145082684F576933E4DF5C63DFE8C51D148D5770F6605B46A4EC79D0EEB -PT=EE3974A2ECEA5A1E6FC09535323BFF29 -CT=1AC80F42E3529BCA587D4EA828BD3631 - -I=34 -KEY=93D63C9069B415595934FA66C76A9CD09699DE0A362594AC5DC924E6EF2038DA -PT=1AC80F42E3529BCA587D4EA828BD3631 -CT=E196DF1E8A0DE844EBD3FD84B307EEB6 - -I=35 -KEY=0F5E4A3907A7BC56AAC2CB6F6871674C770F0114BC287CE8B61AD9625C27D66C -PT=E196DF1E8A0DE844EBD3FD84B307EEB6 -CT=917AC29C88967EE5C792E72B046A4399 - -I=36 -KEY=B935C42A3A93D1E45E94CBE1E232A135E675C38834BE020D71883E49584D95F5 -PT=917AC29C88967EE5C792E72B046A4399 -CT=9CE3D545895005F3EC432699F17FFDA2 - -I=37 -KEY=CC3C0DCF9E6E91BE48B7F7AE251D1CB37A9616CDBDEE07FE9DCB18D0A9326857 -PT=9CE3D545895005F3EC432699F17FFDA2 -CT=089F0D41397E27B04D3268834ADF932C - -I=38 -KEY=29AB63D0AB0E237BA75D250BC67E362472091B8C8490204ED0F97053E3EDFB7B -PT=089F0D41397E27B04D3268834ADF932C -CT=9C364B0CC209389C00824505226B8989 - -I=39 -KEY=7FB99ABACCC92D9C8B17CC0066F02F39EE3F5080469918D2D07B3556C18672F2 -PT=9C364B0CC209389C00824505226B8989 -CT=767FB14493BE17A29839FBF115B9B38B - -I=40 -KEY=DB08EEBD184AEEB002302A3C41E5595B9840E1C4D5270F704842CEA7D43FC179 -PT=767FB14493BE17A29839FBF115B9B38B -CT=CBEC5B7FB05D673C19EBF0F4B647CDB5 - -I=41 -KEY=F7C517C27F319857F1D9DA5D29B6B76353ACBABB657A684C51A93E5362780CCC -PT=CBEC5B7FB05D673C19EBF0F4B647CDB5 -CT=9721CB9555EF079ADD547D8DE09CC0C7 - -I=42 -KEY=47D5164E15743853C8B0E55ED3A965D6C48D712E30956FD68CFD43DE82E4CC0B -PT=9721CB9555EF079ADD547D8DE09CC0C7 -CT=5B16109122E874A08A2A48D5B5753256 - -I=43 -KEY=152E7EF1B0FAD417DA84B4FA0AB560DB9F9B61BF127D1B7606D70B0B3791FE5D -PT=5B16109122E874A08A2A48D5B5753256 -CT=198A9B7C41C225334176614A16F1D7CB - -I=44 -KEY=81BB271A9F0CE56E452C9FBE4CF09FF88611FAC353BF3E4547A16A4121602996 -PT=198A9B7C41C225334176614A16F1D7CB -CT=56E255DB999AFA713020C4E987F4433B - -I=45 -KEY=A654ABA71B351BCBFD1CB03B5F88CE1AD0F3AF18CA25C4347781AEA8A6946AAD -PT=56E255DB999AFA713020C4E987F4433B -CT=7BF8470233D197839D4FC1B365E79C8D - -I=46 -KEY=C700B39660C3C72E15E278B2D22DD528AB0BE81AF9F453B7EACE6F1BC373F620 -PT=7BF8470233D197839D4FC1B365E79C8D -CT=D7CDF94CBBE5E7EF7E47E4CE9BD5E073 - -I=47 -KEY=C49B1589810F1915998C8C79CA2382D87CC611564211B45894898BD558A61653 -PT=D7CDF94CBBE5E7EF7E47E4CE9BD5E073 -CT=A5617B71AF28E732A0B69BFA3B90F291 - -I=48 -KEY=D37A9390FD2C8D4D01704352BAFC2EE2D9A76A27ED39536A343F102F6336E4C2 -PT=A5617B71AF28E732A0B69BFA3B90F291 -CT=156D08F6A2AC3F7202DBEE15D53C8BCD - -I=49 -KEY=E4E2958608635DF83B8E39FD503356D5CCCA62D14F956C1836E4FE3AB60A6F0F -PT=156D08F6A2AC3F7202DBEE15D53C8BCD -CT=1790CB4B9B4E01F4CA3AAB588A3B7A51 - -I=50 -KEY=B0F77AF53FB1FAF66A421093111DC925DB5AA99AD4DB6DECFCDE55623C31155E -PT=1790CB4B9B4E01F4CA3AAB588A3B7A51 -CT=5E2DC515FE9BAE8F16188DC052C63A80 - -I=51 -KEY=487CA8ECBA3E2CAF61A16285005F01F685776C8F2A40C363EAC6D8A26EF72FDE -PT=5E2DC515FE9BAE8F16188DC052C63A80 -CT=A625E46D2DA293F536D25C9207090AA5 - -I=52 -KEY=410909F6119DDA628537B825D24E8DF9235288E207E25096DC14843069FE257B -PT=A625E46D2DA293F536D25C9207090AA5 -CT=FEFCF38ABD12EAAD37F3AE73BC4B4A8C - -I=53 -KEY=F1027D98B61D2F383BCF60A83D317D03DDAE7B68BAF0BA3BEBE72A43D5B56FF7 -PT=FEFCF38ABD12EAAD37F3AE73BC4B4A8C -CT=76D8221C2AAD44D226C769875A93CDA8 - -I=54 -KEY=DDA104019F122286887545C85F6B09B1AB765974905DFEE9CD2043C48F26A25F -PT=76D8221C2AAD44D226C769875A93CDA8 -CT=DE7FBEB010089D7EE0A1BD18F3461AEE - -I=55 -KEY=46CE686778BA955831B63F2ACFE397747509E7C4805563972D81FEDC7C60B8B1 -PT=DE7FBEB010089D7EE0A1BD18F3461AEE -CT=A8B0824BD1FC52D92AFA0B4B23ABDEBD - -I=56 -KEY=EF1408D365E549B808DADADE3D4CBCDADDB9658F51A9314E077BF5975FCB660C -PT=A8B0824BD1FC52D92AFA0B4B23ABDEBD -CT=93AC85EE8DE4091894F0E1800A0DF443 - -I=57 -KEY=8E8FC86B7F82A57799FE32DD1C748C8D4E15E061DC4D3856938B141755C6924F -PT=93AC85EE8DE4091894F0E1800A0DF443 -CT=0FAE963D9B74341316D7EA8862D0766F - -I=58 -KEY=D3900458ABB1ACCE0707A49565D27C4C41BB765C47390C45855CFE9F3716E420 -PT=0FAE963D9B74341316D7EA8862D0766F -CT=37930DFBC771510D0BBDCBFAB2A5852F - -I=59 -KEY=C55EE2F5633DE3E7EF3710C6C143AA7076287BA780485D488EE1356585B3610F -PT=37930DFBC771510D0BBDCBFAB2A5852F -CT=9C3B82D06CB9378F6CBBF6325B456A8B - -I=60 -KEY=AA16073435B24614EB1E9AE81FD921F0EA13F977ECF16AC7E25AC357DEF60B84 -PT=9C3B82D06CB9378F6CBBF6325B456A8B -CT=2DB135F2599323714B4D0E66562FAF48 - -I=61 -KEY=033F102BFB13F9F84A4E9FC0C6F52AC8C7A2CC85B56249B6A917CD3188D9A4CC -PT=2DB135F2599323714B4D0E66562FAF48 -CT=130D64DC60EE70F07F6A68F26A9B5E19 - -I=62 -KEY=60D36FD89196DB13031E829B54615707D4AFA859D58C3946D67DA5C3E242FAD5 -PT=130D64DC60EE70F07F6A68F26A9B5E19 -CT=E4E5C4A1E2A0DC99EEC583E311824371 - -I=63 -KEY=532BC273D1843EB5CC1DE01D28684454304A6CF8372CE5DF38B82620F3C0B9A4 -PT=E4E5C4A1E2A0DC99EEC583E311824371 -CT=72CCE240749A6BFD0A93CDCBE2589B41 - -I=64 -KEY=DAE91111E43D9DF4A0F44C27A6B1AB0842868EB843B68E22322BEBEB119822E5 -PT=72CCE240749A6BFD0A93CDCBE2589B41 -CT=300F85629B48F47444D2AA51EBAAD16C - -I=65 -KEY=5C7C95B43BEA70F20A5C490F9A9F716372890BDAD8FE7A5676F941BAFA32F389 -PT=300F85629B48F47444D2AA51EBAAD16C -CT=89278608A583E1243704B39AB9C0F30C - -I=66 -KEY=5B64FDB468399A031D5745325331C2E8FBAE8DD27D7D9B7241FDF22043F20085 -PT=89278608A583E1243704B39AB9C0F30C -CT=71B74D5FAA4558A59F3BC91AA564579A - -I=67 -KEY=0166230CCF036B4B22C63D36F71C3CF58A19C08DD738C3D7DEC63B3AE696571F -PT=71B74D5FAA4558A59F3BC91AA564579A -CT=7B433C70951E4BD140FF7A0CBF367429 - -I=68 -KEY=D7A12389D7DD5DE963841B344315ADF9F15AFCFD422688069E39413659A02336 -PT=7B433C70951E4BD140FF7A0CBF367429 -CT=B0BE67EBCD672549AF03D323AF026FFF - -I=69 -KEY=A3EC2E92C58FE150F708C6FAEB1F459E41E49B168F41AD4F313A9215F6A24CC9 -PT=B0BE67EBCD672549AF03D323AF026FFF -CT=99A829A7C5C7CD6A44C7EABA9A5421C7 - -I=70 -KEY=CC3F7485BF8460CB1EA0AA3C20553644D84CB2B14A86602575FD78AF6CF66D0E -PT=99A829A7C5C7CD6A44C7EABA9A5421C7 -CT=76E1A70AF79F89CFE68EAF15DC0E9BC5 - -I=71 -KEY=17DC64F06B3A2941A21AE58E2FFAB363AEAD15BBBD19E9EA9373D7BAB0F8F6CB -PT=76E1A70AF79F89CFE68EAF15DC0E9BC5 -CT=DB0805B5DCC1CA2CA7489C8E1237E7A2 - -I=72 -KEY=DC7128E894C9DA167D0ACED5888F846275A5100E61D823C6343B4B34A2CF1169 -PT=DB0805B5DCC1CA2CA7489C8E1237E7A2 -CT=935D409B87A85A2CFCC09DE3D2A9A294 - -I=73 -KEY=8073895C9316D299F4F32C602F2F2616E6F85095E67079EAC8FBD6D77066B3FD -PT=935D409B87A85A2CFCC09DE3D2A9A294 -CT=F22B73EFF24249CBCB31BDC7C126B735 - -I=74 -KEY=99E16793433652800ABAD7000638560914D3237A1432302103CA6B10B14004C8 -PT=F22B73EFF24249CBCB31BDC7C126B735 -CT=A16A380AE9B3F2B0AE39BB0E24BF7C0A - -I=75 -KEY=8F77C5E97DA567CC447B52F45175BC74B5B91B70FD81C291ADF3D01E95FF78C2 -PT=A16A380AE9B3F2B0AE39BB0E24BF7C0A -CT=9CF088DE60AE87687481C9F217E86A7C - -I=76 -KEY=DA1B3C2C424D2BC6A1C7A3D18D41C3F5294993AE9D2F45F9D97219EC821712BE -PT=9CF088DE60AE87687481C9F217E86A7C -CT=1C8B68951E65E32E77F1A31571351C1B - -I=77 -KEY=3D64F3D4BF8F585917273805AA43DCD735C2FB3B834AA6D7AE83BAF9F3220EA5 -PT=1C8B68951E65E32E77F1A31571351C1B -CT=4AD3F3B0C15D810F0EA0FF62C6B2D0FE - -I=78 -KEY=51D61FB1B31EB55C7AA2D918E7BE32A97F11088B421727D8A023459B3590DE5B -PT=4AD3F3B0C15D810F0EA0FF62C6B2D0FE -CT=0DFCF7CA661572E050C522AE554A4BF8 - -I=79 -KEY=B93510F7689FB9856194CF629EF63AAA72EDFF4124025538F0E6673560DA95A3 -PT=0DFCF7CA661572E050C522AE554A4BF8 -CT=7C185A5A68675DAC7A16C8DDE4B8CF8B - -I=80 -KEY=8496679D7598A1B91D2F221CF958F90B0EF5A51B4C6508948AF0AFE884625A28 -PT=7C185A5A68675DAC7A16C8DDE4B8CF8B -CT=88FDDDA7BC2B09E48598A94474C64DC7 - -I=81 -KEY=F27BCC0F919566675B129C526A4DC796860878BCF04E01700F6806ACF0A417EF -PT=88FDDDA7BC2B09E48598A94474C64DC7 -CT=35C5C98C9C774D0BE9EFFB55C90B2F9C - -I=82 -KEY=05F12B58DBF5602D31CFD0EB10313502B3CDB1306C394C7BE687FDF939AF3873 -PT=35C5C98C9C774D0BE9EFFB55C90B2F9C -CT=C3374B5C81646AC881F0F924C22A723B - -I=83 -KEY=FD05BE617555BC8184C2F46911C46B9E70FAFA6CED5D26B3677704DDFB854A48 -PT=C3374B5C81646AC881F0F924C22A723B -CT=0CE756792AF27525A088700DB66D4399 - -I=84 -KEY=3831345DFA5ADDF7CE8B5F76B5E1EBDE7C1DAC15C7AF5396C7FF74D04DE809D1 -PT=0CE756792AF27525A088700DB66D4399 -CT=401CD076E03C108A7FD79651407923E9 - -I=85 -KEY=B101FDD95C23BE560262D355E09FC39B3C017C632793431CB828E2810D912A38 -PT=401CD076E03C108A7FD79651407923E9 -CT=88614E46C416E5164F2A63CDA9DD7B89 - -I=86 -KEY=0B53859962A79D216E395830E36F8D45B4603225E385A60AF702814CA44C51B1 -PT=88614E46C416E5164F2A63CDA9DD7B89 -CT=7411856C8F14A2E5F6C5F1830302A66F - -I=87 -KEY=FE07E3B8961C2A1B3E34A50F8CFA1A45C071B7496C9104EF01C770CFA74EF7DE -PT=7411856C8F14A2E5F6C5F1830302A66F -CT=B0A815E93EBAC7A68F8BB420C8A5692D - -I=88 -KEY=9F2E0D3DB033B1929009D6C4C460B24F70D9A2A0522BC3498E4CC4EF6FEB9EF3 -PT=B0A815E93EBAC7A68F8BB420C8A5692D -CT=AA6D27BB26275F5CB3EC3D6A8AFB80BF - -I=89 -KEY=5E903EF160161E1CA79A26D28FE32175DAB4851B740C9C153DA0F985E5101E4C -PT=AA6D27BB26275F5CB3EC3D6A8AFB80BF -CT=EAF7941A7E5D3907B6F52C1106EED2CE - -I=90 -KEY=60284EF35A9246CC32002028E4969309304311010A51A5128B55D594E3FECC82 -PT=EAF7941A7E5D3907B6F52C1106EED2CE -CT=1178DD3DBDB1810E360E6FE09AA0D75C - -I=91 -KEY=300CB519F3203AD4589749651BD99AC7213BCC3CB7E0241CBD5BBA74795E1BDE -PT=1178DD3DBDB1810E360E6FE09AA0D75C -CT=584B48263DE541E93B29C6E570D4A6F4 - -I=92 -KEY=2F79EA55D0E3EAF1D0DBD364A7D64E2A7970841A8A0565F586727C91098ABD2A -PT=584B48263DE541E93B29C6E570D4A6F4 -CT=7B2EC27F2F1BC24EAD4FC0AA0519685C - -I=93 -KEY=8B46F59BF2C4B226523C203E8FD3936D025E4665A51EA7BB2B3DBC3B0C93D576 -PT=7B2EC27F2F1BC24EAD4FC0AA0519685C -CT=13404D003576493EBB36C07C6D16A1B6 - -I=94 -KEY=C7E75C30B0CE770A0075E3EBEB244811111E0B659068EE85900B7C47618574C0 -PT=13404D003576493EBB36C07C6D16A1B6 -CT=A083421A139DF68C8F863B337F3408BE - -I=95 -KEY=A957F876769BE9005DCEE4B7514FAC62B19D497F83F518091F8D47741EB17C7E -PT=A083421A139DF68C8F863B337F3408BE -CT=BF86650C9ECBD6C14B420FBE6B6E488B - -I=96 -KEY=FD4DE7532652D17C5ACCEA759C52A95C0E1B2C731D3ECEC854CF48CA75DF34F5 -PT=BF86650C9ECBD6C14B420FBE6B6E488B -CT=75CEFAE872574AB6F26B0CAF6F08D858 - -I=97 -KEY=54DBCDC0A57363DE6B3A032607E968C27BD5D69B6F69847EA6A444651AD7ECAD -PT=75CEFAE872574AB6F26B0CAF6F08D858 -CT=8A3F9C96598883E9D3760C8A8FE406C6 - -I=98 -KEY=AC10312E365401908F2C8AE371CB8C90F1EA4A0D36E1079775D248EF9533EA6B -PT=8A3F9C96598883E9D3760C8A8FE406C6 -CT=B8B372C0CC6D164F340DF26B8F832DF8 - -I=99 -KEY=64265CF02043C966C01DF5255F8D2867495938CDFA8C11D841DFBA841AB0C793 -PT=B8B372C0CC6D164F340DF26B8F832DF8 -CT=A7F6267A6F0CEB0EF7D07959EE065760 - -I=100 -KEY=CF6B88FB273B247B8D64B5A323EF5760EEAF1EB79580FAD6B60FC3DDF4B690F3 -PT=A7F6267A6F0CEB0EF7D07959EE065760 -CT=AD96ADAC9B786AB78B1B46D9E026C935 - -I=101 -KEY=4C8EEA35A90CB46AF32235997D2ADBBE4339B31B0EF890613D148504149059C6 -PT=AD96ADAC9B786AB78B1B46D9E026C935 -CT=FC7BAC9A5F64571AABF4B0A451C8D88D - -I=102 -KEY=0DD6D30191FABEC371CF0BA223BECF19BF421F81519CC77B96E035A04558814B -PT=FC7BAC9A5F64571AABF4B0A451C8D88D -CT=2B56E363834F27090FAC8061507A4787 - -I=103 -KEY=2E69324E634312611C33F695A137AFE49414FCE2D2D3E072994CB5C11522C6CC -PT=2B56E363834F27090FAC8061507A4787 -CT=FD37886E30CEFA28F8E8A5662A9EC5DC - -I=104 -KEY=8AFAC0C1507472CCB28B37CA88B7139D6923748CE21D1A5A61A410A73FBC0310 -PT=FD37886E30CEFA28F8E8A5662A9EC5DC -CT=F7F36142C000D5162F789C392971FCE7 - -I=105 -KEY=7DC5DA2A80219692F9F26C5934826DF29ED015CE221DCF4C4EDC8C9E16CDFFF7 -PT=F7F36142C000D5162F789C392971FCE7 -CT=D560607A0F0BE8320F2CEE56B155163F - -I=106 -KEY=3CC9AE3E3EB90B511C6D8CD74419D6944BB075B42D16277E41F062C8A798E9C8 -PT=D560607A0F0BE8320F2CEE56B155163F -CT=708133FEB47A226A616900D46FA85037 - -I=107 -KEY=8B84B7F96F9B3184D5B6402ECAE344CB3B31464A996C05142099621CC830B9FF -PT=708133FEB47A226A616900D46FA85037 -CT=1B2ED9348FC7A4E4AD8BFCE2A148D1AD - -I=108 -KEY=655CB7606D17582441247D23E222ECCF201F9F7E16ABA1F08D129EFE69786852 -PT=1B2ED9348FC7A4E4AD8BFCE2A148D1AD -CT=B2B726C8605A6F5CBA97F04E85A1F985 - -I=109 -KEY=E0BA77DAAD3E3502AB9A6CEBEC654D0492A8B9B676F1CEAC37856EB0ECD991D7 -PT=B2B726C8605A6F5CBA97F04E85A1F985 -CT=CD7F53BB4AEB364A1D8630E0B5C4A6A2 - -I=110 -KEY=1470D5E493B0E8212F02D4419C46A8CD5FD7EA0D3C1AF8E62A035E50591D3775 -PT=CD7F53BB4AEB364A1D8630E0B5C4A6A2 -CT=57271A960FE2170BA3F1987E694BBD16 - -I=111 -KEY=415408E88421573F93FDBE25DD4B90C208F0F09B33F8EFED89F2C62E30568A63 -PT=57271A960FE2170BA3F1987E694BBD16 -CT=E9D47C3E926475FFDB783624C3ADB17B - -I=112 -KEY=40B3017DC81EEE4BF652AE8BB8CEED1DE1248CA5A19C9A12528AF00AF3FB3B18 -PT=E9D47C3E926475FFDB783624C3ADB17B -CT=D78F96812BB55723E04BE8818C262485 - -I=113 -KEY=9EABE9B3608ACE61684BAD3F3FED5C9736AB1A248A29CD31B2C1188B7FDD1F9D -PT=D78F96812BB55723E04BE8818C262485 -CT=E2092227E1A3D2E525942090DA0A3F3E - -I=114 -KEY=B095E4F38E060016EBC4C42D3A4EFBD6D4A238036B8A1FD49755381BA5D720A3 -PT=E2092227E1A3D2E525942090DA0A3F3E -CT=95E9EE1F56A65FF85B752FC300F525AE - -I=115 -KEY=9B2841F44291552EA04DE13E4E78011B414BD61C3D2C402CCC2017D8A522050D -PT=95E9EE1F56A65FF85B752FC300F525AE -CT=32D8465F2E11A04F8984FEE8E710CD25 - -I=116 -KEY=67D8B10D0DDB61932E610EB077F0D85F73939043133DE06345A4E9304232C828 -PT=32D8465F2E11A04F8984FEE8E710CD25 -CT=2D9803ECFB95B2591FE56B3CBB4307F2 - -I=117 -KEY=B0C80A38EDE23A549EF08E5DC3CEA2F25E0B93AFE8A8523A5A41820CF971CFDA -PT=2D9803ECFB95B2591FE56B3CBB4307F2 -CT=4B19F9BCAFD471BF9014ADA19891E4E6 - -I=118 -KEY=85C6DF29F9AEBA6087E3746BA5CF6C1515126A13477C2385CA552FAD61E02B3C -PT=4B19F9BCAFD471BF9014ADA19891E4E6 -CT=53159BC4FBD06FD03ABAC028A536C4A0 - -I=119 -KEY=2D42BE0B33D92ECC40DF48CF0AE0CB764607F1D7BCAC4C55F0EFEF85C4D6EF9C -PT=53159BC4FBD06FD03ABAC028A536C4A0 -CT=BCDB1347ACD50D0084D588D4540420E3 - -I=120 -KEY=338A4DC6E729E6FCF71095BB4E6F52FEFADCE29010794155743A675190D2CF7F -PT=BCDB1347ACD50D0084D588D4540420E3 -CT=E12DC82E79554E1202DA471C3221A554 - -I=121 -KEY=47597486437CBCD33FC195C56FF972BB1BF12ABE692C0F4776E0204DA2F36A2B -PT=E12DC82E79554E1202DA471C3221A554 -CT=23A43E9D6F7C5A6C842233CCEC120EB9 - -I=122 -KEY=CEE8CF713EBF0C609E3429E5183014BB385514230650552BF2C213814EE16492 -PT=23A43E9D6F7C5A6C842233CCEC120EB9 -CT=9F3F4349BF98D3CC00DB167F0FFDC7AB - -I=123 -KEY=C9B3A1CAFA0D4F0DA942C17FFB75E333A76A576AB9C886E7F21905FE411CA339 -PT=9F3F4349BF98D3CC00DB167F0FFDC7AB -CT=C4D8B8EBEF311C11FE2404220EA65E99 - -I=124 -KEY=8360E6F464B61C4BAE31D3A72422128463B2EF8156F99AF60C3D01DC4FBAFDA0 -PT=C4D8B8EBEF311C11FE2404220EA65E99 -CT=47E3318C721E6C094763F0A18042911D - -I=125 -KEY=926B00B9767D0CAD5331CD6F0343C4A92451DE0D24E7F6FF4B5EF17DCFF86CBD -PT=47E3318C721E6C094763F0A18042911D -CT=D709FA9A1415B0FAC71B4CF52504791F - -I=126 -KEY=3F4349126EF6A51FD196742CB461D01EF358249730F246058C45BD88EAFC15A2 -PT=D709FA9A1415B0FAC71B4CF52504791F -CT=7937DD067DDB85F200A492E5824DA23C - -I=127 -KEY=4420ADF6906CFBF8421524E88517327C8A6FF9914D29C3F78CE12F6D68B1B79E -PT=7937DD067DDB85F200A492E5824DA23C -CT=B68617F1372847206BA088D7100334A4 - -I=128 -KEY=125BEB5234B89A376ABBB2185F24BDDE3CE9EE607A0184D7E741A7BA78B2833A -PT=B68617F1372847206BA088D7100334A4 -CT=390938BA9F2264484DE63D8003C15369 - -I=129 -KEY=A457831AB172D88111E87C3955D0C0F205E0D6DAE523E09FAAA79A3A7B73D053 -PT=390938BA9F2264484DE63D8003C15369 -CT=A69ED32FD728337A5C25FBC2230DC788 - -I=130 -KEY=CC7ED4183BFAE0FA0F9DD348B8E194F2A37E05F5320BD3E5F68261F8587E17DB -PT=A69ED32FD728337A5C25FBC2230DC788 -CT=EDB9D6099202FE4AE51EEC725478FB47 - -I=131 -KEY=686AB4F5C19296AED306ADEA4FD52D1A4EC7D3FCA0092DAF139C8D8A0C06EC9C -PT=EDB9D6099202FE4AE51EEC725478FB47 -CT=61059EA3BF0C953762CB37E50ED7081F - -I=132 -KEY=8115329FADEBA92AB2827BD7701A01442FC24D5F1F05B8987157BA6F02D1E483 -PT=61059EA3BF0C953762CB37E50ED7081F -CT=A683E36EF7CCDABDBCA683C2D6560D25 - -I=133 -KEY=49254E8904EED2766A6A1A615B63B97C8941AE31E8C96225CDF139ADD487E9A6 -PT=A683E36EF7CCDABDBCA683C2D6560D25 -CT=8EF424771561BFEC0058C7CAA5876EF6 - -I=134 -KEY=259194CE8701581012F5592B61BCA99507B58A46FDA8DDC9CDA9FE6771008750 -PT=8EF424771561BFEC0058C7CAA5876EF6 -CT=79AC024A7BA5FFE143D40D34F2E587A6 - -I=135 -KEY=CA0427FE28C77D0CA25D6851CCFE58C47E19880C860D22288E7DF35383E500F6 -PT=79AC024A7BA5FFE143D40D34F2E587A6 -CT=2258AB9F0E254CE21EB9B7F6EA690671 - -I=136 -KEY=DA9A4B566C9F670DF850F891A5274CC95C41239388286ECA90C444A5698C0687 -PT=2258AB9F0E254CE21EB9B7F6EA690671 -CT=55ACB73E8A45BF964BD040C799724DAD - -I=137 -KEY=9F177A6A6B524C75DB5CC0DBB6AD733209ED94AD026DD15CDB140462F0FE4B2A -PT=55ACB73E8A45BF964BD040C799724DAD -CT=3E904B15F2E5DDC934DABC25259CB3CF - -I=138 -KEY=2AD96F6874C1BA6A82C5EE80A9A2E8E5377DDFB8F0880C95EFCEB847D562F8E5 -PT=3E904B15F2E5DDC934DABC25259CB3CF -CT=3ACFF8D5B701A5BD1355DDA705D269CB - -I=139 -KEY=ADD59DF57CC01DE988C6D81E65B1D00E0DB2276D4789A928FC9B65E0D0B0912E -PT=3ACFF8D5B701A5BD1355DDA705D269CB -CT=3EF4AC14CC954FB4A9A808C7C00A2F1F - -I=140 -KEY=D3EBE43C4E9C96B37133F6AF8910A25F33468B798B1CE69C55336D2710BABE31 -PT=3EF4AC14CC954FB4A9A808C7C00A2F1F -CT=61C50D5C736AEDCF03C06FC310CC19D9 - -I=141 -KEY=FA45F434377F2E217C4A5B7A7526CC1952838625F8760B5356F302E40076A7E8 -PT=61C50D5C736AEDCF03C06FC310CC19D9 -CT=2BF543C6548ED0344262640AD95F95C9 - -I=142 -KEY=71EAD73C81ED5AE731D19B0B2B42F0E87976C5E3ACF8DB67149166EED9293221 -PT=2BF543C6548ED0344262640AD95F95C9 -CT=F8C1DBDD20317FEB1625634A451931B5 - -I=143 -KEY=3FD0019D000111D4300D2CEF39F53C0D81B71E3E8CC9A48C02B405A49C300394 -PT=F8C1DBDD20317FEB1625634A451931B5 -CT=DEDB54735B8B90C8EEC66EAECFB13ED6 - -I=144 -KEY=070976B2D3AA1E737BC24A8A794A21BE5F6C4A4DD7423444EC726B0A53813D42 -PT=DEDB54735B8B90C8EEC66EAECFB13ED6 -CT=75941A1ADA444115961E058E2D6C6396 - -I=145 -KEY=81AC2B7F073D0D06BA8A43D3381D3A3F2AF850570D0675517A6C6E847EED5ED4 -PT=75941A1ADA444115961E058E2D6C6396 -CT=7C66BE2B0354A6549E10489AF7A83424 - -I=146 -KEY=37BDD1946BB9B5616115F015E9162F5B569EEE7C0E52D305E47C261E89456AF0 -PT=7C66BE2B0354A6549E10489AF7A83424 -CT=F589769555BDEFD0B29E6A65313BD2E1 - -I=147 -KEY=CF27BD543BB4EED052B808D1EE350D35A31798E95BEF3CD556E24C7BB87EB811 -PT=F589769555BDEFD0B29E6A65313BD2E1 -CT=9B3215F70FBCC5ED9CC0D6D7E1E56F11 - -I=148 -KEY=43321308251C33234CCD9ED19E5E74AF38258D1E5453F938CA229AAC599BD700 -PT=9B3215F70FBCC5ED9CC0D6D7E1E56F11 -CT=705CCB60E0A6E997578DCC804D49D265 - -I=149 -KEY=F2152160EAD144776BA6BDED0AC49CD24879467EB4F510AF9DAF562C14D20565 -PT=705CCB60E0A6E997578DCC804D49D265 -CT=3DA4CEC68D47E55ECF21A1C5CDAFE4E6 - -I=150 -KEY=593B7EDAE946A5269EF33D088D1B297675DD88B839B2F5F1528EF7E9D97DE183 -PT=3DA4CEC68D47E55ECF21A1C5CDAFE4E6 -CT=32299EDBED49B66271107CA1822F179E - -I=151 -KEY=852E4554AD1459CE81DBA17D18DA96C447F41663D4FB4393239E8B485B52F61D -PT=32299EDBED49B66271107CA1822F179E -CT=45856FD2080FA9BBFA0857BCF7381823 - -I=152 -KEY=1D8F910508F9C08DB4DE4D5C465310F4027179B1DCF4EA28D996DCF4AC6AEE3E -PT=45856FD2080FA9BBFA0857BCF7381823 -CT=6A8C18595AF5D1E46F9F168C31566BAF - -I=153 -KEY=1A42C028C1ABA740D95A47ABD7B4F40D68FD61E886013BCCB609CA789D3C8591 -PT=6A8C18595AF5D1E46F9F168C31566BAF -CT=71A41A6B6BF9FB906B0617DCB76B4BA5 - -I=154 -KEY=3C408CB08BCAF34B2BCE6EF787A96D5219597B83EDF8C05CDD0FDDA42A57CE34 -PT=71A41A6B6BF9FB906B0617DCB76B4BA5 -CT=9105B8FC516E0B19AEDD003979F8C298 - -I=155 -KEY=804516E36B1B5E046B15CBE1D3F26EE9885CC37FBC96CB4573D2DD9D53AF0CAC -PT=9105B8FC516E0B19AEDD003979F8C298 -CT=27ACD01CC0403AD6DB45C7DF3E515EDE - -I=156 -KEY=CD8199690660BD4DBA38CE522D1A12CEAFF013637CD6F193A8971A426DFE5272 -PT=27ACD01CC0403AD6DB45C7DF3E515EDE -CT=86E2A23AC567C5F05F15A318E38360A7 - -I=157 -KEY=0AD8BB3D5B2A538DF0BDD50EB74CC1BA2912B159B9B13463F782B95A8E7D32D5 -PT=86E2A23AC567C5F05F15A318E38360A7 -CT=CB03EDA81BF211B5FE03D4A0879E9EDD - -I=158 -KEY=081040B60AE9E733243F4C39013EEDB5E2115CF1A24325D609816DFA09E3AC08 -PT=CB03EDA81BF211B5FE03D4A0879E9EDD -CT=6F1AD4AD727348DD593459E0D7661813 - -I=159 -KEY=A51E29D20BB0963DF854C898299E114A8D0B885CD0306D0B50B5341ADE85B41B -PT=6F1AD4AD727348DD593459E0D7661813 -CT=236B421E3103D4C17297D3F5C8BA1D17 - -I=160 -KEY=49D4EB9964431F42F0FC6494A47A50CCAE60CA42E133B9CA2222E7EF163FA90C -PT=236B421E3103D4C17297D3F5C8BA1D17 -CT=118AE5A5597E8DB200B26DBE11AC4BC8 - -I=161 -KEY=0F3F7298BE444450A0A07A4B73897720BFEA2FE7B84D347822908A510793E2C4 -PT=118AE5A5597E8DB200B26DBE11AC4BC8 -CT=DF02587F25CC4C59E6AECE98BCAACCB8 - -I=162 -KEY=7E30984A4C0B18D2F791858B83FC960960E877989D817821C43E44C9BB392E7C -PT=DF02587F25CC4C59E6AECE98BCAACCB8 -CT=3DA0F35FDAEF499ADBF602939FC748D4 - -I=163 -KEY=360A7168E056892E5BF0127EA3B58CAF5D4884C7476E31BB1FC8465A24FE66A8 -PT=3DA0F35FDAEF499ADBF602939FC748D4 -CT=FE462F878CEEDDDAA00855B85A81A14B - -I=164 -KEY=A75B3537E0EB98FC0F41C9E1306F6667A30EAB40CB80EC61BFC013E27E7FC7E3 -PT=FE462F878CEEDDDAA00855B85A81A14B -CT=47EA8AC561D7A9F99F64F41A9AD46E5C - -I=165 -KEY=219E71FC6D23A5103DE4DA9C5EDFA0AEE4E42185AA57459820A4E7F8E4ABA9BF -PT=47EA8AC561D7A9F99F64F41A9AD46E5C -CT=650FAE7F29A098D787F60CC3C0D77580 - -I=166 -KEY=038A888C6EA4E9502A15110832AE0DF081EB8FFA83F7DD4FA752EB3B247CDC3F -PT=650FAE7F29A098D787F60CC3C0D77580 -CT=0334BF8CA2835C71F2A283736D54E933 - -I=167 -KEY=714967419F9129B9649A13A9DA3291A582DF30762174813E55F068484928350C -PT=0334BF8CA2835C71F2A283736D54E933 -CT=1B3A09B325F3D833A3C83D941832B204 - -I=168 -KEY=BCDB12EAF8D3C95F821C0DD324FD36BB99E539C50487590DF63855DC511A8708 -PT=1B3A09B325F3D833A3C83D941832B204 -CT=CF980ED2619858290881314B7F0B9516 - -I=169 -KEY=B8FA32AE829E8AF3EF543A407E2D61BA567D3717651F0124FEB964972E11121E -PT=CF980ED2619858290881314B7F0B9516 -CT=98FF5ADA0739122DBBD241847D4A318D - -I=170 -KEY=D62592634F0ABD21AC98887A88845E2ECE826DCD62261309456B2513535B2393 -PT=98FF5ADA0739122DBBD241847D4A318D -CT=1824306B9F54BE4CE3F94F037B4B8569 - -I=171 -KEY=77005AE2FA1AD6D77D36566B9E988345D6A65DA6FD72AD45A6926A102810A6FA -PT=1824306B9F54BE4CE3F94F037B4B8569 -CT=25BA57B9035625DD268492282535960C - -I=172 -KEY=BE766696DC4458442056D89C96CAFDF0F31C0A1FFE2488988016F8380D2530F6 -PT=25BA57B9035625DD268492282535960C -CT=26AEAD4ED08CA78CE2A3358F36DA0E3F - -I=173 -KEY=1E1D3EBC714EE191EDB2A02B64EF2C23D5B2A7512EA82F1462B5CDB73BFF3EC9 -PT=26AEAD4ED08CA78CE2A3358F36DA0E3F -CT=10AB48E0CB1D72D82794E35DBDEF88F6 - -I=174 -KEY=D3EAD2DA40B4C94B506A0ED75210023BC519EFB1E5B55DCC45212EEA8610B63F -PT=10AB48E0CB1D72D82794E35DBDEF88F6 -CT=878BCAC367294B227533E1451F654960 - -I=175 -KEY=87D0B5D4A1314054EC37B67B4245BA8C42922572829C16EE3012CFAF9975FF5F -PT=878BCAC367294B227533E1451F654960 -CT=98CC3311EC8E8B75944503734DEAC00D - -I=176 -KEY=EF3FA3235BB42B1326DE67088C68E2BDDA5E16636E129D9BA457CCDCD49F3F52 -PT=98CC3311EC8E8B75944503734DEAC00D -CT=DAF5FB711E259B498918871933A2E1FD - -I=177 -KEY=2EBBBB1B070658DD43299478725AA88F00ABED12703706D22D4F4BC5E73DDEAF -PT=DAF5FB711E259B498918871933A2E1FD -CT=AACC545DEE8FF1F5C7A91A2EE3D25C1B - -I=178 -KEY=E15D1FC214F23FF93886D219B4DFCD45AA67B94F9EB8F727EAE651EB04EF82B4 -PT=AACC545DEE8FF1F5C7A91A2EE3D25C1B -CT=B844B67FBFD12E2712CCB66EBB4F7691 - -I=179 -KEY=CC3335B792121DE55FA04A4D6FEE57B012230F302169D900F82AE785BFA0F425 -PT=B844B67FBFD12E2712CCB66EBB4F7691 -CT=3E00C548BAEE6150FAA5B67986331FD5 - -I=180 -KEY=18DB585F810069C584251CA1E04A58382C23CA789B87B850028F51FC3993EBF0 -PT=3E00C548BAEE6150FAA5B67986331FD5 -CT=EB23DEEA8449E8FA0D828C12B98437AE - -I=181 -KEY=DFE08CA44B0BC4F51C43BE3631E20735C70014921FCE50AA0F0DDDEE8017DC5E -PT=EB23DEEA8449E8FA0D828C12B98437AE -CT=35BBE35CFC1D8FC40BC52F20D3FB35D5 - -I=182 -KEY=0F7DCC456D50A31AC9351794BFE6DD57F2BBF7CEE3D3DF6E04C8F2CE53ECE98B -PT=35BBE35CFC1D8FC40BC52F20D3FB35D5 -CT=DFFE7AEEAAF4762C7EB52453B1F61AD8 - -I=183 -KEY=D34FDEB3F04FB4563BC0FD204E8D459F2D458D204927A9427A7DD69DE21AF353 -PT=DFFE7AEEAAF4762C7EB52453B1F61AD8 -CT=C648DAF9EBFB4BC6166B15BF067E107F - -I=184 -KEY=5E90B747C9976A3F5050B0C51F116A81EB0D57D9A2DCE2846C16C322E464E32C -PT=C648DAF9EBFB4BC6166B15BF067E107F -CT=057258D07CAEE57807C396FAE651855A - -I=185 -KEY=52D3686BC0CD56B9DFF3A69F5073F30AEE7F0F09DE7207FC6BD555D802356676 -PT=057258D07CAEE57807C396FAE651855A -CT=B1109BE49E6E0F4C4190D8E0D717E8D0 - -I=186 -KEY=39C89286B658E006FBF97BAB1C4874025F6F94ED401C08B02A458D38D5228EA6 -PT=B1109BE49E6E0F4C4190D8E0D717E8D0 -CT=4DDE60FEEE40402058C988092603AB53 - -I=187 -KEY=562C9A004CBF05A4CA97994D48C0874C12B1F413AE5C4890728C0531F32125F5 -PT=4DDE60FEEE40402058C988092603AB53 -CT=3B18CBF83791E93D661EB269CFEAB1BE - -I=188 -KEY=F95206C4D3862E01A4DFE3676A2F297C29A93FEB99CDA1AD1492B7583CCB944B -PT=3B18CBF83791E93D661EB269CFEAB1BE -CT=0A3204DEE28B65E849136960949E4E5E - -I=189 -KEY=FEFDBE4294E46E22074E77B6BB7F964B239B3B357B46C4455D81DE38A855DA15 -PT=0A3204DEE28B65E849136960949E4E5E -CT=6C47ECB8B1478F0BBEDEF3A05A439776 - -I=190 -KEY=05858C957F861410187DD8CC2EE48E364FDCD78DCA014B4EE35F2D98F2164D63 -PT=6C47ECB8B1478F0BBEDEF3A05A439776 -CT=881188C2834B0496CB97F15F7A5C332A - -I=191 -KEY=A51CABC6D50BF9043E95CE2BC511D26DC7CD5F4F494A4FD828C8DCC7884A7E49 -PT=881188C2834B0496CB97F15F7A5C332A -CT=1FAE86251E2F615E3BFCAC545013CD12 - -I=192 -KEY=4EE1F6812CC35A16AA63F1CB39669ED7D863D96A57652E8613347093D859B35B -PT=1FAE86251E2F615E3BFCAC545013CD12 -CT=6017C6764080CB6D2BAC24C0F1BFF8F5 - -I=193 -KEY=F4F31D57DD72E6BF842D3834372AA60CB8741F1C17E5E5EB3898545329E64BAE -PT=6017C6764080CB6D2BAC24C0F1BFF8F5 -CT=10C8548253FB2BCD5D6F87CB28FAE7E7 - -I=194 -KEY=9DBB357DC99A95C240E750F1970C5C65A8BC4B9E441ECE2665F7D398011CAC49 -PT=10C8548253FB2BCD5D6F87CB28FAE7E7 -CT=20E253845A3DD51FFC16141FDAA20749 - -I=195 -KEY=A814CD8766E0BFFBD8530589D6202BE0885E181A1E231B3999E1C787DBBEAB00 -PT=20E253845A3DD51FFC16141FDAA20749 -CT=9383323218D891F9DCE7578FCD6A54A5 - -I=196 -KEY=C516C26E23E38C2B87346F759D8AEF881BDD2A2806FB8AC04506900816D4FFA5 -PT=9383323218D891F9DCE7578FCD6A54A5 -CT=9CFF8002D46EAFAAC7B035A788A37CF5 - -I=197 -KEY=9301F8120939D0E70C97F614F61F18648722AA2AD295256A82B6A5AF9E778350 -PT=9CFF8002D46EAFAAC7B035A788A37CF5 -CT=90C9F34994D5DA86406C7E82EDDD1009 - -I=198 -KEY=82B163831972D2CEF8F1780AA6B0707A17EB59634640FFECC2DADB2D73AA9359 -PT=90C9F34994D5DA86406C7E82EDDD1009 -CT=C8B5021EE84635EB7E7D0F5DBE967FD0 - -I=199 -KEY=F99FF8714EE5D822E0E25C499D7C96ACDF5E5B7DAE06CA07BCA7D470CD3CEC89 -PT=C8B5021EE84635EB7E7D0F5DBE967FD0 -CT=15CCB3C950764E24CA714707034DF9A7 - -I=200 -KEY=3529E6B83266BD558B7F33FC00AE4904CA92E8B4FE70842376D69377CE71152E -PT=15CCB3C950764E24CA714707034DF9A7 -CT=5FDA0EF6A2172D5DAA8E842F061A2E44 - -I=201 -KEY=2D77F95D8B556740CD9E2CC546CA45C99548E6425C67A97EDC581758C86B3B6A -PT=5FDA0EF6A2172D5DAA8E842F061A2E44 -CT=808781D0D10B3A02333E0A53E159287F - -I=202 -KEY=79298FD5F3C4B6378403CFAD05C3C96E15CF67928D6C937CEF661D0B29321315 -PT=808781D0D10B3A02333E0A53E159287F -CT=CC760400725FCFD37E757D99C6361B93 - -I=203 -KEY=69535F335F6AEBF452407F3F1C203410D9B96392FF335CAF91136092EF040886 -PT=CC760400725FCFD37E757D99C6361B93 -CT=247D3A6BB4C883C142C4000B085C3B79 - -I=204 -KEY=1A4F8FD7BD8DBCFB3677C708CDDDC7C4FDC459F94BFBDF6ED3D76099E75833FF -PT=247D3A6BB4C883C142C4000B085C3B79 -CT=47E4C802C61E6A1706BAE95AF75CA70D - -I=205 -KEY=A573989455A11CAD1E8642CD774806B1BA2091FB8DE5B579D56D89C3100494F2 -PT=47E4C802C61E6A1706BAE95AF75CA70D -CT=4297101350A5CE6C435FAD2725C22E46 - -I=206 -KEY=8D52414DD5600AA0CACD5AD399FD1B37F8B781E8DD407B15963224E435C6BAB4 -PT=4297101350A5CE6C435FAD2725C22E46 -CT=BEC56BF1F3B6BE60C0F4CB7AE77BF0F5 - -I=207 -KEY=49D4DF2FB3B561817F2BA6599B66C9244672EA192EF6C57556C6EF9ED2BD4A41 -PT=BEC56BF1F3B6BE60C0F4CB7AE77BF0F5 -CT=5B590F24D329BB6ED981938A4CDB9907 - -I=208 -KEY=68BD5721E2A51A184CDBAC3A035670701D2BE53DFDDF7E1B8F477C149E66D346 -PT=5B590F24D329BB6ED981938A4CDB9907 -CT=A8A15DBB79BB9B1131EF39C1E3FCFC9C - -I=209 -KEY=2CC71F1B9BE892100E8A340E61D0A128B58AB8868464E50ABEA845D57D9A2FDA -PT=A8A15DBB79BB9B1131EF39C1E3FCFC9C -CT=E8CBAB9E98D2866E779512AAC2FA2EA0 - -I=210 -KEY=EEF45CE1BB444A6BA5A029363FB9D4DB5D4113181CB66364C93D577FBF60017A -PT=E8CBAB9E98D2866E779512AAC2FA2EA0 -CT=7E4896F0A48A25FFE950B74B96F5F40E - -I=211 -KEY=151FE809785C11F8F19F31EA0246B416230985E8B83C469B206DE0342995F574 -PT=7E4896F0A48A25FFE950B74B96F5F40E -CT=E1C642B54B89822E73A695C851BC8EBE - -I=212 -KEY=14FE470CD366C580F124EA924B918BF5C2CFC75DF3B5C4B553CB75FC78297BCA -PT=E1C642B54B89822E73A695C851BC8EBE -CT=5FA2C6A2303ED7219984F30B78BE6B96 - -I=213 -KEY=92E61F4C495462354EF612492557D6AB9D6D01FFC38B1394CA4F86F70097105C -PT=5FA2C6A2303ED7219984F30B78BE6B96 -CT=3791959FBF178682A711623C2F91616C - -I=214 -KEY=6C0B6F23AC7526204C451A8ADE54D404AAFC94607C9C95166D5EE4CB2F067130 -PT=3791959FBF178682A711623C2F91616C -CT=E14FCACD5FD26FC2710776EE82317ABC - -I=215 -KEY=0DAE926E4172586817730DB9FDF2CE0B4BB35EAD234EFAD41C599225AD370B8C -PT=E14FCACD5FD26FC2710776EE82317ABC -CT=E576499EAF5365E7FE3B4961D9C74419 - -I=216 -KEY=DCD553F2977BD114B61F724ABC6AFE8EAEC517338C1D9F33E262DB4474F04F95 -PT=E576499EAF5365E7FE3B4961D9C74419 -CT=38567558119E72929F2932E6C289095E - -I=217 -KEY=6333DA8D5B655B5B5AABBCAF0B010BE89693626B9D83EDA17D4BE9A2B67946CB -PT=38567558119E72929F2932E6C289095E -CT=D20AD648F558E5507CC5C905E92CC268 - -I=218 -KEY=F9010180B464FBB8AD7C9D5E41B1E09A4499B42368DB08F1018E20A75F5584A3 -PT=D20AD648F558E5507CC5C905E92CC268 -CT=00C719F3757DDD2D2E64C3F2666FB2CB - -I=219 -KEY=8CE68ED02B4FFD9720B3D16FAE92D164445EADD01DA6D5DC2FEAE355393A3668 -PT=00C719F3757DDD2D2E64C3F2666FB2CB -CT=AEEAB9F50456CA3233A964219D2E7816 - -I=220 -KEY=57E26BA4DBD3549051B0D9436EB38D4FEAB4142519F01FEE1C438774A4144E7E -PT=AEEAB9F50456CA3233A964219D2E7816 -CT=3F02C97E127FD697AFD58BC66941F654 - -I=221 -KEY=4D0BC4A8796407C939797EF19D0CE7E3D5B6DD5B0B8FC979B3960CB2CD55B82A -PT=3F02C97E127FD697AFD58BC66941F654 -CT=BC4C0DDBCF0003B7814EEF1ABD22B6A8 - -I=222 -KEY=9C1FD1789544D2F3FF84574A216767CD69FAD080C48FCACE32D8E3A870770E82 -PT=BC4C0DDBCF0003B7814EEF1ABD22B6A8 -CT=D125D8C2920ADD3EA00103DC695A0D9D - -I=223 -KEY=ADBE97F99DBE61213892D9849B81B3FBB8DF0842568517F092D9E074192D031F -PT=D125D8C2920ADD3EA00103DC695A0D9D -CT=C0C57598639BA69E13C82E3AF24777C5 - -I=224 -KEY=A14DC5CF6CD0BD9AC9499317C509CCB4781A7DDA351EB16E8111CE4EEB6A74DA -PT=C0C57598639BA69E13C82E3AF24777C5 -CT=81E3B8F6A691BC30AA66AD70F0358881 - -I=225 -KEY=0EC479D8681AC8CA455D64A4BB34C86DF9F9C52C938F0D5E2B77633E1B5FFC5B -PT=81E3B8F6A691BC30AA66AD70F0358881 -CT=3CD03908D4ABA4B9885BCB1AC89D16C3 - -I=226 -KEY=E74102D814426E659732B303E6D44DB7C529FC244724A9E7A32CA824D3C2EA98 -PT=3CD03908D4ABA4B9885BCB1AC89D16C3 -CT=61662DD8EE676E17AE5CF2BABDC54A67 - -I=227 -KEY=EE4034F1A2EF16D7D848BB005CDA5E99A44FD1FCA943C7F00D705A9E6E07A0FF -PT=61662DD8EE676E17AE5CF2BABDC54A67 -CT=4E637432B0FF54FD665A902725B977EB - -I=228 -KEY=45E8F2DF7FC6E49FB0AF3B73788A1065EA2CA5CE19BC930D6B2ACAB94BBED714 -PT=4E637432B0FF54FD665A902725B977EB -CT=E53D1440407503B66530EEEEBBC9182B - -I=229 -KEY=0BEBC981186DEF84C01688CA16A061E00F11B18E59C990BB0E1A2457F077CF3F -PT=E53D1440407503B66530EEEEBBC9182B -CT=12134ADF5BB16D867B4EE9CE87EBE36D - -I=230 -KEY=6FADFDB92B0F888514730F17A37A81B61D02FB510278FD3D7554CD99779C2C52 -PT=12134ADF5BB16D867B4EE9CE87EBE36D -CT=310EACEF26A3EB5E4511437145DC30F9 - -I=231 -KEY=A565724F25EE29346543964864A0FFAA2C0C57BE24DB166330458EE832401CAB -PT=310EACEF26A3EB5E4511437145DC30F9 -CT=6848E5A618419EC6BACD9CD40BB42083 - -I=232 -KEY=1FAEBFE13AC7545DC742ED60241BC2E84444B2183C9A88A58A88123C39F43C28 -PT=6848E5A618419EC6BACD9CD40BB42083 -CT=C64DA25E7CB1A004E31CD37F9D4E1112 - -I=233 -KEY=A8EE2725373C48BAD9C0009C53C298A982091046402B28A16994C143A4BA2D3A -PT=C64DA25E7CB1A004E31CD37F9D4E1112 -CT=D02E6AE8FDD0C5813669080AA7B82527 - -I=234 -KEY=0770874A41ED1396940D75E6A5A09F5352277AAEBDFBED205FFDC9490302081D -PT=D02E6AE8FDD0C5813669080AA7B82527 -CT=5DDFBC75FE48D88E7D6F307E4A008BC7 - -I=235 -KEY=D7D098F85AB45E754629D2AB7DA2226C0FF8C6DB43B335AE2292F937490283DA -PT=5DDFBC75FE48D88E7D6F307E4A008BC7 -CT=E216C9AC28239E97237930079739ECE0 - -I=236 -KEY=5D6FAFF37EE7400691E504578251ECB1EDEE0F776B90AB3901EBC930DE3B6F3A -PT=E216C9AC28239E97237930079739ECE0 -CT=8D126659360D03548879000642E78029 - -I=237 -KEY=D75C5C64D94D0BC8566F568278B502D560FC692E5D9DA86D8992C9369CDCEF13 -PT=8D126659360D03548879000642E78029 -CT=9EA4C85D0F07AD618A2EBEBBE50D72B6 - -I=238 -KEY=D42BD9CDCD8BDA71E64817A2755C97C0FE58A173529A050C03BC778D79D19DA5 -PT=9EA4C85D0F07AD618A2EBEBBE50D72B6 -CT=1F525901AF1D94BA6CA3C7244E2CD885 - -I=239 -KEY=32DD1758D2EFC602EE85C58A66D0B080E10AF872FD8791B66F1FB0A937FD4520 -PT=1F525901AF1D94BA6CA3C7244E2CD885 -CT=E131C071BFA21FCE21D18DB87B522903 - -I=240 -KEY=BEC98C02D74E088458A668D0B6DDCF13003B380342258E784ECE3D114CAF6C23 -PT=E131C071BFA21FCE21D18DB87B522903 -CT=51F1B72C99C869BF73A6637D3A2E2278 - -I=241 -KEY=D368F7BE25A6A0C9AD2004E764F43A3551CA8F2FDBEDE7C73D685E6C76814E5B -PT=51F1B72C99C869BF73A6637D3A2E2278 -CT=0965CDD7A134672036F0C69774CFD380 - -I=242 -KEY=E5A7E12124540DBB4147A55C276A35B958AF42F87AD980E70B9898FB024E9DDB -PT=0965CDD7A134672036F0C69774CFD380 -CT=52ECEB721073FBF3D1BD5808351BEC5E - -I=243 -KEY=7D9702E2C8906805A580D5D85B03BBC60A43A98A6AAA7B14DA25C0F337557185 -PT=52ECEB721073FBF3D1BD5808351BEC5E -CT=493CE4E2B090DA3A2354C9DA7DB44D39 - -I=244 -KEY=8EFA5EC96F3AEF51AB38F4CCD969E5D5437F4D68DA3AA12EF97109294AE13CBC -PT=493CE4E2B090DA3A2354C9DA7DB44D39 -CT=DA64246FF65969995F9A4E8AE7C805CF - -I=245 -KEY=19C97957444E9931293047A647D7A19A991B69072C63C8B7A6EB47A3AD293973 -PT=DA64246FF65969995F9A4E8AE7C805CF -CT=CF85EBD76908CD8F8D3177E53DA3AD5E - -I=246 -KEY=7BDB3ED45BD78C131611FD9D54B8E9D2569E82D0456B05382BDA3046908A942D -PT=CF85EBD76908CD8F8D3177E53DA3AD5E -CT=45E1FDEFC98E62A841BD1D8D8236CEEF - -I=247 -KEY=19961521A42D96238D44F651E7E7D463137F7F3F8CE567906A672DCB12BC5AC2 -PT=45E1FDEFC98E62A841BD1D8D8236CEEF -CT=E056EF7B711A9CBDED8878EF74AF1671 - -I=248 -KEY=343360636E697E607319D4DCBC12B543F3299044FDFFFB2D87EF552466134CB3 -PT=E056EF7B711A9CBDED8878EF74AF1671 -CT=E4EFF77C6C3273393BE4814A16C3DF4A - -I=249 -KEY=B63D4D3D099F8E68F6A041D2EB1B1C1417C6673891CD8814BC0BD46E70D093F9 -PT=E4EFF77C6C3273393BE4814A16C3DF4A -CT=EC562E353DF8BA76699B01A6ACC8AD52 - -I=250 -KEY=EF500379EDE772968F1499F07B0B09CFFB90490DAC353262D590D5C8DC183EAB -PT=EC562E353DF8BA76699B01A6ACC8AD52 -CT=4473050ADC687112AACB86AA73CB6C6D - -I=251 -KEY=EA5CD4EDD99E64018AD3104026F0F528BFE34C07705D43707F5B5362AFD352C6 -PT=4473050ADC687112AACB86AA73CB6C6D -CT=6561A82EE86E4F18DF6965312F0C0984 - -I=252 -KEY=2ABF9529FC88D85FF68CF6D72B9A9CB5DA82E42998330C68A032365380DF5B42 -PT=6561A82EE86E4F18DF6965312F0C0984 -CT=47590CE1C90F3AC2C68B272B4A667F61 - -I=253 -KEY=A485B647790DBFF76F16C42A39F5F5559DDBE8C8513C36AA66B91178CAB92423 -PT=47590CE1C90F3AC2C68B272B4A667F61 -CT=4ED731A36BCB2672A810633E432D8922 - -I=254 -KEY=F0D0E858B597595A06458FF6C2259127D30CD96B3AF710D8CEA972468994AD01 -PT=4ED731A36BCB2672A810633E432D8922 -CT=4AC2F0D5F52762F77DB5D9EF53B76642 - -I=255 -KEY=EDDE80556ECA4CC51EFB33E23C43C04399CE29BECFD0722FB31CABA9DA23CB43 -PT=4AC2F0D5F52762F77DB5D9EF53B76642 -CT=A574FBE71E359A57D57A24A388FDF6EE - -I=256 -KEY=3C7C248C9FCE1D060D5B0664C0FF3F6B3CBAD259D1E5E87866668F0A52DE3DAD -PT=A574FBE71E359A57D57A24A388FDF6EE -CT=CCC3A011108469A7987F336C209BB84E - -I=257 -KEY=D43727570A809BE0D9EB78760FE4CDA9F0797248C16181DFFE19BC66724585E3 -PT=CCC3A011108469A7987F336C209BB84E -CT=686357D3013977390164834D4E5324DC - -I=258 -KEY=2F060E361977E544B98779AB55886D57981A259BC058F6E6FF7D3F2B3C16A13F -PT=686357D3013977390164834D4E5324DC -CT=DDDAD6FBDBF7C7BE7EBF3F036009A270 - -I=259 -KEY=A3630C05DC65905D37AFDB315B2AA4D945C0F3601BAF315881C200285C1F034F -PT=DDDAD6FBDBF7C7BE7EBF3F036009A270 -CT=237124FEDF28B4201B6D1584B93D5F7C - -I=260 -KEY=3E6ADAAEF53A36294CDEA0D94BE742C166B1D79EC48785789AAF15ACE5225C33 -PT=237124FEDF28B4201B6D1584B93D5F7C -CT=D1A9DDFB5662934AAD98B2861E50A871 - -I=261 -KEY=234615019E03C466AEA186112C4EB523B7180A6592E516323737A72AFB72F442 -PT=D1A9DDFB5662934AAD98B2861E50A871 -CT=CA18344F4C7A0F068398CA8137C056DD - -I=262 -KEY=22ED93581611798050E94CC70F6090BF7D003E2ADE9F1934B4AF6DABCCB2A29F -PT=CA18344F4C7A0F068398CA8137C056DD -CT=91FA4D62D10E852D9EDA42FAC8C34557 - -I=263 -KEY=A5981D9A37D6D3D948391D1D462B6DCFECFA73480F919C192A752F510471E7C8 -PT=91FA4D62D10E852D9EDA42FAC8C34557 -CT=B956221510135066B2B2552C4CB37642 - -I=264 -KEY=BF2E4397D0E93DFFA38D69B30F33835B55AC515D1F82CC7F98C77A7D48C2918A -PT=B956221510135066B2B2552C4CB37642 -CT=300CFCEAFED28E622CD08222D3A3B0B0 - -I=265 -KEY=55432143B807A628001F8D062CE0157265A0ADB7E150421DB417F85F9B61213A -PT=300CFCEAFED28E622CD08222D3A3B0B0 -CT=26681BCFDC630A21A684C60EF6A23747 - -I=266 -KEY=2966A6CB3BA9028583813B91FD72748D43C8B6783D33483C12933E516DC3167D -PT=26681BCFDC630A21A684C60EF6A23747 -CT=8EDD4B1B458D16841AD4525C01A8397E - -I=267 -KEY=1A22288AC28060F8E4B20C2AE0C82AEACD15FD6378BE5EB808476C0D6C6B2F03 -PT=8EDD4B1B458D16841AD4525C01A8397E -CT=BFDE412A7CAF0326AD1727996056A61C - -I=268 -KEY=C882E880508E92FF709E9BD4A555B30A72CBBC4904115D9EA5504B940C3D891F -PT=BFDE412A7CAF0326AD1727996056A61C -CT=88C039A0B395C5D08848C64DFC150C57 - -I=269 -KEY=298B3829EE60112C926E1FD583C9A2DEFA0B85E9B784984E2D188DD9F0288548 -PT=88C039A0B395C5D08848C64DFC150C57 -CT=ACDF23F2CB73FD8D3D814A79E3C94126 - -I=270 -KEY=2F2A3D0DDB2DBA8B8E3FF8A9DE765FE356D4A61B7CF765C31099C7A013E1C46E -PT=ACDF23F2CB73FD8D3D814A79E3C94126 -CT=A8BE26FE8780972650D5F384B744AC44 - -I=271 -KEY=F8CC20E8296CD38F1EF8BB2777EE1200FE6A80E5FB77F2E5404C3424A4A5682A -PT=A8BE26FE8780972650D5F384B744AC44 -CT=B5557CC20F64FCC576A6EC7BE324CE43 - -I=272 -KEY=678B5341F1BC13DB366B36D59ADADC7C4B3FFC27F4130E2036EAD85F4781A669 -PT=B5557CC20F64FCC576A6EC7BE324CE43 -CT=B59281EFF9C8D19E5D9C053CBE1F2F33 - -I=273 -KEY=E4701C9009693E38C455CE186A4B87DFFEAD7DC80DDBDFBE6B76DD63F99E895A -PT=B59281EFF9C8D19E5D9C053CBE1F2F33 -CT=7E8B1D4BFF81C5B9AA1FCA81DF8DE64F - -I=274 -KEY=C1F886CBCBF2BD920A0E68F30FCB8FCE80266083F25A1A07C16917E226136F15 -PT=7E8B1D4BFF81C5B9AA1FCA81DF8DE64F -CT=20841B35C77A109B528A1135E17D36EE - -I=275 -KEY=F05D61A9441B3C741D9D7489F2EE4A5EA0A27BB635200A9C93E306D7C76E59FB -PT=20841B35C77A109B528A1135E17D36EE -CT=C3195DC001FA1AD7C253DD3FE4A4BC7D - -I=276 -KEY=0C8E70943252DD5DC9819A9FDB375B3F63BB267634DA104B51B0DBE823CAE586 -PT=C3195DC001FA1AD7C253DD3FE4A4BC7D -CT=7E06BD1B3440DB4CA73AF1A05B33AD3F - -I=277 -KEY=84F1B5CF1AD11205E98ECD317AD670A11DBD9B6D009ACB07F68A2A4878F948B9 -PT=7E06BD1B3440DB4CA73AF1A05B33AD3F -CT=6224DBD71C1DC35A5C62777D2EA32C3E - -I=278 -KEY=E3465353AED687EF62CD1DA8D7DA3EEB7F9940BA1C87085DAAE85D35565A6487 -PT=6224DBD71C1DC35A5C62777D2EA32C3E -CT=1E4E51CD7BA1F7467AC69755F8894EF4 - -I=279 -KEY=31F715D1FFA116F58AB70E4A3EEF6E9561D711776726FF1BD02ECA60AED32A73 -PT=1E4E51CD7BA1F7467AC69755F8894EF4 -CT=4AB8AFEACB2A1B1AE9E74D647266E234 - -I=280 -KEY=487B6847CA14B04D429C81278332273F2B6FBE9DAC0CE40139C98704DCB5C847 -PT=4AB8AFEACB2A1B1AE9E74D647266E234 -CT=64C0BBA15382C142BBEE84B86B7D0BA0 - -I=281 -KEY=D1C9CA26B21945011B044EA6E29C9AD54FAF053CFF8E2543822703BCB7C8C3E7 -PT=64C0BBA15382C142BBEE84B86B7D0BA0 -CT=F82292AF614648EC6C1E9A1027167410 - -I=282 -KEY=3F585C00E187BE1B0C9E09781C9548A8B78D97939EC86DAFEE3999AC90DEB7F7 -PT=F82292AF614648EC6C1E9A1027167410 -CT=31C38ED5F207B412A14A51632D8805CE - -I=283 -KEY=340B8C115BAFF387400CD8F0EE8F8F6F864E19466CCFD9BD4F73C8CFBD56B239 -PT=31C38ED5F207B412A14A51632D8805CE -CT=3FC4CC8F4245BBBC5939A0C0A24A14DE - -I=284 -KEY=EA8EACF07402225D6C5181A8802DA515B98AD5C92E8A6201164A680F1F1CA6E7 -PT=3FC4CC8F4245BBBC5939A0C0A24A14DE -CT=23A98FA41D6C3D4CD9CFB9737A6D7872 - -I=285 -KEY=56EF7B73BF04F5F463E4D0EA0F6FC4DA9A235A6D33E65F4DCF85D17C6571DE95 -PT=23A98FA41D6C3D4CD9CFB9737A6D7872 -CT=82CC2D376B2772B7B988BEA17EFBB3D2 - -I=286 -KEY=C425E380DA91C34B73CE922C59B13C8818EF775A58C12DFA760D6FDD1B8A6D47 -PT=82CC2D376B2772B7B988BEA17EFBB3D2 -CT=5330F6218D528A32B24085EA496A05A9 - -I=287 -KEY=EA66C7FF9FCD2F9E76BCC5C6387E133E4BDF817BD593A7C8C44DEA3752E068EE -PT=5330F6218D528A32B24085EA496A05A9 -CT=7C1E082C2C89C90AD91AE81DF73F1F5F - -I=288 -KEY=C89CF336490832FB54BB536813AEE6EA37C18957F91A6EC21D57022AA5DF77B1 -PT=7C1E082C2C89C90AD91AE81DF73F1F5F -CT=2AB33673B654E2C49D6736D65A5F45C8 - -I=289 -KEY=7CC5409A9AE1F997774C3FEB74A6E9061D72BF244F4E8C06803034FCFF803279 -PT=2AB33673B654E2C49D6736D65A5F45C8 -CT=21BA6CADDCA5E0BE779D1A2651794C81 - -I=290 -KEY=E5E1873FDEE9DC066AF79C0E6027D0703CC8D38993EB6CB8F7AD2EDAAEF97EF8 -PT=21BA6CADDCA5E0BE779D1A2651794C81 -CT=8E2AF8BA54CF04812AE786C180FCFCA8 - -I=291 -KEY=844AA67914DE1C11677B5526D5B12765B2E22B33C7246839DD4AA81B2E058250 -PT=8E2AF8BA54CF04812AE786C180FCFCA8 -CT=E48A7CD35CA33B1D919B8A83ADF4C6BE - -I=292 -KEY=FE3248768ACB0AF9DBD639AF7B7EB944566857E09B8753244CD1229883F144EE -PT=E48A7CD35CA33B1D919B8A83ADF4C6BE -CT=C377A76CF43C27784CC54079744413D1 - -I=293 -KEY=709E7BC30A7DE8FADC071B3D04338FCA951FF08C6FBB745C001462E1F7B5573F -PT=C377A76CF43C27784CC54079744413D1 -CT=01D8083A9EA403A4754EF82CA29CDD5B - -I=294 -KEY=448B1AEC2F68D202679183D85C4A6D2194C7F8B6F11F77F8755A9ACD55298A64 -PT=01D8083A9EA403A4754EF82CA29CDD5B -CT=46ADC32EFF2C3EFF40B468E845EFC2E4 - -I=295 -KEY=529401616FA6193014D6A10BEF1A816FD26A3B980E33490735EEF22510C64880 -PT=46ADC32EFF2C3EFF40B468E845EFC2E4 -CT=FCC6594B1BBF40E28BE798ABC00163F1 - -I=296 -KEY=15A5E8BAF02EF91390AB7D35742CC5C12EAC62D3158C09E5BE096A8ED0C72B71 -PT=FCC6594B1BBF40E28BE798ABC00163F1 -CT=28D35B6E1140738ED1DF20FE11003B1E - -I=297 -KEY=589C04ECDF2B884807919A2018A93080067F39BD04CC7A6B6FD64A70C1C7106F -PT=28D35B6E1140738ED1DF20FE11003B1E -CT=3354C7962E19FB043FD4CD7B2C99E195 - -I=298 -KEY=A6987BEB541098C7173475B34568F36B352BFE2B2AD5816F5002870BED5EF1FA -PT=3354C7962E19FB043FD4CD7B2C99E195 -CT=EB76F282C9F10F507FACFCDEEC8BBBB8 - -I=299 -KEY=3732B395057761A8A2624F52354668CFDE5D0CA9E3248E3F2FAE7BD501D54A42 -PT=EB76F282C9F10F507FACFCDEEC8BBBB8 -CT=77A4DAE8406992C5018D6B0310195E0C - -I=300 -KEY=E24C9F98F43E840AE04ED4928133F65AA9F9D641A34D1CFA2E2310D611CC144E -PT=77A4DAE8406992C5018D6B0310195E0C -CT=655DEC1062EDB50B8B31A66071E236A2 - -I=301 -KEY=8BA207CA6E2B720810E66CCAB597E8DACCA43A51C1A0A9F1A512B6B6602E22EC -PT=655DEC1062EDB50B8B31A66071E236A2 -CT=28A22A069D8FF3DE359860B0A5B6FD1F - -I=302 -KEY=22C629C84758D553AFE4876AA739A1F0E40610575C2F5A2F908AD606C598DFF3 -PT=28A22A069D8FF3DE359860B0A5B6FD1F -CT=95DD88B4AFD0680E221C70422ADFFCD1 - -I=303 -KEY=F86A3C799AAB6884220196BF07E1643D71DB98E3F3FF3221B296A644EF472322 -PT=95DD88B4AFD0680E221C70422ADFFCD1 -CT=323475C634FD6845BAA9F371F29DC363 - -I=304 -KEY=83412E9600B279F76C93F171C469AD1943EFED25C7025A64083F55351DDAE041 -PT=323475C634FD6845BAA9F371F29DC363 -CT=61276AD535F9E73FCFB53DBF2D5D1F62 - -I=305 -KEY=01AD15137C4A572322660716B6B4EDCD22C887F0F2FBBD5BC78A688A3087FF23 -PT=61276AD535F9E73FCFB53DBF2D5D1F62 -CT=105ECB04A5CA32FC93987569A7CB46D7 - -I=306 -KEY=1CC639BA56CA0DF23E64BB3395C08BB332964CF457318FA754121DE3974CB9F4 -PT=105ECB04A5CA32FC93987569A7CB46D7 -CT=831DBB3F4BBD4343B94D54AA2B3E0620 - -I=307 -KEY=25ABCF5B8DB1A7CCB1FA49936E0AB3C8B18BF7CB1C8CCCE4ED5F4949BC72BFD4 -PT=831DBB3F4BBD4343B94D54AA2B3E0620 -CT=40B9D9C6201E639DC9A04E500BCD7F61 - -I=308 -KEY=75B34E0F371C4527732F22CF35AD923BF1322E0D3C92AF7924FF0719B7BFC0B5 -PT=40B9D9C6201E639DC9A04E500BCD7F61 -CT=A159BB0C751148C14D561E0407A9F6DB - -I=309 -KEY=1EB6E3491B431B7EFFCCC965C9041274506B95014983E7B869A9191DB016366E -PT=A159BB0C751148C14D561E0407A9F6DB -CT=2012E67815334AC48E5309DD129E0476 - -I=310 -KEY=F0BDAFB216613A6FB3819D08B17EFDC1707973795CB0AD7CE7FA10C0A2883218 -PT=2012E67815334AC48E5309DD129E0476 -CT=53E415BC0C9013F83B77298395FC9FEF - -I=311 -KEY=9C5A3B9C862E07159AB06D5B7FB585C5239D66C55020BE84DC8D39433774ADF7 -PT=53E415BC0C9013F83B77298395FC9FEF -CT=2B1EEAA13373494A2A56C15FD5ECA103 - -I=312 -KEY=9764AC349B8222394160F4896BA6761808838C646353F7CEF6DBF81CE2980CF4 -PT=2B1EEAA13373494A2A56C15FD5ECA103 -CT=2A00E873782853DC842427A03C30A81A - -I=313 -KEY=42A1614569C4DE66D6336BC082B3B9DD228364171B7BA41272FFDFBCDEA8A4EE -PT=2A00E873782853DC842427A03C30A81A -CT=5FEB74E489C4C8121A15C2BCF51046A5 - -I=314 -KEY=CED80BE0859A5863CFE41F0F2CE9F65B7D6810F392BF6C0068EA1D002BB8E24B -PT=5FEB74E489C4C8121A15C2BCF51046A5 -CT=948214D5DB68997C37A48927AA97B89A - -I=315 -KEY=178DAF533EBB695D5E57401E5345C3E8E9EA042649D7F57C5F4E9427812F5AD1 -PT=948214D5DB68997C37A48927AA97B89A -CT=AB8F3BB9917E4D1C8F1F2EDDB7070530 - -I=316 -KEY=66F4B8B5A0BD877514FDB4CD2DD04D8C42653F9FD8A9B860D051BAFA36285FE1 -PT=AB8F3BB9917E4D1C8F1F2EDDB7070530 -CT=CB5FB11C6DB1AB6BC189F0F3FB47A2A5 - -I=317 -KEY=9753278CFCEE8B059ECF573A2E0D65D6893A8E83B518130B11D84A09CD6FFD44 -PT=CB5FB11C6DB1AB6BC189F0F3FB47A2A5 -CT=F0CE65E6C5C263182E6C253F26460A1B - -I=318 -KEY=121A860A5B53C56E536DE56566F31E2079F4EB6570DA70133FB46F36EB29F75F -PT=F0CE65E6C5C263182E6C253F26460A1B -CT=9AA17B0F532814CA74FF0A046F377C48 - -I=319 -KEY=88F5E58E9522495BF7B68430946F7C0FE355906A23F264D94B4B6532841E8B17 -PT=9AA17B0F532814CA74FF0A046F377C48 -CT=52CAAEF16E55858487AEDBDBA822002D - -I=320 -KEY=D9A3D3547F215D44D80C6A5D3548D4D2B19F3E9B4DA7E15DCCE5BEE92C3C8B3A -PT=52CAAEF16E55858487AEDBDBA822002D -CT=2599545FD15C7F59A6F02CDCB95E6589 - -I=321 -KEY=6ACE86543B0F981C2D0FCB1408A42C3294066AC49CFB9E046A1592359562EEB3 -PT=2599545FD15C7F59A6F02CDCB95E6589 -CT=DC7A68313CE3E1963D31E5149CDBE22A - -I=322 -KEY=E9D6D08194DAFBB7B491124515118FA6487C02F5A0187F925724772109B90C99 -PT=DC7A68313CE3E1963D31E5149CDBE22A -CT=333B588A7354CB3229E43780AFE4738D - -I=323 -KEY=762FC93CEED1EE9C6EF702A4E3BBABD67B475A7FD34CB4A07EC040A1A65D7F14 -PT=333B588A7354CB3229E43780AFE4738D -CT=41727DC0D18725AFD2EF8FF51EAE1C2C - -I=324 -KEY=FF4EC1DF818E820424CFE5D09EE2E5423A3527BF02CB910FAC2FCF54B8F36338 -PT=41727DC0D18725AFD2EF8FF51EAE1C2C -CT=A7236B16D9937C84F37BF9D79D0251F9 - -I=325 -KEY=59BDAB706DEA2EC52AE05A2E4382A4169D164CA9DB58ED8B5F54368325F132C1 -PT=A7236B16D9937C84F37BF9D79D0251F9 -CT=B81D30EFDB86688F1DCA616EC771B9FD - -I=326 -KEY=4C008516CD614B6588A526FFE33C055B250B7C4600DE8504429E57EDE2808B3C -PT=B81D30EFDB86688F1DCA616EC771B9FD -CT=A5AD142C8F078ABF419B7CF5C86C9F83 - -I=327 -KEY=DB65698F99E4A27019ABE194A89E9BC680A6686A8FD90FBB03052B182AEC14BF -PT=A5AD142C8F078ABF419B7CF5C86C9F83 -CT=861B59E3B61A5D02F0D70DFF40EF7FF2 - -I=328 -KEY=0790C16C53A7826B4B309DDF99B5239006BD318939C352B9F3D226E76A036B4D -PT=861B59E3B61A5D02F0D70DFF40EF7FF2 -CT=B0F4C2C4D0D282BE3128AD78D34B1FA6 - -I=329 -KEY=AFE168F089E676A806DD191003777E6DB649F34DE911D007C2FA8B9FB94874EB -PT=B0F4C2C4D0D282BE3128AD78D34B1FA6 -CT=9DFCF5727851ADE8C37A9AA3AA77B20D - -I=330 -KEY=F261CDF199D9EF436C1A08EB9755A2112BB5063F91407DEF0180113C133FC6E6 -PT=9DFCF5727851ADE8C37A9AA3AA77B20D -CT=9268DBA972B72C9DEF15CF9B8041F23B - -I=331 -KEY=E0D6DCF3BA840720688456A43E849C5CB9DDDD96E3F75172EE95DEA7937E34DD -PT=9268DBA972B72C9DEF15CF9B8041F23B -CT=D45A8B321CB6D8F28167C857BC2900BF - -I=332 -KEY=B77CF3A880C2E9E66D0C98A4D88555F46D8756A4FF4189806FF216F02F573462 -PT=D45A8B321CB6D8F28167C857BC2900BF -CT=0124FE2D8BCB81E1286A18D2BABEA919 - -I=333 -KEY=7729E55EFA6B249E0207E06AAF6F09206CA3A889748A086147980E2295E99D7B -PT=0124FE2D8BCB81E1286A18D2BABEA919 -CT=A1BB0D975A50BE8BD8C2973D4BA7BF42 - -I=334 -KEY=102384784C54539084BC7181AA95F184CD18A51E2EDAB6EA9F5A991FDE4E2239 -PT=A1BB0D975A50BE8BD8C2973D4BA7BF42 -CT=15302D5DBFD8E407EADDE9896B42CB13 - -I=335 -KEY=9FF48EF1068BFC07DA38F7790D7418D2D8288843910252ED75877096B50CE92A -PT=15302D5DBFD8E407EADDE9896B42CB13 -CT=90D93B8F802CFAD3F6E682DD704B5F43 - -I=336 -KEY=84477EB9007ECDF8D1C4A6A976C76AB848F1B3CC112EA83E8361F24BC547B669 -PT=90D93B8F802CFAD3F6E682DD704B5F43 -CT=2DD7E0B91C5DDF0FD118F4CDD836A212 - -I=337 -KEY=F1CE87DE930567CE29DF313D8778358D652653750D737731527906861D71147B -PT=2DD7E0B91C5DDF0FD118F4CDD836A212 -CT=AC9D307EFF44703D6FDA621FFF8D077C - -I=338 -KEY=22D31C8F64CFB23620A70E7CD4A486D3C9BB630BF237070C3DA36499E2FC1307 -PT=AC9D307EFF44703D6FDA621FFF8D077C -CT=CC6772DE3B27CB1DB3E5A804843EB6FF - -I=339 -KEY=FC9057D2D2D28BFAC4D5E3654717188205DC11D5C910CC118E46CC9D66C2A5F8 -PT=CC6772DE3B27CB1DB3E5A804843EB6FF -CT=BDB021550FE0744090EAFEEBCF422061 - -I=340 -KEY=1EA032190E7E4CC45D2E1E138429658AB86C3080C6F0B8511EAC3276A9808599 -PT=BDB021550FE0744090EAFEEBCF422061 -CT=C6E21F9A1305C3969F2D70C11D58A1A7 - -I=341 -KEY=B633EDA212B952785755700FBDC91CA57E8E2F1AD5F57BC7818142B7B4D8243E -PT=C6E21F9A1305C3969F2D70C11D58A1A7 -CT=01BC936B7063CA9D28DB1FFCCB9C2048 - -I=342 -KEY=94A06984520AB40D74568F0D5286AEE37F32BC71A596B15AA95A5D4B7F440476 -PT=01BC936B7063CA9D28DB1FFCCB9C2048 -CT=88279D100DFA68CEBD9949F19C3333F4 - -I=343 -KEY=96A3BD621155F71A9EFB8E35F95238ACF7152161A86CD99414C314BAE3773782 -PT=88279D100DFA68CEBD9949F19C3333F4 -CT=41574A686596D4741BF5DE52B5183260 - -I=344 -KEY=185312E4301E5AADC373CEB3EBA66FB7B6426B09CDFA0DE00F36CAE8566F05E2 -PT=41574A686596D4741BF5DE52B5183260 -CT=BD9F5087C32A66A4797C7EE87355FF4A - -I=345 -KEY=BC5D60D256DCA48E88E52F05C349431A0BDD3B8E0ED06B44764AB400253AFAA8 -PT=BD9F5087C32A66A4797C7EE87355FF4A -CT=A88BC3FAF87D6C1D3F98A2884EF1D4DA - -I=346 -KEY=1485A9209167A6FA2ECD2CE6AA03DBA5A356F874F6AD075949D216886BCB2E72 -PT=A88BC3FAF87D6C1D3F98A2884EF1D4DA -CT=E514E6E34A050EB917F2382EDF92353A - -I=347 -KEY=2B62B0E29763FF09F53A2006B990E97746421E97BCA809E05E202EA6B4591B48 -PT=E514E6E34A050EB917F2382EDF92353A -CT=142EEBE72E0F56ABE5D67FCC28F957F6 - -I=348 -KEY=FC13067E362B7C9C39AA73B85F32011C526CF57092A75F4BBBF6516A9CA04CBE -PT=142EEBE72E0F56ABE5D67FCC28F957F6 -CT=24FDB7A03FE8A9288BFAA5AC2527D015 - -I=349 -KEY=8AC3B473244989EA74025FE98269BC17769142D0AD4FF663300CF4C6B9879CAB -PT=24FDB7A03FE8A9288BFAA5AC2527D015 -CT=649095ABA5F4006B7B89D20F10A37AE9 - -I=350 -KEY=FD0F4205DBFF0160203898EF02E9088E1201D77B08BBF6084B8526C9A924E642 -PT=649095ABA5F4006B7B89D20F10A37AE9 -CT=F5428E8BDDDC31FC8EF67BC7DB3201D3 - -I=351 -KEY=701AF95194FB0918BC2CA79AFD507336E74359F0D567C7F4C5735D0E7216E791 -PT=F5428E8BDDDC31FC8EF67BC7DB3201D3 -CT=A56B2014A4929373DC1F6FD5C0AC138C - -I=352 -KEY=633D0E72722E6443D4E219086D221939422879E471F55487196C32DBB2BAF41D -PT=A56B2014A4929373DC1F6FD5C0AC138C -CT=F35F9CD43144B358843A48B4D1C41882 - -I=353 -KEY=DCA79BA0184EC0A22A875E5057CA967AB177E53040B1E7DF9D567A6F637EEC9F -PT=F35F9CD43144B358843A48B4D1C41882 -CT=A572C1F98330A1C1FA91DFD5A5B76AB9 - -I=354 -KEY=A3D0FE4C3C1A1CE19CF66CF80135553D140524C9C381461E67C7A5BAC6C98626 -PT=A572C1F98330A1C1FA91DFD5A5B76AB9 -CT=23C56E065427F0409504053DD8A994CD - -I=355 -KEY=175C8D4085802768D20875CDBE6EFE2437C04ACF97A6B65EF2C3A0871E6012EB -PT=23C56E065427F0409504053DD8A994CD -CT=7E666724C1CAC0A582325381E9C98D73 - -I=356 -KEY=800EE65CA3DE8643371DA10FB0605AB649A62DEB566C76FB70F1F306F7A99F98 -PT=7E666724C1CAC0A582325381E9C98D73 -CT=B6C18D730A074196884CADF151CAC890 - -I=357 -KEY=F526E578E8978822944644B146154425FF67A0985C6B376DF8BD5EF7A6635708 -PT=B6C18D730A074196884CADF151CAC890 -CT=0068BB370419CD39748559C2DE206817 - -I=358 -KEY=7D144850BE03306F41A642442890EA20FF0F1BAF5872FA548C38073578433F1F -PT=0068BB370419CD39748559C2DE206817 -CT=56852D240F01729C4EAD0B1FFC3EDA1F - -I=359 -KEY=33B2189E3774B1A066BE522C07550F88A98A368B577388C8C2950C2A847DE500 -PT=56852D240F01729C4EAD0B1FFC3EDA1F -CT=458633A84E1F5737E9668A37388CF3C2 - -I=360 -KEY=CF53C76250347B0CC5CAC660D52199B1EC0C0523196CDFFF2BF3861DBCF116C2 -PT=458633A84E1F5737E9668A37388CF3C2 -CT=F96E181E03350F27106C8D24403A49DD - -I=361 -KEY=618676C1702531077565060B5DA0570B15621D3D1A59D0D83B9F0B39FCCB5F1F -PT=F96E181E03350F27106C8D24403A49DD -CT=B515584E252F703A4EB55E81EDA58E30 - -I=362 -KEY=D2C8CF9645CD741F67263845150FE649A07745733F76A0E2752A55B8116ED12F -PT=B515584E252F703A4EB55E81EDA58E30 -CT=54E7D10C236785AFE0A93B3971D6F237 - -I=363 -KEY=D0847F41C7940023491C2F83D02F8271F490947F1C11254D95836E8160B82318 -PT=54E7D10C236785AFE0A93B3971D6F237 -CT=937DFDE10E96030A0A8823EA3EF31B98 - -I=364 -KEY=17502FC3077EFD420D2268CE0FF26F4667ED699E128726479F0B4D6B5E4B3880 -PT=937DFDE10E96030A0A8823EA3EF31B98 -CT=93FDF0392A3391C74DBE4229792C9630 - -I=365 -KEY=4D6AA08A6C7EB7CA9CBE7AF4500C229EF41099A738B4B780D2B50F422767AEB0 -PT=93FDF0392A3391C74DBE4229792C9630 -CT=B9F80E1476658E6CE7FADBA215298958 - -I=366 -KEY=D8820A50934290C146AFE477D9D4A0224DE897B34ED139EC354FD4E0324E27E8 -PT=B9F80E1476658E6CE7FADBA215298958 -CT=87ACDCD1F1332B9961CC5E18F9009A39 - -I=367 -KEY=50E8959452DD52247A6F21A0C7BEDEB8CA444B62BFE2127554838AF8CB4EBDD1 -PT=87ACDCD1F1332B9961CC5E18F9009A39 -CT=3DD6249971FEC0FB4432236078D98D53 - -I=368 -KEY=7A1973C5B90748596A54C709D1598DA5F7926FFBCE1CD28E10B1A998B3973082 -PT=3DD6249971FEC0FB4432236078D98D53 -CT=D540F8BDE3442D17E88B524D00618309 - -I=369 -KEY=F9C08719A452CA931A62C5BD8F1D669D22D297462D58FF99F83AFBD5B3F6B38B -PT=D540F8BDE3442D17E88B524D00618309 -CT=7BB18B2DA9ED188BCE3B18C02C9B3F3B - -I=370 -KEY=5EBA35F7E58381DBE29EC4A1D9B5B9AD59631C6B84B5E7123601E3159F6D8CB0 -PT=7BB18B2DA9ED188BCE3B18C02C9B3F3B -CT=9A7380BAA169495B0FC29BB002D70E48 - -I=371 -KEY=E442442FE32FA6BDA63AF0A6AC5D5AB2C3109CD125DCAE4939C378A59DBA82F8 -PT=9A7380BAA169495B0FC29BB002D70E48 -CT=88F3FE65298F7498A788E4196F13FC80 - -I=372 -KEY=39079A8713E148703212A6F7FFD1B04D4BE362B40C53DAD19E4B9CBCF2A97E78 -PT=88F3FE65298F7498A788E4196F13FC80 -CT=A5E6361FBA6418CD9B2F50992B50A557 - -I=373 -KEY=A99A33F38B36E3EE4DEE59F8A4282A84EE0554ABB637C21C0564CC25D9F9DB2F -PT=A5E6361FBA6418CD9B2F50992B50A557 -CT=B1430F431ACC1C498FABF2D33B63CC67 - -I=374 -KEY=BC09FAC540F44949F3B8EDFE2444CA725F465BE8ACFBDE558ACF3EF6E29A1748 -PT=B1430F431ACC1C498FABF2D33B63CC67 -CT=A90D76642D8D7899DD4A85EB92C89382 - -I=375 -KEY=D26C1D07B51073C609030DC782FFAE93F64B2D8C8176A6CC5785BB1D705284CA -PT=A90D76642D8D7899DD4A85EB92C89382 -CT=57522F39211100EF248D4A34E35CE4CE - -I=376 -KEY=2D7ADCD18F615F814B8D8B07CE48B4A1A11902B5A067A6237308F129930E6004 -PT=57522F39211100EF248D4A34E35CE4CE -CT=87AED1E0C9F067C5F3F6D3D3BBCDE872 - -I=377 -KEY=CA206C3442FAEFF3CB1292C675F52C2426B7D3556997C1E680FE22FA28C38876 -PT=87AED1E0C9F067C5F3F6D3D3BBCDE872 -CT=05798F53DFAE4A78D7BEEC24BE775B55 - -I=378 -KEY=6ECC5BC346B18446D77FFBC44CCB0B1823CE5C06B6398B9E5740CEDE96B4D323 -PT=05798F53DFAE4A78D7BEEC24BE775B55 -CT=7677CE104395FFA15B51F81DAFBCAB1A - -I=379 -KEY=2E52C8E239CF1E959AB831307034FEF755B99216F5AC743F0C1136C339087839 -PT=7677CE104395FFA15B51F81DAFBCAB1A -CT=760DE53561246F944B3E6279B39373F1 - -I=380 -KEY=79B65B7D435E2134A1AB9A1CC1F08A8423B4772394881BAB472F54BA8A9B0BC8 -PT=760DE53561246F944B3E6279B39373F1 -CT=5B61CC978A9C808767C272432765EC0B - -I=381 -KEY=9EF57B89E7B8127348A9EF05E93DCC8D78D5BBB41E149B2C20ED26F9ADFEE7C3 -PT=5B61CC978A9C808767C272432765EC0B -CT=902CDF3BD5E869E9CCFF8F2A454E1D42 - -I=382 -KEY=15BB7B6BC685E4865BFA134C59CFC9C5E8F9648FCBFCF2C5EC12A9D3E8B0FA81 -PT=902CDF3BD5E869E9CCFF8F2A454E1D42 -CT=38264937B9372C316478BDF7AE578900 - -I=383 -KEY=735D93C1DDD54986ACC6C2B0DFCC5E8AD0DF2DB872CBDEF4886A142446E77381 -PT=38264937B9372C316478BDF7AE578900 -CT=3BFE31D3E909E6EC3112F88DB8FFCA45 - -I=384 -KEY=675B0E7FC5BCC3AF319B1D55C1F62CCAEB211C6B9BC23818B978ECA9FE18B9C4 -PT=3BFE31D3E909E6EC3112F88DB8FFCA45 -CT=2BFD5F6532BC1D2A8DA34481F9228B84 - -I=385 -KEY=0AB242F9783E75D04E98733E63458F53C0DC430EA97E253234DBA828073A3240 -PT=2BFD5F6532BC1D2A8DA34481F9228B84 -CT=161481003108BAEFCC02BFD335C6A89F - -I=386 -KEY=58457CB82A24222839CF20D837F168A8D6C8C20E98769FDDF8D917FB32FC9ADF -PT=161481003108BAEFCC02BFD335C6A89F -CT=8A50E98A1165C1B6137231E519EC137B - -I=387 -KEY=C2C52CEA5654AAC9BD60FA04068094EF5C982B8489135E6BEBAB261E2B1089A4 -PT=8A50E98A1165C1B6137231E519EC137B -CT=24ACAA0F045F5A6765D3B468550585B5 - -I=388 -KEY=816757A434D81AA348E0B2F4FC44F4387834818B8D4C040C8E7892767E150C11 -PT=24ACAA0F045F5A6765D3B468550585B5 -CT=9993F9CBDAD9CA98C74CCBDB3E079F50 - -I=389 -KEY=647A9F1E43B08FD15EFC17342EB8970AE1A778405795CE94493459AD40129341 -PT=9993F9CBDAD9CA98C74CCBDB3E079F50 -CT=F676785AEF58297C28035E8E065829FF - -I=390 -KEY=4BB8B5020862EA9228B663DEDB39336717D1001AB8CDE7E861370723464ABABE -PT=F676785AEF58297C28035E8E065829FF -CT=ED16C74BD4252F7B72AA37D11E198508 - -I=391 -KEY=5392AAED87CE40891A69F4690A8743FBFAC7C7516CE8C893139D30F258533FB6 -PT=ED16C74BD4252F7B72AA37D11E198508 -CT=3BE7B6A9E197598146E98B7A501A2226 - -I=392 -KEY=9D8BABE9C12E6BA3A18EB23A92205456C12071F88D7F91125574BB8808491D90 -PT=3BE7B6A9E197598146E98B7A501A2226 -CT=CC1163A3D9AF3307ED740591AB66BD81 - -I=393 -KEY=231B451E506AC98FF993A3C7AD9C37F70D31125B54D0A215B800BE19A32FA011 -PT=CC1163A3D9AF3307ED740591AB66BD81 -CT=43FB8B2B44C740956111DA816616771D - -I=394 -KEY=1699C517EE1713D02C6EA0957E4A00CE4ECA99701017E280D9116498C539D70C -PT=43FB8B2B44C740956111DA816616771D -CT=A511AEA01DB8E7E16E7C53931625BEC3 - -I=395 -KEY=2624CE7970CC5DAFAC73C881FDD5F6EBEBDB37D00DAF0561B76D370BD31C69CF -PT=A511AEA01DB8E7E16E7C53931625BEC3 -CT=82EF6D2A1FF1DBCDF39DC04BE523229F - -I=396 -KEY=60C9931E19ED0D095F8DF75AEA56689769345AFA125EDEAC44F0F740363F4B50 -PT=82EF6D2A1FF1DBCDF39DC04BE523229F -CT=A595C8AAAAAD80DD4F40693FF2D89A19 - -I=397 -KEY=D461E3605B0AD0E87F5A078ECFE25934CCA19250B8F35E710BB09E7FC4E7D149 -PT=A595C8AAAAAD80DD4F40693FF2D89A19 -CT=57B18DFEAD129795C3BB8D6C06764729 - -I=398 -KEY=0BE3FC6C21764F1C15782D52D92919A09B101FAE15E1C9E4C80B1313C2919660 -PT=57B18DFEAD129795C3BB8D6C06764729 -CT=6F8606BBA6CC03A5D0A64FE21E277B60 - -I=399 -KEY=982D617A0F737342E99123A5A573D266F4961915B32DCA4118AD5CF1DCB6ED00 -PT=6F8606BBA6CC03A5D0A64FE21E277B60 -CT=1F6763DF807A7E70960D4CD3118E601A - -=========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_iv.readme b/src/lib/crypto/aes/test/ecb_iv.readme deleted file mode 100644 index c37215768..000000000 --- a/src/lib/crypto/aes/test/ecb_iv.readme +++ /dev/null @@ -1,19 +0,0 @@ -Description of the Intermediate Value Known Answer Test --------------------------------------------------------- - -The test encrypts one plaintext with a variable number of rounds. -In ECB encryption mode, the output PTi is the output after the -initial key addition and i rounds (a round ends with a key -addition). - -As explained in the documentation, in ECB decryption mode -there are several definitions of a `round' possible. In order -to make visual inspection more intuitive, we output the -intermediate values that correspond with the output of the -encryption mode. -These values might actually not occur in a practical decryption, -especially in an optimised implementation, where various operations -of different rounds are interchanged. - -This explains also why the Java and the C code output different -files for this test. diff --git a/src/lib/crypto/aes/test/ecb_iv.txt b/src/lib/crypto/aes/test/ecb_iv.txt deleted file mode 100644 index 3f6608e4e..000000000 --- a/src/lib/crypto/aes/test/ecb_iv.txt +++ /dev/null @@ -1,123 +0,0 @@ - -========================= - -FILENAME: "ecb_iv.txt" - -Electronic Codebook (ECB) Mode -Intermediate Value Known Answer Tests - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 -KEY=000102030405060708090A0B0C0D0E0F - -Intermediate Ciphertext Values (Encryption) - -PT=000102030405060708090A0B0C0D0E0F -CT1=B5C9179EB1CC1199B9C51B92B5C8159D -CT2=2B65F6374C427C5B2FE3A9256896755B -CT3=D1015FCBB4EF65679688462076B9D6AD -CT4=8E17064A2A35A183729FE59FF3A591F1 -CT5=D7557DD55999DB3259E2183D558DCDD2 -CT6=73A96A5D7799A5F3111D2B63684B1F7F -CT7=1B6B853069EEFC749AFEFD7B57A04CD1 -CT8=107EEADFB6F77933B5457A6F08F046B2 -CT9=8EC166481A677AA96A14FF6ECE88C010 -CT=0A940BB5416EF045F1C39458C653EA5A - -Intermediate Ciphertext Values (Decryption) - -CT=0A940BB5416EF045F1C39458C653EA5A -PT1=8EC166481A677AA96A14FF6ECE88C010 -PT2=107EEADFB6F77933B5457A6F08F046B2 -PT3=1B6B853069EEFC749AFEFD7B57A04CD1 -PT4=73A96A5D7799A5F3111D2B63684B1F7F -PT5=D7557DD55999DB3259E2183D558DCDD2 -PT6=8E17064A2A35A183729FE59FF3A591F1 -PT7=D1015FCBB4EF65679688462076B9D6AD -PT8=2B65F6374C427C5B2FE3A9256896755B -PT9=B5C9179EB1CC1199B9C51B92B5C8159D -PT=000102030405060708090A0B0C0D0E0F - -========== - -KEYSIZE=192 -KEY=000102030405060708090A0B0C0D0E0F1011121314151617 - -Intermediate Ciphertext Values (Encryption) - -PT=000102030405060708090A0B0C0D0E0F -CT1=73727170777675743B25919A3F20979D -CT2=C673B27A311EC2EB64AD47FF53B233D7 -CT3=0B5CC6BA34C807E6496D79B46826A1E8 -CT4=005B53A5B660E280307883487E4D1A4D -CT5=88A105F0DDD45F3674DBC3DE1A211B03 -CT6=EB5CD8B5FD8A3F33F03A70FB5C620C06 -CT7=909913B09BD2CC5A70B6C647931F0A1F -CT8=6EB6CA10E395AFD646B02C5E9E745A9F -CT9=2CFD2FC41AF82B8DFB80E9BD1C989ECE -CT10=31C5D5E27EAF073E5C21ADAAEAA969D4 -CT11=1DB94956A7268B0DE963D27E55868580 -CT=0060BFFE46834BB8DA5CF9A61FF220AE - -Intermediate Ciphertext Values (Decryption) - -CT=0060BFFE46834BB8DA5CF9A61FF220AE -PT1=1DB94956A7268B0DE963D27E55868580 -PT2=31C5D5E27EAF073E5C21ADAAEAA969D4 -PT3=2CFD2FC41AF82B8DFB80E9BD1C989ECE -PT4=6EB6CA10E395AFD646B02C5E9E745A9F -PT5=909913B09BD2CC5A70B6C647931F0A1F -PT6=EB5CD8B5FD8A3F33F03A70FB5C620C06 -PT7=88A105F0DDD45F3674DBC3DE1A211B03 -PT8=005B53A5B660E280307883487E4D1A4D -PT9=0B5CC6BA34C807E6496D79B46826A1E8 -PT10=C673B27A311EC2EB64AD47FF53B233D7 -PT11=73727170777675743B25919A3F20979D -PT=000102030405060708090A0B0C0D0E0F - -========== - -KEYSIZE=256 -KEY=000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F - -Intermediate Ciphertext Values (Encryption) - -PT=000102030405060708090A0B0C0D0E0F -CT1=73727170777675747B7A79787F7E7D7C -CT2=4E5D32BB8B67FD1BD4CFEC9FFB20AC4F -CT3=96A212E486341549C4AAF7C843F0277A -CT4=0F45F284CDD0CB16E3EA81ECC891A4E1 -CT5=E59BFC458A89063E0137BBE6DB63A058 -CT6=1D958D960EA3143383C17D5CD87BA327 -CT7=43843EF40D9219481935B77A586DB5DE -CT8=5AA5ABADBC40230CBA6124E9FAEEEFB5 -CT9=DAD61937BDFD582927F14C990C5FC761 -CT10=E8A48C5DEE5C0792AB6DFFF5B038529D -CT11=4B71E5A8BFB4E9A5312A18119E68E829 -CT12=DCBA75CEE6589DDC0D289A172E8415B5 -CT13=8A0E856B2074C1093104131D0628BFE8 -CT=5A6E045708FB7196F02E553D02C3A692 - -Intermediate Ciphertext Values (Decryption) - -CT=5A6E045708FB7196F02E553D02C3A692 -PT1=8A0E856B2074C1093104131D0628BFE8 -PT2=DCBA75CEE6589DDC0D289A172E8415B5 -PT3=4B71E5A8BFB4E9A5312A18119E68E829 -PT4=E8A48C5DEE5C0792AB6DFFF5B038529D -PT5=DAD61937BDFD582927F14C990C5FC761 -PT6=5AA5ABADBC40230CBA6124E9FAEEEFB5 -PT7=43843EF40D9219481935B77A586DB5DE -PT8=1D958D960EA3143383C17D5CD87BA327 -PT9=E59BFC458A89063E0137BBE6DB63A058 -PT10=0F45F284CDD0CB16E3EA81ECC891A4E1 -PT11=96A212E486341549C4AAF7C843F0277A -PT12=4E5D32BB8B67FD1BD4CFEC9FFB20AC4F -PT13=73727170777675747B7A79787F7E7D7C -PT=000102030405060708090A0B0C0D0E0F - -========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_tbl.txt b/src/lib/crypto/aes/test/ecb_tbl.txt deleted file mode 100644 index f1eef5300..000000000 --- a/src/lib/crypto/aes/test/ecb_tbl.txt +++ /dev/null @@ -1,1955 +0,0 @@ -/* Description of what tables are tested: - The provided implementations each use a different set of tables - - Java implementation: uses no tables - - reference C implementation: uses Logtable, Alogtable, S, Si, rcon - - fast C implementation: uses Logtable, Alogtable, rcon - and additionally, T1, T2, T3, T4, T5, T6, T7, T8 - and (for the inverse key schedule only) U1, U2, U3, U4. - All these tables are tested. - -========================= - -FILENAME: "ecb_tbl.txt" - -Electronic Codebook (ECB) Mode -Tables Known Answer Tests - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 - - -I=1 -KEY=00010203050607080A0B0C0D0F101112 -PT=506812A45F08C889B97F5980038B8359 -CT=D8F532538289EF7D06B506A4FD5BE9C9 - -I=2 -KEY=14151617191A1B1C1E1F202123242526 -PT=5C6D71CA30DE8B8B00549984D2EC7D4B -CT=59AB30F4D4EE6E4FF9907EF65B1FB68C - -I=3 -KEY=28292A2B2D2E2F30323334353738393A -PT=53F3F4C64F8616E4E7C56199F48F21F6 -CT=BF1ED2FCB2AF3FD41443B56D85025CB1 - -I=4 -KEY=3C3D3E3F41424344464748494B4C4D4E -PT=A1EB65A3487165FB0F1C27FF9959F703 -CT=7316632D5C32233EDCB0780560EAE8B2 - -I=5 -KEY=50515253555657585A5B5C5D5F606162 -PT=3553ECF0B1739558B08E350A98A39BFA -CT=408C073E3E2538072B72625E68B8364B - -I=6 -KEY=64656667696A6B6C6E6F707173747576 -PT=67429969490B9711AE2B01DC497AFDE8 -CT=E1F94DFA776597BEACA262F2F6366FEA - -I=7 -KEY=78797A7B7D7E7F80828384858788898A -PT=93385C1F2AEC8BED192F5A8E161DD508 -CT=F29E986C6A1C27D7B29FFD7EE92B75F1 - -I=8 -KEY=8C8D8E8F91929394969798999B9C9D9E -PT=B5BF946BE19BEB8DB3983B5F4C6E8DDB -CT=131C886A57F8C2E713ABA6955E2B55B5 - -I=9 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 -PT=41321EE10E21BD907227C4450FF42324 -CT=D2AB7662DF9B8C740210E5EEB61C199D - -I=10 -KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=00A82F59C91C8486D12C0A80124F6089 -CT=14C10554B2859C484CAB5869BBE7C470 - -I=11 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA -PT=7CE0FD076754691B4BBD9FAF8A1372FE -CT=DB4D498F0A49CF55445D502C1F9AB3B5 - -I=12 -KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=23605A8243D07764541BC5AD355B3129 -CT=6D96FEF7D66590A77A77BB2056667F7F - -I=13 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE010002 -PT=12A8CFA23EA764FD876232B4E842BC44 -CT=316FB68EDBA736C53E78477BF913725C - -I=14 -KEY=04050607090A0B0C0E0F101113141516 -PT=BCAF32415E8308B3723E5FDD853CCC80 -CT=6936F2B93AF8397FD3A771FC011C8C37 - -I=15 -KEY=2C2D2E2F31323334363738393B3C3D3E -PT=89AFAE685D801AD747ACE91FC49ADDE0 -CT=F3F92F7A9C59179C1FCC2C2BA0B082CD - -I=16 -KEY=40414243454647484A4B4C4D4F505152 -PT=F521D07B484357C4A69E76124A634216 -CT=6A95EA659EE3889158E7A9152FF04EBC - -I=17 -KEY=54555657595A5B5C5E5F606163646566 -PT=3E23B3BC065BCC152407E23896D77783 -CT=1959338344E945670678A5D432C90B93 - -I=18 -KEY=68696A6B6D6E6F70727374757778797A -PT=79F0FBA002BE1744670E7E99290D8F52 -CT=E49BDDD2369B83EE66E6C75A1161B394 - -I=19 -KEY=7C7D7E7F81828384868788898B8C8D8E -PT=DA23FE9D5BD63E1D72E3DAFBE21A6C2A -CT=D3388F19057FF704B70784164A74867D - -I=20 -KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=E3F5698BA90B6A022EFD7DB2C7E6C823 -CT=23AA03E2D5E4CD24F3217E596480D1E1 - -I=21 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 -PT=BDC2691D4F1B73D2700679C3BCBF9C6E -CT=C84113D68B666AB2A50A8BDB222E91B9 - -I=22 -KEY=08090A0B0D0E0F10121314151718191A -PT=BA74E02093217EE1BA1B42BD5624349A -CT=AC02403981CD4340B507963DB65CB7B6 - -I=23 -KEY=6C6D6E6F71727374767778797B7C7D7E -PT=B5C593B5851C57FBF8B3F57715E8F680 -CT=8D1299236223359474011F6BF5088414 - -I=24 -KEY=80818283858687888A8B8C8D8F909192 -PT=3DA9BD9CEC072381788F9387C3BBF4EE -CT=5A1D6AB8605505F7977E55B9A54D9B90 - -I=25 -KEY=94959697999A9B9C9E9FA0A1A3A4A5A6 -PT=4197F3051121702AB65D316B3C637374 -CT=72E9C2D519CF555E4208805AABE3B258 - -I=26 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA -PT=9F46C62EC4F6EE3F6E8C62554BC48AB7 -CT=A8F3E81C4A23A39EF4D745DFFE026E80 - -I=27 -KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=0220673FE9E699A4EBC8E0DBEB6979C8 -CT=546F646449D31458F9EB4EF5483AEE6C - -I=28 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 -PT=B2B99171337DED9BC8C2C23FF6F18867 -CT=4DBE4BC84AC797C0EE4EFB7F1A07401C - -I=29 -KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=A7FACF4E301E984E5EFEEFD645B23505 -CT=25E10BFB411BBD4D625AC8795C8CA3B3 - -I=30 -KEY=F8F9FAFBFDFEFE00020304050708090A -PT=F7C762E4A9819160FD7ACFB6C4EEDCDD -CT=315637405054EC803614E43DEF177579 - -I=31 -KEY=0C0D0E0F11121314161718191B1C1D1E -PT=9B64FC21EA08709F4915436FAA70F1BE -CT=60C5BC8A1410247295C6386C59E572A8 - -I=32 -KEY=20212223252627282A2B2C2D2F303132 -PT=52AF2C3DE07EE6777F55A4ABFC100B3F -CT=01366FC8CA52DFE055D6A00A76471BA6 - -I=33 -KEY=34353637393A3B3C3E3F404143444546 -PT=2FCA001224386C57AA3F968CBE2C816F -CT=ECC46595516EC612449C3F581E7D42FF - -I=34 -KEY=48494A4B4D4E4F50525354555758595A -PT=4149C73658A4A9C564342755EE2C132F -CT=6B7FFE4C602A154B06EE9C7DAB5331C9 - -I=35 -KEY=5C5D5E5F61626364666768696B6C6D6E -PT=AF60005A00A1772F7C07A48A923C23D2 -CT=7DA234C14039A240DD02DD0FBF84EB67 - -I=36 -KEY=70717273757677787A7B7C7D7F808182 -PT=6FCCBC28363759914B6F0280AFAF20C6 -CT=C7DC217D9E3604FFE7E91F080ECD5A3A - -I=37 -KEY=84858687898A8B8C8E8F909193949596 -PT=7D82A43DDF4FEFA2FC5947499884D386 -CT=37785901863F5C81260EA41E7580CDA5 - -I=38 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AA -PT=5D5A990EAAB9093AFE4CE254DFA49EF9 -CT=A07B9338E92ED105E6AD720FCCCE9FE4 - -I=39 -KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=4CD1E2FD3F4434B553AAE453F0ED1A02 -CT=AE0FB9722418CC21A7DA816BBC61322C - -I=40 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 -PT=5A2C9A9641D4299125FA1B9363104B5E -CT=C826A193080FF91FFB21F71D3373C877 - -I=41 -KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=B517FE34C0FA217D341740BFD4FE8DD4 -CT=1181B11B0E494E8D8B0AA6B1D5AC2C48 - -I=42 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA -PT=014BAF2278A69D331D5180103643E99A -CT=6743C3D1519AB4F2CD9A78AB09A511BD - -I=43 -KEY=FCFDFEFF01020304060708090B0C0D0E -PT=B529BD8164F20D0AA443D4932116841C -CT=DC55C076D52BACDF2EEFD952946A439D - -I=44 -KEY=10111213151617181A1B1C1D1F202122 -PT=2E596DCBB2F33D4216A1176D5BD1E456 -CT=711B17B590FFC72B5C8E342B601E8003 - -I=45 -KEY=24252627292A2B2C2E2F303133343536 -PT=7274A1EA2B7EE2424E9A0E4673689143 -CT=19983BB0950783A537E1339F4AA21C75 - -I=46 -KEY=38393A3B3D3E3F40424344454748494A -PT=AE20020BD4F13E9D90140BEE3B5D26AF -CT=3BA7762E15554169C0F4FA39164C410C - -I=47 -KEY=4C4D4E4F51525354565758595B5C5D5E -PT=BAAC065DA7AC26E855E79C8849D75A02 -CT=A0564C41245AFCA7AF8AA2E0E588EA89 - -I=48 -KEY=60616263656667686A6B6C6D6F707172 -PT=7C917D8D1D45FAB9E2540E28832540CC -CT=5E36A42A2E099F54AE85ECD92E2381ED - -I=49 -KEY=74757677797A7B7C7E7F808183848586 -PT=BDE6F89E16DAADB0E847A2A614566A91 -CT=770036F878CD0F6CA2268172F106F2FE - -I=50 -KEY=88898A8B8D8E8F90929394959798999A -PT=C9DE163725F1F5BE44EBB1DB51D07FBC -CT=7E4E03908B716116443CCF7C94E7C259 - -I=51 -KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=3AF57A58F0C07DFFA669572B521E2B92 -CT=482735A48C30613A242DD494C7F9185D - -I=52 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 -PT=3D5EBAC306DDE4604F1B4FBBBFCDAE55 -CT=B4C0F6C9D4D7079ADDF9369FC081061D - -I=53 -KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=C2DFA91BCEB76A1183C995020AC0B556 -CT=D5810FE0509AC53EDCD74F89962E6270 - -I=54 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA -PT=C70F54305885E9A0746D01EC56C8596B -CT=03F17A16B3F91848269ECDD38EBB2165 - -I=55 -KEY=ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=C4F81B610E98012CE000182050C0C2B2 -CT=DA1248C3180348BAD4A93B4D9856C9DF - -I=56 -KEY=00010203050607080A0B0C0D0F101112 -PT=EAAB86B1D02A95D7404EFF67489F97D4 -CT=3D10D7B63F3452C06CDF6CCE18BE0C2C - -I=57 -KEY=14151617191A1B1C1E1F202123242526 -PT=7C55BDB40B88870B52BEC3738DE82886 -CT=4AB823E7477DFDDC0E6789018FCB6258 - -I=58 -KEY=28292A2B2D2E2F30323334353738393A -PT=BA6EAA88371FF0A3BD875E3F2A975CE0 -CT=E6478BA56A77E70CFDAA5C843ABDE30E - -I=59 -KEY=3C3D3E3F41424344464748494B4C4D4E -PT=08059130C4C24BD30CF0575E4E0373DC -CT=1673064895FBEAF7F09C5429FF75772D - -I=60 -KEY=50515253555657585A5B5C5D5F606162 -PT=9A8EAB004EF53093DFCF96F57E7EDA82 -CT=4488033AE9F2EFD0CA9383BFCA1A94E9 - -I=61 -KEY=64656667696A6B6C6E6F707173747576 -PT=0745B589E2400C25F117B1D796C28129 -CT=978F3B8C8F9D6F46626CAC3C0BCB9217 - -I=62 -KEY=78797A7B7D7E7F80828384858788898A -PT=2F1777781216CEC3F044F134B1B92BBE -CT=E08C8A7E582E15E5527F1D9E2EECB236 - -I=63 -KEY=8C8D8E8F91929394969798999B9C9D9E -PT=353A779FFC541B3A3805D90CE17580FC -CT=CEC155B76AC5FFDA4CF4F9CA91E49A7A - -I=64 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 -PT=1A1EAE4415CEFCF08C4AC1C8F68BEA8F -CT=D5AC7165763225DD2A38CDC6862C29AD - -I=65 -KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=E6E7E4E5B0B3B2B5D4D5AAAB16111013 -CT=03680FE19F7CE7275452020BE70E8204 - -I=66 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA -PT=F8F9FAFBFBF8F9E677767170EFE0E1E2 -CT=461DF740C9781C388E94BB861CEB54F6 - -I=67 -KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=63626160A1A2A3A445444B4A75727370 -CT=451BD60367F96483042742219786A074 - -I=68 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE010002 -PT=717073720605040B2D2C2B2A05FAFBF9 -CT=E4DFA42671A02E57EF173B85C0EA9F2B - -I=69 -KEY=04050607090A0B0C0E0F101113141516 -PT=78797A7BEAE9E8EF3736292891969794 -CT=ED11B89E76274282227D854700A78B9E - -I=70 -KEY=18191A1B1D1E1F20222324252728292A -PT=838281803231300FDDDCDBDAA0AFAEAD -CT=433946EAA51EA47AF33895F2B90B3B75 - -I=71 -KEY=2C2D2E2F31323334363738393B3C3D3E -PT=18191A1BBFBCBDBA75747B7A7F78797A -CT=6BC6D616A5D7D0284A5910AB35022528 - -I=72 -KEY=40414243454647484A4B4C4D4F505152 -PT=848586879B989996A3A2A5A4849B9A99 -CT=D2A920ECFE919D354B5F49EAE9719C98 - -I=73 -KEY=54555657595A5B5C5E5F606163646566 -PT=0001020322212027CACBF4F551565754 -CT=3A061B17F6A92885EFBD0676985B373D - -I=74 -KEY=68696A6B6D6E6F70727374757778797A -PT=CECFCCCDAFACADB2515057564A454447 -CT=FADEEC16E33EA2F4688499D157E20D8F - -I=75 -KEY=7C7D7E7F81828384868788898B8C8D8E -PT=92939091CDCECFC813121D1C80878685 -CT=5CDEFEDE59601AA3C3CDA36FA6B1FA13 - -I=76 -KEY=90919293959697989A9B9C9D9FA0A1A2 -PT=D2D3D0D16F6C6D6259585F5ED1EEEFEC -CT=9574B00039844D92EBBA7EE8719265F8 - -I=77 -KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=ACADAEAF878485820F0E1110D5D2D3D0 -CT=9A9CF33758671787E5006928188643FA - -I=78 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA -PT=9091929364676619E6E7E0E1757A7B78 -CT=2CDDD634C846BA66BB46CBFEA4A674F9 - -I=79 -KEY=CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=BABBB8B98A89888F74757A7B92959497 -CT=D28BAE029393C3E7E26E9FAFBBB4B98F - -I=80 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 -PT=8D8C8F8E6E6D6C633B3A3D3CCAD5D4D7 -CT=EC27529B1BEE0A9AB6A0D73EBC82E9B7 - -I=81 -KEY=F4F5F6F7F9FAFBFCFEFE010103040506 -PT=86878485010203040808F7F767606162 -CT=3CB25C09472AFF6EE7E2B47CCD7CCB17 - -I=82 -KEY=08090A0B0D0E0F10121314151718191A -PT=8E8F8C8D656667788A8B8C8D010E0F0C -CT=DEE33103A7283370D725E44CA38F8FE5 - -I=83 -KEY=1C1D1E1F21222324262728292B2C2D2E -PT=C8C9CACB858687807A7B7475E7E0E1E2 -CT=27F9BCD1AAC64BFFC11E7815702C1A69 - -I=84 -KEY=30313233353637383A3B3C3D3F404142 -PT=6D6C6F6E5053525D8C8D8A8BADD2D3D0 -CT=5DF534FFAD4ED0749A9988E9849D0021 - -I=85 -KEY=44454647494A4B4C4E4F505153545556 -PT=28292A2B393A3B3C0607181903040506 -CT=A48BEE75DB04FB60CA2B80F752A8421B - -I=86 -KEY=58595A5B5D5E5F60626364656768696A -PT=A5A4A7A6B0B3B28DDBDADDDCBDB2B3B0 -CT=024C8CF70BC86EE5CE03678CB7AF45F9 - -I=87 -KEY=6C6D6E6F71727374767778797B7C7D7E -PT=323330316467666130313E3F2C2B2A29 -CT=3C19AC0F8A3A3862CE577831301E166B - -I=88 -KEY=80818283858687888A8B8C8D8F909192 -PT=27262524080B0A05171611100B141516 -CT=C5E355B796A57421D59CA6BE82E73BCA - -I=89 -KEY=94959697999A9B9C9E9FA0A1A3A4A5A6 -PT=040506074142434435340B0AA3A4A5A6 -CT=D94033276417ABFB05A69D15B6E386E2 - -I=90 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA -PT=242526271112130C61606766BDB2B3B0 -CT=24B36559EA3A9B9B958FE6DA3E5B8D85 - -I=91 -KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=4B4A4948252627209E9F9091CEC9C8CB -CT=20FD4FEAA0E8BF0CCE7861D74EF4CB72 - -I=92 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 -PT=68696A6B6665646B9F9E9998D9E6E7E4 -CT=350E20D5174277B9EC314C501570A11D - -I=93 -KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=34353637C5C6C7C0F0F1EEEF7C7B7A79 -CT=87A29D61B7C604D238FE73045A7EFD57 - -I=94 -KEY=F8F9FAFBFDFEFE00020304050708090A -PT=32333031C2C1C13F0D0C0B0A050A0B08 -CT=2C3164C1CC7D0064816BDC0FAA362C52 - -I=95 -KEY=0C0D0E0F11121314161718191B1C1D1E -PT=CDCCCFCEBEBDBCBBABAAA5A4181F1E1D -CT=195FE5E8A05A2ED594F6E4400EEE10B3 - -I=96 -KEY=20212223252627282A2B2C2D2F303132 -PT=212023223635343BA0A1A6A7445B5A59 -CT=E4663DF19B9A21A5A284C2BD7F905025 - -I=97 -KEY=34353637393A3B3C3E3F404143444546 -PT=0E0F0C0DA8ABAAAD2F2E515002050407 -CT=21B88714CFB4E2A933BD281A2C4743FD - -I=98 -KEY=48494A4B4D4E4F50525354555758595A -PT=070605042A2928378E8F8889BDB2B3B0 -CT=CBFC3980D704FD0FC54378AB84E17870 - -I=99 -KEY=5C5D5E5F61626364666768696B6C6D6E -PT=CBCAC9C893909196A9A8A7A6A5A2A3A0 -CT=BC5144BAA48BDEB8B63E22E03DA418EF - -I=100 -KEY=70717273757677787A7B7C7D7F808182 -PT=80818283C1C2C3CC9C9D9A9B0CF3F2F1 -CT=5A1DBAEF1EE2984B8395DA3BDFFA3CCC - -I=101 -KEY=84858687898A8B8C8E8F909193949596 -PT=1213101125262720FAFBE4E5B1B6B7B4 -CT=F0B11CD0729DFCC80CEC903D97159574 - -I=102 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AA -PT=7F7E7D7C3033320D97969190222D2C2F -CT=9F95314ACFDDC6D1914B7F19A9CC8209 - -I=103 -KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=4E4F4C4D484B4A4D81808F8E53545556 -CT=595736F6F0F70914A94E9E007F022519 - -I=104 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 -PT=DCDDDEDFB0B3B2BD15141312A1BEBFBC -CT=1F19F57892CAE586FCDFB4C694DEB183 - -I=105 -KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=93929190282B2A2DC4C5FAFB92959497 -CT=540700EE1F6F3DAB0B3EDDF6CAEE1EF5 - -I=106 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA -PT=F5F4F7F6C4C7C6D9373631307E717073 -CT=14A342A91019A331687A2254E6626CA2 - -I=107 -KEY=FCFDFEFF01020304060708090B0C0D0E -PT=93929190B6B5B4B364656A6B05020300 -CT=7B25F3C3B2EEA18D743EF283140F29FF - -I=108 -KEY=10111213151617181A1B1C1D1F202122 -PT=BABBB8B90D0E0F00A4A5A2A3043B3A39 -CT=46C2587D66E5E6FA7F7CA6411AD28047 - -I=109 -KEY=24252627292A2B2C2E2F303133343536 -PT=D8D9DADB7F7C7D7A10110E0F787F7E7D -CT=09470E72229D954ED5EE73886DFEEBA9 - -I=110 -KEY=38393A3B3D3E3F40424344454748494A -PT=FEFFFCFDEFECED923B3A3D3C6768696A -CT=D77C03DE92D4D0D79EF8D4824EF365EB - -I=111 -KEY=4C4D4E4F51525354565758595B5C5D5E -PT=D6D7D4D58A89888F96979899A5A2A3A0 -CT=1D190219F290E0F1715D152D41A23593 - -I=112 -KEY=60616263656667686A6B6C6D6F707172 -PT=18191A1BA8ABAAA5303136379B848586 -CT=A2CD332CE3A0818769616292E87F757B - -I=113 -KEY=74757677797A7B7C7E7F808183848586 -PT=6B6A6968A4A7A6A1D6D72829B0B7B6B5 -CT=D54AFA6CE60FBF9341A3690E21385102 - -I=114 -KEY=88898A8B8D8E8F90929394959798999A -PT=000102038A89889755545352A6A9A8AB -CT=06E5C364DED628A3F5E05E613E356F46 - -I=115 -KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=2D2C2F2EB3B0B1B6B6B7B8B9F2F5F4F7 -CT=EAE63C0E62556DAC85D221099896355A - -I=116 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 -PT=979695943536373856575051E09F9E9D -CT=1FED060E2C6FC93EE764403A889985A2 - -I=117 -KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=A4A5A6A7989B9A9DB1B0AFAE7A7D7C7F -CT=C25235C1A30FDEC1C7CB5C5737B2A588 - -I=118 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA -PT=C1C0C3C2686B6A55A8A9AEAFEAE5E4E7 -CT=796DBEF95147D4D30873AD8B7B92EFC0 - -I=119 -KEY=ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=C1C0C3C2141716118C8D828364636261 -CT=CBCF0FB34D98D0BD5C22CE37211A46BF - -I=120 -KEY=00010203050607080A0B0C0D0F101112 -PT=93929190CCCFCEC196979091E0FFFEFD -CT=94B44DA6466126CAFA7C7FD09063FC24 - -I=121 -KEY=14151617191A1B1C1E1F202123242526 -PT=B4B5B6B7F9FAFBFC25241B1A6E69686B -CT=D78C5B5EBF9B4DBDA6AE506C5074C8FE - -I=122 -KEY=28292A2B2D2E2F30323334353738393A -PT=868784850704051AC7C6C1C08788898A -CT=6C27444C27204B043812CF8CF95F9769 - -I=123 -KEY=3C3D3E3F41424344464748494B4C4D4E -PT=F4F5F6F7AAA9A8AFFDFCF3F277707172 -CT=BE94524EE5A2AA50BBA8B75F4C0AEBCF - -I=124 -KEY=50515253555657585A5B5C5D5F606162 -PT=D3D2D1D00605040BC3C2C5C43E010003 -CT=A0AEAAE91BA9F31F51AEB3588CF3A39E - -I=125 -KEY=64656667696A6B6C6E6F707173747576 -PT=73727170424140476A6B74750D0A0B08 -CT=275297779C28266EF9FE4C6A13C08488 - -I=126 -KEY=78797A7B7D7E7F80828384858788898A -PT=C2C3C0C10A0908F754555253A1AEAFAC -CT=86523D92BB8672CB01CF4A77FD725882 - -I=127 -KEY=8C8D8E8F91929394969798999B9C9D9E -PT=6D6C6F6EF8FBFAFD82838C8DF8FFFEFD -CT=4B8327640E9F33322A04DD96FCBF9A36 - -I=128 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 -PT=F5F4F7F684878689A6A7A0A1D2CDCCCF -CT=CE52AF650D088CA559425223F4D32694 - -========== - -KEYSIZE=192 - - -I=1 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C -PT=2D33EEF2C0430A8A9EBF45E809C40BB6 -CT=DFF4945E0336DF4C1C56BC700EFF837F - -I=2 -KEY=1E1F20212324252628292A2B2D2E2F30323334353738393A -PT=6AA375D1FA155A61FB72353E0A5A8756 -CT=B6FDDEF4752765E347D5D2DC196D1252 - -I=3 -KEY=3C3D3E3F41424344464748494B4C4D4E5051525355565758 -PT=BC3736518B9490DCB8ED60EB26758ED4 -CT=D23684E3D963B3AFCF1A114ACA90CBD6 - -I=4 -KEY=5A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=AA214402B46CFFB9F761EC11263A311E -CT=3A7AC027753E2A18C2CEAB9E17C11FD0 - -I=5 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394 -PT=02AEA86E572EEAB66B2C3AF5E9A46FD6 -CT=8F6786BD007528BA26603C1601CDD0D8 - -I=6 -KEY=969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2 -PT=E2AEF6ACC33B965C4FA1F91C75FF6F36 -CT=D17D073B01E71502E28B47AB551168B3 - -I=7 -KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0 -PT=0659DF46427162B9434865DD9499F91D -CT=A469DA517119FAB95876F41D06D40FFA - -I=8 -KEY=D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=49A44239C748FEB456F59C276A5658DF -CT=6091AA3B695C11F5C0B6AD26D3D862FF - -I=9 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C -PT=66208F6E9D04525BDEDB2733B6A6BE37 -CT=70F9E67F9F8DF1294131662DC6E69364 - -I=10 -KEY=0E0F10111314151618191A1B1D1E1F20222324252728292A -PT=3393F8DFC729C97F5480B950BC9666B0 -CT=D154DCAFAD8B207FA5CBC95E9996B559 - -I=11 -KEY=2C2D2E2F31323334363738393B3C3D3E4041424345464748 -PT=606834C8CE063F3234CF1145325DBD71 -CT=4934D541E8B46FA339C805A7AEB9E5DA - -I=12 -KEY=4A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=FEC1C04F529BBD17D8CECFCC4718B17F -CT=62564C738F3EFE186E1A127A0C4D3C61 - -I=13 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384 -PT=32DF99B431ED5DC5ACF8CAF6DC6CE475 -CT=07805AA043986EB23693E23BEF8F3438 - -I=14 -KEY=868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2 -PT=7FDC2B746F3F665296943B83710D1F82 -CT=DF0B4931038BADE848DEE3B4B85AA44B - -I=15 -KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0 -PT=8FBA1510A3C5B87E2EAA3F7A91455CA2 -CT=592D5FDED76582E4143C65099309477C - -I=16 -KEY=C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=2C9B468B1C2EED92578D41B0716B223B -CT=C9B8D6545580D3DFBCDD09B954ED4E92 - -I=17 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFC -PT=0A2BBF0EFC6BC0034F8A03433FCA1B1A -CT=5DCCD5D6EB7C1B42ACB008201DF707A0 - -I=18 -KEY=FEFE01010304050608090A0B0D0E0F10121314151718191A -PT=25260E1F31F4104D387222E70632504B -CT=A2A91682FFEB6ED1D34340946829E6F9 - -I=19 -KEY=1C1D1E1F21222324262728292B2C2D2E3031323335363738 -PT=C527D25A49F08A5228D338642AE65137 -CT=E45D185B797000348D9267960A68435D - -I=20 -KEY=3A3B3C3D3F40414244454647494A4B4C4E4F505153545556 -PT=3B49FC081432F5890D0E3D87E884A69E -CT=45E060DAE5901CDA8089E10D4F4C246B - -I=21 -KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374 -PT=D173F9ED1E57597E166931DF2754A083 -CT=F6951AFACC0079A369C71FDCFF45DF50 - -I=22 -KEY=767778797B7C7D7E80818283858687888A8B8C8D8F909192 -PT=8C2B7CAFA5AFE7F13562DAEAE1ADEDE0 -CT=9E95E00F351D5B3AC3D0E22E626DDAD6 - -I=23 -KEY=94959697999A9B9C9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0 -PT=AAF4EC8C1A815AEB826CAB741339532C -CT=9CB566FF26D92DAD083B51FDC18C173C - -I=24 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBEC -PT=40BE8C5D9108E663F38F1A2395279ECF -CT=C9C82766176A9B228EB9A974A010B4FB - -I=25 -KEY=2A2B2C2D2F30313234353637393A3B3C3E3F404143444546 -PT=0C8AD9BC32D43E04716753AA4CFBE351 -CT=D8E26AA02945881D5137F1C1E1386E88 - -I=26 -KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364 -PT=1407B1D5F87D63357C8DC7EBBAEBBFEE -CT=C0E024CCD68FF5FFA4D139C355A77C55 - -I=27 -KEY=84858687898A8B8C8E8F90919394959698999A9B9D9E9FA0 -PT=E62734D1AE3378C4549E939E6F123416 -CT=0B18B3D16F491619DA338640DF391D43 - -I=28 -KEY=A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=5A752CFF2A176DB1A1DE77F2D2CDEE41 -CT=DBE09AC8F66027BF20CB6E434F252EFC - -I=29 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDC -PT=A9C8C3A4EABEDC80C64730DDD018CD88 -CT=6D04E5E43C5B9CBE05FEB9606B6480FE - -I=30 -KEY=1A1B1C1D1F20212224252627292A2B2C2E2F303133343536 -PT=EE9B3DBBDB86180072130834D305999A -CT=DD1D6553B96BE526D9FEE0FBD7176866 - -I=31 -KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354 -PT=A7FA8C3586B8EBDE7568EAD6F634A879 -CT=0260CA7E3F979FD015B0DD4690E16D2A - -I=32 -KEY=929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=37E0F4A87F127D45AC936FE7AD88C10A -CT=9893734DE10EDCC8A67C3B110B8B8CC6 - -I=33 -KEY=464748494B4C4D4E50515253555657585A5B5C5D5F606162 -PT=3F77D8B5D92BAC148E4E46F697A535C5 -CT=93B30B750516B2D18808D710C2EE84EF - -I=34 -KEY=828384858788898A8C8D8E8F91929394969798999B9C9D9E -PT=D25EBB686C40F7E2C4DA1014936571CA -CT=16F65FA47BE3CB5E6DFE7C6C37016C0E - -I=35 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBC -PT=4F1C769D1E5B0552C7ECA84DEA26A549 -CT=F3847210D5391E2360608E5ACB560581 - -I=36 -KEY=BEBFC0C1C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA -PT=8548E2F882D7584D0FAFC54372B6633A -CT=8754462CD223366D0753913E6AF2643D - -I=37 -KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8 -PT=87D7A336CB476F177CD2A51AF2A62CDF -CT=1EA20617468D1B806A1FD58145462017 - -I=38 -KEY=FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 -PT=03B1FEAC668C4E485C1065DFC22B44EE -CT=3B155D927355D737C6BE9DDA60136E2E - -I=39 -KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334 -PT=BDA15E66819FA72D653A6866AA287962 -CT=26144F7B66DAA91B6333DBD3850502B3 - -I=40 -KEY=363738393B3C3D3E40414243454647484A4B4C4D4F505152 -PT=4D0C7A0D2505B80BF8B62CEB12467F0A -CT=E4F9A4AB52CED8134C649BF319EBCC90 - -I=41 -KEY=54555657595A5B5C5E5F60616364656668696A6B6D6E6F70 -PT=626D34C9429B37211330986466B94E5F -CT=B9DDD29AC6128A6CAB121E34A4C62B36 - -I=42 -KEY=727374757778797A7C7D7E7F81828384868788898B8C8D8E -PT=333C3E6BF00656B088A17E5FF0E7F60A -CT=6FCDDAD898F2CE4EFF51294F5EAAF5C9 - -I=43 -KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABAC -PT=687ED0CDC0D2A2BC8C466D05EF9D2891 -CT=C9A6FE2BF4028080BEA6F7FC417BD7E3 - -I=44 -KEY=AEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA -PT=487830E78CC56C1693E64B2A6660C7B6 -CT=6A2026846D8609D60F298A9C0673127F - -I=45 -KEY=CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8 -PT=7A48D6B7B52B29392AA2072A32B66160 -CT=2CB25C005E26EFEA44336C4C97A4240B - -I=46 -KEY=EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 -PT=907320E64C8C5314D10F8D7A11C8618D -CT=496967AB8680DDD73D09A0E4C7DCC8AA - -I=47 -KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324 -PT=B561F2CA2D6E65A4A98341F3ED9FF533 -CT=D5AF94DE93487D1F3A8C577CB84A66A4 - -I=48 -KEY=262728292B2C2D2E30313233353637383A3B3C3D3F404142 -PT=DF769380D212792D026F049E2E3E48EF -CT=84BDAC569CAE2828705F267CC8376E90 - -I=49 -KEY=44454647494A4B4C4E4F50515354555658595A5B5D5E5F60 -PT=79F374BC445BDABF8FCCB8843D6054C6 -CT=F7401DDA5AD5AB712B7EB5D10C6F99B6 - -I=50 -KEY=626364656768696A6C6D6E6F71727374767778797B7C7D7E -PT=4E02F1242FA56B05C68DBAE8FE44C9D6 -CT=1C9D54318539EBD4C3B5B7E37BF119F0 - -I=51 -KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C -PT=CF73C93CBFF57AC635A6F4AD2A4A1545 -CT=ACA572D65FB2764CFFD4A6ECA090EA0D - -I=52 -KEY=9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA -PT=9923548E2875750725B886566784C625 -CT=36D9C627B8C2A886A10CCB36EAE3DFBB - -I=53 -KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8 -PT=4888336B723A022C9545320F836A4207 -CT=010EDBF5981E143A81D646E597A4A568 - -I=54 -KEY=DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=F84D9A5561B0608B1160DEE000C41BA8 -CT=8DB44D538DC20CC2F40F3067FD298E60 - -I=55 -KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314 -PT=C23192A0418E30A19B45AE3E3625BF22 -CT=930EB53BC71E6AC4B82972BDCD5AAFB3 - -I=56 -KEY=161718191B1C1D1E20212223252627282A2B2C2D2F303132 -PT=B84E0690B28B0025381AD82A15E501A7 -CT=6C42A81EDCBC9517CCD89C30C95597B4 - -I=57 -KEY=34353637393A3B3C3E3F40414344454648494A4B4D4E4F50 -PT=ACEF5E5C108876C4F06269F865B8F0B0 -CT=DA389847AD06DF19D76EE119C71E1DD3 - -I=58 -KEY=525354555758595A5C5D5E5F61626364666768696B6C6D6E -PT=0F1B3603E0F5DDEA4548246153A5E064 -CT=E018FDAE13D3118F9A5D1A647A3F0462 - -I=59 -KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C -PT=FBB63893450D42B58C6D88CD3C1809E3 -CT=2AA65DB36264239D3846180FABDFAD20 - -I=60 -KEY=8E8F90919394959698999A9B9D9E9FA0A2A3A4A5A7A8A9AA -PT=4BEF736DF150259DAE0C91354E8A5F92 -CT=1472163E9A4F780F1CEB44B07ECF4FDB - -I=61 -KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8 -PT=7D2D46242056EF13D3C3FC93C128F4C7 -CT=C8273FDC8F3A9F72E91097614B62397C - -I=62 -KEY=CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=E9C1BA2DF415657A256EDB33934680FD -CT=66C8427DCD733AAF7B3470CB7D976E3F - -I=63 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304 -PT=E23EE277B0AA0A1DFB81F7527C3514F1 -CT=146131CB17F1424D4F8DA91E6F80C1D0 - -I=64 -KEY=060708090B0C0D0E10111213151617181A1B1C1D1F202122 -PT=3E7445B0B63CAAF75E4A911E12106B4C -CT=2610D0AD83659081AE085266A88770DC - -I=65 -KEY=24252627292A2B2C2E2F30313334353638393A3B3D3E3F40 -PT=767774752023222544455A5BE6E1E0E3 -CT=38A2B5A974B0575C5D733917FB0D4570 - -I=66 -KEY=424344454748494A4C4D4E4F51525354565758595B5C5D5E -PT=72737475717E7F7CE9E8EBEA696A6B6C -CT=E21D401EBC60DE20D6C486E4F39A588B - -I=67 -KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C -PT=DFDEDDDC25262728C9C8CFCEF1EEEFEC -CT=E51D5F88C670B079C0CA1F0C2C4405A2 - -I=68 -KEY=7E7F80818384858688898A8B8D8E8F90929394959798999A -PT=FFFE0100707776755F5E5D5C7675746B -CT=246A94788A642FB3D1B823C8762380C8 - -I=69 -KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8 -PT=E0E1E2E3424140479F9E9190292E2F2C -CT=B80C391C5C41A4C3B30C68E0E3D7550F - -I=70 -KEY=BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=2120272690EFEEED3B3A39384E4D4C4B -CT=B77C4754FC64EB9A1154A9AF0BB1F21C - -I=71 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4 -PT=ECEDEEEF5350516EA1A0A7A6A3ACADAE -CT=FB554DE520D159A06BF219FC7F34A02F - -I=72 -KEY=F6F7F8F9FBFCFDFE00010203050607080A0B0C0D0F101112 -PT=32333C3D25222320E9E8EBEACECDCCC3 -CT=A89FBA152D76B4927BEED160DDB76C57 - -I=73 -KEY=14151617191A1B1C1E1F20212324252628292A2B2D2E2F30 -PT=40414243626160678A8BB4B511161714 -CT=5676EAB4A98D2E8473B3F3D46424247C - -I=74 -KEY=323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=94959293F5FAFBF81F1E1D1C7C7F7E79 -CT=4E8F068BD7EDE52A639036EC86C33568 - -I=75 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C -PT=BEBFBCBD191A1B14CFCEC9C8546B6A69 -CT=F0193C4D7AFF1791EE4C07EB4A1824FC - -I=76 -KEY=6E6F70717374757678797A7B7D7E7F80828384858788898A -PT=2C2D3233898E8F8CBBBAB9B8333031CE -CT=AC8686EECA9BA761AFE82D67B928C33F - -I=77 -KEY=8C8D8E8F91929394969798999B9C9D9EA0A1A2A3A5A6A7A8 -PT=84858687BFBCBDBA37363938FDFAFBF8 -CT=5FAF8573E33B145B6A369CD3606AB2C9 - -I=78 -KEY=AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=828384857669686B909192930B08090E -CT=31587E9944AB1C16B844ECAD0DF2E7DA - -I=79 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4 -PT=BEBFBCBD9695948B707176779E919093 -CT=D017FECD91148ABA37F6F3068AA67D8A - -I=80 -KEY=E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8FAFBFCFDFE010002 -PT=8B8A85846067666521202322D0D3D2DD -CT=788EF2F021A73CBA2794B616078A8500 - -I=81 -KEY=04050607090A0B0C0E0F10111314151618191A1B1D1E1F20 -PT=76777475F1F2F3F4F8F9E6E777707172 -CT=5D1EF20DCED6BCBC12131AC7C54788AA - -I=82 -KEY=222324252728292A2C2D2E2F31323334363738393B3C3D3E -PT=A4A5A2A34F404142B4B5B6B727242522 -CT=B3C8CF961FAF9EA05FDDE6D1E4D8F663 - -I=83 -KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C -PT=94959697E1E2E3EC16171011839C9D9E -CT=143075C70605861C7FAC6526199E459F - -I=84 -KEY=5E5F60616364656668696A6B6D6E6F70727374757778797A -PT=03023D3C06010003DEDFDCDDFFFCFDE2 -CT=A5AE12EADE9A87268D898BFC8FC0252A - -I=85 -KEY=7C7D7E7F81828384868788898B8C8D8E9091929395969798 -PT=10111213F1F2F3F4CECFC0C1DBDCDDDE -CT=0924F7CF2E877A4819F5244A360DCEA9 - -I=86 -KEY=9A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=67666160724D4C4F1D1C1F1E73707176 -CT=3D9E9635AFCC3E291CC7AB3F27D1C99A - -I=87 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4 -PT=E6E7E4E5A8ABAAD584858283909F9E9D -CT=9D80FEEBF87510E2B8FB98BB54FD788C - -I=88 -KEY=D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 -PT=71707F7E565150537D7C7F7E6162636C -CT=5F9D1A082A1A37985F174002ECA01309 - -I=89 -KEY=F4F5F6F7F9FAFBFCFEFE01010304050608090A0B0D0E0F10 -PT=64656667212223245555AAAA03040506 -CT=A390EBB1D1403930184A44B4876646E4 - -I=90 -KEY=121314151718191A1C1D1E1F21222324262728292B2C2D2E -PT=9E9F9899ABA4A5A6CFCECDCC2B28292E -CT=700FE918981C3195BB6C4BCB46B74E29 - -I=91 -KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C -PT=C7C6C5C4D1D2D3DC626364653A454447 -CT=907984406F7BF2D17FB1EB15B673D747 - -I=92 -KEY=4E4F50515354555658595A5B5D5E5F60626364656768696A -PT=F6F7E8E9E0E7E6E51D1C1F1E5B585966 -CT=C32A956DCFC875C2AC7C7CC8B8CC26E1 - -I=93 -KEY=6C6D6E6F71727374767778797B7C7D7E8081828385868788 -PT=BCBDBEBF5D5E5F5868696667F4F3F2F1 -CT=02646E2EBFA9B820CF8424E9B9B6EB51 - -I=94 -KEY=8A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 -PT=40414647B0AFAEAD9B9A99989B98999E -CT=621FDA3A5BBD54C6D3C685816BD4EAD8 - -I=95 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4 -PT=69686B6A0201001F0F0E0908B4BBBAB9 -CT=D4E216040426DFAF18B152469BC5AC2F - -I=96 -KEY=C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 -PT=C7C6C9C8D8DFDEDD5A5B5859BEBDBCB3 -CT=9D0635B9D33B6CDBD71F5D246EA17CC8 - -I=97 -KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6F8F9FAFBFDFEFE00 -PT=DEDFDCDD787B7A7DFFFEE1E0B2B5B4B7 -CT=10ABAD1BD9BAE5448808765583A2CC1A - -I=98 -KEY=020304050708090A0C0D0E0F11121314161718191B1C1D1E -PT=4D4C4B4A606F6E6DD0D1D2D3FBF8F9FE -CT=6891889E16544E355FF65A793C39C9A8 - -I=99 -KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C -PT=B7B6B5B4D7D4D5DAE5E4E3E2E1FEFFFC -CT=CC735582E68072C163CD9DDF46B91279 - -I=100 -KEY=3E3F40414344454648494A4B4D4E4F50525354555758595A -PT=CECFB0B1F7F0F1F2AEAFACAD3E3D3C23 -CT=C5C68B9AEEB7F878DF578EFA562F9574 - -I=101 -KEY=5C5D5E5F61626364666768696B6C6D6E7071727375767778 -PT=CACBC8C9CDCECFC812131C1D494E4F4C -CT=5F4764395A667A47D73452955D0D2CE8 - -I=102 -KEY=7A7B7C7D7F80818284858687898A8B8C8E8F909193949596 -PT=9D9C9B9AD22D2C2FB1B0B3B20C0F0E09 -CT=701448331F66106CEFDDF1EB8267C357 - -I=103 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4 -PT=7A7B787964676659959493924F404142 -CT=CB3EE56D2E14B4E1941666F13379D657 - -I=104 -KEY=B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 -PT=AAABA4A5CEC9C8CB1F1E1D1CABA8A9A6 -CT=9FE16EFD18AB6E1981191851FEDB0764 - -I=105 -KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6E8E9EAEBEDEEEFF0 -PT=93929190282B2A2DC4C5FAFB92959497 -CT=3DC9BA24E1B223589B147ADCEB4C8E48 - -I=106 -KEY=F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E -PT=EFEEE9E8DED1D0D339383B3A888B8A8D -CT=1C333032682E7D4DE5E5AFC05C3E483C - -I=107 -KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C -PT=7F7E7D7CA2A1A0AF78797E7F112E2F2C -CT=D593CC99A95AFEF7E92038E05A59D00A - -I=108 -KEY=2E2F30313334353638393A3B3D3E3F40424344454748494A -PT=84859A9B2B2C2D2E868784852625245B -CT=51E7F96F53B4353923452C222134E1EC - -I=109 -KEY=4C4D4E4F51525354565758595B5C5D5E6061626365666768 -PT=B0B1B2B3070405026869666710171615 -CT=4075B357A1A2B473400C3B25F32F81A4 - -I=110 -KEY=6A6B6C6D6F70717274757677797A7B7C7E7F808183848586 -PT=ACADAAABBDA2A3A00D0C0F0E595A5B5C -CT=302E341A3EBCD74F0D55F61714570284 - -I=111 -KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4 -PT=121310115655544B5253545569666764 -CT=57ABDD8231280DA01C5042B78CF76522 - -I=112 -KEY=A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 -PT=DEDFD0D166616063EAEBE8E94142434C -CT=17F9EA7EEA17AC1ADF0E190FEF799E92 - -I=113 -KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6D8D9DADBDDDEDFE0 -PT=DBDAD9D81417161166677879E0E7E6E5 -CT=2E1BDD563DD87EE5C338DD6D098D0A7A - -I=114 -KEY=E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=6A6B6C6DE0EFEEED2B2A2928C0C3C2C5 -CT=EB869996E6F8BFB2BFDD9E0C4504DBB2 - -I=115 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C -PT=B1B0B3B21714151A1A1B1C1D5649484B -CT=C2E01549E9DECF317468B3E018C61BA8 - -I=116 -KEY=1E1F20212324252628292A2B2D2E2F30323334353738393A -PT=39380706A3A4A5A6C4C5C6C77271706F -CT=8DA875D033C01DD463B244A1770F4A22 - -I=117 -KEY=3C3D3E3F41424344464748494B4C4D4E5051525355565758 -PT=5C5D5E5F1013121539383736E2E5E4E7 -CT=8BA0DCF3A186844F026D022F8839D696 - -I=118 -KEY=5A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=43424544EAD5D4D72E2F2C2D64676661 -CT=E9691FF9A6CC6970E51670A0FD5B88C1 - -I=119 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394 -PT=55545756989B9A65F8F9FEFF18171615 -CT=F2BAEC06FAEED30F88EE63BA081A6E5B - -I=120 -KEY=969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2 -PT=05040B0A525554573C3D3E3F4A494847 -CT=9C39D4C459AE5753394D6094ADC21E78 - -I=121 -KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0 -PT=14151617595A5B5C8584FBFA8E89888B -CT=6345B532A11904502EA43BA99C6BD2B2 - -I=122 -KEY=D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=7C7D7A7BFDF2F3F029282B2A51525354 -CT=5FFAE3061A95172E4070CEDCE1E428C8 - -I=123 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C -PT=38393A3B1E1D1C1341404746C23D3C3E -CT=0A4566BE4CDF9ADCE5DEC865B5AB34CD - -I=124 -KEY=0E0F10111314151618191A1B1D1E1F20222324252728292A -PT=8D8C939240474645818083827C7F7E41 -CT=CA17FCCE79B7404F2559B22928F126FB - -I=125 -KEY=2C2D2E2F31323334363738393B3C3D3E4041424345464748 -PT=3B3A39381A19181F32333C3D45424340 -CT=97CA39B849ED73A6470A97C821D82F58 - -I=126 -KEY=4A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=F0F1F6F738272625828380817F7C7D7A -CT=8198CB06BC684C6D3E9B7989428DCF7A - -I=127 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384 -PT=89888B8A0407061966676061141B1A19 -CT=F53C464C705EE0F28D9A4C59374928BD - -I=128 -KEY=868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2 -PT=D3D2DDDCAAADACAF9C9D9E9FE8EBEAE5 -CT=9ADB3D4CCA559BB98C3E2ED73DBF1154 - -========== - -KEYSIZE=256 - - -I=1 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 -PT=834EADFCCAC7E1B30664B1ABA44815AB -CT=1946DABF6A03A2A2C3D0B05080AED6FC - -I=2 -KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=D9DC4DBA3021B05D67C0518F72B62BF1 -CT=5ED301D747D3CC715445EBDEC62F2FB4 - -I=3 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=A291D86301A4A739F7392173AA3C604C -CT=6585C8F43D13A6BEAB6419FC5935B9D0 - -I=4 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E -PT=4264B2696498DE4DF79788A9F83E9390 -CT=2A5B56A596680FCC0E05F5E0F151ECAE - -I=5 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=EE9932B3721804D5A83EF5949245B6F6 -CT=F5D6FF414FD2C6181494D20C37F2B8C4 - -I=6 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=E6248F55C5FDCBCA9CBBB01C88A2EA77 -CT=85399C01F59FFFB5204F19F8482F00B8 - -I=7 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 -PT=B8358E41B9DFF65FD461D55A99266247 -CT=92097B4C88A041DDF98144BC8D22E8E7 - -I=8 -KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E -PT=F0E2D72260AF58E21E015AB3A4C0D906 -CT=89BD5B73B356AB412AEF9F76CEA2D65C - -I=9 -KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=475B8B823CE8893DB3C44A9F2A379FF7 -CT=2536969093C55FF9454692F2FAC2F530 - -I=10 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E -PT=688F5281945812862F5F3076CF80412F -CT=07FC76A872843F3F6E0081EE9396D637 - -I=11 -KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=08D1D2BC750AF553365D35E75AFACEAA -CT=E38BA8EC2AA741358DCC93E8F141C491 - -I=12 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=8707121F47CC3EFCECA5F9A8474950A1 -CT=D028EE23E4A89075D0B03E868D7D3A42 - -I=13 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 -PT=E51AA0B135DBA566939C3B6359A980C5 -CT=8CD9423DFC459E547155C5D1D522E540 - -I=14 -KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E -PT=069A007FC76A459F98BAF917FEDF9521 -CT=080E9517EB1677719ACF728086040AE3 - -I=15 -KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 -PT=726165C1723FBCF6C026D7D00B091027 -CT=7C1700211A3991FC0ECDED0AB3E576B0 - -I=16 -KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E -PT=D7C544DE91D55CFCDE1F84CA382200CE -CT=DABCBCC855839251DB51E224FBE87435 - -I=17 -KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 -PT=FED3C9A161B9B5B2BD611B41DC9DA357 -CT=68D56FAD0406947A4DD27A7448C10F1D - -I=18 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=4F634CDC6551043409F30B635832CF82 -CT=DA9A11479844D1FFEE24BBF3719A9925 - -I=19 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=109CE98DB0DFB36734D9F3394711B4E6 -CT=5E4BA572F8D23E738DA9B05BA24B8D81 - -I=20 -KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 -PT=4EA6DFABA2D8A02FFDFFA89835987242 -CT=A115A2065D667E3F0B883837A6E903F8 - -I=21 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=5AE094F54AF58E6E3CDBF976DAC6D9EF -CT=3E9E90DC33EAC2437D86AD30B137E66E - -I=22 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=764D8E8E0F29926DBE5122E66354FDBE -CT=01CE82D8FBCDAE824CB3C48E495C3692 - -I=23 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E -PT=3F0418F888CDF29A982BF6B75410D6A9 -CT=0C9CFF163CE936FAAF083CFD3DEA3117 - -I=24 -KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 -PT=E4A3E7CB12CDD56AA4A75197A9530220 -CT=5131BA9BD48F2BBA85560680DF504B52 - -I=25 -KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E -PT=211677684AAC1EC1A160F44C4EBF3F26 -CT=9DC503BBF09823AEC8A977A5AD26CCB2 - -I=26 -KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 -PT=D21E439FF749AC8F18D6D4B105E03895 -CT=9A6DB0C0862E506A9E397225884041D7 - -I=27 -KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=D9F6FF44646C4725BD4C0103FF5552A7 -CT=430BF9570804185E1AB6365FC6A6860C - -I=28 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=0B1256C2A00B976250CFC5B0C37ED382 -CT=3525EBC02F4886E6A5A3762813E8CE8A - -I=29 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=B056447FFC6DC4523A36CC2E972A3A79 -CT=07FA265C763779CCE224C7BAD671027B - -I=30 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 -PT=5E25CA78F0DE55802524D38DA3FE4456 -CT=E8B72B4E8BE243438C9FFF1F0E205872 - -I=31 -KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=A5BCF4728FA5EAAD8567C0DC24675F83 -CT=109D4F999A0E11ACE1F05E6B22CBCB50 - -I=32 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=814E59F97ED84646B78B2CA022E9CA43 -CT=45A5E8D4C3ED58403FF08D68A0CC4029 - -I=33 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E -PT=15478BEEC58F4775C7A7F5D4395514D7 -CT=196865964DB3D417B6BD4D586BCB7634 - -I=34 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=253548FFCA461C67C8CBC78CD59F4756 -CT=60436AD45AC7D30D99195F815D98D2AE - -I=35 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=FD7AD8D73B9B0F8CC41600640F503D65 -CT=BB07A23F0B61014B197620C185E2CD75 - -I=36 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 -PT=06199DE52C6CBF8AF954CD65830BCD56 -CT=5BC0B2850129C854423AFF0751FE343B - -I=37 -KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E -PT=F17C4FFE48E44C61BD891E257E725794 -CT=7541A78F96738E6417D2A24BD2BECA40 - -I=38 -KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=9A5B4A402A3E8A59BE6BF5CD8154F029 -CT=B0A303054412882E464591F1546C5B9E - -I=39 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E -PT=79BD40B91A7E07DC939D441782AE6B17 -CT=778C06D8A355EEEE214FCEA14B4E0EEF - -I=40 -KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=D8CEAAF8976E5FBE1012D8C84F323799 -CT=09614206D15CBACE63227D06DB6BEEBB - -I=41 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=3316E2751E2E388B083DA23DD6AC3FBE -CT=41B97FB20E427A9FDBBB358D9262255D - -I=42 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 -PT=8B7CFBE37DE7DCA793521819242C5816 -CT=C1940F703D845F957652C2D64ABD7ADF - -I=43 -KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E -PT=F23F033C0EEBF8EC55752662FD58CE68 -CT=D2D44FCDAE5332343366DB297EFCF21B - -I=44 -KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 -PT=59EB34F6C8BDBACC5FC6AD73A59A1301 -CT=EA8196B79DBE167B6AA9896E287EED2B - -I=45 -KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E -PT=DCDE8B6BD5CF7CC22D9505E3CE81261A -CT=D6B0B0C4BA6C7DBE5ED467A1E3F06C2D - -I=46 -KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 -PT=E33CF7E524FED781E7042FF9F4B35DC7 -CT=EC51EB295250C22C2FB01816FB72BCAE - -I=47 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=27963C8FACDF73062867D164DF6D064C -CT=ADED6630A07CE9C7408A155D3BD0D36F - -I=48 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=77B1CE386B551B995F2F2A1DA994EEF8 -CT=697C9245B9937F32F5D1C82319F0363A - -I=49 -KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E -PT=F083388B013679EFCF0BB9B15D52AE5C -CT=AAD5AD50C6262AAEC30541A1B7B5B19C - -I=50 -KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 -PT=C5009E0DAB55DB0ABDB636F2600290C8 -CT=7D34B893855341EC625BD6875AC18C0D - -I=51 -KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E -PT=7804881E26CD532D8514D3683F00F1B9 -CT=7EF05105440F83862F5D780E88F02B41 - -I=52 -KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 -PT=46CDDCD73D1EB53E675CA012870A92A3 -CT=C377C06403382061AF2C9C93A8E70DF6 - -I=53 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=A9FB44062BB07FE130A8E8299EACB1AB -CT=1DBDB3FFDC052DACC83318853ABC6DE5 - -I=54 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=2B6FF8D7A5CC3A28A22D5A6F221AF26B -CT=69A6EAB00432517D0BF483C91C0963C7 - -I=55 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E -PT=1A9527C29B8ADD4B0E3E656DBB2AF8B4 -CT=0797F41DC217C80446E1D514BD6AB197 - -I=56 -KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 -PT=7F99CF2C75244DF015EB4B0C1050AEAE -CT=9DFD76575902A637C01343C58E011A03 - -I=57 -KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E -PT=E84FF85B0D9454071909C1381646C4ED -CT=ACF4328AE78F34B9FA9B459747CC2658 - -I=58 -KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 -PT=89AFD40F99521280D5399B12404F6DB4 -CT=B0479AEA12BAC4FE2384CF98995150C6 - -I=59 -KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=A09EF32DBC5119A35AB7FA38656F0329 -CT=9DD52789EFE3FFB99F33B3DA5030109A - -I=60 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=61773457F068C376C7829B93E696E716 -CT=ABBB755E4621EF8F1214C19F649FB9FD - -I=61 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=A34F0CAE726CCE41DD498747D891B967 -CT=DA27FB8174357BCE2BED0E7354F380F9 - -I=62 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 -PT=856F59496C7388EE2D2B1A27B7697847 -CT=C59A0663F0993838F6E5856593BDC5EF - -I=63 -KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=CB090C593EF7720BD95908FB93B49DF4 -CT=ED60B264B5213E831607A99C0CE5E57E - -I=64 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=A0AC75CD2F1923D460FC4D457AD95BAF -CT=E50548746846F3EB77B8C520640884ED - -I=65 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E -PT=2A2B282974777689E8E9EEEF525D5C5F -CT=28282CC7D21D6A2923641E52D188EF0C - -I=66 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=909192939390919E0F0E09089788898A -CT=0DFA5B02ABB18E5A815305216D6D4F8E - -I=67 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=777675748D8E8F907170777649464744 -CT=7359635C0EECEFE31D673395FB46FB99 - -I=68 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 -PT=717073720605040B2D2C2B2A05FAFBF9 -CT=73C679F7D5AEF2745C9737BB4C47FB36 - -I=69 -KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E -PT=64656667FEFDFCC31B1A1D1CA5AAABA8 -CT=B192BD472A4D2EAFB786E97458967626 - -I=70 -KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=DBDAD9D86A696867B5B4B3B2C8D7D6D5 -CT=0EC327F6C8A2B147598CA3FDE61DC6A4 - -I=71 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E -PT=5C5D5E5FE3E0E1FE31303736333C3D3E -CT=FC418EB3C41B859B38D4B6F646629729 - -I=72 -KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=545556574B48494673727574546B6A69 -CT=30249E5AC282B1C981EA64B609F3A154 - -I=73 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=ECEDEEEFC6C5C4BB56575051F5FAFBF8 -CT=5E6E08646D12150776BB43C2D78A9703 - -I=74 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 -PT=464744452724252AC9C8CFCED2CDCCCF -CT=FAEB3D5DE652CD3447DCEB343F30394A - -I=75 -KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E -PT=E6E7E4E54142435C878681801C131211 -CT=A8E88706823F6993EF80D05C1C7B2CF0 - -I=76 -KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 -PT=72737071CFCCCDC2F9F8FFFE710E0F0C -CT=8CED86677E6E00A1A1B15968F2D3CCE6 - -I=77 -KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E -PT=505152537370714EC3C2C5C4010E0F0C -CT=9FC7C23858BE03BDEBB84E90DB6786A9 - -I=78 -KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 -PT=A8A9AAAB5C5F5E51AEAFA8A93D222320 -CT=B4FBD65B33F70D8CF7F1111AC4649C36 - -I=79 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=DEDFDCDDF6F5F4EB10111617FEF1F0F3 -CT=C5C32D5ED03C4B53CC8C1BD0EF0DBBF6 - -I=80 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=BDBCBFBE5E5D5C530B0A0D0CFAC5C4C7 -CT=D1A7F03B773E5C212464B63709C6A891 - -I=81 -KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E -PT=8A8B8889050606F8F4F5F2F3636C6D6E -CT=6B7161D8745947AC6950438EA138D028 - -I=82 -KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 -PT=A6A7A4A54D4E4F40B2B3B4B539262724 -CT=FD47A9F7E366EE7A09BC508B00460661 - -I=83 -KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E -PT=9C9D9E9FE9EAEBF40E0F08099B949596 -CT=00D40B003DC3A0D9310B659B98C7E416 - -I=84 -KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 -PT=2D2C2F2E1013121DCCCDCACBED121310 -CT=EEA4C79DCC8E2BDA691F20AC48BE0717 - -I=85 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=F4F5F6F7EDEEEFD0EAEBECEDF7F8F9FA -CT=E78F43B11C204403E5751F89D05A2509 - -I=86 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=3D3C3F3E282B2A2573727574150A0B08 -CT=D0F0E3D1F1244BB979931E38DD1786EF - -I=87 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E -PT=B6B7B4B5F8FBFAE5B4B5B2B3A0AFAEAD -CT=042E639DC4E1E4DDE7B75B749EA6F765 - -I=88 -KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 -PT=B7B6B5B4989B9A95878681809BA4A5A6 -CT=BC032FDD0EFE29503A980A7D07AB46A8 - -I=89 -KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E -PT=A8A9AAABE5E6E798E9E8EFEE4748494A -CT=0C93AC949C0DA6446EFFB86183B6C910 - -I=90 -KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 -PT=ECEDEEEFD9DADBD4B9B8BFBE657A7B78 -CT=E0D343E14DA75C917B4A5CEC4810D7C2 - -I=91 -KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=7F7E7D7C696A6B74CACBCCCD929D9C9F -CT=0EAFB821748408279B937B626792E619 - -I=92 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=08090A0B0605040BFFFEF9F8B9C6C7C4 -CT=FA1AC6E02D23B106A1FEF18B274A553F - -I=93 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=08090A0BF1F2F3CCFCFDFAFB68676665 -CT=0DADFE019CD12368075507DF33C1A1E9 - -I=94 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 -PT=CACBC8C93A393837050403020D121310 -CT=3A0879B414465D9FFBAF86B33A63A1B9 - -I=95 -KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=E9E8EBEA8281809F8F8E8988343B3A39 -CT=62199FADC76D0BE1805D3BA0B7D914BF - -I=96 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=515053524645444BD0D1D6D7340B0A09 -CT=1B06D6C5D333E742730130CF78E719B4 - -I=97 -KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E -PT=42434041ECEFEE1193929594C6C9C8CB -CT=F1F848824C32E9DCDCBF21580F069329 - -I=98 -KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 -PT=EFEEEDECC2C1C0CF76777071455A5B58 -CT=1A09050CBD684F784D8E965E0782F28A - -I=99 -KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE -PT=5F5E5D5C3F3C3D221D1C1B1A19161714 -CT=79C2969E7DED2BA7D088F3F320692360 - -I=100 -KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 -PT=000102034142434C1C1D1A1B8D727371 -CT=091A658A2F7444C16ACCB669450C7B63 - -I=101 -KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E -PT=8E8F8C8DB1B2B38C56575051050A0B08 -CT=97C1E3A72CCA65FA977D5ED0E8A7BBFC - -I=102 -KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 -PT=A7A6A5A4E8EBEAE57F7E7978CAD5D4D7 -CT=70C430C6DB9A17828937305A2DF91A2A - -I=103 -KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E -PT=8A8B888994979689454443429F909192 -CT=629553457FBE2479098571C7C903FDE8 - -I=104 -KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 -PT=8C8D8E8FE0E3E2ED45444342F1CECFCC -CT=A25B25A61F612669E7D91265C7D476BA - -I=105 -KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE -PT=FFFEFDFC4C4F4E31D8D9DEDFB6B9B8BB -CT=EB7E4E49B8AE0F024570DDA293254FED - -I=106 -KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 -PT=FDFCFFFECCCFCEC12F2E29286679787B -CT=38FE15D61CCA84516E924ADCE5014F67 - -I=107 -KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E -PT=67666564BAB9B8A77071767719161714 -CT=3AD208492249108C9F3EBEB167AD0583 - -I=108 -KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 -PT=9A9B98992D2E2F2084858283245B5A59 -CT=299BA9F9BF5AB05C3580FC26EDD1ED12 - -I=109 -KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E -PT=A4A5A6A70B0809365C5D5A5B2C232221 -CT=19DC705B857A60FB07717B2EA5717781 - -I=110 -KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 -PT=464744455754555AF3F2F5F4AFB0B1B2 -CT=FFC8AEB885B5EFCAD06B6DBEBF92E76B - -I=111 -KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE -PT=323330317675746B7273747549464744 -CT=F58900C5E0B385253FF2546250A0142B - -I=112 -KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 -PT=A8A9AAAB181B1A15808186872B141516 -CT=2EE67B56280BC462429CEE6E3370CBC1 - -I=113 -KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E -PT=E7E6E5E4202323DDAAABACAD343B3A39 -CT=20DB650A9C8E9A84AB4D25F7EDC8F03F - -I=114 -KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 -PT=A8A9AAAB2221202FEDECEBEA1E010003 -CT=3C36DA169525CF818843805F25B78AE5 - -I=115 -KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E -PT=F9F8FBFA5F5C5D42424344450E010003 -CT=9A781D960DB9E45E37779042FEA51922 - -I=116 -KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 -PT=57565554F5F6F7F89697909120DFDEDD -CT=6560395EC269C672A3C288226EFDBA77 - -I=117 -KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE -PT=F8F9FAFBCCCFCEF1DDDCDBDA0E010003 -CT=8C772B7A189AC544453D5916EBB27B9A - -I=118 -KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 -PT=D9D8DBDA7073727D80818687C2DDDCDF -CT=77CA5468CC48E843D05F78EED9D6578F - -I=119 -KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E -PT=C5C4C7C6080B0A1588898E8F68676665 -CT=72CDCC71DC82C60D4429C9E2D8195BAA - -I=120 -KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 -PT=83828180DCDFDED186878081F0CFCECD -CT=8080D68CE60E94B40B5B8B69EEB35AFA - -I=121 -KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E -PT=98999A9BDDDEDFA079787F7E0A050407 -CT=44222D3CDE299C04369D58AC0EBA1E8E - -I=122 -KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 -PT=CECFCCCD4F4C4D429F9E9998DFC0C1C2 -CT=9B8721B0A8DFC691C5BC5885DBFCB27A - -I=123 -KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE -PT=404142436665647B29282F2EABA4A5A6 -CT=0DC015CE9A3A3414B5E62EC643384183 - -I=124 -KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 -PT=33323130E6E5E4EB23222524DEA1A0A3 -CT=705715448A8DA412025CE38345C2A148 - -I=125 -KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE -PT=CFCECDCCF6F5F4CBE6E7E0E199969794 -CT=C32B5B0B6FBAE165266C569F4B6ECF0B - -I=126 -KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 -PT=BABBB8B97271707FDCDDDADB29363734 -CT=4DCA6C75192A01DDCA9476AF2A521E87 - -I=127 -KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E -PT=C9C8CBCA4447465926272021545B5A59 -CT=058691E627ECBC36AC07B6DB423BD698 - -I=128 -KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 -PT=050407067477767956575051221D1C1F -CT=7444527095838FE080FC2BCDD30847EB - -========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_vk.txt b/src/lib/crypto/aes/test/ecb_vk.txt deleted file mode 100644 index 5dfd60089..000000000 --- a/src/lib/crypto/aes/test/ecb_vk.txt +++ /dev/null @@ -1,2334 +0,0 @@ - -========================= - -FILENAME: "ecb_vk.txt" - -Electronic Codebook (ECB) Mode -Variable Key Known Answer Tests - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 - -PT=00000000000000000000000000000000 - -I=1 -KEY=80000000000000000000000000000000 -CT=0EDD33D3C621E546455BD8BA1418BEC8 - -I=2 -KEY=40000000000000000000000000000000 -CT=C0CC0C5DA5BD63ACD44A80774FAD5222 - -I=3 -KEY=20000000000000000000000000000000 -CT=2F0B4B71BC77851B9CA56D42EB8FF080 - -I=4 -KEY=10000000000000000000000000000000 -CT=6B1E2FFFE8A114009D8FE22F6DB5F876 - -I=5 -KEY=08000000000000000000000000000000 -CT=9AA042C315F94CBB97B62202F83358F5 - -I=6 -KEY=04000000000000000000000000000000 -CT=DBE01DE67E346A800C4C4B4880311DE4 - -I=7 -KEY=02000000000000000000000000000000 -CT=C117D2238D53836ACD92DDCDB85D6A21 - -I=8 -KEY=01000000000000000000000000000000 -CT=DC0ED85DF9611ABB7249CDD168C5467E - -I=9 -KEY=00800000000000000000000000000000 -CT=807D678FFF1F56FA92DE3381904842F2 - -I=10 -KEY=00400000000000000000000000000000 -CT=0E53B3FCAD8E4B130EF73AEB957FB402 - -I=11 -KEY=00200000000000000000000000000000 -CT=969FFD3B7C35439417E7BDE923035D65 - -I=12 -KEY=00100000000000000000000000000000 -CT=A99B512C19CA56070491166A1503BF15 - -I=13 -KEY=00080000000000000000000000000000 -CT=6E9985252126EE344D26AE369D2327E3 - -I=14 -KEY=00040000000000000000000000000000 -CT=B85F4809F904C275491FCDCD1610387E - -I=15 -KEY=00020000000000000000000000000000 -CT=ED365B8D7D20C1F5D53FB94DD211DF7B - -I=16 -KEY=00010000000000000000000000000000 -CT=B3A575E86A8DB4A7135D604C43304896 - -I=17 -KEY=00008000000000000000000000000000 -CT=89704BCB8E69F846259EB0ACCBC7F8A2 - -I=18 -KEY=00004000000000000000000000000000 -CT=C56EE7C92197861F10D7A92B90882055 - -I=19 -KEY=00002000000000000000000000000000 -CT=92F296F6846E0EAF9422A5A24A08B069 - -I=20 -KEY=00001000000000000000000000000000 -CT=E67E32BB8F11DEB8699318BEE9E91A60 - -I=21 -KEY=00000800000000000000000000000000 -CT=B08EEF85EAF626DD91B65C4C3A97D92B - -I=22 -KEY=00000400000000000000000000000000 -CT=661083A6ADDCE79BB4E0859AB5538013 - -I=23 -KEY=00000200000000000000000000000000 -CT=55DFE2941E0EB10AFC0B333BD34DE1FE - -I=24 -KEY=00000100000000000000000000000000 -CT=6BFE5945E715C9662609770F8846087A - -I=25 -KEY=00000080000000000000000000000000 -CT=79848E9C30C2F8CDA8B325F7FED2B139 - -I=26 -KEY=00000040000000000000000000000000 -CT=7A713A53B99FEF34AC04DEEF80965BD0 - -I=27 -KEY=00000020000000000000000000000000 -CT=18144A2B46620D32C3C32CE52D49257F - -I=28 -KEY=00000010000000000000000000000000 -CT=872E827C70887C80749F7B8BB1847C7E - -I=29 -KEY=00000008000000000000000000000000 -CT=6B86C6A4FE6A60C59B1A3102F8DE49F3 - -I=30 -KEY=00000004000000000000000000000000 -CT=9848BB3DFDF6F532F094679A4C231A20 - -I=31 -KEY=00000002000000000000000000000000 -CT=925AD528E852E329B2091CD3F1C2BCEE - -I=32 -KEY=00000001000000000000000000000000 -CT=80DF436544B0DD596722E46792A40CD8 - -I=33 -KEY=00000000800000000000000000000000 -CT=525DAF18F93E83E1E74BBBDDE4263BBA - -I=34 -KEY=00000000400000000000000000000000 -CT=F65C9D2EE485D24701FFA3313B9D5BE6 - -I=35 -KEY=00000000200000000000000000000000 -CT=E4FC8D8BCA06425BDF94AFA40FCC14BA - -I=36 -KEY=00000000100000000000000000000000 -CT=A53F0A5CA1E4E6440BB975FF320DE6F8 - -I=37 -KEY=00000000080000000000000000000000 -CT=D55313B9394080462E87E02899B553F0 - -I=38 -KEY=00000000040000000000000000000000 -CT=34A71D761F71BCD344384C7F97D27906 - -I=39 -KEY=00000000020000000000000000000000 -CT=233F3D819599612EBC89580245C996A8 - -I=40 -KEY=00000000010000000000000000000000 -CT=B4F1374E5268DBCB676E447529E53F89 - -I=41 -KEY=00000000008000000000000000000000 -CT=0816BD27861D2BA891D1044E39951E96 - -I=42 -KEY=00000000004000000000000000000000 -CT=F3BE9EA3F10C73CA64FDE5DB13A951D1 - -I=43 -KEY=00000000002000000000000000000000 -CT=2448086A8106FBD03048DDF857D3F1C8 - -I=44 -KEY=00000000001000000000000000000000 -CT=670756E65BEC8B68F03D77CDCDCE7B91 - -I=45 -KEY=00000000000800000000000000000000 -CT=EF968CF0D36FD6C6EFFD225F6FB44CA9 - -I=46 -KEY=00000000000400000000000000000000 -CT=2E8767157922E3826DDCEC1B0CC1E105 - -I=47 -KEY=00000000000200000000000000000000 -CT=78CE7EEC670E45A967BAB17E26A1AD36 - -I=48 -KEY=00000000000100000000000000000000 -CT=3C5CEE825655F098F6E81A2F417DA3FB - -I=49 -KEY=00000000000080000000000000000000 -CT=67BFDB431DCE1292200BC6F5207ADB12 - -I=50 -KEY=00000000000040000000000000000000 -CT=7540FD38E447C0779228548747843A6F - -I=51 -KEY=00000000000020000000000000000000 -CT=B85E513301F8A936EA9EC8A21A85B5E6 - -I=52 -KEY=00000000000010000000000000000000 -CT=04C67DBF16C11427D507A455DE2C9BC5 - -I=53 -KEY=00000000000008000000000000000000 -CT=03F75EB8959E55079CFFB4FF149A37B6 - -I=54 -KEY=00000000000004000000000000000000 -CT=74550287F666C63BB9BC7838433434B0 - -I=55 -KEY=00000000000002000000000000000000 -CT=7D537200195EBC3AEFD1EAAB1C385221 - -I=56 -KEY=00000000000001000000000000000000 -CT=CE24E4D40C68A82B535CBD3C8E21652A - -I=57 -KEY=00000000000000800000000000000000 -CT=AB20072405AA8FC40265C6F1F3DC8BC0 - -I=58 -KEY=00000000000000400000000000000000 -CT=6CFD2CF688F566B093F67B9B3839E80A - -I=59 -KEY=00000000000000200000000000000000 -CT=BD95977E6B7239D407A012C5544BF584 - -I=60 -KEY=00000000000000100000000000000000 -CT=DF9C0130AC77E7C72C997F587B46DBE0 - -I=61 -KEY=00000000000000080000000000000000 -CT=E7F1B82CADC53A648798945B34EFEFF2 - -I=62 -KEY=00000000000000040000000000000000 -CT=932C6DBF69255CF13EDCDB72233ACEA3 - -I=63 -KEY=00000000000000020000000000000000 -CT=5C76002BC7206560EFE550C80B8F12CC - -I=64 -KEY=00000000000000010000000000000000 -CT=F6B7BDD1CAEEBAB574683893C4475484 - -I=65 -KEY=00000000000000008000000000000000 -CT=A920E37CC6DC6B31DA8C0169569F5034 - -I=66 -KEY=00000000000000004000000000000000 -CT=919380ECD9C778BC513148B0C28D65FD - -I=67 -KEY=00000000000000002000000000000000 -CT=EE67308DD3F2D9E6C2170755E5784BE1 - -I=68 -KEY=00000000000000001000000000000000 -CT=3CC73E53B85609023A05E149B223AE09 - -I=69 -KEY=00000000000000000800000000000000 -CT=983E8AF7CF05EBB28D71EB841C9406E6 - -I=70 -KEY=00000000000000000400000000000000 -CT=0F3099B2D31FA5299EE5BF43193287FC - -I=71 -KEY=00000000000000000200000000000000 -CT=B763D84F38C27FE6931DCEB6715D4DB6 - -I=72 -KEY=00000000000000000100000000000000 -CT=5AE3C9B0E3CC29C0C61565CD01F8A248 - -I=73 -KEY=00000000000000000080000000000000 -CT=F58083572CD90981958565D48D2DEE25 - -I=74 -KEY=00000000000000000040000000000000 -CT=7E6255EEF8F70C0EF10337AAB1CCCEF8 - -I=75 -KEY=00000000000000000020000000000000 -CT=AAD4BAC34DB22821841CE2F631961902 - -I=76 -KEY=00000000000000000010000000000000 -CT=D7431C0409BB1441BA9C6858DC7D4E81 - -I=77 -KEY=00000000000000000008000000000000 -CT=EF9298C65E339F6E801A59C626456993 - -I=78 -KEY=00000000000000000004000000000000 -CT=53FE29F68FF541ABC3F0EF3350B72F7E - -I=79 -KEY=00000000000000000002000000000000 -CT=F6BBA5C10DB02529E2C2DA3FB582CC14 - -I=80 -KEY=00000000000000000001000000000000 -CT=E4239AA37FC531A386DAD1126FC0E9CD - -I=81 -KEY=00000000000000000000800000000000 -CT=8F7758F857D15BBE7BFD0E416404C365 - -I=82 -KEY=00000000000000000000400000000000 -CT=D273EB57C687BCD1B4EA7218A509E7B8 - -I=83 -KEY=00000000000000000000200000000000 -CT=65D64F8D76E8B3423FA25C4EB58A210A - -I=84 -KEY=00000000000000000000100000000000 -CT=623D802B4EC450D66A16625702FCDBE0 - -I=85 -KEY=00000000000000000000080000000000 -CT=7496460CB28E5791BAEAF9B68FB00022 - -I=86 -KEY=00000000000000000000040000000000 -CT=34EA600F18BB0694B41681A49D510C1D - -I=87 -KEY=00000000000000000000020000000000 -CT=5F8FF0D47D5766D29B5D6E8F46423BD8 - -I=88 -KEY=00000000000000000000010000000000 -CT=225F9286C5928BF09F84D3F93F541959 - -I=89 -KEY=00000000000000000000008000000000 -CT=B21E90D25DF383416A5F072CEBEB1FFB - -I=90 -KEY=00000000000000000000004000000000 -CT=4AEFCDA089318125453EB9E8EB5E492E - -I=91 -KEY=00000000000000000000002000000000 -CT=4D3E75C6CD40EC4869BC85158591ADB8 - -I=92 -KEY=00000000000000000000001000000000 -CT=63A8B904405436A1B99D7751866771B7 - -I=93 -KEY=00000000000000000000000800000000 -CT=64F0DAAE47529199792EAE172BA53293 - -I=94 -KEY=00000000000000000000000400000000 -CT=C3EEF84BEA18225D515A8C852A9047EE - -I=95 -KEY=00000000000000000000000200000000 -CT=A44AC422B47D47B81AF73B3E9AC9596E - -I=96 -KEY=00000000000000000000000100000000 -CT=D16E04A8FBC435094F8D53ADF25F5084 - -I=97 -KEY=00000000000000000000000080000000 -CT=EF13DC34BAB03E124EEAD8B6BF44B532 - -I=98 -KEY=00000000000000000000000040000000 -CT=D94799075C24DCC067AF0D392049250D - -I=99 -KEY=00000000000000000000000020000000 -CT=14F431771EDDCE4764C21A2254B5E3C8 - -I=100 -KEY=00000000000000000000000010000000 -CT=7039329F36F2ED682B02991F28D64679 - -I=101 -KEY=00000000000000000000000008000000 -CT=124EE24EDE5551639DB8B8B941F6141D - -I=102 -KEY=00000000000000000000000004000000 -CT=C2852879A34D5184E478EC918B993FEE - -I=103 -KEY=00000000000000000000000002000000 -CT=86A806A3525B93E432053C9AB5ABBEDF - -I=104 -KEY=00000000000000000000000001000000 -CT=C1609BF5A4F07E37C17A36366EC23ECC - -I=105 -KEY=00000000000000000000000000800000 -CT=7E81E7CB92159A51FFCEA331B1E8EA53 - -I=106 -KEY=00000000000000000000000000400000 -CT=37A7BE002856C5A59A6E03EAFCE7729A - -I=107 -KEY=00000000000000000000000000200000 -CT=BDF98A5A4F91E890C9A1D1E5FAAB138F - -I=108 -KEY=00000000000000000000000000100000 -CT=4E96ACB66E051F2BC739CC3D3E34A26B - -I=109 -KEY=00000000000000000000000000080000 -CT=EE996CDD120EB86E21ECFA49E8E1FCF1 - -I=110 -KEY=00000000000000000000000000040000 -CT=61B9E6B579DBF6070C351A1440DD85FF - -I=111 -KEY=00000000000000000000000000020000 -CT=AC369E484316440B40DFC83AA96E28E7 - -I=112 -KEY=00000000000000000000000000010000 -CT=0A2D16DE985C76D45C579C1159413BBE - -I=113 -KEY=00000000000000000000000000008000 -CT=DA3FDC38DA1D374FA4802CDA1A1C6B0F - -I=114 -KEY=00000000000000000000000000004000 -CT=B842523D4C41C2211AFE43A5800ADCE3 - -I=115 -KEY=00000000000000000000000000002000 -CT=9E2CDA90D8E992DBA6C73D8229567192 - -I=116 -KEY=00000000000000000000000000001000 -CT=D49583B781D9E20F5BE101415957FC49 - -I=117 -KEY=00000000000000000000000000000800 -CT=EF09DA5C12B376E458B9B8670032498E - -I=118 -KEY=00000000000000000000000000000400 -CT=A96BE0463DA774461A5E1D5A9DD1AC10 - -I=119 -KEY=00000000000000000000000000000200 -CT=32CEE3341060790D2D4B1362EF397090 - -I=120 -KEY=00000000000000000000000000000100 -CT=21CEA416A3D3359D2C4D58FB6A035F06 - -I=121 -KEY=00000000000000000000000000000080 -CT=172AEAB3D507678ECAF455C12587ADB7 - -I=122 -KEY=00000000000000000000000000000040 -CT=B6F897941EF8EBFF9FE80A567EF38478 - -I=123 -KEY=00000000000000000000000000000020 -CT=A9723259D94A7DC662FB0C782CA3F1DD - -I=124 -KEY=00000000000000000000000000000010 -CT=2F91C984B9A4839F30001B9F430493B4 - -I=125 -KEY=00000000000000000000000000000008 -CT=0472406345A610B048CB99EE0EF3FA0F - -I=126 -KEY=00000000000000000000000000000004 -CT=F5F39086646F8C05ED16EFA4B617957C - -I=127 -KEY=00000000000000000000000000000002 -CT=26D50F485A30408D5AF47A5736292450 - -I=128 -KEY=00000000000000000000000000000001 -CT=0545AAD56DA2A97C3663D1432A3D1C84 - -========== - -KEYSIZE=192 - -PT=00000000000000000000000000000000 - -I=1 -KEY=800000000000000000000000000000000000000000000000 -CT=DE885DC87F5A92594082D02CC1E1B42C - -I=2 -KEY=400000000000000000000000000000000000000000000000 -CT=C749194F94673F9DD2AA1932849630C1 - -I=3 -KEY=200000000000000000000000000000000000000000000000 -CT=0CEF643313912934D310297B90F56ECC - -I=4 -KEY=100000000000000000000000000000000000000000000000 -CT=C4495D39D4A553B225FBA02A7B1B87E1 - -I=5 -KEY=080000000000000000000000000000000000000000000000 -CT=636D10B1A0BCAB541D680A7970ADC830 - -I=6 -KEY=040000000000000000000000000000000000000000000000 -CT=07CF045786BD6AFCC147D99E45A901A7 - -I=7 -KEY=020000000000000000000000000000000000000000000000 -CT=6A8E3F425A7599348F95398448827976 - -I=8 -KEY=010000000000000000000000000000000000000000000000 -CT=5518276836148A00D91089A20D8BFF57 - -I=9 -KEY=008000000000000000000000000000000000000000000000 -CT=F267E07B5E87E3BC20B969C61D4FCB06 - -I=10 -KEY=004000000000000000000000000000000000000000000000 -CT=5A1CDE69571D401BFCD20DEBADA2212C - -I=11 -KEY=002000000000000000000000000000000000000000000000 -CT=70A9057263254701D12ADD7D74CD509E - -I=12 -KEY=001000000000000000000000000000000000000000000000 -CT=35713A7E108031279388A33A0FE2E190 - -I=13 -KEY=000800000000000000000000000000000000000000000000 -CT=E74EDE82B1254714F0C7B4B243108655 - -I=14 -KEY=000400000000000000000000000000000000000000000000 -CT=39272E3100FAA37B55B862320D1B3EB3 - -I=15 -KEY=000200000000000000000000000000000000000000000000 -CT=6D6E24C659FC5AEF712F77BCA19C9DD0 - -I=16 -KEY=000100000000000000000000000000000000000000000000 -CT=76D18212F972370D3CC2C6C372C6CF2F - -I=17 -KEY=000080000000000000000000000000000000000000000000 -CT=B21A1F0BAE39E55C7594ED570A7783EA - -I=18 -KEY=000040000000000000000000000000000000000000000000 -CT=77DE202111895AC48DD1C974B358B458 - -I=19 -KEY=000020000000000000000000000000000000000000000000 -CT=67810B311969012AAF7B504FFAF39FD1 - -I=20 -KEY=000010000000000000000000000000000000000000000000 -CT=C22EA2344D3E9417A6BA07843E713AEA - -I=21 -KEY=000008000000000000000000000000000000000000000000 -CT=C79CAF4B97BEE0BD0630AB354539D653 - -I=22 -KEY=000004000000000000000000000000000000000000000000 -CT=135FD1AF761D9AE23DF4AA6B86760DB4 - -I=23 -KEY=000002000000000000000000000000000000000000000000 -CT=D4659D0B06ACD4D56AB8D11A16FD83B9 - -I=24 -KEY=000001000000000000000000000000000000000000000000 -CT=F7D270028FC188E4E4F35A4AAA25D4D4 - -I=25 -KEY=000000800000000000000000000000000000000000000000 -CT=345CAE5A8C9620A9913D5473985852FF - -I=26 -KEY=000000400000000000000000000000000000000000000000 -CT=4E8980ADDE60B0E42C0B287FEA41E729 - -I=27 -KEY=000000200000000000000000000000000000000000000000 -CT=F11B6D74E1F15155633DC39743C1A527 - -I=28 -KEY=000000100000000000000000000000000000000000000000 -CT=9C87916C0180064F9D3179C6F5DD8C35 - -I=29 -KEY=000000080000000000000000000000000000000000000000 -CT=71AB186BCAEA518E461D4F7FAD230E6A - -I=30 -KEY=000000040000000000000000000000000000000000000000 -CT=C4A31BBC3DAAF742F9141C2A5001A49C - -I=31 -KEY=000000020000000000000000000000000000000000000000 -CT=E7C47B7B1D40F182A8928C8A55671D07 - -I=32 -KEY=000000010000000000000000000000000000000000000000 -CT=8E17F294B28FA373C6249538868A7EEF - -I=33 -KEY=000000008000000000000000000000000000000000000000 -CT=754404096A5CBC08AF09491BE249141A - -I=34 -KEY=000000004000000000000000000000000000000000000000 -CT=101CB56E55F05D86369B6D1069204F0A - -I=35 -KEY=000000002000000000000000000000000000000000000000 -CT=73F19BB6604205C6EE227B9759791E41 - -I=36 -KEY=000000001000000000000000000000000000000000000000 -CT=6270C0028F0D136C37A56B2CB64D24D6 - -I=37 -KEY=000000000800000000000000000000000000000000000000 -CT=A3BF7C2C38D1114A087ECF212E694346 - -I=38 -KEY=000000000400000000000000000000000000000000000000 -CT=49CABFF2CEF7D9F95F5EFB1F7A1A7DDE - -I=39 -KEY=000000000200000000000000000000000000000000000000 -CT=EC7F8A47CC59B849469255AD49F62752 - -I=40 -KEY=000000000100000000000000000000000000000000000000 -CT=68FAE55A13EFAF9B07B3552A8A0DC9D1 - -I=41 -KEY=000000000080000000000000000000000000000000000000 -CT=211E6B19C69FAEF481F64F24099CDA65 - -I=42 -KEY=000000000040000000000000000000000000000000000000 -CT=DBB918C75BC5732416F79FB0C8EE4C5C - -I=43 -KEY=000000000020000000000000000000000000000000000000 -CT=98D494E5D963A6C8B92536D3EC35E3FD - -I=44 -KEY=000000000010000000000000000000000000000000000000 -CT=C9A873404D403D6F074190851D67781A - -I=45 -KEY=000000000008000000000000000000000000000000000000 -CT=073AEF4A7C77D921928CB0DD9D27CAE7 - -I=46 -KEY=000000000004000000000000000000000000000000000000 -CT=89BDE25CEE36FDE769A10E52298CF90F - -I=47 -KEY=000000000002000000000000000000000000000000000000 -CT=26D0842D37EAD38557C65E0A5E5F122E - -I=48 -KEY=000000000001000000000000000000000000000000000000 -CT=F8294BA375AF46B3F22905BBAFFAB107 - -I=49 -KEY=000000000000800000000000000000000000000000000000 -CT=2AD63EB4D0D43813B979CF72B35BDB94 - -I=50 -KEY=000000000000400000000000000000000000000000000000 -CT=7710C171EE0F4EFA39BE4C995180181D - -I=51 -KEY=000000000000200000000000000000000000000000000000 -CT=C0CB2B40DBA7BE8C0698FAE1E4B80FF8 - -I=52 -KEY=000000000000100000000000000000000000000000000000 -CT=97970E505194622FD955CA1B80B784E9 - -I=53 -KEY=000000000000080000000000000000000000000000000000 -CT=7CB1824B29F850900DF2CAD9CF04C1CF - -I=54 -KEY=000000000000040000000000000000000000000000000000 -CT=FDF4F036BB988E42F2F62DE63FE19A64 - -I=55 -KEY=000000000000020000000000000000000000000000000000 -CT=08908CFE2C82606B2C15DF61B75CF3E2 - -I=56 -KEY=000000000000010000000000000000000000000000000000 -CT=B3AA689EF2D07FF365ACB9ADBA2AF07A - -I=57 -KEY=000000000000008000000000000000000000000000000000 -CT=F2672CD8EAA3B98776660D0263656F5C - -I=58 -KEY=000000000000004000000000000000000000000000000000 -CT=5BDEAC00E986687B9E1D94A0DA7BF452 - -I=59 -KEY=000000000000002000000000000000000000000000000000 -CT=E6D57BD66EA1627363EE0C4B711B0B21 - -I=60 -KEY=000000000000001000000000000000000000000000000000 -CT=03730DD6ACB4AD9996A63BE7765EC06F - -I=61 -KEY=000000000000000800000000000000000000000000000000 -CT=A470E361AA5437B2BE8586D2F78DE582 - -I=62 -KEY=000000000000000400000000000000000000000000000000 -CT=7567FEEFA559911FD479670246B484E3 - -I=63 -KEY=000000000000000200000000000000000000000000000000 -CT=29829DEA15A4E7A4C049045E7B106E29 - -I=64 -KEY=000000000000000100000000000000000000000000000000 -CT=A407834C3D89D48A2CB7A152208FA4ED - -I=65 -KEY=000000000000000080000000000000000000000000000000 -CT=68F948053F78FEF0D8F9FE7EF3A89819 - -I=66 -KEY=000000000000000040000000000000000000000000000000 -CT=B605174CAB13AD8FE3B20DA3AE7B0234 - -I=67 -KEY=000000000000000020000000000000000000000000000000 -CT=CCAB8F0AEBFF032893996D383CBFDBFA - -I=68 -KEY=000000000000000010000000000000000000000000000000 -CT=AF14BB8428C9730B7DC17B6C1CBEBCC8 - -I=69 -KEY=000000000000000008000000000000000000000000000000 -CT=5A41A21332040877EB7B89E8E80D19FE - -I=70 -KEY=000000000000000004000000000000000000000000000000 -CT=AC1BA52EFCDDE368B1596F2F0AD893A0 - -I=71 -KEY=000000000000000002000000000000000000000000000000 -CT=41B890E31B9045E6ECDC1BC3F2DB9BCC - -I=72 -KEY=000000000000000001000000000000000000000000000000 -CT=4D54A549728E55B19A23660424A0F146 - -I=73 -KEY=000000000000000000800000000000000000000000000000 -CT=A917581F41C47C7DDCFFD5285E2D6A61 - -I=74 -KEY=000000000000000000400000000000000000000000000000 -CT=604DF24BA6099B93A7405A524D764FCB - -I=75 -KEY=000000000000000000200000000000000000000000000000 -CT=78D9D156F28B190E232D1B7AE7FC730A - -I=76 -KEY=000000000000000000100000000000000000000000000000 -CT=5A12C39E442CD7F27B3CD77F5D029582 - -I=77 -KEY=000000000000000000080000000000000000000000000000 -CT=FF2BF2F47CF7B0F28EE25AF95DBF790D - -I=78 -KEY=000000000000000000040000000000000000000000000000 -CT=1863BB7D193BDA39DF090659EB8AE48B - -I=79 -KEY=000000000000000000020000000000000000000000000000 -CT=38178F2FB4CFCF31E87E1ABCDC023EB5 - -I=80 -KEY=000000000000000000010000000000000000000000000000 -CT=F5B13DC690CC0D541C6BA533023DC8C9 - -I=81 -KEY=000000000000000000008000000000000000000000000000 -CT=48EC05238D7375D126DC9D08884D4827 - -I=82 -KEY=000000000000000000004000000000000000000000000000 -CT=ACD0D81139691B310B92A6E377BACC87 - -I=83 -KEY=000000000000000000002000000000000000000000000000 -CT=9A4AA43578B55CE9CC178F0D2E162C79 - -I=84 -KEY=000000000000000000001000000000000000000000000000 -CT=08AD94BC737DB3C87D49B9E01B720D81 - -I=85 -KEY=000000000000000000000800000000000000000000000000 -CT=3BCFB2D5D210E8332900C5991D551A2A - -I=86 -KEY=000000000000000000000400000000000000000000000000 -CT=C5F0C6B9397ACB29635CE1A0DA2D8D96 - -I=87 -KEY=000000000000000000000200000000000000000000000000 -CT=844A29EFC693E2FA9900F87FBF5DCD5F - -I=88 -KEY=000000000000000000000100000000000000000000000000 -CT=5126A1C41051FEA158BE41200E1EA59D - -I=89 -KEY=000000000000000000000080000000000000000000000000 -CT=302123CA7B4F46D667FFFB0EB6AA7703 - -I=90 -KEY=000000000000000000000040000000000000000000000000 -CT=A9D16BCE7DB5C024277709EE2A88D91A - -I=91 -KEY=000000000000000000000020000000000000000000000000 -CT=F013C5EC123A26CFC34B598C992A996B - -I=92 -KEY=000000000000000000000010000000000000000000000000 -CT=E38A825CD971A1D2E56FB1DBA248F2A8 - -I=93 -KEY=000000000000000000000008000000000000000000000000 -CT=6E701773C0311E0BD4C5A097406D22B3 - -I=94 -KEY=000000000000000000000004000000000000000000000000 -CT=754262CEF0C64BE4C3E67C35ABE439F7 - -I=95 -KEY=000000000000000000000002000000000000000000000000 -CT=C9C2D4C47DF7D55CFA0EE5F1FE5070F4 - -I=96 -KEY=000000000000000000000001000000000000000000000000 -CT=6AB4BEA85B172573D8BD2D5F4329F13D - -I=97 -KEY=000000000000000000000000800000000000000000000000 -CT=11F03EF28E2CC9AE5165C587F7396C8C - -I=98 -KEY=000000000000000000000000400000000000000000000000 -CT=0682F2EB1A68BAC7949922C630DD27FA - -I=99 -KEY=000000000000000000000000200000000000000000000000 -CT=ABB0FEC0413D659AFE8E3DCF6BA873BB - -I=100 -KEY=000000000000000000000000100000000000000000000000 -CT=FE86A32E19F805D6569B2EFADD9C92AA - -I=101 -KEY=000000000000000000000000080000000000000000000000 -CT=E434E472275D1837D3D717F2EECC88C3 - -I=102 -KEY=000000000000000000000000040000000000000000000000 -CT=74E57DCD12A21D26EF8ADAFA5E60469A - -I=103 -KEY=000000000000000000000000020000000000000000000000 -CT=C275429D6DAD45DDD423FA63C816A9C1 - -I=104 -KEY=000000000000000000000000010000000000000000000000 -CT=7F6EC1A9AE729E86F7744AED4B8F4F07 - -I=105 -KEY=000000000000000000000000008000000000000000000000 -CT=48B5A71AB9292BD4F9E608EF102636B2 - -I=106 -KEY=000000000000000000000000004000000000000000000000 -CT=076FB95D5F536C78CBED3181BCCF3CF1 - -I=107 -KEY=000000000000000000000000002000000000000000000000 -CT=BFA76BEA1E684FD3BF9256119EE0BC0F - -I=108 -KEY=000000000000000000000000001000000000000000000000 -CT=7D395923D56577F3FF8670998F8C4A71 - -I=109 -KEY=000000000000000000000000000800000000000000000000 -CT=BA02C986E529AC18A882C34BA389625F - -I=110 -KEY=000000000000000000000000000400000000000000000000 -CT=3DFCF2D882AFE75D3A191193013A84B5 - -I=111 -KEY=000000000000000000000000000200000000000000000000 -CT=FAD1FDE1D0241784B63080D2C74D236C - -I=112 -KEY=000000000000000000000000000100000000000000000000 -CT=7D6C80D39E41F007A14FB9CD2B2C15CD - -I=113 -KEY=000000000000000000000000000080000000000000000000 -CT=7975F401FC10637BB33EA2DB058FF6EC - -I=114 -KEY=000000000000000000000000000040000000000000000000 -CT=657983865C55A818F02B7FCD52ED7E99 - -I=115 -KEY=000000000000000000000000000020000000000000000000 -CT=B32BEB1776F9827FF4C3AC9997E84B20 - -I=116 -KEY=000000000000000000000000000010000000000000000000 -CT=2AE2C7C374F0A41E3D46DBC3E66BB59F - -I=117 -KEY=000000000000000000000000000008000000000000000000 -CT=4D835E4ABDD4BDC6B88316A6E931A07F - -I=118 -KEY=000000000000000000000000000004000000000000000000 -CT=E07EFABFF1C353F7384EBB87B435A3F3 - -I=119 -KEY=000000000000000000000000000002000000000000000000 -CT=ED3088DC3FAF89AD87B4356FF1BB09C2 - -I=120 -KEY=000000000000000000000000000001000000000000000000 -CT=4324D01140C156FC898C2E32BA03FB05 - -I=121 -KEY=000000000000000000000000000000800000000000000000 -CT=BE15D016FACB5BAFBC24FA9289132166 - -I=122 -KEY=000000000000000000000000000000400000000000000000 -CT=AC9B7048EDB1ACF4D97A5B0B3F50884B - -I=123 -KEY=000000000000000000000000000000200000000000000000 -CT=448BECE1F86C7845DFA9A4BB2A016FB3 - -I=124 -KEY=000000000000000000000000000000100000000000000000 -CT=10DD445E87686EB46EA9B1ABC49257F0 - -I=125 -KEY=000000000000000000000000000000080000000000000000 -CT=B7FCCF7659FA756D4B7303EEA6C07458 - -I=126 -KEY=000000000000000000000000000000040000000000000000 -CT=289117115CA3513BAA7640B1004872C2 - -I=127 -KEY=000000000000000000000000000000020000000000000000 -CT=57CB42F7EE7186051F50B93FFA7B35BF - -I=128 -KEY=000000000000000000000000000000010000000000000000 -CT=F2741BFBFB81663B9136802FB9C3126A - -I=129 -KEY=000000000000000000000000000000008000000000000000 -CT=E32DDDC5C7398C096E3BD535B31DB5CE - -I=130 -KEY=000000000000000000000000000000004000000000000000 -CT=81D3C204E608AF9CC713EAEBCB72433F - -I=131 -KEY=000000000000000000000000000000002000000000000000 -CT=D4DEEF4BFC36AAA579496E6935F8F98E - -I=132 -KEY=000000000000000000000000000000001000000000000000 -CT=C356DB082B97802B038571C392C5C8F6 - -I=133 -KEY=000000000000000000000000000000000800000000000000 -CT=A3919ECD4861845F2527B77F06AC6A4E - -I=134 -KEY=000000000000000000000000000000000400000000000000 -CT=A53858E17A2F802A20E40D44494FFDA0 - -I=135 -KEY=000000000000000000000000000000000200000000000000 -CT=5D989E122B78C758921EDBEEB827F0C0 - -I=136 -KEY=000000000000000000000000000000000100000000000000 -CT=4B1C0C8F9E7830CC3C4BE7BD226FA8DE - -I=137 -KEY=000000000000000000000000000000000080000000000000 -CT=82C40C5FD897FBCA7B899C70713573A1 - -I=138 -KEY=000000000000000000000000000000000040000000000000 -CT=ED13EE2D45E00F75CCDB51EA8E3E36AD - -I=139 -KEY=000000000000000000000000000000000020000000000000 -CT=F121799EEFE8432423176A3CCF6462BB - -I=140 -KEY=000000000000000000000000000000000010000000000000 -CT=4FA0C06F07997E98271DD86F7B355C50 - -I=141 -KEY=000000000000000000000000000000000008000000000000 -CT=849EB364B4E81D058649DC5B1BF029B9 - -I=142 -KEY=000000000000000000000000000000000004000000000000 -CT=F48F9E0DE8DE7AD944A207809335D9B1 - -I=143 -KEY=000000000000000000000000000000000002000000000000 -CT=E59E9205B5A81A4FD26DFCF308966022 - -I=144 -KEY=000000000000000000000000000000000001000000000000 -CT=3A91A1BE14AAE9ED700BDF9D70018804 - -I=145 -KEY=000000000000000000000000000000000000800000000000 -CT=8ABAD78DCB79A48D79070E7DA89664EC - -I=146 -KEY=000000000000000000000000000000000000400000000000 -CT=B68377D98AAE6044938A7457F6C649D9 - -I=147 -KEY=000000000000000000000000000000000000200000000000 -CT=E4E1275C42F5F1B63D662C099D6CE33D - -I=148 -KEY=000000000000000000000000000000000000100000000000 -CT=7DEF32A34C6BE668F17DA1BB193B06EF - -I=149 -KEY=000000000000000000000000000000000000080000000000 -CT=78B6000CC3D30CB3A74B68D0EDBD2B53 - -I=150 -KEY=000000000000000000000000000000000000040000000000 -CT=0A47531DE88DD8AE5C23EAE4F7D1F2D5 - -I=151 -KEY=000000000000000000000000000000000000020000000000 -CT=667B24E8000CF68231EC484581D922E5 - -I=152 -KEY=000000000000000000000000000000000000010000000000 -CT=39DAA5EBD4AACAE130E9C33236C52024 - -I=153 -KEY=000000000000000000000000000000000000008000000000 -CT=E3C88760B3CB21360668A63E55BB45D1 - -I=154 -KEY=000000000000000000000000000000000000004000000000 -CT=F131EE903C1CDB49D416866FD5D8DE51 - -I=155 -KEY=000000000000000000000000000000000000002000000000 -CT=7A1916135B0447CF4033FC13047A583A - -I=156 -KEY=000000000000000000000000000000000000001000000000 -CT=F7D55FB27991143DCDFA90DDF0424FCB - -I=157 -KEY=000000000000000000000000000000000000000800000000 -CT=EA93E7D1CA1111DBD8F7EC111A848C0C - -I=158 -KEY=000000000000000000000000000000000000000400000000 -CT=2A689E39DFD3CBCBE221326E95888779 - -I=159 -KEY=000000000000000000000000000000000000000200000000 -CT=C1CE399CA762318AC2C40D1928B4C57D - -I=160 -KEY=000000000000000000000000000000000000000100000000 -CT=D43FB6F2B2879C8BFAF0092DA2CA63ED - -I=161 -KEY=000000000000000000000000000000000000000080000000 -CT=224563E617158DF97650AF5D130E78A5 - -I=162 -KEY=000000000000000000000000000000000000000040000000 -CT=6562FDF6833B7C4F7484AE6EBCC243DD - -I=163 -KEY=000000000000000000000000000000000000000020000000 -CT=93D58BA7BED22615D661D002885A7457 - -I=164 -KEY=000000000000000000000000000000000000000010000000 -CT=9A0EF559003AD9E52D3E09ED3C1D3320 - -I=165 -KEY=000000000000000000000000000000000000000008000000 -CT=96BAF5A7DC6F3DD27EB4C717A85D261C - -I=166 -KEY=000000000000000000000000000000000000000004000000 -CT=B8762E06884900E8452293190E19CCDB - -I=167 -KEY=000000000000000000000000000000000000000002000000 -CT=785416A22BD63CBABF4B1789355197D3 - -I=168 -KEY=000000000000000000000000000000000000000001000000 -CT=A0D20CE1489BAA69A3612DCE90F7ABF6 - -I=169 -KEY=000000000000000000000000000000000000000000800000 -CT=700244E93DC94230CC607FFBA0E48F32 - -I=170 -KEY=000000000000000000000000000000000000000000400000 -CT=85329E476829F872A2B4A7E59F91FF2D - -I=171 -KEY=000000000000000000000000000000000000000000200000 -CT=E4219B4935D988DB719B8B8B2B53D247 - -I=172 -KEY=000000000000000000000000000000000000000000100000 -CT=6ACDD04FD13D4DB4409FE8DD13FD737B - -I=173 -KEY=000000000000000000000000000000000000000000080000 -CT=9EB7A670AB59E15BE582378701C1EC14 - -I=174 -KEY=000000000000000000000000000000000000000000040000 -CT=29DF2D6935FE657763BC7A9F22D3D492 - -I=175 -KEY=000000000000000000000000000000000000000000020000 -CT=99303359D4A13AFDBE6C784028CE533A - -I=176 -KEY=000000000000000000000000000000000000000000010000 -CT=FF5C70A6334545F33B9DBF7BEA0417CA - -I=177 -KEY=000000000000000000000000000000000000000000008000 -CT=289F58A17E4C50EDA4269EFB3DF55815 - -I=178 -KEY=000000000000000000000000000000000000000000004000 -CT=EA35DCB416E9E1C2861D1682F062B5EB - -I=179 -KEY=000000000000000000000000000000000000000000002000 -CT=3A47BF354BE775383C50B0C0A83E3A58 - -I=180 -KEY=000000000000000000000000000000000000000000001000 -CT=BF6C1DC069FB95D05D43B01D8206D66B - -I=181 -KEY=000000000000000000000000000000000000000000000800 -CT=046D1D580D5898DA6595F32FD1F0C33D - -I=182 -KEY=000000000000000000000000000000000000000000000400 -CT=5F57803B7B82A110F7E9855D6A546082 - -I=183 -KEY=000000000000000000000000000000000000000000000200 -CT=25336ECF34E7BE97862CDFF715FF05A8 - -I=184 -KEY=000000000000000000000000000000000000000000000100 -CT=ACBAA2A943D8078022D693890E8C4FEF - -I=185 -KEY=000000000000000000000000000000000000000000000080 -CT=3947597879F6B58E4E2F0DF825A83A38 - -I=186 -KEY=000000000000000000000000000000000000000000000040 -CT=4EB8CC3335496130655BF3CA570A4FC0 - -I=187 -KEY=000000000000000000000000000000000000000000000020 -CT=BBDA7769AD1FDA425E18332D97868824 - -I=188 -KEY=000000000000000000000000000000000000000000000010 -CT=5E7532D22DDB0829A29C868198397154 - -I=189 -KEY=000000000000000000000000000000000000000000000008 -CT=E66DA67B630AB7AE3E682855E1A1698E - -I=190 -KEY=000000000000000000000000000000000000000000000004 -CT=4D93800F671B48559A64D1EA030A590A - -I=191 -KEY=000000000000000000000000000000000000000000000002 -CT=F33159FCC7D9AE30C062CD3B322AC764 - -I=192 -KEY=000000000000000000000000000000000000000000000001 -CT=8BAE4EFB70D33A9792EEA9BE70889D72 - -========== - -KEYSIZE=256 - -PT=00000000000000000000000000000000 - -I=1 -KEY=8000000000000000000000000000000000000000000000000000000000000000 -CT=E35A6DCB19B201A01EBCFA8AA22B5759 - -I=2 -KEY=4000000000000000000000000000000000000000000000000000000000000000 -CT=5075C2405B76F22F553488CAE47CE90B - -I=3 -KEY=2000000000000000000000000000000000000000000000000000000000000000 -CT=49DF95D844A0145A7DE01C91793302D3 - -I=4 -KEY=1000000000000000000000000000000000000000000000000000000000000000 -CT=E7396D778E940B8418A86120E5F421FE - -I=5 -KEY=0800000000000000000000000000000000000000000000000000000000000000 -CT=05F535C36FCEDE4657BE37F4087DB1EF - -I=6 -KEY=0400000000000000000000000000000000000000000000000000000000000000 -CT=D0C1DDDD10DA777C68AB36AF51F2C204 - -I=7 -KEY=0200000000000000000000000000000000000000000000000000000000000000 -CT=1C55FB811B5C6464C4E5DE1535A75514 - -I=8 -KEY=0100000000000000000000000000000000000000000000000000000000000000 -CT=52917F3AE957D5230D3A2AF57C7B5A71 - -I=9 -KEY=0080000000000000000000000000000000000000000000000000000000000000 -CT=C6E3D5501752DD5E9AEF086D6B45D705 - -I=10 -KEY=0040000000000000000000000000000000000000000000000000000000000000 -CT=A24A9C7AF1D9B1E17E1C9A3E711B3FA7 - -I=11 -KEY=0020000000000000000000000000000000000000000000000000000000000000 -CT=B881ECA724A6D43DBC6B96F6F59A0D20 - -I=12 -KEY=0010000000000000000000000000000000000000000000000000000000000000 -CT=EC524D9A24DFFF2A9639879B83B8E137 - -I=13 -KEY=0008000000000000000000000000000000000000000000000000000000000000 -CT=34C4F345F5466215A037F443635D6F75 - -I=14 -KEY=0004000000000000000000000000000000000000000000000000000000000000 -CT=5BA5055BEDB8895F672E29F2EB5A355D - -I=15 -KEY=0002000000000000000000000000000000000000000000000000000000000000 -CT=B3F692AA3A435259EBBEF9B51AD1E08D - -I=16 -KEY=0001000000000000000000000000000000000000000000000000000000000000 -CT=414FEB4376F2C64A5D2FBB2ED531BA7D - -I=17 -KEY=0000800000000000000000000000000000000000000000000000000000000000 -CT=A20D519E3BCA3303F07E81719F61605E - -I=18 -KEY=0000400000000000000000000000000000000000000000000000000000000000 -CT=A08D10E520AF811F45BD60A2DC0DC4B1 - -I=19 -KEY=0000200000000000000000000000000000000000000000000000000000000000 -CT=B06893A8C563C430E6F3858826EFBBE4 - -I=20 -KEY=0000100000000000000000000000000000000000000000000000000000000000 -CT=0FFEE26AE2D3929C6BD9C6BEDFF84409 - -I=21 -KEY=0000080000000000000000000000000000000000000000000000000000000000 -CT=4D0F5E906ED77801FC0EF53EDC5F9E2B - -I=22 -KEY=0000040000000000000000000000000000000000000000000000000000000000 -CT=8B6EC00119AD8B026DCE56EA7DEFE930 - -I=23 -KEY=0000020000000000000000000000000000000000000000000000000000000000 -CT=69026591D43363EE9D83B5007F0B484E - -I=24 -KEY=0000010000000000000000000000000000000000000000000000000000000000 -CT=27135D86950C6A2F86872706279A4761 - -I=25 -KEY=0000008000000000000000000000000000000000000000000000000000000000 -CT=35E6DB8723F281DA410C3AC8535ED77C - -I=26 -KEY=0000004000000000000000000000000000000000000000000000000000000000 -CT=57427CF214B8C28E4BBF487CCB8D0E09 - -I=27 -KEY=0000002000000000000000000000000000000000000000000000000000000000 -CT=6DF01BF56E5131AC87F96E99CAB86367 - -I=28 -KEY=0000001000000000000000000000000000000000000000000000000000000000 -CT=3856C5B55790B768BBF7D43031579BCF - -I=29 -KEY=0000000800000000000000000000000000000000000000000000000000000000 -CT=1E6ED8FB7C15BC4D2F63BA7037ED44D0 - -I=30 -KEY=0000000400000000000000000000000000000000000000000000000000000000 -CT=E1B2ED6CD8D93D455534E401156D4BCF - -I=31 -KEY=0000000200000000000000000000000000000000000000000000000000000000 -CT=EFBCCA5BDFDAD10E875F02336212CE36 - -I=32 -KEY=0000000100000000000000000000000000000000000000000000000000000000 -CT=0B777F02FD18DCE2646DCFE868DFAFAD - -I=33 -KEY=0000000080000000000000000000000000000000000000000000000000000000 -CT=C8A104B5693D1B14F5BF1F10100BF508 - -I=34 -KEY=0000000040000000000000000000000000000000000000000000000000000000 -CT=4CCE6615244AFCB38408FECE219962EA - -I=35 -KEY=0000000020000000000000000000000000000000000000000000000000000000 -CT=F99E7845D3A255B394C9C050CBA258B1 - -I=36 -KEY=0000000010000000000000000000000000000000000000000000000000000000 -CT=B4AFBB787F9BCFB7B55FDF447F611295 - -I=37 -KEY=0000000008000000000000000000000000000000000000000000000000000000 -CT=AE1C426A697FAF2808B7EF6ADDB5C020 - -I=38 -KEY=0000000004000000000000000000000000000000000000000000000000000000 -CT=7572F92811A85B9BDD38DEAD9945BCAE - -I=39 -KEY=0000000002000000000000000000000000000000000000000000000000000000 -CT=71BC7AA46E43FB95A181527D9F6A360F - -I=40 -KEY=0000000001000000000000000000000000000000000000000000000000000000 -CT=5542EF2923066F1EC8F546DD0D8E7CA8 - -I=41 -KEY=0000000000800000000000000000000000000000000000000000000000000000 -CT=6B92317C7D623790B748FDD7EFC42422 - -I=42 -KEY=0000000000400000000000000000000000000000000000000000000000000000 -CT=0FE7C097E899C71EF045360F8D6C25CF - -I=43 -KEY=0000000000200000000000000000000000000000000000000000000000000000 -CT=4ECE7EE107D0264D04693151C25B9DF6 - -I=44 -KEY=0000000000100000000000000000000000000000000000000000000000000000 -CT=FD6AE687CBFCA9E301045888D3BB9605 - -I=45 -KEY=0000000000080000000000000000000000000000000000000000000000000000 -CT=476B579C8556C7254424902CC1D6D36E - -I=46 -KEY=0000000000040000000000000000000000000000000000000000000000000000 -CT=4133CBCDFDD6B8860A1FC18665D6D71B - -I=47 -KEY=0000000000020000000000000000000000000000000000000000000000000000 -CT=3B36EC2664798C108B816812C65DFDC7 - -I=48 -KEY=0000000000010000000000000000000000000000000000000000000000000000 -CT=364E20A234FEA385D48DC5A09C9E70CF - -I=49 -KEY=0000000000008000000000000000000000000000000000000000000000000000 -CT=4A4BA25969DE3F5EE5642C71AAD0EFD1 - -I=50 -KEY=0000000000004000000000000000000000000000000000000000000000000000 -CT=E42CBAAE43297F67A76C1C501BB79E36 - -I=51 -KEY=0000000000002000000000000000000000000000000000000000000000000000 -CT=23CEDEDA4C15B4C037E8C61492217937 - -I=52 -KEY=0000000000001000000000000000000000000000000000000000000000000000 -CT=A1719147A1F4A1A1180BD16E8593DCDE - -I=53 -KEY=0000000000000800000000000000000000000000000000000000000000000000 -CT=AB82337E9FB0EC60D1F25A1D0014192C - -I=54 -KEY=0000000000000400000000000000000000000000000000000000000000000000 -CT=74BF2D8FC5A8388DF1A3A4D7D33FC164 - -I=55 -KEY=0000000000000200000000000000000000000000000000000000000000000000 -CT=D5B493317E6FBC6FFFD664B3C491368A - -I=56 -KEY=0000000000000100000000000000000000000000000000000000000000000000 -CT=BA767381586DA56A2A8D503D5F7ADA0B - -I=57 -KEY=0000000000000080000000000000000000000000000000000000000000000000 -CT=E8E6BC57DFE9CCADB0DECABF4E5CF91F - -I=58 -KEY=0000000000000040000000000000000000000000000000000000000000000000 -CT=3C8E5A5CDC9CEED90815D1F84BB2998C - -I=59 -KEY=0000000000000020000000000000000000000000000000000000000000000000 -CT=283843020BA38F056001B2FD585F7CC9 - -I=60 -KEY=0000000000000010000000000000000000000000000000000000000000000000 -CT=D8ADC7426F623ECE8741A70621D28870 - -I=61 -KEY=0000000000000008000000000000000000000000000000000000000000000000 -CT=D7C5C215592D06F00E6A80DA69A28EA9 - -I=62 -KEY=0000000000000004000000000000000000000000000000000000000000000000 -CT=52CF6FA433C3C870CAC70190358F7F16 - -I=63 -KEY=0000000000000002000000000000000000000000000000000000000000000000 -CT=F63D442A584DA71786ADEC9F3346DF75 - -I=64 -KEY=0000000000000001000000000000000000000000000000000000000000000000 -CT=549078F4B0CA7079B45F9A5ADAFAFD99 - -I=65 -KEY=0000000000000000800000000000000000000000000000000000000000000000 -CT=F2A5986EE4E9984BE2BAFB79EA8152FA - -I=66 -KEY=0000000000000000400000000000000000000000000000000000000000000000 -CT=8A74535017B4DB2776668A1FAE64384C - -I=67 -KEY=0000000000000000200000000000000000000000000000000000000000000000 -CT=E613342F57A97FD95DC088711A5D0ECD - -I=68 -KEY=0000000000000000100000000000000000000000000000000000000000000000 -CT=3FFAEBF6B22CF1DC82AE17CD48175B01 - -I=69 -KEY=0000000000000000080000000000000000000000000000000000000000000000 -CT=BAFD52EFA15C248CCBF9757735E6B1CE - -I=70 -KEY=0000000000000000040000000000000000000000000000000000000000000000 -CT=7AF94BC018D9DDD4539D2DD1C6F4000F - -I=71 -KEY=0000000000000000020000000000000000000000000000000000000000000000 -CT=FE177AD61CA0FDB281086FBA8FE76803 - -I=72 -KEY=0000000000000000010000000000000000000000000000000000000000000000 -CT=74DBEA15E2E9285BAD163D7D534251B6 - -I=73 -KEY=0000000000000000008000000000000000000000000000000000000000000000 -CT=23DD21331B3A92F200FE56FF050FFE74 - -I=74 -KEY=0000000000000000004000000000000000000000000000000000000000000000 -CT=A69C5AA34AB20A858CAFA766EACED6D8 - -I=75 -KEY=0000000000000000002000000000000000000000000000000000000000000000 -CT=3F72BB4DF2A4F941A4A09CB78F04B97A - -I=76 -KEY=0000000000000000001000000000000000000000000000000000000000000000 -CT=72CC43577E1FD5FD14622D24D97FCDCC - -I=77 -KEY=0000000000000000000800000000000000000000000000000000000000000000 -CT=D83AF8EBE93E0B6B99CAFADE224937D1 - -I=78 -KEY=0000000000000000000400000000000000000000000000000000000000000000 -CT=44042329128D56CAA8D084C8BD769D1E - -I=79 -KEY=0000000000000000000200000000000000000000000000000000000000000000 -CT=14102D72290DE4F2C430ADD1ED64BA1D - -I=80 -KEY=0000000000000000000100000000000000000000000000000000000000000000 -CT=449124097B1ECD0AE7065206DF06F03C - -I=81 -KEY=0000000000000000000080000000000000000000000000000000000000000000 -CT=D060A99F8CC153A42E11E5F97BD7584A - -I=82 -KEY=0000000000000000000040000000000000000000000000000000000000000000 -CT=65605B3EA9261488D53E48602ADEA299 - -I=83 -KEY=0000000000000000000020000000000000000000000000000000000000000000 -CT=C5E5CAD7A208DE8EA6BE049EFE5C7346 - -I=84 -KEY=0000000000000000000010000000000000000000000000000000000000000000 -CT=4C280C46D2181646048DD5BC0C0831A5 - -I=85 -KEY=0000000000000000000008000000000000000000000000000000000000000000 -CT=5DD65CF37F2A0929559AABAFDA08E730 - -I=86 -KEY=0000000000000000000004000000000000000000000000000000000000000000 -CT=31F2335CAAF264172F69A693225E6D22 - -I=87 -KEY=0000000000000000000002000000000000000000000000000000000000000000 -CT=3E28B35F99A72662590DA96426DD377F - -I=88 -KEY=0000000000000000000001000000000000000000000000000000000000000000 -CT=570F40F5D7B20441486578ED344343BE - -I=89 -KEY=0000000000000000000000800000000000000000000000000000000000000000 -CT=C54308AD1C9E3B19F8B7417873045A8C - -I=90 -KEY=0000000000000000000000400000000000000000000000000000000000000000 -CT=CBF335E39CE13ADE2B696179E8FD0CE1 - -I=91 -KEY=0000000000000000000000200000000000000000000000000000000000000000 -CT=9C2FBF422355D8293083D51F4A3C18A9 - -I=92 -KEY=0000000000000000000000100000000000000000000000000000000000000000 -CT=5ED8B5A31ECEFAB16C9AA6986DA67BCE - -I=93 -KEY=0000000000000000000000080000000000000000000000000000000000000000 -CT=627815DCFC814ABC75900041B1DD7B59 - -I=94 -KEY=0000000000000000000000040000000000000000000000000000000000000000 -CT=9EF3E82A50A59F166260494F7A7F2CC3 - -I=95 -KEY=0000000000000000000000020000000000000000000000000000000000000000 -CT=878CD0D8D920888B5935D6C351128737 - -I=96 -KEY=0000000000000000000000010000000000000000000000000000000000000000 -CT=E44429474D6FC3084EB2A6B8B46AF754 - -I=97 -KEY=0000000000000000000000008000000000000000000000000000000000000000 -CT=EBAACF9641D54E1FB18D0A2BE4F19BE5 - -I=98 -KEY=0000000000000000000000004000000000000000000000000000000000000000 -CT=13B3BF497CEE780E123C7E193DEA3A01 - -I=99 -KEY=0000000000000000000000002000000000000000000000000000000000000000 -CT=6E8F381DE00A41161F0DF03B4155BFD4 - -I=100 -KEY=0000000000000000000000001000000000000000000000000000000000000000 -CT=35E4F29BBA2BAE01144910783C3FEF49 - -I=101 -KEY=0000000000000000000000000800000000000000000000000000000000000000 -CT=55B17BD66788CEAC366398A31F289FFB - -I=102 -KEY=0000000000000000000000000400000000000000000000000000000000000000 -CT=11341F56C0D6D1008D28741DAA7679CE - -I=103 -KEY=0000000000000000000000000200000000000000000000000000000000000000 -CT=4DF7253DF421D83358BDBE924745D98C - -I=104 -KEY=0000000000000000000000000100000000000000000000000000000000000000 -CT=BAE2EE651116D93EDC8E83B5F3347BE1 - -I=105 -KEY=0000000000000000000000000080000000000000000000000000000000000000 -CT=F9721ABD06709157183AF3965A659D9D - -I=106 -KEY=0000000000000000000000000040000000000000000000000000000000000000 -CT=19A1C252A613FE2860A4AE6D75CE6FA3 - -I=107 -KEY=0000000000000000000000000020000000000000000000000000000000000000 -CT=B5DDB2F5D9752C949FBDE3FFF5556C6E - -I=108 -KEY=0000000000000000000000000010000000000000000000000000000000000000 -CT=81B044FCFFC78ECCFCD171AAD0405C66 - -I=109 -KEY=0000000000000000000000000008000000000000000000000000000000000000 -CT=C640566D3C06020EB2C42F1D62E56A9B - -I=110 -KEY=0000000000000000000000000004000000000000000000000000000000000000 -CT=EA6C4BCF425291679FDFFD26A424FBCC - -I=111 -KEY=0000000000000000000000000002000000000000000000000000000000000000 -CT=57F6901465D9440D9F15EE2CBA5A4090 - -I=112 -KEY=0000000000000000000000000001000000000000000000000000000000000000 -CT=FBCFA74CADC7406260F63D96C8AAB6B1 - -I=113 -KEY=0000000000000000000000000000800000000000000000000000000000000000 -CT=DFF4F096CEA211D4BBDACA033D0EC7D1 - -I=114 -KEY=0000000000000000000000000000400000000000000000000000000000000000 -CT=1EE5190D551F0F42F675227A381296A9 - -I=115 -KEY=0000000000000000000000000000200000000000000000000000000000000000 -CT=F98E1905012E580F097623C10B93054F - -I=116 -KEY=0000000000000000000000000000100000000000000000000000000000000000 -CT=E7D43743D21DD3C9F168C86856558B9A - -I=117 -KEY=0000000000000000000000000000080000000000000000000000000000000000 -CT=632A9DDA730DAB67593C5D08D8AC1059 - -I=118 -KEY=0000000000000000000000000000040000000000000000000000000000000000 -CT=E084317000715B9057BC9DE9F3AB6124 - -I=119 -KEY=0000000000000000000000000000020000000000000000000000000000000000 -CT=61F9EF33A0BB4E666C2ED99101919FAB - -I=120 -KEY=0000000000000000000000000000010000000000000000000000000000000000 -CT=6DC1D68A11834657D46703C22578D59A - -I=121 -KEY=0000000000000000000000000000008000000000000000000000000000000000 -CT=53AC1548863D3D16F1D4DC7242E05F2C - -I=122 -KEY=0000000000000000000000000000004000000000000000000000000000000000 -CT=E82CD587A408306AD78CEAE0916B9F8C - -I=123 -KEY=0000000000000000000000000000002000000000000000000000000000000000 -CT=0FD2D40EA6AD17A3A767F0A8600D6295 - -I=124 -KEY=0000000000000000000000000000001000000000000000000000000000000000 -CT=AD84CC8255ADB39DFCA23F92761AE7E9 - -I=125 -KEY=0000000000000000000000000000000800000000000000000000000000000000 -CT=F4F20CF7D51BEE7DA024A2B11A7ECA0B - -I=126 -KEY=0000000000000000000000000000000400000000000000000000000000000000 -CT=5057691B85D9CE93A193214DB0A016B6 - -I=127 -KEY=0000000000000000000000000000000200000000000000000000000000000000 -CT=0F58C960876390BDEF4BB6BE95CAA1EE - -I=128 -KEY=0000000000000000000000000000000100000000000000000000000000000000 -CT=9A3E66EEBC21BC0BD9430B341EF465FA - -I=129 -KEY=0000000000000000000000000000000080000000000000000000000000000000 -CT=20415035F34B8BCBCB28ABF07F78F0D4 - -I=130 -KEY=0000000000000000000000000000000040000000000000000000000000000000 -CT=AC89FC7BA10479EBF10DE65BCEF89B3C - -I=131 -KEY=0000000000000000000000000000000020000000000000000000000000000000 -CT=068FA75A30BE443171AF3F6FEB1A20D2 - -I=132 -KEY=0000000000000000000000000000000010000000000000000000000000000000 -CT=50E02F213246C525A8C27700CA34B502 - -I=133 -KEY=0000000000000000000000000000000008000000000000000000000000000000 -CT=227DA47D5A0906DB3AB042BB0A695FB6 - -I=134 -KEY=0000000000000000000000000000000004000000000000000000000000000000 -CT=8663AC30ED12514F1DE46777F4514BFC - -I=135 -KEY=0000000000000000000000000000000002000000000000000000000000000000 -CT=A987D4BC12E1DE9F4B6DF43567C34A8B - -I=136 -KEY=0000000000000000000000000000000001000000000000000000000000000000 -CT=6D5A0370F599ACA605F63B04E5143D0C - -I=137 -KEY=0000000000000000000000000000000000800000000000000000000000000000 -CT=9809266E378B07B7AFDB3BAA97B7E442 - -I=138 -KEY=0000000000000000000000000000000000400000000000000000000000000000 -CT=8F753252B30CCCACE12D9A301F4D5090 - -I=139 -KEY=0000000000000000000000000000000000200000000000000000000000000000 -CT=032465F6C0CE34D41962F561692A1AFF - -I=140 -KEY=0000000000000000000000000000000000100000000000000000000000000000 -CT=C50E9AD5BEB8F3B00821DD47FF8AC093 - -I=141 -KEY=0000000000000000000000000000000000080000000000000000000000000000 -CT=9C6FEA3D46268D54A6829B2AD25BB276 - -I=142 -KEY=0000000000000000000000000000000000040000000000000000000000000000 -CT=0FD8575E87706F561343D7B3A41E044A - -I=143 -KEY=0000000000000000000000000000000000020000000000000000000000000000 -CT=BEE9BEB3739540D88CBCE77925F0A114 - -I=144 -KEY=0000000000000000000000000000000000010000000000000000000000000000 -CT=D24EAEE7FFFBAC3D6F26C2DCE0DCDE28 - -I=145 -KEY=0000000000000000000000000000000000008000000000000000000000000000 -CT=47771A90398FF0F7FA821C2F8F5E1398 - -I=146 -KEY=0000000000000000000000000000000000004000000000000000000000000000 -CT=4639741B6F84B135AD118C8249B64ED0 - -I=147 -KEY=0000000000000000000000000000000000002000000000000000000000000000 -CT=8EE5505EC85567697A3306F250A27720 - -I=148 -KEY=0000000000000000000000000000000000001000000000000000000000000000 -CT=7C8A19AC1AEFBC5E0119D91A5F05D4C2 - -I=149 -KEY=0000000000000000000000000000000000000800000000000000000000000000 -CT=5141B9B672E54773B672E3A6C424887B - -I=150 -KEY=0000000000000000000000000000000000000400000000000000000000000000 -CT=B5A2D3CD206653C6402F34FB0AE3613D - -I=151 -KEY=0000000000000000000000000000000000000200000000000000000000000000 -CT=0F5BD9408738231D114B0A82753279A3 - -I=152 -KEY=0000000000000000000000000000000000000100000000000000000000000000 -CT=FEF033FF4268EA487FC74C5E43A45338 - -I=153 -KEY=0000000000000000000000000000000000000080000000000000000000000000 -CT=A3EDC09DCD529B113910D904AD855581 - -I=154 -KEY=0000000000000000000000000000000000000040000000000000000000000000 -CT=AB8FBB6F27A0AC7C55B59FDD36B72F1C - -I=155 -KEY=0000000000000000000000000000000000000020000000000000000000000000 -CT=EEA44D5ED4D769CC930CD83D8999EC46 - -I=156 -KEY=0000000000000000000000000000000000000010000000000000000000000000 -CT=6972276803AE9AA7C6F431AB10979C34 - -I=157 -KEY=0000000000000000000000000000000000000008000000000000000000000000 -CT=86DEAA9F39244101818178474D7DBDE9 - -I=158 -KEY=0000000000000000000000000000000000000004000000000000000000000000 -CT=88C6B466EA361D662D8D08CBF181F4FE - -I=159 -KEY=0000000000000000000000000000000000000002000000000000000000000000 -CT=91AB2C6B7C63FF59F7CBEEBF91B20B95 - -I=160 -KEY=0000000000000000000000000000000000000001000000000000000000000000 -CT=2DFE6C146AD5B3D8C3C1718F13B48E01 - -I=161 -KEY=0000000000000000000000000000000000000000800000000000000000000000 -CT=C7CFF1623451711391A302EEC3584AAA - -I=162 -KEY=0000000000000000000000000000000000000000400000000000000000000000 -CT=089FE845CC05011686C66019D18BE050 - -I=163 -KEY=0000000000000000000000000000000000000000200000000000000000000000 -CT=08C8410B9B427211A67124B0DCCEAD48 - -I=164 -KEY=0000000000000000000000000000000000000000100000000000000000000000 -CT=8D91592F5566085254784606334D7629 - -I=165 -KEY=0000000000000000000000000000000000000000080000000000000000000000 -CT=3298FEAAF2E1201D6299FF8846639C97 - -I=166 -KEY=0000000000000000000000000000000000000000040000000000000000000000 -CT=C497CB9F0BDFE0EFC8C2F3F90760AA72 - -I=167 -KEY=0000000000000000000000000000000000000000020000000000000000000000 -CT=2788AFD046E0309CBE4424690DA2AB89 - -I=168 -KEY=0000000000000000000000000000000000000000010000000000000000000000 -CT=E9891707F25EF29FEE372890D4258982 - -I=169 -KEY=0000000000000000000000000000000000000000008000000000000000000000 -CT=DB041D94A23D45D4D4DCED5A030CAF61 - -I=170 -KEY=0000000000000000000000000000000000000000004000000000000000000000 -CT=FFAFDBF0ECB18DF9EA02C27077448E6D - -I=171 -KEY=0000000000000000000000000000000000000000002000000000000000000000 -CT=2DAAA42A7D0A1D3B0E4761D99CF2150A - -I=172 -KEY=0000000000000000000000000000000000000000001000000000000000000000 -CT=3B7A54CB7CF30ABE263DD6ED5BFE8D63 - -I=173 -KEY=0000000000000000000000000000000000000000000800000000000000000000 -CT=EEFA090174C590C448A55D43648F534A - -I=174 -KEY=0000000000000000000000000000000000000000000400000000000000000000 -CT=9E15798731ED42F43EA2740A691DA872 - -I=175 -KEY=0000000000000000000000000000000000000000000200000000000000000000 -CT=31FBD661540A5DEAAD1017CFD3909EC8 - -I=176 -KEY=0000000000000000000000000000000000000000000100000000000000000000 -CT=CDA9AE05F224140E28CB951721B44D6A - -I=177 -KEY=0000000000000000000000000000000000000000000080000000000000000000 -CT=0C5BC512C60A1EAC3434EFB1A8FBB182 - -I=178 -KEY=0000000000000000000000000000000000000000000040000000000000000000 -CT=AA863610DEEEEB62D045E87EA30B59B5 - -I=179 -KEY=0000000000000000000000000000000000000000000020000000000000000000 -CT=6AC2448DE568D279C7EEBE1DF403920C - -I=180 -KEY=0000000000000000000000000000000000000000000010000000000000000000 -CT=E2011E3D292B26888AE801215FD0CB40 - -I=181 -KEY=0000000000000000000000000000000000000000000008000000000000000000 -CT=E06F3E15EE3A61672D1C99BADE5B9DBE - -I=182 -KEY=0000000000000000000000000000000000000000000004000000000000000000 -CT=BB7027F0548CF6712CEB4C7A4B28E178 - -I=183 -KEY=0000000000000000000000000000000000000000000002000000000000000000 -CT=061EC21FB70FADBDF87C3BD2AE23825B - -I=184 -KEY=0000000000000000000000000000000000000000000001000000000000000000 -CT=4C21F26FE94ABBAC381352375314C3EB - -I=185 -KEY=0000000000000000000000000000000000000000000000800000000000000000 -CT=F7CEE6DD99909C2B569EEDA61ED8942E - -I=186 -KEY=0000000000000000000000000000000000000000000000400000000000000000 -CT=CE98C4A876C65E4CCB261EBB1D9DF7F5 - -I=187 -KEY=0000000000000000000000000000000000000000000000200000000000000000 -CT=A5491881CF833C3604ABC08044F402AC - -I=188 -KEY=0000000000000000000000000000000000000000000000100000000000000000 -CT=A1BA16E64CCCB3087D57A768507B0BFC - -I=189 -KEY=0000000000000000000000000000000000000000000000080000000000000000 -CT=D55951E202D2949EBD3BE43120C738BF - -I=190 -KEY=0000000000000000000000000000000000000000000000040000000000000000 -CT=EBB8E43069E69F450EFEC65DCD52B7FD - -I=191 -KEY=0000000000000000000000000000000000000000000000020000000000000000 -CT=2B292135663B4AA5ABFE9423D57E7EE9 - -I=192 -KEY=0000000000000000000000000000000000000000000000010000000000000000 -CT=E91BF974B3BE3AD966249D8655292A85 - -I=193 -KEY=0000000000000000000000000000000000000000000000008000000000000000 -CT=384365998EAA9562236CC58F6ADF9610 - -I=194 -KEY=0000000000000000000000000000000000000000000000004000000000000000 -CT=C2E997012AA3D4D8D359C9A947CBE69F - -I=195 -KEY=0000000000000000000000000000000000000000000000002000000000000000 -CT=F49421204148BA213BE87E2D5C22B0BF - -I=196 -KEY=0000000000000000000000000000000000000000000000001000000000000000 -CT=82ED0ED9953AA92E4DF30929CA65C00F - -I=197 -KEY=0000000000000000000000000000000000000000000000000800000000000000 -CT=291EB1D11653C8479437C74A977F5106 - -I=198 -KEY=0000000000000000000000000000000000000000000000000400000000000000 -CT=BCB997B1939B8983ABD550D6025683E3 - -I=199 -KEY=0000000000000000000000000000000000000000000000000200000000000000 -CT=1FBA2592C6F489775CAADA71F9B983E9 - -I=200 -KEY=0000000000000000000000000000000000000000000000000100000000000000 -CT=969F66F217AF1A3DB9E41C1B29039824 - -I=201 -KEY=0000000000000000000000000000000000000000000000000080000000000000 -CT=A54BB7D6B17E423AC0A7744C19073CB8 - -I=202 -KEY=0000000000000000000000000000000000000000000000000040000000000000 -CT=B0AC6E6578D1021F47DCF9748A32EAD5 - -I=203 -KEY=0000000000000000000000000000000000000000000000000020000000000000 -CT=B87B361C3B7B194C77A4358D4669153E - -I=204 -KEY=0000000000000000000000000000000000000000000000000010000000000000 -CT=46A133847F96EAA8282A799DC8899D58 - -I=205 -KEY=0000000000000000000000000000000000000000000000000008000000000000 -CT=2265EC3A9F2D5C9547A091CC8CFB18EA - -I=206 -KEY=0000000000000000000000000000000000000000000000000004000000000000 -CT=54CBF3A6FC4FE56D426117AA1FFD1DDE - -I=207 -KEY=0000000000000000000000000000000000000000000000000002000000000000 -CT=5312877CCEAB6CFB0905394A370A8003 - -I=208 -KEY=0000000000000000000000000000000000000000000000000001000000000000 -CT=7190BD6EC613FE38B84ECFE28F702FE4 - -I=209 -KEY=0000000000000000000000000000000000000000000000000000800000000000 -CT=D1FA5B9CA89A43B04C05F0EF29EF68CD - -I=210 -KEY=0000000000000000000000000000000000000000000000000000400000000000 -CT=808285751548ED934FD1056D2D9AE8BA - -I=211 -KEY=0000000000000000000000000000000000000000000000000000200000000000 -CT=2758DEF3E7B95A9AE89777BE64D5A6CF - -I=212 -KEY=0000000000000000000000000000000000000000000000000000100000000000 -CT=07D81F87DB3E0ACC82B01E08FB22F3C1 - -I=213 -KEY=0000000000000000000000000000000000000000000000000000080000000000 -CT=8DA250E5553D650711A75EE1CB4FD1C7 - -I=214 -KEY=0000000000000000000000000000000000000000000000000000040000000000 -CT=A93D946BD0E87F32719DF5F158CEE669 - -I=215 -KEY=0000000000000000000000000000000000000000000000000000020000000000 -CT=03945236EC2A4D4EAF30B8ABEB54330D - -I=216 -KEY=0000000000000000000000000000000000000000000000000000010000000000 -CT=11CC35301F24B79DDE31AEA2D1354F88 - -I=217 -KEY=0000000000000000000000000000000000000000000000000000008000000000 -CT=E73715B3E8D9A290F44AE6FFBF247E5D - -I=218 -KEY=0000000000000000000000000000000000000000000000000000004000000000 -CT=7345E07732B71CB158BBF64CCA5C5B96 - -I=219 -KEY=0000000000000000000000000000000000000000000000000000002000000000 -CT=6E128F296D24705A1924FD9B70C4ED04 - -I=220 -KEY=0000000000000000000000000000000000000000000000000000001000000000 -CT=95A789776F036783FBD330947083F54F - -I=221 -KEY=0000000000000000000000000000000000000000000000000000000800000000 -CT=360DEC2533EA4AA2E3E54FD3DE2906EB - -I=222 -KEY=0000000000000000000000000000000000000000000000000000000400000000 -CT=E68EFD7FECF4D601EA22727BD764965B - -I=223 -KEY=0000000000000000000000000000000000000000000000000000000200000000 -CT=9065C64A8BFF44AC33EDBB611CF83D7B - -I=224 -KEY=0000000000000000000000000000000000000000000000000000000100000000 -CT=8F33C8DF2A7A51CE8090E8F123BC3723 - -I=225 -KEY=0000000000000000000000000000000000000000000000000000000080000000 -CT=807F391FFBA8291BA625623210F99018 - -I=226 -KEY=0000000000000000000000000000000000000000000000000000000040000000 -CT=5E8B3F3A701522CE5CAA761C929D6292 - -I=227 -KEY=0000000000000000000000000000000000000000000000000000000020000000 -CT=3BA404DC38735A78289E3809E8364835 - -I=228 -KEY=0000000000000000000000000000000000000000000000000000000010000000 -CT=D23BEDBAD229F8305DC425B6B759DCC9 - -I=229 -KEY=0000000000000000000000000000000000000000000000000000000008000000 -CT=44880F21CF5913040AE376AEE2A10AD8 - -I=230 -KEY=0000000000000000000000000000000000000000000000000000000004000000 -CT=9BC98E29D057C0E828C3B5CCE69256C1 - -I=231 -KEY=0000000000000000000000000000000000000000000000000000000002000000 -CT=B293CC7A975DA141A68279368057CC41 - -I=232 -KEY=0000000000000000000000000000000000000000000000000000000001000000 -CT=8D60FB87ACD91385B313BE5F1D7BD30F - -I=233 -KEY=0000000000000000000000000000000000000000000000000000000000800000 -CT=2C8E56132D70291B303C48FDF75543CD - -I=234 -KEY=0000000000000000000000000000000000000000000000000000000000400000 -CT=D1F80035B826791F6CE4E59B7DB1BB0D - -I=235 -KEY=0000000000000000000000000000000000000000000000000000000000200000 -CT=42CE6224FC36469339A133DD08173BD4 - -I=236 -KEY=0000000000000000000000000000000000000000000000000000000000100000 -CT=61817155EA41BCBA2AF7F06AE7CBF585 - -I=237 -KEY=0000000000000000000000000000000000000000000000000000000000080000 -CT=D1923A9866068D2EF5FB77D57C3315B6 - -I=238 -KEY=0000000000000000000000000000000000000000000000000000000000040000 -CT=B37CBDB5D719F49691CA968EF2E84140 - -I=239 -KEY=0000000000000000000000000000000000000000000000000000000000020000 -CT=EC974E653A055D7F8F22171030F68E1D - -I=240 -KEY=0000000000000000000000000000000000000000000000000000000000010000 -CT=DDE5D3B9AAD9C32213BB3675A822499C - -I=241 -KEY=0000000000000000000000000000000000000000000000000000000000008000 -CT=D3B6E9216EA1AE57EB1C628A3C38AB78 - -I=242 -KEY=0000000000000000000000000000000000000000000000000000000000004000 -CT=82C99ECC69472B7E96324B042AE8B87A - -I=243 -KEY=0000000000000000000000000000000000000000000000000000000000002000 -CT=97144DC5338C43600F84439C0AA0D147 - -I=244 -KEY=0000000000000000000000000000000000000000000000000000000000001000 -CT=400AC4A0BBADA1DB2121EB144C7E5209 - -I=245 -KEY=0000000000000000000000000000000000000000000000000000000000000800 -CT=EFD9D550EB419ED278F4885A490AB54C - -I=246 -KEY=0000000000000000000000000000000000000000000000000000000000000400 -CT=2AB7816E149B7C0404C88A8857793670 - -I=247 -KEY=0000000000000000000000000000000000000000000000000000000000000200 -CT=5B591DFF9E8DEE15BAD24C025DBCA481 - -I=248 -KEY=0000000000000000000000000000000000000000000000000000000000000100 -CT=0C06633E30721C3749F49AD8CBF2B754 - -I=249 -KEY=0000000000000000000000000000000000000000000000000000000000000080 -CT=96D6D31A41B5123B2035FD91A921D4CA - -I=250 -KEY=0000000000000000000000000000000000000000000000000000000000000040 -CT=E7F6C34D86668BC2805CA7793C5E86AD - -I=251 -KEY=0000000000000000000000000000000000000000000000000000000000000020 -CT=F46DFF5FF500D6879C4D3E45CF0CF0F3 - -I=252 -KEY=0000000000000000000000000000000000000000000000000000000000000010 -CT=60D842D9C61DA7495C116197B7CECBBE - -I=253 -KEY=0000000000000000000000000000000000000000000000000000000000000008 -CT=D45B24EDB673353EBDF248B8FA06B67A - -I=254 -KEY=0000000000000000000000000000000000000000000000000000000000000004 -CT=119EAEBCC165D0BD02C0D35DC82EF992 - -I=255 -KEY=0000000000000000000000000000000000000000000000000000000000000002 -CT=E673143680414ADA301D0ED34626B9FE - -I=256 -KEY=0000000000000000000000000000000000000000000000000000000000000001 -CT=6B6CFE160A6263631B292F879EEFF926 - -========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/ecb_vt.txt b/src/lib/crypto/aes/test/ecb_vt.txt deleted file mode 100644 index 6dea60fc4..000000000 --- a/src/lib/crypto/aes/test/ecb_vt.txt +++ /dev/null @@ -1,1566 +0,0 @@ - -========================= - -FILENAME: "ecb_vt.txt" - -Electronic Codebook (ECB) Mode -Variable Text Known Answer Tests - -Algorithm Name: Rijndael -Principal Submitter: Joan Daemen - -========== - -KEYSIZE=128 - -KEY=00000000000000000000000000000000 - -I=1 -PT=80000000000000000000000000000000 -CT=3AD78E726C1EC02B7EBFE92B23D9EC34 - -I=2 -PT=40000000000000000000000000000000 -CT=45BC707D29E8204D88DFBA2F0B0CAD9B - -I=3 -PT=20000000000000000000000000000000 -CT=161556838018F52805CDBD6202002E3F - -I=4 -PT=10000000000000000000000000000000 -CT=F5569B3AB6A6D11EFDE1BF0A64C6854A - -I=5 -PT=08000000000000000000000000000000 -CT=64E82B50E501FBD7DD4116921159B83E - -I=6 -PT=04000000000000000000000000000000 -CT=BAAC12FB613A7DE11450375C74034041 - -I=7 -PT=02000000000000000000000000000000 -CT=BCF176A7EAAD8085EBACEA362462A281 - -I=8 -PT=01000000000000000000000000000000 -CT=47711816E91D6FF059BBBF2BF58E0FD3 - -I=9 -PT=00800000000000000000000000000000 -CT=B970DFBE40698AF1638FE38BD3DF3B2F - -I=10 -PT=00400000000000000000000000000000 -CT=F95B59A44F391E14CF20B74BDC32FCFF - -I=11 -PT=00200000000000000000000000000000 -CT=720F74AE04A2A435B9A7256E49378F5B - -I=12 -PT=00100000000000000000000000000000 -CT=2A0445F61D36BFA7E277070730CF76DA - -I=13 -PT=00080000000000000000000000000000 -CT=8D0536B997AEFEC1D94011BAB6699A03 - -I=14 -PT=00040000000000000000000000000000 -CT=674F002E19F6ED47EFF319E51FAD4498 - -I=15 -PT=00020000000000000000000000000000 -CT=292C02C5CB9163C80AC0F6CF1DD8E92D - -I=16 -PT=00010000000000000000000000000000 -CT=FA321CF18EF5FE727DD82A5C1E945141 - -I=17 -PT=00008000000000000000000000000000 -CT=A5A7AFE1034C39CCCEBE3C584BC0BE05 - -I=18 -PT=00004000000000000000000000000000 -CT=4FF5A52E697E77D081205DBDB21CEA39 - -I=19 -PT=00002000000000000000000000000000 -CT=209E88DC94C9003000CE0769AF7B7166 - -I=20 -PT=00001000000000000000000000000000 -CT=5DEE41AF864CB4B650E5F51551824D38 - -I=21 -PT=00000800000000000000000000000000 -CT=A79A63FA7E4503AE6D6E09F5F9053030 - -I=22 -PT=00000400000000000000000000000000 -CT=A48316749FAE7FAC7002031A6AFD8BA7 - -I=23 -PT=00000200000000000000000000000000 -CT=D6EEE8A7357A0E1D64262CA9C337AC42 - -I=24 -PT=00000100000000000000000000000000 -CT=B013CA8A62A858053E9FB667ED39829E - -I=25 -PT=00000080000000000000000000000000 -CT=DF6EA9E4538A45A52D5C1A43C88F4B55 - -I=26 -PT=00000040000000000000000000000000 -CT=7D03BA451371591D3FD5547D9165C73B - -I=27 -PT=00000020000000000000000000000000 -CT=0E0426281A6277E186499D365D5F49FF - -I=28 -PT=00000010000000000000000000000000 -CT=DBC02169DD2059E6CC4C57C1FEDF5AB4 - -I=29 -PT=00000008000000000000000000000000 -CT=826590E05D167DA6F00DCC75E22788EB - -I=30 -PT=00000004000000000000000000000000 -CT=34A73F21A04421D9786335FAAB49423A - -I=31 -PT=00000002000000000000000000000000 -CT=ED347D0E0128EE1A7392A1D36AB78AA9 - -I=32 -PT=00000001000000000000000000000000 -CT=EE944B2FE6E9FC888042608DA9615F75 - -I=33 -PT=00000000800000000000000000000000 -CT=9E7C85A909EF7218BA7947CFB4718F46 - -I=34 -PT=00000000400000000000000000000000 -CT=811AE07A0B2B1F816587FA73699AE77D - -I=35 -PT=00000000200000000000000000000000 -CT=68466FBF43C2FE13D4B18F7EC5EA745F - -I=36 -PT=00000000100000000000000000000000 -CT=D20B015C7191B219780956E6101F9354 - -I=37 -PT=00000000080000000000000000000000 -CT=5939D5C1BBF54EE1B3E326D757BDDE25 - -I=38 -PT=00000000040000000000000000000000 -CT=B1FDAFE9A0240E8FFEA19CE94B5105D3 - -I=39 -PT=00000000020000000000000000000000 -CT=D62962ECE02CDD68C06BDFEFB2F9495B - -I=40 -PT=00000000010000000000000000000000 -CT=B3BB2DE6F3C26587BA8BAC4F7AD9499A - -I=41 -PT=00000000008000000000000000000000 -CT=E0B1072D6D9FF703D6FBEF77852B0A6B - -I=42 -PT=00000000004000000000000000000000 -CT=D8DD51C907F478DE0228E83E61FD1758 - -I=43 -PT=00000000002000000000000000000000 -CT=A42DFFE6E7C1671C06A25236FDD10017 - -I=44 -PT=00000000001000000000000000000000 -CT=25ACF141550BFAB9EF451B6C6A5B2163 - -I=45 -PT=00000000000800000000000000000000 -CT=4DA7FCA3949B16E821DBC84F19581018 - -I=46 -PT=00000000000400000000000000000000 -CT=7D49B6347CBCC8919C7FA96A37A7A215 - -I=47 -PT=00000000000200000000000000000000 -CT=900024B29A08C6721B95BA3B753DDB4D - -I=48 -PT=00000000000100000000000000000000 -CT=6D2182FB283B6934D90BA7848CAB5E66 - -I=49 -PT=00000000000080000000000000000000 -CT=F73EF01B448D23A4D90DE8B2F9666E7A - -I=50 -PT=00000000000040000000000000000000 -CT=4AD9CDA2418643E9A3D926AF5E6B0412 - -I=51 -PT=00000000000020000000000000000000 -CT=7CAEC8E7E5953997D545B033201C8C5B - -I=52 -PT=00000000000010000000000000000000 -CT=3C43CA1F6B6864503E27B48D88230CF5 - -I=53 -PT=00000000000008000000000000000000 -CT=44F779B93108FE9FEEC880D79BA74488 - -I=54 -PT=00000000000004000000000000000000 -CT=9E50E8D9CFD3A682A78E527C9072A1CF - -I=55 -PT=00000000000002000000000000000000 -CT=68D000CBC838BBE3C505D6F814C01F28 - -I=56 -PT=00000000000001000000000000000000 -CT=2CB2A9FEC1ACD1D9B0FA05205E304F57 - -I=57 -PT=00000000000000800000000000000000 -CT=01EB2806606E46444520A5CC6180CD4B - -I=58 -PT=00000000000000400000000000000000 -CT=DAA9B25168CC702326F217F1A0C0B162 - -I=59 -PT=00000000000000200000000000000000 -CT=3E07E648975D9578D03555B1755807ED - -I=60 -PT=00000000000000100000000000000000 -CT=0B45F52E802C8B8DE09579425B80B711 - -I=61 -PT=00000000000000080000000000000000 -CT=659595DA0B68F6DF0DD6CA77202986E1 - -I=62 -PT=00000000000000040000000000000000 -CT=05FF42873893536E58C8FA98A45C73C4 - -I=63 -PT=00000000000000020000000000000000 -CT=B5B03421DE8BBFFC4EADEC767339A9BD - -I=64 -PT=00000000000000010000000000000000 -CT=788BCD111ECF73D4E78D2E21BEF55460 - -I=65 -PT=00000000000000008000000000000000 -CT=909CD9EC6790359F982DC6F2393D5315 - -I=66 -PT=00000000000000004000000000000000 -CT=332950F361535FF24EFAC8C76293F12C - -I=67 -PT=00000000000000002000000000000000 -CT=A68CCD4E330FFDA9D576DA436DB53D75 - -I=68 -PT=00000000000000001000000000000000 -CT=27C8A1CCFDB0B015D1ED5B3E77143791 - -I=69 -PT=00000000000000000800000000000000 -CT=D76A4B95887A77DF610DD3E1D3B20325 - -I=70 -PT=00000000000000000400000000000000 -CT=C068AB0DE71C66DAE83C361EF4B2D989 - -I=71 -PT=00000000000000000200000000000000 -CT=C2120BCD49EDA9A288B3B4BE79AC8158 - -I=72 -PT=00000000000000000100000000000000 -CT=0C546F62BF2773CD0F564FCECA7BA688 - -I=73 -PT=00000000000000000080000000000000 -CT=18F3462BEDE4920213CCB66DAB1640AA - -I=74 -PT=00000000000000000040000000000000 -CT=FE42F245EDD0E24B216AEBD8B392D690 - -I=75 -PT=00000000000000000020000000000000 -CT=3D3EEBC8D3D1558A194C2D00C337FF2B - -I=76 -PT=00000000000000000010000000000000 -CT=29AAEDF043E785DB42836F79BE6CBA28 - -I=77 -PT=00000000000000000008000000000000 -CT=215F90C6744E2944358E78619159A611 - -I=78 -PT=00000000000000000004000000000000 -CT=8606B1AA9E1D548E5442B06551E2C6DC - -I=79 -PT=00000000000000000002000000000000 -CT=987BB4B8740EC0EDE7FEA97DF033B5B1 - -I=80 -PT=00000000000000000001000000000000 -CT=C0A3500DA5B0AE07D2F450930BEEDF1B - -I=81 -PT=00000000000000000000800000000000 -CT=525FDF8312FE8F32C781481A8DAAAE37 - -I=82 -PT=00000000000000000000400000000000 -CT=BFD2C56AE5FB9C9DE33A6944572A6487 - -I=83 -PT=00000000000000000000200000000000 -CT=7975A57A425CDF5AA1FA929101F650B0 - -I=84 -PT=00000000000000000000100000000000 -CT=BF174BC49609A8709B2CD8366DAA79FE - -I=85 -PT=00000000000000000000080000000000 -CT=06C50C43222F56C874B1704E9F44BF7D - -I=86 -PT=00000000000000000000040000000000 -CT=0CEC48CD34043EA29CA3B8ED5278721E - -I=87 -PT=00000000000000000000020000000000 -CT=9548EA34A1560197B304D0ACB8A1698D - -I=88 -PT=00000000000000000000010000000000 -CT=22F9E9B1BD73B6B5B7D3062C986272F3 - -I=89 -PT=00000000000000000000008000000000 -CT=FEE8E934BD0873295059002230E298D4 - -I=90 -PT=00000000000000000000004000000000 -CT=1B08E2E3EB820D139CB4ABBDBE81D00D - -I=91 -PT=00000000000000000000002000000000 -CT=0021177681E4D90CEAF69DCED0145125 - -I=92 -PT=00000000000000000000001000000000 -CT=4A8E314452CA8A8A3619FC54BC423643 - -I=93 -PT=00000000000000000000000800000000 -CT=65047474F7222C94C6965425FF1BFD0A - -I=94 -PT=00000000000000000000000400000000 -CT=E123F551A9C4A8489622B16F961A9AA4 - -I=95 -PT=00000000000000000000000200000000 -CT=EF05530948B80915028BB2B6FE429380 - -I=96 -PT=00000000000000000000000100000000 -CT=72535B7FE0F0F777CEDCD55CD77E2DDF - -I=97 -PT=00000000000000000000000080000000 -CT=3423D8EFC31FA2F4C365C77D8F3B5C63 - -I=98 -PT=00000000000000000000000040000000 -CT=DE0E51C264663F3C5DBC59580A98D8E4 - -I=99 -PT=00000000000000000000000020000000 -CT=B2D9391166680947AB09264156719679 - -I=100 -PT=00000000000000000000000010000000 -CT=10DB79F23B06D263835C424AF749ADB7 - -I=101 -PT=00000000000000000000000008000000 -CT=DDF72D27E6B01EC107EA3E005B59563B - -I=102 -PT=00000000000000000000000004000000 -CT=8266B57485A5954A4236751DE07F6694 - -I=103 -PT=00000000000000000000000002000000 -CT=669A501E1F1ADE6E5523DE01D6DBC987 - -I=104 -PT=00000000000000000000000001000000 -CT=C20C48F2989725D461D1DB589DC0896E - -I=105 -PT=00000000000000000000000000800000 -CT=DE35158E7810ED1191825D2AA98FA97D - -I=106 -PT=00000000000000000000000000400000 -CT=4FE294F2C0F34D0671B693A237EBDDC8 - -I=107 -PT=00000000000000000000000000200000 -CT=087AE74B10CCBFDF6739FEB9559C01A4 - -I=108 -PT=00000000000000000000000000100000 -CT=5DC278970B7DEF77A5536C77AB59C207 - -I=109 -PT=00000000000000000000000000080000 -CT=7607F078C77085184EAA9B060C1FBFFF - -I=110 -PT=00000000000000000000000000040000 -CT=9DB841531BCBE7998DAD19993FB3CC00 - -I=111 -PT=00000000000000000000000000020000 -CT=D6A089B654854A94560BAE13298835B8 - -I=112 -PT=00000000000000000000000000010000 -CT=E1E223C4CF90CC5D195B370D65114622 - -I=113 -PT=00000000000000000000000000008000 -CT=1CBED73C50D053BDAD372CEEE54836A1 - -I=114 -PT=00000000000000000000000000004000 -CT=D309E69376D257ADF2BFDA152B26555F - -I=115 -PT=00000000000000000000000000002000 -CT=740F7649117F0DEE6EAA7789A9994C36 - -I=116 -PT=00000000000000000000000000001000 -CT=76AE64417C297184D668C5FD908B3CE5 - -I=117 -PT=00000000000000000000000000000800 -CT=6095FEA4AA8035591F1787A819C48787 - -I=118 -PT=00000000000000000000000000000400 -CT=D1FF4E7ACD1C79967FEBAB0F7465D450 - -I=119 -PT=00000000000000000000000000000200 -CT=5F5AD3C42B9489557BB63BF49ECF5F8A - -I=120 -PT=00000000000000000000000000000100 -CT=FB56CC09B680B1D07C5A52149E29F07C - -I=121 -PT=00000000000000000000000000000080 -CT=FF49B8DF4A97CBE03833E66197620DAD - -I=122 -PT=00000000000000000000000000000040 -CT=5E070ADE533D2E090ED0F5BE13BC0983 - -I=123 -PT=00000000000000000000000000000020 -CT=3AB4FB1D2B7BA376590A2C241D1F508D - -I=124 -PT=00000000000000000000000000000010 -CT=58B2431BC0BEDE02550F40238969EC78 - -I=125 -PT=00000000000000000000000000000008 -CT=0253786E126504F0DAB90C48A30321DE - -I=126 -PT=00000000000000000000000000000004 -CT=200211214E7394DA2089B6ACD093ABE0 - -I=127 -PT=00000000000000000000000000000002 -CT=0388DACE60B6A392F328C2B971B2FE78 - -I=128 -PT=00000000000000000000000000000001 -CT=58E2FCCEFA7E3061367F1D57A4E7455A - -========== - -KEYSIZE=192 - -KEY=000000000000000000000000000000000000000000000000 - -I=1 -PT=80000000000000000000000000000000 -CT=6CD02513E8D4DC986B4AFE087A60BD0C - -I=2 -PT=40000000000000000000000000000000 -CT=423D2772A0CA56DAABB48D2129062987 - -I=3 -PT=20000000000000000000000000000000 -CT=1021F2A8DA70EB2219DC16804445FF98 - -I=4 -PT=10000000000000000000000000000000 -CT=C636E35B402577F96974D8804295EBB8 - -I=5 -PT=08000000000000000000000000000000 -CT=1566D2E57E8393C19E29F892EA28A9A7 - -I=6 -PT=04000000000000000000000000000000 -CT=883C878FED70B36CC09D040F9619DD19 - -I=7 -PT=02000000000000000000000000000000 -CT=06734593A974965790E715594FC34AA9 - -I=8 -PT=01000000000000000000000000000000 -CT=F19B389948D9A45534E5BD36C984134A - -I=9 -PT=00800000000000000000000000000000 -CT=D8410DFC14FA6D175EC968EA8CAC514C - -I=10 -PT=00400000000000000000000000000000 -CT=7E6C6EBB4029A177CF7B2FDD9AC6BB7A - -I=11 -PT=00200000000000000000000000000000 -CT=4B51DD4850DC0A6C3A46D924003D2C27 - -I=12 -PT=00100000000000000000000000000000 -CT=2E510A9D917B15BE32A192B12A668F23 - -I=13 -PT=00080000000000000000000000000000 -CT=88F6F79962B0FB77FEA8E7C632D3108E - -I=14 -PT=00040000000000000000000000000000 -CT=A3A35AB1D88DAF07B52794A0F065383A - -I=15 -PT=00020000000000000000000000000000 -CT=DC6CC878433E2B3BB193049A4ECBFC53 - -I=16 -PT=00010000000000000000000000000000 -CT=EFCD3763EB7B1A415938248A9A5B4FD5 - -I=17 -PT=00008000000000000000000000000000 -CT=AB7E9FB9A66DBE5BB44854F07D9015EE - -I=18 -PT=00004000000000000000000000000000 -CT=8B8E9D3365F8F6743ECF7E33E99255A4 - -I=19 -PT=00002000000000000000000000000000 -CT=54D37B4F176FF3D8F6AFC866066D8572 - -I=20 -PT=00001000000000000000000000000000 -CT=E83310889480FBF3C00342E3126D0D02 - -I=21 -PT=00000800000000000000000000000000 -CT=D321AB2511F92F098174AA2DE6E85DA2 - -I=22 -PT=00000400000000000000000000000000 -CT=D8E3F40B1112D5149D58C481DFA9983F - -I=23 -PT=00000200000000000000000000000000 -CT=2454C4E0806639DDF19854D6C68054AD - -I=24 -PT=00000100000000000000000000000000 -CT=A5506D410F7CA32F3955DD79D9D09418 - -I=25 -PT=00000080000000000000000000000000 -CT=7908EE40677699568A7DC1AA317C7E4E - -I=26 -PT=00000040000000000000000000000000 -CT=B4B7B29DD43B2F5CF765E25192273982 - -I=27 -PT=00000020000000000000000000000000 -CT=92AFE9668159BEFFE2A86F8503260164 - -I=28 -PT=00000010000000000000000000000000 -CT=5C36A232FBA6D187A84657AD4028B18F - -I=29 -PT=00000008000000000000000000000000 -CT=A2E994DFAB3A798DF8F54F6DA87E58E2 - -I=30 -PT=00000004000000000000000000000000 -CT=6CDAB10A72ADF77D71D0765BAAE95631 - -I=31 -PT=00000002000000000000000000000000 -CT=9FE3C801BCAAF7BB800F2E6BF3278E21 - -I=32 -PT=00000001000000000000000000000000 -CT=B459D90D9A6C392E5493BC91CF5A0863 - -I=33 -PT=00000000800000000000000000000000 -CT=0518A9FA5007F6787E0FB4E5AC27D758 - -I=34 -PT=00000000400000000000000000000000 -CT=BED9795415D28599700ED7952384A963 - -I=35 -PT=00000000200000000000000000000000 -CT=F0140421173D60251EF6CAB0229B1B50 - -I=36 -PT=00000000100000000000000000000000 -CT=460EB4652B3F6779EA28CB11B37529ED - -I=37 -PT=00000000080000000000000000000000 -CT=C4283D351C960A6AC13CD19CCF03AE38 - -I=38 -PT=00000000040000000000000000000000 -CT=6815A10047B2C834A798EBDCC6786C75 - -I=39 -PT=00000000020000000000000000000000 -CT=99BA19F0CDD5990D0386B32CE56C9C4C - -I=40 -PT=00000000010000000000000000000000 -CT=DE76F62C61E07915162DA13E79679DEC - -I=41 -PT=00000000008000000000000000000000 -CT=DD0325D6854803D06D1D2277D5FB8D67 - -I=42 -PT=00000000004000000000000000000000 -CT=580B71A41DE37D6FAC83CCB0B3BB1C97 - -I=43 -PT=00000000002000000000000000000000 -CT=E9B1AB470A1B02EF0FF5E6754A092C96 - -I=44 -PT=00000000001000000000000000000000 -CT=8590620F5AF5993B7410282F4126BC1F - -I=45 -PT=00000000000800000000000000000000 -CT=8D4914D2F1B22B2E268E66E532D29D7C - -I=46 -PT=00000000000400000000000000000000 -CT=FD826CE48E62C5E30867044B86BA4B56 - -I=47 -PT=00000000000200000000000000000000 -CT=100E7B831C9F35FA1271F5F1316C6FCF - -I=48 -PT=00000000000100000000000000000000 -CT=0A2DD0C17F68B996AA96C007003D0B31 - -I=49 -PT=00000000000080000000000000000000 -CT=C95F68C57E06B0A2E1F623C83C5D80BF - -I=50 -PT=00000000000040000000000000000000 -CT=571CAFC92C7C8A5EC54C0741E186905C - -I=51 -PT=00000000000020000000000000000000 -CT=22514353E95312C112255E1EED0B2DF6 - -I=52 -PT=00000000000010000000000000000000 -CT=791A8BF462BD17580BD9152C6D11C6C5 - -I=53 -PT=00000000000008000000000000000000 -CT=5882A0178D548F84A165DB809C60DC28 - -I=54 -PT=00000000000004000000000000000000 -CT=3CE4A90EED4458CA6039E42DDADB71C3 - -I=55 -PT=00000000000002000000000000000000 -CT=D3CBAB261207A16BE2751E77044FD7C9 - -I=56 -PT=00000000000001000000000000000000 -CT=24E32B698A7B32217093628B01F424AB - -I=57 -PT=00000000000000800000000000000000 -CT=9F6AFC0AF27CF565110C77E3C24F4F5B - -I=58 -PT=00000000000000400000000000000000 -CT=E088AA5CDA20EF267BB039B00C72C45B - -I=59 -PT=00000000000000200000000000000000 -CT=5CF1018B7E0BA1775601C2E279900360 - -I=60 -PT=00000000000000100000000000000000 -CT=3B1A7388B89FB9416AD8753CF5AF35D2 - -I=61 -PT=00000000000000080000000000000000 -CT=137FA4ED00AFCD9F5D8BC0D14BD5837A - -I=62 -PT=00000000000000040000000000000000 -CT=806F5C9B663559BB56F234881E4A3E60 - -I=63 -PT=00000000000000020000000000000000 -CT=8069A449152292DF2DE8642992C632B6 - -I=64 -PT=00000000000000010000000000000000 -CT=37C6CF2A1ABD1B1F1922B46C7B4A280D - -I=65 -PT=00000000000000008000000000000000 -CT=7A2835260E5A0AA2B5DC301800EC8438 - -I=66 -PT=00000000000000004000000000000000 -CT=EE81FAF2F9058213FFCACF281CB8509E - -I=67 -PT=00000000000000002000000000000000 -CT=57F22D93C37129BA331FDBA38E005A1E - -I=68 -PT=00000000000000001000000000000000 -CT=EC798782E87B7D9F780CC3C3A46519B5 - -I=69 -PT=00000000000000000800000000000000 -CT=43EA28497F5D40E3A4744FA2EDAA42DE - -I=70 -PT=00000000000000000400000000000000 -CT=91F004E7DEBF41B3414DD8C5C317372C - -I=71 -PT=00000000000000000200000000000000 -CT=C249EAE54E7B4DF43B938C1B4CC28314 - -I=72 -PT=00000000000000000100000000000000 -CT=32C289D7EEFB99D2F17AD7B7D45FE1EC - -I=73 -PT=00000000000000000080000000000000 -CT=A675FB2E8DDBF810CEF01CF2B728CD2B - -I=74 -PT=00000000000000000040000000000000 -CT=A418AAAB6E6921CC731AA8A349386080 - -I=75 -PT=00000000000000000020000000000000 -CT=2E2B0F44863E67D9B0215C4ABD60417F - -I=76 -PT=00000000000000000010000000000000 -CT=F0AF7CB19E911D481F6426DAEFDD2240 - -I=77 -PT=00000000000000000008000000000000 -CT=CB1304DAAA2DF6878F56AC2E0F887E04 - -I=78 -PT=00000000000000000004000000000000 -CT=B1B70A7E6A0CD1916D9B78BEA19084AE - -I=79 -PT=00000000000000000002000000000000 -CT=0CDE9F9BE646A5FCE3436B794A9CFC65 - -I=80 -PT=00000000000000000001000000000000 -CT=68C7946D476A0A36674B36AFD7E5DF33 - -I=81 -PT=00000000000000000000800000000000 -CT=48770159A07DD8DFFF06C80105F8D57C - -I=82 -PT=00000000000000000000400000000000 -CT=665E62801B3260E3C45BD3BE34DFDEBE - -I=83 -PT=00000000000000000000200000000000 -CT=4159C1F686BFBE5B0E50BDB0DA532B69 - -I=84 -PT=00000000000000000000100000000000 -CT=6333100A5A4AD917DC2D4E78A04869A3 - -I=85 -PT=00000000000000000000080000000000 -CT=866A4519AB1D199F25886B89D0539ACC - -I=86 -PT=00000000000000000000040000000000 -CT=EC0CFD37E4CBC7E8BE385283F7AEA75A - -I=87 -PT=00000000000000000000020000000000 -CT=CA2F383AACCA0810AA13F3E710621422 - -I=88 -PT=00000000000000000000010000000000 -CT=1D0EEF6870444F950937831EC0A55D98 - -I=89 -PT=00000000000000000000008000000000 -CT=37839B35ED6801E7670496D479A95017 - -I=90 -PT=00000000000000000000004000000000 -CT=02317C8C7098C4F94AB867AC7A49DD8D - -I=91 -PT=00000000000000000000002000000000 -CT=FFB4CB4E3F7F8BF3367EBD43236518B4 - -I=92 -PT=00000000000000000000001000000000 -CT=36BEDEF1E4AA3E4A40A305741713FCBF - -I=93 -PT=00000000000000000000000800000000 -CT=B2DFE3C4870269C1E3FEEC39161540D9 - -I=94 -PT=00000000000000000000000400000000 -CT=147EF2518AD45DA0026056ECBF6A3DFA - -I=95 -PT=00000000000000000000000200000000 -CT=027A75E4DE635790E47ACE90D7928804 - -I=96 -PT=00000000000000000000000100000000 -CT=C4CF3CCB59BF87D0AFBD629F48CFBB7B - -I=97 -PT=00000000000000000000000080000000 -CT=35165C93F564C97E1C32EF97E8151A87 - -I=98 -PT=00000000000000000000000040000000 -CT=449DE37F7D5A1BBD628ABBE7E061701D - -I=99 -PT=00000000000000000000000020000000 -CT=B1D45EAF218F1799B149BAD677FE129F - -I=100 -PT=00000000000000000000000010000000 -CT=BE08AC6DB6BD0583AA9D2ABC71C73DCD - -I=101 -PT=00000000000000000000000008000000 -CT=BCC835BD3DF1A79E4C7C145B899A5C25 - -I=102 -PT=00000000000000000000000004000000 -CT=3D311EA611FF5AF371301C58A8E9912D - -I=103 -PT=00000000000000000000000002000000 -CT=A5A1BEA594ACC7CA80F09EA5ADDB5C71 - -I=104 -PT=00000000000000000000000001000000 -CT=0F09492429FE7222D6CD8190D9F2FFBF - -I=105 -PT=00000000000000000000000000800000 -CT=816D2220A16B8AAEE71364FD43636C6F - -I=106 -PT=00000000000000000000000000400000 -CT=D7E8702408419ED73191B107EAF75A0B - -I=107 -PT=00000000000000000000000000200000 -CT=9B170EFB1E235B433C78E276BEA082F0 - -I=108 -PT=00000000000000000000000000100000 -CT=03BBECC5598AE974430F29395522F096 - -I=109 -PT=00000000000000000000000000080000 -CT=DB53517766C0E8CF42059607CBA89380 - -I=110 -PT=00000000000000000000000000040000 -CT=2E2AF4B7931F0AEFFAC5471148A5BB97 - -I=111 -PT=00000000000000000000000000020000 -CT=C872C0408266403B984F635FF5683DE4 - -I=112 -PT=00000000000000000000000000010000 -CT=15DCF750B0E3A68AD1F4EFD07E8967B4 - -I=113 -PT=00000000000000000000000000008000 -CT=B41092048E9E6A749F6FD8CE515A23A3 - -I=114 -PT=00000000000000000000000000004000 -CT=4DA9267D62507994312BD5C99ADDE730 - -I=115 -PT=00000000000000000000000000002000 -CT=9E2FCA6D1D626E9C6A924EBF7DBF618A - -I=116 -PT=00000000000000000000000000001000 -CT=E092E8D7EF2C2465AEFB2493C3063590 - -I=117 -PT=00000000000000000000000000000800 -CT=1C0E58DA37D1068378A88DBE2EDE4E10 - -I=118 -PT=00000000000000000000000000000400 -CT=19063F854232B8509A6A3A6D46809959 - -I=119 -PT=00000000000000000000000000000200 -CT=447FB09E54EFA285F7530F25C4EA0022 - -I=120 -PT=00000000000000000000000000000100 -CT=F6ABE86321BE40E1FBFDAFED37CC1D9B - -I=121 -PT=00000000000000000000000000000080 -CT=4E8506CD006666341D6CF51F98B41F35 - -I=122 -PT=00000000000000000000000000000040 -CT=53995DE0009CA18BECAFB8307C54C14C - -I=123 -PT=00000000000000000000000000000020 -CT=2006BF99F4C58B6CC2627856593FAEEA - -I=124 -PT=00000000000000000000000000000010 -CT=2DA697D2737CB30B744A4644FA1CBC6E - -I=125 -PT=00000000000000000000000000000008 -CT=47A22ACDB60C3A986A8F76ECD0EA3433 - -I=126 -PT=00000000000000000000000000000004 -CT=FDAA17C2CDE20268FE36E164EA532151 - -I=127 -PT=00000000000000000000000000000002 -CT=98E7247C07F0FE411C267E4384B0F600 - -I=128 -PT=00000000000000000000000000000001 -CT=CD33B28AC773F74BA00ED1F312572435 - -========== - -KEYSIZE=256 - -KEY=0000000000000000000000000000000000000000000000000000000000000000 - -I=1 -PT=80000000000000000000000000000000 -CT=DDC6BF790C15760D8D9AEB6F9A75FD4E - -I=2 -PT=40000000000000000000000000000000 -CT=C7098C217C334D0C9BDF37EA13B0822C - -I=3 -PT=20000000000000000000000000000000 -CT=60F0FB0D4C56A8D4EEFEC5264204042D - -I=4 -PT=10000000000000000000000000000000 -CT=73376FBBF654D0686E0E84001477106B - -I=5 -PT=08000000000000000000000000000000 -CT=2F443B52BA5F0C6EA0602C7C4FD259B6 - -I=6 -PT=04000000000000000000000000000000 -CT=75D11B0E3A68C4223D88DBF017977DD7 - -I=7 -PT=02000000000000000000000000000000 -CT=779B38D15BFFB63D8D609D551A5CC98E - -I=8 -PT=01000000000000000000000000000000 -CT=5275F3D86B4FB8684593133EBFA53CD3 - -I=9 -PT=00800000000000000000000000000000 -CT=1CEF2074B336CEC62F12DEA2F6AB1481 - -I=10 -PT=00400000000000000000000000000000 -CT=1AEF5ABBAD9D7160874578DCD8BAE172 - -I=11 -PT=00200000000000000000000000000000 -CT=46C525DB17E72F26BF03216846B6F609 - -I=12 -PT=00100000000000000000000000000000 -CT=E24411F941BBE08788781E3EC52CBAA4 - -I=13 -PT=00080000000000000000000000000000 -CT=83A3DEDD1DD27018F6A6477E40527581 - -I=14 -PT=00040000000000000000000000000000 -CT=B68F8A2CDBAB0C923C67FC8F0F1087DE - -I=15 -PT=00020000000000000000000000000000 -CT=649944A70C32BF87A7409E7AE128FDE8 - -I=16 -PT=00010000000000000000000000000000 -CT=2846526D67387539C89314DE9E0C2D02 - -I=17 -PT=00008000000000000000000000000000 -CT=A9A0B8402E53C70DD1688054BA58DDFD - -I=18 -PT=00004000000000000000000000000000 -CT=4A72E6E1B79C83AC4BE3EBA5699EED48 - -I=19 -PT=00002000000000000000000000000000 -CT=B0E36B867BA4FF2B77D0614B0E364E4C - -I=20 -PT=00001000000000000000000000000000 -CT=49B57DE141F6418E3090F24DDD4014B6 - -I=21 -PT=00000800000000000000000000000000 -CT=A6C0D5B9797258E1987AC5F6CD20146D - -I=22 -PT=00000400000000000000000000000000 -CT=426CF4BDCAA369175965D26E7C71EEA2 - -I=23 -PT=00000200000000000000000000000000 -CT=E27F484CE54BC99BC1A52BDA3B518A26 - -I=24 -PT=00000100000000000000000000000000 -CT=D16D186284C7E6EE64B8104E0EF20BA5 - -I=25 -PT=00000080000000000000000000000000 -CT=6431F8538AD54E1E044A9F71F8EF556B - -I=26 -PT=00000040000000000000000000000000 -CT=ECD57CEB451D27EB96C55B2042257E8E - -I=27 -PT=00000020000000000000000000000000 -CT=4F0F188DC911B1954AFBC734C9F68872 - -I=28 -PT=00000010000000000000000000000000 -CT=B54DEF0337626B65614E81EDFDE620F3 - -I=29 -PT=00000008000000000000000000000000 -CT=6655D8074CAE0B90B0D3A3FE72D4D9DB - -I=30 -PT=00000004000000000000000000000000 -CT=C6B74B6B9EB4FC0C9A237DB1B616D09A - -I=31 -PT=00000002000000000000000000000000 -CT=D7B5D076EA56EC2B20791D7AD51CCF8F - -I=32 -PT=00000001000000000000000000000000 -CT=FE160C224BF003CE3BDDC90CB52ED22C - -I=33 -PT=00000000800000000000000000000000 -CT=5E00DA9BA94B5EC0D258D8A8002E0F6A - -I=34 -PT=00000000400000000000000000000000 -CT=09AC6DCFF4DACFF1651E2BA212A292A3 - -I=35 -PT=00000000200000000000000000000000 -CT=B283617E318D99AF83A05D9810BA89F7 - -I=36 -PT=00000000100000000000000000000000 -CT=0B5F70CCB40B0EF2538AE9B4A9770B35 - -I=37 -PT=00000000080000000000000000000000 -CT=43282BF180248FB517839B37F4DDAAE4 - -I=38 -PT=00000000040000000000000000000000 -CT=DDBD534C8B2E6D30A268F88C55AD765B - -I=39 -PT=00000000020000000000000000000000 -CT=A41A164E50EC2D9F175E752B755E0B5C - -I=40 -PT=00000000010000000000000000000000 -CT=37BFF99FF2F7AA97779E4ADF6F13FB10 - -I=41 -PT=00000000008000000000000000000000 -CT=9BA4F7BD298152903A683C4CEC669216 - -I=42 -PT=00000000004000000000000000000000 -CT=5FB750C7CE10DE7B4504248914D0DA06 - -I=43 -PT=00000000002000000000000000000000 -CT=3E748BFA108E086F51D56EC74A9E0FB9 - -I=44 -PT=00000000001000000000000000000000 -CT=31D4E56B99F5B73C1B8437DF332AFB98 - -I=45 -PT=00000000000800000000000000000000 -CT=9DC6717B84FC55D266E7B1D9B5C52A5F - -I=46 -PT=00000000000400000000000000000000 -CT=8EF8BA007F23C0A50FC120E07041BCCD - -I=47 -PT=00000000000200000000000000000000 -CT=C58F38E1839FC1918A12B8C9E88C66B6 - -I=48 -PT=00000000000100000000000000000000 -CT=B695D72A3FCF508C4050E12E40061C2D - -I=49 -PT=00000000000080000000000000000000 -CT=5D2736AD478A50583BC8C11BEFF16D7A - -I=50 -PT=00000000000040000000000000000000 -CT=DF0EACA8F17847AD41F9578F14C7B56B - -I=51 -PT=00000000000020000000000000000000 -CT=E5AA14AD48AD0A3C47CC35D5F8020E51 - -I=52 -PT=00000000000010000000000000000000 -CT=11BE6C8F58EBD8CEF1A53F591A68E8CE - -I=53 -PT=00000000000008000000000000000000 -CT=ECFE7BAFCBF42C1FEE015488770B3053 - -I=54 -PT=00000000000004000000000000000000 -CT=E552649F8D8EC4A1E1CD6DF50B6E6777 - -I=55 -PT=00000000000002000000000000000000 -CT=521C0629DE93B9119CDB1DDC5809DDEA - -I=56 -PT=00000000000001000000000000000000 -CT=CB38A62A0BAB1784156BA038CBA99BF6 - -I=57 -PT=00000000000000800000000000000000 -CT=76CCEE8AAACD394DE1EEF3DDA10CB54B - -I=58 -PT=00000000000000400000000000000000 -CT=6AFF910FA1D5673140E2DB59B8416049 - -I=59 -PT=00000000000000200000000000000000 -CT=064A12C0EF73FB386801BF4F35F3120D - -I=60 -PT=00000000000000100000000000000000 -CT=2240E374929D5B1BB8FF0FFDDDF640EC - -I=61 -PT=00000000000000080000000000000000 -CT=D4BA15C904C7692185DE85C02052E180 - -I=62 -PT=00000000000000040000000000000000 -CT=1714A315AB0166728A44CD91D4AE9018 - -I=63 -PT=00000000000000020000000000000000 -CT=6C970BDD9F0E222722EA31A1D12DD0AD - -I=64 -PT=00000000000000010000000000000000 -CT=F5956EDF02BD36A401BBB6CE77C3D3FB - -I=65 -PT=00000000000000008000000000000000 -CT=0CA11F122CCD7C259DC597EED3DF9BC4 - -I=66 -PT=00000000000000004000000000000000 -CT=50109AB4912AD2560B206F331B62EB6C - -I=67 -PT=00000000000000002000000000000000 -CT=DBE7C91A4175614889A2D4BEFD64845E - -I=68 -PT=00000000000000001000000000000000 -CT=0D3322853A571A6B46B79C0228E0DD25 - -I=69 -PT=00000000000000000800000000000000 -CT=96E4EE0BB9A11C6FB8522F285BADDEB6 - -I=70 -PT=00000000000000000400000000000000 -CT=96705C52D2CFCE82E630C93477C79C49 - -I=71 -PT=00000000000000000200000000000000 -CT=C50130AED6A126149D71F3888C83C232 - -I=72 -PT=00000000000000000100000000000000 -CT=4816EFE3DEB380566EBA0C17BF582090 - -I=73 -PT=00000000000000000080000000000000 -CT=0390857B4C8C98E4CF7A2B6F3394C507 - -I=74 -PT=00000000000000000040000000000000 -CT=422E73A02025EBE8B8B5D6E0FA24FCB2 - -I=75 -PT=00000000000000000020000000000000 -CT=3271AA7F4BF1D7C38050A43076D4FF76 - -I=76 -PT=00000000000000000010000000000000 -CT=D2074946F0D37B8975607BFC2E70234C - -I=77 -PT=00000000000000000008000000000000 -CT=1A509194C1270AB92E5A42D3A9F8D98B - -I=78 -PT=00000000000000000004000000000000 -CT=512438946360CCC4A5C6D73F6EED7130 - -I=79 -PT=00000000000000000002000000000000 -CT=98CFCDEC46EBEA1A286B3004F2746A0D - -I=80 -PT=00000000000000000001000000000000 -CT=A1CF369949677A3AF3D58E3EABF2741B - -I=81 -PT=00000000000000000000800000000000 -CT=D84C2E1A0E4A52166FA8FF6889D1E5E2 - -I=82 -PT=00000000000000000000400000000000 -CT=4AD91CCEEF60119B5078FD162D2735DE - -I=83 -PT=00000000000000000000200000000000 -CT=2860793D818E97AAFF1D339D7702438D - -I=84 -PT=00000000000000000000100000000000 -CT=6F9068BE73364AE250D89D78A6C9CE6F - -I=85 -PT=00000000000000000000080000000000 -CT=024FC3FEF4883FEB1A8DD005305FECCE - -I=86 -PT=00000000000000000000040000000000 -CT=08A61FE0816D75EA15EB3C9FB9CCDED6 - -I=87 -PT=00000000000000000000020000000000 -CT=449C86DFA13F260175CE39797686FFA4 - -I=88 -PT=00000000000000000000010000000000 -CT=4FFFFC29A59858E1133F2BFB1A8A4817 - -I=89 -PT=00000000000000000000008000000000 -CT=19425D1F6480B25096561295697DC2B7 - -I=90 -PT=00000000000000000000004000000000 -CT=31974727ECDD2C77C3A428FC3A8CB3FC - -I=91 -PT=00000000000000000000002000000000 -CT=A57CD704B3C95E744D08DF443458F2F5 - -I=92 -PT=00000000000000000000001000000000 -CT=486D8C193DB1ED73ACB17990442FC40B - -I=93 -PT=00000000000000000000000800000000 -CT=5E4DBF4E83AB3BC055B9FCC7A6B3A763 - -I=94 -PT=00000000000000000000000400000000 -CT=ACF2E0A693FBBCBA4D41B861E0D89E37 - -I=95 -PT=00000000000000000000000200000000 -CT=32A7CB2AE066A51D2B78FC4B4CFCB608 - -I=96 -PT=00000000000000000000000100000000 -CT=677D494DBB73CAF55C1990158DA12F14 - -I=97 -PT=00000000000000000000000080000000 -CT=082A0D2367512ADF0D75A151BFBE0A17 - -I=98 -PT=00000000000000000000000040000000 -CT=5E5BB7337923C482CE8CBA249E6A8C7D - -I=99 -PT=00000000000000000000000020000000 -CT=D3001BA7C7026EE3E5003179530AFCFC - -I=100 -PT=00000000000000000000000010000000 -CT=46EC44F8931E629FE8FD8961312EDDE1 - -I=101 -PT=00000000000000000000000008000000 -CT=C5F8ECD79C7B30E81D17E32079969310 - -I=102 -PT=00000000000000000000000004000000 -CT=5B8AD6919E24CAEBCC55401AEE0C9802 - -I=103 -PT=00000000000000000000000002000000 -CT=C2302B7E701B5CC7F8B29E3516DBBFA6 - -I=104 -PT=00000000000000000000000001000000 -CT=A1D04D6A76F9F7A94D49FAA64A87F244 - -I=105 -PT=00000000000000000000000000800000 -CT=7FB6F92D35B5CB6C631600EDB9E860BA - -I=106 -PT=00000000000000000000000000400000 -CT=B2EF7078BCFACE07AEEC3F9B48830EB3 - -I=107 -PT=00000000000000000000000000200000 -CT=F475A7493D24C7036E53390374C378B3 - -I=108 -PT=00000000000000000000000000100000 -CT=B36802AC987377A37BD8EADC97C57D60 - -I=109 -PT=00000000000000000000000000080000 -CT=ADDCD3D19689C4DDC738CE5F69DC9505 - -I=110 -PT=00000000000000000000000000040000 -CT=0DAF8CA22884915403C0F0BB1F4BD74F - -I=111 -PT=00000000000000000000000000020000 -CT=4AF36BAE2660503B3248E4685059FD05 - -I=112 -PT=00000000000000000000000000010000 -CT=7D5631814DD8E917D97A0D514C743971 - -I=113 -PT=00000000000000000000000000008000 -CT=BC3352500FC0CBB9DB5B5F6B491C1BE8 - -I=114 -PT=00000000000000000000000000004000 -CT=6A4A30BA87E87AF65C90AEB7AFEDC76B - -I=115 -PT=00000000000000000000000000002000 -CT=77E6125897668AC8E73E8C79A6FF8336 - -I=116 -PT=00000000000000000000000000001000 -CT=3FA9D39104EBB323C7AAAA248960DD1E - -I=117 -PT=00000000000000000000000000000800 -CT=FAD75AD76AB10ADC49036B250E229D39 - -I=118 -PT=00000000000000000000000000000400 -CT=2FACAA5FE35B228A16AC74088D702EC4 - -I=119 -PT=00000000000000000000000000000200 -CT=88B6CBCFDFEF8AD91720A1BB69A1F33E - -I=120 -PT=00000000000000000000000000000100 -CT=C7E9D250998632D444356242EF04058D - -I=121 -PT=00000000000000000000000000000080 -CT=B14DAD8D3D9153F46C0D3A1AD63C7A05 - -I=122 -PT=00000000000000000000000000000040 -CT=60ABA678A506608D0845966D29B5F790 - -I=123 -PT=00000000000000000000000000000020 -CT=482DC43F2388EF25D24144E144BD834E - -I=124 -PT=00000000000000000000000000000010 -CT=1490A05A7CEE43BDE98B56E309DC0126 - -I=125 -PT=00000000000000000000000000000008 -CT=ABFA77CD6E85DA245FB0BDC5E52CFC29 - -I=126 -PT=00000000000000000000000000000004 -CT=DD4AB1284D4AE17B41E85924470C36F7 - -I=127 -PT=00000000000000000000000000000002 -CT=CEA7403D4D606B6E074EC5D3BAF39D18 - -I=128 -PT=00000000000000000000000000000001 -CT=530F8AFBC74536B9A963B4F1C4CB738B - -========== \ No newline at end of file diff --git a/src/lib/crypto/aes/test/katmct.pdf b/src/lib/crypto/aes/test/katmct.pdf deleted file mode 100644 index b494fb537..000000000 Binary files a/src/lib/crypto/aes/test/katmct.pdf and /dev/null differ diff --git a/src/lib/crypto/aes/uitypes.h b/src/lib/crypto/aes/uitypes.h deleted file mode 100644 index 3a7292183..000000000 --- a/src/lib/crypto/aes/uitypes.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - ------------------------------------------------------------------------- - Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. - All rights reserved. - - LICENSE TERMS - - The free distribution and use of this software in both source and binary - form is allowed (with or without changes) provided that: - - 1. distributions of this source code include the above copyright - notice, this list of conditions and the following disclaimer; - - 2. distributions in binary form include the above copyright - notice, this list of conditions and the following disclaimer - in the documentation and/or other associated materials; - - 3. the copyright holder's name is not used to endorse products - built using this software without specific written permission. - - DISCLAIMER - - This software is provided 'as is' with no explcit or implied warranties - in respect of any properties, including, but not limited to, correctness - and fitness for purpose. - ------------------------------------------------------------------------- - Issue Date: 01/02/2002 - - This file contains code to obtain or set the definitions for fixed length - unsigned integer types. -*/ - -#ifndef _UITYPES_H -#define _UITYPES_H - -#include "autoconf.h" - -#if defined(__GNU_LIBRARY__) -#define HAS_INTTYPES_H -#elif !defined(_MSC_VER) -#include -#if ULONG_MAX > 0xFFFFFFFFUL - #define MODEL_64 -#else - #define MODEL_32 -#endif -#endif - -#if defined HAS_INTTYPES_H || defined HAVE_INTTYPES_H -#include -#define s_u32 u -#define s_u64 ull -#elif defined MODEL_32 -typedef unsigned char uint8_t; -typedef unsigned short int uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long int uint64_t; -#define s_u32 u -#define s_u64 ull -#elif defined MODEL_64 -typedef unsigned char uint8_t; -typedef unsigned short int uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long int uint64_t; -#define s_u32 u -#define s_u64 ul -#elif defined(_MSC_VER) -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -#define s_u32 ui32 -#define s_u64 ui64 -#else -#error You need to define fixed length types in uitypes.h -#endif - -#define sfx_lo(x,y) x##y -#define sfx_hi(x,y) sfx_lo(x,y) -#define x_32(p) sfx_hi(0x##p,s_u32) -#define x_64(p) sfx_hi(0x##p,s_u64) - -#endif diff --git a/src/lib/crypto/aes/vb.txt b/src/lib/crypto/aes/vb.txt deleted file mode 100644 index dab133c2c..000000000 --- a/src/lib/crypto/aes/vb.txt +++ /dev/null @@ -1,87 +0,0 @@ - -Private Const BlkLenMax = 32 ' maximum block length in bytes -Private Const KeyLenMax = 32 ' maximum block length in bytes -Private Const KeySchLenMax = 128 ' maximum key schedule length in bytes -Private BlkLen As Integer ' actual block length -Private KeyLen As Integer ' actual key length - -Private Type AESctx ' Type to hold the AES context data - Ekey(0 To KeySchLenMax - 1) As Long - Nrnd As Long - Ncol As Long -End Type - -Private Type KeyBlk ' Type to hold user key data - K(0 To KeyLenMax - 1) As Byte -End Type - -Private Type IoBlk ' Type to hold cipher input and output blocks - IO(0 To BlkLenMax - 1) As Byte -End Type - -Rem Change "d:\dll_pth" in the following lines to the directory path where the AES DLL is located -Private Declare Function AesBlkLen Lib "d:\dll_path\aes.dll" Alias "_aes_blk_len@8" (ByVal N As Long, C As AESctx) As Integer -Private Declare Function AesEncKey Lib "d:\dll_path\aes.dll" Alias "_aes_enc_key@12" (K As KeyBlk, ByVal N As Long, C As AESctx) As Integer -Private Declare Function AesDecKey Lib "d:\dll_path\aes.dll" Alias "_aes_dec_key@12" (K As KeyBlk, ByVal N As Long, C As AESctx) As Integer -Private Declare Function AesEncBlk Lib "d:\dll_path\aes.dll" Alias "_aes_enc_blk@12" (Ib As IoBlk, Ob As IoBlk, C As AESctx) As Integer -Private Declare Function AesDecBlk Lib "d:\dll_path\aes.dll" Alias "_aes_dec_blk@12" (Ib As IoBlk, Ob As IoBlk, C As AESctx) As Integer - -Private Sub Hex(X As Byte) ' Output a byte in hexadecimal format -Dim H As Byte -H = Int(X / 16) -If H < 10 Then - Debug.Print Chr(48 + H); -Else - Debug.Print Chr(87 + H); -End If -H = Int(X Mod 16) -If H < 10 Then - Debug.Print Chr(48 + H); -Else - Debug.Print Chr(87 + H); -End If -End Sub - -Private Sub OutKey(S As String, B As KeyBlk) ' Display a key value -Debug.Print: Debug.Print S; -For i = 0 To KeyLen - 1 - Hex B.K(i) -Next i -End Sub - -Private Sub OutBlock(S As String, B As IoBlk) ' Display an input/output block -Debug.Print: Debug.Print S; -For i = 0 To BlkLen - 1 - Hex B.IO(i) -Next i -End Sub - -Rem The following Main routine should output the following in the immediate window: -Rem Key = 00000000000000000000000000000000 -Rem Input = 00000000000000000000000000000000 -Rem Encrypted Text = 66e94bd4ef8a2c3b884cfa59ca342b2e -Rem Decrypted Text = 00000000000000000000000000000000 - -Sub Main() -Dim Key As KeyBlk ' These variables are automatically -Dim Ib As IoBlk, Ob As IoBlk, Rb As IoBlk -Dim Cx As AESctx ' initialised to zero values in VBA -Dim RetVal As Integer - -BlkLen = 16: KeyLen = 16 - -Rem RetVal = AesBlkLen(BlkLen, Cx) ' include if the cipher block size is variable - -OutKey "Key = ", Key -OutBlock "Input = ", Ib - -RetVal = AesEncKey(Key, KeyLen, Cx) ' set an all zero encryption key -RetVal = AesEncBlk(Ib, Ob, Cx) ' encrypt Ib to Ob -OutBlock "Encrypted Text = ", Ob - -RetVal = AesDecKey(Key, KeyLen, Cx) ' set an all zero decryption key -RetVal = AesDecBlk(Ob, Rb, Cx) ' decrypt Ob to Rb -OutBlock "Decrypted Text = ", Rb -Debug.Print - -End Sub diff --git a/src/lib/crypto/arcfour/Makefile.in b/src/lib/crypto/arcfour/Makefile.in deleted file mode 100644 index d56deb85f..000000000 --- a/src/lib/crypto/arcfour/Makefile.in +++ /dev/null @@ -1,43 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/arcfour -mydir=lib/crypto/arcfour -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../md4 -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=arcfour -##DOS##OBJFILE=..\$(OUTPRE)arcfour.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS=\ - arcfour.o \ - arcfour_aead.o \ - arcfour_s2k.o - -OBJS=\ - $(OUTPRE)arcfour.$(OBJEXT) \ - $(OUTPRE)arcfour_aead.$(OBJEXT) \ - $(OUTPRE)arcfour_s2k.$(OBJEXT) - -SRCS=\ - $(srcdir)/arcfour.c \ - $(srcdir)/arcfour_aead.c\ - $(srcdir)/arcfour_s2k.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/arcfour/arcfour-int.h b/src/lib/crypto/arcfour/arcfour-int.h deleted file mode 100644 index efd7a0282..000000000 --- a/src/lib/crypto/arcfour/arcfour-int.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - -ARCFOUR cipher (based on a cipher posted on the Usenet in Spring-95). -This cipher is widely believed and has been tested to be equivalent -with the RC4 cipher from RSA Data Security, Inc. (RC4 is a trademark -of RSA Data Security) - -*/ -#ifndef ARCFOUR_INT_H -#define ARCFOUR_INT_H - -#include "arcfour.h" - -#define CONFOUNDERLENGTH 8 - -typedef struct -{ - unsigned int x; - unsigned int y; - unsigned char state[256]; -} ArcfourContext; - -typedef struct { - int initialized; - ArcfourContext ctx; -} ArcFourCipherState; - -krb5_keyusage krb5int_arcfour_translate_usage(krb5_keyusage usage); - -extern const char *const krb5int_arcfour_l40; - -#endif /* ARCFOUR_INT_H */ diff --git a/src/lib/crypto/arcfour/arcfour.c b/src/lib/crypto/arcfour/arcfour.c deleted file mode 100644 index 7e527cf89..000000000 --- a/src/lib/crypto/arcfour/arcfour.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - -ARCFOUR cipher (based on a cipher posted on the Usenet in Spring-95). -This cipher is widely believed and has been tested to be equivalent -with the RC4 cipher from RSA Data Security, Inc. (RC4 is a trademark -of RSA Data Security) - -*/ -#include "k5-int.h" -#include "arcfour-int.h" -#include "../hash_provider/hash_provider.h" - -const char *const krb5int_arcfour_l40 = "fortybits"; - -void -krb5_arcfour_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length) -{ - size_t blocksize, hashsize; - - blocksize = enc->block_size; - hashsize = hash->hashsize; - - /* checksum + (confounder + inputlen, in even blocksize) */ - *length = hashsize + krb5_roundup(8 + inputlen, blocksize); -} - - krb5_keyusage - krb5int_arcfour_translate_usage(krb5_keyusage usage) -{ - switch (usage) { - case 1: /* AS-REQ PA-ENC-TIMESTAMP padata timestamp, */ - return 1; - case 2: /* ticket from kdc */ - return 2; - case 3: /* as-rep encrypted part */ - return 8; - case 4: /* tgs-req authz data */ - return 4; - case 5: /* tgs-req authz data in subkey */ - return 5; - case 6: /* tgs-req authenticator cksum */ - return 6; -case 7: /* tgs-req authenticator */ - return 7; - case 8: - return 8; - case 9: /* tgs-rep encrypted with subkey */ - return 9; - case 10: /* ap-rep authentication cksum */ - return 10; /* xxx Microsoft never uses this*/ - case 11: /* app-req authenticator */ - return 11; - case 12: /* app-rep encrypted part */ - return 12; - case 23: /* sign wrap token*/ - return 13; - default: - return usage; -} -} - -krb5_error_code -krb5_arcfour_encrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - krb5_keyblock k1, k2, k3; - krb5_data d1, d2, d3, salt, plaintext, checksum, ciphertext, confounder; - krb5_keyusage ms_usage; - size_t keylength, keybytes, blocksize, hashsize; - krb5_error_code ret; - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - hashsize = hash->hashsize; - - d1.length=keybytes; - d1.data=malloc(d1.length); - if (d1.data == NULL) - return (ENOMEM); - k1 = *key; - k1.length=d1.length; - k1.contents= (void *) d1.data; - - d2.length=keybytes; - d2.data=malloc(d2.length); - if (d2.data == NULL) { - free(d1.data); - return (ENOMEM); - } - k2 = *key; - k2.length=d2.length; - k2.contents=(void *) d2.data; - - d3.length=keybytes; - d3.data=malloc(d3.length); - if (d3.data == NULL) { - free(d1.data); - free(d2.data); - return (ENOMEM); - } - k3 = *key; - k3.length=d3.length; - k3.contents= (void *) d3.data; - - salt.length=14; - salt.data=malloc(salt.length); - if (salt.data == NULL) { - free(d1.data); - free(d2.data); - free(d3.data); - return (ENOMEM); - } - - /* is "input" already blocksize aligned? if it is, then we need this - step, otherwise we do not */ - plaintext.length=krb5_roundup(input->length+CONFOUNDERLENGTH,blocksize); - plaintext.data=malloc(plaintext.length); - if (plaintext.data == NULL) { - free(d1.data); - free(d2.data); - free(d3.data); - free(salt.data); - return(ENOMEM); - } - - /* setup convienient pointers into the allocated data */ - checksum.length=hashsize; - checksum.data=output->data; - ciphertext.length=krb5_roundup(input->length+CONFOUNDERLENGTH,blocksize); - ciphertext.data=output->data+hashsize; - confounder.length=CONFOUNDERLENGTH; - confounder.data=plaintext.data; - output->length = plaintext.length+hashsize; - - /* begin the encryption, computer K1 */ - ms_usage=krb5int_arcfour_translate_usage(usage); - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { - strncpy(salt.data, krb5int_arcfour_l40, salt.length); - store_32_le(ms_usage, salt.data+10); - } else { - salt.length=4; - store_32_le(ms_usage, salt.data); - } - krb5_hmac(hash, key, 1, &salt, &d1); - - memcpy(k2.contents, k1.contents, k2.length); - - if (key->enctype==ENCTYPE_ARCFOUR_HMAC_EXP) - memset(k1.contents+7, 0xab, 9); - - ret=krb5_c_random_make_octets(/* XXX */ 0, &confounder); - memcpy(plaintext.data+confounder.length, input->data, input->length); - if (ret) - goto cleanup; - - krb5_hmac(hash, &k2, 1, &plaintext, &checksum); - - krb5_hmac(hash, &k1, 1, &checksum, &d3); - - ret=(*(enc->encrypt))(&k3, ivec, &plaintext, &ciphertext); - - cleanup: - memset(d1.data, 0, d1.length); - memset(d2.data, 0, d2.length); - memset(d3.data, 0, d3.length); - memset(salt.data, 0, salt.length); - memset(plaintext.data, 0, plaintext.length); - - free(d1.data); - free(d2.data); - free(d3.data); - free(salt.data); - free(plaintext.data); - return (ret); -} - -/* This is the arcfour-hmac decryption routine */ -krb5_error_code -krb5_arcfour_decrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - krb5_keyblock k1,k2,k3; - krb5_data d1,d2,d3,salt,ciphertext,plaintext,checksum; - krb5_keyusage ms_usage; - size_t keybytes, keylength, hashsize, blocksize; - krb5_error_code ret; - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - hashsize = hash->hashsize; - - d1.length=keybytes; - d1.data=malloc(d1.length); - if (d1.data == NULL) - return (ENOMEM); - k1 = *key; - k1.length=d1.length; - k1.contents= (void *) d1.data; - - d2.length=keybytes; - d2.data=malloc(d2.length); - if (d2.data == NULL) { - free(d1.data); - return (ENOMEM); - } - k2 = *key; - k2.length=d2.length; - k2.contents= (void *) d2.data; - - d3.length=keybytes; - d3.data=malloc(d3.length); - if (d3.data == NULL) { - free(d1.data); - free(d2.data); - return (ENOMEM); - } - k3 = *key; - k3.length=d3.length; - k3.contents= (void *) d3.data; - - salt.length=14; - salt.data=malloc(salt.length); - if(salt.data==NULL) { - free(d1.data); - free(d2.data); - free(d3.data); - return (ENOMEM); - } - - ciphertext.length=input->length-hashsize; - ciphertext.data=input->data+hashsize; - plaintext.length=ciphertext.length; - plaintext.data=malloc(plaintext.length); - if (plaintext.data == NULL) { - free(d1.data); - free(d2.data); - free(d3.data); - free(salt.data); - return (ENOMEM); - } - - checksum.length=hashsize; - checksum.data=input->data; - - ms_usage=krb5int_arcfour_translate_usage(usage); - - /* We may have to try two ms_usage values; see below. */ - do { - /* compute the salt */ - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { - strncpy(salt.data, krb5int_arcfour_l40, salt.length); - store_32_le(ms_usage, salt.data + 10); - } else { - salt.length = 4; - store_32_le(ms_usage, salt.data); - } - ret = krb5_hmac(hash, key, 1, &salt, &d1); - if (ret) - goto cleanup; - - memcpy(k2.contents, k1.contents, k2.length); - - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) - memset(k1.contents + 7, 0xab, 9); - - ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); - if (ret) - goto cleanup; - - ret = (*(enc->decrypt))(&k3, ivec, &ciphertext, &plaintext); - if (ret) - goto cleanup; - - ret = krb5_hmac(hash, &k2, 1, &plaintext, &d1); - if (ret) - goto cleanup; - - if (memcmp(checksum.data, d1.data, hashsize) != 0) { - if (ms_usage == 9) { - /* - * RFC 4757 specifies usage 8 for TGS-REP encrypted - * parts encrypted in a subkey, but the value used by MS - * is actually 9. We now use 9 to start with, but fall - * back to 8 on failure in case we are communicating - * with a KDC using the value from the RFC. - */ - ms_usage = 8; - continue; - } - ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto cleanup; - } - - break; - } while (1); - - memcpy(output->data, plaintext.data+CONFOUNDERLENGTH, - (plaintext.length-CONFOUNDERLENGTH)); - output->length=plaintext.length-CONFOUNDERLENGTH; - - cleanup: - memset(d1.data, 0, d1.length); - memset(d2.data, 0, d2.length); - memset(d3.data, 0, d2.length); - memset(salt.data, 0, salt.length); - memset(plaintext.data, 0, plaintext.length); - - free(d1.data); - free(d2.data); - free(d3.data); - free(salt.data); - free(plaintext.data); - return (ret); -} - - krb5_error_code krb5int_arcfour_prf( - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out) - { - assert(out->length == 20); - return krb5_hmac(&krb5int_hash_sha1, key, 1, in, out); - } diff --git a/src/lib/crypto/arcfour/arcfour.h b/src/lib/crypto/arcfour/arcfour.h deleted file mode 100644 index be408febc..000000000 --- a/src/lib/crypto/arcfour/arcfour.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef ARCFOUR_H -#define ARCFOUR_H - -extern void -krb5_arcfour_encrypt_length(const struct krb5_enc_provider *, - const struct krb5_hash_provider *, - size_t, - size_t *); - -extern -krb5_error_code krb5_arcfour_encrypt(const struct krb5_enc_provider *, - const struct krb5_hash_provider *, - const krb5_keyblock *, - krb5_keyusage, - const krb5_data *, - const krb5_data *, - krb5_data *); - -extern -krb5_error_code krb5_arcfour_decrypt(const struct krb5_enc_provider *, - const struct krb5_hash_provider *, - const krb5_keyblock *, - krb5_keyusage, - const krb5_data *, - const krb5_data *, - krb5_data *); - -extern krb5_error_code krb5int_arcfour_string_to_key( - const struct krb5_enc_provider *, - const krb5_data *, - const krb5_data *, - const krb5_data *, - krb5_keyblock *); - -extern const struct krb5_enc_provider krb5int_enc_arcfour; -extern const struct krb5_aead_provider krb5int_aead_arcfour; - krb5_error_code krb5int_arcfour_prf( - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out); - -#endif /* ARCFOUR_H */ diff --git a/src/lib/crypto/arcfour/arcfour_aead.c b/src/lib/crypto/arcfour/arcfour_aead.c deleted file mode 100644 index cff7d66d6..000000000 --- a/src/lib/crypto/arcfour/arcfour_aead.c +++ /dev/null @@ -1,325 +0,0 @@ -/* - * lib/crypto/arcfour/arcfour_aead.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - - -#include "k5-int.h" -#include "arcfour.h" -#include "arcfour-int.h" -#include "aead.h" - -/* AEAD */ - -static krb5_error_code -krb5int_arcfour_crypto_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - krb5_cryptotype type, - unsigned int *length) -{ - switch (type) { - case KRB5_CRYPTO_TYPE_HEADER: - *length = hash->hashsize + CONFOUNDERLENGTH; - break; - case KRB5_CRYPTO_TYPE_PADDING: - *length = 0; - break; - case KRB5_CRYPTO_TYPE_TRAILER: - *length = 0; - break; - case KRB5_CRYPTO_TYPE_CHECKSUM: - *length = hash->hashsize; - break; - default: - assert(0 && "invalid cryptotype passed to krb5int_arcfour_crypto_length"); - break; - } - - return 0; -} - -static krb5_error_code -alloc_derived_key(const struct krb5_enc_provider *enc, - krb5_keyblock *dst, - krb5_data *data, - const krb5_keyblock *src) -{ - data->length = enc->keybytes; - data->data = malloc(data->length); - if (data->data == NULL) - return ENOMEM; - - *dst = *src; - dst->length = data->length; - dst->contents = (void *)data->data; - - return 0; -} - -static krb5_error_code -krb5int_arcfour_encrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - krb5_crypto_iov *header, *trailer; - krb5_keyblock k1, k2, k3; - krb5_data d1, d2, d3; - krb5_data checksum, confounder, header_data; - krb5_keyusage ms_usage; - char salt_data[14]; - krb5_data salt; - size_t i; - - d1.length = d2.length = d3.length = 0; - d1.data = d2.data = d3.data = NULL; - - /* - * Caller must have provided space for the header, padding - * and trailer; per RFC 4757 we will arrange it as: - * - * Checksum | E(Confounder | Plaintext) - */ - - header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); - if (header == NULL || - header->data.length < hash->hashsize + CONFOUNDERLENGTH) - return KRB5_BAD_MSIZE; - - header_data = header->data; - - /* Trailer may be absent */ - trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); - if (trailer != NULL) - trailer->data.length = 0; - - /* Ensure that there is no padding */ - for (i = 0; i < num_data; i++) { - if (data[i].flags == KRB5_CRYPTO_TYPE_PADDING) - data[i].data.length = 0; - } - - ret = alloc_derived_key(enc, &k1, &d1, key); - if (ret != 0) - goto cleanup; - - ret = alloc_derived_key(enc, &k2, &d2, key); - if (ret != 0) - goto cleanup; - - ret = alloc_derived_key(enc, &k3, &d3, key); - if (ret != 0) - goto cleanup; - - /* Begin the encryption, compute K1 */ - salt.data = salt_data; - salt.length = sizeof(salt_data); - - ms_usage = krb5int_arcfour_translate_usage(usage); - - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { - strncpy(salt.data, krb5int_arcfour_l40, salt.length); - store_32_le(ms_usage, salt.data + 10); - } else { - salt.length = 4; - store_32_le(ms_usage, salt.data); - } - ret = krb5_hmac(hash, key, 1, &salt, &d1); - if (ret != 0) - goto cleanup; - - memcpy(k2.contents, k1.contents, k2.length); - - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) - memset(k1.contents + 7, 0xAB, 9); - - header->data.length = hash->hashsize + CONFOUNDERLENGTH; - - confounder.data = header->data.data + hash->hashsize; - confounder.length = CONFOUNDERLENGTH; - - ret = krb5_c_random_make_octets(0, &confounder); - if (ret != 0) - goto cleanup; - - checksum.data = header->data.data; - checksum.length = hash->hashsize; - - /* Adjust pointers so confounder is at start of header */ - header->data.length -= hash->hashsize; - header->data.data += hash->hashsize; - - ret = krb5int_hmac_iov(hash, &k2, data, num_data, &checksum); - if (ret != 0) - goto cleanup; - - ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); - if (ret != 0) - goto cleanup; - - ret = enc->encrypt_iov(&k3, ivec, data, num_data); - if (ret != 0) - goto cleanup; - -cleanup: - header->data = header_data; /* restore header pointers */ - - if (d1.data != NULL) { - memset(d1.data, 0, d1.length); - free(d1.data); - } - if (d2.data != NULL) { - memset(d2.data, 0, d2.length); - free(d2.data); - } - if (d3.data != NULL) { - memset(d3.data, 0, d3.length); - free(d3.data); - } - - return ret; -} - -static krb5_error_code -krb5int_arcfour_decrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - krb5_crypto_iov *header, *trailer; - krb5_keyblock k1, k2, k3; - krb5_data d1, d2, d3; - krb5_data checksum, header_data; - krb5_keyusage ms_usage; - char salt_data[14]; - krb5_data salt; - - d1.length = d2.length = d3.length = 0; - d1.data = d2.data = d3.data = NULL; - - header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); - if (header == NULL || - header->data.length != hash->hashsize + CONFOUNDERLENGTH) - return KRB5_BAD_MSIZE; - - header_data = header->data; - - trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); - if (trailer != NULL && trailer->data.length != 0) - return KRB5_BAD_MSIZE; - - ret = alloc_derived_key(enc, &k1, &d1, key); - if (ret != 0) - goto cleanup; - - ret = alloc_derived_key(enc, &k2, &d2, key); - if (ret != 0) - goto cleanup; - - ret = alloc_derived_key(enc, &k3, &d3, key); - if (ret != 0) - goto cleanup; - - /* Begin the decryption, compute K1 */ - salt.data = salt_data; - salt.length = sizeof(salt_data); - - ms_usage = krb5int_arcfour_translate_usage(usage); - - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { - strncpy(salt.data, krb5int_arcfour_l40, salt.length); - store_32_le(ms_usage, (unsigned char *)salt.data + 10); - } else { - salt.length = 4; - store_32_le(ms_usage, (unsigned char *)salt.data); - } - ret = krb5_hmac(hash, key, 1, &salt, &d1); - if (ret != 0) - goto cleanup; - - memcpy(k2.contents, k1.contents, k2.length); - - if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) - memset(k1.contents + 7, 0xAB, 9); - - checksum.data = header->data.data; - checksum.length = hash->hashsize; - - /* Adjust pointers so confounder is at start of header */ - header->data.length -= hash->hashsize; - header->data.data += hash->hashsize; - - ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); - if (ret != 0) - goto cleanup; - - ret = enc->decrypt_iov(&k3, ivec, data, num_data); - if (ret != 0) - goto cleanup; - - ret = krb5int_hmac_iov(hash, &k2, data, num_data, &d1); - if (ret != 0) - goto cleanup; - - if (memcmp(checksum.data, d1.data, hash->hashsize) != 0) { - ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto cleanup; - } - -cleanup: - header->data = header_data; /* restore header pointers */ - - if (d1.data != NULL) { - memset(d1.data, 0, d1.length); - free(d1.data); - } - if (d2.data != NULL) { - memset(d2.data, 0, d2.length); - free(d2.data); - } - if (d3.data != NULL) { - memset(d3.data, 0, d3.length); - free(d3.data); - } - - return ret; -} - -const struct krb5_aead_provider krb5int_aead_arcfour = { - krb5int_arcfour_crypto_length, - krb5int_arcfour_encrypt_iov, - krb5int_arcfour_decrypt_iov -}; - diff --git a/src/lib/crypto/arcfour/arcfour_s2k.c b/src/lib/crypto/arcfour/arcfour_s2k.c deleted file mode 100644 index 41053ed17..000000000 --- a/src/lib/crypto/arcfour/arcfour_s2k.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "k5-int.h" -#include "k5-utf8.h" -#include "rsa-md4.h" -#include "arcfour-int.h" - -#if TARGET_OS_MAC && !defined(DEPEND) -#include -#endif - -krb5_error_code -krb5int_arcfour_string_to_key(const struct krb5_enc_provider *enc, - const krb5_data *string, const krb5_data *salt, - const krb5_data *params, krb5_keyblock *key) -{ - krb5_error_code err = 0; - krb5_MD4_CTX md4_context; - unsigned char *copystr; - size_t copystrlen; - - if (params != NULL) - return KRB5_ERR_BAD_S2K_PARAMS; - - if (key->length != 16) - return (KRB5_BAD_MSIZE); - - /* We ignore salt per the Microsoft spec*/ - - /* compute the space needed for the new string. - Since the password must be stored in unicode, we need to increase - that number by 2x. - */ - - err = krb5int_utf8cs_to_ucs2les(string->data, string->length, ©str, ©strlen); - if (err) - return err; - - /* the actual MD4 hash of the data */ - krb5_MD4Init(&md4_context); - krb5_MD4Update(&md4_context, copystr, copystrlen); - krb5_MD4Final(&md4_context); - memcpy(key->contents, md4_context.digest, 16); - -#if 0 - /* test the string_to_key function */ - printf("Hash="); - { - int counter; - for(counter=0;counter<16;counter++) - printf("%02x", md4_context.digest[counter]); - printf("\n"); - } -#endif /* 0 */ - - /* Zero out the data behind us */ - memset(copystr, 0, copystrlen); - memset(&md4_context, 0, sizeof(md4_context)); - free(copystr); - return err; -} diff --git a/src/lib/crypto/arcfour/deps b/src/lib/crypto/arcfour/deps deleted file mode 100644 index ee6faef82..000000000 --- a/src/lib/crypto/arcfour/deps +++ /dev/null @@ -1,37 +0,0 @@ -# -# Generated makefile dependencies follow. -# -arcfour.so arcfour.po $(OUTPRE)arcfour.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../hash_provider/hash_provider.h arcfour-int.h \ - arcfour.c arcfour.h -arcfour_aead.so arcfour_aead.po $(OUTPRE)arcfour_aead.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/../aead.h \ - $(srcdir)/../cksumtypes.h arcfour-int.h arcfour.h arcfour_aead.c -arcfour_s2k.so arcfour_s2k.po $(OUTPRE)arcfour_s2k.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/k5-utf8.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../md4/rsa-md4.h arcfour-int.h arcfour.h \ - arcfour_s2k.c diff --git a/src/lib/crypto/block_size.c b/src/lib/crypto/block_size.c deleted file mode 100644 index e4c11e869..000000000 --- a/src/lib/crypto/block_size.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_block_size(krb5_context context, krb5_enctype enctype, - size_t *blocksize) -{ - int i; - - for (i=0; iblock_size; - - return(0); -} diff --git a/src/lib/crypto/builtin/Makefile.in b/src/lib/crypto/builtin/Makefile.in new file mode 100644 index 000000000..03ca5e966 --- /dev/null +++ b/src/lib/crypto/builtin/Makefile.in @@ -0,0 +1,123 @@ +thisconfigdir=../../.. +myfulldir=lib/crypto/builtin +mydir=lib/crypto/builtin +BUILDTOP=$(REL)..$(S)..$(S).. +SUBDIRS=../@CRYPTO_IMPL@/des ../@CRYPTO_IMPL@/arcfour ../@CRYPTO_IMPL@/aes \ + ../@CRYPTO_IMPL@/md4 ../@CRYPTO_IMPL@/md5 ../@CRYPTO_IMPL@/sha1 +LOCALINCLUDES = -I$(srcdir)/../krb -I$(srcdir)/../krb/hash_provider \ + -I$(srcdir)/../@CRYPTO_IMPL@/des \ + -I$(srcdir)/../@CRYPTO_IMPL@/aes \ + -I$(srcdir)/../@CRYPTO_IMPL@/arcfour \ + -I$(srcdir)/../@CRYPTO_IMPL@/sha1 \ + -I$(srcdir)/../@CRYPTO_IMPL@/md4 \ + -I$(srcdir)/../@CRYPTO_IMPL@/md5 +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) +DEFS= + + +##DOSBUILDTOP = ..\..\.. +##DOSLIBNAME=$(OUTPRE)crypto.lib +##DOSOBJFILE=$(OUTPRE)crypto.lst +##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst +##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst + +STLIBOBJS=\ + hmac.o \ + pbkdf2.o + +OBJS=\ + $(OUTPRE)../@CRYPTO_IMPL@/hmac.$(OBJEXT) \ + $(OUTPRE)../@CRYPTO_IMPL@/pbkdf2.$(OBJEXT) + +SRCS=\ + $(srcdir)/../@CRYPTO_IMPL@/hmac.c \ + $(srcdir)/../@CRYPTO_IMPL@/pbkdf2.c + +STOBJLISTS= ../@CRYPTO_IMPL@/des/OBJS.ST ../@CRYPTO_IMPL@/md4/OBJS.ST \ + ../@CRYPTO_IMPL@/md5/OBJS.ST ../@CRYPTO_IMPL@/sha1/OBJS.ST \ + ../@CRYPTO_IMPL@/arcfour/OBJS.ST \ + ../@CRYPTO_IMPL@/aes/OBJS.ST \ + ../@CRYPTO_IMPL@/OBJS.ST + +SUBDIROBJLISTS= ../@CRYPTO_IMPL@/des/OBJS.ST ../@CRYPTO_IMPL@/md4/OBJS.ST \ + ../@CRYPTO_IMPL@/md5/OBJS.ST ../@CRYPTO_IMPL@/sha1/OBJS.ST \ + ../@CRYPTO_IMPL@/arcfour/OBJS.ST \ + ../@CRYPTO_IMPL@/aes/OBJS.ST ../@CRYPTO_IMPL@/OBJS.ST + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +all-windows:: + cd ..\des + @echo Making in crypto\des + $(MAKE) -$(MFLAGS) + cd ..\md4 + @echo Making in crypto\md4 + $(MAKE) -$(MFLAGS) + cd ..\md5 + @echo Making in crypto\md5 + $(MAKE) -$(MFLAGS) + cd ..\sha1 + @echo Making in crypto\sha1 + $(MAKE) -$(MFLAGS) + cd ..\arcfour + @echo Making in crypto\arcfour + $(MAKE) -$(MFLAGS) + cd ..\aes + @echo Making in crypto\aes + $(MAKE) -$(MFLAGS) + cd .. + +clean-windows:: + cd ..\des + @echo Making clean in crypto\des + $(MAKE) -$(MFLAGS) clean + cd ..\md4 + @echo Making clean in crypto\md4 + $(MAKE) -$(MFLAGS) clean + cd ..\md5 + @echo Making clean in crypto\md5 + $(MAKE) -$(MFLAGS) clean + cd ..\sha1 + @echo Making clean in crypto\sha1 + $(MAKE) -$(MFLAGS) clean + cd ..\arcfour + @echo Making clean in crypto\arcfour + $(MAKE) -$(MFLAGS) clean + cd ..\aes + @echo Making clean in crypto\aes + $(MAKE) -$(MFLAGS) clean + cd .. + +check-windows:: + cd ..\des + @echo Making check in crypto\des + $(MAKE) -$(MFLAGS) check + cd ..\md4 + @echo Making check in crypto\md4 + $(MAKE) -$(MFLAGS) check + cd ..\md5 + @echo Making check in crypto\md5 + $(MAKE) -$(MFLAGS) check + cd ..\sha1 + @echo Making check in crypto\sha1 + $(MAKE) -$(MFLAGS) check + cd ..\arcfour + @echo Making check in crypto\arcfour + $(MAKE) -$(MFLAGS) check + cd ..\aes + @echo Making check in crypto\aes + $(MAKE) -$(MFLAGS) check + cd .. + + +@lib_frag@ +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/aes/Makefile.in b/src/lib/crypto/builtin/aes/Makefile.in new file mode 100644 index 000000000..ed36f7e61 --- /dev/null +++ b/src/lib/crypto/builtin/aes/Makefile.in @@ -0,0 +1,61 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/aes +mydir=lib/crypto/builtin/aes +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../krb/dk +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=aes +##DOS##OBJFILE=..\$(OUTPRE)aes.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + aescrypt.o \ + aestab.o \ + aeskey.o \ + aes_s2k.o + +OBJS=\ + $(OUTPRE)aescrypt.$(OBJEXT) \ + $(OUTPRE)aestab.$(OBJEXT) \ + $(OUTPRE)aeskey.$(OBJEXT) \ + $(OUTPRE)aes_s2k.$(OBJEXT) + +SRCS=\ + $(srcdir)/aescrypt.c \ + $(srcdir)/aestab.c \ + $(srcdir)/aeskey.c \ + $(srcdir)/aes_s2k.c + +GEN_OBJS=\ + $(OUTPRE)aescrypt.$(OBJEXT) \ + $(OUTPRE)aestab.$(OBJEXT) \ + $(OUTPRE)aeskey.$(OBJEXT) + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs # aes-gen + +includes:: depend + +depend:: $(SRCS) + +aes-gen: aes-gen.o $(GEN_OBJS) + $(CC_LINK) -o aes-gen aes-gen.o $(GEN_OBJS) + +run-aes-gen: aes-gen + ./aes-gen > kresults.out + +check:: run-aes-gen + + +clean-unix:: clean-libobjs + +clean:: + -$(RM) aes-gen aes-gen.o kresults.out + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/aes/aes-gen.c b/src/lib/crypto/builtin/aes/aes-gen.c new file mode 100644 index 000000000..855e6a470 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aes-gen.c @@ -0,0 +1,326 @@ +/* + * To be compiled against the AES code from: + * http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm + */ +#include +#include +#include +#include +#include "aes.h" + +#define B 16U +unsigned char key[16]; +unsigned char test_case_len[] = { B+1, 2*B-1, 2*B, 2*B+1, 3*B-1, 3*B, 4*B, }; +#define NTESTS (sizeof(test_case_len)) +struct { + unsigned char ivec[16]; + unsigned char input[4*16]; + unsigned char output[4*16]; +} test_case[NTESTS]; +aes_ctx ctx, dctx; + +static void init () +{ + int i, j, r; + + srand(42); + for (i = 0; i < 16; i++) + key[i] = 0xff & rand(); + memset(test_case, 0, sizeof(test_case)); + for (i = 0; i < NTESTS; i++) + for (j = 0; j < test_case_len[i]; j++) { + test_case[i].input[j] = 0xff & rand(); + } + + r = aes_enc_key (key, sizeof(key), &ctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + r = aes_dec_key (key, sizeof(key), &dctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); +} + +static void hexdump(const unsigned char *ptr, size_t len) +{ + int i; + for (i = 0; i < len; i++) + printf ("%s%02X", (i % 16 == 0) ? "\n " : " ", ptr[i]); +} + +static void fips_test () +{ + static const unsigned char fipskey[16] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + }; + static const unsigned char input[16] = { + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, + }; + static const unsigned char expected[16] = { + 0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, + 0xd8, 0xcd, 0xb7, 0x80, 0x70, 0xb4, 0xc5, 0x5a, + }; + unsigned char output[16]; + unsigned char tmp[16]; + aes_ctx fipsctx; + int r; + + printf ("FIPS test:\nkey:"); + hexdump (fipskey, 16); + printf ("\ninput:"); + hexdump (input, 16); + r = aes_enc_key (fipskey, sizeof(fipskey), &fipsctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + r = aes_enc_blk (input, output, &fipsctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + printf ("\noutput:"); + hexdump (output, 16); + printf ("\n"); + if (memcmp(expected, output, 16)) + fprintf(stderr, "wrong results!!!\n"), exit (1); + r = aes_dec_key (fipskey, sizeof(fipskey), &fipsctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + r = aes_dec_blk (output, tmp, &fipsctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + if (memcmp(input, tmp, 16)) + fprintf(stderr, "decryption failed!!\n"), exit(1); + printf ("ok.\n\n"); +} + +static void +xor (unsigned char *out, const unsigned char *a, const unsigned char *b) +{ + int i; + for (i = 0; i < B; i++) + out[i] = a[i] ^ b[i]; +} + +static void +ecb_enc (unsigned char *out, unsigned char *in, unsigned int len) +{ + int i, r; + for (i = 0; i < len; i += 16) { + r = aes_enc_blk (in + i, out + i, &ctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + } + if (i != len) abort (); +} + +static void +ecb_dec (unsigned char *out, unsigned char *in, unsigned int len) +{ + int i, r; + for (i = 0; i < len; i += 16) { + r = aes_dec_blk (in + i, out + i, &dctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + } + if (i != len) abort (); +} + +#define D(X) (printf("%s %d: %s=",__FUNCTION__,__LINE__, #X),hexdump(X,B),printf("\n")) + +#undef D +#define D(X) + +static void +cbc_enc (unsigned char *out, unsigned char *in, unsigned char *iv, + unsigned int len) +{ + int i, r; + unsigned char tmp[B]; + D(iv); + memcpy (tmp, iv, B); + for (i = 0; i < len; i += B) { + D(in+i); + xor (tmp, tmp, in + i); + D(tmp); + r = aes_enc_blk (tmp, out + i, &ctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + memcpy (tmp, out + i, B); + D(out+i); + } + if (i != len) abort (); +} + +static void +cbc_dec (unsigned char *out, unsigned char *in, unsigned char *iv, + unsigned int len) +{ + int i, r; + unsigned char tmp[B]; + memcpy (tmp, iv, B); + for (i = 0; i < len; i += B) { + r = aes_dec_blk (in + i, tmp, &dctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + xor (tmp, tmp, iv); + iv = in + i; + memcpy (out + i, tmp, B); + } + if (i != len) abort (); +} + +static void +cts_enc (unsigned char *out, unsigned char *in, unsigned char *iv, + unsigned int len) +{ + int r; + unsigned int len2; + unsigned char pn1[B], pn[B], cn[B], cn1[B]; + + if (len < B + 1) abort (); + len2 = (len - B - 1) & ~(B-1); + cbc_enc (out, in, iv, len2); + out += len2; + in += len2; + len -= len2; + if (len2) + iv = out - B; + if (len <= B || len > 2 * B) + abort (); + printf ("(did CBC mode for %d)\n", len2); + + D(in); + xor (pn1, in, iv); + D(pn1); + r = aes_enc_blk (pn1, cn, &ctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + D(cn); + memset (pn, 0, sizeof(pn)); + memcpy (pn, in+B, len-B); + D(pn); + xor (pn, pn, cn); + D(pn); + r = aes_enc_blk (pn, cn1, &ctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + D(cn1); + memcpy(out, cn1, B); + memcpy(out+B, cn, len-B); +} + +static void +cts_dec (unsigned char *out, unsigned char *in, unsigned char *iv, + unsigned int len) +{ + int r; + unsigned int len2; + unsigned char pn1[B], pn[B], cn[B], cn1[B]; + + if (len < B + 1) abort (); + len2 = (len - B - 1) & ~(B-1); + cbc_dec (out, in, iv, len2); + out += len2; + in += len2; + len -= len2; + if (len2) + iv = in - B; + if (len <= B || len > 2 * B) + abort (); + + memcpy (cn1, in, B); + r = aes_dec_blk (cn1, pn, &dctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + memset (cn, 0, sizeof(cn)); + memcpy (cn, in+B, len-B); + xor (pn, pn, cn); + memcpy (cn+len-B, pn+len-B, 2*B-len); + r = aes_dec_blk (cn, pn1, &dctx); + if (!r) fprintf(stderr, "error, line %d\n", __LINE__), exit(1); + xor (pn1, pn1, iv); + memcpy(out, pn1, B); + memcpy(out+B, pn, len-B); +} + +static void ecb_test () +{ + int testno; + unsigned char tmp[4*B]; + + printf ("ECB tests:\n"); + printf ("key:"); + hexdump (key, sizeof(key)); + for (testno = 0; testno < NTESTS; testno++) { + unsigned len = (test_case_len[testno] + 15) & ~15; + printf ("\ntest %d - %d bytes\n", testno, len); + printf ("input:"); + hexdump (test_case[testno].input, len); + printf ("\n"); + ecb_enc (test_case[testno].output, test_case[testno].input, len); + printf ("output:"); + hexdump (test_case[testno].output, len); + printf ("\n"); + ecb_dec (tmp, test_case[testno].output, len); + if (memcmp (tmp, test_case[testno].input, len)) { + printf ("ecb decrypt failed!!"); + hexdump (tmp, len); + printf ("\n"); + exit (1); + } + } + printf ("\n"); +} + +unsigned char ivec[16] = { 0 }; + +static void cbc_test () +{ + int testno; + unsigned char tmp[4*B]; + + printf ("CBC tests:\n"); + printf ("initial vector:"); + hexdump (ivec, sizeof(ivec)); + for (testno = 0; testno < NTESTS; testno++) { + unsigned len = (test_case_len[testno] + 15) & ~15; + printf ("\ntest %d - %d bytes\n", testno, len); + printf ("input:"); + hexdump (test_case[testno].input, len); + printf ("\n"); + cbc_enc (test_case[testno].output, test_case[testno].input, ivec, len); + printf ("output:"); + hexdump (test_case[testno].output, len); + printf ("\n"); + cbc_dec (tmp, test_case[testno].output, ivec, len); + if (memcmp (tmp, test_case[testno].input, len)) { + printf("cbc decrypt failed!!"); + hexdump (tmp, len); + printf ("\n"); + exit(1); + } + } + printf ("\n"); +} + +static void cts_test () +{ + int testno; + unsigned char tmp[4*B]; + + printf ("CTS tests:\n"); + printf ("initial vector:"); + hexdump (ivec, sizeof(ivec)); + for (testno = 0; testno < NTESTS; testno++) { + unsigned int len = test_case_len[testno]; + printf ("\ntest %d - %d bytes\n", testno, len); + printf ("input:"); + hexdump (test_case[testno].input, len); + printf ("\n"); + cts_enc (test_case[testno].output, test_case[testno].input, ivec, len); + printf ("output:"); + hexdump (test_case[testno].output, len); + printf ("\n"); + cts_dec (tmp, test_case[testno].output, ivec, len); + if (memcmp (tmp, test_case[testno].input, len)) + fprintf (stderr, "cts decrypt failed!!\n"), exit(1); + } + printf ("\n"); +} + +int main () +{ + init (); + fips_test (); + + ecb_test(); + cbc_test(); + cts_test(); + + return 0; +} diff --git a/src/lib/crypto/builtin/aes/aes.h b/src/lib/crypto/builtin/aes/aes.h new file mode 100644 index 000000000..ac1c1b89e --- /dev/null +++ b/src/lib/crypto/builtin/aes/aes.h @@ -0,0 +1,97 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the definitions required to use AES (Rijndael) in C. +*/ + +#ifndef _AES_H +#define _AES_H + +#include "uitypes.h" + +/* BLOCK_SIZE is in BYTES: 16, 24, 32 or undefined for aes.c and 16, 20, + 24, 28, 32 or undefined for aespp.c. When left undefined a slower + version that provides variable block length is compiled. +*/ + +#define BLOCK_SIZE 16 + +/* key schedule length (in 32-bit words) */ + +#if !defined(BLOCK_SIZE) +#define KS_LENGTH 128 +#else +#define KS_LENGTH 4 * BLOCK_SIZE +#endif + +#if defined(__cplusplus) +extern "C" +{ +#endif + +typedef uint16_t aes_fret; /* type for function return value */ +#define aes_bad 0 /* bad function return value */ +#define aes_good 1 /* good function return value */ +#ifndef AES_DLL /* implement normal or DLL functions */ +#define aes_rval aes_fret +#else +#define aes_rval aes_fret __declspec(dllexport) _stdcall +#endif + +typedef struct /* the AES context for encryption */ +{ uint32_t k_sch[KS_LENGTH]; /* the encryption key schedule */ + uint32_t n_rnd; /* the number of cipher rounds */ + uint32_t n_blk; /* the number of bytes in the state */ +} aes_ctx; + +/* for Kerberos 5 tree -- hide names! */ +#define aes_blk_len krb5int_aes_blk_len +#define aes_enc_key krb5int_aes_enc_key +#define aes_enc_blk krb5int_aes_enc_blk +#define aes_dec_key krb5int_aes_dec_key +#define aes_dec_blk krb5int_aes_dec_blk +#define fl_tab krb5int_fl_tab +#define ft_tab krb5int_ft_tab +#define il_tab krb5int_il_tab +#define im_tab krb5int_im_tab +#define it_tab krb5int_it_tab +#define rcon_tab krb5int_rcon_tab + +aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); + +aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); +aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); + +aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); +aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/src/lib/crypto/builtin/aes/aes.txt b/src/lib/crypto/builtin/aes/aes.txt new file mode 100644 index 000000000..b644b5eb4 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aes.txt @@ -0,0 +1,70 @@ + +An AES (Rijndael) Implementation in C/C++ (as specified in FIPS-197) +-------------------------------------------------------------------- + +The source code files are as follows: + +1. aes.h: the header file required to use AES in C +2. aescpp.h the header file required to use AES in C++ +3. aescrypt.c the main C source code file for encryption and decryption +4. aeskey.c the main C source code file for the key schedule +5. aestab.c the main file for the AES tables +6. aesopt.h the file for common code and for setting build options +7. aescrypt.asm a faster alternative to 3 above in assembler (using NASM) +8. uitypes.h a file for defining fixed length unsigned integer types +9. aescrypp.c an alternative to 3 for all Rijndael block and key sizes +10.aeskeypp.c an alternative to 4 for all Rijndael block and key sizes +11.aesxam.c an example of AES use + +Source files 9 and 10 are much slower than 4 and 5 for normal use and +should not be used unless support for 20 and 28 byte blocks and keys +is necessary. Files 4 and 5 provide support for block and key sizes +of 16, 24 and 32 bytes (fixed or variable) but the assemler code in +file 7 only supports the 16 byte AES block length. It does, however, +offer the three key sizes when used with file 4. The use of files 4 +and 5 (or 9 and 10) with variable block size should be avoided since +the code is much faster when the block size is fixed. + +The VC++ AES Development Project +-------------------------------- + +The VC++ SOlution contains the following sub-projects + +1. aes_asm this project tests the assembler code implementation +2. aes_dll this project builds the DLL version +3. aes_gav this project re-creates the test vector files and + optionally checks them against a reference set +4. aes_rav this project checks the values produced by the code + against the values in the test vector files +5. aes_tmr this project measures the speed of the code +6. aes_tst this project is set up to test the extended version + of Rijndael with block and key sizes of 16, 20, 24, + 28 and 32 bytes +7. aes_xam this project builds the example of AES use in a + simple file encryption program + +Note that the paths for the various directories have to be set up in +aestst.h + +The AES and Rijndael Test Vector Files +-------------------------------------- + +These files fall in the following groups (where is a two digit +number): + +1. ecbvk.txt ECB vectors with variable key +2. ecbvt.txt ECB vectors with variable text +3. ecbnk.txt new ECB vectors with variable key +4. ecbnt.txt new ECB vectors with variable text +5. ecbme.txt ECB monte carlo encryption test vectors +6. ecbmd.txt ECB monte carlo decryption test vectors +7. cbcme.txt CBC monte carlo encryption test vectors +8. cbcmd.txt CBC monte carlo decryption test vectors + +The first digit of the numeric suffix on the filename gives the +block size in 32bit units and the second numeric digit gives the +key size. For example, the file ecbvk44.txt provides the test +vectors for ECB encryption with a 128 bit block size and a 128 +bit key size. + + Brian Gladman \ No newline at end of file diff --git a/src/lib/crypto/builtin/aes/aes_s2k.c b/src/lib/crypto/builtin/aes/aes_s2k.c new file mode 100644 index 000000000..36045edc0 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aes_s2k.c @@ -0,0 +1,90 @@ +/* + * lib/crypto/aes/aes_s2k.c + * + * Copyright 2003 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * krb5int_aes_string_to_key + */ + +#include "k5-int.h" +#include "dk.h" +#include "aes_s2k.h" + +#define DEFAULT_ITERATION_COUNT 4096 /* was 0xb000L in earlier drafts */ +#define MAX_ITERATION_COUNT 0x1000000L + +krb5_error_code +krb5int_aes_string_to_key(const struct krb5_enc_provider *enc, + const krb5_data *string, + const krb5_data *salt, + const krb5_data *params, + krb5_keyblock *key) +{ + unsigned long iter_count; + krb5_data out; + static const krb5_data usage = { KV5M_DATA, 8, "kerberos" }; + krb5_error_code err; + + if (params) { + unsigned char *p = (unsigned char *) params->data; + if (params->length != 4) + return KRB5_ERR_BAD_S2K_PARAMS; + /* The first two need casts in case 'int' is 16 bits. */ + iter_count = load_32_be(p); + if (iter_count == 0) { + iter_count = (1UL << 16) << 16; + if (((iter_count >> 16) >> 16) != 1) + return KRB5_ERR_BAD_S2K_PARAMS; + } + } else + iter_count = DEFAULT_ITERATION_COUNT; + + /* This is not a protocol specification constraint; this is an + implementation limit, which should eventually be controlled by + a config file. */ + if (iter_count >= MAX_ITERATION_COUNT) + return KRB5_ERR_BAD_S2K_PARAMS; + + /* + * Dense key space, no parity bits or anything, so take a shortcut + * and use the key contents buffer for the generated bytes. + */ + out.data = (char *) key->contents; + out.length = key->length; + if (out.length != 16 && out.length != 32) + return KRB5_CRYPTO_INTERNAL; + + err = krb5int_pbkdf2_hmac_sha1 (&out, iter_count, string, salt); + if (err) { + memset(out.data, 0, out.length); + return err; + } + + err = krb5_derive_key (enc, key, key, &usage); + if (err) { + memset(out.data, 0, out.length); + return err; + } + return 0; +} diff --git a/src/lib/crypto/builtin/aes/aes_s2k.h b/src/lib/crypto/builtin/aes/aes_s2k.h new file mode 100644 index 000000000..b6804a991 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aes_s2k.h @@ -0,0 +1,4 @@ +extern krb5_error_code +krb5int_aes_string_to_key (const struct krb5_enc_provider *, + const krb5_data *, const krb5_data *, + const krb5_data *, krb5_keyblock *key); diff --git a/src/lib/crypto/builtin/aes/aescpp.h b/src/lib/crypto/builtin/aes/aescpp.h new file mode 100644 index 000000000..e685485e1 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aescpp.h @@ -0,0 +1,55 @@ + +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + TERMS + + Redistribution and use in source and binary forms, with or without + modification, are permitted subject to the following conditions: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. The copyright holder's name must not be used to endorse or promote + any products derived from this software without his specific prior + written permission. + + This software is provided 'as is' with no express or implied warranties + of correctness or fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the definitions required to use AES (Rijndael) in C++. +*/ + +#ifndef _AESCPP_H +#define _AESCPP_H + +#include "aes.h" + +class AESclass +{ aes_ctx cx[1]; +public: +#if defined(BLOCK_SIZE) + AESclass() { cx->n_blk = BLOCK_SIZE; cx->n_rnd = 0; } +#else + AESclass(unsigned int blen = 16) { cx->n_blk = blen; cx->n_rnd = 0; } +#endif + aes_rval blk_len(unsigned int blen) { return aes_blk_len(blen, cx); } + aes_rval enc_key(const unsigned char in_key[], unsigned int klen) + { return aes_enc_key(in_key, klen, cx); } + aes_rval dec_key(const unsigned char in_key[], unsigned int klen) + { return aes_dec_key(in_key, klen, cx); } + aes_rval enc_blk(const unsigned char in_blk[], unsigned char out_blk[]) + { return aes_enc_blk(in_blk, out_blk, cx); } + aes_rval dec_blk(const unsigned char in_blk[], unsigned char out_blk[]) + { return aes_dec_blk(in_blk, out_blk, cx); } +}; + +#endif diff --git a/src/lib/crypto/builtin/aes/aescrypp.c b/src/lib/crypto/builtin/aes/aescrypp.c new file mode 100644 index 000000000..87b634179 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aescrypp.c @@ -0,0 +1,487 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the code for implementing encryption and decryption + for AES (Rijndael) for block and key sizes of 16, 20, 24, 28 and 32 bytes. + It can optionally be replaced by code written in assembler using NASM. +*/ + +#include "aesopt.h" + +#define unused 77 /* Sunset Strip */ + +#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c] +#define so(y,x,c) word_out(y + 4 * c, s(x,c)) + +#if BLOCK_SIZE == 16 + +#if defined(ARRAYS) +#define locals(y,x) x[4],y[4] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,y##0,y##1,y##2,y##3 + /* + the following defines prevent the compiler requiring the declaration + of generated but unused variables in the fwd_var and inv_var macros + */ +#define b04 unused +#define b05 unused +#define b06 unused +#define b07 unused +#define b14 unused +#define b15 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) + +#elif BLOCK_SIZE == 20 + +#if defined(ARRAYS) +#define locals(y,x) x[5],y[5] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,y##0,y##1,y##2,y##3,y##4 +#define b05 unused +#define b06 unused +#define b07 unused +#define b15 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); s(y,4) = s(x,4); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); si(y,x,k,4) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); so(y,x,4) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); rm(y,x,k,4) + +#elif BLOCK_SIZE == 24 + +#if defined(ARRAYS) +#define locals(y,x) x[6],y[6] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5, \ + y##0,y##1,y##2,y##3,y##4,y##5 +#define b06 unused +#define b07 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ + si(y,x,k,3); si(y,x,k,4); si(y,x,k,5) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ + so(y,x,3); so(y,x,4); so(y,x,5) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ + rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5) + +#elif BLOCK_SIZE == 28 + +#if defined(ARRAYS) +#define locals(y,x) x[7],y[7] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6 \ + y##0,y##1,y##2,y##3,y##4,y##5,y##6 +#define b07 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5);; s(y,6) = s(x,6); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ + si(y,x,k,3); si(y,x,k,4); si(y,x,k,5); si(y,x,k,6) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ + so(y,x,3); so(y,x,4); so(y,x,5); so(y,x,6) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ + rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6) +#else + +#if defined(ARRAYS) +#define locals(y,x) x[8],y[8] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7, \ + y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); \ + s(y,6) = s(x,6); s(y,7) = s(x,7); + +#if BLOCK_SIZE == 32 + +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); \ + si(y,x,k,4); si(y,x,k,5); si(y,x,k,6); si(y,x,k,7) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); \ + so(y,x,4); so(y,x,5); so(y,x,6); so(y,x,7) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); \ + rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6); rm(y,x,k,7) +#else + +#define state_in(y,x,k) \ +switch(nc) \ +{ case 8: si(y,x,k,7); \ + case 7: si(y,x,k,6); \ + case 6: si(y,x,k,5); \ + case 5: si(y,x,k,4); \ + case 4: si(y,x,k,3); si(y,x,k,2); \ + si(y,x,k,1); si(y,x,k,0); \ +} + +#define state_out(y,x) \ +switch(nc) \ +{ case 8: so(y,x,7); \ + case 7: so(y,x,6); \ + case 6: so(y,x,5); \ + case 5: so(y,x,4); \ + case 4: so(y,x,3); so(y,x,2); \ + so(y,x,1); so(y,x,0); \ +} + +#if defined(FAST_VARIABLE) + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ + rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 7: rm(y,x,k,6); rm(y,x,k,5); \ + rm(y,x,k,4); rm(y,x,k,3); \ + rm(y,x,k,2); rm(y,x,k,1); \ + rm(y,x,k,0); \ + break; \ + case 6: rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 5: rm(y,x,k,4); rm(y,x,k,3); \ + rm(y,x,k,2); rm(y,x,k,1); \ + rm(y,x,k,0); \ + break; \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ +} +#else + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); \ + case 7: rm(y,x,k,6); \ + case 6: rm(y,x,k,5); \ + case 5: rm(y,x,k,4); \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ +} + +#endif + +#endif +#endif + +#if defined(ENCRYPTION) + +/* I am grateful to Frank Yellin for the following construction + (and that for decryption) which, given the column (c) of the + output state variable, gives the input state variables which + are needed for each row (r) of the state. + + For the fixed block size options, compilers should reduce these + two expressions to fixed variable references. But for variable + block size code conditional clauses will sometimes be returned. + + y = output word, x = input word, r = row, c = column for r = 0, + 1, 2 and 3 = column accessed for row r. +*/ + +#define fwd_var(x,r,c) \ + ( r==0 ? \ + ( c==0 ? s(x,0) \ + : c==1 ? s(x,1) \ + : c==2 ? s(x,2) \ + : c==3 ? s(x,3) \ + : c==4 ? s(x,4) \ + : c==5 ? s(x,5) \ + : c==6 ? s(x,6) \ + : s(x,7)) \ + : r==1 ? \ + ( c==0 ? s(x,1) \ + : c==1 ? s(x,2) \ + : c==2 ? s(x,3) \ + : c==3 ? nc==4 ? s(x,0) : s(x,4) \ + : c==4 ? nc==5 ? s(x,0) : s(x,5) \ + : c==5 ? nc==6 ? s(x,0) : s(x,6) \ + : c==6 ? nc==7 ? s(x,0) : s(x,7) \ + : s(x,0)) \ + : r==2 ? \ + ( c==0 ? nc==8 ? s(x,3) : s(x,2) \ + : c==1 ? nc==8 ? s(x,4) : s(x,3) \ + : c==2 ? nc==8 ? s(x,5) : nc==4 ? s(x,0) : s(x,4) \ + : c==3 ? nc==8 ? s(x,6) : nc==5 ? s(x,0) : nc==4 ? s(x,1) : s(x,5) \ + : c==4 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : nc==6 ? s(x,0) : s(x,1) \ + : c==5 ? nc==6 ? s(x,1) : s(x,0) \ + : c==6 ? s(x,1) \ + : s(x,2)) \ + : \ + ( c==0 ? nc>6 ? s(x,4) : s(x,3) \ + : c==1 ? nc>6 ? s(x,5) : nc==4 ? s(x,0) : s(x,4) \ + : c==2 ? nc>6 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,0) : s(x,1) \ + : c==3 ? nc==8 ? s(x,7) : nc==5 ? s(x,1) : nc==4 ? s(x,2) : s(x,0) \ + : c==4 ? nc==8 ? s(x,0) : nc==5 ? s(x,2) : s(x,1) \ + : c==5 ? nc==8 ? s(x,1) : s(x,2) \ + : c==6 ? nc==8 ? s(x,2) : s(x,3) \ + : s(x,3))) + +#if defined(FT4_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c) +#elif defined(FT1_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,ft_tab,fwd_var,rf1,c) +#else +#define fwd_rnd(y,x,k,c) s(y,c) = fwd_mcol(no_table(x,s_box,fwd_var,rf1,c)) ^ (k)[c] +#endif + +#if defined(FL4_SET) +#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c) +#elif defined(FL1_SET) +#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,fl_tab,fwd_var,rf1,c) +#else +#define fwd_lrnd(y,x,k,c) s(y,c) = no_table(x,s_box,fwd_var,rf1,c) ^ (k)[c] +#endif + +aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ uint32_t locals(b0, b1); + const uint32_t *kp = cx->k_sch; + dec_fmvars /* declare variables for fwd_mcol() if needed */ + + if(!(cx->n_blk & 1)) return aes_bad; + +#if (ENC_UNROLL == FULL) + + state_in((cx->n_rnd & 1 ? b1 : b0), in_blk, kp); + kp += (cx->n_rnd - 9) * nc; + + switch(cx->n_rnd) + { + case 14: round(fwd_rnd, b1, b0, kp - 4 * nc); + case 13: round(fwd_rnd, b0, b1, kp - 3 * nc); + case 12: round(fwd_rnd, b1, b0, kp - 2 * nc); + case 11: round(fwd_rnd, b0, b1, kp - nc); + case 10: round(fwd_rnd, b1, b0, kp ); + round(fwd_rnd, b0, b1, kp + nc); + round(fwd_rnd, b1, b0, kp + 2 * nc); + round(fwd_rnd, b0, b1, kp + 3 * nc); + round(fwd_rnd, b1, b0, kp + 4 * nc); + round(fwd_rnd, b0, b1, kp + 5 * nc); + round(fwd_rnd, b1, b0, kp + 6 * nc); + round(fwd_rnd, b0, b1, kp + 7 * nc); + round(fwd_rnd, b1, b0, kp + 8 * nc); + round(fwd_lrnd, b0, b1, kp + 9 * nc); + } +#else + { uint32_t rnd; + + state_in(b0, in_blk, kp); + +#if (ENC_UNROLL == PARTIAL) + + for(rnd = 0; rnd < (cx->n_rnd - 1) >> 1; ++rnd) + { + kp += nc; + round(fwd_rnd, b1, b0, kp); + kp += nc; + round(fwd_rnd, b0, b1, kp); + } + + if(cx->n_rnd & 1) + { + l_copy(b1, b0); + } + else + { + kp += nc; + round(fwd_rnd, b1, b0, kp); + } +#else + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp += nc; + round(fwd_rnd, b1, b0, kp); + l_copy(b0, b1); + } +#endif + kp += nc; + round(fwd_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif + +#if defined(DECRYPTION) + +#define inv_var(x,r,c) \ + ( r==0 ? \ + ( c==0 ? s(x,0) \ + : c==1 ? s(x,1) \ + : c==2 ? s(x,2) \ + : c==3 ? s(x,3) \ + : c==4 ? s(x,4) \ + : c==5 ? s(x,5) \ + : c==6 ? s(x,6) \ + : s(x,7)) \ + : r==1 ? \ + ( c==0 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,4) : s(x,3) \ + : c==1 ? s(x,0) \ + : c==2 ? s(x,1) \ + : c==3 ? s(x,2) \ + : c==4 ? s(x,3) \ + : c==5 ? s(x,4) \ + : c==6 ? s(x,5) \ + : s(x,6)) \ + : r==2 ? \ + ( c==0 ? nc>6 ? s(x,5) : nc==6 ? s(x,4) : nc==5 ? s(x,3) : s(x,2) \ + : c==1 ? nc>6 ? s(x,6) : nc==6 ? s(x,5) : nc==5 ? s(x,4) : s(x,3) \ + : c==2 ? nc==8 ? s(x,7) : s(x,0) \ + : c==3 ? nc==8 ? s(x,0) : s(x,1) \ + : c==4 ? nc==8 ? s(x,1) : s(x,2) \ + : c==5 ? nc==8 ? s(x,2) : s(x,3) \ + : c==6 ? nc==8 ? s(x,3) : s(x,4) \ + : s(x,4)) \ + : \ + ( c==0 ? nc==8 ? s(x,4) : nc==5 ? s(x,2) : nc==4 ? s(x,1) : s(x,3) \ + : c==1 ? nc==8 ? s(x,5) : nc==5 ? s(x,3) : nc==4 ? s(x,2) : s(x,4) \ + : c==2 ? nc==8 ? s(x,6) : nc==5 ? s(x,4) : nc==4 ? s(x,3) : s(x,5) \ + : c==3 ? nc==8 ? s(x,7) : nc==7 ? s(x,6) : s(x,0) \ + : c==4 ? nc>6 ? s(x,0) : s(x,1) \ + : c==5 ? nc==6 ? s(x,2) : s(x,1) \ + : c==6 ? s(x,2) \ + : s(x,3))) + +#if defined(IT4_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,it_tab,inv_var,rf1,c) +#elif defined(IT1_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,it_tab,inv_var,rf1,c) +#else +#define inv_rnd(y,x,k,c) s(y,c) = inv_mcol(no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c]) +#endif + +#if defined(IL4_SET) +#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,il_tab,inv_var,rf1,c) +#elif defined(IL1_SET) +#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,il_tab,inv_var,rf1,c) +#else +#define inv_lrnd(y,x,k,c) s(y,c) = no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c] +#endif + +aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ uint32_t locals(b0, b1); + const uint32_t *kp = cx->k_sch + nc * cx->n_rnd; + dec_imvars /* declare variables for inv_mcol() if needed */ + + if(!(cx->n_blk & 2)) return aes_bad; + +#if (DEC_UNROLL == FULL) + + state_in((cx->n_rnd & 1 ? b1 : b0), in_blk, kp); + kp = cx->k_sch + 9 * nc; + + switch(cx->n_rnd) + { + case 14: round(inv_rnd, b1, b0, kp + 4 * nc); + case 13: round(inv_rnd, b0, b1, kp + 3 * nc); + case 12: round(inv_rnd, b1, b0, kp + 2 * nc); + case 11: round(inv_rnd, b0, b1, kp + nc); + case 10: round(inv_rnd, b1, b0, kp ); + round(inv_rnd, b0, b1, kp - nc); + round(inv_rnd, b1, b0, kp - 2 * nc); + round(inv_rnd, b0, b1, kp - 3 * nc); + round(inv_rnd, b1, b0, kp - 4 * nc); + round(inv_rnd, b0, b1, kp - 5 * nc); + round(inv_rnd, b1, b0, kp - 6 * nc); + round(inv_rnd, b0, b1, kp - 7 * nc); + round(inv_rnd, b1, b0, kp - 8 * nc); + round(inv_lrnd, b0, b1, kp - 9 * nc); + } +#else + { uint32_t rnd; + + state_in(b0, in_blk, kp); + +#if (DEC_UNROLL == PARTIAL) + + for(rnd = 0; rnd < (cx->n_rnd - 1) >> 1; ++rnd) + { + kp -= nc; + round(inv_rnd, b1, b0, kp); + kp -= nc; + round(inv_rnd, b0, b1, kp); + } + + if(cx->n_rnd & 1) + { + l_copy(b1, b0); + } + else + { + kp -= nc; + round(inv_rnd, b1, b0, kp); + } +#else + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp -= nc; + round(inv_rnd, b1, b0, kp); + l_copy(b0, b1); + } +#endif + kp -= nc; + round(inv_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif diff --git a/src/lib/crypto/builtin/aes/aescrypt.asm b/src/lib/crypto/builtin/aes/aescrypt.asm new file mode 100644 index 000000000..35a6818b6 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aescrypt.asm @@ -0,0 +1,402 @@ + +; ------------------------------------------------------------------------- +; Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. +; All rights reserved. +; +; LICENSE TERMS +; +; The free distribution and use of this software in both source and binary +; form is allowed (with or without changes) provided that: +; +; 1. distributions of this source code include the above copyright +; notice, this list of conditions and the following disclaimer; +; +; 2. distributions in binary form include the above copyright +; notice, this list of conditions and the following disclaimer +; in the documentation and/or other associated materials; +; +; 3. the copyright holder's name is not used to endorse products +; built using this software without specific written permission. +; +; DISCLAIMER +; +; This software is provided 'as is' with no explcit or implied warranties +; in respect of any properties, including, but not limited to, correctness +; and fitness for purpose. +; ------------------------------------------------------------------------- +; Issue Date: 15/01/2002 + +; An AES (Rijndael) implementation for the Pentium MMX family using the NASM +; assembler . This version only implements +; the standard AES block length (128 bits, 16 bytes) with the same interface +; as that used in my C/C++ implementation. This code does not preserve the +; eax, ecx or edx registers or the artihmetic status flags. However, the ebx, +; esi, edi, and ebp registers are preserved across calls. Only encryption +; and decryption are implemented here, the key schedule code being that from +; compiling aes.c with USE_ASM defined. This code uses VC++ register saving +; conentions; if it is used with another compiler, its conventions for using +; and saving registers will need to be checked. + + section .text use32 + +; aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); +; aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); + + global _aes_enc_blk + global _aes_dec_blk + + extern _ft_tab + extern _fl_tab + extern _it_tab + extern _il_tab + +;%define USE_MMX ; include this to use MMX registers for temporary storage +;%define USE_EMMS ; include this if you make use of floating point operations + +%ifdef USE_MMX +%ifdef USE_EMMS +%define EMMS_ON +%endif +%endif + +tlen: equ 1024 ; length of each of 4 'xor' arrays (256 32-bit words) + +; offsets to parameters with one register pushed onto stack + +in_blk: equ 8 ; input byte array address parameter +out_blk:equ 12 ; output byte array address parameter +ctx: equ 16 ; AES context structure + +; offsets in context structure + +ksch: equ 0 ; encryption key schedule base address +nrnd: equ 256 ; number of rounds +nblk: equ 260 ; number of rounds + +; register mapping for encrypt and decrypt subroutines + +%define r0 eax +%define r1 ebx +%define r2 ecx +%define r3 edx +%define r4 esi +%define r5 edi +%define r6 ebp + +%define eaxl al +%define eaxh ah +%define ebxl bl +%define ebxh bh +%define ecxl cl +%define ecxh ch +%define edxl dl +%define edxh dh + +; This macro takes a 32-bit word representing a column and uses +; each of its four bytes to index into four tables of 256 32-bit +; words to obtain values that are then xored into the appropriate +; output registers r0, r1, r4 or r5. + +; Parameters: +; %1 out_state[0] +; %2 out_state[1] +; %3 out_state[2] +; %4 out_state[3] +; %5 table base address +; %6 input register for the round (destroyed) +; %7 scratch register for the round + +%macro do_col 7 + + movzx %7,%6l + xor %1,[4*%7+%5] + movzx %7,%6h + shr %6,16 + xor %2,[4*%7+%5+tlen] + movzx %7,%6l + movzx %6,%6h + xor %3,[4*%7+%5+2*tlen] + xor %4,[4*%6+%5+3*tlen] + +%endmacro + +; initialise output registers from the key schedule + +%macro do_fcol 8 + + mov %1,[%8] + movzx %7,%6l + mov %2,[%8+12] + xor %1,[4*%7+%5] + mov %4,[%8+ 4] + movzx %7,%6h + shr %6,16 + xor %2,[4*%7+%5+tlen] + movzx %7,%6l + movzx %6,%6h + xor %4,[4*%6+%5+3*tlen] + mov %6,%3 + mov %3,[%8+ 8] + xor %3,[4*%7+%5+2*tlen] + +%endmacro + +; initialise output registers from the key schedule + +%macro do_icol 8 + + mov %1,[%8] + movzx %7,%6l + mov %2,[%8+ 4] + xor %1,[4*%7+%5] + mov %4,[%8+12] + movzx %7,%6h + shr %6,16 + xor %2,[4*%7+%5+tlen] + movzx %7,%6l + movzx %6,%6h + xor %4,[4*%6+%5+3*tlen] + mov %6,%3 + mov %3,[%8+ 8] + xor %3,[4*%7+%5+2*tlen] + +%endmacro + +; These macros implement either MMX or stack based local variables + +%ifdef USE_MMX + +%macro save 2 + movd mm%1,%2 +%endmacro + +%macro restore 2 + movd %1,mm%2 +%endmacro + +%else + +%macro save 2 + mov [esp+4*%1],%2 +%endmacro + +%macro restore 2 + mov %1,[esp+4*%2] +%endmacro + +%endif + +; This macro performs a forward encryption cycle. It is entered with +; the first previous round column values in r0, r1, r4 and r5 and +; exits with the final values in the same registers, using the MMX +; registers mm0-mm1 for temporary storage + +%macro fwd_rnd 1-2 _ft_tab + +; mov current column values into the MMX registers + + mov r2,r0 + save 0,r1 + save 1,r5 + +; compute new column values + + do_fcol r0,r5,r4,r1, %2, r2,r3, %1 + do_col r4,r1,r0,r5, %2, r2,r3 + restore r2,0 + do_col r1,r0,r5,r4, %2, r2,r3 + restore r2,1 + do_col r5,r4,r1,r0, %2, r2,r3 + +%endmacro + +; This macro performs an inverse encryption cycle. It is entered with +; the first previous round column values in r0, r1, r4 and r5 and +; exits with the final values in the same registers, using the MMX +; registers mm0-mm1 for temporary storage + +%macro inv_rnd 1-2 _it_tab + +; mov current column values into the MMX registers + + mov r2,r0 + save 0,r1 + save 1,r5 + +; compute new column values + + do_icol r0,r1,r4,r5, %2, r2,r3, %1 + do_col r4,r5,r0,r1, %2, r2,r3 + restore r2,0 + do_col r1,r4,r5,r0, %2, r2,r3 + restore r2,1 + do_col r5,r0,r1,r4, %2, r2,r3 + +%endmacro + +; AES (Rijndael) Encryption Subroutine + +_aes_enc_blk: + push ebp + mov ebp,[esp+ctx] ; pointer to context + xor eax,eax + test [ebp+nblk],byte 1 + je .0 + cmp eax,[ebp+nrnd] ; encryption/decryption flags + jne short .1 +.0: pop ebp + ret + +; CAUTION: the order and the values used in these assigns +; rely on the register mappings + +.1: push ebx + mov r2,[esp+in_blk+4] + push esi + mov r3,[ebp+nrnd] ; number of rounds + push edi + lea r6,[ebp+ksch] ; key pointer + +; input four columns and xor in first round key + + mov r0,[r2] + mov r1,[r2+4] + mov r4,[r2+8] + mov r5,[r2+12] + xor r0,[r6] + xor r1,[r6+4] + xor r4,[r6+8] + xor r5,[r6+12] + +%ifndef USE_MMX + sub esp,8 ; space for register saves on stack +%endif + add r6,16 ; increment to next round key + sub r3,10 + je .4 ; 10 rounds for 128-bit key + add r6,32 + sub r3,2 + je .3 ; 12 rounds for 128-bit key + add r6,32 + +.2: fwd_rnd r6-64 ; 14 rounds for 128-bit key + fwd_rnd r6-48 +.3: fwd_rnd r6-32 ; 12 rounds for 128-bit key + fwd_rnd r6-16 +.4: fwd_rnd r6 ; 10 rounds for 128-bit key + fwd_rnd r6+ 16 + fwd_rnd r6+ 32 + fwd_rnd r6+ 48 + fwd_rnd r6+ 64 + fwd_rnd r6+ 80 + fwd_rnd r6+ 96 + fwd_rnd r6+112 + fwd_rnd r6+128 + fwd_rnd r6+144,_fl_tab ; last round uses a different table + +; move final values to the output array. CAUTION: the +; order of these assigns rely on the register mappings + +%ifndef USE_MMX + add esp,8 +%endif + mov r6,[esp+out_blk+12] + mov [r6+12],r5 + pop edi + mov [r6+8],r4 + pop esi + mov [r6+4],r1 + pop ebx + mov [r6],r0 + pop ebp + mov eax,1 +%ifdef EMMS_ON + emms +%endif + ret + +; AES (Rijndael) Decryption Subroutine + +_aes_dec_blk: + push ebp + mov ebp,[esp+ctx] ; pointer to context + xor eax,eax + test [ebp+nblk],byte 2 + je .0 + cmp eax,[ebp+nrnd] ; encryption/decryption flags + jne short .1 +.0: pop ebp + ret + +; CAUTION: the order and the values used in these assigns +; rely on the register mappings + +.1: push ebx + mov r2,[esp+in_blk+4] + push esi + mov r3,[ebp+nrnd] ; number of rounds + push edi + lea r6,[ebp+ksch] ; key pointer + mov r0,r3 + shl r0,4 + add r6,r0 + +; input four columns and xor in first round key + + mov r0,[r2] + mov r1,[r2+4] + mov r4,[r2+8] + mov r5,[r2+12] + xor r0,[r6] + xor r1,[r6+4] + xor r4,[r6+8] + xor r5,[r6+12] + +%ifndef USE_MMX + sub esp,8 ; space for register saves on stack +%endif + sub r6,16 ; increment to next round key + sub r3,10 + je .4 ; 10 rounds for 128-bit key + sub r6,32 + sub r3,2 + je .3 ; 12 rounds for 128-bit key + sub r6,32 + +.2: inv_rnd r6+64 ; 14 rounds for 128-bit key + inv_rnd r6+48 +.3: inv_rnd r6+32 ; 12 rounds for 128-bit key + inv_rnd r6+16 +.4: inv_rnd r6 ; 10 rounds for 128-bit key + inv_rnd r6- 16 + inv_rnd r6- 32 + inv_rnd r6- 48 + inv_rnd r6- 64 + inv_rnd r6- 80 + inv_rnd r6- 96 + inv_rnd r6-112 + inv_rnd r6-128 + inv_rnd r6-144,_il_tab ; last round uses a different table + +; move final values to the output array. CAUTION: the +; order of these assigns rely on the register mappings + +%ifndef USE_MMX + add esp,8 +%endif + mov r6,[esp+out_blk+12] + mov [r6+12],r5 + pop edi + mov [r6+8],r4 + pop esi + mov [r6+4],r1 + pop ebx + mov [r6],r0 + pop ebp + mov eax,1 +%ifdef EMMS_ON + emms +%endif + ret + + end diff --git a/src/lib/crypto/builtin/aes/aescrypt.c b/src/lib/crypto/builtin/aes/aescrypt.c new file mode 100644 index 000000000..9db66e284 --- /dev/null +++ b/src/lib/crypto/builtin/aes/aescrypt.c @@ -0,0 +1,421 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the code for implementing encryption and decryption + for AES (Rijndael) for block and key sizes of 16, 24 and 32 bytes. It + can optionally be replaced by code written in assembler using NASM. +*/ + +#include "aesopt.h" + +#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) +#error An illegal block size has been specified. +#endif + +#define unused 77 /* Sunset Strip */ + +#define si(y,x,k,c) s(y,c) = word_in(x + 4 * c) ^ k[c] +#define so(y,x,c) word_out(y + 4 * c, s(x,c)) + +#if BLOCK_SIZE == 16 + +#if defined(ARRAYS) +#define locals(y,x) x[4],y[4] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,y##0,y##1,y##2,y##3 + /* + the following defines prevent the compiler requiring the declaration + of generated but unused variables in the fwd_var and inv_var macros + */ +#define b04 unused +#define b05 unused +#define b06 unused +#define b07 unused +#define b14 unused +#define b15 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3) + +#elif BLOCK_SIZE == 24 + +#if defined(ARRAYS) +#define locals(y,x) x[6],y[6] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5, \ + y##0,y##1,y##2,y##3,y##4,y##5 +#define b06 unused +#define b07 unused +#define b16 unused +#define b17 unused +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); \ + si(y,x,k,3); si(y,x,k,4); si(y,x,k,5) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); \ + so(y,x,3); so(y,x,4); so(y,x,5) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); \ + rm(y,x,k,3); rm(y,x,k,4); rm(y,x,k,5) +#else + +#if defined(ARRAYS) +#define locals(y,x) x[8],y[8] +#else +#define locals(y,x) x##0,x##1,x##2,x##3,x##4,x##5,x##6,x##7, \ + y##0,y##1,y##2,y##3,y##4,y##5,y##6,y##7 +#endif +#define l_copy(y, x) s(y,0) = s(x,0); s(y,1) = s(x,1); \ + s(y,2) = s(x,2); s(y,3) = s(x,3); \ + s(y,4) = s(x,4); s(y,5) = s(x,5); \ + s(y,6) = s(x,6); s(y,7) = s(x,7); + +#if BLOCK_SIZE == 32 + +#define state_in(y,x,k) si(y,x,k,0); si(y,x,k,1); si(y,x,k,2); si(y,x,k,3); \ + si(y,x,k,4); si(y,x,k,5); si(y,x,k,6); si(y,x,k,7) +#define state_out(y,x) so(y,x,0); so(y,x,1); so(y,x,2); so(y,x,3); \ + so(y,x,4); so(y,x,5); so(y,x,6); so(y,x,7) +#define round(rm,y,x,k) rm(y,x,k,0); rm(y,x,k,1); rm(y,x,k,2); rm(y,x,k,3); \ + rm(y,x,k,4); rm(y,x,k,5); rm(y,x,k,6); rm(y,x,k,7) +#else + +#define state_in(y,x,k) \ +switch(nc) \ +{ case 8: si(y,x,k,7); si(y,x,k,6); \ + case 6: si(y,x,k,5); si(y,x,k,4); \ + case 4: si(y,x,k,3); si(y,x,k,2); \ + si(y,x,k,1); si(y,x,k,0); \ +} + +#define state_out(y,x) \ +switch(nc) \ +{ case 8: so(y,x,7); so(y,x,6); \ + case 6: so(y,x,5); so(y,x,4); \ + case 4: so(y,x,3); so(y,x,2); \ + so(y,x,1); so(y,x,0); \ +} + +#if defined(FAST_VARIABLE) + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ + rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 6: rm(y,x,k,5); rm(y,x,k,4); \ + rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ + break; \ +} +#else + +#define round(rm,y,x,k) \ +switch(nc) \ +{ case 8: rm(y,x,k,7); rm(y,x,k,6); \ + case 6: rm(y,x,k,5); rm(y,x,k,4); \ + case 4: rm(y,x,k,3); rm(y,x,k,2); \ + rm(y,x,k,1); rm(y,x,k,0); \ +} + +#endif + +#endif +#endif + +#if defined(ENCRYPTION) + +/* I am grateful to Frank Yellin for the following construction + (and that for decryption) which, given the column (c) of the + output state variable, gives the input state variables which + are needed in its computation for each row (r) of the state. + + For the fixed block size options, compilers should be able to + reduce this complex expression (and the equivalent one for + decryption) to a static variable reference at compile time. + But for variable block size code, there will be some limbs on + which conditional clauses will be returned. +*/ + +/* y = output word, x = input word, r = row, c = column for r = 0, + 1, 2 and 3 = column accessed for row r. +*/ + +#define fwd_var(x,r,c) \ + ( r==0 ? \ + ( c==0 ? s(x,0) \ + : c==1 ? s(x,1) \ + : c==2 ? s(x,2) \ + : c==3 ? s(x,3) \ + : c==4 ? s(x,4) \ + : c==5 ? s(x,5) \ + : c==6 ? s(x,6) \ + : s(x,7)) \ + : r==1 ? \ + ( c==0 ? s(x,1) \ + : c==1 ? s(x,2) \ + : c==2 ? s(x,3) \ + : c==3 ? nc==4 ? s(x,0) : s(x,4) \ + : c==4 ? s(x,5) \ + : c==5 ? nc==8 ? s(x,6) : s(x,0) \ + : c==6 ? s(x,7) \ + : s(x,0)) \ + : r==2 ? \ + ( c==0 ? nc==8 ? s(x,3) : s(x,2) \ + : c==1 ? nc==8 ? s(x,4) : s(x,3) \ + : c==2 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \ + : c==3 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \ + : c==4 ? nc==8 ? s(x,7) : s(x,0) \ + : c==5 ? nc==8 ? s(x,0) : s(x,1) \ + : c==6 ? s(x,1) \ + : s(x,2)) \ + : \ + ( c==0 ? nc==8 ? s(x,4) : s(x,3) \ + : c==1 ? nc==4 ? s(x,0) : nc==8 ? s(x,5) : s(x,4) \ + : c==2 ? nc==4 ? s(x,1) : nc==8 ? s(x,6) : s(x,5) \ + : c==3 ? nc==4 ? s(x,2) : nc==8 ? s(x,7) : s(x,0) \ + : c==4 ? nc==8 ? s(x,0) : s(x,1) \ + : c==5 ? nc==8 ? s(x,1) : s(x,2) \ + : c==6 ? s(x,2) \ + : s(x,3))) + +#if defined(FT4_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,ft_tab,fwd_var,rf1,c) +#elif defined(FT1_SET) +#undef dec_fmvars +#define dec_fmvars +#define fwd_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,ft_tab,fwd_var,rf1,c) +#else +#define fwd_rnd(y,x,k,c) s(y,c) = fwd_mcol(no_table(x,s_box,fwd_var,rf1,c)) ^ (k)[c] +#endif + +#if defined(FL4_SET) +#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,fl_tab,fwd_var,rf1,c) +#elif defined(FL1_SET) +#define fwd_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,fl_tab,fwd_var,rf1,c) +#else +#define fwd_lrnd(y,x,k,c) s(y,c) = no_table(x,s_box,fwd_var,rf1,c) ^ (k)[c] +#endif + +aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ uint32_t locals(b0, b1); + const uint32_t *kp = cx->k_sch; + dec_fmvars /* declare variables for fwd_mcol() if needed */ + + if(!(cx->n_blk & 1)) return aes_bad; + + state_in(b0, in_blk, kp); + +#if (ENC_UNROLL == FULL) + + kp += (cx->n_rnd - 9) * nc; + + switch(cx->n_rnd) + { + case 14: round(fwd_rnd, b1, b0, kp - 4 * nc); + round(fwd_rnd, b0, b1, kp - 3 * nc); + case 12: round(fwd_rnd, b1, b0, kp - 2 * nc); + round(fwd_rnd, b0, b1, kp - nc); + case 10: round(fwd_rnd, b1, b0, kp ); + round(fwd_rnd, b0, b1, kp + nc); + round(fwd_rnd, b1, b0, kp + 2 * nc); + round(fwd_rnd, b0, b1, kp + 3 * nc); + round(fwd_rnd, b1, b0, kp + 4 * nc); + round(fwd_rnd, b0, b1, kp + 5 * nc); + round(fwd_rnd, b1, b0, kp + 6 * nc); + round(fwd_rnd, b0, b1, kp + 7 * nc); + round(fwd_rnd, b1, b0, kp + 8 * nc); + round(fwd_lrnd, b0, b1, kp + 9 * nc); + } +#else + +#if (ENC_UNROLL == PARTIAL) + { uint32_t rnd; + for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) + { + kp += nc; + round(fwd_rnd, b1, b0, kp); + kp += nc; + round(fwd_rnd, b0, b1, kp); + } + kp += nc; + round(fwd_rnd, b1, b0, kp); +#else + { uint32_t rnd, *p0 = b0, *p1 = b1, *pt; + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp += nc; + round(fwd_rnd, p1, p0, kp); + pt = p0, p0 = p1, p1 = pt; + } +#endif + kp += nc; + round(fwd_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif + +#if defined(DECRYPTION) + +#define inv_var(x,r,c) \ + ( r==0 ? \ + ( c==0 ? s(x,0) \ + : c==1 ? s(x,1) \ + : c==2 ? s(x,2) \ + : c==3 ? s(x,3) \ + : c==4 ? s(x,4) \ + : c==5 ? s(x,5) \ + : c==6 ? s(x,6) \ + : s(x,7)) \ + : r==1 ? \ + ( c==0 ? nc==4 ? s(x,3) : nc==8 ? s(x,7) : s(x,5) \ + : c==1 ? s(x,0) \ + : c==2 ? s(x,1) \ + : c==3 ? s(x,2) \ + : c==4 ? s(x,3) \ + : c==5 ? s(x,4) \ + : c==6 ? s(x,5) \ + : s(x,6)) \ + : r==2 ? \ + ( c==0 ? nc==4 ? s(x,2) : nc==8 ? s(x,5) : s(x,4) \ + : c==1 ? nc==4 ? s(x,3) : nc==8 ? s(x,6) : s(x,5) \ + : c==2 ? nc==8 ? s(x,7) : s(x,0) \ + : c==3 ? nc==8 ? s(x,0) : s(x,1) \ + : c==4 ? nc==8 ? s(x,1) : s(x,2) \ + : c==5 ? nc==8 ? s(x,2) : s(x,3) \ + : c==6 ? s(x,3) \ + : s(x,4)) \ + : \ + ( c==0 ? nc==4 ? s(x,1) : nc==8 ? s(x,4) : s(x,3) \ + : c==1 ? nc==4 ? s(x,2) : nc==8 ? s(x,5) : s(x,4) \ + : c==2 ? nc==4 ? s(x,3) : nc==8 ? s(x,6) : s(x,5) \ + : c==3 ? nc==8 ? s(x,7) : s(x,0) \ + : c==4 ? nc==8 ? s(x,0) : s(x,1) \ + : c==5 ? nc==8 ? s(x,1) : s(x,2) \ + : c==6 ? s(x,2) \ + : s(x,3))) + +#if defined(IT4_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,it_tab,inv_var,rf1,c) +#elif defined(IT1_SET) +#undef dec_imvars +#define dec_imvars +#define inv_rnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,upr,it_tab,inv_var,rf1,c) +#else +#define inv_rnd(y,x,k,c) s(y,c) = inv_mcol(no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c]) +#endif + +#if defined(IL4_SET) +#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ four_tables(x,il_tab,inv_var,rf1,c) +#elif defined(IL1_SET) +#define inv_lrnd(y,x,k,c) s(y,c)= (k)[c] ^ one_table(x,ups,il_tab,inv_var,rf1,c) +#else +#define inv_lrnd(y,x,k,c) s(y,c) = no_table(x,inv_s_box,inv_var,rf1,c) ^ (k)[c] +#endif + +aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]) +{ uint32_t locals(b0, b1); + const uint32_t *kp = cx->k_sch + nc * cx->n_rnd; + dec_imvars /* declare variables for inv_mcol() if needed */ + + if(!(cx->n_blk & 2)) return aes_bad; + + state_in(b0, in_blk, kp); + +#if (DEC_UNROLL == FULL) + + kp = cx->k_sch + 9 * nc; + switch(cx->n_rnd) + { + case 14: round(inv_rnd, b1, b0, kp + 4 * nc); + round(inv_rnd, b0, b1, kp + 3 * nc); + case 12: round(inv_rnd, b1, b0, kp + 2 * nc); + round(inv_rnd, b0, b1, kp + nc ); + case 10: round(inv_rnd, b1, b0, kp ); + round(inv_rnd, b0, b1, kp - nc); + round(inv_rnd, b1, b0, kp - 2 * nc); + round(inv_rnd, b0, b1, kp - 3 * nc); + round(inv_rnd, b1, b0, kp - 4 * nc); + round(inv_rnd, b0, b1, kp - 5 * nc); + round(inv_rnd, b1, b0, kp - 6 * nc); + round(inv_rnd, b0, b1, kp - 7 * nc); + round(inv_rnd, b1, b0, kp - 8 * nc); + round(inv_lrnd, b0, b1, kp - 9 * nc); + } +#else + +#if (DEC_UNROLL == PARTIAL) + { uint32_t rnd; + for(rnd = 0; rnd < (cx->n_rnd >> 1) - 1; ++rnd) + { + kp -= nc; + round(inv_rnd, b1, b0, kp); + kp -= nc; + round(inv_rnd, b0, b1, kp); + } + kp -= nc; + round(inv_rnd, b1, b0, kp); +#else + { uint32_t rnd, *p0 = b0, *p1 = b1, *pt; + for(rnd = 0; rnd < cx->n_rnd - 1; ++rnd) + { + kp -= nc; + round(inv_rnd, p1, p0, kp); + pt = p0, p0 = p1, p1 = pt; + } +#endif + kp -= nc; + round(inv_lrnd, b0, b1, kp); + } +#endif + + state_out(out_blk, b0); + return aes_good; +} + +#endif diff --git a/src/lib/crypto/builtin/aes/aeskey.c b/src/lib/crypto/builtin/aes/aeskey.c new file mode 100644 index 000000000..60f766b8a --- /dev/null +++ b/src/lib/crypto/builtin/aes/aeskey.c @@ -0,0 +1,369 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the code for implementing the key schedule for AES + (Rijndael) for block and key sizes of 16, 24, and 32 bytes. +*/ + +#include "aesopt.h" + +#if defined(BLOCK_SIZE) && (BLOCK_SIZE & 7) +#error An illegal block size has been specified. +#endif + +/* Subroutine to set the block size (if variable) in bytes, legal + values being 16, 24 and 32. +*/ + +#if !defined(BLOCK_SIZE) && defined(SET_BLOCK_LENGTH) + +aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]) +{ +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + + if((blen & 7) || blen < 16 || blen > 32) + { + cx->n_blk = 0; return aes_bad; + } + + cx->n_blk = blen; + return aes_good; +} + +#endif + +/* Initialise the key schedule from the user supplied key. The key + length is now specified in bytes - 16, 24 or 32 as appropriate. + This corresponds to bit lengths of 128, 192 and 256 bits, and + to Nk values of 4, 6 and 8 respectively. + + The following macros implement a single cycle in the key + schedule generation process. The number of cycles needed + for each cx->n_col and nk value is: + + nk = 4 5 6 7 8 + ------------------------------ + cx->n_col = 4 10 9 8 7 7 + cx->n_col = 5 14 11 10 9 9 + cx->n_col = 6 19 15 12 11 11 + cx->n_col = 7 21 19 16 13 14 + cx->n_col = 8 29 23 19 17 14 +*/ + +#if defined(ENCRYPTION_KEY_SCHEDULE) + +#define ke4(k,i) \ +{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ + k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ +} +#define kel4(k,i) \ +{ k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+5] = ss[1] ^= ss[0]; \ + k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ +} + +#define ke6(k,i) \ +{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ + k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ + k[6*(i)+10] = ss[4] ^= ss[3]; k[6*(i)+11] = ss[5] ^= ss[4]; \ +} +#define kel6(k,i) \ +{ k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 7] = ss[1] ^= ss[0]; \ + k[6*(i)+ 8] = ss[2] ^= ss[1]; k[6*(i)+ 9] = ss[3] ^= ss[2]; \ +} + +#define ke8(k,i) \ +{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ + k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ + k[8*(i)+12] = ss[4] ^= ls_box(ss[3],0); k[8*(i)+13] = ss[5] ^= ss[4]; \ + k[8*(i)+14] = ss[6] ^= ss[5]; k[8*(i)+15] = ss[7] ^= ss[6]; \ +} +#define kel8(k,i) \ +{ k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 9] = ss[1] ^= ss[0]; \ + k[8*(i)+10] = ss[2] ^= ss[1]; k[8*(i)+11] = ss[3] ^= ss[2]; \ +} + +aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ uint32_t ss[8]; + +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + cx->n_blk = (cx->n_blk & ~3U) | 1; + + cx->k_sch[0] = ss[0] = word_in(in_key ); + cx->k_sch[1] = ss[1] = word_in(in_key + 4); + cx->k_sch[2] = ss[2] = word_in(in_key + 8); + cx->k_sch[3] = ss[3] = word_in(in_key + 12); + +#if (BLOCK_SIZE == 16) && (ENC_UNROLL != NONE) + + switch(klen) + { + case 16: ke4(cx->k_sch, 0); ke4(cx->k_sch, 1); + ke4(cx->k_sch, 2); ke4(cx->k_sch, 3); + ke4(cx->k_sch, 4); ke4(cx->k_sch, 5); + ke4(cx->k_sch, 6); ke4(cx->k_sch, 7); + ke4(cx->k_sch, 8); kel4(cx->k_sch, 9); + cx->n_rnd = 10; break; + case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + ke6(cx->k_sch, 0); ke6(cx->k_sch, 1); + ke6(cx->k_sch, 2); ke6(cx->k_sch, 3); + ke6(cx->k_sch, 4); ke6(cx->k_sch, 5); + ke6(cx->k_sch, 6); kel6(cx->k_sch, 7); + cx->n_rnd = 12; break; + case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + ke8(cx->k_sch, 0); ke8(cx->k_sch, 1); + ke8(cx->k_sch, 2); ke8(cx->k_sch, 3); + ke8(cx->k_sch, 4); ke8(cx->k_sch, 5); + kel8(cx->k_sch, 6); + cx->n_rnd = 14; break; + default: cx->n_rnd = 0; return aes_bad; + } +#else + { uint32_t i, l; + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + l = (nc * cx->n_rnd + nc - 1) / (klen >> 2); + + switch(klen) + { + case 16: for(i = 0; i < l; ++i) + ke4(cx->k_sch, i); + break; + case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ke6(cx->k_sch, i); + break; + case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ke8(cx->k_sch, i); + break; + default: cx->n_rnd = 0; return aes_bad; + } + } +#endif + + return aes_good; +} + +#endif + +#if defined(DECRYPTION_KEY_SCHEDULE) + +#if (DEC_ROUND != NO_TABLES) +#define d_vars dec_imvars +#define ff(x) inv_mcol(x) +#else +#define ff(x) (x) +#define d_vars +#endif + +#if 1 +#define kdf4(k,i) \ +{ ss[0] = ss[0] ^ ss[2] ^ ss[1] ^ ss[3]; ss[1] = ss[1] ^ ss[3]; ss[2] = ss[2] ^ ss[3]; ss[3] = ss[3]; \ + ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; \ + ss[4] ^= k[4*(i)]; k[4*(i)+4] = ff(ss[4]); ss[4] ^= k[4*(i)+1]; k[4*(i)+5] = ff(ss[4]); \ + ss[4] ^= k[4*(i)+2]; k[4*(i)+6] = ff(ss[4]); ss[4] ^= k[4*(i)+3]; k[4*(i)+7] = ff(ss[4]); \ +} +#define kd4(k,i) \ +{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; ss[4] = ff(ss[4]); \ + k[4*(i)+4] = ss[4] ^= k[4*(i)]; k[4*(i)+5] = ss[4] ^= k[4*(i)+1]; \ + k[4*(i)+6] = ss[4] ^= k[4*(i)+2]; k[4*(i)+7] = ss[4] ^= k[4*(i)+3]; \ +} +#define kdl4(k,i) \ +{ ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; ss[i % 4] ^= ss[4]; \ + k[4*(i)+4] = (ss[0] ^= ss[1]) ^ ss[2] ^ ss[3]; k[4*(i)+5] = ss[1] ^ ss[3]; \ + k[4*(i)+6] = ss[0]; k[4*(i)+7] = ss[1]; \ +} +#else +#define kdf4(k,i) \ +{ ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+ 4] = ff(ss[0]); ss[1] ^= ss[0]; k[4*(i)+ 5] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ff(ss[2]); ss[3] ^= ss[2]; k[4*(i)+ 7] = ff(ss[3]); \ +} +#define kd4(k,i) \ +{ ss[4] = ls_box(ss[3],3) ^ rcon_tab[i]; \ + ss[0] ^= ss[4]; ss[4] = ff(ss[4]); k[4*(i)+ 4] = ss[4] ^= k[4*(i)]; \ + ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[4] ^= k[4*(i)+ 1]; \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[4] ^= k[4*(i)+ 2]; \ + ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[4] ^= k[4*(i)+ 3]; \ +} +#define kdl4(k,i) \ +{ ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; k[4*(i)+ 4] = ss[0]; ss[1] ^= ss[0]; k[4*(i)+ 5] = ss[1]; \ + ss[2] ^= ss[1]; k[4*(i)+ 6] = ss[2]; ss[3] ^= ss[2]; k[4*(i)+ 7] = ss[3]; \ +} +#endif + +#define kdf6(k,i) \ +{ ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 6] = ff(ss[0]); ss[1] ^= ss[0]; k[6*(i)+ 7] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ff(ss[2]); ss[3] ^= ss[2]; k[6*(i)+ 9] = ff(ss[3]); \ + ss[4] ^= ss[3]; k[6*(i)+10] = ff(ss[4]); ss[5] ^= ss[4]; k[6*(i)+11] = ff(ss[5]); \ +} +#define kd6(k,i) \ +{ ss[6] = ls_box(ss[5],3) ^ rcon_tab[i]; \ + ss[0] ^= ss[6]; ss[6] = ff(ss[6]); k[6*(i)+ 6] = ss[6] ^= k[6*(i)]; \ + ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[6] ^= k[6*(i)+ 1]; \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[6] ^= k[6*(i)+ 2]; \ + ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[6] ^= k[6*(i)+ 3]; \ + ss[4] ^= ss[3]; k[6*(i)+10] = ss[6] ^= k[6*(i)+ 4]; \ + ss[5] ^= ss[4]; k[6*(i)+11] = ss[6] ^= k[6*(i)+ 5]; \ +} +#define kdl6(k,i) \ +{ ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; k[6*(i)+ 6] = ss[0]; ss[1] ^= ss[0]; k[6*(i)+ 7] = ss[1]; \ + ss[2] ^= ss[1]; k[6*(i)+ 8] = ss[2]; ss[3] ^= ss[2]; k[6*(i)+ 9] = ss[3]; \ +} + +#define kdf8(k,i) \ +{ ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 8] = ff(ss[0]); ss[1] ^= ss[0]; k[8*(i)+ 9] = ff(ss[1]); \ + ss[2] ^= ss[1]; k[8*(i)+10] = ff(ss[2]); ss[3] ^= ss[2]; k[8*(i)+11] = ff(ss[3]); \ + ss[4] ^= ls_box(ss[3],0); k[8*(i)+12] = ff(ss[4]); ss[5] ^= ss[4]; k[8*(i)+13] = ff(ss[5]); \ + ss[6] ^= ss[5]; k[8*(i)+14] = ff(ss[6]); ss[7] ^= ss[6]; k[8*(i)+15] = ff(ss[7]); \ +} +#define kd8(k,i) \ +{ uint32_t g = ls_box(ss[7],3) ^ rcon_tab[i]; \ + ss[0] ^= g; g = ff(g); k[8*(i)+ 8] = g ^= k[8*(i)]; \ + ss[1] ^= ss[0]; k[8*(i)+ 9] = g ^= k[8*(i)+ 1]; \ + ss[2] ^= ss[1]; k[8*(i)+10] = g ^= k[8*(i)+ 2]; \ + ss[3] ^= ss[2]; k[8*(i)+11] = g ^= k[8*(i)+ 3]; \ + g = ls_box(ss[3],0); \ + ss[4] ^= g; g = ff(g); k[8*(i)+12] = g ^= k[8*(i)+ 4]; \ + ss[5] ^= ss[4]; k[8*(i)+13] = g ^= k[8*(i)+ 5]; \ + ss[6] ^= ss[5]; k[8*(i)+14] = g ^= k[8*(i)+ 6]; \ + ss[7] ^= ss[6]; k[8*(i)+15] = g ^= k[8*(i)+ 7]; \ +} +#define kdl8(k,i) \ +{ ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; k[8*(i)+ 8] = ss[0]; ss[1] ^= ss[0]; k[8*(i)+ 9] = ss[1]; \ + ss[2] ^= ss[1]; k[8*(i)+10] = ss[2]; ss[3] ^= ss[2]; k[8*(i)+11] = ss[3]; \ +} + +aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ uint32_t ss[8]; + d_vars + +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + cx->n_blk = (cx->n_blk & ~3U) | 2; + + cx->k_sch[0] = ss[0] = word_in(in_key ); + cx->k_sch[1] = ss[1] = word_in(in_key + 4); + cx->k_sch[2] = ss[2] = word_in(in_key + 8); + cx->k_sch[3] = ss[3] = word_in(in_key + 12); + +#if (BLOCK_SIZE == 16) && (DEC_UNROLL != NONE) + + switch(klen) + { + case 16: kdf4(cx->k_sch, 0); kd4(cx->k_sch, 1); + kd4(cx->k_sch, 2); kd4(cx->k_sch, 3); + kd4(cx->k_sch, 4); kd4(cx->k_sch, 5); + kd4(cx->k_sch, 6); kd4(cx->k_sch, 7); + kd4(cx->k_sch, 8); kdl4(cx->k_sch, 9); + cx->n_rnd = 10; break; + case 24: ss[4] = word_in(in_key + 16); + cx->k_sch[4] = ff(ss[4]); + ss[5] = word_in(in_key + 20); + cx->k_sch[5] = ff(ss[5]); + kdf6(cx->k_sch, 0); kd6(cx->k_sch, 1); + kd6(cx->k_sch, 2); kd6(cx->k_sch, 3); + kd6(cx->k_sch, 4); kd6(cx->k_sch, 5); + kd6(cx->k_sch, 6); kdl6(cx->k_sch, 7); + cx->n_rnd = 12; break; + case 32: ss[4] = word_in(in_key + 16); + cx->k_sch[4] = ff(ss[4]); + ss[5] = word_in(in_key + 20); + cx->k_sch[5] = ff(ss[5]); + ss[6] = word_in(in_key + 24); + cx->k_sch[6] = ff(ss[6]); + ss[7] = word_in(in_key + 28); + cx->k_sch[7] = ff(ss[7]); + kdf8(cx->k_sch, 0); kd8(cx->k_sch, 1); + kd8(cx->k_sch, 2); kd8(cx->k_sch, 3); + kd8(cx->k_sch, 4); kd8(cx->k_sch, 5); + kdl8(cx->k_sch, 6); + cx->n_rnd = 14; break; + default: cx->n_rnd = 0; return aes_bad; + } +#else + { uint32_t i, l; + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + l = (nc * cx->n_rnd + nc - 1) / (klen >> 2); + + switch(klen) + { + case 16: + for(i = 0; i < l; ++i) + ke4(cx->k_sch, i); + break; + case 24: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ke6(cx->k_sch, i); + break; + case 32: cx->k_sch[4] = ss[4] = word_in(in_key + 16); + cx->k_sch[5] = ss[5] = word_in(in_key + 20); + cx->k_sch[6] = ss[6] = word_in(in_key + 24); + cx->k_sch[7] = ss[7] = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ke8(cx->k_sch, i); + break; + default: cx->n_rnd = 0; return aes_bad; + } +#if (DEC_ROUND != NO_TABLES) + for(i = nc; i < nc * cx->n_rnd; ++i) + cx->k_sch[i] = inv_mcol(cx->k_sch[i]); +#endif + } +#endif + + return aes_good; +} + +#endif diff --git a/src/lib/crypto/builtin/aes/aeskeypp.c b/src/lib/crypto/builtin/aes/aeskeypp.c new file mode 100644 index 000000000..89fd9006d --- /dev/null +++ b/src/lib/crypto/builtin/aes/aeskeypp.c @@ -0,0 +1,399 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 21/01/2002 + + This file contains the code for implementing the key schedule for AES + (Rijndael) for block and key sizes of 16, 20, 24, 28 and 32 bytes. +*/ + +#include "aesopt.h" + +/* Subroutine to set the block size (if variable) in bytes, legal + values being 16, 24 and 32. +*/ + +#if !defined(BLOCK_SIZE) && defined(SET_BLOCK_LENGTH) + +/* Subroutine to set the block size (if variable) in bytes, legal + values being 16, 24 and 32. +*/ + +aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]) +{ +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + + if((blen & 3) || blen < 16 || blen > 32) + { + cx->n_blk = 0; return aes_bad; + } + + cx->n_blk = blen; + return aes_good; +} + +#endif + +/* Initialise the key schedule from the user supplied key. The key + length is now specified in bytes - 16, 24 or 32 as appropriate. + This corresponds to bit lengths of 128, 192 and 256 bits, and + to Nk values of 4, 6 and 8 respectively. + + The following macros implement a single cycle in the key + schedule generation process. The number of cycles needed + for each cx->n_blk and nk value is: + + nk = 4 5 6 7 8 + ------------------------------ + cx->n_blk = 4 10 9 8 7 7 + cx->n_blk = 5 14 11 10 9 9 + cx->n_blk = 6 19 15 12 11 11 + cx->n_blk = 7 21 19 16 13 14 + cx->n_blk = 8 29 23 19 17 14 +*/ + +/* Initialise the key schedule from the user supplied key. The key + length is now specified in bytes - 16, 20, 24, 28 or 32 as + appropriate. This corresponds to bit lengths of 128, 160, 192, + 224 and 256 bits, and to Nk values of 4, 5, 6, 7 & 8 respectively. + */ + +#define mx(t,f) (*t++ = inv_mcol(*f),f++) +#define cp(t,f) *t++ = *f++ + +#if BLOCK_SIZE == 16 +#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s) +#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s) +#elif BLOCK_SIZE == 20 +#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ + cp(d,s) +#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ + mx(d,s) +#elif BLOCK_SIZE == 24 +#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ + cp(d,s); cp(d,s) +#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ + mx(d,s); mx(d,s) +#elif BLOCK_SIZE == 28 +#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ + cp(d,s); cp(d,s); cp(d,s) +#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ + mx(d,s); mx(d,s); mx(d,s) +#elif BLOCK_SIZE == 32 +#define cpy(d,s) cp(d,s); cp(d,s); cp(d,s); cp(d,s); \ + cp(d,s); cp(d,s); cp(d,s); cp(d,s) +#define mix(d,s) mx(d,s); mx(d,s); mx(d,s); mx(d,s); \ + mx(d,s); mx(d,s); mx(d,s); mx(d,s) +#else + +#define cpy(d,s) \ +switch(nc) \ +{ case 8: cp(d,s); \ + case 7: cp(d,s); \ + case 6: cp(d,s); \ + case 5: cp(d,s); \ + case 4: cp(d,s); cp(d,s); \ + cp(d,s); cp(d,s); \ +} + +#define mix(d,s) \ +switch(nc) \ +{ case 8: mx(d,s); \ + case 7: mx(d,s); \ + case 6: mx(d,s); \ + case 5: mx(d,s); \ + case 4: mx(d,s); mx(d,s); \ + mx(d,s); mx(d,s); \ +} + +#endif + +/* The following macros implement a single cycle in the key + schedule generation process. The number of cycles needed + for each cx->n_blk and nk value is: + + nk = 4 5 6 7 8 + ----------------------- + cx->n_blk = 4 10 9 8 7 7 + cx->n_blk = 5 14 11 10 9 9 + cx->n_blk = 6 19 15 12 11 11 + cx->n_blk = 7 21 19 16 13 14 + cx->n_blk = 8 29 23 19 17 14 +*/ + +#define ks4(i) \ +{ p ^= ls_box(s,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ + cx->k_sch[4*(i)+4] = p; \ + cx->k_sch[4*(i)+5] = q; \ + cx->k_sch[4*(i)+6] = r; \ + cx->k_sch[4*(i)+7] = s; \ +} + +#define ks5(i) \ +{ p ^= ls_box(t,3) ^ rcon_tab[i]; q ^= p; \ + r ^= q; s ^= r; t ^= s; \ + cx->k_sch[5*(i)+ 5] = p; \ + cx->k_sch[5*(i)+ 6] = q; \ + cx->k_sch[5*(i)+ 7] = r; \ + cx->k_sch[5*(i)+ 8] = s; \ + cx->k_sch[5*(i)+ 9] = t; \ +} + +#define ks6(i) \ +{ p ^= ls_box(u,3) ^ rcon_tab[i]; q ^= p; \ + r ^= q; s ^= r; t ^= s; u ^= t; \ + cx->k_sch[6*(i)+ 6] = p; \ + cx->k_sch[6*(i)+ 7] = q; \ + cx->k_sch[6*(i)+ 8] = r; \ + cx->k_sch[6*(i)+ 9] = s; \ + cx->k_sch[6*(i)+10] = t; \ + cx->k_sch[6*(i)+11] = u; \ +} + +#define ks7(i) \ +{ p ^= ls_box(v,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ + t ^= ls_box(s,0); u ^= t; v ^= u; \ + cx->k_sch[7*(i)+ 7] = p; \ + cx->k_sch[7*(i)+ 8] = q; \ + cx->k_sch[7*(i)+ 9] = r; \ + cx->k_sch[7*(i)+10] = s; \ + cx->k_sch[7*(i)+11] = t; \ + cx->k_sch[7*(i)+12] = u; \ + cx->k_sch[7*(i)+13] = v; \ +} + +#define ks8(i) \ +{ p ^= ls_box(w,3) ^ rcon_tab[i]; q ^= p; r ^= q; s ^= r; \ + t ^= ls_box(s,0); u ^= t; v ^= u; w ^= v; \ + cx->k_sch[8*(i)+ 8] = p; \ + cx->k_sch[8*(i)+ 9] = q; \ + cx->k_sch[8*(i)+10] = r; \ + cx->k_sch[8*(i)+11] = s; \ + cx->k_sch[8*(i)+12] = t; \ + cx->k_sch[8*(i)+13] = u; \ + cx->k_sch[8*(i)+14] = v; \ + cx->k_sch[8*(i)+15] = w; \ +} + +#if defined(ENCRYPTION_KEY_SCHEDULE) + +aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ uint32_t i,p,q,r,s,t,u,v,w; + +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + cx->n_blk = (cx->n_blk & ~3) | 1; + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + + cx->k_sch[0] = p = word_in(in_key ); + cx->k_sch[1] = q = word_in(in_key + 4); + cx->k_sch[2] = r = word_in(in_key + 8); + cx->k_sch[3] = s = word_in(in_key + 12); + +#if BLOCK_SIZE == 16 && defined(UNROLL) + + switch(klen >> 2) + { + case 4: ks4(0); ks4(1); ks4(2); ks4(3); + ks4(4); ks4(5); ks4(6); ks4(7); + ks4(8); ks4(9); + cx->n_rnd = 10; break; + case 5: cx->k_sch[4] = t = word_in(in_key + 16); + ks5(0); ks5(1); ks5(2); ks5(3); + ks5(4); ks5(5); ks5(6); ks5(7); + ks5(8); + cx->n_rnd = 11; break; + case 6: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + ks6(0); ks6(1); ks6(2); ks6(3); + ks6(4); ks6(5); ks6(6); ks6(7); + cx->n_rnd = 12; break; + case 7: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + ks7(0); ks7(1); ks7(2); ks7(3); + ks7(4); ks7(5); ks7(6); + cx->n_rnd = 13; break; + case 8: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + cx->k_sch[7] = w = word_in(in_key + 28); + ks8(0); ks8(1); ks8(2); ks8(3); + ks8(4); ks8(5); ks8(6); + cx->n_rnd = 14; break; + default:cx->n_rnd = 0; return aes_bad; + } +#else + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + { + uint32_t l = (nc * (cx->n_rnd + 1) - 1) / (klen >> 2); + switch(klen >> 2) + { + case 4: for(i = 0; i < l; ++i) + ks4(i); + break; + case 5: cx->k_sch[4] = t = word_in(in_key + 16); + for(i = 0; i < l; ++i) + ks5(i); + break; + case 6: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ks6(i); + break; + case 7: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + for(i = 0; i < l; ++i) + ks7(i); + break; + case 8: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + cx->k_sch[7] = w = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ks8(i); + break; + } + } +#endif + + return aes_good; +} + +#endif + +#if defined(DECRYPTION_KEY_SCHEDULE) + +aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]) +{ uint32_t i,p,q,r,s,t,u,v,w; + dec_imvars + +#if !defined(FIXED_TABLES) + if(!tab_init) gen_tabs(); +#endif + +#if !defined(BLOCK_SIZE) + if(!cx->n_blk) cx->n_blk = 16; +#else + cx->n_blk = BLOCK_SIZE; +#endif + + cx->n_blk = (cx->n_blk & ~3) | 2; + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + + cx->k_sch[0] = p = word_in(in_key ); + cx->k_sch[1] = q = word_in(in_key + 4); + cx->k_sch[2] = r = word_in(in_key + 8); + cx->k_sch[3] = s = word_in(in_key + 12); + +#if BLOCK_SIZE == 16 && defined(UNROLL) + + switch(klen >> 2) + { + case 4: ks4(0); ks4(1); ks4(2); ks4(3); + ks4(4); ks4(5); ks4(6); ks4(7); + ks4(8); ks4(9); + cx->n_rnd = 10; break; + case 5: cx->k_sch[4] = t = word_in(in_key + 16); + ks5(0); ks5(1); ks5(2); ks5(3); + ks5(4); ks5(5); ks5(6); ks5(7); + ks5(8); + cx->n_rnd = 11; break; + case 6: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + ks6(0); ks6(1); ks6(2); ks6(3); + ks6(4); ks6(5); ks6(6); ks6(7); + cx->n_rnd = 12; break; + case 7: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + ks7(0); ks7(1); ks7(2); ks7(3); + ks7(4); ks7(5); ks7(6); + cx->n_rnd = 13; break; + case 8: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + cx->k_sch[7] = w = word_in(in_key + 28); + ks8(0); ks8(1); ks8(2); ks8(3); + ks8(4); ks8(5); ks8(6); + cx->n_rnd = 14; break; + default:cx->n_rnd = 0; return aes_bad; + } +#else + cx->n_rnd = ((klen >> 2) > nc ? (klen >> 2) : nc) + 6; + { + uint32_t l = (nc * (cx->n_rnd + 1) - 1) / (klen >> 2); + switch(klen >> 2) + { + case 4: for(i = 0; i < l; ++i) + ks4(i); + break; + case 5: cx->k_sch[4] = t = word_in(in_key + 16); + for(i = 0; i < l; ++i) + ks5(i); + break; + case 6: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + for(i = 0; i < l; ++i) + ks6(i); + break; + case 7: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + for(i = 0; i < l; ++i) + ks7(i); + break; + case 8: cx->k_sch[4] = t = word_in(in_key + 16); + cx->k_sch[5] = u = word_in(in_key + 20); + cx->k_sch[6] = v = word_in(in_key + 24); + cx->k_sch[7] = w = word_in(in_key + 28); + for(i = 0; i < l; ++i) + ks8(i); + break; + } + } +#endif + +#if (DEC_ROUND != NO_TABLES) + for(i = nc; i < nc * cx->n_rnd; ++i) + cx->k_sch[i] = inv_mcol(cx->k_sch[i]); +#endif + + return aes_good; +} + +#endif diff --git a/src/lib/crypto/builtin/aes/aesopt.h b/src/lib/crypto/builtin/aes/aesopt.h new file mode 100644 index 000000000..006fbb3eb --- /dev/null +++ b/src/lib/crypto/builtin/aes/aesopt.h @@ -0,0 +1,851 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 07/02/2002 + + This file contains the compilation options for AES (Rijndael) and code + that is common across encryption, key scheduling and table generation. + + + OPERATION + + These source code files implement the AES algorithm Rijndael designed by + Joan Daemen and Vincent Rijmen. The version in aes.c is designed for + block and key sizes of 128, 192 and 256 bits (16, 24 and 32 bytes) while + that in aespp.c provides for block and keys sizes of 128, 160, 192, 224 + and 256 bits (16, 20, 24, 28 and 32 bytes). This file is a common header + file for these two implementations and for aesref.c, which is a reference + implementation. + + This version is designed for flexibility and speed using operations on + 32-bit words rather than operations on bytes. It provides aes_both fixed + and dynamic block and key lengths and can also run with either big or + little endian internal byte order (see aes.h). It inputs block and key + lengths in bytes with the legal values being 16, 24 and 32 for aes.c and + 16, 20, 24, 28 and 32 for aespp.c + + THE CIPHER INTERFACE + + uint8_t (an unsigned 8-bit type) + uint32_t (an unsigned 32-bit type) + aes_fret (a signed 16 bit type for function return values) + aes_good (value != 0, a good return) + aes_bad (value == 0, an error return) + struct aes_ctx (structure for the cipher encryption context) + struct aes_ctx (structure for the cipher decryption context) + aes_rval the function return type (aes_fret if not DLL) + + C subroutine calls: + + aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); + aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); + aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); + + aes_rval aes_dec_len(unsigned int blen, aes_ctx cx[1]); + aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); + aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); + + IMPORTANT NOTE: If you are using this C interface and your compiler does + not set the memory used for objects to zero before use, you will need to + ensure that cx.s_flg is set to zero before using these subroutine calls. + + C++ aes class subroutines: + + class AESclass for encryption + class AESclass for decryption + + aes_rval len(unsigned int blen = 16); + aes_rval key(const unsigned char in_key[], unsigned int klen); + aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); + + aes_rval len(unsigned int blen = 16); + aes_rval key(const unsigned char in_key[], unsigned int klen); + aes_rval blk(const unsigned char in_blk[], unsigned char out_blk[]); + + The block length inputs to set_block and set_key are in numbers of + BYTES, not bits. The calls to subroutines must be made in the above + order but multiple calls can be made without repeating earlier calls + if their parameters have not changed. If the cipher block length is + variable but set_blk has not been called before cipher operations a + value of 16 is assumed (that is, the AES block size). In contrast to + earlier versions the block and key length parameters are now checked + for correctness and the encryption and decryption routines check to + ensure that an appropriate key has been set before they are called. + + COMPILATION + + The files used to provide AES (Rijndael) are + + a. aes.h for the definitions needed for use in C. + b. aescpp.h for the definitions needed for use in C++. + c. aesopt.h for setting compilation options (also includes common + code). + d. aescrypt.c for encryption and decrytpion, or + e. aescrypt.asm for encryption and decryption using assembler code. + f. aeskey.c for key scheduling. + g. aestab.c for table loading or generation. + h. uitypes.h for defining fixed length unsigned integers. + + The assembler code uses the NASM assembler. The above files provice + block and key lengths of 16, 24 and 32 bytes (128, 192 and 256 bits). + If aescrypp.c and aeskeypp.c are used instead of aescrypt.c and + aeskey.c respectively, the block and key lengths can then be 16, 20, + 24, 28 or 32 bytes. However this code has not been optimised to the + same extent and is hence slower (esepcially for the AES block size + of 16 bytes). + + To compile AES (Rijndael) for use in C code use aes.h and exclude + the AES_DLL define in aes.h + + To compile AES (Rijndael) for use in in C++ code use aescpp.h and + exclude the AES_DLL define in aes.h + + To compile AES (Rijndael) in C as a Dynamic Link Library DLL) use + aes.h, include the AES_DLL define and compile the DLL. If using + the test files to test the DLL, exclude aes.c from the test build + project and compile it with the same defines as used for the DLL + (ensure that the DLL path is correct) + + CONFIGURATION OPTIONS (here and in aes.h) + + a. define BLOCK_SIZE in aes.h to set the cipher block size (16, 24 + or 32 for the standard code, or 16, 20, 24, 28 or 32 for the + extended code) or leave this undefined for dynamically variable + block size (this will result in much slower code). + b. set AES_DLL in aes.h if AES (Rijndael) is to be compiled as a DLL + c. You may need to set PLATFORM_BYTE_ORDER to define the byte order. + d. If you want the code to run in a specific internal byte order, then + INTERNAL_BYTE_ORDER must be set accordingly. + e. set other configuration options decribed below. +*/ + +#ifndef _AESOPT_H +#define _AESOPT_H + +/* START OF CONFIGURATION OPTIONS + + USE OF DEFINES + + Later in this section there are a number of defines that control + the operation of the code. In each section, the purpose of each + define is explained so that the relevant form can be included or + excluded by setting either 1's or 0's respectively on the branches + of the related #if clauses. +*/ + +#include "autoconf.h" + +/* 1. PLATFORM SPECIFIC INCLUDES */ + +#if /* defined(__GNUC__) || */ defined(__GNU_LIBRARY__) +# include +# include +#elif defined(__CRYPTLIB__) +# if defined( INC_ALL ) +# include "crypt.h" +# elif defined( INC_CHILD ) +# include "../crypt.h" +# else +# include "crypt.h" +# endif +# if defined(DATA_LITTLEENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# else +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +#elif defined(_MSC_VER) +# include +#elif defined(__m68k__) && defined(__palmos__) +# include /* defines BIG_ENDIAN */ +#elif defined(_MIPSEB) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +#elif defined(_MIPSEL) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#elif defined(_WIN32) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#elif !defined(_WIN32) +# include +# if defined(HAVE_ENDIAN_H) +# include +# elif defined(HAVE_MACHINE_ENDIAN_H) +# include +# else +# include +# endif +#endif + +/* 2. BYTE ORDER IN 32-BIT WORDS + + To obtain the highest speed on processors with 32-bit words, this code + needs to determine the order in which bytes are packed into such words. + The following block of code is an attempt to capture the most obvious + ways in which various environemnts specify heir endian definitions. It + may well fail, in which case the definitions will need to be set by + editing at the points marked **** EDIT HERE IF NECESSARY **** below. +*/ +#define AES_LITTLE_ENDIAN 1234 /* byte 0 is least significant (i386) */ +#define AES_BIG_ENDIAN 4321 /* byte 0 is most significant (mc68k) */ + +#if !defined(PLATFORM_BYTE_ORDER) +#if defined(LITTLE_ENDIAN) || defined(BIG_ENDIAN) +# if defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# if defined(BYTE_ORDER) +# if (BYTE_ORDER == LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif (BYTE_ORDER == BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +# endif +# elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif !defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +#elif defined(_LITTLE_ENDIAN) || defined(_BIG_ENDIAN) +# if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# if defined(_BYTE_ORDER) +# if (_BYTE_ORDER == _LITTLE_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif (_BYTE_ORDER == _BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +# endif +# elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +# elif !defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) +# define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +# endif +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#elif 0 /* **** EDIT HERE IF NECESSARY **** */ +#define PLATFORM_BYTE_ORDER AES_BIG_ENDIAN +#elif 1 +#define PLATFORM_BYTE_ORDER AES_LITTLE_ENDIAN +#define UNKNOWN_BYTE_ORDER /* we're guessing */ +#endif +#endif + +/* 3. ASSEMBLER SUPPORT + + If the assembler code is used for encryption and decryption this file only + provides key scheduling so the following defines are used +*/ +#ifdef AES_ASM +#define ENCRYPTION_KEY_SCHEDULE +#define DECRYPTION_KEY_SCHEDULE +#endif + +/* 4. FUNCTIONS REQUIRED + + This implementation provides five main subroutines which provide for + setting block length, setting encryption and decryption keys and for + encryption and decryption. When the assembler code is not being used + the following definition blocks allow the selection of the routines + that are to be included in the compilation. +*/ +#if 1 +#ifndef AES_ASM +#define SET_BLOCK_LENGTH +#endif +#endif + +#if 1 +#ifndef AES_ASM +#define ENCRYPTION_KEY_SCHEDULE +#endif +#endif + +#if 1 +#ifndef AES_ASM +#define DECRYPTION_KEY_SCHEDULE +#endif +#endif + +#if 1 +#ifndef AES_ASM +#define ENCRYPTION +#endif +#endif + +#if 1 +#ifndef AES_ASM +#define DECRYPTION +#endif +#endif + +/* 5. BYTE ORDER WITHIN 32 BIT WORDS + + The fundamental data processing units in Rijndael are 8-bit bytes. The + input, output and key input are all enumerated arrays of bytes in which + bytes are numbered starting at zero and increasing to one less than the + number of bytes in the array in question. This enumeration is only used + for naming bytes and does not imply any adjacency or order relationship + from one byte to another. When these inputs and outputs are considered + as bit sequences, bits 8*n to 8*n+7 of the bit sequence are mapped to + byte[n] with bit 8n+i in the sequence mapped to bit 7-i within the byte. + In this implementation bits are numbered from 0 to 7 starting at the + numerically least significant end of each byte (bit n represents 2^n). + + However, Rijndael can be implemented more efficiently using 32-bit + words by packing bytes into words so that bytes 4*n to 4*n+3 are placed + into word[n]. While in principle these bytes can be assembled into words + in any positions, this implementation only supports the two formats in + which bytes in adjacent positions within words also have adjacent byte + numbers. This order is called big-endian if the lowest numbered bytes + in words have the highest numeric significance and little-endian if the + opposite applies. + + This code can work in either order irrespective of the order used by the + machine on which it runs. Normally the internal byte order will be set + to the order of the processor on which the code is to be run but this + define can be used to reverse this in special situations +*/ +#if 1 +#define INTERNAL_BYTE_ORDER PLATFORM_BYTE_ORDER +#elif defined(AES_LITTLE_ENDIAN) +#define INTERNAL_BYTE_ORDER AES_LITTLE_ENDIAN +#elif defined(AES_BIG_ENDIAN) +#define INTERNAL_BYTE_ORDER AES_BIG_ENDIAN +#endif + +/* 6. FAST INPUT/OUTPUT OPERATIONS. + + On some machines it is possible to improve speed by transferring the + bytes in the input and output arrays to and from the internal 32-bit + variables by addressing these arrays as if they are arrays of 32-bit + words. On some machines this will always be possible but there may + be a large performance penalty if the byte arrays are not aligned on + the normal word boundaries. On other machines this technique will + lead to memory access errors when such 32-bit word accesses are not + properly aligned. The option SAFE_IO avoids such problems but will + often be slower on those machines that support misaligned access + (especially so if care is taken to align the input and output byte + arrays on 32-bit word boundaries). If SAFE_IO is not defined it is + assumed that access to byte arrays as if they are arrays of 32-bit + words will not cause problems when such accesses are misaligned. +*/ +#if 1 +#define SAFE_IO +#endif + +/* + * If PLATFORM_BYTE_ORDER does not match the actual machine byte + * order, the fast word-access code will cause incorrect results. + * Therefore, SAFE_IO is required when the byte order is unknown. + */ +#if !defined(SAFE_IO) && defined(UNKNOWN_BYTE_ORDER) +# error "SAFE_IO must be defined if machine byte order is unknown." +#endif + +/* 7. LOOP UNROLLING + + The code for encryption and decrytpion cycles through a number of rounds + that can be implemented either in a loop or by expanding the code into a + long sequence of instructions, the latter producing a larger program but + one that will often be much faster. The latter is called loop unrolling. + There are also potential speed advantages in expanding two iterations in + a loop with half the number of iterations, which is called partial loop + unrolling. The following options allow partial or full loop unrolling + to be set independently for encryption and decryption +*/ +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) +#define ENC_UNROLL FULL +#elif 0 +#define ENC_UNROLL PARTIAL +#else +#define ENC_UNROLL NONE +#endif + +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) +#define DEC_UNROLL FULL +#elif 0 +#define DEC_UNROLL PARTIAL +#else +#define DEC_UNROLL NONE +#endif + +/* 8. FIXED OR DYNAMIC TABLES + + When this section is included the tables used by the code are compiled + statically into the binary file. Otherwise they are computed once when + the code is first used. +*/ +#if 1 +#define FIXED_TABLES +#endif + +/* 9. FAST FINITE FIELD OPERATIONS + + If this section is included, tables are used to provide faster finite + field arithmetic (this has no effect if FIXED_TABLES is defined). +*/ +#if 1 +#define FF_TABLES +#endif + +/* 10. INTERNAL STATE VARIABLE FORMAT + + The internal state of Rijndael is stored in a number of local 32-bit + word varaibles which can be defined either as an array or as individual + names variables. Include this section if you want to store these local + varaibles in arrays. Otherwise individual local variables will be used. +*/ +#if 1 +#define ARRAYS +#endif + +/* In this implementation the columns of the state array are each held in + 32-bit words. The state array can be held in various ways: in an array + of words, in a number of individual word variables or in a number of + processor registers. The following define maps a variable name x and + a column number c to the way the state array variable is to be held. + The first define below maps the state into an array x[c] whereas the + second form maps the state into a number of individual variables x0, + x1, etc. Another form could map individual state colums to machine + register names. +*/ + +#if defined(ARRAYS) +#define s(x,c) x[c] +#else +#define s(x,c) x##c +#endif + +/* 11. VARIABLE BLOCK SIZE SPEED + + This section is only relevant if you wish to use the variable block + length feature of the code. Include this section if you place more + emphasis on speed rather than code size. +*/ +#if 1 +#define FAST_VARIABLE +#endif + +/* 12. INTERNAL TABLE CONFIGURATION + + This cipher proceeds by repeating in a number of cycles known as 'rounds' + which are implemented by a round function which can optionally be speeded + up using tables. The basic tables are each 256 32-bit words, with either + one or four tables being required for each round function depending on + how much speed is required. The encryption and decryption round functions + are different and the last encryption and decrytpion round functions are + different again making four different round functions in all. + + This means that: + 1. Normal encryption and decryption rounds can each use either 0, 1 + or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + 2. The last encryption and decryption rounds can also use either 0, 1 + or 4 tables and table spaces of 0, 1024 or 4096 bytes each. + + Include or exclude the appropriate definitions below to set the number + of tables used by this implementation. +*/ + +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the normal encryption round */ +#define ENC_ROUND FOUR_TABLES +#elif 0 +#define ENC_ROUND ONE_TABLE +#else +#define ENC_ROUND NO_TABLES +#endif + +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the last encryption round */ +#define LAST_ENC_ROUND FOUR_TABLES +#elif 0 +#define LAST_ENC_ROUND ONE_TABLE +#else +#define LAST_ENC_ROUND NO_TABLES +#endif + +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the normal decryption round */ +#define DEC_ROUND FOUR_TABLES +#elif 0 +#define DEC_ROUND ONE_TABLE +#else +#define DEC_ROUND NO_TABLES +#endif + +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) /* set tables for the last decryption round */ +#define LAST_DEC_ROUND FOUR_TABLES +#elif 0 +#define LAST_DEC_ROUND ONE_TABLE +#else +#define LAST_DEC_ROUND NO_TABLES +#endif + +/* The decryption key schedule can be speeded up with tables in the same + way that the round functions can. Include or exclude the following + defines to set this requirement. +*/ +#if !defined(CONFIG_SMALL) || defined(CONFIG_SMALL_NO_CRYPTO) +#define KEY_SCHED FOUR_TABLES +#elif 0 +#define KEY_SCHED ONE_TABLE +#else +#define KEY_SCHED NO_TABLES +#endif + +/* END OF CONFIGURATION OPTIONS */ + +#define NO_TABLES 0 /* DO NOT CHANGE */ +#define ONE_TABLE 1 /* DO NOT CHANGE */ +#define FOUR_TABLES 4 /* DO NOT CHANGE */ +#define NONE 0 /* DO NOT CHANGE */ +#define PARTIAL 1 /* DO NOT CHANGE */ +#define FULL 2 /* DO NOT CHANGE */ + +#if defined(BLOCK_SIZE) && ((BLOCK_SIZE & 3) || BLOCK_SIZE < 16 || BLOCK_SIZE > 32) +#error An illegal block size has been specified. +#endif + +#if !defined(BLOCK_SIZE) +#define RC_LENGTH 29 +#else +#define RC_LENGTH 5 * BLOCK_SIZE / 4 - (BLOCK_SIZE == 16 ? 10 : 11) +#endif + +/* Disable at least some poor combinations of options */ + +#if ENC_ROUND == NO_TABLES && LAST_ENC_ROUND != NO_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND NO_TABLES +#elif ENC_ROUND == ONE_TABLE && LAST_ENC_ROUND == FOUR_TABLES +#undef LAST_ENC_ROUND +#define LAST_ENC_ROUND ONE_TABLE +#endif + +#if ENC_ROUND == NO_TABLES && ENC_UNROLL != NONE +#undef ENC_UNROLL +#define ENC_UNROLL NONE +#endif + +#if DEC_ROUND == NO_TABLES && LAST_DEC_ROUND != NO_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND NO_TABLES +#elif DEC_ROUND == ONE_TABLE && LAST_DEC_ROUND == FOUR_TABLES +#undef LAST_DEC_ROUND +#define LAST_DEC_ROUND ONE_TABLE +#endif + +#if DEC_ROUND == NO_TABLES && DEC_UNROLL != NONE +#undef DEC_UNROLL +#define DEC_UNROLL NONE +#endif + +#include "aes.h" + + /* + upr(x,n): rotates bytes within words by n positions, moving bytes to + higher index positions with wrap around into low positions + ups(x,n): moves bytes by n positions to higher index positions in + words but without wrap around + bval(x,n): extracts a byte from a word + */ + +#if (INTERNAL_BYTE_ORDER == AES_LITTLE_ENDIAN) +#if defined(_MSC_VER) +#define upr(x,n) _lrotl((x), 8 * (n)) +#else +#define upr(x,n) (((x) << (8 * (n))) | ((x) >> (32 - 8 * (n)))) +#endif +#define ups(x,n) ((x) << (8 * (n))) +#define bval(x,n) ((uint8_t)((x) >> (8 * (n)))) +#define bytes2word(b0, b1, b2, b3) \ + (((uint32_t)(b3) << 24) | ((uint32_t)(b2) << 16) | ((uint32_t)(b1) << 8) | (b0)) +#endif + +#if (INTERNAL_BYTE_ORDER == AES_BIG_ENDIAN) +#define upr(x,n) (((x) >> (8 * (n))) | ((x) << (32 - 8 * (n)))) +#define ups(x,n) ((x) >> (8 * (n)))) +#define bval(x,n) ((uint8_t)((x) >> (24 - 8 * (n)))) +#define bytes2word(b0, b1, b2, b3) \ + (((uint32_t)(b0) << 24) | ((uint32_t)(b1) << 16) | ((uint32_t)(b2) << 8) | (b3)) +#endif + +#if defined(SAFE_IO) + +#define word_in(x) bytes2word((x)[0], (x)[1], (x)[2], (x)[3]) +#define word_out(x,v) { (x)[0] = bval(v,0); (x)[1] = bval(v,1); \ + (x)[2] = bval(v,2); (x)[3] = bval(v,3); } + +#elif (INTERNAL_BYTE_ORDER == PLATFORM_BYTE_ORDER) + +#define word_in(x) *(uint32_t*)(x) +#define word_out(x,v) *(uint32_t*)(x) = (v) + +#else + +#if !defined(bswap_32) +#if !defined(_MSC_VER) +#define _lrotl(x,n) (((x) << n) | ((x) >> (32 - n))) +#endif +#define bswap_32(x) ((_lrotl((x),8) & 0x00ff00ff) | (_lrotl((x),24) & 0xff00ff00)) +#endif + +#define word_in(x) bswap_32(*(uint32_t*)(x)) +#define word_out(x,v) *(uint32_t*)(x) = bswap_32(v) + +#endif + +/* the finite field modular polynomial and elements */ + +#define WPOLY 0x011b +#define BPOLY 0x1b + +/* multiply four bytes in GF(2^8) by 'x' {02} in parallel */ + +#define m1 0x80808080 +#define m2 0x7f7f7f7f +#define FFmulX(x) ((((x) & m2) << 1) ^ ((((x) & m1) >> 7) * BPOLY)) + +/* The following defines provide alternative definitions of FFmulX that might + give improved performance if a fast 32-bit multiply is not available. Note + that a temporary variable u needs to be defined where FFmulX is used. + +#define FFmulX(x) (u = (x) & m1, u |= (u >> 1), ((x) & m2) << 1) ^ ((u >> 3) | (u >> 6)) +#define m4 (0x01010101 * BPOLY) +#define FFmulX(x) (u = (x) & m1, ((x) & m2) << 1) ^ ((u - (u >> 7)) & m4) +*/ + +/* Work out which tables are needed for the different options */ + +#ifdef AES_ASM +#ifdef ENC_ROUND +#undef ENC_ROUND +#endif +#define ENC_ROUND FOUR_TABLES +#ifdef LAST_ENC_ROUND +#undef LAST_ENC_ROUND +#endif +#define LAST_ENC_ROUND FOUR_TABLES +#ifdef DEC_ROUND +#undef DEC_ROUND +#endif +#define DEC_ROUND FOUR_TABLES +#ifdef LAST_DEC_ROUND +#undef LAST_DEC_ROUND +#endif +#define LAST_DEC_ROUND FOUR_TABLES +#ifdef KEY_SCHED +#undef KEY_SCHED +#define KEY_SCHED FOUR_TABLES +#endif +#endif + +#if defined(ENCRYPTION) || defined(AES_ASM) +#if ENC_ROUND == ONE_TABLE +#define FT1_SET +#elif ENC_ROUND == FOUR_TABLES +#define FT4_SET +#else +#define SBX_SET +#endif +#if LAST_ENC_ROUND == ONE_TABLE +#define FL1_SET +#elif LAST_ENC_ROUND == FOUR_TABLES +#define FL4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif + +#if defined(DECRYPTION) || defined(AES_ASM) +#if DEC_ROUND == ONE_TABLE +#define IT1_SET +#elif DEC_ROUND == FOUR_TABLES +#define IT4_SET +#else +#define ISB_SET +#endif +#if LAST_DEC_ROUND == ONE_TABLE +#define IL1_SET +#elif LAST_DEC_ROUND == FOUR_TABLES +#define IL4_SET +#elif !defined(ISB_SET) +#define ISB_SET +#endif +#endif + +#if defined(ENCRYPTION_KEY_SCHEDULE) || defined(DECRYPTION_KEY_SCHEDULE) +#if KEY_SCHED == ONE_TABLE +#define LS1_SET +#define IM1_SET +#elif KEY_SCHED == FOUR_TABLES +#define LS4_SET +#define IM4_SET +#elif !defined(SBX_SET) +#define SBX_SET +#endif +#endif + +#ifdef FIXED_TABLES +#define prefx extern const +#else +#define prefx extern +extern uint8_t tab_init; +void gen_tabs(void); +#endif + +prefx uint32_t rcon_tab[29]; + +#ifdef SBX_SET +prefx uint8_t s_box[256]; +#endif + +#ifdef ISB_SET +prefx uint8_t inv_s_box[256]; +#endif + +#ifdef FT1_SET +prefx uint32_t ft_tab[256]; +#endif + +#ifdef FT4_SET +prefx uint32_t ft_tab[4][256]; +#endif + +#ifdef FL1_SET +prefx uint32_t fl_tab[256]; +#endif + +#ifdef FL4_SET +prefx uint32_t fl_tab[4][256]; +#endif + +#ifdef IT1_SET +prefx uint32_t it_tab[256]; +#endif + +#ifdef IT4_SET +prefx uint32_t it_tab[4][256]; +#endif + +#ifdef IL1_SET +prefx uint32_t il_tab[256]; +#endif + +#ifdef IL4_SET +prefx uint32_t il_tab[4][256]; +#endif + +#ifdef LS1_SET +#ifdef FL1_SET +#undef LS1_SET +#else +prefx uint32_t ls_tab[256]; +#endif +#endif + +#ifdef LS4_SET +#ifdef FL4_SET +#undef LS4_SET +#else +prefx uint32_t ls_tab[4][256]; +#endif +#endif + +#ifdef IM1_SET +prefx uint32_t im_tab[256]; +#endif + +#ifdef IM4_SET +prefx uint32_t im_tab[4][256]; +#endif + +/* Set the number of columns in nc. Note that it is important */ +/* that nc is a constant which is known at compile time if the */ +/* highest speed version of the code is needed */ + +#if defined(BLOCK_SIZE) +#define nc (BLOCK_SIZE >> 2) +#else +#define nc (cx->n_blk >> 2) +#endif + +/* generic definitions of Rijndael macros that use of tables */ + +#define no_table(x,box,vf,rf,c) bytes2word( \ + box[bval(vf(x,0,c),rf(0,c))], \ + box[bval(vf(x,1,c),rf(1,c))], \ + box[bval(vf(x,2,c),rf(2,c))], \ + box[bval(vf(x,3,c),rf(3,c))]) + +#define one_table(x,op,tab,vf,rf,c) \ + ( tab[bval(vf(x,0,c),rf(0,c))] \ + ^ op(tab[bval(vf(x,1,c),rf(1,c))],1) \ + ^ op(tab[bval(vf(x,2,c),rf(2,c))],2) \ + ^ op(tab[bval(vf(x,3,c),rf(3,c))],3)) + +#define four_tables(x,tab,vf,rf,c) \ + ( tab[0][bval(vf(x,0,c),rf(0,c))] \ + ^ tab[1][bval(vf(x,1,c),rf(1,c))] \ + ^ tab[2][bval(vf(x,2,c),rf(2,c))] \ + ^ tab[3][bval(vf(x,3,c),rf(3,c))]) + +#define vf1(x,r,c) (x) +#define rf1(r,c) (r) +#define rf2(r,c) ((r-c)&3) + +/* perform forward and inverse column mix operation on four bytes in long word x in */ +/* parallel. NOTE: x must be a simple variable, NOT an expression in these macros. */ + +#define dec_fmvars +#if defined(FM4_SET) /* not currently used */ +#define fwd_mcol(x) four_tables(x,fm_tab,vf1,rf1,0) +#elif defined(FM1_SET) /* not currently used */ +#define fwd_mcol(x) one_table(x,upr,fm_tab,vf1,rf1,0) +#else +#undef dec_fmvars +#define dec_fmvars uint32_t f1, f2; +#define fwd_mcol(x) (f1 = (x), f2 = FFmulX(f1), f2 ^ upr(f1 ^ f2, 3) ^ upr(f1, 2) ^ upr(f1, 1)) +#endif + +#define dec_imvars +#if defined(IM4_SET) +#define inv_mcol(x) four_tables(x,im_tab,vf1,rf1,0) +#elif defined(IM1_SET) +#define inv_mcol(x) one_table(x,upr,im_tab,vf1,rf1,0) +#else +#undef dec_imvars +#define dec_imvars uint32_t f2, f4, f8, f9; +#define inv_mcol(x) \ + (f9 = (x), f2 = FFmulX(f9), f4 = FFmulX(f2), f8 = FFmulX(f4), f9 ^= f8, \ + f2 ^= f4 ^ f8 ^ upr(f2 ^ f9,3) ^ upr(f4 ^ f9,2) ^ upr(f9,1)) +#endif + +#if defined(FL4_SET) +#define ls_box(x,c) four_tables(x,fl_tab,vf1,rf2,c) +#elif defined(LS4_SET) +#define ls_box(x,c) four_tables(x,ls_tab,vf1,rf2,c) +#elif defined(FL1_SET) +#define ls_box(x,c) one_table(x,upr,fl_tab,vf1,rf2,c) +#elif defined(LS1_SET) +#define ls_box(x,c) one_table(x,upr,ls_tab,vf1,rf2,c) +#else +#define ls_box(x,c) no_table(x,s_box,vf1,rf2,c) +#endif + +#endif diff --git a/src/lib/crypto/builtin/aes/aessrc.url b/src/lib/crypto/builtin/aes/aessrc.url new file mode 100644 index 000000000..0758737db --- /dev/null +++ b/src/lib/crypto/builtin/aes/aessrc.url @@ -0,0 +1 @@ +http://fp.gladman.plus.com/cryptography_technology/rijndael/index.htm diff --git a/src/lib/crypto/builtin/aes/aestab.c b/src/lib/crypto/builtin/aes/aestab.c new file mode 100644 index 000000000..7a5d69f7d --- /dev/null +++ b/src/lib/crypto/builtin/aes/aestab.c @@ -0,0 +1,494 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 07/02/2002 +*/ + +#include "aesopt.h" + +#if defined(FIXED_TABLES) || !defined(FF_TABLES) + +/* finite field arithmetic operations */ + +#define f2(x) ((x<<1) ^ (((x>>7) & 1) * WPOLY)) +#define f4(x) ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY)) +#define f8(x) ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \ + ^ (((x>>5) & 4) * WPOLY)) +#define f3(x) (f2(x) ^ x) +#define f9(x) (f8(x) ^ x) +#define fb(x) (f8(x) ^ f2(x) ^ x) +#define fd(x) (f8(x) ^ f4(x) ^ x) +#define fe(x) (f8(x) ^ f4(x) ^ f2(x)) + +#endif + +#if defined(FIXED_TABLES) + +#define sb_data(w) \ + w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\ + w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\ + w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\ + w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\ + w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\ + w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\ + w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\ + w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\ + w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\ + w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\ + w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\ + w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\ + w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\ + w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\ + w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\ + w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\ + w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\ + w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\ + w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\ + w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\ + w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\ + w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\ + w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\ + w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\ + w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\ + w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\ + w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\ + w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\ + w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\ + w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\ + w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\ + w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) + +#define isb_data(w) \ + w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\ + w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\ + w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\ + w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\ + w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\ + w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\ + w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\ + w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\ + w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\ + w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\ + w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\ + w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\ + w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\ + w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\ + w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\ + w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\ + w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\ + w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\ + w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\ + w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\ + w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\ + w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\ + w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\ + w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\ + w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\ + w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\ + w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\ + w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\ + w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\ + w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\ + w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\ + w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d), + +#define mm_data(w) \ + w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\ + w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\ + w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\ + w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\ + w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\ + w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\ + w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\ + w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\ + w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\ + w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\ + w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\ + w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\ + w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\ + w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\ + w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\ + w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\ + w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\ + w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\ + w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\ + w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\ + w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\ + w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\ + w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\ + w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\ + w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\ + w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\ + w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\ + w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\ + w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\ + w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\ + w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\ + w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) + +#define h0(x) (x) + +/* These defines are used to ensure tables are generated in the + right format depending on the internal byte order required +*/ + +#define w0(p) bytes2word(p, 0, 0, 0) +#define w1(p) bytes2word(0, p, 0, 0) +#define w2(p) bytes2word(0, 0, p, 0) +#define w3(p) bytes2word(0, 0, 0, p) + +/* Number of elements required in this table for different + block and key lengths is: + + Rcon Table key length (bytes) + Length 16 20 24 28 32 + --------------------- + block 16 | 10 9 8 7 7 + length 20 | 14 11 10 9 9 + (bytes) 24 | 19 15 12 11 11 + 28 | 24 19 16 13 13 + 32 | 29 23 19 17 14 + + this table can be a table of bytes if the key schedule + code is adjusted accordingly +*/ + +#define u0(p) bytes2word(f2(p), p, p, f3(p)) +#define u1(p) bytes2word(f3(p), f2(p), p, p) +#define u2(p) bytes2word(p, f3(p), f2(p), p) +#define u3(p) bytes2word(p, p, f3(p), f2(p)) + +#define v0(p) bytes2word(fe(p), f9(p), fd(p), fb(p)) +#define v1(p) bytes2word(fb(p), fe(p), f9(p), fd(p)) +#define v2(p) bytes2word(fd(p), fb(p), fe(p), f9(p)) +#define v3(p) bytes2word(f9(p), fd(p), fb(p), fe(p)) + +const uint32_t rcon_tab[29] = +{ + w0(0x01), w0(0x02), w0(0x04), w0(0x08), + w0(0x10), w0(0x20), w0(0x40), w0(0x80), + w0(0x1b), w0(0x36), w0(0x6c), w0(0xd8), + w0(0xab), w0(0x4d), w0(0x9a), w0(0x2f), + w0(0x5e), w0(0xbc), w0(0x63), w0(0xc6), + w0(0x97), w0(0x35), w0(0x6a), w0(0xd4), + w0(0xb3), w0(0x7d), w0(0xfa), w0(0xef), + w0(0xc5) +}; + +#ifdef SBX_SET +const uint8_t s_box[256] = { sb_data(h0) }; +#endif +#ifdef ISB_SET +const uint8_t inv_s_box[256] = { isb_data(h0) }; +#endif + +#ifdef FT1_SET +const uint32_t ft_tab[256] = { sb_data(u0) }; +#endif +#ifdef FT4_SET +const uint32_t ft_tab[4][256] = + { { sb_data(u0) }, { sb_data(u1) }, { sb_data(u2) }, { sb_data(u3) } }; +#endif + +#ifdef FL1_SET +const uint32_t fl_tab[256] = { sb_data(w0) }; +#endif +#ifdef FL4_SET +const uint32_t fl_tab[4][256] = + { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; +#endif + +#ifdef IT1_SET +const uint32_t it_tab[256] = { isb_data(v0) }; +#endif +#ifdef IT4_SET +const uint32_t it_tab[4][256] = + { { isb_data(v0) }, { isb_data(v1) }, { isb_data(v2) }, { isb_data(v3) } }; +#endif + +#ifdef IL1_SET +const uint32_t il_tab[256] = { isb_data(w0) }; +#endif +#ifdef IL4_SET +const uint32_t il_tab[4][256] = + { { isb_data(w0) }, { isb_data(w1) }, { isb_data(w2) }, { isb_data(w3) } }; +#endif + +#ifdef LS1_SET +const uint32_t ls_tab[256] = { sb_data(w0) }; +#endif +#ifdef LS4_SET +const uint32_t ls_tab[4][256] = + { { sb_data(w0) }, { sb_data(w1) }, { sb_data(w2) }, { sb_data(w3) } }; +#endif + +#ifdef IM1_SET +const uint32_t im_tab[256] = { mm_data(v0) }; +#endif +#ifdef IM4_SET +const uint32_t im_tab[4][256] = + { { mm_data(v0) }, { mm_data(v1) }, { mm_data(v2) }, { mm_data(v3) } }; +#endif + +#else /* dynamic table generation */ + +uint8_t tab_init = 0; + +#define const + +uint32_t rcon_tab[RC_LENGTH]; + +#ifdef SBX_SET +uint8_t s_box[256]; +#endif +#ifdef ISB_SET +uint8_t inv_s_box[256]; +#endif + +#ifdef FT1_SET +uint32_t ft_tab[256]; +#endif +#ifdef FT4_SET +uint32_t ft_tab[4][256]; +#endif + +#ifdef FL1_SET +uint32_t fl_tab[256]; +#endif +#ifdef FL4_SET +uint32_t fl_tab[4][256]; +#endif + +#ifdef IT1_SET +uint32_t it_tab[256]; +#endif +#ifdef IT4_SET +uint32_t it_tab[4][256]; +#endif + +#ifdef IL1_SET +uint32_t il_tab[256]; +#endif +#ifdef IL4_SET +uint32_t il_tab[4][256]; +#endif + +#ifdef LS1_SET +uint32_t ls_tab[256]; +#endif +#ifdef LS4_SET +uint32_t ls_tab[4][256]; +#endif + +#ifdef IM1_SET +uint32_t im_tab[256]; +#endif +#ifdef IM4_SET +uint32_t im_tab[4][256]; +#endif + +#if !defined(FF_TABLES) + +/* Generate the tables for the dynamic table option + + It will generally be sensible to use tables to compute finite + field multiplies and inverses but where memory is scarse this + code might sometimes be better. But it only has effect during + initialisation so its pretty unimportant in overall terms. +*/ + +/* return 2 ^ (n - 1) where n is the bit number of the highest bit + set in x with x in the range 1 < x < 0x00000200. This form is + used so that locals within fi can be bytes rather than words +*/ + +static uint8_t hibit(const uint32_t x) +{ uint8_t r = (uint8_t)((x >> 1) | (x >> 2)); + + r |= (r >> 2); + r |= (r >> 4); + return (r + 1) >> 1; +} + +/* return the inverse of the finite field element x */ + +static uint8_t fi(const uint8_t x) +{ uint8_t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0; + + if(x < 2) return x; + + for(;;) + { + if(!n1) return v1; + + while(n2 >= n1) + { + n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2); + } + + if(!n2) return v2; + + while(n1 >= n2) + { + n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1); + } + } +} + +#else + +/* define the finite field multiplies required for Rijndael */ + +#define f2(x) ((x) ? pow[log[x] + 0x19] : 0) +#define f3(x) ((x) ? pow[log[x] + 0x01] : 0) +#define f9(x) ((x) ? pow[log[x] + 0xc7] : 0) +#define fb(x) ((x) ? pow[log[x] + 0x68] : 0) +#define fd(x) ((x) ? pow[log[x] + 0xee] : 0) +#define fe(x) ((x) ? pow[log[x] + 0xdf] : 0) +#define fi(x) ((x) ? pow[255 - log[x]]: 0) + +#endif + +/* The forward and inverse affine transformations used in the S-box */ + +#define fwd_affine(x) \ + (w = (uint32_t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(uint8_t)(w^(w>>8))) + +#define inv_affine(x) \ + (w = (uint32_t)x, w = (w<<1)^(w<<3)^(w<<6), 0x05^(uint8_t)(w^(w>>8))) + +void gen_tabs(void) +{ uint32_t i, w; + +#if defined(FF_TABLES) + + uint8_t pow[512], log[256]; + + /* log and power tables for GF(2^8) finite field with + WPOLY as modular polynomial - the simplest primitive + root is 0x03, used here to generate the tables + */ + + i = 0; w = 1; + do + { + pow[i] = (uint8_t)w; + pow[i + 255] = (uint8_t)w; + log[w] = (uint8_t)i++; + w ^= (w << 1) ^ (w & 0x80 ? WPOLY : 0); + } + while (w != 1); + +#endif + + for(i = 0, w = 1; i < RC_LENGTH; ++i) + { + rcon_tab[i] = bytes2word(w, 0, 0, 0); + w = f2(w); + } + + for(i = 0; i < 256; ++i) + { uint8_t b; + + b = fwd_affine(fi((uint8_t)i)); + w = bytes2word(f2(b), b, b, f3(b)); + +#ifdef SBX_SET + s_box[i] = b; +#endif + +#ifdef FT1_SET /* tables for a normal encryption round */ + ft_tab[i] = w; +#endif +#ifdef FT4_SET + ft_tab[0][i] = w; + ft_tab[1][i] = upr(w,1); + ft_tab[2][i] = upr(w,2); + ft_tab[3][i] = upr(w,3); +#endif + w = bytes2word(b, 0, 0, 0); + +#ifdef FL1_SET /* tables for last encryption round (may also */ + fl_tab[i] = w; /* be used in the key schedule) */ +#endif +#ifdef FL4_SET + fl_tab[0][i] = w; + fl_tab[1][i] = upr(w,1); + fl_tab[2][i] = upr(w,2); + fl_tab[3][i] = upr(w,3); +#endif + +#ifdef LS1_SET /* table for key schedule if fl_tab above is */ + ls_tab[i] = w; /* not of the required form */ +#endif +#ifdef LS4_SET + ls_tab[0][i] = w; + ls_tab[1][i] = upr(w,1); + ls_tab[2][i] = upr(w,2); + ls_tab[3][i] = upr(w,3); +#endif + + b = fi(inv_affine((uint8_t)i)); + w = bytes2word(fe(b), f9(b), fd(b), fb(b)); + +#ifdef IM1_SET /* tables for the inverse mix column operation */ + im_tab[b] = w; +#endif +#ifdef IM4_SET + im_tab[0][b] = w; + im_tab[1][b] = upr(w,1); + im_tab[2][b] = upr(w,2); + im_tab[3][b] = upr(w,3); +#endif + +#ifdef ISB_SET + inv_s_box[i] = b; +#endif +#ifdef IT1_SET /* tables for a normal decryption round */ + it_tab[i] = w; +#endif +#ifdef IT4_SET + it_tab[0][i] = w; + it_tab[1][i] = upr(w,1); + it_tab[2][i] = upr(w,2); + it_tab[3][i] = upr(w,3); +#endif + w = bytes2word(b, 0, 0, 0); +#ifdef IL1_SET /* tables for last decryption round */ + il_tab[i] = w; +#endif +#ifdef IL4_SET + il_tab[0][i] = w; + il_tab[1][i] = upr(w,1); + il_tab[2][i] = upr(w,2); + il_tab[3][i] = upr(w,3); +#endif + } + + tab_init = 1; +} + +#endif diff --git a/src/lib/crypto/builtin/aes/deps b/src/lib/crypto/builtin/aes/deps new file mode 100644 index 000000000..08ce3fa2f --- /dev/null +++ b/src/lib/crypto/builtin/aes/deps @@ -0,0 +1,21 @@ +# +# Generated makefile dependencies follow. +# +aescrypt.so aescrypt.po $(OUTPRE)aescrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h aes.h aescrypt.c aesopt.h \ + uitypes.h +aestab.so aestab.po $(OUTPRE)aestab.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + aes.h aesopt.h aestab.c uitypes.h +aeskey.so aeskey.po $(OUTPRE)aeskey.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + aes.h aeskey.c aesopt.h uitypes.h +aes_s2k.so aes_s2k.po $(OUTPRE)aes_s2k.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../krb/dk/dk.h \ + aes_s2k.c aes_s2k.h diff --git a/src/lib/crypto/builtin/aes/uitypes.h b/src/lib/crypto/builtin/aes/uitypes.h new file mode 100644 index 000000000..3a7292183 --- /dev/null +++ b/src/lib/crypto/builtin/aes/uitypes.h @@ -0,0 +1,83 @@ +/* + ------------------------------------------------------------------------- + Copyright (c) 2001, Dr Brian Gladman , Worcester, UK. + All rights reserved. + + LICENSE TERMS + + The free distribution and use of this software in both source and binary + form is allowed (with or without changes) provided that: + + 1. distributions of this source code include the above copyright + notice, this list of conditions and the following disclaimer; + + 2. distributions in binary form include the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other associated materials; + + 3. the copyright holder's name is not used to endorse products + built using this software without specific written permission. + + DISCLAIMER + + This software is provided 'as is' with no explcit or implied warranties + in respect of any properties, including, but not limited to, correctness + and fitness for purpose. + ------------------------------------------------------------------------- + Issue Date: 01/02/2002 + + This file contains code to obtain or set the definitions for fixed length + unsigned integer types. +*/ + +#ifndef _UITYPES_H +#define _UITYPES_H + +#include "autoconf.h" + +#if defined(__GNU_LIBRARY__) +#define HAS_INTTYPES_H +#elif !defined(_MSC_VER) +#include +#if ULONG_MAX > 0xFFFFFFFFUL + #define MODEL_64 +#else + #define MODEL_32 +#endif +#endif + +#if defined HAS_INTTYPES_H || defined HAVE_INTTYPES_H +#include +#define s_u32 u +#define s_u64 ull +#elif defined MODEL_32 +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long int uint64_t; +#define s_u32 u +#define s_u64 ull +#elif defined MODEL_64 +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long int uint64_t; +#define s_u32 u +#define s_u64 ul +#elif defined(_MSC_VER) +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#define s_u32 ui32 +#define s_u64 ui64 +#else +#error You need to define fixed length types in uitypes.h +#endif + +#define sfx_lo(x,y) x##y +#define sfx_hi(x,y) sfx_lo(x,y) +#define x_32(p) sfx_hi(0x##p,s_u32) +#define x_64(p) sfx_hi(0x##p,s_u64) + +#endif diff --git a/src/lib/crypto/builtin/arcfour/Makefile.in b/src/lib/crypto/builtin/arcfour/Makefile.in new file mode 100644 index 000000000..cf6c51153 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/Makefile.in @@ -0,0 +1,41 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/arcfour +mydir=lib/crypto/builtin/arcfour +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../md4 -I$(srcdir)/../../krb +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=arcfour +##DOS##OBJFILE=..\$(OUTPRE)arcfour.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + arcfour.o \ + arcfour_aead.o \ + arcfour_s2k.o + +OBJS=\ + $(OUTPRE)arcfour.$(OBJEXT) \ + $(OUTPRE)arcfour_aead.$(OBJEXT) \ + $(OUTPRE)arcfour_s2k.$(OBJEXT) + +SRCS=\ + $(srcdir)/arcfour.c \ + $(srcdir)/arcfour_aead.c\ + $(srcdir)/arcfour_s2k.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/arcfour/arcfour-int.h b/src/lib/crypto/builtin/arcfour/arcfour-int.h new file mode 100644 index 000000000..efd7a0282 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/arcfour-int.h @@ -0,0 +1,32 @@ +/* + +ARCFOUR cipher (based on a cipher posted on the Usenet in Spring-95). +This cipher is widely believed and has been tested to be equivalent +with the RC4 cipher from RSA Data Security, Inc. (RC4 is a trademark +of RSA Data Security) + +*/ +#ifndef ARCFOUR_INT_H +#define ARCFOUR_INT_H + +#include "arcfour.h" + +#define CONFOUNDERLENGTH 8 + +typedef struct +{ + unsigned int x; + unsigned int y; + unsigned char state[256]; +} ArcfourContext; + +typedef struct { + int initialized; + ArcfourContext ctx; +} ArcFourCipherState; + +krb5_keyusage krb5int_arcfour_translate_usage(krb5_keyusage usage); + +extern const char *const krb5int_arcfour_l40; + +#endif /* ARCFOUR_INT_H */ diff --git a/src/lib/crypto/builtin/arcfour/arcfour.c b/src/lib/crypto/builtin/arcfour/arcfour.c new file mode 100644 index 000000000..87220a756 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/arcfour.c @@ -0,0 +1,335 @@ +/* + +ARCFOUR cipher (based on a cipher posted on the Usenet in Spring-95). +This cipher is widely believed and has been tested to be equivalent +with the RC4 cipher from RSA Data Security, Inc. (RC4 is a trademark +of RSA Data Security) + +*/ +#include "k5-int.h" +#include "arcfour-int.h" +#include "hash_provider/hash_provider.h" + +const char *const krb5int_arcfour_l40 = "fortybits"; + +void +krb5_arcfour_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length) +{ + size_t blocksize, hashsize; + + blocksize = enc->block_size; + hashsize = hash->hashsize; + + /* checksum + (confounder + inputlen, in even blocksize) */ + *length = hashsize + krb5_roundup(8 + inputlen, blocksize); +} + + krb5_keyusage + krb5int_arcfour_translate_usage(krb5_keyusage usage) +{ + switch (usage) { + case 1: /* AS-REQ PA-ENC-TIMESTAMP padata timestamp, */ + return 1; + case 2: /* ticket from kdc */ + return 2; + case 3: /* as-rep encrypted part */ + return 8; + case 4: /* tgs-req authz data */ + return 4; + case 5: /* tgs-req authz data in subkey */ + return 5; + case 6: /* tgs-req authenticator cksum */ + return 6; +case 7: /* tgs-req authenticator */ + return 7; + case 8: + return 8; + case 9: /* tgs-rep encrypted with subkey */ + return 9; + case 10: /* ap-rep authentication cksum */ + return 10; /* xxx Microsoft never uses this*/ + case 11: /* app-req authenticator */ + return 11; + case 12: /* app-rep encrypted part */ + return 12; + case 23: /* sign wrap token*/ + return 13; + default: + return usage; +} +} + +krb5_error_code +krb5_arcfour_encrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + krb5_keyblock k1, k2, k3; + krb5_data d1, d2, d3, salt, plaintext, checksum, ciphertext, confounder; + krb5_keyusage ms_usage; + size_t keylength, keybytes, blocksize, hashsize; + krb5_error_code ret; + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + hashsize = hash->hashsize; + + d1.length=keybytes; + d1.data=malloc(d1.length); + if (d1.data == NULL) + return (ENOMEM); + k1 = *key; + k1.length=d1.length; + k1.contents= (void *) d1.data; + + d2.length=keybytes; + d2.data=malloc(d2.length); + if (d2.data == NULL) { + free(d1.data); + return (ENOMEM); + } + k2 = *key; + k2.length=d2.length; + k2.contents=(void *) d2.data; + + d3.length=keybytes; + d3.data=malloc(d3.length); + if (d3.data == NULL) { + free(d1.data); + free(d2.data); + return (ENOMEM); + } + k3 = *key; + k3.length=d3.length; + k3.contents= (void *) d3.data; + + salt.length=14; + salt.data=malloc(salt.length); + if (salt.data == NULL) { + free(d1.data); + free(d2.data); + free(d3.data); + return (ENOMEM); + } + + /* is "input" already blocksize aligned? if it is, then we need this + step, otherwise we do not */ + plaintext.length=krb5_roundup(input->length+CONFOUNDERLENGTH,blocksize); + plaintext.data=malloc(plaintext.length); + if (plaintext.data == NULL) { + free(d1.data); + free(d2.data); + free(d3.data); + free(salt.data); + return(ENOMEM); + } + + /* setup convienient pointers into the allocated data */ + checksum.length=hashsize; + checksum.data=output->data; + ciphertext.length=krb5_roundup(input->length+CONFOUNDERLENGTH,blocksize); + ciphertext.data=output->data+hashsize; + confounder.length=CONFOUNDERLENGTH; + confounder.data=plaintext.data; + output->length = plaintext.length+hashsize; + + /* begin the encryption, computer K1 */ + ms_usage=krb5int_arcfour_translate_usage(usage); + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { + strncpy(salt.data, krb5int_arcfour_l40, salt.length); + store_32_le(ms_usage, salt.data+10); + } else { + salt.length=4; + store_32_le(ms_usage, salt.data); + } + krb5_hmac(hash, key, 1, &salt, &d1); + + memcpy(k2.contents, k1.contents, k2.length); + + if (key->enctype==ENCTYPE_ARCFOUR_HMAC_EXP) + memset(k1.contents+7, 0xab, 9); + + ret=krb5_c_random_make_octets(/* XXX */ 0, &confounder); + memcpy(plaintext.data+confounder.length, input->data, input->length); + if (ret) + goto cleanup; + + krb5_hmac(hash, &k2, 1, &plaintext, &checksum); + + krb5_hmac(hash, &k1, 1, &checksum, &d3); + + ret=(*(enc->encrypt))(&k3, ivec, &plaintext, &ciphertext); + + cleanup: + memset(d1.data, 0, d1.length); + memset(d2.data, 0, d2.length); + memset(d3.data, 0, d3.length); + memset(salt.data, 0, salt.length); + memset(plaintext.data, 0, plaintext.length); + + free(d1.data); + free(d2.data); + free(d3.data); + free(salt.data); + free(plaintext.data); + return (ret); +} + +/* This is the arcfour-hmac decryption routine */ +krb5_error_code +krb5_arcfour_decrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + krb5_keyblock k1,k2,k3; + krb5_data d1,d2,d3,salt,ciphertext,plaintext,checksum; + krb5_keyusage ms_usage; + size_t keybytes, keylength, hashsize, blocksize; + krb5_error_code ret; + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + hashsize = hash->hashsize; + + d1.length=keybytes; + d1.data=malloc(d1.length); + if (d1.data == NULL) + return (ENOMEM); + k1 = *key; + k1.length=d1.length; + k1.contents= (void *) d1.data; + + d2.length=keybytes; + d2.data=malloc(d2.length); + if (d2.data == NULL) { + free(d1.data); + return (ENOMEM); + } + k2 = *key; + k2.length=d2.length; + k2.contents= (void *) d2.data; + + d3.length=keybytes; + d3.data=malloc(d3.length); + if (d3.data == NULL) { + free(d1.data); + free(d2.data); + return (ENOMEM); + } + k3 = *key; + k3.length=d3.length; + k3.contents= (void *) d3.data; + + salt.length=14; + salt.data=malloc(salt.length); + if(salt.data==NULL) { + free(d1.data); + free(d2.data); + free(d3.data); + return (ENOMEM); + } + + ciphertext.length=input->length-hashsize; + ciphertext.data=input->data+hashsize; + plaintext.length=ciphertext.length; + plaintext.data=malloc(plaintext.length); + if (plaintext.data == NULL) { + free(d1.data); + free(d2.data); + free(d3.data); + free(salt.data); + return (ENOMEM); + } + + checksum.length=hashsize; + checksum.data=input->data; + + ms_usage=krb5int_arcfour_translate_usage(usage); + + /* We may have to try two ms_usage values; see below. */ + do { + /* compute the salt */ + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { + strncpy(salt.data, krb5int_arcfour_l40, salt.length); + store_32_le(ms_usage, salt.data + 10); + } else { + salt.length = 4; + store_32_le(ms_usage, salt.data); + } + ret = krb5_hmac(hash, key, 1, &salt, &d1); + if (ret) + goto cleanup; + + memcpy(k2.contents, k1.contents, k2.length); + + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) + memset(k1.contents + 7, 0xab, 9); + + ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); + if (ret) + goto cleanup; + + ret = (*(enc->decrypt))(&k3, ivec, &ciphertext, &plaintext); + if (ret) + goto cleanup; + + ret = krb5_hmac(hash, &k2, 1, &plaintext, &d1); + if (ret) + goto cleanup; + + if (memcmp(checksum.data, d1.data, hashsize) != 0) { + if (ms_usage == 9) { + /* + * RFC 4757 specifies usage 8 for TGS-REP encrypted + * parts encrypted in a subkey, but the value used by MS + * is actually 9. We now use 9 to start with, but fall + * back to 8 on failure in case we are communicating + * with a KDC using the value from the RFC. + */ + ms_usage = 8; + continue; + } + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + goto cleanup; + } + + break; + } while (1); + + memcpy(output->data, plaintext.data+CONFOUNDERLENGTH, + (plaintext.length-CONFOUNDERLENGTH)); + output->length=plaintext.length-CONFOUNDERLENGTH; + + cleanup: + memset(d1.data, 0, d1.length); + memset(d2.data, 0, d2.length); + memset(d3.data, 0, d2.length); + memset(salt.data, 0, salt.length); + memset(plaintext.data, 0, plaintext.length); + + free(d1.data); + free(d2.data); + free(d3.data); + free(salt.data); + free(plaintext.data); + return (ret); +} + + krb5_error_code krb5int_arcfour_prf( + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out) + { + assert(out->length == 20); + return krb5_hmac(&krb5int_hash_sha1, key, 1, in, out); + } + diff --git a/src/lib/crypto/builtin/arcfour/arcfour.h b/src/lib/crypto/builtin/arcfour/arcfour.h new file mode 100644 index 000000000..be408febc --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/arcfour.h @@ -0,0 +1,43 @@ +#ifndef ARCFOUR_H +#define ARCFOUR_H + +extern void +krb5_arcfour_encrypt_length(const struct krb5_enc_provider *, + const struct krb5_hash_provider *, + size_t, + size_t *); + +extern +krb5_error_code krb5_arcfour_encrypt(const struct krb5_enc_provider *, + const struct krb5_hash_provider *, + const krb5_keyblock *, + krb5_keyusage, + const krb5_data *, + const krb5_data *, + krb5_data *); + +extern +krb5_error_code krb5_arcfour_decrypt(const struct krb5_enc_provider *, + const struct krb5_hash_provider *, + const krb5_keyblock *, + krb5_keyusage, + const krb5_data *, + const krb5_data *, + krb5_data *); + +extern krb5_error_code krb5int_arcfour_string_to_key( + const struct krb5_enc_provider *, + const krb5_data *, + const krb5_data *, + const krb5_data *, + krb5_keyblock *); + +extern const struct krb5_enc_provider krb5int_enc_arcfour; +extern const struct krb5_aead_provider krb5int_aead_arcfour; + krb5_error_code krb5int_arcfour_prf( + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out); + +#endif /* ARCFOUR_H */ diff --git a/src/lib/crypto/builtin/arcfour/arcfour_aead.c b/src/lib/crypto/builtin/arcfour/arcfour_aead.c new file mode 100644 index 000000000..cff7d66d6 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/arcfour_aead.c @@ -0,0 +1,325 @@ +/* + * lib/crypto/arcfour/arcfour_aead.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + + +#include "k5-int.h" +#include "arcfour.h" +#include "arcfour-int.h" +#include "aead.h" + +/* AEAD */ + +static krb5_error_code +krb5int_arcfour_crypto_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + krb5_cryptotype type, + unsigned int *length) +{ + switch (type) { + case KRB5_CRYPTO_TYPE_HEADER: + *length = hash->hashsize + CONFOUNDERLENGTH; + break; + case KRB5_CRYPTO_TYPE_PADDING: + *length = 0; + break; + case KRB5_CRYPTO_TYPE_TRAILER: + *length = 0; + break; + case KRB5_CRYPTO_TYPE_CHECKSUM: + *length = hash->hashsize; + break; + default: + assert(0 && "invalid cryptotype passed to krb5int_arcfour_crypto_length"); + break; + } + + return 0; +} + +static krb5_error_code +alloc_derived_key(const struct krb5_enc_provider *enc, + krb5_keyblock *dst, + krb5_data *data, + const krb5_keyblock *src) +{ + data->length = enc->keybytes; + data->data = malloc(data->length); + if (data->data == NULL) + return ENOMEM; + + *dst = *src; + dst->length = data->length; + dst->contents = (void *)data->data; + + return 0; +} + +static krb5_error_code +krb5int_arcfour_encrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + krb5_crypto_iov *header, *trailer; + krb5_keyblock k1, k2, k3; + krb5_data d1, d2, d3; + krb5_data checksum, confounder, header_data; + krb5_keyusage ms_usage; + char salt_data[14]; + krb5_data salt; + size_t i; + + d1.length = d2.length = d3.length = 0; + d1.data = d2.data = d3.data = NULL; + + /* + * Caller must have provided space for the header, padding + * and trailer; per RFC 4757 we will arrange it as: + * + * Checksum | E(Confounder | Plaintext) + */ + + header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); + if (header == NULL || + header->data.length < hash->hashsize + CONFOUNDERLENGTH) + return KRB5_BAD_MSIZE; + + header_data = header->data; + + /* Trailer may be absent */ + trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); + if (trailer != NULL) + trailer->data.length = 0; + + /* Ensure that there is no padding */ + for (i = 0; i < num_data; i++) { + if (data[i].flags == KRB5_CRYPTO_TYPE_PADDING) + data[i].data.length = 0; + } + + ret = alloc_derived_key(enc, &k1, &d1, key); + if (ret != 0) + goto cleanup; + + ret = alloc_derived_key(enc, &k2, &d2, key); + if (ret != 0) + goto cleanup; + + ret = alloc_derived_key(enc, &k3, &d3, key); + if (ret != 0) + goto cleanup; + + /* Begin the encryption, compute K1 */ + salt.data = salt_data; + salt.length = sizeof(salt_data); + + ms_usage = krb5int_arcfour_translate_usage(usage); + + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { + strncpy(salt.data, krb5int_arcfour_l40, salt.length); + store_32_le(ms_usage, salt.data + 10); + } else { + salt.length = 4; + store_32_le(ms_usage, salt.data); + } + ret = krb5_hmac(hash, key, 1, &salt, &d1); + if (ret != 0) + goto cleanup; + + memcpy(k2.contents, k1.contents, k2.length); + + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) + memset(k1.contents + 7, 0xAB, 9); + + header->data.length = hash->hashsize + CONFOUNDERLENGTH; + + confounder.data = header->data.data + hash->hashsize; + confounder.length = CONFOUNDERLENGTH; + + ret = krb5_c_random_make_octets(0, &confounder); + if (ret != 0) + goto cleanup; + + checksum.data = header->data.data; + checksum.length = hash->hashsize; + + /* Adjust pointers so confounder is at start of header */ + header->data.length -= hash->hashsize; + header->data.data += hash->hashsize; + + ret = krb5int_hmac_iov(hash, &k2, data, num_data, &checksum); + if (ret != 0) + goto cleanup; + + ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); + if (ret != 0) + goto cleanup; + + ret = enc->encrypt_iov(&k3, ivec, data, num_data); + if (ret != 0) + goto cleanup; + +cleanup: + header->data = header_data; /* restore header pointers */ + + if (d1.data != NULL) { + memset(d1.data, 0, d1.length); + free(d1.data); + } + if (d2.data != NULL) { + memset(d2.data, 0, d2.length); + free(d2.data); + } + if (d3.data != NULL) { + memset(d3.data, 0, d3.length); + free(d3.data); + } + + return ret; +} + +static krb5_error_code +krb5int_arcfour_decrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + krb5_crypto_iov *header, *trailer; + krb5_keyblock k1, k2, k3; + krb5_data d1, d2, d3; + krb5_data checksum, header_data; + krb5_keyusage ms_usage; + char salt_data[14]; + krb5_data salt; + + d1.length = d2.length = d3.length = 0; + d1.data = d2.data = d3.data = NULL; + + header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); + if (header == NULL || + header->data.length != hash->hashsize + CONFOUNDERLENGTH) + return KRB5_BAD_MSIZE; + + header_data = header->data; + + trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); + if (trailer != NULL && trailer->data.length != 0) + return KRB5_BAD_MSIZE; + + ret = alloc_derived_key(enc, &k1, &d1, key); + if (ret != 0) + goto cleanup; + + ret = alloc_derived_key(enc, &k2, &d2, key); + if (ret != 0) + goto cleanup; + + ret = alloc_derived_key(enc, &k3, &d3, key); + if (ret != 0) + goto cleanup; + + /* Begin the decryption, compute K1 */ + salt.data = salt_data; + salt.length = sizeof(salt_data); + + ms_usage = krb5int_arcfour_translate_usage(usage); + + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) { + strncpy(salt.data, krb5int_arcfour_l40, salt.length); + store_32_le(ms_usage, (unsigned char *)salt.data + 10); + } else { + salt.length = 4; + store_32_le(ms_usage, (unsigned char *)salt.data); + } + ret = krb5_hmac(hash, key, 1, &salt, &d1); + if (ret != 0) + goto cleanup; + + memcpy(k2.contents, k1.contents, k2.length); + + if (key->enctype == ENCTYPE_ARCFOUR_HMAC_EXP) + memset(k1.contents + 7, 0xAB, 9); + + checksum.data = header->data.data; + checksum.length = hash->hashsize; + + /* Adjust pointers so confounder is at start of header */ + header->data.length -= hash->hashsize; + header->data.data += hash->hashsize; + + ret = krb5_hmac(hash, &k1, 1, &checksum, &d3); + if (ret != 0) + goto cleanup; + + ret = enc->decrypt_iov(&k3, ivec, data, num_data); + if (ret != 0) + goto cleanup; + + ret = krb5int_hmac_iov(hash, &k2, data, num_data, &d1); + if (ret != 0) + goto cleanup; + + if (memcmp(checksum.data, d1.data, hash->hashsize) != 0) { + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + goto cleanup; + } + +cleanup: + header->data = header_data; /* restore header pointers */ + + if (d1.data != NULL) { + memset(d1.data, 0, d1.length); + free(d1.data); + } + if (d2.data != NULL) { + memset(d2.data, 0, d2.length); + free(d2.data); + } + if (d3.data != NULL) { + memset(d3.data, 0, d3.length); + free(d3.data); + } + + return ret; +} + +const struct krb5_aead_provider krb5int_aead_arcfour = { + krb5int_arcfour_crypto_length, + krb5int_arcfour_encrypt_iov, + krb5int_arcfour_decrypt_iov +}; + diff --git a/src/lib/crypto/builtin/arcfour/arcfour_s2k.c b/src/lib/crypto/builtin/arcfour/arcfour_s2k.c new file mode 100644 index 000000000..41053ed17 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/arcfour_s2k.c @@ -0,0 +1,59 @@ +#include "k5-int.h" +#include "k5-utf8.h" +#include "rsa-md4.h" +#include "arcfour-int.h" + +#if TARGET_OS_MAC && !defined(DEPEND) +#include +#endif + +krb5_error_code +krb5int_arcfour_string_to_key(const struct krb5_enc_provider *enc, + const krb5_data *string, const krb5_data *salt, + const krb5_data *params, krb5_keyblock *key) +{ + krb5_error_code err = 0; + krb5_MD4_CTX md4_context; + unsigned char *copystr; + size_t copystrlen; + + if (params != NULL) + return KRB5_ERR_BAD_S2K_PARAMS; + + if (key->length != 16) + return (KRB5_BAD_MSIZE); + + /* We ignore salt per the Microsoft spec*/ + + /* compute the space needed for the new string. + Since the password must be stored in unicode, we need to increase + that number by 2x. + */ + + err = krb5int_utf8cs_to_ucs2les(string->data, string->length, ©str, ©strlen); + if (err) + return err; + + /* the actual MD4 hash of the data */ + krb5_MD4Init(&md4_context); + krb5_MD4Update(&md4_context, copystr, copystrlen); + krb5_MD4Final(&md4_context); + memcpy(key->contents, md4_context.digest, 16); + +#if 0 + /* test the string_to_key function */ + printf("Hash="); + { + int counter; + for(counter=0;counter<16;counter++) + printf("%02x", md4_context.digest[counter]); + printf("\n"); + } +#endif /* 0 */ + + /* Zero out the data behind us */ + memset(copystr, 0, copystrlen); + memset(&md4_context, 0, sizeof(md4_context)); + free(copystr); + return err; +} diff --git a/src/lib/crypto/builtin/arcfour/deps b/src/lib/crypto/builtin/arcfour/deps new file mode 100644 index 000000000..a08ba4429 --- /dev/null +++ b/src/lib/crypto/builtin/arcfour/deps @@ -0,0 +1,38 @@ +# +# Generated makefile dependencies follow. +# +arcfour.so arcfour.po $(OUTPRE)arcfour.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../krb/hash_provider/hash_provider.h \ + arcfour-int.h arcfour.c arcfour.h +arcfour_aead.so arcfour_aead.po $(OUTPRE)arcfour_aead.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/../../krb/aead.h $(srcdir)/../../krb/cksumtypes.h \ + arcfour-int.h arcfour.h arcfour_aead.c +arcfour_s2k.so arcfour_s2k.po $(OUTPRE)arcfour_s2k.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/k5-utf8.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../md4/rsa-md4.h \ + arcfour-int.h arcfour.h arcfour_s2k.c diff --git a/src/lib/crypto/builtin/deps b/src/lib/crypto/builtin/deps new file mode 100644 index 000000000..2b5c20efc --- /dev/null +++ b/src/lib/crypto/builtin/deps @@ -0,0 +1,25 @@ +# +# Generated makefile dependencies follow. +# +hmac.so hmac.po $(OUTPRE)hmac.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../builtin/hmac.c \ + $(srcdir)/../krb/aead.h $(srcdir)/../krb/cksumtypes.h +pbkdf2.so pbkdf2.po $(OUTPRE)pbkdf2.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../builtin/pbkdf2.c \ + $(srcdir)/../krb/hash_provider/hash_provider.h diff --git a/src/lib/crypto/builtin/des/ISSUES b/src/lib/crypto/builtin/des/ISSUES new file mode 100644 index 000000000..412f94aa7 --- /dev/null +++ b/src/lib/crypto/builtin/des/ISSUES @@ -0,0 +1,13 @@ +Issues to be addressed for src/lib/crypto/des: -*- text -*- + + +"const" could be used in more places + + +Array types are used in calling interfaces. Under ANSI C, a value of +type "arraytype *" cannot be assigned to a variable of type "const +arraytype *", so we get compilation warnings. + +Possible fix: Rewrite internal interfaces to not use arrays this way. +Provide external routines compatible with old API, but not using +const? diff --git a/src/lib/crypto/builtin/des/Makefile.in b/src/lib/crypto/builtin/des/Makefile.in new file mode 100644 index 000000000..a609c4299 --- /dev/null +++ b/src/lib/crypto/builtin/des/Makefile.in @@ -0,0 +1,76 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/des +mydir=lib/crypto/builtin/des +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../.. -I$(srcdir)/../../krb +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=des +##DOS##OBJFILE=..\$(OUTPRE)des.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + afsstring2key.o \ + d3_cbc.o \ + d3_aead.o \ + d3_kysched.o \ + des_prf.o \ + f_aead.o \ + f_cbc.o \ + f_cksum.o \ + f_parity.o \ + f_sched.o \ + f_tables.o \ + key_sched.o \ + string2key.o \ + weak_key.o + +OBJS= $(OUTPRE)afsstring2key.$(OBJEXT) \ + $(OUTPRE)d3_cbc.$(OBJEXT) \ + $(OUTPRE)d3_aead.$(OBJEXT) \ + $(OUTPRE)d3_kysched.$(OBJEXT) \ + $(OUTPRE)des_prf.$(OBJEXT) \ + $(OUTPRE)f_aead.$(OBJEXT) \ + $(OUTPRE)f_cbc.$(OBJEXT) \ + $(OUTPRE)f_cksum.$(OBJEXT) \ + $(OUTPRE)f_parity.$(OBJEXT) \ + $(OUTPRE)f_sched.$(OBJEXT) \ + $(OUTPRE)f_tables.$(OBJEXT) \ + $(OUTPRE)key_sched.$(OBJEXT) \ + $(OUTPRE)string2key.$(OBJEXT) \ + $(OUTPRE)weak_key.$(OBJEXT) + +SRCS= $(srcdir)/afsstring2key.c \ + $(srcdir)/d3_cbc.c \ + $(srcdir)/d3_aead.c \ + $(srcdir)/d3_kysched.c \ + $(srcdir)/des_prf.c \ + $(srcdir)/f_aead.c \ + $(srcdir)/f_cbc.c \ + $(srcdir)/f_cksum.c \ + $(srcdir)/f_parity.c \ + $(srcdir)/f_sched.c \ + $(srcdir)/f_tables.c \ + $(srcdir)/key_sched.c \ + $(srcdir)/weak_key.c \ + $(srcdir)/string2key.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +check-windows:: + +clean:: + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/des/afsstring2key.c b/src/lib/crypto/builtin/des/afsstring2key.c new file mode 100644 index 000000000..eb6c37f33 --- /dev/null +++ b/src/lib/crypto/builtin/des/afsstring2key.c @@ -0,0 +1,570 @@ +/* + * lib/crypto/des/string2key.c + * + * based on lib/crypto/des/string2key.c from MIT V5 + * and on lib/des/afs_string_to_key.c from UMD. + * constructed by Mark Eichin, Cygnus Support, 1995. + * made thread-safe by Ken Raeburn, MIT, 2001. + */ + +/* + * Copyright 2001 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include + +#define afs_crypt mit_afs_crypt +char *afs_crypt (const char *, const char *, char *); + +#undef min +#define min(a,b) ((a)>(b)?(b):(a)) + +krb5_error_code +mit_afs_string_to_key (krb5_keyblock *keyblock, const krb5_data *data, + const krb5_data *salt) +{ + /* totally different approach from MIT string2key. */ + /* much of the work has already been done by the only caller + which is mit_des_string_to_key; in particular, *keyblock is already + set up. */ + + char *realm = salt->data; + unsigned int i, j; + krb5_octet *key = keyblock->contents; + + if (data->length <= 8) { + /* One block only. Run afs_crypt and use the first eight + returned bytes after the copy of the (fixed) salt. + + Since the returned bytes are alphanumeric, the output is + limited to 2**48 possibilities; for each byte, only 64 + possible values can be used. */ + unsigned char password[9]; /* trailing nul for crypt() */ + char afs_crypt_buf[16]; + + memset (password, 0, sizeof (password)); + memcpy (password, realm, min (salt->length, 8)); + for (i=0; i<8; i++) + if (isupper(password[i])) + password[i] = tolower(password[i]); + for (i=0; ilength; i++) + password[i] ^= data->data[i]; + for (i=0; i<8; i++) + if (password[i] == '\0') + password[i] = 'X'; + password[8] = '\0'; + /* Out-of-bounds salt characters are equivalent to a salt string + of "p1". */ + strncpy((char *) key, + (char *) afs_crypt((char *) password, "#~", afs_crypt_buf) + 2, + 8); + for (i=0; i<8; i++) + key[i] <<= 1; + /* now fix up key parity again */ + mit_des_fixup_key_parity(key); + /* clean & free the input string */ + memset(password, 0, (size_t) sizeof(password)); + } else { + /* Multiple blocks. Do a CBC checksum, twice, and use the + result as the new key. */ + mit_des_cblock ikey, tkey; + mit_des_key_schedule key_sked; + unsigned int pw_len = salt->length+data->length; + unsigned char *password = malloc(pw_len+1); + if (!password) return ENOMEM; + + /* Some bound checks from the original code are elided here as + the malloc above makes sure we have enough storage. */ + memcpy (password, data->data, data->length); + for (i=data->length, j = 0; j < salt->length; i++, j++) { + password[i] = realm[j]; + if (isupper(password[i])) + password[i] = tolower(password[i]); + } + + memcpy (ikey, "kerberos", sizeof(ikey)); + memcpy (tkey, ikey, sizeof(tkey)); + mit_des_fixup_key_parity (tkey); + (void) mit_des_key_sched (tkey, key_sked); + (void) mit_des_cbc_cksum (password, tkey, i, key_sked, ikey); + + memcpy (ikey, tkey, sizeof(ikey)); + mit_des_fixup_key_parity (tkey); + (void) mit_des_key_sched (tkey, key_sked); + (void) mit_des_cbc_cksum (password, key, i, key_sked, ikey); + + /* erase key_sked */ + memset(key_sked, 0,sizeof(key_sked)); + + /* now fix up key parity again */ + mit_des_fixup_key_parity(key); + + /* clean & free the input string */ + memset(password, 0, (size_t) pw_len); + free(password); + } +#if 0 + /* must free here because it was copied for this special case */ + free(salt->data); +#endif + return 0; +} + + +/* Portions of this code: + Copyright 1989 by the Massachusetts Institute of Technology + */ + +/* + * Copyright (c) 1990 Regents of The University of Michigan. + * 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 appears in all + * copies and that both that copyright notice and this permission + * notice appear in supporting documentation, and that the name of + * The University of Michigan not be used in advertising or + * publicity pertaining to distribution of the software without + * specific, written prior permission. This software is supplied as + * is without expressed or implied warranties of any kind. + * + * ITD Research Systems + * University of Michigan + * 535 W. William Street + * Ann Arbor, Michigan + * +1-313-936-2652 + * netatalk@terminator.cc.umich.edu + */ + +static void krb5_afs_crypt_setkey (char*, char*, char(*)[48]); +static void krb5_afs_encrypt (char*,char*,char (*)[48]); + +/* + * Initial permutation, + */ +static const char IP[] = { + 58,50,42,34,26,18,10, 2, + 60,52,44,36,28,20,12, 4, + 62,54,46,38,30,22,14, 6, + 64,56,48,40,32,24,16, 8, + 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, +}; + +/* + * Final permutation, FP = IP^(-1) + */ +static const char FP[] = { + 40, 8,48,16,56,24,64,32, + 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, +}; + +/* + * Permuted-choice 1 from the key bits to yield C and D. + * Note that bits 8,16... are left out: They are intended for a parity check. + */ +static const char PC1_C[] = { + 57,49,41,33,25,17, 9, + 1,58,50,42,34,26,18, + 10, 2,59,51,43,35,27, + 19,11, 3,60,52,44,36, +}; + +static const char PC1_D[] = { + 63,55,47,39,31,23,15, + 7,62,54,46,38,30,22, + 14, 6,61,53,45,37,29, + 21,13, 5,28,20,12, 4, +}; + +/* + * Sequence of shifts used for the key schedule. + */ +static const char shifts[] = { + 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1, +}; + +/* + * Permuted-choice 2, to pick out the bits from + * the CD array that generate the key schedule. + */ +static const char PC2_C[] = { + 14,17,11,24, 1, 5, + 3,28,15, 6,21,10, + 23,19,12, 4,26, 8, + 16, 7,27,20,13, 2, +}; + +static const char PC2_D[] = { + 41,52,31,37,47,55, + 30,40,51,45,33,48, + 44,49,39,56,34,53, + 46,42,50,36,29,32, +}; + +/* + * The E bit-selection table. + */ +static const char e[] = { + 32, 1, 2, 3, 4, 5, + 4, 5, 6, 7, 8, 9, + 8, 9,10,11,12,13, + 12,13,14,15,16,17, + 16,17,18,19,20,21, + 20,21,22,23,24,25, + 24,25,26,27,28,29, + 28,29,30,31,32, 1, +}; + +/* + * P is a permutation on the selected combination + * of the current L and key. + */ +static const char P[] = { + 16, 7,20,21, + 29,12,28,17, + 1,15,23,26, + 5,18,31,10, + 2, 8,24,14, + 32,27, 3, 9, + 19,13,30, 6, + 22,11, 4,25, +}; + +/* + * The 8 selection functions. + * For some reason, they give a 0-origin + * index, unlike everything else. + */ +static const char S[8][64] = { + {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}, + + {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}, + + {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}, + + { 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}, + + { 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}, + + {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}, + + { 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}, + + {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}, +}; + + +char *afs_crypt(const char *pw, const char *salt, + /* must be at least 16 bytes */ + char *iobuf) +{ + int i, j, c; + int temp; + char block[66]; + char E[48]; + /* + * The key schedule. + * Generated from the key. + */ + char KS[16][48]; + + for(i=0; i<66; i++) + block[i] = 0; + for(i=0; (c= *pw) && i<64; pw++){ + for(j=0; j<7; j++, i++) + block[i] = (c>>(6-j)) & 01; + i++; + } + + krb5_afs_crypt_setkey(block, E, KS); + + for(i=0; i<66; i++) + block[i] = 0; + + for(i=0;i<2;i++){ + c = *salt++; + iobuf[i] = c; + if(c>'Z') c -= 6; + if(c>'9') c -= 7; + c -= '.'; + for(j=0;j<6;j++){ + if((c>>j) & 01){ + temp = E[6*i+j]; + E[6*i+j] = E[6*i+j+24]; + E[6*i+j+24] = temp; + } + } + } + + for(i=0; i<25; i++) + krb5_afs_encrypt(block,E,KS); + + for(i=0; i<11; i++){ + c = 0; + for(j=0; j<6; j++){ + c <<= 1; + c |= block[6*i+j]; + } + c += '.'; + if(c>'9') c += 7; + if(c>'Z') c += 6; + iobuf[i+2] = c; + } + iobuf[i+2] = 0; + if(iobuf[1]==0) + iobuf[1] = iobuf[0]; + return(iobuf); +} + +/* + * Set up the key schedule from the key. + */ + +static void krb5_afs_crypt_setkey(char *key, char *E, char (*KS)[48]) +{ + register int i, j, k; + int t; + /* + * The C and D arrays used to calculate the key schedule. + */ + char C[28], D[28]; + + /* + * First, generate C and D by permuting + * the key. The low order bit of each + * 8-bit char is not used, so C and D are only 28 + * bits apiece. + */ + for (i=0; i<28; i++) { + C[i] = key[PC1_C[i]-1]; + D[i] = key[PC1_D[i]-1]; + } + /* + * To generate Ki, rotate C and D according + * to schedule and pick up a permutation + * using PC2. + */ + for (i=0; i<16; i++) { + /* + * rotate. + */ + for (k=0; k>3)&01; + f[t+1] = (k>>2)&01; + f[t+2] = (k>>1)&01; + f[t+3] = (k>>0)&01; + } + /* + * The new R is L ^ f(R, K). + * The f here has to be permuted first, though. + */ + for (j=0; j<32; j++) + R[j] = L[j] ^ f[P[j]-1]; + /* + * Finally, the new L (the original R) + * is copied back. + */ +#if 0 + for (j=0; j<32; j++) + L[j] = tempL[j]; +#else + memcpy(L, tempL, 32); +#endif + } + /* + * The output L and R are reversed. + */ + for (j=0; j<32; j++) { + t = L[j]; + L[j] = R[j]; + R[j] = t; + } + /* + * The final output + * gets the inverse permutation of the very original. + */ + for (j=0; j<64; j++) + block[j] = L[FP[j]-1]; +} diff --git a/src/lib/crypto/builtin/des/d3_aead.c b/src/lib/crypto/builtin/des/d3_aead.c new file mode 100644 index 000000000..22452837e --- /dev/null +++ b/src/lib/crypto/builtin/des/d3_aead.c @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2008 by the Massachusetts Institute of Technology. + * Copyright 1995 by Richard P. Basch. All Rights Reserved. + * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. Richard P. Basch, + * Lehman Brothers and M.I.T. make no representations about the suitability + * of this software for any purpose. It is provided "as is" without + * express or implied warranty. + */ + +#include "des_int.h" +#include "f_tables.h" +#include "aead.h" + +void +krb5int_des3_cbc_encrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp1, *kp2, *kp3; + const unsigned char *ip; + unsigned char *op; + struct iov_block_state input_pos, output_pos; + unsigned char iblock[MIT_DES_BLOCK_LENGTH]; + unsigned char oblock[MIT_DES_BLOCK_LENGTH]; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp1 = (const unsigned DES_INT32 *)ks1; + kp2 = (const unsigned DES_INT32 *)ks2; + kp3 = (const unsigned DES_INT32 *)ks3; + + /* + * Initialize left and right with the contents of the initial + * vector. + */ + if (ivec != NULL) + ip = ivec; + else + ip = mit_des_zeroblock; + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + + /* + * Suitably initialized, now work the length down 8 bytes + * at a time. + */ + for (;;) { + unsigned DES_INT32 temp; + + ip = iblock; + op = oblock; + + if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) + break; + + if (input_pos.iov_pos == num_data) + break; + + GET_HALF_BLOCK(temp, ip); + left ^= temp; + GET_HALF_BLOCK(temp, ip); + right ^= temp; + + /* + * Encrypt what we have + */ + DES_DO_ENCRYPT(left, right, kp1); + DES_DO_DECRYPT(left, right, kp2); + DES_DO_ENCRYPT(left, right, kp3); + + /* + * Copy the results out + */ + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + + krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); + } + + if (ivec != NULL) + memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); +} + +void +krb5int_des3_cbc_decrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp1, *kp2, *kp3; + const unsigned char *ip; + unsigned DES_INT32 ocipherl, ocipherr; + unsigned DES_INT32 cipherl, cipherr; + unsigned char *op; + struct iov_block_state input_pos, output_pos; + unsigned char iblock[MIT_DES_BLOCK_LENGTH]; + unsigned char oblock[MIT_DES_BLOCK_LENGTH]; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp1 = (const unsigned DES_INT32 *)ks1; + kp2 = (const unsigned DES_INT32 *)ks2; + kp3 = (const unsigned DES_INT32 *)ks3; + + /* + * Decrypting is harder than encrypting because of + * the necessity of remembering a lot more things. + * Should think about this a little more... + */ + + if (num_data == 0) + return; + + /* + * Prime the old cipher with ivec. + */ + if (ivec != NULL) + ip = ivec; + else + ip = mit_des_zeroblock; + GET_HALF_BLOCK(ocipherl, ip); + GET_HALF_BLOCK(ocipherr, ip); + + /* + * Now do this in earnest until we run out of length. + */ + for (;;) { + /* + * Read a block from the input into left and + * right. Save this cipher block for later. + */ + + if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) + break; + + if (input_pos.iov_pos == num_data) + break; + + ip = iblock; + op = oblock; + + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + cipherl = left; + cipherr = right; + + /* + * Decrypt this. + */ + DES_DO_DECRYPT(left, right, kp3); + DES_DO_ENCRYPT(left, right, kp2); + DES_DO_DECRYPT(left, right, kp1); + + /* + * Xor with the old cipher to get plain + * text. Output 8 or less bytes of this. + */ + left ^= ocipherl; + right ^= ocipherr; + + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + + /* + * Save current cipher block here + */ + ocipherl = cipherl; + ocipherr = cipherr; + + krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); + } + + if (ivec != NULL) { + op = ivec; + PUT_HALF_BLOCK(ocipherl,op); + PUT_HALF_BLOCK(ocipherr, op); + } +} diff --git a/src/lib/crypto/builtin/des/d3_cbc.c b/src/lib/crypto/builtin/des/d3_cbc.c new file mode 100644 index 000000000..077e78d2c --- /dev/null +++ b/src/lib/crypto/builtin/des/d3_cbc.c @@ -0,0 +1,223 @@ +/* + * Copyright 1995 by Richard P. Basch. All Rights Reserved. + * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. Richard P. Basch, + * Lehman Brothers and M.I.T. make no representations about the suitability + * of this software for any purpose. It is provided "as is" without + * express or implied warranty. + */ + +#include "des_int.h" +#include "f_tables.h" + +/* + * Triple-DES CBC encryption mode. + */ + +#undef mit_des3_cbc_encrypt +int +mit_des3_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out, + unsigned long length, const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec, int enc) +{ + if (enc) + krb5int_des3_cbc_encrypt(in, out, length, ks1, ks2, ks3, ivec); + else + krb5int_des3_cbc_decrypt(in, out, length, ks1, ks2, ks3, ivec); + return 0; +} + +void +krb5int_des3_cbc_encrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp1, *kp2, *kp3; + const unsigned char *ip; + unsigned char *op; + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp1 = (const unsigned DES_INT32 *)ks1; + kp2 = (const unsigned DES_INT32 *)ks2; + kp3 = (const unsigned DES_INT32 *)ks3; + + /* + * Initialize left and right with the contents of the initial + * vector. + */ + ip = ivec; + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + + /* + * Suitably initialized, now work the length down 8 bytes + * at a time. + */ + ip = *in; + op = *out; + while (length > 0) { + /* + * Get more input, xor it in. If the length is + * greater than or equal to 8 this is straight + * forward. Otherwise we have to fart around. + */ + if (length >= 8) { + unsigned DES_INT32 temp; + GET_HALF_BLOCK(temp, ip); + left ^= temp; + GET_HALF_BLOCK(temp, ip); + right ^= temp; + length -= 8; + } else { + /* + * Oh, shoot. We need to pad the + * end with zeroes. Work backwards + * to do this. + */ + ip += (int) length; + switch(length) { + case 7: right ^= (*(--ip) & FF_UINT32) << 8; + case 6: right ^= (*(--ip) & FF_UINT32) << 16; + case 5: right ^= (*(--ip) & FF_UINT32) << 24; + case 4: left ^= *(--ip) & FF_UINT32; + case 3: left ^= (*(--ip) & FF_UINT32) << 8; + case 2: left ^= (*(--ip) & FF_UINT32) << 16; + case 1: left ^= (*(--ip) & FF_UINT32) << 24; + + } + length = 0; + } + + /* + * Encrypt what we have + */ + DES_DO_ENCRYPT(left, right, kp1); + DES_DO_DECRYPT(left, right, kp2); + DES_DO_ENCRYPT(left, right, kp3); + + /* + * Copy the results out + */ + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + } +} + +void +krb5int_des3_cbc_decrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp1, *kp2, *kp3; + const unsigned char *ip; + unsigned char *op; + unsigned DES_INT32 ocipherl, ocipherr; + unsigned DES_INT32 cipherl, cipherr; + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp1 = (const unsigned DES_INT32 *)ks1; + kp2 = (const unsigned DES_INT32 *)ks2; + kp3 = (const unsigned DES_INT32 *)ks3; + + /* + * Decrypting is harder than encrypting because of + * the necessity of remembering a lot more things. + * Should think about this a little more... + */ + + if (length <= 0) + return; + + /* + * Prime the old cipher with ivec. + */ + ip = ivec; + GET_HALF_BLOCK(ocipherl, ip); + GET_HALF_BLOCK(ocipherr, ip); + + /* + * Now do this in earnest until we run out of length. + */ + ip = *in; + op = *out; + for (;;) { /* check done inside loop */ + /* + * Read a block from the input into left and + * right. Save this cipher block for later. + */ + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + cipherl = left; + cipherr = right; + + /* + * Decrypt this. + */ + DES_DO_DECRYPT(left, right, kp3); + DES_DO_ENCRYPT(left, right, kp2); + DES_DO_DECRYPT(left, right, kp1); + + /* + * Xor with the old cipher to get plain + * text. Output 8 or less bytes of this. + */ + left ^= ocipherl; + right ^= ocipherr; + if (length > 8) { + length -= 8; + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + /* + * Save current cipher block here + */ + ocipherl = cipherl; + ocipherr = cipherr; + } else { + /* + * Trouble here. Start at end of output, + * work backwards. + */ + op += (int) length; + switch(length) { + case 8: *(--op) = (unsigned char) (right & 0xff); + case 7: *(--op) = (unsigned char) ((right >> 8) & 0xff); + case 6: *(--op) = (unsigned char) ((right >> 16) & 0xff); + case 5: *(--op) = (unsigned char) ((right >> 24) & 0xff); + case 4: *(--op) = (unsigned char) (left & 0xff); + case 3: *(--op) = (unsigned char) ((left >> 8) & 0xff); + case 2: *(--op) = (unsigned char) ((left >> 16) & 0xff); + case 1: *(--op) = (unsigned char) ((left >> 24) & 0xff); + } + break; /* we're done */ + } + } +} diff --git a/src/lib/crypto/builtin/des/d3_kysched.c b/src/lib/crypto/builtin/des/d3_kysched.c new file mode 100644 index 000000000..f18cc2419 --- /dev/null +++ b/src/lib/crypto/builtin/des/d3_kysched.c @@ -0,0 +1,50 @@ +/* + * Copyright 1995 by Richard P. Basch. All Rights Reserved. + * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. Richard P. Basch, + * Lehman Brothers and M.I.T. make no representations about the suitability + * of this software for any purpose. It is provided "as is" without + * express or implied warranty. + */ + +#include "k5-int.h" +#include "des_int.h" + +int +mit_des3_key_sched(mit_des3_cblock k, mit_des3_key_schedule schedule) +{ + mit_des_make_key_sched(k[0],schedule[0]); + mit_des_make_key_sched(k[1],schedule[1]); + mit_des_make_key_sched(k[2],schedule[2]); + + if (!mit_des_check_key_parity(k[0])) /* bad parity --> return -1 */ + return(-1); + if (mit_des_is_weak_key(k[0])) + return(-2); + + if (!mit_des_check_key_parity(k[1])) + return(-1); + if (mit_des_is_weak_key(k[1])) + return(-2); + + if (!mit_des_check_key_parity(k[2])) + return(-1); + if (mit_des_is_weak_key(k[2])) + return(-2); + + /* if key was good, return 0 */ + return 0; +} diff --git a/src/lib/crypto/builtin/des/deps b/src/lib/crypto/builtin/des/deps new file mode 100644 index 000000000..9a574239a --- /dev/null +++ b/src/lib/crypto/builtin/des/deps @@ -0,0 +1,158 @@ +# +# Generated makefile dependencies follow. +# +afsstring2key.so afsstring2key.po $(OUTPRE)afsstring2key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + afsstring2key.c des_int.h +d3_cbc.so d3_cbc.po $(OUTPRE)d3_cbc.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h d3_cbc.c des_int.h \ + f_tables.h +d3_aead.so d3_aead.po $(OUTPRE)d3_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../krb/aead.h \ + $(srcdir)/../../krb/cksumtypes.h d3_aead.c des_int.h \ + f_tables.h +d3_kysched.so d3_kysched.po $(OUTPRE)d3_kysched.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + d3_kysched.c des_int.h +des_prf.so des_prf.po $(OUTPRE)des_prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../krb/hash_provider/hash_provider.h \ + des_prf.c +f_aead.so f_aead.po $(OUTPRE)f_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../krb/aead.h \ + $(srcdir)/../../krb/cksumtypes.h des_int.h f_aead.c \ + f_tables.h +f_cbc.so f_cbc.po $(OUTPRE)f_cbc.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h des_int.h f_cbc.c \ + f_tables.h +f_cksum.so f_cksum.po $(OUTPRE)f_cksum.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h des_int.h f_cksum.c \ + f_tables.h +f_parity.so f_parity.po $(OUTPRE)f_parity.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + des_int.h f_parity.c +f_sched.so f_sched.po $(OUTPRE)f_sched.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h des_int.h f_sched.c +f_tables.so f_tables.po $(OUTPRE)f_tables.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + des_int.h f_tables.c f_tables.h +key_sched.so key_sched.po $(OUTPRE)key_sched.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + des_int.h key_sched.c +weak_key.so weak_key.po $(OUTPRE)weak_key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + des_int.h weak_key.c +string2key.so string2key.po $(OUTPRE)string2key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + des_int.h string2key.c diff --git a/src/lib/crypto/builtin/des/des_int.h b/src/lib/crypto/builtin/des/des_int.h new file mode 100644 index 000000000..4a1d52ae3 --- /dev/null +++ b/src/lib/crypto/builtin/des/des_int.h @@ -0,0 +1,382 @@ +/* + * lib/crypto/des/des_int.h + * + * Copyright 1987, 1988, 1990, 2002 by the Massachusetts Institute of + * Technology. All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Private include file for the Data Encryption Standard library. + */ + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +/* only do the whole thing once */ +#ifndef DES_INTERNAL_DEFS +#define DES_INTERNAL_DEFS + +#include "k5-int.h" +/* + * Begin "mit-des.h" + */ +#ifndef KRB5_MIT_DES__ +#define KRB5_MIT_DES__ + +#if defined(__MACH__) && defined(__APPLE__) +#include +#include +#if TARGET_RT_MAC_CFM +#error "Use KfM 4.0 SDK headers for CFM compilation." +#endif +#if defined(DEPRECATED_IN_MAC_OS_X_VERSION_10_5) && !defined(KRB5_SUPRESS_DEPRECATED_WARNINGS) +#define KRB5INT_DES_DEPRECATED DEPRECATED_IN_MAC_OS_X_VERSION_10_5 +#endif +#endif /* defined(__MACH__) && defined(__APPLE__) */ + +/* Macro to add deprecated attribute to DES types and functions */ +/* Currently only defined on Mac OS X 10.5 and later. */ +#ifndef KRB5INT_DES_DEPRECATED +#define KRB5INT_DES_DEPRECATED +#endif + +#include + +#if UINT_MAX >= 0xFFFFFFFFUL +#define DES_INT32 int +#define DES_UINT32 unsigned int +#else +#define DES_INT32 long +#define DES_UINT32 unsigned long +#endif + +typedef unsigned char des_cblock[8] /* crypto-block size */ +KRB5INT_DES_DEPRECATED; + +/* + * Key schedule. + * + * This used to be + * + * typedef struct des_ks_struct { + * union { DES_INT32 pad; des_cblock _;} __; + * } des_key_schedule[16]; + * + * but it would cause trouble if DES_INT32 were ever more than 4 + * bytes. The reason is that all the encryption functions cast it to + * (DES_INT32 *), and treat it as if it were DES_INT32[32]. If + * 2*sizeof(DES_INT32) is ever more than sizeof(des_cblock), the + * caller-allocated des_key_schedule will be overflowed by the key + * scheduling functions. We can't assume that every platform will + * have an exact 32-bit int, and nothing should be looking inside a + * des_key_schedule anyway. + */ +typedef struct des_ks_struct { DES_INT32 _[2]; } des_key_schedule[16] +KRB5INT_DES_DEPRECATED; + +typedef des_cblock mit_des_cblock; +typedef des_key_schedule mit_des_key_schedule; + +/* Triple-DES structures */ +typedef mit_des_cblock mit_des3_cblock[3]; +typedef mit_des_key_schedule mit_des3_key_schedule[3]; + +#define MIT_DES_ENCRYPT 1 +#define MIT_DES_DECRYPT 0 + +typedef struct mit_des_ran_key_seed { + krb5_encrypt_block eblock; + krb5_data sequence; +} mit_des_random_state; + +/* the first byte of the key is already in the keyblock */ + +#define MIT_DES_BLOCK_LENGTH (8*sizeof(krb5_octet)) +#define MIT_DES_CBC_CRC_PAD_MINIMUM CRC32_CKSUM_LENGTH +/* This used to be 8*sizeof(krb5_octet) */ +#define MIT_DES_KEYSIZE 8 + +#define MIT_DES_CBC_CKSUM_LENGTH (4*sizeof(krb5_octet)) + +/* + * Check if k5-int.h has been included before us. If so, then check to see + * that our view of the DES key size is the same as k5-int.h's. + */ +#ifdef KRB5_MIT_DES_KEYSIZE +#if MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE +error(MIT_DES_KEYSIZE does not equal KRB5_MIT_DES_KEYSIZE) +#endif /* MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE */ +#endif /* KRB5_MIT_DES_KEYSIZE */ +#endif /* KRB5_MIT_DES__ */ +/* + * End "mit-des.h" + */ + +/* afsstring2key.c */ +extern krb5_error_code mit_afs_string_to_key + (krb5_keyblock *keyblock, + const krb5_data *data, + const krb5_data *salt); +extern char *mit_afs_crypt + (const char *pw, const char *salt, char *iobuf); + +/* f_cksum.c */ +extern unsigned long mit_des_cbc_cksum + (const krb5_octet *, krb5_octet *, unsigned long , + const mit_des_key_schedule, const krb5_octet *); + +/* f_ecb.c */ +extern int mit_des_ecb_encrypt + (const mit_des_cblock *, mit_des_cblock *, mit_des_key_schedule , int ); + +/* f_cbc.c */ +extern int mit_des_cbc_encrypt (const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule schedule, + const mit_des_cblock ivec, int enc); + +#define mit_des_zeroblock krb5int_c_mit_des_zeroblock +extern const mit_des_cblock mit_des_zeroblock; + +/* fin_rndkey.c */ +extern krb5_error_code mit_des_finish_random_key + ( const krb5_encrypt_block *, + krb5_pointer *); + +/* finish_key.c */ +extern krb5_error_code mit_des_finish_key + ( krb5_encrypt_block *); + +/* init_rkey.c */ +extern krb5_error_code mit_des_init_random_key + ( const krb5_encrypt_block *, + const krb5_keyblock *, + krb5_pointer *); + +/* key_parity.c */ +extern void mit_des_fixup_key_parity (mit_des_cblock ); +extern int mit_des_check_key_parity (mit_des_cblock ); + +/* key_sched.c */ +extern int mit_des_key_sched + (mit_des_cblock , mit_des_key_schedule ); + +/* process_ky.c */ +extern krb5_error_code mit_des_process_key + ( krb5_encrypt_block *, const krb5_keyblock *); + +/* random_key.c */ +extern krb5_error_code mit_des_random_key + ( const krb5_encrypt_block *, krb5_pointer , + krb5_keyblock **); + +/* string2key.c */ +extern krb5_error_code mit_des_string_to_key + ( const krb5_encrypt_block *, + krb5_keyblock *, const krb5_data *, const krb5_data *); +extern krb5_error_code mit_des_string_to_key_int + (krb5_keyblock *, const krb5_data *, const krb5_data *); + +/* weak_key.c */ +extern int mit_des_is_weak_key (mit_des_cblock ); + +/* cmb_keys.c */ +krb5_error_code mit_des_combine_subkeys + (const krb5_keyblock *, const krb5_keyblock *, + krb5_keyblock **); + +/* f_pcbc.c */ +int mit_des_pcbc_encrypt (); + +/* f_sched.c */ +int mit_des_make_key_sched(mit_des_cblock, mit_des_key_schedule); + + +/* misc.c */ +extern void swap_bits (char *); +extern unsigned long long_swap_bits (unsigned long ); +extern unsigned long swap_six_bits_to_ansi (unsigned long ); +extern unsigned long swap_four_bits_to_ansi (unsigned long ); +extern unsigned long swap_bit_pos_1 (unsigned long ); +extern unsigned long swap_bit_pos_0 (unsigned long ); +extern unsigned long swap_bit_pos_0_to_ansi (unsigned long ); +extern unsigned long rev_swap_bit_pos_0 (unsigned long ); +extern unsigned long swap_byte_bits (unsigned long ); +extern unsigned long swap_long_bytes_bit_number (unsigned long ); +#ifdef FILE +/* XXX depends on FILE being a #define! */ +extern void test_set (FILE *, const char *, int, const char *, int); +#endif + +/* d3_ecb.c */ +extern int mit_des3_ecb_encrypt + (const mit_des_cblock *in, + mit_des_cblock *out, + mit_des_key_schedule sched1, + mit_des_key_schedule sched2, + mit_des_key_schedule sched3, + int enc); + +/* d3_cbc.c */ +extern int mit_des3_cbc_encrypt + (const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec, + int enc); + +void +krb5int_des3_cbc_encrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec); +void +krb5int_des3_cbc_decrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + const mit_des_cblock ivec); + +void +krb5int_des3_cbc_encrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + mit_des_cblock ivec); + +void +krb5int_des3_cbc_decrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule ks1, + const mit_des_key_schedule ks2, + const mit_des_key_schedule ks3, + mit_des_cblock ivec); + +#define mit_des3_cbc_encrypt(in,out,length,ks1,ks2,ks3,ivec,enc) \ + ((enc ? krb5int_des3_cbc_encrypt : krb5int_des3_cbc_decrypt) \ + (in, out, length, ks1, ks2, ks3, ivec), 0) + +void +krb5int_des_cbc_encrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule schedule, + const mit_des_cblock ivec); +void +krb5int_des_cbc_decrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule schedule, + const mit_des_cblock ivec); + +#define mit_des_cbc_encrypt(in,out,length,schedule,ivec,enc) \ + ((enc ? krb5int_des_cbc_encrypt : krb5int_des_cbc_decrypt) \ + (in, out, length, schedule, ivec), 0) + +void +krb5int_des_cbc_encrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule schedule, + mit_des_cblock ivec); + +void +krb5int_des_cbc_decrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule schedule, + mit_des_cblock ivec); + +/* d3_procky.c */ +extern krb5_error_code mit_des3_process_key + (krb5_encrypt_block * eblock, + const krb5_keyblock * keyblock); + +/* d3_kysched.c */ +extern int mit_des3_key_sched + (mit_des3_cblock key, + mit_des3_key_schedule schedule); + +/* d3_str2ky.c */ +extern krb5_error_code mit_des3_string_to_key + (const krb5_encrypt_block * eblock, + krb5_keyblock * keyblock, + const krb5_data * data, + const krb5_data * salt); + +/* u_nfold.c */ +extern krb5_error_code mit_des_n_fold + (const krb5_octet * input, + const size_t in_len, + krb5_octet * output, + const size_t out_len); + +/* u_rn_key.c */ +extern int mit_des_is_weak_keyblock + (krb5_keyblock *keyblock); + +extern void mit_des_fixup_keyblock_parity + (krb5_keyblock *keyblock); + +extern krb5_error_code mit_des_set_random_generator_seed + (const krb5_data * seed, + krb5_pointer random_state); + +extern krb5_error_code mit_des_set_random_sequence_number + (const krb5_data * sequence, + krb5_pointer random_state); +krb5_error_code +krb5int_des_prf (const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out); +#endif /*DES_INTERNAL_DEFS*/ diff --git a/src/lib/crypto/builtin/des/des_prf.c b/src/lib/crypto/builtin/des/des_prf.c new file mode 100644 index 000000000..a86ba907c --- /dev/null +++ b/src/lib/crypto/builtin/des/des_prf.c @@ -0,0 +1,54 @@ +/* + * lib/crypto/des/des_prf.c + * + * Copyright (C) 2004, 2009 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * This file contains an implementation of the RFC 3961 PRF for + * des-cbc-crc, des-cbc-md4, and des-cbc-md5 enctypes. + */ + +#include "k5-int.h" +#include "hash_provider/hash_provider.h" /* XXX is this ok? */ + +krb5_error_code +krb5int_des_prf (const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out) +{ + krb5_data tmp; + krb5_error_code ret = 0; + + hash = &krb5int_hash_md5; /* MD5 is always used. */ + tmp.length = hash->hashsize; + tmp.data = malloc(hash->hashsize); + if (tmp.data == NULL) + return ENOMEM; + ret = hash->hash(1, in, &tmp); + if (ret == 0) + ret = enc->encrypt(key, NULL, &tmp, out); + free(tmp.data); + return ret; +} diff --git a/src/lib/crypto/builtin/des/doc/libdes.doc b/src/lib/crypto/builtin/des/doc/libdes.doc new file mode 100644 index 000000000..70f9f336a --- /dev/null +++ b/src/lib/crypto/builtin/des/doc/libdes.doc @@ -0,0 +1,208 @@ + + How to use the Kerberos encryption library. + + Revised 10/15/85 spm + +1) The following include file is needed: + + /projects/auth/include/des.h (VAX) + --------------- (PC8086) + +2) The encryption library that should be linked to is: + + /projects/auth/lib/libdes.a (VAX) +| /projects/auth/ibm/lib/libdes.a (PC8086 cross-compilation environment) + +3) For each key that may be simultaneously active, + allocate (either compile or malloc) a "Key_schedule" struct, + defined in "des.h" + +4) Create key schedules, as needed, prior to using the encryption + routines, via "des_set_key()". + +5) Setup the input and output areas. Make sure to note the restrictions + on lengths being multiples of eight bytes. + +6) Invoke the encryption/decryption routines, "ecb_encrypt()" + or "cbc_encrypt()" + +7) To generate a cryptographic checksum, use "cbc_cksum()" +/* ---------------------------------------------------------------- */ + + Routine Interfaces-- + +/* ----------------------------------------------------------------- */ + +int + des_set_key(k,schedule) + C_Block *k; + Key_schedule schedule; + + Calculates a key schedule from (all) eight bytes of the input key, and + puts it into the indicated "Key_schedule" struct; + + Make sure to pass valid eight bytes, no padding or other processing + it done. + + The key schedule is then used in subsequent encryption/decryption + operations. Many key schedules may be created and cached for later + use. + + The user is responsible to clear keys and schedules no longer needed + to prevent their disclosure. + +| Checks the parity of the key provided, to make sure it is odd per +| FIPS spec. Returns 0 value for key ok, 1 for key_parity error. + +/* ---------------------------------------------------------------- */ + +int + ecb_encrypt(input,output,schedule,encrypt) + C_Block *input; /* ptr to eight byte input value */ + C_Block *output; /* ptr to eight byte output value */ + int encrypt; /* 0 ==> decrypt, else encrypt */ + Key_schedule schedule; /* addr of key schedule */ + +This is the low level routine that encrypts or decrypts a single 8-byte +block in electronic code book mode. Always transforms the input +data into the output data. + +If encrypt is non-zero, the input (cleartext) is encrypted into the +output (ciphertext) using the specified key_schedule, pre-set via "des_set_key". + +If encrypt is zero, the input (now ciphertext) is decrypted into +the output (now cleartext). + +Input and output may be the same space. + +Does not return any meaningful value. Void is not used for compatibility +with other compilers. + +/* -------------------------------------------------------------- */ + +int + cbc_encrypt(input,output,length,schedule,ivec,encrypt) + + C_Block *input; /* ptr to input data */ + C_Block *output; /* ptr to output data */ + int length; /* desired length, in bytes */ + Key_schedule schedule; /* addr of precomputed schedule */ + C_Block *ivec; /* pointer to 8 byte initialization + * vector + */ + int encrypt /* 0 ==> decrypt; else encrypt*/ + + + If encrypt is non-zero, the routine cipher-block-chain encrypts + the INPUT (cleartext) into the OUTPUT (ciphertext) using the provided + key schedule and initialization vector. If the length is not an integral + multiple of eight bytes, the last block is copied to a temp and zero + filled (highest addresses). The output is ALWAYS an integral multiple + of eight bytes. + + If encrypt is zero, the routine cipher-block chain decrypts the INPUT + (ciphertext) into the OUTPUT (cleartext) using the provided key schedule + and initialization vector. Decryption ALWAYS operates on integral + multiples of 8 bytes, so will round the length provided up to the + appropriate multiple. Consequently, it will always produce the rounded-up + number of bytes of output cleartext. The application must determine if + the output cleartext was zero-padded due to cleartext lengths not integral + multiples of 8. + + No errors or meaningful value are returned. Void is not used for + compatibility with other compilers. + + +/* cbc checksum (MAC) only routine ---------------------------------------- */ +int + cbc_cksum(input,output,length,schedule,ivec) + + C_Block *input; /* >= length bytes of inputtext */ + C_Block *output; /* >= length bytes of outputtext */ + int length; /* in bytes */ + Key_schedule schedule; /* precomputed key schedule */ + C_Block *ivec; /* 8 bytes of ivec */ + + + Produces a cryptographic checksum, 8 bytes, by cipher-block-chain + encrypting the input, discarding the ciphertext output, and only retaining + the last ciphertext 8-byte block. Uses the provided key schedule and ivec. + The input is effectively zero-padded to an integral multiple of + eight bytes, though the original input is not modified. + + No meaningful value is returned. Void is not used for compatibility + with other compilers. + + +/* random_key ----------------------------------------*/ +int + random_key(key) + + C_Block *key; + + The start for the random number generated is set from the current time + in microseconds, then the random number generator is invoked + to create an eight byte output key (not a schedule). The key + generated is set to odd parity per FIPS spec. + + The caller must supply space for the output key, pointed to + by "*key", then after getting a new key, call the des_set_key() + routine when needed. + + No meaningfull value is returned. Void is not used for compatibility + with other compilers. + + +/* string_to_key --------------------------------------------*/ + +int + string_to_key(str,key) + register char *str; + register C_Block *key; + + This routines converts an arbitrary length, null terminated string + to an 8 byte DES key, with each byte parity set to odd, per FIPS spec. + + The algorithm is as follows: + +| Take the first 8 bytes and remove the parity (leaving 56 bits). +| Do the same for the second 8 bytes, and the third, etc. Do this for +| as many sets of 8 bytes as necessary, filling in the remainder of the +| last set with nulls. Fold the second set back on the first (i.e. bit +| 0 over bit 55, and bit 55 over bit 0). Fold the third over the second +| (bit 0 of the third set is now over bit 0 of the first set). Repeat +| until you have done this to all sets. Xor the folded sets. Break the +| result into 8 7 bit bytes, and generate odd parity for each byte. You +| now have 64 bits. Note that DES takes a 64 bit key, and uses only the +| non parity bits. + + +/* read_password -------------------------------------------*/ + +read_password(k,prompt,verify) + C_Block *k; + char *prompt; + int verify; + +This routine issues the supplied prompt, turns off echo, if possible, and +reads an input string. If verify is non-zero, it does it again, for use +in applications such as changing a password. If verify is non-zero, both +versions are compared, and the input is requested repeatedly until they +match. Then, the input string is mapped into a valid DES key, internally +using the string_to_key routine. The newly created key is copied to the +area pointed to by parameter "k". + +No meaningful value is returned. If an error occurs trying to manipulate +the terminal echo, the routine forces the process to exit. + +/* get_line ------------------------*/ +long get_line(p,max) + char *p; + long max; + +Reads input characters from standard input until either a newline appears or +else the max length is reached. The characters read are stuffed into +the string pointed to, which will always be null terminated. The newline +is not inserted in the string. The max parameter includes the byte needed +for the null terminator, so allocate and pass one more than the maximum +string length desired. diff --git a/src/lib/crypto/builtin/des/f_aead.c b/src/lib/crypto/builtin/des/f_aead.c new file mode 100644 index 000000000..170482c93 --- /dev/null +++ b/src/lib/crypto/builtin/des/f_aead.c @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2008 by the Massachusetts Institute of Technology. + * Copyright 1995 by Richard P. Basch. All Rights Reserved. + * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used + * in advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. Richard P. Basch, + * Lehman Brothers and M.I.T. make no representations about the suitability + * of this software for any purpose. It is provided "as is" without + * express or implied warranty. + */ + +#include "des_int.h" +#include "f_tables.h" +#include "aead.h" + +void +krb5int_des_cbc_encrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule schedule, + mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp; + const unsigned char *ip; + unsigned char *op; + struct iov_block_state input_pos, output_pos; + unsigned char iblock[MIT_DES_BLOCK_LENGTH]; + unsigned char oblock[MIT_DES_BLOCK_LENGTH]; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp = (const unsigned DES_INT32 *)schedule; + + /* + * Initialize left and right with the contents of the initial + * vector. + */ + if (ivec != NULL) + ip = ivec; + else + ip = mit_des_zeroblock; + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + + /* + * Suitably initialized, now work the length down 8 bytes + * at a time. + */ + for (;;) { + unsigned DES_INT32 temp; + + ip = iblock; + op = oblock; + + if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) + break; + + if (input_pos.iov_pos == num_data) + break; + + GET_HALF_BLOCK(temp, ip); + left ^= temp; + GET_HALF_BLOCK(temp, ip); + right ^= temp; + + /* + * Encrypt what we have + */ + DES_DO_ENCRYPT(left, right, kp); + + /* + * Copy the results out + */ + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + + krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); + } + + if (ivec != NULL) + memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); +} + +void +krb5int_des_cbc_decrypt_iov(krb5_crypto_iov *data, + unsigned long num_data, + const mit_des_key_schedule schedule, + mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp; + const unsigned char *ip; + unsigned DES_INT32 ocipherl, ocipherr; + unsigned DES_INT32 cipherl, cipherr; + unsigned char *op; + struct iov_block_state input_pos, output_pos; + unsigned char iblock[MIT_DES_BLOCK_LENGTH]; + unsigned char oblock[MIT_DES_BLOCK_LENGTH]; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp = (const unsigned DES_INT32 *)schedule; + + /* + * Decrypting is harder than encrypting because of + * the necessity of remembering a lot more things. + * Should think about this a little more... + */ + + if (num_data == 0) + return; + + /* + * Prime the old cipher with ivec. + */ + if (ivec != NULL) + ip = ivec; + else + ip = mit_des_zeroblock; + GET_HALF_BLOCK(ocipherl, ip); + GET_HALF_BLOCK(ocipherr, ip); + + /* + * Now do this in earnest until we run out of length. + */ + for (;;) { + /* + * Read a block from the input into left and + * right. Save this cipher block for later. + */ + + if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) + break; + + if (input_pos.iov_pos == num_data) + break; + + ip = iblock; + op = oblock; + + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + cipherl = left; + cipherr = right; + + /* + * Decrypt this. + */ + DES_DO_DECRYPT(left, right, kp); + + /* + * Xor with the old cipher to get plain + * text. Output 8 or less bytes of this. + */ + left ^= ocipherl; + right ^= ocipherr; + + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + + /* + * Save current cipher block here + */ + ocipherl = cipherl; + ocipherr = cipherr; + + krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); + } + + if (ivec != NULL) + memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); +} diff --git a/src/lib/crypto/builtin/des/f_cbc.c b/src/lib/crypto/builtin/des/f_cbc.c new file mode 100644 index 000000000..0949ba140 --- /dev/null +++ b/src/lib/crypto/builtin/des/f_cbc.c @@ -0,0 +1,274 @@ +/* + * lib/crypto/des/f_cbc.c + * + * Copyright (C) 1990 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * DES implementation donated by Dennis Ferguson + */ + +/* + * des_cbc_encrypt.c - an implementation of the DES cipher function in cbc mode + */ +#include "des_int.h" +#include "f_tables.h" + +/* + * des_cbc_encrypt - {en,de}crypt a stream in CBC mode + */ + +/* + * This routine performs DES cipher-block-chaining operation, either + * encrypting from cleartext to ciphertext, if encrypt != 0 or + * decrypting from ciphertext to cleartext, if encrypt == 0. + * + * The key schedule is passed as an arg, as well as the cleartext or + * ciphertext. The cleartext and ciphertext should be in host order. + * + * NOTE-- the output is ALWAYS an multiple of 8 bytes long. If not + * enough space was provided, your program will get trashed. + * + * For encryption, the cleartext string is null padded, at the end, to + * an integral multiple of eight bytes. + * + * For decryption, the ciphertext will be used in integral multiples + * of 8 bytes, but only the first "length" bytes returned into the + * cleartext. + */ + +const mit_des_cblock mit_des_zeroblock /* = all zero */; + +#undef mit_des_cbc_encrypt +int +mit_des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out, + unsigned long length, const mit_des_key_schedule schedule, + const mit_des_cblock ivec, int enc) +{ + /* + * Deal with encryption and decryption separately. + */ + if (enc) + krb5int_des_cbc_encrypt(in, out, length, schedule, ivec); + else + krb5int_des_cbc_decrypt(in, out, length, schedule, ivec); + return 0; +} + +void +krb5int_des_cbc_encrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule schedule, + const mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp; + const unsigned char *ip; + unsigned char *op; + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp = (const unsigned DES_INT32 *)schedule; + + /* + * Initialize left and right with the contents of the initial + * vector. + */ + ip = ivec; + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + + /* + * Suitably initialized, now work the length down 8 bytes + * at a time. + */ + ip = *in; + op = *out; + while (length > 0) { + /* + * Get more input, xor it in. If the length is + * greater than or equal to 8 this is straight + * forward. Otherwise we have to fart around. + */ + if (length >= 8) { + unsigned DES_INT32 temp; + GET_HALF_BLOCK(temp, ip); + left ^= temp; + GET_HALF_BLOCK(temp, ip); + right ^= temp; + length -= 8; + } else { + /* + * Oh, shoot. We need to pad the + * end with zeroes. Work backwards + * to do this. + */ + ip += (int) length; + switch(length) { + case 7: + right ^= (*(--ip) & FF_UINT32) << 8; + case 6: + right ^= (*(--ip) & FF_UINT32) << 16; + case 5: + right ^= (*(--ip) & FF_UINT32) << 24; + case 4: + left ^= *(--ip) & FF_UINT32; + case 3: + left ^= (*(--ip) & FF_UINT32) << 8; + case 2: + left ^= (*(--ip) & FF_UINT32) << 16; + case 1: + left ^= (*(--ip) & FF_UINT32) << 24; + break; + } + length = 0; + } + + /* + * Encrypt what we have + */ + DES_DO_ENCRYPT(left, right, kp); + + /* + * Copy the results out + */ + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + } +} + +void +krb5int_des_cbc_decrypt(const mit_des_cblock *in, + mit_des_cblock *out, + unsigned long length, + const mit_des_key_schedule schedule, + const mit_des_cblock ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp; + const unsigned char *ip; + unsigned char *op; + unsigned DES_INT32 ocipherl, ocipherr; + unsigned DES_INT32 cipherl, cipherr; + + /* + * Get key pointer here. This won't need to be reinitialized + */ + kp = (const unsigned DES_INT32 *)schedule; + + /* + * Decrypting is harder than encrypting because of + * the necessity of remembering a lot more things. + * Should think about this a little more... + */ + + if (length <= 0) + return; + + /* + * Prime the old cipher with ivec. + */ + ip = ivec; + GET_HALF_BLOCK(ocipherl, ip); + GET_HALF_BLOCK(ocipherr, ip); + + /* + * Now do this in earnest until we run out of length. + */ + ip = *in; + op = *out; + for (;;) { /* check done inside loop */ + /* + * Read a block from the input into left and + * right. Save this cipher block for later. + */ + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + cipherl = left; + cipherr = right; + + /* + * Decrypt this. + */ + DES_DO_DECRYPT(left, right, kp); + + /* + * Xor with the old cipher to get plain + * text. Output 8 or less bytes of this. + */ + left ^= ocipherl; + right ^= ocipherr; + if (length > 8) { + length -= 8; + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + /* + * Save current cipher block here + */ + ocipherl = cipherl; + ocipherr = cipherr; + } else { + /* + * Trouble here. Start at end of output, + * work backwards. + */ + op += (int) length; + switch(length) { + case 8: + *(--op) = (unsigned char) (right & 0xff); + case 7: + *(--op) = (unsigned char) ((right >> 8) & 0xff); + case 6: + *(--op) = (unsigned char) ((right >> 16) & 0xff); + case 5: + *(--op) = (unsigned char) ((right >> 24) & 0xff); + case 4: + *(--op) = (unsigned char) (left & 0xff); + case 3: + *(--op) = (unsigned char) ((left >> 8) & 0xff); + case 2: + *(--op) = (unsigned char) ((left >> 16) & 0xff); + case 1: + *(--op) = (unsigned char) ((left >> 24) & 0xff); + break; + } + break; /* we're done */ + } + } +} + +#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) +void krb5int_des_do_encrypt_2 (unsigned DES_INT32 *left, + unsigned DES_INT32 *right, + const unsigned DES_INT32 *kp) +{ + DES_DO_ENCRYPT_1 (*left, *right, kp); +} + +void krb5int_des_do_decrypt_2 (unsigned DES_INT32 *left, + unsigned DES_INT32 *right, + const unsigned DES_INT32 *kp) +{ + DES_DO_DECRYPT_1 (*left, *right, kp); +} +#endif diff --git a/src/lib/crypto/builtin/des/f_cksum.c b/src/lib/crypto/builtin/des/f_cksum.c new file mode 100644 index 000000000..1c03da43e --- /dev/null +++ b/src/lib/crypto/builtin/des/f_cksum.c @@ -0,0 +1,136 @@ +/* + * lib/crypto/des/f_cksum.c + * + * Copyright (C) 1990 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * DES implementation donated by Dennis Ferguson + */ + +/* + * des_cbc_cksum.c - compute an 8 byte checksum using DES in CBC mode + */ +#include "des_int.h" +#include "f_tables.h" + +/* + * This routine performs DES cipher-block-chaining checksum operation, + * a.k.a. Message Authentication Code. It ALWAYS encrypts from input + * to a single 64 bit output MAC checksum. + * + * The key schedule is passed as an arg, as well as the cleartext or + * ciphertext. The cleartext and ciphertext should be in host order. + * + * NOTE-- the output is ALWAYS 8 bytes long. If not enough space was + * provided, your program will get trashed. + * + * The input is null padded, at the end (highest addr), to an integral + * multiple of eight bytes. + */ + +unsigned long +mit_des_cbc_cksum(const krb5_octet *in, krb5_octet *out, + unsigned long length, const mit_des_key_schedule schedule, + const krb5_octet *ivec) +{ + unsigned DES_INT32 left, right; + const unsigned DES_INT32 *kp; + const unsigned char *ip; + unsigned char *op; + register DES_INT32 len; + + /* + * Initialize left and right with the contents of the initial + * vector. + */ + ip = ivec; + GET_HALF_BLOCK(left, ip); + GET_HALF_BLOCK(right, ip); + + /* + * Suitably initialized, now work the length down 8 bytes + * at a time. + */ + ip = in; + len = length; + while (len > 0) { + /* + * Get more input, xor it in. If the length is + * greater than or equal to 8 this is straight + * forward. Otherwise we have to fart around. + */ + if (len >= 8) { + unsigned DES_INT32 temp; + GET_HALF_BLOCK(temp, ip); + left ^= temp; + GET_HALF_BLOCK(temp, ip); + right ^= temp; + len -= 8; + } else { + /* + * Oh, shoot. We need to pad the + * end with zeroes. Work backwards + * to do this. + */ + ip += (int) len; + switch(len) { + case 7: + right ^= (*(--ip) & FF_UINT32) << 8; + case 6: + right ^= (*(--ip) & FF_UINT32) << 16; + case 5: + right ^= (*(--ip) & FF_UINT32) << 24; + case 4: + left ^= *(--ip) & FF_UINT32; + case 3: + left ^= (*(--ip) & FF_UINT32) << 8; + case 2: + left ^= (*(--ip) & FF_UINT32) << 16; + case 1: + left ^= (*(--ip) & FF_UINT32) << 24; + break; + } + len = 0; + } + + /* + * Encrypt what we have + */ + kp = (const unsigned DES_INT32 *)schedule; + DES_DO_ENCRYPT(left, right, kp); + } + + /* + * Done. Left and right have the checksum. Put it into + * the output. + */ + op = out; + PUT_HALF_BLOCK(left, op); + PUT_HALF_BLOCK(right, op); + + /* + * Return right. I'll bet the MIT code returns this + * inconsistantly (with the low order byte of the checksum + * not always in the low order byte of the DES_INT32). We won't. + */ + return right & 0xFFFFFFFFUL; +} diff --git a/src/lib/crypto/builtin/des/f_parity.c b/src/lib/crypto/builtin/des/f_parity.c new file mode 100644 index 000000000..426386303 --- /dev/null +++ b/src/lib/crypto/builtin/des/f_parity.c @@ -0,0 +1,56 @@ +/* + * These routines check and fix parity of encryption keys for the DES + * algorithm. + * + * They are a replacement for routines in key_parity.c, that don't require + * the table building that they do. + * + * Mark Eichin -- Cygnus Support + */ + + +#include "des_int.h" + +/* + * des_fixup_key_parity: Forces odd parity per byte; parity is bits + * 8,16,...64 in des order, implies 0, 8, 16, ... + * vax order. + */ +#define smask(step) ((1<>step)&smask(step))) +#define parity_char(x) pstep(pstep(pstep((x),4),2),1) + +void +mit_des_fixup_key_parity(mit_des_cblock key) +{ + unsigned int i; + for (i=0; i> 29) & 0x7] + | (PC1_CL[(tmp >> 21) & 0x7] << 1) + | (PC1_CL[(tmp >> 13) & 0x7] << 2) + | (PC1_CL[(tmp >> 5) & 0x7] << 3); + d = PC1_DL[(tmp >> 25) & 0xf] + | (PC1_DL[(tmp >> 17) & 0xf] << 1) + | (PC1_DL[(tmp >> 9) & 0xf] << 2) + | (PC1_DL[(tmp >> 1) & 0xf] << 3); + + tmp = load_32_be(k), k += 4; + + c |= PC1_CR[(tmp >> 28) & 0xf] + | (PC1_CR[(tmp >> 20) & 0xf] << 1) + | (PC1_CR[(tmp >> 12) & 0xf] << 2) + | (PC1_CR[(tmp >> 4) & 0xf] << 3); + d |= PC1_DR[(tmp >> 25) & 0x7] + | (PC1_DR[(tmp >> 17) & 0x7] << 1) + | (PC1_DR[(tmp >> 9) & 0x7] << 2) + | (PC1_DR[(tmp >> 1) & 0x7] << 3); + } + + { + /* + * Need several temporaries in here + */ + register unsigned DES_INT32 ltmp, rtmp; + register unsigned DES_INT32 *k; + register int two_bit_shifts; + register int i; + /* + * Now iterate to compute the key schedule. Note that we + * record the entire set of subkeys in 6 bit chunks since + * they are used that way. At 6 bits/char, we need + * 48/6 char's/subkey * 16 subkeys/encryption == 128 bytes. + * The schedule must be this big. + */ + k = (unsigned DES_INT32 *)schedule; + two_bit_shifts = TWO_BIT_SHIFTS; + for (i = 16; i > 0; i--) { + /* + * Do the rotation. One bit and two bit rotations + * are done separately. Note C and D are 28 bits. + */ + if (two_bit_shifts & 0x1) { + c = ((c << 2) & 0xffffffc) | (c >> 26); + d = ((d << 2) & 0xffffffc) | (d >> 26); + } else { + c = ((c << 1) & 0xffffffe) | (c >> 27); + d = ((d << 1) & 0xffffffe) | (d >> 27); + } + two_bit_shifts >>= 1; + + /* + * Apply permutted choice 2 to C to get the first + * 24 bits worth of keys. Note that bits 9, 18, 22 + * and 25 (using DES numbering) in C are unused. The + * shift-mask stuff is done to delete these bits from + * the indices, since this cuts the table size in half. + * + * The table is torqued, by the way. If the standard + * byte order for this (high to low order) is 1234, + * the table actually gives us 4132. + */ + ltmp = PC2_C[0][((c >> 22) & 0x3f)] + | PC2_C[1][((c >> 15) & 0xf) | ((c >> 16) & 0x30)] + | PC2_C[2][((c >> 4) & 0x3) | ((c >> 9) & 0x3c)] + | PC2_C[3][((c ) & 0x7) | ((c >> 4) & 0x38)]; + /* + * Apply permutted choice 2 to D to get the other half. + * Here, bits 7, 10, 15 and 26 go unused. The sqeezing + * actually turns out to be cheaper here. + * + * This table is similarly torqued. If the standard + * byte order is 5678, the table has the bytes permuted + * to give us 7685. + */ + rtmp = PC2_D[0][((d >> 22) & 0x3f)] + | PC2_D[1][((d >> 14) & 0xf) | ((d >> 15) & 0x30)] + | PC2_D[2][((d >> 7) & 0x3f)] + | PC2_D[3][((d ) & 0x3) | ((d >> 1) & 0x3c)]; + + /* + * Make up two words of the key schedule, with a + * byte order which is convenient for the DES + * inner loop. The high order (first) word will + * hold bytes 7135 (high to low order) while the + * second holds bytes 4682. + */ + *k++ = (ltmp & 0x00ffff00) | (rtmp & 0xff0000ff); + *k++ = (ltmp & 0xff0000ff) | (rtmp & 0x00ffff00); + } + } + return (0); +} diff --git a/src/lib/crypto/builtin/des/f_tables.c b/src/lib/crypto/builtin/des/f_tables.c new file mode 100644 index 000000000..42426bc0a --- /dev/null +++ b/src/lib/crypto/builtin/des/f_tables.c @@ -0,0 +1,370 @@ +/* + * lib/crypto/des/f_tables.c + * + * Copyright (C) 1990 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * DES implementation donated by Dennis Ferguson + */ + +/* + * des_tables.c - precomputed tables used for the DES cipher function + */ + +/* + * Include the header file so something will complain if the + * declarations get out of sync + */ +#include "des_int.h" +#include "f_tables.h" + +/* + * These tables may be declared const if you want. Many compilers + * don't support this, though. + */ + +/* + * The DES algorithm which uses these is intended to be fairly speedy + * at the expense of some memory. All the standard hacks are used. + * The S boxes and the P permutation are precomputed into one table. + * The E box never actually appears explicitly since it is easy to apply + * this algorithmically as needed. The initial permutation and final + * (inverse initial) permutation are computed from tables designed to + * permute one byte at a time. This should run pretty fast on machines + * with 32 bit words and bit field/multiple bit shift instructions which + * are fast. + */ + +/* + * The initial permutation array. This is used to compute both the + * left and the right halves of the initial permutation using bytes + * from words made from the following operations: + * + * ((left & 0x55555555) << 1) | (right & 0x55555555) for left half + * (left & 0xaaaaaaaa) | ((right & 0xaaaaaaaa) >> 1) for right half + * + * The scheme is that we index into the table using each byte. The + * result from the high order byte is or'd with the result from the + * next byte shifted left once is or'd with the result from the next + * byte shifted left twice if or'd with the result from the low order + * byte shifted left by three. Clear? + */ + +const unsigned DES_INT32 des_IP_table[256] = { + 0x00000000, 0x00000010, 0x00000001, 0x00000011, + 0x00001000, 0x00001010, 0x00001001, 0x00001011, + 0x00000100, 0x00000110, 0x00000101, 0x00000111, + 0x00001100, 0x00001110, 0x00001101, 0x00001111, + 0x00100000, 0x00100010, 0x00100001, 0x00100011, + 0x00101000, 0x00101010, 0x00101001, 0x00101011, + 0x00100100, 0x00100110, 0x00100101, 0x00100111, + 0x00101100, 0x00101110, 0x00101101, 0x00101111, + 0x00010000, 0x00010010, 0x00010001, 0x00010011, + 0x00011000, 0x00011010, 0x00011001, 0x00011011, + 0x00010100, 0x00010110, 0x00010101, 0x00010111, + 0x00011100, 0x00011110, 0x00011101, 0x00011111, + 0x00110000, 0x00110010, 0x00110001, 0x00110011, + 0x00111000, 0x00111010, 0x00111001, 0x00111011, + 0x00110100, 0x00110110, 0x00110101, 0x00110111, + 0x00111100, 0x00111110, 0x00111101, 0x00111111, + 0x10000000, 0x10000010, 0x10000001, 0x10000011, + 0x10001000, 0x10001010, 0x10001001, 0x10001011, + 0x10000100, 0x10000110, 0x10000101, 0x10000111, + 0x10001100, 0x10001110, 0x10001101, 0x10001111, + 0x10100000, 0x10100010, 0x10100001, 0x10100011, + 0x10101000, 0x10101010, 0x10101001, 0x10101011, + 0x10100100, 0x10100110, 0x10100101, 0x10100111, + 0x10101100, 0x10101110, 0x10101101, 0x10101111, + 0x10010000, 0x10010010, 0x10010001, 0x10010011, + 0x10011000, 0x10011010, 0x10011001, 0x10011011, + 0x10010100, 0x10010110, 0x10010101, 0x10010111, + 0x10011100, 0x10011110, 0x10011101, 0x10011111, + 0x10110000, 0x10110010, 0x10110001, 0x10110011, + 0x10111000, 0x10111010, 0x10111001, 0x10111011, + 0x10110100, 0x10110110, 0x10110101, 0x10110111, + 0x10111100, 0x10111110, 0x10111101, 0x10111111, + 0x01000000, 0x01000010, 0x01000001, 0x01000011, + 0x01001000, 0x01001010, 0x01001001, 0x01001011, + 0x01000100, 0x01000110, 0x01000101, 0x01000111, + 0x01001100, 0x01001110, 0x01001101, 0x01001111, + 0x01100000, 0x01100010, 0x01100001, 0x01100011, + 0x01101000, 0x01101010, 0x01101001, 0x01101011, + 0x01100100, 0x01100110, 0x01100101, 0x01100111, + 0x01101100, 0x01101110, 0x01101101, 0x01101111, + 0x01010000, 0x01010010, 0x01010001, 0x01010011, + 0x01011000, 0x01011010, 0x01011001, 0x01011011, + 0x01010100, 0x01010110, 0x01010101, 0x01010111, + 0x01011100, 0x01011110, 0x01011101, 0x01011111, + 0x01110000, 0x01110010, 0x01110001, 0x01110011, + 0x01111000, 0x01111010, 0x01111001, 0x01111011, + 0x01110100, 0x01110110, 0x01110101, 0x01110111, + 0x01111100, 0x01111110, 0x01111101, 0x01111111, + 0x11000000, 0x11000010, 0x11000001, 0x11000011, + 0x11001000, 0x11001010, 0x11001001, 0x11001011, + 0x11000100, 0x11000110, 0x11000101, 0x11000111, + 0x11001100, 0x11001110, 0x11001101, 0x11001111, + 0x11100000, 0x11100010, 0x11100001, 0x11100011, + 0x11101000, 0x11101010, 0x11101001, 0x11101011, + 0x11100100, 0x11100110, 0x11100101, 0x11100111, + 0x11101100, 0x11101110, 0x11101101, 0x11101111, + 0x11010000, 0x11010010, 0x11010001, 0x11010011, + 0x11011000, 0x11011010, 0x11011001, 0x11011011, + 0x11010100, 0x11010110, 0x11010101, 0x11010111, + 0x11011100, 0x11011110, 0x11011101, 0x11011111, + 0x11110000, 0x11110010, 0x11110001, 0x11110011, + 0x11111000, 0x11111010, 0x11111001, 0x11111011, + 0x11110100, 0x11110110, 0x11110101, 0x11110111, + 0x11111100, 0x11111110, 0x11111101, 0x11111111 +}; + +/* + * The final permutation array. Like the IP array, used + * to compute both the left and right results from the bytes + * of words computed from: + * + * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result + * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result + * + * The result from the high order byte is shifted left 6 bits and + * or'd with the result from the next byte shifted left 4 bits, which + * is or'd with the result from the next byte shifted left 2 bits, + * which is or'd with the result from the low byte. + */ +const unsigned DES_INT32 des_FP_table[256] = { + 0x00000000, 0x02000000, 0x00020000, 0x02020000, + 0x00000200, 0x02000200, 0x00020200, 0x02020200, + 0x00000002, 0x02000002, 0x00020002, 0x02020002, + 0x00000202, 0x02000202, 0x00020202, 0x02020202, + 0x01000000, 0x03000000, 0x01020000, 0x03020000, + 0x01000200, 0x03000200, 0x01020200, 0x03020200, + 0x01000002, 0x03000002, 0x01020002, 0x03020002, + 0x01000202, 0x03000202, 0x01020202, 0x03020202, + 0x00010000, 0x02010000, 0x00030000, 0x02030000, + 0x00010200, 0x02010200, 0x00030200, 0x02030200, + 0x00010002, 0x02010002, 0x00030002, 0x02030002, + 0x00010202, 0x02010202, 0x00030202, 0x02030202, + 0x01010000, 0x03010000, 0x01030000, 0x03030000, + 0x01010200, 0x03010200, 0x01030200, 0x03030200, + 0x01010002, 0x03010002, 0x01030002, 0x03030002, + 0x01010202, 0x03010202, 0x01030202, 0x03030202, + 0x00000100, 0x02000100, 0x00020100, 0x02020100, + 0x00000300, 0x02000300, 0x00020300, 0x02020300, + 0x00000102, 0x02000102, 0x00020102, 0x02020102, + 0x00000302, 0x02000302, 0x00020302, 0x02020302, + 0x01000100, 0x03000100, 0x01020100, 0x03020100, + 0x01000300, 0x03000300, 0x01020300, 0x03020300, + 0x01000102, 0x03000102, 0x01020102, 0x03020102, + 0x01000302, 0x03000302, 0x01020302, 0x03020302, + 0x00010100, 0x02010100, 0x00030100, 0x02030100, + 0x00010300, 0x02010300, 0x00030300, 0x02030300, + 0x00010102, 0x02010102, 0x00030102, 0x02030102, + 0x00010302, 0x02010302, 0x00030302, 0x02030302, + 0x01010100, 0x03010100, 0x01030100, 0x03030100, + 0x01010300, 0x03010300, 0x01030300, 0x03030300, + 0x01010102, 0x03010102, 0x01030102, 0x03030102, + 0x01010302, 0x03010302, 0x01030302, 0x03030302, + 0x00000001, 0x02000001, 0x00020001, 0x02020001, + 0x00000201, 0x02000201, 0x00020201, 0x02020201, + 0x00000003, 0x02000003, 0x00020003, 0x02020003, + 0x00000203, 0x02000203, 0x00020203, 0x02020203, + 0x01000001, 0x03000001, 0x01020001, 0x03020001, + 0x01000201, 0x03000201, 0x01020201, 0x03020201, + 0x01000003, 0x03000003, 0x01020003, 0x03020003, + 0x01000203, 0x03000203, 0x01020203, 0x03020203, + 0x00010001, 0x02010001, 0x00030001, 0x02030001, + 0x00010201, 0x02010201, 0x00030201, 0x02030201, + 0x00010003, 0x02010003, 0x00030003, 0x02030003, + 0x00010203, 0x02010203, 0x00030203, 0x02030203, + 0x01010001, 0x03010001, 0x01030001, 0x03030001, + 0x01010201, 0x03010201, 0x01030201, 0x03030201, + 0x01010003, 0x03010003, 0x01030003, 0x03030003, + 0x01010203, 0x03010203, 0x01030203, 0x03030203, + 0x00000101, 0x02000101, 0x00020101, 0x02020101, + 0x00000301, 0x02000301, 0x00020301, 0x02020301, + 0x00000103, 0x02000103, 0x00020103, 0x02020103, + 0x00000303, 0x02000303, 0x00020303, 0x02020303, + 0x01000101, 0x03000101, 0x01020101, 0x03020101, + 0x01000301, 0x03000301, 0x01020301, 0x03020301, + 0x01000103, 0x03000103, 0x01020103, 0x03020103, + 0x01000303, 0x03000303, 0x01020303, 0x03020303, + 0x00010101, 0x02010101, 0x00030101, 0x02030101, + 0x00010301, 0x02010301, 0x00030301, 0x02030301, + 0x00010103, 0x02010103, 0x00030103, 0x02030103, + 0x00010303, 0x02010303, 0x00030303, 0x02030303, + 0x01010101, 0x03010101, 0x01030101, 0x03030101, + 0x01010301, 0x03010301, 0x01030301, 0x03030301, + 0x01010103, 0x03010103, 0x01030103, 0x03030103, + 0x01010303, 0x03010303, 0x01030303, 0x03030303 +}; + + +/* + * The SP table is actually the S boxes and the P permutation + * table combined. This table is actually reordered from the + * spec, to match the order of key application we follow. + */ +const unsigned DES_INT32 des_SP_table[8][64] = { + { + 0x00100000, 0x02100001, 0x02000401, 0x00000000, /* 7 */ + 0x00000400, 0x02000401, 0x00100401, 0x02100400, + 0x02100401, 0x00100000, 0x00000000, 0x02000001, + 0x00000001, 0x02000000, 0x02100001, 0x00000401, + 0x02000400, 0x00100401, 0x00100001, 0x02000400, + 0x02000001, 0x02100000, 0x02100400, 0x00100001, + 0x02100000, 0x00000400, 0x00000401, 0x02100401, + 0x00100400, 0x00000001, 0x02000000, 0x00100400, + 0x02000000, 0x00100400, 0x00100000, 0x02000401, + 0x02000401, 0x02100001, 0x02100001, 0x00000001, + 0x00100001, 0x02000000, 0x02000400, 0x00100000, + 0x02100400, 0x00000401, 0x00100401, 0x02100400, + 0x00000401, 0x02000001, 0x02100401, 0x02100000, + 0x00100400, 0x00000000, 0x00000001, 0x02100401, + 0x00000000, 0x00100401, 0x02100000, 0x00000400, + 0x02000001, 0x02000400, 0x00000400, 0x00100001, + }, + { + 0x00808200, 0x00000000, 0x00008000, 0x00808202, /* 1 */ + 0x00808002, 0x00008202, 0x00000002, 0x00008000, + 0x00000200, 0x00808200, 0x00808202, 0x00000200, + 0x00800202, 0x00808002, 0x00800000, 0x00000002, + 0x00000202, 0x00800200, 0x00800200, 0x00008200, + 0x00008200, 0x00808000, 0x00808000, 0x00800202, + 0x00008002, 0x00800002, 0x00800002, 0x00008002, + 0x00000000, 0x00000202, 0x00008202, 0x00800000, + 0x00008000, 0x00808202, 0x00000002, 0x00808000, + 0x00808200, 0x00800000, 0x00800000, 0x00000200, + 0x00808002, 0x00008000, 0x00008200, 0x00800002, + 0x00000200, 0x00000002, 0x00800202, 0x00008202, + 0x00808202, 0x00008002, 0x00808000, 0x00800202, + 0x00800002, 0x00000202, 0x00008202, 0x00808200, + 0x00000202, 0x00800200, 0x00800200, 0x00000000, + 0x00008002, 0x00008200, 0x00000000, 0x00808002, + }, + { + 0x00000104, 0x04010100, 0x00000000, 0x04010004, /* 3 */ + 0x04000100, 0x00000000, 0x00010104, 0x04000100, + 0x00010004, 0x04000004, 0x04000004, 0x00010000, + 0x04010104, 0x00010004, 0x04010000, 0x00000104, + 0x04000000, 0x00000004, 0x04010100, 0x00000100, + 0x00010100, 0x04010000, 0x04010004, 0x00010104, + 0x04000104, 0x00010100, 0x00010000, 0x04000104, + 0x00000004, 0x04010104, 0x00000100, 0x04000000, + 0x04010100, 0x04000000, 0x00010004, 0x00000104, + 0x00010000, 0x04010100, 0x04000100, 0x00000000, + 0x00000100, 0x00010004, 0x04010104, 0x04000100, + 0x04000004, 0x00000100, 0x00000000, 0x04010004, + 0x04000104, 0x00010000, 0x04000000, 0x04010104, + 0x00000004, 0x00010104, 0x00010100, 0x04000004, + 0x04010000, 0x04000104, 0x00000104, 0x04010000, + 0x00010104, 0x00000004, 0x04010004, 0x00010100, + }, + { + 0x00000080, 0x01040080, 0x01040000, 0x21000080, /* 5 */ + 0x00040000, 0x00000080, 0x20000000, 0x01040000, + 0x20040080, 0x00040000, 0x01000080, 0x20040080, + 0x21000080, 0x21040000, 0x00040080, 0x20000000, + 0x01000000, 0x20040000, 0x20040000, 0x00000000, + 0x20000080, 0x21040080, 0x21040080, 0x01000080, + 0x21040000, 0x20000080, 0x00000000, 0x21000000, + 0x01040080, 0x01000000, 0x21000000, 0x00040080, + 0x00040000, 0x21000080, 0x00000080, 0x01000000, + 0x20000000, 0x01040000, 0x21000080, 0x20040080, + 0x01000080, 0x20000000, 0x21040000, 0x01040080, + 0x20040080, 0x00000080, 0x01000000, 0x21040000, + 0x21040080, 0x00040080, 0x21000000, 0x21040080, + 0x01040000, 0x00000000, 0x20040000, 0x21000000, + 0x00040080, 0x01000080, 0x20000080, 0x00040000, + 0x00000000, 0x20040000, 0x01040080, 0x20000080, + }, + { + 0x80401000, 0x80001040, 0x80001040, 0x00000040, /* 4 */ + 0x00401040, 0x80400040, 0x80400000, 0x80001000, + 0x00000000, 0x00401000, 0x00401000, 0x80401040, + 0x80000040, 0x00000000, 0x00400040, 0x80400000, + 0x80000000, 0x00001000, 0x00400000, 0x80401000, + 0x00000040, 0x00400000, 0x80001000, 0x00001040, + 0x80400040, 0x80000000, 0x00001040, 0x00400040, + 0x00001000, 0x00401040, 0x80401040, 0x80000040, + 0x00400040, 0x80400000, 0x00401000, 0x80401040, + 0x80000040, 0x00000000, 0x00000000, 0x00401000, + 0x00001040, 0x00400040, 0x80400040, 0x80000000, + 0x80401000, 0x80001040, 0x80001040, 0x00000040, + 0x80401040, 0x80000040, 0x80000000, 0x00001000, + 0x80400000, 0x80001000, 0x00401040, 0x80400040, + 0x80001000, 0x00001040, 0x00400000, 0x80401000, + 0x00000040, 0x00400000, 0x00001000, 0x00401040, + }, + { + 0x10000008, 0x10200000, 0x00002000, 0x10202008, /* 6 */ + 0x10200000, 0x00000008, 0x10202008, 0x00200000, + 0x10002000, 0x00202008, 0x00200000, 0x10000008, + 0x00200008, 0x10002000, 0x10000000, 0x00002008, + 0x00000000, 0x00200008, 0x10002008, 0x00002000, + 0x00202000, 0x10002008, 0x00000008, 0x10200008, + 0x10200008, 0x00000000, 0x00202008, 0x10202000, + 0x00002008, 0x00202000, 0x10202000, 0x10000000, + 0x10002000, 0x00000008, 0x10200008, 0x00202000, + 0x10202008, 0x00200000, 0x00002008, 0x10000008, + 0x00200000, 0x10002000, 0x10000000, 0x00002008, + 0x10000008, 0x10202008, 0x00202000, 0x10200000, + 0x00202008, 0x10202000, 0x00000000, 0x10200008, + 0x00000008, 0x00002000, 0x10200000, 0x00202008, + 0x00002000, 0x00200008, 0x10002008, 0x00000000, + 0x10202000, 0x10000000, 0x00200008, 0x10002008, + }, + { + 0x08000820, 0x00000800, 0x00020000, 0x08020820, /* 8 */ + 0x08000000, 0x08000820, 0x00000020, 0x08000000, + 0x00020020, 0x08020000, 0x08020820, 0x00020800, + 0x08020800, 0x00020820, 0x00000800, 0x00000020, + 0x08020000, 0x08000020, 0x08000800, 0x00000820, + 0x00020800, 0x00020020, 0x08020020, 0x08020800, + 0x00000820, 0x00000000, 0x00000000, 0x08020020, + 0x08000020, 0x08000800, 0x00020820, 0x00020000, + 0x00020820, 0x00020000, 0x08020800, 0x00000800, + 0x00000020, 0x08020020, 0x00000800, 0x00020820, + 0x08000800, 0x00000020, 0x08000020, 0x08020000, + 0x08020020, 0x08000000, 0x00020000, 0x08000820, + 0x00000000, 0x08020820, 0x00020020, 0x08000020, + 0x08020000, 0x08000800, 0x08000820, 0x00000000, + 0x08020820, 0x00020800, 0x00020800, 0x00000820, + 0x00000820, 0x00020020, 0x08000000, 0x08020800, + }, + { + 0x40084010, 0x40004000, 0x00004000, 0x00084010, /* 2 */ + 0x00080000, 0x00000010, 0x40080010, 0x40004010, + 0x40000010, 0x40084010, 0x40084000, 0x40000000, + 0x40004000, 0x00080000, 0x00000010, 0x40080010, + 0x00084000, 0x00080010, 0x40004010, 0x00000000, + 0x40000000, 0x00004000, 0x00084010, 0x40080000, + 0x00080010, 0x40000010, 0x00000000, 0x00084000, + 0x00004010, 0x40084000, 0x40080000, 0x00004010, + 0x00000000, 0x00084010, 0x40080010, 0x00080000, + 0x40004010, 0x40080000, 0x40084000, 0x00004000, + 0x40080000, 0x40004000, 0x00000010, 0x40084010, + 0x00084010, 0x00000010, 0x00004000, 0x40000000, + 0x00004010, 0x40084000, 0x00080000, 0x40000010, + 0x00080010, 0x40004010, 0x40000010, 0x00080010, + 0x00084000, 0x00000000, 0x40004000, 0x00004010, + 0x40000000, 0x40080010, 0x40084010, 0x00084000 + }, +}; diff --git a/src/lib/crypto/builtin/des/f_tables.h b/src/lib/crypto/builtin/des/f_tables.h new file mode 100644 index 000000000..45a6322fe --- /dev/null +++ b/src/lib/crypto/builtin/des/f_tables.h @@ -0,0 +1,279 @@ +/* + * lib/crypto/des/f_tables.h + * + * Copyright (C) 1990 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * DES implementation donated by Dennis Ferguson + */ + +/* + * des_tables.h - declarations to import the DES tables, used internally + * by some of the library routines. + */ +#ifndef __DES_TABLES_H__ +#define __DES_TABLES_H__ /* nothing */ + +#include "k5-platform.h" +/* + * These may be declared const if you wish. Be sure to change the + * declarations in des_tables.c as well. + */ +extern const unsigned DES_INT32 des_IP_table[256]; +extern const unsigned DES_INT32 des_FP_table[256]; +extern const unsigned DES_INT32 des_SP_table[8][64]; + +/* + * Use standard shortforms to reference these to save typing + */ +#define IP des_IP_table +#define FP des_FP_table +#define SP des_SP_table + +#ifdef DEBUG +#define DEB(foofraw) printf foofraw +#else +#define DEB(foofraw) /* nothing */ +#endif + +/* + * Code to do a DES round using the tables. Note that the E expansion + * is easy to compute algorithmically, especially if done out-of-order. + * Take a look at its form and compare it to everything involving temp + * below. Since SP[0-7] don't have any bits in common set it is okay + * to do the successive xor's. + * + * Note too that the SP table has been reordered to match the order of + * the keys (if the original order of SP was 12345678, the reordered + * table is 71354682). This is unnecessary, but was done since some + * compilers seem to like you going through the matrix from beginning + * to end. + * + * There is a difference in the best way to do this depending on whether + * one is encrypting or decrypting. If encrypting we move forward through + * the keys and hence should move forward through the table. If decrypting + * we go back. Part of the need for this comes from trying to emulate + * existing software which generates a single key schedule and uses it + * both for encrypting and decrypting. Generating separate encryption + * and decryption key schedules would allow one to use the same code + * for both. + * + * left, right and temp should be unsigned DES_INT32 values. left and right + * should be the high and low order parts of the cipher block at the + * current stage of processing (this makes sense if you read the spec). + * kp should be an unsigned DES_INT32 pointer which points at the current + * set of subkeys in the key schedule. It is advanced to the next set + * (i.e. by 8 bytes) when this is done. + * + * This occurs in the innermost loop of the DES function. The four + * variables should really be in registers. + * + * When using this, the inner loop of the DES function might look like: + * + * for (i = 0; i < 8; i++) { + * DES_SP_{EN,DE}CRYPT_ROUND(left, right, temp, kp); + * DES_SP_{EN,DE}CRYPT_ROUND(right, left, temp, kp); + * } + * + * Note the trick above. You are supposed to do 16 rounds, swapping + * left and right at the end of each round. By doing two rounds at + * a time and swapping left and right in the code we can avoid the + * swaps altogether. + */ +#define DES_SP_ENCRYPT_ROUND(left, right, temp, kp) \ + (temp) = (((right) >> 11) | ((right) << 21)) ^ *(kp)++; \ + (left) ^= SP[0][((temp) >> 24) & 0x3f] \ + | SP[1][((temp) >> 16) & 0x3f] \ + | SP[2][((temp) >> 8) & 0x3f] \ + | SP[3][((temp) ) & 0x3f]; \ + (temp) = (((right) >> 23) | ((right) << 9)) ^ *(kp)++; \ + (left) ^= SP[4][((temp) >> 24) & 0x3f] \ + | SP[5][((temp) >> 16) & 0x3f] \ + | SP[6][((temp) >> 8) & 0x3f] \ + | SP[7][((temp) ) & 0x3f] + +#define DES_SP_DECRYPT_ROUND(left, right, temp, kp) \ + (temp) = (((right) >> 23) | ((right) << 9)) ^ *(--(kp)); \ + (left) ^= SP[7][((temp) ) & 0x3f] \ + | SP[6][((temp) >> 8) & 0x3f] \ + | SP[5][((temp) >> 16) & 0x3f] \ + | SP[4][((temp) >> 24) & 0x3f]; \ + (temp) = (((right) >> 11) | ((right) << 21)) ^ *(--(kp)); \ + (left) ^= SP[3][((temp) ) & 0x3f] \ + | SP[2][((temp) >> 8) & 0x3f] \ + | SP[1][((temp) >> 16) & 0x3f] \ + | SP[0][((temp) >> 24) & 0x3f] + +/* + * Macros to help deal with the initial permutation table. Note + * the IP table only deals with 32 bits at a time, allowing us to + * collect the bits we need to deal with each half into an unsigned + * DES_INT32. By carefully selecting how the bits are ordered we also + * take advantages of symmetries in the table so that we can use a + * single table to compute the permutation of all bytes. This sounds + * complicated, but if you go through the process of designing the + * table you'll find the symmetries fall right out. + * + * The follow macros compute the set of bits used to index the + * table for produce the left and right permuted result. + * + * The inserted cast to unsigned DES_INT32 circumvents a bug in + * the Macintosh MPW 3.2 C compiler which loses the unsignedness and + * propagates the high-order bit in the shift. + */ +#define DES_IP_LEFT_BITS(left, right) \ + ((((left) & 0x55555555) << 1) | ((right) & 0x55555555)) +#define DES_IP_RIGHT_BITS(left, right) \ + (((left) & 0xaaaaaaaa) | \ + ( ( (unsigned DES_INT32) ((right) & 0xaaaaaaaa) ) >> 1)) + +/* + * The following macro does an in-place initial permutation given + * the current left and right parts of the block and a single + * temporary. Use this more as a guide for rolling your own, though. + * The best way to do the IP depends on the form of the data you + * are dealing with. If you use this, though, try to make left, + * right and temp register unsigned DES_INT32s. + */ +#define DES_INITIAL_PERM(left, right, temp) \ + (temp) = DES_IP_RIGHT_BITS((left), (right)); \ + (right) = DES_IP_LEFT_BITS((left), (right)); \ + (left) = IP[((right) >> 24) & 0xff] \ + | (IP[((right) >> 16) & 0xff] << 1) \ + | (IP[((right) >> 8) & 0xff] << 2) \ + | (IP[(right) & 0xff] << 3); \ + (right) = IP[((temp) >> 24) & 0xff] \ + | (IP[((temp) >> 16) & 0xff] << 1) \ + | (IP[((temp) >> 8) & 0xff] << 2) \ + | (IP[(temp) & 0xff] << 3) + +/* + * Now the final permutation stuff. The same comments apply to + * this as to the initial permutation, except that we use different + * bits and shifts. + * + * The inserted cast to unsigned DES_INT32 circumvents a bug in + * the Macintosh MPW 3.2 C compiler which loses the unsignedness and + * propagates the high-order bit in the shift. + */ +#define DES_FP_LEFT_BITS(left, right) \ + ((((left) & 0x0f0f0f0f) << 4) | ((right) & 0x0f0f0f0f)) +#define DES_FP_RIGHT_BITS(left, right) \ + (((left) & 0xf0f0f0f0) | \ + ( ( (unsigned DES_INT32) ((right) & 0xf0f0f0f0) ) >> 4)) + + +/* + * Here is a sample final permutation. Note that there is a trick + * here. DES requires swapping the left and right parts after the + * last cipher round but before the final permutation. We do this + * swapping internally, which is why left and right are confused + * at the beginning. + */ +#define DES_FINAL_PERM(left, right, temp) \ + (temp) = DES_FP_RIGHT_BITS((right), (left)); \ + (right) = DES_FP_LEFT_BITS((right), (left)); \ + (left) = (FP[((right) >> 24) & 0xff] << 6) \ + | (FP[((right) >> 16) & 0xff] << 4) \ + | (FP[((right) >> 8) & 0xff] << 2) \ + | FP[(right) & 0xff]; \ + (right) = (FP[((temp) >> 24) & 0xff] << 6) \ + | (FP[((temp) >> 16) & 0xff] << 4) \ + | (FP[((temp) >> 8) & 0xff] << 2) \ + | FP[temp & 0xff] + + +/* + * Finally, as a sample of how all this might be held together, the + * following two macros do in-place encryptions and decryptions. left + * and right are two unsigned DES_INT32 variables which at the beginning + * are expected to hold the clear (encrypted) block in host byte order + * (left the high order four bytes, right the low order). At the end + * they will contain the encrypted (clear) block. temp is an unsigned DES_INT32 + * used as a temporary. kp is an unsigned DES_INT32 pointer pointing at + * the start of the key schedule. All these should be in registers. + * + * You can probably do better than these by rewriting for particular + * situations. These aren't bad, though. + * + * The DEB macros enable debugging when this code breaks (typically + * when a buggy compiler breaks it), by printing the intermediate values + * at each stage of the encryption, so that by comparing the output to + * a known good machine, the location of the first error can be found. + */ +#define DES_DO_ENCRYPT_1(left, right, kp) \ + do { \ + register int i; \ + register unsigned DES_INT32 temp1; \ + DEB (("do_encrypt %8lX %8lX \n", left, right)); \ + DES_INITIAL_PERM((left), (right), (temp1)); \ + DEB ((" after IP %8lX %8lX\n", left, right)); \ + for (i = 0; i < 8; i++) { \ + DES_SP_ENCRYPT_ROUND((left), (right), (temp1), (kp)); \ + DEB ((" round %2d %8lX %8lX \n", i*2, left, right)); \ + DES_SP_ENCRYPT_ROUND((right), (left), (temp1), (kp)); \ + DEB ((" round %2d %8lX %8lX \n", 1+i*2, left, right)); \ + } \ + DES_FINAL_PERM((left), (right), (temp1)); \ + (kp) -= (2 * 16); \ + DEB ((" after FP %8lX %8lX \n", left, right)); \ + } while (0) + +#define DES_DO_DECRYPT_1(left, right, kp) \ + do { \ + register int i; \ + register unsigned DES_INT32 temp2; \ + DES_INITIAL_PERM((left), (right), (temp2)); \ + (kp) += (2 * 16); \ + for (i = 0; i < 8; i++) { \ + DES_SP_DECRYPT_ROUND((left), (right), (temp2), (kp)); \ + DES_SP_DECRYPT_ROUND((right), (left), (temp2), (kp)); \ + } \ + DES_FINAL_PERM((left), (right), (temp2)); \ + } while (0) + +#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) +extern void krb5int_des_do_encrypt_2(unsigned DES_INT32 *l, + unsigned DES_INT32 *r, + const unsigned DES_INT32 *k); +extern void krb5int_des_do_decrypt_2(unsigned DES_INT32 *l, + unsigned DES_INT32 *r, + const unsigned DES_INT32 *k); +#define DES_DO_ENCRYPT(L,R,K) krb5int_des_do_encrypt_2(&(L), &(R), (K)) +#define DES_DO_DECRYPT(L,R,K) krb5int_des_do_decrypt_2(&(L), &(R), (K)) +#else +#define DES_DO_ENCRYPT DES_DO_ENCRYPT_1 +#define DES_DO_DECRYPT DES_DO_DECRYPT_1 +#endif + +/* + * These are handy dandy utility thingies for straightening out bytes. + * Included here because they're used a couple of places. + */ +#define GET_HALF_BLOCK(lr, ip) ((lr) = load_32_be(ip), (ip) += 4) +#define PUT_HALF_BLOCK(lr, op) (store_32_be(lr, op), (op) += 4) + +/* Shorthand that we'll need in several places, for creating values that + really can hold 32 bits regardless of the prevailing int size. */ +#define FF_UINT32 ((unsigned DES_INT32) 0xFF) + +#endif /* __DES_TABLES_H__ */ diff --git a/src/lib/crypto/builtin/des/key_sched.c b/src/lib/crypto/builtin/des/key_sched.c new file mode 100644 index 000000000..26449a94c --- /dev/null +++ b/src/lib/crypto/builtin/des/key_sched.c @@ -0,0 +1,61 @@ +/* + * lib/crypto/des/key_sched.c + * + * Copyright 1985, 1986, 1987, 1988, 1990 by the Massachusetts Institute + * of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * This routine computes the DES key schedule given a key. The + * permutations and shifts have been done at compile time, resulting + * in a direct one-step mapping from the input key to the key + * schedule. + * + * Also checks parity and weak keys. + * + * Watch out for the subscripts -- most effectively start at 1 instead + * of at zero. Maybe some bugs in that area. + * + * In case the user wants to cache the computed key schedule, it is + * passed as an arg. Also implies that caller has explicit control + * over zeroing both the key schedule and the key. + * + * Originally written 6/85 by Steve Miller, MIT Project Athena. + */ + +#include "k5-int.h" +#include "des_int.h" + +int +mit_des_key_sched(mit_des_cblock k, mit_des_key_schedule schedule) +{ + mit_des_make_key_sched(k,schedule); + + if (!mit_des_check_key_parity(k)) /* bad parity --> return -1 */ + return(-1); + + if (mit_des_is_weak_key(k)) + return(-2); + + /* if key was good, return 0 */ + return 0; +} diff --git a/src/lib/crypto/builtin/des/string2key.c b/src/lib/crypto/builtin/des/string2key.c new file mode 100644 index 000000000..0ce413685 --- /dev/null +++ b/src/lib/crypto/builtin/des/string2key.c @@ -0,0 +1,261 @@ +/* + * lib/crypto/des/des_s2k.c + * + * Copyright 2004, 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Compute encryption key from salt and pass phrase. + */ + +#include "k5-int.h" +#include "des_int.h" + +krb5_error_code +mit_des_string_to_key_int (krb5_keyblock *key, + const krb5_data *pw, const krb5_data *salt) +{ + union { + /* 8 "forward" bytes, 8 "reverse" bytes */ + unsigned char uc[16]; + krb5_ui_4 ui[4]; + mit_des_cblock cb; + } temp; + unsigned int i; + krb5_ui_4 x, y, z; + unsigned char *p; + des_key_schedule sched; + char *copy; + size_t copylen; + + /* As long as the architecture is big-endian or little-endian, it + doesn't matter which it is. Think of it as reversing the + bytes, and also reversing the bits within each byte. But this + current algorithm is dependent on having four 8-bit char values + exactly overlay a 32-bit integral type. */ + if (sizeof(temp.uc) != sizeof(temp.ui) + || (unsigned char)~0 != 0xFF + || (krb5_ui_4)~(krb5_ui_4)0 != 0xFFFFFFFF + || (temp.uc[0] = 1, temp.uc[1] = 2, temp.uc[2] = 3, temp.uc[3] = 4, + !(temp.ui[0] == 0x01020304 + || temp.ui[0] == 0x04030201))) + abort(); +#define FETCH4(VAR, IDX) VAR = temp.ui[IDX/4] +#define PUT4(VAR, IDX) temp.ui[IDX/4] = VAR + + if (salt + && (salt->length == SALT_TYPE_AFS_LENGTH + /* XXX Yuck! Aren't we done with this yet? */ + || salt->length == (unsigned) -1)) { + krb5_data afssalt; + char *at; + + afssalt.data = salt->data; + at = strchr(afssalt.data, '@'); + if (at) { + *at = 0; + afssalt.length = at - afssalt.data; + } else + afssalt.length = strlen(afssalt.data); + return mit_afs_string_to_key(key, pw, &afssalt); + } + + copylen = pw->length + (salt ? salt->length : 0); + /* Don't need NUL termination, at this point we're treating it as + a byte array, not a string. */ + copy = malloc(copylen); + if (copy == NULL) + return ENOMEM; + memcpy(copy, pw->data, pw->length); + if (salt) + memcpy(copy + pw->length, salt->data, salt->length); + + memset(&temp, 0, sizeof(temp)); + p = temp.uc; + /* Handle the fan-fold xor operation by splitting the data into + forward and reverse sections, and combine them later, rather + than having to do the reversal over and over again. */ + for (i = 0; i < copylen; i++) { + *p++ ^= copy[i]; + if (p == temp.uc+16) { + p = temp.uc; +#ifdef PRINT_TEST_VECTORS + { + int j; + printf("after %d input bytes:\nforward block:\t", i+1); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\nreverse block:\t"); + for (j = 8; j < 16; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif + } + } + +#ifdef PRINT_TEST_VECTORS + if (p != temp.uc) { + int j; + printf("at end, after %d input bytes:\nforward block:\t", i); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\nreverse block:\t"); + for (j = 8; j < 16; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif +#if 0 + /* Algorithm described in Dr. Dobbs Journal 1983, reported in "bit + twiddling hacks" web page collected by Sean Eron Anderson; see + http://graphics.stanford.edu/~seander/bithacks.html for + details. + + Avoids loops, uses 7*lg(N)=35 ops instead of 4*N=128 for the + obvious mask, ior, shift, shift sequence of each 32-bit + quantity. + + If we could rely on 64-bit math, another 7 ops would save us + from having to do double the work. */ +#define REVERSE_STEP(VAR, SHIFT, MASK) \ + VAR = ((VAR >> SHIFT) & MASK) | ((VAR << SHIFT) & (0xFFFFFFFFUL & ~MASK)) +#define REVERSE(VAR) \ + REVERSE_STEP (VAR, 1, 0x55555555UL); /* swap odd/even bits */ \ + REVERSE_STEP (VAR, 2, 0x33333333UL); /* swap bitpairs */ \ + REVERSE_STEP (VAR, 4, 0x0F0F0F0FUL); /* swap nibbles, etc */ \ + REVERSE_STEP (VAR, 8, 0x00FF00FFUL); \ + REVERSE_STEP (VAR, 16, 0x0000FFFFUL); +#else /* shorter */ +#define REVERSE(VAR) \ + { \ + krb5_ui_4 old = VAR, temp1 = 0; \ + int j; \ + for (j = 0; j < 32; j++) { \ + temp1 = (temp1 << 1) | (old & 1); \ + old >>= 1; \ + } \ + VAR = temp1; \ + } +#endif + + FETCH4 (x, 8); + FETCH4 (y, 12); + /* Ignore high bits of each input byte. */ + x &= 0x7F7F7F7F; + y &= 0x7F7F7F7F; + /* Reverse the bit strings -- after this, y is "before" x. */ + REVERSE (x); + REVERSE (y); +#ifdef PRINT_TEST_VECTORS + { + int j; + union { unsigned char uc[4]; krb5_ui_4 ui; } t2; + printf("after reversal, reversed block:\n\t\t"); + t2.ui = y; + for (j = 0; j < 4; j++) + printf(" %02x", t2.uc[j] & 0xff); + t2.ui = x; + for (j = 0; j < 4; j++) + printf(" %02x", t2.uc[j] & 0xff); + printf("\n"); + } +#endif + /* Ignored bits are now at the bottom of each byte, where we'll + put the parity bits. Good. */ + FETCH4 (z, 0); + z &= 0x7F7F7F7F; + /* Ignored bits for z are at the top of each byte; fix that. */ + z <<= 1; + /* Finish the fan-fold xor for these four bytes. */ + z ^= y; + PUT4 (z, 0); + /* Now do the second four bytes. */ + FETCH4 (z, 4); + z &= 0x7F7F7F7F; + /* Ignored bits for z are at the top of each byte; fix that. */ + z <<= 1; + /* Finish the fan-fold xor for these four bytes. */ + z ^= x; + PUT4 (z, 4); + +#ifdef PRINT_TEST_VECTORS + { + int j; + printf("after reversal, combined block:\n\t\t"); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif + +#define FIXUP(K) \ + (mit_des_fixup_key_parity(K), \ + mit_des_is_weak_key(K) ? (K[7] ^= 0xF0) : 0) + + /* Now temp.cb is the temporary key, with invalid parity. */ + FIXUP(temp.cb); + +#ifdef PRINT_TEST_VECTORS + { + int j; + printf("after fixing parity and weak keys:\n\t\t"); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif + + mit_des_key_sched(temp.cb, sched); + mit_des_cbc_cksum(copy, temp.cb, copylen, sched, temp.cb); + + memset(copy, 0, copylen); + free(copy); + +#ifdef PRINT_TEST_VECTORS + { + int j; + printf("cbc checksum:\n\t\t"); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif + + memset(sched, 0, sizeof(sched)); + FIXUP (temp.cb); + +#ifdef PRINT_TEST_VECTORS + { + int j; + printf("after fixing parity and weak keys:\n\t\t"); + for (j = 0; j < 8; j++) + printf(" %02x", temp.uc[j] & 0xff); + printf("\n"); + } +#endif + + memcpy(key->contents, temp.cb, 8); + memset(&temp, 0, sizeof(temp)); + + return 0; +} diff --git a/src/lib/crypto/builtin/des/weak_key.c b/src/lib/crypto/builtin/des/weak_key.c new file mode 100644 index 000000000..2eab9f543 --- /dev/null +++ b/src/lib/crypto/builtin/des/weak_key.c @@ -0,0 +1,85 @@ +/* + * lib/crypto/des/weak_key.c + * + * Copyright 1989,1990 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Under U.S. law, this software may not be exported outside the US + * without license from the U.S. Commerce department. + * + * These routines form the library interface to the DES facilities. + * + * Originally written 8/85 by Steve Miller, MIT Project Athena. + */ + +#include "k5-int.h" +#include "des_int.h" + +/* + * The following are the weak DES keys: + */ +static const mit_des_cblock weak[16] = { + /* weak keys */ + {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, + {0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe}, + {0x1f,0x1f,0x1f,0x1f,0x0e,0x0e,0x0e,0x0e}, + {0xe0,0xe0,0xe0,0xe0,0xf1,0xf1,0xf1,0xf1}, + + /* semi-weak */ + {0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe}, + {0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01}, + + {0x1f,0xe0,0x1f,0xe0,0x0e,0xf1,0x0e,0xf1}, + {0xe0,0x1f,0xe0,0x1f,0xf1,0x0e,0xf1,0x0e}, + + {0x01,0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1}, + {0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1,0x01}, + + {0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e,0xfe}, + {0xfe,0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e}, + + {0x01,0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e}, + {0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e,0x01}, + + {0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1,0xfe}, + {0xfe,0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1} +}; + +/* + * mit_des_is_weak_key: returns true iff key is a [semi-]weak des key. + * + * Requires: key has correct odd parity. + */ +int +mit_des_is_weak_key(mit_des_cblock key) +{ + unsigned int i; + const mit_des_cblock *weak_p = weak; + + for (i = 0; i < (sizeof(weak)/sizeof(mit_des_cblock)); i++) { + if (!memcmp(weak_p++,key,sizeof(mit_des_cblock))) + return 1; + } + + return 0; +} diff --git a/src/lib/crypto/builtin/hmac.c b/src/lib/crypto/builtin/hmac.c new file mode 100644 index 000000000..3bff3cf95 --- /dev/null +++ b/src/lib/crypto/builtin/hmac.c @@ -0,0 +1,165 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "aead.h" + +/* + * the HMAC transform looks like: + * + * H(K XOR opad, H(K XOR ipad, text)) + * + * where H is a cryptographic hash + * K is an n byte key + * ipad is the byte 0x36 repeated blocksize times + * opad is the byte 0x5c repeated blocksize times + * and text is the data being protected + */ + +krb5_error_code +krb5_hmac(const struct krb5_hash_provider *hash, const krb5_keyblock *key, + unsigned int icount, const krb5_data *input, krb5_data *output) +{ + size_t hashsize, blocksize; + unsigned char *xorkey, *ihash; + unsigned int i; + krb5_data *hashin, hashout; + krb5_error_code ret; + + hashsize = hash->hashsize; + blocksize = hash->blocksize; + + if (key->length > blocksize) + return(KRB5_CRYPTO_INTERNAL); + if (output->length < hashsize) + return(KRB5_BAD_MSIZE); + /* if this isn't > 0, then there won't be enough space in this + array to compute the outer hash */ + if (icount == 0) + return(KRB5_CRYPTO_INTERNAL); + + /* allocate space for the xor key, hash input vector, and inner hash */ + + if ((xorkey = (unsigned char *) malloc(blocksize)) == NULL) + return(ENOMEM); + if ((ihash = (unsigned char *) malloc(hashsize)) == NULL) { + free(xorkey); + return(ENOMEM); + } + if ((hashin = (krb5_data *)malloc(sizeof(krb5_data)*(icount+1))) == NULL) { + free(ihash); + free(xorkey); + return(ENOMEM); + } + + /* create the inner padded key */ + + memset(xorkey, 0x36, blocksize); + + for (i=0; ilength; i++) + xorkey[i] ^= key->contents[i]; + + /* compute the inner hash */ + + hashin[0].length = blocksize; + hashin[0].data = (char *) xorkey; + for (i=0; ihash))(icount+1, hashin, &hashout)))) + goto cleanup; + + /* create the outer padded key */ + + memset(xorkey, 0x5c, blocksize); + + for (i=0; ilength; i++) + xorkey[i] ^= key->contents[i]; + + /* compute the outer hash */ + + hashin[0].length = blocksize; + hashin[0].data = (char *) xorkey; + hashin[1] = hashout; + + output->length = hashsize; + + if ((ret = ((*(hash->hash))(2, hashin, output)))) + memset(output->data, 0, output->length); + + /* ret is set correctly by the prior call */ + +cleanup: + memset(xorkey, 0, blocksize); + memset(ihash, 0, hashsize); + + free(hashin); + free(ihash); + free(xorkey); + + return(ret); +} + +krb5_error_code +krb5int_hmac_iov(const struct krb5_hash_provider *hash, const krb5_keyblock *key, + const krb5_crypto_iov *data, size_t num_data, krb5_data *output) +{ + krb5_data *sign_data; + size_t num_sign_data; + krb5_error_code ret; + size_t i, j; + + /* Create a checksum over all the data to be signed */ + for (i = 0, num_sign_data = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (SIGN_IOV(iov)) + num_sign_data++; + } + + /* XXX cleanup to avoid alloc */ + sign_data = (krb5_data *)calloc(num_sign_data, sizeof(krb5_data)); + if (sign_data == NULL) + return ENOMEM; + + for (i = 0, j = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (SIGN_IOV(iov)) + sign_data[j++] = iov->data; + } + + /* caller must store checksum in iov as it may be TYPE_TRAILER or TYPE_CHECKSUM */ + ret = krb5_hmac(hash, key, num_sign_data, sign_data, output); + + free(sign_data); + + return ret; +} + diff --git a/src/lib/crypto/builtin/md4/ISSUES b/src/lib/crypto/builtin/md4/ISSUES new file mode 100644 index 000000000..1103bd87b --- /dev/null +++ b/src/lib/crypto/builtin/md4/ISSUES @@ -0,0 +1,3 @@ +Issues to be addressed for src/lib/crypto/md4: -*- text -*- + +Assumes int is >= 32 bits. diff --git a/src/lib/crypto/builtin/md4/Makefile.in b/src/lib/crypto/builtin/md4/Makefile.in new file mode 100644 index 000000000..78dd0534b --- /dev/null +++ b/src/lib/crypto/builtin/md4/Makefile.in @@ -0,0 +1,39 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/md4 +mydir=lib/crypto/builtin/md4 +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir) +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=md4 +##DOS##OBJFILE=..\$(OUTPRE)md4.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS= md4.o + +OBJS= $(OUTPRE)md4.$(OBJEXT) + +SRCS= $(srcdir)/md4.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + + +check-unix:: + +check-windows:: + +clean:: + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/md4/deps b/src/lib/crypto/builtin/md4/deps new file mode 100644 index 000000000..1decaf971 --- /dev/null +++ b/src/lib/crypto/builtin/md4/deps @@ -0,0 +1,13 @@ +# +# Generated makefile dependencies follow. +# +md4.so md4.po $(OUTPRE)md4.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h md4.c rsa-md4.h diff --git a/src/lib/crypto/builtin/md4/md4.c b/src/lib/crypto/builtin/md4/md4.c new file mode 100644 index 000000000..7922c71ed --- /dev/null +++ b/src/lib/crypto/builtin/md4/md4.c @@ -0,0 +1,246 @@ +/* + * lib/crypto/md4/md4.c + */ + +/* + ********************************************************************** + ** md4.c ** + ** RSA Data Security, Inc. MD4 Message Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version ** + ********************************************************************** + */ + +/* + ********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** + ** ** + ** License to copy and use this software is granted provided that ** + ** it is identified as the "RSA Data Security, Inc. MD4 Message ** + ** Digest Algorithm" in all material mentioning or referencing this ** + ** software or this function. ** + ** ** + ** License is also granted to make and use derivative works ** + ** provided that such works are identified as "derived from the RSA ** + ** Data Security, Inc. MD4 Message Digest Algorithm" in all ** + ** material mentioning or referencing the derived work. ** + ** ** + ** RSA Data Security, Inc. makes no representations concerning ** + ** either the merchantability of this software or the suitability ** + ** of this software for any particular purpose. It is provided "as ** + ** is" without express or implied warranty of any kind. ** + ** ** + ** These notices must be retained in any copies of any part of this ** + ** documentation and/or software. ** + ********************************************************************** + */ + +#include "k5-int.h" +#include "rsa-md4.h" + +/* forward declaration */ +static void Transform (krb5_ui_4 *, krb5_ui_4 *); + +static const unsigned char PADDING[64] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +/* F, G and H are basic MD4 functions: selection, majority, parity */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) + +/* ROTATE_LEFT rotates x left n bits */ +#define ROTATE_LEFT(x, n) ((((x) << (n)) & 0xffffffff) | ((x) >> (32-(n)))) + +/* FF, GG and HH are MD4 transformations for rounds 1, 2 and 3 */ +/* Rotation is separate from addition to prevent recomputation */ +#define FF(a, b, c, d, x, s) \ + {(a) += F ((b), (c), (d)) + (x); \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s));} +#define GG(a, b, c, d, x, s) \ + {(a) += G ((b), (c), (d)) + (x) + 013240474631UL; \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s));} +#define HH(a, b, c, d, x, s) \ + {(a) += H ((b), (c), (d)) + (x) + 015666365641UL; \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s));} + +void +krb5_MD4Init (krb5_MD4_CTX *mdContext) +{ + mdContext->i[0] = mdContext->i[1] = (krb5_ui_4)0; + + /* Load magic initialization constants. + */ + mdContext->buf[0] = 0x67452301UL; + mdContext->buf[1] = 0xefcdab89UL; + mdContext->buf[2] = 0x98badcfeUL; + mdContext->buf[3] = 0x10325476UL; +} + +void +krb5_MD4Update (krb5_MD4_CTX *mdContext, const unsigned char *inBuf, unsigned int inLen) +{ + krb5_ui_4 in[16]; + int mdi; + unsigned int i, ii; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* update number of bits */ + if ((mdContext->i[0] + ((krb5_ui_4)inLen << 3)) < mdContext->i[0]) + mdContext->i[1]++; + mdContext->i[0] += ((krb5_ui_4)inLen << 3); + mdContext->i[1] += ((krb5_ui_4)inLen >> 29); + + while (inLen--) { + /* add new character to buffer, increment mdi */ + mdContext->in[mdi++] = *inBuf++; + + /* transform if necessary */ + if (mdi == 0x40) { + for (i = 0, ii = 0; i < 16; i++, ii += 4) { + in[i] = load_32_le(mdContext->in+ii); + } + Transform (mdContext->buf, in); + mdi = 0; + } + } +} + +void +krb5_MD4Final (krb5_MD4_CTX *mdContext) +{ + krb5_ui_4 in[16]; + int mdi; + unsigned int i, ii; + unsigned int padLen; + + /* save number of bits */ + in[14] = mdContext->i[0]; + in[15] = mdContext->i[1]; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* pad out to 56 mod 64 */ + padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); + krb5_MD4Update (mdContext, PADDING, padLen); + + /* append length in bits and transform */ + for (i = 0, ii = 0; i < 14; i++, ii += 4) + in[i] = load_32_le(mdContext->in+ii); + Transform (mdContext->buf, in); + + + /* store buffer in digest */ + for (i = 0, ii = 0; i < 4; i++, ii += 4) { + store_32_le(mdContext->buf[i], mdContext->digest+ii); + } +} + +/* Basic MD4 step. Transform buf based on in. + */ +static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in) +{ + register krb5_ui_4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; + +#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) + int i; +#define ROTATE { krb5_ui_4 temp; temp = d, d = c, c = b, b = a, a = temp; } + for (i = 0; i < 16; i++) { + static const unsigned char round1consts[] = { 3, 7, 11, 19, }; + FF (a, b, c, d, in[i], round1consts[i%4]); ROTATE; + } + for (i = 0; i < 16; i++) { + static const unsigned char round2indices[] = { + 0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15 + }; + static const unsigned char round2consts[] = { 3, 5, 9, 13 }; + GG (a, b, c, d, in[round2indices[i]], round2consts[i%4]); ROTATE; + } + for (i = 0; i < 16; i++) { + static const unsigned char round3indices[] = { + 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 + }; + static const unsigned char round3consts[] = { 3, 9, 11, 15 }; + HH (a, b, c, d, in[round3indices[i]], round3consts[i%4]); ROTATE; + } +#else + /* Round 1 */ + FF (a, b, c, d, in[ 0], 3); + FF (d, a, b, c, in[ 1], 7); + FF (c, d, a, b, in[ 2], 11); + FF (b, c, d, a, in[ 3], 19); + FF (a, b, c, d, in[ 4], 3); + FF (d, a, b, c, in[ 5], 7); + FF (c, d, a, b, in[ 6], 11); + FF (b, c, d, a, in[ 7], 19); + FF (a, b, c, d, in[ 8], 3); + FF (d, a, b, c, in[ 9], 7); + FF (c, d, a, b, in[10], 11); + FF (b, c, d, a, in[11], 19); + FF (a, b, c, d, in[12], 3); + FF (d, a, b, c, in[13], 7); + FF (c, d, a, b, in[14], 11); + FF (b, c, d, a, in[15], 19); + + /* Round 2 */ + GG (a, b, c, d, in[ 0], 3); + GG (d, a, b, c, in[ 4], 5); + GG (c, d, a, b, in[ 8], 9); + GG (b, c, d, a, in[12], 13); + GG (a, b, c, d, in[ 1], 3); + GG (d, a, b, c, in[ 5], 5); + GG (c, d, a, b, in[ 9], 9); + GG (b, c, d, a, in[13], 13); + GG (a, b, c, d, in[ 2], 3); + GG (d, a, b, c, in[ 6], 5); + GG (c, d, a, b, in[10], 9); + GG (b, c, d, a, in[14], 13); + GG (a, b, c, d, in[ 3], 3); + GG (d, a, b, c, in[ 7], 5); + GG (c, d, a, b, in[11], 9); + GG (b, c, d, a, in[15], 13); + + /* Round 3 */ + HH (a, b, c, d, in[ 0], 3); + HH (d, a, b, c, in[ 8], 9); + HH (c, d, a, b, in[ 4], 11); + HH (b, c, d, a, in[12], 15); + HH (a, b, c, d, in[ 2], 3); + HH (d, a, b, c, in[10], 9); + HH (c, d, a, b, in[ 6], 11); + HH (b, c, d, a, in[14], 15); + HH (a, b, c, d, in[ 1], 3); + HH (d, a, b, c, in[ 9], 9); + HH (c, d, a, b, in[ 5], 11); + HH (b, c, d, a, in[13], 15); + HH (a, b, c, d, in[ 3], 3); + HH (d, a, b, c, in[11], 9); + HH (c, d, a, b, in[ 7], 11); + HH (b, c, d, a, in[15], 15); +#endif + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} + +/* + ********************************************************************** + ** End of md4.c ** + ******************************* (cut) ******************************** + */ diff --git a/src/lib/crypto/builtin/md4/rsa-md4.h b/src/lib/crypto/builtin/md4/rsa-md4.h new file mode 100644 index 000000000..d4e6f6b79 --- /dev/null +++ b/src/lib/crypto/builtin/md4/rsa-md4.h @@ -0,0 +1,94 @@ +/* + * lib/crypto/md4/rsa-md4.h + * + * Copyright 1991 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * RSA MD4 header file, with Kerberos/STDC additions. + */ + +#ifndef __KRB5_RSA_MD4_H__ +#define __KRB5_RSA_MD4_H__ + +#ifdef unicos61 +#include +#endif /* unicos61 */ + +/* 16 u_char's in the digest */ +#define RSA_MD4_CKSUM_LENGTH 16 +/* des blocksize is 8, so this works nicely... */ +#define OLD_RSA_MD4_DES_CKSUM_LENGTH 16 +#define NEW_RSA_MD4_DES_CKSUM_LENGTH 24 +#define RSA_MD4_DES_CONFOUND_LENGTH 8 + +/* + ********************************************************************** + ** md4.h -- Header file for implementation of MD4 ** + ** RSA Data Security, Inc. MD4 Message Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** + ********************************************************************** + */ + +/* + ********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** + ** ** + ** License to copy and use this software is granted provided that ** + ** it is identified as the "RSA Data Security, Inc. MD4 Message ** + ** Digest Algorithm" in all material mentioning or referencing this ** + ** software or this function. ** + ** ** + ** License is also granted to make and use derivative works ** + ** provided that such works are identified as "derived from the RSA ** + ** Data Security, Inc. MD4 Message Digest Algorithm" in all ** + ** material mentioning or referencing the derived work. ** + ** ** + ** RSA Data Security, Inc. makes no representations concerning ** + ** either the merchantability of this software or the suitability ** + ** of this software for any particular purpose. It is provided "as ** + ** is" without express or implied warranty of any kind. ** + ** ** + ** These notices must be retained in any copies of any part of this ** + ** documentation and/or software. ** + ********************************************************************** + */ + +/* Data structure for MD4 (Message Digest) computation */ +typedef struct { + krb5_ui_4 i[2]; /* number of _bits_ handled mod 2^64 */ + krb5_ui_4 buf[4]; /* scratch buffer */ + unsigned char in[64]; /* input buffer */ + unsigned char digest[16]; /* actual digest after MD4Final call */ +} krb5_MD4_CTX; + +extern void krb5_MD4Init(krb5_MD4_CTX *); +extern void krb5_MD4Update(krb5_MD4_CTX *, const unsigned char *, unsigned int); +extern void krb5_MD4Final(krb5_MD4_CTX *); + +/* + ********************************************************************** + ** End of md4.h ** + ******************************* (cut) ******************************** + */ +#endif /* __KRB5_RSA_MD4_H__ */ diff --git a/src/lib/crypto/builtin/md5/ISSUES b/src/lib/crypto/builtin/md5/ISSUES new file mode 100644 index 000000000..481e52914 --- /dev/null +++ b/src/lib/crypto/builtin/md5/ISSUES @@ -0,0 +1,3 @@ +Issues to be addressed for src/lib/crypto/md5: -*- text -*- + +Assumes int is >= 32 bits. diff --git a/src/lib/crypto/builtin/md5/Makefile.in b/src/lib/crypto/builtin/md5/Makefile.in new file mode 100644 index 000000000..6da43749d --- /dev/null +++ b/src/lib/crypto/builtin/md5/Makefile.in @@ -0,0 +1,37 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/md5 +mydir=lib/crypto/builtin/md5 +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=md5 +##DOS##OBJFILE=..\$(OUTPRE)md5.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS= md5.o + +OBJS= $(OUTPRE)md5.$(OBJEXT) + +SRCS= $(srcdir)/md5.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +check-unix:: + +check-windows:: + +clean:: + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/md5/deps b/src/lib/crypto/builtin/md5/deps new file mode 100644 index 000000000..fc3378d2e --- /dev/null +++ b/src/lib/crypto/builtin/md5/deps @@ -0,0 +1,13 @@ +# +# Generated makefile dependencies follow. +# +md5.so md5.po $(OUTPRE)md5.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h md5.c rsa-md5.h diff --git a/src/lib/crypto/builtin/md5/md5.c b/src/lib/crypto/builtin/md5/md5.c new file mode 100644 index 000000000..e548dbc3a --- /dev/null +++ b/src/lib/crypto/builtin/md5/md5.c @@ -0,0 +1,343 @@ +/* + *********************************************************************** + ** md5.c -- the source code for MD5 routines ** + ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 1/91 SRD,AJ,BSK,JT Reference C ver., 7/10 constant corr. ** + *********************************************************************** + */ + +/* + * Modified by John Carr, MIT, to use Kerberos 5 typedefs. + */ + +/* + *********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** + ** ** + ** License to copy and use this software is granted provided that ** + ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** + ** Digest Algorithm" in all material mentioning or referencing this ** + ** software or this function. ** + ** ** + ** License is also granted to make and use derivative works ** + ** provided that such works are identified as "derived from the RSA ** + ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** + ** material mentioning or referencing the derived work. ** + ** ** + ** RSA Data Security, Inc. makes no representations concerning ** + ** either the merchantability of this software or the suitability ** + ** of this software for any particular purpose. It is provided "as ** + ** is" without express or implied warranty of any kind. ** + ** ** + ** These notices must be retained in any copies of any part of this ** + ** documentation and/or software. ** + *********************************************************************** + */ + +#include "k5-int.h" +#include "rsa-md5.h" + +/* + *********************************************************************** + ** Message-digest routines: ** + ** To form the message digest for a message M ** + ** (1) Initialize a context buffer mdContext using krb5_MD5Init ** + ** (2) Call krb5_MD5Update on mdContext and M ** + ** (3) Call krb5_MD5Final on mdContext ** + ** The message digest is now in mdContext->digest[0...15] ** + *********************************************************************** + */ + +/* forward declaration */ +static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in); + +static const unsigned char PADDING[64] = { + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +/* F, G, H and I are basic MD5 functions */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits */ +#define ROTATE_LEFT(x, n) ((((x) << (n)) & 0xffffffff) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */ +/* Rotation is separate from addition to prevent recomputation */ +#define FF(a, b, c, d, x, s, ac) \ + {(a) += F ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + (a) &= 0xffffffff; \ + } +#define GG(a, b, c, d, x, s, ac) \ + {(a) += G ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + (a) &= 0xffffffff; \ + } +#define HH(a, b, c, d, x, s, ac) \ + {(a) += H ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + (a) &= 0xffffffff; \ + } +#define II(a, b, c, d, x, s, ac) \ + {(a) += I ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ + (a) &= 0xffffffff; \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + (a) &= 0xffffffff; \ + } + +/* The routine krb5_MD5Init initializes the message-digest context + mdContext. All fields are set to zero. + */ +void +krb5_MD5Init (krb5_MD5_CTX *mdContext) +{ + mdContext->i[0] = mdContext->i[1] = (krb5_ui_4)0; + + /* Load magic initialization constants. + */ + mdContext->buf[0] = 0x67452301UL; + mdContext->buf[1] = 0xefcdab89UL; + mdContext->buf[2] = 0x98badcfeUL; + mdContext->buf[3] = 0x10325476UL; +} + +/* The routine krb5_MD5Update updates the message-digest context to + account for the presence of each of the characters inBuf[0..inLen-1] + in the message whose digest is being computed. + */ +void +krb5_MD5Update (krb5_MD5_CTX *mdContext, const unsigned char *inBuf, unsigned int inLen) +{ + krb5_ui_4 in[16]; + int mdi; + unsigned int i, ii; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* update number of bits */ + if ((mdContext->i[0] + ((krb5_ui_4)inLen << 3)) < mdContext->i[0]) + mdContext->i[1]++; + mdContext->i[0] += ((krb5_ui_4)inLen << 3); + mdContext->i[1] += ((krb5_ui_4)inLen >> 29); + + while (inLen--) { + /* add new character to buffer, increment mdi */ + mdContext->in[mdi++] = *inBuf++; + + /* transform if necessary */ + if (mdi == 0x40) { + for (i = 0, ii = 0; i < 16; i++, ii += 4) + in[i] = load_32_le(mdContext->in+ii); + Transform (mdContext->buf, in); + mdi = 0; + } + } +} + +/* The routine krb5_MD5Final terminates the message-digest computation and + ends with the desired message digest in mdContext->digest[0...15]. + */ +void +krb5_MD5Final (krb5_MD5_CTX *mdContext) +{ + krb5_ui_4 in[16]; + int mdi; + unsigned int i, ii; + unsigned int padLen; + + /* save number of bits */ + in[14] = mdContext->i[0]; + in[15] = mdContext->i[1]; + + /* compute number of bytes mod 64 */ + mdi = (int)((mdContext->i[0] >> 3) & 0x3F); + + /* pad out to 56 mod 64 */ + padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); + krb5_MD5Update (mdContext, PADDING, padLen); + + /* append length in bits and transform */ + for (i = 0, ii = 0; i < 14; i++, ii += 4) + in[i] = load_32_le(mdContext->in+ii); + Transform (mdContext->buf, in); + + /* store buffer in digest */ + for (i = 0, ii = 0; i < 4; i++, ii += 4) { + store_32_le(mdContext->buf[i], mdContext->digest+ii); + } +} + +/* Basic MD5 step. Transforms buf based on in. + */ +static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in) +{ + register krb5_ui_4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; + +#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) + + int i; +#define ROTATE { krb5_ui_4 temp; temp = d, d = c, c = b, b = a, a = temp; } + for (i = 0; i < 16; i++) { + const unsigned char round1s[] = { 7, 12, 17, 22 }; + const krb5_ui_4 round1consts[] = { + 3614090360UL, 3905402710UL, 606105819UL, 3250441966UL, + 4118548399UL, 1200080426UL, 2821735955UL, 4249261313UL, + 1770035416UL, 2336552879UL, 4294925233UL, 2304563134UL, + 1804603682UL, 4254626195UL, 2792965006UL, 1236535329UL, + }; + FF (a, b, c, d, in[i], round1s[i%4], round1consts[i]); + ROTATE; + } + for (i = 0; i < 16; i++) { + const unsigned char round2s[] = { 5, 9, 14, 20 }; + const krb5_ui_4 round2consts[] = { + 4129170786UL, 3225465664UL, 643717713UL, 3921069994UL, + 3593408605UL, 38016083UL, 3634488961UL, 3889429448UL, + 568446438UL, 3275163606UL, 4107603335UL, 1163531501UL, + 2850285829UL, 4243563512UL, 1735328473UL, 2368359562UL, + }; + int r2index = (1 + i * 5) % 16; + GG (a, b, c, d, in[r2index], round2s[i%4], round2consts[i]); + ROTATE; + } + for (i = 0; i < 16; i++) { + static const unsigned char round3s[] = { 4, 11, 16, 23 }; + static const krb5_ui_4 round3consts[] = { + 4294588738UL, 2272392833UL, 1839030562UL, 4259657740UL, + 2763975236UL, 1272893353UL, 4139469664UL, 3200236656UL, + 681279174UL, 3936430074UL, 3572445317UL, 76029189UL, + 3654602809UL, 3873151461UL, 530742520UL, 3299628645UL, + }; + int r3index = (5 + i * 3) % 16; + HH (a, b, c, d, in[r3index], round3s[i%4], round3consts[i]); + ROTATE; + } + for (i = 0; i < 16; i++) { + static const unsigned char round4s[] = { 6, 10, 15, 21 }; + static const krb5_ui_4 round4consts[] = { + 4096336452UL, 1126891415UL, 2878612391UL, 4237533241UL, + 1700485571UL, 2399980690UL, 4293915773UL, 2240044497UL, + 1873313359UL, 4264355552UL, 2734768916UL, 1309151649UL, + 4149444226UL, 3174756917UL, 718787259UL, 3951481745UL, + }; + int r4index = (7 * i) % 16; + II (a, b, c, d, in[r4index], round4s[i%4], round4consts[i]); + ROTATE; + } + +#else + + /* Round 1 */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 + FF ( a, b, c, d, in[ 0], S11, 3614090360UL); /* 1 */ + FF ( d, a, b, c, in[ 1], S12, 3905402710UL); /* 2 */ + FF ( c, d, a, b, in[ 2], S13, 606105819UL); /* 3 */ + FF ( b, c, d, a, in[ 3], S14, 3250441966UL); /* 4 */ + FF ( a, b, c, d, in[ 4], S11, 4118548399UL); /* 5 */ + FF ( d, a, b, c, in[ 5], S12, 1200080426UL); /* 6 */ + FF ( c, d, a, b, in[ 6], S13, 2821735955UL); /* 7 */ + FF ( b, c, d, a, in[ 7], S14, 4249261313UL); /* 8 */ + FF ( a, b, c, d, in[ 8], S11, 1770035416UL); /* 9 */ + FF ( d, a, b, c, in[ 9], S12, 2336552879UL); /* 10 */ + FF ( c, d, a, b, in[10], S13, 4294925233UL); /* 11 */ + FF ( b, c, d, a, in[11], S14, 2304563134UL); /* 12 */ + FF ( a, b, c, d, in[12], S11, 1804603682UL); /* 13 */ + FF ( d, a, b, c, in[13], S12, 4254626195UL); /* 14 */ + FF ( c, d, a, b, in[14], S13, 2792965006UL); /* 15 */ + FF ( b, c, d, a, in[15], S14, 1236535329UL); /* 16 */ + + /* Round 2 */ +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 + GG ( a, b, c, d, in[ 1], S21, 4129170786UL); /* 17 */ + GG ( d, a, b, c, in[ 6], S22, 3225465664UL); /* 18 */ + GG ( c, d, a, b, in[11], S23, 643717713UL); /* 19 */ + GG ( b, c, d, a, in[ 0], S24, 3921069994UL); /* 20 */ + GG ( a, b, c, d, in[ 5], S21, 3593408605UL); /* 21 */ + GG ( d, a, b, c, in[10], S22, 38016083UL); /* 22 */ + GG ( c, d, a, b, in[15], S23, 3634488961UL); /* 23 */ + GG ( b, c, d, a, in[ 4], S24, 3889429448UL); /* 24 */ + GG ( a, b, c, d, in[ 9], S21, 568446438UL); /* 25 */ + GG ( d, a, b, c, in[14], S22, 3275163606UL); /* 26 */ + GG ( c, d, a, b, in[ 3], S23, 4107603335UL); /* 27 */ + GG ( b, c, d, a, in[ 8], S24, 1163531501UL); /* 28 */ + GG ( a, b, c, d, in[13], S21, 2850285829UL); /* 29 */ + GG ( d, a, b, c, in[ 2], S22, 4243563512UL); /* 30 */ + GG ( c, d, a, b, in[ 7], S23, 1735328473UL); /* 31 */ + GG ( b, c, d, a, in[12], S24, 2368359562UL); /* 32 */ + + /* Round 3 */ +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 + HH ( a, b, c, d, in[ 5], S31, 4294588738UL); /* 33 */ + HH ( d, a, b, c, in[ 8], S32, 2272392833UL); /* 34 */ + HH ( c, d, a, b, in[11], S33, 1839030562UL); /* 35 */ + HH ( b, c, d, a, in[14], S34, 4259657740UL); /* 36 */ + HH ( a, b, c, d, in[ 1], S31, 2763975236UL); /* 37 */ + HH ( d, a, b, c, in[ 4], S32, 1272893353UL); /* 38 */ + HH ( c, d, a, b, in[ 7], S33, 4139469664UL); /* 39 */ + HH ( b, c, d, a, in[10], S34, 3200236656UL); /* 40 */ + HH ( a, b, c, d, in[13], S31, 681279174UL); /* 41 */ + HH ( d, a, b, c, in[ 0], S32, 3936430074UL); /* 42 */ + HH ( c, d, a, b, in[ 3], S33, 3572445317UL); /* 43 */ + HH ( b, c, d, a, in[ 6], S34, 76029189UL); /* 44 */ + HH ( a, b, c, d, in[ 9], S31, 3654602809UL); /* 45 */ + HH ( d, a, b, c, in[12], S32, 3873151461UL); /* 46 */ + HH ( c, d, a, b, in[15], S33, 530742520UL); /* 47 */ + HH ( b, c, d, a, in[ 2], S34, 3299628645UL); /* 48 */ + + /* Round 4 */ +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + II ( a, b, c, d, in[ 0], S41, 4096336452UL); /* 49 */ + II ( d, a, b, c, in[ 7], S42, 1126891415UL); /* 50 */ + II ( c, d, a, b, in[14], S43, 2878612391UL); /* 51 */ + II ( b, c, d, a, in[ 5], S44, 4237533241UL); /* 52 */ + II ( a, b, c, d, in[12], S41, 1700485571UL); /* 53 */ + II ( d, a, b, c, in[ 3], S42, 2399980690UL); /* 54 */ + II ( c, d, a, b, in[10], S43, 4293915773UL); /* 55 */ + II ( b, c, d, a, in[ 1], S44, 2240044497UL); /* 56 */ + II ( a, b, c, d, in[ 8], S41, 1873313359UL); /* 57 */ + II ( d, a, b, c, in[15], S42, 4264355552UL); /* 58 */ + II ( c, d, a, b, in[ 6], S43, 2734768916UL); /* 59 */ + II ( b, c, d, a, in[13], S44, 1309151649UL); /* 60 */ + II ( a, b, c, d, in[ 4], S41, 4149444226UL); /* 61 */ + II ( d, a, b, c, in[11], S42, 3174756917UL); /* 62 */ + II ( c, d, a, b, in[ 2], S43, 718787259UL); /* 63 */ + II ( b, c, d, a, in[ 9], S44, 3951481745UL); /* 64 */ + +#endif /* small? */ + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} diff --git a/src/lib/crypto/builtin/md5/rsa-md5.h b/src/lib/crypto/builtin/md5/rsa-md5.h new file mode 100644 index 000000000..846b23856 --- /dev/null +++ b/src/lib/crypto/builtin/md5/rsa-md5.h @@ -0,0 +1,60 @@ +/* + *********************************************************************** + ** md5.h -- header file for implementation of MD5 ** + ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** + ** Revised (for MD5): RLR 4/27/91 ** + ** -- G modified to have y&~z instead of y&z ** + ** -- FF, GG, HH modified to add in last register done ** + ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** + ** -- distinct additive constant for each step ** + ** -- round 4 added, working mod 7 ** + *********************************************************************** + */ + +/* + *********************************************************************** + ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** + ** ** + ** License to copy and use this software is granted provided that ** + ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** + ** Digest Algorithm" in all material mentioning or referencing this ** + ** software or this function. ** + ** ** + ** License is also granted to make and use derivative works ** + ** provided that such works are identified as "derived from the RSA ** + ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** + ** material mentioning or referencing the derived work. ** + ** ** + ** RSA Data Security, Inc. makes no representations concerning ** + ** either the merchantability of this software or the suitability ** + ** of this software for any particular purpose. It is provided "as ** + ** is" without express or implied warranty of any kind. ** + ** ** + ** These notices must be retained in any copies of any part of this ** + ** documentation and/or software. ** + *********************************************************************** + */ + +#ifndef KRB5_RSA_MD5__ +#define KRB5_RSA_MD5__ + +/* Data structure for MD5 (Message-Digest) computation */ +typedef struct { + krb5_ui_4 i[2]; /* number of _bits_ handled mod 2^64 */ + krb5_ui_4 buf[4]; /* scratch buffer */ + unsigned char in[64]; /* input buffer */ + unsigned char digest[16]; /* actual digest after MD5Final call */ +} krb5_MD5_CTX; + +extern void krb5_MD5Init(krb5_MD5_CTX *); +extern void krb5_MD5Update(krb5_MD5_CTX *,const unsigned char *,unsigned int); +extern void krb5_MD5Final(krb5_MD5_CTX *); + +#define RSA_MD5_CKSUM_LENGTH 16 +#define OLD_RSA_MD5_DES_CKSUM_LENGTH 16 +#define NEW_RSA_MD5_DES_CKSUM_LENGTH 24 +#define RSA_MD5_DES_CONFOUND_LENGTH 8 + +#endif /* KRB5_RSA_MD5__ */ diff --git a/src/lib/crypto/builtin/pbkdf2.c b/src/lib/crypto/builtin/pbkdf2.c new file mode 100644 index 000000000..d897e9a71 --- /dev/null +++ b/src/lib/crypto/builtin/pbkdf2.c @@ -0,0 +1,265 @@ +/* + * lib/crypto/pbkdf2.c + * + * Copyright 2002, 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Implementation of PBKDF2 from RFC 2898. + * Not currently used; likely to be used when we get around to AES support. + */ + +#include +#include "k5-int.h" +#include "hash_provider.h" + +/* Not exported, for now. */ +static krb5_error_code +krb5int_pbkdf2 (krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, + krb5_data *), + size_t hlen, const krb5_data *pass, const krb5_data *salt, + unsigned long count, const krb5_data *output); + +static int debug_hmac = 0; + +static void printd (const char *descr, krb5_data *d) { + unsigned int i, j; + const int r = 16; + + printf("%s:", descr); + + for (i = 0; i < d->length; i += r) { + printf("\n %04x: ", i); + for (j = i; j < i + r && j < d->length; j++) + printf(" %02x", 0xff & d->data[j]); + for (; j < i + r; j++) + printf(" "); + printf(" "); + for (j = i; j < i + r && j < d->length; j++) { + int c = 0xff & d->data[j]; + printf("%c", isprint(c) ? c : '.'); + } + } + printf("\n"); +} +static void printk(const char *descr, krb5_keyblock *k) { + krb5_data d; + d.data = (char *) k->contents; + d.length = k->length; + printd(descr, &d); +} + +static krb5_error_code +F(char *output, char *u_tmp1, char *u_tmp2, + krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, krb5_data *), + size_t hlen, + const krb5_data *pass, const krb5_data *salt, + unsigned long count, int i) +{ + unsigned char ibytes[4]; + size_t tlen; + unsigned int j, k; + krb5_keyblock pdata; + krb5_data sdata; + krb5_data out; + krb5_error_code err; + + pdata.contents = pass->data; + pdata.length = pass->length; + +#if 0 + printf("F(i=%d, count=%lu, pass=%d:%s)\n", i, count, + pass->length, pass->data); + printk("F password", &pdata); +#endif + + /* Compute U_1. */ + store_32_be(i, ibytes); + + tlen = salt->length; + memcpy(u_tmp2, salt->data, tlen); + memcpy(u_tmp2 + tlen, ibytes, 4); + tlen += 4; + sdata.data = u_tmp2; + sdata.length = tlen; + +#if 0 + printd("initial salt", &sdata); +#endif + + out.data = u_tmp1; + out.length = hlen; + +#if 0 + printf("F: computing hmac #1 (U_1) with %s\n", pdata.contents); +#endif + err = (*prf)(&pdata, &sdata, &out); + if (err) + return err; +#if 0 + printd("F: prf return value", &out); +#endif + memcpy(output, u_tmp1, hlen); + + /* Compute U_2, .. U_c. */ + sdata.length = hlen; + for (j = 2; j <= count; j++) { +#if 0 + printf("F: computing hmac #%d (U_%d)\n", j, j); +#endif + memcpy(u_tmp2, u_tmp1, hlen); + err = (*prf)(&pdata, &sdata, &out); + if (err) + return err; +#if 0 + printd("F: prf return value", &out); +#endif + /* And xor them together. */ + for (k = 0; k < hlen; k++) + output[k] ^= u_tmp1[k]; +#if 0 + printf("F: xor result:\n"); + for (k = 0; k < hlen; k++) + printf(" %02x", 0xff & output[k]); + printf("\n"); +#endif + } + return 0; +} + +static krb5_error_code +krb5int_pbkdf2 (krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, + krb5_data *), + size_t hlen, + const krb5_data *pass, const krb5_data *salt, + unsigned long count, const krb5_data *output) +{ + int l, r, i; + char *utmp1, *utmp2; + char utmp3[20]; /* XXX length shouldn't be hardcoded! */ + + if (output->length == 0 || hlen == 0) + abort(); + /* Step 1 & 2. */ + if (output->length / hlen > 0xffffffff) + abort(); + /* Step 2. */ + l = (output->length + hlen - 1) / hlen; + r = output->length - (l - 1) * hlen; + + utmp1 = /*output + dklen; */ malloc(hlen); + if (utmp1 == NULL) + return ENOMEM; + utmp2 = /*utmp1 + hlen; */ malloc(salt->length + 4 + hlen); + if (utmp2 == NULL) { + free(utmp1); + return ENOMEM; + } + + /* Step 3. */ + for (i = 1; i <= l; i++) { +#if 0 + int j; +#endif + krb5_error_code err; + char *out; + + if (i == l) + out = utmp3; + else + out = output->data + (i-1) * hlen; + err = F(out, utmp1, utmp2, prf, hlen, pass, salt, count, i); + if (err) { + free(utmp1); + free(utmp2); + return err; + } + if (i == l) + memcpy(output->data + (i-1) * hlen, utmp3, + output->length - (i-1) * hlen); + +#if 0 + printf("after F(%d), @%p:\n", i, output->data); + for (j = (i-1) * hlen; j < i * hlen; j++) + printf(" %02x", 0xff & output->data[j]); + printf ("\n"); +#endif + } + free(utmp1); + free(utmp2); + return 0; +} + +static krb5_error_code hmac1(const struct krb5_hash_provider *h, + krb5_keyblock *key, krb5_data *in, krb5_data *out) +{ + char tmp[40]; + size_t blocksize, hashsize; + krb5_error_code err; + krb5_keyblock k; + + k = *key; + key = &k; + if (debug_hmac) + printk(" test key", key); + blocksize = h->blocksize; + hashsize = h->hashsize; + if (hashsize > sizeof(tmp)) + abort(); + if (key->length > blocksize) { + krb5_data d, d2; + d.data = (char *) key->contents; + d.length = key->length; + d2.data = tmp; + d2.length = hashsize; + err = h->hash (1, &d, &d2); + if (err) + return err; + key->length = d2.length; + key->contents = (krb5_octet *) d2.data; + if (debug_hmac) + printk(" pre-hashed key", key); + } + if (debug_hmac) + printd(" hmac input", in); + err = krb5_hmac(h, key, 1, in, out); + if (err == 0 && debug_hmac) + printd(" hmac output", out); + return err; +} + +static krb5_error_code +foo(krb5_keyblock *pass, krb5_data *salt, krb5_data *out) +{ + krb5_error_code err; + + memset(out->data, 0, out->length); + err = hmac1 (&krb5int_hash_sha1, pass, salt, out); + return err; +} + +krb5_error_code +krb5int_pbkdf2_hmac_sha1 (const krb5_data *out, unsigned long count, + const krb5_data *pass, const krb5_data *salt) +{ + return krb5int_pbkdf2 (foo, 20, pass, salt, count, out); +} diff --git a/src/lib/crypto/builtin/sha1/ISSUES b/src/lib/crypto/builtin/sha1/ISSUES new file mode 100644 index 000000000..8b7e8a2a1 --- /dev/null +++ b/src/lib/crypto/builtin/sha1/ISSUES @@ -0,0 +1,7 @@ +Issues to be addressed for src/lib/crypto/sha1: -*- text -*- + +Assumes int (look for "count") is >= 32 bits. + +Changing the types of internal variables is easy, but shsUpdate takes +an int parameter; changing that could change the ABI on some +platforms. diff --git a/src/lib/crypto/builtin/sha1/Makefile.in b/src/lib/crypto/builtin/sha1/Makefile.in new file mode 100644 index 000000000..81776f57b --- /dev/null +++ b/src/lib/crypto/builtin/sha1/Makefile.in @@ -0,0 +1,37 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/builtin/sha1 +mydir=lib/crypto/builtin/sha1 +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=sha1 +##DOS##OBJFILE=..\$(OUTPRE)sha1.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS= shs.o + +OBJS= $(OUTPRE)shs.$(OBJEXT) + +SRCS= $(srcdir)/shs.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +check-unix:: + +check-windows:: + +clean:: + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/builtin/sha1/deps b/src/lib/crypto/builtin/sha1/deps new file mode 100644 index 000000000..a8f51a8e6 --- /dev/null +++ b/src/lib/crypto/builtin/sha1/deps @@ -0,0 +1,13 @@ +# +# Generated makefile dependencies follow. +# +shs.so shs.po $(OUTPRE)shs.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h shs.c shs.h diff --git a/src/lib/crypto/builtin/sha1/shs.c b/src/lib/crypto/builtin/sha1/shs.c new file mode 100644 index 000000000..d9372df39 --- /dev/null +++ b/src/lib/crypto/builtin/sha1/shs.c @@ -0,0 +1,381 @@ +#include "shs.h" +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#include + +/* The SHS f()-functions. The f1 and f3 functions can be optimized to + save one boolean operation each - thanks to Rich Schroeppel, + rcs@cs.arizona.edu for discovering this */ + +#define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */ +#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */ +#define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */ +#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */ + +/* The SHS Mysterious Constants */ + +#define K1 0x5A827999L /* Rounds 0-19 */ +#define K2 0x6ED9EBA1L /* Rounds 20-39 */ +#define K3 0x8F1BBCDCL /* Rounds 40-59 */ +#define K4 0xCA62C1D6L /* Rounds 60-79 */ + +/* SHS initial values */ + +#define h0init 0x67452301L +#define h1init 0xEFCDAB89L +#define h2init 0x98BADCFEL +#define h3init 0x10325476L +#define h4init 0xC3D2E1F0L + +/* Note that it may be necessary to add parentheses to these macros if they + are to be called with expressions as arguments */ + +/* 32-bit rotate left - kludged with shifts */ + +#define ROTL(n,X) ((((X) << (n)) & 0xffffffff) | ((X) >> (32 - n))) + +/* The initial expanding function. The hash function is defined over an + 80-word expanded input array W, where the first 16 are copies of the input + data, and the remaining 64 are defined by + + W[ i ] = W[ i - 16 ] ^ W[ i - 14 ] ^ W[ i - 8 ] ^ W[ i - 3 ] + + This implementation generates these values on the fly in a circular + buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this + optimization. + + The updated SHS changes the expanding function by adding a rotate of 1 + bit. Thanks to Jim Gillogly, jim@rand.org, and an anonymous contributor + for this information */ + +#ifdef NEW_SHS +#define expand(W,i) ( W[ i & 15 ] = ROTL( 1, ( W[ i & 15 ] ^ W[ (i - 14) & 15 ] ^ \ + W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ))) +#else +#define expand(W,i) ( W[ i & 15 ] ^= W[ (i - 14) & 15 ] ^ \ + W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ) +#endif /* NEW_SHS */ + +/* The prototype SHS sub-round. The fundamental sub-round is: + + a' = e + ROTL( 5, a ) + f( b, c, d ) + k + data; + b' = a; + c' = ROTL( 30, b ); + d' = c; + e' = d; + + but this is implemented by unrolling the loop 5 times and renaming the + variables ( e, a, b, c, d ) = ( a', b', c', d', e' ) each iteration. + This code is then replicated 20 times for each of the 4 functions, using + the next 20 values from the W[] array each time */ + +#define subRound(a, b, c, d, e, f, k, data) \ + ( e += ROTL( 5, a ) + f( b, c, d ) + k + data, \ + e &= 0xffffffff, b = ROTL( 30, b ) ) + +/* Initialize the SHS values */ + +void shsInit(SHS_INFO *shsInfo) +{ + /* Set the h-vars to their initial values */ + shsInfo->digest[ 0 ] = h0init; + shsInfo->digest[ 1 ] = h1init; + shsInfo->digest[ 2 ] = h2init; + shsInfo->digest[ 3 ] = h3init; + shsInfo->digest[ 4 ] = h4init; + + /* Initialise bit count */ + shsInfo->countLo = shsInfo->countHi = 0; +} + +/* Perform the SHS transformation. Note that this code, like MD5, seems to + break some optimizing compilers due to the complexity of the expressions + and the size of the basic block. It may be necessary to split it into + sections, e.g. based on the four subrounds + + Note that this corrupts the shsInfo->data area */ + +static void SHSTransform (SHS_LONG *digest, const SHS_LONG *data); + +static +void SHSTransform(SHS_LONG *digest, const SHS_LONG *data) +{ + SHS_LONG A, B, C, D, E; /* Local vars */ + SHS_LONG eData[ 16 ]; /* Expanded data */ + + /* Set up first buffer and local data buffer */ + A = digest[ 0 ]; + B = digest[ 1 ]; + C = digest[ 2 ]; + D = digest[ 3 ]; + E = digest[ 4 ]; + memcpy(eData, data, sizeof (eData)); + +#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) + + { + int i; + SHS_LONG temp; + for (i = 0; i < 20; i++) { + SHS_LONG x = (i < 16) ? eData[i] : expand(eData, i); + subRound(A, B, C, D, E, f1, K1, x); + temp = E, E = D, D = C, C = B, B = A, A = temp; + } + for (i = 20; i < 40; i++) { + subRound(A, B, C, D, E, f2, K2, expand(eData, i)); + temp = E, E = D, D = C, C = B, B = A, A = temp; + } + for (i = 40; i < 60; i++) { + subRound(A, B, C, D, E, f3, K3, expand(eData, i)); + temp = E, E = D, D = C, C = B, B = A, A = temp; + } + for (i = 60; i < 80; i++) { + subRound(A, B, C, D, E, f4, K4, expand(eData, i)); + temp = E, E = D, D = C, C = B, B = A, A = temp; + } + } + +#else + + /* Heavy mangling, in 4 sub-rounds of 20 interations each. */ + subRound( A, B, C, D, E, f1, K1, eData[ 0 ] ); + subRound( E, A, B, C, D, f1, K1, eData[ 1 ] ); + subRound( D, E, A, B, C, f1, K1, eData[ 2 ] ); + subRound( C, D, E, A, B, f1, K1, eData[ 3 ] ); + subRound( B, C, D, E, A, f1, K1, eData[ 4 ] ); + subRound( A, B, C, D, E, f1, K1, eData[ 5 ] ); + subRound( E, A, B, C, D, f1, K1, eData[ 6 ] ); + subRound( D, E, A, B, C, f1, K1, eData[ 7 ] ); + subRound( C, D, E, A, B, f1, K1, eData[ 8 ] ); + subRound( B, C, D, E, A, f1, K1, eData[ 9 ] ); + subRound( A, B, C, D, E, f1, K1, eData[ 10 ] ); + subRound( E, A, B, C, D, f1, K1, eData[ 11 ] ); + subRound( D, E, A, B, C, f1, K1, eData[ 12 ] ); + subRound( C, D, E, A, B, f1, K1, eData[ 13 ] ); + subRound( B, C, D, E, A, f1, K1, eData[ 14 ] ); + subRound( A, B, C, D, E, f1, K1, eData[ 15 ] ); + subRound( E, A, B, C, D, f1, K1, expand( eData, 16 ) ); + subRound( D, E, A, B, C, f1, K1, expand( eData, 17 ) ); + subRound( C, D, E, A, B, f1, K1, expand( eData, 18 ) ); + subRound( B, C, D, E, A, f1, K1, expand( eData, 19 ) ); + + subRound( A, B, C, D, E, f2, K2, expand( eData, 20 ) ); + subRound( E, A, B, C, D, f2, K2, expand( eData, 21 ) ); + subRound( D, E, A, B, C, f2, K2, expand( eData, 22 ) ); + subRound( C, D, E, A, B, f2, K2, expand( eData, 23 ) ); + subRound( B, C, D, E, A, f2, K2, expand( eData, 24 ) ); + subRound( A, B, C, D, E, f2, K2, expand( eData, 25 ) ); + subRound( E, A, B, C, D, f2, K2, expand( eData, 26 ) ); + subRound( D, E, A, B, C, f2, K2, expand( eData, 27 ) ); + subRound( C, D, E, A, B, f2, K2, expand( eData, 28 ) ); + subRound( B, C, D, E, A, f2, K2, expand( eData, 29 ) ); + subRound( A, B, C, D, E, f2, K2, expand( eData, 30 ) ); + subRound( E, A, B, C, D, f2, K2, expand( eData, 31 ) ); + subRound( D, E, A, B, C, f2, K2, expand( eData, 32 ) ); + subRound( C, D, E, A, B, f2, K2, expand( eData, 33 ) ); + subRound( B, C, D, E, A, f2, K2, expand( eData, 34 ) ); + subRound( A, B, C, D, E, f2, K2, expand( eData, 35 ) ); + subRound( E, A, B, C, D, f2, K2, expand( eData, 36 ) ); + subRound( D, E, A, B, C, f2, K2, expand( eData, 37 ) ); + subRound( C, D, E, A, B, f2, K2, expand( eData, 38 ) ); + subRound( B, C, D, E, A, f2, K2, expand( eData, 39 ) ); + + subRound( A, B, C, D, E, f3, K3, expand( eData, 40 ) ); + subRound( E, A, B, C, D, f3, K3, expand( eData, 41 ) ); + subRound( D, E, A, B, C, f3, K3, expand( eData, 42 ) ); + subRound( C, D, E, A, B, f3, K3, expand( eData, 43 ) ); + subRound( B, C, D, E, A, f3, K3, expand( eData, 44 ) ); + subRound( A, B, C, D, E, f3, K3, expand( eData, 45 ) ); + subRound( E, A, B, C, D, f3, K3, expand( eData, 46 ) ); + subRound( D, E, A, B, C, f3, K3, expand( eData, 47 ) ); + subRound( C, D, E, A, B, f3, K3, expand( eData, 48 ) ); + subRound( B, C, D, E, A, f3, K3, expand( eData, 49 ) ); + subRound( A, B, C, D, E, f3, K3, expand( eData, 50 ) ); + subRound( E, A, B, C, D, f3, K3, expand( eData, 51 ) ); + subRound( D, E, A, B, C, f3, K3, expand( eData, 52 ) ); + subRound( C, D, E, A, B, f3, K3, expand( eData, 53 ) ); + subRound( B, C, D, E, A, f3, K3, expand( eData, 54 ) ); + subRound( A, B, C, D, E, f3, K3, expand( eData, 55 ) ); + subRound( E, A, B, C, D, f3, K3, expand( eData, 56 ) ); + subRound( D, E, A, B, C, f3, K3, expand( eData, 57 ) ); + subRound( C, D, E, A, B, f3, K3, expand( eData, 58 ) ); + subRound( B, C, D, E, A, f3, K3, expand( eData, 59 ) ); + + subRound( A, B, C, D, E, f4, K4, expand( eData, 60 ) ); + subRound( E, A, B, C, D, f4, K4, expand( eData, 61 ) ); + subRound( D, E, A, B, C, f4, K4, expand( eData, 62 ) ); + subRound( C, D, E, A, B, f4, K4, expand( eData, 63 ) ); + subRound( B, C, D, E, A, f4, K4, expand( eData, 64 ) ); + subRound( A, B, C, D, E, f4, K4, expand( eData, 65 ) ); + subRound( E, A, B, C, D, f4, K4, expand( eData, 66 ) ); + subRound( D, E, A, B, C, f4, K4, expand( eData, 67 ) ); + subRound( C, D, E, A, B, f4, K4, expand( eData, 68 ) ); + subRound( B, C, D, E, A, f4, K4, expand( eData, 69 ) ); + subRound( A, B, C, D, E, f4, K4, expand( eData, 70 ) ); + subRound( E, A, B, C, D, f4, K4, expand( eData, 71 ) ); + subRound( D, E, A, B, C, f4, K4, expand( eData, 72 ) ); + subRound( C, D, E, A, B, f4, K4, expand( eData, 73 ) ); + subRound( B, C, D, E, A, f4, K4, expand( eData, 74 ) ); + subRound( A, B, C, D, E, f4, K4, expand( eData, 75 ) ); + subRound( E, A, B, C, D, f4, K4, expand( eData, 76 ) ); + subRound( D, E, A, B, C, f4, K4, expand( eData, 77 ) ); + subRound( C, D, E, A, B, f4, K4, expand( eData, 78 ) ); + subRound( B, C, D, E, A, f4, K4, expand( eData, 79 ) ); + +#endif + + /* Build message digest */ + digest[ 0 ] += A; + digest[ 0 ] &= 0xffffffff; + digest[ 1 ] += B; + digest[ 1 ] &= 0xffffffff; + digest[ 2 ] += C; + digest[ 2 ] &= 0xffffffff; + digest[ 3 ] += D; + digest[ 3 ] &= 0xffffffff; + digest[ 4 ] += E; + digest[ 4 ] &= 0xffffffff; +} + +/* Update SHS for a block of data */ + +void shsUpdate(SHS_INFO *shsInfo, const SHS_BYTE *buffer, unsigned int count) +{ + SHS_LONG tmp; + unsigned int dataCount; + int canfill; + SHS_LONG *lp; + + /* Update bitcount */ + tmp = shsInfo->countLo; + shsInfo->countLo = tmp + (((SHS_LONG) count) << 3 ); + if ((shsInfo->countLo &= 0xffffffff) < tmp) + shsInfo->countHi++; /* Carry from low to high */ + shsInfo->countHi += count >> 29; + + /* Get count of bytes already in data */ + dataCount = (tmp >> 3) & 0x3F; + + /* Handle any leading odd-sized chunks */ + if (dataCount) { + lp = shsInfo->data + dataCount / 4; + dataCount = SHS_DATASIZE - dataCount; + canfill = (count >= dataCount); + + if (dataCount % 4) { + /* Fill out a full 32 bit word first if needed -- this + is not very efficient (computed shift amount), + but it shouldn't happen often. */ + while (dataCount % 4 && count > 0) { + *lp |= (SHS_LONG) *buffer++ << ((--dataCount % 4) * 8); + count--; + } + lp++; + } + while (lp < shsInfo->data + 16) { + if (count < 4) { + *lp = 0; + switch (count % 4) { + case 3: + *lp |= (SHS_LONG) buffer[2] << 8; + case 2: + *lp |= (SHS_LONG) buffer[1] << 16; + case 1: + *lp |= (SHS_LONG) buffer[0] << 24; + } + count = 0; + break; /* out of while loop */ + } + *lp++ = load_32_be(buffer); + buffer += 4; + count -= 4; + } + if (canfill) { + SHSTransform(shsInfo->digest, shsInfo->data); + } + } + + /* Process data in SHS_DATASIZE chunks */ + while (count >= SHS_DATASIZE) { + lp = shsInfo->data; + while (lp < shsInfo->data + 16) { + *lp++ = load_32_be(buffer); + buffer += 4; + } + SHSTransform(shsInfo->digest, shsInfo->data); + count -= SHS_DATASIZE; + } + + if (count > 0) { + lp = shsInfo->data; + while (count > 4) { + *lp++ = load_32_be(buffer); + buffer += 4; + count -= 4; + } + *lp = 0; + switch (count % 4) { + case 0: + *lp |= ((SHS_LONG) buffer[3]); + case 3: + *lp |= ((SHS_LONG) buffer[2]) << 8; + case 2: + *lp |= ((SHS_LONG) buffer[1]) << 16; + case 1: + *lp |= ((SHS_LONG) buffer[0]) << 24; + } + } +} + +/* Final wrapup - pad to SHS_DATASIZE-byte boundary with the bit pattern + 1 0* (64-bit count of bits processed, MSB-first) */ + +void shsFinal(SHS_INFO *shsInfo) +{ + int count; + SHS_LONG *lp; + + /* Compute number of bytes mod 64 */ + count = (int) shsInfo->countLo; + count = (count >> 3) & 0x3F; + + /* Set the first char of padding to 0x80. This is safe since there is + always at least one byte free */ + lp = shsInfo->data + count / 4; + switch (count % 4) { + case 3: + *lp++ |= (SHS_LONG) 0x80; + break; + case 2: + *lp++ |= (SHS_LONG) 0x80 << 8; + break; + case 1: + *lp++ |= (SHS_LONG) 0x80 << 16; + break; + case 0: + *lp++ = (SHS_LONG) 0x80 << 24; + } + + /* at this point, lp can point *past* shsInfo->data. If it points + there, just Transform and reset. If it points to the last + element, set that to zero. This pads out to 64 bytes if not + enough room for length words */ + + if (lp == shsInfo->data + 15) + *lp++ = 0; + + if (lp == shsInfo->data + 16) { + SHSTransform(shsInfo->digest, shsInfo->data); + lp = shsInfo->data; + } + + /* Pad out to 56 bytes */ + while (lp < shsInfo->data + 14) + *lp++ = 0; + + /* Append length in bits and transform */ + *lp++ = shsInfo->countHi; + *lp++ = shsInfo->countLo; + SHSTransform(shsInfo->digest, shsInfo->data); +} diff --git a/src/lib/crypto/builtin/sha1/shs.h b/src/lib/crypto/builtin/sha1/shs.h new file mode 100644 index 000000000..6dcb41b40 --- /dev/null +++ b/src/lib/crypto/builtin/sha1/shs.h @@ -0,0 +1,45 @@ +#ifndef _SHS_DEFINED + +#include "k5-int.h" + +#define _SHS_DEFINED + +/* Some useful types */ + +typedef krb5_octet SHS_BYTE; +typedef krb5_ui_4 SHS_LONG; + +/* Define the following to use the updated SHS implementation */ +#define NEW_SHS /**/ + +/* The SHS block size and message digest sizes, in bytes */ + +#define SHS_DATASIZE 64 +#define SHS_DIGESTSIZE 20 + +/* The structure for storing SHS info */ + +typedef struct { + SHS_LONG digest[ 5 ]; /* Message digest */ + SHS_LONG countLo, countHi; /* 64-bit bit count */ + SHS_LONG data[ 16 ]; /* SHS data buffer */ + } SHS_INFO; + +/* Message digest functions (shs.c) */ +void shsInit(SHS_INFO *shsInfo); +void shsUpdate(SHS_INFO *shsInfo, const SHS_BYTE *buffer, unsigned int count); +void shsFinal(SHS_INFO *shsInfo); + + +/* Keyed Message digest functions (hmac_sha.c) */ +krb5_error_code hmac_sha(krb5_octet *text, + int text_len, + krb5_octet *key, + int key_len, + krb5_octet *digest); + + +#define NIST_SHA_CKSUM_LENGTH SHS_DIGESTSIZE +#define HMAC_SHA_CKSUM_LENGTH SHS_DIGESTSIZE + +#endif /* _SHS_DEFINED */ diff --git a/src/lib/crypto/cf2.c b/src/lib/crypto/cf2.c deleted file mode 100644 index 4e25641e8..000000000 --- a/src/lib/crypto/cf2.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * lib/crypto/cf2.c - * - * Copyright (C) 2009 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * Implement KRB_FX_CF2 function per - *draft-ietf-krb-wg-preauth-framework-09. Take two keys and two - *pepper strings as input and return a combined key. - */ - -#include -#include -#include "etypes.h" - - -/* - * Call the PRF function multiple times with the pepper prefixed with - * a count byte to get enough bits of output. - */ -static krb5_error_code -prf_plus( krb5_context context, krb5_keyblock *k,const char *pepper, - size_t keybytes, char **out) -{ - krb5_error_code retval = 0; - size_t prflen, iterations; - krb5_data out_data; - krb5_data in_data; - char *buffer = NULL; - struct k5buf prf_inbuf; - krb5int_buf_init_dynamic(&prf_inbuf); - krb5int_buf_add_len( &prf_inbuf, "\001", 1); - krb5int_buf_add( &prf_inbuf, pepper); - retval = krb5_c_prf_length( context, k->enctype, &prflen); - if (retval != 0) - goto cleanup; - iterations = keybytes/prflen; - if ((keybytes%prflen) != 0) - iterations++; - assert(iterations <= 254); - buffer = malloc(iterations*prflen); - if (buffer == NULL) { - retval = ENOMEM; - goto cleanup; - } - if (krb5int_buf_len( &prf_inbuf) == -1) { - retval = ENOMEM; - goto cleanup; - } - in_data.length = (krb5_int32) krb5int_buf_len( &prf_inbuf); - in_data.data = krb5int_buf_data( &prf_inbuf); - out_data.length = prflen; - out_data.data = buffer; - - while (iterations > 0) { - retval = krb5_c_prf( context, k, &in_data, &out_data); - if (retval != 0) - goto cleanup; - out_data.data += prflen; - in_data.data[0]++; - iterations--; - } - cleanup: - if (retval == 0 ) - *out = buffer; - else{ - if (buffer != NULL) - free(buffer); - } - krb5int_free_buf( &prf_inbuf); - return retval; -} - - -krb5_error_code KRB5_CALLCONV -krb5_c_fx_cf2_simple(krb5_context context, - krb5_keyblock *k1, const char *pepper1, - krb5_keyblock *k2, const char *pepper2, - krb5_keyblock **out) -{ - const struct krb5_keytypes *out_enctype; - size_t keybytes, keylength, i; - char *prf1 = NULL, *prf2 = NULL; - krb5_data keydata; - krb5_enctype out_enctype_num; - krb5_error_code retval = 0; - krb5_keyblock *out_key = NULL; - - - if (k1 == NULL ||!krb5_c_valid_enctype(k1->enctype)) - return KRB5_BAD_ENCTYPE; - if (k2 == NULL || !krb5_c_valid_enctype(k2->enctype)) - return KRB5_BAD_ENCTYPE; - out_enctype_num = k1->enctype; - assert(out != NULL); - assert ((out_enctype = find_enctype(out_enctype_num)) != NULL); - if (out_enctype->prf == NULL) { - if (context) - krb5int_set_error(&(context->err) , KRB5_CRYPTO_INTERNAL, - "Enctype %d has no PRF", out_enctype_num); - return KRB5_CRYPTO_INTERNAL; - } - keybytes = out_enctype->enc->keybytes; - keylength = out_enctype->enc->keylength; - - retval = prf_plus( context, k1, pepper1, keybytes, &prf1); - if (retval != 0) - goto cleanup; - retval = prf_plus( context, k2, pepper2, keybytes, &prf2); - if (retval != 0) - goto cleanup; - for (i = 0; i < keybytes; i++) - prf1[i] ^= prf2[i]; - zap(prf2, keybytes); - retval = krb5int_c_init_keyblock( context, out_enctype_num, keylength, &out_key); - if (retval != 0) - goto cleanup; - keydata.data = prf1; - keydata.length = keybytes; - retval = out_enctype->enc->make_key( &keydata, out_key); - - cleanup: - if (retval == 0) - *out = out_key; - else krb5int_c_free_keyblock( context, out_key); - if (prf1 != NULL) { - zap(prf1, keybytes); - free(prf1); - } - if (prf2 != NULL) - free(prf2); - return retval; -} diff --git a/src/lib/crypto/checksum_length.c b/src/lib/crypto/checksum_length.c deleted file mode 100644 index 28846a671..000000000 --- a/src/lib/crypto/checksum_length.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_checksum_length(krb5_context context, krb5_cksumtype cksumtype, - size_t *length) -{ - unsigned int i; - - for (i=0; ihashsize; - else if (krb5_cksumtypes_list[i].trunc_size) - *length = krb5_cksumtypes_list[i].trunc_size; - else - *length = krb5_cksumtypes_list[i].hash->hashsize; - - return(0); -} - diff --git a/src/lib/crypto/cksumtype_to_string.c b/src/lib/crypto/cksumtype_to_string.c deleted file mode 100644 index ee1d50ba5..000000000 --- a/src/lib/crypto/cksumtype_to_string.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_cksumtype_to_string(krb5_cksumtype cksumtype, char *buffer, size_t buflen) -{ - unsigned int i; - - for (i=0; i= buflen) - return(ENOMEM); - return(0); - } - } - - return(EINVAL); -} diff --git a/src/lib/crypto/cksumtypes.c b/src/lib/crypto/cksumtypes.c deleted file mode 100644 index 037e53f49..000000000 --- a/src/lib/crypto/cksumtypes.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "hash_provider.h" -#include "keyhash_provider.h" -#include "cksumtypes.h" - -const struct krb5_cksumtypes krb5_cksumtypes_list[] = { - { CKSUMTYPE_CRC32, KRB5_CKSUMFLAG_NOT_COLL_PROOF, - "crc32", { 0 }, "CRC-32", - 0, NULL, - &krb5int_hash_crc32 }, - - { CKSUMTYPE_RSA_MD4, 0, - "md4", { 0 }, "RSA-MD4", - 0, NULL, - &krb5int_hash_md4 }, - { CKSUMTYPE_RSA_MD4_DES, 0, - "md4-des", { 0 }, "RSA-MD4 with DES cbc mode", - ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_md4des, - NULL }, - - { CKSUMTYPE_DESCBC, 0, - "des-cbc", { 0 }, "DES cbc mode", - ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_descbc, - NULL }, - - { CKSUMTYPE_RSA_MD5, 0, - "md5", { 0 }, "RSA-MD5", - 0, NULL, - &krb5int_hash_md5 }, - { CKSUMTYPE_RSA_MD5_DES, 0, - "md5-des", { 0 }, "RSA-MD5 with DES cbc mode", - ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_md5des, - NULL }, - - { CKSUMTYPE_NIST_SHA, 0, - "sha", { 0 }, "NIST-SHA", - 0, NULL, - &krb5int_hash_sha1 }, - - { CKSUMTYPE_HMAC_SHA1_DES3, KRB5_CKSUMFLAG_DERIVE, - "hmac-sha1-des3", { "hmac-sha1-des3-kd" }, "HMAC-SHA1 DES3 key", - 0, NULL, - &krb5int_hash_sha1 }, - { CKSUMTYPE_HMAC_MD5_ARCFOUR, 0, - "hmac-md5-rc4", { "hmac-md5-enc", "hmac-md5-earcfour" }, - "Microsoft HMAC MD5 (RC4 key)", - ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_hmac_md5, - NULL }, - - { CKSUMTYPE_HMAC_SHA1_96_AES128, KRB5_CKSUMFLAG_DERIVE, - "hmac-sha1-96-aes128", { 0 }, "HMAC-SHA1 AES128 key", - 0, NULL, - &krb5int_hash_sha1, 12 }, - { CKSUMTYPE_HMAC_SHA1_96_AES256, KRB5_CKSUMFLAG_DERIVE, - "hmac-sha1-96-aes256", { 0 }, "HMAC-SHA1 AES256 key", - 0, NULL, - &krb5int_hash_sha1, 12 }, - { CKSUMTYPE_MD5_HMAC_ARCFOUR, 0, - "md5-hmac-rc4", { 0 }, "Microsoft MD5 HMAC (RC4 key)", - ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_md5_hmac, - NULL } -}; - -const unsigned int krb5_cksumtypes_length = -sizeof(krb5_cksumtypes_list)/sizeof(struct krb5_cksumtypes); diff --git a/src/lib/crypto/cksumtypes.h b/src/lib/crypto/cksumtypes.h deleted file mode 100644 index c667e8abe..000000000 --- a/src/lib/crypto/cksumtypes.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#ifndef CKSUMTYPES_H -#define CKSUMTYPES_H -#include "k5-int.h" - -struct krb5_cksumtypes { - krb5_cksumtype ctype; - unsigned int flags; - char *name; - char *aliases[2]; - char *out_string; - /* if the hash is keyed, this is the etype it is keyed with. - Actually, it can be keyed by any etype which has the same - enc_provider as the specified etype. DERIVE checksums can - be keyed with any valid etype. */ - krb5_enctype keyed_etype; - /* I can't statically initialize a union, so I'm just going to use - two pointers here. The keyhash is used if non-NULL. If NULL, - then HMAC/hash with derived keys is used if the relevant flag - is set. Otherwise, a non-keyed hash is computed. This is all - kind of messy, but so is the krb5 api. */ - const struct krb5_keyhash_provider *keyhash; - const struct krb5_hash_provider *hash; - /* This just gets uglier and uglier. In the key derivation case, - we produce an hmac. To make the hmac code work, we can't hack - the output size indicated by the hash provider, but we may want - a truncated hmac. If we want truncation, this is the number of - bytes we truncate to; it should be 0 otherwise. */ - unsigned int trunc_size; -}; - -#define KRB5_CKSUMFLAG_DERIVE 0x0001 -#define KRB5_CKSUMFLAG_NOT_COLL_PROOF 0x0002 - -extern const struct krb5_cksumtypes krb5_cksumtypes_list[]; -extern const unsigned int krb5_cksumtypes_length; -#endif diff --git a/src/lib/crypto/coll_proof_cksum.c b/src/lib/crypto/coll_proof_cksum.c deleted file mode 100644 index 85fb57b9b..000000000 --- a/src/lib/crypto/coll_proof_cksum.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_boolean KRB5_CALLCONV -krb5_c_is_coll_proof_cksum(krb5_cksumtype ctype) -{ - unsigned int i; - - for (i=0; ienctype)&&enctype_ok(key2->enctype))) - return (KRB5_CRYPTO_INTERNAL); - - - if (key1->length != key2->length || key1->enctype != key2->enctype) - return (KRB5_CRYPTO_INTERNAL); - - /* - * Find our encryption algorithm - */ - - for (i = 0; i < krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == key1->enctype) - break; - } - - if (i == krb5_enctypes_length) - return (KRB5_BAD_ENCTYPE); - - enc = krb5_enctypes_list[i].enc; - - keybytes = enc->keybytes; - keylength = enc->keylength; - - /* - * Allocate and set up buffers - */ - - if ((r1 = (unsigned char *) malloc(keybytes)) == NULL) - return (ENOMEM); - - if ((r2 = (unsigned char *) malloc(keybytes)) == NULL) { - free(r1); - return (ENOMEM); - } - - if ((rnd = (unsigned char *) malloc(keybytes)) == NULL) { - free(r1); - free(r2); - return (ENOMEM); - } - - if ((combined = (unsigned char *) malloc(keybytes * 2)) == NULL) { - free(r1); - free(r2); - free(rnd); - return (ENOMEM); - } - - if ((output = (unsigned char *) malloc(keylength)) == NULL) { - free(r1); - free(r2); - free(rnd); - free(combined); - return (ENOMEM); - } - - /* - * Get R1 and R2 (by running the input keys through the DR algorithm. - * Note this is most of derive-key, but not all. - */ - - input.length = key2->length; - input.data = (char *) key2->contents; - if ((ret = dr(enc, key1, r1, &input))) - goto cleanup; - -#if 0 - { - int i; - printf("R1 ="); - for (i = 0; i < keybytes; i++) - printf(" %02x", (unsigned char) r1[i]); - printf("\n"); - } -#endif - - input.length = key1->length; - input.data = (char *) key1->contents; - if ((ret = dr(enc, key2, r2, &input))) - goto cleanup; - -#if 0 - { - int i; - printf("R2 ="); - for (i = 0; i < keybytes; i++) - printf(" %02x", (unsigned char) r2[i]); - printf("\n"); - } -#endif - - /* - * Concatenate the two keys together, and then run them through - * n-fold to reduce them to a length appropriate for the random-to-key - * operation. Note here that krb5_nfold() takes sizes in bits, hence - * the multiply by 8. - */ - - memcpy(combined, r1, keybytes); - memcpy(combined + keybytes, r2, keybytes); - - krb5_nfold((keybytes * 2) * 8, combined, keybytes * 8, rnd); - -#if 0 - { - int i; - printf("rnd ="); - for (i = 0; i < keybytes; i++) - printf(" %02x", (unsigned char) rnd[i]); - printf("\n"); - } -#endif - - /* - * Run the "random" bits through random-to-key to produce a encryption - * key. - */ - - randbits.length = keybytes; - randbits.data = (char *) rnd; - tkey.length = keylength; - tkey.contents = output; - - if ((ret = (*(enc->make_key))(&randbits, &tkey))) - goto cleanup; - -#if 0 - { - int i; - printf("tkey ="); - for (i = 0; i < tkey.length; i++) - printf(" %02x", (unsigned char) tkey.contents[i]); - printf("\n"); - } -#endif - - /* - * Run through derive-key one more time to produce the final key. - * Note that the input to derive-key is the ASCII string "combine". - */ - - input.length = 7; /* Note; change this if string length changes */ - input.data = "combine"; - - /* - * Just FYI: _if_ we have space here in the key, then simply use it - * without modification. But if the key is blank (no allocated storage) - * then allocate some memory for it. This allows programs to use one of - * the existing keys as the output key, _or_ pass in a blank keyblock - * for us to allocate. It's easier for us to allocate it since we already - * know the crypto library internals - */ - - if (outkey->length == 0 || outkey->contents == NULL) { - outkey->contents = (krb5_octet *) malloc(keylength); - if (!outkey->contents) { - ret = ENOMEM; - goto cleanup; - } - outkey->length = keylength; - outkey->enctype = key1->enctype; - myalloc = 1; - } - - if ((ret = krb5_derive_key(enc, &tkey, outkey, &input))) { - if (myalloc) { - free(outkey->contents); - outkey->contents = NULL; - } - goto cleanup; - } - -#if 0 - { - int i; - printf("output ="); - for (i = 0; i < outkey->length; i++) - printf(" %02x", (unsigned char) outkey->contents[i]); - printf("\n"); - } -#endif - - ret = 0; - -cleanup: - memset(r1, 0, keybytes); - memset(r2, 0, keybytes); - memset(rnd, 0, keybytes); - memset(combined, 0, keybytes * 2); - memset(output, 0, keylength); - - free(r1); - free(r2); - free(rnd); - free(combined); - free(output); - - return (ret); -} - -/* - * Our DR function; mostly taken from derive.c - */ - -static krb5_error_code dr -(const struct krb5_enc_provider *enc, const krb5_keyblock *inkey, unsigned char *out, const krb5_data *in_constant) -{ - size_t blocksize, keybytes, keylength, n; - unsigned char *inblockdata, *outblockdata; - krb5_data inblock, outblock; - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - /* allocate and set up buffers */ - - if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) - return(ENOMEM); - - if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { - free(inblockdata); - return(ENOMEM); - } - - inblock.data = (char *) inblockdata; - inblock.length = blocksize; - - outblock.data = (char *) outblockdata; - outblock.length = blocksize; - - /* initialize the input block */ - - if (in_constant->length == inblock.length) { - memcpy(inblock.data, in_constant->data, inblock.length); - } else { - krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, - inblock.length*8, (unsigned char *) inblock.data); - } - - /* loop encrypting the blocks until enough key bytes are generated */ - - n = 0; - while (n < keybytes) { - (*(enc->encrypt))(inkey, 0, &inblock, &outblock); - - if ((keybytes - n) <= outblock.length) { - memcpy(out+n, outblock.data, (keybytes - n)); - break; - } - - memcpy(out+n, outblock.data, outblock.length); - memcpy(inblock.data, outblock.data, outblock.length); - n += outblock.length; - } - - /* clean memory, free resources and exit */ - - memset(inblockdata, 0, blocksize); - memset(outblockdata, 0, blocksize); - - free(outblockdata); - free(inblockdata); - - return(0); -} - diff --git a/src/lib/crypto/crc32/CRC.pm b/src/lib/crypto/crc32/CRC.pm deleted file mode 100644 index ee2ab2ae8..000000000 --- a/src/lib/crypto/crc32/CRC.pm +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright 2002 by the Massachusetts Institute of Technology. -# All Rights Reserved. -# -# Export of this software from the United States of America may -# require a specific license from the United States Government. -# It is the responsibility of any person or organization contemplating -# export to obtain such a license before exporting. -# -# WITHIN THAT CONSTRAINT, 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, and that -# the name of M.I.T. not be used in advertising or publicity pertaining -# to distribution of the software without specific, written prior -# permission. Furthermore if you modify this software you must label -# your software as modified software and not distribute it in such a -# fashion that it might be confused with the original M.I.T. software. -# M.I.T. makes no representations about the suitability of -# this software for any purpose. It is provided "as is" without express -# or implied warranty. - -package CRC; - -# CRC: implement a CRC using the Poly package (yes this is slow) -# -# message M(x) = m_0 * x^0 + m_1 * x^1 + ... + m_(k-1) * x^(k-1) -# generator P(x) = p_0 * x^0 + p_1 * x^1 + ... + p_n * x^n -# remainder R(x) = r_0 * x^0 + r_1 * x^1 + ... + r_(n-1) * x^(n-1) -# -# R(x) = (x^n * M(x)) % P(x) -# -# Note that if F(x) = x^n * M(x) + R(x), then F(x) = 0 mod P(x) . -# -# In MIT Kerberos 5, R(x) is taken as the CRC, as opposed to what -# ISO 3309 does. -# -# ISO 3309 adds a precomplement and a postcomplement. -# -# The ISO 3309 postcomplement is of the form -# -# A(x) = x^0 + x^1 + ... + x^(n-1) . -# -# The ISO 3309 precomplement is of the form -# -# B(x) = x^k * A(x) . -# -# The ISO 3309 FCS is then -# -# (x^n * M(x)) % P(x) + B(x) % P(x) + A(x) , -# -# which is equivalent to -# -# (x^n * M(x) + B(x)) % P(x) + A(x) . -# -# In ISO 3309, the transmitted frame is -# -# F'(x) = x^n * M(x) + R(x) + R'(x) + A(x) , -# -# where -# -# R'(x) = B(x) % P(x) . -# -# Note that this means that if a new remainder is computed over the -# frame F'(x) (treating F'(x) as the new M(x)), it will be equal to a -# constant. -# -# F'(x) = 0 + R'(x) + A(x) mod P(x) , -# -# then -# -# (F'(x) + x^k * A(x)) * x^n -# -# = ((R'(x) + A(x)) + x^k * A(x)) * x^n mod P(x) -# -# = (x^k * A(x) + A(x) + x^k * A(x)) * x^n mod P(x) -# -# = (0 + A(x)) * x^n mod P(x) -# -# Note that (A(x) * x^n) % P(x) is a constant, and that this result -# depends on B(x) being x^k * A(x). - -use Carp; -use Poly; - -sub new { - my $self = shift; - my $class = ref($self) || $self; - my %args = @_; - $self = {bitsendian => "little"}; - bless $self, $class; - $self->setpoly($args{"Poly"}) if exists $args{"Poly"}; - $self->bitsendian($args{"bitsendian"}) - if exists $args{"bitsendian"}; - $self->{precomp} = $args{precomp} if exists $args{precomp}; - $self->{postcomp} = $args{postcomp} if exists $args{postcomp}; - return $self; -} - -sub setpoly { - my $self = shift; - my($arg) = @_; - croak "need a polynomial" if !$arg->isa("Poly"); - $self->{Poly} = $arg; - return $self; -} - -sub crc { - my $self = shift; - my $msg = Poly->new(@_); - my($order, $r, $precomp); - $order = $self->{Poly}->order; - # B(x) = x^k * precomp - $precomp = $self->{precomp} ? - $self->{precomp} * Poly->powers2poly(scalar(@_)) : Poly->new; - # R(x) = (x^n * M(x)) % P(x) - $r = ($msg * Poly->powers2poly($order)) % $self->{Poly}; - # B(x) % P(x) - $r += $precomp % $self->{Poly}; - $r += $self->{postcomp} if exists $self->{postcomp}; - return $r; -} - -# endianness of bits of each octet -# -# Note that the message is always treated as being sent in big-endian -# octet order. -# -# Usually, the message will be treated as bits being little-endian, -# since that is the common case for serial implementations that -# present data in octets; e.g., most UARTs shift octets onto the line -# in little-endian order, and protocols such as ISO 3309, V.42, -# etc. treat individual octets as being sent LSB-first. - -sub bitsendian { - my $self = shift; - my($arg) = @_; - croak "bad bit endianness" if $arg !~ /big|little/; - $self->{bitsendian} = $arg; - return $self; -} - -sub crcstring { - my $self = shift; - my($arg) = @_; - my($packstr, @m); - { - $packstr = "B*", last if $self->{bitsendian} =~ /big/; - $packstr = "b*", last if $self->{bitsendian} =~ /little/; - croak "bad bit endianness"; - }; - @m = split //, unpack $packstr, $arg; - return $self->crc(@m); -} - -1; diff --git a/src/lib/crypto/crc32/Makefile.in b/src/lib/crypto/crc32/Makefile.in deleted file mode 100644 index 11df8607c..000000000 --- a/src/lib/crypto/crc32/Makefile.in +++ /dev/null @@ -1,41 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/crc32 -mydir=lib/crypto/crc32 -BUILDTOP=$(REL)..$(S)..$(S).. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=crc32 -##DOS##OBJFILE=..\$(OUTPRE)crc32.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= crc32.o - -OBJS= $(OUTPRE)crc32.$(OBJEXT) - -SRCS= $(srcdir)/crc32.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - $(RM) t_crc.o t_crc - -check-unix:: t_crc - $(RUN_SETUP) $(VALGRIND) ./t_crc - -t_crc: t_crc.o crc32.o $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_crc.o crc32.o $(SUPPORT_LIB) - - -@libobj_frag@ - diff --git a/src/lib/crypto/crc32/Poly.pm b/src/lib/crypto/crc32/Poly.pm deleted file mode 100644 index cad0f77b5..000000000 --- a/src/lib/crypto/crc32/Poly.pm +++ /dev/null @@ -1,182 +0,0 @@ -# Copyright 2002 by the Massachusetts Institute of Technology. -# All Rights Reserved. -# -# Export of this software from the United States of America may -# require a specific license from the United States Government. -# It is the responsibility of any person or organization contemplating -# export to obtain such a license before exporting. -# -# WITHIN THAT CONSTRAINT, 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, and that -# the name of M.I.T. not be used in advertising or publicity pertaining -# to distribution of the software without specific, written prior -# permission. Furthermore if you modify this software you must label -# your software as modified software and not distribute it in such a -# fashion that it might be confused with the original M.I.T. software. -# M.I.T. makes no representations about the suitability of -# this software for any purpose. It is provided "as is" without express -# or implied warranty. - -package Poly; - -# Poly: implements some basic operations on polynomials in the field -# of integers (mod 2). -# -# The rep is an array of coefficients, highest order term first. -# -# This is rather slow at the moment. - -use overload - '+' => \&add, - '-' => \&add, - '*' => \&mul, - '%' => sub {$_[2] ? mod($_[1], $_[0]) : mod($_[0], $_[1])}, - '/' => sub { $_[2] ? scalar(div($_[1], $_[0])) - : scalar(div($_[0], $_[1])) }, - '<=>' => sub {$_[2] ? pcmp($_[1], $_[0]) : pcmp($_[0], $_[1])}, - '""' => \&str -; - -use Carp; - -# doesn't do much beyond normalize and bless -sub new { - my $this = shift; - my $class = ref($this) || $this; - my(@x) = @_; - return bless [norm(@x)], $class; -} - -# stringified P(x) -sub pretty { - my(@x) = @{+shift}; - my $n = @x; - local $_; - return "0" if !@x; - return join " + ", map {$n--; $_ ? ("x^$n") : ()} @x; -} - -sub print { - my $self = shift; - print $self->pretty, "\n"; -} - -# This assumes normalization. -sub order { - my $self = shift; - return $#{$self}; -} - -sub str { - return overload::StrVal($_[0]); -} - -# strip leading zero coefficients -sub norm { - my(@x) = @_; - shift @x while @x && !$x[0]; - return @x; -} - -# multiply $self by the single term of power $n -sub multerm { - my($self, $n) = @_; - return $self->new(@$self, (0) x $n); -} - -# This is really an order comparison; different polys of same order -# compare equal. It also assumes prior normalization. -sub pcmp { - my @x = @{+shift}; - my @y = @{+shift}; - return @x <=> @y; -} - -# convenience constructor; takes list of non-zero terms -sub powers2poly -{ - my $self = shift; - my $poly = $self->new; - my $n; - foreach $n (@_) { - $poly += $one->multerm($n); - } - return $poly; -} - -sub add { - my $self = shift; - my @x = @$self; - my @y = @{+shift}; - my @r; - unshift @r, (pop @x || 0) ^ (pop @y || 0) - while @x || @y; - return $self->new(@r); -} - -sub mul { - my($self) = shift; - my @y = @{+shift}; - my $r = $self->new; - my $power = 0; - while (@y) { - $r += $self->multerm($power) if pop @y; - $power++; - } - return $r; -} - -sub oldmod { - my($self, $div) = @_; - my @num = @$self; - my @div = @$div; - my $r = $self->new(splice @num, 0, @div); - do { - push @$r, shift @num while @num && $r < $div; - $r += $div if $r >= $div; - } while @num; - return $r; -} - -sub div { - my($self, $div) = @_; - my $q = $self->new; - my $r = $self->new(@$self); - my $one = $self->new(1); - my ($tp, $power); - croak "divide by zero" if !@$div; - while ($div <= $r) { - $power = 0; - $power++ while ($tp = $div->multerm($power)) < $r; - $q += $one->multerm($power); - $r -= $tp; - } - return wantarray ? ($q, $r) : $q; -} - -sub mod { - (&div)[1]; -} - -# bits and octets both big-endian -sub hex { - my @x = @{+shift}; - my $minwidth = shift || 32; - unshift @x, 0 while @x % 8 || @x < $minwidth; - return unpack "H*", pack "B*", join "", @x; -} - -# bit-reversal of above -sub revhex { - my @x = @{+shift}; - my $minwidth = shift || 32; - unshift @x, 0 while @x % 8 || @x < $minwidth; - return unpack "H*", pack "B*", join "", reverse @x; -} - -$one = Poly->new(1); - -1; diff --git a/src/lib/crypto/crc32/crc-32.h b/src/lib/crypto/crc32/crc-32.h deleted file mode 100644 index 0efc00625..000000000 --- a/src/lib/crypto/crc32/crc-32.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * include/krb5/crc-32.h - * - * Copyright 1989,1990 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Definitions for the CRC-32 checksum - */ - -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - - -#ifndef KRB5_CRC32__ -#define KRB5_CRC32__ - -#define CRC32_CKSUM_LENGTH 4 - -void -mit_crc32 (krb5_pointer in, size_t in_length, unsigned long *c); - -#ifdef CRC32_SHIFT4 -void mit_crc32_shift4(krb5_pointer /* in */, - size_t /* in_length */, - unsigned long * /* cksum */); -#endif - -#endif /* KRB5_CRC32__ */ diff --git a/src/lib/crypto/crc32/crc.pl b/src/lib/crypto/crc32/crc.pl deleted file mode 100644 index b21b6b15d..000000000 --- a/src/lib/crypto/crc32/crc.pl +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2002 by the Massachusetts Institute of Technology. -# All Rights Reserved. -# -# Export of this software from the United States of America may -# require a specific license from the United States Government. -# It is the responsibility of any person or organization contemplating -# export to obtain such a license before exporting. -# -# WITHIN THAT CONSTRAINT, 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, and that -# the name of M.I.T. not be used in advertising or publicity pertaining -# to distribution of the software without specific, written prior -# permission. Furthermore if you modify this software you must label -# your software as modified software and not distribute it in such a -# fashion that it might be confused with the original M.I.T. software. -# M.I.T. makes no representations about the suitability of -# this software for any purpose. It is provided "as is" without express -# or implied warranty. - -use CRC; - -print "*** crudely testing polynomial functions ***\n"; - -$x = Poly->new(1,1,1,1); -$y = Poly->new(1,1); -print "x = @{[$x->pretty]}\ny = @{[$y->pretty]}\n"; -$q = $x / $y; -$r = $x % $y; -print $x->pretty, " = (", $y->pretty , ") * (", $q->pretty, - ") + ", $r->pretty, "\n"; -$q = $y / $x; -$r = $y % $x; -print "y / x = @{[$q->pretty]}\ny % x = @{[$r->pretty]}\n"; - -# ISO 3309 32-bit FCS polynomial -$fcs32 = Poly->powers2poly(32,26,23,22,16,12,11,10,8,7,5,4,2,1,0); -print "fcs32 = ", $fcs32->pretty, "\n"; - -$crc = CRC->new(Poly => $fcs32, bitsendian => "little"); - -print "\n"; - -print "*** little endian, no complementation ***\n"; -for ($i = 0; $i < 256; $i++) { - $r = $crc->crcstring(pack "C", $i); - printf ("%02x: ", $i) if !($i % 8); - print ($r->revhex, ($i % 8 == 7) ? "\n" : " "); -} - -print "\n"; - -print "*** little endian, 4 bits, no complementation ***\n"; -for ($i = 0; $i < 16; $i++) { - @m = (split //, unpack "b*", pack "C", $i)[0..3]; - $r = $crc->crc(@m); - printf ("%02x: ", $i) if !($i % 8); - print ($r->revhex, ($i % 8 == 7) ? "\n" : " "); -} - -print "\n"; - -print "*** test vectors for t_crc.c, little endian ***\n"; -for ($i = 1; $i <= 4; $i *=2) { - for ($j = 0; $j < $i * 8; $j++) { - @m = split //, unpack "b*", pack "V", 1 << $j; - splice @m, $i * 8; - $r = $crc->crc(@m); - $m = unpack "H*", pack "b*", join("", @m); - print "{HEX, \"$m\", 0x", $r->revhex, "},\n"; - } -} -@m = ("foo", "test0123456789", - "MASSACHVSETTS INSTITVTE OF TECHNOLOGY"); -foreach $m (@m) { - $r = $crc->crcstring($m); - print "{STR, \"$m\", 0x", $r->revhex, "},\n"; -} -__END__ - -print "*** big endian, no complementation ***\n"; -for ($i = 0; $i < 256; $i++) { - $r = $crc->crcstring(pack "C", $i); - printf ("%02x: ", $i) if !($i % 8); - print ($r->hex, ($i % 8 == 7) ? "\n" : " "); -} - -# all ones polynomial of order 31 -$ones = Poly->new((1) x 32); - -print "*** big endian, ISO-3309 style\n"; -$crc = CRC->new(Poly => $fcs32, - bitsendian => "little", - precomp => $ones, - postcomp => $ones); -for ($i = 0; $i < 256; $i++) { - $r = $crc->crcstring(pack "C", $i); - print ($r->hex, ($i % 8 == 7) ? "\n" : " "); -} - -for ($i = 0; $i < 0; $i++) { - $x = Poly->new((1) x 32, (0) x $i); - $y = Poly->new((1) x 32); - $f = ($x % $fcs32) + $y; - $r = (($f + $x) * Poly->powers2poly(32)) % $fcs32; - @out = @$r; - unshift @out, 0 while @out < 32; - print @out, "\n"; -} diff --git a/src/lib/crypto/crc32/crc32.c b/src/lib/crypto/crc32/crc32.c deleted file mode 100644 index ef65476d9..000000000 --- a/src/lib/crypto/crc32/crc32.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * lib/crypto/crc32/crc.c - * - * Copyright 1990, 2002 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * CRC-32/AUTODIN-II routines - */ - -#include "k5-int.h" -#include "crc-32.h" - -/* This table and block of comments are taken from code labeled: */ -/* - * Copyright (C) 1986 Gary S. Brown. You may use this program, or - * code or tables extracted from it, as desired without restriction. - */ - -/* First, the polynomial itself and its table of feedback terms. The */ -/* polynomial is */ -/* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ -/* Note that we take it "backwards" and put the highest-order term in */ -/* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ -/* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ -/* the MSB being 1. */ - -/* Note that the usual hardware shift register implementation, which */ -/* is what we're using (we're merely optimizing it by doing eight-bit */ -/* chunks at a time) shifts bits into the lowest-order term. In our */ -/* implementation, that means shifting towards the right. Why do we */ -/* do it this way? Because the calculated CRC must be transmitted in */ -/* order from highest-order term to lowest-order term. UARTs transmit */ -/* characters in order from LSB to MSB. By storing the CRC this way, */ -/* we hand it to the UART in the order low-byte to high-byte; the UART */ -/* sends each low-bit to hight-bit; and the result is transmission bit */ -/* by bit from highest- to lowest-order term without requiring any bit */ -/* shuffling on our part. Reception works similarly. */ - -/* The feedback terms table consists of 256, 32-bit entries. Notes: */ -/* */ -/* 1. The table can be generated at runtime if desired; code to do so */ -/* is shown later. It might not be obvious, but the feedback */ -/* terms simply represent the results of eight shift/xor opera- */ -/* tions for all combinations of data and CRC register values. */ -/* */ -/* 2. The CRC accumulation logic is the same for all CRC polynomials, */ -/* be they sixteen or thirty-two bits wide. You simply choose the */ -/* appropriate table. Alternatively, because the table can be */ -/* generated at runtime, you can start by generating the table for */ -/* the polynomial in question and use exactly the same "updcrc", */ -/* if your application needn't simultaneously handle two CRC */ -/* polynomials. (Note, however, that XMODEM is strange.) */ -/* */ -/* 3. For 16-bit CRCs, the table entries need be only 16 bits wide; */ -/* of course, 32-bit entries work OK if the high 16 bits are zero. */ -/* */ -/* 4. The values must be right-shifted by eight bits by the "updcrc" */ -/* logic; the shift must be unsigned (bring in zeroes). On some */ -/* hardware you could probably optimize the shift in assembler by */ -/* using byte-swap instructions. */ - -static u_long const crc_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d - }; - -void -mit_crc32(krb5_pointer in, size_t in_length, unsigned long *cksum) -{ - register u_char *data; - register u_long c = 0; - register int idx; - size_t i; - - data = (u_char *)in; - for (i = 0; i < in_length; i++) { - idx = (int) (data[i] ^ c); - idx &= 0xff; - c >>= 8; - c ^= crc_table[idx]; - } - - *cksum = c; -} - -#ifdef CRC32_SHIFT4 -static unsigned long const tbl4[16] = { - 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, - 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, - 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, - 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c -}; - -void -mit_crc32_shift4(krb5_pointer in, size_t in_length, unsigned long *cksum) -{ - register unsigned char *data, b; - register unsigned long c = 0; - size_t i; - - data = (u_char *)in; - for (i = 0; i < in_length; i++) { - b = data[i]; - c = (c >> 4) ^ tbl4[(b ^ c) & 0x0f]; - b >>= 4; - c = (c >> 4) ^ tbl4[(b ^ c) & 0x0f]; - } - *cksum = c; -} -#endif diff --git a/src/lib/crypto/crc32/deps b/src/lib/crypto/crc32/deps deleted file mode 100644 index 9dc702d6e..000000000 --- a/src/lib/crypto/crc32/deps +++ /dev/null @@ -1,13 +0,0 @@ -# -# Generated makefile dependencies follow. -# -crc32.so crc32.po $(OUTPRE)crc32.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - crc-32.h crc32.c diff --git a/src/lib/crypto/crc32/t_crc.c b/src/lib/crypto/crc32/t_crc.c deleted file mode 100644 index e8a353a0b..000000000 --- a/src/lib/crypto/crc32/t_crc.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * lib/crypto/crc32/t_crc.c - * - * Copyright 2002,2005 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * Sanity checks for CRC32. - */ -#include -#include -#include -#include -#include -#include "k5-int.h" -#include "crc-32.h" - -#define HEX 1 -#define STR 2 -struct crc_trial { - int type; - char *data; - unsigned long sum; -}; - -struct crc_trial trials[] = { - {HEX, "01", 0x77073096}, - {HEX, "02", 0xee0e612c}, - {HEX, "04", 0x076dc419}, - {HEX, "08", 0x0edb8832}, - {HEX, "10", 0x1db71064}, - {HEX, "20", 0x3b6e20c8}, - {HEX, "40", 0x76dc4190}, - {HEX, "80", 0xedb88320}, - {HEX, "0100", 0x191b3141}, - {HEX, "0200", 0x32366282}, - {HEX, "0400", 0x646cc504}, - {HEX, "0800", 0xc8d98a08}, - {HEX, "1000", 0x4ac21251}, - {HEX, "2000", 0x958424a2}, - {HEX, "4000", 0xf0794f05}, - {HEX, "8000", 0x3b83984b}, - {HEX, "0001", 0x77073096}, - {HEX, "0002", 0xee0e612c}, - {HEX, "0004", 0x076dc419}, - {HEX, "0008", 0x0edb8832}, - {HEX, "0010", 0x1db71064}, - {HEX, "0020", 0x3b6e20c8}, - {HEX, "0040", 0x76dc4190}, - {HEX, "0080", 0xedb88320}, - {HEX, "01000000", 0xb8bc6765}, - {HEX, "02000000", 0xaa09c88b}, - {HEX, "04000000", 0x8f629757}, - {HEX, "08000000", 0xc5b428ef}, - {HEX, "10000000", 0x5019579f}, - {HEX, "20000000", 0xa032af3e}, - {HEX, "40000000", 0x9b14583d}, - {HEX, "80000000", 0xed59b63b}, - {HEX, "00010000", 0x01c26a37}, - {HEX, "00020000", 0x0384d46e}, - {HEX, "00040000", 0x0709a8dc}, - {HEX, "00080000", 0x0e1351b8}, - {HEX, "00100000", 0x1c26a370}, - {HEX, "00200000", 0x384d46e0}, - {HEX, "00400000", 0x709a8dc0}, - {HEX, "00800000", 0xe1351b80}, - {HEX, "00000100", 0x191b3141}, - {HEX, "00000200", 0x32366282}, - {HEX, "00000400", 0x646cc504}, - {HEX, "00000800", 0xc8d98a08}, - {HEX, "00001000", 0x4ac21251}, - {HEX, "00002000", 0x958424a2}, - {HEX, "00004000", 0xf0794f05}, - {HEX, "00008000", 0x3b83984b}, - {HEX, "00000001", 0x77073096}, - {HEX, "00000002", 0xee0e612c}, - {HEX, "00000004", 0x076dc419}, - {HEX, "00000008", 0x0edb8832}, - {HEX, "00000010", 0x1db71064}, - {HEX, "00000020", 0x3b6e20c8}, - {HEX, "00000040", 0x76dc4190}, - {HEX, "00000080", 0xedb88320}, - {STR, "foo", 0x7332bc33}, - {STR, "test0123456789", 0xb83e88d6}, - {STR, "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 0xe34180f7} -}; - -#define NTRIALS (sizeof(trials) / sizeof(trials[0])) - -static void -timetest(unsigned int nblk, unsigned int blksiz) -{ - char *block; - int i; - struct tms before, after; - unsigned long cksum; - - block = malloc(blksiz * nblk); - if (block == NULL) - exit(1); - for (i = 0; i < blksiz * nblk; i++) - block[i] = i % 256; - times(&before); - for (i = 0; i < nblk; i++) { - mit_crc32(block + i * blksiz, blksiz, &cksum); - } - - times(&after); - printf("shift-8 implementation, %d blocks of %d bytes:\n", - nblk, blksiz); - printf("\tu=%ld s=%ld cu=%ld cs=%ld\n", - (long)(after.tms_utime - before.tms_utime), - (long)(after.tms_stime - before.tms_stime), - (long)(after.tms_cutime - before.tms_cutime), - (long)(after.tms_cstime - before.tms_cstime)); - -#ifdef CRC32_SHIFT4 - times(&before); - for (i = 0; i < nblk; i++) { - mit_crc32_shift4(block + i * blksiz, blksiz, &cksum); - } - times(&after); - printf("shift-4 implementation, %d blocks of %d bytes:\n", - nblk, blksiz); - printf("\tu=%ld s=%ld cu=%ld cs=%ld\n", - (long)(after.tms_utime - before.tms_utime), - (long)(after.tms_stime - before.tms_stime), - (long)(after.tms_cutime - before.tms_cutime), - (long)(after.tms_cstime - before.tms_cstime)); -#endif - free(block); -} - -static void gethexstr(char *data, size_t *outlen, unsigned char *outbuf, - size_t buflen) -{ - size_t inlen; - char *cp, buf[3]; - long n; - - inlen = strlen(data); - *outlen = 0; - for (cp = data; cp - data < inlen; cp += 2) { - strncpy(buf, cp, 2); - buf[2] = '\0'; - n = strtol(buf, NULL, 16); - outbuf[(*outlen)++] = n; - if (*outlen > buflen) - break; - } -} - -static void -verify(void) -{ - int i; - struct crc_trial trial; - unsigned char buf[4]; - size_t len; - unsigned long cksum; - char *typestr; - - for (i = 0; i < NTRIALS; i++) { - trial = trials[i]; - switch (trial.type) { - case STR: - len = strlen(trial.data); - typestr = "STR"; - mit_crc32(trial.data, len, &cksum); - break; - case HEX: - typestr = "HEX"; - gethexstr(trial.data, &len, buf, 4); - mit_crc32(buf, len, &cksum); - break; - default: - typestr = "BOGUS"; - fprintf(stderr, "bad trial type %d\n", trial.type); - exit(1); - } - printf("%s: %s \"%s\" = 0x%08lx\n", - (trial.sum == cksum) ? "OK" : "***BAD***", - typestr, trial.data, cksum); - } -} - -int -main(void) -{ -#if 0 - timetest(64*1024, 1024); -#endif - verify(); - exit(0); -} diff --git a/src/lib/crypto/crypto_length.c b/src/lib/crypto/crypto_length.c deleted file mode 100644 index d99d18b27..000000000 --- a/src/lib/crypto/crypto_length.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * lib/crypto/crypto_length.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_crypto_length(krb5_context context, - krb5_enctype enctype, - krb5_cryptotype type, - unsigned int *size) -{ - int i; - const struct krb5_keytypes *ktp = NULL; - krb5_error_code ret; - - for (i = 0; i < krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == enctype) { - ktp = &krb5_enctypes_list[i]; - break; - } - } - - if (ktp == NULL || ktp->aead == NULL) { - return KRB5_BAD_ENCTYPE; - } - - switch (type) { - case KRB5_CRYPTO_TYPE_EMPTY: - case KRB5_CRYPTO_TYPE_SIGN_ONLY: - *size = 0; - ret = 0; - break; - case KRB5_CRYPTO_TYPE_DATA: - *size = (size_t)~0; /* match Heimdal */ - ret = 0; - break; - case KRB5_CRYPTO_TYPE_HEADER: - case KRB5_CRYPTO_TYPE_PADDING: - case KRB5_CRYPTO_TYPE_TRAILER: - case KRB5_CRYPTO_TYPE_CHECKSUM: - ret = ktp->aead->crypto_length(ktp->aead, ktp->enc, ktp->hash, type, size); - break; - default: - ret = EINVAL; - break; - } - - return ret; -} - -krb5_error_code KRB5_CALLCONV -krb5_c_padding_length(krb5_context context, - krb5_enctype enctype, - size_t data_length, - unsigned int *pad_length) -{ - int i; - const struct krb5_keytypes *ktp = NULL; - - for (i = 0; i < krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == enctype) { - ktp = &krb5_enctypes_list[i]; - break; - } - } - - if (ktp == NULL || ktp->aead == NULL) { - return KRB5_BAD_ENCTYPE; - } - - return krb5int_c_padding_length(ktp->aead, ktp->enc, ktp->hash, data_length, pad_length); -} - -krb5_error_code KRB5_CALLCONV -krb5_c_crypto_length_iov(krb5_context context, - krb5_enctype enctype, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret = 0; - size_t i; - const struct krb5_keytypes *ktp = NULL; - unsigned int data_length = 0, pad_length; - krb5_crypto_iov *padding = NULL; - - /* - * XXX need to rejig internal interface so we can accurately - * report variable header lengths - */ - - for (i = 0; i < (size_t)krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == enctype) { - ktp = &krb5_enctypes_list[i]; - break; - } - } - - if (ktp == NULL || ktp->aead == NULL) { - return KRB5_BAD_ENCTYPE; - } - - for (i = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - switch (iov->flags) { - case KRB5_CRYPTO_TYPE_DATA: - data_length += iov->data.length; - break; - case KRB5_CRYPTO_TYPE_PADDING: - if (padding != NULL) - return EINVAL; - - padding = iov; - break; - case KRB5_CRYPTO_TYPE_HEADER: - case KRB5_CRYPTO_TYPE_TRAILER: - case KRB5_CRYPTO_TYPE_CHECKSUM: - ret = ktp->aead->crypto_length(ktp->aead, ktp->enc, ktp->hash, iov->flags, &iov->data.length); - break; - case KRB5_CRYPTO_TYPE_EMPTY: - case KRB5_CRYPTO_TYPE_SIGN_ONLY: - default: - break; - } - - if (ret != 0) - break; - } - - if (ret != 0) - return ret; - - ret = krb5int_c_padding_length(ktp->aead, ktp->enc, ktp->hash, data_length, &pad_length); - if (ret != 0) - return ret; - - if (pad_length != 0 && padding == NULL) - return EINVAL; - - if (padding != NULL) - padding->data.length = pad_length; - - return 0; -} - diff --git a/src/lib/crypto/crypto_libinit.c b/src/lib/crypto/crypto_libinit.c deleted file mode 100644 index 91bf8ac22..000000000 --- a/src/lib/crypto/crypto_libinit.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include "k5-int.h" - -MAKE_INIT_FUNCTION(cryptoint_initialize_library); -MAKE_FINI_FUNCTION(cryptoint_cleanup_library); - -extern int krb5int_prng_init(void); -extern void krb5int_prng_cleanup (void); - -/* - * Initialize the crypto library. - */ - -int cryptoint_initialize_library (void) -{ - return krb5int_prng_init(); -} - -int krb5int_crypto_init(void) -{ - return CALL_INIT_FUNCTION(cryptoint_initialize_library); -} - -/* - * Clean up the crypto library state - */ - -void cryptoint_cleanup_library (void) -{ - if (!INITIALIZER_RAN(cryptoint_initialize_library)) - return; - krb5int_prng_cleanup (); -} diff --git a/src/lib/crypto/crypto_tests/Makefile.in b/src/lib/crypto/crypto_tests/Makefile.in new file mode 100644 index 000000000..718f326fa --- /dev/null +++ b/src/lib/crypto/crypto_tests/Makefile.in @@ -0,0 +1,177 @@ +thisconfigdir=../../.. +myfulldir=lib/crypto/crypto_tests +mydir=lib/crypto/crypto_tests +BUILDTOP=$(REL)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/../krb -I$(srcdir)/../krb/enc_provider \ + -I$(srcdir)/../krb/hash_provider -I$(srcdir)/../krb/keyhash_provider \ + -I$(srcdir)/../krb/dk -I$(srcdir)/../@CRYPTO_IMPL@/ \ + -I$(srcdir)/../krb/yarrow \ + -I$(srcdir)/../krb/crc32 -I$(srcdir)/../krb/old -I$(srcdir)/../krb/raw \ + -I$(srcdir)/../@CRYPTO_IMPL@/aes -I$(srcdir)/../@CRYPTO_IMPL@/des \ + -I$(srcdir)/../@CRYPTO_IMPL@/arcfour -I$(srcdir)/../@CRYPTO_IMPL@/sha1 \ + -I$(srcdir)/../@CRYPTO_IMPL@/md5 -I$(srcdir)/../@CRYPTO_IMPL@/md4 +RUN_SETUP = @KRB5_RUN_ENV@ +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) +DEFS= + +EXTRADEPSRCS=\ + $(srcdir)/t_nfold.c \ + $(srcdir)/t_cf2.c \ + $(srcdir)/t_encrypt.c \ + $(srcdir)/t_prf.c \ + $(srcdir)/t_prng.c \ + $(srcdir)/t_hmac.c \ + $(srcdir)/t_pkcs5.c \ + $(srcdir)/t_cts.c \ + $(srcdir)/vectors.c \ + $(srcdir)/aes-test.c \ + $(srcdir)/t_afss2k.c \ + $(srcdir)/t_cksum.c \ + $(srcdir)/t_crc.c \ + $(srcdir)/t_mddriver.c \ + $(srcdir)/t_shs3.c \ + $(srcdir)/t_shs.c \ + $(srcdir)/t_verify.c \ + $(srcdir)/ytest.c + +##DOSBUILDTOP = ..\..\.. +##DOSLIBNAME=$(OUTPRE)crypto.lib +##DOSOBJFILE=$(OUTPRE)crypto.lst +##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst +##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst + +##DOS##LIBOBJS = $(OBJS) + +check-unix:: t_nfold t_encrypt t_prf t_prng t_hmac t_cf2 \ + t_cksum4 t_cksum5 \ + aes-test verify destest t_afss2k \ + t_mddriver4 t_mddriver \ + t_shs t_shs3 t_crc + $(RUN_SETUP) $(VALGRIND) ./t_nfold + $(RUN_SETUP) $(VALGRIND) ./t_encrypt + $(RUN_SETUP) $(VALGRIND) ./t_prng <$(srcdir)/t_prng.seed >t_prng.output && \ + diff t_prng.output $(srcdir)/t_prng.expected + $(RUN_SETUP) $(VALGRIND) ./t_hmac + $(RUN_SETUP) $(VALGRIND) ./t_prf <$(srcdir)/t_prf.in >t_prf.output + diff t_prf.output $(srcdir)/t_prf.expected + $(RUN_SETUP) $(VALGRIND) ./t_cf2 <$(srcdir)/t_cf2.in >t_cf2.output + diff t_cf2.output ./t_cf2.expected + $(RUN_SETUP) $(VALGRIND) ./t_cksum4 "this is a test" + $(RUN_SETUP) $(VALGRIND) ./t_cksum5 "this is a test" + $(RUN_SETUP) $(VALGRIND) ./t_crc + $(RUN_SETUP) $(VALGRIND) ./aes-test -k > vk.txt + cmp vk.txt $(srcdir)/expect-vk.txt + $(RUN_SETUP) $(VALGRIND) ./aes-test > vt.txt + cmp vt.txt $(srcdir)/expect-vt.txt + $(RUN_SETUP) $(VALGRIND) ./verify -z + $(RUN_SETUP) $(VALGRIND) ./verify -m + $(RUN_SETUP) $(VALGRIND) ./verify + $(RUN_SETUP) $(VALGRIND) ./destest < $(srcdir)/keytest.data + $(RUN_SETUP) $(VALGRIND) ./t_afss2k + $(RUN_SETUP) $(VALGRIND) $(C)t_mddriver4 -x + $(RUN_SETUP) $(VALGRIND) $(C)t_mddriver -x + $(RUN_SETUP) $(VALGRIND) $(C)t_shs -x + $(RUN_SETUP) $(VALGRIND) $(C)t_shs3 + + + + +# $(RUN_SETUP) $(VALGRIND) ./t_pkcs5 + +t_nfold$(EXEEXT): t_nfold.$(OBJEXT) $(srcdir)/../krb/nfold$(DYNOBJEXT) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_nfold.$(OBJEXT) $(srcdir)/../krb/nfold$(DYNOBJEXT) $(SUPPORT_LIB) + +t_encrypt$(EXEEXT): t_encrypt.$(OBJEXT) $(srcdir)/../krb/nfold$(DYNOBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_encrypt.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) + +t_prf$(EXEEXT): t_prf.$(OBJEXT) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_prf.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) + +t_cf2$(EXEEXT): t_cf2.$(OBJEXT) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_cf2.$(OBJEXT) -lkrb5 -lk5crypto -lcom_err $(SUPPORT_LIB) + + +t_prng$(EXEEXT): t_prng.$(OBJEXT) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_prng.$(OBJEXT) -lk5crypto -lcom_err $(SUPPORT_LIB) + +t_hmac$(EXEEXT): t_hmac.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_hmac.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) + +#t_pkcs5$(EXEEXT): t_pkcs5.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) +# $(CC_LINK) -o $@ t_pkcs5.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) + +vectors$(EXEEXT): vectors.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ vectors.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) + +# t_cts$(EXEEXT): t_cts.$(OBJEXT) $(CRYPTO_DEPLIB) $(SUPPORT_DEPLIB) +# $(CC_LINK) -o $@ t_cts.$(OBJEXT) \ +# $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) + +t_cksum4.o: $(srcdir)/t_cksum.c + $(CC) -DMD=4 $(ALL_CFLAGS) -o t_cksum4.o -c $(srcdir)/t_cksum.c + +t_cksum5.o: $(srcdir)/t_cksum.c + $(CC) -DMD=5 $(ALL_CFLAGS) -o t_cksum5.o -c $(srcdir)/t_cksum.c + +t_cksum4: t_cksum4.o $(CRYTPO_DEPLIB) + $(CC_LINK) -o t_cksum4 t_cksum4.o $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) $(LIBS) + +t_cksum5: t_cksum5.o $(CRYPTO_DEPLIB) + $(CC_LINK) -o t_cksum5 t_cksum5.o $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) $(LIBS) + +t_crc: t_crc.o $(K5CRYPTO_LIB) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_crc.o $(K5CRYPTO_LIB) $(SUPPORT_LIB) + +aes-test: aes-test.$(OBJEXT) $(CRYPTO_DEPLIB) + $(CC_LINK) -o aes-test aes-test.$(OBJEXT) $(K5CRYPTO_LIB) $(COM_ERR_LIB) $(SUPPORT_LIB) + +verify$(EXEEXT): t_verify.$(OBJEXT) $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ t_verify.$(OBJEXT) -lcom_err $(SUPPORT_LIB) -lk5crypto + +destest$(EXEEXT): destest.$(OBJEXT) $(SUPPORT_DEPLIB) + $(CC_LINK) -o $@ destest.$(OBJEXT) $(TOBJS) $(SUPPORT_LIB) -lk5crypto + +t_afss2k: t_afss2k.$(OBJEXT) $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -o $@ t_afss2k.$(OBJEXT) -lcom_err $(SUPPORT_LIB) -lk5crypto + +t_mddriver4.o: $(srcdir)/t_mddriver.c + $(CC) -DMD=4 $(ALL_CFLAGS) -o t_mddriver4.o -c $(srcdir)/t_mddriver.c + +t_mddriver4: t_mddriver4.o $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -DMD4 -o t_mddriver4 t_mddriver4.o -lk5crypto $(SUPPORT_LIB) + +t_mddriver: t_mddriver.o $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -o t_mddriver t_mddriver.o -lk5crypto $(SUPPORT_LIB) + +t_shs: t_shs.o $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -o t_shs t_shs.o $(SUPPORT_LIB) $(CRYPTO_DEPLIB) + +t_shs3: t_shs3.o $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -o t_shs3 t_shs3.o $(SUPPORT_LIB) $(CRYPTO_DEPLIB) + +ytest: ytest.o shs.o $(SUPPORT_DEPLIB) $(CRYPTO_DEPLIB) + $(CC_LINK) -o ytest ytest.o $(SUPPORT_LIB) $(CRYPTO_DEPLIB) + + + +clean:: + $(RM) t_nfold.o t_nfold t_encrypt t_encrypt.o t_prng.o t_prng \ + t_hmac.o t_hmac t_pkcs5.o t_pkcs5 pbkdf2.o t_prf t_prf.o t_cf2 t_cf2.o \ + aes-test.o aes-test vt.txt vk.txt kresults.out \ + destest.o destest \ + t_afss2k.o t_afss2k t_cksum.o t_cksum \ + t_crc.o t_crc t_cts.o t_cts \ + t_mddriver4.o t_mddriver4 t_mddriver.o t_mddriver \ + t_cksum4 t_cksum4.o t_cksum5 t_cksum5.o \ + t_shs3 t_shs3.o t_shs t_shs.o verify t_verify.o \ + t_mddriver$(EXEEXT) $(OUTPRE)t_mddriver.$(OBJEXT) \ + t_shs$(EXEEXT) t_shs.$(OBJEXT) t_shs3$(EXEEXT) t_shs3.$(OBJEXT) + + -$(RM) t_prng.output + -$(RM) t_prf.output + -$(RM) t_cf2.output + +@lib_frag@ +@libobj_frag@ + diff --git a/src/lib/crypto/crypto_tests/aes-test.c b/src/lib/crypto/crypto_tests/aes-test.c new file mode 100644 index 000000000..c05fd26e3 --- /dev/null +++ b/src/lib/crypto/crypto_tests/aes-test.c @@ -0,0 +1,138 @@ +/* + * lib/crypto/aes/aes-test.c + * + * Copyright (C) 2002 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Subset of NIST tests for AES; specifically, the variable-key and + * variable-text tests for 128- and 256-bit keys. + */ + +#include +#include "k5-int.h" + +static char key[32]; +static char plain[16], cipher[16], zero[16]; + +static krb5_keyblock enc_key; +static krb5_data ivec; +static krb5_data in, out; +static void init() +{ + enc_key.contents = key; + enc_key.length = 16; + ivec.data = zero; + ivec.length = 16; + in.data = plain; + in.length = 16; + out.data = cipher; + out.length = 16; +} +static void enc() +{ + krb5int_aes_encrypt(&enc_key, &ivec, &in, &out); +} + +static void hexdump(const char *label, const char *cp, int len) +{ + printf("%s=", label); + while (len--) printf("%02X", 0xff & *cp++); + printf("\n"); +} + +static void set_bit(char *ptr, int bitnum) +{ + int bytenum; + bytenum = bitnum / 8; + bitnum %= 8; + /* First bit is the high bit! */ + ptr[bytenum] = 1 << (7 - bitnum); +} + +/* Variable-Key tests */ +static void vk_test_1(int len) +{ + int i; + + enc_key.length = len; + printf("\nKEYSIZE=%d\n\n", len * 8); + memset(plain, 0, sizeof(plain)); + hexdump("PT", plain, 16); + for (i = 0; i < len * 8; i++) { + memset(key, 0, len); + set_bit(key, i); + printf("\nI=%d\n", i+1); + hexdump("KEY", key, len); + enc(); + hexdump("CT", cipher, 16); + } + printf("\n==========\n"); +} +static void vk_test() +{ + vk_test_1(16); + vk_test_1(32); +} + +/* Variable-Text tests */ +static void vt_test_1(int len) +{ + int i; + + enc_key.length = len; + printf("\nKEYSIZE=%d\n\n", len * 8); + memset(key, 0, len); + hexdump("KEY", key, len); + for (i = 0; i < 16 * 8; i++) { + memset(plain, 0, sizeof(plain)); + set_bit(plain, i); + printf("\nI=%d\n", i+1); + hexdump("PT", plain, 16); + enc(); + hexdump("CT", cipher, 16); + } + printf("\n==========\n"); +} +static void vt_test() +{ + vt_test_1(16); + vt_test_1(32); +} + + +int main (int argc, char *argv[]) +{ + if (argc > 2 || (argc == 2 && strcmp(argv[1], "-k"))) { + fprintf(stderr, + "usage:\t%s -k\tfor variable-key tests\n" + " or:\t%s \tfor variable-plaintext tests\n", + argv[0], argv[0]); + return 1; + } + init(); + if (argc == 2) + vk_test(); + else + vt_test(); + return 0; +} diff --git a/src/lib/crypto/crypto_tests/deps b/src/lib/crypto/crypto_tests/deps new file mode 100644 index 000000000..2feac3c9d --- /dev/null +++ b/src/lib/crypto/crypto_tests/deps @@ -0,0 +1 @@ +# No dependencies here. diff --git a/src/lib/crypto/crypto_tests/destest.c b/src/lib/crypto/crypto_tests/destest.c new file mode 100644 index 000000000..2582cc3d3 --- /dev/null +++ b/src/lib/crypto/crypto_tests/destest.c @@ -0,0 +1,247 @@ +/* + * lib/crypto/des/destest.c + * + * Copyright 1990,1991 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Test a DES implementation against known inputs & outputs + */ + + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "des_int.h" +#include "com_err.h" + +#include + +void convert (char *, unsigned char []); + +void des_cblock_print_file (mit_des_cblock, FILE *); + +krb5_octet zeroblock[8] = {0,0,0,0,0,0,0,0}; + +int +main(argc, argv) + int argc; + char *argv[]; +{ + char block1[17], block2[17], block3[17]; +#if 0 + mit_des_cblock key, input, output, output2; +#else + /* Force tests of unaligned accesses. */ + union { unsigned char c[8*4+3]; long l; } u; + unsigned char *ioblocks = u.c; + unsigned char *input = ioblocks+1; + unsigned char *output = ioblocks+10; + unsigned char *output2 = ioblocks+19; + unsigned char *key = ioblocks+27; +#endif + mit_des_key_schedule sched; + int num = 0; + int retval; + + int error = 0; + + while (scanf("%16s %16s %16s", block1, block2, block3) == 3) { + convert(block1, key); + convert(block2, input); + convert(block3, output); + + retval = mit_des_key_sched(key, sched); + if (retval) { + fprintf(stderr, "des test: can't process key"); + exit(1); + } + mit_des_cbc_encrypt((const mit_des_cblock *) input, output2, 8, + sched, zeroblock, 1); + + if (memcmp((char *)output2, (char *)output, 8)) { + fprintf(stderr, + "DES ENCRYPT ERROR, key %s, text %s, real cipher %s, computed cyphertext %02X%02X%02X%02X%02X%02X%02X%02X\n", + block1, block2, block3, + output2[0],output2[1],output2[2],output2[3], + output2[4],output2[5],output2[6],output2[7]); + error++; + } + + /* + * Now try decrypting.... + */ + mit_des_cbc_encrypt((const mit_des_cblock *) output, output2, 8, + sched, zeroblock, 0); + + if (memcmp((char *)output2, (char *)input, 8)) { + fprintf(stderr, + "DES DECRYPT ERROR, key %s, text %s, real cipher %s, computed cleartext %02X%02X%02X%02X%02X%02X%02X%02X\n", + block1, block2, block3, + output2[0],output2[1],output2[2],output2[3], + output2[4],output2[5],output2[6],output2[7]); + error++; + } + + num++; + } + + if (error) + printf("destest: failed to pass the test\n"); + else + printf("destest: %d tests passed successfully\n", num); + + exit( (error > 256 && error % 256) ? 1 : error); +} + +int value[128] = { +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +0, 1, 2, 3, 4, 5, 6, 7, +8, 9, -1, -1, -1, -1, -1, -1, +-1, 10, 11, 12, 13, 14, 15, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +-1, -1, -1, -1, -1, -1, -1, -1, +}; + +void +convert(text, cblock) + char *text; + unsigned char cblock[]; +{ + register int i; + for (i = 0; i < 8; i++) { + if (text[i*2] < 0 || text[i*2] >= 128) + abort (); + if (value[(int) text[i*2]] == -1 || value[(int) text[i*2+1]] == -1) { + printf("Bad value byte %d in %s\n", i, text); + exit(1); + } + cblock[i] = 16*value[(int) text[i*2]] + value[(int) text[i*2+1]]; + } + return; +} + +/* + * Fake out the DES library, for the purposes of testing. + */ + +#include "des_int.h" + +int +mit_des_is_weak_key(key) + mit_des_cblock key; +{ + return 0; /* fake it out for testing */ +} + +void +des_cblock_print_file(x, fp) + mit_des_cblock x; + FILE *fp; +{ + unsigned char *y = (unsigned char *) x; + register int i = 0; + fprintf(fp," 0x { "); + + while (i++ < 8) { + fprintf(fp,"%x",*y++); + if (i < 8) + fprintf(fp,", "); + } + fprintf(fp," }"); +} + + +#define smask(step) ((1<>step)&smask(step))) +#define parity_char(x) pstep(pstep(pstep((x),4),2),1) + +/* + * des_check_key_parity: returns true iff key has the correct des parity. + * See des_fix_key_parity for the definition of + * correct des parity. + */ +int +mit_des_check_key_parity(key) + register mit_des_cblock key; +{ + int i; + + for (i=0; isaltstr; + if (tcase->saltlen == -1) + salt.length = strlen (tcase->saltstr); + else + salt.length = tcase->saltlen; + + /* + * Try passwords with lengths equal to, greater than, and less + * than 8 characters, since the AFS s2k algorithm does + * interesting stuff depending on the length. + */ + passwd.data = "My Password"; + for (i = 0; i < 12; i++) { + passwd.length = i; + err = mit_afs_string_to_key (&key, &passwd, &salt); + if (err != 0) { + com_err (me, err, ""); + exit (1); + } + if (memcmp (tcase->keys[i], keydata, 8) != 0) + abort (); + } + + /* Run another pass to make sure the characters after the + password in the buffer aren't influencing the output. The + password is *not* required to be null-terminated. */ + memset (longpass, '!', sizeof (longpass)); + longpass[sizeof (longpass)-1] = '\0'; + memcpy (longpass, "My Password", strlen ("My Password")); + passwd.data = (char *) longpass; + for (i = 0; i < 12; i++) { + passwd.length = i; + err = mit_afs_string_to_key (&key, &passwd, &salt); + if (err != 0) { + com_err (me, err, ""); + exit (1); + } + if (memcmp (tcase->keys[i], keydata, 8) != 0) + abort (); + } +} diff --git a/src/lib/crypto/crypto_tests/t_cf2.c b/src/lib/crypto/crypto_tests/t_cf2.c new file mode 100644 index 000000000..2e171c275 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cf2.c @@ -0,0 +1,88 @@ +/* + * lib/crypto/t_cf2.c + * + * Copyright (C) 2004, 2009 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * This file contains tests for theKRB-FX-CF2 code in Kerberos, based + *on the PRF regression tests. It reads an input file, and writes an + *output file. It is assumed that the output file will be diffed + *against expected output to see whether regression tests pass. The + *input file is a very primitive format. + *First line: enctype + *second line: key to pass to string2key; also used as salt + *Third line: second key to pass to string2key + *fourth line: pepper1 + *fifth line: pepper2 + *scanf is used to read the file, so interior spaces are not permitted. The program outputs the hex bytes of the key. + */ +#include + +#include +#include +#include + +int main () { + char pepper1[1024], pepper2[1024]; + krb5_keyblock *k1 = NULL, *k2 = NULL, *out = NULL; + krb5_data s2k; + unsigned int i; + while (1) { + krb5_enctype enctype; + char s[1025]; + + if (scanf( "%d", &enctype) == EOF) + break; + if (scanf("%1024s", &s[0]) == EOF) + break; + assert (krb5_init_keyblock(0, enctype, 0, &k1) == 0); + s2k.data = &s[0]; + s2k.length = strlen(s); + assert(krb5_c_string_to_key (0, enctype, &s2k, &s2k, k1) == 0); + if (scanf("%1024s", &s[0]) == EOF) + break; + assert (krb5_init_keyblock(0, enctype, 0, &k2) == 0); + s2k.data = &s[0]; + s2k.length = strlen(s); + assert(krb5_c_string_to_key (0, enctype, &s2k, &s2k, k2) == 0); + if (scanf("%1024s %1024s", pepper1, pepper2) == EOF) + break; + assert(krb5_c_fx_cf2_simple(0, k1, pepper1, + k2, pepper2, &out) ==0); + i = out->length; + for (; i > 0; i--) { + printf ("%02x", + (unsigned int) ((unsigned char) out->contents[out->length-i])); + } + printf ("\n"); + + krb5_free_keyblock(0,out); + out = NULL; + + krb5_free_keyblock(0, k1); + k1 = NULL; + krb5_free_keyblock(0, k2); + k2 = NULL; + } + + return (0); +} diff --git a/src/lib/crypto/crypto_tests/t_cf2.comments b/src/lib/crypto/crypto_tests/t_cf2.comments new file mode 100644 index 000000000..0643b6507 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cf2.comments @@ -0,0 +1,6 @@ +The first test mirrors the first two tests in t_prf.in. + +The second test mirrors the following four tests in t_prf.in. + +The third and fourth tests are simple tests of the DES and 3DES PRF. +The fifth test is the same simple test for RC4. diff --git a/src/lib/crypto/crypto_tests/t_cf2.expected b/src/lib/crypto/crypto_tests/t_cf2.expected new file mode 100644 index 000000000..007000f21 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cf2.expected @@ -0,0 +1,5 @@ +97df97e4b798b29eb31ed7280287a92a +4d6ca4e629785c1f01baf55e2e548566b9617ae3a96868c337cb93b5e72b1c7b +43bae3738c9467e6 +e58f9eb643862c13ad38e529313462a7f73e62834fe54a01 +24d7f6b6bae4e5c00d2082c5ebab3672 diff --git a/src/lib/crypto/crypto_tests/t_cf2.in b/src/lib/crypto/crypto_tests/t_cf2.in new file mode 100644 index 000000000..094c2392f --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cf2.in @@ -0,0 +1,25 @@ +17 +key1 +key2 +a +b +18 +key1 +key2 +a +b +1 +key1 +key2 +a +b +16 +key1 +key2 +a +b +23 +key1 +key2 +a +b diff --git a/src/lib/crypto/crypto_tests/t_cksum.c b/src/lib/crypto/crypto_tests/t_cksum.c new file mode 100644 index 000000000..98187f7f1 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cksum.c @@ -0,0 +1,139 @@ +/* + * lib/crypto/md5/t_cksum.c + * + * Copyright 1995 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + */ + +/* + * t_cksum.c - Test checksum and checksum compatability for rsa-md[4,5]-des + */ + +#include "k5-int.h" + +#define MD5_K5BETA_COMPAT +#define MD4_K5BETA_COMPAT + +#if MD == 4 +extern struct krb5_keyhash_provider krb5int_keyhash_md4des; +#define khp krb5int_keyhash_md4des +#endif + +#if MD == 5 +extern struct krb5_keyhash_provider krb5int_keyhash_md5des; +#define khp krb5int_keyhash_md5des +#endif + +static void +print_checksum(text, number, message, checksum) + char *text; + int number; + char *message; + krb5_data *checksum; +{ + int i; + + printf("%s MD%d checksum(\"%s\") = ", text, number, message); + for (i=0; ilength; i++) + printf("%02x", (unsigned char) checksum->data[i]); + printf("\n"); +} + +/* + * Test the checksum verification of Old Style (tm) and correct RSA-MD[4,5]-DES + * checksums. + */ + +krb5_octet testkey[8] = { 0x45, 0x01, 0x49, 0x61, 0x58, 0x19, 0x1a, 0x3d }; + +int +main(argc, argv) + int argc; + char **argv; +{ + int msgindex; + krb5_boolean valid; + size_t length; + krb5_keyblock keyblock; + krb5_error_code kret=0; + krb5_data plaintext, newstyle_checksum; + + /* this is a terrible seed, but that's ok for the test. */ + + plaintext.length = 8; + plaintext.data = (char *) testkey; + + krb5_c_random_seed(/* XXX */ 0, &plaintext); + + keyblock.enctype = ENCTYPE_DES_CBC_CRC; + keyblock.length = sizeof(testkey); + keyblock.contents = testkey; + + length = khp.hashsize; + + newstyle_checksum.length = length; + + if (!(newstyle_checksum.data = (char *) + malloc((unsigned) newstyle_checksum.length))) { + printf("cannot get memory for new style checksum\n"); + return(ENOMEM); + } + for (msgindex = 1; msgindex < argc; msgindex++) { + plaintext.length = strlen(argv[msgindex]); + plaintext.data = argv[msgindex]; + + if ((kret = (*(khp.hash))(&keyblock, 0, 0, &plaintext, &newstyle_checksum))) { + printf("krb5_calculate_checksum choked with %d\n", kret); + break; + } + print_checksum("correct", MD, argv[msgindex], &newstyle_checksum); + + if ((kret = (*(khp.verify))(&keyblock, 0, 0, &plaintext, &newstyle_checksum, + &valid))) { + printf("verify on new checksum choked with %d\n", kret); + break; + } + if (!valid) { + printf("verify on new checksum failed\n"); + break; + } + printf("Verify succeeded for \"%s\"\n", argv[msgindex]); + + newstyle_checksum.data[0]++; + if ((kret = (*(khp.verify))(&keyblock, 0, 0, &plaintext, &newstyle_checksum, + &valid))) { + printf("verify on new checksum choked with %d\n", kret); + break; + } + if (valid) { + printf("verify on new checksum succeeded, but shouldn't have\n"); + break; + } + printf("Verify of bad checksum OK for \"%s\"\n", argv[msgindex]); + kret = 0; + } + free(newstyle_checksum.data); + if (!kret) + printf("%d tests passed successfully for MD%d checksum\n", argc-1, MD); + return(kret); +} diff --git a/src/lib/crypto/crypto_tests/t_crc.c b/src/lib/crypto/crypto_tests/t_crc.c new file mode 100644 index 000000000..e8a353a0b --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_crc.c @@ -0,0 +1,213 @@ +/* + * lib/crypto/crc32/t_crc.c + * + * Copyright 2002,2005 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * Sanity checks for CRC32. + */ +#include +#include +#include +#include +#include +#include "k5-int.h" +#include "crc-32.h" + +#define HEX 1 +#define STR 2 +struct crc_trial { + int type; + char *data; + unsigned long sum; +}; + +struct crc_trial trials[] = { + {HEX, "01", 0x77073096}, + {HEX, "02", 0xee0e612c}, + {HEX, "04", 0x076dc419}, + {HEX, "08", 0x0edb8832}, + {HEX, "10", 0x1db71064}, + {HEX, "20", 0x3b6e20c8}, + {HEX, "40", 0x76dc4190}, + {HEX, "80", 0xedb88320}, + {HEX, "0100", 0x191b3141}, + {HEX, "0200", 0x32366282}, + {HEX, "0400", 0x646cc504}, + {HEX, "0800", 0xc8d98a08}, + {HEX, "1000", 0x4ac21251}, + {HEX, "2000", 0x958424a2}, + {HEX, "4000", 0xf0794f05}, + {HEX, "8000", 0x3b83984b}, + {HEX, "0001", 0x77073096}, + {HEX, "0002", 0xee0e612c}, + {HEX, "0004", 0x076dc419}, + {HEX, "0008", 0x0edb8832}, + {HEX, "0010", 0x1db71064}, + {HEX, "0020", 0x3b6e20c8}, + {HEX, "0040", 0x76dc4190}, + {HEX, "0080", 0xedb88320}, + {HEX, "01000000", 0xb8bc6765}, + {HEX, "02000000", 0xaa09c88b}, + {HEX, "04000000", 0x8f629757}, + {HEX, "08000000", 0xc5b428ef}, + {HEX, "10000000", 0x5019579f}, + {HEX, "20000000", 0xa032af3e}, + {HEX, "40000000", 0x9b14583d}, + {HEX, "80000000", 0xed59b63b}, + {HEX, "00010000", 0x01c26a37}, + {HEX, "00020000", 0x0384d46e}, + {HEX, "00040000", 0x0709a8dc}, + {HEX, "00080000", 0x0e1351b8}, + {HEX, "00100000", 0x1c26a370}, + {HEX, "00200000", 0x384d46e0}, + {HEX, "00400000", 0x709a8dc0}, + {HEX, "00800000", 0xe1351b80}, + {HEX, "00000100", 0x191b3141}, + {HEX, "00000200", 0x32366282}, + {HEX, "00000400", 0x646cc504}, + {HEX, "00000800", 0xc8d98a08}, + {HEX, "00001000", 0x4ac21251}, + {HEX, "00002000", 0x958424a2}, + {HEX, "00004000", 0xf0794f05}, + {HEX, "00008000", 0x3b83984b}, + {HEX, "00000001", 0x77073096}, + {HEX, "00000002", 0xee0e612c}, + {HEX, "00000004", 0x076dc419}, + {HEX, "00000008", 0x0edb8832}, + {HEX, "00000010", 0x1db71064}, + {HEX, "00000020", 0x3b6e20c8}, + {HEX, "00000040", 0x76dc4190}, + {HEX, "00000080", 0xedb88320}, + {STR, "foo", 0x7332bc33}, + {STR, "test0123456789", 0xb83e88d6}, + {STR, "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 0xe34180f7} +}; + +#define NTRIALS (sizeof(trials) / sizeof(trials[0])) + +static void +timetest(unsigned int nblk, unsigned int blksiz) +{ + char *block; + int i; + struct tms before, after; + unsigned long cksum; + + block = malloc(blksiz * nblk); + if (block == NULL) + exit(1); + for (i = 0; i < blksiz * nblk; i++) + block[i] = i % 256; + times(&before); + for (i = 0; i < nblk; i++) { + mit_crc32(block + i * blksiz, blksiz, &cksum); + } + + times(&after); + printf("shift-8 implementation, %d blocks of %d bytes:\n", + nblk, blksiz); + printf("\tu=%ld s=%ld cu=%ld cs=%ld\n", + (long)(after.tms_utime - before.tms_utime), + (long)(after.tms_stime - before.tms_stime), + (long)(after.tms_cutime - before.tms_cutime), + (long)(after.tms_cstime - before.tms_cstime)); + +#ifdef CRC32_SHIFT4 + times(&before); + for (i = 0; i < nblk; i++) { + mit_crc32_shift4(block + i * blksiz, blksiz, &cksum); + } + times(&after); + printf("shift-4 implementation, %d blocks of %d bytes:\n", + nblk, blksiz); + printf("\tu=%ld s=%ld cu=%ld cs=%ld\n", + (long)(after.tms_utime - before.tms_utime), + (long)(after.tms_stime - before.tms_stime), + (long)(after.tms_cutime - before.tms_cutime), + (long)(after.tms_cstime - before.tms_cstime)); +#endif + free(block); +} + +static void gethexstr(char *data, size_t *outlen, unsigned char *outbuf, + size_t buflen) +{ + size_t inlen; + char *cp, buf[3]; + long n; + + inlen = strlen(data); + *outlen = 0; + for (cp = data; cp - data < inlen; cp += 2) { + strncpy(buf, cp, 2); + buf[2] = '\0'; + n = strtol(buf, NULL, 16); + outbuf[(*outlen)++] = n; + if (*outlen > buflen) + break; + } +} + +static void +verify(void) +{ + int i; + struct crc_trial trial; + unsigned char buf[4]; + size_t len; + unsigned long cksum; + char *typestr; + + for (i = 0; i < NTRIALS; i++) { + trial = trials[i]; + switch (trial.type) { + case STR: + len = strlen(trial.data); + typestr = "STR"; + mit_crc32(trial.data, len, &cksum); + break; + case HEX: + typestr = "HEX"; + gethexstr(trial.data, &len, buf, 4); + mit_crc32(buf, len, &cksum); + break; + default: + typestr = "BOGUS"; + fprintf(stderr, "bad trial type %d\n", trial.type); + exit(1); + } + printf("%s: %s \"%s\" = 0x%08lx\n", + (trial.sum == cksum) ? "OK" : "***BAD***", + typestr, trial.data, cksum); + } +} + +int +main(void) +{ +#if 0 + timetest(64*1024, 1024); +#endif + verify(); + exit(0); +} diff --git a/src/lib/crypto/crypto_tests/t_cts.c b/src/lib/crypto/crypto_tests/t_cts.c new file mode 100644 index 000000000..aef813273 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_cts.c @@ -0,0 +1,176 @@ +/* + * lib/crypto/vectors.c + * + * Copyright 2001, 2007 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Test vectors for crypto code, matching data submitted for inclusion + * with RFC1510bis. + * + * N.B.: Doesn't compile -- this file uses some routines internal to our + * crypto library which are declared "static" and thus aren't accessible + * without modifying the other sources. + */ + +#include +#include +#include +#include +#include "hash_provider.h" + +#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) + +const char *whoami; + +static void printhex (size_t len, const char *p) +{ + while (len--) + printf ("%02x", 0xff & *p++); +} + +static void printstringhex (const char *p) { printhex (strlen (p), p); } + +static void printdata (krb5_data *d) { printhex (d->length, d->data); } + +static void printkey (krb5_keyblock *k) { printhex (k->length, k->contents); } + + +#define JURISIC "Juri\305\241i\304\207" /* hi Miro */ +#define ESZETT "\303\237" +#define GCLEF "\360\235\204\236" /* outside BMP, woo hoo! */ + +static void +keyToData (krb5_keyblock *k, krb5_data *d) +{ + d->length = k->length; + d->data = k->contents; +} + +void check_error (int r, int line) { + if (r != 0) { + fprintf (stderr, "%s:%d: %s\n", __FILE__, line, + error_message (r)); + exit (1); + } +} +#define CHECK check_error(r, __LINE__) + +extern struct krb5_enc_provider krb5int_enc_des3; +struct krb5_enc_provider *enc = &krb5int_enc_des3; +extern struct krb5_enc_provider krb5int_enc_aes128, krb5int_enc_aes256; + +static void printd (const char *descr, krb5_data *d) { + int i, j; + const int r = 16; + + printf("%s:", descr); + + for (i = 0; i < d->length; i += r) { + printf("\n %04x: ", i); + for (j = i; j < i + r && j < d->length; j++) + printf(" %02x", 0xff & d->data[j]); +#ifdef SHOW_TEXT + for (; j < i + r; j++) + printf(" "); + printf(" "); + for (j = i; j < i + r && j < d->length; j++) { + int c = 0xff & d->data[j]; + printf("%c", isprint(c) ? c : '.'); + } +#endif + } + printf("\n"); +} +static void printk(const char *descr, krb5_keyblock *k) { + krb5_data d; + d.data = k->contents; + d.length = k->length; + printd(descr, &d); +} + +static void test_cts() +{ + static const char input[4*16] = + "I would like the General Gau's Chicken, please, and wonton soup."; + static const unsigned char aeskey[16] = "chicken teriyaki"; + static const int lengths[] = { 17, 31, 32, 47, 48, 64 }; + extern krb5_error_code krb5int_aes_encrypt(const krb5_keyblock *, + const krb5_data *, + const krb5_data *, + krb5_data *); + + int i; + char outbuf[64], encivbuf[16], decivbuf[16], outbuf2[64]; + krb5_data in, out, enciv, deciv, out2; + krb5_keyblock key; + krb5_error_code err; + + in.data = input; + out.data = outbuf; + out2.data = outbuf2; + enciv.length = deciv.length = 16; + enciv.data = encivbuf; + deciv.data = decivbuf; + key.contents = aeskey; + key.length = 16; + + memset(enciv.data, 0, 16); + printk("AES 128-bit key", &key); + for (i = 0; i < sizeof(lengths)/sizeof(lengths[0]); i++) { + memset(enciv.data, 0, 16); + memset(deciv.data, 0, 16); + + printf("\n"); + in.length = out.length = lengths[i]; + printd("IV", &enciv); + err = krb5int_aes_encrypt(&key, &enciv, &in, &out); + if (err) { + printf("error %ld from krb5int_aes_encrypt\n", (long)err); + exit(1); + } + printd("Input", &in); + printd("Output", &out); + printd("Next IV", &enciv); + out2.length = out.length; + err = krb5int_aes_decrypt(&key, &deciv, &out, &out2); + if (err) { + printf("error %ld from krb5int_aes_decrypt\n", (long)err); + exit(1); + } + if (!data_eq(out2, in)) { + printd("Decryption result DOESN'T MATCH", &out2); + exit(1); + } + if (memcmp(enciv.data, deciv.data, 16)) { + printd("Decryption IV result DOESN'T MATCH", &deciv); + exit(1); + } + } +} + +int main (int argc, char **argv) +{ + whoami = argv[0]; + test_cts(); + return 0; +} diff --git a/src/lib/crypto/crypto_tests/t_encrypt.c b/src/lib/crypto/crypto_tests/t_encrypt.c new file mode 100644 index 000000000..974dc585b --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_encrypt.c @@ -0,0 +1,214 @@ +/* + * lib/crypto/t_encrypt.c + * + * Copyright 2001, 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * <<< Description >>> + */ +/* + * Some black-box tests of crypto systems. Make sure that we can decrypt things we encrypt, etc. + */ + +#include "k5-int.h" +#include "etypes.h" +#include + +/* What enctypes should we test?*/ +krb5_enctype interesting_enctypes[] = { + ENCTYPE_DES_CBC_CRC, + ENCTYPE_DES_CBC_MD4, + ENCTYPE_DES_CBC_MD5, + ENCTYPE_DES3_CBC_SHA1, + ENCTYPE_ARCFOUR_HMAC, + ENCTYPE_ARCFOUR_HMAC_EXP, + ENCTYPE_AES256_CTS_HMAC_SHA1_96, + ENCTYPE_AES128_CTS_HMAC_SHA1_96, + 0 +}; + +static void +test(const char *msg, krb5_error_code retval) +{ + printf("%s: . . . ", msg); + if (retval) { + printf("Failed: %s\n", error_message(retval)); + abort(); + } else + printf("OK\n"); +} + +static int compare_results(krb5_data *d1, krb5_data *d2) +{ + if (d1->length != d2->length) { + /* Decryption can leave a little trailing cruft. + For the current cryptosystems, this can be up to 7 bytes. */ + if (d1->length + 8 <= d2->length) + return EINVAL; + if (d1->length > d2->length) + return EINVAL; + } + if (memcmp(d1->data, d2->data, d1->length)) { + return EINVAL; + } + return 0; +} + +int +main () +{ + krb5_context context = 0; + krb5_data in, in2, out, out2, check, check2, state; + krb5_crypto_iov iov[5]; + int i; + size_t len; + krb5_enc_data enc_out, enc_out2; + krb5_error_code retval; + krb5_keyblock *key; + + memset(iov, 0, sizeof(iov)); + + in.data = "This is a test.\n"; + in.length = strlen (in.data); + in2.data = "This is another test.\n"; + in2.length = strlen (in2.data); + + test ("Seeding random number generator", + krb5_c_random_seed (context, &in)); + out.data = malloc(2048); + out2.data = malloc(2048); + check.data = malloc(2048); + check2.data = malloc(2048); + if (out.data == NULL || out2.data == NULL + || check.data == NULL || check2.data == NULL) + abort(); + out.length = 2048; + out2.length = 2048; + check.length = 2048; + check2.length = 2048; + for (i = 0; interesting_enctypes[i]; i++) { + krb5_enctype enctype = interesting_enctypes [i]; + printf ("Testing enctype %d\n", enctype); + test ("Initializing a keyblock", + krb5_init_keyblock (context, enctype, 0, &key)); + test ("Generating random key", + krb5_c_make_random_key (context, enctype, key)); + enc_out.ciphertext = out; + enc_out2.ciphertext = out2; + /* We use an intermediate `len' because size_t may be different size + than `int' */ + krb5_c_encrypt_length (context, key->enctype, in.length, &len); + enc_out.ciphertext.length = len; + test ("Encrypting", + krb5_c_encrypt (context, key, 7, 0, &in, &enc_out)); + test ("Decrypting", + krb5_c_decrypt (context, key, 7, 0, &enc_out, &check)); + test ("Comparing", compare_results (&in, &check)); + if ( krb5_c_crypto_length(context, key->enctype, KRB5_CRYPTO_TYPE_HEADER, &len) == 0 ){ + /* We support iov/aead*/ + int j, pos; + krb5_data signdata; + signdata.data = (char *) "This should be signed"; + signdata.length = strlen(signdata.data); + iov[0].flags= KRB5_CRYPTO_TYPE_STREAM; + iov[1].flags = KRB5_CRYPTO_TYPE_DATA; + iov[0].data = enc_out.ciphertext; + iov[1].data = out; + test("IOV stream decrypting", + krb5_c_decrypt_iov( context, key, 7, 0, iov, 2)); + test("Comparing results", + compare_results(&in, &iov[1].data)); + iov[0].flags = KRB5_CRYPTO_TYPE_HEADER; + iov[1].flags = KRB5_CRYPTO_TYPE_DATA; + iov[1].data = in; /*We'll need to copy memory before encrypt*/ + iov[2].flags = KRB5_CRYPTO_TYPE_SIGN_ONLY; + iov[2].data = signdata; + iov[3].flags = KRB5_CRYPTO_TYPE_PADDING; + iov[4].flags = KRB5_CRYPTO_TYPE_TRAILER; + test("Setting up iov lengths", + krb5_c_crypto_length_iov(context, key->enctype, iov, 5)); + for (j=0,pos=0; j <= 4; j++ ){ + if (iov[j].flags == KRB5_CRYPTO_TYPE_SIGN_ONLY) + continue; + iov[j].data.data = &out.data[pos]; + pos += iov[j].data.length; + } + assert (iov[1].data.length == in.length); + memcpy(iov[1].data.data, in.data, in.length); + test("iov encrypting", + krb5_c_encrypt_iov(context, key, 7, 0, iov, 5)); + assert(iov[1].data.length == in.length); + test("iov decrypting", + krb5_c_decrypt_iov(context, key, 7, 0, iov, 5)); + test("Comparing results", + compare_results(&in, &iov[1].data)); + + } + enc_out.ciphertext.length = out.length; + check.length = 2048; + test ("init_state", + krb5_c_init_state (context, key, 7, &state)); + test ("Encrypting with state", + krb5_c_encrypt (context, key, 7, &state, &in, &enc_out)); + test ("Encrypting again with state", + krb5_c_encrypt (context, key, 7, &state, &in2, &enc_out2)); + test ("free_state", + krb5_c_free_state (context, key, &state)); + test ("init_state", + krb5_c_init_state (context, key, 7, &state)); + test ("Decrypting with state", + krb5_c_decrypt (context, key, 7, &state, &enc_out, &check)); + test ("Decrypting again with state", + krb5_c_decrypt (context, key, 7, &state, &enc_out2, &check2)); + test ("free_state", + krb5_c_free_state (context, key, &state)); + test ("Comparing", + compare_results (&in, &check)); + test ("Comparing", + compare_results (&in2, &check2)); + krb5_free_keyblock (context, key); + } + + /* Test the RC4 decrypt fallback from key usage 9 to 8. */ + test ("Initializing an RC4 keyblock", + krb5_init_keyblock (context, ENCTYPE_ARCFOUR_HMAC, 0, &key)); + test ("Generating random RC4 key", + krb5_c_make_random_key (context, ENCTYPE_ARCFOUR_HMAC, key)); + enc_out.ciphertext = out; + krb5_c_encrypt_length (context, key->enctype, in.length, &len); + enc_out.ciphertext.length = len; + check.length = 2048; + test ("Encrypting with RC4 key usage 8", + krb5_c_encrypt (context, key, 8, 0, &in, &enc_out)); + test ("Decrypting with RC4 key usage 9", + krb5_c_decrypt (context, key, 9, 0, &enc_out, &check)); + test ("Comparing", compare_results (&in, &check)); + + free(out.data); + free(out2.data); + free(check.data); + free(check2.data); + return 0; +} + + diff --git a/src/lib/crypto/crypto_tests/t_hmac.c b/src/lib/crypto/crypto_tests/t_hmac.c new file mode 100644 index 000000000..bf629c359 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_hmac.c @@ -0,0 +1,273 @@ +/* + * lib/crypto/t_hmac.c + * + * Copyright 2001,2002 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Test vectors for HMAC-MD5 and HMAC-SHA1 (placeholder only). + * Tests taken from RFC 2202. + */ + +#include +#include +#include +#include + +#include "hash_provider.h" + +#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) + +const char *whoami; + +static void keyToData (krb5_keyblock *k, krb5_data *d) { + d->length = k->length; + d->data = (char *) k->contents; +} + +#if 0 +static void check_error (int r, int line) { + if (r != 0) { + fprintf (stderr, "%s:%d: %s\n", __FILE__, line, + error_message (r)); + exit (1); + } +} +#define CHECK check_error(r, __LINE__) +#endif + +static void printd (const char *descr, krb5_data *d) { + int i, j; + const int r = 16; + + printf("%s (%d bytes):", descr, d->length); + + for (i = 0; i < d->length; i += r) { + printf("\n %04x: ", i); + for (j = i; j < i + r && j < d->length; j++) + printf(" %02x", 0xff & d->data[j]); + for (; j < i + r; j++) + printf(" "); + printf(" "); + for (j = i; j < i + r && j < d->length; j++) { + int c = 0xff & d->data[j]; + printf("%c", isprint(c) ? c : '.'); + } + } + printf("\n"); +} +static void printk(const char *descr, krb5_keyblock *k) { + krb5_data d; + keyToData(k,&d); + printd(descr, &d); +} + + + +struct hmac_test { + int key_len; + unsigned char key[180]; + int data_len; + unsigned char data[80]; + const char *hexdigest; +}; + +static krb5_error_code hmac1(const struct krb5_hash_provider *h, + krb5_keyblock *key, + krb5_data *in, krb5_data *out) +{ + char tmp[40]; + size_t blocksize, hashsize; + krb5_error_code err; + + printk(" test key", key); + blocksize = h->blocksize; + hashsize = h->hashsize; + if (hashsize > sizeof(tmp)) + abort(); + if (key->length > blocksize) { + krb5_data d, d2; + d.data = (char *) key->contents; + d.length = key->length; + d2.data = tmp; + d2.length = hashsize; + err = h->hash (1, &d, &d2); + if (err) { + com_err(whoami, err, "hashing key before calling hmac"); + exit(1); + } + key->length = d2.length; + key->contents = (krb5_octet *) d2.data; + printk(" pre-hashed key", key); + } + printd(" hmac input", in); + err = krb5_hmac(h, key, 1, in, out); + if (err == 0) + printd(" hmac output", out); + return err; +} + +static void test_hmac() +{ + krb5_keyblock key; + krb5_data in, out; + char outbuf[20]; + char stroutbuf[80]; + krb5_error_code err; + int i, j; + int lose = 0; + struct k5buf buf; + + /* RFC 2202 test vector. */ + static const struct hmac_test md5tests[] = { + { + 16, { + 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, + 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, + }, + 8, "Hi There", + "0x9294727a3638bb1c13f48ef8158bfc9d" + }, + + { + 4, "Jefe", + 28, "what do ya want for nothing?", + "0x750c783e6ab0b503eaa86e310a5db738" + }, + + { + 16, { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa + }, + 50, { + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + }, + "0x56be34521d144c88dbb8c733f0e8b3f6" + }, + + { + 25, { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, + 0x15, 0x16, 0x17, 0x18, 0x19 + }, + 50, { + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + }, + "0x697eaf0aca3a3aea3a75164746ffaa79" + }, + + { + 16, { + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c + }, + 20, "Test With Truncation", + "0x56461ef2342edc00f9bab995690efd4c" + }, + + { + 80, { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + }, + 54, "Test Using Larger Than Block-Size Key - Hash Key First", + "0x6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd" + }, + + { + 80, { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + }, + 73, + "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", + "0x6f630fad67cda0ee1fb1f562db3aa53e" + }, + }; + + for (i = 0; i < sizeof(md5tests)/sizeof(md5tests[0]); i++) { + key.contents = md5tests[i].key; + key.length = md5tests[i].key_len; + in.data = md5tests[i].data; + in.length = md5tests[i].data_len; + + out.data = outbuf; + out.length = 20; + printf("\nTest #%d:\n", i+1); + err = hmac1(&krb5int_hash_md5, &key, &in, &out); + if (err) { + com_err(whoami, err, "computing hmac"); + exit(1); + } + + krb5int_buf_init_fixed(&buf, stroutbuf, sizeof(stroutbuf)); + krb5int_buf_add(&buf, "0x"); + for (j = 0; j < out.length; j++) + krb5int_buf_add_fmt(&buf, "%02x", 0xff & outbuf[j]); + if (krb5int_buf_data(&buf) == NULL) + abort(); + if (strcmp(stroutbuf, md5tests[i].hexdigest)) { + printf("*** CHECK FAILED!\n" + "\tReturned: %s.\n" + "\tExpected: %s.\n", stroutbuf, md5tests[i].hexdigest); + lose++; + } else + printf("Matches expected result.\n"); + } + + /* Do again with SHA-1 tests.... */ + + if (lose) { + printf("%d failures; exiting.\n", lose); + exit(1); + } +} + + +int main (int argc, char **argv) +{ + whoami = argv[0]; + test_hmac(); + return 0; +} diff --git a/src/lib/crypto/crypto_tests/t_mdcksum.c b/src/lib/crypto/crypto_tests/t_mdcksum.c new file mode 100644 index 000000000..17ecd51d7 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_mdcksum.c @@ -0,0 +1,206 @@ +/* + * lib/crypto/md5/t_cksum.c + * + * Copyright 1995 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + */ + +/* + * t_cksum.c - Test checksum and checksum compatability for rsa-md[4,5]-des + */ + +#ifndef MD +#define MD 5 +#endif /* MD */ + +#include "k5-int.h" +#if MD == 4 +#include "rsa-md4.h" +#endif /* MD == 4 */ +#if MD == 5 +#include "rsa-md5.h" +#endif /* MD == 5 */ +#include "des_int.h" + +#define MD5_K5BETA_COMPAT +#define MD4_K5BETA_COMPAT + +#if MD == 4 +#define CONFOUNDER_LENGTH RSA_MD4_DES_CONFOUND_LENGTH +#define NEW_CHECKSUM_LENGTH NEW_RSA_MD4_DES_CKSUM_LENGTH +#define OLD_CHECKSUM_LENGTH OLD_RSA_MD4_DES_CKSUM_LENGTH +#define CHECKSUM_TYPE CKSUMTYPE_RSA_MD4_DES +#ifdef MD4_K5BETA_COMPAT +#define K5BETA_COMPAT 1 +#else /* MD4_K5BETA_COMPAT */ +#undef K5BETA_COMPAT +#endif /* MD4_K5BETA_COMPAT */ +#define CKSUM_FUNCTION krb5_md4_crypto_sum_func +#define COMPAT_FUNCTION krb5_md4_crypto_compat_sum_func +#define VERIFY_FUNCTION krb5_md4_crypto_verify_func +#endif /* MD == 4 */ + +#if MD == 5 +#define CONFOUNDER_LENGTH RSA_MD5_DES_CONFOUND_LENGTH +#define NEW_CHECKSUM_LENGTH NEW_RSA_MD5_DES_CKSUM_LENGTH +#define OLD_CHECKSUM_LENGTH OLD_RSA_MD5_DES_CKSUM_LENGTH +#define CHECKSUM_TYPE CKSUMTYPE_RSA_MD5_DES +#ifdef MD5_K5BETA_COMPAT +#define K5BETA_COMPAT 1 +#else /* MD5_K5BETA_COMPAT */ +#undef K5BETA_COMPAT +#endif /* MD5_K5BETA_COMPAT */ +#define CKSUM_FUNCTION krb5_md5_crypto_sum_func +#define COMPAT_FUNCTION krb5_md5_crypto_compat_sum_func +#define VERIFY_FUNCTION krb5_md5_crypto_verify_func +#endif /* MD == 5 */ + +static void +print_checksum(text, number, message, checksum) + char *text; + int number; + char *message; + krb5_checksum *checksum; +{ + int i; + + printf("%s MD%d checksum(\"%s\") = ", text, number, message); + for (i=0; ilength; i++) + printf("%02x", checksum->contents[i]); + printf("\n"); +} + +/* + * Test the checksum verification of Old Style (tm) and correct RSA-MD[4,5]-DES + * checksums. + */ +int +main(argc, argv) + int argc; + char **argv; +{ + int msgindex; + krb5_context kcontext; + krb5_encrypt_block encblock; + krb5_keyblock keyblock; + krb5_error_code kret; + krb5_checksum oldstyle_checksum; + krb5_checksum newstyle_checksum; + krb5_data pwdata; + char *pwd; + + pwd = "test password"; + pwdata.length = strlen(pwd); + pwdata.data = pwd; + krb5_use_enctype(kcontext, &encblock, DEFAULT_KDC_ENCTYPE); + if ((kret = mit_des_string_to_key(&encblock, &keyblock, &pwdata, NULL))) { + printf("mit_des_string_to_key choked with %d\n", kret); + return(kret); + } + if ((kret = mit_des_process_key(&encblock, &keyblock))) { + printf("mit_des_process_key choked with %d\n", kret); + return(kret); + } + + oldstyle_checksum.length = OLD_CHECKSUM_LENGTH; + if (!(oldstyle_checksum.contents = (krb5_octet *) malloc(OLD_CHECKSUM_LENGTH))) { + printf("cannot get memory for old style checksum\n"); + return(ENOMEM); + } + newstyle_checksum.length = NEW_CHECKSUM_LENGTH; + if (!(newstyle_checksum.contents = (krb5_octet *) + malloc(NEW_CHECKSUM_LENGTH))) { + printf("cannot get memory for new style checksum\n"); + return(ENOMEM); + } + for (msgindex = 1; msgindex < argc; msgindex++) { + if ((kret = CKSUM_FUNCTION(argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length, + &newstyle_checksum))) { + printf("krb5_calculate_checksum choked with %d\n", kret); + break; + } + print_checksum("correct", MD, argv[msgindex], &newstyle_checksum); +#ifdef K5BETA_COMPAT + if ((kret = COMPAT_FUNCTION(argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length, + &oldstyle_checksum))) { + printf("old style calculate_checksum choked with %d\n", kret); + break; + } + print_checksum("old", MD, argv[msgindex], &oldstyle_checksum); +#endif /* K5BETA_COMPAT */ + if ((kret = VERIFY_FUNCTION(&newstyle_checksum, + argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length))) { + printf("verify on new checksum choked with %d\n", kret); + break; + } + printf("Verify succeeded for \"%s\"\n", argv[msgindex]); +#ifdef K5BETA_COMPAT + if ((kret = VERIFY_FUNCTION(&oldstyle_checksum, + argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length))) { + printf("verify on old checksum choked with %d\n", kret); + break; + } + printf("Compatible checksum verify succeeded for \"%s\"\n", + argv[msgindex]); +#endif /* K5BETA_COMPAT */ + newstyle_checksum.contents[0]++; + if (!(kret = VERIFY_FUNCTION(&newstyle_checksum, + argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length))) { + printf("verify on new checksum should have choked\n"); + break; + } + printf("Verify of bad checksum OK for \"%s\"\n", argv[msgindex]); +#ifdef K5BETA_COMPAT + oldstyle_checksum.contents[0]++; + if (!(kret = VERIFY_FUNCTION(&oldstyle_checksum, + argv[msgindex], + strlen(argv[msgindex]), + (krb5_pointer) keyblock.contents, + keyblock.length))) { + printf("verify on old checksum should have choked\n"); + break; + } + printf("Compatible checksum verify of altered checksum OK for \"%s\"\n", + argv[msgindex]); +#endif /* K5BETA_COMPAT */ + kret = 0; + } + if (!kret) + printf("%d tests passed successfully for MD%d checksum\n", argc-1, MD); + return(kret); +} diff --git a/src/lib/crypto/crypto_tests/t_mddriver.c b/src/lib/crypto/crypto_tests/t_mddriver.c new file mode 100644 index 000000000..d894aaaec --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_mddriver.c @@ -0,0 +1,323 @@ +/* MDDRIVER.C - test driver for MD2, MD4 and MD5 + */ + +/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All +rights reserved. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +/* The following makes MD default to MD5 if it has not already been + defined with C compiler flags. + */ +#ifndef MD +#define MD 5 +#endif + +#include "k5-int.h" + +#if MD == 2 +#include "md2.h" +#endif +#if MD == 4 +#include "rsa-md4.h" +#endif +#if MD == 5 +#include "rsa-md5.h" +#endif + +/* Length of test block, number of test blocks. + */ +#define TEST_BLOCK_LEN 1000 +#define TEST_BLOCK_COUNT 1000 + +static void MDString (char *); +static void MDTimeTrial (void); +static void MDTestSuite (void); +static void MDFile (char *); +static void MDFilter (void); +static void MDPrint (unsigned char [16]); + +struct md_test_entry { + char *string; + unsigned char digest[16]; +}; + +#if MD == 2 +#define MD_CTX krb5_MD2_CTX +#define MDInit krb5_MD2Init +#define MDUpdate krb5_MD2Update +#define MDFinal krb5_MD2Final +#endif + +#if MD == 4 +#define MD_CTX krb5_MD4_CTX +#define MDInit krb5_MD4Init +#define MDUpdate krb5_MD4Update +#define MDFinal krb5_MD4Final + +#define HAVE_TEST_SUITE +/* Test suite from RFC 1320 */ + +struct md_test_entry md_test_suite[] = { + { "", + {0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31, + 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0 }}, + { "a", + {0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46, + 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24 }}, + { "abc", + {0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, + 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d }}, + { "message digest", + {0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8, + 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b }}, + { "abcdefghijklmnopqrstuvwxyz", + {0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd, + 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9 }}, + { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + {0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35, + 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4 }}, + { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + {0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19, + 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36 }}, + {0, {0}} +}; + +#endif + +#if MD == 5 +#define MD_CTX krb5_MD5_CTX +#define MDInit krb5_MD5Init +#define MDUpdate krb5_MD5Update +#define MDFinal krb5_MD5Final + +#define HAVE_TEST_SUITE +/* Test suite from RFC 1321 */ + +struct md_test_entry md_test_suite[] = { + { "", + {0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, + 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e }}, + { "a", + {0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, + 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 }}, + { "abc", + {0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, + 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 }}, + { "message digest", + {0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, + 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 }}, + { "abcdefghijklmnopqrstuvwxyz", + {0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, + 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b }}, + { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + {0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, + 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f }}, + { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + {0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, + 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a }}, + { 0, {0} } +}; + +#endif + +/* Main driver. + +Arguments (may be any combination): + -sstring - digests string + -t - runs time trial + -x - runs test script + filename - digests file + (none) - digests standard input + */ +int main (argc, argv) +int argc; +char *argv[]; +{ + int i; + + if (argc > 1) + for (i = 1; i < argc; i++) + if (argv[i][0] == '-' && argv[i][1] == 's') + MDString (argv[i] + 2); + else if (strcmp (argv[i], "-t") == 0) + MDTimeTrial (); + else if (strcmp (argv[i], "-x") == 0) + MDTestSuite (); + else + MDFile (argv[i]); + else + MDFilter (); + + return (0); +} + +/* Digests a string and prints the result. + */ +static void MDString (string) +char *string; +{ + MD_CTX context; + unsigned int len = strlen (string); + + MDInit (&context); + MDUpdate (&context, (unsigned char *) string, len); + MDFinal (&context); + + printf ("MD%d (\"%s\") = ", MD, string); + MDPrint (context.digest); + printf ("\n"); +} + +/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte + blocks. + */ +static void MDTimeTrial () +{ + MD_CTX context; + time_t endTime, startTime; + unsigned char block[TEST_BLOCK_LEN]; + unsigned int i; + + printf("MD%d time trial. Digesting %d %d-byte blocks ...", MD, + TEST_BLOCK_LEN, TEST_BLOCK_COUNT); + + /* Initialize block */ + for (i = 0; i < TEST_BLOCK_LEN; i++) + block[i] = (unsigned char)(i & 0xff); + + /* Start timer */ + time (&startTime); + + /* Digest blocks */ + MDInit (&context); + for (i = 0; i < TEST_BLOCK_COUNT; i++) + MDUpdate (&context, block, TEST_BLOCK_LEN); + MDFinal (&context); + + /* Stop timer */ + time (&endTime); + + printf (" done\n"); + printf ("Digest = "); + MDPrint (context.digest); + printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); + printf + ("Speed = %ld bytes/second\n", + (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); +} + +/* Digests a reference suite of strings and prints the results. + */ +static void MDTestSuite () +{ +#ifdef HAVE_TEST_SUITE + MD_CTX context; + struct md_test_entry *entry; + int i, num_tests = 0, num_failed = 0; + + printf ("MD%d test suite:\n\n", MD); + for (entry = md_test_suite; entry->string; entry++) { + unsigned int len = strlen (entry->string); + + MDInit (&context); + MDUpdate (&context, (unsigned char *) entry->string, len); + MDFinal (&context); + + printf ("MD%d (\"%s\") = ", MD, entry->string); + MDPrint (context.digest); + printf ("\n"); + for (i=0; i < 16; i++) { + if (context.digest[i] != entry->digest[i]) { + printf("\tIncorrect MD%d digest! Should have been:\n\t\t ", + MD); + MDPrint(entry->digest); + printf("\n"); + num_failed++; + } + } + num_tests++; + } + if (num_failed) { + printf("%d out of %d tests failed for MD%d!!!\n", num_failed, + num_tests, MD); + exit(1); + } else { + printf ("%d tests passed successfully for MD%d.\n", num_tests, MD); + exit(0); + } +#else + + printf ("MD%d test suite:\n", MD); + MDString (""); + MDString ("a"); + MDString ("abc"); + MDString ("message digest"); + MDString ("abcdefghijklmnopqrstuvwxyz"); + MDString + ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); + MDString + ("12345678901234567890123456789012345678901234567890123456789012345678901234567890"); +#endif +} + +/* Digests a file and prints the result. */ + +static void MDFile (filename) + char *filename; +{ + FILE *file; + MD_CTX context; + int len; + unsigned char buffer[1024]; + + if ((file = fopen (filename, "rb")) == NULL) + printf ("%s can't be opened\n", filename); + else { + MDInit (&context); + while ((len = fread (buffer, 1, 1024, file)) != 0) + MDUpdate (&context, buffer, len); + MDFinal (&context); + + fclose (file); + + printf ("MD%d (%s) = ", MD, filename); + MDPrint (context.digest); + printf ("\n"); + } +} + +/* Digests the standard input and prints the result. + */ +static void MDFilter () +{ + MD_CTX context; + int len; + unsigned char buffer[16]; + + MDInit (&context); + while ((len = fread (buffer, 1, 16, stdin)) != 0) + MDUpdate (&context, buffer, len); + MDFinal (&context); + + MDPrint (context.digest); + printf ("\n"); +} + +/* Prints a message digest in hexadecimal. + */ +static void MDPrint (digest) +unsigned char digest[16]; +{ + unsigned int i; + + for (i = 0; i < 16; i++) + printf ("%02x", digest[i]); +} diff --git a/src/lib/crypto/crypto_tests/t_nfold.c b/src/lib/crypto/crypto_tests/t_nfold.c new file mode 100644 index 000000000..6be0a0934 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_nfold.c @@ -0,0 +1,165 @@ +/* + * lib/crypto/t_nfold.c + * + * Copyright 1988, 1990 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Program to test the correctness of nfold implementation. + * + * exit returns 0 ==> success + * -1 ==> error + */ + +#include +#include +#include + +#include "k5-int.h" + +#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) + +static void printhex (size_t len, const unsigned char *p) +{ + while (len--) + printf ("%02x", 0xff & *p++); +} + +static void printstringhex (const unsigned char *p) { + printhex (strlen ((const char *) p), p); +} + +static void rfc_tests () +{ + int i; + struct { + char *input; + unsigned int n; + unsigned char exp[192/8]; + } tests[] = { + { "012345", 64, + { 0xbe,0x07,0x26,0x31,0x27,0x6b,0x19,0x55, } + }, + { "password", 56, + { 0x78,0xa0,0x7b,0x6c,0xaf,0x85,0xfa, } + }, + { "Rough Consensus, and Running Code", 64, + { 0xbb,0x6e,0xd3,0x08,0x70,0xb7,0xf0,0xe0, } + }, + { "password", 168, + { 0x59,0xe4,0xa8,0xca,0x7c,0x03,0x85,0xc3, + 0xc3,0x7b,0x3f,0x6d,0x20,0x00,0x24,0x7c, + 0xb6,0xe6,0xbd,0x5b,0x3e, } + }, + { "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 192, + { 0xdb,0x3b,0x0d,0x8f,0x0b,0x06,0x1e,0x60, + 0x32,0x82,0xb3,0x08,0xa5,0x08,0x41,0x22, + 0x9a,0xd7,0x98,0xfa,0xb9,0x54,0x0c,0x1b, } + }, + }; + unsigned char outbuf[192/8]; + + printf ("RFC tests:\n"); + for (i = 0; i < ASIZE (tests); i++) { + unsigned char *p = (unsigned char *) tests[i].input; + assert (tests[i].n / 8 <= sizeof (outbuf)); + krb5_nfold (8 * strlen ((char *) p), p, tests[i].n, outbuf); + printf ("%d-fold(\"%s\") =\n", tests[i].n, p); + printf ("%d-fold(", tests[i].n); + printstringhex (p); + printf (") =\n\t"); + printhex (tests[i].n / 8, outbuf); + printf ("\n\n"); + if (memcmp (outbuf, tests[i].exp, tests[i].n/8) != 0) { + printf ("wrong value! expected:\n\t"); + printhex (tests[i].n / 8, tests[i].exp); + exit (1); + } + } +} + +static void fold_kerberos(unsigned int nbytes) +{ + unsigned char cipher_text[300]; + int j; + + if (nbytes > 300) + abort(); + + printf("%d-fold(\"kerberos\") =\n\t", nbytes*8); + krb5_nfold(64, (unsigned char *) "kerberos", 8*nbytes, cipher_text); + for (j=0; j +#include +#include +#include + +#include "k5-int.h" + +static void printhex (size_t len, const char *p) +{ + while (len--) + printf (" %02X", 0xff & *p++); +} + +static void printdata (krb5_data *d) { + printhex (d->length, d->data); +} + +static void test_pbkdf2_rfc3211() +{ + char x[100]; + krb5_error_code err; + krb5_data d, pass, salt; + int i; + + /* RFC 3211 test cases. */ + static const struct { + const char *pass; + const char *salt; + unsigned int count; + size_t len; + const unsigned char expected[24]; + } t[] = { + { "password", "\x12\x34\x56\x78\x78\x56\x34\x12", 5, 8, + { 0xD1, 0xDA, 0xA7, 0x86, 0x15, 0xF2, 0x87, 0xE6 } }, + { "All n-entities must communicate with other " + "n-entities via n-1 entiteeheehees", + "\x12\x34\x56\x78\x78\x56\x34\x12", 500, 24, + { 0x6A, 0x89, 0x70, 0xBF, 0x68, 0xC9, 0x2C, 0xAE, + 0xA8, 0x4A, 0x8D, 0xF2, 0x85, 0x10, 0x85, 0x86, + 0x07, 0x12, 0x63, 0x80, 0xCC, 0x47, 0xAB, 0x2D } }, + }; + + d.data = x; + printf("RFC 3211 test of PBKDF#2\n"); + + for (i = 0; i < sizeof(t)/sizeof(t[0]); i++) { + + printf("pkbdf2(iter_count=%d, dklen=%d (%d bytes), salt=12 34 56 78 78 56 34 12,\n" + " pass=%s):\n ->", + t[i].count, t[i].len * 8, t[i].len, t[i].pass); + + d.length = t[i].len; + pass.data = t[i].pass; + pass.length = strlen(pass.data); + salt.data = t[i].salt; + salt.length = strlen(salt.data); + err = krb5int_pbkdf2_hmac_sha1 (&d, t[i].count, &pass, &salt); + if (err) { + printf("error in computing pbkdf2: %s\n", error_message(err)); + exit(1); + } + printdata(&d); + if (!memcmp(x, t[i].expected, t[i].len)) + printf("\nTest passed.\n\n"); + else { + printf("\n*** CHECK FAILED!\n"); + exit(1); + } + } +} + +int main () +{ + test_pbkdf2_rfc3211(); + return 0; +} diff --git a/src/lib/crypto/crypto_tests/t_prf.c b/src/lib/crypto/crypto_tests/t_prf.c new file mode 100644 index 000000000..ac244eb9a --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prf.c @@ -0,0 +1,91 @@ +/* + * lib/crypto/t_prf.c + * + * Copyright (C) 2004 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * This file contains tests for the PRF code in Kerberos. IT reads an + * input file, and writes an output file. It is assumed that the + * output file will be diffed against expected output to see whether + * regression tests pass. The input file is a very primitive format. + * It includes an enctype and password to be string2keyed followed by + * a number of bytes of input length, followed by that many bytes of + * input. The program outputs krb5_c_prf of that input and key as a + * hex string. + */ + +#include "k5-int.h" +#include + +int main () { + krb5_data input, output; + krb5_keyblock *key = NULL; + unsigned int in_length; + unsigned int i; + size_t prfsz; + + while (1) { + krb5_enctype enctype; + char s[1025]; + + if (scanf( "%d", &enctype) == EOF) + break; + if (scanf("%1024s", &s[0]) == EOF) + break; + assert (krb5_init_keyblock(0, enctype, 0, &key) == 0); + input.data = &s[0]; + input.length = strlen(s); + assert(krb5_c_string_to_key (0, enctype, &input, &input, key) == 0); + + if (scanf("%u", &in_length) == EOF) + break; + + if (in_length ) { + unsigned int lc; + assert ((input.data = malloc(in_length)) != NULL); + for (lc = in_length; lc > 0; lc--) { + scanf ("%2x", &i); + input.data[in_length-lc] = (unsigned) (i&0xff); + } + input.length = in_length; + assert (krb5_c_prf_length(0, enctype, &prfsz) == 0); + assert (output.data = malloc(prfsz)); + output.length = prfsz; + assert (krb5_c_prf(0, key, &input, &output) == 0); + + free (input.data); + input.data = NULL; + } + for (; prfsz > 0; prfsz--) { + printf ("%02x", + (unsigned int) ((unsigned char ) output.data[output.length-prfsz])); + } + printf ("\n"); + + free (output.data); + output.data = NULL; + krb5_free_keyblock(0, key); + key = NULL; + } + + return (0); +} diff --git a/src/lib/crypto/crypto_tests/t_prf.comments b/src/lib/crypto/crypto_tests/t_prf.comments new file mode 100644 index 000000000..124584259 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prf.comments @@ -0,0 +1,8 @@ +The first two tests are effectively a call to krb-fx-cf2 for +aes-128-cts. This mirrorrs the first test in t_cf2.in. + + +The next four tests mirror a call to KRB-FX-CF2 for aes256-cts; this +mirrors the second test in t_cf2.in. + + diff --git a/src/lib/crypto/crypto_tests/t_prf.expected b/src/lib/crypto/crypto_tests/t_prf.expected new file mode 100644 index 000000000..eadfd9747 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prf.expected @@ -0,0 +1,6 @@ +77b39a37a868920f2a51f9dd150c5717 +e06c0dd31ff02091994f2ef5178bfe3d +b2628c788e2e9c4a9bb4644678c29f2f +b406373350cee8a6126f4a9b65a0cd21 +ff0e289ea756c0559a0e911856961a49 +0d674dd0f9a6806525a4d92e828bd15a diff --git a/src/lib/crypto/crypto_tests/t_prf.in b/src/lib/crypto/crypto_tests/t_prf.in new file mode 100644 index 000000000..f45c41618 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prf.in @@ -0,0 +1,18 @@ +17 +key1 +2 0161 +17 +key2 +2 0162 +18 +key1 +2 0161 +18 +key1 +2 0261 +18 +key2 +2 0162 +18 +key2 +2 0262 diff --git a/src/lib/crypto/crypto_tests/t_prng.c b/src/lib/crypto/crypto_tests/t_prng.c new file mode 100644 index 000000000..7df743bae --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.c @@ -0,0 +1,87 @@ +/* + * lib/crypto/t_prng.c + * + * Copyright (C) 2001 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * This file contains tests for the PRNG code in Kerberos. It reads + * an input file, and writes an output file. It is assumed that the + * output file will be diffed against expected output to see whether + * regression tests pass. The input file has a very primitive format. + * It is composed of alternating seeds and outputs. The first line in + * the file is an integer source id from the krb5_c_randsource enum in + * krb5.h. Then an integer seed length is read. Then that many bytes + * (encoded in hex) are read; whitespace or newlines may be inserted + * between bytes. Then after the seed data is an integer describing + * how many bytes of output should be written. Then another source ID + * and seed length is read. If the seed length is 0, the source id is + * ignored and the seed is not seeded. + */ + +#include "k5-int.h" +#include + +int main () { + krb5_error_code ret; + krb5_data input, output; + unsigned int source_id, seed_length; + unsigned int i; + while (1) { + /* Read source*/ + if (scanf ("%u", &source_id ) == EOF ) + break; + /* Read seed length*/ + if (scanf ("%u", &seed_length) == EOF) + break; + if (seed_length ) { + unsigned int lc; + assert ((input.data = malloc(seed_length)) != NULL); + for (lc = seed_length; lc > 0; lc--) { + scanf ("%2x", &i); + input.data[seed_length-lc] = (unsigned) (i&0xff); + } + input.length = seed_length; + assert (krb5_c_random_add_entropy (0, source_id, &input) == 0); + free (input.data); + input.data = NULL; + } + if (scanf ("%u", &i) == EOF) + break; + if (i) { + assert ((output.data = malloc (i)) != NULL); + output.length = i; + ret = krb5_c_random_make_octets (0, &output); + if (ret) + printf ("failed\n"); + else { + for (; i > 0; i--) { + printf ("%02x", + (unsigned int) ((unsigned char ) output.data[output.length-i])); + } + printf ("\n"); + } + free (output.data); + output.data = NULL; + } + } + return (0); +} diff --git a/src/lib/crypto/crypto_tests/t_prng.comments b/src/lib/crypto/crypto_tests/t_prng.comments new file mode 100644 index 000000000..1666b7060 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.comments @@ -0,0 +1,14 @@ +Things this test tries to do: +*adding data +* getting random data +* adding more data but not enough for reseed +*getting more random data +*adding enough to trigger a reseed +*getting more random data +* getting random data without a reseed inbetween +* getting enough data to trigger a gate + + +If you adjust the blocksize or the seeding parameters then this test +should be adjusted. + diff --git a/src/lib/crypto/crypto_tests/t_prng.expected b/src/lib/crypto/crypto_tests/t_prng.expected new file mode 100644 index 000000000..f7f165051 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.expected @@ -0,0 +1,4 @@ +d2f8fbd707a8ece5cb11a02f +eb4cb6e06236ea1c0529f7acbfca8d78cb85bb1d +a244005ae870604342b0386025874ec4306c1dd483c118621b +63e6408afdf9fd225839a7afcc6da6ae494fb4f82bd21ea06bb17ca0848bdae8cea671f545aac52699951caba960c536024b4102f47d61d61fd7b17582a4cf50ba7d215062558f71483249e079689893f3bf25def7f45f9e852281269904d401d6719e3115f6410088c6c5171e878494362684d2116633bb9ea8d9ed5faec73cb076c44d5d639bc2c8ae3de54f0e1e092d5ea439e607e9cd73053bbdf40723f5b48f298fdeeef845e22e06f2f6362fc67fba366e638a7988999d456dcc3d53b23388d685620a7c446d28cd94b13049761b64779db5412e78ac4bab2aacf103fd1b9ceb7213d43710d6a46fd4223fa20e0a68d3e16a82cbadea650ba815dc9ee99b4eb8e2acdac866a05d90ab9de3246db0560fb4b36633bb642c3ea9bf358937dda743f9cef1148791c2cac58995b8eb8fdb1c0cce1686e04ebef5ae7aae36691faafbe8920d3c013f125b687eb019faefa70fc750c52e2e2e33f426824bf1da31268a9bb8d9501f2290375755f8bf77b46639346b4011b78ce9d81105c7791ec5991a2f1eab037488b604df1a21c5c4e36a7c76dca5884d36e30fe8d30d0e7d93fab72062219390655eace2b434b0e2cd21ec9c5a8aa13e783afadcdf386fc43b960c518acb38d7e3da2f67695c1c1c25c4f251b40f4c2e42e89f6f642c32e66159f6ce24aa910fb5d95e3a899a4de5efcf570996e1a662d14362b65d00524df79cd56be93bd572526e4dfd1cf9f7586bc021105cf5456b28c1f45a6d354d000a113e15f64aa0b5253830c07afc8fa47b58dbba8bbae1645b2093035f2387036229dec6f7141b444b8bb7d0382a742bd5c746ba2d7af3af1cadb2dd90bda87d5daed2d2eebd243c7b2d06955d0cc7fe1061d4cfa3b061aaeb97084d9f9a7ec9dbe9e642f4f090d57b5ea1bd8b393f00896d3dc7089e1fc4c2fed7336c2a8c6d119a682c6cc4ae1ccedd30292f2c5570bf4d6287ce8e20b8b34e7fc38e87273f588cd33b8c913defaee5f6bf8fdeda72531c845a6f97a84d5e9b9a6497d4c48614dee7693df35faedc008fded852be8d4bffd475476336e54ed48a827b99d3f0e39019a40d43aef5ae522ec6e280f6a8e7d2713f3c3188bed2476a84af5a5afefa0fa178ed07de0e073693e8790f8bbd0cf9183e48f140b556e723565c382cf7a4c186748189a14e603e4ac70e2b80c266334231207721d16d834a973b48cfec584620624686603cfd66d55dbf8dd8eccd99d85f041c624ec3a7bec314af95d2313afd43cc5cc19249cf85b7ab0b5a4530b597341e7477b249fef1a07eb0d8fa790e9bce752e8b2f7086e98ab44751e0a1b37f29682ce67c0de7a2fd036f26ed719fc343bbf49432aec651d884c99c24d5943c747f7ec3b48d4c2236a8cb6151794daeda073774cc88ff121fdd423b81ef2f34c8f281ca2e5366faee87ff7a623484f2937cc0680ed76ead32b43cb6c67a21f8089b435f38a404d267397c6435cfac16591a3573d9e92f8c4a8028719c22662b903ddb16e08ea7bb2d6b8938c06bdddb4d174c7f2c5d812ed3a34ba8859a1ae841b3b9d5522372018c9aa55b048df826f05a087f185808cb66899f320783a1c4aa2dcd5f2665405ba7e5726e122b67559a39da30956e49fe7711d1b2506e159c5ea42ce0a1ad497220ee3b3e5ebcb73db975bd08e8be56e5f4533b8295b10d4b0fef466de6540f8fe10530c9716d83a12f5ffbba5b4dbc50ed89388d04e7a15d3d9d251041ed5303efa2525bc62a5aeb821f7838676811784584534be8a7fc667f09c3fe1bbf7d0aad29324f562086ecb8326829413867 diff --git a/src/lib/crypto/crypto_tests/t_prng.reseedtest b/src/lib/crypto/crypto_tests/t_prng.reseedtest new file mode 100644 index 000000000..5eee0c064 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.reseedtest @@ -0,0 +1,31 @@ +1 +160 + cb 12 70 40 ee fb 76 2e 32 0d f1 0c a7 a9 36 f8 + c8 f3 35 4e 0f 51 18 cd 25 0f 48 5b e4 97 aa 4f + be 7e 93 af dd 15 29 fc 24 4f 0b 9a 9b 1d ad 7f + 32 c8 a6 96 d4 34 aa 83 d2 d7 33 b0 2f aa ba f6 + cf 8c 78 ad 8a 52 e1 48 e4 7c a7 c5 57 49 31 ea + db b7 9b 6b ab 13 f3 12 a5 ec 67 db 1e 83 73 be + ca 59 fc ed 29 8c f3 ef ca fd 81 55 fa 91 3b 31 + da 24 d2 8b c1 a5 c1 3a 9c 50 a6 3c a1 60 31 0f + 62 c7 88 9b 1a e9 9f 3c 0f 04 d0 35 11 45 f0 8b + 84 a2 26 85 67 f1 e6 2b 34 6b ab 9b 3f c1 a1 0e +0 +1 +40 + f4 fc ab 98 45 a0 41 e4 4d 65 9c eb c2 c9 74 a4 + 55 df 6c 78 78 bc db ae e7 63 b8 a7 33 3b d7 50 + f6 33 c4 a0 1d 14 45 04 +0 +0 +40 + 16 80 1d 78 39 4b 3a 27 80 87 08 6c a9 37 59 74 + 60 f8 fc 37 10 4a 8a c4 d6 3e 6a 41 1a e1 5f 69 + 92 12 5a e1 3b 86 f1 5d +0 +0 +40 + a3 c8 78 4a a0 4d ce 3c 2a 8e 34 bf f7 06 dc d7 + 92 13 bd 74 45 72 40 b6 1c d6 55 28 47 1e f4 70 + 74 e4 94 d7 17 a6 7e 3b +20 diff --git a/src/lib/crypto/crypto_tests/t_prng.reseedtest-comments b/src/lib/crypto/crypto_tests/t_prng.reseedtest-comments new file mode 100644 index 000000000..e50e09602 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.reseedtest-comments @@ -0,0 +1,21 @@ +The reseedtest is intended to allow confirmation that if sufficient +entropy is provided then the PRNG will reseed (well initially seed) +itself before the first random data is requested. This test is not +useful to run in an automated manner because the point is to look at +internal function call order. + +To test this, set a break point at krb5int_yarrow_reseed and +krb5_c_random_make_octets and run the test. The reseed function +should be called with a pool of 1 (YARROW_SLOW_POOL) before +krb5_c_random_make_octets is called. + +A slow reseed should require two sources to reach sufficient entropy. +Sources start out sending entropy to fast pool then alternate with +slow pool. So this test does the following: +* Seed source 1 +* Seed source 1 (this time to slow pool) +* Seed source 0 +* Seed source 0 (to slow pool triggering reseed) +* Output some random data + + diff --git a/src/lib/crypto/crypto_tests/t_prng.reseedtest-expected b/src/lib/crypto/crypto_tests/t_prng.reseedtest-expected new file mode 100644 index 000000000..d7b50801e --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.reseedtest-expected @@ -0,0 +1 @@ +fd543f42aded9bd725c9b05682cd0f504c1b33d1 diff --git a/src/lib/crypto/crypto_tests/t_prng.seed b/src/lib/crypto/crypto_tests/t_prng.seed new file mode 100644 index 000000000..79f4f6458 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_prng.seed @@ -0,0 +1,25 @@ +2 +20 + c9 72 2b e4 90 e1 fa 4b da d4 2f 43 0d dd d9 91 + 39 d0 23 c4 +0 +1 +24 + 87 1c 4f d4 4a 8b b8 cf 54 4e eb 9b 1f bb 7a 8e + 9a 7d 8d 62 + ca 41 18 00 +12 +0 +0 +20 +1 +24 + 28 d4 bd d4 81 85 ca 70 d5 f0 e4 a4 f3 45 80 01 + 6a 34 79 69 0e e0 cd 21 +25 +2 +40 + de 7c f0 c5 6a 37 0b 34 f4 0c 3a 19 31 eb 66 f1 + ae 5f c6 a3 64 3f 2e a9 76 e1 87 93 df b6 94 86 + bd 96 57 3f 31 e6 88 8c +1290 diff --git a/src/lib/crypto/crypto_tests/t_shs.c b/src/lib/crypto/crypto_tests/t_shs.c new file mode 100644 index 000000000..adcb0927a --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_shs.c @@ -0,0 +1,135 @@ +/**************************************************************************** +* * +* SHS Test Code * +* * +****************************************************************************/ + +#include +#include +#include +#include "shs.h" + +/* Test the SHS implementation */ + +#ifdef NEW_SHS + +static SHS_LONG shsTestResults[][ 5 ] = { + { 0xA9993E36L, 0x4706816AL, 0xBA3E2571L, 0x7850C26CL, 0x9CD0D89DL, }, + { 0x84983E44L, 0x1C3BD26EL, 0xBAAE4AA1L, 0xF95129E5L, 0xE54670F1L, }, + { 0x34AA973CL, 0xD4C4DAA4L, 0xF61EEB2BL, 0xDBAD2731L, 0x6534016FL, } + }; + +#else + +static SHS_LONG shsTestResults[][ 5 ] = { + { 0x0164B8A9L, 0x14CD2A5EL, 0x74C4F7FFL, 0x082C4D97L, 0xF1EDF880L }, + { 0xD2516EE1L, 0xACFA5BAFL, 0x33DFC1C4L, 0x71E43844L, 0x9EF134C8L }, + { 0x3232AFFAL, 0x48628A26L, 0x653B5AAAL, 0x44541FD9L, 0x0D690603L } + }; +#endif /* NEW_SHS */ + +static int compareSHSresults(shsInfo, shsTestLevel) +SHS_INFO *shsInfo; +int shsTestLevel; +{ + int i, fail = 0; + + /* Compare the returned digest and required values */ + for( i = 0; i < 5; i++ ) + if( shsInfo->digest[ i ] != shsTestResults[ shsTestLevel ][ i ] ) + fail = 1; + if (fail) { + printf("\nExpected: "); + for (i = 0; i < 5; i++) { + printf("%8.8lx ", (unsigned long) shsTestResults[shsTestLevel][i]); + } + printf("\nGot: "); + for (i = 0; i < 5; i++) { + printf("%8.8lx ", (unsigned long) shsInfo->digest[i]); + } + printf("\n"); + return( -1 ); + } + return( 0 ); +} + +int +main() +{ + SHS_INFO shsInfo; + unsigned int i; +#if 0 + time_t secondCount; + SHS_BYTE data[ 200 ]; +#endif + + /* Make sure we've got the endianness set right. If the machine is + big-endian (up to 64 bits) the following value will be signed, + otherwise it will be unsigned. Unfortunately we can't test for odd + things like middle-endianness without knowing the size of the data + types */ + + /* Test SHS against values given in SHS standards document */ + printf( "Running SHS test 1 ... " ); + shsInit( &shsInfo ); + shsUpdate( &shsInfo, ( SHS_BYTE * ) "abc", 3 ); + shsFinal( &shsInfo ); + if( compareSHSresults( &shsInfo, 0 ) == -1 ) + { + putchar( '\n' ); + puts( "SHS test 1 failed" ); + exit( -1 ); + } +#ifdef NEW_SHS + puts( "passed, result= A9993E364706816ABA3E25717850C26C9CD0D89D" ); +#else + puts( "passed, result= 0164B8A914CD2A5E74C4F7FF082C4D97F1EDF880" ); +#endif /* NEW_SHS */ + + printf( "Running SHS test 2 ... " ); + shsInit( &shsInfo ); + shsUpdate( &shsInfo, ( SHS_BYTE * ) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56 ); + shsFinal( &shsInfo ); + if( compareSHSresults( &shsInfo, 1 ) == -1 ) + { + putchar( '\n' ); + puts( "SHS test 2 failed" ); + exit( -1 ); + } +#ifdef NEW_SHS + puts( "passed, result= 84983E441C3BD26EBAAE4AA1F95129E5E54670F1" ); +#else + puts( "passed, result= D2516EE1ACFA5BAF33DFC1C471E438449EF134C8" ); +#endif /* NEW_SHS */ + + printf( "Running SHS test 3 ... " ); + shsInit( &shsInfo ); + for( i = 0; i < 15625; i++ ) + shsUpdate( &shsInfo, ( SHS_BYTE * ) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 64 ); + shsFinal( &shsInfo ); + if( compareSHSresults( &shsInfo, 2 ) == -1 ) + { + putchar( '\n' ); + puts( "SHS test 3 failed" ); + exit( -1 ); + } +#ifdef NEW_SHS + puts( "passed, result= 34AA973CD4C4DAA4F61EEB2BDBAD27316534016F" ); +#else + puts( "passed, result= 3232AFFA48628A26653B5AAA44541FD90D690603" ); +#endif /* NEW_SHS */ + +#if 0 + printf( "\nTesting speed for 100MB data... " ); + shsInit( &shsInfo ); + secondCount = time( NULL ); + for( i = 0; i < 500000U; i++ ) + shsUpdate( &shsInfo, data, 200 ); + secondCount = time( NULL ) - secondCount; + printf( "done. Time = %ld seconds, %ld kbytes/second.\n", \ + secondCount, 100500L / secondCount ); +#endif + + puts( "\nAll SHS tests passed" ); + exit( 0 ); +} diff --git a/src/lib/crypto/crypto_tests/t_shs3.c b/src/lib/crypto/crypto_tests/t_shs3.c new file mode 100644 index 000000000..96b36a76e --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_shs3.c @@ -0,0 +1,592 @@ +/* test shs code */ + +#include +#include +#include +#include "shs.h" + +static void process(void); +static void test1(void); +static void test2(void); +static void test3(void); +static void test4(void); +static void test5(void); +static void test6(void); +static void test7(void); + +/* When run on a little-endian CPU we need to perform byte reversal on an + array of longwords. It is possible to make the code endianness- + independant by fiddling around with data at the byte level, but this + makes for very slow code, so we rely on the user to sort out endianness + at compile time */ + +static void longReverse( SHS_LONG *buffer, int byteCount ) +{ + SHS_LONG value; + static int init = 0; + char *cp; + + switch (init) { + case 0: + init=1; + cp = (char *) &init; + if (*cp == 1) { + init=2; + break; + } + init=1; + /* fall through - MSB */ + case 1: + return; + } + + byteCount /= sizeof( SHS_LONG ); + while( byteCount-- ) { + value = *buffer; + value = ( ( value & 0xFF00FF00L ) >> 8 ) | + ( ( value & 0x00FF00FFL ) << 8 ); + *buffer++ = ( value << 16 ) | ( value >> 16 ); + } +} + +int rc; +int mode; +int Dflag; + +int +main(argc,argv) + char **argv; +{ + char *argp; + + while (--argc > 0) if (*(argp = *++argv)=='-') + while (*++argp) switch(*argp) + { + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + if (mode) goto Usage; + mode = *argp; + break; + case 'D': + if (argc <= 1) goto Usage; + --argc; + Dflag = atoi(*++argv); + break; + case '-': + break; + default: + fprintf (stderr,"Bad switch char <%c>\n", *argp); + Usage: + fprintf(stderr, "Usage: t_shs [-1234567] [-D #]\n"); + exit(1); + } + else goto Usage; + + process(); + exit(rc); +} + +static void process(void) +{ + switch(mode) + { + case '1': + test1(); + break; + case '2': + test2(); + break; + case '3': + test3(); + break; + case '4': + test4(); + break; + case '5': + test5(); + break; + case '6': + test6(); + break; + case '7': + test7(); + break; + default: + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + test7(); + } +} + +#ifndef shsDigest +static unsigned char * +shsDigest(si) + SHS_INFO *si; +{ + longReverse(si->digest, SHS_DIGESTSIZE); + return (unsigned char*) si->digest; +} +#endif + +unsigned char results1[SHS_DIGESTSIZE] = { +0xa9,0x99,0x3e,0x36,0x47,0x06,0x81,0x6a,0xba,0x3e, +0x25,0x71,0x78,0x50,0xc2,0x6c,0x9c,0xd0,0xd8,0x9d}; + +static void test1(void) +{ + SHS_INFO si[1]; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + int i; + + printf("Running SHS test 1 ...\n"); + shsInit(si); + shsUpdate(si, (SHS_BYTE *) "abc", 3); + shsFinal(si); + memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results1, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 1 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results1[i]); + } + printf("\n"); +} + +unsigned char results2[SHS_DIGESTSIZE] = { +0x84,0x98,0x3e,0x44,0x1c,0x3b,0xd2,0x6e,0xba,0xae, +0x4a,0xa1,0xf9,0x51,0x29,0xe5,0xe5,0x46,0x70,0xf1}; + +static void test2(void) +{ + SHS_INFO si[1]; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + int i; + + printf("Running SHS test 2 ...\n"); + shsInit(si); + shsUpdate(si, + (SHS_BYTE *) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + 56); + shsFinal(si); + memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results2, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 2 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results2[i]); + } + printf("\n"); +} + +unsigned char results3[SHS_DIGESTSIZE] = { +0x34,0xaa,0x97,0x3c,0xd4,0xc4,0xda,0xa4,0xf6,0x1e, +0xeb,0x2b,0xdb,0xad,0x27,0x31,0x65,0x34,0x01,0x6f}; + +static void test3(void) +{ + SHS_INFO si[1]; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + int i; + + printf("Running SHS test 3 ...\n"); + shsInit(si); + for (i = 0; i < 15625; ++i) + shsUpdate(si, +(SHS_BYTE *) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + 64); + shsFinal(si); + memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results3, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 3 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results3[i]); + } + printf("\n"); +} + +unsigned char randdata[] = { +0xfe,0x28,0x79,0x25,0xf5,0x03,0xf9,0x1c,0xcd,0x70,0x7b,0xb0,0x42,0x02,0xb8,0x2f, +0xf3,0x63,0xa2,0x79,0x8e,0x9b,0x33,0xd7,0x2b,0xc4,0xb4,0xd2,0xcb,0x61,0xec,0xbb, +0x94,0xe1,0x8f,0x53,0x80,0x55,0xd9,0x90,0xb2,0x03,0x58,0xfa,0xa6,0xe5,0x18,0x57, +0x68,0x04,0x24,0x98,0x41,0x7e,0x84,0xeb,0xc1,0x39,0xbc,0x1d,0xf7,0x4e,0x92,0x72, +0x1a,0x5b,0xb6,0x99,0x43,0xa5,0x0a,0x45,0x73,0x55,0xfd,0x57,0x83,0x45,0x36,0x5c, +0xfd,0x39,0x08,0x6e,0xe2,0x01,0x9a,0x8c,0x4e,0x39,0xd2,0x0d,0x5f,0x0e,0x35,0x15, +0xb9,0xac,0x5f,0xa1,0x8a,0xe6,0xdd,0x6e,0x68,0x9d,0xf6,0x29,0x95,0xf6,0x7d,0x7b, +0xd9,0x5e,0xf4,0x67,0x25,0xbd,0xee,0xed,0x53,0x60,0xb0,0x47,0xdf,0xef,0xf4,0x41, +0xbd,0x45,0xcf,0x5c,0x93,0x41,0x87,0x97,0x82,0x39,0x20,0x66,0xb4,0xda,0xcb,0x66, +0x93,0x02,0x2e,0x7f,0x94,0x4c,0xc7,0x3b,0x2c,0xcf,0xf6,0x99,0x6f,0x13,0xf1,0xc5, +0x28,0x2b,0xa6,0x6c,0x39,0x26,0x7f,0x76,0x24,0x4a,0x6e,0x01,0x40,0x63,0xf8,0x00, +0x06,0x23,0x5a,0xaa,0xa6,0x2f,0xd1,0x37,0xc7,0xcc,0x76,0xe9,0x54,0x1e,0x57,0x73, +0xf5,0x33,0xaa,0x96,0xbe,0x35,0xcd,0x1d,0xd5,0x7d,0xac,0x50,0xd5,0xf8,0x47,0x2d, +0xd6,0x93,0x5f,0x6e,0x38,0xd3,0xac,0xd0,0x7e,0xad,0x9e,0xf8,0x87,0x95,0x63,0x15, +0x65,0xa3,0xd4,0xb3,0x9a,0x6c,0xac,0xcd,0x2a,0x54,0x83,0x13,0xc4,0xb4,0x94,0xfa, +0x76,0x87,0xc5,0x8b,0x4a,0x10,0x92,0x05,0xd1,0x0e,0x97,0xfd,0xc8,0xfb,0xc5,0xdc, +0x21,0x4c,0xc8,0x77,0x5c,0xed,0x32,0x22,0x77,0xc1,0x38,0x30,0xd7,0x8e,0x2a,0x70, +0x72,0x67,0x13,0xe4,0xb7,0x18,0xd4,0x76,0xdd,0x32,0x12,0xf4,0x5d,0xc9,0xec,0xc1, +0x2c,0x8a,0xfe,0x08,0x6c,0xea,0xf6,0xab,0x5a,0x0e,0x8e,0x81,0x1d,0xc8,0x5a,0x4b, +0xed,0xb9,0x7f,0x4b,0x67,0xe3,0x65,0x46,0xc9,0xf2,0xab,0x37,0x0a,0x98,0x67,0x5b, +0xb1,0x3b,0x02,0x91,0x38,0x71,0xea,0x62,0x88,0xae,0xb6,0xdb,0xfc,0x55,0x79,0x33, +0x69,0x95,0x51,0xb6,0xe1,0x3b,0xab,0x22,0x68,0x54,0xf9,0x89,0x9c,0x94,0xe0,0xe3, +0xd3,0x48,0x5c,0xe9,0x78,0x5b,0xb3,0x4b,0xba,0xd8,0x48,0xd8,0xaf,0x91,0x4e,0x23, +0x38,0x23,0x23,0x6c,0xdf,0x2e,0xf0,0xff,0xac,0x1d,0x2d,0x27,0x10,0x45,0xa3,0x2d, +0x8b,0x00,0xcd,0xe2,0xfc,0xb7,0xdb,0x52,0x13,0xb7,0x66,0x79,0xd9,0xd8,0x29,0x0e, +0x32,0xbd,0x52,0x6b,0x75,0x71,0x08,0x83,0x1b,0x67,0x28,0x93,0x97,0x97,0x32,0xff, +0x8b,0xd3,0x98,0xa3,0xce,0x2b,0x88,0x37,0x1c,0xcc,0xa0,0xd1,0x19,0x9b,0xe6,0x11, +0xfc,0xc0,0x3c,0x4e,0xe1,0x35,0x49,0x29,0x19,0xcf,0x1d,0xe1,0x60,0x74,0xc0,0xe9, +0xf7,0xb4,0x99,0xa0,0x23,0x50,0x51,0x78,0xcf,0xc0,0xe5,0xc2,0x1c,0x16,0xd2,0x24, +0x5a,0x63,0x54,0x83,0xaa,0x74,0x3d,0x41,0x0d,0x52,0xee,0xfe,0x0f,0x4d,0x13,0xe1, +0x27,0x00,0xc4,0xf3,0x2b,0x55,0xe0,0x9c,0x81,0xe0,0xfc,0xc2,0x13,0xd4,0x39,0x09 +}; + +unsigned char results4[SHS_DIGESTSIZE] = { +0x13,0x62,0xfc,0x87,0x68,0x33,0xd5,0x1d,0x2f,0x0c, +0x73,0xe3,0xfb,0x87,0x6a,0x6b,0xc3,0x25,0x54,0xfc}; + +static void test4(void) +{ + SHS_INFO si[1]; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + int i; + + printf("Running SHS test 4 ...\n"); + shsInit(si); + shsUpdate(si, randdata, 19); + shsFinal(si); + memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results4, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 4 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results4[i]); + } + printf("\n"); +} + +unsigned char results5[SHS_DIGESTSIZE] = { +0x19,0x4d,0xf6,0xeb,0x8e,0x02,0x6d,0x37,0x58,0x64, +0xe5,0x95,0x19,0x2a,0xdd,0x1c,0xc4,0x3c,0x24,0x86}; + +static void test5(void) +{ + SHS_INFO si[1]; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + int i; + + printf("Running SHS test 5 ...\n"); + shsInit(si); + shsUpdate(si, randdata, 19); + shsUpdate(si, randdata+32, 15); + shsFinal(si); + memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results5, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 5 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results5[i]); + } + printf("\n"); +} + +unsigned char results6[SHS_DIGESTSIZE] = { +0x4e,0x16,0x57,0x9d,0x4b,0x48,0xa9,0x1c,0x88,0x72, +0x83,0xdb,0x88,0xd1,0xea,0x3a,0x45,0xdf,0xa1,0x10}; + +static void test6(void) +{ + struct { + long pad1; + SHS_INFO si1; + long pad2; + SHS_INFO si2; + long pad3; + } sdata; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + unsigned int i, j; + + printf("Running SHS test 6 ...\n"); + sdata.pad1 = 0x12345678; + sdata.pad2 = 0x87654321; + sdata.pad3 = 0x78563412; + shsInit((&sdata.si2)); +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #20 %#lx\n", +sdata.pad2); +sdata.pad2 = 0x87654321; +} +if (sdata.pad3 != 0x78563412) { +printf ("Overrun #21 %#lx\n", +sdata.pad3); +sdata.pad3 = 0x78563412; +} + for (i = 0; i < 400; ++i) + { + shsInit(&sdata.si1); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #22 %#lx at %d\n", +sdata.pad1, i); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #23 %#lx at %d\n", +sdata.pad2, i); +sdata.pad2 = 0x87654321; +} + shsUpdate(&sdata.si1, (randdata+sizeof(randdata))-i, i); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #24 %#lx at %d\n", +sdata.pad1, i); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #25 %#lx at %d\n", +sdata.pad2, i); +sdata.pad2 = 0x87654321; +} + shsFinal(&sdata.si1); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #26 %#lx at %d\n", +sdata.pad1, i); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #27 %#lx at %d\n", +sdata.pad2, i); +sdata.pad2 = 0x87654321; +} + memcpy(digest, shsDigest(&sdata.si1), SHS_DIGESTSIZE); + if (Dflag & 1) + { + printf ("%d: ", i); + for (j = 0; j < SHS_DIGESTSIZE; ++j) + printf("%02x",digest[j]); + printf("\n"); + } + shsUpdate((&sdata.si2), digest, SHS_DIGESTSIZE); +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #28 %#lx at %d\n", +sdata.pad2, i); +sdata.pad2 = 0x87654321; +} +if (sdata.pad3 != 0x78563412) { +printf ("Overrun #29 %#lx at %d\n", +sdata.pad3, i); +sdata.pad3 = 0x78563412; +} + if (Dflag & 2) + printf ("%d: %08lx%08lx%08lx%08lx%08lx\n", + i, + (unsigned long) sdata.si2.digest[0], + (unsigned long) sdata.si2.digest[1], + (unsigned long) sdata.si2.digest[2], + (unsigned long) sdata.si2.digest[3], + (unsigned long) sdata.si2.digest[4]); + } + shsFinal((&sdata.si2)); +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #30 %#lx\n", +sdata.pad2); +sdata.pad2 = 0x87654321; +} +if (sdata.pad3 != 0x78563412) { +printf ("Overrun #31 %#lx\n", +sdata.pad3); +sdata.pad3 = 0x78563412; +} + memcpy(digest, shsDigest((&sdata.si2)), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results6, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 6 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results6[i]); + } + printf("\n"); +} + +unsigned char results7[SHS_DIGESTSIZE] = { +0x89,0x41,0x65,0xce,0x76,0xc1,0xd1,0xd1,0xc3,0x6f, +0xab,0x92,0x79,0x30,0x01,0x71,0x63,0x1f,0x74,0xfe}; + +unsigned int jfsize[] = {0,1,31,32, + 33,55,56,63, + 64,65,71,72, + 73,95,96,97, + 119,120,123,127}; +unsigned int kfsize[] = {0,1,31,32,33,55,56,63}; + +static void test7(void) +{ + struct { + long pad1; + SHS_INFO si1; + long pad2; + SHS_INFO si2; + long pad3; + } sdata; + unsigned char digest[SHS_DIGESTSIZE]; + int failed; + unsigned int i, j, k, l; + + printf("Running SHS test 7 ...\n"); + sdata.pad1 = 0x12345678; + sdata.pad2 = 0x87654321; + sdata.pad3 = 0x78563412; + shsInit((&sdata.si2)); + for (i = 1; i <= 128; ++i) + for (j = 0; j < 20; ++j) + for (k = 0; k < 8; ++k) + { + shsInit(&sdata.si1); + shsUpdate(&sdata.si1, (randdata+80+j), i); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #1 %#lx at %d,%d,%d\n", +sdata.pad1, i,j,k); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #2 %#lx at %d,%d,%d\n", +sdata.pad2, i,j,k); +sdata.pad2 = 0x87654321; +} + shsUpdate(&sdata.si1, randdata+i, jfsize[j]); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #3 %#lx at %d,%d,%d\n", +sdata.pad1, i,j,k); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #4 %#lx at %d,%d,%d\n", +sdata.pad2, i,j,k); +sdata.pad2 = 0x87654321; +} + if (k) shsUpdate(&sdata.si1, randdata+(i^j), kfsize[k]); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #5 %#lx at %d,%d,%d\n", +sdata.pad1, i,j,k); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #6 %#lx at %d,%d,%d\n", +sdata.pad2, i,j,k); +sdata.pad2 = 0x87654321; +} + shsFinal(&sdata.si1); +if (sdata.pad1 != 0x12345678) { +printf ("Overrun #7 %#lx at %d,%d,%d\n", +sdata.pad1, i,j,k); +sdata.pad1 = 0x12345678; +} +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #8 %#lx at %d,%d,%d\n", +sdata.pad2, i,j,k); +sdata.pad2 = 0x87654321; +} + memcpy(digest, shsDigest(&sdata.si1), SHS_DIGESTSIZE); + if (Dflag & 1) + { + printf ("%d,%d,%d: ", i, j, k); + for (l = 0; l < SHS_DIGESTSIZE; ++l) + printf("%02x",digest[l]); + printf("\n"); + } + shsUpdate((&sdata.si2), digest, SHS_DIGESTSIZE); +if (sdata.pad2 != 0x87654321) { +printf ("Overrun #9 %#lx at %d,%d,%d\n", +sdata.pad2, i,j,k); +sdata.pad2 = 0x87654321; +} +if (sdata.pad3 != 0x78563412) { +printf ("Overrun #10 %#lx at %d,%d,%d\n", +sdata.pad3, i,j,k); +sdata.pad3 = 0x78563412; +} + if (Dflag & 2) + printf ("%d,%d,%d: %08lx%08lx%08lx%08lx%08lx\n", + i,j,k, + (unsigned long) sdata.si2.digest[0], + (unsigned long) sdata.si2.digest[1], + (unsigned long) sdata.si2.digest[2], + (unsigned long) sdata.si2.digest[3], + (unsigned long) sdata.si2.digest[4]); + } + shsFinal((&sdata.si2)); + memcpy(digest, shsDigest((&sdata.si2)), SHS_DIGESTSIZE); + if ((failed = memcmp(digest, results7, SHS_DIGESTSIZE)) != 0) + { + fprintf(stderr,"SHS test 7 failed!\n"); + rc = 1; + } + printf ("%s, results = ", failed ? "Failed" : "Passed"); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",digest[i]); + if (failed) + { + printf ("\n, expected "); + for (i = 0; i < SHS_DIGESTSIZE; ++i) + printf("%02x",results7[i]); + } + printf("\n"); +} diff --git a/src/lib/crypto/crypto_tests/t_verify.c b/src/lib/crypto/crypto_tests/t_verify.c new file mode 100644 index 000000000..a6ad07cb8 --- /dev/null +++ b/src/lib/crypto/crypto_tests/t_verify.c @@ -0,0 +1,418 @@ +/* + * lib/crypto/des/verify.c + * + * Copyright 1988, 1990 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Program to test the correctness of the DES library + * implementation. + * + * exit returns 0 ==> success + * -1 ==> error + */ + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include +#include "com_err.h" + +static void do_encrypt(unsigned char *, unsigned char *); +static void do_decrypt(unsigned char *, unsigned char *); + +char *progname; +int nflag = 2; +int vflag; +int mflag; +int zflag; +int pid; +int mit_des_debug; + +unsigned char cipher_text[64]; +unsigned char clear_text[64] = "Now is the time for all " ; +unsigned char clear_text2[64] = "7654321 Now is the time for "; +unsigned char clear_text3[64] = {2,0,0,0, 1,0,0,0}; +unsigned char output[64]; +unsigned char zero_text[8] = {0x0,0,0,0,0,0,0,0}; +unsigned char msb_text[8] = {0x0,0,0,0, 0,0,0,0x40}; /* to ANSI MSB */ +unsigned char *input; + +/* 0x0123456789abcdef */ +unsigned char default_key[8] = { + 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef +}; +unsigned char key2[8] = { 0x08,0x19,0x2a,0x3b,0x4c,0x5d,0x6e,0x7f }; +unsigned char key3[8] = { 0x80,1,1,1,1,1,1,1 }; +mit_des_cblock s_key; +unsigned char default_ivec[8] = { + 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef +}; +unsigned char *ivec; +unsigned char zero_key[8] = {1,1,1,1,1,1,1,1}; /* just parity bits */ + +unsigned char cipher1[8] = { + 0x25,0xdd,0xac,0x3e,0x96,0x17,0x64,0x67 +}; +unsigned char cipher2[8] = { + 0x3f,0xa4,0x0e,0x8a,0x98,0x4d,0x48,0x15 +}; +unsigned char cipher3[64] = { + 0xe5,0xc7,0xcd,0xde,0x87,0x2b,0xf2,0x7c, + 0x43,0xe9,0x34,0x00,0x8c,0x38,0x9c,0x0f, + 0x68,0x37,0x88,0x49,0x9a,0x7c,0x05,0xf6 +}; +unsigned char checksum[8] = { + 0x58,0xd2,0xe7,0x7e,0x86,0x06,0x27,0x33 +}; + +unsigned char zresult[8] = { + 0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7 +}; + +unsigned char mresult[8] = { + 0xa3, 0x80, 0xe0, 0x2a, 0x6b, 0xe5, 0x46, 0x96 +}; + + +/* + * Can also add : + * plaintext = 0, key = 0, cipher = 0x8ca64de9c1b123a7 (or is it a 1?) + */ + +mit_des_key_schedule sched; + +int +main(argc,argv) + int argc; + char *argv[]; +{ + /* Local Declarations */ + size_t in_length; + int retval; + int i, j; + +#ifdef WINDOWS + /* Set screen window buffer to infinite size -- MS default is tiny. */ + _wsetscreenbuf (fileno (stdout), _WINBUFINF); +#endif + progname=argv[0]; /* salt away invoking program */ + + while (--argc > 0 && (*++argv)[0] == '-') + for (i=1; argv[0][i] != '\0'; i++) { + switch (argv[0][i]) { + + /* debug flag */ + case 'd': + mit_des_debug=3; + continue; + + case 'z': + zflag = 1; + continue; + + case 'm': + mflag = 1; + continue; + + default: + printf("%s: illegal flag \"%c\" ", + progname,argv[0][i]); + exit(1); + } + }; + + if (argc) { + fprintf(stderr, "Usage: %s [-dmz]\n", progname); + exit(1); + } + + /* do some initialisation */ + + /* use known input and key */ + + /* ECB zero text zero key */ + if (zflag) { + input = zero_text; + mit_des_key_sched(zero_key, sched); + printf("plaintext = key = 0, cipher = 0x8ca64de9c1b123a7\n"); + do_encrypt(input,cipher_text); + printf("\tcipher = (low to high bytes)\n\t\t"); + for (j = 0; j<=7; j++) + printf("%02x ",cipher_text[j]); + printf("\n"); + do_decrypt(output,cipher_text); + if ( memcmp((char *)cipher_text, (char *)zresult, 8) ) { + printf("verify: error in zero key test\n"); + exit(-1); + } + + exit(0); + } + + if (mflag) { + input = msb_text; + mit_des_key_sched(key3, sched); + printf("plaintext = 0x00 00 00 00 00 00 00 40, "); + printf("key = 0x80 01 01 01 01 01 01 01\n"); + printf(" cipher = 0xa380e02a6be54696\n"); + do_encrypt(input,cipher_text); + printf("\tcipher = (low to high bytes)\n\t\t"); + for (j = 0; j<=7; j++) { + printf("%02x ",cipher_text[j]); + } + printf("\n"); + do_decrypt(output,cipher_text); + if ( memcmp((char *)cipher_text, (char *)mresult, 8) ) { + printf("verify: error in msb test\n"); + exit(-1); + } + exit(0); + } + + /* ECB mode Davies and Price */ + { + input = zero_text; + mit_des_key_sched(key2, sched); + printf("Examples per FIPS publication 81, keys ivs and cipher\n"); + printf("in hex. These are the correct answers, see below for\n"); + printf("the actual answers.\n\n"); + printf("Examples per Davies and Price.\n\n"); + printf("EXAMPLE ECB\tkey = 08192a3b4c5d6e7f\n"); + printf("\tclear = 0\n"); + printf("\tcipher = 25 dd ac 3e 96 17 64 67\n"); + printf("ACTUAL ECB\n"); + printf("\tclear \"%s\"\n", input); + do_encrypt(input,cipher_text); + printf("\tcipher = (low to high bytes)\n\t\t"); + for (j = 0; j<=7; j++) + printf("%02x ",cipher_text[j]); + printf("\n\n"); + do_decrypt(output,cipher_text); + if ( memcmp((char *)cipher_text, (char *)cipher1, 8) ) { + printf("verify: error in ECB encryption\n"); + exit(-1); + } + else + printf("verify: ECB encryption is correct\n\n"); + } + + /* ECB mode */ + { + mit_des_key_sched(default_key, sched); + input = clear_text; + ivec = default_ivec; + printf("EXAMPLE ECB\tkey = 0123456789abcdef\n"); + printf("\tclear = \"Now is the time for all \"\n"); + printf("\tcipher = 3f a4 0e 8a 98 4d 48 15 ...\n"); + printf("ACTUAL ECB\n\tclear \"%s\"",input); + do_encrypt(input,cipher_text); + printf("\n\tcipher = (low to high bytes)\n\t\t"); + for (j = 0; j<=7; j++) { + printf("%02x ",cipher_text[j]); + } + printf("\n\n"); + do_decrypt(output,cipher_text); + if ( memcmp((char *)cipher_text, (char *)cipher2, 8) ) { + printf("verify: error in ECB encryption\n"); + exit(-1); + } + else + printf("verify: ECB encryption is correct\n\n"); + } + + /* CBC mode */ + printf("EXAMPLE CBC\tkey = 0123456789abcdef"); + printf("\tiv = 1234567890abcdef\n"); + printf("\tclear = \"Now is the time for all \"\n"); + printf("\tcipher =\te5 c7 cd de 87 2b f2 7c\n"); + printf("\t\t\t43 e9 34 00 8c 38 9c 0f\n"); + printf("\t\t\t68 37 88 49 9a 7c 05 f6\n"); + + printf("ACTUAL CBC\n\tclear \"%s\"\n",input); + in_length = strlen((char *)input); + if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) input, + (mit_des_cblock *) cipher_text, + (size_t) in_length, + sched, + ivec, + MIT_DES_ENCRYPT))) { + com_err("des verify", retval, "can't encrypt"); + exit(-1); + } + printf("\tciphertext = (low to high bytes)\n"); + for (i = 0; i <= 2; i++) { + printf("\t\t"); + for (j = 0; j <= 7; j++) { + printf("%02x ",cipher_text[i*8+j]); + } + printf("\n"); + } + if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) cipher_text, + (mit_des_cblock *) clear_text, + (size_t) in_length, + sched, + ivec, + MIT_DES_DECRYPT))) { + com_err("des verify", retval, "can't decrypt"); + exit(-1); + } + printf("\tdecrypted clear_text = \"%s\"\n",clear_text); + + if ( memcmp((char *)cipher_text, (char *)cipher3, in_length) ) { + printf("verify: error in CBC encryption\n"); + exit(-1); + } + else + printf("verify: CBC encryption is correct\n\n"); + + printf("EXAMPLE CBC checksum"); + printf("\tkey = 0123456789abcdef\tiv = 1234567890abcdef\n"); + printf("\tclear =\t\t\"7654321 Now is the time for \"\n"); + printf("\tchecksum\t58 d2 e7 7e 86 06 27 33, "); + printf("or some part thereof\n"); + input = clear_text2; + mit_des_cbc_cksum(input,cipher_text, strlen((char *)input), + sched,ivec); + printf("ACTUAL CBC checksum\n"); + printf("\t\tencrypted cksum = (low to high bytes)\n\t\t"); + for (j = 0; j<=7; j++) + printf("%02x ",cipher_text[j]); + printf("\n\n"); + if ( memcmp((char *)cipher_text, (char *)checksum, 8) ) { + printf("verify: error in CBC cheksum\n"); + exit(-1); + } + else + printf("verify: CBC checksum is correct\n\n"); + + exit(0); +} + +#if 0 +void +flip(array) + char *array; +{ + register int old,new,i,j; + /* flips the bit order within each byte from 0 lsb to 0 msb */ + for (i = 0; i<=7; i++) { + old = *array; + new = 0; + for (j = 0; j<=7; j++) { + if (old & 01) + new = new | 01; + if (j < 7) { + old = old >> 1; + new = new << 1; + } + } + *array = new; + array++; + } +} +#endif + +static void +do_encrypt(in,out) + unsigned char *in; + unsigned char *out; +{ + int i, j; + for (i =1; i<=nflag; i++) { + mit_des_cbc_encrypt((const mit_des_cblock *)in, + (mit_des_cblock *)out, + 8, + sched, + zero_text, + MIT_DES_ENCRYPT); + if (mit_des_debug) { + printf("\nclear %s\n",in); + for (j = 0; j<=7; j++) + printf("%02X ",in[j] & 0xff); + printf("\tcipher "); + for (j = 0; j<=7; j++) + printf("%02X ",out[j] & 0xff); + } + } +} + +static void +do_decrypt(in,out) + unsigned char *out; + unsigned char *in; + /* try to invert it */ +{ + int i, j; + for (i =1; i<=nflag; i++) { + mit_des_cbc_encrypt((const mit_des_cblock *)out, + (mit_des_cblock *)in, + 8, + sched, + zero_text, + MIT_DES_DECRYPT); + if (mit_des_debug) { + printf("clear %s\n",in); + for (j = 0; j<=7; j++) + printf("%02X ",in[j] & 0xff); + printf("\tcipher "); + for (j = 0; j<=7; j++) + printf("%02X ",out[j] & 0xff); + } + } +} + +/* + * Fake out the DES library, for the purposes of testing. + */ + +int +mit_des_is_weak_key(key) + mit_des_cblock key; +{ + return 0; /* fake it out for testing */ +} diff --git a/src/lib/crypto/crypto_tests/test/Readme.txt b/src/lib/crypto/crypto_tests/test/Readme.txt new file mode 100644 index 000000000..69dbb5b9c --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/Readme.txt @@ -0,0 +1,22 @@ +README + +Algorithm: Rijndael +Submitter: Joan Daemen and Vincent Rijmen + +Test values: Known Answer Tests and Monte Carlo Tests +----------------------------------------------------------- + +This directory contains the following files: + +Readme.txt: This file. + +cbc_d_m.txt: Test values for the CBC decryption MCT. +cbc_e_m.txt: Test values for the CBC encryption MCT. +ecb_d_m.txt: Test values for the ECB decryption MCT. +ecb_e_m.txt: Test values for the ECB encryption MCT. +ecb_vk.txt: Test values for the Variable Key KAT. +ecb_vt.txt: Test values for the Variable Text KAT. +ecb_iv.txt: Test values for the Intermediate Values KAT. +ecb_iv.readme: Detailed information about the Intermediate Values KAT. +ecb_tbl.txt: Test values for the Table KAT. + diff --git a/src/lib/crypto/crypto_tests/test/cbc_d_m.txt b/src/lib/crypto/crypto_tests/test/cbc_d_m.txt new file mode 100644 index 000000000..e216f3b87 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/cbc_d_m.txt @@ -0,0 +1,7224 @@ + +========================= + +FILENAME: "cbc_d_m.txt" + +Cipher Block Chaining (CBC) Mode - DECRYPTION +Monte Carlo Test + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + +I=0 +KEY=00000000000000000000000000000000 +IV=00000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=FACA37E0B0C85373DF706E73F7C9AF86 + +I=1 +KEY=FACA37E0B0C85373DF706E73F7C9AF86 +IV=52D0C29FF8793A519BD6A8289FC80E6A +CT=FACA37E0B0C85373DF706E73F7C9AF86 +PT=F5372F9735C5685F1DA362AF6ECB2940 + +I=2 +KEY=0FFD1877850D3B2CC2D30CDC990286C6 +IV=DD74BB1AC6F0F866C7992C61F59D5594 +CT=F5372F9735C5685F1DA362AF6ECB2940 +PT=5496A4C29C7670F61B5D5DF6181F5947 + +I=3 +KEY=5B6BBCB5197B4BDAD98E512A811DDF81 +IV=3795C88134F7C011433397D1443FEB3A +CT=5496A4C29C7670F61B5D5DF6181F5947 +PT=940CC5A2AF4F1F8D1862B47BCF63E4CA + +I=4 +KEY=CF677917B6345457C1ECE5514E7E3B4B +IV=0FC1413900225B47AF9E139E1650EA23 +CT=940CC5A2AF4F1F8D1862B47BCF63E4CA +PT=08832415D97820DE305A58A9AD111A9E + +I=5 +KEY=C7E45D026F4C7489F1B6BDF8E36F21D5 +IV=3032F64674FA243D61DF8C16313D81F3 +CT=08832415D97820DE305A58A9AD111A9E +PT=BD4089775FD1BDB0A6C4F36D1DDAA93E + +I=6 +KEY=7AA4D475309DC93957724E95FEB588EB +IV=47D7F440B43888F173AE5A492F1A99F8 +CT=BD4089775FD1BDB0A6C4F36D1DDAA93E +PT=AB9955F74612859267D61FEA85A75ADC + +I=7 +KEY=D13D8182768F4CAB30A4517F7B12D237 +IV=6D9E57242195D27771D1C7A748378AB0 +CT=AB9955F74612859267D61FEA85A75ADC +PT=168F213FB678D8A46D0E55EFD1C49BB3 + +I=8 +KEY=C7B2A0BDC0F7940F5DAA0490AAD64984 +IV=1B98968FB5ABD95930525C1257DEB364 +CT=168F213FB678D8A46D0E55EFD1C49BB3 +PT=3C4CEECFF9560501C5D8C901D87C8E7B + +I=9 +KEY=FBFE4E7239A1910E9872CD9172AAC7FF +IV=35EB7B6D3F63AAE927C5346C9C2CB91D +CT=3C4CEECFF9560501C5D8C901D87C8E7B +PT=9D206BE0CC60296BF3A486A8C69778EF + +I=10 +KEY=66DE2592F5C1B8656BD64B39B43DBF10 +IV=226646B36D8E9B9279F94378CCBF8FBA +CT=9D206BE0CC60296BF3A486A8C69778EF +PT=9DA7B8094BD0F0BEA26848C84B8E083C + +I=11 +KEY=FB799D9BBE1148DBC9BE03F1FFB3B72C +IV=3E3A2B0E1C70A19BCD7222708AA94F26 +CT=9DA7B8094BD0F0BEA26848C84B8E083C +PT=6A93B2F318C14C2D3E58455B86A4F5D7 + +I=12 +KEY=91EA2F68A6D004F6F7E646AA791742FB +IV=1F256942B3CD691858A20664BB24545E +CT=6A93B2F318C14C2D3E58455B86A4F5D7 +PT=4A19AC6C6FEB654D3675A2BE32E5A820 + +I=13 +KEY=DBF38304C93B61BBC193E4144BF2EADB +IV=631F2EDE05C1C950BCE67DF53BA53ED6 +CT=4A19AC6C6FEB654D3675A2BE32E5A820 +PT=799EAB8E9C864A13490FD6B089F764C5 + +I=14 +KEY=A26D288A55BD2BA8889C32A4C2058E1E +IV=F6AD064E0DBF4AF4AA5165E1FE0E86FA +CT=799EAB8E9C864A13490FD6B089F764C5 +PT=2FA3F38CA1216C6D911C1779F333413E + +I=15 +KEY=8DCEDB06F49C47C5198025DD3136CF20 +IV=DA039AC5F4EDCD84472B23CFA1252EC3 +CT=2FA3F38CA1216C6D911C1779F333413E +PT=2FC703AD6A7DAF8B0BDDD8586C1D67D0 + +I=16 +KEY=A209D8AB9EE1E84E125DFD855D2BA8F0 +IV=341B5FDA8AB434461A7B7A87EF0C530C +CT=2FC703AD6A7DAF8B0BDDD8586C1D67D0 +PT=54723CABFBE32DEEDFEBF4292A5710FA + +I=17 +KEY=F67BE4006502C5A0CDB609AC777CB80A +IV=2C42AD577B0BE057555C3FCB6FC0089E +CT=54723CABFBE32DEEDFEBF4292A5710FA +PT=6B1E2A8C1A9CBB95D1B34AAFE15A78D3 + +I=18 +KEY=9D65CE8C7F9E7E351C0543039626C0D9 +IV=E5E06583A834BF16118ED5FA401A2D6F +CT=6B1E2A8C1A9CBB95D1B34AAFE15A78D3 +PT=F4E57BFAB65375B3AD49CD78814F0C16 + +I=19 +KEY=6980B576C9CD0B86B14C8E7B1769CCCF +IV=71E59389FF6F992225B32960593F9362 +CT=F4E57BFAB65375B3AD49CD78814F0C16 +PT=90A31B5934FCF6822526C973114BD953 + +I=20 +KEY=F923AE2FFD31FD04946A47080622159C +IV=2A4B31492B9BAEC402C255978BB96D40 +CT=90A31B5934FCF6822526C973114BD953 +PT=61F88BA8D438A0FD23F0101465C7FD4E + +I=21 +KEY=98DB258729095DF9B79A571C63E5E8D2 +IV=607640CEA12DCF7F188B2B65C7F4153D +CT=61F88BA8D438A0FD23F0101465C7FD4E +PT=F62D206DF53F41CA898F3A8EB6A843FF + +I=22 +KEY=6EF605EADC361C333E156D92D54DAB2D +IV=D69C32E12303361B465BE9A484BCA723 +CT=F62D206DF53F41CA898F3A8EB6A843FF +PT=364BC3F9FDA5FB1AEEA7691550A58320 + +I=23 +KEY=58BDC6132193E729D0B2048785E8280D +IV=C207B8347B8DB8BC6845827BB6986B0E +CT=364BC3F9FDA5FB1AEEA7691550A58320 +PT=DAA6386A073CD1653E9A9DB0A97970BA + +I=24 +KEY=821BFE7926AF364CEE2899372C9158B7 +IV=6C5D2B186393280253D6922A8421C3A9 +CT=DAA6386A073CD1653E9A9DB0A97970BA +PT=AAF74F0E0A0141A811853AE8B120BC00 + +I=25 +KEY=28ECB1772CAE77E4FFADA3DF9DB1E4B7 +IV=3CB62EF0E649027DDDB76206D0F4D355 +CT=AAF74F0E0A0141A811853AE8B120BC00 +PT=22A0F9611447C1A85F397DD79E3206F9 + +I=26 +KEY=0A4C481638E9B64CA094DE080383E24E +IV=C4320FA90686AE0F9E979CBF1391F6D6 +CT=22A0F9611447C1A85F397DD79E3206F9 +PT=1871ABDEAA7E057E76D41ED9191FAC39 + +I=27 +KEY=123DE3C89297B332D640C0D11A9C4E77 +IV=FBFD18AADF7C5E8E96EB976A535BF312 +CT=1871ABDEAA7E057E76D41ED9191FAC39 +PT=BF52994F41B1DEF78C6A057642C52D89 + +I=28 +KEY=AD6F7A87D3266DC55A2AC5A7585963FE +IV=C195141578ADF4C92113C8A9A63FF072 +CT=BF52994F41B1DEF78C6A057642C52D89 +PT=3EAFB00E3B4A0E6DF74743A7EDAD0FE4 + +I=29 +KEY=93C0CA89E86C63A8AD6D8600B5F46C1A +IV=D1C4E98C4A9AC79B7CCBC052ACF78913 +CT=3EAFB00E3B4A0E6DF74743A7EDAD0FE4 +PT=4393544AB2387A93496D683C2B8970C7 + +I=30 +KEY=D0539EC35A54193BE400EE3C9E7D1CDD +IV=80517C6341DAF4DCBCCAE452F3040147 +CT=4393544AB2387A93496D683C2B8970C7 +PT=51DAC594293708A918E9EFC04F7F2F1C + +I=31 +KEY=81895B5773631192FCE901FCD10233C1 +IV=69DE50406B4E3E8A94C1367E1E3D5464 +CT=51DAC594293708A918E9EFC04F7F2F1C +PT=035B64F06C8166000C82BF15CC88446D + +I=32 +KEY=82D23FA71FE27792F06BBEE91D8A77AC +IV=8EA2E38145BBD79881B7EB31B8818A21 +CT=035B64F06C8166000C82BF15CC88446D +PT=F3EFFA770A21741551F309E1967CC2E4 + +I=33 +KEY=713DC5D015C30387A198B7088BF6B548 +IV=0DCAA309668E11509828152553FF2306 +CT=F3EFFA770A21741551F309E1967CC2E4 +PT=62BA0548E7AD136BEB4E38AECD7942D9 + +I=34 +KEY=1387C098F26E10EC4AD68FA6468FF791 +IV=D031FCA5F3C88926CC3BDDC448537B69 +CT=62BA0548E7AD136BEB4E38AECD7942D9 +PT=38E3D4C7AF0C3E494F1D580AC5430634 + +I=35 +KEY=2B64145F5D622EA505CBD7AC83CCF1A5 +IV=6FFA5A45EDA60294B0224EEB8C36C455 +CT=38E3D4C7AF0C3E494F1D580AC5430634 +PT=2231EB6A6588CBCB56B930B7F1CF9E04 + +I=36 +KEY=0955FF3538EAE56E5372E71B72036FA1 +IV=B5375674631ECC3334A318993CB81F9A +CT=2231EB6A6588CBCB56B930B7F1CF9E04 +PT=59692274C130D6820287EA10F7E64602 + +I=37 +KEY=503CDD41F9DA33EC51F50D0B85E529A3 +IV=A93D6E028B5C2BD17A29C6CA1617A0A2 +CT=59692274C130D6820287EA10F7E64602 +PT=5975A95327DE7749EA8DEDC580E5E8C7 + +I=38 +KEY=09497412DE0444A5BB78E0CE0500C164 +IV=26E00CB161145FCD00C39BC4FB1E5CBB +CT=5975A95327DE7749EA8DEDC580E5E8C7 +PT=D1F7E36BC8FF4439820CB617E745A9CC + +I=39 +KEY=D8BE977916FB009C397456D9E24568A8 +IV=72E78D9E15C8FBA864C6C40CEBB190B8 +CT=D1F7E36BC8FF4439820CB617E745A9CC +PT=76FB4F20C902E9AA89854440631092B5 + +I=40 +KEY=AE45D859DFF9E936B0F112998155FA1D +IV=4B6C585FEF52490EA62BAAD08FAA3DCF +CT=76FB4F20C902E9AA89854440631092B5 +PT=6D7D4487DCD624B2FC5002DFE7D2D347 + +I=41 +KEY=C3389CDE032FCD844CA110466687295A +IV=E94FD23A598DDE077CD1DAEE97FDADD9 +CT=6D7D4487DCD624B2FC5002DFE7D2D347 +PT=7297F8F85B21E1A5CB902DCC5F6738F9 + +I=42 +KEY=B1AF6426580E2C2187313D8A39E011A3 +IV=86E495D31EEFCBC30064414FBD78FAE5 +CT=7297F8F85B21E1A5CB902DCC5F6738F9 +PT=4A6978AACC6968931FB1B83D53D31FEF + +I=43 +KEY=FBC61C8C946744B2988085B76A330E4C +IV=6BA7664AB5ED4F7956D6C3FAA7C42961 +CT=4A6978AACC6968931FB1B83D53D31FEF +PT=6B63FAAF9DB43A2B6025F29B1D6A331C + +I=44 +KEY=90A5E62309D37E99F8A5772C77593D50 +IV=37D17D1702EA34A3C75376AA0F9D24AD +CT=6B63FAAF9DB43A2B6025F29B1D6A331C +PT=8317A07BEE0BF16B88D7D197884AC6CF + +I=45 +KEY=13B24658E7D88FF27072A6BBFF13FB9F +IV=29B89B238062495C260AF44C63AA809F +CT=8317A07BEE0BF16B88D7D197884AC6CF +PT=0443BFEBCA7C85CBD0CB66AB9D75425D + +I=46 +KEY=17F1F9B32DA40A39A0B9C0106266B9C2 +IV=08CF82854AE07429C4A866AA727CEA2E +CT=0443BFEBCA7C85CBD0CB66AB9D75425D +PT=6B1EB033CB844F9BDD96BA2C67D139C7 + +I=47 +KEY=7CEF4980E62045A27D2F7A3C05B78005 +IV=05579F3E0017EBF6083756DC0A50A2E9 +CT=6B1EB033CB844F9BDD96BA2C67D139C7 +PT=E7904CBFB41EBE4178B4D633AFC9B311 + +I=48 +KEY=9B7F053F523EFBE3059BAC0FAA7E3314 +IV=E6B2CB0CE57E02A230DCD16C08614823 +CT=E7904CBFB41EBE4178B4D633AFC9B311 +PT=96EAAA148F05FAD1F0FC06E135EC5DF8 + +I=49 +KEY=0D95AF2BDD3B0132F567AAEE9F926EEC +IV=4268294B10AD58BE9E570A9485963682 +CT=96EAAA148F05FAD1F0FC06E135EC5DF8 +PT=9F2F712F62DE747EE479A0A74384B196 + +I=50 +KEY=92BADE04BFE5754C111E0A49DC16DF7A +IV=A5C558F5D4658089CD9FB295EDAE64DB +CT=9F2F712F62DE747EE479A0A74384B196 +PT=9CF7F00094C4E2D96D752C2312FC135E + +I=51 +KEY=0E4D2E042B2197957C6B266ACEEACC24 +IV=1CE301F294BDF4C906E5F0A6FA7C22BB +CT=9CF7F00094C4E2D96D752C2312FC135E +PT=ABA58D548DB6E9BE977FDDC85E16C2DE + +I=52 +KEY=A5E8A350A6977E2BEB14FBA290FC0EFA +IV=66C1FF1E4B52A3542B48306EC33F171D +CT=ABA58D548DB6E9BE977FDDC85E16C2DE +PT=802948E1A5177FBE97ABA26B996FDF1B + +I=53 +KEY=25C1EBB1038001957CBF59C90993D1E1 +IV=197A546DEB2E19E17507276B9ED95135 +CT=802948E1A5177FBE97ABA26B996FDF1B +PT=67D931C0946ECDF2F8E41000726D1A56 + +I=54 +KEY=4218DA7197EECC67845B49C97BFECBB7 +IV=D11DA3CE92ADA0686F7BF12A4796D9F7 +CT=67D931C0946ECDF2F8E41000726D1A56 +PT=386C68821385E8CFCDD5678FE2AA89F8 + +I=55 +KEY=7A74B2F3846B24A8498E2E469954424F +IV=4DDE413EBC3F30E2F3A9F48DA1258DAF +CT=386C68821385E8CFCDD5678FE2AA89F8 +PT=1638C741EFE3B1CC45C7754783350825 + +I=56 +KEY=6C4C75B26B8895640C495B011A614A6A +IV=5B4F013B085E3A04A16A409E8C3BB270 +CT=1638C741EFE3B1CC45C7754783350825 +PT=91AB00C3828D3DF72BEC487EF4652567 + +I=57 +KEY=FDE77571E905A89327A5137FEE046F0D +IV=98074F522144682FF1498C61581F8B0E +CT=91AB00C3828D3DF72BEC487EF4652567 +PT=BC5BA874D2F3039837528993FB275EBA + +I=58 +KEY=41BCDD053BF6AB0B10F79AEC152331B7 +IV=B65C1A6F80CA024B92176D57061ECDFE +CT=BC5BA874D2F3039837528993FB275EBA +PT=B7DE1BEE1867F4DC3F974E0D8B416DB0 + +I=59 +KEY=F662C6EB23915FD72F60D4E19E625C07 +IV=7268C08FA807D83C9830F54A59F32662 +CT=B7DE1BEE1867F4DC3F974E0D8B416DB0 +PT=19769B9EB30B8DE5FD640ACE78F01F0A + +I=60 +KEY=EF145D75909AD232D204DE2FE692430D +IV=B260792BAB22BAAB6CCF3AE1DD3A0F85 +CT=19769B9EB30B8DE5FD640ACE78F01F0A +PT=2079F2C0A0DE164CD41FCE29D8CE3178 + +I=61 +KEY=CF6DAFB53044C47E061B10063E5C7275 +IV=6ABCE7B41E112B91B8E6BC0DBE37600C +CT=2079F2C0A0DE164CD41FCE29D8CE3178 +PT=0D3A678FAB06E743A9134C103B39B61D + +I=62 +KEY=C257C83A9B42233DAF085C160565C468 +IV=CEB1E776DBEF46BF8B949C0AF0EBEAD2 +CT=0D3A678FAB06E743A9134C103B39B61D +PT=80339ADB34BCDE3384D66170373AEEAC + +I=63 +KEY=426452E1AFFEFD0E2BDE3D66325F2AC4 +IV=EAAC373FCA05E610C1C5D4437AFD5631 +CT=80339ADB34BCDE3384D66170373AEEAC +PT=38D52D75E5783A08FBFE622633D6CF47 + +I=64 +KEY=7AB17F944A86C706D0205F400189E583 +IV=2A25ED6933CAAA95569ADA1AC7480942 +CT=38D52D75E5783A08FBFE622633D6CF47 +PT=3204F1EACBB520A69F0939F45BC82041 + +I=65 +KEY=48B58E7E8133E7A04F2966B45A41C5C2 +IV=9C6819799DAF61111ACC3C0ECEB0F8BF +CT=3204F1EACBB520A69F0939F45BC82041 +PT=16BD33EE541798BEE114E9D7F9141A9C + +I=66 +KEY=5E08BD90D5247F1EAE3D8F63A355DF5E +IV=C181F4DF1EE0E13BF76044A3DA5E3BC4 +CT=16BD33EE541798BEE114E9D7F9141A9C +PT=A0A68CF016C6AD8DAC4D5634EAADEBE5 + +I=67 +KEY=FEAE3160C3E2D2930270D95749F834BB +IV=2A4EE2CD011AF421616789DB790354FD +CT=A0A68CF016C6AD8DAC4D5634EAADEBE5 +PT=FCE7D92FD0B3A1C7920558F653E1019B + +I=68 +KEY=0249E84F13517354907581A11A193520 +IV=A7F7E2B701F34F308C0F28514DFAA15F +CT=FCE7D92FD0B3A1C7920558F653E1019B +PT=F16A084B2DE16D5E3E5405665DE3C623 + +I=69 +KEY=F323E0043EB01E0AAE2184C747FAF303 +IV=6D319828AAA75DFE99BEEDD21B983C7D +CT=F16A084B2DE16D5E3E5405665DE3C623 +PT=CE20AE629887DF02064F2D9DB092E1DB + +I=70 +KEY=3D034E66A637C108A86EA95AF76812D8 +IV=9484E76149F41901AF8AFD3152C56506 +CT=CE20AE629887DF02064F2D9DB092E1DB +PT=B457A655282213C1B7C5C2A206C7FCB9 + +I=71 +KEY=8954E8338E15D2C91FAB6BF8F1AFEE61 +IV=329E089DC915BD71B1F8D0713BFC4F97 +CT=B457A655282213C1B7C5C2A206C7FCB9 +PT=A89B8F7541FFF719A3C7DE1577CE1C3F + +I=72 +KEY=21CF6746CFEA25D0BC6CB5ED8661F25E +IV=FA381CAC5777234E6DF8A28A4E6671D8 +CT=A89B8F7541FFF719A3C7DE1577CE1C3F +PT=C4E73D25647350527C1F93F6C1D90296 + +I=73 +KEY=E5285A63AB997582C073261B47B8F0C8 +IV=082ACF3D2661514F0E00BDABC9015946 +CT=C4E73D25647350527C1F93F6C1D90296 +PT=34BF6DECECFE1C9AE3AA34B6DB3741EF + +I=74 +KEY=D197378F4767691823D912AD9C8FB127 +IV=3E56B658F899B6DBBA4EAF6E629F3555 +CT=34BF6DECECFE1C9AE3AA34B6DB3741EF +PT=FD86C78538176DC5D48BE2EC6B89D581 + +I=75 +KEY=2C11F00A7F7004DDF752F041F70664A6 +IV=765B823193F2738E6CACBB0154C941B1 +CT=FD86C78538176DC5D48BE2EC6B89D581 +PT=524E035AB9DEB29E467B9586A90F3A42 + +I=76 +KEY=7E5FF350C6AEB643B12965C75E095EE4 +IV=DE2B3EC0A3FF29EC67BBE1B124E9451A +CT=524E035AB9DEB29E467B9586A90F3A42 +PT=83DE1E768EED94BA09E623845A057834 + +I=77 +KEY=FD81ED26484322F9B8CF4643040C26D0 +IV=A5CF4D996D8460E71DDA938461BB884B +CT=83DE1E768EED94BA09E623845A057834 +PT=D8381D17B9BCF942F408DBB2B7B2D6B7 + +I=78 +KEY=25B9F031F1FFDBBB4CC79DF1B3BEF067 +IV=899696B8EDC4E8B60489742A2559C909 +CT=D8381D17B9BCF942F408DBB2B7B2D6B7 +PT=BF1D8175015D0A0341427DE1F7DDE379 + +I=79 +KEY=9AA47144F0A2D1B80D85E0104463131E +IV=AD76D13B2F2A3F938F5C810A38A83D09 +CT=BF1D8175015D0A0341427DE1F7DDE379 +PT=58114DEFF8CFF10F06B390EB01B13394 + +I=80 +KEY=C2B53CAB086D20B70B3670FB45D2208A +IV=9EC540C144AB57D4E5A9185F55E71E50 +CT=58114DEFF8CFF10F06B390EB01B13394 +PT=53E72B9603CE221F0160791DF51F6B3E + +I=81 +KEY=9152173D0BA302A80A5609E6B0CD4BB4 +IV=B780257238CA60FD998819B2D04CEB92 +CT=53E72B9603CE221F0160791DF51F6B3E +PT=AF0238554AAFFB0FB5DFAC35E3CE8F4C + +I=82 +KEY=3E502F68410CF9A7BF89A5D35303C4F8 +IV=3509BC884089ADEB90137A39AEA75CFC +CT=AF0238554AAFFB0FB5DFAC35E3CE8F4C +PT=20844D3F4F637B974D38B7E5F1C84205 + +I=83 +KEY=1ED462570E6F8230F2B11236A2CB86FD +IV=52BAB07EB72804630E4BD769F0172FDA +CT=20844D3F4F637B974D38B7E5F1C84205 +PT=68404E006D2F16572EDFAE636A62C537 + +I=84 +KEY=76942C5763409467DC6EBC55C8A943CA +IV=E4B417D85F36F3A25CF04AB05157F247 +CT=68404E006D2F16572EDFAE636A62C537 +PT=13C8DF4117D4EA3645F1825700F8FFA5 + +I=85 +KEY=655CF31674947E51999F3E02C851BC6F +IV=3FE0683442B6B5DF515209DE16F8FD4B +CT=13C8DF4117D4EA3645F1825700F8FFA5 +PT=42307D929439F2723202A5206D640431 + +I=86 +KEY=276C8E84E0AD8C23AB9D9B22A535B85E +IV=33FAD11D9D4057E7ED989F1520450C32 +CT=42307D929439F2723202A5206D640431 +PT=5ED8AF875ACF37BE8FAAC16D4AB8072B + +I=87 +KEY=79B42103BA62BB9D24375A4FEF8DBF75 +IV=807852E5AD0EB5E0C3A2AAF18DFB14F9 +CT=5ED8AF875ACF37BE8FAAC16D4AB8072B +PT=79C950A45ECDC8B676A5CFF324A81DA8 + +I=88 +KEY=007D71A7E4AF732B529295BCCB25A2DD +IV=516BC35B52C26C99E21C0147CB7DD99E +CT=79C950A45ECDC8B676A5CFF324A81DA8 +PT=595C3DDCFBD90661A3A70B94C470A26B + +I=89 +KEY=59214C7B1F76754AF1359E280F5500B6 +IV=FDABDD4BD60725F5E640629416F417D3 +CT=595C3DDCFBD90661A3A70B94C470A26B +PT=7957CF3989083D25B54C6890EC58DB0C + +I=90 +KEY=20768342967E486F4479F6B8E30DDBBA +IV=CADFADF417898DE3786D5DF869396611 +CT=7957CF3989083D25B54C6890EC58DB0C +PT=6C1E8DF34FC80DD2ECA00A1EDC5FC239 + +I=91 +KEY=4C680EB1D9B645BDA8D9FCA63F521983 +IV=A7DF9FA44AA2B49B9E26C6148CCAF36F +CT=6C1E8DF34FC80DD2ECA00A1EDC5FC239 +PT=72B5A426C9DC3B336756FB10B00626CE + +I=92 +KEY=3EDDAA97106A7E8ECF8F07B68F543F4D +IV=50FF574915D407A97A74CC399DE2D901 +CT=72B5A426C9DC3B336756FB10B00626CE +PT=194826159D7FAB9166D64F1DD6F627B0 + +I=93 +KEY=27958C828D15D51FA95948AB59A218FD +IV=A1E3BC848C019B6FC3F7072F9A866C52 +CT=194826159D7FAB9166D64F1DD6F627B0 +PT=0186B2316FC29104D3549C49F92AE414 + +I=94 +KEY=26133EB3E2D7441B7A0DD4E2A088FCE9 +IV=4DBA42F1031AE32016524C7F86781528 +CT=0186B2316FC29104D3549C49F92AE414 +PT=373384DB7383D3A4914C0141BB104B81 + +I=95 +KEY=1120BA68915497BFEB41D5A31B98B768 +IV=FFCB87107AC596D71BA807902D524247 +CT=373384DB7383D3A4914C0141BB104B81 +PT=25465CE5FA2AD65D75586064A18516A8 + +I=96 +KEY=3466E68D6B7E41E29E19B5C7BA1DA1C0 +IV=55879596C3F0A295FA00CFEF1B056248 +CT=25465CE5FA2AD65D75586064A18516A8 +PT=2311A52CEC4A16B5F4FCA613BC0BDB83 + +I=97 +KEY=177743A1873457576AE513D406167A43 +IV=B1A7DABF3D2384BF8754B829659B3989 +CT=2311A52CEC4A16B5F4FCA613BC0BDB83 +PT=357F4BF62308CD5C48F34E9E644DD515 + +I=98 +KEY=22080857A43C9A0B22165D4A625BAF56 +IV=72BF477FE8CF428CFA856323E18B3135 +CT=357F4BF62308CD5C48F34E9E644DD515 +PT=17758539D1896B92BFB811D30C9BA134 + +I=99 +KEY=357D8D6E75B5F1999DAE4C996EC00E62 +IV=4CBA048DFA50910EC94FE5D6AA5DD502 +CT=17758539D1896B92BFB811D30C9BA134 +PT=372B6DCEE44D18D3791C4E8FB0A91971 + +I=100 +KEY=0256E0A091F8E94AE4B20216DE691713 +IV=86F4F670CA3B191B860D6C8A9A35A872 +CT=372B6DCEE44D18D3791C4E8FB0A91971 +PT=66D3FABC4885C1F4897D9160C152D570 + +I=101 +KEY=64851A1CD97D28BE6DCF93761F3BC263 +IV=08490B2E8588FE564F0112D76D6108E9 +CT=66D3FABC4885C1F4897D9160C152D570 +PT=926278E71894F32B5E2A5A1F5FA695E7 + +I=102 +KEY=F6E762FBC1E9DB9533E5C969409D5784 +IV=D3A2E4AFFDD8A7CC1498EF0E812087B7 +CT=926278E71894F32B5E2A5A1F5FA695E7 +PT=A455F5D65D91563D9C15E6B745F29531 + +I=103 +KEY=52B2972D9C788DA8AFF02FDE056FC2B5 +IV=6CB8822EA67C247A6A0CBAD830B3562C +CT=A455F5D65D91563D9C15E6B745F29531 +PT=4544371A5E3A8E7AD9885AECD3868AF3 + +I=104 +KEY=17F6A037C24203D276787532D6E94846 +IV=93E3CAD8BE023F6451ADAA525988A974 +CT=4544371A5E3A8E7AD9885AECD3868AF3 +PT=8473F4F1D77AC1F46706EBD108CB48A5 + +I=105 +KEY=938554C61538C226117E9EE3DE2200E3 +IV=A7E7B354606EF4C1D00BF4F128CCE966 +CT=8473F4F1D77AC1F46706EBD108CB48A5 +PT=787ADE453DCE2FA7F6F24CD33C9A5CDC + +I=106 +KEY=EBFF8A8328F6ED81E78CD230E2B85C3F +IV=97A2CF706C1871B502D15B028C5F0D80 +CT=787ADE453DCE2FA7F6F24CD33C9A5CDC +PT=E6A7E5B65DC124FBE1C1FFFE18A34D8A + +I=107 +KEY=0D586F357537C97A064D2DCEFA1B11B5 +IV=9BBDCAF2A3CC7FC5BF6285631A4636FD +CT=E6A7E5B65DC124FBE1C1FFFE18A34D8A +PT=6A391E9F475546720836312BBEB0B3A9 + +I=108 +KEY=676171AA32628F080E7B1CE544ABA21C +IV=603EEDE91F925A2228537E8BDD26C96B +CT=6A391E9F475546720836312BBEB0B3A9 +PT=D75086BA446563AAB1873FDEBE611D67 + +I=109 +KEY=B031F7107607ECA2BFFC233BFACABF7B +IV=546B8CA37AACE2BC2C85014F2ACD6315 +CT=D75086BA446563AAB1873FDEBE611D67 +PT=63A4D826625CBD9F10083E62330BCFBC + +I=110 +KEY=D3952F36145B513DAFF41D59C9C170C7 +IV=BC2E6E9DD10152C8281B798F711A9334 +CT=63A4D826625CBD9F10083E62330BCFBC +PT=41275EFDFC86B5BDCCCDCA2BBFA5B90D + +I=111 +KEY=92B271CBE8DDE4806339D7727664C9CA +IV=D940A8D1B3448AA9148C7F6DFC266B00 +CT=41275EFDFC86B5BDCCCDCA2BBFA5B90D +PT=56AC1BCB285044710D26EFC42A0ABA56 + +I=112 +KEY=C41E6A00C08DA0F16E1F38B65C6E739C +IV=214238FF5F4D01F3A6694EC80E15BCF7 +CT=56AC1BCB285044710D26EFC42A0ABA56 +PT=5AF2877973AB9787E42202AC0C6E7538 + +I=113 +KEY=9EECED79B32637768A3D3A1A500006A4 +IV=561B4934904E327F3B3639CED6C7A995 +CT=5AF2877973AB9787E42202AC0C6E7538 +PT=787F52F6D9CD9085D782B95FD68F70F8 + +I=114 +KEY=E693BF8F6AEBA7F35DBF8345868F765C +IV=06B93FB1A99BD387A091509B8C6D3482 +CT=787F52F6D9CD9085D782B95FD68F70F8 +PT=E7B1DB917C92E488C6B02AC4C42AFD79 + +I=115 +KEY=0122641E1679437B9B0FA98142A58B25 +IV=1D57A61FED51218BD8C1357CE58F21EB +CT=E7B1DB917C92E488C6B02AC4C42AFD79 +PT=2FBAB770D511EACA849F654DE429DE84 + +I=116 +KEY=2E98D36EC368A9B11F90CCCCA68C55A1 +IV=CB311C43EC32D59941CEF81BB9CF4E57 +CT=2FBAB770D511EACA849F654DE429DE84 +PT=A8FE17AEA961C2A450DD5EAABAA19613 + +I=117 +KEY=8666C4C06A096B154F4D92661C2DC3B2 +IV=B9D7B74D62DD89A01EE3093A5C2A0470 +CT=A8FE17AEA961C2A450DD5EAABAA19613 +PT=D9E598A4DBAF82BDF9474BE13B997FF5 + +I=118 +KEY=5F835C64B1A6E9A8B60AD98727B4BC47 +IV=6398D8A38C38A9B54DCF18C0D76758BA +CT=D9E598A4DBAF82BDF9474BE13B997FF5 +PT=291DB2BC325CD7A94032E7C1208921A5 + +I=119 +KEY=769EEED883FA3E01F6383E46073D9DE2 +IV=4774C7E1BB97117BCA26A897B9302EFA +CT=291DB2BC325CD7A94032E7C1208921A5 +PT=DFC55866F85055F06E752E04AAC4C36A + +I=120 +KEY=A95BB6BE7BAA6BF1984D1042ADF95E88 +IV=BDA0616700CD2817FE4425F6F541E8C1 +CT=DFC55866F85055F06E752E04AAC4C36A +PT=7CACB3A88E7114F7737B05D0FB3AF7F3 + +I=121 +KEY=D5F70516F5DB7F06EB36159256C3A97B +IV=1EF4836BD363B89EE73911B14EBE9262 +CT=7CACB3A88E7114F7737B05D0FB3AF7F3 +PT=3282F1F6B3C04E325FB13E85D18CDBBC + +I=122 +KEY=E775F4E0461B3134B4872B17874F72C7 +IV=E35D47CEDBD30701A64FE504C6BC4199 +CT=3282F1F6B3C04E325FB13E85D18CDBBC +PT=BFB9748A3C825CDA3EA5D001F6AD305F + +I=123 +KEY=58CC806A7A996DEE8A22FB1671E24298 +IV=7A3676377E0B4F815B4B8C9A98DCAB4D +CT=BFB9748A3C825CDA3EA5D001F6AD305F +PT=B33787380A4C3BD5B32EC335916F9229 + +I=124 +KEY=EBFB075270D5563B390C3823E08DD0B1 +IV=B3E40B27DBF6D985D4F57BD4D2899DC8 +CT=B33787380A4C3BD5B32EC335916F9229 +PT=BCD5E40A3B4885ACA82BEC952BA8A973 + +I=125 +KEY=572EE3584B9DD3979127D4B6CB2579C2 +IV=897608FE3238F80CD24192CC64F4F695 +CT=BCD5E40A3B4885ACA82BEC952BA8A973 +PT=793E22E0B01FFE63E89C84A0D0FE1216 + +I=126 +KEY=2E10C1B8FB822DF479BB50161BDB6BD4 +IV=D84401CF83566FEA8FB859C446C22632 +CT=793E22E0B01FFE63E89C84A0D0FE1216 +PT=96858A96FEB19712B10A44FBF8E633D9 + +I=127 +KEY=B8954B2E0533BAE6C8B114EDE33D580D +IV=7210E127BFB706EF9CD24139C0927E01 +CT=96858A96FEB19712B10A44FBF8E633D9 +PT=28A34CC75A215117331D6B88387E16F8 + +I=128 +KEY=903607E95F12EBF1FBAC7F65DB434EF5 +IV=744B8DD281919F79FC529DA15AA0F18F +CT=28A34CC75A215117331D6B88387E16F8 +PT=43FE41DC9FFB88F93ADC43D41BA3E4B2 + +I=129 +KEY=D3C84635C0E96308C1703CB1C0E0AA47 +IV=5C7379A90F1E47F88C7424E8CD31E55D +CT=43FE41DC9FFB88F93ADC43D41BA3E4B2 +PT=66D6D0E84CEB8672D38DDE557CCCFFF6 + +I=130 +KEY=B51E96DD8C02E57A12FDE2E4BC2C55B1 +IV=529B92CD068415627C4BE49874347F98 +CT=66D6D0E84CEB8672D38DDE557CCCFFF6 +PT=F817D013CB041CA41B6D611ED261FAE9 + +I=131 +KEY=4D0946CE4706F9DE099083FA6E4DAF58 +IV=9B4452DD48C3EECEFDB6A6CFAE670117 +CT=F817D013CB041CA41B6D611ED261FAE9 +PT=56420C70CC459A131CD531EDC39ED6E9 + +I=132 +KEY=1B4B4ABE8B4363CD1545B217ADD379B1 +IV=264ABBC30CC98DA3C06B935B1364A317 +CT=56420C70CC459A131CD531EDC39ED6E9 +PT=650DA8C4CB11E4ABFE8841D20443BB04 + +I=133 +KEY=7E46E27A40528766EBCDF3C5A990C2B5 +IV=DBABF7B18568FED50C69DA0C9AA5395D +CT=650DA8C4CB11E4ABFE8841D20443BB04 +PT=94E6CE02AE253F3BE4A59775CAB7B11B + +I=134 +KEY=EAA02C78EE77B85D0F6864B0632773AE +IV=F0D2E456CE063CB68988C1C397038480 +CT=94E6CE02AE253F3BE4A59775CAB7B11B +PT=124F09DAC6A45E6077DCECE971B24ED1 + +I=135 +KEY=F8EF25A228D3E63D78B4885912953D7F +IV=C19A6D2D35E606E552580B002023C966 +CT=124F09DAC6A45E6077DCECE971B24ED1 +PT=AAD649FD1168DFCB431A7216571ED4C1 + +I=136 +KEY=52396C5F39BB39F63BAEFA4F458BE9BE +IV=DF1A307B1D25BC2751ECDC791EC51B16 +CT=AAD649FD1168DFCB431A7216571ED4C1 +PT=992749C940CBBB0944F5248E8D65268C + +I=137 +KEY=CB1E2596797082FF7F5BDEC1C8EECF32 +IV=D8B0466FC4344C6BF4E57584E5F48A36 +CT=992749C940CBBB0944F5248E8D65268C +PT=FF16B9246C325A3B96250875A9D5C4BE + +I=138 +KEY=34089CB21542D8C4E97ED6B4613B0B8C +IV=B8C3E4ECF57631CE1EEA74AD99545BA2 +CT=FF16B9246C325A3B96250875A9D5C4BE +PT=72EDB906165FE6A19E02435AC6457C9A + +I=139 +KEY=46E525B4031D3E65777C95EEA77E7716 +IV=9C4F78D05257C64D752C576B5BB16245 +CT=72EDB906165FE6A19E02435AC6457C9A +PT=0C2F00362B8733D343DCAF884A6BFD46 + +I=140 +KEY=4ACA2582289A0DB634A03A66ED158A50 +IV=C51122198D2FD566ACA1BD07C28BCC7A +CT=0C2F00362B8733D343DCAF884A6BFD46 +PT=C7F5C00F42695CF7870240DA73D487F7 + +I=141 +KEY=8D3FE58D6AF35141B3A27ABC9EC10DA7 +IV=14769B7962371925822C42F0411BDC65 +CT=C7F5C00F42695CF7870240DA73D487F7 +PT=F4BC8A4310A4CD2F396F43B81BD060EB + +I=142 +KEY=79836FCE7A579C6E8ACD390485116D4C +IV=CDA4414DF23427B937D586C1A8164479 +CT=F4BC8A4310A4CD2F396F43B81BD060EB +PT=1B996A525174C35466103BCBD53ECB9C + +I=143 +KEY=621A059C2B235F3AECDD02CF502FA6D0 +IV=1DA9E7C02BE868E118E4B9BF5928BFCF +CT=1B996A525174C35466103BCBD53ECB9C +PT=2B4EC5CB9DE50257B5901C6D49B5EB54 + +I=144 +KEY=4954C057B6C65D6D594D1EA2199A4D84 +IV=55433149AA93215BF53CB8FE66CD683A +CT=2B4EC5CB9DE50257B5901C6D49B5EB54 +PT=5A5B9ACA3BDA951DC4C4DFB7DD15AD18 + +I=145 +KEY=130F5A9D8D1CC8709D89C115C48FE09C +IV=695C69EA8C4257D2758364AFF6387DA0 +CT=5A5B9ACA3BDA951DC4C4DFB7DD15AD18 +PT=5BB08593BA52E94F07CB14FF564AF299 + +I=146 +KEY=48BFDF0E374E213F9A42D5EA92C51205 +IV=665463164601CD0045C684729CDD5E7D +CT=5BB08593BA52E94F07CB14FF564AF299 +PT=DB1840467889551150026A90E3FC272F + +I=147 +KEY=93A79F484FC7742ECA40BF7A7139352A +IV=355C4B87A682712460C80ABA630F7BE8 +CT=DB1840467889551150026A90E3FC272F +PT=9F7BD8EF96A1ECC75B4E3031E65FE8FC + +I=148 +KEY=0CDC47A7D96698E9910E8F4B9766DDD6 +IV=FBF20FEC0A9E9B530DD3745955A1960C +CT=9F7BD8EF96A1ECC75B4E3031E65FE8FC +PT=DCF003E1DDD4B52F5B680568B42EEECF + +I=149 +KEY=D02C444604B22DC6CA668A2323483319 +IV=04EADC638E309466B9500B1C3A308856 +CT=DCF003E1DDD4B52F5B680568B42EEECF +PT=DDD2F2AEFEF4A4641747699170DF0129 + +I=150 +KEY=0DFEB6E8FA4689A2DD21E3B253973230 +IV=FB521123E5BB45F1AC7083C382B95E10 +CT=DDD2F2AEFEF4A4641747699170DF0129 +PT=7D6C54E4369E965513DE1E95E8A37433 + +I=151 +KEY=7092E20CCCD81FF7CEFFFD27BB344603 +IV=0E71300101915AEE97563493B4B2EFB9 +CT=7D6C54E4369E965513DE1E95E8A37433 +PT=B7F5C4275EF7D3A23E8E9A4BC2BCA700 + +I=152 +KEY=C767262B922FCC55F071676C7988E103 +IV=8BBC970D4E24F6F1A92859BBAE70B757 +CT=B7F5C4275EF7D3A23E8E9A4BC2BCA700 +PT=679FA9A8AB3EE2F0663D4DC95FEC3847 + +I=153 +KEY=A0F88F8339112EA5964C2AA52664D944 +IV=B8D28B6903859465F996A0DF491DDAAA +CT=679FA9A8AB3EE2F0663D4DC95FEC3847 +PT=914DCEAC5B00940A415C2144DAA1EF03 + +I=154 +KEY=31B5412F6211BAAFD7100BE1FCC53647 +IV=06E1FF99E63E0EDDA1D95682B541D026 +CT=914DCEAC5B00940A415C2144DAA1EF03 +PT=A718031A531395DA071B828A10A2B9DC + +I=155 +KEY=96AD423531022F75D00B896BEC678F9B +IV=F18546028693CC0A72E218460AC932E9 +CT=A718031A531395DA071B828A10A2B9DC +PT=19D996B9FF549029D800CF977C0E0A88 + +I=156 +KEY=8F74D48CCE56BF5C080B46FC90698513 +IV=7E98DAFA8DE35537A0B0AA8FA32E01DF +CT=19D996B9FF549029D800CF977C0E0A88 +PT=6A7D514FBE9963987E0EE5DD22FDC8BD + +I=157 +KEY=E50985C370CFDCC47605A321B2944DAE +IV=071F44277D12AD6E653FB747C11BEFB7 +CT=6A7D514FBE9963987E0EE5DD22FDC8BD +PT=AB07C464DF72DF58411A7CBF906F43A6 + +I=158 +KEY=4E0E41A7AFBD039C371FDF9E22FB0E08 +IV=BDA8979A0DE78999AE0659D2744BC21B +CT=AB07C464DF72DF58411A7CBF906F43A6 +PT=A8ABC34FF51FD998427A7837BB0F22BB + +I=159 +KEY=E6A582E85AA2DA047565A7A999F42CB3 +IV=3CA763C4375A6C70F072B52C42A02560 +CT=A8ABC34FF51FD998427A7837BB0F22BB +PT=9E82A41AB2A2748695663075C5BF1C09 + +I=160 +KEY=782726F2E800AE82E00397DC5C4B30BA +IV=B1DD4DC8715CA0B8BA3426395B61ABA4 +CT=9E82A41AB2A2748695663075C5BF1C09 +PT=3C891AEFC6645F3C23A2E3A2E1A522EF + +I=161 +KEY=44AE3C1D2E64F1BEC3A1747EBDEE1255 +IV=932F28E3FC0F85A0E703AD6079A68CC0 +CT=3C891AEFC6645F3C23A2E3A2E1A522EF +PT=D4FDD9C3D36E80E0AFA95ABEC2E62FB9 + +I=162 +KEY=9053E5DEFD0A715E6C082EC07F083DEC +IV=1AD1530DE6274BBA3A097004D85DF8FA +CT=D4FDD9C3D36E80E0AFA95ABEC2E62FB9 +PT=9FACBB106FBF34D9B25A83AD4F45AA38 + +I=163 +KEY=0FFF5ECE92B54587DE52AD6D304D97D4 +IV=8412EAA361AB8193AD529FA36944FE3D +CT=9FACBB106FBF34D9B25A83AD4F45AA38 +PT=E95628B6A14326AC153B228C0DD25063 + +I=164 +KEY=E6A9767833F6632BCB698FE13D9FC7B7 +IV=9F1D906FD25CCCA7565D82CDA44B4A57 +CT=E95628B6A14326AC153B228C0DD25063 +PT=7B1ECD07E452D593D00E326F8FD9F2B5 + +I=165 +KEY=9DB7BB7FD7A4B6B81B67BD8EB2463502 +IV=9C91B12734A86451492400EE5759C190 +CT=7B1ECD07E452D593D00E326F8FD9F2B5 +PT=A99874C1ECA463D335B37179348AEF4F + +I=166 +KEY=342FCFBE3B00D56B2ED4CCF786CCDA4D +IV=9060C6E8E2B51E5F1000860ECB5A608C +CT=A99874C1ECA463D335B37179348AEF4F +PT=F9296E658C3048C58FE6404AB6E0186C + +I=167 +KEY=CD06A1DBB7309DAEA1328CBD302CC221 +IV=ADCB427405EDF8078622AFC6C731D3EF +CT=F9296E658C3048C58FE6404AB6E0186C +PT=8D3A4ABFB8F57AEBB1284B78BFDD240D + +I=168 +KEY=403CEB640FC5E745101AC7C58FF1E62C +IV=4CED30477756892A49FE6358700F5DE7 +CT=8D3A4ABFB8F57AEBB1284B78BFDD240D +PT=7C71310D5241B8B461847FA7E2B4D506 + +I=169 +KEY=3C4DDA695D845FF1719EB8626D45332A +IV=52A3B8E21588368AA3AD2131B283B34C +CT=7C71310D5241B8B461847FA7E2B4D506 +PT=380A1E2925FC8061FBC69B08B4C7C6C8 + +I=170 +KEY=0447C4407878DF908A58236AD982F5E2 +IV=B7AD265DF50ABD77C1D1D02BAF06CEBD +CT=380A1E2925FC8061FBC69B08B4C7C6C8 +PT=6931E262570F27732A75629A384492CA + +I=171 +KEY=6D7626222F77F8E3A02D41F0E1C66728 +IV=DD7D3CA7F6CE54775836734B10685A99 +CT=6931E262570F27732A75629A384492CA +PT=336D0AB3F9A793469C544E98CFDC8AD6 + +I=172 +KEY=5E1B2C91D6D06BA53C790F682E1AEDFE +IV=54087C05437049FBAFC9BF6C56AD16CC +CT=336D0AB3F9A793469C544E98CFDC8AD6 +PT=0098A640F1D04E5557F748B80215082A + +I=173 +KEY=5E838AD1270025F06B8E47D02C0FE5D4 +IV=DD13A93C7FAEF14820D6A168AF9969DB +CT=0098A640F1D04E5557F748B80215082A +PT=48660EDDC3ACAC1A814AE088650DE007 + +I=174 +KEY=16E5840CE4AC89EAEAC4A758490205D3 +IV=589C43A680F7AE6E15DE25FD50F18BED +CT=48660EDDC3ACAC1A814AE088650DE007 +PT=047740C48160A14563C0049316C7B78E + +I=175 +KEY=1292C4C865CC28AF8904A3CB5FC5B25D +IV=22DB095AF8268D37AC536FDA3A81B7C2 +CT=047740C48160A14563C0049316C7B78E +PT=D9679ABB1AED1524E8DA2ECA89172853 + +I=176 +KEY=CBF55E737F213D8B61DE8D01D6D29A0E +IV=77FDCCC9BAB3B7E81D7B9D14540ED3A7 +CT=D9679ABB1AED1524E8DA2ECA89172853 +PT=C774AD9EF683A59747AB41DA044471C4 + +I=177 +KEY=0C81F3ED89A2981C2675CCDBD296EBCA +IV=2E266970512C0F6D404367978C70B5C6 +CT=C774AD9EF683A59747AB41DA044471C4 +PT=927C98AFDE6F108268A306A1A818EE89 + +I=178 +KEY=9EFD6B4257CD889E4ED6CA7A7A8E0543 +IV=E2B0A0F146E931136932D8188B7DC980 +CT=927C98AFDE6F108268A306A1A818EE89 +PT=D3C11AF1EF255D65EAAEE5B5C5BF3CD9 + +I=179 +KEY=4D3C71B3B8E8D5FBA4782FCFBF31399A +IV=ABA118A590A8A69D41D20ED13F7DA4C9 +CT=D3C11AF1EF255D65EAAEE5B5C5BF3CD9 +PT=760B1C47EB476A246CE41163B7425C7B + +I=180 +KEY=3B376DF453AFBFDFC89C3EAC087365E1 +IV=8A395FFEE93FF820FBC086932216324F +CT=760B1C47EB476A246CE41163B7425C7B +PT=4EEAE25D1654A461D6A56896EDFFEAB7 + +I=181 +KEY=75DD8FA945FB1BBE1E39563AE58C8F56 +IV=82D68DE458D38127E2A17DA736BC1651 +CT=4EEAE25D1654A461D6A56896EDFFEAB7 +PT=BD7ABD27F3515B9FD337ADADBA5E9EC9 + +I=182 +KEY=C8A7328EB6AA4021CD0EFB975FD2119F +IV=95757C38F4CB26C29DF174FD8B1F35E8 +CT=BD7ABD27F3515B9FD337ADADBA5E9EC9 +PT=E32EF56DE91CC21C158822BDB841A02C + +I=183 +KEY=2B89C7E35FB6823DD886D92AE793B1B3 +IV=AFFB434005E300E99E815A8E5B46E159 +CT=E32EF56DE91CC21C158822BDB841A02C +PT=578B7692D68BD4D65A159C9CCDC81F64 + +I=184 +KEY=7C02B171893D56EB829345B62A5BAED7 +IV=15E783551969F275EF25A429F68BA0DB +CT=578B7692D68BD4D65A159C9CCDC81F64 +PT=0F70D77F31DE8F0010628377C8E4A1C3 + +I=185 +KEY=7372660EB8E3D9EB92F1C6C1E2BF0F14 +IV=078B6E3FC7C79D52A5C49847A7C5D0BB +CT=0F70D77F31DE8F0010628377C8E4A1C3 +PT=A4F29F6A50A4A15789D4647774C96997 + +I=186 +KEY=D780F964E84778BC1B25A2B696766683 +IV=C9B2C903F131856C0D8218146479513A +CT=A4F29F6A50A4A15789D4647774C96997 +PT=7AD4F764911F8F1E8C9356F00B1468EE + +I=187 +KEY=AD540E007958F7A297B6F4469D620E6D +IV=780DAD9DBA12DDC713ECF44057B8B56E +CT=7AD4F764911F8F1E8C9356F00B1468EE +PT=A00EAFD28A95C7F39137773F28F9A0D3 + +I=188 +KEY=0D5AA1D2F3CD305106818379B59BAEBE +IV=6643BF26488FB21BCDAA7D4FABAA5BC3 +CT=A00EAFD28A95C7F39137773F28F9A0D3 +PT=FC884EEEB73B2F66C97D742A441B0463 + +I=189 +KEY=F1D2EF3C44F61F37CFFCF753F180AADD +IV=7B707442550BF1FA4C1B74F0DC3237FC +CT=FC884EEEB73B2F66C97D742A441B0463 +PT=9C260AA82C6902B068495B4844507F7D + +I=190 +KEY=6DF4E594689F1D87A7B5AC1BB5D0D5A0 +IV=8329E8DE2980225DA61158BF467B1D79 +CT=9C260AA82C6902B068495B4844507F7D +PT=1C12FEAA35AD2DD21DE6411C3A3BB6D5 + +I=191 +KEY=71E61B3E5D323055BA53ED078FEB6375 +IV=EFD514D7CF3FAC49DBB5BB3505B9B18F +CT=1C12FEAA35AD2DD21DE6411C3A3BB6D5 +PT=15F26D34E8E1037A5A2393CEA5DB396B + +I=192 +KEY=6414760AB5D3332FE0707EC92A305A1E +IV=9EFC37C295552B965B29A23AC2788D8B +CT=15F26D34E8E1037A5A2393CEA5DB396B +PT=76F0C79955566A0A091AA46E0C59455E + +I=193 +KEY=12E4B193E0855925E96ADAA726691F40 +IV=5BA54E33128A7526A9130E632BE00D65 +CT=76F0C79955566A0A091AA46E0C59455E +PT=1EA06231EBEEB995E2F94B88A4004333 + +I=194 +KEY=0C44D3A20B6BE0B00B93912F82695C73 +IV=9B1C6FA42510E530D2282BF8C5516DCE +CT=1EA06231EBEEB995E2F94B88A4004333 +PT=16C36348884B32AC1CB1DE2D3C158981 + +I=195 +KEY=1A87B0EA8320D21C17224F02BE7CD5F2 +IV=F755F641EED4C828DCBECC327D93F4AF +CT=16C36348884B32AC1CB1DE2D3C158981 +PT=6581A3FB5F61C6C1904F35E787BF552D + +I=196 +KEY=7F061311DC4114DD876D7AE539C380DF +IV=5D799F356C1672707716C47DA4384C01 +CT=6581A3FB5F61C6C1904F35E787BF552D +PT=0BA11F8EE845E03641928825B3344994 + +I=197 +KEY=74A70C9F3404F4EBC6FFF2C08AF7C94B +IV=89A5592031795CEAECF1C1F274813818 +CT=0BA11F8EE845E03641928825B3344994 +PT=1CF907A6C8A33C7806819EB97B854588 + +I=198 +KEY=685E0B39FCA7C893C07E6C79F1728CC3 +IV=BBE87558AF456066B9CE3EBB8729D554 +CT=1CF907A6C8A33C7806819EB97B854588 +PT=722BB2E53CE7846F40B5EA18AF1430B0 + +I=199 +KEY=1A75B9DCC0404CFC80CB86615E66BC73 +IV=2CC42E6DA36883482ACB5D9D92823186 +CT=722BB2E53CE7846F40B5EA18AF1430B0 +PT=E667D6A95E9C56BB56E4436CC1B69874 + +I=200 +KEY=FC126F759EDC1A47D62FC50D9FD02407 +IV=F18DD0388BF5692B7394BAFDC4854308 +CT=E667D6A95E9C56BB56E4436CC1B69874 +PT=3C9A76798C468470EEBC5F7B915879A3 + +I=201 +KEY=C088190C129A9E3738939A760E885DA4 +IV=8262D8603FE0F4AE8BF5795690992F1C +CT=3C9A76798C468470EEBC5F7B915879A3 +PT=3CAFB994BDEF76370D8A5129B63BECDB + +I=202 +KEY=FC27A098AF75E8003519CB5FB8B3B17F +IV=AB090F7A86CFD9A7C1BD8869BBB4D27B +CT=3CAFB994BDEF76370D8A5129B63BECDB +PT=50D037733D2C3242024BD322ADDF01CB + +I=203 +KEY=ACF797EB9259DA423752187D156CB0B4 +IV=3581D6724722C3892C712B2AA1066824 +CT=50D037733D2C3242024BD322ADDF01CB +PT=0D7CB755305EF09692FCED530CCC1336 + +I=204 +KEY=A18B20BEA2072AD4A5AEF52E19A0A382 +IV=9D0DAD6448895ECBE05F8DC73E014E3C +CT=0D7CB755305EF09692FCED530CCC1336 +PT=D66389E01F44C60B26BCF3F9B39DAB55 + +I=205 +KEY=77E8A95EBD43ECDF831206D7AA3D08D7 +IV=7BDC3CD62CD79C7E6CB8FAE104175DE4 +CT=D66389E01F44C60B26BCF3F9B39DAB55 +PT=CC9F59409D636BE5C555AC2841650CD7 + +I=206 +KEY=BB77F01E2020873A4647AAFFEB580400 +IV=A4FBE42983B236097E40C1E244B14748 +CT=CC9F59409D636BE5C555AC2841650CD7 +PT=34804672FCEF79481269B1D254DDCAF9 + +I=207 +KEY=8FF7B66CDCCFFE72542E1B2DBF85CEF9 +IV=700B37E771E88E5DCD9C81D6FD16B995 +CT=34804672FCEF79481269B1D254DDCAF9 +PT=62FC00FDF1F6BF44FFBEB5BED5589A64 + +I=208 +KEY=ED0BB6912D394136AB90AE936ADD549D +IV=F3A9954079382ACD97C3EC198522AE69 +CT=62FC00FDF1F6BF44FFBEB5BED5589A64 +PT=F7901904A02544E064400A2625121C4C + +I=209 +KEY=1A9BAF958D1C05D6CFD0A4B54FCF48D1 +IV=3799F5DEF76C56F8B0A69889B85760AA +CT=F7901904A02544E064400A2625121C4C +PT=A915D55AE8E14497F2693A55F83041F5 + +I=210 +KEY=B38E7ACF65FD41413DB99EE0B7FF0924 +IV=5421F3F4CDD3C6F9BF38184BC61904AA +CT=A915D55AE8E14497F2693A55F83041F5 +PT=66EA0D0968631F3BDA46921078E495C1 + +I=211 +KEY=D56477C60D9E5E7AE7FF0CF0CF1B9CE5 +IV=3B87243EE38BD474E4CBF34A7C592CFC +CT=66EA0D0968631F3BDA46921078E495C1 +PT=283826367D00718849A6539EE8CAD8BF + +I=212 +KEY=FD5C51F0709E2FF2AE595F6E27D1445A +IV=0FB53077D2BC27C544CD400A28212291 +CT=283826367D00718849A6539EE8CAD8BF +PT=B15EA2718FB406D457C8B96530EDC014 + +I=213 +KEY=4C02F381FF2A2926F991E60B173C844E +IV=8BFE654E422E9BCCE7F1357053E1130C +CT=B15EA2718FB406D457C8B96530EDC014 +PT=44238CE0F1765C7983BF408D5ECFA2BA + +I=214 +KEY=08217F610E5C755F7A2EA68649F326F4 +IV=86841D597FA91F54CBAD3C57FC1FC492 +CT=44238CE0F1765C7983BF408D5ECFA2BA +PT=BB6408099CA64F1216D204865449E967 + +I=215 +KEY=B345776892FA3A4D6CFCA2001DBACF93 +IV=849198CEA19F4AD76013D172867A0D20 +CT=BB6408099CA64F1216D204865449E967 +PT=B7E109C6813E686ADA396DDB277AD960 + +I=216 +KEY=04A47EAE13C45227B6C5CFDB3AC016F3 +IV=9C5E0182124701DA958CF68E1B9F8CC1 +CT=B7E109C6813E686ADA396DDB277AD960 +PT=65C77CB822CA10AE1F95B91F0A3F6436 + +I=217 +KEY=61630216310E4289A95076C430FF72C5 +IV=2BB9026F793A64A325E02B922E3A51DD +CT=65C77CB822CA10AE1F95B91F0A3F6436 +PT=48E9DB9FC3F883AD28A0299561444197 + +I=218 +KEY=298AD989F2F6C12481F05F5151BB3352 +IV=6BE0B03639C858D8F2CAE00EFE8FECCA +CT=48E9DB9FC3F883AD28A0299561444197 +PT=02B277AB327BCB5C91831BD376DC5211 + +I=219 +KEY=2B38AE22C08D0A781073448227676143 +IV=ADC033E3EEC3705031D2FB24205823A2 +CT=02B277AB327BCB5C91831BD376DC5211 +PT=FE288D6703CF6AB1635483305A82F192 + +I=220 +KEY=D5102345C34260C97327C7B27DE590D1 +IV=F637C38CB5DF86458225143E157B9415 +CT=FE288D6703CF6AB1635483305A82F192 +PT=B07BF02F795D13D972D5D6E556E8BA37 + +I=221 +KEY=656BD36ABA1F731001F211572B0D2AE6 +IV=824B7BBB3A339BF045C3CFEA9FD842B9 +CT=B07BF02F795D13D972D5D6E556E8BA37 +PT=D4661C2E102C6644724DA54BE291215D + +I=222 +KEY=B10DCF44AA33155473BFB41CC99C0BBB +IV=21FA242B2B9FFF0C7DC6B712A38A333B +CT=D4661C2E102C6644724DA54BE291215D +PT=F7EDEE448559A6ACD68815B6EEAF6E38 + +I=223 +KEY=46E021002F6AB3F8A537A1AA27336583 +IV=390906ECE51C92800D620E1CD1FD3574 +CT=F7EDEE448559A6ACD68815B6EEAF6E38 +PT=07257C91424F65E6752470A6960DF6D9 + +I=224 +KEY=41C55D916D25D61ED013D10CB13E935A +IV=918A010EC2B106DE32A220315999DF7D +CT=07257C91424F65E6752470A6960DF6D9 +PT=CCB4F3FCFFDEE9E93DD3AB4CC2DB870E + +I=225 +KEY=8D71AE6D92FB3FF7EDC07A4073E51454 +IV=7CF6B4948C4E04ED235F2CC96B0A6B49 +CT=CCB4F3FCFFDEE9E93DD3AB4CC2DB870E +PT=C455220E8C8847FF2592074A53104105 + +I=226 +KEY=49248C631E737808C8527D0A20F55551 +IV=4839E74C868786D0A109603CF98F1100 +CT=C455220E8C8847FF2592074A53104105 +PT=B4D0F5B4C15D7AD556ED4964A94C898F + +I=227 +KEY=FDF479D7DF2E02DD9EBF346E89B9DCDE +IV=5C6D9649E47FAA8A2DCAFB317B6BC0EA +CT=B4D0F5B4C15D7AD556ED4964A94C898F +PT=B515D2904555793DDC142618DCFF8464 + +I=228 +KEY=48E1AB479A7B7BE042AB1276554658BA +IV=E3573B4137C13BBA6CDD10D71042B8F6 +CT=B515D2904555793DDC142618DCFF8464 +PT=2C272D6589E2E6EE09067882795E9FB9 + +I=229 +KEY=64C6862213999D0E4BAD6AF42C18C703 +IV=08E335104FC5D18E2C11EF34B805F060 +CT=2C272D6589E2E6EE09067882795E9FB9 +PT=B38E39322245C4A2E170EBF36D764AD5 + +I=230 +KEY=D748BF1031DC59ACAADD8107416E8DD6 +IV=E134D0DEA38A23983766DA18DADA70E0 +CT=B38E39322245C4A2E170EBF36D764AD5 +PT=E7556255602B48D7CAC710A004FFFD2E + +I=231 +KEY=301DDD4551F7117B601A91A7459170F8 +IV=301C2808833418F45D5F97FB09A99504 +CT=E7556255602B48D7CAC710A004FFFD2E +PT=D4356D51B1C486AAC8BCF2F65312758C + +I=232 +KEY=E428B014E03397D1A8A6635116830574 +IV=264D556FA9A9D73510F562BBF983A4F7 +CT=D4356D51B1C486AAC8BCF2F65312758C +PT=B4D003D6C542B576A3EAEC8F1B017F5B + +I=233 +KEY=50F8B3C2257122A70B4C8FDE0D827A2F +IV=8821647AD3E9E529909E60D0F75DA400 +CT=B4D003D6C542B576A3EAEC8F1B017F5B +PT=10056819F314FF21114BE6209AB5508C + +I=234 +KEY=40FDDBDBD665DD861A0769FE97372AA3 +IV=CBD574F4DB1EFEE4E2EC9485D1192E04 +CT=10056819F314FF21114BE6209AB5508C +PT=6E7AA061FE85B6F8972CB0E793BE0CB0 + +I=235 +KEY=2E877BBA28E06B7E8D2BD91904892613 +IV=4F98EE1501681EC0E7834FE941DF6C6B +CT=6E7AA061FE85B6F8972CB0E793BE0CB0 +PT=45E0C0014219D77686E82E74E60608CA + +I=236 +KEY=6B67BBBB6AF9BC080BC3F76DE28F2ED9 +IV=1D34CAB2FF836A7E6568823784519170 +CT=45E0C0014219D77686E82E74E60608CA +PT=ACF686F9D6723EAFDBFE512AB3A8C6B1 + +I=237 +KEY=C7913D42BC8B82A7D03DA6475127E868 +IV=BEA74B4435F9F79D39B8CCE1F090D4B8 +CT=ACF686F9D6723EAFDBFE512AB3A8C6B1 +PT=F11FE34D158D40DEA10033BCE0253F30 + +I=238 +KEY=368EDE0FA906C279713D95FBB102D758 +IV=DF30EE5D8CA298BE630DDE4B6D8AD7AA +CT=F11FE34D158D40DEA10033BCE0253F30 +PT=4E970ACAB8B19C942C85FAA7825C5E67 + +I=239 +KEY=7819D4C511B75EED5DB86F5C335E893F +IV=DC3CCC928C02710EE91391032A3B557D +CT=4E970ACAB8B19C942C85FAA7825C5E67 +PT=0FF6C292507CF135036E04A391210466 + +I=240 +KEY=77EF165741CBAFD85ED66BFFA27F8D59 +IV=7CC57A486E05E36F852278450C03D39F +CT=0FF6C292507CF135036E04A391210466 +PT=BBEF94C8179E7A124492A252507D58E7 + +I=241 +KEY=CC00829F5655D5CA1A44C9ADF202D5BE +IV=BBB92F65197F8D6B388191E78E90A858 +CT=BBEF94C8179E7A124492A252507D58E7 +PT=BAF11150DD418ED7C28072A718815954 + +I=242 +KEY=76F193CF8B145B1DD8C4BB0AEA838CEA +IV=99DA5A29F934BE23EB74B6DE4E8CC740 +CT=BAF11150DD418ED7C28072A718815954 +PT=A935099B91A35655C850939D2FED1569 + +I=243 +KEY=DFC49A541AB70D4810942897C56E9983 +IV=92401B7E92A49FA5A6905E51E49D51C2 +CT=A935099B91A35655C850939D2FED1569 +PT=F60E1B5D10CDA17FC762798B86B8708D + +I=244 +KEY=29CA81090A7AAC37D7F6511C43D6E90E +IV=C2A57521674EB0FB3E46DE2CC1DCF419 +CT=F60E1B5D10CDA17FC762798B86B8708D +PT=0B976079B61F46E7F3CCCD17E23D872F + +I=245 +KEY=225DE170BC65EAD0243A9C0BA1EB6E21 +IV=66970AE807FED1E3581496C9FBE5FF50 +CT=0B976079B61F46E7F3CCCD17E23D872F +PT=FB44F0094A5FC03BD0A27391E58D0AA3 + +I=246 +KEY=D9191179F63A2AEBF498EF9A44666482 +IV=ED7B2ED1AFF7DB9B514D6E4DFAEA484B +CT=FB44F0094A5FC03BD0A27391E58D0AA3 +PT=41A534A69AD25FEB39BB9F754F15D8FE + +I=247 +KEY=98BC25DF6CE87500CD2370EF0B73BC7C +IV=B7E8C7F08BCE1CF1CC2568E18C18C92B +CT=41A534A69AD25FEB39BB9F754F15D8FE +PT=022B28D4F7355E14F99F654B6C35BC16 + +I=248 +KEY=9A970D0B9BDD2B1434BC15A46746006A +IV=F2EF32464FC7E5F3D397C259CB963B7F +CT=022B28D4F7355E14F99F654B6C35BC16 +PT=28F18EA03ADEB36C40FD8FBC590EC6C8 + +I=249 +KEY=B26683ABA103987874419A183E48C6A2 +IV=687E822CCFC5800E88E59ED7DEC1409D +CT=28F18EA03ADEB36C40FD8FBC590EC6C8 +PT=661F9AEA300100333D64FCDD1212C663 + +I=250 +KEY=D47919419102984B492566C52C5A00C1 +IV=3922BB08EE1B4CC75881D1D6F66B8EE0 +CT=661F9AEA300100333D64FCDD1212C663 +PT=11C4D360F585EDF544D5479AE1ABDBE6 + +I=251 +KEY=C5BDCA21648775BE0DF0215FCDF1DB27 +IV=9B7C0D7D0EA8CAD77B331F2E0CA1E639 +CT=11C4D360F585EDF544D5479AE1ABDBE6 +PT=2E4695733B01CC78993E6EB464784223 + +I=252 +KEY=EBFB5F525F86B9C694CE4FEBA9899904 +IV=A2BF273F12FE1F4B2F56A86CAFD9C5BF +CT=2E4695733B01CC78993E6EB464784223 +PT=1CC514E9F4B13FFEF3B076DAC8C62877 + +I=253 +KEY=F73E4BBBAB378638677E3931614FB173 +IV=1D4960EBE667AC5DE5ED767183838846 +CT=1CC514E9F4B13FFEF3B076DAC8C62877 +PT=3B1A7D179DDED66A37F3053B8B231EEA + +I=254 +KEY=CC2436AC36E95052508D3C0AEA6CAF99 +IV=974643FDFDB695A44B7EF8676A2B87DD +CT=3B1A7D179DDED66A37F3053B8B231EEA +PT=620A4E7A25E8D05779C0FB8CEBA55A74 + +I=255 +KEY=AE2E78D613018005294DC78601C9F5ED +IV=C9A1D92DB7D553DCAEB3BB81B489257A +CT=620A4E7A25E8D05779C0FB8CEBA55A74 +PT=93508503278ECECE65D67B5F50962C4E + +I=256 +KEY=3D7EFDD5348F4ECB4C9BBCD9515FD9A3 +IV=108E736F1DCD178A8648F6AA6D527732 +CT=93508503278ECECE65D67B5F50962C4E +PT=EA9E953D8B62FFAFF9FAFB97F614D65C + +I=257 +KEY=D7E068E8BFEDB164B561474EA74B0FFF +IV=B893A94302C0DAFB19D7B6656085DCA9 +CT=EA9E953D8B62FFAFF9FAFB97F614D65C +PT=1452ED26E774029EF30D272F8548C2F8 + +I=258 +KEY=C3B285CE5899B3FA466C60612203CD07 +IV=668FF6719E5A29A99876227EEDE5818F +CT=1452ED26E774029EF30D272F8548C2F8 +PT=4083167E5ED1A1A449C1825B84F321E1 + +I=259 +KEY=833193B00648125E0FADE23AA6F0ECE6 +IV=9F6375A022543AB8303368A235813F02 +CT=4083167E5ED1A1A449C1825B84F321E1 +PT=9206639D076685FD2078F9B984B7A03F + +I=260 +KEY=1137F02D012E97A32FD51B8322474CD9 +IV=1B95128E90B110AED9D543D2A996271F +CT=9206639D076685FD2078F9B984B7A03F +PT=AAA3F2BD0126DFD5007DD2835CCB0109 + +I=261 +KEY=BB940290000848762FA8C9007E8C4DD0 +IV=BB2E26A9CDEF9D1B2940EFFBA1971A5D +CT=AAA3F2BD0126DFD5007DD2835CCB0109 +PT=B58BB3761519C1726D75AE96313FB7DE + +I=262 +KEY=0E1FB1E61511890442DD67964FB3FA0E +IV=68D3EC37EE43E3F24072F69F2DFA768D +CT=B58BB3761519C1726D75AE96313FB7DE +PT=4558CD47C012B7293396D7EDFE3CEA85 + +I=263 +KEY=4B477CA1D5033E2D714BB07BB18F108B +IV=F7E107DBF4DDBF7974B699536A4E2803 +CT=4558CD47C012B7293396D7EDFE3CEA85 +PT=6F43B6B28AEF5DD1B66279ACAAB9A589 + +I=264 +KEY=2404CA135FEC63FCC729C9D71B36B502 +IV=B3E6DA8DE5DDF7ED6F832D1306A1C04A +CT=6F43B6B28AEF5DD1B66279ACAAB9A589 +PT=1BA743E148BC164C4C8324D665B5A3BD + +I=265 +KEY=3FA389F2175075B08BAAED017E8316BF +IV=8BBBB56B39893C8F286561EF6E47E66A +CT=1BA743E148BC164C4C8324D665B5A3BD +PT=49A40365092DD1360D916AAEAFD03FC1 + +I=266 +KEY=76078A971E7DA486863B87AFD153297E +IV=48BA08703A306F772E78F660173A26B3 +CT=49A40365092DD1360D916AAEAFD03FC1 +PT=DF7DEB5968D683AAA274B0D5D3F9AA03 + +I=267 +KEY=A97A61CE76AB272C244F377A02AA837D +IV=0C7832F9CDF65DADA7FA809B8DE709C3 +CT=DF7DEB5968D683AAA274B0D5D3F9AA03 +PT=69689E97E9B166DA53E25BDFBCAF4A97 + +I=268 +KEY=C012FF599F1A41F677AD6CA5BE05C9EA +IV=05BC03F59CD8C5FAE4A7240E6168CF41 +CT=69689E97E9B166DA53E25BDFBCAF4A97 +PT=5F87DC71EF2918F75A94E43007FF50E6 + +I=269 +KEY=9F952328703359012D398895B9FA990C +IV=4233E654802B55155E158B650B64718E +CT=5F87DC71EF2918F75A94E43007FF50E6 +PT=4F170790775A6A147E99D251C401969A + +I=270 +KEY=D08224B80769331553A05AC47DFB0F96 +IV=4AEAE53003D5085F5963CC36C4589941 +CT=4F170790775A6A147E99D251C401969A +PT=E566D46360EF38E5CFF0C2E7E7E0D679 + +I=271 +KEY=35E4F0DB67860BF09C5098239A1BD9EF +IV=F6CBFF51F6E59B7AAA9EB1261707429A +CT=E566D46360EF38E5CFF0C2E7E7E0D679 +PT=F7189C4B9E1048ED66D9B7CCD089C5F9 + +I=272 +KEY=C2FC6C90F996431DFA892FEF4A921C16 +IV=0A05A4BFBBCC8B3E218C123A95FFF475 +CT=F7189C4B9E1048ED66D9B7CCD089C5F9 +PT=68FB0909789DBFA672BEEF5DF0017B63 + +I=273 +KEY=AA076599810BFCBB8837C0B2BA936775 +IV=DF1A3AF147E72C2CEAE5D8713D52F572 +CT=68FB0909789DBFA672BEEF5DF0017B63 +PT=AF2784590089186BED3A48ADC1B68562 + +I=274 +KEY=0520E1C08182E4D0650D881F7B25E217 +IV=BFDC5ECF596F5F3CFFEAAF4B961209FA +CT=AF2784590089186BED3A48ADC1B68562 +PT=E8C29D3C129AB8FA797EFDCE4CE4D4F2 + +I=275 +KEY=EDE27CFC93185C2A1C7375D137C136E5 +IV=49195E71516D5117C26814F98FD94C31 +CT=E8C29D3C129AB8FA797EFDCE4CE4D4F2 +PT=6ACF2AE12C38DB520F49E6C90D4B8F03 + +I=276 +KEY=872D561DBF208778133A93183A8AB9E6 +IV=E4FA7788D6E7AFBD08884BFCFA74D30C +CT=6ACF2AE12C38DB520F49E6C90D4B8F03 +PT=78FEA3B57D6176C44CE753FB01416CA6 + +I=277 +KEY=FFD3F5A8C241F1BC5FDDC0E33BCBD540 +IV=08E333F43615229D95E7C425A04EA2B7 +CT=78FEA3B57D6176C44CE753FB01416CA6 +PT=5030D7131ABBD7AC323BA31B602B776E + +I=278 +KEY=AFE322BBD8FA26106DE663F85BE0A22E +IV=64BDE35106D9A66A4216EA20F6C52D06 +CT=5030D7131ABBD7AC323BA31B602B776E +PT=14B32E8BD3BD9D82613E32536E6A9F91 + +I=279 +KEY=BB500C300B47BB920CD851AB358A3DBF +IV=8FB9E6BDCD50610E97CF731216CFE698 +CT=14B32E8BD3BD9D82613E32536E6A9F91 +PT=1F22542AFCE63AA92CCDAF45F8DAEEF0 + +I=280 +KEY=A472581AF7A1813B2015FEEECD50D34F +IV=E18B3C5EDA8CDA9E94A376CEEF687D9F +CT=1F22542AFCE63AA92CCDAF45F8DAEEF0 +PT=FC986510E3ED40994D1C33201D0EDB27 + +I=281 +KEY=58EA3D0A144CC1A26D09CDCED05E0868 +IV=D1828C9DDB263064AD259A2360B3DFBA +CT=FC986510E3ED40994D1C33201D0EDB27 +PT=06C1CE557C9AC5D40560CF2D40DCC47C + +I=282 +KEY=5E2BF35F68D60476686902E39082CC14 +IV=3454FD0698CC8CD949970509C23E50F6 +CT=06C1CE557C9AC5D40560CF2D40DCC47C +PT=4287FA420FD9AFCAB7E290273BDF4054 + +I=283 +KEY=1CAC091D670FABBCDF8B92C4AB5D8C40 +IV=C2F0C044A975ADBD20DE56858A074886 +CT=4287FA420FD9AFCAB7E290273BDF4054 +PT=447AFDD3ACF0DEEB0385799789FBAFF0 + +I=284 +KEY=58D6F4CECBFF7557DC0EEB5322A623B0 +IV=299C337821B0779A7ADC3A04316A6373 +CT=447AFDD3ACF0DEEB0385799789FBAFF0 +PT=BA0BBC980827E87EEA51E66C92C96B31 + +I=285 +KEY=E2DD4856C3D89D29365F0D3FB06F4881 +IV=2368291AD179C3C143E636898EB3E104 +CT=BA0BBC980827E87EEA51E66C92C96B31 +PT=77A6131415B251049423FFFB1F3A8A3A + +I=286 +KEY=957B5B42D66ACC2DA27CF2C4AF55C2BB +IV=14300EA81B57E102AEDD97CCD466E18A +CT=77A6131415B251049423FFFB1F3A8A3A +PT=A7AEC0CC599D56347A72D934DDAC7899 + +I=287 +KEY=32D59B8E8FF79A19D80E2BF072F9BA22 +IV=FD62415C90DACCD22EC364877DB0CB24 +CT=A7AEC0CC599D56347A72D934DDAC7899 +PT=1B1100FCB9F85D8CCFDEC5865083B44D + +I=288 +KEY=29C49B72360FC79517D0EE76227A0E6F +IV=6CB24892D26E43E63819C372D5EB4F6D +CT=1B1100FCB9F85D8CCFDEC5865083B44D +PT=33E9BBD018604F301C2543878FCCCA5C + +I=289 +KEY=1A2D20A22E6F88A50BF5ADF1ADB6C433 +IV=50D84A03998B897D1AE217FEA9A955C4 +CT=33E9BBD018604F301C2543878FCCCA5C +PT=07163D652DB035C091830042D6047DF3 + +I=290 +KEY=1D3B1DC703DFBD659A76ADB37BB2B9C0 +IV=092DF26C855F07690836203E3E1790D0 +CT=07163D652DB035C091830042D6047DF3 +PT=AD6647AF8EFCD4F3B2ECDB4D6FFFC1EB + +I=291 +KEY=B05D5A688D236996289A76FE144D782B +IV=68634C941957E3F58F71BE37D7C5C78B +CT=AD6647AF8EFCD4F3B2ECDB4D6FFFC1EB +PT=D2B51122154D10F67D2C07BD75D5E8E2 + +I=292 +KEY=62E84B4A986E796055B67143619890C9 +IV=3C85044F6438FAA021BB7985A63A959D +CT=D2B51122154D10F67D2C07BD75D5E8E2 +PT=4131E9296FECD2DF35EDFBF0CBD0E54B + +I=293 +KEY=23D9A263F782ABBF605B8AB3AA487582 +IV=46D47F3F12B6ADD5580CE8CE7C7359CD +CT=4131E9296FECD2DF35EDFBF0CBD0E54B +PT=5AEA3E73A6EC0D9D683A3526AC1C0E58 + +I=294 +KEY=79339C10516EA6220861BF9506547BDA +IV=D3C58B190FDA0838C770C2185C553D97 +CT=5AEA3E73A6EC0D9D683A3526AC1C0E58 +PT=A21B17CB4588C30CAD6DF25A5E83E273 + +I=295 +KEY=DB288BDB14E6652EA50C4DCF58D799A9 +IV=870E7F0E3109712E84C58BEC0E7032F6 +CT=A21B17CB4588C30CAD6DF25A5E83E273 +PT=0021FF3BB8336E607B8DE10117005230 + +I=296 +KEY=DB0974E0ACD50B4EDE81ACCE4FD7CB99 +IV=2FC82B298A60FC40DA3EFD4E800DB063 +CT=0021FF3BB8336E607B8DE10117005230 +PT=2EFA32680ECD84891B447393F7C1AC88 + +I=297 +KEY=F5F34688A2188FC7C5C5DF5DB8166711 +IV=E1B86C9FC466B72BE40F65973FC41FC4 +CT=2EFA32680ECD84891B447393F7C1AC88 +PT=722117C1EE83FBA840EFEE86A930579F + +I=298 +KEY=87D251494C9B746F852A31DB1126308E +IV=48E347A705B6E322153BFE567931346F +CT=722117C1EE83FBA840EFEE86A930579F +PT=A684344231EC4C03726A0DC20EADA36D + +I=299 +KEY=2156650B7D77386CF7403C191F8B93E3 +IV=4CD618E5F959FC4C66602263F6C5C652 +CT=A684344231EC4C03726A0DC20EADA36D +PT=F40BFBEAC1C1BD1621FBAE1B605BD092 + +I=300 +KEY=D55D9EE1BCB6857AD6BB92027FD04371 +IV=5A41E8952E6B1C551C4691DE9C0A4B6D +CT=F40BFBEAC1C1BD1621FBAE1B605BD092 +PT=6ECDBFB3947C7E81C7BD4BE93B603728 + +I=301 +KEY=BB90215228CAFBFB1106D9EB44B07459 +IV=52E2726B0855F993E1075077B3AB1E77 +CT=6ECDBFB3947C7E81C7BD4BE93B603728 +PT=71E051375A3B974FE523DA47862E24AE + +I=302 +KEY=CA70706572F16CB4F42503ACC29E50F7 +IV=76B6637161FBE4760FCE90E9868B441A +CT=71E051375A3B974FE523DA47862E24AE +PT=CC6CFBCF9A62A3AE55F6B040673B25B3 + +I=303 +KEY=061C8BAAE893CF1AA1D3B3ECA5A57544 +IV=5563B0C2350A4ED76EE0C322480884FB +CT=CC6CFBCF9A62A3AE55F6B040673B25B3 +PT=DA71B26C4EE3FB1FD413FD0757B379E6 + +I=304 +KEY=DC6D39C6A670340575C04EEBF2160CA2 +IV=45C1C5DAF8DE9170C01E554DD36C564E +CT=DA71B26C4EE3FB1FD413FD0757B379E6 +PT=BCD4BC394FFB46207EF0A8EC9883BD55 + +I=305 +KEY=60B985FFE98B72250B30E6076A95B1F7 +IV=38E5B69E6D82A760BFD65CBAACC56F8A +CT=BCD4BC394FFB46207EF0A8EC9883BD55 +PT=FD997E7A7B77E5DF637182399779AF75 + +I=306 +KEY=9D20FB8592FC97FA6841643EFDEC1E82 +IV=8EB39B261910419E43B178DCD6803572 +CT=FD997E7A7B77E5DF637182399779AF75 +PT=71749C51136457B604CD8B4C193928A8 + +I=307 +KEY=EC5467D48198C04C6C8CEF72E4D5362A +IV=6DFA447305215066A0B5671E5AB80951 +CT=71749C51136457B604CD8B4C193928A8 +PT=DF48D76E54B4264304B0EC036DFDADDE + +I=308 +KEY=331CB0BAD52CE60F683C037189289BF4 +IV=8C2B316ECA96DB57322853E07BE47AB3 +CT=DF48D76E54B4264304B0EC036DFDADDE +PT=5E2BD374B9856C573A4DEBF1B8F453EC + +I=309 +KEY=6D3763CE6CA98A585271E88031DCC818 +IV=E541AC59CFDBEA97D1AE5221F849838E +CT=5E2BD374B9856C573A4DEBF1B8F453EC +PT=D7F97B76A8D3076D343A22459EC4765D + +I=310 +KEY=BACE18B8C47A8D35664BCAC5AF18BE45 +IV=B359889A22B9502571E4817C47BC5348 +CT=D7F97B76A8D3076D343A22459EC4765D +PT=E24F05EEE812BD3389AC0AAC4172F5C6 + +I=311 +KEY=58811D562C683006EFE7C069EE6A4B83 +IV=33F8D881A783051987103096B6C734C3 +CT=E24F05EEE812BD3389AC0AAC4172F5C6 +PT=A2AB44CC9C41A8748201DA6F9429AB39 + +I=312 +KEY=FA2A599AB02998726DE61A067A43E0BA +IV=2028704442AE252BCF1D081C5EE2D80B +CT=A2AB44CC9C41A8748201DA6F9429AB39 +PT=E8FA100D1D28186196BAF990A80109AA + +I=313 +KEY=12D04997AD018013FB5CE396D242E910 +IV=6384E3612062BC6850C94C3B14934A6F +CT=E8FA100D1D28186196BAF990A80109AA +PT=683AEF47A8990E2F8AAD8813789069B1 + +I=314 +KEY=7AEAA6D005988E3C71F16B85AAD280A1 +IV=12F78728F3B0EFAC7D304257E47ED5C8 +CT=683AEF47A8990E2F8AAD8813789069B1 +PT=F3121C95A5BACDEAEFA87C4EE40B6C6D + +I=315 +KEY=89F8BA45A02243D69E5917CB4ED9ECCC +IV=FE654BC69677E13383C4206BFB7896A6 +CT=F3121C95A5BACDEAEFA87C4EE40B6C6D +PT=AE9701378E128847A2669B516795D586 + +I=316 +KEY=276FBB722E30CB913C3F8C9A294C394A +IV=E79D5C468BCBA36A79B74F32F28FA635 +CT=AE9701378E128847A2669B516795D586 +PT=D97D988A40C5B323794F160FE8639262 + +I=317 +KEY=FE1223F86EF578B245709A95C12FAB28 +IV=4F3055450C627AD4712E042666AC0812 +CT=D97D988A40C5B323794F160FE8639262 +PT=32381BA55D5C0C91D683D57593772496 + +I=318 +KEY=CC2A385D33A9742393F34FE052588FBE +IV=172165B468B83B62B41A2B4310461193 +CT=32381BA55D5C0C91D683D57593772496 +PT=4D555F31A60F1007B96FBB458B06A619 + +I=319 +KEY=817F676C95A664242A9CF4A5D95E29A7 +IV=5D5EEBEA67DCD5F7851619F1BAA6414E +CT=4D555F31A60F1007B96FBB458B06A619 +PT=23D1AC0F18C20FCE7E5CC4619F8376D5 + +I=320 +KEY=A2AECB638D646BEA54C030C446DD5F72 +IV=54154B82B5820D5892DABD15B403345D +CT=23D1AC0F18C20FCE7E5CC4619F8376D5 +PT=2E55905A38F818CC04D8A792D2007332 + +I=321 +KEY=8CFB5B39B59C73265018975694DD2C40 +IV=AC47D7619A587DC8213B749918FCFEA8 +CT=2E55905A38F818CC04D8A792D2007332 +PT=010F3396885F8F6BF15170B8E6D221BD + +I=322 +KEY=8DF468AF3DC3FC4DA149E7EE720F0DFD +IV=6CE249D2E89C61ACD029AA3C122427D1 +CT=010F3396885F8F6BF15170B8E6D221BD +PT=4DB3972D9851B8A4B3150A43210D36F0 + +I=323 +KEY=C047FF82A59244E9125CEDAD53023B0D +IV=07A578889914E113C1C4DE01DC4B1DE4 +CT=4DB3972D9851B8A4B3150A43210D36F0 +PT=84F64CFFD705E82704FF3DA4FC074B34 + +I=324 +KEY=44B1B37D7297ACCE16A3D009AF057039 +IV=CE73ADCD7BCF1807C084276EDD765256 +CT=84F64CFFD705E82704FF3DA4FC074B34 +PT=5964DF8E8D656846EE574635787F7B18 + +I=325 +KEY=1DD56CF3FFF2C488F8F4963CD77A0B21 +IV=679903574013011E62CC5798B9633607 +CT=5964DF8E8D656846EE574635787F7B18 +PT=E28E7E3AA93802BEEFE258F38F5D2E5C + +I=326 +KEY=FF5B12C956CAC6361716CECF5827257D +IV=678D8583A022C60BCE2C227627A548B2 +CT=E28E7E3AA93802BEEFE258F38F5D2E5C +PT=D297684A7C50765C413BFA37B5E1E256 + +I=327 +KEY=2DCC7A832A9AB06A562D34F8EDC6C72B +IV=4EF9AACC21733B65B4DD0B1F105D4037 +CT=D297684A7C50765C413BFA37B5E1E256 +PT=9EF5F9A2B14B090A201DE74E4CF714C8 + +I=328 +KEY=B33983219BD1B9607630D3B6A131D3E3 +IV=5CC41FCC9EC19619BA06D10BBC6E1F5F +CT=9EF5F9A2B14B090A201DE74E4CF714C8 +PT=81EF000CF6CA737E0F449927E66F6392 + +I=329 +KEY=32D6832D6D1BCA1E79744A91475EB071 +IV=6DE60CE2986CF80C5D588FA1F9A8C3A0 +CT=81EF000CF6CA737E0F449927E66F6392 +PT=3BE177EE9F8F7BE3BCE0FAA70C0A5025 + +I=330 +KEY=0937F4C3F294B1FDC594B0364B54E054 +IV=BE2F86A52BEED4497790D6134CF0D64E +CT=3BE177EE9F8F7BE3BCE0FAA70C0A5025 +PT=DD313134DB126529F349808B3E766795 + +I=331 +KEY=D406C5F72986D4D436DD30BD752287C1 +IV=A89E52478FDEF91AF151097CED84579C +CT=DD313134DB126529F349808B3E766795 +PT=330203EA36484C8E091F00CD2255E599 + +I=332 +KEY=E704C61D1FCE985A3FC2307057776258 +IV=1AEF7BA63A3E3B6D2EB8EB1980D3E581 +CT=330203EA36484C8E091F00CD2255E599 +PT=E28A47CDB7DB0351006C1D9FB227FCEF + +I=333 +KEY=058E81D0A8159B0B3FAE2DEFE5509EB7 +IV=F67C7FCF8C5AA1574A165D8CBE694BF4 +CT=E28A47CDB7DB0351006C1D9FB227FCEF +PT=ACF869797690853BE142BB7BAC735FC8 + +I=334 +KEY=A976E8A9DE851E30DEEC96944923C17F +IV=636F181C4735E700897928BFC60A43EB +CT=ACF869797690853BE142BB7BAC735FC8 +PT=60FF9BF36809DAEB94F823FC6458B26A + +I=335 +KEY=C989735AB68CC4DB4A14B5682D7B7315 +IV=0829C0EE6B170C490C7A73401761CEAA +CT=60FF9BF36809DAEB94F823FC6458B26A +PT=17630CBEAB904F7996301515F24A1F27 + +I=336 +KEY=DEEA7FE41D1C8BA2DC24A07DDF316C32 +IV=A4E0624D86F1098D2DD4D0408897ACED +CT=17630CBEAB904F7996301515F24A1F27 +PT=A1E35C3E2FA1B1DB11DB96E7DD58AB37 + +I=337 +KEY=7F0923DA32BD3A79CDFF369A0269C705 +IV=D3639A296FF168ED773785CFCACD1015 +CT=A1E35C3E2FA1B1DB11DB96E7DD58AB37 +PT=14F5408460708A69A22A2023B01969CE + +I=338 +KEY=6BFC635E52CDB0106FD516B9B270AECB +IV=37CD0428A0C08CC6AABAAA05D8830557 +CT=14F5408460708A69A22A2023B01969CE +PT=516991CA6530D20AB121394F51288880 + +I=339 +KEY=3A95F29437FD621ADEF42FF6E358264B +IV=FB52F5A95F2E3665D44F0AEACB88B108 +CT=516991CA6530D20AB121394F51288880 +PT=FB0C32B66729736F8E5EC8C92D80FDC5 + +I=340 +KEY=C199C02250D4117550AAE73FCED8DB8E +IV=403B43C740215D94E8FBAE22846D3B0A +CT=FB0C32B66729736F8E5EC8C92D80FDC5 +PT=C243054D022E7E9EFC21F965C71D63EB + +I=341 +KEY=03DAC56F52FA6FEBAC8B1E5A09C5B865 +IV=663796B211E7F6E05B4A107B16A904B0 +CT=C243054D022E7E9EFC21F965C71D63EB +PT=6CA56F6792355B2A7A60A4467A85F71E + +I=342 +KEY=6F7FAA08C0CF34C1D6EBBA1C73404F7B +IV=A23B73DF1477EC98202135164C6EF1AB +CT=6CA56F6792355B2A7A60A4467A85F71E +PT=BC590C8B427B013F873B2F5F8D66D5D1 + +I=343 +KEY=D326A68382B435FE51D09543FE269AAA +IV=E84DF462C62D594AAD94C33C446E18FC +CT=BC590C8B427B013F873B2F5F8D66D5D1 +PT=D37CAA9BEA300FF6219349DBA25DA0A6 + +I=344 +KEY=005A0C1868843A087043DC985C7B3A0C +IV=9AAD322884EBE93D0FA084E144600174 +CT=D37CAA9BEA300FF6219349DBA25DA0A6 +PT=AE50C328AFFC39A103C767C1FD337449 + +I=345 +KEY=AE0ACF30C77803A97384BB59A1484E45 +IV=9CEE91362FB0D50ABCEB58EF49EC3614 +CT=AE50C328AFFC39A103C767C1FD337449 +PT=882939453C6E156CD023B468EDD16C95 + +I=346 +KEY=2623F675FB1616C5A3A70F314C9922D0 +IV=5626126CC424BF26D92C822442E4221E +CT=882939453C6E156CD023B468EDD16C95 +PT=B9A97FE0DEF66604F6CE928AAB532EC2 + +I=347 +KEY=9F8A899525E070C155699DBBE7CA0C12 +IV=E5BB374C14E36FD0C2D5F9191C967EC7 +CT=B9A97FE0DEF66604F6CE928AAB532EC2 +PT=6ED0FF2FE8DA900A33AE20F7C1C2E457 + +I=348 +KEY=F15A76BACD3AE0CB66C7BD4C2608E845 +IV=4493B9F0FF63D392273302B6932C8F77 +CT=6ED0FF2FE8DA900A33AE20F7C1C2E457 +PT=B7583A56BED55067A520B4F5E5C1528F + +I=349 +KEY=46024CEC73EFB0ACC3E709B9C3C9BACA +IV=12E2BFD3EAB69E5132E3CDF8BAFBD45E +CT=B7583A56BED55067A520B4F5E5C1528F +PT=28874485575E292B0C83E1B568019BF0 + +I=350 +KEY=6E85086924B19987CF64E80CABC8213A +IV=3CEFDC726C919CA265CD6C28A05DE542 +CT=28874485575E292B0C83E1B568019BF0 +PT=A35D16BBB96BF3F9E06D96EDA9BB44BB + +I=351 +KEY=CDD81ED29DDA6A7E2F097EE102736581 +IV=4AE79901700F018D1E5D95A9FAD762F2 +CT=A35D16BBB96BF3F9E06D96EDA9BB44BB +PT=367E6880D369D482E7E64CFCD1BCC870 + +I=352 +KEY=FBA676524EB3BEFCC8EF321DD3CFADF1 +IV=52EEDB058A8E1FE7C651D484F86F941F +CT=367E6880D369D482E7E64CFCD1BCC870 +PT=32B33E97C94953392A738A964DB121FC + +I=353 +KEY=C91548C587FAEDC5E29CB88B9E7E8C0D +IV=B3704291187E9D55901DD237EC1E2F24 +CT=32B33E97C94953392A738A964DB121FC +PT=965A9A0C0287AB8535436E95CC9BFB99 + +I=354 +KEY=5F4FD2C9857D4640D7DFD61E52E57794 +IV=B3878FC256FA4F9ED0BA05FF51C0CE2A +CT=965A9A0C0287AB8535436E95CC9BFB99 +PT=367A5C93099ACF72353DAC320A3B766E + +I=355 +KEY=69358E5A8CE78932E2E27A2C58DE01FA +IV=774EA78AECAF5A1D7CC1785DE91CAB01 +CT=367A5C93099ACF72353DAC320A3B766E +PT=116EDEB1D0E6F8D1BB58AF648429B792 + +I=356 +KEY=785B50EB5C0171E359BAD548DCF7B668 +IV=FB1EC4218C5F733A54DEA7F753F45D68 +CT=116EDEB1D0E6F8D1BB58AF648429B792 +PT=EF3C679822E3A906F380CD07EBE65F09 + +I=357 +KEY=976737737EE2D8E5AA3A184F3711E961 +IV=8BBE09AFE41C5A78EBA0524212AC570F +CT=EF3C679822E3A906F380CD07EBE65F09 +PT=291B066A30A3B11681D414A4BB5311D5 + +I=358 +KEY=BE7C31194E4169F32BEE0CEB8C42F8B4 +IV=4E8F651C06778A964AA7D43999E41FD6 +CT=291B066A30A3B11681D414A4BB5311D5 +PT=764F8FD22FE0BD98852F259EA6DC6F7C + +I=359 +KEY=C833BECB61A1D46BAEC129752A9E97C8 +IV=E90A35007EE7F001D1F5982BF2477C82 +CT=764F8FD22FE0BD98852F259EA6DC6F7C +PT=66016373A6B1A3797A1B2D2B19B73126 + +I=360 +KEY=AE32DDB8C7107712D4DA045E3329A6EE +IV=46FF289808B1AF6B290CB5AF05747085 +CT=66016373A6B1A3797A1B2D2B19B73126 +PT=3367064ECF5CA978001887DBDE40DE5A + +I=361 +KEY=9D55DBF6084CDE6AD4C28385ED6978B4 +IV=9BAC8819E1CA613CFAA730FBC2034168 +CT=3367064ECF5CA978001887DBDE40DE5A +PT=5C4F01D47C9DA94DE95FC26763CC1146 + +I=362 +KEY=C11ADA2274D177273D9D41E28EA569F2 +IV=A5CE34A846E1D0A737963C49FAD6378E +CT=5C4F01D47C9DA94DE95FC26763CC1146 +PT=D41D854E42863F161E76A2397020C321 + +I=363 +KEY=15075F6C3657483123EBE3DBFE85AAD3 +IV=2CC823722DD3E8F15035875ED43513E2 +CT=D41D854E42863F161E76A2397020C321 +PT=1C542DC0B54A053471AF583C909AB3C4 + +I=364 +KEY=095372AC831D4D055244BBE76E1F1917 +IV=9799D03B6AD46BECD981279B35DF707C +CT=1C542DC0B54A053471AF583C909AB3C4 +PT=958D0254D7AFE1E678A9844DF4F4D18D + +I=365 +KEY=9CDE70F854B2ACE32AED3FAA9AEBC89A +IV=E0E401C7BA5E319F0D60AB765CBEE176 +CT=958D0254D7AFE1E678A9844DF4F4D18D +PT=C54888169B30587E732BD7213EE5B1A3 + +I=366 +KEY=5996F8EECF82F49D59C6E88BA40E7939 +IV=711DA6521732E6868111DCC1C835F9DF +CT=C54888169B30587E732BD7213EE5B1A3 +PT=446F234FCADA809A8B2E167A86C9EB36 + +I=367 +KEY=1DF9DBA105587407D2E8FEF122C7920F +IV=B7008BC907C546A56743C292185C2B02 +CT=446F234FCADA809A8B2E167A86C9EB36 +PT=6AD93BC7E18B48810664CD1C528BA6C4 + +I=368 +KEY=7720E066E4D33C86D48C33ED704C34CB +IV=4D7DD98183E56F71D72DB76187FC5F95 +CT=6AD93BC7E18B48810664CD1C528BA6C4 +PT=0D75BD2B8683FB819EB7F71E2E0836A7 + +I=369 +KEY=7A555D4D6250C7074A3BC4F35E44026C +IV=F4DCFB73BBE7EB5348D56F81BCBC0971 +CT=0D75BD2B8683FB819EB7F71E2E0836A7 +PT=8CBE14862E93FE011A4F45518C7258FA + +I=370 +KEY=F6EB49CB4CC33906507481A2D2365A96 +IV=5432FBF1480AA398F09CA5AF375FA394 +CT=8CBE14862E93FE011A4F45518C7258FA +PT=4026D669905762F0790B6497646A2D4D + +I=371 +KEY=B6CD9FA2DC945BF6297FE535B65C77DB +IV=CA462DC9F029A8311CA45A4116DADC1D +CT=4026D669905762F0790B6497646A2D4D +PT=A8CD2E187CF274756E5736D420853435 + +I=372 +KEY=1E00B1BAA0662F834728D3E196D943EE +IV=4FC9E7688352F4700C5F380BFD1F4FB2 +CT=A8CD2E187CF274756E5736D420853435 +PT=A99410B60322340E279C87D3D26793AA + +I=373 +KEY=B794A10CA3441B8D60B4543244BED044 +IV=4D90B1A30EB7E957FAE3DC8C132F4F42 +CT=A99410B60322340E279C87D3D26793AA +PT=D136F990196C667EC35E3A0492C39968 + +I=374 +KEY=66A2589CBA287DF3A3EA6E36D67D492C +IV=6FAD87F358F0C702C5E9E599093219ED +CT=D136F990196C667EC35E3A0492C39968 +PT=8CE49C1BAACAB69432DDA2FF4250C7B2 + +I=375 +KEY=EA46C48710E2CB679137CCC9942D8E9E +IV=2B6FF495B7E482360E31949C7C9B2E2B +CT=8CE49C1BAACAB69432DDA2FF4250C7B2 +PT=7942B80F57EA24FA200451B37899F9E2 + +I=376 +KEY=93047C884708EF9DB1339D7AECB4777C +IV=21FDC4C9B03A1A9A3F87FF9AAC80FAAE +CT=7942B80F57EA24FA200451B37899F9E2 +PT=DE156D56E199FDBB2600DBF9FC254003 + +I=377 +KEY=4D1111DEA6911226973346831091377F +IV=387612E399C62916B394A9FC6BC0F059 +CT=DE156D56E199FDBB2600DBF9FC254003 +PT=C302C494D910640271695324E64B0992 + +I=378 +KEY=8E13D54A7F817624E65A15A7F6DA3EED +IV=34BCABDE4646BCC05CAF7E61CBF1F8D2 +CT=C302C494D910640271695324E64B0992 +PT=110CE84E5B81867CE4FCCD1BBB5FD792 + +I=379 +KEY=9F1F3D042400F05802A6D8BC4D85E97F +IV=C7898DA9ABF2A3D364C228A83525B04F +CT=110CE84E5B81867CE4FCCD1BBB5FD792 +PT=7B94C0E4849AD65291F0F7BD464C544C + +I=380 +KEY=E48BFDE0A09A260A93562F010BC9BD33 +IV=00E079EEBC47AF3ED3796DBF4A2B55FC +CT=7B94C0E4849AD65291F0F7BD464C544C +PT=D6518596BB53E44452393BD4440D805C + +I=381 +KEY=32DA78761BC9C24EC16F14D54FC43D6F +IV=03E168F8AF2303593E0F936648D253DC +CT=D6518596BB53E44452393BD4440D805C +PT=0C4B51FB33380BB215F29F3FCE7CA0DA + +I=382 +KEY=3E91298D28F1C9FCD49D8BEA81B89DB5 +IV=15E1ECD59BC092C974FA4738C66D9604 +CT=0C4B51FB33380BB215F29F3FCE7CA0DA +PT=3FC98D86A558B711807930AAA391C9BF + +I=383 +KEY=0158A40B8DA97EED54E4BB402229540A +IV=303BD4A407015A9E899816E0FABF288D +CT=3FC98D86A558B711807930AAA391C9BF +PT=85D77D90C312FE938F6C1983014BD572 + +I=384 +KEY=848FD99B4EBB807EDB88A2C323628178 +IV=E018FA96FD433CFD162E8E67D4F37015 +CT=85D77D90C312FE938F6C1983014BD572 +PT=4F49C1740EA88B5767CE36C95158DD63 + +I=385 +KEY=CBC618EF40130B29BC46940A723A5C1B +IV=84013D3E2AA0C77650644CD6862096A7 +CT=4F49C1740EA88B5767CE36C95158DD63 +PT=E6F1409ABA890AC3A50FC4AAD82E1872 + +I=386 +KEY=2D375875FA9A01EA194950A0AA144469 +IV=8BFD137593BFF254414349F1147B9BFF +CT=E6F1409ABA890AC3A50FC4AAD82E1872 +PT=66F6E29696CFDC72EE905636614D2A72 + +I=387 +KEY=4BC1BAE36C55DD98F7D90696CB596E1B +IV=8EC295602FB66C4A2DCA65F66B07E010 +CT=66F6E29696CFDC72EE905636614D2A72 +PT=553B45792AE0625B357C4B68A4BB767F + +I=388 +KEY=1EFAFF9A46B5BFC3C2A54DFE6FE21864 +IV=5999E221475D06295451E52FF88F9F97 +CT=553B45792AE0625B357C4B68A4BB767F +PT=FAB6F53166BFDB89DF68D46D423C243E + +I=389 +KEY=E44C0AAB200A644A1DCD99932DDE3C5A +IV=49D1944CBD7BE00C671B8E996F9A3EB9 +CT=FAB6F53166BFDB89DF68D46D423C243E +PT=308DDB3FE0415C46AE450C78FC5F2558 + +I=390 +KEY=D4C1D194C04B380CB38895EBD1811902 +IV=9785FEE180794318514967B4199CFB93 +CT=308DDB3FE0415C46AE450C78FC5F2558 +PT=6659969D1BD493A3851E75981BACCCB0 + +I=391 +KEY=B2984709DB9FABAF3696E073CA2DD5B2 +IV=4FD1DAE14DB75AC0E6C94388805AC3B5 +CT=6659969D1BD493A3851E75981BACCCB0 +PT=B56B950D84DCA131FD8A5E2601037B36 + +I=392 +KEY=07F3D2045F430A9ECB1CBE55CB2EAE84 +IV=3ED415E7DDDADD2DC7F0376E6CA42EFE +CT=B56B950D84DCA131FD8A5E2601037B36 +PT=8648F40FA13018563E6F1A799D9FCD91 + +I=393 +KEY=81BB260BFE7312C8F573A42C56B16315 +IV=FEAF76717C0905A601509BD68C6D08E5 +CT=8648F40FA13018563E6F1A799D9FCD91 +PT=66DE6D7A74B36C7EE2737DA526F5C8CD + +I=394 +KEY=E7654B718AC07EB61700D9897044ABD8 +IV=2B808C340320DD64AB9278A9D9A3E247 +CT=66DE6D7A74B36C7EE2737DA526F5C8CD +PT=9BB0D29CDA21452F60B5897186F3FAFB + +I=395 +KEY=7CD599ED50E13B9977B550F8F6B75123 +IV=D2EB48117E2E9FB2058800DE1A442799 +CT=9BB0D29CDA21452F60B5897186F3FAFB +PT=489CDC3A2C1AE7510E03AE36D5EAB0E5 + +I=396 +KEY=344945D77CFBDCC879B6FECE235DE1C6 +IV=427765E0671AA6D32634447687E9B209 +CT=489CDC3A2C1AE7510E03AE36D5EAB0E5 +PT=1D65D0E1235AE47DBCC2C65B59892C4C + +I=397 +KEY=292C95365FA138B5C57438957AD4CD8A +IV=D75E9F074D965FE902287B3BB1483315 +CT=1D65D0E1235AE47DBCC2C65B59892C4C +PT=E75B7AE5A8C3B93F15D0E3EBD04E1B4B + +I=398 +KEY=CE77EFD3F762818AD0A4DB7EAA9AD6C1 +IV=5455FD9A01E04E48CA777CF8185697ED +CT=E75B7AE5A8C3B93F15D0E3EBD04E1B4B +PT=11F4A35F6C225A9DF1CA6BAF92E11B07 + +I=399 +KEY=DF834C8C9B40DB17216EB0D1387BCDC6 +IV=3C608F664492626B2208DC92E819411A +CT=11F4A35F6C225A9DF1CA6BAF92E11B07 +PT=9B8FB71E035CEFF9CBFA1346E5ACEFE0 + +========== + +KEYSIZE=192 + +I=0 +KEY=000000000000000000000000000000000000000000000000 +IV=00000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=5DF678DD17BA4E75B61768C6ADEF7C7B + +I=1 +KEY=8AB601AF30C47B225DF678DD17BA4E75B61768C6ADEF7C7B +IV=3B243F1A9BA094EE8AB601AF30C47B22 +CT=5DF678DD17BA4E75B61768C6ADEF7C7B +PT=F9604074F8FA45AC71959888DD056F9F + +I=2 +KEY=D443B8E25A882D05A49638A9EF400BD9C782F04E70EA13E4 +IV=467E32A79443B0735EF5B94D6A4C5627 +CT=F9604074F8FA45AC71959888DD056F9F +PT=98A957EA6DBE623B7E08F919812A3898 + +I=3 +KEY=5742DCD38C8FD46D3C3F6F4382FE69E2B98A0957F1C02B7C +IV=B9E1062EEDD9A1ED83016431D607F968 +CT=98A957EA6DBE623B7E08F919812A3898 +PT=AD6D29D6482764BB4BC27A87AE5CD877 + +I=4 +KEY=B33625F7872DE4A191524695CAD90D59F24873D05F9CF30B +IV=BD1AAC94D2D39445E474F9240BA230CC +CT=AD6D29D6482764BB4BC27A87AE5CD877 +PT=DA5EB591FDC48F0D9E4EBD373E5717A3 + +I=5 +KEY=35DA9F0A5DB187964B0CF304371D82546C06CEE761CBE4A8 +IV=4782561ED717916986ECBAFDDA9C6337 +CT=DA5EB591FDC48F0D9E4EBD373E5717A3 +PT=3F6E771434E26D4FA5A57CEF9DEE05D6 + +I=6 +KEY=A8182E4F8FD8C7987462841003FFEF1BC9A3B208FC25E17E +IV=093273C6E96EA5399DC2B145D269400E +CT=3F6E771434E26D4FA5A57CEF9DEE05D6 +PT=F8FBFC8CBDD4AA8E8DA58DEA7F2F344C + +I=7 +KEY=71A581F408C35DA48C99789CBE2B459544063FE2830AD532 +IV=3900E8650CA62A25D9BDAFBB871B9A3C +CT=F8FBFC8CBDD4AA8E8DA58DEA7F2F344C +PT=B969AA871D3B35C260D8B36C7E9E8913 + +I=8 +KEY=BCD0E4B5F0B7FB5035F0D21BA310705724DE8C8EFD945C21 +IV=0E2BCF13C2A18FF5CD756541F874A6F4 +CT=B969AA871D3B35C260D8B36C7E9E8913 +PT=6205EECCDD965D45339A2DFE85F52AD7 + +I=9 +KEY=A2796321044D9F5557F53CD77E862D121744A170786176F6 +IV=8B935AB4C17D24D21EA98794F4FA6405 +CT=6205EECCDD965D45339A2DFE85F52AD7 +PT=6BC27204DA1B9BC27E463D0E71557D99 + +I=10 +KEY=AD4506295D5309603C374ED3A49DB6D069029C7E09340B6F +IV=A9AF68AB4EFDB7770F3C6508591E9635 +CT=6BC27204DA1B9BC27E463D0E71557D99 +PT=DB1576A8F1BD88F73E6938E72F9C6DCD + +I=11 +KEY=61ECB6C8660E5E20E722387B55203E27576BA49926A866A2 +IV=DF83746D72419F65CCA9B0E13B5D5740 +CT=DB1576A8F1BD88F73E6938E72F9C6DCD +PT=150D14977B15FD304890D7B9C4F8536E + +I=12 +KEY=03679C91B6C57828F22F2CEC2E35C3171FFB7320E25035CC +IV=59D101131EA2FD7F628B2A59D0CB2608 +CT=150D14977B15FD304890D7B9C4F8536E +PT=7AE22B73B412A81D0BCF422C68DA37F8 + +I=13 +KEY=9A087B9DBC37B12988CD079F9A276B0A1434310C8A8A0234 +IV=F26F03A3C84A49F0996FE70C0AF2C901 +CT=7AE22B73B412A81D0BCF422C68DA37F8 +PT=2D1584CE9B85E7264228A8AFF8FAFF01 + +I=14 +KEY=07489932E5335B38A5D8835101A28C2C561C99A37270FD35 +IV=E76AB1C798119F5D9D40E2AF5904EA11 +CT=2D1584CE9B85E7264228A8AFF8FAFF01 +PT=C1067030225453E808F1FF324C44BE7F + +I=15 +KEY=DC3726E33013BC9964DEF36123F6DFC45EED66913E34434A +IV=55010D6199E792E3DB7FBFD1D520E7A1 +CT=C1067030225453E808F1FF324C44BE7F +PT=3AD7DBD96BB69D63BE39B9A16574AC74 + +I=16 +KEY=EDD4EC10B074A36C5E0928B8484042A7E0D4DF305B40EF3E +IV=18C6FE6D0A2FDD7E31E3CAF380671FF5 +CT=3AD7DBD96BB69D63BE39B9A16574AC74 +PT=3D5D82A4C06B9DDCCC8A6B8BF228482F + +I=17 +KEY=23824573BD3CE30D6354AA1C882BDF7B2C5EB4BBA968A711 +IV=E1DEAECBCFC06BCCCE56A9630D484061 +CT=3D5D82A4C06B9DDCCC8A6B8BF228482F +PT=C0E5F9618F2FAB97EA82F8164DC89860 + +I=18 +KEY=AAA43BC528933502A3B1537D070474ECC6DC4CADE4A03F71 +IV=2CE22FDF7E87B7CC89267EB695AFD60F +CT=C0E5F9618F2FAB97EA82F8164DC89860 +PT=6942155FC9EF8F7CFE37CD6FED03CECF + +I=19 +KEY=A2686C442D636D31CAF34622CEEBFB9038EB81C209A3F1BE +IV=B7772CF7B44B856308CC578105F05833 +CT=6942155FC9EF8F7CFE37CD6FED03CECF +PT=6BA4C261F5173862A6789FB026099571 + +I=20 +KEY=29F645A446D84EACA15784433BFCC3F29E931E722FAA64CF +IV=15CA23A60D99FFF68B9E29E06BBB239D +CT=6BA4C261F5173862A6789FB026099571 +PT=AA9E8C6497CAC6B0C8CC92F8DFE7B455 + +I=21 +KEY=5E9165527010387F0BC90827AC360542565F8C8AF04DD09A +IV=53193227307BBE49776720F636C876D3 +CT=AA9E8C6497CAC6B0C8CC92F8DFE7B455 +PT=7DA426C712E7F2F35087D6AA31CF56AB + +I=22 +KEY=92DC0EEE09F5169E766D2EE0BED1F7B106D85A20C1828631 +IV=85A3D20949963F95CC4D6BBC79E52EE1 +CT=7DA426C712E7F2F35087D6AA31CF56AB +PT=09B9FF5E5833B6CE0010C3D0C4A84C19 + +I=23 +KEY=C45B938E7C18B4107FD4D1BEE6E2417F06C899F0052ACA28 +IV=292A007187D730B956879D6075EDA28E +CT=09B9FF5E5833B6CE0010C3D0C4A84C19 +PT=178F7AC0FF63C33683A001F5C4171316 + +I=24 +KEY=03D99546E931B761685BAB7E1981824985689805C13DD93E +IV=A8D8CD3B96215FCDC78206C895290371 +CT=178F7AC0FF63C33683A001F5C4171316 +PT=C39B82763CF6901170902BE6DC1B9305 + +I=25 +KEY=B52384CAC0B230F5ABC0290825771258F5F8B3E31D264A3B +IV=451968C3AA8D0319B6FA118C29838794 +CT=C39B82763CF6901170902BE6DC1B9305 +PT=85D827F61EC17FD00B10356292C863E2 + +I=26 +KEY=DCF617A990AC4CBB2E180EFE3BB66D88FEE886818FEE29D9 +IV=575103DAEFD233E269D59363501E7C4E +CT=85D827F61EC17FD00B10356292C863E2 +PT=535BAC956D5CAB917E1A1BC28E82F28F + +I=27 +KEY=14D0FCAFFD961CFD7D43A26B56EAC61980F29D43016CDB56 +IV=7DE780ACCF9F1896C826EB066D3A5046 +CT=535BAC956D5CAB917E1A1BC28E82F28F +PT=7E73E89F187EA6D5F5A3044A19C85941 + +I=28 +KEY=AF5BFBC086F1392203304AF44E9460CC7551990918A48217 +IV=633F0251217DECEDBB8B076F7B6725DF +CT=7E73E89F187EA6D5F5A3044A19C85941 +PT=B0976DFD4F0620203AC4ED89D395BAFF + +I=29 +KEY=79FFB93DCF243047B3A72709019240EC4F957480CB3138E8 +IV=C1AAE3E35613DAADD6A442FD49D50965 +CT=B0976DFD4F0620203AC4ED89D395BAFF +PT=5ECB838EC7F9F2E7ADBD719599F829B9 + +I=30 +KEY=681F54ADA7685555ED6CA487C66BB20BE228051552C91151 +IV=4F00D9CD31BE1CC611E0ED90684C6512 +CT=5ECB838EC7F9F2E7ADBD719599F829B9 +PT=8DDA96BD88D3D756306D249ABF99F5F9 + +I=31 +KEY=8663BEBF11817A3060B6323A4EB8655DD245218FED50E4A8 +IV=7CC24DC4B003DE90EE7CEA12B6E92F65 +CT=8DDA96BD88D3D756306D249ABF99F5F9 +PT=479E96E558540B71508FEF3173A6FC68 + +I=32 +KEY=831519BE48B0021A2728A4DF16EC6E2C82CACEBE9EF618C0 +IV=59FFA792DC8618070576A7015931782A +CT=479E96E558540B71508FEF3173A6FC68 +PT=080EA053745BEEBDBC5F7D964EEBD2F7 + +I=33 +KEY=AFC20AF72699543A2F26048C62B780913E95B328D01DCA37 +IV=4E5BDD875324CAC02CD713496E295620 +CT=080EA053745BEEBDBC5F7D964EEBD2F7 +PT=B5A58D345C0260A9E274E2E593B76C44 + +I=34 +KEY=46AEAF002B9A297E9A8389B83EB5E038DCE151CD43AAA673 +IV=C67419FDA89E68B1E96CA5F70D037D44 +CT=B5A58D345C0260A9E274E2E593B76C44 +PT=5200F2D475CA388841CB0DD02C7EB7F6 + +I=35 +KEY=1598E4DD7DA3D7B0C8837B6C4B7FD8B09D2A5C1D6FD41185 +IV=9F5C74A1FE2DFF2153364BDD5639FECE +CT=5200F2D475CA388841CB0DD02C7EB7F6 +PT=B2639C2D26BF2CAF2371CA3A4F3D3476 + +I=36 +KEY=FE63AA4A158B41AE7AE0E7416DC0F41FBE5B962720E925F3 +IV=2DC59704D531C890EBFB4E976828961E +CT=B2639C2D26BF2CAF2371CA3A4F3D3476 +PT=C758ADC41E334CCBF34C40E2AEAA3852 + +I=37 +KEY=86B214FA7F89CE06BDB84A8573F3B8D44D17D6C58E431DA1 +IV=D0982ADEECE45CCC78D1BEB06A028FA8 +CT=C758ADC41E334CCBF34C40E2AEAA3852 +PT=F8E0AA1E780F18A50371CBCB1B63E83F + +I=38 +KEY=C0C34A59DC653DCE4558E09B0BFCA0714E661D0E9520F59E +IV=A252B0F29766A24B46715EA3A3ECF3C8 +CT=F8E0AA1E780F18A50371CBCB1B63E83F +PT=554B524391A7A1679210CFC0152A65CE + +I=39 +KEY=3CF3D7DDFFF704231013B2D89A5B0116DC76D2CE800A9050 +IV=42EE716B821C18FCFC309D84239239ED +CT=554B524391A7A1679210CFC0152A65CE +PT=3273E6C51751407B7E4ECDED7970746D + +I=40 +KEY=7FCC684C43B958F02260541D8D0A416DA2381F23F97AE43D +IV=A4FCB2B8AB7158B9433FBF91BC4E5CD3 +CT=3273E6C51751407B7E4ECDED7970746D +PT=D90B75848AC14ACA3CAD9AF2A15F315F + +I=41 +KEY=240724B451241314FB6B219907CB0BA79E9585D15825D562 +IV=5C4FA1918B04D5F85BCB4CF8129D4BE4 +CT=D90B75848AC14ACA3CAD9AF2A15F315F +PT=753C59B87C45B21D527527C6C2DDEB0D + +I=42 +KEY=F0BEECC2DB5D16F98E5778217B8EB9BACCE0A2179AF83E6F +IV=4E41A4AB69AEE73FD4B9C8768A7905ED +CT=753C59B87C45B21D527527C6C2DDEB0D +PT=156E851810ADB0BF2D28B6150D32CAC7 + +I=43 +KEY=C2FB954C95633B5B9B39FD396B230905E1C8140297CAF4A8 +IV=983906FA7F156CF33245798E4E3E2DA2 +CT=156E851810ADB0BF2D28B6150D32CAC7 +PT=26E671DACE32070A601796207BD045B5 + +I=44 +KEY=BF0BD4C6DDBE22DABDDF8CE3A5110E0F81DF8222EC1AB11D +IV=B3188D29356783AF7DF0418A48DD1981 +CT=26E671DACE32070A601796207BD045B5 +PT=ADAD9072859250A8590F6F54C24E5A77 + +I=45 +KEY=2E4F07AD61768CC010721C9120835EA7D8D0ED762E54EB6A +IV=639F27016A9D99B99144D36BBCC8AE1A +CT=ADAD9072859250A8590F6F54C24E5A77 +PT=AC8AD3933D51D5D71CA90FB73A53F6AD + +I=46 +KEY=9963998A6F982462BCF8CF021DD28B70C479E2C114071DC7 +IV=B2A3ACB0CE942F13B72C9E270EEEA8A2 +CT=AC8AD3933D51D5D71CA90FB73A53F6AD +PT=7319F2825648168F07D525618DA9979A + +I=47 +KEY=417FD42690AAE310CFE13D804B9A9DFFC3ACC7A099AE8A5D +IV=EBB0EF7CE1ACF152D81C4DACFF32C772 +CT=7319F2825648168F07D525618DA9979A +PT=4FC19392439D6CBE6699419355E0590B + +I=48 +KEY=30CD3A2A0910C7268020AE120807F141A5358633CC4ED356 +IV=4DCACE79E4C3ADFE71B2EE0C99BA2436 +CT=4FC19392439D6CBE6699419355E0590B +PT=047FF92A523900A3C46D906163927DDD + +I=49 +KEY=F13EE3ACC9C19E4C845F57385A3EF1E261581652AFDCAE8B +IV=E260680204844E6FC1F3D986C0D1596A +CT=047FF92A523900A3C46D906163927DDD +PT=2DAE78D178D069918CCC11D675E09655 + +I=50 +KEY=91556C720DC982D5A9F12FE922EE9873ED940784DA3C38DE +IV=A4E4973E74B61315606B8FDEC4081C99 +CT=2DAE78D178D069918CCC11D675E09655 +PT=6315A6A029ED7FC5AB3CD38D8DAE561A + +I=51 +KEY=9120A23E63AF3BC2CAE489490B03E7B646A8D40957926EC4 +IV=C02DA24531C794BD0075CE4C6E66B917 +CT=6315A6A029ED7FC5AB3CD38D8DAE561A +PT=65A796C69B769E59D34AD19803F117C6 + +I=52 +KEY=5C6847E25C66145DAF431F8F907579EF95E2059154637902 +IV=0D72A6B0F3959C89CD48E5DC3FC92F9F +CT=65A796C69B769E59D34AD19803F117C6 +PT=70770D19D03DF488FB627F460A225F39 + +I=53 +KEY=F5ECA4C905FF0EC2DF34129640488D676E807AD75E41263B +IV=2F60424B5062D978A984E32B59991A9F +CT=70770D19D03DF488FB627F460A225F39 +PT=C8A66A2CD18286D2148230BAB7D81E11 + +I=54 +KEY=FF86E251C5EC6129179278BA91CA0BB57A024A6DE999382A +IV=CC7330AE077936B10A6A4698C0136FEB +CT=C8A66A2CD18286D2148230BAB7D81E11 +PT=FC0B47BA3E51927A632F457A919818DC + +I=55 +KEY=5C0A7344D6FD6983EB993F00AF9B99CF192D0F17780120F6 +IV=CA119AEE5576E06EA38C9115131108AA +CT=FC0B47BA3E51927A632F457A919818DC +PT=AEEDB360C58C4CDC7ACE87AA1A4B785B + +I=56 +KEY=426948BD499E8A9845748C606A17D51363E388BD624A58AD +IV=920C491DE39D52501E633BF99F63E31B +CT=AEEDB360C58C4CDC7ACE87AA1A4B785B +PT=737ECC4294FF69495DC37DC795EC13CE + +I=57 +KEY=F8AD0E545AA212E6360A4022FEE8BC5A3E20F57AF7A64B63 +IV=B975B70450A41A2DBAC446E9133C987E +CT=737ECC4294FF69495DC37DC795EC13CE +PT=3E7CDC26CCC69E02D08248224A22961E + +I=58 +KEY=C2834233A26DCD8A08769C04322E2258EEA2BD58BD84DD7D +IV=A88326DC57AB80FC3A2E4C67F8CFDF6C +CT=3E7CDC26CCC69E02D08248224A22961E +PT=88177B6502254344A364023BCAD29E79 + +I=59 +KEY=962D892D6CDED6798061E761300B611C4DC6BF6377564304 +IV=D95CFF470B1796D754AECB1ECEB31BF3 +CT=88177B6502254344A364023BCAD29E79 +PT=A10FA825EB6DA0E242D9A381F607472D + +I=60 +KEY=3ADA98C76065214A216E4F44DB66C1FE0F1F1CE281510429 +IV=FBD25798351AF35DACF711EA0CBBF733 +CT=A10FA825EB6DA0E242D9A381F607472D +PT=6B5EE3A222DF46560A12E91C006D303F + +I=61 +KEY=C6AB975CF71B6DDF4A30ACE6F9B987A8050DF5FE813C3416 +IV=6CDB3875008754DAFC710F9B977E4C95 +CT=6B5EE3A222DF46560A12E91C006D303F +PT=A0047B92A93ACF32138A818B6E32B3EE + +I=62 +KEY=FFD0E16A5C955EBAEA34D7745083489A16877475EF0E87F8 +IV=F7061CA37B11E445397B7636AB8E3365 +CT=A0047B92A93ACF32138A818B6E32B3EE +PT=1707FC063700E98FF5FDA98A07A8A1C7 + +I=63 +KEY=AA71EC7061FA246CFD332B726783A115E37ADDFFE8A6263F +IV=1853E27FC0689E6755A10D1A3D6F7AD6 +CT=1707FC063700E98FF5FDA98A07A8A1C7 +PT=06320FA4C0E2F42B364B991243FA053D + +I=64 +KEY=D8685685696CBF5CFB0124D6A761553ED53144EDAB5C2302 +IV=E19A3BEC7EBCA3C87219BAF508969B30 +CT=06320FA4C0E2F42B364B991243FA053D +PT=BB70503E9715D653710C0630211755A7 + +I=65 +KEY=28C2AFFA406EF763407174E83074836DA43D42DD8A4B76A5 +IV=5F3BCA36562AFA82F0AAF97F2902483F +CT=BB70503E9715D653710C0630211755A7 +PT=D632FEF42560770DF318C570AFC85285 + +I=66 +KEY=260B8E0723E9AF3D96438A1C1514F460572587AD25832420 +IV=328A42D3898A81C20EC921FD6387585E +CT=D632FEF42560770DF318C570AFC85285 +PT=B1C847FFF455D002E55FCFAF4A4F69A4 + +I=67 +KEY=F39D3CD6A68DC6BC278BCDE3E1412462B27A48026FCC4D84 +IV=C89E7B4C1BAED0FAD596B2D185646981 +CT=B1C847FFF455D002E55FCFAF4A4F69A4 +PT=9C484252E1FE52CD2DFCCAA3E0118F07 + +I=68 +KEY=61A9714C87B94F27BBC38FB100BF76AF9F8682A18FDDC283 +IV=56B7D716EC6F9A6D92344D9A2134899B +CT=9C484252E1FE52CD2DFCCAA3E0118F07 +PT=85A142323B9877E86F3A5874EA613E87 + +I=69 +KEY=B504BE17C673E81F3E62CD833B270147F0BCDAD565BCFC04 +IV=BEF2C82884510475D4ADCF5B41CAA738 +CT=85A142323B9877E86F3A5874EA613E87 +PT=53D0EF74268F55C1B6CA84415E5A2F6F + +I=70 +KEY=1A63CC27BE45C5106DB222F71DA8548646765E943BE6D36B +IV=CC958CC3874510F0AF67723078362D0F +CT=53D0EF74268F55C1B6CA84415E5A2F6F +PT=7B7DB0F3EFAD244FFCC6991452001DF6 + +I=71 +KEY=4B17520C49F46EAF16CF9204F20570C9BAB0C78069E6CE9D +IV=48D7C0690532AFCC51749E2BF7B1ABBF +CT=7B7DB0F3EFAD244FFCC6991452001DF6 +PT=DD0661DCA2BE8C20E95B3A84CCACDB10 + +I=72 +KEY=1ADE412393310021CBC9F3D850BBFCE953EBFD04A54A158D +IV=4B96B2D0CCADFF7D51C9132FDAC56E8E +CT=DD0661DCA2BE8C20E95B3A84CCACDB10 +PT=E505435777F3781121A4A374684E3268 + +I=73 +KEY=493467065AE405B82ECCB08F274884F8724F5E70CD0427E5 +IV=1E8116EB95B94AFC53EA2625C9D50599 +CT=E505435777F3781121A4A374684E3268 +PT=EF4B4E997DA0DCCBDBB36C020D03E8B5 + +I=74 +KEY=4C94816DF6EBDEF5C187FE165AE85833A9FC3272C007CF50 +IV=29094410F6017E5805A0E66BAC0FDB4D +CT=EF4B4E997DA0DCCBDBB36C020D03E8B5 +PT=FA9BAB377C654ED894024BEBDCED2FA0 + +I=75 +KEY=697A0BC179C07A633B1C5521268D16EB3DFE79991CEAE0F0 +IV=83DD12597A405FB725EE8AAC8F2BA496 +CT=FA9BAB377C654ED894024BEBDCED2FA0 +PT=DD1FDA63382552D007F6F8E995820640 + +I=76 +KEY=D40786ED2A6C15E8E6038F421EA8443B3A0881708968E6B0 +IV=2F3AE5594D9CCEDCBD7D8D2C53AC6F8B +CT=DD1FDA63382552D007F6F8E995820640 +PT=C5FF0EB50BA651F436D0566385860ADA + +I=77 +KEY=9D47680C0159F69A23FC81F7150E15CF0CD8D7130CEEEC6A +IV=1BCFAD6802C41B9A4940EEE12B35E372 +CT=C5FF0EB50BA651F436D0566385860ADA +PT=67AE61A77D77CBFD48C080B21313BBAB + +I=78 +KEY=86E61E031542D2DB4452E0506879DE32441857A11FFD57C1 +IV=3DF4DA1F65C739511BA1760F141B2441 +CT=67AE61A77D77CBFD48C080B21313BBAB +PT=68C8512217CB9C3BBF28011FA5BED044 + +I=79 +KEY=4F93757DE614CB1D2C9AB1727FB24209FB3056BEBA438785 +IV=B2C15424EF4E4637C9756B7EF35619C6 +CT=68C8512217CB9C3BBF28011FA5BED044 +PT=233898C850826172965695499748A1B0 + +I=80 +KEY=C56E54BBB54B22CC0FA229BA2F30237B6D66C3F72D0B2635 +IV=DC2FF5992D9383EF8AFD21C6535FE9D1 +CT=233898C850826172965695499748A1B0 +PT=70069F5E963A820D640B40697BD24716 + +I=81 +KEY=A1EF05CB5AAE7A977FA4B6E4B90AA176096D839E56D96123 +IV=EE8CB982124A394C64815170EFE5585B +CT=70069F5E963A820D640B40697BD24716 +PT=B136CA2EF42A9CFF53410554B28A8F65 + +I=82 +KEY=ACEC084A8CED2F4FCE927CCA4D203D895A2C86CAE453EE46 +IV=515D8B6C167EC8570D030D81D64355D8 +CT=B136CA2EF42A9CFF53410554B28A8F65 +PT=123600CD1B5A664430413021DDC8CBBE + +I=83 +KEY=8325A9391B4E106ADCA47C07567A5BCD6A6DB6EB399B25F8 +IV=5A55A24EC8154E532FC9A17397A33F25 +CT=123600CD1B5A664430413021DDC8CBBE +PT=8ECCA03E10D415557C4E7D92DDBFD791 + +I=84 +KEY=DB877966BE0E84575268DC3946AE4E981623CB79E424F269 +IV=659705F3774E141758A2D05FA540943D +CT=8ECCA03E10D415557C4E7D92DDBFD791 +PT=CB70B675AC6BF92237F1C479516E7E6A + +I=85 +KEY=59027658DEC2B5DE99186A4CEAC5B7BA21D20F00B54A8C03 +IV=C9B803CE2D57D26F82850F3E60CC3189 +CT=CB70B675AC6BF92237F1C479516E7E6A +PT=5D99D06E9BEB82AB1CE22201E8467DBC + +I=86 +KEY=652E430F984201E0C481BA22712E35113D302D015D0CF1BF +IV=1838FACBEAC13CF73C2C35574680B43E +CT=5D99D06E9BEB82AB1CE22201E8467DBC +PT=11D7AED0B552D62677DEB874BF7CF8ED + +I=87 +KEY=8377A2C11B73082DD55614F2C47CE3374AEE9575E2700952 +IV=068170C7E11427DFE659E1CE833109CD +CT=11D7AED0B552D62677DEB874BF7CF8ED +PT=74B108D32ABE8401D22F2C3FB008F670 + +I=88 +KEY=7B89A5C45B0A22BBA1E71C21EEC2673698C1B94A5278FF22 +IV=5283DAD6FA2B605DF8FE070540792A96 +CT=74B108D32ABE8401D22F2C3FB008F670 +PT=7883BD8C4DA81C21C4A5847AD801B7AE + +I=89 +KEY=101261A4D23FDA13D964A1ADA36A7B175C643D308A79488C +IV=E2ED92DE4829CB526B9BC4608935F8A8 +CT=7883BD8C4DA81C21C4A5847AD801B7AE +PT=C865B27C21F6F6E681759C318607D2B9 + +I=90 +KEY=E6A6A13B7A64EB51110113D1829C8DF1DD11A1010C7E9A35 +IV=AB325AD4F1FF1C52F6B4C09FA85B3142 +CT=C865B27C21F6F6E681759C318607D2B9 +PT=E31D7AC0E8ADB302BC6C23A0B1D693ED + +I=91 +KEY=64D366C4F61E139BF21C69116A313EF3617D82A1BDA809D8 +IV=A5201D1770A12A898275C7FF8C7AF8CA +CT=E31D7AC0E8ADB302BC6C23A0B1D693ED +PT=CAE6A97EE64228EEEF02E135944C5C62 + +I=92 +KEY=B006CEF05093DE2238FAC06F8C73161D8E7F639429E455BA +IV=62BD7E3EA22E26BAD4D5A834A68DCDB9 +CT=CAE6A97EE64228EEEF02E135944C5C62 +PT=B7AEF117099F799BB0752C7260A2DFB5 + +I=93 +KEY=160AFF18C06B6C4A8F54317885EC6F863E0A4FE649468A0F +IV=AEBB967838133F64A60C31E890F8B268 +CT=B7AEF117099F799BB0752C7260A2DFB5 +PT=81CCC6EDAD41D9C7986D4E175C71551D + +I=94 +KEY=21112CBE896259CE0E98F79528ADB641A66701F11537DF12 +IV=B695BBE7FA331039371BD3A649093584 +CT=81CCC6EDAD41D9C7986D4E175C71551D +PT=9039E01C6485040A2EDAF4C27FE93870 + +I=95 +KEY=60272333C1B4CCC39EA117894C28B24B88BDF5336ADEE762 +IV=4EE830907337D60241360F8D48D6950D +CT=9039E01C6485040A2EDAF4C27FE93870 +PT=44D359DBE4BE436D5133CD81B72DB5C7 + +I=96 +KEY=25C676A781511A98DA724E52A896F126D98E38B2DDF352A5 +IV=38491C9FD517260445E1559440E5D65B +CT=44D359DBE4BE436D5133CD81B72DB5C7 +PT=7B47F95ED30563BE218E40DB4EAAE836 + +I=97 +KEY=59A7B7512B5DC429A135B70C7B939298F80078699359BA93 +IV=1FD8B8BA8B0492E67C61C1F6AA0CDEB1 +CT=7B47F95ED30563BE218E40DB4EAAE836 +PT=C417F6A6824B165D4C26D631F77E45AC + +I=98 +KEY=82E6CF234BC0AA10652241AAF9D884C5B426AE586427FF3F +IV=5FB017B65FE4AF34DB417872609D6E39 +CT=C417F6A6824B165D4C26D631F77E45AC +PT=41EC9A06B318A4D06636ED5403F46CB7 + +I=99 +KEY=82D69A1D747CF6E024CEDBAC4AC02015D210430C67D39388 +IV=1CC1F56321366F420030553E3FBC5CF0 +CT=41EC9A06B318A4D06636ED5403F46CB7 +PT=38E467F81D919F0A1704E9F5CDF4D5FC + +I=100 +KEY=29EFCA26B9C67E141C2ABC545751BF1FC514AAF9AA274674 +IV=A83BDBF4326AE806AB39503BCDBA88F4 +CT=38E467F81D919F0A1704E9F5CDF4D5FC +PT=A08359A20D6F405018F8180A3E8D0FD1 + +I=101 +KEY=AB20AC8C3C5DA5BEBCA9E5F65A3EFF4FDDECB2F394AA49A5 +IV=A14B10E1A998B04E82CF66AA859BDBAA +CT=A08359A20D6F405018F8180A3E8D0FD1 +PT=A16C303138057144A3ECA63E7398DC93 + +I=102 +KEY=86C5E861B9CEAF041DC5D5C7623B8E0B7E0014CDE7329536 +IV=181D943EA950561D2DE544ED85930ABA +CT=A16C303138057144A3ECA63E7398DC93 +PT=EA1A2E30D890D01979D2BCE1EBE6C922 + +I=103 +KEY=90321C401E4B6B30F7DFFBF7BAAB5E1207D2A82C0CD45C14 +IV=12BDB944D898BC5A16F7F421A785C434 +CT=EA1A2E30D890D01979D2BCE1EBE6C922 +PT=C0D620FCF33031DAD617ADBE8F6D13AC + +I=104 +KEY=84964C3B41FE8E4F3709DB0B499B6FC8D1C5059283B94FB8 +IV=0615AD27B29C55F814A4507B5FB5E57F +CT=C0D620FCF33031DAD617ADBE8F6D13AC +PT=EC4B9AEDBE44C4B74B693D08AA1D175A + +I=105 +KEY=6C6361F2C87BC168DB4241E6F7DFAB7F9AAC389A29A458E2 +IV=E79F33FFCD79681CE8F52DC989854F27 +CT=EC4B9AEDBE44C4B74B693D08AA1D175A +PT=F34D426225ADEC3BD2580BF21EF24B3E + +I=106 +KEY=FDA3FB79F1A16865280F0384D272474448F43368375613DC +IV=1DFE18B10032D35F91C09A8B39DAA90D +CT=F34D426225ADEC3BD2580BF21EF24B3E +PT=E14841B0D0CC1E698DE8053B9F1621E1 + +I=107 +KEY=562D3BF792909255C947423402BE592DC51C3653A840323D +IV=247A46C43AE54F1FAB8EC08E6331FA30 +CT=E14841B0D0CC1E698DE8053B9F1621E1 +PT=D21381B5032426EC3582BBD23739E04E + +I=108 +KEY=9D375E6E32C30A801B54C381019A7FC1F09E8D819F79D273 +IV=E05018C26DC38BBDCB1A6599A05398D5 +CT=D21381B5032426EC3582BBD23739E04E +PT=82034FF505FE67B94373770348A934E5 + +I=109 +KEY=7D1A900B515478DB99578C7404641878B3EDFA82D7D0E696 +IV=498AEA38AB55250CE02DCE656397725B +CT=82034FF505FE67B94373770348A934E5 +PT=018B5B1787138D222F6B39C1291ECD2C + +I=110 +KEY=E74B55A39F67C54298DCD7638377955A9C86C343FECE2BBA +IV=DD89DF396236F9A59A51C5A8CE33BD99 +CT=018B5B1787138D222F6B39C1291ECD2C +PT=CABCB7EA14E821726602272A46CEB825 + +I=111 +KEY=D3FFFE0F27D9200352606089979FB428FA84E469B800939F +IV=A707D154BAC28BDC34B4ABACB8BEE541 +CT=CABCB7EA14E821726602272A46CEB825 +PT=0840D09DF2B14ED4B340D32101D68A54 + +I=112 +KEY=485EC313821A37095A20B014652EFAFC49C43748B9D619CB +IV=ADEF6A8A49BF208B9BA13D1CA5C3170A +CT=0840D09DF2B14ED4B340D32101D68A54 +PT=5EB0166FB04AF38F9EA60929FD641844 + +I=113 +KEY=E841074638A154D90490A67BD5640973D7623E6144B2018F +IV=B1956D86A4F79E40A01FC455BABB63D0 +CT=5EB0166FB04AF38F9EA60929FD641844 +PT=2ECBDAFBD0336A436D89FC12944750EC + +I=114 +KEY=17E86798DB7A64E42A5B7C8005576330BAEBC273D0F55163 +IV=0AFFE19CA1425218FFA960DEE3DB303D +CT=2ECBDAFBD0336A436D89FC12944750EC +PT=A326D8C07EF7A21302A3C6A9C67C371A + +I=115 +KEY=D1A6F2AB7C130A60897DA4407BA0C123B84804DA16896679 +IV=6F630069CD0333BDC64E9533A7696E84 +CT=A326D8C07EF7A21302A3C6A9C67C371A +PT=6D06DDFB9B12A71298E32318F582EF72 + +I=116 +KEY=C7D58104581CB5C5E47B79BBE0B2663120AB27C2E30B890B +IV=80E47BA8410247C5167373AF240FBFA5 +CT=6D06DDFB9B12A71298E32318F582EF72 +PT=E1391A50F140E255A9B2E628F25B9B1D + +I=117 +KEY=00D8EEC433F7D68E054263EB11F284648919C1EA11501216 +IV=96F652822C5D4496C70D6FC06BEB634B +CT=E1391A50F140E255A9B2E628F25B9B1D +PT=1418A2DC8D6DBA4942932D6944011D8A + +I=118 +KEY=71D444358CCCF986115AC1379C9F3E2DCB8AEC8355510F9C +IV=410374DE0D8A79FA710CAAF1BF3B2F08 +CT=1418A2DC8D6DBA4942932D6944011D8A +PT=A70A2C48CF5786868844274B8C493C56 + +I=119 +KEY=B9FD9626EC74A129B650ED7F53C8B8AB43CECBC8D91833CA +IV=8362FAE290801C25C829D21360B858AF +CT=A70A2C48CF5786868844274B8C493C56 +PT=3484BA42558B199E8477B8F8280CDE91 + +I=120 +KEY=94CAEE912A7B443582D4573D0643A135C7B97330F114ED5B +IV=F6ABE3F0A7FFC9E02D3778B7C60FE51C +CT=3484BA42558B199E8477B8F8280CDE91 +PT=5D79433F85C7D4C258487080E340F049 + +I=121 +KEY=1D2F762CF08FAE0ADFAD1402838475F79FF103B012541D12 +IV=A0C57652FBF9107C89E598BDDAF4EA3F +CT=5D79433F85C7D4C258487080E340F049 +PT=C51891EA2E68BC60E84912A91F470201 + +I=122 +KEY=9E691D03A3AEB6491AB585E8ADECC99777B811190D131F13 +IV=8426C338234DB9E183466B2F53211843 +CT=C51891EA2E68BC60E84912A91F470201 +PT=F946FD67DD7F92A7A6B93B4F71F70243 + +I=123 +KEY=61EA6FD274C07ADDE3F3788F70935B30D1012A567CE41D50 +IV=2C2AF70B07E9E6F9FF8372D1D76ECC94 +CT=F946FD67DD7F92A7A6B93B4F71F70243 +PT=B4CB0EFF14F8CDC693CC8E7DCEE8E0B0 + +I=124 +KEY=84F27E5BF8B55DA657387670646B96F642CDA42BB20CFDE0 +IV=693782638B439464E51811898C75277B +CT=B4CB0EFF14F8CDC693CC8E7DCEE8E0B0 +PT=EF6DDB56AAE9CFFE128FB3776DD94D20 + +I=125 +KEY=5B1111EADAECDD73B855AD26CE8259085042175CDFD5B0C0 +IV=A14AAEF7A1BF063BDFE36FB1225980D5 +CT=EF6DDB56AAE9CFFE128FB3776DD94D20 +PT=4ACC6AF28293A647093AE788BA778835 + +I=126 +KEY=A924DC707FB16DF1F299C7D44C11FF4F5978F0D465A238F5 +IV=3F7E73BFA24B0C02F235CD9AA55DB082 +CT=4ACC6AF28293A647093AE788BA778835 +PT=5A7989DC61AD6B66B3E83A29168BEDB9 + +I=127 +KEY=164FBEF9EBAEEF03A8E04E082DBC9429EA90CAFD7329D54C +IV=2FB4F1A000B78156BF6B6289941F82F2 +CT=5A7989DC61AD6B66B3E83A29168BEDB9 +PT=246A94AB8488B39C52DE68E8CA5AE0D2 + +I=128 +KEY=B1F4A368B64A78EC8C8ADAA3A93427B5B84EA215B973359E +IV=5D178EC8305B804FA7BB1D915DE497EF +CT=246A94AB8488B39C52DE68E8CA5AE0D2 +PT=F7C758F8DC8FC0891907EBBF299F70B8 + +I=129 +KEY=9161A39C256814AA7B4D825B75BBE73CA14949AA90EC4526 +IV=C87E61A9434EB29F209500F493226C46 +CT=F7C758F8DC8FC0891907EBBF299F70B8 +PT=E2D82C5506BEFA7D7BF032E4C72141CF + +I=130 +KEY=0BFDA1B2CF4B15199995AE0E73051D41DAB97B4E57CD04E9 +IV=5D00992780D9832B9A9C022EEA2301B3 +CT=E2D82C5506BEFA7D7BF032E4C72141CF +PT=F3A0DF1793FC88117E87478FD9E5A1A8 + +I=131 +KEY=F8F5F6016FECDCAF6A357119E0F99550A43E3CC18E28A541 +IV=2800EECA83EB078CF30857B3A0A7C9B6 +CT=F3A0DF1793FC88117E87478FD9E5A1A8 +PT=BEB572C53E9985218ED9012BAB4A9F5B + +I=132 +KEY=84F3E0D153E140D6D48003DCDE6010712AE73DEA25623A1A +IV=E2BEAF80F4A1DDA27C0616D03C0D9C79 +CT=BEB572C53E9985218ED9012BAB4A9F5B +PT=7F4B21C4B7466149CB890B77AC538752 + +I=133 +KEY=B69E5A72FE9B1B85ABCB221869267138E16E369D8931BD48 +IV=FE0A667B9B2BDD29326DBAA3AD7A5B53 +CT=7F4B21C4B7466149CB890B77AC538752 +PT=4B239C8F83F0A10DC6A3497CC3CF9C8E + +I=134 +KEY=0BCF87D2538E0EADE0E8BE97EAD6D03527CD7FE14AFE21C6 +IV=878250C5EA7834CFBD51DDA0AD151528 +CT=4B239C8F83F0A10DC6A3497CC3CF9C8E +PT=89F2B4B8C5AB2988CDEA61F4D4A1BCD4 + +I=135 +KEY=97A4FDCD2E0C993E691A0A2F2F7DF9BDEA271E159E5F9D12 +IV=95E34D44C3E2FE319C6B7A1F7D829793 +CT=89F2B4B8C5AB2988CDEA61F4D4A1BCD4 +PT=C622E28004842564F193C0E58AB40FCB + +I=136 +KEY=38F0A45980CEF0B9AF38E8AF2BF9DCD91BB4DEF014EB92D9 +IV=1BC195727D154539AF545994AEC26987 +CT=C622E28004842564F193C0E58AB40FCB +PT=DF360FBC1607BCC1E6EE9088AEE62EC7 + +I=137 +KEY=6638E0333D7A6765700EE7133DFE6018FD5A4E78BA0DBC1E +IV=F0AB65A69AA4486A5EC8446ABDB497DC +CT=DF360FBC1607BCC1E6EE9088AEE62EC7 +PT=9A8E5BFE223FA9D747164FC1C98B9CDC + +I=138 +KEY=5103611D32D7A1EFEA80BCED1FC1C9CFBA4C01B9738620C2 +IV=A6617B5DA41B2A32373B812E0FADC68A +CT=9A8E5BFE223FA9D747164FC1C98B9CDC +PT=F0143DD4EC3A85F9FA4D5579BD7268A1 + +I=139 +KEY=64FD310AF27CF98C1A948139F3FB4C36400154C0CEF44863 +IV=EBCB744B477F25E635FE5017C0AB5863 +CT=F0143DD4EC3A85F9FA4D5579BD7268A1 +PT=C5C1FED629BF81EE343E4DAEE6BC4D44 + +I=140 +KEY=9390B012FA7D48D9DF557FEFDA44CDD8743F196E28480527 +IV=7AF352D33C08F3FEF76D81180801B155 +CT=C5C1FED629BF81EE343E4DAEE6BC4D44 +PT=26C4460F0B79E16263C38C240C276E5C + +I=141 +KEY=F578E5DF6818CB58F99139E0D13D2CBA17FC954A246F6B7B +IV=05DA148A4EB4D12966E855CD92658381 +CT=26C4460F0B79E16263C38C240C276E5C +PT=E0E249ADB3A39EE2BB48959426874123 + +I=142 +KEY=F23F67282BAFE10E1973704D629EB258ACB400DE02E82A58 +IV=7748B1652DE54EF9074782F743B72A56 +CT=E0E249ADB3A39EE2BB48959426874123 +PT=C2299AAE24C941DC44E5D492BC492FED + +I=143 +KEY=5CAC16BD99EC5067DB5AEAE34657F384E851D44CBEA105B5 +IV=4F599B9C20378305AE937195B243B169 +CT=C2299AAE24C941DC44E5D492BC492FED +PT=780DA1D6FD961DA4756375A15B8BA620 + +I=144 +KEY=9FF7C1766F7F6F9FA3574B35BBC1EE209D32A1EDE52AA395 +IV=044A8C7FFE220414C35BD7CBF6933FF8 +CT=780DA1D6FD961DA4756375A15B8BA620 +PT=E63FE8BE6566E9ECCCDBEC442BCCCBD5 + +I=145 +KEY=3EA408C4CD15E6F24568A38BDEA707CC51E94DA9CEE66840 +IV=05DE81CD5892F1FEA153C9B2A26A896D +CT=E63FE8BE6566E9ECCCDBEC442BCCCBD5 +PT=19F5E5DDDF0F6FABA9B16B732C6058B8 + +I=146 +KEY=29FF0DD567A810385C9D465601A86867F85826DAE28630F8 +IV=0A2A8BF3BE53E2B5175B0511AABDF6CA +CT=19F5E5DDDF0F6FABA9B16B732C6058B8 +PT=41FCD9F8972431F43669863F37B4A18C + +I=147 +KEY=842E4C2F46849E731D619FAE968C5993CE31A0E5D5329174 +IV=1EABD419CA4C0D0BADD141FA212C8E4B +CT=41FCD9F8972431F43669863F37B4A18C +PT=9857CFE1CFE1046F88DF3EB8ECC92E40 + +I=148 +KEY=8EE3344CCB9DE2038536504F596D5DFC46EE9E5D39FBBF34 +IV=FA266CF1AF82A2250ACD78638D197C70 +CT=9857CFE1CFE1046F88DF3EB8ECC92E40 +PT=DE4C55865FB82BDA1FC0D024791C1B22 + +I=149 +KEY=DEEEC86215A6098D5B7A05C906D57626592E4E7940E7A416 +IV=F9B4CFCA36A1B0AB500DFC2EDE3BEB8E +CT=DE4C55865FB82BDA1FC0D024791C1B22 +PT=077F866BF30097D12650855C71B7DB9C + +I=150 +KEY=50872D11A2E463D65C0583A2F5D5E1F77F7ECB2531507F8A +IV=53D4E4CE2C06FCC38E69E573B7426A5B +CT=077F866BF30097D12650855C71B7DB9C +PT=670BBCB81CDE03B883D9B784124F5851 + +I=151 +KEY=7DE3AF7C8550901C3B0E3F1AE90BE24FFCA77CA1231F27DB +IV=C26330B1219C4B4A2D64826D27B4F3CA +CT=670BBCB81CDE03B883D9B784124F5851 +PT=D6141C300F5E5119E1B5F4BBF415A6DD + +I=152 +KEY=BB126D64220A8DB9ED1A232AE655B3561D12881AD70A8106 +IV=74D773D0F053239CC6F1C218A75A1DA5 +CT=D6141C300F5E5119E1B5F4BBF415A6DD +PT=8F742130206F1047FE9CAAE4F2C31B19 + +I=153 +KEY=9845C3A02214A55D626E021AC63AA311E38E22FE25C99A1F +IV=7EC0B4E8BD4BD3EB2357AEC4001E28E4 +CT=8F742130206F1047FE9CAAE4F2C31B19 +PT=47D0D28AF3164CC77FBAB5C015CAC1C9 + +I=154 +KEY=BBC47FAB874E0ED425BED090352CEFD69C34973E30035BD6 +IV=833EC00D894BD8502381BC0BA55AAB89 +CT=47D0D28AF3164CC77FBAB5C015CAC1C9 +PT=3202B04CFC260747BF839FF754A01E26 + +I=155 +KEY=BCC028DA5F286DE017BC60DCC90AE89123B708C964A345F0 +IV=8BCC8079D2175F4407045771D8666334 +CT=3202B04CFC260747BF839FF754A01E26 +PT=75E9FBADAD8885FB2398427EE94C5899 + +I=156 +KEY=352B0CD3E3BA0EB462559B7164826D6A002F4AB78DEF1D69 +IV=0B159F18C1F33EA389EB2409BC926354 +CT=75E9FBADAD8885FB2398427EE94C5899 +PT=90DA906982058C84D2E75B5DAE0EA756 + +I=157 +KEY=6F32D4393B37EA77F28F0B18E687E1EED2C811EA23E1BA3F +IV=2F5C35DA76038E4F5A19D8EAD88DE4C3 +CT=90DA906982058C84D2E75B5DAE0EA756 +PT=705C22072FDFB807A49BAE0FD4D254AF + +I=158 +KEY=5740616769DDF57482D3291FC95859E97653BFE5F733EE90 +IV=B276B0CE56828D683872B55E52EA1F03 +CT=705C22072FDFB807A49BAE0FD4D254AF +PT=A966EE217CF2BDBC17A0BB55AE769FEB + +I=159 +KEY=C9E379BDBC05CC402BB5C73EB5AAE45561F304B05945717B +IV=E1F41EF2147CB5CE9EA318DAD5D83934 +CT=A966EE217CF2BDBC17A0BB55AE769FEB +PT=239D761F1F0437935464C4959546B6BB + +I=160 +KEY=7B2C4F503FCC91AE0828B121AAAED3C63597C025CC03C7C0 +IV=6F90097C7822030DB2CF36ED83C95DEE +CT=239D761F1F0437935464C4959546B6BB +PT=499477B6476BA58CAEF81290ABDD46C4 + +I=161 +KEY=42BC1C4F29D1801D41BCC697EDC5764A9B6FD2B567DE8104 +IV=1571EE53AE1ACAEF3990531F161D11B3 +CT=499477B6476BA58CAEF81290ABDD46C4 +PT=ACC1FB947EB4C7F115871859CD254D96 + +I=162 +KEY=9BE24C041BF4DEECED7D3D039371B1BB8EE8CAECAAFBCC92 +IV=E24F4DBEF2122A73D95E504B32255EF1 +CT=ACC1FB947EB4C7F115871859CD254D96 +PT=85DC9D7ADF342B0733CF9812CFD58F0A + +I=163 +KEY=83BEBEB5727649F268A1A0794C459ABCBD2752FE652E4398 +IV=AF0690E77B1F140B185CF2B16982971E +CT=85DC9D7ADF342B0733CF9812CFD58F0A +PT=7ED8B4DCBD1D13BEA5C819E99ECF75AA + +I=164 +KEY=7020802D561D88AD167914A5F158890218EF4B17FBE13632 +IV=F0AC93D8DDD31D5BF39E3E98246BC15F +CT=7ED8B4DCBD1D13BEA5C819E99ECF75AA +PT=C81F0464C2DE212229370C7A4ED2E890 + +I=165 +KEY=39F8EA2D638410ABDE6610C13386A82031D8476DB533DEA2 +IV=FD6338FAE6F6B00B49D86A0035999806 +CT=C81F0464C2DE212229370C7A4ED2E890 +PT=23A0FA99C632BCC62A035A09514C3EBA + +I=166 +KEY=52FA33F30EFD8D0FFDC6EA58F5B414E61BDB1D64E47FE018 +IV=04C6E0136D8E04C16B02D9DE6D799DA4 +CT=23A0FA99C632BCC62A035A09514C3EBA +PT=9F7F1081AE4B6AD51D395D764D2D5B68 + +I=167 +KEY=95C21BD9257B233A62B9FAD95BFF7E3306E24012A952BB70 +IV=72410E03AAE65889C738282A2B86AE35 +CT=9F7F1081AE4B6AD51D395D764D2D5B68 +PT=5F088092968BF4AF04BF862A6721DF2B + +I=168 +KEY=058F749326AE1DD53DB17A4BCD748A9C025DC638CE73645B +IV=D678325E266D12D7904D6F4A03D53EEF +CT=5F088092968BF4AF04BF862A6721DF2B +PT=15670F60D1D70E129418AC14A425DD70 + +I=169 +KEY=23D2D59C5EF4AF3D28D6752B1CA3848E96456A2C6A56B92B +IV=BB7B672A91E9A61A265DA10F785AB2E8 +CT=15670F60D1D70E129418AC14A425DD70 +PT=3273AC9D250F729AE790A941739C79BF + +I=170 +KEY=E11B1F94517914C81AA5D9B639ACF61471D5C36D19CAC094 +IV=AB84F623EFA11728C2C9CA080F8DBBF5 +CT=3273AC9D250F729AE790A941739C79BF +PT=9B135880CB56A8E6CF3A364CC6E02175 + +I=171 +KEY=66F867085DBE626581B68136F2FA5EF2BEEFF521DF2AE1E1 +IV=01ED899C8DC9C09E87E3789C0CC776AD +CT=9B135880CB56A8E6CF3A364CC6E02175 +PT=681D6FC5447CCFE1152156CFF6172B6A + +I=172 +KEY=98505FCD27DAB39EE9ABEEF3B6869113ABCEA3EE293DCA8B +IV=A58C8285C31035B1FEA838C57A64D1FB +CT=681D6FC5447CCFE1152156CFF6172B6A +PT=6E30DF3FBD67A5FD491E315EF3A268A0 + +I=173 +KEY=9F904A41C19B57A9879B31CC0BE134EEE2D092B0DA9FA22B +IV=6F46DCB3A84FD96907C0158CE641E437 +CT=6E30DF3FBD67A5FD491E315EF3A268A0 +PT=5B4980E24D8F9CABE017991326FBBE95 + +I=174 +KEY=A330D5A6779731D6DCD2B12E466EA84502C70BA3FC641CBE +IV=C5BDAB77E0CA95463CA09FE7B60C667F +CT=5B4980E24D8F9CABE017991326FBBE95 +PT=7324530BF94BD80D286C9BE2FE4113D3 + +I=175 +KEY=20F008DE76D7968AAFF6E225BF2570482AAB904102250F6D +IV=32F5EC4AEBB997C583C0DD780140A75C +CT=7324530BF94BD80D286C9BE2FE4113D3 +PT=B163425AB21DF6AFBD2C7000E777E902 + +I=176 +KEY=0F48153B232E71F41E95A07F0D3886E79787E041E552E66F +IV=3D1854E0C481B28E2FB81DE555F9E77E +CT=B163425AB21DF6AFBD2C7000E777E902 +PT=EB1A6C86C3811E3081325F35BA7F2DCA + +I=177 +KEY=96EE2134FD40CA34F58FCCF9CEB998D716B5BF745F2DCBA5 +IV=8629366A8B8E266499A6340FDE6EBBC0 +CT=EB1A6C86C3811E3081325F35BA7F2DCA +PT=E9675AF0035C3F8E9D5E58D0652BF5C7 + +I=178 +KEY=BF754C828BFE309B1CE89609CDE5A7598BEBE7A43A063E62 +IV=566D5FCEC3FF7D43299B6DB676BEFAAF +CT=E9675AF0035C3F8E9D5E58D0652BF5C7 +PT=24B4DA85EEFAA123948C6B5E0E07EB08 + +I=179 +KEY=F0223B4AF5C885B4385C4C8C231F067A1F678CFA3401D56A +IV=67B98EC651B057104F5777C87E36B52F +CT=24B4DA85EEFAA123948C6B5E0E07EB08 +PT=753CFEBBB9E623453B8BB2976B8D7BD4 + +I=180 +KEY=04665169E091DEF74D60B2379AF9253F24EC3E6D5F8CAEBE +IV=BC3806A9E56A1DACF4446A2315595B43 +CT=753CFEBBB9E623453B8BB2976B8D7BD4 +PT=6949284723B4F795D530B366FAE70876 + +I=181 +KEY=9CABB1CFD4E46F8324299A70B94DD2AAF1DC8D0BA56BA6C8 +IV=8C864563BB8D45A098CDE0A63475B174 +CT=6949284723B4F795D530B366FAE70876 +PT=D43FED9A25C62349787F0336BFFBBFEB + +I=182 +KEY=4407065E88AE79D9F01677EA9C8BF1E389A38E3D1A901923 +IV=539CC5888B34198FD8ACB7915C4A165A +CT=D43FED9A25C62349787F0336BFFBBFEB +PT=030733E175916579F582A778B261DA1C + +I=183 +KEY=84D1EE80E8FA54DEF311440BE91A949A7C212945A8F1C33F +IV=78306F4F56DEF759C0D6E8DE60542D07 +CT=030733E175916579F582A778B261DA1C +PT=F7B1ABE4B4AE3CB726F9A88B06D4552A + +I=184 +KEY=E885BEA6176A75D804A0EFEF5DB4A82D5AD881CEAE259615 +IV=3AC80B78F744208A6C545026FF902106 +CT=F7B1ABE4B4AE3CB726F9A88B06D4552A +PT=DA984A2C346A4B758E066EB509079168 + +I=185 +KEY=2E0317B2DB3F9893DE38A5C369DEE358D4DEEF7BA722077D +IV=FC74E03B1068A6FEC686A914CC55ED4B +CT=DA984A2C346A4B758E066EB509079168 +PT=21F473636EF27B91F29BB1CE67908763 + +I=186 +KEY=850E1B37E1F7DD89FFCCD6A0072C98C926455EB5C0B2801E +IV=7DFD76EE7EF97796AB0D0C853AC8451A +CT=21F473636EF27B91F29BB1CE67908763 +PT=9EEF6E211CC8EDBD3C4FBE3E14B13C70 + +I=187 +KEY=655D365D66CAA5C36123B8811BE475741A0AE08BD403BC6E +IV=33318C04CC0B3CBDE0532D6A873D784A +CT=9EEF6E211CC8EDBD3C4FBE3E14B13C70 +PT=8AB49333CA7B2E58E7B24536BB34DEE7 + +I=188 +KEY=BE3C315647F981DCEB972BB2D19F5B2CFDB8A5BD6F376289 +IV=79D06A0D66B5C2B1DB61070B2133241F +CT=8AB49333CA7B2E58E7B24536BB34DEE7 +PT=323D1E775FD729005DA7A2853A855ED4 + +I=189 +KEY=3126E544A65724C4D9AA35C58E48722CA01F073855B23C5D +IV=CC5C9D95685AF1228F1AD412E1AEA518 +CT=323D1E775FD729005DA7A2853A855ED4 +PT=E283016FEDADEBA2BEC7ADB5A8DEA8B9 + +I=190 +KEY=BCF052AFAFA4852D3B2934AA63E5998E1ED8AA8DFD6C94E4 +IV=2753144E0A26D9FE8DD6B7EB09F3A1E9 +CT=E283016FEDADEBA2BEC7ADB5A8DEA8B9 +PT=9A9BB977D53BBD47550DC60A49AFA0FA + +I=191 +KEY=ECB724A85CBC7B58A1B28DDDB6DE24C94BD56C87B4C3341E +IV=27F910046A94AA3B50477607F318FE75 +CT=9A9BB977D53BBD47550DC60A49AFA0FA +PT=AF4C7AC3B02C1B077E8F97B59AE52A21 + +I=192 +KEY=BCA9E9794F9004AB0EFEF71E06F23FCE355AFB322E261E3F +IV=8AF06705FE272571501ECDD1132C7FF3 +CT=AF4C7AC3B02C1B077E8F97B59AE52A21 +PT=A97DEE2A64DFA7C198B6A4F21E80F7DF + +I=193 +KEY=10DCC14B9A309E25A7831934622D980FADEC5FC030A6E9E0 +IV=B04E1C6FC657B8AEAC752832D5A09A8E +CT=A97DEE2A64DFA7C198B6A4F21E80F7DF +PT=34E8228A24C7A16F9ED3F4B9A94AA70D + +I=194 +KEY=9CB6EE6AAEFAFBED936B3BBE46EA3960333FAB7999EC4EED +IV=6A966EBB8F80A1608C6A2F2134CA65C8 +CT=34E8228A24C7A16F9ED3F4B9A94AA70D +PT=99E6CA896906CBAA9B8D01155D1DB162 + +I=195 +KEY=461916712E8BD6F10A8DF1372FECF2CAA8B2AA6CC4F1FF8F +IV=EAF849974783FAA7DAAFF81B80712D1C +CT=99E6CA896906CBAA9B8D01155D1DB162 +PT=6009B53EB4690C1F1F10639F1FD7640A + +I=196 +KEY=5B9B91A966F9CE146A8444099B85FED5B7A2C9F3DB269B85 +IV=3FB045D182F781EB1D8287D8487218E5 +CT=6009B53EB4690C1F1F10639F1FD7640A +PT=88ED4BC34A27F4C4B480B99857EBF541 + +I=197 +KEY=404F7D8B0E966F02E2690FCAD1A20A110322706B8CCD6EC4 +IV=49C0F4571BAEBE4C1BD4EC22686FA116 +CT=88ED4BC34A27F4C4B480B99857EBF541 +PT=B88F0E3E01FEDF97766AC6B762D2EBC3 + +I=198 +KEY=CB2EA99F330A3A865AE601F4D05CD5867548B6DCEE1F8507 +IV=2518DA0D88C02EC38B61D4143D9C5584 +CT=B88F0E3E01FEDF97766AC6B762D2EBC3 +PT=C1C167FF37E89937DCB8D79C9BC9EC74 + +I=199 +KEY=913C795CF72CD1219B27660BE7B44CB1A9F0614075D66973 +IV=37769A59390261FB5A12D0C3C426EBA7 +CT=C1C167FF37E89937DCB8D79C9BC9EC74 +PT=64D912270A1E60192CDAAD8168219E56 + +I=200 +KEY=05F19DF919E44144FFFE742CEDAA2CA8852ACCC11DF7F725 +IV=63E9D4D1BDD7FEAD94CDE4A5EEC89065 +CT=64D912270A1E60192CDAAD8168219E56 +PT=C9AD2DBB1C686A67A3E21A5659576A2B + +I=201 +KEY=099D0DCE5E4E194236535997F1C246CF26C8D69744A09D0E +IV=A01E3F917EF4652F0C6C903747AA5806 +CT=C9AD2DBB1C686A67A3E21A5659576A2B +PT=244C740B4B136C6C480D0147163868D1 + +I=202 +KEY=EA1F242E9C75C712121F2D9CBAD12AA36EC5D7D05298F5DF +IV=C9D2288C473BCB3EE38229E0C23BDE50 +CT=244C740B4B136C6C480D0147163868D1 +PT=A6B125A9C570CC3ECBB5D302ADB96E34 + +I=203 +KEY=CD5D7C91FBDC81A1B4AE08357FA1E69DA57004D2FF219BEB +IV=871F525F8ED73B7F274258BF67A946B3 +CT=A6B125A9C570CC3ECBB5D302ADB96E34 +PT=0F9862A4A21E1FB365135C07577FB3EE + +I=204 +KEY=F7D9B8C22BDC8005BB366A91DDBFF92EC06358D5A85E2805 +IV=01BB0A9A8737C19D3A84C453D00001A4 +CT=0F9862A4A21E1FB365135C07577FB3EE +PT=D833DB436E1751B882D03FADF683690B + +I=205 +KEY=83F81E3CED72F22F6305B1D2B3A8A89642B367785EDD410E +IV=80E0E7001CCA60CA7421A6FEC6AE722A +CT=D833DB436E1751B882D03FADF683690B +PT=0AE2C64D2C577C420F26F2F48AA58D62 + +I=206 +KEY=63310E5F2F8F0E0769E7779F9FFFD4D44D95958CD478CC6C +IV=57E54995CDC9417DE0C91063C2FDFC28 +CT=0AE2C64D2C577C420F26F2F48AA58D62 +PT=B0E2976AA3891A2C71AFEB063E3C4383 + +I=207 +KEY=F3AE2989B3980DC9D905E0F53C76CEF83C3A7E8AEA448FEF +IV=999DD6C2B1C528E2909F27D69C1703CE +CT=B0E2976AA3891A2C71AFEB063E3C4383 +PT=16F8A305177ECDBA15403FE5D8EEF60D + +I=208 +KEY=52CF17D8DEA4CE5ACFFD43F02B080342297A416F32AA79E2 +IV=C9F5BC961057F845A1613E516D3CC393 +CT=16F8A305177ECDBA15403FE5D8EEF60D +PT=A607A3EE165E82711B30B44CF4E0C4CF + +I=209 +KEY=E22ADE79E75FE58E69FAE01E3D568133324AF523C64ABD2D +IV=E153F25DD207351AB0E5C9A139FB2BD4 +CT=A607A3EE165E82711B30B44CF4E0C4CF +PT=5191CDD0D077AD6BE956AF8E8E39FECA + +I=210 +KEY=38C58EA4EA1E8D4C386B2DCEED212C58DB1C5AAD487343E7 +IV=F55357187F06B142DAEF50DD0D4168C2 +CT=5191CDD0D077AD6BE956AF8E8E39FECA +PT=F63A42508522E5F09C31F160298E8E6F + +I=211 +KEY=8C29CD4F1330EF25CE516F9E6803C9A8472DABCD61FDCD88 +IV=2CBD520E6F6F89C7B4EC43EBF92E6269 +CT=F63A42508522E5F09C31F160298E8E6F +PT=E58ED2EA8671DC5D527CDE01C6D9655D + +I=212 +KEY=3650C9671F38CD752BDFBD74EE7215F5155175CCA724A8D5 +IV=73CA969AECA5574BBA7904280C082250 +CT=E58ED2EA8671DC5D527CDE01C6D9655D +PT=5FFCACC68357B6709F5B10D48C65EA40 + +I=213 +KEY=6F68A078A75FF5A1742311B26D25A3858A0A65182B414295 +IV=DEA2D7D8F9FE3E7D5938691FB86738D4 +CT=5FFCACC68357B6709F5B10D48C65EA40 +PT=10BBA695F25C1F9412DB80F59F937F84 + +I=214 +KEY=9E08E5F9EEC5A7606498B7279F79BC1198D1E5EDB4D23D11 +IV=20E4DE61513233E5F1604581499A52C1 +CT=10BBA695F25C1F9412DB80F59F937F84 +PT=36CAF539734BCAF8250595E5E5DB3E94 + +I=215 +KEY=F72A5636B3A2D23B5252421EEC3276E9BDD4700851090385 +IV=9DEBE05128A2A1A06922B3CF5D67755B +CT=36CAF539734BCAF8250595E5E5DB3E94 +PT=C64074C9A34850C6FD1B12CD8AE9EF30 + +I=216 +KEY=D74FABF587AB10AA941236D74F7A262F40CF62C5DBE0ECB5 +IV=DEF3A637247B78C02065FDC33409C291 +CT=C64074C9A34850C6FD1B12CD8AE9EF30 +PT=DF663CE4199BC64ACB9B6F99D69EC679 + +I=217 +KEY=8D12BAEA80612A284B740A3356E1E0658B540D5C0D7E2ACC +IV=7D9C0365E66F1A355A5D111F07CA3A82 +CT=DF663CE4199BC64ACB9B6F99D69EC679 +PT=CD1BCBDCE7F8C008177E25B83604EE83 + +I=218 +KEY=57B4196767474175866FC1EFB119206D9C2A28E43B7AC44F +IV=41846FA05FC28ABCDAA6A38DE7266B5D +CT=CD1BCBDCE7F8C008177E25B83604EE83 +PT=CD7E96FE44368C4AD22E9D4F6BE3C2C2 + +I=219 +KEY=CBA15BF34D728F0E4B115711F52FAC274E04B5AB5099068D +IV=873A6522E20108C09C1542942A35CE7B +CT=CD7E96FE44368C4AD22E9D4F6BE3C2C2 +PT=BCC88D6EAF2E41D9AA6E7C91DADCF92E + +I=220 +KEY=D3071140E7C7E244F7D9DA7F5A01EDFEE46AC93A8A45FFA3 +IV=A50F782EA949C2A718A64AB3AAB56D4A +CT=BCC88D6EAF2E41D9AA6E7C91DADCF92E +PT=1FFD3EC8E0D0AD8F3D23961703C0C445 + +I=221 +KEY=3F44AB6E12394D24E824E4B7BAD14071D9495F2D89853BE6 +IV=501500DC8A97D00BEC43BA2EF5FEAF60 +CT=1FFD3EC8E0D0AD8F3D23961703C0C445 +PT=1D3D85A9A4BF101E12CC79640D716AC6 + +I=222 +KEY=D6B97A7D0CEBEA71F519611E1E6E506FCB85264984F45120 +IV=84933D2D2F1F6C13E9FDD1131ED2A755 +CT=1D3D85A9A4BF101E12CC79640D716AC6 +PT=A2228D0483F9CF74CAA301FD30D7DB68 + +I=223 +KEY=E86CCBF22BAF7B31573BEC1A9D979F1B012627B4B4238A48 +IV=4AE5BFEB7168981E3ED5B18F27449140 +CT=A2228D0483F9CF74CAA301FD30D7DB68 +PT=D43E1D2C7447B7C08BCA25F8371AEECF + +I=224 +KEY=0279786975DB97998305F136E9D028DB8AEC024C83396487 +IV=2FC19D77503C0296EA15B39B5E74ECA8 +CT=D43E1D2C7447B7C08BCA25F8371AEECF +PT=4F97B6C0B7D10763CD5CE3A45855FEC0 + +I=225 +KEY=7F842708B71AD43BCC9247F65E012FB847B0E1E8DB6C9A47 +IV=BAC3ED277430C4537DFD5F61C2C143A2 +CT=4F97B6C0B7D10763CD5CE3A45855FEC0 +PT=067B1521895AE654CA0C20492A9714B8 + +I=226 +KEY=2FA21F709793A1C7CAE952D7D75BC9EC8DBCC1A1F1FB8EFF +IV=66014BDC0AD70ABB50263878208975FC +CT=067B1521895AE654CA0C20492A9714B8 +PT=E07E7A1D3F39E45E3A755A82EE3C2EBC + +I=227 +KEY=671468BAD93EDBD32A9728CAE8622DB2B7C99B231FC7A043 +IV=47BFF88E3EC2E8DC48B677CA4EAD7A14 +CT=E07E7A1D3F39E45E3A755A82EE3C2EBC +PT=0933D51670E8918147A56816B838BC74 + +I=228 +KEY=9749A2F6B448445023A4FDDC988ABC33F06CF335A7FF1C37 +IV=58F8C33F4725EED2F05DCA4C6D769F83 +CT=0933D51670E8918147A56816B838BC74 +PT=E90570CDFC2CDCC99826780CA7CD7A1C + +I=229 +KEY=C43D753C2489B403CAA18D1164A660FA684A8B390032662B +IV=C4027E5BF29E96A65374D7CA90C1F053 +CT=E90570CDFC2CDCC99826780CA7CD7A1C +PT=65B6C303491459554CDDA630AAB36C12 + +I=230 +KEY=32F2C804DF89C908AF174E122DB239AF24972D09AA810A39 +IV=51DE94724DCE9B10F6CFBD38FB007D0B +CT=65B6C303491459554CDDA630AAB36C12 +PT=A0B1694685785EFBDD6DB8E4FC312BC4 + +I=231 +KEY=9431549183D690920FA62754A8CA6754F9FA95ED56B021FD +IV=5CBDC9F06F45D2F5A6C39C955C5F599A +CT=A0B1694685785EFBDD6DB8E4FC312BC4 +PT=C271A8F639D1A293F4B8899428F618C2 + +I=232 +KEY=0AA1211F2A2134DACDD78FA2911BC5C70D421C797E46393F +IV=E52D7ACAF5DFAF799E90758EA9F7A448 +CT=C271A8F639D1A293F4B8899428F618C2 +PT=AB7968C2A1859D5AEBFAEB201910B672 + +I=233 +KEY=88BFBDDC6D21FC0E66AEE760309E589DE6B8F75967568F4D +IV=15AF9C49191BF995821E9CC34700C8D4 +CT=AB7968C2A1859D5AEBFAEB201910B672 +PT=59D394BB9C41BE21C050A9DF2DD94C2B + +I=234 +KEY=05AB922FA8B6F5FF3F7D73DBACDFE6BC26E85E864A8FC366 +IV=0FB568270892E7A98D142FF3C59709F1 +CT=59D394BB9C41BE21C050A9DF2DD94C2B +PT=43F89BAE0DCCB0EAF30411E6239A753C + +I=235 +KEY=7A7ED7932DED53767C85E875A1135656D5EC4F606915B65A +IV=48F1E1DAEE9C16CD7FD545BC855BA689 +CT=43F89BAE0DCCB0EAF30411E6239A753C +PT=8196A2F49E2508443F86B294D71A5D5E + +I=236 +KEY=8955F595C21BF3AAFD134A813F365E12EA6AFDF4BE0FEB04 +IV=B3DEB1ED557CB477F32B2206EFF6A0DC +CT=8196A2F49E2508443F86B294D71A5D5E +PT=5ED45F8741E7FC5C77CAACA9D3DFA26D + +I=237 +KEY=09205C9C2A528A5BA3C715067ED1A24E9DA0515D6DD04969 +IV=3742941BC0992AAC8075A909E84979F1 +CT=5ED45F8741E7FC5C77CAACA9D3DFA26D +PT=F60C9F9616A03B40655CB733EE1C3B68 + +I=238 +KEY=46DAA0A9A034745355CB8A906871990EF8FCE66E83CC7201 +IV=A3E1EA7D9E5BA6CE4FFAFC358A66FE08 +CT=F60C9F9616A03B40655CB733EE1C3B68 +PT=E73F7E14A3A245B1E594F659D996ED06 + +I=239 +KEY=DA145A69C9D459E1B2F4F484CBD3DCBF1D6810375A5A9F07 +IV=F5D4EB0EAB3486D29CCEFAC069E02DB2 +CT=E73F7E14A3A245B1E594F659D996ED06 +PT=52651C2039168170765B235D85BF6CEC + +I=240 +KEY=61CD045E05969B9FE091E8A4F2C55DCF6B33336ADFE5F3EB +IV=F7162437A85A186ABBD95E37CC42C27E +CT=52651C2039168170765B235D85BF6CEC +PT=665C920C4BB95B5C716D60AE9C30DB1B + +I=241 +KEY=BDF9F289D095660D86CD7AA8B97C06931A5E53C443D528F0 +IV=ADD7416105DB0CF0DC34F6D7D503FD92 +CT=665C920C4BB95B5C716D60AE9C30DB1B +PT=F6E1D36CF7D41F70885587A85B897EA2 + +I=242 +KEY=4CBAF7692571D8C5702CA9C44EA819E3920BD46C185C5652 +IV=9FBF3815905FCD9FF14305E0F5E4BEC8 +CT=F6E1D36CF7D41F70885587A85B897EA2 +PT=137DB7F20F98671E37F55E401D0482E2 + +I=243 +KEY=CEBF572BB09CC72963511E3641307EFDA5FE8A2C0558D4B0 +IV=0C3951BDCA9582CA8205A04295ED1FEC +CT=137DB7F20F98671E37F55E401D0482E2 +PT=72125C79A48573158496EFCC5CA552D4 + +I=244 +KEY=0D8978CF8179CBBF1143424FE5B50DE8216865E059FD8664 +IV=898422AB0DB951B1C3362FE431E50C96 +CT=72125C79A48573158496EFCC5CA552D4 +PT=6B12016832DE435A963FFFA857824CF7 + +I=245 +KEY=180D2DA794FEAF777A514327D76B4EB2B7579A480E7FCA93 +IV=0B47A508EAD8008015845568158764C8 +CT=6B12016832DE435A963FFFA857824CF7 +PT=18693A241FB5687CF3A793B9B7EE4B15 + +I=246 +KEY=3D6C36453DCA611462387903C8DE26CE44F009F1B9918186 +IV=857CC19C3E72C1AD25611BE2A934CE63 +CT=18693A241FB5687CF3A793B9B7EE4B15 +PT=4E04BD363AFC26BDDD3D98892A7C705A + +I=247 +KEY=8B626E8D8E075BCE2C3CC435F222007399CD917893EDF1DC +IV=6E4FCD034F6E2AF5B60E58C8B3CD3ADA +CT=4E04BD363AFC26BDDD3D98892A7C705A +PT=06FB2C371C3F54518AA0A2766CE1CCF3 + +I=248 +KEY=A5ECEB5BAE22C2E72AC7E802EE1D5422136D330EFF0C3D2F +IV=4A23E1EFBB43855E2E8E85D620259929 +CT=06FB2C371C3F54518AA0A2766CE1CCF3 +PT=D7DE2C298EB1EF273A6386986BDEC555 + +I=249 +KEY=B25537EEFD5BDA7AFD19C42B60ACBB05290EB59694D2F87A +IV=9034BBDBF74A369E17B9DCB55379189D +CT=D7DE2C298EB1EF273A6386986BDEC555 +PT=0F4A1CEA83DA845DEC063ADFF173F424 + +I=250 +KEY=39FEF1C45697DABCF253D8C1E3763F58C5088F4965A10C5E +IV=2B5EF64E50A2CF5F8BABC62AABCC00C6 +CT=0F4A1CEA83DA845DEC063ADFF173F424 +PT=CE27F8AF55009D3658D166B960CA12D6 + +I=251 +KEY=5657BBA1106032F13C74206EB676A26E9DD9E9F0056B1E88 +IV=CE96953F749BBFD66FA94A6546F7E84D +CT=CE27F8AF55009D3658D166B960CA12D6 +PT=BF1458E052637EFC0EEF352621606029 + +I=252 +KEY=A1BC53DEFD62921A8360788EE415DC929336DCD6240B7EA1 +IV=B944FC42142E4940F7EBE87FED02A0EB +CT=BF1458E052637EFC0EEF352621606029 +PT=E4D96706DB5B0DA8FA429BB65BFBE4D8 + +I=253 +KEY=DAC8C0328BA4104167B91F883F4ED13A697447607FF09A79 +IV=A8D8E3A3BB687ECC7B7493EC76C6825B +CT=E4D96706DB5B0DA8FA429BB65BFBE4D8 +PT=1B11FF1367FE94F7759D1BEC40B8FDCC + +I=254 +KEY=03AE3AA5E62CA4927CA8E09B58B045CD1CE95C8C3F4867B5 +IV=35D7DB1466E14E3ED966FA976D88B4D3 +CT=1B11FF1367FE94F7759D1BEC40B8FDCC +PT=0989D688C947C616AC13B63892E35E74 + +I=255 +KEY=EAD5A60BB601C1147521361391F783DBB0FAEAB4ADAB39C1 +IV=59BA56CC11EFA9A2E97B9CAE502D6586 +CT=0989D688C947C616AC13B63892E35E74 +PT=978C150575871FB2C8847AA0CB092108 + +I=256 +KEY=C608EE8A971A0383E2AD2316E4709C69787E901466A218C9 +IV=253A79448D79B0B72CDD4881211BC297 +CT=978C150575871FB2C8847AA0CB092108 +PT=D08629CCCF6B869B10768DE9E2984B2E + +I=257 +KEY=D8EB4FC4230D3E39322B0ADA2B1B1AF268081DFD843A53E7 +IV=E9A7FDB26A37B6601EE3A14EB4173DBA +CT=D08629CCCF6B869B10768DE9E2984B2E +PT=E320AECF3803401AB95E09EB50A6EDA5 + +I=258 +KEY=E3F18E12233B5A30D10BA41513185AE8D1561416D49CBE42 +IV=4C6B62E3E6658BE73B1AC1D600366409 +CT=E320AECF3803401AB95E09EB50A6EDA5 +PT=D29E97683C9989C75D5D73EAADC23EE2 + +I=259 +KEY=7D9DEAA58D97A2FC0395337D2F81D32F8C0B67FC795E80A0 +IV=414A2961119CE4D79E6C64B7AEACF8CC +CT=D29E97683C9989C75D5D73EAADC23EE2 +PT=8D859D878DF32FDD26AF4984D48A1BD2 + +I=260 +KEY=E4A19E3554E8D73B8E10AEFAA272FCF2AAA42E78ADD49B72 +IV=9DF8066FCF854065993C7490D97F75C7 +CT=8D859D878DF32FDD26AF4984D48A1BD2 +PT=7B524B71439722F0555D4681F7EEAAC9 + +I=261 +KEY=0C93CDDA4435E903F542E58BE1E5DE02FFF968F95A3A31BB +IV=9529BF1B1ACEEDA5E83253EF10DD3E38 +CT=7B524B71439722F0555D4681F7EEAAC9 +PT=8C8ECC9829F06F73497EA90D48CD7FC5 + +I=262 +KEY=637747C6EF7B72B579CC2913C815B171B687C1F412F74E7E +IV=ADC9666D259469516FE48A1CAB4E9BB6 +CT=8C8ECC9829F06F73497EA90D48CD7FC5 +PT=6E416C2563212821F0D8E7D75297B11F + +I=263 +KEY=7E4BB22E1A7C4E25178D4536AB349950465F26234060FF61 +IV=C3BE9A54FDDA99731D3CF5E8F5073C90 +CT=6E416C2563212821F0D8E7D75297B11F +PT=EFC73DFA5FB87EA16284E25D22360C2F + +I=264 +KEY=62B7D329DC5EA208F84A78CCF48CE7F124DBC47E6256F34E +IV=E2145312DF24CBDB1CFC6107C622EC2D +CT=EFC73DFA5FB87EA16284E25D22360C2F +PT=1191FC5E2EFA9F19004C7D00E1F4D8B1 + +I=265 +KEY=039B0E1DE399831EE9DB8492DA7678E82497B97E83A22BFF +IV=0931D0D100EEB87D612CDD343FC72116 +CT=1191FC5E2EFA9F19004C7D00E1F4D8B1 +PT=717B1B902086B97296B7E97BC01C259E + +I=266 +KEY=CB02B3C8CA4A0C9498A09F02FAF0C19AB220500543BE0E61 +IV=65D0C1DFC85C7FB9C899BDD529D38F8A +CT=717B1B902086B97296B7E97BC01C259E +PT=569097DA8C43871CC5A55AC150ABCD31 + +I=267 +KEY=5FFAEE959D35C247CE3008D876B3468677850AC41315C350 +IV=7A4A448600ACA08994F85D5D577FCED3 +CT=569097DA8C43871CC5A55AC150ABCD31 +PT=4046F3DF53DFC1B56400501F08200FE0 + +I=268 +KEY=0CA33FAAA4B25FEB8E76FB07256C873313855ADB1B35CCB0 +IV=C83E2121AA25A5295359D13F39879DAC +CT=4046F3DF53DFC1B56400501F08200FE0 +PT=87C5362AAF3F31B05C92189E38FD9C66 + +I=269 +KEY=5B782B675EE9A8A509B3CD2D8A53B6834F17424523C850D6 +IV=567E0CD5EAFC699457DB14CDFA5BF74E +CT=87C5362AAF3F31B05C92189E38FD9C66 +PT=03A5CD79734810F4D9559FDC97A4B1A1 + +I=270 +KEY=B069B5DCAADA727F0A160054F91BA6779642DD99B46CE177 +IV=5397ED8A6DF7641EEB119EBBF433DADA +CT=03A5CD79734810F4D9559FDC97A4B1A1 +PT=1B1ECDDFD726C66594DF7B050F6758FF + +I=271 +KEY=52477DE5EFBAE2621108CD8B2E3D6012029DA69CBB0BB988 +IV=52151355DA4369C8E22EC8394560901D +CT=1B1ECDDFD726C66594DF7B050F6758FF +PT=26E9A7A560DD36D9767A51DA06301BBD + +I=272 +KEY=6E59FF11BED37F8837E16A2E4EE056CB74E7F746BD3BA235 +IV=FB1A5F8FA1C3D1F43C1E82F451699DEA +CT=26E9A7A560DD36D9767A51DA06301BBD +PT=C2FAB5CDDB329F2EA1E1459251A3CB1B + +I=273 +KEY=504DE2EC58CE17BBF51BDFE395D2C9E5D506B2D4EC98692E +IV=6BCD90C4D648AB783E141DFDE61D6833 +CT=C2FAB5CDDB329F2EA1E1459251A3CB1B +PT=4293D0A26E81DBE9FED6113B1954D59F + +I=274 +KEY=CC6C6C4150E763AAB7880F41FB53120C2BD0A3EFF5CCBCB1 +IV=0F61DAA62B7E95A79C218EAD08297411 +CT=4293D0A26E81DBE9FED6113B1954D59F +PT=5DC81F054088DB9B3D1F8AD4BACC2039 + +I=275 +KEY=BD3B4967A596578FEA401044BBDBC99716CF293B4F009C88 +IV=0C6435697122955071572526F5713425 +CT=5DC81F054088DB9B3D1F8AD4BACC2039 +PT=B6FB950586C671E968FFC709B79E8AF8 + +I=276 +KEY=9A08B753E07CD6535CBB85413D1DB87E7E30EE32F89E1670 +IV=377A670B7487B3EB2733FE3445EA81DC +CT=B6FB950586C671E968FFC709B79E8AF8 +PT=ED69B1E52F5F095EFF0AC73A76039B65 + +I=277 +KEY=E5FAA83242346B4EB1D234A41242B120813A29088E9D8D15 +IV=DBEEED8784AD80B57FF21F61A248BD1D +CT=ED69B1E52F5F095EFF0AC73A76039B65 +PT=FBC0C9A6FBC2CCD02BF5A009B43FE903 + +I=278 +KEY=44770F6B1653E2754A12FD02E9807DF0AACF89013AA26416 +IV=7D9B061A6209E0FAA18DA7595467893B +CT=FBC0C9A6FBC2CCD02BF5A009B43FE903 +PT=ADBE2B6C2C979C90E019991C5E81F69E + +I=279 +KEY=89A3B49BBE885D34E7ACD66EC517E1604AD6101D64239288 +IV=5495C29E4DDA4E26CDD4BBF0A8DBBF41 +CT=ADBE2B6C2C979C90E019991C5E81F69E +PT=E382D6611C0B2591BE9B7B6BC66D479D + +I=280 +KEY=457D838277C2797B042E000FD91CC4F1F44D6B76A24ED515 +IV=0303BB8A65CCE419CCDE3719C94A244F +CT=E382D6611C0B2591BE9B7B6BC66D479D +PT=7A39D5BFC7ADB6B7539A1AA45A31A7E5 + +I=281 +KEY=814AD70FBAF9D8AA7E17D5B01EB17246A7D771D2F87F72F0 +IV=550BD125E57ADE94C437548DCD3BA1D1 +CT=7A39D5BFC7ADB6B7539A1AA45A31A7E5 +PT=3CB8FF426FF48FA93EFAEDC559833C86 + +I=282 +KEY=89599F584B46337342AF2AF27145FDEF992D9C17A1FC4E76 +IV=45800DE7659A8FD008134857F1BFEBD9 +CT=3CB8FF426FF48FA93EFAEDC559833C86 +PT=2F5C7660310DE65B1C5254E2176A15CA + +I=283 +KEY=8EF84BDE14C7412B6DF35C9240481BB4857FC8F5B6965BBC +IV=5142FFEADEC300C107A1D4865F817258 +CT=2F5C7660310DE65B1C5254E2176A15CA +PT=7A3056742CF8CFDE9CBEAE32607E8DE3 + +I=284 +KEY=F076085EE3EA165617C30AE66CB0D46A19C166C7D6E8D65F +IV=02FBB83EDCB092957E8E4380F72D577D +CT=7A3056742CF8CFDE9CBEAE32607E8DE3 +PT=B2B7B7551B2A1D59601003C6EDD70A78 + +I=285 +KEY=7D74D286D9CEC1C3A574BDB3779AC93379D165013B3FDC27 +IV=890E42EAA4C59B078D02DAD83A24D795 +CT=B2B7B7551B2A1D59601003C6EDD70A78 +PT=8B617CCD9B1289F485167DC13126795C + +I=286 +KEY=8BA3AA3C04001B9D2E15C17EEC8840C7FCC718C00A19A57B +IV=F96182D81751ECCAF6D778BADDCEDA5E +CT=8B617CCD9B1289F485167DC13126795C +PT=D4800EE4A5E29A18C655AD5CE23063F9 + +I=287 +KEY=E51B3BF1DF7B0D54FA95CF9A496ADADF3A92B59CE829C682 +IV=46297563D303DF226EB891CDDB7B16C9 +CT=D4800EE4A5E29A18C655AD5CE23063F9 +PT=4A6008072DCEB7602BF120F0984FF1D6 + +I=288 +KEY=82091A039C558D36B0F5C79D64A46DBF1163956C70663754 +IV=28E82D15BAC860EA671221F2432E8062 +CT=4A6008072DCEB7602BF120F0984FF1D6 +PT=B05CD61BC646851726441B147FBB1AD3 + +I=289 +KEY=C503B4B113DE349700A91186A2E2E8A837278E780FDD2D87 +IV=342F9FDEEEBE130A470AAEB28F8BB9A1 +CT=B05CD61BC646851726441B147FBB1AD3 +PT=33E1834199EE6CD5C6F950D4823B2337 + +I=290 +KEY=4B06065B748AFB69334892C73B0C847DF1DEDEAC8DE60EB0 +IV=02928C43C0FF24968E05B2EA6754CFFE +CT=33E1834199EE6CD5C6F950D4823B2337 +PT=BA0BD1FFA54258361D3A8BD9F3C689E4 + +I=291 +KEY=AD0B10216B5D496B894343389E4EDC4BECE455757E208754 +IV=50DC56062E88C9CAE60D167A1FD7B202 +CT=BA0BD1FFA54258361D3A8BD9F3C689E4 +PT=4911046D8F1D2BCF54F22B5A83AF5AE1 + +I=292 +KEY=AF6CC229A2618121C05247551153F784B8167E2FFD8FDDB5 +IV=A7CC6A2B280A9DE80267D208C93CC84A +CT=4911046D8F1D2BCF54F22B5A83AF5AE1 +PT=254CA1983D7B794911B455E857CE902B + +I=293 +KEY=66413E8C7D11836FE51EE6CD2C288ECDA9A22BC7AA414D9E +IV=D01066ADC643A032C92DFCA5DF70024E +CT=254CA1983D7B794911B455E857CE902B +PT=B0A100E60D0404D123D10AE78E9CFFCB + +I=294 +KEY=D13AF271F9C3337455BFE62B212C8A1C8A73212024DDB255 +IV=20D00A218F07ECEDB77BCCFD84D2B01B +CT=B0A100E60D0404D123D10AE78E9CFFCB +PT=D4CD0CC7D2EBAB050108E94365D34FAA + +I=295 +KEY=8B3C7094C3AD8B018172EAECF3C721198B7BC863410EFDFF +IV=EC5F46869A00FFC25A0682E53A6EB875 +CT=D4CD0CC7D2EBAB050108E94365D34FAA +PT=DF913CC34675469401CCA41DB50BFBA4 + +I=296 +KEY=7DCF9D4559C3EA3A5EE3D62FB5B2678D8AB76C7EF405065B +IV=8718728B7105A417F6F3EDD19A6E613B +CT=DF913CC34675469401CCA41DB50BFBA4 +PT=5B09F0AF91EA41851A232543E97A6ED4 + +I=297 +KEY=C3E6C2A9975117B605EA2680245826089094493D1D7F688F +IV=21D001128A401EBFBE295FECCE92FD8C +CT=5B09F0AF91EA41851A232543E97A6ED4 +PT=8544DFD1E46D14FF1B0E9CF43A7E9EB6 + +I=298 +KEY=54C6D7971066FDD380AEF951C03532F78B9AD5C92701F639 +IV=F861E1C66C3F21779720153E8737EA65 +CT=8544DFD1E46D14FF1B0E9CF43A7E9EB6 +PT=586696A67E355CCDC41AD16D87786773 + +I=299 +KEY=B47A128050D1FC84D8C86FF7BE006E3A4F8004A4A079914A +IV=55A87D49D3640887E0BCC51740B70157 +CT=586696A67E355CCDC41AD16D87786773 +PT=6C7FF8D2F033B33C729C556E0731ACFF + +I=300 +KEY=C66EA18D75351D93B4B797254E33DD063D1C51CAA7483DB5 +IV=7224A11A5D122A607214B30D25E4E117 +CT=6C7FF8D2F033B33C729C556E0731ACFF +PT=BC031D9B497C64B15EE143CF4D2130B1 + +I=301 +KEY=00432A82295B2C6708B48ABE074FB9B763FD1205EA690D04 +IV=61D8239BE618CC39C62D8B0F5C6E31F4 +CT=BC031D9B497C64B15EE143CF4D2130B1 +PT=325D14CCDE09311A8069C5522FD050FD + +I=302 +KEY=E03B01935511FA7E3AE99E72D94688ADE394D757C5B95DF9 +IV=339B83266B282A96E0782B117C4AD619 +CT=325D14CCDE09311A8069C5522FD050FD +PT=FA25D0913004A26A3232F743ACC7677E + +I=303 +KEY=47F79639F27D47E9C0CC4EE3E9422AC7D1A62014697E3A87 +IV=C5F60E2EC86A0971A7CC97AAA76CBD97 +CT=FA25D0913004A26A3232F743ACC7677E +PT=61AA67B567F1CE94326B4711F8115727 + +I=304 +KEY=EE86C028A3B01E7EA16629568EB3E453E3CD6705916F6DA0 +IV=4037462A5B08A27FA971561151CD5997 +CT=61AA67B567F1CE94326B4711F8115727 +PT=35D0FD8AFF6CBDF34065CED4796D9D27 + +I=305 +KEY=EE88DBE9CCC930CB94B6D4DC71DF59A0A3A8A9D1E802F087 +IV=20CB619D26A05953000E1BC16F792EB5 +CT=35D0FD8AFF6CBDF34065CED4796D9D27 +PT=DD69B839EAE7D0DF79F5D06140D54325 + +I=306 +KEY=C77ADB703861D01649DF6CE59B38897FDA5D79B0A8D7B3A2 +IV=16CFCF6A4F3272EA29F20099F4A8E0DD +CT=DD69B839EAE7D0DF79F5D06140D54325 +PT=CA93E79E612893AA0D979ABDF5CA788A + +I=307 +KEY=3F486F048B5D9716834C8B7BFA101AD5D7CAE30D5D1DCB28 +IV=58332C3A8F187A96F832B474B33C4700 +CT=CA93E79E612893AA0D979ABDF5CA788A +PT=39974A1C62DF12F62EC9F75704B0EFA8 + +I=308 +KEY=B9022C8EA2C6FEF4BADBC16798CF0823F903145A59AD2480 +IV=3C09D97EFC480CD6864A438A299B69E2 +CT=39974A1C62DF12F62EC9F75704B0EFA8 +PT=B840EFC34BCD941BF551E437D633BB3A + +I=309 +KEY=D22317E3BB60B9FA029B2EA4D3029C380C52F06D8F9E9FBA +IV=C755A4CF1FAD90046B213B6D19A6470E +CT=B840EFC34BCD941BF551E437D633BB3A +PT=979F6217FD73CAB73A1DE1FACF68542C + +I=310 +KEY=E196EBBFCDA64F7095044CB32E71568F364F119740F6CB96 +IV=D342A7B4EF6CB49F33B5FC5C76C6F68A +CT=979F6217FD73CAB73A1DE1FACF68542C +PT=A290A25CFBCB1BEE137AFB860BB2CF29 + +I=311 +KEY=B756B878A99088B83794EEEFD5BA4D612535EA114B4404BF +IV=D92C9835E799541056C053C76436C7C8 +CT=A290A25CFBCB1BEE137AFB860BB2CF29 +PT=7E99249836CA5167C88BD3431C78C2E0 + +I=312 +KEY=2515F524203B507E490DCA77E3701C06EDBE3952573CC65F +IV=FD7219F6C131C4BD92434D5C89ABD8C6 +CT=7E99249836CA5167C88BD3431C78C2E0 +PT=5B7DAB9C2148A2B7ACCE4723D1D63B3F + +I=313 +KEY=28A33899811FE9B7127061EBC238BEB141707E7186EAFD60 +IV=F6B29A78141D8F8A0DB6CDBDA124B9C9 +CT=5B7DAB9C2148A2B7ACCE4723D1D63B3F +PT=12BAE3836257C52B88ECEEAAE8DE3B80 + +I=314 +KEY=85C6089FEF19163500CA8268A06F7B9AC99C90DB6E34C6E0 +IV=AE11E9BE14B4ECB1AD6530066E06FF82 +CT=12BAE3836257C52B88ECEEAAE8DE3B80 +PT=71C5D9F8747D428DE30736C4DD33E3E5 + +I=315 +KEY=86665ED5DA56FE90710F5B90D41239172A9BA61FB3072505 +IV=2CBAA91201D1980B03A0564A354FE8A5 +CT=71C5D9F8747D428DE30736C4DD33E3E5 +PT=D824A3FB80554CCD519D730D25EED2AF + +I=316 +KEY=F6D0840D75423D5CA92BF86B544775DA7B06D51296E9F7AA +IV=66AA086063C3768C70B6DAD8AF14C3CC +CT=D824A3FB80554CCD519D730D25EED2AF +PT=C974BCBE88ACA9D29312192BE52885BD + +I=317 +KEY=56F2FDAAB52A8691605F44D5DCEBDC08E814CC3973C17217 +IV=14D16CCEDE70F435A02279A7C068BBCD +CT=C974BCBE88ACA9D29312192BE52885BD +PT=23B74C4B5E661FA157F571F4C13AA3AE + +I=318 +KEY=676109782F02525643E8089E828DC3A9BFE1BDCDB2FBD1B9 +IV=46BB517768227D1D3193F4D29A28D4C7 +CT=23B74C4B5E661FA157F571F4C13AA3AE +PT=BDF2A1A79D553C85F5867B2BD5259A82 + +I=319 +KEY=D21B20B085B317EDFE1AA9391FD8FF2C4A67C6E667DE4B3B +IV=054B26F10A7F2D69B57A29C8AAB145BB +CT=BDF2A1A79D553C85F5867B2BD5259A82 +PT=1E02970BE31FEE63C9BCCC79FB41F670 + +I=320 +KEY=3CF3F93D44647FB7E0183E32FCC7114F83DB0A9F9C9FBD4B +IV=C44342FC579F9083EEE8D98DC1D7685A +CT=1E02970BE31FEE63C9BCCC79FB41F670 +PT=70F71372F64174D7C8757F043812439F + +I=321 +KEY=2C83CB76D99E054E90EF2D400A8665984BAE759BA48DFED4 +IV=884B46D9FBE7D99C1070324B9DFA7AF9 +CT=70F71372F64174D7C8757F043812439F +PT=46B20E91579B5CC0ADE9327478DF25FA + +I=322 +KEY=0ADEA18FAA36E94BD65D23D15D1D3958E64747EFDC52DB2E +IV=F256BC3206E11E9C265D6AF973A8EC05 +CT=46B20E91579B5CC0ADE9327478DF25FA +PT=51FE245369F67740615E159E28C2D56C + +I=323 +KEY=E0C00F8BFD4ADCD087A3078234EB4E1887195271F4900E42 +IV=836F6756B9EC572DEA1EAE04577C359B +CT=51FE245369F67740615E159E28C2D56C +PT=58A1B407358C1F9783A05C0A43D5B4FB + +I=324 +KEY=EEA0B17E70A6FC53DF02B3850167518F04B90E7BB745BAB9 +IV=0E584BF6D72F08310E60BEF58DEC2083 +CT=58A1B407358C1F9783A05C0A43D5B4FB +PT=6212DD8752996CC4D747790D5F2BC7E7 + +I=325 +KEY=B6E49EEA07D03112BD106E0253FE3D4BD3FE7776E86E7D5E +IV=2BA760FB0CC14D1858442F947776CD41 +CT=6212DD8752996CC4D747790D5F2BC7E7 +PT=DB16C25BDE0B95F4EC7B34FA2096E6A6 + +I=326 +KEY=F64DCEBA5E71D73E6606AC598DF5A8BF3F85438CC8F89BF8 +IV=674AA4866EE9988E40A9505059A1E62C +CT=DB16C25BDE0B95F4EC7B34FA2096E6A6 +PT=BB98BBB3289F3B5A96C5D3DA92F8CD0F + +I=327 +KEY=23CBCCA3D63DABB8DD9E17EAA56A93E5A94090565A0056F7 +IV=E3D676539CBD9676D5860219884C7C86 +CT=BB98BBB3289F3B5A96C5D3DA92F8CD0F +PT=324C1661B1E289EA3DAC27AF14E026C5 + +I=328 +KEY=D6F7C4A098C4E809EFD2018B14881A0F94ECB7F94EE07032 +IV=E7FB3F340E160FB5F53C08034EF943B1 +CT=324C1661B1E289EA3DAC27AF14E026C5 +PT=6EDA104789445C38F66EC2562F95FBDB + +I=329 +KEY=4B795FAB98879223810811CC9DCC4637628275AF61758BE9 +IV=C5E830814D72E9449D8E9B0B00437A2A +CT=6EDA104789445C38F66EC2562F95FBDB +PT=C834C54858181891C7D654A7502C0B60 + +I=330 +KEY=AA317465E376BAF2493CD484C5D45EA6A554210831598089 +IV=2388FCCDB47CB5DBE1482BCE7BF128D1 +CT=C834C54858181891C7D654A7502C0B60 +PT=9C5F5599557D176050BBAC4258B87F66 + +I=331 +KEY=B601C39C0E5F02DED563811D90A949C6F5EF8D4A69E1FFEF +IV=10C2528D377387311C30B7F9ED29B82C +CT=9C5F5599557D176050BBAC4258B87F66 +PT=ED5F51A6AFA843D467E21F6C68992273 + +I=332 +KEY=44A1FE3F8349D500383CD0BB3F010A12920D92260178DD9C +IV=9E73D9FB1D2471E8F2A03DA38D16D7DE +CT=ED5F51A6AFA843D467E21F6C68992273 +PT=D7A5F18382F892264008F75707254D95 + +I=333 +KEY=568F031D75B9B48FEF992138BDF99834D2056571065D9009 +IV=DEC9B60FA5A91887122EFD22F6F0618F +CT=D7A5F18382F892264008F75707254D95 +PT=D13A34D9F57884ECEE2FA1A412584BE4 + +I=334 +KEY=72CFCCE9FE5EB48A3EA315E148811CD83C2AC4D51405DBED +IV=75C70261D0C49D692440CFF48BE70005 +CT=D13A34D9F57884ECEE2FA1A412584BE4 +PT=064D550098F0813D145A2AA296064CCF + +I=335 +KEY=58448186BD1ED1FC38EE40E1D0719DE52870EE7782039722 +IV=754A1B79A75BD3B32A8B4D6F43406576 +CT=064D550098F0813D145A2AA296064CCF +PT=D7CD7D2B23E42F7A9808D48C28982743 + +I=336 +KEY=6FF7BCC770079D57EF233DCAF395B29FB0783AFBAA9BB061 +IV=25EE1F4D8F257C6437B33D41CD194CAB +CT=D7CD7D2B23E42F7A9808D48C28982743 +PT=6F55D4C7A13F08A1D936C5F0177040CA + +I=337 +KEY=7ECBB104AA3505E58076E90D52AABA3E694EFF0BBDEBF0AB +IV=E21F1527B69B89C8113C0DC3DA3298B2 +CT=6F55D4C7A13F08A1D936C5F0177040CA +PT=7F061908571CDDBC1F8F82A31A3AF1F9 + +I=338 +KEY=135D99B5F2482FFAFF70F00505B6678276C17DA8A7D10152 +IV=5DA54CDB26A0DC2D6D9628B1587D2A1F +CT=7F061908571CDDBC1F8F82A31A3AF1F9 +PT=30AB085953DE3E8027DE0C8A185A7D02 + +I=339 +KEY=3C76458A987B66F0CFDBF85C56685902511F7122BF8B7C50 +IV=E0614E072D2563DD2F2BDC3F6A33490A +CT=30AB085953DE3E8027DE0C8A185A7D02 +PT=92C915E98AEBF6265C43A66AC5B40787 + +I=340 +KEY=EBD41B4484EA67A05D12EDB5DC83AF240D5CD7487A3F7BD7 +IV=6EA27DF02FA0A9A9D7A25ECE1C910150 +CT=92C915E98AEBF6265C43A66AC5B40787 +PT=E9AC0996F97FFBA0F7C860A089CDF99F + +I=341 +KEY=85B6BBBC8E2243D3B4BEE42325FC5484FA94B7E8F3F28248 +IV=46D915F802932C936E62A0F80AC82473 +CT=E9AC0996F97FFBA0F7C860A089CDF99F +PT=BA1D082EDB28E255CB37AFEDB497D43A + +I=342 +KEY=BDA8736E56DDB34F0EA3EC0DFED4B6D131A3180547655672 +IV=0A7B9BCBE89E4CDE381EC8D2D8FFF09C +CT=BA1D082EDB28E255CB37AFEDB497D43A +PT=63298FE15A14C4A4E582C57772A0581E + +I=343 +KEY=9B5DC0C3B097B7CE6D8A63ECA4C07275D421DD7235C50E6C +IV=81F4666446CB470526F5B3ADE64A0481 +CT=63298FE15A14C4A4E582C57772A0581E +PT=AE79390C6789DFCF7110BA93281E9895 + +I=344 +KEY=E64DDC6A55048E35C3F35AE0C349ADBAA53167E11DDB96F9 +IV=DB4439803A1ACA807D101CA9E59339FB +CT=AE79390C6789DFCF7110BA93281E9895 +PT=2C9DF2ED511595756E5CF6D33442D3A3 + +I=345 +KEY=9C75AC9CBA0918CDEF6EA80D925C38CFCB6D91322999455A +IV=B73DBACA0C10AD0A7A3870F6EF0D96F8 +CT=2C9DF2ED511595756E5CF6D33442D3A3 +PT=90FDAEAEDC379128B73515CB2AAC9B7A + +I=346 +KEY=A045744F6BB9205F7F9306A34E6BA9E77C5884F90335DE20 +IV=356BBCDD4EBDA8F93C30D8D3D1B03892 +CT=90FDAEAEDC379128B73515CB2AAC9B7A +PT=E66EA385E1F20791090CA24ADB250AFC + +I=347 +KEY=48E94FAC40CFC94B99FDA526AF99AE76755426B3D810D4DC +IV=ABAF17EBE3658829E8AC3BE32B76E914 +CT=E66EA385E1F20791090CA24ADB250AFC +PT=A17C6802F4322D97C6966B523B54CF88 + +I=348 +KEY=3FC9CD7847FF49D73881CD245BAB83E1B3C24DE1E3441B54 +IV=7D25F4EE8B874E2D772082D40730809C +CT=A17C6802F4322D97C6966B523B54CF88 +PT=CBEC825D143BF30C58B608B58ABFB618 + +I=349 +KEY=D4464B5CD3CFAD06F36D4F794F9070EDEB74455469FBAD4C +IV=93D0E88641960F8EEB8F86249430E4D1 +CT=CBEC825D143BF30C58B608B58ABFB618 +PT=D7A8E224DAA4DB7629790D3D4D5A8560 + +I=350 +KEY=73DD2DA38114D0BD24C5AD5D9534AB9BC20D486924A1282C +IV=3E6B8F8084BAA391A79B66FF52DB7DBB +CT=D7A8E224DAA4DB7629790D3D4D5A8560 +PT=EB7EAD5CF27BA091DEF8D7839EFD7C90 + +I=351 +KEY=CDA609EB23BB90EBCFBB0001674F0B0A1CF59FEABA5C54BC +IV=8EEE61573B01F1E4BE7B2448A2AF4056 +CT=EB7EAD5CF27BA091DEF8D7839EFD7C90 +PT=2EFA41B666ECBBB1D699C1FB8CA9E175 + +I=352 +KEY=768FCC098B8F48FFE14141B701A3B0BBCA6C5E1136F5B5C9 +IV=60BC671273707E17BB29C5E2A834D814 +CT=2EFA41B666ECBBB1D699C1FB8CA9E175 +PT=44D7245914CF3BF73831D4225BD32FDD + +I=353 +KEY=91F2FFA6BB520FD1A59665EE156C8B4CF25D8A336D269A14 +IV=21187FBCFC5E01BEE77D33AF30DD472E +CT=44D7245914CF3BF73831D4225BD32FDD +PT=E9FA049C77C326A4F03D2C9E740DE4A1 + +I=354 +KEY=2FC9C39B5DBC560E4C6C617262AFADE80260A6AD192B7EB5 +IV=72912E59A0095846BE3B3C3DE6EE59DF +CT=E9FA049C77C326A4F03D2C9E740DE4A1 +PT=9A62281465C72FDAA73E00E343A99BC3 + +I=355 +KEY=F401ED3768BC72D4D60E496607688232A55EA64E5A82E576 +IV=88022668FE843060DBC82EAC350024DA +CT=9A62281465C72FDAA73E00E343A99BC3 +PT=FAD9ADA4B98A4141A2857F93F6F71DEB + +I=356 +KEY=1AD741BDF8A18D8E2CD7E4C2BEE2C37307DBD9DDAC75F89D +IV=F98FECC470C84631EED6AC8A901DFF5A +CT=FAD9ADA4B98A4141A2857F93F6F71DEB +PT=630453171FEE434834490229830E1C1A + +I=357 +KEY=24F7B99681335EAD4FD3B7D5A10C803B3392DBF42F7BE487 +IV=5D69B4D81847DABD3E20F82B7992D323 +CT=630453171FEE434834490229830E1C1A +PT=DE613189001598BA6AE67F259F9FD349 + +I=358 +KEY=60E401E96083FF2291B2865CA11918815974A4D1B0E437CE +IV=AADE84AD4127FCDA4413B87FE1B0A18F +CT=DE613189001598BA6AE67F259F9FD349 +PT=CA18925634072DEC80F2F724A0F24235 + +I=359 +KEY=66831E7F4FC51DB95BAA140A951E356DD98653F5101675FB +IV=1C1E2F698C5DD62006671F962F46E29B +CT=CA18925634072DEC80F2F724A0F24235 +PT=B289F06551C56B77F5CDF7B321E0E8E3 + +I=360 +KEY=48FB1A5B41F634D5E923E46FC4DB5E1A2C4BA44631F69D18 +IV=6A872620ED13A14B2E7804240E33296C +CT=B289F06551C56B77F5CDF7B321E0E8E3 +PT=13B1F93DD388A192D6FB836C90E0E022 + +I=361 +KEY=F13FA6E33170F596FA921D521753FF88FAB0272AA1167D3A +IV=40BF714207DA180BB9C4BCB87086C143 +CT=13B1F93DD388A192D6FB836C90E0E022 +PT=298B7B19A27EA1BE9574588A5885F64B + +I=362 +KEY=CE171639A4DDA77DD319664BB52D5E366FC47FA0F9938B71 +IV=8FB32729166E154F3F28B0DA95AD52EB +CT=298B7B19A27EA1BE9574588A5885F64B +PT=11FA000C73485654A8918360DF3C1F5E + +I=363 +KEY=9322B0E9AE4D6B20C2E36647C6650862C755FCC026AF942F +IV=809DE75B169C56BE5D35A6D00A90CC5D +CT=11FA000C73485654A8918360DF3C1F5E +PT=05533E642958E2F6F29BB1848BE225CB + +I=364 +KEY=21B86D89874D627FC7B05823EF3DEA9435CE4D44AD4DB1E4 +IV=81CF24C876471695B29ADD602900095F +CT=05533E642958E2F6F29BB1848BE225CB +PT=613DB485B9565B4889887282A3C8CFB5 + +I=365 +KEY=6E5AD95BDDA04D12A68DECA6566BB1DCBC463FC60E857E51 +IV=7E3AC16D28733BD84FE2B4D25AED2F6D +CT=613DB485B9565B4889887282A3C8CFB5 +PT=0CDDDA3B3375430B601BA1CCBD567284 + +I=366 +KEY=807937B80E55E814AA50369D651EF2D7DC5D9E0AB3D30CD5 +IV=C49324EE3A928684EE23EEE3D3F5A506 +CT=0CDDDA3B3375430B601BA1CCBD567284 +PT=C47A6E22A123AB6397F9C2AFFA6D45AB + +I=367 +KEY=20B3595EFE3D3DA76E2A58BFC43D59B44BA45CA549BE497E +IV=B188E4D3A2AC3F42A0CA6EE6F068D5B3 +CT=C47A6E22A123AB6397F9C2AFFA6D45AB +PT=71592AFCA1FEEE8AB6D6CEF22C14A21D + +I=368 +KEY=A97EAD081EDF66D11F73724365C3B73EFD72925765AAEB63 +IV=0DFF90FA3722469289CDF456E0E25B76 +CT=71592AFCA1FEEE8AB6D6CEF22C14A21D +PT=F4E0C4BCF8B386CF1BD457BD1FB65646 + +I=369 +KEY=DA90448D67D59E3CEB93B6FF9D7031F1E6A6C5EA7A1CBD25 +IV=154DB6488872217073EEE985790AF8ED +CT=F4E0C4BCF8B386CF1BD457BD1FB65646 +PT=9ED1119909322C280FE92B7840792605 + +I=370 +KEY=CF62D3016C8507F17542A76694421DD9E94FEE923A659B20 +IV=ED45F0A7D33FC08515F2978C0B5099CD +CT=9ED1119909322C280FE92B7840792605 +PT=F812615F1BE701E74FCEEFC288303C7C + +I=371 +KEY=C2681849C663E45A8D50C6398FA51C3EA6810150B255A75C +IV=19E09027253115100D0ACB48AAE6E3AB +CT=F812615F1BE701E74FCEEFC288303C7C +PT=25897C51C5FEDBFDC630BF8E9F3B2875 + +I=372 +KEY=F47C452077541CEEA8D9BA684A5BC7C360B1BEDE2D6E8F29 +IV=2C2EE28C518163DF36145D69B137F8B4 +CT=25897C51C5FEDBFDC630BF8E9F3B2875 +PT=9929E5E9F0CA00D0E02022E2FCFAFC3F + +I=373 +KEY=F7BF8679C8D86E2C31F05F81BA91C71380919C3CD1947316 +IV=FCF0C5D85049463103C3C359BF8C72C2 +CT=9929E5E9F0CA00D0E02022E2FCFAFC3F +PT=3B603A3FDAA669E7C965708C9789E329 + +I=374 +KEY=9312EDA0B14017910A9065BE6037AEF449F4ECB0461D903F +IV=364CDACF5762B18864AD6BD9799879BD +CT=3B603A3FDAA669E7C965708C9789E329 +PT=AC33F7B1A778C36617668C98E20B318A + +I=375 +KEY=D5BC989407D78D82A6A3920FC74F6D925E926028A416A1B5 +IV=5FB00506C71711D046AE7534B6979A13 +CT=AC33F7B1A778C36617668C98E20B318A +PT=B408AF5509EF45E0AEDF12570FAE3651 + +I=376 +KEY=6BBB14591C12578112AB3D5ACEA02872F04D727FABB897E4 +IV=D41F58F192CF60D6BE078CCD1BC5DA03 +CT=B408AF5509EF45E0AEDF12570FAE3651 +PT=39EB055E027AC0DEA5992B7BA3753AB5 + +I=377 +KEY=3F71566EA7D07EBF2B403804CCDAE8AC55D4590408CDAD51 +IV=7E495DEC2224696554CA4237BBC2293E +CT=39EB055E027AC0DEA5992B7BA3753AB5 +PT=832B01D2AD4F0EE077244CF9B6ABE31C + +I=378 +KEY=0BDC563CE47527D1A86B39D66195E64C22F015FDBE664E4D +IV=4FE13E98163C3F7734AD005243A5596E +CT=832B01D2AD4F0EE077244CF9B6ABE31C +PT=926EB7E17FA4262D1D390D83CDAC6FB2 + +I=379 +KEY=07D4D606747858B63A058E371E31C0613FC9187E73CA21FF +IV=12D459160DCFFEFE0C08803A900D7F67 +CT=926EB7E17FA4262D1D390D83CDAC6FB2 +PT=DBFBC3313F86C26BA54B9F69BA93C665 + +I=380 +KEY=84BE014D4BFA8ACCE1FE4D0621B7020A9A828717C959E79A +IV=179322B7D19F3A38836AD74B3F82D27A +CT=DBFBC3313F86C26BA54B9F69BA93C665 +PT=39B00A1A655B298F56271B2BDBA6B16B + +I=381 +KEY=A921F537F5F324CAD84E471C44EC2B85CCA59C3C12FF56F1 +IV=D4B03D3AB6FF79D22D9FF47ABE09AE06 +CT=39B00A1A655B298F56271B2BDBA6B16B +PT=7C5DABBF7C7951808DCD35DB2617B763 + +I=382 +KEY=3BB6AACEEEC21A9FA413ECA338957A054168A9E734E8E192 +IV=5C92A3C4C3C8567792975FF91B313E55 +CT=7C5DABBF7C7951808DCD35DB2617B763 +PT=BD88FB3B815415503D4F9264AFEA7887 + +I=383 +KEY=008F402C3524BCA8199B1798B9C16F557C273B839B029915 +IV=08360D06E31B3AA43B39EAE2DBE6A637 +CT=BD88FB3B815415503D4F9264AFEA7887 +PT=B2813AFBC477618F4C6A436C97AA26F2 + +I=384 +KEY=8AB9F9FC4EE8B2D4AB1A2D637DB60EDA304D78EF0CA8BFE7 +IV=DCF7EF19F68916268A36B9D07BCC0E7C +CT=B2813AFBC477618F4C6A436C97AA26F2 +PT=1E96D52E46B1D73EB00778B203946F28 + +I=385 +KEY=CA9D4CE917399619B58CF84D3B07D9E4804A005D0F3CD0CF +IV=63A112DB63DDECB54024B51559D124CD +CT=1E96D52E46B1D73EB00778B203946F28 +PT=C03D770FE4B1733C5E59DD68F0060D5A + +I=386 +KEY=1D8268F833FC772575B18F42DFB6AAD8DE13DD35FF3ADD95 +IV=8B7AC769F85BA650D71F241124C5E13C +CT=C03D770FE4B1733C5E59DD68F0060D5A +PT=6495A8A3667DEDE2CAB58BA3B2F7034E + +I=387 +KEY=CCCEE884786AF28A112427E1B9CB473A14A656964DCDDEDB +IV=280C5BD88E3B88ACD14C807C4B9685AF +CT=6495A8A3667DEDE2CAB58BA3B2F7034E +PT=4CC3C2AC85EBD619E708988C9FEC60C6 + +I=388 +KEY=8B85284B2B06874D5DE7E54D3C209123F3AECE1AD221BE1D +IV=62E112946391FEFB474BC0CF536C75C7 +CT=4CC3C2AC85EBD619E708988C9FEC60C6 +PT=1522371FD5D53919F52CD97258CEBDA7 + +I=389 +KEY=B2EBBE81CF234A7E48C5D252E9F5A83A068217688AEF03BA +IV=8A936BAE971C0C9F396E96CAE425CD33 +CT=1522371FD5D53919F52CD97258CEBDA7 +PT=4AA882DCB39AA79E8439E9ECE9F4F3BD + +I=390 +KEY=043B9FDDEC299802026D508E5A6F0FA482BBFE84631BF007 +IV=6FA7FCDBA3B1BCA5B6D0215C230AD27C +CT=4AA882DCB39AA79E8439E9ECE9F4F3BD +PT=28C1E45D8D01AD148FA7D7C4F41ACE04 + +I=391 +KEY=1074F9BD3FFD4EAF2AACB4D3D76EA2B00D1C294097013E03 +IV=1210BAF1D69B23FE144F6660D3D4D6AD +CT=28C1E45D8D01AD148FA7D7C4F41ACE04 +PT=3ABE04FC59C3BDF9D7721902DEFCB439 + +I=392 +KEY=D97F3440E3684D291012B02F8EAD1F49DA6E304249FD8A3A +IV=C271800852E147D5C90BCDFDDC950386 +CT=3ABE04FC59C3BDF9D7721902DEFCB439 +PT=3A563A6A047E16123B289B047BB54C4E + +I=393 +KEY=49A10E68A38B02F42A448A458AD3095BE146AB463248C674 +IV=9DB6856C7E01CF3690DE3A2840E34FDD +CT=3A563A6A047E16123B289B047BB54C4E +PT=F8CB54B8D16274E9A20C0F026866E52F + +I=394 +KEY=9DD96DCFD4A1B11FD28FDEFD5BB17DB2434AA4445A2E235B +IV=233C069312D97A03D47863A7772AB3EB +CT=F8CB54B8D16274E9A20C0F026866E52F +PT=0302D25C39BF21F67F1AF2E1951D40F9 + +I=395 +KEY=746E55928D7E549DD18D0CA1620E5C443C5056A5CF3363A2 +IV=B6086C5FEEE9A078E9B7385D59DFE582 +CT=0302D25C39BF21F67F1AF2E1951D40F9 +PT=721192A3A5140DD63D93E0D6ACC4A4B8 + +I=396 +KEY=7E6FC505EAAB07E4A39C9E02C71A519201C3B67363F7C71A +IV=9828A03F0ADCE33E0A01909767D55379 +CT=721192A3A5140DD63D93E0D6ACC4A4B8 +PT=1C0F7440EF41FF18E263392741AD9D8B + +I=397 +KEY=D13AD442CAE026C3BF93EA42285BAE8AE3A08F54225A5A91 +IV=4FC707A846B4469AAF551147204B2127 +CT=1C0F7440EF41FF18E263392741AD9D8B +PT=442F978615AC3983AA5ABEA81AD1ACA6 + +I=398 +KEY=043A4EFFCD44EEB1FBBC7DC43DF7970949FA31FC388BF637 +IV=05D58B4A88A961AFD5009ABD07A4C872 +CT=442F978615AC3983AA5ABEA81AD1ACA6 +PT=E75C29413A33AA1210F36AADEC02FCEE + +I=399 +KEY=81492E2C6296C9341CE0548507C43D1B59095B51D4890AD9 +IV=D89794EAA1791507857360D3AFD22785 +CT=E75C29413A33AA1210F36AADEC02FCEE +PT=6342BFDDD2F6610350458B6695463484 + +========== + +KEYSIZE=256 + +I=0 +KEY=0000000000000000000000000000000000000000000000000000000000000000 +IV=00000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=4804E1818FE6297519A3E88C57310413 + +I=1 +KEY=098E3797788EA3BCD5477BF1660373944804E1818FE6297519A3E88C57310413 +IV=098E3797788EA3BCD5477BF166037394 +CT=4804E1818FE6297519A3E88C57310413 +PT=D36C27EBB8FA0BC9FA368DF850FD45FB + +I=2 +KEY=D949E143F98BDE24BD40A256F9E369339B68C66A371C22BCE395657407CC41E8 +IV=D0C7D6D481057D986807D9A79FE01AA7 +CT=D36C27EBB8FA0BC9FA368DF850FD45FB +PT=EBCB4DC84155682856D94B442BC597EE + +I=3 +KEY=296352DA0158E197EBC80771EC1ECC7D70A38BA276494A94B54C2E302C09D606 +IV=F02AB399F8D33FB35688A52715FDA54E +CT=EBCB4DC84155682856D94B442BC597EE +PT=23AA6A6B4BE8C04E19707CA330804C4E + +I=4 +KEY=5D3E9E2EA4DEDDB65A58DADB5B9679BC5309E1C93DA18ADAAC3C52931C899A48 +IV=745DCCF4A5863C21B190DDAAB788B5C1 +CT=23AA6A6B4BE8C04E19707CA330804C4E +PT=9B1AA0F33416484BA68740E821F95CD3 + +I=5 +KEY=E35024184CCA14687DB19E13093D2A31C813413A09B7C2910ABB127B3D70C69B +IV=BE6EBA36E814C9DE27E944C852AB538D +CT=9B1AA0F33416484BA68740E821F95CD3 +PT=8A8C6ADF453CB7A2FC4F3690FF7C6F23 + +I=6 +KEY=FDC6EB83FF93BA06DE2D09CB33F05406429F2BE54C8B7533F6F424EBC20CA9B8 +IV=1E96CF9BB359AE6EA39C97D83ACD7E37 +CT=8A8C6ADF453CB7A2FC4F3690FF7C6F23 +PT=B104182A3D85B857FB342BD06063E989 + +I=7 +KEY=7177668BAC9407FB2835524D58F1311EF39B33CF710ECD640DC00F3BA26F4031 +IV=8CB18D085307BDFDF6185B866B016518 +CT=B104182A3D85B857FB342BD06063E989 +PT=68AD7EB507FAEE8FF54E5B7EB4314208 + +I=8 +KEY=790AE8470B39A60E9F32F4025B2251849B364D7A76F423EBF88E5445165E0239 +IV=087D8ECCA7ADA1F5B707A64F03D3609A +CT=68AD7EB507FAEE8FF54E5B7EB4314208 +PT=99736D55B2730FDBC4FCD9128A3E6F06 + +I=9 +KEY=4EAF05AC15913059B6B0E43EFA7ADC1C0245202FC4872C303C728D579C606D3F +IV=37A5EDEB1EA896572982103CA1588D98 +CT=99736D55B2730FDBC4FCD9128A3E6F06 +PT=DF326CEE98EE253C855D171D93AA9455 + +I=10 +KEY=55EE1CCDBA5A04040F4212DFBF6ABC89DD774CC15C69090CB92F9A4A0FCAF96A +IV=1B411961AFCB345DB9F2F6E145106095 +CT=DF326CEE98EE253C855D171D93AA9455 +PT=B4E41BD5257CD7AF0A6F020BEE5F4067 + +I=11 +KEY=6190A91725B7D4E8DD42F3F3B4E42E14699357147915DEA3B3409841E195B90D +IV=347EB5DA9FEDD0ECD200E12C0B8E929D +CT=B4E41BD5257CD7AF0A6F020BEE5F4067 +PT=3608F41CA4C677E74F48B113D9B336B0 + +I=12 +KEY=0A93E973CCBAC75C9C0AA05502A43E945F9BA308DDD3A944FC08295238268FBD +IV=6B034064E90D13B4414853A6B6401080 +CT=3608F41CA4C677E74F48B113D9B336B0 +PT=FB54DBB9C0C7176C4C9E1E4E6688B570 + +I=13 +KEY=584CCAEDD52F491A935D892AD132F75AA4CF78B11D14BE28B096371C5EAE3ACD +IV=52DF239E19958E460F57297FD396C9CE +CT=FB54DBB9C0C7176C4C9E1E4E6688B570 +PT=F40A6A6AE95E9D163D88AAE9A2D359BC + +I=14 +KEY=0DD784E96CAB96D702DD3972E95317FD50C512DBF44A233E8D1E9DF5FC7D6371 +IV=559B4E04B984DFCD9180B0583861E0A7 +CT=F40A6A6AE95E9D163D88AAE9A2D359BC +PT=0FE04B8BB249E49E24FEB6FFE106121C + +I=15 +KEY=2BC3A4EBD80215F0130EC1F76821BC515F2559504603C7A0A9E02B0A1D7B716D +IV=26142002B4A9832711D3F8858172ABAC +CT=0FE04B8BB249E49E24FEB6FFE106121C +PT=EBA4EF8D541919A0D0947359344D61C9 + +I=16 +KEY=0B5856BE9A78457868F7CF9C9C58EF7AB481B6DD121ADE0079745853293610A4 +IV=209BF255427A50887BF90E6BF479532B +CT=EBA4EF8D541919A0D0947359344D61C9 +PT=06484C36A29BD3CA7CBAB7FBEA47313B + +I=17 +KEY=C004F13C83AA1FD5C2A592D27B47C437B2C9FAEBB0810DCA05CEEFA8C371219F +IV=CB5CA78219D25AADAA525D4EE71F2B4D +CT=06484C36A29BD3CA7CBAB7FBEA47313B +PT=376157B7DB3B027980C5EF0E88B3F9EF + +I=18 +KEY=AD89203CAD17908C4F44F3FD2D61505385A8AD5C6BBA0FB3850B00A64BC2D870 +IV=6D8DD1002EBD8F598DE1612F56269464 +CT=376157B7DB3B027980C5EF0E88B3F9EF +PT=756783C2F0EE73BBD81B908F660AA6F7 + +I=19 +KEY=FBE990A6247EABC0CD5090DF0C566E01F0CF2E9E9B547C085D1090292DC87E87 +IV=5660B09A89693B4C8214632221373E52 +CT=756783C2F0EE73BBD81B908F660AA6F7 +PT=6CC64B773ECDFA9749DB33197F7EA0AB + +I=20 +KEY=FEC46AD20DA3E667B26D79B11A82A40F9C0965E9A599869F14CBA33052B6DE2C +IV=052DFA7429DD4DA77F3DE96E16D4CA0E +CT=6CC64B773ECDFA9749DB33197F7EA0AB +PT=9230E4DCA927E2F8E617A2EBC4F11477 + +I=21 +KEY=F4396B035E4E1BD914877124D1CD4B370E3981350CBE6467F2DC01DB9647CA5B +IV=0AFD01D153EDFDBEA6EA0895CB4FEF38 +CT=9230E4DCA927E2F8E617A2EBC4F11477 +PT=6ACD9F3939A86EE4236A3C060D2F5C3C + +I=22 +KEY=49C90E620094D6A85E75BD886FAFE79264F41E0C35160A83D1B63DDD9B689667 +IV=BDF065615EDACD714AF2CCACBE62ACA5 +CT=6ACD9F3939A86EE4236A3C060D2F5C3C +PT=E5F4F050827F69B60B417063AC1060E4 + +I=23 +KEY=1AED4D36938AB2D5D884EF2F106D2CEF8100EE5CB7696335DAF74DBE3778F683 +IV=53244354931E647D86F152A77FC2CB7D +CT=E5F4F050827F69B60B417063AC1060E4 +PT=5CE4B0B3C32700B6B887E05A88EE0239 + +I=24 +KEY=EF14B937F6E0F19AC8ADBD208DD60EE5DDE45EEF744E63836270ADE4BF96F4BA +IV=F5F9F401656A434F1029520F9DBB220A +CT=5CE4B0B3C32700B6B887E05A88EE0239 +PT=4794284E2BB56A47332E84AD7A2006A2 + +I=25 +KEY=182581A233332DDCD43C25AF9AA3AD7F9A7076A15FFB09C4515E2949C5B6F218 +IV=F7313895C5D3DC461C91988F1775A39A +CT=4794284E2BB56A47332E84AD7A2006A2 +PT=C8AE2CAA7C257508C3AB75BE28D2602F + +I=26 +KEY=ABE7FE236E28332AE7A74A9EA03B97A952DE5A0B23DE7CCC92F55CF7ED649237 +IV=B3C27F815D1B1EF6339B6F313A983AD6 +CT=C8AE2CAA7C257508C3AB75BE28D2602F +PT=A9FD4B9D4833B647FF60F8013C3B5B9D + +I=27 +KEY=08248BDC5F9186DCD65DA6344A10C57EFB2311966BEDCA8B6D95A4F6D15FC9AA +IV=A3C375FF31B9B5F631FAECAAEA2B52D7 +CT=A9FD4B9D4833B647FF60F8013C3B5B9D +PT=C871D7B4C0167DCFDD79AF1DEAC49D4F + +I=28 +KEY=BF29FB1B11AA7DB8742FF06458C384853352C622ABFBB744B0EC0BEB3B9B54E5 +IV=B70D70C74E3BFB64A272565012D341FB +CT=C871D7B4C0167DCFDD79AF1DEAC49D4F +PT=E2DE7BAC726C404FC7BA5099E39409CA + +I=29 +KEY=1810253DDF0CC5ECE2381FB4C2BEEDCCD18CBD8ED997F70B77565B72D80F5D2F +IV=A739DE26CEA6B8549617EFD09A7D6949 +CT=E2DE7BAC726C404FC7BA5099E39409CA +PT=D4A8257110EF7FFE2A1F026B28D7483A + +I=30 +KEY=F343D1EC9AEB200B65DB4AA369F6A47E052498FFC97888F55D495919F0D81515 +IV=EB53F4D145E7E5E787E35517AB4849B2 +CT=D4A8257110EF7FFE2A1F026B28D7483A +PT=9EA25895CFEAEAD224095C4687726D06 + +I=31 +KEY=86A93B0F219E1FFEBC0E4BA0334046AA9B86C06A069262277940055F77AA7813 +IV=75EAEAE3BB753FF5D9D501035AB6E2D4 +CT=9EA25895CFEAEAD224095C4687726D06 +PT=5C5DD66E7AD197DA86844D53C8ACEA0E + +I=32 +KEY=2278C61356CB0A951DAE3B6DC76868C9C7DB16047C43F5FDFFC4480CBF06921D +IV=A4D1FD1C7755156BA1A070CDF4282E63 +CT=5C5DD66E7AD197DA86844D53C8ACEA0E +PT=011959D35C8FE620E1C49D1804912F26 + +I=33 +KEY=E1972A31ACF850A22CBC592AF6CAF6F0C6C24FD720CC13DD1E00D514BB97BD3B +IV=C3EFEC22FA335A373112624731A29E39 +CT=011959D35C8FE620E1C49D1804912F26 +PT=895DDA7BB43DC3060B41DA70CAE4D2ED + +I=34 +KEY=BB4A76B5E8FD3820CC5D4A44F527E6704F9F95AC94F1D0DB15410F6471736FD6 +IV=5ADD5C8444056882E0E1136E03ED1080 +CT=895DDA7BB43DC3060B41DA70CAE4D2ED +PT=94E8BBC942B4127A0A8EBEC59319CF57 + +I=35 +KEY=4D98C60F0FA316B2DA3D11CFB3B9FE0CDB772E65D645C2A11FCFB1A1E26AA081 +IV=F6D2B0BAE75E2E9216605B8B469E187C +CT=94E8BBC942B4127A0A8EBEC59319CF57 +PT=274FE85E229321D4A6B2E9D4F0D3830F + +I=36 +KEY=A9FC5AC4A7B3550BC34E4BA94C0D328BFC38C63BF4D6E375B97D587512B9238E +IV=E4649CCBA81043B919735A66FFB4CC87 +CT=274FE85E229321D4A6B2E9D4F0D3830F +PT=256AC08E72D79B0CB7457B26769AC226 + +I=37 +KEY=1C44DEF03398188AC1B2EF6A6E91A33FD95206B5860178790E3823536423E1A8 +IV=B5B88434942B4D8102FCA4C3229C91B4 +CT=256AC08E72D79B0CB7457B26769AC226 +PT=366D17A14CA0FC192DBB731C1C305874 + +I=38 +KEY=3D80B92C01F9721032366B20D97DC097EF3F1114CAA184602383504F7813B9DC +IV=21C467DC32616A9AF384844AB7EC63A8 +CT=366D17A14CA0FC192DBB731C1C305874 +PT=000B4A6054663874ECAE310144BA9377 + +I=39 +KEY=48DD38DC16A4CE76338C95A866C1C795EF345B749EC7BC14CF2D614E3CA92AAB +IV=755D81F0175DBC6601BAFE88BFBC0702 +CT=000B4A6054663874ECAE310144BA9377 +PT=32B32D65566626D794FB296CA816B0A8 + +I=40 +KEY=C62EFA02F23FE796799BF9151FBFD8D7DD877611C8A19AC35BD6482294BF9A03 +IV=8EF3C2DEE49B29E04A176CBD797E1F42 +CT=32B32D65566626D794FB296CA816B0A8 +PT=D743A090101B1BAF5B83E8C06517E193 + +I=41 +KEY=91400A96EEADA906ABD4C3F6863CE4750AC4D681D8BA816C0055A0E2F1A87B90 +IV=576EF0941C924E90D24F3AE399833CA2 +CT=D743A090101B1BAF5B83E8C06517E193 +PT=2DE61760BEE8F811B3FEB44D2C566DB0 + +I=42 +KEY=9983EAD4BF987E39644D7D0963F93DB62722C1E16652797DB3AB14AFDDFE1620 +IV=08C3E0425135D73FCF99BEFFE5C5D9C3 +CT=2DE61760BEE8F811B3FEB44D2C566DB0 +PT=E97598EFFED4128DCCCDD7A04D8405E1 + +I=43 +KEY=B72929D2D02A00D36E7C3BD11CDB9FA4CE57590E98866BF07F66C30F907A13C1 +IV=2EAAC3066FB27EEA0A3146D87F22A212 +CT=E97598EFFED4128DCCCDD7A04D8405E1 +PT=5983276B92B95898302385F5156B6201 + +I=44 +KEY=CC9928E45F7885515986E0D431F3288E97D47E650A3F33684F4546FA851171C0 +IV=7BB001368F52858237FADB052D28B72A +CT=5983276B92B95898302385F5156B6201 +PT=ABDEFF06E04995FD2C5472D05056A0A3 + +I=45 +KEY=59A2D8FCED30176B73FF5642BCE4A9163C0A8163EA76A6956311342AD547D163 +IV=953BF018B248923A2A79B6968D178198 +CT=ABDEFF06E04995FD2C5472D05056A0A3 +PT=E4210D117B05F3EADC8AF75D1A80B823 + +I=46 +KEY=FFCCE373B679DE040165054D9EECA460D82B8C729173557FBF9BC377CFC76940 +IV=A66E3B8F5B49C96F729A530F22080D76 +CT=E4210D117B05F3EADC8AF75D1A80B823 +PT=4786111E1B0F2CA78E43CC0D154BC1EA + +I=47 +KEY=36E29D3C942DBC6A12B53088632260649FAD9D6C8A7C79D831D80F7ADA8CA8AA +IV=C92E7E4F2254626E13D035C5FDCEC404 +CT=4786111E1B0F2CA78E43CC0D154BC1EA +PT=122DC3B40007BA36BC7E7EE808911DAE + +I=48 +KEY=3692660415E53226D2758E60FD6E3F5F8D805ED88A7BC3EE8DA67192D21DB504 +IV=0070FB3881C88E4CC0C0BEE89E4C5F3B +CT=122DC3B40007BA36BC7E7EE808911DAE +PT=5E443EC882C1B938C2A4C412D3A92FDF + +I=49 +KEY=E3C167B38A29EDFBDC37A50F434C7056D3C4601008BA7AD64F02B58001B49ADB +IV=D55301B79FCCDFDD0E422B6FBE224F09 +CT=5E443EC882C1B938C2A4C412D3A92FDF +PT=14A8F43BA8829B134D6BD110E6D43F92 + +I=50 +KEY=8AD38A575E425D347C5B5BFB08A5173CC76C942BA038E1C502696490E760A549 +IV=6912EDE4D46BB0CFA06CFEF44BE9676A +CT=14A8F43BA8829B134D6BD110E6D43F92 +PT=025982911796C2FE34C89157BF2959BD + +I=51 +KEY=AE4ABA37DD2C3C5109B13C3DD9FCB67EC53516BAB7AE233B36A1F5C75849FCF4 +IV=24993060836E616575EA67C6D159A142 +CT=025982911796C2FE34C89157BF2959BD +PT=BC658642A8EEBEC6DBE2A76BCD70799B + +I=52 +KEY=31AC934C58BF87AD1EE4357BBE315175795090F81F409DFDED4352AC9539856F +IV=9FE6297B8593BBFC1755094667CDE70B +CT=BC658642A8EEBEC6DBE2A76BCD70799B +PT=132CE1CC36EFE58A4A53534B962D2D70 + +I=53 +KEY=79F7C18CA600203D404363908749B22F6A7C713429AF7877A71001E70314A81F +IV=485B52C0FEBFA7905EA756EB3978E35A +CT=132CE1CC36EFE58A4A53534B962D2D70 +PT=8D2BA39F08ED00BEB51543C0FCCFA57C + +I=54 +KEY=162A4089A1E46EAB5C9592BF1F98BCC2E757D2AB214278C912054227FFDB0D63 +IV=6FDD810507E44E961CD6F12F98D10EED +CT=8D2BA39F08ED00BEB51543C0FCCFA57C +PT=2E8D05A8A3066094025FE07F3A53A94E + +I=55 +KEY=DB5F33F93F2B795EDA54095937B79E4CC9DAD7038244185D105AA258C588A42D +IV=CD7573709ECF17F586C19BE6282F228E +CT=2E8D05A8A3066094025FE07F3A53A94E +PT=D39EC2261C53AD45F91627E1B1F62D22 + +I=56 +KEY=CCA770427DF8CF5350864D4E86E6D8891A4415259E17B518E94C85B9747E890F +IV=17F843BB42D3B60D8AD24417B15146C5 +CT=D39EC2261C53AD45F91627E1B1F62D22 +PT=F517DC01890C3D300520B6CE343B7F94 + +I=57 +KEY=25F53E7CC6590220E9426296568DE496EF53C924171B8828EC6C33774045F69B +IV=E9524E3EBBA1CD73B9C42FD8D06B3C1F +CT=F517DC01890C3D300520B6CE343B7F94 +PT=ECBCCBB21AC2D07E3ECACD26D42E4444 + +I=58 +KEY=6D4A92C82C6C3D44CED65D76BB33B23E03EF02960DD95856D2A6FE51946BB2DF +IV=48BFACB4EA353F6427943FE0EDBE56A8 +CT=ECBCCBB21AC2D07E3ECACD26D42E4444 +PT=6FF7C241A5FF025FAA8C4DAF5E0950AE + +I=59 +KEY=A3D0AB0A0F8EDF232D111458D3B8B1C66C18C0D7A8265A09782AB3FECA62E271 +IV=CE9A39C223E2E267E3C7492E688B03F8 +CT=6FF7C241A5FF025FAA8C4DAF5E0950AE +PT=3B7E4B74F021F9E995627DE42B03D7D8 + +I=60 +KEY=A8E2D59CF188CDA75C80FA49889F7EE357668BA35807A3E0ED48CE1AE16135A9 +IV=0B327E96FE0612847191EE115B27CF25 +CT=3B7E4B74F021F9E995627DE42B03D7D8 +PT=6759C15ED1049A51953E814C2445F3C6 + +I=61 +KEY=092010B28BD3C8E59D09CE85169190BB303F4AFD890339B178764F56C524C66F +IV=A1C2C52E7A5B0542C18934CC9E0EEE58 +CT=6759C15ED1049A51953E814C2445F3C6 +PT=05F681CB7984491E2CE5B1025F860BEB + +I=62 +KEY=538E3068E1059FE89C27D5F19405274835C9CB36F08770AF5493FE549AA2CD84 +IV=5AAE20DA6AD6570D012E1B748294B7F3 +CT=05F681CB7984491E2CE5B1025F860BEB +PT=E046F5B143CEEAC44EF520F2C3BFA96E + +I=63 +KEY=78B5D2551099875910844A17ABBACD64D58F3E87B3499A6B1A66DEA6591D64EA +IV=2B3BE23DF19C18B18CA39FE63FBFEA2C +CT=E046F5B143CEEAC44EF520F2C3BFA96E +PT=0F508DD1BCC6C520A81AE7EC75361179 + +I=64 +KEY=8D6E7E66F496C358A369EF7C49D117A3DADFB3560F8F5F4BB27C394A2C2B7593 +IV=F5DBAC33E40F4401B3EDA56BE26BDAC7 +CT=0F508DD1BCC6C520A81AE7EC75361179 +PT=BAE114FFF19FD11336D454BF0FF6954D + +I=65 +KEY=781164DD6F90037E9896672FD24F1AF6603EA7A9FE108E5884A86DF523DDE0DE +IV=F57F1ABB9B06C0263BFF88539B9E0D55 +CT=BAE114FFF19FD11336D454BF0FF6954D +PT=FE73CE62C227459729E8FDC9116EC6BB + +I=66 +KEY=9268D6C0E8DE5AFBCCE137EADE6293E49E4D69CB3C37CBCFAD40903C32B32665 +IV=EA79B21D874E5985547750C50C2D8912 +CT=FE73CE62C227459729E8FDC9116EC6BB +PT=B13971219C12C12A8308213759196B0D + +I=67 +KEY=701EB5AEF8262D8634B53AF1768ED68E2F7418EAA0250AE52E48B10B6BAA4D68 +IV=E276636E10F8777DF8540D1BA8EC456A +CT=B13971219C12C12A8308213759196B0D +PT=4F5A36173C16ED45F5D36B9D1AED84FF + +I=68 +KEY=40D027792516E1FE962F63B9C939677C602E2EFD9C33E7A0DB9BDA967147C997 +IV=30CE92D7DD30CC78A29A5948BFB7B1F2 +CT=4F5A36173C16ED45F5D36B9D1AED84FF +PT=9FB89D6FEFE606058FE40B5492643596 + +I=69 +KEY=CAAFC0DD2E4FC86AC19B40BC34F14630FF96B39273D5E1A5547FD1C2E323FC01 +IV=8A7FE7A40B59299457B42305FDC8214C +CT=9FB89D6FEFE606058FE40B5492643596 +PT=F6D0717F197CBAE383B55117FCBE07AC + +I=70 +KEY=CE03D67B6DAB9CFAA0C20129475620230946C2ED6AA95B46D7CA80D51F9DFBAD +IV=04AC16A643E454906159419573A76613 +CT=F6D0717F197CBAE383B55117FCBE07AC +PT=7747114FF82F8C7568BE51912CFDB51A + +I=71 +KEY=DDCEDD32E5F0D26F7707DAE453288B537E01D3A29286D733BF74D14433604EB7 +IV=13CD0B49885B4E95D7C5DBCD147EAB70 +CT=7747114FF82F8C7568BE51912CFDB51A +PT=E75313A8DFA7EB0AD1664B14D2DBE284 + +I=72 +KEY=6B032958C3379BD4BEC22CD4271EB4589952C00A4D213C396E129A50E1BBAC33 +IV=B6CDF46A26C749BBC9C5F63074363F0B +CT=E75313A8DFA7EB0AD1664B14D2DBE284 +PT=42FEDBDC4F0BD11DA42163D76E952DC7 + +I=73 +KEY=1710F6CF86EDB5F1364F19CA676ED69BDBAC1BD6022AED24CA33F9878F2E81F4 +IV=7C13DF9745DA2E25888D351E407062C3 +CT=42FEDBDC4F0BD11DA42163D76E952DC7 +PT=6E0166BA404B3AEFACCA8E972F087EA5 + +I=74 +KEY=9D9711F138D0C2D1003E2C99BB0F0447B5AD7D6C4261D7CB66F97710A026FF51 +IV=8A87E73EBE3D772036713553DC61D2DC +CT=6E0166BA404B3AEFACCA8E972F087EA5 +PT=644A1DCFCA2EC01C3E8911768837D99E + +I=75 +KEY=1BD7E446FADA5507ECE26BBB635045E7D1E760A3884F17D758706666281126CF +IV=8640F5B7C20A97D6ECDC4722D85F41A0 +CT=644A1DCFCA2EC01C3E8911768837D99E +PT=4E69AE75BD37DB8024DBD1A11D6D414E + +I=76 +KEY=3454FD4B259FB4C086288ADAFF6464CD9F8ECED63578CC577CABB7C7357C6781 +IV=2F83190DDF45E1C76ACAE1619C34212A +CT=4E69AE75BD37DB8024DBD1A11D6D414E +PT=F63964784AD35374EAFC933AC11A48B6 + +I=77 +KEY=97EFD593918FB16F2D6889C118C5ED4469B7AAAE7FAB9F23965724FDF4662F37 +IV=A3BB28D8B41005AFAB40031BE7A18989 +CT=F63964784AD35374EAFC933AC11A48B6 +PT=51CBF7F67A22DA909567D67F1919ECEF + +I=78 +KEY=481E90BC31903905C08D0E5AEF79A514387C5D58058945B30330F282ED7FC3D8 +IV=DFF1452FA01F886AEDE5879BF7BC4850 +CT=51CBF7F67A22DA909567D67F1919ECEF +PT=9AE181DE8DB65E7E242926091A17D0B1 + +I=79 +KEY=35A4F86146CED63BDCB485B0AE4C205AA29DDC86883F1BCD2719D48BF7681369 +IV=7DBA68DD775EEF3E1C398BEA4135854E +CT=9AE181DE8DB65E7E242926091A17D0B1 +PT=47E15B5AC96A7FDB805F3B8862D9055F + +I=80 +KEY=5ECF20C5884FDF95C2B7C17D40CD6923E57C87DC41556416A746EF0395B11636 +IV=6B6BD8A4CE8109AE1E0344CDEE814979 +CT=47E15B5AC96A7FDB805F3B8862D9055F +PT=1806C474A1ECE5D8183E725804FB92C3 + +I=81 +KEY=AC473047ADF97E75C100CBBD73FA0892FD7A43A8E0B981CEBF789D5B914A84F5 +IV=F288108225B6A1E003B70AC0333761B1 +CT=1806C474A1ECE5D8183E725804FB92C3 +PT=0A0615424DAD4EFC25EC43B13C672727 + +I=82 +KEY=6620AE39484EDD0EC21A3E3F659537DDF77C56EAAD14CF329A94DEEAAD2DA3D2 +IV=CA679E7EE5B7A37B031AF582166F3F4F +CT=0A0615424DAD4EFC25EC43B13C672727 +PT=551639A520D0D043CAD42CB02900D5EF + +I=83 +KEY=04D696BB056CC59492B376CB3A0286EAA26A6F4F8DC41F715040F25A842D763D +IV=62F638824D22189A50A948F45F97B137 +CT=551639A520D0D043CAD42CB02900D5EF +PT=DF906B0E72FEACC9B45381B992E23A5A + +I=84 +KEY=0AED1F2A6660BDBA660E00137E38C1C97DFA0441FF3AB3B8E41373E316CF4C67 +IV=0E3B8991630C782EF4BD76D8443A4723 +CT=DF906B0E72FEACC9B45381B992E23A5A +PT=D477C6287D05C0F83B27B1FD91F5F908 + +I=85 +KEY=E0A51B848A913A860FD2C39941C8C3A1A98DC269823F7340DF34C21E873AB56F +IV=EA4804AEECF1873C69DCC38A3FF00268 +CT=D477C6287D05C0F83B27B1FD91F5F908 +PT=6AB7E109C085B0BA7C8A8B76482F9C80 + +I=86 +KEY=A8B0500EC0292EF668A03E8293E235BAC33A236042BAC3FAA3BE4968CF1529EF +IV=48154B8A4AB814706772FD1BD22AF61B +CT=6AB7E109C085B0BA7C8A8B76482F9C80 +PT=71A31000A5763A0C79B6353E39FFBE84 + +I=87 +KEY=34C53C34901B693F4611F20F1DD5125EB2993360E7CCF9F6DA087C56F6EA976B +IV=9C756C3A503247C92EB1CC8D8E3727E4 +CT=71A31000A5763A0C79B6353E39FFBE84 +PT=B5B377EBEBC0B32A5A0C7E2A2504C32A + +I=88 +KEY=A13850B9164EF60EB77E06819605AC01072A448B0C0C4ADC8004027CD3EE5441 +IV=95FD6C8D86559F31F16FF48E8BD0BE5F +CT=B5B377EBEBC0B32A5A0C7E2A2504C32A +PT=B74459D1E7C5CF9106C362572FE9C917 + +I=89 +KEY=37261F6D588FF9028A23319CE02DDA71B06E1D5AEBC9854D86C7602BFC079D56 +IV=961E4FD44EC10F0C3D5D371D76287670 +CT=B74459D1E7C5CF9106C362572FE9C917 +PT=5777A0854A6E00DB0B6B199BDD35447A + +I=90 +KEY=085A7B276E58B9175204A87D74B9E78AE719BDDFA1A785968DAC79B02132D92C +IV=3F7C644A36D74015D82799E194943DFB +CT=5777A0854A6E00DB0B6B199BDD35447A +PT=01CC73B6EE44403DFED2C91D6F0DC441 + +I=91 +KEY=61DC99DD0C1470F511D79DCC2541002AE6D5CE694FE3C5AB737EB0AD4E3F1D6D +IV=6986E2FA624CC9E243D335B151F8E7A0 +CT=01CC73B6EE44403DFED2C91D6F0DC441 +PT=8993161CF3E75DE836BB2C1955581DB6 + +I=92 +KEY=AEB68207F1E4395794BA7E28CE9BF7996F46D875BC04984345C59CB41B6700DB +IV=CF6A1BDAFDF049A2856DE3E4EBDAF7B3 +CT=8993161CF3E75DE836BB2C1955581DB6 +PT=2A4D6929ED3A66E71EFC40F1840CD649 + +I=93 +KEY=DBF8A8AED7B6D7BCFD1B5BEEC3F01AC0450BB15C513EFEA45B39DC459F6BD692 +IV=754E2AA92652EEEB69A125C60D6BED59 +CT=2A4D6929ED3A66E71EFC40F1840CD649 +PT=596CE09B1176A9FB5A9973086A0E4C12 + +I=94 +KEY=1A61C7F2FB652E256190C0896F800CD61C6751C74048575F01A0AF4DF5659A80 +IV=C1996F5C2CD3F9999C8B9B67AC701616 +CT=596CE09B1176A9FB5A9973086A0E4C12 +PT=B57AC41360C13F6831689C311BD0ED2C + +I=95 +KEY=FC3828E6A9487698231D11C10C353F2DA91D95D42089683730C8337CEEB577AC +IV=E659EF14522D58BD428DD14863B533FB +CT=B57AC41360C13F6831689C311BD0ED2C +PT=F58AA69EEBF25943C728FA26524DE154 + +I=96 +KEY=9D16CAD42D19D1A3B9CB12566745B2765C97334ACB7B3174F7E0C95ABCF896F8 +IV=612EE2328451A73B9AD603976B708D5B +CT=F58AA69EEBF25943C728FA26524DE154 +PT=4A678FED6C5E5898A47F2DFE9DF71DF2 + +I=97 +KEY=D9A8554717435E69EFD4A617CA70B0D216F0BCA7A72569EC539FE4A4210F8B0A +IV=44BE9F933A5A8FCA561FB441AD3502A4 +CT=4A678FED6C5E5898A47F2DFE9DF71DF2 +PT=38011537A04E6C4A81510899741F2FFC + +I=98 +KEY=AA9D9A7B4E187F8D78AAEE11967A20A42EF1A990076B05A6D2CEEC3D5510A4F6 +IV=7335CF3C595B21E4977E48065C0A9076 +CT=38011537A04E6C4A81510899741F2FFC +PT=6472060F536BC5F83A3C247F63C3580E + +I=99 +KEY=90A5D8CD93F0AE068E8DC72CA5DD6E184A83AF9F5400C05EE8F2C84236D3FCF8 +IV=3A3842B6DDE8D18BF627293D33A74EBC +CT=6472060F536BC5F83A3C247F63C3580E +PT=08B99B59D0584DAC0412796871FE3F27 + +I=100 +KEY=489520777A18D5BF65B85AAEA29DB3D8423A34C684588DF2ECE0B12A472DC3DF +IV=D830F8BAE9E87BB9EB359D820740DDC0 +CT=08B99B59D0584DAC0412796871FE3F27 +PT=E8B8579DF9E918B3D24C18E17068AD66 + +I=101 +KEY=69542EE000ACEEFB5E0EB471F3CD0927AA82635B7DB195413EACA9CB37456EB9 +IV=21C10E977AB43B443BB6EEDF5150BAFF +CT=E8B8579DF9E918B3D24C18E17068AD66 +PT=9B6C3234993F6900B3E572B5A43CA644 + +I=102 +KEY=E88C863186548F35DF6EFB48743B7C1831EE516FE48EFC418D49DB7E9379C8FD +IV=81D8A8D186F861CE81604F3987F6753F +CT=9B6C3234993F6900B3E572B5A43CA644 +PT=E0A2962A02698489813292D33D02D0AB + +I=103 +KEY=C9DD7904D060B79B83F97A1FC93E50DED14CC745E6E778C80C7B49ADAE7B1856 +IV=2151FF35563438AE5C978157BD052CC6 +CT=E0A2962A02698489813292D33D02D0AB +PT=10C80B22D8EC54B855E103D6B76C03BC + +I=104 +KEY=D208B7A87003A507561FA5C7422A85C5C184CC673E0B2C70599A4A7B19171BEA +IV=1BD5CEACA063129CD5E6DFD88B14D51B +CT=10C80B22D8EC54B855E103D6B76C03BC +PT=CE88B76CC2223EB68BA9B5852C1921DB + +I=105 +KEY=27B0E1BF8EA57E8AD51BC3FA278369780F0C7B0BFC2912C6D233FFFE350E3A31 +IV=F5B85617FEA6DB8D8304663D65A9ECBD +CT=CE88B76CC2223EB68BA9B5852C1921DB +PT=00401EEE034A193C86A23152AF4B767E + +I=106 +KEY=45E37A710D9E754EE90B7C1DBB894DC20F4C65E5FF630BFA5491CEAC9A454C4F +IV=62539BCE833B0BC43C10BFE79C0A24BA +CT=00401EEE034A193C86A23152AF4B767E +PT=CEF1DC8A618BF71C68720E6EEDE31EEF + +I=107 +KEY=B432E78F49D50B045C8B598EEA3D4142C1BDB96F9EE8FCE63CE3C0C277A652A0 +IV=F1D19DFE444B7E4AB580259351B40C80 +CT=CEF1DC8A618BF71C68720E6EEDE31EEF +PT=EF8FB3790627F31E5CBF21B31FF942DE + +I=108 +KEY=F5CE9C0AF13DA60D32912620673AEE572E320A1698CF0FF8605CE171685F107E +IV=41FC7B85B8E8AD096E1A7FAE8D07AF15 +CT=EF8FB3790627F31E5CBF21B31FF942DE +PT=2EF1C697D948D712AA177855B0D56650 + +I=109 +KEY=DA14D71084F47D87385EF58128C7517F00C3CC814187D8EACA4B9924D88A762E +IV=2FDA4B1A75C9DB8A0ACFD3A14FFDBF28 +CT=2EF1C697D948D712AA177855B0D56650 +PT=0A20E82375680D134FE05AC74E3A0217 + +I=110 +KEY=B68F8C980984E2508E9706117256A4A70AE324A234EFD5F985ABC3E396B07439 +IV=6C9B5B888D709FD7B6C9F3905A91F5D8 +CT=0A20E82375680D134FE05AC74E3A0217 +PT=46AF886AB871A3DABDEB32F1738E180B + +I=111 +KEY=078A8955ECB2F6ACB249E2DB36B660794C4CACC88C9E76233840F112E53E6C32 +IV=B10505CDE53614FC3CDEE4CA44E0C4DE +CT=46AF886AB871A3DABDEB32F1738E180B +PT=79949181E3D20A3042C1E7BDAE73330B + +I=112 +KEY=7CB2A8360EE65417A979D9B5D4A32D2935D83D496F4C7C137A8116AF4B4D5F39 +IV=7B382163E254A2BB1B303B6EE2154D50 +CT=79949181E3D20A3042C1E7BDAE73330B +PT=12C5E55F6EA47BC44392AE9FB888C1FB + +I=113 +KEY=E5835F97C4FF1B007D695DD0E72324A9271DD81601E807D73913B830F3C59EC2 +IV=9931F7A1CA194F17D410846533800980 +CT=12C5E55F6EA47BC44392AE9FB888C1FB +PT=FCA15AB64A01FA6E89FE41F72A67D9E8 + +I=114 +KEY=50932FF04CCCE411AA0541726C1C4CD7DBBC82A04BE9FDB9B0EDF9C7D9A2472A +IV=B51070678833FF11D76C1CA28B3F687E +CT=FCA15AB64A01FA6E89FE41F72A67D9E8 +PT=7B75EC39F707C3C90691BE561AD5CAC6 + +I=115 +KEY=ECAEC5FD6AF5F7DF2587C1A40CB046ADA0C96E99BCEE3E70B67C4791C3778DEC +IV=BC3DEA0D263913CE8F8280D660AC0A7A +CT=7B75EC39F707C3C90691BE561AD5CAC6 +PT=1D3D15FFA0B69EFA8E146301411DFA49 + +I=116 +KEY=82F88C3850CC3D111C2125F34840A9A2BDF47B661C58A08A38682490826A77A5 +IV=6E5649C53A39CACE39A6E45744F0EF0F +CT=1D3D15FFA0B69EFA8E146301411DFA49 +PT=34AFB3D6F0BD9ACB6954BB96B1067F9E + +I=117 +KEY=702FEC9E7F0D2369FF35D4B7A1269AD3895BC8B0ECE53A41513C9F06336C083B +IV=F2D760A62FC11E78E314F144E9663371 +CT=34AFB3D6F0BD9ACB6954BB96B1067F9E +PT=899E4C8192661CCA7C73CDFBC3DCA2F3 + +I=118 +KEY=A1DF98E4585C1A4C15C42AD0782C925000C584317E83268B2D4F52FDF0B0AAC8 +IV=D1F0747A27513925EAF1FE67D90A0883 +CT=899E4C8192661CCA7C73CDFBC3DCA2F3 +PT=3097C0413291E217FB0E3A8A2D908C12 + +I=119 +KEY=9F9082177BF33D8AF6131018E1EFD49F305244704C12C49CD6416877DD2026DA +IV=3E4F1AF323AF27C6E3D73AC899C346CF +CT=3097C0413291E217FB0E3A8A2D908C12 +PT=6C71968295905F881F95DC8BA481CA72 + +I=120 +KEY=B7E5B267EDBFFD4DB4526BA2A1978C105C23D2F2D9829B14C9D4B4FC79A1ECA8 +IV=28753070964CC0C742417BBA4078588F +CT=6C71968295905F881F95DC8BA481CA72 +PT=96D0AB98DBD0CB94A68FC41BEF0B418D + +I=121 +KEY=127FAA6C94663FA9008A1FB7A419C036CAF3796A025250806F5B70E796AAAD25 +IV=A59A180B79D9C2E4B4D87415058E4C26 +CT=96D0AB98DBD0CB94A68FC41BEF0B418D +PT=9E3E4428A911FB328A9F89D7D5E527DB + +I=122 +KEY=1B9493F07E7E5F07473E6997AE15CCDC54CD3D42AB43ABB2E5C4F930434F8AFE +IV=09EB399CEA1860AE47B476200A0C0CEA +CT=9E3E4428A911FB328A9F89D7D5E527DB +PT=0DB5EF3481A9945BAF2E499B5CDE8DDC + +I=123 +KEY=7B2B8201EEF1601C44006A6D7E06EE355978D2762AEA3FE94AEAB0AB1F910722 +IV=60BF11F1908F3F1B033E03FAD01322E9 +CT=0DB5EF3481A9945BAF2E499B5CDE8DDC +PT=C0569DD7DCAE99859D3987B04FFD8CF0 + +I=124 +KEY=B2D7FEE25A564FA00CEDC8E05BAC7F7D992E4FA1F644A66CD7D3371B506C8BD2 +IV=C9FC7CE3B4A72FBC48EDA28D25AA9148 +CT=C0569DD7DCAE99859D3987B04FFD8CF0 +PT=D8AF74B5BB8E632299D32E8DD4DDA012 + +I=125 +KEY=5A06C176A290538BC549CAA8041539A941813B144DCAC54E4E00199684B12BC0 +IV=E8D13F94F8C61C2BC9A402485FB946D4 +CT=D8AF74B5BB8E632299D32E8DD4DDA012 +PT=0821FB911EDE8CDCD97DDAEDCCDB7B1C + +I=126 +KEY=1318D23A3A966D16FDEEE300571F3A8549A0C08553144992977DC37B486A50DC +IV=491E134C98063E9D38A729A8530A032C +CT=0821FB911EDE8CDCD97DDAEDCCDB7B1C +PT=BCB2831AF3721C020FC1D683C19AEBEA + +I=127 +KEY=D6D24AA79B3CA4434CCE2B1470B4FE18F512439FA066559098BC15F889F0BB36 +IV=C5CA989DA1AAC955B120C81427ABC49D +CT=BCB2831AF3721C020FC1D683C19AEBEA +PT=BE869BB3C18EB622CCAC81B6F5B62CC4 + +I=128 +KEY=5F62348BCD9ADB23A19E683400D968404B94D82C61E8E3B25410944E7C4697F2 +IV=89B07E2C56A67F60ED504320706D9658 +CT=BE869BB3C18EB622CCAC81B6F5B62CC4 +PT=C8D3EDD549FEA614B4F2348F82DE5531 + +I=129 +KEY=A64795E417B7C9344185F6B0C66C096B834735F9281645A6E0E2A0C1FE98C2C3 +IV=F925A16FDA2D1217E01B9E84C6B5612B +CT=C8D3EDD549FEA614B4F2348F82DE5531 +PT=4049BDBD9C302D8F2E06F10D34317784 + +I=130 +KEY=CD1F9AB35436014B0CF7ECE9FF98C2BDC30E8844B4266829CEE451CCCAA9B547 +IV=6B580F574381C87F4D721A5939F4CBD6 +CT=4049BDBD9C302D8F2E06F10D34317784 +PT=E1338EA5C5462E8C458E5546FA60324D + +I=131 +KEY=78F7558C14BB5100CE93CD49C22BE2D9223D06E1716046A58B6A048A30C9870A +IV=B5E8CF3F408D504BC26421A03DB32064 +CT=E1338EA5C5462E8C458E5546FA60324D +PT=055984AA929F4D45F5812DC719D4EF24 + +I=132 +KEY=2DBC5092C4C7AB427576EBA2855E00562764824BE3FF0BE07EEB294D291D682E +IV=554B051ED07CFA42BBE526EB4775E28F +CT=055984AA929F4D45F5812DC719D4EF24 +PT=ABC519C4290C69D98BF7AC2A56767202 + +I=133 +KEY=68FA1D8FE36FC5B48A7486FBB34A7B598CA19B8FCAF36239F51C85677F6B1A2C +IV=45464D1D27A86EF6FF026D5936147B0F +CT=ABC519C4290C69D98BF7AC2A56767202 +PT=C825E44799B1739A1F4CB406BBEABEDD + +I=134 +KEY=A2302849850FD33D4048B898DB6C7B0244847FC8534211A3EA503161C481A4F1 +IV=CACA35C666601689CA3C3E636826005B +CT=C825E44799B1739A1F4CB406BBEABEDD +PT=D24EE8D56CE09AFE1061B4016ADD61F7 + +I=135 +KEY=9B2E669EA4BB938072E6E97B0ACF834E96CA971D3FA28B5DFA318560AE5CC506 +IV=391E4ED721B440BD32AE51E3D1A3F84C +CT=D24EE8D56CE09AFE1061B4016ADD61F7 +PT=50FECB118EABF93BB97102E9212C883D + +I=136 +KEY=A07C5EBAC9D0F862AD525C76460B4BA9C6345C0CB1097266434087898F704D3B +IV=3B5238246D6B6BE2DFB4B50D4CC4C8E7 +CT=50FECB118EABF93BB97102E9212C883D +PT=C370C26BD3805211A4679399DFA4DDCB + +I=137 +KEY=414C776222058D6285574741B2B4D11D05449E6762892077E727141050D490F0 +IV=E13029D8EBD5750028051B37F4BF9AB4 +CT=C370C26BD3805211A4679399DFA4DDCB +PT=79715A04DF9216268C77A152CA96C2F6 + +I=138 +KEY=5E54A416470FE8BA263C0FC88FD884297C35C463BD1B36516B50B5429A425206 +IV=1F18D374650A65D8A36B48893D6C5534 +CT=79715A04DF9216268C77A152CA96C2F6 +PT=06DF18B5FAF35F03FE22E39CAE430655 + +I=139 +KEY=98C55CFFB53FA72345EF936283F64BB17AEADCD647E86952957256DE34015453 +IV=C691F8E9F2304F9963D39CAA0C2ECF98 +CT=06DF18B5FAF35F03FE22E39CAE430655 +PT=1AED42EB32C4BAEAF9946818AA00C324 + +I=140 +KEY=B8332B1EE5D6A4E1BBFA20AEAE22330560079E3D752CD3B86CE63EC69E019777 +IV=20F677E150E903C2FE15B3CC2DD478B4 +CT=1AED42EB32C4BAEAF9946818AA00C324 +PT=D276B6A6D480165A944572EF76D4B3E8 + +I=141 +KEY=6E50753A2A0814A778FA2BC773C6A7A2B271289BA1ACC5E2F8A34C29E8D5249F +IV=D6635E24CFDEB046C3000B69DDE494A7 +CT=D276B6A6D480165A944572EF76D4B3E8 +PT=BA46F59DFADC6CA2CBB7D80E33D7B24B + +I=142 +KEY=D8E1763EAD728AB8AA2284964BE586880837DD065B70A94033149427DB0296D4 +IV=B6B10304877A9E1FD2D8AF513823212A +CT=BA46F59DFADC6CA2CBB7D80E33D7B24B +PT=FC9B9F7B5120E1D8B2DD58D211EFF053 + +I=143 +KEY=458CB146C73342F9D5EE4364C400E8E5F4AC427D0A50489881C9CCF5CAED6687 +IV=9D6DC7786A41C8417FCCC7F28FE56E6D +CT=FC9B9F7B5120E1D8B2DD58D211EFF053 +PT=6AD8BCAEFF6F0BF9F360FF601C9B7A43 + +I=144 +KEY=F1FBE00DA1F634ACACB6E2F4F15C11179E74FED3F53F436172A93395D6761CC4 +IV=B477514B66C576557958A190355CF9F2 +CT=6AD8BCAEFF6F0BF9F360FF601C9B7A43 +PT=BB6E45D060E186323AC2B50CFB988856 + +I=145 +KEY=3FBC35054FFF43657936BB676A5C5D1F251ABB0395DEC553486B86992DEE9492 +IV=CE47D508EE0977C9D58059939B004C08 +CT=BB6E45D060E186323AC2B50CFB988856 +PT=31B6157397933EE35DEE5B40FE7237BB + +I=146 +KEY=D49B4E96F8FC2D91FBED3985C53BEB8314ACAE70024DFBB01585DDD9D39CA329 +IV=EB277B93B7036EF482DB82E2AF67B69C +CT=31B6157397933EE35DEE5B40FE7237BB +PT=EFEB82ED91C5C60FB8F910542804B57B + +I=147 +KEY=8D4ABC926827F066B4391FF4B3D6EC99FB472C9D93883DBFAD7CCD8DFB981652 +IV=59D1F20490DBDDF74FD4267176ED071A +CT=EFEB82ED91C5C60FB8F910542804B57B +PT=E30D071737AB9991F000302502BE84A6 + +I=148 +KEY=086A14365F781B2FAF533B1534F458D2184A2B8AA423A42E5D7CFDA8F92692F4 +IV=8520A8A4375FEB491B6A24E18722B44B +CT=E30D071737AB9991F000302502BE84A6 +PT=856AF9DF9A9FE5038B75C98E0E1C720F + +I=149 +KEY=A64DE8CF2DF04ADB60E88C769F7025BC9D20D2553EBC412DD6093426F73AE0FB +IV=AE27FCF9728851F4CFBBB763AB847D6E +CT=856AF9DF9A9FE5038B75C98E0E1C720F +PT=D84910F298F91E081480A912B1AF32D6 + +I=150 +KEY=C52575277A0BD189E2F746FC51CA77844569C2A7A6455F25C2899D344695D22D +IV=63689DE857FB9B52821FCA8ACEBA5238 +CT=D84910F298F91E081480A912B1AF32D6 +PT=57E4A4A2D639D414ED7F82583B4FFA52 + +I=151 +KEY=CB9A5219490F7EE31B030ECE521C589B128D6605707C8B312FF61F6C7DDA287F +IV=0EBF273E3304AF6AF9F4483203D62F1F +CT=57E4A4A2D639D414ED7F82583B4FFA52 +PT=1CECC8218392F2047C0B70BEBFCC5846 + +I=152 +KEY=AA6412AAC8FC309E6BCDFFD1DA01B6470E61AE24F3EE793553FD6FD2C2167039 +IV=61FE40B381F34E7D70CEF11F881DEEDC +CT=1CECC8218392F2047C0B70BEBFCC5846 +PT=EC2B86A04DB2B4F41830E5EA035531E3 + +I=153 +KEY=EFF5BC892E47F4C7EA859969255AC665E24A2884BE5CCDC14BCD8A38C14341DA +IV=4591AE23E6BBC459814866B8FF5B7022 +CT=EC2B86A04DB2B4F41830E5EA035531E3 +PT=8A1A8EE6E08F61E99FC37AC177881C8A + +I=154 +KEY=D62E9405D7402765E30FDAD7A29B2E716850A6625ED3AC28D40EF0F9B6CB5D50 +IV=39DB288CF907D3A2098A43BE87C1E814 +CT=8A1A8EE6E08F61E99FC37AC177881C8A +PT=F21583AC8C5F03C19A1A9B856C97D6E0 + +I=155 +KEY=D49F229B7DB6973EDE6BD14AB20234379A4525CED28CAFE94E146B7CDA5C8BB0 +IV=02B1B69EAAF6B05B3D640B9D10991A46 +CT=F21583AC8C5F03C19A1A9B856C97D6E0 +PT=323191D5997CF0424B7F5501CBD55B17 + +I=156 +KEY=08B1021CD316864EF5B370CBF891FD27A874B41B4BF05FAB056B3E7D1189D0A7 +IV=DC2E2087AEA011702BD8A1814A93C910 +CT=323191D5997CF0424B7F5501CBD55B17 +PT=B2BBCC6E54CB33319536A81174B0D73B + +I=157 +KEY=786AE1D89ECC32C8883D984E7DC5FD0A1ACF78751F3B6C9A905D966C6539079C +IV=70DBE3C44DDAB4867D8EE8858554002D +CT=B2BBCC6E54CB33319536A81174B0D73B +PT=6E4ADDA6895734D891F328C6D0C71467 + +I=158 +KEY=E6C7441B75AF8701E29376287A126CB07485A5D3966C584201AEBEAAB5FE13FB +IV=9EADA5C3EB63B5C96AAEEE6607D791BA +CT=6E4ADDA6895734D891F328C6D0C71467 +PT=8BED3D2AAB5271F90EE5335520E87AA2 + +I=159 +KEY=22D515400072783951742ACDF2FA6DC8FF6898F93D3E29BB0F4B8DFF95166959 +IV=C412515B75DDFF38B3E75CE588E80178 +CT=8BED3D2AAB5271F90EE5335520E87AA2 +PT=D3059CA1B293AA1F52D459643C5FAB5C + +I=160 +KEY=D6E6A383AF38A1CD2889A5F79A23CE512C6D04588FAD83A45D9FD49BA949C205 +IV=F433B6C3AF4AD9F479FD8F3A68D9A399 +CT=D3059CA1B293AA1F52D459643C5FAB5C +PT=C20D8580ACA043B0ED2F409EEA42C0F0 + +I=161 +KEY=AA95A47ADECB61AAD1A05DA0CE6B17BDEE6081D8230DC014B0B09405430B02F5 +IV=7C7307F971F3C067F929F8575448D9EC +CT=C20D8580ACA043B0ED2F409EEA42C0F0 +PT=61C0D0081F176C53DE83B70608201EE6 + +I=162 +KEY=168A56A528A70354AD74C59A8AF33A508FA051D03C1AAC476E3323034B2B1C13 +IV=BC1FF2DFF66C62FE7CD4983A44982DED +CT=61C0D0081F176C53DE83B70608201EE6 +PT=C016536FEFC08B69867AB2946FFBE011 + +I=163 +KEY=92157F38953622D8C0E191DAC4179A6A4FB602BFD3DA272EE849919724D0FC02 +IV=849F299DBD91218C6D9554404EE4A03A +CT=C016536FEFC08B69867AB2946FFBE011 +PT=6923FF03C812710270438F67EF2F42D1 + +I=164 +KEY=CCB6779947D31DF17182FB54555B49422695FDBC1BC8562C980A1EF0CBFFBED3 +IV=5EA308A1D2E53F29B1636A8E914CD328 +CT=6923FF03C812710270438F67EF2F42D1 +PT=0D1674014AD9DC2150E073E2FCF006A8 + +I=165 +KEY=22AA52C07B42CFEB5E75687D395D86092B8389BD51118A0DC8EA6D12370FB87B +IV=EE1C25593C91D21A2FF793296C06CF4B +CT=0D1674014AD9DC2150E073E2FCF006A8 +PT=6399A65CC66E9318F2CEE1103B8FFB90 + +I=166 +KEY=527EF084271AC57F5D33F2E7C7BE1FF1481A2FE1977F19153A248C020C8043EB +IV=70D4A2445C580A9403469A9AFEE399F8 +CT=6399A65CC66E9318F2CEE1103B8FFB90 +PT=511CBDD6CFA31788A43C765301D6BAAB + +I=167 +KEY=D826E762C9EA31B6F4415B3AE5ED888B1906923758DC0E9D9E18FA510D56F940 +IV=8A5817E6EEF0F4C9A972A9DD2253977A +CT=511CBDD6CFA31788A43C765301D6BAAB +PT=B04E78AB18AE3F5B825087D9D5794BD7 + +I=168 +KEY=B4C2DEE60A738C428B187EC3A3A4A982A948EA9C407231C61C487D88D82FB297 +IV=6CE43984C399BDF47F5925F946492109 +CT=B04E78AB18AE3F5B825087D9D5794BD7 +PT=6B013F9A972D82BD5A87DA6C1DD5FD0F + +I=169 +KEY=C4A41F8C4B26391F6C0D629C6B052BD8C249D506D75FB37B46CFA7E4C5FA4F98 +IV=7066C16A4155B55DE7151C5FC8A1825A +CT=6B013F9A972D82BD5A87DA6C1DD5FD0F +PT=9005F8243C6486F63590E7508503719C + +I=170 +KEY=91A18F2681FCACE1C80DC772BD0F2628524C2D22EB3B358D735F40B440F93E04 +IV=550590AACADA95FEA400A5EED60A0DF0 +CT=9005F8243C6486F63590E7508503719C +PT=39DEEEC3D3AEEBBF4B573462B375B5E4 + +I=171 +KEY=E8FF0EE1269AFDCA213F69757C84704D6B92C3E13895DE32380874D6F38C8BE0 +IV=795E81C7A766512BE932AE07C18B5665 +CT=39DEEEC3D3AEEBBF4B573462B375B5E4 +PT=1910F8E7C3D863784058CB35D674AEEB + +I=172 +KEY=F00751EFCCECA0ECA3C252F396B4078E72823B06FB4DBD4A7850BFE325F8250B +IV=18F85F0EEA765D2682FD3B86EA3077C3 +CT=1910F8E7C3D863784058CB35D674AEEB +PT=4A71250E55629D3C5CC62B18B4B67653 + +I=173 +KEY=383A1B81E82B8174A9B9F0AF9EA498A338F31E08AE2F2076249694FB914E5358 +IV=C83D4A6E24C721980A7BA25C08109F2D +CT=4A71250E55629D3C5CC62B18B4B67653 +PT=19CBB63FBB92C7A10B676DBB5EB29060 + +I=174 +KEY=A6695341053BD5B1E15A6CD73DEF84E12138A83715BDE7D72FF1F940CFFCC338 +IV=9E5348C0ED1054C548E39C78A34B1C42 +CT=19CBB63FBB92C7A10B676DBB5EB29060 +PT=18BA0A45E67D2CFEC691203FC2509837 + +I=175 +KEY=71B4C384EF619E5D6CADBFC7D53564913982A272F3C0CB29E960D97F0DAC5B0F +IV=D7DD90C5EA5A4BEC8DF7D310E8DAE070 +CT=18BA0A45E67D2CFEC691203FC2509837 +PT=7699C8550933C30D630AC16D8DA6F13D + +I=176 +KEY=7D0527970FD45C35817091A317A2EAB04F1B6A27FAF308248A6A1812800AAA32 +IV=0CB1E413E0B5C268EDDD2E64C2978E21 +CT=7699C8550933C30D630AC16D8DA6F13D +PT=78FE8EEC14618ED34F63E8671434ADA7 + +I=177 +KEY=204ECE43E91409C515077FACC37C4DF837E5E4CBEE9286F7C509F075943E0795 +IV=5D4BE9D4E6C055F09477EE0FD4DEA748 +CT=78FE8EEC14618ED34F63E8671434ADA7 +PT=0907F75149A74B49F302D2C08CF18AF5 + +I=178 +KEY=8E80DC69B6CC0F0D7F1F0BE6E9F178AD3EE2139AA735CDBE360B22B518CF8D60 +IV=AECE122A5FD806C86A18744A2A8D3555 +CT=0907F75149A74B49F302D2C08CF18AF5 +PT=FE24023BCABCD83E6212FA53E7320D92 + +I=179 +KEY=5152CCE87D9CCC930D7B376C4F1B334BC0C611A16D8915805419D8E6FFFD80F2 +IV=DFD21081CB50C39E72643C8AA6EA4BE6 +CT=FE24023BCABCD83E6212FA53E7320D92 +PT=9526CDED534CB3366306F8C731F87CD6 + +I=180 +KEY=00C9D78F67F1B63181ADE21A02675C6755E0DC4C3EC5A6B6371F2021CE05FC24 +IV=519B1B671A6D7AA28CD6D5764D7C6F2C +CT=9526CDED534CB3366306F8C731F87CD6 +PT=801F005EA2E9287FFD8D9B01BE8E2205 + +I=181 +KEY=442603CF6A012BDB23086BD7EFD7396ED5FFDC129C2C8EC9CA92BB20708BDE21 +IV=44EFD4400DF09DEAA2A589CDEDB06509 +CT=801F005EA2E9287FFD8D9B01BE8E2205 +PT=7558994ACE0299E34EB586B832C98560 + +I=182 +KEY=B153C7C49983077FB0C79C30266A487AA0A74558522E172A84273D9842425B41 +IV=F575C40BF3822CA493CFF7E7C9BD7114 +CT=7558994ACE0299E34EB586B832C98560 +PT=324273A52FFBFBCAC5401CFCD3075C98 + +I=183 +KEY=0E038D82F7FAD738824EF9FEB6F6627692E536FD7DD5ECE041672164914507D9 +IV=BF504A466E79D047328965CE909C2A0C +CT=324273A52FFBFBCAC5401CFCD3075C98 +PT=509E651E053E85340A5B545AA0E40A71 + +I=184 +KEY=B2237D5D0E16B5F9A8FD7274F4CA1206C27B53E378EB69D44B3C753E31A10DA8 +IV=BC20F0DFF9EC62C12AB38B8A423C7070 +CT=509E651E053E85340A5B545AA0E40A71 +PT=1716AB4DCAB205D62EF356E4C565BA70 + +I=185 +KEY=CBE25CF8F3CAB9849F44F330AD8B17E1D56DF8AEB2596C0265CF23DAF4C4B7D8 +IV=79C121A5FDDC0C7D37B98144594105E7 +CT=1716AB4DCAB205D62EF356E4C565BA70 +PT=093CA7764E7F6828EF210E89D3D01C73 + +I=186 +KEY=2BF3C06B0CAE728C8A6134634D5DEAF1DC515FD8FC26042A8AEE2D532714ABAB +IV=E0119C93FF64CB081525C753E0D6FD10 +CT=093CA7764E7F6828EF210E89D3D01C73 +PT=86F8B39DB10EB8B3CFED4C98BBBFFAE1 + +I=187 +KEY=A2C742CFF575CA98D3261BE7DA99E3935AA9EC454D28BC99450361CB9CAB514A +IV=893482A4F9DBB81459472F8497C40962 +CT=86F8B39DB10EB8B3CFED4C98BBBFFAE1 +PT=8BF9C14617B3CE1511ABBD484439D041 + +I=188 +KEY=F8AB8BAD8F2C5A54ED4C80AD094A36D4D1502D035A9B728C54A8DC83D892810B +IV=5A6CC9627A5990CC3E6A9B4AD3D3D547 +CT=8BF9C14617B3CE1511ABBD484439D041 +PT=C41B937B1D5E10D982C7850685997862 + +I=189 +KEY=4DBA6859C8D681253E8F6278BE76D87D154BBE7847C56255D66F59855D0BF969 +IV=B511E3F447FADB71D3C3E2D5B73CEEA9 +CT=C41B937B1D5E10D982C7850685997862 +PT=467114F3F33C8BA65AA76C297E9DA11C + +I=190 +KEY=2738E652A9F41B48B443B487B2AF6D7C533AAA8BB4F9E9F38CC835AC23965875 +IV=6A828E0B61229A6D8ACCD6FF0CD9B501 +CT=467114F3F33C8BA65AA76C297E9DA11C +PT=CB9D772C72BC5BB3E18087CABADDE5B2 + +I=191 +KEY=A1C138E8AFAA19465AE9BD1968C19E8798A7DDA7C645B2406D48B266994BBDC7 +IV=86F9DEBA065E020EEEAA099EDA6EF3FB +CT=CB9D772C72BC5BB3E18087CABADDE5B2 +PT=678837A26F65190F44107C19A01F97E6 + +I=192 +KEY=CD73AF62C6130630324F71F35042BC9AFF2FEA05A920AB4F2958CE7F39542A21 +IV=6CB2978A69B91F7668A6CCEA3883221D +CT=678837A26F65190F44107C19A01F97E6 +PT=E395804E9F2D61447B5207AA438F7D98 + +I=193 +KEY=F076EAF59DAC3F3975E9CBED6697A21B1CBA6A4B360DCA0B520AC9D57ADB57B9 +IV=3D0545975BBF390947A6BA1E36D51E81 +CT=E395804E9F2D61447B5207AA438F7D98 +PT=CA6E3E780C170E950306FEE08CAB46D9 + +I=194 +KEY=87DD7A9906E626E1AC55611A52EBC196D6D454333A1AC49E510C3735F6701160 +IV=77AB906C9B4A19D8D9BCAAF7347C638D +CT=CA6E3E780C170E950306FEE08CAB46D9 +PT=419B7C538E827E431B2C2BA5AEB95373 + +I=195 +KEY=C8D569C710030750FDA3A48E748BED26974F2860B498BADD4A201C9058C94213 +IV=4F08135E16E521B151F6C59426602CB0 +CT=419B7C538E827E431B2C2BA5AEB95373 +PT=1D6607B51B0DA629C62D00CB20870FEA + +I=196 +KEY=A3A22E3CED89316BC747E3326CB53C448A292FD5AF951CF48C0D1C5B784E4DF9 +IV=6B7747FBFD8A363B3AE447BC183ED162 +CT=1D6607B51B0DA629C62D00CB20870FEA +PT=58169D0006C9031C7CCE502F086B0CD6 + +I=197 +KEY=DDB2F456CFE201D5E1DD9EFC6593813FD23FB2D5A95C1FE8F0C34C747025412F +IV=7E10DA6A226B30BE269A7DCE0926BD7B +CT=58169D0006C9031C7CCE502F086B0CD6 +PT=8001E1BDAE24A2A9ABE102C2BEB4AD70 + +I=198 +KEY=A990048427C8E19BABE1D0BB5D6A83CA523E53680778BD415B224EB6CE91EC5F +IV=7422F0D2E82AE04E4A3C4E4738F902F5 +CT=8001E1BDAE24A2A9ABE102C2BEB4AD70 +PT=EA143E99846F5DF1C1A2AD0565D3AE45 + +I=199 +KEY=5074E20E5B70B571A7155A3AAFE3AF2AB82A6DF18317E0B09A80E3B3AB42421A +IV=F9E4E68A7CB854EA0CF48A81F2892CE0 +CT=EA143E99846F5DF1C1A2AD0565D3AE45 +PT=C1EBFE1B00D813BB5AC9E4B007977B19 + +I=200 +KEY=50315F6BF520F26A044751215225348179C193EA83CFF30BC0490703ACD53903 +IV=0045BD65AE50471BA3520B1BFDC69BAB +CT=C1EBFE1B00D813BB5AC9E4B007977B19 +PT=3476AA08CB11F13D8DD858CF10472D03 + +I=201 +KEY=03D2536F9830D74A9B2AEDD1508CE4764DB739E248DE02364D915FCCBC921400 +IV=53E30C046D1025209F6DBCF002A9D0F7 +CT=3476AA08CB11F13D8DD858CF10472D03 +PT=C79BED3BB201F29B65CDF5709654317C + +I=202 +KEY=4AC2173AD99E09ECCB4A647AF96C26F98A2CD4D9FADFF0AD285CAABC2AC6257C +IV=4910445541AEDEA6506089ABA9E0C28F +CT=C79BED3BB201F29B65CDF5709654317C +PT=E5E144D56A2FF95D644D51E73AEAE922 + +I=203 +KEY=9F46778CA9C15CB9978C0DF359056F3D6FCD900C90F009F04C11FB5B102CCC5E +IV=D58460B6705F55555CC66989A06949C4 +CT=E5E144D56A2FF95D644D51E73AEAE922 +PT=38582F30FDE74A162CCD85955C2E48FC + +I=204 +KEY=63038F8EA2934D0C65F181BE92B9664A5795BF3C6D1743E660DC7ECE4C0284A2 +IV=FC45F8020B5211B5F27D8C4DCBBC0977 +CT=38582F30FDE74A162CCD85955C2E48FC +PT=266E808D7E9206C9294F0349D1CEF1DA + +I=205 +KEY=D43CC15DCAB5047B8C67D61F1735C6A471FB3FB11385452F49937D879DCC7578 +IV=B73F4ED368264977E99657A1858CA0EE +CT=266E808D7E9206C9294F0349D1CEF1DA +PT=8E3D1F7DC678C32352782D52E4CD44D5 + +I=206 +KEY=9979232A388E0E6C766279CFE7E047B4FFC620CCD5FD860C1BEB50D5790131AD +IV=4D45E277F23B0A17FA05AFD0F0D58110 +CT=8E3D1F7DC678C32352782D52E4CD44D5 +PT=DDC8075418E2A649D4E78144528682F9 + +I=207 +KEY=43479EA72BF3B417CF224B15749043C5220E2798CD1F2045CF0CD1912B87B354 +IV=DA3EBD8D137DBA7BB94032DA93700471 +CT=DDC8075418E2A649D4E78144528682F9 +PT=4096B4F51C77C8A00A5308D8C3175B6A + +I=208 +KEY=7AE39630885C3ACDCF915625141DF45A6298936DD168E8E5C55FD949E890E83E +IV=39A40897A3AF8EDA00B31D30608DB79F +CT=4096B4F51C77C8A00A5308D8C3175B6A +PT=60D0385ECE913BEC6760BAA0BCCDE853 + +I=209 +KEY=82496ADB8A91DAE80C249D2BD8F00C990248AB331FF9D309A23F63E9545D006D +IV=F8AAFCEB02CDE025C3B5CB0ECCEDF8C3 +CT=60D0385ECE913BEC6760BAA0BCCDE853 +PT=79A86909141C27366744FC614808705B + +I=210 +KEY=EF7FEE5E3FDAC015E8016A7A9D3EB8677BE0C23A0BE5F43FC57B9F881C557036 +IV=6D368485B54B1AFDE425F75145CEB4FE +CT=79A86909141C27366744FC614808705B +PT=9817CE82A9D821189878991B32360409 + +I=211 +KEY=A400D423453A59F64968E8B80140AAF6E3F70CB8A23DD5275D0306932E63743F +IV=4B7F3A7D7AE099E3A16982C29C7E1291 +CT=9817CE82A9D821189878991B32360409 +PT=C3259E5D4A3E82FDC862E862E4449DA2 + +I=212 +KEY=B9280C8996C8BEC6888CB4D9D1E76B0620D292E5E80357DA9561EEF1CA27E99D +IV=1D28D8AAD3F2E730C1E45C61D0A7C1F0 +CT=C3259E5D4A3E82FDC862E862E4449DA2 +PT=F035078B9A3E45B4ED561F001DB21E47 + +I=213 +KEY=9686D9BB259CD14FA7D58C9789932385D0E7956E723D126E7837F1F1D795F7DA +IV=2FAED532B3546F892F59384E58744883 +CT=F035078B9A3E45B4ED561F001DB21E47 +PT=596B9F7F2122A11C599626B16B6AC340 + +I=214 +KEY=736E847DDC4C794A3AA2E22C1AF85EF1898C0A11531FB37221A1D740BCFF349A +IV=E5E85DC6F9D0A8059D776EBB936B7D74 +CT=596B9F7F2122A11C599626B16B6AC340 +PT=800FCC5CE3B08CFFDD70FB5270DED220 + +I=215 +KEY=728D3E35CD653621D41E591530770B370983C64DB0AF3F8DFCD12C12CC21E6BA +IV=01E3BA4811294F6BEEBCBB392A8F55C6 +CT=800FCC5CE3B08CFFDD70FB5270DED220 +PT=5515A58EB0013D2EE561BD2826761209 + +I=216 +KEY=929F6FD8250BAD33FAE4ED108843A2645C9663C300AE02A319B0913AEA57F4B3 +IV=E01251EDE86E9B122EFAB405B834A953 +CT=5515A58EB0013D2EE561BD2826761209 +PT=8B7B3AB73287CEAAA0098D41F0B3A28B + +I=217 +KEY=3F54C218B02F6097C3F31A05F5CCB8C4D7ED59743229CC09B9B91C7B1AE45638 +IV=ADCBADC09524CDA43917F7157D8F1AA0 +CT=8B7B3AB73287CEAAA0098D41F0B3A28B +PT=90CDCF132600F622D1339197B441A4C0 + +I=218 +KEY=2F60AEE4E6A6F7109193112BC756D7F24720966714293A2B688A8DECAEA5F2F8 +IV=10346CFC5689978752600B2E329A6F36 +CT=90CDCF132600F622D1339197B441A4C0 +PT=EA089BEC0DEE1305828522B8AD4F5A99 + +I=219 +KEY=33623A9F86F3AF456D92076B132E46A3AD280D8B19C7292EEA0FAF5403EAA861 +IV=1C02947B60555855FC011640D4789151 +CT=EA089BEC0DEE1305828522B8AD4F5A99 +PT=339C14562AE38F84BE0FB1569C234287 + +I=220 +KEY=6291ED0B63ED8C18A713DDCBFCA054E19EB419DD3324A6AA54001E029FC9EAE6 +IV=51F3D794E51E235DCA81DAA0EF8E1242 +CT=339C14562AE38F84BE0FB1569C234287 +PT=31050E95B1F08B9139EF7F8D42110978 + +I=221 +KEY=7BEF1BE3E67AA478C5D9F50350D221CCAFB1174882D42D3B6DEF618FDDD8E39E +IV=197EF6E88597286062CA28C8AC72752D +CT=31050E95B1F08B9139EF7F8D42110978 +PT=18DE66E3B58C9ABAB99987826AF0D0AF + +I=222 +KEY=3DEB69283844069B400C2E7127B8CD2EB76F71AB3758B781D476E60DB7283331 +IV=460472CBDE3EA2E385D5DB72776AECE2 +CT=18DE66E3B58C9ABAB99987826AF0D0AF +PT=B75D11E28C94DB969FE009B984DA956B + +I=223 +KEY=754C5BEC642540EC8BAD0778773CA8E700326049BBCC6C174B96EFB433F2A65A +IV=48A732C45C614677CBA12909508465C9 +CT=B75D11E28C94DB969FE009B984DA956B +PT=7CEEE835FC734108785B367A28C62058 + +I=224 +KEY=01B0A659138DEE7CF1EFA11DD0A209247CDC887C47BF2D1F33CDD9CE1B348602 +IV=74FCFDB577A8AE907A42A665A79EA1C3 +CT=7CEEE835FC734108785B367A28C62058 +PT=F1E848F6C257D6D56B4FBCA36900614C + +I=225 +KEY=F9531CEDC3C5C76A90195BF1E5FB5ED98D34C08A85E8FBCA5882656D7234E74E +IV=F8E3BAB4D048291661F6FAEC355957FD +CT=F1E848F6C257D6D56B4FBCA36900614C +PT=7B06A193C8B84977E56B382D424D2A78 + +I=226 +KEY=D409DB9768430BCA0E2B68BA1CFE93A5F63261194D50B2BDBDE95D403079CD36 +IV=2D5AC77AAB86CCA09E32334BF905CD7C +CT=7B06A193C8B84977E56B382D424D2A78 +PT=413356E3367ACBDD88ADA6DF5E09FFC6 + +I=227 +KEY=8425B50A014625BA114ABAC1585C3F68B70137FA7B2A79603544FB9F6E7032F0 +IV=502C6E9D69052E701F61D27B44A2ACCD +CT=413356E3367ACBDD88ADA6DF5E09FFC6 +PT=13B524E8AEBFE32CC9559B500D9E9A82 + +I=228 +KEY=3ED2EEDFF8C12697C9CEB18B8DC86798A4B41312D5959A4CFC1160CF63EEA872 +IV=BAF75BD5F987032DD8840B4AD59458F0 +CT=13B524E8AEBFE32CC9559B500D9E9A82 +PT=91775D8DF510277669BC11697965AE99 + +I=229 +KEY=B3C35FF0F6B2DDCF5522A35E75040BB135C34E9F2085BD3A95AD71A61A8B06EB +IV=8D11B12F0E73FB589CEC12D5F8CC6C29 +CT=91775D8DF510277669BC11697965AE99 +PT=0AA5B5A593FED4CE1FD66736774649D2 + +I=230 +KEY=5581EEED032A31D6F8077BEED79ABB1E3F66FB3AB37B69F48A7B16906DCD4F39 +IV=E642B11DF598EC19AD25D8B0A29EB0AF +CT=0AA5B5A593FED4CE1FD66736774649D2 +PT=3DB595E23D32347092E5D94A8376DB5D + +I=231 +KEY=2337ABB014AD70D3E290033BD6FC75D702D36ED88E495D84189ECFDAEEBB9464 +IV=76B6455D178741051A9778D50166CEC9 +CT=3DB595E23D32347092E5D94A8376DB5D +PT=2AF2DEC9D2D4F0BA81D1FC88E421C034 + +I=232 +KEY=7C8A43D8CA68E782BBD49C18477683052821B0115C9DAD3E994F33520A9A5450 +IV=5FBDE868DEC5975159449F23918AF6D2 +CT=2AF2DEC9D2D4F0BA81D1FC88E421C034 +PT=8AF90FCCBEDCDF709AEE93FEF45C03EC + +I=233 +KEY=37FDC789E91F58F691931C86C4505926A2D8BFDDE241724E03A1A0ACFEC657BC +IV=4B7784512377BF742A47809E8326DA23 +CT=8AF90FCCBEDCDF709AEE93FEF45C03EC +PT=8E98DF785A601DF26465D9A0D163D650 + +I=234 +KEY=57C30D92BD234BE693F15534768970FC2C4060A5B8216FBC67C4790C2FA581EC +IV=603ECA1B543C1310026249B2B2D929DA +CT=8E98DF785A601DF26465D9A0D163D650 +PT=21D3EAC95A088A548E5C0E56001BD103 + +I=235 +KEY=1F9A07E73DB0530F84B6DB88C5EA0AFD0D938A6CE229E5E8E998775A2FBE50EF +IV=48590A75809318E917478EBCB3637A01 +CT=21D3EAC95A088A548E5C0E56001BD103 +PT=48A8853D9E4E4A6351E5F5734911D569 + +I=236 +KEY=219E87740C05905A3DAC677C78C5E6D4453B0F517C67AF8BB87D822966AF8586 +IV=3E04809331B5C355B91ABCF4BD2FEC29 +CT=48A8853D9E4E4A6351E5F5734911D569 +PT=C75ECB64A655DC6803FC976A1CAE78A9 + +I=237 +KEY=D445B2CF4C6B8AF073FCDFF8907C4B278265C435DA3273E3BB8115437A01FD2F +IV=F5DB35BB406E1AAA4E50B884E8B9ADF3 +CT=C75ECB64A655DC6803FC976A1CAE78A9 +PT=F063E6C6A62D07B1CA90594CB9041DE4 + +I=238 +KEY=3DECAA3153A9658A2CAA5578AF2C55CD720622F37C1F745271114C0FC305E0CB +IV=E9A918FE1FC2EF7A5F568A803F501EEA +CT=F063E6C6A62D07B1CA90594CB9041DE4 +PT=45F375DDBA20D20CB6C5EAB28AA85D06 + +I=239 +KEY=31766034845DF8A1AEDFC70CE3CD5B1D37F5572EC63FA65EC7D4A6BD49ADBDCD +IV=0C9ACA05D7F49D2B827592744CE10ED0 +CT=45F375DDBA20D20CB6C5EAB28AA85D06 +PT=5D117AAC285D5A6948390FDAFBDACAD5 + +I=240 +KEY=BF17727E1D5DCA94C9CCA8E11DFBF22A6AE42D82EE62FC378FEDA967B2777718 +IV=8E61124A9900323567136FEDFE36A937 +CT=5D117AAC285D5A6948390FDAFBDACAD5 +PT=C8B61B172D930641A88E9E13236E11F9 + +I=241 +KEY=B82DB30F4271245293FC4CB6A0C10D4FA2523695C3F1FA7627633774911966E1 +IV=073AC1715F2CEEC65A30E457BD3AFF65 +CT=C8B61B172D930641A88E9E13236E11F9 +PT=FE05708E08F8568BB55175CEEF9E0433 + +I=242 +KEY=28AE9BD5E181AC41CF2F9B4710DD160C5C57461BCB09ACFD923242BA7E8762D2 +IV=908328DAA3F088135CD3D7F1B01C1B43 +CT=FE05708E08F8568BB55175CEEF9E0433 +PT=D7DB71EAC2EF31AE105227E34134AD3C + +I=243 +KEY=437D385B59B4AB247A5BCFC0C0F8596F8B8C37F109E69D53826065593FB3CFEE +IV=6BD3A38EB8350765B5745487D0254F63 +CT=D7DB71EAC2EF31AE105227E34134AD3C +PT=ECD51D08C870983992708FC1FDFA9D15 + +I=244 +KEY=4EF45D9C1FCA58D42D9E7E2E9C7D0B8F67592AF9C196056A1010EA98C24952FB +IV=0D8965C7467EF3F057C5B1EE5C8552E0 +CT=ECD51D08C870983992708FC1FDFA9D15 +PT=F436BA32E9D089248AC47E40AA6B4BAC + +I=245 +KEY=D3F16D0CF75471A24F273B3E8EF0A3A0936F90CB28468C4E9AD494D868221957 +IV=9D053090E89E297662B94510128DA82F +CT=F436BA32E9D089248AC47E40AA6B4BAC +PT=F43E89C3DBD391B5778B30A36A9E42F3 + +I=246 +KEY=953E7AB7369425A4F396D764F3EA047F67511908F3951DFBED5FA47B02BC5BA4 +IV=46CF17BBC1C05406BCB1EC5A7D1AA7DF +CT=F43E89C3DBD391B5778B30A36A9E42F3 +PT=B12ABB428A29703B929EFDB0031694D1 + +I=247 +KEY=C8DDFEFD3C72822B72C78757EE8EF856D67BA24A79BC6DC07FC159CB01AACF75 +IV=5DE3844A0AE6A78F815150331D64FC29 +CT=B12ABB428A29703B929EFDB0031694D1 +PT=79F19D2BD0A025D2D9822A28F5304446 + +I=248 +KEY=870A25E9511D3F1BCFA941DA41FD00C0AF8A3F61A91C4812A64373E3F49A8B33 +IV=4FD7DB146D6FBD30BD6EC68DAF73F896 +CT=79F19D2BD0A025D2D9822A28F5304446 +PT=C52D5EF8D7A1353F5C1FF7BA33F9ED97 + +I=249 +KEY=178B86564949AE1A0CE50E61F4D3F8776AA761997EBD7D2DFA5C8459C76366A4 +IV=9081A3BF18549101C34C4FBBB52EF8B7 +CT=C52D5EF8D7A1353F5C1FF7BA33F9ED97 +PT=82FAB7DF4BE409880B8F66210DE8D2E5 + +I=250 +KEY=C3F845809E635052F94076E1F3026779E85DD646355974A5F1D3E278CA8BB441 +IV=D473C3D6D72AFE48F5A5788007D19F0E +CT=82FAB7DF4BE409880B8F66210DE8D2E5 +PT=52C05722F125348666DFCF0F2D052530 + +I=251 +KEY=34AE823E21F4C45784F2E125CF5039FCBA9D8164C47C4023970C2D77E78E9171 +IV=F756C7BEBF9794057DB297C43C525E85 +CT=52C05722F125348666DFCF0F2D052530 +PT=DE7FAAF4A10D4D5404847FA080C1DC1C + +I=252 +KEY=9D1EEFC6B62427F5A2CBB2047AB0E41B64E22B9065710D77938852D7674F4D6D +IV=A9B06DF897D0E3A226395321B5E0DDE7 +CT=DE7FAAF4A10D4D5404847FA080C1DC1C +PT=49327927599012EE87FF64F45AC9A9AE + +I=253 +KEY=2C7B21A79BE0B5B0E4DCC427DE8D91572DD052B73CE11F99147736233D86E4C3 +IV=B165CE612DC4924546177623A43D754C +CT=49327927599012EE87FF64F45AC9A9AE +PT=6E11B9F592DD99CD94F8999D9476F4CF + +I=254 +KEY=F4A72FB6D161B9E15A41576C5A7CBF3F43C1EB42AE3C8654808FAFBEA9F0100C +IV=D8DC0E114A810C51BE9D934B84F12E68 +CT=6E11B9F592DD99CD94F8999D9476F4CF +PT=108AC1FE3E008D1C3058917157003E2C + +I=255 +KEY=2E5FE97C58B060C9BACA9E9CC14CFC89534B2ABC903C0B48B0D73ECFFEF02E20 +IV=DAF8C6CA89D1D928E08BC9F09B3043B6 +CT=108AC1FE3E008D1C3058917157003E2C +PT=B315EF45A3BD77688AD0976EF5DCA26B + +I=256 +KEY=9D763A80B96B112E1DAEA50A98C0B6F7E05EC5F933817C203A07A9A10B2C8C4B +IV=B329D3FCE1DB71E7A7643B96598C4A7E +CT=B315EF45A3BD77688AD0976EF5DCA26B +PT=7BF8DABED803049DF8D1F34ED00536F7 + +I=257 +KEY=DF5F07523E7E305B48AAD9C205AE826C9BA61F47EB8278BDC2D65AEFDB29BABC +IV=42293DD28715217555047CC89D6E349B +CT=7BF8DABED803049DF8D1F34ED00536F7 +PT=E55FE84DF3137D16E74DC01A1BFDA4A7 + +I=258 +KEY=80CF537EC8836ADD0FB72F35B2EF703D7EF9F70A189105AB259B9AF5C0D41E1B +IV=5F90542CF6FD5A86471DF6F7B741F251 +CT=E55FE84DF3137D16E74DC01A1BFDA4A7 +PT=6019F9DA2DFDCDCB14C2C6CE5B34432D + +I=259 +KEY=4469D3622A022CFB7614C9C9EB36E6031EE00ED0356CC86031595C3B9BE05D36 +IV=C4A6801CE281462679A3E6FC59D9963E +CT=6019F9DA2DFDCDCB14C2C6CE5B34432D +PT=6D2788861A8F9526D1EC8A6A8AFBA629 + +I=260 +KEY=DED804546FA6B0BCD8C9FD9119616F9873C786562FE35D46E0B5D651111BFB1F +IV=9AB1D73645A49C47AEDD3458F257899B +CT=6D2788861A8F9526D1EC8A6A8AFBA629 +PT=81D5CDEA70E433A2A341FFB13ECCEC54 + +I=261 +KEY=24FD3D900606EEF8F31156D30EA094ADF2124BBC5F076EE443F429E02FD7174B +IV=FA2539C469A05E442BD8AB4217C1FB35 +CT=81D5CDEA70E433A2A341FFB13ECCEC54 +PT=F74B4869E92F918A95B508E382A83FA6 + +I=262 +KEY=C24CA269EAADDFBA060AAF15C2265DE6055903D5B628FF6ED6412103AD7F28ED +IV=E6B19FF9ECAB3142F51BF9C6CC86C94B +CT=F74B4869E92F918A95B508E382A83FA6 +PT=EF3293511A17D0E089A8F88E396B4F31 + +I=263 +KEY=789C94E8D2B6D6FD022ED678F42E796CEA6B9084AC3F2F8E5FE9D98D941467DC +IV=BAD03681381B09470424796D3608248A +CT=EF3293511A17D0E089A8F88E396B4F31 +PT=0D70FCE243309D716D8FA672A11EBCB8 + +I=264 +KEY=B8DFB47D720C26AE22AD6C87785CCB97E71B6C66EF0FB2FF32667FFF350ADB64 +IV=C0432095A0BAF0532083BAFF8C72B2FB +CT=0D70FCE243309D716D8FA672A11EBCB8 +PT=831365AB30D062F2B1C051A9EA03AEEB + +I=265 +KEY=938BCEFF0FD9AEC61CF2B0509A645A19640809CDDFDFD00D83A62E56DF09758F +IV=2B547A827DD588683E5FDCD7E238918E +CT=831365AB30D062F2B1C051A9EA03AEEB +PT=EFE7E9DC254FF4AA70ABF327566A5448 + +I=266 +KEY=BBF0C86D05BF543EC3B9A9240833187F8BEFE011FA9024A7F30DDD71896321C7 +IV=287B06920A66FAF8DF4B197492574266 +CT=EFE7E9DC254FF4AA70ABF327566A5448 +PT=2D41BEE483BD2BAD16026AD7AA5ABA07 + +I=267 +KEY=B744A9326EC1D56CBFF51D969D075C7DA6AE5EF5792D0F0AE50FB7A623399BC0 +IV=0CB4615F6B7E81527C4CB4B295344402 +CT=2D41BEE483BD2BAD16026AD7AA5ABA07 +PT=079460C9B745A53999932C5ECFE6A37B + +I=268 +KEY=AE49C59DD393E9EC9030AEDAD7FC61FEA13A3E3CCE68AA337C9C9BF8ECDF38BB +IV=190D6CAFBD523C802FC5B34C4AFB3D83 +CT=079460C9B745A53999932C5ECFE6A37B +PT=CE7C5851D0437368FEDC7E39270A7430 + +I=269 +KEY=8176855633B6FB2445BDDC2FD8D299576F46666D1E2BD95B8240E5C1CBD54C8B +IV=2F3F40CBE02512C8D58D72F50F2EF8A9 +CT=CE7C5851D0437368FEDC7E39270A7430 +PT=A0C3F2D688E4370AD2F08C09B28DBCC1 + +I=270 +KEY=050E71C47B278C5825DE84513A732D11CF8594BB96CFEE5150B069C87958F04A +IV=8478F4924891777C6063587EE2A1B446 +CT=A0C3F2D688E4370AD2F08C09B28DBCC1 +PT=BE472E609ABB030B96739A959EDBDD21 + +I=271 +KEY=502E4BDCF449E96CB16D5B6C097D20CC71C2BADB0C74ED5AC6C3F35DE7832D6B +IV=55203A188F6E653494B3DF3D330E0DDD +CT=BE472E609ABB030B96739A959EDBDD21 +PT=FE4227D6AC71519FA0F2078433DF69CA + +I=272 +KEY=C3DDDE6B2E80381010569BC093561F628F809D0DA005BCC56631F4D9D45C44A1 +IV=93F395B7DAC9D17CA13BC0AC9A2B3FAE +CT=FE4227D6AC71519FA0F2078433DF69CA +PT=3F8439C7648C5C2B5877643C536E14F9 + +I=273 +KEY=1CC65CB104317D620D729EDEB4C4B512B004A4CAC489E0EE3E4690E587325058 +IV=DF1B82DA2AB145721D24051E2792AA70 +CT=3F8439C7648C5C2B5877643C536E14F9 +PT=E189B969BF38C8A2F38BF3F12267B5B4 + +I=274 +KEY=D121C8556039F07E231F9E88DE60572B518D1DA37BB1284CCDCD6314A555E5EC +IV=CDE794E464088D1C2E6D00566AA4E239 +CT=E189B969BF38C8A2F38BF3F12267B5B4 +PT=EF15CCEC56DCD62681FC7564A1095ECD + +I=275 +KEY=C87070F4AA767BE043B29FE3AF258C91BE98D14F2D6DFE6A4C311670045CBB21 +IV=1951B8A1CA4F8B9E60AD016B7145DBBA +CT=EF15CCEC56DCD62681FC7564A1095ECD +PT=BD38CD579A7124DD0814DB21FC0E7D96 + +I=276 +KEY=08167C643CA7CAD8729B17EB91918AC103A01C18B71CDAB74425CD51F852C6B7 +IV=C0660C9096D1B138312988083EB40650 +CT=BD38CD579A7124DD0814DB21FC0E7D96 +PT=565F580B61E456544D8D553948AD95FD + +I=277 +KEY=55BB77ED49C419EEA418365F2750857355FF4413D6F88CE309A89868B0FF534A +IV=5DAD0B897563D336D68321B4B6C10FB2 +CT=565F580B61E456544D8D553948AD95FD +PT=1AA68EAC78C2B5BFF996F0B58C56432F + +I=278 +KEY=8FEC3C85819F24EE1DA186AB212A19D44F59CABFAE3A395CF03E68DD3CA91065 +IV=DA574B68C85B3D00B9B9B0F4067A9CA7 +CT=1AA68EAC78C2B5BFF996F0B58C56432F +PT=65660FBF6C166604D9E717671488D734 + +I=279 +KEY=D1D19B25C23EA5923D45493905B867D12A3FC500C22C5F5829D97FBA2821C751 +IV=5E3DA7A043A1817C20E4CF9224927E05 +CT=65660FBF6C166604D9E717671488D734 +PT=477CBD97B467AA1AAB738E294092FAA3 + +I=280 +KEY=E1972BE045093EC4475DCE6351CDEDCB6D437897764BF54282AAF19368B33DF2 +IV=3046B0C587379B567A18875A54758A1A +CT=477CBD97B467AA1AAB738E294092FAA3 +PT=C0ED90D90AE11390A275BD03BE00E1D5 + +I=281 +KEY=6F622A270D77AE65084E2070343E8C7FADAEE84E7CAAE6D220DF4C90D6B3DC27 +IV=8EF501C7487E90A14F13EE1365F361B4 +CT=C0ED90D90AE11390A275BD03BE00E1D5 +PT=296FED9B8CF7C532721A2188DDB1A441 + +I=282 +KEY=FF7209EA94C0401544991FDB57F77F2084C105D5F05D23E052C56D180B027866 +IV=901023CD99B7EE704CD73FAB63C9F35F +CT=296FED9B8CF7C532721A2188DDB1A441 +PT=4AE1C2EB8D1CEB5804FA992708150590 + +I=283 +KEY=73C6F94AD63DE39C289AE20179FDDDD7CE20C73E7D41C8B8563FF43F03177DF6 +IV=8CB4F0A042FDA3896C03FDDA2E0AA2F7 +CT=4AE1C2EB8D1CEB5804FA992708150590 +PT=A4EAC8940C12F9CEAC78DFDC99DF68B4 + +I=284 +KEY=A7369886016682F6075678509FFB86ED6ACA0FAA71533176FA472BE39AC81542 +IV=D4F061CCD75B616A2FCC9A51E6065B3A +CT=A4EAC8940C12F9CEAC78DFDC99DF68B4 +PT=70B05A9959E7C4E4545BB3AECCD8B33D + +I=285 +KEY=F01B9FF32CE9CA699F69ADBBC209BBD21A7A553328B4F592AE1C984D5610A67F +IV=572D07752D8F489F983FD5EB5DF23D3F +CT=70B05A9959E7C4E4545BB3AECCD8B33D +PT=F4978960F1382713A5A7183B9694DE85 + +I=286 +KEY=FF05A97961A5CA725CD2E1B2A9D58304EEEDDC53D98CD2810BBB8076C08478FA +IV=0F1E368A4D4C001BC3BB4C096BDC38D6 +CT=F4978960F1382713A5A7183B9694DE85 +PT=EDCC3B8D26928086F1C6727833405424 + +I=287 +KEY=AA4DB35CCBD936D13D1B7DB64638B99A0321E7DEFF1E5207FA7DF20EF3C42CDE +IV=55481A25AA7CFCA361C99C04EFED3A9E +CT=EDCC3B8D26928086F1C6727833405424 +PT=12A36AC1DA72345291CF206FA04F102F + +I=288 +KEY=611E32BF030B7B377AEC338C7FA6D88311828D1F256C66556BB2D261538B3CF1 +IV=CB5381E3C8D24DE647F74E3A399E6119 +CT=12A36AC1DA72345291CF206FA04F102F +PT=8DA0003E090444453B932F0CDBBFA54E + +I=289 +KEY=43E230241EF150AC761C1307C43C3E209C228D212C6822105021FD6D883499BF +IV=22FC029B1DFA2B9B0CF0208BBB9AE6A3 +CT=8DA0003E090444453B932F0CDBBFA54E +PT=A3D9F2112895CEA937A2B18ABB589CC0 + +I=290 +KEY=1FE38E9028DAC8A1E65A04C78BD0E7523FFB7F3004FDECB967834CE7336C057F +IV=5C01BEB4362B980D904617C04FECD972 +CT=A3D9F2112895CEA937A2B18ABB589CC0 +PT=191EE02B9FED198599B5BC2F36271ABB + +I=291 +KEY=5FFD20799D7A7E7A328BD57B13F6E52F26E59F1B9B10F53CFE36F0C8054B1FC4 +IV=401EAEE9B5A0B6DBD4D1D1BC9826027D +CT=191EE02B9FED198599B5BC2F36271ABB +PT=EFC32006AE746D1E3F65E6C7ADF32804 + +I=292 +KEY=EFEFD2A0F1917EB5BFD2337260E11023C926BF1D35649822C153160FA8B837C0 +IV=B012F2D96CEB00CF8D59E6097317F50C +CT=EFC32006AE746D1E3F65E6C7ADF32804 +PT=F9C49B0BFFA354EEBBE3DE29BF9D2623 + +I=293 +KEY=7676D792019D370A67526977EC5FDB5B30E22416CAC7CCCC7AB0C826172511E3 +IV=99990532F00C49BFD8805A058CBECB78 +CT=F9C49B0BFFA354EEBBE3DE29BF9D2623 +PT=EAEAE4BFF789E64D80D88CE5BC0E15CC + +I=294 +KEY=69202B4EB33EB35987DD82026714F603DA08C0A93D4E2A81FA6844C3AB2B042F +IV=1F56FCDCB2A38453E08FEB758B4B2D58 +CT=EAEAE4BFF789E64D80D88CE5BC0E15CC +PT=96C362F59FD2457A5ED68A116B4AA682 + +I=295 +KEY=DE8B4CC7995B3E061E126157B0C2AF984CCBA25CA29C6FFBA4BECED2C061A2AD +IV=B7AB67892A658D5F99CFE355D7D6599B +CT=96C362F59FD2457A5ED68A116B4AA682 +PT=5498BE46DCE840F7B593BE2BC0D252CB + +I=296 +KEY=1BFE119E1B63BA06E9A590709A2985D218531C1A7E742F0C112D70F900B3F066 +IV=C5755D5982388400F7B7F1272AEB2A4A +CT=5498BE46DCE840F7B593BE2BC0D252CB +PT=697482966F491ACB46E7171A4813D916 + +I=297 +KEY=9E6361F9775A88FAAD09711E9691798C71279E8C113D35C757CA67E348A02970 +IV=859D70676C3932FC44ACE16E0CB8FC5E +CT=697482966F491ACB46E7171A4813D916 +PT=A799874DC7721D96DEEFAB5FE1A01A8E + +I=298 +KEY=7D1EF621D3ADC4BD4EC1861167FA5B0CD6BE19C1D64F28518925CCBCA90033FE +IV=E37D97D8A4F74C47E3C8F70FF16B2280 +CT=A799874DC7721D96DEEFAB5FE1A01A8E +PT=2D19344625CF5E6DE07EE960F4AEC5CF + +I=299 +KEY=7DFD0BE692B47C022DC789EF5291D2F5FBA72D87F380763C695B25DC5DAEF631 +IV=00E3FDC74119B8BF63060FFE356B89F9 +CT=2D19344625CF5E6DE07EE960F4AEC5CF +PT=F80C5143F173AE672DA4DDC8272C13EF + +I=300 +KEY=A78C66D30475B93F0A87E6E4A8BFA3AE03AB7CC402F3D85B44FFF8147A82E5DE +IV=DA716D3596C1C53D27406F0BFA2E715B +CT=F80C5143F173AE672DA4DDC8272C13EF +PT=76BDB7A63614A41C9D52718B3514E03C + +I=301 +KEY=9542E4B9D92DAF7B463C83DA257422B37516CB6234E77C47D9AD899F4F9605E2 +IV=32CE826ADD5816444CBB653E8DCB811D +CT=76BDB7A63614A41C9D52718B3514E03C +PT=93F65B7B961EE6B623A026576FF8890B + +I=302 +KEY=6932CD66A25D1DE274C7D5DF540917BFE6E09019A2F99AF1FA0DAFC8206E8CE9 +IV=FC7029DF7B70B29932FB5605717D350C +CT=93F65B7B961EE6B623A026576FF8890B +PT=FA5BEB508ABCBCB1B1D56C0E207A032D + +I=303 +KEY=595CCC3640445FF5BBF303FF7845AB821CBB7B49284526404BD8C3C600148FC4 +IV=306E0150E2194217CF34D6202C4CBC3D +CT=FA5BEB508ABCBCB1B1D56C0E207A032D +PT=BFAEA3EB7C617567EB302D571DBF2811 + +I=304 +KEY=BF5382311BF88FC9E32D5BADC832BE48A315D8A254245327A0E8EE911DABA7D5 +IV=E60F4E075BBCD03C58DE5852B07715CA +CT=BFAEA3EB7C617567EB302D571DBF2811 +PT=4B0E63933414184D43B0AA714AA31E02 + +I=305 +KEY=B50A2FF8FAC6820638CCBA3A0CA6519CE81BBB3160304B6AE35844E05708B9D7 +IV=0A59ADC9E13E0DCFDBE1E197C494EFD4 +CT=4B0E63933414184D43B0AA714AA31E02 +PT=0073CA04B300003AF3C1035C664E0646 + +I=306 +KEY=1A32AA7CA8B5D83C47F56C5D24EDBD38E8687135D3304B50109947BC3146BF91 +IV=AF38858452735A3A7F39D667284BECA4 +CT=0073CA04B300003AF3C1035C664E0646 +PT=75CFE6D4A4F05D8EBB5C614AC7FB48C8 + +I=307 +KEY=C321C5381F5A334C8B82DD2F0E4C73AE9DA797E177C016DEABC526F6F6BDF759 +IV=D9136F44B7EFEB70CC77B1722AA1CE96 +CT=75CFE6D4A4F05D8EBB5C614AC7FB48C8 +PT=B0D8DB37DF5C3A87B9E5D562283E8FEE + +I=308 +KEY=40879EA19753F0F22B1C1BF438A446532D7F4CD6A89C2C591220F394DE8378B7 +IV=83A65B998809C3BEA09EC6DB36E835FD +CT=B0D8DB37DF5C3A87B9E5D562283E8FEE +PT=9C885637CC7666C04B424DD6EF1F3EDB + +I=309 +KEY=B6824C9F800B1E7825135F250DB99FC8B1F71AE164EA4A995962BE42319C466C +IV=F605D23E1758EE8A0E0F44D1351DD99B +CT=9C885637CC7666C04B424DD6EF1F3EDB +PT=3E7F4437656E63E0ADC6C764B20FE92D + +I=310 +KEY=7FA3CDE5856B1F0D9AE33E9E6ED1532E8F885ED601842979F4A479268393AF41 +IV=C921817A05600175BFF061BB6368CCE6 +CT=3E7F4437656E63E0ADC6C764B20FE92D +PT=B19CCFDAADEC54C8DD5F4FD53D3C5824 + +I=311 +KEY=3E3ABA34DB005D9FF2CEF1321BCD018E3E14910CAC687DB129FB36F3BEAFF765 +IV=419977D15E6B4292682DCFAC751C52A0 +CT=B19CCFDAADEC54C8DD5F4FD53D3C5824 +PT=84F7D061322A4042913C0BD14F5F1391 + +I=312 +KEY=FB474D499955CB1F37FBA309DD55E09DBAE3416D9E423DF3B8C73D22F1F0E4F4 +IV=C57DF77D42559680C535523BC698E113 +CT=84F7D061322A4042913C0BD14F5F1391 +PT=CBCD716DA9C53D7AFFFE65B780926660 + +I=313 +KEY=7C1D07031362A7439F9DD5272DAD1D9B712E3000378700894739589571628294 +IV=875A4A4A8A376C5CA866762EF0F8FD06 +CT=CBCD716DA9C53D7AFFFE65B780926660 +PT=F605D205704496C5BFCEE88130920CDE + +I=314 +KEY=7E9E72A6032523643F0965E8BFCB0793872BE20547C3964CF8F7B01441F08E4A +IV=028375A510478427A094B0CF92661A08 +CT=F605D205704496C5BFCEE88130920CDE +PT=CFA8B47DEB5770925EA29484D82CDBB4 + +I=315 +KEY=518CA0A8C81E9DDCE1060410C69F0ACE48835678AC94E6DEA655249099DC55FE +IV=2F12D20ECB3BBEB8DE0F61F879540D5D +CT=CFA8B47DEB5770925EA29484D82CDBB4 +PT=1065AD49D2DD48EB9540F23A69469B92 + +I=316 +KEY=45E6A5A17D8D1AEA04CD8E184D0A1BF758E6FB317E49AE353315D6AAF09ACE6C +IV=146A0509B5938736E5CB8A088B951139 +CT=1065AD49D2DD48EB9540F23A69469B92 +PT=DB12EE00C65069CFEA509BA5BD5BB6BC + +I=317 +KEY=FC8F8F7F8A440A6CEB920D4311851B3A83F41531B819C7FAD9454D0F4DC178D0 +IV=B9692ADEF7C91086EF5F835B5C8F00CD +CT=DB12EE00C65069CFEA509BA5BD5BB6BC +PT=B66316FB3CCC9B262A34C205AE43F42B + +I=318 +KEY=42D666DF2C1575E3B346FCBCD208AD9F359703CA84D55CDCF3718F0AE3828CFB +IV=BE59E9A0A6517F8F58D4F1FFC38DB6A5 +CT=B66316FB3CCC9B262A34C205AE43F42B +PT=4C851D9BDC164194A6D1FDE274C06D1B + +I=319 +KEY=786B9456901DFA9FF85C686DEEDCA02079121E5158C31D4855A072E89742E1E0 +IV=3ABDF289BC088F7C4B1A94D13CD40DBF +CT=4C851D9BDC164194A6D1FDE274C06D1B +PT=5507F1EB271BDBC0A6DD8BBAEC843A05 + +I=320 +KEY=C79B5CD424E592D392FECD3233CEA70B2C15EFBA7FD8C688F37DF9527BC6DBE5 +IV=BFF0C882B4F8684C6AA2A55FDD12072B +CT=5507F1EB271BDBC0A6DD8BBAEC843A05 +PT=BB10EF7C98DE0255C836D5319B94B166 + +I=321 +KEY=10ABC5B835E6E6BD02E90B63D22EF9E7970500C6E706C4DD3B4B2C63E0526A83 +IV=D730996C1103746E9017C651E1E05EEC +CT=BB10EF7C98DE0255C836D5319B94B166 +PT=E8B797AFDC378DB47F172260963A6E2C + +I=322 +KEY=75E05AAAB4E6981A20E4177D214B81EA7FB297693B314969445C0E03766804AF +IV=654B9F1281007EA7220D1C1EF365780D +CT=E8B797AFDC378DB47F172260963A6E2C +PT=58ED1CC5A208A0E7340167E79F5DA7C2 + +I=323 +KEY=A69FECC296D12216128BD1D2C48B373D275F8BAC9939E98E705D69E4E935A36D +IV=D37FB6682237BA0C326FC6AFE5C0B6D7 +CT=58ED1CC5A208A0E7340167E79F5DA7C2 +PT=FEDA5FB215819B441BE18B0AED27A1FD + +I=324 +KEY=7EED1776E603DD6C20F08B4C6B121525D985D41E8CB872CA6BBCE2EE04120290 +IV=D872FBB470D2FF7A327B5A9EAF992218 +CT=FEDA5FB215819B441BE18B0AED27A1FD +PT=7CD64E29A704F13688DB206F7F337685 + +I=325 +KEY=D4479A0AF29AF7145EC3FB89FEF8BBA7A5539A372BBC83FCE367C2817B217415 +IV=AAAA8D7C14992A787E3370C595EAAE82 +CT=7CD64E29A704F13688DB206F7F337685 +PT=25D6728244F28F79D1BC707BE94ECA13 + +I=326 +KEY=7FB45D09003B25EFEB5F68CCB7E09C008085E8B56F4E0C8532DBB2FA926FBE06 +IV=ABF3C703F2A1D2FBB59C9345491827A7 +CT=25D6728244F28F79D1BC707BE94ECA13 +PT=47AF03717893A10D7F40D5A3D9B82534 + +I=327 +KEY=35EE9428D4EC49EC103EDF32F4FBEE16C72AEBC417DDAD884D9B67594BD79B32 +IV=4A5AC921D4D76C03FB61B7FE431B7216 +CT=47AF03717893A10D7F40D5A3D9B82534 +PT=B6C25C0E4CA560707588321AAF41119C + +I=328 +KEY=B12C0149A6EDD2DC3742D10822FEDDF771E8B7CA5B78CDF838135543E4968AAE +IV=84C2956172019B30277C0E3AD60533E1 +CT=B6C25C0E4CA560707588321AAF41119C +PT=09137DF5460434E863647B4B50E17A60 + +I=329 +KEY=CFEC596CE216B14A955E7CBC095C198678FBCA3F1D7CF9105B772E08B477F0CE +IV=7EC0582544FB6396A21CADB42BA2C471 +CT=09137DF5460434E863647B4B50E17A60 +PT=17A26688B271E9765F41C71CD8CF0C25 + +I=330 +KEY=35903FF91CC199C048C6C031AA2F4FC96F59ACB7AF0D10660436E9146CB8FCEB +IV=FA7C6695FED7288ADD98BC8DA373564F +CT=17A26688B271E9765F41C71CD8CF0C25 +PT=62E3C4D53DECB83FCD5F57D1971D58FB + +I=331 +KEY=F262476804B79C1F85FEB875CCD5FC3E0DBA686292E1A859C969BEC5FBA5A410 +IV=C7F27891187605DFCD38784466FAB3F7 +CT=62E3C4D53DECB83FCD5F57D1971D58FB +PT=3495C5855D819B6FF779FC7AC59BEB53 + +I=332 +KEY=DC61E5CFC9BAE6B23B894486AD478ADD392FADE7CF6033363E1042BF3E3E4F43 +IV=2E03A2A7CD0D7AADBE77FCF3619276E3 +CT=3495C5855D819B6FF779FC7AC59BEB53 +PT=7440ABE9E1374208CFBCCC18ADC6089F + +I=333 +KEY=C9D2E747A1A6D594CCAE434B7605C8FB4D6F060E2E57713EF1AC8EA793F847DC +IV=15B30288681C3326F72707CDDB424226 +CT=7440ABE9E1374208CFBCCC18ADC6089F +PT=B6802F0F62A28AF7326CDB2144E8DE87 + +I=334 +KEY=99FEF610CFFFACBE8C6AD0A2B0C8F8A7FBEF29014CF5FBC9C3C05586D710995B +IV=502C11576E59792A40C493E9C6CD305C +CT=B6802F0F62A28AF7326CDB2144E8DE87 +PT=B84D7D91E60C131F6F042D403D85C47B + +I=335 +KEY=91EB2713A930B6A53993029D5A056B4143A25490AAF9E8D6ACC478C6EA955D20 +IV=0815D10366CF1A1BB5F9D23FEACD93E6 +CT=B84D7D91E60C131F6F042D403D85C47B +PT=4DDF64827A16F90B5E6B306E8F227DB7 + +I=336 +KEY=C15019D3523304CC9231B33C53C7FE1E0E7D3012D0EF11DDF2AF48A865B72097 +IV=50BB3EC0FB03B269ABA2B1A109C2955F +CT=4DDF64827A16F90B5E6B306E8F227DB7 +PT=FDF6E5B6486E11839EB3A7F5C3898F54 + +I=337 +KEY=E24B749901384F48B2E740C51175E311F38BD5A49881005E6C1CEF5DA63EAFC3 +IV=231B6D4A530B4B8420D6F3F942B21D0F +CT=FDF6E5B6486E11839EB3A7F5C3898F54 +PT=841EF37B4AF82CC5EB00E11775079D81 + +I=338 +KEY=44B7FFFA042DCA1BF276D4911D4B0BE2779526DFD2792C9B871C0E4AD3393242 +IV=A6FC8B6305158553409194540C3EE8F3 +CT=841EF37B4AF82CC5EB00E11775079D81 +PT=1725AF7F70B65FBB060D29B3BCDF0A31 + +I=339 +KEY=B724B2CD569E436B20594E10576934BF60B089A0A2CF7320811127F96FE63873 +IV=F3934D3752B38970D22F9A814A223F5D +CT=1725AF7F70B65FBB060D29B3BCDF0A31 +PT=2CCC6D09954E5FE6C6A87E18950EED02 + +I=340 +KEY=E9EB02E31CABD14DFF231F1F649294044C7CE4A937812CC647B959E1FAE8D571 +IV=5ECFB02E4A359226DF7A510F33FBA0BB +CT=2CCC6D09954E5FE6C6A87E18950EED02 +PT=C82C82AF68EACE2AF22C3266F898F573 + +I=341 +KEY=90C8F71B05BE122AFE5D58A7A1AAB666845066065F6BE2ECB5956B8702702002 +IV=7923F5F81915C367017E47B8C5382262 +CT=C82C82AF68EACE2AF22C3266F898F573 +PT=377F6966928959F2D68F3A2BD0EA3735 + +I=342 +KEY=1BE70B607CF9A9E35DF916C4CC103FEBB32F0F60CDE2BB1E631A51ACD29A1737 +IV=8B2FFC7B7947BBC9A3A44E636DBA898D +CT=377F6966928959F2D68F3A2BD0EA3735 +PT=3A8CCF4943B9866A9ABBEC0BA46F25DB + +I=343 +KEY=631B2C30FEA26433F0CBCD01B1CE974089A3C0298E5B3D74F9A1BDA776F532EC +IV=78FC2750825BCDD0AD32DBC57DDEA8AB +CT=3A8CCF4943B9866A9ABBEC0BA46F25DB +PT=3B767EAB7F0C2D24BBE5565E93DC3E24 + +I=344 +KEY=8785E70A8CD45A8FE1E4382DC62D563DB2D5BE82F15710504244EBF9E5290CC8 +IV=E49ECB3A72763EBC112FF52C77E3C17D +CT=3B767EAB7F0C2D24BBE5565E93DC3E24 +PT=619610C6A4A8E9B196E65D2E5D463968 + +I=345 +KEY=B49BAD1E8EB8B9CF7F32048A81E5BCD3D343AE4455FFF9E1D4A2B6D7B86F35A0 +IV=331E4A14026CE3409ED63CA747C8EAEE +CT=619610C6A4A8E9B196E65D2E5D463968 +PT=F12AF66580B33C3113C45CF5EFD52F4F + +I=346 +KEY=3C92453C6342B6CDC18BFE05241EB5D922695821D54CC5D0C766EA2257BA1AEF +IV=8809E822EDFA0F02BEB9FA8FA5FB090A +CT=F12AF66580B33C3113C45CF5EFD52F4F +PT=A427E0B2CD34285167999A9F18295D26 + +I=347 +KEY=24A1F21CA68CF23F1674BF5328219987864EB8931878ED81A0FF70BD4F9347C9 +IV=1833B720C5CE44F2D7FF41560C3F2C5E +CT=A427E0B2CD34285167999A9F18295D26 +PT=85F5855ACB2741070E1C89F904CBDBEA + +I=348 +KEY=B5479F4D4A0DBBFFBF86C576009F241403BB3DC9D35FAC86AEE3F9444B589C23 +IV=91E66D51EC8149C0A9F27A2528BEBD93 +CT=85F5855ACB2741070E1C89F904CBDBEA +PT=295D7A02348A185F5C54113C734E9003 + +I=349 +KEY=AA9CE82B0B649063C874699C71E8A94E2AE647CBE7D5B4D9F2B7E87838160C20 +IV=1FDB776641692B9C77F2ACEA71778D5A +CT=295D7A02348A185F5C54113C734E9003 +PT=E466F369B840296AAB1A24ED32A19F51 + +I=350 +KEY=A2BA72E2906E04C42C0047EF222FFFE6CE80B4A25F959DB359ADCC950AB79371 +IV=08269AC99B0A94A7E4742E7353C756A8 +CT=E466F369B840296AAB1A24ED32A19F51 +PT=099CEB8099DD025E4A57015168F75388 + +I=351 +KEY=EA9B425CCD937976EB04693F16C4DAC4C71C5F22C6489FED13FACDC46240C0F9 +IV=482130BE5DFD7DB2C7042ED034EB2522 +CT=099CEB8099DD025E4A57015168F75388 +PT=E40CD2C0A7E7CB35C64AEB396338A801 + +I=352 +KEY=D31BCE56BA19A7CB6057C5F2CCB3786223108DE261AF54D8D5B026FD017868F8 +IV=39808C0A778ADEBD8B53ACCDDA77A2A6 +CT=E40CD2C0A7E7CB35C64AEB396338A801 +PT=12E94732A52D15C624A8E554AB54C9A4 + +I=353 +KEY=F0CD039C509E0EFF71B18AE3FEEB186D31F9CAD0C482411EF118C3A9AA2CA15C +IV=23D6CDCAEA87A93411E64F113258600F +CT=12E94732A52D15C624A8E554AB54C9A4 +PT=241C32C2C0C5C6CBE4BB354C054C68D7 + +I=354 +KEY=0579BEABF73DD177C1F1F0827DA20BA115E5F812044787D515A3F6E5AF60C98B +IV=F5B4BD37A7A3DF88B0407A61834913CC +CT=241C32C2C0C5C6CBE4BB354C054C68D7 +PT=E4EA5643CF19EF64820A1B591DE1C378 + +I=355 +KEY=99C7C61F7153FFA0F07380D052431667F10FAE51CB5E68B197A9EDBCB2810AF3 +IV=9CBE78B4866E2ED7318270522FE11DC6 +CT=E4EA5643CF19EF64820A1B591DE1C378 +PT=BC86D5465171B667CE837F874D933FF4 + +I=356 +KEY=C2A65A0A2E71F6E7E2BD9FBB5049F7914D897B179A2FDED6592A923BFF123507 +IV=5B619C155F22094712CE1F6B020AE1F6 +CT=BC86D5465171B667CE837F874D933FF4 +PT=EEB9DC4EBD27720AD3527A1323D85413 + +I=357 +KEY=B635E7EFD987991CD29414B3EBAB2EA4A330A7592708ACDC8A78E828DCCA6114 +IV=7493BDE5F7F66FFB30298B08BBE2D935 +CT=EEB9DC4EBD27720AD3527A1323D85413 +PT=78591E006B877AC6880834E3F98FD6B0 + +I=358 +KEY=F5849125E52B6DF3CD8144DDB64178DDDB69B9594C8FD61A0270DCCB2545B7A4 +IV=43B176CA3CACF4EF1F15506E5DEA5679 +CT=78591E006B877AC6880834E3F98FD6B0 +PT=8F9A67CF96F4608D56923CB267855F3F + +I=359 +KEY=41885734A072249ADE0091A0AD87F47854F3DE96DA7BB69754E2E07942C0E89B +IV=B40CC611455949691381D57D1BC68CA5 +CT=8F9A67CF96F4608D56923CB267855F3F +PT=1B0B8D9118CBECBA2D5AD17A261F9D56 + +I=360 +KEY=FF1A5B86E3545D9CB01A1222EC99A81C4FF85307C2B05A2D79B8310364DF75CD +IV=BE920CB2432679066E1A8382411E5C64 +CT=1B0B8D9118CBECBA2D5AD17A261F9D56 +PT=6225E63F0C1A5DE00FD63032908A51F3 + +I=361 +KEY=836FB4DC9C17E5AD70404B41CC4A043E2DDDB538CEAA07CD766E0131F455243E +IV=7C75EF5A7F43B831C05A596320D3AC22 +CT=6225E63F0C1A5DE00FD63032908A51F3 +PT=7C66E540C016FB81A345E10331FCAFF3 + +I=362 +KEY=63CA7D0E2675E43626B5311A7BA7131B51BB50780EBCFC4CD52BE032C5A98BCD +IV=E0A5C9D2BA62019B56F57A5BB7ED1725 +CT=7C66E540C016FB81A345E10331FCAFF3 +PT=2F010053D3C59BB8ACB5B13B197A4204 + +I=363 +KEY=6B5C4A2DD70FFF3023B2A775BECF05607EBA502BDD7967F4799E5109DCD3C9C9 +IV=08963723F17A1B060507966FC568167B +CT=2F010053D3C59BB8ACB5B13B197A4204 +PT=8918E06B8619B43E859171A345E246AE + +I=364 +KEY=575661F811B8D8B50980A55848A48949F7A2B0405B60D3CAFC0F20AA99318F67 +IV=3C0A2BD5C6B727852A32022DF66B8C29 +CT=8918E06B8619B43E859171A345E246AE +PT=60FF920A8495AD880459737525C109D6 + +I=365 +KEY=5FACBE49DE8F64786918067E7E361681975D224ADFF57E42F85653DFBCF086B1 +IV=08FADFB1CF37BCCD6098A32636929FC8 +CT=60FF920A8495AD880459737525C109D6 +PT=03F09A2C18DB8BAE5CCC93B9165A1D16 + +I=366 +KEY=9BFDA5803AC1C3004F0B138885DE59FE94ADB866C72EF5ECA49AC066AAAA9BA7 +IV=C4511BC9E44EA778261315F6FBE84F7F +CT=03F09A2C18DB8BAE5CCC93B9165A1D16 +PT=52CB3AF36047F4D14C2EAEE3C3F8AF2A + +I=367 +KEY=614239035D7EF489DE2F88FDB6188EC3C6668295A769013DE8B46E856952348D +IV=FABF9C8367BF378991249B7533C6D73D +CT=52CB3AF36047F4D14C2EAEE3C3F8AF2A +PT=249794B3822BB06708B5D5777D297C40 + +I=368 +KEY=20BEFE90BA9C7EE9CFB1E569FE354258E2F116262542B15AE001BBF2147B48CD +IV=41FCC793E7E28A60119E6D94482DCC9B +CT=249794B3822BB06708B5D5777D297C40 +PT=1836AE59EAE452DAC108618DECD666BD + +I=369 +KEY=E11E8BF6DE253E4FBADEDFD44B34BE15FAC7B87FCFA6E3802109DA7FF8AD2E70 +IV=C1A0756664B940A6756F3ABDB501FC4D +CT=1836AE59EAE452DAC108618DECD666BD +PT=20EE84DEB0E7B0C83D74CE251AA1615C + +I=370 +KEY=D519038D457B4BCD9DD50C8F64FE2F2ADA293CA17F4153481C7D145AE20C4F2C +IV=3407887B9B5E7582270BD35B2FCA913F +CT=20EE84DEB0E7B0C83D74CE251AA1615C +PT=6FA7D3584A2E4B803AC1AC07B09931A2 + +I=371 +KEY=82F1611CFB9E7AF9F9274C6BF1B96BEBB58EEFF9356F18C826BCB85D52957E8E +IV=57E86291BEE5313464F240E4954744C1 +CT=6FA7D3584A2E4B803AC1AC07B09931A2 +PT=A7B8F8AC07BAB843F4E7942A6E4A85D5 + +I=372 +KEY=DFF5A6DE8ADE9AB78CF1E637F44FD3351236175532D5A08BD25B2C773CDFFB5B +IV=5D04C7C27140E04E75D6AA5C05F6B8DE +CT=A7B8F8AC07BAB843F4E7942A6E4A85D5 +PT=7F3C3702404E6E013474A0AA0EF85527 + +I=373 +KEY=9C6A11136F64F462E7C5CB30049CDA056D0A2057729BCE8AE62F8CDD3227AE7C +IV=439FB7CDE5BA6ED56B342D07F0D30930 +CT=7F3C3702404E6E013474A0AA0EF85527 +PT=7C0C44DC96872DEE0BAC71DDBDCC84E3 + +I=374 +KEY=2C95624ADD9B1E09F13AE579333B22BB1106648BE41CE364ED83FD008FEB2A9F +IV=B0FF7359B2FFEA6B16FF2E4937A7F8BE +CT=7C0C44DC96872DEE0BAC71DDBDCC84E3 +PT=B9E4597C562E9B5C0E6815E64F767CE9 + +I=375 +KEY=CBB3F14A21E49825990B89E7D07BC386A8E23DF7B2327838E3EBE8E6C09D5676 +IV=E7269300FC7F862C68316C9EE340E13D +CT=B9E4597C562E9B5C0E6815E64F767CE9 +PT=4B37A1FD978F50BE9EA482CFBEACFA08 + +I=376 +KEY=65B742FFD29D9B07F3956625AED7382EE3D59C0A25BD28867D4F6A297E31AC7E +IV=AE04B3B5F37903226A9EEFC27EACFBA8 +CT=4B37A1FD978F50BE9EA482CFBEACFA08 +PT=D3406B71FFC847C364199666A808C43A + +I=377 +KEY=6C6A4DE74AF6C443B4F6A1C7DAB4A28E3095F77BDA756F451956FC4FD6396844 +IV=09DD0F18986B5F444763C7E274639AA0 +CT=D3406B71FFC847C364199666A808C43A +PT=94744ECE39108CB8084DF8A17C49CDCC + +I=378 +KEY=AD09E82AFAA9F5168CD9B83F44C096A0A4E1B9B5E365E3FD111B04EEAA70A588 +IV=C163A5CDB05F3155382F19F89E74342E +CT=94744ECE39108CB8084DF8A17C49CDCC +PT=45EF43A20D7F174DA1463DDA678BBFFB + +I=379 +KEY=DC29CBF4E8B92311A9AA788C437A8EDDE10EFA17EE1AF4B0B05D3934CDFB1A73 +IV=712023DE1210D6072573C0B307BA187D +CT=45EF43A20D7F174DA1463DDA678BBFFB +PT=4480FB073AA197507E376C56B824C753 + +I=380 +KEY=93308B36D3A2E1A952B96FE4687B2DF9A58E0110D4BB63E0CE6A556275DFDD20 +IV=4F1940C23B1BC2B8FB1317682B01A324 +CT=4480FB073AA197507E376C56B824C753 +PT=C8BBB77D206EF37C7C40DB175D105271 + +I=381 +KEY=9682C995955D18471758C504201E93AC6D35B66DF4D5909CB22A8E7528CF8F51 +IV=05B242A346FFF9EE45E1AAE04865BE55 +CT=C8BBB77D206EF37C7C40DB175D105271 +PT=50C0B9001C716D53470FC9B011191402 + +I=382 +KEY=60854B33BE79B0E631B1AF9046C46D153DF50F6DE8A4FDCFF52547C539D69B53 +IV=F60782A62B24A8A126E96A9466DAFEB9 +CT=50C0B9001C716D53470FC9B011191402 +PT=8DB5367A34C5E5B93486AB07CA8BB02E + +I=383 +KEY=7EE74E63D01F31D44B3860471B0BE50FB0403917DC611876C1A3ECC2F35D2B7D +IV=1E6205506E6681327A89CFD75DCF881A +CT=8DB5367A34C5E5B93486AB07CA8BB02E +PT=4F9B922C88C1750829D9088F16EDB529 + +I=384 +KEY=A65EE6CE576182F487D2C21C4F8539F3FFDBAB3B54A06D7EE87AE44DE5B09E54 +IV=D8B9A8AD877EB320CCEAA25B548EDCFC +CT=4F9B922C88C1750829D9088F16EDB529 +PT=05A705F6B55D3ACF3E95E8264FEFFDCC + +I=385 +KEY=64F9A7DF5DA898C968746F96692F1892FA7CAECDE1FD57B1D6EF0C6BAA5F6398 +IV=C2A741110AC91A3DEFA6AD8A26AA2161 +CT=05A705F6B55D3ACF3E95E8264FEFFDCC +PT=D1FB7C1A698990AC81068D08BE1CE91F + +I=386 +KEY=019663655974433AD5731BC4388A067D2B87D2D78874C71D57E9816314438A87 +IV=656FC4BA04DCDBF3BD07745251A51EEF +CT=D1FB7C1A698990AC81068D08BE1CE91F +PT=A1CD24AAFCEE3A60A025B983D10D8E54 + +I=387 +KEY=16EF87A84F0627345CED6385A62374778A4AF67D749AFD7DF7CC38E0C54E04D3 +IV=1779E4CD1672640E899E78419EA9720A +CT=A1CD24AAFCEE3A60A025B983D10D8E54 +PT=B9064D063D2C8D8D935B53CBEF3224E2 + +I=388 +KEY=80931C61E23BA976FFC9288F74AD876D334CBB7B49B670F064976B2B2A7C2031 +IV=967C9BC9AD3D8E42A3244B0AD28EF31A +CT=B9064D063D2C8D8D935B53CBEF3224E2 +PT=8AD3B2222D84A4B25DC1311378027207 + +I=389 +KEY=227ACE0315678DEE433049D8CDFEE2D8B99F09596432D44239565A38527E5236 +IV=A2E9D262F75C2498BCF96157B95365B5 +CT=8AD3B2222D84A4B25DC1311378027207 +PT=3A7FC9D43F1F997FAF4931101C5B5FD4 + +I=390 +KEY=11799A22D50C53A89EDF396B7C7565AD83E0C08D5B2D4D3D961F6B284E250DE2 +IV=33035421C06BDE46DDEF70B3B18B8775 +CT=3A7FC9D43F1F997FAF4931101C5B5FD4 +PT=930860056FE2FDDC10059D09385C0415 + +I=391 +KEY=58DE85D9975D5F8A16C47C834568EF1D10E8A08834CFB0E1861AF621767909F7 +IV=49A71FFB42510C22881B45E8391D8AB0 +CT=930860056FE2FDDC10059D09385C0415 +PT=F41CCB823840FF7D16C6990A14E591D9 + +I=392 +KEY=3C8567CD05AF33761FE05FBDC2596EBFE4F46B0A0C8F4F9C90DC6F2B629C982E +IV=645BE21492F26CFC0924233E873181A2 +CT=F41CCB823840FF7D16C6990A14E591D9 +PT=82899B698456363C175791B845D5736F + +I=393 +KEY=F50F05CBDDFEBE7A656EE5C08CC24FF5667DF06388D979A0878BFE932749EB41 +IV=C98A6206D8518D0C7A8EBA7D4E9B214A +CT=82899B698456363C175791B845D5736F +PT=CF85BFDA1DFF5ADFFAF1B3E000B407F3 + +I=394 +KEY=B44AA91A374D1C5A7BD00557CBD24962A9F84FB99526237F7D7A4D7327FDECB2 +IV=4145ACD1EAB3A2201EBEE09747100697 +CT=CF85BFDA1DFF5ADFFAF1B3E000B407F3 +PT=34EEA75CC20C6EDEE9A5379C3B5CF01A + +I=395 +KEY=4C401127C0AFABBEA4C93FD80BA009CC9D16E8E5572A4DA194DF7AEF1CA11CA8 +IV=F80AB83DF7E2B7E4DF193A8FC07240AE +CT=34EEA75CC20C6EDEE9A5379C3B5CF01A +PT=27C6392ABE790B448CC9216B3FCF5454 + +I=396 +KEY=44D59CB8EBCC91362462D1D8FE193270BAD0D1CFE95346E518165B84236E48FC +IV=08958D9F2B633A8880ABEE00F5B93BBC +CT=27C6392ABE790B448CC9216B3FCF5454 +PT=2C39AC10C7D51B61D8F437D9BAA24A55 + +I=397 +KEY=E42795DA2BF8FA7A3B0E83923A5E243196E97DDF2E865D84C0E26C5D99CC02A9 +IV=A0F20962C0346B4C1F6C524AC4471641 +CT=2C39AC10C7D51B61D8F437D9BAA24A55 +PT=F828BC735827C106E61F8FFFE9453A77 + +I=398 +KEY=7F05DC0CD80178018D3A90E4A0CE63156EC1C1AC76A19C8226FDE3A2708938DE +IV=9B2249D6F3F9827BB63413769A904724 +CT=F828BC735827C106E61F8FFFE9453A77 +PT=DF8129A79852FEE2A8015A2379A7215B + +I=399 +KEY=935560C6072D897477D71AC4C12188D0B140E80BEEF362608EFCB981092E1985 +IV=EC50BCCADF2CF175FAED8A2061EFEBC5 +CT=DF8129A79852FEE2A8015A2379A7215B +PT=CD6429CF3F81F8B4F82BC627A8283096 + +=========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/cbc_e_m.txt b/src/lib/crypto/crypto_tests/test/cbc_e_m.txt new file mode 100644 index 000000000..cd344785f --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/cbc_e_m.txt @@ -0,0 +1,7224 @@ + +========================= + +FILENAME: "cbc_e_m.txt" + +Cipher Block Chaining (CBC) Mode - ENCRYPTION +Monte Carlo Test + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + +I=0 +KEY=00000000000000000000000000000000 +IV=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=8A05FC5E095AF4848A08D328D3688E3D + +I=1 +KEY=8A05FC5E095AF4848A08D328D3688E3D +IV=8A05FC5E095AF4848A08D328D3688E3D +PT=204F17E2444381F6114FF53934C0BCD3 +CT=192D9B3AA10BB2F7846CCBA0085C657A + +I=2 +KEY=93286764A85146730E641888DB34EB47 +IV=192D9B3AA10BB2F7846CCBA0085C657A +PT=983BF6F5A6DFBCDAA19370666E83A99A +CT=40D8DAF6D1FDA0A073B3BD18B7695D2E + +I=3 +KEY=D3F0BD9279ACE6D37DD7A5906C5DB669 +IV=40D8DAF6D1FDA0A073B3BD18B7695D2E +PT=C48CD503A21C8AD0B2483EF15F79571D +CT=3EDBE80D69A1D2248CA55FC17C4EF3C5 + +I=4 +KEY=ED2B559F100D34F7F172FA51101345AC +IV=3EDBE80D69A1D2248CA55FC17C4EF3C5 +PT=6A49A07B90CE830C20BC239646D936C0 +CT=D87891CF573C99EAE4349A70CA099415 + +I=5 +KEY=3553C4504731AD1D15466021DA1AD1B9 +IV=D87891CF573C99EAE4349A70CA099415 +PT=0ACB9A969946F523317BB932CE1561A4 +CT=24E8F1013F479BBE655DF088C9316BC7 + +I=6 +KEY=11BB3551787636A3701B90A9132BBA7E +IV=24E8F1013F479BBE655DF088C9316BC7 +PT=3DFC8683C1D626A26E2513EB747E8B0F +CT=2C92E80D8D1F70B411C28BD9FDABF21D + +I=7 +KEY=3D29DD5CF569461761D91B70EE804863 +IV=2C92E80D8D1F70B411C28BD9FDABF21D +PT=FAE2D6A36DBD17199F257643C89EB608 +CT=A61810A2798A70A9D2B37E88DEF9AE0F + +I=8 +KEY=9B31CDFE8CE336BEB36A65F83079E66C +IV=A61810A2798A70A9D2B37E88DEF9AE0F +PT=CB97F090318A6B10F5044EB8333ECDD6 +CT=0034FA480DE6F65D98D30B026118718F + +I=9 +KEY=9B0537B68105C0E32BB96EFA516197E3 +IV=0034FA480DE6F65D98D30B026118718F +PT=1B8030AC682BA677A7A3ACDC7FB33BB6 +CT=BEA24548CBC4A6630C9F1251F2C3DC51 + +I=10 +KEY=25A772FE4AC1668027267CABA3A24BB2 +IV=BEA24548CBC4A6630C9F1251F2C3DC51 +PT=D0524282C9AC395508CB2991822E8F42 +CT=4F278DD0B06CBFBAA928635E7CA81B68 + +I=11 +KEY=6A80FF2EFAADD93A8E0E1FF5DF0A50DA +IV=4F278DD0B06CBFBAA928635E7CA81B68 +PT=49EA900E2F61DF8CDEA7D479F59C4C30 +CT=EDFF930BB183F8DAC2FC0BD01AD65882 + +I=12 +KEY=877F6C254B2E21E04CF21425C5DC0858 +IV=EDFF930BB183F8DAC2FC0BD01AD65882 +PT=A1BBEB4E44EF725497B8C589192CC900 +CT=A6FE530E9509D48BAF30F601D04DB19D + +I=13 +KEY=21813F2BDE27F56BE3C2E2241591B9C5 +IV=A6FE530E9509D48BAF30F601D04DB19D +PT=4AD71402771A83F41F7E3AC004150CB7 +CT=FF1148A2E07401F7291B418D62618B65 + +I=14 +KEY=DE9077893E53F49CCAD9A3A977F032A0 +IV=FF1148A2E07401F7291B418D62618B65 +PT=AC47A1FD3490D6E809D40D4BEB8FF639 +CT=4420D4686F7A4D77A72810E89A5E0DF1 + +I=15 +KEY=9AB0A3E15129B9EB6DF1B341EDAE3F51 +IV=4420D4686F7A4D77A72810E89A5E0DF1 +PT=F22E1865DD87A88238173FC693C382E7 +CT=A4C7DE5DF9E2B6A20A1E22F8D7496ACD + +I=16 +KEY=3E777DBCA8CB0F4967EF91B93AE7559C +IV=A4C7DE5DF9E2B6A20A1E22F8D7496ACD +PT=929EFB34B1C552221B648A3D2C678EC9 +CT=D93DBCCA25FA4D9D8C37B3F107FCFA3C + +I=17 +KEY=E74AC1768D3142D4EBD822483D1BAFA0 +IV=D93DBCCA25FA4D9D8C37B3F107FCFA3C +PT=771C61ABB1E9BAB6F678336C8193307E +CT=75F491C2EA85184ACA3C96B769FA9698 + +I=18 +KEY=92BE50B467B45A9E21E4B4FF54E13938 +IV=75F491C2EA85184ACA3C96B769FA9698 +PT=55E42F98CCED821FE211D29674E77F48 +CT=A9C7536B77265ECBF7AC5ECD1EF5DDE2 + +I=19 +KEY=3B7903DF10920455D648EA324A14E4DA +IV=A9C7536B77265ECBF7AC5ECD1EF5DDE2 +PT=56BC0FA54F6F1E04A9A8893D3964EA68 +CT=3C749BF7EFA55CE924D1B33291C2B586 + +I=20 +KEY=070D9828FF3758BCF2995900DBD6515C +IV=3C749BF7EFA55CE924D1B33291C2B586 +PT=45D9BBBB1F3BB33EE182F09C90B1661C +CT=C4708DBAEBD202CDD2054DDCB1AF7BAB + +I=21 +KEY=C37D159214E55A71209C14DC6A792AF7 +IV=C4708DBAEBD202CDD2054DDCB1AF7BAB +PT=37765B154264AD781BBE5F5717DE7038 +CT=87457FD2EE747645576A27F46B00EC30 + +I=22 +KEY=44386A40FA912C3477F633280179C6C7 +IV=87457FD2EE747645576A27F46B00EC30 +PT=A7150BBC7BE3837E145AB83E554B49DE +CT=E25743DAD8E627803DA6C5E587C82384 + +I=23 +KEY=A66F299A22770BB44A50F6CD86B1E543 +IV=E25743DAD8E627803DA6C5E587C82384 +PT=173343A8488146FC9E4B59C2DF42BAF3 +CT=0D0A78CD5E3EB40F92FB55351122E92B + +I=24 +KEY=AB6551577C49BFBBD8ABA3F897930C68 +IV=0D0A78CD5E3EB40F92FB55351122E92B +PT=3B68CFE78B5DEA8F5165A2034D8C2823 +CT=1921B523A2F9B5F53C740D451C9FCE0C + +I=25 +KEY=B244E474DEB00A4EE4DFAEBD8B0CC264 +IV=1921B523A2F9B5F53C740D451C9FCE0C +PT=FDDD484B52C7F3A32F4514BEF5A646E3 +CT=6EAC2BB6EDF35C1267FF4F10700F3CD7 + +I=26 +KEY=DCE8CFC23343565C8320E1ADFB03FEB3 +IV=6EAC2BB6EDF35C1267FF4F10700F3CD7 +PT=CDAD592E5467AD1FA1B71D8AC050FCE0 +CT=D9624E40A8C9A2C58ABEDBAEB865DC1F + +I=27 +KEY=058A81829B8AF499099E3A03436622AC +IV=D9624E40A8C9A2C58ABEDBAEB865DC1F +PT=F9E90A4D7A9EF66818004CBC47C8C6EA +CT=DE15C7322B32738BB493E7FA27AFE6E2 + +I=28 +KEY=DB9F46B0B0B88712BD0DDDF964C9C44E +IV=DE15C7322B32738BB493E7FA27AFE6E2 +PT=FE3CC4AE4A13AC8946407CEEE220290B +CT=5822C79D627AD8A0C4975873D62C5E11 + +I=29 +KEY=83BD812DD2C25FB2799A858AB2E59A5F +IV=5822C79D627AD8A0C4975873D62C5E11 +PT=A5106EBD8888CC3A6884AC8E8EA9C97A +CT=F5AD0473A4228662D9F76E7A5ED4DBDD + +I=30 +KEY=7610855E76E0D9D0A06DEBF0EC314182 +IV=F5AD0473A4228662D9F76E7A5ED4DBDD +PT=4F30B073FB95CD0F0317E749F20E7A7D +CT=4B39DA1FA331CFEB1D6713054C6E9474 + +I=31 +KEY=3D295F41D5D1163BBD0AF8F5A05FD5F6 +IV=4B39DA1FA331CFEB1D6713054C6E9474 +PT=4850735E17F01A3B131E1B78B3A6EB96 +CT=32D1BE8640859CFAB16D64CE8795729B + +I=32 +KEY=0FF8E1C795548AC10C679C3B27CAA76D +IV=32D1BE8640859CFAB16D64CE8795729B +PT=A8C4B9E0069935CB046ACBB49C0B1205 +CT=47DC1150929AA9610938CB0CFE92995E + +I=33 +KEY=4824F09707CE23A0055F5737D9583E33 +IV=47DC1150929AA9610938CB0CFE92995E +PT=13F5DA56D399A7DAA004D0BE76845E68 +CT=BCA6BD8971837B8A81B923E5B2ED0D83 + +I=34 +KEY=F4824D1E764D582A84E674D26BB533B0 +IV=BCA6BD8971837B8A81B923E5B2ED0D83 +PT=8397C79E02FDFE6B7D47FA0181EA453A +CT=23D991B7DA5E96966830E7B40B5A2D8A + +I=35 +KEY=D75BDCA9AC13CEBCECD6936660EF1E3A +IV=23D991B7DA5E96966830E7B40B5A2D8A +PT=18987E5504E23C0F862BCA8DFFC2B07F +CT=17AA31C49F584DEF77C8E7891B11652B + +I=36 +KEY=C0F1ED6D334B83539B1E74EF7BFE7B11 +IV=17AA31C49F584DEF77C8E7891B11652B +PT=A34D44CC1C6E171D7D48447F87E2F2C1 +CT=DD1F90F66D4062E6823F0F229562D110 + +I=37 +KEY=1DEE7D9B5E0BE1B519217BCDEE9CAA01 +IV=DD1F90F66D4062E6823F0F229562D110 +PT=C9793582E22B8840BBAA3D7669208CCC +CT=8F5B876777F7CA903B1D6346AA8BDAE7 + +I=38 +KEY=92B5FAFC29FC2B25223C188B441770E6 +IV=8F5B876777F7CA903B1D6346AA8BDAE7 +PT=730EACFEE3817A94B88117ABB3F9CDE4 +CT=388780BA989C0A8BB5BD9E4086D91EF7 + +I=39 +KEY=AA327A46B16021AE978186CBC2CE6E11 +IV=388780BA989C0A8BB5BD9E4086D91EF7 +PT=F004D3A14C6C94FA2D39BE0C71119658 +CT=7F4C33E4F5C055C05DB4B7691061B307 + +I=40 +KEY=D57E49A244A0746ECA3531A2D2AFDD16 +IV=7F4C33E4F5C055C05DB4B7691061B307 +PT=575F86A5D1637CB86449F8BC0F1573D3 +CT=F6FE1919F174065AB31AC43E0D733A81 + +I=41 +KEY=238050BBB5D47234792FF59CDFDCE797 +IV=F6FE1919F174065AB31AC43E0D733A81 +PT=14F8E2DB61B05E094CA4C0E9DA7800EE +CT=4CB876F2DC169F955E639C6C916340A6 + +I=42 +KEY=6F38264969C2EDA1274C69F04EBFA731 +IV=4CB876F2DC169F955E639C6C916340A6 +PT=F88BA2E4AA4ABDD381778DFD1DA1856F +CT=AEEB80B469D89E45BC3426B6CCC50440 + +I=43 +KEY=C1D3A6FD001A73E49B784F46827AA371 +IV=AEEB80B469D89E45BC3426B6CCC50440 +PT=195F74019B65C0F7D724491BDE8C8B88 +CT=2FD7CCDBDB2B2037C104F0A707A11EDA + +I=44 +KEY=EE046A26DB3153D35A7CBFE185DBBDAB +IV=2FD7CCDBDB2B2037C104F0A707A11EDA +PT=FF51887AB5FEC9C97CB61BB2DE9CDBC6 +CT=8DF7BB99B781C63F4F8B2A7D5DFF2960 + +I=45 +KEY=63F3D1BF6CB095EC15F7959CD82494CB +IV=8DF7BB99B781C63F4F8B2A7D5DFF2960 +PT=A35AAB0055E99FA980D59B242B8C6257 +CT=7D96ECC20571E9E85C16E3BDADA374CA + +I=46 +KEY=1E653D7D69C17C0449E176217587E001 +IV=7D96ECC20571E9E85C16E3BDADA374CA +PT=02CC392194874CD531025588C96E2D22 +CT=AA1DC2E69CE582DFA9A1B435854FCBB1 + +I=47 +KEY=B478FF9BF524FEDBE040C214F0C82BB0 +IV=AA1DC2E69CE582DFA9A1B435854FCBB1 +PT=94CC5DB118EF53C904B0EEC23AC650FD +CT=DA0CA33BCCE4ABA1936833127D1F5E25 + +I=48 +KEY=6E745CA039C0557A7328F1068DD77595 +IV=DA0CA33BCCE4ABA1936833127D1F5E25 +PT=52F009E929526E923BE4F43B66876725 +CT=B5E80FF4DADD69BB7493B9F72A752811 + +I=49 +KEY=DB9C5354E31D3CC107BB48F1A7A25D84 +IV=B5E80FF4DADD69BB7493B9F72A752811 +PT=6B88B42E99E5B4F838064A711B71DE1F +CT=5CDDCE45516C6D1654647A1A541AC435 + +I=50 +KEY=87419D11B27151D753DF32EBF3B899B1 +IV=5CDDCE45516C6D1654647A1A541AC435 +PT=9E25CBDD8E2D7D68FF72932E35879175 +CT=3C7E88A9A6462D08ADA5910A3FCE611A + +I=51 +KEY=BB3F15B814377CDFFE7AA3E1CC76F8AB +IV=3C7E88A9A6462D08ADA5910A3FCE611A +PT=72A4EF1D82A3AC5C1DFDF8C4DCFB9F6E +CT=E428200E1C3BE9A5141F73590B7473B8 + +I=52 +KEY=5F1735B6080C957AEA65D0B8C7028B13 +IV=E428200E1C3BE9A5141F73590B7473B8 +PT=7CD8053F2FD743A44CC39F75C1E81075 +CT=AB3B8A79653E884053AFC8C14504AF77 + +I=53 +KEY=F42CBFCF6D321D3AB9CA187982062464 +IV=AB3B8A79653E884053AFC8C14504AF77 +PT=0731077A8B6854CB90AFFAE3A3B199C4 +CT=53B7DFD6D12DDE7966C62FCC1946A4AC + +I=54 +KEY=A79B6019BC1FC343DF0C37B59B4080C8 +IV=53B7DFD6D12DDE7966C62FCC1946A4AC +PT=E4E26CA1DA697F30E0542763313A79B7 +CT=6DEC201BBB90B66A3B2DFF4FA1DDF7C4 + +I=55 +KEY=CA774002078F7529E421C8FA3A9D770C +IV=6DEC201BBB90B66A3B2DFF4FA1DDF7C4 +PT=C2CF11681C4767A78B2F95AFB50CF155 +CT=F535B7CD4135A39E0E344BD2CFA14B83 + +I=56 +KEY=3F42F7CF46BAD6B7EA158328F53C3C8F +IV=F535B7CD4135A39E0E344BD2CFA14B83 +PT=606618948C1ED454B9B0F92435381D2D +CT=209AC483682C48AA197BB64417127656 + +I=57 +KEY=1FD8334C2E969E1DF36E356CE22E4AD9 +IV=209AC483682C48AA197BB64417127656 +PT=8F8A70AADF2F8BFB5E137F86AC83D32F +CT=76F5F43A888D7F22D698A73810ED5B15 + +I=58 +KEY=692DC776A61BE13F25F69254F2C311CC +IV=76F5F43A888D7F22D698A73810ED5B15 +PT=E9E8AEBF16A5F4E1C26B4A385163E844 +CT=625C62F33C9548F2651FB0A08BF45286 + +I=59 +KEY=0B71A5859A8EA9CD40E922F47937434A +IV=625C62F33C9548F2651FB0A08BF45286 +PT=C69CFD36C50EBA06E3B3C4AB7C9B694E +CT=3931CE6DF783063F26920D4048B00C82 + +I=60 +KEY=32406BE86D0DAFF2667B2FB431874FC8 +IV=3931CE6DF783063F26920D4048B00C82 +PT=5DFE322DD692BA8DD9CD328A5AF9A3B7 +CT=A3CA3ECE725C84281144052A80EA5176 + +I=61 +KEY=918A55261F512BDA773F2A9EB16D1EBE +IV=A3CA3ECE725C84281144052A80EA5176 +PT=4BBD16BF74226F816767A7207C672C9A +CT=94552690A231354F8F9BEF295E55F142 + +I=62 +KEY=05DF73B6BD601E95F8A4C5B7EF38EFFC +IV=94552690A231354F8F9BEF295E55F142 +PT=7055D0C535B2B0501FF6AAEE46E03818 +CT=771908987F00C2D822897E7EEA148F29 + +I=63 +KEY=72C67B2EC260DC4DDA2DBBC9052C60D5 +IV=771908987F00C2D822897E7EEA148F29 +PT=7336B9D4977BDDA811C0C5EBEA539574 +CT=7AA84598115B181863081AFCC239EDD2 + +I=64 +KEY=086E3EB6D33BC455B925A135C7158D07 +IV=7AA84598115B181863081AFCC239EDD2 +PT=5296C8546532BAEACBEC9F29916FB6B2 +CT=3D95967035AF639B2D2814DEB9B7F86A + +I=65 +KEY=35FBA8C6E694A7CE940DB5EB7EA2756D +IV=3D95967035AF639B2D2814DEB9B7F86A +PT=430880F5576C7783BC1336F900DDD037 +CT=4D70AAD2FC9EF403B463A72DB4CFE640 + +I=66 +KEY=788B02141A0A53CD206E12C6CA6D932D +IV=4D70AAD2FC9EF403B463A72DB4CFE640 +PT=E489B93778DE0C42FEFB6122ECA46BDC +CT=165DDB405546934E81CB6B0B89B4A40E + +I=67 +KEY=6ED6D9544F4CC083A1A579CD43D93723 +IV=165DDB405546934E81CB6B0B89B4A40E +PT=8E5481ACD58BFC5D141C1F71CDE91E37 +CT=693775A3661CE9D0E4CB4888431C64A5 + +I=68 +KEY=07E1ACF729502953456E314500C55386 +IV=693775A3661CE9D0E4CB4888431C64A5 +PT=4AAA5E507EFB9FAD15E5F4C77F46AF89 +CT=C42391D50B1210C67B6AD642745A4DAC + +I=69 +KEY=C3C23D22224239953E04E707749F1E2A +IV=C42391D50B1210C67B6AD642745A4DAC +PT=4E0748F8716801B099494037485B8BA4 +CT=A4CB7F010AC42B4C3C14F02353F3644A + +I=70 +KEY=67094223288612D902101724276C7A60 +IV=A4CB7F010AC42B4C3C14F02353F3644A +PT=0B7B41D57885DB37A2FC355C8D03FF3C +CT=1BB0CBD24537B36EB555BE8C0FEC3A1F + +I=71 +KEY=7CB989F16DB1A1B7B745A9A82880407F +IV=1BB0CBD24537B36EB555BE8C0FEC3A1F +PT=4696F9A564354194142AB7B8630B4279 +CT=18B10BAE39D4FA58F586A067A8E38BC5 + +I=72 +KEY=6408825F54655BEF42C309CF8063CBBA +IV=18B10BAE39D4FA58F586A067A8E38BC5 +PT=0B59EBABAB994F2DDB3DE383454BECE8 +CT=C09C6670B93ECD303BA53DE58DD81A64 + +I=73 +KEY=A494E42FED5B96DF7966342A0DBBD1DE +IV=C09C6670B93ECD303BA53DE58DD81A64 +PT=2F897F3385E71133CEC8367411E830A3 +CT=45EA7CB9119DF7367294F9FE36D4A09F + +I=74 +KEY=E17E9896FCC661E90BF2CDD43B6F7141 +IV=45EA7CB9119DF7367294F9FE36D4A09F +PT=8CDE9D975B51A098F4CAC93DC58C002F +CT=02DDD735439A8AE03E976E629A6C992C + +I=75 +KEY=E3A34FA3BF5CEB093565A3B6A103E86D +IV=02DDD735439A8AE03E976E629A6C992C +PT=1E20571F82C2C6884A6F90A23FD3A925 +CT=B040686B866AE80A88B899031F2F0EE4 + +I=76 +KEY=53E327C839360303BDDD3AB5BE2CE689 +IV=B040686B866AE80A88B899031F2F0EE4 +PT=0851624711970ADE2F456D5DAFB17E05 +CT=201756BC061706513264A3C489D95A0C + +I=77 +KEY=73F471743F2105528FB9997137F5BC85 +IV=201756BC061706513264A3C489D95A0C +PT=E8B1410DE742136E71F54D31FEAA72EB +CT=2EF27C31AA488648FCE0F1804D658092 + +I=78 +KEY=5D060D459569831A735968F17A903C17 +IV=2EF27C31AA488648FCE0F1804D658092 +PT=97E0CA84C9B22C8942C7FC5088EAED04 +CT=7545F1D9C8F5F8B441EDCDAF00462344 + +I=79 +KEY=2843FC9C5D9C7BAE32B4A55E7AD61F53 +IV=7545F1D9C8F5F8B441EDCDAF00462344 +PT=7B5572C09E998656B55C53748CF77C21 +CT=347875EFD6BD978CD1B2EA949F7E2358 + +I=80 +KEY=1C3B89738B21EC22E3064FCAE5A83C0B +IV=347875EFD6BD978CD1B2EA949F7E2358 +PT=A30001AA29D70B0A141B8FC8B9B2E210 +CT=9C956408BA335CCC9F02F31CC45FD5E6 + +I=81 +KEY=80AEED7B3112B0EE7C04BCD621F7E9ED +IV=9C956408BA335CCC9F02F31CC45FD5E6 +PT=839783D75859393B215010F63159FA45 +CT=B70E700F4A7ED08618754960B83BD0F2 + +I=82 +KEY=37A09D747B6C60686471F5B699CC391F +IV=B70E700F4A7ED08618754960B83BD0F2 +PT=1E3C630BC8C34BF8822686043D14E4D6 +CT=4721B6796F82D47D6EEB9CB11A19605E + +I=83 +KEY=70812B0D14EEB4150A9A690783D55941 +IV=4721B6796F82D47D6EEB9CB11A19605E +PT=CEE1B977E8B75623CC4E2C4F4765FE2A +CT=3382E1B076680BBBE7C451582016DD11 + +I=84 +KEY=4303CABD6286BFAEED5E385FA3C38450 +IV=3382E1B076680BBBE7C451582016DD11 +PT=02365457AB60C892A0C34A7067AB7608 +CT=AB581732E06B90AA0C835C1C7B6D18B5 + +I=85 +KEY=E85BDD8F82ED2F04E1DD6443D8AE9CE5 +IV=AB581732E06B90AA0C835C1C7B6D18B5 +PT=222B7ED84C648C12FFDD6E8E13EEC651 +CT=3E2E592CEEAD3B5E16860E80E406E882 + +I=86 +KEY=D67584A36C40145AF75B6AC33CA87467 +IV=3E2E592CEEAD3B5E16860E80E406E882 +PT=7D24BD646EEBA44ED27B11DA42D72FF8 +CT=9163F6DBE0D8BB79A154D92E37A07E1C + +I=87 +KEY=471672788C98AF23560FB3ED0B080A7B +IV=9163F6DBE0D8BB79A154D92E37A07E1C +PT=42B571FFB3275F5A8E26616A3F0E3403 +CT=E1340E61513FE8146F29E111392E2C3A + +I=88 +KEY=A6227C19DDA74737392652FC32262641 +IV=E1340E61513FE8146F29E111392E2C3A +PT=6EFD16D48E03B6E1CD74777ABC891DA8 +CT=3D703B4FD8A8A7F015D0FD47DE0C5A28 + +I=89 +KEY=9B524756050FE0C72CF6AFBBEC2A7C69 +IV=3D703B4FD8A8A7F015D0FD47DE0C5A28 +PT=7956129687AC95397E14821A17F267DE +CT=C5C6D2BAABDBE0B82CDFFFE7A92C8344 + +I=90 +KEY=5E9495ECAED4007F0029505C4506FF2D +IV=C5C6D2BAABDBE0B82CDFFFE7A92C8344 +PT=AC661770332FE0A45B80791C3A5D1241 +CT=6F7BDE1BD17C5B10064B52EB54EE90B0 + +I=91 +KEY=31EF4BF77FA85B6F066202B711E86F9D +IV=6F7BDE1BD17C5B10064B52EB54EE90B0 +PT=1DE0702C81667A979E5E3542DA95C5AD +CT=DC7E35D5B02AFF4B92C190265E01C0F8 + +I=92 +KEY=ED917E22CF82A42494A392914FE9AF65 +IV=DC7E35D5B02AFF4B92C190265E01C0F8 +PT=A491CB4321C757FD353B560C0B3EA4D0 +CT=D753F5A6C5D7E17F4024FD8675B23E7F + +I=93 +KEY=3AC28B840A55455BD4876F173A5B911A +IV=D753F5A6C5D7E17F4024FD8675B23E7F +PT=418FA3B3E9B4E463D04AC3A3361DCA57 +CT=B635529E8080B33E9AD6D79B8203112D + +I=94 +KEY=8CF7D91A8AD5F6654E51B88CB8588037 +IV=B635529E8080B33E9AD6D79B8203112D +PT=C87E4ED505989807D1DBDA4769804EA3 +CT=43E763CD1B9EE4BC474B79C1E0DA2564 + +I=95 +KEY=CF10BAD7914B12D9091AC14D5882A553 +IV=43E763CD1B9EE4BC474B79C1E0DA2564 +PT=042F084454D0EE01AB00D3921E1BCA06 +CT=C799956FF8A7A05B71123EBC4AA09C0C + +I=96 +KEY=08892FB869ECB2827808FFF11222395F +IV=C799956FF8A7A05B71123EBC4AA09C0C +PT=9A8E40400C51A438DCE498AD3455DE51 +CT=76679B0E26B1B6CA2A8D90944777C57F + +I=97 +KEY=7EEEB4B64F5D044852856F655555FC20 +IV=76679B0E26B1B6CA2A8D90944777C57F +PT=227E122D3AF18A3CAA973B33B3356CE7 +CT=B2F52396F02D2DFFE36C5F9238AC1EBE + +I=98 +KEY=CC1B9720BF7029B7B1E930F76DF9E29E +IV=B2F52396F02D2DFFE36C5F9238AC1EBE +PT=0D9CDD97E2FE0E78CF16B1596DC20ABA +CT=7C8EDD3A079835954238E0FE4872AAE1 + +I=99 +KEY=B0954A1AB8E81C22F3D1D009258B487F +IV=7C8EDD3A079835954238E0FE4872AAE1 +PT=925A7ECD233B3B3CCDE2221A03C5F720 +CT=D7C9FD3EF010C8577087591149D5640F + +I=100 +KEY=675CB72448F8D475835689186C5E2C70 +IV=D7C9FD3EF010C8577087591149D5640F +PT=59FEFBE5179F0E7E48F3D97CDA314FF5 +CT=2608CCE6BA917551DEF84FA7BCA9B23C + +I=101 +KEY=41547BC2F269A1245DAEC6BFD0F79E4C +IV=2608CCE6BA917551DEF84FA7BCA9B23C +PT=7F24A1BA8762294194F76322A6B28A16 +CT=EFF1513B52D5D74D2202898AC99552C4 + +I=102 +KEY=AEA52AF9A0BC76697FAC4F351962CC88 +IV=EFF1513B52D5D74D2202898AC99552C4 +PT=79B43F27F3E144C4EFBF383698A1EC90 +CT=B4B3B020D44D059666E86D22072916B5 + +I=103 +KEY=1A169AD974F173FF194422171E4BDA3D +IV=B4B3B020D44D059666E86D22072916B5 +PT=8BF20B60B4774354857BA2979CD396F9 +CT=6F1A3D43CC2171A808AE8D38396DE1D1 + +I=104 +KEY=750CA79AB8D0025711EAAF2F27263BEC +IV=6F1A3D43CC2171A808AE8D38396DE1D1 +PT=74955DDACFB8A5467D069F1EF341248B +CT=47C23A68DA351C22EBF86FDBD8F723B4 + +I=105 +KEY=32CE9DF262E51E75FA12C0F4FFD11858 +IV=47C23A68DA351C22EBF86FDBD8F723B4 +PT=25D7A186ED990020E10A23C5CFB1CEF9 +CT=D5F2E2C2CED730479D87E0AF0FEF8A73 + +I=106 +KEY=E73C7F30AC322E326795205BF03E922B +IV=D5F2E2C2CED730479D87E0AF0FEF8A73 +PT=13480F2EDCCB62B8F9A7DF98238571FC +CT=F29A46A7F1B1D1D4F5FE30E569D7A801 + +I=107 +KEY=15A639975D83FFE6926B10BE99E93A2A +IV=F29A46A7F1B1D1D4F5FE30E569D7A801 +PT=75E138123B5A98596303ACF9DAEEA714 +CT=9F6E9A13913DF78AC67BD20303AF49B5 + +I=108 +KEY=8AC8A384CCBE086C5410C2BD9A46739F +IV=9F6E9A13913DF78AC67BD20303AF49B5 +PT=DBD0AE00FD06761626366EB251412A32 +CT=46AC9F42239B22A163CE0FDEAA103D44 + +I=109 +KEY=CC643CC6EF252ACD37DECD6330564EDB +IV=46AC9F42239B22A163CE0FDEAA103D44 +PT=B8768A8AF461C9547D1F982FE90E96B6 +CT=95D7C8F969B0EEB03FEC257043597315 + +I=110 +KEY=59B3F43F8695C47D0832E813730F3DCE +IV=95D7C8F969B0EEB03FEC257043597315 +PT=3D20CC8AD484048251C7A81C7E3CA59C +CT=6B74AF42435BC640A826EC443207574E + +I=111 +KEY=32C75B7DC5CE023DA014045741086A80 +IV=6B74AF42435BC640A826EC443207574E +PT=BF719F78B23BAFD4A50634BCD9361095 +CT=31E3919F36D79FBF61884227110C10FF + +I=112 +KEY=0324CAE2F3199D82C19C467050047A7F +IV=31E3919F36D79FBF61884227110C10FF +PT=E1D32740BB8B6D67AD3038887899F090 +CT=A1CD90683CE041D6CA20780176FDD5F4 + +I=113 +KEY=A2E95A8ACFF9DC540BBC3E7126F9AF8B +IV=A1CD90683CE041D6CA20780176FDD5F4 +PT=3069EA97F092ACDCF41649377B8FCBC8 +CT=7220F866A10DC711DC1D277B4C8F204D + +I=114 +KEY=D0C9A2EC6EF41B45D7A1190A6A768FC6 +IV=7220F866A10DC711DC1D277B4C8F204D +PT=B0563A5E0EE1E2B96F3F7D04EE39EA7C +CT=CF81CA348B98C532B172F032AE0A6FED + +I=115 +KEY=1F4868D8E56CDE7766D3E938C47CE02B +IV=CF81CA348B98C532B172F032AE0A6FED +PT=B1B78BD75C30DD4E1E198ACB98B498A6 +CT=99C990D64D27D47ED0C1E7F186AC6674 + +I=116 +KEY=8681F80EA84B0A09B6120EC942D0865F +IV=99C990D64D27D47ED0C1E7F186AC6674 +PT=D413E3CC66E9938E4E0CFC1975E38C8C +CT=30C7DAD86FEF77C43A44A3EF8B116354 + +I=117 +KEY=B64622D6C7A47DCD8C56AD26C9C1E50B +IV=30C7DAD86FEF77C43A44A3EF8B116354 +PT=CD85D9334481AE85B8816233CA4AF7DB +CT=9E717B45239DD908138837154B803654 + +I=118 +KEY=28375993E439A4C59FDE9A338241D35F +IV=9E717B45239DD908138837154B803654 +PT=925BA3760D655D5B788802DDE25732BB +CT=4A6E32C01709EBCCC9BCA43FD5DFDFB3 + +I=119 +KEY=62596B53F3304F0956623E0C579E0CEC +IV=4A6E32C01709EBCCC9BCA43FD5DFDFB3 +PT=0AA6264BFCC7BD07FA8F94E1EF739633 +CT=7263392DC9DA868BC0317A6D4AD52553 + +I=120 +KEY=103A527E3AEAC982965344611D4B29BF +IV=7263392DC9DA868BC0317A6D4AD52553 +PT=FB385BD8ECE7C4DFE2351D851141888D +CT=AA49B1DDA3AF4D05D861667E88AD61AB + +I=121 +KEY=BA73E3A3994584874E32221F95E64814 +IV=AA49B1DDA3AF4D05D861667E88AD61AB +PT=510E13E20BB06EAD335F10F2C69831D3 +CT=3AC256A92F69AF35DB05DDCA61CF1EE4 + +I=122 +KEY=80B1B50AB62C2BB29537FFD5F42956F0 +IV=3AC256A92F69AF35DB05DDCA61CF1EE4 +PT=0A07CAA0EC6CB726F1A38847253BECB6 +CT=037497736381429A5E5A139C44A6C64A + +I=123 +KEY=83C52279D5AD6928CB6DEC49B08F90BA +IV=037497736381429A5E5A139C44A6C64A +PT=864FEF67C8902757E2CFB28DA2EF3C8D +CT=5393D7F9F37A5B9F1F82C1BE20435149 + +I=124 +KEY=D056F58026D732B7D4EF2DF790CCC1F3 +IV=5393D7F9F37A5B9F1F82C1BE20435149 +PT=ED2D2A671677067B30540D4C9D86905F +CT=2969AC5FB94EC76209C6DF58F6B8AA01 + +I=125 +KEY=F93F59DF9F99F5D5DD29F2AF66746BF2 +IV=2969AC5FB94EC76209C6DF58F6B8AA01 +PT=67ED14454DAD764C1772BCB1E0527954 +CT=150F94E1940F9D2ACC735F79B0912A06 + +I=126 +KEY=EC30CD3E0B9668FF115AADD6D6E541F4 +IV=150F94E1940F9D2ACC735F79B0912A06 +PT=517A4852F68370EDD879E32F52FD4D2B +CT=6EFD8E4E4C096A2033B3DA8A1F0066AF + +I=127 +KEY=82CD4370479F02DF22E9775CC9E5275B +IV=6EFD8E4E4C096A2033B3DA8A1F0066AF +PT=DBF4CAD912437115658E5BA5E1724739 +CT=899D9126CD85D2D4053AD9EE7156041B + +I=128 +KEY=0B50D2568A1AD00B27D3AEB2B8B32340 +IV=899D9126CD85D2D4053AD9EE7156041B +PT=69B302F96AFCF802AC639EBABC52ECFB +CT=819E4B8319807088FF306E125E52DAD3 + +I=129 +KEY=8ACE99D5939AA083D8E3C0A0E6E1F993 +IV=819E4B8319807088FF306E125E52DAD3 +PT=F5CA57371833F0AF98F0EC02DFE518ED +CT=4DFA3739235D14660DF7D5FDE36F6567 + +I=130 +KEY=C734AEECB0C7B4E5D514155D058E9CF4 +IV=4DFA3739235D14660DF7D5FDE36F6567 +PT=29BBD9264B9792BED8A8EFA43F943A7D +CT=4EA36ECCBCCD9FAFD8FB588BD53826A7 + +I=131 +KEY=8997C0200C0A2B4A0DEF4DD6D0B6BA53 +IV=4EA36ECCBCCD9FAFD8FB588BD53826A7 +PT=149120CFC3D7C671F287AA77A4A3EF97 +CT=0282357C78C8944A5520AF80506DE30D + +I=132 +KEY=8B15F55C74C2BF0058CFE25680DB595E +IV=0282357C78C8944A5520AF80506DE30D +PT=02C2E0CCB12F5216213D493325F38FC3 +CT=C827C36F654137A2BB127D1782285B10 + +I=133 +KEY=43323633118388A2E3DD9F4102F3024E +IV=C827C36F654137A2BB127D1782285B10 +PT=FA1693AD90401791FF9093A562EC66EB +CT=3723A94BC91032BF8DB599ABEFB784D1 + +I=134 +KEY=74119F78D893BA1D6E6806EAED44869F +IV=3723A94BC91032BF8DB599ABEFB784D1 +PT=5410CBE33ABB58AB0B0E86F5817E6F2C +CT=26A520B5B475632EE8806648BFC028AF + +I=135 +KEY=52B4BFCD6CE6D93386E860A25284AE30 +IV=26A520B5B475632EE8806648BFC028AF +PT=B01A11D200C24F4333029DE3BFF49601 +CT=36D5E00E0A53D7CE1498215AFA686905 + +I=136 +KEY=64615FC366B50EFD927041F8A8ECC735 +IV=36D5E00E0A53D7CE1498215AFA686905 +PT=252E4460E9A391D54CE9E516663E59AE +CT=829F0B7B17ED5F2FB7A014A6CD9D8052 + +I=137 +KEY=E6FE54B8715851D225D0555E65714767 +IV=829F0B7B17ED5F2FB7A014A6CD9D8052 +PT=BCC51A6493F6847BEA8219329F67308D +CT=BAB1D358D08DA13BEC485051F2EBFE2E + +I=138 +KEY=5C4F87E0A1D5F0E9C998050F979AB949 +IV=BAB1D358D08DA13BEC485051F2EBFE2E +PT=D89236011B3C2338E95322D4716AEE59 +CT=29BA99F8CF8B48134B1330E75BD7254E + +I=139 +KEY=75F51E186E5EB8FA828B35E8CC4D9C07 +IV=29BA99F8CF8B48134B1330E75BD7254E +PT=21D0EB5857C93A0D4D75253E1020C00E +CT=9D557274FE14AA69673441117A2D7DA2 + +I=140 +KEY=E8A06C6C904A1293E5BF74F9B660E1A5 +IV=9D557274FE14AA69673441117A2D7DA2 +PT=3C3BB454584C4C7570089B6E631BA035 +CT=543EF50A024E77ACE685BD0BBB47232D + +I=141 +KEY=BC9E99669204653F033AC9F20D27C288 +IV=543EF50A024E77ACE685BD0BBB47232D +PT=8ED890BC903AEAC7C3C685980EDB3370 +CT=884BD68868D89DE9DEDB2D95A8B992FB + +I=142 +KEY=34D54FEEFADCF8D6DDE1E467A59E5073 +IV=884BD68868D89DE9DEDB2D95A8B992FB +PT=684DEBD6DEDE24BD0F4F8AFA47F08AEF +CT=DB00984CAEB14CF5A1FDE8E8E9C03830 + +I=143 +KEY=EFD5D7A2546DB4237C1C0C8F4C5E6843 +IV=DB00984CAEB14CF5A1FDE8E8E9C03830 +PT=C42B245443F2695F306455199C7C76FE +CT=0CA808425E8EBDDD5519130F4900329F + +I=144 +KEY=E37DDFE00AE309FE29051F80055E5ADC +IV=0CA808425E8EBDDD5519130F4900329F +PT=1655F89334CCB6ED8E140088997BD2D1 +CT=0DAE2F85CD81874DCD7368277D0C386D + +I=145 +KEY=EED3F065C7628EB3E47677A7785262B1 +IV=0DAE2F85CD81874DCD7368277D0C386D +PT=2B7A2DF6E0CAC83837AFDC8B2134E6A6 +CT=E3BF66A6784432E6CE61B769C3CFDB35 + +I=146 +KEY=0D6C96C3BF26BC552A17C0CEBB9DB984 +IV=E3BF66A6784432E6CE61B769C3CFDB35 +PT=8FED19E77B9690EC8F70272364B4EB74 +CT=473925552401311F24EE4F40B5A3ECB5 + +I=147 +KEY=4A55B3969B278D4A0EF98F8E0E3E5531 +IV=473925552401311F24EE4F40B5A3ECB5 +PT=032D9AF654037E2586B12CF031E4AB4C +CT=E9E1E4ACF3F4E25CB8093F6B27665DFF + +I=148 +KEY=A3B4573A68D36F16B6F0B0E5295808CE +IV=E9E1E4ACF3F4E25CB8093F6B27665DFF +PT=E6EF26B3721F6C772D231584DD480441 +CT=2D9F85D63FED609876DF97F0E6B85564 + +I=149 +KEY=8E2BD2EC573E0F8EC02F2715CFE05DAA +IV=2D9F85D63FED609876DF97F0E6B85564 +PT=E641EBC4A734C71669D948F1BEEE675A +CT=3A61F4BED09FD7A7AED71E9FD53D2EE3 + +I=150 +KEY=B44A265287A1D8296EF8398A1ADD7349 +IV=3A61F4BED09FD7A7AED71E9FD53D2EE3 +PT=36DB43747CD9215857886A0DE2008509 +CT=6BE2AD95F4A642F3FD73D9543B53D479 + +I=151 +KEY=DFA88BC773079ADA938BE0DE218EA730 +IV=6BE2AD95F4A642F3FD73D9543B53D479 +PT=58A73313B31B8C1EB3C144C9363EE94B +CT=BF198D336DF857BFBA069634C25CF45B + +I=152 +KEY=60B106F41EFFCD65298D76EAE3D2536B +IV=BF198D336DF857BFBA069634C25CF45B +PT=E0974E1BBEFE21422ECED27858535F87 +CT=7945132F6F7EED6B61E1CF9C47E2AB2A + +I=153 +KEY=19F415DB7181200E486CB976A430F841 +IV=7945132F6F7EED6B61E1CF9C47E2AB2A +PT=6F36B63A1A8B426282CA4E61B7E37B3A +CT=AF441F330C8C199E9776D92A92B02216 + +I=154 +KEY=B6B00AE87D0D3990DF1A605C3680DA57 +IV=AF441F330C8C199E9776D92A92B02216 +PT=99AD2B814D3A4C0E1C27D4251C55C74A +CT=F34463A538E46E87B0F24EAA36B674A7 + +I=155 +KEY=45F4694D45E957176FE82EF60036AEF0 +IV=F34463A538E46E87B0F24EAA36B674A7 +PT=6D05C19E42D0561C198A10FA55F4C870 +CT=5D54D3C72D55015D0149FA1591208824 + +I=156 +KEY=18A0BA8A68BC564A6EA1D4E3911626D4 +IV=5D54D3C72D55015D0149FA1591208824 +PT=7AA7A04DE8CD21F59BA5369CA175CEC3 +CT=D2EBE35C33210B39CD4F443BB577DBD8 + +I=157 +KEY=CA4B59D65B9D5D73A3EE90D82461FD0C +IV=D2EBE35C33210B39CD4F443BB577DBD8 +PT=2DA2A48FE13FA4DD5271A02FB7F98AEC +CT=2F4AD89C0D915DF978160E9E882AD28E + +I=158 +KEY=E501814A560C008ADBF89E46AC4B2F82 +IV=2F4AD89C0D915DF978160E9E882AD28E +PT=82EB831B9FF9DA7D06553A456133766B +CT=09A04C7CBED3D60ADB6CFDD012DEED17 + +I=159 +KEY=ECA1CD36E8DFD68000946396BE95C295 +IV=09A04C7CBED3D60ADB6CFDD012DEED17 +PT=8D4FD1CE8CB9745E9E65182D94F8307A +CT=193C6FAB40C87C7029983EDD52628400 + +I=160 +KEY=F59DA29DA817AAF0290C5D4BECF74695 +IV=193C6FAB40C87C7029983EDD52628400 +PT=F06A061082E499E65A5DED0D22323F57 +CT=7166BD655D8128E7B09D37B38478B480 + +I=161 +KEY=84FB1FF8F596821799916AF8688FF215 +IV=7166BD655D8128E7B09D37B38478B480 +PT=DCEC808551EA98534E1A9EDF457125DA +CT=5DFAAFB695D34A7AF2D39CD2D01FD4BD + +I=162 +KEY=D901B04E6045C86D6B42F62AB89026A8 +IV=5DFAAFB695D34A7AF2D39CD2D01FD4BD +PT=FAE59C96604D062F49C8C93FA7E4D5FC +CT=85F63AFC88A1CED4E73B849C295692F2 + +I=163 +KEY=5CF78AB2E8E406B98C7972B691C6B45A +IV=85F63AFC88A1CED4E73B849C295692F2 +PT=7FE1EA6A7A525A7E0222D6269F7D6A40 +CT=DC60A8554BF9E783D0E92283EC0D00AF + +I=164 +KEY=809722E7A31DE13A5C9050357DCBB4F5 +IV=DC60A8554BF9E783D0E92283EC0D00AF +PT=89C93828CE30D4CD7025D9F2CF864371 +CT=EF10720E8F10FBABC96BB5F4E5287D12 + +I=165 +KEY=6F8750E92C0D1A9195FBE5C198E3C9E7 +IV=EF10720E8F10FBABC96BB5F4E5287D12 +PT=A8DEA35D4A712ACE8F38A2CA2CB6BCFB +CT=EED271733DC7B81AD09C86C8F8D69255 + +I=166 +KEY=8155219A11CAA28B4567630960355BB2 +IV=EED271733DC7B81AD09C86C8F8D69255 +PT=6720AD239EFECF5785B238D4DA39DD6A +CT=DC47B1FAC154CB0C39ADF4C92F8C2902 + +I=167 +KEY=5D129060D09E69877CCA97C04FB972B0 +IV=DC47B1FAC154CB0C39ADF4C92F8C2902 +PT=D41DEA3BC44CC552B5ACCFEEFAF225F5 +CT=AD4828834513730BF275C854D35BF09E + +I=168 +KEY=F05AB8E3958D1A8C8EBF5F949CE2822E +IV=AD4828834513730BF275C854D35BF09E +PT=5059DA9258A7DE12865E1E2173399BC9 +CT=82CA6B085A452CFDFFBDE5C7B738CDAB + +I=169 +KEY=7290D3EBCFC836717102BA532BDA4F85 +IV=82CA6B085A452CFDFFBDE5C7B738CDAB +PT=9625B8A444C3E4D3554A8C6E33E1B810 +CT=4F44C38189E1011970690D0ED4BCB9C7 + +I=170 +KEY=3DD4106A46293768016BB75DFF66F642 +IV=4F44C38189E1011970690D0ED4BCB9C7 +PT=373FBCA7529A9FA9AF77295FC55B0BEE +CT=27BE0578B0F898C04133AA4D3C1A5A7C + +I=171 +KEY=1A6A1512F6D1AFA840581D10C37CAC3E +IV=27BE0578B0F898C04133AA4D3C1A5A7C +PT=37FC0A286DFFD5A76643D1D45C858F64 +CT=B9C70B34F78F3DA7796C32D0918474A5 + +I=172 +KEY=A3AD1E26015E920F39342FC052F8D89B +IV=B9C70B34F78F3DA7796C32D0918474A5 +PT=E1EAC69AA2A8F05B8747E2624D00F4BB +CT=846985C471F10676E63BCD09C32506F3 + +I=173 +KEY=27C49BE270AF9479DF0FE2C991DDDE68 +IV=846985C471F10676E63BCD09C32506F3 +PT=6EB0046D9C6854C63447296F4F6D3D21 +CT=F754559746C52113C29AF782E96B6105 + +I=174 +KEY=D090CE75366AB56A1D95154B78B6BF6D +IV=F754559746C52113C29AF782E96B6105 +PT=F65269422328F40D8A53F4F14DB88583 +CT=AE6B4EABF8DC479A1E3F8C3F30A4A797 + +I=175 +KEY=7EFB80DECEB6F2F003AA9974481218FA +IV=AE6B4EABF8DC479A1E3F8C3F30A4A797 +PT=765B38DC041DEC130A3A294D9F89A16D +CT=87645926B9D85AC4AB023D2104CC3FA2 + +I=176 +KEY=F99FD9F8776EA834A8A8A4554CDE2758 +IV=87645926B9D85AC4AB023D2104CC3FA2 +PT=8070950120E0FBE07C70B171364AD173 +CT=0125D51139CE00DB848B8A9AD3FEB90B + +I=177 +KEY=F8BA0CE94EA0A8EF2C232ECF9F209E53 +IV=0125D51139CE00DB848B8A9AD3FEB90B +PT=1EF45DD2CD61667469569CFAD445341C +CT=E1651756A2C0D132C671D74748244E49 + +I=178 +KEY=19DF1BBFEC6079DDEA52F988D704D01A +IV=E1651756A2C0D132C671D74748244E49 +PT=26BEF7E8A3D0AC50DC64B8215CCBC44F +CT=94049FBD554A6CFFE7927D6EC07D6242 + +I=179 +KEY=8DDB8402B92A15220DC084E61779B258 +IV=94049FBD554A6CFFE7927D6EC07D6242 +PT=803F34FA967583623D0CA4D76FC56787 +CT=974BBE04952D8F0DD70F4353FEB092EB + +I=180 +KEY=1A903A062C079A2FDACFC7B5E9C920B3 +IV=974BBE04952D8F0DD70F4353FEB092EB +PT=023E5D307CE85244144D59A53DB504E7 +CT=2615B9F94F9024EA616648FF15E3B65F + +I=181 +KEY=3C8583FF6397BEC5BBA98F4AFC2A96EC +IV=2615B9F94F9024EA616648FF15E3B65F +PT=1A84130B09CE3E7AB1F400B9FE295BEB +CT=39A2A3B6EFB5EBE805CBAD5817EAEEDA + +I=182 +KEY=052720498C22552DBE622212EBC07836 +IV=39A2A3B6EFB5EBE805CBAD5817EAEEDA +PT=B83609055302D99DE46B7153AE3DFCE2 +CT=93F72B839E2AD731B5E894B56ADADCF4 + +I=183 +KEY=96D00BCA1208821C0B8AB6A7811AA4C2 +IV=93F72B839E2AD731B5E894B56ADADCF4 +PT=85E69EBDE13C05526EA8AE1D24B487F3 +CT=D0ADA333801DFDBFC2420B73CD2B92A5 + +I=184 +KEY=467DA8F992157FA3C9C8BDD44C313667 +IV=D0ADA333801DFDBFC2420B73CD2B92A5 +PT=F24782E953B9B1BBF3B925659C99415B +CT=F59A3D0B65E8F16DC73CCD6C27E8C705 + +I=185 +KEY=B3E795F2F7FD8ECE0EF470B86BD9F162 +IV=F59A3D0B65E8F16DC73CCD6C27E8C705 +PT=73BE517552E054D78583BEA03B84A245 +CT=7904DBE3A103D936EB4B960C180B0651 + +I=186 +KEY=CAE34E1156FE57F8E5BFE6B473D2F733 +IV=7904DBE3A103D936EB4B960C180B0651 +PT=91998E9582D8357DD5D8B95A9D85912F +CT=C2DE0D0145A45DEABD6DE1FD62161EB1 + +I=187 +KEY=083D4310135A0A1258D2074911C4E982 +IV=C2DE0D0145A45DEABD6DE1FD62161EB1 +PT=2A5D4EC49712B9CF1E2D9C6C5EFACC2A +CT=974264BDC574C738243DDC008EC4C15A + +I=188 +KEY=9F7F27ADD62ECD2A7CEFDB499F0028D8 +IV=974264BDC574C738243DDC008EC4C15A +PT=F74520C3745B9B9F9D19642AA57451FB +CT=F4EE51C2ECC32F4806F9C8588880525B + +I=189 +KEY=6B91766F3AEDE2627A16131117807A83 +IV=F4EE51C2ECC32F4806F9C8588880525B +PT=4A7D6FC6712F451F58DF0AC2D517189E +CT=F4978F5F53AA4C336BEE0C62F432B44F + +I=190 +KEY=9F06F9306947AE5111F81F73E3B2CECC +IV=F4978F5F53AA4C336BEE0C62F432B44F +PT=00DAD17491C973991FEC296972B691BC +CT=09DAA53C2E394BF83113BE48E5D0CCA2 + +I=191 +KEY=96DC5C0C477EE5A920EBA13B0662026E +IV=09DAA53C2E394BF83113BE48E5D0CCA2 +PT=C00943704C1336F01A1D23FD98BE7E8B +CT=D0DE529664BF241DBED3168DA5BC1B28 + +I=192 +KEY=46020E9A23C1C1B49E38B7B6A3DE1946 +IV=D0DE529664BF241DBED3168DA5BC1B28 +PT=A07FAD9770CC32C5680F33A2D67044A4 +CT=F6A44922B3744BE96C46742A79A49CBB + +I=193 +KEY=B0A647B890B58A5DF27EC39CDA7A85FD +IV=F6A44922B3744BE96C46742A79A49CBB +PT=D5450C670BE84169AD1E62C5ECB8365F +CT=47D229908D4C1EA34E429C34B7D635F5 + +I=194 +KEY=F7746E281DF994FEBC3C5FA86DACB008 +IV=47D229908D4C1EA34E429C34B7D635F5 +PT=9E90D30BE92104667A16522237D645A6 +CT=6463AC2096842A0958ACF45370C0626F + +I=195 +KEY=9317C2088B7DBEF7E490ABFB1D6CD267 +IV=6463AC2096842A0958ACF45370C0626F +PT=74382A7BF713DE8E8D17AE389E03C3AC +CT=ECDCEF7613C362D288AC23D38722DC4C + +I=196 +KEY=7FCB2D7E98BEDC256C3C88289A4E0E2B +IV=ECDCEF7613C362D288AC23D38722DC4C +PT=DB2EC6F41A72F426D9F5DBC65CEC1C5C +CT=DFE2DA423ACE2DFB053265E9E9B214E2 + +I=197 +KEY=A029F73CA270F1DE690EEDC173FC1AC9 +IV=DFE2DA423ACE2DFB053265E9E9B214E2 +PT=35998CB9958DC9DE0550FC3EA722D571 +CT=5EBCA79BF99165D9FFE355D9B24ECB5D + +I=198 +KEY=FE9550A75BE1940796EDB818C1B2D194 +IV=5EBCA79BF99165D9FFE355D9B24ECB5D +PT=9BDA7BC96736FE2140911C98E8E02E1C +CT=782D3EFD5F599E8D3C85D06128677EC2 + +I=199 +KEY=86B86E5A04B80A8AAA686879E9D5AF56 +IV=782D3EFD5F599E8D3C85D06128677EC2 +PT=8014C1F398E4DCC7F4E5E09E5FAFB080 +CT=E01AE2D961F31BBAE3DA7429627572AB + +I=200 +KEY=66A28C83654B113049B21C508BA0DDFD +IV=E01AE2D961F31BBAE3DA7429627572AB +PT=97D66D66D1731EEFF14519620616A10B +CT=BC41ED9D568D6ED36212C92DEEB40A0E + +I=201 +KEY=DAE3611E33C67FE32BA0D57D6514D7F3 +IV=BC41ED9D568D6ED36212C92DEEB40A0E +PT=F7646B60C237ED24F467141980EB4F00 +CT=CB8DF2D164E5B4AB3193D02E71959F63 + +I=202 +KEY=116E93CF5723CB481A33055314814890 +IV=CB8DF2D164E5B4AB3193D02E71959F63 +PT=4A3A241B26AC7A1C88AA2FB750DF6E5A +CT=E396FB47A686ABAA350B84C250E5EAE9 + +I=203 +KEY=F2F86888F1A560E22F3881914464A279 +IV=E396FB47A686ABAA350B84C250E5EAE9 +PT=A71348309D176A072167C4B1B8A295C0 +CT=29AF21F96564EB591E9A60B1BE88DEC7 + +I=204 +KEY=DB57497194C18BBB31A2E120FAEC7CBE +IV=29AF21F96564EB591E9A60B1BE88DEC7 +PT=BC528364EF78D6432177FE0CF1CDECD1 +CT=34CD9D96D4455AE0C15B6B970F1EC905 + +I=205 +KEY=EF9AD4E74084D15BF0F98AB7F5F2B5BB +IV=34CD9D96D4455AE0C15B6B970F1EC905 +PT=18972F6992299533EE23AA5824C25892 +CT=2E05E3E2079A055310FD9318590A6F41 + +I=206 +KEY=C19F3705471ED408E00419AFACF8DAFA +IV=2E05E3E2079A055310FD9318590A6F41 +PT=5441FF0D0A4062D5D0DF29BF2FDA85B4 +CT=47D4EAECE59C733EEFCB7B9D5BE95A98 + +I=207 +KEY=864BDDE9A282A7360FCF6232F7118062 +IV=47D4EAECE59C733EEFCB7B9D5BE95A98 +PT=ED3E19B5AB5389AA3A58D97F6604F4C0 +CT=00525B7D5BFC0651AEF6770F6281E6DC + +I=208 +KEY=86198694F97EA167A139153D959066BE +IV=00525B7D5BFC0651AEF6770F6281E6DC +PT=8BD4869C88A9BD3DCFE89B98B93F6EB3 +CT=AFB2215E6DC04E9467F44227FD4BDB98 + +I=209 +KEY=29ABA7CA94BEEFF3C6CD571A68DBBD26 +IV=AFB2215E6DC04E9467F44227FD4BDB98 +PT=6E7269FC27BDCC42D64CEF41A612F771 +CT=7B769B90279C95E31D8B3D792FA27FA8 + +I=210 +KEY=52DD3C5AB3227A10DB466A634779C28E +IV=7B769B90279C95E31D8B3D792FA27FA8 +PT=E00316E79DC10D179002B1BACC146027 +CT=E3870CDE5CF99B7C4C489AF81153002F + +I=211 +KEY=B15A3084EFDBE16C970EF09B562AC2A1 +IV=E3870CDE5CF99B7C4C489AF81153002F +PT=FB2FC78A79C33225E6EAAA06B76FA793 +CT=4DFC91F8971635348EF35141E8C291F7 + +I=212 +KEY=FCA6A17C78CDD45819FDA1DABEE85356 +IV=4DFC91F8971635348EF35141E8C291F7 +PT=69C8EE14F21832BB077F1A5414851FFE +CT=DA51BE36F96AA8C80DED9DB2A701D72F + +I=213 +KEY=26F71F4A81A77C9014103C6819E98479 +IV=DA51BE36F96AA8C80DED9DB2A701D72F +PT=766EC1664D2194E0F89B69861A4A8501 +CT=2ACA6359CD935CA2294F9FB5A50F4993 + +I=214 +KEY=0C3D7C134C3420323D5FA3DDBCE6CDEA +IV=2ACA6359CD935CA2294F9FB5A50F4993 +PT=1D95E551169BD538836CC349BC6B1772 +CT=315518F0AC6C1DC9939CB802336DA968 + +I=215 +KEY=3D6864E3E0583DFBAEC31BDF8F8B6482 +IV=315518F0AC6C1DC9939CB802336DA968 +PT=4F6BFE727AECDAB5A32DF8CFFC43D6A9 +CT=34C3ECD89376B4D771CA0669C2C3E26C + +I=216 +KEY=09AB883B732E892CDF091DB64D4886EE +IV=34C3ECD89376B4D771CA0669C2C3E26C +PT=AA8B1DA2E015D482EE08FA2B4A2B77B6 +CT=A3F4DD9DDC375C90579C274527612C6E + +I=217 +KEY=AA5F55A6AF19D5BC88953AF36A29AA80 +IV=A3F4DD9DDC375C90579C274527612C6E +PT=2EE6982D9E0AA5FCB61F3E66E52A0D6D +CT=C45C9E4DE76782E2599BD73B132BFE90 + +I=218 +KEY=6E03CBEB487E575ED10EEDC879025410 +IV=C45C9E4DE76782E2599BD73B132BFE90 +PT=6E58E5B1EDF1BFABAD643D8223F0FA81 +CT=32221DA62DA2B441B5E66A197A5C69F1 + +I=219 +KEY=5C21D64D65DCE31F64E887D1035E3DE1 +IV=32221DA62DA2B441B5E66A197A5C69F1 +PT=D5A81DF4B6BE17A531478961D78CAB46 +CT=E1FEB5C31B1671F15DC1F7713E5DD7FE + +I=220 +KEY=BDDF638E7ECA92EE392970A03D03EA1F +IV=E1FEB5C31B1671F15DC1F7713E5DD7FE +PT=D360948141A1D3ECFF5E8D6BDC022685 +CT=FF07F02135FB458D63EE68C4B1463A99 + +I=221 +KEY=42D893AF4B31D7635AC718648C45D086 +IV=FF07F02135FB458D63EE68C4B1463A99 +PT=E3C1E44333C9307E90EE2FBA6A7708A5 +CT=1AE4E8466B84B59EECF5E6BEB6140DF2 + +I=222 +KEY=583C7BE920B562FDB632FEDA3A51DD74 +IV=1AE4E8466B84B59EECF5E6BEB6140DF2 +PT=653AA343CE35F72E2ADB5FFCD2DFCBA8 +CT=3CB44BC123DDCD55B812D265CC5E974E + +I=223 +KEY=648830280368AFA80E202CBFF60F4A3A +IV=3CB44BC123DDCD55B812D265CC5E974E +PT=E96A66BFE5F0E8083A01664A47226672 +CT=BB6C54E118FA895F2AC4CC036166E390 + +I=224 +KEY=DFE464C91B9226F724E4E0BC9769A9AA +IV=BB6C54E118FA895F2AC4CC036166E390 +PT=A5B240D8E5731E1BFA7C4FDFB4EED81F +CT=DA20870677A6214F26FDACBA81B41882 + +I=225 +KEY=05C4E3CF6C3407B802194C0616DDB128 +IV=DA20870677A6214F26FDACBA81B41882 +PT=92FF6EAB4A6D1AD3941E6A91D8C9105B +CT=F079AA86FC9FD361DBA0C21CCD4B0F6C + +I=226 +KEY=F5BD494990ABD4D9D9B98E1ADB96BE44 +IV=F079AA86FC9FD361DBA0C21CCD4B0F6C +PT=DFF005175EF746B83CB00AC13337E248 +CT=B6021E0AA1A921C7BCC3FDAB1C3EA44A + +I=227 +KEY=43BF57433102F51E657A73B1C7A81A0E +IV=B6021E0AA1A921C7BCC3FDAB1C3EA44A +PT=DDDC1AA804AD13813C6AEA540557C097 +CT=41F0E4AB03801DCE585727B7C41F48BD + +I=228 +KEY=024FB3E83282E8D03D2D540603B752B3 +IV=41F0E4AB03801DCE585727B7C41F48BD +PT=4C6421E5A487C9C452958CAB38AC7098 +CT=6EFDD855BAF2D13437C01097ABB633DE + +I=229 +KEY=6CB26BBD887039E40AED4491A801616D +IV=6EFDD855BAF2D13437C01097ABB633DE +PT=2A11519D5463F2B96A5E0FCE6E4710D7 +CT=5E8243E5C54A109CCC0BF622A299EF68 + +I=230 +KEY=323028584D3A2978C6E6B2B30A988E05 +IV=5E8243E5C54A109CCC0BF622A299EF68 +PT=252145DACAD23E8B85AB7637B22C42F2 +CT=2C9A476418F01C589ADC0CA10BF4A183 + +I=231 +KEY=1EAA6F3C55CA35205C3ABE12016C2F86 +IV=2C9A476418F01C589ADC0CA10BF4A183 +PT=A22C36DC7D00645FEFE8683EA4231787 +CT=DA3A4AC19EF6A0F950E26B00834AFE41 + +I=232 +KEY=C49025FDCB3C95D90CD8D5128226D1C7 +IV=DA3A4AC19EF6A0F950E26B00834AFE41 +PT=B0DC92D3B4878156B768923286F0433F +CT=10BBC2A8C8F650FD8EED7CC9F5EAD05D + +I=233 +KEY=D42BE75503CAC5248235A9DB77CC019A +IV=10BBC2A8C8F650FD8EED7CC9F5EAD05D +PT=83A9338157091D4AECAF60E887AE09F7 +CT=757993A70F78B25F02FA0355E04DE27B + +I=234 +KEY=A15274F20CB2777B80CFAA8E9781E3E1 +IV=757993A70F78B25F02FA0355E04DE27B +PT=9D818ACA2C753E7314F51699D3062031 +CT=E2E74C76C09516135876D54AFC940D80 + +I=235 +KEY=43B53884CC276168D8B97FC46B15EE61 +IV=E2E74C76C09516135876D54AFC940D80 +PT=BDD36F881F8D1FC56780E291D1359EE1 +CT=22F76A2DB98544549DEA21FFCDC2B943 + +I=236 +KEY=614252A975A2253C45535E3BA6D75722 +IV=22F76A2DB98544549DEA21FFCDC2B943 +PT=4C9C16802A4BB1202D4FAC9E76C57A43 +CT=166B0FF778D72B6102D6ADF990A70A23 + +I=237 +KEY=77295D5E0D750E5D4785F3C236705D01 +IV=166B0FF778D72B6102D6ADF990A70A23 +PT=0045ECDDAA51EE6FDB226E2D9471F46C +CT=D7724DC8A1413BC1B9D6F305794426F0 + +I=238 +KEY=A05B1096AC34359CFE5300C74F347BF1 +IV=D7724DC8A1413BC1B9D6F305794426F0 +PT=25C55C60290DF3D0DC3274CD2AE0ED21 +CT=41F0196DFE0B1F664A107D12A6FF3D79 + +I=239 +KEY=E1AB09FB523F2AFAB4437DD5E9CB4688 +IV=41F0196DFE0B1F664A107D12A6FF3D79 +PT=9A44454F7A335C89BEFF1D94D3FDB320 +CT=3F37D7ADFB9933FFBAC1F7D07F31046E + +I=240 +KEY=DE9CDE56A9A619050E828A0596FA42E6 +IV=3F37D7ADFB9933FFBAC1F7D07F31046E +PT=03D7F09054233696BEF84AB8D5B77091 +CT=02D226A748153C27A723F02461FFF913 + +I=241 +KEY=DC4EF8F1E1B32522A9A17A21F705BBF5 +IV=02D226A748153C27A723F02461FFF913 +PT=D5C82A6F048A2AA0E5CF4F1EDADD68B3 +CT=4BD7486C212E7F78228478BBF0A7AD3D + +I=242 +KEY=9799B09DC09D5A5A8B25029A07A216C8 +IV=4BD7486C212E7F78228478BBF0A7AD3D +PT=936431AD9F800606240C33EAF661D3DA +CT=3EFE00CA0A96AF4425E683512DAC0164 + +I=243 +KEY=A967B057CA0BF51EAEC381CB2A0E17AC +IV=3EFE00CA0A96AF4425E683512DAC0164 +PT=280DC27864BED0D548B5B4F9A7FA38DE +CT=7023640C8D6B02F6C4C7E007C169C592 + +I=244 +KEY=D944D45B4760F7E86A0461CCEB67D23E +IV=7023640C8D6B02F6C4C7E007C169C592 +PT=CD0F58962915E5A514E5D6DA8BB868E8 +CT=D08419A75363E9622FAA09DB589915F1 + +I=245 +KEY=09C0CDFC14031E8A45AE6817B3FEC7CF +IV=D08419A75363E9622FAA09DB589915F1 +PT=09A6099FDDDBBC15EE79224B01C49DF0 +CT=6CDD2B0279D9DB3C71329C1BB2C24C2F + +I=246 +KEY=651DE6FE6DDAC5B6349CF40C013C8BE0 +IV=6CDD2B0279D9DB3C71329C1BB2C24C2F +PT=B24B11FD8A6FC6B2703FFBEBC85B6C44 +CT=CCB0F6F32BDE2339A1842A7EDC8C99C7 + +I=247 +KEY=A9AD100D4604E68F9518DE72DDB01227 +IV=CCB0F6F32BDE2339A1842A7EDC8C99C7 +PT=2E471506C55D1762CDB9EAEF29E23C01 +CT=DAD62227A5F328CC33F054EEB346E3D3 + +I=248 +KEY=737B322AE3F7CE43A6E88A9C6EF6F1F4 +IV=DAD62227A5F328CC33F054EEB346E3D3 +PT=5598344020E32F9B2C509D06F4E7804A +CT=18DE226F7CAA4EF2712A223C4709C9E2 + +I=249 +KEY=6BA510459F5D80B1D7C2A8A029FF3816 +IV=18DE226F7CAA4EF2712A223C4709C9E2 +PT=549A87BE74B62BAC3F0FDC2A878F5669 +CT=DB082C8D70948B6BF08D4848E4DB0231 + +I=250 +KEY=B0AD3CC8EFC90BDA274FE0E8CD243A27 +IV=DB082C8D70948B6BF08D4848E4DB0231 +PT=08946428BF90FBF0951A35D6FB72A48A +CT=29CBD3E3F2074514E63A7B2A651AB031 + +I=251 +KEY=9966EF2B1DCE4ECEC1759BC2A83E8A16 +IV=29CBD3E3F2074514E63A7B2A651AB031 +PT=7EBEC38F7787EE1BDD6A648334FA3076 +CT=0037935821278E879BCBB2FBE4ECC23E + +I=252 +KEY=99517C733CE9C0495ABE29394CD24828 +IV=0037935821278E879BCBB2FBE4ECC23E +PT=01D77828928164A830C249D96AC6F8B4 +CT=47501831F9DF42C234E9FE9169075888 + +I=253 +KEY=DE016442C536828B6E57D7A825D510A0 +IV=47501831F9DF42C234E9FE9169075888 +PT=608349FF8FFC31B072CFA7DF649E15B8 +CT=BC10B1D412BC05404B2E38A1D75DA421 + +I=254 +KEY=6211D596D78A87CB2579EF09F288B481 +IV=BC10B1D412BC05404B2E38A1D75DA421 +PT=B16325BD78FC0451216FF476D4CAE293 +CT=6ABD8010E9CBAE61E05A9E30C622B501 + +I=255 +KEY=08AC55863E4129AAC523713934AA0180 +IV=6ABD8010E9CBAE61E05A9E30C622B501 +PT=E613C244F74C61B078C9E59E06E7AD85 +CT=E896B8BD539C30D9A58E5EF6629B279C + +I=256 +KEY=E03AED3B6DDD197360AD2FCF5631261C +IV=E896B8BD539C30D9A58E5EF6629B279C +PT=6CFF7A909AAB2C0DC61FB8F11B45E661 +CT=30D15AAA05F56FA2D21E9974FB3FF5DA + +I=257 +KEY=D0EBB791682876D1B2B3B6BBAD0ED3C6 +IV=30D15AAA05F56FA2D21E9974FB3FF5DA +PT=6BFAC8E8FB9C3D5AF813B4DF90AD863B +CT=43B99F3DA3C1BCCE9038118E2968EFA1 + +I=258 +KEY=935228ACCBE9CA1F228BA73584663C67 +IV=43B99F3DA3C1BCCE9038118E2968EFA1 +PT=064D09E9F5104602E191DC39F18E6A1A +CT=EBC5796519BE4E05262A10D56FA0F72D + +I=259 +KEY=789751C9D257841A04A1B7E0EBC6CB4A +IV=EBC5796519BE4E05262A10D56FA0F72D +PT=C2B528D69ED3028A359D4472D98807A7 +CT=5F2B51DD025E775A63DFE5B9FBF54986 + +I=260 +KEY=27BC0014D009F340677E5259103382CC +IV=5F2B51DD025E775A63DFE5B9FBF54986 +PT=D5CF62940967AF7225F79E87136751F5 +CT=F56D88E433CEA445C6E4D6298DFB6C27 + +I=261 +KEY=D2D188F0E3C75705A19A84709DC8EEEB +IV=F56D88E433CEA445C6E4D6298DFB6C27 +PT=3BE3171202E762846D2CA00FB2CB141A +CT=4C168A0129F2D48E249777A366D1AEF1 + +I=262 +KEY=9EC702F1CA35838B850DF3D3FB19401A +IV=4C168A0129F2D48E249777A366D1AEF1 +PT=5B82A34141C236FAED7E1A78D3C426C4 +CT=E11FEBEF79E425480442D45A8C105B44 + +I=263 +KEY=7FD8E91EB3D1A6C3814F278977091B5E +IV=E11FEBEF79E425480442D45A8C105B44 +PT=86CFADD3F1B368B3A6E57148CA343D38 +CT=5F5F3548BDBB2A5337FBF07DF76526DD + +I=264 +KEY=2087DC560E6A8C90B6B4D7F4806C3D83 +IV=5F5F3548BDBB2A5337FBF07DF76526DD +PT=A4474ACA97100C7A357A66119D678798 +CT=013ADA262021F88617773CF478067EC8 + +I=265 +KEY=21BD06702E4B7416A1C3EB00F86A434B +IV=013ADA262021F88617773CF478067EC8 +PT=6D66801C39DB803B5DA5A80E30DB0D89 +CT=F46BE70F65FC5641318292AE0C79E5C5 + +I=266 +KEY=D5D6E17F4BB72257904179AEF413A68E +IV=F46BE70F65FC5641318292AE0C79E5C5 +PT=C9499B32D8F47313EB351139DB81AB25 +CT=8573A25F86C7784BF7A0153DF812805C + +I=267 +KEY=50A54320CD705A1C67E16C930C0126D2 +IV=8573A25F86C7784BF7A0153DF812805C +PT=4B09D37A4A57B320C34B1D70F74EB36A +CT=036913128A2B71CE3D05D52D61E48E86 + +I=268 +KEY=53CC5032475B2BD25AE4B9BE6DE5A854 +IV=036913128A2B71CE3D05D52D61E48E86 +PT=EA3A92794B204C0345765CEE2A04AF27 +CT=5A53E929182859CC28D4EB1CB9579B71 + +I=269 +KEY=099FB91B5F73721E723052A2D4B23325 +IV=5A53E929182859CC28D4EB1CB9579B71 +PT=2714E38858426C5631BB2BB4FA289985 +CT=DF4BD734DEC60475D47FE40502439AAE + +I=270 +KEY=D6D46E2F81B5766BA64FB6A7D6F1A98B +IV=DF4BD734DEC60475D47FE40502439AAE +PT=69AC3FD2273926E2DAD3F5BED9F21491 +CT=EBCCD0B121C4009EA7F038F30F5B6B05 + +I=271 +KEY=3D18BE9EA07176F501BF8E54D9AAC28E +IV=EBCCD0B121C4009EA7F038F30F5B6B05 +PT=07520CD471E27BAC35387DB47E706784 +CT=299FE603BBA51BD1582CBD42BC9568EA + +I=272 +KEY=1487589D1BD46D2459933316653FAA64 +IV=299FE603BBA51BD1582CBD42BC9568EA +PT=39598B70B8EB190049823472E3596E42 +CT=68DD98FE52B454F85D6F6A6C742223FA + +I=273 +KEY=7C5AC063496039DC04FC597A111D899E +IV=68DD98FE52B454F85D6F6A6C742223FA +PT=C7E13ABBBA75F527AB1320DD930B24F1 +CT=906B569E44263A4E6F41A52802D3FC59 + +I=274 +KEY=EC3196FD0D4603926BBDFC5213CE75C7 +IV=906B569E44263A4E6F41A52802D3FC59 +PT=9F5D8E50F06895D5D7E6D1DAA247D45F +CT=E5ECBDCC55A9D952BE0F93DFA0FE2C31 + +I=275 +KEY=09DD2B3158EFDAC0D5B26F8DB33059F6 +IV=E5ECBDCC55A9D952BE0F93DFA0FE2C31 +PT=EC3F35C1E6371F106443BD1446D58A0A +CT=4837A3D703E80BFE50D742E378956F3A + +I=276 +KEY=41EA88E65B07D13E85652D6ECBA536CC +IV=4837A3D703E80BFE50D742E378956F3A +PT=7998C3B7B5C94540DFC5BF777D700D48 +CT=DF1564E5E47503A779020D27394571E9 + +I=277 +KEY=9EFFEC03BF72D299FC672049F2E04725 +IV=DF1564E5E47503A779020D27394571E9 +PT=63BEA75A2440C5D123F335F72137B0B6 +CT=5147239C3F6E4A158989BE96C0275D41 + +I=278 +KEY=CFB8CF9F801C988C75EE9EDF32C71A64 +IV=5147239C3F6E4A158989BE96C0275D41 +PT=09C656A0DFCF893DDBE5E2B3D88E5F1F +CT=7E4DEE30DED62EE15CD957530B62559D + +I=279 +KEY=B1F521AF5ECAB66D2937C98C39A54FF9 +IV=7E4DEE30DED62EE15CD957530B62559D +PT=71DC22F489DD422CDE09F01DAA427567 +CT=6F62D6359F07F6BDBB4C02BBE50B273C + +I=280 +KEY=DE97F79AC1CD40D0927BCB37DCAE68C5 +IV=6F62D6359F07F6BDBB4C02BBE50B273C +PT=C2A9BC94CAE48DBEB37B4B506AD4336A +CT=902D9E9F82DE4E66E42B4FEA79AF4077 + +I=281 +KEY=4EBA690543130EB6765084DDA50128B2 +IV=902D9E9F82DE4E66E42B4FEA79AF4077 +PT=69EE7E15EEC2EA953A32E1714961BA9E +CT=72CB5DE8AF6CDC60A00A15CEAF249DBD + +I=282 +KEY=3C7134EDEC7FD2D6D65A91130A25B50F +IV=72CB5DE8AF6CDC60A00A15CEAF249DBD +PT=4C0A3B88FDFAEFEC38858A927C38AE6A +CT=68C2BFA5DE837B927BD75C6DE6008595 + +I=283 +KEY=54B38B4832FCA944AD8DCD7EEC25309A +IV=68C2BFA5DE837B927BD75C6DE6008595 +PT=CE75CCA2D7B0199EB1DA7E33A0E50AB7 +CT=4FFCCBB31FB1FCC0FCB38F0B557BE67A + +I=284 +KEY=1B4F40FB2D4D5584513E4275B95ED6E0 +IV=4FFCCBB31FB1FCC0FCB38F0B557BE67A +PT=E0ECA2ABC1F389B149E746CFB039539E +CT=249FB11DF8C0ED1F346F6D69B8FD0470 + +I=285 +KEY=3FD0F1E6D58DB89B65512F1C01A3D290 +IV=249FB11DF8C0ED1F346F6D69B8FD0470 +PT=BFA871CA5EC16C0B353679782BE04394 +CT=8127E6D8EEC1111518065EDC34CD4B4C + +I=286 +KEY=BEF7173E3B4CA98E7D5771C0356E99DC +IV=8127E6D8EEC1111518065EDC34CD4B4C +PT=1EF816C565B2F56E772C96AD5C92842D +CT=C8DC75AE1E2DBD005D94E69D6776C498 + +I=287 +KEY=762B62902561148E20C3975D52185D44 +IV=C8DC75AE1E2DBD005D94E69D6776C498 +PT=9F2B9873F88EBF21A3BB3DCD853C812E +CT=861D4FF061E85D44173252244F143692 + +I=288 +KEY=F0362D60448949CA37F1C5791D0C6BD6 +IV=861D4FF061E85D44173252244F143692 +PT=6CDEA8A806516A1A0E1CBB5AA123862A +CT=16DA4EE5C5044F66EFCC313754FBCD9E + +I=289 +KEY=E6EC6385818D06ACD83DF44E49F7A648 +IV=16DA4EE5C5044F66EFCC313754FBCD9E +PT=5B637BB469073B5E54EC006F47C4D546 +CT=C2C50037BBBEC252B7D5CF10C38BD665 + +I=290 +KEY=242963B23A33C4FE6FE83B5E8A7C702D +IV=C2C50037BBBEC252B7D5CF10C38BD665 +PT=38DADBF2BA4A80A6A190D9E2AA245167 +CT=721222A5A67E96246DA1B9C59B67DDD5 + +I=291 +KEY=563B41179C4D52DA0249829B111BADF8 +IV=721222A5A67E96246DA1B9C59B67DDD5 +PT=CB52378F6E4E7FCB1891D3BB4D086B9F +CT=D28B8F54E8BDA9A20965984D5DA27FC9 + +I=292 +KEY=84B0CE4374F0FB780B2C1AD64CB9D231 +IV=D28B8F54E8BDA9A20965984D5DA27FC9 +PT=E66015A1B848EF190F981DEFEDB98C93 +CT=012C5D9B847C9583B0BE03999D24E277 + +I=293 +KEY=859C93D8F08C6EFBBB92194FD19D3046 +IV=012C5D9B847C9583B0BE03999D24E277 +PT=F5B2BAD53323A52A2B99CC12782CD6F9 +CT=D1EFB7E7A34F75887038FC4827E894C1 + +I=294 +KEY=5473243F53C31B73CBAAE507F675A487 +IV=D1EFB7E7A34F75887038FC4827E894C1 +PT=11C0C41C3F547B5D7FC94115327AB3D5 +CT=2CF97D8995AA8FDC4C05205D3D8B757F + +I=295 +KEY=788A59B6C66994AF87AFC55ACBFED1F8 +IV=2CF97D8995AA8FDC4C05205D3D8B757F +PT=3F911029D8B69CA1A323A277090B9C07 +CT=44BB04C6253F3ADD454264EA97490475 + +I=296 +KEY=3C315D70E356AE72C2EDA1B05CB7D58D +IV=44BB04C6253F3ADD454264EA97490475 +PT=9D7724EFD1AE76904458EF1360953AA4 +CT=5D6F876E4FDD6921B243EB1F6EF50F82 + +I=297 +KEY=615EDA1EAC8BC75370AE4AAF3242DA0F +IV=5D6F876E4FDD6921B243EB1F6EF50F82 +PT=44A26554FE355D95706431B344701B03 +CT=5F3226B39DF230163D2C474F04BAD36E + +I=298 +KEY=3E6CFCAD3179F7454D820DE036F80961 +IV=5F3226B39DF230163D2C474F04BAD36E +PT=5D8B62C8CD3B04451A599989F3165530 +CT=A247CF8E1D8F480DA4155DA846A2B64E + +I=299 +KEY=9C2B33232CF6BF48E9975048705ABF2F +IV=A247CF8E1D8F480DA4155DA846A2B64E +PT=610D3798E62E9338D5987BAC82D48CD7 +CT=2A92B5AAEA43CFBAA62842DEE7F43A19 + +I=300 +KEY=B6B98689C6B570F24FBF129697AE8536 +IV=2A92B5AAEA43CFBAA62842DEE7F43A19 +PT=F77943AA429BCCC5253156474E719389 +CT=7D475AFF824080E9C95D4E49D4F5090D + +I=301 +KEY=CBFEDC7644F5F01B86E25CDF435B8C3B +IV=7D475AFF824080E9C95D4E49D4F5090D +PT=5E6269D157164B2C544D3052E9DB8553 +CT=AD4628B05F5A765E557015B4A41505EA + +I=302 +KEY=66B8F4C61BAF8645D392496BE74E89D1 +IV=AD4628B05F5A765E557015B4A41505EA +PT=77126BD6C08A094981FEC9E2DE91B2BF +CT=59C24F269E3884A4F8E3F9FB05BF448F + +I=303 +KEY=3F7ABBE0859702E12B71B090E2F1CD5E +IV=59C24F269E3884A4F8E3F9FB05BF448F +PT=7775F90D2189E91B75AB8AD93C0D44F2 +CT=B72873115D4761B8BAEB5B5892B79DF8 + +I=304 +KEY=8852C8F1D8D06359919AEBC8704650A6 +IV=B72873115D4761B8BAEB5B5892B79DF8 +PT=03D9C45A2A152ADAA53E1D42AB33555B +CT=FE0C3F22E6B467DC1C628C928D03DB5B + +I=305 +KEY=765EF7D33E6404858DF8675AFD458BFD +IV=FE0C3F22E6B467DC1C628C928D03DB5B +PT=279791AC4189634A6066BCDCAA2EF9B4 +CT=7F3ABBA943C8E3EF19C3BA2C98C9685F + +I=306 +KEY=09644C7A7DACE76A943BDD76658CE3A2 +IV=7F3ABBA943C8E3EF19C3BA2C98C9685F +PT=E46E5FB6019BA52524A383A18A89583A +CT=C96D250343B134241221490AB39931DB + +I=307 +KEY=C00969793E1DD34E861A947CD615D279 +IV=C96D250343B134241221490AB39931DB +PT=A3A544B8982C2F9EA0CD0ABC4D6392E2 +CT=951D54AABDF6F5B70E700C4896EB2685 + +I=308 +KEY=55143DD383EB26F9886A983440FEF4FC +IV=951D54AABDF6F5B70E700C4896EB2685 +PT=43FEB2051478A02BA1F054C9E82F0209 +CT=1F90165BE29C6C86D09AD07B1C006CA6 + +I=309 +KEY=4A842B8861774A7F58F0484F5CFE985A +IV=1F90165BE29C6C86D09AD07B1C006CA6 +PT=558AD95B25BAB5205FB7E529C96E5B59 +CT=40C0A0427C12AB1F72A7ADF96F82D437 + +I=310 +KEY=0A448BCA1D65E1602A57E5B6337C4C6D +IV=40C0A0427C12AB1F72A7ADF96F82D437 +PT=BABA13A1244DEFF5E4A2AB8183775773 +CT=FB08FDF3BF4394BA1A92C45B7F5F3060 + +I=311 +KEY=F14C7639A22675DA30C521ED4C237C0D +IV=FB08FDF3BF4394BA1A92C45B7F5F3060 +PT=46E036ECCDBE88931E552E45CBBC2BDC +CT=311AE8C2B7CB633178874BDEEEE0602F + +I=312 +KEY=C0569EFB15ED16EB48426A33A2C31C22 +IV=311AE8C2B7CB633178874BDEEEE0602F +PT=4D5C919959478AD0D9862BA509233102 +CT=1DC85D9A8877C79698C7D1C1610CBAE9 + +I=313 +KEY=DD9EC3619D9AD17DD085BBF2C3CFA6CB +IV=1DC85D9A8877C79698C7D1C1610CBAE9 +PT=D423E31E9FD6E4F4373FA7AD31CC6011 +CT=FC55E7BEA15BD539EDACB202F0218D4A + +I=314 +KEY=21CB24DF3CC104443D2909F033EE2B81 +IV=FC55E7BEA15BD539EDACB202F0218D4A +PT=52C2C696A4343C0F280A3BC8F6AA19EA +CT=FFD9FECD3A4EC194568A96C5A899E8D2 + +I=315 +KEY=DE12DA12068FC5D06BA39F359B77C353 +IV=FFD9FECD3A4EC194568A96C5A899E8D2 +PT=3B2266FAB514211E8E33AFA566898083 +CT=DC1A545F354365A0002180BACCE0AD25 + +I=316 +KEY=02088E4D33CCA0706B821F8F57976E76 +IV=DC1A545F354365A0002180BACCE0AD25 +PT=DC20E6BD8B8AC822CF2B505E580E6A80 +CT=51CF4C11F15B8B565B875F769C2FD37F + +I=317 +KEY=53C7C25CC2972B26300540F9CBB8BD09 +IV=51CF4C11F15B8B565B875F769C2FD37F +PT=67B4C3E2AFC3402901549265186303FB +CT=A118B7E5B10DAB4DDB449877AB1E6897 + +I=318 +KEY=F2DF75B9739A806BEB41D88E60A6D59E +IV=A118B7E5B10DAB4DDB449877AB1E6897 +PT=971952EE322CD68462B4CE8B772BBA48 +CT=A2988AAC94D8A7EFB32B34CC07911F3E + +I=319 +KEY=5047FF15E7422784586AEC426737CAA0 +IV=A2988AAC94D8A7EFB32B34CC07911F3E +PT=64C2665506EDDED98EC55D2CCED7762C +CT=86AEB7B90565D05293A8D9146880C307 + +I=320 +KEY=D6E948ACE227F7D6CBC235560FB709A7 +IV=86AEB7B90565D05293A8D9146880C307 +PT=A5E7E411209DD2A34AA8CDA3153A69E4 +CT=27746442FAC1DF26B11A55251AAFD865 + +I=321 +KEY=F19D2CEE18E628F07AD860731518D1C2 +IV=27746442FAC1DF26B11A55251AAFD865 +PT=83A41EF5F664A909BC47939D7858C221 +CT=619A164C3F2119FFCA3832A5EA958E01 + +I=322 +KEY=90073AA227C7310FB0E052D6FF8D5FC3 +IV=619A164C3F2119FFCA3832A5EA958E01 +PT=1F5A31EBB2C515728DB07EE3160D03CD +CT=DEE1692D386EF5A8861BE5D8A4630906 + +I=323 +KEY=4EE6538F1FA9C4A736FBB70E5BEE56C5 +IV=DEE1692D386EF5A8861BE5D8A4630906 +PT=297B343F5EE6221FB6CC40E0C836B387 +CT=B2BA45B0A776A950C32DD5F302201FC3 + +I=324 +KEY=FC5C163FB8DF6DF7F5D662FD59CE4906 +IV=B2BA45B0A776A950C32DD5F302201FC3 +PT=CC3601DC94B13116DF3012860A522D2D +CT=6D141746B23B4E1EF20DFE6C14D6ECE4 + +I=325 +KEY=914801790AE423E907DB9C914D18A5E2 +IV=6D141746B23B4E1EF20DFE6C14D6ECE4 +PT=FE07DA9A6E8B712B1FDFC3C1CC87146D +CT=0D80E8F5557A88A271133F8929125C72 + +I=326 +KEY=9CC8E98C5F9EAB4B76C8A318640AF990 +IV=0D80E8F5557A88A271133F8929125C72 +PT=EBDC0192755A685D6275532E93D33890 +CT=B88A629A8E22A78BAF98C9E623F48134 + +I=327 +KEY=24428B16D1BC0CC0D9506AFE47FE78A4 +IV=B88A629A8E22A78BAF98C9E623F48134 +PT=78AD3067BE2E9536ADB58DA49D7CA6DA +CT=0A9C2D318240F4FA4FF91CC5D23A371F + +I=328 +KEY=2EDEA62753FCF83A96A9763B95C44FBB +IV=0A9C2D318240F4FA4FF91CC5D23A371F +PT=04C72A08CCC36B4211AFE98637C4CEFF +CT=A42618A89B9E618DDD7A983081E086B9 + +I=329 +KEY=8AF8BE8FC86299B74BD3EE0B1424C902 +IV=A42618A89B9E618DDD7A983081E086B9 +PT=22D4A346027B8E5FEE1C0C0C45CA7DCB +CT=7CC4479AE05A295723F27545E1A46B7B + +I=330 +KEY=F63CF9152838B0E068219B4EF580A279 +IV=7CC4479AE05A295723F27545E1A46B7B +PT=05090A5C8F3CD0E7F7EA11B33CDF3C1D +CT=815BCEB2A29EA2A491C8E39B117790EC + +I=331 +KEY=776737A78AA61244F9E978D5E4F73295 +IV=815BCEB2A29EA2A491C8E39B117790EC +PT=7B40F8A4AC0E4C6BD73A59FFC91CA77D +CT=E4ED412F3ECDD4B7409BEEAEDC2C755F + +I=332 +KEY=938A7688B46BC6F3B972967B38DB47CA +IV=E4ED412F3ECDD4B7409BEEAEDC2C755F +PT=047E2E4681A97ED20308F1FE4B132F7B +CT=10153209AED4115329587180D65A0B97 + +I=333 +KEY=839F44811ABFD7A0902AE7FBEE814C5D +IV=10153209AED4115329587180D65A0B97 +PT=32671E6C0D28744AB457587BBB6DD21E +CT=847F781EDF77A870C4EA99CCC1721917 + +I=334 +KEY=07E03C9FC5C87FD054C07E372FF3554A +IV=847F781EDF77A870C4EA99CCC1721917 +PT=EC3159B002B95054F00D57049D91E32B +CT=05CC06529764F6747FCB2B62569C428C + +I=335 +KEY=022C3ACD52AC89A42B0B5555796F17C6 +IV=05CC06529764F6747FCB2B62569C428C +PT=9A930743113957D10EC643D8D8034C73 +CT=D1C7957073C2A44D9483DD11F3FA2B1E + +I=336 +KEY=D3EBAFBD216E2DE9BF8888448A953CD8 +IV=D1C7957073C2A44D9483DD11F3FA2B1E +PT=2E061A5B483D0D834D3019954E54CF80 +CT=0AC3300C59DB7A76A1E16DC5BF167B70 + +I=337 +KEY=D9289FB178B5579F1E69E581358347A8 +IV=0AC3300C59DB7A76A1E16DC5BF167B70 +PT=2A6E00DF7820913341D26EF611A7BEC1 +CT=5A5A1BE396D3C56DB0690B92A925D8D8 + +I=338 +KEY=83728452EE6692F2AE00EE139CA69F70 +IV=5A5A1BE396D3C56DB0690B92A925D8D8 +PT=E871C79BA6132F15C80A85F4BC732E77 +CT=829ABA07496E1269437680257308029D + +I=339 +KEY=01E83E55A708809BED766E36EFAE9DED +IV=829ABA07496E1269437680257308029D +PT=5955643AB76251E6AF97BC2490D09A72 +CT=3FEDBF80B703D067126EF55B02A41175 + +I=340 +KEY=3E0581D5100B50FCFF189B6DED0A8C98 +IV=3FEDBF80B703D067126EF55B02A41175 +PT=32BCF86ECA6CCE8F9C1C87AD9FDF8238 +CT=B59D6C5FCA91EDBFE75E795638CAD286 + +I=341 +KEY=8B98ED8ADA9ABD431846E23BD5C05E1E +IV=B59D6C5FCA91EDBFE75E795638CAD286 +PT=01A08051FC1D98C1BDAE4CA1D41D91E6 +CT=21CB8EF8BBE6C371A26BFF92701C3D1A + +I=342 +KEY=AA536372617C7E32BA2D1DA9A5DC6304 +IV=21CB8EF8BBE6C371A26BFF92701C3D1A +PT=5F5D891DF8D595D3FEDAEF0174B0A1D1 +CT=23D0FB6489113D3D4AA6470210698391 + +I=343 +KEY=89839816E86D430FF08B5AABB5B5E095 +IV=23D0FB6489113D3D4AA6470210698391 +PT=54FEAB37EFCD36D28E943DD85E803812 +CT=45F0556ED9A8ED0E1C8B0A0BA648E069 + +I=344 +KEY=CC73CD7831C5AE01EC0050A013FD00FC +IV=45F0556ED9A8ED0E1C8B0A0BA648E069 +PT=7AF4BC398ACAD37F526BDE12F3ED59ED +CT=C41E115EE06FFE5DED10480A1BE5B720 + +I=345 +KEY=086DDC26D1AA505C011018AA0818B7DC +IV=C41E115EE06FFE5DED10480A1BE5B720 +PT=CF15E4B6DDF60A4EE0CB6CBFA8AD499B +CT=1098A41E2C97C9D70626E4D1841F5CC1 + +I=346 +KEY=18F57838FD3D998B0736FC7B8C07EB1D +IV=1098A41E2C97C9D70626E4D1841F5CC1 +PT=BAD4050A0013AB8BC556F367AB634D94 +CT=D9B58211EB935246A5E04FCD3BE10B54 + +I=347 +KEY=C140FA2916AECBCDA2D6B3B6B7E6E049 +IV=D9B58211EB935246A5E04FCD3BE10B54 +PT=CEFF0AF7EF4EA7EF3B0E8BF7FB756E77 +CT=50FAE8C770EF7F9D5FE93B090B9D5C66 + +I=348 +KEY=91BA12EE6641B450FD3F88BFBC7BBC2F +IV=50FAE8C770EF7F9D5FE93B090B9D5C66 +PT=3B8C412B4156B413AD06CB181B4C5EAA +CT=E47249D4B5F24FF415B0E669EBF471B1 + +I=349 +KEY=75C85B3AD3B3FBA4E88F6ED6578FCD9E +IV=E47249D4B5F24FF415B0E669EBF471B1 +PT=56C612C5C594CAFB7B1CE8131E786DF0 +CT=6AF057199C217EECB886D940F61B91C5 + +I=350 +KEY=1F380C234F9285485009B796A1945C5B +IV=6AF057199C217EECB886D940F61B91C5 +PT=5629EF768743AB63D5B79B511C0A6BEF +CT=A5A76C330984D34310D021A6C2BDE9BC + +I=351 +KEY=BA9F60104616560B40D996306329B5E7 +IV=A5A76C330984D34310D021A6C2BDE9BC +PT=ED8DF427A02692C09D7AAEF2EDAA1249 +CT=8AAEFBA5DE0AAA41D947E3238B279913 + +I=352 +KEY=30319BB5981CFC4A999E7513E80E2CF4 +IV=8AAEFBA5DE0AAA41D947E3238B279913 +PT=949339605F30310FC557F2CA4815B034 +CT=9408BCB67EA573E7B5359B67918C16B9 + +I=353 +KEY=A4392703E6B98FAD2CABEE7479823A4D +IV=9408BCB67EA573E7B5359B67918C16B9 +PT=03607642CBBCCA2134837AC4BB452682 +CT=90660AF3DD0EAC1B61BB60EB49408586 + +I=354 +KEY=345F2DF03BB723B64D108E9F30C2BFCB +IV=90660AF3DD0EAC1B61BB60EB49408586 +PT=DE00E32930E14BD4297F9D789D0C25A1 +CT=1C48AC020174C0D87443229C113E2838 + +I=355 +KEY=281781F23AC3E36E3953AC0321FC97F3 +IV=1C48AC020174C0D87443229C113E2838 +PT=9CA7A04855F8404176D7D30B594B65AC +CT=7ACCB3FD4F9C7A5BFB83A969EB6D211A + +I=356 +KEY=52DB320F755F9935C2D0056ACA91B6E9 +IV=7ACCB3FD4F9C7A5BFB83A969EB6D211A +PT=DC0B392E998A347ECB789A51A09F1B1D +CT=22BED79EF2CAFF83BE8CEE5D7001DE21 + +I=357 +KEY=7065E591879566B67C5CEB37BA9068C8 +IV=22BED79EF2CAFF83BE8CEE5D7001DE21 +PT=07210334590A9314031D98F7DFBB84B9 +CT=44B16879886BC331407D1E7C7F247A04 + +I=358 +KEY=34D48DE80FFEA5873C21F54BC5B412CC +IV=44B16879886BC331407D1E7C7F247A04 +PT=27DDF18405E56989E59ED442C8825DD6 +CT=2787AD57159450916A45C72D0E074D53 + +I=359 +KEY=135320BF1A6AF51656643266CBB35F9F +IV=2787AD57159450916A45C72D0E074D53 +PT=4F43202A454BB0F3A9440DA558BEE228 +CT=3C1B83C66CEEEB27644BC66ACC3117E8 + +I=360 +KEY=2F48A37976841E31322FF40C07824877 +IV=3C1B83C66CEEEB27644BC66ACC3117E8 +PT=28ED6A88BDE4ADEFDA5C0F629109A7A3 +CT=B6009481F8C5D3EE37C645CF238238A1 + +I=361 +KEY=994837F88E41CDDF05E9B1C3240070D6 +IV=B6009481F8C5D3EE37C645CF238238A1 +PT=48DC5A3700CD4A7A9B066DC0E2667544 +CT=C1A20854601D7A81CAC51E9237BDC030 + +I=362 +KEY=58EA3FACEE5CB75ECF2CAF5113BDB0E6 +IV=C1A20854601D7A81CAC51E9237BDC030 +PT=1F84C71120B50FDF715B60DB69DECBE0 +CT=663EDB4EFD3F6AC2259A43C926ACE66D + +I=363 +KEY=3ED4E4E21363DD9CEAB6EC983511568B +IV=663EDB4EFD3F6AC2259A43C926ACE66D +PT=D6F9C59367A57E1DBDC2F4627524BC9A +CT=CA84A10F987212D75B744A7966ABBABA + +I=364 +KEY=F45045ED8B11CF4BB1C2A6E153BAEC31 +IV=CA84A10F987212D75B744A7966ABBABA +PT=1D8BC84060844CE5C40C716F2190C2BB +CT=ABAEEB339C4D150E894392444E021710 + +I=365 +KEY=5FFEAEDE175CDA45388134A51DB8FB21 +IV=ABAEEB339C4D150E894392444E021710 +PT=1300843AABCFB110198F0F0102C0A4D5 +CT=DBA9A1F8EE9AB8300D0273F71EAC5D1C + +I=366 +KEY=84570F26F9C66275358347520314A63D +IV=DBA9A1F8EE9AB8300D0273F71EAC5D1C +PT=1EA11B05D7DA9D770BA9AB619267B7A3 +CT=4921F1CB4A9AA6594C205D8FF0B2DEC9 + +I=367 +KEY=CD76FEEDB35CC42C79A31ADDF3A678F4 +IV=4921F1CB4A9AA6594C205D8FF0B2DEC9 +PT=9ABA414156563E88A8CCDB3BD226F66C +CT=4CF623AC6E145E2D61CAD28BFBF1F1E5 + +I=368 +KEY=8180DD41DD489A011869C85608578911 +IV=4CF623AC6E145E2D61CAD28BFBF1F1E5 +PT=FEF20625FA0C788DB8A20298F6933F6F +CT=67C491A5CA1A065980BDECE44B7979F1 + +I=369 +KEY=E6444CE417529C5898D424B2432EF0E0 +IV=67C491A5CA1A065980BDECE44B7979F1 +PT=79C4A475D0E064D72D48AF6357A0E6A0 +CT=529766CDD1223ED05C055108F91E6526 + +I=370 +KEY=B4D32A29C670A288C4D175BABA3095C6 +IV=529766CDD1223ED05C055108F91E6526 +PT=0758AA9195AE8684B9FEEBEF8E1226AE +CT=2AEC009219ECD0499DD729352C220E7D + +I=371 +KEY=9E3F2ABBDF9C72C159065C8F96129BBB +IV=2AEC009219ECD0499DD729352C220E7D +PT=886713433798AB16E87A8AD3A8CD0C87 +CT=0DE2A7554E343B6FFC6D1ECF4A8AF0DD + +I=372 +KEY=93DD8DEE91A849AEA56B4240DC986B66 +IV=0DE2A7554E343B6FFC6D1ECF4A8AF0DD +PT=984E8BA3DFFB4E9A1244D65BEA7DC594 +CT=8111340B4AF2CD82FF15447143069276 + +I=373 +KEY=12CCB9E5DB5A842C5A7E06319F9EF910 +IV=8111340B4AF2CD82FF15447143069276 +PT=A4F6C8ACF4F1050D11E42FEF1B6C8B68 +CT=BB4693FA1399583EACB21D2675E6D156 + +I=374 +KEY=A98A2A1FC8C3DC12F6CC1B17EA782846 +IV=BB4693FA1399583EACB21D2675E6D156 +PT=C5DBE1A937D6EA2FDD9A1A2FD25217B9 +CT=BC01B078339637D796F822B7E58D968D + +I=375 +KEY=158B9A67FB55EBC5603439A00FF5BECB +IV=BC01B078339637D796F822B7E58D968D +PT=DBD0494B0FE3149F8BCB8A70D344E811 +CT=600C1EFBDCA314A6F9714DEE413B9BD2 + +I=376 +KEY=7587849C27F6FF639945744E4ECE2519 +IV=600C1EFBDCA314A6F9714DEE413B9BD2 +PT=FCA88DCB484317D7F886E7437BC9E669 +CT=2E3788A647105DD0A286E2EFFD469C99 + +I=377 +KEY=5BB00C3A60E6A2B33BC396A1B388B980 +IV=2E3788A647105DD0A286E2EFFD469C99 +PT=65AF28E41B3DA5ACE3B2CC9A25EAD28C +CT=5411E48B57058A52C8560423BCFFBCD2 + +I=378 +KEY=0FA1E8B137E328E1F39592820F770552 +IV=5411E48B57058A52C8560423BCFFBCD2 +PT=6DD82A9F1CF0A5134A76899B04BE37D5 +CT=C3F69C8ED682BF252D5119D1695126E1 + +I=379 +KEY=CC57743FE16197C4DEC48B53662623B3 +IV=C3F69C8ED682BF252D5119D1695126E1 +PT=DE729AB3803144FD958D8597396BC8ED +CT=0941B78975FD2945B4AA81E8C58E3CB2 + +I=380 +KEY=C516C3B6949CBE816A6E0ABBA3A81F01 +IV=0941B78975FD2945B4AA81E8C58E3CB2 +PT=D8404E7A17254EB40683A8919A9563B4 +CT=BF647E0346C013E138A2F0B06E7BB142 + +I=381 +KEY=7A72BDB5D25CAD6052CCFA0BCDD3AE43 +IV=BF647E0346C013E138A2F0B06E7BB142 +PT=214089EC2996CE9FA2BBFEFBCAC03509 +CT=AFDA67B9451FF758CC87BBD93C7D4BE4 + +I=382 +KEY=D5A8DA0C97435A389E4B41D2F1AEE5A7 +IV=AFDA67B9451FF758CC87BBD93C7D4BE4 +PT=9406E9D4FB4592A609BBDB23CE5F9D7F +CT=B18202E4CA510695540371A8B6523616 + +I=383 +KEY=642AD8E85D125CADCA48307A47FCD3B1 +IV=B18202E4CA510695540371A8B6523616 +PT=FEE45BE0503B4093747AFCEA9881D30D +CT=64E149A4A1840F93D675B041ED81D45A + +I=384 +KEY=00CB914CFC96533E1C3D803BAA7D07EB +IV=64E149A4A1840F93D675B041ED81D45A +PT=880368D5609350167C7826DA30DCFF59 +CT=65A363E9837DFBBDA2688E6F4FBE6C35 + +I=385 +KEY=6568F2A57FEBA883BE550E54E5C36BDE +IV=65A363E9837DFBBDA2688E6F4FBE6C35 +PT=29C5940D09A8723B441FC469C909813A +CT=2A47FDF5BF600891DF4D9E8AA34748BA + +I=386 +KEY=4F2F0F50C08BA012611890DE46842364 +IV=2A47FDF5BF600891DF4D9E8AA34748BA +PT=20AF0FF7BAC0F468C12BD2816A8B1620 +CT=68A637E4B94EC150C84A6EBB005BB79B + +I=387 +KEY=278938B479C56142A952FE6546DF94FF +IV=68A637E4B94EC150C84A6EBB005BB79B +PT=42906D013A3F0A426B01B489ECA6CAD7 +CT=A090CA02FCD40F01CA0D1A699E30C164 + +I=388 +KEY=8719F2B685116E43635FE40CD8EF559B +IV=A090CA02FCD40F01CA0D1A699E30C164 +PT=05A02D4D7D90BCA74ECE791CD865CB88 +CT=F70109F0EBBA56959B3013565E2BDFFC + +I=389 +KEY=7018FB466EAB38D6F86FF75A86C48A67 +IV=F70109F0EBBA56959B3013565E2BDFFC +PT=C373AB7B8F770212F9D5CEF40099086C +CT=67221CC1F104809B8A5D35431963812D + +I=390 +KEY=173AE7879FAFB84D7232C2199FA70B4A +IV=67221CC1F104809B8A5D35431963812D +PT=8C59B2A7FD50EC66ABACC0531BE33237 +CT=E06166175F68155DB86E268F3C5524AE + +I=391 +KEY=F75B8190C0C7AD10CA5CE496A3F22FE4 +IV=E06166175F68155DB86E268F3C5524AE +PT=D39790AED2970355A6337AAD2CA4D501 +CT=85E89883242A3B68F4AAF922646EB385 + +I=392 +KEY=72B31913E4ED96783EF61DB4C79C9C61 +IV=85E89883242A3B68F4AAF922646EB385 +PT=87D4160C7C97476D0884A22B5983AA65 +CT=038C79FDFAA0B4F4AD9DC336F46CACDF + +I=393 +KEY=713F60EE1E4D228C936BDE8233F030BE +IV=038C79FDFAA0B4F4AD9DC336F46CACDF +PT=3B59088B5ADC77E4B3FC31897C6389B5 +CT=F6C92ECB3332E5E93C9DE29F27F94BB3 + +I=394 +KEY=87F64E252D7FC765AFF63C1D14097B0D +IV=F6C92ECB3332E5E93C9DE29F27F94BB3 +PT=68BA9BEBB40B3E35D2E577A2831CF9DB +CT=7B72342488233DAD5ACF0A8D54EA9E8B + +I=395 +KEY=FC847A01A55CFAC8F539369040E3E586 +IV=7B72342488233DAD5ACF0A8D54EA9E8B +PT=7816251219B8C7F009ADD7A1898D02CF +CT=45CBA66AD6045917C3E8257D3ECBECDB + +I=396 +KEY=B94FDC6B7358A3DF36D113ED7E28095D +IV=45CBA66AD6045917C3E8257D3ECBECDB +PT=F542FEAB12E2EA9AE761E58108784E37 +CT=82E289465F5838036B9880C33AEBCB83 + +I=397 +KEY=3BAD552D2C009BDC5D49932E44C3C2DE +IV=82E289465F5838036B9880C33AEBCB83 +PT=3B8208791DAE56383CC2BCB44097C9D3 +CT=F02F2B89DE46D01F46AD95C82AF0C20E + +I=398 +KEY=CB827EA4F2464BC31BE406E66E3300D0 +IV=F02F2B89DE46D01F46AD95C82AF0C20E +PT=3F2C0F7A0AEAB04F318C661ABCFED153 +CT=8D4FAF6332578524301ACA22AD86965B + +I=399 +KEY=46CDD1C7C011CEE72BFECCC4C3B5968B +IV=8D4FAF6332578524301ACA22AD86965B +PT=A27200B51D69AAC22F1C567F8BCEABFA +CT=2F844CBF78EBA70DA7A49601388F1AB6 + +========== + +KEYSIZE=192 + +I=0 +KEY=000000000000000000000000000000000000000000000000 +IV=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=7BD966D53AD8C1BB85D2ADFAE87BB104 + +I=1 +KEY=506339DAE3B35BEB7BD966D53AD8C1BB85D2ADFAE87BB104 +IV=7BD966D53AD8C1BB85D2ADFAE87BB104 +PT=0555C410F44C7AA4506339DAE3B35BEB +CT=869C061BE9CFEAB5D285B0724A9A8970 + +I=2 +KEY=74D3414C2374367BFD4560CED3172B0E57571D88A2E13874 +IV=869C061BE9CFEAB5D285B0724A9A8970 +PT=C6FB25A188CF7F3F24B07896C0C76D90 +CT=9E58A52B3840DBE16E8063A18220FEE4 + +I=3 +KEY=DDE2DF4EEC312FA3631DC5E5EB57F0EF39D77E2920C1C690 +IV=9E58A52B3840DBE16E8063A18220FEE4 +PT=84E3D4168A8469A6A9319E02CF4519D8 +CT=730A256C202B9D57F3C0D73AD4B6CBED + +I=4 +KEY=9D973AECAF19E9951017E089CB7C6DB8CA17A913F4770D7D +IV=730A256C202B9D57F3C0D73AD4B6CBED +PT=E000CE26CD3185B44075E5A24328C636 +CT=E79EF11C5C1FD1AB75280BCFFCFE89D4 + +I=5 +KEY=7A52007B2C40C9F4F78911959763BC13BF3FA2DC088984A9 +IV=E79EF11C5C1FD1AB75280BCFFCFE89D4 +PT=19D79403BB238816E7C53A9783592061 +CT=65744444724F1052D0B8674EDC8083B5 + +I=6 +KEY=40D50426A8D09F3292FD55D1E52CAC416F87C592D409071C +IV=65744444724F1052D0B8674EDC8083B5 +PT=FDFA33685E2B5BBC3A87045D849056C6 +CT=23C6377D3D076491AD93E2B6112289C7 + +I=7 +KEY=6FD062412FE1AE4EB13B62ACD82BC8D0C2142724C52B8EDB +IV=23C6377D3D076491AD93E2B6112289C7 +PT=5056DDDEF15831502F0566678731317C +CT=F13A83088536BF30E5E9018BE57D7D89 + +I=8 +KEY=EB4DB5F469D0EE9B4001E1A45D1D77E027FD26AF2056F352 +IV=F13A83088536BF30E5E9018BE57D7D89 +PT=0EE535A4A524668F849DD7B5463140D5 +CT=3F496CB19B21C37159528BF345473E6D + +I=9 +KEY=AA6E5744B909D9A87F488D15C63CB4917EAFAD5C6511CD3F +IV=3F496CB19B21C37159528BF345473E6D +PT=3A11F90EB51C81ED4123E2B0D0D93733 +CT=CF79C1EDEE17A68DC7E673006AEC90D9 + +I=10 +KEY=64AB0C0C9471B77FB0314CF8282B121CB949DE5C0FFD5DE6 +IV=CF79C1EDEE17A68DC7E673006AEC90D9 +PT=85187E7F91280A5BCEC55B482D786ED7 +CT=92D1757BEBCE6E0406407819AF82353F + +I=11 +KEY=9E5720C1DC2E285C22E03983C3E57C18BF09A645A07F68D9 +IV=92D1757BEBCE6E0406407819AF82353F +PT=45147511BC08EC76FAFC2CCD485F9F23 +CT=8C0228F57523D746E67D27A8E6C426D9 + +I=12 +KEY=EBBB8245582E4367AEE21176B6C6AB5E597481ED46BB4E00 +IV=8C0228F57523D746E67D27A8E6C426D9 +PT=73B9EEAC644CBB8875ECA28484006B3B +CT=D0025BF1FC35DD9BDA20F42DF775AF71 + +I=13 +KEY=5F938EE9CC63C9E87EE04A874AF376C5835475C0B1CEE171 +IV=D0025BF1FC35DD9BDA20F42DF775AF71 +PT=DE2507F01BC8B212B4280CAC944D8A8F +CT=3FDDD3E04B2CBE79BB07D82182CD3787 + +I=14 +KEY=B94E2EC5F6E86EDC413D996701DFC8BC3853ADE13303D6F6 +IV=3FDDD3E04B2CBE79BB07D82182CD3787 +PT=90CE32BCC16C20F7E6DDA02C3A8BA734 +CT=F7B491E4C40B60BE8ACF16D68E3ED60F + +I=15 +KEY=DE41ABD8C44F5DF6B6890883C5D4A802B29CBB37BD3D00F9 +IV=F7B491E4C40B60BE8ACF16D68E3ED60F +PT=B7ACCA62BB9974BC670F851D32A7332A +CT=7ED4055D367CB31A4CF1CC17132E00B5 + +I=16 +KEY=E2A57C71F23BC4DEC85D0DDEF3A81B18FE6D7720AE13004C +IV=7ED4055D367CB31A4CF1CC17132E00B5 +PT=1CA59C2384797B803CE4D7A936749928 +CT=8D50A87F14D466323929BB52FA60FA42 + +I=17 +KEY=2FA1A78B8BCC301C450DA5A1E77C7D2AC744CC725473FA0E +IV=8D50A87F14D466323929BB52FA60FA42 +PT=0A623319F2A051ACCD04DBFA79F7F4C2 +CT=7C02D378606FC33DFCEF8AA2A000383E + +I=18 +KEY=A949CE493892DF58390F76D98713BE173BAB46D0F473C230 +IV=7C02D378606FC33DFCEF8AA2A000383E +PT=EE8F5FF6A7FF813386E869C2B35EEF44 +CT=CAE55B9CCBB5A68EBF0D2AB55E079FD4 + +I=19 +KEY=E159445FE4201A6CF3EA2D454CA6189984A66C65AA745DE4 +IV=CAE55B9CCBB5A68EBF0D2AB55E079FD4 +PT=9699456986535C4648108A16DCB2C534 +CT=9056685FBFECC7A6143DB5AC314DAC88 + +I=20 +KEY=EE4F7BF96BF1163E63BC451AF34ADF3F909BD9C99B39F16C +IV=9056685FBFECC7A6143DB5AC314DAC88 +PT=16D6C34C3B57AC0A0F163FA68FD10C52 +CT=4D6A5542F0680CE37E88119141F321F5 + +I=21 +KEY=27F8CEE0120E8A0F2ED610580322D3DCEE13C858DACAD099 +IV=4D6A5542F0680CE37E88119141F321F5 +PT=337839926E36EC77C9B7B51979FF9C31 +CT=78E16D6027F0D190E78825C2F52E5364 + +I=22 +KEY=0AF4D3D8EB9FF18A56377D3824D2024C099BED9A2FE483FD +IV=78E16D6027F0D190E78825C2F52E5364 +PT=8F96B66F934467C72D0C1D38F9917B85 +CT=82A81B33F80A105DD7D9CC6DDFECDB96 + +I=23 +KEY=AD2AFC821170D967D49F660BDCD81211DE4221F7F008586B +IV=82A81B33F80A105DD7D9CC6DDFECDB96 +PT=E2CB8E6E329C6660A7DE2F5AFAEF28ED +CT=0BCD68A063BA3540B3E04C885DF45BD0 + +I=24 +KEY=5B50EE72BD6CE837DF520EABBF6227516DA26D7FADFC03BB +IV=0BCD68A063BA3540B3E04C885DF45BD0 +PT=31A14C64CD8BCC8FF67A12F0AC1C3150 +CT=DB27EA5834BF572EA50E03E0773C1010 + +I=25 +KEY=BF4D8A58F54D47620475E4F38BDD707FC8AC6E9FDAC013AB +IV=DB27EA5834BF572EA50E03E0773C1010 +PT=26755B5C0BE60998E41D642A4821AF55 +CT=655A896243B5E86B2F74299A317A2E4C + +I=26 +KEY=8DC190D88B17EAB9612F6D91C8689814E7D84705EBBA3DE7 +IV=655A896243B5E86B2F74299A317A2E4C +PT=C6920ADCED82F661328C1A807E5AADDB +CT=9F45472FDBB732C745AD228810392EA2 + +I=27 +KEY=B44071C6F14CDA97FE6A2ABE13DFAAD3A275658DFB831345 +IV=9F45472FDBB732C745AD228810392EA2 +PT=2178DFA9784E563E3981E11E7A5B302E +CT=9F985FBF08235845E396BFCE54BCE7C8 + +I=28 +KEY=A3C12E42B53D829E61F275011BFCF29641E3DA43AF3FF48D +IV=9F985FBF08235845E396BFCE54BCE7C8 +PT=44977E2274DA25AE17815F8444715809 +CT=033EAF4FAC934D123012279B1663C80B + +I=29 +KEY=8FD2B79E25E39C4A62CCDA4EB76FBF8471F1FDD8B95C3C86 +IV=033EAF4FAC934D123012279B1663C80B +PT=425088D4626CD7972C1399DC90DE1ED4 +CT=A962CB4707B0048BB81F4225EFC85E48 + +I=30 +KEY=3D68793EF46B8125CBAE1109B0DFBB0FC9EEBFFD569462CE +IV=A962CB4707B0048BB81F4225EFC85E48 +PT=EF21ED587C272175B2BACEA0D1881D6F +CT=6F3A0D63A22C003F7F65B09098F667DB + +I=31 +KEY=6A4FB651BE9D0BAFA4941C6A12F3BB30B68B0F6DCE620515 +IV=6F3A0D63A22C003F7F65B09098F667DB +PT=16054E60B460B2D15727CF6F4AF68A8A +CT=8BB46230FF03665765F2E5AAEA14104F + +I=32 +KEY=3F5991D63C15A1822F207E5AEDF0DD67D379EAC72476155A +IV=8BB46230FF03665765F2E5AAEA14104F +PT=82D0B12FEA88917F551627878288AA2D +CT=8E1A664131FAB09E786E111C3C20A7BB + +I=33 +KEY=456F69D38929ED82A13A181BDC0A6DF9AB17FBDB1856B2E1 +IV=8E1A664131FAB09E786E111C3C20A7BB +PT=1384D3B7CAEB528A7A36F805B53C4C00 +CT=92D99BF1D71026D2BF78E32421E34E52 + +I=34 +KEY=658891F63379484C33E383EA0B1A4B2B146F18FF39B5FCB3 +IV=92D99BF1D71026D2BF78E32421E34E52 +PT=9F60C3117269E88920E7F825BA50A5CE +CT=7DB6782C68EC5FC75A2A75E4EA7B4071 + +I=35 +KEY=9193E2EACE8423F64E55FBC663F614EC4E456D1BD3CEBCC2 +IV=7DB6782C68EC5FC75A2A75E4EA7B4071 +PT=232ECA0370EBD920F41B731CFDFD6BBA +CT=D76A1E73E977533E6D7C74277DAFEB48 + +I=36 +KEY=F4C34FE273D0FCB5993FE5B58A8147D22339193CAE61578A +IV=D76A1E73E977533E6D7C74277DAFEB48 +PT=5BCD8C6C4D14321F6550AD08BD54DF43 +CT=4A69E9081DDD43A6061700C7DA8F5E73 + +I=37 +KEY=DC82C155896C5D5CD3560CBD975C0474252E19FB74EE09F9 +IV=4A69E9081DDD43A6061700C7DA8F5E73 +PT=C914BB961EA890D828418EB7FABCA1E9 +CT=91EE5BE28C27F055258BC3E1F37E2DEC + +I=38 +KEY=08F1655EA3656F1C42B8575F1B7BF42100A5DA1A87902415 +IV=91EE5BE28C27F055258BC3E1F37E2DEC +PT=11804F73D788115CD473A40B2A093240 +CT=86B9BE5AFD2A8A49E2651C314CAE0918 + +I=39 +KEY=59D7EFD92140A147C401E905E6517E68E2C0C62BCB3E2D0D +IV=86B9BE5AFD2A8A49E2651C314CAE0918 +PT=6E2A1E436926174E51268A878225CE5B +CT=C642F5ED78DB76738A89296B1C4A0932 + +I=40 +KEY=F6E75E7867D0FB4A02431CE89E8A081B6849EF40D774243F +IV=C642F5ED78DB76738A89296B1C4A0932 +PT=15896B8B864CF068AF30B1A146905A0D +CT=24288AE027547E499EBADE9260C8F037 + +I=41 +KEY=9A048C2BC98E15B2266B9608B9DE7652F6F331D2B7BCD408 +IV=24288AE027547E499EBADE9260C8F037 +PT=FF9A330C205DC3006CE3D253AE5EEEF8 +CT=BD9B3D670D24EDDA1EAD1DB06C8A83C7 + +I=42 +KEY=97E8C017644E9FED9BF0AB6FB4FA9B88E85E2C62DB3657CF +IV=BD9B3D670D24EDDA1EAD1DB06C8A83C7 +PT=C9A3916C34A7CCD90DEC4C3CADC08A5F +CT=1FCCBC65C44E4680E1593EE0EEFEA9A9 + +I=43 +KEY=3A2862113BD3312D843C170A70B4DD080907128235C8FE66 +IV=1FCCBC65C44E4680E1593EE0EEFEA9A9 +PT=EAF9C4A80EE93585ADC0A2065F9DAEC0 +CT=2C0004064936696B10D039D9795BABC7 + +I=44 +KEY=33FAE356C0C96F17A83C130C3982B46319D72B5B4C9355A1 +IV=2C0004064936696B10D039D9795BABC7 +PT=4181525880CA468909D28147FB1A5E3A +CT=79F193EB9A9A48464FF007D73E9B4106 + +I=45 +KEY=2136A7940C9B9FAFD1CD80E7A318FC2556272C8C720814A7 +IV=79F193EB9A9A48464FF007D73E9B4106 +PT=2899D75DFB84950E12CC44C2CC52F0B8 +CT=DA12307CE9A6BA0FCE5A76AE1747E619 + +I=46 +KEY=0C839679750274320BDFB09B4ABE462A987D5A22654FF2BE +IV=DA12307CE9A6BA0FCE5A76AE1747E619 +PT=2C71B8623CA5BF292DB531ED7999EB9D +CT=A59997FA19B58BC71CB05E7140386C94 + +I=47 +KEY=4D3CDB92797645C1AE462761530BCDED84CD045325779E2A +IV=A59997FA19B58BC71CB05E7140386C94 +PT=63F4FC202A1B921241BF4DEB0C7431F3 +CT=49E65D7422398035DD1E4EBAD37C699D + +I=48 +KEY=38082D7CC27EBABBE7A07A1571324DD859D34AE9F60BF7B7 +IV=49E65D7422398035DD1E4EBAD37C699D +PT=7F0E2FD5D4B5A0CB7534F6EEBB08FF7A +CT=64DF24483FC73174FB6482A6E2B895E0 + +I=49 +KEY=1557398CFBFF31F8837F5E5D4EF57CACA2B7C84F14B36257 +IV=64DF24483FC73174FB6482A6E2B895E0 +PT=0F525FCF2A1E3D612D5F14F039818B43 +CT=028880CC8AA1B92CB807F1102663E658 + +I=50 +KEY=229C31F1D34A529581F7DE91C454C5801AB0395F32D0840F +IV=028880CC8AA1B92CB807F1102663E658 +PT=219604B99FF2BE7B37CB087D28B5636D +CT=FAC8B66D1BA7849392CC235D0276110E + +I=51 +KEY=C75DE76D40D536277B3F68FCDFF34113887C1A0230A69501 +IV=FAC8B66D1BA7849392CC235D0276110E +PT=3319C80C038E565FE5C1D69C939F64B2 +CT=79770F286419EEFD855868EC4ADF3775 + +I=52 +KEY=5F0B08B451490B27024867D4BBEAAFEE0D2472EE7A79A274 +IV=79770F286419EEFD855868EC4ADF3775 +PT=E173A8580816CAFA9856EFD9119C3D00 +CT=FC0AA487B09DF657DB58DBF83E13E137 + +I=53 +KEY=E86E8BFBF1D65541FE42C3530B7759B9D67CA916446A4343 +IV=FC0AA487B09DF657DB58DBF83E13E137 +PT=01274C45F202C22CB765834FA09F5E66 +CT=9691EA44FC67CA29E50E7FF7DBC4D0CA + +I=54 +KEY=7849550CA6CCD87268D32917F71093903372D6E19FAE9389 +IV=9691EA44FC67CA29E50E7FF7DBC4D0CA +PT=026BD493499B7BA99027DEF7571A8D33 +CT=5206F7CF45A59FD6444CCBB6B034CF45 + +I=55 +KEY=52D81D6104DBF6DF3AD5DED8B2B50C46773E1D572F9A5CCC +IV=5206F7CF45A59FD6444CCBB6B034CF45 +PT=33CA15B3D921E7752A91486DA2172EAD +CT=F4A41D18E3EF9DE46917BADB1B5EC613 + +I=56 +KEY=36FB680165ABD632CE71C3C0515A91A21E29A78C34C49ADF +IV=F4A41D18E3EF9DE46917BADB1B5EC613 +PT=65F3084285AA869464237560617020ED +CT=6C4154D3245D2546979118A36120A911 + +I=57 +KEY=6E7548B98AA0640AA23097137507B4E489B8BF2F55E433CE +IV=6C4154D3245D2546979118A36120A911 +PT=6CF540F502D90886588E20B8EF0BB238 +CT=2A52376A7E494ADEDD53A416F73FE9C0 + +I=58 +KEY=A0D840A0E3CC1EA58862A0790B4EFE3A54EB1B39A2DBDA0E +IV=2A52376A7E494ADEDD53A416F73FE9C0 +PT=708AE2375F305572CEAD0819696C7AAF +CT=7A0EF052184147EA279839380B3DBB32 + +I=59 +KEY=153CF68E4A1C1FCEF26C502B130FB9D073732201A9E6613C +IV=7A0EF052184147EA279839380B3DBB32 +PT=A8267215107D3DD0B5E4B62EA9D0016B +CT=F193B80D57571F94A4F5373149163AA1 + +I=60 +KEY=E0B0657A66C37D8703FFE8264458A644D7861530E0F05B9D +IV=F193B80D57571F94A4F5373149163AA1 +PT=EE4B04302CB02990F58C93F42CDF6249 +CT=A28E99815C930AC05ADA4524A7E5968C + +I=61 +KEY=94760F8A93926E4DA17171A718CBAC848D5C50144715CD11 +IV=A28E99815C930AC05ADA4524A7E5968C +PT=34D122B717CBA59174C66AF0F55113CA +CT=6F9342E7915613450E823EC9A781DAA3 + +I=62 +KEY=0B352460A1579376CEE23340899DBFC183DE6EDDE09417B2 +IV=6F9342E7915613450E823EC9A781DAA3 +PT=D8689ED21F3EA8E29F432BEA32C5FD3B +CT=584BB944532A830F7F8DCDBE42E7DBFC + +I=63 +KEY=999A5CEB73DFCC1796A98A04DAB73CCEFC53A363A273CC4E +IV=584BB944532A830F7F8DCDBE42E7DBFC +PT=4E87F73D46D0C0AF92AF788BD2885F61 +CT=4AC372A4D3273C71F69D50168A9235A1 + +I=64 +KEY=42C59FFD5AA69C11DC6AF8A0099000BF0ACEF37528E1F9EF +IV=4AC372A4D3273C71F69D50168A9235A1 +PT=324DC9C2D34E95F9DB5FC31629795006 +CT=60E53CC2D5E4900D48A0C5F7EE3BC810 + +I=65 +KEY=843EBDEF0CEEBA5BBC8FC462DC7490B2426E3682C6DA31FF +IV=60E53CC2D5E4900D48A0C5F7EE3BC810 +PT=8B94F018A7115B3AC6FB22125648264A +CT=4BD7DF7DFD03A24809B751F59FACF417 + +I=66 +KEY=98E40853FA954FF5F7581B1F217732FA4BD967775976C5E8 +IV=4BD7DF7DFD03A24809B751F59FACF417 +PT=109C734AC21ED2631CDAB5BCF67BF5AE +CT=B7A3CF7E58A413C5065E9CFD23C750F9 + +I=67 +KEY=5419462C5329544A40FBD46179D3213F4D87FB8A7AB19511 +IV=B7A3CF7E58A413C5065E9CFD23C750F9 +PT=8CA507ACCDB3A793CCFD4E7FA9BC1BBF +CT=6285C3D0FD2645192C5DD046D73414CE + +I=68 +KEY=B58628819840885D227E17B184F5642661DA2BCCAD8581DF +IV=6285C3D0FD2645192C5DD046D73414CE +PT=7DE48BAD03BB9F53E19F6EADCB69DC17 +CT=583FBCEB09646CEC19D00620E5455FD5 + +I=69 +KEY=73F7F00EF22ED1B07A41AB5A8D9108CA780A2DEC48C0DE0A +IV=583FBCEB09646CEC19D00620E5455FD5 +PT=126D3F2A0BC1B168C671D88F6A6E59ED +CT=886A5273055AF7AE37EFB726DC90FD9E + +I=70 +KEY=69735F80F0B876DAF22BF92988CBFF644FE59ACA94502394 +IV=886A5273055AF7AE37EFB726DC90FD9E +PT=0B4D3F58D83D866A1A84AF8E0296A76A +CT=FD068F02BB6C2611EF78CD963EF2F78F + +I=71 +KEY=92E5FF32D46494880F2D762B33A7D975A09D575CAAA2D41B +IV=FD068F02BB6C2611EF78CD963EF2F78F +PT=705667CBCC87BF3DFB96A0B224DCE252 +CT=34713FD3FA07F0B3F94EC0FB17BB465F + +I=72 +KEY=A0DF9DCB873A1ADC3B5C49F8C9A029C659D397A7BD199244 +IV=34713FD3FA07F0B3F94EC0FB17BB465F +PT=4BF66F55275D6CB3323A62F9535E8E54 +CT=82C8A179661207B7FE178A266C607074 + +I=73 +KEY=2D1604ADAA49C3FBB994E881AFB22E71A7C41D81D179E230 +IV=82C8A179661207B7FE178A266C607074 +PT=167203BBB933707A8DC999662D73D927 +CT=DCDBCC8D11C632CB220C6E95B399A1CC + +I=74 +KEY=7D2C4B0C0D0B001A654F240CBE741CBA85C8731462E043FC +IV=DCDBCC8D11C632CB220C6E95B399A1CC +PT=668F998350BDA831503A4FA1A742C3E1 +CT=8827EBFCB24470266D5C0BA05D5974A4 + +I=75 +KEY=BE3A4CF21186C2C7ED68CFF00C306C9CE89478B43FB93758 +IV=8827EBFCB24470266D5C0BA05D5974A4 +PT=B8D1D48F3C41094EC31607FE1C8DC2DD +CT=61E59DECE1AEFFDEB9B216828953D70F + +I=76 +KEY=D0CE372842DC32508C8D521CED9E934251266E36B6EAE057 +IV=61E59DECE1AEFFDEB9B216828953D70F +PT=49A4495257D08AA56EF47BDA535AF097 +CT=ECD04FFB385CCC1D13C312A5C31810DE + +I=77 +KEY=E7274C14C4163169605D1DE7D5C25F5F42E57C9375F2F089 +IV=ECD04FFB385CCC1D13C312A5C31810DE +PT=3EED6F60FD9050A737E97B3C86CA0339 +CT=D9C90455AFBF5465F89752FB6F60BDFF + +I=78 +KEY=71E35A00CAFB898BB99419B27A7D0B3ABA722E681A924D76 +IV=D9C90455AFBF5465F89752FB6F60BDFF +PT=5CE6E7F07945191396C416140EEDB8E2 +CT=F6E795B326CFD6CCC0E230E4FE770878 + +I=79 +KEY=79DFA388989B29204F738C015CB2DDF67A901E8CE4E5450E +IV=F6E795B326CFD6CCC0E230E4FE770878 +PT=314A5784B7909F89083CF9885260A0AB +CT=6B3A00F05F79F25E4E9EDA81034A9B7B + +I=80 +KEY=75F6D5983AE6D7AC24498CF103CB2FA8340EC40DE7AFDE75 +IV=6B3A00F05F79F25E4E9EDA81034A9B7B +PT=DEC42B1A6184FDF80C297610A27DFE8C +CT=6A19BEA8826427E309BD55BCBBE246B4 + +I=81 +KEY=E47EEE65549BF1634E50325981AF084B3DB391B15C4D98C1 +IV=6A19BEA8826427E309BD55BCBBE246B4 +PT=63C46CFF49FF13B291883BFD6E7D26CF +CT=738C0B0E580C0B1ED488DDE8502CB754 + +I=82 +KEY=E6DBE45547556F403DDC3957D9A30355E93B4C590C612F95 +IV=738C0B0E580C0B1ED488DDE8502CB754 +PT=E951F5C902BD351502A50A3013CE9E23 +CT=389E33F3DAB3FAB7B2ACB853C0150B8D + +I=83 +KEY=EBA5A1BDF9FC558905420AA40310F9E25B97F40ACC742418 +IV=389E33F3DAB3FAB7B2ACB853C0150B8D +PT=54EFC45B4036B60D0D7E45E8BEA93AC9 +CT=EACAE8A4B5CCBDB28ED2162670DBD4B1 + +I=84 +KEY=B570945030615F75EF88E200B6DC4450D545E22CBCAFF0A9 +IV=EACAE8A4B5CCBDB28ED2162670DBD4B1 +PT=7F3BA6FE23AE45665ED535EDC99D0AFC +CT=535FEA61623ECD22FA1A95BF95320252 + +I=85 +KEY=F332D3DE8556F82EBCD70861D4E289722F5F7793299DF2FB +IV=535FEA61623ECD22FA1A95BF95320252 +PT=8FEB6943B22437D34642478EB537A75B +CT=CD23D928E1D3221E4D3C51670C071276 + +I=86 +KEY=1402D325D7EBA90871F4D1493531AB6C626326F4259AE08D +IV=CD23D928E1D3221E4D3C51670C071276 +PT=8B01EE4509B58B49E73000FB52BD5126 +CT=56DC7F1BE2CC26A369B3BCA71BF8FAB8 + +I=87 +KEY=389C95DC5BF411B62728AE52D7FD8DCF0BD09A533E621A35 +IV=56DC7F1BE2CC26A369B3BCA71BF8FAB8 +PT=9BFE561402B07B4C2C9E46F98C1FB8BE +CT=A059CFB443009F0ACD8E5051BD16C837 + +I=88 +KEY=89180FBFF0A12019877161E694FD12C5C65ECA028374D202 +IV=A059CFB443009F0ACD8E5051BD16C837 +PT=C8D55810C7A22E30B1849A63AB5531AF +CT=62CEB7D9A6D23B40CFD75990D1040BA4 + +I=89 +KEY=08BE01CF1E620DBEE5BFD63F322F2985098993925270D9A6 +IV=62CEB7D9A6D23B40CFD75990D1040BA4 +PT=F888764A970B03BC81A60E70EEC32DA7 +CT=F6D89003ABBF003AF013EB221AF17F99 + +I=90 +KEY=5EB9AC53FC544ADE1367463C999029BFF99A78B04881A63F +IV=F6D89003ABBF003AF013EB221AF17F99 +PT=26A25CFC1E699D8B5607AD9CE2364760 +CT=74C9E920DC16396E89774B82E7803EF5 + +I=91 +KEY=D8FAD6E8CDC96CEF67AEAF1C458610D170ED3332AF0198CA +IV=74C9E920DC16396E89774B82E7803EF5 +PT=76AFDD045A30FAA486437ABB319D2631 +CT=A5B997689B88AAC0611C2963C8C1B7CE + +I=92 +KEY=7E774E64A5F209B2C2173874DE0EBA1111F11A5167C02F04 +IV=A5B997689B88AAC0611C2963C8C1B7CE +PT=ABF525144D3415DEA68D988C683B655D +CT=7A2F39D97547C3CD336577E41C0483ED + +I=93 +KEY=0406C21AE6E015E0B83801ADAB4979DC22946DB57BC4ACE9 +IV=7A2F39D97547C3CD336577E41C0483ED +PT=E0C2466426630D1B7A718C7E43121C52 +CT=67899F7D0890E90383C05A7984604241 + +I=94 +KEY=D9249A4AFDF40BEADFB19ED0A3D990DFA15437CCFFA4EEA8 +IV=67899F7D0890E90383C05A7984604241 +PT=07E55341FCD016D7DD2258501B141E0A +CT=7B1CBCD270B09E9A1D15714D8366D174 + +I=95 +KEY=B2242464CD4D2448A4AD2202D3690E45BC4146817CC23FDC +IV=7B1CBCD270B09E9A1D15714D8366D174 +PT=25C6E62F44ABFF406B00BE2E30B92FA2 +CT=C86E27E5CA4461CE656D893A16477966 + +I=96 +KEY=602CDF824C043C836CC305E7192D6F8BD92CCFBB6A8546BA +IV=C86E27E5CA4461CE656D893A16477966 +PT=3F9D262E375F057BD208FBE6814918CB +CT=8129054CF746CB79112942AE35142E4D + +I=97 +KEY=73F82C9EE4B4D0E8EDEA00ABEE6BA4F2C8058D155F9168F7 +IV=8129054CF746CB79112942AE35142E4D +PT=7BC798EAC4C17B2D13D4F31CA8B0EC6B +CT=36F21910B1677AF19586E55E360FB8DD + +I=98 +KEY=E5FC538A60CC29A3DB1819BB5F0CDE035D83684B699ED02A +IV=36F21910B1677AF19586E55E360FB8DD +PT=D3E39037253E5BAA96047F148478F94B +CT=BA7CE80E0853D264368EE61D8E71EEBE + +I=99 +KEY=D9381EF81441B6C16164F1B5575F0C676B0D8E56E7EF3E94 +IV=BA7CE80E0853D264368EE61D8E71EEBE +PT=DE4FFDFADB81FABB3CC44D72748D9F62 +CT=971AD82D1F46F1087B37103B4BE5DD8C + +I=100 +KEY=A0BF8B4740D929C9F67E29984819FD6F103A9E6DAC0AE318 +IV=971AD82D1F46F1087B37103B4BE5DD8C +PT=FE6355B5D860522B798795BF54989F08 +CT=D17268155EE586F352BB031929441700 + +I=101 +KEY=477A0AB591FFEC5C270C418D16FC7B9C42819D74854EF418 +IV=D17268155EE586F352BB031929441700 +PT=166A50EEE05F4A39E7C581F2D126C595 +CT=2CD84FB5B587BE8B04638A9EDBA17AE2 + +I=102 +KEY=50005B4C4B11BFB20BD40E38A37BC51746E217EA5EEF8EFA +IV=2CD84FB5B587BE8B04638A9EDBA17AE2 +PT=1296DC2C1741EB2A177A51F9DAEE53EE +CT=8C2A5A31951FB2D9E8D35CD3C007B8B3 + +I=103 +KEY=E1E88DDBA5D849DF87FE5409366477CEAE314B399EE83649 +IV=8C2A5A31951FB2D9E8D35CD3C007B8B3 +PT=57C5E1A070E3C2AEB1E8D697EEC9F66D +CT=AA9E935BA264C9FD0C07072AF8499CD7 + +I=104 +KEY=D465F0FB195068CF2D60C7529400BE33A2364C1366A1AA9E +IV=AA9E935BA264C9FD0C07072AF8499CD7 +PT=77D0522670E00BD7358D7D20BC882110 +CT=A22DF6CE12C75FB99F5159A1E3E4249F + +I=105 +KEY=4DEB1B5E6398E4AD8F4D319C86C7E18A3D6715B285458E01 +IV=A22DF6CE12C75FB99F5159A1E3E4249F +PT=D6F96D22896A2574998EEBA57AC88C62 +CT=B356102A9158C569469E61093146B9F0 + +I=106 +KEY=D73E5CA946860BDD3C1B21B6179F24E37BF974BBB40337F1 +IV=B356102A9158C569469E61093146B9F0 +PT=2E72F61FC21F57A09AD547F7251EEF70 +CT=AB2BABFB88D3C3ACE4CBA81E0E250AD3 + +I=107 +KEY=6B592CE635873DE197308A4D9F4CE74F9F32DCA5BA263D22 +IV=AB2BABFB88D3C3ACE4CBA81E0E250AD3 +PT=39B02C01155705C9BC67704F7301363C +CT=8A4AC90E9095479F3C02DE7B08C01F1C + +I=108 +KEY=1026EE98CAC684081D7A43430FD9A0D0A33002DEB2E6223E +IV=8A4AC90E9095479F3C02DE7B08C01F1C +PT=14F49DBECEE88DBB7B7FC27EFF41B9E9 +CT=62E4E3C43938D014D90C4A1D8CD09639 + +I=109 +KEY=20972278E7C0FFC17F9EA08736E170C47A3C48C33E36B407 +IV=62E4E3C43938D014D90C4A1D8CD09639 +PT=56EFB0EA336A674930B1CCE02D067BC9 +CT=5E8EB865BFC1999D57A67280E37CA129 + +I=110 +KEY=2BEE1A1965A7F17C211018E28920E9592D9A3A43DD4A152E +IV=5E8EB865BFC1999D57A67280E37CA129 +PT=9CF6F073F2F0C7CB0B79386182670EBD +CT=D3B98A4562FAB47ED3D09C55E75EE51B + +I=111 +KEY=EB85E491647FD6ACF2A992A7EBDA5D27FE4AA6163A14F035 +IV=D3B98A4562FAB47ED3D09C55E75EE51B +PT=61964EF472752F21C06BFE8801D827D0 +CT=CF3D65AEEDD747416AF436A3B909828F + +I=112 +KEY=E94E6286941EC36D3D94F709060D1A6694BE90B5831D72BA +IV=CF3D65AEEDD747416AF436A3B909828F +PT=6C0B536EA1099A4202CB8617F06115C1 +CT=5DB0625B34C01C47490B5200E8A205FC + +I=113 +KEY=F5D756E568CA6BA06024955232CD0621DDB5C2B56BBF7746 +IV=5DB0625B34C01C47490B5200E8A205FC +PT=08D5CD9945D190AB1C993463FCD4A8CD +CT=771B5C66F79E262FAAC6F92F128669CB + +I=114 +KEY=462C74E6E222DE77173FC934C553200E77733B9A79391E8D +IV=771B5C66F79E262FAAC6F92F128669CB +PT=5628EC55D7AB7634B3FB22038AE8B5D7 +CT=31C436E7CA7343A93AA0B74A38CCDAC0 + +I=115 +KEY=5062F2489F4C68FE26FBFFD30F2063A74DD38CD041F5C44D +IV=31C436E7CA7343A93AA0B74A38CCDAC0 +PT=F279C45DBD75C458164E86AE7D6EB689 +CT=845320B41FD6F1D4DBB36D19D8A4A268 + +I=116 +KEY=5A27EC509FED17B6A2A8DF6710F692739660E1C999516625 +IV=845320B41FD6F1D4DBB36D19D8A4A268 +PT=7C0CB5E4FFE703260A451E1800A17F48 +CT=D8F9FB52BE1B342D6FBBB8A7FCDEFD89 + +I=117 +KEY=E925EC8E99BF11E97A512435AEEDA65EF9DB596E658F9BAC +IV=D8F9FB52BE1B342D6FBBB8A7FCDEFD89 +PT=187F3648643AF8E6B30200DE0652065F +CT=240647A32D765031C79D8893CC19EBA9 + +I=118 +KEY=5574034BCE64FADD5E576396839BF66F3E46D1FDA9967005 +IV=240647A32D765031C79D8893CC19EBA9 +PT=AF808097E0C68C8FBC51EFC557DBEB34 +CT=2A3805A7D773F9C00635779752C9CCE7 + +I=119 +KEY=D842A9983BBDAA5E746F663154E80FAF3873A66AFB5FBCE2 +IV=2A3805A7D773F9C00635779752C9CCE7 +PT=D44486CCC61C68588D36AAD3F5D95083 +CT=2219F0C7A805BEC4A4931F84CBFFC598 + +I=120 +KEY=CD622302BD70E2CD567696F6FCEDB16B9CE0B9EE30A0797A +IV=2219F0C7A805BEC4A4931F84CBFFC598 +PT=67DA1BC4F2BC2F3315208A9A86CD4893 +CT=8B1F4353CF6969888BBD6654AB65C2A8 + +I=121 +KEY=80A1D0CA7667F291DD69D5A53384D8E3175DDFBA9BC5BBD2 +IV=8B1F4353CF6969888BBD6654AB65C2A8 +PT=D114FDA8E61BEAC44DC3F3C8CB17105C +CT=B6F0C0F016A1FA033C37D1128D9B2EF3 + +I=122 +KEY=2C9B755C3B8B44416B991555252522E02B6A0EA8165E9521 +IV=B6F0C0F016A1FA033C37D1128D9B2EF3 +PT=738DBCE3EE7E70EAAC3AA5964DECB6D0 +CT=14FB0A67CB0729CA25152581D8C3FEEF + +I=123 +KEY=5D05BDFBF482E4D37F621F32EE220B2A0E7F2B29CE9D6BCE +IV=14FB0A67CB0729CA25152581D8C3FEEF +PT=D3186497981F294B719EC8A7CF09A092 +CT=14C988C52C7ED50EBD10219F1F58C213 + +I=124 +KEY=9E044D195FA8557C6BAB97F7C25CDE24B36F0AB6D1C5A9DD +IV=14C988C52C7ED50EBD10219F1F58C213 +PT=C062585284FDE540C301F0E2AB2AB1AF +CT=1FE7E153E69F95F102624ACEB9067FA1 + +I=125 +KEY=2B116B6F1FD581C6744C76A424C34BD5B10D407868C3D67C +IV=1FE7E153E69F95F102624ACEB9067FA1 +PT=F18294D40CAA674DB5152676407DD4BA +CT=AB43B2C61C9F23B96EFE293C6730A98F + +I=126 +KEY=EAF1AFBDD2CEDB9ADF0FC462385C686CDFF369440FF37FF3 +IV=AB43B2C61C9F23B96EFE293C6730A98F +PT=7D465730C5422413C1E0C4D2CD1B5A5C +CT=B1413F447CA81C678287EE2366544547 + +I=127 +KEY=4FA6C7DA7A84D4CB6E4EFB2644F4740B5D74876769A73AB4 +IV=B1413F447CA81C678287EE2366544547 +PT=C7BFA1BFA26828F7A5576867A84A0F51 +CT=7AE90F988557F3A41BBDB4B69C5FF56A + +I=128 +KEY=C9B0E3C7CEF4003014A7F4BEC1A387AF46C933D1F5F8CFDE +IV=7AE90F988557F3A41BBDB4B69C5FF56A +PT=5173C32806105AD18616241DB470D4FB +CT=F2EF675645D284F042FAEBE87AE3ECAE + +I=129 +KEY=DB855274F6CC030BE64893E88471035F0433D8398F1B2370 +IV=F2EF675645D284F042FAEBE87AE3ECAE +PT=6DF6B7F917B2F8431235B1B33838033B +CT=30D4F068BC2FDEC79CF81A4FA641A495 + +I=130 +KEY=F37DBF11472A4F87D69C6380385EDD9898CBC276295A87E5 +IV=30D4F068BC2FDEC79CF81A4FA641A495 +PT=F4C98D268B7D175728F8ED65B1E64C8C +CT=0CEB234560B935E5B08C7EA2AA4A962D + +I=131 +KEY=1A2F5A0827B2F861DA7740C558E7E87D2847BCD4831011C8 +IV=0CEB234560B935E5B08C7EA2AA4A962D +PT=9873E312B815DC81E952E5196098B7E6 +CT=7BED84EFC02836F6D165AD27DEEF2B21 + +I=132 +KEY=9C815F2A4EC42D02A19AC42A98CFDE8BF92211F35DFF3AE9 +IV=7BED84EFC02836F6D165AD27DEEF2B21 +PT=D8765DE55131DC4186AE05226976D563 +CT=C36FEDCB97DA734243A20C49D5942DD1 + +I=133 +KEY=9A12CC40F3C185AA62F529E10F15ADC9BA801DBA886B1738 +IV=C36FEDCB97DA734243A20C49D5942DD1 +PT=18B252CEB124BD110693936ABD05A8A8 +CT=94C9A6BDB97522FACEE2E869C3C48FB0 + +I=134 +KEY=F08C23DDC110ED40F63C8F5CB6608F337462F5D34BAF9888 +IV=94C9A6BDB97522FACEE2E869C3C48FB0 +PT=154FF810E3F0CE586A9EEF9D32D168EA +CT=AFC8D15F80F19F942FCA22DA0DF79937 + +I=135 +KEY=B1224FF7293C5DC559F45E03369110A75BA8D709465801BF +IV=AFC8D15F80F19F942FCA22DA0DF79937 +PT=259A6B069CA3273C41AE6C2AE82CB085 +CT=5AADC1716B2ED4FC7CA9825A32EA2FB1 + +I=136 +KEY=D29A829813CC5B4103599F725DBFC45B2701555374B22E0E +IV=5AADC1716B2ED4FC7CA9825A32EA2FB1 +PT=CB78C574D9B1B9EF63B8CD6F3AF00684 +CT=EACB8D3001640F340DFB459CD8D162BD + +I=137 +KEY=1049116DD39F7B30E99212425CDBCB6F2AFA10CFAC634CB3 +IV=EACB8D3001640F340DFB459CD8D162BD +PT=DF461D135DE19FA2C2D393F5C0532071 +CT=9115EB33739C04AAE22765621A8852C5 + +I=138 +KEY=A129CBBF89658D977887F9712F47CFC5C8DD75ADB6EB1E76 +IV=9115EB33739C04AAE22765621A8852C5 +PT=E32AF908A190B95FB160DAD25AFAF6A7 +CT=B171D8AC24C6873B54F42D5DAC51ED34 + +I=139 +KEY=EE7226D88DFA48DFC9F621DD0B8148FE9C2958F01ABAF342 +IV=B171D8AC24C6873B54F42D5DAC51ED34 +PT=0A669BB00E2123B54F5BED67049FC548 +CT=CFFC81B70593A36D022248D1CBE7FC58 + +I=140 +KEY=C907918503B2C1C0060AA06A0E12EB939E0B1021D15D0F1A +IV=CFFC81B70593A36D022248D1CBE7FC58 +PT=E9B1E6FA006D4CEE2775B75D8E48891F +CT=0B3B02FC8A8D677B8077D7FDF9EB0396 + +I=141 +KEY=E468A0560DB602C10D31A296849F8CE81E7CC7DC28B60C8C +IV=0B3B02FC8A8D677B8077D7FDF9EB0396 +PT=AA3626C69662AE442D6F31D30E04C301 +CT=2C78C31D4B2EBAEF54CB6D04C4375196 + +I=142 +KEY=EB8BCD80D3E35CCB2149618BCFB136074AB7AAD8EC815D1A +IV=2C78C31D4B2EBAEF54CB6D04C4375196 +PT=5017BD9EB52514180FE36DD6DE555E0A +CT=67D2DD54A0881186DFA6A608C036CE61 + +I=143 +KEY=7065D92686BA37E9469BBCDF6F39278195110CD02CB7937B +IV=67D2DD54A0881186DFA6A608C036CE61 +PT=6CBC1C2DAA3A7F7B9BEE14A655596B22 +CT=62163C88A40E7CFF7522A3DC32F30BCF + +I=144 +KEY=E0B4AE9D6C9A5A92248D8057CB375B7EE033AF0C1E4498B4 +IV=62163C88A40E7CFF7522A3DC32F30BCF +PT=0F6C44EE5E2587A790D177BBEA206D7B +CT=B84A631DE451F109C48785DE3D4099C2 + +I=145 +KEY=DDCDB4F73AA0C8789CC7E34A2F66AA7724B42AD223040176 +IV=B84A631DE451F109C48785DE3D4099C2 +PT=EE1EA5C5340C2F263D791A6A563A92EA +CT=D438E983DB81DA9341CE1AC45F4E7E52 + +I=146 +KEY=813604E941CBDF6448FF0AC9F4E770E4657A30167C4A7F24 +IV=D438E983DB81DA9341CE1AC45F4E7E52 +PT=08E1F94874432DBD5CFBB01E7B6B171C +CT=0E1C069CB75D4EDF4243D1E6D7175425 + +I=147 +KEY=D64EB9DE5A3B546B46E30C5543BA3E3B2739E1F0AB5D2B01 +IV=0E1C069CB75D4EDF4243D1E6D7175425 +PT=CFCDC1C0EFE678FB5778BD371BF08B0F +CT=CBC0ED542E26A1943926EF7897A79E97 + +I=148 +KEY=D1659785D1D551948D23E1016D9C9FAF1E1F0E883CFAB596 +IV=CBC0ED542E26A1943926EF7897A79E97 +PT=1FEA178A348CAE8B072B2E5B8BEE05FF +CT=C743A7B60EB7C24867DA82AFF15ED18A + +I=149 +KEY=05786C3E1FBE51864A6046B7632B5DE779C58C27CDA4641C +IV=C743A7B60EB7C24867DA82AFF15ED18A +PT=3A4EF6696CD26875D41DFBBBCE6B0012 +CT=EA23014227CF7B563AEFF86DB947FAC4 + +I=150 +KEY=CE1E5D5BF32BF0CAA04347F544E426B1432A744A74E39ED8 +IV=EA23014227CF7B563AEFF86DB947FAC4 +PT=DFDF9B4032986E90CB663165EC95A14C +CT=EAF762B60A106C03B76742E69CEE385A + +I=151 +KEY=F8EAC01B3F7E925A4AB425434EF44AB2F44D36ACE80DA682 +IV=EAF762B60A106C03B76742E69CEE385A +PT=2BDC6EAB1D86311D36F49D40CC556290 +CT=E6CC0491C3509240ED848AE304CC3385 + +I=152 +KEY=BF5AE8B244244B4BAC7821D28DA4D8F219C9BC4FECC19507 +IV=E6CC0491C3509240ED848AE304CC3385 +PT=81D4E28E02717AB347B028A97B5AD911 +CT=11EE9D22AC798AB5FEF6C6188845F425 + +I=153 +KEY=5C6538235111334FBD96BCF021DD5247E73F7A5764846122 +IV=11EE9D22AC798AB5FEF6C6188845F425 +PT=DDE402413BB09DFBE33FD09115357804 +CT=3F054911089500FD2CD0645DBFE2A8D3 + +I=154 +KEY=FAC914FA6B6CA1AB8293F5E1294852BACBEF1E0ADB66C9F1 +IV=3F054911089500FD2CD0645DBFE2A8D3 +PT=345343E023AC39FFA6AC2CD93A7D92E4 +CT=7538E78DE8FC09D203010C61422E6B5A + +I=155 +KEY=1E62F54271EA4374F7AB126CC1B45B68C8EE126B9948A2AB +IV=7538E78DE8FC09D203010C61422E6B5A +PT=0EC4357C476EB76AE4ABE1B81A86E2DF +CT=3A4D0093A2B7FF807BAA6A815538507E + +I=156 +KEY=5AD3B884BE5653BBCDE612FF6303A4E8B34478EACC70F2D5 +IV=3A4D0093A2B7FF807BAA6A815538507E +PT=F59FD86893B7DF7244B14DC6CFBC10CF +CT=2C2FD7DF94FDDC2CA1C05EF5878583FF + +I=157 +KEY=B9039E1678902ECCE1C9C520F7FE78C41284261F4BF5712A +IV=2C2FD7DF94FDDC2CA1C05EF5878583FF +PT=4600E6CCD65B575AE3D02692C6C67D77 +CT=59C9FA2E4A2227C3E5B831899A3CCBFD + +I=158 +KEY=394A8245256D72B8B8003F0EBDDC5F07F73C1796D1C9BAD7 +IV=59C9FA2E4A2227C3E5B831899A3CCBFD +PT=3030D8E24F7BEA0580491C535DFD5C74 +CT=DEAFC4A07A3FB5D5AA09FF6A2515AB4A + +I=159 +KEY=2496931DFCFF2E7166AFFBAEC7E3EAD25D35E8FCF4DC119D +IV=DEAFC4A07A3FB5D5AA09FF6A2515AB4A +PT=63CD1CC241B267791DDC1158D9925CC9 +CT=B1B0AED275FCE241B5726E943B37C130 + +I=160 +KEY=53CBA419E5CED1C8D71F557CB21F0893E8478668CFEBD0AD +IV=B1B0AED275FCE241B5726E943B37C130 +PT=85F4E06A05C8704A775D37041931FFB9 +CT=B0DFD3EF3AF538791E69AF59CAA7B8CC + +I=161 +KEY=DFB0E5440EB582F667C0869388EA30EAF62E2931054C6861 +IV=B0DFD3EF3AF538791E69AF59CAA7B8CC +PT=B7BDA6C504797C8B8C7B415DEB7B533E +CT=220F810B0D5A9ED8794932D0BF6150D6 + +I=162 +KEY=B26A70894070BC9B45CF079885B0AE328F671BE1BA2D38B7 +IV=220F810B0D5A9ED8794932D0BF6150D6 +PT=0113567BFAC19EB86DDA95CD4EC53E6D +CT=56C77682CA1A041B312061F3FB9A1A59 + +I=163 +KEY=36EDA74B7133D5871308711A4FAAAA29BE477A1241B722EE +IV=56C77682CA1A041B312061F3FB9A1A59 +PT=4D39AD87258968FA8487D7C23143691C +CT=4F18208E63B2D84CC7A0707617DD7B63 + +I=164 +KEY=F7589312CE997AFE5C1051942C18726579E70A64566A598D +IV=4F18208E63B2D84CC7A0707617DD7B63 +PT=1B82F5C849E0F965C1B53459BFAAAF79 +CT=85CE0310DEFB36474B38C4347D7EEE8B + +I=165 +KEY=F770FC7B1E183E31D9DE5284F2E3442232DFCE502B14B706 +IV=85CE0310DEFB36474B38C4347D7EEE8B +PT=7B56EBC47E780FB000286F69D08144CF +CT=CB5AE674DB1426618F577BBD63309EA4 + +I=166 +KEY=79AD3040CCC9FD521284B4F029F76243BD88B5ED482429A2 +IV=CB5AE674DB1426618F577BBD63309EA4 +PT=47A5B213BC3DF61B8EDDCC3BD2D1C363 +CT=1E26AB2D8B156913995FCAC1ABD99D68 + +I=167 +KEY=10BB9597F823B61F0CA21FDDA2E20B5024D77F2CE3FDB4CA +IV=1E26AB2D8B156913995FCAC1ABD99D68 +PT=D31FC11C9FD6E7F86916A5D734EA4B4D +CT=84E0E24F155E5EFCA9AE9C5F2F26BD25 + +I=168 +KEY=E1264A2AD33800FF8842FD92B7BC55AC8D79E373CCDB09EF +IV=84E0E24F155E5EFCA9AE9C5F2F26BD25 +PT=F77FE11AE4BEB403F19DDFBD2B1BB6E0 +CT=B41973B0D807A43A822EB57555B818D4 + +I=169 +KEY=A19ABDD25ED272693C5B8E226FBBF1960F5756069963113B +IV=B41973B0D807A43A822EB57555B818D4 +PT=FECAAA8EA9C1883640BCF7F88DEA7296 +CT=949634E68FB9086AE623EAF5E867D4A5 + +I=170 +KEY=DD904ECCC94F64D0A8CDBAC4E002F9FCE974BCF37104C59E +IV=949634E68FB9086AE623EAF5E867D4A5 +PT=E8A413C2ADB97D387C0AF31E979D16B9 +CT=96BE2B618F8A961E5DC892F429A8B6FC + +I=171 +KEY=1B83C20396D7D0D33E7391A56F886FE2B4BC2E0758AC7362 +IV=96BE2B618F8A961E5DC892F429A8B6FC +PT=1408434BF0C3432BC6138CCF5F98B403 +CT=C0A9596F56E48F459D2C405F47DCA44C + +I=172 +KEY=B04C71DBEA60DB15FEDAC8CA396CE0A729906E581F70D72E +IV=C0A9596F56E48F459D2C405F47DCA44C +PT=5E7F070C7EE8A852ABCFB3D87CB70BC6 +CT=A4739C93911C72C959E89544500843BD + +I=173 +KEY=9BFC8026BC1D965B5AA95459A870926E7078FB1C4F789493 +IV=A4739C93911C72C959E89544500843BD +PT=718C23D1F537A6E72BB0F1FD567D4D4E +CT=4D581200B1E446CC3AD306138BF2898B + +I=174 +KEY=FEA9DF8F4FECB3ED17F146591994D4A24AABFD0FC48A1D18 +IV=4D581200B1E446CC3AD306138BF2898B +PT=E4DD231D871795E065555FA9F3F125B6 +CT=E53EFC19D8048073167B1473C5EBA6D9 + +I=175 +KEY=62DF036D6F96D937F2CFBA40C19054D15CD0E97C0161BBC1 +IV=E53EFC19D8048073167B1473C5EBA6D9 +PT=9AB809114F10C3FD9C76DCE2207A6ADA +CT=BDB0C3D9732DE5813C4C72CF01FF5194 + +I=176 +KEY=CFEF04F0343587004F7F7999B2BDB150609C9BB3009EEA55 +IV=BDB0C3D9732DE5813C4C72CF01FF5194 +PT=B4CFE094F8B4EEE5AD30079D5BA35E37 +CT=D00B5B980D8B10DF3D7D4C0BE5975C1C + +I=177 +KEY=CBF2C475C11FA6B89F742201BF36A18F5DE1D7B8E509B649 +IV=D00B5B980D8B10DF3D7D4C0BE5975C1C +PT=34B39728291953DC041DC085F52A21B8 +CT=ADF5CDFDCC23AD8AD111454B2DB69013 + +I=178 +KEY=C96820A08056F7C23281EFFC73150C058CF092F3C8BF265A +IV=ADF5CDFDCC23AD8AD111454B2DB69013 +PT=4C8152CCAA0A23AC029AE4D54149517A +CT=F070979F68BAEBBD6CE8CE8A549C0E12 + +I=179 +KEY=61A6BBDB58B4C9D4C2F178631BAFE7B8E0185C799C232848 +IV=F070979F68BAEBBD6CE8CE8A549C0E12 +PT=0B6AF20EF8550A1BA8CE9B7BD8E23E16 +CT=8A75D276384A4F468B459466A304D418 + +I=180 +KEY=D3EC560DE8B1BBEE4884AA1523E5A8FE6B5DC81F3F27FC50 +IV=8A75D276384A4F468B459466A304D418 +PT=259A18BABFD09145B24AEDD6B005723A +CT=B7C04F66EB771CBD97F948098E23C655 + +I=181 +KEY=16FE806749FDDF8CFF44E573C892B443FCA48016B1043A05 +IV=B7C04F66EB771CBD97F948098E23C655 +PT=E00B5E4B3D9E64D0C512D66AA14C6462 +CT=29FB08289BD19BCC0FEB0F433D5CACEE + +I=182 +KEY=9CC345922C8912D5D6BFED5B53432F8FF34F8F558C5896EB +IV=29FB08289BD19BCC0FEB0F433D5CACEE +PT=07BAA266554EAE0C8A3DC5F56574CD59 +CT=495C245E2F3CC52499B9C1AD7C4484BA + +I=183 +KEY=7DDDCF7DE759FDEC9FE3C9057C7FEAAB6AF64EF8F01C1251 +IV=495C245E2F3CC52499B9C1AD7C4484BA +PT=2E5360D5563EB7D4E11E8AEFCBD0EF39 +CT=68267051421D3AFA19A2E43D501B940B + +I=184 +KEY=4BA2EAD4106DD4B7F7C5B9543E62D0517354AAC5A007865A +IV=68267051421D3AFA19A2E43D501B940B +PT=050EBC6942F92D95367F25A9F734295B +CT=1781558A2A8B7C29AC82D6610B67E3CF + +I=185 +KEY=CFCCD4ECD20E051CE044ECDE14E9AC78DFD67CA4AB606595 +IV=1781558A2A8B7C29AC82D6610B67E3CF +PT=1AC90B21EB197E26846E3E38C263D1AB +CT=BF5FE87A2E882A64493850EC3A0E93A5 + +I=186 +KEY=C9EA5F992C77DD9C5F1B04A43A61861C96EE2C48916EF630 +IV=BF5FE87A2E882A64493850EC3A0E93A5 +PT=58F997704D085DC506268B75FE79D880 +CT=8F43A961964E3452094E8E71295177CD + +I=187 +KEY=1136648F9E0A53C3D058ADC5AC2FB24E9FA0A239B83F81FD +IV=8F43A961964E3452094E8E71295177CD +PT=086041AB29E423EFD8DC3B16B27D8E5F +CT=BF69230BAB6200B7828DC04A13B88E83 + +I=188 +KEY=47040E2D6DFBE3006F318ECE074DB2F91D2D6273AB870F7E +IV=BF69230BAB6200B7828DC04A13B88E83 +PT=57865A8650D3202056326AA2F3F1B0C3 +CT=A012FAEE65E2C4F0AC22CB63AB75E35D + +I=189 +KEY=868F8310E79C0473CF23742062AF7609B10FA91000F2EC23 +IV=A012FAEE65E2C4F0AC22CB63AB75E35D +PT=F3ABB47DAE94B82EC18B8D3D8A67E773 +CT=F35BBD3C516F86384DA3BB6B5CCC8B37 + +I=190 +KEY=5C71ADCE480714DA3C78C91C33C0F031FCAC127B5C3E6714 +IV=F35BBD3C516F86384DA3BB6B5CCC8B37 +PT=CDB3E57FA6DDFF9FDAFE2EDEAF9B10A9 +CT=627A15E65B37C2B9575E8A781271AE64 + +I=191 +KEY=B603092BC5FD004F5E02DCFA68F73288ABF298034E4FC970 +IV=627A15E65B37C2B9575E8A781271AE64 +PT=7E04F9A0F723DF00EA72A4E58DFA1495 +CT=15427D27E783A5476345C83F3E8A3319 + +I=192 +KEY=4DB5A9F825C5E8C24B40A1DD8F7497CFC8B7503C70C5FA69 +IV=15427D27E783A5476345C83F3E8A3319 +PT=842B94BE25E8747BFBB6A0D3E038E88D +CT=35812AFD1A90B0B7D52B45EAD9CAF083 + +I=193 +KEY=D4F2CCC0734F9ACD7EC18B2095E427781D9C15D6A90F0AEA +IV=35812AFD1A90B0B7D52B45EAD9CAF083 +PT=3FAB7D4C741B8CD499476538568A720F +CT=C1A59CD3D9E6650F0D16947D26BFC20D + +I=194 +KEY=CB28A8313E133469BF6417F34C024277108A81AB8FB0C8E7 +IV=C1A59CD3D9E6650F0D16947D26BFC20D +PT=37AC888DCE5CDFD31FDA64F14D5CAEA4 +CT=CB0313E9A046711866CA65702A45CDB6 + +I=195 +KEY=C5BFEB8246ABAF467467041AEC44336F7640E4DBA5F50551 +IV=CB0313E9A046711866CA65702A45CDB6 +PT=326C9E3EB49138ED0E9743B378B89B2F +CT=ACE8FC6C6ABBC8124FE35C7976585DF6 + +I=196 +KEY=110891F8FDF0F254D88FF87686FFFB7D39A3B8A2D3AD58A7 +IV=ACE8FC6C6ABBC8124FE35C7976585DF6 +PT=964239EB84C57F61D4B77A7ABB5B5D12 +CT=0762EF13B80A8B77D04AF797B67D5AA6 + +I=197 +KEY=EFF558976586AC91DFED17653EF5700AE9E94F3565D00201 +IV=0762EF13B80A8B77D04AF797B67D5AA6 +PT=5ECA17ADFE3C2C21FEFDC96F98765EC5 +CT=B60CC9CD9DE93E2A6FB0B59369B1628E + +I=198 +KEY=4494A36EABE3555E69E1DEA8A31C4E208659FAA60C61608F +IV=B60CC9CD9DE93E2A6FB0B59369B1628E +PT=7A659E803888296BAB61FBF9CE65F9CF +CT=73258A43C7DA66FFE4DC9384FC7A60C1 + +I=199 +KEY=1780249B48B8F7561AC454EB64C628DF62856922F01B004E +IV=73258A43C7DA66FFE4DC9384FC7A60C1 +PT=8D9C3DCF612320B4531487F5E35BA208 +CT=F0F5D51C06F2D900CC4BE8D3512CA4B6 + +I=200 +KEY=9FF03D1E23BD9959EA3181F76234F1DFAECE81F1A137A4F8 +IV=F0F5D51C06F2D900CC4BE8D3512CA4B6 +PT=F002AEC878B80A0B887019856B056E0F +CT=E1321C52A51D9345296A0EF2A9DC9CC5 + +I=201 +KEY=6042967162EDA50B0B039DA5C729629A87A48F0308EB383D +IV=E1321C52A51D9345296A0EF2A9DC9CC5 +PT=C5EA4A519D9BAF8FFFB2AB6F41503C52 +CT=ED79D8FC9C60B583E29D0A65A6A5F321 + +I=202 +KEY=250C416206B9D0A9E67A45595B49D71965398566AE4ECB1C +IV=ED79D8FC9C60B583E29D0A65A6A5F321 +PT=34D771B44B3943DE454ED713645475A2 +CT=7A08F9096109535C262407EB323EF7BC + +I=203 +KEY=6357BC1B7B12F1C09C72BC503A408445431D828D9C703CA0 +IV=7A08F9096109535C262407EB323EF7BC +PT=60A1EEAE2B16841A465BFD797DAB2169 +CT=24C7F1A39F8B2F03C256F5C59B69C31A + +I=204 +KEY=18BF29D147A9675BB8B54DF3A5CBAB46814B77480719FFBA +IV=24C7F1A39F8B2F03C256F5C59B69C31A +PT=BFD7B314F959298B7BE895CA3CBB969B +CT=7DDA5DF3CC7C69AA490FB597888396B2 + +I=205 +KEY=E8B13C48FBABCD19C56F100069B7C2ECC844C2DF8F9A6908 +IV=7DDA5DF3CC7C69AA490FB597888396B2 +PT=23F8A60BD2354901F00E1599BC02AA42 +CT=04CEB4BE252293A822C77B9C4C27822B + +I=206 +KEY=BF275C4D9FC54BC0C1A1A4BE4C955144EA83B943C3BDEB23 +IV=04CEB4BE252293A822C77B9C4C27822B +PT=2182C0577EAA3C2A57966005646E86D9 +CT=0F24034642E351984620BB2647F5D649 + +I=207 +KEY=40B459144A6415C2CE85A7F80E7600DCACA3026584483D6A +IV=0F24034642E351984620BB2647F5D649 +PT=F59318D1D3D9A9E0FF930559D5A15E02 +CT=DB98808C46668D79AB059C5554CEEB1A + +I=208 +KEY=D5A01AB42D709E6A151D277448108DA507A69E30D086D670 +IV=DB98808C46668D79AB059C5554CEEB1A +PT=49CF142E621D1A8D951443A067148BA8 +CT=15C32FE5E9BCA5F8D09EA2E4D145FE3D + +I=209 +KEY=8191AB3C11B4B72700DE0891A1AC285DD7383CD401C3284D +IV=15C32FE5E9BCA5F8D09EA2E4D145FE3D +PT=5C1E9B721987B8BF5431B1883CC4294D +CT=AA7CA217D0514CA4F20C50293121E8D8 + +I=210 +KEY=69D24875B8A5B5D1AAA2AA8671FD64F925346CFD30E2C095 +IV=AA7CA217D0514CA4F20C50293121E8D8 +PT=8239553D8FB88E17E843E349A91102F6 +CT=C4068B901CB07904F843BF6F3CDC4FF8 + +I=211 +KEY=12BAE3B5B2C03E746EA421166D4D1DFDDD77D3920C3E8F6D +IV=C4068B901CB07904F843BF6F3CDC4FF8 +PT=80D797C671D3BFF67B68ABC00A658BA5 +CT=9F835417C4D622DB52651897DC23E1C3 + +I=212 +KEY=1A0CFD7FA1284652F1277501A99B3F268F12CB05D01D6EAE +IV=9F835417C4D622DB52651897DC23E1C3 +PT=C36513D78FBBFDCC08B61ECA13E87826 +CT=0156C998E85BE92F0EF998442204EB19 + +I=213 +KEY=7829D1FE113103B0F071BC9941C0D60981EB5341F21985B7 +IV=0156C998E85BE92F0EF998442204EB19 +PT=000894F1AF39A67562252C81B01945E2 +CT=6A554057C0A3EB723B693258BC5E899D + +I=214 +KEY=D719D37FC9087D2F9A24FCCE81633D7BBA8261194E470C2A +IV=6A554057C0A3EB723B693258BC5E899D +PT=B92413276BF142D0AF300281D8397E9F +CT=395F80E405813D97576954A23C77C2CA + +I=215 +KEY=39E173517A321A5AA37B7C2A84E200ECEDEB35BB7230CEE0 +IV=395F80E405813D97576954A23C77C2CA +PT=AA95F2BD255DBE23EEF8A02EB33A6775 +CT=1B1BC5D3DABD536E91177EF1BF2B7E39 + +I=216 +KEY=EE1FB67D907C597BB860B9F95E5F53827CFC4B4ACD1BB0D9 +IV=1B1BC5D3DABD536E91177EF1BF2B7E39 +PT=985E81E0BF5FF6EFD7FEC52CEA4E4321 +CT=20F42326749CC7CCD54188DEA46F4EC1 + +I=217 +KEY=41D333EC5E537B8098949ADF2AC3944EA9BDC3946974FE18 +IV=20F42326749CC7CCD54188DEA46F4EC1 +PT=901FD7D22F220608AFCC8591CE2F22FB +CT=AFFC6F2668097B58A0CFF619A3FDD1CB + +I=218 +KEY=F6E392EF75572C6A3768F5F942CAEF160972358DCA892FD3 +IV=AFFC6F2668097B58A0CFF619A3FDD1CB +PT=45AEB51360C50AB1B730A1032B0457EA +CT=1B75CF440CE8521069599B7889F21C1D + +I=219 +KEY=47C82CF46472D3732C1D3ABD4E22BD06602BAEF5437B33CE +IV=1B75CF440CE8521069599B7889F21C1D +PT=7E931056CC33D22CB12BBE1B1125FF19 +CT=F6079ADBAA8D28F371F0156B170FB7BD + +I=220 +KEY=DDA62A9922B04902DA1AA066E4AF95F511DBBB9E54748473 +IV=F6079ADBAA8D28F371F0156B170FB7BD +PT=2BE3DA337C9187109A6E066D46C29A71 +CT=7D2FC16B26971DDC20C6F7510C47B352 + +I=221 +KEY=570C8CA5236A2E65A735610DC2388829311D4CCF58333721 +IV=7D2FC16B26971DDC20C6F7510C47B352 +PT=43596064590570F88AAAA63C01DA6767 +CT=5FBA845FB25FE6AE015E4E8A228ED645 + +I=222 +KEY=6CEA158ED663A4B7F88FE55270676E87304302457ABDE164 +IV=5FBA845FB25FE6AE015E4E8A228ED645 +PT=1E265F0AA9A20C603BE6992BF5098AD2 +CT=A729E250D736A43966DD0D9C461ECEC0 + +I=223 +KEY=AACCE3387C0DF35D5FA60702A751CABE569E0FD93CA32FA4 +IV=A729E250D736A43966DD0D9C461ECEC0 +PT=B08AAE113CCE6226C626F6B6AA6E57EA +CT=A8192E964A74A6ABDB463ECFA483A1E3 + +I=224 +KEY=207F19ABDA13F728F7BF2994ED256C158DD8311698208E47 +IV=A8192E964A74A6ABDB463ECFA483A1E3 +PT=858CF92E6B1793448AB3FA93A61E0475 +CT=060C7CCCD58E6348518161C7878AA71B + +I=225 +KEY=AB05AD81CF07091AF1B3555838AB0F5DDC5950D11FAA295C +IV=060C7CCCD58E6348518161C7878AA71B +PT=424D175035503C728B7AB42A1514FE32 +CT=8ECAA12830B0C5B4C6950E69AFD31B66 + +I=226 +KEY=3A8E1CC01464AF9B7F79F470081BCAE91ACC5EB8B079323A +IV=8ECAA12830B0C5B4C6950E69AFD31B66 +PT=6E5A94391F1FE5A9918BB141DB63A681 +CT=65C3A891192324A7FA3C882B2C09CB8D + +I=227 +KEY=8004AB13CF38B3ED1ABA5CE11138EE4EE0F0D6939C70F9B7 +IV=65C3A891192324A7FA3C882B2C09CB8D +PT=584E219335CA4642BA8AB7D3DB5C1C76 +CT=F29F8735A403414621F2100AF38A500C + +I=228 +KEY=D37BB962CFC53E77E825DBD4B53BAF08C102C6996FFAA9BB +IV=F29F8735A403414621F2100AF38A500C +PT=CCB996C23C627D4D537F127100FD8D9A +CT=9C6A7655E25E9231E46C0D3B57C7FCAB + +I=229 +KEY=C23B3C983C79179A744FAD8157653D39256ECBA2383D5510 +IV=9C6A7655E25E9231E46C0D3B57C7FCAB +PT=5D727E12D3932F56114085FAF3BC29ED +CT=6C5AA7364755AF599AB6F86EC8B24C52 + +I=230 +KEY=4462CD1DD817170C18150AB710309260BFD833CCF08F1942 +IV=6C5AA7364755AF599AB6F86EC8B24C52 +PT=D7A99C8F3BC37AD08659F185E46E0096 +CT=821D7EAC8FD041C0C8CF1011661FBB9E + +I=231 +KEY=1BA52BEF2B010D169A08741B9FE0D3A0771723DD9690A2DC +IV=821D7EAC8FD041C0C8CF1011661FBB9E +PT=704F3525510FCC745FC7E6F2F3161A1A +CT=44591D71D64FC38010E402874853E9BC + +I=232 +KEY=C6A6818229CC65E6DE51696A49AF102067F3215ADEC34B60 +IV=44591D71D64FC38010E402874853E9BC +PT=5D5769AE155C9F43DD03AA6D02CD68F0 +CT=E5647FF6C843543E484FC13B58A345B9 + +I=233 +KEY=41F27DD5905B299C3B35169C81EC441E2FBCE06186600ED9 +IV=E5647FF6C843543E484FC13B58A345B9 +PT=ADF29030DFDFCCEE8754FC57B9974C7A +CT=E6EA42E2F046D3ED75081A50770563D1 + +I=234 +KEY=3A8018855EDC80D2DDDF547E71AA97F35AB4FA31F1656D08 +IV=E6EA42E2F046D3ED75081A50770563D1 +PT=096F74717D5583477B726550CE87A94E +CT=D75682FE37396887659E87895F1C6441 + +I=235 +KEY=6C94C2634142DA310A89D6804693FF743F2A7DB8AE790949 +IV=D75682FE37396887659E87895F1C6441 +PT=F1B527DD4935FBDE5614DAE61F9E5AE3 +CT=15755CFE84E113AA751E4D5BB098ABC7 + +I=236 +KEY=4BA407D7C6426C641FFC8A7EC272ECDE4A3430E31EE1A28E +IV=15755CFE84E113AA751E4D5BB098ABC7 +PT=7C4433DCC314DBD72730C5B48700B655 +CT=B048F209CE1B1FAEC33392D2D8F326A1 + +I=237 +KEY=A56FD7BCEEA55474AFB478770C69F3708907A231C612842F +IV=B048F209CE1B1FAEC33392D2D8F326A1 +PT=D40C7CD8D80C8C6CEECBD06B28E73810 +CT=8E1F4830F94004C286C39D0EC014A963 + +I=238 +KEY=0730B7B664CFD1E321AB3047F529F7B20FC43F3F06062D4C +IV=8E1F4830F94004C286C39D0EC014A963 +PT=B16772FE8C8A573FA25F600A8A6A8597 +CT=3FB92771D2BE2D33C40AB0409998B229 + +I=239 +KEY=0A08E43B13C57EB41E1217362797DA81CBCE8F7F9F9E9F65 +IV=3FB92771D2BE2D33C40AB0409998B229 +PT=D4883476825EA2D30D38538D770AAF57 +CT=190106DE79836016C57A16BBBA6893D2 + +I=240 +KEY=195B7E1B67872B0D071311E85E14BA970EB499C425F60CB7 +IV=190106DE79836016C57A16BBBA6893D2 +PT=3B8F4F140FDFFB6B13539A20744255B9 +CT=C06398537B4F534203D57184543E6516 + +I=241 +KEY=BE0C4A8A9B581D16C77089BB255BE9D50D61E84071C869A1 +IV=C06398537B4F534203D57184543E6516 +PT=E50D127AE258061DA7573491FCDF361B +CT=FF615CCC9F2D3DBB3074C835ECE4224E + +I=242 +KEY=662A224DAB1233C83811D577BA76D46E3D1520759D2C4BEF +IV=FF615CCC9F2D3DBB3074C835ECE4224E +PT=347C976D20470968D82668C7304A2EDE +CT=B5FB1BCCBC838B87FDB10FEFE6CDC45B + +I=243 +KEY=F4F3B47D9CC8BA798DEACEBB06F55FE9C0A42F9A7BE18FB4 +IV=B5FB1BCCBC838B87FDB10FEFE6CDC45B +PT=BC276D1002C5DD8292D9963037DA89B1 +CT=151F88A44A76568FAC756011B827778D + +I=244 +KEY=7EA3C03193B737DE98F5461F4C8309666CD14F8BC3C6F839 +IV=151F88A44A76568FAC756011B827778D +PT=BCD9054596EE644E8A50744C0F7F8DA7 +CT=C1B0B6FDD717881442496794A2C890F2 + +I=245 +KEY=C4D94D5C4169EE4B5945F0E29B9481722E98281F610E68CB +IV=C1B0B6FDD717881442496794A2C890F2 +PT=3D7F68D3014F3BEDBA7A8D6DD2DED995 +CT=181100A04881DCF9813E4A22C6C1BB3B + +I=246 +KEY=A9A9483D9FC46DD34154F042D3155D8BAFA6623DA7CFD3F0 +IV=181100A04881DCF9813E4A22C6C1BB3B +PT=0FE2E2A97DFFB4966D700561DEAD8398 +CT=AA4BEC4007C38C7B86B6F9EED33E5EB1 + +I=247 +KEY=5F08A3C09F4AE90BEB1F1C02D4D6D1F029109BD374F18D41 +IV=AA4BEC4007C38C7B86B6F9EED33E5EB1 +PT=C2392264CE43C57AF6A1EBFD008E84D8 +CT=A0756CCDA72462CD89DF9990C0FE6676 + +I=248 +KEY=6A1A4F2D25DFC9F94B6A70CF73F2B33DA0CF0243B40FEB37 +IV=A0756CCDA72462CD89DF9990C0FE6676 +PT=A6650A3432CCA74A3512ECEDBA9520F2 +CT=F5044AECC6F35C99FCDBA26DD15E1474 + +I=249 +KEY=B475174A46D0CDC2BE6E3A23B501EFA45C14A02E6551FF43 +IV=F5044AECC6F35C99FCDBA26DD15E1474 +PT=07967DE17DEB720CDE6F5867630F043B +CT=60645B559E7321D7FA8A3F925CFC0FA4 + +I=250 +KEY=8DBB9D8A4A2E7E61DE0A61762B72CE73A69E9FBC39ADF0E7 +IV=60645B559E7321D7FA8A3F925CFC0FA4 +PT=D8D3FD2077545DD039CE8AC00CFEB3A3 +CT=C4C6FD53A2572D643AA631FB85B84D0B + +I=251 +KEY=97D34E4B3B9E081A1ACC9C258925E3179C38AE47BC15BDEC +IV=C4C6FD53A2572D643AA631FB85B84D0B +PT=F31D8F3C8AC67E081A68D3C171B0767B +CT=E1A0E460E2D1483FE954F26F45CCE7A0 + +I=252 +KEY=5372C72A4ABF72D9FB6C78456BF4AB28756C5C28F9D95A4C +IV=E1A0E460E2D1483FE954F26F45CCE7A0 +PT=422C5429CE7BD811C4A1896171217AC3 +CT=2695923CFB2141F05A0F144FF021BD36 + +I=253 +KEY=A8CA6DB8A8758322DDF9EA7990D5EAD82F63486709F8E77A +IV=2695923CFB2141F05A0F144FF021BD36 +PT=780771C65FCB907BFBB8AA92E2CAF1FB +CT=A9820B527F71E95CC1F53033149FB26F + +I=254 +KEY=62ABF1F4178F3C73747BE12BEFA40384EE9678541D675515 +IV=A9820B527F71E95CC1F53033149FB26F +PT=CCC14BD8DF1CA8A4CA619C4CBFFABF51 +CT=2BAD4E8CD7D6420D36DC2F8E77DCA072 + +I=255 +KEY=C79B767D31D9F0FC5FD6AFA738724189D84A57DA6ABBF567 +IV=2BAD4E8CD7D6420D36DC2F8E77DCA072 +PT=1EFF63C71B10DCC7A53087892656CC8F +CT=C21303AAB04E2CAF1893396DD405B265 + +I=256 +KEY=1F3C7FF71340DEEC9DC5AC0D883C6D26C0D96EB7BEBE4702 +IV=C21303AAB04E2CAF1893396DD405B265 +PT=209270B7768E5553D8A7098A22992E10 +CT=B220025B5307C9D5D1EEB4B427E7263F + +I=257 +KEY=867CB381E6D532B32FE5AE56DB3BA4F31137DA039959613D +IV=B220025B5307C9D5D1EEB4B427E7263F +PT=8546A6C9B4CEF0229940CC76F595EC5F +CT=B925C660EBE409050DA369E58C601F4D + +I=258 +KEY=33B33F93622E509296C0683630DFADF61C94B3E615397E70 +IV=B925C660EBE409050DA369E58C601F4D +PT=1F4930242C2951C4B5CF8C1284FB6221 +CT=67DA7B4BEAB2152D21C54F389F9282D4 + +I=259 +KEY=E8EC3394AF44DD34F11A137DDA6DB8DB3D51FCDE8AABFCA4 +IV=67DA7B4BEAB2152D21C54F389F9282D4 +PT=41611AE93BE61306DB5F0C07CD6A8DA6 +CT=4C116D3ED0B021129CCD1764D132A72D + +I=260 +KEY=92F61F4CB5794268BD0B7E430ADD99C9A19CEBBA5B995B89 +IV=4C116D3ED0B021129CCD1764D132A72D +PT=E7B1E63FBD5B4CA77A1A2CD81A3D9F5C +CT=FE1C3096C14AF2A4DC840207BFFFC0AF + +I=261 +KEY=08DC826B4DDBAC4D43174ED5CB976B6D7D18E9BDE4669B26 +IV=FE1C3096C14AF2A4DC840207BFFFC0AF +PT=9A0D034B1931FD599A2A9D27F8A2EE25 +CT=ED500812A10CC6C4EED0836871F85AA9 + +I=262 +KEY=486EBC43A876FF2AAE4746C76A9BADA993C86AD5959EC18F +IV=ED500812A10CC6C4EED0836871F85AA9 +PT=8237641B58069AFD40B23E28E5AD5367 +CT=0AD90C1C13E7C1318057A417C0B9B97C + +I=263 +KEY=F340D2CAC4645595A49E4ADB797C6C98139FCEC2552778F3 +IV=0AD90C1C13E7C1318057A417C0B9B97C +PT=905119E1F11E4B04BB2E6E896C12AABF +CT=B260FFA5806A4A6D8845FA6146A565ED + +I=264 +KEY=DF326741BD1EE2FF16FEB57EF91626F59BDA34A313821D1E +IV=B260FFA5806A4A6D8845FA6146A565ED +PT=4F639233904531162C72B58B797AB76A +CT=2D27A1A3968E30EBCA463C8709D0FD83 + +I=265 +KEY=D4C684692E05983C3BD914DD6F98161E519C08241A52E09D +IV=2D27A1A3968E30EBCA463C8709D0FD83 +PT=428B700FB3CD18790BF4E328931B7AC3 +CT=D350CCF3B440006C9F18E99DD5B69920 + +I=266 +KEY=9DD5275FFDCD5D2DE889D82EDBD81672CE84E1B9CFE479BD +IV=D350CCF3B440006C9F18E99DD5B69920 +PT=97F4A6256A9E22FB4913A336D3C8C511 +CT=F5A0571EB7E4719B862EBC47141EA319 + +I=267 +KEY=0A3B329A4973D7A21D298F306C3C67E948AA5DFEDBFADAA4 +IV=F5A0571EB7E4719B862EBC47141EA319 +PT=E355F7EBA4DAC16B97EE15C5B4BE8A8F +CT=4F18730073D3E78CAD356441F1317B2D + +I=268 +KEY=3BB3A19EF4EB8A755231FC301FEF8065E59F39BF2ACBA189 +IV=4F18730073D3E78CAD356441F1317B2D +PT=A20B3B6C41E88E9D31889304BD985DD7 +CT=AEAECB17B9009AAF1E4E9CC02653194B + +I=269 +KEY=4B9DDD2F821CE4D1FC9F3727A6EF1ACAFBD1A57F0C98B8C2 +IV=AEAECB17B9009AAF1E4E9CC02653194B +PT=5D2E4A96F9BB4AD4702E7CB176F76EA4 +CT=26851709960A42D5711EBDC7D40535FC + +I=270 +KEY=D7273499C5BA2842DA1A202E30E5581F8ACF18B8D89D8D3E +IV=26851709960A42D5711EBDC7D40535FC +PT=202534EA0A1952A19CBAE9B647A6CC93 +CT=FF8BFFB98EDA7E54664AE879551B5497 + +I=271 +KEY=7870FF6B66070AB02591DF97BE3F264BEC85F0C18D86D9A9 +IV=FF8BFFB98EDA7E54664AE879551B5497 +PT=365CFE282B9508CFAF57CBF2A3BD22F2 +CT=D0809C84A97221E6F8DCB483B38EC7E1 + +I=272 +KEY=F4E6DFDF4A081200F5114313174D07AD145944423E081E48 +IV=D0809C84A97221E6F8DCB483B38EC7E1 +PT=915323F59134AB838C9620B42C0F18B0 +CT=DC8A24B8DECF81E0412DBF10127119EC + +I=273 +KEY=336A7C81A4BE3FE9299B67ABC982864D5574FB522C7907A4 +IV=DC8A24B8DECF81E0412DBF10127119EC +PT=0FC4387E49F666B8C78CA35EEEB62DE9 +CT=84E370DF6CA478BA85FC0874393CE442 + +I=274 +KEY=F8ADC39E17CDDEB0AD781774A526FEF7D088F3261545E3E6 +IV=84E370DF6CA478BA85FC0874393CE442 +PT=34BFEFD3E43D8EE0CBC7BF1FB373E159 +CT=2C109A8363D1D0FB69CA77ABFA922F05 + +I=275 +KEY=2B26D271208BD64F81688DF7C6F72E0CB942848DEFD7CCE3 +IV=2C109A8363D1D0FB69CA77ABFA922F05 +PT=D28D86D5199E7E30D38B11EF374608FF +CT=F1749EFE66D339BC99AE4D9F63C90490 + +I=276 +KEY=ACB8D3E6F5A45F0C701C1309A02417B020ECC9128C1EC873 +IV=F1749EFE66D339BC99AE4D9F63C90490 +PT=2ADAFA1911C5E9BD879E0197D52F8943 +CT=3B2A7C4278E1F071BFA29A6B0BFF4A15 + +I=277 +KEY=CCEE75264DD770C44B366F4BD8C5E7C19F4E537987E18266 +IV=3B2A7C4278E1F071BFA29A6B0BFF4A15 +PT=84E244B62DF08DC76056A6C0B8732FC8 +CT=A35F83A5EE0B1C3B9DAD76DEAED96D72 + +I=278 +KEY=F8F9239CDB5CC963E869ECEE36CEFBFA02E325A72938EF14 +IV=A35F83A5EE0B1C3B9DAD76DEAED96D72 +PT=F0B652F296CF162B341756BA968BB9A7 +CT=D5867FFE2FB75E309D3345611B25E3B0 + +I=279 +KEY=509A10ABA5EAF2963DEF93101979A5CA9FD060C6321D0CA4 +IV=D5867FFE2FB75E309D3345611B25E3B0 +PT=C47D42AE34131463A86333377EB63BF5 +CT=6E136F01638AFBE3554218431DF44E7E + +I=280 +KEY=9B52C39C38F16CCE53FCFC117AF35E29CA9278852FE942DA +IV=6E136F01638AFBE3554218431DF44E7E +PT=78E05783EAEBE1BDCBC8D3379D1B9E58 +CT=FB6ACD3D0CF805374AD07EF5C038EBF6 + +I=281 +KEY=2044F086923D5E43A896312C760B5B1E80420670EFD1A92C +IV=FB6ACD3D0CF805374AD07EF5C038EBF6 +PT=02415B8E4D915492BB16331AAACC328D +CT=0086C26DA11540FF5F485D7B238FD98C + +I=282 +KEY=12CE4C4109606CD7A810F341D71E1BE1DF0A5B0BCC5E70A0 +IV=0086C26DA11540FF5F485D7B238FD98C +PT=0A2988237132B0B3328ABCC79B5D3294 +CT=F2E94C71A2AE0FCB096D8259B931CF8D + +I=283 +KEY=21BBCDA7FBC5229C5AF9BF3075B0142AD667D952756FBF2D +IV=F2E94C71A2AE0FCB096D8259B931CF8D +PT=4234B6C7F1CE98A3337581E6F2A54E4B +CT=3B52E7834263C6790763706943741FD8 + +I=284 +KEY=BB451732881A996161AB58B337D3D253D104A93B361BA0F5 +IV=3B52E7834263C6790763706943741FD8 +PT=F8509FB57E14501F9AFEDA9573DFBBFD +CT=93FCA9F122CB707213D0CD72D8E6BF74 + +I=285 +KEY=857D076E9A127A84F257F1421518A221C2D46449EEFD1F81 +IV=93FCA9F122CB707213D0CD72D8E6BF74 +PT=AA4D07DFAD030BE03E38105C1208E3E5 +CT=50717568D21862AECFAA898337405C96 + +I=286 +KEY=1BCFD020D63709E0A226842AC700C08F0D7EEDCAD9BD4317 +IV=50717568D21862AECFAA898337405C96 +PT=7B488D7BBB2D538E9EB2D74E4C257364 +CT=0338D74260CB6CBB1B220DE7E4CC0BCF + +I=287 +KEY=CCDDF5D0BBCE202DA11E5368A7CBAC34165CE02D3D7148D8 +IV=0338D74260CB6CBB1B220DE7E4CC0BCF +PT=16E01F8B3E94AC26D71225F06DF929CD +CT=698AD17BB2F5F06C0465BEE34A7DCEDD + +I=288 +KEY=B7F556BC9BB4DC49C8948213153E5C5812395ECE770C8605 +IV=698AD17BB2F5F06C0465BEE34A7DCEDD +PT=3ED0C80AFDEFE8BF7B28A36C207AFC64 +CT=E20129557F795C2B1CC32A5494824A4B + +I=289 +KEY=4B00D75969C3549C2A95AB466A4700730EFA749AE38ECC4E +IV=E20129557F795C2B1CC32A5494824A4B +PT=20BE0CD6C2244384FCF581E5F27788D5 +CT=C2F9DD55E91F4796636FEC9745410087 + +I=290 +KEY=5EDCC5155BA684A4E86C7613835847E56D95980DA6CFCCC9 +IV=C2F9DD55E91F4796636FEC9745410087 +PT=B2DF53DF1139FB9915DC124C3265D038 +CT=015D51CD3568EB4EC210B58FFA89A409 + +I=291 +KEY=21BA26AC6880AACDE93127DEB630ACABAF852D825C4668C0 +IV=015D51CD3568EB4EC210B58FFA89A409 +PT=401094B8B47CBDC87F66E3B933262E69 +CT=2987D39C19E6997957BDD0CAF010F778 + +I=292 +KEY=BBA7ABC0A20CCBDEC0B6F442AFD635D2F838FD48AC569FB8 +IV=2987D39C19E6997957BDD0CAF010F778 +PT=EFC30498827AAD9A9A1D8D6CCA8C6113 +CT=E01AA987C9520EF8EBF53E97371D056B + +I=293 +KEY=5322D81BAA29410320AC5DC566843B2A13CDC3DF9B4B9AD3 +IV=E01AA987C9520EF8EBF53E97371D056B +PT=685D6F660D40105CE88573DB08258ADD +CT=D1265ABFCFA75FC65E94983BFF75CD48 + +I=294 +KEY=19DF73EBF1CEF669F18A077AA92364EC4D595BE4643E579B +IV=D1265ABFCFA75FC65E94983BFF75CD48 +PT=DD6E090E9981E5F24AFDABF05BE7B76A +CT=605FDD1CA95B8FE1A5E26DBA10241914 + +I=295 +KEY=F7D1D0CA3DAA851891D5DA660078EB0DE8BB365E741A4E8F +IV=605FDD1CA95B8FE1A5E26DBA10241914 +PT=9F8442EE8B5A325FEE0EA321CC647371 +CT=76D67121FDEAEB6B81DBB29565F71E8E + +I=296 +KEY=FFFF200EA04824E9E703AB47FD920066696084CB11ED5001 +IV=76D67121FDEAEB6B81DBB29565F71E8E +PT=5AF386509F0C8BAA082EF0C49DE2A1F1 +CT=7E1D833DC8D73228B7DFDE918E31E5E7 + +I=297 +KEY=2A7D40B689490FC7991E287A3545324EDEBF5A5A9FDCB5E6 +IV=7E1D833DC8D73228B7DFDE918E31E5E7 +PT=02AB05F508ACDD21D58260B829012B2E +CT=D6CA06D415EA5D750B5D06C252645A43 + +I=298 +KEY=134154161A39E2CF4FD42EAE20AF6F3BD5E25C98CDB8EFA5 +IV=D6CA06D415EA5D750B5D06C252645A43 +PT=E63873AE14DD3BA8393C14A09370ED08 +CT=BFEA32E77BC1607921C54027C01C3EDF + +I=299 +KEY=AD8AF90935A6B455F03E1C495B6E0F42F4271CBF0DA4D17A +IV=BFEA32E77BC1607921C54027C01C3EDF +PT=BAD47B1FBF949870BECBAD1F2F9F569A +CT=A86FFC9A91C79AFE47899B3934F3E05E + +I=300 +KEY=D88A2E828514CEC25851E0D3CAA995BCB3AE878639573124 +IV=A86FFC9A91C79AFE47899B3934F3E05E +PT=2A2115074A9767747500D78BB0B27A97 +CT=507ED155CC3ED3B1922BBC166812A7FE + +I=301 +KEY=2CDDF1A577A3C86C082F31860697460D21853B90514596DA +IV=507ED155CC3ED3B1922BBC166812A7FE +PT=308D27178ABA22BCF457DF27F2B706AE +CT=87F4EEA7CD2438F3EDCB650824A2D638 + +I=302 +KEY=2B9D006908018D648FDBDF21CBB37EFECC4E5E9875E740E2 +IV=87F4EEA7CD2438F3EDCB650824A2D638 +PT=28F6C452D061E3DB0740F1CC7FA24508 +CT=DBA57DDA73A4E987EA32EF113877E908 + +I=303 +KEY=FC69838410D06425547EA2FBB8179779267CB1894D90A9EA +IV=DBA57DDA73A4E987EA32EF113877E908 +PT=91CFB50FFBE97D8AD7F483ED18D1E941 +CT=1720ED3E3B685A19CDA66BD09BD4DA5F + +I=304 +KEY=541AAB6191E2C51F435E4FC5837FCD60EBDADA59D64473B5 +IV=1720ED3E3B685A19CDA66BD09BD4DA5F +PT=78FF980C48FAEBA0A87328E58132A13A +CT=ED2E260103CAA77598FD195D02B484C8 + +I=305 +KEY=761B0A3F50E2ACC1AE7069C480B56A157327C304D4F0F77D +IV=ED2E260103CAA77598FD195D02B484C8 +PT=8C01554039D8F8EE2201A15EC10069DE +CT=A9F0E16716B3AC14E06F18F5AEECB541 + +I=306 +KEY=70056CD35CF430D5078088A39606C6019348DBF17A1C423C +IV=A9F0E16716B3AC14E06F18F5AEECB541 +PT=C139651464D1614B061E66EC0C169C14 +CT=A41DDF008E0D52B627982D4196C3069E + +I=307 +KEY=EE1932746487B7BEA39D57A3180B94B7B4D0F6B0ECDF44A2 +IV=A41DDF008E0D52B627982D4196C3069E +PT=C617572884721A3D9E1C5EA73873876B +CT=44E5304E35A21660C450FAF84D87B13B + +I=308 +KEY=13D43E4526F8243FE77867ED2DA982D770800C48A158F599 +IV=44E5304E35A21660C450FAF84D87B13B +PT=9C72E08DD264D6B7FDCD0C31427F9381 +CT=173B2C7A54A1A3CF3D39DCB68DA1C539 + +I=309 +KEY=7CB72DE2CAED4080F0434B97790821184DB9D0FE2CF930A0 +IV=173B2C7A54A1A3CF3D39DCB68DA1C539 +PT=4DF3764F679E29446F6313A7EC1564BF +CT=F1A167A3EB8F3FAB9F9B1570475ED15A + +I=310 +KEY=A7E6340A1278A3E801E22C3492871EB3D222C58E6BA7E1FA +IV=F1A167A3EB8F3FAB9F9B1570475ED15A +PT=2ED419EA11AAF8F3DB5119E8D895E368 +CT=2C5C5B10E285FE6C7E4750D2F9C1BD23 + +I=311 +KEY=4B535B4D088F09192DBE77247002E0DFAC65955C92665CD9 +IV=2C5C5B10E285FE6C7E4750D2F9C1BD23 +PT=A3E9EA99771D0C02ECB56F471AF7AAF1 +CT=A12B4A15DBFAE2E7D4A7A792CD3C121A + +I=312 +KEY=2F0E7BAD76DC0A718C953D31ABF8023878C232CE5F5A4EC3 +IV=A12B4A15DBFAE2E7D4A7A792CD3C121A +PT=1CC105D2604628B7645D20E07E530368 +CT=65CE700B785D901C5E5E08F7E74BB296 + +I=313 +KEY=6111C386DE35C954E95B4D3AD3A59224269C3A39B811FC55 +IV=65CE700B785D901C5E5E08F7E74BB296 +PT=F902717AF7F0794E4E1FB82BA8E9C325 +CT=E7F3BD1056C504285FFC7F65B395DCAE + +I=314 +KEY=3B8F85E6FD28C4610EA8F02A8560960C7960455C0B8420FB +IV=E7F3BD1056C504285FFC7F65B395DCAE +PT=20A5529420D6D4C35A9E4660231D0D35 +CT=6CC36458ADECCA8B7198FD272A8C76C8 + +I=315 +KEY=D404C97E089F240B626B9472288C5C8708F8B87B21085633 +IV=6CC36458ADECCA8B7198FD272A8C76C8 +PT=1094639F6723C9B0EF8B4C98F5B7E06A +CT=D01C3C1E036D804563F04926ED203146 + +I=316 +KEY=4779B44770085E18B277A86C2BE1DCC26B08F15DCC286775 +IV=D01C3C1E036D804563F04926ED203146 +PT=A482437681DFE307937D7D3978977A13 +CT=319D579DE9E55C8A3B2097EE8C93375F + +I=317 +KEY=22362304D7417BB483EAFFF1C2048048502866B340BB502A +IV=319D579DE9E55C8A3B2097EE8C93375F +PT=7AF0C8274B5C243B654F9743A74925AC +CT=5F722165B8B422E088814B77A6B4D8E4 + +I=318 +KEY=06FDA49350C16FEADC98DE947AB0A2A8D8A92DC4E60F88CE +IV=5F722165B8B422E088814B77A6B4D8E4 +PT=A37964FA3E8145EF24CB87978780145E +CT=C0417773DFD3FC83C2CE12D388F5DD8F + +I=319 +KEY=366245F8CBC490611CD9A9E7A5635E2B1A673F176EFA5541 +IV=C0417773DFD3FC83C2CE12D388F5DD8F +PT=5D7E1E14F7BD7DB6309FE16B9B05FF8B +CT=2EAE64B58C18AC7ADD2EE62896AB708D + +I=320 +KEY=A1BB8A9F9BE8F1383277CD52297BF251C749D93FF85125CC +IV=2EAE64B58C18AC7ADD2EE62896AB708D +PT=3ADC6991BF15554F97D9CF67502C6159 +CT=069FC966F8A985AD41617CB0148D2B96 + +I=321 +KEY=7AB228E4114C14AB34E80434D1D277FC8628A58FECDC0E5A +IV=069FC966F8A985AD41617CB0148D2B96 +PT=4405B80CCE92FD71DB09A27B8AA4E593 +CT=13459A0239A33BC41424A5D03C6B2864 + +I=322 +KEY=78D1BC27E5CBBB1D27AD9E36E8714C38920C005FD0B7263E +IV=13459A0239A33BC41424A5D03C6B2864 +PT=B9BAA861988616CD026394C3F487AFB6 +CT=08DA968A2BAEB9B763EB42BF555A2BFA + +I=323 +KEY=F53B033A22EA1D7B2F7708BCC3DFF58FF1E742E085ED0DC4 +IV=08DA968A2BAEB9B763EB42BF555A2BFA +PT=30654265AD0FB24E8DEABF1DC721A666 +CT=E8412BDC1E75AC8E2C28552E2195795E + +I=324 +KEY=4928B51AF5C2408CC7362360DDAA5901DDCF17CEA478749A +IV=E8412BDC1E75AC8E2C28552E2195795E +PT=EEB05E487EEB907FBC13B620D7285DF7 +CT=E01839F95680D27E048383236D59EE85 + +I=325 +KEY=C4DB91EAFC4C26D7272E1A998B2A8B7FD94C94EDC9219A1F +IV=E01839F95680D27E048383236D59EE85 +PT=BA0160229D7471FE8DF324F0098E665B +CT=D41902E6BE946CEB1612CFEE2F33F7CD + +I=326 +KEY=B550731E659834A1F337187F35BEE794CF5E5B03E6126DD2 +IV=D41902E6BE946CEB1612CFEE2F33F7CD +PT=7DC970AFAF99BA6C718BE2F499D41276 +CT=326C3523173D62E9E145592E7A774311 + +I=327 +KEY=5F87F6C2402B2352C15B2D5C2283857D2E1B022D9C652EC3 +IV=326C3523173D62E9E145592E7A774311 +PT=24ED6DAE1B24CC2BEAD785DC25B317F3 +CT=DDAE8AFF94604FFA82AE4FFB06953C01 + +I=328 +KEY=3636C04061996CD01CF5A7A3B6E3CA87ACB54DD69AF012C2 +IV=DDAE8AFF94604FFA82AE4FFB06953C01 +PT=98E262805B8D9FD169B1368221B24F82 +CT=0D75DCFA4941BCE658DB2C71CB270BE7 + +I=329 +KEY=64B9A0DE7DDA73C011807B59FFA27661F46E61A751D71925 +IV=0D75DCFA4941BCE658DB2C71CB270BE7 +PT=2BC34C226D41D8CE528F609E1C431F10 +CT=D70ED1DCDB9420E4B4A0D2A7C5148DE3 + +I=330 +KEY=F64196479D35F74BC68EAA852436568540CEB30094C394C6 +IV=D70ED1DCDB9420E4B4A0D2A7C5148DE3 +PT=1015CB1E4569986C92F83699E0EF848B +CT=524314DCCF2ADE5F8C3D241824C2BA73 + +I=331 +KEY=686AB32115A2884C94CDBE59EB1C88DACCF39718B0012EB5 +IV=524314DCCF2ADE5F8C3D241824C2BA73 +PT=FB8B49053F724B7D9E2B256688977F07 +CT=7C579324F7251EDF95BDE2320104ACA6 + +I=332 +KEY=34DD68E6F442F6D9E89A2D7D1C399605594E752AB1058213 +IV=7C579324F7251EDF95BDE2320104ACA6 +PT=A3B71504A8DAA3515CB7DBC7E1E07E95 +CT=921A66278A6D1E61D4B509F199F8FE55 + +I=333 +KEY=19C9F40A858DD9EA7A804B5A965488648DFB7CDB28FD7C46 +IV=921A66278A6D1E61D4B509F199F8FE55 +PT=B0B651905E1B38FB2D149CEC71CF2F33 +CT=F2C37CF94514C902A0E438159C2C9F5F + +I=334 +KEY=B68812FC7D4E40D6884337A3D34041662D1F44CEB4D1E319 +IV=F2C37CF94514C902A0E438159C2C9F5F +PT=7DE03F498839F8DAAF41E6F6F8C3993C +CT=4596A25A85D06BCC74F686F8F1E8C203 + +I=335 +KEY=2836F982CA563379CDD595F956902AAA59E9C2364539211A +IV=4596A25A85D06BCC74F686F8F1E8C203 +PT=D5425E42151014ED9EBEEB7EB71873AF +CT=0BA46EFA61FB07430C51D7CE267E1F47 + +I=336 +KEY=BC8C7F9051C98892C671FB03376B2DE955B815F863473E5D +IV=0BA46EFA61FB07430C51D7CE267E1F47 +PT=5D060EEC179C1B9E94BA86129B9FBBEB +CT=49F7D7D7BAB7795A4E74A854C8C1AC53 + +I=337 +KEY=E661F49B22BC92358F862CD48DDC54B31BCCBDACAB86920E +IV=49F7D7D7BAB7795A4E74A854C8C1AC53 +PT=C598926A437A27A45AED8B0B73751AA7 +CT=0EB97E32AEC4CE3959197C5B72C1ABC5 + +I=338 +KEY=E625AB8664BCF057813F52E623189A8A42D5C1F7D94739CB +IV=0EB97E32AEC4CE3959197C5B72C1ABC5 +PT=B7272C4D712F9CF500445F1D46006262 +CT=DA9F53564E69AED610BCCAD13C00A241 + +I=339 +KEY=75FC1D46AFD886915BA001B06D71345C52690B26E5479B8A +IV=DA9F53564E69AED610BCCAD13C00A241 +PT=FE7513CF9353BBF093D9B6C0CB6476C6 +CT=7F61B6F9B7C14EB6179F2DA597EC1183 + +I=340 +KEY=F92D3201DA84422024C1B749DAB07AEA45F6268372AB8A09 +IV=7F61B6F9B7C14EB6179F2DA597EC1183 +PT=4E4D3DF58D7D9C338CD12F47755CC4B1 +CT=F9216373C300AA9BE96BD8C98F9716B7 + +I=341 +KEY=680384A1E522C848DDE0D43A19B0D071AC9DFE4AFD3C9CBE +IV=F9216373C300AA9BE96BD8C98F9716B7 +PT=1A7B30192D54142E912EB6A03FA68A68 +CT=8512BA1B57BC04EF3C021DB1EC3CA9C6 + +I=342 +KEY=DE3B85BD09EC93B858F26E214E0CD49E909FE3FB11003578 +IV=8512BA1B57BC04EF3C021DB1EC3CA9C6 +PT=86587FF85D73F77FB638011CECCE5BF0 +CT=FA582C37D4063D61428C886A9FD54C84 + +I=343 +KEY=C574CA7322F443FBA2AA42169A0AE9FFD2136B918ED579FC +IV=FA582C37D4063D61428C886A9FD54C84 +PT=3A7425A8B7BC3A941B4F4FCE2B18D043 +CT=7571B4D46CBC671964AB5BDE9C843DCF + +I=344 +KEY=078109812EFBA9DBD7DBF6C2F6B68EE6B6B8304F12514433 +IV=7571B4D46CBC671964AB5BDE9C843DCF +PT=5224060F0848F028C2F5C3F20C0FEA20 +CT=DA9EB72D65D492FE88B819674B8433C1 + +I=345 +KEY=5BF7FA2E15A87C850D4541EF93621C183E00292859D577F2 +IV=DA9EB72D65D492FE88B819674B8433C1 +PT=2622B2A19CBBAD065C76F3AF3B53D55E +CT=C66EF470CEDDD499AE6214E75DE9051B + +I=346 +KEY=ECBE2377CAF0C9E9CB2BB59F5DBFC88190623DCF043C72E9 +IV=C66EF470CEDDD499AE6214E75DE9051B +PT=833F22A76D51E360B749D959DF58B56C +CT=57407E3DEFFF753E879619424FCE5713 + +I=347 +KEY=4EAB83DA78D60CB09C6BCBA2B240BDBF17F4248D4BF225FA +IV=57407E3DEFFF753E879619424FCE5713 +PT=25781A534FB9192CA215A0ADB226C559 +CT=644D89381439E7BBED7DC344CBF4C886 + +I=348 +KEY=C4977EF1F6271D6CF826429AA6795A04FA89E7C98006ED7C +IV=644D89381439E7BBED7DC344CBF4C886 +PT=E8EDD9AA25A8C5B08A3CFD2B8EF111DC +CT=CA4B2680D0EE8E28818BE8DE8D625ADC + +I=349 +KEY=80212F6D11C6DAE2326D641A7697D42C7B020F170D64B7A0 +IV=CA4B2680D0EE8E28818BE8DE8D625ADC +PT=8F667EEDB79E930644B6519CE7E1C78E +CT=5497F477AD5E65BB748A781533F1BCEF + +I=350 +KEY=A05DF1DF7E0393A566FA906DDBC9B1970F8877023E950B4F +IV=5497F477AD5E65BB748A781533F1BCEF +PT=099FDB76E6D21788207CDEB26FC54947 +CT=C8C541B359BF1B53441C4EFFFD2F65AF + +I=351 +KEY=3970F236F800D18BAE3FD1DE8276AAC44B9439FDC3BA6EE0 +IV=C8C541B359BF1B53441C4EFFFD2F65AF +PT=C79FA2079ECCEBCD992D03E98603422E +CT=E59765A861DE0168161EA1360B5966A9 + +I=352 +KEY=8ED3BFA3E4C9453C4BA8B476E3A8ABAC5D8A98CBC8E30849 +IV=E59765A861DE0168161EA1360B5966A9 +PT=AFBCD48F06709730B7A34D951CC994B7 +CT=5A65435BD1B4DB742E8AFF8C402927FC + +I=353 +KEY=2A3F01E56E45895B11CDF72D321C70D87300674788CA2FB5 +IV=5A65435BD1B4DB742E8AFF8C402927FC +PT=CF684F64B8CCD2EDA4ECBE468A8CCC67 +CT=551AF68D50D23408F47214C0B18E6C8A + +I=354 +KEY=CA12AC8D17941E6244D701A062CE44D0877273873944433F +IV=551AF68D50D23408F47214C0B18E6C8A +PT=561072AC144854C1E02DAD6879D19739 +CT=ADFF035C89E040A4C3CCE190D6CB7283 + +I=355 +KEY=D1CA1B08A51B5086E92802FCEB2E047444BE9217EF8F31BC +IV=ADFF035C89E040A4C3CCE190D6CB7283 +PT=827ADE7D0F329D9A1BD8B785B28F4EE4 +CT=425F5596D3FD37243EE59D6FC1F5ADCC + +I=356 +KEY=54EC325FE63AA470AB77576A38D333507A5B0F782E7A9C70 +IV=425F5596D3FD37243EE59D6FC1F5ADCC +PT=4AAF21E64F8DBDB0852629574321F4F6 +CT=D85520FE860C9F320CDC8192A900F499 + +I=357 +KEY=5B4612BC35BFC12473227794BEDFAC6276878EEA877A68E9 +IV=D85520FE860C9F320CDC8192A900F499 +PT=0D046A402A1860C70FAA20E3D3856554 +CT=11C20F3ACED79B37402B2F04886D4CC7 + +I=358 +KEY=5052384CE705101562E078AE7008375536ACA1EE0F17242E +IV=11C20F3ACED79B37402B2F04886D4CC7 +PT=7546E6521BBBFAFE0B142AF0D2BAD131 +CT=BCDA339266E3AFB779AF17CE34218BE5 + +I=359 +KEY=F7ECFB2AA4FC6DE2DE3A4B3C16EB98E24F03B6203B36AFCB +IV=BCDA339266E3AFB779AF17CE34218BE5 +PT=85DF7958789E9090A7BEC36643F97DF7 +CT=300D46EAB6466314BB00DBC869C77F4E + +I=360 +KEY=1E27229506EC9555EE370DD6A0ADFBF6F4036DE852F1D085 +IV=300D46EAB6466314BB00DBC869C77F4E +PT=C6CED700614467A0E9CBD9BFA210F8B7 +CT=51735C075A14FE95D4A02F527A9474D3 + +I=361 +KEY=857F653E1E811CABBF4451D1FAB9056320A342BA2865A456 +IV=51735C075A14FE95D4A02F527A9474D3 +PT=53D436401D6811B19B5847AB186D89FE +CT=827017531E56980C4357549D0E70114F + +I=362 +KEY=1BCE612F3A5262223D344682E4EF9D6F63F416272615B519 +IV=827017531E56980C4357549D0E70114F +PT=4C1BD17FFD65AB2C9EB1041124D37E89 +CT=751BCA9516123906561FB8AF2208CEE1 + +I=363 +KEY=7C7034EC27524FC3482F8C17F2FDA46935EBAE88041D7BF8 +IV=751BCA9516123906561FB8AF2208CEE1 +PT=7C23D6E77039F35267BE55C31D002DE1 +CT=82CAFBBE859FA80B2A8E58CEC074B01A + +I=364 +KEY=7F31EEE0447BB53CCAE577A977620C621F65F646C469CBE2 +IV=82CAFBBE859FA80B2A8E58CEC074B01A +PT=B91FF7759419BBB10341DA0C6329FAFF +CT=B7614376C9BAFC92E17E39D2BDF1F2EF + +I=365 +KEY=E705144BCE40FC987D8434DFBED8F0F0FE1BCF947998390D +IV=B7614376C9BAFC92E17E39D2BDF1F2EF +PT=72B3472217AC80979834FAAB8A3B49A4 +CT=A63BA38FDDFE99D28BA447871BBA6211 + +I=366 +KEY=15C813D2D9AD1494DBBF97506326692275BF881362225B1C +IV=A63BA38FDDFE99D28BA447871BBA6211 +PT=349F8E5FAE004B51F2CD079917EDE80C +CT=C87E448872E619419766CB46787F2581 + +I=367 +KEY=B12B790C217821DA13C1D3D811C07063E2D943551A5D7E9D +IV=C87E448872E619419766CB46787F2581 +PT=EC474C794E3C8322A4E36ADEF8D5354E +CT=73DD478F7F41857F7A5DE7EDF3F1AF7B + +I=368 +KEY=1CFA6A54B3E572DC601C94576E81F51C9884A4B8E9ACD1E6 +IV=73DD478F7F41857F7A5DE7EDF3F1AF7B +PT=48F8361EF11F94C1ADD11358929D5306 +CT=8B85DE2CBE5C96CBDFE16064079754D9 + +I=369 +KEY=6718C10E683F4D73EB994A7BD0DD63D74765C4DCEE3B853F +IV=8B85DE2CBE5C96CBDFE16064079754D9 +PT=59BFDA108542EDDB7BE2AB5ADBDA3FAF +CT=56FF53384CED780F604F86EC0CE26B26 + +I=370 +KEY=704ED4F1E96776A2BD6619439C301BD8272A4230E2D9EE19 +IV=56FF53384CED780F604F86EC0CE26B26 +PT=468FDBDB8BC26B5A175615FF81583BD1 +CT=7B0C2436262A262C5FAFC3A9B786DB00 + +I=371 +KEY=67AFB86317B622B2C66A3D75BA1A3DF478858199555F3519 +IV=7B0C2436262A262C5FAFC3A9B786DB00 +PT=768BE978E5E8CA6E17E16C92FED15410 +CT=D32206D5D1521AB667516391810F5719 + +I=372 +KEY=0BF4E0C32EA3D69615483BA06B4827421FD4E208D4506200 +IV=D32206D5D1521AB667516391810F5719 +PT=1943C5D93D10A0E36C5B58A03915F424 +CT=6BCE2BEC0D5A0DA9051AF2B34A873694 + +I=373 +KEY=924D1C527572A2EF7E86104C66122AEB1ACE10BB9ED75494 +IV=6BCE2BEC0D5A0DA9051AF2B34A873694 +PT=E3020D099D0841C299B9FC915BD17479 +CT=3BEBA6BA0762BF5FAA4D26B70071B4A9 + +I=374 +KEY=CFA41DB53F2F8766456DB6F6617095B4B083360C9EA6E03D +IV=3BEBA6BA0762BF5FAA4D26B70071B4A9 +PT=31F7316F0D1012CD5DE901E74A5D2589 +CT=C4253CED7F88DF97596B08A15BAEF533 + +I=375 +KEY=E2B9D43008C1537281488A1B1EF84A23E9E83EADC508150E +IV=C4253CED7F88DF97596B08A15BAEF533 +PT=00365D6755A898E62D1DC98537EED414 +CT=2D4EB6BA84D1C0C978EA20C1693BB75C + +I=376 +KEY=43EA75DFD5B35CCBAC063CA19A298AEA91021E6CAC33A252 +IV=2D4EB6BA84D1C0C978EA20C1693BB75C +PT=599279C68B67A988A153A1EFDD720FB9 +CT=03698CC5E133AD8855B847C124FD2778 + +I=377 +KEY=8F2C76FCFBD8060DAF6FB0647B1A2762C4BA59AD88CE852A +IV=03698CC5E133AD8855B847C124FD2778 +PT=47EFAF7E090B94B5CCC603232E6B5AC6 +CT=8D44C11C25ADE5631E05FAAECCA70AF7 + +I=378 +KEY=E02084775A2E1A4E222B71785EB7C201DABFA30344698FDD +IV=8D44C11C25ADE5631E05FAAECCA70AF7 +PT=394EC624EBC0D79E6F0CF28BA1F61C43 +CT=5EB407847213D5E950C66787B140BC35 + +I=379 +KEY=D8208A70940589F47C9F76FC2CA417E88A79C484F52933E8 +IV=5EB407847213D5E950C66787B140BC35 +PT=F28816D227AC09F538000E07CE2B93BA +CT=2D4FBD74A027526BADC8C2A433963C22 + +I=380 +KEY=858193C76AFE48D951D0CB888C83458327B10620C6BF0FCA +IV=2D4FBD74A027526BADC8C2A433963C22 +PT=FBAA6C644F8E08885DA119B7FEFBC12D +CT=FA2DAE761EBBFDE4B77CBCD2381165DB + +I=381 +KEY=DA9A9F800056FC6EABFD65FE9238B86790CDBAF2FEAE6A11 +IV=FA2DAE761EBBFDE4B77CBCD2381165DB +PT=F66A574C26D0F15C5F1B0C476AA8B4B7 +CT=DB18F5B16BF19C2BCCA36091A302BF38 + +I=382 +KEY=BD2AB07F036032AB70E5904FF9C9244C5C6EDA635DACD529 +IV=DB18F5B16BF19C2BCCA36091A302BF38 +PT=04B0C1A19C6D38B467B02FFF0336CEC5 +CT=D3F01581B21DF4E470EE595CAB44912C + +I=383 +KEY=7EF57F6BDE41D79CA31585CE4BD4D0A82C80833FF6E84405 +IV=D3F01581B21DF4E470EE595CAB44912C +PT=83BF32E0F3F3CEE7C3DFCF14DD21E537 +CT=10C69B9A04E0851B63D85D025BBACA29 + +I=384 +KEY=22057A9912BB6B76B3D31E544F3455B34F58DE3DAD528E2C +IV=10C69B9A04E0851B63D85D025BBACA29 +PT=150ACC96322893CC5CF005F2CCFABCEA +CT=2743FE5769DDA5D591318E200AF672D0 + +I=385 +KEY=742A2117B51176E69490E00326E9F066DE69501DA7A4FCFC +IV=2743FE5769DDA5D591318E200AF672D0 +PT=93246C1A26F66DAF562F5B8EA7AA1D90 +CT=5CA8FC8DB4A20B2CA8AB86B1B40DA1A1 + +I=386 +KEY=3C09F8C3B20BE749C8381C8E924BFB4A76C2D6AC13A95D5D +IV=5CA8FC8DB4A20B2CA8AB86B1B40DA1A1 +PT=D91806E0F3451C374823D9D4071A91AF +CT=25701E4C6685C98333566EB75498AEB7 + +I=387 +KEY=DD0386F2D0D1E8FFED4802C2F4CE32C94594B81B4731F3EA +IV=25701E4C6685C98333566EB75498AEB7 +PT=701A5D7027053688E10A7E3162DA0FB6 +CT=E4A5889FC49B62F767F61F1D2810801A + +I=388 +KEY=BB9A1FA7287B0D3D09ED8A5D3055503E2262A7066F2173F0 +IV=E4A5889FC49B62F767F61F1D2810801A +PT=A110B0A38255279B66999955F8AAE5C2 +CT=F1A9BDA2045F3EAE2AB9CEE2AD352270 + +I=389 +KEY=21B561DC3C44B5A5F84437FF340A6E9008DB69E4C2145180 +IV=F1A9BDA2045F3EAE2AB9CEE2AD352270 +PT=1562CF8420963B479A2F7E7B143FB898 +CT=E7E2BA657D3482A4825D643B8C01B52E + +I=390 +KEY=60A0FA1F5FA435401FA68D9A493EEC348A860DDF4E15E4AE +IV=E7E2BA657D3482A4825D643B8C01B52E +PT=930490633BC4EDC941159BC363E080E5 +CT=2FDBCD145EB8620594834B0D63BBD137 + +I=391 +KEY=7DD1686F811E4017307D408E17868E311E0546D22DAE3599 +IV=2FDBCD145EB8620594834B0D63BBD137 +PT=4BB1C43F4ABC51CD1D719270DEBA7557 +CT=B703658AD9FFCDE05E2C7E252990402E + +I=392 +KEY=18203DC5AAA632F5877E2504CE7943D1402938F7043E75B7 +IV=B703658AD9FFCDE05E2C7E252990402E +PT=47931942F275F05E65F155AA2BB872E2 +CT=5B79CB7FA90D3BB5A979A4588D4DE434 + +I=393 +KEY=9F6D532CBAF42FCDDC07EE7B67747864E9509CAF89739183 +IV=5B79CB7FA90D3BB5A979A4588D4DE434 +PT=E3A36DF4EB896B4D874D6EE910521D38 +CT=61BF460521E67B3CAC638F3298EF9310 + +I=394 +KEY=ED4F97BC99036E83BDB8A87E469203584533139D119C0293 +IV=61BF460521E67B3CAC638F3298EF9310 +PT=55EABDF72CCB5D737222C49023F7414E +CT=8A27D87B53B2FB8BBAFF7851AF1D51F2 + +I=395 +KEY=E1B9A7291D885F8E379F70051520F8D3FFCC6BCCBE815361 +IV=8A27D87B53B2FB8BBAFF7851AF1D51F2 +PT=D30271EA236E948F0CF63095848B310D +CT=15075FDCBD2D6FC15B9A3841A2D58C34 + +I=396 +KEY=976B101EE3E10E0822982FD9A80D9712A456538D1C54DF55 +IV=15075FDCBD2D6FC15B9A3841A2D58C34 +PT=879EED3434159D8076D2B737FE695186 +CT=6896582462983FAAE443078F9768B339 + +I=397 +KEY=A7A3277BF5F605FC4A0E77FDCA95A8B8401554028B3C6C6C +IV=6896582462983FAAE443078F9768B339 +PT=89DDABE96D1069ED30C8376516170BF4 +CT=96FE6B921416B667AA5B34D2D2E25747 + +I=398 +KEY=DD57026B1D4E32A8DCF01C6FDE831EDFEA4E60D059DE3B2B +IV=96FE6B921416B667AA5B34D2D2E25747 +PT=8144C8BB09FC72827AF42510E8B83754 +CT=EEDC3677AB7B57829F6D733F8090DA8A + +I=399 +KEY=B4D1BDF297DC0574322C2A1875F8495D752313EFD94EE1A1 +IV=EEDC3677AB7B57829F6D733F8090DA8A +PT=510F7A55799B39786986BF998A9237DC +CT=BA50C94440C04A8C0899D42658E25437 + +========== + +KEYSIZE=256 + +I=0 +KEY=0000000000000000000000000000000000000000000000000000000000000000 +IV=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=FE3C53653E2F45B56FCD88B2CC898FF0 + +I=1 +KEY=B2493DE29713367D9FAA93469F8EF596FE3C53653E2F45B56FCD88B2CC898FF0 +IV=FE3C53653E2F45B56FCD88B2CC898FF0 +PT=B2493DE29713367D9FAA93469F8EF596 +CT=7CE2ABAF8BEF23C4816DC8CE842048A7 + +I=2 +KEY=33A36646FE56F70DC0C51A3117E639F182DEF8CAB5C06671EEA0407C48A9C757 +IV=7CE2ABAF8BEF23C4816DC8CE842048A7 +PT=81EA5BA46945C1705F6F89778868CC67 +CT=50CD14A12C6852D39654C816BFAF9AC2 + +I=3 +KEY=0D6A3DACE75B104CA8A303A32670BF3AD213EC6B99A834A278F4886AF7065D95 +IV=50CD14A12C6852D39654C816BFAF9AC2 +PT=3EC95BEA190DE74168661992319686CB +CT=3F411DAD0E339FE281637133BF46BD13 + +I=4 +KEY=A53BE0709BF686A7DB7C3848D81AB66BED52F1C6979BAB40F997F9594840E086 +IV=3F411DAD0E339FE281637133BF46BD13 +PT=A851DDDC7CAD96EB73DF3BEBFE6A0951 +CT=5BA2C7663A4061719A7CCC2AF2A3EE8A + +I=5 +KEY=ECF3490CB7717A5236A3A94811BEBF13B6F036A0ADDBCA3163EB3573BAE30E0C +IV=5BA2C7663A4061719A7CCC2AF2A3EE8A +PT=49C8A97C2C87FCF5EDDF9100C9A40978 +CT=F105031CE7E5111317745C64F4F6D150 + +I=6 +KEY=CE8A062A2A9F9EDE2EFB43A8602BB47847F535BC4A3EDB22749F69174E15DF5C +IV=F105031CE7E5111317745C64F4F6D150 +PT=22794F269DEEE48C1858EAE071950B6B +CT=C8F030398A873550A34386D9A153D833 + +I=7 +KEY=2BE39545B8FC27444178BF0004C7F1048F050585C0B9EE72D7DCEFCEEF46076F +IV=C8F030398A873550A34386D9A153D833 +PT=E569936F9263B99A6F83FCA864EC457C +CT=519CF42C0BBFCBD79679089BC5E963B4 + +I=8 +KEY=80E9C0F78F99E309935C0A69B961D787DE99F1A9CB0625A541A5E7552AAF64DB +IV=519CF42C0BBFCBD79679089BC5E963B4 +PT=AB0A55B23765C44DD224B569BDA62683 +CT=64AC8FEA3B83584E9B7379B48F88B7A4 + +I=9 +KEY=48DDBDA704BA7702960820A0D2CA485CBA357E43F0857DEBDAD69EE1A527D37F +IV=64AC8FEA3B83584E9B7379B48F88B7A4 +PT=C8347D508B23940B05542AC96BAB9FDB +CT=2B1F53F35A308673E9B1E004C32B2080 + +I=10 +KEY=D26C4C6BE601D63BDDE6F1A49B5124CB912A2DB0AAB5FB9833677EE5660CF3FF +IV=2B1F53F35A308673E9B1E004C32B2080 +PT=9AB1F1CCE2BBA1394BEED104499B6C97 +CT=0DAE66B5741FE38E544D9EC4E90ABDAF + +I=11 +KEY=D241355DB8FC5F23D0D207F72E290F189C844B05DEAA1816672AE0218F064E50 +IV=0DAE66B5741FE38E544D9EC4E90ABDAF +PT=002D79365EFD89180D34F653B5782BD3 +CT=D00122636CC0D9D62E614EAF0963C448 + +I=12 +KEY=1BC3268A0B674A05B2FC6E18460231564C856966B26AC1C0494BAE8E86658A18 +IV=D00122636CC0D9D62E614EAF0963C448 +PT=C98213D7B39B1526622E69EF682B3E4E +CT=30EF014D1766651C524B3CC82F0140C6 + +I=13 +KEY=50BE5951A5C2403C52425897C442A8457C6A682BA50CA4DC1B009246A964CADE +IV=30EF014D1766651C524B3CC82F0140C6 +PT=4B7D7FDBAEA50A39E0BE368F82409913 +CT=BAD488702B447FABEC2074E1DD37E631 + +I=14 +KEY=C007EE52430FF98EDD206C94ED349DE6C6BEE05B8E48DB77F720E6A774532CEF +IV=BAD488702B447FABEC2074E1DD37E631 +PT=90B9B703E6CDB9B28F623403297635A3 +CT=EC3862EB60E7D8D0827645BD690F71B8 + +I=15 +KEY=AE37C1DBEBF9B269E8D10CC4F046F9FC2A8682B0EEAF03A77556A31A1D5C5D57 +IV=EC3862EB60E7D8D0827645BD690F71B8 +PT=6E302F89A8F64BE735F160501D72641A +CT=6073D1F25F3697C1E07384C67D71D8AE + +I=16 +KEY=86E8B9050AB24200E3757B67F08761534AF55342B1999466952527DC602D85F9 +IV=6073D1F25F3697C1E07384C67D71D8AE +PT=28DF78DEE14BF0690BA477A300C198AF +CT=90EF55AB8837792F82CF0F002E36F8DB + +I=17 +KEY=DE93EA10BB6DC2B0A6D3919561CE5AE4DA1A06E939AEED4917EA28DC4E1B7D22 +IV=90EF55AB8837792F82CF0F002E36F8DB +PT=587B5315B1DF80B045A6EAF291493BB7 +CT=063783CB1A2137732D10CA6233C5CE93 + +I=18 +KEY=3D147E3727A1FEB2C6F36AB9DF772E97DC2D8522238FDA3A3AFAE2BE7DDEB3B1 +IV=063783CB1A2137732D10CA6233C5CE93 +PT=E38794279CCC3C026020FB2CBEB97473 +CT=79C5CEEE64BFD33948D2E08EBE25B7E9 + +I=19 +KEY=34586C52923969647663A0D69436D7D1A5E84BCC4730090372280230C3FB0458 +IV=79C5CEEE64BFD33948D2E08EBE25B7E9 +PT=094C1265B59897D6B090CA6F4B41F946 +CT=87DFB65D575F56670DB739C988FD7DE5 + +I=20 +KEY=53724BF79612A7F0237927604619DD592237FD91106F5F647F9F3BF94B0679BD +IV=87DFB65D575F56670DB739C988FD7DE5 +PT=672A27A5042BCE94551A87B6D22F0A88 +CT=643F46BC77A5FE2434753B9C38142583 + +I=21 +KEY=8FBC30746F29985FFFA43C8BD3C4FC664608BB2D67CAA1404BEA006573125C3E +IV=643F46BC77A5FE2434753B9C38142583 +PT=DCCE7B83F93B3FAFDCDD1BEB95DD213F +CT=FD774BD6874EA7C0D790A5015440B664 + +I=22 +KEY=9A61A910701A4A42873549F78D3D9FD1BB7FF0FBE08406809C7AA5642752EA5A +IV=FD774BD6874EA7C0D790A5015440B664 +PT=15DD99641F33D21D7891757C5EF963B7 +CT=BFCEF4403428F5C96C24C249962371D4 + +I=23 +KEY=8D98738F6DF30113AF69A7A61C1582EE04B104BBD4ACF349F05E672DB1719B8E +IV=BFCEF4403428F5C96C24C249962371D4 +PT=17F9DA9F1DE94B51285CEE5191281D3F +CT=CC79F35C41F0E6C0EB03472B1D13029E + +I=24 +KEY=976C27F1A15FF6780043636FC4777090C8C8F7E7955C15891B5D2006AC629910 +IV=CC79F35C41F0E6C0EB03472B1D13029E +PT=1AF4547ECCACF76BAF2AC4C9D862F27E +CT=0629B80F94FBC2C1984985B9F3B85BDD + +I=25 +KEY=E8934C533DED166F58D65C9E60A906A5CEE14FE801A7D7488314A5BF5FDAC2CD +IV=0629B80F94FBC2C1984985B9F3B85BDD +PT=7FFF6BA29CB2E01758953FF1A4DE7635 +CT=F2A70F4ED1A836696841D523F2650B55 + +I=26 +KEY=8116688C16D2C26D162C4D813FB267103C4640A6D00FE121EB55709CADBFC998 +IV=F2A70F4ED1A836696841D523F2650B55 +PT=698524DF2B3FD4024EFA111F5F1B61B5 +CT=A9B5565EB9B5D5DAC52BE0F449FBE11A + +I=27 +KEY=5A7062E77C6D20563AFD0BFDAAE04BE995F316F869BA34FB2E7E9068E4442882 +IV=A9B5565EB9B5D5DAC52BE0F449FBE11A +PT=DB660A6B6ABFE23B2CD1467C95522CF9 +CT=E47F675379D4CE3DDABA0F906BE014B2 + +I=28 +KEY=4DDC0A5938F4A3DC1AF8D3AFD3DF6198718C71AB106EFAC6F4C49FF88FA43C30 +IV=E47F675379D4CE3DDABA0F906BE014B2 +PT=17AC68BE4499838A2005D852793F2A71 +CT=7B95AB0E030C70B7940ECDAEFCA570A5 + +I=29 +KEY=E287EFC66626600AF3453F68BE53E5250A19DAA513628A7160CA525673014C95 +IV=7B95AB0E030C70B7940ECDAEFCA570A5 +PT=AF5BE59F5ED2C3D6E9BDECC76D8C84BD +CT=E854E5DE0C42D57B869C29FC8D5AFFF3 + +I=30 +KEY=7F3415A538F60B24A58447E1D38805B3E24D3F7B1F205F0AE6567BAAFE5BB366 +IV=E854E5DE0C42D57B869C29FC8D5AFFF3 +PT=9DB3FA635ED06B2E56C178896DDBE096 +CT=4E55EDEDC35CDEAB3BFB2B5D39871625 + +I=31 +KEY=59E5F5ECC5693DA07046636094970E8CAC18D296DC7C81A1DDAD50F7C7DCA543 +IV=4E55EDEDC35CDEAB3BFB2B5D39871625 +PT=26D1E049FD9F3684D5C22481471F0B3F +CT=3355C2CC762E58FA941E0004209CA710 + +I=32 +KEY=0B62CF7EA869036A529E9D184574CD609F4D105AAA52D95B49B350F3E7400253 +IV=3355C2CC762E58FA941E0004209CA710 +PT=52873A926D003ECA22D8FE78D1E3C3EC +CT=9B86680D69D38870268D42E78EDA2B50 + +I=33 +KEY=CEDC9CCC4DC42CB055EDC50597EE24DF04CB7857C381512B6F3E1214699A2903 +IV=9B86680D69D38870268D42E78EDA2B50 +PT=C5BE53B2E5AD2FDA0773581DD29AE9BF +CT=05DD4896F08EEAA6A53FA7BCF183F538 + +I=34 +KEY=CA30B422016C86247D75B618D19247AC011630C1330FBB8DCA01B5A89819DC3B +IV=05DD4896F08EEAA6A53FA7BCF183F538 +PT=04EC28EE4CA8AA942898731D467C6373 +CT=F81E56F4390D65C7959348A6FBD8A94E + +I=35 +KEY=B7096A2EC0259DA21ACA6DBE637A9F15F90866350A02DE4A5F92FD0E63C17575 +IV=F81E56F4390D65C7959348A6FBD8A94E +PT=7D39DE0CC1491B8667BFDBA6B2E8D8B9 +CT=4364CA2D90FA256084DF8E2FCDC62AB3 + +I=36 +KEY=436C0894D4436149EE685F0061BDF3AEBA6CAC189AF8FB2ADB4D7321AE075FC6 +IV=4364CA2D90FA256084DF8E2FCDC62AB3 +PT=F46562BA1466FCEBF4A232BE02C76CBB +CT=0991DE19A5ABE5F7E8AE24120789B9AB + +I=37 +KEY=44E1636AFF962EC4F1C446A89B9393C6B3FD72013F531EDD33E35733A98EE66D +IV=0991DE19A5ABE5F7E8AE24120789B9AB +PT=078D6BFE2BD54F8D1FAC19A8FA2E6068 +CT=0F4EF4FA608671AC5F71063CF6C1EBDE + +I=38 +KEY=44289918A9E99F859FC2F604FE38B86EBCB386FB5FD56F716C92510F5F4F0DB3 +IV=0F4EF4FA608671AC5F71063CF6C1EBDE +PT=00C9FA72567FB1416E06B0AC65AB2BA8 +CT=2D6A2A1CC9D208C16236BBC9451EC5E1 + +I=39 +KEY=BE5907C77B0939D20575F27427A2C3FE91D9ACE7960767B00EA4EAC61A51C852 +IV=2D6A2A1CC9D208C16236BBC9451EC5E1 +PT=FA719EDFD2E0A6579AB70470D99A7B90 +CT=237A8DFBA42708BBF7E540766F2059F1 + +I=40 +KEY=CD97125720F2002207AC44C456CDDF0DB2A3211C32206F0BF941AAB0757191A3 +IV=237A8DFBA42708BBF7E540766F2059F1 +PT=73CE15905BFB39F002D9B6B0716F1CF3 +CT=2D1AB5CF3E9C27ADA9FB45F15007A7BB + +I=41 +KEY=123F64F2A28C80C2F6E000F69C8E5A639FB994D30CBC48A650BAEF4125763618 +IV=2D1AB5CF3E9C27ADA9FB45F15007A7BB +PT=DFA876A5827E80E0F14C4432CA43856E +CT=7039C9AF1E10FE99A91483EA578AE6DD + +I=42 +KEY=6CD69C4F5AD7CB5E9E4574F6A48FDB28EF805D7C12ACB63FF9AE6CAB72FCD0C5 +IV=7039C9AF1E10FE99A91483EA578AE6DD +PT=7EE9F8BDF85B4B9C68A574003801814B +CT=116DD8566366A19EEAF2F3E744B3EF9C + +I=43 +KEY=C73969C7D6D057003E2E215D94978792FEED852A71CA17A1135C9F4C364F3F59 +IV=116DD8566366A19EEAF2F3E744B3EF9C +PT=ABEFF5888C079C5EA06B55AB30185CBA +CT=648A801EF27E77D964BB751A32B8CFE8 + +I=44 +KEY=E0960DD6E807F3D0B5DF057D0D1E6DCC9A67053483B4607877E7EA5604F7F0B1 +IV=648A801EF27E77D964BB751A32B8CFE8 +PT=27AF64113ED7A4D08BF124209989EA5E +CT=D18AE728717C535049868FA6F1B4294E + +I=45 +KEY=466AE043435C6CCA67FF1C5D4B4175DA4BEDE21CF2C833283E6165F0F543D9FF +IV=D18AE728717C535049868FA6F1B4294E +PT=A6FCED95AB5B9F1AD2201920465F1816 +CT=169B55360728DA8F582C488F2569411F + +I=46 +KEY=27E1BC4931601D667CD807454D58B2BB5D76B72AF5E0E9A7664D2D7FD02A98E0 +IV=169B55360728DA8F582C488F2569411F +PT=618B5C0A723C71AC1B271B180619C761 +CT=67DADCF7C31CA394F46F18AB1AEA022E + +I=47 +KEY=2D4EB1F3A709F0A4CA5E2CD47F8F10123AAC6BDD36FC4A33922235D4CAC09ACE +IV=67DADCF7C31CA394F46F18AB1AEA022E +PT=0AAF0DBA9669EDC2B6862B9132D7A2A9 +CT=A5D49BDF099335166BBFDCBE29C90B80 + +I=48 +KEY=2A90CE470EB8C9400B056307D53452BE9F78F0023F6F7F25F99DE96AE309914E +IV=A5D49BDF099335166BBFDCBE29C90B80 +PT=07DE7FB4A9B139E4C15B4FD3AABB42AC +CT=5AFC238F19E369E77278593C6E20A946 + +I=49 +KEY=90B696E9A0792BFF7BF21BE373731CB5C584D38D268C16C28BE5B0568D293808 +IV=5AFC238F19E369E77278593C6E20A946 +PT=BA2658AEAEC1E2BF70F778E4A6474E0B +CT=2861A363922099D0F0B2A5AD2A5F421E + +I=50 +KEY=4FE5C563B7DB98C6B9CCA52F313FBAFCEDE570EEB4AC8F127B5715FBA7767A16 +IV=2861A363922099D0F0B2A5AD2A5F421E +PT=DF53538A17A2B339C23EBECC424CA649 +CT=D76E51B6EA5F74D0116C4D16EDD0DFAC + +I=51 +KEY=EBF784D98E40372429819EE23BE85B723A8B21585EF3FBC26A3B58ED4AA6A5BA +IV=D76E51B6EA5F74D0116C4D16EDD0DFAC +PT=A41241BA399BAFE2904D3BCD0AD7E18E +CT=6214F5E50EC99F40B86951CE395C8315 + +I=52 +KEY=C01A5093C6A29CEED72D14D903BD17E8589FD4BD503A6482D252092373FA26AF +IV=6214F5E50EC99F40B86951CE395C8315 +PT=2BEDD44A48E2ABCAFEAC8A3B38554C9A +CT=6CFC2188E40E806BBE277988B924627E + +I=53 +KEY=A8C3A10380B6D4D1CEFABF57F3C695193463F535B434E4E96C7570ABCADE44D1 +IV=6CFC2188E40E806BBE277988B924627E +PT=68D9F1904614483F19D7AB8EF07B82F1 +CT=B98E851902AEC129FD1607DECA9E0669 + +I=54 +KEY=B828711ABA1D06408099944287112DE58DED702CB69A25C091637775004042B8 +IV=B98E851902AEC129FD1607DECA9E0669 +PT=10EBD0193AABD2914E632B1574D7B8FC +CT=DBDA9DB56E6FF915D67D7DEE541DD6A3 + +I=55 +KEY=3B0E9FE343D665ABB3706243EF023C765637ED99D8F5DCD5471E0A9B545D941B +IV=DBDA9DB56E6FF915D67D7DEE541DD6A3 +PT=8326EEF9F9CB63EB33E9F60168131193 +CT=399802CE3FF3878A73C7D85E19FDD54B + +I=56 +KEY=9270D72D972B46C8E630FBD1AA67FBED6FAFEF57E7065B5F34D9D2C54DA04150 +IV=399802CE3FF3878A73C7D85E19FDD54B +PT=A97E48CED4FD2363554099924565C79B +CT=40FABA067414961FD964EC91196943E3 + +I=57 +KEY=017211AC512541BFBDD0292385AA20862F5555519312CD40EDBD3E5454C902B3 +IV=40FABA067414961FD964EC91196943E3 +PT=9302C681C60E07775BE0D2F22FCDDB6B +CT=6BF1125E581341510FD02B9450886B17 + +I=58 +KEY=AC2652A877F924710178641D20B239B944A4470FCB018C11E26D15C0044169A4 +IV=6BF1125E581341510FD02B9450886B17 +PT=AD54430426DC65CEBCA84D3EA518193F +CT=74871D2EF6D1F29181B0A2530885EEC8 + +I=59 +KEY=0BF012A9F0CB194C1F00893D4803E10130235A213DD07E8063DDB7930CC4876C +IV=74871D2EF6D1F29181B0A2530885EEC8 +PT=A7D6400187323D3D1E78ED2068B1D8B8 +CT=2A2DC9F5CB47C94D430ECAAAB1D0811E + +I=60 +KEY=8D22EEEA013E327509E84630166331DB1A0E93D4F697B7CD20D37D39BD140672 +IV=2A2DC9F5CB47C94D430ECAAAB1D0811E +PT=86D2FC43F1F52B3916E8CF0D5E60D0DA +CT=BC318E32957CE6577CD06E2D3166CD1F + +I=61 +KEY=1C4909D11840D978FD7232D0FBC0E6A3A63F1DE663EB519A5C0313148C72CB6D +IV=BC318E32957CE6577CD06E2D3166CD1F +PT=916BE73B197EEB0DF49A74E0EDA3D778 +CT=E9858DBB1B5145ABB598ADE882346DDB + +I=62 +KEY=DD2ED3C6FCE0034F19259D57A35B60CF4FBA905D78BA1431E99BBEFC0E46A6B6 +IV=E9858DBB1B5145ABB598ADE882346DDB +PT=C167DA17E4A0DA37E457AF87589B866C +CT=1E04B15BBF727BEAC33C0C26141636DD + +I=63 +KEY=81C434CDF7EABAA49252EC86DFE15FBA51BE2106C7C86FDB2AA7B2DA1A50906B +IV=1E04B15BBF727BEAC33C0C26141636DD +PT=5CEAE70B0B0AB9EB8B7771D17CBA3F75 +CT=EB21AED731D594017F5729262A1E23B4 + +I=64 +KEY=AEF6BF8323CAE4C2270CC5E51B0A3BFFBA9F8FD1F61DFBDA55F09BFC304EB3DF +IV=EB21AED731D594017F5729262A1E23B4 +PT=2F328B4ED4205E66B55E2963C4EB6445 +CT=EB73CFADA0ACB98B37091CB81489CC7C + +I=65 +KEY=BC3BD548867FA82FF80EF67B38016A1E51EC407C56B1425162F9874424C77FA3 +IV=EB73CFADA0ACB98B37091CB81489CC7C +PT=12CD6ACBA5B54CEDDF02339E230B51E1 +CT=1FEEF226D6759E8813B98A5D43B2F22A + +I=66 +KEY=E1F5760C694DBE5688A0241B5517B4B14E02B25A80C4DCD971400D1967758D89 +IV=1FEEF226D6759E8813B98A5D43B2F22A +PT=5DCEA344EF32167970AED2606D16DEAF +CT=9C591D087F0F45C8AE3DEC9C455FE200 + +I=67 +KEY=ABF2D79C472D0159FA9AE646D0C0FC9CD25BAF52FFCB9911DF7DE185222A6F89 +IV=9C591D087F0F45C8AE3DEC9C455FE200 +PT=4A07A1902E60BF0F723AC25D85D7482D +CT=62C4F4D7E4AC5ABC03BECA3CA56DA4FD + +I=68 +KEY=E58A351A4DD79A2ED6D386E11A8563F2B09F5B851B67C3ADDCC32BB98747CB74 +IV=62C4F4D7E4AC5ABC03BECA3CA56DA4FD +PT=4E78E2860AFA9B772C4960A7CA459F6E +CT=AD8557C0D04675CC312C7A106D5C8B83 + +I=69 +KEY=BCF7BB1010AF5CEB05E06339689067E31D1A0C45CB21B661EDEF51A9EA1B40F7 +IV=AD8557C0D04675CC312C7A106D5C8B83 +PT=597D8E0A5D78C6C5D333E5D872150411 +CT=80159F4F5E0C2DC07D3CD3C52A1A8E6D + +I=70 +KEY=328BB8EB86055D2BB52A02E40BB5D2C39D0F930A952D9BA190D3826CC001CE9A +IV=80159F4F5E0C2DC07D3CD3C52A1A8E6D +PT=8E7C03FB96AA01C0B0CA61DD6325B520 +CT=F58A2EE5A5BDE8CA0A96F4F4B64BE737 + +I=71 +KEY=F192AE51D926A2B68C38EA4E48A0590F6885BDEF3090736B9A457698764A29AD +IV=F58A2EE5A5BDE8CA0A96F4F4B64BE737 +PT=C31916BA5F23FF9D3912E8AA43158BCC +CT=B4C0DD55013AEFE12D94F31B861134CC + +I=72 +KEY=5EE48E38C2C805E2AACC89AD8682E552DC4560BA31AA9C8AB7D18583F05B1D61 +IV=B4C0DD55013AEFE12D94F31B861134CC +PT=AF7620691BEEA75426F463E3CE22BC5D +CT=FD8B06AEF9B3C25D11B950A6648276BB + +I=73 +KEY=F425B9BF4D114251736EE7FCDB430B6721CE6614C8195ED7A668D52594D96BDA +IV=FD8B06AEF9B3C25D11B950A6648276BB +PT=AAC137878FD947B3D9A26E515DC1EE35 +CT=31BE8DF4A8A749FBF11AB07D8479A10B + +I=74 +KEY=61A2D5337BCB827887F884AD98C67BEA1070EBE060BE172C5772655810A0CAD1 +IV=31BE8DF4A8A749FBF11AB07D8479A10B +PT=95876C8C36DAC029F49663514385708D +CT=E9A2EF0C882781788D50033B79FE181F + +I=75 +KEY=E930B2277AC4475FB0A94519F60DE552F9D204ECE8999654DA226663695ED2CE +IV=E9A2EF0C882781788D50033B79FE181F +PT=88926714010FC5273751C1B46ECB9EB8 +CT=17FFCD5A010709A2737570E038D63B27 + +I=76 +KEY=B944CE978DF68F8FBFF0A5EA62AAC299EE2DC9B6E99E9FF6A95716835188E9E9 +IV=17FFCD5A010709A2737570E038D63B27 +PT=50747CB0F732C8D00F59E0F394A727CB +CT=E12B89FA1B1DD3B29F02219FD3D7D3D2 + +I=77 +KEY=0E2D7FCEB557462267BED2CCA8B48CD70F06404CF2834C443655371C825F3A3B +IV=E12B89FA1B1DD3B29F02219FD3D7D3D2 +PT=B769B15938A1C9ADD84E7726CA1E4E4E +CT=75AE99B6022B08E36FB88A6F4D7698BF + +I=78 +KEY=8046D73D60912221694B2AFE703EDB167AA8D9FAF0A844A759EDBD73CF29A284 +IV=75AE99B6022B08E36FB88A6F4D7698BF +PT=8E6BA8F3D5C664030EF5F832D88A57C1 +CT=CF32DCE11FDB098A6435315342796064 + +I=79 +KEY=20716D6975C32231968BF76725144CBAB59A051BEF734D2D3DD88C208D50C2E0 +IV=CF32DCE11FDB098A6435315342796064 +PT=A037BA5415520010FFC0DD99552A97AC +CT=80F12B261317C66F21AC811230848468 + +I=80 +KEY=AD5A2011E425AFFD57E7191336D37D25356B2E3DFC648B421C740D32BDD44688 +IV=80F12B261317C66F21AC811230848468 +PT=8D2B4D7891E68DCCC16CEE7413C7319F +CT=F2C6B70C19A5748C6D2B5DE41544854F + +I=81 +KEY=49D4228508C789105CF457D10FA56048C7AD9931E5C1FFCE715F50D6A890C3C7 +IV=F2C6B70C19A5748C6D2B5DE41544854F +PT=E48E0294ECE226ED0B134EC239761D6D +CT=A31FB3535978DAA555DD617FAB27A97A + +I=82 +KEY=67CE710A3E778CB4A37D1F2274D4462D64B22A62BCB9256B248231A903B76ABD +IV=A31FB3535978DAA555DD617FAB27A97A +PT=2E1A538F36B005A4FF8948F37B712665 +CT=97336ECFAE89015E0B5A7D1C154C71BF + +I=83 +KEY=A87C517EF43CACC6D41EEB661DD1142CF38144AD123024352FD84CB516FB1B02 +IV=97336ECFAE89015E0B5A7D1C154C71BF +PT=CFB22074CA4B20727763F44469055201 +CT=466CD227A6A9D5FC3C0579064530FCE0 + +I=84 +KEY=D73F926A5B5DD8F5B82DE8F77E0E0697B5ED968AB499F1C913DD35B353CBE7E2 +IV=466CD227A6A9D5FC3C0579064530FCE0 +PT=7F43C314AF6174336C33039163DF12BB +CT=4F444B4554E965A113DC0097AA8FAD7A + +I=85 +KEY=7A19BE1C42A13B85B754834E9808DF4BFAA9DDCFE070946800013524F9444A98 +IV=4F444B4554E965A113DC0097AA8FAD7A +PT=AD262C7619FCE3700F796BB9E606D9DC +CT=F7078ABE7617867274CBBEDA1082B987 + +I=86 +KEY=D256675EDBF987B5CA86C21DE177C6A00DAE57719667121A74CA8BFEE9C6F31F +IV=F7078ABE7617867274CBBEDA1082B987 +PT=A84FD9429958BC307DD24153797F19EB +CT=676ACAB66B04597F1A33FF462BD5E0EE + +I=87 +KEY=C025616AB6F89BB1B90AA0E8F63FF1CC6AC49DC7FD634B656EF974B8C21313F1 +IV=676ACAB66B04597F1A33FF462BD5E0EE +PT=127306346D011C04738C62F51748376C +CT=BF66B8DD1E540A4FED759FDB9A44B439 + +I=88 +KEY=2A437D44D93C25B3233FB168D63751A5D5A2251AE337412A838CEB635857A7C8 +IV=BF66B8DD1E540A4FED759FDB9A44B439 +PT=EA661C2E6FC4BE029A3511802008A069 +CT=EC8DBB5B3FE245180856B312D3052A87 + +I=89 +KEY=838278123F0261D1F287C9FF94CA4A55392F9E41DCD504328BDA58718B528D4F +IV=EC8DBB5B3FE245180856B312D3052A87 +PT=A9C10556E63E4462D1B8789742FD1BF0 +CT=02E1E60312BB371912C35E3EBC6EA755 + +I=90 +KEY=64F3A47C8C7CFA9FF2AC88637C598E6A3BCE7842CE6E332B9919064F373C2A1A +IV=02E1E60312BB371912C35E3EBC6EA755 +PT=E771DC6EB37E9B4E002B419CE893C43F +CT=73D7499EBB38716D71CCB737CFFFA3FB + +I=91 +KEY=585ABE6B779F22400FC2AC3B55B39E91481931DC75564246E8D5B178F8C389E1 +IV=73D7499EBB38716D71CCB737CFFFA3FB +PT=3CA91A17FBE3D8DFFD6E245829EA10FB +CT=CEE7721855B7381D369ECC1C9337BB02 + +I=92 +KEY=7BC1E883465CBBB9BA624FF99308259386FE43C420E17A5BDE4B7D646BF432E3 +IV=CEE7721855B7381D369ECC1C9337BB02 +PT=239B56E831C399F9B5A0E3C2C6BBBB02 +CT=B6F48D369383974D163E4F17FDFC59EF + +I=93 +KEY=70032AF50BB5E080D4AA7722CEDC7DA9300ACEF2B362ED16C875327396086B0C +IV=B6F48D369383974D163E4F17FDFC59EF +PT=0BC2C2764DE95B396EC838DB5DD4583A +CT=E8372DA404126C63190626D95583629D + +I=94 +KEY=5C61B59BDA2FF51D4F4F740578466EA9D83DE356B7708175D17314AAC38B0991 +IV=E8372DA404126C63190626D95583629D +PT=2C629F6ED19A159D9BE50327B69A1300 +CT=F717B53E51665D0854C895EA1D1D7E77 + +I=95 +KEY=59A35E82B9C8D8FF25CFC5BAD979A9052F2A5668E616DC7D85BB8140DE9677E6 +IV=F717B53E51665D0854C895EA1D1D7E77 +PT=05C2EB1963E72DE26A80B1BFA13FC7AC +CT=7D3EE90EEF7C16872F98296977AA9557 + +I=96 +KEY=5BC419836F7C4F57957E13E39B2181455214BF66096ACAFAAA23A829A93CE2B1 +IV=7D3EE90EEF7C16872F98296977AA9557 +PT=02674701D6B497A8B0B1D65942582840 +CT=6DCD0C4B5633078FDEA9AE24781CB212 + +I=97 +KEY=E6D2BB67584AA2FAAE1D0DAD8C9C60253FD9B32D5F59CD75748A060DD12050A3 +IV=6DCD0C4B5633078FDEA9AE24781CB212 +PT=BD16A2E43736EDAD3B631E4E17BDE160 +CT=6515251260A73AE868E992B6D49579C5 + +I=98 +KEY=57637851C3C08A2923EBD2FEA27472DC5ACC963F3FFEF79D1C6394BB05B52966 +IV=6515251260A73AE868E992B6D49579C5 +PT=B1B1C3369B8A28D38DF6DF532EE812F9 +CT=1A40C2C15F03867E81F951B545396BB4 + +I=99 +KEY=E08E94110F1E64554848AB1966299B7D408C54FE60FD71E39D9AC50E408C42D2 +IV=1A40C2C15F03867E81F951B545396BB4 +PT=B7EDEC40CCDEEE7C6BA379E7C45DE9A1 +CT=DD331F336D669EFD37106099EA51010D + +I=100 +KEY=17F2544156745EC108BF97DA806752C39DBF4BCD0D9BEF1EAA8AA597AADD43DF +IV=DD331F336D669EFD37106099EA51010D +PT=F77CC050596A3A9440F73CC3E64EC9BE +CT=0EF37EC0B6071874FF68926D98A0EEAB + +I=101 +KEY=C97ABFF115E20A6C72A6206DB63EC0FD934C350DBB9CF76A55E237FA327DAD74 +IV=0EF37EC0B6071874FF68926D98A0EEAB +PT=DE88EBB0439654AD7A19B7B73659923E +CT=DA1DAEB42178A7657A40BD72A06CEDDC + +I=102 +KEY=77AB469FBC999BB2922D460413E2012049519BB99AE4500F2FA28A88921140A8 +IV=DA1DAEB42178A7657A40BD72A06CEDDC +PT=BED1F96EA97B91DEE08B6669A5DCC1DD +CT=E78523134FC8EAA77CC85E0EEC60FCD3 + +I=103 +KEY=4F88FA6F4053B3A15094ED532C2F47DCAED4B8AAD52CBAA8536AD4867E71BC7B +IV=E78523134FC8EAA77CC85E0EEC60FCD3 +PT=3823BCF0FCCA2813C2B9AB573FCD46FC +CT=BC540D1838D7AD8E8B1C44B96684DD31 + +I=104 +KEY=D178E105443700CFEE007AB3BAA71E4C1280B5B2EDFB1726D876903F18F5614A +IV=BC540D1838D7AD8E8B1C44B96684DD31 +PT=9EF01B6A0464B36EBE9497E096885990 +CT=6C6B95A5D8F4E7F1A5864DDBFCDCEED8 + +I=105 +KEY=8F6A589BA0ED1A67FE426368A7E523047EEB2017350FF0D77DF0DDE4E4298F92 +IV=6C6B95A5D8F4E7F1A5864DDBFCDCEED8 +PT=5E12B99EE4DA1AA8104219DB1D423D48 +CT=B58C92AE19B332621E7A4E5512C88596 + +I=106 +KEY=147895B157BF16B87C32AAA17480A886CB67B2B92CBCC2B5638A93B1F6E10A04 +IV=B58C92AE19B332621E7A4E5512C88596 +PT=9B12CD2AF7520CDF8270C9C9D3658B82 +CT=4D1D90F007BB5099C382E69C9CD1F7E5 + +I=107 +KEY=4C8441FCEBBD595999864A6CC37F7EDB867A22492B07922CA008752D6A30FDE1 +IV=4D1D90F007BB5099C382E69C9CD1F7E5 +PT=58FCD44DBC024FE1E5B4E0CDB7FFD65D +CT=7F59920056EC32FA48F8A9CCCFFE437A + +I=108 +KEY=CD922EEA60F0F136A799C650F5D4B030F923B0497DEBA0D6E8F0DCE1A5CEBE9B +IV=7F59920056EC32FA48F8A9CCCFFE437A +PT=81166F168B4DA86F3E1F8C3C36ABCEEB +CT=A546F57E48A783694577D59F7FD01D9E + +I=109 +KEY=90DE3ECB26E68BDD3C4B7AB9B9CDE6195C654537354C23BFAD87097EDA1EA305 +IV=A546F57E48A783694577D59F7FD01D9E +PT=5D4C102146167AEB9BD2BCE94C195629 +CT=6342B8CB1E493F916585FF1BBFC42AB3 + +I=110 +KEY=ADF1869FEA15122394E1F6FF6B51E5DE3F27FDFC2B051C2EC802F66565DA89B6 +IV=6342B8CB1E493F916585FF1BBFC42AB3 +PT=3D2FB854CCF399FEA8AA8C46D29C03C7 +CT=052AEDF54016429320B04243E308ECFE + +I=111 +KEY=DF52D7982845CBAEB4E56592906B63943A0D10096B135EBDE8B2B42686D26548 +IV=052AEDF54016429320B04243E308ECFE +PT=72A35107C250D98D2004936DFB3A864A +CT=EE147A64DC2E31222A3A14B133769ACE + +I=112 +KEY=5D6B5899612FF15825029DEB0B37CB4ED4196A6DB73D6F9FC288A097B5A4FF86 +IV=EE147A64DC2E31222A3A14B133769ACE +PT=82398F01496A3AF691E7F8799B5CA8DA +CT=8330EF868E72D33172D7DEC7B440056C + +I=113 +KEY=FC23917C478894C9490A6585CCB8A716572985EB394FBCAEB05F7E5001E4FAEA +IV=8330EF868E72D33172D7DEC7B440056C +PT=A148C9E526A765916C08F86EC78F6C58 +CT=DC83E3727C4E9754A82BFCFFD924ACB3 + +I=114 +KEY=BCD556FA7AFA27F9675F45922924DFA68BAA669945012BFA187482AFD8C05659 +IV=DC83E3727C4E9754A82BFCFFD924ACB3 +PT=40F6C7863D72B3302E552017E59C78B0 +CT=C0B97D9320DC3E893953E1D93859D3E4 + +I=115 +KEY=A0F23A11C85F008CFEC20F76BD6751054B131B0A65DD157321276376E09985BD +IV=C0B97D9320DC3E893953E1D93859D3E4 +PT=1C276CEBB2A52775999D4AE494438EA3 +CT=8C28875C39211D01A084A59BA71D0C31 + +I=116 +KEY=2BB58C8FE9FE5BAEC5DB3F6A7EB98187C73B9C565CFC087281A3C6ED4784898C +IV=8C28875C39211D01A084A59BA71D0C31 +PT=8B47B69E21A15B223B19301CC3DED082 +CT=7865E390E8019259A117669082ED5CCC + +I=117 +KEY=6035A1AC1F0C1871EA06773DEA40B5C5BF5E7FC6B4FD9A2B20B4A07DC569D540 +IV=7865E390E8019259A117669082ED5CCC +PT=4B802D23F6F243DF2FDD485794F93442 +CT=DC7BA7C54217B8DEE966C0672DBE79CD + +I=118 +KEY=CCA70BB373BA65736D25078BB99980F66325D803F6EA22F5C9D2601AE8D7AC8D +IV=DC7BA7C54217B8DEE966C0672DBE79CD +PT=AC92AA1F6CB67D02872370B653D93533 +CT=CBB60FB6BE7240A2037CDA46DAAAC4E4 + +I=119 +KEY=E6D9E4347ABCE875CDFB026A9B1CE767A893D7B548986257CAAEBA5C327D6869 +IV=CBB60FB6BE7240A2037CDA46DAAAC4E4 +PT=2A7EEF8709068D06A0DE05E122856791 +CT=3B0863884DCFFDAAE439E3BCFC2E0491 + +I=120 +KEY=90C0678C9B9796FACBD3A9E8E40A46E6939BB43D05579FFD2E9759E0CE536CF8 +IV=3B0863884DCFFDAAE439E3BCFC2E0491 +PT=761983B8E12B7E8F0628AB827F16A181 +CT=1407CDBD04CA6450D15A276B0E45D500 + +I=121 +KEY=A3505D86BF4B95AEC0F720B4CBDF4985879C7980019DFBADFFCD7E8BC016B9F8 +IV=1407CDBD04CA6450D15A276B0E45D500 +PT=33903A0A24DC03540B24895C2FD50F63 +CT=94B64DF8376EAF94F24EB0457DF81418 + +I=122 +KEY=EAD741BA44D8637A4D49A089E4A122F2132A347836F354390D83CECEBDEEADE0 +IV=94B64DF8376EAF94F24EB0457DF81418 +PT=49871C3CFB93F6D48DBE803D2F7E6B77 +CT=6E2DE304D4A21A218291FD9B59FED9BF + +I=123 +KEY=278551B22B73239BF36E61370FFF43EA7D07D77CE2514E188F123355E410745F +IV=6E2DE304D4A21A218291FD9B59FED9BF +PT=CD5210086FAB40E1BE27C1BEEB5E6118 +CT=72A1E7B22D6B8B8C38C4CCD545466879 + +I=124 +KEY=C7046CA82928EA5AE1E6998399A090BB0FA630CECF3AC594B7D6FF80A1561C26 +IV=72A1E7B22D6B8B8C38C4CCD545466879 +PT=E0813D1A025BC9C11288F8B4965FD351 +CT=F5F1B011C644D119625733433C3DBB40 + +I=125 +KEY=82AF7079A309A3B1367E4DC8EE90B8C5FA5780DF097E148DD581CCC39D6BA766 +IV=F5F1B011C644D119625733433C3DBB40 +PT=45AB1CD18A2149EBD798D44B7730287E +CT=FDD90319FC2878AE4E23CE63C6660D1A + +I=126 +KEY=EB439411E1412BA8D6DB9F3052753D3F078E83C6F5566C239BA202A05B0DAA7C +IV=FDD90319FC2878AE4E23CE63C6660D1A +PT=69ECE46842488819E0A5D2F8BCE585FA +CT=0B3948AEFD674622289CB41E3F668A5C + +I=127 +KEY=C2FDF3EB8C01693C7FB990CE6D7F56E10CB7CB6808312A01B33EB6BE646B2020 +IV=0B3948AEFD674622289CB41E3F668A5C +PT=29BE67FA6D404294A9620FFE3F0A6BDE +CT=9F5BF60EB5CCF9D9F3A20DA569209636 + +I=128 +KEY=ECF0B5C32A3163495086894AB263166D93EC3D66BDFDD3D8409CBB1B0D4BB616 +IV=9F5BF60EB5CCF9D9F3A20DA569209636 +PT=2E0D4628A6300A752F3F1984DF1C408C +CT=3FED40A5796B3D1FF8805E5EF8922511 + +I=129 +KEY=259CAA194EE9BE90B2B1E7654CBDCD03AC017DC3C496EEC7B81CE545F5D99307 +IV=3FED40A5796B3D1FF8805E5EF8922511 +PT=C96C1FDA64D8DDD9E2376E2FFEDEDB6E +CT=2973A39E09EF5F4F42B29E6730ECC127 + +I=130 +KEY=FAAB18CE5FA7895BAA9EC69A55F690208572DE5DCD79B188FAAE7B22C5355220 +IV=2973A39E09EF5F4F42B29E6730ECC127 +PT=DF37B2D7114E37CB182F21FF194B5D23 +CT=F8C4C1A86B0665E2124CFFA9128FFEFD + +I=131 +KEY=3806BAB3764E794DF526A17BCE0112877DB61FF5A67FD46AE8E2848BD7BAACDD +IV=F8C4C1A86B0665E2124CFFA9128FFEFD +PT=C2ADA27D29E9F0165FB867E19BF782A7 +CT=90996F6629A41FC86A9520DD33AE5B3F + +I=132 +KEY=B7F781357E024140C3797D01C286E72BED2F70938FDBCBA28277A456E414F7E2 +IV=90996F6629A41FC86A9520DD33AE5B3F +PT=8FF13B86084C380D365FDC7A0C87F5AC +CT=9DAFB2F259BFD18945A0A6EFF9A81A75 + +I=133 +KEY=B67D37A8E281AFD015C38A72F5662BEE7080C261D6641A2BC7D702B91DBCED97 +IV=9DAFB2F259BFD18945A0A6EFF9A81A75 +PT=018AB69D9C83EE90D6BAF77337E0CCC5 +CT=C89F523289AE2A7C8F796C2252CB0597 + +I=134 +KEY=A47B97F34FB4A8F219ED7A59EFE40080B81F90535FCA305748AE6E9B4F77E800 +IV=C89F523289AE2A7C8F796C2252CB0597 +PT=1206A05BAD3507220C2EF02B1A822B6E +CT=3AACC4E5DE152BB1730C6D10C9A81A0A + +I=135 +KEY=E8EBBFDA61B6BC6735953F8E448B5E0282B354B681DF1BE63BA2038B86DFF20A +IV=3AACC4E5DE152BB1730C6D10C9A81A0A +PT=4C9028292E0214952C7845D7AB6F5E82 +CT=1E315BFFFDC3DA42438E683263B496DD + +I=136 +KEY=EE950FF3D603DECEE18F4ACF99A623589C820F497C1CC1A4782C6BB9E56B64D7 +IV=1E315BFFFDC3DA42438E683263B496DD +PT=067EB029B7B562A9D41A7541DD2D7D5A +CT=9B021A44CD9FF920DFE1EC97B3EE8AE4 + +I=137 +KEY=E073E1149A4A605E041167F3739F17240780150DB1833884A7CD872E5685EE33 +IV=9B021A44CD9FF920DFE1EC97B3EE8AE4 +PT=0EE6EEE74C49BE90E59E2D3CEA39347C +CT=4F62EE03D7A8337ECB3DCC0EA5444C2D + +I=138 +KEY=BF449E4B7DFA404D3F18C0266725F67248E2FB0E662B0BFA6CF04B20F3C1A21E +IV=4F62EE03D7A8337ECB3DCC0EA5444C2D +PT=5F377F5FE7B020133B09A7D514BAE156 +CT=AC8767B1E15D6D1ECACCCBF2D0FAB043 + +I=139 +KEY=3AB2898399D0F8467B37A5C916D9117AE4659CBF877666E4A63C80D2233B125D +IV=AC8767B1E15D6D1ECACCCBF2D0FAB043 +PT=85F617C8E42AB80B442F65EF71FCE708 +CT=9CA6E27F1966AE133CB7B98C2B13C1DA + +I=140 +KEY=06A09B6D5A6BCA82B26D0625F2A89FA178C37EC09E10C8F79A8B395E0828D387 +IV=9CA6E27F1966AE133CB7B98C2B13C1DA +PT=3C1212EEC3BB32C4C95AA3ECE4718EDB +CT=B7A6788E6D9886047D1450B093F5B6FE + +I=141 +KEY=79A26263675E11BE581DDEA79A20CAACCF65064EF3884EF3E79F69EE9BDD6579 +IV=B7A6788E6D9886047D1450B093F5B6FE +PT=7F02F90E3D35DB3CEA70D8826888550D +CT=5C1785DC27BC301DEAFAEF325A4CCBFD + +I=142 +KEY=21DEF781026D9ACB4108C6F9847C635F93728392D4347EEE0D6586DCC191AE84 +IV=5C1785DC27BC301DEAFAEF325A4CCBFD +PT=587C95E265338B751915185E1E5CA9F3 +CT=9577E8F6DF5921C4B518974A2F1FCF07 + +I=143 +KEY=EB000BAA170733EA4D077BDD7DA1623506056B640B6D5F2AB87D1196EE8E6183 +IV=9577E8F6DF5921C4B518974A2F1FCF07 +PT=CADEFC2B156AA9210C0FBD24F9DD016A +CT=09F8E3DA7C5E39F2F13C2B72001D1D56 + +I=144 +KEY=D56A1025AB5F7B5F943B3AECAF87A2800FFD88BE773366D849413AE4EE937CD5 +IV=09F8E3DA7C5E39F2F13C2B72001D1D56 +PT=3E6A1B8FBC5848B5D93C4131D226C0B5 +CT=7344F33968E177F3864908F02915739A + +I=145 +KEY=876077EA9BDB2134098B73CAD4411D997CB97B871FD2112BCF083214C7860F4F +IV=7344F33968E177F3864908F02915739A +PT=520A67CF30845A6B9DB049267BC6BF19 +CT=EC286360EF2A54CE894ED06ACF39970C + +I=146 +KEY=AA9943761AD545F47EBCF5CD4584C3B3909118E7F0F845E54646E27E08BF9843 +IV=EC286360EF2A54CE894ED06ACF39970C +PT=2DF9349C810E64C07737860791C5DE2A +CT=89F4BE70D36A05C84FD2124F6A69786B + +I=147 +KEY=5C285D3FD07EF5F6664B1F4C4CA771E31965A6972392402D0994F03162D6E028 +IV=89F4BE70D36A05C84FD2124F6A69786B +PT=F6B11E49CAABB00218F7EA810923B250 +CT=9A65E99C06E0744056365C4A26CD001F + +I=148 +KEY=F28851656D77922A55655DBE4610993683004F0B2572346D5FA2AC7B441BE037 +IV=9A65E99C06E0744056365C4A26CD001F +PT=AEA00C5ABD0967DC332E42F20AB7E8D5 +CT=566ECB7B317C81CF87BC483B4B6CF417 + +I=149 +KEY=62428DD3F6B04C564CA6D9DA9A9A64B3D56E8470140EB5A2D81EE4400F771420 +IV=566ECB7B317C81CF87BC483B4B6CF417 +PT=90CADCB69BC7DE7C19C38464DC8AFD85 +CT=16E3F727D2D4CC2E88C2A4B0DFEF34AF + +I=150 +KEY=78A68A0EC33E2C0198538C1EA591AF46C38D7357C6DA798C50DC40F0D098208F +IV=16E3F727D2D4CC2E88C2A4B0DFEF34AF +PT=1AE407DD358E6057D4F555C43F0BCBF5 +CT=6F6606018F5491FC43864FC29B572551 + +I=151 +KEY=4EFBCF71F7A0DA7564DAF1F0488AA933ACEB7556498EE870135A0F324BCF05DE +IV=6F6606018F5491FC43864FC29B572551 +PT=365D457F349EF674FC897DEEED1B0675 +CT=BC07194E716B4D78F64E14B6E5762439 + +I=152 +KEY=A4BBF15395604071DF929A4922A129DD10EC6C1838E5A508E5141B84AEB921E7 +IV=BC07194E716B4D78F64E14B6E5762439 +PT=EA403E2262C09A04BB486BB96A2B80EE +CT=BF1994171481FB4F84AB092F437EA9C7 + +I=153 +KEY=665F10926596E8F5691ACE10AA5075AEAFF5F80F2C645E4761BF12ABEDC78820 +IV=BF1994171481FB4F84AB092F437EA9C7 +PT=C2E4E1C1F0F6A884B688545988F15C73 +CT=254FE05D25B67D3BF6C2688F46A7FAD8 + +I=154 +KEY=15F4BA29EBAAF160AC95507FDA03D7D58ABA185209D2237C977D7A24AB6072F8 +IV=254FE05D25B67D3BF6C2688F46A7FAD8 +PT=73ABAABB8E3C1995C58F9E6F7053A27B +CT=A03B8DB2C1C9B6C574A8499C6E5869CF + +I=155 +KEY=96A760AB52E1D6A5ACFCA016E98D0BA12A8195E0C81B95B9E3D533B8C5381B37 +IV=A03B8DB2C1C9B6C574A8499C6E5869CF +PT=8353DA82B94B27C50069F069338EDC74 +CT=088F141F097F659145DE8E1EDB2300B5 + +I=156 +KEY=7C06F9EE0327C811CEE3CC3B2B492620220E81FFC164F028A60BBDA61E1B1B82 +IV=088F141F097F659145DE8E1EDB2300B5 +PT=EAA1994551C61EB4621F6C2DC2C42D81 +CT=43703327BFDAF109F6F9C5969D3C7649 + +I=157 +KEY=0F8AC1E3014DD99D1A440A693CB73B51617EB2D87EBE012150F2783083276DCB +IV=43703327BFDAF109F6F9C5969D3C7649 +PT=738C380D026A118CD4A7C65217FE1D71 +CT=BDAC873D0A674CDA98105DC3070F7BE4 + +I=158 +KEY=E595998ABEF32CABDD4A441B4042BF8BDCD235E574D94DFBC8E225F38428162F +IV=BDAC873D0A674CDA98105DC3070F7BE4 +PT=EA1F5869BFBEF536C70E4E727CF584DA +CT=A1A89122CF532FBC69E74A70F1E7346F + +I=159 +KEY=FBA3999F7BF540184E9BE7715CA8C0497D7AA4C7BB8A6247A1056F8375CF2240 +IV=A1A89122CF532FBC69E74A70F1E7346F +PT=1E360015C5066CB393D1A36A1CEA7FC2 +CT=68C2A6FF8EABE7EA05E5DD6093C00129 + +I=160 +KEY=65AF7CB5F5CEF75FEF0BF5F746D7DD7D15B80238352185ADA4E0B2E3E60F2369 +IV=68C2A6FF8EABE7EA05E5DD6093C00129 +PT=9E0CE52A8E3BB747A19012861A7F1D34 +CT=1EA92E63C6926082B04F69E658CFA478 + +I=161 +KEY=7D3BA807729873EB2021AC1817B2C7D30B112C5BF3B3E52F14AFDB05BEC08711 +IV=1EA92E63C6926082B04F69E658CFA478 +PT=1894D4B2875684B4CF2A59EF51651AAE +CT=45A943F0B6430ABA20C562469AE98A6D + +I=162 +KEY=5ECAEF5BF4EC899C7BFAEE2F50B864924EB86FAB45F0EF95346AB94324290D7C +IV=45A943F0B6430ABA20C562469AE98A6D +PT=23F1475C8674FA775BDB4237470AA341 +CT=6CDF579A8429606CC9BC56D010845954 + +I=163 +KEY=8D394BD1C8C1D1F8A67A3BA16530662A22673831C1D98FF9FDD6EF9334AD5428 +IV=6CDF579A8429606CC9BC56D010845954 +PT=D3F3A48A3C2D5864DD80D58E358802B8 +CT=96E9E19694DB9931AC09A7B6296FEAA8 + +I=164 +KEY=9ABEC4725C717368463710CB2D45774DB48ED9A7550216C851DF48251DC2BE80 +IV=96E9E19694DB9931AC09A7B6296FEAA8 +PT=17878FA394B0A290E04D2B6A48751167 +CT=176C9B9B32A539F35BDFB21B38C42134 + +I=165 +KEY=3CA1E23510949D81242F16DE0E9B2B3AA3E2423C67A72F3B0A00FA3E25069FB4 +IV=176C9B9B32A539F35BDFB21B38C42134 +PT=A61F26474CE5EEE96218061523DE5C77 +CT=06004480169FB7B6D4DBA7453A85E54D + +I=166 +KEY=2A72AA0C7EAA3113480EF57A83C272D7A5E206BC7138988DDEDB5D7B1F837AF9 +IV=06004480169FB7B6D4DBA7453A85E54D +PT=16D348396E3EAC926C21E3A48D5959ED +CT=FF2F4F6E32133CE8C70252937FE5BDA6 + +I=167 +KEY=90C0C8FC5B65BE92E643956293A70AF35ACD49D2432BA46519D90FE86066C75F +IV=FF2F4F6E32133CE8C70252937FE5BDA6 +PT=BAB262F025CF8F81AE4D601810657824 +CT=0972CCC79C412DB6FBC5918B8E6EAB7C + +I=168 +KEY=E0AF49BAC4BD146E83C884327FFB682353BF8515DF6A89D3E21C9E63EE086C23 +IV=0972CCC79C412DB6FBC5918B8E6EAB7C +PT=706F81469FD8AAFC658B1150EC5C62D0 +CT=2D8C668310308FCF7B3E325F50AA89E5 + +I=169 +KEY=E5C29451893B7B94249E89469E58DEAD7E33E396CF5A061C9922AC3CBEA2E5C6 +IV=2D8C668310308FCF7B3E325F50AA89E5 +PT=056DDDEB4D866FFAA7560D74E1A3B68E +CT=8342DD95F1040E763C82E36F8F74822F + +I=170 +KEY=4A9AD7CAFA46AE63362069120B502D33FD713E033E5E086AA5A04F5331D667E9 +IV=8342DD95F1040E763C82E36F8F74822F +PT=AF58439B737DD5F712BEE0549508F39E +CT=8CA83627884D9B7A62F096BD37C14EFF + +I=171 +KEY=21AEFC00E7CC2942F319630702ECCC6B71D90824B6139310C750D9EE06172916 +IV=8CA83627884D9B7A62F096BD37C14EFF +PT=6B342BCA1D8A8721C5390A1509BCE158 +CT=13073AB95C0C0587372564189A4C176F + +I=172 +KEY=7E615F002723795F6E37182ECC0C429E62DE329DEA1F9697F075BDF69C5B3E79 +IV=13073AB95C0C0587372564189A4C176F +PT=5FCFA300C0EF501D9D2E7B29CEE08EF5 +CT=247A01C6A7072F64CB463E6580DA222E + +I=173 +KEY=C2A25232803E901B35080B5CA64DEC2646A4335B4D18B9F33B3383931C811C57 +IV=247A01C6A7072F64CB463E6580DA222E +PT=BCC30D32A71DE9445B3F13726A41AEB8 +CT=562355D078402DA76B0CCAAC2BE63DAE + +I=174 +KEY=46C06B83AD1C5CD849C53A11C05137141087668B35589454503F493F376721F9 +IV=562355D078402DA76B0CCAAC2BE63DAE +PT=846239B12D22CCC37CCD314D661CDB32 +CT=841B1644CCE1BF9DB0D537733047DB7F + +I=175 +KEY=CB3AD5FB9E07D380841D712E7A71FC15949C70CFF9B92BC9E0EA7E4C0720FA86 +IV=841B1644CCE1BF9DB0D537733047DB7F +PT=8DFABE78331B8F58CDD84B3FBA20CB01 +CT=DE34C065627DB86A2D0AE89FB31BDA86 + +I=176 +KEY=240CFC15D60F6AE4A53D2C25BD71DD6E4AA8B0AA9BC493A3CDE096D3B43B2000 +IV=DE34C065627DB86A2D0AE89FB31BDA86 +PT=EF3629EE4808B96421205D0BC700217B +CT=38DD744B95756614261178685FBF097F + +I=177 +KEY=FAA7CBA4AAAD9576591C12233960F1C87275C4E10EB1F5B7EBF1EEBBEB84297F +IV=38DD744B95756614261178685FBF097F +PT=DEAB37B17CA2FF92FC213E0684112CA6 +CT=DC1CF4E4633355111AD09BE1C6BC1E39 + +I=178 +KEY=29E0D33A81FFDCE220D1587C36C5EB09AE6930056D82A0A6F121755A2D383746 +IV=DC1CF4E4633355111AD09BE1C6BC1E39 +PT=D347189E2B52499479CD4A5F0FA51AC1 +CT=2A5DC4E8C16753D202B638E5003AF83D + +I=179 +KEY=956C5751C5B439990A006DB1B52336E78434F4EDACE5F374F3974DBF2D02CF7B +IV=2A5DC4E8C16753D202B638E5003AF83D +PT=BC8C846B444BE57B2AD135CD83E6DDEE +CT=70F5676DC7646EA8F8A913AE6AD21949 + +I=180 +KEY=8AD9D44BC9018FD05B103360575592FEF4C193806B819DDC0B3E5E1147D0D632 +IV=70F5676DC7646EA8F8A913AE6AD21949 +PT=1FB5831A0CB5B64951105ED1E276A419 +CT=C44DA6A603A1E9C02F18123D5CAD5291 + +I=181 +KEY=DA77F2DA5CD7148B15FE8CA898C9A25E308C35266820741C24264C2C1B7D84A3 +IV=C44DA6A603A1E9C02F18123D5CAD5291 +PT=50AE269195D69B5B4EEEBFC8CF9C30A0 +CT=53C2D89EC4D5867DC79168D21C9B8755 + +I=182 +KEY=4A4FD6AED6825A2A0C2114460F029EDA634EEDB8ACF5F261E3B724FE07E603F6 +IV=53C2D89EC4D5867DC79168D21C9B8755 +PT=903824748A554EA119DF98EE97CB3C84 +CT=79B9DABE5171A614CAFDEA11637A1800 + +I=183 +KEY=29102930967275801BD019D6766FDA1A1AF73706FD845475294ACEEF649C1BF6 +IV=79B9DABE5171A614CAFDEA11637A1800 +PT=635FFF9E40F02FAA17F10D90796D44C0 +CT=8AB92FA5EA50F1185112FE4D8D2FCC21 + +I=184 +KEY=F4ABA34B232C18EAD6D367320651C374904E18A317D4A56D785830A2E9B3D7D7 +IV=8AB92FA5EA50F1185112FE4D8D2FCC21 +PT=DDBB8A7BB55E6D6ACD037EE4703E196E +CT=FB97C84040732D7B308C5959059D90A9 + +I=185 +KEY=FB140F98A79F5D5D68B80301CB7B640E6BD9D0E357A7881648D469FBEC2E477E +IV=FB97C84040732D7B308C5959059D90A9 +PT=0FBFACD384B345B7BE6B6433CD2AA77A +CT=D0D0119D500519BF5B4770C494B41680 + +I=186 +KEY=BC98221C0792D22B6EB258E57DB0D8B0BB09C17E07A291A91393193F789A51FE +IV=D0D0119D500519BF5B4770C494B41680 +PT=478C2D84A00D8F76060A5BE4B6CBBCBE +CT=94842399FC93828D30979DAD9210B827 + +I=187 +KEY=C92F345AC3CB803EA91C123F97E7005A2F8DE2E7FB31132423048492EA8AE9D9 +IV=94842399FC93828D30979DAD9210B827 +PT=75B71646C4595215C7AE4ADAEA57D8EA +CT=5BDB886E7A7DBBA8679704F13F44B981 + +I=188 +KEY=3EACAF51FEA9A9886D0B9D1B6BA8436574566A89814CA88C44938063D5CE5058 +IV=5BDB886E7A7DBBA8679704F13F44B981 +PT=F7839B0B3D6229B6C4178F24FC4F433F +CT=A2DA893257EE0F732A80FC52887A0788 + +I=189 +KEY=72E26FEDC250C5FED59FE29C966B61FAD68CE3BBD6A2A7FF6E137C315DB457D0 +IV=A2DA893257EE0F732A80FC52887A0788 +PT=4C4EC0BC3CF96C76B8947F87FDC3229F +CT=2F7877481B1162B01616C9F3268B4C44 + +I=190 +KEY=901C1268AD3582E6A9FA4C5CBB99D07EF9F494F3CDB3C54F7805B5C27B3F1B94 +IV=2F7877481B1162B01616C9F3268B4C44 +PT=E2FE7D856F6547187C65AEC02DF2B184 +CT=9FFA4AF8D0F096CC40A9F879076211E0 + +I=191 +KEY=EAF814EC49F2254E4933FAF977D7BEEC660EDE0B1D43538338AC4DBB7C5D0A74 +IV=9FFA4AF8D0F096CC40A9F879076211E0 +PT=7AE40684E4C7A7A8E0C9B6A5CC4E6E92 +CT=886097F5BC20C157A605CBEFCA5663D7 + +I=192 +KEY=8ED70BBA192093A0C9AD62E86C27091FEE6E49FEA16392D49EA98654B60B69A3 +IV=886097F5BC20C157A605CBEFCA5663D7 +PT=642F1F5650D2B6EE809E98111BF0B7F3 +CT=00DBBB84F52B3C9B28325161072753B6 + +I=193 +KEY=18280464C9E683CFFF9B75A5FD74EE96EEB5F27A5448AE4FB69BD735B12C3A15 +IV=00DBBB84F52B3C9B28325161072753B6 +PT=96FF0FDED0C6106F3636174D9153E789 +CT=714A27832B326F0A8FA745012DE4D936 + +I=194 +KEY=F464EE1298B09059016082CCC5ABC0129FFFD5F97F7AC145393C92349CC8E323 +IV=714A27832B326F0A8FA745012DE4D936 +PT=EC4CEA7651561396FEFBF76938DF2E84 +CT=5DE8A5CDBA7A6111A646AA17CA5324D4 + +I=195 +KEY=EE7301D63C482593ABB33CF4A57F1101C2177034C500A0549F7A3823569BC7F7 +IV=5DE8A5CDBA7A6111A646AA17CA5324D4 +PT=1A17EFC4A4F8B5CAAAD3BE3860D4D113 +CT=EA197ECF36E63616EBB0D9D7C1BD9A22 + +I=196 +KEY=10528506D50D143EAC40D83731DD55F0280E0EFBF3E6964274CAE1F497265DD5 +IV=EA197ECF36E63616EBB0D9D7C1BD9A22 +PT=FE2184D0E94531AD07F3E4C394A244F1 +CT=798349D56EC37993B0E131F8E3F64860 + +I=197 +KEY=438E1B672254504B972927644802ED36518D472E9D25EFD1C42BD00C74D015B5 +IV=798349D56EC37993B0E131F8E3F64860 +PT=53DC9E61F75944753B69FF5379DFB8C6 +CT=545E4CD72E74F5A91B29DDBA60BCEB5A + +I=198 +KEY=7E32F16A4E2E125A95FF9963C6F9796105D30BF9B3511A78DF020DB6146CFEEF +IV=545E4CD72E74F5A91B29DDBA60BCEB5A +PT=3DBCEA0D6C7A421102D6BE078EFB9457 +CT=084142F2C892DCF8A37A509DF0D669BC + +I=199 +KEY=B1BEC1C124A0941D0BA6C75239C17E250D92490B7BC3C6807C785D2BE4BA9753 +IV=084142F2C892DCF8A37A509DF0D669BC +PT=CF8C30AB6A8E86479E595E31FF380744 +CT=0A96C326C9D642F1F84C8772BCF8EB4A + +I=200 +KEY=80D7A5A2AE29B42143046D45B6B6B36C07048A2DB21584718434DA5958427C19 +IV=0A96C326C9D642F1F84C8772BCF8EB4A +PT=316964638A89203C48A2AA178F77CD49 +CT=273916ED09A517CE5C6A294D82E78980 + +I=201 +KEY=4D1C892DF27868BBB0FE803145C1D731203D9CC0BBB093BFD85EF314DAA5F599 +IV=273916ED09A517CE5C6A294D82E78980 +PT=CDCB2C8F5C51DC9AF3FAED74F377645D +CT=7183A7C83964ECFB2A1E44FFCFEBB7C1 + +I=202 +KEY=8C9B28041ECD5149A51207ACE38F0D0351BE3B0882D47F44F240B7EB154E4258 +IV=7183A7C83964ECFB2A1E44FFCFEBB7C1 +PT=C187A129ECB539F215EC879DA64EDA32 +CT=6015DF395D795DECA0A2F833E3614000 + +I=203 +KEY=FF175C7C745BB06E51EEDAA4F2C61E0F31ABE431DFAD22A852E24FD8F62F0258 +IV=6015DF395D795DECA0A2F833E3614000 +PT=738C74786A96E127F4FCDD081149130C +CT=B6B466B56B0E994E672072C273BA067D + +I=204 +KEY=0C84C64E1BB3B86E9AF5A8405D950B3A871F8284B4A3BBE635C23D1A85950425 +IV=B6B466B56B0E994E672072C273BA067D +PT=F3939A326FE80800CB1B72E4AF531535 +CT=C8566E37DF2E2958DDD5D2DB49889BA8 + +I=205 +KEY=5FF4C2A08B85338172D2779BF789DA234F49ECB36B8D92BEE817EFC1CC1D9F8D +IV=C8566E37DF2E2958DDD5D2DB49889BA8 +PT=537004EE90368BEFE827DFDBAA1CD119 +CT=C4A8D14DB86637E94AF515764BC7DF44 + +I=206 +KEY=BD81DE1813AEC9BAFDDC90E4A563CB338BE13DFED3EBA557A2E2FAB787DA40C9 +IV=C4A8D14DB86637E94AF515764BC7DF44 +PT=E2751CB8982BFA3B8F0EE77F52EA1110 +CT=5707495E4CBA3727FBA5D7F4F61AF35C + +I=207 +KEY=AE1B09CB7D99BAC0A71B3E83815F10A2DCE674A09F51927059472D4371C0B395 +IV=5707495E4CBA3727FBA5D7F4F61AF35C +PT=139AD7D36E37737A5AC7AE67243CDB91 +CT=C770CD182DFF66E4D6A7BFEFE2820AE1 + +I=208 +KEY=4F7491F03447293C42DE8393E7AD91741B96B9B8B2AEF4948FE092AC9342B974 +IV=C770CD182DFF66E4D6A7BFEFE2820AE1 +PT=E16F983B49DE93FCE5C5BD1066F281D6 +CT=E2044134ACD21D5AD026671BDC0CB2E4 + +I=209 +KEY=A747EF80608CED4309800CA0B1C73081F992F88C1E7CE9CE5FC6F5B74F4E0B90 +IV=E2044134ACD21D5AD026671BDC0CB2E4 +PT=E8337E7054CBC47F4B5E8F33566AA1F5 +CT=303CF7780126AD06B5272A8350639C93 + +I=210 +KEY=E5EBF5E471F2CA9F38492F604438B9C0C9AE0FF41F5A44C8EAE1DF341F2D9703 +IV=303CF7780126AD06B5272A8350639C93 +PT=42AC1A64117E27DC31C923C0F5FF8941 +CT=DACCD42953603A1321CAD9C236454598 + +I=211 +KEY=B5E5C9211A5C43F2267B4A2411FC2CC21362DBDD4C3A7EDBCB2B06F62968D29B +IV=DACCD42953603A1321CAD9C236454598 +PT=500E3CC56BAE896D1E32654455C49502 +CT=F9AB4D1D8255E83B330031EBE2ECE5C6 + +I=212 +KEY=8D78453D63A2DD8D08BF5F250F2581CFEAC996C0CE6F96E0F82B371DCB84375D +IV=F9AB4D1D8255E83B330031EBE2ECE5C6 +PT=389D8C1C79FE9E7F2EC415011ED9AD0D +CT=0F28E2D4CC948D36E18F80184A594841 + +I=213 +KEY=2E921775036404FD9939EE83C9585481E5E1741402FB1BD619A4B70581DD7F1C +IV=0F28E2D4CC948D36E18F80184A594841 +PT=A3EA524860C6D9709186B1A6C67DD54E +CT=A4756EAB45BCF716A52038C729E420C6 + +I=214 +KEY=9F86FEF42701B1D779BD46BE515680FC41941ABF4747ECC0BC848FC2A8395FDA +IV=A4756EAB45BCF716A52038C729E420C6 +PT=B114E9812465B52AE084A83D980ED47D +CT=9834425E009006673E777E3552E83D20 + +I=215 +KEY=2212046FFD03BA552089FBF7B2F3EF32D9A058E147D7EAA782F3F1F7FAD162FA +IV=9834425E009006673E777E3552E83D20 +PT=BD94FA9BDA020B825934BD49E3A56FCE +CT=AEA572D530A3694EAFF6DFDE30B80D5A + +I=216 +KEY=F73BB21F916D8011751AFDDDCD130A6477052A34777483E92D052E29CA696FA0 +IV=AEA572D530A3694EAFF6DFDE30B80D5A +PT=D529B6706C6E3A445593062A7FE0E556 +CT=86394E06B621147758CAB012852035A6 + +I=217 +KEY=EE44A367A3CDDFED7DBD980BF731B4E5F13C6432C155979E75CF9E3B4F495A06 +IV=86394E06B621147758CAB012852035A6 +PT=197F117832A05FFC08A765D63A22BE81 +CT=3CBC18C1AC02C0A7595199E08F1F552B + +I=218 +KEY=1558BABB3DCD830F693E7950F736BCADCD807CF36D5757392C9E07DBC0560F2D +IV=3CBC18C1AC02C0A7595199E08F1F552B +PT=FB1C19DC9E005CE21483E15B00070848 +CT=5A9CFD8BFE10CF7FBD0F9A3FAF6C117B + +I=219 +KEY=D083F58141F5E5AF3D5479739D55780D971C81789347984691919DE46F3A1E56 +IV=5A9CFD8BFE10CF7FBD0F9A3FAF6C117B +PT=C5DB4F3A7C3866A0546A00236A63C4A0 +CT=61A437D4E2F1C3779F1EBE906C5D2C12 + +I=220 +KEY=C60824F2DDC67623D270974E9F87BD27F6B8B6AC71B65B310E8F237403673244 +IV=61A437D4E2F1C3779F1EBE906C5D2C12 +PT=168BD1739C33938CEF24EE3D02D2C52A +CT=FC675EE1B12B47410A20CFAC23FD20EE + +I=221 +KEY=F73A715AD84DB0A6F55AD584922001920ADFE84DC09D1C7004AFECD8209A12AA +IV=FC675EE1B12B47410A20CFAC23FD20EE +PT=313255A8058BC685272A42CA0DA7BCB5 +CT=82E3FB6189716D94C8E9D30E1ECCABC4 + +I=222 +KEY=6ABBDCE21E2ECECBCAA3473897A2E178883C132C49EC71E4CC463FD63E56B96E +IV=82E3FB6189716D94C8E9D30E1ECCABC4 +PT=9D81ADB8C6637E6D3FF992BC0582E0EA +CT=BD84DCE4994B505EED71596B454BDF85 + +I=223 +KEY=0D4F68CDB9B53B08E22DDDFE4FD5FCC035B8CFC8D0A721BA213766BD7B1D66EB +IV=BD84DCE4994B505EED71596B454BDF85 +PT=67F4B42FA79BF5C3288E9AC6D8771DB8 +CT=1B3AA490C6E874BA77CE55D71789616C + +I=224 +KEY=3D8E3121698DD7E9D1835EFF5FA02DB22E826B58164F550056F9336A6C940787 +IV=1B3AA490C6E874BA77CE55D71789616C +PT=30C159ECD038ECE133AE83011075D172 +CT=D6EE171B39B5E40535FBF5A7CB4C6953 + +I=225 +KEY=1A5B2249CA785F0DB58FF5B07CCCFCDEF86C7C432FFAB1056302C6CDA7D86ED4 +IV=D6EE171B39B5E40535FBF5A7CB4C6953 +PT=27D51368A3F588E4640CAB4F236CD16C +CT=8691BE10D13B4C08246938750EE33643 + +I=226 +KEY=48AD5DEF217F83DC5039ECD1191ABE3A7EFDC253FEC1FD0D476BFEB8A93B5897 +IV=8691BE10D13B4C08246938750EE33643 +PT=52F67FA6EB07DCD1E5B6196165D642E4 +CT=E40AD0EE818639E37349E1132B138D63 + +I=227 +KEY=FEB84B0B264A8A6FB8D4DE065DA68A479AF712BD7F47C4EE34221FAB8228D5F4 +IV=E40AD0EE818639E37349E1132B138D63 +PT=B61516E4073509B3E8ED32D744BC347D +CT=6E40A22767A39C978F279D40B447099D + +I=228 +KEY=2FE79FCC3C959901BAAEE8C55B71D01FF4B7B09A18E45879BB0582EB366FDC69 +IV=6E40A22767A39C978F279D40B447099D +PT=D15FD4C71ADF136E027A36C306D75A58 +CT=C2DE8C5200F6FCBF1A4D6178909DF110 + +I=229 +KEY=C3EB1424EFD0ACDF3670C4943CB2CF5936693CC81812A4C6A148E393A6F22D79 +IV=C2DE8C5200F6FCBF1A4D6178909DF110 +PT=EC0C8BE8D34535DE8CDE2C5167C31F46 +CT=104CBECB1134CAE09B2FE8C5CE2E0901 + +I=230 +KEY=DF9F70702DA816906F3907575DF4D3032625820309266E263A670B5668DC2478 +IV=104CBECB1134CAE09B2FE8C5CE2E0901 +PT=1C746454C278BA4F5949C3C361461C5A +CT=65287F66F01AC054B1051D700EDDBF2B + +I=231 +KEY=F6C4CE3006A43EFBE18C5FF305F32C37430DFD65F93CAE728B62162666019B53 +IV=65287F66F01AC054B1051D700EDDBF2B +PT=295BBE402B0C286B8EB558A45807FF34 +CT=4933D44FD414225CB1E6951240D28150 + +I=232 +KEY=3963CE7465D89FBE550649326262DB450A3E292A2D288C2E3A84833426D31A03 +IV=4933D44FD414225CB1E6951240D28150 +PT=CFA70044637CA145B48A16C16791F772 +CT=3733351F76DE0E07581F84600E38EFDD + +I=233 +KEY=42468662273D8CB3EFAB19DBC802888B3D0D1C355BF68229629B075428EBF5DE +IV=3733351F76DE0E07581F84600E38EFDD +PT=7B25481642E5130DBAAD50E9AA6053CE +CT=F16F22EB9CCD854591AE2FC28E1D4B59 + +I=234 +KEY=E2B3E5EA6573FC8ABE4E890FA4F5502DCC623EDEC73B076CF3352896A6F6BE87 +IV=F16F22EB9CCD854591AE2FC28E1D4B59 +PT=A0F56388424E703951E590D46CF7D8A6 +CT=1D607C6E9BAD454DD5DE785F2A78F990 + +I=235 +KEY=FDB55AF96E09AF677AA4737992E13C9ED10242B05C96422126EB50C98C8E4717 +IV=1D607C6E9BAD454DD5DE785F2A78F990 +PT=1F06BF130B7A53EDC4EAFA7636146CB3 +CT=7B16B6A8F88E05F6A9A036A67CB8A2B6 + +I=236 +KEY=E546D74518CF4AA64B399EA321C570CAAA14F418A41847D78F4B666FF036E5A1 +IV=7B16B6A8F88E05F6A9A036A67CB8A2B6 +PT=18F38DBC76C6E5C1319DEDDAB3244C54 +CT=63AD66FCF9D52195CD0339443F554311 + +I=237 +KEY=2F9B91A24BEF0E503DC576E4F8D32C16C9B992E45DCD664242485F2BCF63A6B0 +IV=63AD66FCF9D52195CD0339443F554311 +PT=CADD46E7532044F676FCE847D9165CDC +CT=6293FBB897D8F0C60171BEA3072CA512 + +I=238 +KEY=97B7DF112EFFE9279D5EDF932889D84BAB2A695CCA1596844339E188C84F03A2 +IV=6293FBB897D8F0C60171BEA3072CA512 +PT=B82C4EB36510E777A09BA977D05AF45D +CT=9555D7F244448C80E965CE6AB7EF0F7B + +I=239 +KEY=39F26B429FE4111DAA984F03112B339F3E7FBEAE8E511A04AA5C2FE27FA00CD9 +IV=9555D7F244448C80E965CE6AB7EF0F7B +PT=AE45B453B11BF83A37C6909039A2EBD4 +CT=FA242C9DB2984E9EFA8CD98AE7C29D6F + +I=240 +KEY=64C6D001CB3C8AFC24A72DA11D172727C45B92333CC9549A50D0F668986291B6 +IV=FA242C9DB2984E9EFA8CD98AE7C29D6F +PT=5D34BB4354D89BE18E3F62A20C3C14B8 +CT=2998B59B0441F068D7F3FCE7AEAA6FD9 + +I=241 +KEY=FE56E2EB2434CA49D46A684DBCE2426CEDC327A83888A4F287230A8F36C8FE6F +IV=2998B59B0441F068D7F3FCE7AEAA6FD9 +PT=9A9032EAEF0840B5F0CD45ECA1F5654B +CT=A3F77BBA27BA88F33D4330EB2CC0EFBA + +I=242 +KEY=0F9B3CAD0EDFA9C429F3A005C78FE9F84E345C121F322C01BA603A641A0811D5 +IV=A3F77BBA27BA88F33D4330EB2CC0EFBA +PT=F1CDDE462AEB638DFD99C8487B6DAB94 +CT=9C751C64BCB82229ABA5130353455CCB + +I=243 +KEY=1725A4C019FB909FB1DE2ACA00E9A33DD2414076A38A0E2811C52967494D4D1E +IV=9C751C64BCB82229ABA5130353455CCB +PT=18BE986D1724395B982D8ACFC7664AC5 +CT=540DE482B7170E925FA4B429F6BCD458 + +I=244 +KEY=E2A619367235AA4611A72FD4FAF68FB3864CA4F4149D00BA4E619D4EBFF19946 +IV=540DE482B7170E925FA4B429F6BCD458 +PT=F583BDF66BCE3AD9A079051EFA1F2C8E +CT=6AADE1E1A12F5C83AF434CAD95B29678 + +I=245 +KEY=8629FB2CC8C06A07EC910681499E917FECE14515B5B25C39E122D1E32A430F3E +IV=6AADE1E1A12F5C83AF434CAD95B29678 +PT=648FE21ABAF5C041FD362955B3681ECC +CT=11308758A1C2075FEAECD260867CA343 + +I=246 +KEY=5EDD76C395D2A0D3D547CFB394B439EAFDD1C24D14705B660BCE0383AC3FAC7D +IV=11308758A1C2075FEAECD260867CA343 +PT=D8F48DEF5D12CAD439D6C932DD2AA895 +CT=14C9A904A3909A8FF44D88E22F8626DF + +I=247 +KEY=AF3FA8D6034564D7151C3933C7986CFCE9186B49B7E0C1E9FF838B6183B98AA2 +IV=14C9A904A3909A8FF44D88E22F8626DF +PT=F1E2DE159697C404C05BF680532C5516 +CT=A042D7F391A37E5A3EDB3022400EC797 + +I=248 +KEY=8ACC720216DBDBDB4C213FE65E575A09495ABCBA2643BFB3C158BB43C3B74D35 +IV=A042D7F391A37E5A3EDB3022400EC797 +PT=25F3DAD4159EBF0C593D06D599CF36F5 +CT=439FEF326223A65F7A555C6231178190 + +I=249 +KEY=F2882A52603203A71895A5870CCF7EE40AC55388446019ECBB0DE721F2A0CCA5 +IV=439FEF326223A65F7A555C6231178190 +PT=7844585076E9D87C54B49A61529824ED +CT=6FE1286C19AA3BC802F1C6C7B58DB4C4 + +I=250 +KEY=57EFB10BFC21E28397A9D5E5A533D35B65247BE45DCA2224B9FC21E6472D7861 +IV=6FE1286C19AA3BC802F1C6C7B58DB4C4 +PT=A5679B599C13E1248F3C7062A9FCADBF +CT=C38D763981392FF038573CA341DD8EA1 + +I=251 +KEY=19328A5147BC2E7C5149DA257487D734A6A90DDDDCF30DD481AB1D4506F0F6C0 +IV=C38D763981392FF038573CA341DD8EA1 +PT=4EDD3B5ABB9DCCFFC6E00FC0D1B4046F +CT=5FD553A2848C683B138D50F2741B124D + +I=252 +KEY=ED66DE43FE0F966850EF6754E21B69A0F97C5E7F587F65EF92264DB772EBE48D +IV=5FD553A2848C683B138D50F2741B124D +PT=F4545412B9B3B81401A6BD71969CBE94 +CT=910CDCBE38068A51185A879FF2B45B9C + +I=253 +KEY=E53D9016DE7DF4E2377968864B6F69F8687082C16079EFBE8A7CCA28805FBF11 +IV=910CDCBE38068A51185A879FF2B45B9C +PT=085B4E552072628A67960FD2A9740058 +CT=E0A0E68A14893501D75BC42B8EFC6F96 + +I=254 +KEY=C88C4383E2D16541765E5DB85957C59188D0644B74F0DABF5D270E030EA3D087 +IV=E0A0E68A14893501D75BC42B8EFC6F96 +PT=2DB1D3953CAC91A34127353E1238AC69 +CT=A66DD21DA627347F962A0AB7DCA887ED + +I=255 +KEY=6F01CC5C22DE71C7C2D5B429AA756A392EBDB656D2D7EEC0CB0D04B4D20B576A +IV=A66DD21DA627347F962A0AB7DCA887ED +PT=A78D8FDFC00F1486B48BE991F322AFA8 +CT=87551BC7A6B6D9B76239CB8A31FF1993 + +I=256 +KEY=DAC405506CD3779FC2400B459B7C6B6EA9E8AD9174613777A934CF3EE3F44EF9 +IV=87551BC7A6B6D9B76239CB8A31FF1993 +PT=B5C5C90C4E0D06580095BF6C31090157 +CT=B909B206A041F33EB3AC7ED481DFBA21 + +I=257 +KEY=E482333E6FBAA8427A2E30D56069E0B810E11F97D420C4491A98B1EA622BF4D8 +IV=B909B206A041F33EB3AC7ED481DFBA21 +PT=3E46366E0369DFDDB86E3B90FB158BD6 +CT=DE5E71F446794D3402400C96FBFEB93F + +I=258 +KEY=176CAD69CD20690B95DA40B95C43AC54CEBF6E639259897D18D8BD7C99D54DE7 +IV=DE5E71F446794D3402400C96FBFEB93F +PT=F3EE9E57A29AC149EFF4706C3C2A4CEC +CT=175A7C580A99E985A2FD2F185D9BAADB + +I=259 +KEY=FA4DD79A64960C8264624CDF215B54A1D9E5123B98C060F8BA259264C44EE73C +IV=175A7C580A99E985A2FD2F185D9BAADB +PT=ED217AF3A9B66589F1B80C667D18F8F5 +CT=413EB5D166C1D196F0239FF34D184013 + +I=260 +KEY=49855C1008EAF59432518A9F3807A0B398DBA7EAFE01B16E4A060D978956A72F +IV=413EB5D166C1D196F0239FF34D184013 +PT=B3C88B8A6C7CF9165633C640195CF412 +CT=69A3A63C580336296FF826600C754747 + +I=261 +KEY=849D231AE9F90F233F328BE6EE0AC180F17801D6A602874725FE2BF78523E068 +IV=69A3A63C580336296FF826600C754747 +PT=CD187F0AE113FAB70D630179D60D6133 +CT=B9AF0CA2B502C2DEB66834BD729AA528 + +I=262 +KEY=40E3F7EA3E7CFBDBF57935DBB124CF7F48D70D741300459993961F4AF7B94540 +IV=B9AF0CA2B502C2DEB66834BD729AA528 +PT=C47ED4F0D785F4F8CA4BBE3D5F2E0EFF +CT=99E16968796AB521FC460A8DF6744FA8 + +I=263 +KEY=4FDF8D16B85E527490FBE95EA34138D6D136641C6A6AF0B86FD015C701CD0AE8 +IV=99E16968796AB521FC460A8DF6744FA8 +PT=0F3C7AFC8622A9AF6582DC851265F7A9 +CT=7B871B0153657949D1FE7259E16791B7 + +I=264 +KEY=6AD7099EA6DC50F5CC836C3EB934CF92AAB17F1D390F89F1BE2E679EE0AA9B5F +IV=7B871B0153657949D1FE7259E16791B7 +PT=250884881E8202815C7885601A75F744 +CT=8D6B80EAC01BF7E204A79DD14BFDB71A + +I=265 +KEY=0860DD776AD2014ED90D0837A5A298B627DAFFF7F9147E13BA89FA4FAB572C45 +IV=8D6B80EAC01BF7E204A79DD14BFDB71A +PT=62B7D4E9CC0E51BB158E64091C965724 +CT=DAD6A83408559AD3003C6995DC099303 + +I=266 +KEY=9E8757199D96CA08B9C3CEF817E902B8FD0C57C3F141E4C0BAB593DA775EBF46 +IV=DAD6A83408559AD3003C6995DC099303 +PT=96E78A6EF744CB4660CEC6CFB24B9A0E +CT=AA6EF32AFC8AA6ADCDE86D86CC59AFB4 + +I=267 +KEY=483AD9696154B929F35016B648F5952B5762A4E90DCB426D775DFE5CBB0710F2 +IV=AA6EF32AFC8AA6ADCDE86D86CC59AFB4 +PT=D6BD8E70FCC273214A93D84E5F1C9793 +CT=713F9516A55FBFA4AE8155EC12A3AB5D + +I=268 +KEY=027B7F5F83B26099A4CE8FCC1AB84529265D31FFA894FDC9D9DCABB0A9A4BBAF +IV=713F9516A55FBFA4AE8155EC12A3AB5D +PT=4A41A636E2E6D9B0579E997A524DD002 +CT=B2E4BEAF6DB84214E379B89697191379 + +I=269 +KEY=D7AEFAD28855BB04A9604527F8376CAF94B98F50C52CBFDD3AA513263EBDA8D6 +IV=B2E4BEAF6DB84214E379B89697191379 +PT=D5D5858D0BE7DB9D0DAECAEBE28F2986 +CT=9FE3B8941D9F85B1400CC45B7BDE8E9F + +I=270 +KEY=B5EBE7CB901F69E61EC6F011E6A46A2E0B5A37C4D8B33A6C7AA9D77D45632649 +IV=9FE3B8941D9F85B1400CC45B7BDE8E9F +PT=62451D19184AD2E2B7A6B5361E930681 +CT=E9ABFC5563B4AD1718EF4A91F7D60913 + +I=271 +KEY=571805B63BC20F5784AF56FDB71CBCD7E2F1CB91BB07977B62469DECB2B52F5A +IV=E9ABFC5563B4AD1718EF4A91F7D60913 +PT=E2F3E27DABDD66B19A69A6EC51B8D6F9 +CT=D825DC1C8C73A84BDFEFD9799D9E3960 + +I=272 +KEY=9EED79D9ABB11094FB4475ED2EC042133AD4178D37743F30BDA944952F2B163A +IV=D825DC1C8C73A84BDFEFD9799D9E3960 +PT=C9F57C6F90731FC37FEB231099DCFEC4 +CT=7D0DC4C31259FD0A46D2D2282F1FE22E + +I=273 +KEY=EF905E20846E064A3B3281FD2BD59AB647D9D34E252DC23AFB7B96BD0034F414 +IV=7D0DC4C31259FD0A46D2D2282F1FE22E +PT=717D27F92FDF16DEC076F4100515D8A5 +CT=93FAFC16EFF504A9D2B791A272A78135 + +I=274 +KEY=8F219C67ACF0F1C745FA0ABBADE96015D4232F58CAD8C69329CC071F72937521 +IV=93FAFC16EFF504A9D2B791A272A78135 +PT=60B1C247289EF78D7EC88B46863CFAA3 +CT=EF387517F8C781A79700C8196DCA6F1A + +I=275 +KEY=48C6408FD8FA84D30DD53B83B31C425D3B1B5A4F321F4734BECCCF061F591A3B +IV=EF387517F8C781A79700C8196DCA6F1A +PT=C7E7DCE8740A7514482F31381EF52248 +CT=A6166002C7239645D55494BB64840B26 + +I=276 +KEY=1C9EB0648715CA5738A4FD27A63693A09D0D3A4DF53CD1716B985BBD7BDD111D +IV=A6166002C7239645D55494BB64840B26 +PT=5458F0EB5FEF4E843571C6A4152AD1FD +CT=FB35646B2008AD29AFF508B94179F223 + +I=277 +KEY=4AA2E4BAC74E8CD9AEA969550D27877866385E26D5347C58C46D53043AA4E33E +IV=FB35646B2008AD29AFF508B94179F223 +PT=563C54DE405B468E960D9472AB1114D8 +CT=59C1692D4598AD622B6586A06892E11D + +I=278 +KEY=B9F5A3BAAA0C2F6EA5E835F6E6E5D50E3FF9370B90ACD13AEF08D5A452360223 +IV=59C1692D4598AD622B6586A06892E11D +PT=F35747006D42A3B70B415CA3EBC25276 +CT=3131E251A6A4AC7226A1809553198AB8 + +I=279 +KEY=EF46814F8656D3D8ABAF3B08EFEBC3150EC8D55A36087D48C9A95531012F889B +IV=3131E251A6A4AC7226A1809553198AB8 +PT=56B322F52C5AFCB60E470EFE090E161B +CT=2E30D8D5B7B636307A6D354FBED41A2D + +I=280 +KEY=3DFBE0FE20F0421CAABD62E2CDB0E60F20F80D8F81BE4B78B3C4607EBFFB92B6 +IV=2E30D8D5B7B636307A6D354FBED41A2D +PT=D2BD61B1A6A691C4011259EA225B251A +CT=6D791952F9416FC09B78517A2FFE986F + +I=281 +KEY=5197CF05753D155C5B08A5EB51B82F2D4D8114DD78FF24B828BC310490050AD9 +IV=6D791952F9416FC09B78517A2FFE986F +PT=6C6C2FFB55CD5740F1B5C7099C08C922 +CT=37A8E0B9375AD5669A396D980D68D0F3 + +I=282 +KEY=B3EFE2F914264AAAB7C7FD9C4843619E7A29F4644FA5F1DEB2855C9C9D6DDA2A +IV=37A8E0B9375AD5669A396D980D68D0F3 +PT=E2782DFC611B5FF6ECCF587719FB4EB3 +CT=BC65630DB71EE8DA2194E5DFBC48360E + +I=283 +KEY=CAAB7758FF4AFF39A98C2202A26165CFC64C9769F8BB19049311B9432125EC24 +IV=BC65630DB71EE8DA2194E5DFBC48360E +PT=794495A1EB6CB5931E4BDF9EEA220451 +CT=9C47136C1B510BFCEFA7F6659BDA08C2 + +I=284 +KEY=CC38852E17544DB004372C4A3AA3DFDB5A0B8405E3EA12F87CB64F26BAFFE4E6 +IV=9C47136C1B510BFCEFA7F6659BDA08C2 +PT=0693F276E81EB289ADBB0E4898C2BA14 +CT=68AC57D13EC53C250FEBFC64B1992B1C + +I=285 +KEY=108FE55553F353DFABD421E15A18C9F532A7D3D4DD2F2EDD735DB3420B66CFFA +IV=68AC57D13EC53C250FEBFC64B1992B1C +PT=DCB7607B44A71E6FAFE30DAB60BB162E +CT=9A8C11E031E57B77138A3637784D1D71 + +I=286 +KEY=C432EA6E854DE8C191C6F0ED4A2BF1D7A82BC234ECCA55AA60D78575732BD28B +IV=9A8C11E031E57B77138A3637784D1D71 +PT=D4BD0F3BD6BEBB1E3A12D10C10333822 +CT=3BBB1E76A491A5AA145ED931BB886333 + +I=287 +KEY=980941D5FEFD458061B1B443E39818299390DC42485BF00074895C44C8A3B1B8 +IV=3BBB1E76A491A5AA145ED931BB886333 +PT=5C3BABBB7BB0AD41F07744AEA9B3E9FE +CT=F79F1B46F57BDD36B58DDA33619D3920 + +I=288 +KEY=B4FF33FB094612B6A3438A285C3AEA41640FC704BD202D36C1048677A93E8898 +IV=F79F1B46F57BDD36B58DDA33619D3920 +PT=2CF6722EF7BB5736C2F23E6BBFA2F268 +CT=F1C3ED72D0B6D917DD6F8AE86CFD8CBF + +I=289 +KEY=BC81027596771F9C591BE6C61762B1E795CC2A766D96F4211C6B0C9FC5C30427 +IV=F1C3ED72D0B6D917DD6F8AE86CFD8CBF +PT=087E318E9F310D2AFA586CEE4B585BA6 +CT=EAF1AACEEB9F9BE0E880911BFEEAC2AC + +I=290 +KEY=D41458000DDED43B83DAA81B1D7FFB597F3D80B886096FC1F4EB9D843B29C68B +IV=EAF1AACEEB9F9BE0E880911BFEEAC2AC +PT=68955A759BA9CBA7DAC14EDD0A1D4ABE +CT=7B35179E67E9B40346F7DE6356EDC98F + +I=291 +KEY=FACDC2B3BA9E125B2A734DE75F99F48C04089726E1E0DBC2B21C43E76DC40F04 +IV=7B35179E67E9B40346F7DE6356EDC98F +PT=2ED99AB3B740C660A9A9E5FC42E60FD5 +CT=0EDE849D7E56B296B12C1EDF37436A8D + +I=292 +KEY=E73022253439EB4464CE0B205BBB0F1F0AD613BB9FB6695403305D385A876589 +IV=0EDE849D7E56B296B12C1EDF37436A8D +PT=1DFDE0968EA7F91F4EBD46C70422FB93 +CT=D02F1EAF3CF6A6B681BAF8ECB921FFC4 + +I=293 +KEY=9F3671205266DC4F7C771EBA74265F36DAF90D14A340CFE2828AA5D4E3A69A4D +IV=D02F1EAF3CF6A6B681BAF8ECB921FFC4 +PT=78065305665F370B18B9159A2F9D5029 +CT=E365BE1A125C6930DFDCBB33E6937EC5 + +I=294 +KEY=111A3E012C9D5CB2967E8BD22907D6F7399CB30EB11CA6D25D561EE70535E488 +IV=E365BE1A125C6930DFDCBB33E6937EC5 +PT=8E2C4F217EFB80FDEA0995685D2189C1 +CT=C5B24EEC5CDD17AA56838B09EC4AB725 + +I=295 +KEY=15DA3EE4EE9A560B05493FFC971713A5FC2EFDE2EDC1B1780BD595EEE97F53AD +IV=C5B24EEC5CDD17AA56838B09EC4AB725 +PT=04C000E5C2070AB99337B42EBE10C552 +CT=4D8A43CD28BBCB86953FA55A409BF130 + +I=296 +KEY=2C8B30484D954192818342F3766C1415B1A4BE2FC57A7AFE9EEA30B4A9E4A29D +IV=4D8A43CD28BBCB86953FA55A409BF130 +PT=39510EACA30F179984CA7D0FE17B07B0 +CT=A524A6329E6DCE041F72459234ECDE78 + +I=297 +KEY=0F162BAD5F298EE0B0164CFED6A7AC271480181D5B17B4FA819875269D087CE5 +IV=A524A6329E6DCE041F72459234ECDE78 +PT=239D1BE512BCCF7231950E0DA0CBB832 +CT=90BBC5130D1C06182F737FE7F0FCD00D + +I=298 +KEY=62744CA02B6684D05A91F2049D403480843BDD0E560BB2E2AEEB0AC16DF4ACE8 +IV=90BBC5130D1C06182F737FE7F0FCD00D +PT=6D62670D744F0A30EA87BEFA4BE798A7 +CT=35F293EDDEC8D9446A4ACD34602839B5 + +I=299 +KEY=21F5373DA5D6BF15BC163383F62EA92FB1C94EE388C36BA6C4A1C7F50DDC955D +IV=35F293EDDEC8D9446A4ACD34602839B5 +PT=43817B9D8EB03BC5E687C1876B6E9DAF +CT=E45CF478D7C84325143165F58B041A13 + +I=300 +KEY=4CF4A508B4DF37A831916353620DC1F45595BA9B5F0B2883D090A20086D88F4E +IV=E45CF478D7C84325143165F58B041A13 +PT=6D019235110988BD8D8750D0942368DB +CT=964983C30745D7EEA1BD5E287DAC466C + +I=301 +KEY=35C99C004D01E89F94A9B3BC79C492D7C3DC3958584EFF6D712DFC28FB74C922 +IV=964983C30745D7EEA1BD5E287DAC466C +PT=793D3908F9DEDF37A538D0EF1BC95323 +CT=6834813D8403A963AD36C1A18CA605C0 + +I=302 +KEY=F185723D6A2D2A6F9F4B9194A444AA2AABE8B865DC4D560EDC1B3D8977D2CCE2 +IV=6834813D8403A963AD36C1A18CA605C0 +PT=C44CEE3D272CC2F00BE22228DD8038FD +CT=61F35AA76E1E0EC2D5E4F4F432B68260 + +I=303 +KEY=B571B0BC6CFD2BA23611FB9A900A31FACA1BE2C2B25358CC09FFC97D45644E82 +IV=61F35AA76E1E0EC2D5E4F4F432B68260 +PT=44F4C28106D001CDA95A6A0E344E9BD0 +CT=DD081A96602E6665B860466B8D14050E + +I=304 +KEY=2A5757156C596DE633D0D8908011C3771713F854D27D3EA9B19F8F16C8704B8C +IV=DD081A96602E6665B860466B8D14050E +PT=9F26E7A900A4464405C1230A101BF28D +CT=5BF18EA3D7F3ED1D941EA1B995313B98 + +I=305 +KEY=DA008B517FA48E908A72B8525CC31AEF4CE276F7058ED3B425812EAF5D417014 +IV=5BF18EA3D7F3ED1D941EA1B995313B98 +PT=F057DC4413FDE376B9A260C2DCD2D998 +CT=74C361B6A13013E9ABF6841601513539 + +I=306 +KEY=E313244DC22AC16C1D59AC494AA728D738211741A4BEC05D8E77AAB95C10452D +IV=74C361B6A13013E9ABF6841601513539 +PT=3913AF1CBD8E4FFC972B141B16643238 +CT=9937614570FD404D5B39BA43D3A20602 + +I=307 +KEY=92A7173E943CBA80AF56203552625E8AA1167604D4438010D54E10FA8FB2432F +IV=9937614570FD404D5B39BA43D3A20602 +PT=71B4337356167BECB20F8C7C18C5765D +CT=726FCDDF8E6738B51D767828EBDFC71E + +I=308 +KEY=242C75C141A58DC403020E52421BB347D379BBDB5A24B8A5C83868D2646D8431 +IV=726FCDDF8E6738B51D767828EBDFC71E +PT=B68B62FFD5993744AC542E671079EDCD +CT=78F735344BF10EED47969F1C02ECBF8C + +I=309 +KEY=5247008C3EB79AA67E5D2E0B95D0AC3AAB8E8EEF11D5B6488FAEF7CE66813BBD +IV=78F735344BF10EED47969F1C02ECBF8C +PT=766B754D7F1217627D5F2059D7CB1F7D +CT=7D6A6CA54B084105DF6A778A4913BB04 + +I=310 +KEY=06E7C1A6C8BC6A3355A86F61B41E70C6D6E4E24A5ADDF74D50C480442F9280B9 +IV=7D6A6CA54B084105DF6A778A4913BB04 +PT=54A0C12AF60BF0952BF5416A21CEDCFC +CT=11F0A303D6C0ED5E18F40248AF1A794B + +I=311 +KEY=D7722746B58D494BE9B97F586CA4BB0AC71441498C1D1A134830820C8088F9F2 +IV=11F0A303D6C0ED5E18F40248AF1A794B +PT=D195E6E07D312378BC111039D8BACBCC +CT=2A715E8AC7101415E65EBF34CC4CD786 + +I=312 +KEY=98B1E5954DE8000B6FFFE98D918B6237ED651FC34B0D0E06AE6E3D384CC42E74 +IV=2A715E8AC7101415E65EBF34CC4CD786 +PT=4FC3C2D3F8654940864696D5FD2FD93D +CT=965E8AF93D390E424C9F4F1FBF9D98A5 + +I=313 +KEY=74B910207ACD1D7C801724D53ED6BBC47B3B953A76340044E2F17227F359B6D1 +IV=965E8AF93D390E424C9F4F1FBF9D98A5 +PT=EC08F5B537251D77EFE8CD58AF5DD9F3 +CT=294782DD29C65B6C445C5D92F50E6D19 + +I=314 +KEY=3E1AD36FDCC33F6B3425B5D52717845E527C17E75FF25B28A6AD2FB50657DBC8 +IV=294782DD29C65B6C445C5D92F50E6D19 +PT=4AA3C34FA60E2217B432910019C13F9A +CT=E22098E7EDBEECC49FA8E31B76E925CA + +I=315 +KEY=BE9F93FE153DF61370F6709F8265DCCDB05C8F00B24CB7EC3905CCAE70BEFE02 +IV=E22098E7EDBEECC49FA8E31B76E925CA +PT=80854091C9FEC97844D3C54AA5725893 +CT=24E80C1F59A4EA36044358E0C0D4F29D + +I=316 +KEY=A790F593CFA1643BD2EB3A1AAB8176A294B4831FEBE85DDA3D46944EB06A0C9F +IV=24E80C1F59A4EA36044358E0C0D4F29D +PT=190F666DDA9C9228A21D4A8529E4AA6F +CT=63CF21803941B521532FF36F9FBFC7BD + +I=317 +KEY=0CF6F000352B4B583E4AEE707D111DC9F77BA29FD2A9E8FB6E6967212FD5CB22 +IV=63CF21803941B521532FF36F9FBFC7BD +PT=AB660593FA8A2F63ECA1D46AD6906B6B +CT=250941C1D45C82B0D9C381293CDD833A + +I=318 +KEY=1F875BCF1967857990EC97864B1EA9F8D272E35E06F56A4BB7AAE60813084818 +IV=250941C1D45C82B0D9C381293CDD833A +PT=1371ABCF2C4CCE21AEA679F6360FB431 +CT=8303B962DAFC4A225C0FD6EA60D29CF4 + +I=319 +KEY=42FE25BF51418FE7A7C7A1828219E1DB51715A3CDC092069EBA530E273DAD4EC +IV=8303B962DAFC4A225C0FD6EA60D29CF4 +PT=5D797E7048260A9E372B3604C9074823 +CT=29E2DB359FAB42C0A83A4059A059CB51 + +I=320 +KEY=6C821A4893FE0EAC88FC1F98BD44AD0A7893810943A262A9439F70BBD3831FBD +IV=29E2DB359FAB42C0A83A4059A059CB51 +PT=2E7C3FF7C2BF814B2F3BBE1A3F5D4CD1 +CT=02BDB7EC18279FA9B7788D95FEB4000E + +I=321 +KEY=411670D389D0A04859FDC26DE5AAD1297A2E36E55B85FD00F4E7FD2E2D371FB3 +IV=02BDB7EC18279FA9B7788D95FEB4000E +PT=2D946A9B1A2EAEE4D101DDF558EE7C23 +CT=3960A92A34967F13B754F2265A6F68C1 + +I=322 +KEY=851BCD18F6043DE625BBEA33E1E860E3434E9FCF6F13821343B30F0877587772 +IV=3960A92A34967F13B754F2265A6F68C1 +PT=C40DBDCB7FD49DAE7C46285E0442B1CA +CT=EF396AB8613AC6083932734D38869458 + +I=323 +KEY=1944F363F3143A380F26BD4831A6BD9EAC77F5770E29441B7A817C454FDEE32A +IV=EF396AB8613AC6083932734D38869458 +PT=9C5F3E7B051007DE2A9D577BD04EDD7D +CT=CB73B8D257CC1A8235E48DA0E6AECC4E + +I=324 +KEY=C2F3C203F591C78914E31BA1E083AB9867044DA559E55E994F65F1E5A9702F64 +IV=CB73B8D257CC1A8235E48DA0E6AECC4E +PT=DBB731600685FDB11BC5A6E9D1251606 +CT=3B0B12757B5D1B6E0130FCC306E9DBAA + +I=325 +KEY=0DCB66B972631AFBB1DA22F1418EE1C45C0F5FD022B845F74E550D26AF99F4CE +IV=3B0B12757B5D1B6E0130FCC306E9DBAA +PT=CF38A4BA87F2DD72A5393950A10D4A5C +CT=CCEF4079CE8FAF0E6B8CD4C8751059E1 + +I=326 +KEY=8FF976D3C735506D86A3540664F1C40590E01FA9EC37EAF925D9D9EEDA89AD2F +IV=CCEF4079CE8FAF0E6B8CD4C8751059E1 +PT=8232106AB5564A96377976F7257F25C1 +CT=D835D2FA5583D9B2C16424960163DF7F + +I=327 +KEY=3499925B26E4F846CAA230EC069F127F48D5CD53B9B4334BE4BDFD78DBEA7250 +IV=D835D2FA5583D9B2C16424960163DF7F +PT=BB60E488E1D1A82B4C0164EA626ED67A +CT=4634485DB5D9C40FA2F6EF36E477F0B7 + +I=328 +KEY=7A133EEC3DD747FE38A3370F8927A3C70EE1850E0C6DF744464B124E3F9D82E7 +IV=4634485DB5D9C40FA2F6EF36E477F0B7 +PT=4E8AACB71B33BFB8F20107E38FB8B1B8 +CT=AE30CD2A5D84CEF10B9C15EE1FE20CEB + +I=329 +KEY=F573665345317BAB5F14881777A0D789A0D1482451E939B54DD707A0207F8E0C +IV=AE30CD2A5D84CEF10B9C15EE1FE20CEB +PT=8F6058BF78E63C5567B7BF18FE87744E +CT=B3926CDE5BFB1363DCCA28CDA2DC4CD8 + +I=330 +KEY=FEFB661FA786BF2DA1B70FD7D06B86E8134324FA0A122AD6911D2F6D82A3C2D4 +IV=B3926CDE5BFB1363DCCA28CDA2DC4CD8 +PT=0B88004CE2B7C486FEA387C0A7CB5161 +CT=633388FA9EAE0DB2036F63CB2E21C266 + +I=331 +KEY=BFC495DFBA60078708D992724C9201577070AC0094BC276492724CA6AC8200B2 +IV=633388FA9EAE0DB2036F63CB2E21C266 +PT=413FF3C01DE6B8AAA96E9DA59CF987BF +CT=54ACB838D247D26A1544B2E42F18CF3F + +I=332 +KEY=EB0113E4FFE1201B59EAE94706B2571F24DC143846FBF50E8736FE42839ACF8D +IV=54ACB838D247D26A1544B2E42F18CF3F +PT=54C5863B4581279C51337B354A205648 +CT=B9210B8A8639CA5C94A1CF1169F89DDB + +I=333 +KEY=0E1D5F7873FD6440227C5529AEB4C7999DFD1FB2C0C23F5213973153EA625256 +IV=B9210B8A8639CA5C94A1CF1169F89DDB +PT=E51C4C9C8C1C445B7B96BC6EA8069086 +CT=8990488561B43B03CF9FE631E2E7D5E7 + +I=334 +KEY=8B2759471137DBF37906B394EFEF96D2146D5737A1760451DC08D762088587B1 +IV=8990488561B43B03CF9FE631E2E7D5E7 +PT=853A063F62CABFB35B7AE6BD415B514B +CT=9DCE77D8CCC0F041FA717C28474E9A30 + +I=335 +KEY=0D4B29E8D6F39CA01BC01CE73E2834C689A320EF6DB6F4102679AB4A4FCB1D81 +IV=9DCE77D8CCC0F041FA717C28474E9A30 +PT=866C70AFC7C4475362C6AF73D1C7A214 +CT=E1DA174FE5848D21735E55B91CA48A9B + +I=336 +KEY=55228F6FF93B7DE9304CD75991C133A5687937A0883279315527FEF3536F971A +IV=E1DA174FE5848D21735E55B91CA48A9B +PT=5869A6872FC8E1492B8CCBBEAFE90763 +CT=C578F53AD69AD508711E674F8DD2A843 + +I=337 +KEY=35CA943437046860F72A1F8554127676AD01C29A5EA8AC39243999BCDEBD3F59 +IV=C578F53AD69AD508711E674F8DD2A843 +PT=60E81B5BCE3F1589C766C8DCC5D345D3 +CT=177A50196260D3F0A3F97423899EBEE2 + +I=338 +KEY=B8C3B8414C112FC2E2E848733D5CF69CBA7B92833CC87FC987C0ED9F572381BB +IV=177A50196260D3F0A3F97423899EBEE2 +PT=8D092C757B1547A215C257F6694E80EA +CT=6B03A799C51C7D0A9D3C9929617E69B1 + +I=339 +KEY=E82B651AE5740119104FE3284CE780E4D178351AF9D402C31AFC74B6365DE80A +IV=6B03A799C51C7D0A9D3C9929617E69B1 +PT=50E8DD5BA9652EDBF2A7AB5B71BB7678 +CT=8D4C7C1157422E7B6DDA47C5C2C246F4 + +I=340 +KEY=3C0B660F2B78F768812AC671D3107AD85C34490BAE962CB877263373F49FAEFE +IV=8D4C7C1157422E7B6DDA47C5C2C246F4 +PT=D4200315CE0CF671916525599FF7FA3C +CT=787B3C51094569BC1F139102964DF5AF + +I=341 +KEY=A197B59C700A4786E840733047964FD4244F755AA7D345046835A27162D25B51 +IV=787B3C51094569BC1F139102964DF5AF +PT=9D9CD3935B72B0EE696AB5419486350C +CT=AE02945B4E63AC35B6AC2DFA2DF3CEBA + +I=342 +KEY=00E75C4B909D44A94FA20EDA6C3628418A4DE101E9B0E931DE998F8B4F2195EB +IV=AE02945B4E63AC35B6AC2DFA2DF3CEBA +PT=A170E9D7E097032FA7E27DEA2BA06795 +CT=AC4AACD3597FE73F519F7CEDAFE6E000 + +I=343 +KEY=4626BE31853C15DE412EF2A42328D47326074DD2B0CF0E0E8F06F366E0C775EB +IV=AC4AACD3597FE73F519F7CEDAFE6E000 +PT=46C1E27A15A151770E8CFC7E4F1EFC32 +CT=5EB8B35708A135E041603BA323663F34 + +I=344 +KEY=1733A037E76437411F49821D948A098978BFFE85B86E3BEECE66C8C5C3A14ADF +IV=5EB8B35708A135E041603BA323663F34 +PT=51151E066258229F5E6770B9B7A2DDFA +CT=6674FB922570377334A4F22D13E95BD8 + +I=345 +KEY=8474275A2E4D5E5448EB8D34B65EE7081ECB05179D1E0C9DFAC23AE8D0481107 +IV=6674FB922570377334A4F22D13E95BD8 +PT=9347876DC929691557A20F2922D4EE81 +CT=F0E3F09C0350C0172E449A01F24AB828 + +I=346 +KEY=765AA3F4014B8475CF832DE6128F7F2DEE28F58B9E4ECC8AD486A0E92202A92F +IV=F0E3F09C0350C0172E449A01F24AB828 +PT=F22E84AE2F06DA218768A0D2A4D19825 +CT=CC156010299679ADEE9CC000FD5C90E5 + +I=347 +KEY=DD3D3AFC83B7EEBC58CE35B35719B587223D959BB7D8B5273A1A60E9DF5E39CA +IV=CC156010299679ADEE9CC000FD5C90E5 +PT=AB67990882FC6AC9974D18554596CAAA +CT=80354EDEA10038E903C4896313236CE5 + +I=348 +KEY=4764BB8C98BCF3FD4A21A370AE5432BBA208DB4516D88DCE39DEE98ACC7D552F +IV=80354EDEA10038E903C4896313236CE5 +PT=9A5981701B0B1D4112EF96C3F94D873C +CT=15140DC26F383EB99425FB51D445CC98 + +I=349 +KEY=DF729AB7D09BC85489F8AD373EBDDA70B71CD68779E0B377ADFB12DB183899B7 +IV=15140DC26F383EB99425FB51D445CC98 +PT=9816213B48273BA9C3D90E4790E9E8CB +CT=163465787010C97D3C2023D803F62556 + +I=350 +KEY=A945B0C5997C596B5155A6BCA5055127A128B3FF09F07A0A91DB31031BCEBCE1 +IV=163465787010C97D3C2023D803F62556 +PT=76372A7249E7913FD8AD0B8B9BB88B57 +CT=23E861D557EE72534C8B729240E3A54F + +I=351 +KEY=0E1C166F2B947D14D0C7E6ABD280A31E82C0D22A5E1E0859DD5043915B2D19AE +IV=23E861D557EE72534C8B729240E3A54F +PT=A759A6AAB2E8247F819240177785F239 +CT=652CA6A199D7DBC37936FCD70636989F + +I=352 +KEY=208A37149072011877E3E85B3DC7F4A7E7EC748BC7C9D39AA466BF465D1B8131 +IV=652CA6A199D7DBC37936FCD70636989F +PT=2E96217BBBE67C0CA7240EF0EF4757B9 +CT=7C29D6F4788553E3C50A48027478A98F + +I=353 +KEY=A8FFCB194C077EEED66632AEBE01652E9BC5A27FBF4C8079616CF744296328BE +IV=7C29D6F4788553E3C50A48027478A98F +PT=8875FC0DDC757FF6A185DAF583C69189 +CT=7B886FC819D625B224F2516901788E88 + +I=354 +KEY=3716969BDDBF04FF4010D4667CCA994AE04DCDB7A69AA5CB459EA62D281BA636 +IV=7B886FC819D625B224F2516901788E88 +PT=9FE95D8291B87A119676E6C8C2CBFC64 +CT=3EAB925C025F379153CE2C7191026976 + +I=355 +KEY=991D0D313717C7AC62537C8572DE094BDEE65FEBA4C5925A16508A5CB919CF40 +IV=3EAB925C025F379153CE2C7191026976 +PT=AE0B9BAAEAA8C3532243A8E30E149001 +CT=B9904B8BDF431FDDB9166086C9D3E24C + +I=356 +KEY=315772BB82A3DD286FE5891934B19434677614607B868D87AF46EADA70CA2D0C +IV=B9904B8BDF431FDDB9166086C9D3E24C +PT=A84A7F8AB5B41A840DB6F59C466F9D7F +CT=3C7029336ECCA5D352DB9D0C060D3830 + +I=357 +KEY=C99E4E6A8C1D42A9E431FF8B2A8ACA615B063D53154A2854FD9D77D676C7153C +IV=3C7029336ECCA5D352DB9D0C060D3830 +PT=F8C93CD10EBE9F818BD476921E3B5E55 +CT=4AF4290AA79EB96435D2D3FC745033D7 + +I=358 +KEY=55317B8B407B7D089ED2CEF7BE80E99111F21459B2D49130C84FA42A029726EB +IV=4AF4290AA79EB96435D2D3FC745033D7 +PT=9CAF35E1CC663FA17AE3317C940A23F0 +CT=BFCA0B6B31AAD81F1BDC743B48B7CCA4 + +I=359 +KEY=6EAE6D8B06AA25493BA3608357D71404AE381F32837E492FD393D0114A20EA4F +IV=BFCA0B6B31AAD81F1BDC743B48B7CCA4 +PT=3B9F160046D15841A571AE74E957FD95 +CT=89C1D565569A12A68B2E808AB5CFA2E3 + +I=360 +KEY=3245D7C1F5571A1329E1B2303F8A689D27F9CA57D5E45B8958BD509BFFEF48AC +IV=89C1D565569A12A68B2E808AB5CFA2E3 +PT=5CEBBA4AF3FD3F5A1242D2B3685D7C99 +CT=EC8EEAED7894646B1D1A5E058ED41178 + +I=361 +KEY=1DE05811428569D3F89CF1C01AF434AFCB7720BAAD703FE245A70E9E713B59D4 +IV=EC8EEAED7894646B1D1A5E058ED41178 +PT=2FA58FD0B7D273C0D17D43F0257E5C32 +CT=92802F392579C66AD72D2E85776720E8 + +I=362 +KEY=0A8FB6D844AB0B73C05A121085E07FFE59F70F838809F988928A201B065C793C +IV=92802F392579C66AD72D2E85776720E8 +PT=176FEEC9062E62A038C6E3D09F144B51 +CT=461DBCF9894F5319FE772F6529FBCEC0 + +I=363 +KEY=4E6818B3BBEF69FA7ABEC1EBE2E54CDC1FEAB37A0146AA916CFD0F7E2FA7B7FC +IV=461DBCF9894F5319FE772F6529FBCEC0 +PT=44E7AE6BFF446289BAE4D3FB67053322 +CT=794CA9DC41BAE95D415A6D1119582763 + +I=364 +KEY=4A1EABB13924B188441724141F1C88A966A61AA640FC43CC2DA7626F36FF909F +IV=794CA9DC41BAE95D415A6D1119582763 +PT=0476B30282CBD8723EA9E5FFFDF9C475 +CT=B761EAF5CC07651BD33D8BF93913EAE8 + +I=365 +KEY=FFE4E48F8D96710A1BE7DBE36F4905CDD1C7F0538CFB26D7FE9AE9960FEC7A77 +IV=B761EAF5CC07651BD33D8BF93913EAE8 +PT=B5FA4F3EB4B2C0825FF0FFF770558D64 +CT=0B5146EB77161E60D6D1E2FAEAE80694 + +I=366 +KEY=7A4F383AF4BB2DC6588E75EE82C7D9CFDA96B6B8FBED38B7284B0B6CE5047CE3 +IV=0B5146EB77161E60D6D1E2FAEAE80694 +PT=85ABDCB5792D5CCC4369AE0DED8EDC02 +CT=07635064CE85F6AE17961AF1F2B44469 + +I=367 +KEY=EFFE7F8BBBEC8BEC83FA199102763BEDDDF5E6DC3568CE193FDD119D17B0388A +IV=07635064CE85F6AE17961AF1F2B44469 +PT=95B147B14F57A62ADB746C7F80B1E222 +CT=3A9CD5F30C421FF333BA2C2F0A7AD07D + +I=368 +KEY=1DF51B7A35E11E2AF79E8C59094A1ECFE769332F392AD1EA0C673DB21DCAE8F7 +IV=3A9CD5F30C421FF333BA2C2F0A7AD07D +PT=F20B64F18E0D95C6746495C80B3C2522 +CT=F60032C249CF561CB02421DA189A57D1 + +I=369 +KEY=CC09FFE72A10AE27FE14934A6628AB83116901ED70E587F6BC431C680550BF26 +IV=F60032C249CF561CB02421DA189A57D1 +PT=D1FCE49D1FF1B00D098A1F136F62B54C +CT=EAD5844B160C08F9CDAA15FD5936EF26 + +I=370 +KEY=09C84CA0DA0B9FD79D3090E690BAB419FBBC85A666E98F0F71E909955C665000 +IV=EAD5844B160C08F9CDAA15FD5936EF26 +PT=C5C1B347F01B31F0632403ACF6921F9A +CT=26AD72F011133FD4CED8F38A1ABE7D73 + +I=371 +KEY=74FA53C172A2003EC5933F486FCC7BBFDD11F75677FAB0DBBF31FA1F46D82D73 +IV=26AD72F011133FD4CED8F38A1ABE7D73 +PT=7D321F61A8A99FE958A3AFAEFF76CFA6 +CT=F115FBC0D3F386527176D1DF6AD4B38A + +I=372 +KEY=0E5BA209B7BC28D184E73BD37F35C1312C040C96A4093689CE472BC02C0C9EF9 +IV=F115FBC0D3F386527176D1DF6AD4B38A +PT=7AA1F1C8C51E28EF4174049B10F9BA8E +CT=27ED0BA04734E70317BF58E11B0DD051 + +I=373 +KEY=9404D9139B6597D1F7C7519713C6CBC80BE90736E33DD18AD9F8732137014EA8 +IV=27ED0BA04734E70317BF58E11B0DD051 +PT=9A5F7B1A2CD9BF0073206A446CF30AF9 +CT=24080A577426F8F270A13F3A5F3DB546 + +I=374 +KEY=E72476BC679C8DCBAB92BBA5D48BF6D32FE10D61971B2978A9594C1B683CFBEE +IV=24080A577426F8F270A13F3A5F3DB546 +PT=7320AFAFFCF91A1A5C55EA32C74D3D1B +CT=A754CC0464E35B387435790505F2DCE5 + +I=375 +KEY=4548DE389CCAD4A65B02A9B5FE90930188B5C165F3F87240DD6C351E6DCE270B +IV=A754CC0464E35B387435790505F2DCE5 +PT=A26CA884FB56596DF09012102A1B65D2 +CT=D9AED2566884E97D081EADB45780AA7D + +I=376 +KEY=2E54365B503140D0EC9074DFA05F4B2C511B13339B7C9B3DD57298AA3A4E8D76 +IV=D9AED2566884E97D081EADB45780AA7D +PT=6B1CE863CCFB9476B792DD6A5ECFD82D +CT=9FA221E082CAD838AB4B210A8794BD8F + +I=377 +KEY=7C9FB092B8A96465076E14C575E9A8F0CEB932D319B643057E39B9A0BDDA30F9 +IV=9FA221E082CAD838AB4B210A8794BD8F +PT=52CB86C9E89824B5EBFE601AD5B6E3DC +CT=AAEA6DE5734CF14BED503512EB071C2A + +I=378 +KEY=90AB85A18F2B0255D4F43AF5E98DAA7E64535F366AFAB24E93698CB256DD2CD3 +IV=AAEA6DE5734CF14BED503512EB071C2A +PT=EC34353337826630D39A2E309C64028E +CT=1359A157B415EB63E038AB7354E6B0F2 + +I=379 +KEY=9135D4D54A1CE6BBF4F23AFDE23F537C770AFE61DEEF592D735127C1023B9C21 +IV=1359A157B415EB63E038AB7354E6B0F2 +PT=019E5174C537E4EE200600080BB2F902 +CT=0764EBDBFAE8FD447244408A5153CC3B + +I=380 +KEY=4B5F1BC60EF5DCE83474A3970EB2ABA8706E15BA2407A4690115674B5368501A +IV=0764EBDBFAE8FD447244408A5153CC3B +PT=DA6ACF1344E93A53C086996AEC8DF8D4 +CT=A31F69E0055E8D4162AC06C088925FBA + +I=381 +KEY=9DD8E8D75BE2E4D1BC70B30DAE0B375FD3717C5A2159292863B9618BDBFA0FA0 +IV=A31F69E0055E8D4162AC06C088925FBA +PT=D687F311551738398804109AA0B99CF7 +CT=EB84AC035534CDF1698E660F529E0EC7 + +I=382 +KEY=4A2B2FC8446B4C2575CFE584A490680238F5D059746DE4D90A37078489640167 +IV=EB84AC035534CDF1698E660F529E0EC7 +PT=D7F3C71F1F89A8F4C9BF56890A9B5F5D +CT=9236D37A28C2CF29237127173B93C5D5 + +I=383 +KEY=9BE42576823EEAADB34657A5CBB44B21AAC303235CAF2BF029462093B2F7C4B2 +IV=9236D37A28C2CF29237127173B93C5D5 +PT=D1CF0ABEC655A688C689B2216F242323 +CT=86C122CFA62B1356FEE33FECF598ACC9 + +I=384 +KEY=5DFC1838B052E95A948D0AC31736CBE62C0221ECFA8438A6D7A51F7F476F687B +IV=86C122CFA62B1356FEE33FECF598ACC9 +PT=C6183D4E326C03F727CB5D66DC8280C7 +CT=8A9926125B1CA354B1D7A9FED0850FEE + +I=385 +KEY=2B12FA914EE7674EADED81C47A67A1B4A69B07FEA1989BF26672B68197EA6795 +IV=8A9926125B1CA354B1D7A9FED0850FEE +PT=76EEE2A9FEB58E1439608B076D516A52 +CT=AD99A2A427BFF7A17C375DB38764EBFC + +I=386 +KEY=10607DE088CB92382089EF99B7C054280B02A55A86276C531A45EB32108E8C69 +IV=AD99A2A427BFF7A17C375DB38764EBFC +PT=3B728771C62CF5768D646E5DCDA7F59C +CT=0E141FD7D6928E7B7885638B6334947C + +I=387 +KEY=605ECCB38F9FFD9DAB2DB523313FFADB0516BA8D50B5E22862C088B973BA1815 +IV=0E141FD7D6928E7B7885638B6334947C +PT=703EB15307546FA58BA45ABA86FFAEF3 +CT=996CB8723B08B99A4959072DC8A73292 + +I=388 +KEY=C6371257BDA461F3A4D2F1ED5DD4B0B69C7A02FF6BBD5BB22B998F94BB1D2A87 +IV=996CB8723B08B99A4959072DC8A73292 +PT=A669DEE4323B9C6E0FFF44CE6CEB4A6D +CT=72966BAA5E4D7FA9129088F2C072E301 + +I=389 +KEY=DDD8877C25005F9B8336823CBF4D4B1DEEEC695535F0241B390907667B6FC986 +IV=72966BAA5E4D7FA9129088F2C072E301 +PT=1BEF952B98A43E6827E473D1E299FBAB +CT=32C321C999A2D68EA4517D332C785FC4 + +I=390 +KEY=00882DCBC6CFDED1A2ED7D9892F494A5DC2F489CAC52F2959D587A5557179642 +IV=32C321C999A2D68EA4517D332C785FC4 +PT=DD50AAB7E3CF814A21DBFFA42DB9DFB8 +CT=391D95DD63982E0A9AF3980A234DB5B9 + +I=391 +KEY=234B9097BD6519EFE106103720AC937DE532DD41CFCADC9F07ABE25F745A23FB +IV=391D95DD63982E0A9AF3980A234DB5B9 +PT=23C3BD5C7BAAC73E43EB6DAFB25807D8 +CT=D3A279EE1BABABA71DB01DC35EBA879D + +I=392 +KEY=AFF7D52D959CC7E41F1F3FF3CA2425053690A4AFD46177381A1BFF9C2AE0A466 +IV=D3A279EE1BABABA71DB01DC35EBA879D +PT=8CBC45BA28F9DE0BFE192FC4EA88B678 +CT=B4696871EE3A9D035BC32308DA5A5DA7 + +I=393 +KEY=B557440CEEB6E4EF54F6CD1B222246AC82F9CCDE3A5BEA3B41D8DC94F0BAF9C1 +IV=B4696871EE3A9D035BC32308DA5A5DA7 +PT=1AA091217B2A230B4BE9F2E8E80663A9 +CT=C5047AFD7884E0124928229AA6E72F67 + +I=394 +KEY=BF64C071FAAD2C48CB269C03563FA06147FDB62342DF0A2908F0FE0E565DD6A6 +IV=C5047AFD7884E0124928229AA6E72F67 +PT=0A33847D141BC8A79FD05118741DE6CD +CT=240D684E6BAD3FD4E41D58DB871E93CD + +I=395 +KEY=F6945509258A1584398F5438DFD679DB63F0DE6D297235FDECEDA6D5D143456B +IV=240D684E6BAD3FD4E41D58DB871E93CD +PT=49F09578DF2739CCF2A9C83B89E9D9BA +CT=F66917F0C3C67774F9263062F918DDD5 + +I=396 +KEY=A8E48107D59287ABBA374E7CE5BC28E89599C99DEAB4428915CB96B7285B98BE +IV=F66917F0C3C67774F9263062F918DDD5 +PT=5E70D40EF018922F83B81A443A6A5133 +CT=85C42456F11D0191BC4B4DD4EA0406EE + +I=397 +KEY=E4F367569F4F9114AFE937A0190C9738105DEDCB1BA94318A980DB63C25F9E50 +IV=85C42456F11D0191BC4B4DD4EA0406EE +PT=4C17E6514ADD16BF15DE79DCFCB0BFD0 +CT=D48B6C87A25C71113947569411C2186A + +I=398 +KEY=987ED2D586DA9AB08C584BBEA0478953C4D6814CB9F5320990C78DF7D39D863A +IV=D48B6C87A25C71113947569411C2186A +PT=7C8DB58319950BA423B17C1EB94B1E6B +CT=AB6957C2F3D360593E9096F3A392A701 + +I=399 +KEY=3DF2BF13B7FF97CA13567A890E11C9796FBFD68E4A265250AE571B04700F213B +IV=AB6957C2F3D360593E9096F3A392A701 +PT=A58C6DC631250D7A9F0E3137AE56402A +CT=C0FEFFF07506A0B4CD7B8B0CF25D3664 + +=========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_d_m.txt b/src/lib/crypto/crypto_tests/test/ecb_d_m.txt new file mode 100644 index 000000000..d99a69af3 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_d_m.txt @@ -0,0 +1,6024 @@ + +========================= + +FILENAME: "ecb_d_m.txt" + +Electronic Codebook (ECB) Mode - DECRYPTION +Monte Carlo Test + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========================= + +KEYSIZE=128 + +I=0 +KEY=00000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=44416AC2D1F53C583303917E6BE9EBE0 + +I=1 +KEY=44416AC2D1F53C583303917E6BE9EBE0 +CT=44416AC2D1F53C583303917E6BE9EBE0 +PT=E3FD51123B48A2E2AB1DB29894202222 + +I=2 +KEY=A7BC3BD0EABD9EBA981E23E6FFC9C9C2 +CT=E3FD51123B48A2E2AB1DB29894202222 +PT=877B88A77AEF04F05546539E17259F53 + +I=3 +KEY=20C7B37790529A4ACD587078E8EC5691 +CT=877B88A77AEF04F05546539E17259F53 +PT=C7A71C1B46261602EB1EE48FDA8155A4 + +I=4 +KEY=E760AF6CD6748C48264694F7326D0335 +CT=C7A71C1B46261602EB1EE48FDA8155A4 +PT=6B6AC8E00FAF7E045ECCFC426A137221 + +I=5 +KEY=8C0A678CD9DBF24C788A68B5587E7114 +CT=6B6AC8E00FAF7E045ECCFC426A137221 +PT=3F252821FA79AFC3F1798B343AAD41EE + +I=6 +KEY=B32F4FAD23A25D8F89F3E38162D330FA +CT=3F252821FA79AFC3F1798B343AAD41EE +PT=0B55C691E1F97205D137FF34478E5BC9 + +I=7 +KEY=B87A893CC25B2F8A58C41CB5255D6B33 +CT=0B55C691E1F97205D137FF34478E5BC9 +PT=F6CCC1CC18A3199D6427EDCA0BB2DF90 + +I=8 +KEY=4EB648F0DAF836173CE3F17F2EEFB4A3 +CT=F6CCC1CC18A3199D6427EDCA0BB2DF90 +PT=0CDD7D9734B1515C73DDA60EFF28CD89 + +I=9 +KEY=426B3567EE49674B4F3E5771D1C7792A +CT=0CDD7D9734B1515C73DDA60EFF28CD89 +PT=3E813131EDD440D9054799CEA508FF6F + +I=10 +KEY=7CEA0456039D27924A79CEBF74CF8645 +CT=3E813131EDD440D9054799CEA508FF6F +PT=8C6859BD0B6E078FAA6B686297653232 + +I=11 +KEY=F0825DEB08F3201DE012A6DDE3AAB477 +CT=8C6859BD0B6E078FAA6B686297653232 +PT=C966A4106C1DCE062D1346EB5E5133BB + +I=12 +KEY=39E4F9FB64EEEE1BCD01E036BDFB87CC +CT=C966A4106C1DCE062D1346EB5E5133BB +PT=4F4AE38B53FD7800F0E9F5C214E16F2A + +I=13 +KEY=76AE1A703713961B3DE815F4A91AE8E6 +CT=4F4AE38B53FD7800F0E9F5C214E16F2A +PT=C73A033491DC0B6A77FEA2FBCC9D305E + +I=14 +KEY=B1941944A6CF9D714A16B70F6587D8B8 +CT=C73A033491DC0B6A77FEA2FBCC9D305E +PT=C928C2A05BB44816EFBE6B13E94BC70E + +I=15 +KEY=78BCDBE4FD7BD567A5A8DC1C8CCC1FB6 +CT=C928C2A05BB44816EFBE6B13E94BC70E +PT=A7C1593E7B4BAEE5256D4081337E7CAF + +I=16 +KEY=DF7D82DA86307B8280C59C9DBFB26319 +CT=A7C1593E7B4BAEE5256D4081337E7CAF +PT=7ECD305AC27AEBFA2B8F85F9AC312638 + +I=17 +KEY=A1B0B280444A9078AB4A196413834521 +CT=7ECD305AC27AEBFA2B8F85F9AC312638 +PT=A24D1403A58B94798F5F3565ABFD3B44 + +I=18 +KEY=03FDA683E1C1040124152C01B87E7E65 +CT=A24D1403A58B94798F5F3565ABFD3B44 +PT=5B6E097B3B0E21DCC9CE9970701C7BD5 + +I=19 +KEY=5893AFF8DACF25DDEDDBB571C86205B0 +CT=5B6E097B3B0E21DCC9CE9970701C7BD5 +PT=4E21CEA52B3111AC8F6B204A1F5E65E2 + +I=20 +KEY=16B2615DF1FE347162B0953BD73C6052 +CT=4E21CEA52B3111AC8F6B204A1F5E65E2 +PT=806DDC5C37ADEEBB6FCE4730939D7A99 + +I=21 +KEY=96DFBD01C653DACA0D7ED20B44A11ACB +CT=806DDC5C37ADEEBB6FCE4730939D7A99 +PT=3462F7C6D3E071A0D3ACE7FD79149776 + +I=22 +KEY=A2BD4AC715B3AB6ADED235F63DB58DBD +CT=3462F7C6D3E071A0D3ACE7FD79149776 +PT=AF0FFF307B72284E794C8A64C30299D2 + +I=23 +KEY=0DB2B5F76EC18324A79EBF92FEB7146F +CT=AF0FFF307B72284E794C8A64C30299D2 +PT=E482B613FBCF9C4422D85E3160B1FB0F + +I=24 +KEY=E93003E4950E1F608546E1A39E06EF60 +CT=E482B613FBCF9C4422D85E3160B1FB0F +PT=FADC8EF9C95540AD69897DECAB2D50D5 + +I=25 +KEY=13EC8D1D5C5B5FCDECCF9C4F352BBFB5 +CT=FADC8EF9C95540AD69897DECAB2D50D5 +PT=2A765E237FB5230D792D455596A17118 + +I=26 +KEY=399AD33E23EE7CC095E2D91AA38ACEAD +CT=2A765E237FB5230D792D455596A17118 +PT=0887DA8012C7F95BD6ADB18D1ED3C2DB + +I=27 +KEY=311D09BE3129859B434F6897BD590C76 +CT=0887DA8012C7F95BD6ADB18D1ED3C2DB +PT=3BB831A7B6FAC3649176471012FAD1C1 + +I=28 +KEY=0AA5381987D346FFD2392F87AFA3DDB7 +CT=3BB831A7B6FAC3649176471012FAD1C1 +PT=E4F8629AB3489A0945B8B7188B953DE5 + +I=29 +KEY=EE5D5A83349BDCF69781989F2436E052 +CT=E4F8629AB3489A0945B8B7188B953DE5 +PT=1D4B0B5B321EB711939AB481239E2541 + +I=30 +KEY=F31651D806856BE7041B2C1E07A8C513 +CT=1D4B0B5B321EB711939AB481239E2541 +PT=71A368D5A33665D6FF9F33FECAFC6884 + +I=31 +KEY=82B5390DA5B30E31FB841FE0CD54AD97 +CT=71A368D5A33665D6FF9F33FECAFC6884 +PT=8ACF418080075BA23B05A52552773B84 + +I=32 +KEY=087A788D25B45593C081BAC59F239613 +CT=8ACF418080075BA23B05A52552773B84 +PT=E0E6058735F4FE765E882521D769FB41 + +I=33 +KEY=E89C7D0A1040ABE59E099FE4484A6D52 +CT=E0E6058735F4FE765E882521D769FB41 +PT=70DCE91F818DF2CDC4269F1B4EA0A465 + +I=34 +KEY=9840941591CD59285A2F00FF06EAC937 +CT=70DCE91F818DF2CDC4269F1B4EA0A465 +PT=E2F809D6DD77D72EF6DB5A82C42BF1CF + +I=35 +KEY=7AB89DC34CBA8E06ACF45A7DC2C138F8 +CT=E2F809D6DD77D72EF6DB5A82C42BF1CF +PT=0741D11DDD877957E753ECF8DB91C72B + +I=36 +KEY=7DF94CDE913DF7514BA7B6851950FFD3 +CT=0741D11DDD877957E753ECF8DB91C72B +PT=03E411012CA3B5B3CC163677D4B52456 + +I=37 +KEY=7E1D5DDFBD9E42E287B180F2CDE5DB85 +CT=03E411012CA3B5B3CC163677D4B52456 +PT=0270D90790EF8347ACFB87EB2FEC2710 + +I=38 +KEY=7C6D84D82D71C1A52B4A0719E209FC95 +CT=0270D90790EF8347ACFB87EB2FEC2710 +PT=3AE40270512374AF4022638E0A7A6D8E + +I=39 +KEY=468986A87C52B50A6B686497E873911B +CT=3AE40270512374AF4022638E0A7A6D8E +PT=8008D87E928A980FECA08CAF1EC91DDA + +I=40 +KEY=C6815ED6EED82D0587C8E838F6BA8CC1 +CT=8008D87E928A980FECA08CAF1EC91DDA +PT=1D479A54832FF1A81D30008EFDF16A34 + +I=41 +KEY=DBC6C4826DF7DCAD9AF8E8B60B4BE6F5 +CT=1D479A54832FF1A81D30008EFDF16A34 +PT=9E731FECD9A767BDA0C84B4C4D552BD3 + +I=42 +KEY=45B5DB6EB450BB103A30A3FA461ECD26 +CT=9E731FECD9A767BDA0C84B4C4D552BD3 +PT=C2211A6B16CD27C6C73A5C3C1A0132AC + +I=43 +KEY=8794C105A29D9CD6FD0AFFC65C1FFF8A +CT=C2211A6B16CD27C6C73A5C3C1A0132AC +PT=7E523DD6F25706F971F020F88FFA0CF7 + +I=44 +KEY=F9C6FCD350CA9A2F8CFADF3ED3E5F37D +CT=7E523DD6F25706F971F020F88FFA0CF7 +PT=0EDC01C6C1A8DA6A7C9EEE3587CB098E + +I=45 +KEY=F71AFD1591624045F064310B542EFAF3 +CT=0EDC01C6C1A8DA6A7C9EEE3587CB098E +PT=EE479106871DA872632794633B1ACF0E + +I=46 +KEY=195D6C13167FE8379343A5686F3435FD +CT=EE479106871DA872632794633B1ACF0E +PT=7EC1A4578D911F336184DACCCA92D943 + +I=47 +KEY=679CC8449BEEF704F2C77FA4A5A6ECBE +CT=7EC1A4578D911F336184DACCCA92D943 +PT=53715F25AE02513F181E3DECBB007803 + +I=48 +KEY=34ED976135ECA63BEAD942481EA694BD +CT=53715F25AE02513F181E3DECBB007803 +PT=304D5764B5206F8204A69D1BED11FA62 + +I=49 +KEY=04A0C00580CCC9B9EE7FDF53F3B76EDF +CT=304D5764B5206F8204A69D1BED11FA62 +PT=5A7590ADEF208BFD808499A2BFE9B011 + +I=50 +KEY=5ED550A86FEC42446EFB46F14C5EDECE +CT=5A7590ADEF208BFD808499A2BFE9B011 +PT=2502C0F68A721A93ECE8D7B6C2097BA4 + +I=51 +KEY=7BD7905EE59E58D7821391478E57A56A +CT=2502C0F68A721A93ECE8D7B6C2097BA4 +PT=1C814E26A6464086D606C7B4C6DFD85B + +I=52 +KEY=6756DE7843D81851541556F348887D31 +CT=1C814E26A6464086D606C7B4C6DFD85B +PT=9D55D6EA99BA391190068205DD9AE69C + +I=53 +KEY=FA030892DA622140C413D4F695129BAD +CT=9D55D6EA99BA391190068205DD9AE69C +PT=9D1212D0BD8C26422EEFF4DDB16B2EF3 + +I=54 +KEY=67111A4267EE0702EAFC202B2479B55E +CT=9D1212D0BD8C26422EEFF4DDB16B2EF3 +PT=54DF71E70141E1712449CDC1AC7D07F6 + +I=55 +KEY=33CE6BA566AFE673CEB5EDEA8804B2A8 +CT=54DF71E70141E1712449CDC1AC7D07F6 +PT=AF3DE6F3510978928C129CFC19FB29B4 + +I=56 +KEY=9CF38D5637A69EE142A7711691FF9B1C +CT=AF3DE6F3510978928C129CFC19FB29B4 +PT=830DB7014774C7DF870C8456BC0162AB + +I=57 +KEY=1FFE3A5770D2593EC5ABF5402DFEF9B7 +CT=830DB7014774C7DF870C8456BC0162AB +PT=6606C0A36A18BEFF33485F95B82C30E7 + +I=58 +KEY=79F8FAF41ACAE7C1F6E3AAD595D2C950 +CT=6606C0A36A18BEFF33485F95B82C30E7 +PT=4B1E64672B89056DF693E73B419E786E + +I=59 +KEY=32E69E933143E2AC00704DEED44CB13E +CT=4B1E64672B89056DF693E73B419E786E +PT=1877DEEAFF10A5A3F5E9A811BF7595BA + +I=60 +KEY=2A914079CE53470FF599E5FF6B392484 +CT=1877DEEAFF10A5A3F5E9A811BF7595BA +PT=A11A48215BF59CC53BC8A009DCA3973D + +I=61 +KEY=8B8B085895A6DBCACE5145F6B79AB3B9 +CT=A11A48215BF59CC53BC8A009DCA3973D +PT=E80535676DE8898A3624B8127EC21024 + +I=62 +KEY=638E3D3FF84E5240F875FDE4C958A39D +CT=E80535676DE8898A3624B8127EC21024 +PT=E2977A804EC9A8B03C85234AD3A95B52 + +I=63 +KEY=811947BFB687FAF0C4F0DEAE1AF1F8CF +CT=E2977A804EC9A8B03C85234AD3A95B52 +PT=D776D8BF13F736483862328571C06C61 + +I=64 +KEY=566F9F00A570CCB8FC92EC2B6B3194AE +CT=D776D8BF13F736483862328571C06C61 +PT=3AF7969F3247A0914037209556997164 + +I=65 +KEY=6C98099F97376C29BCA5CCBE3DA8E5CA +CT=3AF7969F3247A0914037209556997164 +PT=4F87DDC715CEE3A9D67645AD920DF74A + +I=66 +KEY=231FD45882F98F806AD38913AFA51280 +CT=4F87DDC715CEE3A9D67645AD920DF74A +PT=9E88CA52E6B0C160E52B23F36882DBA1 + +I=67 +KEY=BD971E0A64494EE08FF8AAE0C727C921 +CT=9E88CA52E6B0C160E52B23F36882DBA1 +PT=CAD26E5881D9D4E52C7595C773E0FDAB + +I=68 +KEY=77457052E5909A05A38D3F27B4C7348A +CT=CAD26E5881D9D4E52C7595C773E0FDAB +PT=C2D0B3D713CFCA5ABB7B9DED14429F37 + +I=69 +KEY=B595C385F65F505F18F6A2CAA085ABBD +CT=C2D0B3D713CFCA5ABB7B9DED14429F37 +PT=DD7AADA7524A4878F7C598C4CBCD9CAB + +I=70 +KEY=68EF6E22A4151827EF333A0E6B483716 +CT=DD7AADA7524A4878F7C598C4CBCD9CAB +PT=A0F33B1FCC3F4A4B0982F0823C4ED3C9 + +I=71 +KEY=C81C553D682A526CE6B1CA8C5706E4DF +CT=A0F33B1FCC3F4A4B0982F0823C4ED3C9 +PT=B22BB23CD68E8779A8C0FC9A350CB756 + +I=72 +KEY=7A37E701BEA4D5154E713616620A5389 +CT=B22BB23CD68E8779A8C0FC9A350CB756 +PT=EA4D96AC54BD8387AD36AC8C855A9D44 + +I=73 +KEY=907A71ADEA195692E3479A9AE750CECD +CT=EA4D96AC54BD8387AD36AC8C855A9D44 +PT=A3B90CFDE355723BC94999784534FA74 + +I=74 +KEY=33C37D50094C24A92A0E03E2A26434B9 +CT=A3B90CFDE355723BC94999784534FA74 +PT=55636C86A64383768CB948FF57B29322 + +I=75 +KEY=66A011D6AF0FA7DFA6B74B1DF5D6A79B +CT=55636C86A64383768CB948FF57B29322 +PT=B29CCDFD8E7BE50892F0D77DD969F97E + +I=76 +KEY=D43CDC2B217442D734479C602CBF5EE5 +CT=B29CCDFD8E7BE50892F0D77DD969F97E +PT=9CF0432822EABDF489B57EDD9CEF7FEA + +I=77 +KEY=48CC9F03039EFF23BDF2E2BDB050210F +CT=9CF0432822EABDF489B57EDD9CEF7FEA +PT=AA753B7D38E807D691005899385DC6DA + +I=78 +KEY=E2B9A47E3B76F8F52CF2BA24880DE7D5 +CT=AA753B7D38E807D691005899385DC6DA +PT=E4F0681527FA7AD3D1E7C78C03FB79FA + +I=79 +KEY=0649CC6B1C8C8226FD157DA88BF69E2F +CT=E4F0681527FA7AD3D1E7C78C03FB79FA +PT=7923AF8E50F378B9C97D2F162348025B + +I=80 +KEY=7F6A63E54C7FFA9F346852BEA8BE9C74 +CT=7923AF8E50F378B9C97D2F162348025B +PT=3BEFAB920CA31A6B8B87E11DF97B42DE + +I=81 +KEY=4485C87740DCE0F4BFEFB3A351C5DEAA +CT=3BEFAB920CA31A6B8B87E11DF97B42DE +PT=4661D6B8004611976A21C69804D102C0 + +I=82 +KEY=02E41ECF409AF163D5CE753B5514DC6A +CT=4661D6B8004611976A21C69804D102C0 +PT=B861DF2279F2AEE4FCFD7D322AD0BE2B + +I=83 +KEY=BA85C1ED39685F87293308097FC46241 +CT=B861DF2279F2AEE4FCFD7D322AD0BE2B +PT=1785745618A541F9454443FFB494F2E9 + +I=84 +KEY=AD00B5BB21CD1E7E6C774BF6CB5090A8 +CT=1785745618A541F9454443FFB494F2E9 +PT=AA7507A80B4CCF33E8B4F09E2D7004F6 + +I=85 +KEY=0775B2132A81D14D84C3BB68E620945E +CT=AA7507A80B4CCF33E8B4F09E2D7004F6 +PT=433412B8F10F81A557AC461823097FC7 + +I=86 +KEY=4441A0ABDB8E50E8D36FFD70C529EB99 +CT=433412B8F10F81A557AC461823097FC7 +PT=EC3206BDB3765876B74952C411D40373 + +I=87 +KEY=A873A61668F8089E6426AFB4D4FDE8EA +CT=EC3206BDB3765876B74952C411D40373 +PT=F7F994027D328FA3D70C9DEABD3BE733 + +I=88 +KEY=5F8A321415CA873DB32A325E69C60FD9 +CT=F7F994027D328FA3D70C9DEABD3BE733 +PT=E2A8419BF86A2408ED8D0274A5CE0E10 + +I=89 +KEY=BD22738FEDA0A3355EA7302ACC0801C9 +CT=E2A8419BF86A2408ED8D0274A5CE0E10 +PT=80FB8CD5243C89D77F503B2F16979F90 + +I=90 +KEY=3DD9FF5AC99C2AE221F70B05DA9F9E59 +CT=80FB8CD5243C89D77F503B2F16979F90 +PT=F7773137F233AE2609C2C9AC36F58224 + +I=91 +KEY=CAAECE6D3BAF84C42835C2A9EC6A1C7D +CT=F7773137F233AE2609C2C9AC36F58224 +PT=F3D0A1DADA4A009E8E4C0EF717469BCD + +I=92 +KEY=397E6FB7E1E5845AA679CC5EFB2C87B0 +CT=F3D0A1DADA4A009E8E4C0EF717469BCD +PT=0AC0FF22EB653A26A3F1F0CFE3808609 + +I=93 +KEY=33BE90950A80BE7C05883C9118AC01B9 +CT=0AC0FF22EB653A26A3F1F0CFE3808609 +PT=28FF865CE11720BB1B56EF49D7D1840D + +I=94 +KEY=1B4116C9EB979EC71EDED3D8CF7D85B4 +CT=28FF865CE11720BB1B56EF49D7D1840D +PT=001FAF58E22F5E8ED6BCC7FD581D7C2F + +I=95 +KEY=1B5EB99109B8C049C86214259760F99B +CT=001FAF58E22F5E8ED6BCC7FD581D7C2F +PT=32B41303A58AB49CB4CB2322B77383B3 + +I=96 +KEY=29EAAA92AC3274D57CA9370720137A28 +CT=32B41303A58AB49CB4CB2322B77383B3 +PT=9C52020FCDE0306C8E19CDF68FEFDF50 + +I=97 +KEY=B5B8A89D61D244B9F2B0FAF1AFFCA578 +CT=9C52020FCDE0306C8E19CDF68FEFDF50 +PT=2E3452997687D12E3A8C59B9178B09E2 + +I=98 +KEY=9B8CFA0417559597C83CA348B877AC9A +CT=2E3452997687D12E3A8C59B9178B09E2 +PT=872CF16DBB7CD6EA8EBB91A60BDE0C6F + +I=99 +KEY=1CA00B69AC29437D468732EEB3A9A0F5 +CT=872CF16DBB7CD6EA8EBB91A60BDE0C6F +PT=7862C78E3B209535E6C6BE92F5EDF42B + +I=100 +KEY=64C2CCE79709D648A0418C7C464454DE +CT=7862C78E3B209535E6C6BE92F5EDF42B +PT=9185D8487C1D2DB679A52FDA2FE5FFCD + +I=101 +KEY=F54714AFEB14FBFED9E4A3A669A1AB13 +CT=9185D8487C1D2DB679A52FDA2FE5FFCD +PT=77C3AF8C81CDB1CDEF5C0429CF3E5DA4 + +I=102 +KEY=8284BB236AD94A3336B8A78FA69FF6B7 +CT=77C3AF8C81CDB1CDEF5C0429CF3E5DA4 +PT=6F36C74290EA6332E98CD23D08AEF7F9 + +I=103 +KEY=EDB27C61FA332901DF3475B2AE31014E +CT=6F36C74290EA6332E98CD23D08AEF7F9 +PT=4A7831538FA1D32E3F8631BEFD99AA73 + +I=104 +KEY=A7CA4D327592FA2FE0B2440C53A8AB3D +CT=4A7831538FA1D32E3F8631BEFD99AA73 +PT=5D2B599D9AF9054A99C25577C9286C9E + +I=105 +KEY=FAE114AFEF6BFF657970117B9A80C7A3 +CT=5D2B599D9AF9054A99C25577C9286C9E +PT=65E4088200BCC01FCEE39C6E42082FD8 + +I=106 +KEY=9F051C2DEFD73F7AB7938D15D888E87B +CT=65E4088200BCC01FCEE39C6E42082FD8 +PT=4588E0D3AABBEFE611B9576391B903E9 + +I=107 +KEY=DA8DFCFE456CD09CA62ADA764931EB92 +CT=4588E0D3AABBEFE611B9576391B903E9 +PT=A55622F833FF271DD8A8F01CF5828FCF + +I=108 +KEY=7FDBDE067693F7817E822A6ABCB3645D +CT=A55622F833FF271DD8A8F01CF5828FCF +PT=8C954010C870B2DB7FA44E1DEBFE6DE8 + +I=109 +KEY=F34E9E16BEE3455A01266477574D09B5 +CT=8C954010C870B2DB7FA44E1DEBFE6DE8 +PT=58B7BD00ED18FC81E618807DE65305B8 + +I=110 +KEY=ABF9231653FBB9DBE73EE40AB11E0C0D +CT=58B7BD00ED18FC81E618807DE65305B8 +PT=EF82E5F4879039F2A1A4CC2F2044BD14 + +I=111 +KEY=447BC6E2D46B8029469A2825915AB119 +CT=EF82E5F4879039F2A1A4CC2F2044BD14 +PT=2B6C12307F14FD50B41D8F972B19AC76 + +I=112 +KEY=6F17D4D2AB7F7D79F287A7B2BA431D6F +CT=2B6C12307F14FD50B41D8F972B19AC76 +PT=C9B6D042CE76892D17F70D4EE00A0D79 + +I=113 +KEY=A6A104906509F454E570AAFC5A491016 +CT=C9B6D042CE76892D17F70D4EE00A0D79 +PT=1B08F9293BBFC44DDCF2C1D26A9DD00B + +I=114 +KEY=BDA9FDB95EB6301939826B2E30D4C01D +CT=1B08F9293BBFC44DDCF2C1D26A9DD00B +PT=4FD353B247048FAAA728E10C691C70CA + +I=115 +KEY=F27AAE0B19B2BFB39EAA8A2259C8B0D7 +CT=4FD353B247048FAAA728E10C691C70CA +PT=0BBB6FDBC62C428B85111BC7C93AE994 + +I=116 +KEY=F9C1C1D0DF9EFD381BBB91E590F25943 +CT=0BBB6FDBC62C428B85111BC7C93AE994 +PT=9C1A213A5772DE6C15CE7406F84BED03 + +I=117 +KEY=65DBE0EA88EC23540E75E5E368B9B440 +CT=9C1A213A5772DE6C15CE7406F84BED03 +PT=AB3DE06BBDB213D64F735CA990DC373C + +I=118 +KEY=CEE60081355E30824106B94AF865837C +CT=AB3DE06BBDB213D64F735CA990DC373C +PT=6C004A1A114E90C7903AA4A0120A2B10 + +I=119 +KEY=A2E64A9B2410A045D13C1DEAEA6FA86C +CT=6C004A1A114E90C7903AA4A0120A2B10 +PT=6405A033C294E72119A8955712548121 + +I=120 +KEY=C6E3EAA8E6844764C89488BDF83B294D +CT=6405A033C294E72119A8955712548121 +PT=AE8A3BAC7279B1BC152A5AD8EBAC3EAD + +I=121 +KEY=6869D10494FDF6D8DDBED265139717E0 +CT=AE8A3BAC7279B1BC152A5AD8EBAC3EAD +PT=4ADDA9999D2BE20D8925F39699563294 + +I=122 +KEY=22B4789D09D614D5549B21F38AC12574 +CT=4ADDA9999D2BE20D8925F39699563294 +PT=BC5CA33CB2A1A580EB92946C77A63467 + +I=123 +KEY=9EE8DBA1BB77B155BF09B59FFD671113 +CT=BC5CA33CB2A1A580EB92946C77A63467 +PT=F7ABEAD301264A3E59EABA0B9606DC92 + +I=124 +KEY=69433172BA51FB6BE6E30F946B61CD81 +CT=F7ABEAD301264A3E59EABA0B9606DC92 +PT=2566114A10BE9BF19E0910486DAB6BE5 + +I=125 +KEY=4C252038AAEF609A78EA1FDC06CAA664 +CT=2566114A10BE9BF19E0910486DAB6BE5 +PT=AF72E1B179660A1B833D9D4FC8473B6B + +I=126 +KEY=E357C189D3896A81FBD78293CE8D9D0F +CT=AF72E1B179660A1B833D9D4FC8473B6B +PT=DFF968B761D8E154B74C9D568C12008E + +I=127 +KEY=3CAEA93EB2518BD54C9B1FC5429F9D81 +CT=DFF968B761D8E154B74C9D568C12008E +PT=42DF098BCB57D0D25269E29C9BC99DE6 + +I=128 +KEY=7E71A0B579065B071EF2FD59D9560067 +CT=42DF098BCB57D0D25269E29C9BC99DE6 +PT=66C34CAAEFC2009B985D1E622FC61AB4 + +I=129 +KEY=18B2EC1F96C45B9C86AFE33BF6901AD3 +CT=66C34CAAEFC2009B985D1E622FC61AB4 +PT=150C1BF943982C5EA1A6839D94F23288 + +I=130 +KEY=0DBEF7E6D55C77C2270960A66262285B +CT=150C1BF943982C5EA1A6839D94F23288 +PT=048BFBB28879206964C5F3B41264011A + +I=131 +KEY=09350C545D2557AB43CC931270062941 +CT=048BFBB28879206964C5F3B41264011A +PT=54D2DC53B87EC949F0FA0E134EE26D50 + +I=132 +KEY=5DE7D007E55B9EE2B3369D013EE44411 +CT=54D2DC53B87EC949F0FA0E134EE26D50 +PT=1BA46AFE1AE87C4F0254BF02DF3B6D37 + +I=133 +KEY=4643BAF9FFB3E2ADB1622203E1DF2926 +CT=1BA46AFE1AE87C4F0254BF02DF3B6D37 +PT=7733E74E743C9E997AC2ED36B2E89CE8 + +I=134 +KEY=31705DB78B8F7C34CBA0CF355337B5CE +CT=7733E74E743C9E997AC2ED36B2E89CE8 +PT=670AEA160FAC67ABCECA140EB8195EB5 + +I=135 +KEY=567AB7A184231B9F056ADB3BEB2EEB7B +CT=670AEA160FAC67ABCECA140EB8195EB5 +PT=7CFD74D510AC894FF5B698280386F4FF + +I=136 +KEY=2A87C374948F92D0F0DC4313E8A81F84 +CT=7CFD74D510AC894FF5B698280386F4FF +PT=10D03F32C0694E9FFF598E101998105E + +I=137 +KEY=3A57FC4654E6DC4F0F85CD03F1300FDA +CT=10D03F32C0694E9FFF598E101998105E +PT=351D6E8D1C26F36973356F6235B8ABAD + +I=138 +KEY=0F4A92CB48C02F267CB0A261C488A477 +CT=351D6E8D1C26F36973356F6235B8ABAD +PT=0DDDA7AA09FBD986C0B9EA2B018FAE4F + +I=139 +KEY=02973561413BF6A0BC09484AC5070A38 +CT=0DDDA7AA09FBD986C0B9EA2B018FAE4F +PT=31C5B68B7A08D1B7320FAB052CC3B0D1 + +I=140 +KEY=335283EA3B3327178E06E34FE9C4BAE9 +CT=31C5B68B7A08D1B7320FAB052CC3B0D1 +PT=501B8D9EE91468522029020A39484DB5 + +I=141 +KEY=63490E74D2274F45AE2FE145D08CF75C +CT=501B8D9EE91468522029020A39484DB5 +PT=2714FBA566DFD4909B8ABF29B1D5A8E8 + +I=142 +KEY=445DF5D1B4F89BD535A55E6C61595FB4 +CT=2714FBA566DFD4909B8ABF29B1D5A8E8 +PT=94485381E5088D67BC1335C89FA5C2B8 + +I=143 +KEY=D015A65051F016B289B66BA4FEFC9D0C +CT=94485381E5088D67BC1335C89FA5C2B8 +PT=BE5BEE26D6686A0EB5838C237FEF79B7 + +I=144 +KEY=6E4E487687987CBC3C35E7878113E4BB +CT=BE5BEE26D6686A0EB5838C237FEF79B7 +PT=417F73D46CFBE3C5C9AD513BCBC6D185 + +I=145 +KEY=2F313BA2EB639F79F598B6BC4AD5353E +CT=417F73D46CFBE3C5C9AD513BCBC6D185 +PT=AE3B07350B3BE7D4F9F6FE2F95622449 + +I=146 +KEY=810A3C97E05878AD0C6E4893DFB71177 +CT=AE3B07350B3BE7D4F9F6FE2F95622449 +PT=7BD4231225A7B665953AB034E24A7C7A + +I=147 +KEY=FADE1F85C5FFCEC89954F8A73DFD6D0D +CT=7BD4231225A7B665953AB034E24A7C7A +PT=3C1FBE8F3CEB1438B4A64E59FAF291CF + +I=148 +KEY=C6C1A10AF914DAF02DF2B6FEC70FFCC2 +CT=3C1FBE8F3CEB1438B4A64E59FAF291CF +PT=ACFF7F1E71AA952CF8ADB24FEE18A7BB + +I=149 +KEY=6A3EDE1488BE4FDCD55F04B129175B79 +CT=ACFF7F1E71AA952CF8ADB24FEE18A7BB +PT=3C3A6D3FD73B36317417106A92E2B43E + +I=150 +KEY=5604B32B5F8579EDA14814DBBBF5EF47 +CT=3C3A6D3FD73B36317417106A92E2B43E +PT=F34F8C719A4A74DD8F4FA4CBC520827A + +I=151 +KEY=A54B3F5AC5CF0D302E07B0107ED56D3D +CT=F34F8C719A4A74DD8F4FA4CBC520827A +PT=6A5D56FB6C7EBA15112AF8A093F3E1E1 + +I=152 +KEY=CF1669A1A9B1B7253F2D48B0ED268CDC +CT=6A5D56FB6C7EBA15112AF8A093F3E1E1 +PT=8BF39EE3B8ED0F6A6EA92319A81B10E6 + +I=153 +KEY=44E5F742115CB84F51846BA9453D9C3A +CT=8BF39EE3B8ED0F6A6EA92319A81B10E6 +PT=2BC796D320C444BBBAD466D686F460F6 + +I=154 +KEY=6F2261913198FCF4EB500D7FC3C9FCCC +CT=2BC796D320C444BBBAD466D686F460F6 +PT=2CF595F424ED50B1A146E387B128CBA3 + +I=155 +KEY=43D7F4651575AC454A16EEF872E1376F +CT=2CF595F424ED50B1A146E387B128CBA3 +PT=56F2E856045BAE66EA003A6C39205344 + +I=156 +KEY=15251C33112E0223A016D4944BC1642B +CT=56F2E856045BAE66EA003A6C39205344 +PT=31C83401BD83424BA6E94C0D6D453D9A + +I=157 +KEY=24ED2832ACAD406806FF9899268459B1 +CT=31C83401BD83424BA6E94C0D6D453D9A +PT=A687F05992CCB57CDE61AFF8878913ED + +I=158 +KEY=826AD86B3E61F514D89E3761A10D4A5C +CT=A687F05992CCB57CDE61AFF8878913ED +PT=16E771193C2473502F415C27FB101D94 + +I=159 +KEY=948DA97202458644F7DF6B465A1D57C8 +CT=16E771193C2473502F415C27FB101D94 +PT=C69CDBA29C9EDC3407C1C73A756A0B6E + +I=160 +KEY=521172D09EDB5A70F01EAC7C2F775CA6 +CT=C69CDBA29C9EDC3407C1C73A756A0B6E +PT=566D82281F48E3217F3852115CF2E944 + +I=161 +KEY=047CF0F88193B9518F26FE6D7385B5E2 +CT=566D82281F48E3217F3852115CF2E944 +PT=B3FEBC8F8F0F0B652C4358BCC9BF54DF + +I=162 +KEY=B7824C770E9CB234A365A6D1BA3AE13D +CT=B3FEBC8F8F0F0B652C4358BCC9BF54DF +PT=BBB84877094B3EB86203D17C92CF5168 + +I=163 +KEY=0C3A040007D78C8CC16677AD28F5B055 +CT=BBB84877094B3EB86203D17C92CF5168 +PT=2C45E5A3F8C564862DA4D8AD428D3E67 + +I=164 +KEY=207FE1A3FF12E80AECC2AF006A788E32 +CT=2C45E5A3F8C564862DA4D8AD428D3E67 +PT=10ADC2AF56600D95AD8BB579EF5170C9 + +I=165 +KEY=30D2230CA972E59F41491A798529FEFB +CT=10ADC2AF56600D95AD8BB579EF5170C9 +PT=1854BB8AC568F3599153BE1AC60BA78D + +I=166 +KEY=288698866C1A16C6D01AA46343225976 +CT=1854BB8AC568F3599153BE1AC60BA78D +PT=E641765C80D8812A1A0F4606C639642E + +I=167 +KEY=CEC7EEDAECC297ECCA15E265851B3D58 +CT=E641765C80D8812A1A0F4606C639642E +PT=317AC70CEAA87AE66A15C22BD5E534E5 + +I=168 +KEY=FFBD29D6066AED0AA000204E50FE09BD +CT=317AC70CEAA87AE66A15C22BD5E534E5 +PT=BFFB8D7B3D9F54727944ABC3F6474362 + +I=169 +KEY=4046A4AD3BF5B978D9448B8DA6B94ADF +CT=BFFB8D7B3D9F54727944ABC3F6474362 +PT=060765D1D9D289B862DA274CFDB4D7A0 + +I=170 +KEY=4641C17CE22730C0BB9EACC15B0D9D7F +CT=060765D1D9D289B862DA274CFDB4D7A0 +PT=FBAFA4C1D6CEF2A45E9E084311FDF858 + +I=171 +KEY=BDEE65BD34E9C264E500A4824AF06527 +CT=FBAFA4C1D6CEF2A45E9E084311FDF858 +PT=F7F36BFDA77362B470B0B074241C58E9 + +I=172 +KEY=4A1D0E40939AA0D095B014F66EEC3DCE +CT=F7F36BFDA77362B470B0B074241C58E9 +PT=2FC236EDCD573A6DCFBA7930E9CF4698 + +I=173 +KEY=65DF38AD5ECD9ABD5A0A6DC687237B56 +CT=2FC236EDCD573A6DCFBA7930E9CF4698 +PT=949A9994DC976595BFACA5F31116A165 + +I=174 +KEY=F145A139825AFF28E5A6C8359635DA33 +CT=949A9994DC976595BFACA5F31116A165 +PT=19373CA9D519BF83EAA4C17E1EE8225C + +I=175 +KEY=E8729D90574340AB0F02094B88DDF86F +CT=19373CA9D519BF83EAA4C17E1EE8225C +PT=685C783918997A7572B0A09315F1F2DB + +I=176 +KEY=802EE5A94FDA3ADE7DB2A9D89D2C0AB4 +CT=685C783918997A7572B0A09315F1F2DB +PT=FC0CB1792EADB7E8DECB021A435DE1E7 + +I=177 +KEY=7C2254D061778D36A379ABC2DE71EB53 +CT=FC0CB1792EADB7E8DECB021A435DE1E7 +PT=797C5E5B4F3B38E7C72FF7AAAB270E86 + +I=178 +KEY=055E0A8B2E4CB5D164565C687556E5D5 +CT=797C5E5B4F3B38E7C72FF7AAAB270E86 +PT=A5AB675262EA186F777681647B6AA1F9 + +I=179 +KEY=A0F56DD94CA6ADBE1320DD0C0E3C442C +CT=A5AB675262EA186F777681647B6AA1F9 +PT=08CDF6AF55BBB247D0DE1A69CD041A78 + +I=180 +KEY=A8389B76191D1FF9C3FEC765C3385E54 +CT=08CDF6AF55BBB247D0DE1A69CD041A78 +PT=DED1F3C30AB5EC3455C7B6A756E5FF03 + +I=181 +KEY=76E968B513A8F3CD963971C295DDA157 +CT=DED1F3C30AB5EC3455C7B6A756E5FF03 +PT=C759A17B354D668D1BA5541D16241D9F + +I=182 +KEY=B1B0C9CE26E595408D9C25DF83F9BCC8 +CT=C759A17B354D668D1BA5541D16241D9F +PT=97E011FE7B327B8292270D4CD18BD9AC + +I=183 +KEY=2650D8305DD7EEC21FBB289352726564 +CT=97E011FE7B327B8292270D4CD18BD9AC +PT=9F004E4282F790C06681F16262EF78CF + +I=184 +KEY=B9509672DF207E02793AD9F1309D1DAB +CT=9F004E4282F790C06681F16262EF78CF +PT=6B34AA95EFD874915DAE275CE34A04B9 + +I=185 +KEY=D2643CE730F80A932494FEADD3D71912 +CT=6B34AA95EFD874915DAE275CE34A04B9 +PT=96966D118C50B67849F93B109492B5EB + +I=186 +KEY=44F251F6BCA8BCEB6D6DC5BD4745ACF9 +CT=96966D118C50B67849F93B109492B5EB +PT=2CA6F85E4F29BE884392A0FEDD08D5A7 + +I=187 +KEY=6854A9A8F38102632EFF65439A4D795E +CT=2CA6F85E4F29BE884392A0FEDD08D5A7 +PT=21B71D4F23DDC002CAAFB7426009BD27 + +I=188 +KEY=49E3B4E7D05CC261E450D201FA44C479 +CT=21B71D4F23DDC002CAAFB7426009BD27 +PT=BF059F1945E9E51B22B308849757B475 + +I=189 +KEY=F6E62BFE95B5277AC6E3DA856D13700C +CT=BF059F1945E9E51B22B308849757B475 +PT=434F4E756A3178472E12B80A1C2ED83E + +I=190 +KEY=B5A9658BFF845F3DE8F1628F713DA832 +CT=434F4E756A3178472E12B80A1C2ED83E +PT=37DB2B0D5967700CDE348FB60661A6D4 + +I=191 +KEY=82724E86A6E32F3136C5ED39775C0EE6 +CT=37DB2B0D5967700CDE348FB60661A6D4 +PT=D31C5130F8F217AC0014B5F37B9BB86B + +I=192 +KEY=516E1FB65E11389D36D158CA0CC7B68D +CT=D31C5130F8F217AC0014B5F37B9BB86B +PT=3B8CD15967907F9C617697EBEF395B16 + +I=193 +KEY=6AE2CEEF3981470157A7CF21E3FEED9B +CT=3B8CD15967907F9C617697EBEF395B16 +PT=AF17B5E5236BF46576379CD4E5AF8A34 + +I=194 +KEY=C5F57B0A1AEAB364219053F5065167AF +CT=AF17B5E5236BF46576379CD4E5AF8A34 +PT=88286D6FB237181EC239C1D70C0D6675 + +I=195 +KEY=4DDD1665A8DDAB7AE3A992220A5C01DA +CT=88286D6FB237181EC239C1D70C0D6675 +PT=8A5207BB1283343B3692045183451A7D + +I=196 +KEY=C78F11DEBA5E9F41D53B967389191BA7 +CT=8A5207BB1283343B3692045183451A7D +PT=53C12FAC4B0185AA0CE067FC67EC5B9C + +I=197 +KEY=944E3E72F15F1AEBD9DBF18FEEF5403B +CT=53C12FAC4B0185AA0CE067FC67EC5B9C +PT=BBA2BB9B1CA48D2E97E0C39E500EB9C0 + +I=198 +KEY=2FEC85E9EDFB97C54E3B3211BEFBF9FB +CT=BBA2BB9B1CA48D2E97E0C39E500EB9C0 +PT=8BA2341064B7B5184CD7E7A40FA0358E + +I=199 +KEY=A44EB1F9894C22DD02ECD5B5B15BCC75 +CT=8BA2341064B7B5184CD7E7A40FA0358E +PT=97121EEEA68CC6200FBC0B311849E625 + +I=200 +KEY=335CAF172FC0E4FD0D50DE84A9122A50 +CT=97121EEEA68CC6200FBC0B311849E625 +PT=027FA370A9412B342043A15F19294961 + +I=201 +KEY=31230C678681CFC92D137FDBB03B6331 +CT=027FA370A9412B342043A15F19294961 +PT=72CFBE6BA03AB28A53A6727717D1199A + +I=202 +KEY=43ECB20C26BB7D437EB50DACA7EA7AAB +CT=72CFBE6BA03AB28A53A6727717D1199A +PT=7A15B1B4B4ED35F9C208500FE7C4C1C7 + +I=203 +KEY=39F903B8925648BABCBD5DA3402EBB6C +CT=7A15B1B4B4ED35F9C208500FE7C4C1C7 +PT=AF46496D09254FAB5F381E93EEB4FBB0 + +I=204 +KEY=96BF4AD59B730711E3854330AE9A40DC +CT=AF46496D09254FAB5F381E93EEB4FBB0 +PT=ADA064E0F4324E8B0C062F6E33C7D016 + +I=205 +KEY=3B1F2E356F41499AEF836C5E9D5D90CA +CT=ADA064E0F4324E8B0C062F6E33C7D016 +PT=7723A61733BD5BBFAB8C559ED379B8B5 + +I=206 +KEY=4C3C88225CFC1225440F39C04E24287F +CT=7723A61733BD5BBFAB8C559ED379B8B5 +PT=5D210E8F35DD863316E89FADA70E8392 + +I=207 +KEY=111D86AD6921941652E7A66DE92AABED +CT=5D210E8F35DD863316E89FADA70E8392 +PT=92B1D20E7D87787950990052DE2ABA4F + +I=208 +KEY=83AC54A314A6EC6F027EA63F370011A2 +CT=92B1D20E7D87787950990052DE2ABA4F +PT=178E494D23AA6AC13AC180727C47FD2A + +I=209 +KEY=94221DEE370C86AE38BF264D4B47EC88 +CT=178E494D23AA6AC13AC180727C47FD2A +PT=CB9C10817C059D5BE4F123576FF459C6 + +I=210 +KEY=5FBE0D6F4B091BF5DC4E051A24B3B54E +CT=CB9C10817C059D5BE4F123576FF459C6 +PT=4934C56CC7BAF0A8DEBB62CFB2B0DEBF + +I=211 +KEY=168AC8038CB3EB5D02F567D596036BF1 +CT=4934C56CC7BAF0A8DEBB62CFB2B0DEBF +PT=F6F2A4B90B357D88401702C968D9EC02 + +I=212 +KEY=E0786CBA878696D542E2651CFEDA87F3 +CT=F6F2A4B90B357D88401702C968D9EC02 +PT=06A35CAD7B36751BEE345C33112EB6D1 + +I=213 +KEY=E6DB3017FCB0E3CEACD6392FEFF43122 +CT=06A35CAD7B36751BEE345C33112EB6D1 +PT=3244CDE10DF48795DA702CD8C2F4CABD + +I=214 +KEY=D49FFDF6F144645B76A615F72D00FB9F +CT=3244CDE10DF48795DA702CD8C2F4CABD +PT=47C06F5BEA8C3503512E0E200966C546 + +I=215 +KEY=935F92AD1BC8515827881BD724663ED9 +CT=47C06F5BEA8C3503512E0E200966C546 +PT=68A077D25CBEA7F76B88D8C6A414D0CE + +I=216 +KEY=FBFFE57F4776F6AF4C00C3118072EE17 +CT=68A077D25CBEA7F76B88D8C6A414D0CE +PT=DDF110C2C79B46C5132CCEF654280D7E + +I=217 +KEY=260EF5BD80EDB06A5F2C0DE7D45AE369 +CT=DDF110C2C79B46C5132CCEF654280D7E +PT=0AB610A0082813076D052011C12DC924 + +I=218 +KEY=2CB8E51D88C5A36D32292DF615772A4D +CT=0AB610A0082813076D052011C12DC924 +PT=8C42F49EDAE1BD6B631E74B68B1B8444 + +I=219 +KEY=A0FA118352241E06513759409E6CAE09 +CT=8C42F49EDAE1BD6B631E74B68B1B8444 +PT=B5A5B6E50B3A066D16DF883F353019FE + +I=220 +KEY=155FA766591E186B47E8D17FAB5CB7F7 +CT=B5A5B6E50B3A066D16DF883F353019FE +PT=70CFA25AFC9919937E2FC90900F0B398 + +I=221 +KEY=6590053CA58701F839C71876ABAC046F +CT=70CFA25AFC9919937E2FC90900F0B398 +PT=B927A5911AE33DEAB619DAFEE22CD0DF + +I=222 +KEY=DCB7A0ADBF643C128FDEC2884980D4B0 +CT=B927A5911AE33DEAB619DAFEE22CD0DF +PT=10C548438C5B976EDD624129B2102D7A + +I=223 +KEY=CC72E8EE333FAB7C52BC83A1FB90F9CA +CT=10C548438C5B976EDD624129B2102D7A +PT=4549E45DA2F8FE82972DC7DF3548CAFF + +I=224 +KEY=893B0CB391C755FEC591447ECED83335 +CT=4549E45DA2F8FE82972DC7DF3548CAFF +PT=2B85505E64089FEB6B5763011E778C96 + +I=225 +KEY=A2BE5CEDF5CFCA15AEC6277FD0AFBFA3 +CT=2B85505E64089FEB6B5763011E778C96 +PT=4B157930F9A6EBE3D9D6AC9FADDEB35C + +I=226 +KEY=E9AB25DD0C6921F677108BE07D710CFF +CT=4B157930F9A6EBE3D9D6AC9FADDEB35C +PT=12341C0FE9EB6757BFFCC4BC1A8F2585 + +I=227 +KEY=FB9F39D2E58246A1C8EC4F5C67FE297A +CT=12341C0FE9EB6757BFFCC4BC1A8F2585 +PT=5422D62D794B02FC04BE01198EE23ACE + +I=228 +KEY=AFBDEFFF9CC9445DCC524E45E91C13B4 +CT=5422D62D794B02FC04BE01198EE23ACE +PT=42D43022FD6DB571BCB2FDE653C9068C + +I=229 +KEY=ED69DFDD61A4F12C70E0B3A3BAD51538 +CT=42D43022FD6DB571BCB2FDE653C9068C +PT=80BD3AAED5D519B75D22BF060EF1DFC6 + +I=230 +KEY=6DD4E573B471E89B2DC20CA5B424CAFE +CT=80BD3AAED5D519B75D22BF060EF1DFC6 +PT=B72973F9016A348CDDCCFFC2DD291B5A + +I=231 +KEY=DAFD968AB51BDC17F00EF367690DD1A4 +CT=B72973F9016A348CDDCCFFC2DD291B5A +PT=5692E61C86A7B2C043ABBED712390361 + +I=232 +KEY=8C6F709633BC6ED7B3A54DB07B34D2C5 +CT=5692E61C86A7B2C043ABBED712390361 +PT=75138737269AA27855C2CFD2DCEDEFC4 + +I=233 +KEY=F97CF7A11526CCAFE6678262A7D93D01 +CT=75138737269AA27855C2CFD2DCEDEFC4 +PT=A022AA28CECC4BB5EB28BA5B7828AB6E + +I=234 +KEY=595E5D89DBEA871A0D4F3839DFF1966F +CT=A022AA28CECC4BB5EB28BA5B7828AB6E +PT=17B0BF87EE02AA44705B1B1B4DF7D3F4 + +I=235 +KEY=4EEEE20E35E82D5E7D1423229206459B +CT=17B0BF87EE02AA44705B1B1B4DF7D3F4 +PT=095A5A041C43DCFEB5D0DF3E7659344A + +I=236 +KEY=47B4B80A29ABF1A0C8C4FC1CE45F71D1 +CT=095A5A041C43DCFEB5D0DF3E7659344A +PT=9DCE0D1C572509F3367EE952B89044E5 + +I=237 +KEY=DA7AB5167E8EF853FEBA154E5CCF3534 +CT=9DCE0D1C572509F3367EE952B89044E5 +PT=E6075BCC82399A91E52034EA2F197058 + +I=238 +KEY=3C7DEEDAFCB762C21B9A21A473D6456C +CT=E6075BCC82399A91E52034EA2F197058 +PT=431D243CEE96B424B0FA4FEC5E707036 + +I=239 +KEY=7F60CAE61221D6E6AB606E482DA6355A +CT=431D243CEE96B424B0FA4FEC5E707036 +PT=5EF70106A2EA454CA9405A8AA1B54EF0 + +I=240 +KEY=2197CBE0B0CB93AA022034C28C137BAA +CT=5EF70106A2EA454CA9405A8AA1B54EF0 +PT=09B003CB7E2ADDD587A2ABCDD03D234F + +I=241 +KEY=2827C82BCEE14E7F85829F0F5C2E58E5 +CT=09B003CB7E2ADDD587A2ABCDD03D234F +PT=3647FAC6EF758113DC768E7737098DE9 + +I=242 +KEY=1E6032ED2194CF6C59F411786B27D50C +CT=3647FAC6EF758113DC768E7737098DE9 +PT=C043BD96A88492C85431B72C708C3C60 + +I=243 +KEY=DE238F7B89105DA40DC5A6541BABE96C +CT=C043BD96A88492C85431B72C708C3C60 +PT=299A25142A6B5D334158D359DD9CD574 + +I=244 +KEY=F7B9AA6FA37B00974C9D750DC6373C18 +CT=299A25142A6B5D334158D359DD9CD574 +PT=21E56C2202C8D6F81EDC63A8A1EA4B6A + +I=245 +KEY=D65CC64DA1B3D66F524116A567DD7772 +CT=21E56C2202C8D6F81EDC63A8A1EA4B6A +PT=FD3565957E3845065B7AEF27A900FDD5 + +I=246 +KEY=2B69A3D8DF8B9369093BF982CEDD8AA7 +CT=FD3565957E3845065B7AEF27A900FDD5 +PT=A4DB9120D1ED0419342AFC2CBF114647 + +I=247 +KEY=8FB232F80E6697703D1105AE71CCCCE0 +CT=A4DB9120D1ED0419342AFC2CBF114647 +PT=27FDDEA1E746BD217CFB4CD7A511BACE + +I=248 +KEY=A84FEC59E9202A5141EA4979D4DD762E +CT=27FDDEA1E746BD217CFB4CD7A511BACE +PT=6A9189FD46E47B22F151A213D023442B + +I=249 +KEY=C2DE65A4AFC45173B0BBEB6A04FE3205 +CT=6A9189FD46E47B22F151A213D023442B +PT=1C729701404C76D5D7A156C39CF52542 + +I=250 +KEY=DEACF2A5EF8827A6671ABDA9980B1747 +CT=1C729701404C76D5D7A156C39CF52542 +PT=6F97CB4564E0783DFE962DCB13FEDF72 + +I=251 +KEY=B13B39E08B685F9B998C90628BF5C835 +CT=6F97CB4564E0783DFE962DCB13FEDF72 +PT=F818140A280299B182CDA37CBE9B27AB + +I=252 +KEY=49232DEAA36AC62A1B41331E356EEF9E +CT=F818140A280299B182CDA37CBE9B27AB +PT=20E9F2BE7017C2945005FD8A420A5B7D + +I=253 +KEY=69CADF54D37D04BE4B44CE947764B4E3 +CT=20E9F2BE7017C2945005FD8A420A5B7D +PT=60BB97C634161EF6A36056193B6EDDB0 + +I=254 +KEY=09714892E76B1A48E824988D4C0A6953 +CT=60BB97C634161EF6A36056193B6EDDB0 +PT=E4B9777B7390EF430A93FF7DD0B68CD4 + +I=255 +KEY=EDC83FE994FBF50BE2B767F09CBCE587 +CT=E4B9777B7390EF430A93FF7DD0B68CD4 +PT=E5E3BD960CF15BBDB8A6C08711A884CF + +I=256 +KEY=082B827F980AAEB65A11A7778D146148 +CT=E5E3BD960CF15BBDB8A6C08711A884CF +PT=71A6AEFD0181DCE69A116585044C7F66 + +I=257 +KEY=798D2C82998B7250C000C2F289581E2E +CT=71A6AEFD0181DCE69A116585044C7F66 +PT=8E9C1CFFDB8972617D74DA0E9ED065D1 + +I=258 +KEY=F711307D42020031BD7418FC17887BFF +CT=8E9C1CFFDB8972617D74DA0E9ED065D1 +PT=CE7882AB901A199910FC463A4D1D626A + +I=259 +KEY=3969B2D6D21819A8AD885EC65A951995 +CT=CE7882AB901A199910FC463A4D1D626A +PT=2334546032E850D0029CB1AD6AFCEA7A + +I=260 +KEY=1A5DE6B6E0F04978AF14EF6B3069F3EF +CT=2334546032E850D0029CB1AD6AFCEA7A +PT=88B4CF0D4AB7BD00BE98DA1626063A69 + +I=261 +KEY=92E929BBAA47F478118C357D166FC986 +CT=88B4CF0D4AB7BD00BE98DA1626063A69 +PT=5A7FF831F28E5EC4A11DA524E2323925 + +I=262 +KEY=C896D18A58C9AABCB0919059F45DF0A3 +CT=5A7FF831F28E5EC4A11DA524E2323925 +PT=DF000551EF9BBD914969BD1B353BDC8C + +I=263 +KEY=1796D4DBB752172DF9F82D42C1662C2F +CT=DF000551EF9BBD914969BD1B353BDC8C +PT=1EECBC47697208193C354E28D23E8CE9 + +I=264 +KEY=097A689CDE201F34C5CD636A1358A0C6 +CT=1EECBC47697208193C354E28D23E8CE9 +PT=DF85CD4B3F821A7411F9F5D1FDF9DB85 + +I=265 +KEY=D6FFA5D7E1A20540D43496BBEEA17B43 +CT=DF85CD4B3F821A7411F9F5D1FDF9DB85 +PT=038E765F1910D8C0C1251254605218F2 + +I=266 +KEY=D571D388F8B2DD80151184EF8EF363B1 +CT=038E765F1910D8C0C1251254605218F2 +PT=FBA8FE850294EEAEE75F56C974BF7DE4 + +I=267 +KEY=2ED92D0DFA26332EF24ED226FA4C1E55 +CT=FBA8FE850294EEAEE75F56C974BF7DE4 +PT=47F9D6F7A3E2A1BFA360EA1BA8B0450E + +I=268 +KEY=6920FBFA59C49291512E383D52FC5B5B +CT=47F9D6F7A3E2A1BFA360EA1BA8B0450E +PT=FD6F4A4825DE5E776BFD569223CB5A2C + +I=269 +KEY=944FB1B27C1ACCE63AD36EAF71370177 +CT=FD6F4A4825DE5E776BFD569223CB5A2C +PT=10430ED7EE0FDB8FBC348F8E08286622 + +I=270 +KEY=840CBF659215176986E7E121791F6755 +CT=10430ED7EE0FDB8FBC348F8E08286622 +PT=4B75D5C573185303B01EB649884758B1 + +I=271 +KEY=CF796AA0E10D446A36F95768F1583FE4 +CT=4B75D5C573185303B01EB649884758B1 +PT=85CCA4271A941517D55D05B4F29527C3 + +I=272 +KEY=4AB5CE87FB99517DE3A452DC03CD1827 +CT=85CCA4271A941517D55D05B4F29527C3 +PT=615EA2D44C52D639B6AD05D621B4A1A6 + +I=273 +KEY=2BEB6C53B7CB87445509570A2279B981 +CT=615EA2D44C52D639B6AD05D621B4A1A6 +PT=1DFD1E93D34ABFE45BA6BF6BD3FBF30E + +I=274 +KEY=361672C0648138A00EAFE861F1824A8F +CT=1DFD1E93D34ABFE45BA6BF6BD3FBF30E +PT=B65C3F09FFFF752DEE2F8F2D441A51CA + +I=275 +KEY=804A4DC99B7E4D8DE080674CB5981B45 +CT=B65C3F09FFFF752DEE2F8F2D441A51CA +PT=3B36D6FD4F7ACAD4681FF4398AC7AFB3 + +I=276 +KEY=BB7C9B34D4048759889F93753F5FB4F6 +CT=3B36D6FD4F7ACAD4681FF4398AC7AFB3 +PT=F3CDEFABE450D887CD585C280BB22367 + +I=277 +KEY=48B1749F30545FDE45C7CF5D34ED9791 +CT=F3CDEFABE450D887CD585C280BB22367 +PT=ECC49251BAD79981CA1B1F683A843531 + +I=278 +KEY=A475E6CE8A83C65F8FDCD0350E69A2A0 +CT=ECC49251BAD79981CA1B1F683A843531 +PT=8BE43F0A30663108513A0E5F49F9152C + +I=279 +KEY=2F91D9C4BAE5F757DEE6DE6A4790B78C +CT=8BE43F0A30663108513A0E5F49F9152C +PT=DB3D559FCEBE0FAF3B218161BA6B3F07 + +I=280 +KEY=F4AC8C5B745BF8F8E5C75F0BFDFB888B +CT=DB3D559FCEBE0FAF3B218161BA6B3F07 +PT=8F0C3AE11B03433C07CABD26BF47A430 + +I=281 +KEY=7BA0B6BA6F58BBC4E20DE22D42BC2CBB +CT=8F0C3AE11B03433C07CABD26BF47A430 +PT=73578DC3464CE3EE0314B206E1E9504C + +I=282 +KEY=08F73B792914582AE119502BA3557CF7 +CT=73578DC3464CE3EE0314B206E1E9504C +PT=60DA2C12B296804C608348A54EE1C60D + +I=283 +KEY=682D176B9B82D866819A188EEDB4BAFA +CT=60DA2C12B296804C608348A54EE1C60D +PT=A960934724BDC61E5429E59856FC1902 + +I=284 +KEY=C14D842CBF3F1E78D5B3FD16BB48A3F8 +CT=A960934724BDC61E5429E59856FC1902 +PT=6B7E71535C6B7B09BDF19AF79CD58C95 + +I=285 +KEY=AA33F57FE3546571684267E1279D2F6D +CT=6B7E71535C6B7B09BDF19AF79CD58C95 +PT=B95E0126EF320F1E6F288366DB7F2773 + +I=286 +KEY=136DF4590C666A6F076AE487FCE2081E +CT=B95E0126EF320F1E6F288366DB7F2773 +PT=6403B99D6FE0F85128FDD1F05B81AA6E + +I=287 +KEY=776E4DC46386923E2F973577A763A270 +CT=6403B99D6FE0F85128FDD1F05B81AA6E +PT=9EBA25F2D6CE5817F4317F3AFE6421E7 + +I=288 +KEY=E9D46836B548CA29DBA64A4D59078397 +CT=9EBA25F2D6CE5817F4317F3AFE6421E7 +PT=5E77AAE8A3C5EEAF4732BB310DAC3771 + +I=289 +KEY=B7A3C2DE168D24869C94F17C54ABB4E6 +CT=5E77AAE8A3C5EEAF4732BB310DAC3771 +PT=5FD00675371300B60C30EFCEE0171080 + +I=290 +KEY=E873C4AB219E243090A41EB2B4BCA466 +CT=5FD00675371300B60C30EFCEE0171080 +PT=482D701DBCE3AE108F65836C12A41C2C + +I=291 +KEY=A05EB4B69D7D8A201FC19DDEA618B84A +CT=482D701DBCE3AE108F65836C12A41C2C +PT=2966D81642542925891D8F7409051E4A + +I=292 +KEY=89386CA0DF29A30596DC12AAAF1DA600 +CT=2966D81642542925891D8F7409051E4A +PT=2FD6F3DB9DD1DEDED9F32D1806AE69D6 + +I=293 +KEY=A6EE9F7B42F87DDB4F2F3FB2A9B3CFD6 +CT=2FD6F3DB9DD1DEDED9F32D1806AE69D6 +PT=9B59277165B792790E29ADB53ADE60DB + +I=294 +KEY=3DB7B80A274FEFA241069207936DAF0D +CT=9B59277165B792790E29ADB53ADE60DB +PT=A4873C5246044200B56C25FFADAB15D6 + +I=295 +KEY=99308458614BADA2F46AB7F83EC6BADB +CT=A4873C5246044200B56C25FFADAB15D6 +PT=9E2BBBD65649EB2A0CD974AD32BF382F + +I=296 +KEY=071B3F8E37024688F8B3C3550C7982F4 +CT=9E2BBBD65649EB2A0CD974AD32BF382F +PT=F83F4408675892DADA4833A43F22FFC8 + +I=297 +KEY=FF247B86505AD45222FBF0F1335B7D3C +CT=F83F4408675892DADA4833A43F22FFC8 +PT=19C337CCBF8D06DC68D9A16DB294EF44 + +I=298 +KEY=E6E74C4AEFD7D28E4A22519C81CF9278 +CT=19C337CCBF8D06DC68D9A16DB294EF44 +PT=433578E0901A4F4B134E6DCF68249FC7 + +I=299 +KEY=A5D234AA7FCD9DC5596C3C53E9EB0DBF +CT=433578E0901A4F4B134E6DCF68249FC7 +PT=7F317CB0B3279C894B8A08289797FFF1 + +I=300 +KEY=DAE3481ACCEA014C12E6347B7E7CF24E +CT=7F317CB0B3279C894B8A08289797FFF1 +PT=AFFB4CA21A2A36FD24BB18C5AED17789 + +I=301 +KEY=751804B8D6C037B1365D2CBED0AD85C7 +CT=AFFB4CA21A2A36FD24BB18C5AED17789 +PT=394DA5EC353A68B844D1BC24A468DA5C + +I=302 +KEY=4C55A154E3FA5F09728C909A74C55F9B +CT=394DA5EC353A68B844D1BC24A468DA5C +PT=C649C174B98A06351F26C117D14FF290 + +I=303 +KEY=8A1C60205A70593C6DAA518DA58AAD0B +CT=C649C174B98A06351F26C117D14FF290 +PT=2E122AA7C90B57304A80C19480627DD7 + +I=304 +KEY=A40E4A87937B0E0C272A901925E8D0DC +CT=2E122AA7C90B57304A80C19480627DD7 +PT=9841ADE6A65834CE89959EFE8F059ED6 + +I=305 +KEY=3C4FE76135233AC2AEBF0EE7AAED4E0A +CT=9841ADE6A65834CE89959EFE8F059ED6 +PT=6B70D74762A4BEFBD15B9EC6835CB69B + +I=306 +KEY=573F3026578784397FE4902129B1F891 +CT=6B70D74762A4BEFBD15B9EC6835CB69B +PT=2E8B5DEF53E2294C0C953A9B8BD9399D + +I=307 +KEY=79B46DC90465AD757371AABAA268C10C +CT=2E8B5DEF53E2294C0C953A9B8BD9399D +PT=D32D00F78BA00F6CEA792598B89779E4 + +I=308 +KEY=AA996D3E8FC5A21999088F221AFFB8E8 +CT=D32D00F78BA00F6CEA792598B89779E4 +PT=7059DCC6CB8D295B95F2978F25927B31 + +I=309 +KEY=DAC0B1F844488B420CFA18AD3F6DC3D9 +CT=7059DCC6CB8D295B95F2978F25927B31 +PT=833A1AFA7DC4CAF54F5B36981A98D7E3 + +I=310 +KEY=59FAAB02398C41B743A12E3525F5143A +CT=833A1AFA7DC4CAF54F5B36981A98D7E3 +PT=4CC5A526400B493AAA28909A2F4932BF + +I=311 +KEY=153F0E247987088DE989BEAF0ABC2685 +CT=4CC5A526400B493AAA28909A2F4932BF +PT=D7134DEE2967104D161876A0802B3727 + +I=312 +KEY=C22C43CA50E018C0FF91C80F8A9711A2 +CT=D7134DEE2967104D161876A0802B3727 +PT=C45DB7BC52D7A0D53399B91EFB686D32 + +I=313 +KEY=0671F4760237B815CC08711171FF7C90 +CT=C45DB7BC52D7A0D53399B91EFB686D32 +PT=2F49EA2A8D7F44909BCF41C3640FD0AB + +I=314 +KEY=29381E5C8F48FC8557C730D215F0AC3B +CT=2F49EA2A8D7F44909BCF41C3640FD0AB +PT=6D416059758F4AC555A05D83E9CFC4DE + +I=315 +KEY=44797E05FAC7B64002676D51FC3F68E5 +CT=6D416059758F4AC555A05D83E9CFC4DE +PT=2721015DDF85EC87ED8480A87705CD37 + +I=316 +KEY=63587F5825425AC7EFE3EDF98B3AA5D2 +CT=2721015DDF85EC87ED8480A87705CD37 +PT=3B045F5DD5ADC6E5D341E2E6A5B919D3 + +I=317 +KEY=585C2005F0EF9C223CA20F1F2E83BC01 +CT=3B045F5DD5ADC6E5D341E2E6A5B919D3 +PT=85DA9719FF16899B343BE56FDF9F86BF + +I=318 +KEY=DD86B71C0FF915B90899EA70F11C3ABE +CT=85DA9719FF16899B343BE56FDF9F86BF +PT=67FD32AC2783C381E77AE0BB8ACEECCD + +I=319 +KEY=BA7B85B0287AD638EFE30ACB7BD2D673 +CT=67FD32AC2783C381E77AE0BB8ACEECCD +PT=D8BEC715849E6A2A164F0139B8EC038E + +I=320 +KEY=62C542A5ACE4BC12F9AC0BF2C33ED5FD +CT=D8BEC715849E6A2A164F0139B8EC038E +PT=6ECA9375A207148E36203C8BD885A520 + +I=321 +KEY=0C0FD1D00EE3A89CCF8C37791BBB70DD +CT=6ECA9375A207148E36203C8BD885A520 +PT=A96877A8369B7086EF76D8281C066068 + +I=322 +KEY=A567A6783878D81A20FAEF5107BD10B5 +CT=A96877A8369B7086EF76D8281C066068 +PT=2D6DDF2C136F5ACDC12D33D52ECD6397 + +I=323 +KEY=880A79542B1782D7E1D7DC8429707322 +CT=2D6DDF2C136F5ACDC12D33D52ECD6397 +PT=E2F3EFF780EEDAD7B820CF57F946AB21 + +I=324 +KEY=6AF996A3ABF9580059F713D3D036D803 +CT=E2F3EFF780EEDAD7B820CF57F946AB21 +PT=D083829AB624DC46BF55F15C2ACA2CDC + +I=325 +KEY=BA7A14391DDD8446E6A2E28FFAFCF4DF +CT=D083829AB624DC46BF55F15C2ACA2CDC +PT=637A1328711A701F011B0D66953A11FC + +I=326 +KEY=D90007116CC7F459E7B9EFE96FC6E523 +CT=637A1328711A701F011B0D66953A11FC +PT=9230F9E8C4AA7D697641B4E800AECE8B + +I=327 +KEY=4B30FEF9A86D893091F85B016F682BA8 +CT=9230F9E8C4AA7D697641B4E800AECE8B +PT=CABC2F3EBCB87AEF4550060FB6F95C7D + +I=328 +KEY=818CD1C714D5F3DFD4A85D0ED99177D5 +CT=CABC2F3EBCB87AEF4550060FB6F95C7D +PT=25C93DA609BEDFD48D88B7E005EA9D4D + +I=329 +KEY=A445EC611D6B2C0B5920EAEEDC7BEA98 +CT=25C93DA609BEDFD48D88B7E005EA9D4D +PT=E445C1B43DC6AA0D47C766675676CA29 + +I=330 +KEY=40002DD520AD86061EE78C898A0D20B1 +CT=E445C1B43DC6AA0D47C766675676CA29 +PT=3F8A99E9D556F0CE0B0F3B4FE89A7C15 + +I=331 +KEY=7F8AB43CF5FB76C815E8B7C662975CA4 +CT=3F8A99E9D556F0CE0B0F3B4FE89A7C15 +PT=BE04197CADBDBC917AB288D85C554D4A + +I=332 +KEY=C18EAD405846CA596F5A3F1E3EC211EE +CT=BE04197CADBDBC917AB288D85C554D4A +PT=2CF8FE59EED67AF15BD6C09C8DA37882 + +I=333 +KEY=ED765319B690B0A8348CFF82B361696C +CT=2CF8FE59EED67AF15BD6C09C8DA37882 +PT=FF8CBF98D0B15198ACDC53D7247511C5 + +I=334 +KEY=12FAEC816621E1309850AC55971478A9 +CT=FF8CBF98D0B15198ACDC53D7247511C5 +PT=27794678855BAE2BDE7EB75487813E28 + +I=335 +KEY=3583AAF9E37A4F1B462E1B0110954681 +CT=27794678855BAE2BDE7EB75487813E28 +PT=5681B2CECDE71663A864D0288607D86B + +I=336 +KEY=630218372E9D5978EE4ACB2996929EEA +CT=5681B2CECDE71663A864D0288607D86B +PT=8936EB6E65F2CD2B3AFD1310B5B2D6C8 + +I=337 +KEY=EA34F3594B6F9453D4B7D83923204822 +CT=8936EB6E65F2CD2B3AFD1310B5B2D6C8 +PT=16045490148187B05CC46B80099A4530 + +I=338 +KEY=FC30A7C95FEE13E38873B3B92ABA0D12 +CT=16045490148187B05CC46B80099A4530 +PT=FE909FFB1D490B028867288FE682EEE9 + +I=339 +KEY=02A0383242A718E100149B36CC38E3FB +CT=FE909FFB1D490B028867288FE682EEE9 +PT=7B3E5C0017089A7842866ABA6364FFEA + +I=340 +KEY=799E643255AF82994292F18CAF5C1C11 +CT=7B3E5C0017089A7842866ABA6364FFEA +PT=CC263F129618975F204AE499F115C69B + +I=341 +KEY=B5B85B20C3B715C662D815155E49DA8A +CT=CC263F129618975F204AE499F115C69B +PT=997ACE7EABF6EBF9CC7BBCC2670CF1A0 + +I=342 +KEY=2CC2955E6841FE3FAEA3A9D739452B2A +CT=997ACE7EABF6EBF9CC7BBCC2670CF1A0 +PT=88D4A74B19278ED442068D0954DFA8B2 + +I=343 +KEY=A4163215716670EBECA524DE6D9A8398 +CT=88D4A74B19278ED442068D0954DFA8B2 +PT=F1CC6407AB254178DEFEF983112D6AC5 + +I=344 +KEY=55DA5612DA433193325BDD5D7CB7E95D +CT=F1CC6407AB254178DEFEF983112D6AC5 +PT=689A0E429CDAF1BD1197C160BF962544 + +I=345 +KEY=3D4058504699C02E23CC1C3DC321CC19 +CT=689A0E429CDAF1BD1197C160BF962544 +PT=54CF618196D978C0460CF8051DF5BE18 + +I=346 +KEY=698F39D1D040B8EE65C0E438DED47201 +CT=54CF618196D978C0460CF8051DF5BE18 +PT=4AA0EF106F23B43C3DD371C66404C602 + +I=347 +KEY=232FD6C1BF630CD2581395FEBAD0B403 +CT=4AA0EF106F23B43C3DD371C66404C602 +PT=A5185CAE1718143FC6CC329D9F233E17 + +I=348 +KEY=86378A6FA87B18ED9EDFA76325F38A14 +CT=A5185CAE1718143FC6CC329D9F233E17 +PT=A2A7E8855D25A0C475961E9B7ED7BE35 + +I=349 +KEY=249062EAF55EB829EB49B9F85B243421 +CT=A2A7E8855D25A0C475961E9B7ED7BE35 +PT=E0B7536B335FB98F197F762B3B97CECE + +I=350 +KEY=C4273181C60101A6F236CFD360B3FAEF +CT=E0B7536B335FB98F197F762B3B97CECE +PT=C45C38164083871528D8B3BA7423BFEA + +I=351 +KEY=007B0997868286B3DAEE7C6914904505 +CT=C45C38164083871528D8B3BA7423BFEA +PT=017AEBDEF43CF9664C582356A4A0C374 + +I=352 +KEY=0101E24972BE7FD596B65F3FB0308671 +CT=017AEBDEF43CF9664C582356A4A0C374 +PT=BBB48EA21B5EDCCF5346A7B4E6796BED + +I=353 +KEY=BAB56CEB69E0A31AC5F0F88B5649ED9C +CT=BBB48EA21B5EDCCF5346A7B4E6796BED +PT=3A53DFCB6067F9E98653136A44A4B537 + +I=354 +KEY=80E6B32009875AF343A3EBE112ED58AB +CT=3A53DFCB6067F9E98653136A44A4B537 +PT=951BA0E2272E46FC8CC3990E002EEFF0 + +I=355 +KEY=15FD13C22EA91C0FCF6072EF12C3B75B +CT=951BA0E2272E46FC8CC3990E002EEFF0 +PT=249202E40BC5892B9CEE96279E69432A + +I=356 +KEY=316F1126256C9524538EE4C88CAAF471 +CT=249202E40BC5892B9CEE96279E69432A +PT=B90CE5BF126163B37F75032A88AFD615 + +I=357 +KEY=8863F499370DF6972CFBE7E204052264 +CT=B90CE5BF126163B37F75032A88AFD615 +PT=E0BDD9E1FF493D82777BD7FB4035D309 + +I=358 +KEY=68DE2D78C844CB155B8030194430F16D +CT=E0BDD9E1FF493D82777BD7FB4035D309 +PT=0A3A5E377CDB2D1F6CB09E200494F578 + +I=359 +KEY=62E4734FB49FE60A3730AE3940A40415 +CT=0A3A5E377CDB2D1F6CB09E200494F578 +PT=483DF6E2936389D1FC09921497AF8AE7 + +I=360 +KEY=2AD985AD27FC6FDBCB393C2DD70B8EF2 +CT=483DF6E2936389D1FC09921497AF8AE7 +PT=7A90B7B1E493109323A54AD285090EC6 + +I=361 +KEY=5049321CC36F7F48E89C76FF52028034 +CT=7A90B7B1E493109323A54AD285090EC6 +PT=B6471BF36A24B5B0CAC19BDD4C83DC50 + +I=362 +KEY=E60E29EFA94BCAF8225DED221E815C64 +CT=B6471BF36A24B5B0CAC19BDD4C83DC50 +PT=EFBDC6ECADCE6AA5DBD302E7A0647700 + +I=363 +KEY=09B3EF030485A05DF98EEFC5BEE52B64 +CT=EFBDC6ECADCE6AA5DBD302E7A0647700 +PT=783A89B88CC875F743B645BA1449CEE7 + +I=364 +KEY=718966BB884DD5AABA38AA7FAAACE583 +CT=783A89B88CC875F743B645BA1449CEE7 +PT=EAD61D2577852D4EA276F3699EFB2BDC + +I=365 +KEY=9B5F7B9EFFC8F8E4184E59163457CE5F +CT=EAD61D2577852D4EA276F3699EFB2BDC +PT=9E804D8814AF4FC67BA931D1C72774C7 + +I=366 +KEY=05DF3616EB67B72263E768C7F370BA98 +CT=9E804D8814AF4FC67BA931D1C72774C7 +PT=7C383CC27D8C2B117AC72088EB334FD9 + +I=367 +KEY=79E70AD496EB9C331920484F1843F541 +CT=7C383CC27D8C2B117AC72088EB334FD9 +PT=9D4BE61ECECB2E60EC621A6320C0E844 + +I=368 +KEY=E4ACECCA5820B253F542522C38831D05 +CT=9D4BE61ECECB2E60EC621A6320C0E844 +PT=227992ADFC526D9AA99BA629E7523198 + +I=369 +KEY=C6D57E67A472DFC95CD9F405DFD12C9D +CT=227992ADFC526D9AA99BA629E7523198 +PT=93A265FB7650BE75CBDD8732F65F09A5 + +I=370 +KEY=55771B9CD22261BC97047337298E2538 +CT=93A265FB7650BE75CBDD8732F65F09A5 +PT=5AB3354B8D28F041C5A7FDAB828996BC + +I=371 +KEY=0FC42ED75F0A91FD52A38E9CAB07B384 +CT=5AB3354B8D28F041C5A7FDAB828996BC +PT=BA5C6566701BD3791C2DA51CDC5AB6DD + +I=372 +KEY=B5984BB12F1142844E8E2B80775D0559 +CT=BA5C6566701BD3791C2DA51CDC5AB6DD +PT=2C96CE0653EFB1113C6E822DD4AE6200 + +I=373 +KEY=990E85B77CFEF39572E0A9ADA3F36759 +CT=2C96CE0653EFB1113C6E822DD4AE6200 +PT=1065F5519472C78BADAB79EC00BBCABA + +I=374 +KEY=896B70E6E88C341EDF4BD041A348ADE3 +CT=1065F5519472C78BADAB79EC00BBCABA +PT=049AA7D4B4C1A59C1A16E3E5D8B46515 + +I=375 +KEY=8DF1D7325C4D9182C55D33A47BFCC8F6 +CT=049AA7D4B4C1A59C1A16E3E5D8B46515 +PT=C8F1C4179DD8FCD6942D07AF7392F481 + +I=376 +KEY=45001325C1956D545170340B086E3C77 +CT=C8F1C4179DD8FCD6942D07AF7392F481 +PT=9C9AE90AFE18822197EA47FE2F48813F + +I=377 +KEY=D99AFA2F3F8DEF75C69A73F52726BD48 +CT=9C9AE90AFE18822197EA47FE2F48813F +PT=DFBABE8688391CC868CDE134DDFFE1F0 + +I=378 +KEY=062044A9B7B4F3BDAE5792C1FAD95CB8 +CT=DFBABE8688391CC868CDE134DDFFE1F0 +PT=72BE585F98DA4DC03998B5820D5230A9 + +I=379 +KEY=749E1CF62F6EBE7D97CF2743F78B6C11 +CT=72BE585F98DA4DC03998B5820D5230A9 +PT=BCF3D47B888599A27AD63D6EFD8FB86F + +I=380 +KEY=C86DC88DA7EB27DFED191A2D0A04D47E +CT=BCF3D47B888599A27AD63D6EFD8FB86F +PT=62F7A2AD05BB46CB81B9601129100455 + +I=381 +KEY=AA9A6A20A25061146CA07A3C2314D02B +CT=62F7A2AD05BB46CB81B9601129100455 +PT=FA4D3B82232D19BE14A57422012C7751 + +I=382 +KEY=50D751A2817D78AA78050E1E2238A77A +CT=FA4D3B82232D19BE14A57422012C7751 +PT=40953AAA3D6C1BBE375A1E275754C98C + +I=383 +KEY=10426B08BC1163144F5F1039756C6EF6 +CT=40953AAA3D6C1BBE375A1E275754C98C +PT=CE9123C6A5A66AF788A8515721D646A0 + +I=384 +KEY=DED348CE19B709E3C7F7416E54BA2856 +CT=CE9123C6A5A66AF788A8515721D646A0 +PT=E45F3483E343F5C3C0AC77E955369AB3 + +I=385 +KEY=3A8C7C4DFAF4FC20075B3687018CB2E5 +CT=E45F3483E343F5C3C0AC77E955369AB3 +PT=6E7CE5F4BE070EC870691CDD494A767E + +I=386 +KEY=54F099B944F3F2E877322A5A48C6C49B +CT=6E7CE5F4BE070EC870691CDD494A767E +PT=2BB1EE551920A632E90EB9E462280365 + +I=387 +KEY=7F4177EC5DD354DA9E3C93BE2AEEC7FE +CT=2BB1EE551920A632E90EB9E462280365 +PT=692E0FA8B1C39CB96A11E21EA1B3365E + +I=388 +KEY=166F7844EC10C863F42D71A08B5DF1A0 +CT=692E0FA8B1C39CB96A11E21EA1B3365E +PT=345C0DE98A9F472B6BCBE241BB346590 + +I=389 +KEY=223375AD668F8F489FE693E130699430 +CT=345C0DE98A9F472B6BCBE241BB346590 +PT=D9D9313DC80FB90608614ECCC962207F + +I=390 +KEY=FBEA4490AE80364E9787DD2DF90BB44F +CT=D9D9313DC80FB90608614ECCC962207F +PT=7AEE31C488D1DD54B9AD8EE3AEFE546C + +I=391 +KEY=810475542651EB1A2E2A53CE57F5E023 +CT=7AEE31C488D1DD54B9AD8EE3AEFE546C +PT=9CF27E1202080D9F3A9B5E02290204EA + +I=392 +KEY=1DF60B462459E68514B10DCC7EF7E4C9 +CT=9CF27E1202080D9F3A9B5E02290204EA +PT=670085C6D3B95C6017DB9163B9D2D565 + +I=393 +KEY=7AF68E80F7E0BAE5036A9CAFC72531AC +CT=670085C6D3B95C6017DB9163B9D2D565 +PT=2A36E88DF74BA4B24283FEE52DDE5AA4 + +I=394 +KEY=50C0660D00AB1E5741E9624AEAFB6B08 +CT=2A36E88DF74BA4B24283FEE52DDE5AA4 +PT=81B75B31F130467F4A1FA6CA4A329E5E + +I=395 +KEY=D1773D3CF19B58280BF6C480A0C9F556 +CT=81B75B31F130467F4A1FA6CA4A329E5E +PT=D0A0347102BD11F9E2BD8E8A72D53ADC + +I=396 +KEY=01D7094DF32649D1E94B4A0AD21CCF8A +CT=D0A0347102BD11F9E2BD8E8A72D53ADC +PT=97F0187509608DF1D9B27AB5D005E505 + +I=397 +KEY=96271138FA46C42030F930BF02192A8F +CT=97F0187509608DF1D9B27AB5D005E505 +PT=E60139E36ECD7B24C7C98772C92A1E87 + +I=398 +KEY=702628DB948BBF04F730B7CDCB333408 +CT=E60139E36ECD7B24C7C98772C92A1E87 +PT=7E92E19E07A469E7D49D3D07EF719157 + +I=399 +KEY=0EB4C945932FD6E323AD8ACA2442A55F +CT=7E92E19E07A469E7D49D3D07EF719157 +PT=F5BF8B37136F2E1F6BEC6F572021E3BA + +========================= + +KEYSIZE=192 + +I=0 +KEY=000000000000000000000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=48E31E9E256718F29229319C19F15BA4 + +I=1 +KEY=9643D8334A63DF4D48E31E9E256718F29229319C19F15BA4 +CT=48E31E9E256718F29229319C19F15BA4 +PT=CC01684BE9B29ED01EA7923E7D2380AA + +I=2 +KEY=EF334C87288C43DE84E276D5CCD586228C8EA3A264D2DB0E +CT=CC01684BE9B29ED01EA7923E7D2380AA +PT=8726B4E66D6B8FBAA22D42981A5A40CC + +I=3 +KEY=0891A045BB044B9D03C4C233A1BE09982EA3E13A7E889BC2 +CT=8726B4E66D6B8FBAA22D42981A5A40CC +PT=83B9A21A0710FDB9C603797613772ED6 + +I=4 +KEY=A5233519DE914717807D6029A6AEF421E8A0984C6DFFB514 +CT=83B9A21A0710FDB9C603797613772ED6 +PT=F15479A2B2C250F7E5C11D333D867CBD + +I=5 +KEY=A1CB19726DB4C2C77129198B146CA4D60D61857F5079C9A9 +CT=F15479A2B2C250F7E5C11D333D867CBD +PT=C1AF401BD4E62D8BA15BEC3690F2FB25 + +I=6 +KEY=04B03C15DB8324B3B0865990C08A895DAC3A6949C08B328C +CT=C1AF401BD4E62D8BA15BEC3690F2FB25 +PT=01E01E3B10470286035EBD7502EF11A0 + +I=7 +KEY=A1CB0164AB1E88EDB16647ABD0CD8BDBAF64D43CC264232C +CT=01E01E3B10470286035EBD7502EF11A0 +PT=A681127825B718411291106AB416779A + +I=8 +KEY=27BFD9CB824C525617E755D3F57A939ABDF5C456767254B6 +CT=A681127825B718411291106AB416779A +PT=5C2EBA728589A9CAA15E28E7D8E59AA0 + +I=9 +KEY=B308E0DCE108194C4BC9EFA170F33A501CABECB1AE97CE16 +CT=5C2EBA728589A9CAA15E28E7D8E59AA0 +PT=E738305279BE636648B6D5FFA3E97E4A + +I=10 +KEY=FE787701EE66664BACF1DFF3094D5936541D394E0D7EB05C +CT=E738305279BE636648B6D5FFA3E97E4A +PT=5AF7D4C9439C7412FD7236E7685659DF + +I=11 +KEY=DD93D742AFA0B19CF6060B3A4AD12D24A96F0FA96528E983 +CT=5AF7D4C9439C7412FD7236E7685659DF +PT=30D0681D4060E24D1427D1AAC498DB1B + +I=12 +KEY=D5D19C2FEA9DC94BC6D663270AB1CF69BD48DE03A1B03298 +CT=30D0681D4060E24D1427D1AAC498DB1B +PT=FC9B6752064B1CCE75EBFBE91AF8F2CD + +I=13 +KEY=EB0954ECE44620833A4D04750CFAD3A7C8A325EABB48C055 +CT=FC9B6752064B1CCE75EBFBE91AF8F2CD +PT=61E6AE6E035BCC3C94EF00101216904A + +I=14 +KEY=E6E5AB38545B6DF75BABAA1B0FA11F9B5C4C25FAA95E501F +CT=61E6AE6E035BCC3C94EF00101216904A +PT=BF738A4E55F036126CC9B56DED530B8C + +I=15 +KEY=E8C670F71E5B62B6E4D820555A51298930859097440D5B93 +CT=BF738A4E55F036126CC9B56DED530B8C +PT=6B9CD4C227FC30C14FD881B838D9F8F5 + +I=16 +KEY=23FF647DD75770418F44F4977DAD19487F5D112F7CD4A366 +CT=6B9CD4C227FC30C14FD881B838D9F8F5 +PT=6173EF2B5C9B569A1BD4B62C7C913844 + +I=17 +KEY=DB94124B11CC03D9EE371BBC21364FD26489A70300459B22 +CT=6173EF2B5C9B569A1BD4B62C7C913844 +PT=709EF90F853E55123A917FB258E900F9 + +I=18 +KEY=4821CA96B50ACA049EA9E2B3A4081AC05E18D8B158AC9BDB +CT=709EF90F853E55123A917FB258E900F9 +PT=5D73D99E47B1DB28E0ED9B9D1C212CFA + +I=19 +KEY=FA47C5BF5E688F8BC3DA3B2DE3B9C1E8BEF5432C448DB721 +CT=5D73D99E47B1DB28E0ED9B9D1C212CFA +PT=32016FFCB2AA5EA6EA0C808F60613CA2 + +I=20 +KEY=C66A73E0D1261C2CF1DB54D151139F4E54F9C3A324EC8B83 +CT=32016FFCB2AA5EA6EA0C808F60613CA2 +PT=CAA3704F7FD76EBACB1D2A266A0899FF + +I=21 +KEY=FAE8E04094E572A33B78249E2EC4F1F49FE4E9854EE4127C +CT=CAA3704F7FD76EBACB1D2A266A0899FF +PT=E32DBD027A1A36B2EC8D0A98C9293E7E + +I=22 +KEY=8F2FBF9E40182950D855999C54DEC7467369E31D87CD2C02 +CT=E32DBD027A1A36B2EC8D0A98C9293E7E +PT=1C117311882C0D5159A9DFD5C3C68D95 + +I=23 +KEY=F6FB8F6DFAA034BFC444EA8DDCF2CA172AC03CC8440BA197 +CT=1C117311882C0D5159A9DFD5C3C68D95 +PT=5E379C2471DB04582CD861E6F8A419D7 + +I=24 +KEY=699DCA67F4EF50C49A7376A9AD29CE4F06185D2EBCAFB840 +CT=5E379C2471DB04582CD861E6F8A419D7 +PT=5932A84C6ACBD8452EE9AC47CE4B6BD8 + +I=25 +KEY=F568B4F126486CE4C341DEE5C7E2160A28F1F16972E4D398 +CT=5932A84C6ACBD8452EE9AC47CE4B6BD8 +PT=00634EED1D18C84AE0A8198CF791DE81 + +I=26 +KEY=C49E5E8D366B6FE7C3229008DAFADE40C859E8E585750D19 +CT=00634EED1D18C84AE0A8198CF791DE81 +PT=E10C93B1C466FFF0B6EB6DB50AF271EC + +I=27 +KEY=22B07DB9ED443A9D222E03B91E9C21B07EB285508F877CF5 +CT=E10C93B1C466FFF0B6EB6DB50AF271EC +PT=58A0C680F565E63A7E41C6EAC50A3B01 + +I=28 +KEY=2BDF4CCE2B4CAFDD7A8EC539EBF9C78A00F343BA4A8D47F4 +CT=58A0C680F565E63A7E41C6EAC50A3B01 +PT=92921B2AA7FC6367199A4C42FAE0E2A4 + +I=29 +KEY=E2BE29F6905D41C5E81CDE134C05A4ED19690FF8B06DA550 +CT=92921B2AA7FC6367199A4C42FAE0E2A4 +PT=B6EC2A692D2657E5506F2C3BA1912799 + +I=30 +KEY=E43634FD3DB719C75EF0F47A6123F308490623C311FC82C9 +CT=B6EC2A692D2657E5506F2C3BA1912799 +PT=23ECD0813B1A7090CF9BE874D6B0846C + +I=31 +KEY=ACA2F21EF46E30B57D1C24FB5A398398869DCBB7C74C06A5 +CT=23ECD0813B1A7090CF9BE874D6B0846C +PT=04BD52F4C1AB8DF4816A6E11F8B54452 + +I=32 +KEY=0130B37AFE24D66079A1760F9B920E6C07F7A5A63FF942F7 +CT=04BD52F4C1AB8DF4816A6E11F8B54452 +PT=DFA0074DEFEDB44D0D96AD6020D1A37D + +I=33 +KEY=00AC6BF5E3AD20FFA6017142747FBA210A6108C61F28E18A +CT=DFA0074DEFEDB44D0D96AD6020D1A37D +PT=5AB15057E05F73FAAF12C0EC26D3F02F + +I=34 +KEY=E3A70EBF3D9167AAFCB021159420C9DBA573C82A39FB11A5 +CT=5AB15057E05F73FAAF12C0EC26D3F02F +PT=6ECC2F23AB7854E97F215C52EF1E62E0 + +I=35 +KEY=CBCD9116DC78FA64927C0E363F589D32DA529478D6E57345 +CT=6ECC2F23AB7854E97F215C52EF1E62E0 +PT=930B3EBDE0989049056022E83FC9EF1E + +I=36 +KEY=FBB5E5462DE715180177308BDFC00D7BDF32B690E92C9C5B +CT=930B3EBDE0989049056022E83FC9EF1E +PT=1EE4ABB9ACD70B93A83BCD8751F858DE + +I=37 +KEY=E5D2B1ACD8BE6DF21F939B32731706E877097B17B8D4C485 +CT=1EE4ABB9ACD70B93A83BCD8751F858DE +PT=FCAC610EA0D309C6D36EED5A4BC04036 + +I=38 +KEY=54DD0B6CB083BDE8E33FFA3CD3C40F2EA467964DF31484B3 +CT=FCAC610EA0D309C6D36EED5A4BC04036 +PT=161D5EE8F50A3F69A11ADFEAF1A2A2AA + +I=39 +KEY=28309F7EB99AAEE1F522A4D426CE3047057D49A702B62619 +CT=161D5EE8F50A3F69A11ADFEAF1A2A2AA +PT=D9D365B061D2F3BF9DF94181837621B4 + +I=40 +KEY=E55ECDDFAE95A2C92CF1C164471CC3F89884082681C007AD +CT=D9D365B061D2F3BF9DF94181837621B4 +PT=938647A6AAD455D89A6DFEFE60D62331 + +I=41 +KEY=C9CEE1C9D89DF76ABF7786C2EDC8962002E9F6D8E116249C +CT=938647A6AAD455D89A6DFEFE60D62331 +PT=06A002DDC7DC4F22F9B1D5734C312AAA + +I=42 +KEY=B26709109B66C916B9D7841F2A14D902FB5823ABAD270E36 +CT=06A002DDC7DC4F22F9B1D5734C312AAA +PT=BB45E9BE2237E3288F56EDD0D9AD6734 + +I=43 +KEY=2FAD2FF32E10680502926DA108233A2A740ECE7B748A6902 +CT=BB45E9BE2237E3288F56EDD0D9AD6734 +PT=CF5A1338F5FA7ED4C77F6EA3836F079A + +I=44 +KEY=63D3D62540C790D1CDC87E99FDD944FEB371A0D8F7E56E98 +CT=CF5A1338F5FA7ED4C77F6EA3836F079A +PT=32F2D628117ADB46383FC101B58E95A6 + +I=45 +KEY=0DF38CE71CF26A19FF3AA8B1ECA39FB88B4E61D9426BFB3E +CT=32F2D628117ADB46383FC101B58E95A6 +PT=3A3CCEA99D43887AC64498AB4EFC87DD + +I=46 +KEY=7EEEB78A0C9BAA9FC506661871E017C24D0AF9720C977CE3 +CT=3A3CCEA99D43887AC64498AB4EFC87DD +PT=787DC1C632C4AA77D42324338C510146 + +I=47 +KEY=4DF02EE427AE29A1BD7BA7DE4324BDB59929DD4180C67DA5 +CT=787DC1C632C4AA77D42324338C510146 +PT=BB0635A471D26B80E5E387E4F14A1626 + +I=48 +KEY=D6983F5E8BE728D9067D927A32F6D6357CCA5AA5718C6B83 +CT=BB0635A471D26B80E5E387E4F14A1626 +PT=14A9AA3EE6343C2D57E0F2ED7A05DC0D + +I=49 +KEY=BD84A7CD471613B512D43844D4C2EA182B2AA8480B89B78E +CT=14A9AA3EE6343C2D57E0F2ED7A05DC0D +PT=25E254AD6C33908BC07B3DEC4052F549 + +I=50 +KEY=E54A2146242AADFB37366CE9B8F17A93EB5195A44BDB42C7 +CT=25E254AD6C33908BC07B3DEC4052F549 +PT=10E09F426E6F33CD21DF1EB748A46088 + +I=51 +KEY=0517B745BCE24E0527D6F3ABD69E495ECA8E8B13037F224F +CT=10E09F426E6F33CD21DF1EB748A46088 +PT=B65D2FFE83F9469AA2B1ABC559EAAB87 + +I=52 +KEY=8297790C75E8931C918BDC5555670FC4683F20D65A9589C8 +CT=B65D2FFE83F9469AA2B1ABC559EAAB87 +PT=E743F6441CCF9703FF4B8E3F4921ACDF + +I=53 +KEY=7EC47C0C5663CD4C76C82A1149A898C79774AEE913B42517 +CT=E743F6441CCF9703FF4B8E3F4921ACDF +PT=BECC5CF2F2C62A9E7D3CF979A9E96F94 + +I=54 +KEY=FBB1F10529FABEB3C80476E3BB6EB259EA485790BA5D4A83 +CT=BECC5CF2F2C62A9E7D3CF979A9E96F94 +PT=3718199958EAA473B980B95F9C76E03F + +I=55 +KEY=EE4113D30720269DFF1C6F7AE384162A53C8EECF262BAABC +CT=3718199958EAA473B980B95F9C76E03F +PT=D15525B8BBB6D209E0BB3B6F5ACB2556 + +I=56 +KEY=488286944DC6B0842E494AC25832C423B373D5A07CE08FEA +CT=D15525B8BBB6D209E0BB3B6F5ACB2556 +PT=0270AF07DDA52DF7CA7B0EE7DF098A80 + +I=57 +KEY=A32A880A84E7EDB82C39E5C58597E9D47908DB47A3E9056A +CT=0270AF07DDA52DF7CA7B0EE7DF098A80 +PT=2D380F99A182CD14CFFEF5E88B93B416 + +I=58 +KEY=DBD0FD5053BC52C60101EA5C241524C0B6F62EAF287AB17C +CT=2D380F99A182CD14CFFEF5E88B93B416 +PT=47FE8C67DCBC616E4C984D323EA4A45B + +I=59 +KEY=D79F78A4726F5FCA46FF663BF8A945AEFA6E639D16DE1527 +CT=47FE8C67DCBC616E4C984D323EA4A45B +PT=FA595C69C3286771FB8C921DFBBFFC2E + +I=60 +KEY=0C88AAD46F951FB6BCA63A523B8122DF01E2F180ED61E909 +CT=FA595C69C3286771FB8C921DFBBFFC2E +PT=8FA64C511FCE6FC987B327D12EBDADAD + +I=61 +KEY=762EEA21D382067E33007603244F4D168651D651C3DC44A4 +CT=8FA64C511FCE6FC987B327D12EBDADAD +PT=8F52C709508408B40C241FD38E515E76 + +I=62 +KEY=EA05788C20FB364EBC52B10A74CB45A28A75C9824D8D1AD2 +CT=8F52C709508408B40C241FD38E515E76 +PT=7CFD332B306684AC92279CE06F1287D8 + +I=63 +KEY=D4B2582B094D874DC0AF822144ADC10E18525562229F9D0A +CT=7CFD332B306684AC92279CE06F1287D8 +PT=0DA14F6619665E0128044355481BD658 + +I=64 +KEY=C080E7033FDF1BCFCD0ECD475DCB9F0F305616376A844B52 +CT=0DA14F6619665E0128044355481BD658 +PT=FEDEBE73AA4047AF27E86A8B9E8E2ED7 + +I=65 +KEY=C5BA9667999CF2D633D07334F78BD8A017BE7CBCF40A6585 +CT=FEDEBE73AA4047AF27E86A8B9E8E2ED7 +PT=12CD6896129E376AAB9C0E980F3B7CD2 + +I=66 +KEY=65FF092A539C4600211D1BA2E515EFCABC227224FB311957 +CT=12CD6896129E376AAB9C0E980F3B7CD2 +PT=04E7939B352F7B5C38B7EC5784EC78C2 + +I=67 +KEY=F98E7062F9EBE61C25FA8839D03A949684959E737FDD6195 +CT=04E7939B352F7B5C38B7EC5784EC78C2 +PT=0184996278A57E36E608E95616C46964 + +I=68 +KEY=306FBEFB3BF4E241247E115BA89FEAA0629D7725691908F1 +CT=0184996278A57E36E608E95616C46964 +PT=92179E392E05C8B96A0CFAC36109B09E + +I=69 +KEY=EE641F5DB58F9057B6698F62869A221908918DE60810B86F +CT=92179E392E05C8B96A0CFAC36109B09E +PT=7F197B01172C809635198E6B156D13BC + +I=70 +KEY=EADB8B255F98FD9DC970F46391B6A28F3D88038D1D7DABD3 +CT=7F197B01172C809635198E6B156D13BC +PT=46F6DD79AD079DCFBC451B24ECDDA4FA + +I=71 +KEY=47225D75FE68FFA08F86291A3CB13F4081CD18A9F1A00F29 +CT=46F6DD79AD079DCFBC451B24ECDDA4FA +PT=B5DAA09E3545F92FF44176187A1F9179 + +I=72 +KEY=7CDECC21E72E54F43A5C898409F4C66F758C6EB18BBF9E50 +CT=B5DAA09E3545F92FF44176187A1F9179 +PT=F51A35F3DD410132EEC9E9F22A6F6FAB + +I=73 +KEY=75D1AAFDBFE72C94CF46BC77D4B5C75D9B458743A1D0F1FB +CT=F51A35F3DD410132EEC9E9F22A6F6FAB +PT=D1CC6D95B58793C342CF14AF250D5E40 + +I=74 +KEY=41874C54BD58757A1E8AD1E26132549ED98A93EC84DDAFBB +CT=D1CC6D95B58793C342CF14AF250D5E40 +PT=A1FAB3B352A887A829357528FED4B80E + +I=75 +KEY=1D94704F4A51A5CABF706251339AD336F0BFE6C47A0917B5 +CT=A1FAB3B352A887A829357528FED4B80E +PT=CBC6473B3AA4DE2D64EED554CA241EAC + +I=76 +KEY=A41B52E0AE7E568074B6256A093E0D1B94513390B02D0919 +CT=CBC6473B3AA4DE2D64EED554CA241EAC +PT=19DC6E89D71DCE5DCECD1A6F85C3FBD6 + +I=77 +KEY=85F21BCD70691F596D6A4BE3DE23C3465A9C29FF35EEF2CF +CT=19DC6E89D71DCE5DCECD1A6F85C3FBD6 +PT=EC6974E51B21F26A100E66183C68FD15 + +I=78 +KEY=CAD0B254A88B669681033F06C502312C4A924FE709860FDA +CT=EC6974E51B21F26A100E66183C68FD15 +PT=A16B6F78009B6E30CB758E87AD4D8034 + +I=79 +KEY=8AC49B19582BFCF32068507EC5995F1C81E7C160A4CB8FEE +CT=A16B6F78009B6E30CB758E87AD4D8034 +PT=CB5C20AAFA898193BC34FF3EE460B313 + +I=80 +KEY=988F8D4F3A66AC99EB3470D43F10DE8F3DD33E5E40AB3CFD +CT=CB5C20AAFA898193BC34FF3EE460B313 +PT=397F92C8E69E0916E30DC6889779799E + +I=81 +KEY=DE2D26C6130E006ED24BE21CD98ED799DEDEF8D6D7D24563 +CT=397F92C8E69E0916E30DC6889779799E +PT=9A9CBD9380E2187855CAE5A73D58480F + +I=82 +KEY=BF6BE6D55C04977348D75F8F596CCFE18B141D71EA8A0D6C +CT=9A9CBD9380E2187855CAE5A73D58480F +PT=B67B360EE0FF297D3662F5B7CDB82CB9 + +I=83 +KEY=6582BCA895FA1221FEAC6981B993E69CBD76E8C6273221D5 +CT=B67B360EE0FF297D3662F5B7CDB82CB9 +PT=2D146ED9236082D2D71810969A1AB1FB + +I=84 +KEY=6AC68BB8BBC7F520D3B807589AF3644E6A6EF850BD28902E +CT=2D146ED9236082D2D71810969A1AB1FB +PT=4B9F55652C40B6DA963A98D875ADACE4 + +I=85 +KEY=180DAB1B14A92DB29827523DB6B3D294FC546088C8853CCA +CT=4B9F55652C40B6DA963A98D875ADACE4 +PT=FC0A8A3D511F5FAFF0A3DD13B49E5A13 + +I=86 +KEY=7ABD7440D5EE5FE2642DD800E7AC8D3B0CF7BD9B7C1B66D9 +CT=FC0A8A3D511F5FAFF0A3DD13B49E5A13 +PT=4231C02AD3231C3EB7AEB9135B95AC4B + +I=87 +KEY=54ACAE182B5FDACF261C182A348F9105BB590488278ECA92 +CT=4231C02AD3231C3EB7AEB9135B95AC4B +PT=4C3A949ACCCBB55F9415C81B1413FD9D + +I=88 +KEY=015706F99E81CC026A268CB0F844245A2F4CCC93339D370F +CT=4C3A949ACCCBB55F9415C81B1413FD9D +PT=E9B1CEAF77B64A88CC3E020B16E1BF7E + +I=89 +KEY=929BD0A1CC6450E78397421F8FF26ED2E372CE98257C8871 +CT=E9B1CEAF77B64A88CC3E020B16E1BF7E +PT=98FFEA0827068CB0B508CA520D8B43F7 + +I=90 +KEY=9B81EC47D8442D311B68A817A8F4E262567A04CA28F7CB86 +CT=98FFEA0827068CB0B508CA520D8B43F7 +PT=BEDA572C3CA3FEF97F7071DA35414EA1 + +I=91 +KEY=93B211B869CBECCBA5B2FF3B94571C9B290A75101DB68527 +CT=BEDA572C3CA3FEF97F7071DA35414EA1 +PT=35E8CB8302748C8623A09980909FB516 + +I=92 +KEY=BC5320E4025EB960905A34B89623901D0AAAEC908D293031 +CT=35E8CB8302748C8623A09980909FB516 +PT=E136148B2FA5AF5CD3F8BC3883566CB8 + +I=93 +KEY=C4EC937F948D0B5A716C2033B9863F41D95250A80E7F5C89 +CT=E136148B2FA5AF5CD3F8BC3883566CB8 +PT=B7CE40E3E3D30191CDF4AB5BE98F347A + +I=94 +KEY=6D381856C149D9DCC6A260D05A553ED014A6FBF3E7F068F3 +CT=B7CE40E3E3D30191CDF4AB5BE98F347A +PT=A821E934DAAE37FF3136E769DAC315FB + +I=95 +KEY=A3679C5957C656DE6E8389E480FB092F25901C9A3D337D08 +CT=A821E934DAAE37FF3136E769DAC315FB +PT=4227B96A0CC6CA1C21BCF8B1ADB3BDE1 + +I=96 +KEY=BE7112453B1DF3EC2CA4308E8C3DC333042CE42B9080C0E9 +CT=4227B96A0CC6CA1C21BCF8B1ADB3BDE1 +PT=EE36BBFDDF19165F9E64AE79B4CF06A9 + +I=97 +KEY=AEA4A2D5CD0A2FC7C2928B735324D56C9A484A52244FC640 +CT=EE36BBFDDF19165F9E64AE79B4CF06A9 +PT=C3DFE088C6767BC939F492C1FA9604CD + +I=98 +KEY=A16FC5F22F03984F014D6BFB9552AEA5A3BCD893DED9C28D +CT=C3DFE088C6767BC939F492C1FA9604CD +PT=DB1202E468119D977868F6E294E3CC3A + +I=99 +KEY=A4E0565DD419BDD1DA5F691FFD433332DBD42E714A3A0EB7 +CT=DB1202E468119D977868F6E294E3CC3A +PT=6F2F682BA4F95EB8C5B883C7660B2653 + +I=100 +KEY=3CAEE44D0E85058EB570013459BA6D8A1E6CADB62C3128E4 +CT=6F2F682BA4F95EB8C5B883C7660B2653 +PT=1036B4AA6C897D36DFE6658A953E5075 + +I=101 +KEY=4E883A500CA89963A546B59E353310BCC18AC83CB90F7891 +CT=1036B4AA6C897D36DFE6658A953E5075 +PT=04FCB3A81E5319A16CCF212719906229 + +I=102 +KEY=ADED5A405C5C095AA1BA06362B60091DAD45E91BA09F1AB8 +CT=04FCB3A81E5319A16CCF212719906229 +PT=CD79BAC069BB58605D43005B927816E5 + +I=103 +KEY=5499B441405D16B06CC3BCF642DB517DF006E94032E70C5D +CT=CD79BAC069BB58605D43005B927816E5 +PT=DB5B3C625D1F66CF28A86CC100472398 + +I=104 +KEY=D31221246382CA8EB79880941FC437B2D8AE858132A02FC5 +CT=DB5B3C625D1F66CF28A86CC100472398 +PT=D8732A2C16EC6AE202371AF03A6F91E8 + +I=105 +KEY=CDF928E97051F08B6FEBAAB809285D50DA999F7108CFBE2D +CT=D8732A2C16EC6AE202371AF03A6F91E8 +PT=F0A1A353A8AB9A893F621F0BEA3B4F01 + +I=106 +KEY=10CC2EED0ECBD1E69F4A09EBA183C7D9E5FB807AE2F4F12C +CT=F0A1A353A8AB9A893F621F0BEA3B4F01 +PT=27E4451BD15E43F301E138713DC12E78 + +I=107 +KEY=03C4F5E1FD3D34D1B8AE4CF070DD842AE41AB80BDF35DF54 +CT=27E4451BD15E43F301E138713DC12E78 +PT=C7FA931DA414CB37A9BDB6F128E082EE + +I=108 +KEY=CC5D7D36D085E3257F54DFEDD4C94F1D4DA70EFAF7D55DBA +CT=C7FA931DA414CB37A9BDB6F128E082EE +PT=A6777D51A0A1C94DD74A18795341015F + +I=109 +KEY=9F4EE4750FF3F53AD923A2BC746886509AED1683A4945CE5 +CT=A6777D51A0A1C94DD74A18795341015F +PT=32A4D930A5597E02D7076E399D18D895 + +I=110 +KEY=8525417BB6D8095BEB877B8CD131F8524DEA78BA398C8470 +CT=32A4D930A5597E02D7076E399D18D895 +PT=1B78FCF274EEB1E597998EE4EFFF9F8B + +I=111 +KEY=54EFA98071F1EF62F0FF877EA5DF49B7DA73F65ED6731BFB +CT=1B78FCF274EEB1E597998EE4EFFF9F8B +PT=2997FEE2823CC84DA14E8439449F5C7C + +I=112 +KEY=2505931CE4D41D16D968799C27E381FA7B3D726792EC4787 +CT=2997FEE2823CC84DA14E8439449F5C7C +PT=810534A9E8DB2808FEE681B13C04411D + +I=113 +KEY=C2DF863BEB4F27AB586D4D35CF38A9F285DBF3D6AEE8069A +CT=810534A9E8DB2808FEE681B13C04411D +PT=BE2380994365F1D7FC8278E86C8B497D + +I=114 +KEY=036C0C95D0C26B66E64ECDAC8C5D582579598B3EC2634FE7 +CT=BE2380994365F1D7FC8278E86C8B497D +PT=EFEC3977D5A21DC4AC786E786CA3ECE9 + +I=115 +KEY=BD05AD63A0A9F1B509A2F4DB59FF45E1D521E546AEC0A30E +CT=EFEC3977D5A21DC4AC786E786CA3ECE9 +PT=22A7280D8231895EA4F0B6A39AC583C3 + +I=116 +KEY=A16DFA00981597B42B05DCD6DBCECCBF71D153E5340520CD +CT=22A7280D8231895EA4F0B6A39AC583C3 +PT=0CC61E91B3CBCD0E190D52059E27647A + +I=117 +KEY=ABC1AD453235832727C3C247680501B168DC01E0AA2244B7 +CT=0CC61E91B3CBCD0E190D52059E27647A +PT=5CE91F77F7C8F0AB1BBA802D2FFF0E9B + +I=118 +KEY=64D40ACA0F526EC67B2ADD309FCDF11A736681CD85DD4A2C +CT=5CE91F77F7C8F0AB1BBA802D2FFF0E9B +PT=255459BE5A27E08942A049F6EC44582E + +I=119 +KEY=8BB5C7D8B2B177855E7E848EC5EA119331C6C83B69991202 +CT=255459BE5A27E08942A049F6EC44582E +PT=28E2E20115C3665D9D88CB74681301EA + +I=120 +KEY=4E30FCC4C182F471769C668FD02977CEAC4E034F018A13E8 +CT=28E2E20115C3665D9D88CB74681301EA +PT=2E96E6BBCD999F4B1507C7EC9E4B8430 + +I=121 +KEY=906B361E9D72E107580A80341DB0E885B949C4A39FC197D8 +CT=2E96E6BBCD999F4B1507C7EC9E4B8430 +PT=03DED0A95164E5FA215E9C49C433E95B + +I=122 +KEY=F656F5D9D973C02C5BD4509D4CD40D7F981758EA5BF27E83 +CT=03DED0A95164E5FA215E9C49C433E95B +PT=AD9C16D2567B73FCA4866FE16CF09CDA + +I=123 +KEY=8811A4ACDF37A140F648464F1AAF7E833C91370B3702E259 +CT=AD9C16D2567B73FCA4866FE16CF09CDA +PT=68539BFF0F8CC23A0A3267796A11B75C + +I=124 +KEY=E5AF2E8CDBAD01589E1BDDB01523BCB936A350725D135505 +CT=68539BFF0F8CC23A0A3267796A11B75C +PT=B15F623E5A7D73452A419EB04AFCF72E + +I=125 +KEY=C9E743CAD731A62E2F44BF8E4F5ECFFC1CE2CEC217EFA22B +CT=B15F623E5A7D73452A419EB04AFCF72E +PT=520142AFDA69E9CFA98D8DD59CCB12BC + +I=126 +KEY=6CF6C656FFBB77807D45FD2195372633B56F43178B24B097 +CT=520142AFDA69E9CFA98D8DD59CCB12BC +PT=7EC2A8430F23A5E183E0032DAB5232C5 + +I=127 +KEY=772CEE9F934D57D4038755629A1483D2368F403A20768252 +CT=7EC2A8430F23A5E183E0032DAB5232C5 +PT=E5E3A5D968B1FF774B55CCA06BE3BD65 + +I=128 +KEY=9A4DAB93F3C74EBBE664F0BBF2A57CA57DDA8C9A4B953F37 +CT=E5E3A5D968B1FF774B55CCA06BE3BD65 +PT=9608643D0A34DA28372A7E7E34427E1B + +I=129 +KEY=EF0F60BCBA3374E0706C9486F891A68D4AF0F2E47FD7412C +CT=9608643D0A34DA28372A7E7E34427E1B +PT=B22BD410584F29610801B18EDAB1BD19 + +I=130 +KEY=DE013A6C3440AFF3C2474096A0DE8FEC42F1436AA566FC35 +CT=B22BD410584F29610801B18EDAB1BD19 +PT=ADEC4519F1A7AD74BCCECABEDCF20D73 + +I=131 +KEY=2B5B547A934A5A376FAB058F51792298FE3F89D47994F146 +CT=ADEC4519F1A7AD74BCCECABEDCF20D73 +PT=E04D4FF54191BEEEF5B295A32DA2ADE5 + +I=132 +KEY=BF356F2FFC2C538F8FE64A7A10E89C760B8D1C7754365CA3 +CT=E04D4FF54191BEEEF5B295A32DA2ADE5 +PT=3F9531EDD5072F7A9F2A62ECC2CCE50A + +I=133 +KEY=7CEBD7310CC4791AB0737B97C5EFB30C94A77E9B96FAB9A9 +CT=3F9531EDD5072F7A9F2A62ECC2CCE50A +PT=C3DC95781FAE7BB6C02BD08B3617DDF1 + +I=134 +KEY=192741D2AB9C887673AFEEEFDA41C8BA548CAE10A0ED6458 +CT=C3DC95781FAE7BB6C02BD08B3617DDF1 +PT=F69B837F168B9A9E637E7357B65F2B60 + +I=135 +KEY=38552740A79FB5BF85346D90CCCA522437F2DD4716B24F38 +CT=F69B837F168B9A9E637E7357B65F2B60 +PT=40DCDF58E7EFDD62C114A83F8AC898BB + +I=136 +KEY=A0AED2C07C2168B6C5E8B2C82B258F46F6E675789C7AD783 +CT=40DCDF58E7EFDD62C114A83F8AC898BB +PT=27F78F3BD8E04A8646EBF364155A71ED + +I=137 +KEY=2B4FAEBF17993E12E21F3DF3F3C5C5C0B00D861C8920A66E +CT=27F78F3BD8E04A8646EBF364155A71ED +PT=F305DFC8EAD44E786F59B0551C7104F5 + +I=138 +KEY=96819F6E9738209F111AE23B19118BB8DF5436499551A29B +CT=F305DFC8EAD44E786F59B0551C7104F5 +PT=2E47F833BE7C06ED1E42AC11366F4BEF + +I=139 +KEY=AAEA16BAC3E84DD73F5D1A08A76D8D55C1169A58A33EE974 +CT=2E47F833BE7C06ED1E42AC11366F4BEF +PT=A9D3A511C3D76779B607AAB2556823AD + +I=140 +KEY=F66BA47C56AC5A36968EBF1964BAEA2C771130EAF656CAD9 +CT=A9D3A511C3D76779B607AAB2556823AD +PT=153A7CC2387C05289F759C85076CDD88 + +I=141 +KEY=1D892BCCFAF3DA1083B4C3DB5CC6EF04E864AC6FF13A1751 +CT=153A7CC2387C05289F759C85076CDD88 +PT=76B6089030D914F0F4C6078193207A7D + +I=142 +KEY=DAEBAF980095A397F502CB4B6C1FFBF41CA2ABEE621A6D2C +CT=76B6089030D914F0F4C6078193207A7D +PT=EB71D127848BA397451D45801830461E + +I=143 +KEY=85F86FADA92076AB1E731A6CE894586359BFEE6E7A2A2B32 +CT=EB71D127848BA397451D45801830461E +PT=B79D9BE1B2DB808B412413C203C710DF + +I=144 +KEY=BEADDA5CE1E7F3D4A9EE818D5A4FD8E8189BFDAC79ED3BED +CT=B79D9BE1B2DB808B412413C203C710DF +PT=E6423467C3CA69D94C944FA2A97BB61F + +I=145 +KEY=D4664C8DCFA8304D4FACB5EA9985B131540FB20ED0968DF2 +CT=E6423467C3CA69D94C944FA2A97BB61F +PT=18EFF53B7D62A9D9ED8AB9ABE67FC110 + +I=146 +KEY=9CCF1EEAF55FEA5A574340D1E4E718E8B9850BA536E94CE2 +CT=18EFF53B7D62A9D9ED8AB9ABE67FC110 +PT=8E6A4AC577153D806ED71A07319CAB67 + +I=147 +KEY=7D840184CB9D3A05D9290A1493F22568D75211A20775E785 +CT=8E6A4AC577153D806ED71A07319CAB67 +PT=B7B23D8E7D344F39B3EA0D67CCF37377 + +I=148 +KEY=D72F35B6DD825B656E9B379AEEC66A5164B81CC5CB8694F2 +CT=B7B23D8E7D344F39B3EA0D67CCF37377 +PT=3385AD0503AF68BFBFBEAA89B1C87736 + +I=149 +KEY=48335F06D7C27C955D1E9A9FED6902EEDB06B64C7A4EE3C4 +CT=3385AD0503AF68BFBFBEAA89B1C87736 +PT=9FC40A6B984BEEC182AB650B05CEF38C + +I=150 +KEY=A66149286535FD6EC2DA90F47522EC2F59ADD3477F801048 +CT=9FC40A6B984BEEC182AB650B05CEF38C +PT=4CEC52C9DE143486DFC9D098637DFBB5 + +I=151 +KEY=7EA78450FAEEF8BF8E36C23DAB36D8A9866403DF1CFDEBFD +CT=4CEC52C9DE143486DFC9D098637DFBB5 +PT=EB8E40333ACD18EFB04DC0A857DDCD7A + +I=152 +KEY=197DDF842BAEF36E65B8820E91FBC0463629C3774B202687 +CT=EB8E40333ACD18EFB04DC0A857DDCD7A +PT=F1AFF04058F819B0F191398C8022130F + +I=153 +KEY=D68841CF848B0F619417724EC903D9F6C7B8FAFBCB023588 +CT=F1AFF04058F819B0F191398C8022130F +PT=6DF4A95D8D602C0E53F5A5C350D3EB64 + +I=154 +KEY=6DFA0F7B01A2F011F9E3DB134463F5F8944D5F389BD1DEEC +CT=6DF4A95D8D602C0E53F5A5C350D3EB64 +PT=057D8F9BE9260BB3A0382CD2EF7D1FCA + +I=155 +KEY=88227C4AD1CBC8F0FC9E5488AD45FE4B347573EA74ACC126 +CT=057D8F9BE9260BB3A0382CD2EF7D1FCA +PT=D4EDACCB9B7B35F2A0690E22C91E25AE + +I=156 +KEY=848B8E3213D366B22873F843363ECBB9941C7DC8BDB2E488 +CT=D4EDACCB9B7B35F2A0690E22C91E25AE +PT=A2F61B5BDD9F580B26C329B878BAFA3C + +I=157 +KEY=FA3A476D1C6E33FD8A85E318EBA193B2B2DF5470C5081EB4 +CT=A2F61B5BDD9F580B26C329B878BAFA3C +PT=5A0616880CD40B72B58CF268EC8F934B + +I=158 +KEY=C9F77D58F58D5FEDD083F590E77598C00753A61829878DFF +CT=5A0616880CD40B72B58CF268EC8F934B +PT=0E42047D7EDE2A5FBB37767A69A45B9B + +I=159 +KEY=00A523C700FBB663DEC1F1ED99ABB29FBC64D0624023D664 +CT=0E42047D7EDE2A5FBB37767A69A45B9B +PT=2AFA823A10BB436A7B00816C80A52711 + +I=160 +KEY=660275323A59E807F43B73D78910F1F5C764510EC086F175 +CT=2AFA823A10BB436A7B00816C80A52711 +PT=B2406F3F9160E25DF7C9AA81AF6EB449 + +I=161 +KEY=47A4FCDB97D4A383467B1CE8187013A830ADFB8F6FE8453C +CT=B2406F3F9160E25DF7C9AA81AF6EB449 +PT=B1E01D2A401495F8DDAEAB7B04BEB23D + +I=162 +KEY=2BDD5B54D4EB236AF79B01C258648650ED0350F46B56F701 +CT=B1E01D2A401495F8DDAEAB7B04BEB23D +PT=390572A9ECE28A0E0BBDC729DBE5F79A + +I=163 +KEY=328202460B65D004CE9E736BB4860C5EE6BE97DDB0B3009B +CT=390572A9ECE28A0E0BBDC729DBE5F79A +PT=5D41665811702124C597DB4E3BD950E1 + +I=164 +KEY=94457C0A759DF4E993DF1533A5F62D7A23294C938B6A507A +CT=5D41665811702124C597DB4E3BD950E1 +PT=689EB1CB1586D127696E8725DEE49E58 + +I=165 +KEY=4E0226CA850DDC79FB41A4F8B070FC5D4A47CBB6558ECE22 +CT=689EB1CB1586D127696E8725DEE49E58 +PT=A2D9DF62AC8BF8A93E7A954416864052 + +I=166 +KEY=659C817A1C10A24D59987B9A1CFB04F4743D5EF243088E70 +CT=A2D9DF62AC8BF8A93E7A954416864052 +PT=507835696F1920BD4A05797563DF5769 + +I=167 +KEY=92192D9175187FB409E04EF373E224493E38278720D7D919 +CT=507835696F1920BD4A05797563DF5769 +PT=2070413F5103482B6C83129304E5AC87 + +I=168 +KEY=6959063FBA59CCEC29900FCC22E16C6252BB35142432759E +CT=2070413F5103482B6C83129304E5AC87 +PT=BF7FD1E21B41B1F1C2625C1097F1BCB8 + +I=169 +KEY=5722993710D811B196EFDE2E39A0DD9390D96904B3C3C926 +CT=BF7FD1E21B41B1F1C2625C1097F1BCB8 +PT=6E2236654F2999545F50FA9CF63F9F2E + +I=170 +KEY=038FA98E7A226A9FF8CDE84B768944C7CF89939845FC5608 +CT=6E2236654F2999545F50FA9CF63F9F2E +PT=3F370291CEDCB115C8EE409A8EEB46D6 + +I=171 +KEY=CACF0199725D5466C7FAEADAB855F5D20767D302CB1710DE +CT=3F370291CEDCB115C8EE409A8EEB46D6 +PT=84023DB96D373EC8315AE78A3B7E82FB + +I=172 +KEY=7B40321CB11520D143F8D763D562CB1A363D3488F0699225 +CT=84023DB96D373EC8315AE78A3B7E82FB +PT=C35064D82A3016FE2C2E2CC0627E7B5C + +I=173 +KEY=F045CFEC2A6BC7E580A8B3BBFF52DDE41A1318489217E979 +CT=C35064D82A3016FE2C2E2CC0627E7B5C +PT=D78DFFE87C0F95856C31A07BADA23084 + +I=174 +KEY=86B3CA5F50CEF6C557254C53835D48617622B8333FB5D9FD +CT=D78DFFE87C0F95856C31A07BADA23084 +PT=5B5B5D3CA5C6E5CF18F3E4EE802BE82B + +I=175 +KEY=E6D99DC0C58655B70C7E116F269BADAE6ED15CDDBF9E31D6 +CT=5B5B5D3CA5C6E5CF18F3E4EE802BE82B +PT=DB65A82F6EB7A410A367165900E85117 + +I=176 +KEY=B8F770CFBE47D070D71BB940482C09BECDB64A84BF7660C1 +CT=DB65A82F6EB7A410A367165900E85117 +PT=FE8BE8484D925043102238FF63FDAC57 + +I=177 +KEY=FF09ADB06FE587192990510805BE59FDDD94727BDC8BCC96 +CT=FE8BE8484D925043102238FF63FDAC57 +PT=AC36E01A7AD482A8D89703D2A6528720 + +I=178 +KEY=B5C937A4019CDAD185A6B1127F6ADB55050371A97AD94BB6 +CT=AC36E01A7AD482A8D89703D2A6528720 +PT=9F3698CE06C6497C89B58CA723F7ECAA + +I=179 +KEY=F60CAF8FB99B63B21A9029DC79AC92298CB6FD0E592EA71C +CT=9F3698CE06C6497C89B58CA723F7ECAA +PT=FB8CE2E1D332FE4557B6C5CF1676F2FB + +I=180 +KEY=B7CF2BABD58B5FDCE11CCB3DAA9E6C6CDB0038C14F5855E7 +CT=FB8CE2E1D332FE4557B6C5CF1676F2FB +PT=A2631F612698318AD454E9DB10319DA6 + +I=181 +KEY=FD99B4137CAFC47F437FD45C8C065DE60F54D11A5F69C841 +CT=A2631F612698318AD454E9DB10319DA6 +PT=FCA42B332B5974EE6DFA54B54EC89AC7 + +I=182 +KEY=271CEEF189AD367DBFDBFF6FA75F290862AE85AF11A15286 +CT=FCA42B332B5974EE6DFA54B54EC89AC7 +PT=A70DBBDFCE54B8648C3FC4A8A58CCDF8 + +I=183 +KEY=7B78F7ECC9B28EC718D644B0690B916CEE914107B42D9F7E +CT=A70DBBDFCE54B8648C3FC4A8A58CCDF8 +PT=C90CE914F9310F9C3EE065DD95281A51 + +I=184 +KEY=762F521ADF6C5F24D1DAADA4903A9EF0D07124DA2105852F +CT=C90CE914F9310F9C3EE065DD95281A51 +PT=63E8430CE22F531E4A4D4583533F6FC4 + +I=185 +KEY=A88A493EB3C28C49B232EEA87215CDEE9A3C6159723AEAEB +CT=63E8430CE22F531E4A4D4583533F6FC4 +PT=E7562DC647910A052F4AFBF165A68A3A + +I=186 +KEY=1C97343A60EE05035564C36E3584C7EBB5769AA8179C60D1 +CT=E7562DC647910A052F4AFBF165A68A3A +PT=3E070B3F65FD01B49849513B556DB199 + +I=187 +KEY=C5110692100A332E6B63C8515079C65F2D3FCB9342F1D148 +CT=3E070B3F65FD01B49849513B556DB199 +PT=3DE5A45B2CAA4FAFAC3032F89F15195D + +I=188 +KEY=D94D8CAA9EBD67F056866C0A7CD389F0810FF96BDDE4C815 +CT=3DE5A45B2CAA4FAFAC3032F89F15195D +PT=A36A163E8806B1E053EBE439B0D1302F + +I=189 +KEY=1C1D7A3E9358048CF5EC7A34F4D53810D2E41D526D35F83A +CT=A36A163E8806B1E053EBE439B0D1302F +PT=67CA4B988CCABA4E4DBEE6C387562762 + +I=190 +KEY=9182E40D14973087922631AC781F825E9F5AFB91EA63DF58 +CT=67CA4B988CCABA4E4DBEE6C387562762 +PT=9F404F0E1A9FE5A988CE6E4A54FE9E23 + +I=191 +KEY=7D89ECFC0DCFFE0A0D667EA2628067F7179495DBBE9D417B +CT=9F404F0E1A9FE5A988CE6E4A54FE9E23 +PT=D71EFD794457C71614E4266C77193444 + +I=192 +KEY=AC7A11D29CDA0FB6DA7883DB26D7A0E10370B3B7C984753F +CT=D71EFD794457C71614E4266C77193444 +PT=185DBF418A6834CD118B16EAF381F3CB + +I=193 +KEY=1029D5FA3D38927EC2253C9AACBF942C12FBA55D3A0586F4 +CT=185DBF418A6834CD118B16EAF381F3CB +PT=737A502DEE68DDFA3FEECD42ACE124EA + +I=194 +KEY=F261B484C642750CB15F6CB742D749D62D15681F96E4A21E +CT=737A502DEE68DDFA3FEECD42ACE124EA +PT=FD11B0F356455913E892928B5B16946B + +I=195 +KEY=BCCFAF05FF47A5EC4C4EDC44149210C5C587FA94CDF23675 +CT=FD11B0F356455913E892928B5B16946B +PT=4B06F6D6D149BAF25D4C76E46EFF8571 + +I=196 +KEY=1000A15983B73D6807482A92C5DBAA3798CB8C70A30DB304 +CT=4B06F6D6D149BAF25D4C76E46EFF8571 +PT=450713DA24492403C48CB16D2F39744E + +I=197 +KEY=306F097E64B634AC424F3948E1928E345C473D1D8C34C74A +CT=450713DA24492403C48CB16D2F39744E +PT=998CA5E3C80B66EB11EAD376FA358A92 + +I=198 +KEY=13965208C3EF77E1DBC39CAB2999E8DF4DADEE6B76014DD8 +CT=998CA5E3C80B66EB11EAD376FA358A92 +PT=F54A34F6F0833CA808D60A8F75BB0585 + +I=199 +KEY=1A6DC3FDD0D1F97C2E89A85DD91AD477457BE4E403BA485D +CT=F54A34F6F0833CA808D60A8F75BB0585 +PT=8760D5CBD1DA48807BAEAF7F781680F2 + +I=200 +KEY=228897B4E2F16967A9E97D9608C09CF73ED54B9B7BACC8AF +CT=8760D5CBD1DA48807BAEAF7F781680F2 +PT=EF57DF7161E1BC0F7B466A50C576691A + +I=201 +KEY=D0E8190E72A305C946BEA2E7692120F8459321CBBEDAA1B5 +CT=EF57DF7161E1BC0F7B466A50C576691A +PT=E01ECA338A93EA38E43B2F364314C121 + +I=202 +KEY=087F0486B80659F0A6A068D4E3B2CAC0A1A80EFDFDCE6094 +CT=E01ECA338A93EA38E43B2F364314C121 +PT=A7683273638D02272FF6A311BB94256F + +I=203 +KEY=1D807E4730DDA3EB01C85AA7803FC8E78E5EADEC465A45FB +CT=A7683273638D02272FF6A311BB94256F +PT=1BCC3DF6B07BD2615C13E381F5F877C3 + +I=204 +KEY=D4D4F2780D52D7521A04675130441A86D24D4E6DB3A23238 +CT=1BCC3DF6B07BD2615C13E381F5F877C3 +PT=D1B3B793D1377E82A2DE5D46E53791FB + +I=205 +KEY=86D08D85652DB662CBB7D0C2E17364047093132B5695A3C3 +CT=D1B3B793D1377E82A2DE5D46E53791FB +PT=9AC7AF9B82621E18E4FF613EAA609F46 + +I=206 +KEY=C03996907AC99A7A51707F5963117A1C946C7215FCF53C85 +CT=9AC7AF9B82621E18E4FF613EAA609F46 +PT=57F3FA35A42C29F33DEC4671140264A4 + +I=207 +KEY=F8CA52D95C587EF80683856CC73D53EFA9803464E8F75821 +CT=57F3FA35A42C29F33DEC4671140264A4 +PT=A887ED8BF6C19F5012F317A4FCF3D7BF + +I=208 +KEY=DE99CC8F9756C1DCAE0468E731FCCCBFBB7323C014048F9E +CT=A887ED8BF6C19F5012F317A4FCF3D7BF +PT=A29C8D764BCF211C789158A9B8EB330C + +I=209 +KEY=9228DB1B61E0D8670C98E5917A33EDA3C3E27B69ACEFBC92 +CT=A29C8D764BCF211C789158A9B8EB330C +PT=EB6AFD9B36315DB322EC8C4243043F50 + +I=210 +KEY=24AFE14097C2A217E7F2180A4C02B010E10EF72BEFEB83C2 +CT=EB6AFD9B36315DB322EC8C4243043F50 +PT=05C8AC90CCD00E2A3809C68C11D6D65A + +I=211 +KEY=32810943F9313BD0E23AB49A80D2BE3AD90731A7FE3D5598 +CT=05C8AC90CCD00E2A3809C68C11D6D65A +PT=E39991B58C52154166AD09367B04C67A + +I=212 +KEY=FBEC72A177254EA501A3252F0C80AB7BBFAA3891853993E2 +CT=E39991B58C52154166AD09367B04C67A +PT=CBC8974F72F77A1821FC69B29FE2DB60 + +I=213 +KEY=C706D206DE538439CA6BB2607E77D1639E5651231ADB4882 +CT=CBC8974F72F77A1821FC69B29FE2DB60 +PT=1D08F4E2B8DFED1032B6CA5211B3E34C + +I=214 +KEY=9A7EB0A4F8E67F87D7634682C6A83C73ACE09B710B68ABCE +CT=1D08F4E2B8DFED1032B6CA5211B3E34C +PT=1888CEC22449EFF96BDC2C7A242BBBDC + +I=215 +KEY=70CA2CAD6A50D22BCFEB8840E2E1D38AC73CB70B2F431012 +CT=1888CEC22449EFF96BDC2C7A242BBBDC +PT=032E6155677B6A72D7F94C7A9A9AA53F + +I=216 +KEY=B16697FEA247CDB9CCC5E915859AB9F810C5FB71B5D9B52D +CT=032E6155677B6A72D7F94C7A9A9AA53F +PT=9B43BBD1C0CEBF7593E9BC0ABB626E96 + +I=217 +KEY=7A3E844BEB897A63578652C44554068D832C477B0EBBDBBB +CT=9B43BBD1C0CEBF7593E9BC0ABB626E96 +PT=8D661E03C61C28D5786EBCEBE0D5B63D + +I=218 +KEY=E7A1B96EFC4D5FB5DAE04CC783482E58FB42FB90EE6E6D86 +CT=8D661E03C61C28D5786EBCEBE0D5B63D +PT=F61D5DCBF8F2F3F0EAB387149790E079 + +I=219 +KEY=0EDA761C06FBA0A02CFD110C7BBADDA811F17C8479FE8DFF +CT=F61D5DCBF8F2F3F0EAB387149790E079 +PT=1F03E0957B6892533BBEAB06EB35AD4F + +I=220 +KEY=E242AD5B7141916133FEF19900D24FFB2A4FD78292CB20B0 +CT=1F03E0957B6892533BBEAB06EB35AD4F +PT=BB9E7343035F88764B229D506E7ADC7B + +I=221 +KEY=D901A6CF874A6A77886082DA038DC78D616D4AD2FCB1FCCB +CT=BB9E7343035F88764B229D506E7ADC7B +PT=3934EBF7AD2243C0D09734E30B41C0E4 + +I=222 +KEY=0F488E86E7D92F29B154692DAEAF844DB1FA7E31F7F03C2F +CT=3934EBF7AD2243C0D09734E30B41C0E4 +PT=B9CE1A1A9595E7235F5B10FBA29ACCD2 + +I=223 +KEY=A7E2CF991692247A089A73373B3A636EEEA16ECA556AF0FD +CT=B9CE1A1A9595E7235F5B10FBA29ACCD2 +PT=624EBA65EE9E3E1BDF8C5AA7E1283A65 + +I=224 +KEY=1DE03E09395E56CE6AD4C952D5A45D75312D346DB442CA98 +CT=624EBA65EE9E3E1BDF8C5AA7E1283A65 +PT=375132E5F47DA19E80CC8652BE5A3692 + +I=225 +KEY=51B6813629EFE53C5D85FBB721D9FCEBB1E1B23F0A18FC0A +CT=375132E5F47DA19E80CC8652BE5A3692 +PT=8165A4126FE75EFC6AFF7BFD732F94A6 + +I=226 +KEY=8DD50DFF93624339DCE05FA54E3EA217DB1EC9C2793768AC +CT=8165A4126FE75EFC6AFF7BFD732F94A6 +PT=35012FABD289E6B7FB07946591D18F0D + +I=227 +KEY=C7A4F75CB74C7F3DE9E1700E9CB744A020195DA7E8E6E7A1 +CT=35012FABD289E6B7FB07946591D18F0D +PT=C26F37D700677ED72F4FC2C8F6AEADE2 + +I=228 +KEY=198B572CD0E711352B8E47D99CD03A770F569F6F1E484A43 +CT=C26F37D700677ED72F4FC2C8F6AEADE2 +PT=CB29ECE41596736B72AED2460AEEFBA2 + +I=229 +KEY=0A1FB41CA720E357E0A7AB3D8946491C7DF84D2914A6B1E1 +CT=CB29ECE41596736B72AED2460AEEFBA2 +PT=7F7BD6FAF9C37D5522A3BF480CCEBF20 + +I=230 +KEY=7E383601899DEA729FDC7DC7708534495F5BF26118680EC1 +CT=7F7BD6FAF9C37D5522A3BF480CCEBF20 +PT=C501E371005DF57E0037F41A744D026F + +I=231 +KEY=13ACF410865B41E15ADD9EB670D8C1375F6C067B6C250CAE +CT=C501E371005DF57E0037F41A744D026F +PT=624EF8749580108CDC7A020179F81D0F + +I=232 +KEY=75F025072AA2406F389366C2E558D1BB8316047A15DD11A1 +CT=624EF8749580108CDC7A020179F81D0F +PT=40D72550603522C67180DE6EC3D30139 + +I=233 +KEY=C5ED76F88EA65C3D78444392856DF37DF296DA14D60E1098 +CT=40D72550603522C67180DE6EC3D30139 +PT=96C6F647AFB90F804431F9E2F1780F29 + +I=234 +KEY=E827DFF88D0B1A43EE82B5D52AD4FCFDB6A723F627761FB1 +CT=96C6F647AFB90F804431F9E2F1780F29 +PT=CCB934A501DDAD11E994938A214EB189 + +I=235 +KEY=F0777D1BFF12EE42223B81702B0951EC5F33B07C0638AE38 +CT=CCB934A501DDAD11E994938A214EB189 +PT=07825F2D35E761C76893B697E30E4D08 + +I=236 +KEY=6912B59C06C90D3725B9DE5D1EEE302B37A006EBE536E330 +CT=07825F2D35E761C76893B697E30E4D08 +PT=1F674E97F88EB1DA1DD24C0AB4321258 + +I=237 +KEY=AE24933526FAE5F83ADE90CAE66081F12A724AE15104F168 +CT=1F674E97F88EB1DA1DD24C0AB4321258 +PT=B6DE499EBE0B3C30F1DAC8E40FE9F10C + +I=238 +KEY=F348F88852CF356C8C00D954586BBDC1DBA882055EED0064 +CT=B6DE499EBE0B3C30F1DAC8E40FE9F10C +PT=105E31DBDE33764B098862AF6D0B6CD2 + +I=239 +KEY=83B06CC00A17D3149C5EE88F8658CB8AD220E0AA33E66CB6 +CT=105E31DBDE33764B098862AF6D0B6CD2 +PT=697D6537677B20C188246FBF4997C7CB + +I=240 +KEY=A5381A9C91D61A01F5238DB8E123EB4B5A048F157A71AB7D +CT=697D6537677B20C188246FBF4997C7CB +PT=4FBFB0EFBA92C1E0189E2C3097AA35BA + +I=241 +KEY=FDF831A7D1345AFEBA9C3D575BB12AAB429AA325EDDB9EC7 +CT=4FBFB0EFBA92C1E0189E2C3097AA35BA +PT=600288531DCEB99B69A7890CE804FA9F + +I=242 +KEY=A10ED54E7B2B2B2BDA9EB504467F93302B3D2A2905DF6458 +CT=600288531DCEB99B69A7890CE804FA9F +PT=EE94D4376D9332C8DCD05C695EDB124F + +I=243 +KEY=2F69F01250D7745F340A61332BECA1F8F7ED76405B047617 +CT=EE94D4376D9332C8DCD05C695EDB124F +PT=7EDC3182C36DC5A172B170A919524888 + +I=244 +KEY=FCD5F8FAB347624E4AD650B1E8816459855C06E942563E9F +CT=7EDC3182C36DC5A172B170A919524888 +PT=95FA03C96DFCB9ABCFF23B5ABFBABCDE + +I=245 +KEY=A9307E62197A747EDF2C5378857DDDF24AAE3DB3FDEC8241 +CT=95FA03C96DFCB9ABCFF23B5ABFBABCDE +PT=6CE2C6CFC61667965C20B0BE11B55DDE + +I=246 +KEY=DA3B03896DDFDE08B3CE95B7436BBA64168E8D0DEC59DF9F +CT=6CE2C6CFC61667965C20B0BE11B55DDE +PT=3DBDFBE63A6FAE7572C778108A62A27C + +I=247 +KEY=7D766BAD6E536CE38E736E51790414116449F51D663B7DE3 +CT=3DBDFBE63A6FAE7572C778108A62A27C +PT=1C197D3449FED6ED6924E14B43A17BF0 + +I=248 +KEY=36F69C30B0272CAB926A136530FAC2FC0D6D1456259A0613 +CT=1C197D3449FED6ED6924E14B43A17BF0 +PT=0B0CCC6F508C18168284F7976AD81BEE + +I=249 +KEY=632661C312B2EB5D9966DF0A6076DAEA8FE9E3C14F421DFD +CT=0B0CCC6F508C18168284F7976AD81BEE +PT=F437B8FD92CE37D8D74550C5BE29BF99 + +I=250 +KEY=5FB1BDFC29EFE2DA6D5167F7F2B8ED3258ACB304F16BA264 +CT=F437B8FD92CE37D8D74550C5BE29BF99 +PT=78F6E6F6480A04F5632EA112170F928C + +I=251 +KEY=2B24C5188F4A2E7B15A78101BAB2E9C73B821216E66430E8 +CT=78F6E6F6480A04F5632EA112170F928C +PT=2FD38831EE4D09DD8DB9A84B5825B528 + +I=252 +KEY=F816FB720A08828C3A74093054FFE01AB63BBA5DBE4185C0 +CT=2FD38831EE4D09DD8DB9A84B5825B528 +PT=ED307697B51CFAD7052A3A7B3A564990 + +I=253 +KEY=776B08F4778FAB96D7447FA7E1E31ACDB31180268417CC50 +CT=ED307697B51CFAD7052A3A7B3A564990 +PT=DB9952A98F0D4B045C624EFA5619CAF9 + +I=254 +KEY=C7A944C9BA2D5F740CDD2D0E6EEE51C9EF73CEDCD20E06A9 +CT=DB9952A98F0D4B045C624EFA5619CAF9 +PT=DADA40BF0E367AF50874BB2628251AA3 + +I=255 +KEY=69B8688D9C1ECD95D6076DB160D82B3CE70775FAFA2B1C0A +CT=DADA40BF0E367AF50874BB2628251AA3 +PT=35DFA85D3F2D7F47DD7865EA0BC73A5C + +I=256 +KEY=7E6C7E90EDE36F44E3D8C5EC5FF5547B3A7F1010F1EC2656 +CT=35DFA85D3F2D7F47DD7865EA0BC73A5C +PT=EE0231F994C2DB6C7C04746170F03E54 + +I=257 +KEY=0E56C8FD184AB5D40DDAF415CB378F17467B6471811C1802 +CT=EE0231F994C2DB6C7C04746170F03E54 +PT=D9F314FEAD11122CE8F532ED0C0B129C + +I=258 +KEY=267BC5325796002BD429E0EB66269D3BAE8E569C8D170A9E +CT=D9F314FEAD11122CE8F532ED0C0B129C +PT=74A32BDFF53A59F09AAFB328977E05B1 + +I=259 +KEY=889B6087CAAD1B43A08ACB34931CC4CB3421E5B41A690F2F +CT=74A32BDFF53A59F09AAFB328977E05B1 +PT=D4CCC3077C15EE470D5EFCF815A48410 + +I=260 +KEY=F9AE78D077E3F98574460833EF092A8C397F194C0FCD8B3F +CT=D4CCC3077C15EE470D5EFCF815A48410 +PT=29284B0E7776DFB8BB536B3C16399D62 + +I=261 +KEY=71BBCD4B1F4B04265D6E433D987FF534822C727019F4165D +CT=29284B0E7776DFB8BB536B3C16399D62 +PT=202326CEAD57A5C13592FFBFFD5BF508 + +I=262 +KEY=F6F461C7931CF0317D4D65F3352850F5B7BE8DCFE4AFE355 +CT=202326CEAD57A5C13592FFBFFD5BF508 +PT=B9AFAD0658E1A4A1EECAA25B2863AD53 + +I=263 +KEY=BC0D82D3B7909D54C4E2C8F56DC9F45459742F94CCCC4E06 +CT=B9AFAD0658E1A4A1EECAA25B2863AD53 +PT=DE7AC7F7381DD34F3148911F306F4161 + +I=264 +KEY=339FFE2E01AB1D621A980F0255D4271B683CBE8BFCA30F67 +CT=DE7AC7F7381DD34F3148911F306F4161 +PT=F197DE9FED1EA08F6C17E631BF5449FE + +I=265 +KEY=EC908F9A4F266644EB0FD19DB8CA8794042B58BA43F74699 +CT=F197DE9FED1EA08F6C17E631BF5449FE +PT=7E1416C06ED3F56782DB5CB536B9B56E + +I=266 +KEY=CFE36CCCC94F8A5B951BC75DD61972F386F0040F754EF3F7 +CT=7E1416C06ED3F56782DB5CB536B9B56E +PT=BE1FE1F7B4CFF55D15BBCB6D9313729D + +I=267 +KEY=90690906407FB8AC2B0426AA62D687AE934BCF62E65D816A +CT=BE1FE1F7B4CFF55D15BBCB6D9313729D +PT=50E6818C06583D3D1C99C4A127D118CF + +I=268 +KEY=5D2A712578EC47217BE2A726648EBA938FD20BC3C18C99A5 +CT=50E6818C06583D3D1C99C4A127D118CF +PT=E1BFD3ED18E9A6D7BF383D590DA23B59 + +I=269 +KEY=3CA141EE57D7E0FC9A5D74CB7C671C4430EA369ACC2EA2FC +CT=E1BFD3ED18E9A6D7BF383D590DA23B59 +PT=03961127347C141C01F5276CB9BB31F7 + +I=270 +KEY=65E9B8AE22DC52A599CB65EC481B0858311F11F67595930B +CT=03961127347C141C01F5276CB9BB31F7 +PT=E9A8336DC0B530A86988B2DE74EDFFA1 + +I=271 +KEY=870A30E0F3B836FA7063568188AE38F05897A32801786CAA +CT=E9A8336DC0B530A86988B2DE74EDFFA1 +PT=B5FA5E388CFFFE2BA33436CC39A73972 + +I=272 +KEY=4B81E55C765F570CC59908B90451C6DBFBA395E438DF55D8 +CT=B5FA5E388CFFFE2BA33436CC39A73972 +PT=CEF4896BBC86F1E02312479C40D96DAE + +I=273 +KEY=0FAB0DCFB6E3E7940B6D81D2B8D7373BD8B1D27878063876 +CT=CEF4896BBC86F1E02312479C40D96DAE +PT=F195F5321FCAA68B0B0CBA83978A8084 + +I=274 +KEY=F860076D3847A80BFAF874E0A71D91B0D3BD68FBEF8CB8F2 +CT=F195F5321FCAA68B0B0CBA83978A8084 +PT=861575205386223EBC6B48B22C35A2A6 + +I=275 +KEY=B2DB77DC3E18C3A77CED01C0F49BB38E6FD62049C3B91A54 +CT=861575205386223EBC6B48B22C35A2A6 +PT=DC074F3D41C62DA9D609A982DEB9E074 + +I=276 +KEY=E632B0C6EE68910EA0EA4EFDB55D9E27B9DF89CB1D00FA20 +CT=DC074F3D41C62DA9D609A982DEB9E074 +PT=6933F4F193B028A22B913453B0B4C9A2 + +I=277 +KEY=88AA3FEE5FDFA336C9D9BA0C26EDB685924EBD98ADB43382 +CT=6933F4F193B028A22B913453B0B4C9A2 +PT=56811E665DDFBEA07A7C2C762F0D5C73 + +I=278 +KEY=2A0A1FE31ADFC64F9F58A46A7B320825E83291EE82B96FF1 +CT=56811E665DDFBEA07A7C2C762F0D5C73 +PT=CFF92E47C8C973ADA7B57D9FE320B356 + +I=279 +KEY=7958F9D10B6DC91050A18A2DB3FB7B884F87EC716199DCA7 +CT=CFF92E47C8C973ADA7B57D9FE320B356 +PT=A55A4F827552761580DC27E0712051B1 + +I=280 +KEY=ADDB73FE13D439CAF5FBC5AFC6A90D9DCF5BCB9110B98D16 +CT=A55A4F827552761580DC27E0712051B1 +PT=734B095C3C54FCDE26C33659C82CACCB + +I=281 +KEY=E979AF9C739F60AE86B0CCF3FAFDF143E998FDC8D89521DD +CT=734B095C3C54FCDE26C33659C82CACCB +PT=122A4F2ADE6C69364943658517A56587 + +I=282 +KEY=E05BDC75E94EB2A8949A83D924919875A0DB984DCF30445A +CT=122A4F2ADE6C69364943658517A56587 +PT=C6EF3170C5EF69B479AC6653E8B7E979 + +I=283 +KEY=67AF0BE0DE572F595275B2A9E17EF1C1D977FE1E2787AD23 +CT=C6EF3170C5EF69B479AC6653E8B7E979 +PT=51113FF8A1000A5449F24E8E5363FB72 + +I=284 +KEY=7C8DCBB512AE775603648D51407EFB959085B09074E45651 +CT=51113FF8A1000A5449F24E8E5363FB72 +PT=B9341E24A41C9D9CE56D6E4F17A7A311 + +I=285 +KEY=EEBE49DAF88030F5BA509375E462660975E8DEDF6343F540 +CT=B9341E24A41C9D9CE56D6E4F17A7A311 +PT=26A135C466B061791DE40A40E9366FC6 + +I=286 +KEY=A06A0B9127769EF79CF1A6B182D20770680CD49F8A759A86 +CT=26A135C466B061791DE40A40E9366FC6 +PT=AE832B68C147CF8A70A8E5CCC3FF05F2 + +I=287 +KEY=CD394B7808099B2832728DD94395C8FA18A43153498A9F74 +CT=AE832B68C147CF8A70A8E5CCC3FF05F2 +PT=72747F478E3AE57C6C7D6D4E5C4FCE71 + +I=288 +KEY=80D4A1BD538D11434006F29ECDAF2D8674D95C1D15C55105 +CT=72747F478E3AE57C6C7D6D4E5C4FCE71 +PT=21539022400BEE401E8FE7E9F0F7AAC3 + +I=289 +KEY=C8BCB868E11B46E3615562BC8DA4C3C66A56BBF4E532FBC6 +CT=21539022400BEE401E8FE7E9F0F7AAC3 +PT=44149C7C375F07B7169C8A9A14133C8C + +I=290 +KEY=DFC35DD4FAD95C2A2541FEC0BAFBC4717CCA316EF121C74A +CT=44149C7C375F07B7169C8A9A14133C8C +PT=2A7FA9D2EACC0C5444510E7D69EB3FD6 + +I=291 +KEY=73B0B53EE6D591140F3E57125037C825389B3F1398CAF89C +CT=2A7FA9D2EACC0C5444510E7D69EB3FD6 +PT=9949145B8C88D03BBA46FEBE9856B732 + +I=292 +KEY=7BFBD6A0A317DEE996774349DCBF181E82DDC1AD009C4FAE +CT=9949145B8C88D03BBA46FEBE9856B732 +PT=714E072347ECDEA4F8EB2B02746FBC66 + +I=293 +KEY=CA326A1D191B2BC6E739446A9B53C6BA7A36EAAF74F3F3C8 +CT=714E072347ECDEA4F8EB2B02746FBC66 +PT=CCF2295814759A5004E8C3E2B97C4958 + +I=294 +KEY=428400F7196D32C62BCB6D328F265CEA7EDE294DCD8FBA90 +CT=CCF2295814759A5004E8C3E2B97C4958 +PT=12108AB0753EAAE007DEFF2EBA8A3EF0 + +I=295 +KEY=3E38F6FA3F49742339DBE782FA18F60A7900D66377058460 +CT=12108AB0753EAAE007DEFF2EBA8A3EF0 +PT=0109AC127FB55B91BC922EDFF3C43819 + +I=296 +KEY=07C585ABD1C227D638D24B9085ADAD9BC592F8BC84C1BC79 +CT=0109AC127FB55B91BC922EDFF3C43819 +PT=33FF03F6966E81EE28889CFA0B9BA8B9 + +I=297 +KEY=FB823872148252C20B2D486613C32C75ED1A64468F5A14C0 +CT=33FF03F6966E81EE28889CFA0B9BA8B9 +PT=D8468C180BAC0F6D703611DDAD951014 + +I=298 +KEY=F81900EAD21ECE3BD36BC47E186F23189D2C759B22CF04D4 +CT=D8468C180BAC0F6D703611DDAD951014 +PT=07994906A8377D64F2D32DB4BB170EF1 + +I=299 +KEY=2ADC8C0244307531D4F28D78B0585E7C6FFF582F99D80A25 +CT=07994906A8377D64F2D32DB4BB170EF1 +PT=48382015F82AA7EC8944C40275595CEF + +I=300 +KEY=2E917F5C5BAB80939CCAAD6D4872F990E6BB9C2DEC8156CA +CT=48382015F82AA7EC8944C40275595CEF +PT=D4EEE0A1A56118EB8F6AE16FE16F70ED + +I=301 +KEY=126D396B29E0252248244DCCED13E17B69D17D420DEE2627 +CT=D4EEE0A1A56118EB8F6AE16FE16F70ED +PT=358E5FAE4A4ED6B1058E32942AE030DB + +I=302 +KEY=D390A60684F5C9147DAA1262A75D37CA6C5F4FD6270E16FC +CT=358E5FAE4A4ED6B1058E32942AE030DB +PT=B9730D311EA8312DAC34F444A4560DDC + +I=303 +KEY=0B2A03E62FCD9B06C4D91F53B9F506E7C06BBB9283581B20 +CT=B9730D311EA8312DAC34F444A4560DDC +PT=D64F286B32B4058A51B73844BCA93DDA + +I=304 +KEY=5858183C5713BBD6129637388B41036D91DC83D63FF126FA +CT=D64F286B32B4058A51B73844BCA93DDA +PT=78425B7FE64D972C642ED17369ED8844 + +I=305 +KEY=C555D9DC23D3A1846AD46C476D0C9441F5F252A5561CAEBE +CT=78425B7FE64D972C642ED17369ED8844 +PT=2DE9202F4CD7F67C7B7F94CF7F3B9B5A + +I=306 +KEY=7BA871DA6E336CFA473D4C6821DB623D8E8DC66A292735E4 +CT=2DE9202F4CD7F67C7B7F94CF7F3B9B5A +PT=A30322EC9A51266B50153995BCEBC846 + +I=307 +KEY=55BF35687EBA169AE43E6E84BB8A4456DE98FFFF95CCFDA2 +CT=A30322EC9A51266B50153995BCEBC846 +PT=14754B0469683F36E4791FD9B8B1C585 + +I=308 +KEY=0404CAE90360F118F04B2580D2E27B603AE1E0262D7D3827 +CT=14754B0469683F36E4791FD9B8B1C585 +PT=E8592DC147A1DC4F48D43E365B9D63FF + +I=309 +KEY=109E16AA717A4EF4181208419543A72F7235DE1076E05BD8 +CT=E8592DC147A1DC4F48D43E365B9D63FF +PT=47A3BF0743562C7D412563C94C2CD717 + +I=310 +KEY=0A8DC7647F8C06D15FB1B746D6158B523310BDD93ACC8CCF +CT=47A3BF0743562C7D412563C94C2CD717 +PT=63F8C6A062937471364050815D856793 + +I=311 +KEY=CC9B8854C13F73623C4971E6B486FF230550ED586749EB5C +CT=63F8C6A062937471364050815D856793 +PT=E70443AF44BF549607251A86CD83A4D3 + +I=312 +KEY=2D067D896DF1E749DB4D3249F039ABB50275F7DEAACA4F8F +CT=E70443AF44BF549607251A86CD83A4D3 +PT=ACEF2AE95CA660AEE513BF48BCF7D125 + +I=313 +KEY=DEC45DD3C0DAD30A77A218A0AC9FCB1BE7664896163D9EAA +CT=ACEF2AE95CA660AEE513BF48BCF7D125 +PT=859E9E4001245A50ED76055539672F1A + +I=314 +KEY=6F208E93D9C89CE8F23C86E0ADBB914B0A104DC32F5AB1B0 +CT=859E9E4001245A50ED76055539672F1A +PT=42B059061FE4C86C7AC2B7C8B62820C2 + +I=315 +KEY=86EC7CE558994E8EB08CDFE6B25F592770D2FA0B99729172 +CT=42B059061FE4C86C7AC2B7C8B62820C2 +PT=01C6296F1532450F182D6A3FC8249DD7 + +I=316 +KEY=C74B31CEC9B31130B14AF689A76D1C2868FF903451560CA5 +CT=01C6296F1532450F182D6A3FC8249DD7 +PT=14334054946821E3FE8D72D1EF402EE1 + +I=317 +KEY=AC636B2AD3699560A579B6DD33053DCB9672E2E5BE162244 +CT=14334054946821E3FE8D72D1EF402EE1 +PT=F09B2FE9A8F17CD847532D4979D2A8C4 + +I=318 +KEY=6F956E3680FC783155E299349BF44113D121CFACC7C48A80 +CT=F09B2FE9A8F17CD847532D4979D2A8C4 +PT=4C97BD8822E63C7A2EE0E444563AF1C8 + +I=319 +KEY=C69B2FB718C41B1A197524BCB9127D69FFC12BE891FE7B48 +CT=4C97BD8822E63C7A2EE0E444563AF1C8 +PT=344E85BE2C8B36430C8058B310062171 + +I=320 +KEY=BFFA143B8A18CACF2D3BA10295994B2AF341735B81F85A39 +CT=344E85BE2C8B36430C8058B310062171 +PT=FF3F882CB22D13A8631DCA6DD702D0E0 + +I=321 +KEY=22F58A0FC077AB5FD204292E27B45882905CB93656FA8AD9 +CT=FF3F882CB22D13A8631DCA6DD702D0E0 +PT=866B2E52CF71505973D9D6642C8178BB + +I=322 +KEY=DC8CE7A9130F3662546F077CE8C508DBE3856F527A7BF262 +CT=866B2E52CF71505973D9D6642C8178BB +PT=4802741ADF67A3811A8AEC7008D8827E + +I=323 +KEY=743B09AA8FD3C6A01C6D736637A2AB5AF90F832272A3701C +CT=4802741ADF67A3811A8AEC7008D8827E +PT=FD3701579815D02BE878C74ABB98C59B + +I=324 +KEY=865B3EC9EFBE27D0E15A7231AFB77B7111774468C93BB587 +CT=FD3701579815D02BE878C74ABB98C59B +PT=99BCA8250D54F3A9A72054AF5578F842 + +I=325 +KEY=041C037E08923FFF78E6DA14A2E388D8B65710C79C434DC5 +CT=99BCA8250D54F3A9A72054AF5578F842 +PT=F0DA5C0E446547356D5027BA346A831C + +I=326 +KEY=FBABCE025CF5FF3D883C861AE686CFEDDB07377DA829CED9 +CT=F0DA5C0E446547356D5027BA346A831C +PT=EED0140AF408652DD879E3289536C389 + +I=327 +KEY=3F12399A3E5C0F9566EC9210128EAAC0037ED4553D1F0D50 +CT=EED0140AF408652DD879E3289536C389 +PT=FDC7299A95BDB941A299478B7B409EF8 + +I=328 +KEY=D541517B701036E39B2BBB8A87331381A1E793DE465F93A8 +CT=FDC7299A95BDB941A299478B7B409EF8 +PT=5BE5AEC30578CD03BA7B17E8B16AAFBF + +I=329 +KEY=6657840FF425DD8AC0CE1549824BDE821B9C8436F7353C17 +CT=5BE5AEC30578CD03BA7B17E8B16AAFBF +PT=3C7A9745F48DA61CF7875A449E24C735 + +I=330 +KEY=52D29BBD64550DFBFCB4820C76C6789EEC1BDE726911FB22 +CT=3C7A9745F48DA61CF7875A449E24C735 +PT=69516DE0343F3552830D28CE8B9A282C + +I=331 +KEY=3699B16BB0349B9195E5EFEC42F94DCC6F16F6BCE28BD30E +CT=69516DE0343F3552830D28CE8B9A282C +PT=EB09EE300286690EA65A30526A43B86B + +I=332 +KEY=60E79B9E7C41814E7EEC01DC407F24C2C94CC6EE88C86B65 +CT=EB09EE300286690EA65A30526A43B86B +PT=A235384FE517A5F455BBE6B850C05E33 + +I=333 +KEY=11F650282BBCB584DCD93993A56881369CF72056D8083556 +CT=A235384FE517A5F455BBE6B850C05E33 +PT=41E297350390E91EC00FF875B3CA60BA + +I=334 +KEY=11B449F7EE983AB89D3BAEA6A6F868285CF8D8236BC255EC +CT=41E297350390E91EC00FF875B3CA60BA +PT=5FB9F6408D54401A9A76288AE3A04944 + +I=335 +KEY=54CBA9A5782ED91FC28258E62BAC2832C68EF0A988621CA8 +CT=5FB9F6408D54401A9A76288AE3A04944 +PT=7C9CD2510E96FF37BF75E57E84098535 + +I=336 +KEY=871169F28E704C95BE1E8AB7253AD70579FB15D70C6B999D +CT=7C9CD2510E96FF37BF75E57E84098535 +PT=8E041B8C74A84D747B02714452B34F11 + +I=337 +KEY=7F44ED6AA755957A301A913B51929A7102F964935ED8D68C +CT=8E041B8C74A84D747B02714452B34F11 +PT=3698639F56657A40D52B9B8015448C2A + +I=338 +KEY=EEAF09001996BA6E0682F2A407F7E031D7D2FF134B9C5AA6 +CT=3698639F56657A40D52B9B8015448C2A +PT=79FB5E4A065D29E1CA3E15897B60032F + +I=339 +KEY=D21CCA06254A64C97F79ACEE01AAC9D01DECEA9A30FC5989 +CT=79FB5E4A065D29E1CA3E15897B60032F +PT=C582F5F8D9D2E9323C769B2B1AE369BD + +I=340 +KEY=29D2F84E4568BA6FBAFB5916D87820E2219A71B12A1F3034 +CT=C582F5F8D9D2E9323C769B2B1AE369BD +PT=916405DC8F2AD50548997D87BCCADBFB + +I=341 +KEY=43AC4D54A8A0222F2B9F5CCA5752F5E769030C3696D5EBCF +CT=916405DC8F2AD50548997D87BCCADBFB +PT=0E9FF0E147A47056EC6B09837C9E0E62 + +I=342 +KEY=9AF110B8274794772500AC2B10F685B1856805B5EA4BE5AD +CT=0E9FF0E147A47056EC6B09837C9E0E62 +PT=3B6E3CAAC358427980E66E3D30D39E4F + +I=343 +KEY=49F910E7957BC95C1E6E9081D3AEC7C8058E6B88DA987BE2 +CT=3B6E3CAAC358427980E66E3D30D39E4F +PT=25CBE5AB4C6785C0F2847CF89F2635AB + +I=344 +KEY=64D90092DD97AC3C3BA5752A9FC94208F70A177045BE4E49 +CT=25CBE5AB4C6785C0F2847CF89F2635AB +PT=3D9200D39461D8B2CE7874DA20BFD9DA + +I=345 +KEY=C7A8403AFB011673063775F90BA89ABA397263AA65019793 +CT=3D9200D39461D8B2CE7874DA20BFD9DA +PT=E61E7E06A1E1F656AE8F8C29C96E5A16 + +I=346 +KEY=071AF635AF7A9602E0290BFFAA496CEC97FDEF83AC6FCD85 +CT=E61E7E06A1E1F656AE8F8C29C96E5A16 +PT=7488BB35F06E94F31A744D1EA95E71D0 + +I=347 +KEY=A4B5ECB7047E08D694A1B0CA5A27F81F8D89A29D0531BC55 +CT=7488BB35F06E94F31A744D1EA95E71D0 +PT=3912DC00C0AB79C473CA2CC8F69262F0 + +I=348 +KEY=BD4478B38A0E9347ADB36CCA9A8C81DBFE438E55F3A3DEA5 +CT=3912DC00C0AB79C473CA2CC8F69262F0 +PT=C4B546F134A016DADA8E7C478B1E7D45 + +I=349 +KEY=F7B6F476517483AD69062A3BAE2C970124CDF21278BDA3E0 +CT=C4B546F134A016DADA8E7C478B1E7D45 +PT=298524C5D468EBFA97DEFEC7B80EE752 + +I=350 +KEY=8E0C5244F7417C2440830EFE7A447CFBB3130CD5C0B344B2 +CT=298524C5D468EBFA97DEFEC7B80EE752 +PT=B27EFB90BA3A27A1077C6742D5B68396 + +I=351 +KEY=C6E8F264FA0C9A9AF2FDF56EC07E5B5AB46F6B971505C724 +CT=B27EFB90BA3A27A1077C6742D5B68396 +PT=D02C27A94DD3B772B338C7462379B009 + +I=352 +KEY=AD694D243DCC6B7B22D1D2C78DADEC280757ACD1367C772D +CT=D02C27A94DD3B772B338C7462379B009 +PT=1CED06084E67BA4BAD3C331F4074B9FF + +I=353 +KEY=68AEF48D86D395583E3CD4CFC3CA5663AA6B9FCE7608CED2 +CT=1CED06084E67BA4BAD3C331F4074B9FF +PT=C0D7811FE8630B3E7C3A60DA9042A6B2 + +I=354 +KEY=670A8D40573F598AFEEB55D02BA95D5DD651FF14E64A6860 +CT=C0D7811FE8630B3E7C3A60DA9042A6B2 +PT=45F92C84CE2AEC6E7953C8AAC5901D0F + +I=355 +KEY=D44FD97B0D59C923BB127954E583B133AF0237BE23DA756F +CT=45F92C84CE2AEC6E7953C8AAC5901D0F +PT=23A4863C994EFE93E7CE1C89FE14143D + +I=356 +KEY=4E08C6A539C74A6598B6FF687CCD4FA048CC2B37DDCE6152 +CT=23A4863C994EFE93E7CE1C89FE14143D +PT=85EB5F46988211E3077FDBE38F1EBE6B + +I=357 +KEY=21B17D5E461224B31D5DA02EE44F5E434FB3F0D452D0DF39 +CT=85EB5F46988211E3077FDBE38F1EBE6B +PT=59CF6CCC81A8BC17A52D7550B40C7514 + +I=358 +KEY=6CC595309F161F3E4492CCE265E7E254EA9E8584E6DCAA2D +CT=59CF6CCC81A8BC17A52D7550B40C7514 +PT=13DF4C2AA74A4B9123B3A57FE94F85BE + +I=359 +KEY=77B90151B41B1B7D574D80C8C2ADA9C5C92D20FB0F932F93 +CT=13DF4C2AA74A4B9123B3A57FE94F85BE +PT=6DEDE53AD5DC2A87744DA0EA561977A3 + +I=360 +KEY=8E1683C57C1817C23AA065F217718342BD608011598A5830 +CT=6DEDE53AD5DC2A87744DA0EA561977A3 +PT=F9D912AAB5ED1ACBD0475411DF98F49C + +I=361 +KEY=E9FDD94AE4B4FABAC3797758A29C99896D27D4008612ACAC +CT=F9D912AAB5ED1ACBD0475411DF98F49C +PT=853C907D9FD35B61D2ABBE5C1A89DB4B + +I=362 +KEY=BCC524DF4D452AE14645E7253D4FC2E8BF8C6A5C9C9B77E7 +CT=853C907D9FD35B61D2ABBE5C1A89DB4B +PT=874C4BC1993FBA12136443B57F9523BE + +I=363 +KEY=9F5EFA7196589240C109ACE4A47078FAACE829E9E30E5459 +CT=874C4BC1993FBA12136443B57F9523BE +PT=E6B6E9133DD0EC2844EF3CC0C2F9E4AC + +I=364 +KEY=2F0731DB4FA3024127BF45F799A094D2E807152921F7B0F5 +CT=E6B6E9133DD0EC2844EF3CC0C2F9E4AC +PT=20B41EE01134041DF8D11BB7F86928EA + +I=365 +KEY=7E44D240F06AAA5E070B5B17889490CF10D60E9ED99E981F +CT=20B41EE01134041DF8D11BB7F86928EA +PT=BF6B03096DCDC052B1325CC34BF6E56C + +I=366 +KEY=D8D3E3D538C8CA34B860581EE559509DA1E4525D92687D73 +CT=BF6B03096DCDC052B1325CC34BF6E56C +PT=5ED3E40FB5C34DD1F370C3AD72C7C24D + +I=367 +KEY=F3DF20767CDA5E0CE6B3BC11509A1D4C529491F0E0AFBF3E +CT=5ED3E40FB5C34DD1F370C3AD72C7C24D +PT=3EA6BCE2317C5D696DF8240C481B34DD + +I=368 +KEY=484932A15D75173FD81500F361E640253F6CB5FCA8B48BE3 +CT=3EA6BCE2317C5D696DF8240C481B34DD +PT=41D6E077746FE1A9307E1107631A5D2C + +I=369 +KEY=EF960956685DE1CE99C3E0841589A18C0F12A4FBCBAED6CF +CT=41D6E077746FE1A9307E1107631A5D2C +PT=D0C6DDEF0A623686BA303C278D445964 + +I=370 +KEY=82477D8D682C1D4849053D6B1FEB970AB52298DC46EA8FAB +CT=D0C6DDEF0A623686BA303C278D445964 +PT=EEFFA6025D6CAFBF9DC18E5B1B99A6ED + +I=371 +KEY=15D8DCF80A26856AA7FA9B69428738B528E316875D732946 +CT=EEFFA6025D6CAFBF9DC18E5B1B99A6ED +PT=38E222ABAA07CDAE9CC02FAC84EC0FC1 + +I=372 +KEY=556151278277D7579F18B9C2E880F51BB423392BD99F2687 +CT=38E222ABAA07CDAE9CC02FAC84EC0FC1 +PT=B00C719E6A320E4385794EB7F23C0D80 + +I=373 +KEY=777F91003E4410572F14C85C82B2FB58315A779C2BA32B07 +CT=B00C719E6A320E4385794EB7F23C0D80 +PT=0E667CA932023D2EFD8DDBDED5A43D78 + +I=374 +KEY=130507FC817F14432172B4F5B0B0C676CCD7AC42FE07167F +CT=0E667CA932023D2EFD8DDBDED5A43D78 +PT=6B15DA892F0B5916F31BB74FC7D03F9A + +I=375 +KEY=D045A84BBF62DE2E4A676E7C9FBB9F603FCC1B0D39D729E5 +CT=6B15DA892F0B5916F31BB74FC7D03F9A +PT=EBEF6DC298D63BF6E6E46F833B217033 + +I=376 +KEY=7742FB68CDF60735A18803BE076DA496D928748E02F659D6 +CT=EBEF6DC298D63BF6E6E46F833B217033 +PT=48DC6F65F193AFCCE559EA6F04FBD79A + +I=377 +KEY=5CE32BC22C77B664E9546CDBF6FE0B5A3C719EE1060D8E4C +CT=48DC6F65F193AFCCE559EA6F04FBD79A +PT=D0596880F92716C51E41519C640AEFDA + +I=378 +KEY=2DA6B73C5131E24C390D045B0FD91D9F2230CF7D62076196 +CT=D0596880F92716C51E41519C640AEFDA +PT=ABB7C3E499086F53C4DB97640168943B + +I=379 +KEY=E41C1A826978491892BAC7BF96D172CCE6EB5819636FF5AD +CT=ABB7C3E499086F53C4DB97640168943B +PT=0CC58B3D0370317E1025E1AF97962646 + +I=380 +KEY=501012EE411DCDC59E7F4C8295A143B2F6CEB9B6F4F9D3EB +CT=0CC58B3D0370317E1025E1AF97962646 +PT=28920AED2B644C4346FC146903887244 + +I=381 +KEY=97B7E8C1147A5062B6ED466FBEC50FF1B032ADDFF771A1AF +CT=28920AED2B644C4346FC146903887244 +PT=E7A28DA5EC871DAF8C2D196C7ED8977F + +I=382 +KEY=988B9928402BCD63514FCBCA5242125E3C1FB4B389A936D0 +CT=E7A28DA5EC871DAF8C2D196C7ED8977F +PT=013876A92413AED2E360A241FE021B25 + +I=383 +KEY=3432357430ACC9135077BD637651BC8CDF7F16F277AB2DF5 +CT=013876A92413AED2E360A241FE021B25 +PT=10F1A56A8CFDA1D5044D5D0E53F6A773 + +I=384 +KEY=CE94F859CD3E85F440861809FAAC1D59DB324BFC245D8A86 +CT=10F1A56A8CFDA1D5044D5D0E53F6A773 +PT=941C717EE6642DD474719F099AEEB1EB + +I=385 +KEY=A1BFA52EA232FDF0D49A69771CC8308DAF43D4F5BEB33B6D +CT=941C717EE6642DD474719F099AEEB1EB +PT=F31B47230ABC94977E14E1080528C1C9 + +I=386 +KEY=37B36A8E7A3B4F2A27812E541674A41AD15735FDBB9BFAA4 +CT=F31B47230ABC94977E14E1080528C1C9 +PT=A91264221890CA93541B662F64A11C62 + +I=387 +KEY=04F603F98A9D1AC78E934A760EE46E89854C53D2DF3AE6C6 +CT=A91264221890CA93541B662F64A11C62 +PT=05F5171B639825EC67A37B3671F2F884 + +I=388 +KEY=A294EBBBD53D18DD8B665D6D6D7C4B65E2EF28E4AEC81E42 +CT=05F5171B639825EC67A37B3671F2F884 +PT=B6FE84EB2987DE956953DEBA6FD2E029 + +I=389 +KEY=E0E38A82F60E8EED3D98D98644FB95F08BBCF65EC11AFE6B +CT=B6FE84EB2987DE956953DEBA6FD2E029 +PT=2741338CF00FBC70C4B1C67C97E85B97 + +I=390 +KEY=2193D386143F6D761AD9EA0AB4F429804F0D302256F2A5FC +CT=2741338CF00FBC70C4B1C67C97E85B97 +PT=E56C7C453E2E13028AD812F9CDB78E2F + +I=391 +KEY=05AD3BC4F1B29F17FFB5964F8ADA3A82C5D522DB9B452BD3 +CT=E56C7C453E2E13028AD812F9CDB78E2F +PT=9A9B49AC0691F1576D515E935F042229 + +I=392 +KEY=1588C005075F4674652EDFE38C4BCBD5A8847C48C44109FA +CT=9A9B49AC0691F1576D515E935F042229 +PT=143E5F64AD38373D3B54FA24CC7C0AF5 + +I=393 +KEY=731083CCCB22E7CF711080872173FCE893D0866C083D030F +CT=143E5F64AD38373D3B54FA24CC7C0AF5 +PT=61F6AF426601588CB7C525255EC1A06D + +I=394 +KEY=DACEE3906B98DFC110E62FC54772A4642415A34956FCA362 +CT=61F6AF426601588CB7C525255EC1A06D +PT=DB5DC1C3B3413F653D72F8744C2DD881 + +I=395 +KEY=D9ACA0F56DCA4FC0CBBBEE06F4339B0119675B3D1AD17BE3 +CT=DB5DC1C3B3413F653D72F8744C2DD881 +PT=4E9D548DA49E992AD3123F53558909C9 + +I=396 +KEY=12C2FE0C57D21C208526BA8B50AD022BCA75646E4F58722A +CT=4E9D548DA49E992AD3123F53558909C9 +PT=EB2E835192E64ABC30C3F2662B703C47 + +I=397 +KEY=7A43322D6174BA786E0839DAC24B4897FAB6960864284E6D +CT=EB2E835192E64ABC30C3F2662B703C47 +PT=CD0690863F63F2B263D4C11190A7985B + +I=398 +KEY=EBC6D71978D39185A30EA95CFD28BA2599625719F48FD636 +CT=CD0690863F63F2B263D4C11190A7985B +PT=C044E800B65CA78559D0642C370C7D3E + +I=399 +KEY=A1B6CE2EEC5FC386634A415C4B741DA0C0B23335C383AB08 +CT=C044E800B65CA78559D0642C370C7D3E +PT=F1A81B68F6E5A6271A8CB24E7D9491EF + +========================= + +KEYSIZE=256 + +I=0 +KEY=0000000000000000000000000000000000000000000000000000000000000000 +CT=00000000000000000000000000000000 +PT=058CCFFDBBCB382D1F6F56585D8A4ADE + +I=1 +KEY=85C6B2BB2300148F945AEBF1F021CF79058CCFFDBBCB382D1F6F56585D8A4ADE +CT=058CCFFDBBCB382D1F6F56585D8A4ADE +PT=15173A0EB65F5CC05E704EFE61D9E346 + +I=2 +KEY=2447EC44111548FBB670B98F182D5DEE109BF5F30D9464ED411F18A63C53A998 +CT=15173A0EB65F5CC05E704EFE61D9E346 +PT=85F083ACC676D91EDD1ABFB43935237A + +I=3 +KEY=85D3E1D750CAA89BEE274AA7C32C2207956B765FCBE2BDF39C05A71205668AE2 +CT=85F083ACC676D91EDD1ABFB43935237A +PT=42C8F0ABC58E0BEAC32911D2DD9FA8C8 + +I=4 +KEY=CE86B24954745B2BAAF27010202EE7FAD7A386F40E6CB6195F2CB6C0D8F9222A +CT=42C8F0ABC58E0BEAC32911D2DD9FA8C8 +PT=5E44123D2CA07981B073BB2749F557D6 + +I=5 +KEY=CD7BCBBA4555A0D034FD7B528A1D042C89E794C922CCCF98EF5F0DE7910C75FC +CT=5E44123D2CA07981B073BB2749F557D6 +PT=8B649458EA90F4F7E13467E509B7F164 + +I=6 +KEY=EF28DFAED7794B1C7B892F3C98FCDC9602830091C85C3B6F0E6B6A0298BB8498 +CT=8B649458EA90F4F7E13467E509B7F164 +PT=F240D1F579DA2CA8839F7072DF52EBA3 + +I=7 +KEY=C66605EC92F96B49F08CBC6276A0DC68F0C3D164B18617C78DF41A7047E96F3B +CT=F240D1F579DA2CA8839F7072DF52EBA3 +PT=B05297490A394B4A1736DE7F8DC12969 + +I=8 +KEY=347403B6E6344E1525B8D2BD4DCA343F4091462DBBBF5C8D9AC2C40FCA284652 +CT=B05297490A394B4A1736DE7F8DC12969 +PT=8BA49D44B98E67501235CE1C2F26BB28 + +I=9 +KEY=B932CD0C70488602C56F92A0DA57BE27CB35DB6902313BDD88F70A13E50EFD7A +CT=8BA49D44B98E67501235CE1C2F26BB28 +PT=86CE4E4D040C49F2717407157454162E + +I=10 +KEY=28F8B6B4AB2B0B81F3676F6E422D438C4DFB9524063D722FF9830D06915AEB54 +CT=86CE4E4D040C49F2717407157454162E +PT=4E9CA7FB0FF9F38FC821CA91052483F9 + +I=11 +KEY=5CD19F4D3C5B58602B101E15B39F51E4036732DF09C481A031A2C797947E68AD +CT=4E9CA7FB0FF9F38FC821CA91052483F9 +PT=55E49ED59245C1850CB0C17C1CEEA05E + +I=12 +KEY=E822BB0D1F25F3DCA6FE0CB1A8AF39F15683AC0A9B8140253D1206EB8890C8F3 +CT=55E49ED59245C1850CB0C17C1CEEA05E +PT=F7F0BFA319AC289C9F64E6FCDD531B44 + +I=13 +KEY=8B64FF354C6E303F14EA34C9F667FEC9A17313A9822D68B9A276E01755C3D3B7 +CT=F7F0BFA319AC289C9F64E6FCDD531B44 +PT=6ACB8A177226AE47E2170F77D2FE4923 + +I=14 +KEY=1A9D440EBAC3F3625E229B66C5D9249CCBB899BEF00BC6FE4061EF60873D9A94 +CT=6ACB8A177226AE47E2170F77D2FE4923 +PT=BAA9BB819332A87D6004164927EAC699 + +I=15 +KEY=97F92B9AD44A3182FF10E07747C560B37111223F63396E832065F929A0D75C0D +CT=BAA9BB819332A87D6004164927EAC699 +PT=EB84793E2D68632900B0517392EC4B94 + +I=16 +KEY=2AEEBA2AC59870A7B4274B80FE74D55A9A955B014E510DAA20D5A85A323B1799 +CT=EB84793E2D68632900B0517392EC4B94 +PT=6C662FBE2B22394CC1D45453772C72BA + +I=17 +KEY=EEA4B3C4F96C42E3B7DF5A3870C85B69F6F374BF657334E6E101FC0945176523 +CT=6C662FBE2B22394CC1D45453772C72BA +PT=70D2BBC1FA7D49848D94112DA93A3C3C + +I=18 +KEY=F930D1529C654F31549809C6CD5CC4608621CF7E9F0E7D626C95ED24EC2D591F +CT=70D2BBC1FA7D49848D94112DA93A3C3C +PT=1AFF91E67039133946638E4E505310C2 + +I=19 +KEY=5D0F461C1A5FF7BA5C93F0CED9DD49FF9CDE5E98EF376E5B2AF6636ABC7E49DD +CT=1AFF91E67039133946638E4E505310C2 +PT=8E4358B22DE7BCDC8B8409E6250633BF + +I=20 +KEY=AA4B475845EB19F601856A40AB517594129D062AC2D0D287A1726A8C99787A62 +CT=8E4358B22DE7BCDC8B8409E6250633BF +PT=2A79FE5A222C9503954346D6C15AC679 + +I=21 +KEY=9703F4DD85A3BE85343FFD15950A266B38E4F870E0FC478434312C5A5822BC1B +CT=2A79FE5A222C9503954346D6C15AC679 +PT=0FF812C5B863282C294D7069F830EE86 + +I=22 +KEY=3DD1B2ACBC6568851E767D20D82AD324371CEAB5589F6FA81D7C5C33A012529D +CT=0FF812C5B863282C294D7069F830EE86 +PT=D449218625DE49D2B9514E032CA096E7 + +I=23 +KEY=95CC16235D3DFF4F7DB2116D2B380F39E355CB337D41267AA42D12308CB2C47A +CT=D449218625DE49D2B9514E032CA096E7 +PT=F951EAC3BC78DB0AE13FDC33048D2D81 + +I=24 +KEY=A6F55AFBDA7EA939F6F2A28530C416781A0421F0C139FD704512CE03883FE9FB +CT=F951EAC3BC78DB0AE13FDC33048D2D81 +PT=7D5A03A955F6403F918AC915AC22B797 + +I=25 +KEY=7C5D39885F4C0F4FCF672321B711C5B7675E225994CFBD4FD4980716241D5E6C +CT=7D5A03A955F6403F918AC915AC22B797 +PT=CA2E1C274073AD2A3AE35C60ECA52A58 + +I=26 +KEY=4E7B914B84BFA1A2D7BD409AFADD2EDCAD703E7ED4BC1065EE7B5B76C8B87434 +CT=CA2E1C274073AD2A3AE35C60ECA52A58 +PT=C5048FA0148CED10A06E107269DA9C95 + +I=27 +KEY=F62D8C4822C5F89D51E3C68695D91CA66874B1DEC030FD754E154B04A162E8A1 +CT=C5048FA0148CED10A06E107269DA9C95 +PT=CB9B457A7A24577DA71AC335F0572DAB + +I=28 +KEY=C37AAD7CB20087F4B98390C59D3ECFB2A3EFF4A4BA14AA08E90F88315135C50A +CT=CB9B457A7A24577DA71AC335F0572DAB +PT=FA60BFF170DD30C29DF1807C1612CD67 + +I=29 +KEY=1A2C6858B37D0341BF8796FB72D00B72598F4B55CAC99ACA74FE084D4727086D +CT=FA60BFF170DD30C29DF1807C1612CD67 +PT=E2FACFB5DF4E69C911838FCC546D0C8E + +I=30 +KEY=039B73E3A8DCF3C678FBC246AAECDAECBB7584E01587F303657D8781134A04E3 +CT=E2FACFB5DF4E69C911838FCC546D0C8E +PT=749AB2B9176AFDB8B6714DF44BBF2B58 + +I=31 +KEY=773D90EA7ECA29DFD9141A42EB2BBC64CFEF365902ED0EBBD30CCA7558F52FBB +CT=749AB2B9176AFDB8B6714DF44BBF2B58 +PT=0285E58D09A8D33FB196FD16A8DF37C0 + +I=32 +KEY=598262B046B44784D977F6BE2553C6ACCD6AD3D40B45DD84629A3763F02A187B +CT=0285E58D09A8D33FB196FD16A8DF37C0 +PT=1C952C46AE829D8805031A44F9D85521 + +I=33 +KEY=AFAE657D3220CD1E6199A49754525F4AD1FFFF92A5C7400C67992D2709F24D5A +CT=1C952C46AE829D8805031A44F9D85521 +PT=EED0A47E63FF354B4D9C53F7FD75D720 + +I=34 +KEY=A61F583BCFD120B8CABE1E4C616F4FC73F2F5BECC63875472A057ED0F4879A7A +CT=EED0A47E63FF354B4D9C53F7FD75D720 +PT=10C1F0F7C32AD36F03AEA8DCE6AAE7BC + +I=35 +KEY=FB76D4B83A7F50482A92F5A92CB60F522FEEAB1B0512A62829ABD60C122D7DC6 +CT=10C1F0F7C32AD36F03AEA8DCE6AAE7BC +PT=372488DF6543180F1F2AE15E5B0C8785 + +I=36 +KEY=35EAC2BA73F55570CB727220C027FE6218CA23C46051BE27368137524921FA43 +CT=372488DF6543180F1F2AE15E5B0C8785 +PT=3DE420FF3699D68DB69966F57D09045A + +I=37 +KEY=48B6E08B9FD9B5C130E1829CD4540D9C252E033B56C868AA801851A73428FE19 +CT=3DE420FF3699D68DB69966F57D09045A +PT=7858F396DC520131C789CB8F8C919CCD + +I=38 +KEY=DB39C13F29241FF29C5BEB839705AD5B5D76F0AD8A9A699B47919A28B8B962D4 +CT=7858F396DC520131C789CB8F8C919CCD +PT=07BE8BBF9FCD7D04888E61935DD7222F + +I=39 +KEY=A5F9B675531AB58C1FFC316C9359EA335AC87B121557149FCF1FFBBBE56E40FB +CT=07BE8BBF9FCD7D04888E61935DD7222F +PT=EDD619B7C12E2AF6BDAA953B2E7871EF + +I=40 +KEY=A02D1F14A64BBC67DD7EE9EAB3FB0EADB71E62A5D4793E6972B56E80CB163114 +CT=EDD619B7C12E2AF6BDAA953B2E7871EF +PT=C748CDB645F1A1E44A63FAF00B2C3A45 + +I=41 +KEY=177D7A6843B5ABBEB212E68734A7A05C7056AF1391889F8D38D69470C03A0B51 +CT=C748CDB645F1A1E44A63FAF00B2C3A45 +PT=BD3ED4C8CD7DBF4299AC63FE119D291E + +I=42 +KEY=BD9BDC6BD09DEED3E75C918BE55E5332CD687BDB5CF520CFA17AF78ED1A7224F +CT=BD3ED4C8CD7DBF4299AC63FE119D291E +PT=A16B82F958441E90A965427C854EECBB + +I=43 +KEY=E6325C33EC76F8EDE02707A3AE82F1096C03F92204B13E5F081FB5F254E9CEF4 +CT=A16B82F958441E90A965427C854EECBB +PT=E04E642689D1AB78E7CDE26D0563901C + +I=44 +KEY=B8543DB3071AB9F0802D4106FBDA59648C4D9D048D609527EFD2579F518A5EE8 +CT=E04E642689D1AB78E7CDE26D0563901C +PT=08E59C72C13C030DA3C50300861EA097 + +I=45 +KEY=ECDD43A6B225DB325BFFE5462B66E97884A801764C5C962A4C17549FD794FE7F +CT=08E59C72C13C030DA3C50300861EA097 +PT=C224B2EFEE07AAC33F1F6EB1295D9A50 + +I=46 +KEY=741D627C8B47BED4497C71FDC9854912468CB399A25B3CE973083A2EFEC9642F +CT=C224B2EFEE07AAC33F1F6EB1295D9A50 +PT=1653CE734D27B44369D4FE582E7A885F + +I=47 +KEY=A47BDC62B1D80815AC6BF04481C5601F50DF7DEAEF7C88AA1ADCC476D0B3EC70 +CT=1653CE734D27B44369D4FE582E7A885F +PT=CADC89828B6147FAEC581DDCFF3C0960 + +I=48 +KEY=CB91E738F51C111DAC2E0A3BF7B076A39A03F468641DCF50F684D9AA2F8FE510 +CT=CADC89828B6147FAEC581DDCFF3C0960 +PT=49402F0F4AFA2518D57C5D1CFCECC0F2 + +I=49 +KEY=BDA1FFAEE7B93EDFCA4374871A149550D343DB672EE7EA4823F884B6D36325E2 +CT=49402F0F4AFA2518D57C5D1CFCECC0F2 +PT=EBFF53AB449DE5A53EDC6E595AA47B10 + +I=50 +KEY=18D865B8E8C779268D3876C22AF479FB38BC88CC6A7A0FED1D24EAEF89C75EF2 +CT=EBFF53AB449DE5A53EDC6E595AA47B10 +PT=30073458509F9AC9DA21B2DF566AB3BE + +I=51 +KEY=967E2580238300563A34A6E70D84B4FF08BBBC943AE59524C7055830DFADED4C +CT=30073458509F9AC9DA21B2DF566AB3BE +PT=5AB9F90CC2A7603A68E2ACA95A2DE55D + +I=52 +KEY=A469A4E2F0B3847F3B52886FAD7DBAF652024598F842F51EAFE7F49985800811 +CT=5AB9F90CC2A7603A68E2ACA95A2DE55D +PT=F22A13F395B6064172CA9DC572C26B2E + +I=53 +KEY=9EA4946ED73FF8BB8700C18967C01968A028566B6DF4F35FDD2D695CF742633F +CT=F22A13F395B6064172CA9DC572C26B2E +PT=26E44B9F3DEBA8EE3531DDFA42F1DC14 + +I=54 +KEY=3D25EEEACEF18702FD3896283CFF8A8386CC1DF4501F5BB1E81CB4A6B5B3BF2B +CT=26E44B9F3DEBA8EE3531DDFA42F1DC14 +PT=32D9F05174FFF34594E952B7ADE09737 + +I=55 +KEY=8BF2A692F6A35980C0CF02FF4650871BB415EDA524E0A8F47CF5E6111853281C +CT=32D9F05174FFF34594E952B7ADE09737 +PT=7BEF027DEB1FF22774CE8A8A101DD41B + +I=56 +KEY=C90BF0E1A8B615B4C8BD318260BB80AECFFAEFD8CFFF5AD3083B6C9B084EFC07 +CT=7BEF027DEB1FF22774CE8A8A101DD41B +PT=CF6B2444DFBBFE5B6A1CA99F2D13DE9A + +I=57 +KEY=C2A4C82B4AAEE0A22315026C6FE396900091CB9C1044A4886227C504255D229D +CT=CF6B2444DFBBFE5B6A1CA99F2D13DE9A +PT=14AD8C7B0F0460A3F48D5CD2CFFB385C + +I=58 +KEY=BF76E610192E2AEF42FF8F487CDDC318143C47E71F40C42B96AA99D6EAA61AC1 +CT=14AD8C7B0F0460A3F48D5CD2CFFB385C +PT=A5A850FC44A09C5985CE9661AF84F186 + +I=59 +KEY=1E42AEC368C600F18CBFA305EB559946B194171B5BE0587213640FB74522EB47 +CT=A5A850FC44A09C5985CE9661AF84F186 +PT=E2895D416951FDA66B695ABFA313F89D + +I=60 +KEY=4E9BC121E32849DAA501BEA4E534D9C2531D4A5A32B1A5D4780D5508E63113DA +CT=E2895D416951FDA66B695ABFA313F89D +PT=91E93AAECC5FB253F7463F101B2A4132 + +I=61 +KEY=ACC045A67F680F14D3F8DA454C922071C2F470F4FEEE17878F4B6A18FD1B52E8 +CT=91E93AAECC5FB253F7463F101B2A4132 +PT=F0F339022B4001E72F3BCC1A140603AD + +I=62 +KEY=4B47D2639B4A04D3C87D35DB4E63E563320749F6D5AE1660A070A602E91D5145 +CT=F0F339022B4001E72F3BCC1A140603AD +PT=DBECAFF90EDD4555A5D9A23817520D51 + +I=63 +KEY=C73B1C617BE90F2710DFF2C3AC60E0F9E9EBE60FDB73533505A9043AFE4F5C14 +CT=DBECAFF90EDD4555A5D9A23817520D51 +PT=73315A63A8889095AFED497AEFE657B4 + +I=64 +KEY=7F368758F7B303DE356481ED8EBFA46F9ADABC6C73FBC3A0AA444D4011A90BA0 +CT=73315A63A8889095AFED497AEFE657B4 +PT=3AB7E2F81D24D857308A1FC785559333 + +I=65 +KEY=6D7EF76412498AB3C70AA3006CC87188A06D5E946EDF1BF79ACE528794FC9893 +CT=3AB7E2F81D24D857308A1FC785559333 +PT=7EAA2814E372F674AB0B6E0E428D1AF4 + +I=66 +KEY=D626AD50A7B86153BF9215A6A8F7E908DEC776808DADED8331C53C89D6718267 +CT=7EAA2814E372F674AB0B6E0E428D1AF4 +PT=ADD212A59AC9EF6A55AEAC22D35A1BFE + +I=67 +KEY=4B9C7ED9AC7835C87DAB8BEF3ED6878B73156425176402E9646B90AB052B9999 +CT=ADD212A59AC9EF6A55AEAC22D35A1BFE +PT=203ECD34AE1BB2F23BC673DBD74FA07B + +I=68 +KEY=E34FBDEF9D81B464DD1138093F132051532BA911B97FB01B5FADE370D26439E2 +CT=203ECD34AE1BB2F23BC673DBD74FA07B +PT=0A18AFD5EEBBD338299897EA1F01324C + +I=69 +KEY=77BD51D39775121C22343FFC66D40F0B593306C457C463237635749ACD650BAE +CT=0A18AFD5EEBBD338299897EA1F01324C +PT=2892A6AE9517642A0977942360FB8104 + +I=70 +KEY=2761BF5478726AF184C86B45AE331A7E71A1A06AC2D307097F42E0B9AD9E8AAA +CT=2892A6AE9517642A0977942360FB8104 +PT=8A4CD7685B9A1E663C3130C34BC418B9 + +I=71 +KEY=DD168B81E90D806FF468BE5E551F3344FBED77029949196F4373D07AE65A9213 +CT=8A4CD7685B9A1E663C3130C34BC418B9 +PT=C7C0A15A1A22363B378D5DD27A69D4C2 + +I=72 +KEY=3442C07C0E98F523F9278D934F424BD83C2DD658836B2F5474FE8DA89C3346D1 +CT=C7C0A15A1A22363B378D5DD27A69D4C2 +PT=55A8EF8CAE213FE3FD6AA77E7415400A + +I=73 +KEY=291BD1577921B2947BC470C19727F0BD698539D42D4A10B789942AD6E82606DB +CT=55A8EF8CAE213FE3FD6AA77E7415400A +PT=0B07BEB71461356645936996AC45EB87 + +I=74 +KEY=46475B4C21F0F4895FEFCC67632DBCDC62828763392B25D1CC0743404463ED5C +CT=0B07BEB71461356645936996AC45EB87 +PT=6DFA5978F740C18CEE6F70FF50008BFD + +I=75 +KEY=CF89BDDE5D363B3C44DB6FED2DAB47AA0F78DE1BCE6BE45D226833BF146366A1 +CT=6DFA5978F740C18CEE6F70FF50008BFD +PT=6F58747F0336A2C4D2A397511E06D703 + +I=76 +KEY=85F7D4A4503F7C3D52998384F8B29BEF6020AA64CD5D4699F0CBA4EE0A65B1A2 +CT=6F58747F0336A2C4D2A397511E06D703 +PT=32AC7B1B8FFA7D411F46C129EEFFAF13 + +I=77 +KEY=CDE87D2DFB6198CFC737D93433419757528CD17F42A73BD8EF8D65C7E49A1EB1 +CT=32AC7B1B8FFA7D411F46C129EEFFAF13 +PT=CF5D039714814E72ECE7B9D5D1B27D11 + +I=78 +KEY=BCB9F75F11496AABFE2633E393B59B449DD1D2E8562675AA036ADC12352863A0 +CT=CF5D039714814E72ECE7B9D5D1B27D11 +PT=3455F997002A1818967E2679A07C1D56 + +I=79 +KEY=99E143B3524E724A009533AEC659E15BA9842B7F560C6DB29514FA6B95547EF6 +CT=3455F997002A1818967E2679A07C1D56 +PT=1F2113D44E290F1379A3CEC6D57D6279 + +I=80 +KEY=90086C83794D6878FF2CE748ECA6EDF4B6A538AB182562A1ECB734AD40291C8F +CT=1F2113D44E290F1379A3CEC6D57D6279 +PT=88866DB676AA3B21954AFDE0A0F33007 + +I=81 +KEY=FA254EB868F6CD5965346ACAE326BD2A3E23551D6E8F598079FDC94DE0DA2C88 +CT=88866DB676AA3B21954AFDE0A0F33007 +PT=A1665AD0252764E2691E65FEFB609CDA + +I=82 +KEY=92032C92FEEB0A5CD5D71AAF1BF5F47D9F450FCD4BA83D6210E3ACB31BBAB052 +CT=A1665AD0252764E2691E65FEFB609CDA +PT=988CE348430A206546379A8C684C00F1 + +I=83 +KEY=CF32144187F7B98256B5B4204DFABC8807C9EC8508A21D0756D4363F73F6B0A3 +CT=988CE348430A206546379A8C684C00F1 +PT=60289F0B6A9ADD08BF8924AA6D7F4D12 + +I=84 +KEY=A7BD244360E3C325F3EA315C86959DD867E1738E6238C00FE95D12951E89FDB1 +CT=60289F0B6A9ADD08BF8924AA6D7F4D12 +PT=FA3EA122499D7E083D81F147D9D68B09 + +I=85 +KEY=86213610EDC35A883A3364E8D529C6459DDFD2AC2BA5BE07D4DCE3D2C75F76B8 +CT=FA3EA122499D7E083D81F147D9D68B09 +PT=8E0B2452EF0515FC554A0AADF107714D + +I=86 +KEY=92CC3AE4A2A68CD93634075E902C66CB13D4F6FEC4A0ABFB8196E97F365807F5 +CT=8E0B2452EF0515FC554A0AADF107714D +PT=463CEAE83A50BA54280E792AB6B29B94 + +I=87 +KEY=6D86FA00DBB949A29D4A6166F1EF531E55E81C16FEF011AFA998905580EA9C61 +CT=463CEAE83A50BA54280E792AB6B29B94 +PT=416CA710B874E50CC98DF842B3435AD1 + +I=88 +KEY=C9400C98A04F5041BE1C6090A866F7DA1484BB064684F4A36015681733A9C6B0 +CT=416CA710B874E50CC98DF842B3435AD1 +PT=3BA8BB5C572C0404E4B8199528825904 + +I=89 +KEY=ED5043E9699B37844033E8BD170588342F2C005A11A8F0A784AD71821B2B9FB4 +CT=3BA8BB5C572C0404E4B8199528825904 +PT=1D2812DE70AA2D59894DA4DA7FE906FC + +I=90 +KEY=1964C6C301EEEF60B34E8E35175CAF8D320412846102DDFE0DE0D55864C29948 +CT=1D2812DE70AA2D59894DA4DA7FE906FC +PT=2735CAAFE653442FFC2E878AE2829998 + +I=91 +KEY=567B1E0737D0F72F82EB3A47D17209191531D82B875199D1F1CE52D2864000D0 +CT=2735CAAFE653442FFC2E878AE2829998 +PT=07B5FA4835E5DFC67E02F490A497145D + +I=92 +KEY=89AAD6DCA6A8973580D02768EBC8372412842263B2B446178FCCA64222D7148D +CT=07B5FA4835E5DFC67E02F490A497145D +PT=A31272EC8623213B015811FAE12330CE + +I=93 +KEY=4B4AB47A0DBA39907D8E919767E69518B196508F3497672C8E94B7B8C3F42443 +CT=A31272EC8623213B015811FAE12330CE +PT=9132AB51C9738A62CABDE4977947E0BF + +I=94 +KEY=BEC71999AEE5517C243B65830D30DEBB20A4FBDEFDE4ED4E4429532FBAB3C4FC +CT=9132AB51C9738A62CABDE4977947E0BF +PT=689375EA83B61894631E6EFA2D509531 + +I=95 +KEY=77CE2C97A458300D7C95C6871CEB56D648378E347E52F5DA27373DD597E351CD +CT=689375EA83B61894631E6EFA2D509531 +PT=AAA5C6C5917DFC103383DE6C79EB2BA6 + +I=96 +KEY=0AD691774612F7EFA41FE39B8B3A2D14E29248F1EF2F09CA14B4E3B9EE087A6B +CT=AAA5C6C5917DFC103383DE6C79EB2BA6 +PT=29D9945BDB3770ED2A41D2760D0DC51D + +I=97 +KEY=4E1D42ADC4CEF6BAE3A5B9E08F7ACD65CB4BDCAA341879273EF531CFE305BF76 +CT=29D9945BDB3770ED2A41D2760D0DC51D +PT=2F9B3C4E1FDCDC8F7D5DFBEA342284F2 + +I=98 +KEY=2D76A3E35C075DB14E40A59F46E07A81E4D0E0E42BC4A5A843A8CA25D7273B84 +CT=2F9B3C4E1FDCDC8F7D5DFBEA342284F2 +PT=ED4CFCF1C8D226EBACCC8FF11B1C81B8 + +I=99 +KEY=E7364D0D17D723A69C0BA956778BD0E9099C1C15E3168343EF6445D4CC3BBA3C +CT=ED4CFCF1C8D226EBACCC8FF11B1C81B8 +PT=2F9B5E1392B767E8497F849D00E98193 + +I=100 +KEY=709380C7012CB4272A69F6D4936B163E2607420671A1E4ABA61BC149CCD23BAF +CT=2F9B5E1392B767E8497F849D00E98193 +PT=3BE783A4A38EFB44150AA7A08E1888F6 + +I=101 +KEY=98FF27B8AB7B91F690231E24608076EF1DE0C1A2D22F1FEFB31166E942CAB359 +CT=3BE783A4A38EFB44150AA7A08E1888F6 +PT=F35AED9C83E53D2EADDE507345096218 + +I=102 +KEY=24F9D2FF633EE9AAED7321CFCF4D1D20EEBA2C3E51CA22C11ECF369A07C3D141 +CT=F35AED9C83E53D2EADDE507345096218 +PT=A22BF93FD521A6E59C196022FF252DC2 + +I=103 +KEY=70E491840BC5C42A878655E18E9AAAA74C91D50184EB842482D656B8F8E6FC83 +CT=A22BF93FD521A6E59C196022FF252DC2 +PT=11E67B52F8CD97D63268485EB546E1FE + +I=104 +KEY=098FF2D6DE55FF5C66D5AD7D5949643A5D77AE537C2613F2B0BE1EE64DA01D7D +CT=11E67B52F8CD97D63268485EB546E1FE +PT=1E67AF3F7E7FDEFB868696E96F718ACC + +I=105 +KEY=B89EA7CBAE57B8AD39F23B22A8F651A44310016C0259CD093638880F22D197B1 +CT=1E67AF3F7E7FDEFB868696E96F718ACC +PT=332B0045710B2DD6EC3D619051580C7F + +I=106 +KEY=39F71BC56EBFA91088499DC41A0C5B5B703B01297352E0DFDA05E99F73899BCE +CT=332B0045710B2DD6EC3D619051580C7F +PT=86F3D75D18F7AB31C6C52C19B0C35023 + +I=107 +KEY=417147DB03FDA0B26BEED7FE8A9487D5F6C8D6746BA54BEE1CC0C586C34ACBED +CT=86F3D75D18F7AB31C6C52C19B0C35023 +PT=452E6C2DA8B93A1E282F1A86AECB9F15 + +I=108 +KEY=C4336C26C20AD7811578044800A51E8EB3E6BA59C31C71F034EFDF006D8154F8 +CT=452E6C2DA8B93A1E282F1A86AECB9F15 +PT=637F010BAC28AC108331F4E26B262D3A + +I=109 +KEY=D0369C75D40EEF29CF7588FB87EE2ED2D099BB526F34DDE0B7DE2BE206A779C2 +CT=637F010BAC28AC108331F4E26B262D3A +PT=3F3DCA8B4C2DDFD556880A17FB575E7B + +I=110 +KEY=4DE25218630A678C287EC42F93985D22EFA471D923190235E15621F5FDF027B9 +CT=3F3DCA8B4C2DDFD556880A17FB575E7B +PT=3DA8C1D40B51A8BC6E728D7A1E6B3B2E + +I=111 +KEY=C0526C3096805B532433C0248E153A00D20CB00D2848AA898F24AC8FE39B1C97 +CT=3DA8C1D40B51A8BC6E728D7A1E6B3B2E +PT=449B050578191E4C156F7040EF27D5EC + +I=112 +KEY=6A1B7384328BAA25B6A857FB12A90FD49697B5085051B4C59A4BDCCF0CBCC97B +CT=449B050578191E4C156F7040EF27D5EC +PT=D58ACA128F936803BDD5EC1E6DECAB04 + +I=113 +KEY=44B7F3EB0EF0EF4325353D30F35C4D71431D7F1ADFC2DCC6279E30D16150627F +CT=D58ACA128F936803BDD5EC1E6DECAB04 +PT=77F1011F968AD46338CA68D5DF37959E + +I=114 +KEY=E1E6BBD70AEAC4D65159422B3DFE82DF34EC7E05494808A51F545804BE67F7E1 +CT=77F1011F968AD46338CA68D5DF37959E +PT=FC692161766A29C9E6A86C353E2F3FE5 + +I=115 +KEY=5C33A88179175BB12593D6574245A6A6C8855F643F22216CF9FC34318048C804 +CT=FC692161766A29C9E6A86C353E2F3FE5 +PT=F5FD2F77BC4908F470142417048C6233 + +I=116 +KEY=E6A3CDD47570AEC4FC3B3453F78F253F3D787013836B299889E8102684C4AA37 +CT=F5FD2F77BC4908F470142417048C6233 +PT=FBDC2774D7E426CBD8B62ABD0E0EAA6F + +I=117 +KEY=4F5B3EDC53366D4C74D94663E17CBDB6C6A45767548F0F53515E3A9B8ACA0058 +CT=FBDC2774D7E426CBD8B62ABD0E0EAA6F +PT=796D978C9D724C1C9445EC5BD272CEB0 + +I=118 +KEY=9119AD19E78100B3D04BED87FF5C22B5BFC9C0EBC9FD434FC51BD6C058B8CEE8 +CT=796D978C9D724C1C9445EC5BD272CEB0 +PT=15ECF7D3F516D3CBA0307959287A5BAB + +I=119 +KEY=600B4D7604FF2650611C453A50D02275AA2537383CEB9084652BAF9970C29543 +CT=15ECF7D3F516D3CBA0307959287A5BAB +PT=DA67996084E9C74C143310FC3CF207DD + +I=120 +KEY=3B8E0B73BBF745BB360EA50E7DA9B3297042AE58B80257C87118BF654C30929E +CT=DA67996084E9C74C143310FC3CF207DD +PT=6E9BC50580D45D54FEEC74830C0D9516 + +I=121 +KEY=231592D0CE761359AE2E85CC4E4156A01ED96B5D38D60A9C8FF4CBE6403D0788 +CT=6E9BC50580D45D54FEEC74830C0D9516 +PT=A4B0F6A50C72C5EE755FA5595334DF2E + +I=122 +KEY=7ABD82D278910B909B0D6219EF5E0D98BA699DF834A4CF72FAAB6EBF1309D8A6 +CT=A4B0F6A50C72C5EE755FA5595334DF2E +PT=24CDAEEB54A1EB7E2D4A0BEE526EA6E0 + +I=123 +KEY=5C8F7B23850BD287F011E257D691F8979EA433136005240CD7E1655141677E46 +CT=24CDAEEB54A1EB7E2D4A0BEE526EA6E0 +PT=84F24CDC0AA63CEA2DDE8F94C8776765 + +I=124 +KEY=DF8EEE46309021F6E7D7D41908B6CABE1A567FCF6AA318E6FA3FEAC589101923 +CT=84F24CDC0AA63CEA2DDE8F94C8776765 +PT=EEA20542DEDB0B99A2144942FFEAC820 + +I=125 +KEY=8634A663D618B3BB54F44A5849170ACDF4F47A8DB478137F582BA38776FAD103 +CT=EEA20542DEDB0B99A2144942FFEAC820 +PT=CDD91737753BE9F672A60DD722202127 + +I=126 +KEY=E41913E97F21A4E6A948ABEB45279E0D392D6DBAC143FA892A8DAE5054DAF024 +CT=CDD91737753BE9F672A60DD722202127 +PT=E6E2F7846E06BB90F19B21521DD4D238 + +I=127 +KEY=1E63624B5EADBE7D42255F208CC7D348DFCF9A3EAF454119DB168F02490E221C +CT=E6E2F7846E06BB90F19B21521DD4D238 +PT=0110CA2647D43C8BD012976113EFB860 + +I=128 +KEY=8476329019AA4D0D91C71E0DFFF47906DEDF5018E8917D920B0418635AE19A7C +CT=0110CA2647D43C8BD012976113EFB860 +PT=CC9AACC98876387D09565F1A20D329AF + +I=129 +KEY=DB1C0803BC1AD91C5621FA8C54AA83EF1245FCD160E745EF025247797A32B3D3 +CT=CC9AACC98876387D09565F1A20D329AF +PT=55AB296D67DEEBA179AD8093C1952CC2 + +I=130 +KEY=5C0887FF7C888D7800C43BC9E88D9B3B47EED5BC0739AE4E7BFFC7EABBA79F11 +CT=55AB296D67DEEBA179AD8093C1952CC2 +PT=27016691505182706848CD5D7A2C5CAB + +I=131 +KEY=0FFBE12ADFA17F3BF26622C20311D38960EFB32D57682C3E13B70AB7C18BC3BA +CT=27016691505182706848CD5D7A2C5CAB +PT=5E6C9FAF480FFE51D7687ADE203D5367 + +I=132 +KEY=C4C12330BC21062618E2E83EC3755DAC3E832C821F67D26FC4DF7069E1B690DD +CT=5E6C9FAF480FFE51D7687ADE203D5367 +PT=082FF20DC6AFBA3888348E5724F5C526 + +I=133 +KEY=3F6BF56A0136C1058924FCD831A65EBC36ACDE8FD9C868574CEBFE3EC54355FB +CT=082FF20DC6AFBA3888348E5724F5C526 +PT=67AE68CDDA349A067339F28FA216A188 + +I=134 +KEY=4AB9E8E9B5BB84353006AB43065C6B8F5102B64203FCF2513FD20CB16755F473 +CT=67AE68CDDA349A067339F28FA216A188 +PT=3316F37F97D679B78A537A0E107923AB + +I=135 +KEY=E04DE045508423D735B20168C7974CC26214453D942A8BE6B58176BF772CD7D8 +CT=3316F37F97D679B78A537A0E107923AB +PT=00AEB331686999C5F5FB1E7C6CCF1072 + +I=136 +KEY=D4D19E570760468E9703F0E49C4AC9F262BAF60CFC431223407A68C31BE3C7AA +CT=00AEB331686999C5F5FB1E7C6CCF1072 +PT=29A5DB93D2AE9B1ED9714213EAD9AA1C + +I=137 +KEY=6D6789354D2CC3EFA9ABFC466F21A6E24B1F2D9F2EED893D990B2AD0F13A6DB6 +CT=29A5DB93D2AE9B1ED9714213EAD9AA1C +PT=E98426CB0F858A084EB66311188D9200 + +I=138 +KEY=06ED66801B81943BF1640AAE222A23C7A29B0B5421680335D7BD49C1E9B7FFB6 +CT=E98426CB0F858A084EB66311188D9200 +PT=21527326577425261F2D40268C428E29 + +I=139 +KEY=2232758279A806C21870C85273C12FA883C97872761C2613C89009E765F5719F +CT=21527326577425261F2D40268C428E29 +PT=CC9393A43B8A8194C0EC29F989E597A6 + +I=140 +KEY=E7E22C2A6E6D4A1BFE7B706047094AF44F5AEBD64D96A787087C201EEC10E639 +CT=CC9393A43B8A8194C0EC29F989E597A6 +PT=714846062B262A823B24164900DF91AD + +I=141 +KEY=89A78F64BCAEE02CAC92928134C2567C3E12ADD066B08D0533583657ECCF7794 +CT=714846062B262A823B24164900DF91AD +PT=1D0AC79D1E9BB36A6A6A8E49538C08FF + +I=142 +KEY=4F6E8D81296C95FAA0FE6F2D324A392223186A4D782B3E6F5932B81EBF437F6B +CT=1D0AC79D1E9BB36A6A6A8E49538C08FF +PT=403D8B10E0AB31493589AFFA8E8B1BEE + +I=143 +KEY=24E398291CF018E4666728F4F635F74D6325E15D98800F266CBB17E431C86485 +CT=403D8B10E0AB31493589AFFA8E8B1BEE +PT=9E0516EDA401DAAF6AC013841C0D63C8 + +I=144 +KEY=F80CF8AF1FA463D2ED7C7F59C1B239B0FD20F7B03C81D589067B04602DC5074D +CT=9E0516EDA401DAAF6AC013841C0D63C8 +PT=74B2B200922B21AA20A0C5860CFB7E4D + +I=145 +KEY=577A5456424E1A76C3E113EB82CCDF34899245B0AEAAF42326DBC1E6213E7900 +CT=74B2B200922B21AA20A0C5860CFB7E4D +PT=25AFF27E13888A638CDA2673D7F16AFD + +I=146 +KEY=7C623BBD4777E6EF9BC058DF5BA27BEAAC3DB7CEBD227E40AA01E795F6CF13FD +CT=25AFF27E13888A638CDA2673D7F16AFD +PT=A54F400AB9C52913D7302BA36BF217DD + +I=147 +KEY=A8B33E433720C4B925C4F0315DDB73B00972F7C404E757537D31CC369D3D0420 +CT=A54F400AB9C52913D7302BA36BF217DD +PT=48A263A07112AA95EA1414CE03545790 + +I=148 +KEY=DA864B91AED3E2FAC25782F4A50C13C841D0946475F5FDC69725D8F89E6953B0 +CT=48A263A07112AA95EA1414CE03545790 +PT=541547E924522E59C1721D130B64D92F + +I=149 +KEY=EEB5FF6F9C435510E12934F5E806553E15C5D38D51A7D39F5657C5EB950D8A9F +CT=541547E924522E59C1721D130B64D92F +PT=5830544939EB4607145538388840248B + +I=150 +KEY=24E609AD29E4C601189CB2FE119767884DF587C4684C95984202FDD31D4DAE14 +CT=5830544939EB4607145538388840248B +PT=CBE1F82FD3318448AA36ADB5967EF865 + +I=151 +KEY=5A7EBB76C38C2E5F038612A06E84BB2C86147FEBBB7D11D0E83450668B335671 +CT=CBE1F82FD3318448AA36ADB5967EF865 +PT=3B104547D2D620879E3CB2B5774C0FB4 + +I=152 +KEY=827EFCB7BC862C2466B8C79FC297AD3DBD043AAC69AB31577608E2D3FC7F59C5 +CT=3B104547D2D620879E3CB2B5774C0FB4 +PT=B667F7544FE49A07611A160E3312F69A + +I=153 +KEY=9BC6C18805144F98CAEA7B252B3EE2930B63CDF8264FAB501712F4DDCF6DAF5F +CT=B667F7544FE49A07611A160E3312F69A +PT=C3E928FDEB5D7DDF7CF32C4DBCFE32F3 + +I=154 +KEY=2BC00DF6D26F9A968C3BFF47AE761718C88AE505CD12D68F6BE1D89073939DAC +CT=C3E928FDEB5D7DDF7CF32C4DBCFE32F3 +PT=72A9CF7AA2EDAF1907D77D10A02A45DE + +I=155 +KEY=15A0EE054E2D5E7EDCF3FC766860ACCDBA232A7F6FFF79966C36A580D3B9D872 +CT=72A9CF7AA2EDAF1907D77D10A02A45DE +PT=97ABFAAD506940F88FDC8F55AD7EA919 + +I=156 +KEY=C56C11F3A96852119C16751963C24CD42D88D0D23F96396EE3EA2AD57EC7716B +CT=97ABFAAD506940F88FDC8F55AD7EA919 +PT=DD55A02B1EB01EB091CA6337D0BEB5BD + +I=157 +KEY=8634CC7B3416FCE337AAFA39791D1545F0DD70F9212627DE722049E2AE79C4D6 +CT=DD55A02B1EB01EB091CA6337D0BEB5BD +PT=C5EB3DF5A328B267F3895CECD4A828AF + +I=158 +KEY=DDC1361E1432CCAC3551E2478A321A0035364D0C820E95B981A9150E7AD1EC79 +CT=C5EB3DF5A328B267F3895CECD4A828AF +PT=49952DACD97FD5583A7D9C4FF515EC17 + +I=159 +KEY=52658EEC2A7441D866CFA15944BB12857CA360A05B7140E1BBD489418FC4006E +CT=49952DACD97FD5583A7D9C4FF515EC17 +PT=4971EEEF871E935AC470BD770802B04B + +I=160 +KEY=05FC7A181B1935EA8DCEC961B0DFC14B35D28E4FDC6FD3BB7FA4343687C6B025 +CT=4971EEEF871E935AC470BD770802B04B +PT=3DB5E9165C24EC3790DC3E53E5E5D2DE + +I=161 +KEY=8D2793B7BDCF80338AA39C86008361BC08676759804B3F8CEF780A65622362FB +CT=3DB5E9165C24EC3790DC3E53E5E5D2DE +PT=1FDB5D4FBB59F082B3B617C8A23734F1 + +I=162 +KEY=37BE37961B77866869826907BB9E9C1717BC3A163B12CF0E5CCE1DADC014560A +CT=1FDB5D4FBB59F082B3B617C8A23734F1 +PT=8C59775AD3FF7C337B22C8E785321E25 + +I=163 +KEY=F3184EA1C8FFE3D436BEE076AA999B659BE54D4CE8EDB33D27ECD54A4526482F +CT=8C59775AD3FF7C337B22C8E785321E25 +PT=0CB834FCC0CFDAECAF4AFC5A2E38DF23 + +I=164 +KEY=CACF50D99B066EB84CBFAEEC9B0D6769975D79B0282269D188A629106B1E970C +CT=0CB834FCC0CFDAECAF4AFC5A2E38DF23 +PT=229EB7B6A97D91921BCD8C95A0D7C17B + +I=165 +KEY=3FA80E4FB785B9FC3B058CC62D289958B5C3CE06815FF843936BA585CBC95677 +CT=229EB7B6A97D91921BCD8C95A0D7C17B +PT=0D7692C281DD4FF35D9B1620E1385C34 + +I=166 +KEY=CE2A3A893C96A4F1AA81AD52EBCC3C23B8B55CC40082B7B0CEF0B3A52AF10A43 +CT=0D7692C281DD4FF35D9B1620E1385C34 +PT=D3C5FE594F5C8C5A359235448EB20146 + +I=167 +KEY=FC8642DB8CB42D1B1251CB7FE6AFF90D6B70A29D4FDE3BEAFB6286E1A4430B05 +CT=D3C5FE594F5C8C5A359235448EB20146 +PT=8C0F88460C700D96847249807B84223F + +I=168 +KEY=2A9C9FD184A5B2418FD415A228A5C0AFE77F2ADB43AE367C7F10CF61DFC7293A +CT=8C0F88460C700D96847249807B84223F +PT=5A4237A5C2DABDCDA6389D5FC66032F6 + +I=169 +KEY=FDB533163E989D2FA32CCA5D3CC5D376BD3D1D7E81748BB1D928523E19A71BCC +CT=5A4237A5C2DABDCDA6389D5FC66032F6 +PT=BF8AAC6B1536CCCCECCC9D6BE970EB3E + +I=170 +KEY=3C4B3CF0FD0C4292B2497175D4400F8902B7B1159442477D35E4CF55F0D7F0F2 +CT=BF8AAC6B1536CCCCECCC9D6BE970EB3E +PT=97CE58407FD26D63C86765CB05EA6277 + +I=171 +KEY=367862F3E2C5520EA2269392B6139E9C9579E955EB902A1EFD83AA9EF53D9285 +CT=97CE58407FD26D63C86765CB05EA6277 +PT=B411687B044B624077A92D8C130697B9 + +I=172 +KEY=0300AF491DAF6C607417FB1FD9B1EC612168812EEFDB485E8A2A8712E63B053C +CT=B411687B044B624077A92D8C130697B9 +PT=D22E92A5132EA85F4FB25EE19C248008 + +I=173 +KEY=7C92EF49A7D27E97F1884299B635F0ADF346138BFCF5E001C598D9F37A1F8534 +CT=D22E92A5132EA85F4FB25EE19C248008 +PT=FD6817CD680A2A8CE93E4B4F9CAA72AA + +I=174 +KEY=80EABB1D8C9B5F769FCAC87ED8D0C9CA0E2E044694FFCA8D2CA692BCE6B5F79E +CT=FD6817CD680A2A8CE93E4B4F9CAA72AA +PT=8DDD9B3B9278D2DE3453EA6769E1C39C + +I=175 +KEY=FB345E2D7BBBED527259FAEAEA79C05D83F39F7D0687185318F578DB8F543402 +CT=8DDD9B3B9278D2DE3453EA6769E1C39C +PT=AE69F5CD8D342E74113E979ACE3539F2 + +I=176 +KEY=7D93DC33FF2266770291160CD317C65E2D9A6AB08BB3362709CBEF4141610DF0 +CT=AE69F5CD8D342E74113E979ACE3539F2 +PT=30E19A4E84997172486DAE4FB4C41E58 + +I=177 +KEY=82362FF3E9C1AD93474CF4CABD354E7E1D7BF0FE0F2A475541A6410EF5A513A8 +CT=30E19A4E84997172486DAE4FB4C41E58 +PT=75B3D07617EB189512DC5161908940C1 + +I=178 +KEY=8EFD0FCB3855CCC16BD919FBD17596C768C8208818C15FC0537A106F652C5369 +CT=75B3D07617EB189512DC5161908940C1 +PT=FD13E89107FAFA44998721AD726C620F + +I=179 +KEY=2299D22282C798107F489637DCD479C395DBC8191F3BA584CAFD31C217403166 +CT=FD13E89107FAFA44998721AD726C620F +PT=C1B0210C0387864717BD7D02063B6A69 + +I=180 +KEY=75E05597A2BBDF23E5BD172C83548C9B546BE9151CBC23C3DD404CC0117B5B0F +CT=C1B0210C0387864717BD7D02063B6A69 +PT=0E442B38E9024CCA5DC43A7B8D5F6FCF + +I=181 +KEY=4DBC8DCB8C25B5F4AD374BA3064216555A2FC22DF5BE6F09808476BB9C2434C0 +CT=0E442B38E9024CCA5DC43A7B8D5F6FCF +PT=8FD213EC19D62FD2C19E6C91B97E56A0 + +I=182 +KEY=E393BAD07E955EBC1446B847DE5A891ED5FDD1C1EC6840DB411A1A2A255A6260 +CT=8FD213EC19D62FD2C19E6C91B97E56A0 +PT=F52ADFD33A68EE198F33708E676D0CE9 + +I=183 +KEY=3F33A76F87DB0388C2D66C7F2EFAA1B820D70E12D600AEC2CE296AA442376E89 +CT=F52ADFD33A68EE198F33708E676D0CE9 +PT=7649EB4283505EEEE1BE16DB6677B3F5 + +I=184 +KEY=04BC65DE70C9E01EEEDA5A507C218C8D569EE5505550F02C2F977C7F2440DD7C +CT=7649EB4283505EEEE1BE16DB6677B3F5 +PT=6FB1C4AD8A5B8A606621A8BF4277F3DC + +I=185 +KEY=8A6EF9710F4AE10EB60C8D25A8F67C50392F21FDDF0B7A4C49B6D4C066372EA0 +CT=6FB1C4AD8A5B8A606621A8BF4277F3DC +PT=22C2CF9572D708F688291056E2F8E120 + +I=186 +KEY=ED6D084D5F8AA4F201F9C20EA26A90E81BEDEE68ADDC72BAC19FC49684CFCF80 +CT=22C2CF9572D708F688291056E2F8E120 +PT=28AC7257911ECEB549D910BFA0905AE5 + +I=187 +KEY=BA2735927D6A76B952C08A219FBB572233419C3F3CC2BC0F8846D429245F9565 +CT=28AC7257911ECEB549D910BFA0905AE5 +PT=2A1F3842DF988CDA0C6415450A657DB2 + +I=188 +KEY=53BCC06CCCBC31A5BEE2CE88E6EAEFAC195EA47DE35A30D58422C16C2E3AE8D7 +CT=2A1F3842DF988CDA0C6415450A657DB2 +PT=6055EB3A24DE4D87C6BA5073A5BAC919 + +I=189 +KEY=DF88C3CEC31C7B88D8AC0C7AAA2CED99790B4F47C7847D524298911F8B8021CE +CT=6055EB3A24DE4D87C6BA5073A5BAC919 +PT=CC051CCD37068B41935FD14538DFEF82 + +I=190 +KEY=265B351B93FF456D5A1EAADD2BEA1296B50E538AF082F613D1C7405AB35FCE4C +CT=CC051CCD37068B41935FD14538DFEF82 +PT=225B63F455DD72EC87CF6FD5DF0FDAF3 + +I=191 +KEY=BAC4C541E0A693CF8A3892A82F67CD959755307EA55F84FF56082F8F6C5014BF +CT=225B63F455DD72EC87CF6FD5DF0FDAF3 +PT=64027F6B72F0A11628F66D5C502658E8 + +I=192 +KEY=E8F68EF4909A128F331DFEFAE8560EBCF3574F15D7AF25E97EFE42D33C764C57 +CT=64027F6B72F0A11628F66D5C502658E8 +PT=529AAF9163EDA1BC39E66D2556BE938B + +I=193 +KEY=1951B1A50BED04096C17E816D4EC6225A1CDE084B442845547182FF66AC8DFDC +CT=529AAF9163EDA1BC39E66D2556BE938B +PT=F93E85D98EB9BDDD7D3844421235FBAB + +I=194 +KEY=D39AF070909FBC0E3226E28041B0286158F3655D3AFB39883A206BB478FD2477 +CT=F93E85D98EB9BDDD7D3844421235FBAB +PT=16B6B3CC08003BA36C9E84B1EE9CD7CC + +I=195 +KEY=B705C6CCD010B980E386B8690C83E96C4E45D69132FB022B56BEEF059661F3BB +CT=16B6B3CC08003BA36C9E84B1EE9CD7CC +PT=301AFE66055149FA5775A9CE19F1FF63 + +I=196 +KEY=B3C813D4FCBD31ED95E7E71CEC15153E7E5F28F737AA4BD101CB46CB8F900CD8 +CT=301AFE66055149FA5775A9CE19F1FF63 +PT=1090E68F7C8400861589E304A5B815CD + +I=197 +KEY=0EBC30ADB6946B6415C0309D636C79F46ECFCE784B2E4B571442A5CF2A281915 +CT=1090E68F7C8400861589E304A5B815CD +PT=2778F0C712804C0B8D085B196A4D73C4 + +I=198 +KEY=9C5815C6705B39DEECB8BDDDC9329A0D49B73EBF59AE075C994AFED640656AD1 +CT=2778F0C712804C0B8D085B196A4D73C4 +PT=14FECB137DC9C38A04D92B60A177A61D + +I=199 +KEY=9D83B41F8F415B5F3B2C08682383471B5D49F5AC2467C4D69D93D5B6E112CCCC +CT=14FECB137DC9C38A04D92B60A177A61D +PT=0EF1321EA52EAA7624E3F2EFD0C886AF + +I=200 +KEY=2960CEE0AF043ED1A549BA223F6C1CF153B8C7B281496EA0B970275931DA4A63 +CT=0EF1321EA52EAA7624E3F2EFD0C886AF +PT=AFA8B2129577EC178B59D42D1B92D313 + +I=201 +KEY=51E0DECF48A151021C70EC3EE3CE9008FC1075A0143E82B73229F3742A489970 +CT=AFA8B2129577EC178B59D42D1B92D313 +PT=3351631344E6EF86712327D3C05EBDEB + +I=202 +KEY=5F34A789B0B1185BA7D1BB3EF2677060CF4116B350D86D31430AD4A7EA16249B +CT=3351631344E6EF86712327D3C05EBDEB +PT=C299D0556B0D15014627CADBCCC3DC33 + +I=203 +KEY=FC3E420F84F4C75802DCF68ABF0030E70DD8C6E63BD57830052D1E7C26D5F8A8 +CT=C299D0556B0D15014627CADBCCC3DC33 +PT=CEB83A2B9DD76B649BAAE48A8B772A5C + +I=204 +KEY=C04448AD77DBF33F22A2346C7A40F813C360FCCDA60213549E87FAF6ADA2D2F4 +CT=CEB83A2B9DD76B649BAAE48A8B772A5C +PT=A8C6AEC94E82BC68AC8E29A8CB9504F6 + +I=205 +KEY=3FA863ECC4AFA141DD7349C44F94FEE16BA65204E880AF3C3209D35E6637D602 +CT=A8C6AEC94E82BC68AC8E29A8CB9504F6 +PT=1EDED55C8D3309F828C17AF072C79D7A + +I=206 +KEY=8893E5FB27191AE09E4AB5F062289F117578875865B3A6C41AC8A9AE14F04B78 +CT=1EDED55C8D3309F828C17AF072C79D7A +PT=FD2AC22891FB294EB0AD2BADFE759C29 + +I=207 +KEY=90BA1205BB7927E86F9895855648D3EB88524570F4488F8AAA658203EA85D751 +CT=FD2AC22891FB294EB0AD2BADFE759C29 +PT=2FE6AE59ACD516EE1567A7A1C43FDE2A + +I=208 +KEY=278FD88834EA67564F301785C4045D6FA7B4EB29589D9964BF0225A22EBA097B +CT=2FE6AE59ACD516EE1567A7A1C43FDE2A +PT=35BEC13F159F61C7EF4C860AD3B41A75 + +I=209 +KEY=E9D2F23C213D02724737A5E907BFBDF0920A2A164D02F8A3504EA3A8FD0E130E +CT=35BEC13F159F61C7EF4C860AD3B41A75 +PT=650D65D6ED716DA515EAAF1A7447C3FB + +I=210 +KEY=4A0A997634E2D9305795FC90291F6FD9F7074FC0A073950645A40CB28949D0F5 +CT=650D65D6ED716DA515EAAF1A7447C3FB +PT=7AFE0D2F234A6CDEDD7103DA09147285 + +I=211 +KEY=BD671DD81F8FCD9D472564589AA13F5D8DF942EF8339F9D898D50F68805DA270 +CT=7AFE0D2F234A6CDEDD7103DA09147285 +PT=40627620B17313AF42EA7DD6CFD900F9 + +I=212 +KEY=5668F777C46BF78DC664E72186626BF5CD9B34CF324AEA77DA3F72BE4F84A289 +CT=40627620B17313AF42EA7DD6CFD900F9 +PT=0C62985837C8C6FB468BD6E3928F8497 + +I=213 +KEY=B82B5D4C3DEF62CFAE064CFDB5D904EFC1F9AC9705822C8C9CB4A45DDD0B261E +CT=0C62985837C8C6FB468BD6E3928F8497 +PT=A1FFF4635AAF2AD8AE6EA8C70858EF3B + +I=214 +KEY=6A179EF63528EFA2B12DBA23D1EC8D21600658F45F2D065432DA0C9AD553C925 +CT=A1FFF4635AAF2AD8AE6EA8C70858EF3B +PT=403F8E2D050E2976487BBEDD6466357E + +I=215 +KEY=6857720AC4DDCFFE8A96B455C973901A2039D6D95A232F227AA1B247B135FC5B +CT=403F8E2D050E2976487BBEDD6466357E +PT=2DD7EB8476988C850E8D95DC598FC61A + +I=216 +KEY=5B938E230BFE9056471E7C83A6ED03930DEE3D5D2CBBA3A7742C279BE8BA3A41 +CT=2DD7EB8476988C850E8D95DC598FC61A +PT=676B96F400AE18138B302FD3D70D490E + +I=217 +KEY=4CE7ECA340DEC23715C53343EB9162DA6A85ABA92C15BBB4FF1C08483FB7734F +CT=676B96F400AE18138B302FD3D70D490E +PT=620AAA14B94BF6B60A83129085BCF02B + +I=218 +KEY=1024ECE618D140CAE8B9DFC8EB1DE137088F01BD955E4D02F59F1AD8BA0B8364 +CT=620AAA14B94BF6B60A83129085BCF02B +PT=B701A38325DC282045C6F914394B9F70 + +I=219 +KEY=6B8C6DA855E1E72E4A6AC44601B24D60BF8EA23EB0826522B059E3CC83401C14 +CT=B701A38325DC282045C6F914394B9F70 +PT=808D0B334B775C59F8C34A3524CB4126 + +I=220 +KEY=C50A625A89465321DACCB9EB40DEF57D3F03A90DFBF5397B489AA9F9A78B5D32 +CT=808D0B334B775C59F8C34A3524CB4126 +PT=4E29C921CC295F6A3082C1BC02ACDA70 + +I=221 +KEY=973341A4E3DB315FA97C7EEDF493EA71712A602C37DC661178186845A5278742 +CT=4E29C921CC295F6A3082C1BC02ACDA70 +PT=77BC204E50EFCA2AEBDC16D3F3C3D739 + +I=222 +KEY=639EB8FB16B34B55550705FDCFF7C8CC069640626733AC3B93C47E9656E4507B +CT=77BC204E50EFCA2AEBDC16D3F3C3D739 +PT=A677A7B55AA03EB0587EE00123D047F3 + +I=223 +KEY=610A9602B725E4D87AB2904E91050D90A0E1E7D73D93928BCBBA9E9775341788 +CT=A677A7B55AA03EB0587EE00123D047F3 +PT=09AF5421548AC11466370484F8C556DE + +I=224 +KEY=314A6E0BD202458489059738917B6678A94EB3F66919539FAD8D9A138DF14156 +CT=09AF5421548AC11466370484F8C556DE +PT=B6CDD2336AB8735EE7A9946A1FE7EE0C + +I=225 +KEY=73658C0F88490F7C3B9F2B7B39551BBF1F8361C503A120C14A240E799216AF5A +CT=B6CDD2336AB8735EE7A9946A1FE7EE0C +PT=B5A2F3B47E4AC87BC06612587253930E + +I=226 +KEY=968794DEC3E866DE4F999C860E9851E9AA2192717DEBE8BA8A421C21E0453C54 +CT=B5A2F3B47E4AC87BC06612587253930E +PT=09C9C38BB3348147EB284FFA24D87244 + +I=227 +KEY=205605E66A4BE2CF61E13243E104FED9A3E851FACEDF69FD616A53DBC49D4E10 +CT=09C9C38BB3348147EB284FFA24D87244 +PT=9D1EDCA2674E5A30416DF7CC2938DC63 + +I=228 +KEY=9CA7508C83DB6E56EFF3489F2BD30C573EF68D58A99133CD2007A417EDA59273 +CT=9D1EDCA2674E5A30416DF7CC2938DC63 +PT=E8A2282B47DAB6A666A4607BBC857FC6 + +I=229 +KEY=0F98884E85FEB533CFC281C2F4437915D654A573EE4B856B46A3C46C5120EDB5 +CT=E8A2282B47DAB6A666A4607BBC857FC6 +PT=B6675D2263DC1C1E0F04A9A9BC666D2D + +I=230 +KEY=3F3ED6DC6E08DF2515D08273832429286033F8518D97997549A76DC5ED468098 +CT=B6675D2263DC1C1E0F04A9A9BC666D2D +PT=D6FF2642FD84C80674EAF8674242248D + +I=231 +KEY=67910C06B57CD52767674B70F59337D8B6CCDE13701351733D4D95A2AF04A415 +CT=D6FF2642FD84C80674EAF8674242248D +PT=47D4419A669253C39A0CC96C7CD612C0 + +I=232 +KEY=43EE254E414DB89044EE2F703B340F6AF1189F89168102B0A7415CCED3D2B6D5 +CT=47D4419A669253C39A0CC96C7CD612C0 +PT=B2B3FD7A1D4B0695B3499430F2E44CEA + +I=233 +KEY=89C9881E6D6CEFF00DDFC5618655FA4543AB62F30BCA04251408C8FE2136FA3F +CT=B2B3FD7A1D4B0695B3499430F2E44CEA +PT=4AAD0AE20AFF0675CF78992DFD2B685C + +I=234 +KEY=2C24846D047677F89EF73B917962D0FA0906681101350250DB7051D3DC1D9263 +CT=4AAD0AE20AFF0675CF78992DFD2B685C +PT=C90343412CFE70201CE22D9AD2222788 + +I=235 +KEY=770637F8F8F32915BF7630919D0726AEC0052B502DCB7270C7927C490E3FB5EB +CT=C90343412CFE70201CE22D9AD2222788 +PT=923FE89134FAF362802C5A2EBF399D2C + +I=236 +KEY=426891CF6B068FAC7FFB5A04874AEC78523AC3C11931811247BE2667B10628C7 +CT=923FE89134FAF362802C5A2EBF399D2C +PT=9C08F05026196BA3550A2496049B720B + +I=237 +KEY=B66BCCA5EFAF3F448BDD52DC48F2B904CE3233913F28EAB112B402F1B59D5ACC +CT=9C08F05026196BA3550A2496049B720B +PT=7B487FD67D0C2D987C3DEFD335C2EF17 + +I=238 +KEY=079CCBC13FCFB0D032293FDFEC563F86B57A4C474224C7296E89ED22805FB5DB +CT=7B487FD67D0C2D987C3DEFD335C2EF17 +PT=CEC12158856704CE8ABF0CA6C6F3006B + +I=239 +KEY=998AFEF458902CA632D60843A88D36637BBB6D1FC743C3E7E436E18446ACB5B0 +CT=CEC12158856704CE8ABF0CA6C6F3006B +PT=DA19C7C7283ADD9C5145ABBA53F1E7E1 + +I=240 +KEY=95EDAF196289EE6D24AA752DF489DEFCA1A2AAD8EF791E7BB5734A3E155D5251 +CT=DA19C7C7283ADD9C5145ABBA53F1E7E1 +PT=F043A57E686C1FE7DACB858F0C3E6857 + +I=241 +KEY=3050D2C04C0860414427BF5B19792D7651E10FA68715019C6FB8CFB119633A06 +CT=F043A57E686C1FE7DACB858F0C3E6857 +PT=2FB7B264BB4B3FAFA01A6BB93CC2958D + +I=242 +KEY=26186DD7BE83659550BA3B52D99975037E56BDC23C5E3E33CFA2A40825A1AF8B +CT=2FB7B264BB4B3FAFA01A6BB93CC2958D +PT=D46BBD3ABD958DA722F3591578C30F5E + +I=243 +KEY=DE1D625B9C840580FDDE57EDE82419D1AA3D00F881CBB394ED51FD1D5D62A0D5 +CT=D46BBD3ABD958DA722F3591578C30F5E +PT=3D69379AB60535902C38AB5E121DD035 + +I=244 +KEY=FF9396CB65FFB9D47EF4E0253FD98BBA9754376237CE8604C16956434F7F70E0 +CT=3D69379AB60535902C38AB5E121DD035 +PT=A5767F4E6C8482290BC7B76D23EEF145 + +I=245 +KEY=B98B5F1CA9752B1B07514B72C3D585F23222482C5B4A042DCAAEE12E6C9181A5 +CT=A5767F4E6C8482290BC7B76D23EEF145 +PT=9388736A82C99337C49BB4F32437B1DA + +I=246 +KEY=5F130919FB4ED29397E4781550B1D444A1AA3B46D983971A0E3555DD48A6307F +CT=9388736A82C99337C49BB4F32437B1DA +PT=915C6C5181E797DADC289F8FFF60CD19 + +I=247 +KEY=D3F202F140D38545C8A04EC2D0993E2B30F65717586400C0D21DCA52B7C6FD66 +CT=915C6C5181E797DADC289F8FFF60CD19 +PT=A61167CDBE95ABFAD9C1A58BDA90F0D4 + +I=248 +KEY=FBFA83B249C3B13C83E8FC111611391296E730DAE6F1AB3A0BDC6FD96D560DB2 +CT=A61167CDBE95ABFAD9C1A58BDA90F0D4 +PT=9AF2B4CF00B037976D0F5CAC4201885D + +I=249 +KEY=CC24CC54D0889912C7AD2473EBA8BBB30C158415E6419CAD66D333752F5785EF +CT=9AF2B4CF00B037976D0F5CAC4201885D +PT=A9B74046119B6699FD5EFD1E476BEE64 + +I=250 +KEY=F520F18D9FACA98E5F57226127FA9B6BA5A2C453F7DAFA349B8DCE6B683C6B8B +CT=A9B74046119B6699FD5EFD1E476BEE64 +PT=CD7EAA1EF3B91B69FD3E54FCC5A802E9 + +I=251 +KEY=9BFD59A9F78FB1BE6F13B701D7EB0F6268DC6E4D0463E15D66B39A97AD946962 +CT=CD7EAA1EF3B91B69FD3E54FCC5A802E9 +PT=FD7095C419E2722425E6D4CA1A393D8C + +I=252 +KEY=C1C39AC5158C8CDBE82CF37D00B7896995ACFB891D81937943554E5DB7AD54EE +CT=FD7095C419E2722425E6D4CA1A393D8C +PT=9963CE47EB0322135C5D20B923FC341A + +I=253 +KEY=C9E26AE18D08643029C92F11BD3E8AA40CCF35CEF682B16A1F086EE4945160F4 +CT=9963CE47EB0322135C5D20B923FC341A +PT=11589A1BDD037FABABBB9BF5AAC859A7 + +I=254 +KEY=2183FF3C1EB1DF48DB8FA5F87F279F891D97AFD52B81CEC1B4B3F5113E993953 +CT=11589A1BDD037FABABBB9BF5AAC859A7 +PT=B6CEE1CD709BE6E055041FC2E1A87539 + +I=255 +KEY=738690954B4B92CE2367567B3A960E8DAB594E185B1A2821E1B7EAD3DF314C6A +CT=B6CEE1CD709BE6E055041FC2E1A87539 +PT=D776658F01CCEC460FA7145C6C6CBD42 + +I=256 +KEY=71AB2DBD9923F08E516D8DF0CF57CC227C2F2B975AD6C467EE10FE8FB35DF128 +CT=D776658F01CCEC460FA7145C6C6CBD42 +PT=0C6D2578060A0A1024230D838AA45234 + +I=257 +KEY=1C0E18C83D74E46DDF65BFC3335CFF0D70420EEF5CDCCE77CA33F30C39F9A31C +CT=0C6D2578060A0A1024230D838AA45234 +PT=BFD55D67EF4883200FDAEEA5D44F0302 + +I=258 +KEY=7DA814BD80D8CBBEE778E030682E7F34CF975388B3944D57C5E91DA9EDB6A01E +CT=BFD55D67EF4883200FDAEEA5D44F0302 +PT=E821629542650FAFEF08D94AC889078A + +I=259 +KEY=10490CD6F16D915CE9891C69E10884D827B6311DF1F142F82AE1C4E3253FA794 +CT=E821629542650FAFEF08D94AC889078A +PT=F2F81CD9CBD3E932686B6195A97EE13A + +I=260 +KEY=F0114F7C7101931F6A4595A6C3D2F34AD54E2DC43A22ABCA428AA5768C4146AE +CT=F2F81CD9CBD3E932686B6195A97EE13A +PT=C90348C14450EE3D9BFA30377D4B2440 + +I=261 +KEY=C5802B19BA4921D3750A590F02658F621C4D65057E7245F7D9709541F10A62EE +CT=C90348C14450EE3D9BFA30377D4B2440 +PT=619E907C4E7FD3A723E34B8D3880D71B + +I=262 +KEY=236500CE70AC49E98907DC4EDAE41CCA7DD3F579300D9650FA93DECCC98AB5F5 +CT=619E907C4E7FD3A723E34B8D3880D71B +PT=932A17E8FDA853F6DB1C9271EC4FBF56 + +I=263 +KEY=7BB7D14473E7E2D70F3C8C90D4B1035CEEF9E291CDA5C5A6218F4CBD25C50AA3 +CT=932A17E8FDA853F6DB1C9271EC4FBF56 +PT=549CB80C490E592E18ACC04FAA933489 + +I=264 +KEY=415AD8391B32F6E61A861B4C8A4BBC6DBA655A9D84AB9C8839238CF28F563E2A +CT=549CB80C490E592E18ACC04FAA933489 +PT=BF6337BEDE116D5A60B06DA8B270159C + +I=265 +KEY=058F24C125EB3E94B54BB6F1F099501C05066D235ABAF1D25993E15A3D262BB6 +CT=BF6337BEDE116D5A60B06DA8B270159C +PT=CBD3D52496E6DF0DBD065BD924C5001F + +I=266 +KEY=B85B96EC639098C392FD33D11A49251ECED5B807CC5C2EDFE495BA8319E32BA9 +CT=CBD3D52496E6DF0DBD065BD924C5001F +PT=AF8879C67DF265E118096478FBA003AD + +I=267 +KEY=526BF9DCAF4A4DFD05FAD0EA3B58131D615DC1C1B1AE4B3EFC9CDEFBE2432804 +CT=AF8879C67DF265E118096478FBA003AD +PT=C627176029E2D22A51F5630B129A1095 + +I=268 +KEY=553316781F120EE83A2D083D97D19F99A77AD6A1984C9914AD69BDF0F0D93891 +CT=C627176029E2D22A51F5630B129A1095 +PT=F46AC5870C65636D6C200312F2A15BE6 + +I=269 +KEY=E9A37578C1402447D6CC1161F126D5C7531013269429FA79C149BEE202786377 +CT=F46AC5870C65636D6C200312F2A15BE6 +PT=4FBBFF3856FC0DEC7EE18585FFA4AC16 + +I=270 +KEY=78521B42D0FBE8EA8BB6D44D66AE476D1CABEC1EC2D5F795BFA83B67FDDCCF61 +CT=4FBBFF3856FC0DEC7EE18585FFA4AC16 +PT=8711DAE7DD9B3F6D9FAD03669C1C8F5E + +I=271 +KEY=851C9A078620280FBCDDFB4FD3745C749BBA36F91F4EC8F82005380161C0403F +CT=8711DAE7DD9B3F6D9FAD03669C1C8F5E +PT=050E884136E09368DEFBC43F6B3182CC + +I=272 +KEY=50CCAA51D781B7090285D907E68B1F7A9EB4BEB829AE5B90FEFEFC3E0AF1C2F3 +CT=050E884136E09368DEFBC43F6B3182CC +PT=CEC37197CEE3E0D797F441CC0541B851 + +I=273 +KEY=DAB5ECB43982EAE8412102E2B7BC7CEA5077CF2FE74DBB47690ABDF20FB07AA2 +CT=CEC37197CEE3E0D797F441CC0541B851 +PT=197ECC091E5620DCA63BA2E6CFBC9F43 + +I=274 +KEY=57974D1C4BBF761C9E09B8DAD3E510DF49090326F91B9B9BCF311F14C00CE5E1 +CT=197ECC091E5620DCA63BA2E6CFBC9F43 +PT=F2E836DEE9668E81D74A3C0F03CF3C10 + +I=275 +KEY=E37677110C5A9A59EC06E0968BF5D14EBBE135F8107D151A187B231BC3C3D9F1 +CT=F2E836DEE9668E81D74A3C0F03CF3C10 +PT=DD581BB9F4A7BEC66CAC7916871F55C8 + +I=276 +KEY=2CD760C245E62EA5B477BDA094B3AD5166B92E41E4DAABDC74D75A0D44DC8C39 +CT=DD581BB9F4A7BEC66CAC7916871F55C8 +PT=7B05D43A3BE733E0DE6E2CE494141B46 + +I=277 +KEY=DE35BF6BC48E8B8E6A30DB886C9D75DD1DBCFA7BDF3D983CAAB976E9D0C8977F +CT=7B05D43A3BE733E0DE6E2CE494141B46 +PT=1D561DCAA42E92568DD6ACD583FF7BCE + +I=278 +KEY=8AD7FCADA5D092DD5D221532EED3FD1000EAE7B17B130A6A276FDA3C5337ECB1 +CT=1D561DCAA42E92568DD6ACD583FF7BCE +PT=1E9AB09A76FD91CC33B85390BDE631F8 + +I=279 +KEY=534EEF6B1450693335980E00CD3CDE361E70572B0DEE9BA614D789ACEED1DD49 +CT=1E9AB09A76FD91CC33B85390BDE631F8 +PT=CBD0E3A07952EAC118A81B76D09276FD + +I=280 +KEY=8A39C2221622785E4DA9B14DAAE6ADF3D5A0B48B74BC71670C7F92DA3E43ABB4 +CT=CBD0E3A07952EAC118A81B76D09276FD +PT=AC20057B857E6C34F7E68A5765573538 + +I=281 +KEY=50887AD2D325CBC04B5FD69518318BAD7980B1F0F1C21D53FB99188D5B149E8C +CT=AC20057B857E6C34F7E68A5765573538 +PT=DDFFD26BA5B33AEA36A0A6D75EAA047C + +I=282 +KEY=9613965C1776C5BAEA3CEE6154AABC9FA47F639B547127B9CD39BE5A05BE9AF0 +CT=DDFFD26BA5B33AEA36A0A6D75EAA047C +PT=F0883B6DD3CA0515CB9F1ABA646CCB69 + +I=283 +KEY=E7F6DB8A94597956CEE07447F9BB5CA454F758F687BB22AC06A6A4E061D25199 +CT=F0883B6DD3CA0515CB9F1ABA646CCB69 +PT=F4E27CA9E27B3E81B981298738C01FDA + +I=284 +KEY=0CB665943D6E6E32886A94C070366FB2A015245F65C01C2DBF278D6759124E43 +CT=F4E27CA9E27B3E81B981298738C01FDA +PT=B03B2EB7A1E13E1A17C51FF5684E2A72 + +I=285 +KEY=1EA698290E4B1D41B0CC4F3B9A9398FF102E0AE8C4212237A8E29292315C6431 +CT=B03B2EB7A1E13E1A17C51FF5684E2A72 +PT=BE133CCCE406C1C0BC1707115B5B0C84 + +I=286 +KEY=BA38F49FA3D4A74ED41F8DA958A953C7AE3D36242027E3F714F595836A0768B5 +CT=BE133CCCE406C1C0BC1707115B5B0C84 +PT=A15B1C9BCF319AEF262E366C142A0DCF + +I=287 +KEY=935F2CEECBBCF3465DB9B0DB927AF4310F662ABFEF16791832DBA3EF7E2D657A +CT=A15B1C9BCF319AEF262E366C142A0DCF +PT=7A8DA23874D28EB75261D87D57451EAE + +I=288 +KEY=B8E67B884E3E229EBB516065499F790275EB88879BC4F7AF60BA7B9229687BD4 +CT=7A8DA23874D28EB75261D87D57451EAE +PT=9331C989A7E291FD94BA4C945A79126E + +I=289 +KEY=CFB51BE6CDA499D66E7B36CAAC220FB7E6DA410E3C266652F4003706731169BA +CT=9331C989A7E291FD94BA4C945A79126E +PT=70A2F921A8BB0548D91A114478308448 + +I=290 +KEY=19821B21FED0C1659AF4E16F49F63B699678B82F949D631A2D1A26420B21EDF2 +CT=70A2F921A8BB0548D91A114478308448 +PT=8ED8FC98045BA0EF9C15E9565EECE5BB + +I=291 +KEY=27DA5E31E794D670BDB701F361B8977018A044B790C6C3F5B10FCF1455CD0849 +CT=8ED8FC98045BA0EF9C15E9565EECE5BB +PT=F6621989AFC0427E3E84039B6C6C2E75 + +I=292 +KEY=64E8F7C4292DF7D0B01BED3FAE08DA4FEEC25D3E3F06818B8F8BCC8F39A1263C +CT=F6621989AFC0427E3E84039B6C6C2E75 +PT=68F4804D1E8D383FAF4E76F80FB8F92B + +I=293 +KEY=EE626AFFE4997C11CAE2714FF96D84B18636DD73218BB9B420C5BA773619DF17 +CT=68F4804D1E8D383FAF4E76F80FB8F92B +PT=2D61F123E2479D56AE5C327A57F6A28B + +I=294 +KEY=EA24B2DB953084C818B0E6F34BA1584DAB572C50C3CC24E28E99880D61EF7D9C +CT=2D61F123E2479D56AE5C327A57F6A28B +PT=C6CD16E7A122D105EE398E6C7F15B4EF + +I=295 +KEY=F209D1ADE0869F674F6FEDCD3DB7D2EB6D9A3AB762EEF5E760A006611EFAC973 +CT=C6CD16E7A122D105EE398E6C7F15B4EF +PT=EDD6BBA5787DA2BF6A1ADF297DB98281 + +I=296 +KEY=302BEB9AA2ACB3594D7E50859C187294804C81121A9357580ABAD94863434BF2 +CT=EDD6BBA5787DA2BF6A1ADF297DB98281 +PT=4A51E54F4F81469A06F6001F2F32F4AC + +I=297 +KEY=3270FC87B4DC04FDD3F20C01407BE123CA1D645D551211C20C4CD9574C71BF5E +CT=4A51E54F4F81469A06F6001F2F32F4AC +PT=F7A2303EA59907BCC32AA4FC5A6DE448 + +I=298 +KEY=C85326465BF46A442BC1E544F9041C4A3DBF5463F08B167ECF667DAB161C5B16 +CT=F7A2303EA59907BCC32AA4FC5A6DE448 +PT=2274E43F9F8A7081DF74D5225EC28AD8 + +I=299 +KEY=A54E889A4D9FFBF993C53A9DD3B951391FCBB05C6F0166FF1012A88948DED1CE +CT=2274E43F9F8A7081DF74D5225EC28AD8 +PT=0C8358EC431313223B59126BDBB36571 + +I=300 +KEY=FA14699C20CFFE7DB68786E6117F95851348E8B02C1275DD2B4BBAE2936DB4BF +CT=0C8358EC431313223B59126BDBB36571 +PT=03237A81EEA2EAFBB5AC0B3E635CC1AC + +I=301 +KEY=B3744022A5397A735A4271261A2C96DF106B9231C2B09F269EE7B1DCF0317513 +CT=03237A81EEA2EAFBB5AC0B3E635CC1AC +PT=409EBF7DF31FD9557118B1B5CAB5EBE3 + +I=302 +KEY=8C7A22A934DCBC5E084E472DBAE4848350F52D4C31AF4673EFFF00693A849EF0 +CT=409EBF7DF31FD9557118B1B5CAB5EBE3 +PT=6CF5C9CF4A62C668B6481F7A12EE43DB + +I=303 +KEY=DB0497ED308C95BC9703265174B654D23C00E4837BCD801B59B71F13286ADD2B +CT=6CF5C9CF4A62C668B6481F7A12EE43DB +PT=D8A84E93CFF3EB9DC891333BDA5F3560 + +I=304 +KEY=7A88D30D4CC9AB8EFA76139B68F0028AE4A8AA10B43E6B8691262C28F235E84B +CT=D8A84E93CFF3EB9DC891333BDA5F3560 +PT=009E0C2454E321326336CC56D0660F91 + +I=305 +KEY=55A78B8839B395B552630641648DFCE5E436A634E0DD4AB4F210E07E2253E7DA +CT=009E0C2454E321326336CC56D0660F91 +PT=EBC89334F29560D9B9AEAE2F1D9DC65B + +I=306 +KEY=B41A907C82EDE32C6C1FD0DFED0A232D0FFE350012482A6D4BBE4E513FCE2181 +CT=EBC89334F29560D9B9AEAE2F1D9DC65B +PT=4DA63E94EBB4DA255800C9B25068E47E + +I=307 +KEY=3E428E8A77067008EFDE7BD6174B05B742580B94F9FCF04813BE87E36FA6C5FF +CT=4DA63E94EBB4DA255800C9B25068E47E +PT=6833E2CEFA8CF4B5B4607FA49D7B658D + +I=308 +KEY=39D17AE8C7232386F8339427E4A79AAC2A6BE95A037004FDA7DEF847F2DDA072 +CT=6833E2CEFA8CF4B5B4607FA49D7B658D +PT=41D882B653BEFEEEB9AE354F5ABCC058 + +I=309 +KEY=E8D52C97FA4149312A45D3EFE0A326086BB36BEC50CEFA131E70CD08A861602A +CT=41D882B653BEFEEEB9AE354F5ABCC058 +PT=D54A329BCF56B703BE0F02EE3AACB933 + +I=310 +KEY=D36FAED6CF436A491111890449BC3C66BEF959779F984D10A07FCFE692CDD919 +CT=D54A329BCF56B703BE0F02EE3AACB933 +PT=5FAAEB95E0F9D0C3C43BF725DADC9595 + +I=311 +KEY=9D7BCBB15816A0A941BBB787D2EEA155E153B2E27F619DD3644438C348114C8C +CT=5FAAEB95E0F9D0C3C43BF725DADC9595 +PT=BC699D5E82FD43B45A7B925E8C1A2F3C + +I=312 +KEY=F2EB78917ECAC2E77C19B892E846AE715D3A2FBCFD9CDE673E3FAA9DC40B63B0 +CT=BC699D5E82FD43B45A7B925E8C1A2F3C +PT=773D115B40F0E9EF780B2D10846FA684 + +I=313 +KEY=B10B9F0CECA554749EC178F3C63547DD2A073EE7BD6C37884634878D4064C534 +CT=773D115B40F0E9EF780B2D10846FA684 +PT=50095809CC96520EB8E3A66F499EE147 + +I=314 +KEY=E86E52AEB04DE0D3DC85A91E9B10D2677A0E66EE71FA6586FED721E209FA2473 +CT=50095809CC96520EB8E3A66F499EE147 +PT=6994CF8BA4C731CA33DAFE33D2A0BF94 + +I=315 +KEY=44C3C8A2F0F931926AC73F3E5351B114139AA965D53D544CCD0DDFD1DB5A9BE7 +CT=6994CF8BA4C731CA33DAFE33D2A0BF94 +PT=981902A8FD71DF8B67D52E6FC2813B90 + +I=316 +KEY=2D309D3D2603EC7E7B4EA626E9BDECFE8B83ABCD284C8BC7AAD8F1BE19DBA077 +CT=981902A8FD71DF8B67D52E6FC2813B90 +PT=35FA9A93AE142F562E62771991752B78 + +I=317 +KEY=E80939BCB4DB83768EBAD3CF2DD3F270BE79315E8658A49184BA86A788AE8B0F +CT=35FA9A93AE142F562E62771991752B78 +PT=A3651DBF8585004F0729AF4CA615C674 + +I=318 +KEY=BF1A4C57D4434FA59A2E45DB589AA16F1D1C2CE103DDA4DE839329EB2EBB4D7B +CT=A3651DBF8585004F0729AF4CA615C674 +PT=AF31F082CACEB768627B93A4D3E5349A + +I=319 +KEY=6EB47730BACAAB2207A3D12B0652B0CDB22DDC63C91313B6E1E8BA4FFD5E79E1 +CT=AF31F082CACEB768627B93A4D3E5349A +PT=57B75D2B640F45DB2D4A1F71F08545A5 + +I=320 +KEY=3EB0F3D31E648E260FE9F6FA8812ADD1E59A8148AD1C566DCCA2A53E0DDB3C44 +CT=57B75D2B640F45DB2D4A1F71F08545A5 +PT=A812DA38D7B82DF310366FA62FFD11E6 + +I=321 +KEY=0409A87F024E710C27E456CA170B60184D885B707AA47B9EDC94CA9822262DA2 +CT=A812DA38D7B82DF310366FA62FFD11E6 +PT=447F235914368F2BECD5FF98D1A34205 + +I=322 +KEY=7DE3A1E7234BF755908324E13DF413EB09F778296E92F4B530413500F3856FA7 +CT=447F235914368F2BECD5FF98D1A34205 +PT=5205860E4562B5CD6748EF89BF2791E9 + +I=323 +KEY=12EE9519335A2D827649D4EB047EB5255BF2FE272BF041785709DA894CA2FE4E +CT=5205860E4562B5CD6748EF89BF2791E9 +PT=30C0229AFDFF59E24426ACAD8D4AEFDB + +I=324 +KEY=78FF32A055D51E0A9D6E77D838AE72AD6B32DCBDD60F189A132F7624C1E81195 +CT=30C0229AFDFF59E24426ACAD8D4AEFDB +PT=FF467C6E0F82F5D2F9487DDBDB43EFB3 + +I=325 +KEY=6E49FA4CDEFC70619F739B488DD434969474A0D3D98DED48EA670BFF1AABFE26 +CT=FF467C6E0F82F5D2F9487DDBDB43EFB3 +PT=7E375B3D13871B09CA4D3357AC5EBB0E + +I=326 +KEY=90791666C996FF15EED1E20BAFB6B4B3EA43FBEECA0AF641202A38A8B6F54528 +CT=7E375B3D13871B09CA4D3357AC5EBB0E +PT=E64A319F6FBD96BD799760C4077F9713 + +I=327 +KEY=7F0D0CAB938585CF65726A6CB01DE8B00C09CA71A5B760FC59BD586CB18AD23B +CT=E64A319F6FBD96BD799760C4077F9713 +PT=1487C8488C675BD46FAF2EEC0BC7AE7E + +I=328 +KEY=7B429E6D59D4D65E16ED325F49E93D9C188E023929D03B2836127680BA4D7C45 +CT=1487C8488C675BD46FAF2EEC0BC7AE7E +PT=1F103E64A4F5239C9157E70487C50941 + +I=329 +KEY=AF20B02C3C5BD4E33E34359B86BBF2CF079E3C5D8D2518B4A74591843D887504 +CT=1F103E64A4F5239C9157E70487C50941 +PT=24C8481DD1A2245735597A18A2433E41 + +I=330 +KEY=E4F3CE6AFF9926837BAAB04C311F72A7235674405C873CE3921CEB9C9FCB4B45 +CT=24C8481DD1A2245735597A18A2433E41 +PT=3D9E715A686DE9AF8EE37AF54F82AA8A + +I=331 +KEY=A9BACBEC55AA453A83FF82CFDDB7F2F91EC8051A34EAD54C1CFF9169D049E1CF +CT=3D9E715A686DE9AF8EE37AF54F82AA8A +PT=B330735D9AB5B96501CDAF61A8EAD19F + +I=332 +KEY=5826BE9127DB557D401AF4DE6343F8AFADF87647AE5F6C291D323E0878A33050 +CT=B330735D9AB5B96501CDAF61A8EAD19F +PT=61AE40475EA11DBCC364F5377673CE37 + +I=333 +KEY=A8F0146E46A5391D0663380DF9F1FD6FCC563600F0FE7195DE56CB3F0ED0FE67 +CT=61AE40475EA11DBCC364F5377673CE37 +PT=525C1ED538B23D7CFA4A43114CF35BD4 + +I=334 +KEY=20F90A51E7A0BB9B88AE1DD28C8B484A9E0A28D5C84C4CE9241C882E4223A5B3 +CT=525C1ED538B23D7CFA4A43114CF35BD4 +PT=C2957E002E35236D455F53006495E4B7 + +I=335 +KEY=A71CC695B7AEB0D5148FA622536669385C9F56D5E6796F846143DB2E26B64104 +CT=C2957E002E35236D455F53006495E4B7 +PT=76F9C97A4B414E5DE532082BB12F5362 + +I=336 +KEY=617CF5726F26BD9A3B52FC0D902A97AD2A669FAFAD3821D98471D30597991266 +CT=76F9C97A4B414E5DE532082BB12F5362 +PT=F4D9E814D4C61B2FB1D7CDCCBAF14AA1 + +I=337 +KEY=D4DBBCC269A61933E4D63C3BDA5F522EDEBF77BB79FE3AF635A61EC92D6858C7 +CT=F4D9E814D4C61B2FB1D7CDCCBAF14AA1 +PT=6B51AF38B42F226D62474A97BD001FFF + +I=338 +KEY=512FAF06A5885D032A885EC030AF3C18B5EED883CDD1189B57E1545E90684738 +CT=6B51AF38B42F226D62474A97BD001FFF +PT=868C58D6B805CF8F9EB04A8BA123371A + +I=339 +KEY=BDD2CB78E9B554FC7FEEEC05D02309F23362805575D4D714C9511ED5314B7022 +CT=868C58D6B805CF8F9EB04A8BA123371A +PT=1752558A1F90975140CA41F68BE5333F + +I=340 +KEY=15CC46826BFD5B45ABAE9B0B2756D39C2430D5DF6A444045899B5F23BAAE431D +CT=1752558A1F90975140CA41F68BE5333F +PT=68801EAB4042E7390E64AA53C38C1D15 + +I=341 +KEY=DF5FB425C5B25E15EA717736D8ABE6644CB0CB742A06A77C87FFF57079225E08 +CT=68801EAB4042E7390E64AA53C38C1D15 +PT=02FE87211909D8954EC90EF53100F26D + +I=342 +KEY=CD73FCED5EBA6038DD8B8A000111BEF94E4E4C55330F7FE9C936FB854822AC65 +CT=02FE87211909D8954EC90EF53100F26D +PT=3A51FAFD22A2CC95B532023A37BBF0FE + +I=343 +KEY=EF890ED47D9F1581CC98C88F3BF7F88D741FB6A811ADB37C7C04F9BF7F995C9B +CT=3A51FAFD22A2CC95B532023A37BBF0FE +PT=D233A6BBC315BA5F4630AE7F99F77116 + +I=344 +KEY=AA9CA1A7DFA24E1936E49D34054F7749A62C1013D2B809233A3457C0E66E2D8D +CT=D233A6BBC315BA5F4630AE7F99F77116 +PT=E6B9619D7B0E1DF6CFE79FD51533406B + +I=345 +KEY=ADC4161B346687F98D4CB5B661662A8A4095718EA9B614D5F5D3C815F35D6DE6 +CT=E6B9619D7B0E1DF6CFE79FD51533406B +PT=A746D31BCB29F7512E3F6E5EFD14FDAD + +I=346 +KEY=9C1CA3776C9ED13D220453C8AEFA0ECDE7D3A295629FE384DBECA64B0E49904B +CT=A746D31BCB29F7512E3F6E5EFD14FDAD +PT=B2489A51878848EC37E6782FB2110122 + +I=347 +KEY=B64A5B45ABFDEC3EF8164FCEAE89919E559B38C4E517AB68EC0ADE64BC589169 +CT=B2489A51878848EC37E6782FB2110122 +PT=EF77F9367A063FDB874C9FC96983EAD1 + +I=348 +KEY=AEFFDEE2501961FEEB985134E2B651EDBAECC1F29F1194B36B4641ADD5DB7BB8 +CT=EF77F9367A063FDB874C9FC96983EAD1 +PT=4ECFF4DA51BB2BE1EF8E85C4BBE51C69 + +I=349 +KEY=6B28BA96CEB25B3862F413A2CBED4889F4233528CEAABF5284C8C4696E3E67D1 +CT=4ECFF4DA51BB2BE1EF8E85C4BBE51C69 +PT=0CAEAF484505A1AF13BB0ADCC665F91C + +I=350 +KEY=2062889724A47DD541F1F0A3FC8C5952F88D9A608BAF1EFD9773CEB5A85B9ECD +CT=0CAEAF484505A1AF13BB0ADCC665F91C +PT=6C75CA469CACCCE29CAE88202E02727C + +I=351 +KEY=C2115A8A6EE164B944A8C8128EBAB8E694F850261703D21F0BDD46958659ECB1 +CT=6C75CA469CACCCE29CAE88202E02727C +PT=567060CEFF3AEDDE8AB5823450E35967 + +I=352 +KEY=C3D2704E15936C6916073E234D0012CCC28830E8E8393FC18168C4A1D6BAB5D6 +CT=567060CEFF3AEDDE8AB5823450E35967 +PT=E04F927E409060080EC530D5C344CA24 + +I=353 +KEY=49173A9FB3283181B71264E3FB5591FA22C7A296A8A95FC98FADF47415FE7FF2 +CT=E04F927E409060080EC530D5C344CA24 +PT=4D473408396C17D4BA3DBB63B46E7727 + +I=354 +KEY=8BF3DDDC9217496E29F46E61233D62B66F80969E91C5481D35904F17A19008D5 +CT=4D473408396C17D4BA3DBB63B46E7727 +PT=BB6779933AC9E435C637CDA146A04284 + +I=355 +KEY=6ACA3C31248BFBB5BB9FD54C4B31BC21D4E7EF0DAB0CAC28F3A782B6E7304A51 +CT=BB6779933AC9E435C637CDA146A04284 +PT=5C2129A55114540ED68591C60E45D6CF + +I=356 +KEY=1A270DAD402DC752332671216A6C3BFF88C6C6A8FA18F82625221370E9759C9E +CT=5C2129A55114540ED68591C60E45D6CF +PT=57790B87F69BF1C007E563A82987EEAE + +I=357 +KEY=6E39E75268AC2C51ABE11CE3CE16CAF3DFBFCD2F0C8309E622C770D8C0F27230 +CT=57790B87F69BF1C007E563A82987EEAE +PT=58790B192C8B90B76F34990E28A6689A + +I=358 +KEY=2367A67114D722A79F9434B5A418BEEB87C6C636200899514DF3E9D6E8541AAA +CT=58790B192C8B90B76F34990E28A6689A +PT=599CA8B58EFE301A87CE72540CCB4067 + +I=359 +KEY=A4CE195518F7E36D7E0D5C9666802411DE5A6E83AEF6A94BCA3D9B82E49F5ACD +CT=599CA8B58EFE301A87CE72540CCB4067 +PT=4483131C7E03089F898166A5B3E85E3A + +I=360 +KEY=73C5204211D3648DAAF5FE071186C0E99AD97D9FD0F5A1D443BCFD27577704F7 +CT=4483131C7E03089F898166A5B3E85E3A +PT=DBF64C5A0897B343BAF7047A6C564D02 + +I=361 +KEY=1A3831AFF223BB2FE79C8EF8845E553C412F31C5D8621297F94BF95D3B2149F5 +CT=DBF64C5A0897B343BAF7047A6C564D02 +PT=B24420DA45E3620B619978CB09F1860C + +I=362 +KEY=31EF243EF87C32148751F8F299151042F36B111F9D81709C98D2819632D0CFF9 +CT=B24420DA45E3620B619978CB09F1860C +PT=12B466EF6AE6F28AF78AC184DB8B3C83 + +I=363 +KEY=9E935E6F5D76BEE2E639F2880C8352EEE1DF77F0F76782166F584012E95BF37A +CT=12B466EF6AE6F28AF78AC184DB8B3C83 +PT=518E89A35CF55D591DE8BB924D8F96E7 + +I=364 +KEY=C6398957838B02B5948A95DCBFBF2813B051FE53AB92DF4F72B0FB80A4D4659D +CT=518E89A35CF55D591DE8BB924D8F96E7 +PT=1FDF7FE52BD46EF54F1F7A6242B04BD8 + +I=365 +KEY=5764E84D9000518C185717581E0D70E5AF8E81B68046B1BA3DAF81E2E6642E45 +CT=1FDF7FE52BD46EF54F1F7A6242B04BD8 +PT=2C68E67C37B50056E80DC09B9ED84AA8 + +I=366 +KEY=5F8CB51BF30B954B4AC09620B0A20FCA83E667CAB7F3B1ECD5A2417978BC64ED +CT=2C68E67C37B50056E80DC09B9ED84AA8 +PT=14CC2D821B03BE21355A779B9066BE41 + +I=367 +KEY=50B32E6D62EE3B8CE2DD5797BA70D8D2972A4A48ACF00FCDE0F836E2E8DADAAC +CT=14CC2D821B03BE21355A779B9066BE41 +PT=BB09D339888C27294E73326E64AC3B21 + +I=368 +KEY=E1B2199CAF1C3FA78E973ACF5C3AC8702C239971247C28E4AE8B048C8C76E18D +CT=BB09D339888C27294E73326E64AC3B21 +PT=BCFBD8255802CC8233AEA86E49089328 + +I=369 +KEY=3403D2498A4562E73734D065E9B44AD890D841547C7EE4669D25ACE2C57E72A5 +CT=BCFBD8255802CC8233AEA86E49089328 +PT=5A919AC72F12DB1FAB8E4876FBA8842B + +I=370 +KEY=B979FA15F93E5ACA1F6E452C9053751BCA49DB93536C3F7936ABE4943ED6F68E +CT=5A919AC72F12DB1FAB8E4876FBA8842B +PT=BDB03BD29FD3828AF1AE8C729F37F88A + +I=371 +KEY=A8CDF9FE3C0227A9107C700C404AE39777F9E041CCBFBDF3C70568E6A1E10E04 +CT=BDB03BD29FD3828AF1AE8C729F37F88A +PT=0AAC43CE316476F3A532D44B4DFBF4B8 + +I=372 +KEY=B4D497FBD5DE2CA68FF60C701E208A257D55A38FFDDBCB006237BCADEC1AFABC +CT=0AAC43CE316476F3A532D44B4DFBF4B8 +PT=853A5EE7CB3C4BB3F0120BB2CFFB4436 + +I=373 +KEY=A019DCC09A4CAAA3772BF4C54C8828E9F86FFD6836E780B39225B71F23E1BE8A +CT=853A5EE7CB3C4BB3F0120BB2CFFB4436 +PT=B525599C918446AF4EA9F6965F3971EA + +I=374 +KEY=238BF8B851B0864F9BEC8E242B7795D14D4AA4F4A763C61CDC8C41897CD8CF60 +CT=B525599C918446AF4EA9F6965F3971EA +PT=A8377EC293D41F74A0A2DB66BA7D3D2F + +I=375 +KEY=AF9E313988F294AE6A8155BC76F2514BE57DDA3634B7D9687C2E9AEFC6A5F24F +CT=A8377EC293D41F74A0A2DB66BA7D3D2F +PT=301BD4D318101A02166EBC23DED9C12D + +I=376 +KEY=3B6186F7ACE8E9B022DDE0ECF5D808D3D5660EE52CA7C36A6A4026CC187C3362 +CT=301BD4D318101A02166EBC23DED9C12D +PT=05BD0686BE53B94FB1B42AE407BE081C + +I=377 +KEY=EADED20A0F405D9E3AAE404FB074162ED0DB086392F47A25DBF40C281FC23B7E +CT=05BD0686BE53B94FB1B42AE407BE081C +PT=7A3AF681F2043806EDB761F65D9A6C3A + +I=378 +KEY=AA6F474F5F5FF513FC992E4232061B75AAE1FEE260F0422336436DDE42585744 +CT=7A3AF681F2043806EDB761F65D9A6C3A +PT=3C297DE35CCF4E6E0A800B9A3EE37C95 + +I=379 +KEY=68BFE30863F135A09B81BE2800CBBC3796C883013C3F0C4D3CC366447CBB2BD1 +CT=3C297DE35CCF4E6E0A800B9A3EE37C95 +PT=5F8AAC15C74CC7EA87A1AC185103A9D7 + +I=380 +KEY=9093DEBE66D714180BEB8FE51C4807ADC9422F14FB73CBA7BB62CA5C2DB88206 +CT=5F8AAC15C74CC7EA87A1AC185103A9D7 +PT=083AF3AF30961FD5A077F5564D55E9E9 + +I=381 +KEY=A1E1049159A94DF638092C90F7707CD7C178DCBBCBE5D4721B153F0A60ED6BEF +CT=083AF3AF30961FD5A077F5564D55E9E9 +PT=89BEFF6AB40B18ECD9413446E848253A + +I=382 +KEY=7C506732A8863DB1BF61EFC710F22D2348C623D17FEECC9EC2540B4C88A54ED5 +CT=89BEFF6AB40B18ECD9413446E848253A +PT=095B2C04636C9C5BF9735BCA21211EAA + +I=383 +KEY=7283413612863BA1E1B5AE93DF1318F5419D0FD51C8250C53B275086A984507F +CT=095B2C04636C9C5BF9735BCA21211EAA +PT=E95DB3DB1E3A478C8A31212B28E0E7BC + +I=384 +KEY=BE861CED86D725162D938727D7AEFC1BA8C0BC0E02B81749B11671AD8164B7C3 +CT=E95DB3DB1E3A478C8A31212B28E0E7BC +PT=9927F1D7EF0631500E1DF058932BF320 + +I=385 +KEY=45AA89CBCE192CEEC22BF5F33DDE0E8D31E74DD9EDBE2619BF0B81F5124F44E3 +CT=9927F1D7EF0631500E1DF058932BF320 +PT=4B1147179F2AF27E5C9DBB7F01CC56A8 + +I=386 +KEY=B08A08DABC52884E9EBB310236815BFE7AF60ACE7294D467E3963A8A1383124B +CT=4B1147179F2AF27E5C9DBB7F01CC56A8 +PT=E9752A7D47734DACAC6E74A1A3EC4956 + +I=387 +KEY=34B4424CE75A4A1BCE9E6C825F5F0DC1938320B335E799CB4FF84E2BB06F5B1D +CT=E9752A7D47734DACAC6E74A1A3EC4956 +PT=AB2D652BCEE42804C5155980DA02CECC + +I=388 +KEY=F9954BB1A793565A79AA2B9DF408A34A38AE4598FB03B1CF8AED17AB6A6D95D1 +CT=AB2D652BCEE42804C5155980DA02CECC +PT=3C6651362E89F6C6B28C04CA22F110EC + +I=389 +KEY=9548931715FB259E318020E30D68165604C814AED58A470938611361489C853D +CT=3C6651362E89F6C6B28C04CA22F110EC +PT=15598364698838475AB96F95CFCF3342 + +I=390 +KEY=1CDB0706417BBE66B559237109353221119197CABC027F4E62D87CF48753B67F +CT=15598364698838475AB96F95CFCF3342 +PT=D8B3BB941893206E1CA6654B81F403E4 + +I=391 +KEY=8C4AD897B595252B0987673F45EE73F2C9222C5EA4915F207E7E19BF06A7B59B +CT=D8B3BB941893206E1CA6654B81F403E4 +PT=ECE471CC2FF45C26C7143C41702F90D2 + +I=392 +KEY=A6D3DF3279B7405256C0D22DA240524125C65D928B650306B96A25FE76882549 +CT=ECE471CC2FF45C26C7143C41702F90D2 +PT=AB387AE5A5FC892C311D97C22467940D + +I=393 +KEY=36F250F7C3906C7E0020055422CDB8B28EFE27772E998A2A8877B23C52EFB144 +CT=AB387AE5A5FC892C311D97C22467940D +PT=FF48C2C77D5F52DF27C4060DF7F895D7 + +I=394 +KEY=4FF045275860B943EDE02C802F34B71B71B6E5B053C6D8F5AFB3B431A5172493 +CT=FF48C2C77D5F52DF27C4060DF7F895D7 +PT=221BC444E2A6A7F8DE9DA16AB01EB2AC + +I=395 +KEY=E15B4E0E242FBABF1D47E9DBE6D0660253AD21F4B1607F0D712E155B1509963F +CT=221BC444E2A6A7F8DE9DA16AB01EB2AC +PT=DE252D19973ABD9F182049D39455784B + +I=396 +KEY=401023A611A3133C895A3684AB3E7C9D8D880CED265AC292690E5C88815CEE74 +CT=DE252D19973ABD9F182049D39455784B +PT=843163BD101982EE948039915C8F60D8 + +I=397 +KEY=B9DDF52C271F143E523532E45E6F368D09B96F503643407CFD8E6519DDD38EAC +CT=843163BD101982EE948039915C8F60D8 +PT=6FD9D36B751854C3417F29E8F3B654D9 + +I=398 +KEY=AC7F45F8630CE02525F9F4941B4E13206660BC3B435B14BFBCF14CF12E65DA75 +CT=6FD9D36B751854C3417F29E8F3B654D9 +PT=E1268BA8A1473DEDE6CA64DDF2C8B805 + +I=399 +KEY=DE11FF0A429E1CD3DE016DAC294F771187463793E21C29525A3B282CDCAD6270 +CT=E1268BA8A1473DEDE6CA64DDF2C8B805 +PT=4DE0C6DF7CB1697284604D60271BC59A + +=========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_e_m.txt b/src/lib/crypto/crypto_tests/test/ecb_e_m.txt new file mode 100644 index 000000000..40a95e7ca --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_e_m.txt @@ -0,0 +1,6024 @@ + +========================= + +FILENAME: "ecb_e_m.txt" + +Electronic Codebook (ECB) Mode - ENCRYPTION +Monte Carlo Test + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========================= + +KEYSIZE=128 + +I=0 +KEY=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=C34C052CC0DA8D73451AFE5F03BE297F + +I=1 +KEY=C34C052CC0DA8D73451AFE5F03BE297F +PT=C34C052CC0DA8D73451AFE5F03BE297F +CT=0AC15A9AFBB24D54AD99E987208272E2 + +I=2 +KEY=C98D5FB63B68C027E88317D8233C5B9D +PT=0AC15A9AFBB24D54AD99E987208272E2 +CT=A3D43BFFA65D0E80092F67A314857870 + +I=3 +KEY=6A5964499D35CEA7E1AC707B37B923ED +PT=A3D43BFFA65D0E80092F67A314857870 +CT=355F697E8B868B65B25A04E18D782AFA + +I=4 +KEY=5F060D3716B345C253F6749ABAC10917 +PT=355F697E8B868B65B25A04E18D782AFA +CT=ACC863637868E3E068D2FD6E3508454A + +I=5 +KEY=F3CE6E546EDBA6223B2489F48FC94C5D +PT=ACC863637868E3E068D2FD6E3508454A +CT=665F9F12A824F3D52A1C71D6210D5470 + +I=6 +KEY=9591F146C6FF55F71138F822AEC4182D +PT=665F9F12A824F3D52A1C71D6210D5470 +CT=9B27361DBC8E5618E8E98036F5AD40B0 + +I=7 +KEY=0EB6C75B7A7103EFF9D178145B69589D +PT=9B27361DBC8E5618E8E98036F5AD40B0 +CT=21D9BD7EBA0163A293F2D56C316CBD36 + +I=8 +KEY=2F6F7A25C070604D6A23AD786A05E5AB +PT=21D9BD7EBA0163A293F2D56C316CBD36 +CT=3E8037A9988E28FF81F2A7154ACD91BE + +I=9 +KEY=11EF4D8C58FE48B2EBD10A6D20C87415 +PT=3E8037A9988E28FF81F2A7154ACD91BE +CT=014EE14F1AA8C0D4A47A72F197F4DCB0 + +I=10 +KEY=10A1ACC3425688664FAB789CB73CA8A5 +PT=014EE14F1AA8C0D4A47A72F197F4DCB0 +CT=0B542083DBC03A96AA00C1A5AE58C9F1 + +I=11 +KEY=1BF58C409996B2F0E5ABB93919646154 +PT=0B542083DBC03A96AA00C1A5AE58C9F1 +CT=7340B59E1E3BB9211CE167F2DEBDB090 + +I=12 +KEY=68B539DE87AD0BD1F94ADECBC7D9D1C4 +PT=7340B59E1E3BB9211CE167F2DEBDB090 +CT=67E05F75135BA834CBCDCFF068541BBE + +I=13 +KEY=0F5566AB94F6A3E53287113BAF8DCA7A +PT=67E05F75135BA834CBCDCFF068541BBE +CT=8BD5553105C3507B0A07FDB351B25B4F + +I=14 +KEY=8480339A9135F39E3880EC88FE3F9135 +PT=8BD5553105C3507B0A07FDB351B25B4F +CT=649F061F95C0A79BD3066EFFE5B27CAB + +I=15 +KEY=E01F358504F55405EB8682771B8DED9E +PT=649F061F95C0A79BD3066EFFE5B27CAB +CT=697F4EB0603340E90FE91C27B6D9CEAA + +I=16 +KEY=89607B3564C614ECE46F9E50AD542334 +PT=697F4EB0603340E90FE91C27B6D9CEAA +CT=A8CBBA624FA28A7F8637324E1E20CB9C + +I=17 +KEY=21ABC1572B649E936258AC1EB374E8A8 +PT=A8CBBA624FA28A7F8637324E1E20CB9C +CT=73B852132DE715872A40EB25B1133C00 + +I=18 +KEY=5213934406838B144818473B0267D4A8 +PT=73B852132DE715872A40EB25B1133C00 +CT=1328A1C2F386BB3E4D4BE0942B8249A2 + +I=19 +KEY=413B3286F505302A0553A7AF29E59D0A +PT=1328A1C2F386BB3E4D4BE0942B8249A2 +CT=06F72DEA0067F543AA8C342CC9191745 + +I=20 +KEY=47CC1F6CF562C569AFDF9383E0FC8A4F +PT=06F72DEA0067F543AA8C342CC9191745 +CT=110B6011B60C94382C2321BFCAA62A1C + +I=21 +KEY=56C77F7D436E515183FCB23C2A5AA053 +PT=110B6011B60C94382C2321BFCAA62A1C +CT=80C90EF6794361DFA400EFE922F45A59 + +I=22 +KEY=D60E718B3A2D308E27FC5DD508AEFA0A +PT=80C90EF6794361DFA400EFE922F45A59 +CT=F8DF0AC62EE229245DB1F300F2E5B143 + +I=23 +KEY=2ED17B4D14CF19AA7A4DAED5FA4B4B49 +PT=F8DF0AC62EE229245DB1F300F2E5B143 +CT=45390146539E773B502E84A0C29AD5B0 + +I=24 +KEY=6BE87A0B47516E912A632A7538D19EF9 +PT=45390146539E773B502E84A0C29AD5B0 +CT=B07721757865838BDFC2329998B5174F + +I=25 +KEY=DB9F5B7E3F34ED1AF5A118ECA06489B6 +PT=B07721757865838BDFC2329998B5174F +CT=B83F3B7A9FFBA35DF1D6661A0F8AD0F4 + +I=26 +KEY=63A06004A0CF4E4704777EF6AFEE5942 +PT=B83F3B7A9FFBA35DF1D6661A0F8AD0F4 +CT=7098C99B1B245DE623B78F1B07D08EBE + +I=27 +KEY=1338A99FBBEB13A127C0F1EDA83ED7FC +PT=7098C99B1B245DE623B78F1B07D08EBE +CT=58A095EF9268B923920238486D0B13E1 + +I=28 +KEY=4B983C702983AA82B5C2C9A5C535C41D +PT=58A095EF9268B923920238486D0B13E1 +CT=97DD8052CE0D87715075A42942C120ED + +I=29 +KEY=DC45BC22E78E2DF3E5B76D8C87F4E4F0 +PT=97DD8052CE0D87715075A42942C120ED +CT=F480B5A67DAFCB9524DC21453AF66FAF + +I=30 +KEY=28C509849A21E666C16B4CC9BD028B5F +PT=F480B5A67DAFCB9524DC21453AF66FAF +CT=71CE64CE8C98367F2F12E6851AC70FF3 + +I=31 +KEY=590B6D4A16B9D019EE79AA4CA7C584AC +PT=71CE64CE8C98367F2F12E6851AC70FF3 +CT=81C3AA693CC1C647399701DA17D5FDD5 + +I=32 +KEY=D8C8C7232A78165ED7EEAB96B0107979 +PT=81C3AA693CC1C647399701DA17D5FDD5 +CT=5BB93103F6DDF0415592EE2217704D41 + +I=33 +KEY=8371F620DCA5E61F827C45B4A7603438 +PT=5BB93103F6DDF0415592EE2217704D41 +CT=87B8B17FF9079829AB5C47E055FFCEE3 + +I=34 +KEY=04C9475F25A27E3629200254F29FFADB +PT=87B8B17FF9079829AB5C47E055FFCEE3 +CT=615FE7D34154F42D6CE9D647904295E0 + +I=35 +KEY=6596A08C64F68A1B45C9D41362DD6F3B +PT=615FE7D34154F42D6CE9D647904295E0 +CT=A60C213CDF9B54DF9041948F98585CE2 + +I=36 +KEY=C39A81B0BB6DDEC4D588409CFA8533D9 +PT=A60C213CDF9B54DF9041948F98585CE2 +CT=FB126C61071EB9167B6FF28E5244E624 + +I=37 +KEY=3888EDD1BC7367D2AEE7B212A8C1D5FD +PT=FB126C61071EB9167B6FF28E5244E624 +CT=8A79CE45F030B91B53D1591D10FF1B02 + +I=38 +KEY=B2F123944C43DEC9FD36EB0FB83ECEFF +PT=8A79CE45F030B91B53D1591D10FF1B02 +CT=BE20190BAE15162F43E93F67A580192B + +I=39 +KEY=0CD13A9FE256C8E6BEDFD4681DBED7D4 +PT=BE20190BAE15162F43E93F67A580192B +CT=0107D3E3511F91545D02B498A9E3C318 + +I=40 +KEY=0DD6E97CB34959B2E3DD60F0B45D14CC +PT=0107D3E3511F91545D02B498A9E3C318 +CT=2A832A1205D6B5FCF1B20126EE59DD9D + +I=41 +KEY=2755C36EB69FEC4E126F61D65A04C951 +PT=2A832A1205D6B5FCF1B20126EE59DD9D +CT=F362782F550DCBFC49CEF15C3A0ABA7A + +I=42 +KEY=D437BB41E39227B25BA1908A600E732B +PT=F362782F550DCBFC49CEF15C3A0ABA7A +CT=51A8A0C6434A3BE8C939B6DDD56EAA53 + +I=43 +KEY=859F1B87A0D81C5A92982657B560D978 +PT=51A8A0C6434A3BE8C939B6DDD56EAA53 +CT=89D3F1086F3D96C18A76C61F25A52221 + +I=44 +KEY=0C4CEA8FCFE58A9B18EEE04890C5FB59 +PT=89D3F1086F3D96C18A76C61F25A52221 +CT=A5F7E0A5FA70DDB718EF970F50EB7B86 + +I=45 +KEY=A9BB0A2A3595572C00017747C02E80DF +PT=A5F7E0A5FA70DDB718EF970F50EB7B86 +CT=7BB64305538E71AFBF993B5BD23D5523 + +I=46 +KEY=D20D492F661B2683BF984C1C1213D5FC +PT=7BB64305538E71AFBF993B5BD23D5523 +CT=E6BF8F5338568603EC668C6D15331FA5 + +I=47 +KEY=34B2C67C5E4DA08053FEC0710720CA59 +PT=E6BF8F5338568603EC668C6D15331FA5 +CT=27644649FCDF52085CDB20E3DEE1E2F6 + +I=48 +KEY=13D68035A292F2880F25E092D9C128AF +PT=27644649FCDF52085CDB20E3DEE1E2F6 +CT=7629AACAED7F49938373C83410AD1744 + +I=49 +KEY=65FF2AFF4FEDBB1B8C5628A6C96C3FEB +PT=7629AACAED7F49938373C83410AD1744 +CT=D440FC6E9A65819934FAF8641C05A17C + +I=50 +KEY=B1BFD691D5883A82B8ACD0C2D5699E97 +PT=D440FC6E9A65819934FAF8641C05A17C +CT=FBEE29FEFD725E1852B58502D3076C46 + +I=51 +KEY=4A51FF6F28FA649AEA1955C0066EF2D1 +PT=FBEE29FEFD725E1852B58502D3076C46 +CT=E345A47A6C89BE4350CDD8C9D319529D + +I=52 +KEY=A9145B154473DAD9BAD48D09D577A04C +PT=E345A47A6C89BE4350CDD8C9D319529D +CT=1C6A7CBAF21E483B6025DB6DA573C5C6 + +I=53 +KEY=B57E27AFB66D92E2DAF156647004658A +PT=1C6A7CBAF21E483B6025DB6DA573C5C6 +CT=2B05F4D8EB50D851A013798753B65A1F + +I=54 +KEY=9E7BD3775D3D4AB37AE22FE323B23F95 +PT=2B05F4D8EB50D851A013798753B65A1F +CT=CEFE04978228A0DBCCE9EE42B21DD34A + +I=55 +KEY=5085D7E0DF15EA68B60BC1A191AFECDF +PT=CEFE04978228A0DBCCE9EE42B21DD34A +CT=7B41DF8CD85B61EA800536648DBDA2AE + +I=56 +KEY=2BC4086C074E8B82360EF7C51C124E71 +PT=7B41DF8CD85B61EA800536648DBDA2AE +CT=08688872151D18CD19E2FC14B9E4C962 + +I=57 +KEY=23AC801E1253934F2FEC0BD1A5F68713 +PT=08688872151D18CD19E2FC14B9E4C962 +CT=F08C88BE5E748C4D82D2E7D7813A33AF + +I=58 +KEY=D32008A04C271F02AD3EEC0624CCB4BC +PT=F08C88BE5E748C4D82D2E7D7813A33AF +CT=319B7D38AB1AC3AEA0A0490C341F4F20 + +I=59 +KEY=E2BB7598E73DDCAC0D9EA50A10D3FB9C +PT=319B7D38AB1AC3AEA0A0490C341F4F20 +CT=EE70748772E8D88B2717D78F31F0EA86 + +I=60 +KEY=0CCB011F95D504272A8972852123111A +PT=EE70748772E8D88B2717D78F31F0EA86 +CT=A3A5DC791EA1BBB9D7A2B292572DFD5C + +I=61 +KEY=AF6EDD668B74BF9EFD2BC017760EEC46 +PT=A3A5DC791EA1BBB9D7A2B292572DFD5C +CT=255692B06B3A18498BCAF99F7B3EE374 + +I=62 +KEY=8A384FD6E04EA7D776E139880D300F32 +PT=255692B06B3A18498BCAF99F7B3EE374 +CT=500E492232891293875F50279B5DC5C3 + +I=63 +KEY=DA3606F4D2C7B544F1BE69AF966DCAF1 +PT=500E492232891293875F50279B5DC5C3 +CT=57C3FCCE9B5BA3BC19BBF7BB9B37A9AC + +I=64 +KEY=8DF5FA3A499C16F8E8059E140D5A635D +PT=57C3FCCE9B5BA3BC19BBF7BB9B37A9AC +CT=BF06FDFDB687C8B24FB0E2A6D6D37EA5 + +I=65 +KEY=32F307C7FF1BDE4AA7B57CB2DB891DF8 +PT=BF06FDFDB687C8B24FB0E2A6D6D37EA5 +CT=6D459ED545CF3C6FF2746411CD9B3E31 + +I=66 +KEY=5FB69912BAD4E22555C118A3161223C9 +PT=6D459ED545CF3C6FF2746411CD9B3E31 +CT=C74E0704A9D9EC2D90F75B34FC95CD32 + +I=67 +KEY=98F89E16130D0E08C5364397EA87EEFB +PT=C74E0704A9D9EC2D90F75B34FC95CD32 +CT=0453D4FBC2D7F8E0AD0AD90F98D1EC5C + +I=68 +KEY=9CAB4AEDD1DAF6E8683C9A98725602A7 +PT=0453D4FBC2D7F8E0AD0AD90F98D1EC5C +CT=5BBA052D6C39DC1E9553B7646CB7344B + +I=69 +KEY=C7114FC0BDE32AF6FD6F2DFC1EE136EC +PT=5BBA052D6C39DC1E9553B7646CB7344B +CT=9870FFE04984426501ECB55FFBB363CB + +I=70 +KEY=5F61B020F4676893FC8398A3E5525527 +PT=9870FFE04984426501ECB55FFBB363CB +CT=1363D65F7C943FC4512E41A717D3704D + +I=71 +KEY=4C02667F88F35757ADADD904F281256A +PT=1363D65F7C943FC4512E41A717D3704D +CT=664762AED6BC5FB74A646A928837FC83 + +I=72 +KEY=2A4504D15E4F08E0E7C9B3967AB6D9E9 +PT=664762AED6BC5FB74A646A928837FC83 +CT=655CB6BAB4B0532273689E4DC9234C42 + +I=73 +KEY=4F19B26BEAFF5BC294A12DDBB39595AB +PT=655CB6BAB4B0532273689E4DC9234C42 +CT=E8AAE0E0B9D2BE6259AEBC478DC90FD9 + +I=74 +KEY=A7B3528B532DE5A0CD0F919C3E5C9A72 +PT=E8AAE0E0B9D2BE6259AEBC478DC90FD9 +CT=FECACAF43DD920FA3078256C6A587741 + +I=75 +KEY=5979987F6EF4C55AFD77B4F05404ED33 +PT=FECACAF43DD920FA3078256C6A587741 +CT=11F3F56529B8B172D87A4C86BB90F3B6 + +I=76 +KEY=488A6D1A474C7428250DF876EF941E85 +PT=11F3F56529B8B172D87A4C86BB90F3B6 +CT=B44340D44F1ABA37CB09FE57FC771A9E + +I=77 +KEY=FCC92DCE0856CE1FEE04062113E3041B +PT=B44340D44F1ABA37CB09FE57FC771A9E +CT=C49F12B88C34A0D696FE283B01D5710C + +I=78 +KEY=38563F7684626EC978FA2E1A12367517 +PT=C49F12B88C34A0D696FE283B01D5710C +CT=58D6D2D36C14DDBDA7604AB740918D76 + +I=79 +KEY=6080EDA5E876B374DF9A64AD52A7F861 +PT=58D6D2D36C14DDBDA7604AB740918D76 +CT=21F735F77B0EAD7551CE06900A568EB3 + +I=80 +KEY=4177D85293781E018E54623D58F176D2 +PT=21F735F77B0EAD7551CE06900A568EB3 +CT=FE2E9BDB393BF6D1BBF108B8AC3B6818 + +I=81 +KEY=BF594389AA43E8D035A56A85F4CA1ECA +PT=FE2E9BDB393BF6D1BBF108B8AC3B6818 +CT=FECFCD3722C6C8E6608258341220E739 + +I=82 +KEY=41968EBE88852036552732B1E6EAF9F3 +PT=FECFCD3722C6C8E6608258341220E739 +CT=10A8BB234C9D9A22DEC7887E931F85BD + +I=83 +KEY=513E359DC418BA148BE0BACF75F57C4E +PT=10A8BB234C9D9A22DEC7887E931F85BD +CT=767EB7DBA70BC7094DF7A5BDD233EB5C + +I=84 +KEY=2740824663137D1DC6171F72A7C69712 +PT=767EB7DBA70BC7094DF7A5BDD233EB5C +CT=FCD7184F3F4DB7CA182225B9A358209D + +I=85 +KEY=DB979A095C5ECAD7DE353ACB049EB78F +PT=FCD7184F3F4DB7CA182225B9A358209D +CT=A5CD025AEBF0380EAC66EF034806179F + +I=86 +KEY=7E5A9853B7AEF2D97253D5C84C98A010 +PT=A5CD025AEBF0380EAC66EF034806179F +CT=FE46F4A72C7031FE8D900152CD20B95F + +I=87 +KEY=801C6CF49BDEC327FFC3D49A81B8194F +PT=FE46F4A72C7031FE8D900152CD20B95F +CT=CF1ACB502A4B608C61364891E34F93A0 + +I=88 +KEY=4F06A7A4B195A3AB9EF59C0B62F78AEF +PT=CF1ACB502A4B608C61364891E34F93A0 +CT=95AB1367FF6C03DE87FFA282A3E52200 + +I=89 +KEY=DAADB4C34EF9A075190A3E89C112A8EF +PT=95AB1367FF6C03DE87FFA282A3E52200 +CT=762B6393252B347F55AF3E4CA16F2FC9 + +I=90 +KEY=AC86D7506BD2940A4CA500C5607D8726 +PT=762B6393252B347F55AF3E4CA16F2FC9 +CT=A63491A22E23AD921ADAB9CC0DA20521 + +I=91 +KEY=0AB246F245F13998567FB9096DDF8207 +PT=A63491A22E23AD921ADAB9CC0DA20521 +CT=C0852A5E7CEEAFB5FA87C440B598BFD6 + +I=92 +KEY=CA376CAC391F962DACF87D49D8473DD1 +PT=C0852A5E7CEEAFB5FA87C440B598BFD6 +CT=485747C528B08033169E991E98E4CBB5 + +I=93 +KEY=82602B6911AF161EBA66E45740A3F664 +PT=485747C528B08033169E991E98E4CBB5 +CT=415B95B222161A8C9ED20CF99C26848C + +I=94 +KEY=C33BBEDB33B90C9224B4E8AEDC8572E8 +PT=415B95B222161A8C9ED20CF99C26848C +CT=7E673E6348C38CD40C9B11F4C9F3E3A0 + +I=95 +KEY=BD5C80B87B7A8046282FF95A15769148 +PT=7E673E6348C38CD40C9B11F4C9F3E3A0 +CT=B88508E55279AFF0D848C38DBEC76B2C + +I=96 +KEY=05D9885D29032FB6F0673AD7ABB1FA64 +PT=B88508E55279AFF0D848C38DBEC76B2C +CT=3902B5DC34E815BA50A53DB9C8FFAA92 + +I=97 +KEY=3CDB3D811DEB3A0CA0C2076E634E50F6 +PT=3902B5DC34E815BA50A53DB9C8FFAA92 +CT=FEF57F51360547EA6B88085B8656A1D0 + +I=98 +KEY=C22E42D02BEE7DE6CB4A0F35E518F126 +PT=FEF57F51360547EA6B88085B8656A1D0 +CT=94D052E1F097106A5B714ADD0EF79E64 + +I=99 +KEY=56FE1031DB796D8C903B45E8EBEF6F42 +PT=94D052E1F097106A5B714ADD0EF79E64 +CT=7FD3EF411360E5270F63A8BACCCC74C0 + +I=100 +KEY=292DFF70C81988AB9F58ED5227231B82 +PT=7FD3EF411360E5270F63A8BACCCC74C0 +CT=F572692DE6EFBC2309B947D1A75BE009 + +I=101 +KEY=DC5F965D2EF6348896E1AA838078FB8B +PT=F572692DE6EFBC2309B947D1A75BE009 +CT=BFD3233C513448C283C05311B8085B5C + +I=102 +KEY=638CB5617FC27C4A1521F9923870A0D7 +PT=BFD3233C513448C283C05311B8085B5C +CT=078739F570071AA1A96A1F00F31E05FD + +I=103 +KEY=640B8C940FC566EBBC4BE692CB6EA52A +PT=078739F570071AA1A96A1F00F31E05FD +CT=947CA236277CDD0AC13C194B99E8CF16 + +I=104 +KEY=F0772EA228B9BBE17D77FFD952866A3C +PT=947CA236277CDD0AC13C194B99E8CF16 +CT=34DE5F2D355BC4ACE54AD0CB8C008CB8 + +I=105 +KEY=C4A9718F1DE27F4D983D2F12DE86E684 +PT=34DE5F2D355BC4ACE54AD0CB8C008CB8 +CT=E5729CBD84C89B914F35412F902A2CA3 + +I=106 +KEY=21DBED32992AE4DCD7086E3D4EACCA27 +PT=E5729CBD84C89B914F35412F902A2CA3 +CT=EB326D6ABAFC93EADBEC9B05CE4AAF0C + +I=107 +KEY=CAE9805823D677360CE4F53880E6652B +PT=EB326D6ABAFC93EADBEC9B05CE4AAF0C +CT=9F088089F8D8E8E28A9A2A1FF50F2ED3 + +I=108 +KEY=55E100D1DB0E9FD4867EDF2775E94BF8 +PT=9F088089F8D8E8E28A9A2A1FF50F2ED3 +CT=C8D2BF3D6ADB57F478656D4808142160 + +I=109 +KEY=9D33BFECB1D5C820FE1BB26F7DFD6A98 +PT=C8D2BF3D6ADB57F478656D4808142160 +CT=062016811215B9DBDD3C794A15FBEBBA + +I=110 +KEY=9B13A96DA3C071FB2327CB2568068122 +PT=062016811215B9DBDD3C794A15FBEBBA +CT=71F9F04E9AED1C302E5ED2AD36B5C7F5 + +I=111 +KEY=EAEA5923392D6DCB0D7919885EB346D7 +PT=71F9F04E9AED1C302E5ED2AD36B5C7F5 +CT=253982568F6C3FDFDE173E46B614989C + +I=112 +KEY=CFD3DB75B6415214D36E27CEE8A7DE4B +PT=253982568F6C3FDFDE173E46B614989C +CT=6D51D51276A6FA9C933E4D4496D0455E + +I=113 +KEY=A2820E67C0E7A88840506A8A7E779B15 +PT=6D51D51276A6FA9C933E4D4496D0455E +CT=B9A6924F773CE826BBBC6DDBFA4E146A + +I=114 +KEY=1B249C28B7DB40AEFBEC075184398F7F +PT=B9A6924F773CE826BBBC6DDBFA4E146A +CT=474943C523162BC81186779A07144BC6 + +I=115 +KEY=5C6DDFED94CD6B66EA6A70CB832DC4B9 +PT=474943C523162BC81186779A07144BC6 +CT=20128A092B99B4BC212B1107C3BA1DF9 + +I=116 +KEY=7C7F55E4BF54DFDACB4161CC4097D940 +PT=20128A092B99B4BC212B1107C3BA1DF9 +CT=90330B8FB5A50E958250A953EF5145C7 + +I=117 +KEY=EC4C5E6B0AF1D14F4911C89FAFC69C87 +PT=90330B8FB5A50E958250A953EF5145C7 +CT=C1B788D0EB2C8C7B9E020CC2BEACD595 + +I=118 +KEY=2DFBD6BBE1DD5D34D713C45D116A4912 +PT=C1B788D0EB2C8C7B9E020CC2BEACD595 +CT=EF87960DABBE82F6CFA8045CE4A9EED0 + +I=119 +KEY=C27C40B64A63DFC218BBC001F5C3A7C2 +PT=EF87960DABBE82F6CFA8045CE4A9EED0 +CT=405C8408D5027DF90CBE3159701D161A + +I=120 +KEY=8220C4BE9F61A23B1405F15885DEB1D8 +PT=405C8408D5027DF90CBE3159701D161A +CT=FCAB7F88E85D6573A98D23D684A5A5F3 + +I=121 +KEY=7E8BBB36773CC748BD88D28E017B142B +PT=FCAB7F88E85D6573A98D23D684A5A5F3 +CT=191E6F1EECBF5149F4D49446E97D8820 + +I=122 +KEY=6795D4289B839601495C46C8E8069C0B +PT=191E6F1EECBF5149F4D49446E97D8820 +CT=C77128F53D48594194EFBA67E46C6B23 + +I=123 +KEY=A0E4FCDDA6CBCF40DDB3FCAF0C6AF728 +PT=C77128F53D48594194EFBA67E46C6B23 +CT=DFB898170571450CC5E2244AE4D3AF43 + +I=124 +KEY=7F5C64CAA3BA8A4C1851D8E5E8B9586B +PT=DFB898170571450CC5E2244AE4D3AF43 +CT=3BD1633B5053609A3B42CC098F9F5D87 + +I=125 +KEY=448D07F1F3E9EAD6231314EC672605EC +PT=3BD1633B5053609A3B42CC098F9F5D87 +CT=AC15B23F205AEB10470F853BA18361E0 + +I=126 +KEY=E898B5CED3B301C6641C91D7C6A5640C +PT=AC15B23F205AEB10470F853BA18361E0 +CT=2DA73BA6E01B1ADFBEEAFA2E37942078 + +I=127 +KEY=C53F8E6833A81B19DAF66BF9F1314474 +PT=2DA73BA6E01B1ADFBEEAFA2E37942078 +CT=C5B3D7089173958B32340B88D35B738B + +I=128 +KEY=008C5960A2DB8E92E8C26071226A37FF +PT=C5B3D7089173958B32340B88D35B738B +CT=8318BAA96569F3ADCD30C08D54494392 + +I=129 +KEY=8394E3C9C7B27D3F25F2A0FC7623746D +PT=8318BAA96569F3ADCD30C08D54494392 +CT=4F6F2A06A1A344B261084563BCCC5A5A + +I=130 +KEY=CCFBC9CF6611398D44FAE59FCAEF2E37 +PT=4F6F2A06A1A344B261084563BCCC5A5A +CT=07EC18166362BF049A48D146A63FF378 + +I=131 +KEY=CB17D1D905738689DEB234D96CD0DD4F +PT=07EC18166362BF049A48D146A63FF378 +CT=81CB17ABAC28A3ED135442454C212646 + +I=132 +KEY=4ADCC672A95B2564CDE6769C20F1FB09 +PT=81CB17ABAC28A3ED135442454C212646 +CT=C1CBDE45E27B9B1198CE93A51E38D9C5 + +I=133 +KEY=8B1718374B20BE755528E5393EC922CC +PT=C1CBDE45E27B9B1198CE93A51E38D9C5 +CT=8E4EB89DDFEE065784556FA0B426954A + +I=134 +KEY=0559A0AA94CEB822D17D8A998AEFB786 +PT=8E4EB89DDFEE065784556FA0B426954A +CT=6A966414CC6FE52F957E9DE7012EC4BD + +I=135 +KEY=6FCFC4BE58A15D0D4403177E8BC1733B +PT=6A966414CC6FE52F957E9DE7012EC4BD +CT=7C88474D963BFDFE61F052F51D1796EF + +I=136 +KEY=134783F3CE9AA0F325F3458B96D6E5D4 +PT=7C88474D963BFDFE61F052F51D1796EF +CT=6269F5DA04B09D442DDCB46001573AE9 + +I=137 +KEY=712E7629CA2A3DB7082FF1EB9781DF3D +PT=6269F5DA04B09D442DDCB46001573AE9 +CT=FBD2965ACE0B360A12EF39873A8F3805 + +I=138 +KEY=8AFCE07304210BBD1AC0C86CAD0EE738 +PT=FBD2965ACE0B360A12EF39873A8F3805 +CT=5B46EF12C9BE55DCD5571D82E5BC6FF1 + +I=139 +KEY=D1BA0F61CD9F5E61CF97D5EE48B288C9 +PT=5B46EF12C9BE55DCD5571D82E5BC6FF1 +CT=403DEFDB60876F3161CF02F319F5EA9A + +I=140 +KEY=9187E0BAAD183150AE58D71D51476253 +PT=403DEFDB60876F3161CF02F319F5EA9A +CT=70FD321C583C1B54ED6AD3A79721E84A + +I=141 +KEY=E17AD2A6F5242A04433204BAC6668A19 +PT=70FD321C583C1B54ED6AD3A79721E84A +CT=32AE26E948D563782532AC711BFAB644 + +I=142 +KEY=D3D4F44FBDF1497C6600A8CBDD9C3C5D +PT=32AE26E948D563782532AC711BFAB644 +CT=ECF948F5EBB98E4C7286046E0F7AF127 + +I=143 +KEY=3F2DBCBA5648C7301486ACA5D2E6CD7A +PT=ECF948F5EBB98E4C7286046E0F7AF127 +CT=818F87EFA0B5E4098E737AD44DB537BA + +I=144 +KEY=BEA23B55F6FD23399AF5D6719F53FAC0 +PT=818F87EFA0B5E4098E737AD44DB537BA +CT=029F170737413F1BFBE02C292D506E44 + +I=145 +KEY=BC3D2C52C1BC1C226115FA58B2039484 +PT=029F170737413F1BFBE02C292D506E44 +CT=77A7C520912761121373E35FD3B5AF0F + +I=146 +KEY=CB9AE972509B7D307266190761B63B8B +PT=77A7C520912761121373E35FD3B5AF0F +CT=D407B965C368E1F77195ED446BEEBA73 + +I=147 +KEY=1F9D501793F39CC703F3F4430A5881F8 +PT=D407B965C368E1F77195ED446BEEBA73 +CT=D1F304E0B3614A4840F128AA364BA6A3 + +I=148 +KEY=CE6E54F72092D68F4302DCE93C13275B +PT=D1F304E0B3614A4840F128AA364BA6A3 +CT=69B748543EE72474D0CC301BDBD50A6C + +I=149 +KEY=A7D91CA31E75F2FB93CEECF2E7C62D37 +PT=69B748543EE72474D0CC301BDBD50A6C +CT=BA471D91DBC6D27EBA7B510E67830C3F + +I=150 +KEY=1D9E0132C5B3208529B5BDFC80452108 +PT=BA471D91DBC6D27EBA7B510E67830C3F +CT=7C0CF396D078E01A741613B1E1D7A9CB + +I=151 +KEY=6192F2A415CBC09F5DA3AE4D619288C3 +PT=7C0CF396D078E01A741613B1E1D7A9CB +CT=6F670A289398F49C75ACBBE9EAC2ABFC + +I=152 +KEY=0EF5F88C86533403280F15A48B50233F +PT=6F670A289398F49C75ACBBE9EAC2ABFC +CT=C392EF479528BF1B02296E6C894E4FDD + +I=153 +KEY=CD6717CB137B8B182A267BC8021E6CE2 +PT=C392EF479528BF1B02296E6C894E4FDD +CT=C4226C8C98D5F137A4C6A239E04B0FB3 + +I=154 +KEY=09457B478BAE7A2F8EE0D9F1E2556351 +PT=C4226C8C98D5F137A4C6A239E04B0FB3 +CT=2382714FC945AD4A1E03858B63973B9E + +I=155 +KEY=2AC70A0842EBD76590E35C7A81C258CF +PT=2382714FC945AD4A1E03858B63973B9E +CT=E41F350AC9320A8A23E27C0349978168 + +I=156 +KEY=CED83F028BD9DDEFB3012079C855D9A7 +PT=E41F350AC9320A8A23E27C0349978168 +CT=7E9137997CB7676F3D0141797C6F31A8 + +I=157 +KEY=B049089BF76EBA808E006100B43AE80F +PT=7E9137997CB7676F3D0141797C6F31A8 +CT=4BF7EBC15369A757981EE4A0B7F55706 + +I=158 +KEY=FBBEE35AA4071DD7161E85A003CFBF09 +PT=4BF7EBC15369A757981EE4A0B7F55706 +CT=EC677E86A8D2A5935D33D6471A58A781 + +I=159 +KEY=17D99DDC0CD5B8444B2D53E719971888 +PT=EC677E86A8D2A5935D33D6471A58A781 +CT=F31066D48884BC9B37F218FCF385344B + +I=160 +KEY=E4C9FB08845104DF7CDF4B1BEA122CC3 +PT=F31066D48884BC9B37F218FCF385344B +CT=51CFEA4E482A7B7BCF4D31DA5CED4370 + +I=161 +KEY=B5061146CC7B7FA4B3927AC1B6FF6FB3 +PT=51CFEA4E482A7B7BCF4D31DA5CED4370 +CT=89F3CD1590669A16F8460991BFD3CF5C + +I=162 +KEY=3CF5DC535C1DE5B24BD47350092CA0EF +PT=89F3CD1590669A16F8460991BFD3CF5C +CT=9930DA8E5DBC1F6C87B0B41BD386E2E0 + +I=163 +KEY=A5C506DD01A1FADECC64C74BDAAA420F +PT=9930DA8E5DBC1F6C87B0B41BD386E2E0 +CT=41A8CB583E5B9D2BA7CDA3763B6529C0 + +I=164 +KEY=E46DCD853FFA67F56BA9643DE1CF6BCF +PT=41A8CB583E5B9D2BA7CDA3763B6529C0 +CT=53479DCFB0C69624B42B9C272B0A1A85 + +I=165 +KEY=B72A504A8F3CF1D1DF82F81ACAC5714A +PT=53479DCFB0C69624B42B9C272B0A1A85 +CT=E72F27AE86E913EF55309120358BAD35 + +I=166 +KEY=500577E409D5E23E8AB2693AFF4EDC7F +PT=E72F27AE86E913EF55309120358BAD35 +CT=9B1EF901BACC70819DBC627C7CDC8CD9 + +I=167 +KEY=CB1B8EE5B31992BF170E0B46839250A6 +PT=9B1EF901BACC70819DBC627C7CDC8CD9 +CT=9546C7B789345E4C32EE84BCE8E78C7E + +I=168 +KEY=5E5D49523A2DCCF325E08FFA6B75DCD8 +PT=9546C7B789345E4C32EE84BCE8E78C7E +CT=33700B93E03CE8202BAC7E64E3255108 + +I=169 +KEY=6D2D42C1DA1124D30E4CF19E88508DD0 +PT=33700B93E03CE8202BAC7E64E3255108 +CT=44246615BCA5C0A8DCB7E63729398F0A + +I=170 +KEY=290924D466B4E47BD2FB17A9A16902DA +PT=44246615BCA5C0A8DCB7E63729398F0A +CT=3215FC55FEE5A30BFA11F8EBBC912652 + +I=171 +KEY=1B1CD8819851477028EAEF421DF82488 +PT=3215FC55FEE5A30BFA11F8EBBC912652 +CT=796C9136407BC4F484B253DAEB206912 + +I=172 +KEY=627049B7D82A8384AC58BC98F6D84D9A +PT=796C9136407BC4F484B253DAEB206912 +CT=B18977B404F0671C10AA979389408CCA + +I=173 +KEY=D3F93E03DCDAE498BCF22B0B7F98C150 +PT=B18977B404F0671C10AA979389408CCA +CT=B2592621EE947D4ED9AD4295E0675F93 + +I=174 +KEY=61A01822324E99D6655F699E9FFF9EC3 +PT=B2592621EE947D4ED9AD4295E0675F93 +CT=62D3B7E28765DA8F83EBE19C97293C0A + +I=175 +KEY=0373AFC0B52B4359E6B4880208D6A2C9 +PT=62D3B7E28765DA8F83EBE19C97293C0A +CT=F417D650D6B7631542CFF8F95FC81C9B + +I=176 +KEY=F7647990639C204CA47B70FB571EBE52 +PT=F417D650D6B7631542CFF8F95FC81C9B +CT=700A5DE153D6B438FFF7BA902DEC32FF + +I=177 +KEY=876E2471304A94745B8CCA6B7AF28CAD +PT=700A5DE153D6B438FFF7BA902DEC32FF +CT=67DC08A48F1EC7E32121B8693BB23621 + +I=178 +KEY=E0B22CD5BF5453977AAD72024140BA8C +PT=67DC08A48F1EC7E32121B8693BB23621 +CT=90038BB156A7F7992E260E9CBFAC0D82 + +I=179 +KEY=70B1A764E9F3A40E548B7C9EFEECB70E +PT=90038BB156A7F7992E260E9CBFAC0D82 +CT=C6BB1407C2D037BF238BEC772BA95352 + +I=180 +KEY=B60AB3632B2393B1770090E9D545E45C +PT=C6BB1407C2D037BF238BEC772BA95352 +CT=8C3D249574FF74F84053977219D69F5E + +I=181 +KEY=3A3797F65FDCE7493753079BCC937B02 +PT=8C3D249574FF74F84053977219D69F5E +CT=131F7FC5A1528AD5DCB167AFAA8BFD47 + +I=182 +KEY=2928E833FE8E6D9CEBE2603466188645 +PT=131F7FC5A1528AD5DCB167AFAA8BFD47 +CT=6E68AE6FDF2C10B42B85486D3EFBCEB9 + +I=183 +KEY=4740465C21A27D28C067285958E348FC +PT=6E68AE6FDF2C10B42B85486D3EFBCEB9 +CT=26808ABFA3967D742D64A26CADF8DD70 + +I=184 +KEY=61C0CCE38234005CED038A35F51B958C +PT=26808ABFA3967D742D64A26CADF8DD70 +CT=8BBCBA5E4C219D000A2F6B701CDA09C3 + +I=185 +KEY=EA7C76BDCE159D5CE72CE145E9C19C4F +PT=8BBCBA5E4C219D000A2F6B701CDA09C3 +CT=5D707BB328BEFF51C8C1D984C1608AA0 + +I=186 +KEY=B70C0D0EE6AB620D2FED38C128A116EF +PT=5D707BB328BEFF51C8C1D984C1608AA0 +CT=8D0A485482B914FC282C2DA9F7147D0C + +I=187 +KEY=3A06455A641276F107C11568DFB56BE3 +PT=8D0A485482B914FC282C2DA9F7147D0C +CT=C5678BC12445627CBAA94177F070F736 + +I=188 +KEY=FF61CE9B4057148DBD68541F2FC59CD5 +PT=C5678BC12445627CBAA94177F070F736 +CT=EB9B50846E92C20CD6EDBA7A3A260684 + +I=189 +KEY=14FA9E1F2EC5D6816B85EE6515E39A51 +PT=EB9B50846E92C20CD6EDBA7A3A260684 +CT=E2178B471A3F72A271013C4CBE41FA1C + +I=190 +KEY=F6ED155834FAA4231A84D229ABA2604D +PT=E2178B471A3F72A271013C4CBE41FA1C +CT=C10C8084A17D90339E5ED8C638B902A4 + +I=191 +KEY=37E195DC9587341084DA0AEF931B62E9 +PT=C10C8084A17D90339E5ED8C638B902A4 +CT=03C839CCF269548279F30A1F45C30556 + +I=192 +KEY=3429AC1067EE6092FD2900F0D6D867BF +PT=03C839CCF269548279F30A1F45C30556 +CT=1C5DC5C94B5C7E332D4122A0A4FACD96 + +I=193 +KEY=287469D92CB21EA1D06822507222AA29 +PT=1C5DC5C94B5C7E332D4122A0A4FACD96 +CT=E7292B7D15E9311F242FACFAFC0B0B81 + +I=194 +KEY=CF5D42A4395B2FBEF4478EAA8E29A1A8 +PT=E7292B7D15E9311F242FACFAFC0B0B81 +CT=EA6DF86EEE09613104DB81B97B949AEC + +I=195 +KEY=2530BACAD7524E8FF09C0F13F5BD3B44 +PT=EA6DF86EEE09613104DB81B97B949AEC +CT=8FBCCDEBA43FE3FFDE4C3C279BDD4A27 + +I=196 +KEY=AA8C7721736DAD702ED033346E607163 +PT=8FBCCDEBA43FE3FFDE4C3C279BDD4A27 +CT=985971BE962C63B0F50D1004963E9BED + +I=197 +KEY=32D5069FE541CEC0DBDD2330F85EEA8E +PT=985971BE962C63B0F50D1004963E9BED +CT=F2CC0FF4B6D2F88766F1B8BE370FE463 + +I=198 +KEY=C019096B53933647BD2C9B8ECF510EED +PT=F2CC0FF4B6D2F88766F1B8BE370FE463 +CT=FE33F823B7B97FC017B35B6E22415D3E + +I=199 +KEY=3E2AF148E42A4987AA9FC0E0ED1053D3 +PT=FE33F823B7B97FC017B35B6E22415D3E +CT=465D804A6053EC2580B59F0CD645C060 + +I=200 +KEY=787771028479A5A22A2A5FEC3B5593B3 +PT=465D804A6053EC2580B59F0CD645C060 +CT=DE05AD28693E3D471B8F39BAD1803C0E + +I=201 +KEY=A672DC2AED4798E531A56656EAD5AFBD +PT=DE05AD28693E3D471B8F39BAD1803C0E +CT=61EB397D55A2FC3D78974C8A10200AC6 + +I=202 +KEY=C799E557B8E564D849322ADCFAF5A57B +PT=61EB397D55A2FC3D78974C8A10200AC6 +CT=BD95D742D81AD795AA4E10FB41F54294 + +I=203 +KEY=7A0C321560FFB34DE37C3A27BB00E7EF +PT=BD95D742D81AD795AA4E10FB41F54294 +CT=F43A1E8C6E057E68414D23DA6932DE2C + +I=204 +KEY=8E362C990EFACD25A23119FDD23239C3 +PT=F43A1E8C6E057E68414D23DA6932DE2C +CT=8EBB208032245988E851148B34B92F0E + +I=205 +KEY=008D0C193CDE94AD4A600D76E68B16CD +PT=8EBB208032245988E851148B34B92F0E +CT=2F18B4B14A360E06C50C89A4E6FE6C17 + +I=206 +KEY=2F95B8A876E89AAB8F6C84D200757ADA +PT=2F18B4B14A360E06C50C89A4E6FE6C17 +CT=681E131FA7EA5EBE10B59D3F16009582 + +I=207 +KEY=478BABB7D102C4159FD919ED1675EF58 +PT=681E131FA7EA5EBE10B59D3F16009582 +CT=376FA31CC9D18E756E96715D61403C5D + +I=208 +KEY=70E408AB18D34A60F14F68B07735D305 +PT=376FA31CC9D18E756E96715D61403C5D +CT=519E87E4A1AC61C376842F028D1BD75F + +I=209 +KEY=217A8F4FB97F2BA387CB47B2FA2E045A +PT=519E87E4A1AC61C376842F028D1BD75F +CT=BFAED9E9964967342808C6C332E02204 + +I=210 +KEY=9ED456A62F364C97AFC38171C8CE265E +PT=BFAED9E9964967342808C6C332E02204 +CT=5A9F55C61A03D6A3196FFD6879CBCA02 + +I=211 +KEY=C44B036035359A34B6AC7C19B105EC5C +PT=5A9F55C61A03D6A3196FFD6879CBCA02 +CT=0FD872478223CDE765A62036EDD6F42F + +I=212 +KEY=CB937127B71657D3D30A5C2F5CD31873 +PT=0FD872478223CDE765A62036EDD6F42F +CT=965ED2AF7D26CDA8A8B7E7B2F1ADA768 + +I=213 +KEY=5DCDA388CA309A7B7BBDBB9DAD7EBF1B +PT=965ED2AF7D26CDA8A8B7E7B2F1ADA768 +CT=05599B8D42D92457605A69200C6DC0AA + +I=214 +KEY=5894380588E9BE2C1BE7D2BDA1137FB1 +PT=05599B8D42D92457605A69200C6DC0AA +CT=3436A49EE590788F625A6FB44BF72FA3 + +I=215 +KEY=6CA29C9B6D79C6A379BDBD09EAE45012 +PT=3436A49EE590788F625A6FB44BF72FA3 +CT=DB181195EFF35E307167BADA138A837A + +I=216 +KEY=B7BA8D0E828A989308DA07D3F96ED368 +PT=DB181195EFF35E307167BADA138A837A +CT=45E06B534233447E3CB696C1DD179477 + +I=217 +KEY=F25AE65DC0B9DCED346C91122479471F +PT=45E06B534233447E3CB696C1DD179477 +CT=D2EDC4E2B4EDD671D984E8AA5BABAAD7 + +I=218 +KEY=20B722BF74540A9CEDE879B87FD2EDC8 +PT=D2EDC4E2B4EDD671D984E8AA5BABAAD7 +CT=DB92F4E9F2DD6A61E20A79CFC82CD061 + +I=219 +KEY=FB25D656868960FD0FE20077B7FE3DA9 +PT=DB92F4E9F2DD6A61E20A79CFC82CD061 +CT=79383629DF124FD94A1C36BECB711747 + +I=220 +KEY=821DE07F599B2F2445FE36C97C8F2AEE +PT=79383629DF124FD94A1C36BECB711747 +CT=3F3F592FB3DB51CF08B70E6F2174AB43 + +I=221 +KEY=BD22B950EA407EEB4D4938A65DFB81AD +PT=3F3F592FB3DB51CF08B70E6F2174AB43 +CT=D34FDA2917E9697118502CB7A6CAE07C + +I=222 +KEY=6E6D6379FDA9179A55191411FB3161D1 +PT=D34FDA2917E9697118502CB7A6CAE07C +CT=24D2C38E5C52A404DBE0D8BB6DA44AEE + +I=223 +KEY=4ABFA0F7A1FBB39E8EF9CCAA96952B3F +PT=24D2C38E5C52A404DBE0D8BB6DA44AEE +CT=2ED6A7503B3547C04E0B7B709218CD4A + +I=224 +KEY=646907A79ACEF45EC0F2B7DA048DE675 +PT=2ED6A7503B3547C04E0B7B709218CD4A +CT=4F11BE7A8B5D1A04AB82F60000BC7B50 + +I=225 +KEY=2B78B9DD1193EE5A6B7041DA04319D25 +PT=4F11BE7A8B5D1A04AB82F60000BC7B50 +CT=B98B51B76B262CB9ED157567A05770AF + +I=226 +KEY=92F3E86A7AB5C2E3866534BDA466ED8A +PT=B98B51B76B262CB9ED157567A05770AF +CT=D6CA5483F89D5AA01DBCFEBE30C26F5E + +I=227 +KEY=4439BCE9822898439BD9CA0394A482D4 +PT=D6CA5483F89D5AA01DBCFEBE30C26F5E +CT=7706922EBA53937E287084C8FDFEB33F + +I=228 +KEY=333F2EC7387B0B3DB3A94ECB695A31EB +PT=7706922EBA53937E287084C8FDFEB33F +CT=0F2DA3B8BFCB1046CA94EC9322320BF9 + +I=229 +KEY=3C128D7F87B01B7B793DA2584B683A12 +PT=0F2DA3B8BFCB1046CA94EC9322320BF9 +CT=29CAD5CDC5A2834A5D533335FED2EA81 + +I=230 +KEY=15D858B242129831246E916DB5BAD093 +PT=29CAD5CDC5A2834A5D533335FED2EA81 +CT=A48A2D319552BF02E84E4662E75884DB + +I=231 +KEY=B1527583D7402733CC20D70F52E25448 +PT=A48A2D319552BF02E84E4662E75884DB +CT=334560ECD22BB9F660BC4FFAB13891C9 + +I=232 +KEY=8217156F056B9EC5AC9C98F5E3DAC581 +PT=334560ECD22BB9F660BC4FFAB13891C9 +CT=DAAEB8436205DFB6688D9DE0A21A6B9D + +I=233 +KEY=58B9AD2C676E4173C411051541C0AE1C +PT=DAAEB8436205DFB6688D9DE0A21A6B9D +CT=E38798615C2158872704125A7CFC6540 + +I=234 +KEY=BB3E354D3B4F19F4E315174F3D3CCB5C +PT=E38798615C2158872704125A7CFC6540 +CT=BACB9EA5499A093F6595E8D1D5CF7E50 + +I=235 +KEY=01F5ABE872D510CB8680FF9EE8F3B50C +PT=BACB9EA5499A093F6595E8D1D5CF7E50 +CT=813B0D4AC4C2B8371A1A132927D24F62 + +I=236 +KEY=80CEA6A2B617A8FC9C9AECB7CF21FA6E +PT=813B0D4AC4C2B8371A1A132927D24F62 +CT=D1AD1AE650B377520EE19370D9E968A9 + +I=237 +KEY=5163BC44E6A4DFAE927B7FC716C892C7 +PT=D1AD1AE650B377520EE19370D9E968A9 +CT=3CEC25102A51A5A4C26E7391590D54ED + +I=238 +KEY=6D8F9954CCF57A0A50150C564FC5C62A +PT=3CEC25102A51A5A4C26E7391590D54ED +CT=505FD54017E89E9FAA6376E399F2FF09 + +I=239 +KEY=3DD04C14DB1DE495FA767AB5D6373923 +PT=505FD54017E89E9FAA6376E399F2FF09 +CT=1B45550B4E3AB908A2CC72FFFB38701A + +I=240 +KEY=2695191F95275D9D58BA084A2D0F4939 +PT=1B45550B4E3AB908A2CC72FFFB38701A +CT=E2469D9D2F91E3AA88DC7970C94E7237 + +I=241 +KEY=C4D38482BAB6BE37D066713AE4413B0E +PT=E2469D9D2F91E3AA88DC7970C94E7237 +CT=9352C72F2B5093D1AF52BA959963F59B + +I=242 +KEY=578143AD91E62DE67F34CBAF7D22CE95 +PT=9352C72F2B5093D1AF52BA959963F59B +CT=F26DE32F035B270BA42075574056564E + +I=243 +KEY=A5ECA08292BD0AEDDB14BEF83D7498DB +PT=F26DE32F035B270BA42075574056564E +CT=6AC08B3D91FC31A34B3A81F7C300587E + +I=244 +KEY=CF2C2BBF03413B4E902E3F0FFE74C0A5 +PT=6AC08B3D91FC31A34B3A81F7C300587E +CT=E5E6455304C3B5E2349E2372D6E4B0B8 + +I=245 +KEY=2ACA6EEC07828EACA4B01C7D2890701D +PT=E5E6455304C3B5E2349E2372D6E4B0B8 +CT=90524F27C63CCA1E4CA9674381786C30 + +I=246 +KEY=BA9821CBC1BE44B2E8197B3EA9E81C2D +PT=90524F27C63CCA1E4CA9674381786C30 +CT=44625D68290415039E2C6C05B4954896 + +I=247 +KEY=FEFA7CA3E8BA51B17635173B1D7D54BB +PT=44625D68290415039E2C6C05B4954896 +CT=EC401B0D3780FDB4A3952706B07F6CEF + +I=248 +KEY=12BA67AEDF3AAC05D5A0303DAD023854 +PT=EC401B0D3780FDB4A3952706B07F6CEF +CT=DCEDC88021F6FD1C61C08DAABF0E73BA + +I=249 +KEY=CE57AF2EFECC5119B460BD97120C4BEE +PT=DCEDC88021F6FD1C61C08DAABF0E73BA +CT=C15C85D8161B97DD61EB8B514CDCFFD5 + +I=250 +KEY=0F0B2AF6E8D7C6C4D58B36C65ED0B43B +PT=C15C85D8161B97DD61EB8B514CDCFFD5 +CT=B68B65E041C84433DEA4D9E15E9F98AB + +I=251 +KEY=B9804F16A91F82F70B2FEF27004F2C90 +PT=B68B65E041C84433DEA4D9E15E9F98AB +CT=8122505A5B6F8D985A8D9D7E9E2FF4F3 + +I=252 +KEY=38A21F4CF2700F6F51A272599E60D863 +PT=8122505A5B6F8D985A8D9D7E9E2FF4F3 +CT=8F72F8FFA71D24C900D2BBE8784B9C48 + +I=253 +KEY=B7D0E7B3556D2BA65170C9B1E62B442B +PT=8F72F8FFA71D24C900D2BBE8784B9C48 +CT=1D541D794774264680CF3689365CD845 + +I=254 +KEY=AA84FACA12190DE0D1BFFF38D0779C6E +PT=1D541D794774264680CF3689365CD845 +CT=CBAE9336C5C1F038176B5123CC205BF7 + +I=255 +KEY=612A69FCD7D8FDD8C6D4AE1B1C57C799 +PT=CBAE9336C5C1F038176B5123CC205BF7 +CT=C4CE2DC1BAE3028392BD8A005A360F56 + +I=256 +KEY=A5E4443D6D3BFF5B5469241B4661C8CF +PT=C4CE2DC1BAE3028392BD8A005A360F56 +CT=549B7075DE975B759A6DAE7D761CDC01 + +I=257 +KEY=F17F3448B3ACA42ECE048A66307D14CE +PT=549B7075DE975B759A6DAE7D761CDC01 +CT=2338FFEEE2A391B2DAFD1EBB0ECF19E3 + +I=258 +KEY=D247CBA6510F359C14F994DD3EB20D2D +PT=2338FFEEE2A391B2DAFD1EBB0ECF19E3 +CT=B27705C512C6849DE6012A490F834F36 + +I=259 +KEY=6030CE6343C9B101F2F8BE943131421B +PT=B27705C512C6849DE6012A490F834F36 +CT=33A239E0426921192F8C89C6FBCDD23C + +I=260 +KEY=5392F78301A09018DD743752CAFC9027 +PT=33A239E0426921192F8C89C6FBCDD23C +CT=90CCBE46338C7E9FB25409F82BF81234 + +I=261 +KEY=C35E49C5322CEE876F203EAAE1048213 +PT=90CCBE46338C7E9FB25409F82BF81234 +CT=873D1CAF1F2C2A56BEE419FE8A01489F + +I=262 +KEY=4463556A2D00C4D1D1C427546B05CA8C +PT=873D1CAF1F2C2A56BEE419FE8A01489F +CT=1E9ED35EB85ADD9AB88B6D85299FD8E7 + +I=263 +KEY=5AFD8634955A194B694F4AD1429A126B +PT=1E9ED35EB85ADD9AB88B6D85299FD8E7 +CT=36871F8BD629B27EEDE04E086FC539C4 + +I=264 +KEY=6C7A99BF4373AB3584AF04D92D5F2BAF +PT=36871F8BD629B27EEDE04E086FC539C4 +CT=10D10983F98D799235E8142BD67C1FD2 + +I=265 +KEY=7CAB903CBAFED2A7B14710F2FB23347D +PT=10D10983F98D799235E8142BD67C1FD2 +CT=193CEDEEE0410DE79F1B2FC077B14199 + +I=266 +KEY=65977DD25ABFDF402E5C3F328C9275E4 +PT=193CEDEEE0410DE79F1B2FC077B14199 +CT=1EC99AD6EEF155B6B5F61452D2E73A7D + +I=267 +KEY=7B5EE704B44E8AF69BAA2B605E754F99 +PT=1EC99AD6EEF155B6B5F61452D2E73A7D +CT=92DA7D1858210C87B32C6FEA1CC6A0E6 + +I=268 +KEY=E9849A1CEC6F86712886448A42B3EF7F +PT=92DA7D1858210C87B32C6FEA1CC6A0E6 +CT=A06C4ACCA35DE95CFAD365349969271D + +I=269 +KEY=49E8D0D04F326F2DD25521BEDBDAC862 +PT=A06C4ACCA35DE95CFAD365349969271D +CT=4B892CB63A35A3DED0F43BA4309CBB2E + +I=270 +KEY=0261FC667507CCF302A11A1AEB46734C +PT=4B892CB63A35A3DED0F43BA4309CBB2E +CT=E05F73446706A68A5099088279B58064 + +I=271 +KEY=E23E8F2212016A795238129892F3F328 +PT=E05F73446706A68A5099088279B58064 +CT=542D8314299AF433EC549EBFFCF2B3D9 + +I=272 +KEY=B6130C363B9B9E4ABE6C8C276E0140F1 +PT=542D8314299AF433EC549EBFFCF2B3D9 +CT=4935A91590E8A70D9F75489F6D5B70E7 + +I=273 +KEY=FF26A523AB7339472119C4B8035A3016 +PT=4935A91590E8A70D9F75489F6D5B70E7 +CT=C3A4940C6EC7D0E2F11C3CF60AB2C31D + +I=274 +KEY=3C82312FC5B4E9A5D005F84E09E8F30B +PT=C3A4940C6EC7D0E2F11C3CF60AB2C31D +CT=F109AC488D917B5FC28BA28C9720A46F + +I=275 +KEY=CD8B9D67482592FA128E5AC29EC85764 +PT=F109AC488D917B5FC28BA28C9720A46F +CT=65234934641FA21D8C3A3804D09208F3 + +I=276 +KEY=A8A8D4532C3A30E79EB462C64E5A5F97 +PT=65234934641FA21D8C3A3804D09208F3 +CT=DE015A71CB9C9A3B11C2C9B744B6B5ED + +I=277 +KEY=76A98E22E7A6AADC8F76AB710AECEA7A +PT=DE015A71CB9C9A3B11C2C9B744B6B5ED +CT=973D0C12D7826B45CC7824EF09D82BAB + +I=278 +KEY=E19482303024C199430E8F9E0334C1D1 +PT=973D0C12D7826B45CC7824EF09D82BAB +CT=EBD2D23B9D08F63385A0D21FF76FAC33 + +I=279 +KEY=0A46500BAD2C37AAC6AE5D81F45B6DE2 +PT=EBD2D23B9D08F63385A0D21FF76FAC33 +CT=A7A460A555E4C4E53457AE00FC0D9BA8 + +I=280 +KEY=ADE230AEF8C8F34FF2F9F3810856F64A +PT=A7A460A555E4C4E53457AE00FC0D9BA8 +CT=56F0329103B5238E03C781E2AB0E7A2D + +I=281 +KEY=FB12023FFB7DD0C1F13E7263A3588C67 +PT=56F0329103B5238E03C781E2AB0E7A2D +CT=0D5710472E980CF439109BAC3EAB19A8 + +I=282 +KEY=F6451278D5E5DC35C82EE9CF9DF395CF +PT=0D5710472E980CF439109BAC3EAB19A8 +CT=063CB786AD88ECADC4EAC8FE39A84286 + +I=283 +KEY=F079A5FE786D30980CC42131A45BD749 +PT=063CB786AD88ECADC4EAC8FE39A84286 +CT=825BD1E57F0E16D744C2A69233C8654B + +I=284 +KEY=7222741B0763264F480687A39793B202 +PT=825BD1E57F0E16D744C2A69233C8654B +CT=8EA54322F26DC051F831A5CBBD07A73C + +I=285 +KEY=FC873739F50EE61EB03722682A94153E +PT=8EA54322F26DC051F831A5CBBD07A73C +CT=803F3194726F4D5C5BD80D12D1284F0A + +I=286 +KEY=7CB806AD8761AB42EBEF2F7AFBBC5A34 +PT=803F3194726F4D5C5BD80D12D1284F0A +CT=5A1D90E682989AB1A84F01422CE69F82 + +I=287 +KEY=26A5964B05F931F343A02E38D75AC5B6 +PT=5A1D90E682989AB1A84F01422CE69F82 +CT=3F5AFCD41950EEFBC3D7CEF744F0C060 + +I=288 +KEY=19FF6A9F1CA9DF088077E0CF93AA05D6 +PT=3F5AFCD41950EEFBC3D7CEF744F0C060 +CT=2EE3691BD58D7645DA91CD4943F10157 + +I=289 +KEY=371C0384C924A94D5AE62D86D05B0481 +PT=2EE3691BD58D7645DA91CD4943F10157 +CT=BEF4B188364E87A9E49855CC68C02A50 + +I=290 +KEY=89E8B20CFF6A2EE4BE7E784AB89B2ED1 +PT=BEF4B188364E87A9E49855CC68C02A50 +CT=2263387A7A52AB73704774D07EA5AA69 + +I=291 +KEY=AB8B8A7685388597CE390C9AC63E84B8 +PT=2263387A7A52AB73704774D07EA5AA69 +CT=84E68DA3E9D999016D0B734DAE8C128B + +I=292 +KEY=2F6D07D56CE11C96A3327FD768B29633 +PT=84E68DA3E9D999016D0B734DAE8C128B +CT=978F5F49D7BA1189F16FC0635231DF5F + +I=293 +KEY=B8E2589CBB5B0D1F525DBFB43A83496C +PT=978F5F49D7BA1189F16FC0635231DF5F +CT=FE59B2F2BDE0AB5E1700A1771EDF8663 + +I=294 +KEY=46BBEA6E06BBA641455D1EC3245CCF0F +PT=FE59B2F2BDE0AB5E1700A1771EDF8663 +CT=A94B982DC50C338E25ABFB4113F904A8 + +I=295 +KEY=EFF07243C3B795CF60F6E58237A5CBA7 +PT=A94B982DC50C338E25ABFB4113F904A8 +CT=79A5BB282D8247192AC9F8A3DB431EA1 + +I=296 +KEY=9655C96BEE35D2D64A3F1D21ECE6D506 +PT=79A5BB282D8247192AC9F8A3DB431EA1 +CT=FC339DA0D4593CD79D407CD6F1E1E7ED + +I=297 +KEY=6A6654CB3A6CEE01D77F61F71D0732EB +PT=FC339DA0D4593CD79D407CD6F1E1E7ED +CT=08EAB51652B85C6E9BC07B718E57E144 + +I=298 +KEY=628CE1DD68D4B26F4CBF1A869350D3AF +PT=08EAB51652B85C6E9BC07B718E57E144 +CT=9EA63934609F947AAA926443D0D5BEFA + +I=299 +KEY=FC2AD8E9084B2615E62D7EC543856D55 +PT=9EA63934609F947AAA926443D0D5BEFA +CT=7FE121C45E158FF1F527BAFDDBEAE223 + +I=300 +KEY=83CBF92D565EA9E4130AC438986F8F76 +PT=7FE121C45E158FF1F527BAFDDBEAE223 +CT=B1B70D5AD08BE5DCB8126D8700F25969 + +I=301 +KEY=327CF47786D54C38AB18A9BF989DD61F +PT=B1B70D5AD08BE5DCB8126D8700F25969 +CT=389812FA2D4A6419380A2AC8961CCDA6 + +I=302 +KEY=0AE4E68DAB9F2821931283770E811BB9 +PT=389812FA2D4A6419380A2AC8961CCDA6 +CT=CEF20323EE53A2BA576F4DF86A7AC078 + +I=303 +KEY=C416E5AE45CC8A9BC47DCE8F64FBDBC1 +PT=CEF20323EE53A2BA576F4DF86A7AC078 +CT=A65611BF1901C940B883D746F1694278 + +I=304 +KEY=6240F4115CCD43DB7CFE19C9959299B9 +PT=A65611BF1901C940B883D746F1694278 +CT=7E43C2A99D11C656351B96CECD400E75 + +I=305 +KEY=1C0336B8C1DC858D49E58F0758D297CC +PT=7E43C2A99D11C656351B96CECD400E75 +CT=7DE74D06851AD329C60DD1934C34CBE4 + +I=306 +KEY=61E47BBE44C656A48FE85E9414E65C28 +PT=7DE74D06851AD329C60DD1934C34CBE4 +CT=A99B66FE5825C895DCC6BE718AB8BE34 + +I=307 +KEY=C87F1D401CE39E31532EE0E59E5EE21C +PT=A99B66FE5825C895DCC6BE718AB8BE34 +CT=4752E30DDA44BA393EF197270C111AB7 + +I=308 +KEY=8F2DFE4DC6A724086DDF77C2924FF8AB +PT=4752E30DDA44BA393EF197270C111AB7 +CT=5A3FC324D12AC30FE5BBE87FC4B655F0 + +I=309 +KEY=D5123D69178DE70788649FBD56F9AD5B +PT=5A3FC324D12AC30FE5BBE87FC4B655F0 +CT=79061587E9D9FEEF52F753AE9BCDC4B1 + +I=310 +KEY=AC1428EEFE5419E8DA93CC13CD3469EA +PT=79061587E9D9FEEF52F753AE9BCDC4B1 +CT=86C32E69874EAA0D103581199AFA813A + +I=311 +KEY=2AD70687791AB3E5CAA64D0A57CEE8D0 +PT=86C32E69874EAA0D103581199AFA813A +CT=82A924A5928570E29D18DE200F8558DD + +I=312 +KEY=A87E2222EB9FC30757BE932A584BB00D +PT=82A924A5928570E29D18DE200F8558DD +CT=2D3E0ECCC1FEA93736BD205A5217D830 + +I=313 +KEY=85402CEE2A616A306103B3700A5C683D +PT=2D3E0ECCC1FEA93736BD205A5217D830 +CT=52FA0FCF771191A4A4C4E48C7B11DC1F + +I=314 +KEY=D7BA23215D70FB94C5C757FC714DB422 +PT=52FA0FCF771191A4A4C4E48C7B11DC1F +CT=C2A47519AACA187B97C884D20ED1D825 + +I=315 +KEY=151E5638F7BAE3EF520FD32E7F9C6C07 +PT=C2A47519AACA187B97C884D20ED1D825 +CT=66F1D0799F3C473978C189F745695293 + +I=316 +KEY=73EF86416886A4D62ACE5AD93AF53E94 +PT=66F1D0799F3C473978C189F745695293 +CT=803361A1428EAC3E134B0726E5CF0754 + +I=317 +KEY=F3DCE7E02A0808E839855DFFDF3A39C0 +PT=803361A1428EAC3E134B0726E5CF0754 +CT=2CC85CEDEE03D7AB279D766D3F2BADF4 + +I=318 +KEY=DF14BB0DC40BDF431E182B92E0119434 +PT=2CC85CEDEE03D7AB279D766D3F2BADF4 +CT=706626C1CE6731DD4DBA263C4D7EAB67 + +I=319 +KEY=AF729DCC0A6CEE9E53A20DAEAD6F3F53 +PT=706626C1CE6731DD4DBA263C4D7EAB67 +CT=BD7A59659E3774B85465C91740017628 + +I=320 +KEY=1208C4A9945B9A2607C7C4B9ED6E497B +PT=BD7A59659E3774B85465C91740017628 +CT=F1778330059467556D08223682EC32AA + +I=321 +KEY=E37F479991CFFD736ACFE68F6F827BD1 +PT=F1778330059467556D08223682EC32AA +CT=7B3C6979DCEE500E3FBB2CF4E17B0A3B + +I=322 +KEY=98432EE04D21AD7D5574CA7B8EF971EA +PT=7B3C6979DCEE500E3FBB2CF4E17B0A3B +CT=AFEBC6E81B90C3D82ECE26D788AB2412 + +I=323 +KEY=37A8E80856B16EA57BBAECAC065255F8 +PT=AFEBC6E81B90C3D82ECE26D788AB2412 +CT=E4087042AB32B9C43128AADACB4F7FA6 + +I=324 +KEY=D3A0984AFD83D7614A924676CD1D2A5E +PT=E4087042AB32B9C43128AADACB4F7FA6 +CT=07E1230BC456A3DCE7DF8A4EF7265BC8 + +I=325 +KEY=D441BB4139D574BDAD4DCC383A3B7196 +PT=07E1230BC456A3DCE7DF8A4EF7265BC8 +CT=88F0C30172B9A0EA8CD657CE6847AC94 + +I=326 +KEY=5CB178404B6CD457219B9BF6527CDD02 +PT=88F0C30172B9A0EA8CD657CE6847AC94 +CT=710FE26B2DAB5A12D147D6446732B272 + +I=327 +KEY=2DBE9A2B66C78E45F0DC4DB2354E6F70 +PT=710FE26B2DAB5A12D147D6446732B272 +CT=9C30630A9ADF9B4EBF099452AB75D14A + +I=328 +KEY=B18EF921FC18150B4FD5D9E09E3BBE3A +PT=9C30630A9ADF9B4EBF099452AB75D14A +CT=77526DA4D9AE9FD4347AAC10EA4728AA + +I=329 +KEY=C6DC948525B68ADF7BAF75F0747C9690 +PT=77526DA4D9AE9FD4347AAC10EA4728AA +CT=A9EDBD1A190BC67AC91D27BB7F5A1BD1 + +I=330 +KEY=6F31299F3CBD4CA5B2B2524B0B268D41 +PT=A9EDBD1A190BC67AC91D27BB7F5A1BD1 +CT=B8700A2BAEABCB0C67251C26F82ACEF7 + +I=331 +KEY=D74123B4921687A9D5974E6DF30C43B6 +PT=B8700A2BAEABCB0C67251C26F82ACEF7 +CT=FF5F30BA14A8C49276B040B00864BE29 + +I=332 +KEY=281E130E86BE433BA3270EDDFB68FD9F +PT=FF5F30BA14A8C49276B040B00864BE29 +CT=B448E87BE1E1A41FF94353F6018929C8 + +I=333 +KEY=9C56FB75675FE7245A645D2BFAE1D457 +PT=B448E87BE1E1A41FF94353F6018929C8 +CT=9F59D422CB9265C17732E0B16DEF352A + +I=334 +KEY=030F2F57ACCD82E52D56BD9A970EE17D +PT=9F59D422CB9265C17732E0B16DEF352A +CT=06FD7DB54E62FAC3C511F4DE5C1E93B9 + +I=335 +KEY=05F252E2E2AF7826E8474944CB1072C4 +PT=06FD7DB54E62FAC3C511F4DE5C1E93B9 +CT=0DDA3E4AD600F8D3EA6B06AE465DF3BC + +I=336 +KEY=08286CA834AF80F5022C4FEA8D4D8178 +PT=0DDA3E4AD600F8D3EA6B06AE465DF3BC +CT=17305FA95D26FB72995165DA8A07FCDF + +I=337 +KEY=1F18330169897B879B7D2A30074A7DA7 +PT=17305FA95D26FB72995165DA8A07FCDF +CT=12B56FEBEE2773A2258FC6E0F9115728 + +I=338 +KEY=0DAD5CEA87AE0825BEF2ECD0FE5B2A8F +PT=12B56FEBEE2773A2258FC6E0F9115728 +CT=36440D1A561E8F77B89DF6EA3D8EC7F5 + +I=339 +KEY=3BE951F0D1B08752066F1A3AC3D5ED7A +PT=36440D1A561E8F77B89DF6EA3D8EC7F5 +CT=752C4D620413C0F4A313CF37EB34CFDD + +I=340 +KEY=4EC51C92D5A347A6A57CD50D28E122A7 +PT=752C4D620413C0F4A313CF37EB34CFDD +CT=B2A282D0B6A9EB8B7B7C962675AEC843 + +I=341 +KEY=FC679E42630AAC2DDE00432B5D4FEAE4 +PT=B2A282D0B6A9EB8B7B7C962675AEC843 +CT=D0C3D785B5507C1460DDC44B123ED5FE + +I=342 +KEY=2CA449C7D65AD039BEDD87604F713F1A +PT=D0C3D785B5507C1460DDC44B123ED5FE +CT=4DAE52B77F8001CBAB8D1949E73DD578 + +I=343 +KEY=610A1B70A9DAD1F215509E29A84CEA62 +PT=4DAE52B77F8001CBAB8D1949E73DD578 +CT=29AA82197E8158D88FFFE5BEAFC0C967 + +I=344 +KEY=48A09969D75B892A9AAF7B97078C2305 +PT=29AA82197E8158D88FFFE5BEAFC0C967 +CT=58C665AA97945F7D3AA23BE8B8DDA20D + +I=345 +KEY=1066FCC340CFD657A00D407FBF518108 +PT=58C665AA97945F7D3AA23BE8B8DDA20D +CT=5A104A7093DB3308EB4009829B5E26B1 + +I=346 +KEY=4A76B6B3D314E55F4B4D49FD240FA7B9 +PT=5A104A7093DB3308EB4009829B5E26B1 +CT=8C8EA0BEE4640F6BB6D906A7A6EA3810 + +I=347 +KEY=C6F8160D3770EA34FD944F5A82E59FA9 +PT=8C8EA0BEE4640F6BB6D906A7A6EA3810 +CT=1517ED0B6D4EC3B85479AB28DF48BFDB + +I=348 +KEY=D3EFFB065A3E298CA9EDE4725DAD2072 +PT=1517ED0B6D4EC3B85479AB28DF48BFDB +CT=9546CCBB8094E65E464C38E0809552E3 + +I=349 +KEY=46A937BDDAAACFD2EFA1DC92DD387291 +PT=9546CCBB8094E65E464C38E0809552E3 +CT=7D5AD8DEDB92F80D2B28C3458843AE84 + +I=350 +KEY=3BF3EF63013837DFC4891FD7557BDC15 +PT=7D5AD8DEDB92F80D2B28C3458843AE84 +CT=E62676E27ED61D0FD7DFE170E0938361 + +I=351 +KEY=DDD599817FEE2AD01356FEA7B5E85F74 +PT=E62676E27ED61D0FD7DFE170E0938361 +CT=DA9865198B9463681C66FB96C2C1DAA5 + +I=352 +KEY=074DFC98F47A49B80F300531772985D1 +PT=DA9865198B9463681C66FB96C2C1DAA5 +CT=62CD9DAA9487F34AF168E6E20A0684CF + +I=353 +KEY=6580613260FDBAF2FE58E3D37D2F011E +PT=62CD9DAA9487F34AF168E6E20A0684CF +CT=10BA978FDABA586691946145BE246D3C + +I=354 +KEY=753AF6BDBA47E2946FCC8296C30B6C22 +PT=10BA978FDABA586691946145BE246D3C +CT=13443CF524213B08776D7F5169B79C0F + +I=355 +KEY=667ECA489E66D99C18A1FDC7AABCF02D +PT=13443CF524213B08776D7F5169B79C0F +CT=6507336876ED4F6DB3E35D6CF5A89A2B + +I=356 +KEY=0379F920E88B96F1AB42A0AB5F146A06 +PT=6507336876ED4F6DB3E35D6CF5A89A2B +CT=B84902B5CBBC6DB8111CA45BC5F99991 + +I=357 +KEY=BB30FB952337FB49BA5E04F09AEDF397 +PT=B84902B5CBBC6DB8111CA45BC5F99991 +CT=20973140A999B8AD9982B9B706F7C32E + +I=358 +KEY=9BA7CAD58AAE43E423DCBD479C1A30B9 +PT=20973140A999B8AD9982B9B706F7C32E +CT=EE7FF1177C5E080AA03854A2A819565E + +I=359 +KEY=75D83BC2F6F04BEE83E4E9E5340366E7 +PT=EE7FF1177C5E080AA03854A2A819565E +CT=7A4F74EC2181269AC17D0E48A4DA2A88 + +I=360 +KEY=0F974F2ED7716D744299E7AD90D94C6F +PT=7A4F74EC2181269AC17D0E48A4DA2A88 +CT=5B7A7751F0FD91E203A14CE518838DD7 + +I=361 +KEY=54ED387F278CFC964138AB48885AC1B8 +PT=5B7A7751F0FD91E203A14CE518838DD7 +CT=71319FDDBACB038354A37A41F1910F94 + +I=362 +KEY=25DCA7A29D47FF15159BD10979CBCE2C +PT=71319FDDBACB038354A37A41F1910F94 +CT=81AC58FD503FC3AA78199168AE2C9085 + +I=363 +KEY=A470FF5FCD783CBF6D824061D7E75EA9 +PT=81AC58FD503FC3AA78199168AE2C9085 +CT=1F668F512038142C1155B950B0B040EC + +I=364 +KEY=BB16700EED4028937CD7F93167571E45 +PT=1F668F512038142C1155B950B0B040EC +CT=6B27D7791E9B14A5AC3D9582DBDBD929 + +I=365 +KEY=D031A777F3DB3C36D0EA6CB3BC8CC76C +PT=6B27D7791E9B14A5AC3D9582DBDBD929 +CT=9B7151FDC4E135EE93DAB2D9EB74D59C + +I=366 +KEY=4B40F68A373A09D84330DE6A57F812F0 +PT=9B7151FDC4E135EE93DAB2D9EB74D59C +CT=1F199945BCFA624B1AD3DCBBD95291B2 + +I=367 +KEY=54596FCF8BC06B9359E302D18EAA8342 +PT=1F199945BCFA624B1AD3DCBBD95291B2 +CT=E2C82FA8FE98F26283A6E0B75D0A58C6 + +I=368 +KEY=B6914067755899F1DA45E266D3A0DB84 +PT=E2C82FA8FE98F26283A6E0B75D0A58C6 +CT=5A240FFB99C3594C273B51CACF01B28B + +I=369 +KEY=ECB54F9CEC9BC0BDFD7EB3AC1CA1690F +PT=5A240FFB99C3594C273B51CACF01B28B +CT=D01847391534848FB102CA85C97749B1 + +I=370 +KEY=3CAD08A5F9AF44324C7C7929D5D620BE +PT=D01847391534848FB102CA85C97749B1 +CT=DC5CF60EBDF4A8DDDDF997E7ACA67515 + +I=371 +KEY=E0F1FEAB445BECEF9185EECE797055AB +PT=DC5CF60EBDF4A8DDDDF997E7ACA67515 +CT=749E3815FE305B307D9F4DB6A7E4658C + +I=372 +KEY=946FC6BEBA6BB7DFEC1AA378DE943027 +PT=749E3815FE305B307D9F4DB6A7E4658C +CT=8152C1E676A4FC8B0CD093FEB4B51615 + +I=373 +KEY=153D0758CCCF4B54E0CA30866A212632 +PT=8152C1E676A4FC8B0CD093FEB4B51615 +CT=0847044668710F6E5C93DD248AC921BA + +I=374 +KEY=1D7A031EA4BE443ABC59EDA2E0E80788 +PT=0847044668710F6E5C93DD248AC921BA +CT=1D6C3EFB413A59AB40F34CEFBFF25C17 + +I=375 +KEY=00163DE5E5841D91FCAAA14D5F1A5B9F +PT=1D6C3EFB413A59AB40F34CEFBFF25C17 +CT=5D7C206A79D61868FFE7AA28044996D3 + +I=376 +KEY=5D6A1D8F9C5205F9034D0B655B53CD4C +PT=5D7C206A79D61868FFE7AA28044996D3 +CT=78B4DE3B84D5D1010245CA3077A41BAC + +I=377 +KEY=25DEC3B41887D4F80108C1552CF7D6E0 +PT=78B4DE3B84D5D1010245CA3077A41BAC +CT=9E003AACEDECDBB077BDE832465F40C7 + +I=378 +KEY=BBDEF918F56B0F4876B529676AA89627 +PT=9E003AACEDECDBB077BDE832465F40C7 +CT=EEFF9E6C73E6DC5432AA446385AA1499 + +I=379 +KEY=55216774868DD31C441F6D04EF0282BE +PT=EEFF9E6C73E6DC5432AA446385AA1499 +CT=03252A19E37D9F040C56E4D712982798 + +I=380 +KEY=56044D6D65F04C18484989D3FD9AA526 +PT=03252A19E37D9F040C56E4D712982798 +CT=CF59A752BA0E14BE23AFD09437B39C65 + +I=381 +KEY=995DEA3FDFFE58A66BE65947CA293943 +PT=CF59A752BA0E14BE23AFD09437B39C65 +CT=8B08FB7974A77167DFB234F57C8DFFE1 + +I=382 +KEY=12551146AB5929C1B4546DB2B6A4C6A2 +PT=8B08FB7974A77167DFB234F57C8DFFE1 +CT=DD2A93C1106CFDAE4A1684EE02C82FE2 + +I=383 +KEY=CF7F8287BB35D46FFE42E95CB46CE940 +PT=DD2A93C1106CFDAE4A1684EE02C82FE2 +CT=38696128584F60636354E9F802590391 + +I=384 +KEY=F716E3AFE37AB40C9D1600A4B635EAD1 +PT=38696128584F60636354E9F802590391 +CT=7E552E3AD28729F642D590E3C289D598 + +I=385 +KEY=8943CD9531FD9DFADFC3904774BC3F49 +PT=7E552E3AD28729F642D590E3C289D598 +CT=17A40392AA00D7B5A6E9F59007E60C22 + +I=386 +KEY=9EE7CE079BFD4A4F792A65D7735A336B +PT=17A40392AA00D7B5A6E9F59007E60C22 +CT=A048D6755C2AD24DD8833DDCEB145BA6 + +I=387 +KEY=3EAF1872C7D79802A1A9580B984E68CD +PT=A048D6755C2AD24DD8833DDCEB145BA6 +CT=2F1CCE852396986EC4B2852E5F684CD2 + +I=388 +KEY=11B3D6F7E441006C651BDD25C726241F +PT=2F1CCE852396986EC4B2852E5F684CD2 +CT=2C28BD1E98DA63B95C0C81202BBCFE39 + +I=389 +KEY=3D9B6BE97C9B63D539175C05EC9ADA26 +PT=2C28BD1E98DA63B95C0C81202BBCFE39 +CT=6AE097A8E685B58BA2309B59D6A9EB2B + +I=390 +KEY=577BFC419A1ED65E9B27C75C3A33310D +PT=6AE097A8E685B58BA2309B59D6A9EB2B +CT=6EFC01751753999843A9BB6749097E0C + +I=391 +KEY=3987FD348D4D4FC6D88E7C3B733A4F01 +PT=6EFC01751753999843A9BB6749097E0C +CT=6B6B75F78016052E4F89C73EA826D2F2 + +I=392 +KEY=52EC88C30D5B4AE89707BB05DB1C9DF3 +PT=6B6B75F78016052E4F89C73EA826D2F2 +CT=1E9890E8F0AABCBFB8C4EDAEA0F563EF + +I=393 +KEY=4C74182BFDF1F6572FC356AB7BE9FE1C +PT=1E9890E8F0AABCBFB8C4EDAEA0F563EF +CT=143ED9FE6FD7DFB822C31DE8A3E868A9 + +I=394 +KEY=584AC1D5922629EF0D004B43D80196B5 +PT=143ED9FE6FD7DFB822C31DE8A3E868A9 +CT=9C2834AA5C95F2874DC6B267C0469E14 + +I=395 +KEY=C462F57FCEB3DB6840C6F924184708A1 +PT=9C2834AA5C95F2874DC6B267C0469E14 +CT=0720377F673352693EE2EF76D4FCFB0F + +I=396 +KEY=C342C200A98089017E241652CCBBF3AE +PT=0720377F673352693EE2EF76D4FCFB0F +CT=E83ED303F4B0ABF675C7BBC470B924FE + +I=397 +KEY=2B7C11035D3022F70BE3AD96BC02D750 +PT=E83ED303F4B0ABF675C7BBC470B924FE +CT=D87ADD68CBCAEA46DFFF99AE3723BC94 + +I=398 +KEY=F306CC6B96FAC8B1D41C34388B216BC4 +PT=D87ADD68CBCAEA46DFFF99AE3723BC94 +CT=2C290AE7C65B6E5BBAA32DE577DBA343 + +I=399 +KEY=DF2FC68C50A1A6EA6EBF19DDFCFAC887 +PT=2C290AE7C65B6E5BBAA32DE577DBA343 +CT=A04377ABE259B0D0B5BA2D40A501971B + +========================= + +KEYSIZE=192 + +I=0 +KEY=000000000000000000000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=F3F6752AE8D7831138F041560631B114 + +I=1 +KEY=AAFE47EE82411A2BF3F6752AE8D7831138F041560631B114 +PT=F3F6752AE8D7831138F041560631B114 +CT=77BA00ED5412DFF27C8ED91F3C376172 + +I=2 +KEY=A92B07597B52873C844C75C7BCC55CE3447E98493A06D066 +PT=77BA00ED5412DFF27C8ED91F3C376172 +CT=2D92DE893574463412BD7D121A94952F + +I=3 +KEY=5FD632DA76165EDBA9DEAB4E89B11AD756C3E55B20924549 +PT=2D92DE893574463412BD7D121A94952F +CT=96650F835912F5E748422727802C6CE1 + +I=4 +KEY=984A4BEC5D3474103FBBA4CDD0A3EF301E81C27CA0BE29A8 +PT=96650F835912F5E748422727802C6CE1 +CT=5FCCD4B5F125ADC5B85A56DB32283732 + +I=5 +KEY=6B7EDEEAC755885F60777078218642F5A6DB94A792961E9A +PT=5FCCD4B5F125ADC5B85A56DB32283732 +CT=EA5B1DAE2E4F9FD254A2CC28E128EB9B + +I=6 +KEY=CA5585D8C9727F208A2C6DD60FC9DD27F279588F73BEF501 +PT=EA5B1DAE2E4F9FD254A2CC28E128EB9B +CT=BB87C0FF5DB4B2A593B93398407F823A + +I=7 +KEY=BADA7C0D4A0CDD4631ABAD29527D6F8261C06B1733C1773B +PT=BB87C0FF5DB4B2A593B93398407F823A +CT=D5AF7D56281F86E3E079BE6B9465DBB4 + +I=8 +KEY=FF98AB620A203FFCE404D07F7A62E96181B9D57CA7A4AC8F +PT=D5AF7D56281F86E3E079BE6B9465DBB4 +CT=511331CCA62B067CAC47475800EE33CD + +I=9 +KEY=1186A7F46656EA07B517E1B3DC49EF1D2DFE9224A74A9F42 +PT=511331CCA62B067CAC47475800EE33CD +CT=64ACDC3579D7871644DD585C582AF3A2 + +I=10 +KEY=313ADFF9712EABE4D1BB3D86A59E680B6923CA78FF606CE0 +PT=64ACDC3579D7871644DD585C582AF3A2 +CT=EA3C45FB8A6E548DAB14BAE07966246C + +I=11 +KEY=DDABAC02BE6C40493B87787D2FF03C86C23770988606488C +PT=EA3C45FB8A6E548DAB14BAE07966246C +CT=6BC276C465C9ADBE900049A5B58D2DCB + +I=12 +KEY=9A9F7E267C2BFCD150450EB94A3991385237393D338B6547 +PT=6BC276C465C9ADBE900049A5B58D2DCB +CT=E2F0FFA8D6DF327CA0FB80A325B21931 + +I=13 +KEY=80246B9FB6224226B2B5F1119CE6A344F2CCB99E16397C76 +PT=E2F0FFA8D6DF327CA0FB80A325B21931 +CT=ACEE4C9B8A00A7760DD9CD2F6C6DFA8C + +I=14 +KEY=60CDC3E8265B71E81E5BBD8A16E60432FF1574B17A5486FA +PT=ACEE4C9B8A00A7760DD9CD2F6C6DFA8C +CT=9579E43690FD2800FED810F7442D366B + +I=15 +KEY=9DEC584DB87D63F48B2259BC861B2C3201CD64463E79B091 +PT=9579E43690FD2800FED810F7442D366B +CT=72D4D064851A050D415FC94E3FBB6A1C + +I=16 +KEY=BBC1ED636907611EF9F689D80301293F4092AD0801C2DA8D +PT=72D4D064851A050D415FC94E3FBB6A1C +CT=0CCC3B9B35CE3584D7B78C14905BEE55 + +I=17 +KEY=AE398529289F7994F53AB24336CF1CBB9725211C919934D8 +PT=0CCC3B9B35CE3584D7B78C14905BEE55 +CT=66B6A61BF7BCC6392B8FEC12152E5363 + +I=18 +KEY=4617E60BD8AF29D5938C1458C173DA82BCAACD0E84B767BB +PT=66B6A61BF7BCC6392B8FEC12152E5363 +CT=6C2247EA3BC566A84A30BF0B30AB4EEC + +I=19 +KEY=6B762D1391AA17CBFFAE53B2FAB6BC2AF69A7205B41C2957 +PT=6C2247EA3BC566A84A30BF0B30AB4EEC +CT=C16FBCDFAE34E839BA449D697452550D + +I=20 +KEY=374499A8C09A60DA3EC1EF6D548254134CDEEF6CC04E7C5A +PT=C16FBCDFAE34E839BA449D697452550D +CT=C8B704B4AFE68AF5C91A810F2873F13F + +I=21 +KEY=09DCC638DD59F37CF676EBD9FB64DEE685C46E63E83D8D65 +PT=C8B704B4AFE68AF5C91A810F2873F13F +CT=FC9C31036B26234ED1CBA46E0BE944EE + +I=22 +KEY=CE2CEB8869D7EC160AEADADA9042FDA8540FCA0DE3D4C98B +PT=FC9C31036B26234ED1CBA46E0BE944EE +CT=DCF13203AD179CD008779F189EBC78F0 + +I=23 +KEY=505FBECF6B0B083CD61BE8D93D5561785C7855157D68B17B +PT=DCF13203AD179CD008779F189EBC78F0 +CT=24AEB937E259D44D352FF39C1A8A79E0 + +I=24 +KEY=1D1649FDB7484DD2F2B551EEDF0CB5356957A68967E2C89B +PT=24AEB937E259D44D352FF39C1A8A79E0 +CT=19016D033872CB7694A712A84DBC43F2 + +I=25 +KEY=9BE41771C0F74BDEEBB43CEDE77E7E43FDF0B4212A5E8B69 +PT=19016D033872CB7694A712A84DBC43F2 +CT=0536107FEA26AB6A4FE2667EF7FCF16A + +I=26 +KEY=FF3619AED9A1F724EE822C920D58D529B212D25FDDA27A03 +PT=0536107FEA26AB6A4FE2667EF7FCF16A +CT=5D35213390FCA53AD422DC2ED4BF674D + +I=27 +KEY=59D2F5AF4BB6F28BB3B70DA19DA4701366300E71091D1D4E +PT=5D35213390FCA53AD422DC2ED4BF674D +CT=04A6F9B1AE64AD03659C4E375A690852 + +I=28 +KEY=C8384D35CAF0074EB711F41033C0DD1003AC40465374151C +PT=04A6F9B1AE64AD03659C4E375A690852 +CT=18AB347EFC2F8F93655E16732BB509DE + +I=29 +KEY=910CE58F963B684EAFBAC06ECFEF528366F2563578C11CC2 +PT=18AB347EFC2F8F93655E16732BB509DE +CT=F6037C06C71793BD14A4FC89A05D918F + +I=30 +KEY=5D1EF94FBA1E098459B9BC6808F8C13E7256AABCD89C8D4D +PT=F6037C06C71793BD14A4FC89A05D918F +CT=75094DD9B2FDDAC96B49CAB676057288 + +I=31 +KEY=61FDA8DA3EF8949C2CB0F1B1BA051BF7191F600AAE99FFC5 +PT=75094DD9B2FDDAC96B49CAB676057288 +CT=346F9F9E70C05B53DCDAF736FE59749D + +I=32 +KEY=5C383CCC2DCAE66A18DF6E2FCAC540A4C5C5973C50C08B58 +PT=346F9F9E70C05B53DCDAF736FE59749D +CT=1DB82CC8EF5B736AAEFD1F1B9CE5B67D + +I=33 +KEY=1EC7FDBB8AE4FF05056742E7259E33CE6B388827CC253D25 +PT=1DB82CC8EF5B736AAEFD1F1B9CE5B67D +CT=31B5E80D946AE577268973AF865151EB + +I=34 +KEY=FFE21FDAB07E755034D2AAEAB1F4D6B94DB1FB884A746CCE +PT=31B5E80D946AE577268973AF865151EB +CT=9FD63EB3EC6A15FC149A4F058EDA7080 + +I=35 +KEY=7EC4053A63B2353BAB0494595D9EC345592BB48DC4AE1C4E +PT=9FD63EB3EC6A15FC149A4F058EDA7080 +CT=41730A9E9D197435AC36902C57B16588 + +I=36 +KEY=FB6D2FAFD47FE8D1EA779EC7C087B770F51D24A1931F79C6 +PT=41730A9E9D197435AC36902C57B16588 +CT=08AD282171F0772F85C0A43E8BACEC74 + +I=37 +KEY=9531B1BBE0863D44E2DAB6E6B177C05F70DD809F18B395B2 +PT=08AD282171F0772F85C0A43E8BACEC74 +CT=8561E508FA237E4170CECD3A8352CFA4 + +I=38 +KEY=0AB0CF2D1CA2957A67BB53EE4B54BE1E00134DA59BE15A16 +PT=8561E508FA237E4170CECD3A8352CFA4 +CT=4470EFA3C3172EBF64A064F59AE364A9 + +I=39 +KEY=291FD5C38E400CFA23CBBC4D884390A164B3295001023EBF +PT=4470EFA3C3172EBF64A064F59AE364A9 +CT=FCC5636DFE9E45CB7761DD14A1CF4773 + +I=40 +KEY=114E4DEF0447E1D5DF0EDF2076DDD56A13D2F444A0CD79CC +PT=FCC5636DFE9E45CB7761DD14A1CF4773 +CT=2130BA8736D4933678C3B536AEDBC500 + +I=41 +KEY=0C19F74860652278FE3E65A74009465C6B1141720E16BCCC +PT=2130BA8736D4933678C3B536AEDBC500 +CT=1725EECBA8F9A542E9956168390C82C2 + +I=42 +KEY=EF9E7E57576D8A3EE91B8B6CE8F0E31E8284201A371A3E0E +PT=1725EECBA8F9A542E9956168390C82C2 +CT=60912D3EEDC962D68A29AED73DDAA24D + +I=43 +KEY=CE6464925302B9F4898AA652053981C808AD8ECD0AC09C43 +PT=60912D3EEDC962D68A29AED73DDAA24D +CT=43A8B490BBC75DC8D2D2F060C8672E9E + +I=44 +KEY=8657F15C75C74469CA2212C2BEFEDC00DA7F7EADC2A7B2DD +PT=43A8B490BBC75DC8D2D2F060C8672E9E +CT=67D856AF692A4BA7DEC7C8C14A37BD50 + +I=45 +KEY=2D566517DCC2D4EBADFA446DD7D497A704B8B66C88900F8D +PT=67D856AF692A4BA7DEC7C8C14A37BD50 +CT=293C5A05F31E863C6CA26DB8018751CA + +I=46 +KEY=826DFA3FD5229B9B84C61E6824CA119B681ADBD489175E47 +PT=293C5A05F31E863C6CA26DB8018751CA +CT=9421BF2E7727F49C252D644B952C76C4 + +I=47 +KEY=A5A13E0D1C01D7CF10E7A14653EDE5074D37BF9F1C3B2883 +PT=9421BF2E7727F49C252D644B952C76C4 +CT=CEE8F6FCF7CAF1C5EA9F746C10BD405B + +I=48 +KEY=923D8EE015266BA8DE0F57BAA42714C2A7A8CBF30C8668D8 +PT=CEE8F6FCF7CAF1C5EA9F746C10BD405B +CT=403220B81E6E0837ACCEDA5ACB3730BE + +I=49 +KEY=B41FA03C1181401A9E3D7702BA491CF50B6611A9C7B15866 +PT=403220B81E6E0837ACCEDA5ACB3730BE +CT=8C5D05679F78F853CF83CB8E5BBEBA44 + +I=50 +KEY=00B6D7172075472F126072652531E4A6C4E5DA279C0FE222 +PT=8C5D05679F78F853CF83CB8E5BBEBA44 +CT=6F9C74C0BB40608AAD1A1202FCAF62EB + +I=51 +KEY=BEB1F890B29E8EFE7DFC06A59E71842C69FFC82560A080C9 +PT=6F9C74C0BB40608AAD1A1202FCAF62EB +CT=B812DB4E295951BB04B1636A9CE91DDB + +I=52 +KEY=9455ABC4AC495686C5EEDDEBB728D5976D4EAB4FFC499D12 +PT=B812DB4E295951BB04B1636A9CE91DDB +CT=B164574EAECAD5A06FFB4F3E6C607D61 + +I=53 +KEY=1E9CCB2A3541F810748A8AA519E2003702B5E4719029E073 +PT=B164574EAECAD5A06FFB4F3E6C607D61 +CT=1433D23C1500EDBA0EFFD03D96E18F20 + +I=54 +KEY=F4817B9409F1F1D160B958990CE2ED8D0C4A344C06C86F53 +PT=1433D23C1500EDBA0EFFD03D96E18F20 +CT=B81C889B6FAF5DA800AEBA561992853B + +I=55 +KEY=49F7CD1535080039D8A5D002634DB0250CE48E1A1F5AEA68 +PT=B81C889B6FAF5DA800AEBA561992853B +CT=5B558B7C5916CF14FA5BC9266CFE875F + +I=56 +KEY=FCD5479474EA721783F05B7E3A5B7F31F6BF473C73A46D37 +PT=5B558B7C5916CF14FA5BC9266CFE875F +CT=49BE310D74A9980E9A78B0A8BB3BA1AB + +I=57 +KEY=6A68208CC7D6782ECA4E6A734EF2E73F6CC7F794C89FCC9C +PT=49BE310D74A9980E9A78B0A8BB3BA1AB +CT=7BD5BABAD7F1EEAA56E17BF9B6678DC8 + +I=58 +KEY=38DE1A69C03EF9C1B19BD0C9990309953A268C6D7EF84154 +PT=7BD5BABAD7F1EEAA56E17BF9B6678DC8 +CT=62448A767C344E7E7CDB02112F475EFE + +I=59 +KEY=02634EC657B436A8D3DF5ABFE53747EB46FD8E7C51BF1FAA +PT=62448A767C344E7E7CDB02112F475EFE +CT=F490A20D8B5C53E34C4CF5B7B72A4591 + +I=60 +KEY=DCDAAB8CBD526850274FF8B26E6B14080AB17BCBE6955A3B +PT=F490A20D8B5C53E34C4CF5B7B72A4591 +CT=ACFFD7CD5C01B183AB92DBB62DC088F6 + +I=61 +KEY=51EB6B7172C22A248BB02F7F326AA58BA123A07DCB55D2CD +PT=ACFFD7CD5C01B183AB92DBB62DC088F6 +CT=0BEDDFA8E7A1AC84E3E164A59D599BAB + +I=62 +KEY=4796B5FA7B22626B805DF0D7D5CB090F42C2C4D8560C4966 +PT=0BEDDFA8E7A1AC84E3E164A59D599BAB +CT=9CC82E2B6B96254345C1FDBAD667275E + +I=63 +KEY=D8E112F9657BD2BF1C95DEFCBE5D2C4C07033962806B6E38 +PT=9CC82E2B6B96254345C1FDBAD667275E +CT=75926F4D3503411CD3C059DA4FFABD62 + +I=64 +KEY=A19B892107C4F8F86907B1B18B5E6D50D4C360B8CF91D35A +PT=75926F4D3503411CD3C059DA4FFABD62 +CT=1073561CF6BA28EC57F4B7E5073D27FA + +I=65 +KEY=AEFE35F52D8D54A27974E7AD7DE445BC8337D75DC8ACF4A0 +PT=1073561CF6BA28EC57F4B7E5073D27FA +CT=83E161BA51E6F3A4588C94F7A24BA81F + +I=66 +KEY=5E41A6382F88A350FA9586172C02B618DBBB43AA6AE75CBF +PT=83E161BA51E6F3A4588C94F7A24BA81F +CT=BD693B4C49378F17322D175932B87111 + +I=67 +KEY=A2D760EE839234F147FCBD5B6535390FE99654F3585F2DAE +PT=BD693B4C49378F17322D175932B87111 +CT=101A83CF8487BEDD2C93180BB5024EC9 + +I=68 +KEY=0F463C72AF8E4B5357E63E94E1B287D2C5054CF8ED5D6367 +PT=101A83CF8487BEDD2C93180BB5024EC9 +CT=757949BE62D3328D09E2F45DF2AD095A + +I=69 +KEY=C3C0A16686A5D66B229F772A8361B55FCCE7B8A51FF06A3D +PT=757949BE62D3328D09E2F45DF2AD095A +CT=63EBBF9E15BECEC1A0885BECB3D06BF8 + +I=70 +KEY=3A0B55738CF3B3E94174C8B496DF7B9E6C6FE349AC2001C5 +PT=63EBBF9E15BECEC1A0885BECB3D06BF8 +CT=E176B5C7AFCE06E8ED0C63A4CF7E3034 + +I=71 +KEY=450F848D964934DAA0027D7339117D76816380ED635E31F1 +PT=E176B5C7AFCE06E8ED0C63A4CF7E3034 +CT=97B91F0A898E5B3A77A0883140D477BC + +I=72 +KEY=F3AF781D6EA3529237BB6279B09F264CF6C308DC238A464D +PT=97B91F0A898E5B3A77A0883140D477BC +CT=346AD1C470309DFE6CB08DCC24E17470 + +I=73 +KEY=4E43AB584BF1F8C603D1B3BDC0AFBBB29A738510076B323D +PT=346AD1C470309DFE6CB08DCC24E17470 +CT=F8B462FB7D758B3AF2CDF7D9244B738F + +I=74 +KEY=5A1F023E8F0987B4FB65D146BDDA308868BE72C9232041B2 +PT=F8B462FB7D758B3AF2CDF7D9244B738F +CT=B44D090FD0B7F762146FF6301C6DBF54 + +I=75 +KEY=FFC4BB75031165DA4F28D8496D6DC7EA7CD184F93F4DFEE6 +PT=B44D090FD0B7F762146FF6301C6DBF54 +CT=15CB042313710F2CD1C3409B5F3AF419 + +I=76 +KEY=8107240E1FB855765AE3DC6A7E1CC8C6AD12C46260770AFF +PT=15CB042313710F2CD1C3409B5F3AF419 +CT=0AB01B03F415A58D52CF7A1E40856275 + +I=77 +KEY=4493743ADE27D1D85053C7698A096D4BFFDDBE7C20F2688A +PT=0AB01B03F415A58D52CF7A1E40856275 +CT=05BE037C28719B4C4EEBEA329FAC63D5 + +I=78 +KEY=F582EC062155016255EDC415A278F607B136544EBF5E0B5F +PT=05BE037C28719B4C4EEBEA329FAC63D5 +CT=74C3C4F42B3F575C6B8D5BAD9AF0191F + +I=79 +KEY=8FAF8EEAA5E2D76B212E00E18947A15BDABB0FE325AE1240 +PT=74C3C4F42B3F575C6B8D5BAD9AF0191F +CT=92CB4A3DF34E6711FB56391F26D949AD + +I=80 +KEY=1CAD393CC06BC104B3E54ADC7A09C64A21ED36FC03775BED +PT=92CB4A3DF34E6711FB56391F26D949AD +CT=3754BB3D8C3D7370EDBA842CDF17D5C0 + +I=81 +KEY=E3AB53BB36BDFBBB84B1F1E1F634B53ACC57B2D0DC608E2D +PT=3754BB3D8C3D7370EDBA842CDF17D5C0 +CT=94EAC7FD54D228619791BCCBF9F633F4 + +I=82 +KEY=480B1D923E853259105B361CA2E69D5B5BC60E1B2596BDD9 +PT=94EAC7FD54D228619791BCCBF9F633F4 +CT=CAB29222355968E9CF492D5BF08B0999 + +I=83 +KEY=D8F6791107FB3D26DAE9A43E97BFF5B2948F2340D51DB440 +PT=CAB29222355968E9CF492D5BF08B0999 +CT=00837C78B88005288DB39452F1EB8F13 + +I=84 +KEY=6521B6B771FE24B2DA6AD8462F3FF09A193CB71224F63B53 +PT=00837C78B88005288DB39452F1EB8F13 +CT=2082F77D48A63E223A79217CD4516854 + +I=85 +KEY=9D9F3198682E2476FAE82F3B6799CEB82345966EF0A75307 +PT=2082F77D48A63E223A79217CD4516854 +CT=C5074D4B3F455346B078DAFBC1327AB6 + +I=86 +KEY=61832291235DC7C33FEF627058DC9DFE933D4C95319529B1 +PT=C5074D4B3F455346B078DAFBC1327AB6 +CT=72EE56572A2B7CEC53FC4E4FC0293D63 + +I=87 +KEY=5C2877854338D45D4D01342772F7E112C0C102DAF1BC14D2 +PT=72EE56572A2B7CEC53FC4E4FC0293D63 +CT=7350039161DF9E8E45B360E6139E4226 + +I=88 +KEY=A8225CF65297BA953E5137B613287F9C8572623CE22256F4 +PT=7350039161DF9E8E45B360E6139E4226 +CT=4339288215BE1BB87E31AF8FB35DEDC1 + +I=89 +KEY=51649B52A8458F4B7D681F3406966424FB43CDB3517FBB35 +PT=4339288215BE1BB87E31AF8FB35DEDC1 +CT=4D7AB61CC2C930CBB0DF43EEE92EBA1F + +I=90 +KEY=750E4E7E9183E2FF3012A928C45F54EF4B9C8E5DB851012A +PT=4D7AB61CC2C930CBB0DF43EEE92EBA1F +CT=1090FE663EA77DC2EC30E8F89E662918 + +I=91 +KEY=B65FBDF702246E442082574EFAF8292DA7AC66A526372832 +PT=1090FE663EA77DC2EC30E8F89E662918 +CT=14307A2CC40BDFB0413DF10F961337CA + +I=92 +KEY=7BEC3480AA0A44FF34B22D623EF3F69DE69197AAB0241FF8 +PT=14307A2CC40BDFB0413DF10F961337CA +CT=8F378E272D82DE8E63EC418912EF8642 + +I=93 +KEY=63921E8700657D6ABB85A34513712813857DD623A2CB99BA +PT=8F378E272D82DE8E63EC418912EF8642 +CT=3947DDC00E3C4D958E508DF58AB4982A + +I=94 +KEY=754B2E8355FABCAF82C27E851D4D65860B2D5BD6287F0190 +PT=3947DDC00E3C4D958E508DF58AB4982A +CT=492DB375B3CC640DD8FEDBAF2C943535 + +I=95 +KEY=E8F8C2450F8597B3CBEFCDF0AE81018BD3D3807904EB34A5 +PT=492DB375B3CC640DD8FEDBAF2C943535 +CT=D74BD4118D448B674935B80E4B1BFB93 + +I=96 +KEY=34A2C5B010AE479A1CA419E123C58AEC9AE638774FF0CF36 +PT=D74BD4118D448B674935B80E4B1BFB93 +CT=E9742B41295BC3ED3AA66E80E8718665 + +I=97 +KEY=0E11D08AA9EC81A4F5D032A00A9E4901A04056F7A7814953 +PT=E9742B41295BC3ED3AA66E80E8718665 +CT=5FB17BFE146B410F90EC922B1385D0E4 + +I=98 +KEY=B15779E61FD27B02AA61495E1EF5080E30ACC4DCB40499B7 +PT=5FB17BFE146B410F90EC922B1385D0E4 +CT=1B0CCF643F19DDBC0E3ED0EEAE83ACC1 + +I=99 +KEY=861B580225193DD5B16D863A21ECD5B23E9214321A873576 +PT=1B0CCF643F19DDBC0E3ED0EEAE83ACC1 +CT=B3A7D434E30DC0CDEE4D17BBC27B855E + +I=100 +KEY=B6DF2A8726C31D6E02CA520EC2E1157FD0DF0389D8FCB028 +PT=B3A7D434E30DC0CDEE4D17BBC27B855E +CT=57DE2345D91E26A2AB7CA88AEA23A84F + +I=101 +KEY=6976D3780B5F01E25514714B1BFF33DD7BA3AB0332DF1867 +PT=57DE2345D91E26A2AB7CA88AEA23A84F +CT=7B03541D239B569FEE7ABD8980F1BD05 + +I=102 +KEY=734CAC477A2727542E1725563864654295D9168AB22EA562 +PT=7B03541D239B569FEE7ABD8980F1BD05 +CT=5CB7E72B2E6CFF8C18AEB026FE40C2FA + +I=103 +KEY=B59171BEBC7BFB8672A0C27D16089ACE8D77A6AC4C6E6798 +PT=5CB7E72B2E6CFF8C18AEB026FE40C2FA +CT=50B9186306DA92FE785D6EB9223E43A9 + +I=104 +KEY=E460BA8A2F82DBB72219DA1E10D20830F52AC8156E502431 +PT=50B9186306DA92FE785D6EB9223E43A9 +CT=B3D8CE8B04B99CF2F82571E1588C358B + +I=105 +KEY=CE7C790CD4B34C4791C11495146B94C20D0FB9F436DC11BA +PT=B3D8CE8B04B99CF2F82571E1588C358B +CT=9845F0A5681A40A6DC3D9BCA639FE786 + +I=106 +KEY=699FE59B482743180984E4307C71D464D132223E5543F63C +PT=9845F0A5681A40A6DC3D9BCA639FE786 +CT=C7EBF5CEAAD5652563A8550020EC7070 + +I=107 +KEY=FEBE2836F5099F53CE6F11FED6A4B141B29A773E75AF864C +PT=C7EBF5CEAAD5652563A8550020EC7070 +CT=DE94A376634FE9856A84E2EE6EED86E8 + +I=108 +KEY=22BCFFB0740FC30510FBB288B5EB58C4D81E95D01B4200A4 +PT=DE94A376634FE9856A84E2EE6EED86E8 +CT=64B9917E23328A4FE1F8FDB8AE43E7F3 + +I=109 +KEY=E8491AFDF41F0DFB744223F696D9D28B39E66868B501E757 +PT=64B9917E23328A4FE1F8FDB8AE43E7F3 +CT=2C59820184ABC99E82A7F51D4E3A86A8 + +I=110 +KEY=3BE5F390D72ABE6A581BA1F712721B15BB419D75FB3B61FF +PT=2C59820184ABC99E82A7F51D4E3A86A8 +CT=387ACD0BAD539773287C209A0876581F + +I=111 +KEY=B7388762F772C83560616CFCBF218C66933DBDEFF34D39E0 +PT=387ACD0BAD539773287C209A0876581F +CT=F12D3E1F21AFB9CACAB541EFB7334438 + +I=112 +KEY=FBD600191276FA5C914C52E39E8E35AC5988FC00447E7DD8 +PT=F12D3E1F21AFB9CACAB541EFB7334438 +CT=68D2FA1BB635D9D35E4BF440335CBD80 + +I=113 +KEY=1E2B19106450AA2FF99EA8F828BBEC7F07C308407722C058 +PT=68D2FA1BB635D9D35E4BF440335CBD80 +CT=4532507D5E0227054CB36CBD3C489D53 + +I=114 +KEY=C0B60F65BAD77DA4BCACF88576B9CB7A4B7064FD4B6A5D0B +PT=4532507D5E0227054CB36CBD3C489D53 +CT=6DB8FD7DE7924B7E92CF27BC0AD11D16 + +I=115 +KEY=451836B53318CC33D11405F8912B8004D9BF434141BB401D +PT=6DB8FD7DE7924B7E92CF27BC0AD11D16 +CT=A3D5F6A8D4372B66F8D3DD9FF945DECA + +I=116 +KEY=0E57235F9B527C5172C1F350451CAB62216C9EDEB8FE9ED7 +PT=A3D5F6A8D4372B66F8D3DD9FF945DECA +CT=BEDFF233AD31EEB9943EEBF52F66AABF + +I=117 +KEY=BB7E1C438E5F36A3CC1E0163E82D45DBB552752B97983468 +PT=BEDFF233AD31EEB9943EEBF52F66AABF +CT=4531EDEC06570582755199A0C4745EA5 + +I=118 +KEY=DE70EC87811AFD32892FEC8FEE7A4059C003EC8B53EC6ACD +PT=4531EDEC06570582755199A0C4745EA5 +CT=F3189383C202A472CE238571D187F8EB + +I=119 +KEY=CA2AE67397E9238A7A377F0C2C78E42B0E2069FA826B9226 +PT=F3189383C202A472CE238571D187F8EB +CT=B48952CBAC43D0114985A9035DFF0382 + +I=120 +KEY=335EF040D622E95BCEBE2DC7803B343A47A5C0F9DF9491A4 +PT=B48952CBAC43D0114985A9035DFF0382 +CT=9B71302FDFBC47DF6276AB73D4D0D8B3 + +I=121 +KEY=683CC10DFBC6C09C55CF1DE85F8773E525D36B8A0B444917 +PT=9B71302FDFBC47DF6276AB73D4D0D8B3 +CT=69EED4A0C5428005199DF12B338393E2 + +I=122 +KEY=B86C9A2F1A978E123C21C9489AC5F3E03C4E9AA138C7DAF5 +PT=69EED4A0C5428005199DF12B338393E2 +CT=D0C2ACA653E6D7D80D32F445B0DD2347 + +I=123 +KEY=EF7E3DCDF05FFA86ECE365EEC9232438317C6EE4881AF9B2 +PT=D0C2ACA653E6D7D80D32F445B0DD2347 +CT=F373D4DBD7ADAFEF582621EC8C7CD2A2 + +I=124 +KEY=B8059C7A6BA2273E1F90B1351E8E8BD7695A4F0804662B10 +PT=F373D4DBD7ADAFEF582621EC8C7CD2A2 +CT=0AD37AFC8C929513F9BDB976E69C7CF3 + +I=125 +KEY=F5C9ECCBB672D46F1543CBC9921C1EC490E7F67EE2FA57E3 +PT=0AD37AFC8C929513F9BDB976E69C7CF3 +CT=E80B118DFB34F11DB344B6AE34EDEBC8 + +I=126 +KEY=AA67DC18543A7A88FD48DA446928EFD923A340D0D617BC2B +PT=E80B118DFB34F11DB344B6AE34EDEBC8 +CT=628D5C42DDEBA9AE4983F51D339366B4 + +I=127 +KEY=BF0C30A039C0FEE89FC58606B4C346776A20B5CDE584DA9F +PT=628D5C42DDEBA9AE4983F51D339366B4 +CT=1BE2A5A8CCA8E065557F6982AF3E056F + +I=128 +KEY=A219F6B8E2FF1AA3842723AE786BA6123F5FDC4F4ABADFF0 +PT=1BE2A5A8CCA8E065557F6982AF3E056F +CT=5E1187D78AEB34780F07905A84D2EBBA + +I=129 +KEY=851DDD078D4B7802DA36A479F280926A30584C15CE68344A +PT=5E1187D78AEB34780F07905A84D2EBBA +CT=31EE3AC2EC79D14EBCA71E760326CD74 + +I=130 +KEY=E6741084FEDEEFFEEBD89EBB1EF943248CFF5263CD4EF93E +PT=31EE3AC2EC79D14EBCA71E760326CD74 +CT=298E3A00F280BBF8364CF8D6D44CF54E + +I=131 +KEY=8A41136FE9DB1FB5C256A4BBEC79F8DCBAB3AAB519020C70 +PT=298E3A00F280BBF8364CF8D6D44CF54E +CT=39B7A0416C1F9B19C7B99A1F6A70258C + +I=132 +KEY=E1F1B622EB8BC9B1FBE104FA806663C57D0A30AA737229FC +PT=39B7A0416C1F9B19C7B99A1F6A70258C +CT=B1655FA9AB2C4956E2C56F7A6C421BE5 + +I=133 +KEY=0EE0B7E1AF7093694A845B532B4A2A939FCF5FD01F303219 +PT=B1655FA9AB2C4956E2C56F7A6C421BE5 +CT=1AD9CBB1A28F7A2A6CBC7EC98EF483FC + +I=134 +KEY=180A2BD07F77D34E505D90E289C550B9F373211991C4B1E5 +PT=1AD9CBB1A28F7A2A6CBC7EC98EF483FC +CT=6363BE57D6D587EE3ABA9FE81F3D3A10 + +I=135 +KEY=848B7408CAACF02E333E2EB55F10D757C9C9BEF18EF98BF5 +PT=6363BE57D6D587EE3ABA9FE81F3D3A10 +CT=05618580D7915AA7398EF4DB7D1F1DE3 + +I=136 +KEY=E581D7B4F84F2860365FAB3588818DF0F0474A2AF3E69616 +PT=05618580D7915AA7398EF4DB7D1F1DE3 +CT=F8D0118087404FD729F96CA6551338AD + +I=137 +KEY=6C81D6873EFFF763CE8FBAB50FC1C227D9BE268CA6F5AEBB +PT=F8D0118087404FD729F96CA6551338AD +CT=784913B38D32A7395D73AF1378A0DC56 + +I=138 +KEY=D971137D872F606EB6C6A90682F3651E84CD899FDE5572ED +PT=784913B38D32A7395D73AF1378A0DC56 +CT=D07C418BD183457B6683AE99C457FC0B + +I=139 +KEY=196BBA79E35EEC7966BAE88D53702065E24E27061A028EE6 +PT=D07C418BD183457B6683AE99C457FC0B +CT=5595D16DF7668779825BC135D1408013 + +I=140 +KEY=6F140EC274635FA2332F39E0A416A71C6015E633CB420EF5 +PT=5595D16DF7668779825BC135D1408013 +CT=1AB9F5075E063403FEFD976044C89C95 + +I=141 +KEY=926F3A2AA0BD8C952996CCE7FA10931F9EE871538F8A9260 +PT=1AB9F5075E063403FEFD976044C89C95 +CT=6DF413E53FCEDA296D7ABA796179D600 + +I=142 +KEY=740F74BF0E0C38154462DF02C5DE4936F392CB2AEEF34460 +PT=6DF413E53FCEDA296D7ABA796179D600 +CT=0D0F499B0D51948A9CCBC4B6531A05F7 + +I=143 +KEY=2500C9B63042B24B496D9699C88FDDBC6F590F9CBDE94197 +PT=0D0F499B0D51948A9CCBC4B6531A05F7 +CT=85833A1072B6A0ED932D4D89D53A785A + +I=144 +KEY=FCB377C07622271FCCEEAC89BA397D51FC74421568D339CD +PT=85833A1072B6A0ED932D4D89D53A785A +CT=545EDE1A4B737F1E51CBDAE311E91D5C + +I=145 +KEY=BB108ABE391C394E98B07293F14A024FADBF98F6793A2491 +PT=545EDE1A4B737F1E51CBDAE311E91D5C +CT=DA8CC635CF1450685DDAAA5A56BC3BD9 + +I=146 +KEY=34F8623EC93A6C2A423CB4A63E5E5227F06532AC2F861F48 +PT=DA8CC635CF1450685DDAAA5A56BC3BD9 +CT=FE73162BF90B52DEE7D0EA9D73F8444D + +I=147 +KEY=5E3CB25583365D5EBC4FA28DC75500F917B5D8315C7E5B05 +PT=FE73162BF90B52DEE7D0EA9D73F8444D +CT=BC75D12F66C232E1979D0F6C3E1ED8F1 + +I=148 +KEY=EABE655116470AE1003A73A2A19732188028D75D626083F4 +PT=BC75D12F66C232E1979D0F6C3E1ED8F1 +CT=661A3FA0530BF47C266D609FE01DAF48 + +I=149 +KEY=97A1B8E97CF217C366204C02F29CC664A645B7C2827D2CBC +PT=661A3FA0530BF47C266D609FE01DAF48 +CT=791144514CF8E4CC15BC6ADE3291F9CD + +I=150 +KEY=5189DC6F535B5A091F310853BE6422A8B3F9DD1CB0ECD571 +PT=791144514CF8E4CC15BC6ADE3291F9CD +CT=4369FDB3626F399A6526C476373A52D4 + +I=151 +KEY=21CD36EDB27428AB5C58F5E0DC0B1B32D6DF196A87D687A5 +PT=4369FDB3626F399A6526C476373A52D4 +CT=4C8869494C044703CFDD09F83B2208AA + +I=152 +KEY=85C08C7D4667AE3710D09CA9900F5C3119021092BCF48F0F +PT=4C8869494C044703CFDD09F83B2208AA +CT=06BC45BDB38A7028CB2D189E9E0C3046 + +I=153 +KEY=807182BD7E1F29BE166CD91423852C19D22F080C22F8BF49 +PT=06BC45BDB38A7028CB2D189E9E0C3046 +CT=74AFD5F37F8F0712710585FB8DB22FF8 + +I=154 +KEY=1AF15D0DE00CEF3F62C30CE75C0A2B0BA32A8DF7AF4A90B1 +PT=74AFD5F37F8F0712710585FB8DB22FF8 +CT=B1A4EE894A12794E0C1A286DDBC01CFD + +I=155 +KEY=E0732BA619DCF2F5D367E26E16185245AF30A59A748A8C4C +PT=B1A4EE894A12794E0C1A286DDBC01CFD +CT=0EA90279135DFFC7F58DB959F9E8BFE1 + +I=156 +KEY=AE8779E669BFF77EDDCEE0170545AD825ABD1CC38D6233AD +PT=0EA90279135DFFC7F58DB959F9E8BFE1 +CT=3717C67E520D87778350E62525C01730 + +I=157 +KEY=79D13142BE9066A2EAD9266957482AF5D9EDFAE6A8A2249D +PT=3717C67E520D87778350E62525C01730 +CT=A8F96DA7AE81EF8810A317AB4C9B82A9 + +I=158 +KEY=597D70828E56003942204BCEF9C9C57DC94EED4DE439A634 +PT=A8F96DA7AE81EF8810A317AB4C9B82A9 +CT=8C373A065986BAC9E345475F5D83FBCF + +I=159 +KEY=96C8CF3884D5DA18CE1771C8A04F7FB42A0BAA12B9BA5DFB +PT=8C373A065986BAC9E345475F5D83FBCF +CT=8E4D562CBEDC360EFB25B857DD4C4FF2 + +I=160 +KEY=5A0A29B58F17F9F9405A27E41E9349BAD12E124564F61209 +PT=8E4D562CBEDC360EFB25B857DD4C4FF2 +CT=192CCD79E3B4C8F5617D1F55B789B7A3 + +I=161 +KEY=29A4692EDE3EAABE5976EA9DFD27814FB0530D10D37FA5AA +PT=192CCD79E3B4C8F5617D1F55B789B7A3 +CT=8A5F181E1748C98121D1C22204591B23 + +I=162 +KEY=5E5CA30210E78677D329F283EA6F48CE9182CF32D726BE89 +PT=8A5F181E1748C98121D1C22204591B23 +CT=14512A4997094A0536594E63ACC5EF4A + +I=163 +KEY=7DA5F9C99B68DFB0C778D8CA7D6602CBA7DB81517BE351C3 +PT=14512A4997094A0536594E63ACC5EF4A +CT=F91BA751D5E2ADC074FC6CC14476DE67 + +I=164 +KEY=658144C57CCFDAD83E637F9BA884AF0BD327ED903F958FA4 +PT=F91BA751D5E2ADC074FC6CC14476DE67 +CT=5F7FED22BABA25D48C95C4E2CAEDB3F4 + +I=165 +KEY=13C5D7A44396F6FD611C92B9123E8ADF5FB22972F5783C50 +PT=5F7FED22BABA25D48C95C4E2CAEDB3F4 +CT=0FCFB3CB93B2E7FDF7E156486929BD17 + +I=166 +KEY=99DBAC1D5D268DB06ED32172818C6D22A8537F3A9C518147 +PT=0FCFB3CB93B2E7FDF7E156486929BD17 +CT=3E16265A02271FF68AE6310A6BFDEE60 + +I=167 +KEY=A8876A49E2F1CC5250C5072883AB72D422B54E30F7AC6F27 +PT=3E16265A02271FF68AE6310A6BFDEE60 +CT=1657BF722B57D083D8864B6447317E05 + +I=168 +KEY=0A615A71BC2BE3E94692B85AA8FCA257FA330554B09D1122 +PT=1657BF722B57D083D8864B6447317E05 +CT=018B742E941E27C547451B9E41F245F5 + +I=169 +KEY=6AE11571E3D54C4B4719CC743CE28592BD761ECAF16F54D7 +PT=018B742E941E27C547451B9E41F245F5 +CT=8C5BB61774502B6A9C44BEE8D6C44A63 + +I=170 +KEY=DCE75079013F0865CB427A6348B2AEF82132A02227AB1EB4 +PT=8C5BB61774502B6A9C44BEE8D6C44A63 +CT=361D3B51C751298194CB1AA32C0A86EE + +I=171 +KEY=E73232D50D457866FD5F41328FE38779B5F9BA810BA1985A +PT=361D3B51C751298194CB1AA32C0A86EE +CT=7B734F34DD4F332CBE5CFC7659C390BF + +I=172 +KEY=BEEF9073227655EB862C0E0652ACB4550BA546F7526208E5 +PT=7B734F34DD4F332CBE5CFC7659C390BF +CT=63CCC9CE5DADA5B5AC68870E6C675943 + +I=173 +KEY=1E9078C198526C1DE5E0C7C80F0111E0A7CDC1F93E0551A6 +PT=63CCC9CE5DADA5B5AC68870E6C675943 +CT=7BBC6F7B62807CBE1C93CADB5E6CAE0A + +I=174 +KEY=AD26AC70784FF1B99E5CA8B36D816D5EBB5E0B226069FFAC +PT=7BBC6F7B62807CBE1C93CADB5E6CAE0A +CT=E95B0C766EF9049163D3A249E196DDB8 + +I=175 +KEY=E17835A277F1D1EE7707A4C5037869CFD88DA96B81FF2214 +PT=E95B0C766EF9049163D3A249E196DDB8 +CT=968263CBCDB4582FC9CDFD0C9FD0B4F0 + +I=176 +KEY=22F9EB31E67C62DBE185C70ECECC31E0114054671E2F96E4 +PT=968263CBCDB4582FC9CDFD0C9FD0B4F0 +CT=9F573A339DFA07B844E4034718A4FE88 + +I=177 +KEY=0FEC8766966A42DA7ED2FD3D5336365855A45720068B686C +PT=9F573A339DFA07B844E4034718A4FE88 +CT=A0809BA3A742C0EB1BDA613B7472F56A + +I=178 +KEY=98E655519C9A8A95DE52669EF474F6B34E7E361B72F99D06 +PT=A0809BA3A742C0EB1BDA613B7472F56A +CT=9BF1D85440818035FA6AC36E5A5F00A7 + +I=179 +KEY=A8D37BE0EB386F8045A3BECAB4F57686B414F57528A69DA1 +PT=9BF1D85440818035FA6AC36E5A5F00A7 +CT=924E309AC04A655C50980360914E9830 + +I=180 +KEY=7D89F156EA181E92D7ED8E5074BF13DAE48CF615B9E80591 +PT=924E309AC04A655C50980360914E9830 +CT=427819CDAE419A046D4586FF5A784A1C + +I=181 +KEY=B028A265666F69629595979DDAFE89DE89C970EAE3904F8D +PT=427819CDAE419A046D4586FF5A784A1C +CT=D8B51EEC0A6A6D17F1E476C922AD8548 + +I=182 +KEY=DF20B45B990C5E734D208971D094E4C9782D0623C13DCAC5 +PT=D8B51EEC0A6A6D17F1E476C922AD8548 +CT=7823F1BBA96105168195CDAC34AB5315 + +I=183 +KEY=AF4C64F7E4AA6DE2350378CA79F5E1DFF9B8CB8FF59699D0 +PT=7823F1BBA96105168195CDAC34AB5315 +CT=85DD0256BC29EAA867DB77C1A049574D + +I=184 +KEY=4047F74604E37A00B0DE7A9CC5DC0B779E63BC4E55DFCE9D +PT=85DD0256BC29EAA867DB77C1A049574D +CT=64C1880D34408CB1A92BBA354941D5B6 + +I=185 +KEY=9C3BF36E47110C08D41FF291F19C87C63748067B1C9E1B2B +PT=64C1880D34408CB1A92BBA354941D5B6 +CT=25B80866FE3198C775F64C412E734348 + +I=186 +KEY=FAE7368F99242159F1A7FAF70FAD1F0142BE4A3A32ED5863 +PT=25B80866FE3198C775F64C412E734348 +CT=8D3D7E9A195363C96334C48120BC343A + +I=187 +KEY=5F48BD86A9C4DC897C9A846D16FE7CC8218A8EBB12516C59 +PT=8D3D7E9A195363C96334C48120BC343A +CT=E886EEA0F2D556D693DC94FFC588D1F4 + +I=188 +KEY=B7406993C120EA20941C6ACDE42B2A1EB2561A44D7D9BDAD +PT=E886EEA0F2D556D693DC94FFC588D1F4 +CT=76CB89CBB935D422DED9784D4548A84F + +I=189 +KEY=4DB740C3FA55F4ABE2D7E3065D1EFE3C6C8F6209929115E2 +PT=76CB89CBB935D422DED9784D4548A84F +CT=93D7AC7B18A1196D5C166203C44A43D3 + +I=190 +KEY=353A0293DEFB648071004F7D45BFE7513099000A56DB5631 +PT=93D7AC7B18A1196D5C166203C44A43D3 +CT=8982BD77485524EE9E49769591E922CE + +I=191 +KEY=F6FC1F7E838CD8A7F882F20A0DEAC3BFAED0769FC73274FF +PT=8982BD77485524EE9E49769591E922CE +CT=89012A1E3F7669C76C5F5F4987108662 + +I=192 +KEY=A1AA84E01EBC3E837183D814329CAA78C28F29D64022F29D +PT=89012A1E3F7669C76C5F5F4987108662 +CT=139E37ADA17990054AF8EF5B717E884B + +I=193 +KEY=C631229E9871F2AC621DEFB993E53A7D8877C68D315C7AD6 +PT=139E37ADA17990054AF8EF5B717E884B +CT=CEC8F9C90B2E393BDA4602C2A83F953C + +I=194 +KEY=824604723CD82F95ACD5167098CB03465231C44F9963EFEA +PT=CEC8F9C90B2E393BDA4602C2A83F953C +CT=2A2E1344AE4C6BA40568E170BF67FD74 + +I=195 +KEY=2B17489FA71F683B86FB0534368768E25759253F2604129E +PT=2A2E1344AE4C6BA40568E170BF67FD74 +CT=7402AC6982DBB0BED678746E4523556C + +I=196 +KEY=DA9C0CF5A89D3D94F2F9A95DB45CD85C81215151632747F2 +PT=7402AC6982DBB0BED678746E4523556C +CT=36A36B5B55F950F00B9F3E31156BFD65 + +I=197 +KEY=543619886B56830BC45AC206E1A588AC8ABE6F60764CBA97 +PT=36A36B5B55F950F00B9F3E31156BFD65 +CT=D7B36A117E824A49A5944C37BEE27F06 + +I=198 +KEY=9494630598E7618213E9A8179F27C2E52F2A2357C8AEC591 +PT=D7B36A117E824A49A5944C37BEE27F06 +CT=2D60BC0BC950EEE7E36D50E971CF68D0 + +I=199 +KEY=B0328218DF523A0C3E89141C56772C02CC4773BEB961AD41 +PT=2D60BC0BC950EEE7E36D50E971CF68D0 +CT=49A4643E535F45A1ABDEF41ABABBE268 + +I=200 +KEY=5E3FD7ACD8EF334D772D7022052869A3679987A403DA4F29 +PT=49A4643E535F45A1ABDEF41ABABBE268 +CT=D5EEB5CC40AF8612708BAABE85685E4C + +I=201 +KEY=A232D0267D606002A2C3C5EE4587EFB117122D1A86B21165 +PT=D5EEB5CC40AF8612708BAABE85685E4C +CT=3F5B875DE202C5441165FE5C5CA2D258 + +I=202 +KEY=844ED6FAFA342BFE9D9842B3A7852AF50677D346DA10C33D +PT=3F5B875DE202C5441165FE5C5CA2D258 +CT=9B5F0210E0EC623C6ACF1C0BC06EBF51 + +I=203 +KEY=109F8CEC689E0F5306C740A3476948C96CB8CF4D1A7E7C6C +PT=9B5F0210E0EC623C6ACF1C0BC06EBF51 +CT=E57015FAB0006446E544704DB6629059 + +I=204 +KEY=D9ABCBAC4B271B04E3B75559F7692C8F89FCBF00AC1CEC35 +PT=E57015FAB0006446E544704DB6629059 +CT=85F0DF6B1ED933E87F6A9F609D516346 + +I=205 +KEY=09915869AE1F57F766478A32E9B01F67F6962060314D8F73 +PT=85F0DF6B1ED933E87F6A9F609D516346 +CT=471B931539C155478A1D4B9BA50DCE43 + +I=206 +KEY=BFB70AA6C4F05C1D215C1927D0714A207C8B6BFB94404130 +PT=471B931539C155478A1D4B9BA50DCE43 +CT=9AC55C1CC77E7B59CC9204898A38CEA7 + +I=207 +KEY=660972D79B056F14BB99453B170F3179B0196F721E788F97 +PT=9AC55C1CC77E7B59CC9204898A38CEA7 +CT=19B00FEB13145F9F356173B42184D516 + +I=208 +KEY=F09576EB17FB1A07A2294AD0041B6EE685781CC63FFC5A81 +PT=19B00FEB13145F9F356173B42184D516 +CT=5F1379E25F6DD8653B73F58E738D6243 + +I=209 +KEY=8D170BBC5E3662BEFD3A33325B76B683BE0BE9484C7138C2 +PT=5F1379E25F6DD8653B73F58E738D6243 +CT=AEF55C09E7AD76CC9BA7B83874A0A86B + +I=210 +KEY=1A7BD2572D3CDB8C53CF6F3BBCDBC04F25AC517038D190A9 +PT=AEF55C09E7AD76CC9BA7B83874A0A86B +CT=6BEF52E6D86DC15D2A03B5CB3EBAB130 + +I=211 +KEY=B4BC0603F59BE3D038203DDD64B601120FAFE4BB066B2199 +PT=6BEF52E6D86DC15D2A03B5CB3EBAB130 +CT=FDC093FFED096B7812E77E23AD9C7C71 + +I=212 +KEY=C00A0DDA74D55250C5E0AE2289BF6A6A1D489A98ABF75DE8 +PT=FDC093FFED096B7812E77E23AD9C7C71 +CT=072625CB0C022827E195DE8AB4FE7E0C + +I=213 +KEY=6534CBAB46880CE0C2C68BE985BD424DFCDD44121F0923E4 +PT=072625CB0C022827E195DE8AB4FE7E0C +CT=11AA47C5557437AEE8A8BE31A849A047 + +I=214 +KEY=C204AFE794D81224D36CCC2CD0C975E31475FA23B74083A3 +PT=11AA47C5557437AEE8A8BE31A849A047 +CT=4C91B3031567DFFC22829CBC3C419B6D + +I=215 +KEY=01A4820CC4D281B99FFD7F2FC5AEAA1F36F7669F8B0118CE +PT=4C91B3031567DFFC22829CBC3C419B6D +CT=54C0F95B0179CB753917A2592F58BD77 + +I=216 +KEY=B5C1DD77446C8FD1CB3D8674C4D7616A0FE0C4C6A459A5B9 +PT=54C0F95B0179CB753917A2592F58BD77 +CT=A2A19A98250E432131F9EF4AE473677F + +I=217 +KEY=9FDC1167AC2D1A51699C1CECE1D9224B3E192B8C402AC2C6 +PT=A2A19A98250E432131F9EF4AE473677F +CT=9B5780CA9669A92688F54887E303F2D3 + +I=218 +KEY=C734A73F4A32D311F2CB9C2677B08B6DB6EC630BA3293015 +PT=9B5780CA9669A92688F54887E303F2D3 +CT=F1750745D1E74E41A07B99482ECABAAA + +I=219 +KEY=1612B86730F487EF03BE9B63A657C52C1697FA438DE38ABF +PT=F1750745D1E74E41A07B99482ECABAAA +CT=30F510DBDDAEC6FC0D2504C11DF23CFA + +I=220 +KEY=D52E3B50F72B085D334B8BB87BF903D01BB2FE829011B645 +PT=30F510DBDDAEC6FC0D2504C11DF23CFA +CT=64998C3018185D722477A2DBFB84ABB8 + +I=221 +KEY=7F9F2A23D320792E57D2078863E15EA23FC55C596B951DFD +PT=64998C3018185D722477A2DBFB84ABB8 +CT=9293A4FF9ED5D57D81BB8A63381BF66A + +I=222 +KEY=B529B6E7080E0AE4C541A377FD348BDFBE7ED63A538EEB97 +PT=9293A4FF9ED5D57D81BB8A63381BF66A +CT=A389ABCF609B41F28CC3188B2C126915 + +I=223 +KEY=A5C4C3A89459F79566C808B89DAFCA2D32BDCEB17F9C8282 +PT=A389ABCF609B41F28CC3188B2C126915 +CT=5F4BC60608A3DF788631EBB66763E7DF + +I=224 +KEY=F59456291C6CF0C83983CEBE950C1555B48C250718FF655D +PT=5F4BC60608A3DF788631EBB66763E7DF +CT=EFDE2113118EDFD5A15D4DFA1C1E79B4 + +I=225 +KEY=9A4CD87E44EA7DEED65DEFAD8482CA8015D168FD04E11CE9 +PT=EFDE2113118EDFD5A15D4DFA1C1E79B4 +CT=2526BA56DA8A9F9A5799A9D2BE96AEBA + +I=226 +KEY=A19D5DFAEC1C9B9DF37B55FB5E08551A4248C12FBA77B253 +PT=2526BA56DA8A9F9A5799A9D2BE96AEBA +CT=83F237712EF89A7B1E84D69DEFC9B9B9 + +I=227 +KEY=C48B0103470544867089628A70F0CF615CCC17B255BE0BEA +PT=83F237712EF89A7B1E84D69DEFC9B9B9 +CT=13B7E26895FEEFE2356306D8D822DDD3 + +I=228 +KEY=B366B0FE6BB3DB17633E80E2E50E208369AF116A8D9CD639 +PT=13B7E26895FEEFE2356306D8D822DDD3 +CT=BF8C47559B230A3311543BEAA90D4DA1 + +I=229 +KEY=BE5A735484B72645DCB2C7B77E2D2AB078FB2A8024919B98 +PT=BF8C47559B230A3311543BEAA90D4DA1 +CT=D3C9AFCED64F46AC74FFF73302DE10EB + +I=230 +KEY=1DFD852FE9F131840F7B6879A8626C1C0C04DDB3264F8B73 +PT=D3C9AFCED64F46AC74FFF73302DE10EB +CT=004386EABD8F3C60971D34B5A5F220F8 + +I=231 +KEY=BB9831D80259A5A40F38EE9315ED507C9B19E90683BDAB8B +PT=004386EABD8F3C60971D34B5A5F220F8 +CT=119A244F6A3ED1947A764CFE96568213 + +I=232 +KEY=93B0F09E78E610741EA2CADC7FD381E8E16FA5F815EB2998 +PT=119A244F6A3ED1947A764CFE96568213 +CT=4C8D061BD62737E674DDCACEFC37DA11 + +I=233 +KEY=43E5036A09590404522FCCC7A9F4B60E95B26F36E9DCF389 +PT=4C8D061BD62737E674DDCACEFC37DA11 +CT=7B5EFE44536B5AB9CF75A457BB8C2417 + +I=234 +KEY=869CF7BF36FBB5D829713283FA9FECB75AC7CB615250D79E +PT=7B5EFE44536B5AB9CF75A457BB8C2417 +CT=25771915A1C0F8149634963E1C91BD26 + +I=235 +KEY=C9BD373897A760E30C062B965B5F14A3CCF35D5F4EC16AB8 +PT=25771915A1C0F8149634963E1C91BD26 +CT=8BB2BC7E7BAAEA1AAF7A9E285BEEB8F1 + +I=236 +KEY=D2EE543EACA1592687B497E820F5FEB96389C377152FD249 +PT=8BB2BC7E7BAAEA1AAF7A9E285BEEB8F1 +CT=05556B6AB68D2DABCDB32FB724D44F57 + +I=237 +KEY=9583438F7194754F82E1FC829678D312AE3AECC031FB9D1E +PT=05556B6AB68D2DABCDB32FB724D44F57 +CT=A4CE8197B0EAE6AD57D5A0630D0CABD0 + +I=238 +KEY=A5B96A3EFB2EF0C7262F7D15269235BFF9EF4CA33CF736CE +PT=A4CE8197B0EAE6AD57D5A0630D0CABD0 +CT=8E40F09865AA8EA114EA7F36E11815C3 + +I=239 +KEY=8E7A04E47969F5DBA86F8D8D4338BB1EED053395DDEF230D +PT=8E40F09865AA8EA114EA7F36E11815C3 +CT=194A76947319ED92D96D292684C29B5A + +I=240 +KEY=E52197304B446A01B125FB193021568C34681AB3592DB857 +PT=194A76947319ED92D96D292684C29B5A +CT=93526BBB6405BDEA68AC01F1C807EBF7 + +I=241 +KEY=DA4552EC2C076DC3227790A25424EB665CC41B42912A53A0 +PT=93526BBB6405BDEA68AC01F1C807EBF7 +CT=59860971F900B739B36CB97D35B082D1 + +I=242 +KEY=E7329ED9491CA8227BF199D3AD245C5FEFA8A23FA49AD171 +PT=59860971F900B739B36CB97D35B082D1 +CT=92F430D5B1F35B469ECDDFDCB2A110F5 + +I=243 +KEY=1ADC19560D9AEF09E905A9061CD7071971657DE3163BC184 +PT=92F430D5B1F35B469ECDDFDCB2A110F5 +CT=F81D2505FD9A569A71502B23894DA535 + +I=244 +KEY=6ED932F2BEBD486911188C03E14D5183003556C09F7664B1 +PT=F81D2505FD9A569A71502B23894DA535 +CT=93BACD72A0E761D34E8603FC44F6BA5E + +I=245 +KEY=F0A52339F0C68F5782A2417141AA30504EB3553CDB80DEEF +PT=93BACD72A0E761D34E8603FC44F6BA5E +CT=631DB808708B5EBB54A2DE6B62519235 + +I=246 +KEY=0B262E7EA7109C03E1BFF97931216EEB1A118B57B9D14CDA +PT=631DB808708B5EBB54A2DE6B62519235 +CT=C402023DA5F2F230FEEACE1C5F8B5390 + +I=247 +KEY=1E7EB042CA0EA74F25BDFB4494D39CDBE4FB454BE65A1F4A +PT=C402023DA5F2F230FEEACE1C5F8B5390 +CT=CAD88E79E0AB4A3B324F6D3ABBEA211C + +I=248 +KEY=215E3E970705BE3DEF65753D7478D6E0D6B428715DB03E56 +PT=CAD88E79E0AB4A3B324F6D3ABBEA211C +CT=1B2303C4FEB78105B5BF35BC1C5C2FF9 + +I=249 +KEY=512CE443B55593D9F44676F98ACF57E5630B1DCD41EC11AF +PT=1B2303C4FEB78105B5BF35BC1C5C2FF9 +CT=06CAE1EED611AF829C83216697F8AEFA + +I=250 +KEY=533251960972B2BFF28C97175CDEF867FF883CABD614BF55 +PT=06CAE1EED611AF829C83216697F8AEFA +CT=170194A7E4E85B0A339BF86460E5ABC6 + +I=251 +KEY=B484A158FBC3D31FE58D03B0B836A36DCC13C4CFB6F11493 +PT=170194A7E4E85B0A339BF86460E5ABC6 +CT=AF7014D972F55B0CD759CAFBC0D9483B + +I=252 +KEY=C470759A6962C1934AFD1769CAC3F8611B4A0E3476285CA8 +PT=AF7014D972F55B0CD759CAFBC0D9483B +CT=E8BD547419DADD980682B701CCEF3C7E + +I=253 +KEY=D27A5BF9DD3B6F61A240431DD31925F91DC8B935BAC760D6 +PT=E8BD547419DADD980682B701CCEF3C7E +CT=E8F9CFAA891A471EBBC5806F03E0E18A + +I=254 +KEY=041C2FF776BAF2334AB98CB75A0362E7A60D395AB927815C +PT=E8F9CFAA891A471EBBC5806F03E0E18A +CT=F90F888C03CEBFC9A807DF2100488B24 + +I=255 +KEY=9BB4307835C91BA4B3B6043B59CDDD2E0E0AE67BB96F0A78 +PT=F90F888C03CEBFC9A807DF2100488B24 +CT=7874C642B44810334C2CF572DA0DEF68 + +I=256 +KEY=56E742B84F293B68CBC2C279ED85CD1D422613096362E510 +PT=7874C642B44810334C2CF572DA0DEF68 +CT=064513BBD5E667B651B93502E86B6C43 + +I=257 +KEY=66E28C26E01570FCCD87D1C23863AAAB139F260B8B098953 +PT=064513BBD5E667B651B93502E86B6C43 +CT=D461A03D7D8669BBC32430D00D437E59 + +I=258 +KEY=5674831937969B7619E671FF45E5C310D0BB16DB864AF70A +PT=D461A03D7D8669BBC32430D00D437E59 +CT=0A07F858DBD1909FF970C95ED7287FB3 + +I=259 +KEY=D45BCD0FF3E14A7013E189A79E34538F29CBDF85516288B9 +PT=0A07F858DBD1909FF970C95ED7287FB3 +CT=C2E45D29C1DF02CB4D768682ADD73E6B + +I=260 +KEY=40F81EBEF03AAAABD105D48E5FEB514464BD5907FCB5B6D2 +PT=C2E45D29C1DF02CB4D768682ADD73E6B +CT=01E21E496061DAC195F24F6D1CF22B8A + +I=261 +KEY=99C8875EE8221C3FD0E7CAC73F8A8B85F14F166AE0479D58 +PT=01E21E496061DAC195F24F6D1CF22B8A +CT=71D1C35E1126F6907CDB5414B8C97E84 + +I=262 +KEY=F1582613B3466D7FA13609992EAC7D158D94427E588EE3DC +PT=71D1C35E1126F6907CDB5414B8C97E84 +CT=8B7BBAF63C993D4BBB098A22D00C5608 + +I=263 +KEY=4679A2F69656CFD32A4DB36F1235405E369DC85C8882B5D4 +PT=8B7BBAF63C993D4BBB098A22D00C5608 +CT=651B19F5C1B67FC52151E7C5F1246485 + +I=264 +KEY=A404FC3490DFC7244F56AA9AD3833F9B17CC2F9979A6D151 +PT=651B19F5C1B67FC52151E7C5F1246485 +CT=158F0AE36B5585868DFB998520318FEB + +I=265 +KEY=F7DCCA4394981F2D5AD9A079B8D6BA1D9A37B61C59975EBA +PT=158F0AE36B5585868DFB998520318FEB +CT=B62EC94231405F3FB0D160FBFF2DE27E + +I=266 +KEY=1F38711C9B6BD060ECF7693B8996E5222AE6D6E7A6BABCC4 +PT=B62EC94231405F3FB0D160FBFF2DE27E +CT=464AFFA35373CEE71523FF0AFBFB1F51 + +I=267 +KEY=6B846AAC0C448654AABD9698DAE52BC53FC529ED5D41A395 +PT=464AFFA35373CEE71523FF0AFBFB1F51 +CT=C729EA9A05D5482491CE31DBBC03CE24 + +I=268 +KEY=BD539A9B4001B6876D947C02DF3063E1AE0B1836E1426DB1 +PT=C729EA9A05D5482491CE31DBBC03CE24 +CT=C755C048ADAD22A628B077163097415F + +I=269 +KEY=18B524EEF606589DAAC1BC4A729D414786BB6F20D1D52CEE +PT=C755C048ADAD22A628B077163097415F +CT=2DADB8F8FC76D8C997627449E44D14B2 + +I=270 +KEY=3C2C6A047706E3DD876C04B28EEB998E11D91B693598385C +PT=2DADB8F8FC76D8C997627449E44D14B2 +CT=2D7109526C2F1B5D08DD356B163498D7 + +I=271 +KEY=40593D776B6C5920AA1D0DE0E2C482D319042E0223ACA08B +PT=2D7109526C2F1B5D08DD356B163498D7 +CT=D9C1D988ABD5C892B2E5BA7BF4F584D3 + +I=272 +KEY=72B53E4711B3DE9873DCD46849114A41ABE19479D7592458 +PT=D9C1D988ABD5C892B2E5BA7BF4F584D3 +CT=0A32E78440A8AE4A3FF74B20A3F5F7DE + +I=273 +KEY=C0BEF126899B305B79EE33EC09B9E40B9416DF5974ACD386 +PT=0A32E78440A8AE4A3FF74B20A3F5F7DE +CT=E7AA36688851D8E4E08E9EFE6987C571 + +I=274 +KEY=D16257EFEE63CC399E44058481E83CEF749841A71D2B16F7 +PT=E7AA36688851D8E4E08E9EFE6987C571 +CT=0E3E2E99FFA84F8A69CAA897017DD09C + +I=275 +KEY=3509E5A7A66648B9907A2B1D7E4073651D52E9301C56C66B +PT=0E3E2E99FFA84F8A69CAA897017DD09C +CT=96766B7F6E78537994466BDC62607C85 + +I=276 +KEY=46BC3EB6FA22C8AC060C40621038201C891482EC7E36BAEE +PT=96766B7F6E78537994466BDC62607C85 +CT=AA42980BBABA21DACE6D9FCD28A5B0BA + +I=277 +KEY=26FC66C5E5C6E585AC4ED869AA8201C647791D2156930A54 +PT=AA42980BBABA21DACE6D9FCD28A5B0BA +CT=EC057F10222EC91403E1B6CEFCE3556A + +I=278 +KEY=91FBDF7B24B0FEB4404BA77988ACC8D24498ABEFAA705F3E +PT=EC057F10222EC91403E1B6CEFCE3556A +CT=E6E91EC6B977C3547D08F717F6702E80 + +I=279 +KEY=5BD8360BB35CE209A6A2B9BF31DB0B8639905CF85C0071BE +PT=E6E91EC6B977C3547D08F717F6702E80 +CT=DF9BE6A5A61CC4B66C76447202CBFADA + +I=280 +KEY=E58D0EFAB72342BD79395F1A97C7CF3055E6188A5ECB8B64 +PT=DF9BE6A5A61CC4B66C76447202CBFADA +CT=8466FA526E1038CC14A2EC6D85FC4EDF + +I=281 +KEY=7EB51DD43B05BB26FD5FA548F9D7F7FC4144F4E7DB37C5BB +PT=8466FA526E1038CC14A2EC6D85FC4EDF +CT=5C5A965E386B16D50F3487D54C04AA6B + +I=282 +KEY=8F4BEBA429FE57C4A1053316C1BCE1294E70733297336FD0 +PT=5C5A965E386B16D50F3487D54C04AA6B +CT=BCD57B57FAA6E3F81660113345CD24F9 + +I=283 +KEY=4A5DA421D27E62821DD048413B1A02D158106201D2FE4B29 +PT=BCD57B57FAA6E3F81660113345CD24F9 +CT=7450D38B3A6D8C4987EE3F7F71C68FFC + +I=284 +KEY=77934AE2BB39BC4469809BCA01778E98DFFE5D7EA338C4D5 +PT=7450D38B3A6D8C4987EE3F7F71C68FFC +CT=A6D1D5A31BAB1CE9F027376539B2AAE2 + +I=285 +KEY=2C6FD4455E96F2F6CF514E691ADC92712FD96A1B9A8A6E37 +PT=A6D1D5A31BAB1CE9F027376539B2AAE2 +CT=10894E2E6275D172259D4C23332508B9 + +I=286 +KEY=2608AB9AA8CED631DFD8004778A943030A442638A9AF668E +PT=10894E2E6275D172259D4C23332508B9 +CT=53C2AB8E42B4EF7FF659D3FB251453C7 + +I=287 +KEY=68840BD9639AC3128C1AABC93A1DAC7CFC1DF5C38CBB3549 +PT=53C2AB8E42B4EF7FF659D3FB251453C7 +CT=3A9C38D026561B83B0F3E7B566C66CD2 + +I=288 +KEY=EFCDF07C0E70D051B68693191C4BB7FF4CEE1276EA7D599B +PT=3A9C38D026561B83B0F3E7B566C66CD2 +CT=B9F7E495B96BE7C0307D8F7A53200193 + +I=289 +KEY=87DFC62793B45EF60F71778CA520503F7C939D0CB95D5808 +PT=B9F7E495B96BE7C0307D8F7A53200193 +CT=2425FE8AAA7ED06A5FFEC11D7B289891 + +I=290 +KEY=5FD78DA64A9F50142B5489060F5E8055236D5C11C275C099 +PT=2425FE8AAA7ED06A5FFEC11D7B289891 +CT=93BC83BCF69DBB256C27AF250FDEFAEB + +I=291 +KEY=81C88579E065FD16B8E80ABAF9C33B704F4AF334CDAB3A72 +PT=93BC83BCF69DBB256C27AF250FDEFAEB +CT=A1AF953D4BD1A474B1173D4686EBB8CF + +I=292 +KEY=DEE7FFE9A3814D2B19479F87B2129F04FE5DCE724B4082BD +PT=A1AF953D4BD1A474B1173D4686EBB8CF +CT=00AAC1CD74952011A03714A6BB091653 + +I=293 +KEY=8331CC8136829F1E19ED5E4AC687BF155E6ADAD4F04994EE +PT=00AAC1CD74952011A03714A6BB091653 +CT=00B92CBFFC3589CEB3ECAA7D221C3F0B + +I=294 +KEY=FF862EBFECC11E93195472F53AB236DBED8670A9D255ABE5 +PT=00B92CBFFC3589CEB3ECAA7D221C3F0B +CT=2E07858E94AD300A35448EFA848A767A + +I=295 +KEY=18B8678C5497708E3753F77BAE1F06D1D8C2FE5356DFDD9F +PT=2E07858E94AD300A35448EFA848A767A +CT=B02F0C98F3B7BB7807F35F6DFD925238 + +I=296 +KEY=C90D1E18331CA38F877CFBE35DA8BDA9DF31A13EAB4D8FA7 +PT=B02F0C98F3B7BB7807F35F6DFD925238 +CT=EAACC8624146D29129ED8B904E89F04A + +I=297 +KEY=A08AD721EE869F2E6DD033811CEE6F38F6DC2AAEE5C47FED +PT=EAACC8624146D29129ED8B904E89F04A +CT=8949A5A4289B65A32C5116E8A4B55A50 + +I=298 +KEY=CED3055CB1AC48CAE499962534750A9BDA8D3C46417125BD +PT=8949A5A4289B65A32C5116E8A4B55A50 +CT=B632C5FD8EB9676B5504A8BA13E63E2D + +I=299 +KEY=AD1DA883EFFC2F3052AB53D8BACC6DF08F8994FC52971B90 +PT=B632C5FD8EB9676B5504A8BA13E63E2D +CT=EF28A1297C07A575686B3429AC9B62D1 + +I=300 +KEY=007F57339EC932CCBD83F2F1C6CBC885E7E2A0D5FE0C7941 +PT=EF28A1297C07A575686B3429AC9B62D1 +CT=C99F15E4000944120D1C3DD283D99BFF + +I=301 +KEY=3688FDD4FD7822F2741CE715C6C28C97EAFE9D077DD5E2BE +PT=C99F15E4000944120D1C3DD283D99BFF +CT=0AC0219E2BD43F9F19F3A0997FCB9FCD + +I=302 +KEY=AB54BF259C6F5CEE7EDCC68BED16B308F30D3D9E021E7D73 +PT=0AC0219E2BD43F9F19F3A0997FCB9FCD +CT=E27242BC80823BDC09C33C1BDB2EA3BE + +I=303 +KEY=9C88F101B483F8399CAE84376D9488D4FACE0185D930DECD +PT=E27242BC80823BDC09C33C1BDB2EA3BE +CT=7ABF9BD872F54E12FB7F0B11A6D10472 + +I=304 +KEY=971A26707E5B8BC2E6111FEF1F61C6C601B10A947FE1DABF +PT=7ABF9BD872F54E12FB7F0B11A6D10472 +CT=336653E5166F1B4146DBEAED74D72BB7 + +I=305 +KEY=1FFD085658F88F24D5774C0A090EDD87476AE0790B36F108 +PT=336653E5166F1B4146DBEAED74D72BB7 +CT=4849136D0509CE6C404E5685FBEEE9B8 + +I=306 +KEY=411DF55702805FE69D3E5F670C0713EB0724B6FCF0D818B0 +PT=4849136D0509CE6C404E5685FBEEE9B8 +CT=6CF8DCFD53E2ED214A449398D8BF0F6C + +I=307 +KEY=504BFF39E24E870FF1C6839A5FE5FECA4D602564286717DC +PT=6CF8DCFD53E2ED214A449398D8BF0F6C +CT=9C8326B89B3054A46ECA3BB76BC2F292 + +I=308 +KEY=E4F4B55125D2D1056D45A522C4D5AA6E23AA1ED343A5E54E +PT=9C8326B89B3054A46ECA3BB76BC2F292 +CT=C85479C9E038BA5495F67D6E8B2BEB64 + +I=309 +KEY=F2E9B605207E0FD4A511DCEB24ED103AB65C63BDC88E0E2A +PT=C85479C9E038BA5495F67D6E8B2BEB64 +CT=145607ACFFA06C08AB958DCB7BC0BDBC + +I=310 +KEY=CC0D3F478519145BB147DB47DB4D7C321DC9EE76B34EB396 +PT=145607ACFFA06C08AB958DCB7BC0BDBC +CT=ED7EE0DA132D9964BE5E7B2581C3C270 + +I=311 +KEY=EB3AFCDD9AAB59705C393B9DC860E556A3979553328D71E6 +PT=ED7EE0DA132D9964BE5E7B2581C3C270 +CT=6B576FD09F34ED38774AA383BB88B385 + +I=312 +KEY=866ECC1B3691532D376E544D5754086ED4DD36D08905C263 +PT=6B576FD09F34ED38774AA383BB88B385 +CT=E540518151453A18C29BE22B5DE84D5B + +I=313 +KEY=2B3BF12A0A10E6F9D22E05CC061132761646D4FBD4ED8F38 +PT=E540518151453A18C29BE22B5DE84D5B +CT=7865DE74099D486ECB584BE7890F3078 + +I=314 +KEY=3C6EA741634001E0AA4BDBB80F8C7A18DD1E9F1C5DE2BF40 +PT=7865DE74099D486ECB584BE7890F3078 +CT=5226B72FA16653187980D265EB6C7C6D + +I=315 +KEY=A32E19E0F06CB649F86D6C97AEEA2900A49E4D79B68EC32D +PT=5226B72FA16653187980D265EB6C7C6D +CT=CA0D39D92B042BECABF7A14115B3A307 + +I=316 +KEY=E48451707115D4A03260554E85EE02EC0F69EC38A33D602A +PT=CA0D39D92B042BECABF7A14115B3A307 +CT=EC1658D60F1D94EF514FA8EDADAB3C1D + +I=317 +KEY=89A589616229672BDE760D988AF396035E2644D50E965C37 +PT=EC1658D60F1D94EF514FA8EDADAB3C1D +CT=F278CD13BF2C6A1F2D9A9F0C1113205D + +I=318 +KEY=6013E84EFD076E402C0EC08B35DFFC1C73BCDBD91F857C6A +PT=F278CD13BF2C6A1F2D9A9F0C1113205D +CT=0B1A35F604DDB043BCD0573DC0850AF0 + +I=319 +KEY=68BCE1DC00C592E22714F57D31024C5FCF6C8CE4DF00769A +PT=0B1A35F604DDB043BCD0573DC0850AF0 +CT=EAC4FE6F8A04871AC434322CB06308E3 + +I=320 +KEY=1BE682363F216340CDD00B12BB06CB450B58BEC86F637E79 +PT=EAC4FE6F8A04871AC434322CB06308E3 +CT=64B6BA31C6B15BE040DC2C0A07FFE60F + +I=321 +KEY=2082C6C0D49B4DECA966B1237DB790A54B8492C2689C9876 +PT=64B6BA31C6B15BE040DC2C0A07FFE60F +CT=5ECDC37FEA4176145C6A308F91659D43 + +I=322 +KEY=23668EEA68987F8CF7AB725C97F6E6B117EEA24DF9F90535 +PT=5ECDC37FEA4176145C6A308F91659D43 +CT=BB25C81945A062A7D53531593D9910F6 + +I=323 +KEY=10B544566773DD5F4C8EBA45D2568416C2DB9314C46015C3 +PT=BB25C81945A062A7D53531593D9910F6 +CT=48D98FFFC4E378D42CFC785B53DFC38D + +I=324 +KEY=7F96DD27E1C0B7B7045735BA16B5FCC2EE27EB4F97BFD64E +PT=48D98FFFC4E378D42CFC785B53DFC38D +CT=7DCE20BAE8345CB68103461B4AFA9F09 + +I=325 +KEY=A73354FC47570B2679991500FE81A0746F24AD54DD454947 +PT=7DCE20BAE8345CB68103461B4AFA9F09 +CT=099B315B4DD55CAB5D02163154DA521C + +I=326 +KEY=92A57B873A1D292F7002245BB354FCDF3226BB65899F1B5B +PT=099B315B4DD55CAB5D02163154DA521C +CT=37207C17099989D3EA0D13DBD6DF7FEF + +I=327 +KEY=7048AF52E1763E8E4722584CBACD750CD82BA8BE5F4064B4 +PT=37207C17099989D3EA0D13DBD6DF7FEF +CT=7CE37081A6751A1518F03B70FBC1479D + +I=328 +KEY=24E37AF6A4BC72403BC128CD1CB86F19C0DB93CEA4812329 +PT=7CE37081A6751A1518F03B70FBC1479D +CT=201BBD8456F70ED0BB4E19A7AE36F1A6 + +I=329 +KEY=17E541A643CB8EE01BDA95494A4F61C97B958A690AB7D28F +PT=201BBD8456F70ED0BB4E19A7AE36F1A6 +CT=3384168E4F022049B0E3AD6899B71DC9 + +I=330 +KEY=31D5A160B61690A0285E83C7054D4180CB7627019300CF46 +PT=3384168E4F022049B0E3AD6899B71DC9 +CT=C83AA6AE617CB17E2977D394EBC4AD19 + +I=331 +KEY=6EBA775B83D704AAE06425696431F0FEE201F49578C4625F +PT=C83AA6AE617CB17E2977D394EBC4AD19 +CT=8AC467890AF8E729C7A86A471ADEB378 + +I=332 +KEY=C1237F715488582E6AA042E06EC917D725A99ED2621AD127 +PT=8AC467890AF8E729C7A86A471ADEB378 +CT=B89CE4F733A9D67C8E504BC4BC2F7664 + +I=333 +KEY=0A9E4BDAD3E856F1D23CA6175D60C1ABABF9D516DE35A743 +PT=B89CE4F733A9D67C8E504BC4BC2F7664 +CT=47B421469B794A5188255ACE84D89721 + +I=334 +KEY=4BE367B885F7AF9195888751C6198BFA23DC8FD85AED3062 +PT=47B421469B794A5188255ACE84D89721 +CT=B6B09DBF9E62C60951368C9C8B63A860 + +I=335 +KEY=CDFB62995E4C5D4E23381AEE587B4DF372EA0344D18E9802 +PT=B6B09DBF9E62C60951368C9C8B63A860 +CT=68933B4BD0BC23EB3178347DFE68E7F6 + +I=336 +KEY=8887EBF40DE51F064BAB21A588C76E18439237392FE67FF4 +PT=68933B4BD0BC23EB3178347DFE68E7F6 +CT=C6F16CDDF00C982A927609B559B0BCBD + +I=337 +KEY=221D949B8CA9F4C48D5A4D7878CBF632D1E43E8C7656C349 +PT=C6F16CDDF00C982A927609B559B0BCBD +CT=CBEE831F7623E3214E72AF57706525C7 + +I=338 +KEY=3D35666DACEFF3C846B4CE670EE815139F9691DB0633E68E +PT=CBEE831F7623E3214E72AF57706525C7 +CT=DFE0297AE9B69F0AD69D6189C1447333 + +I=339 +KEY=43370C9C958216DC9954E71DE75E8A19490BF052C77795BD +PT=DFE0297AE9B69F0AD69D6189C1447333 +CT=59C3B4D6055B9F73064B715CD5213C99 + +I=340 +KEY=DF43233D68EE5C4AC09753CBE205156A4F40810E1256A924 +PT=59C3B4D6055B9F73064B715CD5213C99 +CT=5373F13BB16B3653FCC138FC9A9E8A47 + +I=341 +KEY=472E0A65B06B4F4693E4A2F0536E2339B381B9F288C82363 +PT=5373F13BB16B3653FCC138FC9A9E8A47 +CT=9C7514B7FEDF2DC26B0C2C1954745077 + +I=342 +KEY=1409E4DF955583A00F91B647ADB10EFBD88D95EBDCBC7314 +PT=9C7514B7FEDF2DC26B0C2C1954745077 +CT=2480D7C35D6B0207D84A9CEFA1C2CFDC + +I=343 +KEY=458552CAB6B1A8AC2B116184F0DA0CFC00C709047D7EBCC8 +PT=2480D7C35D6B0207D84A9CEFA1C2CFDC +CT=46DE3E51F1355FA76652C8DA3642409B + +I=344 +KEY=2065D6F033E1EE2E6DCF5FD501EF535B6695C1DE4B3CFC53 +PT=46DE3E51F1355FA76652C8DA3642409B +CT=13F328173D057A64DA3917468528DB4F + +I=345 +KEY=6D30053E2C95BC5A7E3C77C23CEA293FBCACD698CE14271C +PT=13F328173D057A64DA3917468528DB4F +CT=33D71B6CD0A68B685C89C9F2D70FDFCE + +I=346 +KEY=59D69C2D25BFB6A34DEB6CAEEC4CA257E0251F6A191BF8D2 +PT=33D71B6CD0A68B685C89C9F2D70FDFCE +CT=8E9F57B5E945CD7DFC2B9FCD5AF96DFB + +I=347 +KEY=F41ABD021E5C144EC3743B1B05096F2A1C0E80A743E29529 +PT=8E9F57B5E945CD7DFC2B9FCD5AF96DFB +CT=71295B41B9E5872E1BD4D5C3C4C62D71 + +I=348 +KEY=41C1194732CD4654B25D605ABCECE80407DA55648724B858 +PT=71295B41B9E5872E1BD4D5C3C4C62D71 +CT=E704FBBAA917788CE906A54B2A56A232 + +I=349 +KEY=AF58932371569CE655599BE015FB9088EEDCF02FAD721A6A +PT=E704FBBAA917788CE906A54B2A56A232 +CT=8DBA56CF3E019B8EA80CCB772551CA5B + +I=350 +KEY=B1E68A05A144F4FAD8E3CD2F2BFA0B0646D03B588823D031 +PT=8DBA56CF3E019B8EA80CCB772551CA5B +CT=18F8A23F785AFEFC4ECD527AC6DBE609 + +I=351 +KEY=456D39FF40B1622BC01B6F1053A0F5FA081D69224EF83638 +PT=18F8A23F785AFEFC4ECD527AC6DBE609 +CT=073F93A707D6B9A82E99990CB13BD00E + +I=352 +KEY=1FF446993B6927C6C724FCB754764C522684F02EFFC3E636 +PT=073F93A707D6B9A82E99990CB13BD00E +CT=76723E1239356EDC37FB5E1EAFDF4678 + +I=353 +KEY=0DED89E36C3B06B9B156C2A56D43228E117FAE30501CA04E +PT=76723E1239356EDC37FB5E1EAFDF4678 +CT=1B57D35B4E2484D3945B82D59114A531 + +I=354 +KEY=E433448EB970D64FAA0111FE2367A65D85242CE5C108057F +PT=1B57D35B4E2484D3945B82D59114A531 +CT=4466DCB75F6B83885EE32D9FD533A902 + +I=355 +KEY=3751EC4737F029E3EE67CD497C0C25D5DBC7017A143BAC7D +PT=4466DCB75F6B83885EE32D9FD533A902 +CT=A8B62B9FCAA9331A3282899DB475AADE + +I=356 +KEY=6C1042FACD259CC346D1E6D6B6A516CFE94588E7A04E06A3 +PT=A8B62B9FCAA9331A3282899DB475AADE +CT=DFE1CB42B29F119E44F37F60A8C2BD7C + +I=357 +KEY=640D2DB3E708999A99302D94043A0751ADB6F787088CBBDF +PT=DFE1CB42B29F119E44F37F60A8C2BD7C +CT=891B211EE1BEA05AD7BA478FDFEBC507 + +I=358 +KEY=C434FF9BD02BDF6C102B0C8AE584A70B7A0CB008D7677ED8 +PT=891B211EE1BEA05AD7BA478FDFEBC507 +CT=16ABB92A1E0F433250C551F84AE177CF + +I=359 +KEY=22A76DAFC8A7748E0680B5A0FB8BE4392AC9E1F09D860917 +PT=16ABB92A1E0F433250C551F84AE177CF +CT=1A2F4BF6ED0CADB7FA3FC52F3C6AF191 + +I=360 +KEY=5DDEDF839CF5C0D11CAFFE561687498ED0F624DFA1ECF886 +PT=1A2F4BF6ED0CADB7FA3FC52F3C6AF191 +CT=16AE687EE38FB85C0F70E20F5585F750 + +I=361 +KEY=13D0157C6A30C26C0A019628F508F1D2DF86C6D0F4690FD6 +PT=16AE687EE38FB85C0F70E20F5585F750 +CT=6CD2D70F641B2A7814014177C4880107 + +I=362 +KEY=6DBFF188E61696C966D341279113DBAACB8787A730E10ED1 +PT=6CD2D70F641B2A7814014177C4880107 +CT=8CAD28041AE53AA64CE0173DBD9046C2 + +I=363 +KEY=44A13B269C44F018EA7E69238BF6E10C8767909A8D714813 +PT=8CAD28041AE53AA64CE0173DBD9046C2 +CT=FC8D4274BA1EF15CC39E750DD1848F7B + +I=364 +KEY=B7A8311B81A3B82C16F32B5731E8105044F9E5975CF5C768 +PT=FC8D4274BA1EF15CC39E750DD1848F7B +CT=01CBDAEAADE486CF655401D8F7F7E84E + +I=365 +KEY=A3AC668823C917DE1738F1BD9C0C969F21ADE44FAB022F26 +PT=01CBDAEAADE486CF655401D8F7F7E84E +CT=494C3219700E06EE9C4DCB61EF932FDF + +I=366 +KEY=05CC07DC3CBB1A4B5E74C3A4EC029071BDE02F2E449100F9 +PT=494C3219700E06EE9C4DCB61EF932FDF +CT=BB0E7D5CD93B1839DF5CAED7996F9560 + +I=367 +KEY=8768468EFC3CE954E57ABEF83539884862BC81F9DDFE9599 +PT=BB0E7D5CD93B1839DF5CAED7996F9560 +CT=CC1F9A504A67C24621ED127C63AE2A36 + +I=368 +KEY=470E251F98662CEC296524A87F5E4A0E43519385BE50BFAF +PT=CC1F9A504A67C24621ED127C63AE2A36 +CT=A48D3751956B71F925680073B35BC0A3 + +I=369 +KEY=533C67C061CE6B9E8DE813F9EA353BF7663993F60D0B7F0C +PT=A48D3751956B71F925680073B35BC0A3 +CT=80143AC021E94718146EBC7808A9DDD8 + +I=370 +KEY=0303563B9274349D0DFC2939CBDC7CEF72572F8E05A2A2D4 +PT=80143AC021E94718146EBC7808A9DDD8 +CT=B90AC6ADEE1B60228096D022EE5C681B + +I=371 +KEY=1E7D3A52CC112BDCB4F6EF9425C71CCDF2C1FFACEBFECACF +PT=B90AC6ADEE1B60228096D022EE5C681B +CT=CB8553B21250642107E824E8FB27CAEA + +I=372 +KEY=750A36009059323E7F73BC26379778ECF529DB4410D90025 +PT=CB8553B21250642107E824E8FB27CAEA +CT=9C86DA9646FCFEA7E778A5498F50E01E + +I=373 +KEY=6876C614C460B02CE3F566B0716B864B12517E0D9F89E03B +PT=9C86DA9646FCFEA7E778A5498F50E01E +CT=1481357AD5690762FD6F3809F1E5F219 + +I=374 +KEY=7CE6B00F6B651FAEF77453CAA4028129EF3E46046E6C1222 +PT=1481357AD5690762FD6F3809F1E5F219 +CT=39B64998D4370E0CB47C1DC23EDCDD03 + +I=375 +KEY=C3F72A84EF6F4A0CCEC21A5270358F255B425BC650B0CF21 +PT=39B64998D4370E0CB47C1DC23EDCDD03 +CT=EB1BA96272D7BB044A3381439BA4CD5B + +I=376 +KEY=C670185A26E7DA4A25D9B33002E234211171DA85CB14027A +PT=EB1BA96272D7BB044A3381439BA4CD5B +CT=F87EC3D7F55DA25790718E461BA2E194 + +I=377 +KEY=72ECF820AC459D8DDDA770E7F7BF9676810054C3D0B6E3EE +PT=F87EC3D7F55DA25790718E461BA2E194 +CT=AD7EA1621AD7FBA975D6BB0AB9AED116 + +I=378 +KEY=CE4ECAD1C7D17D1170D9D185ED686DDFF4D6EFC9691832F8 +PT=AD7EA1621AD7FBA975D6BB0AB9AED116 +CT=473B6484F6EAE1FC837A2710AE8D462F + +I=379 +KEY=3273752C9A8682F237E2B5011B828C2377ACC8D9C79574D7 +PT=473B6484F6EAE1FC837A2710AE8D462F +CT=0E3634529E49692762F4D80333738045 + +I=380 +KEY=8C2CFBB98A4E5E3839D4815385CBE504155810DAF4E6F492 +PT=0E3634529E49692762F4D80333738045 +CT=F8EFEBD78C115CC620F25AB66038F2A0 + +I=381 +KEY=0416DBCAFA0850D8C13B6A8409DAB9C235AA4A6C94DE0632 +PT=F8EFEBD78C115CC620F25AB66038F2A0 +CT=B4442C38E3B8E87D8AAE2C17A5571CE9 + +I=382 +KEY=7A7815A748696E99757F46BCEA6251BFBF04667B31891ADB +PT=B4442C38E3B8E87D8AAE2C17A5571CE9 +CT=576A20E194015AB069D769FCA7D842FC + +I=383 +KEY=3848903CD019B4572215665D7E630B0FD6D30F8796515827 +PT=576A20E194015AB069D769FCA7D842FC +CT=E253D9FB4075B021DF452B3AD51204D6 + +I=384 +KEY=3E468D281DF03284C046BFA63E16BB2E099624BD43435CF1 +PT=E253D9FB4075B021DF452B3AD51204D6 +CT=D9454AE62207E70A34F13B0063498A8F + +I=385 +KEY=860E4E60B132A8851903F5401C115C243D671FBD200AD67E +PT=D9454AE62207E70A34F13B0063498A8F +CT=A21F7DA8A298670D631F677D23504757 + +I=386 +KEY=27B82EDF5FFD15DDBB1C88E8BE893B295E7878C0035A9129 +PT=A21F7DA8A298670D631F677D23504757 +CT=1D239EFBABD09A029FE11C59A385C909 + +I=387 +KEY=631BCB74800FD13AA63F16131559A12BC1996499A0DF5820 +PT=1D239EFBABD09A029FE11C59A385C909 +CT=C87EB2AB019AFA608BE99CE77717B333 + +I=388 +KEY=EE1326871289985E6E41A4B814C35B4B4A70F87ED7C8EB13 +PT=C87EB2AB019AFA608BE99CE77717B333 +CT=528DBF70307431E33815D1AA44C30FA8 + +I=389 +KEY=F1D72A84C2FE044F3CCC1BC824B76AA8726529D4930BE4BB +PT=528DBF70307431E33815D1AA44C30FA8 +CT=6C8014B427ED6331A5C174CF2846B70A + +I=390 +KEY=A1610602C8DD2836504C0F7C035A0999D7A45D1BBB4D53B1 +PT=6C8014B427ED6331A5C174CF2846B70A +CT=3DF4C4BE003A13030E73026F7027ADB1 + +I=391 +KEY=B2418E725A1435DD6DB8CBC203601A9AD9D75F74CB6AFE00 +PT=3DF4C4BE003A13030E73026F7027ADB1 +CT=39C50365300DCC5B47F827054879C642 + +I=392 +KEY=761AF29E74671706547DC8A7336DD6C19E2F787183133842 +PT=39C50365300DCC5B47F827054879C642 +CT=847F488B3CEC2E1E4E1C6B9F37E4F631 + +I=393 +KEY=C912116E7B47169AD002802C0F81F8DFD03313EEB4F7CE73 +PT=847F488B3CEC2E1E4E1C6B9F37E4F631 +CT=9A581179C883C5E057CC560A3DF6CD34 + +I=394 +KEY=B08B1226353C6BD34A5A9155C7023D3F87FF45E489010347 +PT=9A581179C883C5E057CC560A3DF6CD34 +CT=799B437C3EF3663EFBD6F186EDFDF21A + +I=395 +KEY=1ECAE821E161A2C833C1D229F9F15B017C29B46264FCF15D +PT=799B437C3EF3663EFBD6F186EDFDF21A +CT=138A858B14FE28D9A47C76BB3FAE9AA1 + +I=396 +KEY=3AD2B951E451EEA8204B57A2ED0F73D8D855C2D95B526BFC +PT=138A858B14FE28D9A47C76BB3FAE9AA1 +CT=5E35BC76C5AC8765A6C396DFE5689579 + +I=397 +KEY=791E5F91477E986E7E7EEBD428A3F4BD7E965406BE3AFE85 +PT=5E35BC76C5AC8765A6C396DFE5689579 +CT=53F8361BF47A82EF27492322BA6F57AD + +I=398 +KEY=194A170B3D4FA6E62D86DDCFDCD9765259DF77240455A928 +PT=53F8361BF47A82EF27492322BA6F57AD +CT=FF626D77AE144C11480610EC1ABB5028 + +I=399 +KEY=C9DC82F000187721D2E4B0B872CD3A4311D967C81EEEF900 +PT=FF626D77AE144C11480610EC1ABB5028 +CT=4E46F8C5092B29E29A971A0CD1F610FB + +========================= + +KEYSIZE=256 + +I=0 +KEY=0000000000000000000000000000000000000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=8B79EECC93A0EE5DFF30B4EA21636DA4 + +I=1 +KEY=AD3965683E6FA98B5F38AC26653679288B79EECC93A0EE5DFF30B4EA21636DA4 +PT=8B79EECC93A0EE5DFF30B4EA21636DA4 +CT=C737317FE0846F132B23C8C2A672CE22 + +I=2 +KEY=28E79E2AFC5F7745FCCABE2F6257C2EF4C4EDFB37324814ED4137C288711A386 +PT=C737317FE0846F132B23C8C2A672CE22 +CT=E58B82BFBA53C0040DC610C642121168 + +I=3 +KEY=0721E93EACF9DC6C870D8133376B7C0DA9C55D0CC977414AD9D56CEEC503B2EE +PT=E58B82BFBA53C0040DC610C642121168 +CT=10B296ABB40504995DB71DDA0B7E26FB + +I=4 +KEY=0ECE1E210ADA32EBC497AD50F516602EB977CBA77D7245D384627134CE7D9415 +PT=10B296ABB40504995DB71DDA0B7E26FB +CT=B7198D8E88BAA25234C18517E99BB70D + +I=5 +KEY=D31313ACD90A9BB7D6596DEAB752003F0E6E4629F5C8E781B0A3F42327E62318 +PT=B7198D8E88BAA25234C18517E99BB70D +CT=6125097DB5738C64513E125872EA436C + +I=6 +KEY=488B6A78D9AA23FEA7289E250928BDE36F4B4F5440BB6BE5E19DE67B550C6074 +PT=6125097DB5738C64513E125872EA436C +CT=07FF2ED24B522F1E31D46E94BE5C505B + +I=7 +KEY=03DDD56B142AD3B0E4FFD2BAC6568E5468B461860BE944FBD04988EFEB50302F +PT=07FF2ED24B522F1E31D46E94BE5C505B +CT=EB3C1E3328F840B110E934B0129F2F23 + +I=8 +KEY=20F9D92C65B2F00183464197B23BE5AF83887FB52311044AC0A0BC5FF9CF1F0C +PT=EB3C1E3328F840B110E934B0129F2F23 +CT=107CB7B403DC3F6F09EC30EC1718D183 + +I=9 +KEY=79CF0BCF8EFE3DE82E27778923D1AA1993F4C80120CD3B25C94C8CB3EED7CE8F +PT=107CB7B403DC3F6F09EC30EC1718D183 +CT=CE9DB77B1FAE0CFEC5341FA5AF4CDE8A + +I=10 +KEY=F50ADABA26525BFA7BF6EEF2402450785D697F7A3F6337DB0C789316419B1005 +PT=CE9DB77B1FAE0CFEC5341FA5AF4CDE8A +CT=157B5946862DA3E9A1A83E45857E207D + +I=11 +KEY=3B6947995411D0AE50645129D13BACC04812263CB94E9432ADD0AD53C4E53078 +PT=157B5946862DA3E9A1A83E45857E207D +CT=4AE3583491DF78918CAB3AC241286855 + +I=12 +KEY=AAD12F02F5E5681D16236B668EF2C46702F17E082891ECA3217B979185CD582D +PT=4AE3583491DF78918CAB3AC241286855 +CT=05400C32DC84F1AB486A9BADB1415B50 + +I=13 +KEY=EA02EB82D4B2112DD3BD64C1C908CEC307B1723AF4151D0869110C3C348C037D +PT=05400C32DC84F1AB486A9BADB1415B50 +CT=E4C0781A2EA68D142504739731EF396E + +I=14 +KEY=D51A1846DFEB738F0AF138F74C968DCCE3710A20DAB3901C4C157FAB05633A13 +PT=E4C0781A2EA68D142504739731EF396E +CT=44CC8A9C84E6AD66BD24F1EE1F925EC3 + +I=15 +KEY=B6401DFC35AF21E53CD254431CC639E9A7BD80BC5E553D7AF1318E451AF164D0 +PT=44CC8A9C84E6AD66BD24F1EE1F925EC3 +CT=20AF5FDDF65856D1A60ADC03567AE163 + +I=16 +KEY=D1D2E8B5644910077B3EDB245F029C0D8712DF61A80D6BAB573B52464C8B85B3 +PT=20AF5FDDF65856D1A60ADC03567AE163 +CT=CEB74DD6FBEAFDCEE54930D58AF22ACA + +I=17 +KEY=9F932DC2AB83FA5153E7081E7360ABB449A592B753E79665B2726293C679AF79 +PT=CEB74DD6FBEAFDCEE54930D58AF22ACA +CT=72FB3F7BBBDBA9C036C94531A32E937D + +I=18 +KEY=06AABCA83922297791C9D07AEB639BDD3B5EADCCE83C3FA584BB27A265573C04 +PT=72FB3F7BBBDBA9C036C94531A32E937D +CT=299B26D5D6DFA2C20824D8A84E98A244 + +I=19 +KEY=6124BC71768DE5E9C14D37915D90F1AE12C58B193EE39D678C9FFF0A2BCF9E40 +PT=299B26D5D6DFA2C20824D8A84E98A244 +CT=0A35C0D4170BDE0258D79B668C7C98F4 + +I=20 +KEY=282B067BD441670E11E576F26C4EA67D18F04BCD29E84365D448646CA7B306B4 +PT=0A35C0D4170BDE0258D79B668C7C98F4 +CT=F4E3E981FFC8B50FC9146B85A22E71D4 + +I=21 +KEY=2864E2A3986F99C55EC21C225E3498ECEC13A24CD620F66A1D5C0FE9059D7760 +PT=F4E3E981FFC8B50FC9146B85A22E71D4 +CT=130ACF4CEAFE3277DF057D4D170582ED + +I=22 +KEY=600FD4DFD03132B0DB7B2432DBE027C2FF196D003CDEC41DC25972A41298F58D +PT=130ACF4CEAFE3277DF057D4D170582ED +CT=50001D54F2EA5EAA3BE2206F3845D9A9 + +I=23 +KEY=C1CBE3A1679D6C1913EABE3400993100AF197054CE349AB7F9BB52CB2ADD2C24 +PT=50001D54F2EA5EAA3BE2206F3845D9A9 +CT=69F3EE4B230B2DB2492FE0E36B949154 + +I=24 +KEY=7C6C63E14606A0B09254A531CACB45A0C6EA9E1FED3FB705B094B2284149BD70 +PT=69F3EE4B230B2DB2492FE0E36B949154 +CT=CEEE40F3D2FD9A5521F44AD3AB55198D + +I=25 +KEY=22BB6E21BCA0450240DB117B028837AF0804DEEC3FC22D509160F8FBEA1CA4FD +PT=CEEE40F3D2FD9A5521F44AD3AB55198D +CT=1FA1F1AE7BF2A8C66A6ED6D5F276846B + +I=26 +KEY=7364D9AE40CBB0CCA6640B7E542DBA2617A52F4244308596FB0E2E2E186A2096 +PT=1FA1F1AE7BF2A8C66A6ED6D5F276846B +CT=6D5BD8391C73507D57B902AB3D58D228 + +I=27 +KEY=A2D8BF7602FCD22755ADA9979B2DD33B7AFEF77B5843D5EBACB72C852532F2BE +PT=6D5BD8391C73507D57B902AB3D58D228 +CT=15ACD05539318363F275C857FBC5D86C + +I=28 +KEY=3AD56A33CE89D8D3510C4152DEE734126F52272E617256885EC2E4D2DEF72AD2 +PT=15ACD05539318363F275C857FBC5D86C +CT=B54F8D944301A899A2A88440FE8AB631 + +I=29 +KEY=13ED08137C66C2000D3FE9E167387864DA1DAABA2273FE11FC6A6092207D9CE3 +PT=B54F8D944301A899A2A88440FE8AB631 +CT=23B4BF936BF383325F0DAF0548E32851 + +I=30 +KEY=3C2C53CCDB4721F44B6C057BF758361AF9A9152949807D23A367CF97689EB4B2 +PT=23B4BF936BF383325F0DAF0548E32851 +CT=8B4984C6F39C7FD543B4A8629EAC6740 + +I=31 +KEY=95E744B66044529E2DC2B06BF84FF3D672E091EFBA1C02F6E0D367F5F632D3F2 +PT=8B4984C6F39C7FD543B4A8629EAC6740 +CT=108834058381578E8AA7988E03942230 + +I=32 +KEY=E7715B09238876A93F9858D9548CBEA56268A5EA399D55786A74FF7BF5A6F1C2 +PT=108834058381578E8AA7988E03942230 +CT=EE3974A2ECEA5A1E6FC09535323BFF29 + +I=33 +KEY=08F25145082684F576933E4DF5C63DFE8C51D148D5770F6605B46A4EC79D0EEB +PT=EE3974A2ECEA5A1E6FC09535323BFF29 +CT=1AC80F42E3529BCA587D4EA828BD3631 + +I=34 +KEY=93D63C9069B415595934FA66C76A9CD09699DE0A362594AC5DC924E6EF2038DA +PT=1AC80F42E3529BCA587D4EA828BD3631 +CT=E196DF1E8A0DE844EBD3FD84B307EEB6 + +I=35 +KEY=0F5E4A3907A7BC56AAC2CB6F6871674C770F0114BC287CE8B61AD9625C27D66C +PT=E196DF1E8A0DE844EBD3FD84B307EEB6 +CT=917AC29C88967EE5C792E72B046A4399 + +I=36 +KEY=B935C42A3A93D1E45E94CBE1E232A135E675C38834BE020D71883E49584D95F5 +PT=917AC29C88967EE5C792E72B046A4399 +CT=9CE3D545895005F3EC432699F17FFDA2 + +I=37 +KEY=CC3C0DCF9E6E91BE48B7F7AE251D1CB37A9616CDBDEE07FE9DCB18D0A9326857 +PT=9CE3D545895005F3EC432699F17FFDA2 +CT=089F0D41397E27B04D3268834ADF932C + +I=38 +KEY=29AB63D0AB0E237BA75D250BC67E362472091B8C8490204ED0F97053E3EDFB7B +PT=089F0D41397E27B04D3268834ADF932C +CT=9C364B0CC209389C00824505226B8989 + +I=39 +KEY=7FB99ABACCC92D9C8B17CC0066F02F39EE3F5080469918D2D07B3556C18672F2 +PT=9C364B0CC209389C00824505226B8989 +CT=767FB14493BE17A29839FBF115B9B38B + +I=40 +KEY=DB08EEBD184AEEB002302A3C41E5595B9840E1C4D5270F704842CEA7D43FC179 +PT=767FB14493BE17A29839FBF115B9B38B +CT=CBEC5B7FB05D673C19EBF0F4B647CDB5 + +I=41 +KEY=F7C517C27F319857F1D9DA5D29B6B76353ACBABB657A684C51A93E5362780CCC +PT=CBEC5B7FB05D673C19EBF0F4B647CDB5 +CT=9721CB9555EF079ADD547D8DE09CC0C7 + +I=42 +KEY=47D5164E15743853C8B0E55ED3A965D6C48D712E30956FD68CFD43DE82E4CC0B +PT=9721CB9555EF079ADD547D8DE09CC0C7 +CT=5B16109122E874A08A2A48D5B5753256 + +I=43 +KEY=152E7EF1B0FAD417DA84B4FA0AB560DB9F9B61BF127D1B7606D70B0B3791FE5D +PT=5B16109122E874A08A2A48D5B5753256 +CT=198A9B7C41C225334176614A16F1D7CB + +I=44 +KEY=81BB271A9F0CE56E452C9FBE4CF09FF88611FAC353BF3E4547A16A4121602996 +PT=198A9B7C41C225334176614A16F1D7CB +CT=56E255DB999AFA713020C4E987F4433B + +I=45 +KEY=A654ABA71B351BCBFD1CB03B5F88CE1AD0F3AF18CA25C4347781AEA8A6946AAD +PT=56E255DB999AFA713020C4E987F4433B +CT=7BF8470233D197839D4FC1B365E79C8D + +I=46 +KEY=C700B39660C3C72E15E278B2D22DD528AB0BE81AF9F453B7EACE6F1BC373F620 +PT=7BF8470233D197839D4FC1B365E79C8D +CT=D7CDF94CBBE5E7EF7E47E4CE9BD5E073 + +I=47 +KEY=C49B1589810F1915998C8C79CA2382D87CC611564211B45894898BD558A61653 +PT=D7CDF94CBBE5E7EF7E47E4CE9BD5E073 +CT=A5617B71AF28E732A0B69BFA3B90F291 + +I=48 +KEY=D37A9390FD2C8D4D01704352BAFC2EE2D9A76A27ED39536A343F102F6336E4C2 +PT=A5617B71AF28E732A0B69BFA3B90F291 +CT=156D08F6A2AC3F7202DBEE15D53C8BCD + +I=49 +KEY=E4E2958608635DF83B8E39FD503356D5CCCA62D14F956C1836E4FE3AB60A6F0F +PT=156D08F6A2AC3F7202DBEE15D53C8BCD +CT=1790CB4B9B4E01F4CA3AAB588A3B7A51 + +I=50 +KEY=B0F77AF53FB1FAF66A421093111DC925DB5AA99AD4DB6DECFCDE55623C31155E +PT=1790CB4B9B4E01F4CA3AAB588A3B7A51 +CT=5E2DC515FE9BAE8F16188DC052C63A80 + +I=51 +KEY=487CA8ECBA3E2CAF61A16285005F01F685776C8F2A40C363EAC6D8A26EF72FDE +PT=5E2DC515FE9BAE8F16188DC052C63A80 +CT=A625E46D2DA293F536D25C9207090AA5 + +I=52 +KEY=410909F6119DDA628537B825D24E8DF9235288E207E25096DC14843069FE257B +PT=A625E46D2DA293F536D25C9207090AA5 +CT=FEFCF38ABD12EAAD37F3AE73BC4B4A8C + +I=53 +KEY=F1027D98B61D2F383BCF60A83D317D03DDAE7B68BAF0BA3BEBE72A43D5B56FF7 +PT=FEFCF38ABD12EAAD37F3AE73BC4B4A8C +CT=76D8221C2AAD44D226C769875A93CDA8 + +I=54 +KEY=DDA104019F122286887545C85F6B09B1AB765974905DFEE9CD2043C48F26A25F +PT=76D8221C2AAD44D226C769875A93CDA8 +CT=DE7FBEB010089D7EE0A1BD18F3461AEE + +I=55 +KEY=46CE686778BA955831B63F2ACFE397747509E7C4805563972D81FEDC7C60B8B1 +PT=DE7FBEB010089D7EE0A1BD18F3461AEE +CT=A8B0824BD1FC52D92AFA0B4B23ABDEBD + +I=56 +KEY=EF1408D365E549B808DADADE3D4CBCDADDB9658F51A9314E077BF5975FCB660C +PT=A8B0824BD1FC52D92AFA0B4B23ABDEBD +CT=93AC85EE8DE4091894F0E1800A0DF443 + +I=57 +KEY=8E8FC86B7F82A57799FE32DD1C748C8D4E15E061DC4D3856938B141755C6924F +PT=93AC85EE8DE4091894F0E1800A0DF443 +CT=0FAE963D9B74341316D7EA8862D0766F + +I=58 +KEY=D3900458ABB1ACCE0707A49565D27C4C41BB765C47390C45855CFE9F3716E420 +PT=0FAE963D9B74341316D7EA8862D0766F +CT=37930DFBC771510D0BBDCBFAB2A5852F + +I=59 +KEY=C55EE2F5633DE3E7EF3710C6C143AA7076287BA780485D488EE1356585B3610F +PT=37930DFBC771510D0BBDCBFAB2A5852F +CT=9C3B82D06CB9378F6CBBF6325B456A8B + +I=60 +KEY=AA16073435B24614EB1E9AE81FD921F0EA13F977ECF16AC7E25AC357DEF60B84 +PT=9C3B82D06CB9378F6CBBF6325B456A8B +CT=2DB135F2599323714B4D0E66562FAF48 + +I=61 +KEY=033F102BFB13F9F84A4E9FC0C6F52AC8C7A2CC85B56249B6A917CD3188D9A4CC +PT=2DB135F2599323714B4D0E66562FAF48 +CT=130D64DC60EE70F07F6A68F26A9B5E19 + +I=62 +KEY=60D36FD89196DB13031E829B54615707D4AFA859D58C3946D67DA5C3E242FAD5 +PT=130D64DC60EE70F07F6A68F26A9B5E19 +CT=E4E5C4A1E2A0DC99EEC583E311824371 + +I=63 +KEY=532BC273D1843EB5CC1DE01D28684454304A6CF8372CE5DF38B82620F3C0B9A4 +PT=E4E5C4A1E2A0DC99EEC583E311824371 +CT=72CCE240749A6BFD0A93CDCBE2589B41 + +I=64 +KEY=DAE91111E43D9DF4A0F44C27A6B1AB0842868EB843B68E22322BEBEB119822E5 +PT=72CCE240749A6BFD0A93CDCBE2589B41 +CT=300F85629B48F47444D2AA51EBAAD16C + +I=65 +KEY=5C7C95B43BEA70F20A5C490F9A9F716372890BDAD8FE7A5676F941BAFA32F389 +PT=300F85629B48F47444D2AA51EBAAD16C +CT=89278608A583E1243704B39AB9C0F30C + +I=66 +KEY=5B64FDB468399A031D5745325331C2E8FBAE8DD27D7D9B7241FDF22043F20085 +PT=89278608A583E1243704B39AB9C0F30C +CT=71B74D5FAA4558A59F3BC91AA564579A + +I=67 +KEY=0166230CCF036B4B22C63D36F71C3CF58A19C08DD738C3D7DEC63B3AE696571F +PT=71B74D5FAA4558A59F3BC91AA564579A +CT=7B433C70951E4BD140FF7A0CBF367429 + +I=68 +KEY=D7A12389D7DD5DE963841B344315ADF9F15AFCFD422688069E39413659A02336 +PT=7B433C70951E4BD140FF7A0CBF367429 +CT=B0BE67EBCD672549AF03D323AF026FFF + +I=69 +KEY=A3EC2E92C58FE150F708C6FAEB1F459E41E49B168F41AD4F313A9215F6A24CC9 +PT=B0BE67EBCD672549AF03D323AF026FFF +CT=99A829A7C5C7CD6A44C7EABA9A5421C7 + +I=70 +KEY=CC3F7485BF8460CB1EA0AA3C20553644D84CB2B14A86602575FD78AF6CF66D0E +PT=99A829A7C5C7CD6A44C7EABA9A5421C7 +CT=76E1A70AF79F89CFE68EAF15DC0E9BC5 + +I=71 +KEY=17DC64F06B3A2941A21AE58E2FFAB363AEAD15BBBD19E9EA9373D7BAB0F8F6CB +PT=76E1A70AF79F89CFE68EAF15DC0E9BC5 +CT=DB0805B5DCC1CA2CA7489C8E1237E7A2 + +I=72 +KEY=DC7128E894C9DA167D0ACED5888F846275A5100E61D823C6343B4B34A2CF1169 +PT=DB0805B5DCC1CA2CA7489C8E1237E7A2 +CT=935D409B87A85A2CFCC09DE3D2A9A294 + +I=73 +KEY=8073895C9316D299F4F32C602F2F2616E6F85095E67079EAC8FBD6D77066B3FD +PT=935D409B87A85A2CFCC09DE3D2A9A294 +CT=F22B73EFF24249CBCB31BDC7C126B735 + +I=74 +KEY=99E16793433652800ABAD7000638560914D3237A1432302103CA6B10B14004C8 +PT=F22B73EFF24249CBCB31BDC7C126B735 +CT=A16A380AE9B3F2B0AE39BB0E24BF7C0A + +I=75 +KEY=8F77C5E97DA567CC447B52F45175BC74B5B91B70FD81C291ADF3D01E95FF78C2 +PT=A16A380AE9B3F2B0AE39BB0E24BF7C0A +CT=9CF088DE60AE87687481C9F217E86A7C + +I=76 +KEY=DA1B3C2C424D2BC6A1C7A3D18D41C3F5294993AE9D2F45F9D97219EC821712BE +PT=9CF088DE60AE87687481C9F217E86A7C +CT=1C8B68951E65E32E77F1A31571351C1B + +I=77 +KEY=3D64F3D4BF8F585917273805AA43DCD735C2FB3B834AA6D7AE83BAF9F3220EA5 +PT=1C8B68951E65E32E77F1A31571351C1B +CT=4AD3F3B0C15D810F0EA0FF62C6B2D0FE + +I=78 +KEY=51D61FB1B31EB55C7AA2D918E7BE32A97F11088B421727D8A023459B3590DE5B +PT=4AD3F3B0C15D810F0EA0FF62C6B2D0FE +CT=0DFCF7CA661572E050C522AE554A4BF8 + +I=79 +KEY=B93510F7689FB9856194CF629EF63AAA72EDFF4124025538F0E6673560DA95A3 +PT=0DFCF7CA661572E050C522AE554A4BF8 +CT=7C185A5A68675DAC7A16C8DDE4B8CF8B + +I=80 +KEY=8496679D7598A1B91D2F221CF958F90B0EF5A51B4C6508948AF0AFE884625A28 +PT=7C185A5A68675DAC7A16C8DDE4B8CF8B +CT=88FDDDA7BC2B09E48598A94474C64DC7 + +I=81 +KEY=F27BCC0F919566675B129C526A4DC796860878BCF04E01700F6806ACF0A417EF +PT=88FDDDA7BC2B09E48598A94474C64DC7 +CT=35C5C98C9C774D0BE9EFFB55C90B2F9C + +I=82 +KEY=05F12B58DBF5602D31CFD0EB10313502B3CDB1306C394C7BE687FDF939AF3873 +PT=35C5C98C9C774D0BE9EFFB55C90B2F9C +CT=C3374B5C81646AC881F0F924C22A723B + +I=83 +KEY=FD05BE617555BC8184C2F46911C46B9E70FAFA6CED5D26B3677704DDFB854A48 +PT=C3374B5C81646AC881F0F924C22A723B +CT=0CE756792AF27525A088700DB66D4399 + +I=84 +KEY=3831345DFA5ADDF7CE8B5F76B5E1EBDE7C1DAC15C7AF5396C7FF74D04DE809D1 +PT=0CE756792AF27525A088700DB66D4399 +CT=401CD076E03C108A7FD79651407923E9 + +I=85 +KEY=B101FDD95C23BE560262D355E09FC39B3C017C632793431CB828E2810D912A38 +PT=401CD076E03C108A7FD79651407923E9 +CT=88614E46C416E5164F2A63CDA9DD7B89 + +I=86 +KEY=0B53859962A79D216E395830E36F8D45B4603225E385A60AF702814CA44C51B1 +PT=88614E46C416E5164F2A63CDA9DD7B89 +CT=7411856C8F14A2E5F6C5F1830302A66F + +I=87 +KEY=FE07E3B8961C2A1B3E34A50F8CFA1A45C071B7496C9104EF01C770CFA74EF7DE +PT=7411856C8F14A2E5F6C5F1830302A66F +CT=B0A815E93EBAC7A68F8BB420C8A5692D + +I=88 +KEY=9F2E0D3DB033B1929009D6C4C460B24F70D9A2A0522BC3498E4CC4EF6FEB9EF3 +PT=B0A815E93EBAC7A68F8BB420C8A5692D +CT=AA6D27BB26275F5CB3EC3D6A8AFB80BF + +I=89 +KEY=5E903EF160161E1CA79A26D28FE32175DAB4851B740C9C153DA0F985E5101E4C +PT=AA6D27BB26275F5CB3EC3D6A8AFB80BF +CT=EAF7941A7E5D3907B6F52C1106EED2CE + +I=90 +KEY=60284EF35A9246CC32002028E4969309304311010A51A5128B55D594E3FECC82 +PT=EAF7941A7E5D3907B6F52C1106EED2CE +CT=1178DD3DBDB1810E360E6FE09AA0D75C + +I=91 +KEY=300CB519F3203AD4589749651BD99AC7213BCC3CB7E0241CBD5BBA74795E1BDE +PT=1178DD3DBDB1810E360E6FE09AA0D75C +CT=584B48263DE541E93B29C6E570D4A6F4 + +I=92 +KEY=2F79EA55D0E3EAF1D0DBD364A7D64E2A7970841A8A0565F586727C91098ABD2A +PT=584B48263DE541E93B29C6E570D4A6F4 +CT=7B2EC27F2F1BC24EAD4FC0AA0519685C + +I=93 +KEY=8B46F59BF2C4B226523C203E8FD3936D025E4665A51EA7BB2B3DBC3B0C93D576 +PT=7B2EC27F2F1BC24EAD4FC0AA0519685C +CT=13404D003576493EBB36C07C6D16A1B6 + +I=94 +KEY=C7E75C30B0CE770A0075E3EBEB244811111E0B659068EE85900B7C47618574C0 +PT=13404D003576493EBB36C07C6D16A1B6 +CT=A083421A139DF68C8F863B337F3408BE + +I=95 +KEY=A957F876769BE9005DCEE4B7514FAC62B19D497F83F518091F8D47741EB17C7E +PT=A083421A139DF68C8F863B337F3408BE +CT=BF86650C9ECBD6C14B420FBE6B6E488B + +I=96 +KEY=FD4DE7532652D17C5ACCEA759C52A95C0E1B2C731D3ECEC854CF48CA75DF34F5 +PT=BF86650C9ECBD6C14B420FBE6B6E488B +CT=75CEFAE872574AB6F26B0CAF6F08D858 + +I=97 +KEY=54DBCDC0A57363DE6B3A032607E968C27BD5D69B6F69847EA6A444651AD7ECAD +PT=75CEFAE872574AB6F26B0CAF6F08D858 +CT=8A3F9C96598883E9D3760C8A8FE406C6 + +I=98 +KEY=AC10312E365401908F2C8AE371CB8C90F1EA4A0D36E1079775D248EF9533EA6B +PT=8A3F9C96598883E9D3760C8A8FE406C6 +CT=B8B372C0CC6D164F340DF26B8F832DF8 + +I=99 +KEY=64265CF02043C966C01DF5255F8D2867495938CDFA8C11D841DFBA841AB0C793 +PT=B8B372C0CC6D164F340DF26B8F832DF8 +CT=A7F6267A6F0CEB0EF7D07959EE065760 + +I=100 +KEY=CF6B88FB273B247B8D64B5A323EF5760EEAF1EB79580FAD6B60FC3DDF4B690F3 +PT=A7F6267A6F0CEB0EF7D07959EE065760 +CT=AD96ADAC9B786AB78B1B46D9E026C935 + +I=101 +KEY=4C8EEA35A90CB46AF32235997D2ADBBE4339B31B0EF890613D148504149059C6 +PT=AD96ADAC9B786AB78B1B46D9E026C935 +CT=FC7BAC9A5F64571AABF4B0A451C8D88D + +I=102 +KEY=0DD6D30191FABEC371CF0BA223BECF19BF421F81519CC77B96E035A04558814B +PT=FC7BAC9A5F64571AABF4B0A451C8D88D +CT=2B56E363834F27090FAC8061507A4787 + +I=103 +KEY=2E69324E634312611C33F695A137AFE49414FCE2D2D3E072994CB5C11522C6CC +PT=2B56E363834F27090FAC8061507A4787 +CT=FD37886E30CEFA28F8E8A5662A9EC5DC + +I=104 +KEY=8AFAC0C1507472CCB28B37CA88B7139D6923748CE21D1A5A61A410A73FBC0310 +PT=FD37886E30CEFA28F8E8A5662A9EC5DC +CT=F7F36142C000D5162F789C392971FCE7 + +I=105 +KEY=7DC5DA2A80219692F9F26C5934826DF29ED015CE221DCF4C4EDC8C9E16CDFFF7 +PT=F7F36142C000D5162F789C392971FCE7 +CT=D560607A0F0BE8320F2CEE56B155163F + +I=106 +KEY=3CC9AE3E3EB90B511C6D8CD74419D6944BB075B42D16277E41F062C8A798E9C8 +PT=D560607A0F0BE8320F2CEE56B155163F +CT=708133FEB47A226A616900D46FA85037 + +I=107 +KEY=8B84B7F96F9B3184D5B6402ECAE344CB3B31464A996C05142099621CC830B9FF +PT=708133FEB47A226A616900D46FA85037 +CT=1B2ED9348FC7A4E4AD8BFCE2A148D1AD + +I=108 +KEY=655CB7606D17582441247D23E222ECCF201F9F7E16ABA1F08D129EFE69786852 +PT=1B2ED9348FC7A4E4AD8BFCE2A148D1AD +CT=B2B726C8605A6F5CBA97F04E85A1F985 + +I=109 +KEY=E0BA77DAAD3E3502AB9A6CEBEC654D0492A8B9B676F1CEAC37856EB0ECD991D7 +PT=B2B726C8605A6F5CBA97F04E85A1F985 +CT=CD7F53BB4AEB364A1D8630E0B5C4A6A2 + +I=110 +KEY=1470D5E493B0E8212F02D4419C46A8CD5FD7EA0D3C1AF8E62A035E50591D3775 +PT=CD7F53BB4AEB364A1D8630E0B5C4A6A2 +CT=57271A960FE2170BA3F1987E694BBD16 + +I=111 +KEY=415408E88421573F93FDBE25DD4B90C208F0F09B33F8EFED89F2C62E30568A63 +PT=57271A960FE2170BA3F1987E694BBD16 +CT=E9D47C3E926475FFDB783624C3ADB17B + +I=112 +KEY=40B3017DC81EEE4BF652AE8BB8CEED1DE1248CA5A19C9A12528AF00AF3FB3B18 +PT=E9D47C3E926475FFDB783624C3ADB17B +CT=D78F96812BB55723E04BE8818C262485 + +I=113 +KEY=9EABE9B3608ACE61684BAD3F3FED5C9736AB1A248A29CD31B2C1188B7FDD1F9D +PT=D78F96812BB55723E04BE8818C262485 +CT=E2092227E1A3D2E525942090DA0A3F3E + +I=114 +KEY=B095E4F38E060016EBC4C42D3A4EFBD6D4A238036B8A1FD49755381BA5D720A3 +PT=E2092227E1A3D2E525942090DA0A3F3E +CT=95E9EE1F56A65FF85B752FC300F525AE + +I=115 +KEY=9B2841F44291552EA04DE13E4E78011B414BD61C3D2C402CCC2017D8A522050D +PT=95E9EE1F56A65FF85B752FC300F525AE +CT=32D8465F2E11A04F8984FEE8E710CD25 + +I=116 +KEY=67D8B10D0DDB61932E610EB077F0D85F73939043133DE06345A4E9304232C828 +PT=32D8465F2E11A04F8984FEE8E710CD25 +CT=2D9803ECFB95B2591FE56B3CBB4307F2 + +I=117 +KEY=B0C80A38EDE23A549EF08E5DC3CEA2F25E0B93AFE8A8523A5A41820CF971CFDA +PT=2D9803ECFB95B2591FE56B3CBB4307F2 +CT=4B19F9BCAFD471BF9014ADA19891E4E6 + +I=118 +KEY=85C6DF29F9AEBA6087E3746BA5CF6C1515126A13477C2385CA552FAD61E02B3C +PT=4B19F9BCAFD471BF9014ADA19891E4E6 +CT=53159BC4FBD06FD03ABAC028A536C4A0 + +I=119 +KEY=2D42BE0B33D92ECC40DF48CF0AE0CB764607F1D7BCAC4C55F0EFEF85C4D6EF9C +PT=53159BC4FBD06FD03ABAC028A536C4A0 +CT=BCDB1347ACD50D0084D588D4540420E3 + +I=120 +KEY=338A4DC6E729E6FCF71095BB4E6F52FEFADCE29010794155743A675190D2CF7F +PT=BCDB1347ACD50D0084D588D4540420E3 +CT=E12DC82E79554E1202DA471C3221A554 + +I=121 +KEY=47597486437CBCD33FC195C56FF972BB1BF12ABE692C0F4776E0204DA2F36A2B +PT=E12DC82E79554E1202DA471C3221A554 +CT=23A43E9D6F7C5A6C842233CCEC120EB9 + +I=122 +KEY=CEE8CF713EBF0C609E3429E5183014BB385514230650552BF2C213814EE16492 +PT=23A43E9D6F7C5A6C842233CCEC120EB9 +CT=9F3F4349BF98D3CC00DB167F0FFDC7AB + +I=123 +KEY=C9B3A1CAFA0D4F0DA942C17FFB75E333A76A576AB9C886E7F21905FE411CA339 +PT=9F3F4349BF98D3CC00DB167F0FFDC7AB +CT=C4D8B8EBEF311C11FE2404220EA65E99 + +I=124 +KEY=8360E6F464B61C4BAE31D3A72422128463B2EF8156F99AF60C3D01DC4FBAFDA0 +PT=C4D8B8EBEF311C11FE2404220EA65E99 +CT=47E3318C721E6C094763F0A18042911D + +I=125 +KEY=926B00B9767D0CAD5331CD6F0343C4A92451DE0D24E7F6FF4B5EF17DCFF86CBD +PT=47E3318C721E6C094763F0A18042911D +CT=D709FA9A1415B0FAC71B4CF52504791F + +I=126 +KEY=3F4349126EF6A51FD196742CB461D01EF358249730F246058C45BD88EAFC15A2 +PT=D709FA9A1415B0FAC71B4CF52504791F +CT=7937DD067DDB85F200A492E5824DA23C + +I=127 +KEY=4420ADF6906CFBF8421524E88517327C8A6FF9914D29C3F78CE12F6D68B1B79E +PT=7937DD067DDB85F200A492E5824DA23C +CT=B68617F1372847206BA088D7100334A4 + +I=128 +KEY=125BEB5234B89A376ABBB2185F24BDDE3CE9EE607A0184D7E741A7BA78B2833A +PT=B68617F1372847206BA088D7100334A4 +CT=390938BA9F2264484DE63D8003C15369 + +I=129 +KEY=A457831AB172D88111E87C3955D0C0F205E0D6DAE523E09FAAA79A3A7B73D053 +PT=390938BA9F2264484DE63D8003C15369 +CT=A69ED32FD728337A5C25FBC2230DC788 + +I=130 +KEY=CC7ED4183BFAE0FA0F9DD348B8E194F2A37E05F5320BD3E5F68261F8587E17DB +PT=A69ED32FD728337A5C25FBC2230DC788 +CT=EDB9D6099202FE4AE51EEC725478FB47 + +I=131 +KEY=686AB4F5C19296AED306ADEA4FD52D1A4EC7D3FCA0092DAF139C8D8A0C06EC9C +PT=EDB9D6099202FE4AE51EEC725478FB47 +CT=61059EA3BF0C953762CB37E50ED7081F + +I=132 +KEY=8115329FADEBA92AB2827BD7701A01442FC24D5F1F05B8987157BA6F02D1E483 +PT=61059EA3BF0C953762CB37E50ED7081F +CT=A683E36EF7CCDABDBCA683C2D6560D25 + +I=133 +KEY=49254E8904EED2766A6A1A615B63B97C8941AE31E8C96225CDF139ADD487E9A6 +PT=A683E36EF7CCDABDBCA683C2D6560D25 +CT=8EF424771561BFEC0058C7CAA5876EF6 + +I=134 +KEY=259194CE8701581012F5592B61BCA99507B58A46FDA8DDC9CDA9FE6771008750 +PT=8EF424771561BFEC0058C7CAA5876EF6 +CT=79AC024A7BA5FFE143D40D34F2E587A6 + +I=135 +KEY=CA0427FE28C77D0CA25D6851CCFE58C47E19880C860D22288E7DF35383E500F6 +PT=79AC024A7BA5FFE143D40D34F2E587A6 +CT=2258AB9F0E254CE21EB9B7F6EA690671 + +I=136 +KEY=DA9A4B566C9F670DF850F891A5274CC95C41239388286ECA90C444A5698C0687 +PT=2258AB9F0E254CE21EB9B7F6EA690671 +CT=55ACB73E8A45BF964BD040C799724DAD + +I=137 +KEY=9F177A6A6B524C75DB5CC0DBB6AD733209ED94AD026DD15CDB140462F0FE4B2A +PT=55ACB73E8A45BF964BD040C799724DAD +CT=3E904B15F2E5DDC934DABC25259CB3CF + +I=138 +KEY=2AD96F6874C1BA6A82C5EE80A9A2E8E5377DDFB8F0880C95EFCEB847D562F8E5 +PT=3E904B15F2E5DDC934DABC25259CB3CF +CT=3ACFF8D5B701A5BD1355DDA705D269CB + +I=139 +KEY=ADD59DF57CC01DE988C6D81E65B1D00E0DB2276D4789A928FC9B65E0D0B0912E +PT=3ACFF8D5B701A5BD1355DDA705D269CB +CT=3EF4AC14CC954FB4A9A808C7C00A2F1F + +I=140 +KEY=D3EBE43C4E9C96B37133F6AF8910A25F33468B798B1CE69C55336D2710BABE31 +PT=3EF4AC14CC954FB4A9A808C7C00A2F1F +CT=61C50D5C736AEDCF03C06FC310CC19D9 + +I=141 +KEY=FA45F434377F2E217C4A5B7A7526CC1952838625F8760B5356F302E40076A7E8 +PT=61C50D5C736AEDCF03C06FC310CC19D9 +CT=2BF543C6548ED0344262640AD95F95C9 + +I=142 +KEY=71EAD73C81ED5AE731D19B0B2B42F0E87976C5E3ACF8DB67149166EED9293221 +PT=2BF543C6548ED0344262640AD95F95C9 +CT=F8C1DBDD20317FEB1625634A451931B5 + +I=143 +KEY=3FD0019D000111D4300D2CEF39F53C0D81B71E3E8CC9A48C02B405A49C300394 +PT=F8C1DBDD20317FEB1625634A451931B5 +CT=DEDB54735B8B90C8EEC66EAECFB13ED6 + +I=144 +KEY=070976B2D3AA1E737BC24A8A794A21BE5F6C4A4DD7423444EC726B0A53813D42 +PT=DEDB54735B8B90C8EEC66EAECFB13ED6 +CT=75941A1ADA444115961E058E2D6C6396 + +I=145 +KEY=81AC2B7F073D0D06BA8A43D3381D3A3F2AF850570D0675517A6C6E847EED5ED4 +PT=75941A1ADA444115961E058E2D6C6396 +CT=7C66BE2B0354A6549E10489AF7A83424 + +I=146 +KEY=37BDD1946BB9B5616115F015E9162F5B569EEE7C0E52D305E47C261E89456AF0 +PT=7C66BE2B0354A6549E10489AF7A83424 +CT=F589769555BDEFD0B29E6A65313BD2E1 + +I=147 +KEY=CF27BD543BB4EED052B808D1EE350D35A31798E95BEF3CD556E24C7BB87EB811 +PT=F589769555BDEFD0B29E6A65313BD2E1 +CT=9B3215F70FBCC5ED9CC0D6D7E1E56F11 + +I=148 +KEY=43321308251C33234CCD9ED19E5E74AF38258D1E5453F938CA229AAC599BD700 +PT=9B3215F70FBCC5ED9CC0D6D7E1E56F11 +CT=705CCB60E0A6E997578DCC804D49D265 + +I=149 +KEY=F2152160EAD144776BA6BDED0AC49CD24879467EB4F510AF9DAF562C14D20565 +PT=705CCB60E0A6E997578DCC804D49D265 +CT=3DA4CEC68D47E55ECF21A1C5CDAFE4E6 + +I=150 +KEY=593B7EDAE946A5269EF33D088D1B297675DD88B839B2F5F1528EF7E9D97DE183 +PT=3DA4CEC68D47E55ECF21A1C5CDAFE4E6 +CT=32299EDBED49B66271107CA1822F179E + +I=151 +KEY=852E4554AD1459CE81DBA17D18DA96C447F41663D4FB4393239E8B485B52F61D +PT=32299EDBED49B66271107CA1822F179E +CT=45856FD2080FA9BBFA0857BCF7381823 + +I=152 +KEY=1D8F910508F9C08DB4DE4D5C465310F4027179B1DCF4EA28D996DCF4AC6AEE3E +PT=45856FD2080FA9BBFA0857BCF7381823 +CT=6A8C18595AF5D1E46F9F168C31566BAF + +I=153 +KEY=1A42C028C1ABA740D95A47ABD7B4F40D68FD61E886013BCCB609CA789D3C8591 +PT=6A8C18595AF5D1E46F9F168C31566BAF +CT=71A41A6B6BF9FB906B0617DCB76B4BA5 + +I=154 +KEY=3C408CB08BCAF34B2BCE6EF787A96D5219597B83EDF8C05CDD0FDDA42A57CE34 +PT=71A41A6B6BF9FB906B0617DCB76B4BA5 +CT=9105B8FC516E0B19AEDD003979F8C298 + +I=155 +KEY=804516E36B1B5E046B15CBE1D3F26EE9885CC37FBC96CB4573D2DD9D53AF0CAC +PT=9105B8FC516E0B19AEDD003979F8C298 +CT=27ACD01CC0403AD6DB45C7DF3E515EDE + +I=156 +KEY=CD8199690660BD4DBA38CE522D1A12CEAFF013637CD6F193A8971A426DFE5272 +PT=27ACD01CC0403AD6DB45C7DF3E515EDE +CT=86E2A23AC567C5F05F15A318E38360A7 + +I=157 +KEY=0AD8BB3D5B2A538DF0BDD50EB74CC1BA2912B159B9B13463F782B95A8E7D32D5 +PT=86E2A23AC567C5F05F15A318E38360A7 +CT=CB03EDA81BF211B5FE03D4A0879E9EDD + +I=158 +KEY=081040B60AE9E733243F4C39013EEDB5E2115CF1A24325D609816DFA09E3AC08 +PT=CB03EDA81BF211B5FE03D4A0879E9EDD +CT=6F1AD4AD727348DD593459E0D7661813 + +I=159 +KEY=A51E29D20BB0963DF854C898299E114A8D0B885CD0306D0B50B5341ADE85B41B +PT=6F1AD4AD727348DD593459E0D7661813 +CT=236B421E3103D4C17297D3F5C8BA1D17 + +I=160 +KEY=49D4EB9964431F42F0FC6494A47A50CCAE60CA42E133B9CA2222E7EF163FA90C +PT=236B421E3103D4C17297D3F5C8BA1D17 +CT=118AE5A5597E8DB200B26DBE11AC4BC8 + +I=161 +KEY=0F3F7298BE444450A0A07A4B73897720BFEA2FE7B84D347822908A510793E2C4 +PT=118AE5A5597E8DB200B26DBE11AC4BC8 +CT=DF02587F25CC4C59E6AECE98BCAACCB8 + +I=162 +KEY=7E30984A4C0B18D2F791858B83FC960960E877989D817821C43E44C9BB392E7C +PT=DF02587F25CC4C59E6AECE98BCAACCB8 +CT=3DA0F35FDAEF499ADBF602939FC748D4 + +I=163 +KEY=360A7168E056892E5BF0127EA3B58CAF5D4884C7476E31BB1FC8465A24FE66A8 +PT=3DA0F35FDAEF499ADBF602939FC748D4 +CT=FE462F878CEEDDDAA00855B85A81A14B + +I=164 +KEY=A75B3537E0EB98FC0F41C9E1306F6667A30EAB40CB80EC61BFC013E27E7FC7E3 +PT=FE462F878CEEDDDAA00855B85A81A14B +CT=47EA8AC561D7A9F99F64F41A9AD46E5C + +I=165 +KEY=219E71FC6D23A5103DE4DA9C5EDFA0AEE4E42185AA57459820A4E7F8E4ABA9BF +PT=47EA8AC561D7A9F99F64F41A9AD46E5C +CT=650FAE7F29A098D787F60CC3C0D77580 + +I=166 +KEY=038A888C6EA4E9502A15110832AE0DF081EB8FFA83F7DD4FA752EB3B247CDC3F +PT=650FAE7F29A098D787F60CC3C0D77580 +CT=0334BF8CA2835C71F2A283736D54E933 + +I=167 +KEY=714967419F9129B9649A13A9DA3291A582DF30762174813E55F068484928350C +PT=0334BF8CA2835C71F2A283736D54E933 +CT=1B3A09B325F3D833A3C83D941832B204 + +I=168 +KEY=BCDB12EAF8D3C95F821C0DD324FD36BB99E539C50487590DF63855DC511A8708 +PT=1B3A09B325F3D833A3C83D941832B204 +CT=CF980ED2619858290881314B7F0B9516 + +I=169 +KEY=B8FA32AE829E8AF3EF543A407E2D61BA567D3717651F0124FEB964972E11121E +PT=CF980ED2619858290881314B7F0B9516 +CT=98FF5ADA0739122DBBD241847D4A318D + +I=170 +KEY=D62592634F0ABD21AC98887A88845E2ECE826DCD62261309456B2513535B2393 +PT=98FF5ADA0739122DBBD241847D4A318D +CT=1824306B9F54BE4CE3F94F037B4B8569 + +I=171 +KEY=77005AE2FA1AD6D77D36566B9E988345D6A65DA6FD72AD45A6926A102810A6FA +PT=1824306B9F54BE4CE3F94F037B4B8569 +CT=25BA57B9035625DD268492282535960C + +I=172 +KEY=BE766696DC4458442056D89C96CAFDF0F31C0A1FFE2488988016F8380D2530F6 +PT=25BA57B9035625DD268492282535960C +CT=26AEAD4ED08CA78CE2A3358F36DA0E3F + +I=173 +KEY=1E1D3EBC714EE191EDB2A02B64EF2C23D5B2A7512EA82F1462B5CDB73BFF3EC9 +PT=26AEAD4ED08CA78CE2A3358F36DA0E3F +CT=10AB48E0CB1D72D82794E35DBDEF88F6 + +I=174 +KEY=D3EAD2DA40B4C94B506A0ED75210023BC519EFB1E5B55DCC45212EEA8610B63F +PT=10AB48E0CB1D72D82794E35DBDEF88F6 +CT=878BCAC367294B227533E1451F654960 + +I=175 +KEY=87D0B5D4A1314054EC37B67B4245BA8C42922572829C16EE3012CFAF9975FF5F +PT=878BCAC367294B227533E1451F654960 +CT=98CC3311EC8E8B75944503734DEAC00D + +I=176 +KEY=EF3FA3235BB42B1326DE67088C68E2BDDA5E16636E129D9BA457CCDCD49F3F52 +PT=98CC3311EC8E8B75944503734DEAC00D +CT=DAF5FB711E259B498918871933A2E1FD + +I=177 +KEY=2EBBBB1B070658DD43299478725AA88F00ABED12703706D22D4F4BC5E73DDEAF +PT=DAF5FB711E259B498918871933A2E1FD +CT=AACC545DEE8FF1F5C7A91A2EE3D25C1B + +I=178 +KEY=E15D1FC214F23FF93886D219B4DFCD45AA67B94F9EB8F727EAE651EB04EF82B4 +PT=AACC545DEE8FF1F5C7A91A2EE3D25C1B +CT=B844B67FBFD12E2712CCB66EBB4F7691 + +I=179 +KEY=CC3335B792121DE55FA04A4D6FEE57B012230F302169D900F82AE785BFA0F425 +PT=B844B67FBFD12E2712CCB66EBB4F7691 +CT=3E00C548BAEE6150FAA5B67986331FD5 + +I=180 +KEY=18DB585F810069C584251CA1E04A58382C23CA789B87B850028F51FC3993EBF0 +PT=3E00C548BAEE6150FAA5B67986331FD5 +CT=EB23DEEA8449E8FA0D828C12B98437AE + +I=181 +KEY=DFE08CA44B0BC4F51C43BE3631E20735C70014921FCE50AA0F0DDDEE8017DC5E +PT=EB23DEEA8449E8FA0D828C12B98437AE +CT=35BBE35CFC1D8FC40BC52F20D3FB35D5 + +I=182 +KEY=0F7DCC456D50A31AC9351794BFE6DD57F2BBF7CEE3D3DF6E04C8F2CE53ECE98B +PT=35BBE35CFC1D8FC40BC52F20D3FB35D5 +CT=DFFE7AEEAAF4762C7EB52453B1F61AD8 + +I=183 +KEY=D34FDEB3F04FB4563BC0FD204E8D459F2D458D204927A9427A7DD69DE21AF353 +PT=DFFE7AEEAAF4762C7EB52453B1F61AD8 +CT=C648DAF9EBFB4BC6166B15BF067E107F + +I=184 +KEY=5E90B747C9976A3F5050B0C51F116A81EB0D57D9A2DCE2846C16C322E464E32C +PT=C648DAF9EBFB4BC6166B15BF067E107F +CT=057258D07CAEE57807C396FAE651855A + +I=185 +KEY=52D3686BC0CD56B9DFF3A69F5073F30AEE7F0F09DE7207FC6BD555D802356676 +PT=057258D07CAEE57807C396FAE651855A +CT=B1109BE49E6E0F4C4190D8E0D717E8D0 + +I=186 +KEY=39C89286B658E006FBF97BAB1C4874025F6F94ED401C08B02A458D38D5228EA6 +PT=B1109BE49E6E0F4C4190D8E0D717E8D0 +CT=4DDE60FEEE40402058C988092603AB53 + +I=187 +KEY=562C9A004CBF05A4CA97994D48C0874C12B1F413AE5C4890728C0531F32125F5 +PT=4DDE60FEEE40402058C988092603AB53 +CT=3B18CBF83791E93D661EB269CFEAB1BE + +I=188 +KEY=F95206C4D3862E01A4DFE3676A2F297C29A93FEB99CDA1AD1492B7583CCB944B +PT=3B18CBF83791E93D661EB269CFEAB1BE +CT=0A3204DEE28B65E849136960949E4E5E + +I=189 +KEY=FEFDBE4294E46E22074E77B6BB7F964B239B3B357B46C4455D81DE38A855DA15 +PT=0A3204DEE28B65E849136960949E4E5E +CT=6C47ECB8B1478F0BBEDEF3A05A439776 + +I=190 +KEY=05858C957F861410187DD8CC2EE48E364FDCD78DCA014B4EE35F2D98F2164D63 +PT=6C47ECB8B1478F0BBEDEF3A05A439776 +CT=881188C2834B0496CB97F15F7A5C332A + +I=191 +KEY=A51CABC6D50BF9043E95CE2BC511D26DC7CD5F4F494A4FD828C8DCC7884A7E49 +PT=881188C2834B0496CB97F15F7A5C332A +CT=1FAE86251E2F615E3BFCAC545013CD12 + +I=192 +KEY=4EE1F6812CC35A16AA63F1CB39669ED7D863D96A57652E8613347093D859B35B +PT=1FAE86251E2F615E3BFCAC545013CD12 +CT=6017C6764080CB6D2BAC24C0F1BFF8F5 + +I=193 +KEY=F4F31D57DD72E6BF842D3834372AA60CB8741F1C17E5E5EB3898545329E64BAE +PT=6017C6764080CB6D2BAC24C0F1BFF8F5 +CT=10C8548253FB2BCD5D6F87CB28FAE7E7 + +I=194 +KEY=9DBB357DC99A95C240E750F1970C5C65A8BC4B9E441ECE2665F7D398011CAC49 +PT=10C8548253FB2BCD5D6F87CB28FAE7E7 +CT=20E253845A3DD51FFC16141FDAA20749 + +I=195 +KEY=A814CD8766E0BFFBD8530589D6202BE0885E181A1E231B3999E1C787DBBEAB00 +PT=20E253845A3DD51FFC16141FDAA20749 +CT=9383323218D891F9DCE7578FCD6A54A5 + +I=196 +KEY=C516C26E23E38C2B87346F759D8AEF881BDD2A2806FB8AC04506900816D4FFA5 +PT=9383323218D891F9DCE7578FCD6A54A5 +CT=9CFF8002D46EAFAAC7B035A788A37CF5 + +I=197 +KEY=9301F8120939D0E70C97F614F61F18648722AA2AD295256A82B6A5AF9E778350 +PT=9CFF8002D46EAFAAC7B035A788A37CF5 +CT=90C9F34994D5DA86406C7E82EDDD1009 + +I=198 +KEY=82B163831972D2CEF8F1780AA6B0707A17EB59634640FFECC2DADB2D73AA9359 +PT=90C9F34994D5DA86406C7E82EDDD1009 +CT=C8B5021EE84635EB7E7D0F5DBE967FD0 + +I=199 +KEY=F99FF8714EE5D822E0E25C499D7C96ACDF5E5B7DAE06CA07BCA7D470CD3CEC89 +PT=C8B5021EE84635EB7E7D0F5DBE967FD0 +CT=15CCB3C950764E24CA714707034DF9A7 + +I=200 +KEY=3529E6B83266BD558B7F33FC00AE4904CA92E8B4FE70842376D69377CE71152E +PT=15CCB3C950764E24CA714707034DF9A7 +CT=5FDA0EF6A2172D5DAA8E842F061A2E44 + +I=201 +KEY=2D77F95D8B556740CD9E2CC546CA45C99548E6425C67A97EDC581758C86B3B6A +PT=5FDA0EF6A2172D5DAA8E842F061A2E44 +CT=808781D0D10B3A02333E0A53E159287F + +I=202 +KEY=79298FD5F3C4B6378403CFAD05C3C96E15CF67928D6C937CEF661D0B29321315 +PT=808781D0D10B3A02333E0A53E159287F +CT=CC760400725FCFD37E757D99C6361B93 + +I=203 +KEY=69535F335F6AEBF452407F3F1C203410D9B96392FF335CAF91136092EF040886 +PT=CC760400725FCFD37E757D99C6361B93 +CT=247D3A6BB4C883C142C4000B085C3B79 + +I=204 +KEY=1A4F8FD7BD8DBCFB3677C708CDDDC7C4FDC459F94BFBDF6ED3D76099E75833FF +PT=247D3A6BB4C883C142C4000B085C3B79 +CT=47E4C802C61E6A1706BAE95AF75CA70D + +I=205 +KEY=A573989455A11CAD1E8642CD774806B1BA2091FB8DE5B579D56D89C3100494F2 +PT=47E4C802C61E6A1706BAE95AF75CA70D +CT=4297101350A5CE6C435FAD2725C22E46 + +I=206 +KEY=8D52414DD5600AA0CACD5AD399FD1B37F8B781E8DD407B15963224E435C6BAB4 +PT=4297101350A5CE6C435FAD2725C22E46 +CT=BEC56BF1F3B6BE60C0F4CB7AE77BF0F5 + +I=207 +KEY=49D4DF2FB3B561817F2BA6599B66C9244672EA192EF6C57556C6EF9ED2BD4A41 +PT=BEC56BF1F3B6BE60C0F4CB7AE77BF0F5 +CT=5B590F24D329BB6ED981938A4CDB9907 + +I=208 +KEY=68BD5721E2A51A184CDBAC3A035670701D2BE53DFDDF7E1B8F477C149E66D346 +PT=5B590F24D329BB6ED981938A4CDB9907 +CT=A8A15DBB79BB9B1131EF39C1E3FCFC9C + +I=209 +KEY=2CC71F1B9BE892100E8A340E61D0A128B58AB8868464E50ABEA845D57D9A2FDA +PT=A8A15DBB79BB9B1131EF39C1E3FCFC9C +CT=E8CBAB9E98D2866E779512AAC2FA2EA0 + +I=210 +KEY=EEF45CE1BB444A6BA5A029363FB9D4DB5D4113181CB66364C93D577FBF60017A +PT=E8CBAB9E98D2866E779512AAC2FA2EA0 +CT=7E4896F0A48A25FFE950B74B96F5F40E + +I=211 +KEY=151FE809785C11F8F19F31EA0246B416230985E8B83C469B206DE0342995F574 +PT=7E4896F0A48A25FFE950B74B96F5F40E +CT=E1C642B54B89822E73A695C851BC8EBE + +I=212 +KEY=14FE470CD366C580F124EA924B918BF5C2CFC75DF3B5C4B553CB75FC78297BCA +PT=E1C642B54B89822E73A695C851BC8EBE +CT=5FA2C6A2303ED7219984F30B78BE6B96 + +I=213 +KEY=92E61F4C495462354EF612492557D6AB9D6D01FFC38B1394CA4F86F70097105C +PT=5FA2C6A2303ED7219984F30B78BE6B96 +CT=3791959FBF178682A711623C2F91616C + +I=214 +KEY=6C0B6F23AC7526204C451A8ADE54D404AAFC94607C9C95166D5EE4CB2F067130 +PT=3791959FBF178682A711623C2F91616C +CT=E14FCACD5FD26FC2710776EE82317ABC + +I=215 +KEY=0DAE926E4172586817730DB9FDF2CE0B4BB35EAD234EFAD41C599225AD370B8C +PT=E14FCACD5FD26FC2710776EE82317ABC +CT=E576499EAF5365E7FE3B4961D9C74419 + +I=216 +KEY=DCD553F2977BD114B61F724ABC6AFE8EAEC517338C1D9F33E262DB4474F04F95 +PT=E576499EAF5365E7FE3B4961D9C74419 +CT=38567558119E72929F2932E6C289095E + +I=217 +KEY=6333DA8D5B655B5B5AABBCAF0B010BE89693626B9D83EDA17D4BE9A2B67946CB +PT=38567558119E72929F2932E6C289095E +CT=D20AD648F558E5507CC5C905E92CC268 + +I=218 +KEY=F9010180B464FBB8AD7C9D5E41B1E09A4499B42368DB08F1018E20A75F5584A3 +PT=D20AD648F558E5507CC5C905E92CC268 +CT=00C719F3757DDD2D2E64C3F2666FB2CB + +I=219 +KEY=8CE68ED02B4FFD9720B3D16FAE92D164445EADD01DA6D5DC2FEAE355393A3668 +PT=00C719F3757DDD2D2E64C3F2666FB2CB +CT=AEEAB9F50456CA3233A964219D2E7816 + +I=220 +KEY=57E26BA4DBD3549051B0D9436EB38D4FEAB4142519F01FEE1C438774A4144E7E +PT=AEEAB9F50456CA3233A964219D2E7816 +CT=3F02C97E127FD697AFD58BC66941F654 + +I=221 +KEY=4D0BC4A8796407C939797EF19D0CE7E3D5B6DD5B0B8FC979B3960CB2CD55B82A +PT=3F02C97E127FD697AFD58BC66941F654 +CT=BC4C0DDBCF0003B7814EEF1ABD22B6A8 + +I=222 +KEY=9C1FD1789544D2F3FF84574A216767CD69FAD080C48FCACE32D8E3A870770E82 +PT=BC4C0DDBCF0003B7814EEF1ABD22B6A8 +CT=D125D8C2920ADD3EA00103DC695A0D9D + +I=223 +KEY=ADBE97F99DBE61213892D9849B81B3FBB8DF0842568517F092D9E074192D031F +PT=D125D8C2920ADD3EA00103DC695A0D9D +CT=C0C57598639BA69E13C82E3AF24777C5 + +I=224 +KEY=A14DC5CF6CD0BD9AC9499317C509CCB4781A7DDA351EB16E8111CE4EEB6A74DA +PT=C0C57598639BA69E13C82E3AF24777C5 +CT=81E3B8F6A691BC30AA66AD70F0358881 + +I=225 +KEY=0EC479D8681AC8CA455D64A4BB34C86DF9F9C52C938F0D5E2B77633E1B5FFC5B +PT=81E3B8F6A691BC30AA66AD70F0358881 +CT=3CD03908D4ABA4B9885BCB1AC89D16C3 + +I=226 +KEY=E74102D814426E659732B303E6D44DB7C529FC244724A9E7A32CA824D3C2EA98 +PT=3CD03908D4ABA4B9885BCB1AC89D16C3 +CT=61662DD8EE676E17AE5CF2BABDC54A67 + +I=227 +KEY=EE4034F1A2EF16D7D848BB005CDA5E99A44FD1FCA943C7F00D705A9E6E07A0FF +PT=61662DD8EE676E17AE5CF2BABDC54A67 +CT=4E637432B0FF54FD665A902725B977EB + +I=228 +KEY=45E8F2DF7FC6E49FB0AF3B73788A1065EA2CA5CE19BC930D6B2ACAB94BBED714 +PT=4E637432B0FF54FD665A902725B977EB +CT=E53D1440407503B66530EEEEBBC9182B + +I=229 +KEY=0BEBC981186DEF84C01688CA16A061E00F11B18E59C990BB0E1A2457F077CF3F +PT=E53D1440407503B66530EEEEBBC9182B +CT=12134ADF5BB16D867B4EE9CE87EBE36D + +I=230 +KEY=6FADFDB92B0F888514730F17A37A81B61D02FB510278FD3D7554CD99779C2C52 +PT=12134ADF5BB16D867B4EE9CE87EBE36D +CT=310EACEF26A3EB5E4511437145DC30F9 + +I=231 +KEY=A565724F25EE29346543964864A0FFAA2C0C57BE24DB166330458EE832401CAB +PT=310EACEF26A3EB5E4511437145DC30F9 +CT=6848E5A618419EC6BACD9CD40BB42083 + +I=232 +KEY=1FAEBFE13AC7545DC742ED60241BC2E84444B2183C9A88A58A88123C39F43C28 +PT=6848E5A618419EC6BACD9CD40BB42083 +CT=C64DA25E7CB1A004E31CD37F9D4E1112 + +I=233 +KEY=A8EE2725373C48BAD9C0009C53C298A982091046402B28A16994C143A4BA2D3A +PT=C64DA25E7CB1A004E31CD37F9D4E1112 +CT=D02E6AE8FDD0C5813669080AA7B82527 + +I=234 +KEY=0770874A41ED1396940D75E6A5A09F5352277AAEBDFBED205FFDC9490302081D +PT=D02E6AE8FDD0C5813669080AA7B82527 +CT=5DDFBC75FE48D88E7D6F307E4A008BC7 + +I=235 +KEY=D7D098F85AB45E754629D2AB7DA2226C0FF8C6DB43B335AE2292F937490283DA +PT=5DDFBC75FE48D88E7D6F307E4A008BC7 +CT=E216C9AC28239E97237930079739ECE0 + +I=236 +KEY=5D6FAFF37EE7400691E504578251ECB1EDEE0F776B90AB3901EBC930DE3B6F3A +PT=E216C9AC28239E97237930079739ECE0 +CT=8D126659360D03548879000642E78029 + +I=237 +KEY=D75C5C64D94D0BC8566F568278B502D560FC692E5D9DA86D8992C9369CDCEF13 +PT=8D126659360D03548879000642E78029 +CT=9EA4C85D0F07AD618A2EBEBBE50D72B6 + +I=238 +KEY=D42BD9CDCD8BDA71E64817A2755C97C0FE58A173529A050C03BC778D79D19DA5 +PT=9EA4C85D0F07AD618A2EBEBBE50D72B6 +CT=1F525901AF1D94BA6CA3C7244E2CD885 + +I=239 +KEY=32DD1758D2EFC602EE85C58A66D0B080E10AF872FD8791B66F1FB0A937FD4520 +PT=1F525901AF1D94BA6CA3C7244E2CD885 +CT=E131C071BFA21FCE21D18DB87B522903 + +I=240 +KEY=BEC98C02D74E088458A668D0B6DDCF13003B380342258E784ECE3D114CAF6C23 +PT=E131C071BFA21FCE21D18DB87B522903 +CT=51F1B72C99C869BF73A6637D3A2E2278 + +I=241 +KEY=D368F7BE25A6A0C9AD2004E764F43A3551CA8F2FDBEDE7C73D685E6C76814E5B +PT=51F1B72C99C869BF73A6637D3A2E2278 +CT=0965CDD7A134672036F0C69774CFD380 + +I=242 +KEY=E5A7E12124540DBB4147A55C276A35B958AF42F87AD980E70B9898FB024E9DDB +PT=0965CDD7A134672036F0C69774CFD380 +CT=52ECEB721073FBF3D1BD5808351BEC5E + +I=243 +KEY=7D9702E2C8906805A580D5D85B03BBC60A43A98A6AAA7B14DA25C0F337557185 +PT=52ECEB721073FBF3D1BD5808351BEC5E +CT=493CE4E2B090DA3A2354C9DA7DB44D39 + +I=244 +KEY=8EFA5EC96F3AEF51AB38F4CCD969E5D5437F4D68DA3AA12EF97109294AE13CBC +PT=493CE4E2B090DA3A2354C9DA7DB44D39 +CT=DA64246FF65969995F9A4E8AE7C805CF + +I=245 +KEY=19C97957444E9931293047A647D7A19A991B69072C63C8B7A6EB47A3AD293973 +PT=DA64246FF65969995F9A4E8AE7C805CF +CT=CF85EBD76908CD8F8D3177E53DA3AD5E + +I=246 +KEY=7BDB3ED45BD78C131611FD9D54B8E9D2569E82D0456B05382BDA3046908A942D +PT=CF85EBD76908CD8F8D3177E53DA3AD5E +CT=45E1FDEFC98E62A841BD1D8D8236CEEF + +I=247 +KEY=19961521A42D96238D44F651E7E7D463137F7F3F8CE567906A672DCB12BC5AC2 +PT=45E1FDEFC98E62A841BD1D8D8236CEEF +CT=E056EF7B711A9CBDED8878EF74AF1671 + +I=248 +KEY=343360636E697E607319D4DCBC12B543F3299044FDFFFB2D87EF552466134CB3 +PT=E056EF7B711A9CBDED8878EF74AF1671 +CT=E4EFF77C6C3273393BE4814A16C3DF4A + +I=249 +KEY=B63D4D3D099F8E68F6A041D2EB1B1C1417C6673891CD8814BC0BD46E70D093F9 +PT=E4EFF77C6C3273393BE4814A16C3DF4A +CT=EC562E353DF8BA76699B01A6ACC8AD52 + +I=250 +KEY=EF500379EDE772968F1499F07B0B09CFFB90490DAC353262D590D5C8DC183EAB +PT=EC562E353DF8BA76699B01A6ACC8AD52 +CT=4473050ADC687112AACB86AA73CB6C6D + +I=251 +KEY=EA5CD4EDD99E64018AD3104026F0F528BFE34C07705D43707F5B5362AFD352C6 +PT=4473050ADC687112AACB86AA73CB6C6D +CT=6561A82EE86E4F18DF6965312F0C0984 + +I=252 +KEY=2ABF9529FC88D85FF68CF6D72B9A9CB5DA82E42998330C68A032365380DF5B42 +PT=6561A82EE86E4F18DF6965312F0C0984 +CT=47590CE1C90F3AC2C68B272B4A667F61 + +I=253 +KEY=A485B647790DBFF76F16C42A39F5F5559DDBE8C8513C36AA66B91178CAB92423 +PT=47590CE1C90F3AC2C68B272B4A667F61 +CT=4ED731A36BCB2672A810633E432D8922 + +I=254 +KEY=F0D0E858B597595A06458FF6C2259127D30CD96B3AF710D8CEA972468994AD01 +PT=4ED731A36BCB2672A810633E432D8922 +CT=4AC2F0D5F52762F77DB5D9EF53B76642 + +I=255 +KEY=EDDE80556ECA4CC51EFB33E23C43C04399CE29BECFD0722FB31CABA9DA23CB43 +PT=4AC2F0D5F52762F77DB5D9EF53B76642 +CT=A574FBE71E359A57D57A24A388FDF6EE + +I=256 +KEY=3C7C248C9FCE1D060D5B0664C0FF3F6B3CBAD259D1E5E87866668F0A52DE3DAD +PT=A574FBE71E359A57D57A24A388FDF6EE +CT=CCC3A011108469A7987F336C209BB84E + +I=257 +KEY=D43727570A809BE0D9EB78760FE4CDA9F0797248C16181DFFE19BC66724585E3 +PT=CCC3A011108469A7987F336C209BB84E +CT=686357D3013977390164834D4E5324DC + +I=258 +KEY=2F060E361977E544B98779AB55886D57981A259BC058F6E6FF7D3F2B3C16A13F +PT=686357D3013977390164834D4E5324DC +CT=DDDAD6FBDBF7C7BE7EBF3F036009A270 + +I=259 +KEY=A3630C05DC65905D37AFDB315B2AA4D945C0F3601BAF315881C200285C1F034F +PT=DDDAD6FBDBF7C7BE7EBF3F036009A270 +CT=237124FEDF28B4201B6D1584B93D5F7C + +I=260 +KEY=3E6ADAAEF53A36294CDEA0D94BE742C166B1D79EC48785789AAF15ACE5225C33 +PT=237124FEDF28B4201B6D1584B93D5F7C +CT=D1A9DDFB5662934AAD98B2861E50A871 + +I=261 +KEY=234615019E03C466AEA186112C4EB523B7180A6592E516323737A72AFB72F442 +PT=D1A9DDFB5662934AAD98B2861E50A871 +CT=CA18344F4C7A0F068398CA8137C056DD + +I=262 +KEY=22ED93581611798050E94CC70F6090BF7D003E2ADE9F1934B4AF6DABCCB2A29F +PT=CA18344F4C7A0F068398CA8137C056DD +CT=91FA4D62D10E852D9EDA42FAC8C34557 + +I=263 +KEY=A5981D9A37D6D3D948391D1D462B6DCFECFA73480F919C192A752F510471E7C8 +PT=91FA4D62D10E852D9EDA42FAC8C34557 +CT=B956221510135066B2B2552C4CB37642 + +I=264 +KEY=BF2E4397D0E93DFFA38D69B30F33835B55AC515D1F82CC7F98C77A7D48C2918A +PT=B956221510135066B2B2552C4CB37642 +CT=300CFCEAFED28E622CD08222D3A3B0B0 + +I=265 +KEY=55432143B807A628001F8D062CE0157265A0ADB7E150421DB417F85F9B61213A +PT=300CFCEAFED28E622CD08222D3A3B0B0 +CT=26681BCFDC630A21A684C60EF6A23747 + +I=266 +KEY=2966A6CB3BA9028583813B91FD72748D43C8B6783D33483C12933E516DC3167D +PT=26681BCFDC630A21A684C60EF6A23747 +CT=8EDD4B1B458D16841AD4525C01A8397E + +I=267 +KEY=1A22288AC28060F8E4B20C2AE0C82AEACD15FD6378BE5EB808476C0D6C6B2F03 +PT=8EDD4B1B458D16841AD4525C01A8397E +CT=BFDE412A7CAF0326AD1727996056A61C + +I=268 +KEY=C882E880508E92FF709E9BD4A555B30A72CBBC4904115D9EA5504B940C3D891F +PT=BFDE412A7CAF0326AD1727996056A61C +CT=88C039A0B395C5D08848C64DFC150C57 + +I=269 +KEY=298B3829EE60112C926E1FD583C9A2DEFA0B85E9B784984E2D188DD9F0288548 +PT=88C039A0B395C5D08848C64DFC150C57 +CT=ACDF23F2CB73FD8D3D814A79E3C94126 + +I=270 +KEY=2F2A3D0DDB2DBA8B8E3FF8A9DE765FE356D4A61B7CF765C31099C7A013E1C46E +PT=ACDF23F2CB73FD8D3D814A79E3C94126 +CT=A8BE26FE8780972650D5F384B744AC44 + +I=271 +KEY=F8CC20E8296CD38F1EF8BB2777EE1200FE6A80E5FB77F2E5404C3424A4A5682A +PT=A8BE26FE8780972650D5F384B744AC44 +CT=B5557CC20F64FCC576A6EC7BE324CE43 + +I=272 +KEY=678B5341F1BC13DB366B36D59ADADC7C4B3FFC27F4130E2036EAD85F4781A669 +PT=B5557CC20F64FCC576A6EC7BE324CE43 +CT=B59281EFF9C8D19E5D9C053CBE1F2F33 + +I=273 +KEY=E4701C9009693E38C455CE186A4B87DFFEAD7DC80DDBDFBE6B76DD63F99E895A +PT=B59281EFF9C8D19E5D9C053CBE1F2F33 +CT=7E8B1D4BFF81C5B9AA1FCA81DF8DE64F + +I=274 +KEY=C1F886CBCBF2BD920A0E68F30FCB8FCE80266083F25A1A07C16917E226136F15 +PT=7E8B1D4BFF81C5B9AA1FCA81DF8DE64F +CT=20841B35C77A109B528A1135E17D36EE + +I=275 +KEY=F05D61A9441B3C741D9D7489F2EE4A5EA0A27BB635200A9C93E306D7C76E59FB +PT=20841B35C77A109B528A1135E17D36EE +CT=C3195DC001FA1AD7C253DD3FE4A4BC7D + +I=276 +KEY=0C8E70943252DD5DC9819A9FDB375B3F63BB267634DA104B51B0DBE823CAE586 +PT=C3195DC001FA1AD7C253DD3FE4A4BC7D +CT=7E06BD1B3440DB4CA73AF1A05B33AD3F + +I=277 +KEY=84F1B5CF1AD11205E98ECD317AD670A11DBD9B6D009ACB07F68A2A4878F948B9 +PT=7E06BD1B3440DB4CA73AF1A05B33AD3F +CT=6224DBD71C1DC35A5C62777D2EA32C3E + +I=278 +KEY=E3465353AED687EF62CD1DA8D7DA3EEB7F9940BA1C87085DAAE85D35565A6487 +PT=6224DBD71C1DC35A5C62777D2EA32C3E +CT=1E4E51CD7BA1F7467AC69755F8894EF4 + +I=279 +KEY=31F715D1FFA116F58AB70E4A3EEF6E9561D711776726FF1BD02ECA60AED32A73 +PT=1E4E51CD7BA1F7467AC69755F8894EF4 +CT=4AB8AFEACB2A1B1AE9E74D647266E234 + +I=280 +KEY=487B6847CA14B04D429C81278332273F2B6FBE9DAC0CE40139C98704DCB5C847 +PT=4AB8AFEACB2A1B1AE9E74D647266E234 +CT=64C0BBA15382C142BBEE84B86B7D0BA0 + +I=281 +KEY=D1C9CA26B21945011B044EA6E29C9AD54FAF053CFF8E2543822703BCB7C8C3E7 +PT=64C0BBA15382C142BBEE84B86B7D0BA0 +CT=F82292AF614648EC6C1E9A1027167410 + +I=282 +KEY=3F585C00E187BE1B0C9E09781C9548A8B78D97939EC86DAFEE3999AC90DEB7F7 +PT=F82292AF614648EC6C1E9A1027167410 +CT=31C38ED5F207B412A14A51632D8805CE + +I=283 +KEY=340B8C115BAFF387400CD8F0EE8F8F6F864E19466CCFD9BD4F73C8CFBD56B239 +PT=31C38ED5F207B412A14A51632D8805CE +CT=3FC4CC8F4245BBBC5939A0C0A24A14DE + +I=284 +KEY=EA8EACF07402225D6C5181A8802DA515B98AD5C92E8A6201164A680F1F1CA6E7 +PT=3FC4CC8F4245BBBC5939A0C0A24A14DE +CT=23A98FA41D6C3D4CD9CFB9737A6D7872 + +I=285 +KEY=56EF7B73BF04F5F463E4D0EA0F6FC4DA9A235A6D33E65F4DCF85D17C6571DE95 +PT=23A98FA41D6C3D4CD9CFB9737A6D7872 +CT=82CC2D376B2772B7B988BEA17EFBB3D2 + +I=286 +KEY=C425E380DA91C34B73CE922C59B13C8818EF775A58C12DFA760D6FDD1B8A6D47 +PT=82CC2D376B2772B7B988BEA17EFBB3D2 +CT=5330F6218D528A32B24085EA496A05A9 + +I=287 +KEY=EA66C7FF9FCD2F9E76BCC5C6387E133E4BDF817BD593A7C8C44DEA3752E068EE +PT=5330F6218D528A32B24085EA496A05A9 +CT=7C1E082C2C89C90AD91AE81DF73F1F5F + +I=288 +KEY=C89CF336490832FB54BB536813AEE6EA37C18957F91A6EC21D57022AA5DF77B1 +PT=7C1E082C2C89C90AD91AE81DF73F1F5F +CT=2AB33673B654E2C49D6736D65A5F45C8 + +I=289 +KEY=7CC5409A9AE1F997774C3FEB74A6E9061D72BF244F4E8C06803034FCFF803279 +PT=2AB33673B654E2C49D6736D65A5F45C8 +CT=21BA6CADDCA5E0BE779D1A2651794C81 + +I=290 +KEY=E5E1873FDEE9DC066AF79C0E6027D0703CC8D38993EB6CB8F7AD2EDAAEF97EF8 +PT=21BA6CADDCA5E0BE779D1A2651794C81 +CT=8E2AF8BA54CF04812AE786C180FCFCA8 + +I=291 +KEY=844AA67914DE1C11677B5526D5B12765B2E22B33C7246839DD4AA81B2E058250 +PT=8E2AF8BA54CF04812AE786C180FCFCA8 +CT=E48A7CD35CA33B1D919B8A83ADF4C6BE + +I=292 +KEY=FE3248768ACB0AF9DBD639AF7B7EB944566857E09B8753244CD1229883F144EE +PT=E48A7CD35CA33B1D919B8A83ADF4C6BE +CT=C377A76CF43C27784CC54079744413D1 + +I=293 +KEY=709E7BC30A7DE8FADC071B3D04338FCA951FF08C6FBB745C001462E1F7B5573F +PT=C377A76CF43C27784CC54079744413D1 +CT=01D8083A9EA403A4754EF82CA29CDD5B + +I=294 +KEY=448B1AEC2F68D202679183D85C4A6D2194C7F8B6F11F77F8755A9ACD55298A64 +PT=01D8083A9EA403A4754EF82CA29CDD5B +CT=46ADC32EFF2C3EFF40B468E845EFC2E4 + +I=295 +KEY=529401616FA6193014D6A10BEF1A816FD26A3B980E33490735EEF22510C64880 +PT=46ADC32EFF2C3EFF40B468E845EFC2E4 +CT=FCC6594B1BBF40E28BE798ABC00163F1 + +I=296 +KEY=15A5E8BAF02EF91390AB7D35742CC5C12EAC62D3158C09E5BE096A8ED0C72B71 +PT=FCC6594B1BBF40E28BE798ABC00163F1 +CT=28D35B6E1140738ED1DF20FE11003B1E + +I=297 +KEY=589C04ECDF2B884807919A2018A93080067F39BD04CC7A6B6FD64A70C1C7106F +PT=28D35B6E1140738ED1DF20FE11003B1E +CT=3354C7962E19FB043FD4CD7B2C99E195 + +I=298 +KEY=A6987BEB541098C7173475B34568F36B352BFE2B2AD5816F5002870BED5EF1FA +PT=3354C7962E19FB043FD4CD7B2C99E195 +CT=EB76F282C9F10F507FACFCDEEC8BBBB8 + +I=299 +KEY=3732B395057761A8A2624F52354668CFDE5D0CA9E3248E3F2FAE7BD501D54A42 +PT=EB76F282C9F10F507FACFCDEEC8BBBB8 +CT=77A4DAE8406992C5018D6B0310195E0C + +I=300 +KEY=E24C9F98F43E840AE04ED4928133F65AA9F9D641A34D1CFA2E2310D611CC144E +PT=77A4DAE8406992C5018D6B0310195E0C +CT=655DEC1062EDB50B8B31A66071E236A2 + +I=301 +KEY=8BA207CA6E2B720810E66CCAB597E8DACCA43A51C1A0A9F1A512B6B6602E22EC +PT=655DEC1062EDB50B8B31A66071E236A2 +CT=28A22A069D8FF3DE359860B0A5B6FD1F + +I=302 +KEY=22C629C84758D553AFE4876AA739A1F0E40610575C2F5A2F908AD606C598DFF3 +PT=28A22A069D8FF3DE359860B0A5B6FD1F +CT=95DD88B4AFD0680E221C70422ADFFCD1 + +I=303 +KEY=F86A3C799AAB6884220196BF07E1643D71DB98E3F3FF3221B296A644EF472322 +PT=95DD88B4AFD0680E221C70422ADFFCD1 +CT=323475C634FD6845BAA9F371F29DC363 + +I=304 +KEY=83412E9600B279F76C93F171C469AD1943EFED25C7025A64083F55351DDAE041 +PT=323475C634FD6845BAA9F371F29DC363 +CT=61276AD535F9E73FCFB53DBF2D5D1F62 + +I=305 +KEY=01AD15137C4A572322660716B6B4EDCD22C887F0F2FBBD5BC78A688A3087FF23 +PT=61276AD535F9E73FCFB53DBF2D5D1F62 +CT=105ECB04A5CA32FC93987569A7CB46D7 + +I=306 +KEY=1CC639BA56CA0DF23E64BB3395C08BB332964CF457318FA754121DE3974CB9F4 +PT=105ECB04A5CA32FC93987569A7CB46D7 +CT=831DBB3F4BBD4343B94D54AA2B3E0620 + +I=307 +KEY=25ABCF5B8DB1A7CCB1FA49936E0AB3C8B18BF7CB1C8CCCE4ED5F4949BC72BFD4 +PT=831DBB3F4BBD4343B94D54AA2B3E0620 +CT=40B9D9C6201E639DC9A04E500BCD7F61 + +I=308 +KEY=75B34E0F371C4527732F22CF35AD923BF1322E0D3C92AF7924FF0719B7BFC0B5 +PT=40B9D9C6201E639DC9A04E500BCD7F61 +CT=A159BB0C751148C14D561E0407A9F6DB + +I=309 +KEY=1EB6E3491B431B7EFFCCC965C9041274506B95014983E7B869A9191DB016366E +PT=A159BB0C751148C14D561E0407A9F6DB +CT=2012E67815334AC48E5309DD129E0476 + +I=310 +KEY=F0BDAFB216613A6FB3819D08B17EFDC1707973795CB0AD7CE7FA10C0A2883218 +PT=2012E67815334AC48E5309DD129E0476 +CT=53E415BC0C9013F83B77298395FC9FEF + +I=311 +KEY=9C5A3B9C862E07159AB06D5B7FB585C5239D66C55020BE84DC8D39433774ADF7 +PT=53E415BC0C9013F83B77298395FC9FEF +CT=2B1EEAA13373494A2A56C15FD5ECA103 + +I=312 +KEY=9764AC349B8222394160F4896BA6761808838C646353F7CEF6DBF81CE2980CF4 +PT=2B1EEAA13373494A2A56C15FD5ECA103 +CT=2A00E873782853DC842427A03C30A81A + +I=313 +KEY=42A1614569C4DE66D6336BC082B3B9DD228364171B7BA41272FFDFBCDEA8A4EE +PT=2A00E873782853DC842427A03C30A81A +CT=5FEB74E489C4C8121A15C2BCF51046A5 + +I=314 +KEY=CED80BE0859A5863CFE41F0F2CE9F65B7D6810F392BF6C0068EA1D002BB8E24B +PT=5FEB74E489C4C8121A15C2BCF51046A5 +CT=948214D5DB68997C37A48927AA97B89A + +I=315 +KEY=178DAF533EBB695D5E57401E5345C3E8E9EA042649D7F57C5F4E9427812F5AD1 +PT=948214D5DB68997C37A48927AA97B89A +CT=AB8F3BB9917E4D1C8F1F2EDDB7070530 + +I=316 +KEY=66F4B8B5A0BD877514FDB4CD2DD04D8C42653F9FD8A9B860D051BAFA36285FE1 +PT=AB8F3BB9917E4D1C8F1F2EDDB7070530 +CT=CB5FB11C6DB1AB6BC189F0F3FB47A2A5 + +I=317 +KEY=9753278CFCEE8B059ECF573A2E0D65D6893A8E83B518130B11D84A09CD6FFD44 +PT=CB5FB11C6DB1AB6BC189F0F3FB47A2A5 +CT=F0CE65E6C5C263182E6C253F26460A1B + +I=318 +KEY=121A860A5B53C56E536DE56566F31E2079F4EB6570DA70133FB46F36EB29F75F +PT=F0CE65E6C5C263182E6C253F26460A1B +CT=9AA17B0F532814CA74FF0A046F377C48 + +I=319 +KEY=88F5E58E9522495BF7B68430946F7C0FE355906A23F264D94B4B6532841E8B17 +PT=9AA17B0F532814CA74FF0A046F377C48 +CT=52CAAEF16E55858487AEDBDBA822002D + +I=320 +KEY=D9A3D3547F215D44D80C6A5D3548D4D2B19F3E9B4DA7E15DCCE5BEE92C3C8B3A +PT=52CAAEF16E55858487AEDBDBA822002D +CT=2599545FD15C7F59A6F02CDCB95E6589 + +I=321 +KEY=6ACE86543B0F981C2D0FCB1408A42C3294066AC49CFB9E046A1592359562EEB3 +PT=2599545FD15C7F59A6F02CDCB95E6589 +CT=DC7A68313CE3E1963D31E5149CDBE22A + +I=322 +KEY=E9D6D08194DAFBB7B491124515118FA6487C02F5A0187F925724772109B90C99 +PT=DC7A68313CE3E1963D31E5149CDBE22A +CT=333B588A7354CB3229E43780AFE4738D + +I=323 +KEY=762FC93CEED1EE9C6EF702A4E3BBABD67B475A7FD34CB4A07EC040A1A65D7F14 +PT=333B588A7354CB3229E43780AFE4738D +CT=41727DC0D18725AFD2EF8FF51EAE1C2C + +I=324 +KEY=FF4EC1DF818E820424CFE5D09EE2E5423A3527BF02CB910FAC2FCF54B8F36338 +PT=41727DC0D18725AFD2EF8FF51EAE1C2C +CT=A7236B16D9937C84F37BF9D79D0251F9 + +I=325 +KEY=59BDAB706DEA2EC52AE05A2E4382A4169D164CA9DB58ED8B5F54368325F132C1 +PT=A7236B16D9937C84F37BF9D79D0251F9 +CT=B81D30EFDB86688F1DCA616EC771B9FD + +I=326 +KEY=4C008516CD614B6588A526FFE33C055B250B7C4600DE8504429E57EDE2808B3C +PT=B81D30EFDB86688F1DCA616EC771B9FD +CT=A5AD142C8F078ABF419B7CF5C86C9F83 + +I=327 +KEY=DB65698F99E4A27019ABE194A89E9BC680A6686A8FD90FBB03052B182AEC14BF +PT=A5AD142C8F078ABF419B7CF5C86C9F83 +CT=861B59E3B61A5D02F0D70DFF40EF7FF2 + +I=328 +KEY=0790C16C53A7826B4B309DDF99B5239006BD318939C352B9F3D226E76A036B4D +PT=861B59E3B61A5D02F0D70DFF40EF7FF2 +CT=B0F4C2C4D0D282BE3128AD78D34B1FA6 + +I=329 +KEY=AFE168F089E676A806DD191003777E6DB649F34DE911D007C2FA8B9FB94874EB +PT=B0F4C2C4D0D282BE3128AD78D34B1FA6 +CT=9DFCF5727851ADE8C37A9AA3AA77B20D + +I=330 +KEY=F261CDF199D9EF436C1A08EB9755A2112BB5063F91407DEF0180113C133FC6E6 +PT=9DFCF5727851ADE8C37A9AA3AA77B20D +CT=9268DBA972B72C9DEF15CF9B8041F23B + +I=331 +KEY=E0D6DCF3BA840720688456A43E849C5CB9DDDD96E3F75172EE95DEA7937E34DD +PT=9268DBA972B72C9DEF15CF9B8041F23B +CT=D45A8B321CB6D8F28167C857BC2900BF + +I=332 +KEY=B77CF3A880C2E9E66D0C98A4D88555F46D8756A4FF4189806FF216F02F573462 +PT=D45A8B321CB6D8F28167C857BC2900BF +CT=0124FE2D8BCB81E1286A18D2BABEA919 + +I=333 +KEY=7729E55EFA6B249E0207E06AAF6F09206CA3A889748A086147980E2295E99D7B +PT=0124FE2D8BCB81E1286A18D2BABEA919 +CT=A1BB0D975A50BE8BD8C2973D4BA7BF42 + +I=334 +KEY=102384784C54539084BC7181AA95F184CD18A51E2EDAB6EA9F5A991FDE4E2239 +PT=A1BB0D975A50BE8BD8C2973D4BA7BF42 +CT=15302D5DBFD8E407EADDE9896B42CB13 + +I=335 +KEY=9FF48EF1068BFC07DA38F7790D7418D2D8288843910252ED75877096B50CE92A +PT=15302D5DBFD8E407EADDE9896B42CB13 +CT=90D93B8F802CFAD3F6E682DD704B5F43 + +I=336 +KEY=84477EB9007ECDF8D1C4A6A976C76AB848F1B3CC112EA83E8361F24BC547B669 +PT=90D93B8F802CFAD3F6E682DD704B5F43 +CT=2DD7E0B91C5DDF0FD118F4CDD836A212 + +I=337 +KEY=F1CE87DE930567CE29DF313D8778358D652653750D737731527906861D71147B +PT=2DD7E0B91C5DDF0FD118F4CDD836A212 +CT=AC9D307EFF44703D6FDA621FFF8D077C + +I=338 +KEY=22D31C8F64CFB23620A70E7CD4A486D3C9BB630BF237070C3DA36499E2FC1307 +PT=AC9D307EFF44703D6FDA621FFF8D077C +CT=CC6772DE3B27CB1DB3E5A804843EB6FF + +I=339 +KEY=FC9057D2D2D28BFAC4D5E3654717188205DC11D5C910CC118E46CC9D66C2A5F8 +PT=CC6772DE3B27CB1DB3E5A804843EB6FF +CT=BDB021550FE0744090EAFEEBCF422061 + +I=340 +KEY=1EA032190E7E4CC45D2E1E138429658AB86C3080C6F0B8511EAC3276A9808599 +PT=BDB021550FE0744090EAFEEBCF422061 +CT=C6E21F9A1305C3969F2D70C11D58A1A7 + +I=341 +KEY=B633EDA212B952785755700FBDC91CA57E8E2F1AD5F57BC7818142B7B4D8243E +PT=C6E21F9A1305C3969F2D70C11D58A1A7 +CT=01BC936B7063CA9D28DB1FFCCB9C2048 + +I=342 +KEY=94A06984520AB40D74568F0D5286AEE37F32BC71A596B15AA95A5D4B7F440476 +PT=01BC936B7063CA9D28DB1FFCCB9C2048 +CT=88279D100DFA68CEBD9949F19C3333F4 + +I=343 +KEY=96A3BD621155F71A9EFB8E35F95238ACF7152161A86CD99414C314BAE3773782 +PT=88279D100DFA68CEBD9949F19C3333F4 +CT=41574A686596D4741BF5DE52B5183260 + +I=344 +KEY=185312E4301E5AADC373CEB3EBA66FB7B6426B09CDFA0DE00F36CAE8566F05E2 +PT=41574A686596D4741BF5DE52B5183260 +CT=BD9F5087C32A66A4797C7EE87355FF4A + +I=345 +KEY=BC5D60D256DCA48E88E52F05C349431A0BDD3B8E0ED06B44764AB400253AFAA8 +PT=BD9F5087C32A66A4797C7EE87355FF4A +CT=A88BC3FAF87D6C1D3F98A2884EF1D4DA + +I=346 +KEY=1485A9209167A6FA2ECD2CE6AA03DBA5A356F874F6AD075949D216886BCB2E72 +PT=A88BC3FAF87D6C1D3F98A2884EF1D4DA +CT=E514E6E34A050EB917F2382EDF92353A + +I=347 +KEY=2B62B0E29763FF09F53A2006B990E97746421E97BCA809E05E202EA6B4591B48 +PT=E514E6E34A050EB917F2382EDF92353A +CT=142EEBE72E0F56ABE5D67FCC28F957F6 + +I=348 +KEY=FC13067E362B7C9C39AA73B85F32011C526CF57092A75F4BBBF6516A9CA04CBE +PT=142EEBE72E0F56ABE5D67FCC28F957F6 +CT=24FDB7A03FE8A9288BFAA5AC2527D015 + +I=349 +KEY=8AC3B473244989EA74025FE98269BC17769142D0AD4FF663300CF4C6B9879CAB +PT=24FDB7A03FE8A9288BFAA5AC2527D015 +CT=649095ABA5F4006B7B89D20F10A37AE9 + +I=350 +KEY=FD0F4205DBFF0160203898EF02E9088E1201D77B08BBF6084B8526C9A924E642 +PT=649095ABA5F4006B7B89D20F10A37AE9 +CT=F5428E8BDDDC31FC8EF67BC7DB3201D3 + +I=351 +KEY=701AF95194FB0918BC2CA79AFD507336E74359F0D567C7F4C5735D0E7216E791 +PT=F5428E8BDDDC31FC8EF67BC7DB3201D3 +CT=A56B2014A4929373DC1F6FD5C0AC138C + +I=352 +KEY=633D0E72722E6443D4E219086D221939422879E471F55487196C32DBB2BAF41D +PT=A56B2014A4929373DC1F6FD5C0AC138C +CT=F35F9CD43144B358843A48B4D1C41882 + +I=353 +KEY=DCA79BA0184EC0A22A875E5057CA967AB177E53040B1E7DF9D567A6F637EEC9F +PT=F35F9CD43144B358843A48B4D1C41882 +CT=A572C1F98330A1C1FA91DFD5A5B76AB9 + +I=354 +KEY=A3D0FE4C3C1A1CE19CF66CF80135553D140524C9C381461E67C7A5BAC6C98626 +PT=A572C1F98330A1C1FA91DFD5A5B76AB9 +CT=23C56E065427F0409504053DD8A994CD + +I=355 +KEY=175C8D4085802768D20875CDBE6EFE2437C04ACF97A6B65EF2C3A0871E6012EB +PT=23C56E065427F0409504053DD8A994CD +CT=7E666724C1CAC0A582325381E9C98D73 + +I=356 +KEY=800EE65CA3DE8643371DA10FB0605AB649A62DEB566C76FB70F1F306F7A99F98 +PT=7E666724C1CAC0A582325381E9C98D73 +CT=B6C18D730A074196884CADF151CAC890 + +I=357 +KEY=F526E578E8978822944644B146154425FF67A0985C6B376DF8BD5EF7A6635708 +PT=B6C18D730A074196884CADF151CAC890 +CT=0068BB370419CD39748559C2DE206817 + +I=358 +KEY=7D144850BE03306F41A642442890EA20FF0F1BAF5872FA548C38073578433F1F +PT=0068BB370419CD39748559C2DE206817 +CT=56852D240F01729C4EAD0B1FFC3EDA1F + +I=359 +KEY=33B2189E3774B1A066BE522C07550F88A98A368B577388C8C2950C2A847DE500 +PT=56852D240F01729C4EAD0B1FFC3EDA1F +CT=458633A84E1F5737E9668A37388CF3C2 + +I=360 +KEY=CF53C76250347B0CC5CAC660D52199B1EC0C0523196CDFFF2BF3861DBCF116C2 +PT=458633A84E1F5737E9668A37388CF3C2 +CT=F96E181E03350F27106C8D24403A49DD + +I=361 +KEY=618676C1702531077565060B5DA0570B15621D3D1A59D0D83B9F0B39FCCB5F1F +PT=F96E181E03350F27106C8D24403A49DD +CT=B515584E252F703A4EB55E81EDA58E30 + +I=362 +KEY=D2C8CF9645CD741F67263845150FE649A07745733F76A0E2752A55B8116ED12F +PT=B515584E252F703A4EB55E81EDA58E30 +CT=54E7D10C236785AFE0A93B3971D6F237 + +I=363 +KEY=D0847F41C7940023491C2F83D02F8271F490947F1C11254D95836E8160B82318 +PT=54E7D10C236785AFE0A93B3971D6F237 +CT=937DFDE10E96030A0A8823EA3EF31B98 + +I=364 +KEY=17502FC3077EFD420D2268CE0FF26F4667ED699E128726479F0B4D6B5E4B3880 +PT=937DFDE10E96030A0A8823EA3EF31B98 +CT=93FDF0392A3391C74DBE4229792C9630 + +I=365 +KEY=4D6AA08A6C7EB7CA9CBE7AF4500C229EF41099A738B4B780D2B50F422767AEB0 +PT=93FDF0392A3391C74DBE4229792C9630 +CT=B9F80E1476658E6CE7FADBA215298958 + +I=366 +KEY=D8820A50934290C146AFE477D9D4A0224DE897B34ED139EC354FD4E0324E27E8 +PT=B9F80E1476658E6CE7FADBA215298958 +CT=87ACDCD1F1332B9961CC5E18F9009A39 + +I=367 +KEY=50E8959452DD52247A6F21A0C7BEDEB8CA444B62BFE2127554838AF8CB4EBDD1 +PT=87ACDCD1F1332B9961CC5E18F9009A39 +CT=3DD6249971FEC0FB4432236078D98D53 + +I=368 +KEY=7A1973C5B90748596A54C709D1598DA5F7926FFBCE1CD28E10B1A998B3973082 +PT=3DD6249971FEC0FB4432236078D98D53 +CT=D540F8BDE3442D17E88B524D00618309 + +I=369 +KEY=F9C08719A452CA931A62C5BD8F1D669D22D297462D58FF99F83AFBD5B3F6B38B +PT=D540F8BDE3442D17E88B524D00618309 +CT=7BB18B2DA9ED188BCE3B18C02C9B3F3B + +I=370 +KEY=5EBA35F7E58381DBE29EC4A1D9B5B9AD59631C6B84B5E7123601E3159F6D8CB0 +PT=7BB18B2DA9ED188BCE3B18C02C9B3F3B +CT=9A7380BAA169495B0FC29BB002D70E48 + +I=371 +KEY=E442442FE32FA6BDA63AF0A6AC5D5AB2C3109CD125DCAE4939C378A59DBA82F8 +PT=9A7380BAA169495B0FC29BB002D70E48 +CT=88F3FE65298F7498A788E4196F13FC80 + +I=372 +KEY=39079A8713E148703212A6F7FFD1B04D4BE362B40C53DAD19E4B9CBCF2A97E78 +PT=88F3FE65298F7498A788E4196F13FC80 +CT=A5E6361FBA6418CD9B2F50992B50A557 + +I=373 +KEY=A99A33F38B36E3EE4DEE59F8A4282A84EE0554ABB637C21C0564CC25D9F9DB2F +PT=A5E6361FBA6418CD9B2F50992B50A557 +CT=B1430F431ACC1C498FABF2D33B63CC67 + +I=374 +KEY=BC09FAC540F44949F3B8EDFE2444CA725F465BE8ACFBDE558ACF3EF6E29A1748 +PT=B1430F431ACC1C498FABF2D33B63CC67 +CT=A90D76642D8D7899DD4A85EB92C89382 + +I=375 +KEY=D26C1D07B51073C609030DC782FFAE93F64B2D8C8176A6CC5785BB1D705284CA +PT=A90D76642D8D7899DD4A85EB92C89382 +CT=57522F39211100EF248D4A34E35CE4CE + +I=376 +KEY=2D7ADCD18F615F814B8D8B07CE48B4A1A11902B5A067A6237308F129930E6004 +PT=57522F39211100EF248D4A34E35CE4CE +CT=87AED1E0C9F067C5F3F6D3D3BBCDE872 + +I=377 +KEY=CA206C3442FAEFF3CB1292C675F52C2426B7D3556997C1E680FE22FA28C38876 +PT=87AED1E0C9F067C5F3F6D3D3BBCDE872 +CT=05798F53DFAE4A78D7BEEC24BE775B55 + +I=378 +KEY=6ECC5BC346B18446D77FFBC44CCB0B1823CE5C06B6398B9E5740CEDE96B4D323 +PT=05798F53DFAE4A78D7BEEC24BE775B55 +CT=7677CE104395FFA15B51F81DAFBCAB1A + +I=379 +KEY=2E52C8E239CF1E959AB831307034FEF755B99216F5AC743F0C1136C339087839 +PT=7677CE104395FFA15B51F81DAFBCAB1A +CT=760DE53561246F944B3E6279B39373F1 + +I=380 +KEY=79B65B7D435E2134A1AB9A1CC1F08A8423B4772394881BAB472F54BA8A9B0BC8 +PT=760DE53561246F944B3E6279B39373F1 +CT=5B61CC978A9C808767C272432765EC0B + +I=381 +KEY=9EF57B89E7B8127348A9EF05E93DCC8D78D5BBB41E149B2C20ED26F9ADFEE7C3 +PT=5B61CC978A9C808767C272432765EC0B +CT=902CDF3BD5E869E9CCFF8F2A454E1D42 + +I=382 +KEY=15BB7B6BC685E4865BFA134C59CFC9C5E8F9648FCBFCF2C5EC12A9D3E8B0FA81 +PT=902CDF3BD5E869E9CCFF8F2A454E1D42 +CT=38264937B9372C316478BDF7AE578900 + +I=383 +KEY=735D93C1DDD54986ACC6C2B0DFCC5E8AD0DF2DB872CBDEF4886A142446E77381 +PT=38264937B9372C316478BDF7AE578900 +CT=3BFE31D3E909E6EC3112F88DB8FFCA45 + +I=384 +KEY=675B0E7FC5BCC3AF319B1D55C1F62CCAEB211C6B9BC23818B978ECA9FE18B9C4 +PT=3BFE31D3E909E6EC3112F88DB8FFCA45 +CT=2BFD5F6532BC1D2A8DA34481F9228B84 + +I=385 +KEY=0AB242F9783E75D04E98733E63458F53C0DC430EA97E253234DBA828073A3240 +PT=2BFD5F6532BC1D2A8DA34481F9228B84 +CT=161481003108BAEFCC02BFD335C6A89F + +I=386 +KEY=58457CB82A24222839CF20D837F168A8D6C8C20E98769FDDF8D917FB32FC9ADF +PT=161481003108BAEFCC02BFD335C6A89F +CT=8A50E98A1165C1B6137231E519EC137B + +I=387 +KEY=C2C52CEA5654AAC9BD60FA04068094EF5C982B8489135E6BEBAB261E2B1089A4 +PT=8A50E98A1165C1B6137231E519EC137B +CT=24ACAA0F045F5A6765D3B468550585B5 + +I=388 +KEY=816757A434D81AA348E0B2F4FC44F4387834818B8D4C040C8E7892767E150C11 +PT=24ACAA0F045F5A6765D3B468550585B5 +CT=9993F9CBDAD9CA98C74CCBDB3E079F50 + +I=389 +KEY=647A9F1E43B08FD15EFC17342EB8970AE1A778405795CE94493459AD40129341 +PT=9993F9CBDAD9CA98C74CCBDB3E079F50 +CT=F676785AEF58297C28035E8E065829FF + +I=390 +KEY=4BB8B5020862EA9228B663DEDB39336717D1001AB8CDE7E861370723464ABABE +PT=F676785AEF58297C28035E8E065829FF +CT=ED16C74BD4252F7B72AA37D11E198508 + +I=391 +KEY=5392AAED87CE40891A69F4690A8743FBFAC7C7516CE8C893139D30F258533FB6 +PT=ED16C74BD4252F7B72AA37D11E198508 +CT=3BE7B6A9E197598146E98B7A501A2226 + +I=392 +KEY=9D8BABE9C12E6BA3A18EB23A92205456C12071F88D7F91125574BB8808491D90 +PT=3BE7B6A9E197598146E98B7A501A2226 +CT=CC1163A3D9AF3307ED740591AB66BD81 + +I=393 +KEY=231B451E506AC98FF993A3C7AD9C37F70D31125B54D0A215B800BE19A32FA011 +PT=CC1163A3D9AF3307ED740591AB66BD81 +CT=43FB8B2B44C740956111DA816616771D + +I=394 +KEY=1699C517EE1713D02C6EA0957E4A00CE4ECA99701017E280D9116498C539D70C +PT=43FB8B2B44C740956111DA816616771D +CT=A511AEA01DB8E7E16E7C53931625BEC3 + +I=395 +KEY=2624CE7970CC5DAFAC73C881FDD5F6EBEBDB37D00DAF0561B76D370BD31C69CF +PT=A511AEA01DB8E7E16E7C53931625BEC3 +CT=82EF6D2A1FF1DBCDF39DC04BE523229F + +I=396 +KEY=60C9931E19ED0D095F8DF75AEA56689769345AFA125EDEAC44F0F740363F4B50 +PT=82EF6D2A1FF1DBCDF39DC04BE523229F +CT=A595C8AAAAAD80DD4F40693FF2D89A19 + +I=397 +KEY=D461E3605B0AD0E87F5A078ECFE25934CCA19250B8F35E710BB09E7FC4E7D149 +PT=A595C8AAAAAD80DD4F40693FF2D89A19 +CT=57B18DFEAD129795C3BB8D6C06764729 + +I=398 +KEY=0BE3FC6C21764F1C15782D52D92919A09B101FAE15E1C9E4C80B1313C2919660 +PT=57B18DFEAD129795C3BB8D6C06764729 +CT=6F8606BBA6CC03A5D0A64FE21E277B60 + +I=399 +KEY=982D617A0F737342E99123A5A573D266F4961915B32DCA4118AD5CF1DCB6ED00 +PT=6F8606BBA6CC03A5D0A64FE21E277B60 +CT=1F6763DF807A7E70960D4CD3118E601A + +=========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_iv.readme b/src/lib/crypto/crypto_tests/test/ecb_iv.readme new file mode 100644 index 000000000..c37215768 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_iv.readme @@ -0,0 +1,19 @@ +Description of the Intermediate Value Known Answer Test +-------------------------------------------------------- + +The test encrypts one plaintext with a variable number of rounds. +In ECB encryption mode, the output PTi is the output after the +initial key addition and i rounds (a round ends with a key +addition). + +As explained in the documentation, in ECB decryption mode +there are several definitions of a `round' possible. In order +to make visual inspection more intuitive, we output the +intermediate values that correspond with the output of the +encryption mode. +These values might actually not occur in a practical decryption, +especially in an optimised implementation, where various operations +of different rounds are interchanged. + +This explains also why the Java and the C code output different +files for this test. diff --git a/src/lib/crypto/crypto_tests/test/ecb_iv.txt b/src/lib/crypto/crypto_tests/test/ecb_iv.txt new file mode 100644 index 000000000..3f6608e4e --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_iv.txt @@ -0,0 +1,123 @@ + +========================= + +FILENAME: "ecb_iv.txt" + +Electronic Codebook (ECB) Mode +Intermediate Value Known Answer Tests + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 +KEY=000102030405060708090A0B0C0D0E0F + +Intermediate Ciphertext Values (Encryption) + +PT=000102030405060708090A0B0C0D0E0F +CT1=B5C9179EB1CC1199B9C51B92B5C8159D +CT2=2B65F6374C427C5B2FE3A9256896755B +CT3=D1015FCBB4EF65679688462076B9D6AD +CT4=8E17064A2A35A183729FE59FF3A591F1 +CT5=D7557DD55999DB3259E2183D558DCDD2 +CT6=73A96A5D7799A5F3111D2B63684B1F7F +CT7=1B6B853069EEFC749AFEFD7B57A04CD1 +CT8=107EEADFB6F77933B5457A6F08F046B2 +CT9=8EC166481A677AA96A14FF6ECE88C010 +CT=0A940BB5416EF045F1C39458C653EA5A + +Intermediate Ciphertext Values (Decryption) + +CT=0A940BB5416EF045F1C39458C653EA5A +PT1=8EC166481A677AA96A14FF6ECE88C010 +PT2=107EEADFB6F77933B5457A6F08F046B2 +PT3=1B6B853069EEFC749AFEFD7B57A04CD1 +PT4=73A96A5D7799A5F3111D2B63684B1F7F +PT5=D7557DD55999DB3259E2183D558DCDD2 +PT6=8E17064A2A35A183729FE59FF3A591F1 +PT7=D1015FCBB4EF65679688462076B9D6AD +PT8=2B65F6374C427C5B2FE3A9256896755B +PT9=B5C9179EB1CC1199B9C51B92B5C8159D +PT=000102030405060708090A0B0C0D0E0F + +========== + +KEYSIZE=192 +KEY=000102030405060708090A0B0C0D0E0F1011121314151617 + +Intermediate Ciphertext Values (Encryption) + +PT=000102030405060708090A0B0C0D0E0F +CT1=73727170777675743B25919A3F20979D +CT2=C673B27A311EC2EB64AD47FF53B233D7 +CT3=0B5CC6BA34C807E6496D79B46826A1E8 +CT4=005B53A5B660E280307883487E4D1A4D +CT5=88A105F0DDD45F3674DBC3DE1A211B03 +CT6=EB5CD8B5FD8A3F33F03A70FB5C620C06 +CT7=909913B09BD2CC5A70B6C647931F0A1F +CT8=6EB6CA10E395AFD646B02C5E9E745A9F +CT9=2CFD2FC41AF82B8DFB80E9BD1C989ECE +CT10=31C5D5E27EAF073E5C21ADAAEAA969D4 +CT11=1DB94956A7268B0DE963D27E55868580 +CT=0060BFFE46834BB8DA5CF9A61FF220AE + +Intermediate Ciphertext Values (Decryption) + +CT=0060BFFE46834BB8DA5CF9A61FF220AE +PT1=1DB94956A7268B0DE963D27E55868580 +PT2=31C5D5E27EAF073E5C21ADAAEAA969D4 +PT3=2CFD2FC41AF82B8DFB80E9BD1C989ECE +PT4=6EB6CA10E395AFD646B02C5E9E745A9F +PT5=909913B09BD2CC5A70B6C647931F0A1F +PT6=EB5CD8B5FD8A3F33F03A70FB5C620C06 +PT7=88A105F0DDD45F3674DBC3DE1A211B03 +PT8=005B53A5B660E280307883487E4D1A4D +PT9=0B5CC6BA34C807E6496D79B46826A1E8 +PT10=C673B27A311EC2EB64AD47FF53B233D7 +PT11=73727170777675743B25919A3F20979D +PT=000102030405060708090A0B0C0D0E0F + +========== + +KEYSIZE=256 +KEY=000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F + +Intermediate Ciphertext Values (Encryption) + +PT=000102030405060708090A0B0C0D0E0F +CT1=73727170777675747B7A79787F7E7D7C +CT2=4E5D32BB8B67FD1BD4CFEC9FFB20AC4F +CT3=96A212E486341549C4AAF7C843F0277A +CT4=0F45F284CDD0CB16E3EA81ECC891A4E1 +CT5=E59BFC458A89063E0137BBE6DB63A058 +CT6=1D958D960EA3143383C17D5CD87BA327 +CT7=43843EF40D9219481935B77A586DB5DE +CT8=5AA5ABADBC40230CBA6124E9FAEEEFB5 +CT9=DAD61937BDFD582927F14C990C5FC761 +CT10=E8A48C5DEE5C0792AB6DFFF5B038529D +CT11=4B71E5A8BFB4E9A5312A18119E68E829 +CT12=DCBA75CEE6589DDC0D289A172E8415B5 +CT13=8A0E856B2074C1093104131D0628BFE8 +CT=5A6E045708FB7196F02E553D02C3A692 + +Intermediate Ciphertext Values (Decryption) + +CT=5A6E045708FB7196F02E553D02C3A692 +PT1=8A0E856B2074C1093104131D0628BFE8 +PT2=DCBA75CEE6589DDC0D289A172E8415B5 +PT3=4B71E5A8BFB4E9A5312A18119E68E829 +PT4=E8A48C5DEE5C0792AB6DFFF5B038529D +PT5=DAD61937BDFD582927F14C990C5FC761 +PT6=5AA5ABADBC40230CBA6124E9FAEEEFB5 +PT7=43843EF40D9219481935B77A586DB5DE +PT8=1D958D960EA3143383C17D5CD87BA327 +PT9=E59BFC458A89063E0137BBE6DB63A058 +PT10=0F45F284CDD0CB16E3EA81ECC891A4E1 +PT11=96A212E486341549C4AAF7C843F0277A +PT12=4E5D32BB8B67FD1BD4CFEC9FFB20AC4F +PT13=73727170777675747B7A79787F7E7D7C +PT=000102030405060708090A0B0C0D0E0F + +========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_tbl.txt b/src/lib/crypto/crypto_tests/test/ecb_tbl.txt new file mode 100644 index 000000000..f1eef5300 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_tbl.txt @@ -0,0 +1,1955 @@ +/* Description of what tables are tested: + The provided implementations each use a different set of tables + - Java implementation: uses no tables + - reference C implementation: uses Logtable, Alogtable, S, Si, rcon + - fast C implementation: uses Logtable, Alogtable, rcon + and additionally, T1, T2, T3, T4, T5, T6, T7, T8 + and (for the inverse key schedule only) U1, U2, U3, U4. + All these tables are tested. + +========================= + +FILENAME: "ecb_tbl.txt" + +Electronic Codebook (ECB) Mode +Tables Known Answer Tests + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + + +I=1 +KEY=00010203050607080A0B0C0D0F101112 +PT=506812A45F08C889B97F5980038B8359 +CT=D8F532538289EF7D06B506A4FD5BE9C9 + +I=2 +KEY=14151617191A1B1C1E1F202123242526 +PT=5C6D71CA30DE8B8B00549984D2EC7D4B +CT=59AB30F4D4EE6E4FF9907EF65B1FB68C + +I=3 +KEY=28292A2B2D2E2F30323334353738393A +PT=53F3F4C64F8616E4E7C56199F48F21F6 +CT=BF1ED2FCB2AF3FD41443B56D85025CB1 + +I=4 +KEY=3C3D3E3F41424344464748494B4C4D4E +PT=A1EB65A3487165FB0F1C27FF9959F703 +CT=7316632D5C32233EDCB0780560EAE8B2 + +I=5 +KEY=50515253555657585A5B5C5D5F606162 +PT=3553ECF0B1739558B08E350A98A39BFA +CT=408C073E3E2538072B72625E68B8364B + +I=6 +KEY=64656667696A6B6C6E6F707173747576 +PT=67429969490B9711AE2B01DC497AFDE8 +CT=E1F94DFA776597BEACA262F2F6366FEA + +I=7 +KEY=78797A7B7D7E7F80828384858788898A +PT=93385C1F2AEC8BED192F5A8E161DD508 +CT=F29E986C6A1C27D7B29FFD7EE92B75F1 + +I=8 +KEY=8C8D8E8F91929394969798999B9C9D9E +PT=B5BF946BE19BEB8DB3983B5F4C6E8DDB +CT=131C886A57F8C2E713ABA6955E2B55B5 + +I=9 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 +PT=41321EE10E21BD907227C4450FF42324 +CT=D2AB7662DF9B8C740210E5EEB61C199D + +I=10 +KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=00A82F59C91C8486D12C0A80124F6089 +CT=14C10554B2859C484CAB5869BBE7C470 + +I=11 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA +PT=7CE0FD076754691B4BBD9FAF8A1372FE +CT=DB4D498F0A49CF55445D502C1F9AB3B5 + +I=12 +KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=23605A8243D07764541BC5AD355B3129 +CT=6D96FEF7D66590A77A77BB2056667F7F + +I=13 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE010002 +PT=12A8CFA23EA764FD876232B4E842BC44 +CT=316FB68EDBA736C53E78477BF913725C + +I=14 +KEY=04050607090A0B0C0E0F101113141516 +PT=BCAF32415E8308B3723E5FDD853CCC80 +CT=6936F2B93AF8397FD3A771FC011C8C37 + +I=15 +KEY=2C2D2E2F31323334363738393B3C3D3E +PT=89AFAE685D801AD747ACE91FC49ADDE0 +CT=F3F92F7A9C59179C1FCC2C2BA0B082CD + +I=16 +KEY=40414243454647484A4B4C4D4F505152 +PT=F521D07B484357C4A69E76124A634216 +CT=6A95EA659EE3889158E7A9152FF04EBC + +I=17 +KEY=54555657595A5B5C5E5F606163646566 +PT=3E23B3BC065BCC152407E23896D77783 +CT=1959338344E945670678A5D432C90B93 + +I=18 +KEY=68696A6B6D6E6F70727374757778797A +PT=79F0FBA002BE1744670E7E99290D8F52 +CT=E49BDDD2369B83EE66E6C75A1161B394 + +I=19 +KEY=7C7D7E7F81828384868788898B8C8D8E +PT=DA23FE9D5BD63E1D72E3DAFBE21A6C2A +CT=D3388F19057FF704B70784164A74867D + +I=20 +KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=E3F5698BA90B6A022EFD7DB2C7E6C823 +CT=23AA03E2D5E4CD24F3217E596480D1E1 + +I=21 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 +PT=BDC2691D4F1B73D2700679C3BCBF9C6E +CT=C84113D68B666AB2A50A8BDB222E91B9 + +I=22 +KEY=08090A0B0D0E0F10121314151718191A +PT=BA74E02093217EE1BA1B42BD5624349A +CT=AC02403981CD4340B507963DB65CB7B6 + +I=23 +KEY=6C6D6E6F71727374767778797B7C7D7E +PT=B5C593B5851C57FBF8B3F57715E8F680 +CT=8D1299236223359474011F6BF5088414 + +I=24 +KEY=80818283858687888A8B8C8D8F909192 +PT=3DA9BD9CEC072381788F9387C3BBF4EE +CT=5A1D6AB8605505F7977E55B9A54D9B90 + +I=25 +KEY=94959697999A9B9C9E9FA0A1A3A4A5A6 +PT=4197F3051121702AB65D316B3C637374 +CT=72E9C2D519CF555E4208805AABE3B258 + +I=26 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA +PT=9F46C62EC4F6EE3F6E8C62554BC48AB7 +CT=A8F3E81C4A23A39EF4D745DFFE026E80 + +I=27 +KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=0220673FE9E699A4EBC8E0DBEB6979C8 +CT=546F646449D31458F9EB4EF5483AEE6C + +I=28 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 +PT=B2B99171337DED9BC8C2C23FF6F18867 +CT=4DBE4BC84AC797C0EE4EFB7F1A07401C + +I=29 +KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=A7FACF4E301E984E5EFEEFD645B23505 +CT=25E10BFB411BBD4D625AC8795C8CA3B3 + +I=30 +KEY=F8F9FAFBFDFEFE00020304050708090A +PT=F7C762E4A9819160FD7ACFB6C4EEDCDD +CT=315637405054EC803614E43DEF177579 + +I=31 +KEY=0C0D0E0F11121314161718191B1C1D1E +PT=9B64FC21EA08709F4915436FAA70F1BE +CT=60C5BC8A1410247295C6386C59E572A8 + +I=32 +KEY=20212223252627282A2B2C2D2F303132 +PT=52AF2C3DE07EE6777F55A4ABFC100B3F +CT=01366FC8CA52DFE055D6A00A76471BA6 + +I=33 +KEY=34353637393A3B3C3E3F404143444546 +PT=2FCA001224386C57AA3F968CBE2C816F +CT=ECC46595516EC612449C3F581E7D42FF + +I=34 +KEY=48494A4B4D4E4F50525354555758595A +PT=4149C73658A4A9C564342755EE2C132F +CT=6B7FFE4C602A154B06EE9C7DAB5331C9 + +I=35 +KEY=5C5D5E5F61626364666768696B6C6D6E +PT=AF60005A00A1772F7C07A48A923C23D2 +CT=7DA234C14039A240DD02DD0FBF84EB67 + +I=36 +KEY=70717273757677787A7B7C7D7F808182 +PT=6FCCBC28363759914B6F0280AFAF20C6 +CT=C7DC217D9E3604FFE7E91F080ECD5A3A + +I=37 +KEY=84858687898A8B8C8E8F909193949596 +PT=7D82A43DDF4FEFA2FC5947499884D386 +CT=37785901863F5C81260EA41E7580CDA5 + +I=38 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AA +PT=5D5A990EAAB9093AFE4CE254DFA49EF9 +CT=A07B9338E92ED105E6AD720FCCCE9FE4 + +I=39 +KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=4CD1E2FD3F4434B553AAE453F0ED1A02 +CT=AE0FB9722418CC21A7DA816BBC61322C + +I=40 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 +PT=5A2C9A9641D4299125FA1B9363104B5E +CT=C826A193080FF91FFB21F71D3373C877 + +I=41 +KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=B517FE34C0FA217D341740BFD4FE8DD4 +CT=1181B11B0E494E8D8B0AA6B1D5AC2C48 + +I=42 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA +PT=014BAF2278A69D331D5180103643E99A +CT=6743C3D1519AB4F2CD9A78AB09A511BD + +I=43 +KEY=FCFDFEFF01020304060708090B0C0D0E +PT=B529BD8164F20D0AA443D4932116841C +CT=DC55C076D52BACDF2EEFD952946A439D + +I=44 +KEY=10111213151617181A1B1C1D1F202122 +PT=2E596DCBB2F33D4216A1176D5BD1E456 +CT=711B17B590FFC72B5C8E342B601E8003 + +I=45 +KEY=24252627292A2B2C2E2F303133343536 +PT=7274A1EA2B7EE2424E9A0E4673689143 +CT=19983BB0950783A537E1339F4AA21C75 + +I=46 +KEY=38393A3B3D3E3F40424344454748494A +PT=AE20020BD4F13E9D90140BEE3B5D26AF +CT=3BA7762E15554169C0F4FA39164C410C + +I=47 +KEY=4C4D4E4F51525354565758595B5C5D5E +PT=BAAC065DA7AC26E855E79C8849D75A02 +CT=A0564C41245AFCA7AF8AA2E0E588EA89 + +I=48 +KEY=60616263656667686A6B6C6D6F707172 +PT=7C917D8D1D45FAB9E2540E28832540CC +CT=5E36A42A2E099F54AE85ECD92E2381ED + +I=49 +KEY=74757677797A7B7C7E7F808183848586 +PT=BDE6F89E16DAADB0E847A2A614566A91 +CT=770036F878CD0F6CA2268172F106F2FE + +I=50 +KEY=88898A8B8D8E8F90929394959798999A +PT=C9DE163725F1F5BE44EBB1DB51D07FBC +CT=7E4E03908B716116443CCF7C94E7C259 + +I=51 +KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=3AF57A58F0C07DFFA669572B521E2B92 +CT=482735A48C30613A242DD494C7F9185D + +I=52 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 +PT=3D5EBAC306DDE4604F1B4FBBBFCDAE55 +CT=B4C0F6C9D4D7079ADDF9369FC081061D + +I=53 +KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=C2DFA91BCEB76A1183C995020AC0B556 +CT=D5810FE0509AC53EDCD74F89962E6270 + +I=54 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA +PT=C70F54305885E9A0746D01EC56C8596B +CT=03F17A16B3F91848269ECDD38EBB2165 + +I=55 +KEY=ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=C4F81B610E98012CE000182050C0C2B2 +CT=DA1248C3180348BAD4A93B4D9856C9DF + +I=56 +KEY=00010203050607080A0B0C0D0F101112 +PT=EAAB86B1D02A95D7404EFF67489F97D4 +CT=3D10D7B63F3452C06CDF6CCE18BE0C2C + +I=57 +KEY=14151617191A1B1C1E1F202123242526 +PT=7C55BDB40B88870B52BEC3738DE82886 +CT=4AB823E7477DFDDC0E6789018FCB6258 + +I=58 +KEY=28292A2B2D2E2F30323334353738393A +PT=BA6EAA88371FF0A3BD875E3F2A975CE0 +CT=E6478BA56A77E70CFDAA5C843ABDE30E + +I=59 +KEY=3C3D3E3F41424344464748494B4C4D4E +PT=08059130C4C24BD30CF0575E4E0373DC +CT=1673064895FBEAF7F09C5429FF75772D + +I=60 +KEY=50515253555657585A5B5C5D5F606162 +PT=9A8EAB004EF53093DFCF96F57E7EDA82 +CT=4488033AE9F2EFD0CA9383BFCA1A94E9 + +I=61 +KEY=64656667696A6B6C6E6F707173747576 +PT=0745B589E2400C25F117B1D796C28129 +CT=978F3B8C8F9D6F46626CAC3C0BCB9217 + +I=62 +KEY=78797A7B7D7E7F80828384858788898A +PT=2F1777781216CEC3F044F134B1B92BBE +CT=E08C8A7E582E15E5527F1D9E2EECB236 + +I=63 +KEY=8C8D8E8F91929394969798999B9C9D9E +PT=353A779FFC541B3A3805D90CE17580FC +CT=CEC155B76AC5FFDA4CF4F9CA91E49A7A + +I=64 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 +PT=1A1EAE4415CEFCF08C4AC1C8F68BEA8F +CT=D5AC7165763225DD2A38CDC6862C29AD + +I=65 +KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=E6E7E4E5B0B3B2B5D4D5AAAB16111013 +CT=03680FE19F7CE7275452020BE70E8204 + +I=66 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA +PT=F8F9FAFBFBF8F9E677767170EFE0E1E2 +CT=461DF740C9781C388E94BB861CEB54F6 + +I=67 +KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=63626160A1A2A3A445444B4A75727370 +CT=451BD60367F96483042742219786A074 + +I=68 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE010002 +PT=717073720605040B2D2C2B2A05FAFBF9 +CT=E4DFA42671A02E57EF173B85C0EA9F2B + +I=69 +KEY=04050607090A0B0C0E0F101113141516 +PT=78797A7BEAE9E8EF3736292891969794 +CT=ED11B89E76274282227D854700A78B9E + +I=70 +KEY=18191A1B1D1E1F20222324252728292A +PT=838281803231300FDDDCDBDAA0AFAEAD +CT=433946EAA51EA47AF33895F2B90B3B75 + +I=71 +KEY=2C2D2E2F31323334363738393B3C3D3E +PT=18191A1BBFBCBDBA75747B7A7F78797A +CT=6BC6D616A5D7D0284A5910AB35022528 + +I=72 +KEY=40414243454647484A4B4C4D4F505152 +PT=848586879B989996A3A2A5A4849B9A99 +CT=D2A920ECFE919D354B5F49EAE9719C98 + +I=73 +KEY=54555657595A5B5C5E5F606163646566 +PT=0001020322212027CACBF4F551565754 +CT=3A061B17F6A92885EFBD0676985B373D + +I=74 +KEY=68696A6B6D6E6F70727374757778797A +PT=CECFCCCDAFACADB2515057564A454447 +CT=FADEEC16E33EA2F4688499D157E20D8F + +I=75 +KEY=7C7D7E7F81828384868788898B8C8D8E +PT=92939091CDCECFC813121D1C80878685 +CT=5CDEFEDE59601AA3C3CDA36FA6B1FA13 + +I=76 +KEY=90919293959697989A9B9C9D9FA0A1A2 +PT=D2D3D0D16F6C6D6259585F5ED1EEEFEC +CT=9574B00039844D92EBBA7EE8719265F8 + +I=77 +KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=ACADAEAF878485820F0E1110D5D2D3D0 +CT=9A9CF33758671787E5006928188643FA + +I=78 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA +PT=9091929364676619E6E7E0E1757A7B78 +CT=2CDDD634C846BA66BB46CBFEA4A674F9 + +I=79 +KEY=CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=BABBB8B98A89888F74757A7B92959497 +CT=D28BAE029393C3E7E26E9FAFBBB4B98F + +I=80 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 +PT=8D8C8F8E6E6D6C633B3A3D3CCAD5D4D7 +CT=EC27529B1BEE0A9AB6A0D73EBC82E9B7 + +I=81 +KEY=F4F5F6F7F9FAFBFCFEFE010103040506 +PT=86878485010203040808F7F767606162 +CT=3CB25C09472AFF6EE7E2B47CCD7CCB17 + +I=82 +KEY=08090A0B0D0E0F10121314151718191A +PT=8E8F8C8D656667788A8B8C8D010E0F0C +CT=DEE33103A7283370D725E44CA38F8FE5 + +I=83 +KEY=1C1D1E1F21222324262728292B2C2D2E +PT=C8C9CACB858687807A7B7475E7E0E1E2 +CT=27F9BCD1AAC64BFFC11E7815702C1A69 + +I=84 +KEY=30313233353637383A3B3C3D3F404142 +PT=6D6C6F6E5053525D8C8D8A8BADD2D3D0 +CT=5DF534FFAD4ED0749A9988E9849D0021 + +I=85 +KEY=44454647494A4B4C4E4F505153545556 +PT=28292A2B393A3B3C0607181903040506 +CT=A48BEE75DB04FB60CA2B80F752A8421B + +I=86 +KEY=58595A5B5D5E5F60626364656768696A +PT=A5A4A7A6B0B3B28DDBDADDDCBDB2B3B0 +CT=024C8CF70BC86EE5CE03678CB7AF45F9 + +I=87 +KEY=6C6D6E6F71727374767778797B7C7D7E +PT=323330316467666130313E3F2C2B2A29 +CT=3C19AC0F8A3A3862CE577831301E166B + +I=88 +KEY=80818283858687888A8B8C8D8F909192 +PT=27262524080B0A05171611100B141516 +CT=C5E355B796A57421D59CA6BE82E73BCA + +I=89 +KEY=94959697999A9B9C9E9FA0A1A3A4A5A6 +PT=040506074142434435340B0AA3A4A5A6 +CT=D94033276417ABFB05A69D15B6E386E2 + +I=90 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA +PT=242526271112130C61606766BDB2B3B0 +CT=24B36559EA3A9B9B958FE6DA3E5B8D85 + +I=91 +KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=4B4A4948252627209E9F9091CEC9C8CB +CT=20FD4FEAA0E8BF0CCE7861D74EF4CB72 + +I=92 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 +PT=68696A6B6665646B9F9E9998D9E6E7E4 +CT=350E20D5174277B9EC314C501570A11D + +I=93 +KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=34353637C5C6C7C0F0F1EEEF7C7B7A79 +CT=87A29D61B7C604D238FE73045A7EFD57 + +I=94 +KEY=F8F9FAFBFDFEFE00020304050708090A +PT=32333031C2C1C13F0D0C0B0A050A0B08 +CT=2C3164C1CC7D0064816BDC0FAA362C52 + +I=95 +KEY=0C0D0E0F11121314161718191B1C1D1E +PT=CDCCCFCEBEBDBCBBABAAA5A4181F1E1D +CT=195FE5E8A05A2ED594F6E4400EEE10B3 + +I=96 +KEY=20212223252627282A2B2C2D2F303132 +PT=212023223635343BA0A1A6A7445B5A59 +CT=E4663DF19B9A21A5A284C2BD7F905025 + +I=97 +KEY=34353637393A3B3C3E3F404143444546 +PT=0E0F0C0DA8ABAAAD2F2E515002050407 +CT=21B88714CFB4E2A933BD281A2C4743FD + +I=98 +KEY=48494A4B4D4E4F50525354555758595A +PT=070605042A2928378E8F8889BDB2B3B0 +CT=CBFC3980D704FD0FC54378AB84E17870 + +I=99 +KEY=5C5D5E5F61626364666768696B6C6D6E +PT=CBCAC9C893909196A9A8A7A6A5A2A3A0 +CT=BC5144BAA48BDEB8B63E22E03DA418EF + +I=100 +KEY=70717273757677787A7B7C7D7F808182 +PT=80818283C1C2C3CC9C9D9A9B0CF3F2F1 +CT=5A1DBAEF1EE2984B8395DA3BDFFA3CCC + +I=101 +KEY=84858687898A8B8C8E8F909193949596 +PT=1213101125262720FAFBE4E5B1B6B7B4 +CT=F0B11CD0729DFCC80CEC903D97159574 + +I=102 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AA +PT=7F7E7D7C3033320D97969190222D2C2F +CT=9F95314ACFDDC6D1914B7F19A9CC8209 + +I=103 +KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=4E4F4C4D484B4A4D81808F8E53545556 +CT=595736F6F0F70914A94E9E007F022519 + +I=104 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 +PT=DCDDDEDFB0B3B2BD15141312A1BEBFBC +CT=1F19F57892CAE586FCDFB4C694DEB183 + +I=105 +KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=93929190282B2A2DC4C5FAFB92959497 +CT=540700EE1F6F3DAB0B3EDDF6CAEE1EF5 + +I=106 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA +PT=F5F4F7F6C4C7C6D9373631307E717073 +CT=14A342A91019A331687A2254E6626CA2 + +I=107 +KEY=FCFDFEFF01020304060708090B0C0D0E +PT=93929190B6B5B4B364656A6B05020300 +CT=7B25F3C3B2EEA18D743EF283140F29FF + +I=108 +KEY=10111213151617181A1B1C1D1F202122 +PT=BABBB8B90D0E0F00A4A5A2A3043B3A39 +CT=46C2587D66E5E6FA7F7CA6411AD28047 + +I=109 +KEY=24252627292A2B2C2E2F303133343536 +PT=D8D9DADB7F7C7D7A10110E0F787F7E7D +CT=09470E72229D954ED5EE73886DFEEBA9 + +I=110 +KEY=38393A3B3D3E3F40424344454748494A +PT=FEFFFCFDEFECED923B3A3D3C6768696A +CT=D77C03DE92D4D0D79EF8D4824EF365EB + +I=111 +KEY=4C4D4E4F51525354565758595B5C5D5E +PT=D6D7D4D58A89888F96979899A5A2A3A0 +CT=1D190219F290E0F1715D152D41A23593 + +I=112 +KEY=60616263656667686A6B6C6D6F707172 +PT=18191A1BA8ABAAA5303136379B848586 +CT=A2CD332CE3A0818769616292E87F757B + +I=113 +KEY=74757677797A7B7C7E7F808183848586 +PT=6B6A6968A4A7A6A1D6D72829B0B7B6B5 +CT=D54AFA6CE60FBF9341A3690E21385102 + +I=114 +KEY=88898A8B8D8E8F90929394959798999A +PT=000102038A89889755545352A6A9A8AB +CT=06E5C364DED628A3F5E05E613E356F46 + +I=115 +KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=2D2C2F2EB3B0B1B6B6B7B8B9F2F5F4F7 +CT=EAE63C0E62556DAC85D221099896355A + +I=116 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 +PT=979695943536373856575051E09F9E9D +CT=1FED060E2C6FC93EE764403A889985A2 + +I=117 +KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=A4A5A6A7989B9A9DB1B0AFAE7A7D7C7F +CT=C25235C1A30FDEC1C7CB5C5737B2A588 + +I=118 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA +PT=C1C0C3C2686B6A55A8A9AEAFEAE5E4E7 +CT=796DBEF95147D4D30873AD8B7B92EFC0 + +I=119 +KEY=ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=C1C0C3C2141716118C8D828364636261 +CT=CBCF0FB34D98D0BD5C22CE37211A46BF + +I=120 +KEY=00010203050607080A0B0C0D0F101112 +PT=93929190CCCFCEC196979091E0FFFEFD +CT=94B44DA6466126CAFA7C7FD09063FC24 + +I=121 +KEY=14151617191A1B1C1E1F202123242526 +PT=B4B5B6B7F9FAFBFC25241B1A6E69686B +CT=D78C5B5EBF9B4DBDA6AE506C5074C8FE + +I=122 +KEY=28292A2B2D2E2F30323334353738393A +PT=868784850704051AC7C6C1C08788898A +CT=6C27444C27204B043812CF8CF95F9769 + +I=123 +KEY=3C3D3E3F41424344464748494B4C4D4E +PT=F4F5F6F7AAA9A8AFFDFCF3F277707172 +CT=BE94524EE5A2AA50BBA8B75F4C0AEBCF + +I=124 +KEY=50515253555657585A5B5C5D5F606162 +PT=D3D2D1D00605040BC3C2C5C43E010003 +CT=A0AEAAE91BA9F31F51AEB3588CF3A39E + +I=125 +KEY=64656667696A6B6C6E6F707173747576 +PT=73727170424140476A6B74750D0A0B08 +CT=275297779C28266EF9FE4C6A13C08488 + +I=126 +KEY=78797A7B7D7E7F80828384858788898A +PT=C2C3C0C10A0908F754555253A1AEAFAC +CT=86523D92BB8672CB01CF4A77FD725882 + +I=127 +KEY=8C8D8E8F91929394969798999B9C9D9E +PT=6D6C6F6EF8FBFAFD82838C8DF8FFFEFD +CT=4B8327640E9F33322A04DD96FCBF9A36 + +I=128 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2 +PT=F5F4F7F684878689A6A7A0A1D2CDCCCF +CT=CE52AF650D088CA559425223F4D32694 + +========== + +KEYSIZE=192 + + +I=1 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C +PT=2D33EEF2C0430A8A9EBF45E809C40BB6 +CT=DFF4945E0336DF4C1C56BC700EFF837F + +I=2 +KEY=1E1F20212324252628292A2B2D2E2F30323334353738393A +PT=6AA375D1FA155A61FB72353E0A5A8756 +CT=B6FDDEF4752765E347D5D2DC196D1252 + +I=3 +KEY=3C3D3E3F41424344464748494B4C4D4E5051525355565758 +PT=BC3736518B9490DCB8ED60EB26758ED4 +CT=D23684E3D963B3AFCF1A114ACA90CBD6 + +I=4 +KEY=5A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=AA214402B46CFFB9F761EC11263A311E +CT=3A7AC027753E2A18C2CEAB9E17C11FD0 + +I=5 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394 +PT=02AEA86E572EEAB66B2C3AF5E9A46FD6 +CT=8F6786BD007528BA26603C1601CDD0D8 + +I=6 +KEY=969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2 +PT=E2AEF6ACC33B965C4FA1F91C75FF6F36 +CT=D17D073B01E71502E28B47AB551168B3 + +I=7 +KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0 +PT=0659DF46427162B9434865DD9499F91D +CT=A469DA517119FAB95876F41D06D40FFA + +I=8 +KEY=D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=49A44239C748FEB456F59C276A5658DF +CT=6091AA3B695C11F5C0B6AD26D3D862FF + +I=9 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C +PT=66208F6E9D04525BDEDB2733B6A6BE37 +CT=70F9E67F9F8DF1294131662DC6E69364 + +I=10 +KEY=0E0F10111314151618191A1B1D1E1F20222324252728292A +PT=3393F8DFC729C97F5480B950BC9666B0 +CT=D154DCAFAD8B207FA5CBC95E9996B559 + +I=11 +KEY=2C2D2E2F31323334363738393B3C3D3E4041424345464748 +PT=606834C8CE063F3234CF1145325DBD71 +CT=4934D541E8B46FA339C805A7AEB9E5DA + +I=12 +KEY=4A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=FEC1C04F529BBD17D8CECFCC4718B17F +CT=62564C738F3EFE186E1A127A0C4D3C61 + +I=13 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384 +PT=32DF99B431ED5DC5ACF8CAF6DC6CE475 +CT=07805AA043986EB23693E23BEF8F3438 + +I=14 +KEY=868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2 +PT=7FDC2B746F3F665296943B83710D1F82 +CT=DF0B4931038BADE848DEE3B4B85AA44B + +I=15 +KEY=A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0 +PT=8FBA1510A3C5B87E2EAA3F7A91455CA2 +CT=592D5FDED76582E4143C65099309477C + +I=16 +KEY=C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=2C9B468B1C2EED92578D41B0716B223B +CT=C9B8D6545580D3DFBCDD09B954ED4E92 + +I=17 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFC +PT=0A2BBF0EFC6BC0034F8A03433FCA1B1A +CT=5DCCD5D6EB7C1B42ACB008201DF707A0 + +I=18 +KEY=FEFE01010304050608090A0B0D0E0F10121314151718191A +PT=25260E1F31F4104D387222E70632504B +CT=A2A91682FFEB6ED1D34340946829E6F9 + +I=19 +KEY=1C1D1E1F21222324262728292B2C2D2E3031323335363738 +PT=C527D25A49F08A5228D338642AE65137 +CT=E45D185B797000348D9267960A68435D + +I=20 +KEY=3A3B3C3D3F40414244454647494A4B4C4E4F505153545556 +PT=3B49FC081432F5890D0E3D87E884A69E +CT=45E060DAE5901CDA8089E10D4F4C246B + +I=21 +KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374 +PT=D173F9ED1E57597E166931DF2754A083 +CT=F6951AFACC0079A369C71FDCFF45DF50 + +I=22 +KEY=767778797B7C7D7E80818283858687888A8B8C8D8F909192 +PT=8C2B7CAFA5AFE7F13562DAEAE1ADEDE0 +CT=9E95E00F351D5B3AC3D0E22E626DDAD6 + +I=23 +KEY=94959697999A9B9C9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0 +PT=AAF4EC8C1A815AEB826CAB741339532C +CT=9CB566FF26D92DAD083B51FDC18C173C + +I=24 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBEC +PT=40BE8C5D9108E663F38F1A2395279ECF +CT=C9C82766176A9B228EB9A974A010B4FB + +I=25 +KEY=2A2B2C2D2F30313234353637393A3B3C3E3F404143444546 +PT=0C8AD9BC32D43E04716753AA4CFBE351 +CT=D8E26AA02945881D5137F1C1E1386E88 + +I=26 +KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364 +PT=1407B1D5F87D63357C8DC7EBBAEBBFEE +CT=C0E024CCD68FF5FFA4D139C355A77C55 + +I=27 +KEY=84858687898A8B8C8E8F90919394959698999A9B9D9E9FA0 +PT=E62734D1AE3378C4549E939E6F123416 +CT=0B18B3D16F491619DA338640DF391D43 + +I=28 +KEY=A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=5A752CFF2A176DB1A1DE77F2D2CDEE41 +CT=DBE09AC8F66027BF20CB6E434F252EFC + +I=29 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDC +PT=A9C8C3A4EABEDC80C64730DDD018CD88 +CT=6D04E5E43C5B9CBE05FEB9606B6480FE + +I=30 +KEY=1A1B1C1D1F20212224252627292A2B2C2E2F303133343536 +PT=EE9B3DBBDB86180072130834D305999A +CT=DD1D6553B96BE526D9FEE0FBD7176866 + +I=31 +KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354 +PT=A7FA8C3586B8EBDE7568EAD6F634A879 +CT=0260CA7E3F979FD015B0DD4690E16D2A + +I=32 +KEY=929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=37E0F4A87F127D45AC936FE7AD88C10A +CT=9893734DE10EDCC8A67C3B110B8B8CC6 + +I=33 +KEY=464748494B4C4D4E50515253555657585A5B5C5D5F606162 +PT=3F77D8B5D92BAC148E4E46F697A535C5 +CT=93B30B750516B2D18808D710C2EE84EF + +I=34 +KEY=828384858788898A8C8D8E8F91929394969798999B9C9D9E +PT=D25EBB686C40F7E2C4DA1014936571CA +CT=16F65FA47BE3CB5E6DFE7C6C37016C0E + +I=35 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBC +PT=4F1C769D1E5B0552C7ECA84DEA26A549 +CT=F3847210D5391E2360608E5ACB560581 + +I=36 +KEY=BEBFC0C1C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA +PT=8548E2F882D7584D0FAFC54372B6633A +CT=8754462CD223366D0753913E6AF2643D + +I=37 +KEY=DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8 +PT=87D7A336CB476F177CD2A51AF2A62CDF +CT=1EA20617468D1B806A1FD58145462017 + +I=38 +KEY=FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 +PT=03B1FEAC668C4E485C1065DFC22B44EE +CT=3B155D927355D737C6BE9DDA60136E2E + +I=39 +KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334 +PT=BDA15E66819FA72D653A6866AA287962 +CT=26144F7B66DAA91B6333DBD3850502B3 + +I=40 +KEY=363738393B3C3D3E40414243454647484A4B4C4D4F505152 +PT=4D0C7A0D2505B80BF8B62CEB12467F0A +CT=E4F9A4AB52CED8134C649BF319EBCC90 + +I=41 +KEY=54555657595A5B5C5E5F60616364656668696A6B6D6E6F70 +PT=626D34C9429B37211330986466B94E5F +CT=B9DDD29AC6128A6CAB121E34A4C62B36 + +I=42 +KEY=727374757778797A7C7D7E7F81828384868788898B8C8D8E +PT=333C3E6BF00656B088A17E5FF0E7F60A +CT=6FCDDAD898F2CE4EFF51294F5EAAF5C9 + +I=43 +KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABAC +PT=687ED0CDC0D2A2BC8C466D05EF9D2891 +CT=C9A6FE2BF4028080BEA6F7FC417BD7E3 + +I=44 +KEY=AEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA +PT=487830E78CC56C1693E64B2A6660C7B6 +CT=6A2026846D8609D60F298A9C0673127F + +I=45 +KEY=CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8 +PT=7A48D6B7B52B29392AA2072A32B66160 +CT=2CB25C005E26EFEA44336C4C97A4240B + +I=46 +KEY=EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 +PT=907320E64C8C5314D10F8D7A11C8618D +CT=496967AB8680DDD73D09A0E4C7DCC8AA + +I=47 +KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324 +PT=B561F2CA2D6E65A4A98341F3ED9FF533 +CT=D5AF94DE93487D1F3A8C577CB84A66A4 + +I=48 +KEY=262728292B2C2D2E30313233353637383A3B3C3D3F404142 +PT=DF769380D212792D026F049E2E3E48EF +CT=84BDAC569CAE2828705F267CC8376E90 + +I=49 +KEY=44454647494A4B4C4E4F50515354555658595A5B5D5E5F60 +PT=79F374BC445BDABF8FCCB8843D6054C6 +CT=F7401DDA5AD5AB712B7EB5D10C6F99B6 + +I=50 +KEY=626364656768696A6C6D6E6F71727374767778797B7C7D7E +PT=4E02F1242FA56B05C68DBAE8FE44C9D6 +CT=1C9D54318539EBD4C3B5B7E37BF119F0 + +I=51 +KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C +PT=CF73C93CBFF57AC635A6F4AD2A4A1545 +CT=ACA572D65FB2764CFFD4A6ECA090EA0D + +I=52 +KEY=9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA +PT=9923548E2875750725B886566784C625 +CT=36D9C627B8C2A886A10CCB36EAE3DFBB + +I=53 +KEY=BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8 +PT=4888336B723A022C9545320F836A4207 +CT=010EDBF5981E143A81D646E597A4A568 + +I=54 +KEY=DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=F84D9A5561B0608B1160DEE000C41BA8 +CT=8DB44D538DC20CC2F40F3067FD298E60 + +I=55 +KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314 +PT=C23192A0418E30A19B45AE3E3625BF22 +CT=930EB53BC71E6AC4B82972BDCD5AAFB3 + +I=56 +KEY=161718191B1C1D1E20212223252627282A2B2C2D2F303132 +PT=B84E0690B28B0025381AD82A15E501A7 +CT=6C42A81EDCBC9517CCD89C30C95597B4 + +I=57 +KEY=34353637393A3B3C3E3F40414344454648494A4B4D4E4F50 +PT=ACEF5E5C108876C4F06269F865B8F0B0 +CT=DA389847AD06DF19D76EE119C71E1DD3 + +I=58 +KEY=525354555758595A5C5D5E5F61626364666768696B6C6D6E +PT=0F1B3603E0F5DDEA4548246153A5E064 +CT=E018FDAE13D3118F9A5D1A647A3F0462 + +I=59 +KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C +PT=FBB63893450D42B58C6D88CD3C1809E3 +CT=2AA65DB36264239D3846180FABDFAD20 + +I=60 +KEY=8E8F90919394959698999A9B9D9E9FA0A2A3A4A5A7A8A9AA +PT=4BEF736DF150259DAE0C91354E8A5F92 +CT=1472163E9A4F780F1CEB44B07ECF4FDB + +I=61 +KEY=ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8 +PT=7D2D46242056EF13D3C3FC93C128F4C7 +CT=C8273FDC8F3A9F72E91097614B62397C + +I=62 +KEY=CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=E9C1BA2DF415657A256EDB33934680FD +CT=66C8427DCD733AAF7B3470CB7D976E3F + +I=63 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304 +PT=E23EE277B0AA0A1DFB81F7527C3514F1 +CT=146131CB17F1424D4F8DA91E6F80C1D0 + +I=64 +KEY=060708090B0C0D0E10111213151617181A1B1C1D1F202122 +PT=3E7445B0B63CAAF75E4A911E12106B4C +CT=2610D0AD83659081AE085266A88770DC + +I=65 +KEY=24252627292A2B2C2E2F30313334353638393A3B3D3E3F40 +PT=767774752023222544455A5BE6E1E0E3 +CT=38A2B5A974B0575C5D733917FB0D4570 + +I=66 +KEY=424344454748494A4C4D4E4F51525354565758595B5C5D5E +PT=72737475717E7F7CE9E8EBEA696A6B6C +CT=E21D401EBC60DE20D6C486E4F39A588B + +I=67 +KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C +PT=DFDEDDDC25262728C9C8CFCEF1EEEFEC +CT=E51D5F88C670B079C0CA1F0C2C4405A2 + +I=68 +KEY=7E7F80818384858688898A8B8D8E8F90929394959798999A +PT=FFFE0100707776755F5E5D5C7675746B +CT=246A94788A642FB3D1B823C8762380C8 + +I=69 +KEY=9C9D9E9FA1A2A3A4A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8 +PT=E0E1E2E3424140479F9E9190292E2F2C +CT=B80C391C5C41A4C3B30C68E0E3D7550F + +I=70 +KEY=BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=2120272690EFEEED3B3A39384E4D4C4B +CT=B77C4754FC64EB9A1154A9AF0BB1F21C + +I=71 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4 +PT=ECEDEEEF5350516EA1A0A7A6A3ACADAE +CT=FB554DE520D159A06BF219FC7F34A02F + +I=72 +KEY=F6F7F8F9FBFCFDFE00010203050607080A0B0C0D0F101112 +PT=32333C3D25222320E9E8EBEACECDCCC3 +CT=A89FBA152D76B4927BEED160DDB76C57 + +I=73 +KEY=14151617191A1B1C1E1F20212324252628292A2B2D2E2F30 +PT=40414243626160678A8BB4B511161714 +CT=5676EAB4A98D2E8473B3F3D46424247C + +I=74 +KEY=323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=94959293F5FAFBF81F1E1D1C7C7F7E79 +CT=4E8F068BD7EDE52A639036EC86C33568 + +I=75 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C +PT=BEBFBCBD191A1B14CFCEC9C8546B6A69 +CT=F0193C4D7AFF1791EE4C07EB4A1824FC + +I=76 +KEY=6E6F70717374757678797A7B7D7E7F80828384858788898A +PT=2C2D3233898E8F8CBBBAB9B8333031CE +CT=AC8686EECA9BA761AFE82D67B928C33F + +I=77 +KEY=8C8D8E8F91929394969798999B9C9D9EA0A1A2A3A5A6A7A8 +PT=84858687BFBCBDBA37363938FDFAFBF8 +CT=5FAF8573E33B145B6A369CD3606AB2C9 + +I=78 +KEY=AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=828384857669686B909192930B08090E +CT=31587E9944AB1C16B844ECAD0DF2E7DA + +I=79 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4 +PT=BEBFBCBD9695948B707176779E919093 +CT=D017FECD91148ABA37F6F3068AA67D8A + +I=80 +KEY=E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8FAFBFCFDFE010002 +PT=8B8A85846067666521202322D0D3D2DD +CT=788EF2F021A73CBA2794B616078A8500 + +I=81 +KEY=04050607090A0B0C0E0F10111314151618191A1B1D1E1F20 +PT=76777475F1F2F3F4F8F9E6E777707172 +CT=5D1EF20DCED6BCBC12131AC7C54788AA + +I=82 +KEY=222324252728292A2C2D2E2F31323334363738393B3C3D3E +PT=A4A5A2A34F404142B4B5B6B727242522 +CT=B3C8CF961FAF9EA05FDDE6D1E4D8F663 + +I=83 +KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C +PT=94959697E1E2E3EC16171011839C9D9E +CT=143075C70605861C7FAC6526199E459F + +I=84 +KEY=5E5F60616364656668696A6B6D6E6F70727374757778797A +PT=03023D3C06010003DEDFDCDDFFFCFDE2 +CT=A5AE12EADE9A87268D898BFC8FC0252A + +I=85 +KEY=7C7D7E7F81828384868788898B8C8D8E9091929395969798 +PT=10111213F1F2F3F4CECFC0C1DBDCDDDE +CT=0924F7CF2E877A4819F5244A360DCEA9 + +I=86 +KEY=9A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=67666160724D4C4F1D1C1F1E73707176 +CT=3D9E9635AFCC3E291CC7AB3F27D1C99A + +I=87 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4 +PT=E6E7E4E5A8ABAAD584858283909F9E9D +CT=9D80FEEBF87510E2B8FB98BB54FD788C + +I=88 +KEY=D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2 +PT=71707F7E565150537D7C7F7E6162636C +CT=5F9D1A082A1A37985F174002ECA01309 + +I=89 +KEY=F4F5F6F7F9FAFBFCFEFE01010304050608090A0B0D0E0F10 +PT=64656667212223245555AAAA03040506 +CT=A390EBB1D1403930184A44B4876646E4 + +I=90 +KEY=121314151718191A1C1D1E1F21222324262728292B2C2D2E +PT=9E9F9899ABA4A5A6CFCECDCC2B28292E +CT=700FE918981C3195BB6C4BCB46B74E29 + +I=91 +KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C +PT=C7C6C5C4D1D2D3DC626364653A454447 +CT=907984406F7BF2D17FB1EB15B673D747 + +I=92 +KEY=4E4F50515354555658595A5B5D5E5F60626364656768696A +PT=F6F7E8E9E0E7E6E51D1C1F1E5B585966 +CT=C32A956DCFC875C2AC7C7CC8B8CC26E1 + +I=93 +KEY=6C6D6E6F71727374767778797B7C7D7E8081828385868788 +PT=BCBDBEBF5D5E5F5868696667F4F3F2F1 +CT=02646E2EBFA9B820CF8424E9B9B6EB51 + +I=94 +KEY=8A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 +PT=40414647B0AFAEAD9B9A99989B98999E +CT=621FDA3A5BBD54C6D3C685816BD4EAD8 + +I=95 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4 +PT=69686B6A0201001F0F0E0908B4BBBAB9 +CT=D4E216040426DFAF18B152469BC5AC2F + +I=96 +KEY=C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2 +PT=C7C6C9C8D8DFDEDD5A5B5859BEBDBCB3 +CT=9D0635B9D33B6CDBD71F5D246EA17CC8 + +I=97 +KEY=E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6F8F9FAFBFDFEFE00 +PT=DEDFDCDD787B7A7DFFFEE1E0B2B5B4B7 +CT=10ABAD1BD9BAE5448808765583A2CC1A + +I=98 +KEY=020304050708090A0C0D0E0F11121314161718191B1C1D1E +PT=4D4C4B4A606F6E6DD0D1D2D3FBF8F9FE +CT=6891889E16544E355FF65A793C39C9A8 + +I=99 +KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C +PT=B7B6B5B4D7D4D5DAE5E4E3E2E1FEFFFC +CT=CC735582E68072C163CD9DDF46B91279 + +I=100 +KEY=3E3F40414344454648494A4B4D4E4F50525354555758595A +PT=CECFB0B1F7F0F1F2AEAFACAD3E3D3C23 +CT=C5C68B9AEEB7F878DF578EFA562F9574 + +I=101 +KEY=5C5D5E5F61626364666768696B6C6D6E7071727375767778 +PT=CACBC8C9CDCECFC812131C1D494E4F4C +CT=5F4764395A667A47D73452955D0D2CE8 + +I=102 +KEY=7A7B7C7D7F80818284858687898A8B8C8E8F909193949596 +PT=9D9C9B9AD22D2C2FB1B0B3B20C0F0E09 +CT=701448331F66106CEFDDF1EB8267C357 + +I=103 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4 +PT=7A7B787964676659959493924F404142 +CT=CB3EE56D2E14B4E1941666F13379D657 + +I=104 +KEY=B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2 +PT=AAABA4A5CEC9C8CB1F1E1D1CABA8A9A6 +CT=9FE16EFD18AB6E1981191851FEDB0764 + +I=105 +KEY=D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6E8E9EAEBEDEEEFF0 +PT=93929190282B2A2DC4C5FAFB92959497 +CT=3DC9BA24E1B223589B147ADCEB4C8E48 + +I=106 +KEY=F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E +PT=EFEEE9E8DED1D0D339383B3A888B8A8D +CT=1C333032682E7D4DE5E5AFC05C3E483C + +I=107 +KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C +PT=7F7E7D7CA2A1A0AF78797E7F112E2F2C +CT=D593CC99A95AFEF7E92038E05A59D00A + +I=108 +KEY=2E2F30313334353638393A3B3D3E3F40424344454748494A +PT=84859A9B2B2C2D2E868784852625245B +CT=51E7F96F53B4353923452C222134E1EC + +I=109 +KEY=4C4D4E4F51525354565758595B5C5D5E6061626365666768 +PT=B0B1B2B3070405026869666710171615 +CT=4075B357A1A2B473400C3B25F32F81A4 + +I=110 +KEY=6A6B6C6D6F70717274757677797A7B7C7E7F808183848586 +PT=ACADAAABBDA2A3A00D0C0F0E595A5B5C +CT=302E341A3EBCD74F0D55F61714570284 + +I=111 +KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4 +PT=121310115655544B5253545569666764 +CT=57ABDD8231280DA01C5042B78CF76522 + +I=112 +KEY=A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2 +PT=DEDFD0D166616063EAEBE8E94142434C +CT=17F9EA7EEA17AC1ADF0E190FEF799E92 + +I=113 +KEY=C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6D8D9DADBDDDEDFE0 +PT=DBDAD9D81417161166677879E0E7E6E5 +CT=2E1BDD563DD87EE5C338DD6D098D0A7A + +I=114 +KEY=E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=6A6B6C6DE0EFEEED2B2A2928C0C3C2C5 +CT=EB869996E6F8BFB2BFDD9E0C4504DBB2 + +I=115 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C +PT=B1B0B3B21714151A1A1B1C1D5649484B +CT=C2E01549E9DECF317468B3E018C61BA8 + +I=116 +KEY=1E1F20212324252628292A2B2D2E2F30323334353738393A +PT=39380706A3A4A5A6C4C5C6C77271706F +CT=8DA875D033C01DD463B244A1770F4A22 + +I=117 +KEY=3C3D3E3F41424344464748494B4C4D4E5051525355565758 +PT=5C5D5E5F1013121539383736E2E5E4E7 +CT=8BA0DCF3A186844F026D022F8839D696 + +I=118 +KEY=5A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=43424544EAD5D4D72E2F2C2D64676661 +CT=E9691FF9A6CC6970E51670A0FD5B88C1 + +I=119 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394 +PT=55545756989B9A65F8F9FEFF18171615 +CT=F2BAEC06FAEED30F88EE63BA081A6E5B + +I=120 +KEY=969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2 +PT=05040B0A525554573C3D3E3F4A494847 +CT=9C39D4C459AE5753394D6094ADC21E78 + +I=121 +KEY=B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0 +PT=14151617595A5B5C8584FBFA8E89888B +CT=6345B532A11904502EA43BA99C6BD2B2 + +I=122 +KEY=D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=7C7D7A7BFDF2F3F029282B2A51525354 +CT=5FFAE3061A95172E4070CEDCE1E428C8 + +I=123 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C +PT=38393A3B1E1D1C1341404746C23D3C3E +CT=0A4566BE4CDF9ADCE5DEC865B5AB34CD + +I=124 +KEY=0E0F10111314151618191A1B1D1E1F20222324252728292A +PT=8D8C939240474645818083827C7F7E41 +CT=CA17FCCE79B7404F2559B22928F126FB + +I=125 +KEY=2C2D2E2F31323334363738393B3C3D3E4041424345464748 +PT=3B3A39381A19181F32333C3D45424340 +CT=97CA39B849ED73A6470A97C821D82F58 + +I=126 +KEY=4A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=F0F1F6F738272625828380817F7C7D7A +CT=8198CB06BC684C6D3E9B7989428DCF7A + +I=127 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384 +PT=89888B8A0407061966676061141B1A19 +CT=F53C464C705EE0F28D9A4C59374928BD + +I=128 +KEY=868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2 +PT=D3D2DDDCAAADACAF9C9D9E9FE8EBEAE5 +CT=9ADB3D4CCA559BB98C3E2ED73DBF1154 + +========== + +KEYSIZE=256 + + +I=1 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 +PT=834EADFCCAC7E1B30664B1ABA44815AB +CT=1946DABF6A03A2A2C3D0B05080AED6FC + +I=2 +KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=D9DC4DBA3021B05D67C0518F72B62BF1 +CT=5ED301D747D3CC715445EBDEC62F2FB4 + +I=3 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=A291D86301A4A739F7392173AA3C604C +CT=6585C8F43D13A6BEAB6419FC5935B9D0 + +I=4 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E +PT=4264B2696498DE4DF79788A9F83E9390 +CT=2A5B56A596680FCC0E05F5E0F151ECAE + +I=5 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=EE9932B3721804D5A83EF5949245B6F6 +CT=F5D6FF414FD2C6181494D20C37F2B8C4 + +I=6 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=E6248F55C5FDCBCA9CBBB01C88A2EA77 +CT=85399C01F59FFFB5204F19F8482F00B8 + +I=7 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 +PT=B8358E41B9DFF65FD461D55A99266247 +CT=92097B4C88A041DDF98144BC8D22E8E7 + +I=8 +KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E +PT=F0E2D72260AF58E21E015AB3A4C0D906 +CT=89BD5B73B356AB412AEF9F76CEA2D65C + +I=9 +KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=475B8B823CE8893DB3C44A9F2A379FF7 +CT=2536969093C55FF9454692F2FAC2F530 + +I=10 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E +PT=688F5281945812862F5F3076CF80412F +CT=07FC76A872843F3F6E0081EE9396D637 + +I=11 +KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=08D1D2BC750AF553365D35E75AFACEAA +CT=E38BA8EC2AA741358DCC93E8F141C491 + +I=12 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=8707121F47CC3EFCECA5F9A8474950A1 +CT=D028EE23E4A89075D0B03E868D7D3A42 + +I=13 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 +PT=E51AA0B135DBA566939C3B6359A980C5 +CT=8CD9423DFC459E547155C5D1D522E540 + +I=14 +KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E +PT=069A007FC76A459F98BAF917FEDF9521 +CT=080E9517EB1677719ACF728086040AE3 + +I=15 +KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 +PT=726165C1723FBCF6C026D7D00B091027 +CT=7C1700211A3991FC0ECDED0AB3E576B0 + +I=16 +KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E +PT=D7C544DE91D55CFCDE1F84CA382200CE +CT=DABCBCC855839251DB51E224FBE87435 + +I=17 +KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 +PT=FED3C9A161B9B5B2BD611B41DC9DA357 +CT=68D56FAD0406947A4DD27A7448C10F1D + +I=18 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=4F634CDC6551043409F30B635832CF82 +CT=DA9A11479844D1FFEE24BBF3719A9925 + +I=19 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=109CE98DB0DFB36734D9F3394711B4E6 +CT=5E4BA572F8D23E738DA9B05BA24B8D81 + +I=20 +KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 +PT=4EA6DFABA2D8A02FFDFFA89835987242 +CT=A115A2065D667E3F0B883837A6E903F8 + +I=21 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=5AE094F54AF58E6E3CDBF976DAC6D9EF +CT=3E9E90DC33EAC2437D86AD30B137E66E + +I=22 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=764D8E8E0F29926DBE5122E66354FDBE +CT=01CE82D8FBCDAE824CB3C48E495C3692 + +I=23 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E +PT=3F0418F888CDF29A982BF6B75410D6A9 +CT=0C9CFF163CE936FAAF083CFD3DEA3117 + +I=24 +KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 +PT=E4A3E7CB12CDD56AA4A75197A9530220 +CT=5131BA9BD48F2BBA85560680DF504B52 + +I=25 +KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E +PT=211677684AAC1EC1A160F44C4EBF3F26 +CT=9DC503BBF09823AEC8A977A5AD26CCB2 + +I=26 +KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 +PT=D21E439FF749AC8F18D6D4B105E03895 +CT=9A6DB0C0862E506A9E397225884041D7 + +I=27 +KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=D9F6FF44646C4725BD4C0103FF5552A7 +CT=430BF9570804185E1AB6365FC6A6860C + +I=28 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=0B1256C2A00B976250CFC5B0C37ED382 +CT=3525EBC02F4886E6A5A3762813E8CE8A + +I=29 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=B056447FFC6DC4523A36CC2E972A3A79 +CT=07FA265C763779CCE224C7BAD671027B + +I=30 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 +PT=5E25CA78F0DE55802524D38DA3FE4456 +CT=E8B72B4E8BE243438C9FFF1F0E205872 + +I=31 +KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=A5BCF4728FA5EAAD8567C0DC24675F83 +CT=109D4F999A0E11ACE1F05E6B22CBCB50 + +I=32 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=814E59F97ED84646B78B2CA022E9CA43 +CT=45A5E8D4C3ED58403FF08D68A0CC4029 + +I=33 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E +PT=15478BEEC58F4775C7A7F5D4395514D7 +CT=196865964DB3D417B6BD4D586BCB7634 + +I=34 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=253548FFCA461C67C8CBC78CD59F4756 +CT=60436AD45AC7D30D99195F815D98D2AE + +I=35 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=FD7AD8D73B9B0F8CC41600640F503D65 +CT=BB07A23F0B61014B197620C185E2CD75 + +I=36 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 +PT=06199DE52C6CBF8AF954CD65830BCD56 +CT=5BC0B2850129C854423AFF0751FE343B + +I=37 +KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E +PT=F17C4FFE48E44C61BD891E257E725794 +CT=7541A78F96738E6417D2A24BD2BECA40 + +I=38 +KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=9A5B4A402A3E8A59BE6BF5CD8154F029 +CT=B0A303054412882E464591F1546C5B9E + +I=39 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E +PT=79BD40B91A7E07DC939D441782AE6B17 +CT=778C06D8A355EEEE214FCEA14B4E0EEF + +I=40 +KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=D8CEAAF8976E5FBE1012D8C84F323799 +CT=09614206D15CBACE63227D06DB6BEEBB + +I=41 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=3316E2751E2E388B083DA23DD6AC3FBE +CT=41B97FB20E427A9FDBBB358D9262255D + +I=42 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 +PT=8B7CFBE37DE7DCA793521819242C5816 +CT=C1940F703D845F957652C2D64ABD7ADF + +I=43 +KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E +PT=F23F033C0EEBF8EC55752662FD58CE68 +CT=D2D44FCDAE5332343366DB297EFCF21B + +I=44 +KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 +PT=59EB34F6C8BDBACC5FC6AD73A59A1301 +CT=EA8196B79DBE167B6AA9896E287EED2B + +I=45 +KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E +PT=DCDE8B6BD5CF7CC22D9505E3CE81261A +CT=D6B0B0C4BA6C7DBE5ED467A1E3F06C2D + +I=46 +KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 +PT=E33CF7E524FED781E7042FF9F4B35DC7 +CT=EC51EB295250C22C2FB01816FB72BCAE + +I=47 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=27963C8FACDF73062867D164DF6D064C +CT=ADED6630A07CE9C7408A155D3BD0D36F + +I=48 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=77B1CE386B551B995F2F2A1DA994EEF8 +CT=697C9245B9937F32F5D1C82319F0363A + +I=49 +KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E +PT=F083388B013679EFCF0BB9B15D52AE5C +CT=AAD5AD50C6262AAEC30541A1B7B5B19C + +I=50 +KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 +PT=C5009E0DAB55DB0ABDB636F2600290C8 +CT=7D34B893855341EC625BD6875AC18C0D + +I=51 +KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E +PT=7804881E26CD532D8514D3683F00F1B9 +CT=7EF05105440F83862F5D780E88F02B41 + +I=52 +KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 +PT=46CDDCD73D1EB53E675CA012870A92A3 +CT=C377C06403382061AF2C9C93A8E70DF6 + +I=53 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=A9FB44062BB07FE130A8E8299EACB1AB +CT=1DBDB3FFDC052DACC83318853ABC6DE5 + +I=54 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=2B6FF8D7A5CC3A28A22D5A6F221AF26B +CT=69A6EAB00432517D0BF483C91C0963C7 + +I=55 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E +PT=1A9527C29B8ADD4B0E3E656DBB2AF8B4 +CT=0797F41DC217C80446E1D514BD6AB197 + +I=56 +KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 +PT=7F99CF2C75244DF015EB4B0C1050AEAE +CT=9DFD76575902A637C01343C58E011A03 + +I=57 +KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E +PT=E84FF85B0D9454071909C1381646C4ED +CT=ACF4328AE78F34B9FA9B459747CC2658 + +I=58 +KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 +PT=89AFD40F99521280D5399B12404F6DB4 +CT=B0479AEA12BAC4FE2384CF98995150C6 + +I=59 +KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=A09EF32DBC5119A35AB7FA38656F0329 +CT=9DD52789EFE3FFB99F33B3DA5030109A + +I=60 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=61773457F068C376C7829B93E696E716 +CT=ABBB755E4621EF8F1214C19F649FB9FD + +I=61 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=A34F0CAE726CCE41DD498747D891B967 +CT=DA27FB8174357BCE2BED0E7354F380F9 + +I=62 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 +PT=856F59496C7388EE2D2B1A27B7697847 +CT=C59A0663F0993838F6E5856593BDC5EF + +I=63 +KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=CB090C593EF7720BD95908FB93B49DF4 +CT=ED60B264B5213E831607A99C0CE5E57E + +I=64 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=A0AC75CD2F1923D460FC4D457AD95BAF +CT=E50548746846F3EB77B8C520640884ED + +I=65 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E +PT=2A2B282974777689E8E9EEEF525D5C5F +CT=28282CC7D21D6A2923641E52D188EF0C + +I=66 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=909192939390919E0F0E09089788898A +CT=0DFA5B02ABB18E5A815305216D6D4F8E + +I=67 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=777675748D8E8F907170777649464744 +CT=7359635C0EECEFE31D673395FB46FB99 + +I=68 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 +PT=717073720605040B2D2C2B2A05FAFBF9 +CT=73C679F7D5AEF2745C9737BB4C47FB36 + +I=69 +KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E +PT=64656667FEFDFCC31B1A1D1CA5AAABA8 +CT=B192BD472A4D2EAFB786E97458967626 + +I=70 +KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=DBDAD9D86A696867B5B4B3B2C8D7D6D5 +CT=0EC327F6C8A2B147598CA3FDE61DC6A4 + +I=71 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E +PT=5C5D5E5FE3E0E1FE31303736333C3D3E +CT=FC418EB3C41B859B38D4B6F646629729 + +I=72 +KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=545556574B48494673727574546B6A69 +CT=30249E5AC282B1C981EA64B609F3A154 + +I=73 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=ECEDEEEFC6C5C4BB56575051F5FAFBF8 +CT=5E6E08646D12150776BB43C2D78A9703 + +I=74 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 +PT=464744452724252AC9C8CFCED2CDCCCF +CT=FAEB3D5DE652CD3447DCEB343F30394A + +I=75 +KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E +PT=E6E7E4E54142435C878681801C131211 +CT=A8E88706823F6993EF80D05C1C7B2CF0 + +I=76 +KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 +PT=72737071CFCCCDC2F9F8FFFE710E0F0C +CT=8CED86677E6E00A1A1B15968F2D3CCE6 + +I=77 +KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E +PT=505152537370714EC3C2C5C4010E0F0C +CT=9FC7C23858BE03BDEBB84E90DB6786A9 + +I=78 +KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 +PT=A8A9AAAB5C5F5E51AEAFA8A93D222320 +CT=B4FBD65B33F70D8CF7F1111AC4649C36 + +I=79 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=DEDFDCDDF6F5F4EB10111617FEF1F0F3 +CT=C5C32D5ED03C4B53CC8C1BD0EF0DBBF6 + +I=80 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=BDBCBFBE5E5D5C530B0A0D0CFAC5C4C7 +CT=D1A7F03B773E5C212464B63709C6A891 + +I=81 +KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E +PT=8A8B8889050606F8F4F5F2F3636C6D6E +CT=6B7161D8745947AC6950438EA138D028 + +I=82 +KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 +PT=A6A7A4A54D4E4F40B2B3B4B539262724 +CT=FD47A9F7E366EE7A09BC508B00460661 + +I=83 +KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E +PT=9C9D9E9FE9EAEBF40E0F08099B949596 +CT=00D40B003DC3A0D9310B659B98C7E416 + +I=84 +KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 +PT=2D2C2F2E1013121DCCCDCACBED121310 +CT=EEA4C79DCC8E2BDA691F20AC48BE0717 + +I=85 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=F4F5F6F7EDEEEFD0EAEBECEDF7F8F9FA +CT=E78F43B11C204403E5751F89D05A2509 + +I=86 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=3D3C3F3E282B2A2573727574150A0B08 +CT=D0F0E3D1F1244BB979931E38DD1786EF + +I=87 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E +PT=B6B7B4B5F8FBFAE5B4B5B2B3A0AFAEAD +CT=042E639DC4E1E4DDE7B75B749EA6F765 + +I=88 +KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 +PT=B7B6B5B4989B9A95878681809BA4A5A6 +CT=BC032FDD0EFE29503A980A7D07AB46A8 + +I=89 +KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E +PT=A8A9AAABE5E6E798E9E8EFEE4748494A +CT=0C93AC949C0DA6446EFFB86183B6C910 + +I=90 +KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 +PT=ECEDEEEFD9DADBD4B9B8BFBE657A7B78 +CT=E0D343E14DA75C917B4A5CEC4810D7C2 + +I=91 +KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=7F7E7D7C696A6B74CACBCCCD929D9C9F +CT=0EAFB821748408279B937B626792E619 + +I=92 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=08090A0B0605040BFFFEF9F8B9C6C7C4 +CT=FA1AC6E02D23B106A1FEF18B274A553F + +I=93 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=08090A0BF1F2F3CCFCFDFAFB68676665 +CT=0DADFE019CD12368075507DF33C1A1E9 + +I=94 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 +PT=CACBC8C93A393837050403020D121310 +CT=3A0879B414465D9FFBAF86B33A63A1B9 + +I=95 +KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=E9E8EBEA8281809F8F8E8988343B3A39 +CT=62199FADC76D0BE1805D3BA0B7D914BF + +I=96 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=515053524645444BD0D1D6D7340B0A09 +CT=1B06D6C5D333E742730130CF78E719B4 + +I=97 +KEY=78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E +PT=42434041ECEFEE1193929594C6C9C8CB +CT=F1F848824C32E9DCDCBF21580F069329 + +I=98 +KEY=A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6 +PT=EFEEEDECC2C1C0CF76777071455A5B58 +CT=1A09050CBD684F784D8E965E0782F28A + +I=99 +KEY=C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE +PT=5F5E5D5C3F3C3D221D1C1B1A19161714 +CT=79C2969E7DED2BA7D088F3F320692360 + +I=100 +KEY=F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516 +PT=000102034142434C1C1D1A1B8D727371 +CT=091A658A2F7444C16ACCB669450C7B63 + +I=101 +KEY=18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E +PT=8E8F8C8DB1B2B38C56575051050A0B08 +CT=97C1E3A72CCA65FA977D5ED0E8A7BBFC + +I=102 +KEY=40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566 +PT=A7A6A5A4E8EBEAE57F7E7978CAD5D4D7 +CT=70C430C6DB9A17828937305A2DF91A2A + +I=103 +KEY=68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E +PT=8A8B888994979689454443429F909192 +CT=629553457FBE2479098571C7C903FDE8 + +I=104 +KEY=90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6 +PT=8C8D8E8FE0E3E2ED45444342F1CECFCC +CT=A25B25A61F612669E7D91265C7D476BA + +I=105 +KEY=B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE +PT=FFFEFDFC4C4F4E31D8D9DEDFB6B9B8BB +CT=EB7E4E49B8AE0F024570DDA293254FED + +I=106 +KEY=E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506 +PT=FDFCFFFECCCFCEC12F2E29286679787B +CT=38FE15D61CCA84516E924ADCE5014F67 + +I=107 +KEY=08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E +PT=67666564BAB9B8A77071767719161714 +CT=3AD208492249108C9F3EBEB167AD0583 + +I=108 +KEY=30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556 +PT=9A9B98992D2E2F2084858283245B5A59 +CT=299BA9F9BF5AB05C3580FC26EDD1ED12 + +I=109 +KEY=58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E +PT=A4A5A6A70B0809365C5D5A5B2C232221 +CT=19DC705B857A60FB07717B2EA5717781 + +I=110 +KEY=80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6 +PT=464744455754555AF3F2F5F4AFB0B1B2 +CT=FFC8AEB885B5EFCAD06B6DBEBF92E76B + +I=111 +KEY=A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE +PT=323330317675746B7273747549464744 +CT=F58900C5E0B385253FF2546250A0142B + +I=112 +KEY=D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6 +PT=A8A9AAAB181B1A15808186872B141516 +CT=2EE67B56280BC462429CEE6E3370CBC1 + +I=113 +KEY=F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E +PT=E7E6E5E4202323DDAAABACAD343B3A39 +CT=20DB650A9C8E9A84AB4D25F7EDC8F03F + +I=114 +KEY=20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546 +PT=A8A9AAAB2221202FEDECEBEA1E010003 +CT=3C36DA169525CF818843805F25B78AE5 + +I=115 +KEY=48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E +PT=F9F8FBFA5F5C5D42424344450E010003 +CT=9A781D960DB9E45E37779042FEA51922 + +I=116 +KEY=70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596 +PT=57565554F5F6F7F89697909120DFDEDD +CT=6560395EC269C672A3C288226EFDBA77 + +I=117 +KEY=98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE +PT=F8F9FAFBCCCFCEF1DDDCDBDA0E010003 +CT=8C772B7A189AC544453D5916EBB27B9A + +I=118 +KEY=C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6 +PT=D9D8DBDA7073727D80818687C2DDDCDF +CT=77CA5468CC48E843D05F78EED9D6578F + +I=119 +KEY=E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E +PT=C5C4C7C6080B0A1588898E8F68676665 +CT=72CDCC71DC82C60D4429C9E2D8195BAA + +I=120 +KEY=10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536 +PT=83828180DCDFDED186878081F0CFCECD +CT=8080D68CE60E94B40B5B8B69EEB35AFA + +I=121 +KEY=38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E +PT=98999A9BDDDEDFA079787F7E0A050407 +CT=44222D3CDE299C04369D58AC0EBA1E8E + +I=122 +KEY=60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586 +PT=CECFCCCD4F4C4D429F9E9998DFC0C1C2 +CT=9B8721B0A8DFC691C5BC5885DBFCB27A + +I=123 +KEY=88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE +PT=404142436665647B29282F2EABA4A5A6 +CT=0DC015CE9A3A3414B5E62EC643384183 + +I=124 +KEY=B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6 +PT=33323130E6E5E4EB23222524DEA1A0A3 +CT=705715448A8DA412025CE38345C2A148 + +I=125 +KEY=D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE +PT=CFCECDCCF6F5F4CBE6E7E0E199969794 +CT=C32B5B0B6FBAE165266C569F4B6ECF0B + +I=126 +KEY=00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526 +PT=BABBB8B97271707FDCDDDADB29363734 +CT=4DCA6C75192A01DDCA9476AF2A521E87 + +I=127 +KEY=28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E +PT=C9C8CBCA4447465926272021545B5A59 +CT=058691E627ECBC36AC07B6DB423BD698 + +I=128 +KEY=50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576 +PT=050407067477767956575051221D1C1F +CT=7444527095838FE080FC2BCDD30847EB + +========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_vk.txt b/src/lib/crypto/crypto_tests/test/ecb_vk.txt new file mode 100644 index 000000000..5dfd60089 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_vk.txt @@ -0,0 +1,2334 @@ + +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=0EDD33D3C621E546455BD8BA1418BEC8 + +I=2 +KEY=40000000000000000000000000000000 +CT=C0CC0C5DA5BD63ACD44A80774FAD5222 + +I=3 +KEY=20000000000000000000000000000000 +CT=2F0B4B71BC77851B9CA56D42EB8FF080 + +I=4 +KEY=10000000000000000000000000000000 +CT=6B1E2FFFE8A114009D8FE22F6DB5F876 + +I=5 +KEY=08000000000000000000000000000000 +CT=9AA042C315F94CBB97B62202F83358F5 + +I=6 +KEY=04000000000000000000000000000000 +CT=DBE01DE67E346A800C4C4B4880311DE4 + +I=7 +KEY=02000000000000000000000000000000 +CT=C117D2238D53836ACD92DDCDB85D6A21 + +I=8 +KEY=01000000000000000000000000000000 +CT=DC0ED85DF9611ABB7249CDD168C5467E + +I=9 +KEY=00800000000000000000000000000000 +CT=807D678FFF1F56FA92DE3381904842F2 + +I=10 +KEY=00400000000000000000000000000000 +CT=0E53B3FCAD8E4B130EF73AEB957FB402 + +I=11 +KEY=00200000000000000000000000000000 +CT=969FFD3B7C35439417E7BDE923035D65 + +I=12 +KEY=00100000000000000000000000000000 +CT=A99B512C19CA56070491166A1503BF15 + +I=13 +KEY=00080000000000000000000000000000 +CT=6E9985252126EE344D26AE369D2327E3 + +I=14 +KEY=00040000000000000000000000000000 +CT=B85F4809F904C275491FCDCD1610387E + +I=15 +KEY=00020000000000000000000000000000 +CT=ED365B8D7D20C1F5D53FB94DD211DF7B + +I=16 +KEY=00010000000000000000000000000000 +CT=B3A575E86A8DB4A7135D604C43304896 + +I=17 +KEY=00008000000000000000000000000000 +CT=89704BCB8E69F846259EB0ACCBC7F8A2 + +I=18 +KEY=00004000000000000000000000000000 +CT=C56EE7C92197861F10D7A92B90882055 + +I=19 +KEY=00002000000000000000000000000000 +CT=92F296F6846E0EAF9422A5A24A08B069 + +I=20 +KEY=00001000000000000000000000000000 +CT=E67E32BB8F11DEB8699318BEE9E91A60 + +I=21 +KEY=00000800000000000000000000000000 +CT=B08EEF85EAF626DD91B65C4C3A97D92B + +I=22 +KEY=00000400000000000000000000000000 +CT=661083A6ADDCE79BB4E0859AB5538013 + +I=23 +KEY=00000200000000000000000000000000 +CT=55DFE2941E0EB10AFC0B333BD34DE1FE + +I=24 +KEY=00000100000000000000000000000000 +CT=6BFE5945E715C9662609770F8846087A + +I=25 +KEY=00000080000000000000000000000000 +CT=79848E9C30C2F8CDA8B325F7FED2B139 + +I=26 +KEY=00000040000000000000000000000000 +CT=7A713A53B99FEF34AC04DEEF80965BD0 + +I=27 +KEY=00000020000000000000000000000000 +CT=18144A2B46620D32C3C32CE52D49257F + +I=28 +KEY=00000010000000000000000000000000 +CT=872E827C70887C80749F7B8BB1847C7E + +I=29 +KEY=00000008000000000000000000000000 +CT=6B86C6A4FE6A60C59B1A3102F8DE49F3 + +I=30 +KEY=00000004000000000000000000000000 +CT=9848BB3DFDF6F532F094679A4C231A20 + +I=31 +KEY=00000002000000000000000000000000 +CT=925AD528E852E329B2091CD3F1C2BCEE + +I=32 +KEY=00000001000000000000000000000000 +CT=80DF436544B0DD596722E46792A40CD8 + +I=33 +KEY=00000000800000000000000000000000 +CT=525DAF18F93E83E1E74BBBDDE4263BBA + +I=34 +KEY=00000000400000000000000000000000 +CT=F65C9D2EE485D24701FFA3313B9D5BE6 + +I=35 +KEY=00000000200000000000000000000000 +CT=E4FC8D8BCA06425BDF94AFA40FCC14BA + +I=36 +KEY=00000000100000000000000000000000 +CT=A53F0A5CA1E4E6440BB975FF320DE6F8 + +I=37 +KEY=00000000080000000000000000000000 +CT=D55313B9394080462E87E02899B553F0 + +I=38 +KEY=00000000040000000000000000000000 +CT=34A71D761F71BCD344384C7F97D27906 + +I=39 +KEY=00000000020000000000000000000000 +CT=233F3D819599612EBC89580245C996A8 + +I=40 +KEY=00000000010000000000000000000000 +CT=B4F1374E5268DBCB676E447529E53F89 + +I=41 +KEY=00000000008000000000000000000000 +CT=0816BD27861D2BA891D1044E39951E96 + +I=42 +KEY=00000000004000000000000000000000 +CT=F3BE9EA3F10C73CA64FDE5DB13A951D1 + +I=43 +KEY=00000000002000000000000000000000 +CT=2448086A8106FBD03048DDF857D3F1C8 + +I=44 +KEY=00000000001000000000000000000000 +CT=670756E65BEC8B68F03D77CDCDCE7B91 + +I=45 +KEY=00000000000800000000000000000000 +CT=EF968CF0D36FD6C6EFFD225F6FB44CA9 + +I=46 +KEY=00000000000400000000000000000000 +CT=2E8767157922E3826DDCEC1B0CC1E105 + +I=47 +KEY=00000000000200000000000000000000 +CT=78CE7EEC670E45A967BAB17E26A1AD36 + +I=48 +KEY=00000000000100000000000000000000 +CT=3C5CEE825655F098F6E81A2F417DA3FB + +I=49 +KEY=00000000000080000000000000000000 +CT=67BFDB431DCE1292200BC6F5207ADB12 + +I=50 +KEY=00000000000040000000000000000000 +CT=7540FD38E447C0779228548747843A6F + +I=51 +KEY=00000000000020000000000000000000 +CT=B85E513301F8A936EA9EC8A21A85B5E6 + +I=52 +KEY=00000000000010000000000000000000 +CT=04C67DBF16C11427D507A455DE2C9BC5 + +I=53 +KEY=00000000000008000000000000000000 +CT=03F75EB8959E55079CFFB4FF149A37B6 + +I=54 +KEY=00000000000004000000000000000000 +CT=74550287F666C63BB9BC7838433434B0 + +I=55 +KEY=00000000000002000000000000000000 +CT=7D537200195EBC3AEFD1EAAB1C385221 + +I=56 +KEY=00000000000001000000000000000000 +CT=CE24E4D40C68A82B535CBD3C8E21652A + +I=57 +KEY=00000000000000800000000000000000 +CT=AB20072405AA8FC40265C6F1F3DC8BC0 + +I=58 +KEY=00000000000000400000000000000000 +CT=6CFD2CF688F566B093F67B9B3839E80A + +I=59 +KEY=00000000000000200000000000000000 +CT=BD95977E6B7239D407A012C5544BF584 + +I=60 +KEY=00000000000000100000000000000000 +CT=DF9C0130AC77E7C72C997F587B46DBE0 + +I=61 +KEY=00000000000000080000000000000000 +CT=E7F1B82CADC53A648798945B34EFEFF2 + +I=62 +KEY=00000000000000040000000000000000 +CT=932C6DBF69255CF13EDCDB72233ACEA3 + +I=63 +KEY=00000000000000020000000000000000 +CT=5C76002BC7206560EFE550C80B8F12CC + +I=64 +KEY=00000000000000010000000000000000 +CT=F6B7BDD1CAEEBAB574683893C4475484 + +I=65 +KEY=00000000000000008000000000000000 +CT=A920E37CC6DC6B31DA8C0169569F5034 + +I=66 +KEY=00000000000000004000000000000000 +CT=919380ECD9C778BC513148B0C28D65FD + +I=67 +KEY=00000000000000002000000000000000 +CT=EE67308DD3F2D9E6C2170755E5784BE1 + +I=68 +KEY=00000000000000001000000000000000 +CT=3CC73E53B85609023A05E149B223AE09 + +I=69 +KEY=00000000000000000800000000000000 +CT=983E8AF7CF05EBB28D71EB841C9406E6 + +I=70 +KEY=00000000000000000400000000000000 +CT=0F3099B2D31FA5299EE5BF43193287FC + +I=71 +KEY=00000000000000000200000000000000 +CT=B763D84F38C27FE6931DCEB6715D4DB6 + +I=72 +KEY=00000000000000000100000000000000 +CT=5AE3C9B0E3CC29C0C61565CD01F8A248 + +I=73 +KEY=00000000000000000080000000000000 +CT=F58083572CD90981958565D48D2DEE25 + +I=74 +KEY=00000000000000000040000000000000 +CT=7E6255EEF8F70C0EF10337AAB1CCCEF8 + +I=75 +KEY=00000000000000000020000000000000 +CT=AAD4BAC34DB22821841CE2F631961902 + +I=76 +KEY=00000000000000000010000000000000 +CT=D7431C0409BB1441BA9C6858DC7D4E81 + +I=77 +KEY=00000000000000000008000000000000 +CT=EF9298C65E339F6E801A59C626456993 + +I=78 +KEY=00000000000000000004000000000000 +CT=53FE29F68FF541ABC3F0EF3350B72F7E + +I=79 +KEY=00000000000000000002000000000000 +CT=F6BBA5C10DB02529E2C2DA3FB582CC14 + +I=80 +KEY=00000000000000000001000000000000 +CT=E4239AA37FC531A386DAD1126FC0E9CD + +I=81 +KEY=00000000000000000000800000000000 +CT=8F7758F857D15BBE7BFD0E416404C365 + +I=82 +KEY=00000000000000000000400000000000 +CT=D273EB57C687BCD1B4EA7218A509E7B8 + +I=83 +KEY=00000000000000000000200000000000 +CT=65D64F8D76E8B3423FA25C4EB58A210A + +I=84 +KEY=00000000000000000000100000000000 +CT=623D802B4EC450D66A16625702FCDBE0 + +I=85 +KEY=00000000000000000000080000000000 +CT=7496460CB28E5791BAEAF9B68FB00022 + +I=86 +KEY=00000000000000000000040000000000 +CT=34EA600F18BB0694B41681A49D510C1D + +I=87 +KEY=00000000000000000000020000000000 +CT=5F8FF0D47D5766D29B5D6E8F46423BD8 + +I=88 +KEY=00000000000000000000010000000000 +CT=225F9286C5928BF09F84D3F93F541959 + +I=89 +KEY=00000000000000000000008000000000 +CT=B21E90D25DF383416A5F072CEBEB1FFB + +I=90 +KEY=00000000000000000000004000000000 +CT=4AEFCDA089318125453EB9E8EB5E492E + +I=91 +KEY=00000000000000000000002000000000 +CT=4D3E75C6CD40EC4869BC85158591ADB8 + +I=92 +KEY=00000000000000000000001000000000 +CT=63A8B904405436A1B99D7751866771B7 + +I=93 +KEY=00000000000000000000000800000000 +CT=64F0DAAE47529199792EAE172BA53293 + +I=94 +KEY=00000000000000000000000400000000 +CT=C3EEF84BEA18225D515A8C852A9047EE + +I=95 +KEY=00000000000000000000000200000000 +CT=A44AC422B47D47B81AF73B3E9AC9596E + +I=96 +KEY=00000000000000000000000100000000 +CT=D16E04A8FBC435094F8D53ADF25F5084 + +I=97 +KEY=00000000000000000000000080000000 +CT=EF13DC34BAB03E124EEAD8B6BF44B532 + +I=98 +KEY=00000000000000000000000040000000 +CT=D94799075C24DCC067AF0D392049250D + +I=99 +KEY=00000000000000000000000020000000 +CT=14F431771EDDCE4764C21A2254B5E3C8 + +I=100 +KEY=00000000000000000000000010000000 +CT=7039329F36F2ED682B02991F28D64679 + +I=101 +KEY=00000000000000000000000008000000 +CT=124EE24EDE5551639DB8B8B941F6141D + +I=102 +KEY=00000000000000000000000004000000 +CT=C2852879A34D5184E478EC918B993FEE + +I=103 +KEY=00000000000000000000000002000000 +CT=86A806A3525B93E432053C9AB5ABBEDF + +I=104 +KEY=00000000000000000000000001000000 +CT=C1609BF5A4F07E37C17A36366EC23ECC + +I=105 +KEY=00000000000000000000000000800000 +CT=7E81E7CB92159A51FFCEA331B1E8EA53 + +I=106 +KEY=00000000000000000000000000400000 +CT=37A7BE002856C5A59A6E03EAFCE7729A + +I=107 +KEY=00000000000000000000000000200000 +CT=BDF98A5A4F91E890C9A1D1E5FAAB138F + +I=108 +KEY=00000000000000000000000000100000 +CT=4E96ACB66E051F2BC739CC3D3E34A26B + +I=109 +KEY=00000000000000000000000000080000 +CT=EE996CDD120EB86E21ECFA49E8E1FCF1 + +I=110 +KEY=00000000000000000000000000040000 +CT=61B9E6B579DBF6070C351A1440DD85FF + +I=111 +KEY=00000000000000000000000000020000 +CT=AC369E484316440B40DFC83AA96E28E7 + +I=112 +KEY=00000000000000000000000000010000 +CT=0A2D16DE985C76D45C579C1159413BBE + +I=113 +KEY=00000000000000000000000000008000 +CT=DA3FDC38DA1D374FA4802CDA1A1C6B0F + +I=114 +KEY=00000000000000000000000000004000 +CT=B842523D4C41C2211AFE43A5800ADCE3 + +I=115 +KEY=00000000000000000000000000002000 +CT=9E2CDA90D8E992DBA6C73D8229567192 + +I=116 +KEY=00000000000000000000000000001000 +CT=D49583B781D9E20F5BE101415957FC49 + +I=117 +KEY=00000000000000000000000000000800 +CT=EF09DA5C12B376E458B9B8670032498E + +I=118 +KEY=00000000000000000000000000000400 +CT=A96BE0463DA774461A5E1D5A9DD1AC10 + +I=119 +KEY=00000000000000000000000000000200 +CT=32CEE3341060790D2D4B1362EF397090 + +I=120 +KEY=00000000000000000000000000000100 +CT=21CEA416A3D3359D2C4D58FB6A035F06 + +I=121 +KEY=00000000000000000000000000000080 +CT=172AEAB3D507678ECAF455C12587ADB7 + +I=122 +KEY=00000000000000000000000000000040 +CT=B6F897941EF8EBFF9FE80A567EF38478 + +I=123 +KEY=00000000000000000000000000000020 +CT=A9723259D94A7DC662FB0C782CA3F1DD + +I=124 +KEY=00000000000000000000000000000010 +CT=2F91C984B9A4839F30001B9F430493B4 + +I=125 +KEY=00000000000000000000000000000008 +CT=0472406345A610B048CB99EE0EF3FA0F + +I=126 +KEY=00000000000000000000000000000004 +CT=F5F39086646F8C05ED16EFA4B617957C + +I=127 +KEY=00000000000000000000000000000002 +CT=26D50F485A30408D5AF47A5736292450 + +I=128 +KEY=00000000000000000000000000000001 +CT=0545AAD56DA2A97C3663D1432A3D1C84 + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=DE885DC87F5A92594082D02CC1E1B42C + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=C749194F94673F9DD2AA1932849630C1 + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=0CEF643313912934D310297B90F56ECC + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=C4495D39D4A553B225FBA02A7B1B87E1 + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=636D10B1A0BCAB541D680A7970ADC830 + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=07CF045786BD6AFCC147D99E45A901A7 + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=6A8E3F425A7599348F95398448827976 + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=5518276836148A00D91089A20D8BFF57 + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=F267E07B5E87E3BC20B969C61D4FCB06 + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=5A1CDE69571D401BFCD20DEBADA2212C + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=70A9057263254701D12ADD7D74CD509E + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=35713A7E108031279388A33A0FE2E190 + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=E74EDE82B1254714F0C7B4B243108655 + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=39272E3100FAA37B55B862320D1B3EB3 + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=6D6E24C659FC5AEF712F77BCA19C9DD0 + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=76D18212F972370D3CC2C6C372C6CF2F + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=B21A1F0BAE39E55C7594ED570A7783EA + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=77DE202111895AC48DD1C974B358B458 + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=67810B311969012AAF7B504FFAF39FD1 + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=C22EA2344D3E9417A6BA07843E713AEA + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=C79CAF4B97BEE0BD0630AB354539D653 + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=135FD1AF761D9AE23DF4AA6B86760DB4 + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=D4659D0B06ACD4D56AB8D11A16FD83B9 + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=F7D270028FC188E4E4F35A4AAA25D4D4 + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=345CAE5A8C9620A9913D5473985852FF + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=4E8980ADDE60B0E42C0B287FEA41E729 + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=F11B6D74E1F15155633DC39743C1A527 + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=9C87916C0180064F9D3179C6F5DD8C35 + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=71AB186BCAEA518E461D4F7FAD230E6A + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=C4A31BBC3DAAF742F9141C2A5001A49C + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=E7C47B7B1D40F182A8928C8A55671D07 + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=8E17F294B28FA373C6249538868A7EEF + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=754404096A5CBC08AF09491BE249141A + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=101CB56E55F05D86369B6D1069204F0A + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=73F19BB6604205C6EE227B9759791E41 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=6270C0028F0D136C37A56B2CB64D24D6 + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=A3BF7C2C38D1114A087ECF212E694346 + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=49CABFF2CEF7D9F95F5EFB1F7A1A7DDE + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=EC7F8A47CC59B849469255AD49F62752 + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=68FAE55A13EFAF9B07B3552A8A0DC9D1 + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=211E6B19C69FAEF481F64F24099CDA65 + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=DBB918C75BC5732416F79FB0C8EE4C5C + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=98D494E5D963A6C8B92536D3EC35E3FD + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=C9A873404D403D6F074190851D67781A + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=073AEF4A7C77D921928CB0DD9D27CAE7 + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=89BDE25CEE36FDE769A10E52298CF90F + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=26D0842D37EAD38557C65E0A5E5F122E + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=F8294BA375AF46B3F22905BBAFFAB107 + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=2AD63EB4D0D43813B979CF72B35BDB94 + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=7710C171EE0F4EFA39BE4C995180181D + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=C0CB2B40DBA7BE8C0698FAE1E4B80FF8 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=97970E505194622FD955CA1B80B784E9 + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=7CB1824B29F850900DF2CAD9CF04C1CF + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=FDF4F036BB988E42F2F62DE63FE19A64 + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=08908CFE2C82606B2C15DF61B75CF3E2 + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=B3AA689EF2D07FF365ACB9ADBA2AF07A + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=F2672CD8EAA3B98776660D0263656F5C + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=5BDEAC00E986687B9E1D94A0DA7BF452 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=E6D57BD66EA1627363EE0C4B711B0B21 + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=03730DD6ACB4AD9996A63BE7765EC06F + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=A470E361AA5437B2BE8586D2F78DE582 + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=7567FEEFA559911FD479670246B484E3 + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=29829DEA15A4E7A4C049045E7B106E29 + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=A407834C3D89D48A2CB7A152208FA4ED + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=68F948053F78FEF0D8F9FE7EF3A89819 + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=B605174CAB13AD8FE3B20DA3AE7B0234 + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=CCAB8F0AEBFF032893996D383CBFDBFA + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=AF14BB8428C9730B7DC17B6C1CBEBCC8 + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=5A41A21332040877EB7B89E8E80D19FE + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=AC1BA52EFCDDE368B1596F2F0AD893A0 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=41B890E31B9045E6ECDC1BC3F2DB9BCC + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=4D54A549728E55B19A23660424A0F146 + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=A917581F41C47C7DDCFFD5285E2D6A61 + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=604DF24BA6099B93A7405A524D764FCB + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=78D9D156F28B190E232D1B7AE7FC730A + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=5A12C39E442CD7F27B3CD77F5D029582 + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=FF2BF2F47CF7B0F28EE25AF95DBF790D + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=1863BB7D193BDA39DF090659EB8AE48B + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=38178F2FB4CFCF31E87E1ABCDC023EB5 + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=F5B13DC690CC0D541C6BA533023DC8C9 + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=48EC05238D7375D126DC9D08884D4827 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=ACD0D81139691B310B92A6E377BACC87 + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=9A4AA43578B55CE9CC178F0D2E162C79 + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=08AD94BC737DB3C87D49B9E01B720D81 + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=3BCFB2D5D210E8332900C5991D551A2A + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=C5F0C6B9397ACB29635CE1A0DA2D8D96 + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=844A29EFC693E2FA9900F87FBF5DCD5F + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=5126A1C41051FEA158BE41200E1EA59D + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=302123CA7B4F46D667FFFB0EB6AA7703 + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=A9D16BCE7DB5C024277709EE2A88D91A + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=F013C5EC123A26CFC34B598C992A996B + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=E38A825CD971A1D2E56FB1DBA248F2A8 + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=6E701773C0311E0BD4C5A097406D22B3 + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=754262CEF0C64BE4C3E67C35ABE439F7 + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=C9C2D4C47DF7D55CFA0EE5F1FE5070F4 + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=6AB4BEA85B172573D8BD2D5F4329F13D + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=11F03EF28E2CC9AE5165C587F7396C8C + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=0682F2EB1A68BAC7949922C630DD27FA + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=ABB0FEC0413D659AFE8E3DCF6BA873BB + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=FE86A32E19F805D6569B2EFADD9C92AA + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=E434E472275D1837D3D717F2EECC88C3 + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=74E57DCD12A21D26EF8ADAFA5E60469A + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=C275429D6DAD45DDD423FA63C816A9C1 + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=7F6EC1A9AE729E86F7744AED4B8F4F07 + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=48B5A71AB9292BD4F9E608EF102636B2 + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=076FB95D5F536C78CBED3181BCCF3CF1 + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=BFA76BEA1E684FD3BF9256119EE0BC0F + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=7D395923D56577F3FF8670998F8C4A71 + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=BA02C986E529AC18A882C34BA389625F + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=3DFCF2D882AFE75D3A191193013A84B5 + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=FAD1FDE1D0241784B63080D2C74D236C + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=7D6C80D39E41F007A14FB9CD2B2C15CD + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=7975F401FC10637BB33EA2DB058FF6EC + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=657983865C55A818F02B7FCD52ED7E99 + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=B32BEB1776F9827FF4C3AC9997E84B20 + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=2AE2C7C374F0A41E3D46DBC3E66BB59F + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=4D835E4ABDD4BDC6B88316A6E931A07F + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=E07EFABFF1C353F7384EBB87B435A3F3 + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=ED3088DC3FAF89AD87B4356FF1BB09C2 + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=4324D01140C156FC898C2E32BA03FB05 + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=BE15D016FACB5BAFBC24FA9289132166 + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=AC9B7048EDB1ACF4D97A5B0B3F50884B + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=448BECE1F86C7845DFA9A4BB2A016FB3 + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=10DD445E87686EB46EA9B1ABC49257F0 + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=B7FCCF7659FA756D4B7303EEA6C07458 + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=289117115CA3513BAA7640B1004872C2 + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=57CB42F7EE7186051F50B93FFA7B35BF + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=F2741BFBFB81663B9136802FB9C3126A + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=E32DDDC5C7398C096E3BD535B31DB5CE + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=81D3C204E608AF9CC713EAEBCB72433F + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=D4DEEF4BFC36AAA579496E6935F8F98E + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=C356DB082B97802B038571C392C5C8F6 + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=A3919ECD4861845F2527B77F06AC6A4E + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=A53858E17A2F802A20E40D44494FFDA0 + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=5D989E122B78C758921EDBEEB827F0C0 + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=4B1C0C8F9E7830CC3C4BE7BD226FA8DE + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=82C40C5FD897FBCA7B899C70713573A1 + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=ED13EE2D45E00F75CCDB51EA8E3E36AD + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=F121799EEFE8432423176A3CCF6462BB + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=4FA0C06F07997E98271DD86F7B355C50 + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=849EB364B4E81D058649DC5B1BF029B9 + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=F48F9E0DE8DE7AD944A207809335D9B1 + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=E59E9205B5A81A4FD26DFCF308966022 + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=3A91A1BE14AAE9ED700BDF9D70018804 + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=8ABAD78DCB79A48D79070E7DA89664EC + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=B68377D98AAE6044938A7457F6C649D9 + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=E4E1275C42F5F1B63D662C099D6CE33D + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=7DEF32A34C6BE668F17DA1BB193B06EF + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=78B6000CC3D30CB3A74B68D0EDBD2B53 + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=0A47531DE88DD8AE5C23EAE4F7D1F2D5 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=667B24E8000CF68231EC484581D922E5 + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=39DAA5EBD4AACAE130E9C33236C52024 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=E3C88760B3CB21360668A63E55BB45D1 + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=F131EE903C1CDB49D416866FD5D8DE51 + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=7A1916135B0447CF4033FC13047A583A + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=F7D55FB27991143DCDFA90DDF0424FCB + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=EA93E7D1CA1111DBD8F7EC111A848C0C + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=2A689E39DFD3CBCBE221326E95888779 + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=C1CE399CA762318AC2C40D1928B4C57D + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=D43FB6F2B2879C8BFAF0092DA2CA63ED + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=224563E617158DF97650AF5D130E78A5 + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=6562FDF6833B7C4F7484AE6EBCC243DD + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=93D58BA7BED22615D661D002885A7457 + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=9A0EF559003AD9E52D3E09ED3C1D3320 + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=96BAF5A7DC6F3DD27EB4C717A85D261C + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=B8762E06884900E8452293190E19CCDB + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=785416A22BD63CBABF4B1789355197D3 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=A0D20CE1489BAA69A3612DCE90F7ABF6 + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=700244E93DC94230CC607FFBA0E48F32 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=85329E476829F872A2B4A7E59F91FF2D + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=E4219B4935D988DB719B8B8B2B53D247 + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=6ACDD04FD13D4DB4409FE8DD13FD737B + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=9EB7A670AB59E15BE582378701C1EC14 + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=29DF2D6935FE657763BC7A9F22D3D492 + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=99303359D4A13AFDBE6C784028CE533A + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=FF5C70A6334545F33B9DBF7BEA0417CA + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=289F58A17E4C50EDA4269EFB3DF55815 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=EA35DCB416E9E1C2861D1682F062B5EB + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=3A47BF354BE775383C50B0C0A83E3A58 + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=BF6C1DC069FB95D05D43B01D8206D66B + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=046D1D580D5898DA6595F32FD1F0C33D + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=5F57803B7B82A110F7E9855D6A546082 + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=25336ECF34E7BE97862CDFF715FF05A8 + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=ACBAA2A943D8078022D693890E8C4FEF + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=3947597879F6B58E4E2F0DF825A83A38 + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=4EB8CC3335496130655BF3CA570A4FC0 + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=BBDA7769AD1FDA425E18332D97868824 + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=5E7532D22DDB0829A29C868198397154 + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=E66DA67B630AB7AE3E682855E1A1698E + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=4D93800F671B48559A64D1EA030A590A + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=F33159FCC7D9AE30C062CD3B322AC764 + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=8BAE4EFB70D33A9792EEA9BE70889D72 + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=E35A6DCB19B201A01EBCFA8AA22B5759 + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=5075C2405B76F22F553488CAE47CE90B + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=49DF95D844A0145A7DE01C91793302D3 + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=E7396D778E940B8418A86120E5F421FE + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=05F535C36FCEDE4657BE37F4087DB1EF + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=D0C1DDDD10DA777C68AB36AF51F2C204 + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=1C55FB811B5C6464C4E5DE1535A75514 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=52917F3AE957D5230D3A2AF57C7B5A71 + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=C6E3D5501752DD5E9AEF086D6B45D705 + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=A24A9C7AF1D9B1E17E1C9A3E711B3FA7 + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=B881ECA724A6D43DBC6B96F6F59A0D20 + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=EC524D9A24DFFF2A9639879B83B8E137 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=34C4F345F5466215A037F443635D6F75 + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=5BA5055BEDB8895F672E29F2EB5A355D + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=B3F692AA3A435259EBBEF9B51AD1E08D + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=414FEB4376F2C64A5D2FBB2ED531BA7D + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=A20D519E3BCA3303F07E81719F61605E + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=A08D10E520AF811F45BD60A2DC0DC4B1 + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=B06893A8C563C430E6F3858826EFBBE4 + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=0FFEE26AE2D3929C6BD9C6BEDFF84409 + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=4D0F5E906ED77801FC0EF53EDC5F9E2B + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=8B6EC00119AD8B026DCE56EA7DEFE930 + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=69026591D43363EE9D83B5007F0B484E + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=27135D86950C6A2F86872706279A4761 + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=35E6DB8723F281DA410C3AC8535ED77C + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=57427CF214B8C28E4BBF487CCB8D0E09 + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=6DF01BF56E5131AC87F96E99CAB86367 + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=3856C5B55790B768BBF7D43031579BCF + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=1E6ED8FB7C15BC4D2F63BA7037ED44D0 + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=E1B2ED6CD8D93D455534E401156D4BCF + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=EFBCCA5BDFDAD10E875F02336212CE36 + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=0B777F02FD18DCE2646DCFE868DFAFAD + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=C8A104B5693D1B14F5BF1F10100BF508 + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=4CCE6615244AFCB38408FECE219962EA + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=F99E7845D3A255B394C9C050CBA258B1 + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=B4AFBB787F9BCFB7B55FDF447F611295 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=AE1C426A697FAF2808B7EF6ADDB5C020 + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=7572F92811A85B9BDD38DEAD9945BCAE + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=71BC7AA46E43FB95A181527D9F6A360F + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=5542EF2923066F1EC8F546DD0D8E7CA8 + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=6B92317C7D623790B748FDD7EFC42422 + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=0FE7C097E899C71EF045360F8D6C25CF + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=4ECE7EE107D0264D04693151C25B9DF6 + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=FD6AE687CBFCA9E301045888D3BB9605 + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=476B579C8556C7254424902CC1D6D36E + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=4133CBCDFDD6B8860A1FC18665D6D71B + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=3B36EC2664798C108B816812C65DFDC7 + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=364E20A234FEA385D48DC5A09C9E70CF + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=4A4BA25969DE3F5EE5642C71AAD0EFD1 + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=E42CBAAE43297F67A76C1C501BB79E36 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=23CEDEDA4C15B4C037E8C61492217937 + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=A1719147A1F4A1A1180BD16E8593DCDE + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=AB82337E9FB0EC60D1F25A1D0014192C + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=74BF2D8FC5A8388DF1A3A4D7D33FC164 + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=D5B493317E6FBC6FFFD664B3C491368A + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=BA767381586DA56A2A8D503D5F7ADA0B + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=E8E6BC57DFE9CCADB0DECABF4E5CF91F + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=3C8E5A5CDC9CEED90815D1F84BB2998C + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=283843020BA38F056001B2FD585F7CC9 + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=D8ADC7426F623ECE8741A70621D28870 + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=D7C5C215592D06F00E6A80DA69A28EA9 + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=52CF6FA433C3C870CAC70190358F7F16 + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=F63D442A584DA71786ADEC9F3346DF75 + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=549078F4B0CA7079B45F9A5ADAFAFD99 + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=F2A5986EE4E9984BE2BAFB79EA8152FA + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=8A74535017B4DB2776668A1FAE64384C + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=E613342F57A97FD95DC088711A5D0ECD + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=3FFAEBF6B22CF1DC82AE17CD48175B01 + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=BAFD52EFA15C248CCBF9757735E6B1CE + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=7AF94BC018D9DDD4539D2DD1C6F4000F + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=FE177AD61CA0FDB281086FBA8FE76803 + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=74DBEA15E2E9285BAD163D7D534251B6 + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=23DD21331B3A92F200FE56FF050FFE74 + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=A69C5AA34AB20A858CAFA766EACED6D8 + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=3F72BB4DF2A4F941A4A09CB78F04B97A + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=72CC43577E1FD5FD14622D24D97FCDCC + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=D83AF8EBE93E0B6B99CAFADE224937D1 + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=44042329128D56CAA8D084C8BD769D1E + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=14102D72290DE4F2C430ADD1ED64BA1D + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=449124097B1ECD0AE7065206DF06F03C + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=D060A99F8CC153A42E11E5F97BD7584A + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=65605B3EA9261488D53E48602ADEA299 + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=C5E5CAD7A208DE8EA6BE049EFE5C7346 + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=4C280C46D2181646048DD5BC0C0831A5 + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=5DD65CF37F2A0929559AABAFDA08E730 + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=31F2335CAAF264172F69A693225E6D22 + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=3E28B35F99A72662590DA96426DD377F + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=570F40F5D7B20441486578ED344343BE + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=C54308AD1C9E3B19F8B7417873045A8C + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=CBF335E39CE13ADE2B696179E8FD0CE1 + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=9C2FBF422355D8293083D51F4A3C18A9 + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=5ED8B5A31ECEFAB16C9AA6986DA67BCE + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=627815DCFC814ABC75900041B1DD7B59 + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=9EF3E82A50A59F166260494F7A7F2CC3 + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=878CD0D8D920888B5935D6C351128737 + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=E44429474D6FC3084EB2A6B8B46AF754 + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=EBAACF9641D54E1FB18D0A2BE4F19BE5 + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=13B3BF497CEE780E123C7E193DEA3A01 + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=6E8F381DE00A41161F0DF03B4155BFD4 + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=35E4F29BBA2BAE01144910783C3FEF49 + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=55B17BD66788CEAC366398A31F289FFB + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=11341F56C0D6D1008D28741DAA7679CE + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=4DF7253DF421D83358BDBE924745D98C + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=BAE2EE651116D93EDC8E83B5F3347BE1 + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=F9721ABD06709157183AF3965A659D9D + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=19A1C252A613FE2860A4AE6D75CE6FA3 + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=B5DDB2F5D9752C949FBDE3FFF5556C6E + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=81B044FCFFC78ECCFCD171AAD0405C66 + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=C640566D3C06020EB2C42F1D62E56A9B + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=EA6C4BCF425291679FDFFD26A424FBCC + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=57F6901465D9440D9F15EE2CBA5A4090 + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=FBCFA74CADC7406260F63D96C8AAB6B1 + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=DFF4F096CEA211D4BBDACA033D0EC7D1 + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=1EE5190D551F0F42F675227A381296A9 + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=F98E1905012E580F097623C10B93054F + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=E7D43743D21DD3C9F168C86856558B9A + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=632A9DDA730DAB67593C5D08D8AC1059 + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=E084317000715B9057BC9DE9F3AB6124 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=61F9EF33A0BB4E666C2ED99101919FAB + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=6DC1D68A11834657D46703C22578D59A + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=53AC1548863D3D16F1D4DC7242E05F2C + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=E82CD587A408306AD78CEAE0916B9F8C + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=0FD2D40EA6AD17A3A767F0A8600D6295 + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=AD84CC8255ADB39DFCA23F92761AE7E9 + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=F4F20CF7D51BEE7DA024A2B11A7ECA0B + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=5057691B85D9CE93A193214DB0A016B6 + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=0F58C960876390BDEF4BB6BE95CAA1EE + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=9A3E66EEBC21BC0BD9430B341EF465FA + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=20415035F34B8BCBCB28ABF07F78F0D4 + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=AC89FC7BA10479EBF10DE65BCEF89B3C + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=068FA75A30BE443171AF3F6FEB1A20D2 + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=50E02F213246C525A8C27700CA34B502 + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=227DA47D5A0906DB3AB042BB0A695FB6 + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=8663AC30ED12514F1DE46777F4514BFC + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=A987D4BC12E1DE9F4B6DF43567C34A8B + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=6D5A0370F599ACA605F63B04E5143D0C + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=9809266E378B07B7AFDB3BAA97B7E442 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=8F753252B30CCCACE12D9A301F4D5090 + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=032465F6C0CE34D41962F561692A1AFF + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=C50E9AD5BEB8F3B00821DD47FF8AC093 + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=9C6FEA3D46268D54A6829B2AD25BB276 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=0FD8575E87706F561343D7B3A41E044A + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=BEE9BEB3739540D88CBCE77925F0A114 + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=D24EAEE7FFFBAC3D6F26C2DCE0DCDE28 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=47771A90398FF0F7FA821C2F8F5E1398 + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=4639741B6F84B135AD118C8249B64ED0 + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=8EE5505EC85567697A3306F250A27720 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=7C8A19AC1AEFBC5E0119D91A5F05D4C2 + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=5141B9B672E54773B672E3A6C424887B + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=B5A2D3CD206653C6402F34FB0AE3613D + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=0F5BD9408738231D114B0A82753279A3 + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=FEF033FF4268EA487FC74C5E43A45338 + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=A3EDC09DCD529B113910D904AD855581 + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=AB8FBB6F27A0AC7C55B59FDD36B72F1C + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=EEA44D5ED4D769CC930CD83D8999EC46 + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=6972276803AE9AA7C6F431AB10979C34 + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=86DEAA9F39244101818178474D7DBDE9 + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=88C6B466EA361D662D8D08CBF181F4FE + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=91AB2C6B7C63FF59F7CBEEBF91B20B95 + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=2DFE6C146AD5B3D8C3C1718F13B48E01 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=C7CFF1623451711391A302EEC3584AAA + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=089FE845CC05011686C66019D18BE050 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=08C8410B9B427211A67124B0DCCEAD48 + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=8D91592F5566085254784606334D7629 + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=3298FEAAF2E1201D6299FF8846639C97 + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=C497CB9F0BDFE0EFC8C2F3F90760AA72 + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=2788AFD046E0309CBE4424690DA2AB89 + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=E9891707F25EF29FEE372890D4258982 + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=DB041D94A23D45D4D4DCED5A030CAF61 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=FFAFDBF0ECB18DF9EA02C27077448E6D + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=2DAAA42A7D0A1D3B0E4761D99CF2150A + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=3B7A54CB7CF30ABE263DD6ED5BFE8D63 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=EEFA090174C590C448A55D43648F534A + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=9E15798731ED42F43EA2740A691DA872 + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=31FBD661540A5DEAAD1017CFD3909EC8 + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=CDA9AE05F224140E28CB951721B44D6A + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=0C5BC512C60A1EAC3434EFB1A8FBB182 + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=AA863610DEEEEB62D045E87EA30B59B5 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=6AC2448DE568D279C7EEBE1DF403920C + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=E2011E3D292B26888AE801215FD0CB40 + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=E06F3E15EE3A61672D1C99BADE5B9DBE + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=BB7027F0548CF6712CEB4C7A4B28E178 + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=061EC21FB70FADBDF87C3BD2AE23825B + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=4C21F26FE94ABBAC381352375314C3EB + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=F7CEE6DD99909C2B569EEDA61ED8942E + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=CE98C4A876C65E4CCB261EBB1D9DF7F5 + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=A5491881CF833C3604ABC08044F402AC + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=A1BA16E64CCCB3087D57A768507B0BFC + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=D55951E202D2949EBD3BE43120C738BF + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=EBB8E43069E69F450EFEC65DCD52B7FD + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=2B292135663B4AA5ABFE9423D57E7EE9 + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=E91BF974B3BE3AD966249D8655292A85 + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=384365998EAA9562236CC58F6ADF9610 + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=C2E997012AA3D4D8D359C9A947CBE69F + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=F49421204148BA213BE87E2D5C22B0BF + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=82ED0ED9953AA92E4DF30929CA65C00F + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=291EB1D11653C8479437C74A977F5106 + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=BCB997B1939B8983ABD550D6025683E3 + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=1FBA2592C6F489775CAADA71F9B983E9 + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=969F66F217AF1A3DB9E41C1B29039824 + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=A54BB7D6B17E423AC0A7744C19073CB8 + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=B0AC6E6578D1021F47DCF9748A32EAD5 + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=B87B361C3B7B194C77A4358D4669153E + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=46A133847F96EAA8282A799DC8899D58 + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=2265EC3A9F2D5C9547A091CC8CFB18EA + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=54CBF3A6FC4FE56D426117AA1FFD1DDE + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=5312877CCEAB6CFB0905394A370A8003 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=7190BD6EC613FE38B84ECFE28F702FE4 + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=D1FA5B9CA89A43B04C05F0EF29EF68CD + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=808285751548ED934FD1056D2D9AE8BA + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=2758DEF3E7B95A9AE89777BE64D5A6CF + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=07D81F87DB3E0ACC82B01E08FB22F3C1 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=8DA250E5553D650711A75EE1CB4FD1C7 + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=A93D946BD0E87F32719DF5F158CEE669 + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=03945236EC2A4D4EAF30B8ABEB54330D + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=11CC35301F24B79DDE31AEA2D1354F88 + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=E73715B3E8D9A290F44AE6FFBF247E5D + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=7345E07732B71CB158BBF64CCA5C5B96 + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=6E128F296D24705A1924FD9B70C4ED04 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=95A789776F036783FBD330947083F54F + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=360DEC2533EA4AA2E3E54FD3DE2906EB + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=E68EFD7FECF4D601EA22727BD764965B + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=9065C64A8BFF44AC33EDBB611CF83D7B + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=8F33C8DF2A7A51CE8090E8F123BC3723 + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=807F391FFBA8291BA625623210F99018 + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=5E8B3F3A701522CE5CAA761C929D6292 + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=3BA404DC38735A78289E3809E8364835 + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=D23BEDBAD229F8305DC425B6B759DCC9 + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=44880F21CF5913040AE376AEE2A10AD8 + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=9BC98E29D057C0E828C3B5CCE69256C1 + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=B293CC7A975DA141A68279368057CC41 + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=8D60FB87ACD91385B313BE5F1D7BD30F + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=2C8E56132D70291B303C48FDF75543CD + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=D1F80035B826791F6CE4E59B7DB1BB0D + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=42CE6224FC36469339A133DD08173BD4 + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=61817155EA41BCBA2AF7F06AE7CBF585 + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=D1923A9866068D2EF5FB77D57C3315B6 + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=B37CBDB5D719F49691CA968EF2E84140 + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=EC974E653A055D7F8F22171030F68E1D + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=DDE5D3B9AAD9C32213BB3675A822499C + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=D3B6E9216EA1AE57EB1C628A3C38AB78 + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=82C99ECC69472B7E96324B042AE8B87A + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=97144DC5338C43600F84439C0AA0D147 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=400AC4A0BBADA1DB2121EB144C7E5209 + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=EFD9D550EB419ED278F4885A490AB54C + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=2AB7816E149B7C0404C88A8857793670 + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=5B591DFF9E8DEE15BAD24C025DBCA481 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=0C06633E30721C3749F49AD8CBF2B754 + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=96D6D31A41B5123B2035FD91A921D4CA + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=E7F6C34D86668BC2805CA7793C5E86AD + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=F46DFF5FF500D6879C4D3E45CF0CF0F3 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=60D842D9C61DA7495C116197B7CECBBE + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=D45B24EDB673353EBDF248B8FA06B67A + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=119EAEBCC165D0BD02C0D35DC82EF992 + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=E673143680414ADA301D0ED34626B9FE + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=6B6CFE160A6263631B292F879EEFF926 + +========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/ecb_vt.txt b/src/lib/crypto/crypto_tests/test/ecb_vt.txt new file mode 100644 index 000000000..6dea60fc4 --- /dev/null +++ b/src/lib/crypto/crypto_tests/test/ecb_vt.txt @@ -0,0 +1,1566 @@ + +========================= + +FILENAME: "ecb_vt.txt" + +Electronic Codebook (ECB) Mode +Variable Text Known Answer Tests + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + +KEY=00000000000000000000000000000000 + +I=1 +PT=80000000000000000000000000000000 +CT=3AD78E726C1EC02B7EBFE92B23D9EC34 + +I=2 +PT=40000000000000000000000000000000 +CT=45BC707D29E8204D88DFBA2F0B0CAD9B + +I=3 +PT=20000000000000000000000000000000 +CT=161556838018F52805CDBD6202002E3F + +I=4 +PT=10000000000000000000000000000000 +CT=F5569B3AB6A6D11EFDE1BF0A64C6854A + +I=5 +PT=08000000000000000000000000000000 +CT=64E82B50E501FBD7DD4116921159B83E + +I=6 +PT=04000000000000000000000000000000 +CT=BAAC12FB613A7DE11450375C74034041 + +I=7 +PT=02000000000000000000000000000000 +CT=BCF176A7EAAD8085EBACEA362462A281 + +I=8 +PT=01000000000000000000000000000000 +CT=47711816E91D6FF059BBBF2BF58E0FD3 + +I=9 +PT=00800000000000000000000000000000 +CT=B970DFBE40698AF1638FE38BD3DF3B2F + +I=10 +PT=00400000000000000000000000000000 +CT=F95B59A44F391E14CF20B74BDC32FCFF + +I=11 +PT=00200000000000000000000000000000 +CT=720F74AE04A2A435B9A7256E49378F5B + +I=12 +PT=00100000000000000000000000000000 +CT=2A0445F61D36BFA7E277070730CF76DA + +I=13 +PT=00080000000000000000000000000000 +CT=8D0536B997AEFEC1D94011BAB6699A03 + +I=14 +PT=00040000000000000000000000000000 +CT=674F002E19F6ED47EFF319E51FAD4498 + +I=15 +PT=00020000000000000000000000000000 +CT=292C02C5CB9163C80AC0F6CF1DD8E92D + +I=16 +PT=00010000000000000000000000000000 +CT=FA321CF18EF5FE727DD82A5C1E945141 + +I=17 +PT=00008000000000000000000000000000 +CT=A5A7AFE1034C39CCCEBE3C584BC0BE05 + +I=18 +PT=00004000000000000000000000000000 +CT=4FF5A52E697E77D081205DBDB21CEA39 + +I=19 +PT=00002000000000000000000000000000 +CT=209E88DC94C9003000CE0769AF7B7166 + +I=20 +PT=00001000000000000000000000000000 +CT=5DEE41AF864CB4B650E5F51551824D38 + +I=21 +PT=00000800000000000000000000000000 +CT=A79A63FA7E4503AE6D6E09F5F9053030 + +I=22 +PT=00000400000000000000000000000000 +CT=A48316749FAE7FAC7002031A6AFD8BA7 + +I=23 +PT=00000200000000000000000000000000 +CT=D6EEE8A7357A0E1D64262CA9C337AC42 + +I=24 +PT=00000100000000000000000000000000 +CT=B013CA8A62A858053E9FB667ED39829E + +I=25 +PT=00000080000000000000000000000000 +CT=DF6EA9E4538A45A52D5C1A43C88F4B55 + +I=26 +PT=00000040000000000000000000000000 +CT=7D03BA451371591D3FD5547D9165C73B + +I=27 +PT=00000020000000000000000000000000 +CT=0E0426281A6277E186499D365D5F49FF + +I=28 +PT=00000010000000000000000000000000 +CT=DBC02169DD2059E6CC4C57C1FEDF5AB4 + +I=29 +PT=00000008000000000000000000000000 +CT=826590E05D167DA6F00DCC75E22788EB + +I=30 +PT=00000004000000000000000000000000 +CT=34A73F21A04421D9786335FAAB49423A + +I=31 +PT=00000002000000000000000000000000 +CT=ED347D0E0128EE1A7392A1D36AB78AA9 + +I=32 +PT=00000001000000000000000000000000 +CT=EE944B2FE6E9FC888042608DA9615F75 + +I=33 +PT=00000000800000000000000000000000 +CT=9E7C85A909EF7218BA7947CFB4718F46 + +I=34 +PT=00000000400000000000000000000000 +CT=811AE07A0B2B1F816587FA73699AE77D + +I=35 +PT=00000000200000000000000000000000 +CT=68466FBF43C2FE13D4B18F7EC5EA745F + +I=36 +PT=00000000100000000000000000000000 +CT=D20B015C7191B219780956E6101F9354 + +I=37 +PT=00000000080000000000000000000000 +CT=5939D5C1BBF54EE1B3E326D757BDDE25 + +I=38 +PT=00000000040000000000000000000000 +CT=B1FDAFE9A0240E8FFEA19CE94B5105D3 + +I=39 +PT=00000000020000000000000000000000 +CT=D62962ECE02CDD68C06BDFEFB2F9495B + +I=40 +PT=00000000010000000000000000000000 +CT=B3BB2DE6F3C26587BA8BAC4F7AD9499A + +I=41 +PT=00000000008000000000000000000000 +CT=E0B1072D6D9FF703D6FBEF77852B0A6B + +I=42 +PT=00000000004000000000000000000000 +CT=D8DD51C907F478DE0228E83E61FD1758 + +I=43 +PT=00000000002000000000000000000000 +CT=A42DFFE6E7C1671C06A25236FDD10017 + +I=44 +PT=00000000001000000000000000000000 +CT=25ACF141550BFAB9EF451B6C6A5B2163 + +I=45 +PT=00000000000800000000000000000000 +CT=4DA7FCA3949B16E821DBC84F19581018 + +I=46 +PT=00000000000400000000000000000000 +CT=7D49B6347CBCC8919C7FA96A37A7A215 + +I=47 +PT=00000000000200000000000000000000 +CT=900024B29A08C6721B95BA3B753DDB4D + +I=48 +PT=00000000000100000000000000000000 +CT=6D2182FB283B6934D90BA7848CAB5E66 + +I=49 +PT=00000000000080000000000000000000 +CT=F73EF01B448D23A4D90DE8B2F9666E7A + +I=50 +PT=00000000000040000000000000000000 +CT=4AD9CDA2418643E9A3D926AF5E6B0412 + +I=51 +PT=00000000000020000000000000000000 +CT=7CAEC8E7E5953997D545B033201C8C5B + +I=52 +PT=00000000000010000000000000000000 +CT=3C43CA1F6B6864503E27B48D88230CF5 + +I=53 +PT=00000000000008000000000000000000 +CT=44F779B93108FE9FEEC880D79BA74488 + +I=54 +PT=00000000000004000000000000000000 +CT=9E50E8D9CFD3A682A78E527C9072A1CF + +I=55 +PT=00000000000002000000000000000000 +CT=68D000CBC838BBE3C505D6F814C01F28 + +I=56 +PT=00000000000001000000000000000000 +CT=2CB2A9FEC1ACD1D9B0FA05205E304F57 + +I=57 +PT=00000000000000800000000000000000 +CT=01EB2806606E46444520A5CC6180CD4B + +I=58 +PT=00000000000000400000000000000000 +CT=DAA9B25168CC702326F217F1A0C0B162 + +I=59 +PT=00000000000000200000000000000000 +CT=3E07E648975D9578D03555B1755807ED + +I=60 +PT=00000000000000100000000000000000 +CT=0B45F52E802C8B8DE09579425B80B711 + +I=61 +PT=00000000000000080000000000000000 +CT=659595DA0B68F6DF0DD6CA77202986E1 + +I=62 +PT=00000000000000040000000000000000 +CT=05FF42873893536E58C8FA98A45C73C4 + +I=63 +PT=00000000000000020000000000000000 +CT=B5B03421DE8BBFFC4EADEC767339A9BD + +I=64 +PT=00000000000000010000000000000000 +CT=788BCD111ECF73D4E78D2E21BEF55460 + +I=65 +PT=00000000000000008000000000000000 +CT=909CD9EC6790359F982DC6F2393D5315 + +I=66 +PT=00000000000000004000000000000000 +CT=332950F361535FF24EFAC8C76293F12C + +I=67 +PT=00000000000000002000000000000000 +CT=A68CCD4E330FFDA9D576DA436DB53D75 + +I=68 +PT=00000000000000001000000000000000 +CT=27C8A1CCFDB0B015D1ED5B3E77143791 + +I=69 +PT=00000000000000000800000000000000 +CT=D76A4B95887A77DF610DD3E1D3B20325 + +I=70 +PT=00000000000000000400000000000000 +CT=C068AB0DE71C66DAE83C361EF4B2D989 + +I=71 +PT=00000000000000000200000000000000 +CT=C2120BCD49EDA9A288B3B4BE79AC8158 + +I=72 +PT=00000000000000000100000000000000 +CT=0C546F62BF2773CD0F564FCECA7BA688 + +I=73 +PT=00000000000000000080000000000000 +CT=18F3462BEDE4920213CCB66DAB1640AA + +I=74 +PT=00000000000000000040000000000000 +CT=FE42F245EDD0E24B216AEBD8B392D690 + +I=75 +PT=00000000000000000020000000000000 +CT=3D3EEBC8D3D1558A194C2D00C337FF2B + +I=76 +PT=00000000000000000010000000000000 +CT=29AAEDF043E785DB42836F79BE6CBA28 + +I=77 +PT=00000000000000000008000000000000 +CT=215F90C6744E2944358E78619159A611 + +I=78 +PT=00000000000000000004000000000000 +CT=8606B1AA9E1D548E5442B06551E2C6DC + +I=79 +PT=00000000000000000002000000000000 +CT=987BB4B8740EC0EDE7FEA97DF033B5B1 + +I=80 +PT=00000000000000000001000000000000 +CT=C0A3500DA5B0AE07D2F450930BEEDF1B + +I=81 +PT=00000000000000000000800000000000 +CT=525FDF8312FE8F32C781481A8DAAAE37 + +I=82 +PT=00000000000000000000400000000000 +CT=BFD2C56AE5FB9C9DE33A6944572A6487 + +I=83 +PT=00000000000000000000200000000000 +CT=7975A57A425CDF5AA1FA929101F650B0 + +I=84 +PT=00000000000000000000100000000000 +CT=BF174BC49609A8709B2CD8366DAA79FE + +I=85 +PT=00000000000000000000080000000000 +CT=06C50C43222F56C874B1704E9F44BF7D + +I=86 +PT=00000000000000000000040000000000 +CT=0CEC48CD34043EA29CA3B8ED5278721E + +I=87 +PT=00000000000000000000020000000000 +CT=9548EA34A1560197B304D0ACB8A1698D + +I=88 +PT=00000000000000000000010000000000 +CT=22F9E9B1BD73B6B5B7D3062C986272F3 + +I=89 +PT=00000000000000000000008000000000 +CT=FEE8E934BD0873295059002230E298D4 + +I=90 +PT=00000000000000000000004000000000 +CT=1B08E2E3EB820D139CB4ABBDBE81D00D + +I=91 +PT=00000000000000000000002000000000 +CT=0021177681E4D90CEAF69DCED0145125 + +I=92 +PT=00000000000000000000001000000000 +CT=4A8E314452CA8A8A3619FC54BC423643 + +I=93 +PT=00000000000000000000000800000000 +CT=65047474F7222C94C6965425FF1BFD0A + +I=94 +PT=00000000000000000000000400000000 +CT=E123F551A9C4A8489622B16F961A9AA4 + +I=95 +PT=00000000000000000000000200000000 +CT=EF05530948B80915028BB2B6FE429380 + +I=96 +PT=00000000000000000000000100000000 +CT=72535B7FE0F0F777CEDCD55CD77E2DDF + +I=97 +PT=00000000000000000000000080000000 +CT=3423D8EFC31FA2F4C365C77D8F3B5C63 + +I=98 +PT=00000000000000000000000040000000 +CT=DE0E51C264663F3C5DBC59580A98D8E4 + +I=99 +PT=00000000000000000000000020000000 +CT=B2D9391166680947AB09264156719679 + +I=100 +PT=00000000000000000000000010000000 +CT=10DB79F23B06D263835C424AF749ADB7 + +I=101 +PT=00000000000000000000000008000000 +CT=DDF72D27E6B01EC107EA3E005B59563B + +I=102 +PT=00000000000000000000000004000000 +CT=8266B57485A5954A4236751DE07F6694 + +I=103 +PT=00000000000000000000000002000000 +CT=669A501E1F1ADE6E5523DE01D6DBC987 + +I=104 +PT=00000000000000000000000001000000 +CT=C20C48F2989725D461D1DB589DC0896E + +I=105 +PT=00000000000000000000000000800000 +CT=DE35158E7810ED1191825D2AA98FA97D + +I=106 +PT=00000000000000000000000000400000 +CT=4FE294F2C0F34D0671B693A237EBDDC8 + +I=107 +PT=00000000000000000000000000200000 +CT=087AE74B10CCBFDF6739FEB9559C01A4 + +I=108 +PT=00000000000000000000000000100000 +CT=5DC278970B7DEF77A5536C77AB59C207 + +I=109 +PT=00000000000000000000000000080000 +CT=7607F078C77085184EAA9B060C1FBFFF + +I=110 +PT=00000000000000000000000000040000 +CT=9DB841531BCBE7998DAD19993FB3CC00 + +I=111 +PT=00000000000000000000000000020000 +CT=D6A089B654854A94560BAE13298835B8 + +I=112 +PT=00000000000000000000000000010000 +CT=E1E223C4CF90CC5D195B370D65114622 + +I=113 +PT=00000000000000000000000000008000 +CT=1CBED73C50D053BDAD372CEEE54836A1 + +I=114 +PT=00000000000000000000000000004000 +CT=D309E69376D257ADF2BFDA152B26555F + +I=115 +PT=00000000000000000000000000002000 +CT=740F7649117F0DEE6EAA7789A9994C36 + +I=116 +PT=00000000000000000000000000001000 +CT=76AE64417C297184D668C5FD908B3CE5 + +I=117 +PT=00000000000000000000000000000800 +CT=6095FEA4AA8035591F1787A819C48787 + +I=118 +PT=00000000000000000000000000000400 +CT=D1FF4E7ACD1C79967FEBAB0F7465D450 + +I=119 +PT=00000000000000000000000000000200 +CT=5F5AD3C42B9489557BB63BF49ECF5F8A + +I=120 +PT=00000000000000000000000000000100 +CT=FB56CC09B680B1D07C5A52149E29F07C + +I=121 +PT=00000000000000000000000000000080 +CT=FF49B8DF4A97CBE03833E66197620DAD + +I=122 +PT=00000000000000000000000000000040 +CT=5E070ADE533D2E090ED0F5BE13BC0983 + +I=123 +PT=00000000000000000000000000000020 +CT=3AB4FB1D2B7BA376590A2C241D1F508D + +I=124 +PT=00000000000000000000000000000010 +CT=58B2431BC0BEDE02550F40238969EC78 + +I=125 +PT=00000000000000000000000000000008 +CT=0253786E126504F0DAB90C48A30321DE + +I=126 +PT=00000000000000000000000000000004 +CT=200211214E7394DA2089B6ACD093ABE0 + +I=127 +PT=00000000000000000000000000000002 +CT=0388DACE60B6A392F328C2B971B2FE78 + +I=128 +PT=00000000000000000000000000000001 +CT=58E2FCCEFA7E3061367F1D57A4E7455A + +========== + +KEYSIZE=192 + +KEY=000000000000000000000000000000000000000000000000 + +I=1 +PT=80000000000000000000000000000000 +CT=6CD02513E8D4DC986B4AFE087A60BD0C + +I=2 +PT=40000000000000000000000000000000 +CT=423D2772A0CA56DAABB48D2129062987 + +I=3 +PT=20000000000000000000000000000000 +CT=1021F2A8DA70EB2219DC16804445FF98 + +I=4 +PT=10000000000000000000000000000000 +CT=C636E35B402577F96974D8804295EBB8 + +I=5 +PT=08000000000000000000000000000000 +CT=1566D2E57E8393C19E29F892EA28A9A7 + +I=6 +PT=04000000000000000000000000000000 +CT=883C878FED70B36CC09D040F9619DD19 + +I=7 +PT=02000000000000000000000000000000 +CT=06734593A974965790E715594FC34AA9 + +I=8 +PT=01000000000000000000000000000000 +CT=F19B389948D9A45534E5BD36C984134A + +I=9 +PT=00800000000000000000000000000000 +CT=D8410DFC14FA6D175EC968EA8CAC514C + +I=10 +PT=00400000000000000000000000000000 +CT=7E6C6EBB4029A177CF7B2FDD9AC6BB7A + +I=11 +PT=00200000000000000000000000000000 +CT=4B51DD4850DC0A6C3A46D924003D2C27 + +I=12 +PT=00100000000000000000000000000000 +CT=2E510A9D917B15BE32A192B12A668F23 + +I=13 +PT=00080000000000000000000000000000 +CT=88F6F79962B0FB77FEA8E7C632D3108E + +I=14 +PT=00040000000000000000000000000000 +CT=A3A35AB1D88DAF07B52794A0F065383A + +I=15 +PT=00020000000000000000000000000000 +CT=DC6CC878433E2B3BB193049A4ECBFC53 + +I=16 +PT=00010000000000000000000000000000 +CT=EFCD3763EB7B1A415938248A9A5B4FD5 + +I=17 +PT=00008000000000000000000000000000 +CT=AB7E9FB9A66DBE5BB44854F07D9015EE + +I=18 +PT=00004000000000000000000000000000 +CT=8B8E9D3365F8F6743ECF7E33E99255A4 + +I=19 +PT=00002000000000000000000000000000 +CT=54D37B4F176FF3D8F6AFC866066D8572 + +I=20 +PT=00001000000000000000000000000000 +CT=E83310889480FBF3C00342E3126D0D02 + +I=21 +PT=00000800000000000000000000000000 +CT=D321AB2511F92F098174AA2DE6E85DA2 + +I=22 +PT=00000400000000000000000000000000 +CT=D8E3F40B1112D5149D58C481DFA9983F + +I=23 +PT=00000200000000000000000000000000 +CT=2454C4E0806639DDF19854D6C68054AD + +I=24 +PT=00000100000000000000000000000000 +CT=A5506D410F7CA32F3955DD79D9D09418 + +I=25 +PT=00000080000000000000000000000000 +CT=7908EE40677699568A7DC1AA317C7E4E + +I=26 +PT=00000040000000000000000000000000 +CT=B4B7B29DD43B2F5CF765E25192273982 + +I=27 +PT=00000020000000000000000000000000 +CT=92AFE9668159BEFFE2A86F8503260164 + +I=28 +PT=00000010000000000000000000000000 +CT=5C36A232FBA6D187A84657AD4028B18F + +I=29 +PT=00000008000000000000000000000000 +CT=A2E994DFAB3A798DF8F54F6DA87E58E2 + +I=30 +PT=00000004000000000000000000000000 +CT=6CDAB10A72ADF77D71D0765BAAE95631 + +I=31 +PT=00000002000000000000000000000000 +CT=9FE3C801BCAAF7BB800F2E6BF3278E21 + +I=32 +PT=00000001000000000000000000000000 +CT=B459D90D9A6C392E5493BC91CF5A0863 + +I=33 +PT=00000000800000000000000000000000 +CT=0518A9FA5007F6787E0FB4E5AC27D758 + +I=34 +PT=00000000400000000000000000000000 +CT=BED9795415D28599700ED7952384A963 + +I=35 +PT=00000000200000000000000000000000 +CT=F0140421173D60251EF6CAB0229B1B50 + +I=36 +PT=00000000100000000000000000000000 +CT=460EB4652B3F6779EA28CB11B37529ED + +I=37 +PT=00000000080000000000000000000000 +CT=C4283D351C960A6AC13CD19CCF03AE38 + +I=38 +PT=00000000040000000000000000000000 +CT=6815A10047B2C834A798EBDCC6786C75 + +I=39 +PT=00000000020000000000000000000000 +CT=99BA19F0CDD5990D0386B32CE56C9C4C + +I=40 +PT=00000000010000000000000000000000 +CT=DE76F62C61E07915162DA13E79679DEC + +I=41 +PT=00000000008000000000000000000000 +CT=DD0325D6854803D06D1D2277D5FB8D67 + +I=42 +PT=00000000004000000000000000000000 +CT=580B71A41DE37D6FAC83CCB0B3BB1C97 + +I=43 +PT=00000000002000000000000000000000 +CT=E9B1AB470A1B02EF0FF5E6754A092C96 + +I=44 +PT=00000000001000000000000000000000 +CT=8590620F5AF5993B7410282F4126BC1F + +I=45 +PT=00000000000800000000000000000000 +CT=8D4914D2F1B22B2E268E66E532D29D7C + +I=46 +PT=00000000000400000000000000000000 +CT=FD826CE48E62C5E30867044B86BA4B56 + +I=47 +PT=00000000000200000000000000000000 +CT=100E7B831C9F35FA1271F5F1316C6FCF + +I=48 +PT=00000000000100000000000000000000 +CT=0A2DD0C17F68B996AA96C007003D0B31 + +I=49 +PT=00000000000080000000000000000000 +CT=C95F68C57E06B0A2E1F623C83C5D80BF + +I=50 +PT=00000000000040000000000000000000 +CT=571CAFC92C7C8A5EC54C0741E186905C + +I=51 +PT=00000000000020000000000000000000 +CT=22514353E95312C112255E1EED0B2DF6 + +I=52 +PT=00000000000010000000000000000000 +CT=791A8BF462BD17580BD9152C6D11C6C5 + +I=53 +PT=00000000000008000000000000000000 +CT=5882A0178D548F84A165DB809C60DC28 + +I=54 +PT=00000000000004000000000000000000 +CT=3CE4A90EED4458CA6039E42DDADB71C3 + +I=55 +PT=00000000000002000000000000000000 +CT=D3CBAB261207A16BE2751E77044FD7C9 + +I=56 +PT=00000000000001000000000000000000 +CT=24E32B698A7B32217093628B01F424AB + +I=57 +PT=00000000000000800000000000000000 +CT=9F6AFC0AF27CF565110C77E3C24F4F5B + +I=58 +PT=00000000000000400000000000000000 +CT=E088AA5CDA20EF267BB039B00C72C45B + +I=59 +PT=00000000000000200000000000000000 +CT=5CF1018B7E0BA1775601C2E279900360 + +I=60 +PT=00000000000000100000000000000000 +CT=3B1A7388B89FB9416AD8753CF5AF35D2 + +I=61 +PT=00000000000000080000000000000000 +CT=137FA4ED00AFCD9F5D8BC0D14BD5837A + +I=62 +PT=00000000000000040000000000000000 +CT=806F5C9B663559BB56F234881E4A3E60 + +I=63 +PT=00000000000000020000000000000000 +CT=8069A449152292DF2DE8642992C632B6 + +I=64 +PT=00000000000000010000000000000000 +CT=37C6CF2A1ABD1B1F1922B46C7B4A280D + +I=65 +PT=00000000000000008000000000000000 +CT=7A2835260E5A0AA2B5DC301800EC8438 + +I=66 +PT=00000000000000004000000000000000 +CT=EE81FAF2F9058213FFCACF281CB8509E + +I=67 +PT=00000000000000002000000000000000 +CT=57F22D93C37129BA331FDBA38E005A1E + +I=68 +PT=00000000000000001000000000000000 +CT=EC798782E87B7D9F780CC3C3A46519B5 + +I=69 +PT=00000000000000000800000000000000 +CT=43EA28497F5D40E3A4744FA2EDAA42DE + +I=70 +PT=00000000000000000400000000000000 +CT=91F004E7DEBF41B3414DD8C5C317372C + +I=71 +PT=00000000000000000200000000000000 +CT=C249EAE54E7B4DF43B938C1B4CC28314 + +I=72 +PT=00000000000000000100000000000000 +CT=32C289D7EEFB99D2F17AD7B7D45FE1EC + +I=73 +PT=00000000000000000080000000000000 +CT=A675FB2E8DDBF810CEF01CF2B728CD2B + +I=74 +PT=00000000000000000040000000000000 +CT=A418AAAB6E6921CC731AA8A349386080 + +I=75 +PT=00000000000000000020000000000000 +CT=2E2B0F44863E67D9B0215C4ABD60417F + +I=76 +PT=00000000000000000010000000000000 +CT=F0AF7CB19E911D481F6426DAEFDD2240 + +I=77 +PT=00000000000000000008000000000000 +CT=CB1304DAAA2DF6878F56AC2E0F887E04 + +I=78 +PT=00000000000000000004000000000000 +CT=B1B70A7E6A0CD1916D9B78BEA19084AE + +I=79 +PT=00000000000000000002000000000000 +CT=0CDE9F9BE646A5FCE3436B794A9CFC65 + +I=80 +PT=00000000000000000001000000000000 +CT=68C7946D476A0A36674B36AFD7E5DF33 + +I=81 +PT=00000000000000000000800000000000 +CT=48770159A07DD8DFFF06C80105F8D57C + +I=82 +PT=00000000000000000000400000000000 +CT=665E62801B3260E3C45BD3BE34DFDEBE + +I=83 +PT=00000000000000000000200000000000 +CT=4159C1F686BFBE5B0E50BDB0DA532B69 + +I=84 +PT=00000000000000000000100000000000 +CT=6333100A5A4AD917DC2D4E78A04869A3 + +I=85 +PT=00000000000000000000080000000000 +CT=866A4519AB1D199F25886B89D0539ACC + +I=86 +PT=00000000000000000000040000000000 +CT=EC0CFD37E4CBC7E8BE385283F7AEA75A + +I=87 +PT=00000000000000000000020000000000 +CT=CA2F383AACCA0810AA13F3E710621422 + +I=88 +PT=00000000000000000000010000000000 +CT=1D0EEF6870444F950937831EC0A55D98 + +I=89 +PT=00000000000000000000008000000000 +CT=37839B35ED6801E7670496D479A95017 + +I=90 +PT=00000000000000000000004000000000 +CT=02317C8C7098C4F94AB867AC7A49DD8D + +I=91 +PT=00000000000000000000002000000000 +CT=FFB4CB4E3F7F8BF3367EBD43236518B4 + +I=92 +PT=00000000000000000000001000000000 +CT=36BEDEF1E4AA3E4A40A305741713FCBF + +I=93 +PT=00000000000000000000000800000000 +CT=B2DFE3C4870269C1E3FEEC39161540D9 + +I=94 +PT=00000000000000000000000400000000 +CT=147EF2518AD45DA0026056ECBF6A3DFA + +I=95 +PT=00000000000000000000000200000000 +CT=027A75E4DE635790E47ACE90D7928804 + +I=96 +PT=00000000000000000000000100000000 +CT=C4CF3CCB59BF87D0AFBD629F48CFBB7B + +I=97 +PT=00000000000000000000000080000000 +CT=35165C93F564C97E1C32EF97E8151A87 + +I=98 +PT=00000000000000000000000040000000 +CT=449DE37F7D5A1BBD628ABBE7E061701D + +I=99 +PT=00000000000000000000000020000000 +CT=B1D45EAF218F1799B149BAD677FE129F + +I=100 +PT=00000000000000000000000010000000 +CT=BE08AC6DB6BD0583AA9D2ABC71C73DCD + +I=101 +PT=00000000000000000000000008000000 +CT=BCC835BD3DF1A79E4C7C145B899A5C25 + +I=102 +PT=00000000000000000000000004000000 +CT=3D311EA611FF5AF371301C58A8E9912D + +I=103 +PT=00000000000000000000000002000000 +CT=A5A1BEA594ACC7CA80F09EA5ADDB5C71 + +I=104 +PT=00000000000000000000000001000000 +CT=0F09492429FE7222D6CD8190D9F2FFBF + +I=105 +PT=00000000000000000000000000800000 +CT=816D2220A16B8AAEE71364FD43636C6F + +I=106 +PT=00000000000000000000000000400000 +CT=D7E8702408419ED73191B107EAF75A0B + +I=107 +PT=00000000000000000000000000200000 +CT=9B170EFB1E235B433C78E276BEA082F0 + +I=108 +PT=00000000000000000000000000100000 +CT=03BBECC5598AE974430F29395522F096 + +I=109 +PT=00000000000000000000000000080000 +CT=DB53517766C0E8CF42059607CBA89380 + +I=110 +PT=00000000000000000000000000040000 +CT=2E2AF4B7931F0AEFFAC5471148A5BB97 + +I=111 +PT=00000000000000000000000000020000 +CT=C872C0408266403B984F635FF5683DE4 + +I=112 +PT=00000000000000000000000000010000 +CT=15DCF750B0E3A68AD1F4EFD07E8967B4 + +I=113 +PT=00000000000000000000000000008000 +CT=B41092048E9E6A749F6FD8CE515A23A3 + +I=114 +PT=00000000000000000000000000004000 +CT=4DA9267D62507994312BD5C99ADDE730 + +I=115 +PT=00000000000000000000000000002000 +CT=9E2FCA6D1D626E9C6A924EBF7DBF618A + +I=116 +PT=00000000000000000000000000001000 +CT=E092E8D7EF2C2465AEFB2493C3063590 + +I=117 +PT=00000000000000000000000000000800 +CT=1C0E58DA37D1068378A88DBE2EDE4E10 + +I=118 +PT=00000000000000000000000000000400 +CT=19063F854232B8509A6A3A6D46809959 + +I=119 +PT=00000000000000000000000000000200 +CT=447FB09E54EFA285F7530F25C4EA0022 + +I=120 +PT=00000000000000000000000000000100 +CT=F6ABE86321BE40E1FBFDAFED37CC1D9B + +I=121 +PT=00000000000000000000000000000080 +CT=4E8506CD006666341D6CF51F98B41F35 + +I=122 +PT=00000000000000000000000000000040 +CT=53995DE0009CA18BECAFB8307C54C14C + +I=123 +PT=00000000000000000000000000000020 +CT=2006BF99F4C58B6CC2627856593FAEEA + +I=124 +PT=00000000000000000000000000000010 +CT=2DA697D2737CB30B744A4644FA1CBC6E + +I=125 +PT=00000000000000000000000000000008 +CT=47A22ACDB60C3A986A8F76ECD0EA3433 + +I=126 +PT=00000000000000000000000000000004 +CT=FDAA17C2CDE20268FE36E164EA532151 + +I=127 +PT=00000000000000000000000000000002 +CT=98E7247C07F0FE411C267E4384B0F600 + +I=128 +PT=00000000000000000000000000000001 +CT=CD33B28AC773F74BA00ED1F312572435 + +========== + +KEYSIZE=256 + +KEY=0000000000000000000000000000000000000000000000000000000000000000 + +I=1 +PT=80000000000000000000000000000000 +CT=DDC6BF790C15760D8D9AEB6F9A75FD4E + +I=2 +PT=40000000000000000000000000000000 +CT=C7098C217C334D0C9BDF37EA13B0822C + +I=3 +PT=20000000000000000000000000000000 +CT=60F0FB0D4C56A8D4EEFEC5264204042D + +I=4 +PT=10000000000000000000000000000000 +CT=73376FBBF654D0686E0E84001477106B + +I=5 +PT=08000000000000000000000000000000 +CT=2F443B52BA5F0C6EA0602C7C4FD259B6 + +I=6 +PT=04000000000000000000000000000000 +CT=75D11B0E3A68C4223D88DBF017977DD7 + +I=7 +PT=02000000000000000000000000000000 +CT=779B38D15BFFB63D8D609D551A5CC98E + +I=8 +PT=01000000000000000000000000000000 +CT=5275F3D86B4FB8684593133EBFA53CD3 + +I=9 +PT=00800000000000000000000000000000 +CT=1CEF2074B336CEC62F12DEA2F6AB1481 + +I=10 +PT=00400000000000000000000000000000 +CT=1AEF5ABBAD9D7160874578DCD8BAE172 + +I=11 +PT=00200000000000000000000000000000 +CT=46C525DB17E72F26BF03216846B6F609 + +I=12 +PT=00100000000000000000000000000000 +CT=E24411F941BBE08788781E3EC52CBAA4 + +I=13 +PT=00080000000000000000000000000000 +CT=83A3DEDD1DD27018F6A6477E40527581 + +I=14 +PT=00040000000000000000000000000000 +CT=B68F8A2CDBAB0C923C67FC8F0F1087DE + +I=15 +PT=00020000000000000000000000000000 +CT=649944A70C32BF87A7409E7AE128FDE8 + +I=16 +PT=00010000000000000000000000000000 +CT=2846526D67387539C89314DE9E0C2D02 + +I=17 +PT=00008000000000000000000000000000 +CT=A9A0B8402E53C70DD1688054BA58DDFD + +I=18 +PT=00004000000000000000000000000000 +CT=4A72E6E1B79C83AC4BE3EBA5699EED48 + +I=19 +PT=00002000000000000000000000000000 +CT=B0E36B867BA4FF2B77D0614B0E364E4C + +I=20 +PT=00001000000000000000000000000000 +CT=49B57DE141F6418E3090F24DDD4014B6 + +I=21 +PT=00000800000000000000000000000000 +CT=A6C0D5B9797258E1987AC5F6CD20146D + +I=22 +PT=00000400000000000000000000000000 +CT=426CF4BDCAA369175965D26E7C71EEA2 + +I=23 +PT=00000200000000000000000000000000 +CT=E27F484CE54BC99BC1A52BDA3B518A26 + +I=24 +PT=00000100000000000000000000000000 +CT=D16D186284C7E6EE64B8104E0EF20BA5 + +I=25 +PT=00000080000000000000000000000000 +CT=6431F8538AD54E1E044A9F71F8EF556B + +I=26 +PT=00000040000000000000000000000000 +CT=ECD57CEB451D27EB96C55B2042257E8E + +I=27 +PT=00000020000000000000000000000000 +CT=4F0F188DC911B1954AFBC734C9F68872 + +I=28 +PT=00000010000000000000000000000000 +CT=B54DEF0337626B65614E81EDFDE620F3 + +I=29 +PT=00000008000000000000000000000000 +CT=6655D8074CAE0B90B0D3A3FE72D4D9DB + +I=30 +PT=00000004000000000000000000000000 +CT=C6B74B6B9EB4FC0C9A237DB1B616D09A + +I=31 +PT=00000002000000000000000000000000 +CT=D7B5D076EA56EC2B20791D7AD51CCF8F + +I=32 +PT=00000001000000000000000000000000 +CT=FE160C224BF003CE3BDDC90CB52ED22C + +I=33 +PT=00000000800000000000000000000000 +CT=5E00DA9BA94B5EC0D258D8A8002E0F6A + +I=34 +PT=00000000400000000000000000000000 +CT=09AC6DCFF4DACFF1651E2BA212A292A3 + +I=35 +PT=00000000200000000000000000000000 +CT=B283617E318D99AF83A05D9810BA89F7 + +I=36 +PT=00000000100000000000000000000000 +CT=0B5F70CCB40B0EF2538AE9B4A9770B35 + +I=37 +PT=00000000080000000000000000000000 +CT=43282BF180248FB517839B37F4DDAAE4 + +I=38 +PT=00000000040000000000000000000000 +CT=DDBD534C8B2E6D30A268F88C55AD765B + +I=39 +PT=00000000020000000000000000000000 +CT=A41A164E50EC2D9F175E752B755E0B5C + +I=40 +PT=00000000010000000000000000000000 +CT=37BFF99FF2F7AA97779E4ADF6F13FB10 + +I=41 +PT=00000000008000000000000000000000 +CT=9BA4F7BD298152903A683C4CEC669216 + +I=42 +PT=00000000004000000000000000000000 +CT=5FB750C7CE10DE7B4504248914D0DA06 + +I=43 +PT=00000000002000000000000000000000 +CT=3E748BFA108E086F51D56EC74A9E0FB9 + +I=44 +PT=00000000001000000000000000000000 +CT=31D4E56B99F5B73C1B8437DF332AFB98 + +I=45 +PT=00000000000800000000000000000000 +CT=9DC6717B84FC55D266E7B1D9B5C52A5F + +I=46 +PT=00000000000400000000000000000000 +CT=8EF8BA007F23C0A50FC120E07041BCCD + +I=47 +PT=00000000000200000000000000000000 +CT=C58F38E1839FC1918A12B8C9E88C66B6 + +I=48 +PT=00000000000100000000000000000000 +CT=B695D72A3FCF508C4050E12E40061C2D + +I=49 +PT=00000000000080000000000000000000 +CT=5D2736AD478A50583BC8C11BEFF16D7A + +I=50 +PT=00000000000040000000000000000000 +CT=DF0EACA8F17847AD41F9578F14C7B56B + +I=51 +PT=00000000000020000000000000000000 +CT=E5AA14AD48AD0A3C47CC35D5F8020E51 + +I=52 +PT=00000000000010000000000000000000 +CT=11BE6C8F58EBD8CEF1A53F591A68E8CE + +I=53 +PT=00000000000008000000000000000000 +CT=ECFE7BAFCBF42C1FEE015488770B3053 + +I=54 +PT=00000000000004000000000000000000 +CT=E552649F8D8EC4A1E1CD6DF50B6E6777 + +I=55 +PT=00000000000002000000000000000000 +CT=521C0629DE93B9119CDB1DDC5809DDEA + +I=56 +PT=00000000000001000000000000000000 +CT=CB38A62A0BAB1784156BA038CBA99BF6 + +I=57 +PT=00000000000000800000000000000000 +CT=76CCEE8AAACD394DE1EEF3DDA10CB54B + +I=58 +PT=00000000000000400000000000000000 +CT=6AFF910FA1D5673140E2DB59B8416049 + +I=59 +PT=00000000000000200000000000000000 +CT=064A12C0EF73FB386801BF4F35F3120D + +I=60 +PT=00000000000000100000000000000000 +CT=2240E374929D5B1BB8FF0FFDDDF640EC + +I=61 +PT=00000000000000080000000000000000 +CT=D4BA15C904C7692185DE85C02052E180 + +I=62 +PT=00000000000000040000000000000000 +CT=1714A315AB0166728A44CD91D4AE9018 + +I=63 +PT=00000000000000020000000000000000 +CT=6C970BDD9F0E222722EA31A1D12DD0AD + +I=64 +PT=00000000000000010000000000000000 +CT=F5956EDF02BD36A401BBB6CE77C3D3FB + +I=65 +PT=00000000000000008000000000000000 +CT=0CA11F122CCD7C259DC597EED3DF9BC4 + +I=66 +PT=00000000000000004000000000000000 +CT=50109AB4912AD2560B206F331B62EB6C + +I=67 +PT=00000000000000002000000000000000 +CT=DBE7C91A4175614889A2D4BEFD64845E + +I=68 +PT=00000000000000001000000000000000 +CT=0D3322853A571A6B46B79C0228E0DD25 + +I=69 +PT=00000000000000000800000000000000 +CT=96E4EE0BB9A11C6FB8522F285BADDEB6 + +I=70 +PT=00000000000000000400000000000000 +CT=96705C52D2CFCE82E630C93477C79C49 + +I=71 +PT=00000000000000000200000000000000 +CT=C50130AED6A126149D71F3888C83C232 + +I=72 +PT=00000000000000000100000000000000 +CT=4816EFE3DEB380566EBA0C17BF582090 + +I=73 +PT=00000000000000000080000000000000 +CT=0390857B4C8C98E4CF7A2B6F3394C507 + +I=74 +PT=00000000000000000040000000000000 +CT=422E73A02025EBE8B8B5D6E0FA24FCB2 + +I=75 +PT=00000000000000000020000000000000 +CT=3271AA7F4BF1D7C38050A43076D4FF76 + +I=76 +PT=00000000000000000010000000000000 +CT=D2074946F0D37B8975607BFC2E70234C + +I=77 +PT=00000000000000000008000000000000 +CT=1A509194C1270AB92E5A42D3A9F8D98B + +I=78 +PT=00000000000000000004000000000000 +CT=512438946360CCC4A5C6D73F6EED7130 + +I=79 +PT=00000000000000000002000000000000 +CT=98CFCDEC46EBEA1A286B3004F2746A0D + +I=80 +PT=00000000000000000001000000000000 +CT=A1CF369949677A3AF3D58E3EABF2741B + +I=81 +PT=00000000000000000000800000000000 +CT=D84C2E1A0E4A52166FA8FF6889D1E5E2 + +I=82 +PT=00000000000000000000400000000000 +CT=4AD91CCEEF60119B5078FD162D2735DE + +I=83 +PT=00000000000000000000200000000000 +CT=2860793D818E97AAFF1D339D7702438D + +I=84 +PT=00000000000000000000100000000000 +CT=6F9068BE73364AE250D89D78A6C9CE6F + +I=85 +PT=00000000000000000000080000000000 +CT=024FC3FEF4883FEB1A8DD005305FECCE + +I=86 +PT=00000000000000000000040000000000 +CT=08A61FE0816D75EA15EB3C9FB9CCDED6 + +I=87 +PT=00000000000000000000020000000000 +CT=449C86DFA13F260175CE39797686FFA4 + +I=88 +PT=00000000000000000000010000000000 +CT=4FFFFC29A59858E1133F2BFB1A8A4817 + +I=89 +PT=00000000000000000000008000000000 +CT=19425D1F6480B25096561295697DC2B7 + +I=90 +PT=00000000000000000000004000000000 +CT=31974727ECDD2C77C3A428FC3A8CB3FC + +I=91 +PT=00000000000000000000002000000000 +CT=A57CD704B3C95E744D08DF443458F2F5 + +I=92 +PT=00000000000000000000001000000000 +CT=486D8C193DB1ED73ACB17990442FC40B + +I=93 +PT=00000000000000000000000800000000 +CT=5E4DBF4E83AB3BC055B9FCC7A6B3A763 + +I=94 +PT=00000000000000000000000400000000 +CT=ACF2E0A693FBBCBA4D41B861E0D89E37 + +I=95 +PT=00000000000000000000000200000000 +CT=32A7CB2AE066A51D2B78FC4B4CFCB608 + +I=96 +PT=00000000000000000000000100000000 +CT=677D494DBB73CAF55C1990158DA12F14 + +I=97 +PT=00000000000000000000000080000000 +CT=082A0D2367512ADF0D75A151BFBE0A17 + +I=98 +PT=00000000000000000000000040000000 +CT=5E5BB7337923C482CE8CBA249E6A8C7D + +I=99 +PT=00000000000000000000000020000000 +CT=D3001BA7C7026EE3E5003179530AFCFC + +I=100 +PT=00000000000000000000000010000000 +CT=46EC44F8931E629FE8FD8961312EDDE1 + +I=101 +PT=00000000000000000000000008000000 +CT=C5F8ECD79C7B30E81D17E32079969310 + +I=102 +PT=00000000000000000000000004000000 +CT=5B8AD6919E24CAEBCC55401AEE0C9802 + +I=103 +PT=00000000000000000000000002000000 +CT=C2302B7E701B5CC7F8B29E3516DBBFA6 + +I=104 +PT=00000000000000000000000001000000 +CT=A1D04D6A76F9F7A94D49FAA64A87F244 + +I=105 +PT=00000000000000000000000000800000 +CT=7FB6F92D35B5CB6C631600EDB9E860BA + +I=106 +PT=00000000000000000000000000400000 +CT=B2EF7078BCFACE07AEEC3F9B48830EB3 + +I=107 +PT=00000000000000000000000000200000 +CT=F475A7493D24C7036E53390374C378B3 + +I=108 +PT=00000000000000000000000000100000 +CT=B36802AC987377A37BD8EADC97C57D60 + +I=109 +PT=00000000000000000000000000080000 +CT=ADDCD3D19689C4DDC738CE5F69DC9505 + +I=110 +PT=00000000000000000000000000040000 +CT=0DAF8CA22884915403C0F0BB1F4BD74F + +I=111 +PT=00000000000000000000000000020000 +CT=4AF36BAE2660503B3248E4685059FD05 + +I=112 +PT=00000000000000000000000000010000 +CT=7D5631814DD8E917D97A0D514C743971 + +I=113 +PT=00000000000000000000000000008000 +CT=BC3352500FC0CBB9DB5B5F6B491C1BE8 + +I=114 +PT=00000000000000000000000000004000 +CT=6A4A30BA87E87AF65C90AEB7AFEDC76B + +I=115 +PT=00000000000000000000000000002000 +CT=77E6125897668AC8E73E8C79A6FF8336 + +I=116 +PT=00000000000000000000000000001000 +CT=3FA9D39104EBB323C7AAAA248960DD1E + +I=117 +PT=00000000000000000000000000000800 +CT=FAD75AD76AB10ADC49036B250E229D39 + +I=118 +PT=00000000000000000000000000000400 +CT=2FACAA5FE35B228A16AC74088D702EC4 + +I=119 +PT=00000000000000000000000000000200 +CT=88B6CBCFDFEF8AD91720A1BB69A1F33E + +I=120 +PT=00000000000000000000000000000100 +CT=C7E9D250998632D444356242EF04058D + +I=121 +PT=00000000000000000000000000000080 +CT=B14DAD8D3D9153F46C0D3A1AD63C7A05 + +I=122 +PT=00000000000000000000000000000040 +CT=60ABA678A506608D0845966D29B5F790 + +I=123 +PT=00000000000000000000000000000020 +CT=482DC43F2388EF25D24144E144BD834E + +I=124 +PT=00000000000000000000000000000010 +CT=1490A05A7CEE43BDE98B56E309DC0126 + +I=125 +PT=00000000000000000000000000000008 +CT=ABFA77CD6E85DA245FB0BDC5E52CFC29 + +I=126 +PT=00000000000000000000000000000004 +CT=DD4AB1284D4AE17B41E85924470C36F7 + +I=127 +PT=00000000000000000000000000000002 +CT=CEA7403D4D606B6E074EC5D3BAF39D18 + +I=128 +PT=00000000000000000000000000000001 +CT=530F8AFBC74536B9A963B4F1C4CB738B + +========== \ No newline at end of file diff --git a/src/lib/crypto/crypto_tests/test/katmct.pdf b/src/lib/crypto/crypto_tests/test/katmct.pdf new file mode 100644 index 000000000..b494fb537 Binary files /dev/null and b/src/lib/crypto/crypto_tests/test/katmct.pdf differ diff --git a/src/lib/crypto/crypto_tests/vb.txt b/src/lib/crypto/crypto_tests/vb.txt new file mode 100644 index 000000000..dab133c2c --- /dev/null +++ b/src/lib/crypto/crypto_tests/vb.txt @@ -0,0 +1,87 @@ + +Private Const BlkLenMax = 32 ' maximum block length in bytes +Private Const KeyLenMax = 32 ' maximum block length in bytes +Private Const KeySchLenMax = 128 ' maximum key schedule length in bytes +Private BlkLen As Integer ' actual block length +Private KeyLen As Integer ' actual key length + +Private Type AESctx ' Type to hold the AES context data + Ekey(0 To KeySchLenMax - 1) As Long + Nrnd As Long + Ncol As Long +End Type + +Private Type KeyBlk ' Type to hold user key data + K(0 To KeyLenMax - 1) As Byte +End Type + +Private Type IoBlk ' Type to hold cipher input and output blocks + IO(0 To BlkLenMax - 1) As Byte +End Type + +Rem Change "d:\dll_pth" in the following lines to the directory path where the AES DLL is located +Private Declare Function AesBlkLen Lib "d:\dll_path\aes.dll" Alias "_aes_blk_len@8" (ByVal N As Long, C As AESctx) As Integer +Private Declare Function AesEncKey Lib "d:\dll_path\aes.dll" Alias "_aes_enc_key@12" (K As KeyBlk, ByVal N As Long, C As AESctx) As Integer +Private Declare Function AesDecKey Lib "d:\dll_path\aes.dll" Alias "_aes_dec_key@12" (K As KeyBlk, ByVal N As Long, C As AESctx) As Integer +Private Declare Function AesEncBlk Lib "d:\dll_path\aes.dll" Alias "_aes_enc_blk@12" (Ib As IoBlk, Ob As IoBlk, C As AESctx) As Integer +Private Declare Function AesDecBlk Lib "d:\dll_path\aes.dll" Alias "_aes_dec_blk@12" (Ib As IoBlk, Ob As IoBlk, C As AESctx) As Integer + +Private Sub Hex(X As Byte) ' Output a byte in hexadecimal format +Dim H As Byte +H = Int(X / 16) +If H < 10 Then + Debug.Print Chr(48 + H); +Else + Debug.Print Chr(87 + H); +End If +H = Int(X Mod 16) +If H < 10 Then + Debug.Print Chr(48 + H); +Else + Debug.Print Chr(87 + H); +End If +End Sub + +Private Sub OutKey(S As String, B As KeyBlk) ' Display a key value +Debug.Print: Debug.Print S; +For i = 0 To KeyLen - 1 + Hex B.K(i) +Next i +End Sub + +Private Sub OutBlock(S As String, B As IoBlk) ' Display an input/output block +Debug.Print: Debug.Print S; +For i = 0 To BlkLen - 1 + Hex B.IO(i) +Next i +End Sub + +Rem The following Main routine should output the following in the immediate window: +Rem Key = 00000000000000000000000000000000 +Rem Input = 00000000000000000000000000000000 +Rem Encrypted Text = 66e94bd4ef8a2c3b884cfa59ca342b2e +Rem Decrypted Text = 00000000000000000000000000000000 + +Sub Main() +Dim Key As KeyBlk ' These variables are automatically +Dim Ib As IoBlk, Ob As IoBlk, Rb As IoBlk +Dim Cx As AESctx ' initialised to zero values in VBA +Dim RetVal As Integer + +BlkLen = 16: KeyLen = 16 + +Rem RetVal = AesBlkLen(BlkLen, Cx) ' include if the cipher block size is variable + +OutKey "Key = ", Key +OutBlock "Input = ", Ib + +RetVal = AesEncKey(Key, KeyLen, Cx) ' set an all zero encryption key +RetVal = AesEncBlk(Ib, Ob, Cx) ' encrypt Ib to Ob +OutBlock "Encrypted Text = ", Ob + +RetVal = AesDecKey(Key, KeyLen, Cx) ' set an all zero decryption key +RetVal = AesDecBlk(Ob, Rb, Cx) ' decrypt Ob to Rb +OutBlock "Decrypted Text = ", Rb +Debug.Print + +End Sub diff --git a/src/lib/crypto/crypto_tests/vectors.c b/src/lib/crypto/crypto_tests/vectors.c new file mode 100644 index 000000000..64a5071c0 --- /dev/null +++ b/src/lib/crypto/crypto_tests/vectors.c @@ -0,0 +1,457 @@ +/* + * lib/crypto/vectors.c + * + * Copyright 2001 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Test vectors for crypto code, matching data submitted for inclusion + * with RFC1510bis. + * + * N.B.: Doesn't compile -- this file uses some routines internal to our + * crypto library which are declared "static" and thus aren't accessible + * without modifying the other sources. + */ + +#include +#include +#include +#include +#include "hash_provider.h" + +#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) + +const char *whoami; + +static void printhex (size_t len, const char *p) +{ + while (len--) + printf ("%02x", 0xff & *p++); +} + +static void printstringhex (const char *p) { printhex (strlen (p), p); } + +static void printdata (krb5_data *d) { printhex (d->length, d->data); } + +static void printkey (krb5_keyblock *k) { printhex (k->length, k->contents); } + +static void test_nfold () +{ + int i; + static const struct { + char *input; + int n; + } tests[] = { + { "012345", 64, }, + { "password", 56, }, + { "Rough Consensus, and Running Code", 64, }, + { "password", 168, }, + { "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 192 }, + { "Q", 168 }, + { "ba", 168 }, + }; + unsigned char outbuf[192/8]; + + for (i = 0; i < ASIZE (tests); i++) { + char *p = tests[i].input; + assert (tests[i].n / 8 <= sizeof (outbuf)); + printf ("%d-fold(\"%s\") =\n", tests[i].n, p); + printf ("%d-fold(", tests[i].n); + printstringhex (p); + printf (") =\n\t"); + krb5_nfold (8 * strlen (p), p, tests[i].n, outbuf); + printhex (tests[i].n / 8U, outbuf); + printf ("\n\n"); + } +} + +#define JURISIC "Juri\305\241i\304\207" /* hi Miro */ +#define ESZETT "\303\237" +#define GCLEF "\360\235\204\236" /* outside BMP, woo hoo! */ + +/* Some weak keys: + {0x1f,0x1f,0x1f,0x1f,0x0e,0x0e,0x0e,0x0e}, + {0xe0,0xe0,0xe0,0xe0,0xf1,0xf1,0xf1,0xf1}, + so try to generate them. */ + +static void +test_mit_des_s2k () +{ + static const struct { + const char *pass; + const char *salt; + } pairs[] = { + { "password", "ATHENA.MIT.EDUraeburn" }, + { "potatoe", "WHITEHOUSE.GOVdanny" }, + { "penny", "EXAMPLE.COMbuckaroo", }, + { GCLEF, "EXAMPLE.COMpianist" }, + { ESZETT, "ATHENA.MIT.EDU" JURISIC }, + /* These two trigger weak-key fixups. */ + { "11119999", "AAAAAAAA" }, + { "NNNN6666", "FFFFAAAA" }, + }; + int i; + + for (i = 0; i < ASIZE (pairs); i++) { + const char *p = pairs[i].pass; + const char *s = pairs[i].salt; + krb5_data pd; + krb5_data sd; + unsigned char key_contents[60]; + krb5_keyblock key; + krb5_error_code r; + char buf[80]; + + key.contents = key_contents; + + pd.length = strlen (p); + pd.data = (char *) p; + sd.length = strlen (s); + sd.data = (char *) s; + + assert (strlen (s) + 4 < sizeof (buf)); + snprintf (buf, sizeof (buf), "\"%s\"", s); + printf ( "salt: %-25s", buf); + printhex (strlen(s), s); + snprintf (buf, sizeof (buf), "\"%s\"", p); + printf ("\npassword: %-25s", buf); + printhex (strlen(p), p); + printf ("\n"); + r = krb5int_des_string_to_key (0, &pd, &sd, 0, &key); + printf ( "DES key: %-25s", ""); + printhex (key.length, key.contents); + printf ("\n\n"); + } +} + +static void +test_s2k (krb5_enctype enctype) +{ + static const struct { + const char *pass; + const char *salt; + } pairs[] = { + { "password", "ATHENA.MIT.EDUraeburn" }, + { "potatoe", "WHITEHOUSE.GOVdanny" }, + { "penny", "EXAMPLE.COMbuckaroo", }, + { ESZETT, "ATHENA.MIT.EDU" JURISIC }, + { GCLEF, "EXAMPLE.COMpianist" }, + }; + int i; + + for (i = 0; i < ASIZE (pairs); i++) { + const char *p = pairs[i].pass; + const char *s = pairs[i].salt; + krb5_data pd, sd; + unsigned char key_contents[60]; + krb5_keyblock key; + krb5_error_code r; + char buf[80]; + + pd.length = strlen (p); + pd.data = (char *) p; + sd.length = strlen (s); + sd.data = (char *) s; + key.contents = key_contents; + + assert (strlen (s) + 4 < sizeof (buf)); + snprintf (buf, sizeof(buf), "\"%s\"", s); + printf ( "salt:\t%s\n\t", buf); + printhex (strlen(s), s); + snprintf (buf, sizeof(buf), "\"%s\"", p); + printf ("\npasswd:\t%s\n\t", buf); + printhex (strlen(p), p); + printf ("\n"); + r = krb5_c_string_to_key (0, enctype, &pd, &sd, &key); + printf ( "key:\t"); + printhex (key.length, key.contents); + printf ("\n\n"); + } +} + +static void test_des3_s2k () { test_s2k (ENCTYPE_DES3_CBC_SHA1); } + +static void +keyToData (krb5_keyblock *k, krb5_data *d) +{ + d->length = k->length; + d->data = k->contents; +} + +void check_error (int r, int line) { + if (r != 0) { + fprintf (stderr, "%s:%d: %s\n", __FILE__, line, + error_message (r)); + exit (1); + } +} +#define CHECK check_error(r, __LINE__) + +extern struct krb5_enc_provider krb5int_enc_des3; +struct krb5_enc_provider *enc = &krb5int_enc_des3; +extern struct krb5_enc_provider krb5int_enc_aes128, krb5int_enc_aes256; + +void DK (krb5_keyblock *out, krb5_keyblock *in, const krb5_data *usage) { + krb5_error_code r; + r = krb5_derive_key (enc, in, out, usage); + CHECK; +} + +void DR (krb5_data *out, krb5_keyblock *in, const krb5_data *usage) { + krb5_error_code r; + r = krb5_derive_random (enc, in, out, usage); + CHECK; +} + +#define KEYBYTES 21 +#define KEYLENGTH 24 + +void test_dr_dk () +{ + static const struct { + unsigned char keydata[KEYLENGTH]; + int usage_len; + unsigned char usage[8]; + } derive_tests[] = { + { + { + 0xdc, 0xe0, 0x6b, 0x1f, 0x64, 0xc8, 0x57, 0xa1, + 0x1c, 0x3d, 0xb5, 0x7c, 0x51, 0x89, 0x9b, 0x2c, + 0xc1, 0x79, 0x10, 0x08, 0xce, 0x97, 0x3b, 0x92, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, + }, + { + { + 0x5e, 0x13, 0xd3, 0x1c, 0x70, 0xef, 0x76, 0x57, + 0x46, 0x57, 0x85, 0x31, 0xcb, 0x51, 0xc1, 0x5b, + 0xf1, 0x1c, 0xa8, 0x2c, 0x97, 0xce, 0xe9, 0xf2, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, + }, + { + { + 0x98, 0xe6, 0xfd, 0x8a, 0x04, 0xa4, 0xb6, 0x85, + 0x9b, 0x75, 0xa1, 0x76, 0x54, 0x0b, 0x97, 0x52, + 0xba, 0xd3, 0xec, 0xd6, 0x10, 0xa2, 0x52, 0xbc, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, + }, + { + { + 0x62, 0x2a, 0xec, 0x25, 0xa2, 0xfe, 0x2c, 0xad, + 0x70, 0x94, 0x68, 0x0b, 0x7c, 0x64, 0x94, 0x02, + 0x80, 0x08, 0x4c, 0x1a, 0x7c, 0xec, 0x92, 0xb5, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, + }, + { + { + 0xd3, 0xf8, 0x29, 0x8c, 0xcb, 0x16, 0x64, 0x38, + 0xdc, 0xb9, 0xb9, 0x3e, 0xe5, 0xa7, 0x62, 0x92, + 0x86, 0xa4, 0x91, 0xf8, 0x38, 0xf8, 0x02, 0xfb, + }, + 8, { 'k', 'e', 'r', 'b', 'e', 'r', 'o', 's' }, + }, + { + { + 0xb5, 0x5e, 0x98, 0x34, 0x67, 0xe5, 0x51, 0xb3, + 0xe5, 0xd0, 0xe5, 0xb6, 0xc8, 0x0d, 0x45, 0x76, + 0x94, 0x23, 0xa8, 0x73, 0xdc, 0x62, 0xb3, 0x0e, + }, + 7, { 'c', 'o', 'm', 'b', 'i', 'n', 'e', }, + }, + { + { + 0xc1, 0x08, 0x16, 0x49, 0xad, 0xa7, 0x43, 0x62, + 0xe6, 0xa1, 0x45, 0x9d, 0x01, 0xdf, 0xd3, 0x0d, + 0x67, 0xc2, 0x23, 0x4c, 0x94, 0x07, 0x04, 0xda, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, + }, + { + { + 0x5d, 0x15, 0x4a, 0xf2, 0x38, 0xf4, 0x67, 0x13, + 0x15, 0x57, 0x19, 0xd5, 0x5e, 0x2f, 0x1f, 0x79, + 0x0d, 0xd6, 0x61, 0xf2, 0x79, 0xa7, 0x91, 0x7c, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, + }, + { + { + 0x79, 0x85, 0x62, 0xe0, 0x49, 0x85, 0x2f, 0x57, + 0xdc, 0x8c, 0x34, 0x3b, 0xa1, 0x7f, 0x2c, 0xa1, + 0xd9, 0x73, 0x94, 0xef, 0xc8, 0xad, 0xc4, 0x43, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, + }, + { + { + 0x26, 0xdc, 0xe3, 0x34, 0xb5, 0x45, 0x29, 0x2f, + 0x2f, 0xea, 0xb9, 0xa8, 0x70, 0x1a, 0x89, 0xa4, + 0xb9, 0x9e, 0xb9, 0x94, 0x2c, 0xec, 0xd0, 0x16, + }, + 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, + }, + }; + int i; + + for (i = 0; i < ASIZE(derive_tests); i++) { +#define D (derive_tests[i]) + krb5_keyblock key; + krb5_data usage; + + unsigned char drData[KEYBYTES]; + krb5_data dr; + unsigned char dkData[KEYLENGTH]; + krb5_keyblock dk; + + key.length = KEYLENGTH, key.contents = D.keydata; + usage.length = D.usage_len, usage.data = D.usage; + dr.length = KEYBYTES, dr.data = drData; + dk.length = KEYLENGTH, dk.contents = dkData; + + printf ("key:\t"); printkey (&key); printf ("\n"); + printf ("usage:\t"); printdata (&usage); printf ("\n"); + DR (&dr, &key, &usage); + printf ("DR:\t"); printdata (&dr); printf ("\n"); + DK (&dk, &key, &usage); + printf ("DK:\t"); printkey (&dk); printf ("\n\n"); + } +} + + +static void printd (const char *descr, krb5_data *d) { + int i, j; + const int r = 16; + + printf("%s:", descr); + + for (i = 0; i < d->length; i += r) { + printf("\n %04x: ", i); + for (j = i; j < i + r && j < d->length; j++) + printf(" %02x", 0xff & d->data[j]); + for (; j < i + r; j++) + printf(" "); + printf(" "); + for (j = i; j < i + r && j < d->length; j++) { + int c = 0xff & d->data[j]; + printf("%c", isprint(c) ? c : '.'); + } + } + printf("\n"); +} +static void printk(const char *descr, krb5_keyblock *k) { + krb5_data d; + d.data = k->contents; + d.length = k->length; + printd(descr, &d); +} + + +static void +test_pbkdf2() +{ + static struct { + int count; + char *pass; + char *salt; + } test[] = { + { 1, "password", "ATHENA.MIT.EDUraeburn" }, + { 2, "password", "ATHENA.MIT.EDUraeburn" }, + { 1200, "password", "ATHENA.MIT.EDUraeburn" }, + { 5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12" }, + { 1200, + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "pass phrase equals block size" }, + { 1200, + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "pass phrase exceeds block size" }, + { 50, "\xf0\x9d\x84\x9e", "EXAMPLE.COMpianist" }, + }; + unsigned char x[100]; + unsigned char x2[100]; + int j; + krb5_error_code err; + krb5_data d; + krb5_keyblock k, dk; + krb5_data usage, pass, salt; + + d.data = x; + dk.contents = x2; + + usage.data = "kerberos"; + usage.length = 8; + + for (j = 0; j < sizeof(test)/sizeof(test[0]); j++) { + printf("pkbdf2(count=%d, pass=\"%s\", salt=", + test[j].count, test[j].pass); + if (isprint(test[j].salt[0])) + printf("\"%s\")\n", test[j].salt); + else { + char *s = test[j].salt; + printf("0x"); + while (*s) + printf("%02X", 0xff & *s++); + printf(")\n"); + } + + d.length = 16; + pass.data = test[j].pass; + pass.length = strlen(pass.data); + salt.data = test[j].salt; + salt.length = strlen(salt.data); + err = krb5int_pbkdf2_hmac_sha1 (&d, test[j].count, &pass, &salt); + printd("128-bit PBKDF2 output", &d); + enc = &krb5int_enc_aes128; + k.contents = d.data; + k.length = d.length; + dk.length = d.length; + DK (&dk, &k, &usage); + printk("128-bit AES key",&dk); + + d.length = 32; + err = krb5int_pbkdf2_hmac_sha1 (&d, test[j].count, &pass, &salt); + printd("256-bit PBKDF2 output", &d); + enc = &krb5int_enc_aes256; + k.contents = d.data; + k.length = d.length; + dk.length = d.length; + DK (&dk, &k, &usage); + printk("256-bit AES key", &dk); + + printf("\n"); + } +} + +int main (int argc, char **argv) +{ + whoami = argv[0]; + test_nfold (); +#if 0 + test_mit_des_s2k (); + test_des3_s2k (); + test_dr_dk (); +#endif + test_pbkdf2(); + return 0; +} diff --git a/src/lib/crypto/crypto_tests/ytest.c b/src/lib/crypto/crypto_tests/ytest.c new file mode 100644 index 000000000..93fb5f25a --- /dev/null +++ b/src/lib/crypto/crypto_tests/ytest.c @@ -0,0 +1,385 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ +/* + * Yarrow - Cryptographic Pseudo-Random Number Generator + * Copyright (c) 2000 Zero-Knowledge Systems, Inc. + * + * See the accompanying LICENSE file for license information. + */ + +#include +#include +#include +#include "yarrow.h" +#include "yexcep.h" + +void hex_print( FILE* f, const char* var, void* data, size_t size ); +void dump_yarrow_state( FILE* f, Yarrow_CTX* y ); + +#define YARROW_SEED_FILE "seed" + +static void print_yarrow_status( Yarrow_CTX *y ) +{ + int sid, pool; + Source* source; + + for ( pool = 0; pool < 2; pool++ ) + { + printf( " %s: ", pool == YARROW_SLOW_POOL ? "slow" : "fast" ); + for ( sid = 0; sid < y->num_sources; sid++ ) + { + source = &y->source[ sid ]; + printf( "#%d=%d/%d, ", sid, source->entropy[pool], + pool == YARROW_SLOW_POOL ? + y->slow_thresh : y->fast_thresh ); + } + } + printf( "\n" ); +} + +int yarrow_verbose = 0; +#define VERBOSE( x ) if ( yarrow_verbose ) { x } + +int Instrumented_krb5int_yarrow_input( Yarrow_CTX* y, int sid, void* sample, + size_t size, int entropy ) +{ + int ret; + + VERBOSE( printf( "krb5int_yarrow_input( #%d, %d bits, %s ) = [", sid, entropy, + y->source[sid].pool == + YARROW_SLOW_POOL ? "slow" : "fast" ); ); + ret = krb5int_yarrow_input( y, sid, sample, size, entropy ); + + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + VERBOSE( print_yarrow_status( y ); ); + return (ret); +} + +typedef int (*test_fn)( void ); + +int test_1( void ); +int test_2( void ); +int test_3( void ); +int test_4( void ); + +test_fn test_func[] = +{ + test_1, test_2, test_3, test_4 +}; + +#define num_tests ( sizeof(test_func) / sizeof(test_fn) ) + +int do_test( int t ) +{ + EXCEP_DECL; + int ret; + + printf( "doing test %d ... ", t ); fflush( stdout ); + ret = test_func[ t-1 ](); + VERBOSE( printf( "\ndone test %d ", t ); ); + printf( "[%s]\n", krb5int_yarrow_str_error( ret ) ); fflush( stdout ); + THROW( ret ); + + CATCH: + THROW( EXCEP_BOOL ); + EXCEP_RET; +} + +int main( int argc, char* argv[] ) +{ + EXCEP_DECL; + int test = 0; + char** argvp; + char* arg; + char* conv_ok = NULL; + int ok = YARROW_OK; + int done_some_tests = 0; + int i; + int ret; + + for ( argvp = argv+1, i = 1; i < argc; i++, argvp++ ) + { + arg = *argvp; + if ( arg[0] == '-' ) + { + switch ( arg[1] ) + { + case 'v': yarrow_verbose = 1; continue; + default: fprintf( stderr, "usage: test [-v] [[test] ... ]\n" ); + THROW( YARROW_FAIL ); + } + } + conv_ok = NULL; + test = strtoul( arg, &conv_ok, 10 ); + if ( !conv_ok || test < 1 || test > num_tests ) + { + fprintf( stderr, "usage: test [-v] [[test] ... ]\n" ); + THROW( YARROW_FAIL ); + } + else + { + ret = do_test( test ); + if ( ok ) { ok = ret; } + done_some_tests = 1; + } + } + + if ( !done_some_tests ) + { + for ( i = 1; i <= num_tests; i++ ) + { + ret = do_test( i ); + if ( ok ) { ok = ret; } + } + } + THROW( ok ); + + CATCH: + switch (EXCEPTION) + { + case YARROW_OK: + exit (EXIT_SUCCESS); + default: + exit (EXIT_FAILURE); + } +} + +int test_1( void ) +{ + EXCEP_DECL; + +#if defined(YARROW_HASH_SHA1) + VERBOSE( printf( "\nsha1 test\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#elif defined(YARROW_MD5) + VERBOSE( printf( "\nmd5 test\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#else + VERBOSE( printf( "\nunknown hash function\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#endif + CATCH: + EXCEP_RET; +} + +int test_2( void ) +{ + EXCEP_DECL; + +#if defined(YARROW_CIPHER_3DES) + VERBOSE( printf( "\n3des test\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#elif defined(YARROW_CIPHER_BLOWFISH) + VERBOSE( printf( "\nblowfish test\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#elif defined(YARROW_CIPHER_IDEA) + VERBOSE( printf( "\nidea test\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#else + VERBOSE( printf( "\nunknown encryption function\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#endif + CATCH: + EXCEP_RET; +} + +int test_3( void ) +{ + EXCEP_DECL; + +#if !defined(YARROW_CIPHER_3DES) || !defined(YARROW_HASH_SHA1) + VERBOSE( printf( "\nnot Yarrow-SHA1-3DES (aka Yarrow-160)\n\n" ); ); + THROW( YARROW_NOT_IMPL ); +#endif + + VERBOSE( printf( "\nkrb5int_yarrow_stretch\n\n" ); ); + THROW( YARROW_NOT_IMPL ); + + CATCH: + EXCEP_RET; +} + +int test_4( void ) +{ + EXCEP_DECL; + Yarrow_CTX yarrow; + int initialized = 0; + unsigned user, mouse, keyboard; + int i, ret; + byte user_sample[ 20 ]; + byte mouse_sample[ 4 ]; + byte keyboard_sample[ 2 ]; + byte random[ 30 ]; + byte junk[ 48 ]; + + memset( user_sample, 3, sizeof( user_sample ) ); + memset( mouse_sample, 1, sizeof( mouse_sample ) ); + memset( keyboard_sample, 2, sizeof( keyboard_sample ) ); + + VERBOSE( printf( "\nGeneral workout test\n\n" ); ) + + VERBOSE( printf( "krb5int_yarrow_init() = [" ); ); + ret = krb5int_yarrow_init( &yarrow, YARROW_SEED_FILE ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + + if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) { THROW( ret ); } + initialized = 1; + +#if defined( YARROW_DEBUG ) + dump_yarrow_state( stdout, &yarrow ); +#endif + + ret = krb5int_yarrow_new_source( &yarrow, &user ); + VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", + krb5int_yarrow_str_error( ret ) ); ); + if ( ret != YARROW_OK ) { THROW( ret ); } + + VERBOSE( printf( "Yarrow_Poll( #%d ) = [", user ); ); + ret = Yarrow_Poll( &yarrow, user ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + + ret = krb5int_yarrow_new_source( &yarrow, &mouse ); + VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", + krb5int_yarrow_str_error( ret ) ); ); + if ( ret != YARROW_OK ) { THROW( ret ); } + + ret = krb5int_yarrow_new_source( &yarrow, &keyboard ); + VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", + krb5int_yarrow_str_error( ret ) ); ); + if ( ret != YARROW_OK ) { THROW( ret ); } + +/* prematurely try to draw output, to check failure when no + * seed file, or state saving turned off + */ + + VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( random ) ); ); + ret = krb5int_yarrow_output( &yarrow, random, sizeof( random ) ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + +/* do it twice so that we some slow samples + * (first sample goes to fast pool, and then samples alternate) + */ + + for ( i = 0; i < 2; i++ ) + { + TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, mouse_sample, + sizeof( mouse_sample ), 2 ) ); + + TRY( Instrumented_krb5int_yarrow_input( &yarrow, keyboard, keyboard_sample, + sizeof( keyboard_sample ), 2 ) ); + + TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, user_sample, + sizeof( user_sample ), 2 ) ); + } + +#if defined( YARROW_DEBUG ) + dump_yarrow_state( stdout, &yarrow ); +#endif + + VERBOSE( printf( "\nInduce user source (#%d) to reach " + "slow threshold\n\n", user ); ); + + /* induce fast reseed */ + + for ( i = 0; i < 7; i++ ) + { + TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, user_sample, + sizeof( user_sample ), + sizeof( user_sample ) * 3 ) ); + } + + VERBOSE( printf( "\nInduce mouse source (#%d) to reach " + "slow threshold reseed\n\n", mouse ); ); + + /* induce slow reseed, by triggering a second source to reach it's + threshold */ + + for ( i = 0; i < 40; i++ ) + { + TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, mouse_sample, + sizeof( mouse_sample ), + sizeof( mouse_sample )*2 ) ); + } + + VERBOSE( printf( "\nProduce some output\n\n" ); ); + + for ( i = 0; i < 30; i++ ) + { + VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( junk ) ); ); + ret = krb5int_yarrow_output( &yarrow, junk, sizeof( junk ) ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + if ( ret != YARROW_OK ) { THROW( ret ); } + } + + memset( junk, 0, sizeof( junk ) ); + + VERBOSE( printf( "\nTrigger some fast and slow reseeds\n\n" ); ); + + for ( i = 0; i < 30; i++ ) + { + /* odd input to a different source so there are some slow reseeds */ + + if ( i % 16 == 0 ) + { + TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, junk, + sizeof( junk ), + sizeof( junk ) * 3 ) ); + } + else + { + TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, junk, + sizeof( junk ), + sizeof( junk ) * 3 ) ); + } + } + + VERBOSE( printf( "\nPrint some random output\n\n" ); ); + + VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( random ) ); ); + ret = krb5int_yarrow_output( &yarrow, random, sizeof( random ) ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + if ( ret != YARROW_OK ) + { + THROW( ret ); + } + else + { + VERBOSE( hex_print( stdout, "random", random, sizeof( random ) ); ); + } + + VERBOSE( printf( "\nClose down Yarrow\n\n" ); ); + + CATCH: + if ( initialized ) + { + VERBOSE( printf( "krb5int_yarrow_final() = [" ); ); + ret = krb5int_yarrow_final( &yarrow ); + VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); + THROW( ret ); + } + EXCEP_RET; +} + +void hex_print( FILE* f, const char* var, void* data, size_t size ) +{ + const char* conv = "0123456789abcdef"; + size_t i; + char* p = (char*) data; + char c, d; + + fprintf( f, var ); + fprintf( f, " = " ); + for ( i = 0; i < size; i++ ) + { + c = conv[ (p[ i ] >> 4) & 0xf ]; + d = conv[ p[ i ] & 0xf ]; + fprintf( f, "%c%c", c, d ); + } + fprintf( f, "\n" ); +} + +void dump_yarrow_state( FILE* f, Yarrow_CTX* y ) +{ + fprintf( f, "===Yarrow State===\n" ); + hex_print( f, "C", y->C, sizeof( y->C ) ); + hex_print( f, "K", y->K, sizeof( y->K ) ); +} diff --git a/src/lib/crypto/decrypt.c b/src/lib/crypto/decrypt.c deleted file mode 100644 index 74c38f6aa..000000000 --- a/src/lib/crypto/decrypt.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, - krb5_keyusage usage, const krb5_data *ivec, - const krb5_enc_data *input, krb5_data *output) -{ - int i; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) { - krb5int_set_error(&context->err, KRB5_BAD_ENCTYPE, - "Bad encryption type (type %d unknown)", - key->enctype); - return(KRB5_BAD_ENCTYPE); - } - - if ((input->enctype != ENCTYPE_UNKNOWN) && - (krb5_enctypes_list[i].etype != input->enctype)) - return(KRB5_BAD_ENCTYPE); - - if (krb5_enctypes_list[i].decrypt == NULL) { - assert(krb5_enctypes_list[i].aead != NULL); - - return krb5int_c_decrypt_aead_compat(krb5_enctypes_list[i].aead, - krb5_enctypes_list[i].enc, - krb5_enctypes_list[i].hash, - key, usage, ivec, - &input->ciphertext, output); - } - - return((*(krb5_enctypes_list[i].decrypt)) - (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, - key, usage, ivec, &input->ciphertext, output)); -} diff --git a/src/lib/crypto/decrypt_iov.c b/src/lib/crypto/decrypt_iov.c deleted file mode 100644 index 1a98b0657..000000000 --- a/src/lib/crypto/decrypt_iov.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * lib/crypto/encrypt_iov.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_decrypt_iov(krb5_context context, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *cipher_state, - krb5_crypto_iov *data, - size_t num_data) -{ - int i; - const struct krb5_keytypes *ktp = NULL; - - for (i = 0; i < krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == key->enctype) { - ktp = &krb5_enctypes_list[i]; - break; - } - } - - if (ktp == NULL || ktp->aead == NULL) { - return KRB5_BAD_ENCTYPE; - } - - if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { - return krb5int_c_iov_decrypt_stream(ktp->aead, ktp->enc, ktp->hash, - key, usage, cipher_state, data, num_data); - } - - return ktp->aead->decrypt_iov(ktp->aead, ktp->enc, ktp->hash, - key, usage, cipher_state, data, num_data); -} - diff --git a/src/lib/crypto/default_state.c b/src/lib/crypto/default_state.c deleted file mode 100644 index 33a189f26..000000000 --- a/src/lib/crypto/default_state.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2001 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * Section 6 (Encryption) of the Kerberos revisions document defines - * cipher states to be used to chain encryptions and decryptions - * together. Examples of cipher states include initialization vectors - * for CBC encription. Most Kerberos encryption systems can share - * code for initializing and freeing cipher states. This file - * contains that default code. - */ - -#include "k5-int.h" - -krb5_error_code krb5int_des_init_state -(const krb5_keyblock *key, krb5_keyusage usage, krb5_data *new_state ) -{ - new_state->length = 8; - new_state->data = (void *) malloc(8); - if (new_state->data) { - memset (new_state->data, 0, new_state->length); - /* We need to copy in the key for des-cbc-cr--ick, but that's how it works*/ - if (key->enctype == ENCTYPE_DES_CBC_CRC) { - memcpy (new_state->data, key->contents, new_state->length); - } - } else { - return ENOMEM; - } - return 0; -} - -krb5_error_code krb5int_default_free_state -(krb5_data *state) -{ - if (state->data) { - free (state->data); - state-> data = NULL; - state->length = 0; - } - return 0; -} - - - diff --git a/src/lib/crypto/deps b/src/lib/crypto/deps index b53a47d83..2feac3c9d 100644 --- a/src/lib/crypto/deps +++ b/src/lib/crypto/deps @@ -1,525 +1 @@ -# -# Generated makefile dependencies follow. -# -aead.so aead.po $(OUTPRE)aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/dk/dk.h aead.c aead.h cksumtypes.h etypes.h -block_size.so block_size.po $(OUTPRE)block_size.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h block_size.c etypes.h -checksum_length.so checksum_length.po $(OUTPRE)checksum_length.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h checksum_length.c \ - cksumtypes.h -cksumtype_to_string.so cksumtype_to_string.po $(OUTPRE)cksumtype_to_string.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtype_to_string.c \ - cksumtypes.h -cksumtypes.so cksumtypes.po $(OUTPRE)cksumtypes.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/hash_provider/hash_provider.h \ - $(srcdir)/keyhash_provider/keyhash_provider.h cksumtypes.c \ - cksumtypes.h -coll_proof_cksum.so coll_proof_cksum.po $(OUTPRE)coll_proof_cksum.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h coll_proof_cksum.c -combine_keys.so combine_keys.po $(OUTPRE)combine_keys.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/dk/dk.h \ - combine_keys.c etypes.h -crypto_length.so crypto_length.po $(OUTPRE)crypto_length.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ - crypto_length.c etypes.h -crypto_libinit.so crypto_libinit.po $(OUTPRE)crypto_libinit.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h crypto_libinit.c -default_state.so default_state.po $(OUTPRE)default_state.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h default_state.c -decrypt.so decrypt.po $(OUTPRE)decrypt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - aead.h cksumtypes.h decrypt.c etypes.h -decrypt_iov.so decrypt_iov.po $(OUTPRE)decrypt_iov.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ - decrypt_iov.c etypes.h -encrypt.so encrypt.po $(OUTPRE)encrypt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - aead.h cksumtypes.h encrypt.c etypes.h -encrypt_iov.so encrypt_iov.po $(OUTPRE)encrypt_iov.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h encrypt_iov.c etypes.h -encrypt_length.so encrypt_length.po $(OUTPRE)encrypt_length.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ - encrypt_length.c etypes.h -enctype_compare.so enctype_compare.po $(OUTPRE)enctype_compare.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h enctype_compare.c \ - etypes.h -enctype_to_string.so enctype_to_string.po $(OUTPRE)enctype_to_string.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h enctype_to_string.c \ - etypes.h -etypes.so etypes.po $(OUTPRE)etypes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/aes/aes_s2k.h $(srcdir)/arcfour/arcfour.h \ - $(srcdir)/des/des_int.h $(srcdir)/dk/dk.h $(srcdir)/enc_provider/enc_provider.h \ - $(srcdir)/hash_provider/hash_provider.h $(srcdir)/old/old.h \ - $(srcdir)/raw/raw.h etypes.c etypes.h -hmac.so hmac.po $(OUTPRE)hmac.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - aead.h cksumtypes.h hmac.c -keyblocks.so keyblocks.po $(OUTPRE)keyblocks.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h keyblocks.c -keyed_cksum.so keyed_cksum.po $(OUTPRE)keyed_cksum.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h keyed_cksum.c -keyed_checksum_types.so keyed_checksum_types.po $(OUTPRE)keyed_checksum_types.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h etypes.h \ - keyed_checksum_types.c -keylengths.so keylengths.po $(OUTPRE)keylengths.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h keylengths.c -make_checksum.so make_checksum.po $(OUTPRE)make_checksum.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/dk/dk.h \ - cksumtypes.h etypes.h make_checksum.c -make_checksum_iov.so make_checksum_iov.po $(OUTPRE)make_checksum_iov.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ - make_checksum_iov.c -make_random_key.so make_random_key.po $(OUTPRE)make_random_key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h make_random_key.c -mandatory_sumtype.so mandatory_sumtype.po $(OUTPRE)mandatory_sumtype.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h mandatory_sumtype.c -nfold.so nfold.po $(OUTPRE)nfold.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - nfold.c -old_api_glue.so old_api_glue.po $(OUTPRE)old_api_glue.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h old_api_glue.c -pbkdf2.so pbkdf2.po $(OUTPRE)pbkdf2.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/hash_provider/hash_provider.h pbkdf2.c -prf.so prf.po $(OUTPRE)prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - etypes.h prf.c -cf2.so cf2.po $(OUTPRE)cf2.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - cf2.c etypes.h -prng.so prng.po $(OUTPRE)prng.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/enc_provider/enc_provider.h $(srcdir)/sha1/shs.h \ - $(srcdir)/yarrow/yarrow.h $(srcdir)/yarrow/ycipher.h \ - $(srcdir)/yarrow/yhash.h $(srcdir)/yarrow/ytypes.h \ - prng.c -random_to_key.so random_to_key.po $(OUTPRE)random_to_key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h random_to_key.c -state.so state.po $(OUTPRE)state.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - etypes.h state.c -string_to_cksumtype.so string_to_cksumtype.po $(OUTPRE)string_to_cksumtype.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h string_to_cksumtype.c -string_to_enctype.so string_to_enctype.po $(OUTPRE)string_to_enctype.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h string_to_enctype.c -string_to_key.so string_to_key.po $(OUTPRE)string_to_key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h string_to_key.c -valid_cksumtype.so valid_cksumtype.po $(OUTPRE)valid_cksumtype.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h valid_cksumtype.c -valid_enctype.so valid_enctype.po $(OUTPRE)valid_enctype.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h valid_enctype.c -verify_checksum.so verify_checksum.po $(OUTPRE)verify_checksum.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h cksumtypes.h verify_checksum.c -verify_checksum_iov.so verify_checksum_iov.po $(OUTPRE)verify_checksum_iov.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ - verify_checksum_iov.c -t_nfold.so t_nfold.po $(OUTPRE)t_nfold.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - t_nfold.c -t_cf2.so t_cf2.po $(OUTPRE)t_cf2.$(OBJEXT): $(BUILDTOP)/include/krb5/krb5.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/krb5.h t_cf2.c -t_encrypt.so t_encrypt.po $(OUTPRE)t_encrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h etypes.h t_encrypt.c -t_prf.so t_prf.po $(OUTPRE)t_prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - t_prf.c -t_prng.so t_prng.po $(OUTPRE)t_prng.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - t_prng.c -t_hmac.so t_hmac.po $(OUTPRE)t_hmac.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/hash_provider/hash_provider.h t_hmac.c -t_pkcs5.so t_pkcs5.po $(OUTPRE)t_pkcs5.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - t_pkcs5.c -t_cts.so t_cts.po $(OUTPRE)t_cts.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/hash_provider/hash_provider.h t_cts.c -vectors.so vectors.po $(OUTPRE)vectors.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/hash_provider/hash_provider.h vectors.c +# No dependencies here. diff --git a/src/lib/crypto/des/ISSUES b/src/lib/crypto/des/ISSUES deleted file mode 100644 index 412f94aa7..000000000 --- a/src/lib/crypto/des/ISSUES +++ /dev/null @@ -1,13 +0,0 @@ -Issues to be addressed for src/lib/crypto/des: -*- text -*- - - -"const" could be used in more places - - -Array types are used in calling interfaces. Under ANSI C, a value of -type "arraytype *" cannot be assigned to a variable of type "const -arraytype *", so we get compilation warnings. - -Possible fix: Rewrite internal interfaces to not use arrays this way. -Provide external routines compatible with old API, but not using -const? diff --git a/src/lib/crypto/des/Makefile.in b/src/lib/crypto/des/Makefile.in deleted file mode 100644 index ef700a74d..000000000 --- a/src/lib/crypto/des/Makefile.in +++ /dev/null @@ -1,104 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/des -mydir=lib/crypto/des -BUILDTOP=$(REL)..$(S)..$(S).. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=des -##DOS##OBJFILE=..\$(OUTPRE)des.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS=\ - afsstring2key.o \ - d3_cbc.o \ - d3_aead.o \ - d3_kysched.o \ - des_prf.o \ - f_aead.o \ - f_cbc.o \ - f_cksum.o \ - f_parity.o \ - f_sched.o \ - f_tables.o \ - key_sched.o \ - string2key.o \ - weak_key.o - -OBJS= $(OUTPRE)afsstring2key.$(OBJEXT) \ - $(OUTPRE)d3_cbc.$(OBJEXT) \ - $(OUTPRE)d3_aead.$(OBJEXT) \ - $(OUTPRE)d3_kysched.$(OBJEXT) \ - $(OUTPRE)des_prf.$(OBJEXT) \ - $(OUTPRE)f_aead.$(OBJEXT) \ - $(OUTPRE)f_cbc.$(OBJEXT) \ - $(OUTPRE)f_cksum.$(OBJEXT) \ - $(OUTPRE)f_parity.$(OBJEXT) \ - $(OUTPRE)f_sched.$(OBJEXT) \ - $(OUTPRE)f_tables.$(OBJEXT) \ - $(OUTPRE)key_sched.$(OBJEXT) \ - $(OUTPRE)string2key.$(OBJEXT) \ - $(OUTPRE)weak_key.$(OBJEXT) - -SRCS= $(srcdir)/afsstring2key.c \ - $(srcdir)/d3_cbc.c \ - $(srcdir)/d3_aead.c \ - $(srcdir)/d3_kysched.c \ - $(srcdir)/des_prf.c \ - $(srcdir)/f_aead.c \ - $(srcdir)/f_cbc.c \ - $(srcdir)/f_cksum.c \ - $(srcdir)/f_parity.c \ - $(srcdir)/f_sched.c \ - $(srcdir)/f_tables.c \ - $(srcdir)/key_sched.c \ - $(srcdir)/weak_key.c \ - $(srcdir)/string2key.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -TOBJS = $(OUTPRE)key_sched.$(OBJEXT) $(OUTPRE)f_sched.$(OBJEXT) $(OUTPRE)f_cbc.$(OBJEXT) \ - $(OUTPRE)f_tables.$(OBJEXT) $(OUTPRE)f_cksum.$(OBJEXT) - -verify$(EXEEXT): t_verify.$(OBJEXT) $(TOBJS) f_parity.$(OBJEXT) \ - $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ t_verify.$(OBJEXT) $(TOBJS) f_parity.$(OBJEXT) \ - -lcom_err $(SUPPORT_LIB) - -destest$(EXEEXT): destest.$(OBJEXT) $(TOBJS) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ destest.$(OBJEXT) $(TOBJS) $(SUPPORT_LIB) - -TAFSS2KOBJS = \ - t_afss2k.$(OBJEXT) $(TOBJS) \ - afsstring2key.$(OBJEXT) f_parity.$(OBJEXT) weak_key.$(OBJEXT) - -t_afss2k$(EXEEXT): $(TAFSS2KOBJS) $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB) - $(CC_LINK) -o $@ $(TAFSS2KOBJS) -lcom_err $(SUPPORT_LIB) - -check-unix:: verify destest t_afss2k - $(RUN_SETUP) $(VALGRIND) ./verify -z - $(RUN_SETUP) $(VALGRIND) ./verify -m - $(RUN_SETUP) $(VALGRIND) ./verify - $(RUN_SETUP) $(VALGRIND) ./destest < $(srcdir)/keytest.data - $(RUN_SETUP) $(VALGRIND) ./t_afss2k - -check-windows:: - -clean:: - $(RM) destest$(EXEEXT) verify$(EXEEXT) destest.$(OBJEXT) \ - t_verify.$(OBJEXT) t_afss2k.$(OBJEXT) t_afss2k$(EXEEXT) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/des/afsstring2key.c b/src/lib/crypto/des/afsstring2key.c deleted file mode 100644 index eb6c37f33..000000000 --- a/src/lib/crypto/des/afsstring2key.c +++ /dev/null @@ -1,570 +0,0 @@ -/* - * lib/crypto/des/string2key.c - * - * based on lib/crypto/des/string2key.c from MIT V5 - * and on lib/des/afs_string_to_key.c from UMD. - * constructed by Mark Eichin, Cygnus Support, 1995. - * made thread-safe by Ken Raeburn, MIT, 2001. - */ - -/* - * Copyright 2001 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include - -#define afs_crypt mit_afs_crypt -char *afs_crypt (const char *, const char *, char *); - -#undef min -#define min(a,b) ((a)>(b)?(b):(a)) - -krb5_error_code -mit_afs_string_to_key (krb5_keyblock *keyblock, const krb5_data *data, - const krb5_data *salt) -{ - /* totally different approach from MIT string2key. */ - /* much of the work has already been done by the only caller - which is mit_des_string_to_key; in particular, *keyblock is already - set up. */ - - char *realm = salt->data; - unsigned int i, j; - krb5_octet *key = keyblock->contents; - - if (data->length <= 8) { - /* One block only. Run afs_crypt and use the first eight - returned bytes after the copy of the (fixed) salt. - - Since the returned bytes are alphanumeric, the output is - limited to 2**48 possibilities; for each byte, only 64 - possible values can be used. */ - unsigned char password[9]; /* trailing nul for crypt() */ - char afs_crypt_buf[16]; - - memset (password, 0, sizeof (password)); - memcpy (password, realm, min (salt->length, 8)); - for (i=0; i<8; i++) - if (isupper(password[i])) - password[i] = tolower(password[i]); - for (i=0; ilength; i++) - password[i] ^= data->data[i]; - for (i=0; i<8; i++) - if (password[i] == '\0') - password[i] = 'X'; - password[8] = '\0'; - /* Out-of-bounds salt characters are equivalent to a salt string - of "p1". */ - strncpy((char *) key, - (char *) afs_crypt((char *) password, "#~", afs_crypt_buf) + 2, - 8); - for (i=0; i<8; i++) - key[i] <<= 1; - /* now fix up key parity again */ - mit_des_fixup_key_parity(key); - /* clean & free the input string */ - memset(password, 0, (size_t) sizeof(password)); - } else { - /* Multiple blocks. Do a CBC checksum, twice, and use the - result as the new key. */ - mit_des_cblock ikey, tkey; - mit_des_key_schedule key_sked; - unsigned int pw_len = salt->length+data->length; - unsigned char *password = malloc(pw_len+1); - if (!password) return ENOMEM; - - /* Some bound checks from the original code are elided here as - the malloc above makes sure we have enough storage. */ - memcpy (password, data->data, data->length); - for (i=data->length, j = 0; j < salt->length; i++, j++) { - password[i] = realm[j]; - if (isupper(password[i])) - password[i] = tolower(password[i]); - } - - memcpy (ikey, "kerberos", sizeof(ikey)); - memcpy (tkey, ikey, sizeof(tkey)); - mit_des_fixup_key_parity (tkey); - (void) mit_des_key_sched (tkey, key_sked); - (void) mit_des_cbc_cksum (password, tkey, i, key_sked, ikey); - - memcpy (ikey, tkey, sizeof(ikey)); - mit_des_fixup_key_parity (tkey); - (void) mit_des_key_sched (tkey, key_sked); - (void) mit_des_cbc_cksum (password, key, i, key_sked, ikey); - - /* erase key_sked */ - memset(key_sked, 0,sizeof(key_sked)); - - /* now fix up key parity again */ - mit_des_fixup_key_parity(key); - - /* clean & free the input string */ - memset(password, 0, (size_t) pw_len); - free(password); - } -#if 0 - /* must free here because it was copied for this special case */ - free(salt->data); -#endif - return 0; -} - - -/* Portions of this code: - Copyright 1989 by the Massachusetts Institute of Technology - */ - -/* - * Copyright (c) 1990 Regents of The University of Michigan. - * 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 appears in all - * copies and that both that copyright notice and this permission - * notice appear in supporting documentation, and that the name of - * The University of Michigan not be used in advertising or - * publicity pertaining to distribution of the software without - * specific, written prior permission. This software is supplied as - * is without expressed or implied warranties of any kind. - * - * ITD Research Systems - * University of Michigan - * 535 W. William Street - * Ann Arbor, Michigan - * +1-313-936-2652 - * netatalk@terminator.cc.umich.edu - */ - -static void krb5_afs_crypt_setkey (char*, char*, char(*)[48]); -static void krb5_afs_encrypt (char*,char*,char (*)[48]); - -/* - * Initial permutation, - */ -static const char IP[] = { - 58,50,42,34,26,18,10, 2, - 60,52,44,36,28,20,12, 4, - 62,54,46,38,30,22,14, 6, - 64,56,48,40,32,24,16, 8, - 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, -}; - -/* - * Final permutation, FP = IP^(-1) - */ -static const char FP[] = { - 40, 8,48,16,56,24,64,32, - 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, -}; - -/* - * Permuted-choice 1 from the key bits to yield C and D. - * Note that bits 8,16... are left out: They are intended for a parity check. - */ -static const char PC1_C[] = { - 57,49,41,33,25,17, 9, - 1,58,50,42,34,26,18, - 10, 2,59,51,43,35,27, - 19,11, 3,60,52,44,36, -}; - -static const char PC1_D[] = { - 63,55,47,39,31,23,15, - 7,62,54,46,38,30,22, - 14, 6,61,53,45,37,29, - 21,13, 5,28,20,12, 4, -}; - -/* - * Sequence of shifts used for the key schedule. - */ -static const char shifts[] = { - 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1, -}; - -/* - * Permuted-choice 2, to pick out the bits from - * the CD array that generate the key schedule. - */ -static const char PC2_C[] = { - 14,17,11,24, 1, 5, - 3,28,15, 6,21,10, - 23,19,12, 4,26, 8, - 16, 7,27,20,13, 2, -}; - -static const char PC2_D[] = { - 41,52,31,37,47,55, - 30,40,51,45,33,48, - 44,49,39,56,34,53, - 46,42,50,36,29,32, -}; - -/* - * The E bit-selection table. - */ -static const char e[] = { - 32, 1, 2, 3, 4, 5, - 4, 5, 6, 7, 8, 9, - 8, 9,10,11,12,13, - 12,13,14,15,16,17, - 16,17,18,19,20,21, - 20,21,22,23,24,25, - 24,25,26,27,28,29, - 28,29,30,31,32, 1, -}; - -/* - * P is a permutation on the selected combination - * of the current L and key. - */ -static const char P[] = { - 16, 7,20,21, - 29,12,28,17, - 1,15,23,26, - 5,18,31,10, - 2, 8,24,14, - 32,27, 3, 9, - 19,13,30, 6, - 22,11, 4,25, -}; - -/* - * The 8 selection functions. - * For some reason, they give a 0-origin - * index, unlike everything else. - */ -static const char S[8][64] = { - {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}, - - {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}, - - {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}, - - { 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}, - - { 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}, - - {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}, - - { 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}, - - {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}, -}; - - -char *afs_crypt(const char *pw, const char *salt, - /* must be at least 16 bytes */ - char *iobuf) -{ - int i, j, c; - int temp; - char block[66]; - char E[48]; - /* - * The key schedule. - * Generated from the key. - */ - char KS[16][48]; - - for(i=0; i<66; i++) - block[i] = 0; - for(i=0; (c= *pw) && i<64; pw++){ - for(j=0; j<7; j++, i++) - block[i] = (c>>(6-j)) & 01; - i++; - } - - krb5_afs_crypt_setkey(block, E, KS); - - for(i=0; i<66; i++) - block[i] = 0; - - for(i=0;i<2;i++){ - c = *salt++; - iobuf[i] = c; - if(c>'Z') c -= 6; - if(c>'9') c -= 7; - c -= '.'; - for(j=0;j<6;j++){ - if((c>>j) & 01){ - temp = E[6*i+j]; - E[6*i+j] = E[6*i+j+24]; - E[6*i+j+24] = temp; - } - } - } - - for(i=0; i<25; i++) - krb5_afs_encrypt(block,E,KS); - - for(i=0; i<11; i++){ - c = 0; - for(j=0; j<6; j++){ - c <<= 1; - c |= block[6*i+j]; - } - c += '.'; - if(c>'9') c += 7; - if(c>'Z') c += 6; - iobuf[i+2] = c; - } - iobuf[i+2] = 0; - if(iobuf[1]==0) - iobuf[1] = iobuf[0]; - return(iobuf); -} - -/* - * Set up the key schedule from the key. - */ - -static void krb5_afs_crypt_setkey(char *key, char *E, char (*KS)[48]) -{ - register int i, j, k; - int t; - /* - * The C and D arrays used to calculate the key schedule. - */ - char C[28], D[28]; - - /* - * First, generate C and D by permuting - * the key. The low order bit of each - * 8-bit char is not used, so C and D are only 28 - * bits apiece. - */ - for (i=0; i<28; i++) { - C[i] = key[PC1_C[i]-1]; - D[i] = key[PC1_D[i]-1]; - } - /* - * To generate Ki, rotate C and D according - * to schedule and pick up a permutation - * using PC2. - */ - for (i=0; i<16; i++) { - /* - * rotate. - */ - for (k=0; k>3)&01; - f[t+1] = (k>>2)&01; - f[t+2] = (k>>1)&01; - f[t+3] = (k>>0)&01; - } - /* - * The new R is L ^ f(R, K). - * The f here has to be permuted first, though. - */ - for (j=0; j<32; j++) - R[j] = L[j] ^ f[P[j]-1]; - /* - * Finally, the new L (the original R) - * is copied back. - */ -#if 0 - for (j=0; j<32; j++) - L[j] = tempL[j]; -#else - memcpy(L, tempL, 32); -#endif - } - /* - * The output L and R are reversed. - */ - for (j=0; j<32; j++) { - t = L[j]; - L[j] = R[j]; - R[j] = t; - } - /* - * The final output - * gets the inverse permutation of the very original. - */ - for (j=0; j<64; j++) - block[j] = L[FP[j]-1]; -} diff --git a/src/lib/crypto/des/d3_aead.c b/src/lib/crypto/des/d3_aead.c deleted file mode 100644 index 42ac395f3..000000000 --- a/src/lib/crypto/des/d3_aead.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (C) 2008 by the Massachusetts Institute of Technology. - * Copyright 1995 by Richard P. Basch. All Rights Reserved. - * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Richard P. Basch, - * Lehman Brothers and M.I.T. make no representations about the suitability - * of this software for any purpose. It is provided "as is" without - * express or implied warranty. - */ - -#include "des_int.h" -#include "f_tables.h" -#include "../aead.h" - -void -krb5int_des3_cbc_encrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp1, *kp2, *kp3; - const unsigned char *ip; - unsigned char *op; - struct iov_block_state input_pos, output_pos; - unsigned char iblock[MIT_DES_BLOCK_LENGTH]; - unsigned char oblock[MIT_DES_BLOCK_LENGTH]; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp1 = (const unsigned DES_INT32 *)ks1; - kp2 = (const unsigned DES_INT32 *)ks2; - kp3 = (const unsigned DES_INT32 *)ks3; - - /* - * Initialize left and right with the contents of the initial - * vector. - */ - if (ivec != NULL) - ip = ivec; - else - ip = mit_des_zeroblock; - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - - /* - * Suitably initialized, now work the length down 8 bytes - * at a time. - */ - for (;;) { - unsigned DES_INT32 temp; - - ip = iblock; - op = oblock; - - if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) - break; - - if (input_pos.iov_pos == num_data) - break; - - GET_HALF_BLOCK(temp, ip); - left ^= temp; - GET_HALF_BLOCK(temp, ip); - right ^= temp; - - /* - * Encrypt what we have - */ - DES_DO_ENCRYPT(left, right, kp1); - DES_DO_DECRYPT(left, right, kp2); - DES_DO_ENCRYPT(left, right, kp3); - - /* - * Copy the results out - */ - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - - krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); - } - - if (ivec != NULL) - memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); -} - -void -krb5int_des3_cbc_decrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp1, *kp2, *kp3; - const unsigned char *ip; - unsigned DES_INT32 ocipherl, ocipherr; - unsigned DES_INT32 cipherl, cipherr; - unsigned char *op; - struct iov_block_state input_pos, output_pos; - unsigned char iblock[MIT_DES_BLOCK_LENGTH]; - unsigned char oblock[MIT_DES_BLOCK_LENGTH]; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp1 = (const unsigned DES_INT32 *)ks1; - kp2 = (const unsigned DES_INT32 *)ks2; - kp3 = (const unsigned DES_INT32 *)ks3; - - /* - * Decrypting is harder than encrypting because of - * the necessity of remembering a lot more things. - * Should think about this a little more... - */ - - if (num_data == 0) - return; - - /* - * Prime the old cipher with ivec. - */ - if (ivec != NULL) - ip = ivec; - else - ip = mit_des_zeroblock; - GET_HALF_BLOCK(ocipherl, ip); - GET_HALF_BLOCK(ocipherr, ip); - - /* - * Now do this in earnest until we run out of length. - */ - for (;;) { - /* - * Read a block from the input into left and - * right. Save this cipher block for later. - */ - - if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) - break; - - if (input_pos.iov_pos == num_data) - break; - - ip = iblock; - op = oblock; - - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - cipherl = left; - cipherr = right; - - /* - * Decrypt this. - */ - DES_DO_DECRYPT(left, right, kp3); - DES_DO_ENCRYPT(left, right, kp2); - DES_DO_DECRYPT(left, right, kp1); - - /* - * Xor with the old cipher to get plain - * text. Output 8 or less bytes of this. - */ - left ^= ocipherl; - right ^= ocipherr; - - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - - /* - * Save current cipher block here - */ - ocipherl = cipherl; - ocipherr = cipherr; - - krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); - } - - if (ivec != NULL) { - op = ivec; - PUT_HALF_BLOCK(ocipherl,op); - PUT_HALF_BLOCK(ocipherr, op); - } -} diff --git a/src/lib/crypto/des/d3_cbc.c b/src/lib/crypto/des/d3_cbc.c deleted file mode 100644 index 077e78d2c..000000000 --- a/src/lib/crypto/des/d3_cbc.c +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 1995 by Richard P. Basch. All Rights Reserved. - * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Richard P. Basch, - * Lehman Brothers and M.I.T. make no representations about the suitability - * of this software for any purpose. It is provided "as is" without - * express or implied warranty. - */ - -#include "des_int.h" -#include "f_tables.h" - -/* - * Triple-DES CBC encryption mode. - */ - -#undef mit_des3_cbc_encrypt -int -mit_des3_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out, - unsigned long length, const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec, int enc) -{ - if (enc) - krb5int_des3_cbc_encrypt(in, out, length, ks1, ks2, ks3, ivec); - else - krb5int_des3_cbc_decrypt(in, out, length, ks1, ks2, ks3, ivec); - return 0; -} - -void -krb5int_des3_cbc_encrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp1, *kp2, *kp3; - const unsigned char *ip; - unsigned char *op; - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp1 = (const unsigned DES_INT32 *)ks1; - kp2 = (const unsigned DES_INT32 *)ks2; - kp3 = (const unsigned DES_INT32 *)ks3; - - /* - * Initialize left and right with the contents of the initial - * vector. - */ - ip = ivec; - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - - /* - * Suitably initialized, now work the length down 8 bytes - * at a time. - */ - ip = *in; - op = *out; - while (length > 0) { - /* - * Get more input, xor it in. If the length is - * greater than or equal to 8 this is straight - * forward. Otherwise we have to fart around. - */ - if (length >= 8) { - unsigned DES_INT32 temp; - GET_HALF_BLOCK(temp, ip); - left ^= temp; - GET_HALF_BLOCK(temp, ip); - right ^= temp; - length -= 8; - } else { - /* - * Oh, shoot. We need to pad the - * end with zeroes. Work backwards - * to do this. - */ - ip += (int) length; - switch(length) { - case 7: right ^= (*(--ip) & FF_UINT32) << 8; - case 6: right ^= (*(--ip) & FF_UINT32) << 16; - case 5: right ^= (*(--ip) & FF_UINT32) << 24; - case 4: left ^= *(--ip) & FF_UINT32; - case 3: left ^= (*(--ip) & FF_UINT32) << 8; - case 2: left ^= (*(--ip) & FF_UINT32) << 16; - case 1: left ^= (*(--ip) & FF_UINT32) << 24; - - } - length = 0; - } - - /* - * Encrypt what we have - */ - DES_DO_ENCRYPT(left, right, kp1); - DES_DO_DECRYPT(left, right, kp2); - DES_DO_ENCRYPT(left, right, kp3); - - /* - * Copy the results out - */ - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - } -} - -void -krb5int_des3_cbc_decrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp1, *kp2, *kp3; - const unsigned char *ip; - unsigned char *op; - unsigned DES_INT32 ocipherl, ocipherr; - unsigned DES_INT32 cipherl, cipherr; - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp1 = (const unsigned DES_INT32 *)ks1; - kp2 = (const unsigned DES_INT32 *)ks2; - kp3 = (const unsigned DES_INT32 *)ks3; - - /* - * Decrypting is harder than encrypting because of - * the necessity of remembering a lot more things. - * Should think about this a little more... - */ - - if (length <= 0) - return; - - /* - * Prime the old cipher with ivec. - */ - ip = ivec; - GET_HALF_BLOCK(ocipherl, ip); - GET_HALF_BLOCK(ocipherr, ip); - - /* - * Now do this in earnest until we run out of length. - */ - ip = *in; - op = *out; - for (;;) { /* check done inside loop */ - /* - * Read a block from the input into left and - * right. Save this cipher block for later. - */ - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - cipherl = left; - cipherr = right; - - /* - * Decrypt this. - */ - DES_DO_DECRYPT(left, right, kp3); - DES_DO_ENCRYPT(left, right, kp2); - DES_DO_DECRYPT(left, right, kp1); - - /* - * Xor with the old cipher to get plain - * text. Output 8 or less bytes of this. - */ - left ^= ocipherl; - right ^= ocipherr; - if (length > 8) { - length -= 8; - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - /* - * Save current cipher block here - */ - ocipherl = cipherl; - ocipherr = cipherr; - } else { - /* - * Trouble here. Start at end of output, - * work backwards. - */ - op += (int) length; - switch(length) { - case 8: *(--op) = (unsigned char) (right & 0xff); - case 7: *(--op) = (unsigned char) ((right >> 8) & 0xff); - case 6: *(--op) = (unsigned char) ((right >> 16) & 0xff); - case 5: *(--op) = (unsigned char) ((right >> 24) & 0xff); - case 4: *(--op) = (unsigned char) (left & 0xff); - case 3: *(--op) = (unsigned char) ((left >> 8) & 0xff); - case 2: *(--op) = (unsigned char) ((left >> 16) & 0xff); - case 1: *(--op) = (unsigned char) ((left >> 24) & 0xff); - } - break; /* we're done */ - } - } -} diff --git a/src/lib/crypto/des/d3_kysched.c b/src/lib/crypto/des/d3_kysched.c deleted file mode 100644 index f18cc2419..000000000 --- a/src/lib/crypto/des/d3_kysched.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 1995 by Richard P. Basch. All Rights Reserved. - * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Richard P. Basch, - * Lehman Brothers and M.I.T. make no representations about the suitability - * of this software for any purpose. It is provided "as is" without - * express or implied warranty. - */ - -#include "k5-int.h" -#include "des_int.h" - -int -mit_des3_key_sched(mit_des3_cblock k, mit_des3_key_schedule schedule) -{ - mit_des_make_key_sched(k[0],schedule[0]); - mit_des_make_key_sched(k[1],schedule[1]); - mit_des_make_key_sched(k[2],schedule[2]); - - if (!mit_des_check_key_parity(k[0])) /* bad parity --> return -1 */ - return(-1); - if (mit_des_is_weak_key(k[0])) - return(-2); - - if (!mit_des_check_key_parity(k[1])) - return(-1); - if (mit_des_is_weak_key(k[1])) - return(-2); - - if (!mit_des_check_key_parity(k[2])) - return(-1); - if (mit_des_is_weak_key(k[2])) - return(-2); - - /* if key was good, return 0 */ - return 0; -} diff --git a/src/lib/crypto/des/deps b/src/lib/crypto/des/deps deleted file mode 100644 index 93147df27..000000000 --- a/src/lib/crypto/des/deps +++ /dev/null @@ -1,146 +0,0 @@ -# -# Generated makefile dependencies follow. -# -afsstring2key.so afsstring2key.po $(OUTPRE)afsstring2key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h afsstring2key.c des_int.h -d3_cbc.so d3_cbc.po $(OUTPRE)d3_cbc.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - d3_cbc.c des_int.h f_tables.h -d3_aead.so d3_aead.po $(OUTPRE)d3_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h d3_aead.c \ - des_int.h f_tables.h -d3_kysched.so d3_kysched.po $(OUTPRE)d3_kysched.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h d3_kysched.c des_int.h -des_prf.so des_prf.po $(OUTPRE)des_prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../hash_provider/hash_provider.h des_prf.c -f_aead.so f_aead.po $(OUTPRE)f_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h des_int.h \ - f_aead.c f_tables.h -f_cbc.so f_cbc.po $(OUTPRE)f_cbc.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - des_int.h f_cbc.c f_tables.h -f_cksum.so f_cksum.po $(OUTPRE)f_cksum.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - des_int.h f_cksum.c f_tables.h -f_parity.so f_parity.po $(OUTPRE)f_parity.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h des_int.h f_parity.c -f_sched.so f_sched.po $(OUTPRE)f_sched.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - des_int.h f_sched.c -f_tables.so f_tables.po $(OUTPRE)f_tables.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h des_int.h f_tables.c \ - f_tables.h -key_sched.so key_sched.po $(OUTPRE)key_sched.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h des_int.h key_sched.c -weak_key.so weak_key.po $(OUTPRE)weak_key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h des_int.h weak_key.c -string2key.so string2key.po $(OUTPRE)string2key.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h des_int.h string2key.c diff --git a/src/lib/crypto/des/des_int.h b/src/lib/crypto/des/des_int.h deleted file mode 100644 index 4a1d52ae3..000000000 --- a/src/lib/crypto/des/des_int.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * lib/crypto/des/des_int.h - * - * Copyright 1987, 1988, 1990, 2002 by the Massachusetts Institute of - * Technology. All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Private include file for the Data Encryption Standard library. - */ - -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -/* only do the whole thing once */ -#ifndef DES_INTERNAL_DEFS -#define DES_INTERNAL_DEFS - -#include "k5-int.h" -/* - * Begin "mit-des.h" - */ -#ifndef KRB5_MIT_DES__ -#define KRB5_MIT_DES__ - -#if defined(__MACH__) && defined(__APPLE__) -#include -#include -#if TARGET_RT_MAC_CFM -#error "Use KfM 4.0 SDK headers for CFM compilation." -#endif -#if defined(DEPRECATED_IN_MAC_OS_X_VERSION_10_5) && !defined(KRB5_SUPRESS_DEPRECATED_WARNINGS) -#define KRB5INT_DES_DEPRECATED DEPRECATED_IN_MAC_OS_X_VERSION_10_5 -#endif -#endif /* defined(__MACH__) && defined(__APPLE__) */ - -/* Macro to add deprecated attribute to DES types and functions */ -/* Currently only defined on Mac OS X 10.5 and later. */ -#ifndef KRB5INT_DES_DEPRECATED -#define KRB5INT_DES_DEPRECATED -#endif - -#include - -#if UINT_MAX >= 0xFFFFFFFFUL -#define DES_INT32 int -#define DES_UINT32 unsigned int -#else -#define DES_INT32 long -#define DES_UINT32 unsigned long -#endif - -typedef unsigned char des_cblock[8] /* crypto-block size */ -KRB5INT_DES_DEPRECATED; - -/* - * Key schedule. - * - * This used to be - * - * typedef struct des_ks_struct { - * union { DES_INT32 pad; des_cblock _;} __; - * } des_key_schedule[16]; - * - * but it would cause trouble if DES_INT32 were ever more than 4 - * bytes. The reason is that all the encryption functions cast it to - * (DES_INT32 *), and treat it as if it were DES_INT32[32]. If - * 2*sizeof(DES_INT32) is ever more than sizeof(des_cblock), the - * caller-allocated des_key_schedule will be overflowed by the key - * scheduling functions. We can't assume that every platform will - * have an exact 32-bit int, and nothing should be looking inside a - * des_key_schedule anyway. - */ -typedef struct des_ks_struct { DES_INT32 _[2]; } des_key_schedule[16] -KRB5INT_DES_DEPRECATED; - -typedef des_cblock mit_des_cblock; -typedef des_key_schedule mit_des_key_schedule; - -/* Triple-DES structures */ -typedef mit_des_cblock mit_des3_cblock[3]; -typedef mit_des_key_schedule mit_des3_key_schedule[3]; - -#define MIT_DES_ENCRYPT 1 -#define MIT_DES_DECRYPT 0 - -typedef struct mit_des_ran_key_seed { - krb5_encrypt_block eblock; - krb5_data sequence; -} mit_des_random_state; - -/* the first byte of the key is already in the keyblock */ - -#define MIT_DES_BLOCK_LENGTH (8*sizeof(krb5_octet)) -#define MIT_DES_CBC_CRC_PAD_MINIMUM CRC32_CKSUM_LENGTH -/* This used to be 8*sizeof(krb5_octet) */ -#define MIT_DES_KEYSIZE 8 - -#define MIT_DES_CBC_CKSUM_LENGTH (4*sizeof(krb5_octet)) - -/* - * Check if k5-int.h has been included before us. If so, then check to see - * that our view of the DES key size is the same as k5-int.h's. - */ -#ifdef KRB5_MIT_DES_KEYSIZE -#if MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE -error(MIT_DES_KEYSIZE does not equal KRB5_MIT_DES_KEYSIZE) -#endif /* MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE */ -#endif /* KRB5_MIT_DES_KEYSIZE */ -#endif /* KRB5_MIT_DES__ */ -/* - * End "mit-des.h" - */ - -/* afsstring2key.c */ -extern krb5_error_code mit_afs_string_to_key - (krb5_keyblock *keyblock, - const krb5_data *data, - const krb5_data *salt); -extern char *mit_afs_crypt - (const char *pw, const char *salt, char *iobuf); - -/* f_cksum.c */ -extern unsigned long mit_des_cbc_cksum - (const krb5_octet *, krb5_octet *, unsigned long , - const mit_des_key_schedule, const krb5_octet *); - -/* f_ecb.c */ -extern int mit_des_ecb_encrypt - (const mit_des_cblock *, mit_des_cblock *, mit_des_key_schedule , int ); - -/* f_cbc.c */ -extern int mit_des_cbc_encrypt (const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule schedule, - const mit_des_cblock ivec, int enc); - -#define mit_des_zeroblock krb5int_c_mit_des_zeroblock -extern const mit_des_cblock mit_des_zeroblock; - -/* fin_rndkey.c */ -extern krb5_error_code mit_des_finish_random_key - ( const krb5_encrypt_block *, - krb5_pointer *); - -/* finish_key.c */ -extern krb5_error_code mit_des_finish_key - ( krb5_encrypt_block *); - -/* init_rkey.c */ -extern krb5_error_code mit_des_init_random_key - ( const krb5_encrypt_block *, - const krb5_keyblock *, - krb5_pointer *); - -/* key_parity.c */ -extern void mit_des_fixup_key_parity (mit_des_cblock ); -extern int mit_des_check_key_parity (mit_des_cblock ); - -/* key_sched.c */ -extern int mit_des_key_sched - (mit_des_cblock , mit_des_key_schedule ); - -/* process_ky.c */ -extern krb5_error_code mit_des_process_key - ( krb5_encrypt_block *, const krb5_keyblock *); - -/* random_key.c */ -extern krb5_error_code mit_des_random_key - ( const krb5_encrypt_block *, krb5_pointer , - krb5_keyblock **); - -/* string2key.c */ -extern krb5_error_code mit_des_string_to_key - ( const krb5_encrypt_block *, - krb5_keyblock *, const krb5_data *, const krb5_data *); -extern krb5_error_code mit_des_string_to_key_int - (krb5_keyblock *, const krb5_data *, const krb5_data *); - -/* weak_key.c */ -extern int mit_des_is_weak_key (mit_des_cblock ); - -/* cmb_keys.c */ -krb5_error_code mit_des_combine_subkeys - (const krb5_keyblock *, const krb5_keyblock *, - krb5_keyblock **); - -/* f_pcbc.c */ -int mit_des_pcbc_encrypt (); - -/* f_sched.c */ -int mit_des_make_key_sched(mit_des_cblock, mit_des_key_schedule); - - -/* misc.c */ -extern void swap_bits (char *); -extern unsigned long long_swap_bits (unsigned long ); -extern unsigned long swap_six_bits_to_ansi (unsigned long ); -extern unsigned long swap_four_bits_to_ansi (unsigned long ); -extern unsigned long swap_bit_pos_1 (unsigned long ); -extern unsigned long swap_bit_pos_0 (unsigned long ); -extern unsigned long swap_bit_pos_0_to_ansi (unsigned long ); -extern unsigned long rev_swap_bit_pos_0 (unsigned long ); -extern unsigned long swap_byte_bits (unsigned long ); -extern unsigned long swap_long_bytes_bit_number (unsigned long ); -#ifdef FILE -/* XXX depends on FILE being a #define! */ -extern void test_set (FILE *, const char *, int, const char *, int); -#endif - -/* d3_ecb.c */ -extern int mit_des3_ecb_encrypt - (const mit_des_cblock *in, - mit_des_cblock *out, - mit_des_key_schedule sched1, - mit_des_key_schedule sched2, - mit_des_key_schedule sched3, - int enc); - -/* d3_cbc.c */ -extern int mit_des3_cbc_encrypt - (const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec, - int enc); - -void -krb5int_des3_cbc_encrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec); -void -krb5int_des3_cbc_decrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - const mit_des_cblock ivec); - -void -krb5int_des3_cbc_encrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - mit_des_cblock ivec); - -void -krb5int_des3_cbc_decrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule ks1, - const mit_des_key_schedule ks2, - const mit_des_key_schedule ks3, - mit_des_cblock ivec); - -#define mit_des3_cbc_encrypt(in,out,length,ks1,ks2,ks3,ivec,enc) \ - ((enc ? krb5int_des3_cbc_encrypt : krb5int_des3_cbc_decrypt) \ - (in, out, length, ks1, ks2, ks3, ivec), 0) - -void -krb5int_des_cbc_encrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule schedule, - const mit_des_cblock ivec); -void -krb5int_des_cbc_decrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule schedule, - const mit_des_cblock ivec); - -#define mit_des_cbc_encrypt(in,out,length,schedule,ivec,enc) \ - ((enc ? krb5int_des_cbc_encrypt : krb5int_des_cbc_decrypt) \ - (in, out, length, schedule, ivec), 0) - -void -krb5int_des_cbc_encrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule schedule, - mit_des_cblock ivec); - -void -krb5int_des_cbc_decrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule schedule, - mit_des_cblock ivec); - -/* d3_procky.c */ -extern krb5_error_code mit_des3_process_key - (krb5_encrypt_block * eblock, - const krb5_keyblock * keyblock); - -/* d3_kysched.c */ -extern int mit_des3_key_sched - (mit_des3_cblock key, - mit_des3_key_schedule schedule); - -/* d3_str2ky.c */ -extern krb5_error_code mit_des3_string_to_key - (const krb5_encrypt_block * eblock, - krb5_keyblock * keyblock, - const krb5_data * data, - const krb5_data * salt); - -/* u_nfold.c */ -extern krb5_error_code mit_des_n_fold - (const krb5_octet * input, - const size_t in_len, - krb5_octet * output, - const size_t out_len); - -/* u_rn_key.c */ -extern int mit_des_is_weak_keyblock - (krb5_keyblock *keyblock); - -extern void mit_des_fixup_keyblock_parity - (krb5_keyblock *keyblock); - -extern krb5_error_code mit_des_set_random_generator_seed - (const krb5_data * seed, - krb5_pointer random_state); - -extern krb5_error_code mit_des_set_random_sequence_number - (const krb5_data * sequence, - krb5_pointer random_state); -krb5_error_code -krb5int_des_prf (const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out); -#endif /*DES_INTERNAL_DEFS*/ diff --git a/src/lib/crypto/des/des_prf.c b/src/lib/crypto/des/des_prf.c deleted file mode 100644 index 9bb1085c3..000000000 --- a/src/lib/crypto/des/des_prf.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * lib/crypto/des/des_prf.c - * - * Copyright (C) 2004, 2009 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * This file contains an implementation of the RFC 3961 PRF for - * des-cbc-crc, des-cbc-md4, and des-cbc-md5 enctypes. - */ - -#include "k5-int.h" -#include "../hash_provider/hash_provider.h" /* XXX is this ok? */ - -krb5_error_code -krb5int_des_prf (const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out) -{ - krb5_data tmp; - krb5_error_code ret = 0; - - hash = &krb5int_hash_md5; /* MD5 is always used. */ - tmp.length = hash->hashsize; - tmp.data = malloc(hash->hashsize); - if (tmp.data == NULL) - return ENOMEM; - ret = hash->hash(1, in, &tmp); - if (ret == 0) - ret = enc->encrypt(key, NULL, &tmp, out); - free(tmp.data); - return ret; -} diff --git a/src/lib/crypto/des/destest.c b/src/lib/crypto/des/destest.c deleted file mode 100644 index 2582cc3d3..000000000 --- a/src/lib/crypto/des/destest.c +++ /dev/null @@ -1,247 +0,0 @@ -/* - * lib/crypto/des/destest.c - * - * Copyright 1990,1991 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Test a DES implementation against known inputs & outputs - */ - - -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "des_int.h" -#include "com_err.h" - -#include - -void convert (char *, unsigned char []); - -void des_cblock_print_file (mit_des_cblock, FILE *); - -krb5_octet zeroblock[8] = {0,0,0,0,0,0,0,0}; - -int -main(argc, argv) - int argc; - char *argv[]; -{ - char block1[17], block2[17], block3[17]; -#if 0 - mit_des_cblock key, input, output, output2; -#else - /* Force tests of unaligned accesses. */ - union { unsigned char c[8*4+3]; long l; } u; - unsigned char *ioblocks = u.c; - unsigned char *input = ioblocks+1; - unsigned char *output = ioblocks+10; - unsigned char *output2 = ioblocks+19; - unsigned char *key = ioblocks+27; -#endif - mit_des_key_schedule sched; - int num = 0; - int retval; - - int error = 0; - - while (scanf("%16s %16s %16s", block1, block2, block3) == 3) { - convert(block1, key); - convert(block2, input); - convert(block3, output); - - retval = mit_des_key_sched(key, sched); - if (retval) { - fprintf(stderr, "des test: can't process key"); - exit(1); - } - mit_des_cbc_encrypt((const mit_des_cblock *) input, output2, 8, - sched, zeroblock, 1); - - if (memcmp((char *)output2, (char *)output, 8)) { - fprintf(stderr, - "DES ENCRYPT ERROR, key %s, text %s, real cipher %s, computed cyphertext %02X%02X%02X%02X%02X%02X%02X%02X\n", - block1, block2, block3, - output2[0],output2[1],output2[2],output2[3], - output2[4],output2[5],output2[6],output2[7]); - error++; - } - - /* - * Now try decrypting.... - */ - mit_des_cbc_encrypt((const mit_des_cblock *) output, output2, 8, - sched, zeroblock, 0); - - if (memcmp((char *)output2, (char *)input, 8)) { - fprintf(stderr, - "DES DECRYPT ERROR, key %s, text %s, real cipher %s, computed cleartext %02X%02X%02X%02X%02X%02X%02X%02X\n", - block1, block2, block3, - output2[0],output2[1],output2[2],output2[3], - output2[4],output2[5],output2[6],output2[7]); - error++; - } - - num++; - } - - if (error) - printf("destest: failed to pass the test\n"); - else - printf("destest: %d tests passed successfully\n", num); - - exit( (error > 256 && error % 256) ? 1 : error); -} - -int value[128] = { --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, -0, 1, 2, 3, 4, 5, 6, 7, -8, 9, -1, -1, -1, -1, -1, -1, --1, 10, 11, 12, 13, 14, 15, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, --1, -1, -1, -1, -1, -1, -1, -1, -}; - -void -convert(text, cblock) - char *text; - unsigned char cblock[]; -{ - register int i; - for (i = 0; i < 8; i++) { - if (text[i*2] < 0 || text[i*2] >= 128) - abort (); - if (value[(int) text[i*2]] == -1 || value[(int) text[i*2+1]] == -1) { - printf("Bad value byte %d in %s\n", i, text); - exit(1); - } - cblock[i] = 16*value[(int) text[i*2]] + value[(int) text[i*2+1]]; - } - return; -} - -/* - * Fake out the DES library, for the purposes of testing. - */ - -#include "des_int.h" - -int -mit_des_is_weak_key(key) - mit_des_cblock key; -{ - return 0; /* fake it out for testing */ -} - -void -des_cblock_print_file(x, fp) - mit_des_cblock x; - FILE *fp; -{ - unsigned char *y = (unsigned char *) x; - register int i = 0; - fprintf(fp," 0x { "); - - while (i++ < 8) { - fprintf(fp,"%x",*y++); - if (i < 8) - fprintf(fp,", "); - } - fprintf(fp," }"); -} - - -#define smask(step) ((1<>step)&smask(step))) -#define parity_char(x) pstep(pstep(pstep((x),4),2),1) - -/* - * des_check_key_parity: returns true iff key has the correct des parity. - * See des_fix_key_parity for the definition of - * correct des parity. - */ -int -mit_des_check_key_parity(key) - register mit_des_cblock key; -{ - int i; - - for (i=0; i decrypt, else encrypt */ - Key_schedule schedule; /* addr of key schedule */ - -This is the low level routine that encrypts or decrypts a single 8-byte -block in electronic code book mode. Always transforms the input -data into the output data. - -If encrypt is non-zero, the input (cleartext) is encrypted into the -output (ciphertext) using the specified key_schedule, pre-set via "des_set_key". - -If encrypt is zero, the input (now ciphertext) is decrypted into -the output (now cleartext). - -Input and output may be the same space. - -Does not return any meaningful value. Void is not used for compatibility -with other compilers. - -/* -------------------------------------------------------------- */ - -int - cbc_encrypt(input,output,length,schedule,ivec,encrypt) - - C_Block *input; /* ptr to input data */ - C_Block *output; /* ptr to output data */ - int length; /* desired length, in bytes */ - Key_schedule schedule; /* addr of precomputed schedule */ - C_Block *ivec; /* pointer to 8 byte initialization - * vector - */ - int encrypt /* 0 ==> decrypt; else encrypt*/ - - - If encrypt is non-zero, the routine cipher-block-chain encrypts - the INPUT (cleartext) into the OUTPUT (ciphertext) using the provided - key schedule and initialization vector. If the length is not an integral - multiple of eight bytes, the last block is copied to a temp and zero - filled (highest addresses). The output is ALWAYS an integral multiple - of eight bytes. - - If encrypt is zero, the routine cipher-block chain decrypts the INPUT - (ciphertext) into the OUTPUT (cleartext) using the provided key schedule - and initialization vector. Decryption ALWAYS operates on integral - multiples of 8 bytes, so will round the length provided up to the - appropriate multiple. Consequently, it will always produce the rounded-up - number of bytes of output cleartext. The application must determine if - the output cleartext was zero-padded due to cleartext lengths not integral - multiples of 8. - - No errors or meaningful value are returned. Void is not used for - compatibility with other compilers. - - -/* cbc checksum (MAC) only routine ---------------------------------------- */ -int - cbc_cksum(input,output,length,schedule,ivec) - - C_Block *input; /* >= length bytes of inputtext */ - C_Block *output; /* >= length bytes of outputtext */ - int length; /* in bytes */ - Key_schedule schedule; /* precomputed key schedule */ - C_Block *ivec; /* 8 bytes of ivec */ - - - Produces a cryptographic checksum, 8 bytes, by cipher-block-chain - encrypting the input, discarding the ciphertext output, and only retaining - the last ciphertext 8-byte block. Uses the provided key schedule and ivec. - The input is effectively zero-padded to an integral multiple of - eight bytes, though the original input is not modified. - - No meaningful value is returned. Void is not used for compatibility - with other compilers. - - -/* random_key ----------------------------------------*/ -int - random_key(key) - - C_Block *key; - - The start for the random number generated is set from the current time - in microseconds, then the random number generator is invoked - to create an eight byte output key (not a schedule). The key - generated is set to odd parity per FIPS spec. - - The caller must supply space for the output key, pointed to - by "*key", then after getting a new key, call the des_set_key() - routine when needed. - - No meaningfull value is returned. Void is not used for compatibility - with other compilers. - - -/* string_to_key --------------------------------------------*/ - -int - string_to_key(str,key) - register char *str; - register C_Block *key; - - This routines converts an arbitrary length, null terminated string - to an 8 byte DES key, with each byte parity set to odd, per FIPS spec. - - The algorithm is as follows: - -| Take the first 8 bytes and remove the parity (leaving 56 bits). -| Do the same for the second 8 bytes, and the third, etc. Do this for -| as many sets of 8 bytes as necessary, filling in the remainder of the -| last set with nulls. Fold the second set back on the first (i.e. bit -| 0 over bit 55, and bit 55 over bit 0). Fold the third over the second -| (bit 0 of the third set is now over bit 0 of the first set). Repeat -| until you have done this to all sets. Xor the folded sets. Break the -| result into 8 7 bit bytes, and generate odd parity for each byte. You -| now have 64 bits. Note that DES takes a 64 bit key, and uses only the -| non parity bits. - - -/* read_password -------------------------------------------*/ - -read_password(k,prompt,verify) - C_Block *k; - char *prompt; - int verify; - -This routine issues the supplied prompt, turns off echo, if possible, and -reads an input string. If verify is non-zero, it does it again, for use -in applications such as changing a password. If verify is non-zero, both -versions are compared, and the input is requested repeatedly until they -match. Then, the input string is mapped into a valid DES key, internally -using the string_to_key routine. The newly created key is copied to the -area pointed to by parameter "k". - -No meaningful value is returned. If an error occurs trying to manipulate -the terminal echo, the routine forces the process to exit. - -/* get_line ------------------------*/ -long get_line(p,max) - char *p; - long max; - -Reads input characters from standard input until either a newline appears or -else the max length is reached. The characters read are stuffed into -the string pointed to, which will always be null terminated. The newline -is not inserted in the string. The max parameter includes the byte needed -for the null terminator, so allocate and pass one more than the maximum -string length desired. diff --git a/src/lib/crypto/des/f_aead.c b/src/lib/crypto/des/f_aead.c deleted file mode 100644 index f7c2fd391..000000000 --- a/src/lib/crypto/des/f_aead.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2008 by the Massachusetts Institute of Technology. - * Copyright 1995 by Richard P. Basch. All Rights Reserved. - * Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of Richard P. Basch, Lehman Brothers and M.I.T. not be used - * in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Richard P. Basch, - * Lehman Brothers and M.I.T. make no representations about the suitability - * of this software for any purpose. It is provided "as is" without - * express or implied warranty. - */ - -#include "des_int.h" -#include "f_tables.h" -#include "../aead.h" - -void -krb5int_des_cbc_encrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule schedule, - mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp; - const unsigned char *ip; - unsigned char *op; - struct iov_block_state input_pos, output_pos; - unsigned char iblock[MIT_DES_BLOCK_LENGTH]; - unsigned char oblock[MIT_DES_BLOCK_LENGTH]; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp = (const unsigned DES_INT32 *)schedule; - - /* - * Initialize left and right with the contents of the initial - * vector. - */ - if (ivec != NULL) - ip = ivec; - else - ip = mit_des_zeroblock; - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - - /* - * Suitably initialized, now work the length down 8 bytes - * at a time. - */ - for (;;) { - unsigned DES_INT32 temp; - - ip = iblock; - op = oblock; - - if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) - break; - - if (input_pos.iov_pos == num_data) - break; - - GET_HALF_BLOCK(temp, ip); - left ^= temp; - GET_HALF_BLOCK(temp, ip); - right ^= temp; - - /* - * Encrypt what we have - */ - DES_DO_ENCRYPT(left, right, kp); - - /* - * Copy the results out - */ - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - - krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); - } - - if (ivec != NULL) - memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); -} - -void -krb5int_des_cbc_decrypt_iov(krb5_crypto_iov *data, - unsigned long num_data, - const mit_des_key_schedule schedule, - mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp; - const unsigned char *ip; - unsigned DES_INT32 ocipherl, ocipherr; - unsigned DES_INT32 cipherl, cipherr; - unsigned char *op; - struct iov_block_state input_pos, output_pos; - unsigned char iblock[MIT_DES_BLOCK_LENGTH]; - unsigned char oblock[MIT_DES_BLOCK_LENGTH]; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp = (const unsigned DES_INT32 *)schedule; - - /* - * Decrypting is harder than encrypting because of - * the necessity of remembering a lot more things. - * Should think about this a little more... - */ - - if (num_data == 0) - return; - - /* - * Prime the old cipher with ivec. - */ - if (ivec != NULL) - ip = ivec; - else - ip = mit_des_zeroblock; - GET_HALF_BLOCK(ocipherl, ip); - GET_HALF_BLOCK(ocipherr, ip); - - /* - * Now do this in earnest until we run out of length. - */ - for (;;) { - /* - * Read a block from the input into left and - * right. Save this cipher block for later. - */ - - if (!krb5int_c_iov_get_block(iblock, MIT_DES_BLOCK_LENGTH, data, num_data, &input_pos)) - break; - - if (input_pos.iov_pos == num_data) - break; - - ip = iblock; - op = oblock; - - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - cipherl = left; - cipherr = right; - - /* - * Decrypt this. - */ - DES_DO_DECRYPT(left, right, kp); - - /* - * Xor with the old cipher to get plain - * text. Output 8 or less bytes of this. - */ - left ^= ocipherl; - right ^= ocipherr; - - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - - /* - * Save current cipher block here - */ - ocipherl = cipherl; - ocipherr = cipherr; - - krb5int_c_iov_put_block(data, num_data, oblock, MIT_DES_BLOCK_LENGTH, &output_pos); - } - - if (ivec != NULL) - memcpy(ivec, oblock, MIT_DES_BLOCK_LENGTH); -} diff --git a/src/lib/crypto/des/f_cbc.c b/src/lib/crypto/des/f_cbc.c deleted file mode 100644 index 0949ba140..000000000 --- a/src/lib/crypto/des/f_cbc.c +++ /dev/null @@ -1,274 +0,0 @@ -/* - * lib/crypto/des/f_cbc.c - * - * Copyright (C) 1990 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * DES implementation donated by Dennis Ferguson - */ - -/* - * des_cbc_encrypt.c - an implementation of the DES cipher function in cbc mode - */ -#include "des_int.h" -#include "f_tables.h" - -/* - * des_cbc_encrypt - {en,de}crypt a stream in CBC mode - */ - -/* - * This routine performs DES cipher-block-chaining operation, either - * encrypting from cleartext to ciphertext, if encrypt != 0 or - * decrypting from ciphertext to cleartext, if encrypt == 0. - * - * The key schedule is passed as an arg, as well as the cleartext or - * ciphertext. The cleartext and ciphertext should be in host order. - * - * NOTE-- the output is ALWAYS an multiple of 8 bytes long. If not - * enough space was provided, your program will get trashed. - * - * For encryption, the cleartext string is null padded, at the end, to - * an integral multiple of eight bytes. - * - * For decryption, the ciphertext will be used in integral multiples - * of 8 bytes, but only the first "length" bytes returned into the - * cleartext. - */ - -const mit_des_cblock mit_des_zeroblock /* = all zero */; - -#undef mit_des_cbc_encrypt -int -mit_des_cbc_encrypt(const mit_des_cblock *in, mit_des_cblock *out, - unsigned long length, const mit_des_key_schedule schedule, - const mit_des_cblock ivec, int enc) -{ - /* - * Deal with encryption and decryption separately. - */ - if (enc) - krb5int_des_cbc_encrypt(in, out, length, schedule, ivec); - else - krb5int_des_cbc_decrypt(in, out, length, schedule, ivec); - return 0; -} - -void -krb5int_des_cbc_encrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule schedule, - const mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp; - const unsigned char *ip; - unsigned char *op; - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp = (const unsigned DES_INT32 *)schedule; - - /* - * Initialize left and right with the contents of the initial - * vector. - */ - ip = ivec; - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - - /* - * Suitably initialized, now work the length down 8 bytes - * at a time. - */ - ip = *in; - op = *out; - while (length > 0) { - /* - * Get more input, xor it in. If the length is - * greater than or equal to 8 this is straight - * forward. Otherwise we have to fart around. - */ - if (length >= 8) { - unsigned DES_INT32 temp; - GET_HALF_BLOCK(temp, ip); - left ^= temp; - GET_HALF_BLOCK(temp, ip); - right ^= temp; - length -= 8; - } else { - /* - * Oh, shoot. We need to pad the - * end with zeroes. Work backwards - * to do this. - */ - ip += (int) length; - switch(length) { - case 7: - right ^= (*(--ip) & FF_UINT32) << 8; - case 6: - right ^= (*(--ip) & FF_UINT32) << 16; - case 5: - right ^= (*(--ip) & FF_UINT32) << 24; - case 4: - left ^= *(--ip) & FF_UINT32; - case 3: - left ^= (*(--ip) & FF_UINT32) << 8; - case 2: - left ^= (*(--ip) & FF_UINT32) << 16; - case 1: - left ^= (*(--ip) & FF_UINT32) << 24; - break; - } - length = 0; - } - - /* - * Encrypt what we have - */ - DES_DO_ENCRYPT(left, right, kp); - - /* - * Copy the results out - */ - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - } -} - -void -krb5int_des_cbc_decrypt(const mit_des_cblock *in, - mit_des_cblock *out, - unsigned long length, - const mit_des_key_schedule schedule, - const mit_des_cblock ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp; - const unsigned char *ip; - unsigned char *op; - unsigned DES_INT32 ocipherl, ocipherr; - unsigned DES_INT32 cipherl, cipherr; - - /* - * Get key pointer here. This won't need to be reinitialized - */ - kp = (const unsigned DES_INT32 *)schedule; - - /* - * Decrypting is harder than encrypting because of - * the necessity of remembering a lot more things. - * Should think about this a little more... - */ - - if (length <= 0) - return; - - /* - * Prime the old cipher with ivec. - */ - ip = ivec; - GET_HALF_BLOCK(ocipherl, ip); - GET_HALF_BLOCK(ocipherr, ip); - - /* - * Now do this in earnest until we run out of length. - */ - ip = *in; - op = *out; - for (;;) { /* check done inside loop */ - /* - * Read a block from the input into left and - * right. Save this cipher block for later. - */ - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - cipherl = left; - cipherr = right; - - /* - * Decrypt this. - */ - DES_DO_DECRYPT(left, right, kp); - - /* - * Xor with the old cipher to get plain - * text. Output 8 or less bytes of this. - */ - left ^= ocipherl; - right ^= ocipherr; - if (length > 8) { - length -= 8; - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - /* - * Save current cipher block here - */ - ocipherl = cipherl; - ocipherr = cipherr; - } else { - /* - * Trouble here. Start at end of output, - * work backwards. - */ - op += (int) length; - switch(length) { - case 8: - *(--op) = (unsigned char) (right & 0xff); - case 7: - *(--op) = (unsigned char) ((right >> 8) & 0xff); - case 6: - *(--op) = (unsigned char) ((right >> 16) & 0xff); - case 5: - *(--op) = (unsigned char) ((right >> 24) & 0xff); - case 4: - *(--op) = (unsigned char) (left & 0xff); - case 3: - *(--op) = (unsigned char) ((left >> 8) & 0xff); - case 2: - *(--op) = (unsigned char) ((left >> 16) & 0xff); - case 1: - *(--op) = (unsigned char) ((left >> 24) & 0xff); - break; - } - break; /* we're done */ - } - } -} - -#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) -void krb5int_des_do_encrypt_2 (unsigned DES_INT32 *left, - unsigned DES_INT32 *right, - const unsigned DES_INT32 *kp) -{ - DES_DO_ENCRYPT_1 (*left, *right, kp); -} - -void krb5int_des_do_decrypt_2 (unsigned DES_INT32 *left, - unsigned DES_INT32 *right, - const unsigned DES_INT32 *kp) -{ - DES_DO_DECRYPT_1 (*left, *right, kp); -} -#endif diff --git a/src/lib/crypto/des/f_cksum.c b/src/lib/crypto/des/f_cksum.c deleted file mode 100644 index 1c03da43e..000000000 --- a/src/lib/crypto/des/f_cksum.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - * lib/crypto/des/f_cksum.c - * - * Copyright (C) 1990 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * DES implementation donated by Dennis Ferguson - */ - -/* - * des_cbc_cksum.c - compute an 8 byte checksum using DES in CBC mode - */ -#include "des_int.h" -#include "f_tables.h" - -/* - * This routine performs DES cipher-block-chaining checksum operation, - * a.k.a. Message Authentication Code. It ALWAYS encrypts from input - * to a single 64 bit output MAC checksum. - * - * The key schedule is passed as an arg, as well as the cleartext or - * ciphertext. The cleartext and ciphertext should be in host order. - * - * NOTE-- the output is ALWAYS 8 bytes long. If not enough space was - * provided, your program will get trashed. - * - * The input is null padded, at the end (highest addr), to an integral - * multiple of eight bytes. - */ - -unsigned long -mit_des_cbc_cksum(const krb5_octet *in, krb5_octet *out, - unsigned long length, const mit_des_key_schedule schedule, - const krb5_octet *ivec) -{ - unsigned DES_INT32 left, right; - const unsigned DES_INT32 *kp; - const unsigned char *ip; - unsigned char *op; - register DES_INT32 len; - - /* - * Initialize left and right with the contents of the initial - * vector. - */ - ip = ivec; - GET_HALF_BLOCK(left, ip); - GET_HALF_BLOCK(right, ip); - - /* - * Suitably initialized, now work the length down 8 bytes - * at a time. - */ - ip = in; - len = length; - while (len > 0) { - /* - * Get more input, xor it in. If the length is - * greater than or equal to 8 this is straight - * forward. Otherwise we have to fart around. - */ - if (len >= 8) { - unsigned DES_INT32 temp; - GET_HALF_BLOCK(temp, ip); - left ^= temp; - GET_HALF_BLOCK(temp, ip); - right ^= temp; - len -= 8; - } else { - /* - * Oh, shoot. We need to pad the - * end with zeroes. Work backwards - * to do this. - */ - ip += (int) len; - switch(len) { - case 7: - right ^= (*(--ip) & FF_UINT32) << 8; - case 6: - right ^= (*(--ip) & FF_UINT32) << 16; - case 5: - right ^= (*(--ip) & FF_UINT32) << 24; - case 4: - left ^= *(--ip) & FF_UINT32; - case 3: - left ^= (*(--ip) & FF_UINT32) << 8; - case 2: - left ^= (*(--ip) & FF_UINT32) << 16; - case 1: - left ^= (*(--ip) & FF_UINT32) << 24; - break; - } - len = 0; - } - - /* - * Encrypt what we have - */ - kp = (const unsigned DES_INT32 *)schedule; - DES_DO_ENCRYPT(left, right, kp); - } - - /* - * Done. Left and right have the checksum. Put it into - * the output. - */ - op = out; - PUT_HALF_BLOCK(left, op); - PUT_HALF_BLOCK(right, op); - - /* - * Return right. I'll bet the MIT code returns this - * inconsistantly (with the low order byte of the checksum - * not always in the low order byte of the DES_INT32). We won't. - */ - return right & 0xFFFFFFFFUL; -} diff --git a/src/lib/crypto/des/f_parity.c b/src/lib/crypto/des/f_parity.c deleted file mode 100644 index 426386303..000000000 --- a/src/lib/crypto/des/f_parity.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * These routines check and fix parity of encryption keys for the DES - * algorithm. - * - * They are a replacement for routines in key_parity.c, that don't require - * the table building that they do. - * - * Mark Eichin -- Cygnus Support - */ - - -#include "des_int.h" - -/* - * des_fixup_key_parity: Forces odd parity per byte; parity is bits - * 8,16,...64 in des order, implies 0, 8, 16, ... - * vax order. - */ -#define smask(step) ((1<>step)&smask(step))) -#define parity_char(x) pstep(pstep(pstep((x),4),2),1) - -void -mit_des_fixup_key_parity(mit_des_cblock key) -{ - unsigned int i; - for (i=0; i> 29) & 0x7] - | (PC1_CL[(tmp >> 21) & 0x7] << 1) - | (PC1_CL[(tmp >> 13) & 0x7] << 2) - | (PC1_CL[(tmp >> 5) & 0x7] << 3); - d = PC1_DL[(tmp >> 25) & 0xf] - | (PC1_DL[(tmp >> 17) & 0xf] << 1) - | (PC1_DL[(tmp >> 9) & 0xf] << 2) - | (PC1_DL[(tmp >> 1) & 0xf] << 3); - - tmp = load_32_be(k), k += 4; - - c |= PC1_CR[(tmp >> 28) & 0xf] - | (PC1_CR[(tmp >> 20) & 0xf] << 1) - | (PC1_CR[(tmp >> 12) & 0xf] << 2) - | (PC1_CR[(tmp >> 4) & 0xf] << 3); - d |= PC1_DR[(tmp >> 25) & 0x7] - | (PC1_DR[(tmp >> 17) & 0x7] << 1) - | (PC1_DR[(tmp >> 9) & 0x7] << 2) - | (PC1_DR[(tmp >> 1) & 0x7] << 3); - } - - { - /* - * Need several temporaries in here - */ - register unsigned DES_INT32 ltmp, rtmp; - register unsigned DES_INT32 *k; - register int two_bit_shifts; - register int i; - /* - * Now iterate to compute the key schedule. Note that we - * record the entire set of subkeys in 6 bit chunks since - * they are used that way. At 6 bits/char, we need - * 48/6 char's/subkey * 16 subkeys/encryption == 128 bytes. - * The schedule must be this big. - */ - k = (unsigned DES_INT32 *)schedule; - two_bit_shifts = TWO_BIT_SHIFTS; - for (i = 16; i > 0; i--) { - /* - * Do the rotation. One bit and two bit rotations - * are done separately. Note C and D are 28 bits. - */ - if (two_bit_shifts & 0x1) { - c = ((c << 2) & 0xffffffc) | (c >> 26); - d = ((d << 2) & 0xffffffc) | (d >> 26); - } else { - c = ((c << 1) & 0xffffffe) | (c >> 27); - d = ((d << 1) & 0xffffffe) | (d >> 27); - } - two_bit_shifts >>= 1; - - /* - * Apply permutted choice 2 to C to get the first - * 24 bits worth of keys. Note that bits 9, 18, 22 - * and 25 (using DES numbering) in C are unused. The - * shift-mask stuff is done to delete these bits from - * the indices, since this cuts the table size in half. - * - * The table is torqued, by the way. If the standard - * byte order for this (high to low order) is 1234, - * the table actually gives us 4132. - */ - ltmp = PC2_C[0][((c >> 22) & 0x3f)] - | PC2_C[1][((c >> 15) & 0xf) | ((c >> 16) & 0x30)] - | PC2_C[2][((c >> 4) & 0x3) | ((c >> 9) & 0x3c)] - | PC2_C[3][((c ) & 0x7) | ((c >> 4) & 0x38)]; - /* - * Apply permutted choice 2 to D to get the other half. - * Here, bits 7, 10, 15 and 26 go unused. The sqeezing - * actually turns out to be cheaper here. - * - * This table is similarly torqued. If the standard - * byte order is 5678, the table has the bytes permuted - * to give us 7685. - */ - rtmp = PC2_D[0][((d >> 22) & 0x3f)] - | PC2_D[1][((d >> 14) & 0xf) | ((d >> 15) & 0x30)] - | PC2_D[2][((d >> 7) & 0x3f)] - | PC2_D[3][((d ) & 0x3) | ((d >> 1) & 0x3c)]; - - /* - * Make up two words of the key schedule, with a - * byte order which is convenient for the DES - * inner loop. The high order (first) word will - * hold bytes 7135 (high to low order) while the - * second holds bytes 4682. - */ - *k++ = (ltmp & 0x00ffff00) | (rtmp & 0xff0000ff); - *k++ = (ltmp & 0xff0000ff) | (rtmp & 0x00ffff00); - } - } - return (0); -} diff --git a/src/lib/crypto/des/f_tables.c b/src/lib/crypto/des/f_tables.c deleted file mode 100644 index 42426bc0a..000000000 --- a/src/lib/crypto/des/f_tables.c +++ /dev/null @@ -1,370 +0,0 @@ -/* - * lib/crypto/des/f_tables.c - * - * Copyright (C) 1990 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * DES implementation donated by Dennis Ferguson - */ - -/* - * des_tables.c - precomputed tables used for the DES cipher function - */ - -/* - * Include the header file so something will complain if the - * declarations get out of sync - */ -#include "des_int.h" -#include "f_tables.h" - -/* - * These tables may be declared const if you want. Many compilers - * don't support this, though. - */ - -/* - * The DES algorithm which uses these is intended to be fairly speedy - * at the expense of some memory. All the standard hacks are used. - * The S boxes and the P permutation are precomputed into one table. - * The E box never actually appears explicitly since it is easy to apply - * this algorithmically as needed. The initial permutation and final - * (inverse initial) permutation are computed from tables designed to - * permute one byte at a time. This should run pretty fast on machines - * with 32 bit words and bit field/multiple bit shift instructions which - * are fast. - */ - -/* - * The initial permutation array. This is used to compute both the - * left and the right halves of the initial permutation using bytes - * from words made from the following operations: - * - * ((left & 0x55555555) << 1) | (right & 0x55555555) for left half - * (left & 0xaaaaaaaa) | ((right & 0xaaaaaaaa) >> 1) for right half - * - * The scheme is that we index into the table using each byte. The - * result from the high order byte is or'd with the result from the - * next byte shifted left once is or'd with the result from the next - * byte shifted left twice if or'd with the result from the low order - * byte shifted left by three. Clear? - */ - -const unsigned DES_INT32 des_IP_table[256] = { - 0x00000000, 0x00000010, 0x00000001, 0x00000011, - 0x00001000, 0x00001010, 0x00001001, 0x00001011, - 0x00000100, 0x00000110, 0x00000101, 0x00000111, - 0x00001100, 0x00001110, 0x00001101, 0x00001111, - 0x00100000, 0x00100010, 0x00100001, 0x00100011, - 0x00101000, 0x00101010, 0x00101001, 0x00101011, - 0x00100100, 0x00100110, 0x00100101, 0x00100111, - 0x00101100, 0x00101110, 0x00101101, 0x00101111, - 0x00010000, 0x00010010, 0x00010001, 0x00010011, - 0x00011000, 0x00011010, 0x00011001, 0x00011011, - 0x00010100, 0x00010110, 0x00010101, 0x00010111, - 0x00011100, 0x00011110, 0x00011101, 0x00011111, - 0x00110000, 0x00110010, 0x00110001, 0x00110011, - 0x00111000, 0x00111010, 0x00111001, 0x00111011, - 0x00110100, 0x00110110, 0x00110101, 0x00110111, - 0x00111100, 0x00111110, 0x00111101, 0x00111111, - 0x10000000, 0x10000010, 0x10000001, 0x10000011, - 0x10001000, 0x10001010, 0x10001001, 0x10001011, - 0x10000100, 0x10000110, 0x10000101, 0x10000111, - 0x10001100, 0x10001110, 0x10001101, 0x10001111, - 0x10100000, 0x10100010, 0x10100001, 0x10100011, - 0x10101000, 0x10101010, 0x10101001, 0x10101011, - 0x10100100, 0x10100110, 0x10100101, 0x10100111, - 0x10101100, 0x10101110, 0x10101101, 0x10101111, - 0x10010000, 0x10010010, 0x10010001, 0x10010011, - 0x10011000, 0x10011010, 0x10011001, 0x10011011, - 0x10010100, 0x10010110, 0x10010101, 0x10010111, - 0x10011100, 0x10011110, 0x10011101, 0x10011111, - 0x10110000, 0x10110010, 0x10110001, 0x10110011, - 0x10111000, 0x10111010, 0x10111001, 0x10111011, - 0x10110100, 0x10110110, 0x10110101, 0x10110111, - 0x10111100, 0x10111110, 0x10111101, 0x10111111, - 0x01000000, 0x01000010, 0x01000001, 0x01000011, - 0x01001000, 0x01001010, 0x01001001, 0x01001011, - 0x01000100, 0x01000110, 0x01000101, 0x01000111, - 0x01001100, 0x01001110, 0x01001101, 0x01001111, - 0x01100000, 0x01100010, 0x01100001, 0x01100011, - 0x01101000, 0x01101010, 0x01101001, 0x01101011, - 0x01100100, 0x01100110, 0x01100101, 0x01100111, - 0x01101100, 0x01101110, 0x01101101, 0x01101111, - 0x01010000, 0x01010010, 0x01010001, 0x01010011, - 0x01011000, 0x01011010, 0x01011001, 0x01011011, - 0x01010100, 0x01010110, 0x01010101, 0x01010111, - 0x01011100, 0x01011110, 0x01011101, 0x01011111, - 0x01110000, 0x01110010, 0x01110001, 0x01110011, - 0x01111000, 0x01111010, 0x01111001, 0x01111011, - 0x01110100, 0x01110110, 0x01110101, 0x01110111, - 0x01111100, 0x01111110, 0x01111101, 0x01111111, - 0x11000000, 0x11000010, 0x11000001, 0x11000011, - 0x11001000, 0x11001010, 0x11001001, 0x11001011, - 0x11000100, 0x11000110, 0x11000101, 0x11000111, - 0x11001100, 0x11001110, 0x11001101, 0x11001111, - 0x11100000, 0x11100010, 0x11100001, 0x11100011, - 0x11101000, 0x11101010, 0x11101001, 0x11101011, - 0x11100100, 0x11100110, 0x11100101, 0x11100111, - 0x11101100, 0x11101110, 0x11101101, 0x11101111, - 0x11010000, 0x11010010, 0x11010001, 0x11010011, - 0x11011000, 0x11011010, 0x11011001, 0x11011011, - 0x11010100, 0x11010110, 0x11010101, 0x11010111, - 0x11011100, 0x11011110, 0x11011101, 0x11011111, - 0x11110000, 0x11110010, 0x11110001, 0x11110011, - 0x11111000, 0x11111010, 0x11111001, 0x11111011, - 0x11110100, 0x11110110, 0x11110101, 0x11110111, - 0x11111100, 0x11111110, 0x11111101, 0x11111111 -}; - -/* - * The final permutation array. Like the IP array, used - * to compute both the left and right results from the bytes - * of words computed from: - * - * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result - * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result - * - * The result from the high order byte is shifted left 6 bits and - * or'd with the result from the next byte shifted left 4 bits, which - * is or'd with the result from the next byte shifted left 2 bits, - * which is or'd with the result from the low byte. - */ -const unsigned DES_INT32 des_FP_table[256] = { - 0x00000000, 0x02000000, 0x00020000, 0x02020000, - 0x00000200, 0x02000200, 0x00020200, 0x02020200, - 0x00000002, 0x02000002, 0x00020002, 0x02020002, - 0x00000202, 0x02000202, 0x00020202, 0x02020202, - 0x01000000, 0x03000000, 0x01020000, 0x03020000, - 0x01000200, 0x03000200, 0x01020200, 0x03020200, - 0x01000002, 0x03000002, 0x01020002, 0x03020002, - 0x01000202, 0x03000202, 0x01020202, 0x03020202, - 0x00010000, 0x02010000, 0x00030000, 0x02030000, - 0x00010200, 0x02010200, 0x00030200, 0x02030200, - 0x00010002, 0x02010002, 0x00030002, 0x02030002, - 0x00010202, 0x02010202, 0x00030202, 0x02030202, - 0x01010000, 0x03010000, 0x01030000, 0x03030000, - 0x01010200, 0x03010200, 0x01030200, 0x03030200, - 0x01010002, 0x03010002, 0x01030002, 0x03030002, - 0x01010202, 0x03010202, 0x01030202, 0x03030202, - 0x00000100, 0x02000100, 0x00020100, 0x02020100, - 0x00000300, 0x02000300, 0x00020300, 0x02020300, - 0x00000102, 0x02000102, 0x00020102, 0x02020102, - 0x00000302, 0x02000302, 0x00020302, 0x02020302, - 0x01000100, 0x03000100, 0x01020100, 0x03020100, - 0x01000300, 0x03000300, 0x01020300, 0x03020300, - 0x01000102, 0x03000102, 0x01020102, 0x03020102, - 0x01000302, 0x03000302, 0x01020302, 0x03020302, - 0x00010100, 0x02010100, 0x00030100, 0x02030100, - 0x00010300, 0x02010300, 0x00030300, 0x02030300, - 0x00010102, 0x02010102, 0x00030102, 0x02030102, - 0x00010302, 0x02010302, 0x00030302, 0x02030302, - 0x01010100, 0x03010100, 0x01030100, 0x03030100, - 0x01010300, 0x03010300, 0x01030300, 0x03030300, - 0x01010102, 0x03010102, 0x01030102, 0x03030102, - 0x01010302, 0x03010302, 0x01030302, 0x03030302, - 0x00000001, 0x02000001, 0x00020001, 0x02020001, - 0x00000201, 0x02000201, 0x00020201, 0x02020201, - 0x00000003, 0x02000003, 0x00020003, 0x02020003, - 0x00000203, 0x02000203, 0x00020203, 0x02020203, - 0x01000001, 0x03000001, 0x01020001, 0x03020001, - 0x01000201, 0x03000201, 0x01020201, 0x03020201, - 0x01000003, 0x03000003, 0x01020003, 0x03020003, - 0x01000203, 0x03000203, 0x01020203, 0x03020203, - 0x00010001, 0x02010001, 0x00030001, 0x02030001, - 0x00010201, 0x02010201, 0x00030201, 0x02030201, - 0x00010003, 0x02010003, 0x00030003, 0x02030003, - 0x00010203, 0x02010203, 0x00030203, 0x02030203, - 0x01010001, 0x03010001, 0x01030001, 0x03030001, - 0x01010201, 0x03010201, 0x01030201, 0x03030201, - 0x01010003, 0x03010003, 0x01030003, 0x03030003, - 0x01010203, 0x03010203, 0x01030203, 0x03030203, - 0x00000101, 0x02000101, 0x00020101, 0x02020101, - 0x00000301, 0x02000301, 0x00020301, 0x02020301, - 0x00000103, 0x02000103, 0x00020103, 0x02020103, - 0x00000303, 0x02000303, 0x00020303, 0x02020303, - 0x01000101, 0x03000101, 0x01020101, 0x03020101, - 0x01000301, 0x03000301, 0x01020301, 0x03020301, - 0x01000103, 0x03000103, 0x01020103, 0x03020103, - 0x01000303, 0x03000303, 0x01020303, 0x03020303, - 0x00010101, 0x02010101, 0x00030101, 0x02030101, - 0x00010301, 0x02010301, 0x00030301, 0x02030301, - 0x00010103, 0x02010103, 0x00030103, 0x02030103, - 0x00010303, 0x02010303, 0x00030303, 0x02030303, - 0x01010101, 0x03010101, 0x01030101, 0x03030101, - 0x01010301, 0x03010301, 0x01030301, 0x03030301, - 0x01010103, 0x03010103, 0x01030103, 0x03030103, - 0x01010303, 0x03010303, 0x01030303, 0x03030303 -}; - - -/* - * The SP table is actually the S boxes and the P permutation - * table combined. This table is actually reordered from the - * spec, to match the order of key application we follow. - */ -const unsigned DES_INT32 des_SP_table[8][64] = { - { - 0x00100000, 0x02100001, 0x02000401, 0x00000000, /* 7 */ - 0x00000400, 0x02000401, 0x00100401, 0x02100400, - 0x02100401, 0x00100000, 0x00000000, 0x02000001, - 0x00000001, 0x02000000, 0x02100001, 0x00000401, - 0x02000400, 0x00100401, 0x00100001, 0x02000400, - 0x02000001, 0x02100000, 0x02100400, 0x00100001, - 0x02100000, 0x00000400, 0x00000401, 0x02100401, - 0x00100400, 0x00000001, 0x02000000, 0x00100400, - 0x02000000, 0x00100400, 0x00100000, 0x02000401, - 0x02000401, 0x02100001, 0x02100001, 0x00000001, - 0x00100001, 0x02000000, 0x02000400, 0x00100000, - 0x02100400, 0x00000401, 0x00100401, 0x02100400, - 0x00000401, 0x02000001, 0x02100401, 0x02100000, - 0x00100400, 0x00000000, 0x00000001, 0x02100401, - 0x00000000, 0x00100401, 0x02100000, 0x00000400, - 0x02000001, 0x02000400, 0x00000400, 0x00100001, - }, - { - 0x00808200, 0x00000000, 0x00008000, 0x00808202, /* 1 */ - 0x00808002, 0x00008202, 0x00000002, 0x00008000, - 0x00000200, 0x00808200, 0x00808202, 0x00000200, - 0x00800202, 0x00808002, 0x00800000, 0x00000002, - 0x00000202, 0x00800200, 0x00800200, 0x00008200, - 0x00008200, 0x00808000, 0x00808000, 0x00800202, - 0x00008002, 0x00800002, 0x00800002, 0x00008002, - 0x00000000, 0x00000202, 0x00008202, 0x00800000, - 0x00008000, 0x00808202, 0x00000002, 0x00808000, - 0x00808200, 0x00800000, 0x00800000, 0x00000200, - 0x00808002, 0x00008000, 0x00008200, 0x00800002, - 0x00000200, 0x00000002, 0x00800202, 0x00008202, - 0x00808202, 0x00008002, 0x00808000, 0x00800202, - 0x00800002, 0x00000202, 0x00008202, 0x00808200, - 0x00000202, 0x00800200, 0x00800200, 0x00000000, - 0x00008002, 0x00008200, 0x00000000, 0x00808002, - }, - { - 0x00000104, 0x04010100, 0x00000000, 0x04010004, /* 3 */ - 0x04000100, 0x00000000, 0x00010104, 0x04000100, - 0x00010004, 0x04000004, 0x04000004, 0x00010000, - 0x04010104, 0x00010004, 0x04010000, 0x00000104, - 0x04000000, 0x00000004, 0x04010100, 0x00000100, - 0x00010100, 0x04010000, 0x04010004, 0x00010104, - 0x04000104, 0x00010100, 0x00010000, 0x04000104, - 0x00000004, 0x04010104, 0x00000100, 0x04000000, - 0x04010100, 0x04000000, 0x00010004, 0x00000104, - 0x00010000, 0x04010100, 0x04000100, 0x00000000, - 0x00000100, 0x00010004, 0x04010104, 0x04000100, - 0x04000004, 0x00000100, 0x00000000, 0x04010004, - 0x04000104, 0x00010000, 0x04000000, 0x04010104, - 0x00000004, 0x00010104, 0x00010100, 0x04000004, - 0x04010000, 0x04000104, 0x00000104, 0x04010000, - 0x00010104, 0x00000004, 0x04010004, 0x00010100, - }, - { - 0x00000080, 0x01040080, 0x01040000, 0x21000080, /* 5 */ - 0x00040000, 0x00000080, 0x20000000, 0x01040000, - 0x20040080, 0x00040000, 0x01000080, 0x20040080, - 0x21000080, 0x21040000, 0x00040080, 0x20000000, - 0x01000000, 0x20040000, 0x20040000, 0x00000000, - 0x20000080, 0x21040080, 0x21040080, 0x01000080, - 0x21040000, 0x20000080, 0x00000000, 0x21000000, - 0x01040080, 0x01000000, 0x21000000, 0x00040080, - 0x00040000, 0x21000080, 0x00000080, 0x01000000, - 0x20000000, 0x01040000, 0x21000080, 0x20040080, - 0x01000080, 0x20000000, 0x21040000, 0x01040080, - 0x20040080, 0x00000080, 0x01000000, 0x21040000, - 0x21040080, 0x00040080, 0x21000000, 0x21040080, - 0x01040000, 0x00000000, 0x20040000, 0x21000000, - 0x00040080, 0x01000080, 0x20000080, 0x00040000, - 0x00000000, 0x20040000, 0x01040080, 0x20000080, - }, - { - 0x80401000, 0x80001040, 0x80001040, 0x00000040, /* 4 */ - 0x00401040, 0x80400040, 0x80400000, 0x80001000, - 0x00000000, 0x00401000, 0x00401000, 0x80401040, - 0x80000040, 0x00000000, 0x00400040, 0x80400000, - 0x80000000, 0x00001000, 0x00400000, 0x80401000, - 0x00000040, 0x00400000, 0x80001000, 0x00001040, - 0x80400040, 0x80000000, 0x00001040, 0x00400040, - 0x00001000, 0x00401040, 0x80401040, 0x80000040, - 0x00400040, 0x80400000, 0x00401000, 0x80401040, - 0x80000040, 0x00000000, 0x00000000, 0x00401000, - 0x00001040, 0x00400040, 0x80400040, 0x80000000, - 0x80401000, 0x80001040, 0x80001040, 0x00000040, - 0x80401040, 0x80000040, 0x80000000, 0x00001000, - 0x80400000, 0x80001000, 0x00401040, 0x80400040, - 0x80001000, 0x00001040, 0x00400000, 0x80401000, - 0x00000040, 0x00400000, 0x00001000, 0x00401040, - }, - { - 0x10000008, 0x10200000, 0x00002000, 0x10202008, /* 6 */ - 0x10200000, 0x00000008, 0x10202008, 0x00200000, - 0x10002000, 0x00202008, 0x00200000, 0x10000008, - 0x00200008, 0x10002000, 0x10000000, 0x00002008, - 0x00000000, 0x00200008, 0x10002008, 0x00002000, - 0x00202000, 0x10002008, 0x00000008, 0x10200008, - 0x10200008, 0x00000000, 0x00202008, 0x10202000, - 0x00002008, 0x00202000, 0x10202000, 0x10000000, - 0x10002000, 0x00000008, 0x10200008, 0x00202000, - 0x10202008, 0x00200000, 0x00002008, 0x10000008, - 0x00200000, 0x10002000, 0x10000000, 0x00002008, - 0x10000008, 0x10202008, 0x00202000, 0x10200000, - 0x00202008, 0x10202000, 0x00000000, 0x10200008, - 0x00000008, 0x00002000, 0x10200000, 0x00202008, - 0x00002000, 0x00200008, 0x10002008, 0x00000000, - 0x10202000, 0x10000000, 0x00200008, 0x10002008, - }, - { - 0x08000820, 0x00000800, 0x00020000, 0x08020820, /* 8 */ - 0x08000000, 0x08000820, 0x00000020, 0x08000000, - 0x00020020, 0x08020000, 0x08020820, 0x00020800, - 0x08020800, 0x00020820, 0x00000800, 0x00000020, - 0x08020000, 0x08000020, 0x08000800, 0x00000820, - 0x00020800, 0x00020020, 0x08020020, 0x08020800, - 0x00000820, 0x00000000, 0x00000000, 0x08020020, - 0x08000020, 0x08000800, 0x00020820, 0x00020000, - 0x00020820, 0x00020000, 0x08020800, 0x00000800, - 0x00000020, 0x08020020, 0x00000800, 0x00020820, - 0x08000800, 0x00000020, 0x08000020, 0x08020000, - 0x08020020, 0x08000000, 0x00020000, 0x08000820, - 0x00000000, 0x08020820, 0x00020020, 0x08000020, - 0x08020000, 0x08000800, 0x08000820, 0x00000000, - 0x08020820, 0x00020800, 0x00020800, 0x00000820, - 0x00000820, 0x00020020, 0x08000000, 0x08020800, - }, - { - 0x40084010, 0x40004000, 0x00004000, 0x00084010, /* 2 */ - 0x00080000, 0x00000010, 0x40080010, 0x40004010, - 0x40000010, 0x40084010, 0x40084000, 0x40000000, - 0x40004000, 0x00080000, 0x00000010, 0x40080010, - 0x00084000, 0x00080010, 0x40004010, 0x00000000, - 0x40000000, 0x00004000, 0x00084010, 0x40080000, - 0x00080010, 0x40000010, 0x00000000, 0x00084000, - 0x00004010, 0x40084000, 0x40080000, 0x00004010, - 0x00000000, 0x00084010, 0x40080010, 0x00080000, - 0x40004010, 0x40080000, 0x40084000, 0x00004000, - 0x40080000, 0x40004000, 0x00000010, 0x40084010, - 0x00084010, 0x00000010, 0x00004000, 0x40000000, - 0x00004010, 0x40084000, 0x00080000, 0x40000010, - 0x00080010, 0x40004010, 0x40000010, 0x00080010, - 0x00084000, 0x00000000, 0x40004000, 0x00004010, - 0x40000000, 0x40080010, 0x40084010, 0x00084000 - }, -}; diff --git a/src/lib/crypto/des/f_tables.h b/src/lib/crypto/des/f_tables.h deleted file mode 100644 index 45a6322fe..000000000 --- a/src/lib/crypto/des/f_tables.h +++ /dev/null @@ -1,279 +0,0 @@ -/* - * lib/crypto/des/f_tables.h - * - * Copyright (C) 1990 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * DES implementation donated by Dennis Ferguson - */ - -/* - * des_tables.h - declarations to import the DES tables, used internally - * by some of the library routines. - */ -#ifndef __DES_TABLES_H__ -#define __DES_TABLES_H__ /* nothing */ - -#include "k5-platform.h" -/* - * These may be declared const if you wish. Be sure to change the - * declarations in des_tables.c as well. - */ -extern const unsigned DES_INT32 des_IP_table[256]; -extern const unsigned DES_INT32 des_FP_table[256]; -extern const unsigned DES_INT32 des_SP_table[8][64]; - -/* - * Use standard shortforms to reference these to save typing - */ -#define IP des_IP_table -#define FP des_FP_table -#define SP des_SP_table - -#ifdef DEBUG -#define DEB(foofraw) printf foofraw -#else -#define DEB(foofraw) /* nothing */ -#endif - -/* - * Code to do a DES round using the tables. Note that the E expansion - * is easy to compute algorithmically, especially if done out-of-order. - * Take a look at its form and compare it to everything involving temp - * below. Since SP[0-7] don't have any bits in common set it is okay - * to do the successive xor's. - * - * Note too that the SP table has been reordered to match the order of - * the keys (if the original order of SP was 12345678, the reordered - * table is 71354682). This is unnecessary, but was done since some - * compilers seem to like you going through the matrix from beginning - * to end. - * - * There is a difference in the best way to do this depending on whether - * one is encrypting or decrypting. If encrypting we move forward through - * the keys and hence should move forward through the table. If decrypting - * we go back. Part of the need for this comes from trying to emulate - * existing software which generates a single key schedule and uses it - * both for encrypting and decrypting. Generating separate encryption - * and decryption key schedules would allow one to use the same code - * for both. - * - * left, right and temp should be unsigned DES_INT32 values. left and right - * should be the high and low order parts of the cipher block at the - * current stage of processing (this makes sense if you read the spec). - * kp should be an unsigned DES_INT32 pointer which points at the current - * set of subkeys in the key schedule. It is advanced to the next set - * (i.e. by 8 bytes) when this is done. - * - * This occurs in the innermost loop of the DES function. The four - * variables should really be in registers. - * - * When using this, the inner loop of the DES function might look like: - * - * for (i = 0; i < 8; i++) { - * DES_SP_{EN,DE}CRYPT_ROUND(left, right, temp, kp); - * DES_SP_{EN,DE}CRYPT_ROUND(right, left, temp, kp); - * } - * - * Note the trick above. You are supposed to do 16 rounds, swapping - * left and right at the end of each round. By doing two rounds at - * a time and swapping left and right in the code we can avoid the - * swaps altogether. - */ -#define DES_SP_ENCRYPT_ROUND(left, right, temp, kp) \ - (temp) = (((right) >> 11) | ((right) << 21)) ^ *(kp)++; \ - (left) ^= SP[0][((temp) >> 24) & 0x3f] \ - | SP[1][((temp) >> 16) & 0x3f] \ - | SP[2][((temp) >> 8) & 0x3f] \ - | SP[3][((temp) ) & 0x3f]; \ - (temp) = (((right) >> 23) | ((right) << 9)) ^ *(kp)++; \ - (left) ^= SP[4][((temp) >> 24) & 0x3f] \ - | SP[5][((temp) >> 16) & 0x3f] \ - | SP[6][((temp) >> 8) & 0x3f] \ - | SP[7][((temp) ) & 0x3f] - -#define DES_SP_DECRYPT_ROUND(left, right, temp, kp) \ - (temp) = (((right) >> 23) | ((right) << 9)) ^ *(--(kp)); \ - (left) ^= SP[7][((temp) ) & 0x3f] \ - | SP[6][((temp) >> 8) & 0x3f] \ - | SP[5][((temp) >> 16) & 0x3f] \ - | SP[4][((temp) >> 24) & 0x3f]; \ - (temp) = (((right) >> 11) | ((right) << 21)) ^ *(--(kp)); \ - (left) ^= SP[3][((temp) ) & 0x3f] \ - | SP[2][((temp) >> 8) & 0x3f] \ - | SP[1][((temp) >> 16) & 0x3f] \ - | SP[0][((temp) >> 24) & 0x3f] - -/* - * Macros to help deal with the initial permutation table. Note - * the IP table only deals with 32 bits at a time, allowing us to - * collect the bits we need to deal with each half into an unsigned - * DES_INT32. By carefully selecting how the bits are ordered we also - * take advantages of symmetries in the table so that we can use a - * single table to compute the permutation of all bytes. This sounds - * complicated, but if you go through the process of designing the - * table you'll find the symmetries fall right out. - * - * The follow macros compute the set of bits used to index the - * table for produce the left and right permuted result. - * - * The inserted cast to unsigned DES_INT32 circumvents a bug in - * the Macintosh MPW 3.2 C compiler which loses the unsignedness and - * propagates the high-order bit in the shift. - */ -#define DES_IP_LEFT_BITS(left, right) \ - ((((left) & 0x55555555) << 1) | ((right) & 0x55555555)) -#define DES_IP_RIGHT_BITS(left, right) \ - (((left) & 0xaaaaaaaa) | \ - ( ( (unsigned DES_INT32) ((right) & 0xaaaaaaaa) ) >> 1)) - -/* - * The following macro does an in-place initial permutation given - * the current left and right parts of the block and a single - * temporary. Use this more as a guide for rolling your own, though. - * The best way to do the IP depends on the form of the data you - * are dealing with. If you use this, though, try to make left, - * right and temp register unsigned DES_INT32s. - */ -#define DES_INITIAL_PERM(left, right, temp) \ - (temp) = DES_IP_RIGHT_BITS((left), (right)); \ - (right) = DES_IP_LEFT_BITS((left), (right)); \ - (left) = IP[((right) >> 24) & 0xff] \ - | (IP[((right) >> 16) & 0xff] << 1) \ - | (IP[((right) >> 8) & 0xff] << 2) \ - | (IP[(right) & 0xff] << 3); \ - (right) = IP[((temp) >> 24) & 0xff] \ - | (IP[((temp) >> 16) & 0xff] << 1) \ - | (IP[((temp) >> 8) & 0xff] << 2) \ - | (IP[(temp) & 0xff] << 3) - -/* - * Now the final permutation stuff. The same comments apply to - * this as to the initial permutation, except that we use different - * bits and shifts. - * - * The inserted cast to unsigned DES_INT32 circumvents a bug in - * the Macintosh MPW 3.2 C compiler which loses the unsignedness and - * propagates the high-order bit in the shift. - */ -#define DES_FP_LEFT_BITS(left, right) \ - ((((left) & 0x0f0f0f0f) << 4) | ((right) & 0x0f0f0f0f)) -#define DES_FP_RIGHT_BITS(left, right) \ - (((left) & 0xf0f0f0f0) | \ - ( ( (unsigned DES_INT32) ((right) & 0xf0f0f0f0) ) >> 4)) - - -/* - * Here is a sample final permutation. Note that there is a trick - * here. DES requires swapping the left and right parts after the - * last cipher round but before the final permutation. We do this - * swapping internally, which is why left and right are confused - * at the beginning. - */ -#define DES_FINAL_PERM(left, right, temp) \ - (temp) = DES_FP_RIGHT_BITS((right), (left)); \ - (right) = DES_FP_LEFT_BITS((right), (left)); \ - (left) = (FP[((right) >> 24) & 0xff] << 6) \ - | (FP[((right) >> 16) & 0xff] << 4) \ - | (FP[((right) >> 8) & 0xff] << 2) \ - | FP[(right) & 0xff]; \ - (right) = (FP[((temp) >> 24) & 0xff] << 6) \ - | (FP[((temp) >> 16) & 0xff] << 4) \ - | (FP[((temp) >> 8) & 0xff] << 2) \ - | FP[temp & 0xff] - - -/* - * Finally, as a sample of how all this might be held together, the - * following two macros do in-place encryptions and decryptions. left - * and right are two unsigned DES_INT32 variables which at the beginning - * are expected to hold the clear (encrypted) block in host byte order - * (left the high order four bytes, right the low order). At the end - * they will contain the encrypted (clear) block. temp is an unsigned DES_INT32 - * used as a temporary. kp is an unsigned DES_INT32 pointer pointing at - * the start of the key schedule. All these should be in registers. - * - * You can probably do better than these by rewriting for particular - * situations. These aren't bad, though. - * - * The DEB macros enable debugging when this code breaks (typically - * when a buggy compiler breaks it), by printing the intermediate values - * at each stage of the encryption, so that by comparing the output to - * a known good machine, the location of the first error can be found. - */ -#define DES_DO_ENCRYPT_1(left, right, kp) \ - do { \ - register int i; \ - register unsigned DES_INT32 temp1; \ - DEB (("do_encrypt %8lX %8lX \n", left, right)); \ - DES_INITIAL_PERM((left), (right), (temp1)); \ - DEB ((" after IP %8lX %8lX\n", left, right)); \ - for (i = 0; i < 8; i++) { \ - DES_SP_ENCRYPT_ROUND((left), (right), (temp1), (kp)); \ - DEB ((" round %2d %8lX %8lX \n", i*2, left, right)); \ - DES_SP_ENCRYPT_ROUND((right), (left), (temp1), (kp)); \ - DEB ((" round %2d %8lX %8lX \n", 1+i*2, left, right)); \ - } \ - DES_FINAL_PERM((left), (right), (temp1)); \ - (kp) -= (2 * 16); \ - DEB ((" after FP %8lX %8lX \n", left, right)); \ - } while (0) - -#define DES_DO_DECRYPT_1(left, right, kp) \ - do { \ - register int i; \ - register unsigned DES_INT32 temp2; \ - DES_INITIAL_PERM((left), (right), (temp2)); \ - (kp) += (2 * 16); \ - for (i = 0; i < 8; i++) { \ - DES_SP_DECRYPT_ROUND((left), (right), (temp2), (kp)); \ - DES_SP_DECRYPT_ROUND((right), (left), (temp2), (kp)); \ - } \ - DES_FINAL_PERM((left), (right), (temp2)); \ - } while (0) - -#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) -extern void krb5int_des_do_encrypt_2(unsigned DES_INT32 *l, - unsigned DES_INT32 *r, - const unsigned DES_INT32 *k); -extern void krb5int_des_do_decrypt_2(unsigned DES_INT32 *l, - unsigned DES_INT32 *r, - const unsigned DES_INT32 *k); -#define DES_DO_ENCRYPT(L,R,K) krb5int_des_do_encrypt_2(&(L), &(R), (K)) -#define DES_DO_DECRYPT(L,R,K) krb5int_des_do_decrypt_2(&(L), &(R), (K)) -#else -#define DES_DO_ENCRYPT DES_DO_ENCRYPT_1 -#define DES_DO_DECRYPT DES_DO_DECRYPT_1 -#endif - -/* - * These are handy dandy utility thingies for straightening out bytes. - * Included here because they're used a couple of places. - */ -#define GET_HALF_BLOCK(lr, ip) ((lr) = load_32_be(ip), (ip) += 4) -#define PUT_HALF_BLOCK(lr, op) (store_32_be(lr, op), (op) += 4) - -/* Shorthand that we'll need in several places, for creating values that - really can hold 32 bits regardless of the prevailing int size. */ -#define FF_UINT32 ((unsigned DES_INT32) 0xFF) - -#endif /* __DES_TABLES_H__ */ diff --git a/src/lib/crypto/des/key_sched.c b/src/lib/crypto/des/key_sched.c deleted file mode 100644 index 26449a94c..000000000 --- a/src/lib/crypto/des/key_sched.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * lib/crypto/des/key_sched.c - * - * Copyright 1985, 1986, 1987, 1988, 1990 by the Massachusetts Institute - * of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * This routine computes the DES key schedule given a key. The - * permutations and shifts have been done at compile time, resulting - * in a direct one-step mapping from the input key to the key - * schedule. - * - * Also checks parity and weak keys. - * - * Watch out for the subscripts -- most effectively start at 1 instead - * of at zero. Maybe some bugs in that area. - * - * In case the user wants to cache the computed key schedule, it is - * passed as an arg. Also implies that caller has explicit control - * over zeroing both the key schedule and the key. - * - * Originally written 6/85 by Steve Miller, MIT Project Athena. - */ - -#include "k5-int.h" -#include "des_int.h" - -int -mit_des_key_sched(mit_des_cblock k, mit_des_key_schedule schedule) -{ - mit_des_make_key_sched(k,schedule); - - if (!mit_des_check_key_parity(k)) /* bad parity --> return -1 */ - return(-1); - - if (mit_des_is_weak_key(k)) - return(-2); - - /* if key was good, return 0 */ - return 0; -} diff --git a/src/lib/crypto/des/keytest.data b/src/lib/crypto/des/keytest.data deleted file mode 100644 index 7ff34eedc..000000000 --- a/src/lib/crypto/des/keytest.data +++ /dev/null @@ -1,171 +0,0 @@ -0101010101010101 95F8A5E5DD31D900 8000000000000000 -0101010101010101 DD7F121CA5015619 4000000000000000 -0101010101010101 2E8653104F3834EA 2000000000000000 -0101010101010101 4BD388FF6CD81D4F 1000000000000000 -0101010101010101 20B9E767B2FB1456 0800000000000000 -0101010101010101 55579380D77138EF 0400000000000000 -0101010101010101 6CC5DEFAAF04512F 0200000000000000 -0101010101010101 0D9F279BA5D87260 0100000000000000 -0101010101010101 D9031B0271BD5A0A 0080000000000000 -0101010101010101 424250B37C3DD951 0040000000000000 -0101010101010101 B8061B7ECD9A21E5 0020000000000000 -0101010101010101 F15D0F286B65BD28 0010000000000000 -0101010101010101 ADD0CC8D6E5DEBA1 0008000000000000 -0101010101010101 E6D5F82752AD63D1 0004000000000000 -0101010101010101 ECBFE3BD3F591A5E 0002000000000000 -0101010101010101 F356834379D165CD 0001000000000000 -0101010101010101 2B9F982F20037FA9 0000800000000000 -0101010101010101 889DE068A16F0BE6 0000400000000000 -0101010101010101 E19E275D846A1298 0000200000000000 -0101010101010101 329A8ED523D71AEC 0000100000000000 -0101010101010101 E7FCE22557D23C97 0000080000000000 -0101010101010101 12A9F5817FF2D65D 0000040000000000 -0101010101010101 A484C3AD38DC9C19 0000020000000000 -0101010101010101 FBE00A8A1EF8AD72 0000010000000000 -0101010101010101 750D079407521363 0000008000000000 -0101010101010101 64FEED9C724C2FAF 0000004000000000 -0101010101010101 F02B263B328E2B60 0000002000000000 -0101010101010101 9D64555A9A10B852 0000001000000000 -0101010101010101 D106FF0BED5255D7 0000000800000000 -0101010101010101 E1652C6B138C64A5 0000000400000000 -0101010101010101 E428581186EC8F46 0000000200000000 -0101010101010101 AEB5F5EDE22D1A36 0000000100000000 -0101010101010101 E943D7568AEC0C5C 0000000080000000 -0101010101010101 DF98C8276F54B04B 0000000040000000 -0101010101010101 B160E4680F6C696F 0000000020000000 -0101010101010101 FA0752B07D9C4AB8 0000000010000000 -0101010101010101 CA3A2B036DBC8502 0000000008000000 -0101010101010101 5E0905517BB59BCF 0000000004000000 -0101010101010101 814EEB3B91D90726 0000000002000000 -0101010101010101 4D49DB1532919C9F 0000000001000000 -0101010101010101 25EB5FC3F8CF0621 0000000000800000 -0101010101010101 AB6A20C0620D1C6F 0000000000400000 -0101010101010101 79E90DBC98F92CCA 0000000000200000 -0101010101010101 866ECEDD8072BB0E 0000000000100000 -0101010101010101 8B54536F2F3E64A8 0000000000080000 -0101010101010101 EA51D3975595B86B 0000000000040000 -0101010101010101 CAFFC6AC4542DE31 0000000000020000 -0101010101010101 8DD45A2DDF90796C 0000000000010000 -0101010101010101 1029D55E880EC2D0 0000000000008000 -0101010101010101 5D86CB23639DBEA9 0000000000004000 -0101010101010101 1D1CA853AE7C0C5F 0000000000002000 -0101010101010101 CE332329248F3228 0000000000001000 -0101010101010101 8405D1ABE24FB942 0000000000000800 -0101010101010101 E643D78090CA4207 0000000000000400 -0101010101010101 48221B9937748A23 0000000000000200 -0101010101010101 DD7C0BBD61FAFD54 0000000000000100 -0101010101010101 2FBC291A570DB5C4 0000000000000080 -0101010101010101 E07C30D7E4E26E12 0000000000000040 -0101010101010101 0953E2258E8E90A1 0000000000000020 -0101010101010101 5B711BC4CEEBF2EE 0000000000000010 -0101010101010101 CC083F1E6D9E85F6 0000000000000008 -0101010101010101 D2FD8867D50D2DFE 0000000000000004 -0101010101010101 06E7EA22CE92708F 0000000000000002 -0101010101010101 166B40B44ABA4BD6 0000000000000001 -8001010101010101 0000000000000000 95A8D72813DAA94D -4001010101010101 0000000000000000 0EEC1487DD8C26D5 -2001010101010101 0000000000000000 7AD16FFB79C45926 -1001010101010101 0000000000000000 D3746294CA6A6CF3 -0801010101010101 0000000000000000 809F5F873C1FD761 -0401010101010101 0000000000000000 C02FAFFEC989D1FC -0201010101010101 0000000000000000 4615AA1D33E72F10 -0180010101010101 0000000000000000 2055123350C00858 -0140010101010101 0000000000000000 DF3B99D6577397C8 -0120010101010101 0000000000000000 31FE17369B5288C9 -0110010101010101 0000000000000000 DFDD3CC64DAE1642 -0108010101010101 0000000000000000 178C83CE2B399D94 -0104010101010101 0000000000000000 50F636324A9B7F80 -0102010101010101 0000000000000000 A8468EE3BC18F06D -0101800101010101 0000000000000000 A2DC9E92FD3CDE92 -0101400101010101 0000000000000000 CAC09F797D031287 -0101200101010101 0000000000000000 90BA680B22AEB525 -0101100101010101 0000000000000000 CE7A24F350E280B6 -0101080101010101 0000000000000000 882BFF0AA01A0B87 -0101040101010101 0000000000000000 25610288924511C2 -0101020101010101 0000000000000000 C71516C29C75D170 -0101018001010101 0000000000000000 5199C29A52C9F059 -0101014001010101 0000000000000000 C22F0A294A71F29F -0101012001010101 0000000000000000 EE371483714C02EA -0101011001010101 0000000000000000 A81FBD448F9E522F -0101010801010101 0000000000000000 4F644C92E192DFED -0101010401010101 0000000000000000 1AFA9A66A6DF92AE -0101010201010101 0000000000000000 B3C1CC715CB879D8 -0101010180010101 0000000000000000 19D032E64AB0BD8B -0101010140010101 0000000000000000 3CFAA7A7DC8720DC -0101010120010101 0000000000000000 B7265F7F447AC6F3 -0101010110010101 0000000000000000 9DB73B3C0D163F54 -0101010108010101 0000000000000000 8181B65BABF4A975 -0101010104010101 0000000000000000 93C9B64042EAA240 -0101010102010101 0000000000000000 5570530829705592 -0101010101800101 0000000000000000 8638809E878787A0 -0101010101400101 0000000000000000 41B9A79AF79AC208 -0101010101200101 0000000000000000 7A9BE42F2009A892 -0101010101100101 0000000000000000 29038D56BA6D2745 -0101010101080101 0000000000000000 5495C6ABF1E5DF51 -0101010101040101 0000000000000000 AE13DBD561488933 -0101010101020101 0000000000000000 024D1FFA8904E389 -0101010101018001 0000000000000000 D1399712F99BF02E -0101010101014001 0000000000000000 14C1D7C1CFFEC79E -0101010101012001 0000000000000000 1DE5279DAE3BED6F -0101010101011001 0000000000000000 E941A33F85501303 -0101010101010801 0000000000000000 DA99DBBC9A03F379 -0101010101010401 0000000000000000 B7FC92F91D8E92E9 -0101010101010201 0000000000000000 AE8E5CAA3CA04E85 -0101010101010180 0000000000000000 9CC62DF43B6EED74 -0101010101010140 0000000000000000 D863DBB5C59A91A0 -0101010101010120 0000000000000000 A1AB2190545B91D7 -0101010101010110 0000000000000000 0875041E64C570F7 -0101010101010108 0000000000000000 5A594528BEBEF1CC -0101010101010104 0000000000000000 FCDB3291DE21F0C0 -0101010101010102 0000000000000000 869EFD7F9F265A09 -1046913489980131 0000000000000000 88D55E54F54C97B4 -1007103489988020 0000000000000000 0C0CC00C83EA48FD -10071034C8980120 0000000000000000 83BC8EF3A6570183 -1046103489988020 0000000000000000 DF725DCAD94EA2E9 -1086911519190101 0000000000000000 E652B53B550BE8B0 -1086911519580101 0000000000000000 AF527120C485CBB0 -5107B01519580101 0000000000000000 0F04CE393DB926D5 -1007B01519190101 0000000000000000 C9F00FFC74079067 -3107915498080101 0000000000000000 7CFD82A593252B4E -3107919498080101 0000000000000000 CB49A2F9E91363E3 -10079115B9080140 0000000000000000 00B588BE70D23F56 -3107911598080140 0000000000000000 406A9A6AB43399AE -1007D01589980101 0000000000000000 6CB773611DCA9ADA -9107911589980101 0000000000000000 67FD21C17DBB5D70 -9107D01589190101 0000000000000000 9592CB4110430787 -1007D01598980120 0000000000000000 A6B7FF68A318DDD3 -1007940498190101 0000000000000000 4D102196C914CA16 -0107910491190401 0000000000000000 2DFA9F4573594965 -0107910491190101 0000000000000000 B46604816C0E0774 -0107940491190401 0000000000000000 6E7E6221A4F34E87 -19079210981A0101 0000000000000000 AA85E74643233199 -1007911998190801 0000000000000000 2E5A19DB4D1962D6 -10079119981A0801 0000000000000000 23A866A809D30894 -1007921098190101 0000000000000000 D812D961F017D320 -100791159819010B 0000000000000000 055605816E58608F -1004801598190101 0000000000000000 ABD88E8B1B7716F1 -1004801598190102 0000000000000000 537AC95BE69DA1E1 -1004801598190108 0000000000000000 AED0F6AE3C25CDD8 -1002911598100104 0000000000000000 B3E35A5EE53E7B8D -1002911598190104 0000000000000000 61C79C71921A2EF8 -1002911598100201 0000000000000000 E2F5728F0995013C -1002911698100101 0000000000000000 1AEAC39A61F0A464 -7CA110454A1A6E57 01A1D6D039776742 690F5B0D9A26939B -0131D9619DC1376E 5CD54CA83DEF57DA 7A389D10354BD271 -07A1133E4A0B2686 0248D43806F67172 868EBB51CAB4599A -3849674C2602319E 51454B582DDF440A 7178876E01F19B2A -04B915BA43FEB5B6 42FD443059577FA2 AF37FB421F8C4095 -0113B970FD34F2CE 059B5E0851CF143A 86A560F10EC6D85B -0170F175468FB5E6 0756D8E0774761D2 0CD3DA020021DC09 -43297FAD38E373FE 762514B829BF486A EA676B2CB7DB2B7A -07A7137045DA2A16 3BDD119049372802 DFD64A815CAF1A0F -04689104C2FD3B2F 26955F6835AF609A 5C513C9C4886C088 -37D06BB516CB7546 164D5E404F275232 0A2AEEAE3FF4AB77 -1F08260D1AC2465E 6B056E18759F5CCA EF1BF03E5DFA575A -584023641ABA6176 004BD6EF09176062 88BF0DB6D70DEE56 -025816164629B007 480D39006EE762F2 A1F9915541020B56 -49793EBC79B3258F 437540C8698F3CFA 6FBF1CAFCFFD0556 -4FB05E1515AB73A7 072D43A077075292 2F22E49BAB7CA1AC -49E95D6D4CA229BF 02FE55778117F12A 5A6B612CC26CCE4A -018310DC409B26D6 1D9D5C5018F728C2 5F4C038ED12B2E41 -1C587F1C13924FEF 305532286D6F295A 63FAC0D034D9F793 diff --git a/src/lib/crypto/des/string2key.c b/src/lib/crypto/des/string2key.c deleted file mode 100644 index 0ce413685..000000000 --- a/src/lib/crypto/des/string2key.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * lib/crypto/des/des_s2k.c - * - * Copyright 2004, 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Compute encryption key from salt and pass phrase. - */ - -#include "k5-int.h" -#include "des_int.h" - -krb5_error_code -mit_des_string_to_key_int (krb5_keyblock *key, - const krb5_data *pw, const krb5_data *salt) -{ - union { - /* 8 "forward" bytes, 8 "reverse" bytes */ - unsigned char uc[16]; - krb5_ui_4 ui[4]; - mit_des_cblock cb; - } temp; - unsigned int i; - krb5_ui_4 x, y, z; - unsigned char *p; - des_key_schedule sched; - char *copy; - size_t copylen; - - /* As long as the architecture is big-endian or little-endian, it - doesn't matter which it is. Think of it as reversing the - bytes, and also reversing the bits within each byte. But this - current algorithm is dependent on having four 8-bit char values - exactly overlay a 32-bit integral type. */ - if (sizeof(temp.uc) != sizeof(temp.ui) - || (unsigned char)~0 != 0xFF - || (krb5_ui_4)~(krb5_ui_4)0 != 0xFFFFFFFF - || (temp.uc[0] = 1, temp.uc[1] = 2, temp.uc[2] = 3, temp.uc[3] = 4, - !(temp.ui[0] == 0x01020304 - || temp.ui[0] == 0x04030201))) - abort(); -#define FETCH4(VAR, IDX) VAR = temp.ui[IDX/4] -#define PUT4(VAR, IDX) temp.ui[IDX/4] = VAR - - if (salt - && (salt->length == SALT_TYPE_AFS_LENGTH - /* XXX Yuck! Aren't we done with this yet? */ - || salt->length == (unsigned) -1)) { - krb5_data afssalt; - char *at; - - afssalt.data = salt->data; - at = strchr(afssalt.data, '@'); - if (at) { - *at = 0; - afssalt.length = at - afssalt.data; - } else - afssalt.length = strlen(afssalt.data); - return mit_afs_string_to_key(key, pw, &afssalt); - } - - copylen = pw->length + (salt ? salt->length : 0); - /* Don't need NUL termination, at this point we're treating it as - a byte array, not a string. */ - copy = malloc(copylen); - if (copy == NULL) - return ENOMEM; - memcpy(copy, pw->data, pw->length); - if (salt) - memcpy(copy + pw->length, salt->data, salt->length); - - memset(&temp, 0, sizeof(temp)); - p = temp.uc; - /* Handle the fan-fold xor operation by splitting the data into - forward and reverse sections, and combine them later, rather - than having to do the reversal over and over again. */ - for (i = 0; i < copylen; i++) { - *p++ ^= copy[i]; - if (p == temp.uc+16) { - p = temp.uc; -#ifdef PRINT_TEST_VECTORS - { - int j; - printf("after %d input bytes:\nforward block:\t", i+1); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\nreverse block:\t"); - for (j = 8; j < 16; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif - } - } - -#ifdef PRINT_TEST_VECTORS - if (p != temp.uc) { - int j; - printf("at end, after %d input bytes:\nforward block:\t", i); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\nreverse block:\t"); - for (j = 8; j < 16; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif -#if 0 - /* Algorithm described in Dr. Dobbs Journal 1983, reported in "bit - twiddling hacks" web page collected by Sean Eron Anderson; see - http://graphics.stanford.edu/~seander/bithacks.html for - details. - - Avoids loops, uses 7*lg(N)=35 ops instead of 4*N=128 for the - obvious mask, ior, shift, shift sequence of each 32-bit - quantity. - - If we could rely on 64-bit math, another 7 ops would save us - from having to do double the work. */ -#define REVERSE_STEP(VAR, SHIFT, MASK) \ - VAR = ((VAR >> SHIFT) & MASK) | ((VAR << SHIFT) & (0xFFFFFFFFUL & ~MASK)) -#define REVERSE(VAR) \ - REVERSE_STEP (VAR, 1, 0x55555555UL); /* swap odd/even bits */ \ - REVERSE_STEP (VAR, 2, 0x33333333UL); /* swap bitpairs */ \ - REVERSE_STEP (VAR, 4, 0x0F0F0F0FUL); /* swap nibbles, etc */ \ - REVERSE_STEP (VAR, 8, 0x00FF00FFUL); \ - REVERSE_STEP (VAR, 16, 0x0000FFFFUL); -#else /* shorter */ -#define REVERSE(VAR) \ - { \ - krb5_ui_4 old = VAR, temp1 = 0; \ - int j; \ - for (j = 0; j < 32; j++) { \ - temp1 = (temp1 << 1) | (old & 1); \ - old >>= 1; \ - } \ - VAR = temp1; \ - } -#endif - - FETCH4 (x, 8); - FETCH4 (y, 12); - /* Ignore high bits of each input byte. */ - x &= 0x7F7F7F7F; - y &= 0x7F7F7F7F; - /* Reverse the bit strings -- after this, y is "before" x. */ - REVERSE (x); - REVERSE (y); -#ifdef PRINT_TEST_VECTORS - { - int j; - union { unsigned char uc[4]; krb5_ui_4 ui; } t2; - printf("after reversal, reversed block:\n\t\t"); - t2.ui = y; - for (j = 0; j < 4; j++) - printf(" %02x", t2.uc[j] & 0xff); - t2.ui = x; - for (j = 0; j < 4; j++) - printf(" %02x", t2.uc[j] & 0xff); - printf("\n"); - } -#endif - /* Ignored bits are now at the bottom of each byte, where we'll - put the parity bits. Good. */ - FETCH4 (z, 0); - z &= 0x7F7F7F7F; - /* Ignored bits for z are at the top of each byte; fix that. */ - z <<= 1; - /* Finish the fan-fold xor for these four bytes. */ - z ^= y; - PUT4 (z, 0); - /* Now do the second four bytes. */ - FETCH4 (z, 4); - z &= 0x7F7F7F7F; - /* Ignored bits for z are at the top of each byte; fix that. */ - z <<= 1; - /* Finish the fan-fold xor for these four bytes. */ - z ^= x; - PUT4 (z, 4); - -#ifdef PRINT_TEST_VECTORS - { - int j; - printf("after reversal, combined block:\n\t\t"); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif - -#define FIXUP(K) \ - (mit_des_fixup_key_parity(K), \ - mit_des_is_weak_key(K) ? (K[7] ^= 0xF0) : 0) - - /* Now temp.cb is the temporary key, with invalid parity. */ - FIXUP(temp.cb); - -#ifdef PRINT_TEST_VECTORS - { - int j; - printf("after fixing parity and weak keys:\n\t\t"); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif - - mit_des_key_sched(temp.cb, sched); - mit_des_cbc_cksum(copy, temp.cb, copylen, sched, temp.cb); - - memset(copy, 0, copylen); - free(copy); - -#ifdef PRINT_TEST_VECTORS - { - int j; - printf("cbc checksum:\n\t\t"); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif - - memset(sched, 0, sizeof(sched)); - FIXUP (temp.cb); - -#ifdef PRINT_TEST_VECTORS - { - int j; - printf("after fixing parity and weak keys:\n\t\t"); - for (j = 0; j < 8; j++) - printf(" %02x", temp.uc[j] & 0xff); - printf("\n"); - } -#endif - - memcpy(key->contents, temp.cb, 8); - memset(&temp, 0, sizeof(temp)); - - return 0; -} diff --git a/src/lib/crypto/des/t_afss2k.c b/src/lib/crypto/des/t_afss2k.c deleted file mode 100644 index a6d0aa58d..000000000 --- a/src/lib/crypto/des/t_afss2k.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "des_int.h" - -static const char *me; - -struct test_case { - char *saltstr; - int saltlen; - unsigned char keys[12][8]; -}; - -struct test_case test_cases[] = { - { - "Sodium Chloride", -1, - { - { 0xa4, 0xd0, 0xd0, 0x9b, 0x86, 0x92, 0xb0, 0xc2, }, - { 0xf1, 0xf2, 0x9e, 0xab, 0xd0, 0xef, 0xdf, 0x73, }, - { 0xd6, 0x85, 0x61, 0xc4, 0xf2, 0x94, 0xf4, 0xa1, }, - { 0xd0, 0xe3, 0xa7, 0x83, 0x94, 0x61, 0xe0, 0xd0, }, - { 0xd5, 0x62, 0xcd, 0x94, 0x61, 0xcb, 0x97, 0xdf, }, - { 0x9e, 0xa2, 0xa2, 0xec, 0xa8, 0x8c, 0x6b, 0x8f, }, - { 0xe3, 0x91, 0x6d, 0xd3, 0x85, 0xf1, 0x67, 0xc4, }, - { 0xf4, 0xc4, 0x73, 0xc8, 0x8a, 0xe9, 0x94, 0x6d, }, - { 0xa1, 0x9e, 0xb3, 0xad, 0x6b, 0xe3, 0xab, 0xd9, }, - { 0xad, 0xa1, 0xce, 0x10, 0x37, 0x83, 0xa7, 0x8c, }, - { 0xd3, 0x01, 0xd0, 0xf7, 0x3e, 0x7a, 0x49, 0x0b, }, - { 0xb6, 0x2a, 0x4a, 0xec, 0x9d, 0x4c, 0x68, 0xdf, }, - } - }, - { - "NaCl", 4, - { - { 0x61, 0xef, 0xe6, 0x83, 0xe5, 0x8a, 0x6b, 0x98 }, - { 0x68, 0xcd, 0x68, 0xad, 0xc4, 0x86, 0xcd, 0xe5 }, - { 0x83, 0xa1, 0xc8, 0x86, 0x8f, 0x67, 0xd0, 0x62 }, - { 0x9e, 0xc7, 0x8f, 0xa4, 0xa4, 0xb3, 0xe0, 0xd5 }, - { 0xd9, 0x92, 0x86, 0x8f, 0x9d, 0x8c, 0x85, 0xe6 }, - { 0xda, 0xf2, 0x92, 0x83, 0xf4, 0x9b, 0xa7, 0xad }, - { 0x91, 0xcd, 0xad, 0xef, 0x86, 0xdf, 0xd3, 0xa2 }, - { 0x73, 0xd3, 0x67, 0x68, 0x8f, 0x6e, 0xe3, 0x73 }, - { 0xc4, 0x61, 0x85, 0x9d, 0xad, 0xf4, 0xdc, 0xb0 }, - { 0xe9, 0x02, 0x83, 0x16, 0x2c, 0xec, 0xe0, 0x08 }, - { 0x61, 0xc8, 0x26, 0x29, 0xd9, 0x73, 0x6e, 0xb6 }, - { 0x8c, 0xa8, 0x9e, 0xc4, 0xa8, 0xdc, 0x31, 0x73 }, - } - }, - { - /* This one intentionally supplies a length shorter - than the string. The point of this is to ensure - that s[len] is not zero, so that anything actually - relying on that value (i.e., reading out of bounds) - should generate incorrect results. */ - "NaCl2", 4, - { - { 0x61, 0xef, 0xe6, 0x83, 0xe5, 0x8a, 0x6b, 0x98 }, - { 0x68, 0xcd, 0x68, 0xad, 0xc4, 0x86, 0xcd, 0xe5 }, - { 0x83, 0xa1, 0xc8, 0x86, 0x8f, 0x67, 0xd0, 0x62 }, - { 0x9e, 0xc7, 0x8f, 0xa4, 0xa4, 0xb3, 0xe0, 0xd5 }, - { 0xd9, 0x92, 0x86, 0x8f, 0x9d, 0x8c, 0x85, 0xe6 }, - { 0xda, 0xf2, 0x92, 0x83, 0xf4, 0x9b, 0xa7, 0xad }, - { 0x91, 0xcd, 0xad, 0xef, 0x86, 0xdf, 0xd3, 0xa2 }, - { 0x73, 0xd3, 0x67, 0x68, 0x8f, 0x6e, 0xe3, 0x73 }, - { 0xc4, 0x61, 0x85, 0x9d, 0xad, 0xf4, 0xdc, 0xb0 }, - { 0xe9, 0x02, 0x83, 0x16, 0x2c, 0xec, 0xe0, 0x08 }, - { 0x61, 0xc8, 0x26, 0x29, 0xd9, 0x73, 0x6e, 0xb6 }, - { 0x8c, 0xa8, 0x9e, 0xc4, 0xa8, 0xdc, 0x31, 0x73 }, - } - }, -}; - -static void do_it (struct test_case *tcase); - -int -main (int argc, char *argv[]) -{ - int i; - - me = argv[0]; - for (i = 0; i < sizeof (test_cases) / sizeof (struct test_case); i++) - do_it (&test_cases[i]); - return 0; -} - -static void -do_it (struct test_case *tcase) -{ - unsigned char keydata[8]; - krb5_data salt, passwd; - krb5_keyblock key; - krb5_error_code err; - int i; - unsigned char longpass[2048]; - - key.contents = keydata; - key.length = sizeof (keydata); - - salt.data = tcase->saltstr; - if (tcase->saltlen == -1) - salt.length = strlen (tcase->saltstr); - else - salt.length = tcase->saltlen; - - /* - * Try passwords with lengths equal to, greater than, and less - * than 8 characters, since the AFS s2k algorithm does - * interesting stuff depending on the length. - */ - passwd.data = "My Password"; - for (i = 0; i < 12; i++) { - passwd.length = i; - err = mit_afs_string_to_key (&key, &passwd, &salt); - if (err != 0) { - com_err (me, err, ""); - exit (1); - } - if (memcmp (tcase->keys[i], keydata, 8) != 0) - abort (); - } - - /* Run another pass to make sure the characters after the - password in the buffer aren't influencing the output. The - password is *not* required to be null-terminated. */ - memset (longpass, '!', sizeof (longpass)); - longpass[sizeof (longpass)-1] = '\0'; - memcpy (longpass, "My Password", strlen ("My Password")); - passwd.data = (char *) longpass; - for (i = 0; i < 12; i++) { - passwd.length = i; - err = mit_afs_string_to_key (&key, &passwd, &salt); - if (err != 0) { - com_err (me, err, ""); - exit (1); - } - if (memcmp (tcase->keys[i], keydata, 8) != 0) - abort (); - } -} diff --git a/src/lib/crypto/des/t_verify.c b/src/lib/crypto/des/t_verify.c deleted file mode 100644 index a6ad07cb8..000000000 --- a/src/lib/crypto/des/t_verify.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * lib/crypto/des/verify.c - * - * Copyright 1988, 1990 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Program to test the correctness of the DES library - * implementation. - * - * exit returns 0 ==> success - * -1 ==> error - */ - -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include -#include "com_err.h" - -static void do_encrypt(unsigned char *, unsigned char *); -static void do_decrypt(unsigned char *, unsigned char *); - -char *progname; -int nflag = 2; -int vflag; -int mflag; -int zflag; -int pid; -int mit_des_debug; - -unsigned char cipher_text[64]; -unsigned char clear_text[64] = "Now is the time for all " ; -unsigned char clear_text2[64] = "7654321 Now is the time for "; -unsigned char clear_text3[64] = {2,0,0,0, 1,0,0,0}; -unsigned char output[64]; -unsigned char zero_text[8] = {0x0,0,0,0,0,0,0,0}; -unsigned char msb_text[8] = {0x0,0,0,0, 0,0,0,0x40}; /* to ANSI MSB */ -unsigned char *input; - -/* 0x0123456789abcdef */ -unsigned char default_key[8] = { - 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef -}; -unsigned char key2[8] = { 0x08,0x19,0x2a,0x3b,0x4c,0x5d,0x6e,0x7f }; -unsigned char key3[8] = { 0x80,1,1,1,1,1,1,1 }; -mit_des_cblock s_key; -unsigned char default_ivec[8] = { - 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef -}; -unsigned char *ivec; -unsigned char zero_key[8] = {1,1,1,1,1,1,1,1}; /* just parity bits */ - -unsigned char cipher1[8] = { - 0x25,0xdd,0xac,0x3e,0x96,0x17,0x64,0x67 -}; -unsigned char cipher2[8] = { - 0x3f,0xa4,0x0e,0x8a,0x98,0x4d,0x48,0x15 -}; -unsigned char cipher3[64] = { - 0xe5,0xc7,0xcd,0xde,0x87,0x2b,0xf2,0x7c, - 0x43,0xe9,0x34,0x00,0x8c,0x38,0x9c,0x0f, - 0x68,0x37,0x88,0x49,0x9a,0x7c,0x05,0xf6 -}; -unsigned char checksum[8] = { - 0x58,0xd2,0xe7,0x7e,0x86,0x06,0x27,0x33 -}; - -unsigned char zresult[8] = { - 0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7 -}; - -unsigned char mresult[8] = { - 0xa3, 0x80, 0xe0, 0x2a, 0x6b, 0xe5, 0x46, 0x96 -}; - - -/* - * Can also add : - * plaintext = 0, key = 0, cipher = 0x8ca64de9c1b123a7 (or is it a 1?) - */ - -mit_des_key_schedule sched; - -int -main(argc,argv) - int argc; - char *argv[]; -{ - /* Local Declarations */ - size_t in_length; - int retval; - int i, j; - -#ifdef WINDOWS - /* Set screen window buffer to infinite size -- MS default is tiny. */ - _wsetscreenbuf (fileno (stdout), _WINBUFINF); -#endif - progname=argv[0]; /* salt away invoking program */ - - while (--argc > 0 && (*++argv)[0] == '-') - for (i=1; argv[0][i] != '\0'; i++) { - switch (argv[0][i]) { - - /* debug flag */ - case 'd': - mit_des_debug=3; - continue; - - case 'z': - zflag = 1; - continue; - - case 'm': - mflag = 1; - continue; - - default: - printf("%s: illegal flag \"%c\" ", - progname,argv[0][i]); - exit(1); - } - }; - - if (argc) { - fprintf(stderr, "Usage: %s [-dmz]\n", progname); - exit(1); - } - - /* do some initialisation */ - - /* use known input and key */ - - /* ECB zero text zero key */ - if (zflag) { - input = zero_text; - mit_des_key_sched(zero_key, sched); - printf("plaintext = key = 0, cipher = 0x8ca64de9c1b123a7\n"); - do_encrypt(input,cipher_text); - printf("\tcipher = (low to high bytes)\n\t\t"); - for (j = 0; j<=7; j++) - printf("%02x ",cipher_text[j]); - printf("\n"); - do_decrypt(output,cipher_text); - if ( memcmp((char *)cipher_text, (char *)zresult, 8) ) { - printf("verify: error in zero key test\n"); - exit(-1); - } - - exit(0); - } - - if (mflag) { - input = msb_text; - mit_des_key_sched(key3, sched); - printf("plaintext = 0x00 00 00 00 00 00 00 40, "); - printf("key = 0x80 01 01 01 01 01 01 01\n"); - printf(" cipher = 0xa380e02a6be54696\n"); - do_encrypt(input,cipher_text); - printf("\tcipher = (low to high bytes)\n\t\t"); - for (j = 0; j<=7; j++) { - printf("%02x ",cipher_text[j]); - } - printf("\n"); - do_decrypt(output,cipher_text); - if ( memcmp((char *)cipher_text, (char *)mresult, 8) ) { - printf("verify: error in msb test\n"); - exit(-1); - } - exit(0); - } - - /* ECB mode Davies and Price */ - { - input = zero_text; - mit_des_key_sched(key2, sched); - printf("Examples per FIPS publication 81, keys ivs and cipher\n"); - printf("in hex. These are the correct answers, see below for\n"); - printf("the actual answers.\n\n"); - printf("Examples per Davies and Price.\n\n"); - printf("EXAMPLE ECB\tkey = 08192a3b4c5d6e7f\n"); - printf("\tclear = 0\n"); - printf("\tcipher = 25 dd ac 3e 96 17 64 67\n"); - printf("ACTUAL ECB\n"); - printf("\tclear \"%s\"\n", input); - do_encrypt(input,cipher_text); - printf("\tcipher = (low to high bytes)\n\t\t"); - for (j = 0; j<=7; j++) - printf("%02x ",cipher_text[j]); - printf("\n\n"); - do_decrypt(output,cipher_text); - if ( memcmp((char *)cipher_text, (char *)cipher1, 8) ) { - printf("verify: error in ECB encryption\n"); - exit(-1); - } - else - printf("verify: ECB encryption is correct\n\n"); - } - - /* ECB mode */ - { - mit_des_key_sched(default_key, sched); - input = clear_text; - ivec = default_ivec; - printf("EXAMPLE ECB\tkey = 0123456789abcdef\n"); - printf("\tclear = \"Now is the time for all \"\n"); - printf("\tcipher = 3f a4 0e 8a 98 4d 48 15 ...\n"); - printf("ACTUAL ECB\n\tclear \"%s\"",input); - do_encrypt(input,cipher_text); - printf("\n\tcipher = (low to high bytes)\n\t\t"); - for (j = 0; j<=7; j++) { - printf("%02x ",cipher_text[j]); - } - printf("\n\n"); - do_decrypt(output,cipher_text); - if ( memcmp((char *)cipher_text, (char *)cipher2, 8) ) { - printf("verify: error in ECB encryption\n"); - exit(-1); - } - else - printf("verify: ECB encryption is correct\n\n"); - } - - /* CBC mode */ - printf("EXAMPLE CBC\tkey = 0123456789abcdef"); - printf("\tiv = 1234567890abcdef\n"); - printf("\tclear = \"Now is the time for all \"\n"); - printf("\tcipher =\te5 c7 cd de 87 2b f2 7c\n"); - printf("\t\t\t43 e9 34 00 8c 38 9c 0f\n"); - printf("\t\t\t68 37 88 49 9a 7c 05 f6\n"); - - printf("ACTUAL CBC\n\tclear \"%s\"\n",input); - in_length = strlen((char *)input); - if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) input, - (mit_des_cblock *) cipher_text, - (size_t) in_length, - sched, - ivec, - MIT_DES_ENCRYPT))) { - com_err("des verify", retval, "can't encrypt"); - exit(-1); - } - printf("\tciphertext = (low to high bytes)\n"); - for (i = 0; i <= 2; i++) { - printf("\t\t"); - for (j = 0; j <= 7; j++) { - printf("%02x ",cipher_text[i*8+j]); - } - printf("\n"); - } - if ((retval = mit_des_cbc_encrypt((const mit_des_cblock *) cipher_text, - (mit_des_cblock *) clear_text, - (size_t) in_length, - sched, - ivec, - MIT_DES_DECRYPT))) { - com_err("des verify", retval, "can't decrypt"); - exit(-1); - } - printf("\tdecrypted clear_text = \"%s\"\n",clear_text); - - if ( memcmp((char *)cipher_text, (char *)cipher3, in_length) ) { - printf("verify: error in CBC encryption\n"); - exit(-1); - } - else - printf("verify: CBC encryption is correct\n\n"); - - printf("EXAMPLE CBC checksum"); - printf("\tkey = 0123456789abcdef\tiv = 1234567890abcdef\n"); - printf("\tclear =\t\t\"7654321 Now is the time for \"\n"); - printf("\tchecksum\t58 d2 e7 7e 86 06 27 33, "); - printf("or some part thereof\n"); - input = clear_text2; - mit_des_cbc_cksum(input,cipher_text, strlen((char *)input), - sched,ivec); - printf("ACTUAL CBC checksum\n"); - printf("\t\tencrypted cksum = (low to high bytes)\n\t\t"); - for (j = 0; j<=7; j++) - printf("%02x ",cipher_text[j]); - printf("\n\n"); - if ( memcmp((char *)cipher_text, (char *)checksum, 8) ) { - printf("verify: error in CBC cheksum\n"); - exit(-1); - } - else - printf("verify: CBC checksum is correct\n\n"); - - exit(0); -} - -#if 0 -void -flip(array) - char *array; -{ - register int old,new,i,j; - /* flips the bit order within each byte from 0 lsb to 0 msb */ - for (i = 0; i<=7; i++) { - old = *array; - new = 0; - for (j = 0; j<=7; j++) { - if (old & 01) - new = new | 01; - if (j < 7) { - old = old >> 1; - new = new << 1; - } - } - *array = new; - array++; - } -} -#endif - -static void -do_encrypt(in,out) - unsigned char *in; - unsigned char *out; -{ - int i, j; - for (i =1; i<=nflag; i++) { - mit_des_cbc_encrypt((const mit_des_cblock *)in, - (mit_des_cblock *)out, - 8, - sched, - zero_text, - MIT_DES_ENCRYPT); - if (mit_des_debug) { - printf("\nclear %s\n",in); - for (j = 0; j<=7; j++) - printf("%02X ",in[j] & 0xff); - printf("\tcipher "); - for (j = 0; j<=7; j++) - printf("%02X ",out[j] & 0xff); - } - } -} - -static void -do_decrypt(in,out) - unsigned char *out; - unsigned char *in; - /* try to invert it */ -{ - int i, j; - for (i =1; i<=nflag; i++) { - mit_des_cbc_encrypt((const mit_des_cblock *)out, - (mit_des_cblock *)in, - 8, - sched, - zero_text, - MIT_DES_DECRYPT); - if (mit_des_debug) { - printf("clear %s\n",in); - for (j = 0; j<=7; j++) - printf("%02X ",in[j] & 0xff); - printf("\tcipher "); - for (j = 0; j<=7; j++) - printf("%02X ",out[j] & 0xff); - } - } -} - -/* - * Fake out the DES library, for the purposes of testing. - */ - -int -mit_des_is_weak_key(key) - mit_des_cblock key; -{ - return 0; /* fake it out for testing */ -} diff --git a/src/lib/crypto/des/weak_key.c b/src/lib/crypto/des/weak_key.c deleted file mode 100644 index 2eab9f543..000000000 --- a/src/lib/crypto/des/weak_key.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * lib/crypto/des/weak_key.c - * - * Copyright 1989,1990 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Under U.S. law, this software may not be exported outside the US - * without license from the U.S. Commerce department. - * - * These routines form the library interface to the DES facilities. - * - * Originally written 8/85 by Steve Miller, MIT Project Athena. - */ - -#include "k5-int.h" -#include "des_int.h" - -/* - * The following are the weak DES keys: - */ -static const mit_des_cblock weak[16] = { - /* weak keys */ - {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, - {0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe}, - {0x1f,0x1f,0x1f,0x1f,0x0e,0x0e,0x0e,0x0e}, - {0xe0,0xe0,0xe0,0xe0,0xf1,0xf1,0xf1,0xf1}, - - /* semi-weak */ - {0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe}, - {0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01}, - - {0x1f,0xe0,0x1f,0xe0,0x0e,0xf1,0x0e,0xf1}, - {0xe0,0x1f,0xe0,0x1f,0xf1,0x0e,0xf1,0x0e}, - - {0x01,0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1}, - {0xe0,0x01,0xe0,0x01,0xf1,0x01,0xf1,0x01}, - - {0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e,0xfe}, - {0xfe,0x1f,0xfe,0x1f,0xfe,0x0e,0xfe,0x0e}, - - {0x01,0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e}, - {0x1f,0x01,0x1f,0x01,0x0e,0x01,0x0e,0x01}, - - {0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1,0xfe}, - {0xfe,0xe0,0xfe,0xe0,0xfe,0xf1,0xfe,0xf1} -}; - -/* - * mit_des_is_weak_key: returns true iff key is a [semi-]weak des key. - * - * Requires: key has correct odd parity. - */ -int -mit_des_is_weak_key(mit_des_cblock key) -{ - unsigned int i; - const mit_des_cblock *weak_p = weak; - - for (i = 0; i < (sizeof(weak)/sizeof(mit_des_cblock)); i++) { - if (!memcmp(weak_p++,key,sizeof(mit_des_cblock))) - return 1; - } - - return 0; -} diff --git a/src/lib/crypto/dk/Makefile.in b/src/lib/crypto/dk/Makefile.in deleted file mode 100644 index c15978e40..000000000 --- a/src/lib/crypto/dk/Makefile.in +++ /dev/null @@ -1,55 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/dk -mydir=lib/crypto/dk -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/.. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=dk -##DOS##OBJFILE=..\$(OUTPRE)dk.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS=\ - checksum.o \ - dk_aead.o \ - dk_decrypt.o \ - dk_encrypt.o \ - derive.o \ - dk_prf.o \ - stringtokey.o - -OBJS=\ - $(OUTPRE)checksum.$(OBJEXT) \ - $(OUTPRE)dk_aead.$(OBJEXT) \ - $(OUTPRE)dk_decrypt.$(OBJEXT) \ - $(OUTPRE)dk_encrypt.$(OBJEXT) \ - $(OUTPRE)derive.$(OBJEXT) \ - $(OUTPRE)dk_prf.$(OBJEXT) \ - $(OUTPRE)stringtokey.$(OBJEXT) - -SRCS=\ - $(srcdir)/checksum.c \ - $(srcdir)/dk_aead.c \ - $(srcdir)/dk_decrypt.c \ - $(srcdir)/dk_encrypt.c \ - $(srcdir)/dk_prf.c \ - $(srcdir)/derive.c \ - $(srcdir)/stringtokey.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/dk/checksum.c b/src/lib/crypto/dk/checksum.c deleted file mode 100644 index f4b18bf0c..000000000 --- a/src/lib/crypto/dk/checksum.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "dk.h" -#include "aead.h" - -#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ - -krb5_error_code -krb5_dk_make_checksum(const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *input, krb5_data *output) -{ - int i; - const struct krb5_enc_provider *enc; - size_t blocksize, keybytes, keylength; - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data datain; - unsigned char *kcdata; - krb5_keyblock kc; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - enc = krb5_enctypes_list[i].enc; - - /* allocate and set to-be-derived keys */ - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - /* key->length will be tested in enc->encrypt - output->length will be tested in krb5_hmac */ - - if ((kcdata = (unsigned char *) malloc(keylength)) == NULL) - return(ENOMEM); - - kc.contents = kcdata; - kc.length = keylength; - - /* derive the key */ - - datain.data = (char *) constantdata; - datain.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - datain.data[4] = (char) 0x99; - - if ((ret = krb5_derive_key(enc, key, &kc, &datain)) != 0) - goto cleanup; - - /* hash the data */ - - datain = *input; - - if ((ret = krb5_hmac(hash, &kc, 1, &datain, output)) != 0) - memset(output->data, 0, output->length); - - /* ret is set correctly by the prior call */ - -cleanup: - memset(kcdata, 0, keylength); - - free(kcdata); - - return(ret); -} - -krb5_error_code -krb5int_dk_make_checksum_iov(const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_crypto_iov *data, size_t num_data, - krb5_data *output) -{ - int i; - const struct krb5_enc_provider *enc; - size_t blocksize, keybytes, keylength; - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data datain; - unsigned char *kcdata; - krb5_keyblock kc; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - enc = krb5_enctypes_list[i].enc; - - /* allocate and set to-be-derived keys */ - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - /* key->length will be tested in enc->encrypt - output->length will be tested in krb5_hmac */ - - if ((kcdata = (unsigned char *) malloc(keylength)) == NULL) - return(ENOMEM); - - kc.contents = kcdata; - kc.length = keylength; - - /* derive the key */ - - datain.data = (char *) constantdata; - datain.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - datain.data[4] = (char) 0x99; - - if ((ret = krb5_derive_key(enc, key, &kc, &datain)) != 0) - goto cleanup; - - /* hash the data */ - - if ((ret = krb5int_hmac_iov(hash, &kc, data, num_data, output)) != 0) - memset(output->data, 0, output->length); - - /* ret is set correctly by the prior call */ - -cleanup: - memset(kcdata, 0, keylength); - - free(kcdata); - - return(ret); -} - diff --git a/src/lib/crypto/dk/deps b/src/lib/crypto/dk/deps deleted file mode 100644 index e901a5483..000000000 --- a/src/lib/crypto/dk/deps +++ /dev/null @@ -1,76 +0,0 @@ -# -# Generated makefile dependencies follow. -# -checksum.so checksum.po $(OUTPRE)checksum.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/../aead.h \ - $(srcdir)/../cksumtypes.h $(srcdir)/../etypes.h checksum.c \ - dk.h -dk_aead.so dk_aead.po $(OUTPRE)dk_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h dk.h \ - dk_aead.c -dk_decrypt.so dk_decrypt.po $(OUTPRE)dk_decrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h dk.h dk_decrypt.c -dk_encrypt.so dk_encrypt.po $(OUTPRE)dk_encrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h dk.h dk_encrypt.c -dk_prf.so dk_prf.po $(OUTPRE)dk_prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - dk.h dk_prf.c -derive.so derive.po $(OUTPRE)derive.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - derive.c dk.h -stringtokey.so stringtokey.po $(OUTPRE)stringtokey.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h dk.h stringtokey.c diff --git a/src/lib/crypto/dk/derive.c b/src/lib/crypto/dk/derive.c deleted file mode 100644 index 77b05fa1a..000000000 --- a/src/lib/crypto/dk/derive.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "dk.h" - -krb5_error_code -krb5_derive_key(const struct krb5_enc_provider *enc, - const krb5_keyblock *inkey, krb5_keyblock *outkey, - const krb5_data *in_constant) -{ - size_t blocksize, keybytes, keylength, n; - unsigned char *inblockdata, *outblockdata, *rawkey; - krb5_data inblock, outblock; - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - if ((inkey->length != keylength) || - (outkey->length != keylength)) - return(KRB5_CRYPTO_INTERNAL); - - /* allocate and set up buffers */ - - if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) - return(ENOMEM); - - if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { - free(inblockdata); - return(ENOMEM); - } - - if ((rawkey = (unsigned char *) malloc(keybytes)) == NULL) { - free(outblockdata); - free(inblockdata); - return(ENOMEM); - } - - inblock.data = (char *) inblockdata; - inblock.length = blocksize; - - outblock.data = (char *) outblockdata; - outblock.length = blocksize; - - /* initialize the input block */ - - if (in_constant->length == inblock.length) { - memcpy(inblock.data, in_constant->data, inblock.length); - } else { - krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, - inblock.length*8, (unsigned char *) inblock.data); - } - - /* loop encrypting the blocks until enough key bytes are generated */ - - n = 0; - while (n < keybytes) { - (*(enc->encrypt))(inkey, 0, &inblock, &outblock); - - if ((keybytes - n) <= outblock.length) { - memcpy(rawkey+n, outblock.data, (keybytes - n)); - break; - } - - memcpy(rawkey+n, outblock.data, outblock.length); - memcpy(inblock.data, outblock.data, outblock.length); - n += outblock.length; - } - - /* postprocess the key */ - - inblock.data = (char *) rawkey; - inblock.length = keybytes; - - (*(enc->make_key))(&inblock, outkey); - - /* clean memory, free resources and exit */ - - memset(inblockdata, 0, blocksize); - memset(outblockdata, 0, blocksize); - memset(rawkey, 0, keybytes); - - free(rawkey); - free(outblockdata); - free(inblockdata); - - return(0); -} - - -krb5_error_code -krb5_derive_random(const struct krb5_enc_provider *enc, - const krb5_keyblock *inkey, krb5_data *outrnd, - const krb5_data *in_constant) -{ - size_t blocksize, keybytes, keylength, n; - unsigned char *inblockdata, *outblockdata, *rawkey; - krb5_data inblock, outblock; - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - if ((inkey->length != keylength) || - (outrnd->length != keybytes)) - return(KRB5_CRYPTO_INTERNAL); - - /* allocate and set up buffers */ - - if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) - return(ENOMEM); - - if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { - free(inblockdata); - return(ENOMEM); - } - - if ((rawkey = (unsigned char *) malloc(keybytes)) == NULL) { - free(outblockdata); - free(inblockdata); - return(ENOMEM); - } - - inblock.data = (char *) inblockdata; - inblock.length = blocksize; - - outblock.data = (char *) outblockdata; - outblock.length = blocksize; - - /* initialize the input block */ - - if (in_constant->length == inblock.length) { - memcpy(inblock.data, in_constant->data, inblock.length); - } else { - krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, - inblock.length*8, (unsigned char *) inblock.data); - } - - /* loop encrypting the blocks until enough key bytes are generated */ - - n = 0; - while (n < keybytes) { - (*(enc->encrypt))(inkey, 0, &inblock, &outblock); - - if ((keybytes - n) <= outblock.length) { - memcpy(rawkey+n, outblock.data, (keybytes - n)); - break; - } - - memcpy(rawkey+n, outblock.data, outblock.length); - memcpy(inblock.data, outblock.data, outblock.length); - n += outblock.length; - } - - /* postprocess the key */ - - memcpy (outrnd->data, rawkey, keybytes); - - /* clean memory, free resources and exit */ - - memset(inblockdata, 0, blocksize); - memset(outblockdata, 0, blocksize); - memset(rawkey, 0, keybytes); - - free(rawkey); - free(outblockdata); - free(inblockdata); - - return(0); -} - -#if 0 -#include "etypes.h" -void -krb5_random2key (krb5_enctype enctype, krb5_data *inblock, - krb5_keyblock *outkey) -{ - int i; - const struct krb5_enc_provider *enc; - - for (i=0; imake_key (inblock, outkey); -} -#endif diff --git a/src/lib/crypto/dk/dk.h b/src/lib/crypto/dk/dk.h deleted file mode 100644 index bc40134ef..000000000 --- a/src/lib/crypto/dk/dk.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -void krb5_dk_encrypt_length -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t input, size_t *length); - -krb5_error_code krb5_dk_encrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, krb5_data *output); - -void krb5int_aes_encrypt_length -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t input, size_t *length); - -krb5_error_code krb5int_aes_dk_encrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, krb5_data *output); - -krb5_error_code krb5_dk_decrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); - -krb5_error_code krb5int_aes_dk_decrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); - -krb5_error_code krb5int_dk_string_to_key -(const struct krb5_enc_provider *enc, - const krb5_data *string, const krb5_data *salt, - const krb5_data *params, krb5_keyblock *key); - -krb5_error_code -krb5int_dk_prf(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, const krb5_data *in, krb5_data *out); - -krb5_error_code krb5_derive_key -(const struct krb5_enc_provider *enc, - const krb5_keyblock *inkey, - krb5_keyblock *outkey, const krb5_data *in_constant); - -krb5_error_code krb5_dk_make_checksum -(const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *input, krb5_data *output); - -krb5_error_code -krb5int_dk_make_checksum_iov(const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_crypto_iov *data, size_t num_data, - krb5_data *output); - -krb5_error_code -krb5_derive_random(const struct krb5_enc_provider *enc, - const krb5_keyblock *inkey, krb5_data *outrnd, - const krb5_data *in_constant); - -/* AEAD */ - -extern const struct krb5_aead_provider krb5int_aead_dk; -extern const struct krb5_aead_provider krb5int_aead_aes; - -/* CCM */ - -void -krb5int_ccm_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length); - -extern const struct krb5_aead_provider krb5int_aead_ccm; - -krb5_error_code krb5int_ccm_encrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); - -krb5_error_code krb5int_ccm_decrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); diff --git a/src/lib/crypto/dk/dk_aead.c b/src/lib/crypto/dk/dk_aead.c deleted file mode 100644 index e995f9ae6..000000000 --- a/src/lib/crypto/dk/dk_aead.c +++ /dev/null @@ -1,386 +0,0 @@ -/* - * lib/crypto/dk/dk_aead.c - * - * Copyright 2008, 2009 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - - -#include "k5-int.h" -#include "dk.h" -#include "aead.h" - -#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ - -/* AEAD */ - -static krb5_error_code -krb5int_dk_crypto_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - krb5_cryptotype type, - unsigned int *length) -{ - switch (type) { - case KRB5_CRYPTO_TYPE_HEADER: - case KRB5_CRYPTO_TYPE_PADDING: - *length = enc->block_size; - break; - case KRB5_CRYPTO_TYPE_TRAILER: - case KRB5_CRYPTO_TYPE_CHECKSUM: - *length = hash->hashsize; - break; - default: - assert(0 && "invalid cryptotype passed to krb5int_dk_crypto_length"); - break; - } - - return 0; -} - -static krb5_error_code -krb5int_dk_encrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data d1, d2; - krb5_crypto_iov *header, *trailer, *padding; - krb5_keyblock ke, ki; - size_t i; - unsigned int blocksize = 0; - unsigned int plainlen = 0; - unsigned int hmacsize = 0; - unsigned int padsize = 0; - unsigned char *cksum = NULL; - - ke.contents = ki.contents = NULL; - ke.length = ki.length = 0; - - /* E(Confounder | Plaintext | Pad) | Checksum */ - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); - if (ret != 0) - return ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &hmacsize); - if (ret != 0) - return ret; - - for (i = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - if (iov->flags == KRB5_CRYPTO_TYPE_DATA) - plainlen += iov->data.length; - } - - /* Validate header and trailer lengths. */ - - header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); - if (header == NULL || header->data.length < enc->block_size) - return KRB5_BAD_MSIZE; - - trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); - if (trailer == NULL || trailer->data.length < hmacsize) - return KRB5_BAD_MSIZE; - - if (blocksize != 0) { - /* Check that the input data is correctly padded */ - if (plainlen % blocksize) - padsize = blocksize - (plainlen % blocksize); - } - - padding = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_PADDING); - if (padsize && (padding == NULL || padding->data.length < padsize)) - return KRB5_BAD_MSIZE; - - if (padding != NULL) { - memset(padding->data.data, 0, padsize); - padding->data.length = padsize; - } - - ke.length = enc->keylength; - ke.contents = malloc(ke.length); - if (ke.contents == NULL) { - ret = ENOMEM; - goto cleanup; - } - ki.length = enc->keylength; - ki.contents = malloc(ki.length); - if (ki.contents == NULL) { - ret = ENOMEM; - goto cleanup; - } - cksum = (unsigned char *)malloc(hash->hashsize); - if (cksum == NULL) { - ret = ENOMEM; - goto cleanup; - } - - /* derive the keys */ - - d1.data = (char *)constantdata; - d1.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - d1.data[4] = 0xAA; - - ret = krb5_derive_key(enc, key, &ke, &d1); - if (ret != 0) - goto cleanup; - - d1.data[4] = 0x55; - - ret = krb5_derive_key(enc, key, &ki, &d1); - if (ret != 0) - goto cleanup; - - /* generate confounder */ - - header->data.length = enc->block_size; - - ret = krb5_c_random_make_octets(/* XXX */ NULL, &header->data); - if (ret != 0) - goto cleanup; - - /* hash the plaintext */ - d2.length = hash->hashsize; - d2.data = (char *)cksum; - - ret = krb5int_hmac_iov(hash, &ki, data, num_data, &d2); - if (ret != 0) - goto cleanup; - - /* encrypt the plaintext (header | data | padding) */ - assert(enc->encrypt_iov != NULL); - - ret = enc->encrypt_iov(&ke, ivec, data, num_data); /* will update ivec */ - if (ret != 0) - goto cleanup; - - /* possibly truncate the hash */ - assert(hmacsize <= d2.length); - - memcpy(trailer->data.data, cksum, hmacsize); - trailer->data.length = hmacsize; - -cleanup: - if (ke.contents != NULL) { - memset(ke.contents, 0, ke.length); - free(ke.contents); - } - if (ki.contents != NULL) { - memset(ki.contents, 0, ki.length); - free(ki.contents); - } - if (cksum != NULL) { - free(cksum); - } - - return ret; -} - -static krb5_error_code -krb5int_dk_decrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data d1; - krb5_crypto_iov *header, *trailer; - krb5_keyblock ke, ki; - size_t i; - unsigned int blocksize = 0; /* careful, this is enc block size not confounder len */ - unsigned int cipherlen = 0; - unsigned int hmacsize = 0; - unsigned char *cksum = NULL; - - if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { - return krb5int_c_iov_decrypt_stream(aead, enc, hash, key, - usage, ivec, data, num_data); - } - - ke.contents = ki.contents = NULL; - ke.length = ki.length = 0; - - /* E(Confounder | Plaintext | Pad) | Checksum */ - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); - if (ret != 0) - return ret; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &hmacsize); - if (ret != 0) - return ret; - - for (i = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_DATA_IOV(iov)) - cipherlen += iov->data.length; - } - - if (blocksize == 0) { - /* Check for correct input length in CTS mode */ - if (enc->block_size != 0 && cipherlen < enc->block_size) - return KRB5_BAD_MSIZE; - } else { - /* Check that the input data is correctly padded */ - if ((cipherlen % blocksize) != 0) - return KRB5_BAD_MSIZE; - } - - /* Validate header and trailer lengths */ - - header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); - if (header == NULL || header->data.length != enc->block_size) - return KRB5_BAD_MSIZE; - - trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); - if (trailer == NULL || trailer->data.length != hmacsize) - return KRB5_BAD_MSIZE; - - ke.length = enc->keylength; - ke.contents = malloc(ke.length); - if (ke.contents == NULL) { - ret = ENOMEM; - goto cleanup; - } - ki.length = enc->keylength; - ki.contents = malloc(ki.length); - if (ki.contents == NULL) { - ret = ENOMEM; - goto cleanup; - } - cksum = (unsigned char *)malloc(hash->hashsize); - if (cksum == NULL) { - ret = ENOMEM; - goto cleanup; - } - - /* derive the keys */ - - d1.data = (char *)constantdata; - d1.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - d1.data[4] = 0xAA; - - ret = krb5_derive_key(enc, key, &ke, &d1); - if (ret != 0) - goto cleanup; - - d1.data[4] = 0x55; - - ret = krb5_derive_key(enc, key, &ki, &d1); - if (ret != 0) - goto cleanup; - - /* decrypt the plaintext (header | data | padding) */ - assert(enc->decrypt_iov != NULL); - - ret = enc->decrypt_iov(&ke, ivec, data, num_data); /* will update ivec */ - if (ret != 0) - goto cleanup; - - /* verify the hash */ - d1.length = hash->hashsize; /* non-truncated length */ - d1.data = (char *)cksum; - - ret = krb5int_hmac_iov(hash, &ki, data, num_data, &d1); - if (ret != 0) - goto cleanup; - - /* compare only the possibly truncated length */ - if (memcmp(cksum, trailer->data.data, hmacsize) != 0) { - ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto cleanup; - } - -cleanup: - if (ke.contents != NULL) { - memset(ke.contents, 0, ke.length); - free(ke.contents); - } - if (ki.contents != NULL) { - memset(ki.contents, 0, ki.length); - free(ki.contents); - } - if (cksum != NULL) { - free(cksum); - } - - return ret; -} - -const struct krb5_aead_provider krb5int_aead_dk = { - krb5int_dk_crypto_length, - krb5int_dk_encrypt_iov, - krb5int_dk_decrypt_iov -}; - -static krb5_error_code -krb5int_aes_crypto_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - krb5_cryptotype type, - unsigned int *length) -{ - switch (type) { - case KRB5_CRYPTO_TYPE_HEADER: - *length = enc->block_size; - break; - case KRB5_CRYPTO_TYPE_PADDING: - *length = 0; - break; - case KRB5_CRYPTO_TYPE_TRAILER: - case KRB5_CRYPTO_TYPE_CHECKSUM: - *length = 96 / 8; - break; - default: - assert(0 && "invalid cryptotype passed to krb5int_aes_crypto_length"); - break; - } - - return 0; -} - -const struct krb5_aead_provider krb5int_aead_aes = { - krb5int_aes_crypto_length, - krb5int_dk_encrypt_iov, - krb5int_dk_decrypt_iov -}; - diff --git a/src/lib/crypto/dk/dk_decrypt.c b/src/lib/crypto/dk/dk_decrypt.c deleted file mode 100644 index c38c4d5bf..000000000 --- a/src/lib/crypto/dk/dk_decrypt.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "dk.h" - -#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ - -static krb5_error_code -krb5_dk_decrypt_maybe_trunc_hmac(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, - krb5_data *output, - size_t hmacsize, - int ivec_mode); - -krb5_error_code -krb5_dk_decrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - return krb5_dk_decrypt_maybe_trunc_hmac(enc, hash, key, usage, - ivec, input, output, 0, 0); -} - -krb5_error_code -krb5int_aes_dk_decrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - return krb5_dk_decrypt_maybe_trunc_hmac(enc, hash, key, usage, - ivec, input, output, 96 / 8, 1); -} - -static krb5_error_code -krb5_dk_decrypt_maybe_trunc_hmac(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output, size_t hmacsize, - int ivec_mode) -{ - krb5_error_code ret; - size_t hashsize, blocksize, keybytes, keylength, enclen, plainlen; - unsigned char *plaindata, *kedata, *kidata, *cksum, *cn; - krb5_keyblock ke, ki; - krb5_data d1, d2; - unsigned char constantdata[K5CLENGTH]; - - /* allocate and set up ciphertext and to-be-derived keys */ - - hashsize = hash->hashsize; - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - - if (hmacsize == 0) - hmacsize = hashsize; - else if (hmacsize > hashsize) - return KRB5KRB_AP_ERR_BAD_INTEGRITY; - - enclen = input->length - hmacsize; - - if ((kedata = (unsigned char *) malloc(keylength)) == NULL) - return(ENOMEM); - if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { - free(kedata); - return(ENOMEM); - } - if ((plaindata = (unsigned char *) malloc(enclen)) == NULL) { - free(kidata); - free(kedata); - return(ENOMEM); - } - if ((cksum = (unsigned char *) malloc(hashsize)) == NULL) { - free(plaindata); - free(kidata); - free(kedata); - return(ENOMEM); - } - - ke.contents = kedata; - ke.length = keylength; - ki.contents = kidata; - ki.length = keylength; - - /* derive the keys */ - - d1.data = (char *) constantdata; - d1.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - d1.data[4] = (char) 0xAA; - - if ((ret = krb5_derive_key(enc, key, &ke, &d1)) != 0) - goto cleanup; - - d1.data[4] = 0x55; - - if ((ret = krb5_derive_key(enc, key, &ki, &d1)) != 0) - goto cleanup; - - /* decrypt the ciphertext */ - - d1.length = enclen; - d1.data = input->data; - - d2.length = enclen; - d2.data = (char *) plaindata; - - if ((ret = ((*(enc->decrypt))(&ke, ivec, &d1, &d2))) != 0) - goto cleanup; - - if (ivec != NULL && ivec->length == blocksize) { - if (ivec_mode == 0) - cn = (unsigned char *) d1.data + d1.length - blocksize; - else if (ivec_mode == 1) { - int nblocks = (d1.length + blocksize - 1) / blocksize; - cn = d1.data + blocksize * (nblocks - 2); - } else - abort(); - } else - cn = NULL; - - /* verify the hash */ - - d1.length = hashsize; - d1.data = (char *) cksum; - - if ((ret = krb5_hmac(hash, &ki, 1, &d2, &d1)) != 0) - goto cleanup; - - if (memcmp(cksum, input->data+enclen, hmacsize) != 0) { - ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto cleanup; - } - - /* because this encoding isn't self-describing wrt length, the - best we can do here is to compute the length minus the - confounder. */ - - plainlen = enclen - blocksize; - - if (output->length < plainlen) - return(KRB5_BAD_MSIZE); - - output->length = plainlen; - - memcpy(output->data, d2.data+blocksize, output->length); - - if (cn != NULL) - memcpy(ivec->data, cn, blocksize); - - ret = 0; - -cleanup: - memset(kedata, 0, keylength); - memset(kidata, 0, keylength); - memset(plaindata, 0, enclen); - memset(cksum, 0, hashsize); - - free(cksum); - free(plaindata); - free(kidata); - free(kedata); - - return(ret); -} - diff --git a/src/lib/crypto/dk/dk_encrypt.c b/src/lib/crypto/dk/dk_encrypt.c deleted file mode 100644 index 6596e53ce..000000000 --- a/src/lib/crypto/dk/dk_encrypt.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "dk.h" - -#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ - -/* the spec says that the confounder size and padding are specific to - the encryption algorithm. This code (dk_encrypt_length and - dk_encrypt) assume the confounder is always the blocksize, and the - padding is always zero bytes up to the blocksize. If these - assumptions ever fails, the keytype table should be extended to - include these bits of info. */ - -void -krb5_dk_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length) -{ - size_t blocksize, hashsize; - - blocksize = enc->block_size; - hashsize = hash->hashsize; - *length = krb5_roundup(blocksize+inputlen, blocksize) + hashsize; -} - -krb5_error_code -krb5_dk_encrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - size_t blocksize, keybytes, keylength, plainlen, enclen; - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data d1, d2; - unsigned char *plaintext, *kedata, *kidata; - char *cn; - krb5_keyblock ke, ki; - - /* allocate and set up plaintext and to-be-derived keys */ - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - plainlen = krb5_roundup(blocksize+input->length, blocksize); - - krb5_dk_encrypt_length(enc, hash, input->length, &enclen); - - /* key->length, ivec will be tested in enc->encrypt */ - - if (output->length < enclen) - return(KRB5_BAD_MSIZE); - - if ((kedata = (unsigned char *) malloc(keylength)) == NULL) - return(ENOMEM); - if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { - free(kedata); - return(ENOMEM); - } - if ((plaintext = (unsigned char *) malloc(plainlen)) == NULL) { - free(kidata); - free(kedata); - return(ENOMEM); - } - - ke.contents = kedata; - ke.length = keylength; - ki.contents = kidata; - ki.length = keylength; - - /* derive the keys */ - - d1.data = (char *) constantdata; - d1.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - d1.data[4] = (char) 0xAA; - - if ((ret = krb5_derive_key(enc, key, &ke, &d1))) - goto cleanup; - - d1.data[4] = 0x55; - - if ((ret = krb5_derive_key(enc, key, &ki, &d1))) - goto cleanup; - - /* put together the plaintext */ - - d1.length = blocksize; - d1.data = (char *) plaintext; - - if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &d1))) - goto cleanup; - - memcpy(plaintext+blocksize, input->data, input->length); - - memset(plaintext+blocksize+input->length, 0, - plainlen - (blocksize+input->length)); - - /* encrypt the plaintext */ - - d1.length = plainlen; - d1.data = (char *) plaintext; - - d2.length = plainlen; - d2.data = output->data; - - if ((ret = ((*(enc->encrypt))(&ke, ivec, &d1, &d2)))) - goto cleanup; - - if (ivec != NULL && ivec->length == blocksize) - cn = d2.data + d2.length - blocksize; - else - cn = NULL; - - /* hash the plaintext */ - - d2.length = enclen - plainlen; - d2.data = output->data+plainlen; - - output->length = enclen; - - if ((ret = krb5_hmac(hash, &ki, 1, &d1, &d2))) { - memset(d2.data, 0, d2.length); - goto cleanup; - } - - /* update ivec */ - if (cn != NULL) - memcpy(ivec->data, cn, blocksize); - - /* ret is set correctly by the prior call */ - -cleanup: - memset(kedata, 0, keylength); - memset(kidata, 0, keylength); - memset(plaintext, 0, plainlen); - - free(plaintext); - free(kidata); - free(kedata); - - return(ret); -} - -/* Not necessarily "AES", per se, but "a CBC+CTS mode block cipher - with a 96-bit truncated HMAC". */ -void -krb5int_aes_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length) -{ - size_t blocksize, hashsize; - - blocksize = enc->block_size; - hashsize = 96 / 8; - - /* No roundup, since CTS requires no padding once we've hit the - block size. */ - *length = blocksize+inputlen + hashsize; -} - -static krb5_error_code -trunc_hmac (const struct krb5_hash_provider *hash, - const krb5_keyblock *ki, unsigned int num, - const krb5_data *input, const krb5_data *output) -{ - size_t hashsize; - krb5_data tmp; - krb5_error_code ret; - - hashsize = hash->hashsize; - if (hashsize < output->length) - return KRB5_CRYPTO_INTERNAL; - tmp.length = hashsize; - tmp.data = malloc(hashsize); - if (tmp.data == NULL) - return ENOMEM; - ret = krb5_hmac(hash, ki, num, input, &tmp); - if (ret == 0) - memcpy(output->data, tmp.data, output->length); - memset(tmp.data, 0, hashsize); - free(tmp.data); - return ret; -} - -krb5_error_code -krb5int_aes_dk_encrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - size_t blocksize, keybytes, keylength, plainlen, enclen; - krb5_error_code ret; - unsigned char constantdata[K5CLENGTH]; - krb5_data d1, d2; - unsigned char *plaintext, *kedata, *kidata; - char *cn; - krb5_keyblock ke, ki; - - /* allocate and set up plaintext and to-be-derived keys */ - - blocksize = enc->block_size; - keybytes = enc->keybytes; - keylength = enc->keylength; - plainlen = blocksize+input->length; - - krb5int_aes_encrypt_length(enc, hash, input->length, &enclen); - - /* key->length, ivec will be tested in enc->encrypt */ - - if (output->length < enclen) - return(KRB5_BAD_MSIZE); - - if ((kedata = (unsigned char *) malloc(keylength)) == NULL) - return(ENOMEM); - if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { - free(kedata); - return(ENOMEM); - } - if ((plaintext = (unsigned char *) malloc(plainlen)) == NULL) { - free(kidata); - free(kedata); - return(ENOMEM); - } - - ke.contents = kedata; - ke.length = keylength; - ki.contents = kidata; - ki.length = keylength; - - /* derive the keys */ - - d1.data = (char *) constantdata; - d1.length = K5CLENGTH; - - store_32_be(usage, constantdata); - - d1.data[4] = (char) 0xAA; - - if ((ret = krb5_derive_key(enc, key, &ke, &d1))) - goto cleanup; - - d1.data[4] = 0x55; - - if ((ret = krb5_derive_key(enc, key, &ki, &d1))) - goto cleanup; - - /* put together the plaintext */ - - d1.length = blocksize; - d1.data = (char *) plaintext; - - if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &d1))) - goto cleanup; - - memcpy(plaintext+blocksize, input->data, input->length); - - /* Ciphertext stealing; there should be no more. */ - if (plainlen != blocksize + input->length) - abort(); - - /* encrypt the plaintext */ - - d1.length = plainlen; - d1.data = (char *) plaintext; - - d2.length = plainlen; - d2.data = output->data; - - if ((ret = ((*(enc->encrypt))(&ke, ivec, &d1, &d2)))) - goto cleanup; - - if (ivec != NULL && ivec->length == blocksize) { - int nblocks = (d2.length + blocksize - 1) / blocksize; - cn = d2.data + blocksize * (nblocks - 2); - } else - cn = NULL; - - /* hash the plaintext */ - - d2.length = enclen - plainlen; - d2.data = output->data+plainlen; - if (d2.length != 96 / 8) - abort(); - - if ((ret = trunc_hmac(hash, &ki, 1, &d1, &d2))) { - memset(d2.data, 0, d2.length); - goto cleanup; - } - - output->length = enclen; - - /* update ivec */ - if (cn != NULL) { - memcpy(ivec->data, cn, blocksize); -#if 0 - { - int i; - printf("\n%s: output:", __func__); - for (i = 0; i < output->length; i++) { - if (i % 16 == 0) - printf("\n%s: ", __func__); - printf(" %02x", i[(unsigned char *)output->data]); - } - printf("\n%s: outputIV:", __func__); - for (i = 0; i < ivec->length; i++) { - if (i % 16 == 0) - printf("\n%s: ", __func__); - printf(" %02x", i[(unsigned char *)ivec->data]); - } - printf("\n"); fflush(stdout); - } -#endif - } - - /* ret is set correctly by the prior call */ - -cleanup: - memset(kedata, 0, keylength); - memset(kidata, 0, keylength); - memset(plaintext, 0, plainlen); - - free(plaintext); - free(kidata); - free(kedata); - - return(ret); -} - diff --git a/src/lib/crypto/dk/dk_prf.c b/src/lib/crypto/dk/dk_prf.c deleted file mode 100644 index ec64caf16..000000000 --- a/src/lib/crypto/dk/dk_prf.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * lib/crypto/dk/prf.c - * - * Copyright (C) 2004 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * This file contains an implementation of the RFC 3961 PRF for - *simplified profile enctypes. - */ - -#include "k5-int.h" -#include "dk.h" - -krb5_error_code -krb5int_dk_prf (const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out) -{ - krb5_data tmp; - krb5_data prfconst; - krb5_keyblock *kp = NULL; - krb5_error_code ret = 0; - - prfconst.data = (char *) "prf"; - prfconst.length = 3; - tmp.length = hash->hashsize; - tmp.data = malloc(hash->hashsize); - if (tmp.data == NULL) - return ENOMEM; - hash->hash(1, in, &tmp); - tmp.length = (tmp.length/enc->block_size)*enc->block_size; /*truncate to block size*/ - ret = krb5int_c_init_keyblock(0, key->enctype, - key->length, &kp); - if (ret == 0) - ret = krb5_derive_key(enc, key, kp, &prfconst); - if (ret == 0) - ret = enc->encrypt(kp, NULL, &tmp, out); - if (kp) - krb5int_c_free_keyblock(0, kp); - free (tmp.data); - return ret; -} diff --git a/src/lib/crypto/dk/stringtokey.c b/src/lib/crypto/dk/stringtokey.c deleted file mode 100644 index 0e54b849f..000000000 --- a/src/lib/crypto/dk/stringtokey.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "dk.h" - -static const unsigned char kerberos[] = "kerberos"; -#define kerberos_len (sizeof(kerberos)-1) - -krb5_error_code -krb5int_dk_string_to_key(const struct krb5_enc_provider *enc, - const krb5_data *string, const krb5_data *salt, - const krb5_data *parms, krb5_keyblock *key) -{ - krb5_error_code ret; - size_t keybytes, keylength, concatlen; - unsigned char *concat, *foldstring, *foldkeydata; - krb5_data indata; - krb5_keyblock foldkey; - - /* key->length is checked by krb5_derive_key */ - - keybytes = enc->keybytes; - keylength = enc->keylength; - - concatlen = string->length+(salt?salt->length:0); - - if ((concat = (unsigned char *) malloc(concatlen)) == NULL) - return(ENOMEM); - if ((foldstring = (unsigned char *) malloc(keybytes)) == NULL) { - free(concat); - return(ENOMEM); - } - if ((foldkeydata = (unsigned char *) malloc(keylength)) == NULL) { - free(foldstring); - free(concat); - return(ENOMEM); - } - - /* construct input string ( = string + salt), fold it, make_key it */ - - memcpy(concat, string->data, string->length); - if (salt) - memcpy(concat+string->length, salt->data, salt->length); - - krb5_nfold(concatlen*8, concat, keybytes*8, foldstring); - - indata.length = keybytes; - indata.data = (char *) foldstring; - foldkey.length = keylength; - foldkey.contents = foldkeydata; - - (*(enc->make_key))(&indata, &foldkey); - - /* now derive the key from this one */ - - indata.length = kerberos_len; - indata.data = (char *) kerberos; - - if ((ret = krb5_derive_key(enc, &foldkey, key, &indata))) - memset(key->contents, 0, key->length); - - /* ret is set correctly by the prior call */ - - memset(concat, 0, concatlen); - memset(foldstring, 0, keybytes); - memset(foldkeydata, 0, keylength); - - free(foldkeydata); - free(foldstring); - free(concat); - - return(ret); -} diff --git a/src/lib/crypto/enc_provider/Makefile.in b/src/lib/crypto/enc_provider/Makefile.in deleted file mode 100644 index bb15ecf6e..000000000 --- a/src/lib/crypto/enc_provider/Makefile.in +++ /dev/null @@ -1,42 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/enc_provider -mydir=lib/crypto/enc_provider -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/../des -I$(srcdir)/../arcfour -I$(srcdir)/../aes -I$(srcdir)/.. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=enc_provider -##DOS##OBJFILE=..\$(OUTPRE)enc_prov.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= des.o des3.o rc4.o aes.o - -OBJS= \ - $(OUTPRE)des.$(OBJEXT) \ - $(OUTPRE)des3.$(OBJEXT) \ - $(OUTPRE)aes.$(OBJEXT) \ - $(OUTPRE)rc4.$(OBJEXT) - -SRCS= \ - $(srcdir)/des.c \ - $(srcdir)/des3.c \ - $(srcdir)/aes.c \ - $(srcdir)/rc4.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/enc_provider/aes.c b/src/lib/crypto/enc_provider/aes.c deleted file mode 100644 index 060d119c4..000000000 --- a/src/lib/crypto/enc_provider/aes.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * lib/crypto/enc_provider/aes.c - * - * Copyright (C) 2003, 2007, 2008 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "enc_provider.h" -#include "aes.h" -#include "../aead.h" - -#if 0 -aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); -aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); -aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); -aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); -aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); -#endif - -#define CHECK_SIZES 0 - -#if 0 -static void printd (const char *descr, krb5_data *d) { - int i, j; - const int r = 16; - - printf("%s:", descr); - - for (i = 0; i < d->length; i += r) { - printf("\n %04x: ", i); - for (j = i; j < i + r && j < d->length; j++) - printf(" %02x", 0xff & d->data[j]); -#ifdef SHOW_TEXT - for (; j < i + r; j++) - printf(" "); - printf(" "); - for (j = i; j < i + r && j < d->length; j++) { - int c = 0xff & d->data[j]; - printf("%c", isprint(c) ? c : '.'); - } -#endif - } - printf("\n"); -} -#endif - -static inline void enc(char *out, const char *in, aes_ctx *ctx) -{ - if (aes_enc_blk((const unsigned char *)in, (unsigned char *)out, ctx) - != aes_good) - abort(); -} -static inline void dec(char *out, const char *in, aes_ctx *ctx) -{ - if (aes_dec_blk((const unsigned char *)in, (unsigned char *)out, ctx) - != aes_good) - abort(); -} - -static void xorblock(char *out, const char *in) -{ - int z; - for (z = 0; z < BLOCK_SIZE; z++) - out[z] ^= in[z]; -} - -krb5_error_code -krb5int_aes_encrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - aes_ctx ctx; - char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; - int nblocks = 0, blockno; - -/* CHECK_SIZES; */ - - if (aes_enc_key(key->contents, key->length, &ctx) != aes_good) - abort(); - - if (ivec) - memcpy(tmp, ivec->data, BLOCK_SIZE); - else - memset(tmp, 0, BLOCK_SIZE); - - nblocks = (input->length + BLOCK_SIZE - 1) / BLOCK_SIZE; - - if (nblocks == 1) { - /* XXX Used for DK function. */ - enc(output->data, input->data, &ctx); - } else { - unsigned int nleft; - - for (blockno = 0; blockno < nblocks - 2; blockno++) { - xorblock(tmp, input->data + blockno * BLOCK_SIZE); - enc(tmp2, tmp, &ctx); - memcpy(output->data + blockno * BLOCK_SIZE, tmp2, BLOCK_SIZE); - - /* Set up for next block. */ - memcpy(tmp, tmp2, BLOCK_SIZE); - } - /* Do final CTS step for last two blocks (the second of which - may or may not be incomplete). */ - xorblock(tmp, input->data + (nblocks - 2) * BLOCK_SIZE); - enc(tmp2, tmp, &ctx); - nleft = input->length - (nblocks - 1) * BLOCK_SIZE; - memcpy(output->data + (nblocks - 1) * BLOCK_SIZE, tmp2, nleft); - memcpy(tmp, tmp2, BLOCK_SIZE); - - memset(tmp3, 0, sizeof(tmp3)); - memcpy(tmp3, input->data + (nblocks - 1) * BLOCK_SIZE, nleft); - xorblock(tmp, tmp3); - enc(tmp2, tmp, &ctx); - memcpy(output->data + (nblocks - 2) * BLOCK_SIZE, tmp2, BLOCK_SIZE); - if (ivec) - memcpy(ivec->data, tmp2, BLOCK_SIZE); - } - - return 0; -} - -krb5_error_code -krb5int_aes_decrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - aes_ctx ctx; - char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; - int nblocks = 0, blockno; - - CHECK_SIZES; - - if (aes_dec_key(key->contents, key->length, &ctx) != aes_good) - abort(); - - if (ivec) - memcpy(tmp, ivec->data, BLOCK_SIZE); - else - memset(tmp, 0, BLOCK_SIZE); - - nblocks = (input->length + BLOCK_SIZE - 1) / BLOCK_SIZE; - - if (nblocks == 1) { - if (input->length < BLOCK_SIZE) - abort(); - dec(output->data, input->data, &ctx); - } else { - - for (blockno = 0; blockno < nblocks - 2; blockno++) { - dec(tmp2, input->data + blockno * BLOCK_SIZE, &ctx); - xorblock(tmp2, tmp); - memcpy(output->data + blockno * BLOCK_SIZE, tmp2, BLOCK_SIZE); - memcpy(tmp, input->data + blockno * BLOCK_SIZE, BLOCK_SIZE); - } - /* Do last two blocks, the second of which (next-to-last block - of plaintext) may be incomplete. */ - dec(tmp2, input->data + (nblocks - 2) * BLOCK_SIZE, &ctx); - /* Set tmp3 to last ciphertext block, padded. */ - memset(tmp3, 0, sizeof(tmp3)); - memcpy(tmp3, input->data + (nblocks - 1) * BLOCK_SIZE, - input->length - (nblocks - 1) * BLOCK_SIZE); - /* Set tmp2 to last (possibly partial) plaintext block, and - save it. */ - xorblock(tmp2, tmp3); - memcpy(output->data + (nblocks - 1) * BLOCK_SIZE, tmp2, - input->length - (nblocks - 1) * BLOCK_SIZE); - /* Maybe keep the trailing part, and copy in the last - ciphertext block. */ - memcpy(tmp2, tmp3, input->length - (nblocks - 1) * BLOCK_SIZE); - /* Decrypt, to get next to last plaintext block xor previous - ciphertext. */ - dec(tmp3, tmp2, &ctx); - xorblock(tmp3, tmp); - memcpy(output->data + (nblocks - 2) * BLOCK_SIZE, tmp3, BLOCK_SIZE); - if (ivec) - memcpy(ivec->data, input->data + (nblocks - 2) * BLOCK_SIZE, - BLOCK_SIZE); - } - - return 0; -} - -static krb5_error_code -krb5int_aes_encrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - aes_ctx ctx; - char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE]; - int nblocks = 0, blockno; - size_t input_length, i; - - if (aes_enc_key(key->contents, key->length, &ctx) != aes_good) - abort(); - - if (ivec != NULL) - memcpy(tmp, ivec->data, BLOCK_SIZE); - else - memset(tmp, 0, BLOCK_SIZE); - - for (i = 0, input_length = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_IOV(iov)) - input_length += iov->data.length; - } - - nblocks = (input_length + BLOCK_SIZE - 1) / BLOCK_SIZE; - - assert(nblocks > 1); - - { - char blockN2[BLOCK_SIZE]; /* second last */ - char blockN1[BLOCK_SIZE]; /* last block */ - struct iov_block_state input_pos, output_pos; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - for (blockno = 0; blockno < nblocks - 2; blockno++) { - char blockN[BLOCK_SIZE]; - - krb5int_c_iov_get_block((unsigned char *)blockN, BLOCK_SIZE, data, num_data, &input_pos); - xorblock(tmp, blockN); - enc(tmp2, tmp, &ctx); - krb5int_c_iov_put_block(data, num_data, (unsigned char *)tmp2, BLOCK_SIZE, &output_pos); - - /* Set up for next block. */ - memcpy(tmp, tmp2, BLOCK_SIZE); - } - - /* Do final CTS step for last two blocks (the second of which - may or may not be incomplete). */ - - /* First, get the last two blocks */ - memset(blockN1, 0, sizeof(blockN1)); /* pad last block with zeros */ - krb5int_c_iov_get_block((unsigned char *)blockN2, BLOCK_SIZE, data, num_data, &input_pos); - krb5int_c_iov_get_block((unsigned char *)blockN1, BLOCK_SIZE, data, num_data, &input_pos); - - /* Encrypt second last block */ - xorblock(tmp, blockN2); - enc(tmp2, tmp, &ctx); - memcpy(blockN2, tmp2, BLOCK_SIZE); /* blockN2 now contains first block */ - memcpy(tmp, tmp2, BLOCK_SIZE); - - /* Encrypt last block */ - xorblock(tmp, blockN1); - enc(tmp2, tmp, &ctx); - memcpy(blockN1, tmp2, BLOCK_SIZE); - - /* Put the last two blocks back into the iovec (reverse order) */ - krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN1, BLOCK_SIZE, &output_pos); - krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN2, BLOCK_SIZE, &output_pos); - - if (ivec != NULL) - memcpy(ivec->data, blockN1, BLOCK_SIZE); - } - - return 0; -} - -static krb5_error_code -krb5int_aes_decrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - aes_ctx ctx; - char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; - int nblocks = 0, blockno; - unsigned int i; - size_t input_length; - - CHECK_SIZES; - - if (aes_dec_key(key->contents, key->length, &ctx) != aes_good) - abort(); - - if (ivec != NULL) - memcpy(tmp, ivec->data, BLOCK_SIZE); - else - memset(tmp, 0, BLOCK_SIZE); - - for (i = 0, input_length = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_IOV(iov)) - input_length += iov->data.length; - } - - nblocks = (input_length + BLOCK_SIZE - 1) / BLOCK_SIZE; - - assert(nblocks > 1); - - { - char blockN2[BLOCK_SIZE]; /* second last */ - char blockN1[BLOCK_SIZE]; /* last block */ - struct iov_block_state input_pos, output_pos; - - IOV_BLOCK_STATE_INIT(&input_pos); - IOV_BLOCK_STATE_INIT(&output_pos); - - for (blockno = 0; blockno < nblocks - 2; blockno++) { - char blockN[BLOCK_SIZE]; - - krb5int_c_iov_get_block((unsigned char *)blockN, BLOCK_SIZE, data, num_data, &input_pos); - dec(tmp2, blockN, &ctx); - xorblock(tmp2, tmp); - krb5int_c_iov_put_block(data, num_data, (unsigned char *)tmp2, BLOCK_SIZE, &output_pos); - memcpy(tmp, blockN, BLOCK_SIZE); - } - - /* Do last two blocks, the second of which (next-to-last block - of plaintext) may be incomplete. */ - - /* First, get the last two encrypted blocks */ - memset(blockN1, 0, sizeof(blockN1)); /* pad last block with zeros */ - krb5int_c_iov_get_block((unsigned char *)blockN2, BLOCK_SIZE, data, num_data, &input_pos); - krb5int_c_iov_get_block((unsigned char *)blockN1, BLOCK_SIZE, data, num_data, &input_pos); - - /* Decrypt second last block */ - dec(tmp2, blockN2, &ctx); - /* Set tmp2 to last (possibly partial) plaintext block, and - save it. */ - xorblock(tmp2, blockN1); - memcpy(blockN2, tmp2, BLOCK_SIZE); - - /* Maybe keep the trailing part, and copy in the last - ciphertext block. */ - input_length %= BLOCK_SIZE; - memcpy(tmp2, blockN1, input_length ? input_length : BLOCK_SIZE); - dec(tmp3, tmp2, &ctx); - xorblock(tmp3, tmp); - /* Copy out ivec first before we clobber blockN1 with plaintext */ - if (ivec != NULL) - memcpy(ivec->data, blockN1, BLOCK_SIZE); - memcpy(blockN1, tmp3, BLOCK_SIZE); - - /* Put the last two blocks back into the iovec */ - krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN1, BLOCK_SIZE, &output_pos); - krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN2, BLOCK_SIZE, &output_pos); - } - - return 0; -} - -static krb5_error_code -k5_aes_make_key(const krb5_data *randombits, krb5_keyblock *key) -{ - if (key->length != 16 && key->length != 32) - return(KRB5_BAD_KEYSIZE); - if (randombits->length != key->length) - return(KRB5_CRYPTO_INTERNAL); - - key->magic = KV5M_KEYBLOCK; - - memcpy(key->contents, randombits->data, randombits->length); - return(0); -} - -static krb5_error_code -krb5int_aes_init_state (const krb5_keyblock *key, krb5_keyusage usage, - krb5_data *state) -{ - state->length = 16; - state->data = (void *) malloc(16); - if (state->data == NULL) - return ENOMEM; - memset(state->data, 0, state->length); - return 0; -} - -const struct krb5_enc_provider krb5int_enc_aes128 = { - 16, - 16, 16, - krb5int_aes_encrypt, - krb5int_aes_decrypt, - k5_aes_make_key, - krb5int_aes_init_state, - krb5int_default_free_state, - krb5int_aes_encrypt_iov, - krb5int_aes_decrypt_iov -}; - -const struct krb5_enc_provider krb5int_enc_aes256 = { - 16, - 32, 32, - krb5int_aes_encrypt, - krb5int_aes_decrypt, - k5_aes_make_key, - krb5int_aes_init_state, - krb5int_default_free_state, - krb5int_aes_encrypt_iov, - krb5int_aes_decrypt_iov -}; - diff --git a/src/lib/crypto/enc_provider/deps b/src/lib/crypto/enc_provider/deps deleted file mode 100644 index 44c1e722b..000000000 --- a/src/lib/crypto/enc_provider/deps +++ /dev/null @@ -1,48 +0,0 @@ -# -# Generated makefile dependencies follow. -# -des.so des.po $(OUTPRE)des.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h $(srcdir)/../des/des_int.h \ - des.c enc_provider.h -des3.so des3.po $(OUTPRE)des3.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h $(srcdir)/../des/des_int.h \ - des3.c -aes.so aes.po $(OUTPRE)aes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../aes/aes.h $(srcdir)/../aes/uitypes.h \ - $(srcdir)/../cksumtypes.h aes.c enc_provider.h -rc4.so rc4.po $(OUTPRE)rc4.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../aead.h $(srcdir)/../arcfour/arcfour-int.h \ - $(srcdir)/../arcfour/arcfour.h $(srcdir)/../cksumtypes.h \ - enc_provider.h rc4.c diff --git a/src/lib/crypto/enc_provider/des.c b/src/lib/crypto/enc_provider/des.c deleted file mode 100644 index 547f6b976..000000000 --- a/src/lib/crypto/enc_provider/des.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include "enc_provider.h" -#include "aead.h" - -static krb5_error_code -k5_des_docrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output, int enc) -{ - mit_des_key_schedule schedule; - - /* key->enctype was checked by the caller */ - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if ((input->length%8) != 0) - return(KRB5_BAD_MSIZE); - if (ivec && (ivec->length != 8)) - return(KRB5_BAD_MSIZE); - if (input->length != output->length) - return(KRB5_BAD_MSIZE); - - switch (mit_des_key_sched(key->contents, schedule)) { - case -1: - return(KRB5DES_BAD_KEYPAR); - case -2: - return(KRB5DES_WEAK_KEY); - } - - /* this has a return value, but the code always returns zero */ - - mit_des_cbc_encrypt((krb5_pointer) input->data, - (krb5_pointer) output->data, input->length, - schedule, - (ivec - ? (const unsigned char *) ivec->data - : (const unsigned char *) mit_des_zeroblock), - enc); - - memset(schedule, 0, sizeof(schedule)); - - return(0); -} - -static krb5_error_code -k5_des_encrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - return(k5_des_docrypt(key, ivec, input, output, 1)); -} - -static krb5_error_code -k5_des_decrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - return(k5_des_docrypt(key, ivec, input, output, 0)); -} - -static krb5_error_code -k5_des_make_key(const krb5_data *randombits, krb5_keyblock *key) -{ - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if (randombits->length != 7) - return(KRB5_CRYPTO_INTERNAL); - - key->magic = KV5M_KEYBLOCK; - key->length = 8; - - /* take the seven bytes, move them around into the top 7 bits of the - 8 key bytes, then compute the parity bits */ - - memcpy(key->contents, randombits->data, randombits->length); - key->contents[7] = (((key->contents[0]&1)<<1) | ((key->contents[1]&1)<<2) | - ((key->contents[2]&1)<<3) | ((key->contents[3]&1)<<4) | - ((key->contents[4]&1)<<5) | ((key->contents[5]&1)<<6) | - ((key->contents[6]&1)<<7)); - - mit_des_fixup_key_parity(key->contents); - - return(0); -} - -static krb5_error_code -k5_des_docrypt_iov(const krb5_keyblock *key, const krb5_data *ivec, - krb5_crypto_iov *data, size_t num_data, int enc) -{ - mit_des_key_schedule schedule; - size_t input_length = 0; - unsigned int i; - - /* key->enctype was checked by the caller */ - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - - for (i = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_DATA_IOV(iov)) - input_length += iov->data.length; - } - - if ((input_length % 8) != 0) - return(KRB5_BAD_MSIZE); - if (ivec && (ivec->length != 8)) - return(KRB5_BAD_MSIZE); - - switch (mit_des_key_sched(key->contents, schedule)) { - case -1: - return(KRB5DES_BAD_KEYPAR); - case -2: - return(KRB5DES_WEAK_KEY); - } - - /* this has a return value, but the code always returns zero */ - if (enc) - krb5int_des_cbc_encrypt_iov(data, num_data, schedule, ivec ? ivec->data : NULL); - else - krb5int_des_cbc_decrypt_iov(data, num_data, schedule, ivec ? ivec->data : NULL); - - memset(schedule, 0, sizeof(schedule)); - - return(0); -} - -static krb5_error_code -k5_des_encrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - return k5_des_docrypt_iov(key, ivec, data, num_data, 1); -} - -static krb5_error_code -k5_des_decrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - return k5_des_docrypt_iov(key, ivec, data, num_data, 0); -} - -const struct krb5_enc_provider krb5int_enc_des = { - 8, - 7, 8, - k5_des_encrypt, - k5_des_decrypt, - k5_des_make_key, - krb5int_des_init_state, - krb5int_default_free_state, - k5_des_encrypt_iov, - k5_des_decrypt_iov -}; diff --git a/src/lib/crypto/enc_provider/des3.c b/src/lib/crypto/enc_provider/des3.c deleted file mode 100644 index 412c994a7..000000000 --- a/src/lib/crypto/enc_provider/des3.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include "../aead.h" - -static krb5_error_code -validate_and_schedule(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, const krb5_data *output, - mit_des3_key_schedule *schedule) -{ - /* key->enctype was checked by the caller */ - - if (key->length != 24) - return(KRB5_BAD_KEYSIZE); - if ((input->length%8) != 0) - return(KRB5_BAD_MSIZE); - if (ivec && (ivec->length != 8)) - return(KRB5_BAD_MSIZE); - if (input->length != output->length) - return(KRB5_BAD_MSIZE); - - switch (mit_des3_key_sched(*(mit_des3_cblock *)key->contents, - *schedule)) { - case -1: - return(KRB5DES_BAD_KEYPAR); - case -2: - return(KRB5DES_WEAK_KEY); - } - return 0; -} - -static krb5_error_code -validate_and_schedule_iov(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_crypto_iov *data, size_t num_data, - mit_des3_key_schedule *schedule) -{ - size_t i, input_length; - - for (i = 0, input_length = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_IOV(iov)) - input_length += iov->data.length; - } - - if (key->length != 24) - return(KRB5_BAD_KEYSIZE); - if ((input_length%8) != 0) - return(KRB5_BAD_MSIZE); - if (ivec && (ivec->length != 8)) - return(KRB5_BAD_MSIZE); - - switch (mit_des3_key_sched(*(mit_des3_cblock *)key->contents, - *schedule)) { - case -1: - return(KRB5DES_BAD_KEYPAR); - case -2: - return(KRB5DES_WEAK_KEY); - } - return 0; -} - -static krb5_error_code -k5_des3_encrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - mit_des3_key_schedule schedule; - krb5_error_code err; - - err = validate_and_schedule(key, ivec, input, output, &schedule); - if (err) - return err; - - /* this has a return value, but the code always returns zero */ - krb5int_des3_cbc_encrypt((krb5_pointer) input->data, - (krb5_pointer) output->data, input->length, - schedule[0], schedule[1], schedule[2], - ivec?(const unsigned char *) ivec->data:(const unsigned char *)mit_des_zeroblock); - - zap(schedule, sizeof(schedule)); - - return(0); -} - -static krb5_error_code -k5_des3_decrypt(const krb5_keyblock *key, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - mit_des3_key_schedule schedule; - krb5_error_code err; - - err = validate_and_schedule(key, ivec, input, output, &schedule); - if (err) - return err; - - /* this has a return value, but the code always returns zero */ - krb5int_des3_cbc_decrypt((krb5_pointer) input->data, - (krb5_pointer) output->data, input->length, - schedule[0], schedule[1], schedule[2], - ivec?(const unsigned char *) ivec->data:(const unsigned char *)mit_des_zeroblock); - - zap(schedule, sizeof(schedule)); - - return(0); -} - -static krb5_error_code -k5_des3_make_key(const krb5_data *randombits, krb5_keyblock *key) -{ - int i; - - if (key->length != 24) - return(KRB5_BAD_KEYSIZE); - if (randombits->length != 21) - return(KRB5_CRYPTO_INTERNAL); - - key->magic = KV5M_KEYBLOCK; - key->length = 24; - - /* take the seven bytes, move them around into the top 7 bits of the - 8 key bytes, then compute the parity bits. Do this three times. */ - - for (i=0; i<3; i++) { - memcpy(key->contents+i*8, randombits->data+i*7, 7); - key->contents[i*8+7] = (((key->contents[i*8]&1)<<1) | - ((key->contents[i*8+1]&1)<<2) | - ((key->contents[i*8+2]&1)<<3) | - ((key->contents[i*8+3]&1)<<4) | - ((key->contents[i*8+4]&1)<<5) | - ((key->contents[i*8+5]&1)<<6) | - ((key->contents[i*8+6]&1)<<7)); - - mit_des_fixup_key_parity(key->contents+i*8); - } - - return(0); -} - -static krb5_error_code -k5_des3_encrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - mit_des3_key_schedule schedule; - krb5_error_code err; - - err = validate_and_schedule_iov(key, ivec, data, num_data, &schedule); - if (err) - return err; - - /* this has a return value, but the code always returns zero */ - krb5int_des3_cbc_encrypt_iov(data, num_data, - schedule[0], schedule[1], schedule[2], - ivec != NULL ? (unsigned char *) ivec->data : NULL); - - zap(schedule, sizeof(schedule)); - - return(0); -} - -static krb5_error_code -k5_des3_decrypt_iov(const krb5_keyblock *key, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - mit_des3_key_schedule schedule; - krb5_error_code err; - - err = validate_and_schedule_iov(key, ivec, data, num_data, &schedule); - if (err) - return err; - - /* this has a return value, but the code always returns zero */ - krb5int_des3_cbc_decrypt_iov(data, num_data, - schedule[0], schedule[1], schedule[2], - ivec != NULL ? (unsigned char *) ivec->data : NULL); - - zap(schedule, sizeof(schedule)); - - return(0); -} - -const struct krb5_enc_provider krb5int_enc_des3 = { - 8, - 21, 24, - k5_des3_encrypt, - k5_des3_decrypt, - k5_des3_make_key, - krb5int_des_init_state, - krb5int_default_free_state, - k5_des3_encrypt_iov, - k5_des3_decrypt_iov -}; - diff --git a/src/lib/crypto/enc_provider/enc_provider.h b/src/lib/crypto/enc_provider/enc_provider.h deleted file mode 100644 index 92022b3c8..000000000 --- a/src/lib/crypto/enc_provider/enc_provider.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -extern const struct krb5_enc_provider krb5int_enc_des; -extern const struct krb5_enc_provider krb5int_enc_des3; -extern const struct krb5_enc_provider krb5int_enc_arcfour; -extern const struct krb5_enc_provider krb5int_enc_aes128; -extern const struct krb5_enc_provider krb5int_enc_aes256; -extern const struct krb5_enc_provider krb5int_enc_aes128_ctr; -extern const struct krb5_enc_provider krb5int_enc_aes256_ctr; - diff --git a/src/lib/crypto/enc_provider/rc4.c b/src/lib/crypto/enc_provider/rc4.c deleted file mode 100644 index b950a605b..000000000 --- a/src/lib/crypto/enc_provider/rc4.c +++ /dev/null @@ -1,271 +0,0 @@ -/* arcfour.c - * - * Copyright (c) 2000 by Computer Science Laboratory, - * Rensselaer Polytechnic Institute - * - * #include STD_DISCLAIMER - */ - -#include "k5-int.h" -#include "arcfour-int.h" -#include "enc_provider.h" -#include "../aead.h" -/* gets the next byte from the PRNG */ -#if ((__GNUC__ >= 2) ) -static __inline__ unsigned int k5_arcfour_byte(ArcfourContext *); -#else -static unsigned int k5_arcfour_byte(ArcfourContext *); -#endif /* gcc inlines*/ - -/* Initializes the context and sets the key. */ -static krb5_error_code k5_arcfour_init(ArcfourContext *ctx, const unsigned char *key, - unsigned int keylen); - -/* Encrypts/decrypts data. */ -static void k5_arcfour_crypt(ArcfourContext *ctx, unsigned char *dest, - const unsigned char *src, unsigned int len); - -/* Interface layer to kerb5 crypto layer */ -static krb5_error_code -k5_arcfour_docrypt(const krb5_keyblock *, const krb5_data *, - const krb5_data *, krb5_data *); - -/* from a random bitstrem, construct a key */ -static krb5_error_code -k5_arcfour_make_key(const krb5_data *, krb5_keyblock *); - -static const unsigned char arcfour_weakkey1[] = {0x00, 0x00, 0xfd}; -static const unsigned char arcfour_weakkey2[] = {0x03, 0xfd, 0xfc}; -static const struct { - size_t length; - const unsigned char *data; -} arcfour_weakkeys[] = { - { sizeof (arcfour_weakkey1), arcfour_weakkey1}, - { sizeof (arcfour_weakkey2), arcfour_weakkey2}, -}; - -static inline unsigned int k5_arcfour_byte(ArcfourContext * ctx) -{ - unsigned int x; - unsigned int y; - unsigned int sx, sy; - unsigned char *state; - - state = ctx->state; - x = (ctx->x + 1) & 0xff; - sx = state[x]; - y = (sx + ctx->y) & 0xff; - sy = state[y]; - ctx->x = x; - ctx->y = y; - state[y] = sx; - state[x] = sy; - return state[(sx + sy) & 0xff]; -} - -static void k5_arcfour_crypt(ArcfourContext *ctx, unsigned char *dest, - const unsigned char *src, unsigned int len) -{ - unsigned int i; - for (i = 0; i < len; i++) - dest[i] = src[i] ^ k5_arcfour_byte(ctx); -} - - -static krb5_error_code -k5_arcfour_init(ArcfourContext *ctx, const unsigned char *key, - unsigned int key_len) -{ - unsigned int t, u; - unsigned int keyindex; - unsigned int stateindex; - unsigned char* state; - unsigned int counter; - - if (key_len != 16) - return KRB5_BAD_MSIZE; /*this is probably not the correct error code - to return */ - for (counter=0; - counter < sizeof(arcfour_weakkeys)/sizeof(arcfour_weakkeys[0]); - counter++) - if (!memcmp(key, arcfour_weakkeys[counter].data, - arcfour_weakkeys[counter].length)) - return KRB5DES_WEAK_KEY; /* most certainly not the correct error */ - - state = &ctx->state[0]; - ctx->x = 0; - ctx->y = 0; - for (counter = 0; counter < 256; counter++) - state[counter] = counter; - keyindex = 0; - stateindex = 0; - for (counter = 0; counter < 256; counter++) - { - t = state[counter]; - stateindex = (stateindex + key[keyindex] + t) & 0xff; - u = state[stateindex]; - state[stateindex] = t; - state[counter] = u; - if (++keyindex >= key_len) - keyindex = 0; - } - return 0; -} - - -/* The workhorse of the arcfour system, this impliments the cipher */ -static krb5_error_code -k5_arcfour_docrypt(const krb5_keyblock *key, const krb5_data *state, - const krb5_data *input, krb5_data *output) -{ - ArcfourContext *arcfour_ctx; - ArcFourCipherState *cipher_state; - int ret; - - if (key->length != 16) - return(KRB5_BAD_KEYSIZE); - if (state && (state->length != sizeof (ArcFourCipherState))) - return(KRB5_BAD_MSIZE); - if (input->length != output->length) - return(KRB5_BAD_MSIZE); - - if (state) { - cipher_state = (ArcFourCipherState *) state->data; - arcfour_ctx=&cipher_state->ctx; - if (cipher_state->initialized == 0) { - if ((ret=k5_arcfour_init(arcfour_ctx, key->contents, key->length))) { - return ret; - } - cipher_state->initialized = 1; - } - k5_arcfour_crypt(arcfour_ctx, (unsigned char *) output->data, (const unsigned char *) input->data, input->length); - } - else { - arcfour_ctx=malloc(sizeof (ArcfourContext)); - if (arcfour_ctx == NULL) - return ENOMEM; - if ((ret=k5_arcfour_init(arcfour_ctx, key->contents, key->length))) { - free(arcfour_ctx); - return (ret); - } - k5_arcfour_crypt(arcfour_ctx, (unsigned char * ) output->data, - (const unsigned char * ) input->data, input->length); - memset(arcfour_ctx, 0, sizeof (ArcfourContext)); - free(arcfour_ctx); - } - - return 0; -} - -/* In-place encryption */ -static krb5_error_code -k5_arcfour_docrypt_iov(const krb5_keyblock *key, - const krb5_data *state, - krb5_crypto_iov *data, - size_t num_data) -{ - ArcfourContext *arcfour_ctx = NULL; - ArcFourCipherState *cipher_state = NULL; - krb5_error_code ret; - size_t i; - - if (key->length != 16) - return KRB5_BAD_KEYSIZE; - if (state != NULL && (state->length != sizeof(ArcFourCipherState))) - return KRB5_BAD_MSIZE; - - if (state != NULL) { - cipher_state = (ArcFourCipherState *)state->data; - arcfour_ctx = &cipher_state->ctx; - if (cipher_state->initialized == 0) { - ret = k5_arcfour_init(arcfour_ctx, key->contents, key->length); - if (ret != 0) - return ret; - - cipher_state->initialized = 1; - } - } else { - arcfour_ctx = (ArcfourContext *)malloc(sizeof(ArcfourContext)); - if (arcfour_ctx == NULL) - return ENOMEM; - - ret = k5_arcfour_init(arcfour_ctx, key->contents, key->length); - if (ret != 0) { - free(arcfour_ctx); - return ret; - } - } - - for (i = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_IOV(iov)) - k5_arcfour_crypt(arcfour_ctx, (unsigned char *)iov->data.data, - (const unsigned char *)iov->data.data, iov->data.length); - } - - if (state == NULL) { - memset(arcfour_ctx, 0, sizeof(ArcfourContext)); - free(arcfour_ctx); - } - - return 0; -} - -static krb5_error_code -k5_arcfour_make_key(const krb5_data *randombits, krb5_keyblock *key) -{ - if (key->length != 16) - return(KRB5_BAD_KEYSIZE); - if (randombits->length != 16) - return(KRB5_CRYPTO_INTERNAL); - - key->magic = KV5M_KEYBLOCK; - key->length = 16; - - memcpy(key->contents, randombits->data, randombits->length); - - return(0); -} - -static krb5_error_code -k5_arcfour_init_state (const krb5_keyblock *key, - krb5_keyusage keyusage, krb5_data *new_state) -{ - /* Note that we can't actually set up the state here because the key - * will change between now and when encrypt is called - * because it is data dependent. Yeah, this has strange - * properties. --SDH - */ - new_state->length = sizeof (ArcFourCipherState); - new_state->data = malloc (new_state->length); - if (new_state->data) { - memset (new_state->data, 0 , new_state->length); - /* That will set initialized to zero*/ - }else { - return (ENOMEM); - } - return 0; -} - -/* Since the arcfour cipher is identical going forwards and backwards, - we just call "docrypt" directly -*/ -const struct krb5_enc_provider krb5int_enc_arcfour = { - /* This seems to work... although I am not sure what the - implications are in other places in the kerberos library */ - 1, - /* Keysize is arbitrary in arcfour, but the constraints of the - system, and to attempt to work with the MSFT system forces us - to 16byte/128bit. Since there is no parity in the key, the - byte and length are the same. */ - 16, 16, - k5_arcfour_docrypt, - k5_arcfour_docrypt, - k5_arcfour_make_key, - k5_arcfour_init_state, /*xxx not implemented yet*/ - krb5int_default_free_state, - k5_arcfour_docrypt_iov, - k5_arcfour_docrypt_iov -}; - diff --git a/src/lib/crypto/encrypt.c b/src/lib/crypto/encrypt.c deleted file mode 100644 index a9a38aa77..000000000 --- a/src/lib/crypto/encrypt.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_encrypt(krb5_context context, const krb5_keyblock *key, - krb5_keyusage usage, const krb5_data *ivec, - const krb5_data *input, krb5_enc_data *output) -{ - int i; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - output->magic = KV5M_ENC_DATA; - output->kvno = 0; - output->enctype = key->enctype; - - if (krb5_enctypes_list[i].encrypt == NULL) { - assert(krb5_enctypes_list[i].aead != NULL); - - return krb5int_c_encrypt_aead_compat(krb5_enctypes_list[i].aead, - krb5_enctypes_list[i].enc, - krb5_enctypes_list[i].hash, - key, usage, ivec, - input, &output->ciphertext); - } - - return((*(krb5_enctypes_list[i].encrypt)) - (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, - key, usage, ivec, input, &output->ciphertext)); -} diff --git a/src/lib/crypto/encrypt_iov.c b/src/lib/crypto/encrypt_iov.c deleted file mode 100644 index a35c5b577..000000000 --- a/src/lib/crypto/encrypt_iov.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * lib/crypto/encrypt_iov.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_encrypt_iov(krb5_context context, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *cipher_state, - krb5_crypto_iov *data, - size_t num_data) -{ - int i; - const struct krb5_keytypes *ktp = NULL; - - for (i = 0; i < krb5_enctypes_length; i++) { - if (krb5_enctypes_list[i].etype == key->enctype) { - ktp = &krb5_enctypes_list[i]; - break; - } - } - - if (ktp == NULL || ktp->aead == NULL) { - return KRB5_BAD_ENCTYPE; - } - - return ktp->aead->encrypt_iov(ktp->aead, ktp->enc, ktp->hash, - key, usage, cipher_state, data, num_data); -} - diff --git a/src/lib/crypto/encrypt_length.c b/src/lib/crypto/encrypt_length.c deleted file mode 100644 index a934b2a21..000000000 --- a/src/lib/crypto/encrypt_length.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_encrypt_length(krb5_context context, krb5_enctype enctype, - size_t inputlen, size_t *length) -{ - int i; - - for (i=0; i= buflen) - return(ENOMEM); - return(0); - } - } - - return(EINVAL); -} diff --git a/src/lib/crypto/etypes.c b/src/lib/crypto/etypes.c deleted file mode 100644 index c44ee413e..000000000 --- a/src/lib/crypto/etypes.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "enc_provider.h" -#include "hash_provider.h" -#include "etypes.h" -#include "old.h" -#include "raw.h" -#include "dk.h" -#include "arcfour.h" -#include "aes_s2k.h" -#include "des/des_int.h" - -/* these will be linear searched. if they ever get big, a binary - search or hash table would be better, which means these would need - to be sorted. An array would be more efficient, but that assumes - that the keytypes are all near each other. I'd rather not make - that assumption. */ - -const struct krb5_keytypes krb5_enctypes_list[] = { - { ENCTYPE_DES_CBC_CRC, - "des-cbc-crc", { 0 }, "DES cbc mode with CRC-32", - &krb5int_enc_des, &krb5int_hash_crc32, - 16, - krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, - krb5int_des_string_to_key, - krb5int_des_prf, - CKSUMTYPE_RSA_MD5, - NULL, /*AEAD*/ - ETYPE_WEAK }, - { ENCTYPE_DES_CBC_MD4, - "des-cbc-md4", { 0 }, "DES cbc mode with RSA-MD4", - &krb5int_enc_des, &krb5int_hash_md4, - 16, - krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, - krb5int_des_string_to_key, - krb5int_des_prf, - CKSUMTYPE_RSA_MD4, - NULL, /*AEAD*/ - ETYPE_WEAK }, - { ENCTYPE_DES_CBC_MD5, - "des-cbc-md5", { "des" }, "DES cbc mode with RSA-MD5", - &krb5int_enc_des, &krb5int_hash_md5, - 16, - krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, - krb5int_des_string_to_key, - krb5int_des_prf, - CKSUMTYPE_RSA_MD5, - NULL, /*AEAD*/ - ETYPE_WEAK }, - { ENCTYPE_DES_CBC_RAW, - "des-cbc-raw", { 0 }, "DES cbc mode raw", - &krb5int_enc_des, NULL, - 16, - krb5_raw_encrypt_length, krb5_raw_encrypt, krb5_raw_decrypt, - krb5int_des_string_to_key, - krb5int_des_prf, - 0, - &krb5int_aead_raw, - ETYPE_WEAK }, - { ENCTYPE_DES3_CBC_RAW, - "des3-cbc-raw", { 0 }, "Triple DES cbc mode raw", - &krb5int_enc_des3, NULL, - 16, - krb5_raw_encrypt_length, krb5_raw_encrypt, krb5_raw_decrypt, - krb5int_dk_string_to_key, - NULL, /*PRF*/ - 0, - &krb5int_aead_raw, - ETYPE_WEAK }, - - { ENCTYPE_DES3_CBC_SHA1, - "des3-cbc-sha1", { "des3-hmac-sha1", "des3-cbc-sha1-kd" }, - "Triple DES cbc mode with HMAC/sha1", - &krb5int_enc_des3, &krb5int_hash_sha1, - 16, - krb5_dk_encrypt_length, krb5_dk_encrypt, krb5_dk_decrypt, - krb5int_dk_string_to_key, - krb5int_dk_prf, - CKSUMTYPE_HMAC_SHA1_DES3, - &krb5int_aead_dk, - 0 /*flags*/ }, - - { ENCTYPE_DES_HMAC_SHA1, - "des-hmac-sha1", { 0 }, "DES with HMAC/sha1", - &krb5int_enc_des, &krb5int_hash_sha1, - 8, - krb5_dk_encrypt_length, krb5_dk_encrypt, krb5_dk_decrypt, - krb5int_dk_string_to_key, - NULL, /*PRF*/ - 0, - NULL, - ETYPE_WEAK }, - { ENCTYPE_ARCFOUR_HMAC, - "arcfour-hmac", { "rc4-hmac", "arcfour-hmac-md5" }, - "ArcFour with HMAC/md5", - &krb5int_enc_arcfour, - &krb5int_hash_md5, - 20, - krb5_arcfour_encrypt_length, krb5_arcfour_encrypt, - krb5_arcfour_decrypt, krb5int_arcfour_string_to_key, - krb5int_arcfour_prf, /*PRF*/ - CKSUMTYPE_HMAC_MD5_ARCFOUR, - &krb5int_aead_arcfour, - 0 /*flags*/ }, - { ENCTYPE_ARCFOUR_HMAC_EXP, - "arcfour-hmac-exp", { "rc4-hmac-exp", "arcfour-hmac-md5-exp" }, - "Exportable ArcFour with HMAC/md5", - &krb5int_enc_arcfour, - &krb5int_hash_md5, - 20, - krb5_arcfour_encrypt_length, krb5_arcfour_encrypt, - krb5_arcfour_decrypt, krb5int_arcfour_string_to_key, - krb5int_arcfour_prf, /*PRF*/ - CKSUMTYPE_HMAC_MD5_ARCFOUR, - &krb5int_aead_arcfour, - ETYPE_WEAK - }, - - { ENCTYPE_AES128_CTS_HMAC_SHA1_96, - "aes128-cts-hmac-sha1-96", { "aes128-cts" }, - "AES-128 CTS mode with 96-bit SHA-1 HMAC", - &krb5int_enc_aes128, &krb5int_hash_sha1, - 16, - krb5int_aes_encrypt_length, krb5int_aes_dk_encrypt, krb5int_aes_dk_decrypt, - krb5int_aes_string_to_key, - krb5int_dk_prf, - CKSUMTYPE_HMAC_SHA1_96_AES128, - &krb5int_aead_aes, - 0 /*flags*/ }, - { ENCTYPE_AES256_CTS_HMAC_SHA1_96, - "aes256-cts-hmac-sha1-96", { "aes256-cts" }, - "AES-256 CTS mode with 96-bit SHA-1 HMAC", - &krb5int_enc_aes256, &krb5int_hash_sha1, - 16, - krb5int_aes_encrypt_length, krb5int_aes_dk_encrypt, krb5int_aes_dk_decrypt, - krb5int_aes_string_to_key, - krb5int_dk_prf, - CKSUMTYPE_HMAC_SHA1_96_AES256, - &krb5int_aead_aes, - 0 /*flags*/ }, -}; - -const int krb5_enctypes_length = -sizeof(krb5_enctypes_list)/sizeof(struct krb5_keytypes); diff --git a/src/lib/crypto/etypes.h b/src/lib/crypto/etypes.h deleted file mode 100644 index 8441fcabc..000000000 --- a/src/lib/crypto/etypes.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -typedef void (*krb5_encrypt_length_func) (const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length); - -typedef krb5_error_code (*krb5_crypt_func) (const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage keyusage, - const krb5_data *ivec, - const krb5_data *input, krb5_data *output); - -typedef krb5_error_code (*krb5_str2key_func) (const struct krb5_enc_provider *enc, const krb5_data *string, - const krb5_data *salt, const krb5_data *parm, krb5_keyblock *key); - -typedef krb5_error_code (*krb5_prf_func)( - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - const krb5_data *in, krb5_data *out); - -struct krb5_keytypes { - krb5_enctype etype; - char *name; - char *aliases[2]; - char *out_string; - const struct krb5_enc_provider *enc; - const struct krb5_hash_provider *hash; - size_t prf_length; - krb5_encrypt_length_func encrypt_len; - krb5_crypt_func encrypt; - krb5_crypt_func decrypt; - krb5_str2key_func str2key; - krb5_prf_func prf; - krb5_cksumtype required_ctype; - const struct krb5_aead_provider *aead; - krb5_flags flags; -}; - -#define ETYPE_WEAK 1 - -extern const struct krb5_keytypes krb5_enctypes_list[]; -extern const int krb5_enctypes_length; - -static inline const struct krb5_keytypes* -find_enctype (krb5_enctype enctype) -{ - int i; - for (i=0; ilength != CRC32_CKSUM_LENGTH) - return(KRB5_CRYPTO_INTERNAL); - - c = 0; - for (i=0; idata); - return(0); -} - -const struct krb5_hash_provider krb5int_hash_crc32 = { - CRC32_CKSUM_LENGTH, - 1, - k5_crc32_hash -}; diff --git a/src/lib/crypto/hash_provider/hash_md4.c b/src/lib/crypto/hash_provider/hash_md4.c deleted file mode 100644 index 1fa23c214..000000000 --- a/src/lib/crypto/hash_provider/hash_md4.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "rsa-md4.h" -#include "hash_provider.h" - -static krb5_error_code -k5_md4_hash(unsigned int icount, const krb5_data *input, - krb5_data *output) -{ - krb5_MD4_CTX ctx; - unsigned int i; - - if (output->length != RSA_MD4_CKSUM_LENGTH) - return(KRB5_CRYPTO_INTERNAL); - - krb5_MD4Init(&ctx); - for (i=0; idata, ctx.digest, RSA_MD4_CKSUM_LENGTH); - - return(0); -} - -const struct krb5_hash_provider krb5int_hash_md4 = { - RSA_MD4_CKSUM_LENGTH, - 64, - k5_md4_hash -}; diff --git a/src/lib/crypto/hash_provider/hash_md5.c b/src/lib/crypto/hash_provider/hash_md5.c deleted file mode 100644 index 174c432a4..000000000 --- a/src/lib/crypto/hash_provider/hash_md5.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "rsa-md5.h" -#include "hash_provider.h" - -static krb5_error_code -k5_md5_hash(unsigned int icount, const krb5_data *input, - krb5_data *output) -{ - krb5_MD5_CTX ctx; - unsigned int i; - - if (output->length != RSA_MD5_CKSUM_LENGTH) - return(KRB5_CRYPTO_INTERNAL); - - krb5_MD5Init(&ctx); - for (i=0; idata, ctx.digest, RSA_MD5_CKSUM_LENGTH); - - return(0); -} - -const struct krb5_hash_provider krb5int_hash_md5 = { - RSA_MD5_CKSUM_LENGTH, - 64, - k5_md5_hash -}; diff --git a/src/lib/crypto/hash_provider/hash_provider.h b/src/lib/crypto/hash_provider/hash_provider.h deleted file mode 100644 index 4fa46097d..000000000 --- a/src/lib/crypto/hash_provider/hash_provider.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -extern const struct krb5_hash_provider krb5int_hash_crc32; -extern const struct krb5_hash_provider krb5int_hash_md4; -extern const struct krb5_hash_provider krb5int_hash_md5; -extern const struct krb5_hash_provider krb5int_hash_sha1; diff --git a/src/lib/crypto/hash_provider/hash_sha1.c b/src/lib/crypto/hash_provider/hash_sha1.c deleted file mode 100644 index ffc073cf1..000000000 --- a/src/lib/crypto/hash_provider/hash_sha1.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "shs.h" -#include "hash_provider.h" - -static krb5_error_code -k5_sha1_hash(unsigned int icount, const krb5_data *input, - krb5_data *output) -{ - SHS_INFO ctx; - unsigned int i; - - if (output->length != SHS_DIGESTSIZE) - return(KRB5_CRYPTO_INTERNAL); - - shsInit(&ctx); - for (i=0; idata[i*4]); - } - - return(0); -} - -const struct krb5_hash_provider krb5int_hash_sha1 = { - SHS_DIGESTSIZE, - SHS_DATASIZE, - k5_sha1_hash -}; diff --git a/src/lib/crypto/hmac.c b/src/lib/crypto/hmac.c deleted file mode 100644 index 3bff3cf95..000000000 --- a/src/lib/crypto/hmac.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "aead.h" - -/* - * the HMAC transform looks like: - * - * H(K XOR opad, H(K XOR ipad, text)) - * - * where H is a cryptographic hash - * K is an n byte key - * ipad is the byte 0x36 repeated blocksize times - * opad is the byte 0x5c repeated blocksize times - * and text is the data being protected - */ - -krb5_error_code -krb5_hmac(const struct krb5_hash_provider *hash, const krb5_keyblock *key, - unsigned int icount, const krb5_data *input, krb5_data *output) -{ - size_t hashsize, blocksize; - unsigned char *xorkey, *ihash; - unsigned int i; - krb5_data *hashin, hashout; - krb5_error_code ret; - - hashsize = hash->hashsize; - blocksize = hash->blocksize; - - if (key->length > blocksize) - return(KRB5_CRYPTO_INTERNAL); - if (output->length < hashsize) - return(KRB5_BAD_MSIZE); - /* if this isn't > 0, then there won't be enough space in this - array to compute the outer hash */ - if (icount == 0) - return(KRB5_CRYPTO_INTERNAL); - - /* allocate space for the xor key, hash input vector, and inner hash */ - - if ((xorkey = (unsigned char *) malloc(blocksize)) == NULL) - return(ENOMEM); - if ((ihash = (unsigned char *) malloc(hashsize)) == NULL) { - free(xorkey); - return(ENOMEM); - } - if ((hashin = (krb5_data *)malloc(sizeof(krb5_data)*(icount+1))) == NULL) { - free(ihash); - free(xorkey); - return(ENOMEM); - } - - /* create the inner padded key */ - - memset(xorkey, 0x36, blocksize); - - for (i=0; ilength; i++) - xorkey[i] ^= key->contents[i]; - - /* compute the inner hash */ - - hashin[0].length = blocksize; - hashin[0].data = (char *) xorkey; - for (i=0; ihash))(icount+1, hashin, &hashout)))) - goto cleanup; - - /* create the outer padded key */ - - memset(xorkey, 0x5c, blocksize); - - for (i=0; ilength; i++) - xorkey[i] ^= key->contents[i]; - - /* compute the outer hash */ - - hashin[0].length = blocksize; - hashin[0].data = (char *) xorkey; - hashin[1] = hashout; - - output->length = hashsize; - - if ((ret = ((*(hash->hash))(2, hashin, output)))) - memset(output->data, 0, output->length); - - /* ret is set correctly by the prior call */ - -cleanup: - memset(xorkey, 0, blocksize); - memset(ihash, 0, hashsize); - - free(hashin); - free(ihash); - free(xorkey); - - return(ret); -} - -krb5_error_code -krb5int_hmac_iov(const struct krb5_hash_provider *hash, const krb5_keyblock *key, - const krb5_crypto_iov *data, size_t num_data, krb5_data *output) -{ - krb5_data *sign_data; - size_t num_sign_data; - krb5_error_code ret; - size_t i, j; - - /* Create a checksum over all the data to be signed */ - for (i = 0, num_sign_data = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (SIGN_IOV(iov)) - num_sign_data++; - } - - /* XXX cleanup to avoid alloc */ - sign_data = (krb5_data *)calloc(num_sign_data, sizeof(krb5_data)); - if (sign_data == NULL) - return ENOMEM; - - for (i = 0, j = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (SIGN_IOV(iov)) - sign_data[j++] = iov->data; - } - - /* caller must store checksum in iov as it may be TYPE_TRAILER or TYPE_CHECKSUM */ - ret = krb5_hmac(hash, key, num_sign_data, sign_data, output); - - free(sign_data); - - return ret; -} - diff --git a/src/lib/crypto/keyblocks.c b/src/lib/crypto/keyblocks.c deleted file mode 100644 index 5912c81b4..000000000 --- a/src/lib/crypto/keyblocks.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * lib/crypto/keyblocks.c - * - * Copyright (C) 2002, 2005 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * krb5_init_keyblock- a function to set up - * an empty keyblock - */ - - -#include "k5-int.h" -#include - -krb5_error_code krb5int_c_init_keyblock - (krb5_context context, krb5_enctype enctype, - size_t length, krb5_keyblock **out) -{ - krb5_keyblock *kb; - kb = malloc (sizeof(krb5_keyblock)); - assert (out); - *out = NULL; - if (!kb) { - return ENOMEM; - } - kb->magic = KV5M_KEYBLOCK; - kb->enctype = enctype; - kb->length = length; - if(length) { - kb->contents = malloc (length); - if(!kb->contents) { - free (kb); - return ENOMEM; - } - } else { - kb->contents = NULL; - } - *out = kb; - return 0; -} - - -void -krb5int_c_free_keyblock(krb5_context context, register krb5_keyblock *val) -{ - krb5int_c_free_keyblock_contents(context, val); - free(val); -} - -void -krb5int_c_free_keyblock_contents(krb5_context context, krb5_keyblock *key) -{ - if (key && key->contents) { - krb5int_zap_data (key->contents, key->length); - free(key->contents); - key->contents = 0; - } -} diff --git a/src/lib/crypto/keyed_checksum_types.c b/src/lib/crypto/keyed_checksum_types.c deleted file mode 100644 index 04aa44757..000000000 --- a/src/lib/crypto/keyed_checksum_types.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" -#include "cksumtypes.h" - -static int etype_match(krb5_enctype e1, krb5_enctype e2) -{ - int i1, i2; - - for (i1=0; i1length != 8) - return(KRB5_BAD_KEYSIZE); - if ((input->length%8) != 0) - return(KRB5_BAD_MSIZE); - if (ivec && (ivec->length != 8)) - return(KRB5_CRYPTO_INTERNAL); - if (output->length != 8) - return(KRB5_CRYPTO_INTERNAL); - - switch (mit_des_key_sched(key->contents, schedule)) { - case -1: - return(KRB5DES_BAD_KEYPAR); - case -2: - return(KRB5DES_WEAK_KEY); - } - - /* this has a return value, but it's useless to us */ - - mit_des_cbc_cksum((unsigned char *) input->data, - (unsigned char *) output->data, input->length, - schedule, - ivec? (const unsigned char *)ivec->data: - (const unsigned char *)mit_des_zeroblock); - - memset(schedule, 0, sizeof(schedule)); - - return(0); -} - -const struct krb5_keyhash_provider krb5int_keyhash_descbc = { - 8, - k5_descbc_hash, - NULL, - NULL, - NULL -}; diff --git a/src/lib/crypto/keyhash_provider/hmac_md5.c b/src/lib/crypto/keyhash_provider/hmac_md5.c deleted file mode 100644 index 34ce67169..000000000 --- a/src/lib/crypto/keyhash_provider/hmac_md5.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * lib/crypto/keyhash_provider/hmac_md5.c - * - * Copyright 2001, 2009 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Implementation of the Microsoft hmac-md5 checksum type. - * Implemented based on draft-brezak-win2k-krb-rc4-hmac-03 - */ - -#include "k5-int.h" -#include "keyhash_provider.h" -#include "arcfour-int.h" -#include "rsa-md5.h" -#include "hash_provider.h" -#include "../aead.h" - -static krb5_error_code -k5_hmac_md5_hash (const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *iv, - const krb5_data *input, krb5_data *output) -{ - krb5_keyusage ms_usage; - krb5_error_code ret; - krb5_keyblock ks; - krb5_data ds, ks_constant, md5tmp; - krb5_MD5_CTX ctx; - char t[4]; - - - ds.length = key->length; - ks.length = key->length; - ds.data = malloc(ds.length); - if (ds.data == NULL) - return ENOMEM; - ks.contents = (void *) ds.data; - - ks_constant.data = "signaturekey"; - ks_constant.length = strlen(ks_constant.data)+1; /* Including null*/ - - ret = krb5_hmac( &krb5int_hash_md5, key, 1, - &ks_constant, &ds); - if (ret) - goto cleanup; - - krb5_MD5Init (&ctx); - ms_usage = krb5int_arcfour_translate_usage (usage); - store_32_le(ms_usage, t); - krb5_MD5Update (&ctx, (unsigned char * ) &t, 4); - krb5_MD5Update (&ctx, (unsigned char *) input-> data, - (unsigned int) input->length ); - krb5_MD5Final(&ctx); - md5tmp.data = (void *) ctx.digest; - md5tmp.length = 16; - ret = krb5_hmac ( &krb5int_hash_md5, &ks, 1, &md5tmp, - output); - - cleanup: - memset(&ctx, 0, sizeof(ctx)); - memset (ks.contents, 0, ks.length); - free (ks.contents); - return ret; -} - -static krb5_error_code -k5_hmac_md5_hash_iov (const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *iv, - const krb5_crypto_iov *data, size_t num_data, - krb5_data *output) -{ - krb5_keyusage ms_usage; - krb5_error_code ret; - krb5_keyblock ks; - krb5_data ds, ks_constant, md5tmp; - krb5_MD5_CTX ctx; - char t[4]; - size_t i; - - ds.length = key->length; - ks.length = key->length; - ds.data = malloc(ds.length); - if (ds.data == NULL) - return ENOMEM; - ks.contents = (void *) ds.data; - - ks_constant.data = "signaturekey"; - ks_constant.length = strlen(ks_constant.data)+1; /* Including null*/ - - ret = krb5_hmac( &krb5int_hash_md5, key, 1, - &ks_constant, &ds); - if (ret) - goto cleanup; - - krb5_MD5Init (&ctx); - ms_usage = krb5int_arcfour_translate_usage (usage); - store_32_le(ms_usage, t); - krb5_MD5Update (&ctx, (unsigned char * ) &t, 4); - for (i = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (SIGN_IOV(iov)) - krb5_MD5Update (&ctx, (unsigned char *)iov->data.data, - (unsigned int)iov->data.length); - } - krb5_MD5Final(&ctx); - md5tmp.data = (void *) ctx.digest; - md5tmp.length = 16; - ret = krb5_hmac ( &krb5int_hash_md5, &ks, 1, &md5tmp, - output); - - cleanup: - memset(&ctx, 0, sizeof(ctx)); - memset (ks.contents, 0, ks.length); - free (ks.contents); - return ret; -} - -const struct krb5_keyhash_provider krb5int_keyhash_hmac_md5 = { - 16, - k5_hmac_md5_hash, - NULL, /*checksum again*/ - k5_hmac_md5_hash_iov, - NULL /*checksum again */ -}; diff --git a/src/lib/crypto/keyhash_provider/k5_md4des.c b/src/lib/crypto/keyhash_provider/k5_md4des.c deleted file mode 100644 index fceb58ebd..000000000 --- a/src/lib/crypto/keyhash_provider/k5_md4des.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include "rsa-md4.h" -#include "keyhash_provider.h" - -#define CONFLENGTH 8 - -/* Force acceptance of krb5-beta5 md4des checksum for now. */ -#define KRB5_MD4DES_BETA5_COMPAT - -/* des-cbc(xorkey, conf | rsa-md4(conf | data)) */ - -/* this could be done in terms of the md4 and des providers, but - that's less efficient, and there's no need for this to be generic */ - -static krb5_error_code -k5_md4des_hash(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - krb5_error_code ret; - krb5_data data; - krb5_MD4_CTX ctx; - unsigned char conf[CONFLENGTH]; - unsigned char xorkey[8]; - unsigned int i; - mit_des_key_schedule schedule; - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if (ivec) - return(KRB5_CRYPTO_INTERNAL); - if (output->length != (CONFLENGTH+RSA_MD4_CKSUM_LENGTH)) - return(KRB5_CRYPTO_INTERNAL); - - /* create the confouder */ - - data.length = CONFLENGTH; - data.data = (char *) conf; - if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &data))) - return(ret); - - /* create and schedule the encryption key */ - - memcpy(xorkey, key->contents, sizeof(xorkey)); - for (i=0; idata, - (unsigned int) input->length); - krb5_MD4Final(&ctx); - - /* construct the buffer to be encrypted */ - - memcpy(output->data, conf, CONFLENGTH); - memcpy(output->data+CONFLENGTH, ctx.digest, RSA_MD4_CKSUM_LENGTH); - - /* encrypt it, in place. this has a return value, but it's - always zero. */ - - mit_des_cbc_encrypt((krb5_pointer) output->data, - (krb5_pointer) output->data, output->length, - schedule, (const unsigned char *) mit_des_zeroblock, - 1); - - return(0); -} - -static krb5_error_code -k5_md4des_verify(const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, const krb5_data *hash, - krb5_boolean *valid) -{ - krb5_MD4_CTX ctx; - unsigned char plaintext[CONFLENGTH+RSA_MD4_CKSUM_LENGTH]; - unsigned char xorkey[8]; - unsigned int i; - mit_des_key_schedule schedule; - int compathash = 0; - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if (ivec) - return(KRB5_CRYPTO_INTERNAL); - if (hash->length != (CONFLENGTH+RSA_MD4_CKSUM_LENGTH)) { -#ifdef KRB5_MD4DES_BETA5_COMPAT - if (hash->length != RSA_MD4_CKSUM_LENGTH) - return(KRB5_CRYPTO_INTERNAL); - else - compathash = 1; -#else - return(KRB5_CRYPTO_INTERNAL); -#endif - return(KRB5_CRYPTO_INTERNAL); - } - - /* create and schedule the encryption key */ - - memcpy(xorkey, key->contents, sizeof(xorkey)); - if (!compathash) { - for (i=0; idata, - (krb5_pointer) plaintext, hash->length, - schedule, - (const unsigned char *) mit_des_zeroblock, 0); - } else { - mit_des_cbc_encrypt((krb5_pointer) hash->data, - (krb5_pointer) plaintext, hash->length, - schedule, xorkey, 0); - } - - /* hash the confounder, then the input data */ - - krb5_MD4Init(&ctx); - if (!compathash) { - krb5_MD4Update(&ctx, plaintext, CONFLENGTH); - } - krb5_MD4Update(&ctx, (unsigned char *) input->data, - (unsigned int) input->length); - krb5_MD4Final(&ctx); - - /* compare the decrypted hash to the computed one */ - - if (!compathash) { - *valid = - (memcmp(plaintext+CONFLENGTH, ctx.digest, RSA_MD4_CKSUM_LENGTH) - == 0); - } else { - *valid = - (memcmp(plaintext, ctx.digest, RSA_MD4_CKSUM_LENGTH) == 0); - } - - memset(plaintext, 0, sizeof(plaintext)); - - return(0); -} - -const struct krb5_keyhash_provider krb5int_keyhash_md4des = { - CONFLENGTH+RSA_MD4_CKSUM_LENGTH, - k5_md4des_hash, - k5_md4des_verify, - NULL, - NULL -}; diff --git a/src/lib/crypto/keyhash_provider/k5_md5des.c b/src/lib/crypto/keyhash_provider/k5_md5des.c deleted file mode 100644 index 0175c68ab..000000000 --- a/src/lib/crypto/keyhash_provider/k5_md5des.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "des_int.h" -#include "rsa-md5.h" -#include "keyhash_provider.h" - -#define CONFLENGTH 8 - -/* Force acceptance of krb5-beta5 md5des checksum for now. */ -#define KRB5_MD5DES_BETA5_COMPAT - -/* des-cbc(xorkey, conf | rsa-md5(conf | data)) */ - -/* this could be done in terms of the md5 and des providers, but - that's less efficient, and there's no need for this to be generic */ - -static krb5_error_code -k5_md5des_hash(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, - const krb5_data *input, krb5_data *output) -{ - krb5_error_code ret; - krb5_data data; - krb5_MD5_CTX ctx; - unsigned char conf[CONFLENGTH]; - unsigned char xorkey[8]; - unsigned int i; - mit_des_key_schedule schedule; - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if (ivec) - return(KRB5_CRYPTO_INTERNAL); - if (output->length != (CONFLENGTH+RSA_MD5_CKSUM_LENGTH)) - return(KRB5_CRYPTO_INTERNAL); - - /* create the confouder */ - - data.length = CONFLENGTH; - data.data = (char *) conf; - if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &data))) - return(ret); - - /* create and schedule the encryption key */ - - memcpy(xorkey, key->contents, sizeof(xorkey)); - for (i=0; idata, - (unsigned int) input->length); - krb5_MD5Final(&ctx); - - /* construct the buffer to be encrypted */ - - memcpy(output->data, conf, CONFLENGTH); - memcpy(output->data+CONFLENGTH, ctx.digest, RSA_MD5_CKSUM_LENGTH); - - /* encrypt it, in place. this has a return value, but it's - always zero. */ - - mit_des_cbc_encrypt((krb5_pointer) output->data, - (krb5_pointer) output->data, output->length, - schedule, (const unsigned char *) mit_des_zeroblock, - 1); - - return(0); -} - -static krb5_error_code -k5_md5des_verify(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, - const krb5_data *input, const krb5_data *hash, - krb5_boolean *valid) -{ - krb5_MD5_CTX ctx; - unsigned char plaintext[CONFLENGTH+RSA_MD5_CKSUM_LENGTH]; - unsigned char xorkey[8]; - unsigned int i; - mit_des_key_schedule schedule; - int compathash = 0; - - if (key->length != 8) - return(KRB5_BAD_KEYSIZE); - if (ivec) - return(KRB5_CRYPTO_INTERNAL); - if (hash->length != (CONFLENGTH+RSA_MD5_CKSUM_LENGTH)) { -#ifdef KRB5_MD5DES_BETA5_COMPAT - if (hash->length != RSA_MD5_CKSUM_LENGTH) - return(KRB5_CRYPTO_INTERNAL); - else - compathash = 1; -#else - return(KRB5_CRYPTO_INTERNAL); -#endif - } - - /* create and schedule the encryption key */ - - memcpy(xorkey, key->contents, sizeof(xorkey)); - if (!compathash) { - for (i=0; idata, - (krb5_pointer) plaintext, hash->length, - schedule, - (const unsigned char *) mit_des_zeroblock, 0); - } else { - mit_des_cbc_encrypt((krb5_pointer) hash->data, - (krb5_pointer) plaintext, hash->length, - schedule, xorkey, 0); - } - - /* hash the confounder, then the input data */ - - krb5_MD5Init(&ctx); - if (!compathash) { - krb5_MD5Update(&ctx, plaintext, CONFLENGTH); - } - krb5_MD5Update(&ctx, (unsigned char *) input->data, - (unsigned) input->length); - krb5_MD5Final(&ctx); - - /* compare the decrypted hash to the computed one */ - - if (!compathash) { - *valid = - (memcmp(plaintext+CONFLENGTH, ctx.digest, RSA_MD5_CKSUM_LENGTH) - == 0); - } else { - *valid = - (memcmp(plaintext, ctx.digest, RSA_MD5_CKSUM_LENGTH) == 0); - } - memset(plaintext, 0, sizeof(plaintext)); - - return(0); -} - -const struct krb5_keyhash_provider krb5int_keyhash_md5des = { - CONFLENGTH+RSA_MD5_CKSUM_LENGTH, - k5_md5des_hash, - k5_md5des_verify, - NULL, - NULL -}; diff --git a/src/lib/crypto/keyhash_provider/keyhash_provider.h b/src/lib/crypto/keyhash_provider/keyhash_provider.h deleted file mode 100644 index 8ac91e19d..000000000 --- a/src/lib/crypto/keyhash_provider/keyhash_provider.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -extern const struct krb5_keyhash_provider krb5int_keyhash_descbc; -extern const struct krb5_keyhash_provider krb5int_keyhash_md4des; -extern const struct krb5_keyhash_provider krb5int_keyhash_md5des; -extern const struct krb5_keyhash_provider krb5int_keyhash_hmac_md5; -extern const struct krb5_keyhash_provider krb5int_keyhash_md5_hmac; -extern const struct krb5_keyhash_provider krb5int_keyhash_aescbc_128; -extern const struct krb5_keyhash_provider krb5int_keyhash_aescbc_256; diff --git a/src/lib/crypto/keyhash_provider/md5_hmac.c b/src/lib/crypto/keyhash_provider/md5_hmac.c deleted file mode 100644 index d05b97f00..000000000 --- a/src/lib/crypto/keyhash_provider/md5_hmac.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * lib/crypto/keyhash_provider/md5_hmac.c - * - * Copyright 2001, 2009 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * Implementation of Microsoft KERB_CHECKSUM_MD5_HMAC - */ - -#include "k5-int.h" -#include "keyhash_provider.h" -#include "arcfour-int.h" -#include "rsa-md5.h" -#include "hash_provider.h" - -static krb5_error_code -k5_md5_hmac_hash (const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *iv, - const krb5_data *input, krb5_data *output) -{ - krb5_keyusage ms_usage; - krb5_MD5_CTX ctx; - unsigned char t[4]; - krb5_data ds; - - krb5_MD5Init(&ctx); - - ms_usage = krb5int_arcfour_translate_usage (usage); - store_32_le(ms_usage, t); - krb5_MD5Update(&ctx, t, sizeof(t)); - krb5_MD5Update(&ctx, (unsigned char *)input->data, input->length); - krb5_MD5Final(&ctx); - - ds.magic = KV5M_DATA; - ds.length = 16; - ds.data = (char *)ctx.digest; - - return krb5_hmac ( &krb5int_hash_md5, key, 1, &ds, output); -} - -const struct krb5_keyhash_provider krb5int_keyhash_md5_hmac = { - 16, - k5_md5_hmac_hash, - NULL /*checksum again*/ -}; - diff --git a/src/lib/crypto/keyhash_provider/t_cksum.c b/src/lib/crypto/keyhash_provider/t_cksum.c deleted file mode 100644 index 98187f7f1..000000000 --- a/src/lib/crypto/keyhash_provider/t_cksum.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * lib/crypto/md5/t_cksum.c - * - * Copyright 1995 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - */ - -/* - * t_cksum.c - Test checksum and checksum compatability for rsa-md[4,5]-des - */ - -#include "k5-int.h" - -#define MD5_K5BETA_COMPAT -#define MD4_K5BETA_COMPAT - -#if MD == 4 -extern struct krb5_keyhash_provider krb5int_keyhash_md4des; -#define khp krb5int_keyhash_md4des -#endif - -#if MD == 5 -extern struct krb5_keyhash_provider krb5int_keyhash_md5des; -#define khp krb5int_keyhash_md5des -#endif - -static void -print_checksum(text, number, message, checksum) - char *text; - int number; - char *message; - krb5_data *checksum; -{ - int i; - - printf("%s MD%d checksum(\"%s\") = ", text, number, message); - for (i=0; ilength; i++) - printf("%02x", (unsigned char) checksum->data[i]); - printf("\n"); -} - -/* - * Test the checksum verification of Old Style (tm) and correct RSA-MD[4,5]-DES - * checksums. - */ - -krb5_octet testkey[8] = { 0x45, 0x01, 0x49, 0x61, 0x58, 0x19, 0x1a, 0x3d }; - -int -main(argc, argv) - int argc; - char **argv; -{ - int msgindex; - krb5_boolean valid; - size_t length; - krb5_keyblock keyblock; - krb5_error_code kret=0; - krb5_data plaintext, newstyle_checksum; - - /* this is a terrible seed, but that's ok for the test. */ - - plaintext.length = 8; - plaintext.data = (char *) testkey; - - krb5_c_random_seed(/* XXX */ 0, &plaintext); - - keyblock.enctype = ENCTYPE_DES_CBC_CRC; - keyblock.length = sizeof(testkey); - keyblock.contents = testkey; - - length = khp.hashsize; - - newstyle_checksum.length = length; - - if (!(newstyle_checksum.data = (char *) - malloc((unsigned) newstyle_checksum.length))) { - printf("cannot get memory for new style checksum\n"); - return(ENOMEM); - } - for (msgindex = 1; msgindex < argc; msgindex++) { - plaintext.length = strlen(argv[msgindex]); - plaintext.data = argv[msgindex]; - - if ((kret = (*(khp.hash))(&keyblock, 0, 0, &plaintext, &newstyle_checksum))) { - printf("krb5_calculate_checksum choked with %d\n", kret); - break; - } - print_checksum("correct", MD, argv[msgindex], &newstyle_checksum); - - if ((kret = (*(khp.verify))(&keyblock, 0, 0, &plaintext, &newstyle_checksum, - &valid))) { - printf("verify on new checksum choked with %d\n", kret); - break; - } - if (!valid) { - printf("verify on new checksum failed\n"); - break; - } - printf("Verify succeeded for \"%s\"\n", argv[msgindex]); - - newstyle_checksum.data[0]++; - if ((kret = (*(khp.verify))(&keyblock, 0, 0, &plaintext, &newstyle_checksum, - &valid))) { - printf("verify on new checksum choked with %d\n", kret); - break; - } - if (valid) { - printf("verify on new checksum succeeded, but shouldn't have\n"); - break; - } - printf("Verify of bad checksum OK for \"%s\"\n", argv[msgindex]); - kret = 0; - } - free(newstyle_checksum.data); - if (!kret) - printf("%d tests passed successfully for MD%d checksum\n", argc-1, MD); - return(kret); -} diff --git a/src/lib/crypto/keylengths.c b/src/lib/crypto/keylengths.c deleted file mode 100644 index acd1da81b..000000000 --- a/src/lib/crypto/keylengths.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * COPYRIGHT (c) 2006 - * The Regents of the University of Michigan - * ALL RIGHTS RESERVED - * - * Permission is granted to use, copy, create derivative works - * and redistribute this software and such derivative works - * for any purpose, so long as the name of The University of - * Michigan is not used in any advertising or publicity - * pertaining to the use of distribution of this software - * without specific, written prior authorization. If the - * above copyright notice or any other identification of the - * University of Michigan is included in any copy of any - * portion of this software, then the disclaimer below must - * also be included. - * - * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION - * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY - * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF - * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING - * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE - * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE - * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING - * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN - * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGES. - */ - -#include "k5-int.h" -#include "etypes.h" - -/* - * keybytes is the number of bytes required as input to make a key, - * keylength is the length of the final key in bytes - */ -krb5_error_code KRB5_CALLCONV -krb5_c_keylengths(krb5_context context, krb5_enctype enctype, - size_t *keybytes, size_t *keylength) -{ - int i; - - if (keybytes == NULL && keylength == NULL) - return(EINVAL); - - for (i=0; ikeybytes; - if (keylength) - *keylength = krb5_enctypes_list[i].enc->keylength; - - return(0); -} diff --git a/src/lib/crypto/krb/Makefile.in b/src/lib/crypto/krb/Makefile.in new file mode 100644 index 000000000..887fa160f --- /dev/null +++ b/src/lib/crypto/krb/Makefile.in @@ -0,0 +1,253 @@ +thisconfigdir=../../.. +myfulldir=lib/crypto/krb +mydir=lib/crypto/krb +BUILDTOP=$(REL)..$(S)..$(S).. +SUBDIRS= crc32 dk enc_provider hash_provider keyhash_provider \ + old raw yarrow +LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/enc_provider -I$(srcdir)/dk \ + -I$(srcdir)/hash_provider -I$(srcdir)/keyhash_provider \ + -I$(srcdir)/old -I$(srcdir)/raw -I$(srcdir)/yarrow \ + -I$(srcdir)/../@CRYPTO_IMPL@/ -I$(srcdir)/../@CRYPTO_IMPL@/des \ + -I$(srcdir)/../@CRYPTO_IMPL@/aes -I$(srcdir)/../@CRYPTO_IMPL@/arcfour \ + -I$(srcdir)/../@CRYPTO_IMPL@/sha1 +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) +DEFS= + +##DOSBUILDTOP = ..\..\.. +##DOSLIBNAME=$(OUTPRE)crypto.lib +##DOSOBJFILE=$(OUTPRE)crypto.lst +##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst +##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + aead.o \ + block_size.o \ + cf2.o \ + checksum_length.o \ + cksumtype_to_string.o \ + cksumtypes.o \ + coll_proof_cksum.o \ + combine_keys.o \ + crypto_length.o \ + crypto_libinit.o \ + default_state.o \ + decrypt.o \ + decrypt_iov.o \ + encrypt.o \ + encrypt_iov.o \ + encrypt_length.o \ + enctype_compare.o \ + enctype_to_string.o \ + etypes.o \ + keyblocks.o \ + keyed_cksum.o \ + keyed_checksum_types.o \ + keylengths.o \ + make_checksum.o \ + make_checksum_iov.o \ + make_random_key.o \ + mandatory_sumtype.o \ + nfold.o \ + old_api_glue.o \ + prf.o \ + prng.o \ + random_to_key.o \ + state.o \ + string_to_cksumtype.o \ + string_to_enctype.o \ + string_to_key.o \ + valid_cksumtype.o \ + valid_enctype.o \ + verify_checksum.o \ + verify_checksum_iov.o + +OBJS=\ + $(OUTPRE)aead.$(OBJEXT) \ + $(OUTPRE)block_size.$(OBJEXT) \ + $(OUTPRE)cf2$(OBJEXT) \ + $(OUTPRE)checksum_length.$(OBJEXT) \ + $(OUTPRE)cksumtype_to_string.$(OBJEXT) \ + $(OUTPRE)cksumtypes.$(OBJEXT) \ + $(OUTPRE)coll_proof_cksum.$(OBJEXT) \ + $(OUTPRE)combine_keys.$(OBJEXT) \ + $(OUTPRE)crypto_length.$(OBJEXT) \ + $(OUTPRE)crypto_libinit.$(OBJEXT) \ + $(OUTPRE)default_state.$(OBJEXT) \ + $(OUTPRE)decrypt.$(OBJEXT) \ + $(OUTPRE)decrypt_iov.$(OBJEXT) \ + $(OUTPRE)encrypt.$(OBJEXT) \ + $(OUTPRE)encrypt_iov.$(OBJEXT) \ + $(OUTPRE)encrypt_length.$(OBJEXT) \ + $(OUTPRE)enctype_compare.$(OBJEXT) \ + $(OUTPRE)enctype_to_string.$(OBJEXT) \ + $(OUTPRE)etypes.$(OBJEXT) \ + $(OUTPRE)keyblocks.$(OBJEXT) \ + $(OUTPRE)keyed_cksum.$(OBJEXT) \ + $(OUTPRE)keyed_checksum_types.$(OBJEXT) \ + $(OUTPRE)keylengths.$(OBJEXT) \ + $(OUTPRE)make_checksum.$(OBJEXT) \ + $(OUTPRE)make_checksum_iov.$(OBJEXT) \ + $(OUTPRE)make_random_key.$(OBJEXT) \ + $(OUTPRE)mandatory_sumtype.$(OBJEXT) \ + $(OUTPRE)nfold.$(OBJEXT) \ + $(OUTPRE)old_api_glue.$(OBJEXT) \ + $(OUTPRE)prf.$(OBJEXT) \ + $(OUTPRE)prng.$(OBJEXT) \ + $(OUTPRE)random_to_key.$(OBJEXT) \ + $(OUTPRE)state.$(OBJEXT) \ + $(OUTPRE)string_to_cksumtype.$(OBJEXT) \ + $(OUTPRE)string_to_enctype.$(OBJEXT) \ + $(OUTPRE)string_to_key.$(OBJEXT) \ + $(OUTPRE)valid_cksumtype.$(OBJEXT) \ + $(OUTPRE)valid_enctype.$(OBJEXT) \ + $(OUTPRE)verify_checksum.$(OBJEXT) \ + $(OUTPRE)verify_checksum_iov.$(OBJEXT) + +SRCS=\ + $(srcdir)/aead.c \ + $(srcdir)/block_size.c \ + $(srcdir)/checksum_length.c \ + $(srcdir)/cksumtype_to_string.c \ + $(srcdir)/cksumtypes.c \ + $(srcdir)/coll_proof_cksum.c \ + $(srcdir)/combine_keys.c \ + $(srcdir)/crypto_length.c \ + $(srcdir)/crypto_libinit.c \ + $(srcdir)/default_state.c \ + $(srcdir)/decrypt.c \ + $(srcdir)/decrypt_iov.c \ + $(srcdir)/encrypt.c \ + $(srcdir)/encrypt_iov.c \ + $(srcdir)/encrypt_length.c \ + $(srcdir)/enctype_compare.c \ + $(srcdir)/enctype_to_string.c \ + $(srcdir)/etypes.c \ + $(srcdir)/keyblocks.c \ + $(srcdir)/keyed_cksum.c \ + $(srcdir)/keyed_checksum_types.c\ + $(srcdir)/keylengths.c \ + $(srcdir)/make_checksum.c \ + $(srcdir)/make_checksum_iov.c \ + $(srcdir)/make_random_key.c \ + $(srcdir)/mandatory_sumtype.c \ + $(srcdir)/nfold.c \ + $(srcdir)/old_api_glue.c \ + $(srcdir)/prf.c \ + $(srcdir)/cf2.c \ + $(srcdir)/prng.c \ + $(srcdir)/random_to_key.c \ + $(srcdir)/state.c \ + $(srcdir)/string_to_cksumtype.c \ + $(srcdir)/string_to_enctype.c \ + $(srcdir)/string_to_key.c \ + $(srcdir)/valid_cksumtype.c \ + $(srcdir)/valid_enctype.c \ + $(srcdir)/verify_checksum.c \ + $(srcdir)/verify_checksum_iov.c + +STOBJLISTS=crc32/OBJS.ST dk/OBJS.ST enc_provider/OBJS.ST \ + hash_provider/OBJS.ST keyhash_provider/OBJS.ST \ + old/OBJS.ST raw/OBJS.ST yarrow/OBJS.ST OBJS.ST + +SUBDIROBJLISTS=crc32/OBJS.ST dk/OBJS.ST enc_provider/OBJS.ST \ + hash_provider/OBJS.ST keyhash_provider/OBJS.ST \ + old/OBJS.ST raw/OBJS.ST yarrow/OBJS.ST OBJS.ST + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +all-windows:: + cd crc32 + @echo Making in crypto\crc32 + $(MAKE) -$(MFLAGS) + cd ..\dk + @echo Making in crypto\dk + $(MAKE) -$(MFLAGS) + cd ..\enc_provider + @echo Making in crypto\enc_provider + $(MAKE) -$(MFLAGS) + cd ..\hash_provider + @echo Making in crypto\hash_provider + $(MAKE) -$(MFLAGS) + cd ..\keyhash_provider + @echo Making in crypto\keyhash_provider + $(MAKE) -$(MFLAGS) + cd ..\old + @echo Making in crypto\old + $(MAKE) -$(MFLAGS) + cd ..\raw + @echo Making in crypto\raw + $(MAKE) -$(MFLAGS) + cd ..\yarrow + @echo Making in crypto\yarrow + $(MAKE) -$(MFLAGS) + cd .. + +clean-windows:: + cd crc32 + @echo Making in clean crypto\crc32 + $(MAKE) -$(MFLAGS) clean + cd ..\dk + @echo Making clean in crypto\dk + $(MAKE) -$(MFLAGS) clean + cd ..\enc_provider + @echo Making clean in crypto\enc_provider + $(MAKE) -$(MFLAGS) clean + cd ..\hash_provider + @echo Making clean in crypto\hash_provider + $(MAKE) -$(MFLAGS) clean + cd ..\keyhash_provider + @echo Making clean in crypto\keyhash_provider + $(MAKE) -$(MFLAGS) clean + cd ..\old + @echo Making clean in crypto\old + $(MAKE) -$(MFLAGS) clean + cd ..\raw + @echo Making clean in crypto\raw + $(MAKE) -$(MFLAGS) clean + cd ..\yarrow + @echo Making clean in crypto\yarrow + $(MAKE) -$(MFLAGS) clean + cd .. + +check-windows:: + cd crc32 + @echo Making in check crypto\crc32 + $(MAKE) -$(MFLAGS) check + cd ..\dk + @echo Making check in crypto\dk + $(MAKE) -$(MFLAGS) check + cd ..\enc_provider + @echo Making check in crypto\enc_provider + $(MAKE) -$(MFLAGS) check + cd ..\hash_provider + @echo Making check in crypto\hash_provider + $(MAKE) -$(MFLAGS) check + cd ..\keyhash_provider + @echo Making check in crypto\keyhash_provider + $(MAKE) -$(MFLAGS) check + cd ..\md4 + @echo Making check in crypto\old + $(MAKE) -$(MFLAGS) check + cd ..\raw + @echo Making check in crypto\raw + $(MAKE) -$(MFLAGS) check + cd ..\yarrow + @echo Making check in crypto\yarrow + $(MAKE) -$(MFLAGS) check + cd .. + + +@lib_frag@ +@libobj_frag@ + diff --git a/src/lib/crypto/krb/aead.c b/src/lib/crypto/krb/aead.c new file mode 100644 index 000000000..2d9a8353a --- /dev/null +++ b/src/lib/crypto/krb/aead.c @@ -0,0 +1,573 @@ +/* + * lib/crypto/aead.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "cksumtypes.h" +#include "dk.h" +#include "aead.h" + +krb5_crypto_iov * +krb5int_c_locate_iov(krb5_crypto_iov *data, + size_t num_data, + krb5_cryptotype type) +{ + size_t i; + krb5_crypto_iov *iov = NULL; + + if (data == NULL) + return NULL; + + for (i = 0; i < num_data; i++) { + if (data[i].flags == type) { + if (iov == NULL) + iov = &data[i]; + else + return NULL; /* can't appear twice */ + } + } + + return iov; +} + +static krb5_error_code +make_unkeyed_checksum_iov(const struct krb5_hash_provider *hash_provider, + const krb5_crypto_iov *data, + size_t num_data, + krb5_data *output) +{ + krb5_data *sign_data; + size_t num_sign_data; + krb5_error_code ret; + size_t i, j; + + /* Create a checksum over all the data to be signed */ + for (i = 0, num_sign_data = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (SIGN_IOV(iov)) + num_sign_data++; + } + + /* XXX cleanup to avoid alloc */ + sign_data = (krb5_data *)calloc(num_sign_data, sizeof(krb5_data)); + if (sign_data == NULL) + return ENOMEM; + + for (i = 0, j = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (SIGN_IOV(iov)) + sign_data[j++] = iov->data; + } + + ret = hash_provider->hash(num_sign_data, sign_data, output); + + free(sign_data); + + return ret; +} + +krb5_error_code +krb5int_c_make_checksum_iov(const struct krb5_cksumtypes *cksum_type, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_crypto_iov *data, + size_t num_data, + krb5_data *cksum_data) +{ + int e1, e2; + krb5_error_code ret; + + if (cksum_type->keyhash != NULL) { + /* check if key is compatible */ + + if (cksum_type->keyed_etype) { + for (e1=0; e1keyed_etype) + break; + + for (e2=0; e2enctype) + break; + + if ((e1 == krb5_enctypes_length) || + (e2 == krb5_enctypes_length) || + (krb5_enctypes_list[e1].enc != krb5_enctypes_list[e2].enc)) { + ret = KRB5_BAD_ENCTYPE; + goto cleanup; + } + } + + if (cksum_type->keyhash->hash_iov == NULL) { + return KRB5_BAD_ENCTYPE; + } + + ret = (*(cksum_type->keyhash->hash_iov))(key, usage, 0, + data, num_data, cksum_data); + } else if (cksum_type->flags & KRB5_CKSUMFLAG_DERIVE) { + ret = krb5int_dk_make_checksum_iov(cksum_type->hash, + key, usage, data, num_data, + cksum_data); + } else { + ret = make_unkeyed_checksum_iov(cksum_type->hash, data, num_data, + cksum_data); + } + + if (ret == 0) { + if (cksum_type->trunc_size) { + cksum_data->length = cksum_type->trunc_size; + } + } + +cleanup: + if (ret != 0) { + memset(cksum_data->data, 0, cksum_data->length); + } + + return ret; +} + +const struct krb5_cksumtypes * +krb5int_c_find_checksum_type(krb5_cksumtype cksumtype) +{ + size_t i; + + for (i = 0; i < krb5_cksumtypes_length; i++) { + if (krb5_cksumtypes_list[i].ctype == cksumtype) + break; + } + + if (i == krb5_cksumtypes_length) + return NULL; + + return &krb5_cksumtypes_list[i]; +} + +#ifdef DEBUG_IOV +static void +dump_block(const char *tag, + size_t i, + size_t j, + unsigned char *block, + size_t block_size) +{ + size_t k; + + printf("[%s: %d.%d] ", tag, i, j); + + for (k = 0; k < block_size; k++) + printf("%02x ", block[k] & 0xFF); + + printf("\n"); +} +#endif + +static int +process_block_p(const krb5_crypto_iov *data, + size_t num_data, + struct iov_block_state *iov_state, + size_t i) +{ + const krb5_crypto_iov *iov = &data[i]; + int process_block; + + switch (iov->flags) { + case KRB5_CRYPTO_TYPE_SIGN_ONLY: + process_block = iov_state->include_sign_only; + break; + case KRB5_CRYPTO_TYPE_PADDING: + process_block = (iov_state->pad_to_boundary == 0); + break; + case KRB5_CRYPTO_TYPE_HEADER: + process_block = (iov_state->ignore_header == 0); + break; + case KRB5_CRYPTO_TYPE_DATA: + process_block = 1; + break; + default: + process_block = 0; + break; + } + + return process_block; +} + +/* + * Returns TRUE if, having reached the end of the current buffer, + * we should pad the rest of the block with zeros. + */ +static int +pad_to_boundary_p(const krb5_crypto_iov *data, + size_t num_data, + struct iov_block_state *iov_state, + size_t i, + size_t j) +{ + /* If the pad_to_boundary flag is unset, return FALSE */ + if (iov_state->pad_to_boundary == 0) + return 0; + + /* If we haven't got any data, we need to get some */ + if (j == 0) + return 0; + + /* No boundary between adjacent buffers marked for processing */ + if (data[iov_state->iov_pos].flags == data[i].flags) + return 0; + + return 1; +} + +krb5_boolean +krb5int_c_iov_get_block(unsigned char *block, + size_t block_size, + const krb5_crypto_iov *data, + size_t num_data, + struct iov_block_state *iov_state) +{ + size_t i, j = 0; + + for (i = iov_state->iov_pos; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + size_t nbytes; + + if (!process_block_p(data, num_data, iov_state, i)) + continue; + + if (pad_to_boundary_p(data, num_data, iov_state, i, j)) + break; + + iov_state->iov_pos = i; + + nbytes = iov->data.length - iov_state->data_pos; + if (nbytes > block_size - j) + nbytes = block_size - j; + + memcpy(block + j, iov->data.data + iov_state->data_pos, nbytes); + + iov_state->data_pos += nbytes; + j += nbytes; + + assert(j <= block_size); + + if (j == block_size) + break; + + assert(iov_state->data_pos == iov->data.length); + + iov_state->data_pos = 0; + } + + iov_state->iov_pos = i; + + if (j != block_size) + memset(block + j, 0, block_size - j); + +#ifdef DEBUG_IOV + dump_block("get_block", i, j, block, block_size); +#endif + + return (iov_state->iov_pos < num_data); +} + +krb5_boolean +krb5int_c_iov_put_block(const krb5_crypto_iov *data, + size_t num_data, + unsigned char *block, + size_t block_size, + struct iov_block_state *iov_state) +{ + size_t i, j = 0; + + for (i = iov_state->iov_pos; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + size_t nbytes; + + if (!process_block_p(data, num_data, iov_state, i)) + continue; + + if (pad_to_boundary_p(data, num_data, iov_state, i, j)) + break; + + iov_state->iov_pos = i; + + nbytes = iov->data.length - iov_state->data_pos; + if (nbytes > block_size - j) + nbytes = block_size - j; + + memcpy(iov->data.data + iov_state->data_pos, block + j, nbytes); + + iov_state->data_pos += nbytes; + j += nbytes; + + assert(j <= block_size); + + if (j == block_size) + break; + + assert(iov_state->data_pos == iov->data.length); + + iov_state->data_pos = 0; + } + + iov_state->iov_pos = i; + +#ifdef DEBUG_IOV + dump_block("put_block", i, j, block, block_size); +#endif + + return (iov_state->iov_pos < num_data); +} + +krb5_error_code +krb5int_c_iov_decrypt_stream(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage keyusage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + unsigned int header_len, trailer_len, padding_len; + krb5_crypto_iov *iov; + krb5_crypto_iov *stream; + size_t i, j; + int got_data = 0; + + stream = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM); + assert(stream != NULL); + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, &header_len); + if (ret != 0) + return ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &trailer_len); + if (ret != 0) + return ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &padding_len); + if (ret != 0) + return ret; + + if (stream->data.length < header_len + trailer_len) + return KRB5_BAD_MSIZE; + + iov = (krb5_crypto_iov *)calloc(num_data + 2, sizeof(krb5_crypto_iov)); + if (iov == NULL) + return ENOMEM; + + i = 0; + + iov[i].flags = KRB5_CRYPTO_TYPE_HEADER; /* takes place of STREAM */ + iov[i].data.data = stream->data.data; + iov[i].data.length = header_len; + i++; + + for (j = 0; j < num_data; j++) { + if (data[j].flags == KRB5_CRYPTO_TYPE_DATA) { + if (got_data) { + free(iov); + return KRB5_BAD_MSIZE; + } + + got_data++; + + data[j].data.data = stream->data.data + header_len; + data[j].data.length = stream->data.length - header_len - trailer_len; + } + if (data[j].flags == KRB5_CRYPTO_TYPE_SIGN_ONLY || + data[j].flags == KRB5_CRYPTO_TYPE_DATA) + iov[i++] = data[j]; + } + + /* XXX not self-describing with respect to length, this is the best we can do */ + iov[i].flags = KRB5_CRYPTO_TYPE_PADDING; + iov[i].data.data = NULL; + iov[i].data.length = 0; + i++; + + iov[i].flags = KRB5_CRYPTO_TYPE_TRAILER; + iov[i].data.data = stream->data.data + stream->data.length - trailer_len; + iov[i].data.length = trailer_len; + i++; + + assert(i <= num_data + 2); + + ret = aead->decrypt_iov(aead, enc, hash, key, keyusage, ivec, iov, i); + + free(iov); + + return ret; +} + +krb5_error_code +krb5int_c_padding_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t data_length, + unsigned int *pad_length) +{ + unsigned int padding; + krb5_error_code ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &padding); + if (ret != 0) + return ret; + + if (padding == 0 || (data_length % padding) == 0) + *pad_length = 0; + else + *pad_length = padding - (data_length % padding); + + return 0; +} + +krb5_error_code +krb5int_c_encrypt_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + krb5_crypto_iov iov[4]; + krb5_error_code ret; + unsigned int header_len = 0; + unsigned int padding_len = 0; + unsigned int trailer_len = 0; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, + &header_len); + if (ret != 0) + return ret; + + ret = krb5int_c_padding_length(aead, enc, hash, input->length, &padding_len); + if (ret != 0) + return ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, + &trailer_len); + if (ret != 0) + return ret; + + if (output->length < header_len + input->length + padding_len + trailer_len) + return KRB5_BAD_MSIZE; + + iov[0].flags = KRB5_CRYPTO_TYPE_HEADER; + iov[0].data.data = output->data; + iov[0].data.length = header_len; + + iov[1].flags = KRB5_CRYPTO_TYPE_DATA; + iov[1].data.data = iov[0].data.data + iov[0].data.length; + iov[1].data.length = input->length; + memcpy(iov[1].data.data, input->data, input->length); + + iov[2].flags = KRB5_CRYPTO_TYPE_PADDING; + iov[2].data.data = iov[1].data.data + iov[1].data.length; + iov[2].data.length = padding_len; + + iov[3].flags = KRB5_CRYPTO_TYPE_TRAILER; + iov[3].data.data = iov[2].data.data + iov[2].data.length; + iov[3].data.length = trailer_len; + + ret = aead->encrypt_iov(aead, enc, hash, key, + usage, ivec, + iov, sizeof(iov)/sizeof(iov[0])); + + if (ret != 0) + zap(iov[1].data.data, iov[1].data.length); + + output->length = iov[0].data.length + iov[1].data.length + + iov[2].data.length + iov[3].data.length; + + return ret; +} + +krb5_error_code +krb5int_c_decrypt_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + krb5_crypto_iov iov[2]; + krb5_error_code ret; + + iov[0].flags = KRB5_CRYPTO_TYPE_STREAM; + iov[0].data.data = malloc(input->length); + if (iov[0].data.data == NULL) + return ENOMEM; + + memcpy(iov[0].data.data, input->data, input->length); + iov[0].data.length = input->length; + + iov[1].flags = KRB5_CRYPTO_TYPE_DATA; + iov[1].data.data = NULL; + iov[1].data.length = 0; + + ret = krb5int_c_iov_decrypt_stream(aead, enc, hash, key, + usage, ivec, + iov, sizeof(iov)/sizeof(iov[0])); + if (ret != 0) + goto cleanup; + + if (output->length < iov[1].data.length) { + ret = KRB5_BAD_MSIZE; + goto cleanup; + } + + memcpy(output->data, iov[1].data.data, iov[1].data.length); + output->length = iov[1].data.length; + +cleanup: + zap(iov[0].data.data, iov[0].data.length); + free(iov[0].data.data); + + return ret; +} + +void +krb5int_c_encrypt_length_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length) +{ + unsigned int header_len = 0; + unsigned int padding_len = 0; + unsigned int trailer_len = 0; + + aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_HEADER, &header_len); + krb5int_c_padding_length(aead, enc, hash, inputlen, &padding_len); + aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &trailer_len); + + *length = header_len + inputlen + padding_len + trailer_len; +} + diff --git a/src/lib/crypto/krb/aead.h b/src/lib/crypto/krb/aead.h new file mode 100644 index 000000000..2c99eb868 --- /dev/null +++ b/src/lib/crypto/krb/aead.h @@ -0,0 +1,123 @@ +/* + * lib/crypto/aead.h + * + * Copyright 2008, 2009 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +/* AEAD helpers */ + +krb5_crypto_iov * +krb5int_c_locate_iov(krb5_crypto_iov *data, + size_t num_data, + krb5_cryptotype type); + +krb5_error_code +krb5int_c_make_checksum_iov(const struct krb5_cksumtypes *cksum, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_crypto_iov *data, + size_t num_data, + krb5_data *cksum_data); + +const struct krb5_cksumtypes * +krb5int_c_find_checksum_type(krb5_cksumtype cksumtype); + +#define ENCRYPT_CONF_IOV(_iov) ((_iov)->flags == KRB5_CRYPTO_TYPE_HEADER) + +#define ENCRYPT_DATA_IOV(_iov) ((_iov)->flags == KRB5_CRYPTO_TYPE_DATA || \ + (_iov)->flags == KRB5_CRYPTO_TYPE_PADDING) + +#define ENCRYPT_IOV(_iov) (ENCRYPT_CONF_IOV(_iov) || ENCRYPT_DATA_IOV(_iov)) + +#define SIGN_IOV(_iov) (ENCRYPT_IOV(_iov) || \ + (_iov)->flags == KRB5_CRYPTO_TYPE_SIGN_ONLY ) + +struct iov_block_state { + size_t iov_pos; /* index into iov array */ + size_t data_pos; /* index into iov contents */ + unsigned int ignore_header : 1; /* have/should we process HEADER */ + unsigned int include_sign_only : 1; /* should we process SIGN_ONLY blocks */ + unsigned int pad_to_boundary : 1; /* should we zero fill blocks until next buffer */ +}; + +#define IOV_BLOCK_STATE_INIT(_state) ((_state)->iov_pos = \ + (_state)->data_pos = \ + (_state)->ignore_header = \ + (_state)->include_sign_only = \ + (_state)->pad_to_boundary = 0) + +krb5_boolean +krb5int_c_iov_get_block(unsigned char *block, + size_t block_size, + const krb5_crypto_iov *data, + size_t num_data, + struct iov_block_state *iov_state); + +krb5_boolean +krb5int_c_iov_put_block(const krb5_crypto_iov *data, + size_t num_data, + unsigned char *block, + size_t block_size, + struct iov_block_state *iov_state); + +krb5_error_code +krb5int_c_iov_decrypt_stream(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage keyusage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data); + +krb5_error_code +krb5int_c_decrypt_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output); + +krb5_error_code +krb5int_c_encrypt_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output); + +void +krb5int_c_encrypt_length_aead_compat(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length); + +krb5_error_code +krb5int_c_padding_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t data_length, + unsigned int *pad_length); diff --git a/src/lib/crypto/krb/block_size.c b/src/lib/crypto/krb/block_size.c new file mode 100644 index 000000000..e4c11e869 --- /dev/null +++ b/src/lib/crypto/krb/block_size.c @@ -0,0 +1,47 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_block_size(krb5_context context, krb5_enctype enctype, + size_t *blocksize) +{ + int i; + + for (i=0; iblock_size; + + return(0); +} diff --git a/src/lib/crypto/krb/cf2.c b/src/lib/crypto/krb/cf2.c new file mode 100644 index 000000000..4e25641e8 --- /dev/null +++ b/src/lib/crypto/krb/cf2.c @@ -0,0 +1,154 @@ +/* + * lib/crypto/cf2.c + * + * Copyright (C) 2009 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * Implement KRB_FX_CF2 function per + *draft-ietf-krb-wg-preauth-framework-09. Take two keys and two + *pepper strings as input and return a combined key. + */ + +#include +#include +#include "etypes.h" + + +/* + * Call the PRF function multiple times with the pepper prefixed with + * a count byte to get enough bits of output. + */ +static krb5_error_code +prf_plus( krb5_context context, krb5_keyblock *k,const char *pepper, + size_t keybytes, char **out) +{ + krb5_error_code retval = 0; + size_t prflen, iterations; + krb5_data out_data; + krb5_data in_data; + char *buffer = NULL; + struct k5buf prf_inbuf; + krb5int_buf_init_dynamic(&prf_inbuf); + krb5int_buf_add_len( &prf_inbuf, "\001", 1); + krb5int_buf_add( &prf_inbuf, pepper); + retval = krb5_c_prf_length( context, k->enctype, &prflen); + if (retval != 0) + goto cleanup; + iterations = keybytes/prflen; + if ((keybytes%prflen) != 0) + iterations++; + assert(iterations <= 254); + buffer = malloc(iterations*prflen); + if (buffer == NULL) { + retval = ENOMEM; + goto cleanup; + } + if (krb5int_buf_len( &prf_inbuf) == -1) { + retval = ENOMEM; + goto cleanup; + } + in_data.length = (krb5_int32) krb5int_buf_len( &prf_inbuf); + in_data.data = krb5int_buf_data( &prf_inbuf); + out_data.length = prflen; + out_data.data = buffer; + + while (iterations > 0) { + retval = krb5_c_prf( context, k, &in_data, &out_data); + if (retval != 0) + goto cleanup; + out_data.data += prflen; + in_data.data[0]++; + iterations--; + } + cleanup: + if (retval == 0 ) + *out = buffer; + else{ + if (buffer != NULL) + free(buffer); + } + krb5int_free_buf( &prf_inbuf); + return retval; +} + + +krb5_error_code KRB5_CALLCONV +krb5_c_fx_cf2_simple(krb5_context context, + krb5_keyblock *k1, const char *pepper1, + krb5_keyblock *k2, const char *pepper2, + krb5_keyblock **out) +{ + const struct krb5_keytypes *out_enctype; + size_t keybytes, keylength, i; + char *prf1 = NULL, *prf2 = NULL; + krb5_data keydata; + krb5_enctype out_enctype_num; + krb5_error_code retval = 0; + krb5_keyblock *out_key = NULL; + + + if (k1 == NULL ||!krb5_c_valid_enctype(k1->enctype)) + return KRB5_BAD_ENCTYPE; + if (k2 == NULL || !krb5_c_valid_enctype(k2->enctype)) + return KRB5_BAD_ENCTYPE; + out_enctype_num = k1->enctype; + assert(out != NULL); + assert ((out_enctype = find_enctype(out_enctype_num)) != NULL); + if (out_enctype->prf == NULL) { + if (context) + krb5int_set_error(&(context->err) , KRB5_CRYPTO_INTERNAL, + "Enctype %d has no PRF", out_enctype_num); + return KRB5_CRYPTO_INTERNAL; + } + keybytes = out_enctype->enc->keybytes; + keylength = out_enctype->enc->keylength; + + retval = prf_plus( context, k1, pepper1, keybytes, &prf1); + if (retval != 0) + goto cleanup; + retval = prf_plus( context, k2, pepper2, keybytes, &prf2); + if (retval != 0) + goto cleanup; + for (i = 0; i < keybytes; i++) + prf1[i] ^= prf2[i]; + zap(prf2, keybytes); + retval = krb5int_c_init_keyblock( context, out_enctype_num, keylength, &out_key); + if (retval != 0) + goto cleanup; + keydata.data = prf1; + keydata.length = keybytes; + retval = out_enctype->enc->make_key( &keydata, out_key); + + cleanup: + if (retval == 0) + *out = out_key; + else krb5int_c_free_keyblock( context, out_key); + if (prf1 != NULL) { + zap(prf1, keybytes); + free(prf1); + } + if (prf2 != NULL) + free(prf2); + return retval; +} diff --git a/src/lib/crypto/krb/checksum_length.c b/src/lib/crypto/krb/checksum_length.c new file mode 100644 index 000000000..28846a671 --- /dev/null +++ b/src/lib/crypto/krb/checksum_length.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_checksum_length(krb5_context context, krb5_cksumtype cksumtype, + size_t *length) +{ + unsigned int i; + + for (i=0; ihashsize; + else if (krb5_cksumtypes_list[i].trunc_size) + *length = krb5_cksumtypes_list[i].trunc_size; + else + *length = krb5_cksumtypes_list[i].hash->hashsize; + + return(0); +} + diff --git a/src/lib/crypto/krb/cksumtype_to_string.c b/src/lib/crypto/krb/cksumtype_to_string.c new file mode 100644 index 000000000..ee1d50ba5 --- /dev/null +++ b/src/lib/crypto/krb/cksumtype_to_string.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_cksumtype_to_string(krb5_cksumtype cksumtype, char *buffer, size_t buflen) +{ + unsigned int i; + + for (i=0; i= buflen) + return(ENOMEM); + return(0); + } + } + + return(EINVAL); +} diff --git a/src/lib/crypto/krb/cksumtypes.c b/src/lib/crypto/krb/cksumtypes.c new file mode 100644 index 000000000..037e53f49 --- /dev/null +++ b/src/lib/crypto/krb/cksumtypes.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "hash_provider.h" +#include "keyhash_provider.h" +#include "cksumtypes.h" + +const struct krb5_cksumtypes krb5_cksumtypes_list[] = { + { CKSUMTYPE_CRC32, KRB5_CKSUMFLAG_NOT_COLL_PROOF, + "crc32", { 0 }, "CRC-32", + 0, NULL, + &krb5int_hash_crc32 }, + + { CKSUMTYPE_RSA_MD4, 0, + "md4", { 0 }, "RSA-MD4", + 0, NULL, + &krb5int_hash_md4 }, + { CKSUMTYPE_RSA_MD4_DES, 0, + "md4-des", { 0 }, "RSA-MD4 with DES cbc mode", + ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_md4des, + NULL }, + + { CKSUMTYPE_DESCBC, 0, + "des-cbc", { 0 }, "DES cbc mode", + ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_descbc, + NULL }, + + { CKSUMTYPE_RSA_MD5, 0, + "md5", { 0 }, "RSA-MD5", + 0, NULL, + &krb5int_hash_md5 }, + { CKSUMTYPE_RSA_MD5_DES, 0, + "md5-des", { 0 }, "RSA-MD5 with DES cbc mode", + ENCTYPE_DES_CBC_CRC, &krb5int_keyhash_md5des, + NULL }, + + { CKSUMTYPE_NIST_SHA, 0, + "sha", { 0 }, "NIST-SHA", + 0, NULL, + &krb5int_hash_sha1 }, + + { CKSUMTYPE_HMAC_SHA1_DES3, KRB5_CKSUMFLAG_DERIVE, + "hmac-sha1-des3", { "hmac-sha1-des3-kd" }, "HMAC-SHA1 DES3 key", + 0, NULL, + &krb5int_hash_sha1 }, + { CKSUMTYPE_HMAC_MD5_ARCFOUR, 0, + "hmac-md5-rc4", { "hmac-md5-enc", "hmac-md5-earcfour" }, + "Microsoft HMAC MD5 (RC4 key)", + ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_hmac_md5, + NULL }, + + { CKSUMTYPE_HMAC_SHA1_96_AES128, KRB5_CKSUMFLAG_DERIVE, + "hmac-sha1-96-aes128", { 0 }, "HMAC-SHA1 AES128 key", + 0, NULL, + &krb5int_hash_sha1, 12 }, + { CKSUMTYPE_HMAC_SHA1_96_AES256, KRB5_CKSUMFLAG_DERIVE, + "hmac-sha1-96-aes256", { 0 }, "HMAC-SHA1 AES256 key", + 0, NULL, + &krb5int_hash_sha1, 12 }, + { CKSUMTYPE_MD5_HMAC_ARCFOUR, 0, + "md5-hmac-rc4", { 0 }, "Microsoft MD5 HMAC (RC4 key)", + ENCTYPE_ARCFOUR_HMAC, &krb5int_keyhash_md5_hmac, + NULL } +}; + +const unsigned int krb5_cksumtypes_length = +sizeof(krb5_cksumtypes_list)/sizeof(struct krb5_cksumtypes); diff --git a/src/lib/crypto/krb/cksumtypes.h b/src/lib/crypto/krb/cksumtypes.h new file mode 100644 index 000000000..c667e8abe --- /dev/null +++ b/src/lib/crypto/krb/cksumtypes.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#ifndef CKSUMTYPES_H +#define CKSUMTYPES_H +#include "k5-int.h" + +struct krb5_cksumtypes { + krb5_cksumtype ctype; + unsigned int flags; + char *name; + char *aliases[2]; + char *out_string; + /* if the hash is keyed, this is the etype it is keyed with. + Actually, it can be keyed by any etype which has the same + enc_provider as the specified etype. DERIVE checksums can + be keyed with any valid etype. */ + krb5_enctype keyed_etype; + /* I can't statically initialize a union, so I'm just going to use + two pointers here. The keyhash is used if non-NULL. If NULL, + then HMAC/hash with derived keys is used if the relevant flag + is set. Otherwise, a non-keyed hash is computed. This is all + kind of messy, but so is the krb5 api. */ + const struct krb5_keyhash_provider *keyhash; + const struct krb5_hash_provider *hash; + /* This just gets uglier and uglier. In the key derivation case, + we produce an hmac. To make the hmac code work, we can't hack + the output size indicated by the hash provider, but we may want + a truncated hmac. If we want truncation, this is the number of + bytes we truncate to; it should be 0 otherwise. */ + unsigned int trunc_size; +}; + +#define KRB5_CKSUMFLAG_DERIVE 0x0001 +#define KRB5_CKSUMFLAG_NOT_COLL_PROOF 0x0002 + +extern const struct krb5_cksumtypes krb5_cksumtypes_list[]; +extern const unsigned int krb5_cksumtypes_length; +#endif diff --git a/src/lib/crypto/krb/coll_proof_cksum.c b/src/lib/crypto/krb/coll_proof_cksum.c new file mode 100644 index 000000000..85fb57b9b --- /dev/null +++ b/src/lib/crypto/krb/coll_proof_cksum.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_boolean KRB5_CALLCONV +krb5_c_is_coll_proof_cksum(krb5_cksumtype ctype) +{ + unsigned int i; + + for (i=0; ienctype)&&enctype_ok(key2->enctype))) + return (KRB5_CRYPTO_INTERNAL); + + + if (key1->length != key2->length || key1->enctype != key2->enctype) + return (KRB5_CRYPTO_INTERNAL); + + /* + * Find our encryption algorithm + */ + + for (i = 0; i < krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == key1->enctype) + break; + } + + if (i == krb5_enctypes_length) + return (KRB5_BAD_ENCTYPE); + + enc = krb5_enctypes_list[i].enc; + + keybytes = enc->keybytes; + keylength = enc->keylength; + + /* + * Allocate and set up buffers + */ + + if ((r1 = (unsigned char *) malloc(keybytes)) == NULL) + return (ENOMEM); + + if ((r2 = (unsigned char *) malloc(keybytes)) == NULL) { + free(r1); + return (ENOMEM); + } + + if ((rnd = (unsigned char *) malloc(keybytes)) == NULL) { + free(r1); + free(r2); + return (ENOMEM); + } + + if ((combined = (unsigned char *) malloc(keybytes * 2)) == NULL) { + free(r1); + free(r2); + free(rnd); + return (ENOMEM); + } + + if ((output = (unsigned char *) malloc(keylength)) == NULL) { + free(r1); + free(r2); + free(rnd); + free(combined); + return (ENOMEM); + } + + /* + * Get R1 and R2 (by running the input keys through the DR algorithm. + * Note this is most of derive-key, but not all. + */ + + input.length = key2->length; + input.data = (char *) key2->contents; + if ((ret = dr(enc, key1, r1, &input))) + goto cleanup; + +#if 0 + { + int i; + printf("R1 ="); + for (i = 0; i < keybytes; i++) + printf(" %02x", (unsigned char) r1[i]); + printf("\n"); + } +#endif + + input.length = key1->length; + input.data = (char *) key1->contents; + if ((ret = dr(enc, key2, r2, &input))) + goto cleanup; + +#if 0 + { + int i; + printf("R2 ="); + for (i = 0; i < keybytes; i++) + printf(" %02x", (unsigned char) r2[i]); + printf("\n"); + } +#endif + + /* + * Concatenate the two keys together, and then run them through + * n-fold to reduce them to a length appropriate for the random-to-key + * operation. Note here that krb5_nfold() takes sizes in bits, hence + * the multiply by 8. + */ + + memcpy(combined, r1, keybytes); + memcpy(combined + keybytes, r2, keybytes); + + krb5_nfold((keybytes * 2) * 8, combined, keybytes * 8, rnd); + +#if 0 + { + int i; + printf("rnd ="); + for (i = 0; i < keybytes; i++) + printf(" %02x", (unsigned char) rnd[i]); + printf("\n"); + } +#endif + + /* + * Run the "random" bits through random-to-key to produce a encryption + * key. + */ + + randbits.length = keybytes; + randbits.data = (char *) rnd; + tkey.length = keylength; + tkey.contents = output; + + if ((ret = (*(enc->make_key))(&randbits, &tkey))) + goto cleanup; + +#if 0 + { + int i; + printf("tkey ="); + for (i = 0; i < tkey.length; i++) + printf(" %02x", (unsigned char) tkey.contents[i]); + printf("\n"); + } +#endif + + /* + * Run through derive-key one more time to produce the final key. + * Note that the input to derive-key is the ASCII string "combine". + */ + + input.length = 7; /* Note; change this if string length changes */ + input.data = "combine"; + + /* + * Just FYI: _if_ we have space here in the key, then simply use it + * without modification. But if the key is blank (no allocated storage) + * then allocate some memory for it. This allows programs to use one of + * the existing keys as the output key, _or_ pass in a blank keyblock + * for us to allocate. It's easier for us to allocate it since we already + * know the crypto library internals + */ + + if (outkey->length == 0 || outkey->contents == NULL) { + outkey->contents = (krb5_octet *) malloc(keylength); + if (!outkey->contents) { + ret = ENOMEM; + goto cleanup; + } + outkey->length = keylength; + outkey->enctype = key1->enctype; + myalloc = 1; + } + + if ((ret = krb5_derive_key(enc, &tkey, outkey, &input))) { + if (myalloc) { + free(outkey->contents); + outkey->contents = NULL; + } + goto cleanup; + } + +#if 0 + { + int i; + printf("output ="); + for (i = 0; i < outkey->length; i++) + printf(" %02x", (unsigned char) outkey->contents[i]); + printf("\n"); + } +#endif + + ret = 0; + +cleanup: + memset(r1, 0, keybytes); + memset(r2, 0, keybytes); + memset(rnd, 0, keybytes); + memset(combined, 0, keybytes * 2); + memset(output, 0, keylength); + + free(r1); + free(r2); + free(rnd); + free(combined); + free(output); + + return (ret); +} + +/* + * Our DR function; mostly taken from derive.c + */ + +static krb5_error_code dr +(const struct krb5_enc_provider *enc, const krb5_keyblock *inkey, unsigned char *out, const krb5_data *in_constant) +{ + size_t blocksize, keybytes, keylength, n; + unsigned char *inblockdata, *outblockdata; + krb5_data inblock, outblock; + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + /* allocate and set up buffers */ + + if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) + return(ENOMEM); + + if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { + free(inblockdata); + return(ENOMEM); + } + + inblock.data = (char *) inblockdata; + inblock.length = blocksize; + + outblock.data = (char *) outblockdata; + outblock.length = blocksize; + + /* initialize the input block */ + + if (in_constant->length == inblock.length) { + memcpy(inblock.data, in_constant->data, inblock.length); + } else { + krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, + inblock.length*8, (unsigned char *) inblock.data); + } + + /* loop encrypting the blocks until enough key bytes are generated */ + + n = 0; + while (n < keybytes) { + (*(enc->encrypt))(inkey, 0, &inblock, &outblock); + + if ((keybytes - n) <= outblock.length) { + memcpy(out+n, outblock.data, (keybytes - n)); + break; + } + + memcpy(out+n, outblock.data, outblock.length); + memcpy(inblock.data, outblock.data, outblock.length); + n += outblock.length; + } + + /* clean memory, free resources and exit */ + + memset(inblockdata, 0, blocksize); + memset(outblockdata, 0, blocksize); + + free(outblockdata); + free(inblockdata); + + return(0); +} + diff --git a/src/lib/crypto/krb/crc32/CRC.pm b/src/lib/crypto/krb/crc32/CRC.pm new file mode 100644 index 000000000..ee2ab2ae8 --- /dev/null +++ b/src/lib/crypto/krb/crc32/CRC.pm @@ -0,0 +1,156 @@ +# Copyright 2002 by the Massachusetts Institute of Technology. +# All Rights Reserved. +# +# Export of this software from the United States of America may +# require a specific license from the United States Government. +# It is the responsibility of any person or organization contemplating +# export to obtain such a license before exporting. +# +# WITHIN THAT CONSTRAINT, 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, and that +# the name of M.I.T. not be used in advertising or publicity pertaining +# to distribution of the software without specific, written prior +# permission. Furthermore if you modify this software you must label +# your software as modified software and not distribute it in such a +# fashion that it might be confused with the original M.I.T. software. +# M.I.T. makes no representations about the suitability of +# this software for any purpose. It is provided "as is" without express +# or implied warranty. + +package CRC; + +# CRC: implement a CRC using the Poly package (yes this is slow) +# +# message M(x) = m_0 * x^0 + m_1 * x^1 + ... + m_(k-1) * x^(k-1) +# generator P(x) = p_0 * x^0 + p_1 * x^1 + ... + p_n * x^n +# remainder R(x) = r_0 * x^0 + r_1 * x^1 + ... + r_(n-1) * x^(n-1) +# +# R(x) = (x^n * M(x)) % P(x) +# +# Note that if F(x) = x^n * M(x) + R(x), then F(x) = 0 mod P(x) . +# +# In MIT Kerberos 5, R(x) is taken as the CRC, as opposed to what +# ISO 3309 does. +# +# ISO 3309 adds a precomplement and a postcomplement. +# +# The ISO 3309 postcomplement is of the form +# +# A(x) = x^0 + x^1 + ... + x^(n-1) . +# +# The ISO 3309 precomplement is of the form +# +# B(x) = x^k * A(x) . +# +# The ISO 3309 FCS is then +# +# (x^n * M(x)) % P(x) + B(x) % P(x) + A(x) , +# +# which is equivalent to +# +# (x^n * M(x) + B(x)) % P(x) + A(x) . +# +# In ISO 3309, the transmitted frame is +# +# F'(x) = x^n * M(x) + R(x) + R'(x) + A(x) , +# +# where +# +# R'(x) = B(x) % P(x) . +# +# Note that this means that if a new remainder is computed over the +# frame F'(x) (treating F'(x) as the new M(x)), it will be equal to a +# constant. +# +# F'(x) = 0 + R'(x) + A(x) mod P(x) , +# +# then +# +# (F'(x) + x^k * A(x)) * x^n +# +# = ((R'(x) + A(x)) + x^k * A(x)) * x^n mod P(x) +# +# = (x^k * A(x) + A(x) + x^k * A(x)) * x^n mod P(x) +# +# = (0 + A(x)) * x^n mod P(x) +# +# Note that (A(x) * x^n) % P(x) is a constant, and that this result +# depends on B(x) being x^k * A(x). + +use Carp; +use Poly; + +sub new { + my $self = shift; + my $class = ref($self) || $self; + my %args = @_; + $self = {bitsendian => "little"}; + bless $self, $class; + $self->setpoly($args{"Poly"}) if exists $args{"Poly"}; + $self->bitsendian($args{"bitsendian"}) + if exists $args{"bitsendian"}; + $self->{precomp} = $args{precomp} if exists $args{precomp}; + $self->{postcomp} = $args{postcomp} if exists $args{postcomp}; + return $self; +} + +sub setpoly { + my $self = shift; + my($arg) = @_; + croak "need a polynomial" if !$arg->isa("Poly"); + $self->{Poly} = $arg; + return $self; +} + +sub crc { + my $self = shift; + my $msg = Poly->new(@_); + my($order, $r, $precomp); + $order = $self->{Poly}->order; + # B(x) = x^k * precomp + $precomp = $self->{precomp} ? + $self->{precomp} * Poly->powers2poly(scalar(@_)) : Poly->new; + # R(x) = (x^n * M(x)) % P(x) + $r = ($msg * Poly->powers2poly($order)) % $self->{Poly}; + # B(x) % P(x) + $r += $precomp % $self->{Poly}; + $r += $self->{postcomp} if exists $self->{postcomp}; + return $r; +} + +# endianness of bits of each octet +# +# Note that the message is always treated as being sent in big-endian +# octet order. +# +# Usually, the message will be treated as bits being little-endian, +# since that is the common case for serial implementations that +# present data in octets; e.g., most UARTs shift octets onto the line +# in little-endian order, and protocols such as ISO 3309, V.42, +# etc. treat individual octets as being sent LSB-first. + +sub bitsendian { + my $self = shift; + my($arg) = @_; + croak "bad bit endianness" if $arg !~ /big|little/; + $self->{bitsendian} = $arg; + return $self; +} + +sub crcstring { + my $self = shift; + my($arg) = @_; + my($packstr, @m); + { + $packstr = "B*", last if $self->{bitsendian} =~ /big/; + $packstr = "b*", last if $self->{bitsendian} =~ /little/; + croak "bad bit endianness"; + }; + @m = split //, unpack $packstr, $arg; + return $self->crc(@m); +} + +1; diff --git a/src/lib/crypto/krb/crc32/Makefile.in b/src/lib/crypto/krb/crc32/Makefile.in new file mode 100644 index 000000000..d62b6edc1 --- /dev/null +++ b/src/lib/crypto/krb/crc32/Makefile.in @@ -0,0 +1,34 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/crc32 +mydir=lib/crypto/krb/crc32 +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=crc32 +##DOS##OBJFILE=..\$(OUTPRE)crc32.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + + +STLIBOBJS= crc32.o + +OBJS= $(OUTPRE)crc32.$(OBJEXT) + +SRCS= $(srcdir)/crc32.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +check-unix:: + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/crc32/Poly.pm b/src/lib/crypto/krb/crc32/Poly.pm new file mode 100644 index 000000000..cad0f77b5 --- /dev/null +++ b/src/lib/crypto/krb/crc32/Poly.pm @@ -0,0 +1,182 @@ +# Copyright 2002 by the Massachusetts Institute of Technology. +# All Rights Reserved. +# +# Export of this software from the United States of America may +# require a specific license from the United States Government. +# It is the responsibility of any person or organization contemplating +# export to obtain such a license before exporting. +# +# WITHIN THAT CONSTRAINT, 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, and that +# the name of M.I.T. not be used in advertising or publicity pertaining +# to distribution of the software without specific, written prior +# permission. Furthermore if you modify this software you must label +# your software as modified software and not distribute it in such a +# fashion that it might be confused with the original M.I.T. software. +# M.I.T. makes no representations about the suitability of +# this software for any purpose. It is provided "as is" without express +# or implied warranty. + +package Poly; + +# Poly: implements some basic operations on polynomials in the field +# of integers (mod 2). +# +# The rep is an array of coefficients, highest order term first. +# +# This is rather slow at the moment. + +use overload + '+' => \&add, + '-' => \&add, + '*' => \&mul, + '%' => sub {$_[2] ? mod($_[1], $_[0]) : mod($_[0], $_[1])}, + '/' => sub { $_[2] ? scalar(div($_[1], $_[0])) + : scalar(div($_[0], $_[1])) }, + '<=>' => sub {$_[2] ? pcmp($_[1], $_[0]) : pcmp($_[0], $_[1])}, + '""' => \&str +; + +use Carp; + +# doesn't do much beyond normalize and bless +sub new { + my $this = shift; + my $class = ref($this) || $this; + my(@x) = @_; + return bless [norm(@x)], $class; +} + +# stringified P(x) +sub pretty { + my(@x) = @{+shift}; + my $n = @x; + local $_; + return "0" if !@x; + return join " + ", map {$n--; $_ ? ("x^$n") : ()} @x; +} + +sub print { + my $self = shift; + print $self->pretty, "\n"; +} + +# This assumes normalization. +sub order { + my $self = shift; + return $#{$self}; +} + +sub str { + return overload::StrVal($_[0]); +} + +# strip leading zero coefficients +sub norm { + my(@x) = @_; + shift @x while @x && !$x[0]; + return @x; +} + +# multiply $self by the single term of power $n +sub multerm { + my($self, $n) = @_; + return $self->new(@$self, (0) x $n); +} + +# This is really an order comparison; different polys of same order +# compare equal. It also assumes prior normalization. +sub pcmp { + my @x = @{+shift}; + my @y = @{+shift}; + return @x <=> @y; +} + +# convenience constructor; takes list of non-zero terms +sub powers2poly +{ + my $self = shift; + my $poly = $self->new; + my $n; + foreach $n (@_) { + $poly += $one->multerm($n); + } + return $poly; +} + +sub add { + my $self = shift; + my @x = @$self; + my @y = @{+shift}; + my @r; + unshift @r, (pop @x || 0) ^ (pop @y || 0) + while @x || @y; + return $self->new(@r); +} + +sub mul { + my($self) = shift; + my @y = @{+shift}; + my $r = $self->new; + my $power = 0; + while (@y) { + $r += $self->multerm($power) if pop @y; + $power++; + } + return $r; +} + +sub oldmod { + my($self, $div) = @_; + my @num = @$self; + my @div = @$div; + my $r = $self->new(splice @num, 0, @div); + do { + push @$r, shift @num while @num && $r < $div; + $r += $div if $r >= $div; + } while @num; + return $r; +} + +sub div { + my($self, $div) = @_; + my $q = $self->new; + my $r = $self->new(@$self); + my $one = $self->new(1); + my ($tp, $power); + croak "divide by zero" if !@$div; + while ($div <= $r) { + $power = 0; + $power++ while ($tp = $div->multerm($power)) < $r; + $q += $one->multerm($power); + $r -= $tp; + } + return wantarray ? ($q, $r) : $q; +} + +sub mod { + (&div)[1]; +} + +# bits and octets both big-endian +sub hex { + my @x = @{+shift}; + my $minwidth = shift || 32; + unshift @x, 0 while @x % 8 || @x < $minwidth; + return unpack "H*", pack "B*", join "", @x; +} + +# bit-reversal of above +sub revhex { + my @x = @{+shift}; + my $minwidth = shift || 32; + unshift @x, 0 while @x % 8 || @x < $minwidth; + return unpack "H*", pack "B*", join "", reverse @x; +} + +$one = Poly->new(1); + +1; diff --git a/src/lib/crypto/krb/crc32/crc-32.h b/src/lib/crypto/krb/crc32/crc-32.h new file mode 100644 index 000000000..0efc00625 --- /dev/null +++ b/src/lib/crypto/krb/crc32/crc-32.h @@ -0,0 +1,71 @@ +/* + * include/krb5/crc-32.h + * + * Copyright 1989,1990 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Definitions for the CRC-32 checksum + */ + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + + +#ifndef KRB5_CRC32__ +#define KRB5_CRC32__ + +#define CRC32_CKSUM_LENGTH 4 + +void +mit_crc32 (krb5_pointer in, size_t in_length, unsigned long *c); + +#ifdef CRC32_SHIFT4 +void mit_crc32_shift4(krb5_pointer /* in */, + size_t /* in_length */, + unsigned long * /* cksum */); +#endif + +#endif /* KRB5_CRC32__ */ diff --git a/src/lib/crypto/krb/crc32/crc.pl b/src/lib/crypto/krb/crc32/crc.pl new file mode 100644 index 000000000..b21b6b15d --- /dev/null +++ b/src/lib/crypto/krb/crc32/crc.pl @@ -0,0 +1,111 @@ +# Copyright 2002 by the Massachusetts Institute of Technology. +# All Rights Reserved. +# +# Export of this software from the United States of America may +# require a specific license from the United States Government. +# It is the responsibility of any person or organization contemplating +# export to obtain such a license before exporting. +# +# WITHIN THAT CONSTRAINT, 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, and that +# the name of M.I.T. not be used in advertising or publicity pertaining +# to distribution of the software without specific, written prior +# permission. Furthermore if you modify this software you must label +# your software as modified software and not distribute it in such a +# fashion that it might be confused with the original M.I.T. software. +# M.I.T. makes no representations about the suitability of +# this software for any purpose. It is provided "as is" without express +# or implied warranty. + +use CRC; + +print "*** crudely testing polynomial functions ***\n"; + +$x = Poly->new(1,1,1,1); +$y = Poly->new(1,1); +print "x = @{[$x->pretty]}\ny = @{[$y->pretty]}\n"; +$q = $x / $y; +$r = $x % $y; +print $x->pretty, " = (", $y->pretty , ") * (", $q->pretty, + ") + ", $r->pretty, "\n"; +$q = $y / $x; +$r = $y % $x; +print "y / x = @{[$q->pretty]}\ny % x = @{[$r->pretty]}\n"; + +# ISO 3309 32-bit FCS polynomial +$fcs32 = Poly->powers2poly(32,26,23,22,16,12,11,10,8,7,5,4,2,1,0); +print "fcs32 = ", $fcs32->pretty, "\n"; + +$crc = CRC->new(Poly => $fcs32, bitsendian => "little"); + +print "\n"; + +print "*** little endian, no complementation ***\n"; +for ($i = 0; $i < 256; $i++) { + $r = $crc->crcstring(pack "C", $i); + printf ("%02x: ", $i) if !($i % 8); + print ($r->revhex, ($i % 8 == 7) ? "\n" : " "); +} + +print "\n"; + +print "*** little endian, 4 bits, no complementation ***\n"; +for ($i = 0; $i < 16; $i++) { + @m = (split //, unpack "b*", pack "C", $i)[0..3]; + $r = $crc->crc(@m); + printf ("%02x: ", $i) if !($i % 8); + print ($r->revhex, ($i % 8 == 7) ? "\n" : " "); +} + +print "\n"; + +print "*** test vectors for t_crc.c, little endian ***\n"; +for ($i = 1; $i <= 4; $i *=2) { + for ($j = 0; $j < $i * 8; $j++) { + @m = split //, unpack "b*", pack "V", 1 << $j; + splice @m, $i * 8; + $r = $crc->crc(@m); + $m = unpack "H*", pack "b*", join("", @m); + print "{HEX, \"$m\", 0x", $r->revhex, "},\n"; + } +} +@m = ("foo", "test0123456789", + "MASSACHVSETTS INSTITVTE OF TECHNOLOGY"); +foreach $m (@m) { + $r = $crc->crcstring($m); + print "{STR, \"$m\", 0x", $r->revhex, "},\n"; +} +__END__ + +print "*** big endian, no complementation ***\n"; +for ($i = 0; $i < 256; $i++) { + $r = $crc->crcstring(pack "C", $i); + printf ("%02x: ", $i) if !($i % 8); + print ($r->hex, ($i % 8 == 7) ? "\n" : " "); +} + +# all ones polynomial of order 31 +$ones = Poly->new((1) x 32); + +print "*** big endian, ISO-3309 style\n"; +$crc = CRC->new(Poly => $fcs32, + bitsendian => "little", + precomp => $ones, + postcomp => $ones); +for ($i = 0; $i < 256; $i++) { + $r = $crc->crcstring(pack "C", $i); + print ($r->hex, ($i % 8 == 7) ? "\n" : " "); +} + +for ($i = 0; $i < 0; $i++) { + $x = Poly->new((1) x 32, (0) x $i); + $y = Poly->new((1) x 32); + $f = ($x % $fcs32) + $y; + $r = (($f + $x) * Poly->powers2poly(32)) % $fcs32; + @out = @$r; + unshift @out, 0 while @out < 32; + print @out, "\n"; +} diff --git a/src/lib/crypto/krb/crc32/crc32.c b/src/lib/crypto/krb/crc32/crc32.c new file mode 100644 index 000000000..ef65476d9 --- /dev/null +++ b/src/lib/crypto/krb/crc32/crc32.c @@ -0,0 +1,192 @@ +/* + * lib/crypto/crc32/crc.c + * + * Copyright 1990, 2002 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * CRC-32/AUTODIN-II routines + */ + +#include "k5-int.h" +#include "crc-32.h" + +/* This table and block of comments are taken from code labeled: */ +/* + * Copyright (C) 1986 Gary S. Brown. You may use this program, or + * code or tables extracted from it, as desired without restriction. + */ + +/* First, the polynomial itself and its table of feedback terms. The */ +/* polynomial is */ +/* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ +/* Note that we take it "backwards" and put the highest-order term in */ +/* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ +/* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ +/* the MSB being 1. */ + +/* Note that the usual hardware shift register implementation, which */ +/* is what we're using (we're merely optimizing it by doing eight-bit */ +/* chunks at a time) shifts bits into the lowest-order term. In our */ +/* implementation, that means shifting towards the right. Why do we */ +/* do it this way? Because the calculated CRC must be transmitted in */ +/* order from highest-order term to lowest-order term. UARTs transmit */ +/* characters in order from LSB to MSB. By storing the CRC this way, */ +/* we hand it to the UART in the order low-byte to high-byte; the UART */ +/* sends each low-bit to hight-bit; and the result is transmission bit */ +/* by bit from highest- to lowest-order term without requiring any bit */ +/* shuffling on our part. Reception works similarly. */ + +/* The feedback terms table consists of 256, 32-bit entries. Notes: */ +/* */ +/* 1. The table can be generated at runtime if desired; code to do so */ +/* is shown later. It might not be obvious, but the feedback */ +/* terms simply represent the results of eight shift/xor opera- */ +/* tions for all combinations of data and CRC register values. */ +/* */ +/* 2. The CRC accumulation logic is the same for all CRC polynomials, */ +/* be they sixteen or thirty-two bits wide. You simply choose the */ +/* appropriate table. Alternatively, because the table can be */ +/* generated at runtime, you can start by generating the table for */ +/* the polynomial in question and use exactly the same "updcrc", */ +/* if your application needn't simultaneously handle two CRC */ +/* polynomials. (Note, however, that XMODEM is strange.) */ +/* */ +/* 3. For 16-bit CRCs, the table entries need be only 16 bits wide; */ +/* of course, 32-bit entries work OK if the high 16 bits are zero. */ +/* */ +/* 4. The values must be right-shifted by eight bits by the "updcrc" */ +/* logic; the shift must be unsigned (bring in zeroes). On some */ +/* hardware you could probably optimize the shift in assembler by */ +/* using byte-swap instructions. */ + +static u_long const crc_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + }; + +void +mit_crc32(krb5_pointer in, size_t in_length, unsigned long *cksum) +{ + register u_char *data; + register u_long c = 0; + register int idx; + size_t i; + + data = (u_char *)in; + for (i = 0; i < in_length; i++) { + idx = (int) (data[i] ^ c); + idx &= 0xff; + c >>= 8; + c ^= crc_table[idx]; + } + + *cksum = c; +} + +#ifdef CRC32_SHIFT4 +static unsigned long const tbl4[16] = { + 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, + 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, + 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c +}; + +void +mit_crc32_shift4(krb5_pointer in, size_t in_length, unsigned long *cksum) +{ + register unsigned char *data, b; + register unsigned long c = 0; + size_t i; + + data = (u_char *)in; + for (i = 0; i < in_length; i++) { + b = data[i]; + c = (c >> 4) ^ tbl4[(b ^ c) & 0x0f]; + b >>= 4; + c = (c >> 4) ^ tbl4[(b ^ c) & 0x0f]; + } + *cksum = c; +} +#endif diff --git a/src/lib/crypto/krb/crc32/deps b/src/lib/crypto/krb/crc32/deps new file mode 100644 index 000000000..2558fe2fc --- /dev/null +++ b/src/lib/crypto/krb/crc32/deps @@ -0,0 +1,13 @@ +# +# Generated makefile dependencies follow. +# +crc32.so crc32.po $(OUTPRE)crc32.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h crc-32.h crc32.c diff --git a/src/lib/crypto/krb/crypto_length.c b/src/lib/crypto/krb/crypto_length.c new file mode 100644 index 000000000..d99d18b27 --- /dev/null +++ b/src/lib/crypto/krb/crypto_length.c @@ -0,0 +1,170 @@ +/* + * lib/crypto/crypto_length.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_crypto_length(krb5_context context, + krb5_enctype enctype, + krb5_cryptotype type, + unsigned int *size) +{ + int i; + const struct krb5_keytypes *ktp = NULL; + krb5_error_code ret; + + for (i = 0; i < krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == enctype) { + ktp = &krb5_enctypes_list[i]; + break; + } + } + + if (ktp == NULL || ktp->aead == NULL) { + return KRB5_BAD_ENCTYPE; + } + + switch (type) { + case KRB5_CRYPTO_TYPE_EMPTY: + case KRB5_CRYPTO_TYPE_SIGN_ONLY: + *size = 0; + ret = 0; + break; + case KRB5_CRYPTO_TYPE_DATA: + *size = (size_t)~0; /* match Heimdal */ + ret = 0; + break; + case KRB5_CRYPTO_TYPE_HEADER: + case KRB5_CRYPTO_TYPE_PADDING: + case KRB5_CRYPTO_TYPE_TRAILER: + case KRB5_CRYPTO_TYPE_CHECKSUM: + ret = ktp->aead->crypto_length(ktp->aead, ktp->enc, ktp->hash, type, size); + break; + default: + ret = EINVAL; + break; + } + + return ret; +} + +krb5_error_code KRB5_CALLCONV +krb5_c_padding_length(krb5_context context, + krb5_enctype enctype, + size_t data_length, + unsigned int *pad_length) +{ + int i; + const struct krb5_keytypes *ktp = NULL; + + for (i = 0; i < krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == enctype) { + ktp = &krb5_enctypes_list[i]; + break; + } + } + + if (ktp == NULL || ktp->aead == NULL) { + return KRB5_BAD_ENCTYPE; + } + + return krb5int_c_padding_length(ktp->aead, ktp->enc, ktp->hash, data_length, pad_length); +} + +krb5_error_code KRB5_CALLCONV +krb5_c_crypto_length_iov(krb5_context context, + krb5_enctype enctype, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret = 0; + size_t i; + const struct krb5_keytypes *ktp = NULL; + unsigned int data_length = 0, pad_length; + krb5_crypto_iov *padding = NULL; + + /* + * XXX need to rejig internal interface so we can accurately + * report variable header lengths + */ + + for (i = 0; i < (size_t)krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == enctype) { + ktp = &krb5_enctypes_list[i]; + break; + } + } + + if (ktp == NULL || ktp->aead == NULL) { + return KRB5_BAD_ENCTYPE; + } + + for (i = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + switch (iov->flags) { + case KRB5_CRYPTO_TYPE_DATA: + data_length += iov->data.length; + break; + case KRB5_CRYPTO_TYPE_PADDING: + if (padding != NULL) + return EINVAL; + + padding = iov; + break; + case KRB5_CRYPTO_TYPE_HEADER: + case KRB5_CRYPTO_TYPE_TRAILER: + case KRB5_CRYPTO_TYPE_CHECKSUM: + ret = ktp->aead->crypto_length(ktp->aead, ktp->enc, ktp->hash, iov->flags, &iov->data.length); + break; + case KRB5_CRYPTO_TYPE_EMPTY: + case KRB5_CRYPTO_TYPE_SIGN_ONLY: + default: + break; + } + + if (ret != 0) + break; + } + + if (ret != 0) + return ret; + + ret = krb5int_c_padding_length(ktp->aead, ktp->enc, ktp->hash, data_length, &pad_length); + if (ret != 0) + return ret; + + if (pad_length != 0 && padding == NULL) + return EINVAL; + + if (padding != NULL) + padding->data.length = pad_length; + + return 0; +} + diff --git a/src/lib/crypto/krb/crypto_libinit.c b/src/lib/crypto/krb/crypto_libinit.c new file mode 100644 index 000000000..91bf8ac22 --- /dev/null +++ b/src/lib/crypto/krb/crypto_libinit.c @@ -0,0 +1,33 @@ +#include +#include "k5-int.h" + +MAKE_INIT_FUNCTION(cryptoint_initialize_library); +MAKE_FINI_FUNCTION(cryptoint_cleanup_library); + +extern int krb5int_prng_init(void); +extern void krb5int_prng_cleanup (void); + +/* + * Initialize the crypto library. + */ + +int cryptoint_initialize_library (void) +{ + return krb5int_prng_init(); +} + +int krb5int_crypto_init(void) +{ + return CALL_INIT_FUNCTION(cryptoint_initialize_library); +} + +/* + * Clean up the crypto library state + */ + +void cryptoint_cleanup_library (void) +{ + if (!INITIALIZER_RAN(cryptoint_initialize_library)) + return; + krb5int_prng_cleanup (); +} diff --git a/src/lib/crypto/krb/decrypt.c b/src/lib/crypto/krb/decrypt.c new file mode 100644 index 000000000..74c38f6aa --- /dev/null +++ b/src/lib/crypto/krb/decrypt.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, + krb5_keyusage usage, const krb5_data *ivec, + const krb5_enc_data *input, krb5_data *output) +{ + int i; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) { + krb5int_set_error(&context->err, KRB5_BAD_ENCTYPE, + "Bad encryption type (type %d unknown)", + key->enctype); + return(KRB5_BAD_ENCTYPE); + } + + if ((input->enctype != ENCTYPE_UNKNOWN) && + (krb5_enctypes_list[i].etype != input->enctype)) + return(KRB5_BAD_ENCTYPE); + + if (krb5_enctypes_list[i].decrypt == NULL) { + assert(krb5_enctypes_list[i].aead != NULL); + + return krb5int_c_decrypt_aead_compat(krb5_enctypes_list[i].aead, + krb5_enctypes_list[i].enc, + krb5_enctypes_list[i].hash, + key, usage, ivec, + &input->ciphertext, output); + } + + return((*(krb5_enctypes_list[i].decrypt)) + (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, + key, usage, ivec, &input->ciphertext, output)); +} diff --git a/src/lib/crypto/krb/decrypt_iov.c b/src/lib/crypto/krb/decrypt_iov.c new file mode 100644 index 000000000..1a98b0657 --- /dev/null +++ b/src/lib/crypto/krb/decrypt_iov.c @@ -0,0 +1,61 @@ +/* + * lib/crypto/encrypt_iov.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_decrypt_iov(krb5_context context, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *cipher_state, + krb5_crypto_iov *data, + size_t num_data) +{ + int i; + const struct krb5_keytypes *ktp = NULL; + + for (i = 0; i < krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == key->enctype) { + ktp = &krb5_enctypes_list[i]; + break; + } + } + + if (ktp == NULL || ktp->aead == NULL) { + return KRB5_BAD_ENCTYPE; + } + + if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { + return krb5int_c_iov_decrypt_stream(ktp->aead, ktp->enc, ktp->hash, + key, usage, cipher_state, data, num_data); + } + + return ktp->aead->decrypt_iov(ktp->aead, ktp->enc, ktp->hash, + key, usage, cipher_state, data, num_data); +} + diff --git a/src/lib/crypto/krb/default_state.c b/src/lib/crypto/krb/default_state.c new file mode 100644 index 000000000..33a189f26 --- /dev/null +++ b/src/lib/crypto/krb/default_state.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2001 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * Section 6 (Encryption) of the Kerberos revisions document defines + * cipher states to be used to chain encryptions and decryptions + * together. Examples of cipher states include initialization vectors + * for CBC encription. Most Kerberos encryption systems can share + * code for initializing and freeing cipher states. This file + * contains that default code. + */ + +#include "k5-int.h" + +krb5_error_code krb5int_des_init_state +(const krb5_keyblock *key, krb5_keyusage usage, krb5_data *new_state ) +{ + new_state->length = 8; + new_state->data = (void *) malloc(8); + if (new_state->data) { + memset (new_state->data, 0, new_state->length); + /* We need to copy in the key for des-cbc-cr--ick, but that's how it works*/ + if (key->enctype == ENCTYPE_DES_CBC_CRC) { + memcpy (new_state->data, key->contents, new_state->length); + } + } else { + return ENOMEM; + } + return 0; +} + +krb5_error_code krb5int_default_free_state +(krb5_data *state) +{ + if (state->data) { + free (state->data); + state-> data = NULL; + state->length = 0; + } + return 0; +} + + + diff --git a/src/lib/crypto/krb/deps b/src/lib/crypto/krb/deps new file mode 100644 index 000000000..d7041bf76 --- /dev/null +++ b/src/lib/crypto/krb/deps @@ -0,0 +1,445 @@ +# +# Generated makefile dependencies follow. +# +aead.so aead.po $(OUTPRE)aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/dk/dk.h \ + aead.c aead.h cksumtypes.h etypes.h +block_size.so block_size.po $(OUTPRE)block_size.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + block_size.c etypes.h +checksum_length.so checksum_length.po $(OUTPRE)checksum_length.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + checksum_length.c cksumtypes.h +cksumtype_to_string.so cksumtype_to_string.po $(OUTPRE)cksumtype_to_string.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtype_to_string.c cksumtypes.h +cksumtypes.so cksumtypes.po $(OUTPRE)cksumtypes.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/hash_provider/hash_provider.h $(srcdir)/keyhash_provider/keyhash_provider.h \ + cksumtypes.c cksumtypes.h +coll_proof_cksum.so coll_proof_cksum.po $(OUTPRE)coll_proof_cksum.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h coll_proof_cksum.c +combine_keys.so combine_keys.po $(OUTPRE)combine_keys.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/dk/dk.h combine_keys.c etypes.h +crypto_length.so crypto_length.po $(OUTPRE)crypto_length.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + aead.h cksumtypes.h crypto_length.c etypes.h +crypto_libinit.so crypto_libinit.po $(OUTPRE)crypto_libinit.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + crypto_libinit.c +default_state.so default_state.po $(OUTPRE)default_state.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + default_state.c +decrypt.so decrypt.po $(OUTPRE)decrypt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ + decrypt.c etypes.h +decrypt_iov.so decrypt_iov.po $(OUTPRE)decrypt_iov.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + aead.h cksumtypes.h decrypt_iov.c etypes.h +encrypt.so encrypt.po $(OUTPRE)encrypt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h aead.h cksumtypes.h \ + encrypt.c etypes.h +encrypt_iov.so encrypt_iov.po $(OUTPRE)encrypt_iov.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + encrypt_iov.c etypes.h +encrypt_length.so encrypt_length.po $(OUTPRE)encrypt_length.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + aead.h cksumtypes.h encrypt_length.c etypes.h +enctype_compare.so enctype_compare.po $(OUTPRE)enctype_compare.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + enctype_compare.c etypes.h +enctype_to_string.so enctype_to_string.po $(OUTPRE)enctype_to_string.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + enctype_to_string.c etypes.h +etypes.so etypes.po $(OUTPRE)etypes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../builtin/aes/aes_s2k.h \ + $(srcdir)/../builtin/arcfour/arcfour.h $(srcdir)/../builtin/des/des_int.h \ + $(srcdir)/dk/dk.h $(srcdir)/enc_provider/enc_provider.h \ + $(srcdir)/hash_provider/hash_provider.h $(srcdir)/old/old.h \ + $(srcdir)/raw/raw.h etypes.c etypes.h +keyblocks.so keyblocks.po $(OUTPRE)keyblocks.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + keyblocks.c +keyed_cksum.so keyed_cksum.po $(OUTPRE)keyed_cksum.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h keyed_cksum.c +keyed_checksum_types.so keyed_checksum_types.po $(OUTPRE)keyed_checksum_types.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h etypes.h keyed_checksum_types.c +keylengths.so keylengths.po $(OUTPRE)keylengths.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h keylengths.c +make_checksum.so make_checksum.po $(OUTPRE)make_checksum.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/dk/dk.h cksumtypes.h etypes.h make_checksum.c +make_checksum_iov.so make_checksum_iov.po $(OUTPRE)make_checksum_iov.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + aead.h cksumtypes.h make_checksum_iov.c +make_random_key.so make_random_key.po $(OUTPRE)make_random_key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h make_random_key.c +mandatory_sumtype.so mandatory_sumtype.po $(OUTPRE)mandatory_sumtype.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h mandatory_sumtype.c +nfold.so nfold.po $(OUTPRE)nfold.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h nfold.c +old_api_glue.so old_api_glue.po $(OUTPRE)old_api_glue.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + old_api_glue.c +prf.so prf.po $(OUTPRE)prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h etypes.h prf.c +cf2.so cf2.po $(OUTPRE)cf2.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h cf2.c etypes.h +prng.so prng.po $(OUTPRE)prng.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../builtin/sha1/shs.h \ + $(srcdir)/enc_provider/enc_provider.h $(srcdir)/yarrow/yarrow.h \ + $(srcdir)/yarrow/ycipher.h $(srcdir)/yarrow/yhash.h \ + $(srcdir)/yarrow/ytypes.h prng.c +random_to_key.so random_to_key.po $(OUTPRE)random_to_key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h random_to_key.c +state.so state.po $(OUTPRE)state.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h etypes.h state.c +string_to_cksumtype.so string_to_cksumtype.po $(OUTPRE)string_to_cksumtype.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h string_to_cksumtype.c +string_to_enctype.so string_to_enctype.po $(OUTPRE)string_to_enctype.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h string_to_enctype.c +string_to_key.so string_to_key.po $(OUTPRE)string_to_key.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h string_to_key.c +valid_cksumtype.so valid_cksumtype.po $(OUTPRE)valid_cksumtype.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h valid_cksumtype.c +valid_enctype.so valid_enctype.po $(OUTPRE)valid_enctype.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + etypes.h valid_enctype.c +verify_checksum.so verify_checksum.po $(OUTPRE)verify_checksum.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + cksumtypes.h verify_checksum.c +verify_checksum_iov.so verify_checksum_iov.po $(OUTPRE)verify_checksum_iov.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + aead.h cksumtypes.h verify_checksum_iov.c diff --git a/src/lib/crypto/krb/dk/Makefile.in b/src/lib/crypto/krb/dk/Makefile.in new file mode 100644 index 000000000..b254523c5 --- /dev/null +++ b/src/lib/crypto/krb/dk/Makefile.in @@ -0,0 +1,53 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/dk +mydir=lib/crypto/dk +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@ +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=dk +##DOS##OBJFILE=..\$(OUTPRE)dk.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + checksum.o \ + dk_aead.o \ + dk_decrypt.o \ + dk_encrypt.o \ + derive.o \ + dk_prf.o \ + stringtokey.o + +OBJS=\ + $(OUTPRE)checksum.$(OBJEXT) \ + $(OUTPRE)dk_aead.$(OBJEXT) \ + $(OUTPRE)dk_decrypt.$(OBJEXT) \ + $(OUTPRE)dk_encrypt.$(OBJEXT) \ + $(OUTPRE)derive.$(OBJEXT) \ + $(OUTPRE)dk_prf.$(OBJEXT) \ + $(OUTPRE)stringtokey.$(OBJEXT) + +SRCS=\ + $(srcdir)/checksum.c \ + $(srcdir)/dk_aead.c \ + $(srcdir)/dk_decrypt.c \ + $(srcdir)/dk_encrypt.c \ + $(srcdir)/dk_prf.c \ + $(srcdir)/derive.c \ + $(srcdir)/stringtokey.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/dk/checksum.c b/src/lib/crypto/krb/dk/checksum.c new file mode 100644 index 000000000..f4b18bf0c --- /dev/null +++ b/src/lib/crypto/krb/dk/checksum.c @@ -0,0 +1,168 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "dk.h" +#include "aead.h" + +#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ + +krb5_error_code +krb5_dk_make_checksum(const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *input, krb5_data *output) +{ + int i; + const struct krb5_enc_provider *enc; + size_t blocksize, keybytes, keylength; + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data datain; + unsigned char *kcdata; + krb5_keyblock kc; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + enc = krb5_enctypes_list[i].enc; + + /* allocate and set to-be-derived keys */ + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + /* key->length will be tested in enc->encrypt + output->length will be tested in krb5_hmac */ + + if ((kcdata = (unsigned char *) malloc(keylength)) == NULL) + return(ENOMEM); + + kc.contents = kcdata; + kc.length = keylength; + + /* derive the key */ + + datain.data = (char *) constantdata; + datain.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + datain.data[4] = (char) 0x99; + + if ((ret = krb5_derive_key(enc, key, &kc, &datain)) != 0) + goto cleanup; + + /* hash the data */ + + datain = *input; + + if ((ret = krb5_hmac(hash, &kc, 1, &datain, output)) != 0) + memset(output->data, 0, output->length); + + /* ret is set correctly by the prior call */ + +cleanup: + memset(kcdata, 0, keylength); + + free(kcdata); + + return(ret); +} + +krb5_error_code +krb5int_dk_make_checksum_iov(const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_crypto_iov *data, size_t num_data, + krb5_data *output) +{ + int i; + const struct krb5_enc_provider *enc; + size_t blocksize, keybytes, keylength; + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data datain; + unsigned char *kcdata; + krb5_keyblock kc; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + enc = krb5_enctypes_list[i].enc; + + /* allocate and set to-be-derived keys */ + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + /* key->length will be tested in enc->encrypt + output->length will be tested in krb5_hmac */ + + if ((kcdata = (unsigned char *) malloc(keylength)) == NULL) + return(ENOMEM); + + kc.contents = kcdata; + kc.length = keylength; + + /* derive the key */ + + datain.data = (char *) constantdata; + datain.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + datain.data[4] = (char) 0x99; + + if ((ret = krb5_derive_key(enc, key, &kc, &datain)) != 0) + goto cleanup; + + /* hash the data */ + + if ((ret = krb5int_hmac_iov(hash, &kc, data, num_data, output)) != 0) + memset(output->data, 0, output->length); + + /* ret is set correctly by the prior call */ + +cleanup: + memset(kcdata, 0, keylength); + + free(kcdata); + + return(ret); +} + diff --git a/src/lib/crypto/krb/dk/deps b/src/lib/crypto/krb/dk/deps new file mode 100644 index 000000000..28e8a089c --- /dev/null +++ b/src/lib/crypto/krb/dk/deps @@ -0,0 +1,79 @@ +# +# Generated makefile dependencies follow. +# +checksum.so checksum.po $(OUTPRE)checksum.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h $(srcdir)/../etypes.h \ + checksum.c dk.h +dk_aead.so dk_aead.po $(OUTPRE)dk_aead.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../aead.h \ + $(srcdir)/../cksumtypes.h dk.h dk_aead.c +dk_decrypt.so dk_decrypt.po $(OUTPRE)dk_decrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + dk.h dk_decrypt.c +dk_encrypt.so dk_encrypt.po $(OUTPRE)dk_encrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + dk.h dk_encrypt.c +dk_prf.so dk_prf.po $(OUTPRE)dk_prf.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h dk.h dk_prf.c +derive.so derive.po $(OUTPRE)derive.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h derive.c dk.h +stringtokey.so stringtokey.po $(OUTPRE)stringtokey.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + dk.h stringtokey.c diff --git a/src/lib/crypto/krb/dk/derive.c b/src/lib/crypto/krb/dk/derive.c new file mode 100644 index 000000000..77b05fa1a --- /dev/null +++ b/src/lib/crypto/krb/dk/derive.c @@ -0,0 +1,217 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "dk.h" + +krb5_error_code +krb5_derive_key(const struct krb5_enc_provider *enc, + const krb5_keyblock *inkey, krb5_keyblock *outkey, + const krb5_data *in_constant) +{ + size_t blocksize, keybytes, keylength, n; + unsigned char *inblockdata, *outblockdata, *rawkey; + krb5_data inblock, outblock; + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + if ((inkey->length != keylength) || + (outkey->length != keylength)) + return(KRB5_CRYPTO_INTERNAL); + + /* allocate and set up buffers */ + + if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) + return(ENOMEM); + + if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { + free(inblockdata); + return(ENOMEM); + } + + if ((rawkey = (unsigned char *) malloc(keybytes)) == NULL) { + free(outblockdata); + free(inblockdata); + return(ENOMEM); + } + + inblock.data = (char *) inblockdata; + inblock.length = blocksize; + + outblock.data = (char *) outblockdata; + outblock.length = blocksize; + + /* initialize the input block */ + + if (in_constant->length == inblock.length) { + memcpy(inblock.data, in_constant->data, inblock.length); + } else { + krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, + inblock.length*8, (unsigned char *) inblock.data); + } + + /* loop encrypting the blocks until enough key bytes are generated */ + + n = 0; + while (n < keybytes) { + (*(enc->encrypt))(inkey, 0, &inblock, &outblock); + + if ((keybytes - n) <= outblock.length) { + memcpy(rawkey+n, outblock.data, (keybytes - n)); + break; + } + + memcpy(rawkey+n, outblock.data, outblock.length); + memcpy(inblock.data, outblock.data, outblock.length); + n += outblock.length; + } + + /* postprocess the key */ + + inblock.data = (char *) rawkey; + inblock.length = keybytes; + + (*(enc->make_key))(&inblock, outkey); + + /* clean memory, free resources and exit */ + + memset(inblockdata, 0, blocksize); + memset(outblockdata, 0, blocksize); + memset(rawkey, 0, keybytes); + + free(rawkey); + free(outblockdata); + free(inblockdata); + + return(0); +} + + +krb5_error_code +krb5_derive_random(const struct krb5_enc_provider *enc, + const krb5_keyblock *inkey, krb5_data *outrnd, + const krb5_data *in_constant) +{ + size_t blocksize, keybytes, keylength, n; + unsigned char *inblockdata, *outblockdata, *rawkey; + krb5_data inblock, outblock; + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + if ((inkey->length != keylength) || + (outrnd->length != keybytes)) + return(KRB5_CRYPTO_INTERNAL); + + /* allocate and set up buffers */ + + if ((inblockdata = (unsigned char *) malloc(blocksize)) == NULL) + return(ENOMEM); + + if ((outblockdata = (unsigned char *) malloc(blocksize)) == NULL) { + free(inblockdata); + return(ENOMEM); + } + + if ((rawkey = (unsigned char *) malloc(keybytes)) == NULL) { + free(outblockdata); + free(inblockdata); + return(ENOMEM); + } + + inblock.data = (char *) inblockdata; + inblock.length = blocksize; + + outblock.data = (char *) outblockdata; + outblock.length = blocksize; + + /* initialize the input block */ + + if (in_constant->length == inblock.length) { + memcpy(inblock.data, in_constant->data, inblock.length); + } else { + krb5_nfold(in_constant->length*8, (unsigned char *) in_constant->data, + inblock.length*8, (unsigned char *) inblock.data); + } + + /* loop encrypting the blocks until enough key bytes are generated */ + + n = 0; + while (n < keybytes) { + (*(enc->encrypt))(inkey, 0, &inblock, &outblock); + + if ((keybytes - n) <= outblock.length) { + memcpy(rawkey+n, outblock.data, (keybytes - n)); + break; + } + + memcpy(rawkey+n, outblock.data, outblock.length); + memcpy(inblock.data, outblock.data, outblock.length); + n += outblock.length; + } + + /* postprocess the key */ + + memcpy (outrnd->data, rawkey, keybytes); + + /* clean memory, free resources and exit */ + + memset(inblockdata, 0, blocksize); + memset(outblockdata, 0, blocksize); + memset(rawkey, 0, keybytes); + + free(rawkey); + free(outblockdata); + free(inblockdata); + + return(0); +} + +#if 0 +#include "etypes.h" +void +krb5_random2key (krb5_enctype enctype, krb5_data *inblock, + krb5_keyblock *outkey) +{ + int i; + const struct krb5_enc_provider *enc; + + for (i=0; imake_key (inblock, outkey); +} +#endif diff --git a/src/lib/crypto/krb/dk/dk.h b/src/lib/crypto/krb/dk/dk.h new file mode 100644 index 000000000..bc40134ef --- /dev/null +++ b/src/lib/crypto/krb/dk/dk.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +void krb5_dk_encrypt_length +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t input, size_t *length); + +krb5_error_code krb5_dk_encrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, krb5_data *output); + +void krb5int_aes_encrypt_length +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t input, size_t *length); + +krb5_error_code krb5int_aes_dk_encrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, krb5_data *output); + +krb5_error_code krb5_dk_decrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); + +krb5_error_code krb5int_aes_dk_decrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); + +krb5_error_code krb5int_dk_string_to_key +(const struct krb5_enc_provider *enc, + const krb5_data *string, const krb5_data *salt, + const krb5_data *params, krb5_keyblock *key); + +krb5_error_code +krb5int_dk_prf(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, const krb5_data *in, krb5_data *out); + +krb5_error_code krb5_derive_key +(const struct krb5_enc_provider *enc, + const krb5_keyblock *inkey, + krb5_keyblock *outkey, const krb5_data *in_constant); + +krb5_error_code krb5_dk_make_checksum +(const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *input, krb5_data *output); + +krb5_error_code +krb5int_dk_make_checksum_iov(const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_crypto_iov *data, size_t num_data, + krb5_data *output); + +krb5_error_code +krb5_derive_random(const struct krb5_enc_provider *enc, + const krb5_keyblock *inkey, krb5_data *outrnd, + const krb5_data *in_constant); + +/* AEAD */ + +extern const struct krb5_aead_provider krb5int_aead_dk; +extern const struct krb5_aead_provider krb5int_aead_aes; + +/* CCM */ + +void +krb5int_ccm_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length); + +extern const struct krb5_aead_provider krb5int_aead_ccm; + +krb5_error_code krb5int_ccm_encrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); + +krb5_error_code krb5int_ccm_decrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); diff --git a/src/lib/crypto/krb/dk/dk_aead.c b/src/lib/crypto/krb/dk/dk_aead.c new file mode 100644 index 000000000..e995f9ae6 --- /dev/null +++ b/src/lib/crypto/krb/dk/dk_aead.c @@ -0,0 +1,386 @@ +/* + * lib/crypto/dk/dk_aead.c + * + * Copyright 2008, 2009 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + + +#include "k5-int.h" +#include "dk.h" +#include "aead.h" + +#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ + +/* AEAD */ + +static krb5_error_code +krb5int_dk_crypto_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + krb5_cryptotype type, + unsigned int *length) +{ + switch (type) { + case KRB5_CRYPTO_TYPE_HEADER: + case KRB5_CRYPTO_TYPE_PADDING: + *length = enc->block_size; + break; + case KRB5_CRYPTO_TYPE_TRAILER: + case KRB5_CRYPTO_TYPE_CHECKSUM: + *length = hash->hashsize; + break; + default: + assert(0 && "invalid cryptotype passed to krb5int_dk_crypto_length"); + break; + } + + return 0; +} + +static krb5_error_code +krb5int_dk_encrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data d1, d2; + krb5_crypto_iov *header, *trailer, *padding; + krb5_keyblock ke, ki; + size_t i; + unsigned int blocksize = 0; + unsigned int plainlen = 0; + unsigned int hmacsize = 0; + unsigned int padsize = 0; + unsigned char *cksum = NULL; + + ke.contents = ki.contents = NULL; + ke.length = ki.length = 0; + + /* E(Confounder | Plaintext | Pad) | Checksum */ + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); + if (ret != 0) + return ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &hmacsize); + if (ret != 0) + return ret; + + for (i = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + if (iov->flags == KRB5_CRYPTO_TYPE_DATA) + plainlen += iov->data.length; + } + + /* Validate header and trailer lengths. */ + + header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); + if (header == NULL || header->data.length < enc->block_size) + return KRB5_BAD_MSIZE; + + trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); + if (trailer == NULL || trailer->data.length < hmacsize) + return KRB5_BAD_MSIZE; + + if (blocksize != 0) { + /* Check that the input data is correctly padded */ + if (plainlen % blocksize) + padsize = blocksize - (plainlen % blocksize); + } + + padding = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_PADDING); + if (padsize && (padding == NULL || padding->data.length < padsize)) + return KRB5_BAD_MSIZE; + + if (padding != NULL) { + memset(padding->data.data, 0, padsize); + padding->data.length = padsize; + } + + ke.length = enc->keylength; + ke.contents = malloc(ke.length); + if (ke.contents == NULL) { + ret = ENOMEM; + goto cleanup; + } + ki.length = enc->keylength; + ki.contents = malloc(ki.length); + if (ki.contents == NULL) { + ret = ENOMEM; + goto cleanup; + } + cksum = (unsigned char *)malloc(hash->hashsize); + if (cksum == NULL) { + ret = ENOMEM; + goto cleanup; + } + + /* derive the keys */ + + d1.data = (char *)constantdata; + d1.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + d1.data[4] = 0xAA; + + ret = krb5_derive_key(enc, key, &ke, &d1); + if (ret != 0) + goto cleanup; + + d1.data[4] = 0x55; + + ret = krb5_derive_key(enc, key, &ki, &d1); + if (ret != 0) + goto cleanup; + + /* generate confounder */ + + header->data.length = enc->block_size; + + ret = krb5_c_random_make_octets(/* XXX */ NULL, &header->data); + if (ret != 0) + goto cleanup; + + /* hash the plaintext */ + d2.length = hash->hashsize; + d2.data = (char *)cksum; + + ret = krb5int_hmac_iov(hash, &ki, data, num_data, &d2); + if (ret != 0) + goto cleanup; + + /* encrypt the plaintext (header | data | padding) */ + assert(enc->encrypt_iov != NULL); + + ret = enc->encrypt_iov(&ke, ivec, data, num_data); /* will update ivec */ + if (ret != 0) + goto cleanup; + + /* possibly truncate the hash */ + assert(hmacsize <= d2.length); + + memcpy(trailer->data.data, cksum, hmacsize); + trailer->data.length = hmacsize; + +cleanup: + if (ke.contents != NULL) { + memset(ke.contents, 0, ke.length); + free(ke.contents); + } + if (ki.contents != NULL) { + memset(ki.contents, 0, ki.length); + free(ki.contents); + } + if (cksum != NULL) { + free(cksum); + } + + return ret; +} + +static krb5_error_code +krb5int_dk_decrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data d1; + krb5_crypto_iov *header, *trailer; + krb5_keyblock ke, ki; + size_t i; + unsigned int blocksize = 0; /* careful, this is enc block size not confounder len */ + unsigned int cipherlen = 0; + unsigned int hmacsize = 0; + unsigned char *cksum = NULL; + + if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { + return krb5int_c_iov_decrypt_stream(aead, enc, hash, key, + usage, ivec, data, num_data); + } + + ke.contents = ki.contents = NULL; + ke.length = ki.length = 0; + + /* E(Confounder | Plaintext | Pad) | Checksum */ + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); + if (ret != 0) + return ret; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_TRAILER, &hmacsize); + if (ret != 0) + return ret; + + for (i = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_DATA_IOV(iov)) + cipherlen += iov->data.length; + } + + if (blocksize == 0) { + /* Check for correct input length in CTS mode */ + if (enc->block_size != 0 && cipherlen < enc->block_size) + return KRB5_BAD_MSIZE; + } else { + /* Check that the input data is correctly padded */ + if ((cipherlen % blocksize) != 0) + return KRB5_BAD_MSIZE; + } + + /* Validate header and trailer lengths */ + + header = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_HEADER); + if (header == NULL || header->data.length != enc->block_size) + return KRB5_BAD_MSIZE; + + trailer = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_TRAILER); + if (trailer == NULL || trailer->data.length != hmacsize) + return KRB5_BAD_MSIZE; + + ke.length = enc->keylength; + ke.contents = malloc(ke.length); + if (ke.contents == NULL) { + ret = ENOMEM; + goto cleanup; + } + ki.length = enc->keylength; + ki.contents = malloc(ki.length); + if (ki.contents == NULL) { + ret = ENOMEM; + goto cleanup; + } + cksum = (unsigned char *)malloc(hash->hashsize); + if (cksum == NULL) { + ret = ENOMEM; + goto cleanup; + } + + /* derive the keys */ + + d1.data = (char *)constantdata; + d1.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + d1.data[4] = 0xAA; + + ret = krb5_derive_key(enc, key, &ke, &d1); + if (ret != 0) + goto cleanup; + + d1.data[4] = 0x55; + + ret = krb5_derive_key(enc, key, &ki, &d1); + if (ret != 0) + goto cleanup; + + /* decrypt the plaintext (header | data | padding) */ + assert(enc->decrypt_iov != NULL); + + ret = enc->decrypt_iov(&ke, ivec, data, num_data); /* will update ivec */ + if (ret != 0) + goto cleanup; + + /* verify the hash */ + d1.length = hash->hashsize; /* non-truncated length */ + d1.data = (char *)cksum; + + ret = krb5int_hmac_iov(hash, &ki, data, num_data, &d1); + if (ret != 0) + goto cleanup; + + /* compare only the possibly truncated length */ + if (memcmp(cksum, trailer->data.data, hmacsize) != 0) { + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + goto cleanup; + } + +cleanup: + if (ke.contents != NULL) { + memset(ke.contents, 0, ke.length); + free(ke.contents); + } + if (ki.contents != NULL) { + memset(ki.contents, 0, ki.length); + free(ki.contents); + } + if (cksum != NULL) { + free(cksum); + } + + return ret; +} + +const struct krb5_aead_provider krb5int_aead_dk = { + krb5int_dk_crypto_length, + krb5int_dk_encrypt_iov, + krb5int_dk_decrypt_iov +}; + +static krb5_error_code +krb5int_aes_crypto_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + krb5_cryptotype type, + unsigned int *length) +{ + switch (type) { + case KRB5_CRYPTO_TYPE_HEADER: + *length = enc->block_size; + break; + case KRB5_CRYPTO_TYPE_PADDING: + *length = 0; + break; + case KRB5_CRYPTO_TYPE_TRAILER: + case KRB5_CRYPTO_TYPE_CHECKSUM: + *length = 96 / 8; + break; + default: + assert(0 && "invalid cryptotype passed to krb5int_aes_crypto_length"); + break; + } + + return 0; +} + +const struct krb5_aead_provider krb5int_aead_aes = { + krb5int_aes_crypto_length, + krb5int_dk_encrypt_iov, + krb5int_dk_decrypt_iov +}; + diff --git a/src/lib/crypto/krb/dk/dk_decrypt.c b/src/lib/crypto/krb/dk/dk_decrypt.c new file mode 100644 index 000000000..c38c4d5bf --- /dev/null +++ b/src/lib/crypto/krb/dk/dk_decrypt.c @@ -0,0 +1,200 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "dk.h" + +#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ + +static krb5_error_code +krb5_dk_decrypt_maybe_trunc_hmac(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, + krb5_data *output, + size_t hmacsize, + int ivec_mode); + +krb5_error_code +krb5_dk_decrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + return krb5_dk_decrypt_maybe_trunc_hmac(enc, hash, key, usage, + ivec, input, output, 0, 0); +} + +krb5_error_code +krb5int_aes_dk_decrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + return krb5_dk_decrypt_maybe_trunc_hmac(enc, hash, key, usage, + ivec, input, output, 96 / 8, 1); +} + +static krb5_error_code +krb5_dk_decrypt_maybe_trunc_hmac(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output, size_t hmacsize, + int ivec_mode) +{ + krb5_error_code ret; + size_t hashsize, blocksize, keybytes, keylength, enclen, plainlen; + unsigned char *plaindata, *kedata, *kidata, *cksum, *cn; + krb5_keyblock ke, ki; + krb5_data d1, d2; + unsigned char constantdata[K5CLENGTH]; + + /* allocate and set up ciphertext and to-be-derived keys */ + + hashsize = hash->hashsize; + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + + if (hmacsize == 0) + hmacsize = hashsize; + else if (hmacsize > hashsize) + return KRB5KRB_AP_ERR_BAD_INTEGRITY; + + enclen = input->length - hmacsize; + + if ((kedata = (unsigned char *) malloc(keylength)) == NULL) + return(ENOMEM); + if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { + free(kedata); + return(ENOMEM); + } + if ((plaindata = (unsigned char *) malloc(enclen)) == NULL) { + free(kidata); + free(kedata); + return(ENOMEM); + } + if ((cksum = (unsigned char *) malloc(hashsize)) == NULL) { + free(plaindata); + free(kidata); + free(kedata); + return(ENOMEM); + } + + ke.contents = kedata; + ke.length = keylength; + ki.contents = kidata; + ki.length = keylength; + + /* derive the keys */ + + d1.data = (char *) constantdata; + d1.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + d1.data[4] = (char) 0xAA; + + if ((ret = krb5_derive_key(enc, key, &ke, &d1)) != 0) + goto cleanup; + + d1.data[4] = 0x55; + + if ((ret = krb5_derive_key(enc, key, &ki, &d1)) != 0) + goto cleanup; + + /* decrypt the ciphertext */ + + d1.length = enclen; + d1.data = input->data; + + d2.length = enclen; + d2.data = (char *) plaindata; + + if ((ret = ((*(enc->decrypt))(&ke, ivec, &d1, &d2))) != 0) + goto cleanup; + + if (ivec != NULL && ivec->length == blocksize) { + if (ivec_mode == 0) + cn = (unsigned char *) d1.data + d1.length - blocksize; + else if (ivec_mode == 1) { + int nblocks = (d1.length + blocksize - 1) / blocksize; + cn = d1.data + blocksize * (nblocks - 2); + } else + abort(); + } else + cn = NULL; + + /* verify the hash */ + + d1.length = hashsize; + d1.data = (char *) cksum; + + if ((ret = krb5_hmac(hash, &ki, 1, &d2, &d1)) != 0) + goto cleanup; + + if (memcmp(cksum, input->data+enclen, hmacsize) != 0) { + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + goto cleanup; + } + + /* because this encoding isn't self-describing wrt length, the + best we can do here is to compute the length minus the + confounder. */ + + plainlen = enclen - blocksize; + + if (output->length < plainlen) + return(KRB5_BAD_MSIZE); + + output->length = plainlen; + + memcpy(output->data, d2.data+blocksize, output->length); + + if (cn != NULL) + memcpy(ivec->data, cn, blocksize); + + ret = 0; + +cleanup: + memset(kedata, 0, keylength); + memset(kidata, 0, keylength); + memset(plaindata, 0, enclen); + memset(cksum, 0, hashsize); + + free(cksum); + free(plaindata); + free(kidata); + free(kedata); + + return(ret); +} + diff --git a/src/lib/crypto/krb/dk/dk_encrypt.c b/src/lib/crypto/krb/dk/dk_encrypt.c new file mode 100644 index 000000000..6596e53ce --- /dev/null +++ b/src/lib/crypto/krb/dk/dk_encrypt.c @@ -0,0 +1,358 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "dk.h" + +#define K5CLENGTH 5 /* 32 bit net byte order integer + one byte seed */ + +/* the spec says that the confounder size and padding are specific to + the encryption algorithm. This code (dk_encrypt_length and + dk_encrypt) assume the confounder is always the blocksize, and the + padding is always zero bytes up to the blocksize. If these + assumptions ever fails, the keytype table should be extended to + include these bits of info. */ + +void +krb5_dk_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length) +{ + size_t blocksize, hashsize; + + blocksize = enc->block_size; + hashsize = hash->hashsize; + *length = krb5_roundup(blocksize+inputlen, blocksize) + hashsize; +} + +krb5_error_code +krb5_dk_encrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + size_t blocksize, keybytes, keylength, plainlen, enclen; + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data d1, d2; + unsigned char *plaintext, *kedata, *kidata; + char *cn; + krb5_keyblock ke, ki; + + /* allocate and set up plaintext and to-be-derived keys */ + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + plainlen = krb5_roundup(blocksize+input->length, blocksize); + + krb5_dk_encrypt_length(enc, hash, input->length, &enclen); + + /* key->length, ivec will be tested in enc->encrypt */ + + if (output->length < enclen) + return(KRB5_BAD_MSIZE); + + if ((kedata = (unsigned char *) malloc(keylength)) == NULL) + return(ENOMEM); + if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { + free(kedata); + return(ENOMEM); + } + if ((plaintext = (unsigned char *) malloc(plainlen)) == NULL) { + free(kidata); + free(kedata); + return(ENOMEM); + } + + ke.contents = kedata; + ke.length = keylength; + ki.contents = kidata; + ki.length = keylength; + + /* derive the keys */ + + d1.data = (char *) constantdata; + d1.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + d1.data[4] = (char) 0xAA; + + if ((ret = krb5_derive_key(enc, key, &ke, &d1))) + goto cleanup; + + d1.data[4] = 0x55; + + if ((ret = krb5_derive_key(enc, key, &ki, &d1))) + goto cleanup; + + /* put together the plaintext */ + + d1.length = blocksize; + d1.data = (char *) plaintext; + + if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &d1))) + goto cleanup; + + memcpy(plaintext+blocksize, input->data, input->length); + + memset(plaintext+blocksize+input->length, 0, + plainlen - (blocksize+input->length)); + + /* encrypt the plaintext */ + + d1.length = plainlen; + d1.data = (char *) plaintext; + + d2.length = plainlen; + d2.data = output->data; + + if ((ret = ((*(enc->encrypt))(&ke, ivec, &d1, &d2)))) + goto cleanup; + + if (ivec != NULL && ivec->length == blocksize) + cn = d2.data + d2.length - blocksize; + else + cn = NULL; + + /* hash the plaintext */ + + d2.length = enclen - plainlen; + d2.data = output->data+plainlen; + + output->length = enclen; + + if ((ret = krb5_hmac(hash, &ki, 1, &d1, &d2))) { + memset(d2.data, 0, d2.length); + goto cleanup; + } + + /* update ivec */ + if (cn != NULL) + memcpy(ivec->data, cn, blocksize); + + /* ret is set correctly by the prior call */ + +cleanup: + memset(kedata, 0, keylength); + memset(kidata, 0, keylength); + memset(plaintext, 0, plainlen); + + free(plaintext); + free(kidata); + free(kedata); + + return(ret); +} + +/* Not necessarily "AES", per se, but "a CBC+CTS mode block cipher + with a 96-bit truncated HMAC". */ +void +krb5int_aes_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length) +{ + size_t blocksize, hashsize; + + blocksize = enc->block_size; + hashsize = 96 / 8; + + /* No roundup, since CTS requires no padding once we've hit the + block size. */ + *length = blocksize+inputlen + hashsize; +} + +static krb5_error_code +trunc_hmac (const struct krb5_hash_provider *hash, + const krb5_keyblock *ki, unsigned int num, + const krb5_data *input, const krb5_data *output) +{ + size_t hashsize; + krb5_data tmp; + krb5_error_code ret; + + hashsize = hash->hashsize; + if (hashsize < output->length) + return KRB5_CRYPTO_INTERNAL; + tmp.length = hashsize; + tmp.data = malloc(hashsize); + if (tmp.data == NULL) + return ENOMEM; + ret = krb5_hmac(hash, ki, num, input, &tmp); + if (ret == 0) + memcpy(output->data, tmp.data, output->length); + memset(tmp.data, 0, hashsize); + free(tmp.data); + return ret; +} + +krb5_error_code +krb5int_aes_dk_encrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + size_t blocksize, keybytes, keylength, plainlen, enclen; + krb5_error_code ret; + unsigned char constantdata[K5CLENGTH]; + krb5_data d1, d2; + unsigned char *plaintext, *kedata, *kidata; + char *cn; + krb5_keyblock ke, ki; + + /* allocate and set up plaintext and to-be-derived keys */ + + blocksize = enc->block_size; + keybytes = enc->keybytes; + keylength = enc->keylength; + plainlen = blocksize+input->length; + + krb5int_aes_encrypt_length(enc, hash, input->length, &enclen); + + /* key->length, ivec will be tested in enc->encrypt */ + + if (output->length < enclen) + return(KRB5_BAD_MSIZE); + + if ((kedata = (unsigned char *) malloc(keylength)) == NULL) + return(ENOMEM); + if ((kidata = (unsigned char *) malloc(keylength)) == NULL) { + free(kedata); + return(ENOMEM); + } + if ((plaintext = (unsigned char *) malloc(plainlen)) == NULL) { + free(kidata); + free(kedata); + return(ENOMEM); + } + + ke.contents = kedata; + ke.length = keylength; + ki.contents = kidata; + ki.length = keylength; + + /* derive the keys */ + + d1.data = (char *) constantdata; + d1.length = K5CLENGTH; + + store_32_be(usage, constantdata); + + d1.data[4] = (char) 0xAA; + + if ((ret = krb5_derive_key(enc, key, &ke, &d1))) + goto cleanup; + + d1.data[4] = 0x55; + + if ((ret = krb5_derive_key(enc, key, &ki, &d1))) + goto cleanup; + + /* put together the plaintext */ + + d1.length = blocksize; + d1.data = (char *) plaintext; + + if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &d1))) + goto cleanup; + + memcpy(plaintext+blocksize, input->data, input->length); + + /* Ciphertext stealing; there should be no more. */ + if (plainlen != blocksize + input->length) + abort(); + + /* encrypt the plaintext */ + + d1.length = plainlen; + d1.data = (char *) plaintext; + + d2.length = plainlen; + d2.data = output->data; + + if ((ret = ((*(enc->encrypt))(&ke, ivec, &d1, &d2)))) + goto cleanup; + + if (ivec != NULL && ivec->length == blocksize) { + int nblocks = (d2.length + blocksize - 1) / blocksize; + cn = d2.data + blocksize * (nblocks - 2); + } else + cn = NULL; + + /* hash the plaintext */ + + d2.length = enclen - plainlen; + d2.data = output->data+plainlen; + if (d2.length != 96 / 8) + abort(); + + if ((ret = trunc_hmac(hash, &ki, 1, &d1, &d2))) { + memset(d2.data, 0, d2.length); + goto cleanup; + } + + output->length = enclen; + + /* update ivec */ + if (cn != NULL) { + memcpy(ivec->data, cn, blocksize); +#if 0 + { + int i; + printf("\n%s: output:", __func__); + for (i = 0; i < output->length; i++) { + if (i % 16 == 0) + printf("\n%s: ", __func__); + printf(" %02x", i[(unsigned char *)output->data]); + } + printf("\n%s: outputIV:", __func__); + for (i = 0; i < ivec->length; i++) { + if (i % 16 == 0) + printf("\n%s: ", __func__); + printf(" %02x", i[(unsigned char *)ivec->data]); + } + printf("\n"); fflush(stdout); + } +#endif + } + + /* ret is set correctly by the prior call */ + +cleanup: + memset(kedata, 0, keylength); + memset(kidata, 0, keylength); + memset(plaintext, 0, plainlen); + + free(plaintext); + free(kidata); + free(kedata); + + return(ret); +} + diff --git a/src/lib/crypto/krb/dk/dk_prf.c b/src/lib/crypto/krb/dk/dk_prf.c new file mode 100644 index 000000000..ec64caf16 --- /dev/null +++ b/src/lib/crypto/krb/dk/dk_prf.c @@ -0,0 +1,64 @@ +/* + * lib/crypto/dk/prf.c + * + * Copyright (C) 2004 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * This file contains an implementation of the RFC 3961 PRF for + *simplified profile enctypes. + */ + +#include "k5-int.h" +#include "dk.h" + +krb5_error_code +krb5int_dk_prf (const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out) +{ + krb5_data tmp; + krb5_data prfconst; + krb5_keyblock *kp = NULL; + krb5_error_code ret = 0; + + prfconst.data = (char *) "prf"; + prfconst.length = 3; + tmp.length = hash->hashsize; + tmp.data = malloc(hash->hashsize); + if (tmp.data == NULL) + return ENOMEM; + hash->hash(1, in, &tmp); + tmp.length = (tmp.length/enc->block_size)*enc->block_size; /*truncate to block size*/ + ret = krb5int_c_init_keyblock(0, key->enctype, + key->length, &kp); + if (ret == 0) + ret = krb5_derive_key(enc, key, kp, &prfconst); + if (ret == 0) + ret = enc->encrypt(kp, NULL, &tmp, out); + if (kp) + krb5int_c_free_keyblock(0, kp); + free (tmp.data); + return ret; +} diff --git a/src/lib/crypto/krb/dk/stringtokey.c b/src/lib/crypto/krb/dk/stringtokey.c new file mode 100644 index 000000000..0e54b849f --- /dev/null +++ b/src/lib/crypto/krb/dk/stringtokey.c @@ -0,0 +1,96 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "dk.h" + +static const unsigned char kerberos[] = "kerberos"; +#define kerberos_len (sizeof(kerberos)-1) + +krb5_error_code +krb5int_dk_string_to_key(const struct krb5_enc_provider *enc, + const krb5_data *string, const krb5_data *salt, + const krb5_data *parms, krb5_keyblock *key) +{ + krb5_error_code ret; + size_t keybytes, keylength, concatlen; + unsigned char *concat, *foldstring, *foldkeydata; + krb5_data indata; + krb5_keyblock foldkey; + + /* key->length is checked by krb5_derive_key */ + + keybytes = enc->keybytes; + keylength = enc->keylength; + + concatlen = string->length+(salt?salt->length:0); + + if ((concat = (unsigned char *) malloc(concatlen)) == NULL) + return(ENOMEM); + if ((foldstring = (unsigned char *) malloc(keybytes)) == NULL) { + free(concat); + return(ENOMEM); + } + if ((foldkeydata = (unsigned char *) malloc(keylength)) == NULL) { + free(foldstring); + free(concat); + return(ENOMEM); + } + + /* construct input string ( = string + salt), fold it, make_key it */ + + memcpy(concat, string->data, string->length); + if (salt) + memcpy(concat+string->length, salt->data, salt->length); + + krb5_nfold(concatlen*8, concat, keybytes*8, foldstring); + + indata.length = keybytes; + indata.data = (char *) foldstring; + foldkey.length = keylength; + foldkey.contents = foldkeydata; + + (*(enc->make_key))(&indata, &foldkey); + + /* now derive the key from this one */ + + indata.length = kerberos_len; + indata.data = (char *) kerberos; + + if ((ret = krb5_derive_key(enc, &foldkey, key, &indata))) + memset(key->contents, 0, key->length); + + /* ret is set correctly by the prior call */ + + memset(concat, 0, concatlen); + memset(foldstring, 0, keybytes); + memset(foldkeydata, 0, keylength); + + free(foldkeydata); + free(foldstring); + free(concat); + + return(ret); +} diff --git a/src/lib/crypto/krb/enc_provider/Makefile.in b/src/lib/crypto/krb/enc_provider/Makefile.in new file mode 100644 index 000000000..2eedf1d9d --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/Makefile.in @@ -0,0 +1,41 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/enc_provider +mydir=lib/crypto/krb/enc_provider +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/../../@CRYPTO_IMPL@/des -I$(srcdir)/../../@CRYPTO_IMPL@/arcfour \ + -I$(srcdir)/../../@CRYPTO_IMPL@/aes -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@ +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=enc_provider +##DOS##OBJFILE=..\$(OUTPRE)enc_prov.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS= des.o des3.o rc4.o aes.o + +OBJS= \ + $(OUTPRE)des.$(OBJEXT) \ + $(OUTPRE)des3.$(OBJEXT) \ + $(OUTPRE)aes.$(OBJEXT) \ + $(OUTPRE)rc4.$(OBJEXT) + +SRCS= \ + $(srcdir)/des.c \ + $(srcdir)/des3.c \ + $(srcdir)/aes.c \ + $(srcdir)/rc4.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/enc_provider/aes.c b/src/lib/crypto/krb/enc_provider/aes.c new file mode 100644 index 000000000..060d119c4 --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/aes.c @@ -0,0 +1,415 @@ +/* + * lib/crypto/enc_provider/aes.c + * + * Copyright (C) 2003, 2007, 2008 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "enc_provider.h" +#include "aes.h" +#include "../aead.h" + +#if 0 +aes_rval aes_blk_len(unsigned int blen, aes_ctx cx[1]); +aes_rval aes_enc_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); +aes_rval aes_enc_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); +aes_rval aes_dec_key(const unsigned char in_key[], unsigned int klen, aes_ctx cx[1]); +aes_rval aes_dec_blk(const unsigned char in_blk[], unsigned char out_blk[], const aes_ctx cx[1]); +#endif + +#define CHECK_SIZES 0 + +#if 0 +static void printd (const char *descr, krb5_data *d) { + int i, j; + const int r = 16; + + printf("%s:", descr); + + for (i = 0; i < d->length; i += r) { + printf("\n %04x: ", i); + for (j = i; j < i + r && j < d->length; j++) + printf(" %02x", 0xff & d->data[j]); +#ifdef SHOW_TEXT + for (; j < i + r; j++) + printf(" "); + printf(" "); + for (j = i; j < i + r && j < d->length; j++) { + int c = 0xff & d->data[j]; + printf("%c", isprint(c) ? c : '.'); + } +#endif + } + printf("\n"); +} +#endif + +static inline void enc(char *out, const char *in, aes_ctx *ctx) +{ + if (aes_enc_blk((const unsigned char *)in, (unsigned char *)out, ctx) + != aes_good) + abort(); +} +static inline void dec(char *out, const char *in, aes_ctx *ctx) +{ + if (aes_dec_blk((const unsigned char *)in, (unsigned char *)out, ctx) + != aes_good) + abort(); +} + +static void xorblock(char *out, const char *in) +{ + int z; + for (z = 0; z < BLOCK_SIZE; z++) + out[z] ^= in[z]; +} + +krb5_error_code +krb5int_aes_encrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + aes_ctx ctx; + char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; + int nblocks = 0, blockno; + +/* CHECK_SIZES; */ + + if (aes_enc_key(key->contents, key->length, &ctx) != aes_good) + abort(); + + if (ivec) + memcpy(tmp, ivec->data, BLOCK_SIZE); + else + memset(tmp, 0, BLOCK_SIZE); + + nblocks = (input->length + BLOCK_SIZE - 1) / BLOCK_SIZE; + + if (nblocks == 1) { + /* XXX Used for DK function. */ + enc(output->data, input->data, &ctx); + } else { + unsigned int nleft; + + for (blockno = 0; blockno < nblocks - 2; blockno++) { + xorblock(tmp, input->data + blockno * BLOCK_SIZE); + enc(tmp2, tmp, &ctx); + memcpy(output->data + blockno * BLOCK_SIZE, tmp2, BLOCK_SIZE); + + /* Set up for next block. */ + memcpy(tmp, tmp2, BLOCK_SIZE); + } + /* Do final CTS step for last two blocks (the second of which + may or may not be incomplete). */ + xorblock(tmp, input->data + (nblocks - 2) * BLOCK_SIZE); + enc(tmp2, tmp, &ctx); + nleft = input->length - (nblocks - 1) * BLOCK_SIZE; + memcpy(output->data + (nblocks - 1) * BLOCK_SIZE, tmp2, nleft); + memcpy(tmp, tmp2, BLOCK_SIZE); + + memset(tmp3, 0, sizeof(tmp3)); + memcpy(tmp3, input->data + (nblocks - 1) * BLOCK_SIZE, nleft); + xorblock(tmp, tmp3); + enc(tmp2, tmp, &ctx); + memcpy(output->data + (nblocks - 2) * BLOCK_SIZE, tmp2, BLOCK_SIZE); + if (ivec) + memcpy(ivec->data, tmp2, BLOCK_SIZE); + } + + return 0; +} + +krb5_error_code +krb5int_aes_decrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + aes_ctx ctx; + char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; + int nblocks = 0, blockno; + + CHECK_SIZES; + + if (aes_dec_key(key->contents, key->length, &ctx) != aes_good) + abort(); + + if (ivec) + memcpy(tmp, ivec->data, BLOCK_SIZE); + else + memset(tmp, 0, BLOCK_SIZE); + + nblocks = (input->length + BLOCK_SIZE - 1) / BLOCK_SIZE; + + if (nblocks == 1) { + if (input->length < BLOCK_SIZE) + abort(); + dec(output->data, input->data, &ctx); + } else { + + for (blockno = 0; blockno < nblocks - 2; blockno++) { + dec(tmp2, input->data + blockno * BLOCK_SIZE, &ctx); + xorblock(tmp2, tmp); + memcpy(output->data + blockno * BLOCK_SIZE, tmp2, BLOCK_SIZE); + memcpy(tmp, input->data + blockno * BLOCK_SIZE, BLOCK_SIZE); + } + /* Do last two blocks, the second of which (next-to-last block + of plaintext) may be incomplete. */ + dec(tmp2, input->data + (nblocks - 2) * BLOCK_SIZE, &ctx); + /* Set tmp3 to last ciphertext block, padded. */ + memset(tmp3, 0, sizeof(tmp3)); + memcpy(tmp3, input->data + (nblocks - 1) * BLOCK_SIZE, + input->length - (nblocks - 1) * BLOCK_SIZE); + /* Set tmp2 to last (possibly partial) plaintext block, and + save it. */ + xorblock(tmp2, tmp3); + memcpy(output->data + (nblocks - 1) * BLOCK_SIZE, tmp2, + input->length - (nblocks - 1) * BLOCK_SIZE); + /* Maybe keep the trailing part, and copy in the last + ciphertext block. */ + memcpy(tmp2, tmp3, input->length - (nblocks - 1) * BLOCK_SIZE); + /* Decrypt, to get next to last plaintext block xor previous + ciphertext. */ + dec(tmp3, tmp2, &ctx); + xorblock(tmp3, tmp); + memcpy(output->data + (nblocks - 2) * BLOCK_SIZE, tmp3, BLOCK_SIZE); + if (ivec) + memcpy(ivec->data, input->data + (nblocks - 2) * BLOCK_SIZE, + BLOCK_SIZE); + } + + return 0; +} + +static krb5_error_code +krb5int_aes_encrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + aes_ctx ctx; + char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE]; + int nblocks = 0, blockno; + size_t input_length, i; + + if (aes_enc_key(key->contents, key->length, &ctx) != aes_good) + abort(); + + if (ivec != NULL) + memcpy(tmp, ivec->data, BLOCK_SIZE); + else + memset(tmp, 0, BLOCK_SIZE); + + for (i = 0, input_length = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_IOV(iov)) + input_length += iov->data.length; + } + + nblocks = (input_length + BLOCK_SIZE - 1) / BLOCK_SIZE; + + assert(nblocks > 1); + + { + char blockN2[BLOCK_SIZE]; /* second last */ + char blockN1[BLOCK_SIZE]; /* last block */ + struct iov_block_state input_pos, output_pos; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + for (blockno = 0; blockno < nblocks - 2; blockno++) { + char blockN[BLOCK_SIZE]; + + krb5int_c_iov_get_block((unsigned char *)blockN, BLOCK_SIZE, data, num_data, &input_pos); + xorblock(tmp, blockN); + enc(tmp2, tmp, &ctx); + krb5int_c_iov_put_block(data, num_data, (unsigned char *)tmp2, BLOCK_SIZE, &output_pos); + + /* Set up for next block. */ + memcpy(tmp, tmp2, BLOCK_SIZE); + } + + /* Do final CTS step for last two blocks (the second of which + may or may not be incomplete). */ + + /* First, get the last two blocks */ + memset(blockN1, 0, sizeof(blockN1)); /* pad last block with zeros */ + krb5int_c_iov_get_block((unsigned char *)blockN2, BLOCK_SIZE, data, num_data, &input_pos); + krb5int_c_iov_get_block((unsigned char *)blockN1, BLOCK_SIZE, data, num_data, &input_pos); + + /* Encrypt second last block */ + xorblock(tmp, blockN2); + enc(tmp2, tmp, &ctx); + memcpy(blockN2, tmp2, BLOCK_SIZE); /* blockN2 now contains first block */ + memcpy(tmp, tmp2, BLOCK_SIZE); + + /* Encrypt last block */ + xorblock(tmp, blockN1); + enc(tmp2, tmp, &ctx); + memcpy(blockN1, tmp2, BLOCK_SIZE); + + /* Put the last two blocks back into the iovec (reverse order) */ + krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN1, BLOCK_SIZE, &output_pos); + krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN2, BLOCK_SIZE, &output_pos); + + if (ivec != NULL) + memcpy(ivec->data, blockN1, BLOCK_SIZE); + } + + return 0; +} + +static krb5_error_code +krb5int_aes_decrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + aes_ctx ctx; + char tmp[BLOCK_SIZE], tmp2[BLOCK_SIZE], tmp3[BLOCK_SIZE]; + int nblocks = 0, blockno; + unsigned int i; + size_t input_length; + + CHECK_SIZES; + + if (aes_dec_key(key->contents, key->length, &ctx) != aes_good) + abort(); + + if (ivec != NULL) + memcpy(tmp, ivec->data, BLOCK_SIZE); + else + memset(tmp, 0, BLOCK_SIZE); + + for (i = 0, input_length = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_IOV(iov)) + input_length += iov->data.length; + } + + nblocks = (input_length + BLOCK_SIZE - 1) / BLOCK_SIZE; + + assert(nblocks > 1); + + { + char blockN2[BLOCK_SIZE]; /* second last */ + char blockN1[BLOCK_SIZE]; /* last block */ + struct iov_block_state input_pos, output_pos; + + IOV_BLOCK_STATE_INIT(&input_pos); + IOV_BLOCK_STATE_INIT(&output_pos); + + for (blockno = 0; blockno < nblocks - 2; blockno++) { + char blockN[BLOCK_SIZE]; + + krb5int_c_iov_get_block((unsigned char *)blockN, BLOCK_SIZE, data, num_data, &input_pos); + dec(tmp2, blockN, &ctx); + xorblock(tmp2, tmp); + krb5int_c_iov_put_block(data, num_data, (unsigned char *)tmp2, BLOCK_SIZE, &output_pos); + memcpy(tmp, blockN, BLOCK_SIZE); + } + + /* Do last two blocks, the second of which (next-to-last block + of plaintext) may be incomplete. */ + + /* First, get the last two encrypted blocks */ + memset(blockN1, 0, sizeof(blockN1)); /* pad last block with zeros */ + krb5int_c_iov_get_block((unsigned char *)blockN2, BLOCK_SIZE, data, num_data, &input_pos); + krb5int_c_iov_get_block((unsigned char *)blockN1, BLOCK_SIZE, data, num_data, &input_pos); + + /* Decrypt second last block */ + dec(tmp2, blockN2, &ctx); + /* Set tmp2 to last (possibly partial) plaintext block, and + save it. */ + xorblock(tmp2, blockN1); + memcpy(blockN2, tmp2, BLOCK_SIZE); + + /* Maybe keep the trailing part, and copy in the last + ciphertext block. */ + input_length %= BLOCK_SIZE; + memcpy(tmp2, blockN1, input_length ? input_length : BLOCK_SIZE); + dec(tmp3, tmp2, &ctx); + xorblock(tmp3, tmp); + /* Copy out ivec first before we clobber blockN1 with plaintext */ + if (ivec != NULL) + memcpy(ivec->data, blockN1, BLOCK_SIZE); + memcpy(blockN1, tmp3, BLOCK_SIZE); + + /* Put the last two blocks back into the iovec */ + krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN1, BLOCK_SIZE, &output_pos); + krb5int_c_iov_put_block(data, num_data, (unsigned char *)blockN2, BLOCK_SIZE, &output_pos); + } + + return 0; +} + +static krb5_error_code +k5_aes_make_key(const krb5_data *randombits, krb5_keyblock *key) +{ + if (key->length != 16 && key->length != 32) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != key->length) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + + memcpy(key->contents, randombits->data, randombits->length); + return(0); +} + +static krb5_error_code +krb5int_aes_init_state (const krb5_keyblock *key, krb5_keyusage usage, + krb5_data *state) +{ + state->length = 16; + state->data = (void *) malloc(16); + if (state->data == NULL) + return ENOMEM; + memset(state->data, 0, state->length); + return 0; +} + +const struct krb5_enc_provider krb5int_enc_aes128 = { + 16, + 16, 16, + krb5int_aes_encrypt, + krb5int_aes_decrypt, + k5_aes_make_key, + krb5int_aes_init_state, + krb5int_default_free_state, + krb5int_aes_encrypt_iov, + krb5int_aes_decrypt_iov +}; + +const struct krb5_enc_provider krb5int_enc_aes256 = { + 16, + 32, 32, + krb5int_aes_encrypt, + krb5int_aes_decrypt, + k5_aes_make_key, + krb5int_aes_init_state, + krb5int_default_free_state, + krb5int_aes_encrypt_iov, + krb5int_aes_decrypt_iov +}; + diff --git a/src/lib/crypto/krb/enc_provider/deps b/src/lib/crypto/krb/enc_provider/deps new file mode 100644 index 000000000..fa797cdfb --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/deps @@ -0,0 +1,50 @@ +# +# Generated makefile dependencies follow. +# +des.so des.po $(OUTPRE)des.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/des/des_int.h \ + $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h des.c \ + enc_provider.h +des3.so des3.po $(OUTPRE)des3.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/des/des_int.h \ + $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h des3.c +aes.so aes.po $(OUTPRE)aes.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/aes/aes.h \ + $(srcdir)/../../builtin/aes/uitypes.h $(srcdir)/../aead.h \ + $(srcdir)/../cksumtypes.h aes.c enc_provider.h +rc4.so rc4.po $(OUTPRE)rc4.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/arcfour/arcfour-int.h \ + $(srcdir)/../../builtin/arcfour/arcfour.h $(srcdir)/../aead.h \ + $(srcdir)/../cksumtypes.h enc_provider.h rc4.c diff --git a/src/lib/crypto/krb/enc_provider/des.c b/src/lib/crypto/krb/enc_provider/des.c new file mode 100644 index 000000000..547f6b976 --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/des.c @@ -0,0 +1,181 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include "enc_provider.h" +#include "aead.h" + +static krb5_error_code +k5_des_docrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output, int enc) +{ + mit_des_key_schedule schedule; + + /* key->enctype was checked by the caller */ + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if ((input->length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + if (input->length != output->length) + return(KRB5_BAD_MSIZE); + + switch (mit_des_key_sched(key->contents, schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + + /* this has a return value, but the code always returns zero */ + + mit_des_cbc_encrypt((krb5_pointer) input->data, + (krb5_pointer) output->data, input->length, + schedule, + (ivec + ? (const unsigned char *) ivec->data + : (const unsigned char *) mit_des_zeroblock), + enc); + + memset(schedule, 0, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des_encrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + return(k5_des_docrypt(key, ivec, input, output, 1)); +} + +static krb5_error_code +k5_des_decrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + return(k5_des_docrypt(key, ivec, input, output, 0)); +} + +static krb5_error_code +k5_des_make_key(const krb5_data *randombits, krb5_keyblock *key) +{ + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != 7) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + key->length = 8; + + /* take the seven bytes, move them around into the top 7 bits of the + 8 key bytes, then compute the parity bits */ + + memcpy(key->contents, randombits->data, randombits->length); + key->contents[7] = (((key->contents[0]&1)<<1) | ((key->contents[1]&1)<<2) | + ((key->contents[2]&1)<<3) | ((key->contents[3]&1)<<4) | + ((key->contents[4]&1)<<5) | ((key->contents[5]&1)<<6) | + ((key->contents[6]&1)<<7)); + + mit_des_fixup_key_parity(key->contents); + + return(0); +} + +static krb5_error_code +k5_des_docrypt_iov(const krb5_keyblock *key, const krb5_data *ivec, + krb5_crypto_iov *data, size_t num_data, int enc) +{ + mit_des_key_schedule schedule; + size_t input_length = 0; + unsigned int i; + + /* key->enctype was checked by the caller */ + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + + for (i = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_DATA_IOV(iov)) + input_length += iov->data.length; + } + + if ((input_length % 8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + + switch (mit_des_key_sched(key->contents, schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + + /* this has a return value, but the code always returns zero */ + if (enc) + krb5int_des_cbc_encrypt_iov(data, num_data, schedule, ivec ? ivec->data : NULL); + else + krb5int_des_cbc_decrypt_iov(data, num_data, schedule, ivec ? ivec->data : NULL); + + memset(schedule, 0, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des_encrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + return k5_des_docrypt_iov(key, ivec, data, num_data, 1); +} + +static krb5_error_code +k5_des_decrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + return k5_des_docrypt_iov(key, ivec, data, num_data, 0); +} + +const struct krb5_enc_provider krb5int_enc_des = { + 8, + 7, 8, + k5_des_encrypt, + k5_des_decrypt, + k5_des_make_key, + krb5int_des_init_state, + krb5int_default_free_state, + k5_des_encrypt_iov, + k5_des_decrypt_iov +}; diff --git a/src/lib/crypto/krb/enc_provider/des3.c b/src/lib/crypto/krb/enc_provider/des3.c new file mode 100644 index 000000000..412c994a7 --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/des3.c @@ -0,0 +1,221 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include "../aead.h" + +static krb5_error_code +validate_and_schedule(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, const krb5_data *output, + mit_des3_key_schedule *schedule) +{ + /* key->enctype was checked by the caller */ + + if (key->length != 24) + return(KRB5_BAD_KEYSIZE); + if ((input->length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + if (input->length != output->length) + return(KRB5_BAD_MSIZE); + + switch (mit_des3_key_sched(*(mit_des3_cblock *)key->contents, + *schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + return 0; +} + +static krb5_error_code +validate_and_schedule_iov(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_crypto_iov *data, size_t num_data, + mit_des3_key_schedule *schedule) +{ + size_t i, input_length; + + for (i = 0, input_length = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_IOV(iov)) + input_length += iov->data.length; + } + + if (key->length != 24) + return(KRB5_BAD_KEYSIZE); + if ((input_length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_BAD_MSIZE); + + switch (mit_des3_key_sched(*(mit_des3_cblock *)key->contents, + *schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + return 0; +} + +static krb5_error_code +k5_des3_encrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + mit_des3_key_schedule schedule; + krb5_error_code err; + + err = validate_and_schedule(key, ivec, input, output, &schedule); + if (err) + return err; + + /* this has a return value, but the code always returns zero */ + krb5int_des3_cbc_encrypt((krb5_pointer) input->data, + (krb5_pointer) output->data, input->length, + schedule[0], schedule[1], schedule[2], + ivec?(const unsigned char *) ivec->data:(const unsigned char *)mit_des_zeroblock); + + zap(schedule, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des3_decrypt(const krb5_keyblock *key, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + mit_des3_key_schedule schedule; + krb5_error_code err; + + err = validate_and_schedule(key, ivec, input, output, &schedule); + if (err) + return err; + + /* this has a return value, but the code always returns zero */ + krb5int_des3_cbc_decrypt((krb5_pointer) input->data, + (krb5_pointer) output->data, input->length, + schedule[0], schedule[1], schedule[2], + ivec?(const unsigned char *) ivec->data:(const unsigned char *)mit_des_zeroblock); + + zap(schedule, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des3_make_key(const krb5_data *randombits, krb5_keyblock *key) +{ + int i; + + if (key->length != 24) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != 21) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + key->length = 24; + + /* take the seven bytes, move them around into the top 7 bits of the + 8 key bytes, then compute the parity bits. Do this three times. */ + + for (i=0; i<3; i++) { + memcpy(key->contents+i*8, randombits->data+i*7, 7); + key->contents[i*8+7] = (((key->contents[i*8]&1)<<1) | + ((key->contents[i*8+1]&1)<<2) | + ((key->contents[i*8+2]&1)<<3) | + ((key->contents[i*8+3]&1)<<4) | + ((key->contents[i*8+4]&1)<<5) | + ((key->contents[i*8+5]&1)<<6) | + ((key->contents[i*8+6]&1)<<7)); + + mit_des_fixup_key_parity(key->contents+i*8); + } + + return(0); +} + +static krb5_error_code +k5_des3_encrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + mit_des3_key_schedule schedule; + krb5_error_code err; + + err = validate_and_schedule_iov(key, ivec, data, num_data, &schedule); + if (err) + return err; + + /* this has a return value, but the code always returns zero */ + krb5int_des3_cbc_encrypt_iov(data, num_data, + schedule[0], schedule[1], schedule[2], + ivec != NULL ? (unsigned char *) ivec->data : NULL); + + zap(schedule, sizeof(schedule)); + + return(0); +} + +static krb5_error_code +k5_des3_decrypt_iov(const krb5_keyblock *key, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + mit_des3_key_schedule schedule; + krb5_error_code err; + + err = validate_and_schedule_iov(key, ivec, data, num_data, &schedule); + if (err) + return err; + + /* this has a return value, but the code always returns zero */ + krb5int_des3_cbc_decrypt_iov(data, num_data, + schedule[0], schedule[1], schedule[2], + ivec != NULL ? (unsigned char *) ivec->data : NULL); + + zap(schedule, sizeof(schedule)); + + return(0); +} + +const struct krb5_enc_provider krb5int_enc_des3 = { + 8, + 21, 24, + k5_des3_encrypt, + k5_des3_decrypt, + k5_des3_make_key, + krb5int_des_init_state, + krb5int_default_free_state, + k5_des3_encrypt_iov, + k5_des3_decrypt_iov +}; + diff --git a/src/lib/crypto/krb/enc_provider/enc_provider.h b/src/lib/crypto/krb/enc_provider/enc_provider.h new file mode 100644 index 000000000..92022b3c8 --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/enc_provider.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +extern const struct krb5_enc_provider krb5int_enc_des; +extern const struct krb5_enc_provider krb5int_enc_des3; +extern const struct krb5_enc_provider krb5int_enc_arcfour; +extern const struct krb5_enc_provider krb5int_enc_aes128; +extern const struct krb5_enc_provider krb5int_enc_aes256; +extern const struct krb5_enc_provider krb5int_enc_aes128_ctr; +extern const struct krb5_enc_provider krb5int_enc_aes256_ctr; + diff --git a/src/lib/crypto/krb/enc_provider/rc4.c b/src/lib/crypto/krb/enc_provider/rc4.c new file mode 100644 index 000000000..b950a605b --- /dev/null +++ b/src/lib/crypto/krb/enc_provider/rc4.c @@ -0,0 +1,271 @@ +/* arcfour.c + * + * Copyright (c) 2000 by Computer Science Laboratory, + * Rensselaer Polytechnic Institute + * + * #include STD_DISCLAIMER + */ + +#include "k5-int.h" +#include "arcfour-int.h" +#include "enc_provider.h" +#include "../aead.h" +/* gets the next byte from the PRNG */ +#if ((__GNUC__ >= 2) ) +static __inline__ unsigned int k5_arcfour_byte(ArcfourContext *); +#else +static unsigned int k5_arcfour_byte(ArcfourContext *); +#endif /* gcc inlines*/ + +/* Initializes the context and sets the key. */ +static krb5_error_code k5_arcfour_init(ArcfourContext *ctx, const unsigned char *key, + unsigned int keylen); + +/* Encrypts/decrypts data. */ +static void k5_arcfour_crypt(ArcfourContext *ctx, unsigned char *dest, + const unsigned char *src, unsigned int len); + +/* Interface layer to kerb5 crypto layer */ +static krb5_error_code +k5_arcfour_docrypt(const krb5_keyblock *, const krb5_data *, + const krb5_data *, krb5_data *); + +/* from a random bitstrem, construct a key */ +static krb5_error_code +k5_arcfour_make_key(const krb5_data *, krb5_keyblock *); + +static const unsigned char arcfour_weakkey1[] = {0x00, 0x00, 0xfd}; +static const unsigned char arcfour_weakkey2[] = {0x03, 0xfd, 0xfc}; +static const struct { + size_t length; + const unsigned char *data; +} arcfour_weakkeys[] = { + { sizeof (arcfour_weakkey1), arcfour_weakkey1}, + { sizeof (arcfour_weakkey2), arcfour_weakkey2}, +}; + +static inline unsigned int k5_arcfour_byte(ArcfourContext * ctx) +{ + unsigned int x; + unsigned int y; + unsigned int sx, sy; + unsigned char *state; + + state = ctx->state; + x = (ctx->x + 1) & 0xff; + sx = state[x]; + y = (sx + ctx->y) & 0xff; + sy = state[y]; + ctx->x = x; + ctx->y = y; + state[y] = sx; + state[x] = sy; + return state[(sx + sy) & 0xff]; +} + +static void k5_arcfour_crypt(ArcfourContext *ctx, unsigned char *dest, + const unsigned char *src, unsigned int len) +{ + unsigned int i; + for (i = 0; i < len; i++) + dest[i] = src[i] ^ k5_arcfour_byte(ctx); +} + + +static krb5_error_code +k5_arcfour_init(ArcfourContext *ctx, const unsigned char *key, + unsigned int key_len) +{ + unsigned int t, u; + unsigned int keyindex; + unsigned int stateindex; + unsigned char* state; + unsigned int counter; + + if (key_len != 16) + return KRB5_BAD_MSIZE; /*this is probably not the correct error code + to return */ + for (counter=0; + counter < sizeof(arcfour_weakkeys)/sizeof(arcfour_weakkeys[0]); + counter++) + if (!memcmp(key, arcfour_weakkeys[counter].data, + arcfour_weakkeys[counter].length)) + return KRB5DES_WEAK_KEY; /* most certainly not the correct error */ + + state = &ctx->state[0]; + ctx->x = 0; + ctx->y = 0; + for (counter = 0; counter < 256; counter++) + state[counter] = counter; + keyindex = 0; + stateindex = 0; + for (counter = 0; counter < 256; counter++) + { + t = state[counter]; + stateindex = (stateindex + key[keyindex] + t) & 0xff; + u = state[stateindex]; + state[stateindex] = t; + state[counter] = u; + if (++keyindex >= key_len) + keyindex = 0; + } + return 0; +} + + +/* The workhorse of the arcfour system, this impliments the cipher */ +static krb5_error_code +k5_arcfour_docrypt(const krb5_keyblock *key, const krb5_data *state, + const krb5_data *input, krb5_data *output) +{ + ArcfourContext *arcfour_ctx; + ArcFourCipherState *cipher_state; + int ret; + + if (key->length != 16) + return(KRB5_BAD_KEYSIZE); + if (state && (state->length != sizeof (ArcFourCipherState))) + return(KRB5_BAD_MSIZE); + if (input->length != output->length) + return(KRB5_BAD_MSIZE); + + if (state) { + cipher_state = (ArcFourCipherState *) state->data; + arcfour_ctx=&cipher_state->ctx; + if (cipher_state->initialized == 0) { + if ((ret=k5_arcfour_init(arcfour_ctx, key->contents, key->length))) { + return ret; + } + cipher_state->initialized = 1; + } + k5_arcfour_crypt(arcfour_ctx, (unsigned char *) output->data, (const unsigned char *) input->data, input->length); + } + else { + arcfour_ctx=malloc(sizeof (ArcfourContext)); + if (arcfour_ctx == NULL) + return ENOMEM; + if ((ret=k5_arcfour_init(arcfour_ctx, key->contents, key->length))) { + free(arcfour_ctx); + return (ret); + } + k5_arcfour_crypt(arcfour_ctx, (unsigned char * ) output->data, + (const unsigned char * ) input->data, input->length); + memset(arcfour_ctx, 0, sizeof (ArcfourContext)); + free(arcfour_ctx); + } + + return 0; +} + +/* In-place encryption */ +static krb5_error_code +k5_arcfour_docrypt_iov(const krb5_keyblock *key, + const krb5_data *state, + krb5_crypto_iov *data, + size_t num_data) +{ + ArcfourContext *arcfour_ctx = NULL; + ArcFourCipherState *cipher_state = NULL; + krb5_error_code ret; + size_t i; + + if (key->length != 16) + return KRB5_BAD_KEYSIZE; + if (state != NULL && (state->length != sizeof(ArcFourCipherState))) + return KRB5_BAD_MSIZE; + + if (state != NULL) { + cipher_state = (ArcFourCipherState *)state->data; + arcfour_ctx = &cipher_state->ctx; + if (cipher_state->initialized == 0) { + ret = k5_arcfour_init(arcfour_ctx, key->contents, key->length); + if (ret != 0) + return ret; + + cipher_state->initialized = 1; + } + } else { + arcfour_ctx = (ArcfourContext *)malloc(sizeof(ArcfourContext)); + if (arcfour_ctx == NULL) + return ENOMEM; + + ret = k5_arcfour_init(arcfour_ctx, key->contents, key->length); + if (ret != 0) { + free(arcfour_ctx); + return ret; + } + } + + for (i = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_IOV(iov)) + k5_arcfour_crypt(arcfour_ctx, (unsigned char *)iov->data.data, + (const unsigned char *)iov->data.data, iov->data.length); + } + + if (state == NULL) { + memset(arcfour_ctx, 0, sizeof(ArcfourContext)); + free(arcfour_ctx); + } + + return 0; +} + +static krb5_error_code +k5_arcfour_make_key(const krb5_data *randombits, krb5_keyblock *key) +{ + if (key->length != 16) + return(KRB5_BAD_KEYSIZE); + if (randombits->length != 16) + return(KRB5_CRYPTO_INTERNAL); + + key->magic = KV5M_KEYBLOCK; + key->length = 16; + + memcpy(key->contents, randombits->data, randombits->length); + + return(0); +} + +static krb5_error_code +k5_arcfour_init_state (const krb5_keyblock *key, + krb5_keyusage keyusage, krb5_data *new_state) +{ + /* Note that we can't actually set up the state here because the key + * will change between now and when encrypt is called + * because it is data dependent. Yeah, this has strange + * properties. --SDH + */ + new_state->length = sizeof (ArcFourCipherState); + new_state->data = malloc (new_state->length); + if (new_state->data) { + memset (new_state->data, 0 , new_state->length); + /* That will set initialized to zero*/ + }else { + return (ENOMEM); + } + return 0; +} + +/* Since the arcfour cipher is identical going forwards and backwards, + we just call "docrypt" directly +*/ +const struct krb5_enc_provider krb5int_enc_arcfour = { + /* This seems to work... although I am not sure what the + implications are in other places in the kerberos library */ + 1, + /* Keysize is arbitrary in arcfour, but the constraints of the + system, and to attempt to work with the MSFT system forces us + to 16byte/128bit. Since there is no parity in the key, the + byte and length are the same. */ + 16, 16, + k5_arcfour_docrypt, + k5_arcfour_docrypt, + k5_arcfour_make_key, + k5_arcfour_init_state, /*xxx not implemented yet*/ + krb5int_default_free_state, + k5_arcfour_docrypt_iov, + k5_arcfour_docrypt_iov +}; + diff --git a/src/lib/crypto/krb/encrypt.c b/src/lib/crypto/krb/encrypt.c new file mode 100644 index 000000000..a9a38aa77 --- /dev/null +++ b/src/lib/crypto/krb/encrypt.c @@ -0,0 +1,63 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_encrypt(krb5_context context, const krb5_keyblock *key, + krb5_keyusage usage, const krb5_data *ivec, + const krb5_data *input, krb5_enc_data *output) +{ + int i; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + output->magic = KV5M_ENC_DATA; + output->kvno = 0; + output->enctype = key->enctype; + + if (krb5_enctypes_list[i].encrypt == NULL) { + assert(krb5_enctypes_list[i].aead != NULL); + + return krb5int_c_encrypt_aead_compat(krb5_enctypes_list[i].aead, + krb5_enctypes_list[i].enc, + krb5_enctypes_list[i].hash, + key, usage, ivec, + input, &output->ciphertext); + } + + return((*(krb5_enctypes_list[i].encrypt)) + (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, + key, usage, ivec, input, &output->ciphertext)); +} diff --git a/src/lib/crypto/krb/encrypt_iov.c b/src/lib/crypto/krb/encrypt_iov.c new file mode 100644 index 000000000..a35c5b577 --- /dev/null +++ b/src/lib/crypto/krb/encrypt_iov.c @@ -0,0 +1,55 @@ +/* + * lib/crypto/encrypt_iov.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_encrypt_iov(krb5_context context, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *cipher_state, + krb5_crypto_iov *data, + size_t num_data) +{ + int i; + const struct krb5_keytypes *ktp = NULL; + + for (i = 0; i < krb5_enctypes_length; i++) { + if (krb5_enctypes_list[i].etype == key->enctype) { + ktp = &krb5_enctypes_list[i]; + break; + } + } + + if (ktp == NULL || ktp->aead == NULL) { + return KRB5_BAD_ENCTYPE; + } + + return ktp->aead->encrypt_iov(ktp->aead, ktp->enc, ktp->hash, + key, usage, cipher_state, data, num_data); +} + diff --git a/src/lib/crypto/krb/encrypt_length.c b/src/lib/crypto/krb/encrypt_length.c new file mode 100644 index 000000000..a934b2a21 --- /dev/null +++ b/src/lib/crypto/krb/encrypt_length.c @@ -0,0 +1,59 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_encrypt_length(krb5_context context, krb5_enctype enctype, + size_t inputlen, size_t *length) +{ + int i; + + for (i=0; i= buflen) + return(ENOMEM); + return(0); + } + } + + return(EINVAL); +} diff --git a/src/lib/crypto/krb/etypes.c b/src/lib/crypto/krb/etypes.c new file mode 100644 index 000000000..c44ee413e --- /dev/null +++ b/src/lib/crypto/krb/etypes.c @@ -0,0 +1,169 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "enc_provider.h" +#include "hash_provider.h" +#include "etypes.h" +#include "old.h" +#include "raw.h" +#include "dk.h" +#include "arcfour.h" +#include "aes_s2k.h" +#include "des/des_int.h" + +/* these will be linear searched. if they ever get big, a binary + search or hash table would be better, which means these would need + to be sorted. An array would be more efficient, but that assumes + that the keytypes are all near each other. I'd rather not make + that assumption. */ + +const struct krb5_keytypes krb5_enctypes_list[] = { + { ENCTYPE_DES_CBC_CRC, + "des-cbc-crc", { 0 }, "DES cbc mode with CRC-32", + &krb5int_enc_des, &krb5int_hash_crc32, + 16, + krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, + krb5int_des_string_to_key, + krb5int_des_prf, + CKSUMTYPE_RSA_MD5, + NULL, /*AEAD*/ + ETYPE_WEAK }, + { ENCTYPE_DES_CBC_MD4, + "des-cbc-md4", { 0 }, "DES cbc mode with RSA-MD4", + &krb5int_enc_des, &krb5int_hash_md4, + 16, + krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, + krb5int_des_string_to_key, + krb5int_des_prf, + CKSUMTYPE_RSA_MD4, + NULL, /*AEAD*/ + ETYPE_WEAK }, + { ENCTYPE_DES_CBC_MD5, + "des-cbc-md5", { "des" }, "DES cbc mode with RSA-MD5", + &krb5int_enc_des, &krb5int_hash_md5, + 16, + krb5_old_encrypt_length, krb5_old_encrypt, krb5_old_decrypt, + krb5int_des_string_to_key, + krb5int_des_prf, + CKSUMTYPE_RSA_MD5, + NULL, /*AEAD*/ + ETYPE_WEAK }, + { ENCTYPE_DES_CBC_RAW, + "des-cbc-raw", { 0 }, "DES cbc mode raw", + &krb5int_enc_des, NULL, + 16, + krb5_raw_encrypt_length, krb5_raw_encrypt, krb5_raw_decrypt, + krb5int_des_string_to_key, + krb5int_des_prf, + 0, + &krb5int_aead_raw, + ETYPE_WEAK }, + { ENCTYPE_DES3_CBC_RAW, + "des3-cbc-raw", { 0 }, "Triple DES cbc mode raw", + &krb5int_enc_des3, NULL, + 16, + krb5_raw_encrypt_length, krb5_raw_encrypt, krb5_raw_decrypt, + krb5int_dk_string_to_key, + NULL, /*PRF*/ + 0, + &krb5int_aead_raw, + ETYPE_WEAK }, + + { ENCTYPE_DES3_CBC_SHA1, + "des3-cbc-sha1", { "des3-hmac-sha1", "des3-cbc-sha1-kd" }, + "Triple DES cbc mode with HMAC/sha1", + &krb5int_enc_des3, &krb5int_hash_sha1, + 16, + krb5_dk_encrypt_length, krb5_dk_encrypt, krb5_dk_decrypt, + krb5int_dk_string_to_key, + krb5int_dk_prf, + CKSUMTYPE_HMAC_SHA1_DES3, + &krb5int_aead_dk, + 0 /*flags*/ }, + + { ENCTYPE_DES_HMAC_SHA1, + "des-hmac-sha1", { 0 }, "DES with HMAC/sha1", + &krb5int_enc_des, &krb5int_hash_sha1, + 8, + krb5_dk_encrypt_length, krb5_dk_encrypt, krb5_dk_decrypt, + krb5int_dk_string_to_key, + NULL, /*PRF*/ + 0, + NULL, + ETYPE_WEAK }, + { ENCTYPE_ARCFOUR_HMAC, + "arcfour-hmac", { "rc4-hmac", "arcfour-hmac-md5" }, + "ArcFour with HMAC/md5", + &krb5int_enc_arcfour, + &krb5int_hash_md5, + 20, + krb5_arcfour_encrypt_length, krb5_arcfour_encrypt, + krb5_arcfour_decrypt, krb5int_arcfour_string_to_key, + krb5int_arcfour_prf, /*PRF*/ + CKSUMTYPE_HMAC_MD5_ARCFOUR, + &krb5int_aead_arcfour, + 0 /*flags*/ }, + { ENCTYPE_ARCFOUR_HMAC_EXP, + "arcfour-hmac-exp", { "rc4-hmac-exp", "arcfour-hmac-md5-exp" }, + "Exportable ArcFour with HMAC/md5", + &krb5int_enc_arcfour, + &krb5int_hash_md5, + 20, + krb5_arcfour_encrypt_length, krb5_arcfour_encrypt, + krb5_arcfour_decrypt, krb5int_arcfour_string_to_key, + krb5int_arcfour_prf, /*PRF*/ + CKSUMTYPE_HMAC_MD5_ARCFOUR, + &krb5int_aead_arcfour, + ETYPE_WEAK + }, + + { ENCTYPE_AES128_CTS_HMAC_SHA1_96, + "aes128-cts-hmac-sha1-96", { "aes128-cts" }, + "AES-128 CTS mode with 96-bit SHA-1 HMAC", + &krb5int_enc_aes128, &krb5int_hash_sha1, + 16, + krb5int_aes_encrypt_length, krb5int_aes_dk_encrypt, krb5int_aes_dk_decrypt, + krb5int_aes_string_to_key, + krb5int_dk_prf, + CKSUMTYPE_HMAC_SHA1_96_AES128, + &krb5int_aead_aes, + 0 /*flags*/ }, + { ENCTYPE_AES256_CTS_HMAC_SHA1_96, + "aes256-cts-hmac-sha1-96", { "aes256-cts" }, + "AES-256 CTS mode with 96-bit SHA-1 HMAC", + &krb5int_enc_aes256, &krb5int_hash_sha1, + 16, + krb5int_aes_encrypt_length, krb5int_aes_dk_encrypt, krb5int_aes_dk_decrypt, + krb5int_aes_string_to_key, + krb5int_dk_prf, + CKSUMTYPE_HMAC_SHA1_96_AES256, + &krb5int_aead_aes, + 0 /*flags*/ }, +}; + +const int krb5_enctypes_length = +sizeof(krb5_enctypes_list)/sizeof(struct krb5_keytypes); diff --git a/src/lib/crypto/krb/etypes.h b/src/lib/crypto/krb/etypes.h new file mode 100644 index 000000000..8441fcabc --- /dev/null +++ b/src/lib/crypto/krb/etypes.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +typedef void (*krb5_encrypt_length_func) (const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length); + +typedef krb5_error_code (*krb5_crypt_func) (const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage keyusage, + const krb5_data *ivec, + const krb5_data *input, krb5_data *output); + +typedef krb5_error_code (*krb5_str2key_func) (const struct krb5_enc_provider *enc, const krb5_data *string, + const krb5_data *salt, const krb5_data *parm, krb5_keyblock *key); + +typedef krb5_error_code (*krb5_prf_func)( + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + const krb5_data *in, krb5_data *out); + +struct krb5_keytypes { + krb5_enctype etype; + char *name; + char *aliases[2]; + char *out_string; + const struct krb5_enc_provider *enc; + const struct krb5_hash_provider *hash; + size_t prf_length; + krb5_encrypt_length_func encrypt_len; + krb5_crypt_func encrypt; + krb5_crypt_func decrypt; + krb5_str2key_func str2key; + krb5_prf_func prf; + krb5_cksumtype required_ctype; + const struct krb5_aead_provider *aead; + krb5_flags flags; +}; + +#define ETYPE_WEAK 1 + +extern const struct krb5_keytypes krb5_enctypes_list[]; +extern const int krb5_enctypes_length; + +static inline const struct krb5_keytypes* +find_enctype (krb5_enctype enctype) +{ + int i; + for (i=0; ilength != CRC32_CKSUM_LENGTH) + return(KRB5_CRYPTO_INTERNAL); + + c = 0; + for (i=0; idata); + return(0); +} + +const struct krb5_hash_provider krb5int_hash_crc32 = { + CRC32_CKSUM_LENGTH, + 1, + k5_crc32_hash +}; diff --git a/src/lib/crypto/krb/hash_provider/hash_md4.c b/src/lib/crypto/krb/hash_provider/hash_md4.c new file mode 100644 index 000000000..1fa23c214 --- /dev/null +++ b/src/lib/crypto/krb/hash_provider/hash_md4.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "rsa-md4.h" +#include "hash_provider.h" + +static krb5_error_code +k5_md4_hash(unsigned int icount, const krb5_data *input, + krb5_data *output) +{ + krb5_MD4_CTX ctx; + unsigned int i; + + if (output->length != RSA_MD4_CKSUM_LENGTH) + return(KRB5_CRYPTO_INTERNAL); + + krb5_MD4Init(&ctx); + for (i=0; idata, ctx.digest, RSA_MD4_CKSUM_LENGTH); + + return(0); +} + +const struct krb5_hash_provider krb5int_hash_md4 = { + RSA_MD4_CKSUM_LENGTH, + 64, + k5_md4_hash +}; diff --git a/src/lib/crypto/krb/hash_provider/hash_md5.c b/src/lib/crypto/krb/hash_provider/hash_md5.c new file mode 100644 index 000000000..174c432a4 --- /dev/null +++ b/src/lib/crypto/krb/hash_provider/hash_md5.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "rsa-md5.h" +#include "hash_provider.h" + +static krb5_error_code +k5_md5_hash(unsigned int icount, const krb5_data *input, + krb5_data *output) +{ + krb5_MD5_CTX ctx; + unsigned int i; + + if (output->length != RSA_MD5_CKSUM_LENGTH) + return(KRB5_CRYPTO_INTERNAL); + + krb5_MD5Init(&ctx); + for (i=0; idata, ctx.digest, RSA_MD5_CKSUM_LENGTH); + + return(0); +} + +const struct krb5_hash_provider krb5int_hash_md5 = { + RSA_MD5_CKSUM_LENGTH, + 64, + k5_md5_hash +}; diff --git a/src/lib/crypto/krb/hash_provider/hash_provider.h b/src/lib/crypto/krb/hash_provider/hash_provider.h new file mode 100644 index 000000000..4fa46097d --- /dev/null +++ b/src/lib/crypto/krb/hash_provider/hash_provider.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +extern const struct krb5_hash_provider krb5int_hash_crc32; +extern const struct krb5_hash_provider krb5int_hash_md4; +extern const struct krb5_hash_provider krb5int_hash_md5; +extern const struct krb5_hash_provider krb5int_hash_sha1; diff --git a/src/lib/crypto/krb/hash_provider/hash_sha1.c b/src/lib/crypto/krb/hash_provider/hash_sha1.c new file mode 100644 index 000000000..ffc073cf1 --- /dev/null +++ b/src/lib/crypto/krb/hash_provider/hash_sha1.c @@ -0,0 +1,57 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "shs.h" +#include "hash_provider.h" + +static krb5_error_code +k5_sha1_hash(unsigned int icount, const krb5_data *input, + krb5_data *output) +{ + SHS_INFO ctx; + unsigned int i; + + if (output->length != SHS_DIGESTSIZE) + return(KRB5_CRYPTO_INTERNAL); + + shsInit(&ctx); + for (i=0; idata[i*4]); + } + + return(0); +} + +const struct krb5_hash_provider krb5int_hash_sha1 = { + SHS_DIGESTSIZE, + SHS_DATASIZE, + k5_sha1_hash +}; diff --git a/src/lib/crypto/krb/keyblocks.c b/src/lib/crypto/krb/keyblocks.c new file mode 100644 index 000000000..5912c81b4 --- /dev/null +++ b/src/lib/crypto/krb/keyblocks.c @@ -0,0 +1,79 @@ +/* + * lib/crypto/keyblocks.c + * + * Copyright (C) 2002, 2005 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * krb5_init_keyblock- a function to set up + * an empty keyblock + */ + + +#include "k5-int.h" +#include + +krb5_error_code krb5int_c_init_keyblock + (krb5_context context, krb5_enctype enctype, + size_t length, krb5_keyblock **out) +{ + krb5_keyblock *kb; + kb = malloc (sizeof(krb5_keyblock)); + assert (out); + *out = NULL; + if (!kb) { + return ENOMEM; + } + kb->magic = KV5M_KEYBLOCK; + kb->enctype = enctype; + kb->length = length; + if(length) { + kb->contents = malloc (length); + if(!kb->contents) { + free (kb); + return ENOMEM; + } + } else { + kb->contents = NULL; + } + *out = kb; + return 0; +} + + +void +krb5int_c_free_keyblock(krb5_context context, register krb5_keyblock *val) +{ + krb5int_c_free_keyblock_contents(context, val); + free(val); +} + +void +krb5int_c_free_keyblock_contents(krb5_context context, krb5_keyblock *key) +{ + if (key && key->contents) { + krb5int_zap_data (key->contents, key->length); + free(key->contents); + key->contents = 0; + } +} diff --git a/src/lib/crypto/krb/keyed_checksum_types.c b/src/lib/crypto/krb/keyed_checksum_types.c new file mode 100644 index 000000000..04aa44757 --- /dev/null +++ b/src/lib/crypto/krb/keyed_checksum_types.c @@ -0,0 +1,89 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" +#include "cksumtypes.h" + +static int etype_match(krb5_enctype e1, krb5_enctype e2) +{ + int i1, i2; + + for (i1=0; i1length != 8) + return(KRB5_BAD_KEYSIZE); + if ((input->length%8) != 0) + return(KRB5_BAD_MSIZE); + if (ivec && (ivec->length != 8)) + return(KRB5_CRYPTO_INTERNAL); + if (output->length != 8) + return(KRB5_CRYPTO_INTERNAL); + + switch (mit_des_key_sched(key->contents, schedule)) { + case -1: + return(KRB5DES_BAD_KEYPAR); + case -2: + return(KRB5DES_WEAK_KEY); + } + + /* this has a return value, but it's useless to us */ + + mit_des_cbc_cksum((unsigned char *) input->data, + (unsigned char *) output->data, input->length, + schedule, + ivec? (const unsigned char *)ivec->data: + (const unsigned char *)mit_des_zeroblock); + + memset(schedule, 0, sizeof(schedule)); + + return(0); +} + +const struct krb5_keyhash_provider krb5int_keyhash_descbc = { + 8, + k5_descbc_hash, + NULL, + NULL, + NULL +}; diff --git a/src/lib/crypto/krb/keyhash_provider/hmac_md5.c b/src/lib/crypto/krb/keyhash_provider/hmac_md5.c new file mode 100644 index 000000000..34ce67169 --- /dev/null +++ b/src/lib/crypto/krb/keyhash_provider/hmac_md5.c @@ -0,0 +1,144 @@ +/* + * lib/crypto/keyhash_provider/hmac_md5.c + * + * Copyright 2001, 2009 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Implementation of the Microsoft hmac-md5 checksum type. + * Implemented based on draft-brezak-win2k-krb-rc4-hmac-03 + */ + +#include "k5-int.h" +#include "keyhash_provider.h" +#include "arcfour-int.h" +#include "rsa-md5.h" +#include "hash_provider.h" +#include "../aead.h" + +static krb5_error_code +k5_hmac_md5_hash (const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *iv, + const krb5_data *input, krb5_data *output) +{ + krb5_keyusage ms_usage; + krb5_error_code ret; + krb5_keyblock ks; + krb5_data ds, ks_constant, md5tmp; + krb5_MD5_CTX ctx; + char t[4]; + + + ds.length = key->length; + ks.length = key->length; + ds.data = malloc(ds.length); + if (ds.data == NULL) + return ENOMEM; + ks.contents = (void *) ds.data; + + ks_constant.data = "signaturekey"; + ks_constant.length = strlen(ks_constant.data)+1; /* Including null*/ + + ret = krb5_hmac( &krb5int_hash_md5, key, 1, + &ks_constant, &ds); + if (ret) + goto cleanup; + + krb5_MD5Init (&ctx); + ms_usage = krb5int_arcfour_translate_usage (usage); + store_32_le(ms_usage, t); + krb5_MD5Update (&ctx, (unsigned char * ) &t, 4); + krb5_MD5Update (&ctx, (unsigned char *) input-> data, + (unsigned int) input->length ); + krb5_MD5Final(&ctx); + md5tmp.data = (void *) ctx.digest; + md5tmp.length = 16; + ret = krb5_hmac ( &krb5int_hash_md5, &ks, 1, &md5tmp, + output); + + cleanup: + memset(&ctx, 0, sizeof(ctx)); + memset (ks.contents, 0, ks.length); + free (ks.contents); + return ret; +} + +static krb5_error_code +k5_hmac_md5_hash_iov (const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *iv, + const krb5_crypto_iov *data, size_t num_data, + krb5_data *output) +{ + krb5_keyusage ms_usage; + krb5_error_code ret; + krb5_keyblock ks; + krb5_data ds, ks_constant, md5tmp; + krb5_MD5_CTX ctx; + char t[4]; + size_t i; + + ds.length = key->length; + ks.length = key->length; + ds.data = malloc(ds.length); + if (ds.data == NULL) + return ENOMEM; + ks.contents = (void *) ds.data; + + ks_constant.data = "signaturekey"; + ks_constant.length = strlen(ks_constant.data)+1; /* Including null*/ + + ret = krb5_hmac( &krb5int_hash_md5, key, 1, + &ks_constant, &ds); + if (ret) + goto cleanup; + + krb5_MD5Init (&ctx); + ms_usage = krb5int_arcfour_translate_usage (usage); + store_32_le(ms_usage, t); + krb5_MD5Update (&ctx, (unsigned char * ) &t, 4); + for (i = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (SIGN_IOV(iov)) + krb5_MD5Update (&ctx, (unsigned char *)iov->data.data, + (unsigned int)iov->data.length); + } + krb5_MD5Final(&ctx); + md5tmp.data = (void *) ctx.digest; + md5tmp.length = 16; + ret = krb5_hmac ( &krb5int_hash_md5, &ks, 1, &md5tmp, + output); + + cleanup: + memset(&ctx, 0, sizeof(ctx)); + memset (ks.contents, 0, ks.length); + free (ks.contents); + return ret; +} + +const struct krb5_keyhash_provider krb5int_keyhash_hmac_md5 = { + 16, + k5_hmac_md5_hash, + NULL, /*checksum again*/ + k5_hmac_md5_hash_iov, + NULL /*checksum again */ +}; diff --git a/src/lib/crypto/krb/keyhash_provider/k5_md4des.c b/src/lib/crypto/krb/keyhash_provider/k5_md4des.c new file mode 100644 index 000000000..fceb58ebd --- /dev/null +++ b/src/lib/crypto/krb/keyhash_provider/k5_md4des.c @@ -0,0 +1,194 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include "rsa-md4.h" +#include "keyhash_provider.h" + +#define CONFLENGTH 8 + +/* Force acceptance of krb5-beta5 md4des checksum for now. */ +#define KRB5_MD4DES_BETA5_COMPAT + +/* des-cbc(xorkey, conf | rsa-md4(conf | data)) */ + +/* this could be done in terms of the md4 and des providers, but + that's less efficient, and there's no need for this to be generic */ + +static krb5_error_code +k5_md4des_hash(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + krb5_error_code ret; + krb5_data data; + krb5_MD4_CTX ctx; + unsigned char conf[CONFLENGTH]; + unsigned char xorkey[8]; + unsigned int i; + mit_des_key_schedule schedule; + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (ivec) + return(KRB5_CRYPTO_INTERNAL); + if (output->length != (CONFLENGTH+RSA_MD4_CKSUM_LENGTH)) + return(KRB5_CRYPTO_INTERNAL); + + /* create the confouder */ + + data.length = CONFLENGTH; + data.data = (char *) conf; + if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &data))) + return(ret); + + /* create and schedule the encryption key */ + + memcpy(xorkey, key->contents, sizeof(xorkey)); + for (i=0; idata, + (unsigned int) input->length); + krb5_MD4Final(&ctx); + + /* construct the buffer to be encrypted */ + + memcpy(output->data, conf, CONFLENGTH); + memcpy(output->data+CONFLENGTH, ctx.digest, RSA_MD4_CKSUM_LENGTH); + + /* encrypt it, in place. this has a return value, but it's + always zero. */ + + mit_des_cbc_encrypt((krb5_pointer) output->data, + (krb5_pointer) output->data, output->length, + schedule, (const unsigned char *) mit_des_zeroblock, + 1); + + return(0); +} + +static krb5_error_code +k5_md4des_verify(const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, const krb5_data *hash, + krb5_boolean *valid) +{ + krb5_MD4_CTX ctx; + unsigned char plaintext[CONFLENGTH+RSA_MD4_CKSUM_LENGTH]; + unsigned char xorkey[8]; + unsigned int i; + mit_des_key_schedule schedule; + int compathash = 0; + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (ivec) + return(KRB5_CRYPTO_INTERNAL); + if (hash->length != (CONFLENGTH+RSA_MD4_CKSUM_LENGTH)) { +#ifdef KRB5_MD4DES_BETA5_COMPAT + if (hash->length != RSA_MD4_CKSUM_LENGTH) + return(KRB5_CRYPTO_INTERNAL); + else + compathash = 1; +#else + return(KRB5_CRYPTO_INTERNAL); +#endif + return(KRB5_CRYPTO_INTERNAL); + } + + /* create and schedule the encryption key */ + + memcpy(xorkey, key->contents, sizeof(xorkey)); + if (!compathash) { + for (i=0; idata, + (krb5_pointer) plaintext, hash->length, + schedule, + (const unsigned char *) mit_des_zeroblock, 0); + } else { + mit_des_cbc_encrypt((krb5_pointer) hash->data, + (krb5_pointer) plaintext, hash->length, + schedule, xorkey, 0); + } + + /* hash the confounder, then the input data */ + + krb5_MD4Init(&ctx); + if (!compathash) { + krb5_MD4Update(&ctx, plaintext, CONFLENGTH); + } + krb5_MD4Update(&ctx, (unsigned char *) input->data, + (unsigned int) input->length); + krb5_MD4Final(&ctx); + + /* compare the decrypted hash to the computed one */ + + if (!compathash) { + *valid = + (memcmp(plaintext+CONFLENGTH, ctx.digest, RSA_MD4_CKSUM_LENGTH) + == 0); + } else { + *valid = + (memcmp(plaintext, ctx.digest, RSA_MD4_CKSUM_LENGTH) == 0); + } + + memset(plaintext, 0, sizeof(plaintext)); + + return(0); +} + +const struct krb5_keyhash_provider krb5int_keyhash_md4des = { + CONFLENGTH+RSA_MD4_CKSUM_LENGTH, + k5_md4des_hash, + k5_md4des_verify, + NULL, + NULL +}; diff --git a/src/lib/crypto/krb/keyhash_provider/k5_md5des.c b/src/lib/crypto/krb/keyhash_provider/k5_md5des.c new file mode 100644 index 000000000..0175c68ab --- /dev/null +++ b/src/lib/crypto/krb/keyhash_provider/k5_md5des.c @@ -0,0 +1,191 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "des_int.h" +#include "rsa-md5.h" +#include "keyhash_provider.h" + +#define CONFLENGTH 8 + +/* Force acceptance of krb5-beta5 md5des checksum for now. */ +#define KRB5_MD5DES_BETA5_COMPAT + +/* des-cbc(xorkey, conf | rsa-md5(conf | data)) */ + +/* this could be done in terms of the md5 and des providers, but + that's less efficient, and there's no need for this to be generic */ + +static krb5_error_code +k5_md5des_hash(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, + const krb5_data *input, krb5_data *output) +{ + krb5_error_code ret; + krb5_data data; + krb5_MD5_CTX ctx; + unsigned char conf[CONFLENGTH]; + unsigned char xorkey[8]; + unsigned int i; + mit_des_key_schedule schedule; + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (ivec) + return(KRB5_CRYPTO_INTERNAL); + if (output->length != (CONFLENGTH+RSA_MD5_CKSUM_LENGTH)) + return(KRB5_CRYPTO_INTERNAL); + + /* create the confouder */ + + data.length = CONFLENGTH; + data.data = (char *) conf; + if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &data))) + return(ret); + + /* create and schedule the encryption key */ + + memcpy(xorkey, key->contents, sizeof(xorkey)); + for (i=0; idata, + (unsigned int) input->length); + krb5_MD5Final(&ctx); + + /* construct the buffer to be encrypted */ + + memcpy(output->data, conf, CONFLENGTH); + memcpy(output->data+CONFLENGTH, ctx.digest, RSA_MD5_CKSUM_LENGTH); + + /* encrypt it, in place. this has a return value, but it's + always zero. */ + + mit_des_cbc_encrypt((krb5_pointer) output->data, + (krb5_pointer) output->data, output->length, + schedule, (const unsigned char *) mit_des_zeroblock, + 1); + + return(0); +} + +static krb5_error_code +k5_md5des_verify(const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *ivec, + const krb5_data *input, const krb5_data *hash, + krb5_boolean *valid) +{ + krb5_MD5_CTX ctx; + unsigned char plaintext[CONFLENGTH+RSA_MD5_CKSUM_LENGTH]; + unsigned char xorkey[8]; + unsigned int i; + mit_des_key_schedule schedule; + int compathash = 0; + + if (key->length != 8) + return(KRB5_BAD_KEYSIZE); + if (ivec) + return(KRB5_CRYPTO_INTERNAL); + if (hash->length != (CONFLENGTH+RSA_MD5_CKSUM_LENGTH)) { +#ifdef KRB5_MD5DES_BETA5_COMPAT + if (hash->length != RSA_MD5_CKSUM_LENGTH) + return(KRB5_CRYPTO_INTERNAL); + else + compathash = 1; +#else + return(KRB5_CRYPTO_INTERNAL); +#endif + } + + /* create and schedule the encryption key */ + + memcpy(xorkey, key->contents, sizeof(xorkey)); + if (!compathash) { + for (i=0; idata, + (krb5_pointer) plaintext, hash->length, + schedule, + (const unsigned char *) mit_des_zeroblock, 0); + } else { + mit_des_cbc_encrypt((krb5_pointer) hash->data, + (krb5_pointer) plaintext, hash->length, + schedule, xorkey, 0); + } + + /* hash the confounder, then the input data */ + + krb5_MD5Init(&ctx); + if (!compathash) { + krb5_MD5Update(&ctx, plaintext, CONFLENGTH); + } + krb5_MD5Update(&ctx, (unsigned char *) input->data, + (unsigned) input->length); + krb5_MD5Final(&ctx); + + /* compare the decrypted hash to the computed one */ + + if (!compathash) { + *valid = + (memcmp(plaintext+CONFLENGTH, ctx.digest, RSA_MD5_CKSUM_LENGTH) + == 0); + } else { + *valid = + (memcmp(plaintext, ctx.digest, RSA_MD5_CKSUM_LENGTH) == 0); + } + memset(plaintext, 0, sizeof(plaintext)); + + return(0); +} + +const struct krb5_keyhash_provider krb5int_keyhash_md5des = { + CONFLENGTH+RSA_MD5_CKSUM_LENGTH, + k5_md5des_hash, + k5_md5des_verify, + NULL, + NULL +}; diff --git a/src/lib/crypto/krb/keyhash_provider/keyhash_provider.h b/src/lib/crypto/krb/keyhash_provider/keyhash_provider.h new file mode 100644 index 000000000..8ac91e19d --- /dev/null +++ b/src/lib/crypto/krb/keyhash_provider/keyhash_provider.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +extern const struct krb5_keyhash_provider krb5int_keyhash_descbc; +extern const struct krb5_keyhash_provider krb5int_keyhash_md4des; +extern const struct krb5_keyhash_provider krb5int_keyhash_md5des; +extern const struct krb5_keyhash_provider krb5int_keyhash_hmac_md5; +extern const struct krb5_keyhash_provider krb5int_keyhash_md5_hmac; +extern const struct krb5_keyhash_provider krb5int_keyhash_aescbc_128; +extern const struct krb5_keyhash_provider krb5int_keyhash_aescbc_256; diff --git a/src/lib/crypto/krb/keyhash_provider/md5_hmac.c b/src/lib/crypto/krb/keyhash_provider/md5_hmac.c new file mode 100644 index 000000000..d05b97f00 --- /dev/null +++ b/src/lib/crypto/krb/keyhash_provider/md5_hmac.c @@ -0,0 +1,65 @@ +/* + * lib/crypto/keyhash_provider/md5_hmac.c + * + * Copyright 2001, 2009 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * Implementation of Microsoft KERB_CHECKSUM_MD5_HMAC + */ + +#include "k5-int.h" +#include "keyhash_provider.h" +#include "arcfour-int.h" +#include "rsa-md5.h" +#include "hash_provider.h" + +static krb5_error_code +k5_md5_hmac_hash (const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *iv, + const krb5_data *input, krb5_data *output) +{ + krb5_keyusage ms_usage; + krb5_MD5_CTX ctx; + unsigned char t[4]; + krb5_data ds; + + krb5_MD5Init(&ctx); + + ms_usage = krb5int_arcfour_translate_usage (usage); + store_32_le(ms_usage, t); + krb5_MD5Update(&ctx, t, sizeof(t)); + krb5_MD5Update(&ctx, (unsigned char *)input->data, input->length); + krb5_MD5Final(&ctx); + + ds.magic = KV5M_DATA; + ds.length = 16; + ds.data = (char *)ctx.digest; + + return krb5_hmac ( &krb5int_hash_md5, key, 1, &ds, output); +} + +const struct krb5_keyhash_provider krb5int_keyhash_md5_hmac = { + 16, + k5_md5_hmac_hash, + NULL /*checksum again*/ +}; + diff --git a/src/lib/crypto/krb/keylengths.c b/src/lib/crypto/krb/keylengths.c new file mode 100644 index 000000000..acd1da81b --- /dev/null +++ b/src/lib/crypto/krb/keylengths.c @@ -0,0 +1,61 @@ +/* + * COPYRIGHT (c) 2006 + * The Regents of the University of Michigan + * ALL RIGHTS RESERVED + * + * Permission is granted to use, copy, create derivative works + * and redistribute this software and such derivative works + * for any purpose, so long as the name of The University of + * Michigan is not used in any advertising or publicity + * pertaining to the use of distribution of this software + * without specific, written prior authorization. If the + * above copyright notice or any other identification of the + * University of Michigan is included in any copy of any + * portion of this software, then the disclaimer below must + * also be included. + * + * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION + * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY + * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF + * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING + * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE + * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING + * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN + * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGES. + */ + +#include "k5-int.h" +#include "etypes.h" + +/* + * keybytes is the number of bytes required as input to make a key, + * keylength is the length of the final key in bytes + */ +krb5_error_code KRB5_CALLCONV +krb5_c_keylengths(krb5_context context, krb5_enctype enctype, + size_t *keybytes, size_t *keylength) +{ + int i; + + if (keybytes == NULL && keylength == NULL) + return(EINVAL); + + for (i=0; ikeybytes; + if (keylength) + *keylength = krb5_enctypes_list[i].enc->keylength; + + return(0); +} diff --git a/src/lib/crypto/krb/make_checksum.c b/src/lib/crypto/krb/make_checksum.c new file mode 100644 index 000000000..ad532b27d --- /dev/null +++ b/src/lib/crypto/krb/make_checksum.c @@ -0,0 +1,129 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" +#include "etypes.h" +#include "dk.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_make_checksum(krb5_context context, krb5_cksumtype cksumtype, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *input, krb5_checksum *cksum) +{ + unsigned int i; + int e1, e2; + krb5_data data; + krb5_error_code ret; + size_t cksumlen; + + for (i=0; ihashsize; + else + cksumlen = krb5_cksumtypes_list[i].hash->hashsize; + + cksum->length = cksumlen; + + if ((cksum->contents = (krb5_octet *) malloc(cksum->length)) == NULL) + return(ENOMEM); + + data.length = cksum->length; + data.data = (char *) cksum->contents; + + if (krb5_cksumtypes_list[i].keyhash) { + /* check if key is compatible */ + const struct krb5_keyhash_provider *keyhash; + + keyhash = krb5_cksumtypes_list[i].keyhash; + + if (krb5_cksumtypes_list[i].keyed_etype) { + for (e1=0; e1enctype) + break; + + if ((e1 == krb5_enctypes_length) || + (e2 == krb5_enctypes_length) || + (krb5_enctypes_list[e1].enc != krb5_enctypes_list[e2].enc)) { + ret = KRB5_BAD_ENCTYPE; + goto cleanup; + } + } + + if (keyhash->hash == NULL) { + krb5_crypto_iov iov[1]; + + iov[0].flags = KRB5_CRYPTO_TYPE_DATA; + iov[0].data = *input; + + assert(keyhash->hash_iov != NULL); + + ret = (*keyhash->hash_iov)(key, usage, 0, iov, 1, &data); + } else { + ret = (*keyhash->hash)(key, usage, 0, input, &data); + } + } else if (krb5_cksumtypes_list[i].flags & KRB5_CKSUMFLAG_DERIVE) { + ret = krb5_dk_make_checksum(krb5_cksumtypes_list[i].hash, + key, usage, input, &data); + } else { + /* no key is used */ + + ret = (*(krb5_cksumtypes_list[i].hash->hash))(1, input, &data); + } + + if (!ret) { + cksum->magic = KV5M_CHECKSUM; + cksum->checksum_type = cksumtype; + if (krb5_cksumtypes_list[i].trunc_size) { + krb5_octet *trunc; + cksum->length = krb5_cksumtypes_list[i].trunc_size; + trunc = (krb5_octet *) realloc(cksum->contents, cksum->length); + if (trunc) + cksum->contents = trunc; + } + } + +cleanup: + if (ret) { + memset(cksum->contents, 0, cksum->length); + free(cksum->contents); + cksum->contents = NULL; + } + + return(ret); +} diff --git a/src/lib/crypto/krb/make_checksum_iov.c b/src/lib/crypto/krb/make_checksum_iov.c new file mode 100644 index 000000000..3cf4af605 --- /dev/null +++ b/src/lib/crypto/krb/make_checksum_iov.c @@ -0,0 +1,82 @@ +/* + * lib/crypto/make_checksum_iov.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "cksumtypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_make_checksum_iov(krb5_context context, + krb5_cksumtype cksumtype, + const krb5_keyblock *key, + krb5_keyusage usage, + krb5_crypto_iov *data, + size_t num_data) +{ + unsigned int i; + size_t cksumlen; + krb5_error_code ret; + krb5_data cksum_data; + krb5_crypto_iov *checksum; + + for (i = 0; i < krb5_cksumtypes_length; i++) { + if (krb5_cksumtypes_list[i].ctype == cksumtype) + break; + } + + if (i == krb5_cksumtypes_length) + return(KRB5_BAD_ENCTYPE); + + if (krb5_cksumtypes_list[i].keyhash != NULL) + cksum_data.length = krb5_cksumtypes_list[i].keyhash->hashsize; + else + cksum_data.length = krb5_cksumtypes_list[i].hash->hashsize; + + if (krb5_cksumtypes_list[i].trunc_size != 0) + cksumlen = krb5_cksumtypes_list[i].trunc_size; + else + cksumlen = cksum_data.length; + + checksum = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_CHECKSUM); + if (checksum == NULL || checksum->data.length < cksumlen) + return(KRB5_BAD_MSIZE); + + cksum_data.data = malloc(cksum_data.length); + if (cksum_data.data == NULL) + return(ENOMEM); + + ret = krb5int_c_make_checksum_iov(&krb5_cksumtypes_list[i], + key, usage, data, num_data, + &cksum_data); + if (ret == 0) { + memcpy(checksum->data.data, cksum_data.data, cksumlen); + checksum->data.length = cksumlen; + } + + free(cksum_data.data); + + return(ret); +} diff --git a/src/lib/crypto/krb/make_random_key.c b/src/lib/crypto/krb/make_random_key.c new file mode 100644 index 000000000..0ae321dca --- /dev/null +++ b/src/lib/crypto/krb/make_random_key.c @@ -0,0 +1,83 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_make_random_key(krb5_context context, krb5_enctype enctype, + krb5_keyblock *random_key) +{ + int i; + krb5_error_code ret; + const struct krb5_enc_provider *enc; + size_t keybytes, keylength; + krb5_data random_data; + unsigned char *bytes; + + for (i=0; ikeybytes; + keylength = enc->keylength; + + if ((bytes = (unsigned char *) malloc(keybytes)) == NULL) + return(ENOMEM); + if ((random_key->contents = (krb5_octet *) malloc(keylength)) == NULL) { + free(bytes); + return(ENOMEM); + } + + random_data.data = (char *) bytes; + random_data.length = keybytes; + + if ((ret = krb5_c_random_make_octets(context, &random_data))) + goto cleanup; + + random_key->magic = KV5M_KEYBLOCK; + random_key->enctype = enctype; + random_key->length = keylength; + + ret = ((*(enc->make_key))(&random_data, random_key)); + +cleanup: + memset(bytes, 0, keybytes); + free(bytes); + + if (ret) { + memset(random_key->contents, 0, keylength); + free(random_key->contents); + } + + return(ret); +} diff --git a/src/lib/crypto/krb/mandatory_sumtype.c b/src/lib/crypto/krb/mandatory_sumtype.c new file mode 100644 index 000000000..f9322ff3f --- /dev/null +++ b/src/lib/crypto/krb/mandatory_sumtype.c @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2003 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code +krb5int_c_mandatory_cksumtype (krb5_context ctx, krb5_enctype etype, + krb5_cksumtype *cksumtype) +{ + int i; + + for (i = 0; i < krb5_enctypes_length; i++) + if (krb5_enctypes_list[i].etype == etype) { + *cksumtype = krb5_enctypes_list[i].required_ctype; + return 0; + } + + return KRB5_BAD_ENCTYPE; +} diff --git a/src/lib/crypto/krb/nfold.c b/src/lib/crypto/krb/nfold.c new file mode 100644 index 000000000..1f1902d1c --- /dev/null +++ b/src/lib/crypto/krb/nfold.c @@ -0,0 +1,130 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#ifdef HAVE_MEMORY_H +#include +#endif + +/* +n-fold(k-bits): + l = lcm(n,k) + r = l/k + s = k-bits | k-bits rot 13 | k-bits rot 13*2 | ... | k-bits rot 13*(r-1) + compute the 1's complement sum: + n-fold = s[0..n-1]+s[n..2n-1]+s[2n..3n-1]+..+s[(k-1)*n..k*n-1] +*/ + +/* representation: msb first, assume n and k are multiples of 8, and + that k>=16. this is the case of all the cryptosystems which are + likely to be used. this function can be replaced if that + assumption ever fails. */ + +/* input length is in bits */ + +void +krb5_nfold(unsigned int inbits, const unsigned char *in, unsigned int outbits, + unsigned char *out) +{ + int a,b,c,lcm; + int byte, i, msbit; + + /* the code below is more readable if I make these bytes + instead of bits */ + + inbits >>= 3; + outbits >>= 3; + + /* first compute lcm(n,k) */ + + a = outbits; + b = inbits; + + while(b != 0) { + c = b; + b = a%b; + a = c; + } + + lcm = outbits*inbits/a; + + /* now do the real work */ + + memset(out, 0, outbits); + byte = 0; + + /* this will end up cycling through k lcm(k,n)/k times, which + is correct */ + for (i=lcm-1; i>=0; i--) { + /* compute the msbit in k which gets added into this byte */ + msbit = (/* first, start with the msbit in the first, unrotated + byte */ + ((inbits<<3)-1) + /* then, for each byte, shift to the right for each + repetition */ + +(((inbits<<3)+13)*(i/inbits)) + /* last, pick out the correct byte within that + shifted repetition */ + +((inbits-(i%inbits))<<3) + )%(inbits<<3); + + /* pull out the byte value itself */ + byte += (((in[((inbits-1)-(msbit>>3))%inbits]<<8)| + (in[((inbits)-(msbit>>3))%inbits])) + >>((msbit&7)+1))&0xff; + + /* do the addition */ + byte += out[i%outbits]; + out[i%outbits] = byte&0xff; + +#if 0 + printf("msbit[%d] = %d\tbyte = %02x\tsum = %03x\n", i, msbit, + (((in[((inbits-1)-(msbit>>3))%inbits]<<8)| + (in[((inbits)-(msbit>>3))%inbits])) + >>((msbit&7)+1))&0xff, byte); +#endif + + /* keep around the carry bit, if any */ + byte >>= 8; + +#if 0 + printf("carry=%d\n", byte); +#endif + } + + /* if there's a carry bit left over, add it back in */ + if (byte) { + for (i=outbits-1; i>=0; i--) { + /* do the addition */ + byte += out[i]; + out[i] = byte&0xff; + + /* keep around the carry bit, if any */ + byte >>= 8; + } + } +} + diff --git a/src/lib/crypto/krb/old/Makefile.in b/src/lib/crypto/krb/old/Makefile.in new file mode 100644 index 000000000..4370f1ffb --- /dev/null +++ b/src/lib/crypto/krb/old/Makefile.in @@ -0,0 +1,35 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/old +mydir=lib/crypto/krb/old +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/../../@CRYPTO_IMPL@/des -I$(srcdir) +DEFS= + +##DOS##BUILDTOP = ..\..\.. +##DOS##PREFIXDIR=old +##DOS##OBJFILE=..\$(OUTPRE)old.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf + +STLIBOBJS= old_decrypt.o old_encrypt.o des_stringtokey.o + +OBJS= $(OUTPRE)des_stringtokey.$(OBJEXT) $(OUTPRE)old_decrypt.$(OBJEXT) $(OUTPRE)old_encrypt.$(OBJEXT) + +SRCS= $(srcdir)/des_stringtokey.c $(srcdir)/old_decrypt.c \ + $(srcdir)/old_encrypt.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/old/deps b/src/lib/crypto/krb/old/deps new file mode 100644 index 000000000..e2e71c213 --- /dev/null +++ b/src/lib/crypto/krb/old/deps @@ -0,0 +1,37 @@ +# +# Generated makefile dependencies follow. +# +des_stringtokey.so des_stringtokey.po $(OUTPRE)des_stringtokey.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/../../builtin/des/des_int.h des_stringtokey.c \ + old.h +old_decrypt.so old_decrypt.po $(OUTPRE)old_decrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + old.h old_decrypt.c +old_encrypt.so old_encrypt.po $(OUTPRE)old_encrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + old.h old_encrypt.c diff --git a/src/lib/crypto/krb/old/des_stringtokey.c b/src/lib/crypto/krb/old/des_stringtokey.c new file mode 100644 index 000000000..2bacb4ef9 --- /dev/null +++ b/src/lib/crypto/krb/old/des_stringtokey.c @@ -0,0 +1,58 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "old.h" +#include + +/* XXX */ +extern krb5_error_code mit_des_string_to_key_int +(krb5_keyblock * keyblock, + const krb5_data * data, + const krb5_data * salt); + +krb5_error_code +krb5int_des_string_to_key(const struct krb5_enc_provider *enc, + const krb5_data *string, + const krb5_data *salt, const krb5_data *parm, + krb5_keyblock *key) +{ + int type; + if (parm ) { + if (parm->length != 1) + return KRB5_ERR_BAD_S2K_PARAMS; + type = parm->data[0]; + } + else type = 0; + switch(type) { + case 0: + return(mit_des_string_to_key_int(key, string, salt)); + case 1: + return mit_afs_string_to_key(key, string, salt); + default: + return KRB5_ERR_BAD_S2K_PARAMS; + } +} diff --git a/src/lib/crypto/krb/old/old.h b/src/lib/crypto/krb/old/old.h new file mode 100644 index 000000000..94ee6421e --- /dev/null +++ b/src/lib/crypto/krb/old/old.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +void krb5_old_encrypt_length +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t input, size_t *length); + +krb5_error_code krb5_old_encrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output); + +krb5_error_code krb5_old_decrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); + +krb5_error_code krb5int_des_string_to_key +(const struct krb5_enc_provider *enc, + const krb5_data *string, const krb5_data *salt, + const krb5_data *params, + krb5_keyblock *key); diff --git a/src/lib/crypto/krb/old/old_decrypt.c b/src/lib/crypto/krb/old/old_decrypt.c new file mode 100644 index 000000000..cfbbd7272 --- /dev/null +++ b/src/lib/crypto/krb/old/old_decrypt.c @@ -0,0 +1,143 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "old.h" + +krb5_error_code +krb5_old_decrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, + krb5_data *arg_output) +{ + krb5_error_code ret; + size_t blocksize, hashsize, plainsize; + unsigned char *cksumdata, *cn; + krb5_data output, cksum, crcivec; + int alloced; + + blocksize = enc->block_size; + hashsize = hash->hashsize; + + plainsize = input->length - blocksize - hashsize; + + if (arg_output->length < plainsize) + return(KRB5_BAD_MSIZE); + + /* if there's enough space to work in the app buffer, use it, + otherwise allocate our own */ + + if ((cksumdata = (unsigned char *) malloc(hashsize)) == NULL) + return(ENOMEM); + + if (arg_output->length < input->length) { + output.length = input->length; + + if ((output.data = (char *) malloc(output.length)) == NULL) { + free(cksumdata); + return(ENOMEM); + } + + alloced = 1; + } else { + output.length = input->length; + + output.data = arg_output->data; + + alloced = 0; + } + + /* decrypt it */ + + /* save last ciphertext block in case we decrypt in place */ + if (ivec != NULL && ivec->length == blocksize) { + cn = malloc(blocksize); + if (cn == NULL) { + ret = ENOMEM; + goto cleanup; + } + memcpy(cn, input->data + input->length - blocksize, blocksize); + } else + cn = NULL; + + /* XXX this is gross, but I don't have much choice */ + if ((key->enctype == ENCTYPE_DES_CBC_CRC) && (ivec == 0)) { + crcivec.length = key->length; + crcivec.data = (char *) key->contents; + ivec = &crcivec; + } + + if ((ret = ((*(enc->decrypt))(key, ivec, input, &output)))) + goto cleanup; + + /* verify the checksum */ + + memcpy(cksumdata, output.data+blocksize, hashsize); + memset(output.data+blocksize, 0, hashsize); + + cksum.length = hashsize; + cksum.data = output.data+blocksize; + + if ((ret = ((*(hash->hash))(1, &output, &cksum)))) + goto cleanup; + + if (memcmp(cksum.data, cksumdata, cksum.length) != 0) { + ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; + goto cleanup; + } + + /* copy the plaintext around */ + + if (alloced) { + memcpy(arg_output->data, output.data+blocksize+hashsize, + plainsize); + } else { + memmove(arg_output->data, arg_output->data+blocksize+hashsize, + plainsize); + } + arg_output->length = plainsize; + + /* update ivec */ + if (cn != NULL) + memcpy(ivec->data, cn, blocksize); + + ret = 0; + +cleanup: + if (alloced) { + memset(output.data, 0, output.length); + free(output.data); + } + + if (cn != NULL) + free(cn); + memset(cksumdata, 0, hashsize); + free(cksumdata); + return(ret); +} diff --git a/src/lib/crypto/krb/old/old_encrypt.c b/src/lib/crypto/krb/old/old_encrypt.c new file mode 100644 index 000000000..98bd109e0 --- /dev/null +++ b/src/lib/crypto/krb/old/old_encrypt.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "old.h" + +void +krb5_old_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, + size_t *length) +{ + size_t blocksize, hashsize; + + blocksize = enc->block_size; + hashsize = hash->hashsize; + + *length = krb5_roundup(blocksize+hashsize+inputlen, blocksize); +} + +krb5_error_code +krb5_old_encrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + const krb5_data *input, + krb5_data *output) +{ + krb5_error_code ret; + size_t blocksize, hashsize, enclen; + krb5_data datain, crcivec; + int real_ivec; + + blocksize = enc->block_size; + hashsize = hash->hashsize; + + krb5_old_encrypt_length(enc, hash, input->length, &enclen); + + if (output->length < enclen) + return(KRB5_BAD_MSIZE); + + output->length = enclen; + + /* fill in confounded, padded, plaintext buffer with zero checksum */ + + memset(output->data, 0, output->length); + + datain.length = blocksize; + datain.data = output->data; + + if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &datain))) + return(ret); + memcpy(output->data+blocksize+hashsize, input->data, input->length); + + /* compute the checksum */ + + datain.length = hashsize; + datain.data = output->data+blocksize; + + if ((ret = ((*(hash->hash))(1, output, &datain)))) + goto cleanup; + + /* encrypt it */ + + /* XXX this is gross, but I don't have much choice */ + if ((key->enctype == ENCTYPE_DES_CBC_CRC) && (ivec == 0)) { + crcivec.length = key->length; + crcivec.data = (char *) key->contents; + ivec = &crcivec; + real_ivec = 0; + } else + real_ivec = 1; + + if ((ret = ((*(enc->encrypt))(key, ivec, output, output)))) + goto cleanup; + + /* update ivec */ + if (real_ivec && ivec != NULL && ivec->length == blocksize) + memcpy(ivec->data, output->data + output->length - blocksize, + blocksize); +cleanup: + if (ret) + memset(output->data, 0, output->length); + + return(ret); +} diff --git a/src/lib/crypto/krb/old_api_glue.c b/src/lib/crypto/krb/old_api_glue.c new file mode 100644 index 000000000..4db0c3359 --- /dev/null +++ b/src/lib/crypto/krb/old_api_glue.c @@ -0,0 +1,328 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +krb5_error_code KRB5_CALLCONV +krb5_encrypt(krb5_context context, krb5_const_pointer inptr, + krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, + krb5_pointer ivec) +{ + krb5_data inputd, ivecd; + krb5_enc_data outputd; + size_t blocksize, outlen; + krb5_error_code ret; + + if (ivec) { + if ((ret = krb5_c_block_size(context, eblock->key->enctype, &blocksize))) + return(ret); + + ivecd.length = blocksize; + ivecd.data = ivec; + } + + /* size is the length of the input cleartext data */ + inputd.length = size; + inputd.data = inptr; + + /* The size of the output buffer isn't part of the old api. Not too + safe. So, we assume here that it's big enough. */ + if ((ret = krb5_c_encrypt_length(context, eblock->key->enctype, size, + &outlen))) + return(ret); + + outputd.ciphertext.length = outlen; + outputd.ciphertext.data = outptr; + + return(krb5_c_encrypt(context, eblock->key, 0, ivec?&ivecd:0, + &inputd, &outputd)); +} + +krb5_error_code KRB5_CALLCONV +krb5_decrypt(krb5_context context, krb5_const_pointer inptr, + krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, + krb5_pointer ivec) +{ + krb5_enc_data inputd; + krb5_data outputd, ivecd; + size_t blocksize; + krb5_error_code ret; + + if (ivec) { + if ((ret = krb5_c_block_size(context, eblock->key->enctype, &blocksize))) + return(ret); + + ivecd.length = blocksize; + ivecd.data = ivec; + } + + /* size is the length of the input ciphertext data */ + inputd.enctype = eblock->key->enctype; + inputd.ciphertext.length = size; + inputd.ciphertext.data = inptr; + + /* we don't really know how big this is, but the code tends to assume + that the output buffer size should be the same as the input + buffer size */ + outputd.length = size; + outputd.data = outptr; + + return(krb5_c_decrypt(context, eblock->key, 0, ivec?&ivecd:0, + &inputd, &outputd)); +} + +krb5_error_code KRB5_CALLCONV +krb5_process_key(krb5_context context, krb5_encrypt_block *eblock, + const krb5_keyblock *key) +{ + eblock->key = (krb5_keyblock *) key; + + return(0); +} + +krb5_error_code KRB5_CALLCONV +krb5_finish_key(krb5_context context, krb5_encrypt_block *eblock) +{ + return(0); +} + +krb5_error_code KRB5_CALLCONV +krb5_string_to_key(krb5_context context, const krb5_encrypt_block *eblock, + krb5_keyblock *keyblock, const krb5_data *data, + const krb5_data *salt) +{ + return(krb5_c_string_to_key(context, eblock->crypto_entry, data, salt, + keyblock)); +} + +krb5_error_code KRB5_CALLCONV +krb5_init_random_key(krb5_context context, const krb5_encrypt_block *eblock, + const krb5_keyblock *keyblock, krb5_pointer *ptr) +{ + krb5_data data; + + data.length = keyblock->length; + data.data = (char *) keyblock->contents; + + return(krb5_c_random_seed(context, &data)); +} + +krb5_error_code KRB5_CALLCONV +krb5_finish_random_key(krb5_context context, const krb5_encrypt_block *eblock, + krb5_pointer *ptr) +{ + return(0); +} + +krb5_error_code KRB5_CALLCONV +krb5_random_key(krb5_context context, const krb5_encrypt_block *eblock, + krb5_pointer ptr, krb5_keyblock **keyblock) +{ + krb5_keyblock *key; + krb5_error_code ret; + + if ((key = (krb5_keyblock *) malloc(sizeof(krb5_keyblock))) == NULL) + return(ENOMEM); + + if ((ret = krb5_c_make_random_key(context, eblock->crypto_entry, key))) { + free(key); + key = NULL; + } + + *keyblock = key; + + return(ret); +} + +krb5_enctype KRB5_CALLCONV +krb5_eblock_enctype(krb5_context context, const krb5_encrypt_block *eblock) +{ + return(eblock->crypto_entry); +} + +krb5_error_code KRB5_CALLCONV +krb5_use_enctype(krb5_context context, krb5_encrypt_block *eblock, + krb5_enctype enctype) +{ + eblock->crypto_entry = enctype; + + return(0); +} + +size_t KRB5_CALLCONV +krb5_encrypt_size(size_t length, krb5_enctype crypto) +{ + size_t ret; + + if (krb5_c_encrypt_length(/* XXX */ 0, crypto, length, &ret)) + return(-1); /* XXX */ + + return(ret); +} + +size_t KRB5_CALLCONV +krb5_checksum_size(krb5_context context, krb5_cksumtype ctype) +{ + size_t ret; + + if (krb5_c_checksum_length(context, ctype, &ret)) + return(-1); /* XXX */ + + return(ret); +} + +krb5_error_code KRB5_CALLCONV +krb5_calculate_checksum(krb5_context context, krb5_cksumtype ctype, + krb5_const_pointer in, size_t in_length, + krb5_const_pointer seed, size_t seed_length, + krb5_checksum *outcksum) +{ + krb5_data input; + krb5_keyblock key; + krb5_error_code ret; + krb5_checksum cksum; + + input.data = in; + input.length = in_length; + + key.length = seed_length; + key.contents = seed; + + if ((ret = krb5_c_make_checksum(context, ctype, &key, 0, &input, &cksum))) + return(ret); + + if (outcksum->length < cksum.length) { + memset(cksum.contents, 0, cksum.length); + free(cksum.contents); + return(KRB5_BAD_MSIZE); + } + + outcksum->magic = cksum.magic; + outcksum->checksum_type = cksum.checksum_type; + memcpy(outcksum->contents, cksum.contents, cksum.length); + outcksum->length = cksum.length; + + free(cksum.contents); + + return(0); +} + +krb5_error_code KRB5_CALLCONV +krb5_verify_checksum(krb5_context context, krb5_cksumtype ctype, + const krb5_checksum *cksum, krb5_const_pointer in, + size_t in_length, krb5_const_pointer seed, + size_t seed_length) +{ + krb5_data input; + krb5_keyblock key; + krb5_error_code ret; + krb5_boolean valid; + + input.data = in; + input.length = in_length; + + key.length = seed_length; + key.contents = seed; + + if ((ret = krb5_c_verify_checksum(context, &key, 0, &input, cksum, + &valid))) + return(ret); + + if (!valid) + return(KRB5KRB_AP_ERR_BAD_INTEGRITY); + + return(0); +} + +krb5_error_code KRB5_CALLCONV +krb5_random_confounder(size_t size, krb5_pointer ptr) +{ + krb5_data random_data; + + random_data.length = size; + random_data.data = ptr; + + return(krb5_c_random_make_octets(/* XXX */ 0, &random_data)); +} + +krb5_error_code krb5_encrypt_data(krb5_context context, krb5_keyblock *key, + krb5_pointer ivec, krb5_data *data, + krb5_enc_data *enc_data) +{ + krb5_error_code ret; + size_t enclen, blocksize; + krb5_data ivecd; + + if ((ret = krb5_c_encrypt_length(context, key->enctype, data->length, + &enclen))) + return(ret); + + if (ivec) { + if ((ret = krb5_c_block_size(context, key->enctype, &blocksize))) + return(ret); + + ivecd.length = blocksize; + ivecd.data = ivec; + } + + enc_data->magic = KV5M_ENC_DATA; + enc_data->kvno = 0; + enc_data->enctype = key->enctype; + enc_data->ciphertext.length = enclen; + if ((enc_data->ciphertext.data = malloc(enclen)) == NULL) + return(ENOMEM); + + if ((ret = krb5_c_encrypt(context, key, 0, ivec?&ivecd:0, data, enc_data))) + free(enc_data->ciphertext.data); + + return(ret); +} + +krb5_error_code krb5_decrypt_data(krb5_context context, krb5_keyblock *key, + krb5_pointer ivec, krb5_enc_data *enc_data, + krb5_data *data) +{ + krb5_error_code ret; + krb5_data ivecd; + size_t blocksize; + + if (ivec) { + if ((ret = krb5_c_block_size(context, key->enctype, &blocksize))) + return(ret); + + ivecd.length = blocksize; + ivecd.data = ivec; + } + + data->length = enc_data->ciphertext.length; + if ((data->data = (char *) malloc(data->length)) == NULL) + return(ENOMEM); + + if ((ret = krb5_c_decrypt(context, key, 0, ivec?&ivecd:0, enc_data, data))) + free(data->data); + + return(0); +} diff --git a/src/lib/crypto/krb/prf.c b/src/lib/crypto/krb/prf.c new file mode 100644 index 000000000..67e1bc8a3 --- /dev/null +++ b/src/lib/crypto/krb/prf.c @@ -0,0 +1,87 @@ +/* + * lib/crypto/prf.c + * + * Copyright (C) 2004 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * This contains the implementation of krb5_c_prf, which will find + *the enctype-specific PRF and then generate pseudo-random data. This + *function yields krb5_c_prf_length bytes of output. + */ + + +#include "k5-int.h" +#include "etypes.h" + +#include + +krb5_error_code KRB5_CALLCONV +krb5_c_prf_length(krb5_context context, krb5_enctype enctype, + size_t *len) +{ + int i; + assert (len); + + for (i=0; idata); + + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + output->magic = KV5M_DATA; + if (!krb5_enctypes_list[i].prf) + return (KRB5_CRYPTO_INTERNAL); + krb5_c_prf_length (context, key->enctype, &len); + if (len != output->length) + return (KRB5_CRYPTO_INTERNAL); + return((*(krb5_enctypes_list[i].prf)) + (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, + key, input, output)); +} + diff --git a/src/lib/crypto/krb/prng.c b/src/lib/crypto/krb/prng.c new file mode 100644 index 000000000..f9647eae2 --- /dev/null +++ b/src/lib/crypto/krb/prng.c @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2001, 2002, 2004, 2007, 2008 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "enc_provider.h" +#include +#include "k5-thread.h" + +#include "yarrow.h" +static Yarrow_CTX y_ctx; +#define yarrow_lock krb5int_yarrow_lock +k5_mutex_t yarrow_lock = K5_MUTEX_PARTIAL_INITIALIZER; + +/* Helper function to estimate entropy based on sample length + * and where it comes from. + */ + +static size_t +entropy_estimate (unsigned int randsource, size_t length) +{ + switch (randsource) { + case KRB5_C_RANDSOURCE_OLDAPI: + return (4*length); + case KRB5_C_RANDSOURCE_OSRAND: + return (8*length); + case KRB5_C_RANDSOURCE_TRUSTEDPARTY: + return (4*length); + case KRB5_C_RANDSOURCE_TIMING:return (2); + case KRB5_C_RANDSOURCE_EXTERNAL_PROTOCOL: + return (0); + default: + abort(); + } +return (0); +} + +int krb5int_prng_init(void) +{ + unsigned i; + int yerr; + + yerr = k5_mutex_finish_init(&yarrow_lock); + if (yerr) + return yerr; + + yerr = krb5int_yarrow_init (&y_ctx, NULL); + if ((yerr != YARROW_OK) && (yerr != YARROW_NOT_SEEDED)) + return KRB5_CRYPTO_INTERNAL; + + for (i=0; i < KRB5_C_RANDSOURCE_MAX; i++ ) { + unsigned source_id; + if (krb5int_yarrow_new_source (&y_ctx, &source_id) != YARROW_OK ) + return KRB5_CRYPTO_INTERNAL; + assert (source_id == i); + } + + return 0; +} + +krb5_error_code KRB5_CALLCONV +krb5_c_random_add_entropy (krb5_context context, unsigned int randsource, + const krb5_data *data) +{ + int yerr; + + /* Make sure the mutex got initialized. */ + yerr = krb5int_crypto_init(); + if (yerr) + return yerr; + /* Now, finally, feed in the data. */ + yerr = krb5int_yarrow_input (&y_ctx, randsource, + data->data, data->length, + entropy_estimate (randsource, data->length)); + if (yerr != YARROW_OK) + return (KRB5_CRYPTO_INTERNAL); + return (0); +} + +krb5_error_code KRB5_CALLCONV +krb5_c_random_seed (krb5_context context, krb5_data *data) +{ + return krb5_c_random_add_entropy (context, KRB5_C_RANDSOURCE_OLDAPI, data); +} + +krb5_error_code KRB5_CALLCONV +krb5_c_random_make_octets(krb5_context context, krb5_data *data) +{ + int yerr; + yerr = krb5int_yarrow_output (&y_ctx, data->data, data->length); + if (yerr == YARROW_NOT_SEEDED) { + yerr = krb5int_yarrow_reseed (&y_ctx, YARROW_SLOW_POOL); + if (yerr == YARROW_OK) + yerr = krb5int_yarrow_output (&y_ctx, data->data, data->length); + } + if ( yerr != YARROW_OK) + return (KRB5_CRYPTO_INTERNAL); + return(0); +} + +void krb5int_prng_cleanup (void) +{ + krb5int_yarrow_final (&y_ctx); + k5_mutex_destroy(&yarrow_lock); +} + + +/* + * Routines to get entropy from the OS. For UNIX we try /dev/urandom + * and /dev/random. Currently we don't do anything for Windows. + */ +#if defined(_WIN32) + +krb5_error_code KRB5_CALLCONV +krb5_c_random_os_entropy (krb5_context context, int strong, int *success) +{ + if (success) + *success = 0; + return 0; +} + +#else /*Windows*/ +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif + +/* + * Helper function to read entropy from a random device. Takes the + * name of a device, opens it, makes sure it is a device and if so, + * reads entropy. Returns a boolean indicating whether entropy was + * read. + */ + +static int +read_entropy_from_device (krb5_context context, const char *device) +{ + krb5_data data; + struct stat sb; + int fd; + unsigned char buf[YARROW_SLOW_THRESH/8], *bp; + int left; + fd = open (device, O_RDONLY); + if (fd == -1) + return 0; + set_cloexec_fd(fd); + if (fstat (fd, &sb) == -1 || S_ISREG(sb.st_mode)) { + close(fd); + return 0; + } + + for (bp = buf, left = sizeof (buf); left > 0;) { + ssize_t count; + count = read (fd, bp, (unsigned) left); + if (count <= 0) { + close(fd); + return 0; + } + left -= count; + bp += count; + } + close (fd); + data.length = sizeof (buf); + data.data = ( char * ) buf; + if ( krb5_c_random_add_entropy (context, KRB5_C_RANDSOURCE_OSRAND, + &data) != 0) { + return 0; + } + return 1; +} + +krb5_error_code KRB5_CALLCONV +krb5_c_random_os_entropy (krb5_context context, + int strong, int *success) +{ + int unused; + int *oursuccess = success?success:&unused; + *oursuccess = 0; + /* If we are getting strong data then try that first. We are + guaranteed to cause a reseed of some kind if strong is true and + we have both /dev/random and /dev/urandom. We want the strong + data included in the reseed so we get it first.*/ + if (strong) { + if (read_entropy_from_device (context, "/dev/random")) + *oursuccess = 1; + } + if (read_entropy_from_device (context, "/dev/urandom")) + *oursuccess = 1; + return 0; +} + +#endif /*Windows or pre-OSX Mac*/ diff --git a/src/lib/crypto/krb/random_to_key.c b/src/lib/crypto/krb/random_to_key.c new file mode 100644 index 000000000..20f0abc0d --- /dev/null +++ b/src/lib/crypto/krb/random_to_key.c @@ -0,0 +1,73 @@ +/* + * COPYRIGHT (c) 2006 + * The Regents of the University of Michigan + * ALL RIGHTS RESERVED + * + * Permission is granted to use, copy, create derivative works + * and redistribute this software and such derivative works + * for any purpose, so long as the name of The University of + * Michigan is not used in any advertising or publicity + * pertaining to the use of distribution of this software + * without specific, written prior authorization. If the + * above copyright notice or any other identification of the + * University of Michigan is included in any copy of any + * portion of this software, then the disclaimer below must + * also be included. + * + * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION + * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY + * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF + * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING + * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE + * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR + * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING + * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN + * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGES. + */ + +/* + * Create a key given random data. It is assumed that random_key has + * already been initialized and random_key->contents have been allocated + * with the correct length. + */ +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_random_to_key(krb5_context context, krb5_enctype enctype, + krb5_data *random_data, krb5_keyblock *random_key) +{ + int i; + krb5_error_code ret; + const struct krb5_enc_provider *enc; + + if (random_data == NULL || random_key == NULL) + return(EINVAL); + + if (random_key->contents == NULL) + return(EINVAL); + + for (i=0; ilength != enc->keylength) + return(KRB5_BAD_KEYSIZE); + + ret = ((*(enc->make_key))(random_data, random_key)); + + if (ret) { + memset(random_key->contents, 0, random_key->length); + } + + return(ret); +} diff --git a/src/lib/crypto/krb/raw/Makefile.in b/src/lib/crypto/krb/raw/Makefile.in new file mode 100644 index 000000000..f52cb24ea --- /dev/null +++ b/src/lib/crypto/krb/raw/Makefile.in @@ -0,0 +1,34 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/raw +mydir=lib/crypto/krb/raw +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@ +DEFS= + +##DOS##BUILDTOP = ..\..\.. +##DOS##PREFIXDIR=raw +##DOS##OBJFILE=..\$(OUTPRE)raw.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf + +STLIBOBJS= raw_decrypt.o raw_encrypt.o raw_aead.o + +OBJS= $(OUTPRE)raw_decrypt.$(OBJEXT) $(OUTPRE)raw_encrypt.$(OBJEXT) $(OUTPRE)raw_aead.$(OBJEXT) + +SRCS= $(srcdir)/raw_decrypt.c $(srcdir)/raw_encrypt.c $(srcdir)/raw_aead.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/raw/deps b/src/lib/crypto/krb/raw/deps new file mode 100644 index 000000000..7ab0382e4 --- /dev/null +++ b/src/lib/crypto/krb/raw/deps @@ -0,0 +1,37 @@ +# +# Generated makefile dependencies follow. +# +raw_decrypt.so raw_decrypt.po $(OUTPRE)raw_decrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + raw.h raw_decrypt.c +raw_encrypt.so raw_encrypt.po $(OUTPRE)raw_encrypt.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + raw.h raw_encrypt.c +raw_aead.so raw_aead.po $(OUTPRE)raw_aead.$(OBJEXT): \ + $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ + $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ + $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h $(SRCTOP)/include/k5-buf.h \ + $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ + $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ + $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ + $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ + $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ + $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ + $(srcdir)/../aead.h $(srcdir)/../cksumtypes.h raw.h \ + raw_aead.c diff --git a/src/lib/crypto/krb/raw/raw.h b/src/lib/crypto/krb/raw/raw.h new file mode 100644 index 000000000..f4b7d5f0b --- /dev/null +++ b/src/lib/crypto/krb/raw/raw.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" + +void krb5_raw_encrypt_length +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t input, size_t *length); + +krb5_error_code krb5_raw_encrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output); + +krb5_error_code krb5_raw_decrypt +(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *arg_output); + +extern const struct krb5_aead_provider krb5int_aead_raw; + diff --git a/src/lib/crypto/krb/raw/raw_aead.c b/src/lib/crypto/krb/raw/raw_aead.c new file mode 100644 index 000000000..f52fe000d --- /dev/null +++ b/src/lib/crypto/krb/raw/raw_aead.c @@ -0,0 +1,163 @@ +/* + * lib/crypto/raw/raw_aead.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + + +#include "k5-int.h" +#include "raw.h" +#include "aead.h" + +/* AEAD */ + +static krb5_error_code +krb5int_raw_crypto_length(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + krb5_cryptotype type, + unsigned int *length) +{ + switch (type) { + case KRB5_CRYPTO_TYPE_PADDING: + *length = enc->block_size; + break; + default: + *length = 0; + break; + } + + return 0; +} + +static krb5_error_code +krb5int_raw_encrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + krb5_crypto_iov *padding; + size_t i; + unsigned int blocksize = 0; + unsigned int plainlen = 0; + unsigned int padsize = 0; + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); + if (ret != 0) + return ret; + + for (i = 0; i < num_data; i++) { + krb5_crypto_iov *iov = &data[i]; + + if (iov->flags == KRB5_CRYPTO_TYPE_DATA) + plainlen += iov->data.length; + } + + if (blocksize != 0) { + /* Check that the input data is correctly padded */ + if (plainlen % blocksize) + padsize = blocksize - (plainlen % blocksize); + } + + padding = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_PADDING); + if (padsize && (padding == NULL || padding->data.length < padsize)) + return KRB5_BAD_MSIZE; + + if (padding != NULL) { + memset(padding->data.data, 0, padsize); + padding->data.length = padsize; + } + + assert(enc->encrypt_iov != NULL); + + ret = enc->encrypt_iov(key, ivec, data, num_data); /* will update ivec */ + + return ret; +} + +static krb5_error_code +krb5int_raw_decrypt_iov(const struct krb5_aead_provider *aead, + const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_data *ivec, + krb5_crypto_iov *data, + size_t num_data) +{ + krb5_error_code ret; + size_t i; + unsigned int blocksize = 0; /* careful, this is enc block size not confounder len */ + unsigned int cipherlen = 0; + + if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { + return krb5int_c_iov_decrypt_stream(aead, enc, hash, key, + usage, ivec, data, num_data); + } + + + /* E(Confounder | Plaintext | Pad) | Checksum */ + + ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); + if (ret != 0) + return ret; + + for (i = 0; i < num_data; i++) { + const krb5_crypto_iov *iov = &data[i]; + + if (ENCRYPT_DATA_IOV(iov)) + cipherlen += iov->data.length; + } + + if (blocksize == 0) { + /* Check for correct input length in CTS mode */ + if (enc->block_size != 0 && cipherlen < enc->block_size) + return KRB5_BAD_MSIZE; + } else { + /* Check that the input data is correctly padded */ + if ((cipherlen % blocksize) != 0) + return KRB5_BAD_MSIZE; + } + + /* Validate header and trailer lengths */ + + /* derive the keys */ + + /* decrypt the plaintext (header | data | padding) */ + assert(enc->decrypt_iov != NULL); + + ret = enc->decrypt_iov(key, ivec, data, num_data); /* will update ivec */ + + return ret; +} + +const struct krb5_aead_provider krb5int_aead_raw = { + krb5int_raw_crypto_length, + krb5int_raw_encrypt_iov, + krb5int_raw_decrypt_iov +}; diff --git a/src/lib/crypto/krb/raw/raw_decrypt.c b/src/lib/crypto/krb/raw/raw_decrypt.c new file mode 100644 index 000000000..767da1f9f --- /dev/null +++ b/src/lib/crypto/krb/raw/raw_decrypt.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "raw.h" + +krb5_error_code +krb5_raw_decrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + return((*(enc->decrypt))(key, ivec, input, output)); +} diff --git a/src/lib/crypto/krb/raw/raw_encrypt.c b/src/lib/crypto/krb/raw/raw_encrypt.c new file mode 100644 index 000000000..68b819c01 --- /dev/null +++ b/src/lib/crypto/krb/raw/raw_encrypt.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "raw.h" + +void +krb5_raw_encrypt_length(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + size_t inputlen, size_t *length) +{ + size_t blocksize; + + blocksize = enc->block_size; + + *length = krb5_roundup(inputlen, blocksize); +} + +krb5_error_code +krb5_raw_encrypt(const struct krb5_enc_provider *enc, + const struct krb5_hash_provider *hash, + const krb5_keyblock *key, krb5_keyusage usage, + const krb5_data *ivec, const krb5_data *input, + krb5_data *output) +{ + return((*(enc->encrypt))(key, ivec, input, output)); +} diff --git a/src/lib/crypto/krb/state.c b/src/lib/crypto/krb/state.c new file mode 100644 index 000000000..f69746c81 --- /dev/null +++ b/src/lib/crypto/krb/state.c @@ -0,0 +1,72 @@ +/* + * lib/crypto/state.c + * + * Copyright (C) 2001 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + + * + * + * + * * Section 6 (Encryption) of the Kerberos revisions document defines + * cipher states to be used to chain encryptions and decryptions + * together. Examples of cipher states include initialization vectors + * for CBC encription. This file contains implementations of + * krb5_c_init_state and krb5_c_free_state used by clients of the + * Kerberos crypto library. + */ +#include "k5-int.h" +#include "etypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_init_state (krb5_context context, const krb5_keyblock *key, + krb5_keyusage keyusage, krb5_data *new_state) +{ + int i; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + return (*(krb5_enctypes_list[i].enc->init_state)) + (key, keyusage, new_state); +} + +krb5_error_code KRB5_CALLCONV +krb5_c_free_state (krb5_context context, const krb5_keyblock *key, + krb5_data *state) +{ + int i; + + for (i=0; ienctype) + break; + } + + if (i == krb5_enctypes_length) + return(KRB5_BAD_ENCTYPE); + + return (*(krb5_enctypes_list[i].enc->free_state)) + (state); +} diff --git a/src/lib/crypto/krb/string_to_cksumtype.c b/src/lib/crypto/krb/string_to_cksumtype.c new file mode 100644 index 000000000..5a3c70d73 --- /dev/null +++ b/src/lib/crypto/krb/string_to_cksumtype.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_string_to_cksumtype(char *string, krb5_cksumtype *cksumtypep) +{ + unsigned int i, j; + + for (i=0; ilength == SALT_TYPE_AFS_LENGTH) { + switch (enctype) { + case ENCTYPE_DES_CBC_CRC: + case ENCTYPE_DES_CBC_MD4: + case ENCTYPE_DES_CBC_MD5: + break; + default: + return (KRB5_CRYPTO_INTERNAL); + } + } + + keybytes = enc->keybytes; + keylength = enc->keylength; + + if ((key->contents = (krb5_octet *) malloc(keylength)) == NULL) + return(ENOMEM); + + key->magic = KV5M_KEYBLOCK; + key->enctype = enctype; + key->length = keylength; + + ret = (*krb5_enctypes_list[i].str2key)(enc, string, salt, params, key); + if (ret) { + memset(key->contents, 0, keylength); + free(key->contents); + key->length = 0; + key->contents = NULL; + } + + return(ret); +} diff --git a/src/lib/crypto/krb/valid_cksumtype.c b/src/lib/crypto/krb/valid_cksumtype.c new file mode 100644 index 000000000..8fd9effc9 --- /dev/null +++ b/src/lib/crypto/krb/valid_cksumtype.c @@ -0,0 +1,47 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_boolean KRB5_CALLCONV +krb5_c_valid_cksumtype(krb5_cksumtype ctype) +{ + unsigned int i; + + for (i=0; ietype == etype && (k->flags & ETYPE_WEAK)) { + return(1); + } + } + + return(0); +} diff --git a/src/lib/crypto/krb/verify_checksum.c b/src/lib/crypto/krb/verify_checksum.c new file mode 100644 index 000000000..72b5595de --- /dev/null +++ b/src/lib/crypto/krb/verify_checksum.c @@ -0,0 +1,92 @@ +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government. It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE 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. + */ + +#include "k5-int.h" +#include "cksumtypes.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_verify_checksum(krb5_context context, const krb5_keyblock *key, + krb5_keyusage usage, const krb5_data *data, + const krb5_checksum *cksum, krb5_boolean *valid) +{ + unsigned int i; + size_t hashsize; + krb5_error_code ret; + krb5_data indata; + krb5_checksum computed; + + for (i=0; ichecksum_type) + break; + } + + if (i == krb5_cksumtypes_length) + return(KRB5_BAD_ENCTYPE); + + /* if there's actually a verify function, call it */ + + indata.length = cksum->length; + indata.data = (char *) cksum->contents; + + if (krb5_cksumtypes_list[i].keyhash) { + const struct krb5_keyhash_provider *keyhash; + + keyhash = krb5_cksumtypes_list[i].keyhash; + + if (keyhash->verify == NULL && keyhash->verify_iov != NULL) { + krb5_crypto_iov iov[1]; + + iov[0].flags = KRB5_CRYPTO_TYPE_DATA; + iov[0].data = *data; + + return (*keyhash->verify_iov)(key, usage, 0, iov, 1, &indata, valid); + } else if (keyhash->verify != NULL) { + return (*keyhash->verify)(key, usage, 0, data, &indata, valid); + } + } + + /* otherwise, make the checksum again, and compare */ + + if ((ret = krb5_c_checksum_length(context, cksum->checksum_type, &hashsize))) + return(ret); + + if (cksum->length != hashsize) + return(KRB5_BAD_MSIZE); + + computed.length = hashsize; + + if ((ret = krb5_c_make_checksum(context, cksum->checksum_type, key, usage, + data, &computed))) { + free(computed.contents); + return(ret); + } + + *valid = (memcmp(computed.contents, cksum->contents, hashsize) == 0); + + free(computed.contents); + + return(0); +} diff --git a/src/lib/crypto/krb/verify_checksum_iov.c b/src/lib/crypto/krb/verify_checksum_iov.c new file mode 100644 index 000000000..08c0a5c7b --- /dev/null +++ b/src/lib/crypto/krb/verify_checksum_iov.c @@ -0,0 +1,98 @@ +/* + * lib/crypto/verify_checksum_iov.c + * + * Copyright 2008 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + */ + +#include "k5-int.h" +#include "cksumtypes.h" +#include "aead.h" + +krb5_error_code KRB5_CALLCONV +krb5_c_verify_checksum_iov(krb5_context context, + krb5_cksumtype checksum_type, + const krb5_keyblock *key, + krb5_keyusage usage, + const krb5_crypto_iov *data, + size_t num_data, + krb5_boolean *valid) +{ + unsigned int i; + size_t cksumlen; + krb5_error_code ret; + krb5_data computed; + krb5_crypto_iov *checksum; + + for (i = 0; i < krb5_cksumtypes_length; i++) { + if (krb5_cksumtypes_list[i].ctype == checksum_type) + break; + } + + if (i == krb5_cksumtypes_length) + return(KRB5_BAD_ENCTYPE); + + checksum = krb5int_c_locate_iov((krb5_crypto_iov *)data, num_data, KRB5_CRYPTO_TYPE_CHECKSUM); + if (checksum == NULL) + return(KRB5_BAD_MSIZE); + + /* if there's actually a verify function, call it */ + + if (krb5_cksumtypes_list[i].keyhash && + krb5_cksumtypes_list[i].keyhash->verify_iov) + return((*(krb5_cksumtypes_list[i].keyhash->verify_iov))(key, usage, 0, + data, num_data, + &checksum->data, + valid)); + + /* otherwise, make the checksum again, and compare */ + + if (krb5_cksumtypes_list[i].keyhash != NULL) + computed.length = krb5_cksumtypes_list[i].keyhash->hashsize; + else + computed.length = krb5_cksumtypes_list[i].hash->hashsize; + + if (krb5_cksumtypes_list[i].trunc_size != 0) + cksumlen = krb5_cksumtypes_list[i].trunc_size; + else + cksumlen = computed.length; + + if (checksum->data.length != cksumlen) + return(KRB5_BAD_MSIZE); + + computed.data = malloc(computed.length); + if (computed.data == NULL) + return(ENOMEM); + + if ((ret = krb5int_c_make_checksum_iov(&krb5_cksumtypes_list[i], key, usage, + data, num_data, &computed))) { + free(computed.data); + return(ret); + } + + *valid = (computed.length == cksumlen) && + (memcmp(computed.data, checksum->data.data, cksumlen) == 0); + + free(computed.data); + + return(0); +} diff --git a/src/lib/crypto/krb/yarrow/ASSUMPTIONS b/src/lib/crypto/krb/yarrow/ASSUMPTIONS new file mode 100644 index 000000000..3e3c99c49 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ASSUMPTIONS @@ -0,0 +1,101 @@ +Assumptions +=========== + +The Yarrow design, described in "Yarrow-160: Notes on the Design and +Analysis of the Yarrow Cryptographic Pseudonumber Generator" by John +Kelsey, Bruce Schneier and Niels Ferguson of Counterpane Systems +(available from http://www.counterpane.com/yarrow.html), left out some +implementation details and has some ambiguities in the protocol. ZKS +has to made some assumptions and taken some decisions in its +implementation of Yarrow. In the text, `we' represents ZKS. + +Here is the list of those assumptions: + +1) To simplify the code and speed up running time, we limit the number +of different sources to 20. This should be enough for most +applications. This can be changed by redefining YARROW_MAX_SOURCE in +yarrow.h. + +2) The Yarrow paper (in section 5.3) state that Pt is either +implementation dependent or dynamically adjusted. We chose to fix the +slow pool's Pt to 100 and the fast pool's Pt to 10. This can be +changed by redefining YARROW_FAST_PT and YARROW_SLOW_PT in yarrow.c. + +3) Initialization when there is no saved state is not discussed in the +Yarrow paper. We have defined that CPRNG is becomes seeded after a +slow reseed. During initialization, a slow reseed is triggered by +YARROW_K_OF_N_INIT_THRESH sources reaching the slow threshold +YARROW_SLOW_INIT_THRESH. During initialization, fast reseeds are +triggered when a source reaches the fast threshold +YARROW_FAST_INIT_THRESH. After reseed the behavior of the pools is +controlled by YARROW_K_OF_N_THRESH, YARROW_SLOW_THRESH and +YARROW_FAST_THRESH. + +Our default values for YARROW_K_OF_N_INIT_THRESH, +YARROW_SLOW_INIT_THRESH and YARROW_FAST_INIT_THRESH are the same as +YARROW_K_OF_N_THRESH, YARROW_SLOW_THRESH and YARROW_FAST_THRESH +respectively. Note this means that a Yarrow_Poll call by itself can +never put us in an initialized state, as it only works on one pool, +and the default YARROW_K_OF_N_INIT_THRESH value is 2. + +4) We define a function Yarrow_Poll which can gather entropy. The +user must allocate a source_id, and call Yarrow_Poll manually. +Yarrow_Poll just adds samples from the machines state to the source +given as an argument. + +5) Prior to initialization, Yarrow_Output will fail. + +6) The actions to take on state load are not described in the yarrow +paper, all it says is that 2k bytes should be written (and by +implication read back in somehow). We read in the 2k bytes, hash +them into the fast pool, and then do a forced fast reseed, and an +immediate state save. + +7) In step 2 of the reseed process, we must hash the value i. The +representation of this integer will affect the hash value. In our +code, i is a 64-bit unsigned value. We update the hash context using +the 64 bit big endian representation of i. + +8) Yarrow outputs random bits in blocks. If the calling function +requests less bits than available, then the unused bits are kept +in memory until the next call. In case of a reseed, we chose to +discard those leftover bits. + +9) The samples from one source must alternate between the two pools. +As a default, we initialize the first pool to send the sample too to +be the fast pool. This initialization is done only when a source is +added, not when we reseed from one. + +10) The Yarrow paper states that the maximum number of outputs between +reseeding is limited to min(2^n,2^(k/3)*Pg), but does not explain +what is to happen when this limit is reached. It could be the case +that we reach the limit but there is not enough entropy in the pools +to reseed. In our code, the Yarrow_Output_Block will do a forced +fast reseed. + +11) In the Yarrow paper, the limit on the number of outputs between +reseeding is expressed in number of outputs: + +#oututs <= min(2^n, 2^(k/3).Pg) + +but we redefine it in terms of gates by dividing the numbers by Pg, +the number of outputs per gate, and counting the number of gates +instead. This makes an overflow a little less likely. + +We don't use a bignum library, so in event of overflow, the limit in +number of gates before reseed (y->gates_limit) is reduced down to +2^64-1 (or 2^32-1 if 64 bit ints aren't available on the platform). + +12) The Yarrow paper describes that the cipher block C should be +incremented as part of the output function. We treat the bytes +of C as a big endian number to do the increment. + +13) Triple-DES key size. The yarrow paper uses the letter k to +represent the keysize in bits. Due to the parity bits, the size of k +is 192 bits. However the effective key size is actually 168 bits, as +the value of k is used in security limits, k must be 168 bits. The +paper uses k (eg set K to the next k output bits), so we have to do +the parity padding function, to copy bits 0-6 to 0-7, 7-13 to 8-15 +etc. The macro DES_Init performs the function of doing a DES key +schedule from a packed key (no parity bits), internally doing the +parity padding. Other ciphers are simpler as there is no parity. diff --git a/src/lib/crypto/krb/yarrow/LICENSE b/src/lib/crypto/krb/yarrow/LICENSE new file mode 100644 index 000000000..c85475d7e --- /dev/null +++ b/src/lib/crypto/krb/yarrow/LICENSE @@ -0,0 +1,21 @@ +Copyright 2000 by Zero-Knowledge Systems, Inc. + +Permission to use, copy, modify, distribute, and sell this software +and its documentation for any purpose is hereby granted without fee, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Zero-Knowledge Systems, +Inc. not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. Zero-Knowledge Systems, Inc. makes no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +ZERO-KNOWLEDGE SYSTEMS, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL ZERO-KNOWLEDGE SYSTEMS, INC. BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/src/lib/crypto/krb/yarrow/Makefile.in b/src/lib/crypto/krb/yarrow/Makefile.in new file mode 100644 index 000000000..d7f01e469 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/Makefile.in @@ -0,0 +1,37 @@ +thisconfigdir=../../../.. +myfulldir=lib/crypto/krb/yarrow +mydir=lib/crypto/krb/yarrow +BUILDTOP=$(REL)..$(S)..$(S)..$(S).. +LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@ -I$(srcdir)/../../@CRYPTO_IMPL@/sha1 -I$(srcdir)/../enc_provider +DEFS= + +##DOS##BUILDTOP = ..\..\..\.. +##DOS##PREFIXDIR=yarrow +##DOS##OBJFILE=..\$(OUTPRE)yarrow.lst + +PROG_LIBPATH=-L$(TOPLIBD) +PROG_RPATH=$(KRB5_LIBDIR) + +STLIBOBJS=\ + yarrow.o \ + ycipher.o +OBJS=\ + $(OUTPRE)yarrow.$(OBJEXT) \ + $(OUTPRE)ycipher.$(OBJEXT) + +SRCS=\ + $(srcdir)/yarrow.c \ + $(srcdir)/ycipher.c + +##DOS##LIBOBJS = $(OBJS) + +all-unix:: all-libobjs + +includes:: depend + +depend:: $(SRCS) + +clean-unix:: clean-libobjs + +@libobj_frag@ + diff --git a/src/lib/crypto/krb/yarrow/README b/src/lib/crypto/krb/yarrow/README new file mode 100644 index 000000000..3dd4b801a --- /dev/null +++ b/src/lib/crypto/krb/yarrow/README @@ -0,0 +1,94 @@ +Yarrow - Secure Pseudo-Random Number Generator +============================================== + +This is an implementation of the cryptographic pseudo-random number +generator Yarrow. You are encouraged to use, modify, and incorporate +this code. Please see the accompanying LICENSE file for more details. + + +Yarrow can be used with OpenSSL 0.9.5a (http://www.openssl.org) and +other cryptographic libraries. + +The Yarrow design is described in "Yarrow-160: Notes on the Design and +Analysis of the Yarrow Cryptographic Pseudorandom Number Generator" by +John Kelsey, Bruce Schneier and Niels Ferguson of Counterpane Systems, +available from http://www.counterpane.com/yarrow.html + +The Yarrow function calls are described in the yarrow(3) manpage. + +Installation +============ + +By default, Yarrow is built with OpenSSL. If the OpenSSL headers are +not installed in the standard directory /usr/local/ssl/include, +set the path in the Makefile. + +If it is possible that an application using Yarrow will fork(), Yarrow +must be compiled with -DYARROW_DETECT_FORK (then the child process +will have to seed Yarrow again), or the Yarrow_CTX must be allocated +in shared memory. + +If compiled with -DYARROW_SAVE_STATE, Yarrow will use a seed file +specified in the Yarrow_Init call. + +When the settings in the Makefile are correct, run "make". + + +Yarrow with OpenSSL: +------------------- + +The macros YARROW_CIPHER_3DES (default), YARROW_CIPHER_BLOWFISH and +YARROW_CIPHER_IDEA for ciphers and YARROW_HASH_SHA1 (default) and +YARROW_HASH_MD5 for hash functions are available to select algorithms +from OpenSSL. + +CRYPTO_set_locking_callback() is required in multithreaded applications. + + +Yarrow with other cryptographic libraries: +----------------------------------------- + +The Yarrow implementation uses a symmetric cipher, a cryptographic +hash function and a mutex. By default, Yarrow calls OpenSSL. For use +with other cryptographic libraries, the following types and macros +should be defined: + +Symmetric cipher - ycipher.h: + + typedef struct { ... } CIPHER_CTX; + + #define CIPHER_BLOCK_SIZE ... + #define CIPHER_KEY_SIZE ... + + void CIPHER_Init(CIPHER_CTX *ctx, void *key); + void CIPHER_Encrypt_Block(CIPHER_CTX *ctx, void *in, void *out); + +Hash function - yhash.h: + + typedef struct { ... } HASH_CTX; + + #define HASH_DIGEST_SIZE ... + #define HASH_STATE_SIZE ... + + void HASH_Init(HASH_CTX *ctx); + void HASH_Update(HASH_CTX *ctx, const void *data, unsigned long size); + void HASH_Final(HASH_CTX *ctx, unsigned char *md); + +Mutex - ylock.h: + + int LOCK(void); + int UNLOCK(void); + +Learn More: +---------- + +It is Zero-Knowledge's hope that third party developers of yarrow will +collaborate to derive test vectors for yarrow. In an effort to further +this discussion, we have created a mailing list for developers and +interested parties. To subscribe, send an email to +"yarrow-request@zeroknowledge.com" with "subscribe" in the body of the +message. + +For more information, or if you have questions or comments regarding open +source at Zero-Knowledge Systems, please visit +http://opensource.zeroknowledge.com diff --git a/src/lib/crypto/krb/yarrow/TODO b/src/lib/crypto/krb/yarrow/TODO new file mode 100644 index 000000000..bd133ecfd --- /dev/null +++ b/src/lib/crypto/krb/yarrow/TODO @@ -0,0 +1,9 @@ +open issues: + +* when should the initial seed be considered complete? +* poll system ressources for randomness on startup? +* how frequently should the PRNG state be saved? +* how to react to fork()? +* what should the seed file contain, how should it be processed? +* test fork() hack +* test openSSL locks in multi-threaded environment diff --git a/src/lib/crypto/krb/yarrow/deps b/src/lib/crypto/krb/yarrow/deps new file mode 100644 index 000000000..e61199e4d --- /dev/null +++ b/src/lib/crypto/krb/yarrow/deps @@ -0,0 +1,27 @@ +# +# Generated makefile dependencies follow. +# +yarrow.so yarrow.po $(OUTPRE)yarrow.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/sha1/shs.h \ + yarrow.c yarrow.h ycipher.h yexcep.h yhash.h ylock.h \ + ystate.h ytypes.h +ycipher.so ycipher.po $(OUTPRE)ycipher.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ + $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ + $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/autoconf.h \ + $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ + $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ + $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ + $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ + $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ + $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ + $(SRCTOP)/include/socket-utils.h $(srcdir)/../../builtin/sha1/shs.h \ + $(srcdir)/../enc_provider/enc_provider.h yarrow.h ycipher.c \ + ycipher.h yhash.h ytypes.h diff --git a/src/lib/crypto/krb/yarrow/yarrow.c b/src/lib/crypto/krb/yarrow/yarrow.c new file mode 100644 index 000000000..ff25fa9c5 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yarrow.c @@ -0,0 +1,958 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +/* + * Yarrow - Cryptographic Pseudo-Random Number Generator + * Copyright (c) 2000 Zero-Knowledge Systems, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of Zero-Knowledge Systems, + * Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Zero-Knowledge Systems, Inc. makes no representations + * about the suitability of this software for any purpose. It is + * provided "as is" without express or implied warranty. + * + * See the accompanying LICENSE file for more information. + */ + +#include "k5-int.h" + +#include +#include +#ifdef _WIN32 +#include "port-sockets.h" +#else +# include +# include +#endif +#if !defined(YARROW_NO_MATHLIB) +#include +#endif + +#define YARROW_IMPL +#include "yarrow.h" +#include "yhash.h" +#include "ycipher.h" +#include "ylock.h" +#include "ystate.h" +#include "yexcep.h" + +#if defined( YARROW_DEBUG ) || defined( YARROW_TRACE ) +# include +#endif + +#if defined( YARROW_TRACE ) +extern int yarrow_verbose; +#define TRACE( x ) do { if (yarrow_verbose) { x } } while (0) +#else +#define TRACE( x ) +#endif + +#if defined(macintosh) +# define make_big_endian32(x) (x) +#else +# define make_big_endian32(x) htonl(x) +#endif + +#if defined( YARROW_DEBUG ) +static void hex_print(FILE* f, const char* var, void* data, size_t size); +#endif + +static void block_increment( void* block, const int sz ); +#if defined( YARROW_SAVE_STATE ) +static int Yarrow_Load_State( Yarrow_CTX *y ); +static int Yarrow_Save_State( Yarrow_CTX *y ); +#endif + +static int yarrow_gate_locked(Yarrow_CTX* y); + +static const byte zero_block[CIPHER_BLOCK_SIZE] = { 0, }; + +static const char* const yarrow_str_error[] = { + "ok", + "failed", + "failed: uninitialized", + "failed: already initialized", + "failed: no driver", + "failed: can't open driver", + "failed: invalid source id", + "failed: no more source ids available", + "failed: invalid argument", + "failed: insufficient privileges", + "failed: out of memory", + "failed: resource exhausted", + "failed: not enough entropy to generate output", + "failed: locking error", + "failed: no state to load", + "failed: state load or save failed", + "failed: not implemented" +}; + +/* calculate limits after initialization */ + +static void krb5int_yarrow_init_Limits(Yarrow_CTX* y) +{ + double tmp1, tmp2, limit; + /* max number of gates between reseeds -> exceed this, do forced reseed */ + + /* #oututs <= min(2^n, 2^(k/3).Pg) */ + + /* => #gates <= min(2^n/Pg, 2^(k/3)) */ + + tmp1 = POW_CIPHER_BLOCK_SIZE / y->Pg; + tmp2 = POW_CIPHER_KEY_SIZE; + limit = min(tmp1, tmp2); + if (limit < COUNTER_MAX) + { + y->gates_limit = limit; + } + else + { + y->gates_limit = COUNTER_MAX; + } +} + +static int yarrow_reseed_locked( Yarrow_CTX* y, int pool ); + +/* if the program was forked, the child must not operate on the same + PRNG state */ +#ifdef YARROW_DETECT_FORK + +static int +yarrow_input_locked( Yarrow_CTX* y, unsigned source_id, + const void *sample, + size_t size, size_t entropy_bits ); + +static int Yarrow_detect_fork(Yarrow_CTX *y) +{ + pid_t newpid; + EXCEP_DECL; + + /* this does not work for multi-threaded apps if threads have different + * pids */ + newpid = getpid(); + if ( y->pid != newpid ) + { + /* we input the pid twice, so it will get into the fast pool at least once + * Then we reseed. This doesn't really increase entropy, but does make the + * streams distinct assuming we already have good entropy*/ + y->pid = newpid; + TRY (yarrow_input_locked (y, 0, &newpid, + sizeof (newpid), 0)); + TRY (yarrow_input_locked (y, 0, &newpid, + sizeof (newpid), 0)); + TRY (yarrow_reseed_locked (y, YARROW_FAST_POOL)); + } + + CATCH: + EXCEP_RET; +} + +#else + +#define Yarrow_detect_fork(x) (YARROW_OK) + +#endif + +static void Yarrow_Make_Seeded( Yarrow_CTX* y ) +{ + TRACE( printf( "SEEDED," ); ); + y->seeded = 1; + + /* now we are seeded switch to _THRESH values */ + + y->slow_thresh = YARROW_SLOW_THRESH; + y->fast_thresh = YARROW_FAST_THRESH; + y->slow_k_of_n_thresh = YARROW_K_OF_N_THRESH; +} + +YARROW_DLL +int krb5int_yarrow_init(Yarrow_CTX* y, const char *filename) +{ + EXCEP_DECL; + int locked = 0; + + if (!y) { THROW( YARROW_BAD_ARG ); } + TRY( LOCK() ); + locked = 1; + + y->seeded = 0; + y->saved = 0; + +#if defined( YARROW_DETECT_FORK ) + y->pid = getpid(); +#endif + + y->entropyfile = filename; + y->num_sources = 0; + mem_zero(y->C, sizeof(y->C)); + HASH_Init(&y->pool[YARROW_FAST_POOL]); + HASH_Init(&y->pool[YARROW_SLOW_POOL]); + + mem_zero(y->K, sizeof(y->K)); + + mem_zero(&y->cipher, sizeof(y->cipher)); + + TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); + y->out_left = 0; + y->out_count = 0; + y->gate_count = 0; + y->Pg = YARROW_OUTPUTS_PER_GATE; + y->Pt[YARROW_FAST_POOL] = YARROW_FAST_PT; + y->Pt[YARROW_SLOW_POOL] = YARROW_SLOW_PT; + y->slow_k_of_n = 0; + + /* start with INIT_THRESH values, after seeded, switch to THRESH values */ + + y->slow_thresh = YARROW_SLOW_INIT_THRESH; + y->fast_thresh = YARROW_FAST_INIT_THRESH; + y->slow_k_of_n_thresh = YARROW_K_OF_N_INIT_THRESH; + + krb5int_yarrow_init_Limits(y); + +#if defined( YARROW_SAVE_STATE ) + if ( y->entropyfile != NULL ) + { + int ret = Yarrow_Load_State( y ); + if ( ret != YARROW_OK && ret != YARROW_NO_STATE ) + { + THROW( ret ); + } + + /* if load suceeded then write new state back immediately + */ + + /* Also check that it's not already saved, because the reseed in + * Yarrow_Load_State may trigger a save + */ + + if ( ret == YARROW_OK && !y->saved ) + { + TRY( Yarrow_Save_State( y ) ); + } + } +#endif + + if ( !y->seeded ) + { + THROW( YARROW_NOT_SEEDED ); + } + + CATCH: + if ( locked ) { TRY( UNLOCK() ); } + EXCEP_RET; +} + +static +int yarrow_input_maybe_locking( Yarrow_CTX* y, unsigned source_id, + const void* sample, + size_t size, size_t entropy_bits, + int do_lock ) +{ + EXCEP_DECL; + int ret; + int locked = 0; + Source* source; + size_t new_entropy; + size_t estimate; + + if (do_lock) { + TRY( LOCK() ); + locked = 1; + } + k5_assert_locked(&krb5int_yarrow_lock); + + if (!y) { THROW( YARROW_BAD_ARG ); } + + if (source_id >= y->num_sources) { THROW( YARROW_BAD_SOURCE ); } + + source = &y->source[source_id]; + + if(source->pool != YARROW_FAST_POOL && source->pool != YARROW_SLOW_POOL) + { + THROW( YARROW_BAD_SOURCE ); + } + + /* hash in the sample */ + + HASH_Update(&y->pool[source->pool], (const void*)sample, size); + + /* only update entropy estimate if pool is not full */ + + if ( (source->pool == YARROW_FAST_POOL && + source->entropy[source->pool] < y->fast_thresh) || + (source->pool == YARROW_SLOW_POOL && + source->entropy[source->pool] < y->slow_thresh) ) + { + new_entropy = min(entropy_bits, size * 8 * YARROW_ENTROPY_MULTIPLIER); + if (source->estimator) + { + estimate = source->estimator(sample, size); + new_entropy = min(new_entropy, estimate); + } + source->entropy[source->pool] += new_entropy; + if ( source->entropy[source->pool] > YARROW_POOL_SIZE ) + { + source->entropy[source->pool] = YARROW_POOL_SIZE; + } + + if (source->pool == YARROW_FAST_POOL) + { + if (source->entropy[YARROW_FAST_POOL] >= y->fast_thresh) + { + ret = yarrow_reseed_locked(y, YARROW_FAST_POOL); + if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) + { + THROW( ret ); + } + } + } + else + { + if (!source->reached_slow_thresh && + source->entropy[YARROW_SLOW_POOL] >= y->slow_thresh) + { + source->reached_slow_thresh = 1; + y->slow_k_of_n++; + if (y->slow_k_of_n >= y->slow_k_of_n_thresh) + { + y->slow_k_of_n = 0; + ret = yarrow_reseed_locked(y, YARROW_SLOW_POOL); + if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) + { + THROW( ret ); + } + } + } + } + } + + /* put samples in alternate pools */ + + source->pool = (source->pool + 1) % 2; + + CATCH: + if ( locked ) { TRY( UNLOCK() ); } + EXCEP_RET; +} + +YARROW_DLL +int krb5int_yarrow_input( Yarrow_CTX* y, unsigned source_id, + const void* sample, + size_t size, size_t entropy_bits ) +{ + return yarrow_input_maybe_locking(y, source_id, sample, size, + entropy_bits, 1); +} + +static int +yarrow_input_locked( Yarrow_CTX* y, unsigned source_id, + const void *sample, + size_t size, size_t entropy_bits ) +{ + return yarrow_input_maybe_locking(y, source_id, sample, size, + entropy_bits, 0); +} + +YARROW_DLL +int krb5int_yarrow_new_source(Yarrow_CTX* y, unsigned* source_id) +{ + EXCEP_DECL; + int locked = 0; + Source* source; + + if (!y) { THROW( YARROW_BAD_ARG ); } + + TRY( LOCK() ); + locked = 1; + + if (y->num_sources + 1 > YARROW_MAX_SOURCES) + { + THROW( YARROW_TOO_MANY_SOURCES ); + } + + *source_id = y->num_sources; + + source = &y->source[*source_id]; + + source->pool = YARROW_FAST_POOL; + source->entropy[YARROW_FAST_POOL] = 0; + source->entropy[YARROW_SLOW_POOL] = 0; + source->reached_slow_thresh = 0; + source->estimator = 0; + + y->num_sources++; +CATCH: + if ( locked ) { TRY( UNLOCK() ); } + EXCEP_RET; +} + +int krb5int_yarrow_register_source_estimator(Yarrow_CTX* y, unsigned source_id, + estimator_fn* fptr) +{ + EXCEP_DECL; + Source* source; + + if (!y) { THROW( YARROW_BAD_ARG ); } + if (source_id >= y->num_sources) { THROW( YARROW_BAD_SOURCE ); } + + source = &y->source[source_id]; + + source->estimator = fptr; + + CATCH: + EXCEP_RET; +} + +static int krb5int_yarrow_output_Block( Yarrow_CTX* y, void* out ) +{ + EXCEP_DECL; + + if (!y || !out) { THROW( YARROW_BAD_ARG ); } + + TRACE( printf( "OUT," ); ); + + /* perform a gate function after Pg outputs */ + + y->out_count++; + if (y->out_count >= y->Pg) + { + y->out_count = 0; + TRY( yarrow_gate_locked( y ) ); + + /* require new seed after reaching gates_limit */ + + y->gate_count++; + if ( y->gate_count >= y->gates_limit ) + { + y->gate_count = 0; + + /* not defined whether to do slow or fast reseed */ + + TRACE( printf( "OUTPUT LIMIT REACHED," ); ); + + TRY( yarrow_reseed_locked( y, YARROW_SLOW_POOL ) ); + } + } + + /* C <- (C + 1) mod 2^n */ + + block_increment( y->C, CIPHER_BLOCK_SIZE ); + + /* R <- E_k(C) */ + + TRY ( krb5int_yarrow_cipher_encrypt_block ( &y->cipher, y->C, out )); + +#if defined(YARROW_DEBUG) + printf("===\n"); + hex_print( stdout, "output: C", y->C, CIPHER_BLOCK_SIZE ); + hex_print( stdout, "output: K", y->K, CIPHER_KEY_SIZE ); + hex_print( stdout, "output: O", out, CIPHER_BLOCK_SIZE ); +#endif + CATCH: + EXCEP_RET; +} + +YARROW_DLL +int krb5int_yarrow_status( Yarrow_CTX* y, int *num_sources, unsigned *source_id, + size_t *entropy_bits, size_t *entropy_max ) +{ + EXCEP_DECL; + int num = y->slow_k_of_n_thresh; + int source = -1; + int emax = y->slow_thresh; + size_t entropy = 0; + unsigned i; + + if (!y) { THROW( YARROW_BAD_ARG ); } + TRY( Yarrow_detect_fork( y ) ); + + if (num_sources) { *num_sources = num; } + if (source_id) { *source_id = -1; } + if (entropy_bits) { *entropy_bits = 0; } + if (entropy_max) { *entropy_max = emax; } + + if (y->seeded) + { + if (num_sources) { *num_sources = 0; } + if (entropy_bits) { *entropy_bits = emax; } + THROW( YARROW_OK ); + } + + for (i = 0; i < y->num_sources; i++) + { + if (y->source[i].entropy[YARROW_SLOW_POOL] >= y->slow_thresh) + { + num--; + } + else if (y->source[i].entropy[YARROW_SLOW_POOL] > entropy) + { + source = i; + entropy = y->source[i].entropy[YARROW_SLOW_POOL]; + } + } + + if (num_sources) { *num_sources = num; } + if (source_id) { *source_id = source; } + if (entropy_bits) { *entropy_bits = entropy; } + THROW( YARROW_NOT_SEEDED ); + + CATCH: + EXCEP_RET; +} + +static int yarrow_output_locked(Yarrow_CTX*, void*, size_t); + +YARROW_DLL +int krb5int_yarrow_output( Yarrow_CTX* y, void* out, size_t size ) +{ + EXCEP_DECL; + TRY( LOCK() ); + TRY( yarrow_output_locked(y, out, size)); +CATCH: + UNLOCK(); + EXCEP_RET; +} + +static +int yarrow_output_locked( Yarrow_CTX* y, void* out, size_t size ) +{ + EXCEP_DECL; + size_t left; + char* outp; + size_t use; + + if (!y || !out) { THROW( YARROW_BAD_ARG ); } + TRY( Yarrow_detect_fork( y ) ); + + if (!y->seeded) { THROW( YARROW_NOT_SEEDED ); } + + left = size; + outp = out; + + if (y->out_left > 0) + { + use = min(left, y->out_left); + mem_copy(outp, y->out + CIPHER_BLOCK_SIZE - y->out_left, use); + left -= use; + y->out_left -= use; + outp += use; + } + + for ( ; + left >= CIPHER_BLOCK_SIZE; + left -= CIPHER_BLOCK_SIZE, outp += CIPHER_BLOCK_SIZE) + { + TRY( krb5int_yarrow_output_Block(y, outp) ); + } + + if (left > 0) + { + TRY( krb5int_yarrow_output_Block(y, y->out) ); + mem_copy(outp, y->out, left); + y->out_left = CIPHER_BLOCK_SIZE - left; + } + + CATCH: + EXCEP_RET; +} + +static int yarrow_gate_locked(Yarrow_CTX* y) +{ + EXCEP_DECL; + byte new_K[CIPHER_KEY_SIZE]; + + if (!y) { THROW( YARROW_BAD_ARG ); } + + TRACE( printf( "GATE[" ); ); + + /* K <- Next k bits of PRNG output */ + + TRY( yarrow_output_locked(y, new_K, CIPHER_KEY_SIZE) ); + mem_copy(y->K, new_K, CIPHER_KEY_SIZE); + + /* need to resetup the key schedule as the key has changed */ + + TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); + + CATCH: + TRACE( printf( "]," ); ); + mem_zero(new_K, sizeof(new_K)); + EXCEP_RET; +} + +int krb5int_yarrow_gate(Yarrow_CTX* y) +{ + EXCEP_DECL; + byte new_K[CIPHER_KEY_SIZE]; + + if (!y) { THROW( YARROW_BAD_ARG ); } + + TRACE( printf( "GATE[" ); ); + + /* K <- Next k bits of PRNG output */ + + TRY( krb5int_yarrow_output(y, new_K, CIPHER_KEY_SIZE) ); + mem_copy(y->K, new_K, CIPHER_KEY_SIZE); + + /* need to resetup the key schedule as the key has changed */ + + TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); + + CATCH: + TRACE( printf( "]," ); ); + mem_zero(new_K, sizeof(new_K)); + EXCEP_RET; +} + +#if defined( YARROW_SAVE_STATE ) +static int Yarrow_Load_State( Yarrow_CTX *y ) +{ + EXCEP_DECL; + Yarrow_STATE state; + + if ( !y ) { THROW( YARROW_BAD_ARG ); } + + if ( y->entropyfile ) + { + TRY( STATE_Load(y->entropyfile, &state) ); + TRACE( printf( "LOAD STATE," ); ); + +#if defined( YARROW_DEBUG ) + hex_print( stderr, "state.load", state.seed, sizeof(state.seed)); +#endif + + /* what to do here is not defined by the Yarrow paper */ + /* this is a place holder until we get some clarification */ + + HASH_Update( &y->pool[YARROW_FAST_POOL], + state.seed, sizeof(state.seed) ); + + Yarrow_Make_Seeded( y ); + + TRY( krb5int_yarrow_reseed(y, YARROW_FAST_POOL) ); + } + CATCH: + mem_zero(state.seed, sizeof(state.seed)); + EXCEP_RET; +} + +static int Yarrow_Save_State( Yarrow_CTX *y ) +{ + EXCEP_DECL; + Yarrow_STATE state; + + if ( !y ) { THROW( YARROW_BAD_ARG ); } + + if ( y->entropyfile && y->seeded ) + { + TRACE( printf( "SAVE STATE[" ); ); + TRY( krb5int_yarrow_output( y, state.seed, sizeof(state.seed) ) ); + TRY( STATE_Save(y->entropyfile, &state) ); + } + y->saved = 1; +# if defined(YARROW_DEBUG) + hex_print(stdout, "state.save", state.seed, sizeof(state.seed)); +# endif + + CATCH: + TRACE( printf( "]," ); ); + mem_zero(state.seed, sizeof(state.seed)); + EXCEP_RET; +} + +#endif + +static int yarrow_reseed_locked(Yarrow_CTX* y, int pool) +{ + EXCEP_DECL; + HASH_CTX* fast_pool; + HASH_CTX* slow_pool; + byte digest[HASH_DIGEST_SIZE]; + HASH_CTX hash; + byte v_0[HASH_DIGEST_SIZE]; + byte v_i[HASH_DIGEST_SIZE]; + krb5_ui_4 big_endian_int32; + COUNTER i; + + k5_assert_locked(&krb5int_yarrow_lock); + if (!y) { THROW( YARROW_BAD_ARG ); } + fast_pool = &y->pool[YARROW_FAST_POOL]; + slow_pool = &y->pool[YARROW_SLOW_POOL]; + if( pool != YARROW_FAST_POOL && pool != YARROW_SLOW_POOL ) + { + THROW( YARROW_BAD_ARG ); + } + + TRACE( printf( "%s RESEED,", + pool == YARROW_SLOW_POOL ? "SLOW" : "FAST" ); ); + + if (pool == YARROW_SLOW_POOL) + { + /* SLOW RESEED */ + + /* feed hash of slow pool into the fast pool */ + + + HASH_Final(slow_pool, digest); + + /* Each pool contains the running hash of all inputs fed into it + * since it was last used to carry out a reseed -- this implies + * that the pool must be reinitialized after a reseed + */ + + HASH_Init(slow_pool); /* reinitialize slow pool */ + HASH_Update(fast_pool, digest, sizeof(digest)); + + if (y->seeded == 0) + { + Yarrow_Make_Seeded( y ); + } + } + + /* step 1. v_0 <- hash of all inputs into fast pool */ + + HASH_Final(fast_pool, &v_0); + HASH_Init(fast_pool); /* reinitialize fast pool */ + + /* v_i <- v_0 */ + + mem_copy( v_i, v_0, sizeof(v_0) ); + + /* step 2. v_i = h(v_{i-1}|v_0|i) for i = 1,..,Pt */ + + /* note: this code has to work for Pt = 0 also */ + + for ( i = 0; i < y->Pt[pool]; i++ ) + { + HASH_Init(&hash); + HASH_Update(&hash, v_i, sizeof(v_i)); + HASH_Update(&hash, v_0, sizeof(v_0)); + big_endian_int32 = make_big_endian32(0); /* MS word */ + HASH_Update(&hash, &big_endian_int32, sizeof(krb5_ui_4)); + big_endian_int32 = make_big_endian32(i & 0xFFFFFFFF); /* LS word */ + HASH_Update(&hash, &big_endian_int32, sizeof(krb5_ui_4)); + HASH_Final(&hash, &v_i); + } + + /* step3. K = h'(h(v_Pt|K)) */ + + /* t = h(v_Pt|K) */ + + HASH_Init(&hash); + HASH_Update(&hash, v_i, sizeof(v_i)); + HASH_Update(&hash, y->K, sizeof(y->K)); + HASH_Final(&hash, v_i); + +#if defined(YARROW_DEBUG) + hex_print(stdout, "old K", y->K, sizeof(y->K)); +#endif + /* K <- h'(t) */ + + TRY( krb5int_yarrow_stretch(v_i, HASH_DIGEST_SIZE, y->K, CIPHER_KEY_SIZE) ); + + /* need to resetup the key schedule as the key has changed */ + + TRY(krb5int_yarrow_cipher_init(&y->cipher, y->K)); + +#if defined(YARROW_DEBUG) + hex_print(stdout, "new K", y->K, sizeof(y->K)); +#endif + + /* step 4. C <- E_k(0) */ + +#if defined(YARROW_DEBUG) + hex_print(stdout, "old C", y->C, sizeof(y->C)); +#endif + TRY (krb5int_yarrow_cipher_encrypt_block (&y->cipher, zero_block, y->C)); +#if defined(YARROW_DEBUG) + hex_print(stdout, "new C", y->C, sizeof(y->C)); +#endif + + /* discard part output from previous key */ + + y->out_left = 0; + + /* step 5. Reset all entropy estimate accumulators of the entropy + * accumulator to zero + */ + + for (i = 0; i < y->num_sources; i++) + { + y->source[i].entropy[pool] = 0; + if (pool == YARROW_SLOW_POOL) + { + /* if this is a slow reseed, reset the fast pool entropy + * accumulator also + */ + y->source[i].entropy[YARROW_FAST_POOL] = 0; + y->source[i].reached_slow_thresh = 0; + } + } + + /* step 7. If a seed file is in use, the next 2k bits of output + * are written to the seed file + */ + +#if defined( YARROW_SAVE_STATE ) + if ( y->seeded && y->entropyfile ) + { + TRY( Yarrow_Save_State( y ) ); + } +#endif + + CATCH: + /* step 6. Wipe the memory of all intermediate values + * + */ + + mem_zero( digest, sizeof(digest) ); + mem_zero( &hash, sizeof(hash) ); + mem_zero( v_0, sizeof(v_0) ); + mem_zero( v_i, sizeof(v_i) ); + + EXCEP_RET; +} +int krb5int_yarrow_reseed(Yarrow_CTX* y, int pool) +{ + int r; + LOCK(); + r = yarrow_reseed_locked(y, pool); + UNLOCK(); + return r; +} + +int krb5int_yarrow_stretch(const byte* m, size_t size, byte* out, size_t out_size) +{ + EXCEP_DECL; + const byte* s_i; + byte* outp; + int left; + unsigned int use; + HASH_CTX hash, save; + byte digest[HASH_DIGEST_SIZE]; + + if (m == NULL || size == 0 || out == NULL || out_size == 0) + { + THROW( YARROW_BAD_ARG ); + } + + /* + * s_0 = m + * s_1 = h(s_0 | ... | s_{i-1}) + * + * h'(m, k) = first k bits of (s_0 | s_1 | ...) + * + */ + + outp = out; + left = out_size; + + use = min(out_size, size); + mem_copy(outp, m, use); /* get k bits or as many as available */ + + s_i = (const byte*)m; /* pointer to s0 = m */ + outp += use; + left -= use; + + HASH_Init(&hash); + for ( ; + left > 0; + left -= HASH_DIGEST_SIZE) + { + HASH_Update(&hash, s_i, use); + + /* have to save hash state to one side as HASH_final changes state */ + + mem_copy(&save, &hash, sizeof(hash)); + HASH_Final(&hash, digest); + + use = min(HASH_DIGEST_SIZE, left); + mem_copy(outp, digest, use); + + /* put state back for next time */ + + mem_copy(&hash, &save, sizeof(hash)); + + s_i = outp; /* retain pointer to s_i */ + outp += use; + } + + CATCH: + mem_zero(&hash, sizeof(hash)); + mem_zero(digest, sizeof(digest)); + + EXCEP_RET; +} + +static void block_increment(void* block, const int sz) +{ + byte* b = block; + int i; + + for (i = sz-1; (++b[i]) == 0 && i > 0; i--) + { + ; /* nothing */ + } +} + +YARROW_DLL +int krb5int_yarrow_final(Yarrow_CTX* y) +{ + EXCEP_DECL; + int locked = 0; + + if (!y) { THROW( YARROW_BAD_ARG ); } + TRY( LOCK() ); + locked = 1; + +#if defined( YARROW_SAVE_STATE ) + if ( y->seeded && y->entropyfile ) + { + TRY( Yarrow_Save_State( y ) ); + } +#endif + + CATCH: + if ( y ) + { + krb5int_yarrow_cipher_final(&y->cipher); + mem_zero( y, sizeof(Yarrow_CTX) ); + } + if ( locked ) { TRY( UNLOCK() ); } + EXCEP_RET; +} + +YARROW_DLL +const char* krb5int_yarrow_str_error( int err ) +{ + err = 1-err; + if ( err < 0 || err >= sizeof( yarrow_str_error ) / sizeof( char* ) ) + { + err = 1-YARROW_FAIL; + } + return yarrow_str_error[ err ]; +} + +#if defined(YARROW_DEBUG) +static void hex_print(FILE* f, const char* var, void* data, size_t size) +{ + const char* conv = "0123456789abcdef"; + size_t i; + char* p = (char*) data; + char c, d; + + fprintf(f, var); + fprintf(f, " = "); + for (i = 0; i < size; i++) + { + c = conv[(p[i] >> 4) & 0xf]; + d = conv[p[i] & 0xf]; + fprintf(f, "%c%c", c, d); + } + fprintf(f, "\n"); +} +#endif diff --git a/src/lib/crypto/krb/yarrow/yarrow.h b/src/lib/crypto/krb/yarrow/yarrow.h new file mode 100644 index 000000000..7e1fe1442 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yarrow.h @@ -0,0 +1,186 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YARROW_H +#define YARROW_H + +#ifdef HAVE_UNISTD_H +#define YARROW_DETECT_FORK +#include +#endif +#define YARROW_NO_MATHLIB + +#include "ytypes.h" +#include "yhash.h" +#include "ycipher.h" + +/* These error codes are returned by the functions below. */ + +#define YARROW_OK 1 /* All is well */ +#define YARROW_FAIL 0 /* generic failure */ +#define YARROW_NOT_INIT -1 /* YarrowInit hasn't been called */ +#define YARROW_ALREADY_INIT -2 /* YarrowInit has already been called */ +#define YARROW_NO_DRIVER -3 /* driver doesn't exist */ +#define YARROW_CANT_OPEN -4 /* can't open driver */ +#define YARROW_BAD_SOURCE -5 /* invalid source id */ +#define YARROW_TOO_MANY_SOURCES -6 /* can't create any more source ids */ +#define YARROW_BAD_ARG -7 /* invalid argument */ +#define YARROW_ACCESS -8 /* insufficient privileges */ +#define YARROW_NOMEM -9 /* out of memory */ +#define YARROW_NORSRC -10 /* a resource is exhausted */ +#define YARROW_NOT_SEEDED -11 /* not enough entropy to generate output */ +#define YARROW_LOCKING -12 /* locking error */ +#define YARROW_NO_STATE -13 /* there is no state to load */ +#define YARROW_STATE_ERROR -14 /* error with state load or save */ +#define YARROW_NOT_IMPL -15 /* not implemented */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Yarrow implementation and configuration parameters */ + +/* pool identification */ +#define YARROW_FAST_POOL 0 +#define YARROW_SLOW_POOL 1 + +#define YARROW_MAX_SOURCES 20 +#define YARROW_ENTROPY_MULTIPLIER 0.5 + +#define YARROW_POOL_SIZE (HASH_DIGEST_SIZE*8) + +#define YARROW_OUTPUTS_PER_GATE 10 /* Pg */ +#define YARROW_FAST_PT 10 +#define YARROW_SLOW_PT 100 + +/* thresholds to use once seeded */ + +#define YARROW_FAST_THRESH 100 +#define YARROW_SLOW_THRESH 160 +#define YARROW_K_OF_N_THRESH 2 + +/* The Yarrow paper does not specify when the initial seed should be + considered complete. Use the same conditions as a slow reseed */ + +#define YARROW_FAST_INIT_THRESH YARROW_FAST_THRESH +#define YARROW_SLOW_INIT_THRESH YARROW_SLOW_THRESH +#define YARROW_K_OF_N_INIT_THRESH YARROW_K_OF_N_THRESH + +/* sanity checks */ + +#if YARROW_FAST_THRESH > YARROW_POOL_SIZE +error "can't have higher YARROW_FAST_THRESH than pool size" +#endif + +#if YARROW_SLOW_THRESH > YARROW_POOL_SIZE +error "can't have higher YARROW_SLOW_THRESH than pool size" +#endif + +#if YARROW_FAST_INIT_THRESH > YARROW_POOL_SIZE +error "can't have higher YARROW_FAST_INIT_THRESH than pool size" +#endif + +#if YARROW_SLOW_INIT_THRESH > YARROW_POOL_SIZE +error "can't have higher YARROW_SLOW_INIT_THRESH than pool size" +#endif + +typedef size_t estimator_fn(const void* sample, size_t size); + +typedef struct +{ + int pool; + size_t entropy[2]; + int reached_slow_thresh; + estimator_fn* estimator; +} Source; + +typedef struct +{ + /* state */ + int seeded; + int saved; +#if defined( YARROW_DETECT_FORK ) + int pid; +#endif + Source source[YARROW_MAX_SOURCES]; + unsigned num_sources; + HASH_CTX pool[2]; + byte out[CIPHER_BLOCK_SIZE]; + unsigned out_left; + COUNTER out_count; + COUNTER gate_count; + COUNTER gates_limit; + byte C[CIPHER_BLOCK_SIZE]; + CIPHER_CTX cipher; + byte K[CIPHER_KEY_SIZE]; + + const char *entropyfile; + + /* parameters */ + COUNTER Pt[2]; + COUNTER Pg; + int slow_k_of_n; + + /* current thresholds */ + int slow_thresh; + int fast_thresh; + int slow_k_of_n_thresh; +} Yarrow_CTX; + +# define YARROW_DLL + + +YARROW_DLL +int krb5int_yarrow_init( Yarrow_CTX* y, const char *filename ); + + +YARROW_DLL +int krb5int_yarrow_input( Yarrow_CTX* y, unsigned source_id, + const void* sample, + size_t size, size_t entropy_bits ); + +YARROW_DLL +int krb5int_yarrow_status( Yarrow_CTX* y, int *num_sources, unsigned *source_id, + size_t *entropy_bits, size_t *entropy_max ); + +YARROW_DLL +int krb5int_yarrow_output( Yarrow_CTX* y, void* out, size_t size ); + +YARROW_DLL +int krb5int_yarrow_new_source( Yarrow_CTX* y, unsigned* source_id ); + +YARROW_DLL +int krb5int_yarrow_register_source_estimator( Yarrow_CTX* y, unsigned source_id, + estimator_fn* fptr ); + +YARROW_DLL +int krb5int_yarrow_stretch( const byte* m, size_t size, byte* out, size_t out_size ); + +YARROW_DLL +int krb5int_yarrow_reseed( Yarrow_CTX* y, int pool ); + +YARROW_DLL +int krb5int_yarrow_gate( Yarrow_CTX* y ); + +YARROW_DLL +int krb5int_yarrow_final( Yarrow_CTX* y ); + +YARROW_DLL +const char* krb5int_yarrow_str_error( int ); + + +# define mem_zero(p, n) memset((p), 0, (n)) +# define mem_copy(d, s, n) memcpy((d), (s), (n)) + + +#if !defined(WIN32) +# define min(x, y) ((x) < (y) ? (x) : (y)) +# define max(x, y) ((x) > (y) ? (x) : (y)) +#endif + + + +#ifdef __cplusplus +} +#endif + +#endif /* YARROW_H */ diff --git a/src/lib/crypto/krb/yarrow/yarrow.man b/src/lib/crypto/krb/yarrow/yarrow.man new file mode 100644 index 000000000..a65b4e05c --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yarrow.man @@ -0,0 +1,315 @@ +.rn '' }` +''' $RCSfile$$Revision$$Date$ +''' +''' $Log$ +''' Revision 1.1 2001/11/08 21:51:57 hartmans +''' Add Yarrow from http://www.zeroknowledge.com/. +''' +''' This is version 0.1 of their Yarrow implementation. I have flattened the distribution, +''' copying files in the src directory directly into this directory. +''' +''' Revision 1.1.2.1 2000/08/13 21:11:24 adamb +''' added some more assumptions +''' included yarrow.man derived from yarrow.pod with pod2man +''' +''' +.de Sh +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp +.if t .sp .5v +.if n .sp +.. +.de Ip +.br +.ie \\n(.$>=3 .ne \\$3 +.el .ne 3 +.IP "\\$1" \\$2 +.. +.de Vb +.ft CW +.nf +.ne \\$1 +.. +.de Ve +.ft R + +.fi +.. +''' +''' +''' Set up \*(-- to give an unbreakable dash; +''' string Tr holds user defined translation string. +''' Bell System Logo is used as a dummy character. +''' +.tr \(*W-|\(bv\*(Tr +.ie n \{\ +.ds -- \(*W- +.ds PI pi +.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +.ds L" "" +.ds R" "" +''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of +''' \*(L" and \*(R", except that they are used on ".xx" lines, +''' such as .IP and .SH, which do another additional levels of +''' double-quote interpretation +.ds M" """ +.ds S" """ +.ds N" """"" +.ds T" """"" +.ds L' ' +.ds R' ' +.ds M' ' +.ds S' ' +.ds N' ' +.ds T' ' +'br\} +.el\{\ +.ds -- \(em\| +.tr \*(Tr +.ds L" `` +.ds R" '' +.ds M" `` +.ds S" '' +.ds N" `` +.ds T" '' +.ds L' ` +.ds R' ' +.ds M' ` +.ds S' ' +.ds N' ` +.ds T' ' +.ds PI \(*p +'br\} +.\" If the F register is turned on, we'll generate +.\" index entries out stderr for the following things: +.\" TH Title +.\" SH Header +.\" Sh Subsection +.\" Ip Item +.\" X<> Xref (embedded +.\" Of course, you have to process the output yourself +.\" in some meaninful fashion. +.if \nF \{ +.de IX +.tm Index:\\$1\t\\n%\t"\\$2" +.. +.nr % 0 +.rr F +.\} +.TH YARROW 1 "perl 5.005, patch 03" "13/Aug/2000" "User Contributed Perl Documentation" +.UC +.if n .hy 0 +.if n .na +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.de CQ \" put $1 in typewriter font +.ft CW +'if n "\c +'if t \\&\\$1\c +'if n \\&\\$1\c +'if n \&" +\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 +'.ft R +.. +.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 +. \" AM - accent mark definitions +.bd B 3 +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds ? ? +. ds ! ! +. ds / +. ds q +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' +. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] +.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' +.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' +.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +.ds oe o\h'-(\w'o'u*4/10)'e +.ds Oe O\h'-(\w'O'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds v \h'-1'\o'\(aa\(ga' +. ds _ \h'-1'^ +. ds . \h'-1'. +. ds 3 3 +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +. ds oe oe +. ds Oe OE +.\} +.rm #[ #] #H #V #F C +.SH "NAME" +Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final \- cryptographic pseudo-random number generator +.SH "SYNOPSIS" +int \fIYarrow_Init\fR\|(Yarrow_CTX *y, const char *filename); +.PP +int \fIYarrow_New_Source\fR\|(Yarrow_CTX* y, unsigned* source_id); +.PP +int \fIYarrow_Poll\fR\|(Yarrow_CTX *y, unsigned source_id) +.PP +int \fIYarrow_Input\fR\|( Yarrow_CTX* y, unsigned source_id, + const void* sample, size_t size, + size_t entropy_bits); +.PP +int \fIYarrow_Status\fR\|(Yarrow_CTX* y, int *num_sources, + unsigned *source_id, size_t *entropy_bits, + size_t *entropy_max); +.PP +int \fIYarrow_Output\fR\|(Yarrow_CTX* y, void* out, size_t size); +.PP +int \fIYarrow_Register_Source_Estimator\fR\|(Yarrow_CTX* y, + unsigned source_id, + size_t (*estimator)(const void* sample, + size_t size)); +.PP +int \fIYarrow_Final\fR\|(Yarrow_CTX* y); +.SH "DESCRIPTION" +\fIYarrow_Init()\fR initializes a \fBYarrow_CTX\fR structure. \fBfilename\fR can +be NULL, or the path to a seed file that Yarrow will use to store the +PRNG state for use in later sessions. Returns \fBYARROW_OK\fR if the +PRNG is seeded on exit, or \fBYARROW_NOT_SEEDED\fR if the PRNG is not yet +seeded. +.PP +\fIYarrow_New_Source()\fR associates entropy sources such as keyboard input, +mouse movements and other unpredictable events with a +\fBYarrow_CTX\fR. The function assigns a unique number to the new source, +and places it in \fBsource_id\fR. +.PP +\fIYarrow_Poll()\fR gathers entropy from the state of the machine and adds +it to the source \fBsource_id\fR. The source has to be allocated by the +user with Yarrow_New_Source. Returns \fBYARROW_OK\fR if the PRNG is +seeded on exit, or \fBYARROW_NOT_SEEDED\fR if the PRNG is not yet seeded. +.PP +\fIYarrow_Input()\fR is used to add randomness from the source \fBsource_id\fR +to the PRNG. It reads \fBsize\fR bytes at the address \fBsample\fR. An +estimate of the entropy in bits contained in the sample must be +specified as \fBentropy_bits\fR. +.PP +\fIYarrow_Status()\fR returns \fBYARROW_OK\fR if the PRNG has enough entropy to +produce output, and \fBYARROW_NOT_SEEDED\fR if calls to \fIYarrow_Output()\fR +would fail. +.PP +If num_sources is not NULL, the number of entropy sources that still +need to be seeded is returned in \fB*num_sources\fR. +.PP +If source_id is not NULL, the entropy source that is closest to its +threshold is returned in \fB*source_id\fR. \fB*source_id\fR is set to \-1 if +no sources have either reached their threshold or not collected any +entropy yet. +.PP +If not NULL, \fB*entropy_bits\fR is set to the current number of bits for +the source \fB*source_id\fR, and \fB*entropy_max\fR to the threshold. +.PP +\fIYarrow_Output()\fR generates \fBsize\fR bytes of cryptographically strong +pseudo-random output and places them at \fBout\fR. The return value must +always be checked. If an error occurs, the PRNG may produce +predictable data or no output at all. +.PP +\fIYarrow_Register_Source_Estimator()\fR registers an entropy estimator +for \fBsource_id\fR. An entropy estimator is a function that tries to +estimate the entropy in a sample and returns the entropy in bits +in order to detect abnormal situations in which the samples have a very +low entropy. +.PP +\fIYarrow_Final()\fR writes the PRNG state to the seed file and erases it +from memory. +.SH "RETURN VALUES" +All functions return \fBYARROW_OK\fR on success. Error conditions are reported +as follows: +.PP +.Vb 16 +\& YARROW_FAIL generic failure +\& YARROW_NOT_INIT YarrowInit() hasn't been called +\& YARROW_ALREADY_INIT YarrowInit() has already been called +\& YARROW_NO_DRIVER driver doesn't exist +\& YARROW_CANT_OPEN can't open driver +\& YARROW_BAD_SOURCE invalid source id +\& YARROW_TOO_MANY_SOURCES can't create any more source IDs +\& YARROW_BAD_ARG invalid argument +\& YARROW_ACCESS insufficient privileges +\& YARROW_NOMEM out of memory +\& YARROW_NORSRC a resource (apart from memory) is exhausted +\& YARROW_NOT_SEEDED not enough entropy to generate output +\& YARROW_LOCKING locking error +\& YARROW_NO_STATE there is no state to load +\& YARROW_STATE_ERROR error with state load or save +\& YARROW_NOT_IMPL not implemented +.Ve +.SH "AUTHORS" +Yarrow was designed by John Kelsey, Bruce Schneier and Niels Ferguson +of Counterpane Systems. This implementation is (C) 2000 by +Zero-Knowledge Systems Inc. + +.rn }` '' +.IX Title "YARROW 1" +.IX Name "Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final - cryptographic pseudo-random number generator" + +.IX Header "NAME" + +.IX Header "SYNOPSIS" + +.IX Header "DESCRIPTION" + +.IX Header "RETURN VALUES" + +.IX Header "AUTHORS" + diff --git a/src/lib/crypto/krb/yarrow/yarrow.pod b/src/lib/crypto/krb/yarrow/yarrow.pod new file mode 100644 index 000000000..7892ebbe6 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yarrow.pod @@ -0,0 +1,112 @@ +=pod + +=head1 NAME + +Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final - cryptographic pseudo-random number generator + +=head1 SYNOPSIS + +int Yarrow_Init(Yarrow_CTX *y, const char *filename); + +int Yarrow_New_Source(Yarrow_CTX* y, unsigned* source_id); + +int Yarrow_Poll(Yarrow_CTX *y, unsigned source_id) + +int Yarrow_Input( Yarrow_CTX* y, unsigned source_id, + const void* sample, size_t size, + size_t entropy_bits); + +int Yarrow_Status(Yarrow_CTX* y, int *num_sources, + unsigned *source_id, size_t *entropy_bits, + size_t *entropy_max); + +int Yarrow_Output(Yarrow_CTX* y, void* out, size_t size); + +int Yarrow_Register_Source_Estimator(Yarrow_CTX* y, + unsigned source_id, + size_t (*estimator)(const void* sample, + size_t size)); + +int Yarrow_Final(Yarrow_CTX* y); + +=head1 DESCRIPTION + +Yarrow_Init() initializes a B structure. B can +be NULL, or the path to a seed file that Yarrow will use to store the +PRNG state for use in later sessions. Returns B if the +PRNG is seeded on exit, or B if the PRNG is not yet +seeded. + +Yarrow_New_Source() associates entropy sources such as keyboard input, +mouse movements and other unpredictable events with a +B. The function assigns a unique number to the new source, +and places it in B. + +Yarrow_Poll() gathers entropy from the state of the machine and adds +it to the source B. The source has to be allocated by the +user with Yarrow_New_Source. Returns B if the PRNG is +seeded on exit, or B if the PRNG is not yet seeded. + +Yarrow_Input() is used to add randomness from the source B +to the PRNG. It reads B bytes at the address B. An +estimate of the entropy in bits contained in the sample must be +specified as B. + +Yarrow_Status() returns B if the PRNG has enough entropy to +produce output, and B if calls to Yarrow_Output() +would fail. + +If num_sources is not NULL, the number of entropy sources that still +need to be seeded is returned in B<*num_sources>. + +If source_id is not NULL, the entropy source that is closest to its +threshold is returned in B<*source_id>. B<*source_id> is set to -1 if +no sources have either reached their threshold or not collected any +entropy yet. + +If not NULL, B<*entropy_bits> is set to the current number of bits for +the source B<*source_id>, and B<*entropy_max> to the threshold. + +Yarrow_Output() generates B bytes of cryptographically strong +pseudo-random output and places them at B. The return value must +always be checked. If an error occurs, the PRNG may produce +predictable data or no output at all. + +Yarrow_Register_Source_Estimator() registers an entropy estimator +for B. An entropy estimator is a function that tries to +estimate the entropy in a sample and returns the entropy in bits +in order to detect abnormal situations in which the samples have a very +low entropy. + +Yarrow_Final() writes the PRNG state to the seed file and erases it +from memory. + +=head1 RETURN VALUES + +All functions return B on success. Error conditions are reported +as follows: + + YARROW_FAIL generic failure + YARROW_NOT_INIT YarrowInit() hasn't been called + YARROW_ALREADY_INIT YarrowInit() has already been called + YARROW_NO_DRIVER driver doesn't exist + YARROW_CANT_OPEN can't open driver + YARROW_BAD_SOURCE invalid source id + YARROW_TOO_MANY_SOURCES can't create any more source IDs + YARROW_BAD_ARG invalid argument + YARROW_ACCESS insufficient privileges + YARROW_NOMEM out of memory + YARROW_NORSRC a resource (apart from memory) is exhausted + YARROW_NOT_SEEDED not enough entropy to generate output + YARROW_LOCKING locking error + YARROW_NO_STATE there is no state to load + YARROW_STATE_ERROR error with state load or save + YARROW_NOT_IMPL not implemented + +=head1 AUTHORS + +Yarrow was designed by John Kelsey, Bruce Schneier and Niels Ferguson +of Counterpane Systems. This implementation is (C) 2000 by +Zero-Knowledge Systems Inc. + +=cut diff --git a/src/lib/crypto/krb/yarrow/ycipher.c b/src/lib/crypto/krb/yarrow/ycipher.c new file mode 100644 index 000000000..2af410440 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ycipher.c @@ -0,0 +1,96 @@ +/* + * lib/crypto/yarrow/ycipher.c + * + * Copyright (C) 2001, 2007 by the Massachusetts Institute of Technology. + * All rights reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, 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, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. Furthermore if you modify this software you must label + * your software as modified software and not distribute it in such a + * fashion that it might be confused with the original M.I.T. software. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * + * Routines to implement krb5 cipher operations. + */ +#include "k5-int.h" +#include "yarrow.h" +#include "ycipher.h" +#include "enc_provider.h" +#include "assert.h" + +int +krb5int_yarrow_cipher_init +(CIPHER_CTX *ctx, + unsigned const char * key) +{ + size_t keybytes, keylength; + const struct krb5_enc_provider *enc = &yarrow_enc_provider; + krb5_error_code ret; + krb5_data randombits; + keybytes = enc->keybytes; + keylength = enc->keylength; + assert (keybytes == CIPHER_KEY_SIZE); + if (ctx->key.contents) { + memset (ctx->key.contents, 0, ctx->key.length); + free (ctx->key.contents); + } + ctx->key.contents = (void *) malloc (keylength); + ctx->key.length = keylength; + if (ctx->key.contents == NULL) + return (YARROW_NOMEM); + randombits.data = (char *) key; + randombits.length = keybytes; + ret = enc->make_key (&randombits, &ctx->key); + if (ret) { + memset (ctx->key.contents, 0, ctx->key.length); + free(ctx->key.contents); + ctx->key.contents = NULL; + return (YARROW_FAIL); + } + return (YARROW_OK); +} + +int krb5int_yarrow_cipher_encrypt_block +(CIPHER_CTX *ctx, const unsigned char *in, + unsigned char *out) +{ + krb5_error_code ret; + krb5_data ind, outd; + const struct krb5_enc_provider *enc = &yarrow_enc_provider; + ind.data = (char *) in; + ind.length = CIPHER_BLOCK_SIZE; + outd.data = (char *) out; + outd.length = CIPHER_BLOCK_SIZE; + ret = enc->encrypt (&ctx->key, 0, &ind, &outd); + if (ret) + return YARROW_FAIL; + return YARROW_OK; +} + +void +krb5int_yarrow_cipher_final +(CIPHER_CTX *ctx) + +{ + if (ctx->key.contents) { + memset (ctx->key.contents, 0, ctx->key.length); + free (ctx->key.contents); + } + ctx->key.contents = 0; + ctx->key.length = 0; +} diff --git a/src/lib/crypto/krb/yarrow/ycipher.h b/src/lib/crypto/krb/yarrow/ycipher.h new file mode 100644 index 000000000..96999c0db --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ycipher.h @@ -0,0 +1,42 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YCIPHER_H +#define YCIPHER_H + +/* block cipher interface */ + +typedef struct +{ + krb5_keyblock key; +} CIPHER_CTX; + +/* We need to choose a cipher. To do this, choose an enc_provider. + * Be sure to update the block size and key size constants below; + * they are here because static data structures are sized based on + * them so they must be known at compile time./ Thus we cannot + * call the enc_provider function to get the info. + */ + +#define yarrow_enc_provider krb5int_enc_aes256 + +#define CIPHER_BLOCK_SIZE 16 +#define CIPHER_KEY_SIZE 32 + +#if defined( YARROW_NO_MATHLIB ) +/* see macros at end for functions evaluated */ +#define POW_CIPHER_KEY_SIZE 115792089237316195423570985008687907853269984665640564039457584007913129639936.0 +#define POW_CIPHER_BLOCK_SIZE 340282366920938463463374607431768211456.0 +#endif + + +int krb5int_yarrow_cipher_init (CIPHER_CTX *ctx, unsigned const char *key); +int krb5int_yarrow_cipher_encrypt_block +(CIPHER_CTX *ctx, const unsigned char *in, unsigned char *out); +void krb5int_yarrow_cipher_final (CIPHER_CTX *ctx); + +#if !defined( YARROW_NO_MATHLIB ) +#define POW_CIPHER_KEY_SIZE pow(2.0, CIPHER_KEY_SIZE * 8 / 3.0) +#define POW_CIPHER_BLOCK_SIZE pow(2.0, CIPHER_BLOCK_SIZE * 8) +#endif + +#endif /* YCIPHER_H */ diff --git a/src/lib/crypto/krb/yarrow/yexcep.h b/src/lib/crypto/krb/yarrow/yexcep.h new file mode 100644 index 000000000..d27de2d5e --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yexcep.h @@ -0,0 +1,107 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YEXCEP_H +#define YEXCEP_H + +/* yes, macros with gotos in them, but in the interests of + * avoiding repetition of code, and having less error prone + * error handling + * + * EXCEP_DECL - declares the return value and local state variables + * needed by the exception macros + * + * THROW( x ) - set return value to x and goto function cleanup + * section (CATCH: block). In the catch block, THROW + * does not goto catch label to avoid loops, and instead + * falls through to the next statement. + * + * EXCEP_OK - success return value (=1) + * + * EXCEP_FAIL - failure return value (=0), other user exceptions are + * given negative values (<0) + * + * TRY( x ) - if code returns value <= 0 TRY sets return value to + * that value and goes to function cleanup section + * (CATCH: block). In the catch block, TRY does not goto + * the catch label to avoid loops, and instead + * falls through to the next statement. The + * return value is set to the first non success value + * returned by a TRY, unless this is overridden by a THROW. + * + * CATCH: - start of catch block, also switches behavior of + * TRY and THROW to not goto CATCH: inside the catch + * block to avoid loops + * + * EXCEP_RET - return the current return value from the function + * equivlanet to return (EXCEPTION) + * + * EXCEPTION - current return value, is set to EXCEP_OK by EXCEP_DECL + * + * EXCEP_BOOL - convert current return value to EXCEP_OK, or EXCEP_FAIL + * (EXCEP_FAIL is anything other than EXCEP_OK) + * + */ + +/* example usage */ + +/* + * + * #define EXCEP_OK_COMMENT 2 + * #define EXCEP_NULL_PTR -1 + * #define EXCEP_OUT_OF_MEM -2 + * + * int bar( char *c ) + * { + * EXCEP_DECL; + * + * if ( !c ) { THROW( EXCEP_NULL_PTR ); } + * if ( *c == '\0' ) { THROW( EXCEP_FAIL ); ); + * if ( *c == '#' ) { SET( EXCEP_COMMENT ); } + * CATCH: + * EXCEP_RET; + * } + * + * int foo( char *c ) + * { + * EXCEP_DECL; + * int *p = NULL; + * + * if ( !c ) { THROW( EXCEP_NULL_PTR ); } + * TRY( bar( c ) ); + * if ( RETURN == EXCEP_COMMENT ) { print( "comment\n" ); } + * p = strdup( c ); + * if ( !p ) { THROW( EXCEP_OUT_OF_MEM ); } + * + * CATCH: + * if ( p ) { TRY( bar( p ) ); free( p ); } + * THROW( EXCEP_BOOL ); + * if ( EXCEPTION == EXCEP_OK ) { printf( "success\n" ); } + * EXCEP_RET; + * } + * + */ + +#define EXCEP_FAIL 0 +#define EXCEP_OK 1 +#define EXCEP_DECL int _thr = 0, _ret2 = 0, _ret = _ret2+EXCEP_OK + +#define THROW( x ) \ + do { \ + _ret = (x); \ + if( !_thr ) { goto _catch; } \ + } while ( 0 ) + +#define TRY( x ) \ + do { \ + _ret2 = (x); \ + if ( _ret > 0 && _ret2 <= 0 ) { THROW( _ret2 ); } \ + } while ( 0 ) + +#define SET( x ) (_ret = (x)) +#define EXCEP_RET return( _ret ) +#define EXCEPTION _ret +#define RETURN _ret2 +#define CATCH _catch: _thr = 1; if ( 0 ) { goto _foo; } _foo +#define EXCEP_BOOL ( _ret > 0 ? EXCEP_OK : EXCEP_FAIL ) + +#endif diff --git a/src/lib/crypto/krb/yarrow/yhash.h b/src/lib/crypto/krb/yarrow/yhash.h new file mode 100644 index 000000000..ee4f03eb2 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/yhash.h @@ -0,0 +1,29 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YHASH_H +#define YHASH_H + +/* hash function interface */ + +/* default to SHA1 for yarrow 160 */ + +#include "shs.h" + + + +#define HASH_CTX SHS_INFO +#define HASH_Init(x) shsInit(x) +#define HASH_Update(x, buf, sz) shsUpdate(x, (const void*)buf, sz) +#define HASH_Final(x, tdigest) do { \ + int loopvar; \ + unsigned char *out2 = (void *)(tdigest); \ + HASH_CTX *ctx = (x); \ + shsFinal(ctx); \ + for (loopvar=0; loopvar<(sizeof(ctx->digest)/sizeof(ctx->digest[0])); loopvar++) \ + store_32_be(ctx->digest[loopvar], &out2[loopvar*4]); \ + } while(0) + + +#define HASH_DIGEST_SIZE SHS_DIGESTSIZE + +#endif /* YHASH_H */ diff --git a/src/lib/crypto/krb/yarrow/ylock.h b/src/lib/crypto/krb/yarrow/ylock.h new file mode 100644 index 000000000..9c032dc61 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ylock.h @@ -0,0 +1,24 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YLOCK_H +#define YLOCK_H + +#include "yarrow.h" + +/* these functions should return: + * + * YARROW_OK on success + * and YARROW_LOCKING on failure + */ + +#if 0 +static int LOCK( void ) { return (YARROW_OK); } +static int UNLOCK( void ) { return (YARROW_OK); } +#else +#include "k5-thread.h" +extern k5_mutex_t krb5int_yarrow_lock; +#define LOCK() (k5_mutex_lock(&krb5int_yarrow_lock) ? YARROW_LOCKING : YARROW_OK) +#define UNLOCK() (k5_mutex_unlock(&krb5int_yarrow_lock) ? YARROW_LOCKING : YARROW_OK) +#endif + +#endif /* YLOCK_H */ diff --git a/src/lib/crypto/krb/yarrow/ystate.h b/src/lib/crypto/krb/yarrow/ystate.h new file mode 100644 index 000000000..2886ca338 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ystate.h @@ -0,0 +1,28 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YSTATE_H +#define YSTATE_H + +#ifdef YARROW_SAVE_STATE + +#include "ycipher.h" +#include "ytypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Yarrow_STATE { + byte seed[CIPHER_KEY_SIZE * 2]; /* 2k bits saved to seed file */ +} Yarrow_STATE; + +int STATE_Save( const char *filename, const struct Yarrow_STATE* state ); +int STATE_Load( const char *filename, struct Yarrow_STATE* state ); + +#ifdef __cplusplus +} +#endif + +#endif /* YARROW_SAVE_STATE */ + +#endif /* YSTATE_H */ diff --git a/src/lib/crypto/krb/yarrow/ytypes.h b/src/lib/crypto/krb/yarrow/ytypes.h new file mode 100644 index 000000000..9265e5a84 --- /dev/null +++ b/src/lib/crypto/krb/yarrow/ytypes.h @@ -0,0 +1,27 @@ +/* -*- Mode: C; c-file-style: "bsd" -*- */ + +#ifndef YTYPES_H +#define YTYPES_H + +#include +#include +#include "autoconf.h" +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#define byte unsigned char + +#define uint8 unsigned char +#define int8 signed char + + +#if defined(uint64) +# define COUNTER uint64 +#else +# define COUNTER krb5_ui_4 +#endif + +#define COUNTER_MAX ((COUNTER)0 - 1) + +#endif /* YTYPES_H */ diff --git a/src/lib/crypto/make_checksum.c b/src/lib/crypto/make_checksum.c deleted file mode 100644 index ad532b27d..000000000 --- a/src/lib/crypto/make_checksum.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" -#include "etypes.h" -#include "dk.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_make_checksum(krb5_context context, krb5_cksumtype cksumtype, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *input, krb5_checksum *cksum) -{ - unsigned int i; - int e1, e2; - krb5_data data; - krb5_error_code ret; - size_t cksumlen; - - for (i=0; ihashsize; - else - cksumlen = krb5_cksumtypes_list[i].hash->hashsize; - - cksum->length = cksumlen; - - if ((cksum->contents = (krb5_octet *) malloc(cksum->length)) == NULL) - return(ENOMEM); - - data.length = cksum->length; - data.data = (char *) cksum->contents; - - if (krb5_cksumtypes_list[i].keyhash) { - /* check if key is compatible */ - const struct krb5_keyhash_provider *keyhash; - - keyhash = krb5_cksumtypes_list[i].keyhash; - - if (krb5_cksumtypes_list[i].keyed_etype) { - for (e1=0; e1enctype) - break; - - if ((e1 == krb5_enctypes_length) || - (e2 == krb5_enctypes_length) || - (krb5_enctypes_list[e1].enc != krb5_enctypes_list[e2].enc)) { - ret = KRB5_BAD_ENCTYPE; - goto cleanup; - } - } - - if (keyhash->hash == NULL) { - krb5_crypto_iov iov[1]; - - iov[0].flags = KRB5_CRYPTO_TYPE_DATA; - iov[0].data = *input; - - assert(keyhash->hash_iov != NULL); - - ret = (*keyhash->hash_iov)(key, usage, 0, iov, 1, &data); - } else { - ret = (*keyhash->hash)(key, usage, 0, input, &data); - } - } else if (krb5_cksumtypes_list[i].flags & KRB5_CKSUMFLAG_DERIVE) { - ret = krb5_dk_make_checksum(krb5_cksumtypes_list[i].hash, - key, usage, input, &data); - } else { - /* no key is used */ - - ret = (*(krb5_cksumtypes_list[i].hash->hash))(1, input, &data); - } - - if (!ret) { - cksum->magic = KV5M_CHECKSUM; - cksum->checksum_type = cksumtype; - if (krb5_cksumtypes_list[i].trunc_size) { - krb5_octet *trunc; - cksum->length = krb5_cksumtypes_list[i].trunc_size; - trunc = (krb5_octet *) realloc(cksum->contents, cksum->length); - if (trunc) - cksum->contents = trunc; - } - } - -cleanup: - if (ret) { - memset(cksum->contents, 0, cksum->length); - free(cksum->contents); - cksum->contents = NULL; - } - - return(ret); -} diff --git a/src/lib/crypto/make_checksum_iov.c b/src/lib/crypto/make_checksum_iov.c deleted file mode 100644 index 3cf4af605..000000000 --- a/src/lib/crypto/make_checksum_iov.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * lib/crypto/make_checksum_iov.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "cksumtypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_make_checksum_iov(krb5_context context, - krb5_cksumtype cksumtype, - const krb5_keyblock *key, - krb5_keyusage usage, - krb5_crypto_iov *data, - size_t num_data) -{ - unsigned int i; - size_t cksumlen; - krb5_error_code ret; - krb5_data cksum_data; - krb5_crypto_iov *checksum; - - for (i = 0; i < krb5_cksumtypes_length; i++) { - if (krb5_cksumtypes_list[i].ctype == cksumtype) - break; - } - - if (i == krb5_cksumtypes_length) - return(KRB5_BAD_ENCTYPE); - - if (krb5_cksumtypes_list[i].keyhash != NULL) - cksum_data.length = krb5_cksumtypes_list[i].keyhash->hashsize; - else - cksum_data.length = krb5_cksumtypes_list[i].hash->hashsize; - - if (krb5_cksumtypes_list[i].trunc_size != 0) - cksumlen = krb5_cksumtypes_list[i].trunc_size; - else - cksumlen = cksum_data.length; - - checksum = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_CHECKSUM); - if (checksum == NULL || checksum->data.length < cksumlen) - return(KRB5_BAD_MSIZE); - - cksum_data.data = malloc(cksum_data.length); - if (cksum_data.data == NULL) - return(ENOMEM); - - ret = krb5int_c_make_checksum_iov(&krb5_cksumtypes_list[i], - key, usage, data, num_data, - &cksum_data); - if (ret == 0) { - memcpy(checksum->data.data, cksum_data.data, cksumlen); - checksum->data.length = cksumlen; - } - - free(cksum_data.data); - - return(ret); -} diff --git a/src/lib/crypto/make_random_key.c b/src/lib/crypto/make_random_key.c deleted file mode 100644 index 0ae321dca..000000000 --- a/src/lib/crypto/make_random_key.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_make_random_key(krb5_context context, krb5_enctype enctype, - krb5_keyblock *random_key) -{ - int i; - krb5_error_code ret; - const struct krb5_enc_provider *enc; - size_t keybytes, keylength; - krb5_data random_data; - unsigned char *bytes; - - for (i=0; ikeybytes; - keylength = enc->keylength; - - if ((bytes = (unsigned char *) malloc(keybytes)) == NULL) - return(ENOMEM); - if ((random_key->contents = (krb5_octet *) malloc(keylength)) == NULL) { - free(bytes); - return(ENOMEM); - } - - random_data.data = (char *) bytes; - random_data.length = keybytes; - - if ((ret = krb5_c_random_make_octets(context, &random_data))) - goto cleanup; - - random_key->magic = KV5M_KEYBLOCK; - random_key->enctype = enctype; - random_key->length = keylength; - - ret = ((*(enc->make_key))(&random_data, random_key)); - -cleanup: - memset(bytes, 0, keybytes); - free(bytes); - - if (ret) { - memset(random_key->contents, 0, keylength); - free(random_key->contents); - } - - return(ret); -} diff --git a/src/lib/crypto/mandatory_sumtype.c b/src/lib/crypto/mandatory_sumtype.c deleted file mode 100644 index f9322ff3f..000000000 --- a/src/lib/crypto/mandatory_sumtype.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2003 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code -krb5int_c_mandatory_cksumtype (krb5_context ctx, krb5_enctype etype, - krb5_cksumtype *cksumtype) -{ - int i; - - for (i = 0; i < krb5_enctypes_length; i++) - if (krb5_enctypes_list[i].etype == etype) { - *cksumtype = krb5_enctypes_list[i].required_ctype; - return 0; - } - - return KRB5_BAD_ENCTYPE; -} diff --git a/src/lib/crypto/md4/ISSUES b/src/lib/crypto/md4/ISSUES deleted file mode 100644 index 1103bd87b..000000000 --- a/src/lib/crypto/md4/ISSUES +++ /dev/null @@ -1,3 +0,0 @@ -Issues to be addressed for src/lib/crypto/md4: -*- text -*- - -Assumes int is >= 32 bits. diff --git a/src/lib/crypto/md4/Makefile.in b/src/lib/crypto/md4/Makefile.in deleted file mode 100644 index f7d65b818..000000000 --- a/src/lib/crypto/md4/Makefile.in +++ /dev/null @@ -1,58 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/md4 -mydir=lib/crypto/md4 -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir) -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=md4 -##DOS##OBJFILE=..\$(OUTPRE)md4.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= md4.o - -OBJS= $(OUTPRE)md4.$(OBJEXT) - -SRCS= $(srcdir)/md4.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -t_mddriver.c: $(srcdir)/../md5/t_mddriver.c - $(CP) $(srcdir)/../md5/t_mddriver.c t_mddriver.c - -t_mddriver.o: t_mddriver.c - $(CC) -DMD=4 $(ALL_CFLAGS) -c t_mddriver.c - -t_mddriver: t_mddriver.o md4.o $(SUPPORT_DEPLIB) - $(CC_LINK) -o t_mddriver t_mddriver.o md4.o $(SUPPORT_LIB) - -$(OUTPRE)t_mddriver.obj: t_mddriver.c - $(CC) -DMD=4 $(ALL_CFLAGS) -Fo$@ -c $** - -$(OUTPRE)t_mddriver.exe: $(OUTPRE)t_mddriver.obj $(OUTPRE)md4.obj - link -out:$@ $** - -check-unix:: t_mddriver - $(RUN_SETUP) $(VALGRIND) $(C)t_mddriver -x - -check-windows:: $(OUTPRE)t_mddriver.exe - $(OUTPRE)$(C)t_mddriver.exe -x - -clean:: - $(RM) $(OUTPRE)t_mddriver$(EXEEXT) $(OUTPRE)t_mddriver.$(OBJEXT) t_mddriver.c - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/md4/deps b/src/lib/crypto/md4/deps deleted file mode 100644 index 775a8b446..000000000 --- a/src/lib/crypto/md4/deps +++ /dev/null @@ -1,13 +0,0 @@ -# -# Generated makefile dependencies follow. -# -md4.so md4.po $(OUTPRE)md4.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - md4.c rsa-md4.h diff --git a/src/lib/crypto/md4/md4.c b/src/lib/crypto/md4/md4.c deleted file mode 100644 index 7922c71ed..000000000 --- a/src/lib/crypto/md4/md4.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * lib/crypto/md4/md4.c - */ - -/* - ********************************************************************** - ** md4.c ** - ** RSA Data Security, Inc. MD4 Message Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version ** - ********************************************************************** - */ - -/* - ********************************************************************** - ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** - ** ** - ** License to copy and use this software is granted provided that ** - ** it is identified as the "RSA Data Security, Inc. MD4 Message ** - ** Digest Algorithm" in all material mentioning or referencing this ** - ** software or this function. ** - ** ** - ** License is also granted to make and use derivative works ** - ** provided that such works are identified as "derived from the RSA ** - ** Data Security, Inc. MD4 Message Digest Algorithm" in all ** - ** material mentioning or referencing the derived work. ** - ** ** - ** RSA Data Security, Inc. makes no representations concerning ** - ** either the merchantability of this software or the suitability ** - ** of this software for any particular purpose. It is provided "as ** - ** is" without express or implied warranty of any kind. ** - ** ** - ** These notices must be retained in any copies of any part of this ** - ** documentation and/or software. ** - ********************************************************************** - */ - -#include "k5-int.h" -#include "rsa-md4.h" - -/* forward declaration */ -static void Transform (krb5_ui_4 *, krb5_ui_4 *); - -static const unsigned char PADDING[64] = { - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -/* F, G and H are basic MD4 functions: selection, majority, parity */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* ROTATE_LEFT rotates x left n bits */ -#define ROTATE_LEFT(x, n) ((((x) << (n)) & 0xffffffff) | ((x) >> (32-(n)))) - -/* FF, GG and HH are MD4 transformations for rounds 1, 2 and 3 */ -/* Rotation is separate from addition to prevent recomputation */ -#define FF(a, b, c, d, x, s) \ - {(a) += F ((b), (c), (d)) + (x); \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s));} -#define GG(a, b, c, d, x, s) \ - {(a) += G ((b), (c), (d)) + (x) + 013240474631UL; \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s));} -#define HH(a, b, c, d, x, s) \ - {(a) += H ((b), (c), (d)) + (x) + 015666365641UL; \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s));} - -void -krb5_MD4Init (krb5_MD4_CTX *mdContext) -{ - mdContext->i[0] = mdContext->i[1] = (krb5_ui_4)0; - - /* Load magic initialization constants. - */ - mdContext->buf[0] = 0x67452301UL; - mdContext->buf[1] = 0xefcdab89UL; - mdContext->buf[2] = 0x98badcfeUL; - mdContext->buf[3] = 0x10325476UL; -} - -void -krb5_MD4Update (krb5_MD4_CTX *mdContext, const unsigned char *inBuf, unsigned int inLen) -{ - krb5_ui_4 in[16]; - int mdi; - unsigned int i, ii; - - /* compute number of bytes mod 64 */ - mdi = (int)((mdContext->i[0] >> 3) & 0x3F); - - /* update number of bits */ - if ((mdContext->i[0] + ((krb5_ui_4)inLen << 3)) < mdContext->i[0]) - mdContext->i[1]++; - mdContext->i[0] += ((krb5_ui_4)inLen << 3); - mdContext->i[1] += ((krb5_ui_4)inLen >> 29); - - while (inLen--) { - /* add new character to buffer, increment mdi */ - mdContext->in[mdi++] = *inBuf++; - - /* transform if necessary */ - if (mdi == 0x40) { - for (i = 0, ii = 0; i < 16; i++, ii += 4) { - in[i] = load_32_le(mdContext->in+ii); - } - Transform (mdContext->buf, in); - mdi = 0; - } - } -} - -void -krb5_MD4Final (krb5_MD4_CTX *mdContext) -{ - krb5_ui_4 in[16]; - int mdi; - unsigned int i, ii; - unsigned int padLen; - - /* save number of bits */ - in[14] = mdContext->i[0]; - in[15] = mdContext->i[1]; - - /* compute number of bytes mod 64 */ - mdi = (int)((mdContext->i[0] >> 3) & 0x3F); - - /* pad out to 56 mod 64 */ - padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); - krb5_MD4Update (mdContext, PADDING, padLen); - - /* append length in bits and transform */ - for (i = 0, ii = 0; i < 14; i++, ii += 4) - in[i] = load_32_le(mdContext->in+ii); - Transform (mdContext->buf, in); - - - /* store buffer in digest */ - for (i = 0, ii = 0; i < 4; i++, ii += 4) { - store_32_le(mdContext->buf[i], mdContext->digest+ii); - } -} - -/* Basic MD4 step. Transform buf based on in. - */ -static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in) -{ - register krb5_ui_4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; - -#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) - int i; -#define ROTATE { krb5_ui_4 temp; temp = d, d = c, c = b, b = a, a = temp; } - for (i = 0; i < 16; i++) { - static const unsigned char round1consts[] = { 3, 7, 11, 19, }; - FF (a, b, c, d, in[i], round1consts[i%4]); ROTATE; - } - for (i = 0; i < 16; i++) { - static const unsigned char round2indices[] = { - 0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15 - }; - static const unsigned char round2consts[] = { 3, 5, 9, 13 }; - GG (a, b, c, d, in[round2indices[i]], round2consts[i%4]); ROTATE; - } - for (i = 0; i < 16; i++) { - static const unsigned char round3indices[] = { - 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 - }; - static const unsigned char round3consts[] = { 3, 9, 11, 15 }; - HH (a, b, c, d, in[round3indices[i]], round3consts[i%4]); ROTATE; - } -#else - /* Round 1 */ - FF (a, b, c, d, in[ 0], 3); - FF (d, a, b, c, in[ 1], 7); - FF (c, d, a, b, in[ 2], 11); - FF (b, c, d, a, in[ 3], 19); - FF (a, b, c, d, in[ 4], 3); - FF (d, a, b, c, in[ 5], 7); - FF (c, d, a, b, in[ 6], 11); - FF (b, c, d, a, in[ 7], 19); - FF (a, b, c, d, in[ 8], 3); - FF (d, a, b, c, in[ 9], 7); - FF (c, d, a, b, in[10], 11); - FF (b, c, d, a, in[11], 19); - FF (a, b, c, d, in[12], 3); - FF (d, a, b, c, in[13], 7); - FF (c, d, a, b, in[14], 11); - FF (b, c, d, a, in[15], 19); - - /* Round 2 */ - GG (a, b, c, d, in[ 0], 3); - GG (d, a, b, c, in[ 4], 5); - GG (c, d, a, b, in[ 8], 9); - GG (b, c, d, a, in[12], 13); - GG (a, b, c, d, in[ 1], 3); - GG (d, a, b, c, in[ 5], 5); - GG (c, d, a, b, in[ 9], 9); - GG (b, c, d, a, in[13], 13); - GG (a, b, c, d, in[ 2], 3); - GG (d, a, b, c, in[ 6], 5); - GG (c, d, a, b, in[10], 9); - GG (b, c, d, a, in[14], 13); - GG (a, b, c, d, in[ 3], 3); - GG (d, a, b, c, in[ 7], 5); - GG (c, d, a, b, in[11], 9); - GG (b, c, d, a, in[15], 13); - - /* Round 3 */ - HH (a, b, c, d, in[ 0], 3); - HH (d, a, b, c, in[ 8], 9); - HH (c, d, a, b, in[ 4], 11); - HH (b, c, d, a, in[12], 15); - HH (a, b, c, d, in[ 2], 3); - HH (d, a, b, c, in[10], 9); - HH (c, d, a, b, in[ 6], 11); - HH (b, c, d, a, in[14], 15); - HH (a, b, c, d, in[ 1], 3); - HH (d, a, b, c, in[ 9], 9); - HH (c, d, a, b, in[ 5], 11); - HH (b, c, d, a, in[13], 15); - HH (a, b, c, d, in[ 3], 3); - HH (d, a, b, c, in[11], 9); - HH (c, d, a, b, in[ 7], 11); - HH (b, c, d, a, in[15], 15); -#endif - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - -/* - ********************************************************************** - ** End of md4.c ** - ******************************* (cut) ******************************** - */ diff --git a/src/lib/crypto/md4/rsa-md4.h b/src/lib/crypto/md4/rsa-md4.h deleted file mode 100644 index d4e6f6b79..000000000 --- a/src/lib/crypto/md4/rsa-md4.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * lib/crypto/md4/rsa-md4.h - * - * Copyright 1991 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * RSA MD4 header file, with Kerberos/STDC additions. - */ - -#ifndef __KRB5_RSA_MD4_H__ -#define __KRB5_RSA_MD4_H__ - -#ifdef unicos61 -#include -#endif /* unicos61 */ - -/* 16 u_char's in the digest */ -#define RSA_MD4_CKSUM_LENGTH 16 -/* des blocksize is 8, so this works nicely... */ -#define OLD_RSA_MD4_DES_CKSUM_LENGTH 16 -#define NEW_RSA_MD4_DES_CKSUM_LENGTH 24 -#define RSA_MD4_DES_CONFOUND_LENGTH 8 - -/* - ********************************************************************** - ** md4.h -- Header file for implementation of MD4 ** - ** RSA Data Security, Inc. MD4 Message Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** - ********************************************************************** - */ - -/* - ********************************************************************** - ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** - ** ** - ** License to copy and use this software is granted provided that ** - ** it is identified as the "RSA Data Security, Inc. MD4 Message ** - ** Digest Algorithm" in all material mentioning or referencing this ** - ** software or this function. ** - ** ** - ** License is also granted to make and use derivative works ** - ** provided that such works are identified as "derived from the RSA ** - ** Data Security, Inc. MD4 Message Digest Algorithm" in all ** - ** material mentioning or referencing the derived work. ** - ** ** - ** RSA Data Security, Inc. makes no representations concerning ** - ** either the merchantability of this software or the suitability ** - ** of this software for any particular purpose. It is provided "as ** - ** is" without express or implied warranty of any kind. ** - ** ** - ** These notices must be retained in any copies of any part of this ** - ** documentation and/or software. ** - ********************************************************************** - */ - -/* Data structure for MD4 (Message Digest) computation */ -typedef struct { - krb5_ui_4 i[2]; /* number of _bits_ handled mod 2^64 */ - krb5_ui_4 buf[4]; /* scratch buffer */ - unsigned char in[64]; /* input buffer */ - unsigned char digest[16]; /* actual digest after MD4Final call */ -} krb5_MD4_CTX; - -extern void krb5_MD4Init(krb5_MD4_CTX *); -extern void krb5_MD4Update(krb5_MD4_CTX *, const unsigned char *, unsigned int); -extern void krb5_MD4Final(krb5_MD4_CTX *); - -/* - ********************************************************************** - ** End of md4.h ** - ******************************* (cut) ******************************** - */ -#endif /* __KRB5_RSA_MD4_H__ */ diff --git a/src/lib/crypto/md5/ISSUES b/src/lib/crypto/md5/ISSUES deleted file mode 100644 index 481e52914..000000000 --- a/src/lib/crypto/md5/ISSUES +++ /dev/null @@ -1,3 +0,0 @@ -Issues to be addressed for src/lib/crypto/md5: -*- text -*- - -Assumes int is >= 32 bits. diff --git a/src/lib/crypto/md5/Makefile.in b/src/lib/crypto/md5/Makefile.in deleted file mode 100644 index 73a4ceaee..000000000 --- a/src/lib/crypto/md5/Makefile.in +++ /dev/null @@ -1,48 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/md5 -mydir=lib/crypto/md5 -BUILDTOP=$(REL)..$(S)..$(S).. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=md5 -##DOS##OBJFILE=..\$(OUTPRE)md5.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= md5.o - -OBJS= $(OUTPRE)md5.$(OBJEXT) - -SRCS= $(srcdir)/md5.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -t_mddriver: t_mddriver.o md5.o $(SUPPORT_DEPLIB) - $(CC_LINK) -o t_mddriver t_mddriver.o md5.o $(SUPPORT_LIB) - -$(OUTPRE)t_mddriver.exe: $(OUTPRE)t_mddriver.obj $(OUTPRE)md5.obj - link -out:$@ $** - -check-unix:: t_mddriver - $(RUN_SETUP) $(VALGRIND) $(C)t_mddriver -x - -check-windows:: $(OUTPRE)t_mddriver.exe - $(OUTPRE)$(C)t_mddriver.exe -x - -clean:: - $(RM) $(OUTPRE)t_mddriver$(EXEEXT) $(OUTPRE)t_mddriver.$(OBJEXT) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/md5/deps b/src/lib/crypto/md5/deps deleted file mode 100644 index 131185443..000000000 --- a/src/lib/crypto/md5/deps +++ /dev/null @@ -1,13 +0,0 @@ -# -# Generated makefile dependencies follow. -# -md5.so md5.po $(OUTPRE)md5.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - md5.c rsa-md5.h diff --git a/src/lib/crypto/md5/md5.c b/src/lib/crypto/md5/md5.c deleted file mode 100644 index e548dbc3a..000000000 --- a/src/lib/crypto/md5/md5.c +++ /dev/null @@ -1,343 +0,0 @@ -/* - *********************************************************************** - ** md5.c -- the source code for MD5 routines ** - ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 1/91 SRD,AJ,BSK,JT Reference C ver., 7/10 constant corr. ** - *********************************************************************** - */ - -/* - * Modified by John Carr, MIT, to use Kerberos 5 typedefs. - */ - -/* - *********************************************************************** - ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** - ** ** - ** License to copy and use this software is granted provided that ** - ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** - ** Digest Algorithm" in all material mentioning or referencing this ** - ** software or this function. ** - ** ** - ** License is also granted to make and use derivative works ** - ** provided that such works are identified as "derived from the RSA ** - ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** - ** material mentioning or referencing the derived work. ** - ** ** - ** RSA Data Security, Inc. makes no representations concerning ** - ** either the merchantability of this software or the suitability ** - ** of this software for any particular purpose. It is provided "as ** - ** is" without express or implied warranty of any kind. ** - ** ** - ** These notices must be retained in any copies of any part of this ** - ** documentation and/or software. ** - *********************************************************************** - */ - -#include "k5-int.h" -#include "rsa-md5.h" - -/* - *********************************************************************** - ** Message-digest routines: ** - ** To form the message digest for a message M ** - ** (1) Initialize a context buffer mdContext using krb5_MD5Init ** - ** (2) Call krb5_MD5Update on mdContext and M ** - ** (3) Call krb5_MD5Final on mdContext ** - ** The message digest is now in mdContext->digest[0...15] ** - *********************************************************************** - */ - -/* forward declaration */ -static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in); - -static const unsigned char PADDING[64] = { - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -/* F, G, H and I are basic MD5 functions */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits */ -#define ROTATE_LEFT(x, n) ((((x) << (n)) & 0xffffffff) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */ -/* Rotation is separate from addition to prevent recomputation */ -#define FF(a, b, c, d, x, s, ac) \ - {(a) += F ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - (a) &= 0xffffffff; \ - } -#define GG(a, b, c, d, x, s, ac) \ - {(a) += G ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - (a) &= 0xffffffff; \ - } -#define HH(a, b, c, d, x, s, ac) \ - {(a) += H ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - (a) &= 0xffffffff; \ - } -#define II(a, b, c, d, x, s, ac) \ - {(a) += I ((b), (c), (d)) + (x) + (krb5_ui_4)(ac); \ - (a) &= 0xffffffff; \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - (a) &= 0xffffffff; \ - } - -/* The routine krb5_MD5Init initializes the message-digest context - mdContext. All fields are set to zero. - */ -void -krb5_MD5Init (krb5_MD5_CTX *mdContext) -{ - mdContext->i[0] = mdContext->i[1] = (krb5_ui_4)0; - - /* Load magic initialization constants. - */ - mdContext->buf[0] = 0x67452301UL; - mdContext->buf[1] = 0xefcdab89UL; - mdContext->buf[2] = 0x98badcfeUL; - mdContext->buf[3] = 0x10325476UL; -} - -/* The routine krb5_MD5Update updates the message-digest context to - account for the presence of each of the characters inBuf[0..inLen-1] - in the message whose digest is being computed. - */ -void -krb5_MD5Update (krb5_MD5_CTX *mdContext, const unsigned char *inBuf, unsigned int inLen) -{ - krb5_ui_4 in[16]; - int mdi; - unsigned int i, ii; - - /* compute number of bytes mod 64 */ - mdi = (int)((mdContext->i[0] >> 3) & 0x3F); - - /* update number of bits */ - if ((mdContext->i[0] + ((krb5_ui_4)inLen << 3)) < mdContext->i[0]) - mdContext->i[1]++; - mdContext->i[0] += ((krb5_ui_4)inLen << 3); - mdContext->i[1] += ((krb5_ui_4)inLen >> 29); - - while (inLen--) { - /* add new character to buffer, increment mdi */ - mdContext->in[mdi++] = *inBuf++; - - /* transform if necessary */ - if (mdi == 0x40) { - for (i = 0, ii = 0; i < 16; i++, ii += 4) - in[i] = load_32_le(mdContext->in+ii); - Transform (mdContext->buf, in); - mdi = 0; - } - } -} - -/* The routine krb5_MD5Final terminates the message-digest computation and - ends with the desired message digest in mdContext->digest[0...15]. - */ -void -krb5_MD5Final (krb5_MD5_CTX *mdContext) -{ - krb5_ui_4 in[16]; - int mdi; - unsigned int i, ii; - unsigned int padLen; - - /* save number of bits */ - in[14] = mdContext->i[0]; - in[15] = mdContext->i[1]; - - /* compute number of bytes mod 64 */ - mdi = (int)((mdContext->i[0] >> 3) & 0x3F); - - /* pad out to 56 mod 64 */ - padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi); - krb5_MD5Update (mdContext, PADDING, padLen); - - /* append length in bits and transform */ - for (i = 0, ii = 0; i < 14; i++, ii += 4) - in[i] = load_32_le(mdContext->in+ii); - Transform (mdContext->buf, in); - - /* store buffer in digest */ - for (i = 0, ii = 0; i < 4; i++, ii += 4) { - store_32_le(mdContext->buf[i], mdContext->digest+ii); - } -} - -/* Basic MD5 step. Transforms buf based on in. - */ -static void Transform (krb5_ui_4 *buf, krb5_ui_4 *in) -{ - register krb5_ui_4 a = buf[0], b = buf[1], c = buf[2], d = buf[3]; - -#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) - - int i; -#define ROTATE { krb5_ui_4 temp; temp = d, d = c, c = b, b = a, a = temp; } - for (i = 0; i < 16; i++) { - const unsigned char round1s[] = { 7, 12, 17, 22 }; - const krb5_ui_4 round1consts[] = { - 3614090360UL, 3905402710UL, 606105819UL, 3250441966UL, - 4118548399UL, 1200080426UL, 2821735955UL, 4249261313UL, - 1770035416UL, 2336552879UL, 4294925233UL, 2304563134UL, - 1804603682UL, 4254626195UL, 2792965006UL, 1236535329UL, - }; - FF (a, b, c, d, in[i], round1s[i%4], round1consts[i]); - ROTATE; - } - for (i = 0; i < 16; i++) { - const unsigned char round2s[] = { 5, 9, 14, 20 }; - const krb5_ui_4 round2consts[] = { - 4129170786UL, 3225465664UL, 643717713UL, 3921069994UL, - 3593408605UL, 38016083UL, 3634488961UL, 3889429448UL, - 568446438UL, 3275163606UL, 4107603335UL, 1163531501UL, - 2850285829UL, 4243563512UL, 1735328473UL, 2368359562UL, - }; - int r2index = (1 + i * 5) % 16; - GG (a, b, c, d, in[r2index], round2s[i%4], round2consts[i]); - ROTATE; - } - for (i = 0; i < 16; i++) { - static const unsigned char round3s[] = { 4, 11, 16, 23 }; - static const krb5_ui_4 round3consts[] = { - 4294588738UL, 2272392833UL, 1839030562UL, 4259657740UL, - 2763975236UL, 1272893353UL, 4139469664UL, 3200236656UL, - 681279174UL, 3936430074UL, 3572445317UL, 76029189UL, - 3654602809UL, 3873151461UL, 530742520UL, 3299628645UL, - }; - int r3index = (5 + i * 3) % 16; - HH (a, b, c, d, in[r3index], round3s[i%4], round3consts[i]); - ROTATE; - } - for (i = 0; i < 16; i++) { - static const unsigned char round4s[] = { 6, 10, 15, 21 }; - static const krb5_ui_4 round4consts[] = { - 4096336452UL, 1126891415UL, 2878612391UL, 4237533241UL, - 1700485571UL, 2399980690UL, 4293915773UL, 2240044497UL, - 1873313359UL, 4264355552UL, 2734768916UL, 1309151649UL, - 4149444226UL, 3174756917UL, 718787259UL, 3951481745UL, - }; - int r4index = (7 * i) % 16; - II (a, b, c, d, in[r4index], round4s[i%4], round4consts[i]); - ROTATE; - } - -#else - - /* Round 1 */ -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 - FF ( a, b, c, d, in[ 0], S11, 3614090360UL); /* 1 */ - FF ( d, a, b, c, in[ 1], S12, 3905402710UL); /* 2 */ - FF ( c, d, a, b, in[ 2], S13, 606105819UL); /* 3 */ - FF ( b, c, d, a, in[ 3], S14, 3250441966UL); /* 4 */ - FF ( a, b, c, d, in[ 4], S11, 4118548399UL); /* 5 */ - FF ( d, a, b, c, in[ 5], S12, 1200080426UL); /* 6 */ - FF ( c, d, a, b, in[ 6], S13, 2821735955UL); /* 7 */ - FF ( b, c, d, a, in[ 7], S14, 4249261313UL); /* 8 */ - FF ( a, b, c, d, in[ 8], S11, 1770035416UL); /* 9 */ - FF ( d, a, b, c, in[ 9], S12, 2336552879UL); /* 10 */ - FF ( c, d, a, b, in[10], S13, 4294925233UL); /* 11 */ - FF ( b, c, d, a, in[11], S14, 2304563134UL); /* 12 */ - FF ( a, b, c, d, in[12], S11, 1804603682UL); /* 13 */ - FF ( d, a, b, c, in[13], S12, 4254626195UL); /* 14 */ - FF ( c, d, a, b, in[14], S13, 2792965006UL); /* 15 */ - FF ( b, c, d, a, in[15], S14, 1236535329UL); /* 16 */ - - /* Round 2 */ -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 - GG ( a, b, c, d, in[ 1], S21, 4129170786UL); /* 17 */ - GG ( d, a, b, c, in[ 6], S22, 3225465664UL); /* 18 */ - GG ( c, d, a, b, in[11], S23, 643717713UL); /* 19 */ - GG ( b, c, d, a, in[ 0], S24, 3921069994UL); /* 20 */ - GG ( a, b, c, d, in[ 5], S21, 3593408605UL); /* 21 */ - GG ( d, a, b, c, in[10], S22, 38016083UL); /* 22 */ - GG ( c, d, a, b, in[15], S23, 3634488961UL); /* 23 */ - GG ( b, c, d, a, in[ 4], S24, 3889429448UL); /* 24 */ - GG ( a, b, c, d, in[ 9], S21, 568446438UL); /* 25 */ - GG ( d, a, b, c, in[14], S22, 3275163606UL); /* 26 */ - GG ( c, d, a, b, in[ 3], S23, 4107603335UL); /* 27 */ - GG ( b, c, d, a, in[ 8], S24, 1163531501UL); /* 28 */ - GG ( a, b, c, d, in[13], S21, 2850285829UL); /* 29 */ - GG ( d, a, b, c, in[ 2], S22, 4243563512UL); /* 30 */ - GG ( c, d, a, b, in[ 7], S23, 1735328473UL); /* 31 */ - GG ( b, c, d, a, in[12], S24, 2368359562UL); /* 32 */ - - /* Round 3 */ -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 - HH ( a, b, c, d, in[ 5], S31, 4294588738UL); /* 33 */ - HH ( d, a, b, c, in[ 8], S32, 2272392833UL); /* 34 */ - HH ( c, d, a, b, in[11], S33, 1839030562UL); /* 35 */ - HH ( b, c, d, a, in[14], S34, 4259657740UL); /* 36 */ - HH ( a, b, c, d, in[ 1], S31, 2763975236UL); /* 37 */ - HH ( d, a, b, c, in[ 4], S32, 1272893353UL); /* 38 */ - HH ( c, d, a, b, in[ 7], S33, 4139469664UL); /* 39 */ - HH ( b, c, d, a, in[10], S34, 3200236656UL); /* 40 */ - HH ( a, b, c, d, in[13], S31, 681279174UL); /* 41 */ - HH ( d, a, b, c, in[ 0], S32, 3936430074UL); /* 42 */ - HH ( c, d, a, b, in[ 3], S33, 3572445317UL); /* 43 */ - HH ( b, c, d, a, in[ 6], S34, 76029189UL); /* 44 */ - HH ( a, b, c, d, in[ 9], S31, 3654602809UL); /* 45 */ - HH ( d, a, b, c, in[12], S32, 3873151461UL); /* 46 */ - HH ( c, d, a, b, in[15], S33, 530742520UL); /* 47 */ - HH ( b, c, d, a, in[ 2], S34, 3299628645UL); /* 48 */ - - /* Round 4 */ -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - II ( a, b, c, d, in[ 0], S41, 4096336452UL); /* 49 */ - II ( d, a, b, c, in[ 7], S42, 1126891415UL); /* 50 */ - II ( c, d, a, b, in[14], S43, 2878612391UL); /* 51 */ - II ( b, c, d, a, in[ 5], S44, 4237533241UL); /* 52 */ - II ( a, b, c, d, in[12], S41, 1700485571UL); /* 53 */ - II ( d, a, b, c, in[ 3], S42, 2399980690UL); /* 54 */ - II ( c, d, a, b, in[10], S43, 4293915773UL); /* 55 */ - II ( b, c, d, a, in[ 1], S44, 2240044497UL); /* 56 */ - II ( a, b, c, d, in[ 8], S41, 1873313359UL); /* 57 */ - II ( d, a, b, c, in[15], S42, 4264355552UL); /* 58 */ - II ( c, d, a, b, in[ 6], S43, 2734768916UL); /* 59 */ - II ( b, c, d, a, in[13], S44, 1309151649UL); /* 60 */ - II ( a, b, c, d, in[ 4], S41, 4149444226UL); /* 61 */ - II ( d, a, b, c, in[11], S42, 3174756917UL); /* 62 */ - II ( c, d, a, b, in[ 2], S43, 718787259UL); /* 63 */ - II ( b, c, d, a, in[ 9], S44, 3951481745UL); /* 64 */ - -#endif /* small? */ - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} diff --git a/src/lib/crypto/md5/rsa-md5.h b/src/lib/crypto/md5/rsa-md5.h deleted file mode 100644 index 846b23856..000000000 --- a/src/lib/crypto/md5/rsa-md5.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - *********************************************************************** - ** md5.h -- header file for implementation of MD5 ** - ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** - ** Revised (for MD5): RLR 4/27/91 ** - ** -- G modified to have y&~z instead of y&z ** - ** -- FF, GG, HH modified to add in last register done ** - ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** - ** -- distinct additive constant for each step ** - ** -- round 4 added, working mod 7 ** - *********************************************************************** - */ - -/* - *********************************************************************** - ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** - ** ** - ** License to copy and use this software is granted provided that ** - ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** - ** Digest Algorithm" in all material mentioning or referencing this ** - ** software or this function. ** - ** ** - ** License is also granted to make and use derivative works ** - ** provided that such works are identified as "derived from the RSA ** - ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** - ** material mentioning or referencing the derived work. ** - ** ** - ** RSA Data Security, Inc. makes no representations concerning ** - ** either the merchantability of this software or the suitability ** - ** of this software for any particular purpose. It is provided "as ** - ** is" without express or implied warranty of any kind. ** - ** ** - ** These notices must be retained in any copies of any part of this ** - ** documentation and/or software. ** - *********************************************************************** - */ - -#ifndef KRB5_RSA_MD5__ -#define KRB5_RSA_MD5__ - -/* Data structure for MD5 (Message-Digest) computation */ -typedef struct { - krb5_ui_4 i[2]; /* number of _bits_ handled mod 2^64 */ - krb5_ui_4 buf[4]; /* scratch buffer */ - unsigned char in[64]; /* input buffer */ - unsigned char digest[16]; /* actual digest after MD5Final call */ -} krb5_MD5_CTX; - -extern void krb5_MD5Init(krb5_MD5_CTX *); -extern void krb5_MD5Update(krb5_MD5_CTX *,const unsigned char *,unsigned int); -extern void krb5_MD5Final(krb5_MD5_CTX *); - -#define RSA_MD5_CKSUM_LENGTH 16 -#define OLD_RSA_MD5_DES_CKSUM_LENGTH 16 -#define NEW_RSA_MD5_DES_CKSUM_LENGTH 24 -#define RSA_MD5_DES_CONFOUND_LENGTH 8 - -#endif /* KRB5_RSA_MD5__ */ diff --git a/src/lib/crypto/md5/t_cksum.c b/src/lib/crypto/md5/t_cksum.c deleted file mode 100644 index 17ecd51d7..000000000 --- a/src/lib/crypto/md5/t_cksum.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * lib/crypto/md5/t_cksum.c - * - * Copyright 1995 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - */ - -/* - * t_cksum.c - Test checksum and checksum compatability for rsa-md[4,5]-des - */ - -#ifndef MD -#define MD 5 -#endif /* MD */ - -#include "k5-int.h" -#if MD == 4 -#include "rsa-md4.h" -#endif /* MD == 4 */ -#if MD == 5 -#include "rsa-md5.h" -#endif /* MD == 5 */ -#include "des_int.h" - -#define MD5_K5BETA_COMPAT -#define MD4_K5BETA_COMPAT - -#if MD == 4 -#define CONFOUNDER_LENGTH RSA_MD4_DES_CONFOUND_LENGTH -#define NEW_CHECKSUM_LENGTH NEW_RSA_MD4_DES_CKSUM_LENGTH -#define OLD_CHECKSUM_LENGTH OLD_RSA_MD4_DES_CKSUM_LENGTH -#define CHECKSUM_TYPE CKSUMTYPE_RSA_MD4_DES -#ifdef MD4_K5BETA_COMPAT -#define K5BETA_COMPAT 1 -#else /* MD4_K5BETA_COMPAT */ -#undef K5BETA_COMPAT -#endif /* MD4_K5BETA_COMPAT */ -#define CKSUM_FUNCTION krb5_md4_crypto_sum_func -#define COMPAT_FUNCTION krb5_md4_crypto_compat_sum_func -#define VERIFY_FUNCTION krb5_md4_crypto_verify_func -#endif /* MD == 4 */ - -#if MD == 5 -#define CONFOUNDER_LENGTH RSA_MD5_DES_CONFOUND_LENGTH -#define NEW_CHECKSUM_LENGTH NEW_RSA_MD5_DES_CKSUM_LENGTH -#define OLD_CHECKSUM_LENGTH OLD_RSA_MD5_DES_CKSUM_LENGTH -#define CHECKSUM_TYPE CKSUMTYPE_RSA_MD5_DES -#ifdef MD5_K5BETA_COMPAT -#define K5BETA_COMPAT 1 -#else /* MD5_K5BETA_COMPAT */ -#undef K5BETA_COMPAT -#endif /* MD5_K5BETA_COMPAT */ -#define CKSUM_FUNCTION krb5_md5_crypto_sum_func -#define COMPAT_FUNCTION krb5_md5_crypto_compat_sum_func -#define VERIFY_FUNCTION krb5_md5_crypto_verify_func -#endif /* MD == 5 */ - -static void -print_checksum(text, number, message, checksum) - char *text; - int number; - char *message; - krb5_checksum *checksum; -{ - int i; - - printf("%s MD%d checksum(\"%s\") = ", text, number, message); - for (i=0; ilength; i++) - printf("%02x", checksum->contents[i]); - printf("\n"); -} - -/* - * Test the checksum verification of Old Style (tm) and correct RSA-MD[4,5]-DES - * checksums. - */ -int -main(argc, argv) - int argc; - char **argv; -{ - int msgindex; - krb5_context kcontext; - krb5_encrypt_block encblock; - krb5_keyblock keyblock; - krb5_error_code kret; - krb5_checksum oldstyle_checksum; - krb5_checksum newstyle_checksum; - krb5_data pwdata; - char *pwd; - - pwd = "test password"; - pwdata.length = strlen(pwd); - pwdata.data = pwd; - krb5_use_enctype(kcontext, &encblock, DEFAULT_KDC_ENCTYPE); - if ((kret = mit_des_string_to_key(&encblock, &keyblock, &pwdata, NULL))) { - printf("mit_des_string_to_key choked with %d\n", kret); - return(kret); - } - if ((kret = mit_des_process_key(&encblock, &keyblock))) { - printf("mit_des_process_key choked with %d\n", kret); - return(kret); - } - - oldstyle_checksum.length = OLD_CHECKSUM_LENGTH; - if (!(oldstyle_checksum.contents = (krb5_octet *) malloc(OLD_CHECKSUM_LENGTH))) { - printf("cannot get memory for old style checksum\n"); - return(ENOMEM); - } - newstyle_checksum.length = NEW_CHECKSUM_LENGTH; - if (!(newstyle_checksum.contents = (krb5_octet *) - malloc(NEW_CHECKSUM_LENGTH))) { - printf("cannot get memory for new style checksum\n"); - return(ENOMEM); - } - for (msgindex = 1; msgindex < argc; msgindex++) { - if ((kret = CKSUM_FUNCTION(argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length, - &newstyle_checksum))) { - printf("krb5_calculate_checksum choked with %d\n", kret); - break; - } - print_checksum("correct", MD, argv[msgindex], &newstyle_checksum); -#ifdef K5BETA_COMPAT - if ((kret = COMPAT_FUNCTION(argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length, - &oldstyle_checksum))) { - printf("old style calculate_checksum choked with %d\n", kret); - break; - } - print_checksum("old", MD, argv[msgindex], &oldstyle_checksum); -#endif /* K5BETA_COMPAT */ - if ((kret = VERIFY_FUNCTION(&newstyle_checksum, - argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length))) { - printf("verify on new checksum choked with %d\n", kret); - break; - } - printf("Verify succeeded for \"%s\"\n", argv[msgindex]); -#ifdef K5BETA_COMPAT - if ((kret = VERIFY_FUNCTION(&oldstyle_checksum, - argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length))) { - printf("verify on old checksum choked with %d\n", kret); - break; - } - printf("Compatible checksum verify succeeded for \"%s\"\n", - argv[msgindex]); -#endif /* K5BETA_COMPAT */ - newstyle_checksum.contents[0]++; - if (!(kret = VERIFY_FUNCTION(&newstyle_checksum, - argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length))) { - printf("verify on new checksum should have choked\n"); - break; - } - printf("Verify of bad checksum OK for \"%s\"\n", argv[msgindex]); -#ifdef K5BETA_COMPAT - oldstyle_checksum.contents[0]++; - if (!(kret = VERIFY_FUNCTION(&oldstyle_checksum, - argv[msgindex], - strlen(argv[msgindex]), - (krb5_pointer) keyblock.contents, - keyblock.length))) { - printf("verify on old checksum should have choked\n"); - break; - } - printf("Compatible checksum verify of altered checksum OK for \"%s\"\n", - argv[msgindex]); -#endif /* K5BETA_COMPAT */ - kret = 0; - } - if (!kret) - printf("%d tests passed successfully for MD%d checksum\n", argc-1, MD); - return(kret); -} diff --git a/src/lib/crypto/md5/t_mddriver.c b/src/lib/crypto/md5/t_mddriver.c deleted file mode 100644 index d894aaaec..000000000 --- a/src/lib/crypto/md5/t_mddriver.c +++ /dev/null @@ -1,323 +0,0 @@ -/* MDDRIVER.C - test driver for MD2, MD4 and MD5 - */ - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* The following makes MD default to MD5 if it has not already been - defined with C compiler flags. - */ -#ifndef MD -#define MD 5 -#endif - -#include "k5-int.h" - -#if MD == 2 -#include "md2.h" -#endif -#if MD == 4 -#include "rsa-md4.h" -#endif -#if MD == 5 -#include "rsa-md5.h" -#endif - -/* Length of test block, number of test blocks. - */ -#define TEST_BLOCK_LEN 1000 -#define TEST_BLOCK_COUNT 1000 - -static void MDString (char *); -static void MDTimeTrial (void); -static void MDTestSuite (void); -static void MDFile (char *); -static void MDFilter (void); -static void MDPrint (unsigned char [16]); - -struct md_test_entry { - char *string; - unsigned char digest[16]; -}; - -#if MD == 2 -#define MD_CTX krb5_MD2_CTX -#define MDInit krb5_MD2Init -#define MDUpdate krb5_MD2Update -#define MDFinal krb5_MD2Final -#endif - -#if MD == 4 -#define MD_CTX krb5_MD4_CTX -#define MDInit krb5_MD4Init -#define MDUpdate krb5_MD4Update -#define MDFinal krb5_MD4Final - -#define HAVE_TEST_SUITE -/* Test suite from RFC 1320 */ - -struct md_test_entry md_test_suite[] = { - { "", - {0x31, 0xd6, 0xcf, 0xe0, 0xd1, 0x6a, 0xe9, 0x31, - 0xb7, 0x3c, 0x59, 0xd7, 0xe0, 0xc0, 0x89, 0xc0 }}, - { "a", - {0xbd, 0xe5, 0x2c, 0xb3, 0x1d, 0xe3, 0x3e, 0x46, - 0x24, 0x5e, 0x05, 0xfb, 0xdb, 0xd6, 0xfb, 0x24 }}, - { "abc", - {0xa4, 0x48, 0x01, 0x7a, 0xaf, 0x21, 0xd8, 0x52, - 0x5f, 0xc1, 0x0a, 0xe8, 0x7a, 0xa6, 0x72, 0x9d }}, - { "message digest", - {0xd9, 0x13, 0x0a, 0x81, 0x64, 0x54, 0x9f, 0xe8, - 0x18, 0x87, 0x48, 0x06, 0xe1, 0xc7, 0x01, 0x4b }}, - { "abcdefghijklmnopqrstuvwxyz", - {0xd7, 0x9e, 0x1c, 0x30, 0x8a, 0xa5, 0xbb, 0xcd, - 0xee, 0xa8, 0xed, 0x63, 0xdf, 0x41, 0x2d, 0xa9 }}, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - {0x04, 0x3f, 0x85, 0x82, 0xf2, 0x41, 0xdb, 0x35, - 0x1c, 0xe6, 0x27, 0xe1, 0x53, 0xe7, 0xf0, 0xe4 }}, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", - {0xe3, 0x3b, 0x4d, 0xdc, 0x9c, 0x38, 0xf2, 0x19, - 0x9c, 0x3e, 0x7b, 0x16, 0x4f, 0xcc, 0x05, 0x36 }}, - {0, {0}} -}; - -#endif - -#if MD == 5 -#define MD_CTX krb5_MD5_CTX -#define MDInit krb5_MD5Init -#define MDUpdate krb5_MD5Update -#define MDFinal krb5_MD5Final - -#define HAVE_TEST_SUITE -/* Test suite from RFC 1321 */ - -struct md_test_entry md_test_suite[] = { - { "", - {0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04, - 0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e }}, - { "a", - {0x0c, 0xc1, 0x75, 0xb9, 0xc0, 0xf1, 0xb6, 0xa8, - 0x31, 0xc3, 0x99, 0xe2, 0x69, 0x77, 0x26, 0x61 }}, - { "abc", - {0x90, 0x01, 0x50, 0x98, 0x3c, 0xd2, 0x4f, 0xb0, - 0xd6, 0x96, 0x3f, 0x7d, 0x28, 0xe1, 0x7f, 0x72 }}, - { "message digest", - {0xf9, 0x6b, 0x69, 0x7d, 0x7c, 0xb7, 0x93, 0x8d, - 0x52, 0x5a, 0x2f, 0x31, 0xaa, 0xf1, 0x61, 0xd0 }}, - { "abcdefghijklmnopqrstuvwxyz", - {0xc3, 0xfc, 0xd3, 0xd7, 0x61, 0x92, 0xe4, 0x00, - 0x7d, 0xfb, 0x49, 0x6c, 0xca, 0x67, 0xe1, 0x3b }}, - { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - {0xd1, 0x74, 0xab, 0x98, 0xd2, 0x77, 0xd9, 0xf5, - 0xa5, 0x61, 0x1c, 0x2c, 0x9f, 0x41, 0x9d, 0x9f }}, - { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", - {0x57, 0xed, 0xf4, 0xa2, 0x2b, 0xe3, 0xc9, 0x55, - 0xac, 0x49, 0xda, 0x2e, 0x21, 0x07, 0xb6, 0x7a }}, - { 0, {0} } -}; - -#endif - -/* Main driver. - -Arguments (may be any combination): - -sstring - digests string - -t - runs time trial - -x - runs test script - filename - digests file - (none) - digests standard input - */ -int main (argc, argv) -int argc; -char *argv[]; -{ - int i; - - if (argc > 1) - for (i = 1; i < argc; i++) - if (argv[i][0] == '-' && argv[i][1] == 's') - MDString (argv[i] + 2); - else if (strcmp (argv[i], "-t") == 0) - MDTimeTrial (); - else if (strcmp (argv[i], "-x") == 0) - MDTestSuite (); - else - MDFile (argv[i]); - else - MDFilter (); - - return (0); -} - -/* Digests a string and prints the result. - */ -static void MDString (string) -char *string; -{ - MD_CTX context; - unsigned int len = strlen (string); - - MDInit (&context); - MDUpdate (&context, (unsigned char *) string, len); - MDFinal (&context); - - printf ("MD%d (\"%s\") = ", MD, string); - MDPrint (context.digest); - printf ("\n"); -} - -/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte - blocks. - */ -static void MDTimeTrial () -{ - MD_CTX context; - time_t endTime, startTime; - unsigned char block[TEST_BLOCK_LEN]; - unsigned int i; - - printf("MD%d time trial. Digesting %d %d-byte blocks ...", MD, - TEST_BLOCK_LEN, TEST_BLOCK_COUNT); - - /* Initialize block */ - for (i = 0; i < TEST_BLOCK_LEN; i++) - block[i] = (unsigned char)(i & 0xff); - - /* Start timer */ - time (&startTime); - - /* Digest blocks */ - MDInit (&context); - for (i = 0; i < TEST_BLOCK_COUNT; i++) - MDUpdate (&context, block, TEST_BLOCK_LEN); - MDFinal (&context); - - /* Stop timer */ - time (&endTime); - - printf (" done\n"); - printf ("Digest = "); - MDPrint (context.digest); - printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); - printf - ("Speed = %ld bytes/second\n", - (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); -} - -/* Digests a reference suite of strings and prints the results. - */ -static void MDTestSuite () -{ -#ifdef HAVE_TEST_SUITE - MD_CTX context; - struct md_test_entry *entry; - int i, num_tests = 0, num_failed = 0; - - printf ("MD%d test suite:\n\n", MD); - for (entry = md_test_suite; entry->string; entry++) { - unsigned int len = strlen (entry->string); - - MDInit (&context); - MDUpdate (&context, (unsigned char *) entry->string, len); - MDFinal (&context); - - printf ("MD%d (\"%s\") = ", MD, entry->string); - MDPrint (context.digest); - printf ("\n"); - for (i=0; i < 16; i++) { - if (context.digest[i] != entry->digest[i]) { - printf("\tIncorrect MD%d digest! Should have been:\n\t\t ", - MD); - MDPrint(entry->digest); - printf("\n"); - num_failed++; - } - } - num_tests++; - } - if (num_failed) { - printf("%d out of %d tests failed for MD%d!!!\n", num_failed, - num_tests, MD); - exit(1); - } else { - printf ("%d tests passed successfully for MD%d.\n", num_tests, MD); - exit(0); - } -#else - - printf ("MD%d test suite:\n", MD); - MDString (""); - MDString ("a"); - MDString ("abc"); - MDString ("message digest"); - MDString ("abcdefghijklmnopqrstuvwxyz"); - MDString - ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); - MDString - ("12345678901234567890123456789012345678901234567890123456789012345678901234567890"); -#endif -} - -/* Digests a file and prints the result. */ - -static void MDFile (filename) - char *filename; -{ - FILE *file; - MD_CTX context; - int len; - unsigned char buffer[1024]; - - if ((file = fopen (filename, "rb")) == NULL) - printf ("%s can't be opened\n", filename); - else { - MDInit (&context); - while ((len = fread (buffer, 1, 1024, file)) != 0) - MDUpdate (&context, buffer, len); - MDFinal (&context); - - fclose (file); - - printf ("MD%d (%s) = ", MD, filename); - MDPrint (context.digest); - printf ("\n"); - } -} - -/* Digests the standard input and prints the result. - */ -static void MDFilter () -{ - MD_CTX context; - int len; - unsigned char buffer[16]; - - MDInit (&context); - while ((len = fread (buffer, 1, 16, stdin)) != 0) - MDUpdate (&context, buffer, len); - MDFinal (&context); - - MDPrint (context.digest); - printf ("\n"); -} - -/* Prints a message digest in hexadecimal. - */ -static void MDPrint (digest) -unsigned char digest[16]; -{ - unsigned int i; - - for (i = 0; i < 16; i++) - printf ("%02x", digest[i]); -} diff --git a/src/lib/crypto/nfold.c b/src/lib/crypto/nfold.c deleted file mode 100644 index 1f1902d1c..000000000 --- a/src/lib/crypto/nfold.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#ifdef HAVE_MEMORY_H -#include -#endif - -/* -n-fold(k-bits): - l = lcm(n,k) - r = l/k - s = k-bits | k-bits rot 13 | k-bits rot 13*2 | ... | k-bits rot 13*(r-1) - compute the 1's complement sum: - n-fold = s[0..n-1]+s[n..2n-1]+s[2n..3n-1]+..+s[(k-1)*n..k*n-1] -*/ - -/* representation: msb first, assume n and k are multiples of 8, and - that k>=16. this is the case of all the cryptosystems which are - likely to be used. this function can be replaced if that - assumption ever fails. */ - -/* input length is in bits */ - -void -krb5_nfold(unsigned int inbits, const unsigned char *in, unsigned int outbits, - unsigned char *out) -{ - int a,b,c,lcm; - int byte, i, msbit; - - /* the code below is more readable if I make these bytes - instead of bits */ - - inbits >>= 3; - outbits >>= 3; - - /* first compute lcm(n,k) */ - - a = outbits; - b = inbits; - - while(b != 0) { - c = b; - b = a%b; - a = c; - } - - lcm = outbits*inbits/a; - - /* now do the real work */ - - memset(out, 0, outbits); - byte = 0; - - /* this will end up cycling through k lcm(k,n)/k times, which - is correct */ - for (i=lcm-1; i>=0; i--) { - /* compute the msbit in k which gets added into this byte */ - msbit = (/* first, start with the msbit in the first, unrotated - byte */ - ((inbits<<3)-1) - /* then, for each byte, shift to the right for each - repetition */ - +(((inbits<<3)+13)*(i/inbits)) - /* last, pick out the correct byte within that - shifted repetition */ - +((inbits-(i%inbits))<<3) - )%(inbits<<3); - - /* pull out the byte value itself */ - byte += (((in[((inbits-1)-(msbit>>3))%inbits]<<8)| - (in[((inbits)-(msbit>>3))%inbits])) - >>((msbit&7)+1))&0xff; - - /* do the addition */ - byte += out[i%outbits]; - out[i%outbits] = byte&0xff; - -#if 0 - printf("msbit[%d] = %d\tbyte = %02x\tsum = %03x\n", i, msbit, - (((in[((inbits-1)-(msbit>>3))%inbits]<<8)| - (in[((inbits)-(msbit>>3))%inbits])) - >>((msbit&7)+1))&0xff, byte); -#endif - - /* keep around the carry bit, if any */ - byte >>= 8; - -#if 0 - printf("carry=%d\n", byte); -#endif - } - - /* if there's a carry bit left over, add it back in */ - if (byte) { - for (i=outbits-1; i>=0; i--) { - /* do the addition */ - byte += out[i]; - out[i] = byte&0xff; - - /* keep around the carry bit, if any */ - byte >>= 8; - } - } -} - diff --git a/src/lib/crypto/old/Makefile.in b/src/lib/crypto/old/Makefile.in deleted file mode 100644 index 7e68315f2..000000000 --- a/src/lib/crypto/old/Makefile.in +++ /dev/null @@ -1,35 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/old -mydir=lib/crypto/old -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/../des -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=old -##DOS##OBJFILE=..\$(OUTPRE)old.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= old_decrypt.o old_encrypt.o des_stringtokey.o - -OBJS= $(OUTPRE)des_stringtokey.$(OBJEXT) $(OUTPRE)old_decrypt.$(OBJEXT) $(OUTPRE)old_encrypt.$(OBJEXT) - -SRCS= $(srcdir)/des_stringtokey.c $(srcdir)/old_decrypt.c \ - $(srcdir)/old_encrypt.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/old/deps b/src/lib/crypto/old/deps deleted file mode 100644 index 38a00ddf6..000000000 --- a/src/lib/crypto/old/deps +++ /dev/null @@ -1,34 +0,0 @@ -# -# Generated makefile dependencies follow. -# -des_stringtokey.so des_stringtokey.po $(OUTPRE)des_stringtokey.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/../des/des_int.h \ - des_stringtokey.c old.h -old_decrypt.so old_decrypt.po $(OUTPRE)old_decrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h old.h old_decrypt.c -old_encrypt.so old_encrypt.po $(OUTPRE)old_encrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h old.h old_encrypt.c diff --git a/src/lib/crypto/old/des_stringtokey.c b/src/lib/crypto/old/des_stringtokey.c deleted file mode 100644 index 2bacb4ef9..000000000 --- a/src/lib/crypto/old/des_stringtokey.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "old.h" -#include - -/* XXX */ -extern krb5_error_code mit_des_string_to_key_int -(krb5_keyblock * keyblock, - const krb5_data * data, - const krb5_data * salt); - -krb5_error_code -krb5int_des_string_to_key(const struct krb5_enc_provider *enc, - const krb5_data *string, - const krb5_data *salt, const krb5_data *parm, - krb5_keyblock *key) -{ - int type; - if (parm ) { - if (parm->length != 1) - return KRB5_ERR_BAD_S2K_PARAMS; - type = parm->data[0]; - } - else type = 0; - switch(type) { - case 0: - return(mit_des_string_to_key_int(key, string, salt)); - case 1: - return mit_afs_string_to_key(key, string, salt); - default: - return KRB5_ERR_BAD_S2K_PARAMS; - } -} diff --git a/src/lib/crypto/old/old.h b/src/lib/crypto/old/old.h deleted file mode 100644 index 94ee6421e..000000000 --- a/src/lib/crypto/old/old.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -void krb5_old_encrypt_length -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t input, size_t *length); - -krb5_error_code krb5_old_encrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output); - -krb5_error_code krb5_old_decrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); - -krb5_error_code krb5int_des_string_to_key -(const struct krb5_enc_provider *enc, - const krb5_data *string, const krb5_data *salt, - const krb5_data *params, - krb5_keyblock *key); diff --git a/src/lib/crypto/old/old_decrypt.c b/src/lib/crypto/old/old_decrypt.c deleted file mode 100644 index cfbbd7272..000000000 --- a/src/lib/crypto/old/old_decrypt.c +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "old.h" - -krb5_error_code -krb5_old_decrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, - krb5_data *arg_output) -{ - krb5_error_code ret; - size_t blocksize, hashsize, plainsize; - unsigned char *cksumdata, *cn; - krb5_data output, cksum, crcivec; - int alloced; - - blocksize = enc->block_size; - hashsize = hash->hashsize; - - plainsize = input->length - blocksize - hashsize; - - if (arg_output->length < plainsize) - return(KRB5_BAD_MSIZE); - - /* if there's enough space to work in the app buffer, use it, - otherwise allocate our own */ - - if ((cksumdata = (unsigned char *) malloc(hashsize)) == NULL) - return(ENOMEM); - - if (arg_output->length < input->length) { - output.length = input->length; - - if ((output.data = (char *) malloc(output.length)) == NULL) { - free(cksumdata); - return(ENOMEM); - } - - alloced = 1; - } else { - output.length = input->length; - - output.data = arg_output->data; - - alloced = 0; - } - - /* decrypt it */ - - /* save last ciphertext block in case we decrypt in place */ - if (ivec != NULL && ivec->length == blocksize) { - cn = malloc(blocksize); - if (cn == NULL) { - ret = ENOMEM; - goto cleanup; - } - memcpy(cn, input->data + input->length - blocksize, blocksize); - } else - cn = NULL; - - /* XXX this is gross, but I don't have much choice */ - if ((key->enctype == ENCTYPE_DES_CBC_CRC) && (ivec == 0)) { - crcivec.length = key->length; - crcivec.data = (char *) key->contents; - ivec = &crcivec; - } - - if ((ret = ((*(enc->decrypt))(key, ivec, input, &output)))) - goto cleanup; - - /* verify the checksum */ - - memcpy(cksumdata, output.data+blocksize, hashsize); - memset(output.data+blocksize, 0, hashsize); - - cksum.length = hashsize; - cksum.data = output.data+blocksize; - - if ((ret = ((*(hash->hash))(1, &output, &cksum)))) - goto cleanup; - - if (memcmp(cksum.data, cksumdata, cksum.length) != 0) { - ret = KRB5KRB_AP_ERR_BAD_INTEGRITY; - goto cleanup; - } - - /* copy the plaintext around */ - - if (alloced) { - memcpy(arg_output->data, output.data+blocksize+hashsize, - plainsize); - } else { - memmove(arg_output->data, arg_output->data+blocksize+hashsize, - plainsize); - } - arg_output->length = plainsize; - - /* update ivec */ - if (cn != NULL) - memcpy(ivec->data, cn, blocksize); - - ret = 0; - -cleanup: - if (alloced) { - memset(output.data, 0, output.length); - free(output.data); - } - - if (cn != NULL) - free(cn); - memset(cksumdata, 0, hashsize); - free(cksumdata); - return(ret); -} diff --git a/src/lib/crypto/old/old_encrypt.c b/src/lib/crypto/old/old_encrypt.c deleted file mode 100644 index 98bd109e0..000000000 --- a/src/lib/crypto/old/old_encrypt.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "old.h" - -void -krb5_old_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, - size_t *length) -{ - size_t blocksize, hashsize; - - blocksize = enc->block_size; - hashsize = hash->hashsize; - - *length = krb5_roundup(blocksize+hashsize+inputlen, blocksize); -} - -krb5_error_code -krb5_old_encrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - const krb5_data *input, - krb5_data *output) -{ - krb5_error_code ret; - size_t blocksize, hashsize, enclen; - krb5_data datain, crcivec; - int real_ivec; - - blocksize = enc->block_size; - hashsize = hash->hashsize; - - krb5_old_encrypt_length(enc, hash, input->length, &enclen); - - if (output->length < enclen) - return(KRB5_BAD_MSIZE); - - output->length = enclen; - - /* fill in confounded, padded, plaintext buffer with zero checksum */ - - memset(output->data, 0, output->length); - - datain.length = blocksize; - datain.data = output->data; - - if ((ret = krb5_c_random_make_octets(/* XXX */ 0, &datain))) - return(ret); - memcpy(output->data+blocksize+hashsize, input->data, input->length); - - /* compute the checksum */ - - datain.length = hashsize; - datain.data = output->data+blocksize; - - if ((ret = ((*(hash->hash))(1, output, &datain)))) - goto cleanup; - - /* encrypt it */ - - /* XXX this is gross, but I don't have much choice */ - if ((key->enctype == ENCTYPE_DES_CBC_CRC) && (ivec == 0)) { - crcivec.length = key->length; - crcivec.data = (char *) key->contents; - ivec = &crcivec; - real_ivec = 0; - } else - real_ivec = 1; - - if ((ret = ((*(enc->encrypt))(key, ivec, output, output)))) - goto cleanup; - - /* update ivec */ - if (real_ivec && ivec != NULL && ivec->length == blocksize) - memcpy(ivec->data, output->data + output->length - blocksize, - blocksize); -cleanup: - if (ret) - memset(output->data, 0, output->length); - - return(ret); -} diff --git a/src/lib/crypto/old_api_glue.c b/src/lib/crypto/old_api_glue.c deleted file mode 100644 index 4db0c3359..000000000 --- a/src/lib/crypto/old_api_glue.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -krb5_error_code KRB5_CALLCONV -krb5_encrypt(krb5_context context, krb5_const_pointer inptr, - krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, - krb5_pointer ivec) -{ - krb5_data inputd, ivecd; - krb5_enc_data outputd; - size_t blocksize, outlen; - krb5_error_code ret; - - if (ivec) { - if ((ret = krb5_c_block_size(context, eblock->key->enctype, &blocksize))) - return(ret); - - ivecd.length = blocksize; - ivecd.data = ivec; - } - - /* size is the length of the input cleartext data */ - inputd.length = size; - inputd.data = inptr; - - /* The size of the output buffer isn't part of the old api. Not too - safe. So, we assume here that it's big enough. */ - if ((ret = krb5_c_encrypt_length(context, eblock->key->enctype, size, - &outlen))) - return(ret); - - outputd.ciphertext.length = outlen; - outputd.ciphertext.data = outptr; - - return(krb5_c_encrypt(context, eblock->key, 0, ivec?&ivecd:0, - &inputd, &outputd)); -} - -krb5_error_code KRB5_CALLCONV -krb5_decrypt(krb5_context context, krb5_const_pointer inptr, - krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, - krb5_pointer ivec) -{ - krb5_enc_data inputd; - krb5_data outputd, ivecd; - size_t blocksize; - krb5_error_code ret; - - if (ivec) { - if ((ret = krb5_c_block_size(context, eblock->key->enctype, &blocksize))) - return(ret); - - ivecd.length = blocksize; - ivecd.data = ivec; - } - - /* size is the length of the input ciphertext data */ - inputd.enctype = eblock->key->enctype; - inputd.ciphertext.length = size; - inputd.ciphertext.data = inptr; - - /* we don't really know how big this is, but the code tends to assume - that the output buffer size should be the same as the input - buffer size */ - outputd.length = size; - outputd.data = outptr; - - return(krb5_c_decrypt(context, eblock->key, 0, ivec?&ivecd:0, - &inputd, &outputd)); -} - -krb5_error_code KRB5_CALLCONV -krb5_process_key(krb5_context context, krb5_encrypt_block *eblock, - const krb5_keyblock *key) -{ - eblock->key = (krb5_keyblock *) key; - - return(0); -} - -krb5_error_code KRB5_CALLCONV -krb5_finish_key(krb5_context context, krb5_encrypt_block *eblock) -{ - return(0); -} - -krb5_error_code KRB5_CALLCONV -krb5_string_to_key(krb5_context context, const krb5_encrypt_block *eblock, - krb5_keyblock *keyblock, const krb5_data *data, - const krb5_data *salt) -{ - return(krb5_c_string_to_key(context, eblock->crypto_entry, data, salt, - keyblock)); -} - -krb5_error_code KRB5_CALLCONV -krb5_init_random_key(krb5_context context, const krb5_encrypt_block *eblock, - const krb5_keyblock *keyblock, krb5_pointer *ptr) -{ - krb5_data data; - - data.length = keyblock->length; - data.data = (char *) keyblock->contents; - - return(krb5_c_random_seed(context, &data)); -} - -krb5_error_code KRB5_CALLCONV -krb5_finish_random_key(krb5_context context, const krb5_encrypt_block *eblock, - krb5_pointer *ptr) -{ - return(0); -} - -krb5_error_code KRB5_CALLCONV -krb5_random_key(krb5_context context, const krb5_encrypt_block *eblock, - krb5_pointer ptr, krb5_keyblock **keyblock) -{ - krb5_keyblock *key; - krb5_error_code ret; - - if ((key = (krb5_keyblock *) malloc(sizeof(krb5_keyblock))) == NULL) - return(ENOMEM); - - if ((ret = krb5_c_make_random_key(context, eblock->crypto_entry, key))) { - free(key); - key = NULL; - } - - *keyblock = key; - - return(ret); -} - -krb5_enctype KRB5_CALLCONV -krb5_eblock_enctype(krb5_context context, const krb5_encrypt_block *eblock) -{ - return(eblock->crypto_entry); -} - -krb5_error_code KRB5_CALLCONV -krb5_use_enctype(krb5_context context, krb5_encrypt_block *eblock, - krb5_enctype enctype) -{ - eblock->crypto_entry = enctype; - - return(0); -} - -size_t KRB5_CALLCONV -krb5_encrypt_size(size_t length, krb5_enctype crypto) -{ - size_t ret; - - if (krb5_c_encrypt_length(/* XXX */ 0, crypto, length, &ret)) - return(-1); /* XXX */ - - return(ret); -} - -size_t KRB5_CALLCONV -krb5_checksum_size(krb5_context context, krb5_cksumtype ctype) -{ - size_t ret; - - if (krb5_c_checksum_length(context, ctype, &ret)) - return(-1); /* XXX */ - - return(ret); -} - -krb5_error_code KRB5_CALLCONV -krb5_calculate_checksum(krb5_context context, krb5_cksumtype ctype, - krb5_const_pointer in, size_t in_length, - krb5_const_pointer seed, size_t seed_length, - krb5_checksum *outcksum) -{ - krb5_data input; - krb5_keyblock key; - krb5_error_code ret; - krb5_checksum cksum; - - input.data = in; - input.length = in_length; - - key.length = seed_length; - key.contents = seed; - - if ((ret = krb5_c_make_checksum(context, ctype, &key, 0, &input, &cksum))) - return(ret); - - if (outcksum->length < cksum.length) { - memset(cksum.contents, 0, cksum.length); - free(cksum.contents); - return(KRB5_BAD_MSIZE); - } - - outcksum->magic = cksum.magic; - outcksum->checksum_type = cksum.checksum_type; - memcpy(outcksum->contents, cksum.contents, cksum.length); - outcksum->length = cksum.length; - - free(cksum.contents); - - return(0); -} - -krb5_error_code KRB5_CALLCONV -krb5_verify_checksum(krb5_context context, krb5_cksumtype ctype, - const krb5_checksum *cksum, krb5_const_pointer in, - size_t in_length, krb5_const_pointer seed, - size_t seed_length) -{ - krb5_data input; - krb5_keyblock key; - krb5_error_code ret; - krb5_boolean valid; - - input.data = in; - input.length = in_length; - - key.length = seed_length; - key.contents = seed; - - if ((ret = krb5_c_verify_checksum(context, &key, 0, &input, cksum, - &valid))) - return(ret); - - if (!valid) - return(KRB5KRB_AP_ERR_BAD_INTEGRITY); - - return(0); -} - -krb5_error_code KRB5_CALLCONV -krb5_random_confounder(size_t size, krb5_pointer ptr) -{ - krb5_data random_data; - - random_data.length = size; - random_data.data = ptr; - - return(krb5_c_random_make_octets(/* XXX */ 0, &random_data)); -} - -krb5_error_code krb5_encrypt_data(krb5_context context, krb5_keyblock *key, - krb5_pointer ivec, krb5_data *data, - krb5_enc_data *enc_data) -{ - krb5_error_code ret; - size_t enclen, blocksize; - krb5_data ivecd; - - if ((ret = krb5_c_encrypt_length(context, key->enctype, data->length, - &enclen))) - return(ret); - - if (ivec) { - if ((ret = krb5_c_block_size(context, key->enctype, &blocksize))) - return(ret); - - ivecd.length = blocksize; - ivecd.data = ivec; - } - - enc_data->magic = KV5M_ENC_DATA; - enc_data->kvno = 0; - enc_data->enctype = key->enctype; - enc_data->ciphertext.length = enclen; - if ((enc_data->ciphertext.data = malloc(enclen)) == NULL) - return(ENOMEM); - - if ((ret = krb5_c_encrypt(context, key, 0, ivec?&ivecd:0, data, enc_data))) - free(enc_data->ciphertext.data); - - return(ret); -} - -krb5_error_code krb5_decrypt_data(krb5_context context, krb5_keyblock *key, - krb5_pointer ivec, krb5_enc_data *enc_data, - krb5_data *data) -{ - krb5_error_code ret; - krb5_data ivecd; - size_t blocksize; - - if (ivec) { - if ((ret = krb5_c_block_size(context, key->enctype, &blocksize))) - return(ret); - - ivecd.length = blocksize; - ivecd.data = ivec; - } - - data->length = enc_data->ciphertext.length; - if ((data->data = (char *) malloc(data->length)) == NULL) - return(ENOMEM); - - if ((ret = krb5_c_decrypt(context, key, 0, ivec?&ivecd:0, enc_data, data))) - free(data->data); - - return(0); -} diff --git a/src/lib/crypto/pbkdf2.c b/src/lib/crypto/pbkdf2.c deleted file mode 100644 index d897e9a71..000000000 --- a/src/lib/crypto/pbkdf2.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * lib/crypto/pbkdf2.c - * - * Copyright 2002, 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Implementation of PBKDF2 from RFC 2898. - * Not currently used; likely to be used when we get around to AES support. - */ - -#include -#include "k5-int.h" -#include "hash_provider.h" - -/* Not exported, for now. */ -static krb5_error_code -krb5int_pbkdf2 (krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, - krb5_data *), - size_t hlen, const krb5_data *pass, const krb5_data *salt, - unsigned long count, const krb5_data *output); - -static int debug_hmac = 0; - -static void printd (const char *descr, krb5_data *d) { - unsigned int i, j; - const int r = 16; - - printf("%s:", descr); - - for (i = 0; i < d->length; i += r) { - printf("\n %04x: ", i); - for (j = i; j < i + r && j < d->length; j++) - printf(" %02x", 0xff & d->data[j]); - for (; j < i + r; j++) - printf(" "); - printf(" "); - for (j = i; j < i + r && j < d->length; j++) { - int c = 0xff & d->data[j]; - printf("%c", isprint(c) ? c : '.'); - } - } - printf("\n"); -} -static void printk(const char *descr, krb5_keyblock *k) { - krb5_data d; - d.data = (char *) k->contents; - d.length = k->length; - printd(descr, &d); -} - -static krb5_error_code -F(char *output, char *u_tmp1, char *u_tmp2, - krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, krb5_data *), - size_t hlen, - const krb5_data *pass, const krb5_data *salt, - unsigned long count, int i) -{ - unsigned char ibytes[4]; - size_t tlen; - unsigned int j, k; - krb5_keyblock pdata; - krb5_data sdata; - krb5_data out; - krb5_error_code err; - - pdata.contents = pass->data; - pdata.length = pass->length; - -#if 0 - printf("F(i=%d, count=%lu, pass=%d:%s)\n", i, count, - pass->length, pass->data); - printk("F password", &pdata); -#endif - - /* Compute U_1. */ - store_32_be(i, ibytes); - - tlen = salt->length; - memcpy(u_tmp2, salt->data, tlen); - memcpy(u_tmp2 + tlen, ibytes, 4); - tlen += 4; - sdata.data = u_tmp2; - sdata.length = tlen; - -#if 0 - printd("initial salt", &sdata); -#endif - - out.data = u_tmp1; - out.length = hlen; - -#if 0 - printf("F: computing hmac #1 (U_1) with %s\n", pdata.contents); -#endif - err = (*prf)(&pdata, &sdata, &out); - if (err) - return err; -#if 0 - printd("F: prf return value", &out); -#endif - memcpy(output, u_tmp1, hlen); - - /* Compute U_2, .. U_c. */ - sdata.length = hlen; - for (j = 2; j <= count; j++) { -#if 0 - printf("F: computing hmac #%d (U_%d)\n", j, j); -#endif - memcpy(u_tmp2, u_tmp1, hlen); - err = (*prf)(&pdata, &sdata, &out); - if (err) - return err; -#if 0 - printd("F: prf return value", &out); -#endif - /* And xor them together. */ - for (k = 0; k < hlen; k++) - output[k] ^= u_tmp1[k]; -#if 0 - printf("F: xor result:\n"); - for (k = 0; k < hlen; k++) - printf(" %02x", 0xff & output[k]); - printf("\n"); -#endif - } - return 0; -} - -static krb5_error_code -krb5int_pbkdf2 (krb5_error_code (*prf)(krb5_keyblock *, krb5_data *, - krb5_data *), - size_t hlen, - const krb5_data *pass, const krb5_data *salt, - unsigned long count, const krb5_data *output) -{ - int l, r, i; - char *utmp1, *utmp2; - char utmp3[20]; /* XXX length shouldn't be hardcoded! */ - - if (output->length == 0 || hlen == 0) - abort(); - /* Step 1 & 2. */ - if (output->length / hlen > 0xffffffff) - abort(); - /* Step 2. */ - l = (output->length + hlen - 1) / hlen; - r = output->length - (l - 1) * hlen; - - utmp1 = /*output + dklen; */ malloc(hlen); - if (utmp1 == NULL) - return ENOMEM; - utmp2 = /*utmp1 + hlen; */ malloc(salt->length + 4 + hlen); - if (utmp2 == NULL) { - free(utmp1); - return ENOMEM; - } - - /* Step 3. */ - for (i = 1; i <= l; i++) { -#if 0 - int j; -#endif - krb5_error_code err; - char *out; - - if (i == l) - out = utmp3; - else - out = output->data + (i-1) * hlen; - err = F(out, utmp1, utmp2, prf, hlen, pass, salt, count, i); - if (err) { - free(utmp1); - free(utmp2); - return err; - } - if (i == l) - memcpy(output->data + (i-1) * hlen, utmp3, - output->length - (i-1) * hlen); - -#if 0 - printf("after F(%d), @%p:\n", i, output->data); - for (j = (i-1) * hlen; j < i * hlen; j++) - printf(" %02x", 0xff & output->data[j]); - printf ("\n"); -#endif - } - free(utmp1); - free(utmp2); - return 0; -} - -static krb5_error_code hmac1(const struct krb5_hash_provider *h, - krb5_keyblock *key, krb5_data *in, krb5_data *out) -{ - char tmp[40]; - size_t blocksize, hashsize; - krb5_error_code err; - krb5_keyblock k; - - k = *key; - key = &k; - if (debug_hmac) - printk(" test key", key); - blocksize = h->blocksize; - hashsize = h->hashsize; - if (hashsize > sizeof(tmp)) - abort(); - if (key->length > blocksize) { - krb5_data d, d2; - d.data = (char *) key->contents; - d.length = key->length; - d2.data = tmp; - d2.length = hashsize; - err = h->hash (1, &d, &d2); - if (err) - return err; - key->length = d2.length; - key->contents = (krb5_octet *) d2.data; - if (debug_hmac) - printk(" pre-hashed key", key); - } - if (debug_hmac) - printd(" hmac input", in); - err = krb5_hmac(h, key, 1, in, out); - if (err == 0 && debug_hmac) - printd(" hmac output", out); - return err; -} - -static krb5_error_code -foo(krb5_keyblock *pass, krb5_data *salt, krb5_data *out) -{ - krb5_error_code err; - - memset(out->data, 0, out->length); - err = hmac1 (&krb5int_hash_sha1, pass, salt, out); - return err; -} - -krb5_error_code -krb5int_pbkdf2_hmac_sha1 (const krb5_data *out, unsigned long count, - const krb5_data *pass, const krb5_data *salt) -{ - return krb5int_pbkdf2 (foo, 20, pass, salt, count, out); -} diff --git a/src/lib/crypto/prf.c b/src/lib/crypto/prf.c deleted file mode 100644 index 67e1bc8a3..000000000 --- a/src/lib/crypto/prf.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * lib/crypto/prf.c - * - * Copyright (C) 2004 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * This contains the implementation of krb5_c_prf, which will find - *the enctype-specific PRF and then generate pseudo-random data. This - *function yields krb5_c_prf_length bytes of output. - */ - - -#include "k5-int.h" -#include "etypes.h" - -#include - -krb5_error_code KRB5_CALLCONV -krb5_c_prf_length(krb5_context context, krb5_enctype enctype, - size_t *len) -{ - int i; - assert (len); - - for (i=0; idata); - - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - output->magic = KV5M_DATA; - if (!krb5_enctypes_list[i].prf) - return (KRB5_CRYPTO_INTERNAL); - krb5_c_prf_length (context, key->enctype, &len); - if (len != output->length) - return (KRB5_CRYPTO_INTERNAL); - return((*(krb5_enctypes_list[i].prf)) - (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash, - key, input, output)); -} - diff --git a/src/lib/crypto/prng.c b/src/lib/crypto/prng.c deleted file mode 100644 index f9647eae2..000000000 --- a/src/lib/crypto/prng.c +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2001, 2002, 2004, 2007, 2008 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "enc_provider.h" -#include -#include "k5-thread.h" - -#include "yarrow.h" -static Yarrow_CTX y_ctx; -#define yarrow_lock krb5int_yarrow_lock -k5_mutex_t yarrow_lock = K5_MUTEX_PARTIAL_INITIALIZER; - -/* Helper function to estimate entropy based on sample length - * and where it comes from. - */ - -static size_t -entropy_estimate (unsigned int randsource, size_t length) -{ - switch (randsource) { - case KRB5_C_RANDSOURCE_OLDAPI: - return (4*length); - case KRB5_C_RANDSOURCE_OSRAND: - return (8*length); - case KRB5_C_RANDSOURCE_TRUSTEDPARTY: - return (4*length); - case KRB5_C_RANDSOURCE_TIMING:return (2); - case KRB5_C_RANDSOURCE_EXTERNAL_PROTOCOL: - return (0); - default: - abort(); - } -return (0); -} - -int krb5int_prng_init(void) -{ - unsigned i; - int yerr; - - yerr = k5_mutex_finish_init(&yarrow_lock); - if (yerr) - return yerr; - - yerr = krb5int_yarrow_init (&y_ctx, NULL); - if ((yerr != YARROW_OK) && (yerr != YARROW_NOT_SEEDED)) - return KRB5_CRYPTO_INTERNAL; - - for (i=0; i < KRB5_C_RANDSOURCE_MAX; i++ ) { - unsigned source_id; - if (krb5int_yarrow_new_source (&y_ctx, &source_id) != YARROW_OK ) - return KRB5_CRYPTO_INTERNAL; - assert (source_id == i); - } - - return 0; -} - -krb5_error_code KRB5_CALLCONV -krb5_c_random_add_entropy (krb5_context context, unsigned int randsource, - const krb5_data *data) -{ - int yerr; - - /* Make sure the mutex got initialized. */ - yerr = krb5int_crypto_init(); - if (yerr) - return yerr; - /* Now, finally, feed in the data. */ - yerr = krb5int_yarrow_input (&y_ctx, randsource, - data->data, data->length, - entropy_estimate (randsource, data->length)); - if (yerr != YARROW_OK) - return (KRB5_CRYPTO_INTERNAL); - return (0); -} - -krb5_error_code KRB5_CALLCONV -krb5_c_random_seed (krb5_context context, krb5_data *data) -{ - return krb5_c_random_add_entropy (context, KRB5_C_RANDSOURCE_OLDAPI, data); -} - -krb5_error_code KRB5_CALLCONV -krb5_c_random_make_octets(krb5_context context, krb5_data *data) -{ - int yerr; - yerr = krb5int_yarrow_output (&y_ctx, data->data, data->length); - if (yerr == YARROW_NOT_SEEDED) { - yerr = krb5int_yarrow_reseed (&y_ctx, YARROW_SLOW_POOL); - if (yerr == YARROW_OK) - yerr = krb5int_yarrow_output (&y_ctx, data->data, data->length); - } - if ( yerr != YARROW_OK) - return (KRB5_CRYPTO_INTERNAL); - return(0); -} - -void krb5int_prng_cleanup (void) -{ - krb5int_yarrow_final (&y_ctx); - k5_mutex_destroy(&yarrow_lock); -} - - -/* - * Routines to get entropy from the OS. For UNIX we try /dev/urandom - * and /dev/random. Currently we don't do anything for Windows. - */ -#if defined(_WIN32) - -krb5_error_code KRB5_CALLCONV -krb5_c_random_os_entropy (krb5_context context, int strong, int *success) -{ - if (success) - *success = 0; - return 0; -} - -#else /*Windows*/ -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_SYS_STAT_H -#include -#endif - -/* - * Helper function to read entropy from a random device. Takes the - * name of a device, opens it, makes sure it is a device and if so, - * reads entropy. Returns a boolean indicating whether entropy was - * read. - */ - -static int -read_entropy_from_device (krb5_context context, const char *device) -{ - krb5_data data; - struct stat sb; - int fd; - unsigned char buf[YARROW_SLOW_THRESH/8], *bp; - int left; - fd = open (device, O_RDONLY); - if (fd == -1) - return 0; - set_cloexec_fd(fd); - if (fstat (fd, &sb) == -1 || S_ISREG(sb.st_mode)) { - close(fd); - return 0; - } - - for (bp = buf, left = sizeof (buf); left > 0;) { - ssize_t count; - count = read (fd, bp, (unsigned) left); - if (count <= 0) { - close(fd); - return 0; - } - left -= count; - bp += count; - } - close (fd); - data.length = sizeof (buf); - data.data = ( char * ) buf; - if ( krb5_c_random_add_entropy (context, KRB5_C_RANDSOURCE_OSRAND, - &data) != 0) { - return 0; - } - return 1; -} - -krb5_error_code KRB5_CALLCONV -krb5_c_random_os_entropy (krb5_context context, - int strong, int *success) -{ - int unused; - int *oursuccess = success?success:&unused; - *oursuccess = 0; - /* If we are getting strong data then try that first. We are - guaranteed to cause a reseed of some kind if strong is true and - we have both /dev/random and /dev/urandom. We want the strong - data included in the reseed so we get it first.*/ - if (strong) { - if (read_entropy_from_device (context, "/dev/random")) - *oursuccess = 1; - } - if (read_entropy_from_device (context, "/dev/urandom")) - *oursuccess = 1; - return 0; -} - -#endif /*Windows or pre-OSX Mac*/ diff --git a/src/lib/crypto/random_to_key.c b/src/lib/crypto/random_to_key.c deleted file mode 100644 index 20f0abc0d..000000000 --- a/src/lib/crypto/random_to_key.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * COPYRIGHT (c) 2006 - * The Regents of the University of Michigan - * ALL RIGHTS RESERVED - * - * Permission is granted to use, copy, create derivative works - * and redistribute this software and such derivative works - * for any purpose, so long as the name of The University of - * Michigan is not used in any advertising or publicity - * pertaining to the use of distribution of this software - * without specific, written prior authorization. If the - * above copyright notice or any other identification of the - * University of Michigan is included in any copy of any - * portion of this software, then the disclaimer below must - * also be included. - * - * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION - * FROM THE UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY - * PURPOSE, AND WITHOUT WARRANTY BY THE UNIVERSITY OF - * MICHIGAN OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING - * WITHOUT LIMITATION THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE - * REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE - * FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR - * CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING - * OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN - * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGES. - */ - -/* - * Create a key given random data. It is assumed that random_key has - * already been initialized and random_key->contents have been allocated - * with the correct length. - */ -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_random_to_key(krb5_context context, krb5_enctype enctype, - krb5_data *random_data, krb5_keyblock *random_key) -{ - int i; - krb5_error_code ret; - const struct krb5_enc_provider *enc; - - if (random_data == NULL || random_key == NULL) - return(EINVAL); - - if (random_key->contents == NULL) - return(EINVAL); - - for (i=0; ilength != enc->keylength) - return(KRB5_BAD_KEYSIZE); - - ret = ((*(enc->make_key))(random_data, random_key)); - - if (ret) { - memset(random_key->contents, 0, random_key->length); - } - - return(ret); -} diff --git a/src/lib/crypto/raw/Makefile.in b/src/lib/crypto/raw/Makefile.in deleted file mode 100644 index 4a1d0376c..000000000 --- a/src/lib/crypto/raw/Makefile.in +++ /dev/null @@ -1,34 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/raw -mydir=lib/crypto/raw -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/.. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=raw -##DOS##OBJFILE=..\$(OUTPRE)raw.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= raw_decrypt.o raw_encrypt.o raw_aead.o - -OBJS= $(OUTPRE)raw_decrypt.$(OBJEXT) $(OUTPRE)raw_encrypt.$(OBJEXT) $(OUTPRE)raw_aead.$(OBJEXT) - -SRCS= $(srcdir)/raw_decrypt.c $(srcdir)/raw_encrypt.c $(srcdir)/raw_aead.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/raw/deps b/src/lib/crypto/raw/deps deleted file mode 100644 index f80c49b48..000000000 --- a/src/lib/crypto/raw/deps +++ /dev/null @@ -1,34 +0,0 @@ -# -# Generated makefile dependencies follow. -# -raw_decrypt.so raw_decrypt.po $(OUTPRE)raw_decrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h raw.h raw_decrypt.c -raw_encrypt.so raw_encrypt.po $(OUTPRE)raw_encrypt.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h raw.h raw_encrypt.c -raw_aead.so raw_aead.po $(OUTPRE)raw_aead.$(OBJEXT): \ - $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/krb5/krb5.h \ - $(BUILDTOP)/include/osconf.h $(BUILDTOP)/include/profile.h \ - $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h $(SRCTOP)/include/k5-err.h \ - $(SRCTOP)/include/k5-gmt_mktime.h $(SRCTOP)/include/k5-int-pkinit.h \ - $(SRCTOP)/include/k5-int.h $(SRCTOP)/include/k5-platform.h \ - $(SRCTOP)/include/k5-plugin.h $(SRCTOP)/include/k5-thread.h \ - $(SRCTOP)/include/krb5.h $(SRCTOP)/include/krb5/locate_plugin.h \ - $(SRCTOP)/include/krb5/preauth_plugin.h $(SRCTOP)/include/port-sockets.h \ - $(SRCTOP)/include/socket-utils.h $(srcdir)/../aead.h \ - $(srcdir)/../cksumtypes.h raw.h raw_aead.c diff --git a/src/lib/crypto/raw/raw.h b/src/lib/crypto/raw/raw.h deleted file mode 100644 index f4b7d5f0b..000000000 --- a/src/lib/crypto/raw/raw.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" - -void krb5_raw_encrypt_length -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t input, size_t *length); - -krb5_error_code krb5_raw_encrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output); - -krb5_error_code krb5_raw_decrypt -(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *arg_output); - -extern const struct krb5_aead_provider krb5int_aead_raw; - diff --git a/src/lib/crypto/raw/raw_aead.c b/src/lib/crypto/raw/raw_aead.c deleted file mode 100644 index f52fe000d..000000000 --- a/src/lib/crypto/raw/raw_aead.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * lib/crypto/raw/raw_aead.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - - -#include "k5-int.h" -#include "raw.h" -#include "aead.h" - -/* AEAD */ - -static krb5_error_code -krb5int_raw_crypto_length(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - krb5_cryptotype type, - unsigned int *length) -{ - switch (type) { - case KRB5_CRYPTO_TYPE_PADDING: - *length = enc->block_size; - break; - default: - *length = 0; - break; - } - - return 0; -} - -static krb5_error_code -krb5int_raw_encrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - krb5_crypto_iov *padding; - size_t i; - unsigned int blocksize = 0; - unsigned int plainlen = 0; - unsigned int padsize = 0; - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); - if (ret != 0) - return ret; - - for (i = 0; i < num_data; i++) { - krb5_crypto_iov *iov = &data[i]; - - if (iov->flags == KRB5_CRYPTO_TYPE_DATA) - plainlen += iov->data.length; - } - - if (blocksize != 0) { - /* Check that the input data is correctly padded */ - if (plainlen % blocksize) - padsize = blocksize - (plainlen % blocksize); - } - - padding = krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_PADDING); - if (padsize && (padding == NULL || padding->data.length < padsize)) - return KRB5_BAD_MSIZE; - - if (padding != NULL) { - memset(padding->data.data, 0, padsize); - padding->data.length = padsize; - } - - assert(enc->encrypt_iov != NULL); - - ret = enc->encrypt_iov(key, ivec, data, num_data); /* will update ivec */ - - return ret; -} - -static krb5_error_code -krb5int_raw_decrypt_iov(const struct krb5_aead_provider *aead, - const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_data *ivec, - krb5_crypto_iov *data, - size_t num_data) -{ - krb5_error_code ret; - size_t i; - unsigned int blocksize = 0; /* careful, this is enc block size not confounder len */ - unsigned int cipherlen = 0; - - if (krb5int_c_locate_iov(data, num_data, KRB5_CRYPTO_TYPE_STREAM) != NULL) { - return krb5int_c_iov_decrypt_stream(aead, enc, hash, key, - usage, ivec, data, num_data); - } - - - /* E(Confounder | Plaintext | Pad) | Checksum */ - - ret = aead->crypto_length(aead, enc, hash, KRB5_CRYPTO_TYPE_PADDING, &blocksize); - if (ret != 0) - return ret; - - for (i = 0; i < num_data; i++) { - const krb5_crypto_iov *iov = &data[i]; - - if (ENCRYPT_DATA_IOV(iov)) - cipherlen += iov->data.length; - } - - if (blocksize == 0) { - /* Check for correct input length in CTS mode */ - if (enc->block_size != 0 && cipherlen < enc->block_size) - return KRB5_BAD_MSIZE; - } else { - /* Check that the input data is correctly padded */ - if ((cipherlen % blocksize) != 0) - return KRB5_BAD_MSIZE; - } - - /* Validate header and trailer lengths */ - - /* derive the keys */ - - /* decrypt the plaintext (header | data | padding) */ - assert(enc->decrypt_iov != NULL); - - ret = enc->decrypt_iov(key, ivec, data, num_data); /* will update ivec */ - - return ret; -} - -const struct krb5_aead_provider krb5int_aead_raw = { - krb5int_raw_crypto_length, - krb5int_raw_encrypt_iov, - krb5int_raw_decrypt_iov -}; diff --git a/src/lib/crypto/raw/raw_decrypt.c b/src/lib/crypto/raw/raw_decrypt.c deleted file mode 100644 index 767da1f9f..000000000 --- a/src/lib/crypto/raw/raw_decrypt.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "raw.h" - -krb5_error_code -krb5_raw_decrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - return((*(enc->decrypt))(key, ivec, input, output)); -} diff --git a/src/lib/crypto/raw/raw_encrypt.c b/src/lib/crypto/raw/raw_encrypt.c deleted file mode 100644 index 68b819c01..000000000 --- a/src/lib/crypto/raw/raw_encrypt.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "raw.h" - -void -krb5_raw_encrypt_length(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - size_t inputlen, size_t *length) -{ - size_t blocksize; - - blocksize = enc->block_size; - - *length = krb5_roundup(inputlen, blocksize); -} - -krb5_error_code -krb5_raw_encrypt(const struct krb5_enc_provider *enc, - const struct krb5_hash_provider *hash, - const krb5_keyblock *key, krb5_keyusage usage, - const krb5_data *ivec, const krb5_data *input, - krb5_data *output) -{ - return((*(enc->encrypt))(key, ivec, input, output)); -} diff --git a/src/lib/crypto/sha1/ISSUES b/src/lib/crypto/sha1/ISSUES deleted file mode 100644 index 8b7e8a2a1..000000000 --- a/src/lib/crypto/sha1/ISSUES +++ /dev/null @@ -1,7 +0,0 @@ -Issues to be addressed for src/lib/crypto/sha1: -*- text -*- - -Assumes int (look for "count") is >= 32 bits. - -Changing the types of internal variables is easy, but shsUpdate takes -an int parameter; changing that could change the ABI on some -platforms. diff --git a/src/lib/crypto/sha1/Makefile.in b/src/lib/crypto/sha1/Makefile.in deleted file mode 100644 index ffa314d1f..000000000 --- a/src/lib/crypto/sha1/Makefile.in +++ /dev/null @@ -1,53 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/sha1 -mydir=lib/crypto/sha1 -BUILDTOP=$(REL)..$(S)..$(S).. -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=sha1 -##DOS##OBJFILE=..\$(OUTPRE)sha1.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS= shs.o - -OBJS= $(OUTPRE)shs.$(OBJEXT) - -SRCS= $(srcdir)/shs.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -t_shs: t_shs.o shs.o $(SUPPORT_DEPLIB) - $(CC_LINK) -o t_shs t_shs.o shs.o $(SUPPORT_LIB) - -$(OUTPRE)t_shs.exe: $(OUTPRE)t_shs.obj $(OUTPRE)shs.obj - link -out:$@ $** - -check-unix:: t_shs t_shs3 - $(RUN_SETUP) $(VALGRIND) $(C)t_shs -x - $(RUN_SETUP) $(VALGRIND) $(C)t_shs3 - -check-windows:: $(OUTPRE)t_shs.exe $(OUTPRE)t_shs3.exe - $(OUTPRE)$(C)t_shs.exe -x - $(OUTPRE)$(C)t_shs3.exe - -clean:: - $(RM) t_shs$(EXEEXT) t_shs.$(OBJEXT) t_shs3$(EXEEXT) t_shs3.$(OBJEXT) - -clean-unix:: clean-libobjs - -t_shs3: t_shs3.o shs.o $(SUPPORT_DEPLIB) - $(CC_LINK) -o t_shs3 t_shs3.o shs.o $(SUPPORT_LIB) - -@libobj_frag@ - diff --git a/src/lib/crypto/sha1/deps b/src/lib/crypto/sha1/deps deleted file mode 100644 index e8f519a9e..000000000 --- a/src/lib/crypto/sha1/deps +++ /dev/null @@ -1,13 +0,0 @@ -# -# Generated makefile dependencies follow. -# -shs.so shs.po $(OUTPRE)shs.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - shs.c shs.h diff --git a/src/lib/crypto/sha1/shs.c b/src/lib/crypto/sha1/shs.c deleted file mode 100644 index d9372df39..000000000 --- a/src/lib/crypto/sha1/shs.c +++ /dev/null @@ -1,381 +0,0 @@ -#include "shs.h" -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#include - -/* The SHS f()-functions. The f1 and f3 functions can be optimized to - save one boolean operation each - thanks to Rich Schroeppel, - rcs@cs.arizona.edu for discovering this */ - -#define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */ -#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */ -#define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */ -#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */ - -/* The SHS Mysterious Constants */ - -#define K1 0x5A827999L /* Rounds 0-19 */ -#define K2 0x6ED9EBA1L /* Rounds 20-39 */ -#define K3 0x8F1BBCDCL /* Rounds 40-59 */ -#define K4 0xCA62C1D6L /* Rounds 60-79 */ - -/* SHS initial values */ - -#define h0init 0x67452301L -#define h1init 0xEFCDAB89L -#define h2init 0x98BADCFEL -#define h3init 0x10325476L -#define h4init 0xC3D2E1F0L - -/* Note that it may be necessary to add parentheses to these macros if they - are to be called with expressions as arguments */ - -/* 32-bit rotate left - kludged with shifts */ - -#define ROTL(n,X) ((((X) << (n)) & 0xffffffff) | ((X) >> (32 - n))) - -/* The initial expanding function. The hash function is defined over an - 80-word expanded input array W, where the first 16 are copies of the input - data, and the remaining 64 are defined by - - W[ i ] = W[ i - 16 ] ^ W[ i - 14 ] ^ W[ i - 8 ] ^ W[ i - 3 ] - - This implementation generates these values on the fly in a circular - buffer - thanks to Colin Plumb, colin@nyx10.cs.du.edu for this - optimization. - - The updated SHS changes the expanding function by adding a rotate of 1 - bit. Thanks to Jim Gillogly, jim@rand.org, and an anonymous contributor - for this information */ - -#ifdef NEW_SHS -#define expand(W,i) ( W[ i & 15 ] = ROTL( 1, ( W[ i & 15 ] ^ W[ (i - 14) & 15 ] ^ \ - W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ))) -#else -#define expand(W,i) ( W[ i & 15 ] ^= W[ (i - 14) & 15 ] ^ \ - W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ) -#endif /* NEW_SHS */ - -/* The prototype SHS sub-round. The fundamental sub-round is: - - a' = e + ROTL( 5, a ) + f( b, c, d ) + k + data; - b' = a; - c' = ROTL( 30, b ); - d' = c; - e' = d; - - but this is implemented by unrolling the loop 5 times and renaming the - variables ( e, a, b, c, d ) = ( a', b', c', d', e' ) each iteration. - This code is then replicated 20 times for each of the 4 functions, using - the next 20 values from the W[] array each time */ - -#define subRound(a, b, c, d, e, f, k, data) \ - ( e += ROTL( 5, a ) + f( b, c, d ) + k + data, \ - e &= 0xffffffff, b = ROTL( 30, b ) ) - -/* Initialize the SHS values */ - -void shsInit(SHS_INFO *shsInfo) -{ - /* Set the h-vars to their initial values */ - shsInfo->digest[ 0 ] = h0init; - shsInfo->digest[ 1 ] = h1init; - shsInfo->digest[ 2 ] = h2init; - shsInfo->digest[ 3 ] = h3init; - shsInfo->digest[ 4 ] = h4init; - - /* Initialise bit count */ - shsInfo->countLo = shsInfo->countHi = 0; -} - -/* Perform the SHS transformation. Note that this code, like MD5, seems to - break some optimizing compilers due to the complexity of the expressions - and the size of the basic block. It may be necessary to split it into - sections, e.g. based on the four subrounds - - Note that this corrupts the shsInfo->data area */ - -static void SHSTransform (SHS_LONG *digest, const SHS_LONG *data); - -static -void SHSTransform(SHS_LONG *digest, const SHS_LONG *data) -{ - SHS_LONG A, B, C, D, E; /* Local vars */ - SHS_LONG eData[ 16 ]; /* Expanded data */ - - /* Set up first buffer and local data buffer */ - A = digest[ 0 ]; - B = digest[ 1 ]; - C = digest[ 2 ]; - D = digest[ 3 ]; - E = digest[ 4 ]; - memcpy(eData, data, sizeof (eData)); - -#if defined(CONFIG_SMALL) && !defined(CONFIG_SMALL_NO_CRYPTO) - - { - int i; - SHS_LONG temp; - for (i = 0; i < 20; i++) { - SHS_LONG x = (i < 16) ? eData[i] : expand(eData, i); - subRound(A, B, C, D, E, f1, K1, x); - temp = E, E = D, D = C, C = B, B = A, A = temp; - } - for (i = 20; i < 40; i++) { - subRound(A, B, C, D, E, f2, K2, expand(eData, i)); - temp = E, E = D, D = C, C = B, B = A, A = temp; - } - for (i = 40; i < 60; i++) { - subRound(A, B, C, D, E, f3, K3, expand(eData, i)); - temp = E, E = D, D = C, C = B, B = A, A = temp; - } - for (i = 60; i < 80; i++) { - subRound(A, B, C, D, E, f4, K4, expand(eData, i)); - temp = E, E = D, D = C, C = B, B = A, A = temp; - } - } - -#else - - /* Heavy mangling, in 4 sub-rounds of 20 interations each. */ - subRound( A, B, C, D, E, f1, K1, eData[ 0 ] ); - subRound( E, A, B, C, D, f1, K1, eData[ 1 ] ); - subRound( D, E, A, B, C, f1, K1, eData[ 2 ] ); - subRound( C, D, E, A, B, f1, K1, eData[ 3 ] ); - subRound( B, C, D, E, A, f1, K1, eData[ 4 ] ); - subRound( A, B, C, D, E, f1, K1, eData[ 5 ] ); - subRound( E, A, B, C, D, f1, K1, eData[ 6 ] ); - subRound( D, E, A, B, C, f1, K1, eData[ 7 ] ); - subRound( C, D, E, A, B, f1, K1, eData[ 8 ] ); - subRound( B, C, D, E, A, f1, K1, eData[ 9 ] ); - subRound( A, B, C, D, E, f1, K1, eData[ 10 ] ); - subRound( E, A, B, C, D, f1, K1, eData[ 11 ] ); - subRound( D, E, A, B, C, f1, K1, eData[ 12 ] ); - subRound( C, D, E, A, B, f1, K1, eData[ 13 ] ); - subRound( B, C, D, E, A, f1, K1, eData[ 14 ] ); - subRound( A, B, C, D, E, f1, K1, eData[ 15 ] ); - subRound( E, A, B, C, D, f1, K1, expand( eData, 16 ) ); - subRound( D, E, A, B, C, f1, K1, expand( eData, 17 ) ); - subRound( C, D, E, A, B, f1, K1, expand( eData, 18 ) ); - subRound( B, C, D, E, A, f1, K1, expand( eData, 19 ) ); - - subRound( A, B, C, D, E, f2, K2, expand( eData, 20 ) ); - subRound( E, A, B, C, D, f2, K2, expand( eData, 21 ) ); - subRound( D, E, A, B, C, f2, K2, expand( eData, 22 ) ); - subRound( C, D, E, A, B, f2, K2, expand( eData, 23 ) ); - subRound( B, C, D, E, A, f2, K2, expand( eData, 24 ) ); - subRound( A, B, C, D, E, f2, K2, expand( eData, 25 ) ); - subRound( E, A, B, C, D, f2, K2, expand( eData, 26 ) ); - subRound( D, E, A, B, C, f2, K2, expand( eData, 27 ) ); - subRound( C, D, E, A, B, f2, K2, expand( eData, 28 ) ); - subRound( B, C, D, E, A, f2, K2, expand( eData, 29 ) ); - subRound( A, B, C, D, E, f2, K2, expand( eData, 30 ) ); - subRound( E, A, B, C, D, f2, K2, expand( eData, 31 ) ); - subRound( D, E, A, B, C, f2, K2, expand( eData, 32 ) ); - subRound( C, D, E, A, B, f2, K2, expand( eData, 33 ) ); - subRound( B, C, D, E, A, f2, K2, expand( eData, 34 ) ); - subRound( A, B, C, D, E, f2, K2, expand( eData, 35 ) ); - subRound( E, A, B, C, D, f2, K2, expand( eData, 36 ) ); - subRound( D, E, A, B, C, f2, K2, expand( eData, 37 ) ); - subRound( C, D, E, A, B, f2, K2, expand( eData, 38 ) ); - subRound( B, C, D, E, A, f2, K2, expand( eData, 39 ) ); - - subRound( A, B, C, D, E, f3, K3, expand( eData, 40 ) ); - subRound( E, A, B, C, D, f3, K3, expand( eData, 41 ) ); - subRound( D, E, A, B, C, f3, K3, expand( eData, 42 ) ); - subRound( C, D, E, A, B, f3, K3, expand( eData, 43 ) ); - subRound( B, C, D, E, A, f3, K3, expand( eData, 44 ) ); - subRound( A, B, C, D, E, f3, K3, expand( eData, 45 ) ); - subRound( E, A, B, C, D, f3, K3, expand( eData, 46 ) ); - subRound( D, E, A, B, C, f3, K3, expand( eData, 47 ) ); - subRound( C, D, E, A, B, f3, K3, expand( eData, 48 ) ); - subRound( B, C, D, E, A, f3, K3, expand( eData, 49 ) ); - subRound( A, B, C, D, E, f3, K3, expand( eData, 50 ) ); - subRound( E, A, B, C, D, f3, K3, expand( eData, 51 ) ); - subRound( D, E, A, B, C, f3, K3, expand( eData, 52 ) ); - subRound( C, D, E, A, B, f3, K3, expand( eData, 53 ) ); - subRound( B, C, D, E, A, f3, K3, expand( eData, 54 ) ); - subRound( A, B, C, D, E, f3, K3, expand( eData, 55 ) ); - subRound( E, A, B, C, D, f3, K3, expand( eData, 56 ) ); - subRound( D, E, A, B, C, f3, K3, expand( eData, 57 ) ); - subRound( C, D, E, A, B, f3, K3, expand( eData, 58 ) ); - subRound( B, C, D, E, A, f3, K3, expand( eData, 59 ) ); - - subRound( A, B, C, D, E, f4, K4, expand( eData, 60 ) ); - subRound( E, A, B, C, D, f4, K4, expand( eData, 61 ) ); - subRound( D, E, A, B, C, f4, K4, expand( eData, 62 ) ); - subRound( C, D, E, A, B, f4, K4, expand( eData, 63 ) ); - subRound( B, C, D, E, A, f4, K4, expand( eData, 64 ) ); - subRound( A, B, C, D, E, f4, K4, expand( eData, 65 ) ); - subRound( E, A, B, C, D, f4, K4, expand( eData, 66 ) ); - subRound( D, E, A, B, C, f4, K4, expand( eData, 67 ) ); - subRound( C, D, E, A, B, f4, K4, expand( eData, 68 ) ); - subRound( B, C, D, E, A, f4, K4, expand( eData, 69 ) ); - subRound( A, B, C, D, E, f4, K4, expand( eData, 70 ) ); - subRound( E, A, B, C, D, f4, K4, expand( eData, 71 ) ); - subRound( D, E, A, B, C, f4, K4, expand( eData, 72 ) ); - subRound( C, D, E, A, B, f4, K4, expand( eData, 73 ) ); - subRound( B, C, D, E, A, f4, K4, expand( eData, 74 ) ); - subRound( A, B, C, D, E, f4, K4, expand( eData, 75 ) ); - subRound( E, A, B, C, D, f4, K4, expand( eData, 76 ) ); - subRound( D, E, A, B, C, f4, K4, expand( eData, 77 ) ); - subRound( C, D, E, A, B, f4, K4, expand( eData, 78 ) ); - subRound( B, C, D, E, A, f4, K4, expand( eData, 79 ) ); - -#endif - - /* Build message digest */ - digest[ 0 ] += A; - digest[ 0 ] &= 0xffffffff; - digest[ 1 ] += B; - digest[ 1 ] &= 0xffffffff; - digest[ 2 ] += C; - digest[ 2 ] &= 0xffffffff; - digest[ 3 ] += D; - digest[ 3 ] &= 0xffffffff; - digest[ 4 ] += E; - digest[ 4 ] &= 0xffffffff; -} - -/* Update SHS for a block of data */ - -void shsUpdate(SHS_INFO *shsInfo, const SHS_BYTE *buffer, unsigned int count) -{ - SHS_LONG tmp; - unsigned int dataCount; - int canfill; - SHS_LONG *lp; - - /* Update bitcount */ - tmp = shsInfo->countLo; - shsInfo->countLo = tmp + (((SHS_LONG) count) << 3 ); - if ((shsInfo->countLo &= 0xffffffff) < tmp) - shsInfo->countHi++; /* Carry from low to high */ - shsInfo->countHi += count >> 29; - - /* Get count of bytes already in data */ - dataCount = (tmp >> 3) & 0x3F; - - /* Handle any leading odd-sized chunks */ - if (dataCount) { - lp = shsInfo->data + dataCount / 4; - dataCount = SHS_DATASIZE - dataCount; - canfill = (count >= dataCount); - - if (dataCount % 4) { - /* Fill out a full 32 bit word first if needed -- this - is not very efficient (computed shift amount), - but it shouldn't happen often. */ - while (dataCount % 4 && count > 0) { - *lp |= (SHS_LONG) *buffer++ << ((--dataCount % 4) * 8); - count--; - } - lp++; - } - while (lp < shsInfo->data + 16) { - if (count < 4) { - *lp = 0; - switch (count % 4) { - case 3: - *lp |= (SHS_LONG) buffer[2] << 8; - case 2: - *lp |= (SHS_LONG) buffer[1] << 16; - case 1: - *lp |= (SHS_LONG) buffer[0] << 24; - } - count = 0; - break; /* out of while loop */ - } - *lp++ = load_32_be(buffer); - buffer += 4; - count -= 4; - } - if (canfill) { - SHSTransform(shsInfo->digest, shsInfo->data); - } - } - - /* Process data in SHS_DATASIZE chunks */ - while (count >= SHS_DATASIZE) { - lp = shsInfo->data; - while (lp < shsInfo->data + 16) { - *lp++ = load_32_be(buffer); - buffer += 4; - } - SHSTransform(shsInfo->digest, shsInfo->data); - count -= SHS_DATASIZE; - } - - if (count > 0) { - lp = shsInfo->data; - while (count > 4) { - *lp++ = load_32_be(buffer); - buffer += 4; - count -= 4; - } - *lp = 0; - switch (count % 4) { - case 0: - *lp |= ((SHS_LONG) buffer[3]); - case 3: - *lp |= ((SHS_LONG) buffer[2]) << 8; - case 2: - *lp |= ((SHS_LONG) buffer[1]) << 16; - case 1: - *lp |= ((SHS_LONG) buffer[0]) << 24; - } - } -} - -/* Final wrapup - pad to SHS_DATASIZE-byte boundary with the bit pattern - 1 0* (64-bit count of bits processed, MSB-first) */ - -void shsFinal(SHS_INFO *shsInfo) -{ - int count; - SHS_LONG *lp; - - /* Compute number of bytes mod 64 */ - count = (int) shsInfo->countLo; - count = (count >> 3) & 0x3F; - - /* Set the first char of padding to 0x80. This is safe since there is - always at least one byte free */ - lp = shsInfo->data + count / 4; - switch (count % 4) { - case 3: - *lp++ |= (SHS_LONG) 0x80; - break; - case 2: - *lp++ |= (SHS_LONG) 0x80 << 8; - break; - case 1: - *lp++ |= (SHS_LONG) 0x80 << 16; - break; - case 0: - *lp++ = (SHS_LONG) 0x80 << 24; - } - - /* at this point, lp can point *past* shsInfo->data. If it points - there, just Transform and reset. If it points to the last - element, set that to zero. This pads out to 64 bytes if not - enough room for length words */ - - if (lp == shsInfo->data + 15) - *lp++ = 0; - - if (lp == shsInfo->data + 16) { - SHSTransform(shsInfo->digest, shsInfo->data); - lp = shsInfo->data; - } - - /* Pad out to 56 bytes */ - while (lp < shsInfo->data + 14) - *lp++ = 0; - - /* Append length in bits and transform */ - *lp++ = shsInfo->countHi; - *lp++ = shsInfo->countLo; - SHSTransform(shsInfo->digest, shsInfo->data); -} diff --git a/src/lib/crypto/sha1/shs.h b/src/lib/crypto/sha1/shs.h deleted file mode 100644 index 6dcb41b40..000000000 --- a/src/lib/crypto/sha1/shs.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef _SHS_DEFINED - -#include "k5-int.h" - -#define _SHS_DEFINED - -/* Some useful types */ - -typedef krb5_octet SHS_BYTE; -typedef krb5_ui_4 SHS_LONG; - -/* Define the following to use the updated SHS implementation */ -#define NEW_SHS /**/ - -/* The SHS block size and message digest sizes, in bytes */ - -#define SHS_DATASIZE 64 -#define SHS_DIGESTSIZE 20 - -/* The structure for storing SHS info */ - -typedef struct { - SHS_LONG digest[ 5 ]; /* Message digest */ - SHS_LONG countLo, countHi; /* 64-bit bit count */ - SHS_LONG data[ 16 ]; /* SHS data buffer */ - } SHS_INFO; - -/* Message digest functions (shs.c) */ -void shsInit(SHS_INFO *shsInfo); -void shsUpdate(SHS_INFO *shsInfo, const SHS_BYTE *buffer, unsigned int count); -void shsFinal(SHS_INFO *shsInfo); - - -/* Keyed Message digest functions (hmac_sha.c) */ -krb5_error_code hmac_sha(krb5_octet *text, - int text_len, - krb5_octet *key, - int key_len, - krb5_octet *digest); - - -#define NIST_SHA_CKSUM_LENGTH SHS_DIGESTSIZE -#define HMAC_SHA_CKSUM_LENGTH SHS_DIGESTSIZE - -#endif /* _SHS_DEFINED */ diff --git a/src/lib/crypto/sha1/t_shs.c b/src/lib/crypto/sha1/t_shs.c deleted file mode 100644 index adcb0927a..000000000 --- a/src/lib/crypto/sha1/t_shs.c +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************** -* * -* SHS Test Code * -* * -****************************************************************************/ - -#include -#include -#include -#include "shs.h" - -/* Test the SHS implementation */ - -#ifdef NEW_SHS - -static SHS_LONG shsTestResults[][ 5 ] = { - { 0xA9993E36L, 0x4706816AL, 0xBA3E2571L, 0x7850C26CL, 0x9CD0D89DL, }, - { 0x84983E44L, 0x1C3BD26EL, 0xBAAE4AA1L, 0xF95129E5L, 0xE54670F1L, }, - { 0x34AA973CL, 0xD4C4DAA4L, 0xF61EEB2BL, 0xDBAD2731L, 0x6534016FL, } - }; - -#else - -static SHS_LONG shsTestResults[][ 5 ] = { - { 0x0164B8A9L, 0x14CD2A5EL, 0x74C4F7FFL, 0x082C4D97L, 0xF1EDF880L }, - { 0xD2516EE1L, 0xACFA5BAFL, 0x33DFC1C4L, 0x71E43844L, 0x9EF134C8L }, - { 0x3232AFFAL, 0x48628A26L, 0x653B5AAAL, 0x44541FD9L, 0x0D690603L } - }; -#endif /* NEW_SHS */ - -static int compareSHSresults(shsInfo, shsTestLevel) -SHS_INFO *shsInfo; -int shsTestLevel; -{ - int i, fail = 0; - - /* Compare the returned digest and required values */ - for( i = 0; i < 5; i++ ) - if( shsInfo->digest[ i ] != shsTestResults[ shsTestLevel ][ i ] ) - fail = 1; - if (fail) { - printf("\nExpected: "); - for (i = 0; i < 5; i++) { - printf("%8.8lx ", (unsigned long) shsTestResults[shsTestLevel][i]); - } - printf("\nGot: "); - for (i = 0; i < 5; i++) { - printf("%8.8lx ", (unsigned long) shsInfo->digest[i]); - } - printf("\n"); - return( -1 ); - } - return( 0 ); -} - -int -main() -{ - SHS_INFO shsInfo; - unsigned int i; -#if 0 - time_t secondCount; - SHS_BYTE data[ 200 ]; -#endif - - /* Make sure we've got the endianness set right. If the machine is - big-endian (up to 64 bits) the following value will be signed, - otherwise it will be unsigned. Unfortunately we can't test for odd - things like middle-endianness without knowing the size of the data - types */ - - /* Test SHS against values given in SHS standards document */ - printf( "Running SHS test 1 ... " ); - shsInit( &shsInfo ); - shsUpdate( &shsInfo, ( SHS_BYTE * ) "abc", 3 ); - shsFinal( &shsInfo ); - if( compareSHSresults( &shsInfo, 0 ) == -1 ) - { - putchar( '\n' ); - puts( "SHS test 1 failed" ); - exit( -1 ); - } -#ifdef NEW_SHS - puts( "passed, result= A9993E364706816ABA3E25717850C26C9CD0D89D" ); -#else - puts( "passed, result= 0164B8A914CD2A5E74C4F7FF082C4D97F1EDF880" ); -#endif /* NEW_SHS */ - - printf( "Running SHS test 2 ... " ); - shsInit( &shsInfo ); - shsUpdate( &shsInfo, ( SHS_BYTE * ) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 56 ); - shsFinal( &shsInfo ); - if( compareSHSresults( &shsInfo, 1 ) == -1 ) - { - putchar( '\n' ); - puts( "SHS test 2 failed" ); - exit( -1 ); - } -#ifdef NEW_SHS - puts( "passed, result= 84983E441C3BD26EBAAE4AA1F95129E5E54670F1" ); -#else - puts( "passed, result= D2516EE1ACFA5BAF33DFC1C471E438449EF134C8" ); -#endif /* NEW_SHS */ - - printf( "Running SHS test 3 ... " ); - shsInit( &shsInfo ); - for( i = 0; i < 15625; i++ ) - shsUpdate( &shsInfo, ( SHS_BYTE * ) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 64 ); - shsFinal( &shsInfo ); - if( compareSHSresults( &shsInfo, 2 ) == -1 ) - { - putchar( '\n' ); - puts( "SHS test 3 failed" ); - exit( -1 ); - } -#ifdef NEW_SHS - puts( "passed, result= 34AA973CD4C4DAA4F61EEB2BDBAD27316534016F" ); -#else - puts( "passed, result= 3232AFFA48628A26653B5AAA44541FD90D690603" ); -#endif /* NEW_SHS */ - -#if 0 - printf( "\nTesting speed for 100MB data... " ); - shsInit( &shsInfo ); - secondCount = time( NULL ); - for( i = 0; i < 500000U; i++ ) - shsUpdate( &shsInfo, data, 200 ); - secondCount = time( NULL ) - secondCount; - printf( "done. Time = %ld seconds, %ld kbytes/second.\n", \ - secondCount, 100500L / secondCount ); -#endif - - puts( "\nAll SHS tests passed" ); - exit( 0 ); -} diff --git a/src/lib/crypto/sha1/t_shs3.c b/src/lib/crypto/sha1/t_shs3.c deleted file mode 100644 index 96b36a76e..000000000 --- a/src/lib/crypto/sha1/t_shs3.c +++ /dev/null @@ -1,592 +0,0 @@ -/* test shs code */ - -#include -#include -#include -#include "shs.h" - -static void process(void); -static void test1(void); -static void test2(void); -static void test3(void); -static void test4(void); -static void test5(void); -static void test6(void); -static void test7(void); - -/* When run on a little-endian CPU we need to perform byte reversal on an - array of longwords. It is possible to make the code endianness- - independant by fiddling around with data at the byte level, but this - makes for very slow code, so we rely on the user to sort out endianness - at compile time */ - -static void longReverse( SHS_LONG *buffer, int byteCount ) -{ - SHS_LONG value; - static int init = 0; - char *cp; - - switch (init) { - case 0: - init=1; - cp = (char *) &init; - if (*cp == 1) { - init=2; - break; - } - init=1; - /* fall through - MSB */ - case 1: - return; - } - - byteCount /= sizeof( SHS_LONG ); - while( byteCount-- ) { - value = *buffer; - value = ( ( value & 0xFF00FF00L ) >> 8 ) | - ( ( value & 0x00FF00FFL ) << 8 ); - *buffer++ = ( value << 16 ) | ( value >> 16 ); - } -} - -int rc; -int mode; -int Dflag; - -int -main(argc,argv) - char **argv; -{ - char *argp; - - while (--argc > 0) if (*(argp = *++argv)=='-') - while (*++argp) switch(*argp) - { - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - if (mode) goto Usage; - mode = *argp; - break; - case 'D': - if (argc <= 1) goto Usage; - --argc; - Dflag = atoi(*++argv); - break; - case '-': - break; - default: - fprintf (stderr,"Bad switch char <%c>\n", *argp); - Usage: - fprintf(stderr, "Usage: t_shs [-1234567] [-D #]\n"); - exit(1); - } - else goto Usage; - - process(); - exit(rc); -} - -static void process(void) -{ - switch(mode) - { - case '1': - test1(); - break; - case '2': - test2(); - break; - case '3': - test3(); - break; - case '4': - test4(); - break; - case '5': - test5(); - break; - case '6': - test6(); - break; - case '7': - test7(); - break; - default: - test1(); - test2(); - test3(); - test4(); - test5(); - test6(); - test7(); - } -} - -#ifndef shsDigest -static unsigned char * -shsDigest(si) - SHS_INFO *si; -{ - longReverse(si->digest, SHS_DIGESTSIZE); - return (unsigned char*) si->digest; -} -#endif - -unsigned char results1[SHS_DIGESTSIZE] = { -0xa9,0x99,0x3e,0x36,0x47,0x06,0x81,0x6a,0xba,0x3e, -0x25,0x71,0x78,0x50,0xc2,0x6c,0x9c,0xd0,0xd8,0x9d}; - -static void test1(void) -{ - SHS_INFO si[1]; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - int i; - - printf("Running SHS test 1 ...\n"); - shsInit(si); - shsUpdate(si, (SHS_BYTE *) "abc", 3); - shsFinal(si); - memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results1, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 1 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results1[i]); - } - printf("\n"); -} - -unsigned char results2[SHS_DIGESTSIZE] = { -0x84,0x98,0x3e,0x44,0x1c,0x3b,0xd2,0x6e,0xba,0xae, -0x4a,0xa1,0xf9,0x51,0x29,0xe5,0xe5,0x46,0x70,0xf1}; - -static void test2(void) -{ - SHS_INFO si[1]; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - int i; - - printf("Running SHS test 2 ...\n"); - shsInit(si); - shsUpdate(si, - (SHS_BYTE *) "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - 56); - shsFinal(si); - memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results2, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 2 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results2[i]); - } - printf("\n"); -} - -unsigned char results3[SHS_DIGESTSIZE] = { -0x34,0xaa,0x97,0x3c,0xd4,0xc4,0xda,0xa4,0xf6,0x1e, -0xeb,0x2b,0xdb,0xad,0x27,0x31,0x65,0x34,0x01,0x6f}; - -static void test3(void) -{ - SHS_INFO si[1]; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - int i; - - printf("Running SHS test 3 ...\n"); - shsInit(si); - for (i = 0; i < 15625; ++i) - shsUpdate(si, -(SHS_BYTE *) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", - 64); - shsFinal(si); - memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results3, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 3 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results3[i]); - } - printf("\n"); -} - -unsigned char randdata[] = { -0xfe,0x28,0x79,0x25,0xf5,0x03,0xf9,0x1c,0xcd,0x70,0x7b,0xb0,0x42,0x02,0xb8,0x2f, -0xf3,0x63,0xa2,0x79,0x8e,0x9b,0x33,0xd7,0x2b,0xc4,0xb4,0xd2,0xcb,0x61,0xec,0xbb, -0x94,0xe1,0x8f,0x53,0x80,0x55,0xd9,0x90,0xb2,0x03,0x58,0xfa,0xa6,0xe5,0x18,0x57, -0x68,0x04,0x24,0x98,0x41,0x7e,0x84,0xeb,0xc1,0x39,0xbc,0x1d,0xf7,0x4e,0x92,0x72, -0x1a,0x5b,0xb6,0x99,0x43,0xa5,0x0a,0x45,0x73,0x55,0xfd,0x57,0x83,0x45,0x36,0x5c, -0xfd,0x39,0x08,0x6e,0xe2,0x01,0x9a,0x8c,0x4e,0x39,0xd2,0x0d,0x5f,0x0e,0x35,0x15, -0xb9,0xac,0x5f,0xa1,0x8a,0xe6,0xdd,0x6e,0x68,0x9d,0xf6,0x29,0x95,0xf6,0x7d,0x7b, -0xd9,0x5e,0xf4,0x67,0x25,0xbd,0xee,0xed,0x53,0x60,0xb0,0x47,0xdf,0xef,0xf4,0x41, -0xbd,0x45,0xcf,0x5c,0x93,0x41,0x87,0x97,0x82,0x39,0x20,0x66,0xb4,0xda,0xcb,0x66, -0x93,0x02,0x2e,0x7f,0x94,0x4c,0xc7,0x3b,0x2c,0xcf,0xf6,0x99,0x6f,0x13,0xf1,0xc5, -0x28,0x2b,0xa6,0x6c,0x39,0x26,0x7f,0x76,0x24,0x4a,0x6e,0x01,0x40,0x63,0xf8,0x00, -0x06,0x23,0x5a,0xaa,0xa6,0x2f,0xd1,0x37,0xc7,0xcc,0x76,0xe9,0x54,0x1e,0x57,0x73, -0xf5,0x33,0xaa,0x96,0xbe,0x35,0xcd,0x1d,0xd5,0x7d,0xac,0x50,0xd5,0xf8,0x47,0x2d, -0xd6,0x93,0x5f,0x6e,0x38,0xd3,0xac,0xd0,0x7e,0xad,0x9e,0xf8,0x87,0x95,0x63,0x15, -0x65,0xa3,0xd4,0xb3,0x9a,0x6c,0xac,0xcd,0x2a,0x54,0x83,0x13,0xc4,0xb4,0x94,0xfa, -0x76,0x87,0xc5,0x8b,0x4a,0x10,0x92,0x05,0xd1,0x0e,0x97,0xfd,0xc8,0xfb,0xc5,0xdc, -0x21,0x4c,0xc8,0x77,0x5c,0xed,0x32,0x22,0x77,0xc1,0x38,0x30,0xd7,0x8e,0x2a,0x70, -0x72,0x67,0x13,0xe4,0xb7,0x18,0xd4,0x76,0xdd,0x32,0x12,0xf4,0x5d,0xc9,0xec,0xc1, -0x2c,0x8a,0xfe,0x08,0x6c,0xea,0xf6,0xab,0x5a,0x0e,0x8e,0x81,0x1d,0xc8,0x5a,0x4b, -0xed,0xb9,0x7f,0x4b,0x67,0xe3,0x65,0x46,0xc9,0xf2,0xab,0x37,0x0a,0x98,0x67,0x5b, -0xb1,0x3b,0x02,0x91,0x38,0x71,0xea,0x62,0x88,0xae,0xb6,0xdb,0xfc,0x55,0x79,0x33, -0x69,0x95,0x51,0xb6,0xe1,0x3b,0xab,0x22,0x68,0x54,0xf9,0x89,0x9c,0x94,0xe0,0xe3, -0xd3,0x48,0x5c,0xe9,0x78,0x5b,0xb3,0x4b,0xba,0xd8,0x48,0xd8,0xaf,0x91,0x4e,0x23, -0x38,0x23,0x23,0x6c,0xdf,0x2e,0xf0,0xff,0xac,0x1d,0x2d,0x27,0x10,0x45,0xa3,0x2d, -0x8b,0x00,0xcd,0xe2,0xfc,0xb7,0xdb,0x52,0x13,0xb7,0x66,0x79,0xd9,0xd8,0x29,0x0e, -0x32,0xbd,0x52,0x6b,0x75,0x71,0x08,0x83,0x1b,0x67,0x28,0x93,0x97,0x97,0x32,0xff, -0x8b,0xd3,0x98,0xa3,0xce,0x2b,0x88,0x37,0x1c,0xcc,0xa0,0xd1,0x19,0x9b,0xe6,0x11, -0xfc,0xc0,0x3c,0x4e,0xe1,0x35,0x49,0x29,0x19,0xcf,0x1d,0xe1,0x60,0x74,0xc0,0xe9, -0xf7,0xb4,0x99,0xa0,0x23,0x50,0x51,0x78,0xcf,0xc0,0xe5,0xc2,0x1c,0x16,0xd2,0x24, -0x5a,0x63,0x54,0x83,0xaa,0x74,0x3d,0x41,0x0d,0x52,0xee,0xfe,0x0f,0x4d,0x13,0xe1, -0x27,0x00,0xc4,0xf3,0x2b,0x55,0xe0,0x9c,0x81,0xe0,0xfc,0xc2,0x13,0xd4,0x39,0x09 -}; - -unsigned char results4[SHS_DIGESTSIZE] = { -0x13,0x62,0xfc,0x87,0x68,0x33,0xd5,0x1d,0x2f,0x0c, -0x73,0xe3,0xfb,0x87,0x6a,0x6b,0xc3,0x25,0x54,0xfc}; - -static void test4(void) -{ - SHS_INFO si[1]; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - int i; - - printf("Running SHS test 4 ...\n"); - shsInit(si); - shsUpdate(si, randdata, 19); - shsFinal(si); - memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results4, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 4 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results4[i]); - } - printf("\n"); -} - -unsigned char results5[SHS_DIGESTSIZE] = { -0x19,0x4d,0xf6,0xeb,0x8e,0x02,0x6d,0x37,0x58,0x64, -0xe5,0x95,0x19,0x2a,0xdd,0x1c,0xc4,0x3c,0x24,0x86}; - -static void test5(void) -{ - SHS_INFO si[1]; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - int i; - - printf("Running SHS test 5 ...\n"); - shsInit(si); - shsUpdate(si, randdata, 19); - shsUpdate(si, randdata+32, 15); - shsFinal(si); - memcpy(digest, shsDigest(si), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results5, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 5 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results5[i]); - } - printf("\n"); -} - -unsigned char results6[SHS_DIGESTSIZE] = { -0x4e,0x16,0x57,0x9d,0x4b,0x48,0xa9,0x1c,0x88,0x72, -0x83,0xdb,0x88,0xd1,0xea,0x3a,0x45,0xdf,0xa1,0x10}; - -static void test6(void) -{ - struct { - long pad1; - SHS_INFO si1; - long pad2; - SHS_INFO si2; - long pad3; - } sdata; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - unsigned int i, j; - - printf("Running SHS test 6 ...\n"); - sdata.pad1 = 0x12345678; - sdata.pad2 = 0x87654321; - sdata.pad3 = 0x78563412; - shsInit((&sdata.si2)); -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #20 %#lx\n", -sdata.pad2); -sdata.pad2 = 0x87654321; -} -if (sdata.pad3 != 0x78563412) { -printf ("Overrun #21 %#lx\n", -sdata.pad3); -sdata.pad3 = 0x78563412; -} - for (i = 0; i < 400; ++i) - { - shsInit(&sdata.si1); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #22 %#lx at %d\n", -sdata.pad1, i); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #23 %#lx at %d\n", -sdata.pad2, i); -sdata.pad2 = 0x87654321; -} - shsUpdate(&sdata.si1, (randdata+sizeof(randdata))-i, i); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #24 %#lx at %d\n", -sdata.pad1, i); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #25 %#lx at %d\n", -sdata.pad2, i); -sdata.pad2 = 0x87654321; -} - shsFinal(&sdata.si1); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #26 %#lx at %d\n", -sdata.pad1, i); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #27 %#lx at %d\n", -sdata.pad2, i); -sdata.pad2 = 0x87654321; -} - memcpy(digest, shsDigest(&sdata.si1), SHS_DIGESTSIZE); - if (Dflag & 1) - { - printf ("%d: ", i); - for (j = 0; j < SHS_DIGESTSIZE; ++j) - printf("%02x",digest[j]); - printf("\n"); - } - shsUpdate((&sdata.si2), digest, SHS_DIGESTSIZE); -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #28 %#lx at %d\n", -sdata.pad2, i); -sdata.pad2 = 0x87654321; -} -if (sdata.pad3 != 0x78563412) { -printf ("Overrun #29 %#lx at %d\n", -sdata.pad3, i); -sdata.pad3 = 0x78563412; -} - if (Dflag & 2) - printf ("%d: %08lx%08lx%08lx%08lx%08lx\n", - i, - (unsigned long) sdata.si2.digest[0], - (unsigned long) sdata.si2.digest[1], - (unsigned long) sdata.si2.digest[2], - (unsigned long) sdata.si2.digest[3], - (unsigned long) sdata.si2.digest[4]); - } - shsFinal((&sdata.si2)); -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #30 %#lx\n", -sdata.pad2); -sdata.pad2 = 0x87654321; -} -if (sdata.pad3 != 0x78563412) { -printf ("Overrun #31 %#lx\n", -sdata.pad3); -sdata.pad3 = 0x78563412; -} - memcpy(digest, shsDigest((&sdata.si2)), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results6, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 6 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results6[i]); - } - printf("\n"); -} - -unsigned char results7[SHS_DIGESTSIZE] = { -0x89,0x41,0x65,0xce,0x76,0xc1,0xd1,0xd1,0xc3,0x6f, -0xab,0x92,0x79,0x30,0x01,0x71,0x63,0x1f,0x74,0xfe}; - -unsigned int jfsize[] = {0,1,31,32, - 33,55,56,63, - 64,65,71,72, - 73,95,96,97, - 119,120,123,127}; -unsigned int kfsize[] = {0,1,31,32,33,55,56,63}; - -static void test7(void) -{ - struct { - long pad1; - SHS_INFO si1; - long pad2; - SHS_INFO si2; - long pad3; - } sdata; - unsigned char digest[SHS_DIGESTSIZE]; - int failed; - unsigned int i, j, k, l; - - printf("Running SHS test 7 ...\n"); - sdata.pad1 = 0x12345678; - sdata.pad2 = 0x87654321; - sdata.pad3 = 0x78563412; - shsInit((&sdata.si2)); - for (i = 1; i <= 128; ++i) - for (j = 0; j < 20; ++j) - for (k = 0; k < 8; ++k) - { - shsInit(&sdata.si1); - shsUpdate(&sdata.si1, (randdata+80+j), i); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #1 %#lx at %d,%d,%d\n", -sdata.pad1, i,j,k); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #2 %#lx at %d,%d,%d\n", -sdata.pad2, i,j,k); -sdata.pad2 = 0x87654321; -} - shsUpdate(&sdata.si1, randdata+i, jfsize[j]); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #3 %#lx at %d,%d,%d\n", -sdata.pad1, i,j,k); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #4 %#lx at %d,%d,%d\n", -sdata.pad2, i,j,k); -sdata.pad2 = 0x87654321; -} - if (k) shsUpdate(&sdata.si1, randdata+(i^j), kfsize[k]); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #5 %#lx at %d,%d,%d\n", -sdata.pad1, i,j,k); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #6 %#lx at %d,%d,%d\n", -sdata.pad2, i,j,k); -sdata.pad2 = 0x87654321; -} - shsFinal(&sdata.si1); -if (sdata.pad1 != 0x12345678) { -printf ("Overrun #7 %#lx at %d,%d,%d\n", -sdata.pad1, i,j,k); -sdata.pad1 = 0x12345678; -} -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #8 %#lx at %d,%d,%d\n", -sdata.pad2, i,j,k); -sdata.pad2 = 0x87654321; -} - memcpy(digest, shsDigest(&sdata.si1), SHS_DIGESTSIZE); - if (Dflag & 1) - { - printf ("%d,%d,%d: ", i, j, k); - for (l = 0; l < SHS_DIGESTSIZE; ++l) - printf("%02x",digest[l]); - printf("\n"); - } - shsUpdate((&sdata.si2), digest, SHS_DIGESTSIZE); -if (sdata.pad2 != 0x87654321) { -printf ("Overrun #9 %#lx at %d,%d,%d\n", -sdata.pad2, i,j,k); -sdata.pad2 = 0x87654321; -} -if (sdata.pad3 != 0x78563412) { -printf ("Overrun #10 %#lx at %d,%d,%d\n", -sdata.pad3, i,j,k); -sdata.pad3 = 0x78563412; -} - if (Dflag & 2) - printf ("%d,%d,%d: %08lx%08lx%08lx%08lx%08lx\n", - i,j,k, - (unsigned long) sdata.si2.digest[0], - (unsigned long) sdata.si2.digest[1], - (unsigned long) sdata.si2.digest[2], - (unsigned long) sdata.si2.digest[3], - (unsigned long) sdata.si2.digest[4]); - } - shsFinal((&sdata.si2)); - memcpy(digest, shsDigest((&sdata.si2)), SHS_DIGESTSIZE); - if ((failed = memcmp(digest, results7, SHS_DIGESTSIZE)) != 0) - { - fprintf(stderr,"SHS test 7 failed!\n"); - rc = 1; - } - printf ("%s, results = ", failed ? "Failed" : "Passed"); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",digest[i]); - if (failed) - { - printf ("\n, expected "); - for (i = 0; i < SHS_DIGESTSIZE; ++i) - printf("%02x",results7[i]); - } - printf("\n"); -} diff --git a/src/lib/crypto/state.c b/src/lib/crypto/state.c deleted file mode 100644 index f69746c81..000000000 --- a/src/lib/crypto/state.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * lib/crypto/state.c - * - * Copyright (C) 2001 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - - * - * - * - * * Section 6 (Encryption) of the Kerberos revisions document defines - * cipher states to be used to chain encryptions and decryptions - * together. Examples of cipher states include initialization vectors - * for CBC encription. This file contains implementations of - * krb5_c_init_state and krb5_c_free_state used by clients of the - * Kerberos crypto library. - */ -#include "k5-int.h" -#include "etypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_init_state (krb5_context context, const krb5_keyblock *key, - krb5_keyusage keyusage, krb5_data *new_state) -{ - int i; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - return (*(krb5_enctypes_list[i].enc->init_state)) - (key, keyusage, new_state); -} - -krb5_error_code KRB5_CALLCONV -krb5_c_free_state (krb5_context context, const krb5_keyblock *key, - krb5_data *state) -{ - int i; - - for (i=0; ienctype) - break; - } - - if (i == krb5_enctypes_length) - return(KRB5_BAD_ENCTYPE); - - return (*(krb5_enctypes_list[i].enc->free_state)) - (state); -} diff --git a/src/lib/crypto/string_to_cksumtype.c b/src/lib/crypto/string_to_cksumtype.c deleted file mode 100644 index 5a3c70d73..000000000 --- a/src/lib/crypto/string_to_cksumtype.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_string_to_cksumtype(char *string, krb5_cksumtype *cksumtypep) -{ - unsigned int i, j; - - for (i=0; ilength == SALT_TYPE_AFS_LENGTH) { - switch (enctype) { - case ENCTYPE_DES_CBC_CRC: - case ENCTYPE_DES_CBC_MD4: - case ENCTYPE_DES_CBC_MD5: - break; - default: - return (KRB5_CRYPTO_INTERNAL); - } - } - - keybytes = enc->keybytes; - keylength = enc->keylength; - - if ((key->contents = (krb5_octet *) malloc(keylength)) == NULL) - return(ENOMEM); - - key->magic = KV5M_KEYBLOCK; - key->enctype = enctype; - key->length = keylength; - - ret = (*krb5_enctypes_list[i].str2key)(enc, string, salt, params, key); - if (ret) { - memset(key->contents, 0, keylength); - free(key->contents); - key->length = 0; - key->contents = NULL; - } - - return(ret); -} diff --git a/src/lib/crypto/t_cf2.c b/src/lib/crypto/t_cf2.c deleted file mode 100644 index 2e171c275..000000000 --- a/src/lib/crypto/t_cf2.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * lib/crypto/t_cf2.c - * - * Copyright (C) 2004, 2009 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * This file contains tests for theKRB-FX-CF2 code in Kerberos, based - *on the PRF regression tests. It reads an input file, and writes an - *output file. It is assumed that the output file will be diffed - *against expected output to see whether regression tests pass. The - *input file is a very primitive format. - *First line: enctype - *second line: key to pass to string2key; also used as salt - *Third line: second key to pass to string2key - *fourth line: pepper1 - *fifth line: pepper2 - *scanf is used to read the file, so interior spaces are not permitted. The program outputs the hex bytes of the key. - */ -#include - -#include -#include -#include - -int main () { - char pepper1[1024], pepper2[1024]; - krb5_keyblock *k1 = NULL, *k2 = NULL, *out = NULL; - krb5_data s2k; - unsigned int i; - while (1) { - krb5_enctype enctype; - char s[1025]; - - if (scanf( "%d", &enctype) == EOF) - break; - if (scanf("%1024s", &s[0]) == EOF) - break; - assert (krb5_init_keyblock(0, enctype, 0, &k1) == 0); - s2k.data = &s[0]; - s2k.length = strlen(s); - assert(krb5_c_string_to_key (0, enctype, &s2k, &s2k, k1) == 0); - if (scanf("%1024s", &s[0]) == EOF) - break; - assert (krb5_init_keyblock(0, enctype, 0, &k2) == 0); - s2k.data = &s[0]; - s2k.length = strlen(s); - assert(krb5_c_string_to_key (0, enctype, &s2k, &s2k, k2) == 0); - if (scanf("%1024s %1024s", pepper1, pepper2) == EOF) - break; - assert(krb5_c_fx_cf2_simple(0, k1, pepper1, - k2, pepper2, &out) ==0); - i = out->length; - for (; i > 0; i--) { - printf ("%02x", - (unsigned int) ((unsigned char) out->contents[out->length-i])); - } - printf ("\n"); - - krb5_free_keyblock(0,out); - out = NULL; - - krb5_free_keyblock(0, k1); - k1 = NULL; - krb5_free_keyblock(0, k2); - k2 = NULL; - } - - return (0); -} diff --git a/src/lib/crypto/t_cf2.comments b/src/lib/crypto/t_cf2.comments deleted file mode 100644 index 0643b6507..000000000 --- a/src/lib/crypto/t_cf2.comments +++ /dev/null @@ -1,6 +0,0 @@ -The first test mirrors the first two tests in t_prf.in. - -The second test mirrors the following four tests in t_prf.in. - -The third and fourth tests are simple tests of the DES and 3DES PRF. -The fifth test is the same simple test for RC4. diff --git a/src/lib/crypto/t_cf2.expected b/src/lib/crypto/t_cf2.expected deleted file mode 100644 index 007000f21..000000000 --- a/src/lib/crypto/t_cf2.expected +++ /dev/null @@ -1,5 +0,0 @@ -97df97e4b798b29eb31ed7280287a92a -4d6ca4e629785c1f01baf55e2e548566b9617ae3a96868c337cb93b5e72b1c7b -43bae3738c9467e6 -e58f9eb643862c13ad38e529313462a7f73e62834fe54a01 -24d7f6b6bae4e5c00d2082c5ebab3672 diff --git a/src/lib/crypto/t_cf2.in b/src/lib/crypto/t_cf2.in deleted file mode 100644 index 094c2392f..000000000 --- a/src/lib/crypto/t_cf2.in +++ /dev/null @@ -1,25 +0,0 @@ -17 -key1 -key2 -a -b -18 -key1 -key2 -a -b -1 -key1 -key2 -a -b -16 -key1 -key2 -a -b -23 -key1 -key2 -a -b diff --git a/src/lib/crypto/t_cts.c b/src/lib/crypto/t_cts.c deleted file mode 100644 index aef813273..000000000 --- a/src/lib/crypto/t_cts.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * lib/crypto/vectors.c - * - * Copyright 2001, 2007 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Test vectors for crypto code, matching data submitted for inclusion - * with RFC1510bis. - * - * N.B.: Doesn't compile -- this file uses some routines internal to our - * crypto library which are declared "static" and thus aren't accessible - * without modifying the other sources. - */ - -#include -#include -#include -#include -#include "hash_provider.h" - -#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) - -const char *whoami; - -static void printhex (size_t len, const char *p) -{ - while (len--) - printf ("%02x", 0xff & *p++); -} - -static void printstringhex (const char *p) { printhex (strlen (p), p); } - -static void printdata (krb5_data *d) { printhex (d->length, d->data); } - -static void printkey (krb5_keyblock *k) { printhex (k->length, k->contents); } - - -#define JURISIC "Juri\305\241i\304\207" /* hi Miro */ -#define ESZETT "\303\237" -#define GCLEF "\360\235\204\236" /* outside BMP, woo hoo! */ - -static void -keyToData (krb5_keyblock *k, krb5_data *d) -{ - d->length = k->length; - d->data = k->contents; -} - -void check_error (int r, int line) { - if (r != 0) { - fprintf (stderr, "%s:%d: %s\n", __FILE__, line, - error_message (r)); - exit (1); - } -} -#define CHECK check_error(r, __LINE__) - -extern struct krb5_enc_provider krb5int_enc_des3; -struct krb5_enc_provider *enc = &krb5int_enc_des3; -extern struct krb5_enc_provider krb5int_enc_aes128, krb5int_enc_aes256; - -static void printd (const char *descr, krb5_data *d) { - int i, j; - const int r = 16; - - printf("%s:", descr); - - for (i = 0; i < d->length; i += r) { - printf("\n %04x: ", i); - for (j = i; j < i + r && j < d->length; j++) - printf(" %02x", 0xff & d->data[j]); -#ifdef SHOW_TEXT - for (; j < i + r; j++) - printf(" "); - printf(" "); - for (j = i; j < i + r && j < d->length; j++) { - int c = 0xff & d->data[j]; - printf("%c", isprint(c) ? c : '.'); - } -#endif - } - printf("\n"); -} -static void printk(const char *descr, krb5_keyblock *k) { - krb5_data d; - d.data = k->contents; - d.length = k->length; - printd(descr, &d); -} - -static void test_cts() -{ - static const char input[4*16] = - "I would like the General Gau's Chicken, please, and wonton soup."; - static const unsigned char aeskey[16] = "chicken teriyaki"; - static const int lengths[] = { 17, 31, 32, 47, 48, 64 }; - extern krb5_error_code krb5int_aes_encrypt(const krb5_keyblock *, - const krb5_data *, - const krb5_data *, - krb5_data *); - - int i; - char outbuf[64], encivbuf[16], decivbuf[16], outbuf2[64]; - krb5_data in, out, enciv, deciv, out2; - krb5_keyblock key; - krb5_error_code err; - - in.data = input; - out.data = outbuf; - out2.data = outbuf2; - enciv.length = deciv.length = 16; - enciv.data = encivbuf; - deciv.data = decivbuf; - key.contents = aeskey; - key.length = 16; - - memset(enciv.data, 0, 16); - printk("AES 128-bit key", &key); - for (i = 0; i < sizeof(lengths)/sizeof(lengths[0]); i++) { - memset(enciv.data, 0, 16); - memset(deciv.data, 0, 16); - - printf("\n"); - in.length = out.length = lengths[i]; - printd("IV", &enciv); - err = krb5int_aes_encrypt(&key, &enciv, &in, &out); - if (err) { - printf("error %ld from krb5int_aes_encrypt\n", (long)err); - exit(1); - } - printd("Input", &in); - printd("Output", &out); - printd("Next IV", &enciv); - out2.length = out.length; - err = krb5int_aes_decrypt(&key, &deciv, &out, &out2); - if (err) { - printf("error %ld from krb5int_aes_decrypt\n", (long)err); - exit(1); - } - if (!data_eq(out2, in)) { - printd("Decryption result DOESN'T MATCH", &out2); - exit(1); - } - if (memcmp(enciv.data, deciv.data, 16)) { - printd("Decryption IV result DOESN'T MATCH", &deciv); - exit(1); - } - } -} - -int main (int argc, char **argv) -{ - whoami = argv[0]; - test_cts(); - return 0; -} diff --git a/src/lib/crypto/t_encrypt.c b/src/lib/crypto/t_encrypt.c deleted file mode 100644 index 974dc585b..000000000 --- a/src/lib/crypto/t_encrypt.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * lib/crypto/t_encrypt.c - * - * Copyright 2001, 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * <<< Description >>> - */ -/* - * Some black-box tests of crypto systems. Make sure that we can decrypt things we encrypt, etc. - */ - -#include "k5-int.h" -#include "etypes.h" -#include - -/* What enctypes should we test?*/ -krb5_enctype interesting_enctypes[] = { - ENCTYPE_DES_CBC_CRC, - ENCTYPE_DES_CBC_MD4, - ENCTYPE_DES_CBC_MD5, - ENCTYPE_DES3_CBC_SHA1, - ENCTYPE_ARCFOUR_HMAC, - ENCTYPE_ARCFOUR_HMAC_EXP, - ENCTYPE_AES256_CTS_HMAC_SHA1_96, - ENCTYPE_AES128_CTS_HMAC_SHA1_96, - 0 -}; - -static void -test(const char *msg, krb5_error_code retval) -{ - printf("%s: . . . ", msg); - if (retval) { - printf("Failed: %s\n", error_message(retval)); - abort(); - } else - printf("OK\n"); -} - -static int compare_results(krb5_data *d1, krb5_data *d2) -{ - if (d1->length != d2->length) { - /* Decryption can leave a little trailing cruft. - For the current cryptosystems, this can be up to 7 bytes. */ - if (d1->length + 8 <= d2->length) - return EINVAL; - if (d1->length > d2->length) - return EINVAL; - } - if (memcmp(d1->data, d2->data, d1->length)) { - return EINVAL; - } - return 0; -} - -int -main () -{ - krb5_context context = 0; - krb5_data in, in2, out, out2, check, check2, state; - krb5_crypto_iov iov[5]; - int i; - size_t len; - krb5_enc_data enc_out, enc_out2; - krb5_error_code retval; - krb5_keyblock *key; - - memset(iov, 0, sizeof(iov)); - - in.data = "This is a test.\n"; - in.length = strlen (in.data); - in2.data = "This is another test.\n"; - in2.length = strlen (in2.data); - - test ("Seeding random number generator", - krb5_c_random_seed (context, &in)); - out.data = malloc(2048); - out2.data = malloc(2048); - check.data = malloc(2048); - check2.data = malloc(2048); - if (out.data == NULL || out2.data == NULL - || check.data == NULL || check2.data == NULL) - abort(); - out.length = 2048; - out2.length = 2048; - check.length = 2048; - check2.length = 2048; - for (i = 0; interesting_enctypes[i]; i++) { - krb5_enctype enctype = interesting_enctypes [i]; - printf ("Testing enctype %d\n", enctype); - test ("Initializing a keyblock", - krb5_init_keyblock (context, enctype, 0, &key)); - test ("Generating random key", - krb5_c_make_random_key (context, enctype, key)); - enc_out.ciphertext = out; - enc_out2.ciphertext = out2; - /* We use an intermediate `len' because size_t may be different size - than `int' */ - krb5_c_encrypt_length (context, key->enctype, in.length, &len); - enc_out.ciphertext.length = len; - test ("Encrypting", - krb5_c_encrypt (context, key, 7, 0, &in, &enc_out)); - test ("Decrypting", - krb5_c_decrypt (context, key, 7, 0, &enc_out, &check)); - test ("Comparing", compare_results (&in, &check)); - if ( krb5_c_crypto_length(context, key->enctype, KRB5_CRYPTO_TYPE_HEADER, &len) == 0 ){ - /* We support iov/aead*/ - int j, pos; - krb5_data signdata; - signdata.data = (char *) "This should be signed"; - signdata.length = strlen(signdata.data); - iov[0].flags= KRB5_CRYPTO_TYPE_STREAM; - iov[1].flags = KRB5_CRYPTO_TYPE_DATA; - iov[0].data = enc_out.ciphertext; - iov[1].data = out; - test("IOV stream decrypting", - krb5_c_decrypt_iov( context, key, 7, 0, iov, 2)); - test("Comparing results", - compare_results(&in, &iov[1].data)); - iov[0].flags = KRB5_CRYPTO_TYPE_HEADER; - iov[1].flags = KRB5_CRYPTO_TYPE_DATA; - iov[1].data = in; /*We'll need to copy memory before encrypt*/ - iov[2].flags = KRB5_CRYPTO_TYPE_SIGN_ONLY; - iov[2].data = signdata; - iov[3].flags = KRB5_CRYPTO_TYPE_PADDING; - iov[4].flags = KRB5_CRYPTO_TYPE_TRAILER; - test("Setting up iov lengths", - krb5_c_crypto_length_iov(context, key->enctype, iov, 5)); - for (j=0,pos=0; j <= 4; j++ ){ - if (iov[j].flags == KRB5_CRYPTO_TYPE_SIGN_ONLY) - continue; - iov[j].data.data = &out.data[pos]; - pos += iov[j].data.length; - } - assert (iov[1].data.length == in.length); - memcpy(iov[1].data.data, in.data, in.length); - test("iov encrypting", - krb5_c_encrypt_iov(context, key, 7, 0, iov, 5)); - assert(iov[1].data.length == in.length); - test("iov decrypting", - krb5_c_decrypt_iov(context, key, 7, 0, iov, 5)); - test("Comparing results", - compare_results(&in, &iov[1].data)); - - } - enc_out.ciphertext.length = out.length; - check.length = 2048; - test ("init_state", - krb5_c_init_state (context, key, 7, &state)); - test ("Encrypting with state", - krb5_c_encrypt (context, key, 7, &state, &in, &enc_out)); - test ("Encrypting again with state", - krb5_c_encrypt (context, key, 7, &state, &in2, &enc_out2)); - test ("free_state", - krb5_c_free_state (context, key, &state)); - test ("init_state", - krb5_c_init_state (context, key, 7, &state)); - test ("Decrypting with state", - krb5_c_decrypt (context, key, 7, &state, &enc_out, &check)); - test ("Decrypting again with state", - krb5_c_decrypt (context, key, 7, &state, &enc_out2, &check2)); - test ("free_state", - krb5_c_free_state (context, key, &state)); - test ("Comparing", - compare_results (&in, &check)); - test ("Comparing", - compare_results (&in2, &check2)); - krb5_free_keyblock (context, key); - } - - /* Test the RC4 decrypt fallback from key usage 9 to 8. */ - test ("Initializing an RC4 keyblock", - krb5_init_keyblock (context, ENCTYPE_ARCFOUR_HMAC, 0, &key)); - test ("Generating random RC4 key", - krb5_c_make_random_key (context, ENCTYPE_ARCFOUR_HMAC, key)); - enc_out.ciphertext = out; - krb5_c_encrypt_length (context, key->enctype, in.length, &len); - enc_out.ciphertext.length = len; - check.length = 2048; - test ("Encrypting with RC4 key usage 8", - krb5_c_encrypt (context, key, 8, 0, &in, &enc_out)); - test ("Decrypting with RC4 key usage 9", - krb5_c_decrypt (context, key, 9, 0, &enc_out, &check)); - test ("Comparing", compare_results (&in, &check)); - - free(out.data); - free(out2.data); - free(check.data); - free(check2.data); - return 0; -} - - diff --git a/src/lib/crypto/t_hmac.c b/src/lib/crypto/t_hmac.c deleted file mode 100644 index bf629c359..000000000 --- a/src/lib/crypto/t_hmac.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - * lib/crypto/t_hmac.c - * - * Copyright 2001,2002 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Test vectors for HMAC-MD5 and HMAC-SHA1 (placeholder only). - * Tests taken from RFC 2202. - */ - -#include -#include -#include -#include - -#include "hash_provider.h" - -#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) - -const char *whoami; - -static void keyToData (krb5_keyblock *k, krb5_data *d) { - d->length = k->length; - d->data = (char *) k->contents; -} - -#if 0 -static void check_error (int r, int line) { - if (r != 0) { - fprintf (stderr, "%s:%d: %s\n", __FILE__, line, - error_message (r)); - exit (1); - } -} -#define CHECK check_error(r, __LINE__) -#endif - -static void printd (const char *descr, krb5_data *d) { - int i, j; - const int r = 16; - - printf("%s (%d bytes):", descr, d->length); - - for (i = 0; i < d->length; i += r) { - printf("\n %04x: ", i); - for (j = i; j < i + r && j < d->length; j++) - printf(" %02x", 0xff & d->data[j]); - for (; j < i + r; j++) - printf(" "); - printf(" "); - for (j = i; j < i + r && j < d->length; j++) { - int c = 0xff & d->data[j]; - printf("%c", isprint(c) ? c : '.'); - } - } - printf("\n"); -} -static void printk(const char *descr, krb5_keyblock *k) { - krb5_data d; - keyToData(k,&d); - printd(descr, &d); -} - - - -struct hmac_test { - int key_len; - unsigned char key[180]; - int data_len; - unsigned char data[80]; - const char *hexdigest; -}; - -static krb5_error_code hmac1(const struct krb5_hash_provider *h, - krb5_keyblock *key, - krb5_data *in, krb5_data *out) -{ - char tmp[40]; - size_t blocksize, hashsize; - krb5_error_code err; - - printk(" test key", key); - blocksize = h->blocksize; - hashsize = h->hashsize; - if (hashsize > sizeof(tmp)) - abort(); - if (key->length > blocksize) { - krb5_data d, d2; - d.data = (char *) key->contents; - d.length = key->length; - d2.data = tmp; - d2.length = hashsize; - err = h->hash (1, &d, &d2); - if (err) { - com_err(whoami, err, "hashing key before calling hmac"); - exit(1); - } - key->length = d2.length; - key->contents = (krb5_octet *) d2.data; - printk(" pre-hashed key", key); - } - printd(" hmac input", in); - err = krb5_hmac(h, key, 1, in, out); - if (err == 0) - printd(" hmac output", out); - return err; -} - -static void test_hmac() -{ - krb5_keyblock key; - krb5_data in, out; - char outbuf[20]; - char stroutbuf[80]; - krb5_error_code err; - int i, j; - int lose = 0; - struct k5buf buf; - - /* RFC 2202 test vector. */ - static const struct hmac_test md5tests[] = { - { - 16, { - 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, - 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, 0xb, - }, - 8, "Hi There", - "0x9294727a3638bb1c13f48ef8158bfc9d" - }, - - { - 4, "Jefe", - 28, "what do ya want for nothing?", - "0x750c783e6ab0b503eaa86e310a5db738" - }, - - { - 16, { - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa - }, - 50, { - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, - }, - "0x56be34521d144c88dbb8c733f0e8b3f6" - }, - - { - 25, { - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, 0x19 - }, - 50, { - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - }, - "0x697eaf0aca3a3aea3a75164746ffaa79" - }, - - { - 16, { - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c - }, - 20, "Test With Truncation", - "0x56461ef2342edc00f9bab995690efd4c" - }, - - { - 80, { - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - }, - 54, "Test Using Larger Than Block-Size Key - Hash Key First", - "0x6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd" - }, - - { - 80, { - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - }, - 73, - "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data", - "0x6f630fad67cda0ee1fb1f562db3aa53e" - }, - }; - - for (i = 0; i < sizeof(md5tests)/sizeof(md5tests[0]); i++) { - key.contents = md5tests[i].key; - key.length = md5tests[i].key_len; - in.data = md5tests[i].data; - in.length = md5tests[i].data_len; - - out.data = outbuf; - out.length = 20; - printf("\nTest #%d:\n", i+1); - err = hmac1(&krb5int_hash_md5, &key, &in, &out); - if (err) { - com_err(whoami, err, "computing hmac"); - exit(1); - } - - krb5int_buf_init_fixed(&buf, stroutbuf, sizeof(stroutbuf)); - krb5int_buf_add(&buf, "0x"); - for (j = 0; j < out.length; j++) - krb5int_buf_add_fmt(&buf, "%02x", 0xff & outbuf[j]); - if (krb5int_buf_data(&buf) == NULL) - abort(); - if (strcmp(stroutbuf, md5tests[i].hexdigest)) { - printf("*** CHECK FAILED!\n" - "\tReturned: %s.\n" - "\tExpected: %s.\n", stroutbuf, md5tests[i].hexdigest); - lose++; - } else - printf("Matches expected result.\n"); - } - - /* Do again with SHA-1 tests.... */ - - if (lose) { - printf("%d failures; exiting.\n", lose); - exit(1); - } -} - - -int main (int argc, char **argv) -{ - whoami = argv[0]; - test_hmac(); - return 0; -} diff --git a/src/lib/crypto/t_nfold.c b/src/lib/crypto/t_nfold.c deleted file mode 100644 index 6be0a0934..000000000 --- a/src/lib/crypto/t_nfold.c +++ /dev/null @@ -1,165 +0,0 @@ -/* - * lib/crypto/t_nfold.c - * - * Copyright 1988, 1990 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Program to test the correctness of nfold implementation. - * - * exit returns 0 ==> success - * -1 ==> error - */ - -#include -#include -#include - -#include "k5-int.h" - -#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) - -static void printhex (size_t len, const unsigned char *p) -{ - while (len--) - printf ("%02x", 0xff & *p++); -} - -static void printstringhex (const unsigned char *p) { - printhex (strlen ((const char *) p), p); -} - -static void rfc_tests () -{ - int i; - struct { - char *input; - unsigned int n; - unsigned char exp[192/8]; - } tests[] = { - { "012345", 64, - { 0xbe,0x07,0x26,0x31,0x27,0x6b,0x19,0x55, } - }, - { "password", 56, - { 0x78,0xa0,0x7b,0x6c,0xaf,0x85,0xfa, } - }, - { "Rough Consensus, and Running Code", 64, - { 0xbb,0x6e,0xd3,0x08,0x70,0xb7,0xf0,0xe0, } - }, - { "password", 168, - { 0x59,0xe4,0xa8,0xca,0x7c,0x03,0x85,0xc3, - 0xc3,0x7b,0x3f,0x6d,0x20,0x00,0x24,0x7c, - 0xb6,0xe6,0xbd,0x5b,0x3e, } - }, - { "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 192, - { 0xdb,0x3b,0x0d,0x8f,0x0b,0x06,0x1e,0x60, - 0x32,0x82,0xb3,0x08,0xa5,0x08,0x41,0x22, - 0x9a,0xd7,0x98,0xfa,0xb9,0x54,0x0c,0x1b, } - }, - }; - unsigned char outbuf[192/8]; - - printf ("RFC tests:\n"); - for (i = 0; i < ASIZE (tests); i++) { - unsigned char *p = (unsigned char *) tests[i].input; - assert (tests[i].n / 8 <= sizeof (outbuf)); - krb5_nfold (8 * strlen ((char *) p), p, tests[i].n, outbuf); - printf ("%d-fold(\"%s\") =\n", tests[i].n, p); - printf ("%d-fold(", tests[i].n); - printstringhex (p); - printf (") =\n\t"); - printhex (tests[i].n / 8, outbuf); - printf ("\n\n"); - if (memcmp (outbuf, tests[i].exp, tests[i].n/8) != 0) { - printf ("wrong value! expected:\n\t"); - printhex (tests[i].n / 8, tests[i].exp); - exit (1); - } - } -} - -static void fold_kerberos(unsigned int nbytes) -{ - unsigned char cipher_text[300]; - int j; - - if (nbytes > 300) - abort(); - - printf("%d-fold(\"kerberos\") =\n\t", nbytes*8); - krb5_nfold(64, (unsigned char *) "kerberos", 8*nbytes, cipher_text); - for (j=0; j -#include -#include -#include - -#include "k5-int.h" - -static void printhex (size_t len, const char *p) -{ - while (len--) - printf (" %02X", 0xff & *p++); -} - -static void printdata (krb5_data *d) { - printhex (d->length, d->data); -} - -static void test_pbkdf2_rfc3211() -{ - char x[100]; - krb5_error_code err; - krb5_data d, pass, salt; - int i; - - /* RFC 3211 test cases. */ - static const struct { - const char *pass; - const char *salt; - unsigned int count; - size_t len; - const unsigned char expected[24]; - } t[] = { - { "password", "\x12\x34\x56\x78\x78\x56\x34\x12", 5, 8, - { 0xD1, 0xDA, 0xA7, 0x86, 0x15, 0xF2, 0x87, 0xE6 } }, - { "All n-entities must communicate with other " - "n-entities via n-1 entiteeheehees", - "\x12\x34\x56\x78\x78\x56\x34\x12", 500, 24, - { 0x6A, 0x89, 0x70, 0xBF, 0x68, 0xC9, 0x2C, 0xAE, - 0xA8, 0x4A, 0x8D, 0xF2, 0x85, 0x10, 0x85, 0x86, - 0x07, 0x12, 0x63, 0x80, 0xCC, 0x47, 0xAB, 0x2D } }, - }; - - d.data = x; - printf("RFC 3211 test of PBKDF#2\n"); - - for (i = 0; i < sizeof(t)/sizeof(t[0]); i++) { - - printf("pkbdf2(iter_count=%d, dklen=%d (%d bytes), salt=12 34 56 78 78 56 34 12,\n" - " pass=%s):\n ->", - t[i].count, t[i].len * 8, t[i].len, t[i].pass); - - d.length = t[i].len; - pass.data = t[i].pass; - pass.length = strlen(pass.data); - salt.data = t[i].salt; - salt.length = strlen(salt.data); - err = krb5int_pbkdf2_hmac_sha1 (&d, t[i].count, &pass, &salt); - if (err) { - printf("error in computing pbkdf2: %s\n", error_message(err)); - exit(1); - } - printdata(&d); - if (!memcmp(x, t[i].expected, t[i].len)) - printf("\nTest passed.\n\n"); - else { - printf("\n*** CHECK FAILED!\n"); - exit(1); - } - } -} - -int main () -{ - test_pbkdf2_rfc3211(); - return 0; -} diff --git a/src/lib/crypto/t_prf.c b/src/lib/crypto/t_prf.c deleted file mode 100644 index ac244eb9a..000000000 --- a/src/lib/crypto/t_prf.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * lib/crypto/t_prf.c - * - * Copyright (C) 2004 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * This file contains tests for the PRF code in Kerberos. IT reads an - * input file, and writes an output file. It is assumed that the - * output file will be diffed against expected output to see whether - * regression tests pass. The input file is a very primitive format. - * It includes an enctype and password to be string2keyed followed by - * a number of bytes of input length, followed by that many bytes of - * input. The program outputs krb5_c_prf of that input and key as a - * hex string. - */ - -#include "k5-int.h" -#include - -int main () { - krb5_data input, output; - krb5_keyblock *key = NULL; - unsigned int in_length; - unsigned int i; - size_t prfsz; - - while (1) { - krb5_enctype enctype; - char s[1025]; - - if (scanf( "%d", &enctype) == EOF) - break; - if (scanf("%1024s", &s[0]) == EOF) - break; - assert (krb5_init_keyblock(0, enctype, 0, &key) == 0); - input.data = &s[0]; - input.length = strlen(s); - assert(krb5_c_string_to_key (0, enctype, &input, &input, key) == 0); - - if (scanf("%u", &in_length) == EOF) - break; - - if (in_length ) { - unsigned int lc; - assert ((input.data = malloc(in_length)) != NULL); - for (lc = in_length; lc > 0; lc--) { - scanf ("%2x", &i); - input.data[in_length-lc] = (unsigned) (i&0xff); - } - input.length = in_length; - assert (krb5_c_prf_length(0, enctype, &prfsz) == 0); - assert (output.data = malloc(prfsz)); - output.length = prfsz; - assert (krb5_c_prf(0, key, &input, &output) == 0); - - free (input.data); - input.data = NULL; - } - for (; prfsz > 0; prfsz--) { - printf ("%02x", - (unsigned int) ((unsigned char ) output.data[output.length-prfsz])); - } - printf ("\n"); - - free (output.data); - output.data = NULL; - krb5_free_keyblock(0, key); - key = NULL; - } - - return (0); -} diff --git a/src/lib/crypto/t_prf.comments b/src/lib/crypto/t_prf.comments deleted file mode 100644 index 124584259..000000000 --- a/src/lib/crypto/t_prf.comments +++ /dev/null @@ -1,8 +0,0 @@ -The first two tests are effectively a call to krb-fx-cf2 for -aes-128-cts. This mirrorrs the first test in t_cf2.in. - - -The next four tests mirror a call to KRB-FX-CF2 for aes256-cts; this -mirrors the second test in t_cf2.in. - - diff --git a/src/lib/crypto/t_prf.expected b/src/lib/crypto/t_prf.expected deleted file mode 100644 index eadfd9747..000000000 --- a/src/lib/crypto/t_prf.expected +++ /dev/null @@ -1,6 +0,0 @@ -77b39a37a868920f2a51f9dd150c5717 -e06c0dd31ff02091994f2ef5178bfe3d -b2628c788e2e9c4a9bb4644678c29f2f -b406373350cee8a6126f4a9b65a0cd21 -ff0e289ea756c0559a0e911856961a49 -0d674dd0f9a6806525a4d92e828bd15a diff --git a/src/lib/crypto/t_prf.in b/src/lib/crypto/t_prf.in deleted file mode 100644 index f45c41618..000000000 --- a/src/lib/crypto/t_prf.in +++ /dev/null @@ -1,18 +0,0 @@ -17 -key1 -2 0161 -17 -key2 -2 0162 -18 -key1 -2 0161 -18 -key1 -2 0261 -18 -key2 -2 0162 -18 -key2 -2 0262 diff --git a/src/lib/crypto/t_prng.c b/src/lib/crypto/t_prng.c deleted file mode 100644 index 7df743bae..000000000 --- a/src/lib/crypto/t_prng.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * lib/crypto/t_prng.c - * - * Copyright (C) 2001 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * This file contains tests for the PRNG code in Kerberos. It reads - * an input file, and writes an output file. It is assumed that the - * output file will be diffed against expected output to see whether - * regression tests pass. The input file has a very primitive format. - * It is composed of alternating seeds and outputs. The first line in - * the file is an integer source id from the krb5_c_randsource enum in - * krb5.h. Then an integer seed length is read. Then that many bytes - * (encoded in hex) are read; whitespace or newlines may be inserted - * between bytes. Then after the seed data is an integer describing - * how many bytes of output should be written. Then another source ID - * and seed length is read. If the seed length is 0, the source id is - * ignored and the seed is not seeded. - */ - -#include "k5-int.h" -#include - -int main () { - krb5_error_code ret; - krb5_data input, output; - unsigned int source_id, seed_length; - unsigned int i; - while (1) { - /* Read source*/ - if (scanf ("%u", &source_id ) == EOF ) - break; - /* Read seed length*/ - if (scanf ("%u", &seed_length) == EOF) - break; - if (seed_length ) { - unsigned int lc; - assert ((input.data = malloc(seed_length)) != NULL); - for (lc = seed_length; lc > 0; lc--) { - scanf ("%2x", &i); - input.data[seed_length-lc] = (unsigned) (i&0xff); - } - input.length = seed_length; - assert (krb5_c_random_add_entropy (0, source_id, &input) == 0); - free (input.data); - input.data = NULL; - } - if (scanf ("%u", &i) == EOF) - break; - if (i) { - assert ((output.data = malloc (i)) != NULL); - output.length = i; - ret = krb5_c_random_make_octets (0, &output); - if (ret) - printf ("failed\n"); - else { - for (; i > 0; i--) { - printf ("%02x", - (unsigned int) ((unsigned char ) output.data[output.length-i])); - } - printf ("\n"); - } - free (output.data); - output.data = NULL; - } - } - return (0); -} diff --git a/src/lib/crypto/t_prng.comments b/src/lib/crypto/t_prng.comments deleted file mode 100644 index 1666b7060..000000000 --- a/src/lib/crypto/t_prng.comments +++ /dev/null @@ -1,14 +0,0 @@ -Things this test tries to do: -*adding data -* getting random data -* adding more data but not enough for reseed -*getting more random data -*adding enough to trigger a reseed -*getting more random data -* getting random data without a reseed inbetween -* getting enough data to trigger a gate - - -If you adjust the blocksize or the seeding parameters then this test -should be adjusted. - diff --git a/src/lib/crypto/t_prng.expected b/src/lib/crypto/t_prng.expected deleted file mode 100644 index f7f165051..000000000 --- a/src/lib/crypto/t_prng.expected +++ /dev/null @@ -1,4 +0,0 @@ -d2f8fbd707a8ece5cb11a02f -eb4cb6e06236ea1c0529f7acbfca8d78cb85bb1d -a244005ae870604342b0386025874ec4306c1dd483c118621b -63e6408afdf9fd225839a7afcc6da6ae494fb4f82bd21ea06bb17ca0848bdae8cea671f545aac52699951caba960c536024b4102f47d61d61fd7b17582a4cf50ba7d215062558f71483249e079689893f3bf25def7f45f9e852281269904d401d6719e3115f6410088c6c5171e878494362684d2116633bb9ea8d9ed5faec73cb076c44d5d639bc2c8ae3de54f0e1e092d5ea439e607e9cd73053bbdf40723f5b48f298fdeeef845e22e06f2f6362fc67fba366e638a7988999d456dcc3d53b23388d685620a7c446d28cd94b13049761b64779db5412e78ac4bab2aacf103fd1b9ceb7213d43710d6a46fd4223fa20e0a68d3e16a82cbadea650ba815dc9ee99b4eb8e2acdac866a05d90ab9de3246db0560fb4b36633bb642c3ea9bf358937dda743f9cef1148791c2cac58995b8eb8fdb1c0cce1686e04ebef5ae7aae36691faafbe8920d3c013f125b687eb019faefa70fc750c52e2e2e33f426824bf1da31268a9bb8d9501f2290375755f8bf77b46639346b4011b78ce9d81105c7791ec5991a2f1eab037488b604df1a21c5c4e36a7c76dca5884d36e30fe8d30d0e7d93fab72062219390655eace2b434b0e2cd21ec9c5a8aa13e783afadcdf386fc43b960c518acb38d7e3da2f67695c1c1c25c4f251b40f4c2e42e89f6f642c32e66159f6ce24aa910fb5d95e3a899a4de5efcf570996e1a662d14362b65d00524df79cd56be93bd572526e4dfd1cf9f7586bc021105cf5456b28c1f45a6d354d000a113e15f64aa0b5253830c07afc8fa47b58dbba8bbae1645b2093035f2387036229dec6f7141b444b8bb7d0382a742bd5c746ba2d7af3af1cadb2dd90bda87d5daed2d2eebd243c7b2d06955d0cc7fe1061d4cfa3b061aaeb97084d9f9a7ec9dbe9e642f4f090d57b5ea1bd8b393f00896d3dc7089e1fc4c2fed7336c2a8c6d119a682c6cc4ae1ccedd30292f2c5570bf4d6287ce8e20b8b34e7fc38e87273f588cd33b8c913defaee5f6bf8fdeda72531c845a6f97a84d5e9b9a6497d4c48614dee7693df35faedc008fded852be8d4bffd475476336e54ed48a827b99d3f0e39019a40d43aef5ae522ec6e280f6a8e7d2713f3c3188bed2476a84af5a5afefa0fa178ed07de0e073693e8790f8bbd0cf9183e48f140b556e723565c382cf7a4c186748189a14e603e4ac70e2b80c266334231207721d16d834a973b48cfec584620624686603cfd66d55dbf8dd8eccd99d85f041c624ec3a7bec314af95d2313afd43cc5cc19249cf85b7ab0b5a4530b597341e7477b249fef1a07eb0d8fa790e9bce752e8b2f7086e98ab44751e0a1b37f29682ce67c0de7a2fd036f26ed719fc343bbf49432aec651d884c99c24d5943c747f7ec3b48d4c2236a8cb6151794daeda073774cc88ff121fdd423b81ef2f34c8f281ca2e5366faee87ff7a623484f2937cc0680ed76ead32b43cb6c67a21f8089b435f38a404d267397c6435cfac16591a3573d9e92f8c4a8028719c22662b903ddb16e08ea7bb2d6b8938c06bdddb4d174c7f2c5d812ed3a34ba8859a1ae841b3b9d5522372018c9aa55b048df826f05a087f185808cb66899f320783a1c4aa2dcd5f2665405ba7e5726e122b67559a39da30956e49fe7711d1b2506e159c5ea42ce0a1ad497220ee3b3e5ebcb73db975bd08e8be56e5f4533b8295b10d4b0fef466de6540f8fe10530c9716d83a12f5ffbba5b4dbc50ed89388d04e7a15d3d9d251041ed5303efa2525bc62a5aeb821f7838676811784584534be8a7fc667f09c3fe1bbf7d0aad29324f562086ecb8326829413867 diff --git a/src/lib/crypto/t_prng.reseedtest b/src/lib/crypto/t_prng.reseedtest deleted file mode 100644 index 5eee0c064..000000000 --- a/src/lib/crypto/t_prng.reseedtest +++ /dev/null @@ -1,31 +0,0 @@ -1 -160 - cb 12 70 40 ee fb 76 2e 32 0d f1 0c a7 a9 36 f8 - c8 f3 35 4e 0f 51 18 cd 25 0f 48 5b e4 97 aa 4f - be 7e 93 af dd 15 29 fc 24 4f 0b 9a 9b 1d ad 7f - 32 c8 a6 96 d4 34 aa 83 d2 d7 33 b0 2f aa ba f6 - cf 8c 78 ad 8a 52 e1 48 e4 7c a7 c5 57 49 31 ea - db b7 9b 6b ab 13 f3 12 a5 ec 67 db 1e 83 73 be - ca 59 fc ed 29 8c f3 ef ca fd 81 55 fa 91 3b 31 - da 24 d2 8b c1 a5 c1 3a 9c 50 a6 3c a1 60 31 0f - 62 c7 88 9b 1a e9 9f 3c 0f 04 d0 35 11 45 f0 8b - 84 a2 26 85 67 f1 e6 2b 34 6b ab 9b 3f c1 a1 0e -0 -1 -40 - f4 fc ab 98 45 a0 41 e4 4d 65 9c eb c2 c9 74 a4 - 55 df 6c 78 78 bc db ae e7 63 b8 a7 33 3b d7 50 - f6 33 c4 a0 1d 14 45 04 -0 -0 -40 - 16 80 1d 78 39 4b 3a 27 80 87 08 6c a9 37 59 74 - 60 f8 fc 37 10 4a 8a c4 d6 3e 6a 41 1a e1 5f 69 - 92 12 5a e1 3b 86 f1 5d -0 -0 -40 - a3 c8 78 4a a0 4d ce 3c 2a 8e 34 bf f7 06 dc d7 - 92 13 bd 74 45 72 40 b6 1c d6 55 28 47 1e f4 70 - 74 e4 94 d7 17 a6 7e 3b -20 diff --git a/src/lib/crypto/t_prng.reseedtest-comments b/src/lib/crypto/t_prng.reseedtest-comments deleted file mode 100644 index e50e09602..000000000 --- a/src/lib/crypto/t_prng.reseedtest-comments +++ /dev/null @@ -1,21 +0,0 @@ -The reseedtest is intended to allow confirmation that if sufficient -entropy is provided then the PRNG will reseed (well initially seed) -itself before the first random data is requested. This test is not -useful to run in an automated manner because the point is to look at -internal function call order. - -To test this, set a break point at krb5int_yarrow_reseed and -krb5_c_random_make_octets and run the test. The reseed function -should be called with a pool of 1 (YARROW_SLOW_POOL) before -krb5_c_random_make_octets is called. - -A slow reseed should require two sources to reach sufficient entropy. -Sources start out sending entropy to fast pool then alternate with -slow pool. So this test does the following: -* Seed source 1 -* Seed source 1 (this time to slow pool) -* Seed source 0 -* Seed source 0 (to slow pool triggering reseed) -* Output some random data - - diff --git a/src/lib/crypto/t_prng.reseedtest-expected b/src/lib/crypto/t_prng.reseedtest-expected deleted file mode 100644 index d7b50801e..000000000 --- a/src/lib/crypto/t_prng.reseedtest-expected +++ /dev/null @@ -1 +0,0 @@ -fd543f42aded9bd725c9b05682cd0f504c1b33d1 diff --git a/src/lib/crypto/t_prng.seed b/src/lib/crypto/t_prng.seed deleted file mode 100644 index 79f4f6458..000000000 --- a/src/lib/crypto/t_prng.seed +++ /dev/null @@ -1,25 +0,0 @@ -2 -20 - c9 72 2b e4 90 e1 fa 4b da d4 2f 43 0d dd d9 91 - 39 d0 23 c4 -0 -1 -24 - 87 1c 4f d4 4a 8b b8 cf 54 4e eb 9b 1f bb 7a 8e - 9a 7d 8d 62 - ca 41 18 00 -12 -0 -0 -20 -1 -24 - 28 d4 bd d4 81 85 ca 70 d5 f0 e4 a4 f3 45 80 01 - 6a 34 79 69 0e e0 cd 21 -25 -2 -40 - de 7c f0 c5 6a 37 0b 34 f4 0c 3a 19 31 eb 66 f1 - ae 5f c6 a3 64 3f 2e a9 76 e1 87 93 df b6 94 86 - bd 96 57 3f 31 e6 88 8c -1290 diff --git a/src/lib/crypto/valid_cksumtype.c b/src/lib/crypto/valid_cksumtype.c deleted file mode 100644 index 8fd9effc9..000000000 --- a/src/lib/crypto/valid_cksumtype.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_boolean KRB5_CALLCONV -krb5_c_valid_cksumtype(krb5_cksumtype ctype) -{ - unsigned int i; - - for (i=0; ietype == etype && (k->flags & ETYPE_WEAK)) { - return(1); - } - } - - return(0); -} diff --git a/src/lib/crypto/vectors.c b/src/lib/crypto/vectors.c deleted file mode 100644 index 64a5071c0..000000000 --- a/src/lib/crypto/vectors.c +++ /dev/null @@ -1,457 +0,0 @@ -/* - * lib/crypto/vectors.c - * - * Copyright 2001 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * Test vectors for crypto code, matching data submitted for inclusion - * with RFC1510bis. - * - * N.B.: Doesn't compile -- this file uses some routines internal to our - * crypto library which are declared "static" and thus aren't accessible - * without modifying the other sources. - */ - -#include -#include -#include -#include -#include "hash_provider.h" - -#define ASIZE(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) - -const char *whoami; - -static void printhex (size_t len, const char *p) -{ - while (len--) - printf ("%02x", 0xff & *p++); -} - -static void printstringhex (const char *p) { printhex (strlen (p), p); } - -static void printdata (krb5_data *d) { printhex (d->length, d->data); } - -static void printkey (krb5_keyblock *k) { printhex (k->length, k->contents); } - -static void test_nfold () -{ - int i; - static const struct { - char *input; - int n; - } tests[] = { - { "012345", 64, }, - { "password", 56, }, - { "Rough Consensus, and Running Code", 64, }, - { "password", 168, }, - { "MASSACHVSETTS INSTITVTE OF TECHNOLOGY", 192 }, - { "Q", 168 }, - { "ba", 168 }, - }; - unsigned char outbuf[192/8]; - - for (i = 0; i < ASIZE (tests); i++) { - char *p = tests[i].input; - assert (tests[i].n / 8 <= sizeof (outbuf)); - printf ("%d-fold(\"%s\") =\n", tests[i].n, p); - printf ("%d-fold(", tests[i].n); - printstringhex (p); - printf (") =\n\t"); - krb5_nfold (8 * strlen (p), p, tests[i].n, outbuf); - printhex (tests[i].n / 8U, outbuf); - printf ("\n\n"); - } -} - -#define JURISIC "Juri\305\241i\304\207" /* hi Miro */ -#define ESZETT "\303\237" -#define GCLEF "\360\235\204\236" /* outside BMP, woo hoo! */ - -/* Some weak keys: - {0x1f,0x1f,0x1f,0x1f,0x0e,0x0e,0x0e,0x0e}, - {0xe0,0xe0,0xe0,0xe0,0xf1,0xf1,0xf1,0xf1}, - so try to generate them. */ - -static void -test_mit_des_s2k () -{ - static const struct { - const char *pass; - const char *salt; - } pairs[] = { - { "password", "ATHENA.MIT.EDUraeburn" }, - { "potatoe", "WHITEHOUSE.GOVdanny" }, - { "penny", "EXAMPLE.COMbuckaroo", }, - { GCLEF, "EXAMPLE.COMpianist" }, - { ESZETT, "ATHENA.MIT.EDU" JURISIC }, - /* These two trigger weak-key fixups. */ - { "11119999", "AAAAAAAA" }, - { "NNNN6666", "FFFFAAAA" }, - }; - int i; - - for (i = 0; i < ASIZE (pairs); i++) { - const char *p = pairs[i].pass; - const char *s = pairs[i].salt; - krb5_data pd; - krb5_data sd; - unsigned char key_contents[60]; - krb5_keyblock key; - krb5_error_code r; - char buf[80]; - - key.contents = key_contents; - - pd.length = strlen (p); - pd.data = (char *) p; - sd.length = strlen (s); - sd.data = (char *) s; - - assert (strlen (s) + 4 < sizeof (buf)); - snprintf (buf, sizeof (buf), "\"%s\"", s); - printf ( "salt: %-25s", buf); - printhex (strlen(s), s); - snprintf (buf, sizeof (buf), "\"%s\"", p); - printf ("\npassword: %-25s", buf); - printhex (strlen(p), p); - printf ("\n"); - r = krb5int_des_string_to_key (0, &pd, &sd, 0, &key); - printf ( "DES key: %-25s", ""); - printhex (key.length, key.contents); - printf ("\n\n"); - } -} - -static void -test_s2k (krb5_enctype enctype) -{ - static const struct { - const char *pass; - const char *salt; - } pairs[] = { - { "password", "ATHENA.MIT.EDUraeburn" }, - { "potatoe", "WHITEHOUSE.GOVdanny" }, - { "penny", "EXAMPLE.COMbuckaroo", }, - { ESZETT, "ATHENA.MIT.EDU" JURISIC }, - { GCLEF, "EXAMPLE.COMpianist" }, - }; - int i; - - for (i = 0; i < ASIZE (pairs); i++) { - const char *p = pairs[i].pass; - const char *s = pairs[i].salt; - krb5_data pd, sd; - unsigned char key_contents[60]; - krb5_keyblock key; - krb5_error_code r; - char buf[80]; - - pd.length = strlen (p); - pd.data = (char *) p; - sd.length = strlen (s); - sd.data = (char *) s; - key.contents = key_contents; - - assert (strlen (s) + 4 < sizeof (buf)); - snprintf (buf, sizeof(buf), "\"%s\"", s); - printf ( "salt:\t%s\n\t", buf); - printhex (strlen(s), s); - snprintf (buf, sizeof(buf), "\"%s\"", p); - printf ("\npasswd:\t%s\n\t", buf); - printhex (strlen(p), p); - printf ("\n"); - r = krb5_c_string_to_key (0, enctype, &pd, &sd, &key); - printf ( "key:\t"); - printhex (key.length, key.contents); - printf ("\n\n"); - } -} - -static void test_des3_s2k () { test_s2k (ENCTYPE_DES3_CBC_SHA1); } - -static void -keyToData (krb5_keyblock *k, krb5_data *d) -{ - d->length = k->length; - d->data = k->contents; -} - -void check_error (int r, int line) { - if (r != 0) { - fprintf (stderr, "%s:%d: %s\n", __FILE__, line, - error_message (r)); - exit (1); - } -} -#define CHECK check_error(r, __LINE__) - -extern struct krb5_enc_provider krb5int_enc_des3; -struct krb5_enc_provider *enc = &krb5int_enc_des3; -extern struct krb5_enc_provider krb5int_enc_aes128, krb5int_enc_aes256; - -void DK (krb5_keyblock *out, krb5_keyblock *in, const krb5_data *usage) { - krb5_error_code r; - r = krb5_derive_key (enc, in, out, usage); - CHECK; -} - -void DR (krb5_data *out, krb5_keyblock *in, const krb5_data *usage) { - krb5_error_code r; - r = krb5_derive_random (enc, in, out, usage); - CHECK; -} - -#define KEYBYTES 21 -#define KEYLENGTH 24 - -void test_dr_dk () -{ - static const struct { - unsigned char keydata[KEYLENGTH]; - int usage_len; - unsigned char usage[8]; - } derive_tests[] = { - { - { - 0xdc, 0xe0, 0x6b, 0x1f, 0x64, 0xc8, 0x57, 0xa1, - 0x1c, 0x3d, 0xb5, 0x7c, 0x51, 0x89, 0x9b, 0x2c, - 0xc1, 0x79, 0x10, 0x08, 0xce, 0x97, 0x3b, 0x92, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, - }, - { - { - 0x5e, 0x13, 0xd3, 0x1c, 0x70, 0xef, 0x76, 0x57, - 0x46, 0x57, 0x85, 0x31, 0xcb, 0x51, 0xc1, 0x5b, - 0xf1, 0x1c, 0xa8, 0x2c, 0x97, 0xce, 0xe9, 0xf2, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, - }, - { - { - 0x98, 0xe6, 0xfd, 0x8a, 0x04, 0xa4, 0xb6, 0x85, - 0x9b, 0x75, 0xa1, 0x76, 0x54, 0x0b, 0x97, 0x52, - 0xba, 0xd3, 0xec, 0xd6, 0x10, 0xa2, 0x52, 0xbc, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, - }, - { - { - 0x62, 0x2a, 0xec, 0x25, 0xa2, 0xfe, 0x2c, 0xad, - 0x70, 0x94, 0x68, 0x0b, 0x7c, 0x64, 0x94, 0x02, - 0x80, 0x08, 0x4c, 0x1a, 0x7c, 0xec, 0x92, 0xb5, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, - }, - { - { - 0xd3, 0xf8, 0x29, 0x8c, 0xcb, 0x16, 0x64, 0x38, - 0xdc, 0xb9, 0xb9, 0x3e, 0xe5, 0xa7, 0x62, 0x92, - 0x86, 0xa4, 0x91, 0xf8, 0x38, 0xf8, 0x02, 0xfb, - }, - 8, { 'k', 'e', 'r', 'b', 'e', 'r', 'o', 's' }, - }, - { - { - 0xb5, 0x5e, 0x98, 0x34, 0x67, 0xe5, 0x51, 0xb3, - 0xe5, 0xd0, 0xe5, 0xb6, 0xc8, 0x0d, 0x45, 0x76, - 0x94, 0x23, 0xa8, 0x73, 0xdc, 0x62, 0xb3, 0x0e, - }, - 7, { 'c', 'o', 'm', 'b', 'i', 'n', 'e', }, - }, - { - { - 0xc1, 0x08, 0x16, 0x49, 0xad, 0xa7, 0x43, 0x62, - 0xe6, 0xa1, 0x45, 0x9d, 0x01, 0xdf, 0xd3, 0x0d, - 0x67, 0xc2, 0x23, 0x4c, 0x94, 0x07, 0x04, 0xda, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, - }, - { - { - 0x5d, 0x15, 0x4a, 0xf2, 0x38, 0xf4, 0x67, 0x13, - 0x15, 0x57, 0x19, 0xd5, 0x5e, 0x2f, 0x1f, 0x79, - 0x0d, 0xd6, 0x61, 0xf2, 0x79, 0xa7, 0x91, 0x7c, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, - }, - { - { - 0x79, 0x85, 0x62, 0xe0, 0x49, 0x85, 0x2f, 0x57, - 0xdc, 0x8c, 0x34, 0x3b, 0xa1, 0x7f, 0x2c, 0xa1, - 0xd9, 0x73, 0x94, 0xef, 0xc8, 0xad, 0xc4, 0x43, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0x55 }, - }, - { - { - 0x26, 0xdc, 0xe3, 0x34, 0xb5, 0x45, 0x29, 0x2f, - 0x2f, 0xea, 0xb9, 0xa8, 0x70, 0x1a, 0x89, 0xa4, - 0xb9, 0x9e, 0xb9, 0x94, 0x2c, 0xec, 0xd0, 0x16, - }, - 5, { 0x00, 0x00, 0x00, 0x01, 0xaa }, - }, - }; - int i; - - for (i = 0; i < ASIZE(derive_tests); i++) { -#define D (derive_tests[i]) - krb5_keyblock key; - krb5_data usage; - - unsigned char drData[KEYBYTES]; - krb5_data dr; - unsigned char dkData[KEYLENGTH]; - krb5_keyblock dk; - - key.length = KEYLENGTH, key.contents = D.keydata; - usage.length = D.usage_len, usage.data = D.usage; - dr.length = KEYBYTES, dr.data = drData; - dk.length = KEYLENGTH, dk.contents = dkData; - - printf ("key:\t"); printkey (&key); printf ("\n"); - printf ("usage:\t"); printdata (&usage); printf ("\n"); - DR (&dr, &key, &usage); - printf ("DR:\t"); printdata (&dr); printf ("\n"); - DK (&dk, &key, &usage); - printf ("DK:\t"); printkey (&dk); printf ("\n\n"); - } -} - - -static void printd (const char *descr, krb5_data *d) { - int i, j; - const int r = 16; - - printf("%s:", descr); - - for (i = 0; i < d->length; i += r) { - printf("\n %04x: ", i); - for (j = i; j < i + r && j < d->length; j++) - printf(" %02x", 0xff & d->data[j]); - for (; j < i + r; j++) - printf(" "); - printf(" "); - for (j = i; j < i + r && j < d->length; j++) { - int c = 0xff & d->data[j]; - printf("%c", isprint(c) ? c : '.'); - } - } - printf("\n"); -} -static void printk(const char *descr, krb5_keyblock *k) { - krb5_data d; - d.data = k->contents; - d.length = k->length; - printd(descr, &d); -} - - -static void -test_pbkdf2() -{ - static struct { - int count; - char *pass; - char *salt; - } test[] = { - { 1, "password", "ATHENA.MIT.EDUraeburn" }, - { 2, "password", "ATHENA.MIT.EDUraeburn" }, - { 1200, "password", "ATHENA.MIT.EDUraeburn" }, - { 5, "password", "\x12\x34\x56\x78\x78\x56\x34\x12" }, - { 1200, - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "pass phrase equals block size" }, - { 1200, - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", - "pass phrase exceeds block size" }, - { 50, "\xf0\x9d\x84\x9e", "EXAMPLE.COMpianist" }, - }; - unsigned char x[100]; - unsigned char x2[100]; - int j; - krb5_error_code err; - krb5_data d; - krb5_keyblock k, dk; - krb5_data usage, pass, salt; - - d.data = x; - dk.contents = x2; - - usage.data = "kerberos"; - usage.length = 8; - - for (j = 0; j < sizeof(test)/sizeof(test[0]); j++) { - printf("pkbdf2(count=%d, pass=\"%s\", salt=", - test[j].count, test[j].pass); - if (isprint(test[j].salt[0])) - printf("\"%s\")\n", test[j].salt); - else { - char *s = test[j].salt; - printf("0x"); - while (*s) - printf("%02X", 0xff & *s++); - printf(")\n"); - } - - d.length = 16; - pass.data = test[j].pass; - pass.length = strlen(pass.data); - salt.data = test[j].salt; - salt.length = strlen(salt.data); - err = krb5int_pbkdf2_hmac_sha1 (&d, test[j].count, &pass, &salt); - printd("128-bit PBKDF2 output", &d); - enc = &krb5int_enc_aes128; - k.contents = d.data; - k.length = d.length; - dk.length = d.length; - DK (&dk, &k, &usage); - printk("128-bit AES key",&dk); - - d.length = 32; - err = krb5int_pbkdf2_hmac_sha1 (&d, test[j].count, &pass, &salt); - printd("256-bit PBKDF2 output", &d); - enc = &krb5int_enc_aes256; - k.contents = d.data; - k.length = d.length; - dk.length = d.length; - DK (&dk, &k, &usage); - printk("256-bit AES key", &dk); - - printf("\n"); - } -} - -int main (int argc, char **argv) -{ - whoami = argv[0]; - test_nfold (); -#if 0 - test_mit_des_s2k (); - test_des3_s2k (); - test_dr_dk (); -#endif - test_pbkdf2(); - return 0; -} diff --git a/src/lib/crypto/verify_checksum.c b/src/lib/crypto/verify_checksum.c deleted file mode 100644 index 72b5595de..000000000 --- a/src/lib/crypto/verify_checksum.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 1998 by the FundsXpress, INC. - * - * All rights reserved. - * - * Export of this software from the United States of America may require - * a specific license from the United States Government. It is the - * responsibility of any person or organization contemplating export to - * obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of FundsXpress. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. FundsXpress makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * THIS SOFTWARE 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. - */ - -#include "k5-int.h" -#include "cksumtypes.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_verify_checksum(krb5_context context, const krb5_keyblock *key, - krb5_keyusage usage, const krb5_data *data, - const krb5_checksum *cksum, krb5_boolean *valid) -{ - unsigned int i; - size_t hashsize; - krb5_error_code ret; - krb5_data indata; - krb5_checksum computed; - - for (i=0; ichecksum_type) - break; - } - - if (i == krb5_cksumtypes_length) - return(KRB5_BAD_ENCTYPE); - - /* if there's actually a verify function, call it */ - - indata.length = cksum->length; - indata.data = (char *) cksum->contents; - - if (krb5_cksumtypes_list[i].keyhash) { - const struct krb5_keyhash_provider *keyhash; - - keyhash = krb5_cksumtypes_list[i].keyhash; - - if (keyhash->verify == NULL && keyhash->verify_iov != NULL) { - krb5_crypto_iov iov[1]; - - iov[0].flags = KRB5_CRYPTO_TYPE_DATA; - iov[0].data = *data; - - return (*keyhash->verify_iov)(key, usage, 0, iov, 1, &indata, valid); - } else if (keyhash->verify != NULL) { - return (*keyhash->verify)(key, usage, 0, data, &indata, valid); - } - } - - /* otherwise, make the checksum again, and compare */ - - if ((ret = krb5_c_checksum_length(context, cksum->checksum_type, &hashsize))) - return(ret); - - if (cksum->length != hashsize) - return(KRB5_BAD_MSIZE); - - computed.length = hashsize; - - if ((ret = krb5_c_make_checksum(context, cksum->checksum_type, key, usage, - data, &computed))) { - free(computed.contents); - return(ret); - } - - *valid = (memcmp(computed.contents, cksum->contents, hashsize) == 0); - - free(computed.contents); - - return(0); -} diff --git a/src/lib/crypto/verify_checksum_iov.c b/src/lib/crypto/verify_checksum_iov.c deleted file mode 100644 index 08c0a5c7b..000000000 --- a/src/lib/crypto/verify_checksum_iov.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * lib/crypto/verify_checksum_iov.c - * - * Copyright 2008 by the Massachusetts Institute of Technology. - * All Rights Reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - */ - -#include "k5-int.h" -#include "cksumtypes.h" -#include "aead.h" - -krb5_error_code KRB5_CALLCONV -krb5_c_verify_checksum_iov(krb5_context context, - krb5_cksumtype checksum_type, - const krb5_keyblock *key, - krb5_keyusage usage, - const krb5_crypto_iov *data, - size_t num_data, - krb5_boolean *valid) -{ - unsigned int i; - size_t cksumlen; - krb5_error_code ret; - krb5_data computed; - krb5_crypto_iov *checksum; - - for (i = 0; i < krb5_cksumtypes_length; i++) { - if (krb5_cksumtypes_list[i].ctype == checksum_type) - break; - } - - if (i == krb5_cksumtypes_length) - return(KRB5_BAD_ENCTYPE); - - checksum = krb5int_c_locate_iov((krb5_crypto_iov *)data, num_data, KRB5_CRYPTO_TYPE_CHECKSUM); - if (checksum == NULL) - return(KRB5_BAD_MSIZE); - - /* if there's actually a verify function, call it */ - - if (krb5_cksumtypes_list[i].keyhash && - krb5_cksumtypes_list[i].keyhash->verify_iov) - return((*(krb5_cksumtypes_list[i].keyhash->verify_iov))(key, usage, 0, - data, num_data, - &checksum->data, - valid)); - - /* otherwise, make the checksum again, and compare */ - - if (krb5_cksumtypes_list[i].keyhash != NULL) - computed.length = krb5_cksumtypes_list[i].keyhash->hashsize; - else - computed.length = krb5_cksumtypes_list[i].hash->hashsize; - - if (krb5_cksumtypes_list[i].trunc_size != 0) - cksumlen = krb5_cksumtypes_list[i].trunc_size; - else - cksumlen = computed.length; - - if (checksum->data.length != cksumlen) - return(KRB5_BAD_MSIZE); - - computed.data = malloc(computed.length); - if (computed.data == NULL) - return(ENOMEM); - - if ((ret = krb5int_c_make_checksum_iov(&krb5_cksumtypes_list[i], key, usage, - data, num_data, &computed))) { - free(computed.data); - return(ret); - } - - *valid = (computed.length == cksumlen) && - (memcmp(computed.data, checksum->data.data, cksumlen) == 0); - - free(computed.data); - - return(0); -} diff --git a/src/lib/crypto/yarrow/ASSUMPTIONS b/src/lib/crypto/yarrow/ASSUMPTIONS deleted file mode 100644 index 3e3c99c49..000000000 --- a/src/lib/crypto/yarrow/ASSUMPTIONS +++ /dev/null @@ -1,101 +0,0 @@ -Assumptions -=========== - -The Yarrow design, described in "Yarrow-160: Notes on the Design and -Analysis of the Yarrow Cryptographic Pseudonumber Generator" by John -Kelsey, Bruce Schneier and Niels Ferguson of Counterpane Systems -(available from http://www.counterpane.com/yarrow.html), left out some -implementation details and has some ambiguities in the protocol. ZKS -has to made some assumptions and taken some decisions in its -implementation of Yarrow. In the text, `we' represents ZKS. - -Here is the list of those assumptions: - -1) To simplify the code and speed up running time, we limit the number -of different sources to 20. This should be enough for most -applications. This can be changed by redefining YARROW_MAX_SOURCE in -yarrow.h. - -2) The Yarrow paper (in section 5.3) state that Pt is either -implementation dependent or dynamically adjusted. We chose to fix the -slow pool's Pt to 100 and the fast pool's Pt to 10. This can be -changed by redefining YARROW_FAST_PT and YARROW_SLOW_PT in yarrow.c. - -3) Initialization when there is no saved state is not discussed in the -Yarrow paper. We have defined that CPRNG is becomes seeded after a -slow reseed. During initialization, a slow reseed is triggered by -YARROW_K_OF_N_INIT_THRESH sources reaching the slow threshold -YARROW_SLOW_INIT_THRESH. During initialization, fast reseeds are -triggered when a source reaches the fast threshold -YARROW_FAST_INIT_THRESH. After reseed the behavior of the pools is -controlled by YARROW_K_OF_N_THRESH, YARROW_SLOW_THRESH and -YARROW_FAST_THRESH. - -Our default values for YARROW_K_OF_N_INIT_THRESH, -YARROW_SLOW_INIT_THRESH and YARROW_FAST_INIT_THRESH are the same as -YARROW_K_OF_N_THRESH, YARROW_SLOW_THRESH and YARROW_FAST_THRESH -respectively. Note this means that a Yarrow_Poll call by itself can -never put us in an initialized state, as it only works on one pool, -and the default YARROW_K_OF_N_INIT_THRESH value is 2. - -4) We define a function Yarrow_Poll which can gather entropy. The -user must allocate a source_id, and call Yarrow_Poll manually. -Yarrow_Poll just adds samples from the machines state to the source -given as an argument. - -5) Prior to initialization, Yarrow_Output will fail. - -6) The actions to take on state load are not described in the yarrow -paper, all it says is that 2k bytes should be written (and by -implication read back in somehow). We read in the 2k bytes, hash -them into the fast pool, and then do a forced fast reseed, and an -immediate state save. - -7) In step 2 of the reseed process, we must hash the value i. The -representation of this integer will affect the hash value. In our -code, i is a 64-bit unsigned value. We update the hash context using -the 64 bit big endian representation of i. - -8) Yarrow outputs random bits in blocks. If the calling function -requests less bits than available, then the unused bits are kept -in memory until the next call. In case of a reseed, we chose to -discard those leftover bits. - -9) The samples from one source must alternate between the two pools. -As a default, we initialize the first pool to send the sample too to -be the fast pool. This initialization is done only when a source is -added, not when we reseed from one. - -10) The Yarrow paper states that the maximum number of outputs between -reseeding is limited to min(2^n,2^(k/3)*Pg), but does not explain -what is to happen when this limit is reached. It could be the case -that we reach the limit but there is not enough entropy in the pools -to reseed. In our code, the Yarrow_Output_Block will do a forced -fast reseed. - -11) In the Yarrow paper, the limit on the number of outputs between -reseeding is expressed in number of outputs: - -#oututs <= min(2^n, 2^(k/3).Pg) - -but we redefine it in terms of gates by dividing the numbers by Pg, -the number of outputs per gate, and counting the number of gates -instead. This makes an overflow a little less likely. - -We don't use a bignum library, so in event of overflow, the limit in -number of gates before reseed (y->gates_limit) is reduced down to -2^64-1 (or 2^32-1 if 64 bit ints aren't available on the platform). - -12) The Yarrow paper describes that the cipher block C should be -incremented as part of the output function. We treat the bytes -of C as a big endian number to do the increment. - -13) Triple-DES key size. The yarrow paper uses the letter k to -represent the keysize in bits. Due to the parity bits, the size of k -is 192 bits. However the effective key size is actually 168 bits, as -the value of k is used in security limits, k must be 168 bits. The -paper uses k (eg set K to the next k output bits), so we have to do -the parity padding function, to copy bits 0-6 to 0-7, 7-13 to 8-15 -etc. The macro DES_Init performs the function of doing a DES key -schedule from a packed key (no parity bits), internally doing the -parity padding. Other ciphers are simpler as there is no parity. diff --git a/src/lib/crypto/yarrow/LICENSE b/src/lib/crypto/yarrow/LICENSE deleted file mode 100644 index c85475d7e..000000000 --- a/src/lib/crypto/yarrow/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2000 by Zero-Knowledge Systems, Inc. - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without fee, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Zero-Knowledge Systems, -Inc. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. Zero-Knowledge Systems, Inc. makes no representations -about the suitability of this software for any purpose. It is -provided "as is" without express or implied warranty. - -ZERO-KNOWLEDGE SYSTEMS, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL ZERO-KNOWLEDGE SYSTEMS, INC. BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT -OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - diff --git a/src/lib/crypto/yarrow/Makefile.in b/src/lib/crypto/yarrow/Makefile.in deleted file mode 100644 index 12d95860b..000000000 --- a/src/lib/crypto/yarrow/Makefile.in +++ /dev/null @@ -1,39 +0,0 @@ -thisconfigdir=../../.. -myfulldir=lib/crypto/yarrow -mydir=lib/crypto/yarrow -BUILDTOP=$(REL)..$(S)..$(S).. -LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../sha1 -I$(srcdir)/../enc_provider -DEFS= - -##DOS##BUILDTOP = ..\..\.. -##DOS##PREFIXDIR=yarrow -##DOS##OBJFILE=..\$(OUTPRE)yarrow.lst - -PROG_LIBPATH=-L$(TOPLIBD) -PROG_RPATH=$(KRB5_LIBDIR) - -RUN_SETUP = @KRB5_RUN_ENV@ KRB5_CONFIG=$(SRCTOP)/config-files/krb5.conf - -STLIBOBJS=\ - yarrow.o \ - ycipher.o -OBJS=\ - $(OUTPRE)yarrow.$(OBJEXT) \ - $(OUTPRE)ycipher.$(OBJEXT) - -SRCS=\ - $(srcdir)/yarrow.c \ - $(srcdir)/ycipher.c - -##DOS##LIBOBJS = $(OBJS) - -all-unix:: all-libobjs - -includes:: depend - -depend:: $(SRCS) - -clean-unix:: clean-libobjs - -@libobj_frag@ - diff --git a/src/lib/crypto/yarrow/README b/src/lib/crypto/yarrow/README deleted file mode 100644 index 3dd4b801a..000000000 --- a/src/lib/crypto/yarrow/README +++ /dev/null @@ -1,94 +0,0 @@ -Yarrow - Secure Pseudo-Random Number Generator -============================================== - -This is an implementation of the cryptographic pseudo-random number -generator Yarrow. You are encouraged to use, modify, and incorporate -this code. Please see the accompanying LICENSE file for more details. - - -Yarrow can be used with OpenSSL 0.9.5a (http://www.openssl.org) and -other cryptographic libraries. - -The Yarrow design is described in "Yarrow-160: Notes on the Design and -Analysis of the Yarrow Cryptographic Pseudorandom Number Generator" by -John Kelsey, Bruce Schneier and Niels Ferguson of Counterpane Systems, -available from http://www.counterpane.com/yarrow.html - -The Yarrow function calls are described in the yarrow(3) manpage. - -Installation -============ - -By default, Yarrow is built with OpenSSL. If the OpenSSL headers are -not installed in the standard directory /usr/local/ssl/include, -set the path in the Makefile. - -If it is possible that an application using Yarrow will fork(), Yarrow -must be compiled with -DYARROW_DETECT_FORK (then the child process -will have to seed Yarrow again), or the Yarrow_CTX must be allocated -in shared memory. - -If compiled with -DYARROW_SAVE_STATE, Yarrow will use a seed file -specified in the Yarrow_Init call. - -When the settings in the Makefile are correct, run "make". - - -Yarrow with OpenSSL: -------------------- - -The macros YARROW_CIPHER_3DES (default), YARROW_CIPHER_BLOWFISH and -YARROW_CIPHER_IDEA for ciphers and YARROW_HASH_SHA1 (default) and -YARROW_HASH_MD5 for hash functions are available to select algorithms -from OpenSSL. - -CRYPTO_set_locking_callback() is required in multithreaded applications. - - -Yarrow with other cryptographic libraries: ------------------------------------------ - -The Yarrow implementation uses a symmetric cipher, a cryptographic -hash function and a mutex. By default, Yarrow calls OpenSSL. For use -with other cryptographic libraries, the following types and macros -should be defined: - -Symmetric cipher - ycipher.h: - - typedef struct { ... } CIPHER_CTX; - - #define CIPHER_BLOCK_SIZE ... - #define CIPHER_KEY_SIZE ... - - void CIPHER_Init(CIPHER_CTX *ctx, void *key); - void CIPHER_Encrypt_Block(CIPHER_CTX *ctx, void *in, void *out); - -Hash function - yhash.h: - - typedef struct { ... } HASH_CTX; - - #define HASH_DIGEST_SIZE ... - #define HASH_STATE_SIZE ... - - void HASH_Init(HASH_CTX *ctx); - void HASH_Update(HASH_CTX *ctx, const void *data, unsigned long size); - void HASH_Final(HASH_CTX *ctx, unsigned char *md); - -Mutex - ylock.h: - - int LOCK(void); - int UNLOCK(void); - -Learn More: ----------- - -It is Zero-Knowledge's hope that third party developers of yarrow will -collaborate to derive test vectors for yarrow. In an effort to further -this discussion, we have created a mailing list for developers and -interested parties. To subscribe, send an email to -"yarrow-request@zeroknowledge.com" with "subscribe" in the body of the -message. - -For more information, or if you have questions or comments regarding open -source at Zero-Knowledge Systems, please visit -http://opensource.zeroknowledge.com diff --git a/src/lib/crypto/yarrow/TODO b/src/lib/crypto/yarrow/TODO deleted file mode 100644 index bd133ecfd..000000000 --- a/src/lib/crypto/yarrow/TODO +++ /dev/null @@ -1,9 +0,0 @@ -open issues: - -* when should the initial seed be considered complete? -* poll system ressources for randomness on startup? -* how frequently should the PRNG state be saved? -* how to react to fork()? -* what should the seed file contain, how should it be processed? -* test fork() hack -* test openSSL locks in multi-threaded environment diff --git a/src/lib/crypto/yarrow/deps b/src/lib/crypto/yarrow/deps deleted file mode 100644 index 182fa52d8..000000000 --- a/src/lib/crypto/yarrow/deps +++ /dev/null @@ -1,25 +0,0 @@ -# -# Generated makefile dependencies follow. -# -yarrow.so yarrow.po $(OUTPRE)yarrow.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../sha1/shs.h yarrow.c yarrow.h ycipher.h \ - yexcep.h yhash.h ylock.h ystate.h ytypes.h -ycipher.so ycipher.po $(OUTPRE)ycipher.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \ - $(BUILDTOP)/include/krb5/krb5.h $(BUILDTOP)/include/osconf.h \ - $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) $(SRCTOP)/include/k5-buf.h \ - $(SRCTOP)/include/k5-err.h $(SRCTOP)/include/k5-gmt_mktime.h \ - $(SRCTOP)/include/k5-int-pkinit.h $(SRCTOP)/include/k5-int.h \ - $(SRCTOP)/include/k5-platform.h $(SRCTOP)/include/k5-plugin.h \ - $(SRCTOP)/include/k5-thread.h $(SRCTOP)/include/krb5.h \ - $(SRCTOP)/include/krb5/locate_plugin.h $(SRCTOP)/include/krb5/preauth_plugin.h \ - $(SRCTOP)/include/port-sockets.h $(SRCTOP)/include/socket-utils.h \ - $(srcdir)/../enc_provider/enc_provider.h $(srcdir)/../sha1/shs.h \ - yarrow.h ycipher.c ycipher.h yhash.h ytypes.h diff --git a/src/lib/crypto/yarrow/yarrow.c b/src/lib/crypto/yarrow/yarrow.c deleted file mode 100644 index ff25fa9c5..000000000 --- a/src/lib/crypto/yarrow/yarrow.c +++ /dev/null @@ -1,958 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -/* - * Yarrow - Cryptographic Pseudo-Random Number Generator - * Copyright (c) 2000 Zero-Knowledge Systems, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software - * and its documentation for any purpose is hereby granted without fee, - * provided that the above copyright notice appear in all copies and that - * both that copyright notice and this permission notice appear in - * supporting documentation, and that the name of Zero-Knowledge Systems, - * Inc. not be used in advertising or publicity pertaining to - * distribution of the software without specific, written prior - * permission. Zero-Knowledge Systems, Inc. makes no representations - * about the suitability of this software for any purpose. It is - * provided "as is" without express or implied warranty. - * - * See the accompanying LICENSE file for more information. - */ - -#include "k5-int.h" - -#include -#include -#ifdef _WIN32 -#include "port-sockets.h" -#else -# include -# include -#endif -#if !defined(YARROW_NO_MATHLIB) -#include -#endif - -#define YARROW_IMPL -#include "yarrow.h" -#include "yhash.h" -#include "ycipher.h" -#include "ylock.h" -#include "ystate.h" -#include "yexcep.h" - -#if defined( YARROW_DEBUG ) || defined( YARROW_TRACE ) -# include -#endif - -#if defined( YARROW_TRACE ) -extern int yarrow_verbose; -#define TRACE( x ) do { if (yarrow_verbose) { x } } while (0) -#else -#define TRACE( x ) -#endif - -#if defined(macintosh) -# define make_big_endian32(x) (x) -#else -# define make_big_endian32(x) htonl(x) -#endif - -#if defined( YARROW_DEBUG ) -static void hex_print(FILE* f, const char* var, void* data, size_t size); -#endif - -static void block_increment( void* block, const int sz ); -#if defined( YARROW_SAVE_STATE ) -static int Yarrow_Load_State( Yarrow_CTX *y ); -static int Yarrow_Save_State( Yarrow_CTX *y ); -#endif - -static int yarrow_gate_locked(Yarrow_CTX* y); - -static const byte zero_block[CIPHER_BLOCK_SIZE] = { 0, }; - -static const char* const yarrow_str_error[] = { - "ok", - "failed", - "failed: uninitialized", - "failed: already initialized", - "failed: no driver", - "failed: can't open driver", - "failed: invalid source id", - "failed: no more source ids available", - "failed: invalid argument", - "failed: insufficient privileges", - "failed: out of memory", - "failed: resource exhausted", - "failed: not enough entropy to generate output", - "failed: locking error", - "failed: no state to load", - "failed: state load or save failed", - "failed: not implemented" -}; - -/* calculate limits after initialization */ - -static void krb5int_yarrow_init_Limits(Yarrow_CTX* y) -{ - double tmp1, tmp2, limit; - /* max number of gates between reseeds -> exceed this, do forced reseed */ - - /* #oututs <= min(2^n, 2^(k/3).Pg) */ - - /* => #gates <= min(2^n/Pg, 2^(k/3)) */ - - tmp1 = POW_CIPHER_BLOCK_SIZE / y->Pg; - tmp2 = POW_CIPHER_KEY_SIZE; - limit = min(tmp1, tmp2); - if (limit < COUNTER_MAX) - { - y->gates_limit = limit; - } - else - { - y->gates_limit = COUNTER_MAX; - } -} - -static int yarrow_reseed_locked( Yarrow_CTX* y, int pool ); - -/* if the program was forked, the child must not operate on the same - PRNG state */ -#ifdef YARROW_DETECT_FORK - -static int -yarrow_input_locked( Yarrow_CTX* y, unsigned source_id, - const void *sample, - size_t size, size_t entropy_bits ); - -static int Yarrow_detect_fork(Yarrow_CTX *y) -{ - pid_t newpid; - EXCEP_DECL; - - /* this does not work for multi-threaded apps if threads have different - * pids */ - newpid = getpid(); - if ( y->pid != newpid ) - { - /* we input the pid twice, so it will get into the fast pool at least once - * Then we reseed. This doesn't really increase entropy, but does make the - * streams distinct assuming we already have good entropy*/ - y->pid = newpid; - TRY (yarrow_input_locked (y, 0, &newpid, - sizeof (newpid), 0)); - TRY (yarrow_input_locked (y, 0, &newpid, - sizeof (newpid), 0)); - TRY (yarrow_reseed_locked (y, YARROW_FAST_POOL)); - } - - CATCH: - EXCEP_RET; -} - -#else - -#define Yarrow_detect_fork(x) (YARROW_OK) - -#endif - -static void Yarrow_Make_Seeded( Yarrow_CTX* y ) -{ - TRACE( printf( "SEEDED," ); ); - y->seeded = 1; - - /* now we are seeded switch to _THRESH values */ - - y->slow_thresh = YARROW_SLOW_THRESH; - y->fast_thresh = YARROW_FAST_THRESH; - y->slow_k_of_n_thresh = YARROW_K_OF_N_THRESH; -} - -YARROW_DLL -int krb5int_yarrow_init(Yarrow_CTX* y, const char *filename) -{ - EXCEP_DECL; - int locked = 0; - - if (!y) { THROW( YARROW_BAD_ARG ); } - TRY( LOCK() ); - locked = 1; - - y->seeded = 0; - y->saved = 0; - -#if defined( YARROW_DETECT_FORK ) - y->pid = getpid(); -#endif - - y->entropyfile = filename; - y->num_sources = 0; - mem_zero(y->C, sizeof(y->C)); - HASH_Init(&y->pool[YARROW_FAST_POOL]); - HASH_Init(&y->pool[YARROW_SLOW_POOL]); - - mem_zero(y->K, sizeof(y->K)); - - mem_zero(&y->cipher, sizeof(y->cipher)); - - TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); - y->out_left = 0; - y->out_count = 0; - y->gate_count = 0; - y->Pg = YARROW_OUTPUTS_PER_GATE; - y->Pt[YARROW_FAST_POOL] = YARROW_FAST_PT; - y->Pt[YARROW_SLOW_POOL] = YARROW_SLOW_PT; - y->slow_k_of_n = 0; - - /* start with INIT_THRESH values, after seeded, switch to THRESH values */ - - y->slow_thresh = YARROW_SLOW_INIT_THRESH; - y->fast_thresh = YARROW_FAST_INIT_THRESH; - y->slow_k_of_n_thresh = YARROW_K_OF_N_INIT_THRESH; - - krb5int_yarrow_init_Limits(y); - -#if defined( YARROW_SAVE_STATE ) - if ( y->entropyfile != NULL ) - { - int ret = Yarrow_Load_State( y ); - if ( ret != YARROW_OK && ret != YARROW_NO_STATE ) - { - THROW( ret ); - } - - /* if load suceeded then write new state back immediately - */ - - /* Also check that it's not already saved, because the reseed in - * Yarrow_Load_State may trigger a save - */ - - if ( ret == YARROW_OK && !y->saved ) - { - TRY( Yarrow_Save_State( y ) ); - } - } -#endif - - if ( !y->seeded ) - { - THROW( YARROW_NOT_SEEDED ); - } - - CATCH: - if ( locked ) { TRY( UNLOCK() ); } - EXCEP_RET; -} - -static -int yarrow_input_maybe_locking( Yarrow_CTX* y, unsigned source_id, - const void* sample, - size_t size, size_t entropy_bits, - int do_lock ) -{ - EXCEP_DECL; - int ret; - int locked = 0; - Source* source; - size_t new_entropy; - size_t estimate; - - if (do_lock) { - TRY( LOCK() ); - locked = 1; - } - k5_assert_locked(&krb5int_yarrow_lock); - - if (!y) { THROW( YARROW_BAD_ARG ); } - - if (source_id >= y->num_sources) { THROW( YARROW_BAD_SOURCE ); } - - source = &y->source[source_id]; - - if(source->pool != YARROW_FAST_POOL && source->pool != YARROW_SLOW_POOL) - { - THROW( YARROW_BAD_SOURCE ); - } - - /* hash in the sample */ - - HASH_Update(&y->pool[source->pool], (const void*)sample, size); - - /* only update entropy estimate if pool is not full */ - - if ( (source->pool == YARROW_FAST_POOL && - source->entropy[source->pool] < y->fast_thresh) || - (source->pool == YARROW_SLOW_POOL && - source->entropy[source->pool] < y->slow_thresh) ) - { - new_entropy = min(entropy_bits, size * 8 * YARROW_ENTROPY_MULTIPLIER); - if (source->estimator) - { - estimate = source->estimator(sample, size); - new_entropy = min(new_entropy, estimate); - } - source->entropy[source->pool] += new_entropy; - if ( source->entropy[source->pool] > YARROW_POOL_SIZE ) - { - source->entropy[source->pool] = YARROW_POOL_SIZE; - } - - if (source->pool == YARROW_FAST_POOL) - { - if (source->entropy[YARROW_FAST_POOL] >= y->fast_thresh) - { - ret = yarrow_reseed_locked(y, YARROW_FAST_POOL); - if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) - { - THROW( ret ); - } - } - } - else - { - if (!source->reached_slow_thresh && - source->entropy[YARROW_SLOW_POOL] >= y->slow_thresh) - { - source->reached_slow_thresh = 1; - y->slow_k_of_n++; - if (y->slow_k_of_n >= y->slow_k_of_n_thresh) - { - y->slow_k_of_n = 0; - ret = yarrow_reseed_locked(y, YARROW_SLOW_POOL); - if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) - { - THROW( ret ); - } - } - } - } - } - - /* put samples in alternate pools */ - - source->pool = (source->pool + 1) % 2; - - CATCH: - if ( locked ) { TRY( UNLOCK() ); } - EXCEP_RET; -} - -YARROW_DLL -int krb5int_yarrow_input( Yarrow_CTX* y, unsigned source_id, - const void* sample, - size_t size, size_t entropy_bits ) -{ - return yarrow_input_maybe_locking(y, source_id, sample, size, - entropy_bits, 1); -} - -static int -yarrow_input_locked( Yarrow_CTX* y, unsigned source_id, - const void *sample, - size_t size, size_t entropy_bits ) -{ - return yarrow_input_maybe_locking(y, source_id, sample, size, - entropy_bits, 0); -} - -YARROW_DLL -int krb5int_yarrow_new_source(Yarrow_CTX* y, unsigned* source_id) -{ - EXCEP_DECL; - int locked = 0; - Source* source; - - if (!y) { THROW( YARROW_BAD_ARG ); } - - TRY( LOCK() ); - locked = 1; - - if (y->num_sources + 1 > YARROW_MAX_SOURCES) - { - THROW( YARROW_TOO_MANY_SOURCES ); - } - - *source_id = y->num_sources; - - source = &y->source[*source_id]; - - source->pool = YARROW_FAST_POOL; - source->entropy[YARROW_FAST_POOL] = 0; - source->entropy[YARROW_SLOW_POOL] = 0; - source->reached_slow_thresh = 0; - source->estimator = 0; - - y->num_sources++; -CATCH: - if ( locked ) { TRY( UNLOCK() ); } - EXCEP_RET; -} - -int krb5int_yarrow_register_source_estimator(Yarrow_CTX* y, unsigned source_id, - estimator_fn* fptr) -{ - EXCEP_DECL; - Source* source; - - if (!y) { THROW( YARROW_BAD_ARG ); } - if (source_id >= y->num_sources) { THROW( YARROW_BAD_SOURCE ); } - - source = &y->source[source_id]; - - source->estimator = fptr; - - CATCH: - EXCEP_RET; -} - -static int krb5int_yarrow_output_Block( Yarrow_CTX* y, void* out ) -{ - EXCEP_DECL; - - if (!y || !out) { THROW( YARROW_BAD_ARG ); } - - TRACE( printf( "OUT," ); ); - - /* perform a gate function after Pg outputs */ - - y->out_count++; - if (y->out_count >= y->Pg) - { - y->out_count = 0; - TRY( yarrow_gate_locked( y ) ); - - /* require new seed after reaching gates_limit */ - - y->gate_count++; - if ( y->gate_count >= y->gates_limit ) - { - y->gate_count = 0; - - /* not defined whether to do slow or fast reseed */ - - TRACE( printf( "OUTPUT LIMIT REACHED," ); ); - - TRY( yarrow_reseed_locked( y, YARROW_SLOW_POOL ) ); - } - } - - /* C <- (C + 1) mod 2^n */ - - block_increment( y->C, CIPHER_BLOCK_SIZE ); - - /* R <- E_k(C) */ - - TRY ( krb5int_yarrow_cipher_encrypt_block ( &y->cipher, y->C, out )); - -#if defined(YARROW_DEBUG) - printf("===\n"); - hex_print( stdout, "output: C", y->C, CIPHER_BLOCK_SIZE ); - hex_print( stdout, "output: K", y->K, CIPHER_KEY_SIZE ); - hex_print( stdout, "output: O", out, CIPHER_BLOCK_SIZE ); -#endif - CATCH: - EXCEP_RET; -} - -YARROW_DLL -int krb5int_yarrow_status( Yarrow_CTX* y, int *num_sources, unsigned *source_id, - size_t *entropy_bits, size_t *entropy_max ) -{ - EXCEP_DECL; - int num = y->slow_k_of_n_thresh; - int source = -1; - int emax = y->slow_thresh; - size_t entropy = 0; - unsigned i; - - if (!y) { THROW( YARROW_BAD_ARG ); } - TRY( Yarrow_detect_fork( y ) ); - - if (num_sources) { *num_sources = num; } - if (source_id) { *source_id = -1; } - if (entropy_bits) { *entropy_bits = 0; } - if (entropy_max) { *entropy_max = emax; } - - if (y->seeded) - { - if (num_sources) { *num_sources = 0; } - if (entropy_bits) { *entropy_bits = emax; } - THROW( YARROW_OK ); - } - - for (i = 0; i < y->num_sources; i++) - { - if (y->source[i].entropy[YARROW_SLOW_POOL] >= y->slow_thresh) - { - num--; - } - else if (y->source[i].entropy[YARROW_SLOW_POOL] > entropy) - { - source = i; - entropy = y->source[i].entropy[YARROW_SLOW_POOL]; - } - } - - if (num_sources) { *num_sources = num; } - if (source_id) { *source_id = source; } - if (entropy_bits) { *entropy_bits = entropy; } - THROW( YARROW_NOT_SEEDED ); - - CATCH: - EXCEP_RET; -} - -static int yarrow_output_locked(Yarrow_CTX*, void*, size_t); - -YARROW_DLL -int krb5int_yarrow_output( Yarrow_CTX* y, void* out, size_t size ) -{ - EXCEP_DECL; - TRY( LOCK() ); - TRY( yarrow_output_locked(y, out, size)); -CATCH: - UNLOCK(); - EXCEP_RET; -} - -static -int yarrow_output_locked( Yarrow_CTX* y, void* out, size_t size ) -{ - EXCEP_DECL; - size_t left; - char* outp; - size_t use; - - if (!y || !out) { THROW( YARROW_BAD_ARG ); } - TRY( Yarrow_detect_fork( y ) ); - - if (!y->seeded) { THROW( YARROW_NOT_SEEDED ); } - - left = size; - outp = out; - - if (y->out_left > 0) - { - use = min(left, y->out_left); - mem_copy(outp, y->out + CIPHER_BLOCK_SIZE - y->out_left, use); - left -= use; - y->out_left -= use; - outp += use; - } - - for ( ; - left >= CIPHER_BLOCK_SIZE; - left -= CIPHER_BLOCK_SIZE, outp += CIPHER_BLOCK_SIZE) - { - TRY( krb5int_yarrow_output_Block(y, outp) ); - } - - if (left > 0) - { - TRY( krb5int_yarrow_output_Block(y, y->out) ); - mem_copy(outp, y->out, left); - y->out_left = CIPHER_BLOCK_SIZE - left; - } - - CATCH: - EXCEP_RET; -} - -static int yarrow_gate_locked(Yarrow_CTX* y) -{ - EXCEP_DECL; - byte new_K[CIPHER_KEY_SIZE]; - - if (!y) { THROW( YARROW_BAD_ARG ); } - - TRACE( printf( "GATE[" ); ); - - /* K <- Next k bits of PRNG output */ - - TRY( yarrow_output_locked(y, new_K, CIPHER_KEY_SIZE) ); - mem_copy(y->K, new_K, CIPHER_KEY_SIZE); - - /* need to resetup the key schedule as the key has changed */ - - TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); - - CATCH: - TRACE( printf( "]," ); ); - mem_zero(new_K, sizeof(new_K)); - EXCEP_RET; -} - -int krb5int_yarrow_gate(Yarrow_CTX* y) -{ - EXCEP_DECL; - byte new_K[CIPHER_KEY_SIZE]; - - if (!y) { THROW( YARROW_BAD_ARG ); } - - TRACE( printf( "GATE[" ); ); - - /* K <- Next k bits of PRNG output */ - - TRY( krb5int_yarrow_output(y, new_K, CIPHER_KEY_SIZE) ); - mem_copy(y->K, new_K, CIPHER_KEY_SIZE); - - /* need to resetup the key schedule as the key has changed */ - - TRY (krb5int_yarrow_cipher_init(&y->cipher, y->K)); - - CATCH: - TRACE( printf( "]," ); ); - mem_zero(new_K, sizeof(new_K)); - EXCEP_RET; -} - -#if defined( YARROW_SAVE_STATE ) -static int Yarrow_Load_State( Yarrow_CTX *y ) -{ - EXCEP_DECL; - Yarrow_STATE state; - - if ( !y ) { THROW( YARROW_BAD_ARG ); } - - if ( y->entropyfile ) - { - TRY( STATE_Load(y->entropyfile, &state) ); - TRACE( printf( "LOAD STATE," ); ); - -#if defined( YARROW_DEBUG ) - hex_print( stderr, "state.load", state.seed, sizeof(state.seed)); -#endif - - /* what to do here is not defined by the Yarrow paper */ - /* this is a place holder until we get some clarification */ - - HASH_Update( &y->pool[YARROW_FAST_POOL], - state.seed, sizeof(state.seed) ); - - Yarrow_Make_Seeded( y ); - - TRY( krb5int_yarrow_reseed(y, YARROW_FAST_POOL) ); - } - CATCH: - mem_zero(state.seed, sizeof(state.seed)); - EXCEP_RET; -} - -static int Yarrow_Save_State( Yarrow_CTX *y ) -{ - EXCEP_DECL; - Yarrow_STATE state; - - if ( !y ) { THROW( YARROW_BAD_ARG ); } - - if ( y->entropyfile && y->seeded ) - { - TRACE( printf( "SAVE STATE[" ); ); - TRY( krb5int_yarrow_output( y, state.seed, sizeof(state.seed) ) ); - TRY( STATE_Save(y->entropyfile, &state) ); - } - y->saved = 1; -# if defined(YARROW_DEBUG) - hex_print(stdout, "state.save", state.seed, sizeof(state.seed)); -# endif - - CATCH: - TRACE( printf( "]," ); ); - mem_zero(state.seed, sizeof(state.seed)); - EXCEP_RET; -} - -#endif - -static int yarrow_reseed_locked(Yarrow_CTX* y, int pool) -{ - EXCEP_DECL; - HASH_CTX* fast_pool; - HASH_CTX* slow_pool; - byte digest[HASH_DIGEST_SIZE]; - HASH_CTX hash; - byte v_0[HASH_DIGEST_SIZE]; - byte v_i[HASH_DIGEST_SIZE]; - krb5_ui_4 big_endian_int32; - COUNTER i; - - k5_assert_locked(&krb5int_yarrow_lock); - if (!y) { THROW( YARROW_BAD_ARG ); } - fast_pool = &y->pool[YARROW_FAST_POOL]; - slow_pool = &y->pool[YARROW_SLOW_POOL]; - if( pool != YARROW_FAST_POOL && pool != YARROW_SLOW_POOL ) - { - THROW( YARROW_BAD_ARG ); - } - - TRACE( printf( "%s RESEED,", - pool == YARROW_SLOW_POOL ? "SLOW" : "FAST" ); ); - - if (pool == YARROW_SLOW_POOL) - { - /* SLOW RESEED */ - - /* feed hash of slow pool into the fast pool */ - - - HASH_Final(slow_pool, digest); - - /* Each pool contains the running hash of all inputs fed into it - * since it was last used to carry out a reseed -- this implies - * that the pool must be reinitialized after a reseed - */ - - HASH_Init(slow_pool); /* reinitialize slow pool */ - HASH_Update(fast_pool, digest, sizeof(digest)); - - if (y->seeded == 0) - { - Yarrow_Make_Seeded( y ); - } - } - - /* step 1. v_0 <- hash of all inputs into fast pool */ - - HASH_Final(fast_pool, &v_0); - HASH_Init(fast_pool); /* reinitialize fast pool */ - - /* v_i <- v_0 */ - - mem_copy( v_i, v_0, sizeof(v_0) ); - - /* step 2. v_i = h(v_{i-1}|v_0|i) for i = 1,..,Pt */ - - /* note: this code has to work for Pt = 0 also */ - - for ( i = 0; i < y->Pt[pool]; i++ ) - { - HASH_Init(&hash); - HASH_Update(&hash, v_i, sizeof(v_i)); - HASH_Update(&hash, v_0, sizeof(v_0)); - big_endian_int32 = make_big_endian32(0); /* MS word */ - HASH_Update(&hash, &big_endian_int32, sizeof(krb5_ui_4)); - big_endian_int32 = make_big_endian32(i & 0xFFFFFFFF); /* LS word */ - HASH_Update(&hash, &big_endian_int32, sizeof(krb5_ui_4)); - HASH_Final(&hash, &v_i); - } - - /* step3. K = h'(h(v_Pt|K)) */ - - /* t = h(v_Pt|K) */ - - HASH_Init(&hash); - HASH_Update(&hash, v_i, sizeof(v_i)); - HASH_Update(&hash, y->K, sizeof(y->K)); - HASH_Final(&hash, v_i); - -#if defined(YARROW_DEBUG) - hex_print(stdout, "old K", y->K, sizeof(y->K)); -#endif - /* K <- h'(t) */ - - TRY( krb5int_yarrow_stretch(v_i, HASH_DIGEST_SIZE, y->K, CIPHER_KEY_SIZE) ); - - /* need to resetup the key schedule as the key has changed */ - - TRY(krb5int_yarrow_cipher_init(&y->cipher, y->K)); - -#if defined(YARROW_DEBUG) - hex_print(stdout, "new K", y->K, sizeof(y->K)); -#endif - - /* step 4. C <- E_k(0) */ - -#if defined(YARROW_DEBUG) - hex_print(stdout, "old C", y->C, sizeof(y->C)); -#endif - TRY (krb5int_yarrow_cipher_encrypt_block (&y->cipher, zero_block, y->C)); -#if defined(YARROW_DEBUG) - hex_print(stdout, "new C", y->C, sizeof(y->C)); -#endif - - /* discard part output from previous key */ - - y->out_left = 0; - - /* step 5. Reset all entropy estimate accumulators of the entropy - * accumulator to zero - */ - - for (i = 0; i < y->num_sources; i++) - { - y->source[i].entropy[pool] = 0; - if (pool == YARROW_SLOW_POOL) - { - /* if this is a slow reseed, reset the fast pool entropy - * accumulator also - */ - y->source[i].entropy[YARROW_FAST_POOL] = 0; - y->source[i].reached_slow_thresh = 0; - } - } - - /* step 7. If a seed file is in use, the next 2k bits of output - * are written to the seed file - */ - -#if defined( YARROW_SAVE_STATE ) - if ( y->seeded && y->entropyfile ) - { - TRY( Yarrow_Save_State( y ) ); - } -#endif - - CATCH: - /* step 6. Wipe the memory of all intermediate values - * - */ - - mem_zero( digest, sizeof(digest) ); - mem_zero( &hash, sizeof(hash) ); - mem_zero( v_0, sizeof(v_0) ); - mem_zero( v_i, sizeof(v_i) ); - - EXCEP_RET; -} -int krb5int_yarrow_reseed(Yarrow_CTX* y, int pool) -{ - int r; - LOCK(); - r = yarrow_reseed_locked(y, pool); - UNLOCK(); - return r; -} - -int krb5int_yarrow_stretch(const byte* m, size_t size, byte* out, size_t out_size) -{ - EXCEP_DECL; - const byte* s_i; - byte* outp; - int left; - unsigned int use; - HASH_CTX hash, save; - byte digest[HASH_DIGEST_SIZE]; - - if (m == NULL || size == 0 || out == NULL || out_size == 0) - { - THROW( YARROW_BAD_ARG ); - } - - /* - * s_0 = m - * s_1 = h(s_0 | ... | s_{i-1}) - * - * h'(m, k) = first k bits of (s_0 | s_1 | ...) - * - */ - - outp = out; - left = out_size; - - use = min(out_size, size); - mem_copy(outp, m, use); /* get k bits or as many as available */ - - s_i = (const byte*)m; /* pointer to s0 = m */ - outp += use; - left -= use; - - HASH_Init(&hash); - for ( ; - left > 0; - left -= HASH_DIGEST_SIZE) - { - HASH_Update(&hash, s_i, use); - - /* have to save hash state to one side as HASH_final changes state */ - - mem_copy(&save, &hash, sizeof(hash)); - HASH_Final(&hash, digest); - - use = min(HASH_DIGEST_SIZE, left); - mem_copy(outp, digest, use); - - /* put state back for next time */ - - mem_copy(&hash, &save, sizeof(hash)); - - s_i = outp; /* retain pointer to s_i */ - outp += use; - } - - CATCH: - mem_zero(&hash, sizeof(hash)); - mem_zero(digest, sizeof(digest)); - - EXCEP_RET; -} - -static void block_increment(void* block, const int sz) -{ - byte* b = block; - int i; - - for (i = sz-1; (++b[i]) == 0 && i > 0; i--) - { - ; /* nothing */ - } -} - -YARROW_DLL -int krb5int_yarrow_final(Yarrow_CTX* y) -{ - EXCEP_DECL; - int locked = 0; - - if (!y) { THROW( YARROW_BAD_ARG ); } - TRY( LOCK() ); - locked = 1; - -#if defined( YARROW_SAVE_STATE ) - if ( y->seeded && y->entropyfile ) - { - TRY( Yarrow_Save_State( y ) ); - } -#endif - - CATCH: - if ( y ) - { - krb5int_yarrow_cipher_final(&y->cipher); - mem_zero( y, sizeof(Yarrow_CTX) ); - } - if ( locked ) { TRY( UNLOCK() ); } - EXCEP_RET; -} - -YARROW_DLL -const char* krb5int_yarrow_str_error( int err ) -{ - err = 1-err; - if ( err < 0 || err >= sizeof( yarrow_str_error ) / sizeof( char* ) ) - { - err = 1-YARROW_FAIL; - } - return yarrow_str_error[ err ]; -} - -#if defined(YARROW_DEBUG) -static void hex_print(FILE* f, const char* var, void* data, size_t size) -{ - const char* conv = "0123456789abcdef"; - size_t i; - char* p = (char*) data; - char c, d; - - fprintf(f, var); - fprintf(f, " = "); - for (i = 0; i < size; i++) - { - c = conv[(p[i] >> 4) & 0xf]; - d = conv[p[i] & 0xf]; - fprintf(f, "%c%c", c, d); - } - fprintf(f, "\n"); -} -#endif diff --git a/src/lib/crypto/yarrow/yarrow.h b/src/lib/crypto/yarrow/yarrow.h deleted file mode 100644 index 7e1fe1442..000000000 --- a/src/lib/crypto/yarrow/yarrow.h +++ /dev/null @@ -1,186 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YARROW_H -#define YARROW_H - -#ifdef HAVE_UNISTD_H -#define YARROW_DETECT_FORK -#include -#endif -#define YARROW_NO_MATHLIB - -#include "ytypes.h" -#include "yhash.h" -#include "ycipher.h" - -/* These error codes are returned by the functions below. */ - -#define YARROW_OK 1 /* All is well */ -#define YARROW_FAIL 0 /* generic failure */ -#define YARROW_NOT_INIT -1 /* YarrowInit hasn't been called */ -#define YARROW_ALREADY_INIT -2 /* YarrowInit has already been called */ -#define YARROW_NO_DRIVER -3 /* driver doesn't exist */ -#define YARROW_CANT_OPEN -4 /* can't open driver */ -#define YARROW_BAD_SOURCE -5 /* invalid source id */ -#define YARROW_TOO_MANY_SOURCES -6 /* can't create any more source ids */ -#define YARROW_BAD_ARG -7 /* invalid argument */ -#define YARROW_ACCESS -8 /* insufficient privileges */ -#define YARROW_NOMEM -9 /* out of memory */ -#define YARROW_NORSRC -10 /* a resource is exhausted */ -#define YARROW_NOT_SEEDED -11 /* not enough entropy to generate output */ -#define YARROW_LOCKING -12 /* locking error */ -#define YARROW_NO_STATE -13 /* there is no state to load */ -#define YARROW_STATE_ERROR -14 /* error with state load or save */ -#define YARROW_NOT_IMPL -15 /* not implemented */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Yarrow implementation and configuration parameters */ - -/* pool identification */ -#define YARROW_FAST_POOL 0 -#define YARROW_SLOW_POOL 1 - -#define YARROW_MAX_SOURCES 20 -#define YARROW_ENTROPY_MULTIPLIER 0.5 - -#define YARROW_POOL_SIZE (HASH_DIGEST_SIZE*8) - -#define YARROW_OUTPUTS_PER_GATE 10 /* Pg */ -#define YARROW_FAST_PT 10 -#define YARROW_SLOW_PT 100 - -/* thresholds to use once seeded */ - -#define YARROW_FAST_THRESH 100 -#define YARROW_SLOW_THRESH 160 -#define YARROW_K_OF_N_THRESH 2 - -/* The Yarrow paper does not specify when the initial seed should be - considered complete. Use the same conditions as a slow reseed */ - -#define YARROW_FAST_INIT_THRESH YARROW_FAST_THRESH -#define YARROW_SLOW_INIT_THRESH YARROW_SLOW_THRESH -#define YARROW_K_OF_N_INIT_THRESH YARROW_K_OF_N_THRESH - -/* sanity checks */ - -#if YARROW_FAST_THRESH > YARROW_POOL_SIZE -error "can't have higher YARROW_FAST_THRESH than pool size" -#endif - -#if YARROW_SLOW_THRESH > YARROW_POOL_SIZE -error "can't have higher YARROW_SLOW_THRESH than pool size" -#endif - -#if YARROW_FAST_INIT_THRESH > YARROW_POOL_SIZE -error "can't have higher YARROW_FAST_INIT_THRESH than pool size" -#endif - -#if YARROW_SLOW_INIT_THRESH > YARROW_POOL_SIZE -error "can't have higher YARROW_SLOW_INIT_THRESH than pool size" -#endif - -typedef size_t estimator_fn(const void* sample, size_t size); - -typedef struct -{ - int pool; - size_t entropy[2]; - int reached_slow_thresh; - estimator_fn* estimator; -} Source; - -typedef struct -{ - /* state */ - int seeded; - int saved; -#if defined( YARROW_DETECT_FORK ) - int pid; -#endif - Source source[YARROW_MAX_SOURCES]; - unsigned num_sources; - HASH_CTX pool[2]; - byte out[CIPHER_BLOCK_SIZE]; - unsigned out_left; - COUNTER out_count; - COUNTER gate_count; - COUNTER gates_limit; - byte C[CIPHER_BLOCK_SIZE]; - CIPHER_CTX cipher; - byte K[CIPHER_KEY_SIZE]; - - const char *entropyfile; - - /* parameters */ - COUNTER Pt[2]; - COUNTER Pg; - int slow_k_of_n; - - /* current thresholds */ - int slow_thresh; - int fast_thresh; - int slow_k_of_n_thresh; -} Yarrow_CTX; - -# define YARROW_DLL - - -YARROW_DLL -int krb5int_yarrow_init( Yarrow_CTX* y, const char *filename ); - - -YARROW_DLL -int krb5int_yarrow_input( Yarrow_CTX* y, unsigned source_id, - const void* sample, - size_t size, size_t entropy_bits ); - -YARROW_DLL -int krb5int_yarrow_status( Yarrow_CTX* y, int *num_sources, unsigned *source_id, - size_t *entropy_bits, size_t *entropy_max ); - -YARROW_DLL -int krb5int_yarrow_output( Yarrow_CTX* y, void* out, size_t size ); - -YARROW_DLL -int krb5int_yarrow_new_source( Yarrow_CTX* y, unsigned* source_id ); - -YARROW_DLL -int krb5int_yarrow_register_source_estimator( Yarrow_CTX* y, unsigned source_id, - estimator_fn* fptr ); - -YARROW_DLL -int krb5int_yarrow_stretch( const byte* m, size_t size, byte* out, size_t out_size ); - -YARROW_DLL -int krb5int_yarrow_reseed( Yarrow_CTX* y, int pool ); - -YARROW_DLL -int krb5int_yarrow_gate( Yarrow_CTX* y ); - -YARROW_DLL -int krb5int_yarrow_final( Yarrow_CTX* y ); - -YARROW_DLL -const char* krb5int_yarrow_str_error( int ); - - -# define mem_zero(p, n) memset((p), 0, (n)) -# define mem_copy(d, s, n) memcpy((d), (s), (n)) - - -#if !defined(WIN32) -# define min(x, y) ((x) < (y) ? (x) : (y)) -# define max(x, y) ((x) > (y) ? (x) : (y)) -#endif - - - -#ifdef __cplusplus -} -#endif - -#endif /* YARROW_H */ diff --git a/src/lib/crypto/yarrow/yarrow.man b/src/lib/crypto/yarrow/yarrow.man deleted file mode 100644 index a65b4e05c..000000000 --- a/src/lib/crypto/yarrow/yarrow.man +++ /dev/null @@ -1,315 +0,0 @@ -.rn '' }` -''' $RCSfile$$Revision$$Date$ -''' -''' $Log$ -''' Revision 1.1 2001/11/08 21:51:57 hartmans -''' Add Yarrow from http://www.zeroknowledge.com/. -''' -''' This is version 0.1 of their Yarrow implementation. I have flattened the distribution, -''' copying files in the src directory directly into this directory. -''' -''' Revision 1.1.2.1 2000/08/13 21:11:24 adamb -''' added some more assumptions -''' included yarrow.man derived from yarrow.pod with pod2man -''' -''' -.de Sh -.br -.if t .Sp -.ne 5 -.PP -\fB\\$1\fR -.PP -.. -.de Sp -.if t .sp .5v -.if n .sp -.. -.de Ip -.br -.ie \\n(.$>=3 .ne \\$3 -.el .ne 3 -.IP "\\$1" \\$2 -.. -.de Vb -.ft CW -.nf -.ne \\$1 -.. -.de Ve -.ft R - -.fi -.. -''' -''' -''' Set up \*(-- to give an unbreakable dash; -''' string Tr holds user defined translation string. -''' Bell System Logo is used as a dummy character. -''' -.tr \(*W-|\(bv\*(Tr -.ie n \{\ -.ds -- \(*W- -.ds PI pi -.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch -.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch -.ds L" "" -.ds R" "" -''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of -''' \*(L" and \*(R", except that they are used on ".xx" lines, -''' such as .IP and .SH, which do another additional levels of -''' double-quote interpretation -.ds M" """ -.ds S" """ -.ds N" """"" -.ds T" """"" -.ds L' ' -.ds R' ' -.ds M' ' -.ds S' ' -.ds N' ' -.ds T' ' -'br\} -.el\{\ -.ds -- \(em\| -.tr \*(Tr -.ds L" `` -.ds R" '' -.ds M" `` -.ds S" '' -.ds N" `` -.ds T" '' -.ds L' ` -.ds R' ' -.ds M' ` -.ds S' ' -.ds N' ` -.ds T' ' -.ds PI \(*p -'br\} -.\" If the F register is turned on, we'll generate -.\" index entries out stderr for the following things: -.\" TH Title -.\" SH Header -.\" Sh Subsection -.\" Ip Item -.\" X<> Xref (embedded -.\" Of course, you have to process the output yourself -.\" in some meaninful fashion. -.if \nF \{ -.de IX -.tm Index:\\$1\t\\n%\t"\\$2" -.. -.nr % 0 -.rr F -.\} -.TH YARROW 1 "perl 5.005, patch 03" "13/Aug/2000" "User Contributed Perl Documentation" -.UC -.if n .hy 0 -.if n .na -.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' -.de CQ \" put $1 in typewriter font -.ft CW -'if n "\c -'if t \\&\\$1\c -'if n \\&\\$1\c -'if n \&" -\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7 -'.ft R -.. -.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2 -. \" AM - accent mark definitions -.bd B 3 -. \" fudge factors for nroff and troff -.if n \{\ -. ds #H 0 -. ds #V .8m -. ds #F .3m -. ds #[ \f1 -. ds #] \fP -.\} -.if t \{\ -. ds #H ((1u-(\\\\n(.fu%2u))*.13m) -. ds #V .6m -. ds #F 0 -. ds #[ \& -. ds #] \& -.\} -. \" simple accents for nroff and troff -.if n \{\ -. ds ' \& -. ds ` \& -. ds ^ \& -. ds , \& -. ds ~ ~ -. ds ? ? -. ds ! ! -. ds / -. ds q -.\} -.if t \{\ -. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" -. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' -. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' -. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' -. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' -. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10' -. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m' -. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' -. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10' -.\} -. \" troff and (daisy-wheel) nroff accents -.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' -.ds 8 \h'\*(#H'\(*b\h'-\*(#H' -.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#] -.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u' -.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u' -.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#] -.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] -.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' -.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' -.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] -.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] -.ds ae a\h'-(\w'a'u*4/10)'e -.ds Ae A\h'-(\w'A'u*4/10)'E -.ds oe o\h'-(\w'o'u*4/10)'e -.ds Oe O\h'-(\w'O'u*4/10)'E -. \" corrections for vroff -.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' -.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' -. \" for low resolution devices (crt and lpr) -.if \n(.H>23 .if \n(.V>19 \ -\{\ -. ds : e -. ds 8 ss -. ds v \h'-1'\o'\(aa\(ga' -. ds _ \h'-1'^ -. ds . \h'-1'. -. ds 3 3 -. ds o a -. ds d- d\h'-1'\(ga -. ds D- D\h'-1'\(hy -. ds th \o'bp' -. ds Th \o'LP' -. ds ae ae -. ds Ae AE -. ds oe oe -. ds Oe OE -.\} -.rm #[ #] #H #V #F C -.SH "NAME" -Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final \- cryptographic pseudo-random number generator -.SH "SYNOPSIS" -int \fIYarrow_Init\fR\|(Yarrow_CTX *y, const char *filename); -.PP -int \fIYarrow_New_Source\fR\|(Yarrow_CTX* y, unsigned* source_id); -.PP -int \fIYarrow_Poll\fR\|(Yarrow_CTX *y, unsigned source_id) -.PP -int \fIYarrow_Input\fR\|( Yarrow_CTX* y, unsigned source_id, - const void* sample, size_t size, - size_t entropy_bits); -.PP -int \fIYarrow_Status\fR\|(Yarrow_CTX* y, int *num_sources, - unsigned *source_id, size_t *entropy_bits, - size_t *entropy_max); -.PP -int \fIYarrow_Output\fR\|(Yarrow_CTX* y, void* out, size_t size); -.PP -int \fIYarrow_Register_Source_Estimator\fR\|(Yarrow_CTX* y, - unsigned source_id, - size_t (*estimator)(const void* sample, - size_t size)); -.PP -int \fIYarrow_Final\fR\|(Yarrow_CTX* y); -.SH "DESCRIPTION" -\fIYarrow_Init()\fR initializes a \fBYarrow_CTX\fR structure. \fBfilename\fR can -be NULL, or the path to a seed file that Yarrow will use to store the -PRNG state for use in later sessions. Returns \fBYARROW_OK\fR if the -PRNG is seeded on exit, or \fBYARROW_NOT_SEEDED\fR if the PRNG is not yet -seeded. -.PP -\fIYarrow_New_Source()\fR associates entropy sources such as keyboard input, -mouse movements and other unpredictable events with a -\fBYarrow_CTX\fR. The function assigns a unique number to the new source, -and places it in \fBsource_id\fR. -.PP -\fIYarrow_Poll()\fR gathers entropy from the state of the machine and adds -it to the source \fBsource_id\fR. The source has to be allocated by the -user with Yarrow_New_Source. Returns \fBYARROW_OK\fR if the PRNG is -seeded on exit, or \fBYARROW_NOT_SEEDED\fR if the PRNG is not yet seeded. -.PP -\fIYarrow_Input()\fR is used to add randomness from the source \fBsource_id\fR -to the PRNG. It reads \fBsize\fR bytes at the address \fBsample\fR. An -estimate of the entropy in bits contained in the sample must be -specified as \fBentropy_bits\fR. -.PP -\fIYarrow_Status()\fR returns \fBYARROW_OK\fR if the PRNG has enough entropy to -produce output, and \fBYARROW_NOT_SEEDED\fR if calls to \fIYarrow_Output()\fR -would fail. -.PP -If num_sources is not NULL, the number of entropy sources that still -need to be seeded is returned in \fB*num_sources\fR. -.PP -If source_id is not NULL, the entropy source that is closest to its -threshold is returned in \fB*source_id\fR. \fB*source_id\fR is set to \-1 if -no sources have either reached their threshold or not collected any -entropy yet. -.PP -If not NULL, \fB*entropy_bits\fR is set to the current number of bits for -the source \fB*source_id\fR, and \fB*entropy_max\fR to the threshold. -.PP -\fIYarrow_Output()\fR generates \fBsize\fR bytes of cryptographically strong -pseudo-random output and places them at \fBout\fR. The return value must -always be checked. If an error occurs, the PRNG may produce -predictable data or no output at all. -.PP -\fIYarrow_Register_Source_Estimator()\fR registers an entropy estimator -for \fBsource_id\fR. An entropy estimator is a function that tries to -estimate the entropy in a sample and returns the entropy in bits -in order to detect abnormal situations in which the samples have a very -low entropy. -.PP -\fIYarrow_Final()\fR writes the PRNG state to the seed file and erases it -from memory. -.SH "RETURN VALUES" -All functions return \fBYARROW_OK\fR on success. Error conditions are reported -as follows: -.PP -.Vb 16 -\& YARROW_FAIL generic failure -\& YARROW_NOT_INIT YarrowInit() hasn't been called -\& YARROW_ALREADY_INIT YarrowInit() has already been called -\& YARROW_NO_DRIVER driver doesn't exist -\& YARROW_CANT_OPEN can't open driver -\& YARROW_BAD_SOURCE invalid source id -\& YARROW_TOO_MANY_SOURCES can't create any more source IDs -\& YARROW_BAD_ARG invalid argument -\& YARROW_ACCESS insufficient privileges -\& YARROW_NOMEM out of memory -\& YARROW_NORSRC a resource (apart from memory) is exhausted -\& YARROW_NOT_SEEDED not enough entropy to generate output -\& YARROW_LOCKING locking error -\& YARROW_NO_STATE there is no state to load -\& YARROW_STATE_ERROR error with state load or save -\& YARROW_NOT_IMPL not implemented -.Ve -.SH "AUTHORS" -Yarrow was designed by John Kelsey, Bruce Schneier and Niels Ferguson -of Counterpane Systems. This implementation is (C) 2000 by -Zero-Knowledge Systems Inc. - -.rn }` '' -.IX Title "YARROW 1" -.IX Name "Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final - cryptographic pseudo-random number generator" - -.IX Header "NAME" - -.IX Header "SYNOPSIS" - -.IX Header "DESCRIPTION" - -.IX Header "RETURN VALUES" - -.IX Header "AUTHORS" - diff --git a/src/lib/crypto/yarrow/yarrow.pod b/src/lib/crypto/yarrow/yarrow.pod deleted file mode 100644 index 7892ebbe6..000000000 --- a/src/lib/crypto/yarrow/yarrow.pod +++ /dev/null @@ -1,112 +0,0 @@ -=pod - -=head1 NAME - -Yarrow_Init, Yarrow_Poll, Yarrow_Input, Yarrow_Status, Yarrow_Output, Yarrow_New_Source, Yarrow_Register_Source_Estimator, Yarrow Final - cryptographic pseudo-random number generator - -=head1 SYNOPSIS - -int Yarrow_Init(Yarrow_CTX *y, const char *filename); - -int Yarrow_New_Source(Yarrow_CTX* y, unsigned* source_id); - -int Yarrow_Poll(Yarrow_CTX *y, unsigned source_id) - -int Yarrow_Input( Yarrow_CTX* y, unsigned source_id, - const void* sample, size_t size, - size_t entropy_bits); - -int Yarrow_Status(Yarrow_CTX* y, int *num_sources, - unsigned *source_id, size_t *entropy_bits, - size_t *entropy_max); - -int Yarrow_Output(Yarrow_CTX* y, void* out, size_t size); - -int Yarrow_Register_Source_Estimator(Yarrow_CTX* y, - unsigned source_id, - size_t (*estimator)(const void* sample, - size_t size)); - -int Yarrow_Final(Yarrow_CTX* y); - -=head1 DESCRIPTION - -Yarrow_Init() initializes a B structure. B can -be NULL, or the path to a seed file that Yarrow will use to store the -PRNG state for use in later sessions. Returns B if the -PRNG is seeded on exit, or B if the PRNG is not yet -seeded. - -Yarrow_New_Source() associates entropy sources such as keyboard input, -mouse movements and other unpredictable events with a -B. The function assigns a unique number to the new source, -and places it in B. - -Yarrow_Poll() gathers entropy from the state of the machine and adds -it to the source B. The source has to be allocated by the -user with Yarrow_New_Source. Returns B if the PRNG is -seeded on exit, or B if the PRNG is not yet seeded. - -Yarrow_Input() is used to add randomness from the source B -to the PRNG. It reads B bytes at the address B. An -estimate of the entropy in bits contained in the sample must be -specified as B. - -Yarrow_Status() returns B if the PRNG has enough entropy to -produce output, and B if calls to Yarrow_Output() -would fail. - -If num_sources is not NULL, the number of entropy sources that still -need to be seeded is returned in B<*num_sources>. - -If source_id is not NULL, the entropy source that is closest to its -threshold is returned in B<*source_id>. B<*source_id> is set to -1 if -no sources have either reached their threshold or not collected any -entropy yet. - -If not NULL, B<*entropy_bits> is set to the current number of bits for -the source B<*source_id>, and B<*entropy_max> to the threshold. - -Yarrow_Output() generates B bytes of cryptographically strong -pseudo-random output and places them at B. The return value must -always be checked. If an error occurs, the PRNG may produce -predictable data or no output at all. - -Yarrow_Register_Source_Estimator() registers an entropy estimator -for B. An entropy estimator is a function that tries to -estimate the entropy in a sample and returns the entropy in bits -in order to detect abnormal situations in which the samples have a very -low entropy. - -Yarrow_Final() writes the PRNG state to the seed file and erases it -from memory. - -=head1 RETURN VALUES - -All functions return B on success. Error conditions are reported -as follows: - - YARROW_FAIL generic failure - YARROW_NOT_INIT YarrowInit() hasn't been called - YARROW_ALREADY_INIT YarrowInit() has already been called - YARROW_NO_DRIVER driver doesn't exist - YARROW_CANT_OPEN can't open driver - YARROW_BAD_SOURCE invalid source id - YARROW_TOO_MANY_SOURCES can't create any more source IDs - YARROW_BAD_ARG invalid argument - YARROW_ACCESS insufficient privileges - YARROW_NOMEM out of memory - YARROW_NORSRC a resource (apart from memory) is exhausted - YARROW_NOT_SEEDED not enough entropy to generate output - YARROW_LOCKING locking error - YARROW_NO_STATE there is no state to load - YARROW_STATE_ERROR error with state load or save - YARROW_NOT_IMPL not implemented - -=head1 AUTHORS - -Yarrow was designed by John Kelsey, Bruce Schneier and Niels Ferguson -of Counterpane Systems. This implementation is (C) 2000 by -Zero-Knowledge Systems Inc. - -=cut diff --git a/src/lib/crypto/yarrow/ycipher.c b/src/lib/crypto/yarrow/ycipher.c deleted file mode 100644 index 2af410440..000000000 --- a/src/lib/crypto/yarrow/ycipher.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * lib/crypto/yarrow/ycipher.c - * - * Copyright (C) 2001, 2007 by the Massachusetts Institute of Technology. - * All rights reserved. - * - * Export of this software from the United States of America may - * require a specific license from the United States Government. - * It is the responsibility of any person or organization contemplating - * export to obtain such a license before exporting. - * - * WITHIN THAT CONSTRAINT, 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, and that - * the name of M.I.T. not be used in advertising or publicity pertaining - * to distribution of the software without specific, written prior - * permission. Furthermore if you modify this software you must label - * your software as modified software and not distribute it in such a - * fashion that it might be confused with the original M.I.T. software. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" without express - * or implied warranty. - * - * - * - * Routines to implement krb5 cipher operations. - */ -#include "k5-int.h" -#include "yarrow.h" -#include "ycipher.h" -#include "enc_provider.h" -#include "assert.h" - -int -krb5int_yarrow_cipher_init -(CIPHER_CTX *ctx, - unsigned const char * key) -{ - size_t keybytes, keylength; - const struct krb5_enc_provider *enc = &yarrow_enc_provider; - krb5_error_code ret; - krb5_data randombits; - keybytes = enc->keybytes; - keylength = enc->keylength; - assert (keybytes == CIPHER_KEY_SIZE); - if (ctx->key.contents) { - memset (ctx->key.contents, 0, ctx->key.length); - free (ctx->key.contents); - } - ctx->key.contents = (void *) malloc (keylength); - ctx->key.length = keylength; - if (ctx->key.contents == NULL) - return (YARROW_NOMEM); - randombits.data = (char *) key; - randombits.length = keybytes; - ret = enc->make_key (&randombits, &ctx->key); - if (ret) { - memset (ctx->key.contents, 0, ctx->key.length); - free(ctx->key.contents); - ctx->key.contents = NULL; - return (YARROW_FAIL); - } - return (YARROW_OK); -} - -int krb5int_yarrow_cipher_encrypt_block -(CIPHER_CTX *ctx, const unsigned char *in, - unsigned char *out) -{ - krb5_error_code ret; - krb5_data ind, outd; - const struct krb5_enc_provider *enc = &yarrow_enc_provider; - ind.data = (char *) in; - ind.length = CIPHER_BLOCK_SIZE; - outd.data = (char *) out; - outd.length = CIPHER_BLOCK_SIZE; - ret = enc->encrypt (&ctx->key, 0, &ind, &outd); - if (ret) - return YARROW_FAIL; - return YARROW_OK; -} - -void -krb5int_yarrow_cipher_final -(CIPHER_CTX *ctx) - -{ - if (ctx->key.contents) { - memset (ctx->key.contents, 0, ctx->key.length); - free (ctx->key.contents); - } - ctx->key.contents = 0; - ctx->key.length = 0; -} diff --git a/src/lib/crypto/yarrow/ycipher.h b/src/lib/crypto/yarrow/ycipher.h deleted file mode 100644 index 96999c0db..000000000 --- a/src/lib/crypto/yarrow/ycipher.h +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YCIPHER_H -#define YCIPHER_H - -/* block cipher interface */ - -typedef struct -{ - krb5_keyblock key; -} CIPHER_CTX; - -/* We need to choose a cipher. To do this, choose an enc_provider. - * Be sure to update the block size and key size constants below; - * they are here because static data structures are sized based on - * them so they must be known at compile time./ Thus we cannot - * call the enc_provider function to get the info. - */ - -#define yarrow_enc_provider krb5int_enc_aes256 - -#define CIPHER_BLOCK_SIZE 16 -#define CIPHER_KEY_SIZE 32 - -#if defined( YARROW_NO_MATHLIB ) -/* see macros at end for functions evaluated */ -#define POW_CIPHER_KEY_SIZE 115792089237316195423570985008687907853269984665640564039457584007913129639936.0 -#define POW_CIPHER_BLOCK_SIZE 340282366920938463463374607431768211456.0 -#endif - - -int krb5int_yarrow_cipher_init (CIPHER_CTX *ctx, unsigned const char *key); -int krb5int_yarrow_cipher_encrypt_block -(CIPHER_CTX *ctx, const unsigned char *in, unsigned char *out); -void krb5int_yarrow_cipher_final (CIPHER_CTX *ctx); - -#if !defined( YARROW_NO_MATHLIB ) -#define POW_CIPHER_KEY_SIZE pow(2.0, CIPHER_KEY_SIZE * 8 / 3.0) -#define POW_CIPHER_BLOCK_SIZE pow(2.0, CIPHER_BLOCK_SIZE * 8) -#endif - -#endif /* YCIPHER_H */ diff --git a/src/lib/crypto/yarrow/yexcep.h b/src/lib/crypto/yarrow/yexcep.h deleted file mode 100644 index d27de2d5e..000000000 --- a/src/lib/crypto/yarrow/yexcep.h +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YEXCEP_H -#define YEXCEP_H - -/* yes, macros with gotos in them, but in the interests of - * avoiding repetition of code, and having less error prone - * error handling - * - * EXCEP_DECL - declares the return value and local state variables - * needed by the exception macros - * - * THROW( x ) - set return value to x and goto function cleanup - * section (CATCH: block). In the catch block, THROW - * does not goto catch label to avoid loops, and instead - * falls through to the next statement. - * - * EXCEP_OK - success return value (=1) - * - * EXCEP_FAIL - failure return value (=0), other user exceptions are - * given negative values (<0) - * - * TRY( x ) - if code returns value <= 0 TRY sets return value to - * that value and goes to function cleanup section - * (CATCH: block). In the catch block, TRY does not goto - * the catch label to avoid loops, and instead - * falls through to the next statement. The - * return value is set to the first non success value - * returned by a TRY, unless this is overridden by a THROW. - * - * CATCH: - start of catch block, also switches behavior of - * TRY and THROW to not goto CATCH: inside the catch - * block to avoid loops - * - * EXCEP_RET - return the current return value from the function - * equivlanet to return (EXCEPTION) - * - * EXCEPTION - current return value, is set to EXCEP_OK by EXCEP_DECL - * - * EXCEP_BOOL - convert current return value to EXCEP_OK, or EXCEP_FAIL - * (EXCEP_FAIL is anything other than EXCEP_OK) - * - */ - -/* example usage */ - -/* - * - * #define EXCEP_OK_COMMENT 2 - * #define EXCEP_NULL_PTR -1 - * #define EXCEP_OUT_OF_MEM -2 - * - * int bar( char *c ) - * { - * EXCEP_DECL; - * - * if ( !c ) { THROW( EXCEP_NULL_PTR ); } - * if ( *c == '\0' ) { THROW( EXCEP_FAIL ); ); - * if ( *c == '#' ) { SET( EXCEP_COMMENT ); } - * CATCH: - * EXCEP_RET; - * } - * - * int foo( char *c ) - * { - * EXCEP_DECL; - * int *p = NULL; - * - * if ( !c ) { THROW( EXCEP_NULL_PTR ); } - * TRY( bar( c ) ); - * if ( RETURN == EXCEP_COMMENT ) { print( "comment\n" ); } - * p = strdup( c ); - * if ( !p ) { THROW( EXCEP_OUT_OF_MEM ); } - * - * CATCH: - * if ( p ) { TRY( bar( p ) ); free( p ); } - * THROW( EXCEP_BOOL ); - * if ( EXCEPTION == EXCEP_OK ) { printf( "success\n" ); } - * EXCEP_RET; - * } - * - */ - -#define EXCEP_FAIL 0 -#define EXCEP_OK 1 -#define EXCEP_DECL int _thr = 0, _ret2 = 0, _ret = _ret2+EXCEP_OK - -#define THROW( x ) \ - do { \ - _ret = (x); \ - if( !_thr ) { goto _catch; } \ - } while ( 0 ) - -#define TRY( x ) \ - do { \ - _ret2 = (x); \ - if ( _ret > 0 && _ret2 <= 0 ) { THROW( _ret2 ); } \ - } while ( 0 ) - -#define SET( x ) (_ret = (x)) -#define EXCEP_RET return( _ret ) -#define EXCEPTION _ret -#define RETURN _ret2 -#define CATCH _catch: _thr = 1; if ( 0 ) { goto _foo; } _foo -#define EXCEP_BOOL ( _ret > 0 ? EXCEP_OK : EXCEP_FAIL ) - -#endif diff --git a/src/lib/crypto/yarrow/yhash.h b/src/lib/crypto/yarrow/yhash.h deleted file mode 100644 index ee4f03eb2..000000000 --- a/src/lib/crypto/yarrow/yhash.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YHASH_H -#define YHASH_H - -/* hash function interface */ - -/* default to SHA1 for yarrow 160 */ - -#include "shs.h" - - - -#define HASH_CTX SHS_INFO -#define HASH_Init(x) shsInit(x) -#define HASH_Update(x, buf, sz) shsUpdate(x, (const void*)buf, sz) -#define HASH_Final(x, tdigest) do { \ - int loopvar; \ - unsigned char *out2 = (void *)(tdigest); \ - HASH_CTX *ctx = (x); \ - shsFinal(ctx); \ - for (loopvar=0; loopvar<(sizeof(ctx->digest)/sizeof(ctx->digest[0])); loopvar++) \ - store_32_be(ctx->digest[loopvar], &out2[loopvar*4]); \ - } while(0) - - -#define HASH_DIGEST_SIZE SHS_DIGESTSIZE - -#endif /* YHASH_H */ diff --git a/src/lib/crypto/yarrow/ylock.h b/src/lib/crypto/yarrow/ylock.h deleted file mode 100644 index 9c032dc61..000000000 --- a/src/lib/crypto/yarrow/ylock.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YLOCK_H -#define YLOCK_H - -#include "yarrow.h" - -/* these functions should return: - * - * YARROW_OK on success - * and YARROW_LOCKING on failure - */ - -#if 0 -static int LOCK( void ) { return (YARROW_OK); } -static int UNLOCK( void ) { return (YARROW_OK); } -#else -#include "k5-thread.h" -extern k5_mutex_t krb5int_yarrow_lock; -#define LOCK() (k5_mutex_lock(&krb5int_yarrow_lock) ? YARROW_LOCKING : YARROW_OK) -#define UNLOCK() (k5_mutex_unlock(&krb5int_yarrow_lock) ? YARROW_LOCKING : YARROW_OK) -#endif - -#endif /* YLOCK_H */ diff --git a/src/lib/crypto/yarrow/ystate.h b/src/lib/crypto/yarrow/ystate.h deleted file mode 100644 index 2886ca338..000000000 --- a/src/lib/crypto/yarrow/ystate.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YSTATE_H -#define YSTATE_H - -#ifdef YARROW_SAVE_STATE - -#include "ycipher.h" -#include "ytypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct Yarrow_STATE { - byte seed[CIPHER_KEY_SIZE * 2]; /* 2k bits saved to seed file */ -} Yarrow_STATE; - -int STATE_Save( const char *filename, const struct Yarrow_STATE* state ); -int STATE_Load( const char *filename, struct Yarrow_STATE* state ); - -#ifdef __cplusplus -} -#endif - -#endif /* YARROW_SAVE_STATE */ - -#endif /* YSTATE_H */ diff --git a/src/lib/crypto/yarrow/ytest.c b/src/lib/crypto/yarrow/ytest.c deleted file mode 100644 index 93fb5f25a..000000000 --- a/src/lib/crypto/yarrow/ytest.c +++ /dev/null @@ -1,385 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ -/* - * Yarrow - Cryptographic Pseudo-Random Number Generator - * Copyright (c) 2000 Zero-Knowledge Systems, Inc. - * - * See the accompanying LICENSE file for license information. - */ - -#include -#include -#include -#include "yarrow.h" -#include "yexcep.h" - -void hex_print( FILE* f, const char* var, void* data, size_t size ); -void dump_yarrow_state( FILE* f, Yarrow_CTX* y ); - -#define YARROW_SEED_FILE "seed" - -static void print_yarrow_status( Yarrow_CTX *y ) -{ - int sid, pool; - Source* source; - - for ( pool = 0; pool < 2; pool++ ) - { - printf( " %s: ", pool == YARROW_SLOW_POOL ? "slow" : "fast" ); - for ( sid = 0; sid < y->num_sources; sid++ ) - { - source = &y->source[ sid ]; - printf( "#%d=%d/%d, ", sid, source->entropy[pool], - pool == YARROW_SLOW_POOL ? - y->slow_thresh : y->fast_thresh ); - } - } - printf( "\n" ); -} - -int yarrow_verbose = 0; -#define VERBOSE( x ) if ( yarrow_verbose ) { x } - -int Instrumented_krb5int_yarrow_input( Yarrow_CTX* y, int sid, void* sample, - size_t size, int entropy ) -{ - int ret; - - VERBOSE( printf( "krb5int_yarrow_input( #%d, %d bits, %s ) = [", sid, entropy, - y->source[sid].pool == - YARROW_SLOW_POOL ? "slow" : "fast" ); ); - ret = krb5int_yarrow_input( y, sid, sample, size, entropy ); - - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - VERBOSE( print_yarrow_status( y ); ); - return (ret); -} - -typedef int (*test_fn)( void ); - -int test_1( void ); -int test_2( void ); -int test_3( void ); -int test_4( void ); - -test_fn test_func[] = -{ - test_1, test_2, test_3, test_4 -}; - -#define num_tests ( sizeof(test_func) / sizeof(test_fn) ) - -int do_test( int t ) -{ - EXCEP_DECL; - int ret; - - printf( "doing test %d ... ", t ); fflush( stdout ); - ret = test_func[ t-1 ](); - VERBOSE( printf( "\ndone test %d ", t ); ); - printf( "[%s]\n", krb5int_yarrow_str_error( ret ) ); fflush( stdout ); - THROW( ret ); - - CATCH: - THROW( EXCEP_BOOL ); - EXCEP_RET; -} - -int main( int argc, char* argv[] ) -{ - EXCEP_DECL; - int test = 0; - char** argvp; - char* arg; - char* conv_ok = NULL; - int ok = YARROW_OK; - int done_some_tests = 0; - int i; - int ret; - - for ( argvp = argv+1, i = 1; i < argc; i++, argvp++ ) - { - arg = *argvp; - if ( arg[0] == '-' ) - { - switch ( arg[1] ) - { - case 'v': yarrow_verbose = 1; continue; - default: fprintf( stderr, "usage: test [-v] [[test] ... ]\n" ); - THROW( YARROW_FAIL ); - } - } - conv_ok = NULL; - test = strtoul( arg, &conv_ok, 10 ); - if ( !conv_ok || test < 1 || test > num_tests ) - { - fprintf( stderr, "usage: test [-v] [[test] ... ]\n" ); - THROW( YARROW_FAIL ); - } - else - { - ret = do_test( test ); - if ( ok ) { ok = ret; } - done_some_tests = 1; - } - } - - if ( !done_some_tests ) - { - for ( i = 1; i <= num_tests; i++ ) - { - ret = do_test( i ); - if ( ok ) { ok = ret; } - } - } - THROW( ok ); - - CATCH: - switch (EXCEPTION) - { - case YARROW_OK: - exit (EXIT_SUCCESS); - default: - exit (EXIT_FAILURE); - } -} - -int test_1( void ) -{ - EXCEP_DECL; - -#if defined(YARROW_HASH_SHA1) - VERBOSE( printf( "\nsha1 test\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#elif defined(YARROW_MD5) - VERBOSE( printf( "\nmd5 test\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#else - VERBOSE( printf( "\nunknown hash function\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#endif - CATCH: - EXCEP_RET; -} - -int test_2( void ) -{ - EXCEP_DECL; - -#if defined(YARROW_CIPHER_3DES) - VERBOSE( printf( "\n3des test\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#elif defined(YARROW_CIPHER_BLOWFISH) - VERBOSE( printf( "\nblowfish test\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#elif defined(YARROW_CIPHER_IDEA) - VERBOSE( printf( "\nidea test\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#else - VERBOSE( printf( "\nunknown encryption function\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#endif - CATCH: - EXCEP_RET; -} - -int test_3( void ) -{ - EXCEP_DECL; - -#if !defined(YARROW_CIPHER_3DES) || !defined(YARROW_HASH_SHA1) - VERBOSE( printf( "\nnot Yarrow-SHA1-3DES (aka Yarrow-160)\n\n" ); ); - THROW( YARROW_NOT_IMPL ); -#endif - - VERBOSE( printf( "\nkrb5int_yarrow_stretch\n\n" ); ); - THROW( YARROW_NOT_IMPL ); - - CATCH: - EXCEP_RET; -} - -int test_4( void ) -{ - EXCEP_DECL; - Yarrow_CTX yarrow; - int initialized = 0; - unsigned user, mouse, keyboard; - int i, ret; - byte user_sample[ 20 ]; - byte mouse_sample[ 4 ]; - byte keyboard_sample[ 2 ]; - byte random[ 30 ]; - byte junk[ 48 ]; - - memset( user_sample, 3, sizeof( user_sample ) ); - memset( mouse_sample, 1, sizeof( mouse_sample ) ); - memset( keyboard_sample, 2, sizeof( keyboard_sample ) ); - - VERBOSE( printf( "\nGeneral workout test\n\n" ); ) - - VERBOSE( printf( "krb5int_yarrow_init() = [" ); ); - ret = krb5int_yarrow_init( &yarrow, YARROW_SEED_FILE ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - - if ( ret != YARROW_OK && ret != YARROW_NOT_SEEDED ) { THROW( ret ); } - initialized = 1; - -#if defined( YARROW_DEBUG ) - dump_yarrow_state( stdout, &yarrow ); -#endif - - ret = krb5int_yarrow_new_source( &yarrow, &user ); - VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", - krb5int_yarrow_str_error( ret ) ); ); - if ( ret != YARROW_OK ) { THROW( ret ); } - - VERBOSE( printf( "Yarrow_Poll( #%d ) = [", user ); ); - ret = Yarrow_Poll( &yarrow, user ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - - ret = krb5int_yarrow_new_source( &yarrow, &mouse ); - VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", - krb5int_yarrow_str_error( ret ) ); ); - if ( ret != YARROW_OK ) { THROW( ret ); } - - ret = krb5int_yarrow_new_source( &yarrow, &keyboard ); - VERBOSE( printf( "krb5int_yarrow_new_source() = [%s]\n", - krb5int_yarrow_str_error( ret ) ); ); - if ( ret != YARROW_OK ) { THROW( ret ); } - -/* prematurely try to draw output, to check failure when no - * seed file, or state saving turned off - */ - - VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( random ) ); ); - ret = krb5int_yarrow_output( &yarrow, random, sizeof( random ) ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - -/* do it twice so that we some slow samples - * (first sample goes to fast pool, and then samples alternate) - */ - - for ( i = 0; i < 2; i++ ) - { - TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, mouse_sample, - sizeof( mouse_sample ), 2 ) ); - - TRY( Instrumented_krb5int_yarrow_input( &yarrow, keyboard, keyboard_sample, - sizeof( keyboard_sample ), 2 ) ); - - TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, user_sample, - sizeof( user_sample ), 2 ) ); - } - -#if defined( YARROW_DEBUG ) - dump_yarrow_state( stdout, &yarrow ); -#endif - - VERBOSE( printf( "\nInduce user source (#%d) to reach " - "slow threshold\n\n", user ); ); - - /* induce fast reseed */ - - for ( i = 0; i < 7; i++ ) - { - TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, user_sample, - sizeof( user_sample ), - sizeof( user_sample ) * 3 ) ); - } - - VERBOSE( printf( "\nInduce mouse source (#%d) to reach " - "slow threshold reseed\n\n", mouse ); ); - - /* induce slow reseed, by triggering a second source to reach it's - threshold */ - - for ( i = 0; i < 40; i++ ) - { - TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, mouse_sample, - sizeof( mouse_sample ), - sizeof( mouse_sample )*2 ) ); - } - - VERBOSE( printf( "\nProduce some output\n\n" ); ); - - for ( i = 0; i < 30; i++ ) - { - VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( junk ) ); ); - ret = krb5int_yarrow_output( &yarrow, junk, sizeof( junk ) ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - if ( ret != YARROW_OK ) { THROW( ret ); } - } - - memset( junk, 0, sizeof( junk ) ); - - VERBOSE( printf( "\nTrigger some fast and slow reseeds\n\n" ); ); - - for ( i = 0; i < 30; i++ ) - { - /* odd input to a different source so there are some slow reseeds */ - - if ( i % 16 == 0 ) - { - TRY( Instrumented_krb5int_yarrow_input( &yarrow, mouse, junk, - sizeof( junk ), - sizeof( junk ) * 3 ) ); - } - else - { - TRY( Instrumented_krb5int_yarrow_input( &yarrow, user, junk, - sizeof( junk ), - sizeof( junk ) * 3 ) ); - } - } - - VERBOSE( printf( "\nPrint some random output\n\n" ); ); - - VERBOSE( printf( "krb5int_yarrow_output( %d ) = [", sizeof( random ) ); ); - ret = krb5int_yarrow_output( &yarrow, random, sizeof( random ) ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - if ( ret != YARROW_OK ) - { - THROW( ret ); - } - else - { - VERBOSE( hex_print( stdout, "random", random, sizeof( random ) ); ); - } - - VERBOSE( printf( "\nClose down Yarrow\n\n" ); ); - - CATCH: - if ( initialized ) - { - VERBOSE( printf( "krb5int_yarrow_final() = [" ); ); - ret = krb5int_yarrow_final( &yarrow ); - VERBOSE( printf( "%s]\n", krb5int_yarrow_str_error( ret ) ); ); - THROW( ret ); - } - EXCEP_RET; -} - -void hex_print( FILE* f, const char* var, void* data, size_t size ) -{ - const char* conv = "0123456789abcdef"; - size_t i; - char* p = (char*) data; - char c, d; - - fprintf( f, var ); - fprintf( f, " = " ); - for ( i = 0; i < size; i++ ) - { - c = conv[ (p[ i ] >> 4) & 0xf ]; - d = conv[ p[ i ] & 0xf ]; - fprintf( f, "%c%c", c, d ); - } - fprintf( f, "\n" ); -} - -void dump_yarrow_state( FILE* f, Yarrow_CTX* y ) -{ - fprintf( f, "===Yarrow State===\n" ); - hex_print( f, "C", y->C, sizeof( y->C ) ); - hex_print( f, "K", y->K, sizeof( y->K ) ); -} diff --git a/src/lib/crypto/yarrow/ytypes.h b/src/lib/crypto/yarrow/ytypes.h deleted file mode 100644 index 9265e5a84..000000000 --- a/src/lib/crypto/yarrow/ytypes.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -*- Mode: C; c-file-style: "bsd" -*- */ - -#ifndef YTYPES_H -#define YTYPES_H - -#include -#include -#include "autoconf.h" -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#define byte unsigned char - -#define uint8 unsigned char -#define int8 signed char - - -#if defined(uint64) -# define COUNTER uint64 -#else -# define COUNTER krb5_ui_4 -#endif - -#define COUNTER_MAX ((COUNTER)0 - 1) - -#endif /* YTYPES_H */ diff --git a/src/util/collected-client-lib/Makefile.in b/src/util/collected-client-lib/Makefile.in index 9597e8649..bd8b5d3ab 100644 --- a/src/util/collected-client-lib/Makefile.in +++ b/src/util/collected-client-lib/Makefile.in @@ -40,20 +40,22 @@ STOBJLISTS= \ ../../lib/krb5/os/OBJS.ST \ ../../lib/krb5/unicode/OBJS.ST \ ../profile/OBJS.ST \ - ../../lib/crypto/crc32/OBJS.ST \ - ../../lib/crypto/des/OBJS.ST \ - ../../lib/crypto/dk/OBJS.ST \ - ../../lib/crypto/enc_provider/OBJS.ST \ - ../../lib/crypto/hash_provider/OBJS.ST \ - ../../lib/crypto/keyhash_provider/OBJS.ST \ - ../../lib/crypto/md4/OBJS.ST \ - ../../lib/crypto/md5/OBJS.ST \ - ../../lib/crypto/old/OBJS.ST \ - ../../lib/crypto/raw/OBJS.ST \ - ../../lib/crypto/sha1/OBJS.ST \ - ../../lib/crypto/arcfour/OBJS.ST \ - ../../lib/crypto/aes/OBJS.ST \ - ../../lib/crypto/yarrow/OBJS.ST \ + ../../lib/crypto/krb/crc32/OBJS.ST \ + ../../lib/crypto/builtin/des/OBJS.ST \ + ../../lib/crypto/krb/dk/OBJS.ST \ + ../../lib/crypto/krb/enc_provider/OBJS.ST \ + ../../lib/crypto/krb/hash_provider/OBJS.ST \ + ../../lib/crypto/krb/keyhash_provider/OBJS.ST \ + ../../lib/crypto/builtin/md4/OBJS.ST \ + ../../lib/crypto/builtin/md5/OBJS.ST \ + ../../lib/crypto/krb/old/OBJS.ST \ + ../../lib/crypto/krb/raw/OBJS.ST \ + ../../lib/crypto/builtin/sha1/OBJS.ST \ + ../../lib/crypto/builtin/arcfour/OBJS.ST \ + ../../lib/crypto/builtin/aes/OBJS.ST \ + ../../lib/crypto/krb/yarrow/OBJS.ST \ + ../../lib/crypto/krb/OBJS.ST \ + ../../lib/crypto/builtin/OBJS.ST \ ../../lib/crypto/OBJS.ST \ ../et/OBJS.ST \ ../support/OBJS.ST -- cgit