19
19
# ===================================================================
23
__all__ = ['new', 'digest_size']
25
from Crypto.Util.wrapper import Wrapper
21
"""SHA-256 cryptographic hash algorithm.
23
SHA-256 belongs to the SHA-2_ family of cryptographic hashes.
24
It produces the 256 bit digest of a message.
26
>>> from Crypto.Hash import SHA256
29
>>> h.update(b'Hello')
30
>>> print h.hexdigest()
32
*SHA* stands for Secure Hash Algorithm.
34
.. _SHA-2: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
39
__all__ = ['new', 'digest_size', 'SHA256Hash' ]
26
41
from Crypto.Util.py3compat import *
28
# The OID for SHA-256 is:
30
# id-sha256 OBJECT IDENTIFIER ::= {
31
# joint-iso-itu-t(2) country(16) us(840) organization(1)
32
# gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1
35
oid = b('\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01')
38
obj = Wrapper(hashFactory, data)
40
obj.new = globals()['new']
41
if not hasattr(obj, 'digest_size'):
42
obj.digest_size = digest_size
42
from Crypto.Hash.hashalgo import HashAlgo
50
49
from Crypto.Hash import _SHA256
51
50
hashFactory = _SHA256
52
class SHA256Hash(HashAlgo):
53
"""Class that implements a SHA-256 hash
55
:undocumented: block_size
58
#: ASN.1 Object identifier (OID)::
60
#: id-sha256 OBJECT IDENTIFIER ::= {
61
#: joint-iso-itu-t(2) country(16) us(840) organization(1)
62
#: gov(101) csor(3) nistalgorithm(4) hashalgs(2) 1
65
#: This value uniquely identifies the SHA-256 algorithm.
66
oid = b('\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01')
71
def __init__(self, data=None):
72
HashAlgo.__init__(self, hashFactory, data)
74
def new(self, data=None):
75
return SHA256Hash(data)
78
"""Return a fresh instance of the hash object.
82
The very first chunk of the message to hash.
83
It is equivalent to an early call to `SHA256Hash.update()`.
86
:Return: A `SHA256Hash` object
88
return SHA256Hash().new(data)
90
#: The size of the resulting hash in bytes.
91
digest_size = SHA256Hash.digest_size
93
#: The internal block size of the hash algorithm in bytes.
94
block_size = SHA256Hash.block_size