/relevation/branches/1.1-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/python-cryptoplus/src/CryptoPlus/SelfTest/..new |
---|
--- st_common.py (nonexistent) |
+++ st_common.py (revision 168) |
@@ -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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/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-PyCryptoPlus/python-cryptoplus/src/CryptoPlus/SelfTest/Random/OSRNG.new |
---|
--- Random/test_rpoolcompat.py (nonexistent) |
+++ Random/test_rpoolcompat.py (revision 168) |
@@ -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-PyCryptoPlus/python-cryptoplus/src/CryptoPlus/SelfTest/Random/Fortuna.new |
---|
--- Random/__init__.py (nonexistent) |
+++ Random/__init__.py (revision 168) |
@@ -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-PyCryptoPlus/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: |