# SHA-1

SHA-1 produces the 160 bit digest of a message. For example:

    >>> from Crypto.Hash import SHA1
    >>>
    >>> h = SHA1.new()
    >>> h.update(b'Hello')
    >>> print h.hexdigest()

SHA stands for Secure Hash Algorithm.

Warning

This algorithm is not considered secure. Do not use it for new designs.

Warning

SHA-1 is vulnerable to length-extension attacks, which are relevant if you are computing the hash of a secret message.

For instance, let’s say you were planning to build a cheap MAC by concatenating a secret key to a public message m (bad idea!):

h = \text{SHA-1}(m || k)

By only knowing the digest h and the length of m and k, the attacker can easily compute a second digest h’:

h' = \text{SHA-1}(m || p || z)

where p is a well-known bit string and the attacker can pick a bit string z at will.

Crypto.SHA1.new(msg=None)

  Create a new hash object.

  Parameters:

    msg (byte string) – Optional. The very first chunk of the message to hash. It is equivalent to an early call to `update()`.

  Returns:

    A `SHA1_Hash` hash object

class Crypto.SHA1.SHA1_Hash

  A SHA-1 hash object. Do not instantiate directly. Use the `new()` function.

  Variables:

    - oid (string) – ASN.1 Object ID

    - block_size (integer) – the size in bytes of the internal message block, input to the compression function

    - digest_size (integer) – the size in bytes of the resulting hash

  update(msg)

    Continue hashing of a message by consuming the next chunk of data.

    Parameters:

      msg – The next chunk of the message being hashed.

  digest()

    Return the binary (non-printable) digest of the message that has been hashed so far.

    Returns:

      The hash digest, computed over the data processed so far. Binary form.

    Return type:

      byte string

  hexdigest()

    Return the printable digest of the message that has been hashed so far.

    Returns:

      The hash digest, computed over the data processed so far. Hexadecimal encoded.

    Return type:

      string