mirror of
				https://github.com/Legrandin/pycryptodome.git
				synced 2025-11-01 06:01:34 +00:00 
			
		
		
		
	
		
			
	
	
		
			79 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # -*- coding: utf-8 -*- | ||
|  | # | ||
|  | #  SelfTest/Hash/common.py: Common code for Crypto.SelfTest.Hash | ||
|  | # | ||
|  | # ======================================================================= | ||
|  | # Copyright (C) 2008  Dwayne C. Litzenberger <dlitz@dlitz.net> | ||
|  | # | ||
|  | # Permission is hereby granted, free of charge, to any person obtaining | ||
|  | # a copy of this software and associated documentation files (the | ||
|  | # "Software"), to deal in the Software without restriction, including | ||
|  | # without limitation the rights to use, copy, modify, merge, publish, | ||
|  | # distribute, sublicense, and/or sell copies of the Software, and to | ||
|  | # permit persons to whom the Software is furnished to do so. | ||
|  | # | ||
|  | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
|  | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
|  | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
|  | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
|  | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
|  | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
|  | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
|  | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
|  | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
|  | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
|  | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|  | # ======================================================================= | ||
|  | # | ||
|  | 
 | ||
|  | """Self-testing for PyCrypto hash modules""" | ||
|  | 
 | ||
|  | __revision__ = "$Id$" | ||
|  | 
 | ||
|  | import unittest | ||
|  | import binascii | ||
|  | 
 | ||
|  | class HashSelfTest(unittest.TestCase): | ||
|  | 
 | ||
|  |     def __init__(self, hashmod, description, expected, input): | ||
|  |         unittest.TestCase.__init__(self) | ||
|  |         self.hashmod = hashmod | ||
|  |         self.expected = expected | ||
|  |         self.input = input | ||
|  |         self.description = description | ||
|  | 
 | ||
|  |     def shortDescription(self): | ||
|  |         return self.description | ||
|  | 
 | ||
|  |     def runTest(self): | ||
|  |         h = self.hashmod.new() | ||
|  |         h.update(self.input) | ||
|  | 
 | ||
|  |         out1 = binascii.b2a_hex(h.digest()) | ||
|  |         out2 = h.hexdigest() | ||
|  | 
 | ||
|  |         h = self.hashmod.new(self.input) | ||
|  | 
 | ||
|  |         out3 = h.hexdigest() | ||
|  |         out4 = binascii.b2a_hex(h.digest()) | ||
|  | 
 | ||
|  |         self.assertEqual(self.expected, out1) | ||
|  |         self.assertEqual(self.expected, out2) | ||
|  |         self.assertEqual(self.expected, out3) | ||
|  |         self.assertEqual(self.expected, out4) | ||
|  | 
 | ||
|  | def make_hash_testsuite(module, module_name, test_data): | ||
|  |     ts = unittest.TestSuite() | ||
|  |     for i in range(len(test_data)): | ||
|  |         row = test_data[i] | ||
|  |         if len(row) < 3: | ||
|  |             (expected, input) = row | ||
|  |             description = repr(input) | ||
|  |         else: | ||
|  |             (expected, input, description) = row | ||
|  |         name = "%s #%d: %s" % (module_name, i+1, description) | ||
|  |         ts.addTest(HashSelfTest(module, name, expected, input)) | ||
|  |     return ts | ||
|  | 
 | ||
|  | # vim:set ts=4 sw=4 sts=4 expandtab: |