Updated DB_Helper by adding firebase methods.
This commit is contained in:
parent
485cc3bbba
commit
c82121d036
1810 changed files with 537281 additions and 1 deletions
60
venv/Lib/site-packages/Crypto/SelfTest/Hash/__init__.py
Normal file
60
venv/Lib/site-packages/Crypto/SelfTest/Hash/__init__.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/__init__.py: Self-test for hash modules
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test for hash modules"""
|
||||
|
||||
__revision__ = "$Id$"
|
||||
|
||||
def get_tests(config={}):
|
||||
tests = []
|
||||
from Crypto.SelfTest.Hash import test_HMAC; tests += test_HMAC.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_CMAC; tests += test_CMAC.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_MD2; tests += test_MD2.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_MD4; tests += test_MD4.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_MD5; tests += test_MD5.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_RIPEMD160; tests += test_RIPEMD160.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA1; tests += test_SHA1.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA256; tests += test_SHA256.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA3_224; tests += test_SHA3_224.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA3_256; tests += test_SHA3_256.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA3_384; tests += test_SHA3_384.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA3_512; tests += test_SHA3_512.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_keccak; tests += test_keccak.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHAKE; tests += test_SHAKE.get_tests(config=config)
|
||||
try:
|
||||
from Crypto.SelfTest.Hash import test_SHA224; tests += test_SHA224.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA384; tests += test_SHA384.get_tests(config=config)
|
||||
from Crypto.SelfTest.Hash import test_SHA512; tests += test_SHA512.get_tests(config=config)
|
||||
except ImportError:
|
||||
import sys
|
||||
sys.stderr.write("SelfTest: warning: not testing SHA224/SHA384/SHA512 modules (not available)\n")
|
||||
from Crypto.SelfTest.Hash import test_BLAKE2; tests += test_BLAKE2.get_tests(config=config)
|
||||
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:
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
234
venv/Lib/site-packages/Crypto/SelfTest/Hash/common.py
Normal file
234
venv/Lib/site-packages/Crypto/SelfTest/Hash/common.py
Normal file
|
@ -0,0 +1,234 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/common.py: Common code for Crypto.SelfTest.Hash
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-testing for PyCrypto hash modules"""
|
||||
|
||||
import sys
|
||||
import unittest
|
||||
import binascii
|
||||
import Crypto.Hash
|
||||
from Crypto.Util.py3compat import b, tobytes
|
||||
from Crypto.Util.strxor import strxor_c
|
||||
|
||||
class HashDigestSizeSelfTest(unittest.TestCase):
|
||||
|
||||
def __init__(self, hashmod, description, expected):
|
||||
unittest.TestCase.__init__(self)
|
||||
self.hashmod = hashmod
|
||||
self.expected = expected
|
||||
self.description = description
|
||||
|
||||
def shortDescription(self):
|
||||
return self.description
|
||||
|
||||
def runTest(self):
|
||||
self.assertTrue(hasattr(self.hashmod, "digest_size"))
|
||||
self.assertEqual(self.hashmod.digest_size, self.expected)
|
||||
h = self.hashmod.new()
|
||||
self.assertTrue(hasattr(h, "digest_size"))
|
||||
self.assertEqual(h.digest_size, self.expected)
|
||||
|
||||
|
||||
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())
|
||||
|
||||
# PY3K: hexdigest() should return str(), and digest() bytes
|
||||
self.assertEqual(self.expected, out1) # h = .new(); h.update(data); h.digest()
|
||||
if sys.version_info[0] == 2:
|
||||
self.assertEqual(self.expected, out2) # h = .new(); h.update(data); h.hexdigest()
|
||||
self.assertEqual(self.expected, out3) # h = .new(data); h.hexdigest()
|
||||
else:
|
||||
self.assertEqual(self.expected.decode(), out2) # h = .new(); h.update(data); h.hexdigest()
|
||||
self.assertEqual(self.expected.decode(), out3) # h = .new(data); h.hexdigest()
|
||||
self.assertEqual(self.expected, out4) # h = .new(data); h.digest()
|
||||
|
||||
# Verify that the .new() method produces a fresh hash object, except
|
||||
# for MD5 and SHA1, which are hashlib objects. (But test any .new()
|
||||
# method that does exist.)
|
||||
if self.hashmod.__name__ not in ('Crypto.Hash.MD5', 'Crypto.Hash.SHA1') or hasattr(h, 'new'):
|
||||
h2 = h.new()
|
||||
h2.update(self.input)
|
||||
out5 = binascii.b2a_hex(h2.digest())
|
||||
self.assertEqual(self.expected, out5)
|
||||
|
||||
class HashTestOID(unittest.TestCase):
|
||||
def __init__(self, hashmod, oid):
|
||||
unittest.TestCase.__init__(self)
|
||||
self.hashmod = hashmod
|
||||
self.oid = oid
|
||||
|
||||
def runTest(self):
|
||||
h = self.hashmod.new()
|
||||
self.assertEqual(h.oid, self.oid)
|
||||
|
||||
class HashDocStringTest(unittest.TestCase):
|
||||
def __init__(self, hashmod):
|
||||
unittest.TestCase.__init__(self)
|
||||
self.hashmod = hashmod
|
||||
|
||||
def runTest(self):
|
||||
docstring = self.hashmod.__doc__
|
||||
self.assertTrue(hasattr(self.hashmod, '__doc__'))
|
||||
self.assertTrue(isinstance(self.hashmod.__doc__, str))
|
||||
|
||||
class GenericHashConstructorTest(unittest.TestCase):
|
||||
def __init__(self, hashmod):
|
||||
unittest.TestCase.__init__(self)
|
||||
self.hashmod = hashmod
|
||||
|
||||
def runTest(self):
|
||||
obj1 = self.hashmod.new("foo")
|
||||
obj2 = self.hashmod.new()
|
||||
obj3 = Crypto.Hash.new(obj1.name, "foo")
|
||||
obj4 = Crypto.Hash.new(obj1.name)
|
||||
obj5 = Crypto.Hash.new(obj1, "foo")
|
||||
obj6 = Crypto.Hash.new(obj1)
|
||||
self.assertTrue(isinstance(self.hashmod, obj1))
|
||||
self.assertTrue(isinstance(self.hashmod, obj2))
|
||||
self.assertTrue(isinstance(self.hashmod, obj3))
|
||||
self.assertTrue(isinstance(self.hashmod, obj4))
|
||||
self.assertTrue(isinstance(self.hashmod, obj5))
|
||||
self.assertTrue(isinstance(self.hashmod, obj6))
|
||||
|
||||
class MACSelfTest(unittest.TestCase):
|
||||
|
||||
def __init__(self, module, description, result, input, key, params):
|
||||
unittest.TestCase.__init__(self)
|
||||
self.module = module
|
||||
self.result = result
|
||||
self.input = input
|
||||
self.key = key
|
||||
self.params = params
|
||||
self.description = description
|
||||
|
||||
def shortDescription(self):
|
||||
return self.description
|
||||
|
||||
def runTest(self):
|
||||
key = binascii.a2b_hex(b(self.key))
|
||||
data = binascii.a2b_hex(b(self.input))
|
||||
|
||||
# Strip whitespace from the expected string (which should be in lowercase-hex)
|
||||
expected = b("".join(self.result.split()))
|
||||
|
||||
h = self.module.new(key, **self.params)
|
||||
h.update(data)
|
||||
out1_bin = h.digest()
|
||||
out1 = binascii.b2a_hex(h.digest())
|
||||
out2 = h.hexdigest()
|
||||
|
||||
# Verify that correct MAC does not raise any exception
|
||||
h.hexverify(out1)
|
||||
h.verify(out1_bin)
|
||||
|
||||
# Verify that incorrect MAC does raise ValueError exception
|
||||
wrong_mac = strxor_c(out1_bin, 255)
|
||||
self.assertRaises(ValueError, h.verify, wrong_mac)
|
||||
self.assertRaises(ValueError, h.hexverify, "4556")
|
||||
|
||||
h = self.module.new(key, data, **self.params)
|
||||
|
||||
out3 = h.hexdigest()
|
||||
out4 = binascii.b2a_hex(h.digest())
|
||||
|
||||
# Test .copy()
|
||||
h2 = h.copy()
|
||||
h.update(b("blah blah blah")) # Corrupt the original hash object
|
||||
out5 = binascii.b2a_hex(h2.digest()) # The copied hash object should return the correct result
|
||||
|
||||
# PY3K: Check that hexdigest() returns str and digest() returns bytes
|
||||
if sys.version_info[0] > 2:
|
||||
self.assertTrue(isinstance(h.digest(), type(b(""))))
|
||||
self.assertTrue(isinstance(h.hexdigest(), type("")))
|
||||
|
||||
# PY3K: Check that .hexverify() accepts bytes or str
|
||||
if sys.version_info[0] > 2:
|
||||
h.hexverify(h.hexdigest())
|
||||
h.hexverify(h.hexdigest().encode('ascii'))
|
||||
|
||||
# PY3K: hexdigest() should return str, and digest() should return bytes
|
||||
self.assertEqual(expected, out1)
|
||||
if sys.version_info[0] == 2:
|
||||
self.assertEqual(expected, out2)
|
||||
self.assertEqual(expected, out3)
|
||||
else:
|
||||
self.assertEqual(expected.decode(), out2)
|
||||
self.assertEqual(expected.decode(), out3)
|
||||
self.assertEqual(expected, out4)
|
||||
self.assertEqual(expected, out5)
|
||||
|
||||
def make_hash_tests(module, module_name, test_data, digest_size, oid=None):
|
||||
tests = []
|
||||
for i in range(len(test_data)):
|
||||
row = test_data[i]
|
||||
(expected, input) = list(map(tobytes,row[0:2]))
|
||||
if len(row) < 3:
|
||||
description = repr(input)
|
||||
else:
|
||||
description = row[2]
|
||||
name = "%s #%d: %s" % (module_name, i+1, description)
|
||||
tests.append(HashSelfTest(module, name, expected, input))
|
||||
name = "%s #%d: digest_size" % (module_name, i+1)
|
||||
tests.append(HashDigestSizeSelfTest(module, name, digest_size))
|
||||
|
||||
if oid is not None:
|
||||
tests.append(HashTestOID(module, oid))
|
||||
tests.append(HashDocStringTest(module))
|
||||
|
||||
if getattr(module, 'name', None) is not None:
|
||||
tests.append(GenericHashConstructorTest(module))
|
||||
|
||||
return tests
|
||||
|
||||
def make_mac_tests(module, module_name, test_data):
|
||||
tests = []
|
||||
for i in range(len(test_data)):
|
||||
row = test_data[i]
|
||||
(key, data, results, description, params) = row
|
||||
name = "%s #%d: %s" % (module_name, i+1, description)
|
||||
tests.append(MACSelfTest(module, name, results, data, key, params))
|
||||
return tests
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
373
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_BLAKE2.py
Normal file
373
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_BLAKE2.py
Normal file
|
@ -0,0 +1,373 @@
|
|||
# ===================================================================
|
||||
#
|
||||
# Copyright (c) 2014, Legrandin <helderijs@gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# 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 HOLDER 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.
|
||||
# ===================================================================
|
||||
|
||||
import os
|
||||
import re
|
||||
import unittest
|
||||
from binascii import unhexlify, hexlify
|
||||
|
||||
from Crypto.Util.py3compat import b, tobytes, bchr
|
||||
from Crypto.Util.strxor import strxor_c
|
||||
from Crypto.Util._file_system import pycryptodome_filename
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
|
||||
from Crypto.Hash import BLAKE2b, BLAKE2s
|
||||
|
||||
|
||||
class Blake2Test(unittest.TestCase):
|
||||
|
||||
def test_new_positive(self):
|
||||
|
||||
h = self.BLAKE2.new(digest_bits=self.max_bits)
|
||||
for new_func in self.BLAKE2.new, h.new:
|
||||
|
||||
for dbits in range(8, self.max_bits + 1, 8):
|
||||
hobj = new_func(digest_bits=dbits)
|
||||
self.assertEqual(hobj.digest_size, dbits // 8)
|
||||
|
||||
for dbytes in range(1, self.max_bytes + 1):
|
||||
hobj = new_func(digest_bytes=dbytes)
|
||||
self.assertEqual(hobj.digest_size, dbytes)
|
||||
|
||||
digest1 = new_func(data=b("\x90"), digest_bytes=self.max_bytes).digest()
|
||||
digest2 = new_func(digest_bytes=self.max_bytes).update(b("\x90")).digest()
|
||||
self.assertEqual(digest1, digest2)
|
||||
|
||||
new_func(data=b("A"), key=b("5"), digest_bytes=self.max_bytes)
|
||||
|
||||
hobj = h.new()
|
||||
self.assertEqual(hobj.digest_size, self.max_bytes)
|
||||
|
||||
def test_new_negative(self):
|
||||
|
||||
self.assertRaises(TypeError, self.BLAKE2.new)
|
||||
|
||||
h = self.BLAKE2.new(digest_bits=self.max_bits)
|
||||
for new_func in self.BLAKE2.new, h.new:
|
||||
self.assertRaises(TypeError, new_func,
|
||||
digest_bytes=self.max_bytes,
|
||||
digest_bits=self.max_bits)
|
||||
self.assertRaises(ValueError, new_func, digest_bytes=0)
|
||||
self.assertRaises(ValueError, new_func,
|
||||
digest_bytes=self.max_bytes + 1)
|
||||
self.assertRaises(ValueError, new_func, digest_bits=7)
|
||||
self.assertRaises(ValueError, new_func, digest_bits=15)
|
||||
self.assertRaises(ValueError, new_func,
|
||||
digest_bits=self.max_bits + 1)
|
||||
self.assertRaises(TypeError, new_func,
|
||||
digest_bytes=self.max_bytes,
|
||||
key="string")
|
||||
self.assertRaises(TypeError, new_func,
|
||||
digest_bytes=self.max_bytes,
|
||||
data="string")
|
||||
|
||||
def test_update(self):
|
||||
pieces = [bchr(10) * 200, bchr(20) * 300]
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes)
|
||||
h.update(pieces[0]).update(pieces[1])
|
||||
digest = h.digest()
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes)
|
||||
h.update(pieces[0] + pieces[1])
|
||||
self.assertEqual(h.digest(), digest)
|
||||
|
||||
def test_update_negative(self):
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes)
|
||||
self.assertRaises(TypeError, h.update, "string")
|
||||
|
||||
def test_digest(self):
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes)
|
||||
digest = h.digest()
|
||||
|
||||
# hexdigest does not change the state
|
||||
self.assertEqual(h.digest(), digest)
|
||||
# digest returns a byte string
|
||||
self.assertTrue(isinstance(digest, type(b("digest"))))
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
#import pdb; pdb.set_trace()
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = self.BLAKE2.new(digest_bits=256, data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = self.BLAKE2.new(digest_bits=256, data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = self.BLAKE2.new(digest_bits=256, data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
def test_hex_digest(self):
|
||||
mac = self.BLAKE2.new(digest_bits=self.max_bits)
|
||||
digest = mac.digest()
|
||||
hexdigest = mac.hexdigest()
|
||||
|
||||
# hexdigest is equivalent to digest
|
||||
self.assertEqual(hexlify(digest), tobytes(hexdigest))
|
||||
# hexdigest does not change the state
|
||||
self.assertEqual(mac.hexdigest(), hexdigest)
|
||||
# hexdigest returns a string
|
||||
self.assertTrue(isinstance(hexdigest, type("digest")))
|
||||
|
||||
def test_verify(self):
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes, key=b("4"))
|
||||
mac = h.digest()
|
||||
h.verify(mac)
|
||||
wrong_mac = strxor_c(mac, 255)
|
||||
self.assertRaises(ValueError, h.verify, wrong_mac)
|
||||
|
||||
def test_hexverify(self):
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes, key=b("4"))
|
||||
mac = h.hexdigest()
|
||||
h.hexverify(mac)
|
||||
self.assertRaises(ValueError, h.hexverify, "4556")
|
||||
|
||||
def test_oid(self):
|
||||
|
||||
prefix = "1.3.6.1.4.1.1722.12.2." + self.oid_variant + "."
|
||||
|
||||
for digest_bits in self.digest_bits_oid:
|
||||
h = self.BLAKE2.new(digest_bits=digest_bits)
|
||||
self.assertEqual(h.oid, prefix + str(digest_bits // 8))
|
||||
|
||||
h = self.BLAKE2.new(digest_bits=digest_bits, key=b("secret"))
|
||||
self.assertRaises(AttributeError, lambda: h.oid)
|
||||
|
||||
for digest_bits in (8, self.max_bits):
|
||||
if digest_bits in self.digest_bits_oid:
|
||||
continue
|
||||
self.assertRaises(AttributeError, lambda: h.oid)
|
||||
|
||||
|
||||
class Blake2bTest(Blake2Test):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2b
|
||||
#: Max output size (in bits)
|
||||
max_bits = 512
|
||||
#: Max output size (in bytes)
|
||||
max_bytes = 64
|
||||
#: Bit size of the digests for which an ASN OID exists
|
||||
digest_bits_oid = (160, 256, 384, 512)
|
||||
# http://tools.ietf.org/html/draft-saarinen-blake2-02
|
||||
oid_variant = "1"
|
||||
|
||||
|
||||
class Blake2sTest(Blake2Test):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2s
|
||||
#: Max output size (in bits)
|
||||
max_bits = 256
|
||||
#: Max output size (in bytes)
|
||||
max_bytes = 32
|
||||
#: Bit size of the digests for which an ASN OID exists
|
||||
digest_bits_oid = (128, 160, 224, 256)
|
||||
# http://tools.ietf.org/html/draft-saarinen-blake2-02
|
||||
oid_variant = "2"
|
||||
|
||||
|
||||
class Blake2OfficialTestVector(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
||||
test_vector_file = pycryptodome_filename(
|
||||
("Crypto", "SelfTest", "Hash", "test_vectors", self.name),
|
||||
self.name.lower() + "-test.txt")
|
||||
|
||||
expected = "in"
|
||||
self.test_vectors = []
|
||||
for line_number, line in enumerate(open(test_vector_file, "rt")):
|
||||
|
||||
if line.strip() == "" or line.startswith("#"):
|
||||
continue
|
||||
|
||||
res = re.match("%s:\t([0-9A-Fa-f]*)" % expected, line)
|
||||
if not res:
|
||||
raise ValueError("Incorrect test vector format (line %d)"
|
||||
% line_number)
|
||||
|
||||
if res.group(1):
|
||||
bin_value = unhexlify(tobytes(res.group(1)))
|
||||
else:
|
||||
bin_value = b("")
|
||||
if expected == "in":
|
||||
input_data = bin_value
|
||||
expected = "key"
|
||||
elif expected == "key":
|
||||
key = bin_value
|
||||
expected = "hash"
|
||||
else:
|
||||
result = bin_value
|
||||
expected = "in"
|
||||
self.test_vectors.append((input_data, key, result))
|
||||
|
||||
def runTest(self):
|
||||
for (input_data, key, result) in self.test_vectors:
|
||||
mac = self.BLAKE2.new(key=key, digest_bytes=self.max_bytes)
|
||||
mac.update(input_data)
|
||||
self.assertEqual(mac.digest(), result)
|
||||
|
||||
|
||||
class Blake2bOfficialTestVector(Blake2OfficialTestVector):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2b
|
||||
#: Hash name
|
||||
name = "BLAKE2b"
|
||||
#: Max digest size
|
||||
max_bytes = 64
|
||||
|
||||
|
||||
class Blake2sOfficialTestVector(Blake2OfficialTestVector):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2s
|
||||
#: Hash name
|
||||
name = "BLAKE2s"
|
||||
#: Max digest size
|
||||
max_bytes = 32
|
||||
|
||||
|
||||
class Blake2TestVector1(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
test_vector_file = pycryptodome_filename(
|
||||
("Crypto", "SelfTest", "Hash", "test_vectors", self.name),
|
||||
"tv1.txt")
|
||||
|
||||
self.test_vectors = []
|
||||
for line_number, line in enumerate(open(test_vector_file, "rt")):
|
||||
if line.strip() == "" or line.startswith("#"):
|
||||
continue
|
||||
res = re.match("digest: ([0-9A-Fa-f]*)", line)
|
||||
if not res:
|
||||
raise ValueError("Incorrect test vector format (line %d)"
|
||||
% line_number)
|
||||
|
||||
self.test_vectors.append(unhexlify(tobytes(res.group(1))))
|
||||
|
||||
def runTest(self):
|
||||
|
||||
for tv in self.test_vectors:
|
||||
digest_bytes = len(tv)
|
||||
next_data = b("")
|
||||
for _ in range(100):
|
||||
h = self.BLAKE2.new(digest_bytes=digest_bytes)
|
||||
h.update(next_data)
|
||||
next_data = h.digest() + next_data
|
||||
self.assertEqual(h.digest(), tv)
|
||||
|
||||
|
||||
class Blake2bTestVector1(Blake2TestVector1):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2b
|
||||
#: Hash name
|
||||
name = "BLAKE2b"
|
||||
|
||||
|
||||
class Blake2sTestVector1(Blake2TestVector1):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2s
|
||||
#: Hash name
|
||||
name = "BLAKE2s"
|
||||
|
||||
|
||||
class Blake2TestVector2(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
test_vector_file = pycryptodome_filename(
|
||||
("Crypto", "SelfTest", "Hash", "test_vectors", self.name),
|
||||
"tv2.txt")
|
||||
|
||||
self.test_vectors = []
|
||||
for line_number, line in enumerate(open(test_vector_file, "rt")):
|
||||
if line.strip() == "" or line.startswith("#"):
|
||||
continue
|
||||
res = re.match("digest\(([0-9]+)\): ([0-9A-Fa-f]*)", line)
|
||||
if not res:
|
||||
raise ValueError("Incorrect test vector format (line %d)"
|
||||
% line_number)
|
||||
|
||||
key_size = int(res.group(1))
|
||||
result = unhexlify(tobytes(res.group(2)))
|
||||
self.test_vectors.append((key_size, result))
|
||||
|
||||
def runTest(self):
|
||||
|
||||
for key_size, result in self.test_vectors:
|
||||
next_data = b("")
|
||||
for _ in range(100):
|
||||
h = self.BLAKE2.new(digest_bytes=self.max_bytes,
|
||||
key=b("A" * key_size))
|
||||
h.update(next_data)
|
||||
next_data = h.digest() + next_data
|
||||
self.assertEqual(h.digest(), result)
|
||||
|
||||
|
||||
class Blake2bTestVector2(Blake2TestVector1):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2b
|
||||
#: Hash name
|
||||
name = "BLAKE2b"
|
||||
#: Max digest size in bytes
|
||||
max_bytes = 64
|
||||
|
||||
|
||||
class Blake2sTestVector2(Blake2TestVector1):
|
||||
#: Module
|
||||
BLAKE2 = BLAKE2s
|
||||
#: Hash name
|
||||
name = "BLAKE2s"
|
||||
#: Max digest size in bytes
|
||||
max_bytes = 32
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
tests = []
|
||||
|
||||
tests += list_test_cases(Blake2bTest)
|
||||
tests.append(Blake2bOfficialTestVector())
|
||||
tests.append(Blake2bTestVector1())
|
||||
tests.append(Blake2bTestVector2())
|
||||
|
||||
tests += list_test_cases(Blake2sTest)
|
||||
tests.append(Blake2sOfficialTestVector())
|
||||
tests.append(Blake2sTestVector1())
|
||||
tests.append(Blake2sTestVector2())
|
||||
|
||||
return tests
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
288
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_CMAC.py
Normal file
288
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_CMAC.py
Normal file
|
@ -0,0 +1,288 @@
|
|||
#
|
||||
# SelfTest/Hash/CMAC.py: Self-test for the CMAC module
|
||||
#
|
||||
# ===================================================================
|
||||
#
|
||||
# Copyright (c) 2014, Legrandin <helderijs@gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# 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 HOLDER 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 Crypto.Hash.CMAC"""
|
||||
|
||||
import unittest
|
||||
|
||||
from Crypto.Util.py3compat import tobytes
|
||||
|
||||
from Crypto.Hash import CMAC
|
||||
from Crypto.Cipher import AES, DES3
|
||||
from Crypto.Hash import SHAKE128
|
||||
|
||||
# This is a list of (key, data, result, description, module) tuples.
|
||||
test_data = [
|
||||
|
||||
## Test vectors from RFC 4493 ##
|
||||
## The are also in NIST SP 800 38B D.2 ##
|
||||
( '2b7e151628aed2a6abf7158809cf4f3c',
|
||||
'',
|
||||
'bb1d6929e95937287fa37d129b756746',
|
||||
'RFC 4493 #1',
|
||||
AES
|
||||
),
|
||||
|
||||
( '2b7e151628aed2a6abf7158809cf4f3c',
|
||||
'6bc1bee22e409f96e93d7e117393172a',
|
||||
'070a16b46b4d4144f79bdd9dd04a287c',
|
||||
'RFC 4493 #2',
|
||||
AES
|
||||
),
|
||||
|
||||
( '2b7e151628aed2a6abf7158809cf4f3c',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411',
|
||||
'dfa66747de9ae63030ca32611497c827',
|
||||
'RFC 4493 #3',
|
||||
AES
|
||||
),
|
||||
|
||||
( '2b7e151628aed2a6abf7158809cf4f3c',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411e5fbc1191a0a52ef'+
|
||||
'f69f2445df4f9b17ad2b417be66c3710',
|
||||
'51f0bebf7e3b9d92fc49741779363cfe',
|
||||
'RFC 4493 #4',
|
||||
AES
|
||||
),
|
||||
|
||||
## The rest of Appendix D of NIST SP 800 38B
|
||||
## was not totally correct.
|
||||
## Values in Examples 14, 15, 18, and 19 were wrong.
|
||||
## The updated test values are published in:
|
||||
## http://csrc.nist.gov/publications/nistpubs/800-38B/Updated_CMAC_Examples.pdf
|
||||
|
||||
( '8e73b0f7da0e6452c810f32b809079e5'+
|
||||
'62f8ead2522c6b7b',
|
||||
'',
|
||||
'd17ddf46adaacde531cac483de7a9367',
|
||||
'NIST SP 800 38B D.2 Example 5',
|
||||
AES
|
||||
),
|
||||
|
||||
( '8e73b0f7da0e6452c810f32b809079e5'+
|
||||
'62f8ead2522c6b7b',
|
||||
'6bc1bee22e409f96e93d7e117393172a',
|
||||
'9e99a7bf31e710900662f65e617c5184',
|
||||
'NIST SP 800 38B D.2 Example 6',
|
||||
AES
|
||||
),
|
||||
|
||||
( '8e73b0f7da0e6452c810f32b809079e5'+
|
||||
'62f8ead2522c6b7b',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411',
|
||||
'8a1de5be2eb31aad089a82e6ee908b0e',
|
||||
'NIST SP 800 38B D.2 Example 7',
|
||||
AES
|
||||
),
|
||||
|
||||
( '8e73b0f7da0e6452c810f32b809079e5'+
|
||||
'62f8ead2522c6b7b',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411e5fbc1191a0a52ef'+
|
||||
'f69f2445df4f9b17ad2b417be66c3710',
|
||||
'a1d5df0eed790f794d77589659f39a11',
|
||||
'NIST SP 800 38B D.2 Example 8',
|
||||
AES
|
||||
),
|
||||
|
||||
( '603deb1015ca71be2b73aef0857d7781'+
|
||||
'1f352c073b6108d72d9810a30914dff4',
|
||||
'',
|
||||
'028962f61b7bf89efc6b551f4667d983',
|
||||
'NIST SP 800 38B D.3 Example 9',
|
||||
AES
|
||||
),
|
||||
|
||||
( '603deb1015ca71be2b73aef0857d7781'+
|
||||
'1f352c073b6108d72d9810a30914dff4',
|
||||
'6bc1bee22e409f96e93d7e117393172a',
|
||||
'28a7023f452e8f82bd4bf28d8c37c35c',
|
||||
'NIST SP 800 38B D.3 Example 10',
|
||||
AES
|
||||
),
|
||||
|
||||
( '603deb1015ca71be2b73aef0857d7781'+
|
||||
'1f352c073b6108d72d9810a30914dff4',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411',
|
||||
'aaf3d8f1de5640c232f5b169b9c911e6',
|
||||
'NIST SP 800 38B D.3 Example 11',
|
||||
AES
|
||||
),
|
||||
|
||||
( '603deb1015ca71be2b73aef0857d7781'+
|
||||
'1f352c073b6108d72d9810a30914dff4',
|
||||
'6bc1bee22e409f96e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c9eb76fac45af8e51'+
|
||||
'30c81c46a35ce411e5fbc1191a0a52ef'+
|
||||
'f69f2445df4f9b17ad2b417be66c3710',
|
||||
'e1992190549f6ed5696a2c056c315410',
|
||||
'NIST SP 800 38B D.3 Example 12',
|
||||
AES
|
||||
),
|
||||
|
||||
( '8aa83bf8cbda1062'+
|
||||
'0bc1bf19fbb6cd58'+
|
||||
'bc313d4a371ca8b5',
|
||||
'',
|
||||
'b7a688e122ffaf95',
|
||||
'NIST SP 800 38B D.4 Example 13',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '8aa83bf8cbda1062'+
|
||||
'0bc1bf19fbb6cd58'+
|
||||
'bc313d4a371ca8b5',
|
||||
'6bc1bee22e409f96',
|
||||
'8e8f293136283797',
|
||||
'NIST SP 800 38B D.4 Example 14',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '8aa83bf8cbda1062'+
|
||||
'0bc1bf19fbb6cd58'+
|
||||
'bc313d4a371ca8b5',
|
||||
'6bc1bee22e409f96'+
|
||||
'e93d7e117393172a'+
|
||||
'ae2d8a57',
|
||||
'743ddbe0ce2dc2ed',
|
||||
'NIST SP 800 38B D.4 Example 15',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '8aa83bf8cbda1062'+
|
||||
'0bc1bf19fbb6cd58'+
|
||||
'bc313d4a371ca8b5',
|
||||
'6bc1bee22e409f96'+
|
||||
'e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c'+
|
||||
'9eb76fac45af8e51',
|
||||
'33e6b1092400eae5',
|
||||
'NIST SP 800 38B D.4 Example 16',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '4cf15134a2850dd5'+
|
||||
'8a3d10ba80570d38',
|
||||
'',
|
||||
'bd2ebf9a3ba00361',
|
||||
'NIST SP 800 38B D.7 Example 17',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '4cf15134a2850dd5'+
|
||||
'8a3d10ba80570d38',
|
||||
'6bc1bee22e409f96',
|
||||
'4ff2ab813c53ce83',
|
||||
'NIST SP 800 38B D.7 Example 18',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '4cf15134a2850dd5'+
|
||||
'8a3d10ba80570d38',
|
||||
'6bc1bee22e409f96'+
|
||||
'e93d7e117393172a'+
|
||||
'ae2d8a57',
|
||||
'62dd1b471902bd4e',
|
||||
'NIST SP 800 38B D.7 Example 19',
|
||||
DES3
|
||||
),
|
||||
|
||||
( '4cf15134a2850dd5'+
|
||||
'8a3d10ba80570d38',
|
||||
'6bc1bee22e409f96'+
|
||||
'e93d7e117393172a'+
|
||||
'ae2d8a571e03ac9c'+
|
||||
'9eb76fac45af8e51',
|
||||
'31b1e431dabc4eb8',
|
||||
'NIST SP 800 38B D.7 Example 20',
|
||||
DES3
|
||||
),
|
||||
|
||||
]
|
||||
|
||||
|
||||
def get_tag_random(tag, length):
|
||||
return SHAKE128.new(data=tobytes(tag)).read(length)
|
||||
|
||||
|
||||
class MultipleUpdates(unittest.TestCase):
|
||||
"""Verify that internal caching is implemented correctly"""
|
||||
|
||||
def runTest(self):
|
||||
|
||||
data_to_mac = get_tag_random("data_to_mac", 128)
|
||||
key = get_tag_random("key", 16)
|
||||
ref_mac = CMAC.new(key, msg=data_to_mac, ciphermod=AES).digest()
|
||||
|
||||
# Break up in chunks of different length
|
||||
# The result must always be the same
|
||||
for chunk_length in 1, 2, 3, 7, 10, 13, 16, 40, 80, 128:
|
||||
|
||||
chunks = [data_to_mac[i:i+chunk_length] for i in
|
||||
range(0, len(data_to_mac), chunk_length)]
|
||||
|
||||
mac = CMAC.new(key, ciphermod=AES)
|
||||
for chunk in chunks:
|
||||
mac.update(chunk)
|
||||
self.assertEqual(ref_mac, mac.digest())
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
global test_data
|
||||
from .common import make_mac_tests
|
||||
|
||||
# Add new() parameters to the back of each test vector
|
||||
params_test_data = []
|
||||
for row in test_data:
|
||||
t = list(row)
|
||||
t[4] = dict(ciphermod=t[4])
|
||||
params_test_data.append(t)
|
||||
|
||||
tests = make_mac_tests(CMAC, "CMAC", params_test_data)
|
||||
tests.append(MultipleUpdates())
|
||||
return tests
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
330
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_HMAC.py
Normal file
330
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_HMAC.py
Normal file
|
@ -0,0 +1,330 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/HMAC.py: Self-test for the HMAC module
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.HMAC"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
from Crypto.Hash import HMAC, MD5, SHA1, SHA256
|
||||
hash_modules = dict(MD5=MD5, SHA1=SHA1, SHA256=SHA256)
|
||||
|
||||
try:
|
||||
from Crypto.Hash import SHA224, SHA384, SHA512, RIPEMD160
|
||||
hash_modules.update(dict(SHA224=SHA224, SHA384=SHA384, SHA512=SHA512,
|
||||
RIPEMD160=RIPEMD160))
|
||||
except ImportError:
|
||||
import sys
|
||||
sys.stderr.write("SelfTest: warning: not testing HMAC-SHA224/384/512"
|
||||
" (not available)\n")
|
||||
|
||||
default_hash = None
|
||||
|
||||
def xl(text):
|
||||
return tostr(hexlify(b(text)))
|
||||
|
||||
# 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_hash='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)'),
|
||||
|
||||
# Test case 8 (SHA224)
|
||||
('4a656665',
|
||||
'7768617420646f2079612077616e74'
|
||||
+ '20666f72206e6f7468696e673f',
|
||||
dict(SHA224='a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44'),
|
||||
'RFC 4634 8.4 SHA224 (HMAC-SHA224)'),
|
||||
|
||||
# Test case 9 (SHA384)
|
||||
('4a656665',
|
||||
'7768617420646f2079612077616e74'
|
||||
+ '20666f72206e6f7468696e673f',
|
||||
dict(SHA384='af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649'),
|
||||
'RFC 4634 8.4 SHA384 (HMAC-SHA384)'),
|
||||
|
||||
# Test case 10 (SHA512)
|
||||
('4a656665',
|
||||
'7768617420646f2079612077616e74'
|
||||
+ '20666f72206e6f7468696e673f',
|
||||
dict(SHA512='164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737'),
|
||||
'RFC 4634 8.4 SHA512 (HMAC-SHA512)'),
|
||||
|
||||
# Test case 11 (RIPEMD)
|
||||
('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b',
|
||||
xl("Hi There"),
|
||||
dict(RIPEMD160='24cb4bd67d20fc1a5d2ed7732dcc39377f0a5668'),
|
||||
'RFC 2286 #1 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 12 (RIPEMD)
|
||||
(xl("Jefe"),
|
||||
xl("what do ya want for nothing?"),
|
||||
dict(RIPEMD160='dda6c0213a485a9e24f4742064a7f033b43c4069'),
|
||||
'RFC 2286 #2 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 13 (RIPEMD)
|
||||
('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'dd' * 50,
|
||||
dict(RIPEMD160='b0b105360de759960ab4f35298e116e295d8e7c1'),
|
||||
'RFC 2286 #3 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 14 (RIPEMD)
|
||||
('0102030405060708090a0b0c0d0e0f10111213141516171819',
|
||||
'cd' * 50,
|
||||
dict(RIPEMD160='d5ca862f4d21d5e610e18b4cf1beb97a4365ecf4'),
|
||||
'RFC 2286 #4 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 15 (RIPEMD)
|
||||
('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c',
|
||||
xl("Test With Truncation"),
|
||||
dict(RIPEMD160='7619693978f91d90539ae786500ff3d8e0518e39'),
|
||||
'RFC 2286 #5 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 16 (RIPEMD)
|
||||
('aa' * 80,
|
||||
xl("Test Using Larger Than Block-Size Key - Hash Key First"),
|
||||
dict(RIPEMD160='6466ca07ac5eac29e1bd523e5ada7605b791fd8b'),
|
||||
'RFC 2286 #6 (HMAC-RIPEMD)'),
|
||||
|
||||
# Test case 17 (RIPEMD)
|
||||
('aa' * 80,
|
||||
xl("Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"),
|
||||
dict(RIPEMD160='69ea60798d71616cce5fd0871e23754cd75d5a0a'),
|
||||
'RFC 2286 #7 (HMAC-RIPEMD)'),
|
||||
|
||||
]
|
||||
|
||||
|
||||
class HMAC_Module_and_Instance_Test(unittest.TestCase):
|
||||
"""Test the HMAC construction and verify that it does not
|
||||
matter if you initialize it with a hash module or
|
||||
with an hash instance.
|
||||
|
||||
See https://bugs.launchpad.net/pycrypto/+bug/1209399
|
||||
"""
|
||||
|
||||
def __init__(self, hashmods):
|
||||
"""Initialize the test with a dictionary of hash modules
|
||||
indexed by their names"""
|
||||
|
||||
unittest.TestCase.__init__(self)
|
||||
self.hashmods = hashmods
|
||||
self.description = ""
|
||||
|
||||
def shortDescription(self):
|
||||
return self.description
|
||||
|
||||
def runTest(self):
|
||||
key = b("\x90\x91\x92\x93") * 4
|
||||
payload = b("\x00") * 100
|
||||
|
||||
for hashname, hashmod in list(self.hashmods.items()):
|
||||
if hashmod is None:
|
||||
continue
|
||||
self.description = "Test HMAC in combination with " + hashname
|
||||
one = HMAC.new(key, payload, hashmod).digest()
|
||||
two = HMAC.new(key, payload, hashmod.new()).digest()
|
||||
self.assertEqual(one, two)
|
||||
|
||||
class HMAC_None(unittest.TestCase):
|
||||
|
||||
def runTest(self):
|
||||
|
||||
key = bchr(4) * 20
|
||||
one = HMAC.new(key, b(""), SHA1).digest()
|
||||
two = HMAC.new(key, None, SHA1).digest()
|
||||
self.assertEqual(one, two)
|
||||
|
||||
def get_tests(config={}):
|
||||
global test_data
|
||||
from .common import make_mac_tests
|
||||
|
||||
# A test vector contains multiple results, each one for a
|
||||
# different hash algorithm.
|
||||
# Here we expand each test vector into multiple ones,
|
||||
# and add the relevant parameters that will be passed to new()
|
||||
exp_test_data = []
|
||||
for row in test_data:
|
||||
for modname in list(row[2].keys()):
|
||||
t = list(row)
|
||||
t[2] = row[2][modname]
|
||||
try:
|
||||
t.append(dict(digestmod=globals()[modname]))
|
||||
exp_test_data.append(t)
|
||||
except AttributeError:
|
||||
import sys
|
||||
sys.stderr.write("SelfTest: warning: not testing HMAC-%s"
|
||||
" (not available)\n" % modname)
|
||||
tests = make_mac_tests(HMAC, "HMAC", exp_test_data)
|
||||
tests.append(HMAC_Module_and_Instance_Test(hash_modules))
|
||||
tests.append(HMAC_None())
|
||||
return tests
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD2.py
Normal file
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD2.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/MD2.py: Self-test for the MD2 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.MD2"""
|
||||
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
# 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(config={}):
|
||||
from Crypto.Hash import MD2
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(MD2, "MD2", test_data,
|
||||
digest_size=16,
|
||||
oid="1.2.840.113549.2.2")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
64
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD4.py
Normal file
64
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD4.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/MD4.py: Self-test for the MD4 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.MD4"""
|
||||
|
||||
__revision__ = "$Id$"
|
||||
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
# 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(config={}):
|
||||
from Crypto.Hash import MD4
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(MD4, "MD4", test_data,
|
||||
digest_size=16,
|
||||
oid="1.2.840.113549.2.4")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD5.py
Normal file
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_MD5.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/MD5.py: Self-test for the MD5 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.MD5"""
|
||||
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
# 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(config={}):
|
||||
from Crypto.Hash import MD5
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(MD5, "MD5", test_data,
|
||||
digest_size=16,
|
||||
oid="1.2.840.113549.2.5")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
|
@ -0,0 +1,71 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_RIPEMD160.py: Self-test for the RIPEMD-160 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
#"""Self-test suite for Crypto.Hash.RIPEMD160"""
|
||||
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
# 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(config={}):
|
||||
from Crypto.Hash import RIPEMD160
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(RIPEMD160, "RIPEMD160", test_data,
|
||||
digest_size=20,
|
||||
oid="1.3.36.3.2.1")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA1.py
Normal file
62
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA1.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/SHA1.py: Self-test for the SHA-1 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA"""
|
||||
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
# 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(config={}):
|
||||
from Crypto.Hash import SHA1
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(SHA1, "SHA1", test_data,
|
||||
digest_size=20,
|
||||
oid="1.3.14.3.2.26")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
63
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA224.py
Normal file
63
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA224.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA224.py: Self-test for the SHA-224 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA224"""
|
||||
|
||||
# Test vectors from various sources
|
||||
# This is a list of (expected_result, input[, description]) tuples.
|
||||
test_data = [
|
||||
|
||||
# RFC 3874: Section 3.1, "Test Vector #1
|
||||
('23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7', 'abc'),
|
||||
|
||||
# RFC 3874: Section 3.2, "Test Vector #2
|
||||
('75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525', 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'),
|
||||
|
||||
# RFC 3874: Section 3.3, "Test Vector #3
|
||||
('20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67', 'a' * 10**6, "'a' * 10**6"),
|
||||
|
||||
# Examples from http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
|
||||
('d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f', ''),
|
||||
|
||||
('49b08defa65e644cbf8a2dd9270bdededabc741997d1dadd42026d7b',
|
||||
'Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'),
|
||||
|
||||
('58911e7fccf2971a7d07f93162d8bd13568e71aa8fc86fc1fe9043d1',
|
||||
'Frank jagt im komplett verwahrlosten Taxi quer durch Bayern'),
|
||||
|
||||
]
|
||||
|
||||
def get_tests(config={}):
|
||||
from Crypto.Hash import SHA224
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(SHA224, "SHA224", test_data,
|
||||
digest_size=28,
|
||||
oid='2.16.840.1.101.3.4.2.4')
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
94
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA256.py
Normal file
94
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA256.py
Normal file
|
@ -0,0 +1,94 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA256.py: Self-test for the SHA-256 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA256"""
|
||||
|
||||
import unittest
|
||||
from Crypto.Util.py3compat import *
|
||||
|
||||
class LargeSHA256Test(unittest.TestCase):
|
||||
def runTest(self):
|
||||
"""SHA256: 512/520 MiB test"""
|
||||
from Crypto.Hash import SHA256
|
||||
zeros = bchr(0x00) * (1024*1024)
|
||||
|
||||
h = SHA256.new(zeros)
|
||||
for i in range(511):
|
||||
h.update(zeros)
|
||||
|
||||
# This test vector is from PyCrypto's old testdata.py file.
|
||||
self.assertEqual('9acca8e8c22201155389f65abbf6bc9723edc7384ead80503839f49dcc56d767', h.hexdigest()) # 512 MiB
|
||||
|
||||
for i in range(8):
|
||||
h.update(zeros)
|
||||
|
||||
# This test vector is from PyCrypto's old testdata.py file.
|
||||
self.assertEqual('abf51ad954b246009dfe5a50ecd582fd5b8f1b8b27f30393853c3ef721e7fa6e', h.hexdigest()) # 520 MiB
|
||||
|
||||
def get_tests(config={}):
|
||||
# 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 PyCrypto bug.
|
||||
('f7fd017a3c721ce7ff03f3552c0813adcc48b7f33f07e5e2ba71e23ea393d103',
|
||||
'This message is precisely 55 bytes long, to test a bug.',
|
||||
'Length = 55 (mod 64)'),
|
||||
|
||||
# Example from http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
|
||||
('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', ''),
|
||||
|
||||
('d32b568cd1b96d459e7291ebf4b25d007f275c9f13149beeb782fac0716613f8',
|
||||
'Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'),
|
||||
]
|
||||
|
||||
from Crypto.Hash import SHA256
|
||||
from .common import make_hash_tests
|
||||
tests = make_hash_tests(SHA256, "SHA256", test_data,
|
||||
digest_size=32,
|
||||
oid="2.16.840.1.101.3.4.2.1")
|
||||
|
||||
if config.get('slow_tests'):
|
||||
tests += [LargeSHA256Test()]
|
||||
|
||||
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:
|
61
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA384.py
Normal file
61
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA384.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA.py: Self-test for the SHA-384 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA384"""
|
||||
|
||||
# Test vectors from various sources
|
||||
# This is a list of (expected_result, input[, description]) tuples.
|
||||
test_data = [
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 1"
|
||||
('cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7', 'abc'),
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 2.2"
|
||||
('09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039', 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'),
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 3"
|
||||
('9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985', 'a' * 10**6, "'a' * 10**6"),
|
||||
|
||||
# Taken from http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
|
||||
('38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b', ''),
|
||||
|
||||
# Example from http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
|
||||
('71e8383a4cea32d6fd6877495db2ee353542f46fa44bc23100bca48f3366b84e809f0708e81041f427c6d5219a286677',
|
||||
'Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'),
|
||||
|
||||
]
|
||||
|
||||
def get_tests(config={}):
|
||||
from Crypto.Hash import SHA384
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(SHA384, "SHA384", test_data,
|
||||
digest_size=48,
|
||||
oid='2.16.840.1.101.3.4.2.2')
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_224.py
Normal file
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_224.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA3_224.py: Self-test for the SHA-3/224 hash function
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA3_224"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
from io import StringIO
|
||||
from Crypto.Hash import SHA3_224 as SHA3
|
||||
from Crypto.Util.py3compat import b
|
||||
|
||||
|
||||
class APITest(unittest.TestCase):
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = SHA3.new(data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = SHA3.new(data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = SHA3.new(data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
from .common import make_hash_tests
|
||||
|
||||
tests = []
|
||||
|
||||
test_vectors = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHA3-224.txt",
|
||||
"KAT SHA-3 224",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_data = []
|
||||
for tv in test_vectors:
|
||||
if tv.len == 0:
|
||||
tv.msg = b("")
|
||||
test_data.append((hexlify(tv.md), tv.msg, tv.desc))
|
||||
|
||||
tests += make_hash_tests(SHA3, "SHA3_224", test_data,
|
||||
digest_size=SHA3.digest_size,
|
||||
oid="2.16.840.1.101.3.4.2.7")
|
||||
tests += list_test_cases(APITest)
|
||||
return tests
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
81
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_256.py
Normal file
81
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_256.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA3_256.py: Self-test for the SHA-3/256 hash function
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA3_256"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
from io import StringIO
|
||||
from Crypto.Hash import SHA3_256 as SHA3
|
||||
from Crypto.Util.py3compat import b
|
||||
|
||||
|
||||
class APITest(unittest.TestCase):
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = SHA3.new(data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = SHA3.new(data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = SHA3.new(data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
from .common import make_hash_tests
|
||||
|
||||
tests = []
|
||||
|
||||
test_vectors = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHA3-256.txt",
|
||||
"KAT SHA-3 256",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_data = []
|
||||
for tv in test_vectors:
|
||||
if tv.len == 0:
|
||||
tv.msg = b("")
|
||||
test_data.append((hexlify(tv.md), tv.msg, tv.desc))
|
||||
|
||||
|
||||
tests += make_hash_tests(SHA3, "SHA3_256", test_data,
|
||||
digest_size=SHA3.digest_size,
|
||||
oid="2.16.840.1.101.3.4.2.8")
|
||||
tests += list_test_cases(APITest)
|
||||
return tests
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_384.py
Normal file
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_384.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA3_384.py: Self-test for the SHA-3/384 hash function
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA3_384"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
from io import StringIO
|
||||
from Crypto.Hash import SHA3_384 as SHA3
|
||||
from Crypto.Util.py3compat import b
|
||||
|
||||
|
||||
class APITest(unittest.TestCase):
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = SHA3.new(data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = SHA3.new(data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = SHA3.new(data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
from .common import make_hash_tests
|
||||
|
||||
tests = []
|
||||
|
||||
test_vectors = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHA3-384.txt",
|
||||
"KAT SHA-3 384",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_data = []
|
||||
for tv in test_vectors:
|
||||
if tv.len == 0:
|
||||
tv.msg = b("")
|
||||
test_data.append((hexlify(tv.md), tv.msg, tv.desc))
|
||||
|
||||
tests += make_hash_tests(SHA3, "SHA3_384", test_data,
|
||||
digest_size=SHA3.digest_size,
|
||||
oid="2.16.840.1.101.3.4.2.9")
|
||||
tests += list_test_cases(APITest)
|
||||
return tests
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_512.py
Normal file
80
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA3_512.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA3_512.py: Self-test for the SHA-3/512 hash function
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA3_512"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
from io import StringIO
|
||||
from Crypto.Hash import SHA3_512 as SHA3
|
||||
from Crypto.Util.py3compat import b
|
||||
|
||||
|
||||
class APITest(unittest.TestCase):
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = SHA3.new(data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = SHA3.new(data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = SHA3.new(data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
from .common import make_hash_tests
|
||||
|
||||
tests = []
|
||||
|
||||
test_vectors = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHA3-512.txt",
|
||||
"KAT SHA-3 512",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_data = []
|
||||
for tv in test_vectors:
|
||||
if tv.len == 0:
|
||||
tv.msg = b("")
|
||||
test_data.append((hexlify(tv.md), tv.msg, tv.desc))
|
||||
|
||||
tests += make_hash_tests(SHA3, "SHA3_512", test_data,
|
||||
digest_size=SHA3.digest_size,
|
||||
oid="2.16.840.1.101.3.4.2.10")
|
||||
tests += list_test_cases(APITest)
|
||||
return tests
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
58
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA512.py
Normal file
58
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHA512.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# SelfTest/Hash/test_SHA512.py: Self-test for the SHA-512 hash function
|
||||
#
|
||||
# Written in 2008 by Dwayne C. Litzenberger <dlitz@dlitz.net>
|
||||
#
|
||||
# ===================================================================
|
||||
# The contents of this file are dedicated to the public domain. To
|
||||
# the extent that dedication to the public domain is not available,
|
||||
# everyone is granted a worldwide, perpetual, royalty-free,
|
||||
# non-exclusive license to exercise all rights associated with the
|
||||
# contents of this file for any purpose whatsoever.
|
||||
# No rights are reserved.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
# ===================================================================
|
||||
|
||||
"""Self-test suite for Crypto.Hash.SHA512"""
|
||||
|
||||
# Test vectors from various sources
|
||||
# This is a list of (expected_result, input[, description]) tuples.
|
||||
test_data = [
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 1"
|
||||
('ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f', 'abc'),
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 2.1"
|
||||
('8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909', 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'),
|
||||
|
||||
# RFC 4634: Section Page 8.4, "Test 3"
|
||||
('e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b', 'a' * 10**6, "'a' * 10**6"),
|
||||
|
||||
# Taken from http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
|
||||
('cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e', ''),
|
||||
|
||||
('af9ed2de700433b803240a552b41b5a472a6ef3fe1431a722b2063c75e9f07451f67a28e37d09cde769424c96aea6f8971389db9e1993d6c565c3c71b855723c', 'Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'),
|
||||
]
|
||||
|
||||
def get_tests(config={}):
|
||||
from Crypto.Hash import SHA512
|
||||
from .common import make_hash_tests
|
||||
return make_hash_tests(SHA512, "SHA512", test_data,
|
||||
digest_size=64,
|
||||
oid="2.16.840.1.101.3.4.2.3")
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
# vim:set ts=4 sw=4 sts=4 expandtab:
|
144
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHAKE.py
Normal file
144
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_SHAKE.py
Normal file
|
@ -0,0 +1,144 @@
|
|||
# ===================================================================
|
||||
#
|
||||
# Copyright (c) 2015, Legrandin <helderijs@gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# 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 HOLDER 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 Crypto.Hash.SHAKE128 and SHAKE256"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify, unhexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
|
||||
from io import StringIO
|
||||
from Crypto.Hash import SHAKE128, SHAKE256
|
||||
from Crypto.Util.py3compat import b, bchr, bord, tobytes
|
||||
|
||||
class SHAKETest(unittest.TestCase):
|
||||
|
||||
def test_new_positive(self):
|
||||
|
||||
xof1 = self.shake.new()
|
||||
xof2 = self.shake.new(data=b("90"))
|
||||
xof3 = self.shake.new().update(b("90"))
|
||||
|
||||
self.assertNotEqual(xof1.read(10), xof2.read(10))
|
||||
xof3.read(10)
|
||||
self.assertEqual(xof2.read(10), xof3.read(10))
|
||||
|
||||
def test_update(self):
|
||||
pieces = [bchr(10) * 200, bchr(20) * 300]
|
||||
h = self.shake.new()
|
||||
h.update(pieces[0]).update(pieces[1])
|
||||
digest = h.read(10)
|
||||
h = self.shake.new()
|
||||
h.update(pieces[0] + pieces[1])
|
||||
self.assertEqual(h.read(10), digest)
|
||||
|
||||
def test_update_negative(self):
|
||||
h = self.shake.new()
|
||||
self.assertRaises(TypeError, h.update, "string")
|
||||
|
||||
def test_digest(self):
|
||||
h = self.shake.new()
|
||||
digest = h.read(90)
|
||||
|
||||
# read returns a byte string of the right length
|
||||
self.assertTrue(isinstance(digest, type(b("digest"))))
|
||||
self.assertEqual(len(digest), 90)
|
||||
|
||||
def test_update_after_read(self):
|
||||
mac = self.shake.new()
|
||||
mac.update(b("rrrr"))
|
||||
mac.read(90)
|
||||
self.assertRaises(TypeError, mac.update, b("ttt"))
|
||||
|
||||
|
||||
class SHAKE128Test(SHAKETest):
|
||||
shake = SHAKE128
|
||||
|
||||
|
||||
class SHAKE256Test(SHAKETest):
|
||||
shake = SHAKE256
|
||||
|
||||
|
||||
class SHAKEVectors(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
test_vectors_128 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHAKE128.txt",
|
||||
"Short Messages KAT SHAKE128",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_128):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = SHAKE128.new(data=data)
|
||||
digest = hobj.read(len(result))
|
||||
self.assertEqual(digest, result)
|
||||
|
||||
setattr(SHAKEVectors, "test_128_%d" % idx, new_test)
|
||||
|
||||
|
||||
test_vectors_256 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "SHA3"),
|
||||
"ShortMsgKAT_SHAKE256.txt",
|
||||
"Short Messages KAT SHAKE256",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_256):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = SHAKE256.new(data=data)
|
||||
digest = hobj.read(len(result))
|
||||
self.assertEqual(digest, result)
|
||||
|
||||
setattr(SHAKEVectors, "test_256_%d" % idx, new_test)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
tests = []
|
||||
tests += list_test_cases(SHAKE128Test)
|
||||
tests += list_test_cases(SHAKE256Test)
|
||||
tests += list_test_cases(SHAKEVectors)
|
||||
return tests
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
251
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_keccak.py
Normal file
251
venv/Lib/site-packages/Crypto/SelfTest/Hash/test_keccak.py
Normal file
|
@ -0,0 +1,251 @@
|
|||
# ===================================================================
|
||||
#
|
||||
# Copyright (c) 2015, Legrandin <helderijs@gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# 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 HOLDER 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 Crypto.Hash.keccak"""
|
||||
|
||||
import unittest
|
||||
from binascii import hexlify, unhexlify
|
||||
|
||||
from Crypto.SelfTest.loader import load_tests
|
||||
from Crypto.SelfTest.st_common import list_test_cases
|
||||
|
||||
from io import StringIO
|
||||
from Crypto.Hash import keccak
|
||||
from Crypto.Util.py3compat import b, tobytes, bchr
|
||||
|
||||
class KeccakTest(unittest.TestCase):
|
||||
|
||||
def test_new_positive(self):
|
||||
|
||||
for digest_bits in (224, 256, 384, 512):
|
||||
hobj = keccak.new(digest_bits=digest_bits)
|
||||
self.assertEqual(hobj.digest_size, digest_bits // 8)
|
||||
|
||||
hobj2 = hobj.new()
|
||||
self.assertEqual(hobj2.digest_size, digest_bits // 8)
|
||||
|
||||
for digest_bytes in (28, 32, 48, 64):
|
||||
hobj = keccak.new(digest_bytes=digest_bytes)
|
||||
self.assertEqual(hobj.digest_size, digest_bytes)
|
||||
|
||||
hobj2 = hobj.new()
|
||||
self.assertEqual(hobj2.digest_size, digest_bytes)
|
||||
|
||||
def test_new_positive2(self):
|
||||
|
||||
digest1 = keccak.new(data=b("\x90"), digest_bytes=64).digest()
|
||||
digest2 = keccak.new(digest_bytes=64).update(b("\x90")).digest()
|
||||
self.assertEqual(digest1, digest2)
|
||||
|
||||
def test_new_negative(self):
|
||||
|
||||
# keccak.new needs digest size
|
||||
self.assertRaises(TypeError, keccak.new)
|
||||
|
||||
h = keccak.new(digest_bits=512)
|
||||
|
||||
# Either bits or bytes can be specified
|
||||
self.assertRaises(TypeError, keccak.new,
|
||||
digest_bytes=64,
|
||||
digest_bits=512)
|
||||
|
||||
# Range
|
||||
self.assertRaises(ValueError, keccak.new, digest_bytes=0)
|
||||
self.assertRaises(ValueError, keccak.new, digest_bytes=1)
|
||||
self.assertRaises(ValueError, keccak.new, digest_bytes=65)
|
||||
self.assertRaises(ValueError, keccak.new, digest_bits=0)
|
||||
self.assertRaises(ValueError, keccak.new, digest_bits=1)
|
||||
self.assertRaises(ValueError, keccak.new, digest_bits=513)
|
||||
|
||||
def test_update(self):
|
||||
pieces = [bchr(10) * 200, bchr(20) * 300]
|
||||
h = keccak.new(digest_bytes=64)
|
||||
h.update(pieces[0]).update(pieces[1])
|
||||
digest = h.digest()
|
||||
h = keccak.new(digest_bytes=64)
|
||||
h.update(pieces[0] + pieces[1])
|
||||
self.assertEqual(h.digest(), digest)
|
||||
|
||||
def test_update_negative(self):
|
||||
h = keccak.new(digest_bytes=64)
|
||||
self.assertRaises(TypeError, h.update, "string")
|
||||
|
||||
def test_digest(self):
|
||||
h = keccak.new(digest_bytes=64)
|
||||
digest = h.digest()
|
||||
|
||||
# hexdigest does not change the state
|
||||
self.assertEqual(h.digest(), digest)
|
||||
# digest returns a byte string
|
||||
self.assertTrue(isinstance(digest, type(b("digest"))))
|
||||
|
||||
def test_hex_digest(self):
|
||||
mac = keccak.new(digest_bits=512)
|
||||
digest = mac.digest()
|
||||
hexdigest = mac.hexdigest()
|
||||
|
||||
# hexdigest is equivalent to digest
|
||||
self.assertEqual(hexlify(digest), tobytes(hexdigest))
|
||||
# hexdigest does not change the state
|
||||
self.assertEqual(mac.hexdigest(), hexdigest)
|
||||
# hexdigest returns a string
|
||||
self.assertTrue(isinstance(hexdigest, type("digest")))
|
||||
|
||||
def test_update_after_digest(self):
|
||||
msg=b("rrrrttt")
|
||||
|
||||
# Normally, update() cannot be done after digest()
|
||||
h = keccak.new(digest_bits=512, data=msg[:4])
|
||||
dig1 = h.digest()
|
||||
self.assertRaises(TypeError, h.update, msg[4:])
|
||||
dig2 = keccak.new(digest_bits=512, data=msg).digest()
|
||||
|
||||
# With the proper flag, it is allowed
|
||||
h = keccak.new(digest_bits=512, data=msg[:4], update_after_digest=True)
|
||||
self.assertEqual(h.digest(), dig1)
|
||||
# ... and the subsequent digest applies to the entire message
|
||||
# up to that point
|
||||
h.update(msg[4:])
|
||||
self.assertEqual(h.digest(), dig2)
|
||||
|
||||
|
||||
class KeccakVectors(unittest.TestCase):
|
||||
pass
|
||||
|
||||
# TODO: add ExtremelyLong tests
|
||||
|
||||
|
||||
test_vectors_224 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"ShortMsgKAT_224.txt",
|
||||
"Short Messages KAT 224",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_vectors_224 += load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"LongMsgKAT_224.txt",
|
||||
"Long Messages KAT 224",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_224):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = keccak.new(digest_bits=224, data=data)
|
||||
self.assertEqual(hobj.digest(), result)
|
||||
|
||||
setattr(KeccakVectors, "test_224_%d" % idx, new_test)
|
||||
|
||||
# ---
|
||||
|
||||
test_vectors_256 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"ShortMsgKAT_256.txt",
|
||||
"Short Messages KAT 256",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_vectors_256 += load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"LongMsgKAT_256.txt",
|
||||
"Long Messages KAT 256",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_256):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = keccak.new(digest_bits=256, data=data)
|
||||
self.assertEqual(hobj.digest(), result)
|
||||
|
||||
setattr(KeccakVectors, "test_256_%d" % idx, new_test)
|
||||
|
||||
|
||||
# ---
|
||||
|
||||
test_vectors_384 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"ShortMsgKAT_384.txt",
|
||||
"Short Messages KAT 384",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_vectors_384 += load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"LongMsgKAT_384.txt",
|
||||
"Long Messages KAT 384",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_384):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = keccak.new(digest_bits=384, data=data)
|
||||
self.assertEqual(hobj.digest(), result)
|
||||
|
||||
setattr(KeccakVectors, "test_384_%d" % idx, new_test)
|
||||
|
||||
# ---
|
||||
|
||||
test_vectors_512 = load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"ShortMsgKAT_512.txt",
|
||||
"Short Messages KAT 512",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
test_vectors_512 += load_tests(("Crypto", "SelfTest", "Hash", "test_vectors", "keccak"),
|
||||
"LongMsgKAT_512.txt",
|
||||
"Long Messages KAT 512",
|
||||
{ "len" : lambda x: int(x) } )
|
||||
|
||||
for idx, tv in enumerate(test_vectors_512):
|
||||
if tv.len == 0:
|
||||
data = b("")
|
||||
else:
|
||||
data = tobytes(tv.msg)
|
||||
|
||||
def new_test(self, data=data, result=tv.md):
|
||||
hobj = keccak.new(digest_bits=512, data=data)
|
||||
self.assertEqual(hobj.digest(), result)
|
||||
|
||||
setattr(KeccakVectors, "test_512_%d" % idx, new_test)
|
||||
|
||||
|
||||
def get_tests(config={}):
|
||||
tests = []
|
||||
tests += list_test_cases(KeccakTest)
|
||||
tests += list_test_cases(KeccakVectors)
|
||||
return tests
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import unittest
|
||||
suite = lambda: unittest.TestSuite(get_tests())
|
||||
unittest.main(defaultTest='suite')
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,68 @@
|
|||
#
|
||||
# Compute the function h(100) for each digest size from 1 to 64, where:
|
||||
# h(1) = Hash("")
|
||||
# h(x) = Hash(h(x-1) + h(x-2) + ... + h(1))
|
||||
#
|
||||
digest: 51
|
||||
digest: 75c3
|
||||
digest: 27f5ab
|
||||
digest: ff9a5553
|
||||
digest: b348ecc702
|
||||
digest: c3b7176f1e2f
|
||||
digest: 0fb363c714740d
|
||||
digest: 0199023617a77ba5
|
||||
digest: 72e6ac842ed6102c8a
|
||||
digest: cf98cc4eaf7885eba6f6
|
||||
digest: af3a3ca23bd506ced6eb81
|
||||
digest: 49075448d196d2479400fca1
|
||||
digest: 1942a1186466db1e9dbc1c052f
|
||||
digest: 75f7a4111fee8349aa964184666f
|
||||
digest: 62d23bc8055e743a09193ba6374878
|
||||
digest: a803a56be406297d2cb20ff09bef3998
|
||||
digest: fd4d0c64fc14c76557bb43a2e8963d4c5b
|
||||
digest: d609cc846e76f73817ea1751913af681b614
|
||||
digest: 23488e1ead2411ce0671f5b2a841acb1d14549
|
||||
digest: e756cc01e687420dd0010c9f0d707cd7068e8aa0
|
||||
digest: 081d29e1523dfd0aeaad4579f7988f462d8fdd8aeb
|
||||
digest: bbe42b23bf3d5b3505cd346364f9a268b368d9360ef8
|
||||
digest: 9002f2fc40e9bfbe682827e143a6e0d1ac5f637369808e
|
||||
digest: d7428b7557cd38bfc051829af1c86bb64b97a3b800f1c7ab
|
||||
digest: 37037c60c67c883b680208be5c5d06b14eafa1441f212a7336
|
||||
digest: 4a57ba9d80e097432349114d5fe21ae4a5d97caf365ef8011642
|
||||
digest: 66123d3202634ecfbaf73d5954181b0b3476de580116b9a660b06c
|
||||
digest: 72d3449be99a02708bd74486a316c199f33307b2c287e88dc320f8f7
|
||||
digest: c7b878df5aa97910e6d2705361c22976d64a32bfaef0435bfdfd9dadd1
|
||||
digest: 914255cb7acfdf731b1b382c9aff4245ced383671ce955b9bc040c82d105
|
||||
digest: cb1409f26de3d44d9efa58ef0bb899bc09ddba4a8e4b088d0f629cdb9c692c
|
||||
digest: 28df1518fd6dc91bb3caa93774b34d126cdc9d9252176f31d5d2e1da58ea8511
|
||||
digest: aba24453ba25b5acb1c77ac0325ab900faeed2e24abcf75f1a0d28b90ccb0bed68
|
||||
digest: 4da40391614f19e6fa6019eeef0322155c5e4b92300d4101723204d55bbbd9964c36
|
||||
digest: 10cec3947dc62e2d3f46ef0bfa921f87626aab885be7d4f855359c52a655a551dc0e42
|
||||
digest: f76f1f13bef92d1d44705ef1eb433df9bd77f2d7fd67aad90ede9ed0f1c36d553dc57f7d
|
||||
digest: 39b408a21df152c385285104b3ecdd41eeb9bc7279e272cb3358ecddac4162f53106397989
|
||||
digest: 69867a08f4ff4e2579c778d1be28d9fb457de29d2c04c32f788d464b00c6a6bee21ba003f3d0
|
||||
digest: b4b3fa409a655b16ec57c32e7bead0547e31072b6094d299e36f5e91a8fc1ff928da973b0c1cca
|
||||
digest: 1ff502ecdc30c628756e78ae69ab9ec4c1bc203a3355aef7b5d47fa5b492f5a7d7259f58f03c33a9
|
||||
digest: 7bbf15cc554c26338ebd7fcc9b80b80a9a5de9d90bdd8d231dd777c90bdbbe79d4f2dba687d8a8d802
|
||||
digest: a081a1a75955179492f5058fe0d3647b7184000ec4e37148f6951bc55874b410463c680a2481b10c0de8
|
||||
digest: 7aa711ceb50c3b3874670b9d8130116e73e8c5bede5144fa1f98c16ef1e6813c4882e997de56991a2056ec
|
||||
digest: 6fabf02f1bfb1ae0f3b0f954c398b77341f0964b8d00f9bcba2a911dca0fe5d903a9e584fb2c3934119e1424
|
||||
digest: 8a47773706cf3e85cbb5ef44663dd4c10a2e23d0a0c81e6be4038ad337e1733c1e79394f7295a50313d8effa85
|
||||
digest: 7b64302c7b763dee4701b0529b06b45f57aec5a5e82b4a466d71d01e46b4a894591531f8fb5580d2fdcc9b0de475
|
||||
digest: a018240b278f67e9347d58527cff0496ef6983956fe51c7e3019f48f8033d0112031105549cb830362b597b0032969
|
||||
digest: da45711a313d5f89e72e8528c409e166e7cb497f87aa6cbd15e75cc176b3cb633d44ecb8548ed09329ee56218954f452
|
||||
digest: d78d8faebdbad5591d847080e65661cccda49d9c599ae1bc1874bf2bf7b8f40e76df5e4579b8d25816d0ce455da23d1699
|
||||
digest: 4fdcffd02318f3127ebca7688038e8b05e74aec8df0b58b99ae3a163f7def2bc9b6fc165c90f9a1817e31a5a5527d347e008
|
||||
digest: a937e1ba7979658fa6ee30fc7725040e5f3d5d40ff05696c646d6ab50a8f8c59dbd9dba10cb5dfa702408426ee36fafa590583
|
||||
digest: 36343ef33aa97f6274723c3e06bbbfb0db772d0697a62a8815d8ccc1ecf0a6f7b93c93ece7e2aa10c18fe880f1f0fcb27678786b
|
||||
digest: 7baf9917094380fea5938a5eac6545c0630ac1d7ad5fb636aca4d7627143c7a913be058f6c421ddb67bb6436d5a6ade8315d4eaf63
|
||||
digest: d65e460d631a27c81d00b86fdb54b815dd06c717172a98de56fc1ef300c8775012e47847023b3e2a25678ea0178144301e73a751013a
|
||||
digest: 51d3e91fea8e973b1b7432e46886c824d8cfa695f5e3ea335ee9698339b1f67deb0a8e629c1b84249e06abfa6e2a3309e2dc8265738d1f
|
||||
digest: 6f61300d7cd1c903fee89922ea6415a281c1e16e73b4b2f79cdd9f38ecbb7ff290b44a1ff21b4a633cc744618fb416552b2a89df44a26615
|
||||
digest: 217417b8ccddad4517b79162fa7a0dfcda4621048241b98dd90d553d0b94c45cb1b64c3c698f83bad1cdc202704f0fcf320567f76d692e0deb
|
||||
digest: 2b0d4a7dd11892a35cc2c37ee0d6c836a271ec3bcf30297560dfb53abf3bc7cba527f0bcd591b26360b58a9d72ca171ebd9644b0554f65828647
|
||||
digest: 217a9de1b13b5dee2405e08641991a0d4f2e48df17bec54bfdf85201474b904ffb249cfa2e4e08ba148e3cb024e383431422049fcbc749f7f3190b
|
||||
digest: 55da063022e5089ca8887669bda7b71f07c18ff3f64c06dee2d2f47b529bc9a5f02275ab2a19b4f6f1c9779784532aff6595ff56158f74a974317a0c
|
||||
digest: b5da5ffc80bfab4c99657f713fa82d12854561aec291afefe95a7d835a313ce38d10d041ec90ec70f106ed36ded1ffd295bf286ada7b799d1be21776b1
|
||||
digest: 5470b4809368ba73b17cac5506736c10faef839e386face780142ae921d579855110225eaf1c55dababeb6faba6097e6f4bdc2471c867756c26e88b191ed
|
||||
digest: 0b44c54a1830d0ff0567c43f89b49540cd9caa76056f4509387673a338c3aaaded723984a7bc6dff76dad7e94aff5c830f6f0b0c7f5af8ad9d5ca909f66412
|
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
# Compute the function h(100) for each key size from 1 to 64, where:
|
||||
# h(1) = KeyedHash("")
|
||||
# h(x) = KeyedHash(h(x-1) + h(x-2) + ... + h(1))
|
||||
# where the key is a string of "A"s.
|
||||
#
|
||||
digest(1): 6d2c4be21e5fdc57ce6c33c39ef1f19dcad7a3e0747ea1db0d1e5df7b06a90162a4755c95c54b8451e8551473915d0087db4c609fa69e8e475e6efede1215976
|
||||
digest(2): c41173aeb0dffc34989d5c3742cfe1085f031b0d5658cc1fbff70916d4aeeed2a1d47d32b58dd27ece8f19e984e1de3a43c11ba13e9025ce69310e56c93afbe3
|
||||
digest(3): 4a87688b5b162f4655fcb62c63e8e989cb882b117febf3f4a7fc455ee55bfc7cb0987539fb042ca880dd911a6cc669239407e114eadd6bb90c8d0aafa547ba7c
|
||||
digest(4): d7195f35464a95a6c38a051e8061bbb1e0280b5b0b540d65e06c6eea5ce156db3b284fb1ba0e16596bb4dcd8a55ac18a6352199075262a063325d691e39aaf5a
|
||||
digest(5): 00ae23eebcda29537855051ce6d0fb72a5cc7987afb57f6cd1d32d94a72e3543c92dcc8cc12bb11015ac7d4e4166b19f054cd1fd2e53ac27712ecde13592b986
|
||||
digest(6): a8f5f76e1c1618f9d5a21444f42ed7f831940d9bf66a430b1c06f3afde6039eeb9d8decaede8496d61812cdb2e6a9002ab6221a73a1d328ca47463326f2c7166
|
||||
digest(7): 0500fe01d62b5ce5c8dba9841693bb62fa47afafb81b7eef2f7cdcf5fc12a90fdec2d8573aa2418044ea2a16372b7cd32d44752c1d9a95e9e704076c38139922
|
||||
digest(8): 32dcc7ff3c82aa503d3ad1760eb2e4eb299560e35bfb3eb5bd8d3636b776cb76a7f499407435a516c0d123e359d368ac1254bdb40a281aaac9fd211a63d9f039
|
||||
digest(9): e3bdc5edbaf8d231b31f7ccc5554e8078bcd069a875d8e53b9cde0aecea4d71e7e25ed1989f69ddc93d0ed2f7049702fe9e4638b1a7daa659c3f12dfbfbd6c2b
|
||||
digest(10): 8f3ed8857a675881b7dbbf43e6a9d26bde56ca40788f30f2f79e96db75f04550a96dde009c538912ad25590de2b52e4be717fb1342692b751e8533b1d016301f
|
||||
digest(11): 1bca41704cbabc8111cf3c73692fc0a021928ed49f0d6981af3e87ea83646ab89bf7ad6ec472772697c01e616e7357f59f680a5bcd2414adc4cd8a6f9b1aa004
|
||||
digest(12): 8a295c092e1c326e44456517afba77424e924164c2e7e6b0a81eb4fce07ff1ea567112f3f8c51ef364807b71007601f287615ac790c42fef8b33a7ec8edeba26
|
||||
digest(13): 032a0ecaedf44d0c239426bfa6d8baec33403986cf9fa9dd43f1589a24eb28e3aa49271c9df83aa2c13192155438712803f1a2ae44c04305c5b7daa0a01c320e
|
||||
digest(14): e22f59a92601171b166d44f28bf13c04ec97ab3ffcbf5307b888e267d59cd815c0dbcccb5b6af41a57563d2df43f12170cf3bfb21f394a8b8b9efde166dc5170
|
||||
digest(15): b163ec9e26b79b3901bcd7a9e9b69dff2914dffa765e6bcc880118a350dc262c541a6a770d37edba33400063b8b45e53aec69f8eae32fef951606eccc14ad888
|
||||
digest(16): 1914ffd8610676e02a5508d39718d7da558fc64cc97ee915f77ea7ae866184dced37964b403d2ab0288b0793b46668b2fb4bc5c71ed5e0775d2d4e5a00f9888d
|
||||
digest(17): 60422858f02dcda1ec5957360a7c54c9453eaab66f348cc10638c7c08d7500e3d17c0d8ab179fd3c3f357c66c924dc0034d47a46cdb73871c1fd74c4723ec370
|
||||
digest(18): 6a7ce550945ac013a2d8fc627510609ac711b3d9f1020714f5de0aa1c33a5f1a518435e6acf25b093252d74dba8551affc2d90cde5d0ccf042d7e5ac7d5991ee
|
||||
digest(19): 2b12f9a74e6d85970681d99c5db552a4f648cdd277daa1914cc5371e81cccbc141c46301cd5d358eaece34111e2e23ae6186714925e14169b5fc5b5fe32c3165
|
||||
digest(20): 347d2941dc4f0df28a06114aacb03a8d40a1943164593a186d56aa6196e7830d9999afd96f8369ac90244746a88dcf82ea7969c670555ec2bcb5da522930eb51
|
||||
digest(21): d833c9441ab10f275463cf375feaf53459dcde287e75f60e9674fe7f4eeb2079ede3720e3cd29c048d420a397e2f6b7dd6cfcfb726f87075dfbfff3a5585f4ba
|
||||
digest(22): 26249f2125c05b031f4d44fa562ee4b98c92755371683843d0aa3d824bc02922dc7cbadaa792aecd6ac76962658075c074b6543d14008de2d0951b47b969cdf0
|
||||
digest(23): 7c9e08f2667c5a785cdec55ced8c8fa58af041b1787d57d2fb044cdd7f3aac468a0d9a36d636485a7646171988fb67af8f18ecebf5b09df7b147bc07e34ab241
|
||||
digest(24): 0f2e05da4c18503b1bc0ef40ba90b079cb3473bde9e3ba268dfaa1a072588c5d0dffc2a1105412aa8f1712ee6f0be48b7d000e85b736d5decd4c20517631b258
|
||||
digest(25): c1369223639d94bc943e6752855f6705f9fcfba4df23dd73f3756c0babd942bcc6f96f229401246d6403ea24325f00fe0a1bcb8622edef58832dbb174d491ef2
|
||||
digest(26): c413792054d731a46c1a4e563a1227d2a207b957f952e3ac442582505f532f8e5f268922135d48ee20af00437e46f672d03414bd299ba13a4bb286dc4558f2f0
|
||||
digest(27): 81d6e263e54fb98aed83a6eeee61eaa1d766d6a2ead7b5225334ab4c1aae8ae3b9a6409be2d0d57f4964775e7fd7bc92e60501a4e2bdfb98e79a181e8fd683a2
|
||||
digest(28): fc066e9c68df988509a90f77bdd4bcb70c87e9a2572fbee38617677e493cb7de8ca83c7726d95af682dea4c11b8cb3400a8f70e993b4386311deb5ba47a262be
|
||||
digest(29): 4873e0093bb37d17a5ff145b647f11356d95262a12d6bd35d520e89f43ade126957d17a5b28b3e73137a32fac9ff37cd994687ac0eb0241cce80547e2371e375
|
||||
digest(30): be997ad1b05763051960ecd6d81866f4f3b709b1488d7dddea49bcd21836562d9f6cfffdf7eba42f53bd118d04a655f21c1f88e643be9fa23ed66be9417ce882
|
||||
digest(31): 473e15c4efc95a96f0157c0409f7ea286d7e87174fe858d5b010cbe149423c8aa2aa890372067b92d2885408b5b6b974540eb8b359872259928cab24760bb2d7
|
||||
digest(32): 1aaa976bbd4461d7ba13d32535b3f22a5d9d5322f08cb2097b74830cfd0267cefcad67626251e3ed7a3d7e72a293c69295367e0e918ff2fa6fb47c0d58be92c4
|
||||
digest(33): a7eb73a1f83d10df53ccf57709a26a66d6ec96077f9d8252ff323fe6380c0008baecbbb4e6d6b79eb3e46644a2839d04e3dbac317b95b04265e9c72f31fcdb2b
|
||||
digest(34): 70c5ec44061bac63efd7c029e499556e76f31535589f228cd4beecffa2c711c0ccd094ba3f1582cf7a31a8ee6fe65ce2dd161a4d2229c9a9a1e69f412717aba3
|
||||
digest(35): 05bc616695efb2537b94b8bd141460f888f4a65a1029619cc530df57ee1f9570acb88a7f7611e2cf8317a9ed11c4b94d1d80aeccdc5af114799628b5ea19ecf0
|
||||
digest(36): 9c8843c069659ed9029bbde010a757ddf9b70a68ef6c79e5b9768aa2d2bf534aeb13754b00a98fd30fd3b87a2e7a498e46cf185f2cc0616d9174a75769721021
|
||||
digest(37): 0af7248988065e7e0ef57128c62b1832d96b5524014fd88a552247526f6d7d1f68f5e2faab6e0708424d1e9314c6c78290ac83a5a6f5f590befe42188e67acd7
|
||||
digest(38): 9cd6db641ae6d657a06b1b8accec73077813a126b4e2752888beab4c49666d15e9ea5b3b532bda49219cee1288b95ec54bcb10318703078b108cd6a52ea219f5
|
||||
digest(39): 79b20e1fc0444fe0560aa76b419f169213964e0bd47ba3a4810b2c6bbcc832a4fe981e2793b4f189393726e9580099ece6210579ab4e0ab36ee44d2501e89a5c
|
||||
digest(40): 6175fb4e09be6f57be35d463bc08701a2827740f2167fe14c30f056c3c72c4a33003af138a3bd59c3adf27e02be024dc65095447c496b879e9bb752ee0417cf2
|
||||
digest(41): d9310b3e4d6aec39b68bfcdd9342f64827533c8c6578fd4f458f2615d980737503985ec6a840500699bc0e82ef26d44a1d587a215cf5d2f1895363c812e6e8d1
|
||||
digest(42): 373daa436489d4a3fb712dbb35d1d88b17605c4c2696ac3633e5dd06754bddc071cf5a140c926da07fb2068583614cbabcbd871307db6c0e08c671abfde443e8
|
||||
digest(43): 6c24454d76da036c03b6a656d5a0a97ef1db198236ac6bfa0098de662f90d684ec2e60ece65a65875b734a179d36bc18b3aea96163f21d0786eeafdd5b942a9a
|
||||
digest(44): 8a741354aad2690776fb1b90061601a72cee66605ff8428598ff4ee7d3f73dec04dfd790e2fcb807a666651ae5d1f0737af5e86eaf393c42e86691cc4689b8ca
|
||||
digest(45): af9a093a49dc735678a8ab57af74db580cffcb0684ee78c8afc6ed0aff0a1a6c491f9f94b64e0fd73e5ebc7fbba9045c41c69f9c31f5ccedc1ffc318bfe82bc3
|
||||
digest(46): 523248eae8ca0c1950caa0bd7b662ca2c6f478bf2783a140eedc0b3bc6cef02c4c0ab2fc75e09070c99dd78c0eef8dbca893d0e2894e95b25bb994dcd45b9da6
|
||||
digest(47): e7aeb4fa6d2cdadecc310e22552a0fb2643bc9fe44d2ed07069019578e4a443da1c0b03e2c176bd0715378417853452878aa04438cf6c18162168b5ffc0fa419
|
||||
digest(48): 28847291119df6b91ff9afd6bf92766e4582ea3972f618061f10ad1353c79cd427447160c2659cc89a49710573080384d84005401c4d4a3a1a6f4798f71e027d
|
||||
digest(49): b7085854ed8531fc1ed085e2e3fda77a24439165bed51494ec67bdabc67f3b6477b63b37150e741d78514041d9712a0d0dd36deb88aaf8916e74a8b8fef263a6
|
||||
digest(50): e3dcbd233954c82698da64f52963c94f9686e365f72620e8e0c28fe0099676cff442a9b4cb2db7670409cfb9e526731d7d5ec75aafd4823a69ae1ae927cbdab2
|
||||
digest(51): ff44a8a6243631deac23534016a88aa8594a0df46548f9d0a159c23a724b229425f840e3bc733b5ec6eac9615f416b3e66887daeebec1f96441bf44c656fb9a3
|
||||
digest(52): 7ece8bde923403edd531e0d3ccdcbd83f6586cd63701a49652ec75bc08a8c96d356beec2a49a3128b1b2840eb56c305b01db18ef9afaf01b5c3860736a1205e9
|
||||
digest(53): c3ccd4682d512f2530d2c03c60eadd4b7310fc91b5d0b2487a58a15d68ccb89cf8283904d2d22b59b8d38d04f989147220f8c47e59bf8af310bba91b0eb4fe94
|
||||
digest(54): 0eb929786f1f671cc3979b9c1e4aa728e4bee4aeb138eeecbc69c9a15b4b195eed8b3d7b52f27661424f417e8af634cc80add01a79b5daf557df681c2193a97a
|
||||
digest(55): fe3f81f3a1eadd6723f5bd4682adf2ebda87c23d597cf95c7419a421047102d896af325984eb25b612e19f1a6aa788835115a929a77d6215d56850de9308e35c
|
||||
digest(56): 8a5a8b0b8d7489353af63c34883fda176f3512d866c93f1d2369cd21baceece1325eab25323937af579da35ef59c07bbd554410f13f5d86a633a0327dc8b4382
|
||||
digest(57): 90ec0c500a90e4e6c475acc1c589c42cecbce85a7bb16fc49eab8031f8395bb40be01294cd6b5dc2f5f2665bf02fdede3ce3fdbf6425409988448d08da87e0ac
|
||||
digest(58): 50b48141e3b4b538cf1b3ee85c592a029b440bff8b21a0d76e100b8023ef0ddd6bb615c3e80fc783ed6f45e9848ea543a91bf68b7ab43a12aa36a95073b41228
|
||||
digest(59): 4a9313459780228b54caaabb1e10739d07a8e9a43389efdc70fd3d8e572436d10a03a079be853326fe6f9b627a558bb59a970cf0203ef0b62e7fdbd634129464
|
||||
digest(60): 9cb773f4f8f3a8761049135966e52b91a6c4b70af89eeddb21c3d8790e726388017fc0d7087993f99cd0247f3bf9073b2f72c6f92614685b0963f5a72c7be8d7
|
||||
digest(61): 29f2d034dade97f1585b190aa5c7e328b6bf97426f88beeb44debc957f11bdf0d960ebe98fa45f0e808849ce0b5e4a5fa5d07ca1a19c4b38b08665e96b8fe7e1
|
||||
digest(62): 27445935e842e84cd36ff4647c33b5156c13d201722c3510aff3347f27ea76eb43a75ae110e1fce66275a90bd1499f6fa3a77a684b3ee7e66bd5fb3b8c07fb03
|
||||
digest(63): dd8aa2af8b71c13ee5b700894fc77edf6154374c89f59bb905939a7554fa330c6013f82a2721404e371093866ef4fb614f685544a2b1bbfbe04ed0fe7241a823
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,36 @@
|
|||
#
|
||||
# Compute the function h(100) for each digest size from 1 to 32, where:
|
||||
# h(1) = Hash("")
|
||||
# h(x) = Hash(h(x-1) + h(x-2) + ... + h(1))
|
||||
#
|
||||
digest: d3
|
||||
digest: d61f
|
||||
digest: a27ef6
|
||||
digest: dcf93511
|
||||
digest: ef7d1f664b
|
||||
digest: a3b1d9a391c2
|
||||
digest: 75dae3283b6de5
|
||||
digest: bb7d01b685f17e4e
|
||||
digest: 154c17197a3e409372
|
||||
digest: d5ece54d02f09665c8e2
|
||||
digest: 078576a174bdbf879f548d
|
||||
digest: 3207ceaa9592179bf492e42d
|
||||
digest: c52a64fa2a8235eed0c70f7f6c
|
||||
digest: 0def3f9317cf40ef230b80d7a4da
|
||||
digest: 16fb9675fb40afe183c2ee13a9b859
|
||||
digest: 8acd543291933e4ac1548904553b486f
|
||||
digest: 901a5c217a4ba360992c26ab6491aa8363
|
||||
digest: bf8bb21a200a1c972cfe6c188cc4b7fe1098
|
||||
digest: 65d9ce3c6f8b606a2417178f304638b1a8bc54
|
||||
digest: 33d9c57e33cd208b82d771fe0347caf303a9d6d9
|
||||
digest: 4ade30b34b5b5235134b189f276ab0733c9038b505
|
||||
digest: 4454cc9fcd04ef6f45cdbd131f042c609870ed1dcacc
|
||||
digest: 631ba8d46279052eb12e6d043be158a69e31e8cdcfe2c0
|
||||
digest: 857e5108030354252b3421d5fc75e633590a60eef2e93382
|
||||
digest: 6633f8a0b131b39a84e2253b7e4b04fb7de62554d72239b069
|
||||
digest: 85b8b55b304e12424614e4b37bfb3da25ef0d9859305da0e1be1
|
||||
digest: 43ad51b7ed6f4f695ca090a539f877f93bddc690195593bdf0cd21
|
||||
digest: 21bf7c481817a3cd71671c6519a7a829d5137324bfa1a340bbb8928b
|
||||
digest: 7a51d96744348b6f5e666bfa6a3a5a6ed6104c79f0b6ac8b0f550321c8
|
||||
digest: d3f1a340e735cf0be01f194ae5754a9f08309d4d7e4b9fc16f9813ebf98a
|
||||
digest: 69ad7695fa071bde9ddf2c0182c1598af26131ca05e63acacd84f60db201e6
|
|
@ -0,0 +1,37 @@
|
|||
#
|
||||
# Compute the function h(100) for each key size from 1 to 32, where:
|
||||
# h(1) = KeyedHash("")
|
||||
# h(x) = KeyedHash(h(x-1) + h(x-2) + ... + h(1))
|
||||
# where the key is a string of "A"s.
|
||||
#
|
||||
digest(1): 2a967ba7d5ae773dacedf8b88fbaac915abe20004108d1115f8eb1f4ae80d83b
|
||||
digest(2): 2938faaee3d2ec1a3f18673c7cb1bb67c900c535311a1ce026b14b597bc76c8e
|
||||
digest(3): f03e177a359555b47b0fc7b53d99215a2ef27e68a865624e0f89d168d1507cb8
|
||||
digest(4): 8e1cb9ffadddf05f073efb4781aa21cb19ecc3b2f4e3db26c82b9d09809c6b46
|
||||
digest(5): 242792e4fcb7de4480c849ccda85cc2ea420c2519727e290af63b19b78f6f40e
|
||||
digest(6): a4ab02171bf8e039c777c722607654850df82235187cd8f02ede5a6194b4159d
|
||||
digest(7): b2aa4708fdbebb7df875f8aeec201855924418e9ce3bfb8e85d1e587dc4b4793
|
||||
digest(8): 9eceefde4b9e77dad490178ff402e7df09bbfdaac1f07738570334ec7e00cb79
|
||||
digest(9): c706552236de6ad09281af9fc185f3c9fa50399a12b0acfab0f1067cbf96dc17
|
||||
digest(10): a39281fabb2e2b91bdd8dd86708353e78e8ac549e6d350c0b43f7ab1ee86a5e5
|
||||
digest(11): c03fd6dd2fbaf08570bdf166b4d9d4371deb98dff95562a739ab32426928a399
|
||||
digest(12): 1b9efd11915eadb6532049cf29850b38e312f20350b367ff45b874fb74fd90a2
|
||||
digest(13): 89985ae07290911517c4548154c76c8ef762a7e731b034a5a9ec18157bfb9ba3
|
||||
digest(14): c55b6d0f516ce55142ebba41da010eff5945ff14a5863e623f2b90a0727f7f69
|
||||
digest(15): 9feebef3690e37ff9649660428367731f4ff6cbc68c50793694e64540dbd159c
|
||||
digest(16): ab7d5aa443e5ee41d18f30a4d56ea94c1d2c2517c981e0fa9534d69d872b3cdc
|
||||
digest(17): aa52b4322756d7c36827597e12489832ecc847dfe28307d0d6fbb7893c5415ba
|
||||
digest(18): 1c351e2537399cff8ac6d76332fe7f7b9f4bd403ab3f00ced9db59c6a61853a4
|
||||
digest(19): 090cdb16b53acb7531df0ea0423e22785c87645e1c916ed343e3d05859e2eb34
|
||||
digest(20): cfef19757b17357f673542bdc1bb6c3ef9739fe3cd9fc45c30a4bf1003b28e05
|
||||
digest(21): 9af9ccd27d5d175db9a6186765b1e23c77fbfe5e695c8b23f833f37cbbb4faef
|
||||
digest(22): 46f721b6315d95dfb231ae1b7426fc9230a3e0d1a4e51a924b63267d8e273aa7
|
||||
digest(23): 9d30d6ef95cf7432947cb1c4c02278796b7aa3fb7e2c12d5e662da4de3a4efbc
|
||||
digest(24): 3f58cf87601c064cf5287eeb880036515722e816f5c7ee8df7e8810fefbfa567
|
||||
digest(25): df6b7eb34accfd47ba864ba56301deb3fdc8f4894fdbcf6968f99cb31ac8c768
|
||||
digest(26): 3122aed35e3941b9346ad27fcd68c9be86d1cf59fb75cc6cdc5c478909193a15
|
||||
digest(27): f32463d4ff5cc9b3c9f221fc7ad4d571d6661ad39ac9b9c77fb200c1431e446e
|
||||
digest(28): daa1202636a259ce91e1b73b376dcee34550f8a1d294aff7547bd652d98b99be
|
||||
digest(29): 875fd90e8e5085fd48331a96d2e46f87ddf6f7086c9157dabae0bcf7de431220
|
||||
digest(30): 7eaa0af29ca24124f44c21d7c52a8585dd50a487d223bd466c7b4c0db6c016a8
|
||||
digest(31): d6865249ff4b0b2b2a7d7ff772b5279d589945c50239e9c17ee27cbe91251f31
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,7 @@
|
|||
# ExtremelyLongMsgKAT_224.txt
|
||||
# Algorithm Name: Keccak
|
||||
# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche)
|
||||
|
||||
Repeat = 16777216
|
||||
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
|
||||
MD = C42E4AEE858E1A8AD2976896B9D23DD187F64436EE15969AFDBC68C5
|
|
@ -0,0 +1,7 @@
|
|||
# ExtremelyLongMsgKAT_256.txt
|
||||
# Algorithm Name: Keccak
|
||||
# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche)
|
||||
|
||||
Repeat = 16777216
|
||||
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
|
||||
MD = 5F313C39963DCF792B5470D4ADE9F3A356A3E4021748690A958372E2B06F82A4
|
|
@ -0,0 +1,7 @@
|
|||
# ExtremelyLongMsgKAT_384.txt
|
||||
# Algorithm Name: Keccak
|
||||
# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche)
|
||||
|
||||
Repeat = 16777216
|
||||
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
|
||||
MD = 9B7168B4494A80A86408E6B9DC4E5A1837C85DD8FF452ED410F2832959C08C8C0D040A892EB9A755776372D4A8732315
|
|
@ -0,0 +1,7 @@
|
|||
# ExtremelyLongMsgKAT_512.txt
|
||||
# Algorithm Name: Keccak
|
||||
# Principal Submitter: The Keccak Team (Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche)
|
||||
|
||||
Repeat = 16777216
|
||||
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
|
||||
MD = 3E122EDAF37398231CFACA4C7C216C9D66D5B899EC1D7AC617C40C7261906A45FC01617A021E5DA3BD8D4182695B5CB785A28237CBB167590E34718E56D8AAB8
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1 @@
|
|||
Files downloaded on 22 October 2015 from http://keccak.noekeon.org/KeccakKAT-3.zip
|
Loading…
Add table
Add a link
Reference in a new issue