Subversion Repositories pub

Compare Revisions

No changes between revisions

Ignore whitespace Rev 168 → Rev 169

/relevation/branches/1.1/python-cryptoplus/README
0,0 → 1,76
CRYPTOPLUS
===========
 
TABLE OF CONTENTS
==================
 
1. WHAT IS CRYPTOPLUS
2. INSTALLING
3. GETTING STARTED
4. LIMITATIONS
 
1. WHAT IS CRYPTOPLUS
======================
 
CryptoPlus is an extions to the Crypto module (www.pycrypto.org) for
python. CryptoPlus makes the ciphers included in pycrypto and some new
onse available in pure python code. Some new chain modes are also added
in pure python, while the ones allready available in pycrypto are also
avaible in pure python in this package. Making these available in pure
python has the advantage of easier understandable code and thus making
it easier to adjust the code to your needs.
All other functions of pycrypto are available via the interface
of CryptoPlus. The new cipher implementations can be accessed via
CryptoPlus.Cipher.python_* while the original ones from pycrypto are
still available under their original name via CryptoPlus.Cipher.*. When
using the original Ciphers, the original pycrypto (C) code is used but
the chains will still be made by my new python code.
 
New functions:
Ciphers:
Rijndael
Serpent
Twofish
Chain Modes:
XTS
CMAC
 
Note: for all the cipher algorithms, code has been reused from
others. Appropriate copyright notices are in the source code.
 
2. INSTALLING
==============
 
necessary packages before installing:
- python-setuptools
- python-pkg-resources
 
python setup.py install
 
3. GETTING STARTED
===================
 
Same API from PyCrypto can be used. See:
http://www.dlitz.net/software/pycrypto/doc/
 
Biggest changes are the addition of some chain modes and
block ciphers. There are lot of examples provided in the
docstrings. Have a look at them by looking in the source code
'../CryptoPlus/Cipher/*.py' or via an interactive python session by using
'CryptoPlus.Cipher.python_AES.new?'. Once you constructed a cipher object
with 'cipher = CryptoPlus.Cipher.python_AES.new(...)' you can get more
info about encrypting and decrypting by reading the apprioprate docstring
('cipher.encrypt?','cipher.decrypt?').
 
Some test functions are provided in the docstrings and in the 'test'
folder. Run all the doctest in the new Cipher function by using
the '../test/test_doctest.py' script. '../test/test.py' provides
some test function for the testvectors avaible from the module via
'CryptoPlus.Cipher.testvectors'. Have a look at the test.py sourcecode
to have an idea of how to use those test vectors.
 
4. LIMITATIONS
===============
 
CMAC can only be used with ciphers of 64 or 128 bits blocksizes
XTS can only be used with ciphers of 128 bits blocksize
/relevation/branches/1.1/python-cryptoplus/test/test_doctests.py
0,0 → 1,35
#!/usr/bin/env python
 
import unittest
import doctest
from pkg_resources import require
require("CryptoPlus>=1.0")
#import CryptoPlus.Cipher.python_AES
from CryptoPlus.Cipher import python_AES, AES, python_DES, DES, python_DES3,\
DES3, python_Blowfish, Blowfish, python_Twofish, python_Serpent,\
python_Rijndael, CAST, ARC2, python_PRESENT
from CryptoPlus.Util import padding
from CryptoPlus.Hash import python_RadioGatun, python_PBKDF2, RIPEMD, python_MD5,\
python_SHA,python_SHA256,python_SHA224,python_SHA384,python_SHA512,\
python_whirlpool
try:
from CryptoPlus.Cipher import IDEA
from CryptoPlus.Cipher import RC5
import_error = 0
except ImportError:
import_error = 1
 
suite = unittest.TestSuite()
#for mod in (CryptoPlus.Cipher.python_AES,CryptoPlus.Cipher.python_AES):
for mod in python_AES, AES, python_DES, DES, python_DES3, DES3, python_Blowfish,\
Blowfish, python_Twofish, python_Serpent, python_Rijndael, CAST, ARC2,\
python_PRESENT, padding, python_RadioGatun, python_PBKDF2, RIPEMD,\
python_MD5, python_SHA,python_SHA256,python_SHA224,python_SHA384,python_SHA512,\
python_whirlpool:
suite.addTest(doctest.DocTestSuite(mod))
if not import_error:
suite.addTest(doctest.DocTestSuite(IDEA))
suite.addTest(doctest.DocTestSuite(RC5))
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
 
/relevation/branches/1.1/python-cryptoplus/test/test.py
0,0 → 1,266
#!/usr/bin/env python
 
from pkg_resources import require
require("CryptoPlus>=1.0")
from CryptoPlus.testvectors import dict_ofb_aes, dict_ctr_aes, dict_cfb_aes, dict_cbc_aes
from CryptoPlus.testvectors import dict_cmac_aes128,dict_cmac_aes192,dict_cmac_aes256,dict_cmac_tdes2,dict_cmac_tdes3
from CryptoPlus.testvectors import dict_des,dict_tdes2,dict_tdes3
from CryptoPlus.testvectors import dict_serpent128,dict_serpent192,dict_serpent256
from CryptoPlus.testvectors import dict_xts_aes
from CryptoPlus.testvectors import sha512_all_zero_messages, radiogatun32, radiogatun64
 
## HASHING
 
# SHA-512
print "SHA-512"
 
from CryptoPlus.Hash import python_SHA512
 
for i in range(0,len(sha512_all_zero_messages)):
hash = sha512_all_zero_messages[i]
hasher = python_SHA512.new(i*"\x00")
if hash <> hasher.hexdigest().upper():
print 'ERROR! SHA-512 in %i'%i
 
# RadioGatun
print "RadioGatun"
 
from CryptoPlus.Hash import python_RadioGatun
 
for i in range(0,len(radiogatun32)/2):
msg = radiogatun32["msg%i"%i]
hash = radiogatun32["hash%i"%i]
hasher = python_RadioGatun.new(msg,wl=32)
if hash <> hasher.hexdigest().upper():
print 'ERROR! RadioGatun[32] in %i'%i
 
for i in range(0,len(radiogatun64)/2):
msg = radiogatun64["msg%i"%i]
hash = radiogatun64["hash%i"%i]
hasher = python_RadioGatun.new(msg,wl=64)
if hash <> hasher.hexdigest().upper():
print 'ERROR! RadioGatun[64] in %i'%i
 
## CIPHERS
 
# PRESENT
print "PRESENT"
 
from CryptoPlus.testvectors import dict_present_e80_k12_tvar, dict_present_e128_k12_tvar, dict_present_e128_kvar_t12, dict_present_e80_kvar_t12
from CryptoPlus.Cipher import python_PRESENT
 
for i in range(1,len(dict_present_e80_k12_tvar)/3):
msg = dict_present_e80_k12_tvar['msg%i'%i].decode('hex')
key = dict_present_e80_k12_tvar['key%i'%i].decode('hex')
cip = dict_present_e80_k12_tvar['cip%i'%i].decode('hex')
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for present_e80-k12_tvar in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for present_e80-k12_tvar in %i'%i
 
for i in range(1,len(dict_present_e128_k12_tvar)/3):
msg = dict_present_e128_k12_tvar['msg%i'%i].decode('hex')
key = dict_present_e128_k12_tvar['key%i'%i].decode('hex')
cip = dict_present_e128_k12_tvar['cip%i'%i].decode('hex')
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for present_e128-k12_tvar in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for present_e128-k12_tvar in %i'%i
 
for i in range(1,len(dict_present_e128_kvar_t12)/3):
msg = dict_present_e128_kvar_t12['msg%i'%i].decode('hex')
key = dict_present_e128_kvar_t12['key%i'%i].decode('hex')
cip = dict_present_e128_kvar_t12['cip%i'%i].decode('hex')
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for present_e128-kvar_t12 in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for present_e128-kvar_t12 in %i'%i
 
for i in range(1,len(dict_present_e80_kvar_t12)/3):
msg = dict_present_e80_kvar_t12['msg%i'%i].decode('hex')
key = dict_present_e80_kvar_t12['key%i'%i].decode('hex')
cip = dict_present_e80_kvar_t12['cip%i'%i].decode('hex')
cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
decipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for present_e80-kvar_t12 in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for present_e80-kvar_t12 in %i'%i
 
# CBC, CFB, OFB and CTR with AES
print "AES"
 
from CryptoPlus.Cipher import python_AES
from CryptoPlus.Util import util
 
for i in range(1,len(dict_cbc_aes)/4+1):
msg = dict_cbc_aes['msg%i'%i].decode('hex')
iv = dict_cbc_aes['iv%i'%i].decode('hex')
key = dict_cbc_aes['key%i'%i].decode('hex')
cip = dict_cbc_aes['cip%i'%i].decode('hex')
cipher = python_AES.new(key,python_AES.MODE_CBC,iv)
decipher = python_AES.new(key,python_AES.MODE_CBC,iv)
if cip <> cipher.encrypt(msg):
print 'ERROR! for CBC-AES in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for CBC-AES in %i'%i
 
for i in range(1,len(dict_ctr_aes)/4+1):
msg = dict_ctr_aes['msg%i'%i].decode('hex')
ctr = dict_ctr_aes['ctr%i'%i].decode('hex')
key = dict_ctr_aes['key%i'%i].decode('hex')
cip = dict_ctr_aes['cip%i'%i].decode('hex')
counter = util.Counter(ctr)
counter2= util.Counter(ctr)
cipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter)
decipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter2)
if cip <> cipher.encrypt(msg):
print 'ERROR! for CTR-AES in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for CTR-AES in %i'%i
 
for i in range(1,len(dict_ofb_aes)/4+1):
msg = dict_ofb_aes['msg%i'%i].decode('hex')
iv = dict_ofb_aes['iv%i'%i].decode('hex')
key = dict_ofb_aes['key%i'%i].decode('hex')
cip = dict_ofb_aes['cip%i'%i].decode('hex')
cipher = python_AES.new(key,python_AES.MODE_OFB,IV=iv)
decipher = python_AES.new(key,python_AES.MODE_OFB,IV=iv)
if cip <> cipher.encrypt(msg):
print 'ERROR! for OFB-AES in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for OFB-AES in %i'%i
 
for i in range(1,len(dict_cfb_aes)/4+1):
msg = dict_cfb_aes['msg%i'%i].decode('hex')
iv = dict_cfb_aes['iv%i'%i].decode('hex')
s = dict_cfb_aes['s%i'%i]
key = dict_cfb_aes['key%i'%i].decode('hex')
cip = dict_cfb_aes['cip%i'%i].decode('hex')
cipher = python_AES.new(key,python_AES.MODE_CFB,IV=iv,segment_size=s)
decipher = python_AES.new(key,python_AES.MODE_CFB,IV=iv,segment_size=s)
if cip <> cipher.encrypt(msg):
print 'ERROR! for CFB-AES in %i'%i
if msg <> decipher.decrypt(cip):
print 'DECRYPTION ERROR! for CFB-AES in %i'%i
 
# DES,TDES2/3
print "DES TDES2/3"
 
from CryptoPlus.Cipher import python_DES
 
for i in range(0,len(dict_des)/3):
msg = dict_des['msg%i'%i].decode('hex')
key = dict_des['key%i'%i].decode('hex')
cip = dict_des['cip%i'%i].decode('hex')
cipher = python_DES.new(key,python_DES.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for DES in %i'%i
if msg <> cipher.decrypt(cip):
print 'DECRYPTION ERROR! for DES in %i'%i
 
from CryptoPlus.Cipher import python_DES3
 
for d in dict_tdes2,dict_tdes3:
for i in range(0,len(d)/3):
msg = d['msg%i'%i].decode('hex')
key = d['key%i'%i].decode('hex')
cip = d['cip%i'%i].decode('hex')
cipher = python_DES3.new(key,python_DES3.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for TDES2/3 in %i'%i
if msg <> cipher.decrypt(cip):
print 'DECRYPTION ERROR! for DES in %i'%i
 
# Serpent128/192/256
print "Serpent"
 
from CryptoPlus.Cipher import python_Serpent
 
for d in dict_serpent128,dict_serpent192,dict_serpent256:
for i in range(0,len(d)/3):
msg = d['msg%i'%i].decode('hex')
key = d['key%i'%i].decode('hex')
cip = d['cip%i'%i].decode('hex')
cipher = python_Serpent.new(key,python_Serpent.MODE_ECB)
if cip <> cipher.encrypt(msg):
print 'ERROR! for Serpent in %i'%i
if msg <> cipher.decrypt(cip):
print 'DECRYPTION ERROR! for Serpent in %i'%i
 
# CMAC-AES128/192/256
print "CMAC-AES"
 
from CryptoPlus.Cipher import python_AES
 
for d in dict_cmac_aes128,dict_cmac_aes192,dict_cmac_aes256:
for i in range(0,len(d)/4):
msg = d['msg%i'%i].decode('hex')
key = d['key%i'%i].decode('hex')
if msg == '\x00':
msg = ''
mac = d['mac%i'%i].decode('hex')
cipher = python_AES.new(key,python_AES.MODE_CMAC)
if mac <> cipher.encrypt(msg)[:d['taglength%i'%i]]:
print 'ERROR for %i'%i
 
# CMAC-TDES2/3
print "CMAC-TDES"
from CryptoPlus.Cipher import python_DES3
 
for d in dict_cmac_tdes2,dict_cmac_tdes3:
for i in range(0,len(d)/4):
msg = d['msg%i'%i].decode('hex')
if msg == '\x00':
msg = ''
key = d['key%i'%i].decode('hex')
mac = d['mac%i'%i].decode('hex')
cipher = python_DES3.new(key,python_DES3.MODE_CMAC)
if mac <> cipher.encrypt(msg)[:d['taglength%i'%i]]:
print 'ERROR! on %i'%i
 
# XTS-AES
print "XTS-AES"
 
from CryptoPlus.Cipher import python_AES
 
for i in range(0,len(dict_xts_aes)/5):
msg = dict_xts_aes['msg%i'%i].decode('hex')
key = ( dict_xts_aes['key1_%i'%i].decode('hex') , dict_xts_aes['key2_%i'%i].decode('hex') )
cip = dict_xts_aes['cip%i'%i].decode('hex')
n = dict_xts_aes['n%i'%i].decode('hex')
cipher = python_AES.new(key,python_AES.MODE_XTS)
if cip <> cipher.encrypt(msg,n):
print 'ERROR! for XTS on %i'%i
print 'got %s \n expected %s'%(cipher.encrypt(msg,n).encode('hex'),cip.encode('hex'))
decipher = python_AES.new(key,python_AES.MODE_XTS)
if msg <> cipher.decrypt(cip,n):
print 'ERROR! for XTS (decrypt) on %i'%i
print 'got %s \n expected %s'%(decipher.decrypt(cip,n).encode('hex'),msg.encode('hex'))
 
# TWOFISH
print "Twofish"
 
from CryptoPlus.Cipher import python_Twofish
from CryptoPlus.testvectors import dict_twofish_ecb_vt_k128, dict_twofish_ecb_vt_k192, dict_twofish_ecb_vt_k256
from CryptoPlus.testvectors import dict_twofish_ecb_vk_k128, dict_twofish_ecb_vk_k192, dict_twofish_ecb_vk_k256
 
for d in dict_twofish_ecb_vt_k128, dict_twofish_ecb_vt_k192, dict_twofish_ecb_vt_k256,dict_twofish_ecb_vk_k128:
for i in range(0,len(d)/3):
msg = d['msg%i'%i].decode('hex')
key = d['key%i'%i].decode('hex')
cip = d['cip%i'%i].decode('hex')
cipher = python_Twofish.new(key,python_Twofish.MODE_ECB)
if cip <> cipher.encrypt(msg,n):
print 'ERROR! for Twofish on %i'%i
print 'got %s \n expected %s'%(cipher.encrypt(msg,n).encode('hex'),cip.encode('hex'))
decipher = python_Twofish.new(key,python_AES.MODE_ECB)
if msg <> cipher.decrypt(cip,n):
print 'DECRYPTION ERROR! for Twofish (decrypt) on %i'%i
print 'got %s \n expected %s'%(decipher.decrypt(cip,n).encode('hex'),msg.encode('hex'))
/relevation/branches/1.1/python-cryptoplus/LICENSE
0,0 → 1,37
Used implementations of others are distributed under their respective license
available in the source:
Ciphers:
pyblowfish.py, pyDes.py, pyserpent.py, pytwofish.py, rijndael.py
 
- pyblowfish.py is being redistributed under the Artistic License
 
Hash functions:
pypbkdf2.py, pywhirlpool.py
using pypy license: pysha.py, pysha224.py, pysha256.py, pysha384.py,
pysha512.py, pymd5.py
 
All the rest is licensed under the MIT License:
 
# =============================================================================
# Copyright (c) 2008 Christophe Oosterlynck (christophe.oosterlynck_AT_gmail.com)
# Philippe Teuwen (philippe.teuwen_AT_nxp.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# =============================================================================
 
/relevation/branches/1.1/python-cryptoplus/README.relevation
0,0 → 1,4
This tree was cloned with git on Mon, 04 Jul 2011 23:31:44 +0000
 
The tree can be located at http://repo.or.cz/w/python-cryptoplus.git
 
/relevation/branches/1.1/python-cryptoplus/.gitignore
0,0 → 1,6
*.pyc
*~
dist/
build/
MANIFEST
CryptoPlus.egg-info/
/relevation/branches/1.1/python-cryptoplus/setup.py
0,0 → 1,14
#!/usr/bin/env python
 
from setuptools import setup, find_packages
 
setup(name='CryptoPlus',
version='1.0',
description='PyCrypto Cipher extension',
author='Christophe Oosterlynck',
author_email='tiftof@gmail.com',
packages = find_packages('src'),
install_requires = ['pycrypto'],
package_dir={'': 'src'}
)
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Random/OSRNG.py
0,0 → 1,0
from Crypto.Random.OSRNG import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Random/Fortuna.py
0,0 → 1,0
from Crypto.Random.Fortuna import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Random/__init__.py
0,0 → 1,2
from Crypto.Random import *
from Crypto.Random import _UserFriendlyRNG, atfork, random
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_RadioGatun.py
0,0 → 1,53
from pyradiogatun import RadioGatunType
 
__all__ = ['new']
 
def new(data=None,wl=64):
"""Create a new pure python RadioGatun hash object
 
wl = wordlength (in bits) of the RadioGatun hash method
between 1 and 64 (default = 64)
data = if present, the method call update(arg) is made
 
EXAMPLES: (testvectors from: http://radiogatun.noekeon.org/)
==========
>>> import python_RadioGatun
radiogatun[64]
---------------
>>> hasher = python_RadioGatun.new()
>>> hasher.update('1234567890123456')
>>> hasher.hexdigest()
'caaec14b5b4a7960d6854709770e3071d635d60224f58aa385867e549ef4cc42'
 
>>> hasher = python_RadioGatun.new()
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest()
'0d08daf2354fa95aaa5b6a50f514384ecdd35940252e0631002e600e13cd285f'
radiogatun[32]
---------------
>>> hasher = python_RadioGatun.new(wl=32)
>>> hasher.update('1234567890123456')
>>> hasher.hexdigest()
'59612324f3f42d3096e69125d2733b86143ae668ae9ed561ad785e0eac8dba25'
 
>>> hasher = python_RadioGatun.new(wl=32)
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest()
'041666388ef9655d48996a66dada1193d6646012a7b25a24fb10e6075cf0fc54'
"""
 
crypto = RadioGatunType(wl)
if data:
crypto.update(data)
 
return crypto
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
print "DOCTEST running... no messages = all good"
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pymd5.py
0,0 → 1,395
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
 
# Note that PyPy contains also a built-in module 'md5' which will hide
# this one if compiled in.
 
"""A sample implementation of MD5 in pure Python.
 
This is an implementation of the MD5 hash function, as specified by
RFC 1321, in pure Python. It was implemented using Bruce Schneier's
excellent book "Applied Cryptography", 2nd ed., 1996.
 
Surely this is not meant to compete with the existing implementation
of the Python standard library (written in C). Rather, it should be
seen as a Python complement that is more readable than C and can be
used more conveniently for learning and experimenting purposes in
the field of cryptography.
 
This module tries very hard to follow the API of the existing Python
standard library's "md5" module, but although it seems to work fine,
it has not been extensively tested! (But note that there is a test
module, test_md5py.py, that compares this Python implementation with
the C one of the Python standard library.
 
BEWARE: this comes with no guarantee whatsoever about fitness and/or
other properties! Specifically, do not use this in any production
code! License is Python License!
 
Special thanks to Aurelian Coman who fixed some nasty bugs!
 
Dinu C. Gherman
"""
 
 
__date__ = '2004-11-17'
__version__ = 0.91 # Modernised by J. Hallén and L. Creighton for Pypy
 
__metaclass__ = type # or genrpy won't work
 
import struct, copy
 
 
# ======================================================================
# Bit-Manipulation helpers
# ======================================================================
 
def _bytelist2long(list):
"Transform a list of characters into a list of longs."
 
imax = len(list)/4
hl = [0L] * imax
 
j = 0
i = 0
while i < imax:
b0 = long(ord(list[j]))
b1 = (long(ord(list[j+1]))) << 8
b2 = (long(ord(list[j+2]))) << 16
b3 = (long(ord(list[j+3]))) << 24
hl[i] = b0 | b1 |b2 | b3
i = i+1
j = j+4
 
return hl
 
 
def _rotateLeft(x, n):
"Rotate x (32 bit) left n bits circularly."
 
return (x << n) | (x >> (32-n))
 
 
# ======================================================================
# The real MD5 meat...
#
# Implemented after "Applied Cryptography", 2nd ed., 1996,
# pp. 436-441 by Bruce Schneier.
# ======================================================================
 
# F, G, H and I are basic MD5 functions.
 
def F(x, y, z):
return (x & y) | ((~x) & z)
 
def G(x, y, z):
return (x & z) | (y & (~z))
 
def H(x, y, z):
return x ^ y ^ z
 
def I(x, y, z):
return y ^ (x | (~z))
 
 
def XX(func, a, b, c, d, x, s, ac):
"""Wrapper for call distribution to functions F, G, H and I.
 
This replaces functions FF, GG, HH and II from "Appl. Crypto."
Rotation is separate from addition to prevent recomputation
(now summed-up in one function).
"""
 
res = 0L
res = res + a + func(b, c, d)
res = res + x
res = res + ac
res = res & 0xffffffffL
res = _rotateLeft(res, s)
res = res & 0xffffffffL
res = res + b
 
return res & 0xffffffffL
 
 
class MD5Type:
"An implementation of the MD5 hash function in pure Python."
 
def __init__(self):
"Initialisation."
# Initial message length in bits(!).
self.length = 0L
self.count = [0, 0]
 
# Initial empty message as a sequence of bytes (8 bit characters).
self.input = []
 
# Call a separate init function, that can be used repeatedly
# to start from scratch on the same object.
self.init()
 
 
def init(self):
"Initialize the message-digest and set all fields to zero."
 
self.length = 0L
self.count = [0, 0]
self.input = []
 
# Load magic initialization constants.
self.A = 0x67452301L
self.B = 0xefcdab89L
self.C = 0x98badcfeL
self.D = 0x10325476L
 
 
def _transform(self, inp):
"""Basic MD5 step transforming the digest based on the input.
 
Note that if the Mysterious Constants are arranged backwards
in little-endian order and decrypted with the DES they produce
OCCULT MESSAGES!
"""
 
a, b, c, d = A, B, C, D = self.A, self.B, self.C, self.D
 
# Round 1.
 
S11, S12, S13, S14 = 7, 12, 17, 22
 
a = XX(F, a, b, c, d, inp[ 0], S11, 0xD76AA478L) # 1
d = XX(F, d, a, b, c, inp[ 1], S12, 0xE8C7B756L) # 2
c = XX(F, c, d, a, b, inp[ 2], S13, 0x242070DBL) # 3
b = XX(F, b, c, d, a, inp[ 3], S14, 0xC1BDCEEEL) # 4
a = XX(F, a, b, c, d, inp[ 4], S11, 0xF57C0FAFL) # 5
d = XX(F, d, a, b, c, inp[ 5], S12, 0x4787C62AL) # 6
c = XX(F, c, d, a, b, inp[ 6], S13, 0xA8304613L) # 7
b = XX(F, b, c, d, a, inp[ 7], S14, 0xFD469501L) # 8
a = XX(F, a, b, c, d, inp[ 8], S11, 0x698098D8L) # 9
d = XX(F, d, a, b, c, inp[ 9], S12, 0x8B44F7AFL) # 10
c = XX(F, c, d, a, b, inp[10], S13, 0xFFFF5BB1L) # 11
b = XX(F, b, c, d, a, inp[11], S14, 0x895CD7BEL) # 12
a = XX(F, a, b, c, d, inp[12], S11, 0x6B901122L) # 13
d = XX(F, d, a, b, c, inp[13], S12, 0xFD987193L) # 14
c = XX(F, c, d, a, b, inp[14], S13, 0xA679438EL) # 15
b = XX(F, b, c, d, a, inp[15], S14, 0x49B40821L) # 16
 
# Round 2.
 
S21, S22, S23, S24 = 5, 9, 14, 20
 
a = XX(G, a, b, c, d, inp[ 1], S21, 0xF61E2562L) # 17
d = XX(G, d, a, b, c, inp[ 6], S22, 0xC040B340L) # 18
c = XX(G, c, d, a, b, inp[11], S23, 0x265E5A51L) # 19
b = XX(G, b, c, d, a, inp[ 0], S24, 0xE9B6C7AAL) # 20
a = XX(G, a, b, c, d, inp[ 5], S21, 0xD62F105DL) # 21
d = XX(G, d, a, b, c, inp[10], S22, 0x02441453L) # 22
c = XX(G, c, d, a, b, inp[15], S23, 0xD8A1E681L) # 23
b = XX(G, b, c, d, a, inp[ 4], S24, 0xE7D3FBC8L) # 24
a = XX(G, a, b, c, d, inp[ 9], S21, 0x21E1CDE6L) # 25
d = XX(G, d, a, b, c, inp[14], S22, 0xC33707D6L) # 26
c = XX(G, c, d, a, b, inp[ 3], S23, 0xF4D50D87L) # 27
b = XX(G, b, c, d, a, inp[ 8], S24, 0x455A14EDL) # 28
a = XX(G, a, b, c, d, inp[13], S21, 0xA9E3E905L) # 29
d = XX(G, d, a, b, c, inp[ 2], S22, 0xFCEFA3F8L) # 30
c = XX(G, c, d, a, b, inp[ 7], S23, 0x676F02D9L) # 31
b = XX(G, b, c, d, a, inp[12], S24, 0x8D2A4C8AL) # 32
 
# Round 3.
 
S31, S32, S33, S34 = 4, 11, 16, 23
 
a = XX(H, a, b, c, d, inp[ 5], S31, 0xFFFA3942L) # 33
d = XX(H, d, a, b, c, inp[ 8], S32, 0x8771F681L) # 34
c = XX(H, c, d, a, b, inp[11], S33, 0x6D9D6122L) # 35
b = XX(H, b, c, d, a, inp[14], S34, 0xFDE5380CL) # 36
a = XX(H, a, b, c, d, inp[ 1], S31, 0xA4BEEA44L) # 37
d = XX(H, d, a, b, c, inp[ 4], S32, 0x4BDECFA9L) # 38
c = XX(H, c, d, a, b, inp[ 7], S33, 0xF6BB4B60L) # 39
b = XX(H, b, c, d, a, inp[10], S34, 0xBEBFBC70L) # 40
a = XX(H, a, b, c, d, inp[13], S31, 0x289B7EC6L) # 41
d = XX(H, d, a, b, c, inp[ 0], S32, 0xEAA127FAL) # 42
c = XX(H, c, d, a, b, inp[ 3], S33, 0xD4EF3085L) # 43
b = XX(H, b, c, d, a, inp[ 6], S34, 0x04881D05L) # 44
a = XX(H, a, b, c, d, inp[ 9], S31, 0xD9D4D039L) # 45
d = XX(H, d, a, b, c, inp[12], S32, 0xE6DB99E5L) # 46
c = XX(H, c, d, a, b, inp[15], S33, 0x1FA27CF8L) # 47
b = XX(H, b, c, d, a, inp[ 2], S34, 0xC4AC5665L) # 48
 
# Round 4.
 
S41, S42, S43, S44 = 6, 10, 15, 21
 
a = XX(I, a, b, c, d, inp[ 0], S41, 0xF4292244L) # 49
d = XX(I, d, a, b, c, inp[ 7], S42, 0x432AFF97L) # 50
c = XX(I, c, d, a, b, inp[14], S43, 0xAB9423A7L) # 51
b = XX(I, b, c, d, a, inp[ 5], S44, 0xFC93A039L) # 52
a = XX(I, a, b, c, d, inp[12], S41, 0x655B59C3L) # 53
d = XX(I, d, a, b, c, inp[ 3], S42, 0x8F0CCC92L) # 54
c = XX(I, c, d, a, b, inp[10], S43, 0xFFEFF47DL) # 55
b = XX(I, b, c, d, a, inp[ 1], S44, 0x85845DD1L) # 56
a = XX(I, a, b, c, d, inp[ 8], S41, 0x6FA87E4FL) # 57
d = XX(I, d, a, b, c, inp[15], S42, 0xFE2CE6E0L) # 58
c = XX(I, c, d, a, b, inp[ 6], S43, 0xA3014314L) # 59
b = XX(I, b, c, d, a, inp[13], S44, 0x4E0811A1L) # 60
a = XX(I, a, b, c, d, inp[ 4], S41, 0xF7537E82L) # 61
d = XX(I, d, a, b, c, inp[11], S42, 0xBD3AF235L) # 62
c = XX(I, c, d, a, b, inp[ 2], S43, 0x2AD7D2BBL) # 63
b = XX(I, b, c, d, a, inp[ 9], S44, 0xEB86D391L) # 64
 
A = (A + a) & 0xffffffffL
B = (B + b) & 0xffffffffL
C = (C + c) & 0xffffffffL
D = (D + d) & 0xffffffffL
 
self.A, self.B, self.C, self.D = A, B, C, D
 
 
# Down from here all methods follow the Python Standard Library
# API of the md5 module.
 
def update(self, inBuf):
"""Add to the current message.
 
Update the md5 object with the string arg. Repeated calls
are equivalent to a single call with the concatenation of all
the arguments, i.e. m.update(a); m.update(b) is equivalent
to m.update(a+b).
 
The hash is immediately calculated for all full blocks. The final
calculation is made in digest(). This allows us to keep an
intermediate value for the hash, so that we only need to make
minimal recalculation if we call update() to add moredata to
the hashed string.
"""
 
leninBuf = long(len(inBuf))
 
# Compute number of bytes mod 64.
index = (self.count[0] >> 3) & 0x3FL
 
# Update number of bits.
self.count[0] = self.count[0] + (leninBuf << 3)
if self.count[0] < (leninBuf << 3):
self.count[1] = self.count[1] + 1
self.count[1] = self.count[1] + (leninBuf >> 29)
 
partLen = 64 - index
 
if leninBuf >= partLen:
self.input[index:] = list(inBuf[:partLen])
self._transform(_bytelist2long(self.input))
i = partLen
while i + 63 < leninBuf:
self._transform(_bytelist2long(list(inBuf[i:i+64])))
i = i + 64
else:
self.input = list(inBuf[i:leninBuf])
else:
i = 0
self.input = self.input + list(inBuf)
 
 
def digest(self):
"""Terminate the message-digest computation and return digest.
 
Return the digest of the strings passed to the update()
method so far. This is a 16-byte string which may contain
non-ASCII characters, including null bytes.
"""
 
A = self.A
B = self.B
C = self.C
D = self.D
input = [] + self.input
count = [] + self.count
 
index = (self.count[0] >> 3) & 0x3fL
 
if index < 56:
padLen = 56 - index
else:
padLen = 120 - index
 
padding = ['\200'] + ['\000'] * 63
self.update(padding[:padLen])
 
# Append length (before padding).
bits = _bytelist2long(self.input[:56]) + count
 
self._transform(bits)
 
# Store state in digest.
digest = struct.pack("<IIII", self.A, self.B, self.C, self.D)
 
self.A = A
self.B = B
self.C = C
self.D = D
self.input = input
self.count = count
 
return digest
 
 
def hexdigest(self):
"""Terminate and return digest in HEX form.
 
Like digest() except the digest is returned as a string of
length 32, containing only hexadecimal digits. This may be
used to exchange the value safely in email or other non-
binary environments.
"""
 
return ''.join(['%02x' % ord(c) for c in self.digest()])
 
def copy(self):
"""Return a clone object.
 
Return a copy ('clone') of the md5 object. This can be used
to efficiently compute the digests of strings that share
a common initial substring.
"""
if 0: # set this to 1 to make the flow space crash
return copy.deepcopy(self)
clone = self.__class__()
clone.length = self.length
clone.count = [] + self.count[:]
clone.input = [] + self.input
clone.A = self.A
clone.B = self.B
clone.C = self.C
clone.D = self.D
return clone
 
 
# ======================================================================
# Mimic Python top-level functions from standard library API
# for consistency with the md5 module of the standard library.
# ======================================================================
 
digest_size = 16
 
def new(arg=None):
"""Return a new md5 crypto object.
 
If arg is present, the method call update(arg) is made.
"""
 
crypto = MD5Type()
if arg:
crypto.update(arg)
 
return crypto
 
 
def md5(arg=None):
"""Same as new().
 
For backward compatibility reasons, this is an alternative
name for the new() function.
"""
 
return new(arg)
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/__init__.py
0,0 → 1,7
# hash functions of pycrypto can be just imported
# wrapping might be a better idea if docstrings need to be expanded
# wrapping in Cipher was needed to make the new chaining modes available
from Crypto.Hash import SHA, SHA256, MD5, MD2, MD4, HMAC
 
__all__ = ["SHA","SHA256","MD5","MD2","MD4","HMAC","RIPEMD"]
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_SHA512.py
0,0 → 1,30
from pysha512 import sha512
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python SHA-512 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: FIPS 180-2
=========
>>> from CryptoPlus.Hash import python_SHA512
>>> message = "abc"
>>> hasher = python_SHA512.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'
>>> message = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
>>> hasher = python_SHA512.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909'
"""
return sha512(data)
digest_size = sha512.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_SHA224.py
0,0 → 1,30
from pysha224 import sha224
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python SHA-224 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: FIPS 180-2
=========
>>> from CryptoPlus.Hash import python_SHA224
>>> message = "abc"
>>> hasher = python_SHA224.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
>>> hasher = python_SHA224.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525'
"""
return sha224(data)
digest_size = sha224.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pyradiogatun.py
0,0 → 1,379
# =============================================================================
# Copyright (c) 2008
# Christophe Oosterlynck (christophe.oosterlynck_AT_gmail.com)
# Philippe Teuwen (philippe.teuwen_AT_nxp.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# =============================================================================
 
"""RadioGatun pure python implementation
 
Code based on the standard found here: http://radiogatun.noekeon.org/
Api and code interface is based on the MD5 implementation of pypy
http://codespeak.net/pypy/dist/pypy/doc/home.html
"""
 
BELT_WIDTH = 3
BELT_LENGTH = 13
MILL_SIZE = 2*BELT_WIDTH + BELT_LENGTH
NUMBER_OF_BLANK_ITERATIONS = 16
 
def state_init():
"""construct an empty state variable
"""
return {"A":[0]*MILL_SIZE, "B":[[0]*BELT_WIDTH for x in range(BELT_LENGTH)]}
 
def XOR_F_i(state, inp, wl):
"""Input mapping
 
mapping input blocks to a state variable + XOR step of the alternating-
input construction
 
input = 1 blocklength string
wl = wordlength of the RadioGatun hash object
"""
for i in xrange(BELT_WIDTH):
# reverse endianness of byte ordering and convert the input
# block to integer
p_i = string2number(inp[i*wl:(i+1)*wl][::-1])
state["B"][0][i] ^= p_i
state["A"][i+MILL_SIZE-BELT_WIDTH] ^= p_i
return state
 
def R(state, wl):
"""Round function R
 
state = the RadioGatun status
wl = wordlength of the RadioGatun hash object
"""
out = state_init()
# Belt function: simple rotation
out["B"] = state["B"][-1:]+state["B"][:-1]
# Mill to belt feedforward
for i in xrange(BELT_LENGTH - 1):
out["B"][i+1][i%BELT_WIDTH] ^= state["A"][i+1]
# Run the mill
out["A"] = Mill(state["A"], wl)
# Belt to mill feedforward
for i in xrange(BELT_WIDTH):
out["A"][i+BELT_LENGTH] ^= state["B"][-1][i]
return out
 
def Mill(a, wl):
"""The Mill function
 
a = Mill variable of the RadioGatun status
wl = wordlength of the RadioGatun hash object
"""
A = [0]*MILL_SIZE
# Gamma: Non-linearity
for i in xrange(MILL_SIZE):
A[i] = a[i] ^ ~((~a[(i+1)%MILL_SIZE]) & (a[(i+2)%MILL_SIZE]) )
# Pi: Intra-word and inter-word dispersion
for i in xrange(MILL_SIZE):
a[i] = rotateRight(A[(7*i)%MILL_SIZE], i*(i+1)/2, wl*8)
# Theta: Diffusion
for i in xrange(MILL_SIZE):
A[i] = a[i] ^ a[(i+1)%MILL_SIZE] ^ a[(i+4)%MILL_SIZE]
# Iota: Asymmetry
A[0] = A[0] ^ 1
return A
 
class RadioGatunType:
"An implementation of the RadioGatun hash function in pure Python."
 
def __init__(self, wl):
"""Initialisation.
wl = wordlength (in bits) of the RadioGatun hash method
between 8 and 64 (default = 64)
"""
 
if not ( 8 <= wl <= 64) or not (wl%8 == 0 ):
raise ValueError, "Wordlength should be a multiple of 8" +\
" between 8 and 64"
 
# word & block length in bytes
self.wordlength = wl/8
self.blocklength = self.wordlength*BELT_WIDTH
# Initial message length in bits(!).
self.length = 0
self.count = 0
 
# Initial empty message as a sequence of bytes (8 bit characters).
self.input = ""
 
# Call a separate init function, that can be used repeatedly
# to start from scratch on the same object.
self.init()
 
 
def init(self):
"""Initialize the message-digest and set all fields to zero.
 
Can be used to reinitialize the hash object
"""
 
self.S = state_init()
 
self.length = 0
self.count = 0
self.input = ""
 
def _transform(self, inp):
"""Basic RadioGatun step transforming the digest based on the input.
 
Performs the inside of the first loop of alternating input construction
of RadioGatun. The only thing that can be done every time new data is
submitted to the hash object.
Mangling and output mapping can only follow when all input data has
been received.
"""
T = XOR_F_i(self.S, inp, self.wordlength)
self.S = R(T, self.wordlength)
 
 
# Down from here all methods follow the Python Standard Library
# API of the md5 module.
 
def update(self, inBuf):
"""Add to the current message.
 
Update the radiogatun object with the string arg. Repeated calls
are equivalent to a single call with the concatenation of all
the arguments, i.e. m.update(a); m.update(b) is equivalent
to m.update(a+b).
 
The hash is immediately calculated for all full blocks. The final
calculation is made in digest(). This allows us to keep an
intermediate value for the hash, so that we only need to make
minimal recalculation if we call update() to add moredata to
the hashed string.
"""
# Amount of bytes given at input
leninBuf = long(len(inBuf))
 
# Compute number of bytes mod 64.
index = (self.count >> 3) % self.blocklength
 
# Update number of bits.
self.count = self.count + (leninBuf << 3)
 
partLen = self.blocklength - index
 
# if length of input is at least
# the amount of bytes needed to fill a block
if leninBuf >= partLen:
self.input = self.input[:index] + inBuf[:partLen]
self._transform(self.input)
i = partLen
while i + self.blocklength - 1 < leninBuf:
self._transform(inBuf[i:i+self.blocklength])
i = i + self.blocklength
else:
self.input = inBuf[i:leninBuf]
# if not enough bytes at input to fill a block
else:
i = 0
self.input = self.input + inBuf
 
 
def digest(self, length=256):
"""Terminate the message-digest computation and return digest.
 
length = output length of the digest in bits
any multiple of 8 with a minimum of 8
default = 256
 
Return the digest of the strings passed to the update()
method so far. This is a byte string which may contain
non-ASCII characters, including null bytes.
Calling digest() doesn't change the internal state. Adding data via
update() can still continu after asking for an intermediate digest
value.
"""
 
S = self.S
inp = "" + self.input
count = self.count
 
index = (self.count >> 3) % self.blocklength
 
padLen = self.blocklength - index
 
padding = ['\001'] + ['\000'] * (padLen - 1)
self.update(''.join(padding))
 
# Mangling = blank rounds
for i in xrange(NUMBER_OF_BLANK_ITERATIONS):
self.S = R(self.S, self.wordlength)
 
# Extraction
# Store state in digest.
digest = ""
for i in xrange((length)/self.wordlength/2):
self.S = R(self.S, self.wordlength)
# F_o
digest += \
number2string_N((self.S["A"][1]), self.wordlength)[::-1] +\
number2string_N((self.S["A"][2]), self.wordlength)[::-1]
self.S = S
self.input = inp
self.count = count
 
return digest[:length/8]
 
 
def hexdigest(self, length=256):
"""Terminate and return digest in HEX form.
 
length = output length of the digest in bits
any multiple of 8 with a minimum of 8
default = 256
 
Like digest() except the digest is returned as a string of
length 'length', containing only hexadecimal digits. This may be
used to exchange the value safely in email or other non-
binary environments.
 
Calling hexdigest() doesn't change the internal state. Adding data via
update() can still continu after asking for an intermediate digest
value.
"""
 
return ''.join(['%02x' % ord(c) for c in self.digest(length)])
 
def copy(self):
"""Return a clone object.
 
Return a copy ('clone') of the radiogatun object. This can be used
to efficiently compute the digests of strings that share
a common initial substring.
"""
 
import copy
return copy.deepcopy(self)
 
# ======================================================================
# TOP LEVEL INTERFACE
# ======================================================================
 
def new(arg=None, wl=64):
"""Return a new RadioGatun hash object
 
wl = wordlength (in bits) of the RadioGatun hash method
between 1 and 64 (default = 64)
arg = if present, the method call update(arg) is made
 
EXAMPLES: (testvectors from: http://radiogatun.noekeon.org/)
==========
>>> import pyradiogatun
radiogatun[64]
---------------
>>> hasher = pyradiogatun.new()
>>> hasher.update('1234567890123456')
>>> hasher.hexdigest()
'caaec14b5b4a7960d6854709770e3071d635d60224f58aa385867e549ef4cc42'
 
>>> hasher = pyradiogatun.new()
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest(480)
'0d08daf2354fa95aaa5b6a50f514384ecdd35940252e0631002e600e13cd285f74adb0c0a666adeb1f2d20b1f2489e3d973dae4efc1f2cc5aaa13f2b'
radiogatun[32]
---------------
>>> hasher = pyradiogatun.new(wl=32)
>>> hasher.update('1234567890123456')
>>> hasher.hexdigest()
'59612324f3f42d3096e69125d2733b86143ae668ae9ed561ad785e0eac8dba25'
 
>>> hasher = pyradiogatun.new(wl=32)
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest(512)
'041666388ef9655d48996a66dada1193d6646012a7b25a24fb10e6075cf0fc54a162949f4022531dbb6f66b64c3579df49f0f3af5951df9d68af310f2703b06d'
 
radiogatun[16]
---------------
>>> hasher = pyradiogatun.new(wl=16)
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest()
'ab2203a8c3de943309b685513a29060339c001acce5900dcd6427a02c1fb8011'
 
radiogatun[8]
--------------
>>> hasher = pyradiogatun.new(wl=8)
>>> hasher.update('Santa Barbara, California')
>>> hasher.hexdigest()
'e08f5cdbbfd8f5f3c479464a60ac186963e741d28f654e2c961d2f9bebc7de31'
"""
 
crypto = RadioGatunType(wl)
if arg:
crypto.update(arg)
 
return crypto
 
# ======================================================================
# HELPER FUNCTIONS
# ======================================================================
 
def rotateRight(x, amountToShift, totalBits):
"""Rotate x (consisting of 'totalBits' bits) n bits to right.
 
x = integer input to be rotated
amountToShift = the amount of bits that should be shifted
totalBits = total amount bits at the input for rotation
"""
x = x%(2**totalBits)
n_mod = ((amountToShift % totalBits) + totalBits) % totalBits
return ((x >> n_mod) | ((x << (totalBits-n_mod)))&((2**totalBits)-1))
 
def string2number(i):
""" Convert a string to a number
 
Input: string (big-endian)
Output: long or integer
"""
return int(i.encode('hex'), 16)
 
def number2string_N(i, N):
"""Convert a number to a string of fixed size
 
i: long or integer
N: length of string
Output: string (big-endian)
"""
s = '%0*x' % (N*2, i)
return s.decode('hex')
 
# ======================================================================
# DOCTEST ENABLER
# ======================================================================
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
print "DOCTEST running... no messages = all good"
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_PBKDF2.py
0,0 → 1,55
import pypbkdf2
from CryptoPlus.Hash import SHA as SHA1, HMAC
 
__all__ = ['new']
 
def new(passphrase, salt, iterations=1000, digestmodule=SHA1, macmodule=HMAC):
"""PKCS#5 v2.0 Password-Based Key Derivation
passphrase = the passphrase, supplied as a raw string, to make a key from
salt = salt as raw string
iterations = amount of iterations (default = 1000)
digestmodule = digest function to use, supply as module
example: python_SHA from CryptoPlus.Hash
default: SHA1
macmodule = mac function to use, supply as module
example: HMAC from CryptoPlus.Hash
default: HMAC
 
=> macmodule & digestmodule construct the pseudorandom function
=> by default: HMAC-SHA1
 
Examples: (from: http://www.ietf.org/rfc/rfc3962.txt)
==========
 
>>> from CryptoPlus.Hash import python_PBKDF2
 
>>> passphrase = "password"
>>> salt = "ATHENA.MIT.EDUraeburn"
>>> iterations = 1
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations)
>>> hasher.hexread(16)
'cdedb5281bb2f801565a1122b2563515'
 
>>> passphrase = "password"
>>> salt = "ATHENA.MIT.EDUraeburn"
>>> iterations = 1200
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations)
>>> hasher.hexread(32)
'5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13'
 
>>> passphrase = "X"*64
>>> salt = "pass phrase equals block size"
>>> iterations = 1200
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations)
>>> hasher.hexread(32)
'139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1'
 
>>> passphrase = "X"*65
>>> salt = "pass phrase exceeds block size"
>>> iterations = 1200
>>> hasher = python_PBKDF2.new(passphrase,salt,iterations)
>>> hasher.hexread(32)
'9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82a'
"""
return pypbkdf2.PBKDF2(passphrase, salt, iterations, digestmodule, macmodule)
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_SHA256.py
0,0 → 1,30
from pysha256 import sha256
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python SHA-256 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: FIPS 180-2
=========
>>> from CryptoPlus.Hash import python_SHA256
>>> message = "abc"
>>> hasher = python_SHA256.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
>>> hasher = python_SHA256.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'
"""
return sha256(data)
digest_size = sha256.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_SHA384.py
0,0 → 1,30
from pysha384 import sha384
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python SHA-384 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: FIPS 180-2
=========
>>> from CryptoPlus.Hash import python_SHA384
>>> message = "abc"
>>> hasher = python_SHA384.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7'
 
>>> message = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
>>> hasher = python_SHA384.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039'
"""
return sha384(data)
digest_size = sha384.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pysha224.py
0,0 → 1,14
+ digest_size = 28
\ No newline at end of file
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pysha512.py
0,0 → 1,111
+
+ return copy.deepcopy(self)
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_SHA.py
0,0 → 1,30
import pysha
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python SHA hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: FIPS 180-2
=========
>>> from CryptoPlus.Hash import python_SHA
>>> message = "abc"
>>> hasher = python_SHA.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'a9993e364706816aba3e25717850c26c9cd0d89d'
>>> message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
>>> hasher = python_SHA.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'84983e441c3bd26ebaae4aa1f95129e5e54670f1'
"""
return pysha.new(data)
digest_size = pysha.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_whirlpool.py
0,0 → 1,30
import pywhirlpool
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python Whirlpool hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: (http://paginas.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html)
=========
>>> from CryptoPlus.Hash import python_whirlpool
>>> message = "abc"
>>> hasher = python_whirlpool.new()
>>> hasher.update(message)
>>> hasher.hexdigest().upper()
'4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5'
>>> message = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
>>> hasher = python_whirlpool.new()
>>> hasher.update(message)
>>> hasher.hexdigest().upper()
'DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467'
"""
return pywhirlpool.new(data)
digest_size = pywhirlpool.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/RIPEMD.py
0,0 → 1,26
from Crypto.Hash import RIPEMD
 
def new(data=None):
"""Create a new RIPEMD-160 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE:
=========
>>> from CryptoPlus.Hash import RIPEMD
>>> message = "abc"
>>> hasher = RIPEMD.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc'
>>> message = "message digest"
>>> hasher = RIPEMD.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'5d0689ef49d2fae572b881b123a85ffa21595f36'
"""
return RIPEMD.new(data)
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pypbkdf2.py
0,0 → 1,354
#!/usr/bin/python
# -*- coding: ascii -*-
###########################################################################
# PBKDF2.py - PKCS#5 v2.0 Password-Based Key Derivation
#
# Copyright (C) 2007, 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
# provided that the above copyright notice appear in all copies and that
# both that copyright notice and this permission notice appear in
# supporting documentation.
#
# THE AUTHOR PROVIDES THIS SOFTWARE ``AS IS'' AND ANY EXPRESSED OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Country of origin: Canada
#
###########################################################################
# Sample PBKDF2 usage:
# from Crypto.Cipher import AES
# from PBKDF2 import PBKDF2
# import os
#
# salt = os.urandom(8) # 64-bit salt
# key = PBKDF2("This passphrase is a secret.", salt).read(32) # 256-bit key
# iv = os.urandom(16) # 128-bit IV
# cipher = AES.new(key, AES.MODE_CBC, iv)
# ...
#
# Sample crypt() usage:
# from PBKDF2 import crypt
# pwhash = crypt("secret")
# alleged_pw = raw_input("Enter password: ")
# if pwhash == crypt(alleged_pw, pwhash):
# print "Password good"
# else:
# print "Invalid password"
#
###########################################################################
# History:
#
# 2007-07-27 Dwayne C. Litzenberger <dlitz@dlitz.net>
# - Initial Release (v1.0)
#
# 2007-07-31 Dwayne C. Litzenberger <dlitz@dlitz.net>
# - Bugfix release (v1.1)
# - SECURITY: The PyCrypto XOR cipher (used, if available, in the _strxor
# function in the previous release) silently truncates all keys to 64
# bytes. The way it was used in the previous release, this would only be
# problem if the pseudorandom function that returned values larger than
# 64 bytes (so SHA1, SHA256 and SHA512 are fine), but I don't like
# anything that silently reduces the security margin from what is
# expected.
#
# 2008-06-17 Dwayne C. Litzenberger <dlitz@dlitz.net>
# - Compatibility release (v1.2)
# - Add support for older versions of Python (2.2 and 2.3).
#
###########################################################################
 
__version__ = "1.2"
 
from struct import pack
from binascii import b2a_hex
from random import randint
import string
 
try:
# Use PyCrypto (if available)
from Crypto.Hash import HMAC, SHA as SHA1
 
except ImportError:
# PyCrypto not available. Use the Python standard library.
import hmac as HMAC
import sha as SHA1
 
def strxor(a, b):
return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a, b)])
 
def b64encode(data, chars="+/"):
tt = string.maketrans("+/", chars)
return data.encode('base64').replace("\n", "").translate(tt)
 
class PBKDF2(object):
"""PBKDF2.py : PKCS#5 v2.0 Password-Based Key Derivation
This implementation takes a passphrase and a salt (and optionally an
iteration count, a digest module, and a MAC module) and provides a
file-like object from which an arbitrarily-sized key can be read.
 
If the passphrase and/or salt are unicode objects, they are encoded as
UTF-8 before they are processed.
 
The idea behind PBKDF2 is to derive a cryptographic key from a
passphrase and a salt.
PBKDF2 may also be used as a strong salted password hash. The
'crypt' function is provided for that purpose.
Remember: Keys generated using PBKDF2 are only as strong as the
passphrases they are derived from.
"""
 
def __init__(self, passphrase, salt, iterations=1000,
digestmodule=SHA1, macmodule=HMAC):
self.__macmodule = macmodule
self.__digestmodule = digestmodule
self._setup(passphrase, salt, iterations, self._pseudorandom)
 
def _pseudorandom(self, key, msg):
"""Pseudorandom function. e.g. HMAC-SHA1"""
return self.__macmodule.new(key=key, msg=msg,
digestmod=self.__digestmodule).digest()
def read(self, bytes):
"""Read the specified number of key bytes."""
if self.closed:
raise ValueError("file-like object is closed")
 
size = len(self.__buf)
blocks = [self.__buf]
i = self.__blockNum
while size < bytes:
i += 1
if i > 0xffffffffL or i < 1:
# We could return "" here, but
raise OverflowError("derived key too long")
block = self.__f(i)
blocks.append(block)
size += len(block)
buf = "".join(blocks)
retval = buf[:bytes]
self.__buf = buf[bytes:]
self.__blockNum = i
return retval
def __f(self, i):
# i must fit within 32 bits
assert 1 <= i <= 0xffffffffL
U = self.__prf(self.__passphrase, self.__salt + pack("!L", i))
result = U
for j in xrange(2, 1+self.__iterations):
U = self.__prf(self.__passphrase, U)
result = strxor(result, U)
return result
def hexread(self, octets):
"""Read the specified number of octets. Return them as hexadecimal.
 
Note that len(obj.hexread(n)) == 2*n.
"""
return b2a_hex(self.read(octets))
 
def _setup(self, passphrase, salt, iterations, prf):
# Sanity checks:
# passphrase and salt must be str or unicode (in the latter
# case, we convert to UTF-8)
if isinstance(passphrase, unicode):
passphrase = passphrase.encode("UTF-8")
if not isinstance(passphrase, str):
raise TypeError("passphrase must be str or unicode")
if isinstance(salt, unicode):
salt = salt.encode("UTF-8")
if not isinstance(salt, str):
raise TypeError("salt must be str or unicode")
 
# iterations must be an integer >= 1
if not isinstance(iterations, (int, long)):
raise TypeError("iterations must be an integer")
if iterations < 1:
raise ValueError("iterations must be at least 1")
# prf must be callable
if not callable(prf):
raise TypeError("prf must be callable")
 
self.__passphrase = passphrase
self.__salt = salt
self.__iterations = iterations
self.__prf = prf
self.__blockNum = 0
self.__buf = ""
self.closed = False
def close(self):
"""Close the stream."""
if not self.closed:
del self.__passphrase
del self.__salt
del self.__iterations
del self.__prf
del self.__blockNum
del self.__buf
self.closed = True
 
def crypt(word, salt=None, iterations=None):
"""PBKDF2-based unix crypt(3) replacement.
The number of iterations specified in the salt overrides the 'iterations'
parameter.
 
The effective hash length is 192 bits.
"""
# Generate a (pseudo-)random salt if the user hasn't provided one.
if salt is None:
salt = _makesalt()
 
# salt must be a string or the us-ascii subset of unicode
if isinstance(salt, unicode):
salt = salt.encode("us-ascii")
if not isinstance(salt, str):
raise TypeError("salt must be a string")
 
# word must be a string or unicode (in the latter case, we convert to UTF-8)
if isinstance(word, unicode):
word = word.encode("UTF-8")
if not isinstance(word, str):
raise TypeError("word must be a string or unicode")
 
# Try to extract the real salt and iteration count from the salt
if salt.startswith("$p5k2$"):
(iterations, salt, dummy) = salt.split("$")[2:5]
if iterations == "":
iterations = 400
else:
converted = int(iterations, 16)
if iterations != "%x" % converted: # lowercase hex, minimum digits
raise ValueError("Invalid salt")
iterations = converted
if not (iterations >= 1):
raise ValueError("Invalid salt")
# Make sure the salt matches the allowed character set
allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"
for ch in salt:
if ch not in allowed:
raise ValueError("Illegal character %r in salt" % (ch,))
 
if iterations is None or iterations == 400:
iterations = 400
salt = "$p5k2$$" + salt
else:
salt = "$p5k2$%x$%s" % (iterations, salt)
rawhash = PBKDF2(word, salt, iterations).read(24)
return salt + "$" + b64encode(rawhash, "./")
 
# Add crypt as a static method of the PBKDF2 class
# This makes it easier to do "from PBKDF2 import PBKDF2" and still use
# crypt.
PBKDF2.crypt = staticmethod(crypt)
 
def _makesalt():
"""Return a 48-bit pseudorandom salt for crypt().
This function is not suitable for generating cryptographic secrets.
"""
binarysalt = "".join([pack("@H", randint(0, 0xffff)) for i in range(3)])
return b64encode(binarysalt, "./")
 
def test_pbkdf2():
"""Module self-test"""
from binascii import a2b_hex
#
# Test vectors from RFC 3962
#
 
# Test 1
result = PBKDF2("password", "ATHENA.MIT.EDUraeburn", 1).read(16)
expected = a2b_hex("cdedb5281bb2f801565a1122b2563515")
if result != expected:
raise RuntimeError("self-test failed")
 
# Test 2
result = PBKDF2("password", "ATHENA.MIT.EDUraeburn", 1200).hexread(32)
expected = ("5c08eb61fdf71e4e4ec3cf6ba1f5512b"
"a7e52ddbc5e5142f708a31e2e62b1e13")
if result != expected:
raise RuntimeError("self-test failed")
 
# Test 3
result = PBKDF2("X"*64, "pass phrase equals block size", 1200).hexread(32)
expected = ("139c30c0966bc32ba55fdbf212530ac9"
"c5ec59f1a452f5cc9ad940fea0598ed1")
if result != expected:
raise RuntimeError("self-test failed")
# Test 4
result = PBKDF2("X"*65, "pass phrase exceeds block size", 1200).hexread(32)
expected = ("9ccad6d468770cd51b10e6a68721be61"
"1a8b4d282601db3b36be9246915ec82a")
if result != expected:
raise RuntimeError("self-test failed")
#
# Other test vectors
#
# Chunked read
f = PBKDF2("kickstart", "workbench", 256)
result = f.read(17)
result += f.read(17)
result += f.read(1)
result += f.read(2)
result += f.read(3)
expected = PBKDF2("kickstart", "workbench", 256).read(40)
if result != expected:
raise RuntimeError("self-test failed")
#
# crypt() test vectors
#
 
# crypt 1
result = crypt("cloadm", "exec")
expected = '$p5k2$$exec$r1EWMCMk7Rlv3L/RNcFXviDefYa0hlql'
if result != expected:
raise RuntimeError("self-test failed")
# crypt 2
result = crypt("gnu", '$p5k2$c$u9HvcT4d$.....')
expected = '$p5k2$c$u9HvcT4d$Sd1gwSVCLZYAuqZ25piRnbBEoAesaa/g'
if result != expected:
raise RuntimeError("self-test failed")
 
# crypt 3
result = crypt("dcl", "tUsch7fU", iterations=13)
expected = "$p5k2$d$tUsch7fU$nqDkaxMDOFBeJsTSfABsyn.PYUXilHwL"
if result != expected:
raise RuntimeError("self-test failed")
# crypt 4 (unicode)
result = crypt(u'\u0399\u03c9\u03b1\u03bd\u03bd\u03b7\u03c2',
'$p5k2$$KosHgqNo$9mjN8gqjt02hDoP0c2J0ABtLIwtot8cQ')
expected = '$p5k2$$KosHgqNo$9mjN8gqjt02hDoP0c2J0ABtLIwtot8cQ'
if result != expected:
raise RuntimeError("self-test failed")
 
if __name__ == '__main__':
test_pbkdf2()
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pysha256.py
0,0 → 1,107
+
+ return copy.deepcopy(self)
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pysha384.py
0,0 → 1,14
+ digest_size = 48
\ No newline at end of file
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pysha.py
0,0 → 1,349
#!/usr/bin/env python
# -*- coding: iso-8859-1
 
# Note that PyPy contains also a built-in module 'sha' which will hide
# this one if compiled in.
 
"""A sample implementation of SHA-1 in pure Python.
 
Framework adapted from Dinu Gherman's MD5 implementation by
J. Hallén and L. Creighton. SHA-1 implementation based directly on
the text of the NIST standard FIPS PUB 180-1.
"""
 
 
__date__ = '2004-11-17'
__version__ = 0.91 # Modernised by J. Hallén and L. Creighton for Pypy
 
 
import struct, copy
 
 
# ======================================================================
# Bit-Manipulation helpers
#
# _long2bytes() was contributed by Barry Warsaw
# and is reused here with tiny modifications.
# ======================================================================
 
def _long2bytesBigEndian(n, blocksize=0):
"""Convert a long integer to a byte string.
 
If optional blocksize is given and greater than zero, pad the front
of the byte string with binary zeros so that the length is a multiple
of blocksize.
"""
 
# After much testing, this algorithm was deemed to be the fastest.
s = ''
pack = struct.pack
while n > 0:
s = pack('>I', n & 0xffffffffL) + s
n = n >> 32
 
# Strip off leading zeros.
for i in range(len(s)):
if s[i] <> '\000':
break
else:
# Only happens when n == 0.
s = '\000'
i = 0
 
s = s[i:]
 
# Add back some pad bytes. This could be done more efficiently
# w.r.t. the de-padding being done above, but sigh...
if blocksize > 0 and len(s) % blocksize:
s = (blocksize - len(s) % blocksize) * '\000' + s
 
return s
 
 
def _bytelist2longBigEndian(list):
"Transform a list of characters into a list of longs."
 
imax = len(list)/4
hl = [0L] * imax
 
j = 0
i = 0
while i < imax:
b0 = long(ord(list[j])) << 24
b1 = long(ord(list[j+1])) << 16
b2 = long(ord(list[j+2])) << 8
b3 = long(ord(list[j+3]))
hl[i] = b0 | b1 | b2 | b3
i = i+1
j = j+4
 
return hl
 
 
def _rotateLeft(x, n):
"Rotate x (32 bit) left n bits circularly."
 
return (x << n) | (x >> (32-n))
 
 
# ======================================================================
# The SHA transformation functions
#
# ======================================================================
 
def f0_19(B, C, D):
return (B & C) | ((~ B) & D)
 
def f20_39(B, C, D):
return B ^ C ^ D
 
def f40_59(B, C, D):
return (B & C) | (B & D) | (C & D)
 
def f60_79(B, C, D):
return B ^ C ^ D
 
 
f = [f0_19, f20_39, f40_59, f60_79]
 
# Constants to be used
K = [
0x5A827999L, # ( 0 <= t <= 19)
0x6ED9EBA1L, # (20 <= t <= 39)
0x8F1BBCDCL, # (40 <= t <= 59)
0xCA62C1D6L # (60 <= t <= 79)
]
 
class sha:
"An implementation of the MD5 hash function in pure Python."
 
def __init__(self):
"Initialisation."
# Initial message length in bits(!).
self.length = 0L
self.count = [0, 0]
 
# Initial empty message as a sequence of bytes (8 bit characters).
self.input = []
 
# Call a separate init function, that can be used repeatedly
# to start from scratch on the same object.
self.init()
 
 
def init(self):
"Initialize the message-digest and set all fields to zero."
 
self.length = 0L
self.input = []
 
# Initial 160 bit message digest (5 times 32 bit).
self.H0 = 0x67452301L
self.H1 = 0xEFCDAB89L
self.H2 = 0x98BADCFEL
self.H3 = 0x10325476L
self.H4 = 0xC3D2E1F0L
 
def _transform(self, W):
 
for t in range(16, 80):
W.append(_rotateLeft(
W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1) & 0xffffffffL)
 
A = self.H0
B = self.H1
C = self.H2
D = self.H3
E = self.H4
 
"""
This loop was unrolled to gain about 10% in speed
for t in range(0, 80):
TEMP = _rotateLeft(A, 5) + f[t/20] + E + W[t] + K[t/20]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffffL
B = A
A = TEMP & 0xffffffffL
"""
 
for t in range(0, 20):
TEMP = _rotateLeft(A, 5) + ((B & C) | ((~ B) & D)) + E + W[t] + K[0]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffffL
B = A
A = TEMP & 0xffffffffL
 
for t in range(20, 40):
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[1]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffffL
B = A
A = TEMP & 0xffffffffL
 
for t in range(40, 60):
TEMP = _rotateLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffffL
B = A
A = TEMP & 0xffffffffL
 
for t in range(60, 80):
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[3]
E = D
D = C
C = _rotateLeft(B, 30) & 0xffffffffL
B = A
A = TEMP & 0xffffffffL
 
 
self.H0 = (self.H0 + A) & 0xffffffffL
self.H1 = (self.H1 + B) & 0xffffffffL
self.H2 = (self.H2 + C) & 0xffffffffL
self.H3 = (self.H3 + D) & 0xffffffffL
self.H4 = (self.H4 + E) & 0xffffffffL
 
# Down from here all methods follow the Python Standard Library
# API of the sha module.
 
def update(self, inBuf):
"""Add to the current message.
 
Update the md5 object with the string arg. Repeated calls
are equivalent to a single call with the concatenation of all
the arguments, i.e. m.update(a); m.update(b) is equivalent
to m.update(a+b).
 
The hash is immediately calculated for all full blocks. The final
calculation is made in digest(). It will calculate 1-2 blocks,
depending on how much padding we have to add. This allows us to
keep an intermediate value for the hash, so that we only need to
make minimal recalculation if we call update() to add more data
to the hashed string.
"""
 
leninBuf = long(len(inBuf))
 
# Compute number of bytes mod 64.
index = (self.count[1] >> 3) & 0x3FL
 
# Update number of bits.
self.count[1] = self.count[1] + (leninBuf << 3)
if self.count[1] < (leninBuf << 3):
self.count[0] = self.count[0] + 1
self.count[0] = self.count[0] + (leninBuf >> 29)
 
partLen = 64 - index
 
if leninBuf >= partLen:
self.input[index:] = list(inBuf[:partLen])
self._transform(_bytelist2longBigEndian(self.input))
i = partLen
while i + 63 < leninBuf:
self._transform(_bytelist2longBigEndian(list(inBuf[i:i+64])))
i = i + 64
else:
self.input = list(inBuf[i:leninBuf])
else:
i = 0
self.input = self.input + list(inBuf)
 
 
def digest(self):
"""Terminate the message-digest computation and return digest.
 
Return the digest of the strings passed to the update()
method so far. This is a 16-byte string which may contain
non-ASCII characters, including null bytes.
"""
 
H0 = self.H0
H1 = self.H1
H2 = self.H2
H3 = self.H3
H4 = self.H4
input = [] + self.input
count = [] + self.count
 
index = (self.count[1] >> 3) & 0x3fL
 
if index < 56:
padLen = 56 - index
else:
padLen = 120 - index
 
padding = ['\200'] + ['\000'] * 63
self.update(padding[:padLen])
 
# Append length (before padding).
bits = _bytelist2longBigEndian(self.input[:56]) + count
 
self._transform(bits)
 
# Store state in digest.
digest = _long2bytesBigEndian(self.H0, 4) + \
_long2bytesBigEndian(self.H1, 4) + \
_long2bytesBigEndian(self.H2, 4) + \
_long2bytesBigEndian(self.H3, 4) + \
_long2bytesBigEndian(self.H4, 4)
 
self.H0 = H0
self.H1 = H1
self.H2 = H2
self.H3 = H3
self.H4 = H4
self.input = input
self.count = count
 
return digest
 
 
def hexdigest(self):
"""Terminate and return digest in HEX form.
 
Like digest() except the digest is returned as a string of
length 32, containing only hexadecimal digits. This may be
used to exchange the value safely in email or other non-
binary environments.
"""
return ''.join(['%02x' % ord(c) for c in self.digest()])
 
def copy(self):
"""Return a clone object.
 
Return a copy ('clone') of the md5 object. This can be used
to efficiently compute the digests of strings that share
a common initial substring.
"""
 
return copy.deepcopy(self)
 
 
# ======================================================================
# Mimic Python top-level functions from standard library API
# for consistency with the md5 module of the standard library.
# ======================================================================
 
# These are mandatory variables in the module. They have constant values
# in the SHA standard.
 
digest_size = digestsize = 20
blocksize = 1
 
def new(arg=None):
"""Return a new sha crypto object.
 
If arg is present, the method call update(arg) is made.
"""
 
crypto = sha()
if arg:
crypto.update(arg)
 
return crypto
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/python_MD5.py
0,0 → 1,30
import pymd5
 
__all__ = ['new','digest_size']
 
def new(data=None):
"""Create a new pure python MD5 hash object
data = initial input (raw string) to the hashing object
if present, the method call update(arg) is made
EXAMPLE: (http://www.rfc-editor.org/rfc/rfc1321.txt)
=========
>>> from CryptoPlus.Hash import MD5
>>> message = "abc"
>>> hasher = MD5.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'900150983cd24fb0d6963f7d28e17f72'
>>> message = "message digest"
>>> hasher = MD5.new()
>>> hasher.update(message)
>>> hasher.hexdigest()
'f96b697d7cb7938d525a2f31aaf161d0'
"""
return pymd5.new(data)
digest_size = pymd5.digest_size
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Hash/pywhirlpool.py
0,0 → 1,795
## whirlpool.py - pure Python implementation of the Whirlpool algorithm.
## Bjorn Edstrom <be@bjrn.se> 16 december 2007.
##
## Copyrights
## ==========
##
## This code is based on the reference implementation by
## Paulo S.L.M. Barreto and Vincent Rijmen. The reference implementation
## is placed in the public domain but has the following headers:
##
## * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
## * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
## * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
## * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
## * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
## * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
## * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
## * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
## * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
## * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
## *
## */
## /* The code contained in this file (Whirlpool.c) is in the public domain. */
##
## This Python implementation is therefore also placed in the public domain.
 
try:
import psyco
psyco.full()
except ImportError:
pass
 
#block_size = 64
digest_size = 64
digestsize = 64
 
class Whirlpool:
"""Return a new Whirlpool object. An optional string argument
may be provided; if present, this string will be automatically
hashed."""
def __init__(self, arg=None):
self.ctx = WhirlpoolStruct()
if arg:
self.update(arg)
self.digest_status = 0
def update(self, arg):
"""update(arg)"""
WhirlpoolAdd(arg, len(arg)*8, self.ctx)
self.digest_status = 0
def digest(self):
"""digest()"""
if self.digest_status == 0:
self.dig = WhirlpoolFinalize(self.ctx)
self.digest_status = 1
return self.dig
def hexdigest(self):
"""hexdigest()"""
dig = self.digest()
tempstr = ''
for d in dig:
xxx = '%02x' % (ord(d))
tempstr = tempstr + xxx
return tempstr
def copy(self):
"""copy()"""
import copy
return copy.deepcopy(self)
 
def new(init=None):
"""Return a new Whirlpool object. An optional string argument
may be provided; if present, this string will be automatically
hashed."""
return Whirlpool(init)
 
#
# Private.
#
 
R = 10
 
C0 = [
0x18186018c07830d8, 0x23238c2305af4626, 0xc6c63fc67ef991b8, 0xe8e887e8136fcdfb,
0x878726874ca113cb, 0xb8b8dab8a9626d11, 0x0101040108050209, 0x4f4f214f426e9e0d,
0x3636d836adee6c9b, 0xa6a6a2a6590451ff, 0xd2d26fd2debdb90c, 0xf5f5f3f5fb06f70e,
0x7979f979ef80f296, 0x6f6fa16f5fcede30, 0x91917e91fcef3f6d, 0x52525552aa07a4f8,
0x60609d6027fdc047, 0xbcbccabc89766535, 0x9b9b569baccd2b37, 0x8e8e028e048c018a,
0xa3a3b6a371155bd2, 0x0c0c300c603c186c, 0x7b7bf17bff8af684, 0x3535d435b5e16a80,
0x1d1d741de8693af5, 0xe0e0a7e05347ddb3, 0xd7d77bd7f6acb321, 0xc2c22fc25eed999c,
0x2e2eb82e6d965c43, 0x4b4b314b627a9629, 0xfefedffea321e15d, 0x575741578216aed5,
0x15155415a8412abd, 0x7777c1779fb6eee8, 0x3737dc37a5eb6e92, 0xe5e5b3e57b56d79e,
0x9f9f469f8cd92313, 0xf0f0e7f0d317fd23, 0x4a4a354a6a7f9420, 0xdada4fda9e95a944,
0x58587d58fa25b0a2, 0xc9c903c906ca8fcf, 0x2929a429558d527c, 0x0a0a280a5022145a,
0xb1b1feb1e14f7f50, 0xa0a0baa0691a5dc9, 0x6b6bb16b7fdad614, 0x85852e855cab17d9,
0xbdbdcebd8173673c, 0x5d5d695dd234ba8f, 0x1010401080502090, 0xf4f4f7f4f303f507,
0xcbcb0bcb16c08bdd, 0x3e3ef83eedc67cd3, 0x0505140528110a2d, 0x676781671fe6ce78,
0xe4e4b7e47353d597, 0x27279c2725bb4e02, 0x4141194132588273, 0x8b8b168b2c9d0ba7,
0xa7a7a6a7510153f6, 0x7d7de97dcf94fab2, 0x95956e95dcfb3749, 0xd8d847d88e9fad56,
0xfbfbcbfb8b30eb70, 0xeeee9fee2371c1cd, 0x7c7ced7cc791f8bb, 0x6666856617e3cc71,
0xdddd53dda68ea77b, 0x17175c17b84b2eaf, 0x4747014702468e45, 0x9e9e429e84dc211a,
0xcaca0fca1ec589d4, 0x2d2db42d75995a58, 0xbfbfc6bf9179632e, 0x07071c07381b0e3f,
0xadad8ead012347ac, 0x5a5a755aea2fb4b0, 0x838336836cb51bef, 0x3333cc3385ff66b6,
0x636391633ff2c65c, 0x02020802100a0412, 0xaaaa92aa39384993, 0x7171d971afa8e2de,
0xc8c807c80ecf8dc6, 0x19196419c87d32d1, 0x494939497270923b, 0xd9d943d9869aaf5f,
0xf2f2eff2c31df931, 0xe3e3abe34b48dba8, 0x5b5b715be22ab6b9, 0x88881a8834920dbc,
0x9a9a529aa4c8293e, 0x262698262dbe4c0b, 0x3232c8328dfa64bf, 0xb0b0fab0e94a7d59,
0xe9e983e91b6acff2, 0x0f0f3c0f78331e77, 0xd5d573d5e6a6b733, 0x80803a8074ba1df4,
0xbebec2be997c6127, 0xcdcd13cd26de87eb, 0x3434d034bde46889, 0x48483d487a759032,
0xffffdbffab24e354, 0x7a7af57af78ff48d, 0x90907a90f4ea3d64, 0x5f5f615fc23ebe9d,
0x202080201da0403d, 0x6868bd6867d5d00f, 0x1a1a681ad07234ca, 0xaeae82ae192c41b7,
0xb4b4eab4c95e757d, 0x54544d549a19a8ce, 0x93937693ece53b7f, 0x222288220daa442f,
0x64648d6407e9c863, 0xf1f1e3f1db12ff2a, 0x7373d173bfa2e6cc, 0x12124812905a2482,
0x40401d403a5d807a, 0x0808200840281048, 0xc3c32bc356e89b95, 0xecec97ec337bc5df,
0xdbdb4bdb9690ab4d, 0xa1a1bea1611f5fc0, 0x8d8d0e8d1c830791, 0x3d3df43df5c97ac8,
0x97976697ccf1335b, 0x0000000000000000, 0xcfcf1bcf36d483f9, 0x2b2bac2b4587566e,
0x7676c57697b3ece1, 0x8282328264b019e6, 0xd6d67fd6fea9b128, 0x1b1b6c1bd87736c3,
0xb5b5eeb5c15b7774, 0xafaf86af112943be, 0x6a6ab56a77dfd41d, 0x50505d50ba0da0ea,
0x45450945124c8a57, 0xf3f3ebf3cb18fb38, 0x3030c0309df060ad, 0xefef9bef2b74c3c4,
0x3f3ffc3fe5c37eda, 0x55554955921caac7, 0xa2a2b2a2791059db, 0xeaea8fea0365c9e9,
0x656589650fecca6a, 0xbabad2bab9686903, 0x2f2fbc2f65935e4a, 0xc0c027c04ee79d8e,
0xdede5fdebe81a160, 0x1c1c701ce06c38fc, 0xfdfdd3fdbb2ee746, 0x4d4d294d52649a1f,
0x92927292e4e03976, 0x7575c9758fbceafa, 0x06061806301e0c36, 0x8a8a128a249809ae,
0xb2b2f2b2f940794b, 0xe6e6bfe66359d185, 0x0e0e380e70361c7e, 0x1f1f7c1ff8633ee7,
0x6262956237f7c455, 0xd4d477d4eea3b53a, 0xa8a89aa829324d81, 0x96966296c4f43152,
0xf9f9c3f99b3aef62, 0xc5c533c566f697a3, 0x2525942535b14a10, 0x59597959f220b2ab,
0x84842a8454ae15d0, 0x7272d572b7a7e4c5, 0x3939e439d5dd72ec, 0x4c4c2d4c5a619816,
0x5e5e655eca3bbc94, 0x7878fd78e785f09f, 0x3838e038ddd870e5, 0x8c8c0a8c14860598,
0xd1d163d1c6b2bf17, 0xa5a5aea5410b57e4, 0xe2e2afe2434dd9a1, 0x616199612ff8c24e,
0xb3b3f6b3f1457b42, 0x2121842115a54234, 0x9c9c4a9c94d62508, 0x1e1e781ef0663cee,
0x4343114322528661, 0xc7c73bc776fc93b1, 0xfcfcd7fcb32be54f, 0x0404100420140824,
0x51515951b208a2e3, 0x99995e99bcc72f25, 0x6d6da96d4fc4da22, 0x0d0d340d68391a65,
0xfafacffa8335e979, 0xdfdf5bdfb684a369, 0x7e7ee57ed79bfca9, 0x242490243db44819,
0x3b3bec3bc5d776fe, 0xabab96ab313d4b9a, 0xcece1fce3ed181f0, 0x1111441188552299,
0x8f8f068f0c890383, 0x4e4e254e4a6b9c04, 0xb7b7e6b7d1517366, 0xebeb8beb0b60cbe0,
0x3c3cf03cfdcc78c1, 0x81813e817cbf1ffd, 0x94946a94d4fe3540, 0xf7f7fbf7eb0cf31c,
0xb9b9deb9a1676f18, 0x13134c13985f268b, 0x2c2cb02c7d9c5851, 0xd3d36bd3d6b8bb05,
0xe7e7bbe76b5cd38c, 0x6e6ea56e57cbdc39, 0xc4c437c46ef395aa, 0x03030c03180f061b,
0x565645568a13acdc, 0x44440d441a49885e, 0x7f7fe17fdf9efea0, 0xa9a99ea921374f88,
0x2a2aa82a4d825467, 0xbbbbd6bbb16d6b0a, 0xc1c123c146e29f87, 0x53535153a202a6f1,
0xdcdc57dcae8ba572, 0x0b0b2c0b58271653, 0x9d9d4e9d9cd32701, 0x6c6cad6c47c1d82b,
0x3131c43195f562a4, 0x7474cd7487b9e8f3, 0xf6f6fff6e309f115, 0x464605460a438c4c,
0xacac8aac092645a5, 0x89891e893c970fb5, 0x14145014a04428b4, 0xe1e1a3e15b42dfba,
0x16165816b04e2ca6, 0x3a3ae83acdd274f7, 0x6969b9696fd0d206, 0x09092409482d1241,
0x7070dd70a7ade0d7, 0xb6b6e2b6d954716f, 0xd0d067d0ceb7bd1e, 0xeded93ed3b7ec7d6,
0xcccc17cc2edb85e2, 0x424215422a578468, 0x98985a98b4c22d2c, 0xa4a4aaa4490e55ed,
0x2828a0285d885075, 0x5c5c6d5cda31b886, 0xf8f8c7f8933fed6b, 0x8686228644a411c2,
]
C1 = [
0xd818186018c07830, 0x2623238c2305af46, 0xb8c6c63fc67ef991, 0xfbe8e887e8136fcd,
0xcb878726874ca113, 0x11b8b8dab8a9626d, 0x0901010401080502, 0x0d4f4f214f426e9e,
0x9b3636d836adee6c, 0xffa6a6a2a6590451, 0x0cd2d26fd2debdb9, 0x0ef5f5f3f5fb06f7,
0x967979f979ef80f2, 0x306f6fa16f5fcede, 0x6d91917e91fcef3f, 0xf852525552aa07a4,
0x4760609d6027fdc0, 0x35bcbccabc897665, 0x379b9b569baccd2b, 0x8a8e8e028e048c01,
0xd2a3a3b6a371155b, 0x6c0c0c300c603c18, 0x847b7bf17bff8af6, 0x803535d435b5e16a,
0xf51d1d741de8693a, 0xb3e0e0a7e05347dd, 0x21d7d77bd7f6acb3, 0x9cc2c22fc25eed99,
0x432e2eb82e6d965c, 0x294b4b314b627a96, 0x5dfefedffea321e1, 0xd5575741578216ae,
0xbd15155415a8412a, 0xe87777c1779fb6ee, 0x923737dc37a5eb6e, 0x9ee5e5b3e57b56d7,
0x139f9f469f8cd923, 0x23f0f0e7f0d317fd, 0x204a4a354a6a7f94, 0x44dada4fda9e95a9,
0xa258587d58fa25b0, 0xcfc9c903c906ca8f, 0x7c2929a429558d52, 0x5a0a0a280a502214,
0x50b1b1feb1e14f7f, 0xc9a0a0baa0691a5d, 0x146b6bb16b7fdad6, 0xd985852e855cab17,
0x3cbdbdcebd817367, 0x8f5d5d695dd234ba, 0x9010104010805020, 0x07f4f4f7f4f303f5,
0xddcbcb0bcb16c08b, 0xd33e3ef83eedc67c, 0x2d0505140528110a, 0x78676781671fe6ce,
0x97e4e4b7e47353d5, 0x0227279c2725bb4e, 0x7341411941325882, 0xa78b8b168b2c9d0b,
0xf6a7a7a6a7510153, 0xb27d7de97dcf94fa, 0x4995956e95dcfb37, 0x56d8d847d88e9fad,
0x70fbfbcbfb8b30eb, 0xcdeeee9fee2371c1, 0xbb7c7ced7cc791f8, 0x716666856617e3cc,
0x7bdddd53dda68ea7, 0xaf17175c17b84b2e, 0x454747014702468e, 0x1a9e9e429e84dc21,
0xd4caca0fca1ec589, 0x582d2db42d75995a, 0x2ebfbfc6bf917963, 0x3f07071c07381b0e,
0xacadad8ead012347, 0xb05a5a755aea2fb4, 0xef838336836cb51b, 0xb63333cc3385ff66,
0x5c636391633ff2c6, 0x1202020802100a04, 0x93aaaa92aa393849, 0xde7171d971afa8e2,
0xc6c8c807c80ecf8d, 0xd119196419c87d32, 0x3b49493949727092, 0x5fd9d943d9869aaf,
0x31f2f2eff2c31df9, 0xa8e3e3abe34b48db, 0xb95b5b715be22ab6, 0xbc88881a8834920d,
0x3e9a9a529aa4c829, 0x0b262698262dbe4c, 0xbf3232c8328dfa64, 0x59b0b0fab0e94a7d,
0xf2e9e983e91b6acf, 0x770f0f3c0f78331e, 0x33d5d573d5e6a6b7, 0xf480803a8074ba1d,
0x27bebec2be997c61, 0xebcdcd13cd26de87, 0x893434d034bde468, 0x3248483d487a7590,
0x54ffffdbffab24e3, 0x8d7a7af57af78ff4, 0x6490907a90f4ea3d, 0x9d5f5f615fc23ebe,
0x3d202080201da040, 0x0f6868bd6867d5d0, 0xca1a1a681ad07234, 0xb7aeae82ae192c41,
0x7db4b4eab4c95e75, 0xce54544d549a19a8, 0x7f93937693ece53b, 0x2f222288220daa44,
0x6364648d6407e9c8, 0x2af1f1e3f1db12ff, 0xcc7373d173bfa2e6, 0x8212124812905a24,
0x7a40401d403a5d80, 0x4808082008402810, 0x95c3c32bc356e89b, 0xdfecec97ec337bc5,
0x4ddbdb4bdb9690ab, 0xc0a1a1bea1611f5f, 0x918d8d0e8d1c8307, 0xc83d3df43df5c97a,
0x5b97976697ccf133, 0x0000000000000000, 0xf9cfcf1bcf36d483, 0x6e2b2bac2b458756,
0xe17676c57697b3ec, 0xe68282328264b019, 0x28d6d67fd6fea9b1, 0xc31b1b6c1bd87736,
0x74b5b5eeb5c15b77, 0xbeafaf86af112943, 0x1d6a6ab56a77dfd4, 0xea50505d50ba0da0,
0x5745450945124c8a, 0x38f3f3ebf3cb18fb, 0xad3030c0309df060, 0xc4efef9bef2b74c3,
0xda3f3ffc3fe5c37e, 0xc755554955921caa, 0xdba2a2b2a2791059, 0xe9eaea8fea0365c9,
0x6a656589650fecca, 0x03babad2bab96869, 0x4a2f2fbc2f65935e, 0x8ec0c027c04ee79d,
0x60dede5fdebe81a1, 0xfc1c1c701ce06c38, 0x46fdfdd3fdbb2ee7, 0x1f4d4d294d52649a,
0x7692927292e4e039, 0xfa7575c9758fbcea, 0x3606061806301e0c, 0xae8a8a128a249809,
0x4bb2b2f2b2f94079, 0x85e6e6bfe66359d1, 0x7e0e0e380e70361c, 0xe71f1f7c1ff8633e,
0x556262956237f7c4, 0x3ad4d477d4eea3b5, 0x81a8a89aa829324d, 0x5296966296c4f431,
0x62f9f9c3f99b3aef, 0xa3c5c533c566f697, 0x102525942535b14a, 0xab59597959f220b2,
0xd084842a8454ae15, 0xc57272d572b7a7e4, 0xec3939e439d5dd72, 0x164c4c2d4c5a6198,
0x945e5e655eca3bbc, 0x9f7878fd78e785f0, 0xe53838e038ddd870, 0x988c8c0a8c148605,
0x17d1d163d1c6b2bf, 0xe4a5a5aea5410b57, 0xa1e2e2afe2434dd9, 0x4e616199612ff8c2,
0x42b3b3f6b3f1457b, 0x342121842115a542, 0x089c9c4a9c94d625, 0xee1e1e781ef0663c,
0x6143431143225286, 0xb1c7c73bc776fc93, 0x4ffcfcd7fcb32be5, 0x2404041004201408,
0xe351515951b208a2, 0x2599995e99bcc72f, 0x226d6da96d4fc4da, 0x650d0d340d68391a,
0x79fafacffa8335e9, 0x69dfdf5bdfb684a3, 0xa97e7ee57ed79bfc, 0x19242490243db448,
0xfe3b3bec3bc5d776, 0x9aabab96ab313d4b, 0xf0cece1fce3ed181, 0x9911114411885522,
0x838f8f068f0c8903, 0x044e4e254e4a6b9c, 0x66b7b7e6b7d15173, 0xe0ebeb8beb0b60cb,
0xc13c3cf03cfdcc78, 0xfd81813e817cbf1f, 0x4094946a94d4fe35, 0x1cf7f7fbf7eb0cf3,
0x18b9b9deb9a1676f, 0x8b13134c13985f26, 0x512c2cb02c7d9c58, 0x05d3d36bd3d6b8bb,
0x8ce7e7bbe76b5cd3, 0x396e6ea56e57cbdc, 0xaac4c437c46ef395, 0x1b03030c03180f06,
0xdc565645568a13ac, 0x5e44440d441a4988, 0xa07f7fe17fdf9efe, 0x88a9a99ea921374f,
0x672a2aa82a4d8254, 0x0abbbbd6bbb16d6b, 0x87c1c123c146e29f, 0xf153535153a202a6,
0x72dcdc57dcae8ba5, 0x530b0b2c0b582716, 0x019d9d4e9d9cd327, 0x2b6c6cad6c47c1d8,
0xa43131c43195f562, 0xf37474cd7487b9e8, 0x15f6f6fff6e309f1, 0x4c464605460a438c,
0xa5acac8aac092645, 0xb589891e893c970f, 0xb414145014a04428, 0xbae1e1a3e15b42df,
0xa616165816b04e2c, 0xf73a3ae83acdd274, 0x066969b9696fd0d2, 0x4109092409482d12,
0xd77070dd70a7ade0, 0x6fb6b6e2b6d95471, 0x1ed0d067d0ceb7bd, 0xd6eded93ed3b7ec7,
0xe2cccc17cc2edb85, 0x68424215422a5784, 0x2c98985a98b4c22d, 0xeda4a4aaa4490e55,
0x752828a0285d8850, 0x865c5c6d5cda31b8, 0x6bf8f8c7f8933fed, 0xc28686228644a411,
]
C2 = [
0x30d818186018c078, 0x462623238c2305af, 0x91b8c6c63fc67ef9, 0xcdfbe8e887e8136f,
0x13cb878726874ca1, 0x6d11b8b8dab8a962, 0x0209010104010805, 0x9e0d4f4f214f426e,
0x6c9b3636d836adee, 0x51ffa6a6a2a65904, 0xb90cd2d26fd2debd, 0xf70ef5f5f3f5fb06,
0xf2967979f979ef80, 0xde306f6fa16f5fce, 0x3f6d91917e91fcef, 0xa4f852525552aa07,
0xc04760609d6027fd, 0x6535bcbccabc8976, 0x2b379b9b569baccd, 0x018a8e8e028e048c,
0x5bd2a3a3b6a37115, 0x186c0c0c300c603c, 0xf6847b7bf17bff8a, 0x6a803535d435b5e1,
0x3af51d1d741de869, 0xddb3e0e0a7e05347, 0xb321d7d77bd7f6ac, 0x999cc2c22fc25eed,
0x5c432e2eb82e6d96, 0x96294b4b314b627a, 0xe15dfefedffea321, 0xaed5575741578216,
0x2abd15155415a841, 0xeee87777c1779fb6, 0x6e923737dc37a5eb, 0xd79ee5e5b3e57b56,
0x23139f9f469f8cd9, 0xfd23f0f0e7f0d317, 0x94204a4a354a6a7f, 0xa944dada4fda9e95,
0xb0a258587d58fa25, 0x8fcfc9c903c906ca, 0x527c2929a429558d, 0x145a0a0a280a5022,
0x7f50b1b1feb1e14f, 0x5dc9a0a0baa0691a, 0xd6146b6bb16b7fda, 0x17d985852e855cab,
0x673cbdbdcebd8173, 0xba8f5d5d695dd234, 0x2090101040108050, 0xf507f4f4f7f4f303,
0x8bddcbcb0bcb16c0, 0x7cd33e3ef83eedc6, 0x0a2d050514052811, 0xce78676781671fe6,
0xd597e4e4b7e47353, 0x4e0227279c2725bb, 0x8273414119413258, 0x0ba78b8b168b2c9d,
0x53f6a7a7a6a75101, 0xfab27d7de97dcf94, 0x374995956e95dcfb, 0xad56d8d847d88e9f,
0xeb70fbfbcbfb8b30, 0xc1cdeeee9fee2371, 0xf8bb7c7ced7cc791, 0xcc716666856617e3,
0xa77bdddd53dda68e, 0x2eaf17175c17b84b, 0x8e45474701470246, 0x211a9e9e429e84dc,
0x89d4caca0fca1ec5, 0x5a582d2db42d7599, 0x632ebfbfc6bf9179, 0x0e3f07071c07381b,
0x47acadad8ead0123, 0xb4b05a5a755aea2f, 0x1bef838336836cb5, 0x66b63333cc3385ff,
0xc65c636391633ff2, 0x041202020802100a, 0x4993aaaa92aa3938, 0xe2de7171d971afa8,
0x8dc6c8c807c80ecf, 0x32d119196419c87d, 0x923b494939497270, 0xaf5fd9d943d9869a,
0xf931f2f2eff2c31d, 0xdba8e3e3abe34b48, 0xb6b95b5b715be22a, 0x0dbc88881a883492,
0x293e9a9a529aa4c8, 0x4c0b262698262dbe, 0x64bf3232c8328dfa, 0x7d59b0b0fab0e94a,
0xcff2e9e983e91b6a, 0x1e770f0f3c0f7833, 0xb733d5d573d5e6a6, 0x1df480803a8074ba,
0x6127bebec2be997c, 0x87ebcdcd13cd26de, 0x68893434d034bde4, 0x903248483d487a75,
0xe354ffffdbffab24, 0xf48d7a7af57af78f, 0x3d6490907a90f4ea, 0xbe9d5f5f615fc23e,
0x403d202080201da0, 0xd00f6868bd6867d5, 0x34ca1a1a681ad072, 0x41b7aeae82ae192c,
0x757db4b4eab4c95e, 0xa8ce54544d549a19, 0x3b7f93937693ece5, 0x442f222288220daa,
0xc86364648d6407e9, 0xff2af1f1e3f1db12, 0xe6cc7373d173bfa2, 0x248212124812905a,
0x807a40401d403a5d, 0x1048080820084028, 0x9b95c3c32bc356e8, 0xc5dfecec97ec337b,
0xab4ddbdb4bdb9690, 0x5fc0a1a1bea1611f, 0x07918d8d0e8d1c83, 0x7ac83d3df43df5c9,
0x335b97976697ccf1, 0x0000000000000000, 0x83f9cfcf1bcf36d4, 0x566e2b2bac2b4587,
0xece17676c57697b3, 0x19e68282328264b0, 0xb128d6d67fd6fea9, 0x36c31b1b6c1bd877,
0x7774b5b5eeb5c15b, 0x43beafaf86af1129, 0xd41d6a6ab56a77df, 0xa0ea50505d50ba0d,
0x8a5745450945124c, 0xfb38f3f3ebf3cb18, 0x60ad3030c0309df0, 0xc3c4efef9bef2b74,
0x7eda3f3ffc3fe5c3, 0xaac755554955921c, 0x59dba2a2b2a27910, 0xc9e9eaea8fea0365,
0xca6a656589650fec, 0x6903babad2bab968, 0x5e4a2f2fbc2f6593, 0x9d8ec0c027c04ee7,
0xa160dede5fdebe81, 0x38fc1c1c701ce06c, 0xe746fdfdd3fdbb2e, 0x9a1f4d4d294d5264,
0x397692927292e4e0, 0xeafa7575c9758fbc, 0x0c3606061806301e, 0x09ae8a8a128a2498,
0x794bb2b2f2b2f940, 0xd185e6e6bfe66359, 0x1c7e0e0e380e7036, 0x3ee71f1f7c1ff863,
0xc4556262956237f7, 0xb53ad4d477d4eea3, 0x4d81a8a89aa82932, 0x315296966296c4f4,
0xef62f9f9c3f99b3a, 0x97a3c5c533c566f6, 0x4a102525942535b1, 0xb2ab59597959f220,
0x15d084842a8454ae, 0xe4c57272d572b7a7, 0x72ec3939e439d5dd, 0x98164c4c2d4c5a61,
0xbc945e5e655eca3b, 0xf09f7878fd78e785, 0x70e53838e038ddd8, 0x05988c8c0a8c1486,
0xbf17d1d163d1c6b2, 0x57e4a5a5aea5410b, 0xd9a1e2e2afe2434d, 0xc24e616199612ff8,
0x7b42b3b3f6b3f145, 0x42342121842115a5, 0x25089c9c4a9c94d6, 0x3cee1e1e781ef066,
0x8661434311432252, 0x93b1c7c73bc776fc, 0xe54ffcfcd7fcb32b, 0x0824040410042014,
0xa2e351515951b208, 0x2f2599995e99bcc7, 0xda226d6da96d4fc4, 0x1a650d0d340d6839,
0xe979fafacffa8335, 0xa369dfdf5bdfb684, 0xfca97e7ee57ed79b, 0x4819242490243db4,
0x76fe3b3bec3bc5d7, 0x4b9aabab96ab313d, 0x81f0cece1fce3ed1, 0x2299111144118855,
0x03838f8f068f0c89, 0x9c044e4e254e4a6b, 0x7366b7b7e6b7d151, 0xcbe0ebeb8beb0b60,
0x78c13c3cf03cfdcc, 0x1ffd81813e817cbf, 0x354094946a94d4fe, 0xf31cf7f7fbf7eb0c,
0x6f18b9b9deb9a167, 0x268b13134c13985f, 0x58512c2cb02c7d9c, 0xbb05d3d36bd3d6b8,
0xd38ce7e7bbe76b5c, 0xdc396e6ea56e57cb, 0x95aac4c437c46ef3, 0x061b03030c03180f,
0xacdc565645568a13, 0x885e44440d441a49, 0xfea07f7fe17fdf9e, 0x4f88a9a99ea92137,
0x54672a2aa82a4d82, 0x6b0abbbbd6bbb16d, 0x9f87c1c123c146e2, 0xa6f153535153a202,
0xa572dcdc57dcae8b, 0x16530b0b2c0b5827, 0x27019d9d4e9d9cd3, 0xd82b6c6cad6c47c1,
0x62a43131c43195f5, 0xe8f37474cd7487b9, 0xf115f6f6fff6e309, 0x8c4c464605460a43,
0x45a5acac8aac0926, 0x0fb589891e893c97, 0x28b414145014a044, 0xdfbae1e1a3e15b42,
0x2ca616165816b04e, 0x74f73a3ae83acdd2, 0xd2066969b9696fd0, 0x124109092409482d,
0xe0d77070dd70a7ad, 0x716fb6b6e2b6d954, 0xbd1ed0d067d0ceb7, 0xc7d6eded93ed3b7e,
0x85e2cccc17cc2edb, 0x8468424215422a57, 0x2d2c98985a98b4c2, 0x55eda4a4aaa4490e,
0x50752828a0285d88, 0xb8865c5c6d5cda31, 0xed6bf8f8c7f8933f, 0x11c28686228644a4,
]
C3 = [
0x7830d818186018c0, 0xaf462623238c2305, 0xf991b8c6c63fc67e, 0x6fcdfbe8e887e813,
0xa113cb878726874c, 0x626d11b8b8dab8a9, 0x0502090101040108, 0x6e9e0d4f4f214f42,
0xee6c9b3636d836ad, 0x0451ffa6a6a2a659, 0xbdb90cd2d26fd2de, 0x06f70ef5f5f3f5fb,
0x80f2967979f979ef, 0xcede306f6fa16f5f, 0xef3f6d91917e91fc, 0x07a4f852525552aa,
0xfdc04760609d6027, 0x766535bcbccabc89, 0xcd2b379b9b569bac, 0x8c018a8e8e028e04,
0x155bd2a3a3b6a371, 0x3c186c0c0c300c60, 0x8af6847b7bf17bff, 0xe16a803535d435b5,
0x693af51d1d741de8, 0x47ddb3e0e0a7e053, 0xacb321d7d77bd7f6, 0xed999cc2c22fc25e,
0x965c432e2eb82e6d, 0x7a96294b4b314b62, 0x21e15dfefedffea3, 0x16aed55757415782,
0x412abd15155415a8, 0xb6eee87777c1779f, 0xeb6e923737dc37a5, 0x56d79ee5e5b3e57b,
0xd923139f9f469f8c, 0x17fd23f0f0e7f0d3, 0x7f94204a4a354a6a, 0x95a944dada4fda9e,
0x25b0a258587d58fa, 0xca8fcfc9c903c906, 0x8d527c2929a42955, 0x22145a0a0a280a50,
0x4f7f50b1b1feb1e1, 0x1a5dc9a0a0baa069, 0xdad6146b6bb16b7f, 0xab17d985852e855c,
0x73673cbdbdcebd81, 0x34ba8f5d5d695dd2, 0x5020901010401080, 0x03f507f4f4f7f4f3,
0xc08bddcbcb0bcb16, 0xc67cd33e3ef83eed, 0x110a2d0505140528, 0xe6ce78676781671f,
0x53d597e4e4b7e473, 0xbb4e0227279c2725, 0x5882734141194132, 0x9d0ba78b8b168b2c,
0x0153f6a7a7a6a751, 0x94fab27d7de97dcf, 0xfb374995956e95dc, 0x9fad56d8d847d88e,
0x30eb70fbfbcbfb8b, 0x71c1cdeeee9fee23, 0x91f8bb7c7ced7cc7, 0xe3cc716666856617,
0x8ea77bdddd53dda6, 0x4b2eaf17175c17b8, 0x468e454747014702, 0xdc211a9e9e429e84,
0xc589d4caca0fca1e, 0x995a582d2db42d75, 0x79632ebfbfc6bf91, 0x1b0e3f07071c0738,
0x2347acadad8ead01, 0x2fb4b05a5a755aea, 0xb51bef838336836c, 0xff66b63333cc3385,
0xf2c65c636391633f, 0x0a04120202080210, 0x384993aaaa92aa39, 0xa8e2de7171d971af,
0xcf8dc6c8c807c80e, 0x7d32d119196419c8, 0x70923b4949394972, 0x9aaf5fd9d943d986,
0x1df931f2f2eff2c3, 0x48dba8e3e3abe34b, 0x2ab6b95b5b715be2, 0x920dbc88881a8834,
0xc8293e9a9a529aa4, 0xbe4c0b262698262d, 0xfa64bf3232c8328d, 0x4a7d59b0b0fab0e9,
0x6acff2e9e983e91b, 0x331e770f0f3c0f78, 0xa6b733d5d573d5e6, 0xba1df480803a8074,
0x7c6127bebec2be99, 0xde87ebcdcd13cd26, 0xe468893434d034bd, 0x75903248483d487a,
0x24e354ffffdbffab, 0x8ff48d7a7af57af7, 0xea3d6490907a90f4, 0x3ebe9d5f5f615fc2,
0xa0403d202080201d, 0xd5d00f6868bd6867, 0x7234ca1a1a681ad0, 0x2c41b7aeae82ae19,
0x5e757db4b4eab4c9, 0x19a8ce54544d549a, 0xe53b7f93937693ec, 0xaa442f222288220d,
0xe9c86364648d6407, 0x12ff2af1f1e3f1db, 0xa2e6cc7373d173bf, 0x5a24821212481290,
0x5d807a40401d403a, 0x2810480808200840, 0xe89b95c3c32bc356, 0x7bc5dfecec97ec33,
0x90ab4ddbdb4bdb96, 0x1f5fc0a1a1bea161, 0x8307918d8d0e8d1c, 0xc97ac83d3df43df5,
0xf1335b97976697cc, 0x0000000000000000, 0xd483f9cfcf1bcf36, 0x87566e2b2bac2b45,
0xb3ece17676c57697, 0xb019e68282328264, 0xa9b128d6d67fd6fe, 0x7736c31b1b6c1bd8,
0x5b7774b5b5eeb5c1, 0x2943beafaf86af11, 0xdfd41d6a6ab56a77, 0x0da0ea50505d50ba,
0x4c8a574545094512, 0x18fb38f3f3ebf3cb, 0xf060ad3030c0309d, 0x74c3c4efef9bef2b,
0xc37eda3f3ffc3fe5, 0x1caac75555495592, 0x1059dba2a2b2a279, 0x65c9e9eaea8fea03,
0xecca6a656589650f, 0x686903babad2bab9, 0x935e4a2f2fbc2f65, 0xe79d8ec0c027c04e,
0x81a160dede5fdebe, 0x6c38fc1c1c701ce0, 0x2ee746fdfdd3fdbb, 0x649a1f4d4d294d52,
0xe0397692927292e4, 0xbceafa7575c9758f, 0x1e0c360606180630, 0x9809ae8a8a128a24,
0x40794bb2b2f2b2f9, 0x59d185e6e6bfe663, 0x361c7e0e0e380e70, 0x633ee71f1f7c1ff8,
0xf7c4556262956237, 0xa3b53ad4d477d4ee, 0x324d81a8a89aa829, 0xf4315296966296c4,
0x3aef62f9f9c3f99b, 0xf697a3c5c533c566, 0xb14a102525942535, 0x20b2ab59597959f2,
0xae15d084842a8454, 0xa7e4c57272d572b7, 0xdd72ec3939e439d5, 0x6198164c4c2d4c5a,
0x3bbc945e5e655eca, 0x85f09f7878fd78e7, 0xd870e53838e038dd, 0x8605988c8c0a8c14,
0xb2bf17d1d163d1c6, 0x0b57e4a5a5aea541, 0x4dd9a1e2e2afe243, 0xf8c24e616199612f,
0x457b42b3b3f6b3f1, 0xa542342121842115, 0xd625089c9c4a9c94, 0x663cee1e1e781ef0,
0x5286614343114322, 0xfc93b1c7c73bc776, 0x2be54ffcfcd7fcb3, 0x1408240404100420,
0x08a2e351515951b2, 0xc72f2599995e99bc, 0xc4da226d6da96d4f, 0x391a650d0d340d68,
0x35e979fafacffa83, 0x84a369dfdf5bdfb6, 0x9bfca97e7ee57ed7, 0xb44819242490243d,
0xd776fe3b3bec3bc5, 0x3d4b9aabab96ab31, 0xd181f0cece1fce3e, 0x5522991111441188,
0x8903838f8f068f0c, 0x6b9c044e4e254e4a, 0x517366b7b7e6b7d1, 0x60cbe0ebeb8beb0b,
0xcc78c13c3cf03cfd, 0xbf1ffd81813e817c, 0xfe354094946a94d4, 0x0cf31cf7f7fbf7eb,
0x676f18b9b9deb9a1, 0x5f268b13134c1398, 0x9c58512c2cb02c7d, 0xb8bb05d3d36bd3d6,
0x5cd38ce7e7bbe76b, 0xcbdc396e6ea56e57, 0xf395aac4c437c46e, 0x0f061b03030c0318,
0x13acdc565645568a, 0x49885e44440d441a, 0x9efea07f7fe17fdf, 0x374f88a9a99ea921,
0x8254672a2aa82a4d, 0x6d6b0abbbbd6bbb1, 0xe29f87c1c123c146, 0x02a6f153535153a2,
0x8ba572dcdc57dcae, 0x2716530b0b2c0b58, 0xd327019d9d4e9d9c, 0xc1d82b6c6cad6c47,
0xf562a43131c43195, 0xb9e8f37474cd7487, 0x09f115f6f6fff6e3, 0x438c4c464605460a,
0x2645a5acac8aac09, 0x970fb589891e893c, 0x4428b414145014a0, 0x42dfbae1e1a3e15b,
0x4e2ca616165816b0, 0xd274f73a3ae83acd, 0xd0d2066969b9696f, 0x2d12410909240948,
0xade0d77070dd70a7, 0x54716fb6b6e2b6d9, 0xb7bd1ed0d067d0ce, 0x7ec7d6eded93ed3b,
0xdb85e2cccc17cc2e, 0x578468424215422a, 0xc22d2c98985a98b4, 0x0e55eda4a4aaa449,
0x8850752828a0285d, 0x31b8865c5c6d5cda, 0x3fed6bf8f8c7f893, 0xa411c28686228644,
]
C4 = [
0xc07830d818186018, 0x05af462623238c23, 0x7ef991b8c6c63fc6, 0x136fcdfbe8e887e8,
0x4ca113cb87872687, 0xa9626d11b8b8dab8, 0x0805020901010401, 0x426e9e0d4f4f214f,
0xadee6c9b3636d836, 0x590451ffa6a6a2a6, 0xdebdb90cd2d26fd2, 0xfb06f70ef5f5f3f5,
0xef80f2967979f979, 0x5fcede306f6fa16f, 0xfcef3f6d91917e91, 0xaa07a4f852525552,
0x27fdc04760609d60, 0x89766535bcbccabc, 0xaccd2b379b9b569b, 0x048c018a8e8e028e,
0x71155bd2a3a3b6a3, 0x603c186c0c0c300c, 0xff8af6847b7bf17b, 0xb5e16a803535d435,
0xe8693af51d1d741d, 0x5347ddb3e0e0a7e0, 0xf6acb321d7d77bd7, 0x5eed999cc2c22fc2,
0x6d965c432e2eb82e, 0x627a96294b4b314b, 0xa321e15dfefedffe, 0x8216aed557574157,
0xa8412abd15155415, 0x9fb6eee87777c177, 0xa5eb6e923737dc37, 0x7b56d79ee5e5b3e5,
0x8cd923139f9f469f, 0xd317fd23f0f0e7f0, 0x6a7f94204a4a354a, 0x9e95a944dada4fda,
0xfa25b0a258587d58, 0x06ca8fcfc9c903c9, 0x558d527c2929a429, 0x5022145a0a0a280a,
0xe14f7f50b1b1feb1, 0x691a5dc9a0a0baa0, 0x7fdad6146b6bb16b, 0x5cab17d985852e85,
0x8173673cbdbdcebd, 0xd234ba8f5d5d695d, 0x8050209010104010, 0xf303f507f4f4f7f4,
0x16c08bddcbcb0bcb, 0xedc67cd33e3ef83e, 0x28110a2d05051405, 0x1fe6ce7867678167,
0x7353d597e4e4b7e4, 0x25bb4e0227279c27, 0x3258827341411941, 0x2c9d0ba78b8b168b,
0x510153f6a7a7a6a7, 0xcf94fab27d7de97d, 0xdcfb374995956e95, 0x8e9fad56d8d847d8,
0x8b30eb70fbfbcbfb, 0x2371c1cdeeee9fee, 0xc791f8bb7c7ced7c, 0x17e3cc7166668566,
0xa68ea77bdddd53dd, 0xb84b2eaf17175c17, 0x02468e4547470147, 0x84dc211a9e9e429e,
0x1ec589d4caca0fca, 0x75995a582d2db42d, 0x9179632ebfbfc6bf, 0x381b0e3f07071c07,
0x012347acadad8ead, 0xea2fb4b05a5a755a, 0x6cb51bef83833683, 0x85ff66b63333cc33,
0x3ff2c65c63639163, 0x100a041202020802, 0x39384993aaaa92aa, 0xafa8e2de7171d971,
0x0ecf8dc6c8c807c8, 0xc87d32d119196419, 0x7270923b49493949, 0x869aaf5fd9d943d9,
0xc31df931f2f2eff2, 0x4b48dba8e3e3abe3, 0xe22ab6b95b5b715b, 0x34920dbc88881a88,
0xa4c8293e9a9a529a, 0x2dbe4c0b26269826, 0x8dfa64bf3232c832, 0xe94a7d59b0b0fab0,
0x1b6acff2e9e983e9, 0x78331e770f0f3c0f, 0xe6a6b733d5d573d5, 0x74ba1df480803a80,
0x997c6127bebec2be, 0x26de87ebcdcd13cd, 0xbde468893434d034, 0x7a75903248483d48,
0xab24e354ffffdbff, 0xf78ff48d7a7af57a, 0xf4ea3d6490907a90, 0xc23ebe9d5f5f615f,
0x1da0403d20208020, 0x67d5d00f6868bd68, 0xd07234ca1a1a681a, 0x192c41b7aeae82ae,
0xc95e757db4b4eab4, 0x9a19a8ce54544d54, 0xece53b7f93937693, 0x0daa442f22228822,
0x07e9c86364648d64, 0xdb12ff2af1f1e3f1, 0xbfa2e6cc7373d173, 0x905a248212124812,
0x3a5d807a40401d40, 0x4028104808082008, 0x56e89b95c3c32bc3, 0x337bc5dfecec97ec,
0x9690ab4ddbdb4bdb, 0x611f5fc0a1a1bea1, 0x1c8307918d8d0e8d, 0xf5c97ac83d3df43d,
0xccf1335b97976697, 0x0000000000000000, 0x36d483f9cfcf1bcf, 0x4587566e2b2bac2b,
0x97b3ece17676c576, 0x64b019e682823282, 0xfea9b128d6d67fd6, 0xd87736c31b1b6c1b,
0xc15b7774b5b5eeb5, 0x112943beafaf86af, 0x77dfd41d6a6ab56a, 0xba0da0ea50505d50,
0x124c8a5745450945, 0xcb18fb38f3f3ebf3, 0x9df060ad3030c030, 0x2b74c3c4efef9bef,
0xe5c37eda3f3ffc3f, 0x921caac755554955, 0x791059dba2a2b2a2, 0x0365c9e9eaea8fea,
0x0fecca6a65658965, 0xb9686903babad2ba, 0x65935e4a2f2fbc2f, 0x4ee79d8ec0c027c0,
0xbe81a160dede5fde, 0xe06c38fc1c1c701c, 0xbb2ee746fdfdd3fd, 0x52649a1f4d4d294d,
0xe4e0397692927292, 0x8fbceafa7575c975, 0x301e0c3606061806, 0x249809ae8a8a128a,
0xf940794bb2b2f2b2, 0x6359d185e6e6bfe6, 0x70361c7e0e0e380e, 0xf8633ee71f1f7c1f,
0x37f7c45562629562, 0xeea3b53ad4d477d4, 0x29324d81a8a89aa8, 0xc4f4315296966296,
0x9b3aef62f9f9c3f9, 0x66f697a3c5c533c5, 0x35b14a1025259425, 0xf220b2ab59597959,
0x54ae15d084842a84, 0xb7a7e4c57272d572, 0xd5dd72ec3939e439, 0x5a6198164c4c2d4c,
0xca3bbc945e5e655e, 0xe785f09f7878fd78, 0xddd870e53838e038, 0x148605988c8c0a8c,
0xc6b2bf17d1d163d1, 0x410b57e4a5a5aea5, 0x434dd9a1e2e2afe2, 0x2ff8c24e61619961,
0xf1457b42b3b3f6b3, 0x15a5423421218421, 0x94d625089c9c4a9c, 0xf0663cee1e1e781e,
0x2252866143431143, 0x76fc93b1c7c73bc7, 0xb32be54ffcfcd7fc, 0x2014082404041004,
0xb208a2e351515951, 0xbcc72f2599995e99, 0x4fc4da226d6da96d, 0x68391a650d0d340d,
0x8335e979fafacffa, 0xb684a369dfdf5bdf, 0xd79bfca97e7ee57e, 0x3db4481924249024,
0xc5d776fe3b3bec3b, 0x313d4b9aabab96ab, 0x3ed181f0cece1fce, 0x8855229911114411,
0x0c8903838f8f068f, 0x4a6b9c044e4e254e, 0xd1517366b7b7e6b7, 0x0b60cbe0ebeb8beb,
0xfdcc78c13c3cf03c, 0x7cbf1ffd81813e81, 0xd4fe354094946a94, 0xeb0cf31cf7f7fbf7,
0xa1676f18b9b9deb9, 0x985f268b13134c13, 0x7d9c58512c2cb02c, 0xd6b8bb05d3d36bd3,
0x6b5cd38ce7e7bbe7, 0x57cbdc396e6ea56e, 0x6ef395aac4c437c4, 0x180f061b03030c03,
0x8a13acdc56564556, 0x1a49885e44440d44, 0xdf9efea07f7fe17f, 0x21374f88a9a99ea9,
0x4d8254672a2aa82a, 0xb16d6b0abbbbd6bb, 0x46e29f87c1c123c1, 0xa202a6f153535153,
0xae8ba572dcdc57dc, 0x582716530b0b2c0b, 0x9cd327019d9d4e9d, 0x47c1d82b6c6cad6c,
0x95f562a43131c431, 0x87b9e8f37474cd74, 0xe309f115f6f6fff6, 0x0a438c4c46460546,
0x092645a5acac8aac, 0x3c970fb589891e89, 0xa04428b414145014, 0x5b42dfbae1e1a3e1,
0xb04e2ca616165816, 0xcdd274f73a3ae83a, 0x6fd0d2066969b969, 0x482d124109092409,
0xa7ade0d77070dd70, 0xd954716fb6b6e2b6, 0xceb7bd1ed0d067d0, 0x3b7ec7d6eded93ed,
0x2edb85e2cccc17cc, 0x2a57846842421542, 0xb4c22d2c98985a98, 0x490e55eda4a4aaa4,
0x5d8850752828a028, 0xda31b8865c5c6d5c, 0x933fed6bf8f8c7f8, 0x44a411c286862286,
]
C5 = [
0x18c07830d8181860, 0x2305af462623238c, 0xc67ef991b8c6c63f, 0xe8136fcdfbe8e887,
0x874ca113cb878726, 0xb8a9626d11b8b8da, 0x0108050209010104, 0x4f426e9e0d4f4f21,
0x36adee6c9b3636d8, 0xa6590451ffa6a6a2, 0xd2debdb90cd2d26f, 0xf5fb06f70ef5f5f3,
0x79ef80f2967979f9, 0x6f5fcede306f6fa1, 0x91fcef3f6d91917e, 0x52aa07a4f8525255,
0x6027fdc04760609d, 0xbc89766535bcbcca, 0x9baccd2b379b9b56, 0x8e048c018a8e8e02,
0xa371155bd2a3a3b6, 0x0c603c186c0c0c30, 0x7bff8af6847b7bf1, 0x35b5e16a803535d4,
0x1de8693af51d1d74, 0xe05347ddb3e0e0a7, 0xd7f6acb321d7d77b, 0xc25eed999cc2c22f,
0x2e6d965c432e2eb8, 0x4b627a96294b4b31, 0xfea321e15dfefedf, 0x578216aed5575741,
0x15a8412abd151554, 0x779fb6eee87777c1, 0x37a5eb6e923737dc, 0xe57b56d79ee5e5b3,
0x9f8cd923139f9f46, 0xf0d317fd23f0f0e7, 0x4a6a7f94204a4a35, 0xda9e95a944dada4f,
0x58fa25b0a258587d, 0xc906ca8fcfc9c903, 0x29558d527c2929a4, 0x0a5022145a0a0a28,
0xb1e14f7f50b1b1fe, 0xa0691a5dc9a0a0ba, 0x6b7fdad6146b6bb1, 0x855cab17d985852e,
0xbd8173673cbdbdce, 0x5dd234ba8f5d5d69, 0x1080502090101040, 0xf4f303f507f4f4f7,
0xcb16c08bddcbcb0b, 0x3eedc67cd33e3ef8, 0x0528110a2d050514, 0x671fe6ce78676781,
0xe47353d597e4e4b7, 0x2725bb4e0227279c, 0x4132588273414119, 0x8b2c9d0ba78b8b16,
0xa7510153f6a7a7a6, 0x7dcf94fab27d7de9, 0x95dcfb374995956e, 0xd88e9fad56d8d847,
0xfb8b30eb70fbfbcb, 0xee2371c1cdeeee9f, 0x7cc791f8bb7c7ced, 0x6617e3cc71666685,
0xdda68ea77bdddd53, 0x17b84b2eaf17175c, 0x4702468e45474701, 0x9e84dc211a9e9e42,
0xca1ec589d4caca0f, 0x2d75995a582d2db4, 0xbf9179632ebfbfc6, 0x07381b0e3f07071c,
0xad012347acadad8e, 0x5aea2fb4b05a5a75, 0x836cb51bef838336, 0x3385ff66b63333cc,
0x633ff2c65c636391, 0x02100a0412020208, 0xaa39384993aaaa92, 0x71afa8e2de7171d9,
0xc80ecf8dc6c8c807, 0x19c87d32d1191964, 0x497270923b494939, 0xd9869aaf5fd9d943,
0xf2c31df931f2f2ef, 0xe34b48dba8e3e3ab, 0x5be22ab6b95b5b71, 0x8834920dbc88881a,
0x9aa4c8293e9a9a52, 0x262dbe4c0b262698, 0x328dfa64bf3232c8, 0xb0e94a7d59b0b0fa,
0xe91b6acff2e9e983, 0x0f78331e770f0f3c, 0xd5e6a6b733d5d573, 0x8074ba1df480803a,
0xbe997c6127bebec2, 0xcd26de87ebcdcd13, 0x34bde468893434d0, 0x487a75903248483d,
0xffab24e354ffffdb, 0x7af78ff48d7a7af5, 0x90f4ea3d6490907a, 0x5fc23ebe9d5f5f61,
0x201da0403d202080, 0x6867d5d00f6868bd, 0x1ad07234ca1a1a68, 0xae192c41b7aeae82,
0xb4c95e757db4b4ea, 0x549a19a8ce54544d, 0x93ece53b7f939376, 0x220daa442f222288,
0x6407e9c86364648d, 0xf1db12ff2af1f1e3, 0x73bfa2e6cc7373d1, 0x12905a2482121248,
0x403a5d807a40401d, 0x0840281048080820, 0xc356e89b95c3c32b, 0xec337bc5dfecec97,
0xdb9690ab4ddbdb4b, 0xa1611f5fc0a1a1be, 0x8d1c8307918d8d0e, 0x3df5c97ac83d3df4,
0x97ccf1335b979766, 0x0000000000000000, 0xcf36d483f9cfcf1b, 0x2b4587566e2b2bac,
0x7697b3ece17676c5, 0x8264b019e6828232, 0xd6fea9b128d6d67f, 0x1bd87736c31b1b6c,
0xb5c15b7774b5b5ee, 0xaf112943beafaf86, 0x6a77dfd41d6a6ab5, 0x50ba0da0ea50505d,
0x45124c8a57454509, 0xf3cb18fb38f3f3eb, 0x309df060ad3030c0, 0xef2b74c3c4efef9b,
0x3fe5c37eda3f3ffc, 0x55921caac7555549, 0xa2791059dba2a2b2, 0xea0365c9e9eaea8f,
0x650fecca6a656589, 0xbab9686903babad2, 0x2f65935e4a2f2fbc, 0xc04ee79d8ec0c027,
0xdebe81a160dede5f, 0x1ce06c38fc1c1c70, 0xfdbb2ee746fdfdd3, 0x4d52649a1f4d4d29,
0x92e4e03976929272, 0x758fbceafa7575c9, 0x06301e0c36060618, 0x8a249809ae8a8a12,
0xb2f940794bb2b2f2, 0xe66359d185e6e6bf, 0x0e70361c7e0e0e38, 0x1ff8633ee71f1f7c,
0x6237f7c455626295, 0xd4eea3b53ad4d477, 0xa829324d81a8a89a, 0x96c4f43152969662,
0xf99b3aef62f9f9c3, 0xc566f697a3c5c533, 0x2535b14a10252594, 0x59f220b2ab595979,
0x8454ae15d084842a, 0x72b7a7e4c57272d5, 0x39d5dd72ec3939e4, 0x4c5a6198164c4c2d,
0x5eca3bbc945e5e65, 0x78e785f09f7878fd, 0x38ddd870e53838e0, 0x8c148605988c8c0a,
0xd1c6b2bf17d1d163, 0xa5410b57e4a5a5ae, 0xe2434dd9a1e2e2af, 0x612ff8c24e616199,
0xb3f1457b42b3b3f6, 0x2115a54234212184, 0x9c94d625089c9c4a, 0x1ef0663cee1e1e78,
0x4322528661434311, 0xc776fc93b1c7c73b, 0xfcb32be54ffcfcd7, 0x0420140824040410,
0x51b208a2e3515159, 0x99bcc72f2599995e, 0x6d4fc4da226d6da9, 0x0d68391a650d0d34,
0xfa8335e979fafacf, 0xdfb684a369dfdf5b, 0x7ed79bfca97e7ee5, 0x243db44819242490,
0x3bc5d776fe3b3bec, 0xab313d4b9aabab96, 0xce3ed181f0cece1f, 0x1188552299111144,
0x8f0c8903838f8f06, 0x4e4a6b9c044e4e25, 0xb7d1517366b7b7e6, 0xeb0b60cbe0ebeb8b,
0x3cfdcc78c13c3cf0, 0x817cbf1ffd81813e, 0x94d4fe354094946a, 0xf7eb0cf31cf7f7fb,
0xb9a1676f18b9b9de, 0x13985f268b13134c, 0x2c7d9c58512c2cb0, 0xd3d6b8bb05d3d36b,
0xe76b5cd38ce7e7bb, 0x6e57cbdc396e6ea5, 0xc46ef395aac4c437, 0x03180f061b03030c,
0x568a13acdc565645, 0x441a49885e44440d, 0x7fdf9efea07f7fe1, 0xa921374f88a9a99e,
0x2a4d8254672a2aa8, 0xbbb16d6b0abbbbd6, 0xc146e29f87c1c123, 0x53a202a6f1535351,
0xdcae8ba572dcdc57, 0x0b582716530b0b2c, 0x9d9cd327019d9d4e, 0x6c47c1d82b6c6cad,
0x3195f562a43131c4, 0x7487b9e8f37474cd, 0xf6e309f115f6f6ff, 0x460a438c4c464605,
0xac092645a5acac8a, 0x893c970fb589891e, 0x14a04428b4141450, 0xe15b42dfbae1e1a3,
0x16b04e2ca6161658, 0x3acdd274f73a3ae8, 0x696fd0d2066969b9, 0x09482d1241090924,
0x70a7ade0d77070dd, 0xb6d954716fb6b6e2, 0xd0ceb7bd1ed0d067, 0xed3b7ec7d6eded93,
0xcc2edb85e2cccc17, 0x422a578468424215, 0x98b4c22d2c98985a, 0xa4490e55eda4a4aa,
0x285d8850752828a0, 0x5cda31b8865c5c6d, 0xf8933fed6bf8f8c7, 0x8644a411c2868622,
]
C6 = [
0x6018c07830d81818, 0x8c2305af46262323, 0x3fc67ef991b8c6c6, 0x87e8136fcdfbe8e8,
0x26874ca113cb8787, 0xdab8a9626d11b8b8, 0x0401080502090101, 0x214f426e9e0d4f4f,
0xd836adee6c9b3636, 0xa2a6590451ffa6a6, 0x6fd2debdb90cd2d2, 0xf3f5fb06f70ef5f5,
0xf979ef80f2967979, 0xa16f5fcede306f6f, 0x7e91fcef3f6d9191, 0x5552aa07a4f85252,
0x9d6027fdc0476060, 0xcabc89766535bcbc, 0x569baccd2b379b9b, 0x028e048c018a8e8e,
0xb6a371155bd2a3a3, 0x300c603c186c0c0c, 0xf17bff8af6847b7b, 0xd435b5e16a803535,
0x741de8693af51d1d, 0xa7e05347ddb3e0e0, 0x7bd7f6acb321d7d7, 0x2fc25eed999cc2c2,
0xb82e6d965c432e2e, 0x314b627a96294b4b, 0xdffea321e15dfefe, 0x41578216aed55757,
0x5415a8412abd1515, 0xc1779fb6eee87777, 0xdc37a5eb6e923737, 0xb3e57b56d79ee5e5,
0x469f8cd923139f9f, 0xe7f0d317fd23f0f0, 0x354a6a7f94204a4a, 0x4fda9e95a944dada,
0x7d58fa25b0a25858, 0x03c906ca8fcfc9c9, 0xa429558d527c2929, 0x280a5022145a0a0a,
0xfeb1e14f7f50b1b1, 0xbaa0691a5dc9a0a0, 0xb16b7fdad6146b6b, 0x2e855cab17d98585,
0xcebd8173673cbdbd, 0x695dd234ba8f5d5d, 0x4010805020901010, 0xf7f4f303f507f4f4,
0x0bcb16c08bddcbcb, 0xf83eedc67cd33e3e, 0x140528110a2d0505, 0x81671fe6ce786767,
0xb7e47353d597e4e4, 0x9c2725bb4e022727, 0x1941325882734141, 0x168b2c9d0ba78b8b,
0xa6a7510153f6a7a7, 0xe97dcf94fab27d7d, 0x6e95dcfb37499595, 0x47d88e9fad56d8d8,
0xcbfb8b30eb70fbfb, 0x9fee2371c1cdeeee, 0xed7cc791f8bb7c7c, 0x856617e3cc716666,
0x53dda68ea77bdddd, 0x5c17b84b2eaf1717, 0x014702468e454747, 0x429e84dc211a9e9e,
0x0fca1ec589d4caca, 0xb42d75995a582d2d, 0xc6bf9179632ebfbf, 0x1c07381b0e3f0707,
0x8ead012347acadad, 0x755aea2fb4b05a5a, 0x36836cb51bef8383, 0xcc3385ff66b63333,
0x91633ff2c65c6363, 0x0802100a04120202, 0x92aa39384993aaaa, 0xd971afa8e2de7171,
0x07c80ecf8dc6c8c8, 0x6419c87d32d11919, 0x39497270923b4949, 0x43d9869aaf5fd9d9,
0xeff2c31df931f2f2, 0xabe34b48dba8e3e3, 0x715be22ab6b95b5b, 0x1a8834920dbc8888,
0x529aa4c8293e9a9a, 0x98262dbe4c0b2626, 0xc8328dfa64bf3232, 0xfab0e94a7d59b0b0,
0x83e91b6acff2e9e9, 0x3c0f78331e770f0f, 0x73d5e6a6b733d5d5, 0x3a8074ba1df48080,
0xc2be997c6127bebe, 0x13cd26de87ebcdcd, 0xd034bde468893434, 0x3d487a7590324848,
0xdbffab24e354ffff, 0xf57af78ff48d7a7a, 0x7a90f4ea3d649090, 0x615fc23ebe9d5f5f,
0x80201da0403d2020, 0xbd6867d5d00f6868, 0x681ad07234ca1a1a, 0x82ae192c41b7aeae,
0xeab4c95e757db4b4, 0x4d549a19a8ce5454, 0x7693ece53b7f9393, 0x88220daa442f2222,
0x8d6407e9c8636464, 0xe3f1db12ff2af1f1, 0xd173bfa2e6cc7373, 0x4812905a24821212,
0x1d403a5d807a4040, 0x2008402810480808, 0x2bc356e89b95c3c3, 0x97ec337bc5dfecec,
0x4bdb9690ab4ddbdb, 0xbea1611f5fc0a1a1, 0x0e8d1c8307918d8d, 0xf43df5c97ac83d3d,
0x6697ccf1335b9797, 0x0000000000000000, 0x1bcf36d483f9cfcf, 0xac2b4587566e2b2b,
0xc57697b3ece17676, 0x328264b019e68282, 0x7fd6fea9b128d6d6, 0x6c1bd87736c31b1b,
0xeeb5c15b7774b5b5, 0x86af112943beafaf, 0xb56a77dfd41d6a6a, 0x5d50ba0da0ea5050,
0x0945124c8a574545, 0xebf3cb18fb38f3f3, 0xc0309df060ad3030, 0x9bef2b74c3c4efef,
0xfc3fe5c37eda3f3f, 0x4955921caac75555, 0xb2a2791059dba2a2, 0x8fea0365c9e9eaea,
0x89650fecca6a6565, 0xd2bab9686903baba, 0xbc2f65935e4a2f2f, 0x27c04ee79d8ec0c0,
0x5fdebe81a160dede, 0x701ce06c38fc1c1c, 0xd3fdbb2ee746fdfd, 0x294d52649a1f4d4d,
0x7292e4e039769292, 0xc9758fbceafa7575, 0x1806301e0c360606, 0x128a249809ae8a8a,
0xf2b2f940794bb2b2, 0xbfe66359d185e6e6, 0x380e70361c7e0e0e, 0x7c1ff8633ee71f1f,
0x956237f7c4556262, 0x77d4eea3b53ad4d4, 0x9aa829324d81a8a8, 0x6296c4f431529696,
0xc3f99b3aef62f9f9, 0x33c566f697a3c5c5, 0x942535b14a102525, 0x7959f220b2ab5959,
0x2a8454ae15d08484, 0xd572b7a7e4c57272, 0xe439d5dd72ec3939, 0x2d4c5a6198164c4c,
0x655eca3bbc945e5e, 0xfd78e785f09f7878, 0xe038ddd870e53838, 0x0a8c148605988c8c,
0x63d1c6b2bf17d1d1, 0xaea5410b57e4a5a5, 0xafe2434dd9a1e2e2, 0x99612ff8c24e6161,
0xf6b3f1457b42b3b3, 0x842115a542342121, 0x4a9c94d625089c9c, 0x781ef0663cee1e1e,
0x1143225286614343, 0x3bc776fc93b1c7c7, 0xd7fcb32be54ffcfc, 0x1004201408240404,
0x5951b208a2e35151, 0x5e99bcc72f259999, 0xa96d4fc4da226d6d, 0x340d68391a650d0d,
0xcffa8335e979fafa, 0x5bdfb684a369dfdf, 0xe57ed79bfca97e7e, 0x90243db448192424,
0xec3bc5d776fe3b3b, 0x96ab313d4b9aabab, 0x1fce3ed181f0cece, 0x4411885522991111,
0x068f0c8903838f8f, 0x254e4a6b9c044e4e, 0xe6b7d1517366b7b7, 0x8beb0b60cbe0ebeb,
0xf03cfdcc78c13c3c, 0x3e817cbf1ffd8181, 0x6a94d4fe35409494, 0xfbf7eb0cf31cf7f7,
0xdeb9a1676f18b9b9, 0x4c13985f268b1313, 0xb02c7d9c58512c2c, 0x6bd3d6b8bb05d3d3,
0xbbe76b5cd38ce7e7, 0xa56e57cbdc396e6e, 0x37c46ef395aac4c4, 0x0c03180f061b0303,
0x45568a13acdc5656, 0x0d441a49885e4444, 0xe17fdf9efea07f7f, 0x9ea921374f88a9a9,
0xa82a4d8254672a2a, 0xd6bbb16d6b0abbbb, 0x23c146e29f87c1c1, 0x5153a202a6f15353,
0x57dcae8ba572dcdc, 0x2c0b582716530b0b, 0x4e9d9cd327019d9d, 0xad6c47c1d82b6c6c,
0xc43195f562a43131, 0xcd7487b9e8f37474, 0xfff6e309f115f6f6, 0x05460a438c4c4646,
0x8aac092645a5acac, 0x1e893c970fb58989, 0x5014a04428b41414, 0xa3e15b42dfbae1e1,
0x5816b04e2ca61616, 0xe83acdd274f73a3a, 0xb9696fd0d2066969, 0x2409482d12410909,
0xdd70a7ade0d77070, 0xe2b6d954716fb6b6, 0x67d0ceb7bd1ed0d0, 0x93ed3b7ec7d6eded,
0x17cc2edb85e2cccc, 0x15422a5784684242, 0x5a98b4c22d2c9898, 0xaaa4490e55eda4a4,
0xa0285d8850752828, 0x6d5cda31b8865c5c, 0xc7f8933fed6bf8f8, 0x228644a411c28686,
]
C7 = [
0x186018c07830d818, 0x238c2305af462623, 0xc63fc67ef991b8c6, 0xe887e8136fcdfbe8,
0x8726874ca113cb87, 0xb8dab8a9626d11b8, 0x0104010805020901, 0x4f214f426e9e0d4f,
0x36d836adee6c9b36, 0xa6a2a6590451ffa6, 0xd26fd2debdb90cd2, 0xf5f3f5fb06f70ef5,
0x79f979ef80f29679, 0x6fa16f5fcede306f, 0x917e91fcef3f6d91, 0x525552aa07a4f852,
0x609d6027fdc04760, 0xbccabc89766535bc, 0x9b569baccd2b379b, 0x8e028e048c018a8e,
0xa3b6a371155bd2a3, 0x0c300c603c186c0c, 0x7bf17bff8af6847b, 0x35d435b5e16a8035,
0x1d741de8693af51d, 0xe0a7e05347ddb3e0, 0xd77bd7f6acb321d7, 0xc22fc25eed999cc2,
0x2eb82e6d965c432e, 0x4b314b627a96294b, 0xfedffea321e15dfe, 0x5741578216aed557,
0x155415a8412abd15, 0x77c1779fb6eee877, 0x37dc37a5eb6e9237, 0xe5b3e57b56d79ee5,
0x9f469f8cd923139f, 0xf0e7f0d317fd23f0, 0x4a354a6a7f94204a, 0xda4fda9e95a944da,
0x587d58fa25b0a258, 0xc903c906ca8fcfc9, 0x29a429558d527c29, 0x0a280a5022145a0a,
0xb1feb1e14f7f50b1, 0xa0baa0691a5dc9a0, 0x6bb16b7fdad6146b, 0x852e855cab17d985,
0xbdcebd8173673cbd, 0x5d695dd234ba8f5d, 0x1040108050209010, 0xf4f7f4f303f507f4,
0xcb0bcb16c08bddcb, 0x3ef83eedc67cd33e, 0x05140528110a2d05, 0x6781671fe6ce7867,
0xe4b7e47353d597e4, 0x279c2725bb4e0227, 0x4119413258827341, 0x8b168b2c9d0ba78b,
0xa7a6a7510153f6a7, 0x7de97dcf94fab27d, 0x956e95dcfb374995, 0xd847d88e9fad56d8,
0xfbcbfb8b30eb70fb, 0xee9fee2371c1cdee, 0x7ced7cc791f8bb7c, 0x66856617e3cc7166,
0xdd53dda68ea77bdd, 0x175c17b84b2eaf17, 0x47014702468e4547, 0x9e429e84dc211a9e,
0xca0fca1ec589d4ca, 0x2db42d75995a582d, 0xbfc6bf9179632ebf, 0x071c07381b0e3f07,
0xad8ead012347acad, 0x5a755aea2fb4b05a, 0x8336836cb51bef83, 0x33cc3385ff66b633,
0x6391633ff2c65c63, 0x020802100a041202, 0xaa92aa39384993aa, 0x71d971afa8e2de71,
0xc807c80ecf8dc6c8, 0x196419c87d32d119, 0x4939497270923b49, 0xd943d9869aaf5fd9,
0xf2eff2c31df931f2, 0xe3abe34b48dba8e3, 0x5b715be22ab6b95b, 0x881a8834920dbc88,
0x9a529aa4c8293e9a, 0x2698262dbe4c0b26, 0x32c8328dfa64bf32, 0xb0fab0e94a7d59b0,
0xe983e91b6acff2e9, 0x0f3c0f78331e770f, 0xd573d5e6a6b733d5, 0x803a8074ba1df480,
0xbec2be997c6127be, 0xcd13cd26de87ebcd, 0x34d034bde4688934, 0x483d487a75903248,
0xffdbffab24e354ff, 0x7af57af78ff48d7a, 0x907a90f4ea3d6490, 0x5f615fc23ebe9d5f,
0x2080201da0403d20, 0x68bd6867d5d00f68, 0x1a681ad07234ca1a, 0xae82ae192c41b7ae,
0xb4eab4c95e757db4, 0x544d549a19a8ce54, 0x937693ece53b7f93, 0x2288220daa442f22,
0x648d6407e9c86364, 0xf1e3f1db12ff2af1, 0x73d173bfa2e6cc73, 0x124812905a248212,
0x401d403a5d807a40, 0x0820084028104808, 0xc32bc356e89b95c3, 0xec97ec337bc5dfec,
0xdb4bdb9690ab4ddb, 0xa1bea1611f5fc0a1, 0x8d0e8d1c8307918d, 0x3df43df5c97ac83d,
0x976697ccf1335b97, 0x0000000000000000, 0xcf1bcf36d483f9cf, 0x2bac2b4587566e2b,
0x76c57697b3ece176, 0x82328264b019e682, 0xd67fd6fea9b128d6, 0x1b6c1bd87736c31b,
0xb5eeb5c15b7774b5, 0xaf86af112943beaf, 0x6ab56a77dfd41d6a, 0x505d50ba0da0ea50,
0x450945124c8a5745, 0xf3ebf3cb18fb38f3, 0x30c0309df060ad30, 0xef9bef2b74c3c4ef,
0x3ffc3fe5c37eda3f, 0x554955921caac755, 0xa2b2a2791059dba2, 0xea8fea0365c9e9ea,
0x6589650fecca6a65, 0xbad2bab9686903ba, 0x2fbc2f65935e4a2f, 0xc027c04ee79d8ec0,
0xde5fdebe81a160de, 0x1c701ce06c38fc1c, 0xfdd3fdbb2ee746fd, 0x4d294d52649a1f4d,
0x927292e4e0397692, 0x75c9758fbceafa75, 0x061806301e0c3606, 0x8a128a249809ae8a,
0xb2f2b2f940794bb2, 0xe6bfe66359d185e6, 0x0e380e70361c7e0e, 0x1f7c1ff8633ee71f,
0x62956237f7c45562, 0xd477d4eea3b53ad4, 0xa89aa829324d81a8, 0x966296c4f4315296,
0xf9c3f99b3aef62f9, 0xc533c566f697a3c5, 0x25942535b14a1025, 0x597959f220b2ab59,
0x842a8454ae15d084, 0x72d572b7a7e4c572, 0x39e439d5dd72ec39, 0x4c2d4c5a6198164c,
0x5e655eca3bbc945e, 0x78fd78e785f09f78, 0x38e038ddd870e538, 0x8c0a8c148605988c,
0xd163d1c6b2bf17d1, 0xa5aea5410b57e4a5, 0xe2afe2434dd9a1e2, 0x6199612ff8c24e61,
0xb3f6b3f1457b42b3, 0x21842115a5423421, 0x9c4a9c94d625089c, 0x1e781ef0663cee1e,
0x4311432252866143, 0xc73bc776fc93b1c7, 0xfcd7fcb32be54ffc, 0x0410042014082404,
0x515951b208a2e351, 0x995e99bcc72f2599, 0x6da96d4fc4da226d, 0x0d340d68391a650d,
0xfacffa8335e979fa, 0xdf5bdfb684a369df, 0x7ee57ed79bfca97e, 0x2490243db4481924,
0x3bec3bc5d776fe3b, 0xab96ab313d4b9aab, 0xce1fce3ed181f0ce, 0x1144118855229911,
0x8f068f0c8903838f, 0x4e254e4a6b9c044e, 0xb7e6b7d1517366b7, 0xeb8beb0b60cbe0eb,
0x3cf03cfdcc78c13c, 0x813e817cbf1ffd81, 0x946a94d4fe354094, 0xf7fbf7eb0cf31cf7,
0xb9deb9a1676f18b9, 0x134c13985f268b13, 0x2cb02c7d9c58512c, 0xd36bd3d6b8bb05d3,
0xe7bbe76b5cd38ce7, 0x6ea56e57cbdc396e, 0xc437c46ef395aac4, 0x030c03180f061b03,
0x5645568a13acdc56, 0x440d441a49885e44, 0x7fe17fdf9efea07f, 0xa99ea921374f88a9,
0x2aa82a4d8254672a, 0xbbd6bbb16d6b0abb, 0xc123c146e29f87c1, 0x535153a202a6f153,
0xdc57dcae8ba572dc, 0x0b2c0b582716530b, 0x9d4e9d9cd327019d, 0x6cad6c47c1d82b6c,
0x31c43195f562a431, 0x74cd7487b9e8f374, 0xf6fff6e309f115f6, 0x4605460a438c4c46,
0xac8aac092645a5ac, 0x891e893c970fb589, 0x145014a04428b414, 0xe1a3e15b42dfbae1,
0x165816b04e2ca616, 0x3ae83acdd274f73a, 0x69b9696fd0d20669, 0x092409482d124109,
0x70dd70a7ade0d770, 0xb6e2b6d954716fb6, 0xd067d0ceb7bd1ed0, 0xed93ed3b7ec7d6ed,
0xcc17cc2edb85e2cc, 0x4215422a57846842, 0x985a98b4c22d2c98, 0xa4aaa4490e55eda4,
0x28a0285d88507528, 0x5c6d5cda31b8865c, 0xf8c7f8933fed6bf8, 0x86228644a411c286,
]
 
rc = [
0x0000000000000000,
0x1823c6e887b8014f,
0x36a6d2f5796f9152,
0x60bc9b8ea30c7b35,
0x1de0d7c22e4bfe57,
0x157737e59ff04ada,
0x58c9290ab1a06b85,
0xbd5d10f4cb3e0567,
0xe427418ba77d95d8,
0xfbee7c66dd17479e,
0xca2dbf07ad5a8333
]
 
DIGESTBYTES = 64
class WhirlpoolStruct:
def __init__(self):
self.bitLength = [0]*32
self.buffer = [0]*64
self.bufferBits = 0
self.bufferPos = 0
self.hash = [0]*8
 
def WhirlpoolInit(ctx):
ctx = WhirlpoolStruct()
return
 
def WhirlpoolAdd(source, sourceBits, ctx):
source = [ord(s)&0xff for s in source]
carry = 0
value = sourceBits
i = 31
while i >= 0 and value != 0:
carry += ctx.bitLength[i] + ((value % 0x100000000) & 0xff)
ctx.bitLength[i] = carry % 0x100
carry >>= 8
value >>= 8
i -= 1
 
bufferBits = ctx.bufferBits
bufferPos = ctx.bufferPos
sourcePos = 0
sourceGap = (8 - (sourceBits & 7)) & 7
bufferRem = ctx.bufferBits & 7
buffr = ctx.buffer
while sourceBits > 8:
b = ((source[sourcePos] << sourceGap) & 0xff) | ((source[sourcePos + 1] & 0xff) >> (8 - sourceGap))
buffr[bufferPos] |= (b >> bufferRem) % 0x100
bufferPos += 1
bufferBits += 8 - bufferRem
if bufferBits == 512:
processBuffer(ctx)
bufferBits = 0
bufferPos = 0
 
buffr[bufferPos] = b << (8 - bufferRem)
bufferBits += bufferRem
sourceBits -= 8
sourcePos += 1
 
b = (source[sourcePos] << sourceGap) & 0xff
buffr[bufferPos] |= b >> bufferRem
if bufferRem + sourceBits < 8:
bufferBits += sourceBits
else:
bufferPos += 1
bufferBits += 8 - bufferRem
sourceBits -= 8 - bufferRem
if bufferBits == 512:
processBuffer(ctx)
bufferBits = 0
bufferPos = 0
buffr[bufferPos] = b << (8 - bufferRem)
bufferBits += sourceBits
ctx.bufferBits = bufferBits
ctx.bufferPos = bufferPos
 
def WhirlpoolFinalize(ctx):
bufferPos = ctx.bufferPos
ctx.buffer[bufferPos] |= 0x80 >> (ctx.bufferBits & 7)
bufferPos += 1
if bufferPos > 32:
if bufferPos < 64:
for i in xrange(64 - bufferPos):
ctx.buffer[bufferPos+i] = 0
processBuffer(ctx)
bufferPos = 0
if bufferPos < 32:
for i in xrange(32 - bufferPos):
ctx.buffer[bufferPos+i] = 0
bufferPos = 32
for i in xrange(32):
ctx.buffer[32+i] = ctx.bitLength[i]
processBuffer(ctx)
digest = ''
for i in xrange(8):
digest += chr((ctx.hash[i] >> 56) % 0x100)
digest += chr((ctx.hash[i] >> 48) % 0x100)
digest += chr((ctx.hash[i] >> 40) % 0x100)
digest += chr((ctx.hash[i] >> 32) % 0x100)
digest += chr((ctx.hash[i] >> 24) % 0x100)
digest += chr((ctx.hash[i] >> 16) % 0x100)
digest += chr((ctx.hash[i] >> 8) % 0x100)
digest += chr((ctx.hash[i]) % 0x100)
ctx.bufferPos = bufferPos
return digest
 
def CDo(buf, a0, a1, a2, a3, a4, a5, a6, a7):
return C0[((buf[a0] >> 56) % 0x100000000) & 0xff] ^ \
C1[((buf[a1] >> 48) % 0x100000000) & 0xff] ^ \
C2[((buf[a2] >> 40) % 0x100000000) & 0xff] ^ \
C3[((buf[a3] >> 32) % 0x100000000) & 0xff] ^ \
C4[((buf[a4] >> 24) % 0x100000000) & 0xff] ^ \
C5[((buf[a5] >> 16) % 0x100000000) & 0xff] ^ \
C6[((buf[a6] >> 8) % 0x100000000) & 0xff] ^ \
C7[((buf[a7] >> 0) % 0x100000000) & 0xff]
 
def processBuffer(ctx):
i, r = 0, 0
K = [0]*8
block = [0]*8
state = [0]*8
L = [0]*8
buffr = ctx.buffer
 
buf_cnt = 0
for i in xrange(8):
block[i] = ((buffr[buf_cnt+0] & 0xff) << 56) ^ \
((buffr[buf_cnt+1] & 0xff) << 48) ^ \
((buffr[buf_cnt+2] & 0xff) << 40) ^ \
((buffr[buf_cnt+3] & 0xff) << 32) ^ \
((buffr[buf_cnt+4] & 0xff) << 24) ^ \
((buffr[buf_cnt+5] & 0xff) << 16) ^ \
((buffr[buf_cnt+6] & 0xff) << 8) ^ \
((buffr[buf_cnt+7] & 0xff) << 0)
buf_cnt += 8
for i in xrange(8):
K[i] = ctx.hash[i]
state[i] = block[i] ^ K[i]
for r in xrange(1, R+1):
L[0] = CDo(K, 0, 7, 6, 5, 4, 3, 2, 1) ^ rc[r]
L[1] = CDo(K, 1, 0, 7, 6, 5, 4, 3, 2)
L[2] = CDo(K, 2, 1, 0, 7, 6, 5, 4, 3)
L[3] = CDo(K, 3, 2, 1, 0, 7, 6, 5, 4)
L[4] = CDo(K, 4, 3, 2, 1, 0, 7, 6, 5)
L[5] = CDo(K, 5, 4, 3, 2, 1, 0, 7, 6)
L[6] = CDo(K, 6, 5, 4, 3, 2, 1, 0, 7)
L[7] = CDo(K, 7, 6, 5, 4, 3, 2, 1, 0)
for i in xrange(8):
K[i] = L[i]
L[0] = CDo(state, 0, 7, 6, 5, 4, 3, 2, 1) ^ K[0]
L[1] = CDo(state, 1, 0, 7, 6, 5, 4, 3, 2) ^ K[1]
L[2] = CDo(state, 2, 1, 0, 7, 6, 5, 4, 3) ^ K[2]
L[3] = CDo(state, 3, 2, 1, 0, 7, 6, 5, 4) ^ K[3]
L[4] = CDo(state, 4, 3, 2, 1, 0, 7, 6, 5) ^ K[4]
L[5] = CDo(state, 5, 4, 3, 2, 1, 0, 7, 6) ^ K[5]
L[6] = CDo(state, 6, 5, 4, 3, 2, 1, 0, 7) ^ K[6]
L[7] = CDo(state, 7, 6, 5, 4, 3, 2, 1, 0) ^ K[7]
for i in xrange(8):
state[i] = L[i]
# apply the Miyaguchi-Preneel compression function
for i in xrange(8):
ctx.hash[i] ^= state[i] ^ block[i]
return
 
#
# Tests.
#
 
assert Whirlpool('The quick brown fox jumps over the lazy dog').hexdigest() == \
'b97de512e91e3828b40d2b0fdce9ceb3c4a71f9bea8d88e75c4fa854df36725fd2b52eb6544edcacd6f8beddfea403cb55ae31f03ad62a5ef54e42ee82c3fb35'
assert Whirlpool('The quick brown fox jumps over the lazy eog').hexdigest() == \
'c27ba124205f72e6847f3e19834f925cc666d0974167af915bb462420ed40cc50900d85a1f923219d832357750492d5c143011a76988344c2635e69d06f2d38c'
assert Whirlpool('').hexdigest() == \
'19fa61d75522a4669b44e39c1d2e1726c530232130d407f89afee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964e59b63d93708b138cc42a66eb3'
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/__init__.py
0,0 → 1,9
from pkg_resources import parse_version
import Crypto
__all__ = ["Cipher","PublicKey","Util","Protocol","Hash","testvectors","SelfTest"]
 
if parse_version(Crypto.__version__) > parse_version("2.0.1"):
__all__.append("Random")
 
#del parse_version
#del Crypto
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Protocol.py
0,0 → 1,10
"""Imports Crypto Protocol
 
Now you can do:
>>> from CryptoPlus.Protocol import *
OR:
>>> from CryptoPlus.Protocol import XXX
but not:
>>> import CryptoPlus.Protocol.XXX
"""
from Crypto.Protocol import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_HMAC.py
0,0 → 1,194
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/HMAC.py: Self-test for the HMAC module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.HMAC"""
 
__revision__ = "$Id$"
 
from common import dict # For compatibility with Python 2.1 and 2.2
 
# This is a list of (key, data, results, description) tuples.
test_data = [
## Test vectors from RFC 2202 ##
# Test that the default hashmod is MD5
('0b' * 16,
'4869205468657265',
dict(default='9294727a3638bb1c13f48ef8158bfc9d'),
'default-is-MD5'),
 
# Test case 1 (MD5)
('0b' * 16,
'4869205468657265',
dict(MD5='9294727a3638bb1c13f48ef8158bfc9d'),
'RFC 2202 #1-MD5 (HMAC-MD5)'),
 
# Test case 1 (SHA1)
('0b' * 20,
'4869205468657265',
dict(SHA1='b617318655057264e28bc0b6fb378c8ef146be00'),
'RFC 2202 #1-SHA1 (HMAC-SHA1)'),
 
# Test case 2
('4a656665',
'7768617420646f2079612077616e7420666f72206e6f7468696e673f',
dict(MD5='750c783e6ab0b503eaa86e310a5db738',
SHA1='effcdf6ae5eb2fa2d27416d5f184df9c259a7c79'),
'RFC 2202 #2 (HMAC-MD5/SHA1)'),
 
# Test case 3 (MD5)
('aa' * 16,
'dd' * 50,
dict(MD5='56be34521d144c88dbb8c733f0e8b3f6'),
'RFC 2202 #3-MD5 (HMAC-MD5)'),
 
# Test case 3 (SHA1)
('aa' * 20,
'dd' * 50,
dict(SHA1='125d7342b9ac11cd91a39af48aa17b4f63f175d3'),
'RFC 2202 #3-SHA1 (HMAC-SHA1)'),
 
# Test case 4
('0102030405060708090a0b0c0d0e0f10111213141516171819',
'cd' * 50,
dict(MD5='697eaf0aca3a3aea3a75164746ffaa79',
SHA1='4c9007f4026250c6bc8414f9bf50c86c2d7235da'),
'RFC 2202 #4 (HMAC-MD5/SHA1)'),
 
# Test case 5 (MD5)
('0c' * 16,
'546573742057697468205472756e636174696f6e',
dict(MD5='56461ef2342edc00f9bab995690efd4c'),
'RFC 2202 #5-MD5 (HMAC-MD5)'),
 
# Test case 5 (SHA1)
# NB: We do not implement hash truncation, so we only test the full hash here.
('0c' * 20,
'546573742057697468205472756e636174696f6e',
dict(SHA1='4c1a03424b55e07fe7f27be1d58bb9324a9a5a04'),
'RFC 2202 #5-SHA1 (HMAC-SHA1)'),
 
# Test case 6
('aa' * 80,
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a'
+ '65204b6579202d2048617368204b6579204669727374',
dict(MD5='6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd',
SHA1='aa4ae5e15272d00e95705637ce8a3b55ed402112'),
'RFC 2202 #6 (HMAC-MD5/SHA1)'),
 
# Test case 7
('aa' * 80,
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a'
+ '65204b657920616e64204c6172676572205468616e204f6e6520426c6f636b2d'
+ '53697a652044617461',
dict(MD5='6f630fad67cda0ee1fb1f562db3aa53e',
SHA1='e8e99d0f45237d786d6bbaa7965c7808bbff1a91'),
'RFC 2202 #7 (HMAC-MD5/SHA1)'),
 
## Test vectors from RFC 4231 ##
# 4.2. Test Case 1
('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b',
'4869205468657265',
dict(SHA256='''
b0344c61d8db38535ca8afceaf0bf12b
881dc200c9833da726e9376c2e32cff7
'''),
'RFC 4231 #1 (HMAC-SHA256)'),
 
# 4.3. Test Case 2 - Test with a key shorter than the length of the HMAC
# output.
('4a656665',
'7768617420646f2079612077616e7420666f72206e6f7468696e673f',
dict(SHA256='''
5bdcc146bf60754e6a042426089575c7
5a003f089d2739839dec58b964ec3843
'''),
'RFC 4231 #2 (HMAC-SHA256)'),
 
# 4.4. Test Case 3 - Test with a combined length of key and data that is
# larger than 64 bytes (= block-size of SHA-224 and SHA-256).
('aa' * 20,
'dd' * 50,
dict(SHA256='''
773ea91e36800e46854db8ebd09181a7
2959098b3ef8c122d9635514ced565fe
'''),
'RFC 4231 #3 (HMAC-SHA256)'),
 
# 4.5. Test Case 4 - Test with a combined length of key and data that is
# larger than 64 bytes (= block-size of SHA-224 and SHA-256).
('0102030405060708090a0b0c0d0e0f10111213141516171819',
'cd' * 50,
dict(SHA256='''
82558a389a443c0ea4cc819899f2083a
85f0faa3e578f8077a2e3ff46729665b
'''),
'RFC 4231 #4 (HMAC-SHA256)'),
 
# 4.6. Test Case 5 - Test with a truncation of output to 128 bits.
#
# Not included because we do not implement hash truncation.
#
 
# 4.7. Test Case 6 - Test with a key larger than 128 bytes (= block-size of
# SHA-384 and SHA-512).
('aa' * 131,
'54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a'
+ '65204b6579202d2048617368204b6579204669727374',
dict(SHA256='''
60e431591ee0b67f0d8a26aacbf5b77f
8e0bc6213728c5140546040f0ee37f54
'''),
'RFC 4231 #6 (HMAC-SHA256)'),
 
# 4.8. Test Case 7 - Test with a key and data that is larger than 128 bytes
# (= block-size of SHA-384 and SHA-512).
('aa' * 131,
'5468697320697320612074657374207573696e672061206c6172676572207468'
+ '616e20626c6f636b2d73697a65206b657920616e642061206c61726765722074'
+ '68616e20626c6f636b2d73697a6520646174612e20546865206b6579206e6565'
+ '647320746f20626520686173686564206265666f7265206265696e6720757365'
+ '642062792074686520484d414320616c676f726974686d2e',
dict(SHA256='''
9b09ffa71b942fcb27635fbcd5b0e944
bfdc63644f0713938a7f51535c3a35e2
'''),
'RFC 4231 #7 (HMAC-SHA256)'),
]
 
def get_tests():
from CryptoPlus.Hash import HMAC, MD5, SHA as SHA1, SHA256
from common import make_mac_tests
hashmods = dict(MD5=MD5, SHA1=SHA1, SHA256=SHA256, default=None)
return make_mac_tests(HMAC, "HMAC", test_data, hashmods)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_SHA256.py
0,0 → 1,65
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/SHA256.py: Self-test for the SHA-256 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHA256LL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.SHA256"""
 
__revision__ = "$Id$"
 
# Test vectors from FIPS PUB 180-2
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# FIPS PUB 180-2, B.1 - "One-Block Message"
('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad',
'abc'),
 
# FIPS PUB 180-2, B.2 - "Multi-Block Message"
('248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1',
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'),
 
# FIPS PUB 180-2, B.3 - "Long Message"
# ('cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0',
# 'a' * 10**6,
# '"a" * 10**6'),
 
# Test for an old PyCryptoPlus bug.
('f7fd017a3c721ce7ff03f3552c0813adcc48b7f33f07e5e2ba71e23ea393d103',
'This message is precisely 55 bytes long, to test a bug.',
'Length = 55 (mod 64)'),
]
 
def get_tests():
from CryptoPlus.Hash import SHA256
from common import make_hash_tests
return make_hash_tests(SHA256, "SHA256", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/common.py
0,0 → 1,145
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/common.py: Common code for CryptoPlus.SelfTest.Hash
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-testing for PyCryptoPlus hash modules"""
 
__revision__ = "$Id$"
 
import sys
import unittest
import binascii
import string
 
# For compatibility with Python 2.1 and Python 2.2
if sys.hexversion < 0x02030000:
# Python 2.1 doesn't have a dict() function
# Python 2.2 dict() function raises TypeError if you do dict(MD5='blah')
def dict(**kwargs):
return kwargs.copy()
else:
dict = __builtins__['dict']
 
 
class HashSelfTest(unittest.TestCase):
 
def __init__(self, hashmod, description, expected, input):
unittest.TestCase.__init__(self)
self.hashmod = hashmod
self.expected = expected
self.input = input
self.description = description
 
def shortDescription(self):
return self.description
 
def runTest(self):
h = self.hashmod.new()
h.update(self.input)
 
out1 = binascii.b2a_hex(h.digest())
out2 = h.hexdigest()
 
h = self.hashmod.new(self.input)
 
out3 = h.hexdigest()
out4 = binascii.b2a_hex(h.digest())
 
self.assertEqual(self.expected, out1)
self.assertEqual(self.expected, out2)
self.assertEqual(self.expected, out3)
self.assertEqual(self.expected, out4)
 
class MACSelfTest(unittest.TestCase):
 
def __init__(self, hashmod, description, expected_dict, input, key, hashmods):
unittest.TestCase.__init__(self)
self.hashmod = hashmod
self.expected_dict = expected_dict
self.input = input
self.key = key
self.hashmods = hashmods
self.description = description
 
def shortDescription(self):
return self.description
 
def runTest(self):
for hashname in self.expected_dict.keys():
hashmod = self.hashmods[hashname]
key = binascii.a2b_hex(self.key)
data = binascii.a2b_hex(self.input)
 
# Strip whitespace from the expected string (which should be in lowercase-hex)
expected = self.expected_dict[hashname]
for ch in string.whitespace:
expected = expected.replace(ch, "")
 
h = self.hashmod.new(key, digestmod=hashmod)
h.update(data)
out1 = binascii.b2a_hex(h.digest())
out2 = h.hexdigest()
 
h = self.hashmod.new(key, data, hashmod)
 
out3 = h.hexdigest()
out4 = binascii.b2a_hex(h.digest())
 
# Test .copy()
h2 = h.copy()
h.update("blah blah blah") # Corrupt the original hash object
out5 = binascii.b2a_hex(h2.digest()) # The copied hash object should return the correct result
 
self.assertEqual(expected, out1)
self.assertEqual(expected, out2)
self.assertEqual(expected, out3)
self.assertEqual(expected, out4)
self.assertEqual(expected, out5)
 
def make_hash_tests(module, module_name, test_data):
tests = []
for i in range(len(test_data)):
row = test_data[i]
if len(row) < 3:
(expected, input) = row
description = repr(input)
else:
(expected, input, description) = row
name = "%s #%d: %s" % (module_name, i+1, description)
tests.append(HashSelfTest(module, name, expected, input))
return tests
 
def make_mac_tests(module, module_name, test_data, hashmods):
tests = []
for i in range(len(test_data)):
row = test_data[i]
(key, data, results, description) = row
name = "%s #%d: %s" % (module_name, i+1, description)
tests.append(MACSelfTest(module, name, results, data, key, hashmods))
return tests
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_SHA.py
0,0 → 1,64
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/SHA.py: Self-test for the SHA-1 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.SHA"""
 
__revision__ = "$Id$"
 
# Test vectors from various sources
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# FIPS PUB 180-2, A.1 - "One-Block Message"
('a9993e364706816aba3e25717850c26c9cd0d89d', 'abc'),
 
# FIPS PUB 180-2, A.2 - "Multi-Block Message"
('84983e441c3bd26ebaae4aa1f95129e5e54670f1',
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'),
 
# FIPS PUB 180-2, A.3 - "Long Message"
# ('34aa973cd4c4daa4f61eeb2bdbad27316534016f',
# 'a' * 10**6,
# '"a" * 10**6'),
 
# RFC 3174: Section 7.3, "TEST4" (multiple of 512 bits)
('dea356a2cddd90c7a7ecedc5ebb563934f460452',
"01234567" * 80,
'"01234567" * 80'),
]
 
def get_tests():
from CryptoPlus.Hash import SHA
from common import make_hash_tests
return make_hash_tests(SHA, "SHA", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/__init__.py
0,0 → 1,49
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/__init__.py: Self-test for hash modules
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for hash modules"""
 
__revision__ = "$Id$"
 
def get_tests():
tests = []
import test_HMAC; tests += test_HMAC.get_tests()
import test_MD2; tests += test_MD2.get_tests()
import test_MD4; tests += test_MD4.get_tests()
import test_MD5; tests += test_MD5.get_tests()
import test_RIPEMD; tests += test_RIPEMD.get_tests()
import test_SHA; tests += test_SHA.get_tests()
import test_SHA256; tests += test_SHA256.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_RIPEMD.py
0,0 → 1,73
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/test_RIPEMD.py: Self-test for the RIPEMD-160 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
#"""Self-test suite for CryptoPlus.Hash.RIPEMD"""
 
__revision__ = "$Id$"
 
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# Test vectors downloaded 2008-09-12 from
# http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
('9c1185a5c5e9fc54612808977ee8f548b2258d31', '', "'' (empty string)"),
('0bdc9d2d256b3ee9daae347be6f4dc835a467ffe', 'a'),
('8eb208f7e05d987a9b044a8e98c6b087f15a0bfc', 'abc'),
('5d0689ef49d2fae572b881b123a85ffa21595f36', 'message digest'),
 
('f71c27109c692c1b56bbdceb5b9d2865b3708dbc',
'abcdefghijklmnopqrstuvwxyz',
'a-z'),
 
('12a053384a9c0c88e405a06c27dcf49ada62eb2b',
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
'abcdbcd...pnopq'),
 
('b0e20b6e3116640286ed3a87a5713079b21f5189',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'A-Z, a-z, 0-9'),
 
('9b752e45573d4b39f4dbd3323cab82bf63326bfb',
'1234567890' * 8,
"'1234567890' * 8"),
 
('52783243c1697bdbe16d37f97f68f08325dc1528',
'a' * 10**6,
'"a" * 10**6'),
]
 
def get_tests():
from CryptoPlus.Hash import RIPEMD
from common import make_hash_tests
return make_hash_tests(RIPEMD, "RIPEMD", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD2.py
0,0 → 1,64
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/MD2.py: Self-test for the MD2 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.MD2"""
 
__revision__ = "$Id$"
 
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# Test vectors from RFC 1319
('8350e5a3e24c153df2275c9f80692773', '', "'' (empty string)"),
('32ec01ec4a6dac72c0ab96fb34c0b5d1', 'a'),
('da853b0d3f88d99b30283a69e6ded6bb', 'abc'),
('ab4f496bfb2a530b219ff33031fe06b0', 'message digest'),
 
('4e8ddff3650292ab5a4108c3aa47940b', 'abcdefghijklmnopqrstuvwxyz',
'a-z'),
 
('da33def2a42df13975352846c30338cd',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'A-Z, a-z, 0-9'),
 
('d5976f79d83d3a0dc9806c3c66f3efd8',
'1234567890123456789012345678901234567890123456'
+ '7890123456789012345678901234567890',
"'1234567890' * 8"),
]
 
def get_tests():
from CryptoPlus.Hash import MD2
from common import make_hash_tests
return make_hash_tests(MD2, "MD2", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD4.py
0,0 → 1,64
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/MD4.py: Self-test for the MD4 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.MD4"""
 
__revision__ = "$Id$"
 
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# Test vectors from RFC 1320
('31d6cfe0d16ae931b73c59d7e0c089c0', '', "'' (empty string)"),
('bde52cb31de33e46245e05fbdbd6fb24', 'a'),
('a448017aaf21d8525fc10ae87aa6729d', 'abc'),
('d9130a8164549fe818874806e1c7014b', 'message digest'),
 
('d79e1c308aa5bbcdeea8ed63df412da9', 'abcdefghijklmnopqrstuvwxyz',
'a-z'),
 
('043f8582f241db351ce627e153e7f0e4',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'A-Z, a-z, 0-9'),
 
('e33b4ddc9c38f2199c3e7b164fcc0536',
'1234567890123456789012345678901234567890123456'
+ '7890123456789012345678901234567890',
"'1234567890' * 8"),
]
 
def get_tests():
from CryptoPlus.Hash import MD4
from common import make_hash_tests
return make_hash_tests(MD4, "MD4", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Hash/test_MD5.py
0,0 → 1,64
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/MD5.py: Self-test for the MD5 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Hash.MD5"""
 
__revision__ = "$Id$"
 
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# Test vectors from RFC 1321
('d41d8cd98f00b204e9800998ecf8427e', '', "'' (empty string)"),
('0cc175b9c0f1b6a831c399e269772661', 'a'),
('900150983cd24fb0d6963f7d28e17f72', 'abc'),
('f96b697d7cb7938d525a2f31aaf161d0', 'message digest'),
 
('c3fcd3d76192e4007dfb496cca67e13b', 'abcdefghijklmnopqrstuvwxyz',
'a-z'),
 
('d174ab98d277d9f5a5611c2c9f419d9f',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'A-Z, a-z, 0-9'),
 
('57edf4a22be3c955ac49da2e2107b67a',
'1234567890123456789012345678901234567890123456'
+ '7890123456789012345678901234567890',
"'1234567890' * 8"),
]
 
def get_tests():
from CryptoPlus.Hash import MD5
from common import make_hash_tests
return make_hash_tests(MD5, "MD5", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/..new
--- 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/st_common.py (nonexistent)
+++ 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/st_common.py (revision 169)
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+#
+# SelfTest/st_common.py: Common functions for SelfTest modules
+#
+# =======================================================================
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# =======================================================================
+#
+
+"""Common functions for SelfTest modules"""
+
+__revision__ = "$Id$"
+
+import unittest
+import string
+import binascii
+
+class _list_testloader(unittest.TestLoader):
+ suiteClass = list
+
+def list_test_cases(class_):
+ """Return a list of TestCase instances given a TestCase class
+
+ This is useful when you have defined test* methods on your TestCase class.
+ """
+ return _list_testloader().loadTestsFromTestCase(class_)
+
+def strip_whitespace(s):
+ """Remove whitespace from a string"""
+ table = string.maketrans(string.whitespace, " " * len(string.whitespace))
+ s = s.translate(table).replace(" ", "")
+ return s
+
+def a2b_hex(s):
+ """Convert hexadecimal to binary, ignoring whitespace"""
+ return binascii.a2b_hex(strip_whitespace(s))
+
+def b2a_hex(s):
+ """Convert binary to hexadecimal"""
+ # For completeness
+ return binascii.b2a_hex(s)
+
+# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/__init__.py
0,0 → 1,90
# -*- coding: utf-8 -*-
#
# SelfTest/__init__.py: Self-test for PyCryptoPlus
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self tests
 
These tests should perform quickly and can ideally be used every time an
application runs.
"""
__revision__ = "$Id$"
 
#import st_common
 
#__all__ = ["st_common"]
 
import sys
import unittest
import StringIO
 
class SelfTestError(Exception):
def __init__(self, message, result):
Exception.__init__(self, message, result)
self.message = message
self.result = result
 
def run(module=None, verbosity=0, stream=None, **kwargs):
"""Execute self-tests.
 
This raises SelfTestError if any test is unsuccessful.
 
You may optionally pass in a sub-module of SelfTest if you only want to
perform some of the tests. For example, the following would test only the
hash modules:
 
CryptoPlus.SelfTest.run(CryptoPlus.SelfTest.Hash)
 
"""
suite = unittest.TestSuite()
if module is None:
suite.addTests(get_tests())
else:
suite.addTests(module.get_tests())
if stream is None:
kwargs['stream'] = StringIO.StringIO()
runner = unittest.TextTestRunner(verbosity=verbosity, **kwargs)
result = runner.run(suite)
if not result.wasSuccessful():
if stream is None:
sys.stderr.write(stream.getvalue())
raise SelfTestError("Self-test failed", result)
return result
 
def get_tests():
tests = []
import Cipher; tests += Cipher.get_tests()
import Hash; tests += Hash.get_tests()
import PublicKey; tests += PublicKey.get_tests()
# import Random; tests += Random.get_tests()
# import Util; tests += Util.get_tests()
return tests
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/PublicKey/test_RSA.py
0,0 → 1,351
# -*- coding: utf-8 -*-
#
# SelfTest/PublicKey/test_self.rsa.py: Self-test for the RSA primitive
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.PublicKey.RSA"""
 
__revision__ = "$Id$"
 
from CryptoPlus.Util.python_compat import *
 
import unittest
from CryptoPlus.SelfTest.st_common import list_test_cases, a2b_hex, b2a_hex
 
class RSATest(unittest.TestCase):
# Test vectors from "RSA-OAEP and RSA-PSS test vectors (.zip file)"
# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1-vec.zip
# See RSADSI's PKCS#1 page at
# http://www.rsa.com/rsalabs/node.asp?id=2125
 
# from oaep-int.txt
 
# TODO: PyCryptoPlus treats the message as starting *after* the leading "00"
# TODO: That behaviour should probably be changed in the future.
plaintext = """
eb 7a 19 ac e9 e3 00 63 50 e3 29 50 4b 45 e2
ca 82 31 0b 26 dc d8 7d 5c 68 f1 ee a8 f5 52 67
c3 1b 2e 8b b4 25 1f 84 d7 e0 b2 c0 46 26 f5 af
f9 3e dc fb 25 c9 c2 b3 ff 8a e1 0e 83 9a 2d db
4c dc fe 4f f4 77 28 b4 a1 b7 c1 36 2b aa d2 9a
b4 8d 28 69 d5 02 41 21 43 58 11 59 1b e3 92 f9
82 fb 3e 87 d0 95 ae b4 04 48 db 97 2f 3a c1 4f
7b c2 75 19 52 81 ce 32 d2 f1 b7 6d 4d 35 3e 2d
"""
 
ciphertext = """
12 53 e0 4d c0 a5 39 7b b4 4a 7a b8 7e 9b f2 a0
39 a3 3d 1e 99 6f c8 2a 94 cc d3 00 74 c9 5d f7
63 72 20 17 06 9e 52 68 da 5d 1c 0b 4f 87 2c f6
53 c1 1d f8 23 14 a6 79 68 df ea e2 8d ef 04 bb
6d 84 b1 c3 1d 65 4a 19 70 e5 78 3b d6 eb 96 a0
24 c2 ca 2f 4a 90 fe 9f 2e f5 c9 c1 40 e5 bb 48
da 95 36 ad 87 00 c8 4f c9 13 0a de a7 4e 55 8d
51 a7 4d df 85 d8 b5 0d e9 68 38 d6 06 3e 09 55
"""
 
modulus = """
bb f8 2f 09 06 82 ce 9c 23 38 ac 2b 9d a8 71 f7
36 8d 07 ee d4 10 43 a4 40 d6 b6 f0 74 54 f5 1f
b8 df ba af 03 5c 02 ab 61 ea 48 ce eb 6f cd 48
76 ed 52 0d 60 e1 ec 46 19 71 9d 8a 5b 8b 80 7f
af b8 e0 a3 df c7 37 72 3e e6 b4 b7 d9 3a 25 84
ee 6a 64 9d 06 09 53 74 88 34 b2 45 45 98 39 4e
e0 aa b1 2d 7b 61 a5 1f 52 7a 9a 41 f6 c1 68 7f
e2 53 72 98 ca 2a 8f 59 46 f8 e5 fd 09 1d bd cb
"""
 
e = 0x11L # public exponent
 
prime_factor = """
c9 7f b1 f0 27 f4 53 f6 34 12 33 ea aa d1 d9 35
3f 6c 42 d0 88 66 b1 d0 5a 0f 20 35 02 8b 9d 86
98 40 b4 16 66 b4 2e 92 ea 0d a3 b4 32 04 b5 cf
ce 33 52 52 4d 04 16 a5 a4 41 e7 00 af 46 15 03
"""
 
legacy_interface_only = 0 # Set to 1 to test the original RSA module
 
def setUp(self):
global RSA, Random, bytes_to_long
from CryptoPlus.PublicKey import RSA
from CryptoPlus import Random
from CryptoPlus.Util.number import bytes_to_long, inverse
self.n = bytes_to_long(a2b_hex(self.modulus))
self.p = bytes_to_long(a2b_hex(self.prime_factor))
 
# Compute q, d, and u from n, e, and p
self.q = self.n / self.p
self.d = inverse(self.e, (self.p-1)*(self.q-1))
self.u = inverse(self.p, self.q) # u = e**-1 (mod q)
 
self.rsa = RSA
 
def test_generate_1arg(self):
"""RSA (default implementation) generated key (1 argument)"""
rsaObj = self.rsa.generate(1024)
self._check_private_key(rsaObj)
self._exercise_primitive(rsaObj)
pub = rsaObj.publickey()
self._check_public_key(pub)
self._exercise_public_primitive(rsaObj)
 
def test_generate_2arg(self):
"""RSA (default implementation) generated key (2 arguments)"""
rsaObj = self.rsa.generate(1024, Random.new().read)
self._check_private_key(rsaObj)
self._exercise_primitive(rsaObj)
pub = rsaObj.publickey()
self._check_public_key(pub)
self._exercise_public_primitive(rsaObj)
 
def test_construct_2tuple(self):
"""RSA (default implementation) constructed key (2-tuple)"""
pub = self.rsa.construct((self.n, self.e))
self._check_public_key(pub)
self._check_encryption(pub)
 
def test_construct_3tuple(self):
"""RSA (default implementation) constructed key (3-tuple)"""
rsaObj = self.rsa.construct((self.n, self.e, self.d))
self._check_encryption(rsaObj)
self._check_decryption(rsaObj)
 
def test_construct_4tuple(self):
"""RSA (default implementation) constructed key (4-tuple)"""
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p))
self._check_encryption(rsaObj)
self._check_decryption(rsaObj)
 
def test_construct_5tuple(self):
"""RSA (default implementation) constructed key (5-tuple)"""
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p, self.q))
self._check_encryption(rsaObj)
self._check_decryption(rsaObj)
 
def test_construct_6tuple(self):
"""RSA (default implementation) constructed key (6-tuple)"""
rsaObj = self.rsa.construct((self.n, self.e, self.d, self.p, self.q, self.u))
self._check_private_key(rsaObj)
self._check_encryption(rsaObj)
self._check_decryption(rsaObj)
 
def _check_private_key(self, rsaObj):
# Check capabilities
self.assertEqual(1, rsaObj.has_private())
self.assertEqual(1, rsaObj.can_sign())
self.assertEqual(1, rsaObj.can_encrypt())
self.assertEqual(1, rsaObj.can_blind())
 
# Check rsaObj.[nedpqu] -> rsaObj.key.[nedpqu] mapping
self.assertEqual(rsaObj.n, rsaObj.key.n)
self.assertEqual(rsaObj.e, rsaObj.key.e)
self.assertEqual(rsaObj.d, rsaObj.key.d)
self.assertEqual(rsaObj.p, rsaObj.key.p)
self.assertEqual(rsaObj.q, rsaObj.key.q)
self.assertEqual(rsaObj.u, rsaObj.key.u)
 
# Sanity check key data
self.assertEqual(1, rsaObj.p < rsaObj.q) # p < q
self.assertEqual(rsaObj.n, rsaObj.p * rsaObj.q) # n = pq
self.assertEqual(1, rsaObj.d * rsaObj.e % ((rsaObj.p-1) * (rsaObj.q-1))) # ed = 1 (mod (p-1)(q-1))
self.assertEqual(1, rsaObj.p * rsaObj.u % rsaObj.q) # pu = 1 (mod q)
self.assertEqual(1, rsaObj.p > 1) # p > 1
self.assertEqual(1, rsaObj.q > 1) # q > 1
self.assertEqual(1, rsaObj.e > 1) # e > 1
self.assertEqual(1, rsaObj.d > 1) # d > 1
 
def _check_public_key(self, rsaObj):
# Check capabilities
self.assertEqual(0, rsaObj.has_private())
self.assertEqual(1, rsaObj.can_sign())
self.assertEqual(1, rsaObj.can_encrypt())
self.assertEqual(1, rsaObj.can_blind())
 
# Check rsaObj.[ne] -> rsaObj.key.[ne] mapping
self.assertEqual(rsaObj.n, rsaObj.key.n)
self.assertEqual(rsaObj.e, rsaObj.key.e)
 
# Check that private parameters are all missing
self.assertEqual(0, hasattr(rsaObj, 'd'))
self.assertEqual(0, hasattr(rsaObj, 'p'))
self.assertEqual(0, hasattr(rsaObj, 'q'))
self.assertEqual(0, hasattr(rsaObj, 'u'))
self.assertEqual(0, hasattr(rsaObj.key, 'd'))
self.assertEqual(0, hasattr(rsaObj.key, 'p'))
self.assertEqual(0, hasattr(rsaObj.key, 'q'))
self.assertEqual(0, hasattr(rsaObj.key, 'u'))
 
# Sanity check key data
self.assertEqual(1, rsaObj.e > 1) # e > 1
 
def _exercise_primitive(self, rsaObj):
# Since we're using a randomly-generated key, we can't check the test
# vector, but we can make sure encryption and decryption are inverse
# operations.
ciphertext = a2b_hex(self.ciphertext)
 
# Test decryption
plaintext = rsaObj.decrypt((ciphertext,))
 
# Test encryption (2 arguments)
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "")
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext2))
 
# Test encryption (1 argument)
if not self.legacy_interface_only:
(new_ciphertext1,) = rsaObj.encrypt(plaintext)
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext1))
 
# Test blinded decryption
blinding_factor = Random.new().read(len(ciphertext)-1)
blinded_ctext = rsaObj.blind(ciphertext, blinding_factor)
blinded_ptext = rsaObj.decrypt((blinded_ctext,))
unblinded_plaintext = rsaObj.unblind(blinded_ptext, blinding_factor)
self.assertEqual(b2a_hex(plaintext), b2a_hex(unblinded_plaintext))
 
def _exercise_public_primitive(self, rsaObj):
plaintext = a2b_hex(self.plaintext)
 
# Test encryption (2 arguments)
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "")
 
# Test encryption (1 argument)
if not self.legacy_interface_only:
(new_ciphertext1,) = rsaObj.encrypt(plaintext)
self.assertEqual(new_ciphertext2, new_ciphertext1)
 
def _check_encryption(self, rsaObj):
plaintext = a2b_hex(self.plaintext)
ciphertext = a2b_hex(self.ciphertext)
 
# Test encryption (2 arguments)
(new_ciphertext2,) = rsaObj.encrypt(plaintext, "")
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext2))
 
# Test encryption (1 argument)
if not self.legacy_interface_only:
(new_ciphertext1,) = rsaObj.encrypt(plaintext)
self.assertEqual(b2a_hex(ciphertext), b2a_hex(new_ciphertext1))
 
def _check_decryption(self, rsaObj):
plaintext = a2b_hex(self.plaintext)
ciphertext = a2b_hex(self.ciphertext)
 
# Test plain decryption
new_plaintext = rsaObj.decrypt((ciphertext,))
self.assertEqual(b2a_hex(plaintext), b2a_hex(new_plaintext))
 
# Test blinded decryption
blinding_factor = Random.new().read(len(ciphertext)-1)
blinded_ctext = rsaObj.blind(ciphertext, blinding_factor)
blinded_ptext = rsaObj.decrypt((blinded_ctext,))
unblinded_plaintext = rsaObj.unblind(blinded_ptext, blinding_factor)
self.assertEqual(b2a_hex(plaintext), b2a_hex(unblinded_plaintext))
 
class RSAFastMathTest(RSATest):
def setUp(self):
RSATest.setUp(self)
self.rsa = RSA.RSAImplementation(use_fast_math=True)
 
def test_generate_1arg(self):
"""RSA (_fastmath implementation) generated key (1 argument)"""
RSATest.test_generate_1arg(self)
 
def test_generate_2arg(self):
"""RSA (_fastmath implementation) generated key (2 arguments)"""
RSATest.test_generate_2arg(self)
 
def test_construct_2tuple(self):
"""RSA (_fastmath implementation) constructed key (2-tuple)"""
RSATest.test_construct_2tuple(self)
 
def test_construct_3tuple(self):
"""RSA (_fastmath implementation) constructed key (3-tuple)"""
RSATest.test_construct_3tuple(self)
 
def test_construct_4tuple(self):
"""RSA (_fastmath implementation) constructed key (4-tuple)"""
RSATest.test_construct_4tuple(self)
 
def test_construct_5tuple(self):
"""RSA (_fastmath implementation) constructed key (5-tuple)"""
RSATest.test_construct_5tuple(self)
 
def test_construct_6tuple(self):
"""RSA (_fastmath implementation) constructed key (6-tuple)"""
RSATest.test_construct_6tuple(self)
 
class RSASlowMathTest(RSATest):
def setUp(self):
RSATest.setUp(self)
self.rsa = RSA.RSAImplementation(use_fast_math=False)
 
def test_generate_1arg(self):
"""RSA (_slowmath implementation) generated key (1 argument)"""
RSATest.test_generate_1arg(self)
 
def test_generate_2arg(self):
"""RSA (_slowmath implementation) generated key (2 arguments)"""
RSATest.test_generate_2arg(self)
 
def test_construct_2tuple(self):
"""RSA (_slowmath implementation) constructed key (2-tuple)"""
RSATest.test_construct_2tuple(self)
 
def test_construct_3tuple(self):
"""RSA (_slowmath implementation) constructed key (3-tuple)"""
RSATest.test_construct_3tuple(self)
 
def test_construct_4tuple(self):
"""RSA (_slowmath implementation) constructed key (4-tuple)"""
RSATest.test_construct_4tuple(self)
 
def test_construct_5tuple(self):
"""RSA (_slowmath implementation) constructed key (5-tuple)"""
RSATest.test_construct_5tuple(self)
 
def test_construct_6tuple(self):
"""RSA (_slowmath implementation) constructed key (6-tuple)"""
RSATest.test_construct_6tuple(self)
 
 
def get_tests():
tests = []
tests += list_test_cases(RSATest)
try:
from CryptoPlus.PublicKey import _fastmath
tests += list_test_cases(RSAFastMathTest)
except ImportError:
pass
tests += list_test_cases(RSASlowMathTest)
return tests
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/PublicKey/__init__.py
0,0 → 1,45
# -*- coding: utf-8 -*-
#
# SelfTest/PublicKey/__init__.py: Self-test for public key crypto
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for public-key crypto"""
 
__revision__ = "$Id$"
 
import os
 
def get_tests():
tests = []
import test_RSA; tests += test_RSA.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_DES.py
0,0 → 1,302
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/DES.py: Self-test for the (Single) DES cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.DES"""
 
__revision__ = "$Id$"
 
from common import dict # For compatibility with Python 2.1 and 2.2
 
# This is a list of (plaintext, ciphertext, key, description) tuples.
SP800_17_B1_KEY = "01" * 8
SP800_17_B2_PT = "00" * 8
test_data = [
# Test vectors from Appendix A of NIST SP 800-17
# "Modes of Operation Validation System (MOVS): Requirements and Procedures"
# http://csrc.nist.gov/publications/nistpubs/800-17/800-17.pdf
 
# Appendix A - "Sample Round Outputs for the DES"
('0000000000000000', '82dcbafbdeab6602', '10316e028c8f3b4a',
"NIST SP800-17 A"),
 
# Table B.1 - Variable Plaintext Known Answer Test
('8000000000000000', '95f8a5e5dd31d900', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #0'),
('4000000000000000', 'dd7f121ca5015619', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #1'),
('2000000000000000', '2e8653104f3834ea', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #2'),
('1000000000000000', '4bd388ff6cd81d4f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #3'),
('0800000000000000', '20b9e767b2fb1456', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #4'),
('0400000000000000', '55579380d77138ef', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #5'),
('0200000000000000', '6cc5defaaf04512f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #6'),
('0100000000000000', '0d9f279ba5d87260', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #7'),
('0080000000000000', 'd9031b0271bd5a0a', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #8'),
('0040000000000000', '424250b37c3dd951', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #9'),
('0020000000000000', 'b8061b7ecd9a21e5', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #10'),
('0010000000000000', 'f15d0f286b65bd28', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #11'),
('0008000000000000', 'add0cc8d6e5deba1', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #12'),
('0004000000000000', 'e6d5f82752ad63d1', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #13'),
('0002000000000000', 'ecbfe3bd3f591a5e', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #14'),
('0001000000000000', 'f356834379d165cd', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #15'),
('0000800000000000', '2b9f982f20037fa9', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #16'),
('0000400000000000', '889de068a16f0be6', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #17'),
('0000200000000000', 'e19e275d846a1298', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #18'),
('0000100000000000', '329a8ed523d71aec', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #19'),
('0000080000000000', 'e7fce22557d23c97', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #20'),
('0000040000000000', '12a9f5817ff2d65d', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #21'),
('0000020000000000', 'a484c3ad38dc9c19', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #22'),
('0000010000000000', 'fbe00a8a1ef8ad72', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #23'),
('0000008000000000', '750d079407521363', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #24'),
('0000004000000000', '64feed9c724c2faf', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #25'),
('0000002000000000', 'f02b263b328e2b60', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #26'),
('0000001000000000', '9d64555a9a10b852', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #27'),
('0000000800000000', 'd106ff0bed5255d7', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #28'),
('0000000400000000', 'e1652c6b138c64a5', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #29'),
('0000000200000000', 'e428581186ec8f46', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #30'),
('0000000100000000', 'aeb5f5ede22d1a36', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #31'),
('0000000080000000', 'e943d7568aec0c5c', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #32'),
('0000000040000000', 'df98c8276f54b04b', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #33'),
('0000000020000000', 'b160e4680f6c696f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #34'),
('0000000010000000', 'fa0752b07d9c4ab8', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #35'),
('0000000008000000', 'ca3a2b036dbc8502', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #36'),
('0000000004000000', '5e0905517bb59bcf', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #37'),
('0000000002000000', '814eeb3b91d90726', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #38'),
('0000000001000000', '4d49db1532919c9f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #39'),
('0000000000800000', '25eb5fc3f8cf0621', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #40'),
('0000000000400000', 'ab6a20c0620d1c6f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #41'),
('0000000000200000', '79e90dbc98f92cca', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #42'),
('0000000000100000', '866ecedd8072bb0e', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #43'),
('0000000000080000', '8b54536f2f3e64a8', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #44'),
('0000000000040000', 'ea51d3975595b86b', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #45'),
('0000000000020000', 'caffc6ac4542de31', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #46'),
('0000000000010000', '8dd45a2ddf90796c', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #47'),
('0000000000008000', '1029d55e880ec2d0', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #48'),
('0000000000004000', '5d86cb23639dbea9', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #49'),
('0000000000002000', '1d1ca853ae7c0c5f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #50'),
('0000000000001000', 'ce332329248f3228', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #51'),
('0000000000000800', '8405d1abe24fb942', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #52'),
('0000000000000400', 'e643d78090ca4207', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #53'),
('0000000000000200', '48221b9937748a23', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #54'),
('0000000000000100', 'dd7c0bbd61fafd54', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #55'),
('0000000000000080', '2fbc291a570db5c4', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #56'),
('0000000000000040', 'e07c30d7e4e26e12', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #57'),
('0000000000000020', '0953e2258e8e90a1', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #58'),
('0000000000000010', '5b711bc4ceebf2ee', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #59'),
('0000000000000008', 'cc083f1e6d9e85f6', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #60'),
('0000000000000004', 'd2fd8867d50d2dfe', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #61'),
('0000000000000002', '06e7ea22ce92708f', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #62'),
('0000000000000001', '166b40b44aba4bd6', SP800_17_B1_KEY,
'NIST SP800-17 B.1 #63'),
 
# Table B.2 - Variable Key Known Answer Test
(SP800_17_B2_PT, '95a8d72813daa94d', '8001010101010101',
'NIST SP800-17 B.2 #0'),
(SP800_17_B2_PT, '0eec1487dd8c26d5', '4001010101010101',
'NIST SP800-17 B.2 #1'),
(SP800_17_B2_PT, '7ad16ffb79c45926', '2001010101010101',
'NIST SP800-17 B.2 #2'),
(SP800_17_B2_PT, 'd3746294ca6a6cf3', '1001010101010101',
'NIST SP800-17 B.2 #3'),
(SP800_17_B2_PT, '809f5f873c1fd761', '0801010101010101',
'NIST SP800-17 B.2 #4'),
(SP800_17_B2_PT, 'c02faffec989d1fc', '0401010101010101',
'NIST SP800-17 B.2 #5'),
(SP800_17_B2_PT, '4615aa1d33e72f10', '0201010101010101',
'NIST SP800-17 B.2 #6'),
(SP800_17_B2_PT, '2055123350c00858', '0180010101010101',
'NIST SP800-17 B.2 #7'),
(SP800_17_B2_PT, 'df3b99d6577397c8', '0140010101010101',
'NIST SP800-17 B.2 #8'),
(SP800_17_B2_PT, '31fe17369b5288c9', '0120010101010101',
'NIST SP800-17 B.2 #9'),
(SP800_17_B2_PT, 'dfdd3cc64dae1642', '0110010101010101',
'NIST SP800-17 B.2 #10'),
(SP800_17_B2_PT, '178c83ce2b399d94', '0108010101010101',
'NIST SP800-17 B.2 #11'),
(SP800_17_B2_PT, '50f636324a9b7f80', '0104010101010101',
'NIST SP800-17 B.2 #12'),
(SP800_17_B2_PT, 'a8468ee3bc18f06d', '0102010101010101',
'NIST SP800-17 B.2 #13'),
(SP800_17_B2_PT, 'a2dc9e92fd3cde92', '0101800101010101',
'NIST SP800-17 B.2 #14'),
(SP800_17_B2_PT, 'cac09f797d031287', '0101400101010101',
'NIST SP800-17 B.2 #15'),
(SP800_17_B2_PT, '90ba680b22aeb525', '0101200101010101',
'NIST SP800-17 B.2 #16'),
(SP800_17_B2_PT, 'ce7a24f350e280b6', '0101100101010101',
'NIST SP800-17 B.2 #17'),
(SP800_17_B2_PT, '882bff0aa01a0b87', '0101080101010101',
'NIST SP800-17 B.2 #18'),
(SP800_17_B2_PT, '25610288924511c2', '0101040101010101',
'NIST SP800-17 B.2 #19'),
(SP800_17_B2_PT, 'c71516c29c75d170', '0101020101010101',
'NIST SP800-17 B.2 #20'),
(SP800_17_B2_PT, '5199c29a52c9f059', '0101018001010101',
'NIST SP800-17 B.2 #21'),
(SP800_17_B2_PT, 'c22f0a294a71f29f', '0101014001010101',
'NIST SP800-17 B.2 #22'),
(SP800_17_B2_PT, 'ee371483714c02ea', '0101012001010101',
'NIST SP800-17 B.2 #23'),
(SP800_17_B2_PT, 'a81fbd448f9e522f', '0101011001010101',
'NIST SP800-17 B.2 #24'),
(SP800_17_B2_PT, '4f644c92e192dfed', '0101010801010101',
'NIST SP800-17 B.2 #25'),
(SP800_17_B2_PT, '1afa9a66a6df92ae', '0101010401010101',
'NIST SP800-17 B.2 #26'),
(SP800_17_B2_PT, 'b3c1cc715cb879d8', '0101010201010101',
'NIST SP800-17 B.2 #27'),
(SP800_17_B2_PT, '19d032e64ab0bd8b', '0101010180010101',
'NIST SP800-17 B.2 #28'),
(SP800_17_B2_PT, '3cfaa7a7dc8720dc', '0101010140010101',
'NIST SP800-17 B.2 #29'),
(SP800_17_B2_PT, 'b7265f7f447ac6f3', '0101010120010101',
'NIST SP800-17 B.2 #30'),
(SP800_17_B2_PT, '9db73b3c0d163f54', '0101010110010101',
'NIST SP800-17 B.2 #31'),
(SP800_17_B2_PT, '8181b65babf4a975', '0101010108010101',
'NIST SP800-17 B.2 #32'),
(SP800_17_B2_PT, '93c9b64042eaa240', '0101010104010101',
'NIST SP800-17 B.2 #33'),
(SP800_17_B2_PT, '5570530829705592', '0101010102010101',
'NIST SP800-17 B.2 #34'),
(SP800_17_B2_PT, '8638809e878787a0', '0101010101800101',
'NIST SP800-17 B.2 #35'),
(SP800_17_B2_PT, '41b9a79af79ac208', '0101010101400101',
'NIST SP800-17 B.2 #36'),
(SP800_17_B2_PT, '7a9be42f2009a892', '0101010101200101',
'NIST SP800-17 B.2 #37'),
(SP800_17_B2_PT, '29038d56ba6d2745', '0101010101100101',
'NIST SP800-17 B.2 #38'),
(SP800_17_B2_PT, '5495c6abf1e5df51', '0101010101080101',
'NIST SP800-17 B.2 #39'),
(SP800_17_B2_PT, 'ae13dbd561488933', '0101010101040101',
'NIST SP800-17 B.2 #40'),
(SP800_17_B2_PT, '024d1ffa8904e389', '0101010101020101',
'NIST SP800-17 B.2 #41'),
(SP800_17_B2_PT, 'd1399712f99bf02e', '0101010101018001',
'NIST SP800-17 B.2 #42'),
(SP800_17_B2_PT, '14c1d7c1cffec79e', '0101010101014001',
'NIST SP800-17 B.2 #43'),
(SP800_17_B2_PT, '1de5279dae3bed6f', '0101010101012001',
'NIST SP800-17 B.2 #44'),
(SP800_17_B2_PT, 'e941a33f85501303', '0101010101011001',
'NIST SP800-17 B.2 #45'),
(SP800_17_B2_PT, 'da99dbbc9a03f379', '0101010101010801',
'NIST SP800-17 B.2 #46'),
(SP800_17_B2_PT, 'b7fc92f91d8e92e9', '0101010101010401',
'NIST SP800-17 B.2 #47'),
(SP800_17_B2_PT, 'ae8e5caa3ca04e85', '0101010101010201',
'NIST SP800-17 B.2 #48'),
(SP800_17_B2_PT, '9cc62df43b6eed74', '0101010101010180',
'NIST SP800-17 B.2 #49'),
(SP800_17_B2_PT, 'd863dbb5c59a91a0', '0101010101010140',
'NIST SP800-17 B.2 #50'),
(SP800_17_B2_PT, 'a1ab2190545b91d7', '0101010101010120',
'NIST SP800-17 B.2 #51'),
(SP800_17_B2_PT, '0875041e64c570f7', '0101010101010110',
'NIST SP800-17 B.2 #52'),
(SP800_17_B2_PT, '5a594528bebef1cc', '0101010101010108',
'NIST SP800-17 B.2 #53'),
(SP800_17_B2_PT, 'fcdb3291de21f0c0', '0101010101010104',
'NIST SP800-17 B.2 #54'),
(SP800_17_B2_PT, '869efd7f9f265a09', '0101010101010102',
'NIST SP800-17 B.2 #55'),
]
 
def get_tests():
from CryptoPlus.Cipher import DES
from common import make_block_tests
return make_block_tests(DES, "DES", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_Blowfish.py
0,0 → 1,116
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/test_Blowfish.py: Self-test for the Blowfish cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.Blowfish"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
test_data = [
# Test vectors from http://www.schneier.com/code/vectors.txt
('0000000000000000', '4ef997456198dd78', '0000000000000000'),
('ffffffffffffffff', '51866fd5b85ecb8a', 'ffffffffffffffff'),
('1000000000000001', '7d856f9a613063f2', '3000000000000000'),
('1111111111111111', '2466dd878b963c9d', '1111111111111111'),
('1111111111111111', '61f9c3802281b096', '0123456789abcdef'),
('0123456789abcdef', '7d0cc630afda1ec7', '1111111111111111'),
('0000000000000000', '4ef997456198dd78', '0000000000000000'),
('0123456789abcdef', '0aceab0fc6a0a28d', 'fedcba9876543210'),
('01a1d6d039776742', '59c68245eb05282b', '7ca110454a1a6e57'),
('5cd54ca83def57da', 'b1b8cc0b250f09a0', '0131d9619dc1376e'),
('0248d43806f67172', '1730e5778bea1da4', '07a1133e4a0b2686'),
('51454b582ddf440a', 'a25e7856cf2651eb', '3849674c2602319e'),
('42fd443059577fa2', '353882b109ce8f1a', '04b915ba43feb5b6'),
('059b5e0851cf143a', '48f4d0884c379918', '0113b970fd34f2ce'),
('0756d8e0774761d2', '432193b78951fc98', '0170f175468fb5e6'),
('762514b829bf486a', '13f04154d69d1ae5', '43297fad38e373fe'),
('3bdd119049372802', '2eedda93ffd39c79', '07a7137045da2a16'),
('26955f6835af609a', 'd887e0393c2da6e3', '04689104c2fd3b2f'),
('164d5e404f275232', '5f99d04f5b163969', '37d06bb516cb7546'),
('6b056e18759f5cca', '4a057a3b24d3977b', '1f08260d1ac2465e'),
('004bd6ef09176062', '452031c1e4fada8e', '584023641aba6176'),
('480d39006ee762f2', '7555ae39f59b87bd', '025816164629b007'),
('437540c8698f3cfa', '53c55f9cb49fc019', '49793ebc79b3258f'),
('072d43a077075292', '7a8e7bfa937e89a3', '4fb05e1515ab73a7'),
('02fe55778117f12a', 'cf9c5d7a4986adb5', '49e95d6d4ca229bf'),
('1d9d5c5018f728c2', 'd1abb290658bc778', '018310dc409b26d6'),
('305532286d6f295a', '55cb3774d13ef201', '1c587f1c13924fef'),
('0123456789abcdef', 'fa34ec4847b268b2', '0101010101010101'),
('0123456789abcdef', 'a790795108ea3cae', '1f1f1f1f0e0e0e0e'),
('0123456789abcdef', 'c39e072d9fac631d', 'e0fee0fef1fef1fe'),
('ffffffffffffffff', '014933e0cdaff6e4', '0000000000000000'),
('0000000000000000', 'f21e9a77b71c49bc', 'ffffffffffffffff'),
('0000000000000000', '245946885754369a', '0123456789abcdef'),
('ffffffffffffffff', '6b5c5a9c5d9e0a5a', 'fedcba9876543210'),
 
('fedcba9876543210', 'f9ad597c49db005e', 'f0'),
('fedcba9876543210', 'e91d21c1d961a6d6', 'f0e1'),
('fedcba9876543210', 'e9c2b70a1bc65cf3', 'f0e1d2'),
('fedcba9876543210', 'be1e639408640f05', 'f0e1d2c3'),
('fedcba9876543210', 'b39e44481bdb1e6e', 'f0e1d2c3b4'),
('fedcba9876543210', '9457aa83b1928c0d', 'f0e1d2c3b4a5'),
('fedcba9876543210', '8bb77032f960629d', 'f0e1d2c3b4a596'),
('fedcba9876543210', 'e87a244e2cc85e82', 'f0e1d2c3b4a59687'),
('fedcba9876543210', '15750e7a4f4ec577', 'f0e1d2c3b4a5968778'),
('fedcba9876543210', '122ba70b3ab64ae0', 'f0e1d2c3b4a596877869'),
('fedcba9876543210', '3a833c9affc537f6', 'f0e1d2c3b4a5968778695a'),
('fedcba9876543210', '9409da87a90f6bf2', 'f0e1d2c3b4a5968778695a4b'),
('fedcba9876543210', '884f80625060b8b4', 'f0e1d2c3b4a5968778695a4b3c'),
('fedcba9876543210', '1f85031c19e11968', 'f0e1d2c3b4a5968778695a4b3c2d'),
('fedcba9876543210', '79d9373a714ca34f', 'f0e1d2c3b4a5968778695a4b3c2d1e'),
('fedcba9876543210', '93142887ee3be15c',
'f0e1d2c3b4a5968778695a4b3c2d1e0f'),
('fedcba9876543210', '03429e838ce2d14b',
'f0e1d2c3b4a5968778695a4b3c2d1e0f00'),
('fedcba9876543210', 'a4299e27469ff67b',
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011'),
('fedcba9876543210', 'afd5aed1c1bc96a8',
'f0e1d2c3b4a5968778695a4b3c2d1e0f001122'),
('fedcba9876543210', '10851c0e3858da9f',
'f0e1d2c3b4a5968778695a4b3c2d1e0f00112233'),
('fedcba9876543210', 'e6f51ed79b9db21f',
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344'),
('fedcba9876543210', '64a6e14afd36b46f',
'f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455'),
('fedcba9876543210', '80c7d7d45a5479ad',
'f0e1d2c3b4a5968778695a4b3c2d1e0f00112233445566'),
('fedcba9876543210', '05044b62fa52d080',
'f0e1d2c3b4a5968778695a4b3c2d1e0f0011223344556677'),
]
 
def get_tests():
from CryptoPlus.Cipher import Blowfish
from common import make_block_tests
return make_block_tests(Blowfish, "Blowfish", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_DES3.py
0,0 → 1,319
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/DES3.py: Self-test for the Triple-DES cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.DES3"""
 
__revision__ = "$Id$"
 
from common import dict # For compatibility with Python 2.1 and 2.2
 
# This is a list of (plaintext, ciphertext, key, description) tuples.
SP800_20_A1_KEY = "01" * 24
SP800_20_A2_PT = "00" * 8
test_data = [
# Test vector from Appendix B of NIST SP 800-67
# "Recommendation for the Triple Data Encryption Algorithm (TDEA) Block
# Cipher"
# http://csrc.nist.gov/publications/nistpubs/800-67/SP800-67.pdf
('54686520717566636b2062726f776e20666f78206a756d70',
'a826fd8ce53b855fcce21c8112256fe668d5c05dd9b6b900',
'0123456789abcdef23456789abcdef01456789abcdef0123',
'NIST SP800-67 B.1'),
 
# Test vectors "The Multi-block Message Test (MMT) for DES and TDES"
# http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf
('326a494cd33fe756', 'b22b8d66de970692',
'627f460e08104a1043cd265d5840eaf1313edf97df2a8a8c',
'DESMMT #1', dict(mode='CBC', iv='8e29f75ea77e5475')),
 
('84401f78fe6c10876d8ea23094ea5309', '7b1f7c7e3b1c948ebd04a75ffba7d2f5',
'37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae',
'DESMMT #2', dict(mode='CBC', iv='3d1de3cc132e3b65')),
 
# Test vectors from Appendix A of NIST SP 800-20
# "Modes of Operation Validation System for the Triple Data Encryption
# Algorithm (TMOVS): Requirements and Procedures"
# http://csrc.nist.gov/publications/nistpubs/800-20/800-20.pdf
 
# Table A.1 - Variable Plaintext Known Answer Test
('8000000000000000', '95f8a5e5dd31d900', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #0'),
('4000000000000000', 'dd7f121ca5015619', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #1'),
('2000000000000000', '2e8653104f3834ea', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #2'),
('1000000000000000', '4bd388ff6cd81d4f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #3'),
('0800000000000000', '20b9e767b2fb1456', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #4'),
('0400000000000000', '55579380d77138ef', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #5'),
('0200000000000000', '6cc5defaaf04512f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #6'),
('0100000000000000', '0d9f279ba5d87260', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #7'),
('0080000000000000', 'd9031b0271bd5a0a', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #8'),
('0040000000000000', '424250b37c3dd951', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #9'),
('0020000000000000', 'b8061b7ecd9a21e5', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #10'),
('0010000000000000', 'f15d0f286b65bd28', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #11'),
('0008000000000000', 'add0cc8d6e5deba1', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #12'),
('0004000000000000', 'e6d5f82752ad63d1', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #13'),
('0002000000000000', 'ecbfe3bd3f591a5e', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #14'),
('0001000000000000', 'f356834379d165cd', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #15'),
('0000800000000000', '2b9f982f20037fa9', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #16'),
('0000400000000000', '889de068a16f0be6', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #17'),
('0000200000000000', 'e19e275d846a1298', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #18'),
('0000100000000000', '329a8ed523d71aec', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #19'),
('0000080000000000', 'e7fce22557d23c97', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #20'),
('0000040000000000', '12a9f5817ff2d65d', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #21'),
('0000020000000000', 'a484c3ad38dc9c19', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #22'),
('0000010000000000', 'fbe00a8a1ef8ad72', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #23'),
('0000008000000000', '750d079407521363', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #24'),
('0000004000000000', '64feed9c724c2faf', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #25'),
('0000002000000000', 'f02b263b328e2b60', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #26'),
('0000001000000000', '9d64555a9a10b852', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #27'),
('0000000800000000', 'd106ff0bed5255d7', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #28'),
('0000000400000000', 'e1652c6b138c64a5', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #29'),
('0000000200000000', 'e428581186ec8f46', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #30'),
('0000000100000000', 'aeb5f5ede22d1a36', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #31'),
('0000000080000000', 'e943d7568aec0c5c', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #32'),
('0000000040000000', 'df98c8276f54b04b', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #33'),
('0000000020000000', 'b160e4680f6c696f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #34'),
('0000000010000000', 'fa0752b07d9c4ab8', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #35'),
('0000000008000000', 'ca3a2b036dbc8502', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #36'),
('0000000004000000', '5e0905517bb59bcf', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #37'),
('0000000002000000', '814eeb3b91d90726', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #38'),
('0000000001000000', '4d49db1532919c9f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #39'),
('0000000000800000', '25eb5fc3f8cf0621', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #40'),
('0000000000400000', 'ab6a20c0620d1c6f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #41'),
('0000000000200000', '79e90dbc98f92cca', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #42'),
('0000000000100000', '866ecedd8072bb0e', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #43'),
('0000000000080000', '8b54536f2f3e64a8', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #44'),
('0000000000040000', 'ea51d3975595b86b', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #45'),
('0000000000020000', 'caffc6ac4542de31', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #46'),
('0000000000010000', '8dd45a2ddf90796c', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #47'),
('0000000000008000', '1029d55e880ec2d0', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #48'),
('0000000000004000', '5d86cb23639dbea9', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #49'),
('0000000000002000', '1d1ca853ae7c0c5f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #50'),
('0000000000001000', 'ce332329248f3228', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #51'),
('0000000000000800', '8405d1abe24fb942', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #52'),
('0000000000000400', 'e643d78090ca4207', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #53'),
('0000000000000200', '48221b9937748a23', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #54'),
('0000000000000100', 'dd7c0bbd61fafd54', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #55'),
('0000000000000080', '2fbc291a570db5c4', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #56'),
('0000000000000040', 'e07c30d7e4e26e12', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #57'),
('0000000000000020', '0953e2258e8e90a1', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #58'),
('0000000000000010', '5b711bc4ceebf2ee', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #59'),
('0000000000000008', 'cc083f1e6d9e85f6', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #60'),
('0000000000000004', 'd2fd8867d50d2dfe', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #61'),
('0000000000000002', '06e7ea22ce92708f', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #62'),
('0000000000000001', '166b40b44aba4bd6', SP800_20_A1_KEY,
'NIST SP800-20 A.1 #63'),
 
# Table A.2 - Variable Key Known Answer Test
(SP800_20_A2_PT, '95a8d72813daa94d', '8001010101010101'*3,
'NIST SP800-20 A.2 #0'),
(SP800_20_A2_PT, '0eec1487dd8c26d5', '4001010101010101'*3,
'NIST SP800-20 A.2 #1'),
(SP800_20_A2_PT, '7ad16ffb79c45926', '2001010101010101'*3,
'NIST SP800-20 A.2 #2'),
(SP800_20_A2_PT, 'd3746294ca6a6cf3', '1001010101010101'*3,
'NIST SP800-20 A.2 #3'),
(SP800_20_A2_PT, '809f5f873c1fd761', '0801010101010101'*3,
'NIST SP800-20 A.2 #4'),
(SP800_20_A2_PT, 'c02faffec989d1fc', '0401010101010101'*3,
'NIST SP800-20 A.2 #5'),
(SP800_20_A2_PT, '4615aa1d33e72f10', '0201010101010101'*3,
'NIST SP800-20 A.2 #6'),
(SP800_20_A2_PT, '2055123350c00858', '0180010101010101'*3,
'NIST SP800-20 A.2 #7'),
(SP800_20_A2_PT, 'df3b99d6577397c8', '0140010101010101'*3,
'NIST SP800-20 A.2 #8'),
(SP800_20_A2_PT, '31fe17369b5288c9', '0120010101010101'*3,
'NIST SP800-20 A.2 #9'),
(SP800_20_A2_PT, 'dfdd3cc64dae1642', '0110010101010101'*3,
'NIST SP800-20 A.2 #10'),
(SP800_20_A2_PT, '178c83ce2b399d94', '0108010101010101'*3,
'NIST SP800-20 A.2 #11'),
(SP800_20_A2_PT, '50f636324a9b7f80', '0104010101010101'*3,
'NIST SP800-20 A.2 #12'),
(SP800_20_A2_PT, 'a8468ee3bc18f06d', '0102010101010101'*3,
'NIST SP800-20 A.2 #13'),
(SP800_20_A2_PT, 'a2dc9e92fd3cde92', '0101800101010101'*3,
'NIST SP800-20 A.2 #14'),
(SP800_20_A2_PT, 'cac09f797d031287', '0101400101010101'*3,
'NIST SP800-20 A.2 #15'),
(SP800_20_A2_PT, '90ba680b22aeb525', '0101200101010101'*3,
'NIST SP800-20 A.2 #16'),
(SP800_20_A2_PT, 'ce7a24f350e280b6', '0101100101010101'*3,
'NIST SP800-20 A.2 #17'),
(SP800_20_A2_PT, '882bff0aa01a0b87', '0101080101010101'*3,
'NIST SP800-20 A.2 #18'),
(SP800_20_A2_PT, '25610288924511c2', '0101040101010101'*3,
'NIST SP800-20 A.2 #19'),
(SP800_20_A2_PT, 'c71516c29c75d170', '0101020101010101'*3,
'NIST SP800-20 A.2 #20'),
(SP800_20_A2_PT, '5199c29a52c9f059', '0101018001010101'*3,
'NIST SP800-20 A.2 #21'),
(SP800_20_A2_PT, 'c22f0a294a71f29f', '0101014001010101'*3,
'NIST SP800-20 A.2 #22'),
(SP800_20_A2_PT, 'ee371483714c02ea', '0101012001010101'*3,
'NIST SP800-20 A.2 #23'),
(SP800_20_A2_PT, 'a81fbd448f9e522f', '0101011001010101'*3,
'NIST SP800-20 A.2 #24'),
(SP800_20_A2_PT, '4f644c92e192dfed', '0101010801010101'*3,
'NIST SP800-20 A.2 #25'),
(SP800_20_A2_PT, '1afa9a66a6df92ae', '0101010401010101'*3,
'NIST SP800-20 A.2 #26'),
(SP800_20_A2_PT, 'b3c1cc715cb879d8', '0101010201010101'*3,
'NIST SP800-20 A.2 #27'),
(SP800_20_A2_PT, '19d032e64ab0bd8b', '0101010180010101'*3,
'NIST SP800-20 A.2 #28'),
(SP800_20_A2_PT, '3cfaa7a7dc8720dc', '0101010140010101'*3,
'NIST SP800-20 A.2 #29'),
(SP800_20_A2_PT, 'b7265f7f447ac6f3', '0101010120010101'*3,
'NIST SP800-20 A.2 #30'),
(SP800_20_A2_PT, '9db73b3c0d163f54', '0101010110010101'*3,
'NIST SP800-20 A.2 #31'),
(SP800_20_A2_PT, '8181b65babf4a975', '0101010108010101'*3,
'NIST SP800-20 A.2 #32'),
(SP800_20_A2_PT, '93c9b64042eaa240', '0101010104010101'*3,
'NIST SP800-20 A.2 #33'),
(SP800_20_A2_PT, '5570530829705592', '0101010102010101'*3,
'NIST SP800-20 A.2 #34'),
(SP800_20_A2_PT, '8638809e878787a0', '0101010101800101'*3,
'NIST SP800-20 A.2 #35'),
(SP800_20_A2_PT, '41b9a79af79ac208', '0101010101400101'*3,
'NIST SP800-20 A.2 #36'),
(SP800_20_A2_PT, '7a9be42f2009a892', '0101010101200101'*3,
'NIST SP800-20 A.2 #37'),
(SP800_20_A2_PT, '29038d56ba6d2745', '0101010101100101'*3,
'NIST SP800-20 A.2 #38'),
(SP800_20_A2_PT, '5495c6abf1e5df51', '0101010101080101'*3,
'NIST SP800-20 A.2 #39'),
(SP800_20_A2_PT, 'ae13dbd561488933', '0101010101040101'*3,
'NIST SP800-20 A.2 #40'),
(SP800_20_A2_PT, '024d1ffa8904e389', '0101010101020101'*3,
'NIST SP800-20 A.2 #41'),
(SP800_20_A2_PT, 'd1399712f99bf02e', '0101010101018001'*3,
'NIST SP800-20 A.2 #42'),
(SP800_20_A2_PT, '14c1d7c1cffec79e', '0101010101014001'*3,
'NIST SP800-20 A.2 #43'),
(SP800_20_A2_PT, '1de5279dae3bed6f', '0101010101012001'*3,
'NIST SP800-20 A.2 #44'),
(SP800_20_A2_PT, 'e941a33f85501303', '0101010101011001'*3,
'NIST SP800-20 A.2 #45'),
(SP800_20_A2_PT, 'da99dbbc9a03f379', '0101010101010801'*3,
'NIST SP800-20 A.2 #46'),
(SP800_20_A2_PT, 'b7fc92f91d8e92e9', '0101010101010401'*3,
'NIST SP800-20 A.2 #47'),
(SP800_20_A2_PT, 'ae8e5caa3ca04e85', '0101010101010201'*3,
'NIST SP800-20 A.2 #48'),
(SP800_20_A2_PT, '9cc62df43b6eed74', '0101010101010180'*3,
'NIST SP800-20 A.2 #49'),
(SP800_20_A2_PT, 'd863dbb5c59a91a0', '0101010101010140'*3,
'NIST SP800-20 A.2 #50'),
(SP800_20_A2_PT, 'a1ab2190545b91d7', '0101010101010120'*3,
'NIST SP800-20 A.2 #51'),
(SP800_20_A2_PT, '0875041e64c570f7', '0101010101010110'*3,
'NIST SP800-20 A.2 #52'),
(SP800_20_A2_PT, '5a594528bebef1cc', '0101010101010108'*3,
'NIST SP800-20 A.2 #53'),
(SP800_20_A2_PT, 'fcdb3291de21f0c0', '0101010101010104'*3,
'NIST SP800-20 A.2 #54'),
(SP800_20_A2_PT, '869efd7f9f265a09', '0101010101010102'*3,
'NIST SP800-20 A.2 #55'),
 
]
 
def get_tests():
from CryptoPlus.Cipher import DES3
from common import make_block_tests
return make_block_tests(DES3, "DES3", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/__init__.py
0,0 → 1,53
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/__init__.py: Self-test for cipher modules
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for cipher modules"""
 
__revision__ = "$Id$"
 
def get_tests():
tests = []
import test_python_AES; tests += test_python_AES.get_tests()
import test_AES; tests += test_AES.get_tests()
import test_ARC2; tests += test_ARC2.get_tests()
import test_ARC4; tests += test_ARC4.get_tests()
import test_Blowfish; tests += test_Blowfish.get_tests()
import test_CAST; tests += test_CAST.get_tests()
import test_DES3; tests += test_DES3.get_tests()
import test_DES; tests += test_DES.get_tests()
import test_IDEA; tests += test_IDEA.get_tests()
import test_RC5; tests += test_RC5.get_tests()
import test_XOR; tests += test_XOR.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_IDEA.py
0,0 → 1,87
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/IDEA.py: Self-test for the IDEA cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.IDEA"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
test_data = [
# Test vectors from
# http://web.archive.org/web/20001006183113/http://www.it-sec.com/pdffiles/testdata.zip
 
# Test_Cases_IDEA.txt
('d53fabbf94ff8b5f', '1d0cb2af1654820a', '729a27ed8f5c3e8baf16560d14c90b43'),
('848f836780938169', 'd7e0468226d0fc56', '729a27ed8f5c3e8baf16560d14c90b43'),
('819440ca2065d112', '264a8bba66959075', '729a27ed8f5c3e8baf16560d14c90b43'),
('6889f5647ab23d59', 'f963468b52f45d4d', '729a27ed8f5c3e8baf16560d14c90b43'),
('df8c6fc637e3dad1', '29358cc6c83828ae', '729a27ed8f5c3e8baf16560d14c90b43'),
('ac4856242b121589', '95cd92f44bacb72d', '729a27ed8f5c3e8baf16560d14c90b43'),
('cbe465f232f9d85c', 'bce24dc8d0961c44', '729a27ed8f5c3e8baf16560d14c90b43'),
('6c2e3617da2bac35', '1569e0627007b12e', '729a27ed8f5c3e8baf16560d14c90b43'),
 
# NewTestCases.txt
('d53fabbf94ff8b5f', '1320f99bfe052804', '000027ed8f5c3e8baf16560d14c90b43'),
('848f836780938169', '4821b99f61acebb7', '000027ed8f5c3e8baf16560d14c90b43'),
('819440ca2065d112', 'c88600093b348575', '000027ed8f5c3e8baf16560d14c90b43'),
('6889f5647ab23d59', '61d5397046f99637', '000027ed8f5c3e8baf16560d14c90b43'),
('df8c6fc637e3dad1', 'ef4899b48de5907c', '000027ed8f5c3e8baf16560d14c90b43'),
('ac4856242b121589', '85c6b232294c2f27', '000027ed8f5c3e8baf16560d14c90b43'),
('cbe465f232f9d85c', 'b67ac767c0c06a55', '000027ed8f5c3e8baf16560d14c90b43'),
('6c2e3617da2bac35', 'b2229067630f7045', '000027ed8f5c3e8baf16560d14c90b43'),
 
('0000abbf94ff8b5f', '65861be574e1eab6', '729a27ed8f5c3e8baf16560d14c90b43'),
('848f836780938169', 'd7e0468226d0fc56', '729a27ed8f5c3e8baf16560d14c90b43'),
('819440ca2065d112', '264a8bba66959075', '729a27ed8f5c3e8baf16560d14c90b43'),
('6889f5647ab23d59', 'f963468b52f45d4d', '729a27ed8f5c3e8baf16560d14c90b43'),
('df8c6fc637e3dad1', '29358cc6c83828ae', '729a27ed8f5c3e8baf16560d14c90b43'),
('ac4856242b121589', '95cd92f44bacb72d', '729a27ed8f5c3e8baf16560d14c90b43'),
('cbe465f232f9d85c', 'bce24dc8d0961c44', '729a27ed8f5c3e8baf16560d14c90b43'),
('6c2e3617da2bac35', '1569e0627007b12e', '729a27ed8f5c3e8baf16560d14c90b43'),
 
('0000abbf94ff8b5f', 'cbbb2e6c05ee8c89', '000027ed8f5c3e8baf16560d14c90b43'),
('848f836780938169', '4821b99f61acebb7', '000027ed8f5c3e8baf16560d14c90b43'),
('819440ca2065d112', 'c88600093b348575', '000027ed8f5c3e8baf16560d14c90b43'),
('6889f5647ab23d59', '61d5397046f99637', '000027ed8f5c3e8baf16560d14c90b43'),
('df8c6fc637e3dad1', 'ef4899b48de5907c', '000027ed8f5c3e8baf16560d14c90b43'),
('ac4856242b121589', '85c6b232294c2f27', '000027ed8f5c3e8baf16560d14c90b43'),
('cbe465f232f9d85c', 'b67ac767c0c06a55', '000027ed8f5c3e8baf16560d14c90b43'),
('6c2e3617da2bac35', 'b2229067630f7045', '000027ed8f5c3e8baf16560d14c90b43'),
]
 
def get_tests():
from CryptoPlus.Cipher import IDEA
from common import make_block_tests
return make_block_tests(IDEA, "IDEA", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_ARC2.py
0,0 → 1,104
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/ARC2.py: Self-test for the Alleged-RC2 cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.ARC2"""
 
__revision__ = "$Id$"
 
from common import dict # For compatibility with Python 2.1 and 2.2
 
# This is a list of (plaintext, ciphertext, key[, description[, extra_params]]) tuples.
test_data = [
# Test vectors from RFC 2268
 
# 63-bit effective key length
('0000000000000000', 'ebb773f993278eff', '0000000000000000',
'RFC2268-1', dict(effective_keylen=63)),
 
# 64-bit effective key length
('ffffffffffffffff', '278b27e42e2f0d49', 'ffffffffffffffff',
'RFC2268-2', dict(effective_keylen=64)),
('1000000000000001', '30649edf9be7d2c2', '3000000000000000',
'RFC2268-3', dict(effective_keylen=64)),
('0000000000000000', '61a8a244adacccf0', '88',
'RFC2268-4', dict(effective_keylen=64)),
('0000000000000000', '6ccf4308974c267f', '88bca90e90875a',
'RFC2268-5', dict(effective_keylen=64)),
('0000000000000000', '1a807d272bbe5db1', '88bca90e90875a7f0f79c384627bafb2',
'RFC2268-6', dict(effective_keylen=64)),
 
# 128-bit effective key length
('0000000000000000', '2269552ab0f85ca6', '88bca90e90875a7f0f79c384627bafb2',
"RFC2268-7", dict(effective_keylen=128)),
('0000000000000000', '5b78d3a43dfff1f1',
'88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e',
"RFC2268-8", dict(effective_keylen=129)),
 
# Test vectors from PyCryptoPlus 2.0.1's testdata.py
# 1024-bit effective key length
('0000000000000000', '624fb3e887419e48', '5068696c6970476c617373',
'PCTv201-0',dict(effective_keylen=1024)),
('ffffffffffffffff', '79cadef44c4a5a85', '5068696c6970476c617373',
'PCTv201-1',dict(effective_keylen=1024)),
('0001020304050607', '90411525b34e4c2c', '5068696c6970476c617373',
'PCTv201-2',dict(effective_keylen=1024)),
('0011223344556677', '078656aaba61cbfb', '5068696c6970476c617373',
'PCTv201-3',dict(effective_keylen=1024)),
('0000000000000000', 'd7bcc5dbb4d6e56a', 'ffffffffffffffff', 'PCTv201-4',dict(effective_keylen=1024)),
('ffffffffffffffff', '7259018ec557b357', 'ffffffffffffffff', 'PCTv201-5',dict(effective_keylen=1024)),
('0001020304050607', '93d20a497f2ccb62', 'ffffffffffffffff', 'PCTv201-6',dict(effective_keylen=1024)),
('0011223344556677', 'cb15a7f819c0014d', 'ffffffffffffffff', 'PCTv201-7',dict(effective_keylen=1024)),
('0000000000000000', '63ac98cdf3843a7a',
'ffffffffffffffff5065746572477265656e6177617953e5ffe553',
'PCTv201-8',dict(effective_keylen=1024)),
('ffffffffffffffff', '3fb49e2fa12371dd',
'ffffffffffffffff5065746572477265656e6177617953e5ffe553',
'PCTv201-9',dict(effective_keylen=1024)),
('0001020304050607', '46414781ab387d5f',
'ffffffffffffffff5065746572477265656e6177617953e5ffe553',
'PCTv201-10',dict(effective_keylen=1024)),
('0011223344556677', 'be09dc81feaca271',
'ffffffffffffffff5065746572477265656e6177617953e5ffe553',
'PCTv201-11',dict(effective_keylen=1024)),
('0000000000000000', 'e64221e608be30ab', '53e5ffe553', 'PCTv201-12',dict(effective_keylen=1024)),
('ffffffffffffffff', '862bc60fdcd4d9a9', '53e5ffe553', 'PCTv201-13',dict(effective_keylen=1024)),
('0001020304050607', '6a34da50fa5e47de', '53e5ffe553', 'PCTv201-14',dict(effective_keylen=1024)),
('0011223344556677', '584644c34503122c', '53e5ffe553', 'PCTv201-15',dict(effective_keylen=1024)),
]
 
def get_tests():
from CryptoPlus.Cipher import ARC2
from common import make_block_tests
return make_block_tests(ARC2, "ARC2", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_AES.py
0,0 → 1,1094
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/AES.py: Self-test for the AES cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.AES"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
test_data = [
# FIPS PUB 197 test vectors
# http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
 
('00112233445566778899aabbccddeeff', '69c4e0d86a7b0430d8cdb78070b4c55a',
'000102030405060708090a0b0c0d0e0f', 'FIPS 197 C.1 (AES-128)'),
 
('00112233445566778899aabbccddeeff', 'dda97ca4864cdfe06eaf70a0ec0d7191',
'000102030405060708090a0b0c0d0e0f1011121314151617',
'FIPS 197 C.2 (AES-192)'),
 
('00112233445566778899aabbccddeeff', '8ea2b7ca516745bfeafc49904b496089',
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f',
'FIPS 197 C.3 (AES-256)'),
 
# Rijndael128 test vectors
# Downloaded 2008-09-13 from
# http://www.iaik.tugraz.at/Research/krypto/AES/old/~rijmen/rijndael/testvalues.tar.gz
 
# ecb_tbl.txt, KEYSIZE=128
('506812a45f08c889b97f5980038b8359', 'd8f532538289ef7d06b506a4fd5be9c9',
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=1'),
('5c6d71ca30de8b8b00549984d2ec7d4b', '59ab30f4d4ee6e4ff9907ef65b1fb68c',
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=2'),
('53f3f4c64f8616e4e7c56199f48f21f6', 'bf1ed2fcb2af3fd41443b56d85025cb1',
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=3'),
('a1eb65a3487165fb0f1c27ff9959f703', '7316632d5c32233edcb0780560eae8b2',
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=4'),
('3553ecf0b1739558b08e350a98a39bfa', '408c073e3e2538072b72625e68b8364b',
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=5'),
('67429969490b9711ae2b01dc497afde8', 'e1f94dfa776597beaca262f2f6366fea',
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=6'),
('93385c1f2aec8bed192f5a8e161dd508', 'f29e986c6a1c27d7b29ffd7ee92b75f1',
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=7'),
('b5bf946be19beb8db3983b5f4c6e8ddb', '131c886a57f8c2e713aba6955e2b55b5',
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=8'),
('41321ee10e21bd907227c4450ff42324', 'd2ab7662df9b8c740210e5eeb61c199d',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=9'),
('00a82f59c91c8486d12c0a80124f6089', '14c10554b2859c484cab5869bbe7c470',
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', 'ecb-tbl-128: I=10'),
('7ce0fd076754691b4bbd9faf8a1372fe', 'db4d498f0a49cf55445d502c1f9ab3b5',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9da', 'ecb-tbl-128: I=11'),
('23605a8243d07764541bc5ad355b3129', '6d96fef7d66590a77a77bb2056667f7f',
'dcdddedfe1e2e3e4e6e7e8e9ebecedee', 'ecb-tbl-128: I=12'),
('12a8cfa23ea764fd876232b4e842bc44', '316fb68edba736c53e78477bf913725c',
'f0f1f2f3f5f6f7f8fafbfcfdfe010002', 'ecb-tbl-128: I=13'),
('bcaf32415e8308b3723e5fdd853ccc80', '6936f2b93af8397fd3a771fc011c8c37',
'04050607090a0b0c0e0f101113141516', 'ecb-tbl-128: I=14'),
('89afae685d801ad747ace91fc49adde0', 'f3f92f7a9c59179c1fcc2c2ba0b082cd',
'2c2d2e2f31323334363738393b3c3d3e', 'ecb-tbl-128: I=15'),
('f521d07b484357c4a69e76124a634216', '6a95ea659ee3889158e7a9152ff04ebc',
'40414243454647484a4b4c4d4f505152', 'ecb-tbl-128: I=16'),
('3e23b3bc065bcc152407e23896d77783', '1959338344e945670678a5d432c90b93',
'54555657595a5b5c5e5f606163646566', 'ecb-tbl-128: I=17'),
('79f0fba002be1744670e7e99290d8f52', 'e49bddd2369b83ee66e6c75a1161b394',
'68696a6b6d6e6f70727374757778797a', 'ecb-tbl-128: I=18'),
('da23fe9d5bd63e1d72e3dafbe21a6c2a', 'd3388f19057ff704b70784164a74867d',
'7c7d7e7f81828384868788898b8c8d8e', 'ecb-tbl-128: I=19'),
('e3f5698ba90b6a022efd7db2c7e6c823', '23aa03e2d5e4cd24f3217e596480d1e1',
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', 'ecb-tbl-128: I=20'),
('bdc2691d4f1b73d2700679c3bcbf9c6e', 'c84113d68b666ab2a50a8bdb222e91b9',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2', 'ecb-tbl-128: I=21'),
('ba74e02093217ee1ba1b42bd5624349a', 'ac02403981cd4340b507963db65cb7b6',
'08090a0b0d0e0f10121314151718191a', 'ecb-tbl-128: I=22'),
('b5c593b5851c57fbf8b3f57715e8f680', '8d1299236223359474011f6bf5088414',
'6c6d6e6f71727374767778797b7c7d7e', 'ecb-tbl-128: I=23'),
('3da9bd9cec072381788f9387c3bbf4ee', '5a1d6ab8605505f7977e55b9a54d9b90',
'80818283858687888a8b8c8d8f909192', 'ecb-tbl-128: I=24'),
('4197f3051121702ab65d316b3c637374', '72e9c2d519cf555e4208805aabe3b258',
'94959697999a9b9c9e9fa0a1a3a4a5a6', 'ecb-tbl-128: I=25'),
('9f46c62ec4f6ee3f6e8c62554bc48ab7', 'a8f3e81c4a23a39ef4d745dffe026e80',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9ba', 'ecb-tbl-128: I=26'),
('0220673fe9e699a4ebc8e0dbeb6979c8', '546f646449d31458f9eb4ef5483aee6c',
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdce', 'ecb-tbl-128: I=27'),
('b2b99171337ded9bc8c2c23ff6f18867', '4dbe4bc84ac797c0ee4efb7f1a07401c',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2', 'ecb-tbl-128: I=28'),
('a7facf4e301e984e5efeefd645b23505', '25e10bfb411bbd4d625ac8795c8ca3b3',
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', 'ecb-tbl-128: I=29'),
('f7c762e4a9819160fd7acfb6c4eedcdd', '315637405054ec803614e43def177579',
'f8f9fafbfdfefe00020304050708090a', 'ecb-tbl-128: I=30'),
('9b64fc21ea08709f4915436faa70f1be', '60c5bc8a1410247295c6386c59e572a8',
'0c0d0e0f11121314161718191b1c1d1e', 'ecb-tbl-128: I=31'),
('52af2c3de07ee6777f55a4abfc100b3f', '01366fc8ca52dfe055d6a00a76471ba6',
'20212223252627282a2b2c2d2f303132', 'ecb-tbl-128: I=32'),
('2fca001224386c57aa3f968cbe2c816f', 'ecc46595516ec612449c3f581e7d42ff',
'34353637393a3b3c3e3f404143444546', 'ecb-tbl-128: I=33'),
('4149c73658a4a9c564342755ee2c132f', '6b7ffe4c602a154b06ee9c7dab5331c9',
'48494a4b4d4e4f50525354555758595a', 'ecb-tbl-128: I=34'),
('af60005a00a1772f7c07a48a923c23d2', '7da234c14039a240dd02dd0fbf84eb67',
'5c5d5e5f61626364666768696b6c6d6e', 'ecb-tbl-128: I=35'),
('6fccbc28363759914b6f0280afaf20c6', 'c7dc217d9e3604ffe7e91f080ecd5a3a',
'70717273757677787a7b7c7d7f808182', 'ecb-tbl-128: I=36'),
('7d82a43ddf4fefa2fc5947499884d386', '37785901863f5c81260ea41e7580cda5',
'84858687898a8b8c8e8f909193949596', 'ecb-tbl-128: I=37'),
('5d5a990eaab9093afe4ce254dfa49ef9', 'a07b9338e92ed105e6ad720fccce9fe4',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aa', 'ecb-tbl-128: I=38'),
('4cd1e2fd3f4434b553aae453f0ed1a02', 'ae0fb9722418cc21a7da816bbc61322c',
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbe', 'ecb-tbl-128: I=39'),
('5a2c9a9641d4299125fa1b9363104b5e', 'c826a193080ff91ffb21f71d3373c877',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2', 'ecb-tbl-128: I=40'),
('b517fe34c0fa217d341740bfd4fe8dd4', '1181b11b0e494e8d8b0aa6b1d5ac2c48',
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', 'ecb-tbl-128: I=41'),
('014baf2278a69d331d5180103643e99a', '6743c3d1519ab4f2cd9a78ab09a511bd',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fa', 'ecb-tbl-128: I=42'),
('b529bd8164f20d0aa443d4932116841c', 'dc55c076d52bacdf2eefd952946a439d',
'fcfdfeff01020304060708090b0c0d0e', 'ecb-tbl-128: I=43'),
('2e596dcbb2f33d4216a1176d5bd1e456', '711b17b590ffc72b5c8e342b601e8003',
'10111213151617181a1b1c1d1f202122', 'ecb-tbl-128: I=44'),
('7274a1ea2b7ee2424e9a0e4673689143', '19983bb0950783a537e1339f4aa21c75',
'24252627292a2b2c2e2f303133343536', 'ecb-tbl-128: I=45'),
('ae20020bd4f13e9d90140bee3b5d26af', '3ba7762e15554169c0f4fa39164c410c',
'38393a3b3d3e3f40424344454748494a', 'ecb-tbl-128: I=46'),
('baac065da7ac26e855e79c8849d75a02', 'a0564c41245afca7af8aa2e0e588ea89',
'4c4d4e4f51525354565758595b5c5d5e', 'ecb-tbl-128: I=47'),
('7c917d8d1d45fab9e2540e28832540cc', '5e36a42a2e099f54ae85ecd92e2381ed',
'60616263656667686a6b6c6d6f707172', 'ecb-tbl-128: I=48'),
('bde6f89e16daadb0e847a2a614566a91', '770036f878cd0f6ca2268172f106f2fe',
'74757677797a7b7c7e7f808183848586', 'ecb-tbl-128: I=49'),
('c9de163725f1f5be44ebb1db51d07fbc', '7e4e03908b716116443ccf7c94e7c259',
'88898a8b8d8e8f90929394959798999a', 'ecb-tbl-128: I=50'),
('3af57a58f0c07dffa669572b521e2b92', '482735a48c30613a242dd494c7f9185d',
'9c9d9e9fa1a2a3a4a6a7a8a9abacadae', 'ecb-tbl-128: I=51'),
('3d5ebac306dde4604f1b4fbbbfcdae55', 'b4c0f6c9d4d7079addf9369fc081061d',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2', 'ecb-tbl-128: I=52'),
('c2dfa91bceb76a1183c995020ac0b556', 'd5810fe0509ac53edcd74f89962e6270',
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', 'ecb-tbl-128: I=53'),
('c70f54305885e9a0746d01ec56c8596b', '03f17a16b3f91848269ecdd38ebb2165',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9ea', 'ecb-tbl-128: I=54'),
('c4f81b610e98012ce000182050c0c2b2', 'da1248c3180348bad4a93b4d9856c9df',
'ecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', 'ecb-tbl-128: I=55'),
('eaab86b1d02a95d7404eff67489f97d4', '3d10d7b63f3452c06cdf6cce18be0c2c',
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=56'),
('7c55bdb40b88870b52bec3738de82886', '4ab823e7477dfddc0e6789018fcb6258',
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=57'),
('ba6eaa88371ff0a3bd875e3f2a975ce0', 'e6478ba56a77e70cfdaa5c843abde30e',
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=58'),
('08059130c4c24bd30cf0575e4e0373dc', '1673064895fbeaf7f09c5429ff75772d',
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=59'),
('9a8eab004ef53093dfcf96f57e7eda82', '4488033ae9f2efd0ca9383bfca1a94e9',
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=60'),
('0745b589e2400c25f117b1d796c28129', '978f3b8c8f9d6f46626cac3c0bcb9217',
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=61'),
('2f1777781216cec3f044f134b1b92bbe', 'e08c8a7e582e15e5527f1d9e2eecb236',
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=62'),
('353a779ffc541b3a3805d90ce17580fc', 'cec155b76ac5ffda4cf4f9ca91e49a7a',
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=63'),
('1a1eae4415cefcf08c4ac1c8f68bea8f', 'd5ac7165763225dd2a38cdc6862c29ad',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=64'),
('e6e7e4e5b0b3b2b5d4d5aaab16111013', '03680fe19f7ce7275452020be70e8204',
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6', 'ecb-tbl-128: I=65'),
('f8f9fafbfbf8f9e677767170efe0e1e2', '461df740c9781c388e94bb861ceb54f6',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9da', 'ecb-tbl-128: I=66'),
('63626160a1a2a3a445444b4a75727370', '451bd60367f96483042742219786a074',
'dcdddedfe1e2e3e4e6e7e8e9ebecedee', 'ecb-tbl-128: I=67'),
('717073720605040b2d2c2b2a05fafbf9', 'e4dfa42671a02e57ef173b85c0ea9f2b',
'f0f1f2f3f5f6f7f8fafbfcfdfe010002', 'ecb-tbl-128: I=68'),
('78797a7beae9e8ef3736292891969794', 'ed11b89e76274282227d854700a78b9e',
'04050607090a0b0c0e0f101113141516', 'ecb-tbl-128: I=69'),
('838281803231300fdddcdbdaa0afaead', '433946eaa51ea47af33895f2b90b3b75',
'18191a1b1d1e1f20222324252728292a', 'ecb-tbl-128: I=70'),
('18191a1bbfbcbdba75747b7a7f78797a', '6bc6d616a5d7d0284a5910ab35022528',
'2c2d2e2f31323334363738393b3c3d3e', 'ecb-tbl-128: I=71'),
('848586879b989996a3a2a5a4849b9a99', 'd2a920ecfe919d354b5f49eae9719c98',
'40414243454647484a4b4c4d4f505152', 'ecb-tbl-128: I=72'),
('0001020322212027cacbf4f551565754', '3a061b17f6a92885efbd0676985b373d',
'54555657595a5b5c5e5f606163646566', 'ecb-tbl-128: I=73'),
('cecfcccdafacadb2515057564a454447', 'fadeec16e33ea2f4688499d157e20d8f',
'68696a6b6d6e6f70727374757778797a', 'ecb-tbl-128: I=74'),
('92939091cdcecfc813121d1c80878685', '5cdefede59601aa3c3cda36fa6b1fa13',
'7c7d7e7f81828384868788898b8c8d8e', 'ecb-tbl-128: I=75'),
('d2d3d0d16f6c6d6259585f5ed1eeefec', '9574b00039844d92ebba7ee8719265f8',
'90919293959697989a9b9c9d9fa0a1a2', 'ecb-tbl-128: I=76'),
('acadaeaf878485820f0e1110d5d2d3d0', '9a9cf33758671787e5006928188643fa',
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6', 'ecb-tbl-128: I=77'),
('9091929364676619e6e7e0e1757a7b78', '2cddd634c846ba66bb46cbfea4a674f9',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9ca', 'ecb-tbl-128: I=78'),
('babbb8b98a89888f74757a7b92959497', 'd28bae029393c3e7e26e9fafbbb4b98f',
'cccdcecfd1d2d3d4d6d7d8d9dbdcddde', 'ecb-tbl-128: I=79'),
('8d8c8f8e6e6d6c633b3a3d3ccad5d4d7', 'ec27529b1bee0a9ab6a0d73ebc82e9b7',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2', 'ecb-tbl-128: I=80'),
('86878485010203040808f7f767606162', '3cb25c09472aff6ee7e2b47ccd7ccb17',
'f4f5f6f7f9fafbfcfefe010103040506', 'ecb-tbl-128: I=81'),
('8e8f8c8d656667788a8b8c8d010e0f0c', 'dee33103a7283370d725e44ca38f8fe5',
'08090a0b0d0e0f10121314151718191a', 'ecb-tbl-128: I=82'),
('c8c9cacb858687807a7b7475e7e0e1e2', '27f9bcd1aac64bffc11e7815702c1a69',
'1c1d1e1f21222324262728292b2c2d2e', 'ecb-tbl-128: I=83'),
('6d6c6f6e5053525d8c8d8a8badd2d3d0', '5df534ffad4ed0749a9988e9849d0021',
'30313233353637383a3b3c3d3f404142', 'ecb-tbl-128: I=84'),
('28292a2b393a3b3c0607181903040506', 'a48bee75db04fb60ca2b80f752a8421b',
'44454647494a4b4c4e4f505153545556', 'ecb-tbl-128: I=85'),
('a5a4a7a6b0b3b28ddbdadddcbdb2b3b0', '024c8cf70bc86ee5ce03678cb7af45f9',
'58595a5b5d5e5f60626364656768696a', 'ecb-tbl-128: I=86'),
('323330316467666130313e3f2c2b2a29', '3c19ac0f8a3a3862ce577831301e166b',
'6c6d6e6f71727374767778797b7c7d7e', 'ecb-tbl-128: I=87'),
('27262524080b0a05171611100b141516', 'c5e355b796a57421d59ca6be82e73bca',
'80818283858687888a8b8c8d8f909192', 'ecb-tbl-128: I=88'),
('040506074142434435340b0aa3a4a5a6', 'd94033276417abfb05a69d15b6e386e2',
'94959697999a9b9c9e9fa0a1a3a4a5a6', 'ecb-tbl-128: I=89'),
('242526271112130c61606766bdb2b3b0', '24b36559ea3a9b9b958fe6da3e5b8d85',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9ba', 'ecb-tbl-128: I=90'),
('4b4a4948252627209e9f9091cec9c8cb', '20fd4feaa0e8bf0cce7861d74ef4cb72',
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdce', 'ecb-tbl-128: I=91'),
('68696a6b6665646b9f9e9998d9e6e7e4', '350e20d5174277b9ec314c501570a11d',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2', 'ecb-tbl-128: I=92'),
('34353637c5c6c7c0f0f1eeef7c7b7a79', '87a29d61b7c604d238fe73045a7efd57',
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6', 'ecb-tbl-128: I=93'),
('32333031c2c1c13f0d0c0b0a050a0b08', '2c3164c1cc7d0064816bdc0faa362c52',
'f8f9fafbfdfefe00020304050708090a', 'ecb-tbl-128: I=94'),
('cdcccfcebebdbcbbabaaa5a4181f1e1d', '195fe5e8a05a2ed594f6e4400eee10b3',
'0c0d0e0f11121314161718191b1c1d1e', 'ecb-tbl-128: I=95'),
('212023223635343ba0a1a6a7445b5a59', 'e4663df19b9a21a5a284c2bd7f905025',
'20212223252627282a2b2c2d2f303132', 'ecb-tbl-128: I=96'),
('0e0f0c0da8abaaad2f2e515002050407', '21b88714cfb4e2a933bd281a2c4743fd',
'34353637393a3b3c3e3f404143444546', 'ecb-tbl-128: I=97'),
('070605042a2928378e8f8889bdb2b3b0', 'cbfc3980d704fd0fc54378ab84e17870',
'48494a4b4d4e4f50525354555758595a', 'ecb-tbl-128: I=98'),
('cbcac9c893909196a9a8a7a6a5a2a3a0', 'bc5144baa48bdeb8b63e22e03da418ef',
'5c5d5e5f61626364666768696b6c6d6e', 'ecb-tbl-128: I=99'),
('80818283c1c2c3cc9c9d9a9b0cf3f2f1', '5a1dbaef1ee2984b8395da3bdffa3ccc',
'70717273757677787a7b7c7d7f808182', 'ecb-tbl-128: I=100'),
('1213101125262720fafbe4e5b1b6b7b4', 'f0b11cd0729dfcc80cec903d97159574',
'84858687898a8b8c8e8f909193949596', 'ecb-tbl-128: I=101'),
('7f7e7d7c3033320d97969190222d2c2f', '9f95314acfddc6d1914b7f19a9cc8209',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aa', 'ecb-tbl-128: I=102'),
('4e4f4c4d484b4a4d81808f8e53545556', '595736f6f0f70914a94e9e007f022519',
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbe', 'ecb-tbl-128: I=103'),
('dcdddedfb0b3b2bd15141312a1bebfbc', '1f19f57892cae586fcdfb4c694deb183',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2', 'ecb-tbl-128: I=104'),
('93929190282b2a2dc4c5fafb92959497', '540700ee1f6f3dab0b3eddf6caee1ef5',
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6', 'ecb-tbl-128: I=105'),
('f5f4f7f6c4c7c6d9373631307e717073', '14a342a91019a331687a2254e6626ca2',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fa', 'ecb-tbl-128: I=106'),
('93929190b6b5b4b364656a6b05020300', '7b25f3c3b2eea18d743ef283140f29ff',
'fcfdfeff01020304060708090b0c0d0e', 'ecb-tbl-128: I=107'),
('babbb8b90d0e0f00a4a5a2a3043b3a39', '46c2587d66e5e6fa7f7ca6411ad28047',
'10111213151617181a1b1c1d1f202122', 'ecb-tbl-128: I=108'),
('d8d9dadb7f7c7d7a10110e0f787f7e7d', '09470e72229d954ed5ee73886dfeeba9',
'24252627292a2b2c2e2f303133343536', 'ecb-tbl-128: I=109'),
('fefffcfdefeced923b3a3d3c6768696a', 'd77c03de92d4d0d79ef8d4824ef365eb',
'38393a3b3d3e3f40424344454748494a', 'ecb-tbl-128: I=110'),
('d6d7d4d58a89888f96979899a5a2a3a0', '1d190219f290e0f1715d152d41a23593',
'4c4d4e4f51525354565758595b5c5d5e', 'ecb-tbl-128: I=111'),
('18191a1ba8abaaa5303136379b848586', 'a2cd332ce3a0818769616292e87f757b',
'60616263656667686a6b6c6d6f707172', 'ecb-tbl-128: I=112'),
('6b6a6968a4a7a6a1d6d72829b0b7b6b5', 'd54afa6ce60fbf9341a3690e21385102',
'74757677797a7b7c7e7f808183848586', 'ecb-tbl-128: I=113'),
('000102038a89889755545352a6a9a8ab', '06e5c364ded628a3f5e05e613e356f46',
'88898a8b8d8e8f90929394959798999a', 'ecb-tbl-128: I=114'),
('2d2c2f2eb3b0b1b6b6b7b8b9f2f5f4f7', 'eae63c0e62556dac85d221099896355a',
'9c9d9e9fa1a2a3a4a6a7a8a9abacadae', 'ecb-tbl-128: I=115'),
('979695943536373856575051e09f9e9d', '1fed060e2c6fc93ee764403a889985a2',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2', 'ecb-tbl-128: I=116'),
('a4a5a6a7989b9a9db1b0afae7a7d7c7f', 'c25235c1a30fdec1c7cb5c5737b2a588',
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6', 'ecb-tbl-128: I=117'),
('c1c0c3c2686b6a55a8a9aeafeae5e4e7', '796dbef95147d4d30873ad8b7b92efc0',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9ea', 'ecb-tbl-128: I=118'),
('c1c0c3c2141716118c8d828364636261', 'cbcf0fb34d98d0bd5c22ce37211a46bf',
'ecedeeeff1f2f3f4f6f7f8f9fbfcfdfe', 'ecb-tbl-128: I=119'),
('93929190cccfcec196979091e0fffefd', '94b44da6466126cafa7c7fd09063fc24',
'00010203050607080a0b0c0d0f101112', 'ecb-tbl-128: I=120'),
('b4b5b6b7f9fafbfc25241b1a6e69686b', 'd78c5b5ebf9b4dbda6ae506c5074c8fe',
'14151617191a1b1c1e1f202123242526', 'ecb-tbl-128: I=121'),
('868784850704051ac7c6c1c08788898a', '6c27444c27204b043812cf8cf95f9769',
'28292a2b2d2e2f30323334353738393a', 'ecb-tbl-128: I=122'),
('f4f5f6f7aaa9a8affdfcf3f277707172', 'be94524ee5a2aa50bba8b75f4c0aebcf',
'3c3d3e3f41424344464748494b4c4d4e', 'ecb-tbl-128: I=123'),
('d3d2d1d00605040bc3c2c5c43e010003', 'a0aeaae91ba9f31f51aeb3588cf3a39e',
'50515253555657585a5b5c5d5f606162', 'ecb-tbl-128: I=124'),
('73727170424140476a6b74750d0a0b08', '275297779c28266ef9fe4c6a13c08488',
'64656667696a6b6c6e6f707173747576', 'ecb-tbl-128: I=125'),
('c2c3c0c10a0908f754555253a1aeafac', '86523d92bb8672cb01cf4a77fd725882',
'78797a7b7d7e7f80828384858788898a', 'ecb-tbl-128: I=126'),
('6d6c6f6ef8fbfafd82838c8df8fffefd', '4b8327640e9f33322a04dd96fcbf9a36',
'8c8d8e8f91929394969798999b9c9d9e', 'ecb-tbl-128: I=127'),
('f5f4f7f684878689a6a7a0a1d2cdcccf', 'ce52af650d088ca559425223f4d32694',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2', 'ecb-tbl-128: I=128'),
 
# ecb_tbl.txt, KEYSIZE=192
('2d33eef2c0430a8a9ebf45e809c40bb6', 'dff4945e0336df4c1c56bc700eff837f',
'00010203050607080a0b0c0d0f10111214151617191a1b1c',
'ecb-tbl-192: I=1'),
('6aa375d1fa155a61fb72353e0a5a8756', 'b6fddef4752765e347d5d2dc196d1252',
'1e1f20212324252628292a2b2d2e2f30323334353738393a',
'ecb-tbl-192: I=2'),
('bc3736518b9490dcb8ed60eb26758ed4', 'd23684e3d963b3afcf1a114aca90cbd6',
'3c3d3e3f41424344464748494b4c4d4e5051525355565758',
'ecb-tbl-192: I=3'),
('aa214402b46cffb9f761ec11263a311e', '3a7ac027753e2a18c2ceab9e17c11fd0',
'5a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-192: I=4'),
('02aea86e572eeab66b2c3af5e9a46fd6', '8f6786bd007528ba26603c1601cdd0d8',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394',
'ecb-tbl-192: I=5'),
('e2aef6acc33b965c4fa1f91c75ff6f36', 'd17d073b01e71502e28b47ab551168b3',
'969798999b9c9d9ea0a1a2a3a5a6a7a8aaabacadafb0b1b2',
'ecb-tbl-192: I=6'),
('0659df46427162b9434865dd9499f91d', 'a469da517119fab95876f41d06d40ffa',
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6c8c9cacbcdcecfd0',
'ecb-tbl-192: I=7'),
('49a44239c748feb456f59c276a5658df', '6091aa3b695c11f5c0b6ad26d3d862ff',
'd2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-192: I=8'),
('66208f6e9d04525bdedb2733b6a6be37', '70f9e67f9f8df1294131662dc6e69364',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c',
'ecb-tbl-192: I=9'),
('3393f8dfc729c97f5480b950bc9666b0', 'd154dcafad8b207fa5cbc95e9996b559',
'0e0f10111314151618191a1b1d1e1f20222324252728292a',
'ecb-tbl-192: I=10'),
('606834c8ce063f3234cf1145325dbd71', '4934d541e8b46fa339c805a7aeb9e5da',
'2c2d2e2f31323334363738393b3c3d3e4041424345464748',
'ecb-tbl-192: I=11'),
('fec1c04f529bbd17d8cecfcc4718b17f', '62564c738f3efe186e1a127a0c4d3c61',
'4a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-192: I=12'),
('32df99b431ed5dc5acf8caf6dc6ce475', '07805aa043986eb23693e23bef8f3438',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384',
'ecb-tbl-192: I=13'),
('7fdc2b746f3f665296943b83710d1f82', 'df0b4931038bade848dee3b4b85aa44b',
'868788898b8c8d8e90919293959697989a9b9c9d9fa0a1a2',
'ecb-tbl-192: I=14'),
('8fba1510a3c5b87e2eaa3f7a91455ca2', '592d5fded76582e4143c65099309477c',
'a4a5a6a7a9aaabacaeafb0b1b3b4b5b6b8b9babbbdbebfc0',
'ecb-tbl-192: I=15'),
('2c9b468b1c2eed92578d41b0716b223b', 'c9b8d6545580d3dfbcdd09b954ed4e92',
'c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde',
'ecb-tbl-192: I=16'),
('0a2bbf0efc6bc0034f8a03433fca1b1a', '5dccd5d6eb7c1b42acb008201df707a0',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfc',
'ecb-tbl-192: I=17'),
('25260e1f31f4104d387222e70632504b', 'a2a91682ffeb6ed1d34340946829e6f9',
'fefe01010304050608090a0b0d0e0f10121314151718191a',
'ecb-tbl-192: I=18'),
('c527d25a49f08a5228d338642ae65137', 'e45d185b797000348d9267960a68435d',
'1c1d1e1f21222324262728292b2c2d2e3031323335363738',
'ecb-tbl-192: I=19'),
('3b49fc081432f5890d0e3d87e884a69e', '45e060dae5901cda8089e10d4f4c246b',
'3a3b3c3d3f40414244454647494a4b4c4e4f505153545556',
'ecb-tbl-192: I=20'),
('d173f9ed1e57597e166931df2754a083', 'f6951afacc0079a369c71fdcff45df50',
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374',
'ecb-tbl-192: I=21'),
('8c2b7cafa5afe7f13562daeae1adede0', '9e95e00f351d5b3ac3d0e22e626ddad6',
'767778797b7c7d7e80818283858687888a8b8c8d8f909192',
'ecb-tbl-192: I=22'),
('aaf4ec8c1a815aeb826cab741339532c', '9cb566ff26d92dad083b51fdc18c173c',
'94959697999a9b9c9e9fa0a1a3a4a5a6a8a9aaabadaeafb0',
'ecb-tbl-192: I=23'),
('40be8c5d9108e663f38f1a2395279ecf', 'c9c82766176a9b228eb9a974a010b4fb',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebec',
'ecb-tbl-192: I=24'),
('0c8ad9bc32d43e04716753aa4cfbe351', 'd8e26aa02945881d5137f1c1e1386e88',
'2a2b2c2d2f30313234353637393a3b3c3e3f404143444546',
'ecb-tbl-192: I=25'),
('1407b1d5f87d63357c8dc7ebbaebbfee', 'c0e024ccd68ff5ffa4d139c355a77c55',
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364',
'ecb-tbl-192: I=26'),
('e62734d1ae3378c4549e939e6f123416', '0b18b3d16f491619da338640df391d43',
'84858687898a8b8c8e8f90919394959698999a9b9d9e9fa0',
'ecb-tbl-192: I=27'),
('5a752cff2a176db1a1de77f2d2cdee41', 'dbe09ac8f66027bf20cb6e434f252efc',
'a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe',
'ecb-tbl-192: I=28'),
('a9c8c3a4eabedc80c64730ddd018cd88', '6d04e5e43c5b9cbe05feb9606b6480fe',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdc',
'ecb-tbl-192: I=29'),
('ee9b3dbbdb86180072130834d305999a', 'dd1d6553b96be526d9fee0fbd7176866',
'1a1b1c1d1f20212224252627292a2b2c2e2f303133343536',
'ecb-tbl-192: I=30'),
('a7fa8c3586b8ebde7568ead6f634a879', '0260ca7e3f979fd015b0dd4690e16d2a',
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354',
'ecb-tbl-192: I=31'),
('37e0f4a87f127d45ac936fe7ad88c10a', '9893734de10edcc8a67c3b110b8b8cc6',
'929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae',
'ecb-tbl-192: I=32'),
('3f77d8b5d92bac148e4e46f697a535c5', '93b30b750516b2d18808d710c2ee84ef',
'464748494b4c4d4e50515253555657585a5b5c5d5f606162',
'ecb-tbl-192: I=33'),
('d25ebb686c40f7e2c4da1014936571ca', '16f65fa47be3cb5e6dfe7c6c37016c0e',
'828384858788898a8c8d8e8f91929394969798999b9c9d9e',
'ecb-tbl-192: I=34'),
('4f1c769d1e5b0552c7eca84dea26a549', 'f3847210d5391e2360608e5acb560581',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbc',
'ecb-tbl-192: I=35'),
('8548e2f882d7584d0fafc54372b6633a', '8754462cd223366d0753913e6af2643d',
'bebfc0c1c3c4c5c6c8c9cacbcdcecfd0d2d3d4d5d7d8d9da',
'ecb-tbl-192: I=36'),
('87d7a336cb476f177cd2a51af2a62cdf', '1ea20617468d1b806a1fd58145462017',
'dcdddedfe1e2e3e4e6e7e8e9ebecedeef0f1f2f3f5f6f7f8',
'ecb-tbl-192: I=37'),
('03b1feac668c4e485c1065dfc22b44ee', '3b155d927355d737c6be9dda60136e2e',
'fafbfcfdfe01000204050607090a0b0c0e0f101113141516',
'ecb-tbl-192: I=38'),
('bda15e66819fa72d653a6866aa287962', '26144f7b66daa91b6333dbd3850502b3',
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334',
'ecb-tbl-192: I=39'),
('4d0c7a0d2505b80bf8b62ceb12467f0a', 'e4f9a4ab52ced8134c649bf319ebcc90',
'363738393b3c3d3e40414243454647484a4b4c4d4f505152',
'ecb-tbl-192: I=40'),
('626d34c9429b37211330986466b94e5f', 'b9ddd29ac6128a6cab121e34a4c62b36',
'54555657595a5b5c5e5f60616364656668696a6b6d6e6f70',
'ecb-tbl-192: I=41'),
('333c3e6bf00656b088a17e5ff0e7f60a', '6fcddad898f2ce4eff51294f5eaaf5c9',
'727374757778797a7c7d7e7f81828384868788898b8c8d8e',
'ecb-tbl-192: I=42'),
('687ed0cdc0d2a2bc8c466d05ef9d2891', 'c9a6fe2bf4028080bea6f7fc417bd7e3',
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabac',
'ecb-tbl-192: I=43'),
('487830e78cc56c1693e64b2a6660c7b6', '6a2026846d8609d60f298a9c0673127f',
'aeafb0b1b3b4b5b6b8b9babbbdbebfc0c2c3c4c5c7c8c9ca',
'ecb-tbl-192: I=44'),
('7a48d6b7b52b29392aa2072a32b66160', '2cb25c005e26efea44336c4c97a4240b',
'cccdcecfd1d2d3d4d6d7d8d9dbdcdddee0e1e2e3e5e6e7e8',
'ecb-tbl-192: I=45'),
('907320e64c8c5314d10f8d7a11c8618d', '496967ab8680ddd73d09a0e4c7dcc8aa',
'eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506',
'ecb-tbl-192: I=46'),
('b561f2ca2d6e65a4a98341f3ed9ff533', 'd5af94de93487d1f3a8c577cb84a66a4',
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324',
'ecb-tbl-192: I=47'),
('df769380d212792d026f049e2e3e48ef', '84bdac569cae2828705f267cc8376e90',
'262728292b2c2d2e30313233353637383a3b3c3d3f404142',
'ecb-tbl-192: I=48'),
('79f374bc445bdabf8fccb8843d6054c6', 'f7401dda5ad5ab712b7eb5d10c6f99b6',
'44454647494a4b4c4e4f50515354555658595a5b5d5e5f60',
'ecb-tbl-192: I=49'),
('4e02f1242fa56b05c68dbae8fe44c9d6', '1c9d54318539ebd4c3b5b7e37bf119f0',
'626364656768696a6c6d6e6f71727374767778797b7c7d7e',
'ecb-tbl-192: I=50'),
('cf73c93cbff57ac635a6f4ad2a4a1545', 'aca572d65fb2764cffd4a6eca090ea0d',
'80818283858687888a8b8c8d8f90919294959697999a9b9c',
'ecb-tbl-192: I=51'),
('9923548e2875750725b886566784c625', '36d9c627b8c2a886a10ccb36eae3dfbb',
'9e9fa0a1a3a4a5a6a8a9aaabadaeafb0b2b3b4b5b7b8b9ba',
'ecb-tbl-192: I=52'),
('4888336b723a022c9545320f836a4207', '010edbf5981e143a81d646e597a4a568',
'bcbdbebfc1c2c3c4c6c7c8c9cbcccdced0d1d2d3d5d6d7d8',
'ecb-tbl-192: I=53'),
('f84d9a5561b0608b1160dee000c41ba8', '8db44d538dc20cc2f40f3067fd298e60',
'dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6',
'ecb-tbl-192: I=54'),
('c23192a0418e30a19b45ae3e3625bf22', '930eb53bc71e6ac4b82972bdcd5aafb3',
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314',
'ecb-tbl-192: I=55'),
('b84e0690b28b0025381ad82a15e501a7', '6c42a81edcbc9517ccd89c30c95597b4',
'161718191b1c1d1e20212223252627282a2b2c2d2f303132',
'ecb-tbl-192: I=56'),
('acef5e5c108876c4f06269f865b8f0b0', 'da389847ad06df19d76ee119c71e1dd3',
'34353637393a3b3c3e3f40414344454648494a4b4d4e4f50',
'ecb-tbl-192: I=57'),
('0f1b3603e0f5ddea4548246153a5e064', 'e018fdae13d3118f9a5d1a647a3f0462',
'525354555758595a5c5d5e5f61626364666768696b6c6d6e',
'ecb-tbl-192: I=58'),
('fbb63893450d42b58c6d88cd3c1809e3', '2aa65db36264239d3846180fabdfad20',
'70717273757677787a7b7c7d7f80818284858687898a8b8c',
'ecb-tbl-192: I=59'),
('4bef736df150259dae0c91354e8a5f92', '1472163e9a4f780f1ceb44b07ecf4fdb',
'8e8f90919394959698999a9b9d9e9fa0a2a3a4a5a7a8a9aa',
'ecb-tbl-192: I=60'),
('7d2d46242056ef13d3c3fc93c128f4c7', 'c8273fdc8f3a9f72e91097614b62397c',
'acadaeafb1b2b3b4b6b7b8b9bbbcbdbec0c1c2c3c5c6c7c8',
'ecb-tbl-192: I=61'),
('e9c1ba2df415657a256edb33934680fd', '66c8427dcd733aaf7b3470cb7d976e3f',
'cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6',
'ecb-tbl-192: I=62'),
('e23ee277b0aa0a1dfb81f7527c3514f1', '146131cb17f1424d4f8da91e6f80c1d0',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304',
'ecb-tbl-192: I=63'),
('3e7445b0b63caaf75e4a911e12106b4c', '2610d0ad83659081ae085266a88770dc',
'060708090b0c0d0e10111213151617181a1b1c1d1f202122',
'ecb-tbl-192: I=64'),
('767774752023222544455a5be6e1e0e3', '38a2b5a974b0575c5d733917fb0d4570',
'24252627292a2b2c2e2f30313334353638393a3b3d3e3f40',
'ecb-tbl-192: I=65'),
('72737475717e7f7ce9e8ebea696a6b6c', 'e21d401ebc60de20d6c486e4f39a588b',
'424344454748494a4c4d4e4f51525354565758595b5c5d5e',
'ecb-tbl-192: I=66'),
('dfdedddc25262728c9c8cfcef1eeefec', 'e51d5f88c670b079c0ca1f0c2c4405a2',
'60616263656667686a6b6c6d6f70717274757677797a7b7c',
'ecb-tbl-192: I=67'),
('fffe0100707776755f5e5d5c7675746b', '246a94788a642fb3d1b823c8762380c8',
'7e7f80818384858688898a8b8d8e8f90929394959798999a',
'ecb-tbl-192: I=68'),
('e0e1e2e3424140479f9e9190292e2f2c', 'b80c391c5c41a4c3b30c68e0e3d7550f',
'9c9d9e9fa1a2a3a4a6a7a8a9abacadaeb0b1b2b3b5b6b7b8',
'ecb-tbl-192: I=69'),
('2120272690efeeed3b3a39384e4d4c4b', 'b77c4754fc64eb9a1154a9af0bb1f21c',
'babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6',
'ecb-tbl-192: I=70'),
('ecedeeef5350516ea1a0a7a6a3acadae', 'fb554de520d159a06bf219fc7f34a02f',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4',
'ecb-tbl-192: I=71'),
('32333c3d25222320e9e8ebeacecdccc3', 'a89fba152d76b4927beed160ddb76c57',
'f6f7f8f9fbfcfdfe00010203050607080a0b0c0d0f101112',
'ecb-tbl-192: I=72'),
('40414243626160678a8bb4b511161714', '5676eab4a98d2e8473b3f3d46424247c',
'14151617191a1b1c1e1f20212324252628292a2b2d2e2f30',
'ecb-tbl-192: I=73'),
('94959293f5fafbf81f1e1d1c7c7f7e79', '4e8f068bd7ede52a639036ec86c33568',
'323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-192: I=74'),
('bebfbcbd191a1b14cfcec9c8546b6a69', 'f0193c4d7aff1791ee4c07eb4a1824fc',
'50515253555657585a5b5c5d5f60616264656667696a6b6c',
'ecb-tbl-192: I=75'),
('2c2d3233898e8f8cbbbab9b8333031ce', 'ac8686eeca9ba761afe82d67b928c33f',
'6e6f70717374757678797a7b7d7e7f80828384858788898a',
'ecb-tbl-192: I=76'),
('84858687bfbcbdba37363938fdfafbf8', '5faf8573e33b145b6a369cd3606ab2c9',
'8c8d8e8f91929394969798999b9c9d9ea0a1a2a3a5a6a7a8',
'ecb-tbl-192: I=77'),
('828384857669686b909192930b08090e', '31587e9944ab1c16b844ecad0df2e7da',
'aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6',
'ecb-tbl-192: I=78'),
('bebfbcbd9695948b707176779e919093', 'd017fecd91148aba37f6f3068aa67d8a',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4',
'ecb-tbl-192: I=79'),
('8b8a85846067666521202322d0d3d2dd', '788ef2f021a73cba2794b616078a8500',
'e6e7e8e9ebecedeef0f1f2f3f5f6f7f8fafbfcfdfe010002',
'ecb-tbl-192: I=80'),
('76777475f1f2f3f4f8f9e6e777707172', '5d1ef20dced6bcbc12131ac7c54788aa',
'04050607090a0b0c0e0f10111314151618191a1b1d1e1f20',
'ecb-tbl-192: I=81'),
('a4a5a2a34f404142b4b5b6b727242522', 'b3c8cf961faf9ea05fdde6d1e4d8f663',
'222324252728292a2c2d2e2f31323334363738393b3c3d3e',
'ecb-tbl-192: I=82'),
('94959697e1e2e3ec16171011839c9d9e', '143075c70605861c7fac6526199e459f',
'40414243454647484a4b4c4d4f50515254555657595a5b5c',
'ecb-tbl-192: I=83'),
('03023d3c06010003dedfdcddfffcfde2', 'a5ae12eade9a87268d898bfc8fc0252a',
'5e5f60616364656668696a6b6d6e6f70727374757778797a',
'ecb-tbl-192: I=84'),
('10111213f1f2f3f4cecfc0c1dbdcddde', '0924f7cf2e877a4819f5244a360dcea9',
'7c7d7e7f81828384868788898b8c8d8e9091929395969798',
'ecb-tbl-192: I=85'),
('67666160724d4c4f1d1c1f1e73707176', '3d9e9635afcc3e291cc7ab3f27d1c99a',
'9a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6',
'ecb-tbl-192: I=86'),
('e6e7e4e5a8abaad584858283909f9e9d', '9d80feebf87510e2b8fb98bb54fd788c',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4',
'ecb-tbl-192: I=87'),
('71707f7e565150537d7c7f7e6162636c', '5f9d1a082a1a37985f174002eca01309',
'd6d7d8d9dbdcdddee0e1e2e3e5e6e7e8eaebecedeff0f1f2',
'ecb-tbl-192: I=88'),
('64656667212223245555aaaa03040506', 'a390ebb1d1403930184a44b4876646e4',
'f4f5f6f7f9fafbfcfefe01010304050608090a0b0d0e0f10',
'ecb-tbl-192: I=89'),
('9e9f9899aba4a5a6cfcecdcc2b28292e', '700fe918981c3195bb6c4bcb46b74e29',
'121314151718191a1c1d1e1f21222324262728292b2c2d2e',
'ecb-tbl-192: I=90'),
('c7c6c5c4d1d2d3dc626364653a454447', '907984406f7bf2d17fb1eb15b673d747',
'30313233353637383a3b3c3d3f40414244454647494a4b4c',
'ecb-tbl-192: I=91'),
('f6f7e8e9e0e7e6e51d1c1f1e5b585966', 'c32a956dcfc875c2ac7c7cc8b8cc26e1',
'4e4f50515354555658595a5b5d5e5f60626364656768696a',
'ecb-tbl-192: I=92'),
('bcbdbebf5d5e5f5868696667f4f3f2f1', '02646e2ebfa9b820cf8424e9b9b6eb51',
'6c6d6e6f71727374767778797b7c7d7e8081828385868788',
'ecb-tbl-192: I=93'),
('40414647b0afaead9b9a99989b98999e', '621fda3a5bbd54c6d3c685816bd4ead8',
'8a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6',
'ecb-tbl-192: I=94'),
('69686b6a0201001f0f0e0908b4bbbab9', 'd4e216040426dfaf18b152469bc5ac2f',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4',
'ecb-tbl-192: I=95'),
('c7c6c9c8d8dfdedd5a5b5859bebdbcb3', '9d0635b9d33b6cdbd71f5d246ea17cc8',
'c6c7c8c9cbcccdced0d1d2d3d5d6d7d8dadbdcdddfe0e1e2',
'ecb-tbl-192: I=96'),
('dedfdcdd787b7a7dfffee1e0b2b5b4b7', '10abad1bd9bae5448808765583a2cc1a',
'e4e5e6e7e9eaebeceeeff0f1f3f4f5f6f8f9fafbfdfefe00',
'ecb-tbl-192: I=97'),
('4d4c4b4a606f6e6dd0d1d2d3fbf8f9fe', '6891889e16544e355ff65a793c39c9a8',
'020304050708090a0c0d0e0f11121314161718191b1c1d1e',
'ecb-tbl-192: I=98'),
('b7b6b5b4d7d4d5dae5e4e3e2e1fefffc', 'cc735582e68072c163cd9ddf46b91279',
'20212223252627282a2b2c2d2f30313234353637393a3b3c',
'ecb-tbl-192: I=99'),
('cecfb0b1f7f0f1f2aeafacad3e3d3c23', 'c5c68b9aeeb7f878df578efa562f9574',
'3e3f40414344454648494a4b4d4e4f50525354555758595a',
'ecb-tbl-192: I=100'),
('cacbc8c9cdcecfc812131c1d494e4f4c', '5f4764395a667a47d73452955d0d2ce8',
'5c5d5e5f61626364666768696b6c6d6e7071727375767778',
'ecb-tbl-192: I=101'),
('9d9c9b9ad22d2c2fb1b0b3b20c0f0e09', '701448331f66106cefddf1eb8267c357',
'7a7b7c7d7f80818284858687898a8b8c8e8f909193949596',
'ecb-tbl-192: I=102'),
('7a7b787964676659959493924f404142', 'cb3ee56d2e14b4e1941666f13379d657',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4',
'ecb-tbl-192: I=103'),
('aaaba4a5cec9c8cb1f1e1d1caba8a9a6', '9fe16efd18ab6e1981191851fedb0764',
'b6b7b8b9bbbcbdbec0c1c2c3c5c6c7c8cacbcccdcfd0d1d2',
'ecb-tbl-192: I=104'),
('93929190282b2a2dc4c5fafb92959497', '3dc9ba24e1b223589b147adceb4c8e48',
'd4d5d6d7d9dadbdcdedfe0e1e3e4e5e6e8e9eaebedeeeff0',
'ecb-tbl-192: I=105'),
('efeee9e8ded1d0d339383b3a888b8a8d', '1c333032682e7d4de5e5afc05c3e483c',
'f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e',
'ecb-tbl-192: I=106'),
('7f7e7d7ca2a1a0af78797e7f112e2f2c', 'd593cc99a95afef7e92038e05a59d00a',
'10111213151617181a1b1c1d1f20212224252627292a2b2c',
'ecb-tbl-192: I=107'),
('84859a9b2b2c2d2e868784852625245b', '51e7f96f53b4353923452c222134e1ec',
'2e2f30313334353638393a3b3d3e3f40424344454748494a',
'ecb-tbl-192: I=108'),
('b0b1b2b3070405026869666710171615', '4075b357a1a2b473400c3b25f32f81a4',
'4c4d4e4f51525354565758595b5c5d5e6061626365666768',
'ecb-tbl-192: I=109'),
('acadaaabbda2a3a00d0c0f0e595a5b5c', '302e341a3ebcd74f0d55f61714570284',
'6a6b6c6d6f70717274757677797a7b7c7e7f808183848586',
'ecb-tbl-192: I=110'),
('121310115655544b5253545569666764', '57abdd8231280da01c5042b78cf76522',
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4',
'ecb-tbl-192: I=111'),
('dedfd0d166616063eaebe8e94142434c', '17f9ea7eea17ac1adf0e190fef799e92',
'a6a7a8a9abacadaeb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2',
'ecb-tbl-192: I=112'),
('dbdad9d81417161166677879e0e7e6e5', '2e1bdd563dd87ee5c338dd6d098d0a7a',
'c4c5c6c7c9cacbcccecfd0d1d3d4d5d6d8d9dadbdddedfe0',
'ecb-tbl-192: I=113'),
('6a6b6c6de0efeeed2b2a2928c0c3c2c5', 'eb869996e6f8bfb2bfdd9e0c4504dbb2',
'e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe',
'ecb-tbl-192: I=114'),
('b1b0b3b21714151a1a1b1c1d5649484b', 'c2e01549e9decf317468b3e018c61ba8',
'00010203050607080a0b0c0d0f10111214151617191a1b1c',
'ecb-tbl-192: I=115'),
('39380706a3a4a5a6c4c5c6c77271706f', '8da875d033c01dd463b244a1770f4a22',
'1e1f20212324252628292a2b2d2e2f30323334353738393a',
'ecb-tbl-192: I=116'),
('5c5d5e5f1013121539383736e2e5e4e7', '8ba0dcf3a186844f026d022f8839d696',
'3c3d3e3f41424344464748494b4c4d4e5051525355565758',
'ecb-tbl-192: I=117'),
('43424544ead5d4d72e2f2c2d64676661', 'e9691ff9a6cc6970e51670a0fd5b88c1',
'5a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-192: I=118'),
('55545756989b9a65f8f9feff18171615', 'f2baec06faeed30f88ee63ba081a6e5b',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394',
'ecb-tbl-192: I=119'),
('05040b0a525554573c3d3e3f4a494847', '9c39d4c459ae5753394d6094adc21e78',
'969798999b9c9d9ea0a1a2a3a5a6a7a8aaabacadafb0b1b2',
'ecb-tbl-192: I=120'),
('14151617595a5b5c8584fbfa8e89888b', '6345b532a11904502ea43ba99c6bd2b2',
'b4b5b6b7b9babbbcbebfc0c1c3c4c5c6c8c9cacbcdcecfd0',
'ecb-tbl-192: I=121'),
('7c7d7a7bfdf2f3f029282b2a51525354', '5ffae3061a95172e4070cedce1e428c8',
'd2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-192: I=122'),
('38393a3b1e1d1c1341404746c23d3c3e', '0a4566be4cdf9adce5dec865b5ab34cd',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c',
'ecb-tbl-192: I=123'),
('8d8c939240474645818083827c7f7e41', 'ca17fcce79b7404f2559b22928f126fb',
'0e0f10111314151618191a1b1d1e1f20222324252728292a',
'ecb-tbl-192: I=124'),
('3b3a39381a19181f32333c3d45424340', '97ca39b849ed73a6470a97c821d82f58',
'2c2d2e2f31323334363738393b3c3d3e4041424345464748',
'ecb-tbl-192: I=125'),
('f0f1f6f738272625828380817f7c7d7a', '8198cb06bc684c6d3e9b7989428dcf7a',
'4a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-192: I=126'),
('89888b8a0407061966676061141b1a19', 'f53c464c705ee0f28d9a4c59374928bd',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384',
'ecb-tbl-192: I=127'),
('d3d2dddcaaadacaf9c9d9e9fe8ebeae5', '9adb3d4cca559bb98c3e2ed73dbf1154',
'868788898b8c8d8e90919293959697989a9b9c9d9fa0a1a2',
'ecb-tbl-192: I=128'),
 
# ecb_tbl.txt, KEYSIZE=256
('834eadfccac7e1b30664b1aba44815ab', '1946dabf6a03a2a2c3d0b05080aed6fc',
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526',
'ecb-tbl-256: I=1'),
('d9dc4dba3021b05d67c0518f72b62bf1', '5ed301d747d3cc715445ebdec62f2fb4',
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-256: I=2'),
('a291d86301a4a739f7392173aa3c604c', '6585c8f43d13a6beab6419fc5935b9d0',
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-256: I=3'),
('4264b2696498de4df79788a9f83e9390', '2a5b56a596680fcc0e05f5e0f151ecae',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e',
'ecb-tbl-256: I=4'),
('ee9932b3721804d5a83ef5949245b6f6', 'f5d6ff414fd2c6181494d20c37f2b8c4',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6',
'ecb-tbl-256: I=5'),
('e6248f55c5fdcbca9cbbb01c88a2ea77', '85399c01f59fffb5204f19f8482f00b8',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-256: I=6'),
('b8358e41b9dff65fd461d55a99266247', '92097b4c88a041ddf98144bc8d22e8e7',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516',
'ecb-tbl-256: I=7'),
('f0e2d72260af58e21e015ab3a4c0d906', '89bd5b73b356ab412aef9f76cea2d65c',
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e',
'ecb-tbl-256: I=8'),
('475b8b823ce8893db3c44a9f2a379ff7', '2536969093c55ff9454692f2fac2f530',
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-256: I=9'),
('688f5281945812862f5f3076cf80412f', '07fc76a872843f3f6e0081ee9396d637',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e',
'ecb-tbl-256: I=10'),
('08d1d2bc750af553365d35e75afaceaa', 'e38ba8ec2aa741358dcc93e8f141c491',
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6',
'ecb-tbl-256: I=11'),
('8707121f47cc3efceca5f9a8474950a1', 'd028ee23e4a89075d0b03e868d7d3a42',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde',
'ecb-tbl-256: I=12'),
('e51aa0b135dba566939c3b6359a980c5', '8cd9423dfc459e547155c5d1d522e540',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506',
'ecb-tbl-256: I=13'),
('069a007fc76a459f98baf917fedf9521', '080e9517eb1677719acf728086040ae3',
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e',
'ecb-tbl-256: I=14'),
('726165c1723fbcf6c026d7d00b091027', '7c1700211a3991fc0ecded0ab3e576b0',
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556',
'ecb-tbl-256: I=15'),
('d7c544de91d55cfcde1f84ca382200ce', 'dabcbcc855839251db51e224fbe87435',
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e',
'ecb-tbl-256: I=16'),
('fed3c9a161b9b5b2bd611b41dc9da357', '68d56fad0406947a4dd27a7448c10f1d',
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6',
'ecb-tbl-256: I=17'),
('4f634cdc6551043409f30b635832cf82', 'da9a11479844d1ffee24bbf3719a9925',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce',
'ecb-tbl-256: I=18'),
('109ce98db0dfb36734d9f3394711b4e6', '5e4ba572f8d23e738da9b05ba24b8d81',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6',
'ecb-tbl-256: I=19'),
('4ea6dfaba2d8a02ffdffa89835987242', 'a115a2065d667e3f0b883837a6e903f8',
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596',
'ecb-tbl-256: I=20'),
('5ae094f54af58e6e3cdbf976dac6d9ef', '3e9e90dc33eac2437d86ad30b137e66e',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe',
'ecb-tbl-256: I=21'),
('764d8e8e0f29926dbe5122e66354fdbe', '01ce82d8fbcdae824cb3c48e495c3692',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6',
'ecb-tbl-256: I=22'),
('3f0418f888cdf29a982bf6b75410d6a9', '0c9cff163ce936faaf083cfd3dea3117',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e',
'ecb-tbl-256: I=23'),
('e4a3e7cb12cdd56aa4a75197a9530220', '5131ba9bd48f2bba85560680df504b52',
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536',
'ecb-tbl-256: I=24'),
('211677684aac1ec1a160f44c4ebf3f26', '9dc503bbf09823aec8a977a5ad26ccb2',
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e',
'ecb-tbl-256: I=25'),
('d21e439ff749ac8f18d6d4b105e03895', '9a6db0c0862e506a9e397225884041d7',
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586',
'ecb-tbl-256: I=26'),
('d9f6ff44646c4725bd4c0103ff5552a7', '430bf9570804185e1ab6365fc6a6860c',
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae',
'ecb-tbl-256: I=27'),
('0b1256c2a00b976250cfc5b0c37ed382', '3525ebc02f4886e6a5a3762813e8ce8a',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6',
'ecb-tbl-256: I=28'),
('b056447ffc6dc4523a36cc2e972a3a79', '07fa265c763779cce224c7bad671027b',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe',
'ecb-tbl-256: I=29'),
('5e25ca78f0de55802524d38da3fe4456', 'e8b72b4e8be243438c9fff1f0e205872',
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526',
'ecb-tbl-256: I=30'),
('a5bcf4728fa5eaad8567c0dc24675f83', '109d4f999a0e11ace1f05e6b22cbcb50',
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-256: I=31'),
('814e59f97ed84646b78b2ca022e9ca43', '45a5e8d4c3ed58403ff08d68a0cc4029',
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-256: I=32'),
('15478beec58f4775c7a7f5d4395514d7', '196865964db3d417b6bd4d586bcb7634',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e',
'ecb-tbl-256: I=33'),
('253548ffca461c67c8cbc78cd59f4756', '60436ad45ac7d30d99195f815d98d2ae',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6',
'ecb-tbl-256: I=34'),
('fd7ad8d73b9b0f8cc41600640f503d65', 'bb07a23f0b61014b197620c185e2cd75',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-256: I=35'),
('06199de52c6cbf8af954cd65830bcd56', '5bc0b2850129c854423aff0751fe343b',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516',
'ecb-tbl-256: I=36'),
('f17c4ffe48e44c61bd891e257e725794', '7541a78f96738e6417d2a24bd2beca40',
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e',
'ecb-tbl-256: I=37'),
('9a5b4a402a3e8a59be6bf5cd8154f029', 'b0a303054412882e464591f1546c5b9e',
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-256: I=38'),
('79bd40b91a7e07dc939d441782ae6b17', '778c06d8a355eeee214fcea14b4e0eef',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e',
'ecb-tbl-256: I=39'),
('d8ceaaf8976e5fbe1012d8c84f323799', '09614206d15cbace63227d06db6beebb',
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6',
'ecb-tbl-256: I=40'),
('3316e2751e2e388b083da23dd6ac3fbe', '41b97fb20e427a9fdbbb358d9262255d',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde',
'ecb-tbl-256: I=41'),
('8b7cfbe37de7dca793521819242c5816', 'c1940f703d845f957652c2d64abd7adf',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506',
'ecb-tbl-256: I=42'),
('f23f033c0eebf8ec55752662fd58ce68', 'd2d44fcdae5332343366db297efcf21b',
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e',
'ecb-tbl-256: I=43'),
('59eb34f6c8bdbacc5fc6ad73a59a1301', 'ea8196b79dbe167b6aa9896e287eed2b',
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556',
'ecb-tbl-256: I=44'),
('dcde8b6bd5cf7cc22d9505e3ce81261a', 'd6b0b0c4ba6c7dbe5ed467a1e3f06c2d',
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e',
'ecb-tbl-256: I=45'),
('e33cf7e524fed781e7042ff9f4b35dc7', 'ec51eb295250c22c2fb01816fb72bcae',
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6',
'ecb-tbl-256: I=46'),
('27963c8facdf73062867d164df6d064c', 'aded6630a07ce9c7408a155d3bd0d36f',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce',
'ecb-tbl-256: I=47'),
('77b1ce386b551b995f2f2a1da994eef8', '697c9245b9937f32f5d1c82319f0363a',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6',
'ecb-tbl-256: I=48'),
('f083388b013679efcf0bb9b15d52ae5c', 'aad5ad50c6262aaec30541a1b7b5b19c',
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e',
'ecb-tbl-256: I=49'),
('c5009e0dab55db0abdb636f2600290c8', '7d34b893855341ec625bd6875ac18c0d',
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546',
'ecb-tbl-256: I=50'),
('7804881e26cd532d8514d3683f00f1b9', '7ef05105440f83862f5d780e88f02b41',
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e',
'ecb-tbl-256: I=51'),
('46cddcd73d1eb53e675ca012870a92a3', 'c377c06403382061af2c9c93a8e70df6',
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596',
'ecb-tbl-256: I=52'),
('a9fb44062bb07fe130a8e8299eacb1ab', '1dbdb3ffdc052dacc83318853abc6de5',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe',
'ecb-tbl-256: I=53'),
('2b6ff8d7a5cc3a28a22d5a6f221af26b', '69a6eab00432517d0bf483c91c0963c7',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6',
'ecb-tbl-256: I=54'),
('1a9527c29b8add4b0e3e656dbb2af8b4', '0797f41dc217c80446e1d514bd6ab197',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e',
'ecb-tbl-256: I=55'),
('7f99cf2c75244df015eb4b0c1050aeae', '9dfd76575902a637c01343c58e011a03',
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536',
'ecb-tbl-256: I=56'),
('e84ff85b0d9454071909c1381646c4ed', 'acf4328ae78f34b9fa9b459747cc2658',
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e',
'ecb-tbl-256: I=57'),
('89afd40f99521280d5399b12404f6db4', 'b0479aea12bac4fe2384cf98995150c6',
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586',
'ecb-tbl-256: I=58'),
('a09ef32dbc5119a35ab7fa38656f0329', '9dd52789efe3ffb99f33b3da5030109a',
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae',
'ecb-tbl-256: I=59'),
('61773457f068c376c7829b93e696e716', 'abbb755e4621ef8f1214c19f649fb9fd',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6',
'ecb-tbl-256: I=60'),
('a34f0cae726cce41dd498747d891b967', 'da27fb8174357bce2bed0e7354f380f9',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe',
'ecb-tbl-256: I=61'),
('856f59496c7388ee2d2b1a27b7697847', 'c59a0663f0993838f6e5856593bdc5ef',
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526',
'ecb-tbl-256: I=62'),
('cb090c593ef7720bd95908fb93b49df4', 'ed60b264b5213e831607a99c0ce5e57e',
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-256: I=63'),
('a0ac75cd2f1923d460fc4d457ad95baf', 'e50548746846f3eb77b8c520640884ed',
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-256: I=64'),
('2a2b282974777689e8e9eeef525d5c5f', '28282cc7d21d6a2923641e52d188ef0c',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e',
'ecb-tbl-256: I=65'),
('909192939390919e0f0e09089788898a', '0dfa5b02abb18e5a815305216d6d4f8e',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6',
'ecb-tbl-256: I=66'),
('777675748d8e8f907170777649464744', '7359635c0eecefe31d673395fb46fb99',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-256: I=67'),
('717073720605040b2d2c2b2a05fafbf9', '73c679f7d5aef2745c9737bb4c47fb36',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516',
'ecb-tbl-256: I=68'),
('64656667fefdfcc31b1a1d1ca5aaaba8', 'b192bd472a4d2eafb786e97458967626',
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e',
'ecb-tbl-256: I=69'),
('dbdad9d86a696867b5b4b3b2c8d7d6d5', '0ec327f6c8a2b147598ca3fde61dc6a4',
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-256: I=70'),
('5c5d5e5fe3e0e1fe31303736333c3d3e', 'fc418eb3c41b859b38d4b6f646629729',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e',
'ecb-tbl-256: I=71'),
('545556574b48494673727574546b6a69', '30249e5ac282b1c981ea64b609f3a154',
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6',
'ecb-tbl-256: I=72'),
('ecedeeefc6c5c4bb56575051f5fafbf8', '5e6e08646d12150776bb43c2d78a9703',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde',
'ecb-tbl-256: I=73'),
('464744452724252ac9c8cfced2cdcccf', 'faeb3d5de652cd3447dceb343f30394a',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506',
'ecb-tbl-256: I=74'),
('e6e7e4e54142435c878681801c131211', 'a8e88706823f6993ef80d05c1c7b2cf0',
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e',
'ecb-tbl-256: I=75'),
('72737071cfcccdc2f9f8fffe710e0f0c', '8ced86677e6e00a1a1b15968f2d3cce6',
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556',
'ecb-tbl-256: I=76'),
('505152537370714ec3c2c5c4010e0f0c', '9fc7c23858be03bdebb84e90db6786a9',
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e',
'ecb-tbl-256: I=77'),
('a8a9aaab5c5f5e51aeafa8a93d222320', 'b4fbd65b33f70d8cf7f1111ac4649c36',
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6',
'ecb-tbl-256: I=78'),
('dedfdcddf6f5f4eb10111617fef1f0f3', 'c5c32d5ed03c4b53cc8c1bd0ef0dbbf6',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce',
'ecb-tbl-256: I=79'),
('bdbcbfbe5e5d5c530b0a0d0cfac5c4c7', 'd1a7f03b773e5c212464b63709c6a891',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6',
'ecb-tbl-256: I=80'),
('8a8b8889050606f8f4f5f2f3636c6d6e', '6b7161d8745947ac6950438ea138d028',
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e',
'ecb-tbl-256: I=81'),
('a6a7a4a54d4e4f40b2b3b4b539262724', 'fd47a9f7e366ee7a09bc508b00460661',
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546',
'ecb-tbl-256: I=82'),
('9c9d9e9fe9eaebf40e0f08099b949596', '00d40b003dc3a0d9310b659b98c7e416',
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e',
'ecb-tbl-256: I=83'),
('2d2c2f2e1013121dcccdcacbed121310', 'eea4c79dcc8e2bda691f20ac48be0717',
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596',
'ecb-tbl-256: I=84'),
('f4f5f6f7edeeefd0eaebecedf7f8f9fa', 'e78f43b11c204403e5751f89d05a2509',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe',
'ecb-tbl-256: I=85'),
('3d3c3f3e282b2a2573727574150a0b08', 'd0f0e3d1f1244bb979931e38dd1786ef',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6',
'ecb-tbl-256: I=86'),
('b6b7b4b5f8fbfae5b4b5b2b3a0afaead', '042e639dc4e1e4dde7b75b749ea6f765',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e',
'ecb-tbl-256: I=87'),
('b7b6b5b4989b9a95878681809ba4a5a6', 'bc032fdd0efe29503a980a7d07ab46a8',
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536',
'ecb-tbl-256: I=88'),
('a8a9aaabe5e6e798e9e8efee4748494a', '0c93ac949c0da6446effb86183b6c910',
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e',
'ecb-tbl-256: I=89'),
('ecedeeefd9dadbd4b9b8bfbe657a7b78', 'e0d343e14da75c917b4a5cec4810d7c2',
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586',
'ecb-tbl-256: I=90'),
('7f7e7d7c696a6b74cacbcccd929d9c9f', '0eafb821748408279b937b626792e619',
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae',
'ecb-tbl-256: I=91'),
('08090a0b0605040bfffef9f8b9c6c7c4', 'fa1ac6e02d23b106a1fef18b274a553f',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6',
'ecb-tbl-256: I=92'),
('08090a0bf1f2f3ccfcfdfafb68676665', '0dadfe019cd12368075507df33c1a1e9',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe',
'ecb-tbl-256: I=93'),
('cacbc8c93a393837050403020d121310', '3a0879b414465d9ffbaf86b33a63a1b9',
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526',
'ecb-tbl-256: I=94'),
('e9e8ebea8281809f8f8e8988343b3a39', '62199fadc76d0be1805d3ba0b7d914bf',
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-256: I=95'),
('515053524645444bd0d1d6d7340b0a09', '1b06d6c5d333e742730130cf78e719b4',
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-256: I=96'),
('42434041ecefee1193929594c6c9c8cb', 'f1f848824c32e9dcdcbf21580f069329',
'78797a7b7d7e7f80828384858788898a8c8d8e8f91929394969798999b9c9d9e',
'ecb-tbl-256: I=97'),
('efeeedecc2c1c0cf76777071455a5b58', '1a09050cbd684f784d8e965e0782f28a',
'a0a1a2a3a5a6a7a8aaabacadafb0b1b2b4b5b6b7b9babbbcbebfc0c1c3c4c5c6',
'ecb-tbl-256: I=98'),
('5f5e5d5c3f3c3d221d1c1b1a19161714', '79c2969e7ded2ba7d088f3f320692360',
'c8c9cacbcdcecfd0d2d3d4d5d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedee',
'ecb-tbl-256: I=99'),
('000102034142434c1c1d1a1b8d727371', '091a658a2f7444c16accb669450c7b63',
'f0f1f2f3f5f6f7f8fafbfcfdfe01000204050607090a0b0c0e0f101113141516',
'ecb-tbl-256: I=100'),
('8e8f8c8db1b2b38c56575051050a0b08', '97c1e3a72cca65fa977d5ed0e8a7bbfc',
'18191a1b1d1e1f20222324252728292a2c2d2e2f31323334363738393b3c3d3e',
'ecb-tbl-256: I=101'),
('a7a6a5a4e8ebeae57f7e7978cad5d4d7', '70c430c6db9a17828937305a2df91a2a',
'40414243454647484a4b4c4d4f50515254555657595a5b5c5e5f606163646566',
'ecb-tbl-256: I=102'),
('8a8b888994979689454443429f909192', '629553457fbe2479098571c7c903fde8',
'68696a6b6d6e6f70727374757778797a7c7d7e7f81828384868788898b8c8d8e',
'ecb-tbl-256: I=103'),
('8c8d8e8fe0e3e2ed45444342f1cecfcc', 'a25b25a61f612669e7d91265c7d476ba',
'90919293959697989a9b9c9d9fa0a1a2a4a5a6a7a9aaabacaeafb0b1b3b4b5b6',
'ecb-tbl-256: I=104'),
('fffefdfc4c4f4e31d8d9dedfb6b9b8bb', 'eb7e4e49b8ae0f024570dda293254fed',
'b8b9babbbdbebfc0c2c3c4c5c7c8c9cacccdcecfd1d2d3d4d6d7d8d9dbdcddde',
'ecb-tbl-256: I=105'),
('fdfcfffecccfcec12f2e29286679787b', '38fe15d61cca84516e924adce5014f67',
'e0e1e2e3e5e6e7e8eaebecedeff0f1f2f4f5f6f7f9fafbfcfefe010103040506',
'ecb-tbl-256: I=106'),
('67666564bab9b8a77071767719161714', '3ad208492249108c9f3ebeb167ad0583',
'08090a0b0d0e0f10121314151718191a1c1d1e1f21222324262728292b2c2d2e',
'ecb-tbl-256: I=107'),
('9a9b98992d2e2f2084858283245b5a59', '299ba9f9bf5ab05c3580fc26edd1ed12',
'30313233353637383a3b3c3d3f40414244454647494a4b4c4e4f505153545556',
'ecb-tbl-256: I=108'),
('a4a5a6a70b0809365c5d5a5b2c232221', '19dc705b857a60fb07717b2ea5717781',
'58595a5b5d5e5f60626364656768696a6c6d6e6f71727374767778797b7c7d7e',
'ecb-tbl-256: I=109'),
('464744455754555af3f2f5f4afb0b1b2', 'ffc8aeb885b5efcad06b6dbebf92e76b',
'80818283858687888a8b8c8d8f90919294959697999a9b9c9e9fa0a1a3a4a5a6',
'ecb-tbl-256: I=110'),
('323330317675746b7273747549464744', 'f58900c5e0b385253ff2546250a0142b',
'a8a9aaabadaeafb0b2b3b4b5b7b8b9babcbdbebfc1c2c3c4c6c7c8c9cbcccdce',
'ecb-tbl-256: I=111'),
('a8a9aaab181b1a15808186872b141516', '2ee67b56280bc462429cee6e3370cbc1',
'd0d1d2d3d5d6d7d8dadbdcdddfe0e1e2e4e5e6e7e9eaebeceeeff0f1f3f4f5f6',
'ecb-tbl-256: I=112'),
('e7e6e5e4202323ddaaabacad343b3a39', '20db650a9c8e9a84ab4d25f7edc8f03f',
'f8f9fafbfdfefe00020304050708090a0c0d0e0f11121314161718191b1c1d1e',
'ecb-tbl-256: I=113'),
('a8a9aaab2221202fedecebea1e010003', '3c36da169525cf818843805f25b78ae5',
'20212223252627282a2b2c2d2f30313234353637393a3b3c3e3f404143444546',
'ecb-tbl-256: I=114'),
('f9f8fbfa5f5c5d42424344450e010003', '9a781d960db9e45e37779042fea51922',
'48494a4b4d4e4f50525354555758595a5c5d5e5f61626364666768696b6c6d6e',
'ecb-tbl-256: I=115'),
('57565554f5f6f7f89697909120dfdedd', '6560395ec269c672a3c288226efdba77',
'70717273757677787a7b7c7d7f80818284858687898a8b8c8e8f909193949596',
'ecb-tbl-256: I=116'),
('f8f9fafbcccfcef1dddcdbda0e010003', '8c772b7a189ac544453d5916ebb27b9a',
'98999a9b9d9e9fa0a2a3a4a5a7a8a9aaacadaeafb1b2b3b4b6b7b8b9bbbcbdbe',
'ecb-tbl-256: I=117'),
('d9d8dbda7073727d80818687c2dddcdf', '77ca5468cc48e843d05f78eed9d6578f',
'c0c1c2c3c5c6c7c8cacbcccdcfd0d1d2d4d5d6d7d9dadbdcdedfe0e1e3e4e5e6',
'ecb-tbl-256: I=118'),
('c5c4c7c6080b0a1588898e8f68676665', '72cdcc71dc82c60d4429c9e2d8195baa',
'e8e9eaebedeeeff0f2f3f4f5f7f8f9fafcfdfeff01020304060708090b0c0d0e',
'ecb-tbl-256: I=119'),
('83828180dcdfded186878081f0cfcecd', '8080d68ce60e94b40b5b8b69eeb35afa',
'10111213151617181a1b1c1d1f20212224252627292a2b2c2e2f303133343536',
'ecb-tbl-256: I=120'),
('98999a9bdddedfa079787f7e0a050407', '44222d3cde299c04369d58ac0eba1e8e',
'38393a3b3d3e3f40424344454748494a4c4d4e4f51525354565758595b5c5d5e',
'ecb-tbl-256: I=121'),
('cecfcccd4f4c4d429f9e9998dfc0c1c2', '9b8721b0a8dfc691c5bc5885dbfcb27a',
'60616263656667686a6b6c6d6f70717274757677797a7b7c7e7f808183848586',
'ecb-tbl-256: I=122'),
('404142436665647b29282f2eaba4a5a6', '0dc015ce9a3a3414b5e62ec643384183',
'88898a8b8d8e8f90929394959798999a9c9d9e9fa1a2a3a4a6a7a8a9abacadae',
'ecb-tbl-256: I=123'),
('33323130e6e5e4eb23222524dea1a0a3', '705715448a8da412025ce38345c2a148',
'b0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c4c5c6c7c9cacbcccecfd0d1d3d4d5d6',
'ecb-tbl-256: I=124'),
('cfcecdccf6f5f4cbe6e7e0e199969794', 'c32b5b0b6fbae165266c569f4b6ecf0b',
'd8d9dadbdddedfe0e2e3e4e5e7e8e9eaecedeeeff1f2f3f4f6f7f8f9fbfcfdfe',
'ecb-tbl-256: I=125'),
('babbb8b97271707fdcdddadb29363734', '4dca6c75192a01ddca9476af2a521e87',
'00010203050607080a0b0c0d0f10111214151617191a1b1c1e1f202123242526',
'ecb-tbl-256: I=126'),
('c9c8cbca4447465926272021545b5a59', '058691e627ecbc36ac07b6db423bd698',
'28292a2b2d2e2f30323334353738393a3c3d3e3f41424344464748494b4c4d4e',
'ecb-tbl-256: I=127'),
('050407067477767956575051221d1c1f', '7444527095838fe080fc2bcdd30847eb',
'50515253555657585a5b5c5d5f60616264656667696a6b6c6e6f707173747576',
'ecb-tbl-256: I=128'),
]
 
def get_tests():
from CryptoPlus.Cipher import AES
from common import make_block_tests
return make_block_tests(AES, "AES", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_XOR.py
0,0 → 1,68
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/XOR.py: Self-test for the XOR "cipher"
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.XOR"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
test_data = [
# Test vectors written from scratch. (Nobody posts XOR test vectors on the web? How disappointing.)
('01', '01',
'00',
'zero key'),
 
('0102040810204080', '0003050911214181',
'01',
'1-byte key'),
 
('0102040810204080', 'cda8c8a2dc8a8c2a',
'ccaa',
'2-byte key'),
 
('ff'*64, 'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0'*2,
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f',
'32-byte key'),
 
# XOR truncates at 32 bytes.
('ff'*64, 'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0'*2,
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f55',
'33-byte key (truncated to 32 bytes)'),
]
 
def get_tests():
from CryptoPlus.Cipher import XOR
from common import make_stream_tests
return make_stream_tests(XOR, "XOR", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/common.py
0,0 → 1,189
# -*- coding: utf-8 -*-
#
# SelfTest/Hash/common.py: Common code for CryptoPlus.SelfTest.Hash
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-testing for PyCryptoPlus hash modules"""
 
__revision__ = "$Id$"
 
import sys
import unittest
from binascii import a2b_hex, b2a_hex
 
# For compatibility with Python 2.1 and Python 2.2
if sys.hexversion < 0x02030000:
# Python 2.1 doesn't have a dict() function
# Python 2.2 dict() function raises TypeError if you do dict(MD5='blah')
def dict(**kwargs):
return kwargs.copy()
else:
dict = __builtins__['dict']
 
class _NoDefault: pass # sentinel object
def _extract(d, k, default=_NoDefault):
"""Get an item from a dictionary, and remove it from the dictionary."""
try:
retval = d[k]
except KeyError:
if default is _NoDefault:
raise
return default
del d[k]
return retval
 
# Generic cipher test case
class CipherSelfTest(unittest.TestCase):
 
def __init__(self, module, params):
unittest.TestCase.__init__(self)
self.module = module
 
# Extract the parameters
params = params.copy()
self.description = _extract(params, 'description')
self.key = _extract(params, 'key')
self.plaintext = _extract(params, 'plaintext')
self.ciphertext = _extract(params, 'ciphertext')
 
mode = _extract(params, 'mode', None)
if mode is not None:
# Block cipher
self.mode = getattr(self.module, "MODE_" + mode)
self.iv = _extract(params, 'iv', None)
else:
# Stream cipher
self.mode = None
self.iv = None
 
self.extra_params = params
 
def shortDescription(self):
return self.description
 
def _new(self):
if self.mode is None:
# Stream cipher
return self.module.new(a2b_hex(self.key), **self.extra_params)
elif self.iv is None:
# Block cipher without iv
return self.module.new(a2b_hex(self.key), self.mode, **self.extra_params)
else:
# Block cipher with iv
return self.module.new(a2b_hex(self.key), self.mode, a2b_hex(self.iv), **self.extra_params)
 
def runTest(self):
plaintext = a2b_hex(self.plaintext)
ciphertext = a2b_hex(self.ciphertext)
 
ct1 = b2a_hex(self._new().encrypt(plaintext))
pt1 = b2a_hex(self._new().decrypt(ciphertext))
ct2 = b2a_hex(self._new().encrypt(plaintext))
pt2 = b2a_hex(self._new().decrypt(ciphertext))
 
self.assertEqual(self.ciphertext, ct1)
self.assertEqual(self.ciphertext, ct2)
self.assertEqual(self.plaintext, pt1)
self.assertEqual(self.plaintext, pt2)
 
def make_block_tests(module, module_name, test_data):
tests = []
for i in range(len(test_data)):
row = test_data[i]
 
# Build the "params" dictionary
params = {'mode': 'ECB'}
if len(row) == 3:
(params['plaintext'], params['ciphertext'], params['key']) = row
elif len(row) == 4:
(params['plaintext'], params['ciphertext'], params['key'], params['description']) = row
elif len(row) == 5:
(params['plaintext'], params['ciphertext'], params['key'], params['description'], extra_params) = row
params.update(extra_params)
else:
raise AssertionError("Unsupported tuple size %d" % (len(row),))
 
# Build the display-name for the test
p2 = params.copy()
p_key = _extract(p2, 'key')
p_plaintext = _extract(p2, 'plaintext')
p_ciphertext = _extract(p2, 'ciphertext')
p_description = _extract(p2, 'description', None)
p_mode = p2.get('mode', 'ECB')
if p_mode == 'ECB':
_extract(p2, 'mode', 'ECB')
 
if p_description is not None:
description = p_description
elif p_mode == 'ECB' and not p2:
description = "p=%s, k=%s" % (p_plaintext, p_key)
else:
description = "p=%s, k=%s, %r" % (p_plaintext, p_key, p2)
name = "%s #%d: %s" % (module_name, i+1, description)
params['description'] = name
 
# Add the test to the test suite
tests.append(CipherSelfTest(module, params))
return tests
 
def make_stream_tests(module, module_name, test_data):
tests = []
for i in range(len(test_data)):
row = test_data[i]
 
# Build the "params" dictionary
params = {}
if len(row) == 3:
(params['plaintext'], params['ciphertext'], params['key']) = row
elif len(row) == 4:
(params['plaintext'], params['ciphertext'], params['key'], params['description']) = row
elif len(row) == 5:
(params['plaintext'], params['ciphertext'], params['key'], params['description'], extra_params) = row
params.update(extra_params)
else:
raise AssertionError("Unsupported tuple size %d" % (len(row),))
 
# Build the display-name for the test
p2 = params.copy()
p_key = _extract(p2, 'key')
p_plaintext = _extract(p2, 'plaintext')
p_ciphertext = _extract(p2, 'ciphertext')
p_description = _extract(p2, 'description', None)
 
if p_description is not None:
description = p_description
elif not p2:
description = "p=%s, k=%s" % (p_plaintext, p_key)
else:
description = "p=%s, k=%s, %r" % (p_plaintext, p_key, p2)
name = "%s #%d: %s" % (module_name, i+1, description)
params['description'] = name
 
# Add the test to the test suite
tests.append(CipherSelfTest(module, params))
return tests
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_ARC4.py
0,0 → 1,83
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/ARC4.py: Self-test for the Alleged-RC4 cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.ARC4"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key[, description]) tuples.
test_data = [
# Test vectors from Eric Rescorla's message with the subject
# "RC4 compatibility testing", sent to the cipherpunks mailing list on
# September 13, 1994.
# http://cypherpunks.venona.com/date/1994/09/msg00420.html
 
('0123456789abcdef', '75b7878099e0c596', '0123456789abcdef',
'Test vector 0'),
 
('0000000000000000', '7494c2e7104b0879', '0123456789abcdef',
'Test vector 1'),
 
('0000000000000000', 'de188941a3375d3a', '0000000000000000',
'Test vector 2'),
 
('00000000000000000000', 'd6a141a7ec3c38dfbd61', 'ef012345',
'Test vector 3'),
 
('01' * 512,
'7595c3e6114a09780c4ad452338e1ffd9a1be9498f813d76533449b6778dcad8'
+ 'c78a8d2ba9ac66085d0e53d59c26c2d1c490c1ebbe0ce66d1b6b1b13b6b919b8'
+ '47c25a91447a95e75e4ef16779cde8bf0a95850e32af9689444fd377108f98fd'
+ 'cbd4e726567500990bcc7e0ca3c4aaa304a387d20f3b8fbbcd42a1bd311d7a43'
+ '03dda5ab078896ae80c18b0af66dff319616eb784e495ad2ce90d7f772a81747'
+ 'b65f62093b1e0db9e5ba532fafec47508323e671327df9444432cb7367cec82f'
+ '5d44c0d00b67d650a075cd4b70dedd77eb9b10231b6b5b741347396d62897421'
+ 'd43df9b42e446e358e9c11a9b2184ecbef0cd8e7a877ef968f1390ec9b3d35a5'
+ '585cb009290e2fcde7b5ec66d9084be44055a619d9dd7fc3166f9487f7cb2729'
+ '12426445998514c15d53a18c864ce3a2b7555793988126520eacf2e3066e230c'
+ '91bee4dd5304f5fd0405b35bd99c73135d3d9bc335ee049ef69b3867bf2d7bd1'
+ 'eaa595d8bfc0066ff8d31509eb0c6caa006c807a623ef84c3d33c195d23ee320'
+ 'c40de0558157c822d4b8c569d849aed59d4e0fd7f379586b4b7ff684ed6a189f'
+ '7486d49b9c4bad9ba24b96abf924372c8a8fffb10d55354900a77a3db5f205e1'
+ 'b99fcd8660863a159ad4abe40fa48934163ddde542a6585540fd683cbfd8c00f'
+ '12129a284deacc4cdefe58be7137541c047126c8d49e2755ab181ab7e940b0c0',
'0123456789abcdef',
"Test vector 4"),
]
 
def get_tests():
from CryptoPlus.Cipher import ARC4
from common import make_stream_tests
return make_stream_tests(ARC4, "ARC4", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_RC5.py
0,0 → 1,94
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/RC5.py: Self-test for the RC5 cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.RC5"""
 
__revision__ = "$Id$"
 
from common import dict # For compatibility with Python 2.1 and 2.2
 
# This is a list of (plaintext, ciphertext, key, description or None, extra_params) tuples.
test_data = [
# Test vectors from http://theory.lcs.mit.edu/~rivest/Rivest-rc5rev.pdf
# Rivest, R. L. (1994). "The RC5 Encryption Algorithm" (pdf). Proceedings
# of the Second International Workshop on Fast Software Encryption (FSE)
# 1994e: 86–96.
('0000000000000000', '21a5dbee154b8f6d', '00000000000000000000000000000000',
"Rivest94-1", dict(word_size=32, rounds=12)),
('21a5dbee154b8f6d', 'f7c013ac5b2b8952', '915f4619be41b2516355a50110a9ce91',
"Rivest94-2", dict(word_size=32, rounds=12)),
('f7c013ac5b2b8952', '2f42b3b70369fc92', '783348e75aeb0f2fd7b169bb8dc16787',
"Rivest94-3", dict(word_size=32, rounds=12)),
('2f42b3b70369fc92', '65c178b284d197cc', 'dc49db1375a5584f6485b413b5f12baf',
"Rivest94-4", dict(word_size=32, rounds=12)),
('65c178b284d197cc', 'eb44e415da319824', '5269f149d41ba0152497574d7f153125',
"Rivest94-5", dict(word_size=32, rounds=12)),
 
# Test vectors from RFC 2040
('0000000000000000', '7a7bba4d79111d1e', '00', 'RFC2040-1', dict(rounds=0, mode='CBC', iv='0000000000000000')),
('ffffffffffffffff', '797bba4d78111d1e', '00', 'RFC2040-2', dict(rounds=0, mode='CBC', iv='0000000000000000')),
('0000000000000000', '7a7bba4d79111d1f', '00', 'RFC2040-3', dict(rounds=0, mode='CBC', iv='0000000000000001')),
('0000000000000001', '7a7bba4d79111d1f', '00', 'RFC2040-4', dict(rounds=0, mode='CBC', iv='0000000000000000')),
('1020304050607080', '8b9ded91ce7794a6', '00', 'RFC2040-5', dict(rounds=0, mode='CBC', iv='0102030405060708')),
('0000000000000000', '2f759fe7ad86a378', '11', 'RFC2040-6', dict(rounds=1, mode='CBC', iv='0000000000000000')),
('0000000000000000', 'dca2694bf40e0788', '00', 'RFC2040-7', dict(rounds=2, mode='CBC', iv='0000000000000000')),
('0000000000000000', 'dca2694bf40e0788', '00000000', 'RFC2040-8', dict(rounds=2, mode='CBC', iv='0000000000000000')),
('0000000000000000', 'dcfe098577eca5ff', '00', 'RFC2040-9', dict(rounds=8, mode='CBC', iv='0000000000000000')),
('1020304050607080', '9646fb77638f9ca8', '00', 'RFC2040-10', dict(rounds=8, mode='CBC', iv='0102030405060708')),
('1020304050607080', 'b2b3209db6594da4', '00', 'RFC2040-11', dict(rounds=12, mode='CBC', iv='0102030405060708')),
('1020304050607080', '545f7f32a5fc3836', '00', 'RFC2040-12', dict(rounds=16, mode='CBC', iv='0102030405060708')),
('ffffffffffffffff', '8285e7c1b5bc7402', '01020304', 'RFC2040-13', dict(rounds=8, mode='CBC', iv='0000000000000000')),
('ffffffffffffffff', 'fc586f92f7080934', '01020304', 'RFC2040-14', dict(rounds=12, mode='CBC', iv='0000000000000000')),
('ffffffffffffffff', 'cf270ef9717ff7c4', '01020304', 'RFC2040-15', dict(rounds=16, mode='CBC', iv='0000000000000000')),
('ffffffffffffffff', 'e493f1c1bb4d6e8c', '0102030405060708', 'RFC2040-16', dict(rounds=12, mode='CBC', iv='0000000000000000')),
('1020304050607080', '5c4c041e0f217ac3', '0102030405060708', 'RFC2040-17', dict(rounds=8, mode='CBC', iv='0102030405060708')),
('1020304050607080', '921f12485373b4f7', '0102030405060708', 'RFC2040-18', dict(rounds=12, mode='CBC', iv='0102030405060708')),
('1020304050607080', '5ba0ca6bbe7f5fad', '0102030405060708', 'RFC2040-19', dict(rounds=16, mode='CBC', iv='0102030405060708')),
('1020304050607080', 'c533771cd0110e63', '01020304050607081020304050607080', 'RFC2040-20', dict(rounds=8, mode='CBC', iv='0102030405060708')),
('1020304050607080', '294ddb46b3278d60', '01020304050607081020304050607080', 'RFC2040-21', dict(rounds=12, mode='CBC', iv='0102030405060708')),
('1020304050607080', 'dad6bda9dfe8f7e8', '01020304050607081020304050607080', 'RFC2040-22', dict(rounds=16, mode='CBC', iv='0102030405060708')),
('ffffffffffffffff', '97e0787837ed317f', '0102030405', 'RFC2040-23', dict(rounds=12, mode='CBC', iv='0000000000000000')),
('ffffffffffffffff', '7875dbf6738c6478', '0102030405', 'RFC2040-24', dict(rounds=8, mode='CBC', iv='0000000000000000')),
('0808080808080808', '8f34c3c681c99695', '0102030405', 'RFC2040-25', dict(rounds=8, mode='CBC', iv='7875dbf6738c6478')),
# ('ffffffffffffffff', '7875dbf6738c64788f34c3c681c99695', '0102030405', 'RFC2040-26', dict(rounds=8, mode='CBC-Pad', iv='0000000000000000')),
('0000000000000000', '7cb3f1df34f94811', '0102030405', 'RFC2040-27', dict(rounds=8, mode='CBC', iv='0000000000000000')),
('1122334455667701', '7fd1a023a5bba217', '0102030405', 'RFC2040-28', dict(rounds=8, mode='CBC', iv='7cb3f1df34f94811')),
# ('ffffffffffffffff7875dbf6738c647811223344556677', '7875dbf6738c64787cb3f1df34f948117fd1a023a5bba217', '0102030405', 'RFC2040-29', dict(rounds=8, mode='CBC-Pad', iv='0000000000000000')),
]
 
def get_tests():
from CryptoPlus.Cipher import RC5
from common import make_block_tests
return make_block_tests(RC5, "RC5", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_python_AES.py
0,0 → 1,87
"""Self-test suite for CryptoPlus.Cipher.python_AES"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
# TODO: add CTR test vectors
test_data = [
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7',
'2b7e151628aed2a6abf7158809cf4f3c',
'CBC 1',
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd',
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'CBC 2',
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b',
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'CBC 3',
{'mode':'CBC','iv': '000102030405060708090a0b0c0d0e0f'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6',
'2b7e151628aed2a6abf7158809cf4f3c',
'CFB 1',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ff',
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'CFB 2',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471',
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'CFB 3',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'CFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e',
'2b7e151628aed2a6abf7158809cf4f3c',
'OFB 1',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a',
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'OFB 2',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484',
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'OFB 3',
{'iv': '000102030405060708090a0b0c0d0e0f', 'mode': 'OFB'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee',
'2b7e151628aed2a6abf7158809cf4f3c',
'CTR 1',
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')",
'mode': 'CTR'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050',
'8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'CTR 2',
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')",
'mode': 'CTR'}),
('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6',
'603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'CTR 3',
{'counter': "Crypto.Util.util.Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff')",
'mode': 'CTR'})
]
 
def get_tests():
from CryptoPlus.Cipher import python_AES
from common import make_block_tests
return make_block_tests(python_AES, "python_AES", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
#CONVERSION OLD TEST VECTORS:
#CFB example:
#for i in range(1,len(dict_cbc_aes)/4 + 1):
# test.append((dict_cfb_aes['msg%i'%i],dict_cfb_aes['cip%i'%i],dict_cfb_aes['key%i'%i],"CFB %i"%i,dict(mode='CFB',iv=dict_cfb_aes['iv%i'%i])))
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Cipher/test_CAST.py
0,0 → 1,59
# -*- coding: utf-8 -*-
#
# SelfTest/Cipher/CAST.py: Self-test for the CAST-128 (CAST5) cipher
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Cipher.CAST"""
 
__revision__ = "$Id$"
 
# This is a list of (plaintext, ciphertext, key) tuples.
test_data = [
# Test vectors from RFC 2144, B.1
('0123456789abcdef', '238b4fe5847e44b2',
'0123456712345678234567893456789a',
'128-bit key'),
 
('0123456789abcdef', 'eb6a711a2c02271b',
'01234567123456782345',
'80-bit key'),
 
('0123456789abcdef', '7ac816d16e9b302e',
'0123456712',
'40-bit key'),
]
 
def get_tests():
from CryptoPlus.Cipher import CAST
from common import make_block_tests
return make_block_tests(CAST, "CAST", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Util/test_number.py
0,0 → 1,241
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_number.py: Self-test for parts of the CryptoPlus.Util.number module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-tests for (some of) CryptoPlus.Util.number"""
 
__revision__ = "$Id$"
 
from CryptoPlus.Util.python_compat import *
 
import unittest
 
# NB: In some places, we compare tuples instead of just output values so that
# if any inputs cause a test failure, we'll be able to tell which ones.
 
class MiscTests(unittest.TestCase):
def setUp(self):
global number, math
from CryptoPlus.Util import number
import math
 
def test_ceil_shift(self):
"""Util.number.ceil_shift"""
self.assertRaises(AssertionError, number.ceil_shift, -1, 1)
self.assertRaises(AssertionError, number.ceil_shift, 1, -1)
 
# b = 0
self.assertEqual(0, number.ceil_shift(0, 0))
self.assertEqual(1, number.ceil_shift(1, 0))
self.assertEqual(2, number.ceil_shift(2, 0))
self.assertEqual(3, number.ceil_shift(3, 0))
 
# b = 1
self.assertEqual(0, number.ceil_shift(0, 1))
self.assertEqual(1, number.ceil_shift(1, 1))
self.assertEqual(1, number.ceil_shift(2, 1))
self.assertEqual(2, number.ceil_shift(3, 1))
 
# b = 2
self.assertEqual(0, number.ceil_shift(0, 2))
self.assertEqual(1, number.ceil_shift(1, 2))
self.assertEqual(1, number.ceil_shift(2, 2))
self.assertEqual(1, number.ceil_shift(3, 2))
self.assertEqual(1, number.ceil_shift(4, 2))
self.assertEqual(2, number.ceil_shift(5, 2))
self.assertEqual(2, number.ceil_shift(6, 2))
self.assertEqual(2, number.ceil_shift(7, 2))
self.assertEqual(2, number.ceil_shift(8, 2))
self.assertEqual(3, number.ceil_shift(9, 2))
 
for b in range(3, 1+129, 3): # 3, 6, ... , 129
self.assertEqual(0, number.ceil_shift(0, b))
 
n = 1L
while n <= 2L**(b+2):
(q, r) = divmod(n-1, 2L**b)
expected = q + int(not not r)
self.assertEqual((n-1, b, expected),
(n-1, b, number.ceil_shift(n-1, b)))
 
(q, r) = divmod(n, 2L**b)
expected = q + int(not not r)
self.assertEqual((n, b, expected),
(n, b, number.ceil_shift(n, b)))
 
(q, r) = divmod(n+1, 2L**b)
expected = q + int(not not r)
self.assertEqual((n+1, b, expected),
(n+1, b, number.ceil_shift(n+1, b)))
 
n *= 2
 
def test_ceil_div(self):
"""Util.number.ceil_div"""
self.assertRaises(TypeError, number.ceil_div, "1", 1)
self.assertRaises(ZeroDivisionError, number.ceil_div, 1, 0)
self.assertRaises(ZeroDivisionError, number.ceil_div, -1, 0)
 
# b = -1
self.assertEqual(0, number.ceil_div(0, -1))
self.assertEqual(-1, number.ceil_div(1, -1))
self.assertEqual(-2, number.ceil_div(2, -1))
self.assertEqual(-3, number.ceil_div(3, -1))
 
# b = 1
self.assertEqual(0, number.ceil_div(0, 1))
self.assertEqual(1, number.ceil_div(1, 1))
self.assertEqual(2, number.ceil_div(2, 1))
self.assertEqual(3, number.ceil_div(3, 1))
 
# b = 2
self.assertEqual(0, number.ceil_div(0, 2))
self.assertEqual(1, number.ceil_div(1, 2))
self.assertEqual(1, number.ceil_div(2, 2))
self.assertEqual(2, number.ceil_div(3, 2))
self.assertEqual(2, number.ceil_div(4, 2))
self.assertEqual(3, number.ceil_div(5, 2))
 
# b = 3
self.assertEqual(0, number.ceil_div(0, 3))
self.assertEqual(1, number.ceil_div(1, 3))
self.assertEqual(1, number.ceil_div(2, 3))
self.assertEqual(1, number.ceil_div(3, 3))
self.assertEqual(2, number.ceil_div(4, 3))
self.assertEqual(2, number.ceil_div(5, 3))
self.assertEqual(2, number.ceil_div(6, 3))
self.assertEqual(3, number.ceil_div(7, 3))
 
# b = 4
self.assertEqual(0, number.ceil_div(0, 4))
self.assertEqual(1, number.ceil_div(1, 4))
self.assertEqual(1, number.ceil_div(2, 4))
self.assertEqual(1, number.ceil_div(3, 4))
self.assertEqual(1, number.ceil_div(4, 4))
self.assertEqual(2, number.ceil_div(5, 4))
self.assertEqual(2, number.ceil_div(6, 4))
self.assertEqual(2, number.ceil_div(7, 4))
self.assertEqual(2, number.ceil_div(8, 4))
self.assertEqual(3, number.ceil_div(9, 4))
 
# b = -4
self.assertEqual(3, number.ceil_div(-9, -4))
self.assertEqual(2, number.ceil_div(-8, -4))
self.assertEqual(2, number.ceil_div(-7, -4))
self.assertEqual(2, number.ceil_div(-6, -4))
self.assertEqual(2, number.ceil_div(-5, -4))
self.assertEqual(1, number.ceil_div(-4, -4))
self.assertEqual(1, number.ceil_div(-3, -4))
self.assertEqual(1, number.ceil_div(-2, -4))
self.assertEqual(1, number.ceil_div(-1, -4))
self.assertEqual(0, number.ceil_div(0, -4))
self.assertEqual(0, number.ceil_div(1, -4))
self.assertEqual(0, number.ceil_div(2, -4))
self.assertEqual(0, number.ceil_div(3, -4))
self.assertEqual(-1, number.ceil_div(4, -4))
self.assertEqual(-1, number.ceil_div(5, -4))
self.assertEqual(-1, number.ceil_div(6, -4))
self.assertEqual(-1, number.ceil_div(7, -4))
self.assertEqual(-2, number.ceil_div(8, -4))
self.assertEqual(-2, number.ceil_div(9, -4))
 
def test_exact_log2(self):
"""Util.number.exact_log2"""
self.assertRaises(TypeError, number.exact_log2, "0")
self.assertRaises(ValueError, number.exact_log2, -1)
self.assertRaises(ValueError, number.exact_log2, 0)
self.assertEqual(0, number.exact_log2(1))
self.assertEqual(1, number.exact_log2(2))
self.assertRaises(ValueError, number.exact_log2, 3)
self.assertEqual(2, number.exact_log2(4))
self.assertRaises(ValueError, number.exact_log2, 5)
self.assertRaises(ValueError, number.exact_log2, 6)
self.assertRaises(ValueError, number.exact_log2, 7)
e = 3
n = 8
while e < 16:
if n == 2**e:
self.assertEqual(e, number.exact_log2(n), "expected=2**%d, n=%d" % (e, n))
e += 1
else:
self.assertRaises(ValueError, number.exact_log2, n)
n += 1
 
for e in range(16, 1+64, 2):
self.assertRaises(ValueError, number.exact_log2, 2L**e-1)
self.assertEqual(e, number.exact_log2(2L**e))
self.assertRaises(ValueError, number.exact_log2, 2L**e+1)
 
def test_exact_div(self):
"""Util.number.exact_div"""
 
# Positive numbers
self.assertEqual(1, number.exact_div(1, 1))
self.assertRaises(ValueError, number.exact_div, 1, 2)
self.assertEqual(1, number.exact_div(2, 2))
self.assertRaises(ValueError, number.exact_div, 3, 2)
self.assertEqual(2, number.exact_div(4, 2))
 
# Negative numbers
self.assertEqual(-1, number.exact_div(-1, 1))
self.assertEqual(-1, number.exact_div(1, -1))
self.assertRaises(ValueError, number.exact_div, -1, 2)
self.assertEqual(1, number.exact_div(-2, -2))
self.assertEqual(-2, number.exact_div(-4, 2))
 
# Zero dividend
self.assertEqual(0, number.exact_div(0, 1))
self.assertEqual(0, number.exact_div(0, 2))
 
# Zero divisor (allow_divzero == False)
self.assertRaises(ZeroDivisionError, number.exact_div, 0, 0)
self.assertRaises(ZeroDivisionError, number.exact_div, 1, 0)
 
# Zero divisor (allow_divzero == True)
self.assertEqual(0, number.exact_div(0, 0, allow_divzero=True))
self.assertRaises(ValueError, number.exact_div, 1, 0, allow_divzero=True)
 
def test_floor_div(self):
"""Util.number.floor_div"""
self.assertRaises(TypeError, number.floor_div, "1", 1)
for a in range(-10, 10):
for b in range(-10, 10):
if b == 0:
self.assertRaises(ZeroDivisionError, number.floor_div, a, b)
else:
self.assertEqual((a, b, int(math.floor(float(a) / b))),
(a, b, number.floor_div(a, b)))
 
def get_tests():
from CryptoPlus.SelfTest.st_common import list_test_cases
return list_test_cases(MiscTests)
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Util/test_winrandom.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Util.winrandom"""
 
__revision__ = "$Id$"
 
import unittest
 
class WinRandomImportTest(unittest.TestCase):
def runTest(self):
"""winrandom: simple test"""
# Import the winrandom module and try to use it
from CryptoPlus.Util import winrandom
randobj = winrandom.new()
x = randobj.get_bytes(16)
y = randobj.get_bytes(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [WinRandomImportTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Util/__init__.py
0,0 → 1,47
# -*- coding: utf-8 -*-
#
# SelfTest/Util/__init__.py: Self-test for utility modules
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for utility modules"""
 
__revision__ = "$Id$"
 
import os
 
def get_tests():
tests = []
if os.name == 'nt':
import test_winrandom; tests += test_winrandom.get_tests()
import test_number; tests += test_number.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_generic.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_generic.py: Self-test for the OSRNG.new() function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.OSRNG"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.OSRNG.new()"""
# Import the OSRNG module and try to use it
import CryptoPlus.Random.OSRNG
randobj = CryptoPlus.Random.OSRNG.new()
x = randobj.read(16)
y = randobj.read(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_winrandom.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.OSRNG.winrandom"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.OSRNG.winrandom"""
# Import the winrandom module and try to use it
from CryptoPlus.Random.OSRNG import winrandom
randobj = winrandom.new()
x = randobj.get_bytes(16)
y = randobj.get_bytes(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_fallback.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_fallback.py: Self-test for the OSRNG.fallback.new() function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.OSRNG.fallback"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.OSRNG.fallback.new()"""
# Import the OSRNG.nt module and try to use it
import CryptoPlus.Random.OSRNG.fallback
randobj = CryptoPlus.Random.OSRNG.fallback.new()
x = randobj.read(16)
y = randobj.read(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/__init__.py
0,0 → 1,53
# -*- coding: utf-8 -*-
#
# SelfTest/Random/OSRNG/__init__.py: Self-test for OSRNG modules
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for CryptoPlus.Random.OSRNG package"""
 
__revision__ = "$Id$"
 
import os
 
def get_tests():
tests = []
if os.name == 'nt':
import test_nt; tests += test_nt.get_tests()
import test_winrandom; tests += test_winrandom.get_tests()
elif os.name == 'posix':
import test_posix; tests += test_posix.get_tests()
if hasattr(os, 'urandom'):
import test_fallback; tests += test_fallback.get_tests()
import test_generic; tests += test_generic.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_nt.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_generic.py: Self-test for the OSRNG.nt.new() function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.OSRNG.nt"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.OSRNG.nt.new()"""
# Import the OSRNG.nt module and try to use it
import CryptoPlus.Random.OSRNG.nt
randobj = CryptoPlus.Random.OSRNG.nt.new()
x = randobj.read(16)
y = randobj.read(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG/test_posix.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_posix.py: Self-test for the OSRNG.posix.new() function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.OSRNG.posix"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.OSRNG.posix.new()"""
# Import the OSRNG.nt module and try to use it
import CryptoPlus.Random.OSRNG.posix
randobj = CryptoPlus.Random.OSRNG.posix.new()
x = randobj.read(16)
y = randobj.read(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_SHAd256.py
0,0 → 1,58
# -*- coding: utf-8 -*-
#
# SelfTest/Random/Fortuna/test_SHAd256.py: Self-test for the SHAd256 hash function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.Fortuna.SHAd256"""
 
__revision__ = "$Id$"
 
# This is a list of (expected_result, input[, description]) tuples.
test_data = [
# I could not find any test vectors for SHAd256, so I made these vectors by
# feeding some sample data into several plain SHA256 implementations
# (including OpenSSL, the "sha256sum" tool, and this implementation).
# This is a subset of the resulting test vectors. The complete list can be
# found at: http://www.dlitz.net/crypto/shad256-test-vectors/
('5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456',
'', "'' (empty string)"),
('4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358',
'abc'),
('0cffe17f68954dac3a84fb1458bd5ec99209449749b2b308b7cb55812f9563af',
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq')
]
 
def get_tests():
from CryptoPlus.Random.Fortuna import SHAd256
from CryptoPlus.SelfTest.Hash.common import make_hash_tests
return make_hash_tests(SHAd256, "SHAd256", test_data)
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_FortunaAccumulator.py
0,0 → 1,190
# -*- coding: utf-8 -*-
#
# SelfTest/Random/Fortuna/test_FortunaAccumulator.py: Self-test for the FortunaAccumulator module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-tests for CryptoPlus.Random.Fortuna.FortunaAccumulator"""
 
__revision__ = "$Id$"
 
from CryptoPlus.Util.python_compat import *
 
import unittest
from binascii import b2a_hex
 
class FortunaAccumulatorTests(unittest.TestCase):
def setUp(self):
global FortunaAccumulator
from CryptoPlus.Random.Fortuna import FortunaAccumulator
 
def test_FortunaPool(self):
"""FortunaAccumulator.FortunaPool"""
pool = FortunaAccumulator.FortunaPool()
self.assertEqual(0, pool.length)
self.assertEqual("5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456", pool.hexdigest())
 
pool.append("abc")
 
self.assertEqual(3, pool.length)
self.assertEqual("4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358", pool.hexdigest())
 
pool.append("dbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
 
self.assertEqual(56, pool.length)
self.assertEqual("0cffe17f68954dac3a84fb1458bd5ec99209449749b2b308b7cb55812f9563af", b2a_hex(pool.digest()))
 
pool.reset()
 
self.assertEqual(0, pool.length)
 
pool.append("a" * 10**6)
 
self.assertEqual(10**6, pool.length)
self.assertEqual("80d1189477563e1b5206b2749f1afe4807e5705e8bd77887a60187a712156688", b2a_hex(pool.digest()))
 
def test_which_pools(self):
"""FortunaAccumulator.which_pools"""
 
# which_pools(0) should fail
self.assertRaises(AssertionError, FortunaAccumulator.which_pools, 0)
 
self.assertEqual(FortunaAccumulator.which_pools(1), [0])
self.assertEqual(FortunaAccumulator.which_pools(2), [0, 1])
self.assertEqual(FortunaAccumulator.which_pools(3), [0])
self.assertEqual(FortunaAccumulator.which_pools(4), [0, 1, 2])
self.assertEqual(FortunaAccumulator.which_pools(5), [0])
self.assertEqual(FortunaAccumulator.which_pools(6), [0, 1])
self.assertEqual(FortunaAccumulator.which_pools(7), [0])
self.assertEqual(FortunaAccumulator.which_pools(8), [0, 1, 2, 3])
for i in range(1, 32):
self.assertEqual(FortunaAccumulator.which_pools(2L**i-1), [0])
self.assertEqual(FortunaAccumulator.which_pools(2L**i), range(i+1))
self.assertEqual(FortunaAccumulator.which_pools(2L**i+1), [0])
self.assertEqual(FortunaAccumulator.which_pools(2L**31), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**32), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**33), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**34), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**35), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**36), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**64), range(32))
self.assertEqual(FortunaAccumulator.which_pools(2L**128), range(32))
 
def test_accumulator(self):
"""FortunaAccumulator.FortunaAccumulator"""
fa = FortunaAccumulator.FortunaAccumulator()
 
# This should fail, because we haven't seeded the PRNG yet
self.assertRaises(AssertionError, fa.random_data, 1)
 
# Spread some test data across the pools (source number 42)
# This would be horribly insecure in a real system.
for p in range(32):
fa.add_random_event(42, p, "X" * 32)
self.assertEqual(32+2, fa.pools[p].length)
 
# This should still fail, because we haven't seeded the PRNG with 64 bytes yet
self.assertRaises(AssertionError, fa.random_data, 1)
 
# Add more data
for p in range(32):
fa.add_random_event(42, p, "X" * 32)
self.assertEqual((32+2)*2, fa.pools[p].length)
 
# The underlying RandomGenerator should get seeded with Pool 0
# s = SHAd256(chr(42) + chr(32) + "X"*32 + chr(42) + chr(32) + "X"*32)
# = SHA256(h'edd546f057b389155a31c32e3975e736c1dec030ddebb137014ecbfb32ed8c6f')
# = h'aef42a5dcbddab67e8efa118e1b47fde5d697f89beb971b99e6e8e5e89fbf064'
# The counter and the key before reseeding is:
# C_0 = 0
# K_0 = "\x00" * 32
# The counter after reseeding is 1, and the new key after reseeding is
# C_1 = 1
# K_1 = SHAd256(K_0 || s)
# = SHA256(h'0eae3e401389fab86640327ac919ecfcb067359d95469e18995ca889abc119a6')
# = h'aafe9d0409fbaaafeb0a1f2ef2014a20953349d3c1c6e6e3b962953bea6184dd'
# The first block of random data, therefore, is
# r_1 = AES-256(K_1, 1)
# = AES-256(K_1, h'01000000000000000000000000000000')
# = h'b7b86bd9a27d96d7bb4add1b6b10d157'
# The second block of random data is
# r_2 = AES-256(K_1, 2)
# = AES-256(K_1, h'02000000000000000000000000000000')
# = h'2350b1c61253db2f8da233be726dc15f'
# The third and fourth blocks of random data (which become the new key) are
# r_3 = AES-256(K_1, 3)
# = AES-256(K_1, h'03000000000000000000000000000000')
# = h'f23ad749f33066ff53d307914fbf5b21'
# r_4 = AES-256(K_1, 4)
# = AES-256(K_1, h'04000000000000000000000000000000')
# = h'da9667c7e86ba247655c9490e9d94a7c'
# K_2 = r_3 || r_4
# = h'f23ad749f33066ff53d307914fbf5b21da9667c7e86ba247655c9490e9d94a7c'
# The final counter value is 5.
self.assertEqual("aef42a5dcbddab67e8efa118e1b47fde5d697f89beb971b99e6e8e5e89fbf064",
fa.pools[0].hexdigest())
self.assertEqual(None, fa.generator.key)
self.assertEqual(0, fa.generator.counter.get_value())
 
result = fa.random_data(32)
 
self.assertEqual("b7b86bd9a27d96d7bb4add1b6b10d157" "2350b1c61253db2f8da233be726dc15f", b2a_hex(result))
self.assertEqual("f23ad749f33066ff53d307914fbf5b21da9667c7e86ba247655c9490e9d94a7c", b2a_hex(fa.generator.key))
self.assertEqual(5, fa.generator.counter.get_value())
 
def test_accumulator_pool_length(self):
"""FortunaAccumulator.FortunaAccumulator minimum pool length"""
fa = FortunaAccumulator.FortunaAccumulator()
 
# This test case is hard-coded to assume that FortunaAccumulator.min_pool_size is 64.
self.assertEqual(fa.min_pool_size, 64)
 
# The PRNG should not allow us to get random data from it yet
self.assertRaises(AssertionError, fa.random_data, 1)
 
# Add 60 bytes, 4 at a time (2 header + 2 payload) to each of the 32 pools
for i in range(15):
for p in range(32):
# Add the bytes to the pool
fa.add_random_event(2, p, "XX")
 
# The PRNG should not allow us to get random data from it yet
self.assertRaises(AssertionError, fa.random_data, 1)
 
# Add 4 more bytes to pool 0
fa.add_random_event(2, 0, "XX")
 
# We should now be able to get data from the accumulator
fa.random_data(1)
 
def get_tests():
from CryptoPlus.SelfTest.st_common import list_test_cases
return list_test_cases(FortunaAccumulatorTests)
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/__init__.py
0,0 → 1,48
# -*- coding: utf-8 -*-
#
# SelfTest/Random/Fortuna/__init__.py: Self-test for Fortuna modules
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test for the CryptoPlus.Random.Fortuna package"""
 
__revision__ = "$Id$"
 
import os
 
def get_tests():
tests = []
import test_FortunaAccumulator; tests += test_FortunaAccumulator.get_tests()
import test_FortunaGenerator; tests += test_FortunaGenerator.get_tests()
import test_SHAd256; tests += test_SHAd256.get_tests()
return tests
 
if __name__ == '__main__':
import unittest
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna/test_FortunaGenerator.py
0,0 → 1,84
# -*- coding: utf-8 -*-
#
# SelfTest/Random/Fortuna/test_FortunaGenerator.py: Self-test for the FortunaGenerator module
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-tests for CryptoPlus.Random.Fortuna.FortunaGenerator"""
 
__revision__ = "$Id$"
 
from CryptoPlus.Util.python_compat import *
 
import unittest
from binascii import b2a_hex
 
class FortunaGeneratorTests(unittest.TestCase):
def setUp(self):
global FortunaGenerator
from CryptoPlus.Random.Fortuna import FortunaGenerator
 
def test_generator(self):
"""FortunaGenerator.AESGenerator"""
fg = FortunaGenerator.AESGenerator()
 
# We shouldn't be able to read data until we've seeded the generator
self.assertRaises(Exception, fg.pseudo_random_data, 1)
self.assertEqual(0, fg.counter.get_value())
 
# Seed the generator, which should set the key and increment the counter.
fg.reseed("Hello")
self.assertEqual("0ea6919d4361551364242a4ba890f8f073676e82cf1a52bb880f7e496648b565", b2a_hex(fg.key))
self.assertEqual(1, fg.counter.get_value())
 
# Read 2 full blocks from the generator
self.assertEqual("7cbe2c17684ac223d08969ee8b565616" + # counter=1
"717661c0d2f4758bd6ba140bf3791abd", # counter=2
b2a_hex(fg.pseudo_random_data(32)))
 
# Meanwhile, the generator will have re-keyed itself and incremented its counter
self.assertEqual("33a1bb21987859caf2bbfc5615bef56d" + # counter=3
"e6b71ff9f37112d0c193a135160862b7", # counter=4
b2a_hex(fg.key))
self.assertEqual(5, fg.counter.get_value())
 
# Read another 2 blocks from the generator
self.assertEqual("fd6648ba3086e919cee34904ef09a7ff" + # counter=5
"021f77580558b8c3e9248275f23042bf", # counter=6
b2a_hex(fg.pseudo_random_data(32)))
 
 
# Try to read more than 2**20 bytes using the internal function. This should fail.
self.assertRaises(AssertionError, fg._pseudo_random_data, 2**20+1)
 
def get_tests():
from CryptoPlus.SelfTest.st_common import list_test_cases
return list_test_cases(FortunaGeneratorTests)
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG.new
--- 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_rpoolcompat.py (nonexistent)
+++ 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_rpoolcompat.py (revision 169)
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#
+# SelfTest/Util/test_winrandom.py: Self-test for the winrandom module
+#
+# =======================================================================
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# =======================================================================
+#
+
+"""Self-test for the CryptoPlus.Random.RandomPoolCompat class"""
+
+__revision__ = "$Id$"
+
+import unittest
+
+class SimpleTest(unittest.TestCase):
+ def runTest(self):
+ """CryptoPlus.Random.RandomPoolCompat"""
+ # Import the winrandom module and try to use it
+ from CryptoPlus.Random import RandomPoolCompat
+ rpool = RandomPoolCompat()
+ x = rpool.get_bytes(16)
+ y = rpool.get_bytes(16)
+ self.assertNotEqual(x, y)
+ self.assertNotEqual(rpool.entropy, 0)
+
+ rpool.randomize()
+ rpool.stir('foo')
+ rpool.add_event('foo')
+
+def get_tests():
+ return [SimpleTest()]
+
+if __name__ == '__main__':
+ suite = lambda: unittest.TestSuite(get_tests())
+ unittest.main(defaultTest='suite')
+
+# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna.new
--- 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/__init__.py (nonexistent)
+++ 1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/__init__.py (revision 169)
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+#
+# SelfTest/Random/__init__.py: Self-test for random number generation modules
+#
+# =======================================================================
+# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# =======================================================================
+#
+
+"""Self-test for random number generators"""
+
+__revision__ = "$Id$"
+
+def get_tests():
+ tests = []
+ import Fortuna; tests += Fortuna.get_tests()
+ import OSRNG; tests += OSRNG.get_tests()
+ import test_random; tests += test_random.get_tests()
+ import test_rpoolcompat; tests += test_rpoolcompat.get_tests()
+ return tests
+
+if __name__ == '__main__':
+ import unittest
+ suite = lambda: unittest.TestSuite(get_tests())
+ unittest.main(defaultTest='suite')
+
+# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/SelfTest/Random/test_random.py
0,0 → 1,52
# -*- coding: utf-8 -*-
#
# SelfTest/Util/test_generic.py: Self-test for the CryptoPlus.Random.new() function
#
# =======================================================================
# Copyright (C) 2008 Dwayne C. Litzenberger <dlitz@dlitz.net>
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# =======================================================================
#
 
"""Self-test suite for CryptoPlus.Random.new()"""
 
__revision__ = "$Id$"
 
import unittest
 
class SimpleTest(unittest.TestCase):
def runTest(self):
"""CryptoPlus.Random.new()"""
# Import the OSRNG module and try to use it
from CryptoPlus import Random
randobj = Random.new()
x = randobj.read(16)
y = randobj.read(16)
self.assertNotEqual(x, y)
 
def get_tests():
return [SimpleTest()]
 
if __name__ == '__main__':
suite = lambda: unittest.TestSuite(get_tests())
unittest.main(defaultTest='suite')
 
# vim:set ts=4 sw=4 sts=4 expandtab:
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/DES3.py
0,0 → 1,74
from blockcipher import *
import Crypto.Cipher.DES3
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
DES using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the 2/3 keys
- DES-EDE2: supply 2 keys as 1 single concatenated 16byte key= key1|key2
- DES-EDE3: supply 3 keys as 1 single concatenated 24byte key= key1|key2|key3
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import DES3
 
CBC TDES-EDE3 EXAMPLE: (using test vectors from http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf)
------------
>>> key = ('37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae').decode('hex')
>>> IV = ('3d1de3cc132e3b65').decode('hex')
>>> cipher = DES3.new(key, DES3.MODE_CBC, IV)
>>> ciphertext = cipher.encrypt(('84401f78fe6c10876d8ea23094ea5309').decode('hex'))
>>> (ciphertext).encode('hex')
'7b1f7c7e3b1c948ebd04a75ffba7d2f5'
>>> decipher = DES3.new(key, DES3.MODE_CBC, IV)
>>> plaintext = decipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'84401f78fe6c10876d8ea23094ea5309'
 
CMAC TDES-EDE3 EXAMPLE: (http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf)
-------------
>>> key = '8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a57'.decode('hex')
>>> cipher = DES3.new(key, DES3.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'743ddbe0ce2dc2ed'
 
CMAC TDES-EDE2 EXAMPLE:
-----------------------
testvector: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip
 
>>> key1 = "5104f2c76180c1d3".decode('hex')
>>> key2 = "b9df763e31ada716".decode('hex')
>>> key = key1 + key2
>>> plaintext = 'a6866be2fa6678f264a19c4474968e3f4eec24f5086d'.decode('hex')
>>> cipher = DES3.new(key, DES3.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'32e7758f3f614dbf'
"""
return DES3(key,mode,IV,counter,segment_size)
 
class DES3(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.DES3.new
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/__init__.py
0,0 → 1,10
from Crypto.Cipher import ARC4, XOR
 
__all__ = ["AES","python_AES","python_DES","python_DES3","DES","DES3","Blowfish","python_Blowfish","python_Twofish","python_Serpent","python_Rijndael","ARC4","ARC2","CAST","XOR","python_PRESENT"]
 
try:
import Crypto.Cipher.IDEA
__all__.append("IDEA")
__all__.append("RC5")
except ImportError:
pass
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_DES3.py
0,0 → 1,80
from blockcipher import *
import pyDes
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a DES-EDE3 or DES-EDE2 cipher object
 
wrapper for pure python 3DES implementation pyDes.py
 
key = raw string containing the 2/3 keys
- DES-EDE2: supply 2 keys as 1 single concatenated 16byte key= key1|key2
- DES-EDE3: supply 3 keys as 1 single concatenated 24byte key= key1|key2|key3
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_DES3
 
CBC TDES-EDE3 EXAMPLE: (using test vectors from http://csrc.nist.gov/groups/STM/cavp/documents/des/DESMMT.pdf)
------------
>>> key = ('37ae5ebf46dff2dc0754b94f31cbb3855e7fd36dc870bfae').decode('hex')
>>> IV = ('3d1de3cc132e3b65').decode('hex')
>>> cipher = python_DES3.new(key, python_DES3.MODE_CBC, IV)
>>> ciphertext = cipher.encrypt(('84401f78fe6c10876d8ea23094ea5309').decode('hex'))
>>> (ciphertext).encode('hex')
'7b1f7c7e3b1c948ebd04a75ffba7d2f5'
>>> decipher = python_DES3.new(key, python_DES3.MODE_CBC, IV)
>>> plaintext = decipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'84401f78fe6c10876d8ea23094ea5309'
 
CMAC TDES-EDE3 EXAMPLE:
-------------
testvector: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf
 
>>> key = '8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a57'.decode('hex')
>>> cipher = python_DES3.new(key, python_DES3.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'743ddbe0ce2dc2ed'
 
CMAC TDES-EDE2 EXAMPLE:
-----------------------
testvector: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip
 
>>> key1 = "5104f2c76180c1d3".decode('hex')
>>> key2 = "b9df763e31ada716".decode('hex')
>>> key = key1 + key2
>>> plaintext = 'a6866be2fa6678f264a19c4474968e3f4eec24f5086d'.decode('hex')
>>> cipher = python_DES3.new(key, python_DES3.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'32e7758f3f614dbf'"""
return python_DES3(key,mode,IV,counter,segment_size)
 
class python_DES3(BlockCipher):
key_error_message = "Key should be 128 or 192 bits"
 
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = pyDes.triple_des
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def keylen_valid(self,key):
return len(key) in (16,24)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/IDEA.py
0,0 → 1,52
from blockcipher import *
try:
import Crypto.Cipher.IDEA
except ImportError:
print "Crypto.Cipher.IDEA isn't available. You're probably using the Debian pycrypto version. Install the original pycrypto for IDEA."
raise
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
IDEA using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the keys
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import IDEA
 
https://www.cosic.esat.kuleuven.be/nessie/testvectors/
-----------------------------------------
>>> from CryptoPlus.Cipher import IDEA
>>> key = "2BD6459F82C5B300952C49104881FF48".decode('hex')
>>> plaintext = "F129A6601EF62A47".decode('hex')
>>> cipher = IDEA.new(key,IDEA.MODE_ECB,)
>>> cipher.encrypt(plaintext).encode('hex').upper()
'EA024714AD5C4D84'
"""
return IDEA(key,mode,IV,counter,segment_size)
 
class IDEA(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.IDEA.new
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/AES.py
0,0 → 1,147
from blockcipher import *
import Crypto.Cipher.AES
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
key = raw string containing the key, AES-128..256 will be selected according to the key length
-> when using XTS mode: the key should be a tuple of the 2 keys needed
mode = AES.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import AES
 
ECB EXAMPLE:
-------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> cipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
>>> crypted = cipher.encrypt('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex'))
>>> crypted.encode('hex')
'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf'
>>> decipher = AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
>>> decipher.decrypt(crypted).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'
 
CBC EXAMPLE (plaintext = 3 blocksizes):
-----------------------------------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex')
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex')
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
>>> cipher = AES.new(key,AES.MODE_CBC,IV)
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
>>> (ciphertext).encode('hex')
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
>>> decipher = AES.new(key,AES.MODE_CBC,IV)
>>> plaintext = decipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
OR: supply plaintext as separate pieces:
------------------------------------------
>>> cipher = AES.new(key,AES.MODE_CBC,IV)
>>> ( cipher.encrypt(plaintext1 + plaintext2[:-2]) ).encode('hex')
'7649abac8119b246cee98e9b12e9197d'
>>> ( cipher.encrypt(plaintext2[-2:] + plaintext3) ).encode('hex')
'5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
>>> decipher = AES.new(key,AES.MODE_CBC,IV)
>>> (decipher.decrypt(ciphertext[:22])).encode('hex')
'6bc1bee22e409f96e93d7e117393172a'
>>> (decipher.decrypt(ciphertext[22:])).encode('hex')
'ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
CTR EXAMPLE:
------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> from CryptoPlus.Util.util import Counter
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> counter = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
>>> cipher = AES.new(key,AES.MODE_CTR,counter=counter)
>>> plaintext1 = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> plaintext2 = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> plaintext3 = '30c81c46a35ce411e5fbc1191a0a52ef'.decode('hex')
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
>>> ciphertext.encode('hex')
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab'
>>> counter2 = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
>>> decipher = AES.new(key,AES.MODE_CTR,counter=counter2)
>>> decipher.decrypt(ciphertext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
XTS EXAMPLE:
cipher/decipher plaintext of 3 blocks, provided as a 2 pieces (31 bytes + 33 bytes)
------------
>>> key = (('2b7e151628aed2a6abf7158809cf4f3c').decode('hex'),('2b7e151628aed2a6abf7158809cf4f3c').decode('hex'))
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
>>> cipher = AES.new(key,AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2[:15])
>>> decipher = AES.new(key,AES.MODE_XTS)
>>> deciphertext = decipher.decrypt(ciphertext)
>>> (deciphertext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e'
>>> ciphertext2 = cipher.encrypt(plaintext2[15:]+plaintext3)
>>> deciphertext2 = decipher.decrypt(ciphertext2)
>>> (deciphertext2).encode('hex')
'5130c81c46a35ce411e5fbc1191a0a52ef'
 
XTS-AES-128 applied for a data unit of 512 bytes
testvector: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf
 
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
>>> cipher = AES.new(key,AES.MODE_XTS)
>>> cipher.encrypt(plaintext).encode('hex')
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568'
 
CMAC EXAMPLE:
-------------
NIST publication 800-38B: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf
 
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> cipher = AES.new(key,AES.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'070a16b46b4d4144f79bdd9dd04a287c'
 
CMAC EXAMPLE2:
--------------
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411'.decode('hex')
>>> cipher = AES.new(key,AES.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')
'dfa66747de9ae63030ca32611497c827'
"""
return AES(key,mode,IV,counter,segment_size)
 
class AES(BlockCipher):
"""AES using pycrypto for algo and pycryptoplus for ciphermode
"""
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.AES.new
self.blocksize = 16
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_AES.py
0,0 → 1,299
from blockcipher import *
from rijndael import rijndael
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
Wrapper for pure python implementation rijndael.py
 
key = raw string containing the key, AES-128..256 will be selected according to the key length
-> when using XTS mode: the key should be a tuple containing the 2 keys needed
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
Notes:
- Always construct a seperate cipher object for encryption and decryption. Once a cipher object has been used for encryption,
it can't be used for decryption because it keeps a state (if necessary) for the IV.
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_AES
 
ECB EXAMPLE:
-------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> cipher = python_AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
>>> crypted = cipher.encrypt('6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex'))
>>> crypted.encode('hex')
'3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf'
>>> decipher = python_AES.new('2b7e151628aed2a6abf7158809cf4f3c'.decode('hex'))
>>> decipher.decrypt(crypted).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'
 
PADDING EXAMPLE:
-----------------
>>> cipher = python_AES.new('0123456789012345')
>>> crypt = cipher.encrypt('0123456789012')
>>> crypt += cipher.final()
>>> decipher = python_AES.new('0123456789012345')
>>> decipher.decrypt(crypt)
'0123456789012\\x03\\x03\\x03'
 
CBC EXAMPLE (plaintext = 3 blocksizes):
-----------------------------------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex')
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex')
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CBC,IV)
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
>>> (ciphertext).encode('hex')
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
>>> decipher = python_AES.new(key,python_AES.MODE_CBC,IV)
>>> plaintext = decipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
OR: supply plaintext as seperate pieces:
------------------------------------------
>>> cipher = python_AES.new(key,python_AES.MODE_CBC,IV)
>>> ( cipher.encrypt(plaintext1 + plaintext2[:-2]) ).encode('hex')
'7649abac8119b246cee98e9b12e9197d'
>>> ( cipher.encrypt(plaintext2[-2:] + plaintext3) ).encode('hex')
'5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
>>> decipher = python_AES.new(key,python_AES.MODE_CBC,IV)
>>> (decipher.decrypt(ciphertext[:22])).encode('hex')
'6bc1bee22e409f96e93d7e117393172a'
>>> (decipher.decrypt(ciphertext[22:])).encode('hex')
'ae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
CFB EXAMPLE: (CFB8-AES192)
------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex')
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=8)
>>> ciphertext = cipher.encrypt(plain)
>>> ciphertext.encode('hex')
'3b79424c9c0dd436bace9e0ed4586a4f'
>>> decipher = python_AES.new(key,python_AES.MODE_CFB,IV)
>>> decipher.decrypt(ciphertext).encode('hex')
'6bc1bee22e409f96e93d7e117393172a'
 
CFB EXAMPLE: (CFB128-AES192)
------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex')
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex')
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128)
>>> output1 = cipher.encrypt(plain)
>>> output1.encode('hex')
'cdc80d6fddf18cab34c25909c99a4174'
>>> plain = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> output2 = cipher.encrypt(plain)
>>> output2.encode('hex')
'67ce7f7f81173621961a2b70171d3d7a'
>>> decipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128)
>>> decipher.decrypt(output1+output2).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'
 
CFB EXAMPLE: same as previous but now as a streamcipher
------------
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex')
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex')
>>> plain = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CFB,IV=IV,segment_size=128)
>>> output = ''
>>> for i in plain: output += cipher.encrypt(i)
>>> output.encode('hex')
'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a'
 
OFB EXAMPLE: (OFB128-AES192)
------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex')
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex')
>>> plain = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_OFB,IV)
>>> output1 = cipher.encrypt(plain)
>>> output1.encode('hex')
'cdc80d6fddf18cab34c25909c99a4174'
>>> plain = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> output2 = cipher.encrypt(plain)
>>> output2.encode('hex')
'fcc28b8d4c63837c09e81700c1100401'
>>> decipher = python_AES.new(key,python_AES.MODE_OFB,IV)
>>> decipher.decrypt(output1 + output2).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'
 
OFB EXAMPLE: same as previous but now as a streamcipher
------------
>>> key = '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b'.decode('hex')
>>> IV = '000102030405060708090a0b0c0d0e0f'.decode('hex')
>>> plain = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_OFB,IV)
>>> output = ''
>>> for i in plain: output += cipher.encrypt(i)
>>> output.encode('hex')
'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c1100401'
 
 
CTR EXAMPLE:
------------
NIST Special Publication 800-38A http://cryptome.org/bcm/sp800-38a.htm#F
 
>>> from CryptoPlus.Util.util import Counter
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> counter = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
>>> cipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter)
>>> plaintext1 = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> plaintext2 = 'ae2d8a571e03ac9c9eb76fac45af8e51'.decode('hex')
>>> plaintext3 = '30c81c46a35ce411e5fbc1191a0a52ef'.decode('hex')
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
>>> ciphertext.encode('hex')
'874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab'
>>> counter2 = Counter('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex'))
>>> decipher = python_AES.new(key,python_AES.MODE_CTR,counter=counter2)
>>> decipher.decrypt(ciphertext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
XTS EXAMPLE:
------------
XTS-AES-128 applied for a data unit of 512 bytes
IEEE P1619/D16: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf
 
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plaintext)
>>> ciphertext.encode('hex')
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext).encode('hex')
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
 
using data sequence number n
 
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'22222222222222222222222222222222'.decode('hex'))
>>> plain ='4444444444444444444444444444444444444444444444444444444444444444'.decode('hex')
>>> n = '3333333333'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plain,n)
>>> ciphertext.encode('hex')
'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'4444444444444444444444444444444444444444444444444444444444444444'
 
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex'))
>>> plain ='72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a'.decode('hex')
>>> n = 'ff'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> cipher.encrypt(plain,n).encode('hex')
'3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd'
 
>>> key = ('2718281828459045235360287471352662497757247093699959574966967627'.decode('hex'),'3141592653589793238462643383279502884197169399375105820974944592'.decode('hex'))
>>> plain ='000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
>>> n = 'ffffffffff'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plain,n)
>>> ciphertext.encode('hex')
'64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
 
using plaintext not a multiple of 16
 
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f10111213'.decode('hex')
>>> n = '9a78563412'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plaintext,n)
>>> ciphertext.encode('hex')
'9d84c813f719aa2c7be3f66171c7c5c2edbf9dac'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'000102030405060708090a0b0c0d0e0f10111213'
 
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f10'.decode('hex')
>>> n = '9a78563412'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plaintext,n)
>>> ciphertext.encode('hex')
'6c1625db4671522d3d7599601de7ca09ed'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'000102030405060708090a0b0c0d0e0f10'
 
>>> key = ('e0e1e2e3e4e5e6e7e8e9eaebecedeeef'.decode('hex'),'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
>>> n = '21436587a9'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_XTS)
>>> ciphertext = cipher.encrypt(plaintext,n)
>>> ciphertext.encode('hex')
'38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3'
>>> decipher = python_AES.new(key,python_AES.MODE_XTS)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
 
CMAC EXAMPLE:
-------------
NIST publication 800-38B: http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf
 
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172a'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')[:16]
'070a16b46b4d4144'
 
CMAC EXAMPLE2:
--------------
>>> key = '2b7e151628aed2a6abf7158809cf4f3c'.decode('hex')
>>> plaintext = '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411'.decode('hex')
>>> cipher = python_AES.new(key,python_AES.MODE_CMAC)
>>> cipher.encrypt(plaintext).encode('hex')[:16]
'dfa66747de9ae630'
"""
return python_AES(key,mode,IV,counter,segment_size)
 
class python_AES(BlockCipher):
key_error_message = ("Key should be 128, 192 or 256 bits")
 
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = rijndael
args = {'block_size':16}
self.blocksize = 16
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args)
 
def keylen_valid(self,key):
return len(key) in (16,24,32)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/DES.py
0,0 → 1,51
from blockcipher import *
import Crypto.Cipher.DES
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
DES using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the keys
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import DES
 
EXAMPLE (test vectors from NESSIE):
-----------------------------------
 
>>> cipher = DES.new(('7CA110454A1A6E57').decode('hex'))
>>> ciphertext = cipher.encrypt(('01A1D6D039776742').decode('hex'))
>>> (ciphertext).encode('hex')
'690f5b0d9a26939b'
>>> plaintext = cipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'01a1d6d039776742'
 
"""
return DES(key,mode,IV,counter,segment_size)
 
class DES(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.DES.new
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_DES.py
0,0 → 1,57
from blockcipher import *
import pyDes
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
wrapper for pure python implementation pyDes.py
 
key = raw string containing the key
mode = python_DES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_DES
 
EXAMPLE (test vectors from NESSIE):
-----------------------------------
>>> cipher = python_DES.new(('7CA110454A1A6E57').decode('hex'))
>>> ciphertext = cipher.encrypt(('01A1D6D039776742').decode('hex'))
>>> (ciphertext).encode('hex')
'690f5b0d9a26939b'
>>> plaintext = cipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'01a1d6d039776742'
"""
return python_DES(key,mode,IV,counter,segment_size)
 
class python_DES(BlockCipher):
key_error_message = ("Key should be 64 bits")
 
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = pyDes.des
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def keylen_valid(self,key):
return len(key) == 8
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/Blowfish.py
0,0 → 1,77
from blockcipher import *
import Crypto.Cipher.Blowfish
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
Blowfish using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the key
mode = Blowfish.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import Blowfish
 
ECB EXAMPLE: http://www.schneier.com/code/vectors.txt
-------------
>>> cipher = Blowfish.new(('0131D9619DC1376E').decode('hex'))
>>> ( cipher.encrypt(('5CD54CA83DEF57DA').decode('hex')) ).encode('hex')
'b1b8cc0b250f09a0'
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex')
'5cd54ca83def57da'
 
CBC, CFB, OFB EXAMPLE: http://www.schneier.com/code/vectors.txt
----------------------
>>> key = ('0123456789ABCDEFF0E1D2C3B4A59687').decode('hex')
>>> IV = ('FEDCBA9876543210').decode('hex')
>>> plaintext = ('37363534333231204E6F77206973207468652074696D6520').decode('hex')
>>> cipher = Blowfish.new(key,Blowfish.MODE_CBC,IV)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9'
 
 
>>> key = '0123456789ABCDEFF0E1D2C3B4A59687'.decode('hex')
>>> iv = 'FEDCBA9876543210'.decode('hex')
>>> plaintext = '37363534333231204E6F77206973207468652074696D6520666F722000'.decode('hex')
 
>>> cipher = Blowfish.new(key,Blowfish.MODE_CBC,iv)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9'
 
>>> cipher = Blowfish.new(key,Blowfish.MODE_CFB,iv,segment_size=64)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3'
 
>>> cipher = Blowfish.new(key,Blowfish.MODE_OFB,iv)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'E73214A2822139CA62B343CC5B65587310DD908D0C241B2263C2CF80DA'
"""
return Blowfish(key,mode,IV,counter,segment_size)
 
class Blowfish(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.Blowfish.new
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_Blowfish.py
0,0 → 1,82
from blockcipher import *
from pyblowfish import Blowfish
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
Wrapper for pure python implementation pyblowfish.py
 
key = raw string containing the key
mode = Blowfish.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_Blowfish
 
EXAMPLE: (http://www.schneier.com/code/vectors.txt)
----------
 
>>> cipher = python_Blowfish.new(('0131D9619DC1376E').decode('hex'))
>>> ( cipher.encrypt(('5CD54CA83DEF57DA').decode('hex')) ).encode('hex')
'b1b8cc0b250f09a0'
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex')
'5cd54ca83def57da'
 
CBC, CFB, OFB EXAMPLE: http://www.schneier.com/code/vectors.txt
----------------------
>>> key = ('0123456789ABCDEFF0E1D2C3B4A59687').decode('hex')
>>> IV = ('FEDCBA9876543210').decode('hex')
>>> plaintext = ('37363534333231204E6F77206973207468652074696D6520').decode('hex')
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CBC,IV)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9'
 
 
>>> key = '0123456789ABCDEFF0E1D2C3B4A59687'.decode('hex')
>>> iv = 'FEDCBA9876543210'.decode('hex')
>>> plaintext = '37363534333231204E6F77206973207468652074696D6520666F722000'.decode('hex')
 
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CBC,iv)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'6B77B4D63006DEE605B156E27403979358DEB9E7154616D9'
 
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_CFB,iv,segment_size=64)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'E73214A2822139CAF26ECF6D2EB9E76E3DA3DE04D1517200519D57A6C3'
 
>>> cipher = python_Blowfish.new(key,python_Blowfish.MODE_OFB,iv)
>>> ciphertext = cipher.encrypt(plaintext)
>>> (ciphertext).encode('hex').upper()
'E73214A2822139CA62B343CC5B65587310DD908D0C241B2263C2CF80DA'"""
return python_Blowfish(key,mode,IV,counter,segment_size)
 
class python_Blowfish(BlockCipher):
key_error_message = "Key should be between 8 and 56 bytes (64 <-> 448 bits)"
 
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Blowfish
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def keylen_valid(self,key):
return 8 <= len(key) <= 56
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_Serpent.py
0,0 → 1,68
from blockcipher import *
from pyserpent import Serpent
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
Wrapper for pure python implementation pyserpent.py
 
key = raw string containing the key
-> when using XTS mode: the key should be a tuple containing the 2 keys needed
mode = python_Serpent.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_Serpent
 
EXAMPLE:
---------
NESSIE Test Vectors: http://www.cs.technion.ac.il/~biham/Reports/Serpent/Serpent-128-128.verified.test-vectors
 
>>> cipher = python_Serpent.new(('000102030405060708090A0B0C0D0E0F').decode('hex'))
>>> (cipher.encrypt(('33B3DC87EDDD9B0F6A1F407D14919365').decode('hex'))).encode('hex').upper()
'00112233445566778899AABBCCDDEEFF'
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper()
'33B3DC87EDDD9B0F6A1F407D14919365'
 
>>> cipher = python_Serpent.new(('FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD').decode('hex'))
>>> (cipher.encrypt(('FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD').decode('hex'))).encode('hex').upper()
'81F9163BDF39B5BB2932AB91DF2A5FFC'
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper()
'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD'
 
CBC EXAMPLE:
-------------
>>> key = ('000102030405060708090A0B0C0D0E0F').decode('hex')
>>> IV = ('00000000000000000000000000000000').decode('hex')
>>> plaintext = ('33B3DC87EDDD9B0F6A1F407D14919365'*3).decode('hex')
>>> cipher = python_Serpent.new(key,python_Serpent.MODE_CBC,IV)
>>> ciphertext = cipher.encrypt(plaintext)
>>> decipher = python_Serpent.new(key,python_Serpent.MODE_CBC,IV)
>>> ( decipher.decrypt(ciphertext)).encode('hex').upper()
'33B3DC87EDDD9B0F6A1F407D1491936533B3DC87EDDD9B0F6A1F407D1491936533B3DC87EDDD9B0F6A1F407D14919365'
"""
return python_Serpent(key,mode,IV,counter,segment_size)
 
class python_Serpent(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
if len(key) not in (16,24,32) and type(key) is not tuple:
raise ValueError("Key should be 128, 192 or 256 bits")
cipher_module = Serpent
self.blocksize = 16
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_PRESENT.py
0,0 → 1,94
from blockcipher import *
from pypresent import Present
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,rounds=32):
"""Create a new cipher object
 
Wrapper for pure python implementation rijndael.py
 
key = raw string containing the key, AES-128..256 will be selected according to the key length
mode = python_PRESENT.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
rounds = amount of rounds
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
rounds = amount of rounds, default = 32
 
Notes:
- Always construct a seperate cipher object for encryption and decryption. Once a cipher object has been used for encryption,
it can't be used for decryption because it keeps a state (if necessary) for the IV.
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_PRESENT
 
ECB Test Vectors:
------------------
>>> key = "00000000000000000000".decode('hex')
>>> plain = "0000000000000000".decode('hex')
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB)
>>> cipher.encrypt(plain).encode('hex')
'5579c1387b228445'
>>> key = "00000000000000000000000000000000".decode('hex')
>>> plain = "0000000000000000".decode('hex')
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=64)
>>> cipher.encrypt(plain).encode('hex')
'59a27d01607ebf05'
>>> key = "00000000000000000000".decode('hex')
>>> plain = "0000000000000000".decode('hex')
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=64)
>>> cipher.encrypt(plain).encode('hex')
'13991dd588bc1288'
Test Vectors for maximum rounds supported by PRESENT reference C code:
-----------------------------------------------------------------------
>>> key = "0123456789abcdef0123".decode('hex')
>>> plain = "0123456789abcdef".decode('hex')
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=65534)
>>> ciphertext = cipher.encrypt(plain)
>>> ciphertext.encode('hex')
'a140dc5d7175ca20'
>>> cipher.decrypt(ciphertext).encode('hex')
'0123456789abcdef'
>>> key = "0123456789abcdef0123456789abcdef".decode('hex')
>>> plain = "0123456789abcdef".decode('hex')
>>> cipher = python_PRESENT.new(key,python_PRESENT.MODE_ECB,rounds=65534)
>>> ciphertext = cipher.encrypt(plain)
>>> ciphertext.encode('hex')
'21007772e5d4ef14'
>>> cipher.decrypt(ciphertext).encode('hex')
'0123456789abcdef'
"""
return python_PRESENT(key,mode,IV,counter,rounds,segment_size)
 
class python_PRESENT(BlockCipher):
key_error_message = "Key should be 80 or 128 bits"
 
def __init__(self,key,mode,IV,counter,rounds,segment_size):
cipher_module = Present
args = {'rounds':rounds}
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args)
 
def keylen_valid(self,key):
return len(key) in (10,16)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_Twofish.py
0,0 → 1,55
from blockcipher import *
from pytwofish import Twofish
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
Wrapper for pure python implementation pytwofish.py
 
key = raw string containing the key
-> when using XTS mode: the key should be a tuple containing the 2 keys needed
mode = python_Twofish.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_Twofish
 
EXAMPLE:
----------
http://www.schneier.com/code/ecb_ival.txt -> test vector I=5
 
>>> cipher = python_Twofish.new(('019F9809DE1711858FAAC3A3BA20FBC3').decode('hex'))
>>> (cipher.encrypt(('6363977DE839486297E661C6C9D668EB').decode('hex'))).encode('hex').upper()
'816D5BD0FAE35342BF2A7412C246F752'
>>> ( cipher.decrypt((_).decode('hex')) ).encode('hex').upper()
'6363977DE839486297E661C6C9D668EB'
"""
return python_Twofish(key,mode,IV,counter,segment_size)
 
class python_Twofish(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
if len(key) not in (16,24,32) and type(key) is not tuple:
raise ValueError("Key should be 128, 192 or 256 bits")
cipher_module = Twofish
self.blocksize = 16
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/pyDes.py
0,0 → 1,803
#############################################################################
# Documentation #
#############################################################################
 
# Author: Todd Whiteman
# Date: 12th September, 2005
# Verion: 1.2
# Homepage: http://twhiteman.netfirms.com/des.html
#
# This algorithm is a pure python implementation of the DES algorithm.
# It is in pure python to avoid portability issues, since most DES
# implementations are programmed in C (for performance reasons).
#
# Triple DES class is also implemented, utilising the DES base. Triple DES
# is either DES-EDE3 with a 24 byte key, or DES-EDE2 with a 16 byte key.
#
# See the README.txt that should come with this python module for the
# implementation methods used.
#
# Thanks to David Broadwell for ideas, comments and suggestions.
# Thanks to Mario Wolff for pointing out and debugging some triple des CBC errors.
#
"""A pure python implementation of the DES and TRIPLE DES encryption algorithms
 
pyDes.des(key, [mode], [IV])
pyDes.triple_des(key, [mode], [IV])
 
key -> String containing the encryption key. 8 bytes for DES, 16 or 24 bytes
for Triple DES
mode -> Optional argument for encryption type, can be either
pyDes.ECB (Electronic Code Book) or pyDes.CBC (Cypher Block Chaining)
IV -> Optional argument, must be supplied if using CBC mode. Must be 8 bytes
 
 
Example:
from pyDes import *
 
data = "Please encrypt my string"
k = des("DESCRYPT", " ", CBC, "\0\0\0\0\0\0\0\0")
d = k.encrypt(data)
print "Encypted string: " + d
print "Decypted string: " + k.decrypt(d)
 
See the module source (pyDes.py) for more examples of use.
You can slo run the pyDes.py file without and arguments to see a simple test.
 
Note: This code was not written for high-end systems needing a fast
implementation, but rather a handy portable solution with small usage.
 
"""
 
 
# Modes of crypting / cyphering
ECB = 0
CBC = 1
 
 
#############################################################################
# DES #
#############################################################################
class des:
"""DES encryption/decrytpion class
 
Supports ECB (Electronic Code Book) and CBC (Cypher Block Chaining) modes.
 
pyDes.des(key,[mode], [IV])
 
key -> The encryption key string, must be exactly 8 bytes
mode -> Optional argument for encryption type, can be either pyDes.ECB
(Electronic Code Book), pyDes.CBC (Cypher Block Chaining)
IV -> Optional string argument, must be supplied if using CBC mode.
Must be 8 bytes in length.
"""
 
 
# Permutation and translation tables for DES
__pc1 = [56, 48, 40, 32, 24, 16, 8,
0, 57, 49, 41, 33, 25, 17,
9, 1, 58, 50, 42, 34, 26,
18, 10, 2, 59, 51, 43, 35,
62, 54, 46, 38, 30, 22, 14,
6, 61, 53, 45, 37, 29, 21,
13, 5, 60, 52, 44, 36, 28,
20, 12, 4, 27, 19, 11, 3
]
 
# number left rotations of pc1
__left_rotations = [
1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
]
 
# permuted choice key (table 2)
__pc2 = [
13, 16, 10, 23, 0, 4,
2, 27, 14, 5, 20, 9,
22, 18, 11, 3, 25, 7,
15, 6, 26, 19, 12, 1,
40, 51, 30, 36, 46, 54,
29, 39, 50, 44, 32, 47,
43, 48, 38, 55, 33, 52,
45, 41, 49, 35, 28, 31
]
 
# initial permutation IP
__ip = [57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7,
56, 48, 40, 32, 24, 16, 8, 0,
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6
]
 
# Expansion table for turning 32 bit blocks into 48 bits
__expansion_table = [
31, 0, 1, 2, 3, 4,
3, 4, 5, 6, 7, 8,
7, 8, 9, 10, 11, 12,
11, 12, 13, 14, 15, 16,
15, 16, 17, 18, 19, 20,
19, 20, 21, 22, 23, 24,
23, 24, 25, 26, 27, 28,
27, 28, 29, 30, 31, 0
]
 
# The (in)famous S-boxes
__sbox = [
# S1
[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13],
 
# S2
[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9],
 
# S3
[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12],
 
# S4
[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14],
 
# S5
[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3],
 
# S6
[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13],
 
# S7
[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12],
 
# S8
[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11],
]
 
 
# 32-bit permutation function P used on the output of the S-boxes
__p = [
15, 6, 19, 20, 28, 11,
27, 16, 0, 14, 22, 25,
4, 17, 30, 9, 1, 7,
23,13, 31, 26, 2, 8,
18, 12, 29, 5, 21, 10,
3, 24
]
 
# final permutation IP^-1
__fp = [
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25,
32, 0, 40, 8, 48, 16, 56, 24
]
 
# Type of crypting being done
ENCRYPT = 0x00
DECRYPT = 0x01
 
# Initialisation
def __init__(self, key, mode=ECB, IV=None):
if len(key) != 8:
raise ValueError("Invalid DES key size. Key must be exactly 8 bytes long.")
self.block_size = 8
self.key_size = 8
self.__padding = ''
 
# Set the passed in variables
self.setMode(mode)
if IV:
self.setIV(IV)
 
self.L = []
self.R = []
self.Kn = [ [0] * 48 ] * 16 # 16 48-bit keys (K1 - K16)
self.final = []
 
self.setKey(key)
 
 
def getKey(self):
"""getKey() -> string"""
return self.__key
 
def setKey(self, key):
"""Will set the crypting key for this object. Must be 8 bytes."""
self.__key = key
self.__create_sub_keys()
 
def getMode(self):
"""getMode() -> pyDes.ECB or pyDes.CBC"""
return self.__mode
 
def setMode(self, mode):
"""Sets the type of crypting mode, pyDes.ECB or pyDes.CBC"""
self.__mode = mode
 
def getIV(self):
"""getIV() -> string"""
return self.__iv
 
def setIV(self, IV):
"""Will set the Initial Value, used in conjunction with CBC mode"""
if not IV or len(IV) != self.block_size:
raise ValueError("Invalid Initial Value (IV), must be a multiple of " + str(self.block_size) + " bytes")
self.__iv = IV
 
def getPadding(self):
"""getPadding() -> string of length 1. Padding character."""
return self.__padding
 
def __String_to_BitList(self, data):
"""Turn the string data, into a list of bits (1, 0)'s"""
l = len(data) * 8
result = [0] * l
pos = 0
for c in data:
i = 7
ch = ord(c)
while i >= 0:
if ch & (1 << i) != 0:
result[pos] = 1
else:
result[pos] = 0
pos += 1
i -= 1
 
return result
 
def __BitList_to_String(self, data):
"""Turn the list of bits -> data, into a string"""
result = ''
pos = 0
c = 0
while pos < len(data):
c += data[pos] << (7 - (pos % 8))
if (pos % 8) == 7:
result += chr(c)
c = 0
pos += 1
 
return result
 
def __permutate(self, table, block):
"""Permutate this block with the specified table"""
return map(lambda x: block[x], table)
 
# Transform the secret key, so that it is ready for data processing
# Create the 16 subkeys, K[1] - K[16]
def __create_sub_keys(self):
"""Create the 16 subkeys K[1] to K[16] from the given key"""
key = self.__permutate(des.__pc1, self.__String_to_BitList(self.getKey()))
i = 0
# Split into Left and Right sections
self.L = key[:28]
self.R = key[28:]
while i < 16:
j = 0
# Perform circular left shifts
while j < des.__left_rotations[i]:
self.L.append(self.L[0])
del self.L[0]
 
self.R.append(self.R[0])
del self.R[0]
 
j += 1
 
# Create one of the 16 subkeys through pc2 permutation
self.Kn[i] = self.__permutate(des.__pc2, self.L + self.R)
 
i += 1
 
# Main part of the encryption algorithm, the number cruncher :)
def __des_crypt(self, block, crypt_type):
"""Crypt the block of data through DES bit-manipulation"""
block = self.__permutate(des.__ip, block)
self.L = block[:32]
self.R = block[32:]
 
# Encryption starts from Kn[1] through to Kn[16]
if crypt_type == des.ENCRYPT:
iteration = 0
iteration_adjustment = 1
# Decryption starts from Kn[16] down to Kn[1]
else:
iteration = 15
iteration_adjustment = -1
 
i = 0
while i < 16:
# Make a copy of R[i-1], this will later become L[i]
tempR = self.R[:]
 
# Permutate R[i - 1] to start creating R[i]
self.R = self.__permutate(des.__expansion_table, self.R)
 
# Exclusive or R[i - 1] with K[i], create B[1] to B[8] whilst here
self.R = map(lambda x, y: x ^ y, self.R, self.Kn[iteration])
B = [self.R[:6], self.R[6:12], self.R[12:18], self.R[18:24], self.R[24:30], self.R[30:36], self.R[36:42], self.R[42:]]
# Optimization: Replaced below commented code with above
#j = 0
#B = []
#while j < len(self.R):
# self.R[j] = self.R[j] ^ self.Kn[iteration][j]
# j += 1
# if j % 6 == 0:
# B.append(self.R[j-6:j])
 
# Permutate B[1] to B[8] using the S-Boxes
j = 0
Bn = [0] * 32
pos = 0
while j < 8:
# Work out the offsets
m = (B[j][0] << 1) + B[j][5]
n = (B[j][1] << 3) + (B[j][2] << 2) + (B[j][3] << 1) + B[j][4]
 
# Find the permutation value
v = des.__sbox[j][(m << 4) + n]
 
# Turn value into bits, add it to result: Bn
Bn[pos] = (v & 8) >> 3
Bn[pos + 1] = (v & 4) >> 2
Bn[pos + 2] = (v & 2) >> 1
Bn[pos + 3] = v & 1
 
pos += 4
j += 1
 
# Permutate the concatination of B[1] to B[8] (Bn)
self.R = self.__permutate(des.__p, Bn)
 
# Xor with L[i - 1]
self.R = map(lambda x, y: x ^ y, self.R, self.L)
# Optimization: This now replaces the below commented code
#j = 0
#while j < len(self.R):
# self.R[j] = self.R[j] ^ self.L[j]
# j += 1
 
# L[i] becomes R[i - 1]
self.L = tempR
 
i += 1
iteration += iteration_adjustment
 
# Final permutation of R[16]L[16]
self.final = self.__permutate(des.__fp, self.R + self.L)
return self.final
 
 
# Data to be encrypted/decrypted
def crypt(self, data, crypt_type):
"""Crypt the data in blocks, running it through des_crypt()"""
 
# Error check the data
if not data:
return ''
if len(data) % self.block_size != 0:
if crypt_type == des.DECRYPT: # Decryption must work on 8 byte blocks
raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n.")
if not self.getPadding():
raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character")
else:
data += (self.block_size - (len(data) % self.block_size)) * self.getPadding()
# print "Len of data: %f" % (len(data) / self.block_size)
 
if self.getMode() == CBC:
if self.getIV():
iv = self.__String_to_BitList(self.getIV())
else:
raise ValueError("For CBC mode, you must supply the Initial Value (IV) for ciphering")
 
# Split the data into blocks, crypting each one seperately
i = 0
dict = {}
result = []
#cached = 0
#lines = 0
while i < len(data):
# Test code for caching encryption results
#lines += 1
#if dict.has_key(data[i:i+8]):
#print "Cached result for: %s" % data[i:i+8]
# cached += 1
# result.append(dict[data[i:i+8]])
# i += 8
# continue
 
block = self.__String_to_BitList(data[i:i+8])
 
# Xor with IV if using CBC mode
if self.getMode() == CBC:
if crypt_type == des.ENCRYPT:
block = map(lambda x, y: x ^ y, block, iv)
#j = 0
#while j < len(block):
# block[j] = block[j] ^ iv[j]
# j += 1
 
processed_block = self.__des_crypt(block, crypt_type)
 
if crypt_type == des.DECRYPT:
processed_block = map(lambda x, y: x ^ y, processed_block, iv)
#j = 0
#while j < len(processed_block):
# processed_block[j] = processed_block[j] ^ iv[j]
# j += 1
iv = block
else:
iv = processed_block
else:
processed_block = self.__des_crypt(block, crypt_type)
 
 
# Add the resulting crypted block to our list
#d = self.__BitList_to_String(processed_block)
#result.append(d)
result.append(self.__BitList_to_String(processed_block))
#dict[data[i:i+8]] = d
i += 8
 
# print "Lines: %d, cached: %d" % (lines, cached)
 
# Remove the padding from the last block
if crypt_type == des.DECRYPT and self.getPadding():
#print "Removing decrypt pad"
s = result[-1]
while s[-1] == self.getPadding():
s = s[:-1]
result[-1] = s
 
# Return the full crypted string
return ''.join(result)
 
def encrypt(self, data, pad=''):
"""encrypt(data, [pad]) -> string
 
data : String to be encrypted
pad : Optional argument for encryption padding. Must only be one byte
 
The data must be a multiple of 8 bytes and will be encrypted
with the already specified key. Data does not have to be a
multiple of 8 bytes if the padding character is supplied, the
data will then be padded to a multiple of 8 bytes with this
pad character.
"""
self.__padding = pad
return self.crypt(data, des.ENCRYPT)
 
def decrypt(self, data, pad=''):
"""decrypt(data, [pad]) -> string
 
data : String to be encrypted
pad : Optional argument for decryption padding. Must only be one byte
 
The data must be a multiple of 8 bytes and will be decrypted
with the already specified key. If the optional padding character
is supplied, then the un-encypted data will have the padding characters
removed from the end of the string. This pad removal only occurs on the
last 8 bytes of the data (last data block).
"""
self.__padding = pad
return self.crypt(data, des.DECRYPT)
 
 
#############################################################################
# Triple DES #
#############################################################################
class triple_des:
"""Triple DES encryption/decrytpion class
 
This algorithm uses the DES-EDE3 (when a 24 byte key is supplied) or
the DES-EDE2 (when a 16 byte key is supplied) encryption methods.
Supports ECB (Electronic Code Book) and CBC (Cypher Block Chaining) modes.
 
pyDes.des(key, [mode], [IV])
 
key -> The encryption key string, must be either 16 or 24 bytes long
mode -> Optional argument for encryption type, can be either pyDes.ECB
(Electronic Code Book), pyDes.CBC (Cypher Block Chaining)
IV -> Optional string argument, must be supplied if using CBC mode.
Must be 8 bytes in length.
"""
def __init__(self, key, mode=ECB, IV=None):
self.block_size = 8
self.setMode(mode)
self.__padding = ''
self.__iv = IV
self.setKey(key)
 
def getKey(self):
"""getKey() -> string"""
return self.__key
 
def setKey(self, key):
"""Will set the crypting key for this object. Either 16 or 24 bytes long."""
self.key_size = 24 # Use DES-EDE3 mode
if len(key) != self.key_size:
if len(key) == 16: # Use DES-EDE2 mode
self.key_size = 16
else:
raise ValueError("Invalid triple DES key size. Key must be either 16 or 24 bytes long")
if self.getMode() == CBC:
if not self.getIV():
# Use the first 8 bytes of the key
self.setIV(key[:self.block_size])
if len(self.getIV()) != self.block_size:
raise ValueError("Invalid IV, must be 8 bytes in length")
self.__key1 = des(key[:8], self.getMode(), self.getIV())
self.__key2 = des(key[8:16], self.getMode(), self.getIV())
if self.key_size == 16:
self.__key3 = self.__key1
else:
self.__key3 = des(key[16:], self.getMode(), self.getIV())
self.__key = key
 
def getMode(self):
"""getMode() -> pyDes.ECB or pyDes.CBC"""
return self.__mode
 
def setMode(self, mode):
"""Sets the type of crypting mode, pyDes.ECB or pyDes.CBC"""
self.__mode = mode
 
def getIV(self):
"""getIV() -> string"""
return self.__iv
 
def setIV(self, IV):
"""Will set the Initial Value, used in conjunction with CBC mode"""
self.__iv = IV
 
def encrypt(self, data, pad=''):
"""encrypt(data, [pad]) -> string
 
data : String to be encrypted
pad : Optional argument for encryption padding. Must only be one byte
 
The data must be a multiple of 8 bytes and will be encrypted
with the already specified key. Data does not have to be a
multiple of 8 bytes if the padding character is supplied, the
data will then be padded to a multiple of 8 bytes with this
pad character.
"""
if self.getMode() == CBC:
self.__key1.setIV(self.getIV())
self.__key2.setIV(self.getIV())
self.__key3.setIV(self.getIV())
i = 0
result = []
while i < len(data):
block = self.__key1.encrypt(data[i:i+8], pad)
block = self.__key2.decrypt(block)
block = self.__key3.encrypt(block)
self.__key1.setIV(block)
self.__key2.setIV(block)
self.__key3.setIV(block)
result.append(block)
i += 8
return ''.join(result)
else:
data = self.__key1.encrypt(data, pad)
data = self.__key2.decrypt(data)
return self.__key3.encrypt(data)
 
def decrypt(self, data, pad=''):
"""decrypt(data, [pad]) -> string
 
data : String to be encrypted
pad : Optional argument for decryption padding. Must only be one byte
 
The data must be a multiple of 8 bytes and will be decrypted
with the already specified key. If the optional padding character
is supplied, then the un-encypted data will have the padding characters
removed from the end of the string. This pad removal only occurs on the
last 8 bytes of the data (last data block).
"""
if self.getMode() == CBC:
self.__key1.setIV(self.getIV())
self.__key2.setIV(self.getIV())
self.__key3.setIV(self.getIV())
i = 0
result = []
while i < len(data):
iv = data[i:i+8]
block = self.__key3.decrypt(iv)
block = self.__key2.encrypt(block)
block = self.__key1.decrypt(block, pad)
self.__key1.setIV(iv)
self.__key2.setIV(iv)
self.__key3.setIV(iv)
result.append(block)
i += 8
return ''.join(result)
else:
data = self.__key3.decrypt(data)
data = self.__key2.encrypt(data)
return self.__key1.decrypt(data, pad)
 
 
#############################################################################
# Examples #
#############################################################################
def example_triple_des():
from time import time
 
# Utility module
from binascii import unhexlify as unhex
 
# example shows triple-des encryption using the des class
print "Example of triple DES encryption in default ECB mode (DES-EDE3)\n"
 
print "Triple des using the des class (3 times)"
t = time()
k1 = des(unhex("133457799BBCDFF1"))
k2 = des(unhex("1122334455667788"))
k3 = des(unhex("77661100DD223311"))
d = "Triple DES test string, to be encrypted and decrypted..."
print "Key1: %s" % k1.getKey()
print "Key2: %s" % k2.getKey()
print "Key3: %s" % k3.getKey()
print "Data: %s" % d
 
e1 = k1.encrypt(d)
e2 = k2.decrypt(e1)
e3 = k3.encrypt(e2)
print "Encrypted: " + e3
 
d3 = k3.decrypt(e3)
d2 = k2.encrypt(d3)
d1 = k1.decrypt(d2)
print "Decrypted: " + d1
print "DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8))
print ""
 
# Example below uses the triple-des class to achieve the same as above
print "Now using triple des class"
t = time()
t1 = triple_des(unhex("133457799BBCDFF1112233445566778877661100DD223311"))
print "Key: %s" % t1.getKey()
print "Data: %s" % d
 
td1 = t1.encrypt(d)
print "Encrypted: " + td1
 
td2 = t1.decrypt(td1)
print "Decrypted: " + td2
 
print "Triple DES time taken: %f (%d crypt operations)" % (time() - t, 6 * (len(d) / 8))
 
def example_des():
from time import time
 
# example of DES encrypting in CBC mode with the IV of "\0\0\0\0\0\0\0\0"
print "Example of DES encryption using CBC mode\n"
t = time()
k = des("DESCRYPT", CBC, "\0\0\0\0\0\0\0\0")
data = "DES encryption algorithm"
print "Key : " + k.getKey()
print "Data : " + data
 
d = k.encrypt(data)
print "Encrypted: " + d
 
d = k.decrypt(d)
print "Decrypted: " + d
print "DES time taken: %f (6 crypt operations)" % (time() - t)
print ""
 
def __test__():
example_des()
example_triple_des()
 
 
def __fulltest__():
# This should not produce any unexpected errors or exceptions
from binascii import unhexlify as unhex
from binascii import hexlify as dohex
 
__test__()
print ""
 
k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0")
d = k.encrypt("DES encryption algorithm")
if k.decrypt(d) != "DES encryption algorithm":
print "Test 1 Error: Unencypted data block does not match start data"
 
k = des("\0\0\0\0\0\0\0\0", CBC, "\0\0\0\0\0\0\0\0")
d = k.encrypt("Default string of text", '*')
if k.decrypt(d, "*") != "Default string of text":
print "Test 2 Error: Unencypted data block does not match start data"
 
k = des("\r\n\tABC\r\n")
d = k.encrypt("String to Pad", '*')
if k.decrypt(d) != "String to Pad***":
print "'%s'" % k.decrypt(d)
print "Test 3 Error: Unencypted data block does not match start data"
 
k = des("\r\n\tABC\r\n")
d = k.encrypt(unhex("000102030405060708FF8FDCB04080"), unhex("44"))
if k.decrypt(d, unhex("44")) != unhex("000102030405060708FF8FDCB04080"):
print "Test 4a Error: Unencypted data block does not match start data"
if k.decrypt(d) != unhex("000102030405060708FF8FDCB0408044"):
print "Test 4b Error: Unencypted data block does not match start data"
 
k = triple_des("MyDesKey\r\n\tABC\r\n0987*543")
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"))
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"):
print "Test 5 Error: Unencypted data block does not match start data"
 
k = triple_des("\r\n\tABC\r\n0987*543")
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"))
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"):
print "Test 6 Error: Unencypted data block does not match start data"
 
k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234")
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"))
if k.decrypt(d) != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080"):
print "Test 7 Error: Triple DES CBC failed."
 
k = triple_des("MyDesKey\r\n\tABC\r\n0987*54B", CBC, "12341234")
d = k.encrypt(unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"), '.')
if k.decrypt(d, '.') != unhex("000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDCB04080000102030405060708FF8FDC"):
print "Test 8 Error: Triple DES CBC with padding failed."
 
def __filetest__():
from time import time
 
f = open("pyDes.py", "rb+")
d = f.read()
f.close()
 
t = time()
k = des("MyDESKey")
 
d = k.encrypt(d, " ")
f = open("pyDes.py.enc", "wb+")
f.write(d)
f.close()
 
d = k.decrypt(d, " ")
f = open("pyDes.py.dec", "wb+")
f.write(d)
f.close()
print "DES file test time: %f" % (time() - t)
 
def __profile__():
import profile
profile.run('__fulltest__()')
#profile.run('__filetest__()')
 
if __name__ == '__main__':
__test__()
#__fulltest__()
#__filetest__()
#__profile__()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/blockcipher.py
0,0 → 1,594
# =============================================================================
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com>
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> )
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# =============================================================================
from ..Util import util
from array import array
from ..Util import padding
 
MODE_ECB = 1
MODE_CBC = 2
MODE_CFB = 3
MODE_OFB = 5
MODE_CTR = 6
MODE_XTS = 7
MODE_CMAC = 8
 
class BlockCipher():
""" Base class for all blockciphers
"""
 
key_error_message = "Wrong key size" #should be overwritten in child classes
 
def __init__(self,key,mode,IV,counter,cipher_module,segment_size,args={}):
# Cipher classes inheriting from this one take care of:
# self.blocksize
# self.cipher
self.key = key
self.mode = mode
self.cache = ''
self.ed = None
 
if 'keylen_valid' in dir(self): #wrappers for pycrypto functions don't have this function
if not self.keylen_valid(key) and type(key) is not tuple:
raise ValueError(self.key_error_message)
 
if IV == None:
self.IV = '\x00'*self.blocksize
else:
self.IV = IV
if segment_size == None:
segment_size = 8
 
if mode <> MODE_XTS:
self.cipher = cipher_module(self.key,**args)
if mode == MODE_ECB:
self.chain = ECB(self.cipher, self.blocksize)
elif mode == MODE_CBC:
if len(self.IV) <> self.blocksize:
raise Exception,"the IV length should be %i bytes"%self.blocksize
self.chain = CBC(self.cipher, self.blocksize,self.IV)
elif mode == MODE_CFB:
if len(self.IV) <> self.blocksize:
raise Exception,"the IV length should be %i bytes"%self.blocksize
if segment_size > self.blocksize*8 or segment_size%8 <> 0:
# current CFB implementation doesn't support bit level acces => segment_size should be multiple of bytes
raise ValueError,"segment size should be a multiple of 8 bits between 8 and %i"%(self.blocksize*8)
self.chain = CFB(self.cipher, self.blocksize,self.IV,segment_size)
elif mode == MODE_OFB:
if len(self.IV) <> self.blocksize:
raise ValueError("the IV length should be %i bytes"%self.blocksize)
self.chain = OFB(self.cipher, self.blocksize,self.IV)
elif mode == MODE_CTR:
if (counter == None) or not callable(counter):
raise Exception,"Supply a valid counter object for the CTR mode"
self.chain = CTR(self.cipher,self.blocksize,counter)
elif mode == MODE_XTS:
if self.blocksize <> 16:
raise Exception,'XTS only works with blockcipher that have a 128-bit blocksize'
if not(type(key) == tuple and len(key) == 2):
raise Exception,'Supply two keys as a tuple when using XTS'
if 'keylen_valid' in dir(self): #wrappers for pycrypto functions don't have this function
if not self.keylen_valid(key[0]) or not self.keylen_valid(key[1]):
raise ValueError(self.key_error_message)
self.cipher = cipher_module(self.key[0],**args)
self.cipher2 = cipher_module(self.key[1],**args)
self.chain = XTS(self.cipher, self.cipher2)
elif mode == MODE_CMAC:
if self.blocksize not in (8,16):
raise Exception,'CMAC only works with blockcipher that have a 64 or 128-bit blocksize'
self.chain = CMAC(self.cipher,self.blocksize,self.IV)
else:
raise Exception,"Unknown chaining mode!"
 
def encrypt(self,plaintext,n=''):
"""Encrypt some plaintext
 
plaintext = a string of binary data
n = the 'tweak' value when the chaining mode is XTS
 
The encrypt function will encrypt the supplied plaintext.
The behavior varies slightly depending on the chaining mode.
 
ECB, CBC:
---------
When the supplied plaintext is not a multiple of the blocksize
of the cipher, then the remaining plaintext will be cached.
The next time the encrypt function is called with some plaintext,
the new plaintext will be concatenated to the cache and then
cache+plaintext will be encrypted.
 
CFB, OFB, CTR:
--------------
When the chaining mode allows the cipher to act as a stream cipher,
the encrypt function will always encrypt all of the supplied
plaintext immediately. No cache will be kept.
 
XTS:
----
Because the handling of the last two blocks is linked,
it needs the whole block of plaintext to be supplied at once.
Every encrypt function called on a XTS cipher will output
an encrypted block based on the current supplied plaintext block.
 
CMAC:
-----
Everytime the function is called, the hash from the input data is calculated.
No finalizing needed.
The hashlength is equal to block size of the used block cipher.
"""
#self.ed = 'e' if chain is encrypting, 'd' if decrypting,
# None if nothing happened with the chain yet
#assert self.ed in ('e',None)
# makes sure you don't encrypt with a cipher that has started decrypting
self.ed = 'e'
if self.mode == MODE_XTS:
# data sequence number (or 'tweak') has to be provided when in XTS mode
return self.chain.update(plaintext,'e',n)
else:
return self.chain.update(plaintext,'e')
 
def decrypt(self,ciphertext,n=''):
"""Decrypt some ciphertext
 
ciphertext = a string of binary data
n = the 'tweak' value when the chaining mode is XTS
 
The decrypt function will decrypt the supplied ciphertext.
The behavior varies slightly depending on the chaining mode.
 
ECB, CBC:
---------
When the supplied ciphertext is not a multiple of the blocksize
of the cipher, then the remaining ciphertext will be cached.
The next time the decrypt function is called with some ciphertext,
the new ciphertext will be concatenated to the cache and then
cache+ciphertext will be decrypted.
 
CFB, OFB, CTR:
--------------
When the chaining mode allows the cipher to act as a stream cipher,
the decrypt function will always decrypt all of the supplied
ciphertext immediately. No cache will be kept.
 
XTS:
----
Because the handling of the last two blocks is linked,
it needs the whole block of ciphertext to be supplied at once.
Every decrypt function called on a XTS cipher will output
a decrypted block based on the current supplied ciphertext block.
 
CMAC:
-----
Mode not supported for decryption as this does not make sense.
"""
#self.ed = 'e' if chain is encrypting, 'd' if decrypting,
# None if nothing happened with the chain yet
#assert self.ed in ('d',None)
# makes sure you don't decrypt with a cipher that has started encrypting
self.ed = 'd'
if self.mode == MODE_XTS:
# data sequence number (or 'tweak') has to be provided when in XTS mode
return self.chain.update(ciphertext,'d',n)
else:
return self.chain.update(ciphertext,'d')
 
def final(self,padfct=padding.PKCS7):
# TODO: after calling final, reset the IV? so the cipher is as good as new?
"""Finalizes the encryption by padding the cache
 
padfct = padding function
import from CryptoPlus.Util.padding
 
For ECB, CBC: the remaining bytes in the cache will be padded and
encrypted.
For OFB,CFB, CTR: an encrypted padding will be returned, making the
total outputed bytes since construction of the cipher
a multiple of the blocksize of that cipher.
 
If the cipher has been used for decryption, the final function won't do
anything. You have to manually unpad if necessary.
 
After finalization, the chain can still be used but the IV, counter etc
aren't reset but just continue as they were after the last step (finalization step).
"""
assert self.mode not in (MODE_XTS, MODE_CMAC) # finalizing (=padding) doesn't make sense when in XTS or CMAC mode
if self.ed == 'e':
# when the chain is in encryption mode, finalizing will pad the cache and encrypt this last block
if self.mode in (MODE_OFB,MODE_CFB,MODE_CTR):
dummy = '0'*(self.chain.totalbytes%self.blocksize) # a dummy string that will be used to get a valid padding
else: #ECB, CBC
dummy = self.chain.cache
pad = padfct(dummy,padding.PAD,self.blocksize)[len(dummy):] # construct the padding necessary
return self.chain.update(pad,'e') # supply the padding to the update function => chain cache will be "cache+padding"
else:
# final function doesn't make sense when decrypting => padding should be removed manually
pass
 
class ECB:
"""ECB chaining mode
"""
def __init__(self, codebook, blocksize):
self.cache = ''
self.codebook = codebook
self.blocksize = blocksize
 
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any length
ed: 'e' for encryption, 'd' for decryption
Output:
processed raw string block(s), if any
 
When the supplied data is not a multiple of the blocksize
of the cipher, then the remaining input data will be cached.
The next time the update function is called with some data,
the new data will be concatenated to the cache and then
cache+data will be processed and full blocks will be outputted.
"""
output_blocks = []
self.cache += data
if len(self.cache) < self.blocksize:
return ''
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize):
#the only difference between encryption/decryption in the chain is the cipher block
if ed == 'e':
output_blocks.append(self.codebook.encrypt( self.cache[i:i + self.blocksize] ))
else:
output_blocks.append(self.codebook.decrypt( self.cache[i:i + self.blocksize] ))
self.cache = self.cache[i+self.blocksize:]
return ''.join(output_blocks)
 
class CBC:
"""CBC chaining mode
"""
def __init__(self, codebook, blocksize, IV):
self.IV = IV
self.cache = ''
self.codebook = codebook
self.blocksize = blocksize
 
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any length
ed: 'e' for encryption, 'd' for decryption
Output:
processed raw string block(s), if any
 
When the supplied data is not a multiple of the blocksize
of the cipher, then the remaining input data will be cached.
The next time the update function is called with some data,
the new data will be concatenated to the cache and then
cache+data will be processed and full blocks will be outputted.
"""
if ed == 'e':
encrypted_blocks = ''
self.cache += data
if len(self.cache) < self.blocksize:
return ''
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize):
self.IV = self.codebook.encrypt(util.xorstring(self.cache[i:i+self.blocksize],self.IV))
encrypted_blocks += self.IV
self.cache = self.cache[i+self.blocksize:]
return encrypted_blocks
else:
decrypted_blocks = ''
self.cache += data
if len(self.cache) < self.blocksize:
return ''
for i in xrange(0, len(self.cache)-self.blocksize+1, self.blocksize):
plaintext = util.xorstring(self.IV,self.codebook.decrypt(self.cache[i:i + self.blocksize]))
self.IV = self.cache[i:i + self.blocksize]
decrypted_blocks+=plaintext
self.cache = self.cache[i+self.blocksize:]
return decrypted_blocks
 
class CFB:
# TODO: bit access instead of only byte level access
"""CFB Chaining Mode
 
Can be accessed as a stream cipher.
"""
 
def __init__(self, codebook, blocksize, IV,segment_size):
self.codebook = codebook
self.IV = IV
self.blocksize = blocksize
self.segment_size = segment_size/8
self.keystream = []
self.totalbytes = 0
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any multiple of bytes
ed: 'e' for encryption, 'd' for decryption
Output:
processed raw string
 
The encrypt/decrypt functions will always process all of the supplied
input data immediately. No cache will be kept.
"""
output = list(data)
 
for i in xrange(len(data)):
if ed =='e':
if len(self.keystream) == 0:
block = self.codebook.encrypt(self.IV)
self.keystream = list(block)[:self.segment_size] # keystream consists of the s MSB's
self.IV = self.IV[self.segment_size:] # keeping (b-s) LSB's
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0)))
self.IV += output[i] # the IV for the next block in the chain is being built byte per byte as the ciphertext flows in
else:
if len(self.keystream) == 0:
block = self.codebook.encrypt(self.IV)
self.keystream = list(block)[:self.segment_size]
self.IV = self.IV[self.segment_size:]
self.IV += output[i]
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0)))
self.totalbytes += len(output)
return ''.join(output)
 
class OFB:
"""OFB Chaining Mode
 
Can be accessed as a stream cipher.
"""
def __init__(self, codebook, blocksize, IV):
self.codebook = codebook
self.IV = IV
self.blocksize = blocksize
self.keystream = []
self.totalbytes = 0
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any multiple of bytes
ed: 'e' for encryption, 'd' for decryption
Output:
processed raw string
 
The encrypt/decrypt functions will always process all of the supplied
input data immediately. No cache will be kept.
"""
#no difference between encryption and decryption mode
n = len(data)
blocksize = self.blocksize
output = list(data)
 
for i in xrange(n):
if len(self.keystream) == 0: #encrypt a new counter block when the current keystream is fully used
self.IV = self.codebook.encrypt(self.IV)
self.keystream = list(self.IV)
output[i] = chr(ord(output[i]) ^ ord(self.keystream.pop(0))) #as long as an encrypted counter value is available, the output is just "input XOR keystream"
self.totalbytes += len(output)
return ''.join(output)
 
class CTR:
"""CTR Chaining Mode
 
Can be accessed as a stream cipher.
"""
# initial counter value can be choosen, decryption always starts from beginning
# -> you can start from anywhere yourself: just feed the cipher encoded blocks and feed a counter with the corresponding value
def __init__(self, codebook, blocksize, counter):
self.codebook = codebook
self.counter = counter
self.blocksize = blocksize
self.keystream = [] #holds the output of the current encrypted counter value
self.totalbytes = 0
 
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any multiple of bytes
ed: 'e' for encryption, 'd' for decryption
Output:
processed raw string
 
The encrypt/decrypt functions will always process all of the supplied
input data immediately. No cache will be kept.
"""
# no need for the encryption/decryption distinction: both are the same
n = len(data)
blocksize = self.blocksize
 
output = list(data)
for i in xrange(n):
if len(self.keystream) == 0: #encrypt a new counter block when the current keystream is fully used
block = self.codebook.encrypt(self.counter())
self.keystream = list(block)
output[i] = chr(ord(output[i])^ord(self.keystream.pop(0))) #as long as an encrypted counter value is available, the output is just "input XOR keystream"
self.totalbytes += len(output)
return ''.join(output)
 
class XTS:
"""XTS Chaining Mode
Usable with blockciphers with a 16-byte blocksize
"""
# TODO: allow other blocksizes besides 16bytes?
def __init__(self,codebook1, codebook2):
self.cache = ''
self.codebook1 = codebook1
self.codebook2 = codebook2
 
def update(self, data, ed,tweak=''):
# supply n as a raw string
# tweak = data sequence number
"""Perform a XTS encrypt/decrypt operation.
 
Because the handling of the last two blocks is linked,
it needs the whole block of ciphertext to be supplied at once.
Every decrypt function called on a XTS cipher will output
a decrypted block based on the current supplied ciphertext block.
"""
output = ''
assert len(data) > 15, "At least one block of 128 bits needs to be supplied"
assert len(data) < 128*pow(2,20)
 
# initializing T
# e_k2_n = E_K2(tweak)
e_k2_n = self.codebook2.encrypt(tweak+ '\x00' * (16-len(tweak)))[::-1]
self.T = util.string2number(e_k2_n)
 
i=0
while i < ((len(data) // 16)-1): #Decrypt all the blocks but one last full block and opt one last partial block
# C = E_K1(P xor T) xor T
output += self.__xts_step(ed,data[i*16:(i+1)*16],self.T)
# T = E_K2(n) mul (a pow i)
self.__T_update()
i+=1
 
# Check if the data supplied is a multiple of 16 bytes -> one last full block and we're done
if len(data[i*16:]) == 16:
# C = E_K1(P xor T) xor T
output += self.__xts_step(ed,data[i*16:(i+1)*16],self.T)
# T = E_K2(n) mul (a pow i)
self.__T_update()
else:
T_temp = [self.T]
self.__T_update()
T_temp.append(self.T)
if ed=='d':
# Permutation of the last two indexes
T_temp.reverse()
# Decrypt/Encrypt the last two blocks when data is not a multiple of 16 bytes
Cm1 = data[i*16:(i+1)*16]
Cm = data[(i+1)*16:]
PP = self.__xts_step(ed,Cm1,T_temp[0])
Cp = PP[len(Cm):]
Pm = PP[:len(Cm)]
CC = Cm+Cp
Pm1 = self.__xts_step(ed,CC,T_temp[1])
output += Pm1 + Pm
return output
 
def __xts_step(self,ed,tocrypt,T):
T_string = util.number2string_N(T,16)[::-1]
# C = E_K1(P xor T) xor T
if ed == 'd':
return util.xorstring(T_string, self.codebook1.decrypt(util.xorstring(T_string, tocrypt)))
else:
return util.xorstring(T_string, self.codebook1.encrypt(util.xorstring(T_string, tocrypt)))
 
def __T_update(self):
# Used for calculating T for a certain step using the T value from the previous step
self.T = self.T << 1
# if (Cout)
if self.T >> (8*16):
#T[0] ^= GF_128_FDBK;
self.T = self.T ^ 0x100000000000000000000000000000087L
 
 
class CMAC:
"""CMAC chaining mode
 
Supports every cipher with a blocksize available
in the list CMAC.supported_blocksizes.
The hashlength is equal to block size of the used block cipher.
Usable with blockciphers with a 8 or 16-byte blocksize
"""
# TODO: move to hash module?
# TODO: change update behaviour to .update() and .digest() as for all hash modules?
# -> other hash functions in pycrypto: calling update, concatenates current input with previous input and hashes everything
__Rb_dictionary = {64:0x000000000000001b,128:0x00000000000000000000000000000087}
supported_blocksizes = __Rb_dictionary.keys()
def __init__(self,codebook,blocksize,IV):
# Purpose of init: calculate Lu & Lu2
#blocksize (in bytes): to select the Rb constant in the dictionary
#Rb as a dictionary: adding support for other blocksizes is easy
self.cache=''
self.blocksize = blocksize
self.codebook = codebook
self.IV = IV
 
#Rb_dictionary: holds values for Rb for different blocksizes
# values for 64 and 128 bits found here: http://www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html
# explanation from: http://csrc.nist.gov/publications/nistpubs/800-38B/SP_800-38B.pdf
# Rb is a representation of a certain irreducible binary polynomial of degree b, namely,
# the lexicographically first among all such polynomials with the minimum possible number of
# nonzero terms. If this polynomial is expressed as ub+cb-1ub-1+...+c2u2+c1u+c0, where the
# coefficients cb-1, cb-2, ..., c2, c1, c0 are either 0 or 1, then Rb is the bit string cb-1cb-2...c2c1c0.
 
self.Rb = self.__Rb_dictionary[blocksize*8]
 
mask1 = int(('\xff'*blocksize).encode('hex'),16)
mask2 = int(('\x80' + '\x00'*(blocksize-1) ).encode('hex'),16)
 
L = int(self.codebook.encrypt('\x00'*blocksize).encode('hex'),16)
 
if L & mask2:
Lu = ((L << 1) & mask1) ^ self.Rb
else:
Lu = L << 1
Lu = Lu & mask1
 
if Lu & mask2:
Lu2 = ((Lu << 1) & mask1)^ self.Rb
else:
Lu2 = Lu << 1
Lu2 = Lu2 & mask1
 
self.Lu =util.number2string_N(Lu,self.blocksize)
self.Lu2=util.number2string_N(Lu2,self.blocksize)
 
def update(self, data, ed):
"""Processes the given ciphertext/plaintext
 
Inputs:
data: raw string of any length
ed: 'e' for encryption, 'd' for decryption
Output:
hashed data as raw string
 
This is not really an update function:
Everytime the function is called, the hash from the input data is calculated.
No finalizing needed.
"""
assert ed == 'e'
blocksize = self.blocksize
 
m = (len(data)+blocksize-1)/blocksize #m = amount of datablocks
i=0
for i in range(1,m):
self.IV = self.codebook.encrypt( util.xorstring(data[(i-1)*blocksize:(i)*blocksize],self.IV) )
 
if len(data[(i)*blocksize:])==blocksize:
X = util.xorstring(util.xorstring(data[(i)*blocksize:],self.IV),self.Lu)
else:
tmp = data[(i)*blocksize:] + '\x80' + '\x00'*(blocksize - len(data[(i)*blocksize:])-1)
X = util.xorstring(util.xorstring(tmp,self.IV),self.Lu2)
 
T = self.codebook.encrypt(X)
return T
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/pyblowfish.py
0,0 → 1,513
#
# blowfish.py
# Copyright (C) Michael Gilfix <mgilfix@gmail.com>
#
# This module is open source; you can redistribute it and/or
# modify it under the terms of the GPL or Artistic License.
# These licenses are available at http://www.opensource.org
#
# This software must be used and distributed in accordance
# with the law. The author claims no liability for its
# misuse.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
 
"""
Blowfish Encryption
 
This module is a pure python implementation of Bruce Schneier's
encryption scheme 'Blowfish'. Blowish is a 16-round Feistel Network
cipher and offers substantial speed gains over DES.
 
The key is a string of length anywhere between 64 and 448 bits, or
equivalently 8 and 56 bytes. The encryption and decryption functions
operate on 64-bit blocks, or 8 byte strings.
 
Send questions, comments, bugs my way. Or, just let me know you're
using the software:
Michael Gilfix <mgilfix@gmail.com>
"""
 
__author__ = "Michael Gilfix <mgilfix@gmail.com>"
 
import copy
 
class Blowfish:
"""Blowfish encryption Scheme
 
This class implements the encryption and decryption
functionality of the Blowfish cipher.
 
Public functions:
 
def __init__(self, key)
Creates an instance of blowfish using 'key'
as the encryption key. Key is a string of
length ranging from 8 to 56 bytes (64 to 448
bits). Once the instance of the object is
created, the key is no longer necessary.
 
def encrypt(self, data):
Convenience method. Calls crypt under the covers.
 
def decrypt(self, data):
Convenience method. Calls crypt under the covers.
 
def crypt(self, data, direction):
Performs actual encryption/decryption of data
depending on the direction. The data is broken
up into 8 byte chunks for the ciphering
process. If the data does not align on 8 byte
chunks, then null padding is added. This is
removed upon decryption.
 
def cipher(self, xl, xr, direction):
Encrypts a 64-bit block of data where xl is
the upper 32-bits and xr is the lower 32-bits.
'direction' is the direction to apply the
cipher, either ENCRYPT or DECRYPT constants.
returns a tuple of either encrypted or decrypted
data of the left half and right half of the
64-bit block.
 
Private members:
 
def __round_func(self, xl)
Performs an obscuring function on the 32-bit
block of data 'xl', which is the left half of
the 64-bit block of data. Returns the 32-bit
result as a long integer.
 
"""
# Cipher directions
ENCRYPT = 0
DECRYPT = 1
 
# For the __round_func
MODULUS = 2L ** 32
 
# Constants
BLOCK_SIZE = 8
MAX_KEY_LENGTH = 56
 
P_BOXES = [
0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L,
0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L,
0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL,
0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L,
0x9216D5D9L, 0x8979FB1BL
]
 
S_BOXES = [
[
0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L,
0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L,
0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L,
0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL,
0x0D95748FL, 0x728EB658L, 0x718BCD58L, 0x82154AEEL,
0x7B54A41DL, 0xC25A59B5L, 0x9C30D539L, 0x2AF26013L,
0xC5D1B023L, 0x286085F0L, 0xCA417918L, 0xB8DB38EFL,
0x8E79DCB0L, 0x603A180EL, 0x6C9E0E8BL, 0xB01E8A3EL,
0xD71577C1L, 0xBD314B27L, 0x78AF2FDAL, 0x55605C60L,
0xE65525F3L, 0xAA55AB94L, 0x57489862L, 0x63E81440L,
0x55CA396AL, 0x2AAB10B6L, 0xB4CC5C34L, 0x1141E8CEL,
0xA15486AFL, 0x7C72E993L, 0xB3EE1411L, 0x636FBC2AL,
0x2BA9C55DL, 0x741831F6L, 0xCE5C3E16L, 0x9B87931EL,
0xAFD6BA33L, 0x6C24CF5CL, 0x7A325381L, 0x28958677L,
0x3B8F4898L, 0x6B4BB9AFL, 0xC4BFE81BL, 0x66282193L,
0x61D809CCL, 0xFB21A991L, 0x487CAC60L, 0x5DEC8032L,
0xEF845D5DL, 0xE98575B1L, 0xDC262302L, 0xEB651B88L,
0x23893E81L, 0xD396ACC5L, 0x0F6D6FF3L, 0x83F44239L,
0x2E0B4482L, 0xA4842004L, 0x69C8F04AL, 0x9E1F9B5EL,
0x21C66842L, 0xF6E96C9AL, 0x670C9C61L, 0xABD388F0L,
0x6A51A0D2L, 0xD8542F68L, 0x960FA728L, 0xAB5133A3L,
0x6EEF0B6CL, 0x137A3BE4L, 0xBA3BF050L, 0x7EFB2A98L,
0xA1F1651DL, 0x39AF0176L, 0x66CA593EL, 0x82430E88L,
0x8CEE8619L, 0x456F9FB4L, 0x7D84A5C3L, 0x3B8B5EBEL,
0xE06F75D8L, 0x85C12073L, 0x401A449FL, 0x56C16AA6L,
0x4ED3AA62L, 0x363F7706L, 0x1BFEDF72L, 0x429B023DL,
0x37D0D724L, 0xD00A1248L, 0xDB0FEAD3L, 0x49F1C09BL,
0x075372C9L, 0x80991B7BL, 0x25D479D8L, 0xF6E8DEF7L,
0xE3FE501AL, 0xB6794C3BL, 0x976CE0BDL, 0x04C006BAL,
0xC1A94FB6L, 0x409F60C4L, 0x5E5C9EC2L, 0x196A2463L,
0x68FB6FAFL, 0x3E6C53B5L, 0x1339B2EBL, 0x3B52EC6FL,
0x6DFC511FL, 0x9B30952CL, 0xCC814544L, 0xAF5EBD09L,
0xBEE3D004L, 0xDE334AFDL, 0x660F2807L, 0x192E4BB3L,
0xC0CBA857L, 0x45C8740FL, 0xD20B5F39L, 0xB9D3FBDBL,
0x5579C0BDL, 0x1A60320AL, 0xD6A100C6L, 0x402C7279L,
0x679F25FEL, 0xFB1FA3CCL, 0x8EA5E9F8L, 0xDB3222F8L,
0x3C7516DFL, 0xFD616B15L, 0x2F501EC8L, 0xAD0552ABL,
0x323DB5FAL, 0xFD238760L, 0x53317B48L, 0x3E00DF82L,
0x9E5C57BBL, 0xCA6F8CA0L, 0x1A87562EL, 0xDF1769DBL,
0xD542A8F6L, 0x287EFFC3L, 0xAC6732C6L, 0x8C4F5573L,
0x695B27B0L, 0xBBCA58C8L, 0xE1FFA35DL, 0xB8F011A0L,
0x10FA3D98L, 0xFD2183B8L, 0x4AFCB56CL, 0x2DD1D35BL,
0x9A53E479L, 0xB6F84565L, 0xD28E49BCL, 0x4BFB9790L,
0xE1DDF2DAL, 0xA4CB7E33L, 0x62FB1341L, 0xCEE4C6E8L,
0xEF20CADAL, 0x36774C01L, 0xD07E9EFEL, 0x2BF11FB4L,
0x95DBDA4DL, 0xAE909198L, 0xEAAD8E71L, 0x6B93D5A0L,
0xD08ED1D0L, 0xAFC725E0L, 0x8E3C5B2FL, 0x8E7594B7L,
0x8FF6E2FBL, 0xF2122B64L, 0x8888B812L, 0x900DF01CL,
0x4FAD5EA0L, 0x688FC31CL, 0xD1CFF191L, 0xB3A8C1ADL,
0x2F2F2218L, 0xBE0E1777L, 0xEA752DFEL, 0x8B021FA1L,
0xE5A0CC0FL, 0xB56F74E8L, 0x18ACF3D6L, 0xCE89E299L,
0xB4A84FE0L, 0xFD13E0B7L, 0x7CC43B81L, 0xD2ADA8D9L,
0x165FA266L, 0x80957705L, 0x93CC7314L, 0x211A1477L,
0xE6AD2065L, 0x77B5FA86L, 0xC75442F5L, 0xFB9D35CFL,
0xEBCDAF0CL, 0x7B3E89A0L, 0xD6411BD3L, 0xAE1E7E49L,
0x00250E2DL, 0x2071B35EL, 0x226800BBL, 0x57B8E0AFL,
0x2464369BL, 0xF009B91EL, 0x5563911DL, 0x59DFA6AAL,
0x78C14389L, 0xD95A537FL, 0x207D5BA2L, 0x02E5B9C5L,
0x83260376L, 0x6295CFA9L, 0x11C81968L, 0x4E734A41L,
0xB3472DCAL, 0x7B14A94AL, 0x1B510052L, 0x9A532915L,
0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L,
0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L,
0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L,
0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076A
],
[
0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L,
0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L,
0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L,
0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL,
0x3F54989AL, 0x5B429D65L, 0x6B8FE4D6L, 0x99F73FD6L,
0xA1D29C07L, 0xEFE830F5L, 0x4D2D38E6L, 0xF0255DC1L,
0x4CDD2086L, 0x8470EB26L, 0x6382E9C6L, 0x021ECC5EL,
0x09686B3FL, 0x3EBAEFC9L, 0x3C971814L, 0x6B6A70A1L,
0x687F3584L, 0x52A0E286L, 0xB79C5305L, 0xAA500737L,
0x3E07841CL, 0x7FDEAE5CL, 0x8E7D44ECL, 0x5716F2B8L,
0xB03ADA37L, 0xF0500C0DL, 0xF01C1F04L, 0x0200B3FFL,
0xAE0CF51AL, 0x3CB574B2L, 0x25837A58L, 0xDC0921BDL,
0xD19113F9L, 0x7CA92FF6L, 0x94324773L, 0x22F54701L,
0x3AE5E581L, 0x37C2DADCL, 0xC8B57634L, 0x9AF3DDA7L,
0xA9446146L, 0x0FD0030EL, 0xECC8C73EL, 0xA4751E41L,
0xE238CD99L, 0x3BEA0E2FL, 0x3280BBA1L, 0x183EB331L,
0x4E548B38L, 0x4F6DB908L, 0x6F420D03L, 0xF60A04BFL,
0x2CB81290L, 0x24977C79L, 0x5679B072L, 0xBCAF89AFL,
0xDE9A771FL, 0xD9930810L, 0xB38BAE12L, 0xDCCF3F2EL,
0x5512721FL, 0x2E6B7124L, 0x501ADDE6L, 0x9F84CD87L,
0x7A584718L, 0x7408DA17L, 0xBC9F9ABCL, 0xE94B7D8CL,
0xEC7AEC3AL, 0xDB851DFAL, 0x63094366L, 0xC464C3D2L,
0xEF1C1847L, 0x3215D908L, 0xDD433B37L, 0x24C2BA16L,
0x12A14D43L, 0x2A65C451L, 0x50940002L, 0x133AE4DDL,
0x71DFF89EL, 0x10314E55L, 0x81AC77D6L, 0x5F11199BL,
0x043556F1L, 0xD7A3C76BL, 0x3C11183BL, 0x5924A509L,
0xF28FE6EDL, 0x97F1FBFAL, 0x9EBABF2CL, 0x1E153C6EL,
0x86E34570L, 0xEAE96FB1L, 0x860E5E0AL, 0x5A3E2AB3L,
0x771FE71CL, 0x4E3D06FAL, 0x2965DCB9L, 0x99E71D0FL,
0x803E89D6L, 0x5266C825L, 0x2E4CC978L, 0x9C10B36AL,
0xC6150EBAL, 0x94E2EA78L, 0xA5FC3C53L, 0x1E0A2DF4L,
0xF2F74EA7L, 0x361D2B3DL, 0x1939260FL, 0x19C27960L,
0x5223A708L, 0xF71312B6L, 0xEBADFE6EL, 0xEAC31F66L,
0xE3BC4595L, 0xA67BC883L, 0xB17F37D1L, 0x018CFF28L,
0xC332DDEFL, 0xBE6C5AA5L, 0x65582185L, 0x68AB9802L,
0xEECEA50FL, 0xDB2F953BL, 0x2AEF7DADL, 0x5B6E2F84L,
0x1521B628L, 0x29076170L, 0xECDD4775L, 0x619F1510L,
0x13CCA830L, 0xEB61BD96L, 0x0334FE1EL, 0xAA0363CFL,
0xB5735C90L, 0x4C70A239L, 0xD59E9E0BL, 0xCBAADE14L,
0xEECC86BCL, 0x60622CA7L, 0x9CAB5CABL, 0xB2F3846EL,
0x648B1EAFL, 0x19BDF0CAL, 0xA02369B9L, 0x655ABB50L,
0x40685A32L, 0x3C2AB4B3L, 0x319EE9D5L, 0xC021B8F7L,
0x9B540B19L, 0x875FA099L, 0x95F7997EL, 0x623D7DA8L,
0xF837889AL, 0x97E32D77L, 0x11ED935FL, 0x16681281L,
0x0E358829L, 0xC7E61FD6L, 0x96DEDFA1L, 0x7858BA99L,
0x57F584A5L, 0x1B227263L, 0x9B83C3FFL, 0x1AC24696L,
0xCDB30AEBL, 0x532E3054L, 0x8FD948E4L, 0x6DBC3128L,
0x58EBF2EFL, 0x34C6FFEAL, 0xFE28ED61L, 0xEE7C3C73L,
0x5D4A14D9L, 0xE864B7E3L, 0x42105D14L, 0x203E13E0L,
0x45EEE2B6L, 0xA3AAABEAL, 0xDB6C4F15L, 0xFACB4FD0L,
0xC742F442L, 0xEF6ABBB5L, 0x654F3B1DL, 0x41CD2105L,
0xD81E799EL, 0x86854DC7L, 0xE44B476AL, 0x3D816250L,
0xCF62A1F2L, 0x5B8D2646L, 0xFC8883A0L, 0xC1C7B6A3L,
0x7F1524C3L, 0x69CB7492L, 0x47848A0BL, 0x5692B285L,
0x095BBF00L, 0xAD19489DL, 0x1462B174L, 0x23820E00L,
0x58428D2AL, 0x0C55F5EAL, 0x1DADF43EL, 0x233F7061L,
0x3372F092L, 0x8D937E41L, 0xD65FECF1L, 0x6C223BDBL,
0x7CDE3759L, 0xCBEE7460L, 0x4085F2A7L, 0xCE77326EL,
0xA6078084L, 0x19F8509EL, 0xE8EFD855L, 0x61D99735L,
0xA969A7AAL, 0xC50C06C2L, 0x5A04ABFCL, 0x800BCADCL,
0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L,
0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L,
0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L,
0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7
],
[
0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L,
0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L,
0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL,
0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L,
0x4D95FC1DL, 0x96B591AFL, 0x70F4DDD3L, 0x66A02F45L,
0xBFBC09ECL, 0x03BD9785L, 0x7FAC6DD0L, 0x31CB8504L,
0x96EB27B3L, 0x55FD3941L, 0xDA2547E6L, 0xABCA0A9AL,
0x28507825L, 0x530429F4L, 0x0A2C86DAL, 0xE9B66DFBL,
0x68DC1462L, 0xD7486900L, 0x680EC0A4L, 0x27A18DEEL,
0x4F3FFEA2L, 0xE887AD8CL, 0xB58CE006L, 0x7AF4D6B6L,
0xAACE1E7CL, 0xD3375FECL, 0xCE78A399L, 0x406B2A42L,
0x20FE9E35L, 0xD9F385B9L, 0xEE39D7ABL, 0x3B124E8BL,
0x1DC9FAF7L, 0x4B6D1856L, 0x26A36631L, 0xEAE397B2L,
0x3A6EFA74L, 0xDD5B4332L, 0x6841E7F7L, 0xCA7820FBL,
0xFB0AF54EL, 0xD8FEB397L, 0x454056ACL, 0xBA489527L,
0x55533A3AL, 0x20838D87L, 0xFE6BA9B7L, 0xD096954BL,
0x55A867BCL, 0xA1159A58L, 0xCCA92963L, 0x99E1DB33L,
0xA62A4A56L, 0x3F3125F9L, 0x5EF47E1CL, 0x9029317CL,
0xFDF8E802L, 0x04272F70L, 0x80BB155CL, 0x05282CE3L,
0x95C11548L, 0xE4C66D22L, 0x48C1133FL, 0xC70F86DCL,
0x07F9C9EEL, 0x41041F0FL, 0x404779A4L, 0x5D886E17L,
0x325F51EBL, 0xD59BC0D1L, 0xF2BCC18FL, 0x41113564L,
0x257B7834L, 0x602A9C60L, 0xDFF8E8A3L, 0x1F636C1BL,
0x0E12B4C2L, 0x02E1329EL, 0xAF664FD1L, 0xCAD18115L,
0x6B2395E0L, 0x333E92E1L, 0x3B240B62L, 0xEEBEB922L,
0x85B2A20EL, 0xE6BA0D99L, 0xDE720C8CL, 0x2DA2F728L,
0xD0127845L, 0x95B794FDL, 0x647D0862L, 0xE7CCF5F0L,
0x5449A36FL, 0x877D48FAL, 0xC39DFD27L, 0xF33E8D1EL,
0x0A476341L, 0x992EFF74L, 0x3A6F6EABL, 0xF4F8FD37L,
0xA812DC60L, 0xA1EBDDF8L, 0x991BE14CL, 0xDB6E6B0DL,
0xC67B5510L, 0x6D672C37L, 0x2765D43BL, 0xDCD0E804L,
0xF1290DC7L, 0xCC00FFA3L, 0xB5390F92L, 0x690FED0BL,
0x667B9FFBL, 0xCEDB7D9CL, 0xA091CF0BL, 0xD9155EA3L,
0xBB132F88L, 0x515BAD24L, 0x7B9479BFL, 0x763BD6EBL,
0x37392EB3L, 0xCC115979L, 0x8026E297L, 0xF42E312DL,
0x6842ADA7L, 0xC66A2B3BL, 0x12754CCCL, 0x782EF11CL,
0x6A124237L, 0xB79251E7L, 0x06A1BBE6L, 0x4BFB6350L,
0x1A6B1018L, 0x11CAEDFAL, 0x3D25BDD8L, 0xE2E1C3C9L,
0x44421659L, 0x0A121386L, 0xD90CEC6EL, 0xD5ABEA2AL,
0x64AF674EL, 0xDA86A85FL, 0xBEBFE988L, 0x64E4C3FEL,
0x9DBC8057L, 0xF0F7C086L, 0x60787BF8L, 0x6003604DL,
0xD1FD8346L, 0xF6381FB0L, 0x7745AE04L, 0xD736FCCCL,
0x83426B33L, 0xF01EAB71L, 0xB0804187L, 0x3C005E5FL,
0x77A057BEL, 0xBDE8AE24L, 0x55464299L, 0xBF582E61L,
0x4E58F48FL, 0xF2DDFDA2L, 0xF474EF38L, 0x8789BDC2L,
0x5366F9C3L, 0xC8B38E74L, 0xB475F255L, 0x46FCD9B9L,
0x7AEB2661L, 0x8B1DDF84L, 0x846A0E79L, 0x915F95E2L,
0x466E598EL, 0x20B45770L, 0x8CD55591L, 0xC902DE4CL,
0xB90BACE1L, 0xBB8205D0L, 0x11A86248L, 0x7574A99EL,
0xB77F19B6L, 0xE0A9DC09L, 0x662D09A1L, 0xC4324633L,
0xE85A1F02L, 0x09F0BE8CL, 0x4A99A025L, 0x1D6EFE10L,
0x1AB93D1DL, 0x0BA5A4DFL, 0xA186F20FL, 0x2868F169L,
0xDCB7DA83L, 0x573906FEL, 0xA1E2CE9BL, 0x4FCD7F52L,
0x50115E01L, 0xA70683FAL, 0xA002B5C4L, 0x0DE6D027L,
0x9AF88C27L, 0x773F8641L, 0xC3604C06L, 0x61A806B5L,
0xF0177A28L, 0xC0F586E0L, 0x006058AAL, 0x30DC7D62L,
0x11E69ED7L, 0x2338EA63L, 0x53C2DD94L, 0xC2C21634L,
0xBBCBEE56L, 0x90BCB6DEL, 0xEBFC7DA1L, 0xCE591D76L,
0x6F05E409L, 0x4B7C0188L, 0x39720A3DL, 0x7C927C24L,
0x86E3725FL, 0x724D9DB9L, 0x1AC15BB4L, 0xD39EB8FCL,
0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L,
0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL,
0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L,
0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0
],
[
0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL,
0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL,
0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL,
0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L,
0x5748AB2FL, 0xBC946E79L, 0xC6A376D2L, 0x6549C2C8L,
0x530FF8EEL, 0x468DDE7DL, 0xD5730A1DL, 0x4CD04DC6L,
0x2939BBDBL, 0xA9BA4650L, 0xAC9526E8L, 0xBE5EE304L,
0xA1FAD5F0L, 0x6A2D519AL, 0x63EF8CE2L, 0x9A86EE22L,
0xC089C2B8L, 0x43242EF6L, 0xA51E03AAL, 0x9CF2D0A4L,
0x83C061BAL, 0x9BE96A4DL, 0x8FE51550L, 0xBA645BD6L,
0x2826A2F9L, 0xA73A3AE1L, 0x4BA99586L, 0xEF5562E9L,
0xC72FEFD3L, 0xF752F7DAL, 0x3F046F69L, 0x77FA0A59L,
0x80E4A915L, 0x87B08601L, 0x9B09E6ADL, 0x3B3EE593L,
0xE990FD5AL, 0x9E34D797L, 0x2CF0B7D9L, 0x022B8B51L,
0x96D5AC3AL, 0x017DA67DL, 0xD1CF3ED6L, 0x7C7D2D28L,
0x1F9F25CFL, 0xADF2B89BL, 0x5AD6B472L, 0x5A88F54CL,
0xE029AC71L, 0xE019A5E6L, 0x47B0ACFDL, 0xED93FA9BL,
0xE8D3C48DL, 0x283B57CCL, 0xF8D56629L, 0x79132E28L,
0x785F0191L, 0xED756055L, 0xF7960E44L, 0xE3D35E8CL,
0x15056DD4L, 0x88F46DBAL, 0x03A16125L, 0x0564F0BDL,
0xC3EB9E15L, 0x3C9057A2L, 0x97271AECL, 0xA93A072AL,
0x1B3F6D9BL, 0x1E6321F5L, 0xF59C66FBL, 0x26DCF319L,
0x7533D928L, 0xB155FDF5L, 0x03563482L, 0x8ABA3CBBL,
0x28517711L, 0xC20AD9F8L, 0xABCC5167L, 0xCCAD925FL,
0x4DE81751L, 0x3830DC8EL, 0x379D5862L, 0x9320F991L,
0xEA7A90C2L, 0xFB3E7BCEL, 0x5121CE64L, 0x774FBE32L,
0xA8B6E37EL, 0xC3293D46L, 0x48DE5369L, 0x6413E680L,
0xA2AE0810L, 0xDD6DB224L, 0x69852DFDL, 0x09072166L,
0xB39A460AL, 0x6445C0DDL, 0x586CDECFL, 0x1C20C8AEL,
0x5BBEF7DDL, 0x1B588D40L, 0xCCD2017FL, 0x6BB4E3BBL,
0xDDA26A7EL, 0x3A59FF45L, 0x3E350A44L, 0xBCB4CDD5L,
0x72EACEA8L, 0xFA6484BBL, 0x8D6612AEL, 0xBF3C6F47L,
0xD29BE463L, 0x542F5D9EL, 0xAEC2771BL, 0xF64E6370L,
0x740E0D8DL, 0xE75B1357L, 0xF8721671L, 0xAF537D5DL,
0x4040CB08L, 0x4EB4E2CCL, 0x34D2466AL, 0x0115AF84L,
0xE1B00428L, 0x95983A1DL, 0x06B89FB4L, 0xCE6EA048L,
0x6F3F3B82L, 0x3520AB82L, 0x011A1D4BL, 0x277227F8L,
0x611560B1L, 0xE7933FDCL, 0xBB3A792BL, 0x344525BDL,
0xA08839E1L, 0x51CE794BL, 0x2F32C9B7L, 0xA01FBAC9L,
0xE01CC87EL, 0xBCC7D1F6L, 0xCF0111C3L, 0xA1E8AAC7L,
0x1A908749L, 0xD44FBD9AL, 0xD0DADECBL, 0xD50ADA38L,
0x0339C32AL, 0xC6913667L, 0x8DF9317CL, 0xE0B12B4FL,
0xF79E59B7L, 0x43F5BB3AL, 0xF2D519FFL, 0x27D9459CL,
0xBF97222CL, 0x15E6FC2AL, 0x0F91FC71L, 0x9B941525L,
0xFAE59361L, 0xCEB69CEBL, 0xC2A86459L, 0x12BAA8D1L,
0xB6C1075EL, 0xE3056A0CL, 0x10D25065L, 0xCB03A442L,
0xE0EC6E0EL, 0x1698DB3BL, 0x4C98A0BEL, 0x3278E964L,
0x9F1F9532L, 0xE0D392DFL, 0xD3A0342BL, 0x8971F21EL,
0x1B0A7441L, 0x4BA3348CL, 0xC5BE7120L, 0xC37632D8L,
0xDF359F8DL, 0x9B992F2EL, 0xE60B6F47L, 0x0FE3F11DL,
0xE54CDA54L, 0x1EDAD891L, 0xCE6279CFL, 0xCD3E7E6FL,
0x1618B166L, 0xFD2C1D05L, 0x848FD2C5L, 0xF6FB2299L,
0xF523F357L, 0xA6327623L, 0x93A83531L, 0x56CCCD02L,
0xACF08162L, 0x5A75EBB5L, 0x6E163697L, 0x88D273CCL,
0xDE966292L, 0x81B949D0L, 0x4C50901BL, 0x71C65614L,
0xE6C6C7BDL, 0x327A140AL, 0x45E1D006L, 0xC3F27B9AL,
0xC9AA53FDL, 0x62A80F00L, 0xBB25BFE2L, 0x35BDD2F6L,
0x71126905L, 0xB2040222L, 0xB6CBCF7CL, 0xCD769C2BL,
0x53113EC0L, 0x1640E3D3L, 0x38ABBD60L, 0x2547ADF0L,
0xBA38209CL, 0xF746CE76L, 0x77AFA1C5L, 0x20756060L,
0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL,
0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L,
0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL,
0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6
]
]
 
def __init__(self, key):
if not key or len(key) < 8 or len(key) > 56:
raise ValueError, "Invalid cipher key length: %s" %len(key)
 
# Initialize cipher copies from static data
self.p_boxes = copy.deepcopy(self.P_BOXES)
self.s_boxes = copy.deepcopy(self.S_BOXES)
 
# Cycle through the p-boxes and round-robin XOR the
# key ordinals with the p-boxes
key_ord = map(ord, key)
key_len = len(key_ord)
index = 0
for i in range(len(self.p_boxes)):
val = (key_ord[index % key_len] << 24) + \
(key_ord[(index + 1) % key_len] << 16) + \
(key_ord[(index + 2) % key_len] << 8) + \
key_ord[(index + 3) % key_len]
self.p_boxes[i] = self.p_boxes[i] ^ val
index = index + 4
 
# For the chaining process
l, r = 0, 0
 
# Begin chain replacing the p-boxes
for i in range(0, len(self.p_boxes), 2):
l, r = self.cipher(l, r, self.ENCRYPT)
self.p_boxes[i] = l
self.p_boxes[i + 1] = r
 
# Chain replace the s-boxes
for i in range(len(self.s_boxes)):
for j in range(0, len(self.s_boxes[i]), 2):
l, r = self.cipher(l, r, self.ENCRYPT)
self.s_boxes[i][j] = l
self.s_boxes[i][j + 1] = r
 
def cipher(self, xl, xr, direction):
if direction == self.ENCRYPT:
for i in range(16):
xl = xl ^ self.p_boxes[i]
xr = self.__round_func(xl) ^ xr
xl, xr = xr, xl
xl, xr = xr, xl
xr = xr ^ self.p_boxes[16]
xl = xl ^ self.p_boxes[17]
else:
for i in range(17, 1, -1):
xl = xl ^ self.p_boxes[i]
xr = self.__round_func(xl) ^ xr
xl, xr = xr, xl
xl, xr = xr, xl
xr = xr ^ self.p_boxes[1]
xl = xl ^ self.p_boxes[0]
return xl, xr
 
def __round_func(self, xl):
a = (xl & 0xFF000000) >> 24
b = (xl & 0x00FF0000) >> 16
c = (xl & 0x0000FF00) >> 8
d = xl & 0x000000FF
 
# Perform all ops as longs then and out the last 32-bits to
# obtain the integer
f = (self.s_boxes[0][a] + self.s_boxes[1][b]) % self.MODULUS
f = f ^ self.s_boxes[2][c]
f = f + self.s_boxes[3][d]
f = (f % self.MODULUS) & 0xFFFFFFFF
return int(f)
 
def crypt(self, data, direction):
# Pad the data if need be so it has 8 byte chunks
align = len(data) % 8
if align != 0:
padding = '\x00' * (8 - align)
data += padding
 
result = ''
for i in range(0, len(data), 8):
# Use big endianess since that's what everyone else uses
chunk = map(ord, data[i : i + 8])
xl = chunk[3] | (chunk[2] << 8) | (chunk[1] << 16) | (chunk[0] << 24)
xr = chunk[7] | (chunk[6] << 8) | (chunk[5] << 16) | (chunk[4] << 24)
xl, xr = self.cipher(xl, xr, direction)
chunk = (
(xl >> 24) & 0xFF, (xl >> 16) & 0xFF, (xl >> 8) & 0xFF, xl & 0xFF,
(xr >> 24) & 0xFF, (xr >> 16) & 0xFF, (xr >> 8) & 0xFF, xr & 0xFF
)
result += ''.join(map(chr, chunk))
 
# Strip the padding if we decrypted
if direction == self.DECRYPT:
result = result.rstrip('\x00')
return result
 
def encrypt(self, data):
return self.crypt(data, self.ENCRYPT)
 
def decrypt(self, data):
return self.crypt(data, self.DECRYPT)
 
def block_size(self):
return self.BLOCK_SIZE
 
def max_key_length(self):
return self.MAX_KEY_LENGTH
 
def max_key_bits(self):
return self.max_key_length() * self.block_size()
 
##############################################################
# Simple module testing
 
if __name__ == '__main__':
key = 'This is a simple test key'
cipher = Blowfish(key)
print "Max key bits: %s" %cipher.max_key_bits()
 
print "Testing encryption:"
xl = 123456
xr = 654321
print "\tPlain text: (%s, %s)" %(xl, xr)
cl, cr = cipher.cipher(xl, xr, cipher.ENCRYPT)
print "\tCrypted is: (%s, %s)" %(cl, cr)
dl, dr = cipher.cipher(cl, cr, cipher.DECRYPT)
print "\tUnencrypted is: (%s, %s)" %(dl, dr)
 
print "Testing buffer encrypt:"
text = 'This is my test string. Sample text goes here'
print "\tText: [%s], len: %s" %(text, len(text))
crypted = cipher.encrypt(text)
print "\tEncrypted: [%s]" %crypted
decrypted = cipher.decrypt(crypted)
print "\tDecrypted: [%s]" %decrypted
 
print "Testing decryption from separate instances:"
cipher1 = Blowfish(key)
crypted = cipher1.encrypt(text)
print "\tEncrypt cipher1: [%s]" %crypted
cipher2 = Blowfish(key)
decrypted = cipher2.decrypt(crypted)
print "\tDecrypt cipher2: [%s]" %decrypted
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/ARC2.py
0,0 → 1,59
from blockcipher import *
import Crypto.Cipher.ARC2
import Crypto
from pkg_resources import parse_version
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,effective_keylen=None):
"""Create a new cipher object
 
ARC2 using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the keys
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
effective_keylen = how much bits to effectively use from the supplied key
-> will only be used when the pycrypto version on your system is >2.0.1
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import ARC2
 
http://www.ietf.org/rfc/rfc2268.txt
Doctest will fail when using pycrypto 2.0.1 and older
------------------------------------
>>> key = "0000000000000000".decode('hex')
>>> plaintext = "0000000000000000".decode('hex')
>>> ek = 63
>>> cipher = ARC2.new(key,ARC2.MODE_ECB,effective_keylen=ek)
>>> cipher.encrypt(plaintext).encode('hex')
'ebb773f993278eff'
"""
return ARC2(key,mode,IV,counter,effective_keylen,segment_size)
 
class ARC2(BlockCipher):
def __init__(self,key,mode,IV,counter,effective_keylen,segment_size):
# pycrypto versions newer than 2.0.1 will have support for "effective_keylen"
if parse_version(Crypto.__version__) <= parse_version("2.0.1"):
cipher_module = Crypto.Cipher.ARC2.new
args = {}
else:
cipher_module = Crypto.Cipher.ARC2.new
args = {'effective_keylen':effective_keylen}
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/rijndael.py
0,0 → 1,392
"""
A pure python (slow) implementation of rijndael with a decent interface
 
To include -
 
from rijndael import rijndael
 
To do a key setup -
 
r = rijndael(key, block_size = 16)
 
key must be a string of length 16, 24, or 32
blocksize must be 16, 24, or 32. Default is 16
 
To use -
 
ciphertext = r.encrypt(plaintext)
plaintext = r.decrypt(ciphertext)
 
If any strings are of the wrong length a ValueError is thrown
"""
 
# ported from the Java reference code by Bram Cohen, bram@gawth.com, April 2001
# this code is public domain, unless someone makes
# an intellectual property claim against the reference
# code, in which case it can be made public domain by
# deleting all the comments and renaming all the variables
 
import copy
import string
 
 
 
#-----------------------
#TREV - ADDED BECAUSE THERE'S WARNINGS ABOUT INT OVERFLOW BEHAVIOR CHANGING IN
#2.4.....
import os
if os.name != "java":
import exceptions
if hasattr(exceptions, "FutureWarning"):
import warnings
warnings.filterwarnings("ignore", category=FutureWarning, append=1)
#-----------------------
 
 
 
shifts = [[[0, 0], [1, 3], [2, 2], [3, 1]],
[[0, 0], [1, 5], [2, 4], [3, 3]],
[[0, 0], [1, 7], [3, 5], [4, 4]]]
 
# [keysize][block_size]
num_rounds = {16: {16: 10, 24: 12, 32: 14}, 24: {16: 12, 24: 12, 32: 14}, 32: {16: 14, 24: 14, 32: 14}}
 
A = [[1, 1, 1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 1],
[1, 1, 1, 0, 0, 0, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 1]]
 
# produce log and alog tables, needed for multiplying in the
# field GF(2^m) (generator = 3)
alog = [1]
for i in xrange(255):
j = (alog[-1] << 1) ^ alog[-1]
if j & 0x100 != 0:
j ^= 0x11B
alog.append(j)
 
log = [0] * 256
for i in xrange(1, 255):
log[alog[i]] = i
 
# multiply two elements of GF(2^m)
def mul(a, b):
if a == 0 or b == 0:
return 0
return alog[(log[a & 0xFF] + log[b & 0xFF]) % 255]
 
# substitution box based on F^{-1}(x)
box = [[0] * 8 for i in xrange(256)]
box[1][7] = 1
for i in xrange(2, 256):
j = alog[255 - log[i]]
for t in xrange(8):
box[i][t] = (j >> (7 - t)) & 0x01
 
B = [0, 1, 1, 0, 0, 0, 1, 1]
 
# affine transform: box[i] <- B + A*box[i]
cox = [[0] * 8 for i in xrange(256)]
for i in xrange(256):
for t in xrange(8):
cox[i][t] = B[t]
for j in xrange(8):
cox[i][t] ^= A[t][j] * box[i][j]
 
# S-boxes and inverse S-boxes
S = [0] * 256
Si = [0] * 256
for i in xrange(256):
S[i] = cox[i][0] << 7
for t in xrange(1, 8):
S[i] ^= cox[i][t] << (7-t)
Si[S[i] & 0xFF] = i
 
# T-boxes
G = [[2, 1, 1, 3],
[3, 2, 1, 1],
[1, 3, 2, 1],
[1, 1, 3, 2]]
 
AA = [[0] * 8 for i in xrange(4)]
 
for i in xrange(4):
for j in xrange(4):
AA[i][j] = G[i][j]
AA[i][i+4] = 1
 
for i in xrange(4):
pivot = AA[i][i]
if pivot == 0:
t = i + 1
while AA[t][i] == 0 and t < 4:
t += 1
assert t != 4, 'G matrix must be invertible'
for j in xrange(8):
AA[i][j], AA[t][j] = AA[t][j], AA[i][j]
pivot = AA[i][i]
for j in xrange(8):
if AA[i][j] != 0:
AA[i][j] = alog[(255 + log[AA[i][j] & 0xFF] - log[pivot & 0xFF]) % 255]
for t in xrange(4):
if i != t:
for j in xrange(i+1, 8):
AA[t][j] ^= mul(AA[i][j], AA[t][i])
AA[t][i] = 0
 
iG = [[0] * 4 for i in xrange(4)]
 
for i in xrange(4):
for j in xrange(4):
iG[i][j] = AA[i][j + 4]
 
def mul4(a, bs):
if a == 0:
return 0
r = 0
for b in bs:
r <<= 8
if b != 0:
r = r | mul(a, b)
return r
 
T1 = []
T2 = []
T3 = []
T4 = []
T5 = []
T6 = []
T7 = []
T8 = []
U1 = []
U2 = []
U3 = []
U4 = []
 
for t in xrange(256):
s = S[t]
T1.append(mul4(s, G[0]))
T2.append(mul4(s, G[1]))
T3.append(mul4(s, G[2]))
T4.append(mul4(s, G[3]))
 
s = Si[t]
T5.append(mul4(s, iG[0]))
T6.append(mul4(s, iG[1]))
T7.append(mul4(s, iG[2]))
T8.append(mul4(s, iG[3]))
 
U1.append(mul4(t, iG[0]))
U2.append(mul4(t, iG[1]))
U3.append(mul4(t, iG[2]))
U4.append(mul4(t, iG[3]))
 
# round constants
rcon = [1]
r = 1
for t in xrange(1, 30):
r = mul(2, r)
rcon.append(r)
 
del A
del AA
del pivot
del B
del G
del box
del log
del alog
del i
del j
del r
del s
del t
del mul
del mul4
del cox
del iG
 
class rijndael:
def __init__(self, key, block_size = 16):
if block_size != 16 and block_size != 24 and block_size != 32:
raise ValueError('Invalid block size: ' + str(block_size))
if len(key) != 16 and len(key) != 24 and len(key) != 32:
raise ValueError('Invalid key size: ' + str(len(key)))
self.block_size = block_size
 
ROUNDS = num_rounds[len(key)][block_size]
BC = block_size / 4
# encryption round keys
Ke = [[0] * BC for i in xrange(ROUNDS + 1)]
# decryption round keys
Kd = [[0] * BC for i in xrange(ROUNDS + 1)]
ROUND_KEY_COUNT = (ROUNDS + 1) * BC
KC = len(key) / 4
 
# copy user material bytes into temporary ints
tk = []
for i in xrange(0, KC):
tk.append((ord(key[i * 4]) << 24) | (ord(key[i * 4 + 1]) << 16) |
(ord(key[i * 4 + 2]) << 8) | ord(key[i * 4 + 3]))
 
# copy values into round key arrays
t = 0
j = 0
while j < KC and t < ROUND_KEY_COUNT:
Ke[t / BC][t % BC] = tk[j]
Kd[ROUNDS - (t / BC)][t % BC] = tk[j]
j += 1
t += 1
tt = 0
rconpointer = 0
while t < ROUND_KEY_COUNT:
# extrapolate using phi (the round key evolution function)
tt = tk[KC - 1]
tk[0] ^= (S[(tt >> 16) & 0xFF] & 0xFF) << 24 ^ \
(S[(tt >> 8) & 0xFF] & 0xFF) << 16 ^ \
(S[ tt & 0xFF] & 0xFF) << 8 ^ \
(S[(tt >> 24) & 0xFF] & 0xFF) ^ \
(rcon[rconpointer] & 0xFF) << 24
rconpointer += 1
if KC != 8:
for i in xrange(1, KC):
tk[i] ^= tk[i-1]
else:
for i in xrange(1, KC / 2):
tk[i] ^= tk[i-1]
tt = tk[KC / 2 - 1]
tk[KC / 2] ^= (S[ tt & 0xFF] & 0xFF) ^ \
(S[(tt >> 8) & 0xFF] & 0xFF) << 8 ^ \
(S[(tt >> 16) & 0xFF] & 0xFF) << 16 ^ \
(S[(tt >> 24) & 0xFF] & 0xFF) << 24
for i in xrange(KC / 2 + 1, KC):
tk[i] ^= tk[i-1]
# copy values into round key arrays
j = 0
while j < KC and t < ROUND_KEY_COUNT:
Ke[t / BC][t % BC] = tk[j]
Kd[ROUNDS - (t / BC)][t % BC] = tk[j]
j += 1
t += 1
# inverse MixColumn where needed
for r in xrange(1, ROUNDS):
for j in xrange(BC):
tt = Kd[r][j]
Kd[r][j] = U1[(tt >> 24) & 0xFF] ^ \
U2[(tt >> 16) & 0xFF] ^ \
U3[(tt >> 8) & 0xFF] ^ \
U4[ tt & 0xFF]
self.Ke = Ke
self.Kd = Kd
 
def encrypt(self, plaintext):
if len(plaintext) != self.block_size:
raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(plaintext)))
Ke = self.Ke
 
BC = self.block_size / 4
ROUNDS = len(Ke) - 1
if BC == 4:
SC = 0
elif BC == 6:
SC = 1
else:
SC = 2
s1 = shifts[SC][1][0]
s2 = shifts[SC][2][0]
s3 = shifts[SC][3][0]
a = [0] * BC
# temporary work array
t = []
# plaintext to ints + key
for i in xrange(BC):
t.append((ord(plaintext[i * 4 ]) << 24 |
ord(plaintext[i * 4 + 1]) << 16 |
ord(plaintext[i * 4 + 2]) << 8 |
ord(plaintext[i * 4 + 3]) ) ^ Ke[0][i])
# apply round transforms
for r in xrange(1, ROUNDS):
for i in xrange(BC):
a[i] = (T1[(t[ i ] >> 24) & 0xFF] ^
T2[(t[(i + s1) % BC] >> 16) & 0xFF] ^
T3[(t[(i + s2) % BC] >> 8) & 0xFF] ^
T4[ t[(i + s3) % BC] & 0xFF] ) ^ Ke[r][i]
t = copy.copy(a)
# last round is special
result = []
for i in xrange(BC):
tt = Ke[ROUNDS][i]
result.append((S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF)
result.append((S[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF)
result.append((S[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF)
result.append((S[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF)
return string.join(map(chr, result), '')
 
def decrypt(self, ciphertext):
if len(ciphertext) != self.block_size:
raise ValueError('wrong block length, expected ' + str(self.block_size) + ' got ' + str(len(plaintext)))
Kd = self.Kd
 
BC = self.block_size / 4
ROUNDS = len(Kd) - 1
if BC == 4:
SC = 0
elif BC == 6:
SC = 1
else:
SC = 2
s1 = shifts[SC][1][1]
s2 = shifts[SC][2][1]
s3 = shifts[SC][3][1]
a = [0] * BC
# temporary work array
t = [0] * BC
# ciphertext to ints + key
for i in xrange(BC):
t[i] = (ord(ciphertext[i * 4 ]) << 24 |
ord(ciphertext[i * 4 + 1]) << 16 |
ord(ciphertext[i * 4 + 2]) << 8 |
ord(ciphertext[i * 4 + 3]) ) ^ Kd[0][i]
# apply round transforms
for r in xrange(1, ROUNDS):
for i in xrange(BC):
a[i] = (T5[(t[ i ] >> 24) & 0xFF] ^
T6[(t[(i + s1) % BC] >> 16) & 0xFF] ^
T7[(t[(i + s2) % BC] >> 8) & 0xFF] ^
T8[ t[(i + s3) % BC] & 0xFF] ) ^ Kd[r][i]
t = copy.copy(a)
# last round is special
result = []
for i in xrange(BC):
tt = Kd[ROUNDS][i]
result.append((Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF)
result.append((Si[(t[(i + s1) % BC] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF)
result.append((Si[(t[(i + s2) % BC] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF)
result.append((Si[ t[(i + s3) % BC] & 0xFF] ^ tt ) & 0xFF)
return string.join(map(chr, result), '')
 
def encrypt(key, block):
return rijndael(key, len(block)).encrypt(block)
 
def decrypt(key, block):
return rijndael(key, len(block)).decrypt(block)
 
def test():
def t(kl, bl):
b = 'b' * bl
r = rijndael('a' * kl, bl)
assert r.decrypt(r.encrypt(b)) == b
t(16, 16)
t(16, 24)
t(16, 32)
t(24, 16)
t(24, 24)
t(24, 32)
t(32, 16)
t(32, 24)
t(32, 32)
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/python_Rijndael.py
0,0 → 1,107
from blockcipher import *
from rijndael import rijndael
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,blocksize=None):
"""Create a new cipher object
 
Wrapper for pure python implementation rijndael.py
 
key = raw string containing the key
-> supported key size are 16, 24 and 32 bytes
mode = python_Rijndael.MODE_ECB/CBC/CFB/OFB/CTR/XTS/CMAC, default is ECB
-> for every mode, except ECB and CTR, it is important to construct a seperate cipher for encryption and decryption
IV = IV as a raw string, default is "all zero" IV
-> needed for CBC, CFB and OFB mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
-> use a seperate counter object for the cipher and decipher: the counter is updated directly, not a copy
see CTR example further on in the docstring
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
blocksize = blocksize in bytes
-> supported blocksizes are 16, 24 and 32 bytes, must be 16 if XTS mode.
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import python_Rijndael
 
EXAMPLE:
--------
24 byte block, 32 byte key (http://fp.gladman.plus.com/cryptography_technology/rijndael/)
>>> key = '2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe'.decode('hex')
>>> plaintext ='3243f6a8885a308d313198a2e03707344a4093822299f31d'.decode('hex')
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_ECB,blocksize=24)
>>> cipher.encrypt(plaintext).encode('hex')
'0ebacf199e3315c2e34b24fcc7c46ef4388aa475d66c194c'
 
CBC EXAMPLE (plaintext = 3 blocksizes) (AES):
-----------------------------------------
>>> key = ('2b7e151628aed2a6abf7158809cf4f3c').decode('hex')
>>> IV = ('000102030405060708090a0b0c0d0e0f').decode('hex')
>>> plaintext1 = ('6bc1bee22e409f96e93d7e117393172a').decode('hex')
>>> plaintext2 = ('ae2d8a571e03ac9c9eb76fac45af8e51').decode('hex')
>>> plaintext3 = ('30c81c46a35ce411e5fbc1191a0a52ef').decode('hex')
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_CBC,IV,blocksize=16)
>>> ciphertext = cipher.encrypt(plaintext1 + plaintext2 + plaintext3)
>>> (ciphertext).encode('hex')
'7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e22229516'
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_CBC,IV,blocksize=16)
>>> plaintext = decipher.decrypt(ciphertext)
>>> (plaintext).encode('hex')
'6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52ef'
 
XTS EXAMPLE:
------------
(Examples for XTS-AES)
XTS-AES-128 applied for a data unit of 512 bytes
testvector: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf
 
>>> key = ('27182818284590452353602874713526'.decode('hex'),'31415926535897932384626433832795'.decode('hex'))
>>> plaintext = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'.decode('hex')
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16)
>>> ciphertext = cipher.encrypt(plaintext)
>>> ciphertext.encode('hex')
'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568'
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16)
>>> decipher.decrypt(ciphertext).encode('hex')
'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
 
using data sequence number n
 
>>> key = ('fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0'.decode('hex'),'22222222222222222222222222222222'.decode('hex'))
>>> plain ='4444444444444444444444444444444444444444444444444444444444444444'.decode('hex')
>>> n = '3333333333'.decode('hex')
>>> cipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16)
>>> ciphertext = cipher.encrypt(plain,n)
>>> ciphertext.encode('hex')
'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89'
>>> decipher = python_Rijndael.new(key,python_Rijndael.MODE_XTS,blocksize=16)
>>> decipher.decrypt(ciphertext,n).encode('hex')
'4444444444444444444444444444444444444444444444444444444444444444'
"""
return python_Rijndael(key,mode,IV,counter,blocksize,segment_size)
 
class python_Rijndael(BlockCipher):
key_error_message = ("Key should be 128, 192 or 256 bits")
 
def __init__(self,key,mode,IV,counter,blocksize,segment_size):
if blocksize not in (16,24,32):
raise ValueError("Blocksize should be 16, 24 or 32")
cipher_module = rijndael
args = {'block_size':blocksize}
self.blocksize = blocksize
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args)
 
def keylen_valid(self,key):
return len(key) in (16,24,32)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/RC5.py
0,0 → 1,58
from blockcipher import *
try:
import Crypto.Cipher.RC5
except ImportError:
print "Crypto.Cipher.RC5 isn't available. You're probably using the Debian pycrypto version. Install the original pycrypto for RC5."
raise
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None,rounds=12,word_size=32):
"""Create a new cipher object
 
RC5 using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the keys
multiple of 8 bits between 0 <-> 2040 bits
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
rounds = amount of rounds, default = 12
minimum 12 and multiple of 2
word_size = RC5 word size (bits), supported = 16 and 32, default = 32
RC5 encrypts blocks of size 2*word_size
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import RC5
 
https://www.cosic.esat.kuleuven.be/nessie/testvectors/
-----------------------------------------
>>> key = "00000000000000000000000000000000".decode('hex')
>>> plaintext = "0000000000000000".decode('hex')
>>> rounds = 12
>>> cipher = RC5.new(key,RC5.MODE_ECB,rounds=rounds)
>>> cipher.encrypt(plaintext).encode('hex')
'21a5dbee154b8f6d'
"""
return RC5(key,mode,IV,counter,rounds,word_size,segment_size)
 
class RC5(BlockCipher):
def __init__(self,key,mode,IV,counter,rounds,word_size,segment_size):
cipher_module = Crypto.Cipher.RC5.new
args = {'rounds':rounds,'word_size':word_size}
self.blocksize = (2*word_size)/8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size,args)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/pypresent.py
0,0 → 1,229
# Python PRESENT implementation
# Version: 1.0
# Date: 13/10/2008
#
# =============================================================================
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com>
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> )
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# =============================================================================
 
""" PRESENT block cipher implementation
 
USAGE EXAMPLE:
---------------
Importing:
-----------
>>> from pypresent import Present
 
Encrypting with a 80-bit key:
------------------------------
>>> key = "00000000000000000000".decode('hex')
>>> plain = "0000000000000000".decode('hex')
>>> cipher = Present(key)
>>> encrypted = cipher.encrypt(plain)
>>> encrypted.encode('hex')
'5579c1387b228445'
>>> decrypted = cipher.decrypt(encrypted)
>>> decrypted.encode('hex')
'0000000000000000'
 
Encrypting with a 128-bit key:
-------------------------------
>>> key = "0123456789abcdef0123456789abcdef".decode('hex')
>>> plain = "0123456789abcdef".decode('hex')
>>> cipher = Present(key)
>>> encrypted = cipher.encrypt(plain)
>>> encrypted.encode('hex')
'0e9d28685e671dd6'
>>> decrypted = cipher.decrypt(encrypted)
>>> decrypted.encode('hex')
'0123456789abcdef'
 
fully based on standard specifications: http://www.crypto.ruhr-uni-bochum.de/imperia/md/content/texte/publications/conferences/present_ches2007.pdf
test vectors: http://www.crypto.ruhr-uni-bochum.de/imperia/md/content/texte/publications/conferences/slides/present_testvectors.zip
"""
class Present:
 
def __init__(self,key,rounds=32):
"""Create a PRESENT cipher object
 
key: the key as a 128-bit or 80-bit rawstring
rounds: the number of rounds as an integer, 32 by default
"""
self.rounds = rounds
if len(key) * 8 == 80:
self.roundkeys = generateRoundkeys80(string2number(key),self.rounds)
elif len(key) * 8 == 128:
self.roundkeys = generateRoundkeys128(string2number(key),self.rounds)
else:
raise ValueError, "Key must be a 128-bit or 80-bit rawstring"
 
def encrypt(self,block):
"""Encrypt 1 block (8 bytes)
 
Input: plaintext block as raw string
Output: ciphertext block as raw string
"""
state = string2number(block)
for i in xrange (self.rounds-1):
state = addRoundKey(state,self.roundkeys[i])
state = sBoxLayer(state)
state = pLayer(state)
cipher = addRoundKey(state,self.roundkeys[-1])
return number2string_N(cipher,8)
 
def decrypt(self,block):
"""Decrypt 1 block (8 bytes)
 
Input: ciphertext block as raw string
Output: plaintext block as raw string
"""
state = string2number(block)
for i in xrange (self.rounds-1):
state = addRoundKey(state,self.roundkeys[-i-1])
state = pLayer_dec(state)
state = sBoxLayer_dec(state)
decipher = addRoundKey(state,self.roundkeys[0])
return number2string_N(decipher,8)
 
def get_block_size(self):
return 8
 
# 0 1 2 3 4 5 6 7 8 9 a b c d e f
Sbox= [0xc,0x5,0x6,0xb,0x9,0x0,0xa,0xd,0x3,0xe,0xf,0x8,0x4,0x7,0x1,0x2]
Sbox_inv = [Sbox.index(x) for x in xrange(16)]
PBox = [0,16,32,48,1,17,33,49,2,18,34,50,3,19,35,51,
4,20,36,52,5,21,37,53,6,22,38,54,7,23,39,55,
8,24,40,56,9,25,41,57,10,26,42,58,11,27,43,59,
12,28,44,60,13,29,45,61,14,30,46,62,15,31,47,63]
PBox_inv = [PBox.index(x) for x in xrange(64)]
 
def generateRoundkeys80(key,rounds):
"""Generate the roundkeys for a 80-bit key
 
Input:
key: the key as a 80-bit integer
rounds: the number of rounds as an integer
Output: list of 64-bit roundkeys as integers"""
roundkeys = []
for i in xrange(1,rounds+1): # (K1 ... K32)
# rawkey: used in comments to show what happens at bitlevel
# rawKey[0:64]
roundkeys.append(key >>16)
#1. Shift
#rawKey[19:len(rawKey)]+rawKey[0:19]
key = ((key & (2**19-1)) << 61) + (key >> 19)
#2. SBox
#rawKey[76:80] = S(rawKey[76:80])
key = (Sbox[key >> 76] << 76)+(key & (2**76-1))
#3. Salt
#rawKey[15:20] ^ i
key ^= i << 15
return roundkeys
 
def generateRoundkeys128(key,rounds):
"""Generate the roundkeys for a 128-bit key
 
Input:
key: the key as a 128-bit integer
rounds: the number of rounds as an integer
Output: list of 64-bit roundkeys as integers"""
roundkeys = []
for i in xrange(1,rounds+1): # (K1 ... K32)
# rawkey: used in comments to show what happens at bitlevel
roundkeys.append(key >>64)
#1. Shift
key = ((key & (2**67-1)) << 61) + (key >> 67)
#2. SBox
key = (Sbox[key >> 124] << 124)+(Sbox[(key >> 120) & 0xF] << 120)+(key & (2**120-1))
#3. Salt
#rawKey[62:67] ^ i
key ^= i << 62
return roundkeys
 
def addRoundKey(state,roundkey):
return state ^ roundkey
 
def sBoxLayer(state):
"""SBox function for encryption
 
Input: 64-bit integer
Output: 64-bit integer"""
 
output = 0
for i in xrange(16):
output += Sbox[( state >> (i*4)) & 0xF] << (i*4)
return output
 
def sBoxLayer_dec(state):
"""Inverse SBox function for decryption
 
Input: 64-bit integer
Output: 64-bit integer"""
output = 0
for i in xrange(16):
output += Sbox_inv[( state >> (i*4)) & 0xF] << (i*4)
return output
 
def pLayer(state):
"""Permutation layer for encryption
 
Input: 64-bit integer
Output: 64-bit integer"""
output = 0
for i in xrange(64):
output += ((state >> i) & 0x01) << PBox[i]
return output
 
def pLayer_dec(state):
"""Permutation layer for decryption
 
Input: 64-bit integer
Output: 64-bit integer"""
output = 0
for i in xrange(64):
output += ((state >> i) & 0x01) << PBox_inv[i]
return output
 
def string2number(i):
""" Convert a string to a number
 
Input: string (big-endian)
Output: long or integer
"""
return int(i.encode('hex'),16)
 
def number2string_N(i, N):
"""Convert a number to a string of fixed size
 
i: long or integer
N: length of string
Output: string (big-endian)
"""
s = '%0*x' % (N*2, i)
return s.decode('hex')
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/pyserpent.py
0,0 → 1,1354
#!/usr/local/bin/python
 
# $Id: serpref.py,v 1.19 1998/09/02 21:28:02 fms Exp $
#
# Python reference implementation of Serpent.
#
# Written by Frank Stajano,
# Olivetti Oracle Research Laboratory <http://www.orl.co.uk/~fms/> and
# Cambridge University Computer Laboratory <http://www.cl.cam.ac.uk/~fms27/>.
#
# (c) 1998 Olivetti Oracle Research Laboratory (ORL)
#
# Original (Python) Serpent reference development started on 1998 02 12.
# C implementation development started on 1998 03 04.
#
# Serpent cipher invented by Ross Anderson, Eli Biham, Lars Knudsen.
# Serpent is a candidate for the Advanced Encryption Standard.
 
# --------------------------------------------------------------
 
"""This is an illustrative reference implementation of the Serpent cipher
invented by Eli Biham, Ross Anderson, Lars Knudsen. It is written for the
human reader more than for the machine and, as such, it is optimised for
clarity rather than speed. ("Premature optimisation is the root of all
evil.")
 
It can print out all the intermediate results (such as the subkeys) for a
given input and key so that implementers debugging erroneous code can
quickly verify which one of the building blocks is giving the wrong
answers.
 
This version implements Serpent-1, i.e. the variant defined in the final
submission to NIST.
"""
 
# --------------------------------------------------------------
# My own additions
# --------------------------------------------------------------
class Serpent:
#class to
def __init__(self,key):
key = key.encode('hex')
bitsInKey = keyLengthInBitsOf(key)
rawKey = convertToBitstring(reverse(key.lower()), bitsInKey)
self.userKey = makeLongKey(rawKey)
 
def encrypt(self,block):
plainText = convertToBitstring(reverse(block.encode("hex").lower()), 128)
cipherText = encrypt(plainText, self.userKey)
return reverse(bitstring2hexstring(cipherText)).decode('hex')
 
def decrypt(self,block):
cipherText = convertToBitstring(reverse(block.encode("hex").lower()), 128)
plainText = decrypt(cipherText, self.userKey)
return reverse(bitstring2hexstring(plainText)).decode('hex')
 
def get_block_size(self):
return 16
 
def reverse(toreverse):
out = ""
for i in range(len(toreverse)/2):
out += toreverse[len(toreverse)-i*2-2:len(toreverse)-i*2]
return out
# --------------------------------------------------------------
#
# --------------------------------------------------------------
 
# --------------------------------------------------------------
# Requires python 1.5, freely available from http://www.python.org/
# --------------------------------------------------------------
import string
import sys
import getopt
import re
 
# --------------------------------------------------------------
# Functions used in the formal description of the cipher
 
def S(box, input):
"""Apply S-box number 'box' to 4-bit bitstring 'input' and return a
4-bit bitstring as the result."""
 
return SBoxBitstring[box%8][input]
# There used to be 32 different S-boxes in serpent-0. Now there are
# only 8, each of which is used 4 times (Sboxes 8, 16, 24 are all
# identical to Sbox 0, etc). Hence the %8.
 
def SInverse(box, output):
"""Apply S-box number 'box' in reverse to 4-bit bitstring 'output' and
return a 4-bit bitstring (the input) as the result."""
 
return SBoxBitstringInverse[box%8][output]
 
 
def SHat(box, input):
"""Apply a parallel array of 32 copies of S-box number 'box' to the
128-bit bitstring 'input' and return a 128-bit bitstring as the
result."""
 
result = ""
for i in range(32):
result = result + S(box, input[4*i:4*(i+1)])
return result
 
def SHatInverse(box, output):
"""Apply, in reverse, a parallel array of 32 copies of S-box number
'box' to the 128-bit bitstring 'output' and return a 128-bit bitstring
(the input) as the result."""
 
result = ""
for i in range(32):
result = result + SInverse(box, output[4*i:4*(i+1)])
return result
 
 
def SBitslice(box, words):
"""Take 'words', a list of 4 32-bit bitstrings, least significant word
first. Return a similar list of 4 32-bit bitstrings obtained as
follows. For each bit position from 0 to 31, apply S-box number 'box'
to the 4 input bits coming from the current position in each of the
items in 'words'; and put the 4 output bits in the corresponding
positions in the output words."""
 
result = ["", "", "", ""]
for i in range(32): # ideally in parallel
quad = S(box, words[0][i] + words[1][i] + words[2][i] + words[3][i])
for j in range(4):
result[j] = result[j] + quad[j]
return result
 
def SBitsliceInverse(box, words):
"""Take 'words', a list of 4 32-bit bitstrings, least significant word
first. Return a similar list of 4 32-bit bitstrings obtained as
follows. For each bit position from 0 to 31, apply S-box number 'box'
in reverse to the 4 output bits coming from the current position in
each of the items in the supplied 'words'; and put the 4 input bits in
the corresponding positions in the returned words."""
 
result = ["", "", "", ""]
for i in range(32): # ideally in parallel
quad = SInverse(
box, words[0][i] + words[1][i] + words[2][i] + words[3][i])
for j in range(4):
result[j] = result[j] + quad[j]
return result
 
 
def LT(input):
"""Apply the table-based version of the linear transformation to the
128-bit string 'input' and return a 128-bit string as the result."""
 
if len(input) != 128:
raise ValueError, "input to LT is not 128 bit long"
 
result = ""
for i in range(len(LTTable)):
outputBit = "0"
for j in LTTable[i]:
outputBit = xor(outputBit, input[j])
result = result + outputBit
return result
 
def LTInverse(output):
"""Apply the table-based version of the inverse of the linear
transformation to the 128-bit string 'output' and return a 128-bit
string (the input) as the result."""
 
if len(output) != 128:
raise ValueError, "input to inverse LT is not 128 bit long"
 
result = ""
for i in range(len(LTTableInverse)):
inputBit = "0"
for j in LTTableInverse[i]:
inputBit = xor(inputBit, output[j])
result = result + inputBit
return result
 
 
 
def LTBitslice(X):
"""Apply the equations-based version of the linear transformation to
'X', a list of 4 32-bit bitstrings, least significant bitstring first,
and return another list of 4 32-bit bitstrings as the result."""
 
X[0] = rotateLeft(X[0], 13)
X[2] = rotateLeft(X[2], 3)
X[1] = xor(X[1], X[0], X[2])
X[3] = xor(X[3], X[2], shiftLeft(X[0], 3))
X[1] = rotateLeft(X[1], 1)
X[3] = rotateLeft(X[3], 7)
X[0] = xor(X[0], X[1], X[3])
X[2] = xor(X[2], X[3], shiftLeft(X[1], 7))
X[0] = rotateLeft(X[0], 5)
X[2] = rotateLeft(X[2], 22)
 
return X
 
def LTBitsliceInverse(X):
"""Apply, in reverse, the equations-based version of the linear
transformation to 'X', a list of 4 32-bit bitstrings, least significant
bitstring first, and return another list of 4 32-bit bitstrings as the
result."""
 
X[2] = rotateRight(X[2], 22)
X[0] = rotateRight(X[0], 5)
X[2] = xor(X[2], X[3], shiftLeft(X[1], 7))
X[0] = xor(X[0], X[1], X[3])
X[3] = rotateRight(X[3], 7)
X[1] = rotateRight(X[1], 1)
X[3] = xor(X[3], X[2], shiftLeft(X[0], 3))
X[1] = xor(X[1], X[0], X[2])
X[2] = rotateRight(X[2], 3)
X[0] = rotateRight(X[0], 13)
 
return X
 
 
def IP(input):
"""Apply the Initial Permutation to the 128-bit bitstring 'input'
and return a 128-bit bitstring as the result."""
 
return applyPermutation(IPTable, input)
 
def FP(input):
"""Apply the Final Permutation to the 128-bit bitstring 'input'
and return a 128-bit bitstring as the result."""
 
return applyPermutation(FPTable, input)
 
 
def IPInverse(output):
"""Apply the Initial Permutation in reverse."""
 
return FP(output)
 
def FPInverse(output):
"""Apply the Final Permutation in reverse."""
 
return IP(output)
 
 
def applyPermutation(permutationTable, input):
"""Apply the permutation specified by the 128-element list
'permutationTable' to the 128-bit bitstring 'input' and return a
128-bit bitstring as the result."""
 
if len(input) != len(permutationTable):
raise ValueError, "input size (%d) doesn't match perm table size (%d)"\
% (len(input), len(permutationTable))
 
result = ""
for i in range(len(permutationTable)):
result = result + input[permutationTable[i]]
return result
 
 
def R(i, BHati, KHat):
"""Apply round 'i' to the 128-bit bitstring 'BHati', returning another
128-bit bitstring (conceptually BHatiPlus1). Do this using the
appropriately numbered subkey(s) from the 'KHat' list of 33 128-bit
bitstrings."""
 
#O.show("BHati", BHati, "(i=%2d) BHati" % i)
 
xored = xor(BHati, KHat[i])
#O.show("xored", xored, "(i=%2d) xored" % i)
 
SHati = SHat(i, xored)
#O.show("SHati", SHati, "(i=%2d) SHati" % i)
 
if 0 <= i <= r-2:
BHatiPlus1 = LT(SHati)
elif i == r-1:
BHatiPlus1 = xor(SHati, KHat[r])
else:
raise ValueError, "round %d is out of 0..%d range" % (i, r-1)
#O.show("BHatiPlus1", BHatiPlus1, "(i=%2d) BHatiPlus1" % i)
 
return BHatiPlus1
 
 
def RInverse(i, BHatiPlus1, KHat):
"""Apply round 'i' in reverse to the 128-bit bitstring 'BHatiPlus1',
returning another 128-bit bitstring (conceptually BHati). Do this using
the appropriately numbered subkey(s) from the 'KHat' list of 33 128-bit
bitstrings."""
 
#O.show("BHatiPlus1", BHatiPlus1, "(i=%2d) BHatiPlus1" % i)
 
if 0 <= i <= r-2:
SHati = LTInverse(BHatiPlus1)
elif i == r-1:
SHati = xor(BHatiPlus1, KHat[r])
else:
raise ValueError, "round %d is out of 0..%d range" % (i, r-1)
#O.show("SHati", SHati, "(i=%2d) SHati" % i)
 
xored = SHatInverse(i, SHati)
#O.show("xored", xored, "(i=%2d) xored" % i)
 
BHati = xor(xored, KHat[i])
#O.show("BHati", BHati, "(i=%2d) BHati" % i)
 
return BHati
 
 
def RBitslice(i, Bi, K):
"""Apply round 'i' (bitslice version) to the 128-bit bitstring 'Bi' and
return another 128-bit bitstring (conceptually B i+1). Use the
appropriately numbered subkey(s) from the 'K' list of 33 128-bit
bitstrings."""
 
#O.show("Bi", Bi, "(i=%2d) Bi" % i)
 
# 1. Key mixing
xored = xor (Bi, K[i])
#O.show("xored", xored, "(i=%2d) xored" % i)
 
# 2. S Boxes
Si = SBitslice(i, quadSplit(xored))
# Input and output to SBitslice are both lists of 4 32-bit bitstrings
#O.show("Si", Si, "(i=%2d) Si" % i, "tlb")
 
 
# 3. Linear Transformation
if i == r-1:
# In the last round, replaced by an additional key mixing
BiPlus1 = xor(quadJoin(Si), K[r])
else:
BiPlus1 = quadJoin(LTBitslice(Si))
# BIPlus1 is a 128-bit bitstring
#O.show("BiPlus1", BiPlus1, "(i=%2d) BiPlus1" % i)
 
return BiPlus1
 
 
def RBitsliceInverse(i, BiPlus1, K):
"""Apply the inverse of round 'i' (bitslice version) to the 128-bit
bitstring 'BiPlus1' and return another 128-bit bitstring (conceptually
B i). Use the appropriately numbered subkey(s) from the 'K' list of 33
128-bit bitstrings."""
 
#O.show("BiPlus1", BiPlus1, "(i=%2d) BiPlus1" % i)
 
# 3. Linear Transformation
if i == r-1:
# In the last round, replaced by an additional key mixing
Si = quadSplit(xor(BiPlus1, K[r]))
else:
Si = LTBitsliceInverse(quadSplit(BiPlus1))
# SOutput (same as LTInput) is a list of 4 32-bit bitstrings
 
#O.show("Si", Si, "(i=%2d) Si" % i, "tlb")
 
# 2. S Boxes
xored = SBitsliceInverse(i, Si)
# SInput and SOutput are both lists of 4 32-bit bitstrings
 
#O.show("xored", xored, "(i=%2d) xored" % i)
 
# 1. Key mixing
Bi = xor (quadJoin(xored), K[i])
 
#O.show("Bi", Bi, "(i=%2d) Bi" % i)
 
return Bi
 
 
 
def encrypt(plainText, userKey):
"""Encrypt the 128-bit bitstring 'plainText' with the 256-bit bitstring
'userKey', using the normal algorithm, and return a 128-bit ciphertext
bitstring."""
 
#O.show("fnTitle", "encrypt", None, "tu")
#O.show("plainText", plainText, "plainText")
#O.show("userKey", userKey, "userKey")
 
K, KHat = makeSubkeys(userKey)
 
BHat = IP(plainText) # BHat_0 at this stage
for i in range(r):
BHat = R(i, BHat, KHat) # Produce BHat_i+1 from BHat_i
# BHat is now _32 i.e. _r
C = FP(BHat)
 
#O.show("cipherText", C, "cipherText")
 
return C
 
 
def encryptBitslice(plainText, userKey):
"""Encrypt the 128-bit bitstring 'plainText' with the 256-bit bitstring
'userKey', using the bitslice algorithm, and return a 128-bit ciphertext
bitstring."""
 
#O.show("fnTitle", "encryptBitslice", None, "tu")
#O.show("plainText", plainText, "plainText")
#O.show("userKey", userKey, "userKey")
 
K, KHat = makeSubkeys(userKey)
 
B = plainText # B_0 at this stage
for i in range(r):
B = RBitslice(i, B, K) # Produce B_i+1 from B_i
# B is now _r
 
#O.show("cipherText", B, "cipherText")
 
return B
 
def decrypt(cipherText, userKey):
"""Decrypt the 128-bit bitstring 'cipherText' with the 256-bit
bitstring 'userKey', using the normal algorithm, and return a 128-bit
plaintext bitstring."""
 
#O.show("fnTitle", "decrypt", None, "tu")
#O.show("cipherText", cipherText, "cipherText")
#O.show("userKey", userKey, "userKey")
 
K, KHat = makeSubkeys(userKey)
 
BHat = FPInverse(cipherText) # BHat_r at this stage
for i in range(r-1, -1, -1): # from r-1 down to 0 included
BHat = RInverse(i, BHat, KHat) # Produce BHat_i from BHat_i+1
# BHat is now _0
plainText = IPInverse(BHat)
 
#O.show("plainText", plainText, "plainText")
return plainText
 
 
def decryptBitslice(cipherText, userKey):
"""Decrypt the 128-bit bitstring 'cipherText' with the 256-bit
bitstring 'userKey', using the bitslice algorithm, and return a 128-bit
plaintext bitstring."""
 
#O.show("fnTitle", "decryptBitslice", None, "tu")
#O.show("cipherText", cipherText, "cipherText")
#O.show("userKey", userKey, "userKey")
 
K, KHat = makeSubkeys(userKey)
 
B = cipherText # B_r at this stage
for i in range(r-1, -1, -1): # from r-1 down to 0 included
B = RBitsliceInverse(i, B, K) # Produce B_i from B_i+1
# B is now _0
 
#O.show("plainText", B, "plainText")
return B
 
 
def makeSubkeys(userKey):
"""Given the 256-bit bitstring 'userKey' (shown as K in the paper, but
we can't use that name because of a collision with K[i] used later for
something else), return two lists (conceptually K and KHat) of 33
128-bit bitstrings each."""
 
# Because in Python I can't index a list from anything other than 0,
# I use a dictionary instead to legibly represent the w_i that are
# indexed from -8.
 
# We write the key as 8 32-bit words w-8 ... w-1
# ENOTE: w-8 is the least significant word
w = {}
for i in range(-8, 0):
w[i] = userKey[(i+8)*32:(i+9)*32]
#O.show("wi", w[i], "(i=%2d) wi" % i)
 
# We expand these to a prekey w0 ... w131 with the affine recurrence
for i in range(132):
w[i] = rotateLeft(
xor(w[i-8], w[i-5], w[i-3], w[i-1],
bitstring(phi, 32), bitstring(i,32)),
11)
#O.show("wi", w[i], "(i=%2d) wi" % i)
 
# The round keys are now calculated from the prekeys using the S-boxes
# in bitslice mode. Each k[i] is a 32-bit bitstring.
k = {}
for i in range(r+1):
whichS = (r + 3 - i) % r
k[0+4*i] = ""
k[1+4*i] = ""
k[2+4*i] = ""
k[3+4*i] = ""
for j in range(32): # for every bit in the k and w words
# ENOTE: w0 and k0 are the least significant words, w99 and k99
# the most.
input = w[0+4*i][j] + w[1+4*i][j] + w[2+4*i][j] + w[3+4*i][j]
output = S(whichS, input)
for l in range(4):
k[l+4*i] = k[l+4*i] + output[l]
 
# We then renumber the 32 bit values k_j as 128 bit subkeys K_i.
K = []
for i in range(33):
# ENOTE: k4i is the least significant word, k4i+3 the most.
K.append(k[4*i] + k[4*i+1] + k[4*i+2] + k[4*i+3])
 
# We now apply IP to the round key in order to place the key bits in
# the correct column
KHat = []
for i in range(33):
KHat.append(IP(K[i]))
 
#O.show("Ki", K[i], "(i=%2d) Ki" % i)
#O.show("KHati", KHat[i], "(i=%2d) KHati" % i)
 
return K, KHat
 
 
def makeLongKey(k):
"""Take a key k in bitstring format. Return the long version of that
key."""
 
l = len(k)
if l % 32 != 0 or l < 64 or l > 256:
raise ValueError, "Invalid key length (%d bits)" % l
 
if l == 256:
return k
else:
return k + "1" + "0"*(256 -l -1)
 
# --------------------------------------------------------------
# Generic bit-level primitives
 
# Internally, we represent the numbers manipulated by the cipher in a
# format that we call 'bitstring'. This is a string of "0" and "1"
# characters containing the binary representation of the number in
# little-endian format (so that subscripting with an index of i gives bit
# number i, corresponding to a weight of 2^i). This representation is only
# defined for nonnegative numbers (you can see why: think of the great
# unnecessary mess that would result from sign extension, two's complement
# and so on). Example: 10 decimal is "0101" in bitstring format.
 
def bitstring(n, minlen=1):
"""Translate n from integer to bitstring, padding it with 0s as
necessary to reach the minimum length 'minlen'. 'n' must be >= 0 since
the bitstring format is undefined for negative integers. Note that,
while the bitstring format can represent arbitrarily large numbers,
this is not so for Python's normal integer type: on a 32-bit machine,
values of n >= 2^31 need to be expressed as python long integers or
they will "look" negative and won't work. E.g. 0x80000000 needs to be
passed in as 0x80000000L, or it will be taken as -2147483648 instead of
+2147483648L.
 
EXAMPLE: bitstring(10, 8) -> "01010000"
"""
 
if minlen < 1:
raise ValueError, "a bitstring must have at least 1 char"
if n < 0:
raise ValueError, "bitstring representation undefined for neg numbers"
 
result = ""
while n > 0:
if n & 1:
result = result + "1"
else:
result = result + "0"
n = n >> 1
if len(result) < minlen:
result = result + "0" * (minlen - len(result))
return result
 
 
def binaryXor(n1, n2):
"""Return the xor of two bitstrings of equal length as another
bitstring of the same length.
 
EXAMPLE: binaryXor("10010", "00011") -> "10001"
"""
 
if len(n1) != len(n2):
raise ValueError, "can't xor bitstrings of different " + \
"lengths (%d and %d)" % (len(n1), len(n2))
# We assume that they are genuine bitstrings instead of just random
# character strings.
 
result = ""
for i in range(len(n1)):
if n1[i] == n2[i]:
result = result + "0"
else:
result = result + "1"
return result
 
 
def xor(*args):
"""Return the xor of an arbitrary number of bitstrings of the same
length as another bitstring of the same length.
 
EXAMPLE: xor("01", "11", "10") -> "00"
"""
 
if args == []:
raise ValueError, "at least one argument needed"
 
result = args[0]
for arg in args[1:]:
result = binaryXor(result, arg)
return result
 
 
def rotateLeft(input, places):
"""Take a bitstring 'input' of arbitrary length. Rotate it left by
'places' places. Left means that the 'places' most significant bits are
taken out and reinserted as the least significant bits. Note that,
because the bitstring representation is little-endian, the visual
effect is actually that of rotating the string to the right.
 
EXAMPLE: rotateLeft("000111", 2) -> "110001"
"""
 
p = places % len(input)
return input[-p:] + input[:-p]
 
def rotateRight(input, places):
return rotateLeft(input, -places)
 
def shiftLeft(input, p):
"""Take a bitstring 'input' of arbitrary length. Shift it left by 'p'
places. Left means that the 'p' most significant bits are shifted out
and dropped, while 'p' 0s are inserted in the the least significant
bits. Note that, because the bitstring representation is little-endian,
the visual effect is actually that of shifting the string to the
right. Negative values for 'p' are allowed, with the effect of shifting
right instead (i.e. the 0s are inserted in the most significant bits).
 
EXAMPLE: shiftLeft("000111", 2) -> "000001"
shiftLeft("000111", -2) -> "011100"
"""
 
if abs(p) >= len(input):
# Everything gets shifted out anyway
return "0" * len(input)
if p < 0:
# Shift right instead
return input[-p:] + "0" * len(input[:-p])
elif p == 0:
return input
else: # p > 0, normal case
return "0" * len(input[-p:]) + input[:-p]
 
def shiftRight(input, p):
"""Take a bitstring 'input' and shift it right by 'p' places. See the
doc for shiftLeft for more details."""
 
return shiftLeft(input, -p)
 
 
def keyLengthInBitsOf(k):
"""Take a string k in I/O format and return the number of bits in it."""
 
return len(k) * 4
 
# --------------------------------------------------------------
# Hex conversion functions
 
# For I/O we use BIG-ENDIAN hexstrings. Do not get confused: internal stuff
# is LITTLE-ENDIAN bitstrings (so that digit i has weight 2^i) while
# external stuff is in BIG-ENDIAN hexstrings (so that it's shorter and it
# looks like the numbers you normally write down). The external (I/O)
# representation is the same as used by the C reference implementation.
 
bin2hex = {
# Given a 4-char bitstring, return the corresponding 1-char hexstring
"0000": "0", "1000": "1", "0100": "2", "1100": "3",
"0010": "4", "1010": "5", "0110": "6", "1110": "7",
"0001": "8", "1001": "9", "0101": "a", "1101": "b",
"0011": "c", "1011": "d", "0111": "e", "1111": "f",
}
 
# Make the reverse lookup table too
hex2bin = {}
for (bin, hex) in bin2hex.items():
hex2bin[hex] = bin
 
 
def bitstring2hexstring(b):
"""Take bitstring 'b' and return the corresponding hexstring."""
 
result = ""
l = len(b)
if l % 4:
b = b + "0" * (4-(l%4))
for i in range(0, len(b), 4):
result = result+bin2hex[b[i:i+4]]
return reverseString(result)
 
def hexstring2bitstring(h):
"""Take hexstring 'h' and return the corresponding bitstring."""
 
result = ""
for c in reverseString(h):
result = result + hex2bin[c]
return result
 
def reverseString(s):
l = list(s)
l.reverse()
return string.join(l, "")
 
 
 
 
# --------------------------------------------------------------
# Format conversions
 
def quadSplit(b128):
"""Take a 128-bit bitstring and return it as a list of 4 32-bit
bitstrings, least significant bitstring first."""
 
if len(b128) != 128:
raise ValueError, "must be 128 bits long, not " + len(b128)
 
result = []
for i in range(4):
result.append(b128[(i*32):(i+1)*32])
return result
 
 
def quadJoin(l4x32):
"""Take a list of 4 32-bit bitstrings and return it as a single 128-bit
bitstring obtained by concatenating the internal ones."""
 
if len(l4x32) != 4:
raise ValueError, "need a list of 4 bitstrings, not " + len(l4x32)
 
return l4x32[0] + l4x32[1] + l4x32[2] + l4x32[3]
 
# --------------------------------------------------
# Seeing what happens inside
 
class Observer:
"""An object of this class can selectively display the values of the
variables you want to observe while the program is running. There are
tags that you can switch on or off. You sprinkle show() statements
throughout the program to show the value of a variable at a particular
point: show() will display the relevant variable only if the
corresponding tag is currently on. The special tag "ALL" forces all
show() statements to display their variable."""
 
typesOfVariable = {
"tu": "unknown", "tb": "bitstring", "tlb": "list of bitstrings",}
 
def __init__(self, tags=[]):
self.tags = {}
for tag in tags:
self.tags[tag] = 1
 
 
def addTag(self, *tags):
"""Add the supplied tag(s) to those that are currently active,
i.e. those that, if a corresponding "show()" is executed, will
print something."""
 
for t in tags:
self.tags[t] = 1
 
def removeTag(self, *tags):
"""Remove the supplied tag(s) from those currently active."""
for t in tags:
if t in self.tags.keys():
del self.tags[t]
 
def show(self, tag, variable, label=None, type="tb"):
"""Conditionally print a message with the current value of
'variable'. The message will only be printed if the supplied 'tag'
is among the active ones (or if the 'ALL' tag is active). The
'label', if not null, is printed before the value of the
'variable'; if it is null, it is substituted with the 'tag'. The
'type' of the 'variable' (giving us a clue on how to print it) must
be one of Observer.typesOfVariable."""
 
if label == None:
label = tag
if "ALL" in self.tags.keys() or tag in self.tags.keys():
if type == "tu":
output = `variable`
elif type == "tb":
output = bitstring2hexstring(variable)
elif type == "tlb":
output = ""
for item in variable:
output = output + " %s" % bitstring2hexstring(item)
output = "[" + output[1:] + "]"
else:
raise ValueError, "unknown type: %s. Valid ones are %s" % (
type, self.typesOfVariable.keys())
 
print label,
if output:
print "=", output
else:
print
 
 
# We make one global observer object that is always available
O = Observer(["plainText", "userKey", "cipherText"])
 
# --------------------------------------------------------------
# Constants
phi = 0x9e3779b9L
r = 32
# --------------------------------------------------------------
# Data tables
 
 
# Each element of this list corresponds to one S-box. Each S-box in turn is
# a list of 16 integers in the range 0..15, without repetitions. Having the
# value v (say, 14) in position p (say, 0) means that if the input to that
# S-box is the pattern p (0, or 0x0) then the output will be the pattern v
# (14, or 0xe).
SBoxDecimalTable = [
[ 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 ], # S0
[15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 ], # S1
[ 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 ], # S2
[ 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 ], # S3
[ 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 ], # S4
[15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 ], # S5
[ 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 ], # S6
[ 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 ], # S7
]
# NB: in serpent-0, this was a list of 32 sublists (for the 32 different
# S-boxes derived from DES). In the final version of Serpent only 8 S-boxes
# are used, with each one being reused 4 times.
 
 
# Make another version of this table as a list of dictionaries: one
# dictionary per S-box, where the value of the entry indexed by i tells you
# the output configuration when the input is i, with both the index and the
# value being bitstrings. Make also the inverse: another list of
# dictionaries, one per S-box, where each dictionary gets the output of the
# S-box as the key and gives you the input, with both values being 4-bit
# bitstrings.
SBoxBitstring = []
SBoxBitstringInverse = []
for line in SBoxDecimalTable:
dict = {}
inverseDict = {}
for i in range(len(line)):
index = bitstring(i, 4)
value = bitstring(line[i], 4)
dict[index] = value
inverseDict[value] = index
SBoxBitstring.append(dict)
SBoxBitstringInverse.append(inverseDict)
 
 
# The Initial and Final permutations are each represented by one list
# containing the integers in 0..127 without repetitions. Having value v
# (say, 32) at position p (say, 1) means that the output bit at position p
# (1) comes from the input bit at position v (32).
IPTable = [
0, 32, 64, 96, 1, 33, 65, 97, 2, 34, 66, 98, 3, 35, 67, 99,
4, 36, 68, 100, 5, 37, 69, 101, 6, 38, 70, 102, 7, 39, 71, 103,
8, 40, 72, 104, 9, 41, 73, 105, 10, 42, 74, 106, 11, 43, 75, 107,
12, 44, 76, 108, 13, 45, 77, 109, 14, 46, 78, 110, 15, 47, 79, 111,
16, 48, 80, 112, 17, 49, 81, 113, 18, 50, 82, 114, 19, 51, 83, 115,
20, 52, 84, 116, 21, 53, 85, 117, 22, 54, 86, 118, 23, 55, 87, 119,
24, 56, 88, 120, 25, 57, 89, 121, 26, 58, 90, 122, 27, 59, 91, 123,
28, 60, 92, 124, 29, 61, 93, 125, 30, 62, 94, 126, 31, 63, 95, 127,
]
FPTable = [
0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60,
64, 68, 72, 76, 80, 84, 88, 92, 96, 100, 104, 108, 112, 116, 120, 124,
1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61,
65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125,
2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62,
66, 70, 74, 78, 82, 86, 90, 94, 98, 102, 106, 110, 114, 118, 122, 126,
3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63,
67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 127,
]
 
 
# The Linear Transformation is represented as a list of 128 lists, one for
# each output bit. Each one of the 128 lists is composed of a variable
# number of integers in 0..127 specifying the positions of the input bits
# that must be XORed together (say, 72, 144 and 125) to yield the output
# bit corresponding to the position of that list (say, 1).
LTTable = [
[16, 52, 56, 70, 83, 94, 105],
[72, 114, 125],
[2, 9, 15, 30, 76, 84, 126],
[36, 90, 103],
[20, 56, 60, 74, 87, 98, 109],
[1, 76, 118],
[2, 6, 13, 19, 34, 80, 88],
[40, 94, 107],
[24, 60, 64, 78, 91, 102, 113],
[5, 80, 122],
[6, 10, 17, 23, 38, 84, 92],
[44, 98, 111],
[28, 64, 68, 82, 95, 106, 117],
[9, 84, 126],
[10, 14, 21, 27, 42, 88, 96],
[48, 102, 115],
[32, 68, 72, 86, 99, 110, 121],
[2, 13, 88],
[14, 18, 25, 31, 46, 92, 100],
[52, 106, 119],
[36, 72, 76, 90, 103, 114, 125],
[6, 17, 92],
[18, 22, 29, 35, 50, 96, 104],
[56, 110, 123],
[1, 40, 76, 80, 94, 107, 118],
[10, 21, 96],
[22, 26, 33, 39, 54, 100, 108],
[60, 114, 127],
[5, 44, 80, 84, 98, 111, 122],
[14, 25, 100],
[26, 30, 37, 43, 58, 104, 112],
[3, 118],
[9, 48, 84, 88, 102, 115, 126],
[18, 29, 104],
[30, 34, 41, 47, 62, 108, 116],
[7, 122],
[2, 13, 52, 88, 92, 106, 119],
[22, 33, 108],
[34, 38, 45, 51, 66, 112, 120],
[11, 126],
[6, 17, 56, 92, 96, 110, 123],
[26, 37, 112],
[38, 42, 49, 55, 70, 116, 124],
[2, 15, 76],
[10, 21, 60, 96, 100, 114, 127],
[30, 41, 116],
[0, 42, 46, 53, 59, 74, 120],
[6, 19, 80],
[3, 14, 25, 100, 104, 118],
[34, 45, 120],
[4, 46, 50, 57, 63, 78, 124],
[10, 23, 84],
[7, 18, 29, 104, 108, 122],
[38, 49, 124],
[0, 8, 50, 54, 61, 67, 82],
[14, 27, 88],
[11, 22, 33, 108, 112, 126],
[0, 42, 53],
[4, 12, 54, 58, 65, 71, 86],
[18, 31, 92],
[2, 15, 26, 37, 76, 112, 116],
[4, 46, 57],
[8, 16, 58, 62, 69, 75, 90],
[22, 35, 96],
[6, 19, 30, 41, 80, 116, 120],
[8, 50, 61],
[12, 20, 62, 66, 73, 79, 94],
[26, 39, 100],
[10, 23, 34, 45, 84, 120, 124],
[12, 54, 65],
[16, 24, 66, 70, 77, 83, 98],
[30, 43, 104],
[0, 14, 27, 38, 49, 88, 124],
[16, 58, 69],
[20, 28, 70, 74, 81, 87, 102],
[34, 47, 108],
[0, 4, 18, 31, 42, 53, 92],
[20, 62, 73],
[24, 32, 74, 78, 85, 91, 106],
[38, 51, 112],
[4, 8, 22, 35, 46, 57, 96],
[24, 66, 77],
[28, 36, 78, 82, 89, 95, 110],
[42, 55, 116],
[8, 12, 26, 39, 50, 61, 100],
[28, 70, 81],
[32, 40, 82, 86, 93, 99, 114],
[46, 59, 120],
[12, 16, 30, 43, 54, 65, 104],
[32, 74, 85],
[36, 90, 103, 118],
[50, 63, 124],
[16, 20, 34, 47, 58, 69, 108],
[36, 78, 89],
[40, 94, 107, 122],
[0, 54, 67],
[20, 24, 38, 51, 62, 73, 112],
[40, 82, 93],
[44, 98, 111, 126],
[4, 58, 71],
[24, 28, 42, 55, 66, 77, 116],
[44, 86, 97],
[2, 48, 102, 115],
[8, 62, 75],
[28, 32, 46, 59, 70, 81, 120],
[48, 90, 101],
[6, 52, 106, 119],
[12, 66, 79],
[32, 36, 50, 63, 74, 85, 124],
[52, 94, 105],
[10, 56, 110, 123],
[16, 70, 83],
[0, 36, 40, 54, 67, 78, 89],
[56, 98, 109],
[14, 60, 114, 127],
[20, 74, 87],
[4, 40, 44, 58, 71, 82, 93],
[60, 102, 113],
[3, 18, 72, 114, 118, 125],
[24, 78, 91],
[8, 44, 48, 62, 75, 86, 97],
[64, 106, 117],
[1, 7, 22, 76, 118, 122],
[28, 82, 95],
[12, 48, 52, 66, 79, 90, 101],
[68, 110, 121],
[5, 11, 26, 80, 122, 126],
[32, 86, 99],
]
 
# The following table is necessary for the non-bitslice decryption.
LTTableInverse = [
[53, 55, 72],
[1, 5, 20, 90],
[15, 102],
[3, 31, 90],
[57, 59, 76],
[5, 9, 24, 94],
[19, 106],
[7, 35, 94],
[61, 63, 80],
[9, 13, 28, 98],
[23, 110],
[11, 39, 98],
[65, 67, 84],
[13, 17, 32, 102],
[27, 114],
[1, 3, 15, 20, 43, 102],
[69, 71, 88],
[17, 21, 36, 106],
[1, 31, 118],
[5, 7, 19, 24, 47, 106],
[73, 75, 92],
[21, 25, 40, 110],
[5, 35, 122],
[9, 11, 23, 28, 51, 110],
[77, 79, 96],
[25, 29, 44, 114],
[9, 39, 126],
[13, 15, 27, 32, 55, 114],
[81, 83, 100],
[1, 29, 33, 48, 118],
[2, 13, 43],
[1, 17, 19, 31, 36, 59, 118],
[85, 87, 104],
[5, 33, 37, 52, 122],
[6, 17, 47],
[5, 21, 23, 35, 40, 63, 122],
[89, 91, 108],
[9, 37, 41, 56, 126],
[10, 21, 51],
[9, 25, 27, 39, 44, 67, 126],
[93, 95, 112],
[2, 13, 41, 45, 60],
[14, 25, 55],
[2, 13, 29, 31, 43, 48, 71],
[97, 99, 116],
[6, 17, 45, 49, 64],
[18, 29, 59],
[6, 17, 33, 35, 47, 52, 75],
[101, 103, 120],
[10, 21, 49, 53, 68],
[22, 33, 63],
[10, 21, 37, 39, 51, 56, 79],
[105, 107, 124],
[14, 25, 53, 57, 72],
[26, 37, 67],
[14, 25, 41, 43, 55, 60, 83],
[0, 109, 111],
[18, 29, 57, 61, 76],
[30, 41, 71],
[18, 29, 45, 47, 59, 64, 87],
[4, 113, 115],
[22, 33, 61, 65, 80],
[34, 45, 75],
[22, 33, 49, 51, 63, 68, 91],
[8, 117, 119],
[26, 37, 65, 69, 84],
[38, 49, 79],
[26, 37, 53, 55, 67, 72, 95],
[12, 121, 123],
[30, 41, 69, 73, 88],
[42, 53, 83],
[30, 41, 57, 59, 71, 76, 99],
[16, 125, 127],
[34, 45, 73, 77, 92],
[46, 57, 87],
[34, 45, 61, 63, 75, 80, 103],
[1, 3, 20],
[38, 49, 77, 81, 96],
[50, 61, 91],
[38, 49, 65, 67, 79, 84, 107],
[5, 7, 24],
[42, 53, 81, 85, 100],
[54, 65, 95],
[42, 53, 69, 71, 83, 88, 111],
[9, 11, 28],
[46, 57, 85, 89, 104],
[58, 69, 99],
[46, 57, 73, 75, 87, 92, 115],
[13, 15, 32],
[50, 61, 89, 93, 108],
[62, 73, 103],
[50, 61, 77, 79, 91, 96, 119],
[17, 19, 36],
[54, 65, 93, 97, 112],
[66, 77, 107],
[54, 65, 81, 83, 95, 100, 123],
[21, 23, 40],
[58, 69, 97, 101, 116],
[70, 81, 111],
[58, 69, 85, 87, 99, 104, 127],
[25, 27, 44],
[62, 73, 101, 105, 120],
[74, 85, 115],
[3, 62, 73, 89, 91, 103, 108],
[29, 31, 48],
[66, 77, 105, 109, 124],
[78, 89, 119],
[7, 66, 77, 93, 95, 107, 112],
[33, 35, 52],
[0, 70, 81, 109, 113],
[82, 93, 123],
[11, 70, 81, 97, 99, 111, 116],
[37, 39, 56],
[4, 74, 85, 113, 117],
[86, 97, 127],
[15, 74, 85, 101, 103, 115, 120],
[41, 43, 60],
[8, 78, 89, 117, 121],
[3, 90],
[19, 78, 89, 105, 107, 119, 124],
[45, 47, 64],
[12, 82, 93, 121, 125],
[7, 94],
[0, 23, 82, 93, 109, 111, 123],
[49, 51, 68],
[1, 16, 86, 97, 125],
[11, 98],
[4, 27, 86, 97, 113, 115, 127],
]
 
 
# --------------------------------------------------
# Handling command line arguments and stuff
 
help = """
# $Id: serpref.py,v 1.19 1998/09/02 21:28:02 fms Exp $
#
# Python reference implementation of Serpent.
#
# Written by Frank Stajano,
# Olivetti Oracle Research Laboratory <http://www.orl.co.uk/~fms/> and
# Cambridge University Computer Laboratory <http://www.cl.cam.ac.uk/~fms27/>.
#
# (c) 1998 Olivetti Oracle Research Laboratory (ORL)
#
# Original (Python) Serpent reference development started on 1998 02 12.
# C implementation development started on 1998 03 04.
#
# Serpent cipher invented by Ross Anderson, Eli Biham, Lars Knudsen.
# Serpent is a candidate for the Advanced Encryption Standard.
 
Encrypts or decrypts one block of data using the Serpent cipher and
optionally showing you what's going on inside at the various stages of
the computation.
 
SYNTAX: serpref mode [options]
 
MODE is one of the following:
-e -> encrypt
-d -> decrypt
-h -> help (the text you're reading right now)
 
OPTIONS are:
-p plainText -> The 128-bit value to be encrypted. Required in mode -e,
ignored otherwise. Short texts are zeropadded.
-c cipherText -> The 128-bit value to be decrypted. Required in mode -d,
ignored otherwise. Short texts are zeropadded.
-k key -> The value of the key (allowed lengths are from 64 to
256 bits, but must be a multiple of 32 bits). Keys
shorter than 256 bits are internally transformed into
the equivalent long keys (NOT the same as zeropadding!).
Required for -e and -d.
-t tagName -> Turn on the observer tag with that name. This means that
any observer messages associated with this tag will
now be displayed. This option may be specified several
times to add multiple tags.
The special tag ALL turns on all the messages.
 
-b -> Use the bitslice version instead of the traditional
version, which is otherwise used by default. Optional.
 
TAGS:
These are the tags of the quantities you can currently observe with
-t. Names are modelled on the paper's notation.
 
For the non-bitslice: BHati xored SHati BHatiPlus1 wi KHati
For the bitslice: Bi xored Si BiPlus1 wi Ki
Generic: plainText userKey cipherText testTitle fnTitle
 
 
I/O FORMAT:
All I/O is performed using hex numbers of the appropriate size, written
as sequences of hex digits, most significant digit first (big-endian),
without any leading or trailing markers such as 0x, &, h or whatever.
Example: the number ten is "a" in four bits or "000a" in sixteen bits.
 
 
USAGE EXAMPLES:
 
serpref -e -k 123456789abcdef -p 0
Encrypt the plaintext "all zeros" with the given key.
 
serpref -e -b -k 123456789abcdef -p 0
Same as above, but the extra -b requests bitslice operation. As
things are, we won't notice the difference, but see below...
 
serpref -e -b -k 123456789abcdef -p 0 -t Bi
Same as above, but the "-t Bi" prints out all the intermediate
results with a tag of Bi, allowing you to see what happens inside
the rounds. Compare this with the following...
 
serpref -e -k 123456789abcdef -p 0 -t BHati
Same as above except that we are back to the non-bitslice version
(there is no -b) and we are printing the items with the BHati tag
(which is the equivalent of Bi for the non-bitslice version).
 
serpref -e -k 123456789abcdef -p 0 -t xored -t SHati -t BHati
Same as above but we are requesting even more details, basically
looking at all the intermediate results of each round as well. (You
could use the single magic tag -t ALL if you didn't want to have to
find out the names of the individual tags.)
"""
 
 
def helpExit(message = None):
print help
if message:
print "ERROR:", message
sys.exit()
 
def convertToBitstring(input, numBits):
"""Take a string 'input', theoretically in std I/O format, but in
practice liable to contain any sort of crap since it's user supplied,
and return its bitstring representation, normalised to numBits
bits. Raise the appropriate variant of ValueError (with explanatory
message) if anything can't be done (this includes the case where the
'input', while otherwise syntactically correct, can't be represented in
'numBits' bits)."""
 
if re.match("^[0-9a-f]+$", input):
bitstring = hexstring2bitstring(input)
else:
raise ValueError, "%s is not a valid hexstring" % input
 
# assert: bitstring now contains the bitstring version of the input
 
if len(bitstring) > numBits:
# Last chance: maybe it's got some useless 0s...
if re.match("^0+$", bitstring[numBits:]):
bitstring = bitstring[:numBits]
else:
raise ValueError, "input too large to fit in %d bits" % numBits
else:
bitstring = bitstring + "0" * (numBits-len(bitstring))
 
return bitstring
 
 
def main():
 
optList, rest = getopt.getopt(sys.argv[1:], "edhbt:k:p:c:")
 
if rest:
helpExit("Sorry, can't make sense of this: '%s'" % rest)
 
# Transform the list of options into a more comfortable
# dictionary. This only works with non-repeated options, though, so
# tags (which are repeated) must be dealt with separately.
options = {}
for key, value in optList:
if key == "-t":
O.addTag(value)
else:
if key in options.keys():
helpExit("Multiple occurrences of " + key)
else:
options[string.strip(key)] = string.strip(value)
 
# Not more than one mode
mode = None
for k in options.keys():
if k in ["-e", "-d", "-h"]:
if mode:
helpExit("you can only specify one mode")
else:
mode = k
if not mode:
helpExit("No mode specified")
 
# Put plainText, userKey, cipherText in bitstring format.
plainText = userKey = cipherText = None
if options.has_key("-k"):
bitsInKey = keyLengthInBitsOf(options["-k"])
rawKey = convertToBitstring(options["-k"], bitsInKey)
userKey = makeLongKey(rawKey)
if options.has_key("-p"):
plainText = convertToBitstring(options["-p"], 128)
if options.has_key("-c"):
cipherText = convertToBitstring(options["-c"], 128)
if mode == "-e" or mode == "-d":
if not userKey:
helpExit("-k (key) required with -e (encrypt) or -d (decrypt)")
if mode == "-e":
if not plainText:
helpExit("-p (plaintext) is required when doing -e (encrypt)")
if mode == "-d":
if not cipherText:
helpExit("-c (ciphertext) is required when doing -d (decrypt)")
 
# Perform the action specified by the mode
# NOTE that the observer will automatically print the basic stuff such
# as plainText, userKey and cipherText (in the right format too), so we
# only need to perform the action, without adding any extra print
# statements here.
if mode == "-e":
if options.has_key("-b"):
cipherText = encryptBitslice(plainText, userKey)
else:
cipherText = encrypt(plainText, userKey)
elif mode == "-d":
if options.has_key("-b"):
plainText = decryptBitslice(cipherText, userKey)
else:
plainText = decrypt(cipherText, userKey)
elif mode == "-s":
O.addTag("testTitle", "fnTitle")
 
printTest(test1(plainText, userKey))
printTest(test2(plainText, userKey))
printTest(test3(plainText, userKey))
else:
helpExit()
 
 
if __name__ == "__main__":
main()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/CAST.py
0,0 → 1,57
from blockcipher import *
import Crypto.Cipher.CAST
 
def new(key,mode=MODE_ECB,IV=None,counter=None,segment_size=None):
"""Create a new cipher object
 
CAST using pycrypto for algo and pycryptoplus for ciphermode
 
key = raw string containing the keys
mode = python_AES.MODE_ECB/CBC/CFB/OFB/CTR/CMAC, default is ECB
IV = IV as a raw string, default is "all zero" IV
-> only needed for CBC mode
counter = counter object (CryptoPlus.Util.util.Counter)
-> only needed for CTR mode
segment_size = amount of bits to use from the keystream in each chain part
-> supported values: multiple of 8 between 8 and the blocksize
of the cipher (only per byte access possible), default is 8
-> only needed for CFB mode
 
EXAMPLES:
**********
IMPORTING:
-----------
>>> from CryptoPlus.Cipher import CAST
 
ECB example: http://www.rfc-editor.org/rfc/rfc2144.txt
-------------
128 bit key
 
>>> key = "0123456712345678234567893456789A".decode('hex')
>>> plaintext = "0123456789ABCDEF".decode('hex')
>>> cipher = CAST.new(key,CAST.MODE_ECB,)
>>> cipher.encrypt(plaintext).encode('hex')
'238b4fe5847e44b2'
 
40 bit key
>>> from CryptoPlus.Cipher import CAST
>>> key = "0123456712".decode('hex')
>>> plaintext = "0123456789ABCDEF".decode('hex')
>>> cipher = CAST.new(key,CAST.MODE_ECB,)
>>> cipher.encrypt(plaintext).encode('hex').upper()
'7AC816D16E9B302E'
"""
return CAST(key,mode,IV,counter,segment_size)
 
class CAST(BlockCipher):
def __init__(self,key,mode,IV,counter,segment_size):
cipher_module = Crypto.Cipher.CAST.new
self.blocksize = 8
BlockCipher.__init__(self,key,mode,IV,counter,cipher_module,segment_size)
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Cipher/pytwofish.py
0,0 → 1,397
## twofish.py - pure Python implementation of the Twofish algorithm.
## Bjorn Edstrom <be@bjrn.se> 13 december 2007.
##
## Copyrights
## ==========
##
## This code is a derived from an implementation by Dr Brian Gladman
## (gladman@seven77.demon.co.uk) which is subject to the following license.
## This Python implementation is not subject to any other license.
##
##/* This is an independent implementation of the encryption algorithm: */
##/* */
##/* Twofish by Bruce Schneier and colleagues */
##/* */
##/* which is a candidate algorithm in the Advanced Encryption Standard */
##/* programme of the US National Institute of Standards and Technology. */
##/* */
##/* Copyright in this implementation is held by Dr B R Gladman but I */
##/* hereby give permission for its free direct or derivative use subject */
##/* to acknowledgment of its origin and compliance with any conditions */
##/* that the originators of t he algorithm place on its exploitation. */
##/* */
##/* My thanks to Doug Whiting and Niels Ferguson for comments that led */
##/* to improvements in this implementation. */
##/* */
##/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 14th January 1999 */
##
## The above copyright notice must not be removed.
##
## Information
## ===========
##
## Anyone thinking of using this code should reconsider. It's slow.
## Try python-mcrypt instead. In case a faster library is not installed
## on the target system, this code can be used as a portable fallback.
 
try:
import psyco
psyco.full()
except ImportError:
pass
 
block_size = 16
key_size = 32
 
class Twofish:
 
def __init__(self, key=None):
"""Twofish."""
 
if key:
self.set_key(key)
 
 
def set_key(self, key):
"""Init."""
 
key_len = len(key)
if key_len not in [16, 24, 32]:
# XXX: add padding?
raise KeyError, "key must be 16, 24 or 32 bytes"
if key_len % 4:
# XXX: add padding?
raise KeyError, "key not a multiple of 4"
if key_len > 32:
# XXX: prune?
raise KeyError, "key_len > 32"
 
self.context = TWI()
 
key_word32 = [0] * 32
i = 0
while key:
key_word32[i] = struct.unpack("<L", key[0:4])[0]
key = key[4:]
i += 1
 
set_key(self.context, key_word32, key_len)
 
 
def decrypt(self, block):
"""Decrypt blocks."""
 
if len(block) % 16:
raise ValueError, "block size must be a multiple of 16"
 
plaintext = ''
 
while block:
a, b, c, d = struct.unpack("<4L", block[:16])
temp = [a, b, c, d]
decrypt(self.context, temp)
plaintext += struct.pack("<4L", *temp)
block = block[16:]
 
return plaintext
 
 
def encrypt(self, block):
"""Encrypt blocks."""
 
if len(block) % 16:
raise ValueError, "block size must be a multiple of 16"
 
ciphertext = ''
 
while block:
a, b, c, d = struct.unpack("<4L", block[0:16])
temp = [a, b, c, d]
encrypt(self.context, temp)
ciphertext += struct.pack("<4L", *temp)
block = block[16:]
 
return ciphertext
 
 
def get_name(self):
"""Return the name of the cipher."""
 
return "Twofish"
 
 
def get_block_size(self):
"""Get cipher block size in bytes."""
 
return 16
 
 
def get_key_size(self):
"""Get cipher key size in bytes."""
 
return 32
 
 
#
# Private.
#
 
import struct
import sys
 
WORD_BIGENDIAN = 0
if sys.byteorder == 'big':
WORD_BIGENDIAN = 1
 
def rotr32(x, n):
return (x >> n) | ((x << (32 - n)) & 0xFFFFFFFF)
 
def rotl32(x, n):
return ((x << n) & 0xFFFFFFFF) | (x >> (32 - n))
 
def byteswap32(x):
return ((x & 0xff) << 24) | (((x >> 8) & 0xff) << 16) | \
(((x >> 16) & 0xff) << 8) | ((x >> 24) & 0xff)
 
class TWI:
def __init__(self):
self.k_len = 0 # word32
self.l_key = [0]*40 # word32
self.s_key = [0]*4 # word32
self.qt_gen = 0 # word32
self.q_tab = [[0]*256, [0]*256] # byte
self.mt_gen = 0 # word32
self.m_tab = [[0]*256, [0]*256, [0]*256, [0]*256] # word32
self.mk_tab = [[0]*256, [0]*256, [0]*256, [0]*256] # word32
 
def byte(x, n):
return (x >> (8 * n)) & 0xff
 
tab_5b = [0, 90, 180, 238]
tab_ef = [0, 238, 180, 90]
ror4 = [0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15]
ashx = [0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7]
qt0 = [[8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4],
[2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5]]
qt1 = [[14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13],
[1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8]]
qt2 = [[11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1],
[4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15]]
qt3 = [[13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10],
[11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10]]
 
def qp(n, x): # word32, byte
n %= 0x100000000
x %= 0x100
a0 = x >> 4;
b0 = x & 15;
a1 = a0 ^ b0;
b1 = ror4[b0] ^ ashx[a0];
a2 = qt0[n][a1];
b2 = qt1[n][b1];
a3 = a2 ^ b2;
b3 = ror4[b2] ^ ashx[a2];
a4 = qt2[n][a3];
b4 = qt3[n][b3];
return (b4 << 4) | a4;
 
def gen_qtab(pkey):
for i in xrange(256):
pkey.q_tab[0][i] = qp(0, i)
pkey.q_tab[1][i] = qp(1, i)
 
def gen_mtab(pkey):
for i in xrange(256):
f01 = pkey.q_tab[1][i]
f01 = pkey.q_tab[1][i];
f5b = ((f01) ^ ((f01) >> 2) ^ tab_5b[(f01) & 3]);
fef = ((f01) ^ ((f01) >> 1) ^ ((f01) >> 2) ^ tab_ef[(f01) & 3]);
pkey.m_tab[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24);
pkey.m_tab[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24);
 
f01 = pkey.q_tab[0][i];
f5b = ((f01) ^ ((f01) >> 2) ^ tab_5b[(f01) & 3]);
fef = ((f01) ^ ((f01) >> 1) ^ ((f01) >> 2) ^ tab_ef[(f01) & 3]);
pkey.m_tab[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24);
pkey.m_tab[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24);
 
def gen_mk_tab(pkey, key):
if pkey.k_len == 2:
for i in xrange(256):
by = i % 0x100
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[1],0)] ^ byte(key[0],0)];
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[1],1)] ^ byte(key[0],1)];
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[1],2)] ^ byte(key[0],2)];
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[1],3)] ^ byte(key[0],3)];
if pkey.k_len == 3:
for i in xrange(256):
by = i % 0x100
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[2], 0)] ^ byte(key[1], 0)] ^ byte(key[0], 0)];
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[2], 1)] ^ byte(key[1], 1)] ^ byte(key[0], 1)];
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[2], 2)] ^ byte(key[1], 2)] ^ byte(key[0], 2)];
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[2], 3)] ^ byte(key[1], 3)] ^ byte(key[0], 3)];
if pkey.k_len == 4:
for i in xrange(256):
by = i % 0x100
pkey.mk_tab[0][i] = pkey.m_tab[0][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][by] ^ byte(key[3], 0)] ^ byte(key[2], 0)] ^ byte(key[1], 0)] ^ byte(key[0], 0)];
pkey.mk_tab[1][i] = pkey.m_tab[1][pkey.q_tab[0][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][by] ^ byte(key[3], 1)] ^ byte(key[2], 1)] ^ byte(key[1], 1)] ^ byte(key[0], 1)];
pkey.mk_tab[2][i] = pkey.m_tab[2][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[0][pkey.q_tab[0][by] ^ byte(key[3], 2)] ^ byte(key[2], 2)] ^ byte(key[1], 2)] ^ byte(key[0], 2)];
pkey.mk_tab[3][i] = pkey.m_tab[3][pkey.q_tab[1][pkey.q_tab[1][pkey.q_tab[0][pkey.q_tab[1][by] ^ byte(key[3], 3)] ^ byte(key[2], 3)] ^ byte(key[1], 3)] ^ byte(key[0], 3)];
 
def h_fun(pkey, x, key):
b0 = byte(x, 0);
b1 = byte(x, 1);
b2 = byte(x, 2);
b3 = byte(x, 3);
if pkey.k_len >= 4:
b0 = pkey.q_tab[1][b0] ^ byte(key[3], 0);
b1 = pkey.q_tab[0][b1] ^ byte(key[3], 1);
b2 = pkey.q_tab[0][b2] ^ byte(key[3], 2);
b3 = pkey.q_tab[1][b3] ^ byte(key[3], 3);
if pkey.k_len >= 3:
b0 = pkey.q_tab[1][b0] ^ byte(key[2], 0);
b1 = pkey.q_tab[1][b1] ^ byte(key[2], 1);
b2 = pkey.q_tab[0][b2] ^ byte(key[2], 2);
b3 = pkey.q_tab[0][b3] ^ byte(key[2], 3);
if pkey.k_len >= 2:
b0 = pkey.q_tab[0][pkey.q_tab[0][b0] ^ byte(key[1], 0)] ^ byte(key[0], 0);
b1 = pkey.q_tab[0][pkey.q_tab[1][b1] ^ byte(key[1], 1)] ^ byte(key[0], 1);
b2 = pkey.q_tab[1][pkey.q_tab[0][b2] ^ byte(key[1], 2)] ^ byte(key[0], 2);
b3 = pkey.q_tab[1][pkey.q_tab[1][b3] ^ byte(key[1], 3)] ^ byte(key[0], 3);
return pkey.m_tab[0][b0] ^ pkey.m_tab[1][b1] ^ pkey.m_tab[2][b2] ^ pkey.m_tab[3][b3];
 
def mds_rem(p0, p1):
i, t, u = 0, 0, 0
for i in xrange(8):
t = p1 >> 24
p1 = ((p1 << 8) & 0xffffffff) | (p0 >> 24)
p0 = (p0 << 8) & 0xffffffff
u = (t << 1) & 0xffffffff
if t & 0x80:
u ^= 0x0000014d
p1 ^= t ^ ((u << 16) & 0xffffffff)
u ^= (t >> 1)
if t & 0x01:
u ^= 0x0000014d >> 1
p1 ^= ((u << 24) & 0xffffffff) | ((u << 8) & 0xffffffff)
return p1
 
def set_key(pkey, in_key, key_len):
pkey.qt_gen = 0
if not pkey.qt_gen:
gen_qtab(pkey)
pkey.qt_gen = 1
pkey.mt_gen = 0
if not pkey.mt_gen:
gen_mtab(pkey)
pkey.mt_gen = 1
pkey.k_len = (key_len * 8) / 64
 
a = 0
b = 0
me_key = [0,0,0,0]
mo_key = [0,0,0,0]
for i in xrange(pkey.k_len):
if WORD_BIGENDIAN:
a = byteswap32(in_key[i + 1])
me_key[i] = a
b = byteswap32(in_key[i + i + 1])
else:
a = in_key[i + i]
me_key[i] = a
b = in_key[i + i + 1]
mo_key[i] = b
pkey.s_key[pkey.k_len - i - 1] = mds_rem(a, b);
for i in xrange(0, 40, 2):
a = (0x01010101 * i) % 0x100000000;
b = (a + 0x01010101) % 0x100000000;
a = h_fun(pkey, a, me_key);
b = rotl32(h_fun(pkey, b, mo_key), 8);
pkey.l_key[i] = (a + b) % 0x100000000;
pkey.l_key[i + 1] = rotl32((a + 2 * b) % 0x100000000, 9);
gen_mk_tab(pkey, pkey.s_key)
 
def encrypt(pkey, in_blk):
blk = [0, 0, 0, 0]
 
if WORD_BIGENDIAN:
blk[0] = byteswap32(in_blk[0]) ^ pkey.l_key[0];
blk[1] = byteswap32(in_blk[1]) ^ pkey.l_key[1];
blk[2] = byteswap32(in_blk[2]) ^ pkey.l_key[2];
blk[3] = byteswap32(in_blk[3]) ^ pkey.l_key[3];
else:
blk[0] = in_blk[0] ^ pkey.l_key[0];
blk[1] = in_blk[1] ^ pkey.l_key[1];
blk[2] = in_blk[2] ^ pkey.l_key[2];
blk[3] = in_blk[3] ^ pkey.l_key[3];
 
for i in xrange(8):
t1 = ( pkey.mk_tab[0][byte(blk[1],3)] ^ pkey.mk_tab[1][byte(blk[1],0)] ^ pkey.mk_tab[2][byte(blk[1],1)] ^ pkey.mk_tab[3][byte(blk[1],2)] );
t0 = ( pkey.mk_tab[0][byte(blk[0],0)] ^ pkey.mk_tab[1][byte(blk[0],1)] ^ pkey.mk_tab[2][byte(blk[0],2)] ^ pkey.mk_tab[3][byte(blk[0],3)] );
 
blk[2] = rotr32(blk[2] ^ ((t0 + t1 + pkey.l_key[4 * (i) + 8]) % 0x100000000), 1);
blk[3] = rotl32(blk[3], 1) ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 9]) % 0x100000000);
 
t1 = ( pkey.mk_tab[0][byte(blk[3],3)] ^ pkey.mk_tab[1][byte(blk[3],0)] ^ pkey.mk_tab[2][byte(blk[3],1)] ^ pkey.mk_tab[3][byte(blk[3],2)] );
t0 = ( pkey.mk_tab[0][byte(blk[2],0)] ^ pkey.mk_tab[1][byte(blk[2],1)] ^ pkey.mk_tab[2][byte(blk[2],2)] ^ pkey.mk_tab[3][byte(blk[2],3)] );
 
blk[0] = rotr32(blk[0] ^ ((t0 + t1 + pkey.l_key[4 * (i) + 10]) % 0x100000000), 1);
blk[1] = rotl32(blk[1], 1) ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 11]) % 0x100000000);
 
if WORD_BIGENDIAN:
in_blk[0] = byteswap32(blk[2] ^ pkey.l_key[4]);
in_blk[1] = byteswap32(blk[3] ^ pkey.l_key[5]);
in_blk[2] = byteswap32(blk[0] ^ pkey.l_key[6]);
in_blk[3] = byteswap32(blk[1] ^ pkey.l_key[7]);
else:
in_blk[0] = blk[2] ^ pkey.l_key[4];
in_blk[1] = blk[3] ^ pkey.l_key[5];
in_blk[2] = blk[0] ^ pkey.l_key[6];
in_blk[3] = blk[1] ^ pkey.l_key[7];
 
return
 
def decrypt(pkey, in_blk):
blk = [0, 0, 0, 0]
 
if WORD_BIGENDIAN:
blk[0] = byteswap32(in_blk[0]) ^ pkey.l_key[4];
blk[1] = byteswap32(in_blk[1]) ^ pkey.l_key[5];
blk[2] = byteswap32(in_blk[2]) ^ pkey.l_key[6];
blk[3] = byteswap32(in_blk[3]) ^ pkey.l_key[7];
else:
blk[0] = in_blk[0] ^ pkey.l_key[4];
blk[1] = in_blk[1] ^ pkey.l_key[5];
blk[2] = in_blk[2] ^ pkey.l_key[6];
blk[3] = in_blk[3] ^ pkey.l_key[7];
 
for i in xrange(7, -1, -1):
t1 = ( pkey.mk_tab[0][byte(blk[1],3)] ^ pkey.mk_tab[1][byte(blk[1],0)] ^ pkey.mk_tab[2][byte(blk[1],1)] ^ pkey.mk_tab[3][byte(blk[1],2)] )
t0 = ( pkey.mk_tab[0][byte(blk[0],0)] ^ pkey.mk_tab[1][byte(blk[0],1)] ^ pkey.mk_tab[2][byte(blk[0],2)] ^ pkey.mk_tab[3][byte(blk[0],3)] )
 
blk[2] = rotl32(blk[2], 1) ^ ((t0 + t1 + pkey.l_key[4 * (i) + 10]) % 0x100000000)
blk[3] = rotr32(blk[3] ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 11]) % 0x100000000), 1)
 
t1 = ( pkey.mk_tab[0][byte(blk[3],3)] ^ pkey.mk_tab[1][byte(blk[3],0)] ^ pkey.mk_tab[2][byte(blk[3],1)] ^ pkey.mk_tab[3][byte(blk[3],2)] )
t0 = ( pkey.mk_tab[0][byte(blk[2],0)] ^ pkey.mk_tab[1][byte(blk[2],1)] ^ pkey.mk_tab[2][byte(blk[2],2)] ^ pkey.mk_tab[3][byte(blk[2],3)] )
 
blk[0] = rotl32(blk[0], 1) ^ ((t0 + t1 + pkey.l_key[4 * (i) + 8]) % 0x100000000)
blk[1] = rotr32(blk[1] ^ ((t0 + 2 * t1 + pkey.l_key[4 * (i) + 9]) % 0x100000000), 1)
 
if WORD_BIGENDIAN:
in_blk[0] = byteswap32(blk[2] ^ pkey.l_key[0]);
in_blk[1] = byteswap32(blk[3] ^ pkey.l_key[1]);
in_blk[2] = byteswap32(blk[0] ^ pkey.l_key[2]);
in_blk[3] = byteswap32(blk[1] ^ pkey.l_key[3]);
else:
in_blk[0] = blk[2] ^ pkey.l_key[0];
in_blk[1] = blk[3] ^ pkey.l_key[1];
in_blk[2] = blk[0] ^ pkey.l_key[2];
in_blk[3] = blk[1] ^ pkey.l_key[3];
return
 
__testkey = '\xD4\x3B\xB7\x55\x6E\xA3\x2E\x46\xF2\xA2\x82\xB7\xD4\x5B\x4E\x0D\x57\xFF\x73\x9D\x4D\xC9\x2C\x1B\xD7\xFC\x01\x70\x0C\xC8\x21\x6F'
__testdat = '\x90\xAF\xE9\x1B\xB2\x88\x54\x4F\x2C\x32\xDC\x23\x9B\x26\x35\xE6'
assert 'l\xb4V\x1c@\xbf\n\x97\x05\x93\x1c\xb6\xd4\x08\xe7\xfa' == Twofish(__testkey).encrypt(__testdat)
assert __testdat == Twofish(__testkey).decrypt('l\xb4V\x1c@\xbf\n\x97\x05\x93\x1c\xb6\xd4\x08\xe7\xfa')
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/testvectors.py
0,0 → 1,216
# CHAIN MODES WITH AES:
# test vectors from: http://cryptome.org/bcm/sp800-38a.htm
dict_cbc_aes = {
'key1' : '2b7e151628aed2a6abf7158809cf4f3c',
'iv1' : '000102030405060708090a0b0c0d0e0f',
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip1' : '7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7',
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'iv2' : '000102030405060708090a0b0c0d0e0f',
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip2' : '4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd',
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'iv3' : '000102030405060708090a0b0c0d0e0f',
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip3' : 'f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b',
}
 
dict_ctr_aes = {
'key1' : '2b7e151628aed2a6abf7158809cf4f3c',
'ctr1' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip1' : '874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee',
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'ctr2' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip2' : '1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050',
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'ctr3' : 'f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip3' : '601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6',
}
dict_cfb_aes = {
'key1' : '2b7e151628aed2a6abf7158809cf4f3c',
'iv1' : '000102030405060708090a0b0c0d0e0f',
's1' : 128,
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip1' : '3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6',
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'iv2' : '000102030405060708090a0b0c0d0e0f',
's2' : 128,
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip2' : 'cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ff',
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'iv3' : '000102030405060708090a0b0c0d0e0f',
's3' : 128,
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip3' : 'dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471',
}
dict_ofb_aes = {
'key1' : '2b7e151628aed2a6abf7158809cf4f3c',
'iv1' : '000102030405060708090a0b0c0d0e0f',
'msg1' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip1' : '3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e',
'key2' : '8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b',
'iv2' : '000102030405060708090a0b0c0d0e0f',
'msg2' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip2' : 'cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a',
'key3' : '603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4',
'iv3' : '000102030405060708090a0b0c0d0e0f',
'msg3' : '6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710',
'cip3' : 'dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484',
}
 
 
# DES
# test vectors from: https://www.cosic.esat.kuleuven.be/nessie/testvectors/
dict_des = {'cip10': '31FE17369B5288C9', 'key339': 'D3D3D3D3D3D3D3D3', 'cip11': 'DFDD3CC64DAE1642', 'msg284': '9C9C9C9C9C9C9C9C', 'cip49': '14C1D7C1CFFEC79E', 'cip48': 'D1399712F99BF02E', 'cip382': '66B2B23EA84693AD', 'key19': '0000100000000000', 'key18': '0000200000000000', 'key17': '0000400000000000', 'key16': '0000800000000000', 'key15': '0001000000000000', 'key14': '0002000000000000', 'key13': '0004000000000000', 'key12': '0008000000000000', 'key11': '0010000000000000', 'key10': '0020000000000000', 'cip213': '3BCDD41E6165A5E8', 'key338': 'D2D2D2D2D2D2D2D2', 'cip212': '531BE5F9405DA715', 'key331': 'CBCBCBCBCBCBCBCB', 'key202': '4A4A4A4A4A4A4A4A', 'key330': 'CACACACACACACACA', 'key337': 'D1D1D1D1D1D1D1D1', 'key336': 'D0D0D0D0D0D0D0D0', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg249': '7979797979797979', 'msg248': '7878787878787878', 'key315': 'BBBBBBBBBBBBBBBB', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'cip355': 'ADE4804C4BE4486E', 'msg329': 'C9C9C9C9C9C9C9C9', 'msg383': 'FFFFFFFFFFFFFFFF', 'cip292': 'CA439007C7245CD0', 'cip219': '35BC6FF838DBA32F', 'key80': '0000000000000000', 'key81': '0000000000000000', 'key82': '0000000000000000', 'key83': '0000000000000000', 'key84': '0000000000000000', 'key85': '0000000000000000', 'key86': '0000000000000000', 'key87': '0000000000000000', 'key88': '0000000000000000', 'key89': '0000000000000000', 'msg332': 'CCCCCCCCCCCCCCCC', 'msg282': '9A9A9A9A9A9A9A9A', 'key288': 'A0A0A0A0A0A0A0A0', 'key309': 'B5B5B5B5B5B5B5B5', 'key350': 'DEDEDEDEDEDEDEDE', 'cip354': 'D9FA6595F0C094CA', 'key180': '3434343434343434', 'key181': '3535353535353535', 'key182': '3636363636363636', 'key183': '3737373737373737', 'key184': '3838383838383838', 'key185': '3939393939393939', 'key186': '3A3A3A3A3A3A3A3A', 'key187': '3B3B3B3B3B3B3B3B', 'key188': '3C3C3C3C3C3C3C3C', 'key189': '3D3D3D3D3D3D3D3D', 'key223': '5F5F5F5F5F5F5F5F', 'key222': '5E5E5E5E5E5E5E5E', 'key225': '6161616161616161', 'key224': '6060606060606060', 'key227': '6363636363636363', 'key226': '6262626262626262', 'cip41': '41B9A79AF79AC208', 'cip40': '8638809E878787A0', 'cip43': '29038D56BA6D2745', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '8000000000000000', 'msg65': '4000000000000000', 'msg66': '2000000000000000', 'msg67': '1000000000000000', 'msg68': '0800000000000000', 'cip45': 'AE13DBD561488933', 'cip291': 'B6D8533731BA1318', 'cip290': '17ED1191CA8D67A3', 'cip297': 'D4E00A9EF5E6D8F3', 'key201': '4949494949494949', 'cip295': 'E415D80048DBA848', 'cip44': '5495C6ABF1E5DF51', 'key200': '4848484848484848', 'key139': '0B0B0B0B0B0B0B0B', 'cip47': '8CA64DE9C1B123A7', 'key135': '0707070707070707', 'key134': '0606060606060606', 'key137': '0909090909090909', 'cip46': '024D1FFA8904E389', 'key131': '0303030303030303', 'key130': '0202020202020202', 'key133': '0505050505050505', 'key132': '0404040404040404', 'cip275': 'F0B00B264381DDBB', 'cip274': '5B365F2FB2CD7F32', 'cip178': 'AC978C247863388F', 'cip179': '0432ED386F2DE328', 'cip271': '50ACE16ADF66BFE8', 'key205': '4D4D4D4D4D4D4D4D', 'cip273': '6050D369017B6E62', 'cip272': 'EEA24369A19F6937', 'cip172': 'DD2CCB29B6C4C349', 'cip173': '7D07A77A2ABD50A7', 'cip170': 'DCAD4338F7523816', 'cip171': 'B81634C1CEAB298C', 'key26': '0000002000000000', 'cip177': '655EA628CF62585F', 'cip174': '30C1B0C1FD91D371', 'cip175': 'C4427B31AC61973B', 'cip296': '26F88D30C0FB8302', 'key280': '9898989898989898', 'msg188': '3C3C3C3C3C3C3C3C', 'msg189': '3D3D3D3D3D3D3D3D', 'msg186': '3A3A3A3A3A3A3A3A', 'msg187': '3B3B3B3B3B3B3B3B', 'msg184': '3838383838383838', 'msg185': '3939393939393939', 'msg182': '3636363636363636', 'msg183': '3737373737373737', 'msg180': '3434343434343434', 'msg181': '3535353535353535', 'cip187': '8D250D58361597FC', 'cip186': 'B04A2AAC925ABB0B', 'cip185': 'E22B19A55086774B', 'cip184': '8940F7B3EACA5939', 'cip183': '5013CA4F62C9CEA0', 'cip182': '37F8759EB77E7BFC', 'cip181': 'B256E34BEDB49801', 'cip180': 'D254014CB986B3C2', 'msg348': 'DCDCDCDCDCDCDCDC', 'msg349': 'DDDDDDDDDDDDDDDD', 'key27': '0000001000000000', 'cip189': '9D0BB4DB830ECB73', 'cip188': '51F0114FB6A6CD37', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'key378': 'FAFAFAFAFAFAFAFA', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip89': '64FEED9C724C2FAF', 'cip88': '750D079407521363', 'cip85': '12A9F5817FF2D65D', 'cip84': 'E7FCE22557D23C97', 'cip87': 'FBE00A8A1EF8AD72', 'cip86': 'A484C3AD38DC9C19', 'cip81': '889DE068A16F0BE6', 'cip80': '2B9F982F20037FA9', 'cip83': '329A8ED523D71AEC', 'cip82': 'E19E275D846A1298', 'key318': 'BEBEBEBEBEBEBEBE', 'msg358': 'E6E6E6E6E6E6E6E6', 'msg115': '0000000000001000', 'msg114': '0000000000002000', 'msg117': '0000000000000400', 'msg116': '0000000000000800', 'msg111': '0000000000010000', 'msg110': '0000000000020000', 'msg113': '0000000000004000', 'msg112': '0000000000008000', 'msg119': '0000000000000100', 'msg118': '0000000000000200', 'cip381': '1ED83D49E267191D', 'key209': '5151515151515151', 'key308': 'B4B4B4B4B4B4B4B4', 'cip261': '69D901A8A691E661', 'key367': 'EFEFEFEFEFEFEFEF', 'cip16': 'A2DC9E92FD3CDE92', 'cip17': 'CAC09F797D031287', 'cip14': 'A8468EE3BC18F06D', 'cip15': '8CA64DE9C1B123A7', 'cip12': '178C83CE2B399D94', 'cip13': '50F636324A9B7F80', 'key42': '0000000000200000', 'key43': '0000000000100000', 'cip345': '4DADD04A0EA70F20', 'key208': '5050505050505050', 'key48': '0000000000008000', 'key49': '0000000000004000', 'cip18': '90BA680B22AEB525', 'cip19': 'CE7A24F350E280B6', 'cip333': '536873DB879CC770', 'cip347': 'F45FC26193E69AEE', 'cip329': 'C8078A6148818403', 'msg347': 'DBDBDBDBDBDBDBDB', 'cip335': '0B844B9D8C4EA14A', 'cip349': 'F0752004EE23D87B', 'cip336': '3BBD84CE539E68C4', 'cip353': '0DB572DDCE388AC7', 'msg288': 'A0A0A0A0A0A0A0A0', 'cip337': 'CF3E4F3E026E2C8E', 'cip313': 'B7FE63A61C646F3A', 'msg241': '7171717171717171', 'key265': '8989898989898989', 'msg365': 'EDEDEDEDEDEDEDED', 'key326': 'C6C6C6C6C6C6C6C6', 'msg240': '7070707070707070', 'msg243': '7373737373737373', 'cip362': '8FE559C7CD6FA56D', 'msg238': '6E6E6E6E6E6E6E6E', 'msg239': '6F6F6F6F6F6F6F6F', 'msg242': '7272727272727272', 'key206': '4E4E4E4E4E4E4E4E', 'msg230': '6666666666666666', 'msg231': '6767676767676767', 'msg232': '6868686868686868', 'msg233': '6969696969696969', 'msg234': '6A6A6A6A6A6A6A6A', 'msg235': '6B6B6B6B6B6B6B6B', 'msg236': '6C6C6C6C6C6C6C6C', 'msg237': '6D6D6D6D6D6D6D6D', 'key171': '2B2B2B2B2B2B2B2B', 'key170': '2A2A2A2A2A2A2A2A', 'key173': '2D2D2D2D2D2D2D2D', 'key172': '2C2C2C2C2C2C2C2C', 'key175': '2F2F2F2F2F2F2F2F', 'key174': '2E2E2E2E2E2E2E2E', 'key177': '3131313131313131', 'key176': '3030303030303030', 'key179': '3333333333333333', 'key178': '3232323232323232', 'msg246': '7676767676767676', 'cip361': 'DFF918E93BDAD292', 'key359': 'E7E7E7E7E7E7E7E7', 'cip239': '115DBC965E6096C8', 'cip238': '9FAF2C96FE84919D', 'key252': '7C7C7C7C7C7C7C7C', 'key253': '7D7D7D7D7D7D7D7D', 'key254': '7E7E7E7E7E7E7E7E', 'key255': '7F7F7F7F7F7F7F7F', 'key256': '8080808080808080', 'key257': '8181818181818181', 'cip231': 'F8D1CD7367B21B5D', 'cip230': 'EBBF4810619C2C55', 'cip233': '5FDFFFC3AAAB0CB3', 'cip232': '9EE703142BF8D7E2', 'cip235': '1E2DC77E36A84693', 'cip234': '26C940AB13574231', 'cip237': 'A4C9A0D04D3280CD', 'cip236': '0F4FF4D9BC7E2244', 'msg304': 'B0B0B0B0B0B0B0B0', 'msg305': 'B1B1B1B1B1B1B1B1', 'msg306': 'B2B2B2B2B2B2B2B2', 'msg307': 'B3B3B3B3B3B3B3B3', 'msg300': 'ACACACACACACACAC', 'msg301': 'ADADADADADADADAD', 'msg302': 'AEAEAEAEAEAEAEAE', 'msg303': 'AFAFAFAFAFAFAFAF', 'msg308': 'B4B4B4B4B4B4B4B4', 'msg309': 'B5B5B5B5B5B5B5B5', 'key382': 'FEFEFEFEFEFEFEFE', 'key383': 'FFFFFFFFFFFFFFFF', 'key380': 'FCFCFCFCFCFCFCFC', 'key268': '8C8C8C8C8C8C8C8C', 'key384': '0001020304050607', 'cip367': '228AEA0D403E807A', 'key334': 'CECECECECECECECE', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip334': '9AA159D7309DA7A0', 'cip309': '62D473F539FA0D8B', 'cip308': '36F0D0B3675704D5', 'cip363': 'C88480835C1A444C', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'D2FD8867D50D2DFE', 'cip124': 'CC083F1E6D9E85F6', 'cip127': '166B40B44ABA4BD6', 'cip126': '06E7EA22CE92708F', 'cip121': 'E07C30D7E4E26E12', 'cip120': '2FBC291A570DB5C4', 'cip123': '5B711BC4CEEBF2EE', 'cip122': '0953E2258E8E90A1', 'cip129': '994D4DC157B96C52', 'cip128': '8CA64DE9C1B123A7', 'key363': 'EBEBEBEBEBEBEBEB', 'key364': 'ECECECECECECECEC', 'key323': 'C3C3C3C3C3C3C3C3', 'cip268': '720479B024C397EE', 'key365': 'EDEDEDEDEDEDEDED', 'msg159': '1F1F1F1F1F1F1F1F', 'msg158': '1E1E1E1E1E1E1E1E', 'key366': 'EEEEEEEEEEEEEEEE', 'msg151': '1717171717171717', 'msg150': '1616161616161616', 'msg153': '1919191919191919', 'msg152': '1818181818181818', 'msg155': '1B1B1B1B1B1B1B1B', 'msg154': '1A1A1A1A1A1A1A1A', 'msg157': '1D1D1D1D1D1D1D1D', 'msg156': '1C1C1C1C1C1C1C1C', 'cip248': '80D9230BDAEB67DC', 'key357': 'E5E5E5E5E5E5E5E5', 'cip249': '3440911019AD68D7', 'cip269': 'BEA27E3795063C89', 'cip301': '3C9A34CA4CB49EEB', 'key301': 'ADADADADADADADAD', 'cip58': 'A1AB2190545B91D7', 'cip59': '0875041E64C570F7', 'key207': '4F4F4F4F4F4F4F4F', 'cip52': 'DA99DBBC9A03F379', 'cip53': 'B7FC92F91D8E92E9', 'cip50': '1DE5279DAE3BED6F', 'cip51': 'E941A33F85501303', 'cip56': '9CC62DF43B6EED74', 'cip57': 'D863DBB5C59A91A0', 'cip54': 'AE8E5CAA3CA04E85', 'cip55': '8CA64DE9C1B123A7', 'cip4': '809F5F873C1FD761', 'cip5': 'C02FAFFEC989D1FC', 'cip6': '4615AA1D33E72F10', 'cip7': '8CA64DE9C1B123A7', 'cip0': '95A8D72813DAA94D', 'cip1': '0EEC1487DD8C26D5', 'cip2': '7AD16FFB79C45926', 'cip3': 'D3746294CA6A6CF3', 'key306': 'B2B2B2B2B2B2B2B2', 'cip8': '2055123350C00858', 'cip9': 'DF3B99D6577397C8', 'key358': 'E6E6E6E6E6E6E6E6', 'cip325': '4FB5D5536DA544F4', 'key329': 'C9C9C9C9C9C9C9C9', 'cip300': 'EEAAC6D17880BD56', 'key250': '7A7A7A7A7A7A7A7A', 'msg278': '9696969696969696', 'msg279': '9797979797979797', 'key251': '7B7B7B7B7B7B7B7B', 'msg274': '9292929292929292', 'msg275': '9393939393939393', 'msg276': '9494949494949494', 'msg277': '9595959595959595', 'msg270': '8E8E8E8E8E8E8E8E', 'msg271': '8F8F8F8F8F8F8F8F', 'msg272': '9090909090909090', 'msg273': '9191919191919191', 'msg359': 'E7E7E7E7E7E7E7E7', 'cip312': 'FABBF7C046FD273F', 'key324': 'C4C4C4C4C4C4C4C4', 'cip351': 'E7562A7F56FF4966', 'key79': '0000000000000000', 'key78': '0000000000000000', 'key325': 'C5C5C5C5C5C5C5C5', 'key75': '0000000000000000', 'key74': '0000000000000000', 'key77': '0000000000000000', 'key76': '0000000000000000', 'key71': '0000000000000000', 'key70': '0000000000000000', 'key73': '0000000000000000', 'key72': '0000000000000000', 'key258': '8282828282828282', 'key327': 'C7C7C7C7C7C7C7C7', 'key259': '8383838383838383', 'key320': 'C0C0C0C0C0C0C0C0', 'key346': 'DADADADADADADADA', 'key313': 'B9B9B9B9B9B9B9B9', 'key321': 'C1C1C1C1C1C1C1C1', 'cip360': 'BAD3EE68BDDB9607', 'key312': 'B8B8B8B8B8B8B8B8', 'key305': 'B1B1B1B1B1B1B1B1', 'key322': 'C2C2C2C2C2C2C2C2', 'key199': '4747474747474747', 'key198': '4646464646464646', 'key197': '4545454545454545', 'key196': '4444444444444444', 'key195': '4343434343434343', 'key194': '4242424242424242', 'key193': '4141414141414141', 'key192': '4040404040404040', 'key191': '3F3F3F3F3F3F3F3F', 'key190': '3E3E3E3E3E3E3E3E', 'msg295': 'A7A7A7A7A7A7A7A7', 'cip24': '5199C29A52C9F059', 'key317': 'BDBDBDBDBDBDBDBD', 'key316': 'BCBCBCBCBCBCBCBC', 'cip341': '2352BCC708ADC7E9', 'cip340': '47E9CB3E3154D673', 'cip343': 'EE5E9FD70CEF00E9', 'cip342': '8C0F3BA0C8601980', 'msg99': '0000000010000000', 'msg98': '0000000020000000', 'key314': 'BABABABABABABABA', 'cip346': 'C1AA16689EE1B482', 'msg95': '0000000100000000', 'msg94': '0000000200000000', 'msg97': '0000000040000000', 'msg96': '0000000080000000', 'msg91': '0000001000000000', 'msg90': '0000002000000000', 'msg93': '0000000400000000', 'msg92': '0000000800000000', 'key108': '0000000000000000', 'key109': '0000000000000000', 'key100': '0000000000000000', 'key101': '0000000000000000', 'key102': '0000000000000000', 'key103': '0000000000000000', 'key104': '0000000000000000', 'key105': '0000000000000000', 'key106': '0000000000000000', 'key107': '0000000000000000', 'cip169': '73F0C45F379FE67F', 'cip168': '11A16028F310FF16', 'cip242': '415D81C86AF9C376', 'cip243': '8DFB864FDB3C6811', 'cip244': '10B1C170E3398F91', 'cip245': 'CFEF7A1C0218DB1E', 'cip246': 'DBAC30A2A40B1B9C', 'key228': '6464646464646464', 'cip161': '88586E1D755B9B5A', 'cip160': '18A9D580A900B699', 'cip163': '2F30446C8312404A', 'cip162': '0F8ADFFB11DC2784', 'cip165': '3E55E997611E4B7D', 'cip164': '0BA03D9E6C196511', 'cip167': '2109425935406AB8', 'cip166': 'B2522FB5F158F0DF', 'msg199': '4747474747474747', 'msg198': '4646464646464646', 'msg195': '4343434343434343', 'msg194': '4242424242424242', 'msg197': '4545454545454545', 'msg196': '4444444444444444', 'msg191': '3F3F3F3F3F3F3F3F', 'key28': '0000000800000000', 'msg193': '4141414141414141', 'msg192': '4040404040404040', 'msg296': 'A8A8A8A8A8A8A8A8', 'msg297': 'A9A9A9A9A9A9A9A9', 'msg294': 'A6A6A6A6A6A6A6A6', 'key29': '0000000400000000', 'msg292': 'A4A4A4A4A4A4A4A4', 'msg293': 'A5A5A5A5A5A5A5A5', 'msg290': 'A2A2A2A2A2A2A2A2', 'msg291': 'A3A3A3A3A3A3A3A3', 'msg357': 'E5E5E5E5E5E5E5E5', 'msg356': 'E4E4E4E4E4E4E4E4', 'msg355': 'E3E3E3E3E3E3E3E3', 'msg354': 'E2E2E2E2E2E2E2E2', 'msg353': 'E1E1E1E1E1E1E1E1', 'msg352': 'E0E0E0E0E0E0E0E0', 'msg298': 'AAAAAAAAAAAAAAAA', 'msg299': 'ABABABABABABABAB', 'key214': '5656565656565656', 'key215': '5757575757575757', 'key216': '5858585858585858', 'key217': '5959595959595959', 'key210': '5252525252525252', 'key211': '5353535353535353', 'key212': '5454545454545454', 'key213': '5555555555555555', 'key218': '5A5A5A5A5A5A5A5A', 'key219': '5B5B5B5B5B5B5B5B', 'cip98': 'B160E4680F6C696F', 'cip99': 'FA0752B07D9C4AB8', 'cip96': 'E943D7568AEC0C5C', 'cip97': 'DF98C8276F54B04B', 'cip94': 'E428581186EC8F46', 'cip95': 'AEB5F5EDE22D1A36', 'cip92': 'D106FF0BED5255D7', 'cip93': 'E1652C6B138C64A5', 'cip90': 'F02B263B328E2B60', 'cip91': '9D64555A9A10B852', 'cip368': '2A2891F65BB8173C', 'key381': 'FDFDFDFDFDFDFDFD', 'cip282': '79BFA264BDA57373', 'msg120': '0000000000000080', 'msg121': '0000000000000040', 'msg122': '0000000000000020', 'msg123': '0000000000000010', 'msg124': '0000000000000008', 'msg125': '0000000000000004', 'msg126': '0000000000000002', 'msg127': '0000000000000001', 'msg128': '0000000000000000', 'msg129': '0101010101010101', 'key340': 'D4D4D4D4D4D4D4D4', 'cip283': 'C50E8FC289BBD876', 'msg351': 'DFDFDFDFDFDFDFDF', 'cip379': 'E0BA8F4488AAF97C', 'key341': 'D5D5D5D5D5D5D5D5', 'cip323': 'AE0FEEB0495932C8', 'key31': '0000000100000000', 'key30': '0000000200000000', 'key33': '0000000040000000', 'key32': '0000000080000000', 'key35': '0000000010000000', 'key34': '0000000020000000', 'key37': '0000000004000000', 'key36': '0000000008000000', 'key39': '0000000001000000', 'key38': '0000000002000000', 'cip29': '1AFA9A66A6DF92AE', 'cip28': '4F644C92E192DFED', 'cip240': 'AF531E9520994017', 'msg350': 'DEDEDEDEDEDEDEDE', 'key221': '5D5D5D5D5D5D5D5D', 'msg190': '3E3E3E3E3E3E3E3E', 'msg326': 'C6C6C6C6C6C6C6C6', 'msg266': '8A8A8A8A8A8A8A8A', 'cip241': 'B971ADE70E5C89EE', 'msg227': '6363636363636363', 'msg226': '6262626262626262', 'msg225': '6161616161616161', 'msg224': '6060606060606060', 'msg223': '5F5F5F5F5F5F5F5F', 'msg222': '5E5E5E5E5E5E5E5E', 'msg221': '5D5D5D5D5D5D5D5D', 'msg220': '5C5C5C5C5C5C5C5C', 'msg384': '0011223344556677', 'msg380': 'FCFCFCFCFCFCFCFC', 'cip299': 'ACE41A06BFA258EA', 'msg229': '6565656565656565', 'msg228': '6464646464646464', 'cip305': '24692773CB9F27FE', 'cip298': 'C4322BE19E9A5A17', 'cip304': '939618DF0AEFAAE7', 'cip356': '007B81F520E6D7DA', 'cip307': 'FCB7E4B7D702E2FB', 'cip357': '961AEB77BFC10B3C', 'cip306': '38703BA5E2315D1D', 'key148': '1414141414141414', 'key149': '1515151515151515', 'key144': '1010101010101010', 'key145': '1111111111111111', 'key146': '1212121212121212', 'key147': '1313131313131313', 'key140': '0C0C0C0C0C0C0C0C', 'key141': '0D0D0D0D0D0D0D0D', 'key142': '0E0E0E0E0E0E0E0E', 'key143': '0F0F0F0F0F0F0F0F', 'cip293': '06FC7FDE1C8389E7', 'cip303': 'F2D9D1BE74376C0C', 'msg69': '0400000000000000', 'cip302': '9527B0287B75F5A3', 'cip358': '8A8DD870C9B14AF2', 'cip359': '3CC02E14B6349B25', 'key249': '7979797979797979', 'key248': '7878787878787878', 'key247': '7777777777777777', 'key246': '7676767676767676', 'key245': '7575757575757575', 'key244': '7474747474747474', 'key243': '7373737373737373', 'key242': '7272727272727272', 'key241': '7171717171717171', 'key240': '7070707070707070', 'msg313': 'B9B9B9B9B9B9B9B9', 'msg312': 'B8B8B8B8B8B8B8B8', 'msg311': 'B7B7B7B7B7B7B7B7', 'msg310': 'B6B6B6B6B6B6B6B6', 'msg317': 'BDBDBDBDBDBDBDBD', 'msg316': 'BCBCBCBCBCBCBCBC', 'msg315': 'BBBBBBBBBBBBBBBB', 'key204': '4C4C4C4C4C4C4C4C', 'msg319': 'BFBFBFBFBFBFBFBF', 'cip294': '7A3C1F3BD60CB3D8', 'cip322': '62F44B247CF1348C', 'key379': 'FBFBFBFBFBFBFBFB', 'key307': 'B3B3B3B3B3B3B3B3', 'cip338': '82F85885D542AF58', 'cip339': '22D334D6493B3CB6', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'key319': 'BFBFBFBFBFBFBFBF', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'cip110': 'CAFFC6AC4542DE31', 'cip111': '8DD45A2DDF90796C', 'cip112': '1029D55E880EC2D0', 'cip113': '5D86CB23639DBEA9', 'cip114': '1D1CA853AE7C0C5F', 'cip115': 'CE332329248F3228', 'cip116': '8405D1ABE24FB942', 'cip117': 'E643D78090CA4207', 'cip118': '48221B9937748A23', 'cip119': 'DD7C0BBD61FAFD54', 'key289': 'A1A1A1A1A1A1A1A1', 'msg164': '2424242424242424', 'msg165': '2525252525252525', 'msg166': '2626262626262626', 'msg167': '2727272727272727', 'msg160': '2020202020202020', 'msg161': '2121212121212121', 'msg162': '2222222222222222', 'msg163': '2323232323232323', 'key355': 'E3E3E3E3E3E3E3E3', 'msg168': '2828282828282828', 'msg169': '2929292929292929', 'key348': 'DCDCDCDCDCDCDCDC', 'cip311': '9C4EA352599731ED', 'msg366': 'EEEEEEEEEEEEEEEE', 'msg367': 'EFEFEFEFEFEFEFEF', 'msg364': 'ECECECECECECECEC', 'key136': '0808080808080808', 'msg362': 'EAEAEAEAEAEAEAEA', 'msg363': 'EBEBEBEBEBEBEBEB', 'msg360': 'E8E8E8E8E8E8E8E8', 'msg361': 'E9E9E9E9E9E9E9E9', 'msg341': 'D5D5D5D5D5D5D5D5', 'msg368': 'F0F0F0F0F0F0F0F0', 'msg369': 'F1F1F1F1F1F1F1F1', 'cip204': '03481B4828FD1D04', 'cip205': 'C78FC45A1DCEA2E2', 'cip206': 'DB96D88C3460D801', 'cip207': '6C69E720F5105518', 'cip200': '63B15CADA668CE12', 'cip201': 'EACC0C1264171071', 'cip202': '9D2B8C0AC605F274', 'cip203': 'C90F2F4C98A8FB2A', 'cip208': '0D262E418BC893F3', 'cip209': '6AD84FD7848A0A5C', 'key376': 'F8F8F8F8F8F8F8F8', 'cip67': '4BD388FF6CD81D4F', 'cip66': '2E8653104F3834EA', 'cip65': 'DD7F121CA5015619', 'cip64': '95F8A5E5DD31D900', 'cip63': '8CA64DE9C1B123A7', 'cip62': '869EFD7F9F265A09', 'cip61': 'FCDB3291DE21F0C0', 'cip60': '5A594528BEBEF1CC', 'msg342': 'D6D6D6D6D6D6D6D6', 'cip277': 'D936BF54ECA8BDCE', 'cip69': '55579380D77138EF', 'cip68': '20B9E767B2FB1456', 'cip276': 'E1D23881C957B96C', 'cip365': '6932D887B2EA9C1A', 'key328': 'C8C8C8C8C8C8C8C8', 'key351': 'DFDFDFDFDFDFDFDF', 'cip364': 'D6EE30A16B2CC01E', 'key375': 'F7F7F7F7F7F7F7F7', 'cip270': '468E5218F1A37611', 'key353': 'E1E1E1E1E1E1E1E1', 'key352': 'E0E0E0E0E0E0E0E0', 'cip328': 'AFEC35B09D36315F', 'cip315': 'F91DCAD912332F3B', 'cip373': 'F5D779FCFBB28BF3', 'msg262': '8686868686868686', 'cip321': '169F7629C970C1E5', 'key374': 'F6F6F6F6F6F6F6F6', 'msg269': '8D8D8D8D8D8D8D8D', 'msg268': '8C8C8C8C8C8C8C8C', 'msg263': '8787878787878787', 'cip176': 'F47BB46273B15EB5', 'msg261': '8585858585858585', 'msg260': '8484848484848484', 'msg267': '8B8B8B8B8B8B8B8B', 'key159': '1F1F1F1F1F1F1F1F', 'msg265': '8989898989898989', 'msg264': '8888888888888888', 'key158': '1E1E1E1E1E1E1E1E', 'cip378': 'C66F54067298D4E9', 'cip374': '0FEC6BBF9B859184', 'key68': '0000000000000000', 'key69': '0000000000000000', 'key66': '0000000000000000', 'key67': '0000000000000000', 'key64': '0000000000000000', 'key65': '0000000000000000', 'key62': '0000000000000002', 'key63': '0000000000000001', 'key60': '0000000000000008', 'key61': '0000000000000004', 'key281': '9999999999999999', 'key372': 'F4F4F4F4F4F4F4F4', 'key300': 'ACACACACACACACAC', 'key138': '0A0A0A0A0A0A0A0A', 'cip384': '3EF0A891CF8ED990', 'key335': 'CFCFCFCFCFCFCFCF', 'cip350': '77A791E28AA464A5', 'key267': '8B8B8B8B8B8B8B8B', 'key266': '8A8A8A8A8A8A8A8A', 'key371': 'F3F3F3F3F3F3F3F3', 'key155': '1B1B1B1B1B1B1B1B', 'msg218': '5A5A5A5A5A5A5A5A', 'msg219': '5B5B5B5B5B5B5B5B', 'msg216': '5858585858585858', 'msg217': '5959595959595959', 'msg214': '5656565656565656', 'key154': '1A1A1A1A1A1A1A1A', 'msg212': '5454545454545454', 'msg213': '5555555555555555', 'msg210': '5252525252525252', 'msg211': '5353535353535353', 'key117': '0000000000000000', 'key116': '0000000000000000', 'key115': '0000000000000000', 'key114': '0000000000000000', 'key113': '0000000000000000', 'key112': '0000000000000000', 'msg88': '0000008000000000', 'key110': '0000000000000000', 'msg86': '0000020000000000', 'msg87': '0000010000000000', 'msg84': '0000080000000000', 'msg85': '0000040000000000', 'msg82': '0000200000000000', 'msg83': '0000100000000000', 'msg80': '0000800000000000', 'msg81': '0000400000000000', 'key302': 'AEAEAEAEAEAEAEAE', 'key370': 'F2F2F2F2F2F2F2F2', 'key360': 'E8E8E8E8E8E8E8E8', 'cip372': '9CA66E96BD08BC70', 'key303': 'AFAFAFAFAFAFAFAF', 'cip320': 'A3B357885B1E16D2', 'cip247': '89D3BF37052162E9', 'key276': '9494949494949494', 'key277': '9595959595959595', 'key274': '9292929292929292', 'key275': '9393939393939393', 'key272': '9090909090909090', 'key273': '9191919191919191', 'cip259': '161BFABD4224C162', 'cip258': '752666EB4CAB46EE', 'cip257': '907A46722ED34EC4', 'cip256': 'EFECF25C3C5DC6DB', 'cip255': '10130DA3C3A23924', 'cip254': '6F85B98DD12CB13B', 'cip253': '8AD99914B354B911', 'cip252': 'E9E40542BDDB3E9D', 'cip251': 'DEA0B796624BB5BA', 'cip250': '9626FE57596E199E', 'msg340': 'D4D4D4D4D4D4D4D4', 'msg343': 'D7D7D7D7D7D7D7D7', 'key304': 'B0B0B0B0B0B0B0B0', 'msg344': 'D8D8D8D8D8D8D8D8', 'cip225': '29932350C098DB5D', 'msg345': 'D9D9D9D9D9D9D9D9', 'msg285': '9D9D9D9D9D9D9D9D', 'cip23': '8CA64DE9C1B123A7', 'msg287': '9F9F9F9F9F9F9F9F', 'msg286': '9E9E9E9E9E9E9E9E', 'msg281': '9999999999999999', 'msg280': '9898989898989898', 'msg283': '9B9B9B9B9B9B9B9B', 'cip22': 'C71516C29C75D170', 'msg322': 'C2C2C2C2C2C2C2C2', 'msg323': 'C3C3C3C3C3C3C3C3', 'msg320': 'C0C0C0C0C0C0C0C0', 'msg321': 'C1C1C1C1C1C1C1C1', 'msg289': 'A1A1A1A1A1A1A1A1', 'cip21': '25610288924511C2', 'msg324': 'C4C4C4C4C4C4C4C4', 'msg325': 'C5C5C5C5C5C5C5C5', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'cip27': 'A81FBD448F9E522F', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'cip26': 'EE371483714C02EA', 'key9': '0040000000000000', 'key8': '0080000000000000', 'cip25': 'C22F0A294A71F29F', 'key3': '1000000000000000', 'key2': '2000000000000000', 'key1': '4000000000000000', 'key0': '8000000000000000', 'key7': '0100000000000000', 'key6': '0200000000000000', 'key5': '0400000000000000', 'key4': '0800000000000000', 'key311': 'B7B7B7B7B7B7B7B7', 'msg376': 'F8F8F8F8F8F8F8F8', 'msg139': '0B0B0B0B0B0B0B0B', 'msg138': '0A0A0A0A0A0A0A0A', 'msg137': '0909090909090909', 'msg136': '0808080808080808', 'msg135': '0707070707070707', 'msg134': '0606060606060606', 'msg133': '0505050505050505', 'msg132': '0404040404040404', 'msg131': '0303030303030303', 'msg130': '0202020202020202', 'cip154': '69E51488403EF4C3', 'cip155': 'FF847E0ADF192825', 'cip156': '521B7FB3B41BB791', 'cip157': '26059A6A0F3F6B35', 'cip150': '2006E716C4252D6D', 'cip151': '452C1197422469F8', 'cip152': 'C33FD1EB49CB64DA', 'cip153': '7572278F364EB50D', 'cip158': 'F24A8D2231C77538', 'cip159': '4FD96EC0D3304EF6', 'cip348': 'D0CFBB937CEDBFB5', 'key22': '0000020000000000', 'key23': '0000010000000000', 'key20': '0000080000000000', 'key21': '0000040000000000', 'cip38': '5570530829705592', 'cip39': '8CA64DE9C1B123A7', 'key24': '0000008000000000', 'key25': '0000004000000000', 'cip34': 'B7265F7F447AC6F3', 'cip35': '9DB73B3C0D163F54', 'cip36': '8181B65BABF4A975', 'cip37': '93C9B64042EAA240', 'cip30': 'B3C1CC715CB879D8', 'cip31': '8CA64DE9C1B123A7', 'cip32': '19D032E64AB0BD8B', 'cip33': '3CFAA7A7DC8720DC', 'cip218': 'F9038021E37C7618', 'cip344': 'DEF6BDA6CABF9547', 'key361': 'E9E9E9E9E9E9E9E9', 'msg252': '7C7C7C7C7C7C7C7C', 'msg253': '7D7D7D7D7D7D7D7D', 'msg250': '7A7A7A7A7A7A7A7A', 'msg251': '7B7B7B7B7B7B7B7B', 'msg256': '8080808080808080', 'msg257': '8181818181818181', 'msg254': '7E7E7E7E7E7E7E7E', 'msg255': '7F7F7F7F7F7F7F7F', 'msg258': '8282828282828282', 'msg259': '8383838383838383', 'msg334': 'CECECECECECECECE', 'cip376': '39ADBDDB7363090D', 'key362': 'EAEAEAEAEAEAEAEA', 'key294': 'A6A6A6A6A6A6A6A6', 'key97': '0000000000000000', 'key96': '0000000000000000', 'key95': '0000000000000000', 'key94': '0000000000000000', 'key93': '0000000000000000', 'key92': '0000000000000000', 'key91': '0000000000000000', 'key90': '0000000000000000', 'key153': '1919191919191919', 'key152': '1818181818181818', 'key151': '1717171717171717', 'key150': '1616161616161616', 'key157': '1D1D1D1D1D1D1D1D', 'key156': '1C1C1C1C1C1C1C1C', 'key99': '0000000000000000', 'key98': '0000000000000000', 'cip327': '76BF084C1535A6C6', 'key238': '6E6E6E6E6E6E6E6E', 'key239': '6F6F6F6F6F6F6F6F', 'cip326': '1DD4E65AAF7988B4', 'key232': '6868686868686868', 'key233': '6969696969696969', 'key230': '6666666666666666', 'key231': '6767676767676767', 'key236': '6C6C6C6C6C6C6C6C', 'key237': '6D6D6D6D6D6D6D6D', 'key234': '6A6A6A6A6A6A6A6A', 'key235': '6B6B6B6B6B6B6B6B', 'cip316': '46E7EF47323A701D', 'cip324': '72DAF2A7C9EA6803', 'cip317': '8DB18CCD9692F758', 'cip288': '10EDB8977B348B35', 'cip314': '10ADB6E2AB972BBE', 'cip289': '6446C5769D8409A0', 'msg77': '0004000000000000', 'msg76': '0008000000000000', 'msg75': '0010000000000000', 'msg74': '0020000000000000', 'msg73': '0040000000000000', 'msg72': '0080000000000000', 'msg71': '0100000000000000', 'msg70': '0200000000000000', 'cip284': 'A399D3D63E169FA9', 'cip285': '4B8919B667BD53AB', 'cip286': 'D66CDCAF3F6724A2', 'cip287': 'E40E81FF3F618340', 'cip280': '072E328C984DE4A2', 'cip281': '1440B7EF9E63D3AA', 'msg79': '0001000000000000', 'msg78': '0002000000000000', 'cip42': '7A9BE42F2009A892', 'cip375': 'EF88D2BF052DBDA8', 'cip310': '1533F3ED9BE8EF8E', 'key128': '0000000000000000', 'key129': '0101010101010101', 'key126': '0000000000000000', 'key127': '0000000000000000', 'key124': '0000000000000000', 'key125': '0000000000000000', 'key122': '0000000000000000', 'key123': '0000000000000000', 'key120': '0000000000000000', 'key121': '0000000000000000', 'cip266': '301085E3FDE724E1', 'cip267': 'EF4E3E8F1CC6706E', 'cip264': '762C40C8FADE9D16', 'cip265': '2453CF5D5BF4E463', 'cip262': 'CBBF6EEFE6529728', 'cip263': '7F26DCF425149823', 'cip109': 'EA51D3975595B86B', 'cip108': '8B54536F2F3E64A8', 'cip107': '866ECEDD8072BB0E', 'cip106': '79E90DBC98F92CCA', 'cip105': 'AB6A20C0620D1C6F', 'cip104': '25EB5FC3F8CF0621', 'cip103': '4D49DB1532919C9F', 'cip102': '814EEB3B91D90726', 'cip101': '5E0905517BB59BCF', 'cip100': 'CA3A2B036DBC8502', 'msg173': '2D2D2D2D2D2D2D2D', 'msg172': '2C2C2C2C2C2C2C2C', 'msg171': '2B2B2B2B2B2B2B2B', 'msg170': '2A2A2A2A2A2A2A2A', 'msg177': '3131313131313131', 'msg176': '3030303030303030', 'msg175': '2F2F2F2F2F2F2F2F', 'msg174': '2E2E2E2E2E2E2E2E', 'msg179': '3333333333333333', 'msg178': '3232323232323232', 'msg375': 'F7F7F7F7F7F7F7F7', 'msg374': 'F6F6F6F6F6F6F6F6', 'msg377': 'F9F9F9F9F9F9F9F9', 'msg215': '5757575757575757', 'msg371': 'F3F3F3F3F3F3F3F3', 'msg370': 'F2F2F2F2F2F2F2F2', 'msg373': 'F5F5F5F5F5F5F5F5', 'msg372': 'F4F4F4F4F4F4F4F4', 'msg327': 'C7C7C7C7C7C7C7C7', 'key349': 'DDDDDDDDDDDDDDDD', 'msg379': 'FBFBFBFBFBFBFBFB', 'msg378': 'FAFAFAFAFAFAFAFA', 'cip198': '48019C59E39B90C5', 'cip199': '0544083FB902D8C0', 'cip211': '1155392E877F42A9', 'cip210': 'C365CB35B34B6114', 'cip217': '85C3E0C429F34C27', 'cip216': '1BEA27FFB72457B7', 'cip215': 'D90772CF3F047CFD', 'cip214': '2B1FF5610A19270C', 'cip190': 'E96089D6368F3E1A', 'cip191': '5C4CA877A4E1E92D', 'cip192': '6D55DDBC8DEA95FF', 'cip193': '19DF84AC95551003', 'cip194': '724E7332696D08A7', 'cip195': 'B91810B8CDC58FE2', 'cip196': '06E23526EDCCD0C4', 'cip197': 'EF52491D5468D441', 'cip70': '6CC5DEFAAF04512F', 'cip71': '0D9F279BA5D87260', 'cip72': 'D9031B0271BD5A0A', 'cip73': '424250B37C3DD951', 'cip74': 'B8061B7ECD9A21E5', 'cip75': 'F15D0F286B65BD28', 'cip76': 'ADD0CC8D6E5DEBA1', 'cip77': 'E6D5F82752AD63D1', 'cip78': 'ECBFE3BD3F591A5E', 'cip79': 'F356834379D165CD', 'key368': 'F0F0F0F0F0F0F0F0', 'msg381': 'FDFDFDFDFDFDFDFD', 'key292': 'A4A4A4A4A4A4A4A4', 'msg382': 'FEFEFEFEFEFEFEFE', 'key298': 'AAAAAAAAAAAAAAAA', 'key333': 'CDCDCDCDCDCDCDCD', 'key299': 'ABABABABABABABAB', 'msg106': '0000000000200000', 'msg107': '0000000000100000', 'msg104': '0000000000800000', 'msg105': '0000000000400000', 'msg102': '0000000002000000', 'key111': '0000000000000000', 'msg100': '0000000008000000', 'msg101': '0000000004000000', 'msg89': '0000004000000000', 'key369': 'F1F1F1F1F1F1F1F1', 'msg108': '0000000000080000', 'msg109': '0000000000040000', 'key293': 'A5A5A5A5A5A5A5A5', 'key295': 'A7A7A7A7A7A7A7A7', 'key332': 'CCCCCCCCCCCCCCCC', 'key296': 'A8A8A8A8A8A8A8A8', 'msg247': '7777777777777777', 'key297': 'A9A9A9A9A9A9A9A9', 'key347': 'DBDBDBDBDBDBDBDB', 'key290': 'A2A2A2A2A2A2A2A2', 'cip383': '7359B2163E4EDC58', 'key344': 'D8D8D8D8D8D8D8D8', 'key291': 'A3A3A3A3A3A3A3A3', 'key345': 'D9D9D9D9D9D9D9D9', 'key119': '0000000000000000', 'msg314': 'BABABABABABABABA', 'key342': 'D6D6D6D6D6D6D6D6', 'key118': '0000000000000000', 'cip332': 'FBCD12C790D21CD7', 'key343': 'D7D7D7D7D7D7D7D7', 'key59': '0000000000000010', 'key58': '0000000000000020', 'cip260': '215F48699DB44A45', 'key53': '0000000000000400', 'key52': '0000000000000800', 'key51': '0000000000001000', 'key50': '0000000000002000', 'key57': '0000000000000040', 'key56': '0000000000000080', 'key55': '0000000000000100', 'key54': '0000000000000200', 'cip370': '1C0A9280EECF5D48', 'cip369': '5D1B8FAF7839494B', 'cip20': '882BFF0AA01A0B87', 'key354': 'E2E2E2E2E2E2E2E2', 'key356': 'E4E4E4E4E4E4E4E4', 'msg103': '0000000001000000', 'msg209': '5151515151515151', 'msg208': '5050505050505050', 'key269': '8D8D8D8D8D8D8D8D', 'msg205': '4D4D4D4D4D4D4D4D', 'msg204': '4C4C4C4C4C4C4C4C', 'msg207': '4F4F4F4F4F4F4F4F', 'msg206': '4E4E4E4E4E4E4E4E', 'msg201': '4949494949494949', 'msg200': '4848484848484848', 'msg203': '4B4B4B4B4B4B4B4B', 'msg202': '4A4A4A4A4A4A4A4A', 'key162': '2222222222222222', 'key163': '2323232323232323', 'key160': '2020202020202020', 'key161': '2121212121212121', 'key166': '2626262626262626', 'key167': '2727272727272727', 'key164': '2424242424242424', 'key165': '2525252525252525', 'key283': '9B9B9B9B9B9B9B9B', 'key282': '9A9A9A9A9A9A9A9A', 'key168': '2828282828282828', 'key169': '2929292929292929', 'key287': '9F9F9F9F9F9F9F9F', 'key286': '9E9E9E9E9E9E9E9E', 'key285': '9D9D9D9D9D9D9D9D', 'key284': '9C9C9C9C9C9C9C9C', 'cip377': 'C0AEAF445F7E2A7A', 'cip279': '6118FCEBD407281D', 'cip330': '4DA91CB4124B67FE', 'cip366': '0BFC865461F13ACC', 'msg245': '7575757575757575', 'key264': '8888888888888888', 'cip228': '3AF1703D76442789', 'cip229': '86405D9B425A8C8C', 'key261': '8585858585858585', 'key260': '8484848484848484', 'key263': '8787878787878787', 'key262': '8686868686868686', 'cip222': '9BB93A89627BF65F', 'cip223': 'EF12476884CB74CA', 'cip220': '4927ACC8CE45ECE7', 'cip221': 'E812EE6E3572985C', 'cip226': 'B476E6499842AC54', 'cip227': '5C662C29C1E96056', 'cip224': '1BF17E00C09E7CBF', 'msg147': '1313131313131313', 'msg318': 'BEBEBEBEBEBEBEBE', 'cip278': 'A020003C5554F34C', 'cip331': '2DABFEB346794C3D', 'msg244': '7474747474747474', 'msg339': 'D3D3D3D3D3D3D3D3', 'msg338': 'D2D2D2D2D2D2D2D2', 'key310': 'B6B6B6B6B6B6B6B6', 'key270': '8E8E8E8E8E8E8E8E', 'msg331': 'CBCBCBCBCBCBCBCB', 'msg330': 'CACACACACACACACA', 'msg333': 'CDCDCDCDCDCDCDCD', 'key271': '8F8F8F8F8F8F8F8F', 'msg335': 'CFCFCFCFCFCFCFCF', 'msg328': 'C8C8C8C8C8C8C8C8', 'msg337': 'D1D1D1D1D1D1D1D1', 'msg336': 'D0D0D0D0D0D0D0D0', 'key377': 'F9F9F9F9F9F9F9F9', 'cip140': '934316AE443CF08B', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': 'E6207B536AAAEFFC', 'cip319': '92AA224372156A00', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'msg20': '0000000000000000', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'cip136': '10772D40FAD24257', 'cip137': 'F0139440647A6E7B', 'cip134': '3F5150BBA081D585', 'cip135': 'C65242248C9CF6F2', 'cip132': '1F4570BB77550683', 'cip133': '3990ABF98D672B16', 'cip130': 'E127C2B61D98E6E2', 'cip131': '984C91D78A269CE3', 'key373': 'F5F5F5F5F5F5F5F5', 'key229': '6565656565656565', 'cip352': 'B026913F2CCFB109', 'cip138': '0A288603044D740C', 'cip139': '6359916942F7438F', 'cip371': '6CBCE951BBC30F74', 'key278': '9696969696969696', 'cip380': '67B36E2875D9631C', 'key279': '9797979797979797', 'key44': '0000000000080000', 'msg148': '1414141414141414', 'msg149': '1515151515151515', 'key45': '0000000000040000', 'msg142': '0E0E0E0E0E0E0E0E', 'msg143': '0F0F0F0F0F0F0F0F', 'msg140': '0C0C0C0C0C0C0C0C', 'msg141': '0D0D0D0D0D0D0D0D', 'msg146': '1212121212121212', 'key46': '0000000000020000', 'msg144': '1010101010101010', 'msg145': '1111111111111111', 'cip143': 'D5D76E09A447E8C3', 'cip142': 'A2E4705087C6B6B4', 'cip141': 'E3F56D7F1130A2B7', 'key47': '0000000000010000', 'cip147': '2911CF5E94D33FE1', 'cip146': '96CD27784D1563E5', 'cip145': 'F40379AB9E0EC533', 'cip144': 'DD7515F2BFC17F85', 'key40': '0000000000800000', 'cip149': '701AA63832905A92', 'cip148': '377B7F7CA3E5BBB3', 'key220': '5C5C5C5C5C5C5C5C', 'key203': '4B4B4B4B4B4B4B4B', 'msg346': 'DADADADADADADADA', 'key41': '0000000000400000'}
dict_tdes2 = {'msg418': 'E2E2E2E2E2E2E2E2', 'cip10': '7B1C09D39C205B7B', 'key339': '93939393939393939393939393939393', 'cip410': 'C1AA16689EE1B482', 'msg415': 'DFDFDFDFDFDFDFDF', 'msg416': 'E0E0E0E0E0E0E0E0', 'cip11': '7C940466050ADBAE', 'msg410': 'DADADADADADADADA', 'msg411': 'DBDBDBDBDBDBDBDB', 'msg412': 'DCDCDCDCDCDCDCDC', 'msg284': '5C5C5C5C5C5C5C5C', 'cip49': 'EE8DC918A74545F1', 'cip48': 'F3B2D1D19B852861', 'msg448': '0011223344556677', 'cip382': 'E6207B536AAAEFFC', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'cip213': '701AA63832905A92', 'key338': '92929292929292929292929292929292', 'cip212': '377B7F7CA3E5BBB3', 'key331': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key202': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg414': 'DEDEDEDEDEDEDEDE', 'key330': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key417': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key337': '91919191919191919191919191919191', 'key336': '90909090909090909090909090909090', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg249': '3939393939393939', 'msg248': '3838383838383838', 'cip401': 'CF3E4F3E026E2C8E', 'key315': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'cip416': 'B026913F2CCFB109', 'msg417': 'E1E1E1E1E1E1E1E1', 'cip355': 'B6D8533731BA1318', 'msg329': '8989898989898989', 'msg383': 'BFBFBFBFBFBFBFBF', 'cip292': '3AF1703D76442789', 'msg413': 'DDDDDDDDDDDDDDDD', 'key418': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'cip219': 'FF847E0ADF192825', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'msg332': '8C8C8C8C8C8C8C8C', 'msg282': '5A5A5A5A5A5A5A5A', 'key288': '60606060606060606060606060606060', 'key309': '75757575757575757575757575757575', 'key350': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key409': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'cip354': '17ED1191CA8D67A3', 'key180': '00000000000000000000000000000000', 'key181': '00000000000000000000000000000000', 'key182': '00000000000000000000000000000000', 'key183': '00000000000000000000000000000000', 'key184': '00000000000000000000000000000000', 'key185': '00000000000000000000000000000000', 'key186': '00000000000000000000000000000000', 'key187': '00000000000000000000000000000000', 'key188': '00000000000000000000000000000000', 'key189': '00000000000000000000000000000000', 'key223': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key222': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key225': '21212121212121212121212121212121', 'key224': '20202020202020202020202020202020', 'key227': '23232323232323232323232323232323', 'key226': '22222222222222222222222222222222', 'cip41': 'D1CF3B57F6294D0E', 'cip40': 'E21113D2C6870FBE', 'key440': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'cip43': '198774D2FC7A641B', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '0000000000000000', 'msg65': '0000000000000000', 'msg66': '0000000000000000', 'msg67': '0000000000000000', 'msg68': '0000000000000000', 'cip45': 'A854715C1EE8B311', 'cip291': '5C662C29C1E96056', 'cip290': 'B476E6499842AC54', 'cip297': '5FDFFFC3AAAB0CB3', 'key201': '09090909090909090909090909090909', 'cip295': 'F8D1CD7367B21B5D', 'cip44': 'F3AC68FDC060AE6E', 'msg403': 'D3D3D3D3D3D3D3D3', 'key200': '08080808080808080808080808080808', 'key139': '00000000000000000000000000000000', 'cip47': '8CA64DE9C1B123A7', 'key135': '00000000000000000000000000000000', 'key134': '00000000000000000000000000000000', 'key137': '00000000000000000000000000000000', 'cip46': 'D140934E0D5171DB', 'key131': '00000000000000000000000000000000', 'key130': '00000000000000000000000000000000', 'key133': '00000000000000000000000000000000', 'key132': '00000000000000000000000000000000', 'cip275': '1155392E877F42A9', 'cip274': 'C365CB35B34B6114', 'cip178': '1D1CA853AE7C0C5F', 'cip179': 'CE332329248F3228', 'cip271': '6C69E720F5105518', 'key205': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'cip273': '6AD84FD7848A0A5C', 'cip272': '0D262E418BC893F3', 'cip172': '8B54536F2F3E64A8', 'cip173': 'EA51D3975595B86B', 'cip170': '79E90DBC98F92CCA', 'cip171': '866ECEDD8072BB0E', 'key26': '00000020000000000000000000000000', 'cip177': '5D86CB23639DBEA9', 'cip174': 'CAFFC6AC4542DE31', 'cip175': '8DD45A2DDF90796C', 'cip296': '9EE703142BF8D7E2', 'key280': '58585858585858585858585858585858', 'key392': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg188': '0000000000000008', 'msg189': '0000000000000004', 'msg186': '0000000000000020', 'msg187': '0000000000000010', 'msg184': '0000000000000080', 'msg185': '0000000000000040', 'msg182': '0000000000000200', 'msg183': '0000000000000100', 'msg180': '0000000000000800', 'msg181': '0000000000000400', 'cip187': '5B711BC4CEEBF2EE', 'cip186': '0953E2258E8E90A1', 'cip185': 'E07C30D7E4E26E12', 'cip184': '2FBC291A570DB5C4', 'cip183': 'DD7C0BBD61FAFD54', 'cip182': '48221B9937748A23', 'cip181': 'E643D78090CA4207', 'cip180': '8405D1ABE24FB942', 'msg348': '9C9C9C9C9C9C9C9C', 'msg349': '9D9D9D9D9D9D9D9D', 'key27': '00000010000000000000000000000000', 'cip189': 'D2FD8867D50D2DFE', 'cip188': 'CC083F1E6D9E85F6', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'key378': 'BABABABABABABABABABABABABABABABA', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip402': '82F85885D542AF58', 'msg444': 'FCFCFCFCFCFCFCFC', 'cip89': 'E74CA11808ED17A3', 'cip88': '8CCFCD2418E85750', 'cip85': '78C8CBCAC3B7FD35', 'cip84': '482863934D17804B', 'cip87': '8CA64DE9C1B123A7', 'cip86': '7B8B051E6C8AA8B6', 'cip81': 'D26D9656F91A1EE2', 'cip80': 'D47ADF8B94CACA7A', 'cip83': 'D19BA61DD59CE9A1', 'cip82': 'EE31B8E767C9B337', 'key318': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg358': 'A6A6A6A6A6A6A6A6', 'cip403': '22D334D6493B3CB6', 'msg115': '0000000000000000', 'msg114': '0000000000000000', 'msg117': '0000000000000000', 'msg116': '0000000000000000', 'msg111': '0000000000000000', 'msg110': '0000000000000000', 'msg113': '0000000000000000', 'msg112': '0000000000000000', 'msg119': '0000000000000000', 'msg118': '0000000000000000', 'cip381': '8DB18CCD9692F758', 'msg399': 'CFCFCFCFCFCFCFCF', 'cip405': '2352BCC708ADC7E9', 'key209': '11111111111111111111111111111111', 'key308': '74747474747474747474747474747474', 'msg447': 'FFFFFFFFFFFFFFFF', 'msg446': 'FEFEFEFEFEFEFEFE', 'msg445': 'FDFDFDFDFDFDFDFD', 'msg431': 'EFEFEFEFEFEFEFEF', 'msg443': 'FBFBFBFBFBFBFBFB', 'msg442': 'FAFAFAFAFAFAFAFA', 'msg441': 'F9F9F9F9F9F9F9F9', 'msg440': 'F8F8F8F8F8F8F8F8', 'cip261': 'EF52491D5468D441', 'key367': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'cip16': 'A286DE6C7ABCE306', 'cip17': 'A19DB1122136903C', 'cip14': '1885BEE3774FF50B', 'cip15': '8CA64DE9C1B123A7', 'cip12': '7B6456C45945CCA3', 'cip13': '076B2C8A7ADDFE68', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'cip345': '1440B7EF9E63D3AA', 'key208': '10101010101010101010101010101010', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip18': 'A77F2F3085DC2D16', 'cip19': 'B39C1E6C3C65E45A', 'cip333': 'BEA27E3795063C89', 'cip347': 'C50E8FC289BBD876', 'msg428': 'ECECECECECECECEC', 'cip329': '2453CF5D5BF4E463', 'cip427': 'C88480835C1A444C', 'msg347': '9B9B9B9B9B9B9B9B', 'cip335': '50ACE16ADF66BFE8', 'cip349': '4B8919B667BD53AB', 'key414': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip336': 'EEA24369A19F6937', 'cip353': '6446C5769D8409A0', 'msg288': '6060606060606060', 'cip337': '6050D369017B6E62', 'cip313': '3440911019AD68D7', 'cip408': 'DEF6BDA6CABF9547', 'msg241': '3131313131313131', 'key265': '49494949494949494949494949494949', 'msg365': 'ADADADADADADADAD', 'key416': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key326': '86868686868686868686868686868686', 'msg240': '3030303030303030', 'msg243': '3333333333333333', 'cip362': 'C4322BE19E9A5A17', 'msg238': '2E2E2E2E2E2E2E2E', 'msg239': '2F2F2F2F2F2F2F2F', 'msg242': '3232323232323232', 'key206': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'cip407': 'EE5E9FD70CEF00E9', 'msg230': '2626262626262626', 'msg231': '2727272727272727', 'msg232': '2828282828282828', 'msg233': '2929292929292929', 'msg234': '2A2A2A2A2A2A2A2A', 'msg235': '2B2B2B2B2B2B2B2B', 'msg236': '2C2C2C2C2C2C2C2C', 'msg237': '2D2D2D2D2D2D2D2D', 'key171': '00000000000000000000000000000000', 'key170': '00000000000000000000000000000000', 'key173': '00000000000000000000000000000000', 'key172': '00000000000000000000000000000000', 'key175': '00000000000000000000000000000000', 'key174': '00000000000000000000000000000000', 'key177': '00000000000000000000000000000000', 'key176': '00000000000000000000000000000000', 'key179': '00000000000000000000000000000000', 'key178': '00000000000000000000000000000000', 'msg246': '3636363636363636', 'cip361': 'D4E00A9EF5E6D8F3', 'cip396': 'FBCD12C790D21CD7', 'key438': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key359': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'cip404': '47E9CB3E3154D673', 'key439': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'cip239': 'C4427B31AC61973B', 'cip238': '30C1B0C1FD91D371', 'key252': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key253': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key254': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key255': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key256': '40404040404040404040404040404040', 'key257': '41414141414141414141414141414141', 'cip231': '2109425935406AB8', 'cip230': 'B2522FB5F158F0DF', 'cip233': '73F0C45F379FE67F', 'cip232': '11A16028F310FF16', 'cip235': 'B81634C1CEAB298C', 'cip234': 'DCAD4338F7523816', 'cip237': '7D07A77A2ABD50A7', 'cip236': 'DD2CCB29B6C4C349', 'msg304': '7070707070707070', 'msg305': '7171717171717171', 'msg306': '7272727272727272', 'msg307': '7373737373737373', 'msg300': '6C6C6C6C6C6C6C6C', 'msg301': '6D6D6D6D6D6D6D6D', 'msg302': '6E6E6E6E6E6E6E6E', 'msg303': '6F6F6F6F6F6F6F6F', 'cip415': 'E7562A7F56FF4966', 'msg308': '7474747474747474', 'msg309': '7575757575757575', 'key415': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'cip414': '77A791E28AA464A5', 'key382': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key383': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key380': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key268': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key386': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key387': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key384': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key385': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'cip367': 'F2D9D1BE74376C0C', 'key388': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key389': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'cip394': '4DA91CB4124B67FE', 'key334': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip334': '468E5218F1A37611', 'cip309': 'CFEF7A1C0218DB1E', 'cip308': '10B1C170E3398F91', 'cip363': 'ACE41A06BFA258EA', 'cip418': 'D9FA6595F0C094CA', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'EF840B00DA448234', 'cip124': 'DF4A77123610F2B1', 'cip127': '8CA64DE9C1B123A7', 'cip126': 'FFCCC32A699CB7C5', 'cip121': '502CD2BF4FC0B793', 'cip120': '46F5E7077CB869A8', 'cip123': '52710C55818FAF52', 'cip122': 'C0278007230589E4', 'cip129': 'DD7F121CA5015619', 'cip128': '95F8A5E5DD31D900', 'cip438': '0FEC6BBF9B859184', 'key363': 'ABABABABABABABABABABABABABABABAB', 'cip409': '4DADD04A0EA70F20', 'key364': 'ACACACACACACACACACACACACACACACAC', 'key413': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key323': '83838383838383838383838383838383', 'cip268': '03481B4828FD1D04', 'key365': 'ADADADADADADADADADADADADADADADAD', 'msg159': '0000000100000000', 'msg158': '0000000200000000', 'msg391': 'C7C7C7C7C7C7C7C7', 'key366': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg151': '0000010000000000', 'msg150': '0000020000000000', 'msg153': '0000004000000000', 'msg152': '0000008000000000', 'msg155': '0000001000000000', 'msg154': '0000002000000000', 'msg157': '0000000400000000', 'msg156': '0000000800000000', 'cip248': '8940F7B3EACA5939', 'key357': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'cip249': 'E22B19A55086774B', 'key410': 'DADADADADADADADADADADADADADADADA', 'cip269': 'C78FC45A1DCEA2E2', 'key443': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg390': 'C6C6C6C6C6C6C6C6', 'msg409': 'D9D9D9D9D9D9D9D9', 'msg408': 'D8D8D8D8D8D8D8D8', 'cip301': 'A4C9A0D04D3280CD', 'msg402': 'D2D2D2D2D2D2D2D2', 'msg401': 'D1D1D1D1D1D1D1D1', 'msg400': 'D0D0D0D0D0D0D0D0', 'key301': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg406': 'D6D6D6D6D6D6D6D6', 'msg405': 'D5D5D5D5D5D5D5D5', 'msg404': 'D4D4D4D4D4D4D4D4', 'cip58': 'F75ACF1692C115D2', 'cip59': '5A448A95522AF894', 'key207': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'cip52': 'C55C05072C072CBE', 'cip53': 'FB4808530D49FFD3', 'cip50': '99B2175DCE3D348C', 'cip51': '73AE9A4A6376637E', 'cip56': 'A38DC58A5AEF3CAA', 'cip57': '4F29AB3449FBA969', 'cip54': '3C1B66BD5170F2A1', 'cip55': '8CA64DE9C1B123A7', 'cip4': '794FE1DC2F80CD38', 'cip5': '15052BCDF21A1F1E', 'cip6': '3A830D0BDA044EBB', 'cip7': '8CA64DE9C1B123A7', 'cip0': 'FAFD5084374FCE34', 'cip1': '60CC37B7B537A1DC', 'cip2': 'BE3E7304FE92C2BC', 'cip3': '49F9E7A60C406DBF', 'key306': '72727272727272727272727272727272', 'cip8': '0C1971C6874548E2', 'cip9': '52C2F3FF100668BC', 'key358': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'cip325': '69D901A8A691E661', 'key329': '89898989898989898989898989898989', 'cip300': '0F4FF4D9BC7E2244', 'key250': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'cip391': '76BF084C1535A6C6', 'msg278': '5656565656565656', 'msg279': '5757575757575757', 'key251': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg274': '5252525252525252', 'msg275': '5353535353535353', 'msg276': '5454545454545454', 'msg277': '5555555555555555', 'msg270': '4E4E4E4E4E4E4E4E', 'msg271': '4F4F4F4F4F4F4F4F', 'msg272': '5050505050505050', 'msg273': '5151515151515151', 'msg419': 'E3E3E3E3E3E3E3E3', 'msg359': 'A7A7A7A7A7A7A7A7', 'cip421': '961AEB77BFC10B3C', 'cip312': '80D9230BDAEB67DC', 'key324': '84848484848484848484848484848484', 'cip351': 'E40E81FF3F618340', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key325': '85858585858585858585858585858585', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'key258': '42424242424242424242424242424242', 'key327': '87878787878787878787878787878787', 'key259': '43434343434343434343434343434343', 'key320': '80808080808080808080808080808080', 'key346': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key313': '79797979797979797979797979797979', 'key321': '81818181818181818181818181818181', 'cip360': '26F88D30C0FB8302', 'key312': '78787878787878787878787878787878', 'key305': '71717171717171717171717171717171', 'key322': '82828282828282828282828282828282', 'key199': '07070707070707070707070707070707', 'key198': '06060606060606060606060606060606', 'key197': '05050505050505050505050505050505', 'key196': '04040404040404040404040404040404', 'key195': '03030303030303030303030303030303', 'key194': '02020202020202020202020202020202', 'key193': '01010101010101010101010101010101', 'key192': '00000000000000000000000000000000', 'key191': '00000000000000000000000000000000', 'key190': '00000000000000000000000000000000', 'msg295': '6767676767676767', 'cip24': 'E788FF69D915395A', 'key317': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key316': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'cip341': 'D936BF54ECA8BDCE', 'cip340': 'E1D23881C957B96C', 'cip343': '6118FCEBD407281D', 'cip342': 'A020003C5554F34C', 'msg99': '0000000000000000', 'msg98': '0000000000000000', 'key314': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'cip346': '79BFA264BDA57373', 'msg95': '0000000000000000', 'msg94': '0000000000000000', 'msg97': '0000000000000000', 'msg96': '0000000000000000', 'msg91': '0000000000000000', 'msg90': '0000000000000000', 'msg93': '0000000000000000', 'msg92': '0000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'cip169': 'AB6A20C0620D1C6F', 'cip168': '25EB5FC3F8CF0621', 'cip242': 'AC978C247863388F', 'cip243': '0432ED386F2DE328', 'cip244': 'D254014CB986B3C2', 'cip245': 'B256E34BEDB49801', 'cip246': '37F8759EB77E7BFC', 'key228': '24242424242424242424242424242424', 'cip161': 'DF98C8276F54B04B', 'cip160': 'E943D7568AEC0C5C', 'cip163': 'FA0752B07D9C4AB8', 'cip162': 'B160E4680F6C696F', 'cip165': '5E0905517BB59BCF', 'cip164': 'CA3A2B036DBC8502', 'cip167': '4D49DB1532919C9F', 'cip166': '814EEB3B91D90726', 'msg199': '0707070707070707', 'msg198': '0606060606060606', 'msg195': '0303030303030303', 'msg194': '0202020202020202', 'msg197': '0505050505050505', 'msg196': '0404040404040404', 'msg191': '0000000000000001', 'key28': '00000008000000000000000000000000', 'msg193': '0101010101010101', 'msg192': '0000000000000000', 'msg296': '6868686868686868', 'msg297': '6969696969696969', 'msg294': '6666666666666666', 'key29': '00000004000000000000000000000000', 'msg292': '6464646464646464', 'msg293': '6565656565656565', 'msg290': '6262626262626262', 'msg291': '6363636363636363', 'msg357': 'A5A5A5A5A5A5A5A5', 'msg356': 'A4A4A4A4A4A4A4A4', 'msg355': 'A3A3A3A3A3A3A3A3', 'msg354': 'A2A2A2A2A2A2A2A2', 'msg353': 'A1A1A1A1A1A1A1A1', 'msg352': 'A0A0A0A0A0A0A0A0', 'msg298': '6A6A6A6A6A6A6A6A', 'msg299': '6B6B6B6B6B6B6B6B', 'key214': '16161616161616161616161616161616', 'key215': '17171717171717171717171717171717', 'key216': '18181818181818181818181818181818', 'key217': '19191919191919191919191919191919', 'key210': '12121212121212121212121212121212', 'key211': '13131313131313131313131313131313', 'key212': '14141414141414141414141414141414', 'key213': '15151515151515151515151515151515', 'key218': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key219': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'cip389': '4FB5D5536DA544F4', 'cip98': '83E55C4A19ABCB56', 'cip99': '96E6A993443B9DD4', 'cip96': 'A9FE6341C8621918', 'cip97': 'CE99FD5D50B22CEF', 'cip94': '7E6C8995AA52D298', 'cip95': '8CA64DE9C1B123A7', 'cip92': 'AD5F11ED913E918C', 'cip93': '3CE4B119BC1FC701', 'cip90': '0A634C7A69897F35', 'cip91': '6C2C0F27E973CE29', 'cip368': '939618DF0AEFAAE7', 'key381': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'cip398': '9AA159D7309DA7A0', 'cip435': '6CBCE951BBC30F74', 'cip282': 'F9038021E37C7618', 'msg120': '0000000000000000', 'msg121': '0000000000000000', 'msg122': '0000000000000000', 'msg123': '0000000000000000', 'msg124': '0000000000000000', 'msg125': '0000000000000000', 'msg126': '0000000000000000', 'msg127': '0000000000000000', 'msg128': '8000000000000000', 'msg129': '4000000000000000', 'key340': '94949494949494949494949494949494', 'cip399': '0B844B9D8C4EA14A', 'cip434': '1C0A9280EECF5D48', 'cip283': '35BC6FF838DBA32F', 'msg432': 'F0F0F0F0F0F0F0F0', 'msg433': 'F1F1F1F1F1F1F1F1', 'msg430': 'EEEEEEEEEEEEEEEE', 'msg351': '9F9F9F9F9F9F9F9F', 'key424': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'cip379': 'F91DCAD912332F3B', 'msg434': 'F2F2F2F2F2F2F2F2', 'msg435': 'F3F3F3F3F3F3F3F3', 'msg438': 'F6F6F6F6F6F6F6F6', 'msg439': 'F7F7F7F7F7F7F7F7', 'key341': '95959595959595959595959595959595', 'cip323': '161BFABD4224C162', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'cip29': '0DC6A2C01EADE617', 'cip28': 'DD311EB7A3202393', 'cip240': 'F47BB46273B15EB5', 'msg350': '9E9E9E9E9E9E9E9E', 'key221': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg190': '0000000000000002', 'msg326': '8686868686868686', 'msg266': '4A4A4A4A4A4A4A4A', 'cip241': '655EA628CF62585F', 'msg227': '2323232323232323', 'msg226': '2222222222222222', 'msg225': '2121212121212121', 'msg224': '2020202020202020', 'msg223': '1F1F1F1F1F1F1F1F', 'msg222': '1E1E1E1E1E1E1E1E', 'msg221': '1D1D1D1D1D1D1D1D', 'msg220': '1C1C1C1C1C1C1C1C', 'msg384': 'C0C0C0C0C0C0C0C0', 'msg385': 'C1C1C1C1C1C1C1C1', 'msg386': 'C2C2C2C2C2C2C2C2', 'msg387': 'C3C3C3C3C3C3C3C3', 'msg380': 'BCBCBCBCBCBCBCBC', 'cip299': '1E2DC77E36A84693', 'msg229': '2525252525252525', 'msg228': '2424242424242424', 'cip305': 'B971ADE70E5C89EE', 'cip298': '26C940AB13574231', 'cip304': 'AF531E9520994017', 'cip356': 'CA439007C7245CD0', 'cip388': '72DAF2A7C9EA6803', 'cip307': '8DFB864FDB3C6811', 'key421': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'cip357': '06FC7FDE1C8389E7', 'cip306': '415D81C86AF9C376', 'key148': '00000000000000000000000000000000', 'key149': '00000000000000000000000000000000', 'key419': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key144': '00000000000000000000000000000000', 'key145': '00000000000000000000000000000000', 'key146': '00000000000000000000000000000000', 'key147': '00000000000000000000000000000000', 'key140': '00000000000000000000000000000000', 'key141': '00000000000000000000000000000000', 'key142': '00000000000000000000000000000000', 'key143': '00000000000000000000000000000000', 'cip293': '86405D9B425A8C8C', 'cip303': '115DBC965E6096C8', 'msg69': '0000000000000000', 'cip302': '9FAF2C96FE84919D', 'key420': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip358': '7A3C1F3BD60CB3D8', 'key405': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'cip359': 'E415D80048DBA848', 'key249': '39393939393939393939393939393939', 'key248': '38383838383838383838383838383838', 'key247': '37373737373737373737373737373737', 'key246': '36363636363636363636363636363636', 'key245': '35353535353535353535353535353535', 'key244': '34343434343434343434343434343434', 'key243': '33333333333333333333333333333333', 'key242': '32323232323232323232323232323232', 'key241': '31313131313131313131313131313131', 'key240': '30303030303030303030303030303030', 'msg313': '7979797979797979', 'msg312': '7878787878787878', 'msg311': '7777777777777777', 'msg310': '7676767676767676', 'msg317': '7D7D7D7D7D7D7D7D', 'msg316': '7C7C7C7C7C7C7C7C', 'msg315': '7B7B7B7B7B7B7B7B', 'key204': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key401': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg319': '7F7F7F7F7F7F7F7F', 'cip294': 'EBBF4810619C2C55', 'key400': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key391': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key390': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key393': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'cip322': '752666EB4CAB46EE', 'key379': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key394': 'CACACACACACACACACACACACACACACACA', 'key397': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key396': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key307': '73737373737373737373737373737373', 'key398': 'CECECECECECECECECECECECECECECECE', 'key402': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'cip338': '5B365F2FB2CD7F32', 'cip339': 'F0B00B264381DDBB', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'key319': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'cip110': '4871C3B7436121DE', 'cip111': '8CA64DE9C1B123A7', 'cip112': '41BBC8EF36654838', 'cip113': 'FCBD166CA0EA87E2', 'cip114': '9DFFC6EE9751B5CF', 'cip115': 'C01B7878EBCE8DD3', 'cip116': '357E5A4DC162D715', 'cip117': '268F93CAEB248E2E', 'cip118': 'A5D4174744B84E7D', 'cip119': '8CA64DE9C1B123A7', 'key289': '61616161616161616161616161616161', 'key408': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg164': '0000000008000000', 'msg165': '0000000004000000', 'msg166': '0000000002000000', 'msg167': '0000000001000000', 'msg160': '0000000080000000', 'msg161': '0000000040000000', 'msg162': '0000000020000000', 'msg163': '0000000010000000', 'key355': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'cip406': '8C0F3BA0C8601980', 'msg436': 'F4F4F4F4F4F4F4F4', 'msg394': 'CACACACACACACACA', 'msg168': '0000000000800000', 'msg169': '0000000000400000', 'key348': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'cip311': '89D3BF37052162E9', 'msg366': 'AEAEAEAEAEAEAEAE', 'msg367': 'AFAFAFAFAFAFAFAF', 'msg364': 'ACACACACACACACAC', 'key136': '00000000000000000000000000000000', 'msg362': 'AAAAAAAAAAAAAAAA', 'msg363': 'ABABABABABABABAB', 'msg360': 'A8A8A8A8A8A8A8A8', 'msg361': 'A9A9A9A9A9A9A9A9', 'msg341': '9595959595959595', 'msg368': 'B0B0B0B0B0B0B0B0', 'msg369': 'B1B1B1B1B1B1B1B1', 'cip204': '934316AE443CF08B', 'cip205': 'E3F56D7F1130A2B7', 'cip206': 'A2E4705087C6B6B4', 'cip207': 'D5D76E09A447E8C3', 'cip200': '10772D40FAD24257', 'cip201': 'F0139440647A6E7B', 'cip202': '0A288603044D740C', 'cip203': '6359916942F7438F', 'msg437': 'F5F5F5F5F5F5F5F5', 'cip413': 'F0752004EE23D87B', 'cip208': 'DD7515F2BFC17F85', 'cip209': 'F40379AB9E0EC533', 'key376': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'cip67': 'DED028F0C1F5A774', 'cip66': '81B838A1E9CD59B3', 'cip65': '5E87809F6B8A7ED5', 'cip64': 'C2A4DD96151453C2', 'cip63': '8CA64DE9C1B123A7', 'cip62': '41792F90E798B8E2', 'cip61': '7A7907DEB712DD81', 'cip60': 'FEEA19D1125CEB53', 'msg342': '9696969696969696', 'cip419': 'ADE4804C4BE4486E', 'cip277': '3BCDD41E6165A5E8', 'cip69': 'C1A75845F22BE951', 'cip68': '48C983815809FC87', 'cip276': '531BE5F9405DA715', 'cip365': '3C9A34CA4CB49EEB', 'key328': '88888888888888888888888888888888', 'key351': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'cip364': 'EEAAC6D17880BD56', 'key375': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'cip428': 'D6EE30A16B2CC01E', 'cip270': 'DB96D88C3460D801', 'cip420': '007B81F520E6D7DA', 'key353': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'cip411': 'F45FC26193E69AEE', 'key430': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key352': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'cip328': '762C40C8FADE9D16', 'cip315': 'DEA0B796624BB5BA', 'cip373': '62D473F539FA0D8B', 'msg262': '4646464646464646', 'key406': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'cip321': '907A46722ED34EC4', 'key374': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'cip429': '6932D887B2EA9C1A', 'key444': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg269': '4D4D4D4D4D4D4D4D', 'msg268': '4C4C4C4C4C4C4C4C', 'key431': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg263': '4747474747474747', 'cip176': '1029D55E880EC2D0', 'msg261': '4545454545454545', 'msg260': '4444444444444444', 'msg267': '4B4B4B4B4B4B4B4B', 'key159': '00000000000000000000000000000000', 'msg265': '4949494949494949', 'msg264': '4848484848484848', 'key158': '00000000000000000000000000000000', 'cip378': '10ADB6E2AB972BBE', 'key432': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'cip374': '1533F3ED9BE8EF8E', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'cip433': '5D1B8FAF7839494B', 'key281': '59595959595959595959595959595959', 'key372': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'cip432': '2A2891F65BB8173C', 'key300': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'cip431': '228AEA0D403E807A', 'key138': '00000000000000000000000000000000', 'key433': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'cip430': '0BFC865461F13ACC', 'cip384': 'A3B357885B1E16D2', 'key335': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'cip350': 'D66CDCAF3F6724A2', 'key267': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'cip436': '9CA66E96BD08BC70', 'key266': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key371': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key155': '00000000000000000000000000000000', 'msg218': '1A1A1A1A1A1A1A1A', 'msg219': '1B1B1B1B1B1B1B1B', 'msg216': '1818181818181818', 'msg217': '1919191919191919', 'msg214': '1616161616161616', 'key154': '00000000000000000000000000000000', 'msg212': '1414141414141414', 'msg213': '1515151515151515', 'msg210': '1212121212121212', 'msg211': '1313131313131313', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'msg88': '0000000000000000', 'key110': '00000000000000000000000000020000', 'msg86': '0000000000000000', 'msg87': '0000000000000000', 'msg84': '0000000000000000', 'msg85': '0000000000000000', 'msg82': '0000000000000000', 'msg83': '0000000000000000', 'msg80': '0000000000000000', 'msg81': '0000000000000000', 'key302': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key370': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'cip425': 'DFF918E93BDAD292', 'key360': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'cip372': '36F0D0B3675704D5', 'key303': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key434': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'cip320': 'EFECF25C3C5DC6DB', 'cip247': '5013CA4F62C9CEA0', 'key435': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key276': '54545454545454545454545454545454', 'key277': '55555555555555555555555555555555', 'key274': '52525252525252525252525252525252', 'key275': '53535353535353535353535353535353', 'key272': '50505050505050505050505050505050', 'key273': '51515151515151515151515151515151', 'cip259': 'B91810B8CDC58FE2', 'cip258': '724E7332696D08A7', 'cip257': '19DF84AC95551003', 'cip256': '6D55DDBC8DEA95FF', 'cip255': '5C4CA877A4E1E92D', 'cip254': 'E96089D6368F3E1A', 'cip253': '9D0BB4DB830ECB73', 'cip252': '51F0114FB6A6CD37', 'cip251': '8D250D58361597FC', 'cip250': 'B04A2AAC925ABB0B', 'cip426': '8FE559C7CD6FA56D', 'msg340': '9494949494949494', 'msg343': '9797979797979797', 'key304': '70707070707070707070707070707070', 'msg344': '9898989898989898', 'cip225': '88586E1D755B9B5A', 'key436': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg345': '9999999999999999', 'msg285': '5D5D5D5D5D5D5D5D', 'cip23': '8CA64DE9C1B123A7', 'msg287': '5F5F5F5F5F5F5F5F', 'msg286': '5E5E5E5E5E5E5E5E', 'msg281': '5959595959595959', 'msg280': '5858585858585858', 'msg283': '5B5B5B5B5B5B5B5B', 'cip22': 'E954174CC0C75C5D', 'msg322': '8282828282828282', 'msg323': '8383838383838383', 'msg320': '8080808080808080', 'msg321': '8181818181818181', 'msg289': '6161616161616161', 'cip21': '743C3DBD464ABE66', 'msg324': '8484848484848484', 'msg325': '8585858585858585', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'cip27': '5A015BF03B8FF6D2', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'key448': '000102030405060708090A0B0C0D0E0F', 'cip26': '71986C565B7A4697', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'cip25': 'DA518384A7F98F8F', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'key311': '77777777777777777777777777777777', 'key445': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'cip448': 'D117BD6373549FAA', 'cip397': '536873DB879CC770', 'msg376': 'B8B8B8B8B8B8B8B8', 'key429': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg139': '0010000000000000', 'msg138': '0020000000000000', 'msg137': '0040000000000000', 'msg136': '0080000000000000', 'msg135': '0100000000000000', 'msg134': '0200000000000000', 'msg133': '0400000000000000', 'msg132': '0800000000000000', 'msg131': '1000000000000000', 'msg130': '2000000000000000', 'cip154': 'F02B263B328E2B60', 'cip155': '9D64555A9A10B852', 'cip156': 'D106FF0BED5255D7', 'cip157': 'E1652C6B138C64A5', 'cip150': 'A484C3AD38DC9C19', 'cip151': 'FBE00A8A1EF8AD72', 'cip152': '750D079407521363', 'cip153': '64FEED9C724C2FAF', 'cip158': 'E428581186EC8F46', 'cip159': 'AEB5F5EDE22D1A36', 'msg421': 'E5E5E5E5E5E5E5E5', 'msg420': 'E4E4E4E4E4E4E4E4', 'msg423': 'E7E7E7E7E7E7E7E7', 'msg422': 'E6E6E6E6E6E6E6E6', 'msg425': 'E9E9E9E9E9E9E9E9', 'msg424': 'E8E8E8E8E8E8E8E8', 'msg427': 'EBEBEBEBEBEBEBEB', 'msg426': 'EAEAEAEAEAEAEAEA', 'msg429': 'EDEDEDEDEDEDEDED', 'msg407': 'D7D7D7D7D7D7D7D7', 'cip348': 'A399D3D63E169FA9', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'cip38': 'FB3B39E43C76D53D', 'cip39': '8CA64DE9C1B123A7', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'cip34': 'D42EF0A1B9BC4392', 'cip35': '9E1D42F406FE0387', 'cip36': '8DB9EE4A1773C8FE', 'cip37': '8195C0ED7D066F6B', 'cip30': 'D1EAE0F689C433DE', 'cip31': '8CA64DE9C1B123A7', 'cip32': '833803AFBCE49177', 'cip33': '94EBB684C7C41EF5', 'cip445': '1ED83D49E267191D', 'cip218': '69E51488403EF4C3', 'cip400': '3BBD84CE539E68C4', 'cip344': '072E328C984DE4A2', 'cip443': 'E0BA8F4488AAF97C', 'key361': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg252': '3C3C3C3C3C3C3C3C', 'msg253': '3D3D3D3D3D3D3D3D', 'msg250': '3A3A3A3A3A3A3A3A', 'msg251': '3B3B3B3B3B3B3B3B', 'msg256': '4040404040404040', 'msg257': '4141414141414141', 'msg254': '3E3E3E3E3E3E3E3E', 'msg255': '3F3F3F3F3F3F3F3F', 'msg393': 'C9C9C9C9C9C9C9C9', 'msg392': 'C8C8C8C8C8C8C8C8', 'msg258': '4242424242424242', 'msg259': '4343434343434343', 'msg397': 'CDCDCDCDCDCDCDCD', 'msg396': 'CCCCCCCCCCCCCCCC', 'msg395': 'CBCBCBCBCBCBCBCB', 'msg334': '8E8E8E8E8E8E8E8E', 'cip376': 'FABBF7C046FD273F', 'key362': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key294': '66666666666666666666666666666666', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key153': '00000000000000000000000000000000', 'key152': '00000000000000000000000000000000', 'key151': '00000000000000000000000000000000', 'key150': '00000000000000000000000000000000', 'key157': '00000000000000000000000000000000', 'key156': '00000000000000000000000000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'key428': 'ECECECECECECECECECECECECECECECEC', 'cip327': '7F26DCF425149823', 'key238': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key239': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'cip326': 'CBBF6EEFE6529728', 'key232': '28282828282828282828282828282828', 'key233': '29292929292929292929292929292929', 'key230': '26262626262626262626262626262626', 'key231': '27272727272727272727272727272727', 'key236': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key237': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key234': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key235': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'cip316': 'E9E40542BDDB3E9D', 'cip324': '215F48699DB44A45', 'cip317': '8AD99914B354B911', 'cip288': '1BF17E00C09E7CBF', 'cip314': '9626FE57596E199E', 'cip289': '29932350C098DB5D', 'msg77': '0000000000000000', 'msg76': '0000000000000000', 'msg75': '0000000000000000', 'msg74': '0000000000000000', 'msg73': '0000000000000000', 'msg72': '0000000000000000', 'msg71': '0000000000000000', 'msg70': '0000000000000000', 'cip284': '4927ACC8CE45ECE7', 'cip285': 'E812EE6E3572985C', 'cip286': '9BB93A89627BF65F', 'cip287': 'EF12476884CB74CA', 'cip280': '1BEA27FFB72457B7', 'cip281': '85C3E0C429F34C27', 'msg79': '0000000000000000', 'msg78': '0000000000000000', 'cip42': '8990AAB2362CCE0F', 'key403': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'cip375': '9C4EA352599731ED', 'cip310': 'DBAC30A2A40B1B9C', 'key128': '00000000000000000000000000000000', 'key129': '00000000000000000000000000000000', 'key126': '00000000000000000000000000000002', 'key127': '00000000000000000000000000000001', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'cip266': '9D2B8C0AC605F274', 'cip267': 'C90F2F4C98A8FB2A', 'cip264': '63B15CADA668CE12', 'cip265': 'EACC0C1264171071', 'cip262': '48019C59E39B90C5', 'cip263': '0544083FB902D8C0', 'cip109': '67DB327ED5DF89E3', 'cip108': '270A943BEABEA8EC', 'cip107': '7497A098AA651D00', 'cip106': 'FF7B0E870FB1FD0B', 'cip105': 'A5AB6F6EB66057A9', 'cip104': '60B4B8E3A8F5CBEC', 'cip103': '8CA64DE9C1B123A7', 'cip102': 'AC8B09EC3153D57B', 'cip101': 'D9EF04E272D1A78A', 'cip100': '6781B65D74A6B9FB', 'msg173': '0000000000040000', 'msg172': '0000000000080000', 'msg171': '0000000000100000', 'msg170': '0000000000200000', 'msg177': '0000000000004000', 'msg176': '0000000000008000', 'msg175': '0000000000010000', 'msg174': '0000000000020000', 'msg388': 'C4C4C4C4C4C4C4C4', 'msg179': '0000000000001000', 'msg178': '0000000000002000', 'msg389': 'C5C5C5C5C5C5C5C5', 'msg375': 'B7B7B7B7B7B7B7B7', 'msg374': 'B6B6B6B6B6B6B6B6', 'msg377': 'B9B9B9B9B9B9B9B9', 'msg215': '1717171717171717', 'msg371': 'B3B3B3B3B3B3B3B3', 'msg370': 'B2B2B2B2B2B2B2B2', 'msg373': 'B5B5B5B5B5B5B5B5', 'msg372': 'B4B4B4B4B4B4B4B4', 'msg327': '8787878787878787', 'key349': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key411': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg379': 'BBBBBBBBBBBBBBBB', 'msg378': 'BABABABABABABABA', 'cip198': '3F5150BBA081D585', 'cip199': 'C65242248C9CF6F2', 'cip211': '2911CF5E94D33FE1', 'cip210': '96CD27784D1563E5', 'cip217': '7572278F364EB50D', 'cip216': 'C33FD1EB49CB64DA', 'cip215': '452C1197422469F8', 'cip214': '2006E716C4252D6D', 'cip190': '06E7EA22CE92708F', 'cip191': '166B40B44ABA4BD6', 'cip192': '8CA64DE9C1B123A7', 'cip193': '994D4DC157B96C52', 'cip194': 'E127C2B61D98E6E2', 'cip195': '984C91D78A269CE3', 'cip196': '1F4570BB77550683', 'cip197': '3990ABF98D672B16', 'cip70': 'C60F823E8E994489', 'cip71': '8CA64DE9C1B123A7', 'cip72': '709F8FCB044172FE', 'cip73': '26BC2DE634BFFFD4', 'cip74': 'D98126355C2E03E6', 'cip75': '49AAA91B49345137', 'cip76': 'A59854DCE009126D', 'cip77': '21C46B9FDE5CD36B', 'cip78': 'DEB4AE36E07BC053', 'cip79': '8CA64DE9C1B123A7', 'cip437': 'F5D779FCFBB28BF3', 'key368': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg381': 'BDBDBDBDBDBDBDBD', 'cip446': '66B2B23EA84693AD', 'key292': '64646464646464646464646464646464', 'msg382': 'BEBEBEBEBEBEBEBE', 'cip447': '7359B2163E4EDC58', 'key298': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key333': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'cip390': '1DD4E65AAF7988B4', 'cip444': '67B36E2875D9631C', 'key299': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg106': '0000000000000000', 'msg107': '0000000000000000', 'msg104': '0000000000000000', 'msg105': '0000000000000000', 'msg102': '0000000000000000', 'key111': '00000000000000000000000000010000', 'msg100': '0000000000000000', 'msg101': '0000000000000000', 'cip442': 'C66F54067298D4E9', 'msg89': '0000000000000000', 'key369': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'cip412': 'D0CFBB937CEDBFB5', 'msg108': '0000000000000000', 'msg109': '0000000000000000', 'key442': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key293': '65656565656565656565656565656565', 'cip440': '39ADBDDB7363090D', 'key295': '67676767676767676767676767676767', 'key332': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'cip441': 'C0AEAF445F7E2A7A', 'key296': '68686868686868686868686868686868', 'msg247': '3737373737373737', 'key447': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key297': '69696969696969696969696969696969', 'key395': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key347': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key290': '62626262626262626262626262626262', 'cip383': '92AA224372156A00', 'key344': '98989898989898989898989898989898', 'key291': '63636363636363636363636363636363', 'key425': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key345': '99999999999999999999999999999999', 'key119': '00000000000000000000000000000100', 'msg314': '7A7A7A7A7A7A7A7A', 'key342': '96969696969696969696969696969696', 'key118': '00000000000000000000000000000200', 'key412': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'cip332': '720479B024C397EE', 'key343': '97979797979797979797979797979797', 'key446': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'cip260': '06E23526EDCCD0C4', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'key427': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key404': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key426': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'cip370': '38703BA5E2315D1D', 'cip385': '169F7629C970C1E5', 'cip369': '24692773CB9F27FE', 'cip20': 'E90963FB7F2B1193', 'key354': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'cip417': '0DB572DDCE388AC7', 'key423': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key356': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key422': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key407': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg103': '0000000000000000', 'msg209': '1111111111111111', 'msg208': '1010101010101010', 'key269': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key399': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg205': '0D0D0D0D0D0D0D0D', 'msg204': '0C0C0C0C0C0C0C0C', 'msg207': '0F0F0F0F0F0F0F0F', 'msg206': '0E0E0E0E0E0E0E0E', 'msg201': '0909090909090909', 'msg200': '0808080808080808', 'msg203': '0B0B0B0B0B0B0B0B', 'msg202': '0A0A0A0A0A0A0A0A', 'key162': '00000000000000000000000000000000', 'key163': '00000000000000000000000000000000', 'key160': '00000000000000000000000000000000', 'key161': '00000000000000000000000000000000', 'key166': '00000000000000000000000000000000', 'key167': '00000000000000000000000000000000', 'key164': '00000000000000000000000000000000', 'key165': '00000000000000000000000000000000', 'key283': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key282': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key168': '00000000000000000000000000000000', 'key169': '00000000000000000000000000000000', 'key287': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key286': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key285': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key284': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'cip377': 'B7FE63A61C646F3A', 'cip424': 'BAD3EE68BDDB9607', 'cip279': 'D90772CF3F047CFD', 'cip330': '301085E3FDE724E1', 'cip366': '9527B0287B75F5A3', 'cip387': 'AE0FEEB0495932C8', 'msg245': '3535353535353535', 'key264': '48484848484848484848484848484848', 'cip228': '0BA03D9E6C196511', 'cip229': '3E55E997611E4B7D', 'key261': '45454545454545454545454545454545', 'key260': '44444444444444444444444444444444', 'key263': '47474747474747474747474747474747', 'key262': '46464646464646464646464646464646', 'cip222': 'F24A8D2231C77538', 'cip223': '4FD96EC0D3304EF6', 'cip220': '521B7FB3B41BB791', 'cip221': '26059A6A0F3F6B35', 'cip226': '0F8ADFFB11DC2784', 'cip227': '2F30446C8312404A', 'cip224': '18A9D580A900B699', 'msg147': '0000100000000000', 'msg318': '7E7E7E7E7E7E7E7E', 'cip278': '2B1FF5610A19270C', 'cip395': '2DABFEB346794C3D', 'cip331': 'EF4E3E8F1CC6706E', 'cip392': 'AFEC35B09D36315F', 'cip423': '3CC02E14B6349B25', 'cip386': '62F44B247CF1348C', 'msg244': '3434343434343434', 'cip393': 'C8078A6148818403', 'msg339': '9393939393939393', 'msg338': '9292929292929292', 'key310': '76767676767676767676767676767676', 'key270': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg331': '8B8B8B8B8B8B8B8B', 'msg330': '8A8A8A8A8A8A8A8A', 'msg333': '8D8D8D8D8D8D8D8D', 'key271': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg335': '8F8F8F8F8F8F8F8F', 'msg328': '8888888888888888', 'msg337': '9191919191919191', 'msg336': '9090909090909090', 'key377': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'cip140': 'ADD0CC8D6E5DEBA1', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': '6F85B98DD12CB13B', 'cip319': '10130DA3C3A23924', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'msg20': '0000000000000000', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'cip136': 'D9031B0271BD5A0A', 'cip137': '424250B37C3DD951', 'cip134': '6CC5DEFAAF04512F', 'cip135': '0D9F279BA5D87260', 'cip132': '20B9E767B2FB1456', 'cip133': '55579380D77138EF', 'cip130': '2E8653104F3834EA', 'cip131': '4BD388FF6CD81D4F', 'key373': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key229': '25252525252525252525252525252525', 'cip352': '10EDB8977B348B35', 'cip138': 'B8061B7ECD9A21E5', 'cip139': 'F15D0F286B65BD28', 'cip371': 'FCB7E4B7D702E2FB', 'key278': '56565656565656565656565656565656', 'key437': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'cip380': '46E7EF47323A701D', 'key279': '57575757575757575757575757575757', 'cip439': 'EF88D2BF052DBDA8', 'cip422': '8A8DD870C9B14AF2', 'key441': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key44': '00000000000800000000000000000000', 'msg148': '0000080000000000', 'msg149': '0000040000000000', 'key45': '00000000000400000000000000000000', 'msg142': '0002000000000000', 'msg143': '0001000000000000', 'msg140': '0008000000000000', 'msg141': '0004000000000000', 'msg146': '0000200000000000', 'key46': '00000000000200000000000000000000', 'msg144': '0000800000000000', 'msg145': '0000400000000000', 'cip143': 'F356834379D165CD', 'cip142': 'ECBFE3BD3F591A5E', 'cip141': 'E6D5F82752AD63D1', 'key47': '00000000000100000000000000000000', 'cip147': '329A8ED523D71AEC', 'cip146': 'E19E275D846A1298', 'cip145': '889DE068A16F0BE6', 'cip144': '2B9F982F20037FA9', 'msg398': 'CECECECECECECECE', 'key40': '00000000008000000000000000000000', 'cip149': '12A9F5817FF2D65D', 'cip148': 'E7FCE22557D23C97', 'key220': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key203': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg346': '9A9A9A9A9A9A9A9A', 'key41': '00000000004000000000000000000000'}
dict_tdes3 = {'msg418': 'A2A2A2A2A2A2A2A2', 'msg419': 'A3A3A3A3A3A3A3A3', 'msg414': '9E9E9E9E9E9E9E9E', 'msg415': '9F9F9F9F9F9F9F9F', 'msg416': 'A0A0A0A0A0A0A0A0', 'msg417': 'A1A1A1A1A1A1A1A1', 'msg410': '9A9A9A9A9A9A9A9A', 'msg411': '9B9B9B9B9B9B9B9B', 'msg412': '9C9C9C9C9C9C9C9C', 'msg413': '9D9D9D9D9D9D9D9D', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '0000000000000000', 'msg4': '0000000000000000', 'msg7': '0000000000000000', 'msg6': '0000000000000000', 'msg1': '0000000000000000', 'msg0': '0000000000000000', 'msg3': '0000000000000000', 'msg2': '0000000000000000', 'msg9': '0000000000000000', 'msg8': '0000000000000000', 'msg60': '0000000000000000', 'msg61': '0000000000000000', 'msg62': '0000000000000000', 'msg63': '0000000000000000', 'msg64': '0000000000000000', 'msg65': '0000000000000000', 'cip354': 'B476E6499842AC54', 'cip355': '5C662C29C1E96056', 'msg68': '0000000000000000', 'msg69': '0000000000000000', 'cip358': 'EBBF4810619C2C55', 'cip359': 'F8D1CD7367B21B5D', 'cip178': '1DE5279DAE3BED6F', 'cip179': 'E941A33F85501303', 'cip172': '5495C6ABF1E5DF51', 'cip173': 'AE13DBD561488933', 'cip170': '7A9BE42F2009A892', 'cip171': '29038D56BA6D2745', 'cip176': 'D1399712F99BF02E', 'cip177': '14C1D7C1CFFEC79E', 'cip174': '024D1FFA8904E389', 'cip175': '8CA64DE9C1B123A7', 'msg188': '0000000000000000', 'msg189': '0000000000000000', 'msg186': '0000000000000000', 'msg187': '0000000000000000', 'msg184': '0000000000000000', 'msg185': '0000000000000000', 'msg182': '0000000000000000', 'msg183': '0000000000000000', 'msg180': '0000000000000000', 'msg181': '0000000000000000', 'msg340': '5454545454545454', 'msg341': '5555555555555555', 'msg342': '5656565656565656', 'msg343': '5757575757575757', 'msg344': '5858585858585858', 'msg345': '5959595959595959', 'msg346': '5A5A5A5A5A5A5A5A', 'msg347': '5B5B5B5B5B5B5B5B', 'msg348': '5C5C5C5C5C5C5C5C', 'msg349': '5D5D5D5D5D5D5D5D', 'cip16': 'A2DC9E92FD3CDE92', 'cip17': 'CAC09F797D031287', 'cip14': 'A8468EE3BC18F06D', 'cip15': '8CA64DE9C1B123A7', 'cip12': '178C83CE2B399D94', 'cip13': '50F636324A9B7F80', 'cip10': '31FE17369B5288C9', 'cip11': 'DFDD3CC64DAE1642', 'cip18': '90BA680B22AEB525', 'cip19': 'CE7A24F350E280B6', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'key319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key311': '373737373737373737373737373737373737373737373737', 'key310': '363636363636363636363636363636363636363636363636', 'key313': '393939393939393939393939393939393939393939393939', 'key312': '383838383838383838383838383838383838383838383838', 'key315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key405': '959595959595959595959595959595959595959595959595', 'key404': '949494949494949494949494949494949494949494949494', 'key407': '979797979797979797979797979797979797979797979797', 'key406': '969696969696969696969696969696969696969696969696', 'key401': '919191919191919191919191919191919191919191919191', 'key400': '909090909090909090909090909090909090909090909090', 'key403': '939393939393939393939393939393939393939393939393', 'key402': '929292929292929292929292929292929292929292929292', 'key409': '999999999999999999999999999999999999999999999999', 'key408': '989898989898989898989898989898989898989898989898', 'msg409': '9999999999999999', 'msg408': '9898989898989898', 'msg403': '9393939393939393', 'msg402': '9292929292929292', 'msg401': '9191919191919191', 'msg400': '9090909090909090', 'msg407': '9797979797979797', 'msg406': '9696969696969696', 'msg405': '9595959595959595', 'msg404': '9494949494949494', 'cip4': '809F5F873C1FD761', 'cip5': 'C02FAFFEC989D1FC', 'cip6': '4615AA1D33E72F10', 'cip7': '8CA64DE9C1B123A7', 'cip0': '95A8D72813DAA94D', 'cip1': '0EEC1487DD8C26D5', 'cip2': '7AD16FFB79C45926', 'cip3': 'D3746294CA6A6CF3', 'cip8': '2055123350C00858', 'cip9': 'DF3B99D6577397C8', 'cip341': '3BCDD41E6165A5E8', 'cip340': '531BE5F9405DA715', 'cip343': 'D90772CF3F047CFD', 'cip342': '2B1FF5610A19270C', 'cip345': '85C3E0C429F34C27', 'msg98': '0000000000000000', 'cip347': '35BC6FF838DBA32F', 'cip346': 'F9038021E37C7618', 'cip349': 'E812EE6E3572985C', 'msg94': '0000000000000000', 'msg97': '0000000000000000', 'msg96': '0000000000000000', 'msg91': '0000000000000000', 'msg90': '0000000000000000', 'msg93': '0000000000000000', 'msg92': '0000000000000000', 'cip169': '41B9A79AF79AC208', 'cip168': '8638809E878787A0', 'cip161': '3CFAA7A7DC8720DC', 'cip160': '19D032E64AB0BD8B', 'cip163': '9DB73B3C0D163F54', 'cip162': 'B7265F7F447AC6F3', 'cip165': '93C9B64042EAA240', 'cip164': '8181B65BABF4A975', 'cip167': '8CA64DE9C1B123A7', 'cip166': '5570530829705592', 'msg199': '0100000000000000', 'msg198': '0200000000000000', 'msg195': '1000000000000000', 'msg194': '2000000000000000', 'msg197': '0400000000000000', 'msg196': '0800000000000000', 'msg191': '0000000000000000', 'msg190': '0000000000000000', 'msg193': '4000000000000000', 'msg192': '8000000000000000', 'msg359': '6767676767676767', 'msg358': '6666666666666666', 'msg357': '6565656565656565', 'msg356': '6464646464646464', 'msg355': '6363636363636363', 'msg354': '6262626262626262', 'msg353': '6161616161616161', 'msg352': '6060606060606060', 'msg351': '5F5F5F5F5F5F5F5F', 'msg350': '5E5E5E5E5E5E5E5E', 'cip23': '8CA64DE9C1B123A7', 'cip22': 'C71516C29C75D170', 'cip21': '25610288924511C2', 'cip20': '882BFF0AA01A0B87', 'cip27': 'A81FBD448F9E522F', 'cip26': 'EE371483714C02EA', 'cip25': 'C22F0A294A71F29F', 'cip24': '5199C29A52C9F059', 'cip29': '1AFA9A66A6DF92AE', 'cip28': '4F644C92E192DFED', 'cip352': '1BF17E00C09E7CBF', 'cip353': '29932350C098DB5D', 'cip350': '9BB93A89627BF65F', 'cip351': 'EF12476884CB74CA', 'cip356': '3AF1703D76442789', 'cip357': '86405D9B425A8C8C', 'key148': '000000000000000000000000000000000000080000000000', 'msg66': '0000000000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'msg67': '0000000000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'key430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key324': '444444444444444444444444444444444444444444444444', 'key325': '454545454545454545454545454545454545454545454545', 'key326': '464646464646464646464646464646464646464646464646', 'key327': '474747474747474747474747474747474747474747474747', 'key320': '404040404040404040404040404040404040404040404040', 'key321': '414141414141414141414141414141414141414141414141', 'key322': '424242424242424242424242424242424242424242424242', 'key323': '434343434343434343434343434343434343434343434343', 'key328': '484848484848484848484848484848484848484848484848', 'key329': '494949494949494949494949494949494949494949494949', 'msg502': 'F6F6F6F6F6F6F6F6', 'msg503': 'F7F7F7F7F7F7F7F7', 'msg500': 'F4F4F4F4F4F4F4F4', 'msg501': 'F5F5F5F5F5F5F5F5', 'msg506': 'FAFAFAFAFAFAFAFA', 'msg507': 'FBFBFBFBFBFBFBFB', 'msg504': 'F8F8F8F8F8F8F8F8', 'msg505': 'F9F9F9F9F9F9F9F9', 'msg508': 'FCFCFCFCFCFCFCFC', 'msg509': 'FDFDFDFDFDFDFDFD', 'cip488': 'BAD3EE68BDDB9607', 'cip489': 'DFF918E93BDAD292', 'cip482': 'D9FA6595F0C094CA', 'cip483': 'ADE4804C4BE4486E', 'cip480': 'B026913F2CCFB109', 'cip481': '0DB572DDCE388AC7', 'cip486': '8A8DD870C9B14AF2', 'cip487': '3CC02E14B6349B25', 'cip484': '007B81F520E6D7DA', 'cip485': '961AEB77BFC10B3C', 'msg218': '0000002000000000', 'msg219': '0000001000000000', 'msg216': '0000008000000000', 'msg217': '0000004000000000', 'msg214': '0000020000000000', 'msg215': '0000010000000000', 'msg212': '0000080000000000', 'msg213': '0000040000000000', 'msg210': '0000200000000000', 'msg211': '0000100000000000', 'cip378': '9626FE57596E199E', 'cip379': 'DEA0B796624BB5BA', 'msg88': '0000000000000000', 'msg89': '0000000000000000', 'cip374': 'DBAC30A2A40B1B9C', 'msg87': '0000000000000000', 'msg84': '0000000000000000', 'msg85': '0000000000000000', 'msg82': '0000000000000000', 'msg83': '0000000000000000', 'msg80': '0000000000000000', 'cip373': 'CFEF7A1C0218DB1E', 'cip396': '720479B024C397EE', 'cip397': 'BEA27E3795063C89', 'cip394': '301085E3FDE724E1', 'cip395': 'EF4E3E8F1CC6706E', 'cip392': '762C40C8FADE9D16', 'cip393': '2453CF5D5BF4E463', 'cip390': 'CBBF6EEFE6529728', 'cip391': '7F26DCF425149823', 'cip398': '468E5218F1A37611', 'cip399': '50ACE16ADF66BFE8', 'msg328': '4848484848484848', 'msg329': '4949494949494949', 'msg322': '4242424242424242', 'msg323': '4343434343434343', 'msg320': '4040404040404040', 'msg321': '4141414141414141', 'msg326': '4646464646464646', 'msg327': '4747474747474747', 'msg324': '4444444444444444', 'msg325': '4545454545454545', 'cip154': 'EE371483714C02EA', 'cip155': 'A81FBD448F9E522F', 'cip156': '4F644C92E192DFED', 'cip157': '1AFA9A66A6DF92AE', 'cip150': 'C71516C29C75D170', 'cip151': '8CA64DE9C1B123A7', 'cip152': '5199C29A52C9F059', 'cip153': 'C22F0A294A71F29F', 'cip158': 'B3C1CC715CB879D8', 'cip159': '8CA64DE9C1B123A7', 'cip38': '5570530829705592', 'cip39': '8CA64DE9C1B123A7', 'cip34': 'B7265F7F447AC6F3', 'cip35': '9DB73B3C0D163F54', 'cip36': '8181B65BABF4A975', 'cip37': '93C9B64042EAA240', 'cip30': 'B3C1CC715CB879D8', 'cip31': '8CA64DE9C1B123A7', 'cip32': '19D032E64AB0BD8B', 'cip33': '3CFAA7A7DC8720DC', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key429': 'ADADADADADADADADADADADADADADADADADADADADADADADAD', 'key428': 'ACACACACACACACACACACACACACACACACACACACACACACACAC', 'key427': 'ABABABABABABABABABABABABABABABABABABABABABABABAB', 'key426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key337': '515151515151515151515151515151515151515151515151', 'key336': '505050505050505050505050505050505050505050505050', 'key335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key339': '535353535353535353535353535353535353535353535353', 'key338': '525252525252525252525252525252525252525252525252', 'msg511': 'FFFFFFFFFFFFFFFF', 'msg510': 'FEFEFEFEFEFEFEFE', 'msg512': '0011223344556677', 'cip499': '6CBCE951BBC30F74', 'cip498': '1C0A9280EECF5D48', 'cip491': 'C88480835C1A444C', 'cip490': '8FE559C7CD6FA56D', 'cip493': '6932D887B2EA9C1A', 'cip492': 'D6EE30A16B2CC01E', 'cip495': '228AEA0D403E807A', 'cip494': '0BFC865461F13ACC', 'cip497': '5D1B8FAF7839494B', 'cip496': '2A2891F65BB8173C', 'msg209': '0000400000000000', 'msg208': '0000800000000000', 'msg205': '0004000000000000', 'msg204': '0008000000000000', 'msg207': '0001000000000000', 'msg206': '0002000000000000', 'msg201': '0040000000000000', 'msg200': '0080000000000000', 'msg203': '0010000000000000', 'msg202': '0020000000000000', 'cip369': 'B971ADE70E5C89EE', 'cip368': 'AF531E9520994017', 'cip363': '1E2DC77E36A84693', 'cip362': '26C940AB13574231', 'cip361': '5FDFFFC3AAAB0CB3', 'cip360': '9EE703142BF8D7E2', 'cip367': '115DBC965E6096C8', 'cip366': '9FAF2C96FE84919D', 'cip365': 'A4C9A0D04D3280CD', 'cip364': '0F4FF4D9BC7E2244', 'cip425': 'D4E00A9EF5E6D8F3', 'cip385': '907A46722ED34EC4', 'cip384': 'EFECF25C3C5DC6DB', 'cip387': '161BFABD4224C162', 'cip386': '752666EB4CAB46EE', 'cip381': '8AD99914B354B911', 'cip380': 'E9E40542BDDB3E9D', 'cip383': '10130DA3C3A23924', 'cip382': '6F85B98DD12CB13B', 'cip389': '69D901A8A691E661', 'cip388': '215F48699DB44A45', 'cip423': 'E415D80048DBA848', 'msg339': '5353535353535353', 'msg338': '5252525252525252', 'msg331': '4B4B4B4B4B4B4B4B', 'msg330': '4A4A4A4A4A4A4A4A', 'msg333': '4D4D4D4D4D4D4D4D', 'msg332': '4C4C4C4C4C4C4C4C', 'msg335': '4F4F4F4F4F4F4F4F', 'msg334': '4E4E4E4E4E4E4E4E', 'msg337': '5151515151515151', 'msg336': '5050505050505050', 'cip143': '8CA64DE9C1B123A7', 'cip142': 'A8468EE3BC18F06D', 'cip141': '50F636324A9B7F80', 'cip140': '178C83CE2B399D94', 'cip147': 'CE7A24F350E280B6', 'cip146': '90BA680B22AEB525', 'cip145': 'CAC09F797D031287', 'cip144': 'A2DC9E92FD3CDE92', 'cip149': '25610288924511C2', 'cip148': '882BFF0AA01A0B87', 'cip49': '14C1D7C1CFFEC79E', 'cip48': 'D1399712F99BF02E', 'cip41': '41B9A79AF79AC208', 'cip40': '8638809E878787A0', 'cip43': '29038D56BA6D2745', 'cip42': '7A9BE42F2009A892', 'cip45': 'AE13DBD561488933', 'cip44': '5495C6ABF1E5DF51', 'cip47': '8CA64DE9C1B123A7', 'cip46': '024D1FFA8904E389', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'key458': 'CACACACACACACACACACACACACACACACACACACACACACACACA', 'key459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'cip330': '9D2B8C0AC605F274', 'cip331': 'C90F2F4C98A8FB2A', 'cip332': '03481B4828FD1D04', 'msg41': '0000000000000000', 'msg46': '0000000000000000', 'msg47': '0000000000000000', 'msg44': '0000000000000000', 'msg45': '0000000000000000', 'msg238': '0000000000020000', 'msg239': '0000000000010000', 'msg230': '0000000002000000', 'msg231': '0000000001000000', 'msg232': '0000000000800000', 'msg233': '0000000000400000', 'msg234': '0000000000200000', 'msg235': '0000000000100000', 'msg236': '0000000000080000', 'msg237': '0000000000040000', 'msg304': '3030303030303030', 'msg305': '3131313131313131', 'msg306': '3232323232323232', 'msg307': '3333333333333333', 'msg300': '2C2C2C2C2C2C2C2C', 'msg301': '2D2D2D2D2D2D2D2D', 'msg302': '2E2E2E2E2E2E2E2E', 'msg303': '2F2F2F2F2F2F2F2F', 'msg308': '3434343434343434', 'msg309': '3535353535353535', 'cip58': 'A1AB2190545B91D7', 'cip59': '0875041E64C570F7', 'cip52': 'DA99DBBC9A03F379', 'cip53': 'B7FC92F91D8E92E9', 'cip50': '1DE5279DAE3BED6F', 'cip51': 'E941A33F85501303', 'cip56': '9CC62DF43B6EED74', 'cip57': 'D863DBB5C59A91A0', 'cip54': 'AE8E5CAA3CA04E85', 'cip55': '8CA64DE9C1B123A7', 'key199': '000000000000000000000000000000000000000000000000', 'key198': '000000000000000000000000000000000000000000000000', 'key197': '000000000000000000000000000000000000000000000000', 'key196': '000000000000000000000000000000000000000000000000', 'key195': '000000000000000000000000000000000000000000000000', 'key194': '000000000000000000000000000000000000000000000000', 'key193': '000000000000000000000000000000000000000000000000', 'key192': '000000000000000000000000000000000000000000000000', 'key191': '000000000000000000000000000000000000000000000001', 'key190': '000000000000000000000000000000000000000000000002', 'key449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key442': 'BABABABABABABABABABABABABABABABABABABABABABABABA', 'key445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg227': '0000000010000000', 'msg226': '0000000020000000', 'msg225': '0000000040000000', 'msg224': '0000000080000000', 'msg223': '0000000100000000', 'msg222': '0000000200000000', 'msg221': '0000000400000000', 'msg220': '0000000800000000', 'msg229': '0000000004000000', 'msg228': '0000000008000000', 'cip503': 'EF88D2BF052DBDA8', 'cip502': '0FEC6BBF9B859184', 'msg313': '3939393939393939', 'msg312': '3838383838383838', 'msg311': '3737373737373737', 'msg310': '3636363636363636', 'msg317': '3D3D3D3D3D3D3D3D', 'msg316': '3C3C3C3C3C3C3C3C', 'msg315': '3B3B3B3B3B3B3B3B', 'msg314': '3A3A3A3A3A3A3A3A', 'msg319': '3F3F3F3F3F3F3F3F', 'msg318': '3E3E3E3E3E3E3E3E', 'cip67': 'DED028F0C1F5A774', 'cip66': '81B838A1E9CD59B3', 'cip65': '5E87809F6B8A7ED5', 'cip64': 'C2A4DD96151453C2', 'cip63': '8CA64DE9C1B123A7', 'cip62': '869EFD7F9F265A09', 'cip61': 'FCDB3291DE21F0C0', 'cip60': '5A594528BEBEF1CC', 'cip69': 'C1A75845F22BE951', 'cip68': '48C983815809FC87', 'cip229': '5E0905517BB59BCF', 'key298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key294': '262626262626262626262626262626262626262626262626', 'key295': '272727272727272727272727272727272727272727272727', 'key296': '282828282828282828282828282828282828282828282828', 'key297': '292929292929292929292929292929292929292929292929', 'key290': '222222222222222222222222222222222222222222222222', 'key291': '232323232323232323232323232323232323232323232323', 'key292': '242424242424242424242424242424242424242424242424', 'key293': '252525252525252525252525252525252525252525252525', 'key508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key276': '141414141414141414141414141414141414141414141414', 'key277': '151515151515151515151515151515151515151515151515', 'key274': '121212121212121212121212121212121212121212121212', 'key275': '131313131313131313131313131313131313131313131313', 'key272': '101010101010101010101010101010101010101010101010', 'key273': '111111111111111111111111111111111111111111111111', 'key270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key278': '161616161616161616161616161616161616161616161616', 'key279': '171717171717171717171717171717171717171717171717', 'key474': 'DADADADADADADADADADADADADADADADADADADADADADADADA', 'key475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg252': '0000000000000008', 'msg253': '0000000000000004', 'msg250': '0000000000000020', 'msg251': '0000000000000010', 'msg256': '0000000000000000', 'msg257': '0101010101010101', 'msg254': '0000000000000002', 'msg255': '0000000000000001', 'msg258': '0202020202020202', 'msg259': '0303030303030303', 'msg494': 'EEEEEEEEEEEEEEEE', 'msg495': 'EFEFEFEFEFEFEFEF', 'msg496': 'F0F0F0F0F0F0F0F0', 'msg497': 'F1F1F1F1F1F1F1F1', 'msg490': 'EAEAEAEAEAEAEAEA', 'msg491': 'EBEBEBEBEBEBEBEB', 'msg492': 'ECECECECECECECEC', 'msg493': 'EDEDEDEDEDEDEDED', 'msg498': 'F2F2F2F2F2F2F2F2', 'msg499': 'F3F3F3F3F3F3F3F3', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'msg24': '0000000000000000', 'msg25': '0000000000000000', 'msg26': '0000000000000000', 'msg27': '0000000000000000', 'cip288': '18A9D580A900B699', 'cip289': '88586E1D755B9B5A', 'cip284': '521B7FB3B41BB791', 'cip285': '26059A6A0F3F6B35', 'cip286': 'F24A8D2231C77538', 'cip287': '4FD96EC0D3304EF6', 'cip280': 'C33FD1EB49CB64DA', 'cip281': '7572278F364EB50D', 'cip282': '69E51488403EF4C3', 'cip283': 'FF847E0ADF192825', 'msg75': '0000000000000000', 'cip448': 'A3B357885B1E16D2', 'cip449': '169F7629C970C1E5', 'cip446': 'E6207B536AAAEFFC', 'cip447': '92AA224372156A00', 'cip444': '46E7EF47323A701D', 'cip445': '8DB18CCD9692F758', 'cip442': '10ADB6E2AB972BBE', 'cip443': 'F91DCAD912332F3B', 'cip440': 'FABBF7C046FD273F', 'cip441': 'B7FE63A61C646F3A', 'cip266': '0A288603044D740C', 'cip267': '6359916942F7438F', 'cip264': '10772D40FAD24257', 'cip265': 'F0139440647A6E7B', 'cip262': '3F5150BBA081D585', 'cip263': 'C65242248C9CF6F2', 'cip260': '1F4570BB77550683', 'cip261': '3990ABF98D672B16', 'cip268': '934316AE443CF08B', 'cip269': 'E3F56D7F1130A2B7', 'cip198': '6CC5DEFAAF04512F', 'cip199': '0D9F279BA5D87260', 'cip190': '869EFD7F9F265A09', 'cip191': '8CA64DE9C1B123A7', 'cip192': '95F8A5E5DD31D900', 'cip193': 'DD7F121CA5015619', 'cip194': '2E8653104F3834EA', 'cip195': '4BD388FF6CD81D4F', 'cip196': '20B9E767B2FB1456', 'cip197': '55579380D77138EF', 'cip70': 'C60F823E8E994489', 'cip71': '8CA64DE9C1B123A7', 'cip72': '709F8FCB044172FE', 'cip73': '26BC2DE634BFFFD4', 'cip74': 'D98126355C2E03E6', 'cip75': '49AAA91B49345137', 'cip76': 'A59854DCE009126D', 'cip77': '21C46B9FDE5CD36B', 'cip78': 'DEB4AE36E07BC053', 'cip79': '8CA64DE9C1B123A7', 'msg106': '0000000000000000', 'msg107': '0000000000000000', 'msg104': '0000000000000000', 'msg105': '0000000000000000', 'msg102': '0000000000000000', 'msg103': '0000000000000000', 'msg100': '0000000000000000', 'msg101': '0000000000000000', 'msg108': '0000000000000000', 'msg109': '0000000000000000', 'key289': '212121212121212121212121212121212121212121212121', 'key288': '202020202020202020202020202020202020202020202020', 'key283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key281': '191919191919191919191919191919191919191919191919', 'key280': '181818181818181818181818181818181818181818181818', 'key287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key512': '000102030405060708090A0B0C0D0E0F1011121314151617', 'key511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key265': '090909090909090909090909090909090909090909090909', 'key264': '080808080808080808080808080808080808080808080808', 'key267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key261': '050505050505050505050505050505050505050505050505', 'key260': '040404040404040404040404040404040404040404040404', 'key263': '070707070707070707070707070707070707070707070707', 'key262': '060606060606060606060606060606060606060606060606', 'key269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key462': 'CECECECECECECECECECECECECECECECECECECECECECECECE', 'key461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'cip510': '66B2B23EA84693AD', 'cip511': '7359B2163E4EDC58', 'cip512': '97A25BA82B564F4C', 'msg241': '0000000000004000', 'msg240': '0000000000008000', 'msg243': '0000000000001000', 'msg242': '0000000000002000', 'msg245': '0000000000000400', 'msg244': '0000000000000800', 'msg247': '0000000000000100', 'msg246': '0000000000000200', 'msg249': '0000000000000040', 'msg248': '0000000000000080', 'msg483': 'E3E3E3E3E3E3E3E3', 'msg482': 'E2E2E2E2E2E2E2E2', 'msg481': 'E1E1E1E1E1E1E1E1', 'msg480': 'E0E0E0E0E0E0E0E0', 'msg487': 'E7E7E7E7E7E7E7E7', 'msg486': 'E6E6E6E6E6E6E6E6', 'msg485': 'E5E5E5E5E5E5E5E5', 'msg484': 'E4E4E4E4E4E4E4E4', 'msg489': 'E9E9E9E9E9E9E9E9', 'msg488': 'E8E8E8E8E8E8E8E8', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'cip299': 'B81634C1CEAB298C', 'cip298': 'DCAD4338F7523816', 'cip293': '3E55E997611E4B7D', 'cip292': '0BA03D9E6C196511', 'cip291': '2F30446C8312404A', 'cip290': '0F8ADFFB11DC2784', 'cip297': '73F0C45F379FE67F', 'cip296': '11A16028F310FF16', 'cip295': '2109425935406AB8', 'cip294': 'B2522FB5F158F0DF', 'cip459': '2DABFEB346794C3D', 'cip458': '4DA91CB4124B67FE', 'cip455': '76BF084C1535A6C6', 'cip454': '1DD4E65AAF7988B4', 'cip457': 'C8078A6148818403', 'cip456': 'AFEC35B09D36315F', 'cip451': 'AE0FEEB0495932C8', 'cip450': '62F44B247CF1348C', 'cip453': '4FB5D5536DA544F4', 'cip452': '72DAF2A7C9EA6803', 'cip275': '2911CF5E94D33FE1', 'cip274': '96CD27784D1563E5', 'cip277': '701AA63832905A92', 'cip276': '377B7F7CA3E5BBB3', 'cip271': 'D5D76E09A447E8C3', 'cip270': 'A2E4705087C6B6B4', 'cip273': 'F40379AB9E0EC533', 'cip272': 'DD7515F2BFC17F85', 'cip279': '452C1197422469F8', 'cip278': '2006E716C4252D6D', 'cip187': '0875041E64C570F7', 'cip186': 'A1AB2190545B91D7', 'cip185': 'D863DBB5C59A91A0', 'cip184': '9CC62DF43B6EED74', 'cip183': '8CA64DE9C1B123A7', 'cip182': 'AE8E5CAA3CA04E85', 'cip181': 'B7FC92F91D8E92E9', 'cip180': 'DA99DBBC9A03F379', 'cip189': 'FCDB3291DE21F0C0', 'cip188': '5A594528BEBEF1CC', 'msg15': '0000000000000000', 'msg14': '0000000000000000', 'msg17': '0000000000000000', 'msg16': '0000000000000000', 'msg11': '0000000000000000', 'msg10': '0000000000000000', 'msg13': '0000000000000000', 'msg12': '0000000000000000', 'msg19': '0000000000000000', 'msg18': '0000000000000000', 'cip89': 'E74CA11808ED17A3', 'cip88': '8CCFCD2418E85750', 'cip85': '78C8CBCAC3B7FD35', 'cip84': '482863934D17804B', 'cip87': '8CA64DE9C1B123A7', 'cip86': '7B8B051E6C8AA8B6', 'cip81': 'D26D9656F91A1EE2', 'cip80': 'D47ADF8B94CACA7A', 'cip83': 'D19BA61DD59CE9A1', 'cip82': 'EE31B8E767C9B337', 'msg115': '0000000000000000', 'msg114': '0000000000000000', 'msg117': '0000000000000000', 'msg116': '0000000000000000', 'msg111': '0000000000000000', 'msg110': '0000000000000000', 'msg113': '0000000000000000', 'msg112': '0000000000000000', 'msg119': '0000000000000000', 'msg118': '0000000000000000', 'msg99': '0000000000000000', 'cip344': '1BEA27FFB72457B7', 'msg95': '0000000000000000', 'cip348': '4927ACC8CE45ECE7', 'key250': '000000000000000000000000000000000000000000000000', 'key251': '000000000000000000000000000000000000000000000000', 'key252': '000000000000000000000000000000000000000000000000', 'key253': '000000000000000000000000000000000000000000000000', 'key254': '000000000000000000000000000000000000000000000000', 'key255': '000000000000000000000000000000000000000000000000', 'key256': '000000000000000000000000000000000000000000000000', 'key257': '010101010101010101010101010101010101010101010101', 'key258': '020202020202020202020202020202020202020202020202', 'key259': '030303030303030303030303030303030303030303030303', 'key382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key386': '828282828282828282828282828282828282828282828282', 'key387': '838383838383838383838383838383838383838383838383', 'key384': '808080808080808080808080808080808080808080808080', 'key385': '818181818181818181818181818181818181818181818181', 'key388': '848484848484848484848484848484848484848484848484', 'key389': '858585858585858585858585858585858585858585858585', 'key498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key492': 'ECECECECECECECECECECECECECECECECECECECECECECECEC', 'key493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg278': '1616161616161616', 'msg279': '1717171717171717', 'msg274': '1212121212121212', 'msg275': '1313131313131313', 'msg276': '1414141414141414', 'msg277': '1515151515151515', 'msg270': '0E0E0E0E0E0E0E0E', 'msg271': '0F0F0F0F0F0F0F0F', 'msg272': '1010101010101010', 'msg273': '1111111111111111', 'msg478': 'DEDEDEDEDEDEDEDE', 'msg479': 'DFDFDFDFDFDFDFDF', 'msg476': 'DCDCDCDCDCDCDCDC', 'msg477': 'DDDDDDDDDDDDDDDD', 'msg474': 'DADADADADADADADA', 'msg475': 'DBDBDBDBDBDBDBDB', 'msg472': 'D8D8D8D8D8D8D8D8', 'msg473': 'D9D9D9D9D9D9D9D9', 'msg470': 'D6D6D6D6D6D6D6D6', 'msg471': 'D7D7D7D7D7D7D7D7', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'cip468': '47E9CB3E3154D673', 'cip469': '2352BCC708ADC7E9', 'cip460': 'FBCD12C790D21CD7', 'cip461': '536873DB879CC770', 'cip462': '9AA159D7309DA7A0', 'cip463': '0B844B9D8C4EA14A', 'cip464': '3BBD84CE539E68C4', 'cip465': 'CF3E4F3E026E2C8E', 'cip466': '82F85885D542AF58', 'cip467': '22D334D6493B3CB6', 'cip240': '1029D55E880EC2D0', 'cip241': '5D86CB23639DBEA9', 'cip242': '1D1CA853AE7C0C5F', 'cip243': 'CE332329248F3228', 'cip244': '8405D1ABE24FB942', 'cip245': 'E643D78090CA4207', 'cip246': '48221B9937748A23', 'cip247': 'DD7C0BBD61FAFD54', 'cip248': '2FBC291A570DB5C4', 'cip249': 'E07C30D7E4E26E12', 'msg296': '2828282828282828', 'msg297': '2929292929292929', 'msg294': '2626262626262626', 'msg295': '2727272727272727', 'msg292': '2424242424242424', 'msg293': '2525252525252525', 'msg290': '2222222222222222', 'msg291': '2323232323232323', 'msg298': '2A2A2A2A2A2A2A2A', 'msg299': '2B2B2B2B2B2B2B2B', 'cip98': '83E55C4A19ABCB56', 'cip99': '96E6A993443B9DD4', 'cip96': 'A9FE6341C8621918', 'cip97': 'CE99FD5D50B22CEF', 'cip94': '7E6C8995AA52D298', 'cip95': '8CA64DE9C1B123A7', 'cip92': 'AD5F11ED913E918C', 'cip93': '3CE4B119BC1FC701', 'cip90': '0A634C7A69897F35', 'cip91': '6C2C0F27E973CE29', 'msg120': '0000000000000000', 'msg121': '0000000000000000', 'msg122': '0000000000000000', 'msg123': '0000000000000000', 'msg124': '0000000000000000', 'msg125': '0000000000000000', 'msg126': '0000000000000000', 'msg127': '0000000000000000', 'msg128': '0000000000000000', 'msg129': '0000000000000000', 'key249': '000000000000000000000000000000000000000000000000', 'key248': '000000000000000000000000000000000000000000000000', 'key247': '000000000000000000000000000000000000000000000000', 'key246': '000000000000000000000000000000000000000000000000', 'key245': '000000000000000000000000000000000000000000000000', 'key244': '000000000000000000000000000000000000000000000000', 'key243': '000000000000000000000000000000000000000000000000', 'key242': '000000000000000000000000000000000000000000000000', 'key241': '000000000000000000000000000000000000000000000000', 'key240': '000000000000000000000000000000000000000000000000', 'key391': '878787878787878787878787878787878787878787878787', 'key390': '868686868686868686868686868686868686868686868686', 'key393': '898989898989898989898989898989898989898989898989', 'key392': '888888888888888888888888888888888888888888888888', 'key395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg269': '0D0D0D0D0D0D0D0D', 'msg268': '0C0C0C0C0C0C0C0C', 'msg263': '0707070707070707', 'msg262': '0606060606060606', 'msg261': '0505050505050505', 'msg260': '0404040404040404', 'msg267': '0B0B0B0B0B0B0B0B', 'msg266': '0A0A0A0A0A0A0A0A', 'msg265': '0909090909090909', 'msg264': '0808080808080808', 'msg469': 'D5D5D5D5D5D5D5D5', 'msg468': 'D4D4D4D4D4D4D4D4', 'msg465': 'D1D1D1D1D1D1D1D1', 'msg464': 'D0D0D0D0D0D0D0D0', 'msg467': 'D3D3D3D3D3D3D3D3', 'msg466': 'D2D2D2D2D2D2D2D2', 'msg461': 'CDCDCDCDCDCDCDCD', 'msg460': 'CCCCCCCCCCCCCCCC', 'msg463': 'CFCFCFCFCFCFCFCF', 'msg462': 'CECECECECECECECE', 'cip509': '1ED83D49E267191D', 'cip508': '67B36E2875D9631C', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'cip477': 'F0752004EE23D87B', 'cip476': 'D0CFBB937CEDBFB5', 'cip475': 'F45FC26193E69AEE', 'cip474': 'C1AA16689EE1B482', 'cip473': '4DADD04A0EA70F20', 'cip472': 'DEF6BDA6CABF9547', 'cip471': 'EE5E9FD70CEF00E9', 'cip470': '8C0F3BA0C8601980', 'cip479': 'E7562A7F56FF4966', 'cip478': '77A791E28AA464A5', 'cip259': '984C91D78A269CE3', 'cip258': 'E127C2B61D98E6E2', 'cip257': '994D4DC157B96C52', 'cip256': '8CA64DE9C1B123A7', 'cip255': '166B40B44ABA4BD6', 'cip254': '06E7EA22CE92708F', 'cip253': 'D2FD8867D50D2DFE', 'cip252': 'CC083F1E6D9E85F6', 'cip251': '5B711BC4CEEBF2EE', 'cip250': '0953E2258E8E90A1', 'msg285': '1D1D1D1D1D1D1D1D', 'msg284': '1C1C1C1C1C1C1C1C', 'msg287': '1F1F1F1F1F1F1F1F', 'msg286': '1E1E1E1E1E1E1E1E', 'msg281': '1919191919191919', 'msg280': '1818181818181818', 'msg283': '1B1B1B1B1B1B1B1B', 'msg282': '1A1A1A1A1A1A1A1A', 'msg289': '2121212121212121', 'msg288': '2020202020202020', 'msg33': '0000000000000000', 'msg32': '0000000000000000', 'msg31': '0000000000000000', 'msg30': '0000000000000000', 'msg37': '0000000000000000', 'msg36': '0000000000000000', 'msg35': '0000000000000000', 'msg34': '0000000000000000', 'msg39': '0000000000000000', 'msg38': '0000000000000000', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '0000000000000000', 'msg138': '0000000000000000', 'msg137': '0000000000000000', 'msg136': '0000000000000000', 'msg135': '0000000000000000', 'msg134': '0000000000000000', 'msg133': '0000000000000000', 'msg132': '0000000000000000', 'msg131': '0000000000000000', 'msg130': '0000000000000000', 'msg77': '0000000000000000', 'key238': '000000000000000000000000000000000000000000000000', 'key239': '000000000000000000000000000000000000000000000000', 'msg76': '0000000000000000', 'key232': '000000000000000000000000000000000000000000000000', 'key233': '000000000000000000000000000000000000000000000000', 'key230': '000000000000000000000000000000000000000000000000', 'key231': '000000000000000000000000000000000000000000000000', 'key236': '000000000000000000000000000000000000000000000000', 'key237': '000000000000000000000000000000000000000000000000', 'key234': '000000000000000000000000000000000000000000000000', 'key235': '000000000000000000000000000000000000000000000000', 'msg74': '0000000000000000', 'msg73': '0000000000000000', 'msg72': '0000000000000000', 'msg71': '0000000000000000', 'msg70': '0000000000000000', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'key346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key344': '585858585858585858585858585858585858585858585858', 'key345': '595959595959595959595959595959595959595959595959', 'key342': '565656565656565656565656565656565656565656565656', 'key343': '575757575757575757575757575757575757575757575757', 'key340': '545454545454545454545454545454545454545454545454', 'key341': '555555555555555555555555555555555555555555555555', 'key348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg79': '0000000000000000', 'msg78': '0000000000000000', 'msg458': 'CACACACACACACACA', 'msg459': 'CBCBCBCBCBCBCBCB', 'msg450': 'C2C2C2C2C2C2C2C2', 'msg451': 'C3C3C3C3C3C3C3C3', 'msg452': 'C4C4C4C4C4C4C4C4', 'msg453': 'C5C5C5C5C5C5C5C5', 'msg454': 'C6C6C6C6C6C6C6C6', 'msg455': 'C7C7C7C7C7C7C7C7', 'msg456': 'C8C8C8C8C8C8C8C8', 'msg457': 'C9C9C9C9C9C9C9C9', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'key149': '000000000000000000000000000000000000040000000000', 'cip402': '5B365F2FB2CD7F32', 'cip403': 'F0B00B264381DDBB', 'cip400': 'EEA24369A19F6937', 'cip401': '6050D369017B6E62', 'cip406': 'A020003C5554F34C', 'cip407': '6118FCEBD407281D', 'cip404': 'E1D23881C957B96C', 'cip405': 'D936BF54ECA8BDCE', 'cip408': '072E328C984DE4A2', 'cip409': '1440B7EF9E63D3AA', 'cip228': 'CA3A2B036DBC8502', 'key147': '000000000000000000000000000000000000100000000000', 'cip222': 'E428581186EC8F46', 'cip223': 'AEB5F5EDE22D1A36', 'cip220': 'D106FF0BED5255D7', 'cip221': 'E1652C6B138C64A5', 'cip226': 'B160E4680F6C696F', 'cip227': 'FA0752B07D9C4AB8', 'cip224': 'E943D7568AEC0C5C', 'cip225': 'DF98C8276F54B04B', 'msg28': '0000000000000000', 'msg29': '0000000000000000', 'cip318': 'E96089D6368F3E1A', 'cip319': '5C4CA877A4E1E92D', 'cip316': '51F0114FB6A6CD37', 'cip317': '9D0BB4DB830ECB73', 'cip314': 'B04A2AAC925ABB0B', 'cip315': '8D250D58361597FC', 'cip312': '8940F7B3EACA5939', 'cip313': 'E22B19A55086774B', 'cip310': '37F8759EB77E7BFC', 'cip311': '5013CA4F62C9CEA0', 'cip136': '2055123350C00858', 'cip137': 'DF3B99D6577397C8', 'cip134': '4615AA1D33E72F10', 'cip135': '8CA64DE9C1B123A7', 'cip132': '809F5F873C1FD761', 'cip133': 'C02FAFFEC989D1FC', 'cip130': '7AD16FFB79C45926', 'cip131': 'D3746294CA6A6CF3', 'cip138': '31FE17369B5288C9', 'cip139': 'DFDD3CC64DAE1642', 'msg148': '0000000000000000', 'msg149': '0000000000000000', 'msg142': '0000000000000000', 'msg143': '0000000000000000', 'msg140': '0000000000000000', 'msg141': '0000000000000000', 'msg146': '0000000000000000', 'msg147': '0000000000000000', 'msg144': '0000000000000000', 'msg145': '0000000000000000', 'key229': '000000000000000000000000000000000000000000000000', 'key228': '000000000000000000000000000000000000000000000000', 'key221': '000000000000000000000000000000000000000000000000', 'key220': '000000000000000000000000000000000000000000000000', 'key223': '000000000000000000000000000000000000000000000000', 'key222': '000000000000000000000000000000000000000000000000', 'key225': '000000000000000000000000000000000000000000000000', 'key224': '000000000000000000000000000000000000000000000000', 'key227': '000000000000000000000000000000000000000000000000', 'key226': '000000000000000000000000000000000000000000000000', 'key139': '000000000000000000000000000000000010000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'key355': '636363636363636363636363636363636363636363636363', 'key354': '626262626262626262626262626262626262626262626262', 'key357': '656565656565656565656565656565656565656565656565', 'key356': '646464646464646464646464646464646464646464646464', 'key351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key353': '616161616161616161616161616161616161616161616161', 'key352': '606060606060606060606060606060606060606060606060', 'msg20': '0000000000000000', 'key359': '676767676767676767676767676767676767676767676767', 'key358': '666666666666666666666666666666666666666666666666', 'msg21': '0000000000000000', 'msg22': '0000000000000000', 'msg23': '0000000000000000', 'msg447': 'BFBFBFBFBFBFBFBF', 'msg446': 'BEBEBEBEBEBEBEBE', 'msg445': 'BDBDBDBDBDBDBDBD', 'msg444': 'BCBCBCBCBCBCBCBC', 'msg443': 'BBBBBBBBBBBBBBBB', 'msg442': 'BABABABABABABABA', 'msg441': 'B9B9B9B9B9B9B9B9', 'msg440': 'B8B8B8B8B8B8B8B8', 'msg449': 'C1C1C1C1C1C1C1C1', 'msg448': 'C0C0C0C0C0C0C0C0', 'key44': '000000000008000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'key47': '000000000001000000000000000000000000000000000000', 'key40': '000000000080000000000000000000000000000000000000', 'key41': '000000000040000000000000000000000000000000000000', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip411': 'C50E8FC289BBD876', 'cip410': '79BFA264BDA57373', 'cip413': '4B8919B667BD53AB', 'cip412': 'A399D3D63E169FA9', 'cip415': 'E40E81FF3F618340', 'cip414': 'D66CDCAF3F6724A2', 'cip417': '6446C5769D8409A0', 'cip416': '10EDB8977B348B35', 'cip419': 'B6D8533731BA1318', 'cip418': '17ED1191CA8D67A3', 'cip239': '8DD45A2DDF90796C', 'cip238': 'CAFFC6AC4542DE31', 'cip231': '4D49DB1532919C9F', 'cip230': '814EEB3B91D90726', 'cip233': 'AB6A20C0620D1C6F', 'cip232': '25EB5FC3F8CF0621', 'cip235': '866ECEDD8072BB0E', 'cip234': '79E90DBC98F92CCA', 'cip237': 'EA51D3975595B86B', 'cip236': '8B54536F2F3E64A8', 'msg59': '0000000000000000', 'msg58': '0000000000000000', 'cip309': 'B256E34BEDB49801', 'cip308': 'D254014CB986B3C2', 'msg51': '0000000000000000', 'msg50': '0000000000000000', 'msg53': '0000000000000000', 'msg52': '0000000000000000', 'msg55': '0000000000000000', 'msg54': '0000000000000000', 'msg57': '0000000000000000', 'msg56': '0000000000000000', 'cip125': 'EF840B00DA448234', 'cip124': 'DF4A77123610F2B1', 'cip127': '8CA64DE9C1B123A7', 'cip126': 'FFCCC32A699CB7C5', 'cip121': '502CD2BF4FC0B793', 'cip120': '46F5E7077CB869A8', 'cip123': '52710C55818FAF52', 'cip122': 'C0278007230589E4', 'cip129': '0EEC1487DD8C26D5', 'cip128': '95A8D72813DAA94D', 'msg159': '0000000000000000', 'msg158': '0000000000000000', 'msg151': '0000000000000000', 'msg150': '0000000000000000', 'msg153': '0000000000000000', 'msg152': '0000000000000000', 'msg155': '0000000000000000', 'msg154': '0000000000000000', 'msg157': '0000000000000000', 'msg156': '0000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'key360': '686868686868686868686868686868686868686868686868', 'key361': '696969696969696969696969696969696969696969696969', 'key362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key368': '707070707070707070707070707070707070707070707070', 'key369': '717171717171717171717171717171717171717171717171', 'key214': '000000000000000000000000000000000000000000000000', 'key215': '000000000000000000000000000000000000000000000000', 'key216': '000000000000000000000000000000000000000000000000', 'key217': '000000000000000000000000000000000000000000000000', 'key210': '000000000000000000000000000000000000000000000000', 'key211': '000000000000000000000000000000000000000000000000', 'key212': '000000000000000000000000000000000000000000000000', 'key213': '000000000000000000000000000000000000000000000000', 'key218': '000000000000000000000000000000000000000000000000', 'key219': '000000000000000000000000000000000000000000000000', 'msg432': 'B0B0B0B0B0B0B0B0', 'msg433': 'B1B1B1B1B1B1B1B1', 'msg430': 'AEAEAEAEAEAEAEAE', 'msg431': 'AFAFAFAFAFAFAFAF', 'msg436': 'B4B4B4B4B4B4B4B4', 'msg437': 'B5B5B5B5B5B5B5B5', 'msg434': 'B2B2B2B2B2B2B2B2', 'msg435': 'B3B3B3B3B3B3B3B3', 'msg438': 'B6B6B6B6B6B6B6B6', 'msg439': 'B7B7B7B7B7B7B7B7', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'msg388': '8484848484848484', 'msg389': '8585858585858585', 'msg384': '8080808080808080', 'msg385': '8181818181818181', 'msg386': '8282828282828282', 'msg387': '8383838383838383', 'msg380': '7C7C7C7C7C7C7C7C', 'msg381': '7D7D7D7D7D7D7D7D', 'msg382': '7E7E7E7E7E7E7E7E', 'msg383': '7F7F7F7F7F7F7F7F', 'cip305': '655EA628CF62585F', 'cip304': 'F47BB46273B15EB5', 'cip307': '0432ED386F2DE328', 'cip306': 'AC978C247863388F', 'cip428': 'EEAAC6D17880BD56', 'cip429': '3C9A34CA4CB49EEB', 'cip424': '26F88D30C0FB8302', 'cip301': '7D07A77A2ABD50A7', 'cip426': 'C4322BE19E9A5A17', 'cip427': 'ACE41A06BFA258EA', 'cip420': 'CA439007C7245CD0', 'cip421': '06FC7FDE1C8389E7', 'cip422': '7A3C1F3BD60CB3D8', 'cip300': 'DD2CCB29B6C4C349', 'cip303': 'C4427B31AC61973B', 'cip302': '30C1B0C1FD91D371', 'cip338': 'C365CB35B34B6114', 'cip339': '1155392E877F42A9', 'msg48': '0000000000000000', 'msg49': '0000000000000000', 'msg42': '0000000000000000', 'msg43': '0000000000000000', 'msg40': '0000000000000000', 'cip333': 'C78FC45A1DCEA2E2', 'cip334': 'DB96D88C3460D801', 'cip335': '6C69E720F5105518', 'cip336': '0D262E418BC893F3', 'cip337': '6AD84FD7848A0A5C', 'cip110': '4871C3B7436121DE', 'cip111': '8CA64DE9C1B123A7', 'cip112': '41BBC8EF36654838', 'cip113': 'FCBD166CA0EA87E2', 'cip114': '9DFFC6EE9751B5CF', 'cip115': 'C01B7878EBCE8DD3', 'cip116': '357E5A4DC162D715', 'cip117': '268F93CAEB248E2E', 'cip118': 'A5D4174744B84E7D', 'cip119': '8CA64DE9C1B123A7', 'msg164': '0000000000000000', 'msg165': '0000000000000000', 'msg166': '0000000000000000', 'msg167': '0000000000000000', 'msg160': '0000000000000000', 'msg161': '0000000000000000', 'msg162': '0000000000000000', 'msg163': '0000000000000000', 'msg168': '0000000000000000', 'msg169': '0000000000000000', 'msg366': '6E6E6E6E6E6E6E6E', 'msg367': '6F6F6F6F6F6F6F6F', 'msg364': '6C6C6C6C6C6C6C6C', 'msg365': '6D6D6D6D6D6D6D6D', 'msg362': '6A6A6A6A6A6A6A6A', 'msg363': '6B6B6B6B6B6B6B6B', 'msg360': '6868686868686868', 'msg361': '6969696969696969', 'msg368': '7070707070707070', 'msg369': '7171717171717171', 'cip204': 'ADD0CC8D6E5DEBA1', 'cip205': 'E6D5F82752AD63D1', 'cip206': 'ECBFE3BD3F591A5E', 'cip207': 'F356834379D165CD', 'cip200': 'D9031B0271BD5A0A', 'cip201': '424250B37C3DD951', 'cip202': 'B8061B7ECD9A21E5', 'cip203': 'F15D0F286B65BD28', 'cip208': '2B9F982F20037FA9', 'cip209': '889DE068A16F0BE6', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key377': '797979797979797979797979797979797979797979797979', 'key376': '787878787878787878787878787878787878787878787878', 'key375': '777777777777777777777777777777777777777777777777', 'key374': '767676767676767676767676767676767676767676767676', 'key373': '757575757575757575757575757575757575757575757575', 'key372': '747474747474747474747474747474747474747474747474', 'key371': '737373737373737373737373737373737373737373737373', 'key370': '727272727272727272727272727272727272727272727272', 'key203': '000000000000000000000000000000000000000000000000', 'key202': '000000000000000000000000000000000000000000000000', 'key201': '000000000000000000000000000000000000000000000000', 'key200': '000000000000000000000000000000000000000000000000', 'key207': '000000000000000000000000000000000000000000000000', 'key206': '000000000000000000000000000000000000000000000000', 'key205': '000000000000000000000000000000000000000000000000', 'key204': '000000000000000000000000000000000000000000000000', 'key209': '000000000000000000000000000000000000000000000000', 'key208': '000000000000000000000000000000000000000000000000', 'cip501': 'F5D779FCFBB28BF3', 'cip500': '9CA66E96BD08BC70', 'cip507': 'E0BA8F4488AAF97C', 'cip506': 'C66F54067298D4E9', 'cip505': 'C0AEAF445F7E2A7A', 'cip504': '39ADBDDB7363090D', 'msg421': 'A5A5A5A5A5A5A5A5', 'msg420': 'A4A4A4A4A4A4A4A4', 'msg423': 'A7A7A7A7A7A7A7A7', 'msg422': 'A6A6A6A6A6A6A6A6', 'msg425': 'A9A9A9A9A9A9A9A9', 'msg424': 'A8A8A8A8A8A8A8A8', 'msg427': 'ABABABABABABABAB', 'msg426': 'AAAAAAAAAAAAAAAA', 'msg429': 'ADADADADADADADAD', 'msg428': 'ACACACACACACACAC', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'key26': '000000200000000000000000000000000000000000000000', 'key27': '000000100000000000000000000000000000000000000000', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'msg399': '8F8F8F8F8F8F8F8F', 'msg398': '8E8E8E8E8E8E8E8E', 'msg393': '8989898989898989', 'msg392': '8888888888888888', 'msg391': '8787878787878787', 'msg390': '8686868686868686', 'msg397': '8D8D8D8D8D8D8D8D', 'msg396': '8C8C8C8C8C8C8C8C', 'msg395': '8B8B8B8B8B8B8B8B', 'msg394': '8A8A8A8A8A8A8A8A', 'cip439': '9C4EA352599731ED', 'cip438': '1533F3ED9BE8EF8E', 'cip433': '24692773CB9F27FE', 'cip432': '939618DF0AEFAAE7', 'cip431': 'F2D9D1BE74376C0C', 'cip430': '9527B0287B75F5A3', 'cip437': '62D473F539FA0D8B', 'cip436': '36F0D0B3675704D5', 'cip435': 'FCB7E4B7D702E2FB', 'cip434': '38703BA5E2315D1D', 'cip327': '0544083FB902D8C0', 'cip326': '48019C59E39B90C5', 'cip325': 'EF52491D5468D441', 'cip324': '06E23526EDCCD0C4', 'cip323': 'B91810B8CDC58FE2', 'cip322': '724E7332696D08A7', 'cip321': '19DF84AC95551003', 'cip320': '6D55DDBC8DEA95FF', 'cip329': 'EACC0C1264171071', 'cip328': '63B15CADA668CE12', 'cip109': '67DB327ED5DF89E3', 'cip108': '270A943BEABEA8EC', 'cip107': '7497A098AA651D00', 'cip106': 'FF7B0E870FB1FD0B', 'cip105': 'A5AB6F6EB66057A9', 'cip104': '60B4B8E3A8F5CBEC', 'cip103': '8CA64DE9C1B123A7', 'cip102': 'AC8B09EC3153D57B', 'cip101': 'D9EF04E272D1A78A', 'cip100': '6781B65D74A6B9FB', 'msg173': '0000000000000000', 'msg172': '0000000000000000', 'msg171': '0000000000000000', 'msg170': '0000000000000000', 'msg177': '0000000000000000', 'msg176': '0000000000000000', 'msg175': '0000000000000000', 'msg174': '0000000000000000', 'msg179': '0000000000000000', 'msg178': '0000000000000000', 'msg375': '7777777777777777', 'msg374': '7676767676767676', 'msg377': '7979797979797979', 'msg376': '7878787878787878', 'msg371': '7373737373737373', 'msg370': '7272727272727272', 'msg373': '7575757575757575', 'msg372': '7474747474747474', 'msg379': '7B7B7B7B7B7B7B7B', 'msg378': '7A7A7A7A7A7A7A7A', 'cip213': '12A9F5817FF2D65D', 'cip212': 'E7FCE22557D23C97', 'cip211': '329A8ED523D71AEC', 'cip210': 'E19E275D846A1298', 'cip217': '64FEED9C724C2FAF', 'cip216': '750D079407521363', 'cip215': 'FBE00A8A1EF8AD72', 'cip214': 'A484C3AD38DC9C19', 'cip219': '9D64555A9A10B852', 'cip218': 'F02B263B328E2B60', 'msg86': '0000000000000000', 'cip375': '89D3BF37052162E9', 'cip376': '80D9230BDAEB67DC', 'cip377': '3440911019AD68D7', 'cip370': '415D81C86AF9C376', 'cip371': '8DFB864FDB3C6811', 'cip372': '10B1C170E3398F91', 'msg81': '0000000000000000', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'key308': '343434343434343434343434343434343434343434343434', 'key309': '353535353535353535353535353535353535353535353535', 'key302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key306': '323232323232323232323232323232323232323232323232', 'key307': '333333333333333333333333333333333333333333333333', 'key304': '303030303030303030303030303030303030303030303030', 'key305': '313131313131313131313131313131313131313131313131', 'key416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3'}
 
#Serpent
dict_serpent128 = {'msg418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'msg415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': 'F63284B09D2B068CA864AADAE5022ADF', 'cip355': 'E6CBEBD8313EE854739D5ADEA063F42A', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'A88517D3A0BBAE0CB9D7A47B005F2B8F', 'cip359': '3FB64F9080A0649EE0BA983F4C6D85F8', 'cip178': '8E2444DDF34F5320A150471E01AC2F85', 'cip179': '9CB3B00CA62767D7A1D45AF44D74957F', 'cip172': 'C9F389C56576B8C74A687BC5AAB8D503', 'cip173': '3FB63882764779902321A2E594275C6B', 'cip170': 'AA9F1568B6D0F5AFAC34847E0D7152B2', 'cip171': 'A96B20E51FCB48A0C58306086094154B', 'cip176': 'C80F1E35ED81AC45835129665CA5C0B5', 'cip177': '27FE1A77E6BF18887DBF7D48FC1EAB65', 'cip174': '160C3C22EF0B0D3E4F2FDC914138C229', 'cip175': '265AC0BE8E47750E7CA22BAF01153B4D', 'msg188': '00000000000000080000000000000000', 'msg189': '00000000000000040000000000000000', 'msg186': '00000000000000200000000000000000', 'msg187': '00000000000000100000000000000000', 'msg184': '00000000000000800000000000000000', 'msg185': '00000000000000400000000000000000', 'msg182': '00000000000002000000000000000000', 'msg183': '00000000000001000000000000000000', 'msg180': '00000000000008000000000000000000', 'msg181': '00000000000004000000000000000000', 'msg340': '54545454545454545454545454545454', 'msg341': '55555555555555555555555555555555', 'msg342': '56565656565656565656565656565656', 'msg343': '57575757575757575757575757575757', 'msg344': '58585858585858585858585858585858', 'msg345': '59595959595959595959595959595959', 'msg346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'cip16': 'A3C980B5DA0B8E3B32818AF08F5310DA', 'cip17': '12651FD76182C532CD03B36DD121A43A', 'cip14': 'CF5CE38D2033AD6E6891ED24DB39EA66', 'cip15': '3E63AF44877F258840B165CC3D47424C', 'cip12': 'CFBD333352A34ED7F73D3E569D78C693', 'cip13': '5F04350AB2EFB6075F381EE1DBB8477F', 'cip10': '1426ABD1FE61695A62B7A55AB5DA6145', 'cip11': '80C615975140248186BE3CD6FD8D7740', 'cip18': '6D91A4600722340B8ECAE1055B8DF790', 'cip19': '2B1F49C97807430719A958271B5DA303', 'key171': '00000000000000000000000000000000', 'key170': '00000000000000000000000000000000', 'key173': '00000000000000000000000000000000', 'key172': '00000000000000000000000000000000', 'key175': '00000000000000000000000000000000', 'key174': '00000000000000000000000000000000', 'key177': '00000000000000000000000000000000', 'key176': '00000000000000000000000000000000', 'key179': '00000000000000000000000000000000', 'key178': '00000000000000000000000000000000', 'key319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key311': '37373737373737373737373737373737', 'key310': '36363636363636363636363636363636', 'key313': '39393939393939393939393939393939', 'key312': '38383838383838383838383838383838', 'key315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key405': '95959595959595959595959595959595', 'key404': '94949494949494949494949494949494', 'key407': '97979797979797979797979797979797', 'key406': '96969696969696969696969696969696', 'key401': '91919191919191919191919191919191', 'key400': '90909090909090909090909090909090', 'key403': '93939393939393939393939393939393', 'key402': '92929292929292929292929292929292', 'key409': '99999999999999999999999999999999', 'key408': '98989898989898989898989898989898', 'msg409': '99999999999999999999999999999999', 'msg408': '98989898989898989898989898989898', 'msg403': '93939393939393939393939393939393', 'msg402': '92929292929292929292929292929292', 'msg401': '91919191919191919191919191919191', 'msg400': '90909090909090909090909090909090', 'msg407': '97979797979797979797979797979797', 'msg406': '96969696969696969696969696969696', 'msg405': '95959595959595959595959595959595', 'msg404': '94949494949494949494949494949494', 'cip4': '34B355520DF861F3F5C66A2379FBDA15', 'cip5': '5E86BB8F6B1175510C6B244281A0B04A', 'cip6': 'B9213190C7A9C5F13764D29B6DE843A1', 'cip7': '4ECA55033294D1FF6F0204B2456046C8', 'cip0': '264E5481EFF42A4606ABDA06C0BFDA3D', 'cip1': '4A231B3BC727993407AC6EC8350E8524', 'cip2': 'E03269F9E9FD853C7D8156DF14B98D56', 'cip3': 'A798181C3081AC59D5BA89754DACC48F', 'cip8': '97BACE474E820FDEEB1E66D06139D2F9', 'cip9': '114CB849EC2735AEECDB2E51A1C45A38', 'cip341': '7113B6347D1BEF61A1ABFAC6266B742B', 'cip340': '5BC5238384E5215EA05B27369823F13A', 'cip343': 'B2AA117852CEBD61EBB134C1BB5818E5', 'cip342': '2E76A05B140556ACDDC435042390A9A9', 'cip345': '018E19F636DCB8E1E71EF446906B103A', 'msg98': '00000000000000000000000000000000', 'cip347': 'C576DD22DC0AD2693F274C4867CC3C02', 'cip346': 'C657A2E7024A51C7ABC4B97BEA889AAE', 'cip349': 'FDD402F505C7FB226AC3DEBEDA7B823C', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip169': 'B969F1B6F56E885025F12E58F87B4099', 'cip168': '6801BAF0FBAF3352F3950F0940173352', 'cip161': 'E47D5889218FF4CE45EA249EDC9B71C7', 'cip160': 'C1842F4CA2DDC78E55CD91E07AD23A12', 'cip163': '5FBF0927A8B293A04024B187AB1BF6C1', 'cip162': 'FB7566732AB52FE99454CFB07A0F1F0A', 'cip165': 'CD3EEEBA162879FF20ABD158C236E3F3', 'cip164': 'CFFBC514515878E10E07556988D8E721', 'cip167': 'BDB475694748128D9959141682174CAF', 'cip166': 'F96D1082131DAE899EBD32CC562F0BB9', 'msg199': '00000000000000000100000000000000', 'msg198': '00000000000000000200000000000000', 'msg195': '00000000000000001000000000000000', 'msg194': '00000000000000002000000000000000', 'msg197': '00000000000000000400000000000000', 'msg196': '00000000000000000800000000000000', 'msg191': '00000000000000010000000000000000', 'msg190': '00000000000000020000000000000000', 'msg193': '00000000000000004000000000000000', 'msg192': '00000000000000008000000000000000', 'msg359': '67676767676767676767676767676767', 'msg358': '66666666666666666666666666666666', 'msg357': '65656565656565656565656565656565', 'msg356': '64646464646464646464646464646464', 'msg355': '63636363636363636363636363636363', 'msg354': '62626262626262626262626262626262', 'msg353': '61616161616161616161616161616161', 'msg352': '60606060606060606060606060606060', 'msg351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'cip23': '8EFA3AC040AC5235F2F4AC3A82B7018E', 'cip22': '158B5F6CBB33E547735E45559CEF3E5B', 'cip21': '5B8FF678F88EB96FE73BCBF14AD9304B', 'cip20': '9E29DADC12AA1ED228CDC78D70C829B7', 'cip27': '17E352C6C963F7DA5A1CB163ACCB8573', 'cip26': 'D46BA09B00007974C24FC8C0CB13330D', 'cip25': '7511818C4C8408EB0AF22019DDF7F6F6', 'cip24': '50AA945A945A8BE43E4C137F0D7CA62A', 'cip29': 'AD351E157AFC89A9C0D8CF15DDBF3A7D', 'cip28': '6CED1C994D0F7B2862715D514840A780', 'cip352': '29117FA8B347C7A9A4CE899C5A546548', 'cip353': '6BD6EFD76B760609F786753E0C9DAA12', 'cip350': '498CD0B199A3D7FFDE132B44DB20D8DE', 'cip351': '78F3E0CF077ECFDDC2A52F28A2BD0828', 'cip356': 'FC29321AF873B7F65BFA66103CA960B6', 'cip357': '3EC850EE464D2084E4C33B5072EC7DC2', 'key148': '00000000000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'key144': '00000000000000000000000000000000', 'key145': '00000000000000000000000000000000', 'key146': '00000000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'key140': '00000000000000000000000000000000', 'key141': '00000000000000000000000000000000', 'key142': '00000000000000000000000000000000', 'key143': '00000000000000000000000000000000', 'key430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key324': '44444444444444444444444444444444', 'key325': '45454545454545454545454545454545', 'key326': '46464646464646464646464646464646', 'key327': '47474747474747474747474747474747', 'key320': '40404040404040404040404040404040', 'key321': '41414141414141414141414141414141', 'key322': '42424242424242424242424242424242', 'key323': '43434343434343434343434343434343', 'key328': '48484848484848484848484848484848', 'key329': '49494949494949494949494949494949', 'msg502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'msg507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'cip488': '51094B8DD6D357EA7BCD4A70AB148DCF', 'cip489': '6F94D10569A2D4E911D88493A757ADB8', 'cip482': '6E13DB429B9F11618C9201F8FCE986F8', 'cip483': '781B7DCD5AA2A773586E43816CD0156D', 'cip480': '7461AEAB059182BE62CF3D6A04C99AD8', 'cip481': 'A251481E0DB2C65A80C5765017575551', 'cip486': '1AF2F44B2FE11A0138232245E0372583', 'cip487': '47DCFCBFB9C6D51DD02A8CA38EE30462', 'cip484': 'B54A1570C73639E3A1799116ADCD109B', 'cip485': 'B9CF1DAF99FE593DCC840B4EBA7460E3', 'msg218': '00000000000000000000002000000000', 'msg219': '00000000000000000000001000000000', 'msg216': '00000000000000000000008000000000', 'msg217': '00000000000000000000004000000000', 'msg214': '00000000000000000000020000000000', 'msg215': '00000000000000000000010000000000', 'msg212': '00000000000000000000080000000000', 'msg213': '00000000000000000000040000000000', 'msg210': '00000000000000000000200000000000', 'msg211': '00000000000000000000100000000000', 'cip378': '242491C4A74BAE34EFD1C1F2B110156E', 'cip379': 'FE0647492C2E820F70030FDC7B26BE91', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': 'D408A940C87BD22AFD6037CE68486067', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': '373C7DB642302E74A1348B7C890AA164', 'cip396': '3905397B0D4DE6E95F4A8BD587DA58F8', 'cip397': '2250AB3B666DEEFC346D1DAB7E2CE09E', 'cip394': 'EAFC5BBE584E87D8FFD5520CA3002CE8', 'cip395': '1BC5B6D54B80C84688E2BD7C647D8EA5', 'cip392': '4E6CD7AEAFC8F51CF438029F42A43DEC', 'cip393': 'AA481BE373338B5EA19ED4932F9C1A81', 'cip390': 'C3DCD2DAC02FA812F9B8A109E8D80C77', 'cip391': 'C57A0A8D9201040267FF1F866B6237EB', 'cip398': '8243E0EFCED8E173AA64FE34A4BB2043', 'cip399': 'C169078C4C77D3D985EF66D5B3A4E6FA', 'msg328': '48484848484848484848484848484848', 'msg329': '49494949494949494949494949494949', 'msg322': '42424242424242424242424242424242', 'msg323': '43434343434343434343434343434343', 'msg320': '40404040404040404040404040404040', 'msg321': '41414141414141414141414141414141', 'msg326': '46464646464646464646464646464646', 'msg327': '47474747474747474747474747474747', 'msg324': '44444444444444444444444444444444', 'msg325': '45454545454545454545454545454545', 'cip154': 'F20B001C13A0F857FB89C64FFF4CDA83', 'cip155': 'F38EE20A32B15A5B9129B67BA1FF3125', 'cip156': '41ED367E96E013C651AF3FAEA764FE40', 'cip157': '55C30FBD291D89E50A9DADCB48E52296', 'cip150': 'E9732D7A112DE03068EC10D10AF8D972', 'cip151': '1D17312BE6675B0797C5175DDCC1DE7E', 'cip152': 'A5E0C2E39B9821F2CD42875B0EC0A65E', 'cip153': 'A1397FFDA7C2A4E9A60E0AB48947B933', 'cip158': '3FE7F1A404C0E4395FCC985F369735D4', 'cip159': '6E131502B6A4F30B56AA52EB67989809', 'cip38': '6C4FCEEFF2768549EA590FC20310B95D', 'cip39': 'FC46909BE47E944F4776956A98E9C43B', 'cip34': '72F3659183D9749128AE6CAFBEAADDE5', 'cip35': '77DD6EA2D669A36E4C409564A8604EC4', 'cip36': '27D4EC7E2AE30CBE54B7CE9F764E3D27', 'cip37': '0D68C4922498D08BFEFA450B85659D23', 'cip30': '79AFB080BADC325DA8C5E88200743603', 'cip31': 'D326FEA25FE2CA220CEC62DB9574AAFD', 'cip32': '7435911B23F1DBACA5BF86C91B0D11B1', 'cip33': '79E59CE5B78A6D8259B2AD1B5F50F523', 'key159': '00000000000000000000000000000000', 'key158': '00000000000000000000000000000000', 'key153': '00000000000000000000000000000000', 'key152': '00000000000000000000000000000000', 'key151': '00000000000000000000000000000000', 'key150': '00000000000000000000000000000000', 'key157': '00000000000000000000000000000000', 'key156': '00000000000000000000000000000000', 'key155': '00000000000000000000000000000000', 'key154': '00000000000000000000000000000000', 'key429': 'ADADADADADADADADADADADADADADADAD', 'key428': 'ACACACACACACACACACACACACACACACAC', 'key427': 'ABABABABABABABABABABABABABABABAB', 'key426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key337': '51515151515151515151515151515151', 'key336': '50505050505050505050505050505050', 'key335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key339': '53535353535353535353535353535353', 'key338': '52525252525252525252525252525252', 'msg511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg512': '00112233445566778899AABBCCDDEEFF', 'cip499': '2F46D95D6D25791FDA09C1E503E9566B', 'cip498': 'FA94663C5C0F660B39DDC1189DA09FC9', 'cip491': '06E1609FD3BC7C33D0C2BDD3B46F2A3B', 'cip490': 'DE905E9FA7B1EE84E29113B98078ACFB', 'cip493': '584DCDFC72000E4035FC9EECAACFCF89', 'cip492': 'DC5A1E0B000C5E91ADC6DF83CDC7FF78', 'cip495': '970C3BB7760251463CB3AA412BB0B4E8', 'cip494': 'E65041269FADE5588AF5A044C0DFBCB1', 'cip497': 'F63EE17EAFFB3D08F973E7E70072266C', 'cip496': '2CF1433C1B5DB42882255D1C4705E59D', 'msg209': '00000000000000000000400000000000', 'msg208': '00000000000000000000800000000000', 'msg205': '00000000000000000004000000000000', 'msg204': '00000000000000000008000000000000', 'msg207': '00000000000000000001000000000000', 'msg206': '00000000000000000002000000000000', 'msg201': '00000000000000000040000000000000', 'msg200': '00000000000000000080000000000000', 'msg203': '00000000000000000010000000000000', 'msg202': '00000000000000000020000000000000', 'cip369': 'C518589021D783FD30617AA6E22E8419', 'cip368': 'F0E795E437BE07332E777EB4A2CA18F4', 'cip363': 'C2E3BF83E2A94E776D216E079472A792', 'cip362': '4BAF4E9D2D30921BD09FF58871961F46', 'cip361': '2CA8018408BF5A6F0653DE69E9AB4C23', 'cip360': '1F5EC3E78ADA38C7C2A874D777E5C47A', 'cip367': 'A9CAD0B9D6EA5C241882FCC70434CBD1', 'cip366': '02E540157EC71EEE5A20FE40F9337BBF', 'cip365': 'C884208DA1A05932109602B969349B54', 'cip364': 'EBB64A42067013DEC1DCE3197A1E478D', 'cip425': '87AFF541F18316E02E020DBC78C97F76', 'cip385': 'AB1C9035B040DD6113D083283CA6BAAB', 'cip384': 'C4FAF7787CABBF3EAA8995592638E1D1', 'cip387': 'F40DABF93E41C5EC5A5786F704B7DC34', 'cip386': 'A64ED14F4D91A1BF278F7567E5DCCEC9', 'cip381': 'A080B58F3C824C4695E7F595181882B4', 'cip380': '037BBA00BE778BE88B9C5266F1CA249A', 'cip383': '279957819359DE247D1E399DE541BDEC', 'cip382': '4AFC161FD6FA20D44B3C85A9876CD716', 'cip389': '20BA1C8B044E44306B5DA155C4E66475', 'cip388': '3DBAFDA4D53AAFEB3991849CFE08A2E7', 'cip423': '4CF3189FE08EB2CE97D6A206E088EB06', 'msg339': '53535353535353535353535353535353', 'msg338': '52525252525252525252525252525252', 'msg331': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg330': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg333': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg332': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg335': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg334': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg337': '51515151515151515151515151515151', 'msg336': '50505050505050505050505050505050', 'cip143': 'BFF82E042A92224FBD3D41C22D07B610', 'cip142': '6C2C4F22E738C56B5246971540E5E3A1', 'cip141': '5F93FBFB11A527DFDFB5E4713E431E34', 'cip140': 'DE2FCC081DF9B136EC62922351E18D94', 'cip147': '87DCE0F133442B7D4FAF7082F5489407', 'cip146': '1DFF6937399E060342348C34E88B5985', 'cip145': '7C6DF10118A3AB6545A504790543C89E', 'cip144': '3EA36D91871DFF568FBE623DC31EBCE5', 'cip149': 'DF23BC0E0C0B7F502E0210AF8B353165', 'cip148': 'CBEF868AE34C80C542766358534A148B', 'cip49': '32B7E10E04100FCDA94DC223BBC19075', 'cip48': '1F6213DC933AEF4C582AAD041E140619', 'cip41': '548091B07326BF829BA56C786053727F', 'cip40': '77679D9E63DB7DF79C0484423FA18A57', 'cip43': '627F14CA091AC156FB56302D6C3373DC', 'cip42': 'A8FA704EE06EEED6F7F71A598EF921FB', 'cip45': 'CC7F5DF0CF522B2242163112E4421D08', 'cip44': 'BC2CAB97EB09919CBC0E6AFEC6581CF5', 'cip47': 'D3C6597474B740BA1053090A247AB5C5', 'cip46': '084AC3BF07F1E64F0093A014C2690CE5', 'key180': '00000000000000000000000000000000', 'key181': '00000000000000000000000000000000', 'key182': '00000000000000000000000000000000', 'key183': '00000000000000000000000000000000', 'key184': '00000000000000000000000000000000', 'key185': '00000000000000000000000000000000', 'key186': '00000000000000000000000000000000', 'key187': '00000000000000000000000000000000', 'key188': '00000000000000000000000000000000', 'key189': '00000000000000000000000000000000', 'key458': 'CACACACACACACACACACACACACACACACA', 'key459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'cip330': '75044F932FEACE44942A86E3975436B9', 'cip331': 'BEF793629AEA8CD254AD999B045DFCDE', 'cip332': '76720F5BF5DBFE75B575164BE3B739C0', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000000000000000000020000', 'msg239': '00000000000000000000000000010000', 'msg230': '00000000000000000000000002000000', 'msg231': '00000000000000000000000001000000', 'msg232': '00000000000000000000000000800000', 'msg233': '00000000000000000000000000400000', 'msg234': '00000000000000000000000000200000', 'msg235': '00000000000000000000000000100000', 'msg236': '00000000000000000000000000080000', 'msg237': '00000000000000000000000000040000', 'msg304': '30303030303030303030303030303030', 'msg305': '31313131313131313131313131313131', 'msg306': '32323232323232323232323232323232', 'msg307': '33333333333333333333333333333333', 'msg300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'msg301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg308': '34343434343434343434343434343434', 'msg309': '35353535353535353535353535353535', 'cip58': 'AAB52A0482E0A1B84EF07213F8BCF63F', 'cip59': 'E477DDE4A88A17339157E4198DC39801', 'cip52': 'B56126C52D0DD2B8FDC5C4A05091F2B1', 'cip53': '6FF5B6F133BEB75DDDD0385F9B3AEEE5', 'cip50': '72FA9C8731E45CF575CFFEBD6F3981C5', 'cip51': 'AEE9355B2FBD96A06F8F74DC8882E893', 'cip56': 'A5B8DF0ABDBA5DA09B8D8383F06957E2', 'cip57': '344B6F348ADA08FF4E97C722463DCB08', 'cip54': '6541C5BCE4B3F93F4EC1E7DFED0F98DB', 'cip55': 'BF9ED60D8A243F1E010345537A5C081D', 'key199': '00000000000000000000000000000000', 'key198': '00000000000000000000000000000000', 'key197': '00000000000000000000000000000000', 'key196': '00000000000000000000000000000000', 'key195': '00000000000000000000000000000000', 'key194': '00000000000000000000000000000000', 'key193': '00000000000000000000000000000000', 'key192': '00000000000000000000000000000000', 'key191': '00000000000000000000000000000000', 'key190': '00000000000000000000000000000000', 'key449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key442': 'BABABABABABABABABABABABABABABABA', 'key445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg227': '00000000000000000000000010000000', 'msg226': '00000000000000000000000020000000', 'msg225': '00000000000000000000000040000000', 'msg224': '00000000000000000000000080000000', 'msg223': '00000000000000000000000100000000', 'msg222': '00000000000000000000000200000000', 'msg221': '00000000000000000000000400000000', 'msg220': '00000000000000000000000800000000', 'msg229': '00000000000000000000000004000000', 'msg228': '00000000000000000000000008000000', 'cip503': '77E43406A64DBCB8EED2E254DA5EE9CF', 'cip502': 'AC05403A90781B4855613CE169FA1919', 'msg313': '39393939393939393939393939393939', 'msg312': '38383838383838383838383838383838', 'msg311': '37373737373737373737373737373737', 'msg310': '36363636363636363636363636363636', 'msg317': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg316': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg315': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg314': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'msg319': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'msg318': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'cip67': 'BF4FE13163EA85E003EF8E9D4BAF48C8', 'cip66': 'CE277A5063C40BA1418A30721A0DE8AF', 'cip65': '94EF7F345D1FF0DB4494D9DB56ADFFED', 'cip64': '230375EE7B65A2C948809B6DE69D1F50', 'cip63': '83ACED5FB21035A41B858136D4797BEE', 'cip62': 'B2B67CDC8371B5739F5E213FDD8B60EC', 'cip61': '2C06278683B5759C12B147DE2B0E0BB1', 'cip60': '33401CDFBECCF499B3226B4C6AD8FDDF', 'cip69': '6F31A90BCEEA0BC85843086C7258EA9E', 'cip68': 'C8F9F9F1DB54EB0635C227CAE447055C', 'cip229': '98E2FBF128A1E2F80CABF2DB3F9E62AF', 'key298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key294': '26262626262626262626262626262626', 'key295': '27272727272727272727272727272727', 'key296': '28282828282828282828282828282828', 'key297': '29292929292929292929292929292929', 'key290': '22222222222222222222222222222222', 'key291': '23232323232323232323232323232323', 'key292': '24242424242424242424242424242424', 'key293': '25252525252525252525252525252525', 'key508': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key509': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key504': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key505': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key506': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key507': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key500': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key501': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key502': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key503': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key276': '14141414141414141414141414141414', 'key277': '15151515151515151515151515151515', 'key274': '12121212121212121212121212121212', 'key275': '13131313131313131313131313131313', 'key272': '10101010101010101010101010101010', 'key273': '11111111111111111111111111111111', 'key270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key278': '16161616161616161616161616161616', 'key279': '17171717171717171717171717171717', 'key474': 'DADADADADADADADADADADADADADADADA', 'key475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg252': '00000000000000000000000000000008', 'msg253': '00000000000000000000000000000004', 'msg250': '00000000000000000000000000000020', 'msg251': '00000000000000000000000000000010', 'msg256': '00000000000000000000000000000000', 'msg257': '01010101010101010101010101010101', 'msg254': '00000000000000000000000000000002', 'msg255': '00000000000000000000000000000001', 'msg258': '02020202020202020202020202020202', 'msg259': '03030303030303030303030303030303', 'msg494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg492': 'ECECECECECECECECECECECECECECECEC', 'msg493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': 'BB36013C6A6D8F002AF79C66C49FA3F4', 'cip289': 'DC4E0A9B747E0DD80FBBE8D8A93AACF2', 'cip284': '9FE45EA709FEBB92E010B6CDE4A2BFE8', 'cip285': 'AF328CC432AFAA667327A572E5033028', 'cip286': 'A643FB28B9D80B8851A1C18844337115', 'cip287': 'A511F49C5090940AB1FD1AF29EBAF572', 'cip280': 'BB737A0A2883FB4F9ABEF0321CBB3AEE', 'cip281': '7C7683199FCD0F0FD9F54D4BAFD6B294', 'cip282': '50EC96EEA22958475952B818D2910039', 'cip283': '14AF43ED3889BCC4F1E6F2FF0FD7213A', 'msg75': '00000000000000000000000000000000', 'cip448': '011D6B57726FEFAAACFC6023FB4378A3', 'cip449': '57B683712E875783C663BB782B14B535', 'cip446': '51589B5DD5BE085ADD20B6AF045C56F2', 'cip447': 'AF39614E747B9331C38B797F527EBEA6', 'cip444': 'B0C59FCBB2F82A70E3433B2520F9B893', 'cip445': 'B0D389F14350C51DBD46F7D3A573795A', 'cip442': '7B1789F480CA9DC50AEDD40728C6C091', 'cip443': 'E5374AD88614078345CC61B6E509AA57', 'cip440': '36940CFCAD524EB5F08AB575CC40EBCD', 'cip441': '5434C12EF2078008B755CB85C9F4382E', 'cip266': '24C2085D5F78454F0DB8F536B27C65B0', 'cip267': 'FF3182308D26F37FE14C7CD14CE0A520', 'cip264': 'D36720D269BF938975611E5CB6B10E45', 'cip265': '7DD44AFBD27D3061C5BF49A114B84356', 'cip262': '1884971F41D8E20AA962913083C71829', 'cip263': '7BB8BAFFE29DA9BD6B2424597F976DE8', 'cip260': '496EC57B85F33B9E4105534DE17F3128', 'cip261': '5808C3C634C0ED8C92B29516DAE1EC2E', 'cip268': '64A5797718F05FCE1F475A0B7BB84BBB', 'cip269': '97DCB6200AF23400E00EFF6C3D4BD40E', 'cip198': 'C0380B9660722514C1EA4322FE45955C', 'cip199': '66521E5F953F2D2E237A259BDEE9C400', 'cip190': 'E521E33E82289A176467E24CBAD5D92C', 'cip191': '9609C701F895754A623D3BF3EAC48334', 'cip192': '986EFA59113F5C8A66BBAA7EF978A125', 'cip193': 'B8CB15A238CA60157C3CB3317021B92C', 'cip194': 'F262212AC5485BA7D92CBF5A9C58D8AD', 'cip195': 'DF54C6D917675E73A3659560D5813E56', 'cip196': '925D0E759AF1EB36CEEB0FB6D51FAB7A', 'cip197': '99BC9E5870190269C4FE5B6FC23C8D8C', 'cip70': '334EFC7C6930BC0B839C845E1B22F8C3', 'cip71': '1E92F9F2E576C864A24F36402F84107D', 'cip72': '8D646E78DC20F616A859074DE82D1107', 'cip73': 'E98DE4AAAC62C1E4251054B42D92F4C3', 'cip74': 'B0FC458F4759641C6FA64FED926C8347', 'cip75': '61F381FA99E58E9B3CEBCBADDE6559D2', 'cip76': '2C7EAF752E2B02734A3C3506CDA4867D', 'cip77': '600F284E1AB1C8194D6FE065DBDF1BBF', 'cip78': 'DB84C4BA65B89D0CD51BE73605084568', 'cip79': '4C75C41A4ABC17E0ADC00228394F0037', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'key289': '21212121212121212121212121212121', 'key288': '20202020202020202020202020202020', 'key283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key281': '19191919191919191919191919191919', 'key280': '18181818181818181818181818181818', 'key287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key512': '000102030405060708090A0B0C0D0E0F', 'key511': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key510': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key265': '09090909090909090909090909090909', 'key264': '08080808080808080808080808080808', 'key267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key261': '05050505050505050505050505050505', 'key260': '04040404040404040404040404040404', 'key263': '07070707070707070707070707070707', 'key262': '06060606060606060606060606060606', 'key269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key462': 'CECECECECECECECECECECECECECECECE', 'key461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'cip510': 'DCAFAFAF80E044DF6582C735E63479A3', 'cip511': '2DEE675B6B7401367DA2A80FB44B8065', 'cip512': '563E2CF8740A27C164804560391E9B27', 'msg241': '00000000000000000000000000004000', 'msg240': '00000000000000000000000000008000', 'msg243': '00000000000000000000000000001000', 'msg242': '00000000000000000000000000002000', 'msg245': '00000000000000000000000000000400', 'msg244': '00000000000000000000000000000800', 'msg247': '00000000000000000000000000000100', 'msg246': '00000000000000000000000000000200', 'msg249': '00000000000000000000000000000040', 'msg248': '00000000000000000000000000000080', 'msg483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'msg489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'cip299': 'C631E4B4C54445849A063463053292F4', 'cip298': '15181869D61F4EF057037FAC366E8CD1', 'cip293': 'B7E011540F04E4ABFE34ADC98471CA2A', 'cip292': 'D3BCFFC66518DA572CF0E27E6A8C9B3C', 'cip291': '8087BBCEABA5BD66DC37EC8C00106B27', 'cip290': '18FC1DB652B198ACCF681E20F80EC885', 'cip297': '77B7254AA1EF4FC2C2319EABD17FB105', 'cip296': '0C46350BA4F09162952BC4A82B929A07', 'cip295': '5E9448B640F0CAEE9D70E158DC943CD9', 'cip294': 'D6C7A8C0802985DC9FB1FF85C6B69D89', 'cip459': '3B27FA81385C2E2417953DC786E99CA4', 'cip458': '5301A78E6CF4DBEFDF42D543A4F2A2B1', 'cip455': 'C86051C427E4095E021BE9A171B8B984', 'cip454': 'A6C8D16F7245CFB032B848939EB52E6F', 'cip457': 'AB202FD3C2D36403DE12951DC511F8C7', 'cip456': '620F4EC62D4A667C973B3B8F7FE016C3', 'cip451': '4AE1DA4EF3BF9EBBAC9CF114162F2445', 'cip450': 'EA7D8F0B95A47F7485DEAAB131AAB5E4', 'cip453': '63066FF48752B574976AAF22F121CC7F', 'cip452': '55434E0CB86BBBB04805BA85D480C0FE', 'cip275': '873C11712228256B52DE6E7C7CF3EA0F', 'cip274': '933E63A78E6AA1216A1B1CE2559D42BF', 'cip277': '7947EC0F52D77C7EC093736E213F56FE', 'cip276': 'E696C89DB8CD674BF7D2825AACA540F7', 'cip271': '4FF63965D45FFEAF4F1CE43D9163F833', 'cip270': '823AD8FAF56C0116B9215C8109DFDBBE', 'cip273': 'F84F5C8EEEA4D3527F734428F4B3AED6', 'cip272': '185EFBCD1AC2EFF75CF764F05CFAFD33', 'cip279': '14105E6C6B085CC03E3153AE2BA0E222', 'cip278': '12DD34CD1E4A581EBAB03F56C6C43692', 'cip187': '6CAC3A5E20E13162FB3A31804CB6C7AE', 'cip186': 'CF4D5EAD4E69313709EA9399F5ABF8D9', 'cip185': 'A11495F4358A5FA63024A2DC02E20480', 'cip184': '1EB43E99040A614F77361601A1806651', 'cip183': 'DCA8A545689A58F663B0B7A540F41E24', 'cip182': 'F9DED80456581D2E6F09BDB09B77C04A', 'cip181': '4CCD47A10722175D4018709698E52881', 'cip180': 'A07252FB0F05EA2264F558BDDF162BBB', 'cip189': 'B2FFBF55E5E2E0CB0935504430E173F8', 'cip188': 'BFEE053ED49F33F5A388359721FE20FA', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': 'DD4FF8498D45936888B48EEFD24CE9F6', 'cip88': '8F8827ED63EAFC702A4C7F855E6806A0', 'cip85': '79C577AC301DE5ED03AD6D0AACB1D958', 'cip84': 'E76340173FDA4B6F1E2703A732C4C482', 'cip87': '6C87E4E87CB3773520F7B3EDB51DAEAF', 'cip86': 'A2A8D78F3511B65EA03262314F0C8F8A', 'cip81': '80DF5AD31BF557F9C75701B1395C4AD2', 'cip80': 'A4F7B40448470061B7873A62072CE112', 'cip83': '72BABC19EE59F6F76F17DDFBE2FCC33A', 'cip82': '46CE4708ABA4835764EA9C4678335954', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg99': '00000000000000000000000000000000', 'cip344': 'D1E1AA0D0134CADD6397DE019CE96022', 'msg95': '00000000000000000000000000000000', 'cip348': 'FBCF5254704605256035282E822E8E90', 'key250': '00000000000000000000000000000000', 'key251': '00000000000000000000000000000000', 'key252': '00000000000000000000000000000000', 'key253': '00000000000000000000000000000000', 'key254': '00000000000000000000000000000000', 'key255': '00000000000000000000000000000000', 'key256': '00000000000000000000000000000000', 'key257': '01010101010101010101010101010101', 'key258': '02020202020202020202020202020202', 'key259': '03030303030303030303030303030303', 'key382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key386': '82828282828282828282828282828282', 'key387': '83838383838383838383838383838383', 'key384': '80808080808080808080808080808080', 'key385': '81818181818181818181818181818181', 'key388': '84848484848484848484848484848484', 'key389': '85858585858585858585858585858585', 'key498': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key499': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key496': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key497': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key494': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key495': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key492': 'ECECECECECECECECECECECECECECECEC', 'key493': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key490': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key491': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg278': '16161616161616161616161616161616', 'msg279': '17171717171717171717171717171717', 'msg274': '12121212121212121212121212121212', 'msg275': '13131313131313131313131313131313', 'msg276': '14141414141414141414141414141414', 'msg277': '15151515151515151515151515151515', 'msg270': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg271': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg272': '10101010101010101010101010101010', 'msg273': '11111111111111111111111111111111', 'msg478': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'msg479': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg476': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg477': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'msg474': 'DADADADADADADADADADADADADADADADA', 'msg475': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg472': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg473': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg470': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg471': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'cip468': '83C8763AFA8DE421C342F32BD629AC75', 'cip469': 'FA233028F802E83AB504F7DD7D6FB5E3', 'cip460': 'AF9CBDE0670139E9258679C6B5766C95', 'cip461': '101DDE12CA5BBF7BE513420B32C7A127', 'cip462': '66593841189BA1488BB1504C2216CF32', 'cip463': '6FCC6695110BE607CC44C21BBCD4D996', 'cip464': '63193BFB6ADFE1A4905D3ED30B6C0AEF', 'cip465': '3BCCFCADB080E312897026B662A2172E', 'cip466': '81D44F913E6FA1C8E07782870E0909B9', 'cip467': 'F34B4A3FBE6C419157F3BB73309C96C9', 'cip240': 'A174B66C47C53B2C34AA9F06FECBB7B2', 'cip241': '333827335F88EBB93A0A7436E51398F0', 'cip242': '03A7D7D70F4F50AE96835F12B73F79D3', 'cip243': 'B8B9F2029769952D9664A6FDE9706BBF', 'cip244': 'A7DCE248EC5A060388CA14598B986454', 'cip245': '1A21EED739C6C39A56E0B4C6A17D3375', 'cip246': '9073DBCF760A0B9E0E84A2FD6DF164F9', 'cip247': 'CEE83B85568AD8133D8842DC883052CE', 'cip248': '4AE9A20B2B14A10290CBB820B7FFB510', 'cip249': '2C6EE9F8F64B5B1B5587CDF17E84A791', 'msg296': '28282828282828282828282828282828', 'msg297': '29292929292929292929292929292929', 'msg294': '26262626262626262626262626262626', 'msg295': '27272727272727272727272727272727', 'msg292': '24242424242424242424242424242424', 'msg293': '25252525252525252525252525252525', 'msg290': '22222222222222222222222222222222', 'msg291': '23232323232323232323232323232323', 'msg298': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg299': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'cip98': 'ED735C651F003ABCAFE1926472E0CC32', 'cip99': '970CDDD5BCCAE7F7BD0F7B67B6707580', 'cip96': '573FB9B1E047670331D54E87F3BDD48D', 'cip97': '03CF30E2ED5C9311F6BF9964C8A7DBB8', 'cip94': 'B9F43C559CCB8C1933FD323ED51AF997', 'cip95': 'D11D4485EB7AAA6CB1A8F16E24ECDE7A', 'cip92': '9EEC294CEBAEFC664DFA9D1C8B48B0B2', 'cip93': 'CAFB5B1D66E147006DB2E4CFC8405DA3', 'cip90': 'DE8BF1BCB7C106D93AA60C744240651F', 'cip91': 'FC45CB6A1B9267A8B330FC1399BC0F34', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '80000000000000000000000000000000', 'msg129': '40000000000000000000000000000000', 'key249': '00000000000000000000000000000000', 'key248': '00000000000000000000000000000000', 'key247': '00000000000000000000000000000000', 'key246': '00000000000000000000000000000000', 'key245': '00000000000000000000000000000000', 'key244': '00000000000000000000000000000000', 'key243': '00000000000000000000000000000000', 'key242': '00000000000000000000000000000000', 'key241': '00000000000000000000000000000000', 'key240': '00000000000000000000000000000000', 'key391': '87878787878787878787878787878787', 'key390': '86868686868686868686868686868686', 'key393': '89898989898989898989898989898989', 'key392': '88888888888888888888888888888888', 'key395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key489': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key488': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key485': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key484': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key487': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key486': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key481': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key480': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'key483': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key482': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg269': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg268': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg263': '07070707070707070707070707070707', 'msg262': '06060606060606060606060606060606', 'msg261': '05050505050505050505050505050505', 'msg260': '04040404040404040404040404040404', 'msg267': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg266': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg265': '09090909090909090909090909090909', 'msg264': '08080808080808080808080808080808', 'msg469': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg468': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'msg465': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg464': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg467': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg466': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'msg461': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg460': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg463': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg462': 'CECECECECECECECECECECECECECECECE', 'cip509': '81F9163BDF39B5BB2932AB91DF2A5FFC', 'cip508': '831859AA5925E7CCC84D9520676DF18B', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'cip477': 'A00F780539C02164125535464A047DAD', 'cip476': 'AF21417BEFB3375C67CDDF17AB000F29', 'cip475': 'C1AD56BF3C66A6688853D00905D34C11', 'cip474': 'D08C89CF7EA42955B2E45CE732E965D0', 'cip473': '20EA07F19C8E93FDA30F6B822AD5D486', 'cip472': '48C76D0783F8A6D195F5297AC0388FAF', 'cip471': '0F27D294EE2FDDB4F3C46408D8593362', 'cip470': '9B69B68E43C5367FBA81BA0893BA7B94', 'cip479': '92D6FB2F3DD8DA87B5614DA91AA4F8AC', 'cip478': 'C82B177FC8E9988825A4C2F1385882E1', 'cip259': '1F830AF7D2A1B18F7A011C6FD0EEE8FB', 'cip258': '1AE5355487F88F824B6462B45C4C6AA5', 'cip257': '5107E36DBE81D9996D1EF7F3656FFC63', 'cip256': '3620B17AE6A993D09618B8768266BAE9', 'cip255': '9BEDCEA16BDE863526A937208CBF0ABC', 'cip254': '0C5DABB01245E3A3544E291F3B0F250F', 'cip253': 'B598247AA82F5C79F9FF0E7EC61B83C4', 'cip252': '1587FF28ABDF9DF5A3F4DAF7405D273B', 'cip251': '2AE6E19905D89A8E53A1DF26AD5C89B4', 'cip250': '29141D06A6B42CE22EFB8383CEAE325D', 'msg285': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg284': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg287': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg286': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'msg281': '19191919191919191919191919191919', 'msg280': '18181818181818181818181818181818', 'msg283': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg282': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg289': '21212121212121212121212121212121', 'msg288': '20202020202020202020202020202020', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'msg139': '00100000000000000000000000000000', 'msg138': '00200000000000000000000000000000', 'msg137': '00400000000000000000000000000000', 'msg136': '00800000000000000000000000000000', 'msg135': '01000000000000000000000000000000', 'msg134': '02000000000000000000000000000000', 'msg133': '04000000000000000000000000000000', 'msg132': '08000000000000000000000000000000', 'msg131': '10000000000000000000000000000000', 'msg130': '20000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '00000000000000000000000000000000', 'key239': '00000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'key232': '00000000000000000000000000000000', 'key233': '00000000000000000000000000000000', 'key230': '00000000000000000000000000000000', 'key231': '00000000000000000000000000000000', 'key236': '00000000000000000000000000000000', 'key237': '00000000000000000000000000000000', 'key234': '00000000000000000000000000000000', 'key235': '00000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '00000000000000000000000000000000', 'key129': '00000000000000000000000000000000', 'key126': '00000000000000000000000000000002', 'key127': '00000000000000000000000000000001', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'key346': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key347': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key344': '58585858585858585858585858585858', 'key345': '59595959595959595959595959595959', 'key342': '56565656565656565656565656565656', 'key343': '57575757575757575757575757575757', 'key340': '54545454545454545454545454545454', 'key341': '55555555555555555555555555555555', 'key348': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key349': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'msg458': 'CACACACACACACACACACACACACACACACA', 'msg459': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'msg450': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'msg451': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg452': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg453': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg454': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg455': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg456': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg457': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'key149': '00000000000000000000000000000000', 'cip402': '9BF43D3DE9AFE886D205C10A4203C76A', 'cip403': 'D9B03E777B9FC287D521B8217661359E', 'cip400': '7F30697EF540F85638AACFA683753038', 'cip401': '5B027C49EE0253EA4997C7FBA69AEFE0', 'cip406': 'DD0949D0EDFA622C8D39FD916605D692', 'cip407': '36F4ACAC85A2A7CD0A383C3D5AB204F3', 'cip404': '1CFD3563B98179AA5CF8F4A517F50DC5', 'cip405': '4CA42C179888E806B5CDFE5AFD21D1E9', 'cip408': 'BB86594991B56F3FCA388449D17DFD9D', 'cip409': 'E5FC87E797737036560BF498EC559A2C', 'cip228': 'C12E44B3F253295CF742441FFA2712DB', 'key147': '00000000000000000000000000000000', 'cip222': '57A991425DC55325EB159A0274140EFA', 'cip223': '856CD3630F436DACD3FE27AB73F4A956', 'cip220': 'B30C571F161EF0DAC78816A4DC1339FF', 'cip221': '214CB9151303EDA5CD14E35E701DE887', 'cip226': '81B2AF04CC40E2E3DDFFBE3F6AEF8A33', 'cip227': '6970437809D0A34E5A76B22F88F5282B', 'cip224': '3EB8325BCA6C583DC04019F01D4BC90D', 'cip225': '240A1E99A51C7EED2E9127DB7D86903E', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': 'EFE8F7F507CAD557A7D70200051A9443', 'cip319': 'B53598AC68303A7013850C82B12AC114', 'cip316': 'BD2DBD2EB4193A2773CDB9906A34376D', 'cip317': 'FE0139D7DDE3CB197D4CDC770C0089BB', 'cip314': '242585CEBBA8B0C305A356393F2A3AD5', 'cip315': 'D22C029E52C0385105AAD7BD8EA789C5', 'cip312': '32F860F0424C2A550489301A1EAC2F18', 'cip313': '5BC2D4054CE071EF6855D5596F3700FA', 'cip310': '75F16BB0872EE866388E7FF5BC4AD3A3', 'cip311': '460EC241B2050E61EC38A7BF70E4CFF4', 'cip136': '0DB0D17349C89E090C845CBEF963F225', 'cip137': 'C7128FD1A5EF5202550873EA885551C5', 'cip134': '69DD947EFADCD15A06A0D79E078B35AE', 'cip135': '32F1FA100E43561146DCA08D15B90636', 'cip132': 'CEE3C6CE66A7AC0C1767923B263B2EBD', 'cip133': '88DE61FFC3AD277687626D5F7705DEF3', 'cip130': '8F773194B78EF2B2740237EF12D08608', 'cip131': '8B1EA69EE8D7C8D95B1DE4A670EC6997', 'cip138': '761D7F9855C95AB6148833503958F96E', 'cip139': '1D406059F0E1030FA66C52A46751D092', 'msg148': '00000800000000000000000000000000', 'msg149': '00000400000000000000000000000000', 'msg142': '00020000000000000000000000000000', 'msg143': '00010000000000000000000000000000', 'msg140': '00080000000000000000000000000000', 'msg141': '00040000000000000000000000000000', 'msg146': '00002000000000000000000000000000', 'msg147': '00001000000000000000000000000000', 'msg144': '00008000000000000000000000000000', 'msg145': '00004000000000000000000000000000', 'key229': '00000000000000000000000000000000', 'key228': '00000000000000000000000000000000', 'key221': '00000000000000000000000000000000', 'key220': '00000000000000000000000000000000', 'key223': '00000000000000000000000000000000', 'key222': '00000000000000000000000000000000', 'key225': '00000000000000000000000000000000', 'key224': '00000000000000000000000000000000', 'key227': '00000000000000000000000000000000', 'key226': '00000000000000000000000000000000', 'key139': '00000000000000000000000000000000', 'key138': '00000000000000000000000000000000', 'key135': '00000000000000000000000000000000', 'key134': '00000000000000000000000000000000', 'key137': '00000000000000000000000000000000', 'key136': '00000000000000000000000000000000', 'key131': '00000000000000000000000000000000', 'key130': '00000000000000000000000000000000', 'key133': '00000000000000000000000000000000', 'key132': '00000000000000000000000000000000', 'key355': '63636363636363636363636363636363', 'key354': '62626262626262626262626262626262', 'key357': '65656565656565656565656565656565', 'key356': '64646464646464646464646464646464', 'key351': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key350': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key353': '61616161616161616161616161616161', 'key352': '60606060606060606060606060606060', 'msg20': '00000000000000000000000000000000', 'key359': '67676767676767676767676767676767', 'key358': '66666666666666666666666666666666', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg446': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg445': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'msg444': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg443': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg442': 'BABABABABABABABABABABABABABABABA', 'msg441': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg440': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg449': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'msg448': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key44': '00000000000800000000000000000000', 'key45': '00000000000400000000000000000000', 'key46': '00000000000200000000000000000000', 'key47': '00000000000100000000000000000000', 'key40': '00000000008000000000000000000000', 'key41': '00000000004000000000000000000000', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip411': '2E2F167944534DEBFD0E88EE63829748', 'cip410': '509324D4B10F19DBCD53F023E4077844', 'cip413': '86CF5B02838C3604CDA675DB8B81A862', 'cip412': '880B511572568FEDF62CB7EE06462B19', 'cip415': '9A464C03A56C01A61A112E9256A81925', 'cip414': 'C662F3E1AF3A4FAAD5413C189B90AE02', 'cip417': '1AA598EB7010CF91F731F3B1DE2E72C8', 'cip416': '386D4927DCD7D7939ECF7C3978052180', 'cip419': '5AEE95897C882A0EE72494585309C5B6', 'cip418': 'D7E3DECF5227314DCA03E8417EB73A44', 'cip239': '75BAF3E8194EA04577133509B50FF4C3', 'cip238': '85FE597694444D1A8D7F1CE219913F4F', 'cip231': 'E51D907B84D877250D0BCEC17D292DFD', 'cip230': '3F2B1D74B9D0D84C0B0DDAD31352E67A', 'cip233': '9F997F2AC950E52666207183DB935899', 'cip232': '151940BA15A175FCD39CE2D3A0259EFF', 'cip235': '4A7D36598525699F49667AF4B46BB99B', 'cip234': '015B7DF6BFB9367BF8F690FC0B77DEB0', 'cip237': '1367EC90627601E9C1BD1371454B772F', 'cip236': '306248FD603DFC18E41CF0864D2C352C', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '772F6DD96FA5C94102881F5F3CA9F9EF', 'cip308': '7DBFC2680C3A5A2C2AEF801074CD7B8F', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': 'D69C8CCF5DEC9EFA90684C7B70FCDFAF', 'cip124': '8C9A19CEBB5709C38EA1AE1D12E291C1', 'cip127': 'F668C7091F81B2827DA77DD419B708E1', 'cip126': '39B65E77A4D26218E5ED7092AB64D07E', 'cip121': 'FA735E9BE7961050C202BD794E2E1E0C', 'cip120': 'DDD26B98A5FFD82C05345A9DADBFAF49', 'cip123': '5F35BF3061423D0BC02C07BED67602BD', 'cip122': '7B2D8D2348DC4CE112AEF4311BE769D7', 'cip129': '04ABCFE4E0AF27FF92A2BB10949D7DD2', 'cip128': 'A3B35DE7C358DDD82644678C64B8BCBB', 'msg159': '00000001000000000000000000000000', 'msg158': '00000002000000000000000000000000', 'msg151': '00000100000000000000000000000000', 'msg150': '00000200000000000000000000000000', 'msg153': '00000040000000000000000000000000', 'msg152': '00000080000000000000000000000000', 'msg155': '00000010000000000000000000000000', 'msg154': '00000020000000000000000000000000', 'msg157': '00000004000000000000000000000000', 'msg156': '00000008000000000000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'key360': '68686868686868686868686868686868', 'key361': '69696969696969696969696969696969', 'key362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key368': '70707070707070707070707070707070', 'key369': '71717171717171717171717171717171', 'key214': '00000000000000000000000000000000', 'key215': '00000000000000000000000000000000', 'key216': '00000000000000000000000000000000', 'key217': '00000000000000000000000000000000', 'key210': '00000000000000000000000000000000', 'key211': '00000000000000000000000000000000', 'key212': '00000000000000000000000000000000', 'key213': '00000000000000000000000000000000', 'key218': '00000000000000000000000000000000', 'key219': '00000000000000000000000000000000', 'msg432': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg433': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg430': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg431': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg436': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg437': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg434': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg435': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'msg438': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg439': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'msg388': '84848484848484848484848484848484', 'msg389': '85858585858585858585858585858585', 'msg384': '80808080808080808080808080808080', 'msg385': '81818181818181818181818181818181', 'msg386': '82828282828282828282828282828282', 'msg387': '83838383838383838383838383838383', 'msg380': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg381': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'msg382': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg383': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'cip305': '19EB5033E0B2BB781A0BA20704D09DB2', 'cip304': 'B4C146F5C4F42122D58208A209E938DA', 'cip307': 'A7CDA6DC7F1AADBCE58E1428982AC39F', 'cip306': '80367CAD87DAFCF2819E857B291549C5', 'cip428': 'CEE52E89A3224BB263C5C57899A9A22C', 'cip429': '1F1A2A628E7659D06DBCE745DDEA10CD', 'cip424': 'B299AD5B90F6CA14F9884F41851A79F2', 'cip301': '5F83069E288A1A5303289680E08F1C2A', 'cip426': 'D51BBC5FCE7FF5BF4A22278129CE69F1', 'cip427': '1CA5B3C175266785D2D2BB9C6A7F08CF', 'cip420': 'C1392DF2DAD08454ECC6D8A1F373431F', 'cip421': '480AE95A7DF90FE31A6D35D43BE3B888', 'cip422': 'C35276718DC49FE6B2398FEC5B8C5E2C', 'cip300': '5699BDB2FFAFB2D259362EFD804797E8', 'cip303': 'BE2F1364C92B9D1A5C239EB975D8530F', 'cip302': 'E605C2EF7EFFDAC2316796EB7C15FAC7', 'cip338': 'D2E4094CD9BC1D10CF0D954547904502', 'cip339': '841AAC464625D296C3756C7A3B13CD2F', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': '45F463F2C3F6F1E3B937B0FA0C116417', 'cip334': '98ED6E1754160139FB821934133F6C5F', 'cip335': '16E6C73932DB7BB2602AB6E8B4BF6574', 'cip336': '0AEBB100F4A71C51C8A2011CA0D8FC4F', 'cip337': '5DE7037F2AB8CD8E709232A276EC7216', 'cip110': '864E7B400A96420A98765AF993AAD852', 'cip111': 'B8F75A0553AA33DC30B3F2D0027F97EA', 'cip112': '7106BED662E6B6AE72FDC726C98AD746', 'cip113': '043AA312B19B6737C3CEBAF830DB6DB8', 'cip114': 'F95E6F00854F17DBB68CC679570D5FD5', 'cip115': 'D23FAE81FF497000583F2CFCE54FCE9C', 'cip116': 'EF5C7DC4DBCE5A51F98011969693DBE8', 'cip117': '34D2F0546C260EA4002B4BCC2C12CCAB', 'cip118': 'B3787BE95735A9581817C64D81F07E13', 'cip119': 'EB31DC31E4016F7FD8901C5872DCED1A', 'msg164': '00000000080000000000000000000000', 'msg165': '00000000040000000000000000000000', 'msg166': '00000000020000000000000000000000', 'msg167': '00000000010000000000000000000000', 'msg160': '00000000800000000000000000000000', 'msg161': '00000000400000000000000000000000', 'msg162': '00000000200000000000000000000000', 'msg163': '00000000100000000000000000000000', 'msg168': '00000000008000000000000000000000', 'msg169': '00000000004000000000000000000000', 'msg366': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg367': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg364': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'msg365': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg362': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg363': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg360': '68686868686868686868686868686868', 'msg361': '69696969696969696969696969696969', 'msg368': '70707070707070707070707070707070', 'msg369': '71717171717171717171717171717171', 'cip204': 'EB667F97B9D94B0C41C873C4B56B334C', 'cip205': 'A065550C6371DEC580E16276E03F13D4', 'cip206': 'CDAC7C0A0E363FE8BA16BC11D1F6DC57', 'cip207': 'FF792A72BF23CABD13EA587C57D05D3F', 'cip200': '8C30672FF7F1DB4681BA36E48B3374A3', 'cip201': '0D56FA9193C8A6FBF653D75D3F61407E', 'cip202': '08C0C170A7B0F0C07E1CDEF95AEE8113', 'cip203': 'F05F7E94EC7FECF973EF5732B565E016', 'cip208': 'E5D5DC0D6834E44697BDD5D8427A054F', 'cip209': 'CAB879F5684241583F4900B2653D76C9', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'key111': '00000000000000000000000000010000', 'key110': '00000000000000000000000000020000', 'key119': '00000000000000000000000000000100', 'key118': '00000000000000000000000000000200', 'key379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key377': '79797979797979797979797979797979', 'key376': '78787878787878787878787878787878', 'key375': '77777777777777777777777777777777', 'key374': '76767676767676767676767676767676', 'key373': '75757575757575757575757575757575', 'key372': '74747474747474747474747474747474', 'key371': '73737373737373737373737373737373', 'key370': '72727272727272727272727272727272', 'key203': '00000000000000000000000000000000', 'key202': '00000000000000000000000000000000', 'key201': '00000000000000000000000000000000', 'key200': '00000000000000000000000000000000', 'key207': '00000000000000000000000000000000', 'key206': '00000000000000000000000000000000', 'key205': '00000000000000000000000000000000', 'key204': '00000000000000000000000000000000', 'key209': '00000000000000000000000000000000', 'key208': '00000000000000000000000000000000', 'cip501': '4B3DEE78E7CA56D985788A9AC2F5197F', 'cip500': '035FBB00942D042DD88115169C2E2AE2', 'cip507': '26A931AB8FC298D328598B77620F2F71', 'cip506': 'DEFAF32AEF76FE6130651C37C47C1301', 'cip505': 'CD8AF08F6B03C1D69DBC3DA0B6ECD295', 'cip504': '1BB1D68FBECF50E20C854DAA9E5C6D21', 'msg421': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg420': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'msg423': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg422': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg425': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg424': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'msg427': 'ABABABABABABABABABABABABABABABAB', 'msg426': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg429': 'ADADADADADADADADADADADADADADADAD', 'msg428': 'ACACACACACACACACACACACACACACACAC', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'key26': '00000020000000000000000000000000', 'key27': '00000010000000000000000000000000', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'key28': '00000008000000000000000000000000', 'key29': '00000004000000000000000000000000', 'msg399': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg398': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg393': '89898989898989898989898989898989', 'msg392': '88888888888888888888888888888888', 'msg391': '87878787878787878787878787878787', 'msg390': '86868686868686868686868686868686', 'msg397': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg396': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg395': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'msg394': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'cip439': 'DB254D2BEB85274726F5582F191B5008', 'cip438': '70CC3DD97FE808353E558DE39D7B3783', 'cip433': '8CF0AFE0D51907E8488CF660A6F8B377', 'cip432': 'ABEAC01D51FBC237E91B66A729E0C978', 'cip431': 'D0FBBF36E727F565A053AE220555574D', 'cip430': 'F035455E3D4FC0FF8D15622B58C87378', 'cip437': '32A119FC7DA3164125A6CF0C48C04771', 'cip436': '3F773A0F5400AB687DF5224A4098791E', 'cip435': '7FA552B4DA6A9EBB7099FEE03932FABA', 'cip434': 'AF8ADC32B4C8469BAC400638EE7DC428', 'cip327': 'F1DF91E2ED49CD44957F30B0FF03CBB5', 'cip326': '10995A37BB28DA7B96AF16A7734D083E', 'cip325': '64D20DAF523070033D3F061250511704', 'cip324': 'D7A3FC9E7A45AADFA2823563C7D189C6', 'cip323': 'D9DC02ADB41F02B6DBEA8B2D55A70727', 'cip322': '30602E07780EB354077B2C07C82F9AD2', 'cip321': '3A37783916A0D5876CD05F287A363714', 'cip320': '9CDA52F0C58BAE909ABC2E3EF75436D1', 'cip329': 'CA49B664DE330A675ED772FB26C84637', 'cip328': '9D98D41D45B4CBAB99649307B4500EF3', 'cip109': '7171E845509F8F4F134BE53EFD8A34DC', 'cip108': '11DD97B8ADAF7F6B34EB3BBB9A438892', 'cip107': '05C861F7F71591C8AECF8A26EB020F4D', 'cip106': '90DF345556AB04CB12D0799B9C5049BB', 'cip105': '463B27CF0DA63219ED2CEBDBF5C16922', 'cip104': '43D607D9D0009C01DBFB117126BC4395', 'cip103': '0C43854DF7DD96DC3323DCC311CD418C', 'cip102': 'F25D50BBA7FD6496CD70ACE570706ECC', 'cip101': '8367C4564B707B6C0A4A92ECA38C6EDA', 'cip100': '6D1C5788F69DC2E1EF928D9C831F3826', 'msg173': '00000000000400000000000000000000', 'msg172': '00000000000800000000000000000000', 'msg171': '00000000001000000000000000000000', 'msg170': '00000000002000000000000000000000', 'msg177': '00000000000040000000000000000000', 'msg176': '00000000000080000000000000000000', 'msg175': '00000000000100000000000000000000', 'msg174': '00000000000200000000000000000000', 'msg179': '00000000000010000000000000000000', 'msg178': '00000000000020000000000000000000', 'msg375': '77777777777777777777777777777777', 'msg374': '76767676767676767676767676767676', 'msg377': '79797979797979797979797979797979', 'msg376': '78787878787878787878787878787878', 'msg371': '73737373737373737373737373737373', 'msg370': '72727272727272727272727272727272', 'msg373': '75757575757575757575757575757575', 'msg372': '74747474747474747474747474747474', 'msg379': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg378': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'cip213': '900FEDE23DBB68E48BA9D9806E606F19', 'cip212': '45D486C0AC551C76AA17E356404726F2', 'cip211': '1D7850062F3F8B2415F22BC4D95A1367', 'cip210': '43FE63C8C08E0CE5D1DAB79348F1B64E', 'cip217': '6DDCBD01AC098B04AAA084D4C579DAC9', 'cip216': '19E6063C7529E5268E4A45703AFC8AC4', 'cip215': '07AF806C0B6ECF9DD508C0D108572C37', 'cip214': 'F573C581080C5654A6C426DD8971E68B', 'cip219': '24B199E30672EF17362468CC8C0F4E46', 'cip218': 'AFC268DB7CD2A453EA87BA6A0E923DEC', 'msg86': '00000000000000000000000000000000', 'cip375': '3FEA78D33CBBE719339555162F735CDE', 'cip376': '33800F98338B723C85566C352AB08162', 'cip377': '4C363032829D38D7D8B19F8225E03C25', 'cip370': 'D248EADFDCEF91A787DBAD04007C4A2B', 'cip371': 'B39F4A534C71B5377E54FA84BA7153CF', 'cip372': '78846BEAD6C8B1D4B28702C887EB895F', 'msg81': '00000000000000000000000000000000', 'key162': '00000000000000000000000000000000', 'key163': '00000000000000000000000000000000', 'key160': '00000000000000000000000000000000', 'key161': '00000000000000000000000000000000', 'key166': '00000000000000000000000000000000', 'key167': '00000000000000000000000000000000', 'key164': '00000000000000000000000000000000', 'key165': '00000000000000000000000000000000', 'key168': '00000000000000000000000000000000', 'key169': '00000000000000000000000000000000', 'key308': '34343434343434343434343434343434', 'key309': '35353535353535353535353535353535', 'key302': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key303': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key300': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key301': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key306': '32323232323232323232323232323232', 'key307': '33333333333333333333333333333333', 'key304': '30303030303030303030303030303030', 'key305': '31313131313131313131313131313131', 'key416': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key417': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key414': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key415': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key412': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key413': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key410': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key411': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key418': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key419': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3'}
dict_serpent192 = {'msg418': '62626262626262626262626262626262', 'msg419': '63636363636363636363636363636363', 'msg414': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'msg415': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg416': '60606060606060606060606060606060', 'msg417': '61616161616161616161616161616161', 'msg410': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg411': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg412': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg413': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg568': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg569': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg560': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg561': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg562': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg563': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'msg564': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'msg565': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg566': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg567': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': '4085D9745145C4AF8FE6D41BB58AA882', 'cip355': '92F4066413BA6DA36571822DECFAC787', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'F6F6D7FD966BFCEF3A2054C6CC2003A8', 'cip359': 'E00A4D6744941824456D88AE63375EC9', 'cip536': '701E0096FDD0F583B068337963805119', 'cip178': '10514AB50FB935D4DF8D36697E9A892C', 'cip179': '23BA3FE846E2AE8CD99FC3FE58228A05', 'cip172': 'B5142CABF118C8BA5DA8A201E7E04448', 'cip173': '2B078B616E4802ECC0104510E3E7E44C', 'cip170': 'D6661DE82FD241500194134F40C30071', 'cip171': 'B03A391CCAAE863B0ED315B0CC4FF99D', 'cip176': '40520018C4AC2BBA285AEEB9BCB58755', 'cip177': 'FB12E82326B5B32A88C73962E6B15A73', 'cip174': 'CE8A95407154E3B8DA3979FDA451F288', 'cip175': 'EF5D9D75A6A31712BAD7D332FCEF52D7', 'msg188': '00000000000000000000000000000000', 'msg189': '00000000000000000000000000000000', 'msg186': '00000000000000000000000000000000', 'msg187': '00000000000000000000000000000000', 'msg184': '00000000000000000000000000000000', 'msg185': '00000000000000000000000000000000', 'msg182': '00000000000000000000000000000000', 'msg183': '00000000000000000000000000000000', 'msg180': '00000000000000000000000000000000', 'msg181': '00000000000000000000000000000000', 'msg340': '14141414141414141414141414141414', 'msg341': '15151515151515151515151515151515', 'msg342': '16161616161616161616161616161616', 'msg343': '17171717171717171717171717171717', 'msg344': '18181818181818181818181818181818', 'msg345': '19191919191919191919191919191919', 'msg346': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg347': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg348': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg349': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'cip16': '39057A7055ADC3DF052632BA75845405', 'cip17': '0637B291488FCBC39EA131C5D0393617', 'cip14': '9A15675F3631BD2AF387A7B69DCEB89E', 'cip15': '893978E492FED5662D13AA2F759DC89A', 'cip12': 'C9BA9FC07BD7FAD3CBD56DBF9A7C5B00', 'cip13': '8B660D768B8E32F0C4E15386C5F3450D', 'cip10': '7F6347B6A370FDBCD26C91E5F1BE4E77', 'cip11': '3D8DC8CEF60F4F0F021BEA3B8A268740', 'cip18': '53A6EAA591C754B9AFB8E14B39BFFE79', 'cip19': 'AF9DD24F6FD3C9BAD97466F4E19D008E', 'key575': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key574': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'key576': '000102030405060708090A0B0C0D0E0F1011121314151617', 'key571': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key570': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key573': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key572': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'key319': '000000000000000000000000000000000000000000000000', 'key318': '000000000000000000000000000000000000000000000000', 'key311': '000000000000000000000000000000000000000000000000', 'key310': '000000000000000000000000000000000000000000000000', 'key313': '000000000000000000000000000000000000000000000000', 'key312': '000000000000000000000000000000000000000000000000', 'key315': '000000000000000000000000000000000000000000000000', 'key314': '000000000000000000000000000000000000000000000000', 'key317': '000000000000000000000000000000000000000000000000', 'key316': '000000000000000000000000000000000000000000000000', 'key405': '555555555555555555555555555555555555555555555555', 'key404': '545454545454545454545454545454545454545454545454', 'key407': '575757575757575757575757575757575757575757575757', 'key406': '565656565656565656565656565656565656565656565656', 'key401': '515151515151515151515151515151515151515151515151', 'key400': '505050505050505050505050505050505050505050505050', 'key403': '535353535353535353535353535353535353535353535353', 'key402': '525252525252525252525252525252525252525252525252', 'key409': '595959595959595959595959595959595959595959595959', 'key408': '585858585858585858585858585858585858585858585858', 'cip521': 'A3B79D257CCCC1F2C600F1DBBCD52DC4', 'msg409': '59595959595959595959595959595959', 'msg408': '58585858585858585858585858585858', 'cip520': 'FED23ADD5F44B4399F8B33F9CEFB21C4', 'msg403': '53535353535353535353535353535353', 'msg402': '52525252525252525252525252525252', 'msg401': '51515151515151515151515151515151', 'msg400': '50505050505050505050505050505050', 'msg407': '57575757575757575757575757575757', 'msg406': '56565656565656565656565656565656', 'msg405': '55555555555555555555555555555555', 'msg404': '54545454545454545454545454545454', 'cip522': 'B9A343883E1A39CEC8514078B1633D17', 'cip525': 'BE0D705A990614581A320706CE825CCC', 'cip524': '7604BA91460217B4F805AF53F05F7493', 'cip4': '257A79F891BB8D0C13FEEF1ACC264214', 'cip5': '8B3EDD5BA04CB6FF80A3874411C1B8B7', 'cip6': '73C83EA96AE151230B2DEE7110B15E2C', 'cip7': '0ABD62FC8802C9BC86E2544909AC610F', 'cip0': '9E274EAD9B737BB21EFCFCA548602689', 'cip1': '92FC8E510399E46A041BF365E7B3AE82', 'cip2': '5E0DA386C46AD493DEA203FDC6F57D70', 'cip3': 'BEC1E37824CF721E5D87F6CB4EBFB9BE', 'cip526': 'E20E39A5E682C88EB58EF73ADB33F103', 'cip8': '3948D1EF7CE021CEF9C6C1405BB5A6F9', 'cip9': '5B8AC83847FDCD6006F7D59A04BE703C', 'cip529': '037C98A775EB3D7A13EE029FC526A4D4', 'cip528': '0F301A5A411A8BEA926222326898F8E3', 'cip535': '78CFC345ED78BAB2E5443E8EFCA0C9FC', 'msg575': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg574': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg573': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'msg572': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg571': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg570': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'cip341': 'E0A98F2778073F4BF37ABE41E104149C', 'cip340': '2203AE71CC50C451703237EF2DFC83A8', 'cip343': 'F1762E8334761F9413CA1B86407ADD1C', 'cip342': '02B8FA106F816EDB8070F58321392620', 'cip345': '4A92F136A82A027E345EA452BD2021E8', 'msg98': '00000000000000000000000000000000', 'cip347': 'D71E2B78F9E5896D83F390715000A3CB', 'cip346': '56C91E67D98871521C74CC5985736336', 'cip349': '60B95E8B8B84A25DB62EC0A7D4C7DE6A', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip169': 'FD007EFCBF67C125F8532A7FD54724CC', 'cip168': '8BE4D123F250436A35AC1506BF462E25', 'cip161': '7117137E956133BF65BCDA326A8156F3', 'cip160': 'CE6430157E4EAEA967B972C35C78036C', 'cip163': '2AE14DC8A1CD98E1BD20D4E01E32DDD2', 'cip162': '7D0D165BDB56D794FAC1B1C5020270B1', 'cip165': '3A2612AF977665D4E8D05E3EA9947E60', 'cip164': 'AE266BE3BF863707C6AECE963D16530E', 'cip167': '8A1E5D419E900C9FD046BA1F74C49DC8', 'cip166': '95491F2AD7B48986522E3B1EA14DE24F', 'msg199': '01000000000000000000000000000000', 'msg198': '02000000000000000000000000000000', 'msg195': '10000000000000000000000000000000', 'msg194': '20000000000000000000000000000000', 'msg197': '04000000000000000000000000000000', 'msg196': '08000000000000000000000000000000', 'msg191': '00000000000000000000000000000000', 'msg190': '00000000000000000000000000000000', 'msg193': '40000000000000000000000000000000', 'msg192': '80000000000000000000000000000000', 'msg359': '27272727272727272727272727272727', 'msg358': '26262626262626262626262626262626', 'msg357': '25252525252525252525252525252525', 'msg356': '24242424242424242424242424242424', 'msg355': '23232323232323232323232323232323', 'msg354': '22222222222222222222222222222222', 'msg353': '21212121212121212121212121212121', 'msg352': '20202020202020202020202020202020', 'msg351': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg350': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'cip23': 'AADD759F77507F990D3856F6EFC91978', 'cip22': 'DC077DA2CBF96509A74980CE12786C41', 'cip21': '00DCD917419399ED52E2A528ECAB86C5', 'cip20': '6F6C9FDBB84546B3BD98703730A71292', 'cip27': '1460BD4CE7589DFC8CA2A341CEDE21A2', 'cip26': '40288DA36DC4A581CFC6BF52768AEAC0', 'cip25': 'C972EAE644F542F2D61581105DAA2DE9', 'cip24': 'AA8B04CFD3F03D913981888D65F595F4', 'cip29': '52841B754B398E76A046A808D0254DB1', 'cip28': '415E3D395E8AF9F0B367B18279EC9D36', 'key548': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip352': '6787E76F2144158ADDC7405F6CDBD3D3', 'cip353': 'DE415BC84C595193CAC4389C90D70635', 'key540': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key541': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key542': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key543': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'key544': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'cip350': '2101BDD277124358EB687636D7E72799', 'key546': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'key547': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'cip351': '93F3ECA02F0074263B3CAD70FF69D857', 'cip356': '79FD6B7CA20212B01CD2B2F4D9EAD715', 'cip357': '1B8D5ECF81B227C0830EAA73FB45A344', 'key148': '000000000000000000000000000000000000080000000000', 'msg66': '00000000000000000000000000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'msg67': '00000000000000000000000000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'key430': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key431': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key432': '707070707070707070707070707070707070707070707070', 'key433': '717171717171717171717171717171717171717171717171', 'key434': '727272727272727272727272727272727272727272727272', 'key435': '737373737373737373737373737373737373737373737373', 'key436': '747474747474747474747474747474747474747474747474', 'key437': '757575757575757575757575757575757575757575757575', 'key438': '767676767676767676767676767676767676767676767676', 'key439': '777777777777777777777777777777777777777777777777', 'key324': '040404040404040404040404040404040404040404040404', 'key325': '050505050505050505050505050505050505050505050505', 'key326': '060606060606060606060606060606060606060606060606', 'key327': '070707070707070707070707070707070707070707070707', 'key320': '000000000000000000000000000000000000000000000000', 'key321': '010101010101010101010101010101010101010101010101', 'key322': '020202020202020202020202020202020202020202020202', 'key323': '030303030303030303030303030303030303030303030303', 'key328': '080808080808080808080808080808080808080808080808', 'key329': '090909090909090909090909090909090909090909090909', 'msg502': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg503': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'msg500': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg501': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg506': 'BABABABABABABABABABABABABABABABA', 'msg507': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg504': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg505': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg508': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg509': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'cip488': 'A10D2BB490B3E094D8F10C2FBD10F769', 'cip489': '89577B5BDB54B3392C701CF05AF13D80', 'cip482': 'D7EC76F1551103661327D9F49B24BE29', 'cip483': 'B4F3556B075F45C31300AFD946E18C7B', 'cip480': '014399C4F9D3C6E2B9433C5FC1503D62', 'cip481': 'A54887894994563D48C3F8AF810499A0', 'cip486': '85140E6EE560021743538B935A1A6017', 'cip487': 'BCAD881D9F995D2EBB8683A28F9A2164', 'cip484': 'B1012690ED1FEAEC22F6A123705749BF', 'cip485': 'DD4C9178D843A67A73A3696569294E60', 'msg218': '00000020000000000000000000000000', 'msg219': '00000010000000000000000000000000', 'msg216': '00000080000000000000000000000000', 'msg217': '00000040000000000000000000000000', 'msg214': '00000200000000000000000000000000', 'msg215': '00000100000000000000000000000000', 'msg212': '00000800000000000000000000000000', 'msg213': '00000400000000000000000000000000', 'msg210': '00002000000000000000000000000000', 'msg211': '00001000000000000000000000000000', 'cip378': '0F49BE67B3F2CF04BC8ECA60FE7882CA', 'cip379': 'ABFE3D7BD753341FADBAB8FFCBDF88C2', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': 'DC3C54D2034BF661CCE9B37282E7740D', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': 'CD55E0280203FC1B4AAC7376C2C395D7', 'cip576': '6AB816C82DE53B93005008AFA2246A02', 'cip574': 'A59BD7823058443E5707A964F9C4480A', 'cip575': '08FC09BD2580A3FFBC8453FAF21417C0', 'cip572': '317508AEE1F13E2FFC1863892CC8D9AD', 'cip573': '7510879F6854807D0B5063E6302483E9', 'cip570': '9578B4A42F8F8B52E264A6194310C54D', 'cip571': '62E65752C03D9F20BE7455BB44CE2EEF', 'cip396': '01FA4038C04186CFBD0F89FF1AC6A200', 'cip397': '9E69FEC5A105B64FBB1CFFD4CA3E040E', 'cip394': 'FD9F615C311E9A2D14AEC51E79727F25', 'cip395': 'F6294BF1EAE7B5FA9C5397BF2D35C580', 'cip392': '5221086B83558B77B7DDCC0118548CD2', 'cip393': 'AC5B4E39044BEFC78D6104B919D5D358', 'cip390': '6A63904FA0877C079DF0820328F34D41', 'cip391': '01308ACD539F8C4DA4C820EC7C8E12FC', 'cip398': '344253C38D033436622DBADE296302A3', 'cip399': 'EBE2CAF6665895790ED5E27643070D97', 'msg328': '08080808080808080808080808080808', 'msg329': '09090909090909090909090909090909', 'msg322': '02020202020202020202020202020202', 'msg323': '03030303030303030303030303030303', 'msg320': '00000000000000000000000000000000', 'msg321': '01010101010101010101010101010101', 'msg326': '06060606060606060606060606060606', 'msg327': '07070707070707070707070707070707', 'msg324': '04040404040404040404040404040404', 'msg325': '05050505050505050505050505050505', 'cip154': '84E74236D365A90B6417221C0E5ED058', 'cip155': '7DC0D45689A260233E52B56EE49F326B', 'cip156': 'E69EE6C58AE686AC193F4A118E5C7680', 'cip157': '7FCF4D217B2A37C8D3A822C43B1A119E', 'cip150': '4D80946E2267E0E485CDF4CBEA0BDE73', 'cip151': 'EAE07676A063EB5F7F99FAED7B065188', 'cip152': 'E407985AF526A75AB42DB52D64987992', 'cip153': '6C6EAD1E4101F16AD0FC4DE34DA19D8A', 'cip158': '6D37043BF5B8D45F1E44A7C0E792A343', 'cip159': 'ED46DEA31CAC83EE9F812C9006891C32', 'cip38': '19E972ACB8159AF2BE06C2CEB13F17CB', 'cip39': 'D3181CAF92EB933472AB5D7D9A79359F', 'cip34': '2A1A31C9F9EC3F0041E4981C14075C9B', 'cip35': '668D25EAB49A68A353170FB9804C49E9', 'cip36': 'B0851073E77BEBADB5E4620A5ECAB48F', 'cip37': '0D7DD474F2ADD4E616C2BDCB31AE295E', 'cip30': 'E28C2E20BF18DAD62ADA7B46D46C51AC', 'cip31': 'EACF9AD4EAC19266F886CB3AE50B2CA8', 'cip32': '9EF148F4819E1AD53458FF7B97512719', 'cip33': '8B992E1FD9026C14545D3B45BA12DD26', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key557': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'key556': 'ECECECECECECECECECECECECECECECECECECECECECECECEC', 'key555': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key554': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key553': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'key552': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key551': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key550': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key559': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'key558': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key429': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key428': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key427': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key426': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key425': '696969696969696969696969696969696969696969696969', 'key424': '686868686868686868686868686868686868686868686868', 'key423': '676767676767676767676767676767676767676767676767', 'key422': '666666666666666666666666666666666666666666666666', 'key421': '656565656565656565656565656565656565656565656565', 'key420': '646464646464646464646464646464646464646464646464', 'key333': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key332': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key331': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key330': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key337': '111111111111111111111111111111111111111111111111', 'key336': '101010101010101010101010101010101010101010101010', 'key335': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key334': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key339': '131313131313131313131313131313131313131313131313', 'key338': '121212121212121212121212121212121212121212121212', 'msg511': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg510': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg513': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'msg512': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'msg515': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg514': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'msg517': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg516': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg519': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg518': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg549': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg543': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'cip499': '8288276E59D75A79C1774106B59B053F', 'cip498': '9A8E5E765EBBA0ECD7BDDA2B59F2F2DC', 'cip491': 'AF5E72A0182C7B0346E185AD2787637C', 'cip490': 'A516A194C5778CF819C5839359EE37E7', 'cip493': '4FEC832823472C8EBD8B4789DEF3D803', 'cip492': 'A88C2FC1D51A3E541D81C32028AE6513', 'cip495': '2E3FB14353E7FD03C1FFD680859DB914', 'cip494': 'B1A7D900B7F60D0D7476BEEAD9628BE5', 'cip497': '157D004EE3DA6B7E2F1B08F49931BF83', 'cip496': '8AAB4C4B812FEA56C4CA9E8C2436F40C', 'msg209': '00004000000000000000000000000000', 'msg208': '00008000000000000000000000000000', 'msg205': '00040000000000000000000000000000', 'msg204': '00080000000000000000000000000000', 'msg207': '00010000000000000000000000000000', 'msg206': '00020000000000000000000000000000', 'msg201': '00400000000000000000000000000000', 'msg200': '00800000000000000000000000000000', 'msg203': '00100000000000000000000000000000', 'msg202': '00200000000000000000000000000000', 'cip369': 'CE2BB59331BF6C243DC04C23EA7945CE', 'cip368': 'D8F2B7397A4BC2B20D96EDA800F46D78', 'cip363': 'A6B8945484E63E9EE0DD932BFE240CCC', 'cip362': '26792B75353FB1048D514E13EF5F4E08', 'cip361': '9E2F6696107057FDD2FC7ECD351C1012', 'cip360': '374819F887A8CEF3E5AFB7EFE6AF565F', 'cip367': 'F02832F22DFDE7132D000F4BD5818EB1', 'cip366': 'A50117625F2637E53E08C28439B83AD3', 'cip365': '0A98830E74A8E47963620A24ABFD309D', 'cip364': '77FF543AC4BDA10D8CECEBF68D0D7D4F', 'cip569': '537C2B538CCF4176C462A2141E7CD82C', 'cip568': '1E0F3F9FE91BCBB9A2EEF1246871B245', 'cip425': '73E32D38EE52293BACB8C5DC34A9C64D', 'cip565': 'A730A22B16F932F282125137CF544499', 'cip564': '18AE78589D8F0B88A05595DE86D106D6', 'cip567': '9F70595DCA4A1269578C6B925418F452', 'cip566': '6B6F84D457610058D8E9AB8920BDA204', 'cip561': '92FD563566B073BF339FF2E88248D8B7', 'cip560': '48786EDF237C90217024415454F13924', 'cip563': 'E341038E785D58BDCEBABE1C04B6A82F', 'cip562': '4067AAC21B2CB46478F95BB0E64769B5', 'cip385': '1A76B6A8D30EF847FCAA10475C035E4B', 'cip384': '1DB43A51022B17096BA69697CCD908E0', 'cip387': '2D167031BEC25D808268E035694F6F5A', 'cip386': '5C33534B269D1C3B1DE7D93F1AB983A9', 'cip381': 'F987D1BCCB79B514B72B82D8002C43D0', 'cip380': '9B89376FB4EE9D5AFBDA22D1F67E7155', 'cip383': '902718F3B134E870B58D28509EC791C3', 'cip382': '9D9B6F0780B2D4F72EC8BCAEF6771739', 'cip389': '24C09E09BDEB87BB85526B56B3DD9F0C', 'cip388': '4FFA26B873B2C679D0DCE01AA93C00A1', 'cip423': '9398DC0C30E4BBDD651AC0EC3567859A', 'msg339': '13131313131313131313131313131313', 'msg338': '12121212121212121212121212121212', 'msg331': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg330': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg333': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg332': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg335': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg334': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg337': '11111111111111111111111111111111', 'msg336': '10101010101010101010101010101010', 'cip143': '86F93C8B9552D8971367EAE2A366312F', 'cip142': 'E0E5399FEF15563392741BC333246873', 'cip141': '479C1979DDB0052BA7DF875314CB2A35', 'cip140': '894D2F50F43BA36B539DE43637927AC9', 'cip147': 'CF2793EDA6299C358F79D0F15853E075', 'cip146': '9F3BF5E17F297B3B3F3D6311B2874FC1', 'cip145': 'E733109E82EEDEFBB02512F1C030FF35', 'cip144': 'DABC07C4DFDDA34A8B61D1E1F0461196', 'cip149': '409F6D08C56C0129A485A2CD503AA754', 'cip148': '4CFCD92E08E82B0B3FC7C0CB8A2193CE', 'cip49': '9B5B6DFFFCB2201390728372E1259012', 'cip48': '399800963634CD1B96D9FCEFE1D0815E', 'cip41': 'FE2893A03D01523DF7BCF0EC76A71E76', 'cip40': '2B06E5A2CB8E141B6F194E7987D32E14', 'cip43': '20D29D2A08CAED608CEE792B82E9F900', 'cip42': '018056BEED112C1B11C6D58F383E51F3', 'cip45': '81FC9F0C865FC970721180942F0DADDE', 'cip44': 'FB4786827E61312B24889E8A75BFE0E8', 'cip47': '5509A6F21705DA67E685C1D2515FC40F', 'cip46': '179BA8EFBE611F1358B2D7C8A14F6056', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'key522': 'CACACACACACACACACACACACACACACACACACACACACACACACA', 'key523': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key520': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key521': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key526': 'CECECECECECECECECECECECECECECECECECECECECECECECE', 'key527': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key524': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key525': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key528': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key529': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key458': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key459': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key452': '848484848484848484848484848484848484848484848484', 'key453': '858585858585858585858585858585858585858585858585', 'key450': '828282828282828282828282828282828282828282828282', 'key451': '838383838383838383838383838383838383838383838383', 'key456': '888888888888888888888888888888888888888888888888', 'key457': '898989898989898989898989898989898989898989898989', 'key454': '868686868686868686868686868686868686868686868686', 'key455': '878787878787878787878787878787878787878787878787', 'msg528': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg529': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg524': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg525': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg526': 'CECECECECECECECECECECECECECECECE', 'msg527': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg520': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg521': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'msg522': 'CACACACACACACACACACACACACACACACA', 'msg523': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'cip330': '7F0A2F539FEF406A387AE2175E76BE79', 'cip331': '6A76EBAE8FA0825D36A84A6120CAA72B', 'cip332': '84C31062C66D4AB90FDB0BFFB6F08B9C', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000200000000000000000000', 'msg239': '00000000000100000000000000000000', 'msg230': '00000000020000000000000000000000', 'msg231': '00000000010000000000000000000000', 'msg232': '00000000008000000000000000000000', 'msg233': '00000000004000000000000000000000', 'msg234': '00000000002000000000000000000000', 'msg235': '00000000001000000000000000000000', 'msg236': '00000000000800000000000000000000', 'msg237': '00000000000400000000000000000000', 'cip558': 'ACC1756DD43F155A33977DB6E86BABCE', 'cip559': 'E966ACAE63A9BBBAAA6262CF5FAB0474', 'cip550': '6B21C73A7056B59F3F3F0F2662396E0A', 'cip551': '00D2A1DC5E137A2868FD0D04E236DCD9', 'cip552': '28B1AACC18DC4A838C08534FC813696D', 'cip553': 'D2B6E01150E16C62BFA599689E80B2C5', 'cip554': 'FD4B2CF3DF4C71E85C052C5F5B832CF3', 'cip555': '41F6838C82F6A81D2EF53A75A2352B6F', 'cip556': '1378A3562194E4706417E4EE5309F2DE', 'cip557': '0CB3C27162B9B52F098D183B588D91C2', 'msg304': '00000000000000000000000000008000', 'msg305': '00000000000000000000000000004000', 'msg306': '00000000000000000000000000002000', 'msg307': '00000000000000000000000000001000', 'msg300': '00000000000000000000000000080000', 'msg301': '00000000000000000000000000040000', 'msg302': '00000000000000000000000000020000', 'msg303': '00000000000000000000000000010000', 'msg308': '00000000000000000000000000000800', 'msg309': '00000000000000000000000000000400', 'cip58': '7A960A521E193922ED2275B1FCEB484F', 'cip59': '357E6FBCA32874FDCE99AD14BD10C4B8', 'cip52': '7F57B51D6B2E5E8C3DBEDF6B68A3ACDB', 'cip53': '5DE80D7BF3FC0B05ACEB1311BE12E31B', 'cip50': '0DB33144E4EB0FCAC271AB4D26F7B3B3', 'cip51': 'D7987CAA9C1CAB111984C2BA993F95B9', 'cip56': '8AF02339AC04EEDDC5D29B1D8AB85E34', 'cip57': 'D11C7DCD0E9B857DDC1A8D73169BBA2D', 'cip54': 'BE2C16F62E116A472C43D526D582A2F2', 'cip55': '0D9AED1721E71B09C7CF34650315ADD4', 'key199': '000000000000000000000000000000000000000000000000', 'key198': '000000000000000000000000000000000000000000000000', 'key197': '000000000000000000000000000000000000000000000000', 'key196': '000000000000000000000000000000000000000000000000', 'key195': '000000000000000000000000000000000000000000000000', 'key194': '000000000000000000000000000000000000000000000000', 'key193': '000000000000000000000000000000000000000000000000', 'key192': '000000000000000000000000000000000000000000000000', 'key191': '000000000000000000000000000000000000000000000001', 'key190': '000000000000000000000000000000000000000000000002', 'key531': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key530': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key533': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key532': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key535': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key534': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key537': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key536': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'key539': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key538': 'DADADADADADADADADADADADADADADADADADADADADADADADA', 'key449': '818181818181818181818181818181818181818181818181', 'key448': '808080808080808080808080808080808080808080808080', 'key441': '797979797979797979797979797979797979797979797979', 'key440': '787878787878787878787878787878787878787878787878', 'key443': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key442': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key445': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key444': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key447': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key446': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg539': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg538': 'DADADADADADADADADADADADADADADADA', 'msg533': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg532': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'msg531': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg530': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'msg537': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg536': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg535': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg534': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg227': '00000000100000000000000000000000', 'msg226': '00000000200000000000000000000000', 'msg225': '00000000400000000000000000000000', 'msg224': '00000000800000000000000000000000', 'msg223': '00000001000000000000000000000000', 'msg222': '00000002000000000000000000000000', 'msg221': '00000004000000000000000000000000', 'msg220': '00000008000000000000000000000000', 'msg229': '00000000040000000000000000000000', 'msg228': '00000000080000000000000000000000', 'cip503': '62DEECC84AB4651CAF1BCF83F75521AA', 'cip547': '19C6754D56CDE195FBA5E9F289D1876B', 'cip546': '00A8004E465299FA1D925E9D947DB7AE', 'cip545': '855A63F82AEFC19694919C2E28C5851D', 'cip544': '483859C1C874565D7FCB8CDC8A3C35A1', 'cip543': 'B4E41B577752BC40AE6960F5E5AFE2A5', 'cip542': '360F3DCC93B9D72B0591659DD052CC07', 'cip541': '998AE4749292D4994115D2015C198BAA', 'cip540': 'E39D38F6BD6B280435AFB9C7DCA932D2', 'cip549': '258517DBF0E07A9218A265FC566A8522', 'cip548': '3859068F6715C1D206D7CCA9BA417D02', 'cip502': '8B55D46F203C664C03ED479EF680BB90', 'msg313': '00000000000000000000000000000040', 'msg312': '00000000000000000000000000000080', 'msg311': '00000000000000000000000000000100', 'msg310': '00000000000000000000000000000200', 'msg317': '00000000000000000000000000000004', 'msg316': '00000000000000000000000000000008', 'msg315': '00000000000000000000000000000010', 'msg314': '00000000000000000000000000000020', 'msg319': '00000000000000000000000000000001', 'msg318': '00000000000000000000000000000002', 'cip67': '556424407058A1BF639387032BB4972B', 'cip66': '47CB1114753A29FA68E83BF3754F5713', 'cip65': '00300AD85514851A32376A583B99416A', 'cip64': 'EBC56A2AB4DC394C8409EBC529103C09', 'cip63': '19A8882B0FDB10E143FF9DF9D32DA301', 'cip62': 'EF923294B89B78F017C874FC4472762E', 'cip61': '038A5BB1246BB8F0460ADC7826211268', 'cip60': '1AC04248825E32B8E71C34875371F307', 'cip69': '570D68BC03C1AD3173316BB3484166DB', 'cip68': 'C573C69439543B71A1EAF6A38D1DB977', 'cip229': 'F15ED8B81B74BD35586E1594AB3B0F73', 'key298': '000000000000000000000000000000000000000000000000', 'key299': '000000000000000000000000000000000000000000000000', 'key294': '000000000000000000000000000000000000000000000000', 'key295': '000000000000000000000000000000000000000000000000', 'key296': '000000000000000000000000000000000000000000000000', 'key297': '000000000000000000000000000000000000000000000000', 'key290': '000000000000000000000000000000000000000000000000', 'key291': '000000000000000000000000000000000000000000000000', 'key292': '000000000000000000000000000000000000000000000000', 'key293': '000000000000000000000000000000000000000000000000', 'key508': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key509': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key504': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key505': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key506': 'BABABABABABABABABABABABABABABABABABABABABABABABA', 'key507': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key500': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key501': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key502': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key503': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key276': '000000000000000000000000000000000000000000000000', 'key277': '000000000000000000000000000000000000000000000000', 'key274': '000000000000000000000000000000000000000000000000', 'key275': '000000000000000000000000000000000000000000000000', 'key272': '000000000000000000000000000000000000000000000000', 'key273': '000000000000000000000000000000000000000000000000', 'key270': '000000000000000000000000000000000000000000000000', 'key271': '000000000000000000000000000000000000000000000000', 'key278': '000000000000000000000000000000000000000000000000', 'key279': '000000000000000000000000000000000000000000000000', 'cip515': '545A627EC5FC0D3BEBC9663EAEBE4B8D', 'key474': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key475': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key476': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key477': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key470': '969696969696969696969696969696969696969696969696', 'key471': '979797979797979797979797979797979797979797979797', 'key472': '989898989898989898989898989898989898989898989898', 'key473': '999999999999999999999999999999999999999999999999', 'key478': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key479': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg252': '00000000000000080000000000000000', 'msg253': '00000000000000040000000000000000', 'msg250': '00000000000000200000000000000000', 'msg251': '00000000000000100000000000000000', 'msg256': '00000000000000008000000000000000', 'msg257': '00000000000000004000000000000000', 'msg254': '00000000000000020000000000000000', 'msg255': '00000000000000010000000000000000', 'msg258': '00000000000000002000000000000000', 'msg259': '00000000000000001000000000000000', 'msg494': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg495': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg496': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg497': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg490': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg491': 'ABABABABABABABABABABABABABABABAB', 'msg492': 'ACACACACACACACACACACACACACACACAC', 'msg493': 'ADADADADADADADADADADADADADADADAD', 'msg498': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg499': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'cip538': '35DA444A095B7D63D4E06554189AFCB7', 'cip539': 'ED5F9434F2F92EBDD179F1062D47B72D', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'cip514': 'E66A7E11B0CF0DB448B35C74358A265F', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': '5DA9109BC3193E5D2ABA0CA577CBBCD4', 'cip289': 'BC46C6FE8F7E549CCC402FC4633C670C', 'cip284': '602BE82E95A1BEF5C2742099A6CB70D9', 'cip285': 'B53F1354FE1291679B6D418AC4A3E26D', 'cip286': '0F68F7C1FFB5FA997D8CC007CF4F5BA8', 'cip287': '3B90014CDF2D614A339B48A6F374D1C4', 'cip280': '4FF5F65E2089279F1FFF7BF06EC6D527', 'cip281': 'B0C818F70672EF5E6F20515214DDDF7A', 'cip282': '2A4D0F00CA19EDCEEF86D7F283221A97', 'cip283': 'F9E6A04D60D5C06994E196EEF788ED59', 'msg75': '00000000000000000000000000000000', 'cip448': '1C3D07DA0CA9A696CCAB1EF2BACDEF00', 'cip449': 'B5FF3824FEE87A20560F41C3EB292748', 'cip446': '5586D2D1536F620E6F8E890D31677003', 'cip447': '559A2DABA379F7C0B70BC63D714B248B', 'cip444': 'C5AB41C539A1C24CF7E943D319F12F6D', 'cip445': 'C23AFEAE23394F5C4FB4F326670F52D0', 'cip442': 'C9916FC4263B3EA2CC8DF3603317B117', 'cip443': '4328207EE0DB37B36E8F986A6AD9B3C9', 'cip440': 'C2F47523A605A6A2362EACAF6F3A6BF8', 'cip441': '7E6591A9D3383087676902ADBC1D366C', 'cip266': 'F8BFC6819A8F1683DD314AFEDAA80F33', 'cip267': '28552459A3EB05AE69463C26F6413B73', 'cip264': 'EC74DC99FDB377E35EBA6E5C920C9E20', 'cip265': '12F92E9FF675FFE132FEC127A61ED1D6', 'cip262': 'B9B7F96A83494D61C0D476E15CF9FC40', 'cip263': '9F61E523005A37B71A589C35E2320580', 'cip260': '5684B43817E24580EE373B54B57126C1', 'cip261': 'D31DC022A55A6CB7116D5AA79713EBEF', 'cip268': 'E018CED8C1FC6FE1849E945550602D46', 'cip269': '8A46B1349AE83730266EBFB1D62BA1EB', 'cip198': 'D4257D927C7F2A6390DF198B573DD1BA', 'cip199': '7610F6DBE8F3F19682DCC01AF57DCD79', 'cip190': '4209B9F47FE46DA7095E093698227280', 'cip191': '5D058517AC7CC5AFD5C33253D4703B46', 'cip192': '23F5F432AD687E0D4574C16459618ABB', 'cip193': '56CD894936F6E9A4A4304CAE06F97CE3', 'cip194': 'B604D94F461AF9F4771BC53F8E3C227B', 'cip195': 'BB852AC4756880630D6D63951D3D2602', 'cip196': '319C206CD98D2C98993FC2CDAAB3259C', 'cip197': 'D271595956451E3B7D957A3485ADE9F7', 'cip70': '2ABE779A9A42BF593A2D20495C6F5A37', 'cip71': '7D648B890DCE86ADAE607B24B17F7ADC', 'cip72': '56463A7AEB3D1B104868B5F0CB88479B', 'cip73': '1A00009A7CAE8EF56B167F94F9932585', 'cip74': 'BA0BDE829631F63E14FE1995C57CBE29', 'cip75': 'A0625DDE21DF874E27751F460DB24939', 'cip76': '3A850B3917B926B7C1861AA8557548DB', 'cip77': '33FB35F2ED3A0F9A9C0D62868890B706', 'cip78': '8EB519BF9B7F9841FC429C21930730AA', 'cip79': '973672A4178DA471DB7C2CC9F3349DA4', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'msg576': '00112233445566778899AABBCCDDEEFF', 'key289': '000000000000000000000000000000000000000000000000', 'key288': '000000000000000000000000000000000000000000000000', 'key283': '000000000000000000000000000000000000000000000000', 'key282': '000000000000000000000000000000000000000000000000', 'key281': '000000000000000000000000000000000000000000000000', 'key280': '000000000000000000000000000000000000000000000000', 'key287': '000000000000000000000000000000000000000000000000', 'key286': '000000000000000000000000000000000000000000000000', 'key285': '000000000000000000000000000000000000000000000000', 'key284': '000000000000000000000000000000000000000000000000', 'key519': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key518': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key513': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key512': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key511': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key510': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key517': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key516': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key515': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key514': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key265': '000000000000000000000000000000000000000000000000', 'key264': '000000000000000000000000000000000000000000000000', 'key267': '000000000000000000000000000000000000000000000000', 'key266': '000000000000000000000000000000000000000000000000', 'key261': '000000000000000000000000000000000000000000000000', 'key260': '000000000000000000000000000000000000000000000000', 'key263': '000000000000000000000000000000000000000000000000', 'key262': '000000000000000000000000000000000000000000000000', 'key269': '000000000000000000000000000000000000000000000000', 'key268': '000000000000000000000000000000000000000000000000', 'cip518': 'F331010DCE907213D38FDF73DFE92AA0', 'cip519': 'B4B996316FAD0DEE6D09E16E8D121F3E', 'key463': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key462': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key461': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key460': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key467': '939393939393939393939393939393939393939393939393', 'key466': '929292929292929292929292929292929292929292929292', 'key465': '919191919191919191919191919191919191919191919191', 'key464': '909090909090909090909090909090909090909090909090', 'key469': '959595959595959595959595959595959595959595959595', 'key468': '949494949494949494949494949494949494949494949494', 'cip516': '3CAACFD178F5F7D85E9066F3C0CBF9A2', 'cip517': 'CE48B06CCA614EF2065F99D495F219DD', 'cip523': '5FCAB21E2A5A324B9EF2359D066023FA', 'cip510': '7C9A3D94E87F71B65C471223D64E74C8', 'cip511': 'B91C5A6582A87D13A17E3B17842F3FCC', 'cip512': '7C7357F26929DCCA4BEF9BC878076303', 'cip513': '7C0E803576A640239114CDC753800CDD', 'msg241': '00000000000040000000000000000000', 'msg240': '00000000000080000000000000000000', 'msg243': '00000000000010000000000000000000', 'msg242': '00000000000020000000000000000000', 'msg245': '00000000000004000000000000000000', 'msg244': '00000000000008000000000000000000', 'msg247': '00000000000001000000000000000000', 'msg246': '00000000000002000000000000000000', 'msg249': '00000000000000400000000000000000', 'msg248': '00000000000000800000000000000000', 'msg483': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg482': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg481': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg480': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg487': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg486': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg485': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg484': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'msg489': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg488': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'cip527': '1F35585C0908BBA94F1008D64EC71F13', 'cip299': '81CA67898765727FFDEDBC7DC25EC8FF', 'cip298': '774D83990DCBAF6B9186DF250DC721A9', 'cip293': 'EA4491C7F5A9D671DA358C535965E1C3', 'cip292': '3734062F8FCF37FBD1C48B5AAEF00C5F', 'cip291': '84DD300A8FDE4AC126F41EA0692F3E07', 'cip290': '60A11AFFABBEE4D5D5564A74C7F94C91', 'cip297': '319D430B55E2A2C942B089755D4C6035', 'cip296': '14148C222620E009AC51EE2321641D25', 'cip295': '45A5744C068AC6C7BC028C4D40885F20', 'cip294': 'D46899CC964A2A082C80AB7E0A4B153A', 'cip459': '2A8EBDA9F50C054E597966755CDADDBF', 'cip458': '5527616D9992C8F28BDD2DAF9C3F0452', 'cip455': 'CD40807E6803B0C00F1F2EF431B57800', 'cip454': '34CA295068D57F416BF094FA83A042CB', 'cip457': 'AADACD44DEA9BBE5C101915A1BE1D51A', 'cip456': 'EE152711BFC799FB360AD32361F5ACC6', 'cip451': 'D69952DD9A6B538D9C9CE4F19EE32A30', 'cip450': 'C09E29BB663693CBC8D63EB21AA041B9', 'cip453': 'D7D5CBF782F1F61F9839ECB0DECE4458', 'cip452': '7472F0EF8E98AB4C314D6830497C71B0', 'cip275': 'E0F6B38346E3E0AE2C5763C25C01ACB9', 'cip274': 'B8CD6C76DAD863B3A2342265A42C7878', 'cip277': '305E7A77DC3B62F110688AB334002132', 'cip276': '96E295724B3F296016A3F6853B679079', 'cip271': '6BCD123081CB4DA2197A9204947C4765', 'cip270': 'AEA0972033ACDA2FE228A3619511B0CF', 'cip273': '675A3322BCCCF4D78F3376ECC2C8A415', 'cip272': '3D8075B415AC9DEB6008B51597CE28F4', 'cip279': '23EB8F12867D39E24E5A71606E3B5C1E', 'cip278': '324E96A82CE897DAB3850047C38E9B18', 'cip187': '1B9DD629B9E11BCD27C4148887AE662A', 'cip186': '19D13A0AC90F83E5B3CA943C6462D295', 'cip185': '9EA538A95E21B6738B0F4BDD0D5A6423', 'cip184': '660CF6A3F77836AC685519C702548EE7', 'cip183': '81421CDE68390C877C025D60D7578959', 'cip182': '79386D808CC081C0888E83C047411490', 'cip181': '16F61AE21DEF7E6FF252F7A7C0A1FD33', 'cip180': '68E7992B17261F9F50693B291B40DE29', 'cip189': '8AF1A83901D7DD153FF8D271B210E3AB', 'cip188': '14EF2BA201698B1185B4F45D3C4BF7C1', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': '15955CDA082E2278B2EAB498BAE90A5D', 'cip88': '26474A9B6A125DA80A989286F1AADB77', 'cip85': 'CBB867073A139F7A39A5ABFB1F9B7084', 'cip84': '9915EB2B534C901AB3E208F0B8274438', 'cip87': '871D4D57145444F7858A3A1727FEE068', 'cip86': '487B9F02DF40531F6B1BD096A8E32377', 'cip81': '174FC71F855D61484B8C05DEB12988BA', 'cip80': '21C3E9BDB411A2CF58ACFCDDA07CA06E', 'cip83': 'D671E381AE4CBFBC4D360ACE36538EB6', 'cip82': '337671C8D092C431778655358AE1A622', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg99': '00000000000000000000000000000000', 'cip344': '390D65ABAE7EA70BEF4F727EE8737211', 'msg95': '00000000000000000000000000000000', 'cip348': 'A038C74CD4645FFBF4DA32CC28B3FCA6', 'key250': '000000000000000000000000000000000000000000000000', 'key251': '000000000000000000000000000000000000000000000000', 'key252': '000000000000000000000000000000000000000000000000', 'key253': '000000000000000000000000000000000000000000000000', 'key254': '000000000000000000000000000000000000000000000000', 'key255': '000000000000000000000000000000000000000000000000', 'key256': '000000000000000000000000000000000000000000000000', 'key257': '000000000000000000000000000000000000000000000000', 'key258': '000000000000000000000000000000000000000000000000', 'key259': '000000000000000000000000000000000000000000000000', 'key382': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'key383': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key380': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key381': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key386': '424242424242424242424242424242424242424242424242', 'key387': '434343434343434343434343434343434343434343434343', 'key384': '404040404040404040404040404040404040404040404040', 'key385': '414141414141414141414141414141414141414141414141', 'key388': '444444444444444444444444444444444444444444444444', 'key389': '454545454545454545454545454545454545454545454545', 'key498': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key499': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key496': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key497': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key494': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key495': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key492': 'ACACACACACACACACACACACACACACACACACACACACACACACAC', 'key493': 'ADADADADADADADADADADADADADADADADADADADADADADADAD', 'key490': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key491': 'ABABABABABABABABABABABABABABABABABABABABABABABAB', 'cip530': '0319C5A1C2DE28E0F3B6F516BA30B312', 'msg278': '00000000000000000000020000000000', 'msg279': '00000000000000000000010000000000', 'msg274': '00000000000000000000200000000000', 'msg275': '00000000000000000000100000000000', 'msg276': '00000000000000000000080000000000', 'msg277': '00000000000000000000040000000000', 'msg270': '00000000000000000002000000000000', 'msg271': '00000000000000000001000000000000', 'msg272': '00000000000000000000800000000000', 'msg273': '00000000000000000000400000000000', 'msg478': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'msg479': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'msg476': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg477': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'msg474': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg475': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg472': '98989898989898989898989898989898', 'msg473': '99999999999999999999999999999999', 'msg470': '96969696969696969696969696969696', 'msg471': '97979797979797979797979797979797', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'cip537': '4A72FE0EBE8205E44261A8F2B5DA532E', 'cip468': 'E551242033F13D2384586508D71FDC40', 'cip469': 'AA54E408753CC97FDB6CD532F8F18532', 'cip460': 'E5A11D4DE71F2ABB2DEB72C8BB95C74D', 'cip461': 'A55341D7557B4A99CD9A2DDF24FE3C51', 'cip462': '758E281DA45E90F75AFC447F364EF6A9', 'cip463': 'C14C56A05B419EED6D75A46CAA1DEDFB', 'cip464': 'DF73BF1BC45AE87CD5C1222D697EDF75', 'cip465': '4C265114EEED48122B4C8F5ACB37AE49', 'cip466': '30CE4670005B4262C23055C3A505F0EB', 'cip467': '570D0AB8947FBAC84AB18ED58DA39AA6', 'cip240': '67A133B6981D6CFFFB0894B5CD60C384', 'cip241': 'B9724EFA90EE77242862C6D107053799', 'cip242': '6CC4B4806D82C681027375553BEEF871', 'cip243': 'D05EA01E7AE0768FFE5B499D4A0EA833', 'cip244': 'EB5259D268854E583B02C445F0DBB33D', 'cip245': '273792A497CBE6058FB8CE518C05A9A7', 'cip246': '629EE820F46138558FE7AA6D547F971E', 'cip247': 'F04FF6EC27F7412350CA62E6A3BE479F', 'cip248': '2F19CFB18D4B538C688FF0FF73EEF402', 'cip249': '2B2D1598BD1A57A6277D0F1182423E70', 'msg296': '00000000000000000000000000800000', 'msg297': '00000000000000000000000000400000', 'msg294': '00000000000000000000000002000000', 'msg295': '00000000000000000000000001000000', 'msg292': '00000000000000000000000008000000', 'msg293': '00000000000000000000000004000000', 'msg290': '00000000000000000000000020000000', 'msg291': '00000000000000000000000010000000', 'msg298': '00000000000000000000000000200000', 'msg299': '00000000000000000000000000100000', 'cip98': 'B384BE1E8CEAD9DE1E209FC92BA6A3D3', 'cip99': '4E512E32F6B60CFE5660D7CFA21E13FC', 'cip96': '1E9F7474C984CC73B7F90F8EC01F547D', 'cip97': '9CAAD32B4195E293A792CF2403839879', 'cip94': '97289170C25CE1EC2011B27487DC8903', 'cip95': '3BC60DC98B29BA75D7DBA12D78BED74D', 'cip92': '7FF3E31C19BB193B4A2CCD488CB44F97', 'cip93': '2FB402BFAAACCC4F55C9EBA37D2AA543', 'cip90': '04191E4D8945BA1E9D02098EEFCD65DF', 'cip91': 'C1841B80C1E0E4608F0C261F8FF91199', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '00000000000000000000000000000000', 'msg129': '00000000000000000000000000000000', 'key249': '000000000000000000000000000000000000000000000000', 'key248': '000000000000000000000000000000000000000000000000', 'key247': '000000000000000000000000000000000000000000000000', 'key246': '000000000000000000000000000000000000000000000000', 'key245': '000000000000000000000000000000000000000000000000', 'key244': '000000000000000000000000000000000000000000000000', 'key243': '000000000000000000000000000000000000000000000000', 'key242': '000000000000000000000000000000000000000000000000', 'key241': '000000000000000000000000000000000000000000000000', 'key240': '000000000000000000000000000000000000000000000000', 'key391': '474747474747474747474747474747474747474747474747', 'key390': '464646464646464646464646464646464646464646464646', 'key393': '494949494949494949494949494949494949494949494949', 'key392': '484848484848484848484848484848484848484848484848', 'key395': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key394': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key397': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key396': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key399': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key398': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key489': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key488': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key485': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key484': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'key487': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key486': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key481': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'key480': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'key483': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'key482': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'cip532': 'F048B1D976A0021CFBD24185F15A5782', 'msg269': '00000000000000000004000000000000', 'msg268': '00000000000000000008000000000000', 'cip533': '545D9D689A4480EC958ABCF85B981CCE', 'msg263': '00000000000000000100000000000000', 'msg262': '00000000000000000200000000000000', 'msg261': '00000000000000000400000000000000', 'msg260': '00000000000000000800000000000000', 'msg267': '00000000000000000010000000000000', 'msg266': '00000000000000000020000000000000', 'msg265': '00000000000000000040000000000000', 'msg264': '00000000000000000080000000000000', 'cip531': 'D0200CB02EBF55A63DAB24175BDBEB33', 'msg469': '95959595959595959595959595959595', 'msg468': '94949494949494949494949494949494', 'msg465': '91919191919191919191919191919191', 'msg464': '90909090909090909090909090909090', 'msg467': '93939393939393939393939393939393', 'msg466': '92929292929292929292929292929292', 'msg461': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg460': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg463': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg462': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'cip509': '18CB3C52EA63293380258C88D86FFC62', 'cip508': 'FC47C7EDB8EF2DE5713DCDCF955B5654', 'cip534': '7B46E5B1A82587C58987811DE8728495', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'cip477': 'C00EDE0B34F918795015517B41FCF181', 'cip476': 'FB4F2BBF54FE2E488B35F3EAA4F35392', 'cip475': '6C4B65B51F11C2B99BE63EAE3E803CEC', 'cip474': '3ABDD853578888C16E47C9B2245AB50D', 'cip473': 'BB52E1855B75DFF797D2A46A85699196', 'cip472': '2738C4544E2998DD27BE8F11C587A830', 'cip471': '9F40DDE1BEE1CFA4CF5A60BEA894CA34', 'cip470': 'A6FCB9C0C6B3CC512B066C628DBC6BD7', 'cip479': '68177B56822F5D0CD6C664D4D18F27EA', 'cip478': 'FA32A18FF9D3E5226554980751FDF5DD', 'cip259': '4159191656BAE5F059625051F329E674', 'cip258': '6B38158548081550B6931773C3348995', 'cip257': 'E6D1727A0BC893BBE5A048B73296FF43', 'cip256': '1CA839C433F49B9CAC257C7CBE38C571', 'cip255': '7F60DD3212B5FD34A33E95B7CD3C98B4', 'cip254': '9D5D7F82A45E543A28769767F0B4220B', 'cip253': '8B9060A226A976B4D8701B61A0E16E05', 'cip252': '594C7334C5C77F1F311743DBF880A848', 'cip251': '4E8F6CD48030ABFB6BFAA8C79DF29132', 'cip250': 'FB589E7803F8DEC257644DD8968B3BF9', 'msg285': '00000000000000000000000400000000', 'msg284': '00000000000000000000000800000000', 'msg287': '00000000000000000000000100000000', 'msg286': '00000000000000000000000200000000', 'msg281': '00000000000000000000004000000000', 'msg280': '00000000000000000000008000000000', 'msg283': '00000000000000000000001000000000', 'msg282': '00000000000000000000002000000000', 'msg289': '00000000000000000000000040000000', 'msg288': '00000000000000000000000080000000', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '00000000000000000000000000000000', 'msg138': '00000000000000000000000000000000', 'msg137': '00000000000000000000000000000000', 'msg136': '00000000000000000000000000000000', 'msg135': '00000000000000000000000000000000', 'msg134': '00000000000000000000000000000000', 'msg133': '00000000000000000000000000000000', 'msg132': '00000000000000000000000000000000', 'msg131': '00000000000000000000000000000000', 'msg130': '00000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '000000000000000000000000000000000000000000000000', 'key239': '000000000000000000000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'key232': '000000000000000000000000000000000000000000000000', 'key233': '000000000000000000000000000000000000000000000000', 'key230': '000000000000000000000000000000000000000000000000', 'key231': '000000000000000000000000000000000000000000000000', 'key236': '000000000000000000000000000000000000000000000000', 'key237': '000000000000000000000000000000000000000000000000', 'key234': '000000000000000000000000000000000000000000000000', 'key235': '000000000000000000000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'key346': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key347': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key344': '181818181818181818181818181818181818181818181818', 'key345': '191919191919191919191919191919191919191919191919', 'key342': '161616161616161616161616161616161616161616161616', 'key343': '171717171717171717171717171717171717171717171717', 'key340': '141414141414141414141414141414141414141414141414', 'key341': '151515151515151515151515151515151515151515151515', 'key348': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key349': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'key545': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg458': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'msg459': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'msg450': '82828282828282828282828282828282', 'msg451': '83838383838383838383838383838383', 'msg452': '84848484848484848484848484848484', 'msg453': '85858585858585858585858585858585', 'msg454': '86868686868686868686868686868686', 'msg455': '87878787878787878787878787878787', 'msg456': '88888888888888888888888888888888', 'msg457': '89898989898989898989898989898989', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'key149': '000000000000000000000000000000000000040000000000', 'cip402': 'D8023F1ABAFAF0C66E5B82B97D6EADF6', 'cip403': 'B4A3E22767CA7A769B658D2E5DBD4DE5', 'cip400': '9AE888193B6654BAA995E332F85E878F', 'cip401': '8E7F0D4B02126E2B609AEA1EB117E957', 'cip406': '54D172ABBBD78E77E6DB34325CAB1049', 'cip407': '1B79C9EFA88EC7FCEAA1619716944602', 'cip404': '8285788003001D9A8A4A0D111FB5A6FE', 'cip405': 'FD1B577E2478F5D0C3618A77C39AFBE8', 'cip408': 'EA60553D4A24752EB4C9A66F056E8979', 'cip409': '5BC7D9B9CC701E8ACD677E04620FFF8F', 'cip228': '2334F78508F6259862FAA5842E6B1E7B', 'key147': '000000000000000000000000000000000000100000000000', 'cip222': 'B329A557C9BFED767B44CA25F43C0924', 'cip223': '1909B5B407CB28E7050F8889104B73F5', 'cip220': '28D9BEB7444B7801C510D74C90F3183A', 'cip221': '9D8949E7F531F30FFD1C6891154FFB8A', 'cip226': '7A3B3E4FA8DF6DD964161EF9ADB7EC90', 'cip227': 'DBA5DD3EE2B0F03D402D5BADAE4E34C9', 'cip224': '99B0CC109580893A14B960F78C867DF7', 'cip225': '4FBCBA60C491EFA9C5B8B8CC9471C26A', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': '444E6201556F1C9D73299183B7ABCA9D', 'cip319': '497EA15A5AAB3CB115C3E0091C2E4047', 'cip316': 'E11B01524EA1F465A2A20043EB9F7E8A', 'cip317': '9BAC7EE501F03D6DEBE0F9EE68FBB3C1', 'cip314': 'D3F12A67FABEC165545D25F5E5FEAE6F', 'cip315': '97580203AACE7E6F0DEB71BC631D9E40', 'cip312': 'D9D076F0512B4F29E15752A21B270BB1', 'cip313': '9668F388DD4F122A4D9DD8D6B8A322D5', 'cip310': 'EE23DB4E914D12A53BE8428161F3DE24', 'cip311': 'E76E230F4BA91426325C16FA168CA44B', 'cip136': 'A783EB0A14B5212A9BC439F225F33834', 'cip137': '524282FABF8B62D291AAAADA12423AE9', 'cip134': '07C856A3CE6F131D785BDE2E3DB3D36A', 'cip135': 'A06931BD2C6D9C3701E0286016AB8555', 'cip132': '51ECA17E2C529F17592F9A117F6F592B', 'cip133': 'A51036D7D90699DDA88ED9A16EE6C556', 'cip130': '456C1BE9ACEFA86AFB9742AB867692B1', 'cip131': '89EE6EBDDCB44B7F17157C154BB99221', 'cip138': '306D0E55364394631EC18BE972EF0B66', 'cip139': '87D8BA08354745FE85BBB710FCF5EB39', 'msg148': '00000000000000000000000000000000', 'msg149': '00000000000000000000000000000000', 'msg142': '00000000000000000000000000000000', 'msg143': '00000000000000000000000000000000', 'msg140': '00000000000000000000000000000000', 'msg141': '00000000000000000000000000000000', 'msg146': '00000000000000000000000000000000', 'msg147': '00000000000000000000000000000000', 'msg144': '00000000000000000000000000000000', 'msg145': '00000000000000000000000000000000', 'key229': '000000000000000000000000000000000000000000000000', 'key228': '000000000000000000000000000000000000000000000000', 'key221': '000000000000000000000000000000000000000000000000', 'key220': '000000000000000000000000000000000000000000000000', 'key223': '000000000000000000000000000000000000000000000000', 'key222': '000000000000000000000000000000000000000000000000', 'key225': '000000000000000000000000000000000000000000000000', 'key224': '000000000000000000000000000000000000000000000000', 'key227': '000000000000000000000000000000000000000000000000', 'key226': '000000000000000000000000000000000000000000000000', 'key139': '000000000000000000000000000000000010000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'key355': '232323232323232323232323232323232323232323232323', 'key354': '222222222222222222222222222222222222222222222222', 'key357': '252525252525252525252525252525252525252525252525', 'key356': '242424242424242424242424242424242424242424242424', 'key351': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key350': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key353': '212121212121212121212121212121212121212121212121', 'key352': '202020202020202020202020202020202020202020202020', 'msg20': '00000000000000000000000000000000', 'key359': '272727272727272727272727272727272727272727272727', 'key358': '262626262626262626262626262626262626262626262626', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg446': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg445': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'msg444': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg443': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg442': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'msg441': '79797979797979797979797979797979', 'msg440': '78787878787878787878787878787878', 'msg449': '81818181818181818181818181818181', 'msg448': '80808080808080808080808080808080', 'key44': '000000000008000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'key47': '000000000001000000000000000000000000000000000000', 'key40': '000000000080000000000000000000000000000000000000', 'key41': '000000000040000000000000000000000000000000000000', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip411': '4C45468945F81A9DDBA64096F7459105', 'cip410': '3A00B2ADDCB948E9A7CB79EDA8C03ED4', 'cip413': '64586AC41D941AB28C4F513CD96C82D5', 'cip412': '8D46CEE68004BE80A7F6BA7E5FC28933', 'cip415': 'D4CD607FFC06A35859D0193ECBED4E40', 'cip414': '8DAF315A1D806E11177B17DD89778197', 'cip417': '5682B7157B14B53179B5D96326CAEC0D', 'cip416': 'EABA630108BD5CAD3DF7687921437F12', 'cip419': '05B28231EA131E068247DD00AC08646F', 'cip418': '8A06DA18F3FB230DB26FE2929EEB63E7', 'cip239': '5E7648E3575B7A02BEA8C69A19ED06BC', 'cip238': '545F83ECF5366475A1867BF81DE59780', 'cip231': 'E71506E96ADACE02580EA035601850C3', 'cip230': 'A654EE4634624A3593DCC272C0AB8566', 'cip233': '79A075A5778E5BED4F0663FC86D92A56', 'cip232': 'CAF26B388D8A81C408FC3506CA523C72', 'cip235': '30DF4AFE05F0D0EC4495C4A7A3D3A1AF', 'cip234': '90E59EE9F97DE1590D4C454169890932', 'cip237': '2C2286B2537AFDF52A7EF59D620E7E46', 'cip236': 'BF6D54D156EDE791A177F8A5BA5DC1D0', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '93B8DD3F9A59DD9231B0885601A2354C', 'cip308': 'AFFA71EA9A2F6C4A018CF2F5F22B9B13', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '019754956B6DC021D25731EF988BDAC9', 'cip124': 'CA66CEA4EAE07B83E1EEB737FE72EADC', 'cip127': 'DEAB7388A6F1C61D41E25A0D88F062C4', 'cip126': '786EC65CC6C717A171822F1DD1AB3CE8', 'cip121': 'FD008310340BA35239165FCA8F52B3DF', 'cip120': '3A07686652A8F7E35FC9B3333EA97D16', 'cip123': '86C0CBEB5633EF88ABD436BA54AC4D7B', 'cip122': 'FC7E859D16DBF0F92FB8B3286C110315', 'cip129': '53BD3E8475DB67F72910B945BF8C768E', 'cip128': '9F18DF64A519FEC0581C0C27F805F484', 'msg159': '00000000000000000000000000000000', 'msg158': '00000000000000000000000000000000', 'msg151': '00000000000000000000000000000000', 'msg150': '00000000000000000000000000000000', 'msg153': '00000000000000000000000000000000', 'msg152': '00000000000000000000000000000000', 'msg155': '00000000000000000000000000000000', 'msg154': '00000000000000000000000000000000', 'msg157': '00000000000000000000000000000000', 'msg156': '00000000000000000000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'key360': '282828282828282828282828282828282828282828282828', 'key361': '292929292929292929292929292929292929292929292929', 'key362': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key363': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key364': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key365': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key366': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key367': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key368': '303030303030303030303030303030303030303030303030', 'key369': '313131313131313131313131313131313131313131313131', 'key214': '000000000000000000000000000000000000000000000000', 'key215': '000000000000000000000000000000000000000000000000', 'key216': '000000000000000000000000000000000000000000000000', 'key217': '000000000000000000000000000000000000000000000000', 'key210': '000000000000000000000000000000000000000000000000', 'key211': '000000000000000000000000000000000000000000000000', 'key212': '000000000000000000000000000000000000000000000000', 'key213': '000000000000000000000000000000000000000000000000', 'key218': '000000000000000000000000000000000000000000000000', 'key219': '000000000000000000000000000000000000000000000000', 'msg432': '70707070707070707070707070707070', 'msg433': '71717171717171717171717171717171', 'msg430': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg431': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg436': '74747474747474747474747474747474', 'msg437': '75757575757575757575757575757575', 'msg434': '72727272727272727272727272727272', 'msg435': '73737373737373737373737373737373', 'msg438': '76767676767676767676767676767676', 'msg439': '77777777777777777777777777777777', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'msg388': '44444444444444444444444444444444', 'msg389': '45454545454545454545454545454545', 'msg384': '40404040404040404040404040404040', 'msg385': '41414141414141414141414141414141', 'msg386': '42424242424242424242424242424242', 'msg387': '43434343434343434343434343434343', 'msg380': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg381': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg382': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg383': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'cip305': '4815634545F268ED3BF50021AC0265B2', 'msg548': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'cip304': 'A306CFDAFE5C8C2A955956BB61FFE5CD', 'msg546': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg547': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg544': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg545': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg542': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip307': '8EAA16AEA0535498D21245BAE97ED0D4', 'msg540': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg541': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'cip306': '3B075AFF8F75956DC4BE7D5121BF07B6', 'cip428': '8A26AD8FF37DC290E65E5B369FFD913B', 'cip429': '94C8F172221098FF69736FE5AD34FAFB', 'cip424': '2DCB3664B51276A60A35153A2B7545E8', 'cip301': 'CC2DE08FA80BE8A13C8860174AF9F55D', 'cip426': 'E8EDF33CBB67FDD3583E5B1300E3A959', 'cip427': '5B51498F716F42E20B59C619269A0573', 'cip420': '0BF60ED777E40CE7845F1C9C045108FA', 'cip421': '5B6927171ADC162B16CA9622E4202359', 'cip422': 'BC08F9A6142454F7FC9EF6418F6931B5', 'cip300': 'BEFC19FD8A41103B6892AD4A3CB08122', 'cip303': 'D78FE49AB8E11EBA118687045D04A70F', 'cip302': '4935E35A180FEC382D3DCFD5ED572AFB', 'cip338': '7CC04EDE1EC605160B5F23265B5A074C', 'cip339': '6839E2FDD27EB0E79C44B6C11F1A9046', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': 'EC3A2E73EF80449F5EAFF258B743E145', 'cip334': 'C81C0D1D8BCFE8C95209C708A48DEA51', 'cip335': '618F3B5CB992C9B3EFFC9DAC6E355CCA', 'cip336': '8FF90E91ECA31C767C88B5FBA1AC885A', 'cip337': '5A591008778D540E22648F7146360682', 'cip110': '5F6BF404C25C812FF2E814E4FEBAF636', 'cip111': '92B8C78C75EE5BB1C27DAC75EF76D2E0', 'cip112': 'F08DF5D467F41CB7D157C6E6C78900FE', 'cip113': '0225B99C3E40C8A5FD0156BD6A2B9349', 'cip114': '6B8D89725A7AEB5AA433011ACF5B72EC', 'cip115': '6A8B55F69923153ED6A95BF4B78CCE6E', 'cip116': '199B86F903787EE3EDD60F8393F4A89A', 'cip117': 'BFE08316360801D0B929BBE1786A8570', 'cip118': '887B6ECDBF12DEB314C50F07B870EC3B', 'cip119': 'C82FDE13839BD8BD8FC408131F559648', 'msg164': '00000000000000000000000000000000', 'msg165': '00000000000000000000000000000000', 'msg166': '00000000000000000000000000000000', 'msg167': '00000000000000000000000000000000', 'msg160': '00000000000000000000000000000000', 'msg161': '00000000000000000000000000000000', 'msg162': '00000000000000000000000000000000', 'msg163': '00000000000000000000000000000000', 'msg168': '00000000000000000000000000000000', 'msg169': '00000000000000000000000000000000', 'msg366': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg367': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg364': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'msg365': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg362': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg363': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'msg360': '28282828282828282828282828282828', 'msg361': '29292929292929292929292929292929', 'msg368': '30303030303030303030303030303030', 'msg369': '31313131313131313131313131313131', 'cip204': '2810428BA5177BB0D91C11683008E68D', 'cip205': '3863C205AED373BB3EF9E6D85D0AD08F', 'cip206': 'DD207AA0894DFBEDD7D9802823C04D7B', 'cip207': 'A6EAC9ECAAE9CC8621198BA547E9B74F', 'cip200': '4BD66B7E897E76BF51F1F00671092169', 'cip201': '4A72C588A0FA490D521640D1F245E4BC', 'cip202': '32205DCCC1D7A129B934C6FABAADEB1C', 'cip203': '74F79A4CF6F99359D7EC47DA87104658', 'cip208': 'DA51B1E831305D9E6AC7F0CDF49F3AE5', 'cip209': '4A091855C4AA2436F3C61A11FA4B9DA5', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key379': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key378': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key377': '393939393939393939393939393939393939393939393939', 'key376': '383838383838383838383838383838383838383838383838', 'key375': '373737373737373737373737373737373737373737373737', 'key374': '363636363636363636363636363636363636363636363636', 'key373': '353535353535353535353535353535353535353535353535', 'key372': '343434343434343434343434343434343434343434343434', 'key371': '333333333333333333333333333333333333333333333333', 'key370': '323232323232323232323232323232323232323232323232', 'key203': '000000000000000000000000000000000000000000000000', 'key202': '000000000000000000000000000000000000000000000000', 'key201': '000000000000000000000000000000000000000000000000', 'key200': '000000000000000000000000000000000000000000000000', 'key207': '000000000000000000000000000000000000000000000000', 'key206': '000000000000000000000000000000000000000000000000', 'key205': '000000000000000000000000000000000000000000000000', 'key204': '000000000000000000000000000000000000000000000000', 'key209': '000000000000000000000000000000000000000000000000', 'key208': '000000000000000000000000000000000000000000000000', 'cip501': '7BDF54DD81E5C6546E32AC307374DC62', 'cip500': '5AFF37A198C71247C5D76956CA5E667F', 'cip507': '492E614E802B5E3A07805E1D828D2AC1', 'cip506': 'C94B21B30A89295B175FAA34D7CEA4BE', 'cip505': 'F384F2A6A01DA2F3368DFBE75557698F', 'cip504': 'D0B94CAE1DA8EA0FEE9BD8F3089858A5', 'msg421': '65656565656565656565656565656565', 'msg420': '64646464646464646464646464646464', 'msg423': '67676767676767676767676767676767', 'msg422': '66666666666666666666666666666666', 'msg425': '69696969696969696969696969696969', 'msg424': '68686868686868686868686868686868', 'msg427': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg426': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg429': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg428': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key549': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'key26': '000000200000000000000000000000000000000000000000', 'key27': '000000100000000000000000000000000000000000000000', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'msg399': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg398': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'msg393': '49494949494949494949494949494949', 'msg392': '48484848484848484848484848484848', 'msg391': '47474747474747474747474747474747', 'msg390': '46464646464646464646464646464646', 'msg397': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg396': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg395': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg394': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg559': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg558': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg555': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg554': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg557': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg556': 'ECECECECECECECECECECECECECECECEC', 'msg551': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg550': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg553': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg552': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'cip439': 'D481B427B613981D70824D4262BD992E', 'cip438': 'B6F28A8C7C208ACCF232E72A06A9F6E4', 'cip433': 'F3B374B9A2716389D9BF73262E051FE1', 'cip432': '1F898A3560ADFFC1E5D698F36351400B', 'cip431': '91372A2BA8947F134F6F24C2B1DF2D5E', 'cip430': 'BBB75C0935978DA267C86556E8696049', 'cip437': '05A7DF2D347081EEA1FFBA6D660FF61E', 'cip436': '5715F533B6AA0A6630F79B34171E6BF3', 'cip435': '898EA594D074EA7ADFF39FEE27E9E829', 'cip434': '6AFBE7CEAD548DF43EE4B71CAD5166D8', 'cip327': '8FC0AE5F1F3B6887B27F9A35B35A8BA0', 'cip326': '8D16EFBAF1570FA0046E94BC81E066FA', 'cip325': '3ED53B6FD14571EA0246A354A0C51880', 'cip324': 'B7B8FF58B8450EAC2863923153E8590C', 'cip323': '59F34E9685DB0A7067F12F68E0D8D7BB', 'cip322': '9CCCE11543D31C4527860F2411FC6435', 'cip321': '3C30CC53B1408BF333B85DD1C6632A29', 'cip320': 'A583EF976A292B406BBD5DC8256B0442', 'cip329': '9E105E4DBCFF1EAD738FAE894C8066BB', 'cip328': '80F250B4EE37E370B5956A6A4698D27F', 'cip109': '87C3730E07C280D110EE11BBDB2C7BF6', 'cip108': '59F44B4178A92AF2CA778BDA351247F1', 'cip107': 'EAF6266AC9F0A0E96ECF6E602DE61B73', 'cip106': 'A9EFF0A790FEB09727558C1FFB4247A4', 'cip105': 'CDFD5AF33A61EA9BA8C6E4DD3E84949D', 'cip104': '0482615608212073881C83A90A0B2721', 'cip103': 'C52FECB8EDDA2D9BF3E5856231B87F6F', 'cip102': '804E4F4C6FD215D4300704142407020A', 'cip101': '27549DC43C2DEEAFFB1C52AC37AD9728', 'cip100': '832615D6654549BB930EC8DBACC5AE92', 'msg173': '00000000000000000000000000000000', 'msg172': '00000000000000000000000000000000', 'msg171': '00000000000000000000000000000000', 'msg170': '00000000000000000000000000000000', 'msg177': '00000000000000000000000000000000', 'msg176': '00000000000000000000000000000000', 'msg175': '00000000000000000000000000000000', 'msg174': '00000000000000000000000000000000', 'msg179': '00000000000000000000000000000000', 'msg178': '00000000000000000000000000000000', 'msg375': '37373737373737373737373737373737', 'msg374': '36363636363636363636363636363636', 'msg377': '39393939393939393939393939393939', 'msg376': '38383838383838383838383838383838', 'msg371': '33333333333333333333333333333333', 'msg370': '32323232323232323232323232323232', 'msg373': '35353535353535353535353535353535', 'msg372': '34343434343434343434343434343434', 'msg379': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg378': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'cip213': '3FB48878619B70DB717F410550B03069', 'cip212': 'C2613B1D8937C2B1C9D7B0249D938E95', 'cip211': '13A1376760534FF5F7D5ED1B62D93D4B', 'cip210': 'DB8350915843684F18B4B358579A9446', 'cip217': 'BB828D0A587EA543A78A60B6F63CC159', 'cip216': '00D43BE69B9387B28A4234D2E5BEF038', 'cip215': '5AC9C030789D810698AAB706BA6BCCA8', 'cip214': '0589BD5D8ECDAAE7ECABC8816EF3C7EB', 'cip219': 'D26286844B1BE4D73B44B77A2C4449DD', 'cip218': '427338CBFA6B652CDCE9C30F29F6E660', 'msg86': '00000000000000000000000000000000', 'cip375': 'FAF9E80A21AAC7AC3FCD224CB5A26899', 'cip376': '4FA06E6B011E89A9F71EB9DB7136E748', 'cip377': 'DE264324D38C6B042FDF07351E729D6B', 'cip370': '2A71C095B1324FC906C3CACBBED4CF33', 'cip371': '03B9EEBD2ADA8481CAFABBF6DE6912F8', 'cip372': '52A49FEC535D74AAF41C634127D87AA3', 'msg81': '00000000000000000000000000000000', 'key568': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key569': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key566': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key567': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key564': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key565': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key562': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'key563': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key560': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'key561': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'key308': '000000000000000000000000000000000000000000000000', 'key309': '000000000000000000000000000000000000000000000000', 'key302': '000000000000000000000000000000000000000000000000', 'key303': '000000000000000000000000000000000000000000000000', 'key300': '000000000000000000000000000000000000000000000000', 'key301': '000000000000000000000000000000000000000000000000', 'key306': '000000000000000000000000000000000000000000000000', 'key307': '000000000000000000000000000000000000000000000000', 'key304': '000000000000000000000000000000000000000000000000', 'key305': '000000000000000000000000000000000000000000000000', 'key416': '606060606060606060606060606060606060606060606060', 'key417': '616161616161616161616161616161616161616161616161', 'key414': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key415': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'key412': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key413': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key410': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key411': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key418': '626262626262626262626262626262626262626262626262', 'key419': '636363636363636363636363636363636363636363636363'}
dict_serpent256 = {'msg418': '22222222222222222222222222222222', 'msg419': '23232323232323232323232323232323', 'msg414': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'msg415': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'msg416': '20202020202020202020202020202020', 'msg417': '21212121212121212121212121212121', 'msg410': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'msg411': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'msg412': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'msg413': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key19': '0000100000000000000000000000000000000000000000000000000000000000', 'key18': '0000200000000000000000000000000000000000000000000000000000000000', 'key17': '0000400000000000000000000000000000000000000000000000000000000000', 'key16': '0000800000000000000000000000000000000000000000000000000000000000', 'key15': '0001000000000000000000000000000000000000000000000000000000000000', 'key14': '0002000000000000000000000000000000000000000000000000000000000000', 'key13': '0004000000000000000000000000000000000000000000000000000000000000', 'key12': '0008000000000000000000000000000000000000000000000000000000000000', 'key11': '0010000000000000000000000000000000000000000000000000000000000000', 'key10': '0020000000000000000000000000000000000000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'msg568': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'msg569': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'msg560': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'msg561': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'msg562': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'msg563': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'msg564': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'msg565': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'msg566': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'msg567': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'cip354': '96961DBEC1C476AE00972E54DE621F19', 'cip355': 'A31A56562516BDAE02215CD5F0DF0569', 'msg68': '00000000000000000000000000000000', 'msg69': '00000000000000000000000000000000', 'cip358': 'BCA04C7CAB888EE6950B7696F5899502', 'cip359': '6655B0542BE057664DE9B2733CA0E555', 'cip594': 'DFFD26FD3531E099739AFBEBA7CC4A4B', 'cip595': '9A19B04A3E68CF708E0F9B6A6FEFF092', 'cip596': '0EB45B61661B82E5031D149894E06353', 'cip597': '2EF37F5DDDAFF4E1A837B0ADC6A2B4AC', 'cip590': '39A2A53FBDB6329B94439EA2C4F4083F', 'cip591': 'D45E577405868579FC2BCEADE98ACF46', 'cip592': '8812A2146D83B908C0263BB381A25926', 'cip593': 'FE06CE17437F47A021AC10BB8C843314', 'cip598': '34DB3F71586C255819FD573C38897C5B', 'cip599': '99FC401591FDBC7869497790F3DB72A2', 'cip536': '387E5B8C776E4C29F0D56D36AFE1AEDD', 'cip178': 'CDEA1849DE224D92034BEC826682AD47', 'cip179': '7343B1923DB7C28C195660252857ABA3', 'cip172': '9CA79528107403A7430CD50578029990', 'cip173': '45A104CAE36E600B6EF91B91FC1C657C', 'cip170': '28E64B7DC148055040950974E718B27A', 'cip171': '08C9B5E67B8954FDFE74F391B7AFB754', 'cip176': '18DF0F25A865A0B6EC844D810D25FD87', 'cip177': '35D6DB5996115E7E8C1BE200823E7C63', 'cip174': 'D9CF9457265E7ACC57EFE25736A11FBE', 'cip175': 'D1DD8AE84D38D129A5FA0E9D9520ECF8', 'key623': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg188': '00000000000000000000000000000000', 'msg189': '00000000000000000000000000000000', 'msg186': '00000000000000000000000000000000', 'msg187': '00000000000000000000000000000000', 'msg184': '00000000000000000000000000000000', 'msg185': '00000000000000000000000000000000', 'msg182': '00000000000000000000000000000000', 'msg183': '00000000000000000000000000000000', 'msg180': '00000000000000000000000000000000', 'msg181': '00000000000000000000000000000000', 'msg340': '00000000000000000000080000000000', 'msg341': '00000000000000000000040000000000', 'msg342': '00000000000000000000020000000000', 'msg343': '00000000000000000000010000000000', 'msg344': '00000000000000000000008000000000', 'msg345': '00000000000000000000004000000000', 'msg346': '00000000000000000000002000000000', 'msg347': '00000000000000000000001000000000', 'msg348': '00000000000000000000000800000000', 'msg349': '00000000000000000000000400000000', 'cip630': '6ED3879FD72D65D6364ED513F54C3CD6', 'cip636': '19413773DD579D26B934C72EA0A6A5B3', 'cip16': '2B504288F018B2A867597EB53EEA6DB1', 'cip17': 'B3FA8074A573A00B4897DF6CD0D99B5D', 'cip14': '7978DBD4794AF35DFB0403423B4E81A9', 'cip15': '4F990737145AAA9100BFEDCA53B69F6D', 'cip12': '97905460E140685960B561204ABC09A9', 'cip13': 'B893B8766A12AAAD7691565C46651623', 'cip10': 'D30979DDC6C09B1158FA41EEB6F2A21B', 'cip11': 'C36705BB2A9BAFCFCB64C4468964D568', 'cip18': '38B56FD4C1FEDF5282208EF5F796A2C9', 'cip19': 'BFE421423C53A9942C78D04CB4B231D8', 'key579': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'key578': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'key575': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'key574': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'key577': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'key576': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key571': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'key570': 'BABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA', 'key573': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'key572': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'key171': '0000000000000000000000000000000000000000001000000000000000000000', 'key170': '0000000000000000000000000000000000000000002000000000000000000000', 'key173': '0000000000000000000000000000000000000000000400000000000000000000', 'key172': '0000000000000000000000000000000000000000000800000000000000000000', 'key175': '0000000000000000000000000000000000000000000100000000000000000000', 'key174': '0000000000000000000000000000000000000000000200000000000000000000', 'key177': '0000000000000000000000000000000000000000000040000000000000000000', 'key176': '0000000000000000000000000000000000000000000080000000000000000000', 'key179': '0000000000000000000000000000000000000000000010000000000000000000', 'key178': '0000000000000000000000000000000000000000000020000000000000000000', 'key319': '0000000000000000000000000000000000000000000000000000000000000000', 'key318': '0000000000000000000000000000000000000000000000000000000000000000', 'key311': '0000000000000000000000000000000000000000000000000000000000000000', 'key310': '0000000000000000000000000000000000000000000000000000000000000000', 'key313': '0000000000000000000000000000000000000000000000000000000000000000', 'key312': '0000000000000000000000000000000000000000000000000000000000000000', 'key315': '0000000000000000000000000000000000000000000000000000000000000000', 'key314': '0000000000000000000000000000000000000000000000000000000000000000', 'key317': '0000000000000000000000000000000000000000000000000000000000000000', 'key316': '0000000000000000000000000000000000000000000000000000000000000000', 'cip640': '2868B7A2D28ECD5E4FDEFAC3C4330074', 'key405': '1515151515151515151515151515151515151515151515151515151515151515', 'key404': '1414141414141414141414141414141414141414141414141414141414141414', 'key407': '1717171717171717171717171717171717171717171717171717171717171717', 'key406': '1616161616161616161616161616161616161616161616161616161616161616', 'key401': '1111111111111111111111111111111111111111111111111111111111111111', 'key400': '1010101010101010101010101010101010101010101010101010101010101010', 'key403': '1313131313131313131313131313131313131313131313131313131313131313', 'key402': '1212121212121212121212121212121212121212121212121212121212121212', 'key409': '1919191919191919191919191919191919191919191919191919191919191919', 'key408': '1818181818181818181818181818181818181818181818181818181818181818', 'cip626': '237AAE313D64562FDE36A0D9C72B7CDF', 'cip627': '1A2743EB7B27C23C5A0F7DCA8F7C60D4', 'cip624': 'B282CD70F1CB116FF4370B15980F7E23', 'cip625': '100F57A554C12DDCE0B06F54DE7060E8', 'cip622': 'DAD9C744E15C5A2EE69B2EEFA0E47AA7', 'cip623': '0EE91C74A7A8919330BB78ADCAD91914', 'cip521': '05E201ECB1D9941FDEA972D4B1AF450C', 'msg409': '19191919191919191919191919191919', 'msg408': '18181818181818181818181818181818', 'cip620': '49C6D3459FD462203BD84FC71B15A472', 'cip520': '659B79328B7016CB66620D01FF2B4BA6', 'msg403': '13131313131313131313131313131313', 'msg402': '12121212121212121212121212121212', 'msg401': '11111111111111111111111111111111', 'msg400': '10101010101010101010101010101010', 'msg407': '17171717171717171717171717171717', 'msg406': '16161616161616161616161616161616', 'msg405': '15151515151515151515151515151515', 'msg404': '14141414141414141414141414141414', 'cip522': '429ED1C42243BDAC9B6D2DFCDC260E04', 'cip525': '58B7BFA0D953B835822C291CF5E549FC', 'cip524': '0E9A222FBCA839CDDAF4DC4D375DA919', 'cip4': 'EC9D6557EED58E6CF89A746BBDB6C9B7', 'cip5': 'AD2314BF713CD796E8C7EC6E9C59CB8D', 'cip6': '33D8944A2D2FACBBA555EC18543AFCF0', 'cip7': 'E0885D4460373469D1FA6C36A6E1C52F', 'cip0': 'A223AA1288463C0E2BE38EBD825616C0', 'cip1': 'EAE1D405570174DF7DF2F9966D509159', 'cip2': '65F37684471E921DC8A30F45B43C4499', 'cip3': '0EE036D0BC32B89C1CEF987F5229E4A9', 'cip526': '583C9E6D2C564C0DC39C931C976086B3', 'cip8': '2CCA19AE45B976236D88E4E1AD3BACEA', 'cip9': '052D166AA678A987C07256C582283986', 'cip529': '7F93B0B73F40E573F13D9EC28E4CC73C', 'cip528': '4D8445920AD89C5174898E2A416EA76D', 'msg577': 'C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1', 'cip535': 'A84EAAAF203B92356AE1025B1D93D073', 'msg575': 'BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF', 'msg574': 'BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE', 'msg573': 'BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD', 'msg572': 'BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC', 'msg571': 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB', 'msg570': 'BABABABABABABABABABABABABABABABA', 'msg579': 'C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3', 'msg578': 'C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2', 'cip341': 'B33C4D6DF1259C4E5799D19B375420EA', 'cip340': '60AE8E3F60A099EEF38EFF4ED27DE3EC', 'cip343': '3CF54D30E493CDD7439E1F34FBB098F3', 'cip342': '4D1BA08EB1E30F2A3B3E5D1DAE9792A9', 'cip345': 'B3D6DC13CF612951F9ACB05EAEEDE7E3', 'msg98': '00000000000000000000000000000000', 'cip347': '9F227635FDAB7D31A7E1F08BBCC34371', 'cip346': '301378F0D3D30AE6613A9E7CF113821F', 'cip349': 'CF51A2A45F9CBFDE788D108B1B4D33A5', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'cip583': '56A96770FD19284193F125B6E3B81C58', 'cip582': '9A4D04EDEC1D30ED99CE5D8E663B2B61', 'cip581': '274C29DC4667E5259672E0FE8CB6BD85', 'cip580': 'D243F210B340F55AFE2A0AF1B984CC78', 'cip587': 'F26557393B35B278DF8CFB4A2E055C2B', 'cip586': '1640B5A7A10334C9656C615BED2E79CF', 'cip585': '8A10AF3CC3EE06CC85B6BF8F204EEF0C', 'cip584': 'C65F33703C6037C9C41B3AE2DB110CD8', 'cip589': '8459D97B128173F07A49A8F4D3C38E6D', 'cip588': '1442BBD470F6999C63779E58E3C21B3A', 'cip169': 'DAD3F4D3B96EF51C2D4D2869FAEA4C1D', 'cip168': 'E5BD5E55A80FE196A2AEBCDB6798614E', 'cip161': 'A2622ED785815C12C949EBED89094FC3', 'cip160': '43FB732672D6243DDC9C547E46711FBE', 'cip163': 'CD3681FF583D4BC4886D864CFA94EF97', 'cip162': 'FBB93B64CA5D94692B4E6EED934112D8', 'cip165': '3CA305833473AC6990A41E37A7BE551A', 'cip164': '37ED3CE092A1AE925264751DFFF6B50E', 'cip167': '51C23A4293BB9B963AD17E349B8A71C5', 'cip166': 'CEF8EC0353A04B3DB1309F88265FDABF', 'msg199': '00000000000000000000000000000000', 'msg198': '00000000000000000000000000000000', 'msg195': '00000000000000000000000000000000', 'msg194': '00000000000000000000000000000000', 'msg197': '00000000000000000000000000000000', 'msg196': '00000000000000000000000000000000', 'msg191': '00000000000000000000000000000000', 'msg190': '00000000000000000000000000000000', 'msg193': '00000000000000000000000000000000', 'msg192': '00000000000000000000000000000000', 'msg359': '00000000000000000000000001000000', 'msg358': '00000000000000000000000002000000', 'msg357': '00000000000000000000000004000000', 'msg356': '00000000000000000000000008000000', 'msg355': '00000000000000000000000010000000', 'msg354': '00000000000000000000000020000000', 'msg353': '00000000000000000000000040000000', 'msg352': '00000000000000000000000080000000', 'msg351': '00000000000000000000000100000000', 'msg350': '00000000000000000000000200000000', 'cip23': '23A626E559D0B8E4E4AB3F7C38750D4A', 'cip22': 'FB5D6CD1B6EE155D6744E5BE62A650F6', 'cip21': 'AC38F8F6DF320D4409BA6A1CD93A482E', 'cip20': 'EF102196C479E513AE8B776D524631B9', 'cip27': 'EFF062AF33726C788D261FBFDDA15109', 'cip26': '3BC82EC5FBE24B5AAF230895BBA9DCD1', 'cip25': 'F5D9875A70158C9C64136703D231E3F5', 'cip24': '4A7E5D441526F7D4D2987AEDF48F0231', 'cip29': 'E16066A35F943A426FE47AD1A1FC69AD', 'cip28': 'E2A342E2683D3F970983D941656823AA', 'key548': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'cip352': 'FFE1B843D7DC5F52852705221ED5EECA', 'cip353': '0E8B9ACE62AA90B258D8090EF2188BC4', 'key540': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'key541': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'key542': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'key543': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'key544': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'cip350': '3E70F946FB77C6841D9F001104347659', 'key546': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'key547': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'cip351': 'A3EB98B3BE360FAE3B8EC43D5B77FF7C', 'cip356': 'A2316B6B9E6AD55D7013A24BDB1EAEB9', 'cip357': '709F715313E17EFB3ECAE3A5D9ED94AF', 'key148': '0000000000000000000000000000000000000800000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'key144': '0000000000000000000000000000000000008000000000000000000000000000', 'key145': '0000000000000000000000000000000000004000000000000000000000000000', 'key146': '0000000000000000000000000000000000002000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'key140': '0000000000000000000000000000000000080000000000000000000000000000', 'key141': '0000000000000000000000000000000000040000000000000000000000000000', 'key142': '0000000000000000000000000000000000020000000000000000000000000000', 'key143': '0000000000000000000000000000000000010000000000000000000000000000', 'key430': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'key431': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'key432': '3030303030303030303030303030303030303030303030303030303030303030', 'key433': '3131313131313131313131313131313131313131313131313131313131313131', 'key434': '3232323232323232323232323232323232323232323232323232323232323232', 'key435': '3333333333333333333333333333333333333333333333333333333333333333', 'key436': '3434343434343434343434343434343434343434343434343434343434343434', 'key437': '3535353535353535353535353535353535353535353535353535353535353535', 'key438': '3636363636363636363636363636363636363636363636363636363636363636', 'key439': '3737373737373737373737373737373737373737373737373737373737373737', 'key324': '0000000000000000000000000000000000000000000000000000000000000000', 'key325': '0000000000000000000000000000000000000000000000000000000000000000', 'key326': '0000000000000000000000000000000000000000000000000000000000000000', 'key327': '0000000000000000000000000000000000000000000000000000000000000000', 'key320': '0000000000000000000000000000000000000000000000000000000000000000', 'key321': '0000000000000000000000000000000000000000000000000000000000000000', 'key322': '0000000000000000000000000000000000000000000000000000000000000000', 'key323': '0000000000000000000000000000000000000000000000000000000000000000', 'key328': '0000000000000000000000000000000000000000000000000000000000000000', 'key329': '0000000000000000000000000000000000000000000000000000000000000000', 'msg502': '76767676767676767676767676767676', 'msg503': '77777777777777777777777777777777', 'msg500': '74747474747474747474747474747474', 'msg501': '75757575757575757575757575757575', 'msg506': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'msg507': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'msg504': '78787878787878787878787878787878', 'msg505': '79797979797979797979797979797979', 'msg508': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'msg509': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'cip488': 'C5084F64184243B2320910EC283DE2FB', 'cip489': '391BABAE870C456075F6149B3019BF47', 'cip482': 'CD81C028668A06FBD038ACD7E189D4B4', 'cip483': '2B4BCFD95DE2C813E4689C6003367BAA', 'cip480': 'B51EC90B59D99FC982D2FF159B8C20B2', 'cip481': 'E07A3D644F1343378586B1506FD7B5B9', 'cip486': '9D4E0D202C95C7C087A61F6B397448EC', 'cip487': '0554906ECFD0430B8FED00C1CB6AD87E', 'cip484': '0BB4071EFFECEDE72FFF2BE7E72A4A8C', 'cip485': 'DBE484806B90A7DA31C325AE1E872728', 'msg218': '00000000000000000000000000000000', 'msg219': '00000000000000000000000000000000', 'msg216': '00000000000000000000000000000000', 'msg217': '00000000000000000000000000000000', 'msg214': '00000000000000000000000000000000', 'msg215': '00000000000000000000000000000000', 'msg212': '00000000000000000000000000000000', 'msg213': '00000000000000000000000000000000', 'msg210': '00000000000000000000000000000000', 'msg211': '00000000000000000000000000000000', 'cip378': 'BB654CB6528C21D78E5CB79D5DA677A4', 'cip379': 'E0B2836175A6808D61FEA4CB529401F8', 'msg88': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'cip374': '8658E3A6DBAC89EBA6E045881B172E9C', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'cip373': 'B77FE10336DA7531E1BF2DC41C7E6E95', 'cip578': '8231F24F73CF40CCCADB36835B94E678', 'cip579': 'EA3DF9EB959E6B2110F64E78FD799094', 'cip576': '2D04D93AEDE2B11D48285086FF40DA49', 'cip577': '36E691E654FBE01597628982FDF3F489', 'cip574': '8FBC2395A530EC8F45E0D5F4081ACCD9', 'cip575': '052BD61DFCCEBF17FDDBA5BBEB947613', 'cip572': '5D23F0F58FB496A928B8194BFD7D9BF3', 'cip573': 'B68501A56B52F94ADBA2DA4407F2131E', 'cip570': '1D66994A7ABE4F96E20E56FAA9808A24', 'cip571': '098688F6CDC75B93415E3DBC821334FD', 'cip396': '6374751DE549B543B6531719D58480B1', 'cip397': 'FD8BEB77DB7A335D3CF690DD441CCB02', 'cip394': '3AA08D9770A9DF1B57C856E3BF2BBE90', 'cip395': '28B1952EB49BA893B5368E500CC45EF1', 'cip392': '74BFD6C979CD2D673748FD242A8D6500', 'cip393': '3E5D22A9B6BDAE9E4DF9FB1755AC7A3F', 'cip390': '79A65AB74C785E50294126F4FCCEBB76', 'cip391': '8F6853EF6802FE9A93161579A2D91137', 'cip398': '0C517DB958743218F988C8C2A428611D', 'cip399': '32FF7D7373872E36B8F0E29117C7B8D5', 'msg328': '00000000000000000080000000000000', 'msg329': '00000000000000000040000000000000', 'msg322': '00000000000000002000000000000000', 'msg323': '00000000000000001000000000000000', 'msg320': '00000000000000008000000000000000', 'msg321': '00000000000000004000000000000000', 'msg326': '00000000000000000200000000000000', 'msg327': '00000000000000000100000000000000', 'msg324': '00000000000000000800000000000000', 'msg325': '00000000000000000400000000000000', 'cip154': 'E4CBB63909992197E9654069BF4EE3EE', 'cip155': '14B1DF955B3A20EADFF35C3869B0B624', 'cip156': '4D9019A6223F39E2075C95C7724959FC', 'cip157': '5352A5E6F316C51F0256B3A0BC283D47', 'cip150': 'BDE3013E16AFDF64A0F24991D7EE5752', 'cip151': '71500F21B4145961271727E896C62F24', 'cip152': 'B324D96D901DB388CC1DF28092714335', 'cip153': 'E572F8132305A28A1E09BF5ED8ABAA8D', 'cip158': '9F570DD55188193525D0C0244CBA2CFD', 'cip159': '1B206FEA626AD786255A3186AC5F5132', 'cip628': 'C0449FA4F1B97ADE97C1F4F97D9A2CDB', 'cip629': '5E116CE30BBAB2D01898E127F2820885', 'cip38': '4284A05C4A0AF59DFF15604ACBB82743', 'cip39': '986A05E8447024C8468A1EBF7743F689', 'cip34': '318B1983222E49F5B57E26E70890A5B6', 'cip35': 'D8DF0A98604C987283ACF7F211D906C7', 'cip36': '92697CF743A72D2D4D7864132A9ADE0B', 'cip37': '2C450C8BCDAA9CB59F930DDAE88CBDB3', 'cip30': 'D89F891B578FF6B441E97849DD2F2798', 'cip31': '4A800443B44112493226E08BD9521912', 'cip32': '765DF290B8D90C9169E6884A0D4D4B92', 'cip33': 'F9EEBAB9F5CEBF94196FEF3872C46881', 'key159': '0000000000000000000000000000000000000001000000000000000000000000', 'key158': '0000000000000000000000000000000000000002000000000000000000000000', 'key153': '0000000000000000000000000000000000000040000000000000000000000000', 'key152': '0000000000000000000000000000000000000080000000000000000000000000', 'key151': '0000000000000000000000000000000000000100000000000000000000000000', 'key150': '0000000000000000000000000000000000000200000000000000000000000000', 'key157': '0000000000000000000000000000000000000004000000000000000000000000', 'key156': '0000000000000000000000000000000000000008000000000000000000000000', 'key155': '0000000000000000000000000000000000000010000000000000000000000000', 'key154': '0000000000000000000000000000000000000020000000000000000000000000', 'key557': 'ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD', 'key556': 'ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC', 'key555': 'ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB', 'key554': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'key553': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'key552': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'key551': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'key550': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'key559': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'key558': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'key429': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'key428': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key427': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'key426': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'key425': '2929292929292929292929292929292929292929292929292929292929292929', 'key424': '2828282828282828282828282828282828282828282828282828282828282828', 'key423': '2727272727272727272727272727272727272727272727272727272727272727', 'key422': '2626262626262626262626262626262626262626262626262626262626262626', 'key421': '2525252525252525252525252525252525252525252525252525252525252525', 'key420': '2424242424242424242424242424242424242424242424242424242424242424', 'key333': '0000000000000000000000000000000000000000000000000000000000000000', 'key332': '0000000000000000000000000000000000000000000000000000000000000000', 'key331': '0000000000000000000000000000000000000000000000000000000000000000', 'key330': '0000000000000000000000000000000000000000000000000000000000000000', 'key337': '0000000000000000000000000000000000000000000000000000000000000000', 'key336': '0000000000000000000000000000000000000000000000000000000000000000', 'key335': '0000000000000000000000000000000000000000000000000000000000000000', 'key334': '0000000000000000000000000000000000000000000000000000000000000000', 'key339': '0000000000000000000000000000000000000000000000000000000000000000', 'key338': '0000000000000000000000000000000000000000000000000000000000000000', 'msg511': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'msg510': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'msg513': '81818181818181818181818181818181', 'msg512': '80808080808080808080808080808080', 'msg515': '83838383838383838383838383838383', 'msg514': '82828282828282828282828282828282', 'msg517': '85858585858585858585858585858585', 'msg516': '84848484848484848484848484848484', 'msg519': '87878787878787878787878787878787', 'msg518': '86868686868686868686868686868686', 'msg549': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'msg543': '9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F', 'cip499': '6F534BC4B14D5E9656197119CDC505CB', 'cip498': 'AE8C1932E50AC3A8D77C31E68C149A7E', 'cip491': '831AA4C763D12D037C75D9D3467D272A', 'cip490': '70ED1E10F7EC90C8C1686A0517E1DC5D', 'cip493': '52104225BF07DC16DB78EA620027F799', 'cip492': 'C4B4C92CC0101A7872A767674B0F4E94', 'cip495': 'A151FE2AC952565D8EDFB212A8638401', 'cip494': '2A0304AC7F91FFF8AC8CE4540D7A5935', 'cip497': '2E7997933BDD4559B35F101EC2B46E93', 'cip496': 'E305EAF646924EFD5607FF9FB45225EC', 'msg209': '00000000000000000000000000000000', 'msg208': '00000000000000000000000000000000', 'msg205': '00000000000000000000000000000000', 'msg204': '00000000000000000000000000000000', 'msg207': '00000000000000000000000000000000', 'msg206': '00000000000000000000000000000000', 'msg201': '00000000000000000000000000000000', 'msg200': '00000000000000000000000000000000', 'msg203': '00000000000000000000000000000000', 'msg202': '00000000000000000000000000000000', 'cip369': '6D03E3381991EDC800513D30BE07DE5A', 'cip368': 'AE042A69C879D524DC4BCC70B84B1B37', 'cip363': '267FCBA295A670CB9EC18AFBB819CE91', 'cip362': '71BC0D1DEA15FE3BC4AA6DD829C8E957', 'cip361': 'AAECA9394EF359D851CC9F244D4D1E54', 'cip360': '56C2530D97A43944BE7874E6FA9121FD', 'cip367': 'B210E51F2C154205DA4A1D1B892DCC63', 'cip366': '368A8D2610A773A477B924028DAD455F', 'cip365': '63E94B466C955B7204285E418A156B29', 'cip364': 'D18CC92248E209FF8C9AF4AC93588727', 'cip569': 'C8DBD7B0DAB1FF4451A63E5BA5F29D18', 'cip568': 'EED18337C79B8E42EEFA41F16D9431FC', 'cip425': '59EA9AA37AAE3AB10C6DFD214B044F1A', 'cip565': '7F1147B387043382664C20A3F9A297AF', 'cip564': 'B5D6C8104284868D51C98EFAC2B31D2C', 'cip567': '699A3AC95FA20E356A04DE87180118C2', 'cip566': '003358CC7FEC5EEA24E67DC089BB3E0A', 'cip561': '38D962F1FA639DB51032C220BE33936C', 'cip560': '866C8D28DE55C93B6852F85A3D915DCF', 'cip563': '95255A7DEBC7C31C78BA05B875C0DD03', 'cip562': '4B95BE31348C8EB73BA9E14DE17F9549', 'cip385': 'EC9723B15B2A6489F84C4524FFFC2748', 'cip384': '49672BA898D98DF95019180445491089', 'cip387': '021F144BE75CB5180F65308AFDB50429', 'cip386': '1187F485538514476184E567DA0421C7', 'cip381': '9D9286D5E97CCDEC47E03CB12C34B339', 'cip380': '824C5F6FECE3E0FC4293821B987B3BD4', 'cip383': 'AD86DE83231C3203A86AE33B721EAA9F', 'cip382': 'BC2C09F0B3FC63CE17F1BE7F267E3E0A', 'cip389': '04718DA0C5A6EAAA95ABC9DCC013DE81', 'cip388': '7925C603690B0EF3ADA5921194444511', 'cip423': 'AAA4E5A9B0808C2F56CAAC77E09639CE', 'msg339': '00000000000000000000100000000000', 'msg338': '00000000000000000000200000000000', 'msg331': '00000000000000000010000000000000', 'msg330': '00000000000000000020000000000000', 'msg333': '00000000000000000004000000000000', 'msg332': '00000000000000000008000000000000', 'msg335': '00000000000000000001000000000000', 'msg334': '00000000000000000002000000000000', 'msg337': '00000000000000000000400000000000', 'msg336': '00000000000000000000800000000000', 'cip143': '446B5ADE1FE91D73511403B34F20FF16', 'cip142': '675F1E9F7C895DD0B4E1F8D4EED1D2C9', 'cip141': 'E17C717EC7A1CF3492710D9FE53A26AD', 'cip140': '6316DDDD174659C16CF3324A770225EB', 'cip147': 'B190C3C5AC183F95F71495A93C679BDB', 'cip146': '9112A5FEB40E3134C26303F379F29AF6', 'cip145': 'FED174EAC6701DAD5DF03DD8A438D99C', 'cip144': 'D7078E2A1CB16142851F7C5F86FF4E64', 'cip149': '5550900FAF11F9D2DDC6CF2F1D7AAEDB', 'cip148': '5777C456EEDBB7756AE316517C1072A8', 'cip639': '6AC7579D9377845A816CA6D758F3FEFF', 'cip638': 'CBB014220EA4B36A5B5554140AFD721A', 'cip49': '36CD300072D4EC94A0FF3595F7A2C1FE', 'cip48': 'ECE089620BF6866A66FB6070C491C74C', 'cip41': '1BD0EEF566BEFB4D57CE7120B731125E', 'cip40': 'C9642C4E3F420CA73E8F1C15C6EB011F', 'cip43': 'D88F55DAC599BEA8440B4BA9E3C50016', 'cip42': 'CB0705AE3DB537AD1C202DD6635202DA', 'cip45': 'CC55A4F4086043F1E1ABA9CC91E4395A', 'cip44': 'FF227EC8AF4640198173A79B124CEFDF', 'cip47': '343E1B000FEDAC000376EE138FD8F0F7', 'cip46': '8D2BAD986865A229601855B024D9A557', 'msg640': '00112233445566778899AABBCCDDEEFF', 'key180': '0000000000000000000000000000000000000000000008000000000000000000', 'key181': '0000000000000000000000000000000000000000000004000000000000000000', 'key182': '0000000000000000000000000000000000000000000002000000000000000000', 'key183': '0000000000000000000000000000000000000000000001000000000000000000', 'key184': '0000000000000000000000000000000000000000000000800000000000000000', 'key185': '0000000000000000000000000000000000000000000000400000000000000000', 'key186': '0000000000000000000000000000000000000000000000200000000000000000', 'key187': '0000000000000000000000000000000000000000000000100000000000000000', 'key188': '0000000000000000000000000000000000000000000000080000000000000000', 'key189': '0000000000000000000000000000000000000000000000040000000000000000', 'key634': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'key635': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'key632': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'key633': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'key630': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'key631': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'key522': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'key523': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'key520': '8888888888888888888888888888888888888888888888888888888888888888', 'key521': '8989898989898989898989898989898989898989898989898989898989898989', 'key526': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'key527': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'key524': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'key525': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'key528': '9090909090909090909090909090909090909090909090909090909090909090', 'key529': '9191919191919191919191919191919191919191919191919191919191919191', 'key458': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'key459': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'key452': '4444444444444444444444444444444444444444444444444444444444444444', 'key453': '4545454545454545454545454545454545454545454545454545454545454545', 'key450': '4242424242424242424242424242424242424242424242424242424242424242', 'key451': '4343434343434343434343434343434343434343434343434343434343434343', 'key456': '4848484848484848484848484848484848484848484848484848484848484848', 'key457': '4949494949494949494949494949494949494949494949494949494949494949', 'key454': '4646464646464646464646464646464646464646464646464646464646464646', 'key455': '4747474747474747474747474747474747474747474747474747474747474747', 'msg528': '90909090909090909090909090909090', 'msg529': '91919191919191919191919191919191', 'msg524': '8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C', 'msg525': '8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D', 'msg526': '8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E', 'msg527': '8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F', 'msg520': '88888888888888888888888888888888', 'msg521': '89898989898989898989898989898989', 'msg522': '8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A', 'msg523': '8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B', 'cip330': '294A16831BF660536203030B59DA20F3', 'cip331': 'D189C5A12722ABFEBA16F155975068E6', 'cip332': '9A9248C1FEDF207CE64F68E73B22A77C', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'msg238': '00000000000000000000000000000000', 'msg239': '00000000000000000000000000000000', 'msg230': '00000000000000000000000000000000', 'msg231': '00000000000000000000000000000000', 'msg232': '00000000000000000000000000000000', 'msg233': '00000000000000000000000000000000', 'msg234': '00000000000000000000000000000000', 'msg235': '00000000000000000000000000000000', 'msg236': '00000000000000000000000000000000', 'msg237': '00000000000000000000000000000000', 'cip558': '192A5DB642285A59B806E4EE067706F0', 'cip559': '0A685729783559213DB06520387FCCD7', 'cip550': '888CFA357E1E2EDDE93B9B0279DC809D', 'cip551': '6F318A0BB65CC2676CE9C280FA60A9A2', 'cip552': 'F9A26E3DC6A20BA4687B535F99E74374', 'cip553': '38412D11CF8B5764725787C4E6AB6C78', 'cip554': '577336D810624ADA5A7520809DB36FB9', 'cip555': '11EA26CEC2BB1C69A8C7C622DE3A3154', 'cip556': '470064AD263F461F77B800DC3AD98924', 'cip557': '08F6C1EC99A7AA82C833FC1F73086E5A', 'msg304': '00000000000080000000000000000000', 'msg305': '00000000000040000000000000000000', 'msg306': '00000000000020000000000000000000', 'msg307': '00000000000010000000000000000000', 'msg300': '00000000000800000000000000000000', 'msg301': '00000000000400000000000000000000', 'msg302': '00000000000200000000000000000000', 'msg303': '00000000000100000000000000000000', 'msg308': '00000000000008000000000000000000', 'msg309': '00000000000004000000000000000000', 'cip600': '331500BC3E6B20EB1E8A1346E6DBFB51', 'cip601': 'CACDF4F6BEED9FA67E85B0FCCF5FA73F', 'cip602': 'B2CAECBD6DA08FA66E031F21EE64B98B', 'cip603': '0A1EB4F434970A5DA20E0DC5A997DCC9', 'cip604': '384736EE38CEBEBB4EAAA30DEE43B175', 'cip605': '2C6FEC52D4490F3DB9B703354CCC8BF1', 'cip606': '8DDC2ED210A96A8319980EF9FC179216', 'cip607': '9C79BAF04FC371244B61D7EC0445643C', 'cip608': 'EE7FAC7B841FFADA50502BA8A017D55E', 'cip609': 'B1BC8478575D63EA9F4A7CEEC512F01B', 'cip58': '98D5AE45E15A836C141CF7F64DC7D551', 'cip59': 'EEFBED56D7BD47D088B3AD657A6CB8B8', 'cip52': '45A32C5EA3E2E548A9E6313BEF957308', 'cip53': 'C2105CC6264024EBEC6BA0F825FD5163', 'cip50': 'F939CB3D8316B59600F164234E78D228', 'cip51': '17C6258E6009E282661869D525F7D204', 'cip56': 'D9732CE2055E7F935468A63A170B598C', 'cip57': 'E9F396623AF12ADF24C0378F42F7B4BD', 'cip54': '85F3D2169883A7CD54A67DA7C4AC613C', 'cip55': 'B5FFC7D92EA2815C0F4DC9182DA160C6', 'cip621': '0B151C81FDEDF1458D24A114830BDC90', 'key629': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'key628': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'key199': '0000000000000000000000000000000000000000000000000100000000000000', 'key198': '0000000000000000000000000000000000000000000000000200000000000000', 'key197': '0000000000000000000000000000000000000000000000000400000000000000', 'key196': '0000000000000000000000000000000000000000000000000800000000000000', 'key195': '0000000000000000000000000000000000000000000000001000000000000000', 'key194': '0000000000000000000000000000000000000000000000002000000000000000', 'key193': '0000000000000000000000000000000000000000000000004000000000000000', 'key192': '0000000000000000000000000000000000000000000000008000000000000000', 'key191': '0000000000000000000000000000000000000000000000010000000000000000', 'key190': '0000000000000000000000000000000000000000000000020000000000000000', 'key531': '9393939393939393939393939393939393939393939393939393939393939393', 'key530': '9292929292929292929292929292929292929292929292929292929292929292', 'key533': '9595959595959595959595959595959595959595959595959595959595959595', 'key532': '9494949494949494949494949494949494949494949494949494949494949494', 'key535': '9797979797979797979797979797979797979797979797979797979797979797', 'key534': '9696969696969696969696969696969696969696969696969696969696969696', 'key537': '9999999999999999999999999999999999999999999999999999999999999999', 'key536': '9898989898989898989898989898989898989898989898989898989898989898', 'key539': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'key538': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'key449': '4141414141414141414141414141414141414141414141414141414141414141', 'key448': '4040404040404040404040404040404040404040404040404040404040404040', 'key441': '3939393939393939393939393939393939393939393939393939393939393939', 'key440': '3838383838383838383838383838383838383838383838383838383838383838', 'key443': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'key442': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'key445': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'key444': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'key447': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'key446': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg539': '9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B', 'msg538': '9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A', 'msg533': '95959595959595959595959595959595', 'msg532': '94949494949494949494949494949494', 'msg531': '93939393939393939393939393939393', 'msg530': '92929292929292929292929292929292', 'msg537': '99999999999999999999999999999999', 'msg536': '98989898989898989898989898989898', 'msg535': '97979797979797979797979797979797', 'msg534': '96969696969696969696969696969696', 'msg227': '00000000000000000000000000000000', 'msg226': '00000000000000000000000000000000', 'msg225': '00000000000000000000000000000000', 'msg224': '00000000000000000000000000000000', 'msg223': '00000000000000000000000000000000', 'msg222': '00000000000000000000000000000000', 'msg221': '00000000000000000000000000000000', 'msg220': '00000000000000000000000000000000', 'msg229': '00000000000000000000000000000000', 'msg228': '00000000000000000000000000000000', 'cip503': '69FC347C83B45B6D3BA7862C849A083D', 'cip547': '0B02B87EF9F3F85DD31861E5A7DB1761', 'cip546': 'F3A494D3C212527D80D2C57FF0BF7CEA', 'cip545': 'A7CD068A84DC2504A4B159172C7D5123', 'cip544': 'FF1B226F4C5C2E7986B334E1E88E2CB5', 'cip543': '7F7FCAA3D9F022C04066C3351C9BBF12', 'cip542': '9410E98F3F75065FC13C98DB1E1E5506', 'cip541': 'C8862D018227474619C1697A51E53F58', 'cip540': '53DB82B8ED957EBA39A2239D8D5FE1DD', 'cip549': '369D214973487767999F97290C5CE69E', 'cip548': '4A713295B2EA861D77B3E26484D03F02', 'cip502': '69D3B8CBDF7AB187383B257A5B534BBF', 'msg313': '00000000000000400000000000000000', 'msg312': '00000000000000800000000000000000', 'msg311': '00000000000001000000000000000000', 'msg310': '00000000000002000000000000000000', 'msg317': '00000000000000040000000000000000', 'msg316': '00000000000000080000000000000000', 'msg315': '00000000000000100000000000000000', 'msg314': '00000000000000200000000000000000', 'msg319': '00000000000000010000000000000000', 'msg318': '00000000000000020000000000000000', 'cip619': 'A424E92075F49A130B70AC930DD398EC', 'cip618': 'CB31CB7BD552BE41473D7A96039F551E', 'cip617': 'C425E08D8C71F60BD6B72824FD956A3B', 'cip616': 'E6C318E2F049B55B4A53FE91F5885016', 'cip615': 'CB11B820694DFE241B153B92347DE0C6', 'cip614': '5A1DF9EFF495A0C54E07BC1613CC8A23', 'cip613': 'B19E7A5D36278425625006E4291EF3D7', 'cip612': '64062F4B350EC2E63F2FFD9CCC75BC54', 'cip611': 'B94DE0128490A18C0A5B32F3ED235DEF', 'cip610': '80158AB36BD015228487AFD6A4844AA3', 'cip67': '2A3BAC4370DAA0D68CA90939F43E33CC', 'cip66': '4BB9FD26E225C913F9BE1B697D31B5B9', 'cip65': 'DD6A02B2DC091212A746C8FC9967B8BE', 'cip64': 'BCC02339FCFFCAE0536FB5410AF91129', 'cip63': 'D48E45670FD978FA4DB161C0E5D59FC0', 'cip62': '66602FD71F84B2637B2283CD81DE3080', 'cip61': '25C35298C0A1224F2BEE7EE8AAA86E51', 'cip60': 'A99342C96F331950D97AFBFC8C0D4E08', 'cip69': 'E620C37AD1650DCEAEBEAE1F57BD8AD9', 'cip68': '8576F1070E25B5FD944C366E08CC9102', 'key618': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'key619': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'key610': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'key611': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'key612': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'key613': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'key614': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'key615': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'key616': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'key617': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'cip229': 'A2E337EFDF4B888C2B94B86AE20FF8E8', 'key298': '0000000000000000000000000000000000000000000000000000000000000000', 'key299': '0000000000000000000000000000000000000000000000000000000000000000', 'key294': '0000000000000000000000000000000000000000000000000000000000000000', 'key295': '0000000000000000000000000000000000000000000000000000000000000000', 'key296': '0000000000000000000000000000000000000000000000000000000000000000', 'key297': '0000000000000000000000000000000000000000000000000000000000000000', 'key290': '0000000000000000000000000000000000000000000000000000000000000000', 'key291': '0000000000000000000000000000000000000000000000000000000000000000', 'key292': '0000000000000000000000000000000000000000000000000000000000000000', 'key293': '0000000000000000000000000000000000000000000000000000000000000000', 'key508': '7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C', 'key509': '7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D', 'key504': '7878787878787878787878787878787878787878787878787878787878787878', 'key505': '7979797979797979797979797979797979797979797979797979797979797979', 'key506': '7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A', 'key507': '7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B', 'key500': '7474747474747474747474747474747474747474747474747474747474747474', 'key501': '7575757575757575757575757575757575757575757575757575757575757575', 'key502': '7676767676767676767676767676767676767676767676767676767676767676', 'key503': '7777777777777777777777777777777777777777777777777777777777777777', 'key276': '0000000000000000000000000000000000000000000000000000000000000000', 'key277': '0000000000000000000000000000000000000000000000000000000000000000', 'key274': '0000000000000000000000000000000000000000000000000000000000000000', 'key275': '0000000000000000000000000000000000000000000000000000000000000000', 'key272': '0000000000000000000000000000000000000000000000000000000000000000', 'key273': '0000000000000000000000000000000000000000000000000000000000000000', 'key270': '0000000000000000000000000000000000000000000000000000000000000000', 'key271': '0000000000000000000000000000000000000000000000000000000000000000', 'key278': '0000000000000000000000000000000000000000000000000000000000000000', 'key279': '0000000000000000000000000000000000000000000000000000000000000000', 'cip515': '6AF7ED0E39E59D12A0AFE6E99FFCBE63', 'key474': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'key475': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'key476': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'key477': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'key470': '5656565656565656565656565656565656565656565656565656565656565656', 'key471': '5757575757575757575757575757575757575757575757575757575757575757', 'key472': '5858585858585858585858585858585858585858585858585858585858585858', 'key473': '5959595959595959595959595959595959595959595959595959595959595959', 'key478': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'key479': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg252': '00000000000000000000000000000000', 'msg253': '00000000000000000000000000000000', 'msg250': '00000000000000000000000000000000', 'msg251': '00000000000000000000000000000000', 'msg256': '80000000000000000000000000000000', 'msg257': '40000000000000000000000000000000', 'msg254': '00000000000000000000000000000000', 'msg255': '00000000000000000000000000000000', 'msg258': '20000000000000000000000000000000', 'msg259': '10000000000000000000000000000000', 'msg494': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'msg495': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'msg496': '70707070707070707070707070707070', 'msg497': '71717171717171717171717171717171', 'msg490': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'msg491': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'msg492': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'msg493': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'msg498': '72727272727272727272727272727272', 'msg499': '73737373737373737373737373737373', 'key97': '0000000000000000000000004000000000000000000000000000000000000000', 'key96': '0000000000000000000000008000000000000000000000000000000000000000', 'key95': '0000000000000000000000010000000000000000000000000000000000000000', 'key94': '0000000000000000000000020000000000000000000000000000000000000000', 'key93': '0000000000000000000000040000000000000000000000000000000000000000', 'key92': '0000000000000000000000080000000000000000000000000000000000000000', 'key91': '0000000000000000000000100000000000000000000000000000000000000000', 'key90': '0000000000000000000000200000000000000000000000000000000000000000', 'cip538': 'C5C8FD84078B49544A522A451B4EF12D', 'cip539': '94D7D8BF5DDF87B4C5C18863951D81DF', 'key99': '0000000000000000000000001000000000000000000000000000000000000000', 'key98': '0000000000000000000000002000000000000000000000000000000000000000', 'cip514': 'AAA92B00896FE228BDF5AA3BA534CA44', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'cip288': '0F7CE54A338AB05E2C38F1725DA8B127', 'cip289': 'CAD8158D26EED67D4355BB66D0812ADE', 'cip284': '3A259B7AEE3155C0C4DF7A32EF40FB19', 'cip285': '028EFD3B6E686C87B402151F414B13AD', 'cip286': 'D4F61CC61FA1DBD68B8C48541AE77289', 'cip287': 'DFCCE96C8C244586A3BCF098306C6374', 'cip280': 'C02ED6499331AF8C6CF30A63BB5E89CA', 'cip281': 'B5F166B94EC31A17662E24757FBB3FC5', 'cip282': '17D20FBDA96D4AD0D99DAE64DE5F317B', 'cip283': '320FA060BBB901F66A9E4CFF221E6A4A', 'msg75': '00000000000000000000000000000000', 'cip448': 'EAA29A98E10A4AB9B5915AD5A4CF18D1', 'cip449': '138814DA7AB2564415BF2B1975E8AEE3', 'cip446': 'E64CD5838022B9B0510F912D73DF770A', 'cip447': 'C7C82772A2A8E0096CA52536B842C95B', 'cip444': '052C775722AFEF0010C5795C521B9D25', 'cip445': '9255BCA646A86FFBADE6F6632F0A0EFC', 'cip442': 'E59FD8D22CE84AAB7EAD2C21DFD10F57', 'cip443': '5415206EFE692AD90272E8A8CB6F638D', 'cip440': 'E43D1D06F03122F900E304751B2DD0C5', 'cip441': '8FBBC002A6C016F7A3B7AF5076C9F6DA', 'cip266': 'DF581405DFBDEFACB35AD3BC510FE895', 'cip267': '45B3C3DAC439F884447567B282DE329C', 'cip264': '2B451B22A3EBAB1C7A7619551DDF149F', 'cip265': '3ABE3CAEDA54E5583269803BE04CBB2C', 'cip262': 'DF5E38BE0362C35E8AF472C6327987DA', 'cip263': '07E5E5AD7097B849BADC2D5D803B7F6A', 'cip260': '8229E6539268BB39F3218E2903110C4F', 'cip261': '935A7835E2FAF9F7F20CE85662EE281F', 'cip268': '4192DE2B562CDD43EC4358EA730250C3', 'cip269': '27E310D8032E16CF970F635C517E7D2E', 'cip198': 'E92FEBFA44950BE01CE755EB4607563B', 'cip199': 'A583EF976A292B406BBD5DC8256B0442', 'cip190': 'F7E405B065FB1A03EBD539CFCAD08E17', 'cip191': '0872458B2E2C4725CE7DEC3FFFC47F4A', 'cip192': '853E0E5DD1CA7C9C55388DDBA2F138FD', 'cip193': '6991C5D5E1BD766597115C5A213F6CFB', 'cip194': '4E0D7A3C6816CC844ABA4BB6AA0F3592', 'cip195': '1A93F22F2E11AFC3CECA1FC17065ECEC', 'cip196': '1519F9986E85E5B942A66DFE1D6ECBE7', 'cip197': '2B583F2363F6C1D981BD2D0C3F965F3A', 'cip70': '7761ECD209CB564EEACAB4E62DB26BDD', 'cip71': '67D23F0CF1A57BA0E43FE82A3F4FBBB6', 'cip72': '6ED568AD50C256B77945E19C04086D98', 'cip73': 'F2398F417C685FE664735E29DB29BBA9', 'cip74': '37D20B991D910044C6BEF068028125D4', 'cip75': '35721318ED63062B43D37C4F14101962', 'cip76': '74A004A5D483CCA7219EA12AD4AF5CA4', 'cip77': 'BBCEA8A80619D2AC53037313E71AB56C', 'cip78': '646E434C0FEF5CD6CD9C7A26BA972BB1', 'cip79': '8F2AD3F65E9716E611501D5B7AD81127', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg103': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'msg576': 'C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0', 'key289': '0000000000000000000000000000000000000000000000000000000000000000', 'key288': '0000000000000000000000000000000000000000000000000000000000000000', 'key283': '0000000000000000000000000000000000000000000000000000000000000000', 'key282': '0000000000000000000000000000000000000000000000000000000000000000', 'key281': '0000000000000000000000000000000000000000000000000000000000000000', 'key280': '0000000000000000000000000000000000000000000000000000000000000000', 'key287': '0000000000000000000000000000000000000000000000000000000000000000', 'key286': '0000000000000000000000000000000000000000000000000000000000000000', 'key285': '0000000000000000000000000000000000000000000000000000000000000000', 'key284': '0000000000000000000000000000000000000000000000000000000000000000', 'key519': '8787878787878787878787878787878787878787878787878787878787878787', 'key518': '8686868686868686868686868686868686868686868686868686868686868686', 'key513': '8181818181818181818181818181818181818181818181818181818181818181', 'key512': '8080808080808080808080808080808080808080808080808080808080808080', 'key511': '7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F', 'key510': '7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E', 'key517': '8585858585858585858585858585858585858585858585858585858585858585', 'key516': '8484848484848484848484848484848484848484848484848484848484848484', 'key515': '8383838383838383838383838383838383838383838383838383838383838383', 'key514': '8282828282828282828282828282828282828282828282828282828282828282', 'key265': '0000000000000000000000000000000000000000000000000000000000000000', 'key264': '0000000000000000000000000000000000000000000000000000000000000000', 'key267': '0000000000000000000000000000000000000000000000000000000000000000', 'key266': '0000000000000000000000000000000000000000000000000000000000000000', 'key261': '0000000000000000000000000000000000000000000000000000000000000000', 'key260': '0000000000000000000000000000000000000000000000000000000000000000', 'key263': '0000000000000000000000000000000000000000000000000000000000000000', 'key262': '0000000000000000000000000000000000000000000000000000000000000000', 'key269': '0000000000000000000000000000000000000000000000000000000000000000', 'key268': '0000000000000000000000000000000000000000000000000000000000000000', 'cip635': '8D586E53318116E54E4AC82DC997DDF4', 'cip634': '88DAF93AB4A8321F728B8B7C95ADF18A', 'cip637': '8B54C5B81ADBE4E1712931515684E692', 'key607': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'key606': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'key605': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'key604': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'key603': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'key602': 'DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA', 'key601': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'key600': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'cip631': '87328511D8F05DFF8E6E2D285ED2FEBC', 'key609': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'key608': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'cip633': 'BF34687415B3801531D51929FBB4DEFB', 'cip632': '52B0617576697BC68FC70197951CE2CD', 'cip518': '43783BD064B66455AA52EA05ECA7BBDC', 'cip519': '150AC66FE2263640E7C4EEA57C7A5DD4', 'key463': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'key462': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'key461': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'key460': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'key467': '5353535353535353535353535353535353535353535353535353535353535353', 'key466': '5252525252525252525252525252525252525252525252525252525252525252', 'key465': '5151515151515151515151515151515151515151515151515151515151515151', 'key464': '5050505050505050505050505050505050505050505050505050505050505050', 'key469': '5555555555555555555555555555555555555555555555555555555555555555', 'key468': '5454545454545454545454545454545454545454545454545454545454545454', 'cip516': 'BCADFBB980B87CDC8B841483991E545F', 'cip517': '87694A51BFE0B78B2AAC63BB2EAFA25F', 'cip523': '05D906E3FFA5E5E32CE099060FDAFCE4', 'cip510': 'C77C11CBD96C18F7633552AE6380C370', 'key624': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'cip511': '5695D175E8B526CFD2DCB59D088ED296', 'cip512': 'B300F700987E62DDB46AEAB2835E2861', 'cip513': 'C20C03C9C5F61BAFEC147FC399B363F4', 'msg241': '00000000000000000000000000000000', 'msg240': '00000000000000000000000000000000', 'msg243': '00000000000000000000000000000000', 'msg242': '00000000000000000000000000000000', 'msg245': '00000000000000000000000000000000', 'msg244': '00000000000000000000000000000000', 'msg247': '00000000000000000000000000000000', 'msg246': '00000000000000000000000000000000', 'msg249': '00000000000000000000000000000000', 'msg248': '00000000000000000000000000000000', 'msg483': '63636363636363636363636363636363', 'msg482': '62626262626262626262626262626262', 'msg481': '61616161616161616161616161616161', 'msg480': '60606060606060606060606060606060', 'msg487': '67676767676767676767676767676767', 'msg486': '66666666666666666666666666666666', 'msg485': '65656565656565656565656565656565', 'msg484': '64646464646464646464646464646464', 'msg489': '69696969696969696969696969696969', 'msg488': '68686868686868686868686868686868', 'key80': '0000000000000000000080000000000000000000000000000000000000000000', 'key81': '0000000000000000000040000000000000000000000000000000000000000000', 'key82': '0000000000000000000020000000000000000000000000000000000000000000', 'key83': '0000000000000000000010000000000000000000000000000000000000000000', 'key84': '0000000000000000000008000000000000000000000000000000000000000000', 'key85': '0000000000000000000004000000000000000000000000000000000000000000', 'key86': '0000000000000000000002000000000000000000000000000000000000000000', 'key87': '0000000000000000000001000000000000000000000000000000000000000000', 'key88': '0000000000000000000000800000000000000000000000000000000000000000', 'key89': '0000000000000000000000400000000000000000000000000000000000000000', 'cip527': '1FAD1B0BF748B6EE4FBC8FD0ACB20B62', 'cip299': 'CFD3A8EE62F68692A8917C814290E979', 'cip298': 'A9E22B14D403C7F0FA9D95C064CBA9D3', 'cip293': 'C0F6B4881776765507CF91DB0A32C70F', 'cip292': '29A5D9977C881DB067136B755BB68E54', 'cip291': '308CD48EC851D7C1251174228B943B11', 'cip290': '5332616A057A657FD2FD6562AF33EFC9', 'cip297': '2002487C2CFE5A223E3A3C19A6B23670', 'cip296': '0F6D2E73CF929A92BADF0A372FFB31A5', 'cip295': '58D7E0D60E315EEBA97F0DFA2D7307B0', 'cip294': '47E518209CB5533F9A7EE02C4F07391B', 'cip459': '499882932A9B954E9C497259AF74FB91', 'cip458': 'E7AC316166FD3903AEE82D89A72D70E9', 'cip455': '513282367E9270ACA63EEF5066455B64', 'cip454': 'F508590EC0E2D11D23B892885E32737E', 'cip457': 'F2DBB82CAAA21B8288B33E06B572B46E', 'cip456': '5B0931DEA2295EF51C6612C9CE34E1F1', 'cip451': 'CE449A1BED32DD4143AB84161EE5D276', 'cip450': 'B9A210C0ECD3A13E19EA2C0F0023A928', 'cip453': '3539BA5C1F7C679B9721A47B0309837E', 'cip452': '5CDF709917EC5CFF1099A3D8E8D48F56', 'cip275': 'B666AA7C5BA5209CBCEDE07EB66064D3', 'cip274': '11BB660CF8431F2625AB9EF603975BB7', 'cip277': 'ED29F7805804E2E95F664B2E36C20A67', 'cip276': 'CAD843E927DDE8F92DBBB33C1B4E87F9', 'cip271': 'B4AD06B55E31DE8F1F77C2B7AE8B73FD', 'cip270': '573CAE2A23968DE1D40036C24F9FEFA4', 'cip273': 'EA3C7C9B02AE7297B4BE551C8C551440', 'cip272': 'BD5426FFD3CC9FC735EBAB7C72FD2D9B', 'cip279': 'E47A19E8579807B5C44AC62619372673', 'cip278': '980F61BF6EBDE1A30607A1D51FFFB8D6', 'cip187': '6E71FFAC10EDBF08A6DC42BDA14AE1CE', 'cip186': 'E85D57184DA2B982C18C8B13B1348838', 'cip185': 'F502C9674BEBFAE010527C808CA03F5C', 'cip184': '08D8A40BCA6BC1C31BADCC9DDA387D9C', 'cip183': 'A577782DBA6EDE990B2A28FBF52899B0', 'cip182': '0CE37E34B01BAF724841EC58A6B90990', 'cip181': 'ADCAFB490DD340784F084779CE182FFE', 'cip180': 'F02FA74352855E5FC194F18476DC2916', 'cip189': 'CBC811575660AF9F7E869631ED779F66', 'cip188': '0F2D7BEE48845D8A17ECF93F52F9036A', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': 'C899A00A2585C1F654694700F1EC1531', 'cip88': 'AD4B018D50E3A28124A0A1259DC667D4', 'cip85': '5E6F28690F31CDC0DAD21D8E3E1BC985', 'cip84': 'C11856EE23FA27F2F426844EE9C7B081', 'cip87': '4A567C948597B47A1ABF5F8CCD77AE4F', 'cip86': '712D271BAB597FF6728C0A55CE6C3CDB', 'cip81': 'DDB074D9E22B61FCDCB2323A52046221', 'cip80': 'B4B30728F0DDBB28402E252DC6DDBA4E', 'cip83': '25415EF8615CC222B1EC77046B094C35', 'cip82': '91ABBBFECEC752159297B832055E99FE', 'msg597': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'msg596': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key626': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg99': '00000000000000000000000000000000', 'cip344': '7407623C54E38D13B48B84306DD8F244', 'msg95': '00000000000000000000000000000000', 'cip348': 'F08620D46001C366FD6DCBEBC806C182', 'key627': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'key250': '0000000000000000000000000000000000000000000000000000000000000020', 'key251': '0000000000000000000000000000000000000000000000000000000000000010', 'key252': '0000000000000000000000000000000000000000000000000000000000000008', 'key253': '0000000000000000000000000000000000000000000000000000000000000004', 'key254': '0000000000000000000000000000000000000000000000000000000000000002', 'key255': '0000000000000000000000000000000000000000000000000000000000000001', 'key256': '0000000000000000000000000000000000000000000000000000000000000000', 'key257': '0000000000000000000000000000000000000000000000000000000000000000', 'key258': '0000000000000000000000000000000000000000000000000000000000000000', 'key259': '0000000000000000000000000000000000000000000000000000000000000000', 'key382': '0000000000000000000000000000000000000000000000000000000000000000', 'key383': '0000000000000000000000000000000000000000000000000000000000000000', 'key380': '0000000000000000000000000000000000000000000000000000000000000000', 'key381': '0000000000000000000000000000000000000000000000000000000000000000', 'key386': '0202020202020202020202020202020202020202020202020202020202020202', 'key387': '0303030303030303030303030303030303030303030303030303030303030303', 'key384': '0000000000000000000000000000000000000000000000000000000000000000', 'key385': '0101010101010101010101010101010101010101010101010101010101010101', 'key388': '0404040404040404040404040404040404040404040404040404040404040404', 'key389': '0505050505050505050505050505050505050505050505050505050505050505', 'key498': '7272727272727272727272727272727272727272727272727272727272727272', 'key499': '7373737373737373737373737373737373737373737373737373737373737373', 'key496': '7070707070707070707070707070707070707070707070707070707070707070', 'key497': '7171717171717171717171717171717171717171717171717171717171717171', 'key494': '6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E', 'key495': '6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F', 'key492': '6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C', 'key493': '6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D', 'key490': '6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A', 'key491': '6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B', 'key620': 'ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC', 'cip530': '3376EB6475507938793833C05F01AEF4', 'msg278': '00000200000000000000000000000000', 'msg279': '00000100000000000000000000000000', 'msg274': '00002000000000000000000000000000', 'msg275': '00001000000000000000000000000000', 'msg276': '00000800000000000000000000000000', 'msg277': '00000400000000000000000000000000', 'msg270': '00020000000000000000000000000000', 'msg271': '00010000000000000000000000000000', 'msg272': '00008000000000000000000000000000', 'msg273': '00004000000000000000000000000000', 'msg478': '5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E', 'msg479': '5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F', 'msg476': '5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C', 'msg477': '5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D', 'msg474': '5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A', 'msg475': '5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B', 'msg472': '58585858585858585858585858585858', 'msg473': '59595959595959595959595959595959', 'msg470': '56565656565656565656565656565656', 'msg471': '57575757575757575757575757575757', 'key79': '0000000000000000000100000000000000000000000000000000000000000000', 'key78': '0000000000000000000200000000000000000000000000000000000000000000', 'key75': '0000000000000000001000000000000000000000000000000000000000000000', 'key74': '0000000000000000002000000000000000000000000000000000000000000000', 'key77': '0000000000000000000400000000000000000000000000000000000000000000', 'key76': '0000000000000000000800000000000000000000000000000000000000000000', 'key71': '0000000000000000010000000000000000000000000000000000000000000000', 'key70': '0000000000000000020000000000000000000000000000000000000000000000', 'key73': '0000000000000000004000000000000000000000000000000000000000000000', 'key72': '0000000000000000008000000000000000000000000000000000000000000000', 'key625': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'cip537': '930031A0EED54C389CA3D6DAD0C8BFCD', 'msg618': 'EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA', 'msg619': 'EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB', 'msg612': 'E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4', 'msg613': 'E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5', 'msg610': 'E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2', 'msg611': 'E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3', 'msg616': 'E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8', 'msg617': 'E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9', 'msg614': 'E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6', 'msg615': 'E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7', 'msg588': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'msg589': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'msg582': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'msg583': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'msg580': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'msg581': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'msg586': 'CACACACACACACACACACACACACACACACA', 'msg587': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'msg584': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'msg585': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'cip468': 'B15B34732A77582685EC39D206AD7971', 'cip469': '3D4A329E2C0CB82C3B55DC65D82C8F5D', 'cip460': '6D391061B2808CB51861BFF04D1D13FB', 'cip461': '3300163873719E2614ECBAE9FF1F0EE5', 'cip462': '3F8577CBA87F31DE3B075321AABF1840', 'cip463': '89EF16A9192ABD0A14166857B473DA63', 'cip464': '4ED19F98FD9527425802105888860339', 'cip465': 'B474DE1B8EA648B22F70C9A7ACD589C1', 'cip466': '20ED60D6AFF842956D9E9E57D9F06E62', 'cip467': '17B7CCDA23125B87A69C467A19270464', 'cip240': '82EDDDC59E207131F1AE2A2A06A83284', 'cip241': '1C17A9F76290FB6C0F0267BB1CE832C6', 'cip242': '6DD6415CC9EFB2323FA78ED28EEE06C7', 'cip243': '48FD01A424E995B0E0840353439B1A4B', 'cip244': '2B139C4C4200A8DA4DAF8169F84A4089', 'cip245': '0D7E0A00E181F592C1D75250AC940517', 'cip246': '9250D327F678E8EDBC25CB40EA70391E', 'cip247': '4D715D9421FCB51C7B4C94DEF2B5C210', 'cip248': '1908EF821AD2EBC0CB28BF66E796EDAB', 'cip249': '8D88B1E7BB45E0DD5603D8FCCD589695', 'msg296': '00000000008000000000000000000000', 'msg297': '00000000004000000000000000000000', 'msg294': '00000000020000000000000000000000', 'msg295': '00000000010000000000000000000000', 'msg292': '00000000080000000000000000000000', 'msg293': '00000000040000000000000000000000', 'msg290': '00000000200000000000000000000000', 'msg291': '00000000100000000000000000000000', 'key639': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'msg298': '00000000002000000000000000000000', 'msg299': '00000000001000000000000000000000', 'key636': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'key637': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'key621': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'cip98': 'FFF5A17155933F6084EA4C1BE1245769', 'cip99': '64CA3D5422833F7A4AD1FA5331C08A78', 'cip96': '5F3DB2DEE7074DAE2340174109D6BEF0', 'cip97': 'E530BC0CE5A24E03AD0D215A7E9D9A15', 'cip94': '9E457544FC14C723884DD15DEBC25157', 'cip95': 'E0767EC3934ECF169116B485ED0C755B', 'cip92': '97FD2DDD6045805A7B34879A6AB55D3C', 'cip93': '547D61C02DEF0D9869DF43907D3B8124', 'cip90': 'BAE53DCFCF6D6E360A27755F9CE81B6D', 'cip91': '6E181C731459C3360778BEA1BA86164D', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'msg127': '00000000000000000000000000000000', 'msg128': '00000000000000000000000000000000', 'msg129': '00000000000000000000000000000000', 'key622': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'key249': '0000000000000000000000000000000000000000000000000000000000000040', 'key248': '0000000000000000000000000000000000000000000000000000000000000080', 'key247': '0000000000000000000000000000000000000000000000000000000000000100', 'key246': '0000000000000000000000000000000000000000000000000000000000000200', 'key245': '0000000000000000000000000000000000000000000000000000000000000400', 'key244': '0000000000000000000000000000000000000000000000000000000000000800', 'key243': '0000000000000000000000000000000000000000000000000000000000001000', 'key242': '0000000000000000000000000000000000000000000000000000000000002000', 'key241': '0000000000000000000000000000000000000000000000000000000000004000', 'key240': '0000000000000000000000000000000000000000000000000000000000008000', 'key391': '0707070707070707070707070707070707070707070707070707070707070707', 'key390': '0606060606060606060606060606060606060606060606060606060606060606', 'key393': '0909090909090909090909090909090909090909090909090909090909090909', 'key392': '0808080808080808080808080808080808080808080808080808080808080808', 'key395': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'key394': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'key397': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'key396': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'key399': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'key398': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'key640': '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F', 'key489': '6969696969696969696969696969696969696969696969696969696969696969', 'key488': '6868686868686868686868686868686868686868686868686868686868686868', 'key485': '6565656565656565656565656565656565656565656565656565656565656565', 'key484': '6464646464646464646464646464646464646464646464646464646464646464', 'key487': '6767676767676767676767676767676767676767676767676767676767676767', 'key486': '6666666666666666666666666666666666666666666666666666666666666666', 'key481': '6161616161616161616161616161616161616161616161616161616161616161', 'key480': '6060606060606060606060606060606060606060606060606060606060606060', 'key483': '6363636363636363636363636363636363636363636363636363636363636363', 'key482': '6262626262626262626262626262626262626262626262626262626262626262', 'cip532': 'E1A5BB56F536C178AE13DF9072C546E1', 'msg269': '00040000000000000000000000000000', 'msg268': '00080000000000000000000000000000', 'cip533': '2F70EC2D4A3B230EA16E8BDC562F59BA', 'msg263': '01000000000000000000000000000000', 'msg262': '02000000000000000000000000000000', 'msg261': '04000000000000000000000000000000', 'msg260': '08000000000000000000000000000000', 'msg267': '00100000000000000000000000000000', 'msg266': '00200000000000000000000000000000', 'msg265': '00400000000000000000000000000000', 'msg264': '00800000000000000000000000000000', 'cip531': '6EC9A5766B8951B4BAC92DC2CC70A604', 'msg469': '55555555555555555555555555555555', 'msg468': '54545454545454545454545454545454', 'msg465': '51515151515151515151515151515151', 'msg464': '50505050505050505050505050505050', 'msg467': '53535353535353535353535353535353', 'msg466': '52525252525252525252525252525252', 'msg461': '4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D', 'msg460': '4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C', 'msg463': '4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F', 'msg462': '4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E', 'cip509': 'F8072B98D842A73848E4C25301EEF78F', 'cip508': '426DD1AEB527F1DEC349979DA04D20D4', 'cip534': '239281E30A83651F2DA2E4B49F115F55', 'key68': '0000000000000000080000000000000000000000000000000000000000000000', 'key69': '0000000000000000040000000000000000000000000000000000000000000000', 'key66': '0000000000000000200000000000000000000000000000000000000000000000', 'key67': '0000000000000000100000000000000000000000000000000000000000000000', 'key64': '0000000000000000800000000000000000000000000000000000000000000000', 'key65': '0000000000000000400000000000000000000000000000000000000000000000', 'key62': '0000000000000002000000000000000000000000000000000000000000000000', 'key63': '0000000000000001000000000000000000000000000000000000000000000000', 'key60': '0000000000000008000000000000000000000000000000000000000000000000', 'key61': '0000000000000004000000000000000000000000000000000000000000000000', 'key638': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg609': 'E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1', 'msg608': 'E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0', 'msg601': 'D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9', 'msg600': 'D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8', 'msg603': 'DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB', 'msg602': 'DADADADADADADADADADADADADADADADA', 'msg605': 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD', 'msg604': 'DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC', 'msg607': 'DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF', 'msg606': 'DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE', 'cip477': 'FEE3A130BD54E4E4B4787DC5D9FCEBBF', 'cip476': '0B465E7A5F6804AB25B0AD0B4CD772A3', 'cip475': 'A8571CA6EDE2797A412CA47060982498', 'cip474': 'A62012B731A685C4FA6A7723D28EF8E4', 'cip473': 'EBB6B99456AE0E5DE95464C677210DC1', 'cip472': '9141BC1A33548F693C9303378FD787CB', 'cip471': '8B7C143FE71080D1693486D5CCE8D31B', 'cip470': '989ADAD903362FF282A18BBC765ADBEA', 'msg591': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'msg590': 'CECECECECECECECECECECECECECECECE', 'msg593': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'msg592': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'msg595': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'msg594': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'cip479': '042E3D48CFA03DF12941904385B045B7', 'cip478': '2B7A118ADB12D2E6303BB4AAF3749EF3', 'cip259': '917B2F6A11DDDCEB53FEA01E194A6CC9', 'cip258': '302F8325DEB1E1A0955D6273368A0DC4', 'cip257': '893BF67B1A845579C8FADC05BFDC0894', 'cip256': '8314675E8AD5C3ECD83D852BCF7F566E', 'cip255': '9858FD31C9C6B54AC0C99CC52324ED34', 'cip254': 'A6726CE53BD62BC873F6C0463A5841FC', 'cip253': 'F6899D57F734AFD6473278DBDE8FB99D', 'cip252': '869A570998988F68819CCF301EB015DF', 'cip251': '66487D053A660BD840D7DE39A3B1F139', 'cip250': '284CDF6476175B6BB414E7FAC09CD404', 'msg285': '00000004000000000000000000000000', 'msg284': '00000008000000000000000000000000', 'msg287': '00000001000000000000000000000000', 'msg286': '00000002000000000000000000000000', 'msg281': '00000040000000000000000000000000', 'msg280': '00000080000000000000000000000000', 'msg283': '00000010000000000000000000000000', 'msg282': '00000020000000000000000000000000', 'msg289': '00000000400000000000000000000000', 'msg288': '00000000800000000000000000000000', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'key9': '0040000000000000000000000000000000000000000000000000000000000000', 'key8': '0080000000000000000000000000000000000000000000000000000000000000', 'key3': '1000000000000000000000000000000000000000000000000000000000000000', 'key2': '2000000000000000000000000000000000000000000000000000000000000000', 'key1': '4000000000000000000000000000000000000000000000000000000000000000', 'key0': '8000000000000000000000000000000000000000000000000000000000000000', 'key7': '0100000000000000000000000000000000000000000000000000000000000000', 'key6': '0200000000000000000000000000000000000000000000000000000000000000', 'key5': '0400000000000000000000000000000000000000000000000000000000000000', 'key4': '0800000000000000000000000000000000000000000000000000000000000000', 'msg139': '00000000000000000000000000000000', 'msg138': '00000000000000000000000000000000', 'msg137': '00000000000000000000000000000000', 'msg136': '00000000000000000000000000000000', 'msg135': '00000000000000000000000000000000', 'msg134': '00000000000000000000000000000000', 'msg133': '00000000000000000000000000000000', 'msg132': '00000000000000000000000000000000', 'msg131': '00000000000000000000000000000000', 'msg130': '00000000000000000000000000000000', 'msg77': '00000000000000000000000000000000', 'key238': '0000000000000000000000000000000000000000000000000000000000020000', 'key239': '0000000000000000000000000000000000000000000000000000000000010000', 'msg76': '00000000000000000000000000000000', 'key232': '0000000000000000000000000000000000000000000000000000000000800000', 'key233': '0000000000000000000000000000000000000000000000000000000000400000', 'key230': '0000000000000000000000000000000000000000000000000000000002000000', 'key231': '0000000000000000000000000000000000000000000000000000000001000000', 'key236': '0000000000000000000000000000000000000000000000000000000000080000', 'key237': '0000000000000000000000000000000000000000000000000000000000040000', 'key234': '0000000000000000000000000000000000000000000000000000000000200000', 'key235': '0000000000000000000000000000000000000000000000000000000000100000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'key128': '0000000000000000000000000000000080000000000000000000000000000000', 'key129': '0000000000000000000000000000000040000000000000000000000000000000', 'key126': '0000000000000000000000000000000200000000000000000000000000000000', 'key127': '0000000000000000000000000000000100000000000000000000000000000000', 'key124': '0000000000000000000000000000000800000000000000000000000000000000', 'key125': '0000000000000000000000000000000400000000000000000000000000000000', 'key122': '0000000000000000000000000000002000000000000000000000000000000000', 'key123': '0000000000000000000000000000001000000000000000000000000000000000', 'key120': '0000000000000000000000000000008000000000000000000000000000000000', 'key121': '0000000000000000000000000000004000000000000000000000000000000000', 'key346': '0000000000000000000000000000000000000000000000000000000000000000', 'key347': '0000000000000000000000000000000000000000000000000000000000000000', 'key344': '0000000000000000000000000000000000000000000000000000000000000000', 'key345': '0000000000000000000000000000000000000000000000000000000000000000', 'key342': '0000000000000000000000000000000000000000000000000000000000000000', 'key343': '0000000000000000000000000000000000000000000000000000000000000000', 'key340': '0000000000000000000000000000000000000000000000000000000000000000', 'key341': '0000000000000000000000000000000000000000000000000000000000000000', 'key348': '0000000000000000000000000000000000000000000000000000000000000000', 'key349': '0000000000000000000000000000000000000000000000000000000000000000', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'key545': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg458': '4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A', 'msg459': '4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B', 'msg450': '42424242424242424242424242424242', 'msg451': '43434343434343434343434343434343', 'msg452': '44444444444444444444444444444444', 'msg453': '45454545454545454545454545454545', 'msg454': '46464646464646464646464646464646', 'msg455': '47474747474747474747474747474747', 'msg456': '48484848484848484848484848484848', 'msg457': '49494949494949494949494949494949', 'key59': '0000000000000010000000000000000000000000000000000000000000000000', 'key58': '0000000000000020000000000000000000000000000000000000000000000000', 'key53': '0000000000000400000000000000000000000000000000000000000000000000', 'key52': '0000000000000800000000000000000000000000000000000000000000000000', 'key51': '0000000000001000000000000000000000000000000000000000000000000000', 'key50': '0000000000002000000000000000000000000000000000000000000000000000', 'key57': '0000000000000040000000000000000000000000000000000000000000000000', 'key56': '0000000000000080000000000000000000000000000000000000000000000000', 'key55': '0000000000000100000000000000000000000000000000000000000000000000', 'key54': '0000000000000200000000000000000000000000000000000000000000000000', 'msg634': 'FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA', 'msg635': 'FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB', 'msg636': 'FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC', 'msg637': 'FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD', 'msg630': 'F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6', 'msg631': 'F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7', 'msg632': 'F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8', 'msg633': 'F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9', 'msg638': 'FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE', 'msg639': 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'key149': '0000000000000000000000000000000000000400000000000000000000000000', 'cip402': '34C9A82AFA5AF48071F5F7BC90C1BC85', 'cip403': '2C38D49B104D172DCDD692809C95F910', 'cip400': '0058F8E377AA222F712C2479F4A562AF', 'cip401': 'A482EAA5D5771F2FDB2EA1A5F141B9E2', 'cip406': 'E413732866AB0D7DD6CFA3D4756B79E1', 'cip407': 'A3DDD67A05BE8D34C15759E2561BC287', 'cip404': '1F04D4F92BD3B745C44F263A8FCA505B', 'cip405': 'CD571C726E1D807F63CF33F33FB3C4FD', 'cip408': 'B569DC825826F1282026976227500327', 'cip409': '77330D7691112CF9BB306DAB27D37AB6', 'cip228': '1DD21FD2291C7419B5593EE8D6712198', 'key147': '0000000000000000000000000000000000001000000000000000000000000000', 'cip222': 'F14145E5DCB1EFA30A5A6CA08EC8F8FE', 'cip223': '4D08CD60B971B10854A0912DAF5CC3A8', 'cip220': '940218AC849FD119D89B0E15376213DD', 'cip221': 'C07DE68CB0ED8C8D398B87D6547BD15B', 'cip226': '83DB5E464D300A76EDA858E108902EBF', 'cip227': 'C7FB67AAA9F7417DC5977B57B723D278', 'cip224': '17A457DA5304D77BD0BC4B5B8BB02FDD', 'cip225': 'B6DF6B6C45A38ECE7E940C45FE1E847E', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'cip318': 'FD8E2C7604621D13E64B58315DCC65CD', 'cip319': 'A7126988773129D5F6CC330C1A0EF30B', 'cip316': '0EBC3926D924F37BFD716F404CA8450D', 'cip317': '53CADA57C7855AEB96B48F8C85915DE9', 'cip314': 'F51234B609D397B1D6DA8BB625C0993C', 'cip315': '0AF5205E41F184D0989A78BF149DB675', 'cip312': '4DDBA0F24964591307AB909009BB41EF', 'cip313': '5D9333754035534CEF4EEFA73EA3F8C9', 'cip310': 'E33261C4E54AB7B117C3ABA1C9E11C1E', 'cip311': 'B84E741AC92A42F37A77F05D6F464E10', 'cip136': '801CA8E44FB6BAB5DF7FB96AA5F39F8D', 'cip137': '9EB5169E8F72673301D0ABF9E85422BF', 'cip134': '97E97C261C31046F115FEC15820E3822', 'cip135': '3620B17AE6A993D09618B8768266BAE9', 'cip132': '4459D2EA77E8E8041DA46EB36705B054', 'cip133': 'E76A69F531CCC2C1A4C56AEE55B63C29', 'cip130': 'C2441BB36C7B7977B0E6EED5AED1BE09', 'cip131': '63A33251E59FF5A6CE0482EB4B80E70B', 'cip138': 'CB377E74144F9E9405355F089CA3918B', 'cip139': '1EE82E9E6E525DAEB21DF068DFF7AB09', 'msg148': '00000000000000000000000000000000', 'msg149': '00000000000000000000000000000000', 'msg142': '00000000000000000000000000000000', 'msg143': '00000000000000000000000000000000', 'msg140': '00000000000000000000000000000000', 'msg141': '00000000000000000000000000000000', 'msg146': '00000000000000000000000000000000', 'msg147': '00000000000000000000000000000000', 'msg144': '00000000000000000000000000000000', 'msg145': '00000000000000000000000000000000', 'key229': '0000000000000000000000000000000000000000000000000000000004000000', 'key228': '0000000000000000000000000000000000000000000000000000000008000000', 'key221': '0000000000000000000000000000000000000000000000000000000400000000', 'key220': '0000000000000000000000000000000000000000000000000000000800000000', 'key223': '0000000000000000000000000000000000000000000000000000000100000000', 'key222': '0000000000000000000000000000000000000000000000000000000200000000', 'key225': '0000000000000000000000000000000000000000000000000000000040000000', 'key224': '0000000000000000000000000000000000000000000000000000000080000000', 'key227': '0000000000000000000000000000000000000000000000000000000010000000', 'key226': '0000000000000000000000000000000000000000000000000000000020000000', 'key139': '0000000000000000000000000000000000100000000000000000000000000000', 'key138': '0000000000000000000000000000000000200000000000000000000000000000', 'key135': '0000000000000000000000000000000001000000000000000000000000000000', 'key134': '0000000000000000000000000000000002000000000000000000000000000000', 'key137': '0000000000000000000000000000000000400000000000000000000000000000', 'key136': '0000000000000000000000000000000000800000000000000000000000000000', 'key131': '0000000000000000000000000000000010000000000000000000000000000000', 'key130': '0000000000000000000000000000000020000000000000000000000000000000', 'key133': '0000000000000000000000000000000004000000000000000000000000000000', 'key132': '0000000000000000000000000000000008000000000000000000000000000000', 'key355': '0000000000000000000000000000000000000000000000000000000000000000', 'key354': '0000000000000000000000000000000000000000000000000000000000000000', 'key357': '0000000000000000000000000000000000000000000000000000000000000000', 'key356': '0000000000000000000000000000000000000000000000000000000000000000', 'key351': '0000000000000000000000000000000000000000000000000000000000000000', 'key350': '0000000000000000000000000000000000000000000000000000000000000000', 'key353': '0000000000000000000000000000000000000000000000000000000000000000', 'key352': '0000000000000000000000000000000000000000000000000000000000000000', 'msg20': '00000000000000000000000000000000', 'key359': '0000000000000000000000000000000000000000000000000000000000000000', 'key358': '0000000000000000000000000000000000000000000000000000000000000000', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'msg447': '3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F', 'msg446': '3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E', 'msg445': '3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D', 'msg444': '3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C', 'msg443': '3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B', 'msg442': '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', 'msg441': '39393939393939393939393939393939', 'msg440': '38383838383838383838383838383838', 'msg449': '41414141414141414141414141414141', 'msg448': '40404040404040404040404040404040', 'key44': '0000000000080000000000000000000000000000000000000000000000000000', 'key45': '0000000000040000000000000000000000000000000000000000000000000000', 'key46': '0000000000020000000000000000000000000000000000000000000000000000', 'key47': '0000000000010000000000000000000000000000000000000000000000000000', 'key40': '0000000000800000000000000000000000000000000000000000000000000000', 'key41': '0000000000400000000000000000000000000000000000000000000000000000', 'key42': '0000000000200000000000000000000000000000000000000000000000000000', 'key43': '0000000000100000000000000000000000000000000000000000000000000000', 'key48': '0000000000008000000000000000000000000000000000000000000000000000', 'key49': '0000000000004000000000000000000000000000000000000000000000000000', 'msg623': 'EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF', 'msg622': 'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE', 'msg621': 'EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED', 'msg620': 'ECECECECECECECECECECECECECECECEC', 'msg627': 'F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3', 'msg626': 'F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2', 'msg625': 'F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1', 'msg624': 'F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0', 'msg629': 'F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5', 'msg628': 'F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4', 'cip411': 'AA066781289FDDAB83A33D80A887610F', 'cip410': 'BFBB4C2155D0A63166CF52A7BB76EA54', 'cip413': '1D443C71CCD43FB7C0E1F768BC183CEA', 'cip412': 'D28A4BD878533E1C3BCEE9E1E6698531', 'cip415': '523A2CCAF30FB3409B8FB82EDB335576', 'cip414': '3F3A93AD3D7CE10131637BF234AFE7A1', 'cip417': '1331DA989CB20374CA729374F1EE76AA', 'cip416': '09475D9935447EA1F20A01A1D3F1AAE2', 'cip419': '4D93AF45FE56DB560F5DE0D87B8CF21F', 'cip418': '3D79BAB4D86B73AD28E004F4A7EC4514', 'cip239': 'A94CC5DCC946C9B4F38D1D46BF1C0335', 'cip238': 'AC06EB8186A501262CE9B06FC88F9774', 'cip231': '6FC6C5718FD0B81194A198F873EDE7EA', 'cip230': '61F70FEAB04DB61D959A69E9C1BAAA9D', 'cip233': 'BB75015A768AB1E9BC4AF49D2D156C4F', 'cip232': '19DD5DEC75CEE00003995BF2EA643E2F', 'cip235': '360D02F49944ECAE2EE2050E634904CE', 'cip234': '46EFE1B09EFB606CB11717415511862E', 'cip237': '2E71481D28ED6BD01157F4D054F01961', 'cip236': '93E207973539B6E2EF7D49C772E32D86', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'cip309': '4AE9F03EF61BAA670CE46F3A6C205BD5', 'cip308': '59300BA5323CF6D84A9FF12B042A5AFF', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '39FA2682ABFABA6A705780E72BDA0128', 'cip124': '8C8F6AF8078C29D23B2958CAE6858A09', 'cip127': '47BFD757C13ADA4001DF9B0989E7CB80', 'cip126': 'A812C9D68212B21A14E9CEBCA8960750', 'cip121': '265829FC78FD18069B3631AE596DC9BF', 'cip120': '4172B0BEBBEF90672EB0623A709FC734', 'cip123': '8EBF95D561DD65F9BC66B82A6905828C', 'cip122': 'E89B25E3E40E28D37BA6E78C55A611F8', 'cip129': '57159E7BE66463408FAE89C376318FA8', 'cip128': 'C19171490B5595E8555C61B352935DEB', 'msg159': '00000000000000000000000000000000', 'msg158': '00000000000000000000000000000000', 'msg151': '00000000000000000000000000000000', 'msg150': '00000000000000000000000000000000', 'msg153': '00000000000000000000000000000000', 'msg152': '00000000000000000000000000000000', 'msg155': '00000000000000000000000000000000', 'msg154': '00000000000000000000000000000000', 'msg157': '00000000000000000000000000000000', 'msg156': '00000000000000000000000000000000', 'key584': 'C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8', 'key585': 'C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9', 'key586': 'CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA', 'key587': 'CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB', 'key580': 'C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4', 'key581': 'C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5', 'key582': 'C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6', 'key583': 'C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7', 'key588': 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC', 'key589': 'CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD', 'key108': '0000000000000000000000000008000000000000000000000000000000000000', 'key109': '0000000000000000000000000004000000000000000000000000000000000000', 'key100': '0000000000000000000000000800000000000000000000000000000000000000', 'key101': '0000000000000000000000000400000000000000000000000000000000000000', 'key102': '0000000000000000000000000200000000000000000000000000000000000000', 'key103': '0000000000000000000000000100000000000000000000000000000000000000', 'key104': '0000000000000000000000000080000000000000000000000000000000000000', 'key105': '0000000000000000000000000040000000000000000000000000000000000000', 'key106': '0000000000000000000000000020000000000000000000000000000000000000', 'key107': '0000000000000000000000000010000000000000000000000000000000000000', 'key360': '0000000000000000000000000000000000000000000000000000000000000000', 'key361': '0000000000000000000000000000000000000000000000000000000000000000', 'key362': '0000000000000000000000000000000000000000000000000000000000000000', 'key363': '0000000000000000000000000000000000000000000000000000000000000000', 'key364': '0000000000000000000000000000000000000000000000000000000000000000', 'key365': '0000000000000000000000000000000000000000000000000000000000000000', 'key366': '0000000000000000000000000000000000000000000000000000000000000000', 'key367': '0000000000000000000000000000000000000000000000000000000000000000', 'key368': '0000000000000000000000000000000000000000000000000000000000000000', 'key369': '0000000000000000000000000000000000000000000000000000000000000000', 'key214': '0000000000000000000000000000000000000000000000000000020000000000', 'key215': '0000000000000000000000000000000000000000000000000000010000000000', 'key216': '0000000000000000000000000000000000000000000000000000008000000000', 'key217': '0000000000000000000000000000000000000000000000000000004000000000', 'key210': '0000000000000000000000000000000000000000000000000000200000000000', 'key211': '0000000000000000000000000000000000000000000000000000100000000000', 'key212': '0000000000000000000000000000000000000000000000000000080000000000', 'key213': '0000000000000000000000000000000000000000000000000000040000000000', 'key218': '0000000000000000000000000000000000000000000000000000002000000000', 'key219': '0000000000000000000000000000000000000000000000000000001000000000', 'msg432': '30303030303030303030303030303030', 'msg433': '31313131313131313131313131313131', 'msg430': '2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E', 'msg431': '2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F', 'msg436': '34343434343434343434343434343434', 'msg437': '35353535353535353535353535353535', 'msg434': '32323232323232323232323232323232', 'msg435': '33333333333333333333333333333333', 'msg438': '36363636363636363636363636363636', 'msg439': '37373737373737373737373737373737', 'key31': '0000000100000000000000000000000000000000000000000000000000000000', 'key30': '0000000200000000000000000000000000000000000000000000000000000000', 'key33': '0000000040000000000000000000000000000000000000000000000000000000', 'key32': '0000000080000000000000000000000000000000000000000000000000000000', 'key35': '0000000010000000000000000000000000000000000000000000000000000000', 'key34': '0000000020000000000000000000000000000000000000000000000000000000', 'key37': '0000000004000000000000000000000000000000000000000000000000000000', 'key36': '0000000008000000000000000000000000000000000000000000000000000000', 'key39': '0000000001000000000000000000000000000000000000000000000000000000', 'key38': '0000000002000000000000000000000000000000000000000000000000000000', 'msg388': '04040404040404040404040404040404', 'msg389': '05050505050505050505050505050505', 'msg384': '00000000000000000000000000000000', 'msg385': '01010101010101010101010101010101', 'msg386': '02020202020202020202020202020202', 'msg387': '03030303030303030303030303030303', 'msg380': '00000000000000000000000000000008', 'msg381': '00000000000000000000000000000004', 'msg382': '00000000000000000000000000000002', 'msg383': '00000000000000000000000000000001', 'cip305': '6AD3CCBC31E2ECF88C6B54F84E638AA2', 'msg548': 'A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4', 'cip304': '72C791409F94CE23F4CD61D714670B39', 'msg546': 'A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2', 'msg547': 'A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3', 'msg544': 'A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0', 'msg545': 'A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1', 'msg542': '9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E', 'cip307': '3ABBF724E6C7B2D05D93A2C6D058E5AC', 'msg540': '9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C', 'msg541': '9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D', 'cip306': '9FE143250D00E25696B01E0A2ED05DB3', 'cip428': '7CC5B4BC78C6701F283147C8C3E12836', 'cip429': 'E51AF54B277F6B8763496B5072222260', 'cip424': '244CFA983E06C20505C9660524FEDA9B', 'cip301': 'E74D77BB281F542A0A78C3D8436783F4', 'cip426': 'E02DDE6976A5CC925D064E61E9DC9203', 'cip427': '3556F84DCBED727BEA4B491FC8A75B17', 'cip420': 'DB85A7C351C63D1E2E808285DC261BEA', 'cip421': '5C840DDA0234FA87E9B3BFE66467646A', 'cip422': '17699D8C6AA7E05304C165F83D7D2EB1', 'cip300': 'AECA2C8C0CA8B6F0EF594A13C85E83CF', 'cip303': 'DE964C9FF34F5A79FF43C6AB148DC395', 'cip302': 'B81755986C8B60A935F5D9169A2A7655', 'cip338': '311471549CCBB1EC27BAA384EC32F30F', 'cip339': '3C4DA8FF90590FB9FC529580DD40E7EF', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'cip333': 'CC668772F50D2ED7DF83FF85A0D76576', 'cip334': '685CA45E48D087563E1886DBDD63342F', 'cip335': 'FCE8BFBA1BB12F4990C6DF32C6D71EBD', 'cip336': '4F6E01D8A2437547B50E070498BCD4F9', 'cip337': '4F80F4048084E1150AA6A36A6BB3D7EA', 'cip110': 'C007AEA2279ED965AD5F037359DE24C4', 'cip111': 'BE5FCBE21961382305B6EDBC74B6D73E', 'cip112': 'A95ADAA6A53D1BF0FA4E46EA5D1EE88C', 'cip113': 'D1031805010BBACD8BB316EFA437EC4A', 'cip114': '7B6A4380AF9337C902AA691243F6A2E6', 'cip115': 'BDEF751D35F3B8BC6A9AB61F6B04A94A', 'cip116': '51CFB9ED07D3628D0854C2E85FC4B866', 'cip117': '0CDA37833BE087D8B997A54D5CFBDCFD', 'cip118': '938D2E6F2149D1E0B6F8878D472F0469', 'cip119': '3857B0C25F235A22F347E0ACCD008FAD', 'msg164': '00000000000000000000000000000000', 'msg165': '00000000000000000000000000000000', 'msg166': '00000000000000000000000000000000', 'msg167': '00000000000000000000000000000000', 'msg160': '00000000000000000000000000000000', 'msg161': '00000000000000000000000000000000', 'msg162': '00000000000000000000000000000000', 'msg163': '00000000000000000000000000000000', 'msg168': '00000000000000000000000000000000', 'msg169': '00000000000000000000000000000000', 'msg366': '00000000000000000000000000020000', 'msg367': '00000000000000000000000000010000', 'msg364': '00000000000000000000000000080000', 'msg365': '00000000000000000000000000040000', 'msg362': '00000000000000000000000000200000', 'msg363': '00000000000000000000000000100000', 'msg360': '00000000000000000000000000800000', 'msg361': '00000000000000000000000000400000', 'msg368': '00000000000000000000000000008000', 'msg369': '00000000000000000000000000004000', 'cip204': 'AAB1879D98592963B8F90C8F06804207', 'cip205': 'E221625345B6E73DD09235C7A3957CA3', 'cip206': '02B055320E02DA991986BB53A1CC69B9', 'cip207': 'FCA1B117007B2C06165E3D773CCEB0C9', 'cip200': '3CF2E1206969ED3A85E28EFA16162E53', 'cip201': '801DB46F97025BB099F7755595C532E3', 'cip202': '4322F95A6D70B9D4F53B733505A11D79', 'cip203': 'D1A200ED8E473284B70EB16E93B55ECD', 'cip208': '73C96C4F08BC5F9725CD2F719402DF4B', 'cip209': '488AF3D7E9223041C2C26AB496BBF0E5', 'key593': 'D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1', 'key592': 'D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0', 'key591': 'CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF', 'key590': 'CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE', 'key597': 'D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5', 'key596': 'D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4', 'key595': 'D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3', 'key594': 'D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2', 'key599': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'key598': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'key117': '0000000000000000000000000000040000000000000000000000000000000000', 'key116': '0000000000000000000000000000080000000000000000000000000000000000', 'key115': '0000000000000000000000000000100000000000000000000000000000000000', 'key114': '0000000000000000000000000000200000000000000000000000000000000000', 'key113': '0000000000000000000000000000400000000000000000000000000000000000', 'key112': '0000000000000000000000000000800000000000000000000000000000000000', 'key111': '0000000000000000000000000001000000000000000000000000000000000000', 'key110': '0000000000000000000000000002000000000000000000000000000000000000', 'key119': '0000000000000000000000000000010000000000000000000000000000000000', 'key118': '0000000000000000000000000000020000000000000000000000000000000000', 'key379': '0000000000000000000000000000000000000000000000000000000000000000', 'key378': '0000000000000000000000000000000000000000000000000000000000000000', 'key377': '0000000000000000000000000000000000000000000000000000000000000000', 'key376': '0000000000000000000000000000000000000000000000000000000000000000', 'key375': '0000000000000000000000000000000000000000000000000000000000000000', 'key374': '0000000000000000000000000000000000000000000000000000000000000000', 'key373': '0000000000000000000000000000000000000000000000000000000000000000', 'key372': '0000000000000000000000000000000000000000000000000000000000000000', 'key371': '0000000000000000000000000000000000000000000000000000000000000000', 'key370': '0000000000000000000000000000000000000000000000000000000000000000', 'key203': '0000000000000000000000000000000000000000000000000010000000000000', 'key202': '0000000000000000000000000000000000000000000000000020000000000000', 'key201': '0000000000000000000000000000000000000000000000000040000000000000', 'key200': '0000000000000000000000000000000000000000000000000080000000000000', 'key207': '0000000000000000000000000000000000000000000000000001000000000000', 'key206': '0000000000000000000000000000000000000000000000000002000000000000', 'key205': '0000000000000000000000000000000000000000000000000004000000000000', 'key204': '0000000000000000000000000000000000000000000000000008000000000000', 'key209': '0000000000000000000000000000000000000000000000000000400000000000', 'key208': '0000000000000000000000000000000000000000000000000000800000000000', 'cip501': '2EC93D1C3D32C757FEBA960A4BD738EE', 'cip500': '4628C6CF99872B4918A114BBDD5E93CF', 'cip507': '2A5688CFD4BFF712C47394F0607DE6B9', 'cip506': '0FEF945E46A16AA6877CD9B4B6B5ACE4', 'cip505': 'FC6BD18F64FF6DB8635C4964DAE51FDF', 'cip504': 'E7A5B502A965F15E558D7D81B554CB0E', 'msg421': '25252525252525252525252525252525', 'msg420': '24242424242424242424242424242424', 'msg423': '27272727272727272727272727272727', 'msg422': '26262626262626262626262626262626', 'msg425': '29292929292929292929292929292929', 'msg424': '28282828282828282828282828282828', 'msg427': '2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B', 'msg426': '2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A', 'msg429': '2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D', 'msg428': '2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C', 'key549': 'A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5', 'key22': '0000020000000000000000000000000000000000000000000000000000000000', 'key23': '0000010000000000000000000000000000000000000000000000000000000000', 'key20': '0000080000000000000000000000000000000000000000000000000000000000', 'key21': '0000040000000000000000000000000000000000000000000000000000000000', 'key26': '0000002000000000000000000000000000000000000000000000000000000000', 'key27': '0000001000000000000000000000000000000000000000000000000000000000', 'key24': '0000008000000000000000000000000000000000000000000000000000000000', 'key25': '0000004000000000000000000000000000000000000000000000000000000000', 'key28': '0000000800000000000000000000000000000000000000000000000000000000', 'key29': '0000000400000000000000000000000000000000000000000000000000000000', 'msg399': '0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F', 'msg398': '0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E', 'msg393': '09090909090909090909090909090909', 'msg392': '08080808080808080808080808080808', 'msg391': '07070707070707070707070707070707', 'msg390': '06060606060606060606060606060606', 'msg397': '0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D', 'msg396': '0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C', 'msg395': '0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B', 'msg394': '0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A', 'msg559': 'AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF', 'msg558': 'AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE', 'msg555': 'ABABABABABABABABABABABABABABABAB', 'msg554': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'msg557': 'ADADADADADADADADADADADADADADADAD', 'msg556': 'ACACACACACACACACACACACACACACACAC', 'msg551': 'A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7', 'msg550': 'A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6', 'msg553': 'A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9', 'msg552': 'A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8', 'cip439': 'DB70003BB09D767E4FDB5A0ED4F64513', 'cip438': '37FADA450DEE930DFB872F3FC4D5297D', 'cip433': 'BA24DB4B5C6B13B9989BC214A6F4671E', 'cip432': 'EF176E7363132B266238EF91C4256886', 'cip431': '22F4452CA000F6E458B867214C85ADB9', 'cip430': '5AF35F729233B7548DDECE1B9BC8E927', 'cip437': 'C8B25B4F2A9D701EFFC516F3CA57017D', 'cip436': '33603C4963593BA961212BF400D86FE6', 'cip435': '6CB5F3429037AB55423408D1F0E0F8D6', 'cip434': 'C2F547C0FB7064F6621EF7226398D940', 'cip327': '645F0F938A2898A3869190A1D99A3078', 'cip326': '983F654090C661264BE8F921063B7DE5', 'cip325': '8FA78734E057E8A9486862E00A9886D8', 'cip324': '237AE2CDD5D2819EDAE0947AFB9D040F', 'cip323': '9721099476B1F963EF87DD29E82227F8', 'cip322': '0D2638505AAE1A5532D74C4F45C136D3', 'cip321': 'FA9CAF3BBC2D52806EF9B3D01F5B8398', 'cip320': '645D7562E523058E7708FF03F1712BE8', 'cip329': 'B4ED85D72C04A357958D7045BE13C4FF', 'cip328': 'F8958250D6D6772B20051E36666906BD', 'cip109': '49A3F4514E983616F55580EA4EA12DBF', 'cip108': 'AB8301BFFFF3B24A3CE63F553443F2C7', 'cip107': '0FF47C9330A69D2B5C52434394A2D1CA', 'cip106': '510B105E4809B4115C999AB346D21570', 'cip105': '0F5E7BF2A2590F7A65D17DAA4E828F7D', 'cip104': '3BAADE8819E09549CDA6AA160F4C626A', 'cip103': '735E7FB4B1B2D54C6D33E3D0C714BFA0', 'cip102': '8A1D4467260F12AB493334133D5928DD', 'cip101': '97823D74887FBE3E6B412407A256A018', 'cip100': 'E42C18F2B56A0E536E4908F84DE06419', 'msg173': '00000000000000000000000000000000', 'msg172': '00000000000000000000000000000000', 'msg171': '00000000000000000000000000000000', 'msg170': '00000000000000000000000000000000', 'msg177': '00000000000000000000000000000000', 'msg176': '00000000000000000000000000000000', 'msg175': '00000000000000000000000000000000', 'msg174': '00000000000000000000000000000000', 'msg179': '00000000000000000000000000000000', 'msg178': '00000000000000000000000000000000', 'msg375': '00000000000000000000000000000100', 'msg374': '00000000000000000000000000000200', 'msg377': '00000000000000000000000000000040', 'msg376': '00000000000000000000000000000080', 'msg371': '00000000000000000000000000001000', 'msg370': '00000000000000000000000000002000', 'msg373': '00000000000000000000000000000400', 'msg372': '00000000000000000000000000000800', 'msg379': '00000000000000000000000000000010', 'msg378': '00000000000000000000000000000020', 'cip213': '07B3D3BB79520764234D247A7A0036C2', 'cip212': '845416D12195B8FC18F299AD41D8F569', 'cip211': 'C38D3776A560BBC5453E96C1587B0E59', 'cip210': 'CD5038A80ECEC3424E1E9614CD3267DD', 'cip217': '965A8653210830C831353A28CBBFD16C', 'cip216': 'DFDB243581A8D3DA8A3F268AA8E6207E', 'cip215': 'CC547CD2016122227D7CE3B4BFBE3EAF', 'cip214': 'BD6816944B3A1353229B02907CD0E87C', 'cip219': 'B261BC4E7FAE6629FC5F5D588E417CAF', 'cip218': 'E3442D2FC126CC50AB364E09A0872B18', 'msg599': 'D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7', 'msg598': 'D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6', 'msg86': '00000000000000000000000000000000', 'cip375': 'D2FE26FC85AA40C3C6827B0DFF96AB0C', 'cip376': '2055DEA7C84B008C6FAEB4B192795ADA', 'cip377': 'CB98F1C490F33B4F7A3D3E821B3551F3', 'cip370': '576807DCB0F1A8D73904DBAA84BE818E', 'cip371': '96DD8A88157832B7E45C639C25170333', 'cip372': '9C1A7B580B29888F397743E76C4E7A39', 'msg81': '00000000000000000000000000000000', 'key568': 'B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8', 'key569': 'B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9', 'key566': 'B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6', 'key567': 'B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7', 'key564': 'B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4', 'key565': 'B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5', 'key562': 'B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2', 'key563': 'B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3', 'key560': 'B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0', 'key561': 'B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1', 'key162': '0000000000000000000000000000000000000000200000000000000000000000', 'key163': '0000000000000000000000000000000000000000100000000000000000000000', 'key160': '0000000000000000000000000000000000000000800000000000000000000000', 'key161': '0000000000000000000000000000000000000000400000000000000000000000', 'key166': '0000000000000000000000000000000000000000020000000000000000000000', 'key167': '0000000000000000000000000000000000000000010000000000000000000000', 'key164': '0000000000000000000000000000000000000000080000000000000000000000', 'key165': '0000000000000000000000000000000000000000040000000000000000000000', 'key168': '0000000000000000000000000000000000000000008000000000000000000000', 'key169': '0000000000000000000000000000000000000000004000000000000000000000', 'key308': '0000000000000000000000000000000000000000000000000000000000000000', 'key309': '0000000000000000000000000000000000000000000000000000000000000000', 'key302': '0000000000000000000000000000000000000000000000000000000000000000', 'key303': '0000000000000000000000000000000000000000000000000000000000000000', 'key300': '0000000000000000000000000000000000000000000000000000000000000000', 'key301': '0000000000000000000000000000000000000000000000000000000000000000', 'key306': '0000000000000000000000000000000000000000000000000000000000000000', 'key307': '0000000000000000000000000000000000000000000000000000000000000000', 'key304': '0000000000000000000000000000000000000000000000000000000000000000', 'key305': '0000000000000000000000000000000000000000000000000000000000000000', 'key416': '2020202020202020202020202020202020202020202020202020202020202020', 'key417': '2121212121212121212121212121212121212121212121212121212121212121', 'key414': '1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E', 'key415': '1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F', 'key412': '1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C', 'key413': '1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D', 'key410': '1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A', 'key411': '1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B', 'key418': '2222222222222222222222222222222222222222222222222222222222222222', 'key419': '2323232323232323232323232323232323232323232323232323232323232323'}
 
# CMAC
# test vectors from: http://csrc.nist.gov/groups/STM/cavp/documents/mac/cmactestvectors.zip
dict_cmac_aes128 = {'mac121': '7696', 'mac115': 'ffe397c84431d057b1e245ec69987e0d', 'mac126': '99de', 'mac114': '1c219defb5b2b9502e07144bb6587a0f', 'mac127': 'f8b8', 'mac124': '04ae', 'key19': '7b7f4f38a45af7d260c70faca9a38f30', 'key18': 'e7555cc2cceb0ca0b2fdc4ebb48e8e5a', 'key17': '3c42fd18d4a7878a8c9aa29f5a459ff3', 'key16': '539c78eed9e25d57950a0e0b6900147b', 'key15': 'cb9fbd84fba13db2a837e4bad32bea4a', 'key14': 'aa6257104cd33dee3ca13038376be718', 'key13': '5c458b6ba695580aef827838fdcd77de', 'key12': 'c5511a28b129f897868594f229c4a0b3', 'key11': 'bb8a182e9f653605c33b2bfc97cf8301', 'key10': '3e7cd53f8c35f72c0e1376a7fa7ee683', 'mac57': 'ec23c3b4cd5a9859', 'mac56': 'ecdb7d8577c056e2', 'mac55': '9f4e', 'mac54': '719b', 'mac53': '72b6', 'mac52': '38e0', 'mac51': '995b', 'mac50': '2bb2', 'mac59': '006c879091fe8b6a', 'mac58': 'd5f4799d6fbf880b', 'key119': '97b665a3bbe8344ac60755a5bb590fae', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '36ebc5f80716a961d4d91d0df63dd66d', 'key81': '5cd57cc4e681dac1e5e0ee38ad42d49e', 'key82': 'b0d2d0572d98046547c54f544b7f09a9', 'key83': '336d81f2c83ab2cb2e6d2a73482c01ef', 'key84': 'a05d8ac6fa1451e9688af142ee7fb936', 'key85': '154037569ecb688fd1d69855c27a8637', 'key86': '8f6513e68a378ee09950b46276d02e43', 'key87': '2ac17b41c0c07b89520bd40e51a09d5a', 'key88': 'c68ceb632d6d45a2d0a869f6d4dc4c13', 'key89': '93da7f56f2690f2732c7d577a1a11a74', 'taglength141': 16, 'taglength140': 16, 'taglength143': 16, 'taglength142': 16, 'msg60': '45e188912e1e2ae1da83008e85ab4ba49ba4ee4e28997c9c8fae9683802c7426', 'msg33': 'e36bf563a627f218c64f2ba1cc9398e7', 'msg62': 'd9fa0ca0f66f84f9f0b55ac3f1dbaeaeb639cee3955e5898be4a9fe2c1de50cb', 'msg63': '2783f4befba7ebf63f57a5abbd46db3ea102b3d0daca42b2c39f501d039d5c24', 'taglength18': 16, 'taglength19': 16, 'msg66': '79e5d5d51684db60e410974fe9c65f763eb02bb9c082eb1709c21ee89f2ba062', 'msg67': '6ce53aacf28026f14b3cd8687e1a1d3b60a81e80fcd1e2b038f9145ab64a0718', 'taglength14': 8, 'taglength15': 8, 'taglength16': 16, 'taglength17': 16, 'taglength10': 8, 'taglength11': 8, 'taglength12': 8, 'taglength13': 8, 'msg30': 'c45500960266b3140524637f9548be5f', 'key139': '5e7b763eab4a2cf734d173cfe26320db', 'key138': 'd62c9baa530654e8a62ebe45fb2c0db9', 'key135': '3d21214cb56b65545e69c085487a635a', 'msg37': '5a307b64bf1ca753d7645fbc2a01097a', 'key137': '638867d1b0300963d28034cc1e4c0405', 'key136': '45beb88bf96d89beb09d3c1e6a1df391', 'key131': '73b8086b3d07590024990afb4f0f0822', 'key130': '1b5ba42152b5dbe6feff52c7ca892245', 'key133': '705f8c84d0412156e989d2eb6e6c0cd0', 'msg36': '1e073f31387ecbfadadf1510fd8d0788', 'msg35': '301018b7a89cde6bb5321bf2ade7680a', 'msg34': '4c4347b46eec61669dd3925e5318cbdc', 'msg39': 'ca706c60b64f266b314d1df09d575a6c', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '31083e1bf64528be2e74544d84a56475420f814e6ea79d8c39f1fbf99b16f2233738ee518402b7bc', 'msg114': '59c652257697a328d296af29a0f76a9d917926e0a5ec07d440f0b7cc80ff5ca8ceaec741b32fee07', 'mac99': 'e666', 'mac98': '0a57', 'msg111': 'd4c65fb409ff69b4ebf5fce5dfc2d4deb05c23da3c74e4bc6d9e6c506bb342d4107330b79d6f9aa0', 'msg110': '0efa6e9de0581b81b1ad0351e7585b7eff712a05d2ffaa44176bf10b2a35d0f70ce6fcfbaa466b40', 'msg113': 'd4545dd90e24afdc5e6985ad2d76306cea8d4276510bf037eddfbb3fdb405097d2a0ac5560db836e', 'msg112': '680c489364c93e5d3ae74471c72329337295bd02a74ae205872fe528dd300e6154a27538e8de1886', 'mac93': 'a02493f7dbab542b594b70ce81f7e392', 'mac92': 'c02b8dd46c2e1da34dff0feb9f933330', 'mac91': 'fe23a520676c915a56611f5b413b1c92', 'mac90': '07df5e916c520fc3ad57f2b7c89ea4e6', 'mac97': '4bc5', 'mac96': '2100', 'mac95': 'e525bacfd0c7c118a983f431b1c6c027', 'mac94': 'a6b84ca5bfe108b8c305ccf0e358e10b', 'key44': '3c45ea6c87802440c9c47b1015e83d86', 'key45': 'f3bc72cf2ce9a54ac063d809b523f4e5', 'key46': 'ca5d0bc191bc17629e004a0d0aaf9f25', 'key47': 'f8612e5dfebffc7955facbc970c555ad', 'key40': '5f45469851067ccb779ddc7c352d0d81', 'key41': '19e7edfe0e05de86a8e281302ffd6817', 'key42': '03ef069df488327694669b6f49a7f934', 'key43': '5777652205fc64b2e7d5981dd2d8889c', 'msg99': 'de1a5fd321e8706e21b2eea2bf6c4d1ebe53252c122393855a8bdd6aabde54f08f0b7f9c4dcf752f', 'mac119': '92244082383183f4c11004c7c987e503', 'mac118': '07dfd21a66876d9345951a824fb44664', 'key48': '8938467bb1bb0c80dad9270ddc19d7ef', 'key49': '23da4ce250a63970e661cf99ee03f82d', 'msg98': 'c68af82ff1a608134dbe7cbf711c4ae2a2ff80e4f635851cb8eca1430fc6bf28db2b72a6e0e337d3', 'msg95': '2eccb2b2ce90b6f35c351b05a22c227217dd', 'msg94': '5d0f5ac54c50a9de324ee1e64f9764843fab', 'taglength109': 8, 'taglength108': 8, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 8, 'taglength104': 8, 'taglength107': 8, 'taglength106': 8, 'msg32': '6755dfb390e25c0c555dce4d091c4029', 'taglength65': 16, 'taglength64': 16, 'taglength67': 16, 'taglength66': 16, 'taglength61': 8, 'taglength60': 8, 'taglength63': 8, 'taglength62': 8, 'msg51': 'b60a25c09ea49ec198fff3c8a99afb66eeae5bb9df60ef3cd53a6ce3cadc4368', 'msg50': 'eaf28381664c4702bfef97a3698a3aa1fc6720b89540eb977953af91fcb8f695', 'msg53': 'f6c7b5fa70e9e107d943536cb0e825f26ffa43df111a1410d0245d48331962c8', 'msg52': 'b2a23a676d65523ed2c1e0eef20e2bb7e0a96fed71a1cb4c3fb35a8cf479a135', 'taglength69': 16, 'taglength68': 16, 'msg57': 'be0b4a889119c950a6d1f609ff82f5120930cd2d1536763b0b2f34475d1723c6', 'msg56': '56292b66dc3667c5c6a4dc71ecfabe57d3bb5c20d1f35d63720f49191bf14c52', 'msg31': 'd2e49304a3a00cd2ccab9769a58bf889', 'mac125': 'fe7d', 'mac40': '1b7882ba9db374988699d98cf9b9d89a', 'mac41': 'd2ecaca30e18ee6ce90349340d21f20b', 'mac42': '29f38728b3be2e3dd51e7ae226a2e92c', 'mac43': 'd5b8c8c98bbd49d6843503683adb1cdf', 'mac44': 'd1224f99472dd7fae10078a924f7ef30', 'mac45': '9f61e6959a49962804713275648a73a7', 'mac46': '56b26adff25389380bca12d91be39d05', 'mac47': 'a3ddcbfcd2f6d58d5ea03726a526275d', 'mac48': '57c4', 'mac49': 'd8d5', 'mac101': '4239', 'mac128': 'f32bce2795a2697f', 'mac129': '3780a0888981ad43', 'key79': '43b917f0fdbfab80a9e2094ec6393f42', 'key78': 'a89987b0cb6aabbb7f0ad36b3e9fdf29', 'key75': '7cb53a0ba910cabfa4160a428f3a382d', 'key74': '1c57b1f3f19be0b6f5df5aaf0ecb3c5c', 'key77': 'eb3ad7daf3310b3055176f012fe91dcc', 'key76': 'fff437b8479528ad56df255e80e5c993', 'key71': '200be1cc352ba938e09a48e0a072bbd6', 'key70': '62d3f22af2bea501e9aca0fd69083775', 'key73': 'ed7e3ddfcc3c32a9ae146eed3aa46364', 'key72': '3250974e306b4b678f914b514d1e90f6', 'mac35': 'b6f9716cca768a47', 'mac34': '1a16cfcac5b35f3f', 'mac37': '90d1e6bc30fd60e2', 'mac36': '980380e8c875cd23', 'mac31': 'e008', 'mac30': '7cdd', 'mac33': 'f27bddce63e8173c', 'mac32': 'd3c6096edccc95e7', 'mac39': 'd3d010ac9574b79b', 'mac38': '0747178ec7197d01', 'taglength130': 8, 'taglength131': 8, 'taglength132': 8, 'taglength133': 8, 'taglength134': 8, 'taglength135': 8, 'taglength136': 16, 'taglength137': 16, 'taglength138': 16, 'taglength139': 16, 'taglength21': 16, 'taglength20': 16, 'taglength23': 16, 'taglength22': 16, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': '9916c00c3ca104da47615d3d135d8e7c1e28abeeb0fbd9b2be06559f0e08b87e9c1e79773dd8b3ca', 'msg96': '7d4ec02e47c326e3aa4eaa2a9f5230254bb516852f400f089f492f3f758f42950665628d5513c94b', 'msg91': 'bcc6ea691aa983100c5f000142e72f6298ba', 'msg90': '0ddd7e19c0991343cd100f6a432c86e66a1f', 'msg93': '6b5b2fb54d76ddf9e0e847b8ed25a7959a89', 'msg92': 'ebbb53e1e7b5d9357c87f56f6157428f2abe', 'key108': '9252679963d4441dc428261d196ec149', 'key109': 'e5800b453ae20349a86263c4a17b4ea1', 'key100': 'f7a6d92e52acbed1ac1271529e1de959', 'key101': 'a00b64bdf923faa583fa5243f4016da6', 'key102': '7e8a8c893a19d315afb26b69a24d78e7', 'key103': '216795ba3148fab1167908e3ac7422b7', 'key104': '39a9c2a81272a77e4307b339bae976f6', 'key105': '91d7d0f40b31aed828c284fd077f83a0', 'key106': '602a057cf22d163c18d12e2fd126ea07', 'key107': '169ceb449ae8b90807b55858ce7ced18', 'mac132': 'aa7eee0865e76e8d', 'taglength122': 2, 'mac84': '9e82fb6a1324733c', 'mac85': 'd4f1401cc899d579', 'mac86': '7ef9765cfe7ab74e', 'mac87': '924cfe0505ee1c64', 'mac80': '65cba8e051b617c3', 'mac81': 'fb05ac32ffe3837f', 'mac82': 'b5b7950dffc75a2c', 'mac83': '9819a8ca1705a80a', 'mac88': 'e7ba99a1c730efedb8979a7647385db9', 'mac89': '709a98b297f18ee329f63fd4b0a1698c', 'msg120': '3c53659e5bd778cbdd737f663b0cd921f083fa702c92be8fccf7fdc68ad560ec7157732a9596fb0100bd898eef', 'msg121': '55f24093d78194d88155e0da0764155a749844ae1422a7b99112e51a5c2492a44eddf50e90d70fecb85ad8de34', 'msg122': 'ac4423c58ce0dc2fd5b68bd317a5dfb519e878031e474cee688e4ab8fb3f3e0ea384f5993867a1d021457e1017', 'msg123': 'ac37a2ad55eda66b027d7d98a261c332d2170f400b81cc591a8c4465d110fea8fdf74afc98a21a5d3f8813abe6', 'msg124': '537c96377d5c188a2f832ded62143db2710d1fe87d1c97d210b51c980061de3b975907cef05341e4a49c7945a7', 'msg125': '485fc6bdbfb8c1fcb5f9d38330a0d8cc8b2d998d761df1483e1c2f1d4f77bce4f7d0fe786c157b5511b34266f5', 'msg126': '12a4109229bdecce4b18d07e687bbfa8402f2b096dfa17a9a44d79b338bde284dfb76002b970a42f8e1c60fe58', 'msg127': '74f7cddaf413e39af0a7cc365de8b5b3723c3cce515031a7e96499b71beaf9071b50d1a41a1a664e2233c47041', 'msg128': '47c54d5b31e1a58b39425b2670c2a811788de0dfe9ebf845f25a45ce44e086d02b9f259ffeaaba00ba17d1e1ea', 'msg129': '0b3d6427ea719b513e344f7b2b6fd96ee2df0f7414bb5e1aac981a33bd8b1120b98d664fe5239d02093ef2526c', 'mac7': '0360', 'mac6': '5f9c', 'mac5': 'cce4', 'mac4': '078e', 'mac3': 'e354', 'mac2': '0d9b', 'mac1': '71b9', 'mac0': 'e727', 'mac9': 'd806ab38af2b3f92', 'mac8': '30c4e22b86fca233', 'key31': '5d2f3697453a0c72d94ab81f0864bb66', 'key30': '56fad4630ff6b0a50afa00e20d09cada', 'key33': 'b7923c7c2d3a69cb079fa32330cd5592', 'key32': 'b3cca41d617aae07ca0cd92abd5f9ce9', 'key35': '2b0bc1ce876c7b466b1d98a37abf82b7', 'key34': '85831c87d0c62437aea943c19891d85b', 'key37': '7aa5117214d3d4850c98c05328f2e975', 'key36': 'e8b010b5a3b59d7862a77a0c67921083', 'key39': '56253e13295dcb10887a03ff315721c4', 'key38': 'b7a791508d94b5631cd7633d2536110a', 'msg59': 'afe33ebd3cb6957fdd5d40e1d464a775f8967df7aa1c508a0be95e446d55abed', 'msg58': 'f84dd3a33cc8cfa8813801cb2d3d194d84d6a8cdc228d523677b518dd3868d09', 'mac79': '96f5', 'mac78': '4892', 'mac71': 'd0fe3716e4ba9a0521ca7fc4604adea1', 'mac70': 'eb23ea749675df0e92ca4e2d368dccdc', 'mac73': 'ef4a', 'mac72': '4e3d', 'mac75': 'cb9c', 'mac74': 'd9c3', 'mac77': '1325', 'mac76': '80c8', 'msg61': 'd87d82c2885770c5589ad64dd52a548a38eb8da1ea35d1b64782fa4aa36a93c8', 'msg64': '0b6ac8f0a13cd483fe2949b4019db07132156539613256d38a0b0841fcc8dbf0', 'msg65': '4b4b205120431713249259027c5bcf71ffa5b0c93e54a623c1582d1594243ccb', 'msg55': 'deb9c47ead3ca6d7e7fe5332ede8e3db2bc6bf23fa9da958c53ffdf46b1c3615', 'key140': 'fbae224bada35e867912e0d83406d1de', 'key141': '6fe7e913b366c8a0d00d1e02be3ed058', 'key142': 'c09ee3680bfc4ddcdc409ddc47fea251', 'msg54': 'b1289dddb326dbbf77d035e991006d26690bd69083f4b56103e0ed0570cadc74', 'msg68': '197acbab02cafcf2dc6acfa19a15636af03cb36b5afabeba614ae5411a7894cc', 'msg69': '12842ee1a8e4e8605f5de4800791042837ca3e06334a9f8413dc90f822af591b', 'taglength87': 8, 'taglength86': 8, 'taglength85': 8, 'taglength84': 8, 'taglength83': 8, 'taglength82': 8, 'taglength81': 8, 'taglength80': 8, 'taglength89': 16, 'taglength88': 16, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 16, 'taglength71': 16, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': '04d3d147803a4ef939e50bccdddcba4041b07e7849c6f33409f26fff294787aa', 'msg49': '933f06ff18ee7674aba548592dc8214b1af8e929242f87c81b0cebe8106b5267', 'msg42': '1b6b128d3b81ae600f623873fa71dc5a', 'msg43': '3465a7503b36bbbf2de46faf79e8e212', 'msg40': '3eba9aae434181c6da2138e208579314', 'msg41': 'e54fbb2daaeb6ec1250d8639b7abf554', 'msg46': '511b40b45e3f2a336cb42f39592f3ecb', 'msg47': 'afa5736efdbc6b0ccc9069e11e6e9645', 'msg44': '0f75044138fab1c64d13a571fa469927', 'msg45': '9af2f10ce29da51698468eed9ed251b1', 'key134': 'ccd3b51debe192b1f0d1fefaafff76cd', 'key132': 'a03027fc434918b7a995f8091951e233', 'taglength127': 2, 'msg117': 'dd70712afb052308caa271f3cd8c1bf8f0cf8f241a8414ea055049c44e2dce1dc86d416f16fc6ca9', 'taglength126': 2, 'msg116': '53aed98efe756c602857e1eefba9cfc2e9e357c740eb59aefe96e891e66cfcd6d3ab67574d8f0bbf', 'mac140': '73da51a8a3be4b09349cc9cdd4a97393', 'mac141': 'a15a44e9f1b0357656222ddd22a24b7f', 'mac142': '15cd20b2fedfff132a06e006ffa65352', 'mac143': 'dbf63fd93c4296609e2d66bf79251cb5', 'mac139': 'ce0c9fd405e2ca122b5da89650765a51', 'mac138': 'f594db071c2c0293675936692575b9f6', 'key68': 'ca82ce00dbe23574c49bf0d32fff14b3', 'key69': 'ccd3b51debe192b1f0d1fefaafff76cd', 'key66': 'e04e5772ebd607cce417fc024142f5ea', 'key67': '47c354466e2bc82272975a2a65e44341', 'key64': '6a413946f16db223c4f654cd54d737ce', 'key65': 'ceb77be7eea50e5a509059929a16d33a', 'key62': 'f86bbc40faeaf5aea649eccd82496ffd', 'key63': '366a420bb0f5f924efde8dba75af32c2', 'key60': '210ae1d20fd9eb985a653d004674d61f', 'key61': 'e4c8a36a41a861583da3e2bf897680e0', 'mac26': '9ed3', 'mac27': '31bd', 'mac24': '9186', 'mac25': '309c', 'mac22': 'dc3a87716fbddbb6f206dd4324e19519', 'mac23': 'd8b2b5da22eefd471fceec695ca661c8', 'mac20': '14069fe111904d6f75f65732494e3d48', 'mac21': '247d0d64219d8c28b726725f2431ab6f', 'mac28': '6d9c', 'mac29': '20da', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 8, 'taglength128': 8, 'taglength8': 8, 'taglength9': 8, 'taglength36': 8, 'taglength37': 8, 'taglength34': 8, 'taglength35': 8, 'taglength32': 8, 'taglength33': 8, 'taglength30': 2, 'taglength31': 2, 'msg86': '3fb0cdd87c764c2b56ad8fe7d65272065f48', 'msg87': '00ea6ae280c9f311d26b7d644ee0a984424a', 'msg84': '0d7eddd810a426145a0776f67c87827366e4', 'msg85': '5b7bc1ebad1a67b176ab2e31ad1ed38efd3d', 'msg82': 'c260d3467773462a538d2b1fc96827c453a1', 'msg83': 'd4c2726630d40e5d27951992cb215294001a', 'msg80': '194788595b5fe97c5d6110c0a782eda3ced4', 'taglength39': 8, 'taglength43': 16, 'taglength42': 16, 'taglength41': 16, 'taglength40': 16, 'taglength47': 16, 'taglength46': 16, 'taglength45': 16, 'taglength44': 16, 'taglength49': 2, 'msg38': '1625fd1ac7e2a3d9b7cafece0790c85c', 'mac133': 'dc9296f21e1ef5e6', 'key9': '850f208d5dda093866dde04e8e639888', 'key8': 'ab8cbbeb92a73a3d69f709ceffa010f4', 'key3': '5a220032ebc553c7c3b55b6604dc6ddf', 'key2': '3210d3e5530c022c3d4e7e36e548fead', 'key1': 'ba165b2bd3c698cc285f46a053246535', 'key0': 'cc44c4bed047cf9a80a892dc5987fdc4', 'key7': '02026d17c75ca0f9f2a98df8de6bfcd1', 'key6': 'c4173b274b5a297a3917a144876f10cd', 'key5': 'e7241285e936d691fb9e0606cdd97d63', 'key4': 'cd0206413033a9f767bbc5c4e6d306ab', 'mac137': '61d7fbc0bdf1ff30eff5a85292c89d6c', 'mac136': '86e01def3f8d54f99d0b2ae23ca88f3f', 'msg139': 'aca5bd1bff8ca6c60f6a2543e82948f8ac75de0c36cd361bfcda2a2e3a005cea4d34c0075c0d5b043e1d4a1998', 'msg138': 'b5110542b39736a6de49c45120fc7ee269717835f3846537cba548f98d8c4c036e29efea80da662532e13d1c16', 'msg137': '693c92d0477f746bf2460256aed73a2904aa882e65778d1610941fea367e91445bb634beffce1dab7ec3290535', 'msg136': '4b88f286c1da23bff4eb38e781705f889d5c16375a0c906827c25a8796553e446327682eb156c7839637b646da', 'msg135': 'c07d0d779a018a217a04da69374eaf0e204ade5aeb1ffe5fee1c328192594334049bf2072d798ce2e5bdbe8b63', 'msg134': '12842ee1a8e4e8605f5de4800791042837ca3e06334a9f8413dc90f822af591b8564e3bd1d66c2b7ae7a722040', 'msg133': 'f1c84479c748f8009401ab8b434141027044d999cd055048c553077c5f27e70c6435a26ec4c13b2b36b4c8901f', 'msg132': '3969041ebe02ff1d3684fae3fb30484c0a5dec18b862f7eca0b6119be05655a4856762fc431dae0d6adb1efe15', 'msg131': '36883189f606c00258b08c8273d9ec10f8f5d2ecff51abdb060286bf361c796ae92440b46ac728cbfbcb2ccb1d', 'msg130': '6efb4aaefe4c9649e98ffcc6abe46f5679377a6ecbb7ded518897dfce0bd768df0819246e294df08e3fe9a2bb9', 'key22': '788b1b02b7cba9afefa5cd688fa479ae', 'key23': '08cbadf8f1661b33f58194a643dde8b0', 'key20': '54a9f32687e6f342238307803527cc5e', 'key21': '0801dd9e4baaca5fb2b52bf9f113fb0a', 'key26': '608f8c2519b27d8890afa0115e4df1dd', 'key27': 'e8af17962ba43e51a7678ed20fb07422', 'key24': '1416cda1a9b60cc6da8ba019f82a1405', 'key25': '66a9f8f0cd9bf0dfbcd85b83665c8eeb', 'key28': '9a6106932a9fc438e6a82cb3967a5890', 'key29': '8a8199ce63f28f4ff736094cfc759fd1', 'mac68': 'edafee89867a5ded78476d99aba22a7c', 'mac69': 'fa8ff66477470969ff07206fb2bb6892', 'mac62': '66bf4c569e632aee', 'mac63': '2428182c15daa5da', 'mac60': '9d5854114d10b14d', 'mac61': '968eed443de5f590', 'mac66': 'c390b054064e16e25a33345129fc0a92', 'mac67': '19c074aff4eb5af8f8d8ffd2cbc2b7e9', 'mac64': 'e732e0cd22060cf3fb0093834d17478c', 'mac65': '11e2662a6d69d96744762417610fc730', 'key97': 'd648910efbb3fcffce8bc7f1477646ef', 'key96': '4f377bea5b7bae890df5d4a26d18e15e', 'key95': '766c7e1db0d440210103890750570c42', 'key94': '22de3f10b1c034a0ee80c6b1abc2de16', 'key93': '2f74a540560fe59172d0a299e22bd37f', 'key92': 'c4647bc2fc0fc6419f0872b5156a3fb1', 'key91': '23ebba485fc4ca8b7cf9c02677e896f9', 'key90': 'f83c653d2caa3e8eea9f103ea4577b81', 'key99': '63ab37dcbf8eebe67631ed5bdfdb7860', 'key98': '4ee8480fbaa4527630842cbb30577ab8', 'msg28': '8b5ec3e8a7524e538890311738cae21f', 'msg29': '5ff513c96589a3758ec21ed44471dd6b', 'taglength94': 16, 'taglength95': 16, 'taglength96': 2, 'taglength97': 2, 'taglength90': 16, 'taglength91': 16, 'taglength92': 16, 'taglength93': 16, 'taglength98': 2, 'taglength99': 2, 'msg24': 'f223f96c9e1389d844ab61adf546c42b', 'taglength59': 8, 'msg77': '84e7a9117e3a2b5c6b47ca68cdd643d05d0a', 'msg76': 'fed74e14afc5c048b703463d84d7589af33c', 'msg75': 'ff1320502b0a0d5301261b412fef04fae762', 'msg74': 'ca044a08cf670378eb0a7742626d39778bd7', 'msg73': '2c63896dab5e7168dd9d76537220674d5b24', 'msg72': 'cf132fd4ebc25fd3866f1a95a6193a1a9cdf', 'msg71': '62c77113bbcb6f3d167392c3f4c41bf33e99c9a44097fac6f564143d851423f0', 'msg70': '22dd45f6135c16d9ad0bd095f9e15dfdd55627639676db51f2346d7a1e005cef', 'taglength121': 2, 'msg79': '3dfc582ce356a769f30e05fa7b0c8a2ed946', 'msg78': '4e5a4af0902d4fad37db981189a53971daa0', 'taglength120': 2, 'key128': '4eed2e7d0be10df3af24fa479cdb9863', 'key129': 'a5a1a51ed1503ea87eae35cc2f804d1b', 'key126': '2e4a3b8b62fa89c87a86aa5c18db614d', 'key127': 'd5e155236608948a07e7efcf780f44a5', 'key124': 'ae3b4a29da8a25824df7c42eee63db20', 'key125': '0a801cbe27e9dfbc999613af500451a0', 'key122': '56aba28d48cc95f1a8534d1a764b7f7c', 'key123': '323f2ae8204dba4cf9f85ac5c339f22a', 'key120': '1ca3f77404ec5eb51b5b3506eae6ea27', 'key121': '2f32f483c6d800a1e264fd0cbfb1a4a3', 'key110': 'f5d088b69a51f7db1c41064b310dc5e8', 'taglength125': 2, 'taglength124': 2, 'key117': 'c88e9acbee53e7515479af901400fe30', 'key116': '05ff2f3689c428b02de5e55fb0ef48ec', 'key115': 'eb38e3a0ddbc8d4259628dab26260052', 'key114': 'd189d93144e6da21d841cd814b6911c2', 'key113': '65a25d400d383439ee7327b6b79974cc', 'mac131': 'a1bcbc8600b77caa', 'key112': '94648a4c9674591f9e1c66283296911a', 'msg106': '6d515d05d86949e3927f7f17b9043e30abb3e367d3175f3ac34ee956830cf0ba29e3541aaac1d581', 'msg107': '25ddfa4436de9ac0f0661f1488258f014791925f3ad1c91b2ada607cced8e7aa40cf5d70ae828e41', 'msg104': '3baa77f536f42b65866202b74a2ca8fb21ff646835f340f378bc6a212d24da19abb935fd5dc2f17a', 'msg105': 'b6c773020e6db9d008934e3b8621cc8a7ec57700fee965686de3e2f1136c123cdc54d8b45874f71e', 'msg102': '081fc63c08ccf165d6c715fb471f51baf591c05a8ab7e7633b7c4f4392d3729d71a9dce554178a2a', 'msg88': '81164bc14e4b1e3669cb61597682e9000686', 'msg100': '416a230c0336cb327961de7d4ffcf9a2b77c90dc530eeade552a6d0de56b1cecc39e5ed72d1901f5', 'msg101': '20fe66958627144d52214e6bd44b03f38d70e49ce5a7bed72177070c8f3fb72703d55953876e6105', 'key111': '3cd4e1ab2a09872f7eadfaf4147d1a2d', 'msg89': '58dea00d9aa8cc28af78703fa13e8be6034f', 'msg108': 'def889e78a9aef123941204e55bf752494fffdf61f98c235f4a14ed588c86efeb19e3605c435459a', 'msg109': '1e1c940599d91692ef17d52af2f6c300d0772c3fdd309c599345fe9bd79301067e2ec05a100ea173', 'mac130': '3de1a0328cc2d41a', 'msg119': '650f7f93197316ccbbebd8454c817979b09b961e0fd13b9f7cfca8ccd48f55d1e92b3364e06d3543', 'msg118': '32ff657f44ee7111a7b58da95c6260e1e18bf81e56e30fc5e00a8dac4baa4ecff3bf2445e4362072', 'mac104': 'b4a97cd9ea6926d4', 'mac105': 'a2113f4296e103b7', 'mac106': 'd1c03aa930f25d22', 'mac107': '29192a662fd63eef', 'mac100': '17af', 'taglength38': 8, 'mac102': '36ad', 'mac103': '5152', 'msg81': 'ab4b0342c62633b5a135663de80546e83e3c', 'mac108': 'd912e4c34d85ced4', 'mac109': 'ab7a01c1c7f68a64', 'key59': 'b77354e54ac584255c58ad4081c41a2a', 'key58': 'a416a10e8fe1d6e8d2e4ae00edaa565c', 'key53': '97a5fd1d34b84309742f79ddda91d580', 'key52': '085b9871aa63fc10a61ff5e04b35e1d1', 'key51': '61b50a8d349b7efbc49ab5fb13fce1c5', 'key50': '99a6b26b573ac7f0b78ac85c6ad40785', 'key57': '6a205d7ad23190ee96c572b3420dfb35', 'key56': '8b3afac3fa8f4f08a369816cc55aeeab', 'key55': 'dd4f965eddc901d39d718fdabbc1df5f', 'key54': '01fad26de1a625b29e0f4f4bd5aafefa', 'mac13': '63c9b452c86e1259', 'mac12': 'af0ad711ef6d07c9', 'mac11': '006236d1e0b9eeb0', 'mac10': '7e6abd95ae093a85', 'mac17': '61482875cb4b71df01ee9f6ef3ec659a', 'mac16': '3a3a5e39aeb9203126d2fdb4894ef572', 'mac15': '518c0041fb7f2eb5', 'mac14': 'ea203df8daaa22e2', 'mac19': 'dc08e81a6abc0095faf949ecefd1025c', 'mac18': '5d3888c6c27a0fc4d94c2e8e865aa1b0', 'taglength118': 16, 'taglength119': 16, 'taglength116': 16, 'taglength117': 16, 'taglength114': 16, 'taglength115': 16, 'taglength112': 16, 'taglength113': 16, 'taglength110': 8, 'taglength111': 8, 'msg103': '3cc95aad927a7032ece9e3d551197ec480d3b4391f3de1ac15aed34735c1899a1ca83a905cc39aa1', 'mac135': '2ecb9f744548e693', 'key118': 'adef0a884f27475c6d3bfe9dba6591f3', 'mac134': '6e15dc036eed1913', 'key143': '6c3473624099e17ff3a39ff6bdf6cc38', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 8, 'taglength57': 8, 'taglength58': 8, 'msg25': 'f946f32127d537c33bee3141b5db96d1', 'msg26': 'e2f0659ed673fdab6fa99e4761c2bfdc', 'msg27': '9501f6dd856470c122f3d59caf32a6be', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '6728d74619a840f066547cf7512bd572', 'mac112': 'e5c288997d5441f4b1779398658d307c', 'msg142': '1a439b0b82338e2599012d6d92e16b591e939a433de4de0e5377e20c7ec5c91f2763681fd784b27c4cbe7325cd', 'msg143': 'eeab9ac8fb19cb012849536168b5d6c7a5e6c5b2fcdc32bc29b0e3654078a5129f6be2562046766f93eebf146b', 'msg140': '0e876cc1e57c60a824218c19340cb80c39a248a1e796b6be97ac40fa9ac3debacd1277996db2540e2d5cd54986', 'msg141': 'dd5f0aa574d533c778c9942cecc4e1cabd8e13c946a00b9219dc7829fd7cfabc3349887cfe0d0fab624a5bf62b', 'mac111': 'e10dece1d57c300e', 'mac122': '731e', 'mac110': 'a795aa3ebe5a8c3b', 'mac123': '5633', 'mac117': 'a0cc8d18d852789083274958bf3ed712', 'mac120': '1f64', 'mac116': '032c35ee4e828958dafb67f5332daaa7'}
dict_cmac_aes192 = {'mac121': 'cfc5', 'mac115': 'c2bba9ddbd27cce7', 'mac126': '4bc8', 'mac114': 'bf684aa744fad20f', 'mac127': '2ff1', 'mac124': '3587', 'key19': '5ab1f8718e4eb6b6789eda4a03714a86e92535ee7a61f879', 'key18': '237ca5c118c1ab692e9721607f408f1b7df890db342b3383', 'key17': 'fc97d45dafe5f42622652aa38dbd944d18c9b07a4a3d6f28', 'key16': 'cbcc204eb36c76e4672ddef3a959c14cd46eff6265869159', 'key15': '4d1e78b414e802a2edb8c30dde8d8e11e57bf680e0fd5ad3', 'key14': '04177d1fadd551b10ac7a675b13669359659cee42fdd95d4', 'key13': '330fd3ea2dba438bb71973558b4a1af62f0c08c726250151', 'key12': '94f868f3b08c362d57d9bf79f7ad7024fbcec05837d6b590', 'key11': '759dc755b8dc34d13f9851cd920901f0ccad5e3ff148ab3e', 'key10': '32204730c5c7757f937179a7bc4d1c61ebf0e620909286ea', 'mac57': '9a0b27a5', 'mac56': 'c5e5540b', 'mac55': 'cac0', 'mac54': 'a806', 'mac53': '80e4', 'mac52': '14fc', 'mac51': 'c185', 'mac50': '269d', 'mac59': '9a1fee8d', 'mac58': 'c031da3a', 'key119': '8a34592dd88fb12a167a43bbc87855a4f189b5087eff42d9', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '27b43ffcde5c2104f7b76290a5faeb3533177ffc99f7eec3', 'key81': '1b8bee5e346a11f4b65e10acb23e333b5989cb411dfd737c', 'key82': '58ca3f734fc2fe7e96f5927bb598ece841bb6af8b1ce4e38', 'key83': '3e6a6eb9050606ebbc3b99df19b7ac55efd3c211ff18d281', 'key84': 'bbcbd0d19139fd2e1133da6e086832c52dbc255e4de17094', 'key85': '7ea77b07802a9af418836a30a0763135b9edc3dfe33daece', 'key86': 'a37f15058f91988b0e2104348e72df7d6611d081160a03ca', 'key87': 'fd73065d55e1956272495b52183157825e227e6004abb19f', 'key88': '60af6ed79a8a81f67c6b8c0fbe37ad5e031a3281b9d6a575', 'key89': 'ca11c53f7e6b9863798470b72e94f15a0ed7bc804f3f4bc5', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': 'a7d0b74f4a011988c273759f46d2d73a6fa3c1a6ec287dd47883b2a2091d365c', 'msg33': '086ef911cff60b19396dc8c3dedd9c18', 'msg62': '36665c9d5fb83ea6703fbe2d092c1416cda1a9b60cc6da8ba019f82a14059378', 'msg63': '5f44469e2bb3be2af168d19bdb3028caf33d3c1b96cb694a2604456800212f20', 'taglength18': 8, 'taglength19': 8, 'msg66': '8b0d97f943c415d6e4748733ef2c16a86d61ab88302b54b95bb2e9c325e2ef26', 'msg67': '57f7e12fd32e7316880f13abaa48c9a89714f3c2c45fdce6f62b90c3b532ef88', 'taglength14': 4, 'taglength15': 4, 'taglength16': 8, 'taglength17': 8, 'taglength10': 4, 'taglength11': 4, 'taglength12': 4, 'taglength13': 4, 'msg30': 'f965d6d8835b7c90a175125fbcc76d9a', 'key139': '1271cc418351d957cc0f119d75e949e11ec856f85cc67e61', 'key138': '51e8fd62b8d417bcedaa7058669dc805860d4854654268f2', 'key135': '3bee23cd648f2e1d57449e601d8757f076a8b4d41a0ae293', 'msg37': '7f81b8cd10b1bd416cb3b9892228d8f1', 'key137': '93bb9c9e96e3ca5acc41f45a9ab444ab21e88c6965e289eb', 'key136': '8fc4b4273a2d7b0e0d594dd63d7632b63020e4d093278313', 'key131': '0091a34836853f4fdab695d3fd81df364a70cd7b8eb02856', 'key130': '5339e47fc8d275f919e17d7fe69c2a1f58939dfe4d403791', 'key133': 'c8801f991afd93c540caab3aeedc629597ea5a828e0c21e8', 'msg36': 'f5805bc15c157cfffe5b6749426cde28', 'msg35': '7eee1912e98cda3b6c4ff210d791e35c', 'msg34': 'ff53ded97f79b5b50ea9d398efa832a5', 'msg39': '1c2a5309c1bf475e7baa753ce0bac9f8', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': 'de877b46a534b228a96a8b6cab36ee2cef1f56c5ed0a28db495b449e055dd94bf6e47df574317d85', 'msg114': 'adec175414600acdeb51116657a58fc202aba2581246b3bd584e4c26ca33292934e391c32aeee79f', 'mac99': '920a', 'mac98': '6b26', 'msg111': 'b23fadd8e4440ab99b58642718c8a4f92c2ccfb1a13f87f3d5eed53ca8af25d0981492f42ba0645e', 'msg110': 'e7d4e59685a89d1557825d22843bb2ec1019d19e0b3b74e00837e4a0d1015712590f7df5f2ba5619', 'msg113': '5143b72f3ddf080e684a45201abd938448682f11b80ab29066c09329271aed1c8c7482b209840172', 'msg112': 'e36bfb432e1693f10b0f3f6774b1fc85598248a04d167a83803154b3ed2cdbf8d49a66186b2bf6e6', 'mac93': '8f90bed41fb9e6be', 'mac92': '8664a9bc4af84f64', 'mac91': '0634a5c5e36c8ae8', 'mac90': '090f7d545e3538ab', 'mac97': '707c', 'mac96': '0f6c', 'mac95': '12d721cf45165e88', 'mac94': '8190d4995d50dae4', 'key44': '76eb0110e1a231be61c90d7978e7cc369da63f08e2e49edc', 'key45': '7061869e6ea53f1e2afec907204d8de92f418f8b927afd30', 'key46': '15e19615eed67b615eccffe1fcd582c45022fc732d0deeb9', 'key47': 'd2017ca261c233d8f1bd816bfb974e3a3246811a666c0acb', 'key40': 'd42600efdf481583e433a03aff65bd095e281d304f59b61d', 'key41': 'fc561cbabd112dfdd36d7b311c23e5898ea137746d67fc1f', 'key42': '0ac2d4621abda6e5e88ec221c19dff6449523be46d33ef04', 'key43': 'c619ea8e0c40cb29bde7e7ddc793c3eafc20d9b3c3a8ebc2', 'msg99': '3124347f9ef2d0d556d05cf9d1ee9dab9b322a389c75cd4e9dee2c0d08eea961efce869050264d0f', 'mac119': '487933e0c1519183', 'mac118': 'ffa8072f893be627', 'key48': 'a104843ae43062bf3db082ba7d9fe92a77169823bfe76920', 'key49': 'bc258baaca9f703e80689975088c33d59cf5d1b801de0e5a', 'msg98': 'b6f8bd40f122eedfc0f20c206ed5dd8111da422bbc171078f6491cb36bba951fe268973a6f63fc42', 'msg95': 'c9774ce3ca42be517797ee7a14b9dde852a6', 'msg94': '8b2a867789d5dcb54e4686fbed55d0f7ab45', 'taglength109': 4, 'taglength108': 4, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 4, 'taglength104': 4, 'taglength107': 4, 'taglength106': 4, 'msg32': 'a2e3a86ec6f43f8a107f9fa06bd4ae91', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 4, 'taglength60': 4, 'taglength63': 4, 'taglength62': 4, 'msg51': 'f93878ef537ee23727402deb8fb6f936dd82b7db979ec6c8c092dced59eaa84e', 'msg50': '9aae4635b502a25ec764f244ca77a1bd10d8296884517989345099140c979008', 'msg53': '54475fb19c29c9842e8f81d50cc1c6ba8525727364a7cff2675dab9bf26baf48', 'msg52': 'd00f42861296037cc21036429278b8d0ec9dea93d978b56222bdcbb3b5b02f0f', 'taglength69': 8, 'taglength68': 8, 'msg57': 'd658ff740bd18d1a6523b87ed05be4bb0c0af18a0048256452f866e7344ead7b', 'msg56': 'ab795a4b6d132b35d6aa36eb6df856ad06d0257838bd14ce11e6bbb509346d02', 'msg31': 'a6d797d25ef4b16e08bd4528bd345ab6', 'mac125': 'd669', 'mac40': '27d7f1732237eba1', 'mac41': '2a8e3b5759ad981d', 'mac42': '2ec435b40124b1af', 'mac43': 'd8f43e4b7edd95b3', 'mac44': '108ee24301ced6e1', 'mac45': '373df1feea7e252b', 'mac46': 'f112075c00218de0', 'mac47': '360ab81624920bdc', 'mac48': '7f30', 'mac49': 'aeb4', 'mac101': '2777', 'mac128': '02eef392', 'mac129': '8c3ccf9b', 'key79': '3f42b26bd2d74cd049c0e73c908aed4085ea4cdfada4cd95', 'key78': 'f0ff6e39bef0c5f492aa39f9a258d5747e1cc142a0567253', 'key75': 'ad036542121e752d41fec89cfdeecc53cbefce7df6ac1c44', 'key74': '2da154bdea589bdcee6a4c542816787dde9b32b34f4d4e08', 'key77': '8f53ac66ddb6dffec242cdba3c0b0f5d50126f1eac5ea75a', 'key76': '03de9e176d594135438ebea869dfbf066db4de0d69cbb092', 'key71': '378638743350e39a91068b8567fa874068a3c808ab4bbda3', 'key70': '580076f831f64d8497e93e930beb63e02ea4176dca431618', 'key73': 'f32a8d3cd687a5a4cd5080b4fceb79abb13b791f3d216a9f', 'key72': 'f627553646318dd6d381f7c1d18b0e1d1dc63d352400e772', 'mac35': 'f5e15e94', 'mac34': 'dea244b1', 'mac37': '9f0c7d3a', 'mac36': '7aee6693', 'mac31': '72ac', 'mac30': '568d', 'mac33': 'd94a0e4f', 'mac32': 'd92d7521', 'mac39': '444f2b15', 'mac38': '74eaa443', 'taglength130': 4, 'taglength131': 4, 'taglength132': 4, 'taglength133': 4, 'taglength134': 4, 'taglength135': 4, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': 'ce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da125d15d3d8383c77de9133d34efb0e36', 'msg96': 'b61b9326aec22fdc2f98e45532809933e5c10893fe08b7354fb129dd9b4255f8a938578396076629', 'msg91': '1baec344f10a51f12404e8e176e9efed2d70', 'msg90': 'c2e34387816c931c76b293e4049968021182', 'msg93': 'd3fb9c1f4dcf9bf2ab73b1e18435cbbeb784', 'msg92': '853f70aac87edf1f63fdb2f91e350d1e54e4', 'key108': '31765a889fe428193b61fcf8cb6dea3b1c6d4f1999f3084f', 'key109': '0af02b66e7fd5d05a3389eafa08ff3e0ba78ccdd738541e9', 'key100': '5d5f87ba8a8c24b950347fe83e374b443194ddd8d2d8d6d5', 'key101': '5bf851aaa2211bbe5386c66d71ed91503f5bf93a56da751b', 'key102': 'a2d23a08b6d5ae6f79e7ae13e2ef10c491dd929362ee1337', 'key103': 'ed1f96bd9458a5a1f64bc1b4cce1fa52517513c9ebe63d0d', 'key104': 'd60bbfd95a1df153ff32e70c4260b6d77740df42c5e77426', 'key105': '6cc7510e345e00eb262bee66280ec78be5953a62152858c3', 'key106': '655db94f423912b9dc1c95f2315e44be819477e7ff6d2e3c', 'key107': '77d0c6d40ab96b0846bc74f2bcfc0d5a2420cfcbf29ceff1', 'mac132': '4948be0a', 'taglength122': 2, 'mac84': '75446767', 'mac85': '7d8bcc95', 'mac86': 'd9e5e38f', 'mac87': '89493091', 'mac80': '4c390630', 'mac81': '5ca4256e', 'mac82': '9c9a37aa', 'mac83': '34cc4069', 'mac88': '768ac423765ddad8', 'mac89': 'b5b42265a268b770', 'msg120': '63eee89474188e778bd39dc95c538cf434fb3e1f32c6d6b0b3e5cc0f0eaa41ad82a48f466c0c2563bd5f9222ac', 'msg121': '87953e3528b9f7d90ed28ead0ab88de312dbb014f22a3e3d3e3399078b8b144bde7006d565ad1d6865bef40374', 'msg122': '4cd3380daed8e21d9331085d038d289ca4d41f9b4367546eb0a93325cfbeddacec931df04f1e9f4310e75c022d', 'msg123': '7fb4fc1fb71dd0b8ebbc776b15bb4db801be2ba2f6042e6398aeba5e0d5ebe555f0439dc21f5fd0d563eb37e8e', 'msg124': 'd4c759d48111c9dba635e81f37a4703feb8bf25bf1af261bdf9b80f3ebfe03a55d4f5a0744b22506681f91eb81', 'msg125': 'a483c3619b1cb87b9e5c5f8f82925b091130e1935cd1b439537a53ca922070817e6ba5e491ba63edf2672b6849', 'msg126': '8551d8304fadd061b5d58fc0fffd474b8726c32d1ef2f032abb79d7d15d27f7d633e781d2265183b0735655cd6', 'msg127': '905a46159d199ba490a70187ebcd287c01e12717afa2c9c0476328fbcd6c7eec669d371a0d544b738891ca909a', 'msg128': 'e418d63f07d27c0d9f4995872034cb3e2eb6868e02336a150e61216ae4a25a0c54911199d4da11412650b87934', 'msg129': '74962da5f879782a71331d00e346e8d11adea547ee0589d9c616cde45b749cfdbf7b2f869db7377fc2547b9fdc', 'mac7': 'de38', 'mac6': 'c8b4', 'mac5': '7217', 'mac4': '6d9e', 'mac3': '9a35', 'mac2': '6dc6', 'mac1': 'e92a', 'mac0': 'd70c', 'mac9': '66ad00bb', 'mac8': '0b7c30a2', 'key31': 'c9eb48d8638197f045985bcd78e50172fd35b3b761b187a7', 'key30': '582ecdfcfe3605a453931922e9dd575d9fc9a866d09567fd', 'key33': 'a77403624de4c90f8c94b49c3ad06f5a71190b68e524f2d6', 'key32': 'ba96de1e049589688724ca137ab424290ac8db6d444bfc49', 'key35': '7c660736e3e6af0a4270577bf77cedcff9b9ae5d17478f5b', 'key34': 'c7256ba6433201ed9020f5183cd7df6d44f14276d66e6b57', 'key37': 'ecf432e82732e9b143c0dd3caaaeecbe5462f7673d3bf12c', 'key36': 'e416dc25696e5e455ed49e6c6f544b2548f61adbfe92524a', 'key39': 'ffd55500ec0fe3e0f058454179f9f3ca63ea4f66bf8c8897', 'key38': 'ca10cb1f065a393cbe44847cd6b255f9d3a8edff9a030965', 'msg59': '684ef950f401234dca53eaffe99d590fe17da1bb88c06cdaef866f1a94a03e8d', 'msg58': 'f82df0ebe0428adb1bb120ad26504384250358fcd7de336bca89e867cbe9dd88', 'mac79': 'c3d7', 'mac78': '466a', 'mac71': 'f940bc5340be43a3', 'mac70': '470c45f9b92fc97c', 'mac73': '594f', 'mac72': 'c307', 'mac75': '44e4', 'mac74': '1479', 'mac77': 'bf55', 'mac76': 'e86f', 'msg61': 'd020aa0c99c6f4bd14e8130a7340f2fe1fdf66eead5cbeba0e309c4f05610370', 'msg64': 'd6ecdd21ff97ac8699ab06ee3b73df0e176c8f72da9cd26ed4251356591aeaf1', 'msg65': '3c052ce80dbebd3d360cb8d9fc312a2475f87c75ed90f585889a81242981b12a', 'msg55': '8500ac41eb1f97e511bae6ddb65e7bd4ebac0aff2515cefd91e17a01a7767332', 'key140': '3bbcd9955b873a6e19b0d59adcd4624239014b760c776117', 'key141': 'c8801f991afd93c540caab3aeedc629597ea5a828e0c21e8', 'key142': 'ed6cd559440d42675c3c91265adc2936e63f25112747ef4b', 'msg54': '27f1102ba546eb514d444d56040e60047b60829b0416ad75a5ee36e66b8ebb66', 'msg68': 'c9a5a3e6978275713341c909f3aad165c3ccf69978f9cd3b611147c41f04283a', 'msg69': '738bab810d2bc0a8aa64258722fe95be273077e77a0ab31c5e10c5ba4e281065', 'taglength87': 4, 'taglength86': 4, 'taglength85': 4, 'taglength84': 4, 'taglength83': 4, 'taglength82': 4, 'taglength81': 4, 'taglength80': 4, 'taglength89': 8, 'taglength88': 8, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 8, 'taglength71': 8, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': 'a9f828f17b5f98eaf2146cdf0544e39ca13504a392919a1ea7027e1711fe14eb', 'msg49': 'dcc87e9c7486f56ab406ea608d8c6aeb060c64cf2785ad1a159147567e39e303', 'msg42': '05200b0883ae8b45d4e1bc9869bc9fce', 'msg43': '7d0d02aacd01bfe11696e7f3869b1dc3', 'msg40': 'a64c8ce19497a9d51733a996d241ff59', 'msg41': 'f618db094c8879aa399ee88a51698dca', 'msg46': '0f91f4c558b9b90430b099579e726ebe', 'msg47': 'bbf92dbbc01596878b68bfe23579a529', 'msg44': '569d275c7475416594a549c45026e2e1', 'msg45': 'cb2eb4c39e29a0a15d20649ed2c0c7f1', 'key134': '404d3489e377c3f496c4ea96abd0240b222a1870700578bd', 'key132': 'a52f9d634f86e2f6ad61aacfd417450a3cd2814fc187ce5f', 'taglength127': 2, 'msg117': 'e3f9f382d19ff6e0bff8bf4b7346d92d7874d3ef664e9ec964ee36d9ea768473cc0584b974e3a36b', 'taglength126': 2, 'msg116': '4415c5fd71ed5b1f9a02b58b291d4284a2cc2f113d6e2db0d58a74490065076180d33a90da4d7235', 'mac140': '751476cf6f0edce6', 'mac141': '39ef32b7667bbc3b', 'mac142': '4d463b6910f058a8', 'mac143': '725cc69af4ec17c8', 'mac139': '7703e4539280727b', 'mac138': '9cb28d38a6f76405', 'key68': '0c329e37854148ef7a4bb065488938467bace05e3f7b5f5c', 'key69': '160cfaeb5afc37511157e2591e0790584d3417d4dcb83b9a', 'key66': 'd1283edbd13b108a9d8d331179e5a87e0cdded6764da227f', 'key67': '77a462047840f0770dfc859a41cc1a0f7e7c1637f48ccda4', 'key64': '059e95e116185e1af3314befdf6cdea990f6a084e48b6db3', 'key65': '0405159926a6606fb8eecaadd06f2f07631753895bfa8b7c', 'key62': 'fd6d1ff5de521b446d7581e552b0541fc820ce96f4285270', 'key63': 'af060dc3706835a307430451f0f2ff8908ab11dfa14939a6', 'key60': '254d09ebf6f21809fa08a914d8b0314142df9b5e1df98d08', 'key61': '6bac5ca5b10316758403f09b36c3730c36032ea937bffd6e', 'mac26': '5b30', 'mac27': 'bf17', 'mac24': '3ac1', 'mac25': 'deb9', 'mac22': '50e48ab1ee8c8477', 'mac23': '07a40d7a58698903', 'mac20': 'd54c746fc73b7eaa', 'mac21': 'e6c9f02091f06fc2', 'mac28': '5905', 'mac29': 'c6e6', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 4, 'taglength128': 4, 'taglength8': 4, 'taglength9': 4, 'taglength36': 4, 'taglength37': 4, 'taglength34': 4, 'taglength35': 4, 'taglength32': 4, 'taglength33': 4, 'taglength30': 2, 'taglength31': 2, 'msg86': '7ee932a498501fbeedb023836b0ec5b0eda7', 'msg87': '18f0c0b45dc0b3fa71163ef0091fecc52b1d', 'msg84': '2ca73445d9f97421ae7f11fc467a1742afcd', 'msg85': '46a66ba3d65c60bed3bb7a0869d6d14819ba', 'msg82': '5c03d9a83bb032bbe54ade8c34512cb9a16c', 'msg83': '3794b3a12cf9f6c62be99abce71d08933fc7', 'msg80': '051290d6af5837b9c032b842439703333c85', 'taglength39': 4, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 2, 'msg38': '0425f750812ca53c1e75abcbd75b06d0', 'mac133': '39ef32b7', 'key9': '42d065ddfb7e15df008fbf836d827bd33157d6776596c7da', 'key8': '487cb53b05c988db1fcbd14a2ec9921ac911ae2aa88c39d5', 'key3': '9eced759ac1bca392b860e1ab88a46eb1d15b3b6c7324a6b', 'key2': '12bf0cdc3306761d3200e10f03e478c5b492684197272f9f', 'key1': 'c1dca8d8c208d676a84d5f1756d64fe35fb30aff64da3db4', 'key0': '2b2aaa666be161ed16648e862ac9bd1e317f71bc69e268b5', 'key7': 'a233d55e2a817906b39b4984b3737908246af89c7974fd65', 'key6': 'adef0a884f27475c6d3bfe9dba6591f3cd2c7bbd1a87e355', 'key5': 'a84f3462f3e06a4bdc79e54bc545328fb772da4e9f92334e', 'key4': '86398a482b9ca760d8f3ceaafeb625031551fad6ea26b33e', 'mac137': '052720e1ace435f5', 'mac136': 'f7e11c213a588e94', 'msg139': '4b0c5ce743e4ced9d24f8ce714843d28966c73f619598d4593f5dc34777904e2361fa58306d93bb3e2434309d2', 'msg138': 'c9e75b84afa8fb3a076e835bbd4264dff7850cd1a43416b0586bbd1457289794f05280e80cfad34b06e0e123bd', 'msg137': '7c283ce6a4eb859731a3817a4186dc9f7541dd3df6ee8e49b6401d47f901826113bf62b673c233f4e041a22903', 'msg136': '9dde4ca51ed53c8c81aa098c908f639f2f68f4dee239fa9891df35a188ff03ecc23dca5c67ae96d8938f039e59', 'msg135': '2e8613a18b80354c8f9e9e07c50e5603a14591f71440e17d5e10abb82495d83bc28acc26e2c19c924eb07b3002', 'msg134': 'f90828d1e9da0d4f2a215b41ffe585a1869cba308dab5d17a82ab6ce80e7e73d6eae212149c817b27cc2b3835b', 'msg133': 'c57e7712e10591f000ba796556d5131704bfb45332d5daf35e681a85f30859a91e023fbbdd27e9b259cfde4875', 'msg132': '21393eb6640843915bcf2d54cd832e3a9cd54126af59bbe42fe822b2f64343ff44f87f72b48a662e6fcc8755a0', 'msg131': 'a38b961dc584ce4fe15b126e03b6fbffade2384429d0845f1e5ed5b962d8d6a50fbf9841d9c9849d9e2895203f', 'msg130': '357415c100afce98b7124a7a4fd2b76fff55b131e94808e0fcecc4f719b0667f740571833e6e29c381d69bac4b', 'key22': '39a8c98e750e89b70292bc1e0908f5dec9048db98df73a5d', 'key23': 'c6798ac9e28877f8b6268b32e836ac15aaecd309d78dbd23', 'key20': '6820a24d26c06c2d0ea90e700aac65926f5710c3826f1bf5', 'key21': 'e54dc7f39476f0d32958a4e3aee8d8da51abcf7f0ac8dd60', 'key26': '4177a424392801f64c9aecb7c4401524fe4df89e66d46b73', 'key27': '01f5ecff906a6a351f7080be6926e04fdf8aa7649c97ee86', 'key24': '21a4600f4bf06583a112d303096d4e30e7e1060d869f386e', 'key25': 'c494cbe067b39c289c274460a53cb34791d511f76100001b', 'key28': 'a5f2d20e35de772422c9dfaf781f189262ec4d60f093a2ba', 'key29': '1aa1480d4206bc06968bef6ca9c2370aab70596597ed5745', 'mac68': '5cf81deae10b0d2f', 'mac69': '52064dbdc05567e7', 'mac62': '0e76695b', 'mac63': '1f6090e7', 'mac60': '894e3059', 'mac61': 'f2b8ff6a', 'mac66': '55144cead273b208', 'mac67': '3e2347bea0e5202a', 'mac64': '7f92724ca5304c1c', 'mac65': 'e70f4c4a819e2ae1', 'key97': 'f7c5bbe6ad32039e12985270a50ac022e0a73afbbd1427d8', 'key96': '3df2ca48e82bae34a3bfe5f669896fdd5cf69567150cd461', 'key95': '6c1977183650572f0cbb8d65228d141b67cf5f4212a692c4', 'key94': 'f30ca59e18657f9fa83e96b2a6df23fb372895015678e0b2', 'key93': 'e5ee26b2e48003a4b64f0b6fe743d4664d70725a4648e16b', 'key92': '7a05b2ade91b7f5405d664a74895d2a0d9b24a0b6007cf2f', 'key91': 'c45506768a5453ee4ae477443d6522fd289cd4243c06e73d', 'key90': 'b6d9db88969ca9125a6b2b0267e806b8b107f25bd1cd6ec0', 'key99': '5e0b6e7773254e876eeffd933bf6e23a8e697dc31c7e42a9', 'key98': '6af00d5c678dba069aa5a009b23b86a04f7daf93679c5daf', 'msg28': '1fd5f5f93076d64b9c4b4c4abbdb11da', 'msg29': '1a93cddb6eb0687b82ddeb16839d9b6f', 'taglength94': 8, 'taglength95': 8, 'taglength96': 2, 'taglength97': 2, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 2, 'taglength99': 2, 'msg24': 'fe4c4429c016f90f40449fcb40e51886', 'taglength59': 4, 'msg77': '90ed25c291deb910c32f4ff756e623cf0c43', 'msg76': '8ef8f77306eb4d26129817988a068d34fc19', 'msg75': '1433bc1fefc7d3a4435d9ee0f653ce54d15c', 'msg74': '150fee1f95c474e09441cf8f81c8918918b6', 'msg73': 'df91092aa05fab5dfab9ac70bdba097d6b6f', 'msg72': 'ba91f8b0b358ceea0985fb860e30067d1f57', 'msg71': '7f149c5a8c657c87e5fb1bbf355e36e2ae8b25f809e901c4c87e079cbf634178', 'msg70': '40fe01b41c4da83f331e37ce1412d9ac6c70cbf47cc86d54cad6991017a8334a', 'taglength121': 2, 'msg79': 'ed1da2847ee327b3fa96df5ec21eded73086', 'msg78': '171296a0f40d345659870c4573ccc4bf5572', 'taglength120': 2, 'key128': 'a2e2a974a0a181e9894a95bf11d6c9d9de5fa13c323105c3', 'key129': '170327340a4262dc4923259944e50baa07f023f2c0549507', 'key126': '69a7ba09b55637377d49bdca92dfbebe14867f958782c840', 'key127': 'ce9992493083e7542b7e6f90450a7d8a2541954ef7ade6da', 'key124': '237da4bb3d146a09b4cc2c40d93e74d2278a2d0d839108ef', 'key125': '534c451912b843a232645b43d242c91d1a27223d742a2d21', 'key122': 'a30e0c44321afb7ac30a83188d07bc2485035acf2f412711', 'key123': '8fd71ca7e7af2bf0e567357e773b519b0df3fd5db67062d7', 'key120': 'fc59090e70eac9b3119754a3d7c6831c9451de5a29e46d16', 'key121': 'b64ed097cc3fa17969e18f717cf5ab5b4257ac24c57891dc', 'key110': 'ac045e5caf8293f48273beb7afce4d6bb0af3a30fa4d3310', 'taglength125': 2, 'taglength124': 2, 'key117': '85f137f579652491bb96eb6cde595e21d95ac9d70a0d1ed0', 'key116': '20bbb4ddd19e70bc3d7f9efd58d3ef5f74f663b2b5ca5e96', 'key115': '8dcd939d9ac591355f0d332168d37fa1ff063bb04516a5e7', 'key114': '1f88b65e7fc13985355a7cd82de0e3f51b83f226b4761ae3', 'key113': '86cc68f51f61c5cd0c7b1c1b69ce205620b398bdc47b6048', 'mac131': '8ebe6f20', 'key112': 'e80dc49dc525ad911ebc45f0cc925c1b39bec175d04d5822', 'msg106': '5242bd159f7bea4627d54f0568dc126b62a8c35fb46a9ac5024400f2995e51635636e1afc4373dbb', 'msg107': 'd6352f6ed620edf63b3df30eb5cd8ca8fcf55da20a1b3c488793461b857b2bd16de3cd9c39320aaf', 'msg104': '7ec857d87914fd88bf7f416958438917fe817f62d22867524d19b0697889c82760a635d4c47de279', 'msg105': 'ec842341681e6b67391e533c5a234a7e5815ee685a132c3f5eada928c554613c120e8fdeef6fcc4c', 'msg102': 'ea43aa9042ebe0a51e4b2cc1090ba179d410a8674258502b0526e5b0e960c4b150356d7bde02daf4', 'msg88': 'b1bc7c89a7ebf92cab58845afc186879746e', 'msg100': '9d5bdb5f392eaf3ae4baaca8ae5c06181b1803d1288d14868928452b3599d80724832d095778e65f', 'msg101': '51b5bff09a57a51fb361c63c1b28b6dc2876a4c39fd38e4a8203b10429d044a0940a651100cb54ed', 'key111': '22117c82cf3da73e29ca71cdf537f03e17ad37a76186cdc4', 'msg89': '0fc244dde9af4d8db30475e38842c70bf299', 'msg108': '0913004ba39d9e0212de76e5633ab0928f5e9144b576e7a5a7a0a8e4a8a1d60874d8a5848170e00b', 'msg109': '1290b5d966c6befd7756068024f38449426dd84891d5debaefe283a8cc93d7b1de16640a16e9bfc3', 'mac130': '95f9a1c8', 'msg119': 'f243d53e97fced6ceba738e6ae131b0c09d1ae29748ec05ed7a01bdcefde0856f4b516b779781810', 'msg118': '6f52114d213d8c6b5b0fd976a24554ecc780eb95c6d82370ee725bed4255555c2079f2a620213d3b', 'mac104': '4d2ddecf', 'mac105': '53eaacb4', 'mac106': 'a50987ed', 'mac107': '23c0895b', 'mac100': '547b', 'taglength38': 4, 'mac102': '19b8', 'mac103': '1bfd', 'msg81': '80cdf87476c1dcc6c63a743afc283d6621fe', 'mac108': '90227785', 'mac109': 'e968d7c0', 'key59': '1fb60d614c01f1a5f10457670cd1d7728da8821fbac86bc8', 'key58': '96f81c41d30eb9149a340ff886f0a2296d092b54da31a35a', 'key53': 'da54c77930d6f70a5fea19c9f1ffb0be24717b3d495bf65e', 'key52': '6d1d1f93baecd7465736d4fb6e8f2c084d1d3fd60da88592', 'key51': '7aa21e3ed80c97f689add31cc531e7446065785044e0cd36', 'key50': '0c981ffa492acd03339e19628691bf36faa95900171ed24c', 'key57': '2ab007fb28b3499576b2cebc209d9ceff511a6e130709529', 'key56': '936b6aceaa67f105e46536b1a9f81496c19da1bc2240a915', 'key55': 'dac2e3e6da74f7646cd7c17438c73684ffcf490973a76121', 'key54': '833dc249e1467ed058f7627e831375495357d3f153ad0cd8', 'mac13': '99e82480', 'mac12': 'c43f568b', 'mac11': '3b32fa54', 'mac10': 'a3e5b0b3', 'mac17': '153f70f96e0871c6', 'mac16': 'e1b8ad36e1ea97a9', 'mac15': '77cbeae8', 'mac14': 'e98cccc6', 'mac19': 'b2450e3012f352db', 'mac18': '12f77f2ca8d7007e', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 4, 'taglength111': 4, 'msg103': '4e2cf3e6e83f562e0166c76304b22aac120ccbf5f764f2345c0cb8f13d5e18059ea549a27a3b4b93', 'mac135': 'bb9ea42d', 'key118': 'f7e2aa64f343ca7d7c6a5137a3337a701f8b4f98ef836f65', 'mac134': 'd9de1a1c', 'key143': '1a5215377cdca15233e53ca41204ecabf4b60ceaa3b04cdb', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 4, 'taglength57': 4, 'taglength58': 4, 'msg25': 'e9cb061f251087ee04cf77d759dd6501', 'msg26': '722083489f54fcdc1f616a133ef6112a', 'msg27': '10eda8b255d6097d668f595aaa74d59f', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '10d74f58b89ca190', 'mac112': 'a48a28572dcfdb54', 'msg142': 'be8ebacf75c056a243c153ece1b552991c7fbe3ad0e25c4c13e623bdb17e4dacd967ae71155345dd7f4711c233', 'msg143': '2967ba8ed918a8ff19e1f5624f6053f4d459092f4cb6e8ef33cc81d4b9e095e7d0eacd808398ab678996c1391a', 'msg140': '94e7006e285c45eb0501e3b216e536f7c88c44fd63f3ac399aced9b461147bb1febd389063cb9ef2bb875d1e43', 'msg141': 'c57e7712e10591f000ba796556d5131704bfb45332d5daf35e681a85f30859a91e023fbbdd27e9b259cfde4875', 'mac111': '2eecbcde', 'mac122': 'ad9a', 'mac110': '93ede4a9', 'mac123': '0886', 'mac117': '27a107ce1bec0ea9', 'mac120': '29c9', 'mac116': '2dce8272c4d1883d'}
dict_cmac_aes256 = {'mac121': '44abd89601654b89', 'mac115': '7c009af7e777c4906b2c7187953a7206', 'mac126': '42e3b8b4737aa56b', 'mac114': '8920b02bc94d71778f69b13a5a55c7e4', 'mac127': '33eaab6d893e4365', 'mac124': '40aa464550ebb302', 'key19': 'b1d677d3b134837c923f96ea97812196e7d1b0af86767b60848f385175b23470', 'key18': 'a284014d8e0fb28257b6f267fc11457fc0e4b1ca7152209af04d05a2ee514250', 'key17': 'ac9649c9b324f213407b35b36a2210fc44b43a156a2b5c5bd95e7e0104c9bff9', 'key16': '765c09d13e1acdceace08e967952ef8e7eb4b4bac9ad7a95f04ba540a5489bdf', 'key15': 'f64b1e5bf3f38c20b8a7a76b44fb0391680aa09fcf6711ed3d57def6143d2866', 'key14': '1d4de41d29cfab1b726cb2b5dcc61c4dd1efc71c3689db769e2ba34fbe079cff', 'key13': '6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2f', 'key12': 'a487afaf744813d262bb43e29633dd54c17225ab68b3fb9c80ee0a703a5743ab', 'key11': '786c394b5b4564e2891eec4b88b8a2e5c612915dd2d5d52ccceeb1611b7ddba1', 'key10': '54c2f556f4cb5ecac9f523f51fb00463e283788255f4fca907acab5804d70fc2', 'mac57': 'e04d7c081856e53cd35783e82c5d', 'mac56': '4687b9c20d1082a2fb7a5424f155', 'mac55': 'a773a0d38bdf9b44', 'mac54': '6be2305c67fdbf73', 'mac53': 'baaecafebb854fd3', 'mac52': 'b9e875ba12e75110', 'mac51': '6de657fd4b42c88a', 'mac50': '4b1c0c10e93baa35', 'mac59': '9377e40c4ea5a2f708efd680554a', 'mac58': '416f01383779c10efeb77f7e4395', 'key119': '0d60f53a5281ff0f35f58cf4277b2cc3ecd1715745cdb141cca907bc1f9f9be4', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '0af2248084617ccde4ad94cb516f74f9a038388f772558b4b2b42df205d6b1e7', 'key81': '6185bf4f51e649ed0c3bf8162c48d1cf7842821cae86465e808b09dfdc15cdac', 'key82': '9cf5998d41e6668c5d8ccaa290d685e7a13dbd361505388b01c0ceaf1c151e18', 'key83': '8f16e010c40d732b37a9019adf12e3e4762c3a30da6a7bb5b4e72c7157b3e81e', 'key84': '030808cd616d9dfe3ad8b7e4332f31382e982bee633bba14b249dffc373db69d', 'key85': '7e3b59b374efb8614c0bb8a10b8f2c89c45060c6bd925bd7cdd8607a08fbbb64', 'key86': 'ab094ba4ae00adebcc08acea1d6db36d0a831c79559550e05a1e2f12943bb236', 'key87': '5e3db1cff43ea25d68c3b194d48a7349063fb5a2df4d0585f9f375508c9a9bcb', 'key88': '0e2abeba4bfcf168adccd5fb7729d013565727b0dcf213f42fd3182b03389208', 'key89': '508d486fe10985e43e00ba36b39845dc32143047ada5b260c482f931a03a26e2', 'taglength141': 16, 'taglength140': 16, 'taglength143': 16, 'taglength142': 16, 'msg60': 'dc5482a7db461bcae7057d0d296046615b7d17b9387ba2c93055040d610a560e', 'msg33': 'a6da842512cd4e2445e71d9977d7f749', 'msg62': '934b8df7d7d04c11c29f6a594a29a16c269a826b82bac5fef711de98ba4fd1fd', 'msg63': '5637a698b08dbc51da52e0c7121f5bf2ff4d3095e85af5c4248de2a4d2dd2872', 'taglength18': 16, 'taglength19': 16, 'msg66': '95f08e57fe357f80d01bf9d5ce6a6c909b4b38291f1227c92c5b3b036158abbf', 'msg67': 'c2c367b688822f88cfb6bcab4ccc1120ccee06747832a6955711d5e4141a368b', 'taglength14': 14, 'taglength15': 14, 'taglength16': 16, 'taglength17': 16, 'taglength10': 14, 'taglength11': 14, 'taglength12': 14, 'taglength13': 14, 'msg30': 'a5ce0308012cd700f8e31a3f5d91c07e', 'key139': 'd5535ddee9d2f03bd8337accd3784cb540fba54502a51bcafa603caacdcf76af', 'key138': '809f9b8a46e4436e4c058fc6cf17ca029599093180b4626662c25961130e9b6b', 'key135': 'fd7d9441500c8e97c3987c562ab571d3da720fbe0f30029d8bb4cd78807ac9d6', 'msg37': '7f93204dbe336c2344c1a0325ceef6d6', 'key137': '71860aeceb2b22c91d74e7d6241bfcb85b222ba17b67a98307789b7de7a8d89a', 'key136': '531bf50182c1ae1ab00f7eb8e87370d01aaf88611bd1ee04ed6650c541eb8131', 'key131': '2f445b03735ab083ba71e4b4fa77c3886d8b7bbfe705990867b63469ec7168e0', 'key130': '8f800f2f958118308137c6f31139e660a048c5e3f9d49f1469c25a93186d7436', 'key133': 'b7c480d4ad53bda100735723c962e6a10ab20169a6426064b16d3eedea8101e3', 'msg36': '1761ce564226f0e401edd3d2b2a873bc', 'msg35': '5cb3a6d84f335865fc6f20e34495fca4', 'msg34': 'f099ee76fa0840e0d957cffc65504d85', 'msg39': 'fa212421cdd1d8fe8bd362f1404f5907', 'taglength48': 8, 'taglength123': 8, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '1a40a8d7476c5196171740372f216a275312c2dd35a3af768a80bd9d634c', 'msg114': '680d41ad012d5d247b5c3b8d7803aa4c575529b5abeaf9d1ebaa775f6bed', 'mac99': '699686cea50dee06', 'mac98': 'a9f9a678160fac47', 'msg111': '414b4055a7b0866513dafd5f481023d958a9400b68c34926b73804e7ddce', 'msg110': '2e35e6b127f2fcd0eb83f4237c708a8c05cbd8c91c63bf48443a883cb639', 'msg113': '8befae5b85a2eed1bf639d319a20c0f8f34fc76a4982cacd223b12d4aa02', 'msg112': '91f7b3a68c0ab245147e70fb67693e208993555c937bc8c64e9bb64d00ed', 'mac93': '531d10fd28933e668465054e00f9be7c', 'mac92': '9083fe4da31d35994e6def6f648a2bd4', 'mac91': '55ccb05f69ef720c7ed870c9505705ee', 'mac90': '33a7aa1fd64348ff69e9969522c82597', 'mac97': 'f27c16e004d8f8ce', 'mac96': 'c0b387da301300d7', 'mac95': '6587c779b5a30b3f8d1ea7c9287e4386', 'mac94': '3252fb1c00350b57574631d6eacc6494', 'key44': '37d66b441eccbdef7ae1482e58b6b756c9eeb3b5efee9e7857e084cc89fe4e44', 'key45': '2178032041668bccad12f9703559c083040e7ef9d354d4c25d4a749313ee7be8', 'key46': '4a41926d25181eded34338ff6ad7b4208355206b33cf55253d4c4c31856e33d6', 'key47': '06d67ac9de840e6fff2a4781cfe0ed767e6cc1daf562109509908770f59849d5', 'key40': '4bf9fa471e51bfd03f02b90482dc82e17e6a8be841d56c2243067861990b95c8', 'key41': '7233e4e8c4e70ce5b2af3df6d09fcb703056698f3083991595a86734de1e57ae', 'key42': 'e8cff94d862a831e0dee6fef169c4beab646f054b0f35710e845ae651b59ab01', 'key43': 'ebbb53e1e7b5d9357c87f56f6157428f2abe079077290ceb6c80ac5c61062ce8', 'msg99': '635b0ae78053700a584b4f58f13b91a12999a038587129a731b820a0e9de', 'mac119': '5b5da918fe09a6aafda4fd46533b885a', 'mac118': 'bf250c3836542d6e8446078a8ca1e200', 'key48': 'c9b80486bd16847ac68f9ceb85528cabdbcedea7507dee5eb100aa98fd719754', 'key49': '99f3f10608ef64b61e7b99cef8d036690e131706b9cef096f3a134d35e3536d4', 'msg98': '5570c96c6aeb66ad9fa56f317c1354349c7721220eb10407fa580a478809', 'msg95': '45f0fcdd9fd89c342fa6fa005db06958adf72e76', 'msg94': '6fd29440530b7c08bad55ee8c9d514e0d42035bc', 'taglength109': 14, 'taglength108': 14, 'taglength101': 8, 'taglength100': 8, 'taglength103': 8, 'taglength102': 8, 'taglength105': 14, 'taglength104': 14, 'taglength107': 14, 'taglength106': 14, 'msg32': '672782cf3bb3041354f3def9820de80e', 'taglength65': 16, 'taglength64': 16, 'taglength67': 16, 'taglength66': 16, 'taglength61': 14, 'taglength60': 14, 'taglength63': 14, 'taglength62': 14, 'msg51': 'd92a5dbe61135ae1edd42c6d81ad23430d1fcb8e9e51c149d6b2c6029ae012dd', 'msg50': '930acf735d0de50f2fe7a72231728f0ad8a1d9e55a1f94546533fa8010e7fd5b', 'msg53': '793be833cb4fcf5a07ca10c09ee84998c59bf7807a7c970fc1080bad340940a8', 'msg52': '7e6ca9cb05e54de9cf60952cf55e86d5c5c8fba316ea99f4d8bf062eef6f565d', 'taglength69': 16, 'taglength68': 16, 'msg57': '986bd949795a98adafdce973709ddc3d6ae4a834b4bb424a05502fc3249b96f3', 'msg56': '16fd869fe842c4febc34e8e7460272a43be2d7adc1b18b6d24d95f49ca780ddf', 'msg31': '60bcf0efd07db7ba4fa49a4a337bc9e0', 'mac125': 'acd1585f139a9ec9', 'mac40': '9f61fdf70147e5bb42342d8174dbe66d', 'mac41': '3b0029736bcd06b13b435d5a366c448c', 'mac42': 'bf7ea202bea7a9a47bb58acd14ec278d', 'mac43': 'd6b61671a73fbcc83b16835aa79eb67b', 'mac44': 'c1bddd0de0f086f5b7d79960b15caf07', 'mac45': '23b23b80b6f8789417e2ffec7589eaa0', 'mac46': '81c44c83ae2ba33d4dd8d9feeaf548c0', 'mac47': '1a289f915605be97f2902d86ff397a47', 'mac48': '50a1666054b34129', 'mac49': '74bf27f528876669', 'mac101': '9c2abc36618834fe', 'mac128': '6eaee10162b6c032ff73de5db55f', 'mac129': 'e4bfd3a4096966c94ca818ed7dc7', 'key79': '18003400cf7a254dc6393862e1240a793d6f4b8db8126670b37a6418167e0d39', 'key78': 'b69c0f337df43e3fcfd360e30af0d93fd821be6c00d9421b82ee7278e2a02355', 'key75': '5948c94ce32dd053b44620d22a482bc3699a486cab5daa86d7aa939f541ac5bd', 'key74': 'f9f8ba65ff0f3ad619bd7595d0fdcc8c391bab87be686b8b2032776abdf3ae94', 'key77': '9eac026e15ce48dd431541c64edd6ef1f3c18b81d5a6791b14fc7c4a2240a622', 'key76': 'ff2488d5b239fe9453fef70910b73e281aa39ce1b3c9930089f54f5242fdda09', 'key71': 'f4892f7d867d92d3405a1928c2917e1eb576d54301a167944094bd40729ffbae', 'key70': '6f5504815d05c8faddfac6ad0506561e9101c3face195208b76a805c5dcf8cce', 'key73': '6aa0da87a1639f5237ffed411b7d3b4299c46218735f52453480042ec145b07a', 'key72': 'b56137119f140ffcc72481fa11b8aef8c9bc62e33726460d737e57d37b9d967d', 'mac35': 'dbc797d48197dea915372bac1102', 'mac34': 'ce8e4d2e2f5c35aefc3afe98b1df', 'mac37': '02825f7c31ac049a60a0c96af50b', 'mac36': '09a315127a024eb3928fd3fedebd', 'mac31': 'b9af365373d40097', 'mac30': '156d09e8bd24ee52', 'mac33': '0a967c30a66ab411855bb15b76e1', 'mac32': '1e605ae41c76f63975a13af55533', 'mac39': 'ecc628a1c7f8f1eec40e16cf0537', 'mac38': 'baf7d89032113456ae6220c4c567', 'taglength130': 14, 'taglength131': 14, 'taglength132': 14, 'taglength133': 14, 'taglength134': 14, 'taglength135': 14, 'taglength136': 16, 'taglength137': 16, 'taglength138': 16, 'taglength139': 16, 'taglength21': 16, 'taglength20': 16, 'taglength23': 16, 'taglength22': 16, 'taglength25': 8, 'taglength24': 8, 'taglength27': 8, 'taglength26': 8, 'taglength29': 8, 'taglength28': 8, 'msg97': '35f1a680f6b682a594ede2b613a17531417423f3df364d6301b656edb8d8', 'msg96': '030808cd616d9dfe3ad8b7e4332f31382e982bee633bba14b249dffc373d', 'msg91': '41e6b3cbf93c7f3f563c76b813cbb864fa9b029d', 'msg90': 'b7a3aae23c58fae59d3794b0b9b3f35e89f07665', 'msg93': '684d0036569d058689def3e338bdd8f6fcbc3509', 'msg92': 'cade88ce60ee26c63f3ac59be31fdf32b14118ef', 'key108': 'e30b5b0859cee72211d09b12540d135aabb64e4a3a31a7214f6107753b2758d5', 'key109': '62400e9d760ae6bb70643dc756d2d884b53663002e4410b1313781c309c2e8b1', 'key100': '0d014e1ff44bb366f7f6d3da5ebadffa7a344682e623203f0dd6cd21ece5d992', 'key101': '684c0616de8ca55fcd9e07a9e0da3c95c08e6688cfe512af190dc9408898e103', 'key102': '14f2047bfdf40c7bf565f06e85ba20914834a84d4cb6b6b1bcd45620bc2c8147', 'key103': 'ef77577c305bfaea230b8a9e1b257c49daed53709b43c40856d218423f8bd3a8', 'key104': 'e56122ad576d1da3fd1b6ee1f27114394f6d233fe6ed164f33cc67d28f4e5dbc', 'key105': 'fbfa68cdc0f5dc849e8dbb2f10217ea99016823665647121bd54fda3fb88d507', 'key106': '7ead616ff7b913121d58439e66f834994ff073aaf3c00cfddc9afde91922ebd0', 'key107': '6fa2441c0dba65c144eb971f9301840227cbd5420a7a0346974b6ac73166a0d6', 'mac132': '438c14e754b1b2be297bcf4d7aaa', 'taglength122': 8, 'mac84': 'a9326ca65d1dfc90bf8c4e20b66c', 'mac85': '17070d93d027c6dab958d2880c44', 'mac86': 'b6505638db30ff08b9a7a80ad921', 'mac87': '40b4b1aea26f9981e3657963b53a', 'mac80': '9bef26cdb665c16c676bfb676357', 'mac81': '53c299c069acd588297149f903fa', 'mac82': '255ed467e76d45c092f099ca48a8', 'mac83': '9342a125f6e561c8672e97e56a9f', 'mac88': 'f5c2ad3e4e084dfd628925f0a2440bfe', 'mac89': '8f209dbe450434a65da95958e72f943a', 'msg120': 'c4371dd8cc322de825d38d42e859cc4dae89ef06565c5d5102f5f88c63d58d6a37526eff0f455d17', 'msg121': 'a475482fc7c663f08aae5b395c6dbe6ee49e0c1e456a1bd8a1fcba40dc349561a2a05945aba818c3', 'msg122': '0dad34dbdde4dd3415b152855b7875f0d80ae66d31c88c12b90c7293e5c4d50500607be71fef4662', 'msg123': '01b820aa77c1ff6295d7b49e0d2eb3d605a47376cba3c2e0c4495bb5a6c6ba51e7062f94769132e8', 'msg124': '9bcc2fd27324c863ec76dd461f83f76d8aeb0d866bfb03766dc670038677a4d020e5ea8f77680a72', 'msg125': 'c949eff99b6625f8fd620806e7a86a84c541415b71f5423c5eb4b12d16357741e6dd75a6d7e218e5', 'msg126': 'e17bae7b92c3ff4b198ccdb0c63504af1a8959ff7d9f951033fe314d8d05249f5c8bf932abc2247b', 'msg127': 'eb3ad6d41883cad1db4c7ae189e70183385e51b7755980053a4263c01aa85e8cbfe17a1e96f4b843', 'msg128': 'f41246343a651d7e352ed363a4c2bc010336e147551aea4c216442e5bbab7576c496dd08f4937d9c', 'msg129': 'f984b890dee1c05d07fcf37cc3b44363c9ba2cf18399a299adf448c31f0fe26fe7920d1c9b892ee8', 'mac7': '8e6c52162d77ff1e', 'mac6': '859a2c3d9b48fa9b', 'mac5': 'a72bb640a8a1fe6b', 'mac4': 'a8cd502d07a74732', 'mac3': 'fee118b1eb09f53b', 'mac2': '6fcda48f51766bc5', 'mac1': 'c6bf4ec40e6a2d3e', 'mac0': '15c7c168be50fc8d', 'mac9': 'eb589b0662b9d9848be18532b191', 'mac8': '1859ce71849ddc3f95eccefb7e37', 'key31': 'f497a9af5ad4e75f55081e7ee9b51ab9e207aab91808fff5f21356ca298bd7cd', 'key30': 'be0a506ef3b5ab88655cffed4da275f9236f617a11955f6fa7b4a110d05b870e', 'key33': '330fd3ea2dba438bb71973558b4a1af62f0c08c7262501516702cb110e9e8678', 'key32': '603a79c864e7898f6df428a1a92b08bb72ca79b8c62b8258f7a43041a3ad2e43', 'key35': '58fb89aa58caf22dd48a5a41f64ae1967d62d355be61cfb4e94728c98ef58b9b', 'key34': 'cf330bacbe5903c6a736e6ed05e8ad4537e14efc85e0dfdd5e1fff22e3ce728a', 'key37': 'aec84854b95cab093b364216e21952f74904713eccb4f5359b6aacc50deece96', 'key36': '92912c081ae0ceb79036e75827466edb9c330e0a21adc1c99a5ea09c0b84fa6b', 'key39': '799b896ea0977b290009b314be8c32c37367f1d68d626971f2d858ece60ec3cb', 'key38': 'f0bbc3629155c23cc1c89d50cefd2580297371d6ba3fd0b37751012935f8a7a5', 'msg59': 'f54f0ba9cc1fe7777b078abe589c85dc194ce4b6db4958506aca969cbc73fa90', 'msg58': 'e5deb26c4d74d1b0daf6061db640d2fb918c9401dcdb5bd23897f9c72e7659ef', 'mac79': 'd07b20ffff5a9e8f', 'mac78': '7920b4b450613eb0', 'mac71': '76bf75642797be0d102709c3f850d29e', 'mac70': 'bef9d6fab1b7ee6c4b8c2570749c4fb2', 'mac73': '10c26ff022a2e686', 'mac72': 'c93bcdc9a0bb5724', 'mac75': '8b8e63383e654676', 'mac74': 'a8c02cc464a73828', 'mac77': '3bf82be6b2ce9c35', 'mac76': '29010d8bf253924a', 'msg61': 'f5500ba3f171a618013c959eb29a6993c3dd81e82baf2ebd5c481431cae5d478', 'msg64': 'e31acf54ca88597567f396832c12310ebd088f725539574e665b32377fd0cfad', 'msg65': '780c980f85fdb81390e048f66814b9bb18469707bfef03cb9c1e63236978587e', 'msg55': 'd1f6f4a4c8331bdb5ff96a4b3833b2d0d036840a5747a102bf5db21013293afc', 'key140': 'c85d5093e54bf3a216e4e6cad34e098288d5c69a98df38cca12293950214c043', 'key141': '74c77dbd896f0db3f487fa8bcd16411e1b564023475dc7f6d1fc739842e837f6', 'key142': 'f340e21036e2f13ce38840cef154352394be39921de7bb5a1b2977d8c7f3f8fe', 'msg54': '5a62bfbb4035fb29d03813bcc3959b8a6f9ab7f33a602f6f54aac68aa60fc82c', 'msg68': '0465b6d4fbee0c3eb12d6e02f012183211e34ddf6edf5ede1a2208cbcfc8024f', 'msg69': 'ded7ad1b6b5eccdd0c103e3442f4398ba5d9a441e1473345ffb5d4e3e6fc4add', 'taglength87': 14, 'taglength86': 14, 'taglength85': 14, 'taglength84': 14, 'taglength83': 14, 'taglength82': 14, 'taglength81': 14, 'taglength80': 14, 'taglength89': 16, 'taglength88': 16, 'taglength78': 8, 'taglength79': 8, 'taglength72': 8, 'taglength73': 8, 'taglength70': 16, 'taglength71': 16, 'taglength76': 8, 'taglength77': 8, 'taglength74': 8, 'taglength75': 8, 'msg48': 'fddd347d26543a66bcd720ab4a585bfd883e08142215d4febb841ab7327f4cf9', 'msg49': 'aa70cb62983bf1a00c9020c8b57220143312324c7c9d983d7f59586608f03ef4', 'msg42': 'c4647bc2fc0fc6419f0872b5156a3fb1', 'msg43': '7a635fb4849cef947c2b1bc50578b999', 'msg40': '805068b580ba28b9e95edcfe38597ea4', 'msg41': '879152e74f8e9c834a73ab5af6170b99', 'msg46': '303e759bfdcb3665b59d0a4634f6c025', 'msg47': '0280f7f05ac772ce11f91c4f541a3bac', 'msg44': '9d514d7b3e03b605936b8ba49cd8ecc8', 'msg45': '9f22b2aaf7e16404daa708789b4aa937', 'key134': 'b2b2a9d3573124b7e324c79a22f6e4cc2e2a7f9540e4bdd8c7ab99f0b76dd9de', 'key132': '8d7e5ae84cacd6a8b7a76c9328f8d0a4847bbdb50614dcdd3e9ee8fc59241094', 'taglength127': 8, 'msg117': 'e319d53a2d253bad257ea0687a32b0f5d84823bf51983f8201e09ffff213', 'taglength126': 8, 'msg116': 'bff6efda837d1e3ec6a4174907fef144b7493f099b46927371c84013d60a', 'mac140': 'e49ffb5e72fd5a1590d94d1a2976a8cc', 'mac141': '4c080c823836d56af4ce2fee762ededf', 'mac142': 'a4794b9335a5952a83113a03b216bdce', 'mac143': 'dd4c68c701db75d7b1ccc640e64a3b9c', 'mac139': '9482b00aa3267505842ae289dc0826ab', 'mac138': 'e972f63557a422eaa2e82f743f298608', 'key68': '0956ac29abe5e2195c8b07addd967bcf3975457e4b28b4d980f54579df5dc804', 'key69': '0b4cdf53e41aae7ed9175eb2ab915ac1b802811b7a88cce75195315282e8c727', 'key66': 'd1c7a48083e10494e90fa382015f23f223e125909cba0ebe9a740b85489852d2', 'key67': '9b7cfd0387a7ee0e039b1f9d2fc7c8572aa023d9275822a0c4ed612998665a56', 'key64': '6d2d93df2ca64999ad59cf6c469449bc5f6f80fe28b035be87ebb5e755eead3f', 'key65': '0ac3cd7cb720c4ac2903b93c727e807c2e13a79771d307cffec8990aba918b8e', 'key62': '72642e20ccef0094f04305bc1251c01f6cfdd2ed3d161a92128c208b44ddb478', 'key63': 'cee9c51ff6ad02098e242158dcc9c8e8dbfbe2caeceaf144c8b7a518b9d7ad09', 'key60': '1d53c4a5187084603280775df92aba11a2204667fb477c05a11800d07346cbb2', 'key61': 'c0fd8a84683399851a3e56f610bfef1a13aa9433edef8a45205a7b1cd8b71190', 'mac26': '6fd7dc05693342df', 'mac27': '4abcc5b36bec6b30', 'mac24': 'a918731cbd90df99', 'mac25': 'eba1c77a5866f85f', 'mac22': 'd2df5aceb95eee68c539dd9133550448', 'mac23': '3547210f0075ead782019e4282277d40', 'mac20': '1406c02c53b10443f2f6dda9f947c74f', 'mac21': '011a3ea790765c0fdbef0175e5fbbeb6', 'mac28': 'a4ca0eaaea750a51', 'mac29': '0ef4a96eae0ac075', 'taglength6': 8, 'taglength7': 8, 'taglength4': 8, 'taglength5': 8, 'taglength2': 8, 'taglength3': 8, 'taglength0': 8, 'taglength1': 8, 'taglength129': 14, 'taglength128': 14, 'taglength8': 14, 'taglength9': 14, 'taglength36': 14, 'taglength37': 14, 'taglength34': 14, 'taglength35': 14, 'taglength32': 14, 'taglength33': 14, 'taglength30': 8, 'taglength31': 8, 'msg86': 'b67b3361830adbab28d788aa5223825e938d02e9', 'msg87': 'ee39920d794f705057fdc8630d4cceb71b46b3cf', 'msg84': '4f02445e9f9b1e259137336a71c24e1d87351a90', 'msg85': '8fb34ca1b3fe8bcdbb81710e5caef888fede6975', 'msg82': '053ef4a0662371eb7f27b27b18c6da358cbb435f', 'msg83': 'e9d78d17e4f15d8b1cc899d7763fe5224dd514ff', 'msg80': '80d1e5c24fec371d8a99578c10c9bfb0d13f728e', 'taglength39': 14, 'taglength43': 16, 'taglength42': 16, 'taglength41': 16, 'taglength40': 16, 'taglength47': 16, 'taglength46': 16, 'taglength45': 16, 'taglength44': 16, 'taglength49': 8, 'msg38': '0db31463cb84b779d5c5172d78dc14b4', 'mac133': '714fe23cf15667648a3a248da6bb', 'key9': '112686b9955219f92dc84127f2cc80cd18504d95736bba5b3a0654860cd94b99', 'key8': '8c04c43d195cff03a276d5546f0776b2d1af54d8632c849390ce67d3552a8902', 'key3': '09caadfecc135c926f4c89c5eae003f8a9d5c31485f77dcaf43375207c419429', 'key2': '67b480f440d8493bc86767c1cfc2449d244c4bdcab299d6bb04506377b982f92', 'key1': '45f0fcdd9fd89c342fa6fa005db06958adf72e7643a12cc9a6a9c145c4d5ebfe', 'key0': '054c6ed23a79c57793d6b6d13eeb77d0b94d18d53773081f45c5dc85adf64c6b', 'key7': '5f8311e89000a73e886bb27deb241eb12146ab6d068a40c8e36983a69e81a639', 'key6': '357cb06be56649df0cac89285892b5465ab6065b3bf100b2ab7eff011b5e13eb', 'key5': 'b7a4a4fcdabc18addfac8acb6b9373776fb0e21707bd7c4ca27ec12564999192', 'key4': 'aa803acd8206c31a1cf30674e45ad929819341f54ce08ac9075097cacce4769d', 'mac137': 'cec625f246e4d7b664617022cb0fba3a', 'mac136': '823cb1f00d96f3e8460051985a286015', 'msg139': '19cafe7bed47d648c5458d4a8bd1938050879e189e9d9e900923f41b0888de46036136dbad665d05', 'msg138': '416736b9505d2f7c3c37050b94595c0fb1cce9f5969179e71b3535fb4ba624aa0a45f183fb3cef20', 'msg137': 'c61ae3a8aaa3e9f1fe5cdef979734403e2e04566c748028d722229431918c52d55b05b98d52b3276', 'msg136': 'b7f3d7d2a0e6336141533d930251bfd5256a2f93fbfa87b558d8516a44380124f3d088e4f83a26b7', 'msg135': '1e2b08510a9389e6443bcf9bc9fbe0b4e2c96d67f8384c85a93f295d1c3c78de9138adfb3c6db054', 'msg134': '3b3d55a22ab949d2baea5028b545a34e2c62014f0e47edfdfae9169052f0178f91bb60f4dea4748b', 'msg133': 'ae6c9467bd3f5b9005578113d617eb174b79bbffc5b16a37970d162d03201d9d661fea12af8b0faa', 'msg132': '4fe35bc6bc26387ee6f03d87c2b814b663909940b60533c46f47658c438aa01058ab5cbbfa1767f2', 'msg131': '95c2316ece58e62756e51461a159f92c0ee613e31d61edb0ddea3a52a3cf201e01aed644f6da7154', 'msg130': '9fa32eb2eb66320900178ee7ceb8cefb570f33d008a7a9f54918f95b538840fe4172a0c76aa635b1', 'key22': 'e00018d73a216a057d262b90b347c605bd2b53f08b51685a93b0328f7b9ac425', 'key23': '0639075867a556f43693c448aa27733432e86216c5c454ee73550dc04162c43a', 'key20': '0280f010d2d8d2f4cc39078aabfcd70d8a69bd1c5e270dc8c4f7d9ecfda316bd', 'key21': '582dd3e260d2e7dc121e230738fcd644ba093cb3ccf54f31662be11ff4b4e866', 'key26': '5a5dd84deff840ab5299442f57127dde832aa45a7942a6acb639fb407e8e3431', 'key27': 'b8ebf75566a0dcdb75d4622931f257a2001576e498713b4e6feff6c073171fa1', 'key24': 'b3ce985777ef2cf5c6c1bb80c621b963c37cf70123ed2ff89ca5dea7a49051ee', 'key25': '0a739baccba4ea574027fb9381c25067cec7bde92e3126fa55ef8a30cb804014', 'key28': 'a6db7e3faf306ceb875c14b529b87862d5d7f0bcc1687c920c5e5901f34fd2f2', 'key29': '021d638149b78a6f95d08bc3d0b6514fd5ec1ce08ec6c9705932549cb1d99b58', 'mac68': '99230ff6848d9428e7d9003b35ad20b0', 'mac69': '24e2cbd2f1c938d4b1a309e1d6366f47', 'mac62': '812b330fe07c98093b4a592173b9', 'mac63': 'edb11de267d20263b94eca2168ef', 'mac60': '8250c84156099a89c26532e3a228', 'mac61': '95dc0b2e8674efa5fc84d5363fab', 'mac66': '82fa66f5430ec574b9b1d95b089e360f', 'mac67': '056a6e9626033934b5aaac8dd4c66f0d', 'mac64': '2e7886c3329a325c9b35744045f3e8f3', 'mac65': '4e4ccec8e3411eb961ee614778464433', 'key97': '4745ca6ddac1f64e5447ccd3ef350466c15cf9879b56aebf32190fd57ccd7a45', 'key96': '497bb641df76c93a9996c769d4cbad63207f11f959266469131774d53b9a34f3', 'key95': 'a30a1ff07e415fc585e0aba6d2641e917e53b3e972c5b61a7a23787b9c2f4778', 'key94': '220208365d8234ead3a6765b1e32d28a055bf67f467e1d9893123320dadc3a23', 'key93': 'acb625a087bc97076142020bc9f08226dfb6596709b14073e84efbca8bb1304b', 'key92': '6b4bc14f3e574cde494f562b643f09c9a376c8a020391340fab9ab769d42f71d', 'key91': '44775f52e59925b6d4b54ffbfba1abc73559941a55f417de69d654bf4026263c', 'key90': 'c38b371ce499021a06180f97eb9b355750b3501b0bb6f17d56bf531b6bf691f7', 'key99': '95f188719b999e471190eff07f4beda8800ba4db23b33f9590d6ce3aef154677', 'key98': '3935c7b37a32cede750645e656bd516c0335ab55a28d47d85bdb33d55f1dc169', 'msg28': '18003400cf7a254dc6393862e1240a79', 'msg29': 'eabf402fc0e0348b40e6d8c176f8c4da', 'taglength94': 16, 'taglength95': 16, 'taglength96': 8, 'taglength97': 8, 'taglength90': 16, 'taglength91': 16, 'taglength92': 16, 'taglength93': 16, 'taglength98': 8, 'taglength99': 8, 'msg24': 'b52feedf70b95cac035bae537508d492', 'taglength59': 14, 'msg77': '6f22c70f3e88565da3b01b91ba9144f6346b1f69', 'msg76': '97d6475b176e79172c8e36c2c245e677992365ed', 'msg75': '91a880d1c6df9791b1d8bd33d0abf3c2d2da08e0', 'msg74': '35d0c9aefccc1f11edf10b7d5bd41e50fce0666f', 'msg73': '137c543f1be0f0545ed328bc384de44a80d95309', 'msg72': 'a9d459eb46aef8c6c92ea76fe9b78b89912070ba', 'msg71': '34848a0d716a41eb0d3545ec27d7d42311a8f259044fb80d12e6efb95d59dd57', 'msg70': '969b751ac17cebad68a06c9f712b1fce4f8f3ae31a52be31e51262e04cc6cc4a', 'taglength121': 8, 'msg79': 'bb495aaa24a3cf032f8468c57d1871a0559b03d2', 'msg78': '71f712ad48a2bfda688b68f225871f103b30a053', 'taglength120': 8, 'key128': '78ba7206840b60cfab50a9f76d966c2b970b7226c371c9ca1ecdae6f6e5fb17b', 'key129': '2638ae370ea82c98a010d5353a29122a9b8aaa6cf26f7eac3ab8787fca35bebb', 'key126': '6e3b0831780efd4b7c47bffdc49b82b8c83023f4f3520f7faa6761148b254a2f', 'key127': '8561469c3979a2dbc538756c2ee40061d5a7d3d6ed35e2be32aedbe2d8c6b726', 'key124': 'ea1ee750f8c5c293f8af86fbe5bb2ceca30bd94b93500ee465481e092d85e67c', 'key125': 'dd8d61ae1cc32b46ae3e65da71b8f19084220790fd8d870bda4a8d7c3b50462d', 'key122': '8d5004e47e6c1e87fcfd90044906dc2713562cbd00c28af88ab253150ddfe93b', 'key123': 'c63cb99441f16b4de7cdab4de3201cfe0c356d9bbad4d3ddd80bb7d83b2fac1f', 'key120': '4da1eedb807e2fcdcf6835b668de4f37bd9c190be66efd854047fb3a5b8da6fb', 'key121': '34a272a555de2691b87c3acfd6e10f8a354c73a93a5f18663fdb443ce5abcb07', 'key110': '3ddb7c5bea6c43d54c122ec1c33f334c94b2694131a66cdbbb4903d7c56f00cc', 'taglength125': 8, 'taglength124': 8, 'key117': 'e04d5778c583482b5ee2f121e7441032a864c807784d442b80129d6541c0fe46', 'key116': 'd6ca073568492a2ab03a389ad1c60714ed18663ce810011d6e3c85c1370404ff', 'key115': 'cd3de43cbb5437b53a5fc253e1267a48ec88108f3b6f197d9e036b994f1ecaad', 'key114': '72f132255a02e595a877a2490823814c6aff21089d72e4ad20cf5cd73520006b', 'key113': '387a7284cd209037cc1deb6f8415e619027099f2d70abee51b2cce94b1bc6735', 'mac131': 'f1a89f0f8f21243059371e359b32', 'key112': 'f193070e8379c6c2d483f68e9fcf4b22691c98d6b830a03480782ab6deef53d0', 'msg106': '31b61811f453d07b49e4b44f8a2618e5c0d45c6d7228638bbba046459ffe', 'msg107': 'a2d047cfa06030817c32ccbdd92cf34a70ee5760a912b90c6cb25dd5342b', 'msg104': '112686b9955219f92dc84127f2cc80cd18504d95736bba5b3a0654860cd9', 'msg105': 'c61ae3a8aaa3e9f1fe5cdef979734403e2e04566c748028d722229431918', 'msg102': '5b8b35371ed5d904ccce29a38423f0420f8fc8a07bf4e0c505aafdf13d16', 'msg88': '8c655e9867b50af956f465e4e78dfc3ebaaa1daf', 'msg100': 'c794803365e2616f594d89fdda8201945a7edfc2b5f51878aff596c99dc7', 'msg101': '587ff9eb62c43e20f7afc205327b22d43b436194c8738a32e47d96d3f0cd', 'key111': '93ede0f617fd1e30c515a85a3349d5bb99bec44828b14cc79dba36341552aa64', 'msg89': '35cfd0945f680049ac7c1461a9f49d371720fabd', 'msg108': 'c741600aebdfa904b97dfdc4892018a29d14eb60043c9c18bfa6cd722362', 'msg109': '1dc0e0189cbcc61ab9381427e6f45c20d3ec7701d62d115b90e86804cec5', 'mac130': '10b1720fa8a0260a38c76f6b5773', 'msg119': '93677d7bf78e544fa63b5e3fef557703bbedfad665c3381ecc0c224fa772', 'msg118': 'f3f84ae5556e51cfd47cccb46357e89c3a6541417b53a7c31562229de801', 'mac104': '59cb9988538d0c8df03acc76412f', 'mac105': '3ce5ff543c5fcdb0ee5fad88d4db', 'mac106': 'b70e61dcc75defd65e125ea7d42a', 'mac107': '02f93dda45051f1f25113f9c4323', 'mac100': '8062afec7d2c3b2f', 'taglength38': 14, 'mac102': 'a9d892cd9e218317', 'mac103': 'cba38d4063f177da', 'msg81': '9c326bc3e27d71382de4aa8795ec15ff3ff422a3', 'mac108': '75f3ee7c3e9d20c45d81fcfcbfc7', 'mac109': 'e624f239d65fd351bc5f7079a322', 'key59': 'bd8fb3e91324756985364a089296d3b202402aecd48374187862b5f43e3be965', 'key58': 'ad746d036f96113d8c1548b8fe59efababfd442fdd75f8fef1f4857a538cc1f1', 'key53': '5669e9ea56f8cec8595c9fa805b1d0b821b405a5fa8e8e0c05ed2d32c55920f4', 'key52': 'b5100b28153317df9dd4cd366e1cfec983b00b83efe34e6c662ab5c1ffd0b04a', 'key51': '0f93eddff61dd7cc71258f734f52efd7d6e21432abf661e7f230c7b8b5804439', 'key50': '2d8eec3d3dd6ecfa165d64abee515a9802c819262c046f44b8f6190574027c8e', 'key57': 'c81e8b2909edaa67c4a21aae6b7777391f9c88c773e51fef73c041b4e5698759', 'key56': 'e1e8d0cf9efee1dee6047e3f5b1d095c0f27bb18a44ae807b1d185de6839e728', 'key55': '02a5b930a5ed90df3794c215786ab0397f3ebdb759f50db0f3d98df039333320', 'key54': '890be89282de732860a4429aaf08648b1566d4d988304f23bf906389e64ec9b3', 'mac13': 'afb96c5f9090007f504b1b91eb4c', 'mac12': '06e51e4fd1a7f533a84c4a9c41dc', 'mac11': '738982769bf59c8520ea165009a2', 'mac10': '8c70553a37daeb4102fb01016992', 'mac17': 'c248d65eff12ca53f340153a1b354ce2', 'mac16': 'ee0d83bf573b02e5331f2efd571e5f5e', 'mac15': '336fe8f15fc7bab705dbf8dcf962', 'mac14': 'd1a5136bac2e78710b124015722f', 'mac19': '03376c9f4455b6cd89a793dbfdb5cdff', 'mac18': '5e99a7dd94f36b02a46732600d0ffdc6', 'taglength118': 16, 'taglength119': 16, 'taglength116': 16, 'taglength117': 16, 'taglength114': 16, 'taglength115': 16, 'taglength112': 16, 'taglength113': 16, 'taglength110': 14, 'taglength111': 14, 'msg103': '437b46c036d6e03353551e886725c97321caa8b21611a0a007461e0867a8', 'mac135': '33717ec8261edc97b24cc5d6dfa7', 'key118': '171688cf5527308662a6035c308baaa8c984a832e73d8c97bedf6bef1dd78dac', 'mac134': '34a1affaceb67801c167ddc2d183', 'key143': '37a614462c39462f380162be20c7de22ad37858b9a367727b176715030474e04', 'taglength50': 8, 'taglength51': 8, 'taglength52': 8, 'taglength53': 8, 'taglength54': 8, 'taglength55': 8, 'taglength56': 14, 'taglength57': 14, 'taglength58': 14, 'msg25': 'fe56d107e093b1e417c8cbafac67188e', 'msg26': '20bea13184760d727aa9776f12778cf2', 'msg27': 'c48551b46d0a89fc01443529251a32f4', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': 'ba8b54bdedc98e14ffac361c04ab29f1', 'mac112': '322e9d6013e4975939ec95ce9a4d6197', 'msg142': 'e0d2c1d36de0b2e5c27c5001d455d3894b06c2f886ff1775dfc39ea830559ecc96ecbb0574ee1bf4', 'msg143': '3f700f4f2706a4ca492ad7911799455bbbe10e57febbdd1a689a22dca884a2e5372132423912bfbc', 'msg140': '15c0bb49cf99592b319b1cc8ea0a462b61fca2beefbd5fc84d711e3548fb4a96bc1ea868bfe22f99', 'msg141': '3292490cc0a230571ffdf0df6f98bfd2b1bfc7847bfc7a6ff03a2679f02ac9758ce626ebbdd5181c', 'mac111': '3275f4e7ee4b762fbd961134f497', 'mac122': '828ac98b94d0ec95', 'mac110': '480fe7525bf1c14ae2a23c8222fc', 'mac123': 'f12aecc1b62e2e6a', 'mac117': 'cf9f5d6ddcaa29e11bbdd951efbcee2e', 'mac120': 'e872c3846973d9c8', 'mac116': '7ebfddfb2985b4908dc7ef33eb22998c'}
 
dict_cmac_tdes2 = {'mac121': '9524', 'mac115': '0fd74e2129110ae8', 'mac126': '7b83', 'mac114': '0ec0bef1953be953', 'mac127': '08e7', 'mac124': '352b', 'key19': '045ed0735e0dd58079adf1f429c76d6b', 'key18': '0d92388cf8ec138551b9ad454c2f40d5', 'key17': '73e0bfdfc2f4b5a1a746a77ff8b57016', 'key16': 'd5a489c873b3e958c420c22abf9783d6', 'key15': 'b6923797cb9d8692a779e9cbc473432f', 'key14': '8f7a68b9ea92da791683ab263b105279', 'key13': 'd5e63b8502e9cd494fe554e0588a5746', 'key12': '51b9ad3e7383017579bc643bbfd39d5e', 'key11': '7c45324a4c982cae40e5bf92e3c70151', 'key10': '10ecae98b673eab6ea323b2558200d2a', 'mac57': '03e8e448', 'mac56': '090b31db', 'mac55': '3b1b', 'mac54': '3d42', 'mac53': '09c3', 'mac52': '8015', 'mac51': 'f51b', 'mac50': 'c3ec', 'mac59': '0b8d61b8', 'mac58': '1d62c5c9', 'key119': '8f255b439864c7b68ff4043ecb251097', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '7594386be302fb3ddf751aad5b4fe57f', 'key81': 'd5921c683d40989de938238cceae8649', 'key82': '085d918a46c71ad93e1a40cba179cd6e', 'key83': '38453bfeecec403120896ba4c8977c0d', 'key84': 'f829049d07162f852f70bfd304d32a15', 'key85': '6b5494078f13205220f8794c89a8fb57', 'key86': 'a81904bc9b9dba1fc15e1ffe2f9e04a2', 'key87': '49a8190b9740026d6210c4619254b0ad', 'key88': '3bbfd3a81f3d16d6e0a41f100ec7fdef', 'key89': '0b7c2f704fbf85643d45f14c0e6ec419', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': '2e4b35a5005ea78fbcfba078c9bbe266', 'msg33': '54b66e5e36ea882d', 'msg62': 'f88e9126b68a36ab14f0c40246f42caf', 'msg63': '594abc85f9a24e41b0fb0228340b473d', 'taglength18': 8, 'taglength19': 8, 'msg66': 'a03caefadcd82fb33b590f28dcb57d9d', 'msg67': '02558d41415f57639379193230cce4c2', 'taglength14': 4, 'taglength15': 4, 'taglength16': 8, 'taglength17': 8, 'taglength10': 4, 'taglength11': 4, 'taglength12': 4, 'taglength13': 4, 'msg30': '44568380ecafc222', 'key139': 'e9d68f1cbf9e9eea6eeadc49ef2f042f', 'key138': '2f25736b91e5cbdc5129bae632977fbf', 'key135': '2cd3970e91c4ae5251499e9d8f1cc28a', 'msg37': '2d115c84227d794c', 'key137': '26549eba2f6734d6103ed5a2b96243f8', 'key136': '4a6b02087ac85de0cd7515dc3beaa483', 'key131': 'b52567dcfd7c02516240157ffef88694', 'key130': '7916192c979d2f3737e6d9b008988f68', 'key133': 'bf2640f7ef20f426329dd00e32df89b3', 'msg36': '538b0a88c9c4cc3c', 'msg35': 'eebc024e8348bc43', 'msg34': '47e336f8ef04cc90', 'msg39': '7251cc80a75bf18b', 'taglength48': 2, 'taglength123': 2, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': '7b7b62eacb2f9b7c9c682c5a95020de6a10e9f4f42d29db628', 'msg114': '3b189362e0922bc0944faa6290f42dc1fb5d32345f3faab65a', 'mac99': '9f22', 'mac98': '0bcd', 'msg111': 'b21eca26636c064baf9c7829b7dde97923c7e1ae678f10ce44', 'msg110': '14766edc7fffb895d3c9436d18cdfd304145050d0b03b38e28', 'msg113': '16a9667b49ec4ef3952e52cd9ba3a5fbd4e74519c09239a141', 'msg112': 'b198ac84723a59098172c0eae18b10666459df8f661c7a4eba', 'mac93': '5708d5cf3014b1c6', 'mac92': '787b6e155c8ab924', 'mac91': '2f34568319d18a67', 'mac90': '89259115b55f1974', 'mac97': '444b', 'mac96': 'cd15', 'mac95': '7e233f570a847e1f', 'mac94': '47229b262b054e72', 'key44': '5e45469e2ab3bf2a7a1332c4200eb519', 'key45': 'c773ab46ce94df13add31a042f683e1f', 'key46': '2f25736b91e5cbdc5129bae632977fbf', 'key47': '4a7c6b834f9dcb625d3229cb80024901', 'key40': '29fb9834f231850d701fcefb7ad379f4', 'key41': '759820d93440b5b925f834800dc85e76', 'key42': '07380d38ef94f7cdbcd364a1c8ae19fb', 'key43': '9e29922c0bd5fdeaea5bb98c75080e9e', 'msg99': 'ce19153c6151d8f18a44f3026c9a3d7e32e1df75f5dd5af4e0', 'mac119': '7245be79b6252729', 'mac118': '544835a10384b97e', 'key48': '7f3d52ce1352d62923649da46e921c49', 'key49': '89fb7a269813a1ae252c2c19fd08b575', 'msg98': '786a3f31bee1451a48a9f62fd6d721cce15225aace34be6068', 'msg95': 'fe0d7fba090a6f757436dd90320c6bf41b', 'msg94': 'b7556b478ca35d1f3746c33e2bb7c47af4', 'taglength109': 4, 'taglength108': 4, 'taglength101': 2, 'taglength100': 2, 'taglength103': 2, 'taglength102': 2, 'taglength105': 4, 'taglength104': 4, 'taglength107': 4, 'taglength106': 4, 'msg32': '560b42c91e1441c0', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 4, 'taglength60': 4, 'taglength63': 4, 'taglength62': 4, 'msg51': '51489e9d8e1cc38be7e914ad8640b12f', 'msg50': 'f6a7d248ef10dd99ed87686e4ffe6a72', 'msg53': '9f95b486f1bd1fdc66337fb04e954da8', 'msg52': '9b7ff037c26f2b9d85850cd49188c988', 'taglength69': 8, 'taglength68': 8, 'msg57': 'ec6734c3220da489cf4c54745cfa902f', 'msg56': '1a1fd2e6d6718edbb4db7dc31f7176e5', 'msg31': 'f17618903d6800e3', 'mac125': 'd85f', 'mac40': '3a1e35116910c475', 'mac41': 'bad444627298c5db', 'mac42': '8fa6147e325e0b20', 'mac43': '6ecf3872ed9721f3', 'mac44': '60540fe5902a1820', 'mac45': '4e81e4a969345ddb', 'mac46': '5df42c2d559719eb', 'mac47': 'c5f11ecd2a010170', 'mac48': '7391', 'mac49': 'ec5b', 'mac101': 'fbb1', 'mac128': 'b7b0e897', 'mac129': 'a2417fc3', 'key79': '16762325c8d3fb1c0ec72a4a3bec080b', 'key78': 'b37f6480b0c41340fddf26b0611c76f4', 'key75': '10e9c14adf46915e195edc26e00df4b5', 'key74': '80c719ec86200280836b1f3210231629', 'key77': 'bc94a13113a28f61511c40ae8592e9d3', 'key76': '497abc264313ab73383e9b68cbeca252', 'key71': 'c71010ec803bd31c92ae1a8085435237', 'key70': 'd35e2aa8fd43a2192a5ee0ec4c15b0f2', 'key73': '267a61f49edf1089a4072cc21f266294', 'key72': '80e9efd91f6e85dc1c64320b268f157a', 'mac35': 'de9ec742', 'mac34': '6bde69bf', 'mac37': 'd1362d7d', 'mac36': '491ecf23', 'mac31': 'c5f1', 'mac30': '5df4', 'mac33': 'ed2440d7', 'mac32': '6ceb6f93', 'mac39': '701e99f2', 'mac38': '3638fea0', 'taglength130': 4, 'taglength131': 4, 'taglength132': 4, 'taglength133': 4, 'taglength134': 4, 'taglength135': 4, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 2, 'taglength24': 2, 'taglength27': 2, 'taglength26': 2, 'taglength29': 2, 'taglength28': 2, 'msg97': 'b5908835e46526433d0e48c4478c3ed67610c15cf1b3da5198', 'msg96': 'f17a05de16935b392e10da19b546131edb7ac75192a49f0ae5', 'msg91': 'd214e3220e44e2bac9cb6913355c6c1f0f', 'msg90': '60f1277b8c5e471fca623b812fd05b218d', 'msg93': 'ef6302a3f5536df39408d4667fbaa488a0', 'msg92': '309195c476cdedcf566d96808657a91695', 'key108': 'ab407a452c971ab9f8387308f1e301fe', 'key109': '9e4c6713c7753de62fe0c794624ac725', 'key100': '200158ce9d9d923dc76d0e923485e30d', 'key101': '5b9215b932c870e98c73d9cb3b0d5e85', 'key102': '1fb02cd95e611961733b79b320aee652', 'key103': 'ba40c4e0c7daf494e589e5e0ec38b9f7', 'key104': '7f67bc7c2cbaf292f2a17c64ab8fbad3', 'key105': '6b2fd3c745ec0240dfe3341904ece5d9', 'key106': '5dc4153e5e52ea804a134349e0c70797', 'key107': '2f208cfd3ea80e5e493bfe9deca20210', 'mac132': 'ea082ac1', 'taglength122': 2, 'mac84': 'ecb4ad5c', 'mac85': 'f4158065', 'mac86': '48b9a0b5', 'mac87': '612be96d', 'mac80': 'fa460dfd', 'mac81': '2b3ab4ea', 'mac82': '24855f5f', 'mac83': '4deee7dd', 'mac88': '49a6988d0e1af21a', 'mac89': '47e7d2809ac66abf', 'msg120': 'c33ef77a593624f4265c4906b69eeb2b657bdb041fbb15ab695de845a5d1', 'msg121': '22659ca56e921d494fcf07e7a196bde77ea8c83a61a51f918bdaa5cda65a', 'msg122': 'e06f2d645cd1ca874653bf7551f1e82cd2b8f03c6ad9157ce6fc2bfa63d6', 'msg123': '27e58f136e53b58d7a0b3f1b8fca4482348f19d9f1502de058eb3093425f', 'msg124': '2669f974f15e61a65870931a22dd22212d9f7698b09c2abdc41eb2412382', 'msg125': 'f8ddc4fc7cb4515f779677caddb2770d89899fcedf001036b0b3c5ea5d8d', 'msg126': '2d0e694fe6b63cbd3162d5586cc3b5ed4a9732cedf6f25bdf7b6e40cacef', 'msg127': '31765a889fe428193b61fcf8cb6dea3b1c6d4f1999f3084f1b40e1c10307', 'msg128': '85f137f579652491bb96eb6cde595e21d95ac9d70a0d1ed07be74f3f63cd', 'msg129': '8d40957895a04c0eeb99aa581a1f2212c5d51c14307f986c03ba15b04aeb', 'mac7': '9ef5', 'mac6': '5ab1', 'mac5': 'fa8e', 'mac4': '778b', 'mac3': '20fd', 'mac2': 'f59d', 'mac1': 'bd6f', 'mac0': '58e0', 'mac9': '282bfa31', 'mac8': '6108ab6e', 'key31': '4a7c6b834f9dcb625d3229cb80024901', 'key30': '2f25736b91e5cbdc5129bae632977fbf', 'key33': 'b9857c79045438017586c419979d468a', 'key32': '7f3d52ce1352d62923649da46e921c49', 'key35': 'f7f40d0419d6d986408a04b9ab618f40', 'key34': 'f26e380e297568fd5e681598ab08da8f', 'key37': '290720328abf9d08d691dc7a4a4f9e97', 'key36': '64e615d94ab079a21fbcf2cbc2916bc2', 'key39': 'b9eaf75467a1dcda73fbba2fa7ec7f51', 'key38': '4915347c1a8f45265de6ea2af49e6bdc', 'msg59': 'ecb1802b98fb04c0b35338af8734bde2', 'msg58': '135e6ba7386b0badb38c33d98943aae3', 'mac79': 'd751', 'mac78': 'e34d', 'mac71': '7f4606909a3512b0', 'mac70': 'e1f597d392ed91e3', 'mac73': '57c1', 'mac72': '0ec4', 'mac75': '8543', 'mac74': 'b21d', 'mac77': '4e0e', 'mac76': 'c0b7', 'msg61': 'b6b8ffb69db3467db36f54c9af1cafd6', 'msg64': 'a5af1a701db8f25a4e9c255dad878517', 'msg65': '73ea52a3450f4db0622dd2c091c1fdd0', 'msg55': 'c0fe84a4e045f8acd57e413168a18b7c', 'key140': 'e60729ec04c1f1ea4c15f1b0a1ada846', 'key141': '0e08e3ef2cc1ce324f0e0b4f04cb7086', 'key142': 'da5d5d438c9dd3763b9dfdbf89f1947a', 'msg54': '5a6e46b3fe16d1c6e83135bce0f71baa', 'msg68': '75bf9d404f2ab62d28091f21fcb6d9eb', 'msg69': 'baf198eb89a07aba02c49fda2ed4efa8', 'taglength87': 4, 'taglength86': 4, 'taglength85': 4, 'taglength84': 4, 'taglength83': 4, 'taglength82': 4, 'taglength81': 4, 'taglength80': 4, 'taglength89': 8, 'taglength88': 8, 'taglength78': 2, 'taglength79': 2, 'taglength72': 2, 'taglength73': 2, 'taglength70': 8, 'taglength71': 8, 'taglength76': 2, 'taglength77': 2, 'taglength74': 2, 'taglength75': 2, 'msg48': '560b42c91e1441c0a192f16f96ee68a6', 'msg49': '1452a5b7d33cb84beea394c3a55d09bb', 'msg42': 'bcd26b81519cb9d4', 'msg43': '2fd25348f19054d1', 'msg40': 'e3cb9c7e045e3ec0', 'msg41': '2669f974f15e61a6', 'msg46': '44568380ecafc222', 'msg47': 'f17618903d6800e3', 'msg44': '6dd1d912a79b5847', 'msg45': '77a6563e8eb56e65', 'key134': '265797d5cbcb529d087c7543a24c61a4', 'key132': 'c70b753dc1d9167640799d38fddfdf5e', 'taglength127': 2, 'msg117': 'fbbd97971f5ed1d9ce35db4a0c0bee91f25f1cc849ab87db57', 'taglength126': 2, 'msg116': '333e2aeefbfafbab73c34fe46a3b0e72a03299bf2c7753361b', 'mac140': '562ccf185cd9850a', 'mac141': 'fa8dd292219d0a60', 'mac142': '3642773f3252bafa', 'mac143': '2dea013484637b6f', 'mac139': '68f7b8234e2ccd7b', 'mac138': '0a2ad3d6fe3cc833', 'key68': 'c170867fda20b3851352ea8926cb948a', 'key69': '40238ae023c22ac443bc0b253886e60e', 'key66': '8aaef1d90be086cee5c4bcfdf16ba7da', 'key67': '64f197fd37fe3126fdf868d39ba21fe5', 'key64': '9ee5e65bb9e63b918c298c62c41ffe4c', 'key65': 'c8577010d0585bbcec4afe6daec1c10b', 'key62': '4332f852e63b3e9d3b579da4ea2f919b', 'key63': '15ae52c4466b68ea6d86986b438a38c2', 'key60': '1c831aa8e5b03d8086044cdce9cd7623', 'key61': '9186a4fecdf734fdb6f4cb0db65bb051', 'mac26': 'f22f', 'mac27': '1e80', 'mac24': 'c002', 'mac25': '6aa7', 'mac22': '194fe9b595b1c4da', 'mac23': '08c856e5e71866b6', 'mac20': '98512d2bfd2a96fa', 'mac21': '0bc415f7d140b4e1', 'mac28': '4769', 'mac29': '9462', 'taglength6': 2, 'taglength7': 2, 'taglength4': 2, 'taglength5': 2, 'taglength2': 2, 'taglength3': 2, 'taglength0': 2, 'taglength1': 2, 'taglength129': 4, 'taglength128': 4, 'taglength8': 4, 'taglength9': 4, 'taglength36': 4, 'taglength37': 4, 'taglength34': 4, 'taglength35': 4, 'taglength32': 4, 'taglength33': 4, 'taglength30': 2, 'taglength31': 2, 'msg86': 'b1192991416c686c22ac3b78b9fb507257', 'msg87': '8c29867d63821d14c8117b1a9457ec3f02', 'msg84': '9f12443f0d16928ac94322cc6c62f0226d', 'msg85': '20ab40915fe3fe69e75ba48c80ced2ac62', 'msg82': 'e6fc9b090a96f8b6ff08f01f0c4c28ab0b', 'msg83': 'cd42caaa0c91f232b9fe91e04da998f4d7', 'msg80': '3d6e5a07de316242809a7d312e582e9f9f', 'taglength39': 4, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 2, 'msg38': 'f87f17fabce1237e', 'mac133': 'd5d51050', 'key9': 'e60eb6d001ecea204c0d102f8cb91061', 'key8': 'bfc4a4a27a752a8f3bfba4e59b8364e0', 'key3': 'd33e4fd602583e83976d19376d4c92b5', 'key2': '7c0275c7d0d6c7ad97f7232634ab9b4c', 'key1': 'e552ae5b0b0468f116791c4540e55b45', 'key0': 'a20b1ff17f405ec4a7c23738150ee5c4', 'key7': '6d318032df7fe64f1aa149131cb5fd64', 'key6': '865773e5e9bfcd6726452f4f459b615d', 'key5': 'e3d07c07f2fe19048098ba0258456b29', 'key4': '670898317c91dc0d08aeb69449b9731c', 'mac137': '30dfb48b1c6c7f02', 'mac136': '671eb8751b781029', 'msg139': '396517d0e5d7a4c672251790e68fc6025a1ba800ac80b089734359f53820', 'msg138': '44568380ecafc2222db978c243d554e6f0c5d89766095d5967685861abcd', 'msg137': 'df040425134cc55c41850ee2c7e848506d6d97089733afbdc023e93623d1', 'msg136': '11c6e67ec00a6d2a34899dd2d22897a26a84543e6085e8f90a3607485ad4', 'msg135': '8669db6596407d48d512a0558e879a986c37f781f4191cef533e2a8e5abf', 'msg134': '795acbea26d514276d51f0dda5d51f61256e475164c738c75ffa74d33ba6', 'msg133': '27660540b5962417d585a6e3bf1d21f0621e9e33a85bfa25fb268dd20809', 'msg132': '8a61b617086c4a8291af282ef589c8087deeda4e80b07cf231fdaf43bb2a', 'msg131': 'ec257c260ae71fbffb1f9a219162fdb5e677c393fb699c3d9fda708c939a', 'msg130': '99bc005955f931500e377e91101e4416418d30e361d3a7df902365e21142', 'key22': '8f34c2c81f92b9f8850e2673bf76ea70', 'key23': 'd98904e575a42949e5b05b62a486d931', 'key20': '37b97cc7d9baf7103b7a26d9cb51547f', 'key21': '6e835b8a04f2c17a54d65110b6c28c9b', 'key26': 'daa89be51901b09d3e856429620e31c1', 'key27': '1683ab2361621319f73bb6d56bc49ddf', 'key24': '493710493bcb675de5c4b61c687c0701', 'key25': '6b583d7c38015e0b980752a72c8373bf', 'key28': '1a80675bc12fb9988908f4586d68f438', 'key29': '7c15da467f58768fb3c8b9ce894f52b0', 'mac68': 'bb60e46f9c6ad7de', 'mac69': '43a55a6cb30673f0', 'mac62': 'c9855f9c', 'mac63': 'c16b9619', 'mac60': '170a8b8c', 'mac61': 'd038caf2', 'mac66': 'cc6c1479942d6104', 'mac67': '3740b93b22ca20a8', 'mac64': 'ec3d927c3baf1be4', 'mac65': 'b09e32361b7fcc3f', 'key97': 'e34385c275c873b6b961f24afedfb67a', 'key96': '2f0889c8f815627980ecda2cd0462092', 'key95': '9bd9b0eaa816fe265de9dc5e3167a86b', 'key94': '43cd6dc837c7387610f443621538c423', 'key93': '32f2e5670dfb3b4c3849294cc4199d89', 'key92': '7fc75dbfdcb0dfc18abc70ea67257c34', 'key91': 'cd8f102c1fe3703134c2545db0646b5e', 'key90': '029745e532321f8cce1a08709d191580', 'key99': '5b80a75223abe0ce68e0e5c2d351c4cd', 'key98': '1513da6d6eefce3749df49ab16d97038', 'msg28': 'f224eca6b48807c6', 'msg29': '6427c79bb5959ef3', 'taglength94': 8, 'taglength95': 8, 'taglength96': 2, 'taglength97': 2, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 2, 'taglength99': 2, 'msg24': '9eb983864bc07ea1', 'taglength59': 4, 'msg77': '684eff307befc4270f14fec491babdada5', 'msg76': 'ee6ae225094605d8da52a5eff71b27041b', 'msg75': 'c9a8961ad34ab200b52bb63f566bd2968e', 'msg74': '4ff4c92ccb44c9997d882e144b9eb2825b', 'msg73': '82125893ed31220661ac6942b9c3031791', 'msg72': 'a19b4f3b8cce1ce2ae63a89ca35a821088', 'msg71': '437d3fdad33afefb94ca15a319054a8c', 'msg70': '9703a444464a1270a6c31b36ef5659db', 'taglength121': 2, 'msg79': 'b198b264fa28fae2c632d4af89a8740528', 'msg78': '3d9db10bab7219623b4458c00c49221c10', 'taglength120': 2, 'key128': 'a7648f10017c155d6bb343074fe54f34', 'key129': '46daa22f913df123b0e5f204858ad907', 'key126': 'e3c208b5a7976452ada1d0cd26614a6e', 'key127': '6480895476eab3dc8a3bf4dc98f26dd0', 'key124': '759820d93440b5b925f834800dc85e76', 'key125': '6b026efd8c20c80e2a29b04ccd7c4325', 'key122': '4aa132a8fb61cbae2a2f91d5bc1c1c6b', 'key123': '7fa875201f8fb9bad385f2c8ce576102', 'key120': '408ff8ece529cbce7a1ac1aef4e6efad', 'key121': '6e7acda12f1a86e57f6baeb067832f20', 'key110': 'b5f21ca4f4750ea1025d29f101c21308', 'taglength125': 2, 'taglength124': 2, 'key117': 'cd195b0eb6e0b531f11a64a2404aae6b', 'key116': '3dc1800b04757926cd7f9de0ae29fedf', 'key115': 'ba1cfdc1f4c737abb95ef82a86ce5754', 'key114': 'd00d4f52d6cec7ec0dbca246c7b0b0ae', 'key113': '1cc2d9323820e5e061073d5d20195851', 'mac131': '40c053db', 'key112': '7c89dc20793231676db9d6dc6107ab61', 'msg106': '2d22caea319b0a664ae5b31c596955eb0d2bb70e06591c4d3a', 'msg107': '880fd5e05b09ce7e230325ecc3a9e6d5c6a818f194129687ec', 'msg104': 'f7622e572411bb19db30d6aacac339642c2b99bfedb2e37f0f', 'msg105': 'ed9e1f914d1536169ad05aeb9b8e1ee422e68e6f34db70c86a', 'msg102': '05d0de134473116ab6fa1e957a1bb80e772ea6134184c39c40', 'msg88': 'd969222d181fe37bb9e2eda88f86d0d5cc', 'msg100': 'ad4db1a9870bd5642505abd72828f9059538086129cc9eebed', 'msg101': 'f86daf7535b2323d2834d903e509712fc96a6450b1138ea869', 'key111': '1370d326e5ecba912c469204290286f2', 'msg89': '669c7ebef9459c53a829572d3f37f15040', 'msg108': 'a774fd82c5f5283647d4a0d791b30cbbad47dae99a603435e6', 'msg109': '1b5e9175058e789c3c292b39852dc0d8cd24a6fc1b4c3963c4', 'mac130': '014f0e9e', 'msg119': '55e0def3b2ee85cfee070df774bc5a135c955ca03c9e869541', 'msg118': '8fd03b1ff90f51ac25526fd65ad8b2d73cc27e12f1b2c24983', 'mac104': 'fddcbabb', 'mac105': '731bac53', 'mac106': 'b1cd9a28', 'mac107': '910635da', 'mac100': '0490', 'taglength38': 4, 'mac102': 'cf35', 'mac103': '1ad3', 'msg81': 'c907375b83409f2e28354fb31c11d70992', 'mac108': 'ba16d83a', 'mac109': '6fd142ba', 'key59': '43ce64e3d52a573e91dac42946f8ea67', 'key58': '7ab0986bd3b5ab23ea1fe07070d620ba', 'key53': 'ef9b324375eadac18a5243cb97b0d62f', 'key52': '4cc8b00e1649cb20d6eae9e6e9202f98', 'key51': '91a786b6297c79c82cd3970e91c4ae52', 'key50': 'cde0314fbf38e63d76d99891342080da', 'key57': '089b57fbfed3a473ba701cdfba6e6b57', 'key56': '23b0e32c5b91dca72cf180ad4fe6d558', 'key55': '64571f9e83d55713521561324a4c924c', 'key54': 'ba7f913107d61f0832bcb3c1b5b68c20', 'mac13': '71fe6f62', 'mac12': '43090719', 'mac11': '6a2f7401', 'mac10': '6e7c9195', 'mac17': 'eab70046758a4e27', 'mac16': 'af2df5ea7d2160a9', 'mac15': 'a058fb9b', 'mac14': '035ae837', 'mac19': '58f9318051b0c396', 'mac18': '5e44a88150a31ac2', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 4, 'taglength111': 4, 'msg103': '168d77f8292e46b5b2925ee6f678d0644095cdaede89c7806c', 'mac135': '34db7de8', 'key118': '34fd2c79b597584376582362ecdc1351', 'mac134': 'e7c3f2ff', 'key143': '1019136849ea67468fa4d9544043197a', 'taglength50': 2, 'taglength51': 2, 'taglength52': 2, 'taglength53': 2, 'taglength54': 2, 'taglength55': 2, 'taglength56': 4, 'taglength57': 4, 'taglength58': 4, 'msg25': 'a510baa519525cca', 'msg26': '2c6676c15f360d1e', 'msg27': '5d5012693e247007', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '2439123fe624e29d', 'mac112': '27a9e53c4f88bda2', 'msg142': '15df9d012a1f9ef89722fde5f1f61cf4c1cff28fda070181ea63885b5098', 'msg143': '8e2e28186030fc52cfcbaeeb373ca08e2430d208c271fb0795c5d9226a14', 'msg140': '86ca75c1e49a883e89912fe4060d1f245532c058bc3a30b0f40b8b6f8b0f', 'msg141': 'd86b1b42dbd5c1e3808cefa49a6435a55b187514c7ecf2f26890aa1a4448', 'mac111': '018b9c8c', 'mac122': 'f5bf', 'mac110': '10773d05', 'mac123': 'ae53', 'mac117': 'aaf10440c99b32c0', 'mac120': 'fb2a', 'mac116': 'c95fb66f25eb7d5c'}
dict_cmac_tdes3 = {'mac121': 'b823dbbd', 'mac115': 'd7bff44e70fa1c3d', 'mac126': '3d0f760a', 'mac114': '9f6bfd4e9316b775', 'mac127': '32c49533', 'mac124': '2155cec2', 'key19': '891a5de3ce4626da2a159485d62651bab97ae9aea78c5e92', 'key18': '4fe35bc7bc26387ff2cee02f6158f404ab1ab3255b835dce', 'key17': 'f7d33dfee5253862347029732685734346fb85e6ecc237ef', 'key16': 'da6dc8a89dba62926e1c1f98949819a480e6fba4e3a7494f', 'key15': '4c100462c8804ff15437ea6b041c9791d0d51fb357385820', 'key14': '0423fe3dbf76c8d5b358a829c83bd56852297613df07a27f', 'key13': 'bcdfe6bfd94f8f1f8667e051d38a9ee026433734a7374394', 'key12': 'bf89d36125839b2529bcd3c43b25fb7338311f37f7974fc7', 'key11': '4cd6255b86043e7549c8f7e36bd9a761df374976b9b9d9d3', 'key10': 'bf708c5e620e545d912602c4f7ae892c2aefd34a67ae7308', 'mac57': 'dcea89fd608b', 'mac56': '733df85bb921', 'mac55': '56415a32', 'mac54': '9ed4039c', 'mac53': '23c721a2', 'mac52': 'f5ea6377', 'mac51': '49d44a59', 'mac50': '7cd2f49a', 'mac59': '88c444fc8365', 'mac58': 'bec0d9123493', 'key119': 'bafb26d55e79b54fef9b324375eadac18a5243cb97b0d62f', 'msg5': '00', 'msg4': '00', 'msg7': '00', 'msg6': '00', 'msg1': '00', 'msg0': '00', 'msg3': '00', 'msg2': '00', 'msg9': '00', 'msg8': '00', 'key80': '3bd332436823e5806bc1bc3efde9e51f1994c7f40d158643', 'key81': '3445c4a2940bf8b040c8cb2f3b1a583892545bcd9e9b80ad', 'key82': 'cb92434c4c9da8c716b6e68ca4314358a80897578a7f2904', 'key83': '6e68641aa7ea97a45b5be51f8fdf457ab916610b5bb538a4', 'key84': '79df3b2657201fba807fbfb94cfbe0d949fe257c0ec2d5ce', 'key85': '80efce610d0e5e23233bec1c25efe540706d07b6a49875e3', 'key86': 'd52507d540e5f7bc7fd9c43e89328fa2298a917594b9e9fb', 'key87': '3e02f2e37c67a46edcf1ef37cb37326d0438520b4523d30d', 'key88': 'bf7379b316e6f11320d6ab4652f85b32e0ced57fb908162f', 'key89': 'fbda861a3e1cd916c7150220ba0210adbaa26716c2765e04', 'taglength141': 8, 'taglength140': 8, 'taglength143': 8, 'taglength142': 8, 'msg60': 'f8ef259ca14760680ae34aad6f5a3254a28b86dcb7843259', 'msg33': '2550fc1f31b955987df2964b3b703373', 'msg62': 'd39a02c4ff758ffcf6f522520caf4532ce889cc68a28800f', 'msg63': 'e3c8a94ac99702318263f6853294e47e3cce6a9158ba1d4d', 'taglength18': 8, 'taglength19': 8, 'msg66': '97049e5ee4ae3037e7381251a136daf40a48f6e59e924e83', 'msg67': '8533e9b2099c09824b0390f901d38dfd4842ae90ec84a8a4', 'taglength14': 6, 'taglength15': 6, 'taglength16': 8, 'taglength17': 8, 'taglength10': 6, 'taglength11': 6, 'taglength12': 6, 'taglength13': 6, 'msg30': '0724b384074a0b5c205b042eb5beb7bb', 'key139': '343edf3b1f7c7f92b34f156446203d58681fae13104aef3e', 'key138': '62232501b9e9c1b554209d7c075d2c3173a2f289a84c49ce', 'key135': 'a21a867607705107d0a4d57a4f316470dce66154ce0d3837', 'msg37': 'c7a2fb653939b5fa6dfb8d5301a69e2f', 'key137': '4f5b4aeab57f0d4f1f79400d325885d3e908d954c7a7929b', 'key136': '7c86e507dcce139e2c647ca7c1d3ef57835bb0c7265745ae', 'key131': '70e5b00d230eb0d00d62e97567f77cfdabea620dcb8ac845', 'key130': '8afe23a7f75d6125b0854ae54ca74a016b86df3d971a1502', 'key133': '8a5243cb97b0d62f9e94b586f1bc1fdc20b9bac2323b52f4', 'msg36': '54b9619271b1c5bc34e6ee2c650f8574', 'msg35': '1a40aeb7cf5af26f5cd754fcd83ecec6', 'msg34': 'cb7bf45e4fde3d68c311351060bbf5d5', 'msg39': 'e1e9cae93c6200a62779755b0cfd8a74', 'taglength48': 4, 'taglength123': 4, 'msg15': '00', 'msg14': '00', 'msg17': '00', 'msg16': '00', 'msg11': '00', 'msg10': '00', 'msg13': '00', 'msg12': '00', 'msg19': '00', 'msg18': '00', 'msg115': 'e3cd90b81ad3bcaf0002c5129e17022a283e7d2a', 'msg114': 'f477cddd61ea83caad0c464530e9c3d89d73ee36', 'mac99': '80de13ca', 'mac98': '64116790', 'msg111': '8079df315f5a0694e5f4f2e5f9e6d45c7fd4ce62', 'msg110': '485ecd9d47a661d6fab9e748d9bd3c6a4ffeca0c', 'msg113': '44973b24de83884b7cb12734b46e03a97aed519d', 'msg112': '8379947e82dc8a7b2850416388290660f10f395f', 'mac93': 'dea8577c194741ef', 'mac92': '383ca5d1d2712ff9', 'mac91': '33b4dfa8470848e5', 'mac90': 'a8b231f21bc11c5f', 'mac97': '7f284e78', 'mac96': '52a5228b', 'mac95': '57880db6626f8629', 'mac94': '0ab03e60a964243d', 'key44': '02548c40405e5762fed9404fc43b3e374cd03ef8ea2304b5', 'key45': 'fbfd542073cd793b19b69de0a261089edfe5236db6c7808f', 'key46': '8c0d5226ef3438976e8c3420dc9d37c89d37523134ba2cb5', 'key47': 'c46efde5e65d7fc20d329e37854049ef10da4032a8545b9b', 'key40': 'e33216578cfda13d6b2cdf920825c7b3da52cd58b9c497e3', 'key41': '4979c8ec2c9d2c85b602453e8ab004da80b5b06dda9e529e', 'key42': 'e35b86f7bc5d209e4516bf160e5179e6c1c7520461ae8adf', 'key43': '7f7c10518c153d2a1f23349bbad9b5702a230eb6ab7ca446', 'msg99': '481b1be0b76f7ce56a4d42bbb6430d8ee015e653', 'mac119': 'a2cb9b3848a3b96f', 'mac118': '11a3685484bb9299', 'key48': 'e6081c2040892c7afdd692e604549d896d7fb9e92c98a1dc', 'key49': 'dabcf79edaf7dc6d1058d0f19e5b0ea8f498a2c8f8370426', 'msg98': '4c048245b7e0d7ccd1c6d02345401d4ae07b88f8', 'msg95': '4d4bdb7ecbb43bd4acad', 'msg94': '00ee573059f54e6896cb', 'taglength109': 6, 'taglength108': 6, 'taglength101': 4, 'taglength100': 4, 'taglength103': 4, 'taglength102': 4, 'taglength105': 6, 'taglength104': 6, 'taglength107': 6, 'taglength106': 6, 'msg32': '51f57e7aefc64d80c0e47e93dae1e487', 'taglength65': 8, 'taglength64': 8, 'taglength67': 8, 'taglength66': 8, 'taglength61': 6, 'taglength60': 6, 'taglength63': 6, 'taglength62': 6, 'msg51': 'b138122824e04e13cdf3305a69058bda7b5d16b89efc658d', 'msg50': '063cfa8ca36c9383b87db07e0de87565fd693a7bcd058386', 'msg53': '701153c9a77b2569c858163f898e428a7887420f9d3df2c7', 'msg52': '4e98153fce27792047a96e123f9b4ba25d1890dcceaa6fbe', 'taglength69': 8, 'taglength68': 8, 'msg57': '164bbf5a1108c1ebdd65a4942ce03de90cdbb876b14d7e0b', 'msg56': '88ce1d3c68360755d50b767a520f37123c80a0ebb73c237e', 'msg31': '0c2229eb1387d59b2427b5f470841a93', 'mac125': '99c6a320', 'mac40': '67c86d9f1b5c4bed', 'mac41': '0b429cd939556e70', 'mac42': '5a6cac47b6ad032a', 'mac43': 'ce0509ae5560aaf8', 'mac44': '117cdc8030e1d43e', 'mac45': '54bf3058633ed140', 'mac46': 'c9965a9d7dc7bd5f', 'mac47': '2118fc18af04d6b2', 'mac48': 'c051fb9d', 'mac49': 'a2d4e669', 'mac101': '8bf2e1cf', 'mac128': '34a549bb01dd', 'mac129': 'a2f1042230d3', 'key79': '0ba4e5e5d5addf074654459bd56b087a7a268f7fe304e3e9', 'key78': 'b0d57fb913d064b55bc8fba7d5e0629ecb9bd616ab648334', 'key75': 'cd3ed676d0c8b5a21602262f3194207cb0ecc7c1aef2efda', 'key74': 'efdaf1cdc8588320e054ec43234a2398989b314c469b51cd', 'key77': '26ba256454ea9b23a82f5891fbf707b6d6ab257f0dc2e55d', 'key76': 'a46e62c75137ead3b961ec649d43d543dc76589273949d26', 'key71': '6db3f7547067d31aabc1f27075da8a43a47934837a9e01a7', 'key70': 'e0c207aecde923f2f298a2c21c8ac4c7f84cd3a23dc8cea8', 'key73': '5d0e5bcb26feea3df26e380e297568fd5e681598ab08da8f', 'key72': '20ae32c49bab3bf8f86bb66173fb54d53e700868c46bc291', 'mac35': '03f805a4a358', 'mac34': 'b8f47cfe42a7', 'mac37': 'd5e4fc223fa2', 'mac36': 'd7837df2782a', 'mac31': '7ee3dc34', 'mac30': '2396736e', 'mac33': '0f0038ed6a98', 'mac32': 'c64ca691bb7d', 'mac39': '6cad7063919a', 'mac38': '8072aca0cf09', 'taglength130': 6, 'taglength131': 6, 'taglength132': 6, 'taglength133': 6, 'taglength134': 6, 'taglength135': 6, 'taglength136': 8, 'taglength137': 8, 'taglength138': 8, 'taglength139': 8, 'taglength21': 8, 'taglength20': 8, 'taglength23': 8, 'taglength22': 8, 'taglength25': 4, 'taglength24': 4, 'taglength27': 4, 'taglength26': 4, 'taglength29': 4, 'taglength28': 4, 'msg97': '0f8573ad22c683405d768b1d292e523caa503fbd', 'msg96': 'e9e8f59d6b214ecd6ea0769f57071f508017905b', 'msg91': '6a432d8006e23011c0ab', 'msg90': '66b96d3c3e56633212fb', 'msg93': '26c999b0c6a60d7651ae', 'msg92': '0ec82a455f3ec7abb8d8', 'key108': '80fe498c07b9704f15ef1046c22cceec79e3e3a1dabc9ed0', 'key109': '3d4f7f37e549fead9dc7438a75a7ae6d6d3b54ea2f38bac2', 'key100': '92705716a8e50bfda840c7f7081598d0a7343ef297d93e75', 'key101': '643740c7ae3eb31f9e76d0c8bc8998b06b0468162a85e6d6', 'key102': 'c2ae0dfdc78a02b6072c8c20b9a1c108b64cd67c2fda83b0', 'key103': '25ba6b31cecd3402a270a1ad687ca2790d5180efe0c78cbc', 'key104': '49d66b2fdc921ab30db01a492f2098b3d5a783e31016071f', 'key105': 'e3853d64689d3bdf7fad616ef7b913132558d5bae3100b45', 'key106': '38e68cf7516dd0f12f851986ef1c1685ea7f83ab461fcd89', 'key107': 'c8ef3b07c49b92202552f158462fd386f2c15e162a67bf40', 'mac132': '237c0fdacc13', 'taglength122': 4, 'mac84': '0b2af1f1e7d3', 'mac85': 'e2afff749deb', 'mac86': '0ba9749e09c1', 'mac87': '9d94d4921cad', 'mac80': '3a3968dc2cb7', 'mac81': '51cebcd095fa', 'mac82': '0b4d18225127', 'mac83': '4a490f059880', 'mac88': '999695327222af2d', 'mac89': '93b5844afd798c07', 'msg120': 'da8f9f953309e4eeedcd02924535c0bddd6874f86173c8d86b9cbee8a4f2', 'msg121': '2264a28bd02efe810e5a10cbefb63cce98e85c885d0407c5275e1396199d', 'msg122': '37843f5a95ecc4d35090946ab61a062783e35c55a7aaa6d74a8ce3bb0e30', 'msg123': '69273dfce62428d3dd0e423db96e7eb12126c9bb85b23d5bf7ad97a83d97', 'msg124': '00dcf0b0ac739f86bebd780e28bb0ce915b9075ec2d0aafc8fae7c81569a', 'msg125': '7753361bee60f85ae3acd1d69e2f6ae13870c0d8ad48d40231e9a5bcc81e', 'msg126': '2553e973e592f14eba1d6fbdf514d00613101aaae2b72d97e58e4a9ff80f', 'msg127': '869c1eb73cac8fbf541c5e36811a105f8d9ecc91064db438349e761c4d3b', 'msg128': '2639a85786ba8bbf5b50c170920cae8cd6b979eda7aac00cacb68b214a80', 'msg129': 'a746a67ef8b571168c2ac448b3c1183f3b2249f0940ee25032379bc53355', 'mac7': '843058c9', 'mac6': '6967e39c', 'mac5': 'dc84c95e', 'mac4': '46b10d83', 'mac3': '76e41eae', 'mac2': 'c3988c7c', 'mac1': '646f3602', 'mac0': 'eb61515b', 'mac9': 'c31e50d32bec', 'mac8': '42ef068e45b6', 'key31': '7c4cc715a861081c8064857c76101a23516e61d023e65edf', 'key30': '43577c9b8913e0e91a5d9d3bef19fbade6ab6e1aa708bf3b', 'key33': '1cd346926e91349d921a37f8e53dd651a8fe0e521640d0a8', 'key32': '9b29e3bf6e4019dc4a2a3e9e9e6b13a7f79b512adf706776', 'key35': 'f81c7ca4493458e69b7568324f32d340c7cbb6b36d686e15', 'key34': 'e63b6173e6f440f14a294a6489f494b64a8fd308d5cdbaa4', 'key37': '58d6c191616275a1703134800201683751136713d33b3226', 'key36': '4f9134bcba34e03b7626d34a5de67cc864e0298a70851c4c', 'key39': '0e76043d5e4c6e67ea4c3e5ba1b3ba1364d5a192b3a246ae', 'key38': '0d92388cf8ec138551b9ad454c2f40d5762ac47abc0179f8', 'msg59': 'd9474c4281d2621fd071205425d9f8daa17143fa815a346a', 'msg58': '27a1dd5cb9c912fb64698fad135231ee1b1597eec173cd9f', 'mac79': '193281a0', 'mac78': 'a3d3c70c', 'mac71': '9d552f79c1ea97a7', 'mac70': '42802dab0691fd8b', 'mac73': '13a8633b', 'mac72': '0d62f14f', 'mac75': '3c65c292', 'mac74': '13666372', 'mac77': '895e3212', 'mac76': '02443cf2', 'msg61': '577571e8ef87e6c4eb20b6c7c8156c2283c402b509b3f6d5', 'msg64': '84f42a23da7f20c1c4b6e3839b18430a4e6d3f6e61b423d4', 'msg65': 'b860f34bffdfb67b43d5cf7c951d7b2caca4c3fb877b469f', 'msg55': '87e4710aeee3128e70784175a176d842c995fd90e66749a6', 'key140': '6e627fb3315b1c861f388389b9971fd00e76043d5e4c6e67', 'key141': '5b9215b932c870e98c73d9cb3b0d5e85f86dae7534b3323d', 'key142': '01e0d61ffdae5b02e9bc92cdd9a8d33d2ab3010eec6826fd', 'msg54': '2d647ca7c1d3ef57d95258a97be384c77c139cc7e7d0a721', 'msg68': '42a10eda2e3d5dbf44e5e4f48e918756c031457f604476f5', 'msg69': '2d9d618e893e9face54b543c6b5892946a89bd1df8a74904', 'taglength87': 6, 'taglength86': 6, 'taglength85': 6, 'taglength84': 6, 'taglength83': 6, 'taglength82': 6, 'taglength81': 6, 'taglength80': 6, 'taglength89': 8, 'taglength88': 8, 'taglength78': 4, 'taglength79': 4, 'taglength72': 4, 'taglength73': 4, 'taglength70': 8, 'taglength71': 8, 'taglength76': 4, 'taglength77': 4, 'taglength74': 4, 'taglength75': 4, 'msg48': '7ec75db901029d62043f552e0161edb6c352b0e11ded25f3', 'msg49': 'd194602fdd75f11e6905e4a10eccad2b017a50808b867575', 'msg42': '8a90073a4dbd61c90799f0f82b5d58e6', 'msg43': 'fb7fcc48e063a665bd6705495515dd61', 'msg40': 'aeb9d3026df4f8576b48528564121afb', 'msg41': '66998a8abd7d5fc4263f6af6dc77f01e', 'msg46': '47751b8b4565cc3550669e7d7f0678fb', 'msg47': '03ea1f2fa34b77f916c7cce2dd23db88', 'msg44': '65f196f65b51efc796d9ee43f67523c9', 'msg45': '81498e13f4b630ade8d5203b69145fc7', 'key134': 'ba010757736d4c340d85bf61fe45fe580bfea497ba52b091', 'key132': 'a21c86702cc20ea708fdf731fb6e0ee3702c4f13b3c4aeb9', 'taglength127': 4, 'msg117': '1cd347926e90349d177b07b07ab75fbc59512dbf', 'taglength126': 4, 'msg116': '59070ac8696b6951218e5d9b119118611ba19ee6', 'mac140': 'ccb488224ce490dd', 'mac141': 'c82c73040eb32171', 'mac142': 'a1f0c3131068018c', 'mac143': 'd12b2746eb648f23', 'mac139': '264a54e8ab0c3a37', 'mac138': 'a05674f2c905d153', 'key68': 'd55edff71fc425fe64f48a2a97192c576115abc80be52acb', 'key69': 'b531e6f4346e3815459ed6d39ee645f1e6d3ec7ce6457f4f', 'key66': '6dae0b0d73e9b92564010b43cd0b621ab9f77f52fe2ff4d9', 'key67': '6dc264c15b32a494f8f7c1513d585d6d675dbf34a4d5f4f2', 'key64': 'c28a3dfd6d86a2f27f5454fd7f3843b0d5d5dae6dc57bf40', 'key65': 'c2041f587a57f7b09e496efe04bf5e7fe34385c275c873b6', 'key62': 'f426a1effd5d4a4ff1cb31cd7a2094b55e8316cef29d8976', 'key63': '1f31a8e62c9226c429f7b0c7a1f2cb8fb58f8f1a4601087a', 'key60': 'd65de5e35d0e49970b64265b7f3d37a4a416a10e8fe0d6e9', 'key61': '4f13b3cb8967f19e23ecb362fd26e952f44683a17f344fbc', 'mac26': 'd98d3472', 'mac27': '2a9ad8e9', 'mac24': '862f0e2b', 'mac25': '75fcc06c', 'mac22': '0691fa5832929efe', 'mac23': '3d426c34163df80c', 'mac20': '999ddb9b1e17419d', 'mac21': '3046b0063714d08c', 'mac28': '71cb1e64', 'mac29': 'be428f39', 'taglength6': 4, 'taglength7': 4, 'taglength4': 4, 'taglength5': 4, 'taglength2': 4, 'taglength3': 4, 'taglength0': 4, 'taglength1': 4, 'taglength129': 6, 'taglength128': 6, 'taglength8': 6, 'taglength9': 6, 'taglength36': 6, 'taglength37': 6, 'taglength34': 6, 'taglength35': 6, 'taglength32': 6, 'taglength33': 6, 'taglength30': 4, 'taglength31': 4, 'msg86': 'f5d088b69a51f7db1c41', 'msg87': '80bd8a088cf50a4cb6d6', 'msg84': '1155ddbd6293d119e972', 'msg85': '5ff220952ac166e60cd8', 'msg82': '5668f0d0b994b00018e6', 'msg83': '1c821aa20a02fb20735f', 'msg80': '1f15b48384e67eada9ce', 'taglength39': 6, 'taglength43': 8, 'taglength42': 8, 'taglength41': 8, 'taglength40': 8, 'taglength47': 8, 'taglength46': 8, 'taglength45': 8, 'taglength44': 8, 'taglength49': 4, 'msg38': 'bf56901559c5ca0dbfe3bb9d28a1da6f', 'mac133': 'e5170c3a87ea', 'key9': '7f6baeb067832f2023649da46e921c49570b43c81f1540c1', 'key8': '312f015464bf04701aa2432cba191c2c3b899b253d0bc8d0', 'key3': '61e65ba4c4921385e538b9f189ab807a62d3f80b7aad45da', 'key2': 'd310f1f2ad2ae68a9270513720f76b2391fba7dac7d0efd5', 'key1': 'ae0807dc0ecb546bd3738a43462970c27c0275c7d0d6c7ad', 'key0': 'f8fba7b9b3e9d68a2f70bfd304d32a159e13453e0d16928a', 'key7': '049e94da3d6b1cba5b515734b9070be632df89ad4a040e7c', 'key6': 'f225f2863d76a89efeb37f1554c26185d55edff71fc425fe', 'key5': '5da81fdab6a44068ab4a0243c72632b59d43d929f29b0252', 'key4': 'bfb53d161998f8efbfa2c8d0808cc7fbd9d54a6786f7a746', 'mac137': 'de88566bd671f7e1', 'mac136': 'b16ad9880f87ae8f', 'msg139': '905a46159d199ba490a70187ebcd287c01e12717afa2c9c0476328fbcd6c', 'msg138': 'adaf4bfffab79ffb60b94647faac634929c56e694052881881e60b1149b6', 'msg137': 'f2f49c8949e432de444171586e376c0f8e47302e358cf75493439e3a8e8a', 'msg136': '00c0fa4c03c6f66f96617062dc72d3b3bc955e7394027a3b2bb14b6de8c2', 'msg135': 'bbdb3e3d7b04cfa82297c01a3750ebda7b3d34061d2361202d1f2dc95389', 'msg134': '950d77f5bb57a685f52ce3d72376c240155e1c4705bcb2b665d112f1dc38', 'msg133': '024225c194dda881bb6b3189f506c6dd06f1ebfc3dce0bb7fa111a426db4', 'msg132': '8fb44c9bd950496e41b67befb6acdd3fa77006a60ea94f28ae9e385998a6', 'msg131': 'deb6d14a72746948641466fb8a27e2a96045e7bef25c7ac0fd47d88551a3', 'msg130': 'b4a4e9cf2e4bf4ec569126873332ddd438a4469c189dd0e1dcd5e1c5320d', 'key22': '89ce1c3d68370754d5b5f72f83d07973c2df5d1f0bdc19fe', 'key23': '0eecf26b0d01c7f4ad1c618c1c67fe7cd55deac2e5fde970', 'key20': '3723abe5a82f9b1510df3267e31a972ad001c75b19ecf151', 'key21': 'fdaed698d025e36d13ae9e7625e9e5026e8a40e6c726b9d9', 'key26': 'f264ab2a2f4a6ec8d5a19d7a98868c01bf89d36125839b25', 'key27': '9298c7b3fe9749fe047cb90e1c2ffb85f29e8f10f7b51f1c', 'key24': '344a6732dc5e5431e98a4f7c323dc1c46b0275dc150e68e9', 'key25': '25c104e08f31f1a875a7a1ea9185a81ff849e654629d7552', 'key28': '016ece5da138bcf2617a3270316891161504671a23861a85', 'key29': 'd0975b497ad910e545b031923b8ab3206408e5e5580e5b26', 'mac68': '81e23a51eda6b4f5', 'mac69': 'cded1056615d85b8', 'mac62': 'e7cacbdff911', 'mac63': '76882712c9e5', 'mac60': '4efc345327b1', 'mac61': '6e151b21e855', 'mac66': '011f2a23e7e17be1', 'mac67': 'e59bc558e9b6f92e', 'mac64': 'd5bd50153f6834de', 'mac65': '3fd9082228bea2f3', 'key97': 'cd9e79b0a7136173d6d0a2e529ade6d06792ab08a88ac7df', 'key96': 'b9d991d5b91f2cf891c46e54e69e9eceb09119b53bc43d3d', 'key95': 'd370970e0b613232f45104c26883073e3ea73eefa79d1397', 'key94': '4379586d83fd457f911f6efb98e6adc14a312ae69de92c9d', 'key93': '64d6a18cd9f707510e731008238532d9d9cdb69d292fcdd9', 'key92': 'b979f4804673626240465201f4d6eaaeb34f1a45ce10dc32', 'key91': '25132ae9912349ec43a208f4cba17c8607835bab1adcd9c2', 'key90': '2adf64e55891e3ef8ab3e3076dfb83fe2f9875468ac185b5', 'key99': 'c15d2ac4192986b3fd16527058c445e9c87f2c5e048915d6', 'key98': 'e5e68a02251c46fe8c103e7aa20ed54ccd6e29943d6e8a8a', 'msg28': 'e7f2c853bbdb234137d4335f3129a4fe', 'msg29': '9b7a09c97132702006e53d472505abdd', 'taglength94': 8, 'taglength95': 8, 'taglength96': 4, 'taglength97': 4, 'taglength90': 8, 'taglength91': 8, 'taglength92': 8, 'taglength93': 8, 'taglength98': 4, 'taglength99': 4, 'msg24': '25db0710fb165d316e7c32dd25648ed0', 'taglength59': 6, 'msg77': '43a9a2a48b05382d54bf', 'msg76': '8cc5f9f3b40f16ef0b73', 'msg75': '1dc4cc6675e721707d97', 'msg74': '7c5699caf91add90310d', 'msg73': '47e336f8ef04cc905e53', 'msg72': '582bd9c8c36ec815d0a9', 'msg71': '3cf5bd7d23f2eac325a9d22dcc49710f27776dcc1d4d04f9', 'msg70': 'e87dd34485382bda285ecff01c1dfe5b350bcb73b3751d0f', 'taglength121': 4, 'msg79': 'eb9e6463a1a4125612b5', 'msg78': 'e02a886cb62467a8ba31', 'taglength120': 4, 'key128': '1c019e9b167f2c1cd04a15c7688991e649c702a854642973', 'key129': 'cb4c977afbaee56ea7e50d23ab5d642073e0bfdfc2f4b5a1', 'key126': '0229e59e5b57019254c4e3aba7a4fb805786d96e76b6d607', 'key127': 'eab3bf168aeffec7eca113cb628ab5049129fddf9410a7f4', 'key124': '450845e53bfb255b76c82545c2670e8901c88937d99e3102', 'key125': '9dfe2f579eae40fb040e9da27391fb2a0ea84992df67c23d', 'key122': '37191cfdd55761807a04b3ade91a7f54cde0373420d5c875', 'key123': '70e008919e7331baa84a4ffb7c51f12c0185e33e32f2ce25', 'key120': 'c70297c18692c1f1cdf1a4a10b9e9beff8c77032d0b58686', 'key121': '85ab9202ae67021316e53e974c1f3dd6ba3ed3ad8c15b907', 'key110': '312f015464bf04701aa2432cba191c2c3b899b253d0bc8d0', 'taglength125': 4, 'taglength124': 4, 'key117': 'd9fef8efce9bdf5161585d869b1a0eba5434f731efa719a2', 'key116': '0b9b1029ab45c832f786f776f7267a0470dc1c3dea9b9404', 'key115': '34316bead315cbe06bfe898f3be50e925bd675d9a837b629', 'key114': '23572658fdd9abf71cc2d34cd68302a8801a380e2676798c', 'key113': 'd3926134b623327cf21c19ea8a20f1f21c4cdf3da1e00b43', 'mac131': '4ffb463be19b', 'key112': 'e6efdafe0702868afb8667f2c41920ad9b4ca7feba6737ef', 'msg106': '1f66e072e874b8294de9ae84c3330bfbf12ec9f0', 'msg107': '602cfe96909135035946244b83066b204538a443', 'msg104': 'cdff130df46b6d68e4d1d88d83120579a43f0eef', 'msg105': 'b174e35ec67759be9d4c103f6e1b1bf219157c26', 'msg102': '1ac21efeb4017fc1f9c7b2e0ba712b4d2b32e469', 'msg88': '588d6e3dae2cf2d2c69d', 'msg100': '657ca1e725aef85f87628ad5e1687e26a539f837', 'msg101': '86d6fdb9a27b5edba18a51e4236f9f4561d45999', 'key111': '5d381032f791c21fef519b2349d0bc100ec7312ac2daa8e3', 'msg89': 'f74345bf419dd67330e9', 'msg108': '781ef9afab90c71c232d1cd9fabd740131487f15', 'msg109': '6a50ae983dd566d593e4445ed2de6fcbfd4aa9e9', 'mac130': 'ee995766cc3b', 'msg119': '9f95b486f1bd1fdc66337fb04e954da880ebc229', 'msg118': 'ddd01266d14dcfd7c4e01548ed2f04239d9c887a', 'mac104': '2295d626315e', 'mac105': 'bd830d085569', 'mac106': '33fbbee54b83', 'mac107': '722a374e94e9', 'mac100': '20dfaa66', 'taglength38': 6, 'mac102': '36fed727', 'mac103': 'a47bc7ec', 'msg81': '315a6424f7367f021304', 'mac108': 'c3d73f0785c5', 'mac109': '4d9cffa467f5', 'key59': '043758f1a7bfb545156e8f5b6b0d20ae40a4fb290768b916', 'key58': '0b6bc110194c34ab3ef27f970dad311ccea41a4ca2bf40b0', 'key53': '6715202f1620f40b108626f46b9bc4c85d57f8d0b5b3e925', 'key52': '9eba7ca1e9259d68e537bfd6ea4661b3469110efec13754c', 'key51': '8f19d345fed5b0ba2683f4bffba7eaf75bf4a82f1f859ba7', 'key50': '2a2aab676be061ec98ef4a915e0126fed51f2073a402bffd', 'key57': '3e62941c52ae513e76ea07f7433e13f734d0c8a8231fdfb3', 'key56': 'd9511ff8d08c3792621f38ad040e2301c1752cfb61bc329b', 'key55': 'ef38920d794f7051cdc43bea168a3e254f4302e9f40bc786', 'key54': '1604204fa8a480a4dc15c41c86d673687c86e507dcce139e', 'mac13': '21bcb97ab5bc', 'mac12': 'd3206d0c03b0', 'mac11': 'aa755c97187f', 'mac10': '7e667dcc3f5c', 'mac17': '787298936048a495', 'mac16': '6dc376b2e3a3cde4', 'mac15': 'c85d07955275', 'mac14': '9509e5489bb8', 'mac19': '57b1e3d96677a874', 'mac18': '14b4a07be1c33ceb', 'taglength118': 8, 'taglength119': 8, 'taglength116': 8, 'taglength117': 8, 'taglength114': 8, 'taglength115': 8, 'taglength112': 8, 'taglength113': 8, 'taglength110': 6, 'taglength111': 6, 'msg103': 'b2b0b59941bca6c9e66fe5441933c7520d3a4462', 'mac135': '4e887731cd88', 'key118': '3792b9868f94d9fe9ba1c41c7f0e6d9b857c3d01e0264af2', 'mac134': '64b6521b2917', 'key143': '92dc739107df8c160dbf9d616413ce76b357ae0e2ad6b6a1', 'taglength50': 4, 'taglength51': 4, 'taglength52': 4, 'taglength53': 4, 'taglength54': 4, 'taglength55': 4, 'taglength56': 6, 'taglength57': 6, 'taglength58': 6, 'msg25': 'e2e0f15264b98a581985a3d58abda128', 'msg26': '28bcd3c53b24fb7206908d78059e856d', 'msg27': '4a20bc7bb41d5b237107758b5a28c1dd', 'msg20': '00', 'msg21': '00', 'msg22': '00', 'msg23': '00', 'mac113': '2d73e70c4c3e589d', 'mac112': 'cbec47bb6ad5a9df', 'msg142': 'ea8274daa738c9b9b54d0da219ff9761011917b9b21827a9c28b23ee87c0', 'msg143': 'e8db7a65bd1db8e2e0277d2a8be0676dfd175817c3b9d8a53648b4b74588', 'msg140': 'eb4c3e5aa0b3ba122d2556a969ae3bb16b9fcd12493d8a5d25b6345c6b59', 'msg141': '8e0b59122b7e5c2fa5e5ea7b1cae477b141b3e20cb4513eccb60b856bb40', 'mac111': '4522b4178359', 'mac122': '77bd4d34', 'mac110': '14f4f1f803d8', 'mac123': 'd1652e44', 'mac117': '1eb1758a2ebea6cd', 'mac120': '6a8179f3', 'mac116': 'e9b969465284ff97'}
 
# XTS
# test vectors from: http://grouper.ieee.org/groups/1619/email/pdf00086.pdf
 
dict_xts_aes = {
'key1_0':'00000000000000000000000000000000',
'key2_0':'00000000000000000000000000000000',
'n0':'00',
'msg0':'0000000000000000000000000000000000000000000000000000000000000000',
'cip0':'917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e',
'key1_1':'11111111111111111111111111111111',
'key2_1':'22222222222222222222222222222222',
'n1':'3333333333',
'msg1':'4444444444444444444444444444444444444444444444444444444444444444',
'cip1':'c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0',
'key1_2':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0',
'key2_2':'22222222222222222222222222222222',
'n2':'3333333333',
'msg2':'4444444444444444444444444444444444444444444444444444444444444444',
'cip2':'af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89',
'key1_3':'27182818284590452353602874713526',
'key2_3':'31415926535897932384626433832795',
'n3':'00',
'msg3':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip3':'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568',
'key1_4':'27182818284590452353602874713526',
'key2_4':'31415926535897932384626433832795',
'n4':'01',
'msg4':'27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568',
'cip4':'264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd',
'key1_5':'27182818284590452353602874713526',
'key2_5':'31415926535897932384626433832795',
'n5':'02',
'msg5':'264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd',
'cip5':'fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6',
'key1_6':'27182818284590452353602874713526',
'key2_6':'31415926535897932384626433832795',
'n6':'fd',
'msg6':'8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888',
'cip6':'d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637',
'key1_7':'27182818284590452353602874713526',
'key2_7':'31415926535897932384626433832795',
'n7':'fe',
'msg7':'d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637',
'cip7':'72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a',
'key1_8':'27182818284590452353602874713526',
'key2_8':'31415926535897932384626433832795',
'n8':'ff',
'msg8':'72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a',
'cip8':'3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd',
'key1_9':'2718281828459045235360287471352662497757247093699959574966967627',
'key2_9':'3141592653589793238462643383279502884197169399375105820974944592',
'n9':'ff',
'msg9':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip9':'1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151',
'key1_10':'2718281828459045235360287471352662497757247093699959574966967627',
'key2_10':'3141592653589793238462643383279502884197169399375105820974944592',
'n10':'ffff',
'msg10':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip10':'77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803',
'key1_11':'2718281828459045235360287471352662497757247093699959574966967627',
'key2_11':'3141592653589793238462643383279502884197169399375105820974944592',
'n11':'ffffff',
'msg11':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip11':'e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826',
'key1_12':'2718281828459045235360287471352662497757247093699959574966967627',
'key2_12':'3141592653589793238462643383279502884197169399375105820974944592',
'n12':'ffffffff',
'msg12':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip12':'bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220',
'key1_13':'2718281828459045235360287471352662497757247093699959574966967627',
'key2_13':'3141592653589793238462643383279502884197169399375105820974944592',
'n13':'ffffffffff',
'msg13':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip13':'64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9',
'key1_14':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0',
'key2_14':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0',
'n14':'9a78563412',
'msg14':'000102030405060708090a0b0c0d0e0f10',
'cip14':'6c1625db4671522d3d7599601de7ca09ed',
'key1_15':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0',
'key2_15':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0',
'n15':'9a78563412',
'msg15':'000102030405060708090a0b0c0d0e0f1011',
'cip15':'d069444b7a7e0cab09e24447d24deb1fedbf',
'key1_16':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0',
'key2_16':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0',
'n16':'9a78563412',
'msg16':'000102030405060708090a0b0c0d0e0f101112',
'cip16':'e5df1351c0544ba1350b3363cd8ef4beedbf9d',
'key1_17':'fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0',
'key2_17':'bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0',
'n17':'9a78563412',
'msg17':'000102030405060708090a0b0c0d0e0f10111213',
'cip17':'9d84c813f719aa2c7be3f66171c7c5c2edbf9dac',
'key1_18':'e0e1e2e3e4e5e6e7e8e9eaebecedeeef',
'key2_18':'c0c1c2c3c4c5c6c7c8c9cacbcccdcecf',
'n18':'21436587a9',
'msg18':'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff',
'cip18':'38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3',
}
 
#PRESENT
# testvectors with constant 128bit key and varying plaintext
dict_present_e128_k12_tvar= {'cip0': '6fdbbca937dc1ee9', 'cip1': '151d40aca3bda726', 'cip10': 'eeff4bd4905a0523', 'cip11': '044b8bc03ec2d433', 'cip12': '9934db7010582bfc', 'cip13': '7896fff60ce37826', 'cip14': '8cbc4e078f232cc5', 'cip15': '9f8991210ee08aa8', 'cip2': '20977863556da6f4', 'cip3': 'f5b93038ba5672dc', 'cip4': 'f5a66a60f44d0039', 'cip5': '3a5def544afd1007', 'cip6': '2ac0b55aaf15b9ae', 'cip7': '28c78a485bb0edc1', 'cip8': '6826d666e911ef6e', 'cip9': '3565447d71f6df0d', 'key0': '0123456789abcdef0123456789abcdef', 'key1': '0123456789abcdef0123456789abcdef', 'key10': '0123456789abcdef0123456789abcdef', 'key11': '0123456789abcdef0123456789abcdef', 'key12': '0123456789abcdef0123456789abcdef', 'key13': '0123456789abcdef0123456789abcdef', 'key14': '0123456789abcdef0123456789abcdef', 'key15': '0123456789abcdef0123456789abcdef', 'key2': '0123456789abcdef0123456789abcdef', 'key3': '0123456789abcdef0123456789abcdef', 'key4': '0123456789abcdef0123456789abcdef', 'key5': '0123456789abcdef0123456789abcdef', 'key6': '0123456789abcdef0123456789abcdef', 'key7': '0123456789abcdef0123456789abcdef', 'key8': '0123456789abcdef0123456789abcdef', 'key9': '0123456789abcdef0123456789abcdef', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'}
# testvectors with varying 128bit key and constant plaintext
dict_present_e128_kvar_t12= {'cip0': '6aa78def1e56bd64', 'cip1': 'd11bf7c9ebeb5f2a', 'cip10': 'bd17d9c04e61a0ee', 'cip11': '7beea04716f98160', 'cip12': '9db697051ed2a6fd', 'cip13': '10ac486c1fae1797', 'cip14': '82029daf135b5ea0', 'cip15': 'e6aff662a22e6a82', 'cip2': '0f02f4374c983d54', 'cip3': '9467d6a56e1ae620', 'cip4': '969d033beca4bacf', 'cip5': '7cf8757b82462b53', 'cip6': '0219814156ecfe5c', 'cip7': 'a77fa7d7205bf834', 'cip8': '39d1e2da674bc609', 'cip9': '97af61eae8a24aee', 'key0': '0123456789abcdef0123', 'key1': '0123456789abcdef0123', 'key10': '0123456789abcdef0123', 'key11': '0123456789abcdef0123', 'key12': '0123456789abcdef0123', 'key13': '0123456789abcdef0123', 'key14': '0123456789abcdef0123', 'key15': '0123456789abcdef0123', 'key2': '0123456789abcdef0123', 'key3': '0123456789abcdef0123', 'key4': '0123456789abcdef0123', 'key5': '0123456789abcdef0123', 'key6': '0123456789abcdef0123', 'key7': '0123456789abcdef0123', 'key8': '0123456789abcdef0123', 'key9': '0123456789abcdef0123', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'}
# testvectors with constant 80bit key and varying plaintext
dict_present_e80_k12_tvar= {'cip0': '6aa78def1e56bd64', 'cip1': 'd11bf7c9ebeb5f2a', 'cip10': 'bd17d9c04e61a0ee', 'cip11': '7beea04716f98160', 'cip12': '9db697051ed2a6fd', 'cip13': '10ac486c1fae1797', 'cip14': '82029daf135b5ea0', 'cip15': 'e6aff662a22e6a82', 'cip2': '0f02f4374c983d54', 'cip3': '9467d6a56e1ae620', 'cip4': '969d033beca4bacf', 'cip5': '7cf8757b82462b53', 'cip6': '0219814156ecfe5c', 'cip7': 'a77fa7d7205bf834', 'cip8': '39d1e2da674bc609', 'cip9': '97af61eae8a24aee', 'key0': '0123456789abcdef0123', 'key1': '0123456789abcdef0123', 'key10': '0123456789abcdef0123', 'key11': '0123456789abcdef0123', 'key12': '0123456789abcdef0123', 'key13': '0123456789abcdef0123', 'key14': '0123456789abcdef0123', 'key15': '0123456789abcdef0123', 'key2': '0123456789abcdef0123', 'key3': '0123456789abcdef0123', 'key4': '0123456789abcdef0123', 'key5': '0123456789abcdef0123', 'key6': '0123456789abcdef0123', 'key7': '0123456789abcdef0123', 'key8': '0123456789abcdef0123', 'key9': '0123456789abcdef0123', 'msg0': '0000000000000000', 'msg1': '000000000000000f', 'msg10': '000000ffffffffff', 'msg11': '00000fffffffffff', 'msg12': '0000ffffffffffff', 'msg13': '000fffffffffffff', 'msg14': '00ffffffffffffff', 'msg15': '0fffffffffffffff', 'msg2': '00000000000000ff', 'msg3': '0000000000000fff', 'msg4': '000000000000ffff', 'msg5': '00000000000fffff', 'msg6': '0000000000ffffff', 'msg7': '000000000fffffff', 'msg8': '00000000ffffffff', 'msg9': '0000000fffffffff'}
# testvectors with varying 80bit key and constant plaintext
dict_present_e80_kvar_t12={'cip0': '6047e90ed080513b', 'cip1': 'af2b954515e7e03d', 'cip10': 'ec5448698c85ef50', 'cip11': '7aa3c9694f868e2a', 'cip12': 'f104d4e9e2c22368', 'cip13': '1dea3abda5a4105c', 'cip14': 'ff56b887e6e403a2', 'cip15': '8b37e72e60fd126d', 'cip16': '701efac813c9c84a', 'cip17': 'bb6fbfc423782c0d', 'cip18': '58a55751c6122fe5', 'cip19': 'd40936d4b245d95f', 'cip2': '9c9f2db024b7e898', 'cip20': '0f5663c0f1aa56da', 'cip3': 'b437977b988c3f51', 'cip4': '10272901fa59c553', 'cip5': 'f7b051c203969e8a', 'cip6': '0a9c44d8f745dbdc', 'cip7': '211bc39399ec1550', 'cip8': '4526f7436c8633a5', 'cip9': '7f948db4b77060b2', 'key0': '00000000000000000000', 'key1': '0000000000000000000f', 'key10': '0000000000ffffffffff', 'key11': '000000000fffffffffff', 'key12': '00000000ffffffffffff', 'key13': '0000000fffffffffffff', 'key14': '000000ffffffffffffff', 'key15': '00000fffffffffffffff', 'key16': '0000ffffffffffffffff', 'key17': '000fffffffffffffffff', 'key18': '00ffffffffffffffffff', 'key19': '0fffffffffffffffffff', 'key2': '000000000000000000ff', 'key20': 'ffffffffffffffffffff', 'key3': '00000000000000000fff', 'key4': '0000000000000000ffff', 'key5': '000000000000000fffff', 'key6': '00000000000000ffffff', 'key7': '0000000000000fffffff', 'key8': '000000000000ffffffff', 'key9': '00000000000fffffffff', 'msg0': '0123456789abcdef', 'msg1': '0123456789abcdef', 'msg10': '0123456789abcdef', 'msg11': '0123456789abcdef', 'msg12': '0123456789abcdef', 'msg13': '0123456789abcdef', 'msg14': '0123456789abcdef', 'msg15': '0123456789abcdef', 'msg16': '0123456789abcdef', 'msg17': '0123456789abcdef', 'msg18': '0123456789abcdef', 'msg19': '0123456789abcdef', 'msg2': '0123456789abcdef', 'msg20': '0123456789abcdef', 'msg3': '0123456789abcdef', 'msg4': '0123456789abcdef', 'msg5': '0123456789abcdef', 'msg6': '0123456789abcdef', 'msg7': '0123456789abcdef', 'msg8': '0123456789abcdef', 'msg9': '0123456789abcdef'}
 
#TWOFISH
#constant key of all zero's and variable plaintext
dict_twofish_ecb_vt_k128 = {'cip10': '670A4ED16EA1BDE23E16CB52DBD31CB0', 'cip11': 'A52335AA9F42886084E21400DE48B62F', 'cip49': 'C4D45503484DBC83CB52D3DB4AD0A7CC', 'cip48': '41EACB7F6B5F9E3E3D299CA416EA2C59', 'key19': '00000000000000000000000000000000', 'key18': '00000000000000000000000000000000', 'key17': '00000000000000000000000000000000', 'key16': '00000000000000000000000000000000', 'key15': '00000000000000000000000000000000', 'key14': '00000000000000000000000000000000', 'key13': '00000000000000000000000000000000', 'key12': '00000000000000000000000000000000', 'key11': '00000000000000000000000000000000', 'key10': '00000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '00000000000000000000000000000000', 'key81': '00000000000000000000000000000000', 'key82': '00000000000000000000000000000000', 'key83': '00000000000000000000000000000000', 'key84': '00000000000000000000000000000000', 'key85': '00000000000000000000000000000000', 'key86': '00000000000000000000000000000000', 'key87': '00000000000000000000000000000000', 'key88': '00000000000000000000000000000000', 'key89': '00000000000000000000000000000000', 'cip41': 'A984F6F70E93FE65C8798C01D4E5D30C', 'cip40': '9BE294C97C2A963006A2BD4541DC7DB5', 'cip43': '646771D16BAEDAC3F8E9D00C212518A2', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': '6850AFECD8064E77F4F6944BDF5B324D', 'cip44': '9D2D410DC6F3BEC913D64BDBDEF3285E', 'cip47': '0CA58E149C2120A8EBF9A7885A89ACBC', 'cip46': '2E341142550F73F4C8E9DCCC5931A158', 'key26': '00000000000000000000000000000000', 'key27': '00000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '24C65ADDE5C3CD24B75C343782E87F6E', 'cip88': 'B22E9707E738F723CD9B99386CE0162E', 'cip85': '803939C10EE11BB254A7768FAD053DA4', 'cip84': '0035A5F7557B1B009327109D0C62F25C', 'cip87': 'DE8381198215D45B1BE787E4E8438500', 'cip86': '35D493255A870959C12F26170E6A1B64', 'cip81': '064BA0E8ADDD8E9DF4496E6931AD25F4', 'cip80': '504C1D7FAE3AB9A62323F21BF9A80A67', 'cip83': '1A20EA3DB071121460244EDE27DA7A39', 'cip82': '51D0B15C08FF32F1DCE7B28320875566', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': '6758972B3171F0EA46304542776337FC', 'cip17': 'EC9B591DB8476C26C3CFDA618C1DBBD8', 'cip14': '20C9F20A8045AEDEE9D6E1CDA948339A', 'cip15': 'DF1606EEF4FEE3F4FC9EC26E2AB388AB', 'cip12': 'A5A240EBFED79F38F31497EA4C9CFCDA', 'cip13': '46A64A07123E1212FE9E2F30EDFD80FF', 'key42': '00000000000000000000000000000000', 'key43': '00000000000000000000000000000000', 'key48': '00000000000000000000000000000000', 'key49': '00000000000000000000000000000000', 'cip18': '651551E741359E0A10BB4EE6A1C07C02', 'cip19': '88BC2BF1F8A55562B95F8547C9A19E56', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': 'F97C415886D05C12598F2C95F6B3EB16', 'cip124': 'EEE324733E6409500FC9F9D6DCA185E0', 'cip126': 'F0FC7D86D814589A09D8EC136F95A124', 'cip121': '80C38900313E9350219EAE9AA7DA5E1B', 'cip120': 'FD7A0B33D397DA035D146DD56C869960', 'cip123': '58A06DC5AD2D7C0550771D6E9D59D58B', 'cip122': 'F50D8495C3DCBFF4DFED0736F92475BB', 'cip58': 'C5094DE7E36CAEBE1B76EC3AC2C875F5', 'cip59': '7DF8910A2D256FFB5D56FD1358F131FE', 'cip52': 'B05E771660493DCE3A275B0252D343A7', 'cip53': '83D0034D231E179207F6A97FB1457FEB', 'cip50': 'CC52B159C2BCF87EE5F4926C6E7B7744', 'cip51': '7E8A4023B8890A2DBF0D54E330FDF2A2', 'cip56': '26031449FBD6C84201B0BFB53B2C23CA', 'cip57': 'AFC8E9D2B9BFED9CE0B898F28607DF4C', 'cip54': '7132BF130E8732C41F68107F49153FF2', 'cip55': 'B93021593B9EA2588F16E87D3C5DE0EC', 'cip4': 'B62324BE427332A6089C7BE40D40292E', 'cip5': '929B4789E9D6940C9A158880CA21C0E2', 'cip6': 'C14830DB50BA7221B27DC033B0D8D331', 'cip7': '743342B02EBE647AE47092D435FA60F6', 'cip0': '73B9FF14CF2589901FF52A0D6F4B7EDE', 'cip1': 'F5A9150BAB6D6AEBD6B4F97D9E93B28B', 'cip2': 'C30F8B221FD6D3996F973CDCDC6E305C', 'cip3': 'D6A531FE826CB0454F2D567A20018CB7', 'cip8': '4F02AF45C09373D879CD01506A4E7D14', 'cip9': '92BC9085AB0BA8FFEC2EA6D360864817', 'key79': '00000000000000000000000000000000', 'key78': '00000000000000000000000000000000', 'key75': '00000000000000000000000000000000', 'key74': '00000000000000000000000000000000', 'key77': '00000000000000000000000000000000', 'key76': '00000000000000000000000000000000', 'key71': '00000000000000000000000000000000', 'key70': '00000000000000000000000000000000', 'key73': '00000000000000000000000000000000', 'key72': '00000000000000000000000000000000', 'cip24': 'F3B4662918864BA94C1CF79C73B1F259', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '00000000000000000000000000000000', 'key109': '00000000000000000000000000000000', 'key100': '00000000000000000000000000000000', 'key101': '00000000000000000000000000000000', 'key102': '00000000000000000000000000000000', 'key103': '00000000000000000000000000000000', 'key104': '00000000000000000000000000000000', 'key105': '00000000000000000000000000000000', 'key106': '00000000000000000000000000000000', 'key107': '00000000000000000000000000000000', 'key28': '00000000000000000000000000000000', 'key29': '00000000000000000000000000000000', 'cip98': 'BB610990F42303F4ECCD795E16780A13', 'cip99': 'A38330C5C0B464FFD6983972CF9541CC', 'cip96': '77628153A62DFD455B1C0E5B6CE9688C', 'cip97': '8AE9DF2D94F6E85C86459132130E1BF5', 'cip94': '3DBB85509557BB00FE0F2013A90A5753', 'cip95': 'F2D75E45A62D1758C7A542BC805AC482', 'cip92': '223D6117FE4864C2B3C513EAC2A5266A', 'cip93': '3DBF645715ED7AD1964E2DCDE2F8806A', 'cip90': '0050FF2C1A3C2AA68207D333F9956A72', 'cip91': '162F7B8D35C1A98305BA0FE2A91FF27A', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '00000000000000000000000000000000', 'key30': '00000000000000000000000000000000', 'key33': '00000000000000000000000000000000', 'key32': '00000000000000000000000000000000', 'key35': '00000000000000000000000000000000', 'key34': '00000000000000000000000000000000', 'key37': '00000000000000000000000000000000', 'key36': '00000000000000000000000000000000', 'key39': '00000000000000000000000000000000', 'key38': '00000000000000000000000000000000', 'cip29': '797224710FD09F9830B0F160AE9051E8', 'cip28': 'C0AD52D4B4F67A9333A5E4B1B1176EEC', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': 'FCA9BAD58DD9C77B0BC0E616E7DE7F2D', 'cip111': '798DA99BEFFBF99B23A3C15A31F60CB1', 'cip112': '015CD86F000C87948BF3591C3DE4391F', 'cip113': 'B40B9945EEF7BC52E0B244ED71FAD3D3', 'cip114': 'D9BBB27B7D8AB20241E60F04108F1E12', 'cip115': '6EC3F259B3FA960505CDE9D20F9EB905', 'cip116': '01C1772AD104A988B2978447B91199F0', 'cip117': 'F8D5E997A8DD1B5BBE79C9F36B94C73C', 'cip118': '4040058B08B27B6A585F18BFDBAE3E29', 'cip119': '55547D09ACAF0C915B24E15ABAB0C827', 'cip67': 'BB26ABB17AD5482B1DCC4018E7DB0950', 'cip66': '18B039EECB68A05CBF8C65EE85BDC4BC', 'cip65': '3B2554E422F9CEBB8271D7A48C94E03F', 'cip64': 'F16305404AE6266C619DC8ACA2D492E1', 'cip63': '80D1463F9E9416A143B2FF69DE629510', 'cip62': 'FC5C4893AD148E4134EAEB3B1B190E29', 'cip61': '5F1861F1523CDA0C95644B0C4F2EE6D1', 'cip60': 'D93F84C1519D6627465E984675AA800B', 'cip69': 'BD8A3B64849E54CC2D8379DCA9E42FDD', 'cip68': '7E7AC0FD5B98157CEAD4BBAB643BE4CA', 'key68': '00000000000000000000000000000000', 'key69': '00000000000000000000000000000000', 'key66': '00000000000000000000000000000000', 'key67': '00000000000000000000000000000000', 'key64': '00000000000000000000000000000000', 'key65': '00000000000000000000000000000000', 'key62': '00000000000000000000000000000000', 'key63': '00000000000000000000000000000000', 'key60': '00000000000000000000000000000000', 'key61': '00000000000000000000000000000000', 'key117': '00000000000000000000000000000000', 'key116': '00000000000000000000000000000000', 'key115': '00000000000000000000000000000000', 'key114': '00000000000000000000000000000000', 'key113': '00000000000000000000000000000000', 'key112': '00000000000000000000000000000000', 'key111': '00000000000000000000000000000000', 'key110': '00000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': '5BAC94C97A4069400875A5ABC07BCB17', 'cip22': 'EC3922A728DA9E4C212D910E5C4AE632', 'cip21': '7B68DA568ABA5AE69D93C915E37DEE91', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'B20F456519D353AF91C012793576F9B8', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': '74139BD645DED7690F606490CCA44DD2', 'key9': '00000000000000000000000000000000', 'key8': '00000000000000000000000000000000', 'cip25': '6FBF5A9A93EFA6640AFB80D9A2D22CF7', 'key3': '00000000000000000000000000000000', 'key2': '00000000000000000000000000000000', 'key1': '00000000000000000000000000000000', 'key0': '00000000000000000000000000000000', 'key7': '00000000000000000000000000000000', 'key6': '00000000000000000000000000000000', 'key5': '00000000000000000000000000000000', 'key4': '00000000000000000000000000000000', 'key22': '00000000000000000000000000000000', 'key23': '00000000000000000000000000000000', 'key20': '00000000000000000000000000000000', 'key21': '00000000000000000000000000000000', 'cip38': 'F9354B12C2366F1CE10F9A0550281267', 'cip39': '684FDA9FCF3B3B5648A452CDA07CF002', 'key24': '00000000000000000000000000000000', 'key25': '00000000000000000000000000000000', 'cip34': '6037FE38896C05745C58C28CDF7FF386', 'cip35': '92F5817D0BE37241F9292F6FF918A8E5', 'cip36': '20C9A2A684563495C255A5751C1AC01E', 'cip37': 'AC6B6DB6D069B6895F2283435D33BD43', 'cip30': '73669B64C292F4461FAA3A3D091D08DA', 'cip31': 'EFE0E893CE04008935CB7D43A7DC9ADD', 'cip32': '3B0A2D3B236324221F81BFCAE45217D8', 'cip33': 'CE6F569FC89127B1AE19466FA36DD6E4', 'key97': '00000000000000000000000000000000', 'key96': '00000000000000000000000000000000', 'key95': '00000000000000000000000000000000', 'key94': '00000000000000000000000000000000', 'key93': '00000000000000000000000000000000', 'key92': '00000000000000000000000000000000', 'key91': '00000000000000000000000000000000', 'key90': '00000000000000000000000000000000', 'key99': '00000000000000000000000000000000', 'key98': '00000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': 'E06A6CE2D74DB3D78E8F5D991C322B87', 'key126': '00000000000000000000000000000000', 'key124': '00000000000000000000000000000000', 'key125': '00000000000000000000000000000000', 'key122': '00000000000000000000000000000000', 'key123': '00000000000000000000000000000000', 'key120': '00000000000000000000000000000000', 'key121': '00000000000000000000000000000000', 'cip109': 'B8EE7182E563888E4F99335CF0372598', 'cip108': 'DD8C11B46F768B7CB2EAEE7E3448DD37', 'cip107': 'F6C56A841A31D58A90F5693F87380A3F', 'cip106': '337FCEE0AD0BDCA24AF5411B69D39B37', 'cip105': '5C8241DA3FB0DC7328271B9FF72C91BA', 'cip104': '1119C20F08D4EA77A13C331678D4D71F', 'cip103': 'CBF5EF38DDEBCA39F2F6BEB2F3042D96', 'cip102': 'FCF7BE4B89B54547C0BEF84EB85734F6', 'cip101': '3BC6740BF141DD33D65FDEAA10BF1655', 'cip100': 'EFD11CA98FEBB6F1ECBEBBCB8BD5E35B', 'cip70': '58C388DFB41FF3E14394C73FD8AAC56A', 'cip71': '944B295E23C5B2542DED57A155D33EF8', 'cip72': '067B4DD07DCA1292CFF0D80D75BDACA5', 'cip73': '7D7344373196C5B30676F270BFC90B07', 'cip74': '988C5164A82254B29326C98812A716CE', 'cip75': '8FFD48787C28542E0450FAD4CBAD34D0', 'cip76': 'C50E7CD771628964E708425160FFB02C', 'cip77': 'B293B07F92D68C18FEC1466996B78020', 'cip78': 'DE21B2A6C8D7B90A7714DB3EF5209A6B', 'cip79': '4700E22C08FE953CABAC7E78A3F747A7', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '00000000000000000000000000000000', 'key118': '00000000000000000000000000000000', 'key59': '00000000000000000000000000000000', 'key58': '00000000000000000000000000000000', 'key53': '00000000000000000000000000000000', 'key52': '00000000000000000000000000000000', 'key51': '00000000000000000000000000000000', 'key50': '00000000000000000000000000000000', 'key57': '00000000000000000000000000000000', 'key56': '00000000000000000000000000000000', 'key55': '00000000000000000000000000000000', 'key54': '00000000000000000000000000000000', 'cip20': '1A6CCCBD8D40AA14810ED615A6A6E24D', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '00000000000000000000000000000000', 'key45': '00000000000000000000000000000000', 'key46': '00000000000000000000000000000000', 'key47': '00000000000000000000000000000000', 'key40': '00000000000000000000000000000000', 'key41': '00000000000000000000000000000000'}
dict_twofish_ecb_vt_k192 = {'cip10': 'A11AE84E6D2C56DED2B9497FEC7504A7', 'cip11': 'B3A1A1E271BF94DA3A5ECFF1D4293A56', 'cip49': 'A2CB209DA6AA40E043E6FB9DD2476100', 'cip48': '3C678BADA3FB1B872C018DC035AE16E8', 'key19': '000000000000000000000000000000000000000000000000', 'key18': '000000000000000000000000000000000000000000000000', 'key17': '000000000000000000000000000000000000000000000000', 'key16': '000000000000000000000000000000000000000000000000', 'key15': '000000000000000000000000000000000000000000000000', 'key14': '000000000000000000000000000000000000000000000000', 'key13': '000000000000000000000000000000000000000000000000', 'key12': '000000000000000000000000000000000000000000000000', 'key11': '000000000000000000000000000000000000000000000000', 'key10': '000000000000000000000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '000000000000000000000000000000000000000000000000', 'key81': '000000000000000000000000000000000000000000000000', 'key82': '000000000000000000000000000000000000000000000000', 'key83': '000000000000000000000000000000000000000000000000', 'key84': '000000000000000000000000000000000000000000000000', 'key85': '000000000000000000000000000000000000000000000000', 'key86': '000000000000000000000000000000000000000000000000', 'key87': '000000000000000000000000000000000000000000000000', 'key88': '000000000000000000000000000000000000000000000000', 'key89': '000000000000000000000000000000000000000000000000', 'cip41': '3E4DB71B9C737C7F8AEF632A5ADEF61D', 'cip40': '13BB56699085842B81DBE8FAA8B26269', 'cip43': '527D14E58B74224622DF7F3FD65932F5', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': 'C57D3ECB71A7DA4708DE6F338BC13E09', 'cip44': '708703993AD1DDE5C7F8714686F3AF32', 'cip47': '01877AC646A283472DA74182FDC1E2B5', 'cip46': 'B31FF60BE0FDC17001CAF87FC7FC0B2D', 'key26': '000000000000000000000000000000000000000000000000', 'key27': '000000000000000000000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '311292EDE1F30E9F22F1EEF8FD19BD80', 'cip88': 'CB5D8A62D16220123EF0005876E35B19', 'cip85': 'FDBFE2C3FFC82792D338388A1FC6D22E', 'cip84': 'FCD07057EF4820154075A0DDCBFC0BBD', 'cip87': 'B1784A7BF395FB525471EE3DC8972FED', 'cip86': '04D5F7CD68FC2352BDDBC82CFE35DA80', 'cip81': '2891C81846949C917E757EBAE20D34EE', 'cip80': '8291F94EDF578E8A70CD0CF8F3FB3558', 'cip83': 'CC6807D209B728C559C32336FD8FB71D', 'cip82': '762D85A32DAF0C9F3CFB3388E808FEC2', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': '1F80E1CE3F12C96F2E647BACB6DA78D8', 'cip17': '12D34A7875E716B37A7E250D37AFFDEA', 'cip14': '76EB4C046F052AE4ED41060BF60067FB', 'cip15': '1273A4BC420BCC9E29619567B1E61762', 'cip12': '5577374ADCF2F58EEEFFC432C42AEB76', 'cip13': 'CD9D355C3574343BC7FBE645CE7EA721', 'key42': '000000000000000000000000000000000000000000000000', 'key43': '000000000000000000000000000000000000000000000000', 'key48': '000000000000000000000000000000000000000000000000', 'key49': '000000000000000000000000000000000000000000000000', 'cip18': '5A54D764EEFFC4B64143A58B071514B4', 'cip19': 'F4F1567BDC5B1F938D5A214419090FE0', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': '4DE2B8FFF3588A5D4E62CADB720E5BCC', 'cip124': 'E26C6B2CBE2130729A5BF96E7CD29912', 'cip126': 'B96DD46C6A286BFF721693A98491F529', 'cip121': 'C464728025916B4E8D56E4A9F98C1A25', 'cip120': '31C62401D6E9E4995C0913747BFE7C7E', 'cip123': '0C06EAC3043ABE6554C2DA42F21E7B05', 'cip122': '0D4643EE09ABD6D6062187789AE9A77D', 'cip58': 'E08686BFAA936E1890AEEC834E3B474A', 'cip59': '10DC4FFCAC5F5A1FB668277E8E75BEAB', 'cip52': 'E68CC86CA4D952BC3890AEC0A7AAA4B5', 'cip53': '02A88364BF94A677124F670A566E3F0D', 'cip50': '4F9402FF56D04C8FB37DBE1A3109D2DE', 'cip51': '342DAAD90F0F1699048D5CD16FDA2EC7', 'cip56': 'B27063442470BE07DCC2256EC71A4F1A', 'cip57': '222CC5A29084A4BDB05D4C2FD95648DF', 'cip54': 'C961EF325E2A32A4359CC63BE1EE2C77', 'cip55': '03BF43C9083E4D9919D12FE5C0315E67', 'cip4': 'C6A61053C48D7ECD7DDD12DB0F316AD7', 'cip5': 'EA5833714F1324DAB7F53CACC63F784F', 'cip6': '450BCB0C7351CB1CDAC5D02E80D13C64', 'cip7': 'C267D3634F84215FB7B4635AFA385E52', 'cip0': '62EF193EDB7D399ACA50EC1CBE5398D8', 'cip1': 'E7A58D547688BA8B69DA949E38AA6FAD', 'cip2': '71579F70A8EDB2BA5C00C513E2D7DEEB', 'cip3': 'C6171EF892F8224DC5FAE230AF629F52', 'cip8': '6DB5B1B156DA1C36B9AB5AB59B063C29', 'cip9': 'EDF2D9B19FF75561E8FA6F411C4A0431', 'key79': '000000000000000000000000000000000000000000000000', 'key78': '000000000000000000000000000000000000000000000000', 'key75': '000000000000000000000000000000000000000000000000', 'key74': '000000000000000000000000000000000000000000000000', 'key77': '000000000000000000000000000000000000000000000000', 'key76': '000000000000000000000000000000000000000000000000', 'key71': '000000000000000000000000000000000000000000000000', 'key70': '000000000000000000000000000000000000000000000000', 'key73': '000000000000000000000000000000000000000000000000', 'key72': '000000000000000000000000000000000000000000000000', 'cip24': '4FE9A0CF34BBCFFF906D8450197CC9D1', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '000000000000000000000000000000000000000000000000', 'key109': '000000000000000000000000000000000000000000000000', 'key100': '000000000000000000000000000000000000000000000000', 'key101': '000000000000000000000000000000000000000000000000', 'key102': '000000000000000000000000000000000000000000000000', 'key103': '000000000000000000000000000000000000000000000000', 'key104': '000000000000000000000000000000000000000000000000', 'key105': '000000000000000000000000000000000000000000000000', 'key106': '000000000000000000000000000000000000000000000000', 'key107': '000000000000000000000000000000000000000000000000', 'key28': '000000000000000000000000000000000000000000000000', 'key29': '000000000000000000000000000000000000000000000000', 'cip98': 'D18104617258AB02AAE02ECCF552A891', 'cip99': '8DC66F1D7648EB62F1DCBEB3CD237985', 'cip96': '774EDF219459A4744AA1CCDE7D969A60', 'cip97': '1D7B340C4CE68AC97369FFF0FF9980C8', 'cip94': '0C8746747460A540E2304B55C12EA672', 'cip95': 'DD6D4D2AA3EB702C597E4E2DE59BF4C9', 'cip92': '0EE175DF45B889CED6974E9C2B8F8A78', 'cip93': '6131A1A18F00CFDA5B4AF4FBE5487445', 'cip90': '382BC583EC9B6E16E3DF2188CF0BF1E8', 'cip91': '632C9AD674BD1B8A15827A789BD133A7', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '000000000000000000000000000000000000000000000000', 'key30': '000000000000000000000000000000000000000000000000', 'key33': '000000000000000000000000000000000000000000000000', 'key32': '000000000000000000000000000000000000000000000000', 'key35': '000000000000000000000000000000000000000000000000', 'key34': '000000000000000000000000000000000000000000000000', 'key37': '000000000000000000000000000000000000000000000000', 'key36': '000000000000000000000000000000000000000000000000', 'key39': '000000000000000000000000000000000000000000000000', 'key38': '000000000000000000000000000000000000000000000000', 'cip29': 'B1F92601B6D8C6B81176A46EE7341D28', 'cip28': '91544D597F679E7DFE6D16D475809851', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': '9B421C68873D49F07E3B9025AD609787', 'cip111': '5B182593B47DC674D8B1942CB97224B2', 'cip112': 'A896871A3157CCD1F5A788E253A6B0FD', 'cip113': '789A3D2B2A70181EFCCE5529F200DC44', 'cip114': '7F9462D23DB6E99AD0A54EA84DBD94E2', 'cip115': '23EAFE1F7CCE96B6BFE2484E1DFC4AB9', 'cip116': 'A76C323805F9C252C8B86C83294B9987', 'cip117': 'D8CA1075B7A3F2CF2DAC0980B1B66CC1', 'cip118': '8206D89F2A07BA6403647FB85A2F4D7D', 'cip119': '3DE7573CD46D85488364472B038869F9', 'cip67': '1779BDFAC6DB722BCAF4D3A8D9D2E725', 'cip66': '59723DB66EDB29A9C81175668903777F', 'cip65': '9570E7A96D4674C800AF8DCD01DEFF64', 'cip64': 'B5D919DFD9828C4FF4427E72ABFC77B2', 'cip63': '96B3608C06112F619B156105EB082BBE', 'cip62': '2072191C277EE40FD557FF5F67A2A546', 'cip61': 'DDF718A1BEB37CC1B0905520DB7C1611', 'cip60': '03A9199978F9D652A4C528FF86C39CE9', 'cip69': '36A6CAA08BD5D2B332E9323F7C2E76CA', 'cip68': '5107B50A150998C6EA01C14697FC0E53', 'key68': '000000000000000000000000000000000000000000000000', 'key69': '000000000000000000000000000000000000000000000000', 'key66': '000000000000000000000000000000000000000000000000', 'key67': '000000000000000000000000000000000000000000000000', 'key64': '000000000000000000000000000000000000000000000000', 'key65': '000000000000000000000000000000000000000000000000', 'key62': '000000000000000000000000000000000000000000000000', 'key63': '000000000000000000000000000000000000000000000000', 'key60': '000000000000000000000000000000000000000000000000', 'key61': '000000000000000000000000000000000000000000000000', 'key117': '000000000000000000000000000000000000000000000000', 'key116': '000000000000000000000000000000000000000000000000', 'key115': '000000000000000000000000000000000000000000000000', 'key114': '000000000000000000000000000000000000000000000000', 'key113': '000000000000000000000000000000000000000000000000', 'key112': '000000000000000000000000000000000000000000000000', 'key111': '000000000000000000000000000000000000000000000000', 'key110': '000000000000000000000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': '1CAD0512E3CC51210B411EE452DF62E4', 'cip22': '49A746CC225C1B6009A93649CDD9EDCD', 'cip21': 'C082154A07AF64FF6ECA811B0E3302E6', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'F0F518F73795AB51BFB6E0AA99A0DAC7', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': '08DB3F476F551D19D9643A9E139E0553', 'key9': '000000000000000000000000000000000000000000000000', 'key8': '000000000000000000000000000000000000000000000000', 'cip25': '38DB8EF6C8993F17BB4D1614B9DE15D4', 'key3': '000000000000000000000000000000000000000000000000', 'key2': '000000000000000000000000000000000000000000000000', 'key1': '000000000000000000000000000000000000000000000000', 'key0': '000000000000000000000000000000000000000000000000', 'key7': '000000000000000000000000000000000000000000000000', 'key6': '000000000000000000000000000000000000000000000000', 'key5': '000000000000000000000000000000000000000000000000', 'key4': '000000000000000000000000000000000000000000000000', 'key22': '000000000000000000000000000000000000000000000000', 'key23': '000000000000000000000000000000000000000000000000', 'key20': '000000000000000000000000000000000000000000000000', 'key21': '000000000000000000000000000000000000000000000000', 'cip38': 'BFBB2A537B2C1339D6230F35A256F289', 'cip39': '70E79718C97DDB187411436AC072B148', 'key24': '000000000000000000000000000000000000000000000000', 'key25': '000000000000000000000000000000000000000000000000', 'cip34': 'B6F5C012E4BA15DC86536F328B137FC0', 'cip35': '1C3031DD05EAA4C278B55EF0E7E4C1F9', 'cip36': '3D72A53BD537D04AC59E0AF36D105ED9', 'cip37': 'A6FFE499A2050C38F4E89DBF12B27430', 'cip30': '796C3A8CBC6450E51FA6F8765ACD0F10', 'cip31': '5F7BFE71BD2E81599DDA3411BC1CA579', 'cip32': '2DF7D576EC6296101CAB16012092C12C', 'cip33': '20769DE071FBE22AE49E7B3F5D646418', 'key97': '000000000000000000000000000000000000000000000000', 'key96': '000000000000000000000000000000000000000000000000', 'key95': '000000000000000000000000000000000000000000000000', 'key94': '000000000000000000000000000000000000000000000000', 'key93': '000000000000000000000000000000000000000000000000', 'key92': '000000000000000000000000000000000000000000000000', 'key91': '000000000000000000000000000000000000000000000000', 'key90': '000000000000000000000000000000000000000000000000', 'key99': '000000000000000000000000000000000000000000000000', 'key98': '000000000000000000000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': 'D7A254B7341C7677C72F9DE729A3BB78', 'key126': '000000000000000000000000000000000000000000000000', 'key124': '000000000000000000000000000000000000000000000000', 'key125': '000000000000000000000000000000000000000000000000', 'key122': '000000000000000000000000000000000000000000000000', 'key123': '000000000000000000000000000000000000000000000000', 'key120': '000000000000000000000000000000000000000000000000', 'key121': '000000000000000000000000000000000000000000000000', 'cip109': '75F7005CA9C6EE5A1F9A4897FA67C661', 'cip108': 'D307263273E250C0B9E08FF23003B0D1', 'cip107': '971D07AEEDBCA5B7BDCD033F708C97DB', 'cip106': 'B442FF3318822EA7F60E2A8A082A043A', 'cip105': '047CBACDC5EA84771A61FE1204813D46', 'cip104': '16F53F3A6CC3B4F86DDA1B8792244901', 'cip103': 'EFE662AF24D9997FAE45CAD4F92F3091', 'cip102': '6E1CDC049333211B4D7533E21504D200', 'cip101': '89239AAFE9BA86E5EC794397E0180111', 'cip100': 'ABF090054ABE052ECE0B07BE6B6CC6DB', 'cip70': 'D1CF37451667EDB8D2E9934D39A27A92', 'cip71': '4E96227B0A018755FBE8AD5BF0E421B0', 'cip72': '3221B3D3A24745B483BBF99509B330A0', 'cip73': '98A4AB39B84D21D36A5DDC2660BD68C5', 'cip74': 'E5C351E1783465EDBA5CE0592BC77E8E', 'cip75': '35489488EE33D0344C1BDB6263D28286', 'cip76': '97EA899F53C60536DAFEB18123FD6C5B', 'cip77': '8511B11C7D2D8FBF63702A7E3AACA08A', 'cip78': 'FE0C90596E4F47FD8A9927D83F4DCA52', 'cip79': '186FE000683CC19F621BC6C2DA300B71', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '000000000000000000000000000000000000000000000000', 'key118': '000000000000000000000000000000000000000000000000', 'key59': '000000000000000000000000000000000000000000000000', 'key58': '000000000000000000000000000000000000000000000000', 'key53': '000000000000000000000000000000000000000000000000', 'key52': '000000000000000000000000000000000000000000000000', 'key51': '000000000000000000000000000000000000000000000000', 'key50': '000000000000000000000000000000000000000000000000', 'key57': '000000000000000000000000000000000000000000000000', 'key56': '000000000000000000000000000000000000000000000000', 'key55': '000000000000000000000000000000000000000000000000', 'key54': '000000000000000000000000000000000000000000000000', 'cip20': '6CB91B935A0FBF49636CDF64A12955B7', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '000000000000000000000000000000000000000000000000', 'key45': '000000000000000000000000000000000000000000000000', 'key46': '000000000000000000000000000000000000000000000000', 'key47': '000000000000000000000000000000000000000000000000', 'key40': '000000000000000000000000000000000000000000000000', 'key41': '000000000000000000000000000000000000000000000000'}
dict_twofish_ecb_vt_k256 = {'cip10': 'CB4F69BCC76A2499C6FCFBBE4CEB8CFB', 'cip11': '0442F15EA2BD6D9EB773F9B99804DF56', 'cip49': '95C18EBA59E3CB6359DE7CCE9E8751F9', 'cip48': 'BCDF1C8686E68810FE90B16ECAB46147', 'key19': '0000000000000000000000000000000000000000000000000000000000000000', 'key18': '0000000000000000000000000000000000000000000000000000000000000000', 'key17': '0000000000000000000000000000000000000000000000000000000000000000', 'key16': '0000000000000000000000000000000000000000000000000000000000000000', 'key15': '0000000000000000000000000000000000000000000000000000000000000000', 'key14': '0000000000000000000000000000000000000000000000000000000000000000', 'key13': '0000000000000000000000000000000000000000000000000000000000000000', 'key12': '0000000000000000000000000000000000000000000000000000000000000000', 'key11': '0000000000000000000000000000000000000000000000000000000000000000', 'key10': '0000000000000000000000000000000000000000000000000000000000000000', 'msg5': '04000000000000000000000000000000', 'msg4': '08000000000000000000000000000000', 'msg7': '01000000000000000000000000000000', 'msg6': '02000000000000000000000000000000', 'msg1': '40000000000000000000000000000000', 'msg0': '80000000000000000000000000000000', 'msg3': '10000000000000000000000000000000', 'msg2': '20000000000000000000000000000000', 'msg9': '00400000000000000000000000000000', 'msg8': '00800000000000000000000000000000', 'key80': '0000000000000000000000000000000000000000000000000000000000000000', 'key81': '0000000000000000000000000000000000000000000000000000000000000000', 'key82': '0000000000000000000000000000000000000000000000000000000000000000', 'key83': '0000000000000000000000000000000000000000000000000000000000000000', 'key84': '0000000000000000000000000000000000000000000000000000000000000000', 'key85': '0000000000000000000000000000000000000000000000000000000000000000', 'key86': '0000000000000000000000000000000000000000000000000000000000000000', 'key87': '0000000000000000000000000000000000000000000000000000000000000000', 'key88': '0000000000000000000000000000000000000000000000000000000000000000', 'key89': '0000000000000000000000000000000000000000000000000000000000000000', 'cip41': '079BDF2DAD2CE6FB7D21BBD76A7ABF48', 'cip40': '4E1FD4BC99AEA3BCC6B9066EC6329D43', 'cip43': 'FD854A50372E5D301367D8E98CC88028', 'msg60': '00000000000000080000000000000000', 'msg61': '00000000000000040000000000000000', 'msg62': '00000000000000020000000000000000', 'msg63': '00000000000000010000000000000000', 'msg64': '00000000000000008000000000000000', 'msg65': '00000000000000004000000000000000', 'msg66': '00000000000000002000000000000000', 'msg67': '00000000000000001000000000000000', 'msg68': '00000000000000000800000000000000', 'cip45': '73A43C713898BA7D7D2B6BC8673A7AAA', 'cip44': '8CE94A2C43B01825CE5F271135481BB2', 'cip47': '3F168CD782896F22C56A92A09EA7E162', 'cip46': '13873CFBDED482C0B7B435025A9F1CF4', 'key26': '0000000000000000000000000000000000000000000000000000000000000000', 'key27': '0000000000000000000000000000000000000000000000000000000000000000', 'msg15': '00010000000000000000000000000000', 'msg14': '00020000000000000000000000000000', 'msg17': '00004000000000000000000000000000', 'msg16': '00008000000000000000000000000000', 'msg11': '00100000000000000000000000000000', 'msg10': '00200000000000000000000000000000', 'msg13': '00040000000000000000000000000000', 'msg12': '00080000000000000000000000000000', 'msg19': '00001000000000000000000000000000', 'msg18': '00002000000000000000000000000000', 'cip89': '22D29CFEF3A6DC0EC67A9EA8523D6158', 'cip88': '59A9E8C14ACBCEC235529425CF86998E', 'cip85': '3D234C0F78ECBEFCCDCE1EA6EC98C145', 'cip84': 'E93AEB7AD76A6AD0AF4092F363421F1B', 'cip87': '1CF1A160FAD7E744F08BA1454A999211', 'cip86': 'BA300B0234F0C96125D33123CDD7D6A4', 'cip81': 'F7BA140AED4756B26789498A17EBF62D', 'cip80': 'ACE4949143D4D1441AA854331E7F511B', 'cip83': '4CF26F088604368B17DDC09FF9D0146D', 'cip82': 'F23E08B81ACB75FE2326A94ECC5968AC', 'msg115': '00000000000000000000000000001000', 'msg114': '00000000000000000000000000002000', 'msg117': '00000000000000000000000000000400', 'msg116': '00000000000000000000000000000800', 'msg111': '00000000000000000000000000010000', 'msg110': '00000000000000000000000000020000', 'msg113': '00000000000000000000000000004000', 'msg112': '00000000000000000000000000008000', 'msg119': '00000000000000000000000000000100', 'msg118': '00000000000000000000000000000200', 'cip16': 'B27A42D2C870DC96BC6C551218C44CC4', 'cip17': 'CE8D23E64E6BC18208CEEB282E387326', 'cip14': 'D08EF37A59D94ED645B1D1B160E3E816', 'cip15': 'E91891CAC17FE493C7167C6CB59DCB69', 'cip12': '9CE6896C15C3CC00E2AA1944D7117B98', 'cip13': 'E934066740023616B349F45582442647', 'key42': '0000000000000000000000000000000000000000000000000000000000000000', 'key43': '0000000000000000000000000000000000000000000000000000000000000000', 'key48': '0000000000000000000000000000000000000000000000000000000000000000', 'key49': '0000000000000000000000000000000000000000000000000000000000000000', 'cip18': '36F76678A27F2F5A436073D5ADA4AB3B', 'cip19': 'D0EAA36F9A648905B277F0BD24B1A339', 'msg59': '00000000000000100000000000000000', 'msg58': '00000000000000200000000000000000', 'msg51': '00000000000010000000000000000000', 'msg50': '00000000000020000000000000000000', 'msg53': '00000000000004000000000000000000', 'msg52': '00000000000008000000000000000000', 'msg55': '00000000000001000000000000000000', 'msg54': '00000000000002000000000000000000', 'msg57': '00000000000000400000000000000000', 'msg56': '00000000000000800000000000000000', 'cip125': '0137C87257A8CBD18C218A867B3AB5F8', 'cip124': '8FD0F15E2504A8F4FD751CA7799FFB1D', 'cip126': '3DB0F1674F187DF1CB036DB33A05A0D7', 'cip121': '40CD83A5F0BFD0E1D7FE14299CECFB7C', 'cip120': 'F218D92AED363C6829F7FA3BA346E0FB', 'cip123': 'C7A5A88356152E95F36739AB5EF9F63F', 'cip122': '512F022157AEF0015E93F3737911A35E', 'cip58': '1344C1E04A9D97668A240D82396AC021', 'cip59': '9067BAA44C264E9A2AEC292390A6F492', 'cip52': '453912532144CED54B7D4049BC8B8CF2', 'cip53': 'C6DBBF405A056A80CA788267538FE8F0', 'cip50': '03CFEA7D36D56552CDEF806215EA7596', 'cip51': 'CC189A2E8F529EB139DCA2033109F40B', 'cip56': '9CC3EB61A9907F5F22251239A9EB38ED', 'cip57': '726A3EE922EDFE52206C2191E1F045F4', 'cip54': '2EB5E272874CE244A328BA6410480B4C', 'cip55': '263BFB611CBD9D9C7FF6B1A9E3276696', 'cip4': 'DC3B1C37C69B4059EAADF03FCD016EB4', 'cip5': '3C9D9BD904E0E6916089A4BAC35E5368', 'cip6': 'C47DA045701B93A388E76FCBCD349F22', 'cip7': '52F264B196925A345CA5ADC57C234B96', 'cip0': '23A385F617F313DAC05BCB7EABD61807', 'cip1': '35BE2B4738602A1DA3DE5C9E7E871923', 'cip2': '03E8BB7A568E95BA792DCE77D5523C2B', 'cip3': 'D3ACBE92C482D2E806FD837E41DBB288', 'cip8': 'C923754C5AD2E3F842D01705A716BE8A', 'cip9': '630075C7563CDBACDFEADB781CC9467C', 'key79': '0000000000000000000000000000000000000000000000000000000000000000', 'key78': '0000000000000000000000000000000000000000000000000000000000000000', 'key75': '0000000000000000000000000000000000000000000000000000000000000000', 'key74': '0000000000000000000000000000000000000000000000000000000000000000', 'key77': '0000000000000000000000000000000000000000000000000000000000000000', 'key76': '0000000000000000000000000000000000000000000000000000000000000000', 'key71': '0000000000000000000000000000000000000000000000000000000000000000', 'key70': '0000000000000000000000000000000000000000000000000000000000000000', 'key73': '0000000000000000000000000000000000000000000000000000000000000000', 'key72': '0000000000000000000000000000000000000000000000000000000000000000', 'cip24': 'FE776B4476A4F029E5EA9293E3C1BCA1', 'msg99': '00000000000000000000000010000000', 'msg98': '00000000000000000000000020000000', 'msg95': '00000000000000000000000100000000', 'msg94': '00000000000000000000000200000000', 'msg97': '00000000000000000000000040000000', 'msg96': '00000000000000000000000080000000', 'msg91': '00000000000000000000001000000000', 'msg90': '00000000000000000000002000000000', 'msg93': '00000000000000000000000400000000', 'msg92': '00000000000000000000000800000000', 'key108': '0000000000000000000000000000000000000000000000000000000000000000', 'key109': '0000000000000000000000000000000000000000000000000000000000000000', 'key100': '0000000000000000000000000000000000000000000000000000000000000000', 'key101': '0000000000000000000000000000000000000000000000000000000000000000', 'key102': '0000000000000000000000000000000000000000000000000000000000000000', 'key103': '0000000000000000000000000000000000000000000000000000000000000000', 'key104': '0000000000000000000000000000000000000000000000000000000000000000', 'key105': '0000000000000000000000000000000000000000000000000000000000000000', 'key106': '0000000000000000000000000000000000000000000000000000000000000000', 'key107': '0000000000000000000000000000000000000000000000000000000000000000', 'key28': '0000000000000000000000000000000000000000000000000000000000000000', 'key29': '0000000000000000000000000000000000000000000000000000000000000000', 'cip98': '4A2A6EB6845723C1C790D693B596CDE3', 'cip99': 'EF3D7C67417CA1FEEF03EF71441BDDFE', 'cip96': '9E12338BF484106249754EAA6C441192', 'cip97': 'F13303DC759CA65097EC87F8D854163C', 'cip94': '545BDE9D1C11239ED70D93060F24E397', 'cip95': '720622F5194578B3C24B5DDDC7E30327', 'cip92': 'CD62AD57393A38607436FAF0985C2D50', 'cip93': '5209ADE137B93BA0963528E3E1A40F2A', 'cip90': '513971F979FC906FADD982D7F08E4F05', 'cip91': '6A95C07D7FACF2CD36DF362116A2DD5F', 'msg120': '00000000000000000000000000000080', 'msg121': '00000000000000000000000000000040', 'msg122': '00000000000000000000000000000020', 'msg123': '00000000000000000000000000000010', 'msg124': '00000000000000000000000000000008', 'msg125': '00000000000000000000000000000004', 'msg126': '00000000000000000000000000000002', 'key31': '0000000000000000000000000000000000000000000000000000000000000000', 'key30': '0000000000000000000000000000000000000000000000000000000000000000', 'key33': '0000000000000000000000000000000000000000000000000000000000000000', 'key32': '0000000000000000000000000000000000000000000000000000000000000000', 'key35': '0000000000000000000000000000000000000000000000000000000000000000', 'key34': '0000000000000000000000000000000000000000000000000000000000000000', 'key37': '0000000000000000000000000000000000000000000000000000000000000000', 'key36': '0000000000000000000000000000000000000000000000000000000000000000', 'key39': '0000000000000000000000000000000000000000000000000000000000000000', 'key38': '0000000000000000000000000000000000000000000000000000000000000000', 'cip29': '287D27FB1CA40821294B1AFC868F3A6F', 'cip28': '96C88E46C1C2BA0B583F30FE0248A794', 'msg69': '00000000000000000400000000000000', 'msg48': '00000000000080000000000000000000', 'msg49': '00000000000040000000000000000000', 'msg42': '00000000002000000000000000000000', 'msg43': '00000000001000000000000000000000', 'msg40': '00000000008000000000000000000000', 'msg41': '00000000004000000000000000000000', 'msg46': '00000000000200000000000000000000', 'msg47': '00000000000100000000000000000000', 'msg44': '00000000000800000000000000000000', 'msg45': '00000000000400000000000000000000', 'cip110': '18BD598BFA2C77E21DBD594EE0E5CDCB', 'cip111': '248CF533016A6AB1F84F85B2C5CD41A7', 'cip112': 'A3B12F578353514CCC500ADD6C495A6C', 'cip113': 'EE2DC099B37D200B4D3930A6DE07208E', 'cip114': '412C9F198D58A0F01F66DF07CF211636', 'cip115': '5B3532BA46716B02E761339DBAFBAAB0', 'cip116': '0148187CA72EC46B522E4FE7E1261522', 'cip117': '84C529CC4E23683AB90A24A6690662ED', 'cip118': '0D1EF0481593A3D95F0361C776D9A4D2', 'cip119': 'D622171C73726DB6620FFDA6540D510E', 'cip67': 'C324FF5F71A974F13F5D83226441E3BD', 'cip66': '019D3B42FA31A9F9175759E6C3193A07', 'cip65': '4584FCBB487171176C4318082EFEFDF7', 'cip64': '7604D9F3110F8440917ABCEA49710ADA', 'cip63': '76C59131EFFAE14058D99E22698B602D', 'cip62': '44BAD80B0BA01E971ADC4139D6DE0C36', 'cip61': 'DF0D31D14D81FD086E8E32479919FDBC', 'cip60': '1176621BD24D35670B08D6A065806B02', 'cip69': 'FBB99A524AC23D74047D814EC0AEDBE2', 'cip68': 'D9DF41408DFF80DE7C9571706B39038F', 'key68': '0000000000000000000000000000000000000000000000000000000000000000', 'key69': '0000000000000000000000000000000000000000000000000000000000000000', 'key66': '0000000000000000000000000000000000000000000000000000000000000000', 'key67': '0000000000000000000000000000000000000000000000000000000000000000', 'key64': '0000000000000000000000000000000000000000000000000000000000000000', 'key65': '0000000000000000000000000000000000000000000000000000000000000000', 'key62': '0000000000000000000000000000000000000000000000000000000000000000', 'key63': '0000000000000000000000000000000000000000000000000000000000000000', 'key60': '0000000000000000000000000000000000000000000000000000000000000000', 'key61': '0000000000000000000000000000000000000000000000000000000000000000', 'key117': '0000000000000000000000000000000000000000000000000000000000000000', 'key116': '0000000000000000000000000000000000000000000000000000000000000000', 'key115': '0000000000000000000000000000000000000000000000000000000000000000', 'key114': '0000000000000000000000000000000000000000000000000000000000000000', 'key113': '0000000000000000000000000000000000000000000000000000000000000000', 'key112': '0000000000000000000000000000000000000000000000000000000000000000', 'key111': '0000000000000000000000000000000000000000000000000000000000000000', 'key110': '0000000000000000000000000000000000000000000000000000000000000000', 'msg86': '00000000000000000000020000000000', 'msg87': '00000000000000000000010000000000', 'msg84': '00000000000000000000080000000000', 'msg85': '00000000000000000000040000000000', 'msg82': '00000000000000000000200000000000', 'msg83': '00000000000000000000100000000000', 'msg80': '00000000000000000000800000000000', 'msg81': '00000000000000000000400000000000', 'cip23': 'C784C5EA8CE3897F153336047D2FE3E0', 'cip22': '0A7FCF71DAC023718153FFB761BAEBEF', 'cip21': '013CAE3986083F8D321273D68CA9784D', 'msg33': '00000000400000000000000000000000', 'msg32': '00000000800000000000000000000000', 'msg31': '00000001000000000000000000000000', 'msg30': '00000002000000000000000000000000', 'msg37': '00000000040000000000000000000000', 'msg36': '00000000080000000000000000000000', 'msg35': '00000000100000000000000000000000', 'msg34': '00000000200000000000000000000000', 'cip27': 'C5579556F710EACFAD9319AA85B89F6F', 'msg39': '00000000010000000000000000000000', 'msg38': '00000000020000000000000000000000', 'cip26': 'E6C43F6F62F1EEE0BDB3484F325053B6', 'key9': '0000000000000000000000000000000000000000000000000000000000000000', 'key8': '0000000000000000000000000000000000000000000000000000000000000000', 'cip25': '302A5F9A73B07D83699EB9DE1D86DB7B', 'key3': '0000000000000000000000000000000000000000000000000000000000000000', 'key2': '0000000000000000000000000000000000000000000000000000000000000000', 'key1': '0000000000000000000000000000000000000000000000000000000000000000', 'key0': '0000000000000000000000000000000000000000000000000000000000000000', 'key7': '0000000000000000000000000000000000000000000000000000000000000000', 'key6': '0000000000000000000000000000000000000000000000000000000000000000', 'key5': '0000000000000000000000000000000000000000000000000000000000000000', 'key4': '0000000000000000000000000000000000000000000000000000000000000000', 'key22': '0000000000000000000000000000000000000000000000000000000000000000', 'key23': '0000000000000000000000000000000000000000000000000000000000000000', 'key20': '0000000000000000000000000000000000000000000000000000000000000000', 'key21': '0000000000000000000000000000000000000000000000000000000000000000', 'cip38': 'BE346B07869425CBCA54F93D7A1F4035', 'cip39': '60EE2023B03033A972E28E4A21C7005F', 'key24': '0000000000000000000000000000000000000000000000000000000000000000', 'key25': '0000000000000000000000000000000000000000000000000000000000000000', 'cip34': '2AB8B9254ADBDCE17F0A719815DEFF7E', 'cip35': '75A30CEAA03AF66E44A85DC66DEB20C9', 'cip36': 'C37E64CE86B615573C4C42BBE71DACD8', 'cip37': '284CB50259A96CCED1C1C64D8B603024', 'cip30': 'F4602DF76A24010DE5A1353043CF178E', 'cip31': '47F98AA9DF5E7314D3D5571EF6B95284', 'cip32': '77CBF7DCA60F913FD9C82AC65212EBB2', 'cip33': 'BEB1C2BC4B5C363FCF5A0466883079A9', 'key97': '0000000000000000000000000000000000000000000000000000000000000000', 'key96': '0000000000000000000000000000000000000000000000000000000000000000', 'key95': '0000000000000000000000000000000000000000000000000000000000000000', 'key94': '0000000000000000000000000000000000000000000000000000000000000000', 'key93': '0000000000000000000000000000000000000000000000000000000000000000', 'key92': '0000000000000000000000000000000000000000000000000000000000000000', 'key91': '0000000000000000000000000000000000000000000000000000000000000000', 'key90': '0000000000000000000000000000000000000000000000000000000000000000', 'key99': '0000000000000000000000000000000000000000000000000000000000000000', 'key98': '0000000000000000000000000000000000000000000000000000000000000000', 'msg77': '00000000000000000004000000000000', 'msg76': '00000000000000000008000000000000', 'msg75': '00000000000000000010000000000000', 'msg74': '00000000000000000020000000000000', 'msg73': '00000000000000000040000000000000', 'msg72': '00000000000000000080000000000000', 'msg71': '00000000000000000100000000000000', 'msg70': '00000000000000000200000000000000', 'msg79': '00000000000000000001000000000000', 'msg78': '00000000000000000002000000000000', 'cip42': '6B933D9914169C2A704E52EC6D7E4E1D', 'key126': '0000000000000000000000000000000000000000000000000000000000000000', 'key124': '0000000000000000000000000000000000000000000000000000000000000000', 'key125': '0000000000000000000000000000000000000000000000000000000000000000', 'key122': '0000000000000000000000000000000000000000000000000000000000000000', 'key123': '0000000000000000000000000000000000000000000000000000000000000000', 'key120': '0000000000000000000000000000000000000000000000000000000000000000', 'key121': '0000000000000000000000000000000000000000000000000000000000000000', 'cip109': '2F3AA68FFE3B99DC92621782F3F9ED67', 'cip108': 'BEF65A32FF7383CFDB5A90C2F3B93837', 'cip107': '1C11730D62BCA6F847B1457B5287BD12', 'cip106': '5AF4F5E8491EE7F87EB809D82AEC12DB', 'cip105': '4C9902E89253D7A172BABFA87DB94816', 'cip104': 'E650CB445AF48A77E8DB6E2EFBCE6FA7', 'cip103': '05C6D61B75312924E0BCEDCB4B8D55DD', 'cip102': 'AC9D55D4A4FBB80C9B79C9077BA381B1', 'cip101': 'DCFFDB5E44574D0D593A70ADA4C79474', 'cip100': '214FB38A7511A87CF160F59CCA2B8E33', 'cip70': '877C855E25345F6C7DB4237ECF64C874', 'cip71': '206500F822C1305F9D61F49FC57AFBF2', 'cip72': 'C7538D97A78844C3C00740865E26755B', 'cip73': 'FADBC4A6E4564041ADA094C603CABAA4', 'cip74': '04C482E0707DE6DC1917727D00C4FA6B', 'cip75': 'EE36B8996AFF98BEA6E2115B9D173321', 'cip76': 'DBA4A5F38B104985D796ECDDD812B605', 'cip77': '1DC0F910CD5AF1E5734169459E170192', 'cip78': 'C3B7D6914052503D377B01DB4E3A630D', 'cip79': '54D807506602ECF7D6B8C4D923317738', 'msg106': '00000000000000000000000000200000', 'msg107': '00000000000000000000000000100000', 'msg104': '00000000000000000000000000800000', 'msg105': '00000000000000000000000000400000', 'msg102': '00000000000000000000000002000000', 'msg88': '00000000000000000000008000000000', 'msg100': '00000000000000000000000008000000', 'msg101': '00000000000000000000000004000000', 'msg89': '00000000000000000000004000000000', 'msg108': '00000000000000000000000000080000', 'msg109': '00000000000000000000000000040000', 'key119': '0000000000000000000000000000000000000000000000000000000000000000', 'key118': '0000000000000000000000000000000000000000000000000000000000000000', 'key59': '0000000000000000000000000000000000000000000000000000000000000000', 'key58': '0000000000000000000000000000000000000000000000000000000000000000', 'key53': '0000000000000000000000000000000000000000000000000000000000000000', 'key52': '0000000000000000000000000000000000000000000000000000000000000000', 'key51': '0000000000000000000000000000000000000000000000000000000000000000', 'key50': '0000000000000000000000000000000000000000000000000000000000000000', 'key57': '0000000000000000000000000000000000000000000000000000000000000000', 'key56': '0000000000000000000000000000000000000000000000000000000000000000', 'key55': '0000000000000000000000000000000000000000000000000000000000000000', 'key54': '0000000000000000000000000000000000000000000000000000000000000000', 'cip20': '82BE0E3673E7872BF79BBE2A45F4BD93', 'msg103': '00000000000000000000000001000000', 'msg28': '00000008000000000000000000000000', 'msg29': '00000004000000000000000000000000', 'msg24': '00000080000000000000000000000000', 'msg25': '00000040000000000000000000000000', 'msg26': '00000020000000000000000000000000', 'msg27': '00000010000000000000000000000000', 'msg20': '00000800000000000000000000000000', 'msg21': '00000400000000000000000000000000', 'msg22': '00000200000000000000000000000000', 'msg23': '00000100000000000000000000000000', 'key44': '0000000000000000000000000000000000000000000000000000000000000000', 'key45': '0000000000000000000000000000000000000000000000000000000000000000', 'key46': '0000000000000000000000000000000000000000000000000000000000000000', 'key47': '0000000000000000000000000000000000000000000000000000000000000000', 'key40': '0000000000000000000000000000000000000000000000000000000000000000', 'key41': '0000000000000000000000000000000000000000000000000000000000000000'}
#constant plaintext of all zero's and variable keys
dict_twofish_ecb_vk_k128 = {'cip10': 'D4580FC395979689221C57A23598358B', 'cip11': '35CA62BA8126F015FABFEF8F9119AE6B', 'cip49': '913EB9205DB2E17A96A23A724EDF4C84', 'cip48': 'C2652FDB48B9DDBFC43B3F7CDD831D6F', 'key19': '00001000000000000000000000000000', 'key18': '00002000000000000000000000000000', 'key17': '00004000000000000000000000000000', 'key16': '00008000000000000000000000000000', 'key15': '00010000000000000000000000000000', 'key14': '00020000000000000000000000000000', 'key13': '00040000000000000000000000000000', 'key12': '00080000000000000000000000000000', 'key11': '00100000000000000000000000000000', 'key10': '00200000000000000000000000000000', 'msg5': '00000000000000000000000000000000', 'msg4': '00000000000000000000000000000000', 'msg7': '00000000000000000000000000000000', 'msg6': '00000000000000000000000000000000', 'msg1': '00000000000000000000000000000000', 'msg0': '00000000000000000000000000000000', 'msg3': '00000000000000000000000000000000', 'msg2': '00000000000000000000000000000000', 'msg9': '00000000000000000000000000000000', 'msg8': '00000000000000000000000000000000', 'key80': '00000000000000000000800000000000', 'key81': '00000000000000000000400000000000', 'key82': '00000000000000000000200000000000', 'key83': '00000000000000000000100000000000', 'key84': '00000000000000000000080000000000', 'key85': '00000000000000000000040000000000', 'key86': '00000000000000000000020000000000', 'key87': '00000000000000000000010000000000', 'key88': '00000000000000000000008000000000', 'key89': '00000000000000000000004000000000', 'cip41': 'D50A1F966058C6D702D1AFCD700DA0E8', 'cip40': '3E1BC58269B6B8C8C8D00806975F8337', 'cip43': '9ED4EA506A0CBA89B246C14D1B5B96A9', 'msg60': '00000000000000000000000000000000', 'msg61': '00000000000000000000000000000000', 'msg62': '00000000000000000000000000000000', 'msg63': '00000000000000000000000000000000', 'msg64': '00000000000000000000000000000000', 'msg65': '00000000000000000000000000000000', 'msg66': '00000000000000000000000000000000', 'msg67': '00000000000000000000000000000000', 'msg68': '00000000000000000000000000000000', 'cip45': '06562AC497C60F802B68B47DB5B86B6A', 'cip44': 'C395A92C1A6884857B263F01F43542DB', 'cip47': 'B8FD6A8227D0565A4C174AD270EC1205', 'cip46': '255A726F2106177FEFA7006BDE05D059', 'key26': '00000020000000000000000000000000', 'key27': '00000010000000000000000000000000', 'msg15': '00000000000000000000000000000000', 'msg14': '00000000000000000000000000000000', 'msg17': '00000000000000000000000000000000', 'msg16': '00000000000000000000000000000000', 'msg11': '00000000000000000000000000000000', 'msg10': '00000000000000000000000000000000', 'msg13': '00000000000000000000000000000000', 'msg12': '00000000000000000000000000000000', 'msg19': '00000000000000000000000000000000', 'msg18': '00000000000000000000000000000000', 'cip89': '325163F073E5A27EBAF339B1FA53682D', 'cip88': 'C0860A7B47544872B9DB5C220088DE5C', 'cip85': 'E8B4F95053617F6A10120DB196AAC4D1', 'cip84': '594B2917DE6119B62BE3DDF10A1A47E0', 'cip87': '5E7E6175F6B548E5389C1B1C391CBEE2', 'cip86': '79646B1CC19708973215B9891A2C1019', 'cip81': '6CE0A0BA02041CB5E6C0A46DE1B71A43', 'cip80': 'C0A7B6BCE0675A48E95D39A7659CB20A', 'cip83': 'BB652196955BB7BE7E8CB8E2E992A750', 'cip82': 'E54045C33A386555C5754ADB0A181244', 'msg115': '00000000000000000000000000000000', 'msg114': '00000000000000000000000000000000', 'msg117': '00000000000000000000000000000000', 'msg116': '00000000000000000000000000000000', 'msg111': '00000000000000000000000000000000', 'msg110': '00000000000000000000000000000000', 'msg113': '00000000000000000000000000000000', 'msg112': '00000000000000000000000000000000', 'msg119': '00000000000000000000000000000000', 'msg118': '00000000000000000000000000000000', 'cip16': 'FD49069AE9F1874A264A7BFD894ED886', 'cip17': '232755C754075BB5CC5B85ABFEA38779', 'cip14': 'A0941008068D401DEAB6400C86CA53AD', 'cip15': '2B63BEF50BA87A58BFFCA4CF44C22927', 'cip12': 'C81FACB16E087EEFA823CF34E02FE482', 'cip13': '07400F04E4CC6625AE3FB41ECC863F2A', 'key42': '00000000002000000000000000000000', 'key43': '00000000001000000000000000000000', 'key48': '00000000000080000000000000000000', 'key49': '00000000000040000000000000000000', 'cip18': '41358B9C76E959037E13F7E5050E0B42', 'cip19': '8978CD09C054BB1ABDFFBED09D1CF7EC', 'msg59': '00000000000000000000000000000000', 'msg58': '00000000000000000000000000000000', 'msg51': '00000000000000000000000000000000', 'msg50': '00000000000000000000000000000000', 'msg53': '00000000000000000000000000000000', 'msg52': '00000000000000000000000000000000', 'msg55': '00000000000000000000000000000000', 'msg54': '00000000000000000000000000000000', 'msg57': '00000000000000000000000000000000', 'msg56': '00000000000000000000000000000000', 'cip125': '7DD12AD3BC7A419F92753D8CC39637F0', 'cip124': '6C4C8811B4DF74F2A7D7F79A6253CEA7', 'cip126': 'A465B01EA32B2F4F87C85FD06F9B0A02', 'cip121': 'DB720E7B04462829DFA258ED9E7C7F2F', 'cip120': '4E171141E51234DE6E4B236643A6DC85', 'cip123': 'F0E35BFF226C064E08368AF440298DB9', 'cip122': '8B10E11115FF4336DE57F2EA13AABBFA', 'cip58': '46B1EB96EC9EB10897F1562E59287253', 'cip59': '1793F1D4E1A1606F99C7019C19E85129', 'cip52': 'E70F0D4ED829A81E05D42E511EDE9376', 'cip53': '140BB7CAD8D6A3553BEF7A3D52347BD8', 'cip50': '9A6694FEB5EA44FF0572124FDB265658', 'cip51': 'E347498DECA6B211C30E21FD0B47A333', 'cip56': 'E2799D5C380B49D2F6997009079D03D3', 'cip57': '06AFBD8077909E847AF467BB2D47E893', 'cip54': '5FA55360F440DCCA20925A3E15B42764', 'cip55': '6D5B969DFC3EA0A6682CC66488D221DA', 'cip4': 'F026BFDF6BFBC7E50C46C533BD271C24', 'cip5': 'F3023228D77045D37D1B9CD77437395A', 'cip6': 'F67467BF6B490209809714D50679B2D7', 'cip7': '2C8431B922C5F560095E9867B1A41256', 'cip0': '6BFD32804A1C3206C4BF85EB11241F89', 'cip1': 'F097147AE851845984DC97D5FAE40CF9', 'cip2': '6117F1977C5ABD9647C56544D9458444', 'cip3': '75A6240AAE357DEDDF99936705618284', 'cip8': '1FB76E90D207BA4C770F67284D6B1359', 'cip9': 'A70AECE1D41DCA9F24BCE8393F6D54BF', 'key79': '00000000000000000001000000000000', 'key78': '00000000000000000002000000000000', 'key75': '00000000000000000010000000000000', 'key74': '00000000000000000020000000000000', 'key77': '00000000000000000004000000000000', 'key76': '00000000000000000008000000000000', 'key71': '00000000000000000100000000000000', 'key70': '00000000000000000200000000000000', 'key73': '00000000000000000040000000000000', 'key72': '00000000000000000080000000000000', 'cip24': 'FCD577A23F455ACDE3732C262EBD2D86', 'msg99': '00000000000000000000000000000000', 'msg98': '00000000000000000000000000000000', 'msg95': '00000000000000000000000000000000', 'msg94': '00000000000000000000000000000000', 'msg97': '00000000000000000000000000000000', 'msg96': '00000000000000000000000000000000', 'msg91': '00000000000000000000000000000000', 'msg90': '00000000000000000000000000000000', 'msg93': '00000000000000000000000000000000', 'msg92': '00000000000000000000000000000000', 'key108': '00000000000000000000000000080000', 'key109': '00000000000000000000000000040000', 'key100': '00000000000000000000000008000000', 'key101': '00000000000000000000000004000000', 'key102': '00000000000000000000000002000000', 'key103': '00000000000000000000000001000000', 'key104': '00000000000000000000000000800000', 'key105': '00000000000000000000000000400000', 'key106': '00000000000000000000000000200000', 'key107': '00000000000000000000000000100000', 'key28': '00000008000000000000000000000000', 'key29': '00000004000000000000000000000000', 'cip98': '34589936B79E4F43260DC6CCD1820D6D', 'cip99': 'C7A8FF65CD38D008EC6745897E010122', 'cip96': 'D80D1378E30036D92B4A359F68D0CBFE', 'cip97': 'EDA13B315897290E4ACEB4B513E9749B', 'cip94': 'B6AD728D2970637642723FF06204EEAD', 'cip95': '0ADF4A82FFE602BC13002AA8AB24EA71', 'cip92': 'D3B9999669509564741F236EEF2401F3', 'cip93': '3376DA406D82B76591B610C6C9FC3F9E', 'cip90': '1A0C4583CEFF5810F3AB42A471415A1D', 'cip91': 'F8DDF239D19363957C7C8C9B537893FA', 'msg120': '00000000000000000000000000000000', 'msg121': '00000000000000000000000000000000', 'msg122': '00000000000000000000000000000000', 'msg123': '00000000000000000000000000000000', 'msg124': '00000000000000000000000000000000', 'msg125': '00000000000000000000000000000000', 'msg126': '00000000000000000000000000000000', 'key31': '00000001000000000000000000000000', 'key30': '00000002000000000000000000000000', 'key33': '00000000400000000000000000000000', 'key32': '00000000800000000000000000000000', 'key35': '00000000100000000000000000000000', 'key34': '00000000200000000000000000000000', 'key37': '00000000040000000000000000000000', 'key36': '00000000080000000000000000000000', 'key39': '00000000010000000000000000000000', 'key38': '00000000020000000000000000000000', 'cip29': 'AC4CDB534844EA86000B845FCDAD605F', 'cip28': '29A9D577BB3824209FEA64128247CE6C', 'msg69': '00000000000000000000000000000000', 'msg48': '00000000000000000000000000000000', 'msg49': '00000000000000000000000000000000', 'msg42': '00000000000000000000000000000000', 'msg43': '00000000000000000000000000000000', 'msg40': '00000000000000000000000000000000', 'msg41': '00000000000000000000000000000000', 'msg46': '00000000000000000000000000000000', 'msg47': '00000000000000000000000000000000', 'msg44': '00000000000000000000000000000000', 'msg45': '00000000000000000000000000000000', 'cip110': '178FB7443FBD17DCF1AF122D4D117239', 'cip111': 'C55C99851BD135155A080A9C4E54B919', 'cip112': 'AD75C80D72EA278B3EDE380DAAB1F708', 'cip113': '95054D1ECA74F75515AE8C17941D3A54', 'cip114': '8E0B0D4F95C9C9D65420B4B1869A1D3E', 'cip115': '7712EA2F0598CC8CFB9A934DEC848B5F', 'cip116': '9D730E0F7450183C0804D6817CBE058E', 'cip117': '3FA52E9B242F9AF61322FBB6BA583A01', 'cip118': '3D47D74F667D60458188922EE8D8A7A0', 'cip119': '036B4E4E02D84C56AC61007DAC33EC33', 'cip67': '929B29DD0D952161FFDA8CB417B166EC', 'cip66': 'C9BDCFFD4B9F3BBBB33A2D2C51BA83F6', 'cip65': '4C8D0E13996F4D32CB7984B7BB1B34FB', 'cip64': '6C5E5719D5F31E929FF9C44F086EFADB', 'cip63': '06FFB5E13438BA8DBD8A3EDADFAC73A1', 'cip62': '150C12DEF6EDC844B0B45361C2B3AECE', 'cip61': '298DF7334670B7391BE203DF7E8890C7', 'cip60': 'ED785D0BA19553CE73B69F4D570C3A9D', 'cip69': '6FDFD0BC8F49BE420CD68A894C7CA4E9', 'cip68': '87F9DFCB07275916E7A446D3DCE74232', 'key68': '00000000000000000800000000000000', 'key69': '00000000000000000400000000000000', 'key66': '00000000000000002000000000000000', 'key67': '00000000000000001000000000000000', 'key64': '00000000000000008000000000000000', 'key65': '00000000000000004000000000000000', 'key62': '00000000000000020000000000000000', 'key63': '00000000000000010000000000000000', 'key60': '00000000000000080000000000000000', 'key61': '00000000000000040000000000000000', 'key117': '00000000000000000000000000000400', 'key116': '00000000000000000000000000000800', 'key115': '00000000000000000000000000001000', 'key114': '00000000000000000000000000002000', 'key113': '00000000000000000000000000004000', 'key112': '00000000000000000000000000008000', 'key111': '00000000000000000000000000010000', 'key110': '00000000000000000000000000020000', 'msg86': '00000000000000000000000000000000', 'msg87': '00000000000000000000000000000000', 'msg84': '00000000000000000000000000000000', 'msg85': '00000000000000000000000000000000', 'msg82': '00000000000000000000000000000000', 'msg83': '00000000000000000000000000000000', 'msg80': '00000000000000000000000000000000', 'msg81': '00000000000000000000000000000000', 'cip23': '9D3C6C8ED48C9DE7A64CD05D8BF41D54', 'cip22': 'BCD56984E45DBF087BAC8757FC4EFF5A', 'cip21': '6AA2F0627F312A77C68D1F15DF0E1379', 'msg33': '00000000000000000000000000000000', 'msg32': '00000000000000000000000000000000', 'msg31': '00000000000000000000000000000000', 'msg30': '00000000000000000000000000000000', 'msg37': '00000000000000000000000000000000', 'msg36': '00000000000000000000000000000000', 'msg35': '00000000000000000000000000000000', 'msg34': '00000000000000000000000000000000', 'cip27': '88BD93610040DFE248C2FE05EF9F4FE0', 'msg39': '00000000000000000000000000000000', 'msg38': '00000000000000000000000000000000', 'cip26': '5742CA8CF1193491C1FBC148627D856E', 'key9': '00400000000000000000000000000000', 'key8': '00800000000000000000000000000000', 'cip25': '022E2430D81858888C9E575411D4064F', 'key3': '10000000000000000000000000000000', 'key2': '20000000000000000000000000000000', 'key1': '40000000000000000000000000000000', 'key0': '80000000000000000000000000000000', 'key7': '01000000000000000000000000000000', 'key6': '02000000000000000000000000000000', 'key5': '04000000000000000000000000000000', 'key4': '08000000000000000000000000000000', 'key22': '00000200000000000000000000000000', 'key23': '00000100000000000000000000000000', 'key20': '00000800000000000000000000000000', 'key21': '00000400000000000000000000000000', 'cip38': '932218D99553BB2D4BFC69F1EA67CAAE', 'cip39': '399D066426F7FEF66F8983086DC044D8', 'key24': '00000080000000000000000000000000', 'key25': '00000040000000000000000000000000', 'cip34': '2176DEBC78D6B4A6D0FB37AFA6B51081', 'cip35': 'FDB1B57379B85A85392613E8B4597B63', 'cip36': '58AB1112E0598586E07FC8359DDFC7EC', 'cip37': 'DD6D1D2629F333528CB66869453BC273', 'cip30': 'AAC6098597D46B8145A60F40D4EC5308', 'cip31': '3A7DFD0855A5BE0B16CACBD685FACEF5', 'cip32': 'ACEBA627EBA87AD051C3E0CA0DEF6CD7', 'cip33': 'F0A55DCDBC513EFDD603EA455EB9228C', 'key97': '00000000000000000000000040000000', 'key96': '00000000000000000000000080000000', 'key95': '00000000000000000000000100000000', 'key94': '00000000000000000000000200000000', 'key93': '00000000000000000000000400000000', 'key92': '00000000000000000000000800000000', 'key91': '00000000000000000000001000000000', 'key90': '00000000000000000000002000000000', 'key99': '00000000000000000000000010000000', 'key98': '00000000000000000000000020000000', 'msg77': '00000000000000000000000000000000', 'msg76': '00000000000000000000000000000000', 'msg75': '00000000000000000000000000000000', 'msg74': '00000000000000000000000000000000', 'msg73': '00000000000000000000000000000000', 'msg72': '00000000000000000000000000000000', 'msg71': '00000000000000000000000000000000', 'msg70': '00000000000000000000000000000000', 'msg79': '00000000000000000000000000000000', 'msg78': '00000000000000000000000000000000', 'cip42': '6E7A6BB3554F12AD1F88C289D621CD0F', 'key126': '00000000000000000000000000000002', 'key124': '00000000000000000000000000000008', 'key125': '00000000000000000000000000000004', 'key122': '00000000000000000000000000000020', 'key123': '00000000000000000000000000000010', 'key120': '00000000000000000000000000000080', 'key121': '00000000000000000000000000000040', 'cip109': '5C78C4BC8F15DC964FE9EC75203AD7D8', 'cip108': 'B7C226C60B6F3031A1E2160823A62679', 'cip107': '0F714C096C244BED865A9E064576FE5D', 'cip106': 'EC7FE3578906291B2DCF0AD7FF8B5358', 'cip105': '713738F580CED6E358D2CDCEDA64F99F', 'cip104': '5E9B5966ED3A2358005C9773F8690AD9', 'cip103': '3A3064DFF6E0B54D864E81FA76270065', 'cip102': '610D5528725B34FD70ADC66E83BAE266', 'cip101': '27994D1AA909806C7CC8E4AC4CD5479B', 'cip100': '3AFE23D89E79E9F8A54F103ED51EB14D', 'cip70': 'CDDC09DE42DC2CBCD9287A2072A30D23', 'cip71': '9B2FF668BA9D77AD1E9F30BA0173EBD4', 'cip72': 'DEF29890D59A511B32A30322D7471E38', 'cip73': '5094EAEC9F23D0DBFAB8240A42ED5BF1', 'cip74': '79CB87BC375F58DE8DA780B9BAD3DEA3', 'cip75': '7139B3D980B85D3B77A3BBDB6CB79756', 'cip76': '148ED6E8FEC02168377C96956AE18D93', 'cip77': '0AFED5A710F2BF11C77F152951AE32CB', 'cip78': 'C265AC354817550FAE12A51C2DCD749C', 'cip79': 'A3B089F79D0A07EA0893BB48D508B35B', 'msg106': '00000000000000000000000000000000', 'msg107': '00000000000000000000000000000000', 'msg104': '00000000000000000000000000000000', 'msg105': '00000000000000000000000000000000', 'msg102': '00000000000000000000000000000000', 'msg88': '00000000000000000000000000000000', 'msg100': '00000000000000000000000000000000', 'msg101': '00000000000000000000000000000000', 'msg89': '00000000000000000000000000000000', 'msg108': '00000000000000000000000000000000', 'msg109': '00000000000000000000000000000000', 'key119': '00000000000000000000000000000100', 'key118': '00000000000000000000000000000200', 'key59': '00000000000000100000000000000000', 'key58': '00000000000000200000000000000000', 'key53': '00000000000004000000000000000000', 'key52': '00000000000008000000000000000000', 'key51': '00000000000010000000000000000000', 'key50': '00000000000020000000000000000000', 'key57': '00000000000000400000000000000000', 'key56': '00000000000000800000000000000000', 'key55': '00000000000001000000000000000000', 'key54': '00000000000002000000000000000000', 'cip20': '9F2A7CE5FD51FD5D7E2D42407EEF8F6A', 'msg103': '00000000000000000000000000000000', 'msg28': '00000000000000000000000000000000', 'msg29': '00000000000000000000000000000000', 'msg24': '00000000000000000000000000000000', 'msg25': '00000000000000000000000000000000', 'msg26': '00000000000000000000000000000000', 'msg27': '00000000000000000000000000000000', 'msg20': '00000000000000000000000000000000', 'msg21': '00000000000000000000000000000000', 'msg22': '00000000000000000000000000000000', 'msg23': '00000000000000000000000000000000', 'key44': '00000000000800000000000000000000', 'key45': '00000000000400000000000000000000', 'key46': '00000000000200000000000000000000', 'key47': '00000000000100000000000000000000', 'key40': '00000000008000000000000000000000', 'key41': '00000000004000000000000000000000'}
dict_twofish_ecb_vk_k192 = {'cip10': '35FFC8038CB124B8078EC5C7C7928F14', 'cip11': '086025FC1CC6056367304C51DE871DEA', 'cip49': '6557BDB19F03E62D823C0613BEA0FAFB', 'cip48': '09D32779D0C8D02E0670F377187756FC', 'key19': '000010000000000000000000000000000000000000000000', 'key18': '000020000000000000000000000000000000000000000000', 'key17': '000040000000000000000000000000000000000000000000', 'key16': '000080000000000000000000000000000000000000000000', 'key15': '000100000000000000000000000000000000000000000000', 'key14': '000200000000000000000000000000000000000000000000', 'key13': '000400000000000000000000000000000000000000000000', 'key12': '000800000000000000000000000000000000000000000000', 'key11': '001000000000000000000000000000000000000000000000', 'key10': '002000000000000000000000000000000000000000000000', 'msg5': '000000000000000000000000000000000000000000000000', 'msg4': '000000000000000000000000000000000000000000000000', 'msg7': '000000000000000000000000000000000000000000000000', 'msg6': '000000000000000000000000000000000000000000000000', 'msg1': '000000000000000000000000000000000000000000000000', 'msg0': '000000000000000000000000000000000000000000000000', 'msg3': '000000000000000000000000000000000000000000000000', 'msg2': '000000000000000000000000000000000000000000000000', 'msg9': '000000000000000000000000000000000000000000000000', 'msg8': '000000000000000000000000000000000000000000000000', 'key80': '000000000000000000008000000000000000000000000000', 'key81': '000000000000000000004000000000000000000000000000', 'key82': '000000000000000000002000000000000000000000000000', 'key83': '000000000000000000001000000000000000000000000000', 'key84': '000000000000000000000800000000000000000000000000', 'key85': '000000000000000000000400000000000000000000000000', 'key86': '000000000000000000000200000000000000000000000000', 'key87': '000000000000000000000100000000000000000000000000', 'key88': '000000000000000000000080000000000000000000000000', 'key89': '000000000000000000000040000000000000000000000000', 'key180': '000000000000000000000000000000000000000000000800', 'key181': '000000000000000000000000000000000000000000000400', 'key182': '000000000000000000000000000000000000000000000200', 'key183': '000000000000000000000000000000000000000000000100', 'key184': '000000000000000000000000000000000000000000000080', 'key185': '000000000000000000000000000000000000000000000040', 'key186': '000000000000000000000000000000000000000000000020', 'key187': '000000000000000000000000000000000000000000000010', 'key188': '000000000000000000000000000000000000000000000008', 'key189': '000000000000000000000000000000000000000000000004', 'cip41': '8D489E0496B54F91A0254E4103804145', 'cip40': '7FF241BA32E6878542978957F137856F', 'cip43': '6ED9A5F014FAFAE3D05C4AE027066873', 'msg60': '000000000000000000000000000000000000000000000000', 'msg61': '000000000000000000000000000000000000000000000000', 'msg62': '000000000000000000000000000000000000000000000000', 'msg63': '000000000000000000000000000000000000000000000000', 'msg64': '000000000000000000000000000000000000000000000000', 'msg65': '000000000000000000000000000000000000000000000000', 'msg66': '000000000000000000000000000000000000000000000000', 'msg67': '000000000000000000000000000000000000000000000000', 'msg68': '000000000000000000000000000000000000000000000000', 'cip45': '1EE0680BF9A798A1C63636EA917B17B5', 'cip44': '958453307A371EE2D3DA8DD327D9B51B', 'key139': '000000000000000000000000000000000010000000000000', 'cip47': '9034DDEFF43C9CC82FADE8DE0A2476BB', 'key135': '000000000000000000000000000000000100000000000000', 'key134': '000000000000000000000000000000000200000000000000', 'key137': '000000000000000000000000000000000040000000000000', 'cip46': 'C0CEFB2475B21AA8937E3048604D9928', 'key131': '000000000000000000000000000000001000000000000000', 'key130': '000000000000000000000000000000002000000000000000', 'key133': '000000000000000000000000000000000400000000000000', 'key132': '000000000000000000000000000000000800000000000000', 'cip178': '8E045AE3022AF7562106681B2B8CB70E', 'cip179': '2C73832593114BF299424E30C5848625', 'cip172': 'D22D10708CBA6566DC096B8ABE3F9679', 'cip173': '1FFC5754FC94465A073B714267DEC18C', 'cip170': '1BFAC7B1B8EB14C26ADA2055E0C9CD36', 'cip171': '9FCA8C1340C47C586D6A2FAD9FAA6833', 'key26': '000000200000000000000000000000000000000000000000', 'cip177': '6E148020BAB1DD04492299F6A9D9BA22', 'cip174': 'FDED0173236B23DF4DFC1953355AA78E', 'cip175': 'FBE9178C4B27E51E24BF17053724AA2F', 'msg188': '000000000000000000000000000000000000000000000000', 'msg189': '000000000000000000000000000000000000000000000000', 'msg186': '000000000000000000000000000000000000000000000000', 'msg187': '000000000000000000000000000000000000000000000000', 'msg184': '000000000000000000000000000000000000000000000000', 'msg185': '000000000000000000000000000000000000000000000000', 'msg182': '000000000000000000000000000000000000000000000000', 'msg183': '000000000000000000000000000000000000000000000000', 'msg180': '000000000000000000000000000000000000000000000000', 'msg181': '000000000000000000000000000000000000000000000000', 'cip187': '682C20B72DDFE4F678B2379FA25715CA', 'cip186': '50434829C09BFB7C174E1BE33642FEFB', 'cip185': 'A6EBD68D0A6F46DA22CD17D4B55BC4FE', 'cip184': '5588729059256CE49AF2DA14EE4C9D00', 'cip183': '18F3BEB5D5A6B6AC512752AAA65EA3BD', 'cip182': '21B968BF3EFFC638F54BC1524D8D378F', 'cip181': 'B25FABDA9D6E6704F23F33B0D907B762', 'cip180': '127FC7BCF85F44F5041158A5EB3D040C', 'key27': '000000100000000000000000000000000000000000000000', 'cip189': '32929E53C8E8D85657B9B55A4911028C', 'cip188': '925721E954372C9EA115BFF97BBE9A12', 'msg15': '000000000000000000000000000000000000000000000000', 'msg14': '000000000000000000000000000000000000000000000000', 'msg17': '000000000000000000000000000000000000000000000000', 'msg16': '000000000000000000000000000000000000000000000000', 'msg11': '000000000000000000000000000000000000000000000000', 'msg10': '000000000000000000000000000000000000000000000000', 'msg13': '000000000000000000000000000000000000000000000000', 'msg12': '000000000000000000000000000000000000000000000000', 'msg19': '000000000000000000000000000000000000000000000000', 'msg18': '000000000000000000000000000000000000000000000000', 'cip89': '9F13CC1BF91C1B49AB6DDD7AF7A05ABA', 'cip88': 'B1ECC134EB7221CE00EBB977E08020E2', 'cip85': 'DE0B6B80C40ED4447E36A84A62EB235D', 'cip84': 'D8E96A3F240666FC02F31E84CD1CEEF1', 'cip87': '02DAE104DA462934D87FDC73EB4011A9', 'cip86': '8B15F04C34FC0F35F96C86837665CB38', 'cip81': 'C3E359420C4C4AF445C470AB347B3667', 'cip80': '7600A0FCF96F24A21419103466B937B5', 'cip83': 'A0001FC4E31664ED8C375644D02717AE', 'cip82': 'D915133DAA11BECB43E020266B709BEC', 'msg115': '000000000000000000000000000000000000000000000000', 'msg114': '000000000000000000000000000000000000000000000000', 'msg117': '000000000000000000000000000000000000000000000000', 'msg116': '000000000000000000000000000000000000000000000000', 'msg111': '000000000000000000000000000000000000000000000000', 'msg110': '000000000000000000000000000000000000000000000000', 'msg113': '000000000000000000000000000000000000000000000000', 'msg112': '000000000000000000000000000000000000000000000000', 'msg119': '000000000000000000000000000000000000000000000000', 'msg118': '000000000000000000000000000000000000000000000000', 'cip16': 'C014C9A992E6366B3BD2EABDF1508187', 'cip17': '4344D702AC78A5808F4AB566D5509B75', 'cip14': 'E2313E3CFCB5E745EBAB983BF2867579', 'cip15': 'B4394412F7B4A1A4A22B73C93BAFD85D', 'cip12': '950F0B7BDFFC78AE3AFF022F78E1670E', 'cip13': 'CADF4568B43C950FB688C6608AAF5FAE', 'key42': '000000000020000000000000000000000000000000000000', 'key43': '000000000010000000000000000000000000000000000000', 'key48': '000000000000800000000000000000000000000000000000', 'key49': '000000000000400000000000000000000000000000000000', 'cip18': '937893DA40E9D7F2ECE9028FAA4DE6A4', 'cip19': 'E77874759C6AACB611B715A52A37234A', 'key171': '000000000000000000000000000000000000000000100000', 'key170': '000000000000000000000000000000000000000000200000', 'key173': '000000000000000000000000000000000000000000040000', 'key172': '000000000000000000000000000000000000000000080000', 'key175': '000000000000000000000000000000000000000000010000', 'key174': '000000000000000000000000000000000000000000020000', 'key177': '000000000000000000000000000000000000000000004000', 'key176': '000000000000000000000000000000000000000000008000', 'key179': '000000000000000000000000000000000000000000001000', 'key178': '000000000000000000000000000000000000000000002000', 'msg59': '000000000000000000000000000000000000000000000000', 'msg58': '000000000000000000000000000000000000000000000000', 'msg51': '000000000000000000000000000000000000000000000000', 'msg50': '000000000000000000000000000000000000000000000000', 'msg53': '000000000000000000000000000000000000000000000000', 'msg52': '000000000000000000000000000000000000000000000000', 'msg55': '000000000000000000000000000000000000000000000000', 'msg54': '000000000000000000000000000000000000000000000000', 'msg57': '000000000000000000000000000000000000000000000000', 'msg56': '000000000000000000000000000000000000000000000000', 'cip125': '5EB1E7293616CD444011950212E53E78', 'cip124': '78665BAC269A5DB3FFE165526A42F688', 'cip127': 'EAAEEA26A8AE037C288DDA6791580418', 'cip126': 'FD682F200B2D5D17D177E785EBCE6C08', 'cip121': 'FCCE30A6961099AD269080FF07A24E1E', 'cip120': '7D6C9C9F375EDDE4A23D83B8B62E198F', 'cip123': 'B96890D4CC0BD3C41A14D0547F98E077', 'cip122': 'C822629D39268498E02E6E4D642E7921', 'cip129': '09C8F1F28B94167498D9377CB9909458', 'cip128': 'AA525000B28A88169212096B6D5FF58D', 'msg159': '000000000000000000000000000000000000000000000000', 'msg158': '000000000000000000000000000000000000000000000000', 'msg151': '000000000000000000000000000000000000000000000000', 'msg150': '000000000000000000000000000000000000000000000000', 'msg153': '000000000000000000000000000000000000000000000000', 'msg152': '000000000000000000000000000000000000000000000000', 'msg155': '000000000000000000000000000000000000000000000000', 'msg154': '000000000000000000000000000000000000000000000000', 'msg157': '000000000000000000000000000000000000000000000000', 'msg156': '000000000000000000000000000000000000000000000000', 'cip58': 'E74FB07622191A053368131DA36FC299', 'cip59': '3CFF40E0E9A86F67D938D2483BDD08F0', 'cip52': 'E3AA0A67CDF79DBAB013103E39E8C822', 'cip53': 'AF3D0C9B673C322355480E8681237D13', 'cip50': '83505664DED694967F2D9E7853BC4B43', 'cip51': '0BBABE3B7F381C3B3D8A9D846D8CCEAC', 'cip56': '76C59CD9185C518D65EC641EB73C6387', 'cip57': '735567D0B8A52203492220804F3D62E6', 'cip54': '60D325226EC8DFB9E08DFADB479649A0', 'cip55': '845B92A3C56880E8007B452B57B73B75', 'cip4': 'E51ADC9773E785730586E6812A0F0FA5', 'cip5': '97067E60FE010AEEA48C0D3224AD0941', 'cip6': 'BB73A7C859E6377A5E42EFCD55CD2C5B', 'cip7': '914BFE25D7FDEE49B46FB5C2B60DACA5', 'cip0': 'B5AED133641004F4121B66E7DB8F2FF0', 'cip1': '998110F200555A32C6C123E66CF87DE9', 'cip2': '2DBAEEEC682DCC957C2D51B0990E123A', 'cip3': 'BAEC0A31F6557D6D13B888A94F63058C', 'cip8': 'EFEF0047892A043A1D594118477CA513', 'cip9': 'BE59CF7C4E4B482843E67B4EB65B3038', 'key79': '000000000000000000010000000000000000000000000000', 'key78': '000000000000000000020000000000000000000000000000', 'key75': '000000000000000000100000000000000000000000000000', 'key74': '000000000000000000200000000000000000000000000000', 'key77': '000000000000000000040000000000000000000000000000', 'key76': '000000000000000000080000000000000000000000000000', 'key71': '000000000000000001000000000000000000000000000000', 'key70': '000000000000000002000000000000000000000000000000', 'key73': '000000000000000000400000000000000000000000000000', 'key72': '000000000000000000800000000000000000000000000000', 'key190': '000000000000000000000000000000000000000000000002', 'cip24': '5F015060D28C6CCB2E5FDCB5AFDCF309', 'msg99': '000000000000000000000000000000000000000000000000', 'msg98': '000000000000000000000000000000000000000000000000', 'msg95': '000000000000000000000000000000000000000000000000', 'msg94': '000000000000000000000000000000000000000000000000', 'msg97': '000000000000000000000000000000000000000000000000', 'msg96': '000000000000000000000000000000000000000000000000', 'msg91': '000000000000000000000000000000000000000000000000', 'msg90': '000000000000000000000000000000000000000000000000', 'msg93': '000000000000000000000000000000000000000000000000', 'msg92': '000000000000000000000000000000000000000000000000', 'key108': '000000000000000000000000000800000000000000000000', 'key109': '000000000000000000000000000400000000000000000000', 'key100': '000000000000000000000000080000000000000000000000', 'key101': '000000000000000000000000040000000000000000000000', 'key102': '000000000000000000000000020000000000000000000000', 'key103': '000000000000000000000000010000000000000000000000', 'key104': '000000000000000000000000008000000000000000000000', 'key105': '000000000000000000000000004000000000000000000000', 'key106': '000000000000000000000000002000000000000000000000', 'key107': '000000000000000000000000001000000000000000000000', 'cip169': '8EA212BFBBF476CE35939066A7F1757D', 'cip168': '2BCFAD82613FFD8D9BCBC539C1158BC9', 'cip161': 'BF9D54F977A978797A4268CFC84132C4', 'cip160': '1B485B0E4A063B844BC2AE8B722D0757', 'cip163': '776EED1A9849173A7AC46E94C9B2681B', 'cip162': '90C50CB6D84B6A74F3D64A419B0419EA', 'cip165': '6F8B5F268B3DBEA72BF0D1F92B13684E', 'cip164': 'A42F612CBF53529173E148ABA2B55D63', 'cip167': '17FE109D4638A9E1FAF130D621C160CB', 'cip166': '9379DA858CEC7AC58856E7DBF79C4757', 'key28': '000000080000000000000000000000000000000000000000', 'key29': '000000040000000000000000000000000000000000000000', 'cip98': '40C7CC6385BB634FB68F73CCB5C446C2', 'cip99': '7F0CE574F643711ECFC5011C0BCCD49A', 'cip96': '9516AE03F102950795E1869E07BE0AFB', 'cip97': '4748E60F70C6172E5D5B0C21E67F366C', 'cip94': 'C7CABAB4D7DFFD44C5943EB8E9441C3D', 'cip95': '6DA6716020FDE292E8ADFB2A31BC6B24', 'cip92': 'FA45D9E00E4C221A14C359742AC25C35', 'cip93': 'BC2AC98007820862150CC1B1E3E11ED1', 'cip90': '414D1178475679525B5EE7ED373E2A0A', 'cip91': 'E69F2CC70EF18DBD360DFDD5C6573EBD', 'msg120': '000000000000000000000000000000000000000000000000', 'msg121': '000000000000000000000000000000000000000000000000', 'msg122': '000000000000000000000000000000000000000000000000', 'msg123': '000000000000000000000000000000000000000000000000', 'msg124': '000000000000000000000000000000000000000000000000', 'msg125': '000000000000000000000000000000000000000000000000', 'msg126': '000000000000000000000000000000000000000000000000', 'msg127': '000000000000000000000000000000000000000000000000', 'msg128': '000000000000000000000000000000000000000000000000', 'msg129': '000000000000000000000000000000000000000000000000', 'key31': '000000010000000000000000000000000000000000000000', 'key30': '000000020000000000000000000000000000000000000000', 'key33': '000000004000000000000000000000000000000000000000', 'key32': '000000008000000000000000000000000000000000000000', 'key35': '000000001000000000000000000000000000000000000000', 'key34': '000000002000000000000000000000000000000000000000', 'key37': '000000000400000000000000000000000000000000000000', 'key36': '000000000800000000000000000000000000000000000000', 'key39': '000000000100000000000000000000000000000000000000', 'key38': '000000000200000000000000000000000000000000000000', 'cip29': 'B96C1E40D0D407ED90D11892503A296F', 'cip28': 'F01FB3FA3E84DEA6057F3D88CD651876', 'msg190': '000000000000000000000000000000000000000000000000', 'key148': '000000000000000000000000000000000000080000000000', 'key149': '000000000000000000000000000000000000040000000000', 'key144': '000000000000000000000000000000000000800000000000', 'key145': '000000000000000000000000000000000000400000000000', 'key146': '000000000000000000000000000000000000200000000000', 'key147': '000000000000000000000000000000000000100000000000', 'key140': '000000000000000000000000000000000008000000000000', 'key141': '000000000000000000000000000000000004000000000000', 'key142': '000000000000000000000000000000000002000000000000', 'key143': '000000000000000000000000000000000001000000000000', 'msg69': '000000000000000000000000000000000000000000000000', 'msg48': '000000000000000000000000000000000000000000000000', 'msg49': '000000000000000000000000000000000000000000000000', 'msg42': '000000000000000000000000000000000000000000000000', 'msg43': '000000000000000000000000000000000000000000000000', 'msg40': '000000000000000000000000000000000000000000000000', 'msg41': '000000000000000000000000000000000000000000000000', 'msg46': '000000000000000000000000000000000000000000000000', 'msg47': '000000000000000000000000000000000000000000000000', 'msg44': '000000000000000000000000000000000000000000000000', 'msg45': '000000000000000000000000000000000000000000000000', 'cip110': '066AF29F6138FE67D676925DBC375ED1', 'cip111': '60E1109A80F56DBCBCAC75AF9EE3A982', 'cip112': '84E692562A2DBE9452CDC7F5F7DCD4E6', 'cip113': 'DA5C0CB7DE7C2A9DEFC76348955FB51B', 'cip114': '26AC1CB6870A598585E211852F9C980A', 'cip115': '49776D30C4A10352FF0FBA170F09F275', 'cip116': 'D02E72C408A05C89F80C9EC450419FBF', 'cip117': '993D122B38640477385BBFC79177C212', 'cip118': '1482C5D53BE2F16634C22B9294D6E10B', 'cip119': '4B9518E3188D68E20266DCAA5B26337F', 'msg164': '000000000000000000000000000000000000000000000000', 'msg165': '000000000000000000000000000000000000000000000000', 'msg166': '000000000000000000000000000000000000000000000000', 'msg167': '000000000000000000000000000000000000000000000000', 'msg160': '000000000000000000000000000000000000000000000000', 'msg161': '000000000000000000000000000000000000000000000000', 'msg162': '000000000000000000000000000000000000000000000000', 'msg163': '000000000000000000000000000000000000000000000000', 'msg168': '000000000000000000000000000000000000000000000000', 'msg169': '000000000000000000000000000000000000000000000000', 'key136': '000000000000000000000000000000000080000000000000', 'cip67': '707EF1166D2F11FD1519B37FB00D23EB', 'cip66': '978E4BA4EEA6739B1769FF4389F0367E', 'cip65': '03D44830C40510CE7866FB86FAC6E1DC', 'cip64': '5298367E93E9B9CB5CF402A8BA9EFC62', 'cip63': 'A4E84B8A7B8CC3766307D66A9C6AECB9', 'cip62': 'F7D50E95931755A98B143AE254090F9D', 'cip61': '0B3CA10C02E24BA82261E65BE4413512', 'cip60': '7C502AE730F5A9ABEACB15240EA1E8F6', 'cip69': 'F3DC32DD6931A302391F9B992A5B6122', 'cip68': '435088DBDD8646A7FCA8851CA2FA1FB5', 'cip176': 'F02818D3D58D1F3345594670D3009DF4', 'key159': '000000000000000000000000000000000000000100000000', 'key158': '000000000000000000000000000000000000000200000000', 'key68': '000000000000000008000000000000000000000000000000', 'key69': '000000000000000004000000000000000000000000000000', 'key66': '000000000000000020000000000000000000000000000000', 'key67': '000000000000000010000000000000000000000000000000', 'key64': '000000000000000080000000000000000000000000000000', 'key65': '000000000000000040000000000000000000000000000000', 'key62': '000000000000000200000000000000000000000000000000', 'key63': '000000000000000100000000000000000000000000000000', 'key60': '000000000000000800000000000000000000000000000000', 'key61': '000000000000000400000000000000000000000000000000', 'key138': '000000000000000000000000000000000020000000000000', 'key155': '000000000000000000000000000000000000001000000000', 'key154': '000000000000000000000000000000000000002000000000', 'key117': '000000000000000000000000000004000000000000000000', 'key116': '000000000000000000000000000008000000000000000000', 'key115': '000000000000000000000000000010000000000000000000', 'key114': '000000000000000000000000000020000000000000000000', 'key113': '000000000000000000000000000040000000000000000000', 'key112': '000000000000000000000000000080000000000000000000', 'key111': '000000000000000000000000000100000000000000000000', 'key110': '000000000000000000000000000200000000000000000000', 'msg86': '000000000000000000000000000000000000000000000000', 'msg87': '000000000000000000000000000000000000000000000000', 'msg84': '000000000000000000000000000000000000000000000000', 'msg85': '000000000000000000000000000000000000000000000000', 'msg82': '000000000000000000000000000000000000000000000000', 'msg83': '000000000000000000000000000000000000000000000000', 'msg80': '000000000000000000000000000000000000000000000000', 'msg81': '000000000000000000000000000000000000000000000000', 'cip23': 'F58B1AE230B417541649CB035FB5231C', 'cip22': '5254F42B5DD207461693C278B6ABC855', 'cip21': '6AC04A6988F1CE601E4C48241D42C1CF', 'msg33': '000000000000000000000000000000000000000000000000', 'msg32': '000000000000000000000000000000000000000000000000', 'msg31': '000000000000000000000000000000000000000000000000', 'msg30': '000000000000000000000000000000000000000000000000', 'msg37': '000000000000000000000000000000000000000000000000', 'msg36': '000000000000000000000000000000000000000000000000', 'msg35': '000000000000000000000000000000000000000000000000', 'msg34': '000000000000000000000000000000000000000000000000', 'cip27': '671D87102E35609B32F40A91A7E29E04', 'msg39': '000000000000000000000000000000000000000000000000', 'msg38': '000000000000000000000000000000000000000000000000', 'cip26': '1235DF200338F96E39E881484B6B11EE', 'key9': '004000000000000000000000000000000000000000000000', 'key8': '008000000000000000000000000000000000000000000000', 'cip25': 'B0DBAA257FEFFE48A688FE247D0460B7', 'key3': '100000000000000000000000000000000000000000000000', 'key2': '200000000000000000000000000000000000000000000000', 'key1': '400000000000000000000000000000000000000000000000', 'key0': '800000000000000000000000000000000000000000000000', 'key7': '010000000000000000000000000000000000000000000000', 'key6': '020000000000000000000000000000000000000000000000', 'key5': '040000000000000000000000000000000000000000000000', 'key4': '080000000000000000000000000000000000000000000000', 'msg139': '000000000000000000000000000000000000000000000000', 'msg138': '000000000000000000000000000000000000000000000000', 'msg137': '000000000000000000000000000000000000000000000000', 'msg136': '000000000000000000000000000000000000000000000000', 'msg135': '000000000000000000000000000000000000000000000000', 'msg134': '000000000000000000000000000000000000000000000000', 'msg133': '000000000000000000000000000000000000000000000000', 'msg132': '000000000000000000000000000000000000000000000000', 'msg131': '000000000000000000000000000000000000000000000000', 'msg130': '000000000000000000000000000000000000000000000000', 'cip154': '7A814893FBF78A6F5345F4E250DA454C', 'cip155': '8C8B9E24399A6DF8293B0117307D6084', 'cip156': '11BB87A542E9135ECEB6143A07E0B65E', 'cip157': '495A92DB6E242E0A878EB4AC4C886802', 'cip150': 'F5BA874DAE43AD835B3F1344653411B6', 'cip151': 'F0185396A6A69D48BBEADFE5B644EED4', 'cip152': 'DA0DEC6F13B5AEFC056F5D040C5DA310', 'cip153': '7E1DBDE7B45F9C3E01A285EA575AD5ED', 'cip158': '97A5A7E3DAB800B3D4E7D468B4CCB951', 'cip159': 'C74D778D3F0440EB91981C23CC4F5669', 'key22': '000002000000000000000000000000000000000000000000', 'key23': '000001000000000000000000000000000000000000000000', 'key20': '000008000000000000000000000000000000000000000000', 'key21': '000004000000000000000000000000000000000000000000', 'cip38': '5F0DEF37FB14F956BB31703F1FC968EB', 'cip39': 'CF0A28C9598D7BBCA6992238B03EF4EB', 'key24': '000000800000000000000000000000000000000000000000', 'key25': '000000400000000000000000000000000000000000000000', 'cip34': '41714E55E90E0E154802FBBFC0BF58C5', 'cip35': '69480F26BC5DFF8F6D8A0F10E0959BF1', 'cip36': 'A39E4BE5A7E13BA3C48CFD98A52CFA70', 'cip37': '95809A16888FB49F5053375A6533CD58', 'cip30': '2E27350191DE6C2E9DCC51022A3C96CB', 'cip31': 'BDD6CFE5D00E7F8D698143E653A0163B', 'cip32': 'FEDABEF20F51910E57CF5ECEF878A8E1', 'cip33': 'EEBF9FE247A78C6FF2A91428C54D70DA', 'key97': '000000000000000000000000400000000000000000000000', 'key96': '000000000000000000000000800000000000000000000000', 'key95': '000000000000000000000001000000000000000000000000', 'key94': '000000000000000000000002000000000000000000000000', 'key93': '000000000000000000000004000000000000000000000000', 'key92': '000000000000000000000008000000000000000000000000', 'key91': '000000000000000000000010000000000000000000000000', 'key90': '000000000000000000000020000000000000000000000000', 'key153': '000000000000000000000000000000000000004000000000', 'key152': '000000000000000000000000000000000000008000000000', 'key151': '000000000000000000000000000000000000010000000000', 'key150': '000000000000000000000000000000000000020000000000', 'key157': '000000000000000000000000000000000000000400000000', 'key156': '000000000000000000000000000000000000000800000000', 'key99': '000000000000000000000000100000000000000000000000', 'key98': '000000000000000000000000200000000000000000000000', 'msg77': '000000000000000000000000000000000000000000000000', 'msg76': '000000000000000000000000000000000000000000000000', 'msg75': '000000000000000000000000000000000000000000000000', 'msg74': '000000000000000000000000000000000000000000000000', 'msg73': '000000000000000000000000000000000000000000000000', 'msg72': '000000000000000000000000000000000000000000000000', 'msg71': '000000000000000000000000000000000000000000000000', 'msg70': '000000000000000000000000000000000000000000000000', 'msg79': '000000000000000000000000000000000000000000000000', 'msg78': '000000000000000000000000000000000000000000000000', 'cip42': '9925949BE93F4A0BF4114CCA2E05B566', 'key128': '000000000000000000000000000000008000000000000000', 'key129': '000000000000000000000000000000004000000000000000', 'key126': '000000000000000000000000000000020000000000000000', 'key127': '000000000000000000000000000000010000000000000000', 'key124': '000000000000000000000000000000080000000000000000', 'key125': '000000000000000000000000000000040000000000000000', 'key122': '000000000000000000000000000000200000000000000000', 'key123': '000000000000000000000000000000100000000000000000', 'key120': '000000000000000000000000000000800000000000000000', 'key121': '000000000000000000000000000000400000000000000000', 'cip109': '33D0841FC04A6394056AC82D68DBFA02', 'cip108': 'E6C0BEE988E017E708FF1A1DCFE38FC8', 'cip107': 'F7F08E268646EF8B9D728D422195A88B', 'cip106': 'E6B06BC172CA8892C8A04D6717AB08CE', 'cip105': '00C19303036D6D3227B9C7AF806BEBDD', 'cip104': '3072C09636828285E7135E92B04C3601', 'cip103': '69698FE789F29872F0A4116CD8714255', 'cip102': '503FCDFCCB2AEBEEE6FB59326D06745E', 'cip101': '6E8C11B5EA12D40CE9F83693314BD836', 'cip100': '2628849CC2C62FEB305A1287F24B9693', 'msg173': '000000000000000000000000000000000000000000000000', 'msg172': '000000000000000000000000000000000000000000000000', 'msg171': '000000000000000000000000000000000000000000000000', 'msg170': '000000000000000000000000000000000000000000000000', 'msg177': '000000000000000000000000000000000000000000000000', 'msg176': '000000000000000000000000000000000000000000000000', 'msg175': '000000000000000000000000000000000000000000000000', 'msg174': '000000000000000000000000000000000000000000000000', 'msg179': '000000000000000000000000000000000000000000000000', 'msg178': '000000000000000000000000000000000000000000000000', 'cip190': '8EE624F18BF5AA25ACE8667643D0D80D', 'cip70': 'D93286DD8A05432614FD03169F36ED15', 'cip71': '59F83FEA4BC9B24BF69A98CA3959CEFC', 'cip72': 'A689BC3A8DB36A22763E911370C9DE2B', 'cip73': '04EB5BA604BA64DD112BCAE830C27966', 'cip74': '7EF653E2D804E80BD678C3A6CB222625', 'cip75': 'A94EC287E7F70C6503DC0B891920C622', 'cip76': '8A78497E9D18A365599444C972359F0D', 'cip77': '2F1832E285C8D24F226B50CCD71FE46A', 'cip78': '0B6675F4BD4BD6951BB96AF62D3C9B96', 'cip79': 'D6DEDAAAECE52984A261155ED7AF5290', 'msg106': '000000000000000000000000000000000000000000000000', 'msg107': '000000000000000000000000000000000000000000000000', 'msg104': '000000000000000000000000000000000000000000000000', 'msg105': '000000000000000000000000000000000000000000000000', 'msg102': '000000000000000000000000000000000000000000000000', 'msg88': '000000000000000000000000000000000000000000000000', 'msg100': '000000000000000000000000000000000000000000000000', 'msg101': '000000000000000000000000000000000000000000000000', 'msg89': '000000000000000000000000000000000000000000000000', 'msg108': '000000000000000000000000000000000000000000000000', 'msg109': '000000000000000000000000000000000000000000000000', 'key119': '000000000000000000000000000001000000000000000000', 'key118': '000000000000000000000000000002000000000000000000', 'key59': '000000000000001000000000000000000000000000000000', 'key58': '000000000000002000000000000000000000000000000000', 'key53': '000000000000040000000000000000000000000000000000', 'key52': '000000000000080000000000000000000000000000000000', 'key51': '000000000000100000000000000000000000000000000000', 'key50': '000000000000200000000000000000000000000000000000', 'key57': '000000000000004000000000000000000000000000000000', 'key56': '000000000000008000000000000000000000000000000000', 'key55': '000000000000010000000000000000000000000000000000', 'key54': '000000000000020000000000000000000000000000000000', 'cip20': '841FC7FC0EF6CE08CFC6056B3C557F23', 'msg103': '000000000000000000000000000000000000000000000000', 'key162': '000000000000000000000000000000000000000020000000', 'key163': '000000000000000000000000000000000000000010000000', 'key160': '000000000000000000000000000000000000000080000000', 'key161': '000000000000000000000000000000000000000040000000', 'key166': '000000000000000000000000000000000000000002000000', 'key167': '000000000000000000000000000000000000000001000000', 'key164': '000000000000000000000000000000000000000008000000', 'key165': '000000000000000000000000000000000000000004000000', 'key168': '000000000000000000000000000000000000000000800000', 'key169': '000000000000000000000000000000000000000000400000', 'msg147': '000000000000000000000000000000000000000000000000', 'cip140': 'BB364F05F769FFBFE18288BD782D20EB', 'msg28': '000000000000000000000000000000000000000000000000', 'msg29': '000000000000000000000000000000000000000000000000', 'msg24': '000000000000000000000000000000000000000000000000', 'msg25': '000000000000000000000000000000000000000000000000', 'msg26': '000000000000000000000000000000000000000000000000', 'msg27': '000000000000000000000000000000000000000000000000', 'msg20': '000000000000000000000000000000000000000000000000', 'msg21': '000000000000000000000000000000000000000000000000', 'msg22': '000000000000000000000000000000000000000000000000', 'msg23': '000000000000000000000000000000000000000000000000', 'cip136': '8FF0BF7F0088916764CF9FF21E1BDA67', 'cip137': '5DE1FF41440B4CA0EEF22C8C3F96F23F', 'cip134': '69E749DFCA9AC8A990444E9FFB6CBA09', 'cip135': '9B2262EBF59AB552E04D57A72FE6F013', 'cip132': '3896FB03AF06F69CFDDDFBFCDF8E10A7', 'cip133': 'FED04C2F49DB4BE1D7BC5E187FB1612B', 'cip130': '847E4FFAD40194940A0F7FA0E34739B4', 'cip131': '50DCE06E775C1A6DDA24B2A926C9EF8E', 'cip138': 'FEBE3209C8D61E85024DEF2122AF0268', 'cip139': 'DB63B702C6E39A283B64B90F36FBD426', 'key44': '000000000008000000000000000000000000000000000000', 'msg148': '000000000000000000000000000000000000000000000000', 'msg149': '000000000000000000000000000000000000000000000000', 'key45': '000000000004000000000000000000000000000000000000', 'msg142': '000000000000000000000000000000000000000000000000', 'msg143': '000000000000000000000000000000000000000000000000', 'msg140': '000000000000000000000000000000000000000000000000', 'msg141': '000000000000000000000000000000000000000000000000', 'msg146': '000000000000000000000000000000000000000000000000', 'key46': '000000000002000000000000000000000000000000000000', 'msg144': '000000000000000000000000000000000000000000000000', 'msg145': '000000000000000000000000000000000000000000000000', 'cip143': '3979A57AB9EB520E1475D745F897A9A9', 'cip142': 'C5AE232EB4F293497E79E20E436B5A4C', 'cip141': '8A929CBDE0CD9A9545A08DA2D16BA838', 'key47': '000000000001000000000000000000000000000000000000', 'cip147': 'C3475809C89275DE82F9F22D59A3DA37', 'cip146': 'D5A76D2E0D00BE53B401ACB0EE70F8FB', 'cip145': '260AC31933A32B75C13364E868FD84DB', 'cip144': '469B440BBD0711C31B9AAA2564ECB68A', 'key40': '000000000080000000000000000000000000000000000000', 'cip149': 'C662358CCCD46730D243DEE03B871DC3', 'cip148': 'C9B8FBFBF1A120BF47D0F2F48DD23661', 'key41': '000000000040000000000000000000000000000000000000'}
dict_twofish_ecb_vk_k256 = {'cip10': '56BA650835E125201400380C4D2D5D99', 'cip11': 'EB48A1B279E95EBF8FAAC13D70F8F452', 'cip49': 'D2C6E9C239B4FA5A1E76D038EA4660F3', 'cip48': '13D46AE35D868401D23C891ED92621EE', 'key19': '0000100000000000000000000000000000000000000000000000000000000000', 'key18': '0000200000000000000000000000000000000000000000000000000000000000', 'key17': '0000400000000000000000000000000000000000000000000000000000000000', 'key16': '0000800000000000000000000000000000000000000000000000000000000000', 'key15': '0001000000000000000000000000000000000000000000000000000000000000', 'key14': '0002000000000000000000000000000000000000000000000000000000000000', 'key13': '0004000000000000000000000000000000000000000000000000000000000000', 'key12': '0008000000000000000000000000000000000000000000000000000000000000', 'key11': '0010000000000000000000000000000000000000000000000000000000000000', 'key10': '0020000000000000000000000000000000000000000000000000000000000000', 'cip213': 'CC014984ABDFB760A835846668340929', 'cip212': '5094418C55B7D591EFDB7097CB95B16D', 'key202': '0000000000000000000000000000000000000000000000000020000000000000', 'msg5': '0000000000000000000000000000000000000000000000000000000000000000', 'msg4': '0000000000000000000000000000000000000000000000000000000000000000', 'msg7': '0000000000000000000000000000000000000000000000000000000000000000', 'msg6': '0000000000000000000000000000000000000000000000000000000000000000', 'msg1': '0000000000000000000000000000000000000000000000000000000000000000', 'msg0': '0000000000000000000000000000000000000000000000000000000000000000', 'msg3': '0000000000000000000000000000000000000000000000000000000000000000', 'msg2': '0000000000000000000000000000000000000000000000000000000000000000', 'msg249': '0000000000000000000000000000000000000000000000000000000000000000', 'msg248': '0000000000000000000000000000000000000000000000000000000000000000', 'msg9': '0000000000000000000000000000000000000000000000000000000000000000', 'msg8': '0000000000000000000000000000000000000000000000000000000000000000', 'cip219': 'F1218B59E947816041B21AC28685EF36', 'key80': '0000000000000000000080000000000000000000000000000000000000000000', 'key81': '0000000000000000000040000000000000000000000000000000000000000000', 'key82': '0000000000000000000020000000000000000000000000000000000000000000', 'key83': '0000000000000000000010000000000000000000000000000000000000000000', 'key84': '0000000000000000000008000000000000000000000000000000000000000000', 'key85': '0000000000000000000004000000000000000000000000000000000000000000', 'key86': '0000000000000000000002000000000000000000000000000000000000000000', 'key87': '0000000000000000000001000000000000000000000000000000000000000000', 'key88': '0000000000000000000000800000000000000000000000000000000000000000', 'key89': '0000000000000000000000400000000000000000000000000000000000000000', 'key180': '0000000000000000000000000000000000000000000008000000000000000000', 'key181': '0000000000000000000000000000000000000000000004000000000000000000', 'key182': '0000000000000000000000000000000000000000000002000000000000000000', 'key183': '0000000000000000000000000000000000000000000001000000000000000000', 'key184': '0000000000000000000000000000000000000000000000800000000000000000', 'key185': '0000000000000000000000000000000000000000000000400000000000000000', 'key186': '0000000000000000000000000000000000000000000000200000000000000000', 'key187': '0000000000000000000000000000000000000000000000100000000000000000', 'key188': '0000000000000000000000000000000000000000000000080000000000000000', 'key189': '0000000000000000000000000000000000000000000000040000000000000000', 'key223': '0000000000000000000000000000000000000000000000000000000100000000', 'key222': '0000000000000000000000000000000000000000000000000000000200000000', 'key225': '0000000000000000000000000000000000000000000000000000000040000000', 'key224': '0000000000000000000000000000000000000000000000000000000080000000', 'key227': '0000000000000000000000000000000000000000000000000000000010000000', 'key226': '0000000000000000000000000000000000000000000000000000000020000000', 'cip41': 'C93968EC0EE02DACD3F3EE9AC2320B88', 'cip40': '0A0EBA6ACED7899AA633CE67E8923936', 'cip43': 'BBADB03D5F0FCF375E671F8B009F3AF1', 'msg60': '0000000000000000000000000000000000000000000000000000000000000000', 'msg61': '0000000000000000000000000000000000000000000000000000000000000000', 'msg62': '0000000000000000000000000000000000000000000000000000000000000000', 'msg63': '0000000000000000000000000000000000000000000000000000000000000000', 'msg64': '0000000000000000000000000000000000000000000000000000000000000000', 'msg65': '0000000000000000000000000000000000000000000000000000000000000000', 'msg66': '0000000000000000000000000000000000000000000000000000000000000000', 'msg67': '0000000000000000000000000000000000000000000000000000000000000000', 'msg68': '0000000000000000000000000000000000000000000000000000000000000000', 'cip45': '8B650EC280BE261CCED5B5FC7F8A9BA7', 'key201': '0000000000000000000000000000000000000000000000000040000000000000', 'cip44': 'DAC60B05A1C3A203C6B4FE882E780079', 'key200': '0000000000000000000000000000000000000000000000000080000000000000', 'key139': '0000000000000000000000000000000000100000000000000000000000000000', 'cip47': '40B1042CBE87D64DDBEA4BAC8CF1F08C', 'key135': '0000000000000000000000000000000001000000000000000000000000000000', 'key134': '0000000000000000000000000000000002000000000000000000000000000000', 'key137': '0000000000000000000000000000000000400000000000000000000000000000', 'cip46': '35EB82F0BB6735E2DE661AE4E9E9EE57', 'key131': '0000000000000000000000000000000010000000000000000000000000000000', 'key130': '0000000000000000000000000000000020000000000000000000000000000000', 'key133': '0000000000000000000000000000000004000000000000000000000000000000', 'key132': '0000000000000000000000000000000008000000000000000000000000000000', 'cip178': 'A990117E78D1C5BD7833B96A4A180744', 'cip179': 'E63684CDC37E6768C45012EA00D008E4', 'key205': '0000000000000000000000000000000000000000000000000004000000000000', 'cip172': 'F83BD19A357BD7901C0E8FBEFCF857ED', 'cip173': 'F42BB427C894A072C861C1425CBD71BC', 'cip170': 'AC421C73A789D79B452623DAFD3D6D0B', 'cip171': '995207D8CF8C10904C0F47652C9C4287', 'key26': '0000002000000000000000000000000000000000000000000000000000000000', 'cip177': '5FE1C3BCD24818948514CB5A32FFD0A1', 'cip174': '3D1EC73B166DC0120DDF24267907C0F9', 'cip175': '8EF136AF5D7D1B513FB59FA21F7837A1', 'msg188': '0000000000000000000000000000000000000000000000000000000000000000', 'msg189': '0000000000000000000000000000000000000000000000000000000000000000', 'msg186': '0000000000000000000000000000000000000000000000000000000000000000', 'msg187': '0000000000000000000000000000000000000000000000000000000000000000', 'msg184': '0000000000000000000000000000000000000000000000000000000000000000', 'msg185': '0000000000000000000000000000000000000000000000000000000000000000', 'msg182': '0000000000000000000000000000000000000000000000000000000000000000', 'msg183': '0000000000000000000000000000000000000000000000000000000000000000', 'msg180': '0000000000000000000000000000000000000000000000000000000000000000', 'msg181': '0000000000000000000000000000000000000000000000000000000000000000', 'cip187': 'A466821BD64F552C0610ADB737C562CD', 'cip186': '94A91373701569B8C21487A7BDB164B6', 'cip185': '10112F5ABBF246996860B843FC7159F5', 'cip184': '4EFB0E18FB2F96FB6F81514BCE0A7BBD', 'cip183': 'A3C5BF72F39940DC7DAFB474A77A6114', 'cip182': 'F51410475B33FBD3DB2117B5C17C82D4', 'cip181': '85B7F0D391AF9268643D9C0B72433A99', 'cip180': '78B711F290DA924CAF1E4F1E11A08F4F', 'key27': '0000001000000000000000000000000000000000000000000000000000000000', 'cip189': '5578CCF8B92D48363EED4601661EB56E', 'cip188': '511BE2BA9F2A272CA2F5C1D0F3E249C1', 'msg15': '0000000000000000000000000000000000000000000000000000000000000000', 'msg14': '0000000000000000000000000000000000000000000000000000000000000000', 'msg17': '0000000000000000000000000000000000000000000000000000000000000000', 'msg16': '0000000000000000000000000000000000000000000000000000000000000000', 'msg11': '0000000000000000000000000000000000000000000000000000000000000000', 'msg10': '0000000000000000000000000000000000000000000000000000000000000000', 'msg13': '0000000000000000000000000000000000000000000000000000000000000000', 'msg12': '0000000000000000000000000000000000000000000000000000000000000000', 'msg19': '0000000000000000000000000000000000000000000000000000000000000000', 'msg18': '0000000000000000000000000000000000000000000000000000000000000000', 'cip89': '773A30DFDA8EBCE50EDFB925343C9ECC', 'cip88': '662EA9D88A9A2C89581502EAAAD074D5', 'cip85': 'A7C8C1A59E141D608BC91BB69E7B2859', 'cip84': 'D73CB079FB7101C933176352A93BB028', 'cip87': 'AC2DB35ED86D358616648D22B52DF012', 'cip86': 'B2DA67AFE49B33E5EDFAF148A17BF06B', 'cip81': '88542C9E680C27FE8FBE090AD73410B9', 'cip80': '0CF408A2FBDA07068BDB13A371867FCC', 'cip83': 'B84FA0FA046D5D77EA94CF3E8FDED147', 'cip82': '7A8BA6DC89A1AD4385D0696AFDD89496', 'msg115': '0000000000000000000000000000000000000000000000000000000000000000', 'msg114': '0000000000000000000000000000000000000000000000000000000000000000', 'msg117': '0000000000000000000000000000000000000000000000000000000000000000', 'msg116': '0000000000000000000000000000000000000000000000000000000000000000', 'msg111': '0000000000000000000000000000000000000000000000000000000000000000', 'msg110': '0000000000000000000000000000000000000000000000000000000000000000', 'msg113': '0000000000000000000000000000000000000000000000000000000000000000', 'msg112': '0000000000000000000000000000000000000000000000000000000000000000', 'msg119': '0000000000000000000000000000000000000000000000000000000000000000', 'msg118': '0000000000000000000000000000000000000000000000000000000000000000', 'key209': '0000000000000000000000000000000000000000000000000000400000000000', 'cip16': '5AE3ABA331C5D765E3D112B1DA09E7BC', 'cip17': '767F9CBDA1BA9914EBA40D7A172A4077', 'cip14': 'CA16B1969FA373F43EF09D19B3379F3F', 'cip15': '6D1B6F14090368034E10CF0C1E4F5744', 'cip12': 'E52435C29F7C9687B268C539BF6598B1', 'cip13': '27785BDF6F6258EAC396BFD0F56BEE82', 'key42': '0000000000200000000000000000000000000000000000000000000000000000', 'key43': '0000000000100000000000000000000000000000000000000000000000000000', 'key208': '0000000000000000000000000000000000000000000000000000800000000000', 'key48': '0000000000008000000000000000000000000000000000000000000000000000', 'key49': '0000000000004000000000000000000000000000000000000000000000000000', 'cip18': '8FAE713F677A82075D773DB73D58763E', 'cip19': '616CA9A15D710CA38FCA9A8E0B16A21C', 'msg241': '0000000000000000000000000000000000000000000000000000000000000000', 'msg240': '0000000000000000000000000000000000000000000000000000000000000000', 'msg243': '0000000000000000000000000000000000000000000000000000000000000000', 'msg238': '0000000000000000000000000000000000000000000000000000000000000000', 'msg239': '0000000000000000000000000000000000000000000000000000000000000000', 'msg242': '0000000000000000000000000000000000000000000000000000000000000000', 'key206': '0000000000000000000000000000000000000000000000000002000000000000', 'msg230': '0000000000000000000000000000000000000000000000000000000000000000', 'msg231': '0000000000000000000000000000000000000000000000000000000000000000', 'msg232': '0000000000000000000000000000000000000000000000000000000000000000', 'msg233': '0000000000000000000000000000000000000000000000000000000000000000', 'msg234': '0000000000000000000000000000000000000000000000000000000000000000', 'msg235': '0000000000000000000000000000000000000000000000000000000000000000', 'msg236': '0000000000000000000000000000000000000000000000000000000000000000', 'msg237': '0000000000000000000000000000000000000000000000000000000000000000', 'key171': '0000000000000000000000000000000000000000001000000000000000000000', 'key170': '0000000000000000000000000000000000000000002000000000000000000000', 'key173': '0000000000000000000000000000000000000000000400000000000000000000', 'key172': '0000000000000000000000000000000000000000000800000000000000000000', 'key175': '0000000000000000000000000000000000000000000100000000000000000000', 'key174': '0000000000000000000000000000000000000000000200000000000000000000', 'key177': '0000000000000000000000000000000000000000000040000000000000000000', 'key176': '0000000000000000000000000000000000000000000080000000000000000000', 'key179': '0000000000000000000000000000000000000000000010000000000000000000', 'key178': '0000000000000000000000000000000000000000000020000000000000000000', 'msg246': '0000000000000000000000000000000000000000000000000000000000000000', 'cip239': '58F79FF1810CA4B0E0178F7D9C24A581', 'cip238': '02116E6AEFC21A4D4D64CA27AB7AF31E', 'key252': '0000000000000000000000000000000000000000000000000000000000000008', 'key253': '0000000000000000000000000000000000000000000000000000000000000004', 'key254': '0000000000000000000000000000000000000000000000000000000000000002', 'cip231': 'FD8220818731607D8B69AC5963D0FAC9', 'cip230': '86C3BB221834F7507505434E4F98DC92', 'cip233': '8AB5E8973A5D6648517D151295091C0E', 'cip232': '550726375ABB0F9A7C010DC4E47833F9', 'cip235': '332D696EC49DF4B58C5FA9CC84773F47', 'cip234': '338BB4B5569AA06411B9911381F350B2', 'cip237': '89A49D3AB772D0FDAE05FC692EAF6C7B', 'cip236': 'DEB5AC8F895AFF45BA5815D4912D8371', 'msg59': '0000000000000000000000000000000000000000000000000000000000000000', 'msg58': '0000000000000000000000000000000000000000000000000000000000000000', 'msg51': '0000000000000000000000000000000000000000000000000000000000000000', 'msg50': '0000000000000000000000000000000000000000000000000000000000000000', 'msg53': '0000000000000000000000000000000000000000000000000000000000000000', 'msg52': '0000000000000000000000000000000000000000000000000000000000000000', 'msg55': '0000000000000000000000000000000000000000000000000000000000000000', 'msg54': '0000000000000000000000000000000000000000000000000000000000000000', 'msg57': '0000000000000000000000000000000000000000000000000000000000000000', 'msg56': '0000000000000000000000000000000000000000000000000000000000000000', 'cip125': '175D44DFDE1EAD6E0E6862B511AA7007', 'cip124': '4DABE13A3E656E95150440F81DD92666', 'cip127': '68D0E4CCA0119EED57ABF3C7574BDA8B', 'cip126': '09B690F493F5C779E8B6ACD09667A997', 'cip121': '7DB7B15E4ACBDBB0BFF4C4EAEDC2231E', 'cip120': 'FD30E2D851211506C112D5701B859BC6', 'cip123': 'E53B053D9B2E06656138D4A1EFA58888', 'cip122': 'F0AFDED56AD72D4C1E57A66EEDF4816E', 'cip129': '5DCE21AF0D23BC5AEFD4EA331B16219A', 'cip128': '12C00618DA7EBA5EFA5E58D2696D891F', 'msg159': '0000000000000000000000000000000000000000000000000000000000000000', 'msg158': '0000000000000000000000000000000000000000000000000000000000000000', 'msg151': '0000000000000000000000000000000000000000000000000000000000000000', 'msg150': '0000000000000000000000000000000000000000000000000000000000000000', 'msg153': '0000000000000000000000000000000000000000000000000000000000000000', 'msg152': '0000000000000000000000000000000000000000000000000000000000000000', 'msg155': '0000000000000000000000000000000000000000000000000000000000000000', 'msg154': '0000000000000000000000000000000000000000000000000000000000000000', 'msg157': '0000000000000000000000000000000000000000000000000000000000000000', 'msg156': '0000000000000000000000000000000000000000000000000000000000000000', 'cip248': '644555DFB9CE8EDAF888EE142B5577F1', 'cip249': '716E2BBCBD8FF7E7335784B767F27CA9', 'cip58': '9934453FBAAE1CB362A0012204967AE8', 'cip59': 'E9C98A03713835EB4497346866791190', 'key207': '0000000000000000000000000000000000000000000000000001000000000000', 'cip52': '59F622ACBBA15E522717A9EAF7047949', 'cip53': 'BB2939FFBD77B308DA93220AD68A21AC', 'cip50': 'DE3BC7CDFAF9AB7143E255DC87645F3E', 'cip51': '8FB6CA966B5ACFB180A296EA5D93711F', 'cip56': '49C27499EEC1989626B1E50435BA0273', 'cip57': '39E97018F547A8A802578B80952F2457', 'cip54': 'CEBE5EDD9BACF0A0FB75B259DE7097CD', 'cip55': '3448844E63AC2BD809E254AC3BAA6B3B', 'cip4': '9E953EBAA3B13F43F90908B53DAA0C09', 'cip5': '4579140290095FB25B3144444505D203', 'cip6': '5FD5F687596A9AA9EA105A2F7CF59A94', 'cip7': '005EA3AF8AFF3DDA323148690537853C', 'cip0': '785229B51B515F30A1FCC88B969A4E47', 'cip1': 'B095E0619E70CDF5F4BC6E88079CF22F', 'cip2': '44F32AEAE82516AC8857C1985B7109EC', 'cip3': 'B2BBE93B433C8F0415B90282E788C071', 'cip8': 'CD8E33C4F06FC0586E821522B2FEB08D', 'cip9': 'CABEC07E46D11086778C3E1937CD0797', 'key250': '0000000000000000000000000000000000000000000000000000000000000020', 'key251': '0000000000000000000000000000000000000000000000000000000000000010', 'key79': '0000000000000000000100000000000000000000000000000000000000000000', 'key78': '0000000000000000000200000000000000000000000000000000000000000000', 'key75': '0000000000000000001000000000000000000000000000000000000000000000', 'key74': '0000000000000000002000000000000000000000000000000000000000000000', 'key77': '0000000000000000000400000000000000000000000000000000000000000000', 'key76': '0000000000000000000800000000000000000000000000000000000000000000', 'key71': '0000000000000000010000000000000000000000000000000000000000000000', 'key70': '0000000000000000020000000000000000000000000000000000000000000000', 'key73': '0000000000000000004000000000000000000000000000000000000000000000', 'key72': '0000000000000000008000000000000000000000000000000000000000000000', 'key199': '0000000000000000000000000000000000000000000000000100000000000000', 'key198': '0000000000000000000000000000000000000000000000000200000000000000', 'key197': '0000000000000000000000000000000000000000000000000400000000000000', 'key196': '0000000000000000000000000000000000000000000000000800000000000000', 'key195': '0000000000000000000000000000000000000000000000001000000000000000', 'key194': '0000000000000000000000000000000000000000000000002000000000000000', 'key193': '0000000000000000000000000000000000000000000000004000000000000000', 'key192': '0000000000000000000000000000000000000000000000008000000000000000', 'key191': '0000000000000000000000000000000000000000000000010000000000000000', 'key190': '0000000000000000000000000000000000000000000000020000000000000000', 'cip24': '74DA788FB7A6172B65FBB62C7ED4FECC', 'msg99': '0000000000000000000000000000000000000000000000000000000000000000', 'msg98': '0000000000000000000000000000000000000000000000000000000000000000', 'msg95': '0000000000000000000000000000000000000000000000000000000000000000', 'msg94': '0000000000000000000000000000000000000000000000000000000000000000', 'msg97': '0000000000000000000000000000000000000000000000000000000000000000', 'msg96': '0000000000000000000000000000000000000000000000000000000000000000', 'msg91': '0000000000000000000000000000000000000000000000000000000000000000', 'msg90': '0000000000000000000000000000000000000000000000000000000000000000', 'msg93': '0000000000000000000000000000000000000000000000000000000000000000', 'msg92': '0000000000000000000000000000000000000000000000000000000000000000', 'key108': '0000000000000000000000000008000000000000000000000000000000000000', 'key109': '0000000000000000000000000004000000000000000000000000000000000000', 'key100': '0000000000000000000000000800000000000000000000000000000000000000', 'key101': '0000000000000000000000000400000000000000000000000000000000000000', 'key102': '0000000000000000000000000200000000000000000000000000000000000000', 'key103': '0000000000000000000000000100000000000000000000000000000000000000', 'key104': '0000000000000000000000000080000000000000000000000000000000000000', 'key105': '0000000000000000000000000040000000000000000000000000000000000000', 'key106': '0000000000000000000000000020000000000000000000000000000000000000', 'key107': '0000000000000000000000000010000000000000000000000000000000000000', 'cip169': '2B8DE8D2D3332E6A30215ACC10A69847', 'cip168': '72B9D7628AB21DF89666E50517C50574', 'cip242': '2A94B92CC9C4776817C0A77D49E24F22', 'cip243': '890583A6C9549A3DCAFBD54BF391BC8F', 'cip244': 'EA88A883197E483B4AA16316EA97CCBB', 'cip245': 'CC5732CEB99A0A0353BABA6432BCBE9F', 'cip246': '88811B506D565779F09DE9BDF8702BD8', 'key228': '0000000000000000000000000000000000000000000000000000000008000000', 'cip161': '8085B7A7B939FA37BC4E1D746E9F9B37', 'cip160': 'D293D438C563B8EB3FF26E23A7323B74', 'cip163': 'A5C2AC88B6FD4C57CB4F2C2920A584EF', 'cip162': 'D628AD150E15F413010BE15E391D3F48', 'cip165': '3B2116BD2E362FC8985A0F0C618DF58A', 'cip164': 'D7F5183F6BAB04B87A1ABAA3914DA848', 'cip167': 'AA04A56C13507AE5137657546766AE2D', 'cip166': 'BF31E8DE8342A32BBD80A8F91507BADA', 'msg199': '0000000000000000000000000000000000000000000000000000000000000000', 'msg198': '0000000000000000000000000000000000000000000000000000000000000000', 'msg195': '0000000000000000000000000000000000000000000000000000000000000000', 'msg194': '0000000000000000000000000000000000000000000000000000000000000000', 'msg197': '0000000000000000000000000000000000000000000000000000000000000000', 'msg196': '0000000000000000000000000000000000000000000000000000000000000000', 'msg191': '0000000000000000000000000000000000000000000000000000000000000000', 'key28': '0000000800000000000000000000000000000000000000000000000000000000', 'msg193': '0000000000000000000000000000000000000000000000000000000000000000', 'msg192': '0000000000000000000000000000000000000000000000000000000000000000', 'key29': '0000000400000000000000000000000000000000000000000000000000000000', 'key214': '0000000000000000000000000000000000000000000000000000020000000000', 'key215': '0000000000000000000000000000000000000000000000000000010000000000', 'key216': '0000000000000000000000000000000000000000000000000000008000000000', 'key217': '0000000000000000000000000000000000000000000000000000004000000000', 'key210': '0000000000000000000000000000000000000000000000000000200000000000', 'key211': '0000000000000000000000000000000000000000000000000000100000000000', 'key212': '0000000000000000000000000000000000000000000000000000080000000000', 'key213': '0000000000000000000000000000000000000000000000000000040000000000', 'key218': '0000000000000000000000000000000000000000000000000000002000000000', 'key219': '0000000000000000000000000000000000000000000000000000001000000000', 'cip98': '88C342961D0EE83902CB78C29539923D', 'cip99': 'CF3B48A6351C4561752D6A209F93A30F', 'cip96': '0A44FDEAA17E5F3E536A08D7A5B3267B', 'cip97': 'BAC72F53EE39296D3A23B126F8D8B20B', 'cip94': '3D5819934619E09F10E90C4EA7F30F40', 'cip95': '710446D0A254F68975CD6AAAE92212FD', 'cip92': '13F7406746C6E0CD5666EC04C0E540E2', 'cip93': '9382384DCAF80CF537E24FC5F2F71A8A', 'cip90': '10B7242D9C7CA610C20F1183BB949514', 'cip91': 'B7DF971F9C3444EFCC13210292126942', 'msg120': '0000000000000000000000000000000000000000000000000000000000000000', 'msg121': '0000000000000000000000000000000000000000000000000000000000000000', 'msg122': '0000000000000000000000000000000000000000000000000000000000000000', 'msg123': '0000000000000000000000000000000000000000000000000000000000000000', 'msg124': '0000000000000000000000000000000000000000000000000000000000000000', 'msg125': '0000000000000000000000000000000000000000000000000000000000000000', 'msg126': '0000000000000000000000000000000000000000000000000000000000000000', 'msg127': '0000000000000000000000000000000000000000000000000000000000000000', 'msg128': '0000000000000000000000000000000000000000000000000000000000000000', 'msg129': '0000000000000000000000000000000000000000000000000000000000000000', 'key31': '0000000100000000000000000000000000000000000000000000000000000000', 'key30': '0000000200000000000000000000000000000000000000000000000000000000', 'key33': '0000000040000000000000000000000000000000000000000000000000000000', 'key32': '0000000080000000000000000000000000000000000000000000000000000000', 'key35': '0000000010000000000000000000000000000000000000000000000000000000', 'key34': '0000000020000000000000000000000000000000000000000000000000000000', 'key37': '0000000004000000000000000000000000000000000000000000000000000000', 'key36': '0000000008000000000000000000000000000000000000000000000000000000', 'key39': '0000000001000000000000000000000000000000000000000000000000000000', 'key38': '0000000002000000000000000000000000000000000000000000000000000000', 'cip29': 'A1B7E0CC8B69B3C0C6F635F962D0A22F', 'cip28': '3F6F7B1157906913B09BD2AE2627C6B0', 'cip240': '686FB1ED659D9BF17DA2BB79AC636C93', 'key221': '0000000000000000000000000000000000000000000000000000000400000000', 'msg190': '0000000000000000000000000000000000000000000000000000000000000000', 'cip241': '1C5C176C4F5796B2C34D2A12858EB511', 'msg227': '0000000000000000000000000000000000000000000000000000000000000000', 'msg226': '0000000000000000000000000000000000000000000000000000000000000000', 'msg225': '0000000000000000000000000000000000000000000000000000000000000000', 'msg224': '0000000000000000000000000000000000000000000000000000000000000000', 'msg223': '0000000000000000000000000000000000000000000000000000000000000000', 'msg222': '0000000000000000000000000000000000000000000000000000000000000000', 'msg221': '0000000000000000000000000000000000000000000000000000000000000000', 'msg220': '0000000000000000000000000000000000000000000000000000000000000000', 'msg229': '0000000000000000000000000000000000000000000000000000000000000000', 'msg228': '0000000000000000000000000000000000000000000000000000000000000000', 'key148': '0000000000000000000000000000000000000800000000000000000000000000', 'key149': '0000000000000000000000000000000000000400000000000000000000000000', 'key144': '0000000000000000000000000000000000008000000000000000000000000000', 'key145': '0000000000000000000000000000000000004000000000000000000000000000', 'key146': '0000000000000000000000000000000000002000000000000000000000000000', 'key147': '0000000000000000000000000000000000001000000000000000000000000000', 'key140': '0000000000000000000000000000000000080000000000000000000000000000', 'key141': '0000000000000000000000000000000000040000000000000000000000000000', 'key142': '0000000000000000000000000000000000020000000000000000000000000000', 'key143': '0000000000000000000000000000000000010000000000000000000000000000', 'msg69': '0000000000000000000000000000000000000000000000000000000000000000', 'key249': '0000000000000000000000000000000000000000000000000000000000000040', 'key248': '0000000000000000000000000000000000000000000000000000000000000080', 'key247': '0000000000000000000000000000000000000000000000000000000000000100', 'key246': '0000000000000000000000000000000000000000000000000000000000000200', 'key245': '0000000000000000000000000000000000000000000000000000000000000400', 'key244': '0000000000000000000000000000000000000000000000000000000000000800', 'key243': '0000000000000000000000000000000000000000000000000000000000001000', 'key242': '0000000000000000000000000000000000000000000000000000000000002000', 'key241': '0000000000000000000000000000000000000000000000000000000000004000', 'key240': '0000000000000000000000000000000000000000000000000000000000008000', 'key204': '0000000000000000000000000000000000000000000000000008000000000000', 'msg48': '0000000000000000000000000000000000000000000000000000000000000000', 'msg49': '0000000000000000000000000000000000000000000000000000000000000000', 'msg42': '0000000000000000000000000000000000000000000000000000000000000000', 'msg43': '0000000000000000000000000000000000000000000000000000000000000000', 'msg40': '0000000000000000000000000000000000000000000000000000000000000000', 'msg41': '0000000000000000000000000000000000000000000000000000000000000000', 'msg46': '0000000000000000000000000000000000000000000000000000000000000000', 'msg47': '0000000000000000000000000000000000000000000000000000000000000000', 'msg44': '0000000000000000000000000000000000000000000000000000000000000000', 'msg45': '0000000000000000000000000000000000000000000000000000000000000000', 'cip110': '4D10D177334397F49211BCB10F207905', 'cip111': 'C8E608BAFE61254A0DDF866BB4D063DD', 'cip112': '05DDAB3DAEA0C64C1077BE22DA7ACDD4', 'cip113': '951388F2BE1DD7013A00327FC6DB7905', 'cip114': '62F8283651EFDF475DE8511EA7256AD6', 'cip115': '5B259EEE6B19EE12D4CE20D2F38D4BCF', 'cip116': '704414E13DCAD9DF7F593F630E68E13C', 'cip117': '41AD9DAAC24ECCBB454DBAF75D5B9989', 'cip118': '919C54C126B54D7A570D8ABA9FCE5D08', 'cip119': 'BC665541FF0F2E86DBDF4444C01AC0EA', 'msg164': '0000000000000000000000000000000000000000000000000000000000000000', 'msg165': '0000000000000000000000000000000000000000000000000000000000000000', 'msg166': '0000000000000000000000000000000000000000000000000000000000000000', 'msg167': '0000000000000000000000000000000000000000000000000000000000000000', 'msg160': '0000000000000000000000000000000000000000000000000000000000000000', 'msg161': '0000000000000000000000000000000000000000000000000000000000000000', 'msg162': '0000000000000000000000000000000000000000000000000000000000000000', 'msg163': '0000000000000000000000000000000000000000000000000000000000000000', 'msg168': '0000000000000000000000000000000000000000000000000000000000000000', 'msg169': '0000000000000000000000000000000000000000000000000000000000000000', 'key136': '0000000000000000000000000000000000800000000000000000000000000000', 'cip204': '3F055452FCD596C6D588BD48BB5D5080', 'cip205': 'A1D97F66DEF90DE14CC2BFAFF09286BB', 'cip206': '80442DC4EBFB53B86E232D886CA166B9', 'cip207': '76A593802C6A691152E8A04E5DE2D05A', 'cip200': '7CE998A357384159C9B34A9A8AC7DF78', 'cip201': '51BE07BA8106A19CCC2005B8B3932FBF', 'cip202': '2634245A6EC3F17A35B7FE1D3E17F769', 'cip203': '24D4114760BCE04C0109C06CCE199F6C', 'cip208': 'F923A147E00807D58FB9C686E01F7E07', 'cip209': '8EA3B396D561A3CFCE729A0B59647760', 'cip67': '0B0D61E162A88E04C38C19CA668C2DDC', 'cip66': '27A0BF748F513F18D4F7831527A3608F', 'cip65': '6A2C94C488D5BD32742F143B2E8D0659', 'cip64': 'F29B1370BA8D8CC19AC8DF5DF77F7319', 'cip63': '13645DBEDE21FF7C79C06141AD9E4CD1', 'cip62': 'B054259980B45B9D2D7CD6C13200BAFC', 'cip61': '3A84B0A26CEA6A8D8A94D5B791A0D3E8', 'cip60': 'E026C858938B47D28A8758CCFAEF0FA8', 'cip69': '99699B31EBBE6ABE1F7B2AFEC86DC7E2', 'cip68': '4055BA24216EF49FE36E6145A5CD31D4', 'cip176': 'EB4BBA7F94CE9429255A583D2F9810CD', 'key159': '0000000000000000000000000000000000000001000000000000000000000000', 'key158': '0000000000000000000000000000000000000002000000000000000000000000', 'key68': '0000000000000000080000000000000000000000000000000000000000000000', 'key69': '0000000000000000040000000000000000000000000000000000000000000000', 'key66': '0000000000000000200000000000000000000000000000000000000000000000', 'key67': '0000000000000000100000000000000000000000000000000000000000000000', 'key64': '0000000000000000800000000000000000000000000000000000000000000000', 'key65': '0000000000000000400000000000000000000000000000000000000000000000', 'key62': '0000000000000002000000000000000000000000000000000000000000000000', 'key63': '0000000000000001000000000000000000000000000000000000000000000000', 'key60': '0000000000000008000000000000000000000000000000000000000000000000', 'key61': '0000000000000004000000000000000000000000000000000000000000000000', 'key138': '0000000000000000000000000000000000200000000000000000000000000000', 'key155': '0000000000000000000000000000000000000010000000000000000000000000', 'msg218': '0000000000000000000000000000000000000000000000000000000000000000', 'msg219': '0000000000000000000000000000000000000000000000000000000000000000', 'msg216': '0000000000000000000000000000000000000000000000000000000000000000', 'msg217': '0000000000000000000000000000000000000000000000000000000000000000', 'msg214': '0000000000000000000000000000000000000000000000000000000000000000', 'key154': '0000000000000000000000000000000000000020000000000000000000000000', 'msg212': '0000000000000000000000000000000000000000000000000000000000000000', 'msg213': '0000000000000000000000000000000000000000000000000000000000000000', 'msg210': '0000000000000000000000000000000000000000000000000000000000000000', 'msg211': '0000000000000000000000000000000000000000000000000000000000000000', 'key117': '0000000000000000000000000000040000000000000000000000000000000000', 'key116': '0000000000000000000000000000080000000000000000000000000000000000', 'key115': '0000000000000000000000000000100000000000000000000000000000000000', 'key114': '0000000000000000000000000000200000000000000000000000000000000000', 'key113': '0000000000000000000000000000400000000000000000000000000000000000', 'key112': '0000000000000000000000000000800000000000000000000000000000000000', 'key111': '0000000000000000000000000001000000000000000000000000000000000000', 'key110': '0000000000000000000000000002000000000000000000000000000000000000', 'msg86': '0000000000000000000000000000000000000000000000000000000000000000', 'msg87': '0000000000000000000000000000000000000000000000000000000000000000', 'msg84': '0000000000000000000000000000000000000000000000000000000000000000', 'msg85': '0000000000000000000000000000000000000000000000000000000000000000', 'msg82': '0000000000000000000000000000000000000000000000000000000000000000', 'msg83': '0000000000000000000000000000000000000000000000000000000000000000', 'msg80': '0000000000000000000000000000000000000000000000000000000000000000', 'msg81': '0000000000000000000000000000000000000000000000000000000000000000', 'cip247': 'E11FEE3AD4A9A03956704B58720C92DD', 'cip254': '8CB4E2498382B523DCE6F7C17C91400B', 'cip253': '3C943E1A2E7E56E4B185302D2D5C5DBD', 'cip252': 'B3EFCF17F0E1B275D413DD4D3A5CAE68', 'cip251': '5E2833EC95ACE6B93AF28C6FCDBCE5D5', 'cip250': '83588863F183ECE04E95629A322F9A09', 'cip225': '5EA6D1B9881CE230B8EABAC59B7F5393', 'cip23': '1329EA7551CE6C335DB924D563694058', 'cip22': '69B24511DF9BE48CFDB416F08908315F', 'cip21': 'E68E3A421462A49AF8D7E544F7789301', 'msg33': '0000000000000000000000000000000000000000000000000000000000000000', 'msg32': '0000000000000000000000000000000000000000000000000000000000000000', 'msg31': '0000000000000000000000000000000000000000000000000000000000000000', 'msg30': '0000000000000000000000000000000000000000000000000000000000000000', 'msg37': '0000000000000000000000000000000000000000000000000000000000000000', 'msg36': '0000000000000000000000000000000000000000000000000000000000000000', 'msg35': '0000000000000000000000000000000000000000000000000000000000000000', 'msg34': '0000000000000000000000000000000000000000000000000000000000000000', 'cip27': '7F9F21E8C45D1E8A843060B963CC628B', 'msg39': '0000000000000000000000000000000000000000000000000000000000000000', 'msg38': '0000000000000000000000000000000000000000000000000000000000000000', 'cip26': '824D4C002C401677D5785D6C6DA96C68', 'key9': '0040000000000000000000000000000000000000000000000000000000000000', 'key8': '0080000000000000000000000000000000000000000000000000000000000000', 'cip25': '862703854F75F433135601000CD9363B', 'key3': '1000000000000000000000000000000000000000000000000000000000000000', 'key2': '2000000000000000000000000000000000000000000000000000000000000000', 'key1': '4000000000000000000000000000000000000000000000000000000000000000', 'key0': '8000000000000000000000000000000000000000000000000000000000000000', 'key7': '0100000000000000000000000000000000000000000000000000000000000000', 'key6': '0200000000000000000000000000000000000000000000000000000000000000', 'key5': '0400000000000000000000000000000000000000000000000000000000000000', 'key4': '0800000000000000000000000000000000000000000000000000000000000000', 'msg139': '0000000000000000000000000000000000000000000000000000000000000000', 'msg138': '0000000000000000000000000000000000000000000000000000000000000000', 'msg137': '0000000000000000000000000000000000000000000000000000000000000000', 'msg136': '0000000000000000000000000000000000000000000000000000000000000000', 'msg135': '0000000000000000000000000000000000000000000000000000000000000000', 'msg134': '0000000000000000000000000000000000000000000000000000000000000000', 'msg133': '0000000000000000000000000000000000000000000000000000000000000000', 'msg132': '0000000000000000000000000000000000000000000000000000000000000000', 'msg131': '0000000000000000000000000000000000000000000000000000000000000000', 'msg130': '0000000000000000000000000000000000000000000000000000000000000000', 'cip154': 'A94203746A266C5744C16BF4E8DFA6D7', 'cip155': 'D3BA78AD6B01CC7221FA7778699C8316', 'cip156': '994FDCC09C25400D14C05117B936EECD', 'cip157': '4012F67B2A0BEF2623CA6AC5B054BE62', 'cip150': '82AA2DB6FEE9212968D8282A1BF3242B', 'cip151': '220C8B197F54F8E86DAE575B07A570EF', 'cip152': '873C47F6F75BE9F710F91F2C54A69A7A', 'cip153': '0392FA7BB908FEF23774772F74AC968D', 'cip158': '1134AF65E6D3D5E3D3C23A499EE2F677', 'cip159': '6B35A344BD8DFD4002F5F22EA288F8E6', 'key22': '0000020000000000000000000000000000000000000000000000000000000000', 'key23': '0000010000000000000000000000000000000000000000000000000000000000', 'key20': '0000080000000000000000000000000000000000000000000000000000000000', 'key21': '0000040000000000000000000000000000000000000000000000000000000000', 'cip38': '83C5D584511836263D8B0DE7CEF0AD16', 'cip39': 'E09206EB6A5E8AC933BAAB46547E4CD9', 'key24': '0000008000000000000000000000000000000000000000000000000000000000', 'key25': '0000004000000000000000000000000000000000000000000000000000000000', 'cip34': 'F61EF2509D173E348E01839A26D033FF', 'cip35': '9D37D036C8568D2173654423CC7AAB39', 'cip36': 'A93D98C055DDAA592390CADB0F0C468D', 'cip37': 'F19CB2A5067E9FBADBD4F0D103007A54', 'cip30': '6FC34DDFF0C74674CE124D85E8A3447F', 'cip31': '436A5D315AF443DEA9BEF8D1E817E7E0', 'cip32': '8B0434C9C98CDA4B313DAD6F1E64A943', 'cip33': 'AF9BD15EF1535259C63D688BF67119C4', 'cip218': '39AE859D255487A68093A376D358BBC2', 'msg252': '0000000000000000000000000000000000000000000000000000000000000000', 'msg253': '0000000000000000000000000000000000000000000000000000000000000000', 'msg250': '0000000000000000000000000000000000000000000000000000000000000000', 'msg251': '0000000000000000000000000000000000000000000000000000000000000000', 'msg254': '0000000000000000000000000000000000000000000000000000000000000000', 'key97': '0000000000000000000000004000000000000000000000000000000000000000', 'key96': '0000000000000000000000008000000000000000000000000000000000000000', 'key95': '0000000000000000000000010000000000000000000000000000000000000000', 'key94': '0000000000000000000000020000000000000000000000000000000000000000', 'key93': '0000000000000000000000040000000000000000000000000000000000000000', 'key92': '0000000000000000000000080000000000000000000000000000000000000000', 'key91': '0000000000000000000000100000000000000000000000000000000000000000', 'key90': '0000000000000000000000200000000000000000000000000000000000000000', 'key153': '0000000000000000000000000000000000000040000000000000000000000000', 'key152': '0000000000000000000000000000000000000080000000000000000000000000', 'key151': '0000000000000000000000000000000000000100000000000000000000000000', 'key150': '0000000000000000000000000000000000000200000000000000000000000000', 'key157': '0000000000000000000000000000000000000004000000000000000000000000', 'key156': '0000000000000000000000000000000000000008000000000000000000000000', 'key99': '0000000000000000000000001000000000000000000000000000000000000000', 'key98': '0000000000000000000000002000000000000000000000000000000000000000', 'key238': '0000000000000000000000000000000000000000000000000000000000020000', 'key239': '0000000000000000000000000000000000000000000000000000000000010000', 'key232': '0000000000000000000000000000000000000000000000000000000000800000', 'key233': '0000000000000000000000000000000000000000000000000000000000400000', 'key230': '0000000000000000000000000000000000000000000000000000000002000000', 'key231': '0000000000000000000000000000000000000000000000000000000001000000', 'key236': '0000000000000000000000000000000000000000000000000000000000080000', 'key237': '0000000000000000000000000000000000000000000000000000000000040000', 'key234': '0000000000000000000000000000000000000000000000000000000000200000', 'key235': '0000000000000000000000000000000000000000000000000000000000100000', 'msg77': '0000000000000000000000000000000000000000000000000000000000000000', 'msg76': '0000000000000000000000000000000000000000000000000000000000000000', 'msg75': '0000000000000000000000000000000000000000000000000000000000000000', 'msg74': '0000000000000000000000000000000000000000000000000000000000000000', 'msg73': '0000000000000000000000000000000000000000000000000000000000000000', 'msg72': '0000000000000000000000000000000000000000000000000000000000000000', 'msg71': '0000000000000000000000000000000000000000000000000000000000000000', 'msg70': '0000000000000000000000000000000000000000000000000000000000000000', 'msg79': '0000000000000000000000000000000000000000000000000000000000000000', 'msg78': '0000000000000000000000000000000000000000000000000000000000000000', 'cip42': '64D62934D409F36505EEC3B925BE914D', 'key128': '0000000000000000000000000000000080000000000000000000000000000000', 'key129': '0000000000000000000000000000000040000000000000000000000000000000', 'key126': '0000000000000000000000000000000200000000000000000000000000000000', 'key127': '0000000000000000000000000000000100000000000000000000000000000000', 'key124': '0000000000000000000000000000000800000000000000000000000000000000', 'key125': '0000000000000000000000000000000400000000000000000000000000000000', 'key122': '0000000000000000000000000000002000000000000000000000000000000000', 'key123': '0000000000000000000000000000001000000000000000000000000000000000', 'key120': '0000000000000000000000000000008000000000000000000000000000000000', 'key121': '0000000000000000000000000000004000000000000000000000000000000000', 'cip109': '782D8A4D30EE841EDB2E7E88C63B851A', 'cip108': '62D8460820B18811DEBB617DE7B8EC8C', 'cip107': '27BCC9206AEC78DA48C1E9AB8D1A7A07', 'cip106': '59CF38A7C863C623991B5392944CB43C', 'cip105': 'FD7B1DD7C7FE279E6A5E2926DD890B5E', 'cip104': '258F95A0E86EE0EE8FC020B4A01900F2', 'cip103': '9F2BCB0C28768DA3B76206979B14EBC2', 'cip102': '955B8619F99F7609201CEEB338F32795', 'cip101': '23675E18C1C66B483D55E14AC7F9CC80', 'cip100': '957B107D23F3694F3FFD9957BBE13168', 'msg173': '0000000000000000000000000000000000000000000000000000000000000000', 'msg172': '0000000000000000000000000000000000000000000000000000000000000000', 'msg171': '0000000000000000000000000000000000000000000000000000000000000000', 'msg170': '0000000000000000000000000000000000000000000000000000000000000000', 'msg177': '0000000000000000000000000000000000000000000000000000000000000000', 'msg176': '0000000000000000000000000000000000000000000000000000000000000000', 'msg175': '0000000000000000000000000000000000000000000000000000000000000000', 'msg174': '0000000000000000000000000000000000000000000000000000000000000000', 'msg179': '0000000000000000000000000000000000000000000000000000000000000000', 'msg178': '0000000000000000000000000000000000000000000000000000000000000000', 'msg215': '0000000000000000000000000000000000000000000000000000000000000000', 'cip198': '7488F9790FEC8AAE2AADDF6A600629B3', 'cip199': '669C36695C33B63F16077CAE9AA940AA', 'cip211': '7F7C322D82557737F5407A797069B711', 'cip210': '4AA735D710704790C060BAD696DACABE', 'cip217': '04C7B0268EAEFED098C815935D868CF9', 'cip216': '684085D0BE8AE0D617B2EFEF62CAAC93', 'cip215': 'AFCF921E4FA24FDEF85EDAC12CD479F1', 'cip214': '18F86EA6C633228579C5728FF070AC21', 'cip190': 'BF90E87173A45115C811B6319C24FC4A', 'cip191': '8029EE840D130319330B432D95DB9AA7', 'cip192': '19D6D9F45582481A573D77917E778F3C', 'cip193': '556D552FDE7C64227E2B72776488D6C1', 'cip194': '3E81B51A214CC1F1CF6F35F9106A84BC', 'cip195': '4E48243857ECB700F8F16872E0BB4FA9', 'cip196': '681654DF6668CDDF1D3D604483AB483B', 'cip197': 'BD6CEEFD85A336E4F12D42076573ECA2', 'cip70': 'C8D70448CBA770CD94088F60CBF8C5AC', 'cip71': '56C89F1BA6D3AB20465F01F81D00A894', 'cip72': '919FC5BBFAB8C31F8B2A346FBC2AB282', 'cip73': 'FF57E3AB8751DAA252DD0DD917BEAD8B', 'cip74': '90B94853B317FFA8D41F2A32A3A061AB', 'cip75': 'F4A0257D0CF6C8C87D154746C2C94B52', 'cip76': '03666F848F252B501754773CB68CF3B2', 'cip77': 'F3D0941DDC7412A981C5F6CCAB082DC2', 'cip78': '21EDD2A11C57EE97AEADFACEC20A8691', 'cip79': '577CF09B5606F1443E8B57952004C68D', 'msg106': '0000000000000000000000000000000000000000000000000000000000000000', 'msg107': '0000000000000000000000000000000000000000000000000000000000000000', 'msg104': '0000000000000000000000000000000000000000000000000000000000000000', 'msg105': '0000000000000000000000000000000000000000000000000000000000000000', 'msg102': '0000000000000000000000000000000000000000000000000000000000000000', 'msg88': '0000000000000000000000000000000000000000000000000000000000000000', 'msg100': '0000000000000000000000000000000000000000000000000000000000000000', 'msg101': '0000000000000000000000000000000000000000000000000000000000000000', 'msg89': '0000000000000000000000000000000000000000000000000000000000000000', 'msg108': '0000000000000000000000000000000000000000000000000000000000000000', 'msg109': '0000000000000000000000000000000000000000000000000000000000000000', 'msg247': '0000000000000000000000000000000000000000000000000000000000000000', 'key119': '0000000000000000000000000000010000000000000000000000000000000000', 'key118': '0000000000000000000000000000020000000000000000000000000000000000', 'key59': '0000000000000010000000000000000000000000000000000000000000000000', 'key58': '0000000000000020000000000000000000000000000000000000000000000000', 'key53': '0000000000000400000000000000000000000000000000000000000000000000', 'key52': '0000000000000800000000000000000000000000000000000000000000000000', 'key51': '0000000000001000000000000000000000000000000000000000000000000000', 'key50': '0000000000002000000000000000000000000000000000000000000000000000', 'key57': '0000000000000040000000000000000000000000000000000000000000000000', 'key56': '0000000000000080000000000000000000000000000000000000000000000000', 'key55': '0000000000000100000000000000000000000000000000000000000000000000', 'key54': '0000000000000200000000000000000000000000000000000000000000000000', 'cip20': 'D36754729DB34ECA1ECAC2CE2B381713', 'msg103': '0000000000000000000000000000000000000000000000000000000000000000', 'msg209': '0000000000000000000000000000000000000000000000000000000000000000', 'msg208': '0000000000000000000000000000000000000000000000000000000000000000', 'msg205': '0000000000000000000000000000000000000000000000000000000000000000', 'msg204': '0000000000000000000000000000000000000000000000000000000000000000', 'msg207': '0000000000000000000000000000000000000000000000000000000000000000', 'msg206': '0000000000000000000000000000000000000000000000000000000000000000', 'msg201': '0000000000000000000000000000000000000000000000000000000000000000', 'msg200': '0000000000000000000000000000000000000000000000000000000000000000', 'msg203': '0000000000000000000000000000000000000000000000000000000000000000', 'msg202': '0000000000000000000000000000000000000000000000000000000000000000', 'key162': '0000000000000000000000000000000000000000200000000000000000000000', 'key163': '0000000000000000000000000000000000000000100000000000000000000000', 'key160': '0000000000000000000000000000000000000000800000000000000000000000', 'key161': '0000000000000000000000000000000000000000400000000000000000000000', 'key166': '0000000000000000000000000000000000000000020000000000000000000000', 'key167': '0000000000000000000000000000000000000000010000000000000000000000', 'key164': '0000000000000000000000000000000000000000080000000000000000000000', 'key165': '0000000000000000000000000000000000000000040000000000000000000000', 'key168': '0000000000000000000000000000000000000000008000000000000000000000', 'key169': '0000000000000000000000000000000000000000004000000000000000000000', 'msg245': '0000000000000000000000000000000000000000000000000000000000000000', 'cip228': '68AC18DB2FBF0A4A095A4B3344BF035D', 'cip229': '563868079C5DF91E3B47B370B0BBB820', 'cip222': '7AD12485E896037A8D1A4ABE8A80B9BB', 'cip223': 'CEC561C6F4C45CC944371E5D1C18EDF1', 'cip220': 'B9BE024D06447F8965E480B33975E36F', 'cip221': '24ECD5B3178150233BD38A4B9F8EBC86', 'cip226': '8023134FAC8BF5FDA86368BDA618AEF7', 'cip227': 'D37285234A927061BEC9F8AAE0E796C8', 'cip224': 'F4B1088B0858A3737DF2C90FD919D1D4', 'msg147': '0000000000000000000000000000000000000000000000000000000000000000', 'msg244': '0000000000000000000000000000000000000000000000000000000000000000', 'cip140': 'BA5D708CBA34F782DA00C7643C971DB9', 'msg28': '0000000000000000000000000000000000000000000000000000000000000000', 'msg29': '0000000000000000000000000000000000000000000000000000000000000000', 'msg24': '0000000000000000000000000000000000000000000000000000000000000000', 'msg25': '0000000000000000000000000000000000000000000000000000000000000000', 'msg26': '0000000000000000000000000000000000000000000000000000000000000000', 'msg27': '0000000000000000000000000000000000000000000000000000000000000000', 'msg20': '0000000000000000000000000000000000000000000000000000000000000000', 'msg21': '0000000000000000000000000000000000000000000000000000000000000000', 'msg22': '0000000000000000000000000000000000000000000000000000000000000000', 'msg23': '0000000000000000000000000000000000000000000000000000000000000000', 'cip136': '545690C09C8C396F1273510DA9065C12', 'cip137': '16D86FCC5910E2DD0CEA4DD5219B2D03', 'cip134': '90CA81DF4000404B567F5CFA9D193CB3', 'cip135': 'A2E6864259483D059B57BB921B7FBD99', 'cip132': '324D30DDC6979F17A3BEAEA3A76AD44C', 'cip133': 'A1AA0E04E2B61861796FD2AA30FBEB05', 'cip130': 'A5D7135A053B904D44B40E4E21693751', 'cip131': '3257CEC675BF755FEE67A44D7EDF2731', 'key229': '0000000000000000000000000000000000000000000000000000000004000000', 'cip138': 'EC4114C19DD5711CD927B0DBE34AAB4B', 'cip139': 'A78C62D8FD439E5B10A7EF436714AC22', 'key44': '0000000000080000000000000000000000000000000000000000000000000000', 'msg148': '0000000000000000000000000000000000000000000000000000000000000000', 'msg149': '0000000000000000000000000000000000000000000000000000000000000000', 'key45': '0000000000040000000000000000000000000000000000000000000000000000', 'msg142': '0000000000000000000000000000000000000000000000000000000000000000', 'msg143': '0000000000000000000000000000000000000000000000000000000000000000', 'msg140': '0000000000000000000000000000000000000000000000000000000000000000', 'msg141': '0000000000000000000000000000000000000000000000000000000000000000', 'msg146': '0000000000000000000000000000000000000000000000000000000000000000', 'key46': '0000000000020000000000000000000000000000000000000000000000000000', 'msg144': '0000000000000000000000000000000000000000000000000000000000000000', 'msg145': '0000000000000000000000000000000000000000000000000000000000000000', 'cip143': '187A1824D390AD2798E4F2264E5F1F21', 'cip142': '8A025CED99AF1047C5345358A291CDBB', 'cip141': '7DB9ADCFA26C1E784E7F485BD0A0A52C', 'key47': '0000000000010000000000000000000000000000000000000000000000000000', 'cip147': '96B8429F476485F8CC2E204534A8B64E', 'cip146': 'F9C79D54CEEE6170B195F4D30FA63FE0', 'cip145': '5D486AB86A883029EC74916851FFFA11', 'cip144': 'BA28DE5C32353C65B97A59889E7A7A40', 'key40': '0000000000800000000000000000000000000000000000000000000000000000', 'cip149': 'C72DC86F70B40169B3456783A611DAE9', 'cip148': '13061D65FEF26F5ACAAF3B55FDB98C36', 'key220': '0000000000000000000000000000000000000000000000000000000800000000', 'key203': '0000000000000000000000000000000000000000000000000010000000000000', 'key41': '0000000000400000000000000000000000000000000000000000000000000000'}
 
## HASH
# SHA-512
# all_zero_messages: each element of the the tuple is the SHA-256 hash of a message consist of an amount of zero bytes equal to the index of the hash in the tuple
sha512_all_zero_messages = ('CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E', 'B8244D028981D693AF7B456AF8EFA4CAD63D282E19FF14942C246E50D9351D22704A802A71C3580B6370DE4CEB293C324A8423342557D4E5C38438F0E36910EE', '5EA71DC6D0B4F57BF39AADD07C208C35F06CD2BAC5FDE210397F70DE11D439C62EC1CDF3183758865FD387FCEA0BADA2F6C37A4A17851DD1D78FEFE6F204EE54', '6D518F8B31D1882FEACE10A9215F5D8CF5AFE037652A1D11D9C1408D988C2A4F71A5EDFC85D0712FA3F4E21B2C0A244C8C0D333BAB454311E24067D2A83E5E59', 'EC2D57691D9B2D40182AC565032054B7D784BA96B18BCB5BE0BB4E70E3FB041EFF582C8AF66EE50256539F2181D7F9E53627C0189DA7E75A4D5EF10EA93B20B3', '65FAA9D920E0E9CFF43FC3F30AB02BA2E8CF6F4643B58F7C1E64583FBEC8A268E677B0EC4D54406E748BECB53FDA210F5D4F39CF2A5014B1CA496B0805182649', 'C11D53B386F5EE0C042C9246D4A38B1E032A3BC9EA3F6827A9482D4F31B6E4A1973C97190BDC59D961D5B6F1D5B06C25C4B9E94CA04EAEF395A928FA851493D6', '76AFCA18A9B81FFB967FFCF0460ED221C3605D3820057214D785FA88259BB5CB729576178E6EDB0134F645D2E2E92CBABF1333462F3B9058692C950F51C64A92', '1B7409CCF0D5A34D3A77EAABFA9FE27427655BE9297127EE9522AA1BF4046D4F945983678169CB1A7348EDCAC47EF0D9E2C924130E5BCC5F0D94937852C42F1B', 'A85DE39409374651002C84CBA7C928EB96FB82F88ACC2AEAC392985DEF3E1389346122B82C9C47B743A5C2764BB0E3F5C309AF7202DBE723E69A5193E84FCBC4', '19BD3CBB62B1937957A11CABD0D39860582B6928E77D0E0EA5EE7F3B2F8CACB3DEA8EA0972651ADC3245FD10926F2F31E80377196E4E6C7EE2BD74051E58BCBA', '84BCD394CF4D2F2D59A04391726FE7CC0438664E13907418D69FDCCB0297ED79FA0C6BA2046CDD8F07E13D9C40D5C783F051260DE5FD2902890817E6F74D03FB', '666A9A1A7542E895A9F447D1C3E0FFD679BBF6346E0C43F5C7A733C46F5E56C2F65E69DFD4769A9CAD2B79B31D282F1CA2AA296EF41BD9833947ADA194F46940', 'B4286A45FED95442F6BDC6CA03D29687AED2D25F9AF548F099D05DCDDCCE291182BB900D2519B36A0B708A027204708E3959320A4AA3F4E79C6D94C6932018EB', '7CF95CDE6D8D85F13497DDBABC60A56BCA0ABEABD2BC3E723C0A4A8C0784B14C4EE3317620B79D260D42608C8B907571499187078D14304A5E7A84BC55193CE9', 'DA7852FB298E7456612A129EC356BFB6329720E795BE483F5F07ADAA146EAEC0DB2907902C087456F5F8C85B05995665380CC7E25CEFE1663F6D7158D1191419', '0B6CBAC838DFE7F47EA1BD0DF00EC282FDF45510C92161072CCFB84035390C4DA743D9C3B954EAA1B0F86FC9861B23CC6C8667AB232C11C686432EBB5C8C3F27', '1D1DDBA67C614373460ECDF0185069B4758286990E71266176F7483258D94EA404E3A65D7D8D7BC8516FBE2A9F8D9CE1BF27859EB779285199D69316F96453F3', 'B6814EB4BF32768B13C7A5DC04F7EFB18D5FBB48F561505511567F7EF183A03B776A097AFF26F098703766E1C97940C087E3E0A4F6E2AD60646EC9D3218C6AED', '2D6F4BCE07D729E2385A3B7F3643C4EE8EAA7AB88AEC3486F0DA1D49325047B143867043E2506C1531C96286528BA646EB081BB54C0E3DB403CA82C85340F1B3', 'D296B892B3A7964BD0CC882FC7C0BE948B6BBD8EB1EFF8C13942FCAABF1F38772DD56BA4D8ECD0B626FF5CEF1CD045A1B0A76910396F3C7430B215A85950E9C3', '8EDC8E22D78C7582525BF3A94AAF1EA0286A03DB90A0CB13E136AEF1BF8AA152AE4B8B72CE3940B7CFEE03AA6AB3CFEC42093D3081AD407DB4BDB2076BED7F30', 'A080CD443A054FEDEB357009663F325C075B3AB77182BC6B2369F3E7B03D3446A38DB84A7611FD5D35C4533DFA35F597DA1ADE685EBE94EB77D86A60C3602023', 'D92BA2A6F94BDCD17C2C18C8FD85B93D430F22615D152FDFC25CD58FE489D88036C09E0E664C5F57F9D7098B2818A65CD9260732D298FC3B6B017AB348235EB7', '11BB994B5D2EAB48B18667C7D8943E82C9011CB1D974304B8F2B6247A7E6B7F55CA2F7C62893644C3728D17DAFD74AE3BA46271CF6287BB9E751C779A26FEFC5', 'B7C0D359932E2CC0E85B731A285A66D57972B16893E0426D1605FA727AB698A25C54ABDFB06436885AF68DC5E2C85C0BFA997818EC3258068DEEE038470E249D', 'EB5A2D684D93699169F8243A966EFE83879F4D6434F7C90B4DB7599D123DC15FE92A46BE37BBC3417CBDA85BAB67AA924D75C7A235972C1953A96A78185A4CB1', '4F85061EF6C66BF0E030AF017AF8C7154ED3F7953594AE2CF6F663E8B95BA978A54C171B01F212880E2711C2FD745A12B959ED27E7F6B1847273F70A4010CCDE', '1A74152F13D085BC31C6B98C3A16C6F0C8DE26DBDC395CE8E0F96B2C099B4F2B418607435033D0471CFF047293F1068B4D238BB6BD467D8D82F2577F7A78FE78', '2B9F6D92EFA9E224F293D7004DEF25E45F0E2839277B28AD4CC68CCC67717BA2519B9A732740033B9EBBFA5793D4A94BE333CC6B64A3805610E6F2533E2B92AF', '6BA146A01B3AB7B81E81C9FFB30AC81B1BC891DB1AFCDD4386EB9A5F4A9B02B3FFA6042C914196B0E75EC344B0372CFFD3F73188721343BC458F063342EBB98B', '524A7BD2CB646A7ACFB6F62B4088839BB7697196CF820934061344CF70190A0BD691CB2E0E46B882D854C6C36946AF29B0F00C2ED7802E19424CD474C245E5DD', '5046ADC1DBA838867B2BBBFDD0C3423E58B57970B5267A90F57960924A87F1960A6A85EAA642DAC835424B5D7C8D637C00408C7A73DA672B7F498521420B6DD3', '3D4321D657903224B06051EB2FE69F0E1BD5B1E12F1976F09B39FA5ED2705228B2F384FD98EF1F221081730DA2CE1CB2FBBF4854260DEF49998B429FACECE3BA', 'F5C17634C4ABC78CD6DCE4B04D0E24BB8B7D5CF2D3A7702776B2B221B99AB0D760D119C2D2A7B95D5663A415435D3FABFE492FFEFD7388C8F47D9E160329B18F', '0543CF83E7B8BFB8E8E28515F02B4CFA8F07BE1283A125B06824D4AA9ACAF828F84E802CA41F7961FBFABBBA892F1FC19CE94AE1939CAF906C173347D4BF6396', '85531D8882578FCF9BCD90C2A24C5CA2FD6A49966F0D4A9B47E2017B21ACA0D2C2B66905BD56C7DD40A0014F44997698ED06F03EA247BE353FB1D12EC22CB658', '694A32501AF20C3A846F24207599151C629941747308CF69FC821646F3EEB975BF9D87A0946D8E28F5FEB39BE1255C5F2535AB13F69B49CE5BD44AD068D329D6', '4A2732D16513E4945E3BF846710A4D0F983F5856AD5469EAFA569811204EB8BED2057E4AF73E744EA2ECB1016912558DB129E5FC979A71E077B0E7F460FFDBCA', '986179B274230F2D5CC9F48679F50A0AB55F3D2A8EC9D3B6E78BEC32AA8D3D486F75F804F752768D016821EC933538350BA60895741E5D48F29E7D1B28C1BE29', '1080F871E39CC839E5BCC9F852F9A8F3DDC03CF7E72E9FD1D6E4A71D7E74936F58ADC646C9A9DC382FDE85C5D281C2A44A459CAF6AFA58272D7FA006152E4CB1', '5D8C1AA556FC17D6DC28D618F521AEE37FC0E1826FDBCF8D106E456FC3BCD3C76E712D23FEF3378BD2BE17B80EB5BFD884CCD89B67490B63C7BD118EAAC471D8', '8AC7790C0687F86D2D0CA82CFC9921C8CD6E6F5392594317D5EE6F3661500DE58EBD5EF6300A412C23ED1CD2748C5EADEEB9719F32758590BD4168A0259BBD70', '583B16C7F5D686420BAA33B90D6AF41B43A21ECC5B62B4F7B258FB9FEF4D0C8A1D0DE5B3B60642CD643AEC7266D4F589433B870D7F9E504373B6B8C24A6BE1D0', '63736DBB4E24DA288E552BDB3D8A68728C522DE7E77D06FC5BE87279E43FADFAC4321A2D935C4F9FFA496C901F64AC92FE8F4CA876F9126974E801983C0B1A7B', '4D6154EFBF78352538CDA06E64420FB4C99B4778E8111250F87A9B0C5E07F5FF36FEBCC52F4542C41C5F43B940052704BC825370FF3933D7925459C3FAD1A7AC', '26A4398BFFB0C0AEF9A6EC53CD3367A2D0ABF2F70097F711BBBF1E9E32FD9F1A72121691BB6A39EEB55D596EDD527934E541B4DEFB3B1426B1D1A6429804DC61', '6E6570A7CC802760730DB659A4EDE4221AC2CD944F4B0D97B0A5C8A9F2A072899E3C3FC5DAC336B53F8ACCDE81CBEECA6C5998A1471A2F91EB60E3E13620368D', 'ED68F5F49945DCD0D81DFEBE2F2FD1FCFE016807D5C64EE0377D046EFEB0A7FD9B4B9589B3DF8A14194D51DCFFBD89C8AAA072CEA2AD4E7976BDF53528EA90CC', '989A38778FC961EB2C79E70621EABFB4B22D6537F08A71359B27AF495646E304EE252A523769F66B75BC2FAF546ACB22A71B358B51221174AC0D964DA7A62821', 'E116D2D486BC802E99D5FFE83A666D5E324887A65965C7E0D90B238A4EE1DB97E28F59AED23E6F968868902D762DF06146833BE62064C4A74D7C9384DFB0C7F6', 'EF4F446491BD3788945DE1A8CE4291AB7C2A5013AB4A448C08C19E74F90949FEA8C9F25C59B37860BECFD3EF00F2E6713F15EC8AF9E6AECDF1F8E0214B87424D', 'C331A2A21695186C1EBD2C9FACDC5FA856BEDC757A50936B72577E76147373747D26BACFCE0E165F089E182CC227ADA737A0B42E51D9BDEC16FB5F8CA795B091', '49C014805DE283DDB14F9D15E359CD4A4002A54E9137997D5F22AA0D802E9C42BDCA7D56AE4E164B677E31D87D35884093D58F375D64D18693A00E1AA6E0D598', 'E72F5495AF804A0A93941422C9346AEE488463E1E17AE74E65E85F1BF5B0C40528BC27D15AD831B7B8CB371A84EA9309565536146223EDB0FCEFB65FC0C9122E', '2C2481278F62CD07726383B036775306AE6B693F199A6C700F735FE22507C9084BB91CE5F6458D3C3926514970226C563464723AA99C210B77518830576F8C0B', '2146AA8AB60C48ACFF43AE8C33C5DA4C2586F20A39F8F1308AEFB6F833B758AD7158BD5E9A386E45FEBA446F33855D393857B557FE8BA6FE52364E7A7AF3BE9B', '904F1892EC5C43C557199325FDA79CACAEE2E8F1B4A1D41B85C893D967C3209F0C58081C0C9A6083F85FD4866611DFEB490C11F3163C12F4F0579ADDA2C68100', 'D1ECFD1B7DD8E49BC005DD6549F73117DEC2E0008C3E81934B7B09C5BF922316B7B07F726B4AAA38780B00281AF470607F88B5AB67A17F23FC87E1FC860C011F', '7E0AC842735810E69B321F624906A6D6828AC65C292ED02CBAF60DD895D2CD7022CC8CACD6D4D18A6B589CBD90829E12C0194EAC3930A9F0B18DBEC2EBE419CF', '0A2CBDC97D1B676A5842DCA27A58404AF4AC09CE8BF0D4EE3C356082CA7EE203642B1502910FD30AFBCBB1EAA4264CC8EFF73F1350806A2B82660E3B1E4CB02C', '1D9BEA9A2A4C0C566C91D855CBB389C78AEC76105F79537A8CC9C7A8AC88A673757EA9F46370CA607235873EB2F43EF1C7578E9501F9908F5537055F2CE06528', '23AB3A7BA2CC3E9CBFEE0AC89AD27AD406C32A7F5BE639723BC79621D7782FA210A058FF6FB983EB61D1CF5E12095B6D669E8F852939B491A214F01A407DFB2A', 'A405DEC5087E201200212D9B99C62298C3B126681B5D607F39E9356BCFBF5FE618C53D5C31D31903D5A1D76F7EF8225D8C6DCA92DF040C6CC7CA3393F25131DC', '7BE9FDA48F4179E611C698A73CFF09FAF72869431EFEE6EAAD14DE0CB44BBF66503F752B7A8EB17083355F3CE6EB7D2806F236B25AF96A24E22B887405C20081', '19DC6AE12DE08B21B36C1EC7F353CE9E7CEF73FA4D1354C436234167F0847BC9E2B85E2F36208F773EF324E2D79E6AF1BECA4470E44B8672B47D077EFE33A1F8', '6C0E9557CF0FADF4DB740E203DF3D499F7247A472D9132B7E474420B142AE83E6CAB592F93AA096D51C04F732098FA7355622E955B459F1C6D87BAE8ABC73264', 'DD0A0B9213182C99444BB7FB2EBA5B28F521A768880BE2539706730693ED9EA462FEB4FD46B1DEB5E7D4F31A284F2803B476209B451C9DC4D6ED056D71736D64', '038EBCC2B60D7BEFE506172B841FE225D71849AF86F408EAEBB3B9D7C03D6CF0C6CC30203E7BB7B39BE6D5D0E6613689349C245B71C5F16FF8083DBE2EBF680D', 'E0841DE72B39EA1EBFA8C5FAC01AC64A1A48AF40423FABBBA9FC18BA31B8C412D73F882EF45BAA32ABD47C2E9F27A837FE72C95AFDDE0CA6754C987BD1D88918', '3A4AC70AEAA4C39FA67D80018EF7EB6509DF394B801A2B4B7421420DFA75CDA9746786391DEC6A9E7741394F65E400D92860E4195D8A6FA940F30AB962B75BDF', 'E1403027C2F55D2DC4972B35B16E9401D0A9B5E055839E650B242FB12051051F72EF760214BF436BA9DD2B0D67DAA2D55A783E782717D53966465B8C291ACBFC', '5EC97CC048A3CB5DA03093BC6D2B63CF5252ABAB6A72B24214FF885C062F58DC43C6CC05C0DC428A1A4E4B95EA84140A8883D81795416281B4AC4FD52290E0A1', 'E64C06BB828A1E41E494D4A153BA411D5B6F33B46DD0008C1E793EF0B6B12E9312CCCC321BC2161EC859BBCBB79B874DB8793DEA1B0EA1414E13185BFA7FF178', '6D55A0D1C6D689E702EC802DBA0388E19D898D9693A4CEBA31F000A4B447A50A2694C452991CC3B64F4C241518B66D6B0C70E2BE88075BC3C207CD88B5862BBF', 'EE5D694D66BB3EE0D55129C96C83116E7AF28B6838854D110CAFE9DCB530FC05EF8B97469D7FE0C864481298FBA5008C97EB2B503E90B58B1E33F8856CB132D2', '1E31651EDC2568B2FDCB50CFF0E8F2C53E0A9A76F32E5E38C023348C3733CC6D7DEA3E88DD2BA743CBBA9E133207DD57EBA95722A0197C3C23DD37E8D3BFFD1E', '6DB5955477A9BB5386C1AF03DF526496F9E64533E6C3071C8E5C44062541E91E9BB39096DA947A91BDFA5E7DE53C1E047DCF427C1DFDE94554D7458F8F0862EA', '05660148AFDDF48072B43854BDDB1D1C0571EDD3A4387262A487AD18D72E238725F8599D5B298DEC375FB463074A9F77AD93E7022B001C62DC94152E6DB3408F', 'DF452E0838104CB82540EFA412A70C507E1115EEACFE8A68D32B98D30CB396B25013F24376EC5324D9B12219AAD6FF931791E8AAF36E3B4074139053E53FD974', 'B6B4C190CCD537F7B879658FB3AB39A81347E1ECB68246DAB95648560587B8437ECB02B7825F46A9141059AE61887EC7B011C1314CBCC5741C9FAE953EAA02EC', '90C6DDA39740F839FB470F838C35D5F264A0A8664C57CBC66C431082710EE633CA4672B3B64902E7BBB7A61E9B9F4EEA251A7D8B6D5126DE6D73D3480FDEDE5D', '25581416BCC99A8C590FE9F215DEBEE0E172070961C7130EB9B3923E6D2F06FF2947657F678F0EE2F34A7E3C9F9E395D6CB0E7CE6EF235BA056F32F6815E3124', 'DF26CA83E1816B3283FE2412DBF69686EC221A1933FC15060AFAC985537CE79420AD1591CE18CF6FDE66B2295AABBDD2A87C31772E4E23299078D18D48C3FF16', '6B83E8FC9A2AD34694319EFF2972435D2FACFFB23F6E5D6B2EB7381BD9012A489912C56AB6DFCE07CA387B777496F612E63842AA294A208F5360077F37E87B1D', 'D4E72F43C75DE83DEB0526233423726503354D7112618B44C94E695D159A02B6DA4823A2C9A2BE8CF71D2C7E42108D0DB7EDBB54A640579F853E6D110E7599ED', '6A9746BEF52DCD5CBE2E455C808ED0025187E60BA58E2AB901EE5443323B652B45262AC7DFC37D0D21B81C15DFC5FA98F1C43BDC05F6AFFE70CEFF01EFFCFBA6', 'E74AFF12F2C3C6569C4BC031E6D65A3EA2E6857982E69AB07D81E46AFABB368B61F0C4262DB1AB445CD7D9C7B384E7561D29BFE729CBE6F3DB1FD5C04A1305D5', 'F58CC598FDEA5E45261B678570F64E75A64F9FAA7E268015A128EDEAF1B717EE583B3E2F6690AE31DCB515A95234D3D371148FBC14C26ECFA74E6A51F3D6E5F9', 'BF0772423BDC11A4029439ACEF8922C6C541519CE98BCE97681D1A1DA32BBF3A73F506138D494D9CC860B6AFB3584094565DB7683F6B2A2CB30E3E94430D1933', '6A7C465BC9531B9E1D75DF0E167CFA848D98EC994C43D68E651E6D782FC2C81DEC703033A44C267822BCB6A1EF31A1364AB57D29B99D1A3A3CA9E5E8D0CDFE5F', 'C4E61253D52C63B227943F42691201BF61321F7033C08888CA14D13C2587A3D97D40849F946E407DF3A569AEEE4F2AAA7EE44BB63B4D17694D31106E880F53FA', 'FC4A6C0BBF6E9F20FE5EBC966EC7B7A56102204F8CEE56799A220BB94A44DC51563F04E2975DD425F3637B8CF722743C7C907ACFDF38F95D7D36BA80C15E4917', 'BDD9BFE471648E8A116AB65D97E56F38B2D7516E0BA522DE25B284C7B29D089DC039BB653F1B08E6EA0792150CAD576ADC48890DD6956A6AA29E5175CC5E2F0A', '18EDFB05E5102DB1660D2CC6CE2078E8506BFE56BCDCAD81880D26C7F344ACE11EE77673E0415CF4EC00E14893D0447957D73F977E98CEB101A76EEF1C6565B4', '47E7E7C96BDA3D2385E50E15C6357D16C5872049F61EE62A033C341CDEE0DFAF905BD1F9FA24D1C53132159621D21D1774C2BBBF33F40E0386C4B80F3B12ED3D', 'E866B15DA9E5B18D4B3BDE250FC08A208399440F37471313C5B4006E4151B0F4464B2CD7246899935D58660C0749CD11570BB8240760A6E46BB175BE18CDAFFE', '3C01530D43156962F4A2305472EB5DC77464AE3BD88F932A2F55E72355C4C1DB1DF050C94951A1375ED6F69BBC4102EF6EA45574F4CA293123685564A1334596', '4A84147472604753A90ECB5CDC9614194FB947429B53EF773890B535E18223D04817F5E38C7064DE44F6DD0C84B4677A79B97F819CE111131BF816D11A92E18E', '6EDF7FF286DC9038E790E27B600ABADECCF74542CE91196B8EE6C4AC9308529CBD7DC65C82F82021F01863E2C08F846621E1930768E6F3590B2315C72298FBA1', 'F206F4F0EF09B90837F1D15A07C6CF4BD291D817663F9F85A0FC4341EC19910719AD571B6102A366AE848CD0F187D0DAEF912E05898B82C35213CD49A45EE8E0', '2DB5F3B0000212518614C74C73DCA3205CDA5751AA2504AD9BF9B98BE46E98143C064980DCE9A8A6372305840946717C38E244D9E1F2ECBDFF683FC1F0A8FBB5', '98E04E394B9BD572C13FCF46A965BEA43C2FC333E582AA57D5101587D194AD9AD68E43D6790A6AAE89DD9D32A68F699B9C6A0F20835CB78976D9961EA4DAFF05', '3EEABFB9888432E76A4AC77ABD24F85A65C6715B7C28880D8EBB2442B43CA10397533698450F2E4DC5A854880981E5609425C785E3B2BA14E2740DC600947857', 'FF61EBF3C2BCF802F3A3405E8BFC9CF78A41E45963CBD8A9CB65D1179DFBF7FB18F89C9F7A70A9BEEB88ADB3F9C122B0E8B7BE9E967B30807EF535D7C2830E65', 'A6AF7912278D814025FD2825A16943917461C881A8F2FF1972497A3A9F6998E349C5E375D69BC8697AE7197054083E0988198C4FC57CAB3184F98F82A07A1A1D', 'D9AD640884F40495B4255BD221F0902FF64F84E3136053D03ABEE7CA417D32A1D72F24A75CB67BC50629E102BDB2F81C0BB087E0EB5CB82FA3D67C4FA5D92450', '49EE1BFCDB996DA7444CC1EF41D1502790062E4CD54F0B22B88977ADA4476690E774B649794FE023B5DB35D6F8DC164215B946B2121912FF586A759463CB05F6', 'A3E171C1C71E0C8FB05DF6D783F5AC9C7CE0F9C3BBE653952EA048ADCE025192D5EBA4ED8CC7800BD52AFD265256ECEA887EA63725C49CF563455FF321D45E76', '169E21AD25319E522E1A1CDFE34F829B8CD9BCE19406B50ED22A1A75C388B432BDEBE050B155980E76D6B949786B2C89D1E2C5AB66D83D28EEBC14EE8F44A49D', '1C5C8D28E1B0088005604E2D0325A521449955F05F8544DA497C875377E9DC73E4550F04DBB8A2D370AF70036522B43FCEC2B78B5CD01875A384A40EAAD519FD', '77DDD3A542E530FD047B8977C657BA6CE72F1492E360B2B2212CD264E75EC03882E4FF0525517AB4207D14C70C2259BA88D4D335EE0E7E20543D22102AB1788C', '2BE2E788C8A8ADEAA9C89A7F78904CACEA6E39297D75E0573A73C756234534D6627AB4156B48A6657B29AB8BEB73334040AD39EAD81446BB09C70704EC707952', '0E67910BCF0F9CCDE5464C63B9C850A12A759227D16B040D98986D54253F9F34322318E56B8FEB86C5FB2270ED87F31252F7F68493EE759743909BD75E4BB544', 'E94480D20B6665599C4ED1BC3FC6949C9BE332FD91A14CEF14B3E263AB1000666E706B51869BC93B4F479BB6389351674E707E79562020510C1B6DFE4B90CC51', '39C8EF9B28A0A103843A97F402AE3C35EB25425147375B0D5461DD327EA3A7BF7131F1D0BC656E51C0DB203B111C63097DC5367F0647FAE10D729822F59AB80C', '48524FF46D1C5BF4C6A5560A2E13AAE75B8E096CB912A7A0AA2D5D59B8667C0889453E34070D74FA6CE6E8294E3E703C4AA3B58B351086449DE5FA7F1D07D8EF', '0BB9C76171FFA588DF5E07525C8CC0AFC532CEC39F97BB529AA07FCD3FA888D3533582FD5A2BA6F93925D90FAC300CE91ADCE0783B79CCEF2F52FD279626F482', '8488DEA55B0F962C4F16715AD3195FE4EF6ED61D4EC95BBDDC1F1A9ABBC3C1AEF167F960807BEF59DEC11C4CB498DF05440CEEB37174F0DDD43D567B504D55AD', 'C2E210F2674A648D9B58683E651F8FCA5CE4270C0489773D8E4FFAECD46B22B1D5273697F45275A7C441C9E4CA91A39BDB3E3B7EB74CBDB85266EEF8F30AC860', 'C106C47AD6EB79CD2290681CB04CB183EFFBD0B49402151385B2D07BE966E2D50BC9DB78E00BF30BB567CCDD3A1C7847260C94173BA215A0FEABB0EDEB643FF0', 'BEF13FA741340CB7C1174406F76F9C65445C76EC091E47DAA8537B5F769AD2231347C61144CE8F6E4CB16FD5CD27BB169930C3F8C3B5B9E24E6609491FBBD4E3', '4F3F095D015BE4A7A7CC0B8C04DA4AA09E74351E3A97651F744C23716EBD9B3E822E5077A01BAA5CC0ED45B9249E88AB343D4333539DF21ED229DA6F4A514E0F', 'BD0C9C169AFB486930933E393F0839380B97E5F0AC88892C7D36B2CCB2E0A31C9B7B8F09B2D9A664E9BD93785E0050959C54CB064050B8DAEB4D1DB1CBFEFDE2', 'BB78C9783303A24DBE8E5FCB112D9A4872D8521F30662770C6A4182CC6FD78BA865C467A5AE3D4D6348A5011AEB6DF95B46B6C99CF2BCED2BEEFEABA04EE458C', 'E46B5C1865B53513BB10BE9E3A2C2A54EE9E88F83E8802E85E728A2364AB649ECD4AF605B41D7583688F8A78D1B49E36F1EF5B8824AB89885578EED8EBDBFD15', 'D4BF12247A7396FFC0B16BD3B0094EB7CD3CD8558D961F77D9F1898DCF04E8559715F78CF6D80579C8DC2318631D1954A8A0599269AC5A4EA9B1331A3AB9A487', '876FEE26A8DC66D652341B4951D4A96F4F2652803231ED5EC625BBE0D5C49EA70941F5299D775A1ACE2291FC33B26016F73C81ACDE83B3C495BE55B6916890A1')
 
# RadioGatun
# from: http://radiogatun.noekeon.org/
# messages are raw string, hashes are in hex notation
radiogatun32 = {'hash34': '5DD047238DD574B45621DFEDAFADD6BCB4594B6E0551E78CA2B62BCBD975D429', 'msg35': 'August 24-25, 2006', 'hash33': '4884DACCBDA87F1E02814152F0224DAB291B49FFD86516A30EA6C9D546730ECF', 'msg14': '12345', 'msg31': '1234567890123456789012', 'hash18': 'D77629174F56D8451F73CBE80EC7A20EF2DD65C46A1480CD004CBAA96F3FA1FD', 'hash29': '8BD3D5953ED234F7A0051A993776630A9722978D06240EECC66E05A0B2CB60C7', 'msg19': '1234567890', 'hash21': '15EDA58156CA398AF49CBE9C9E62BF036A66B303ACB0043FB57ECADF9E9C8EDA', 'hash32': '4CAE588C3F3C08DF85564379332309EA5F73A51405CD4408C9DBFFF1615EF297', 'hash15': '862B75D2E8E7F08F93812168502AF97BCE530C66688D4372A08EEA0951B5024A', 'hash14': 'B333C8413087FA49882BBD4F76A9223C4AA633A252514852C3F7C0C5F8F4D87B', 'hash17': 'E69E29BA139C20846116D8AD406E6197F1701D8243CC53BB86F2B72C62320A39', 'hash16': '90B7061A244CE7FBA80F9813787CB90EC3FBB3398AEE740AF1C0D44BC5282B73', 'hash11': 'A7FDB34FD5D85D564A62C0B1B1B60CFA3D7A0C778231C95CDCD9BD293CCA16C6', 'hash10': 'D4D08F6612F8EB58A855B2F5AABFC504E2972BA829DA94EDD960193D18BAD8D1', 'hash13': '9EBDD24F469993796C4AAC6A821735A65A3CDEF8A359944CE71F34E7A08E1182', 'hash12': '57364D849286C7B3E98F3FC898094F7DC1675BA881A620B75D70F39631A4AA5B', 'hash37': '4311D3CDC46EFE38FDB5C3023A160C3069B26A2AF0CE0CCAAFFA3F3C61629AD6', 'hash36': '041666388EF9655D48996A66DADA1193D6646012A7B25A24FB10E6075CF0FC54', 'hash35': '277C1598E324185706F8F3EA72B7DC8FBE361EA02DBB0A35AFC7F0E088ACF2F5', 'msg30': '123456789012345678901', 'hash19': '4F88759143CD9D11F6DE8DA4D3724C36C745223A5CFB7AD0E74DA87C80A43326', 'msg15': '123456', 'hash31': 'F769558AF4FB0ACB6643B893D3595C2E5B110C60256D1CEB672EB33999EF0887', 'hash30': '381957046BEC1DFC08EAA0B2818D9FA07BCF78386C43AA41C069B5CF33E4F9AB', 'msg34': 'SECOND CRYPTOGRAPHIC HASH WORKSHOP', 'msg16': '1234567', 'msg28': '1234567890123456789', 'msg29': '12345678901234567890', 'msg24': '123456789012345', 'msg11': '12', 'msg26': '12345678901234567', 'msg27': '123456789012345678', 'msg20': '12345678901', 'msg21': '123456789012', 'msg22': '1234567890123', 'msg10': '9', 'msg5': '4', 'msg4': '3', 'msg7': '6', 'msg6': '5', 'msg1': '0', 'msg0': '', 'msg3': '2', 'msg2': '1', 'msg37': 'In response to the SHA-1 vulnerability that was announced in Feb. 2005, NIST held a Cryptographic Hash Workshop on Oct. 31-Nov. 1, 2005 to solicit public input on its cryptographic hash function policy and standards. NIST continues to recommend a transition from SHA-1 to the larger approved hash functions (SHA-224, SHA-256, SHA-384, and SHA-512). In response to the workshop, NIST has also decided that it would be prudent in the long-term to develop an additional hash function through a public competition, similar to the development process for the block cipher in the Advanced Encryption Standard (AES).', 'msg12': '123', 'msg9': '8', 'msg8': '7', 'msg32': '12345678901234567890123', 'msg33': '123456789012345678901234', 'msg25': '1234567890123456', 'hash20': '5FC6C16C29CDD2EF78EE4F3C864C1942A052C110FD5A9711FE9BCF953A2D2D5B', 'msg13': '1234', 'hash22': '99F13E01DBF89E6BBF60C87E99F4F18C851D3385D9B5A1678C705E8F31F70B84', 'hash23': '0AC434523B00F5C3D1D2AEEDBAE851D3EEAF3D76963CFD70A8B1D875638C8CD4', 'hash24': '0EC6EAE7879543772B64F320BC5056C81ACE91AEA20F360CEFA57272E2C07197', 'hash25': '59612324F3F42D3096E69125D2733B86143AE668AE9ED561AD785E0EAC8DBA25', 'hash26': 'D52161B6BB583955B1ABB5781D2044BE8F4174904241533973C66B87880EDB53', 'hash27': 'E42EA26B8B696541CFEA557C47886ED41440A04EF8CCC055CEB6583F6ACF6015', 'hash28': '687BDEC54F854303E48300A52C9099E3153F481CE34E12CDC178D841C0926B51', 'msg17': '12345678', 'msg36': 'Santa Barbara, California', 'msg18': '123456789', 'hash5': '2D438E83A3D99929F44A1B0AB5A994EB4ABDFE11F9E72D62DE925BF120CAFCCD', 'hash4': 'E1D20A1B67028A7C102CF77B444E0F4D8489F95506C76E4F27CE43D4958810AD', 'hash7': '904573304A5BC7BA040F8DEF9EECA4138F7DDD7DA30E4B8FB97B7F6E06076BED', 'hash6': '8C3C9529C6CC4D266760670F38C7470D6ABA5A0905170A3692AE87E4ABF291FB', 'hash1': 'AF0D3F51B98E90EEEBAE86DD0B304A4003AC5F755FA2CAC2B6866A0A91C5C752', 'hash0': 'F30028B54AFAB6B3E55355D277711109A19BEDA7091067E9A492FB5ED9F20117', 'hash3': '070182313AB302CFC82459786F4A30EC66260C6676495CE86E72B3BE7C60F7AD', 'hash2': '896C580EF77A68C36B040DCD5A650C09B8B5D915ECE298AD0210A21ED5811C95', 'msg23': '12345678901234', 'hash9': '54E7013E72D94B31324D4878F91AE19A7085F20EFE9DAAB96A1FE559C78AE825', 'hash8': 'E7195ED9189C0169C90AFFEEFCF8810627DB1607F394FB13C7B43D06C74B1D4B'}
radiogatun64 = {'hash34': '4B9A38E4A968A2096F70A896DCAD202BC1D2D29B4470227F739BEA973233B43F', 'msg35': 'August 24-25, 2006', 'hash33': 'EE7A689B4548FA98D83AB6B71432D4327AC172E3AD1302B0D5235D675B8D4952', 'msg14': '12345', 'msg31': '1234567890123456789012', 'hash18': '76A565017A42B258F5C8C9D2D9FD4C7347947A659ED142FF61C1BEA592F103C5', 'hash29': '073ED06E210785942E619BA6BE2C00D4E8A8C991AAD67FEA3ED5E75A3A1CA534', 'msg19': '1234567890', 'hash21': '54877BD9BA9DCC929B152EFD72F46AFC6A772A84FCEDA7ED85398932B185D5A4', 'hash32': '540D61172733EF9A691C487E3739B49DF4406861D0F0AA8C373A56D5A81CBAC9', 'hash15': '1A41026D8183CB13B39819ACD5281617A25BE557C9C09E939F07EEC72347CE34', 'hash14': 'CE8CEEA40E4FDA63EB2453E2CFFF0C9C68E969BFF13757987B0FF9B242394FC7', 'hash17': '4C92EE54656958C6017A7C780E569695F6C354510537AC87206EE887B1E8F258', 'hash16': '89C6A058B9E8A2C7176A429E941BBEE5F214A9B0603420562991CBF2751CB817', 'hash11': 'BA12168F91F5C124F8AE3908815DC7F3FBF6BCF6E3C66BB8507B16B9B269541E', 'hash10': 'E2F59B35CB58EFE2200D9544A0BA5FC0659F6019D3EDD4E94A1BB0363166AFD9', 'hash13': '733E2B49A53FB166B6F3BD341919578B8C931880F8B8BD7C0FBBEE1A538E7307', 'hash12': '9719B972D31893EA2B24BD4AC88ACBA598AEFE75DD596692BDA08414080778C4', 'hash37': '2C9EC1EFC5D2FEEFFC2817CD571F394328111DB8068FC79E2FB84A42416BF5D3', 'hash36': '0D08DAF2354FA95AAA5B6A50F514384ECDD35940252E0631002E600E13CD285F', 'hash35': '0950DF1B217D3079CAF7D2F5A7F91D3FEBF1A41C4887297B828E36FEB1998534', 'msg30': '123456789012345678901', 'hash19': '93B2D9E81645DDCD588EDCB8EB0E18160C2CBF891760CB831D88C3D81F218061', 'msg15': '123456', 'hash31': '20E64EC450D4FFE67138850E0F4AFE9C7805AB0F1E0B191DF6E57A5555DA6676', 'hash30': '4B71AF0C9D20CF9E827598592835B58235001D65BAA3779136BC45C8C7B26859', 'msg34': 'SECOND CRYPTOGRAPHIC HASH WORKSHOP', 'msg16': '1234567', 'msg28': '1234567890123456789', 'msg29': '12345678901234567890', 'msg24': '123456789012345', 'msg11': '12', 'msg26': '12345678901234567', 'msg27': '123456789012345678', 'msg20': '12345678901', 'msg21': '123456789012', 'msg22': '1234567890123', 'msg10': '9', 'msg5': '4', 'msg4': '3', 'msg7': '6', 'msg6': '5', 'msg1': '0', 'msg0': '', 'msg3': '2', 'msg2': '1', 'msg37': 'In response to the SHA-1 vulnerability that was announced in Feb. 2005, NIST held a Cryptographic Hash Workshop on Oct. 31-Nov. 1, 2005 to solicit public input on its cryptographic hash function policy and standards. NIST continues to recommend a transition from SHA-1 to the larger approved hash functions (SHA-224, SHA-256, SHA-384, and SHA-512). In response to the workshop, NIST has also decided that it would be prudent in the long-term to develop an additional hash function through a public competition, similar to the development process for the block cipher in the Advanced Encryption Standard (AES).', 'msg12': '123', 'msg9': '8', 'msg8': '7', 'msg32': '12345678901234567890123', 'msg33': '123456789012345678901234', 'msg25': '1234567890123456', 'hash20': '09C7288E06FC1040C330962737E95887DC6D8BC2985D04A5CAC122BE2689F26C', 'msg13': '1234', 'hash22': '8DA9DC13C922E28DE1D2AC136904B18B8CA5C9332C89982D9FAED2B00C1D0AF9', 'hash23': '64421D3084602E7388679364D5767AA5381F54ABD92CDBA4F05DAD06227F55AF', 'hash24': 'FDE56263C4A79F19A7EB663D1BB427243A6AD3522EC31FC00D81775EB6891978', 'hash25': 'CAAEC14B5B4A7960D6854709770E3071D635D60224F58AA385867E549EF4CC42', 'hash26': 'A0C5AC2493B71A5E9A4D41DD1854DAC0383193BAE0B5E7CA035F86AD052F46AA', 'hash27': '7898EE3F72838E94336E3DE2AFB4C9A7881D395B21ED74473186D919C78A8B88', 'hash28': 'F0D6C1B2EFC3D88C52B30DDF46920A22008F07FC4FFC9600FDDF1650FAF3FCB9', 'msg17': '12345678', 'msg36': 'Santa Barbara, California', 'msg18': '123456789', 'hash5': '05B7B2D2F2C0D48415E292325AD0901009F12EF1F9581A7A19C422795CF36459', 'hash4': '449B69EF4ACA0D081B6B2CE9C8BD22BE30BC1CAA130FB0714C8621E42FFA631D', 'hash7': 'ED37ECED317B65B676F72F88CEA918B9B878C3F245E79D0C2D35D86C4DEE5A8F', 'hash6': '95A02B2899296E69988B11D47B4B9FBA51AF22A09A854523924E8DFFE0EC8922', 'hash1': '5DB6B188AFEF88AD8D2E426105ACFFCD42EE439CC26275D11F87B530DE94D066', 'hash0': '64A9A7FA139905B57BDAB35D33AA216370D5EAE13E77BFCDD85513408311A584', 'hash3': '66E36CE1926EC1F7457B670D7B68BD819B2D546A75E5CDFD2691CB5F3DC2818A', 'hash2': '3A3D7A7B79D1EC5A4DB4DC032B685574F7CA7517105F1634B61A34AA2575FCD3', 'msg23': '12345678901234', 'hash9': '7338658BFD49605F1EBB186E7E1EC3E75CF672655BCCE499CB8B3952B448B0B4', 'hash8': '8862FC05C7E23677904020462809A1F2784E117C349AD1D0D8CB0F433021D75C'}
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/padding.py
0,0 → 1,247
# =============================================================================
# Copyright (c) 2008 Christophe Oosterlynck <christophe.oosterlynck_AT_gmail.com>
# & NXP ( Philippe Teuwen <philippe.teuwen_AT_nxp.com> )
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# =============================================================================
 
"""Module for padding functions
 
padding info here: http://en.wikipedia.org/wiki/Padding_(cryptography)
"""
import random
 
PAD = 0
UNPAD = 1
 
def bitPadding (padData, direction, length=None):
"""Pad a string using bitPadding
 
padData = raw string to pad/unpad
direction = PAD or UNPAD
length = amount of bytes the padded string should be a multiple of
(length variable is not used when unpadding)
returns: (un)padded raw string
A new block full of padding will be added when padding data that is
already a multiple of the length.
Example:
=========
>>> import padding
 
>>> padding.bitPadding('test', padding.PAD, 8)
'test\\x80\\x00\\x00\\x00'
>>> padding.bitPadding(_,padding.UNPAD)
'test'"""
if direction == PAD:
if length == None:
raise ValueError,"Supply a valid length"
return __bitPadding(padData, length)
elif direction == UNPAD:
return __bitPadding_unpad(padData)
else:
raise ValueError,"Supply a valid direction"
 
def __bitPadding (toPad,length):
padded = toPad + '\x80' + '\x00'*(length - len(toPad)%length -1)
return padded
 
def __bitPadding_unpad (padded):
if padded.rstrip('\x00')[-1] == '\x80':
return padded.rstrip('\x00')[:-1]
else:
return padded
 
def zerosPadding (padData, direction, length=None):
"""Pad a string using zerosPadding
 
padData = raw string to pad/unpad
direction = PAD or UNPAD
beware: padding and unpadding a string ending in 0's
will remove those 0's too
length = amount of bytes the padded string should be a multiple of
(length variable is not used when unpadding)
returns: (un)padded raw string
No padding will be added when padding data that is already a
multiple of the given length.
Example:
=========
>>> import padding
 
>>> padding.zerosPadding('12345678',padding.PAD,16)
'12345678\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'
>>> padding.zerosPadding(_,padding.UNPAD)
'12345678'"""
if direction == PAD:
if length == None:
raise ValueError,"Supply a valid length"
return __zerosPadding(padData, length)
elif direction == UNPAD:
return __zerosPadding_unpad(padData)
else:
raise ValueError,"Supply a valid direction"
 
def __zerosPadding (toPad, length):
padLength = (length - len(toPad))%length
return toPad + '\x00'*padLength
 
def __zerosPadding_unpad (padded ):
return padded.rstrip('\x00')
 
def PKCS7(padData, direction, length=None):
"""Pad a string using PKCS7
 
padData = raw string to pad/unpad
direction = PAD or UNPAD
length = amount of bytes the padded string should be a multiple of
(length variable is not used when unpadding)
returns: (un)padded raw string
A new block full of padding will be added when padding data that is
already a multiple of the given length.
Example:
=========
>>> import padding
 
>>> padding.PKCS7('12345678',padding.PAD,16)
'12345678\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08'
>>> padding.PKCS7(_,padding.UNPAD)
'12345678'"""
if direction == PAD:
if length == None:
raise ValueError,"Supply a valid length"
return __PKCS7(padData, length)
elif direction == UNPAD:
return __PKCS7_unpad(padData)
else:
raise ValueError,"Supply a valid direction"
 
 
def __PKCS7 (toPad, length):
amount = length - len(toPad)%length
pattern = chr(amount)
pad = pattern*amount
return toPad + pad
 
def __PKCS7_unpad (padded):
pattern = padded[-1]
length = ord(pattern)
#check if the bytes to be removed are all the same pattern
if padded.endswith(pattern*length):
return padded[:-length]
else:
return padded
print 'error: padding pattern not recognized'
 
def ANSI_X923 (padData, direction, length=None):
"""Pad a string using ANSI_X923
 
padData = raw string to pad/unpad
direction = PAD or UNPAD
length = amount of bytes the padded string should be a multiple of
(length variable is not used when unpadding)
returns: (un)padded raw string
A new block full of padding will be added when padding data that is
already a multiple of the given length.
Example:
=========
>>> import padding
>>> padding.ANSI_X923('12345678',padding.PAD,16)
'12345678\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x08'
>>> padding.ANSI_X923(_,padding.UNPAD)
'12345678'"""
if direction == PAD:
if length == None:
raise ValueError,"Supply a valid length"
return __ANSI_X923(padData, length)
elif direction == UNPAD:
return __ANSI_X923_unpad(padData)
else:
raise ValueError,"Supply a valid direction"
 
def __ANSI_X923 (toPad, length):
bytesToPad = length - len(toPad)%length
trail = chr(bytesToPad)
pattern = '\x00'*(bytesToPad -1) + trail
return toPad + pattern
 
def __ANSI_X923_unpad (padded):
length =ord(padded[-1])
#check if the bytes to be removed are all zero
if padded.count('\x00',-length,-1) == length - 1:
return padded[:-length]
else:
print 'error: padding pattern not recognized %s' % padded.count('\x00',-length,-1)
return padded
 
def ISO_10126 (padData, direction, length=None):
"""Pad a string using ISO_10126
 
padData = raw string to pad/unpad
direction = PAD or UNPAD
length = amount of bytes the padded string should be a multiple of
(length variable is not used when unpadding)
returns: (un)padded raw string
A new block full of padding will be added when padding data that is
already a multiple of the given length.
Example:
=========
>>> import padding
 
>>> padded = padding.ISO_10126('12345678',padding.PAD,16)
>>> padding.ISO_10126(padded,padding.UNPAD)
'12345678'"""
if direction == PAD:
if length == None:
raise ValueError,"Supply a valid length"
return __ISO_10126(padData, length)
elif direction == UNPAD:
return __ISO_10126_unpad(padData)
else:
raise ValueError,"Supply a valid direction"
 
def __ISO_10126 (toPad, length):
bytesToPad = length - len(toPad)%length
randomPattern = ''.join(chr(random.randint(0,255)) for x in range(0,bytesToPad-1))
return toPad + randomPattern + chr(bytesToPad)
 
def __ISO_10126_unpad (padded):
return padded[0:len(padded)-ord(padded[-1])]
 
def _test():
import doctest
doctest.testmod()
 
if __name__ == "__main__":
_test()
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/RFC1751.py
0,0 → 1,0
from Crypto.Util.RFC1751 import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/number.py
0,0 → 1,0
from Crypto.Util.number import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/util.py
0,0 → 1,55
def number2string(i):
"""Convert a number to a string
 
Input: long or integer
Output: string (big-endian)
"""
s=hex(i)[2:].rstrip('L')
if len(s) % 2:
s = '0' + s
return s.decode('hex')
 
def number2string_N(i, N):
"""Convert a number to a string of fixed size
 
i: long or integer
N: length of string
Output: string (big-endian)
"""
s = '%0*x' % (N*2, i)
return s.decode('hex')
 
def string2number(i):
""" Convert a string to a number
 
Input: string (big-endian)
Output: long or integer
"""
return int(i.encode('hex'),16)
 
def xorstring(a,b):
"""XOR two strings of same length
 
For more complex cases, see CryptoPlus.Cipher.XOR"""
assert len(a) == len(b)
return number2string_N(string2number(a)^string2number(b), len(a))
 
class Counter(str):
#found here: http://www.lag.net/pipermail/paramiko/2008-February.txt
"""Necessary for CTR chaining mode
 
Initializing a counter object (ctr = Counter('xxx'), gives a value to the counter object.
Everytime the object is called ( ctr() ) it returns the current value and increments it by 1.
Input/output is a raw string.
 
Counter value is big endian"""
def __init__(self, initial_ctr):
if not isinstance(initial_ctr, str):
raise TypeError("nonce must be str")
self.c = int(initial_ctr.encode('hex'), 16)
def __call__(self):
# This might be slow, but it works as a demonstration
ctr = ("%032x" % (self.c,)).decode('hex')
self.c += 1
return ctr
 
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/randpool.py
0,0 → 1,0
from Crypto.Util.randpool import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/__init__.py
0,0 → 1,17
"""Util initialization
 
makes the Util modules from Crypto AND CryptoPlus available here
"""
#import Crypto
#from Crypto.Util import number, randpool, RFC1751
import padding, util, python_compat, number, randpool, RFC1751
 
from pkg_resources import parse_version
 
__all__ = ["padding","util","number","randpool","RFC1751","python_compat"]
 
#if parse_version(Crypto.__version__) > parse_version("2.0.1"):
# from Crypto.Util import python_compat
# __all__.append("python_compat")
 
#del Crypto
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/Util/python_compat.py
0,0 → 1,6
from pkg_resources import parse_version
import Crypto
 
if parse_version(Crypto.__version__) > parse_version("2.0.1"):
del Crypto
from Crypto.Util.python_compat import *
/relevation/branches/1.1/python-cryptoplus/src/CryptoPlus/PublicKey.py
0,0 → 1,11
"""Imports Crypto PublicKey
 
Now you can do:
>>> from CryptoPlus.PublicKey import *
OR:
>>> from CryptoPlus.PublicKey import RSA
but not:
>>> import CryptoPlus.PublicKey.RSA
"""
 
from Crypto.PublicKey import *
/relevation/branches/1.1/README.Windows
0,0 → 1,6
 
This program requires either PyCrypto or PyCryptoPlus to be installed.
 
Included in this directory is PyCryptoPlus, which can be installed easily
by going into the 'python-cryptoplus' directory and running setup.py
 
/relevation/branches/1.1/CHANGELOG
1,5 → 1,11
$Date$
 
1.1 (2011-07-05):
- Support PyCryptoPlus if PyCrypto is not available. Enhances
cross-platform support.
- Print an error message if the decryption produced wrong data
(normally caused by a bad password)
 
1.0 (2011-06-30):
- First public release
 
/relevation/branches/1.1/relevation.py
48,10 → 48,20
import sys
import zlib
 
# Import PyCrypto if present, fall back to PyCryptoPlus otherwise
try:
from Crypto.Cipher import AES
except ImportError:
try:
from CryptoPlus.Cipher import AES
except ImportError:
sys.stderr.write('Error: Either PyCrypto or PyCryptoPlus must be installed\n')
raise
 
__author__ = 'Toni Corvera'
__date__ = '$Date$'
__revision__ = '$Rev$'
__version_info__ = ( 1, 0 ) #, 0 )
__version_info__ = ( 1, 1 ) #, 0 )
__version__ = '.'.join(map(str, __version_info__))
RELEASE=True
 
307,7 → 317,7
sys.stderr.write('Password is required\n')
sys.exit(os.EX_USAGE)
# ---------- PASSWORDS FILE DECRYPTION ---------- #
# ---------- PASSWORDS FILE DECRYPTION AND DECOMPRESSION ---------- #
f = None
try:
if not os.access(datafile, os.R_OK):
357,6 → 367,9
if __name__ == '__main__':
try:
main()
except zlib.error:
sys.stderr.write('Failed to decompress decrypted data. Wrong password?\n')
sys.exit(os.EX_DATAERR)
except libxml2.parserError as e:
sys.stderr.write('XML parsing error\n')
if not RELEASE:
/relevation/branches/1.1
Property changes:
Modified: svn:mergeinfo
Merged /relevation/branches/1.1-PyCryptoPlus:r168