2 # Test suite to check compliance with PEP 247, the standard API for
8 def check_hash_module(module
, key
=None):
9 assert hasattr(module
, 'digest_size'), "Must have digest_size"
10 assert (module
.digest_size
is None or
11 module
.digest_size
> 0), "digest_size must be None or positive"
14 obj1
= module
.new(key
)
15 obj2
= module
.new(key
, "string")
17 h1
= module
.new(key
, "string").digest()
18 obj3
= module
.new(key
) ; obj3
.update("string") ; h2
= obj3
.digest()
19 assert h1
== h2
, "Hashes must match"
23 obj2
= module
.new("string")
25 h1
= module
.new("string").digest()
26 obj3
= module
.new() ; obj3
.update("string") ; h2
= obj3
.digest()
27 assert h1
== h2
, "Hashes must match"
29 assert hasattr(obj1
, 'digest_size'), "Objects must have digest_size attr"
30 if module
.digest_size
is not None:
31 assert obj1
.digest_size
== module
.digest_size
, "digest_size must match"
32 assert obj1
.digest_size
== len(h1
), "digest_size must match actual size"
34 obj_copy
= obj1
.copy()
35 assert obj1
.digest() == obj_copy
.digest(), "Copied objects must match"
36 assert obj1
.hexdigest() == obj_copy
.hexdigest(), \
37 "Copied objects must match"
38 digest
, hexdigest
= obj1
.digest(), obj1
.hexdigest()
41 hd2
+= "%02x" % ord(byte
)
42 assert hd2
== hexdigest
, "hexdigest doesn't appear correct"
44 print 'Module', module
.__name
__, 'seems to comply with PEP 247'
47 if __name__
== '__main__':
48 check_hash_module(md5
)
49 check_hash_module(sha
)
50 check_hash_module(hmac
, key
='abc')