Computing Skein hashes — PySkein v0.3.1 documentation

### Navigation

- index
- next |
- previous |
- PySkein v0.3.1 documentation »

# Computing Skein hashes

The interface for hashing with Skein is conveniently similar to the `hashlib` module of Python’s standard library. A new hash object is created by one of the following three functions:

`skein.` `skein256`(init=b"", digest_bits=256, mac=b"")

`skein.` `skein512`(init=b"", digest_bits=512, mac=b"")

`skein.` `skein1024`(init=b"", digest_bits=1024, mac=b"")
  These constructor functions return a corresponding hash object for Skein-256, Skein-512, or Skein-1024 (i.e. 256, 512, or 1024 bits internal state). They optionally take an initial chunk of data to hash, the desired digest length in bits (must be a multiple of 8), and a message authentication code to hash into the digest (as defined in the Skein specification).

A hash object has the following methods:

`update`(data)
  Hash the given chunk of (bytes) data into the internal state. (String data has to be encoded to bytes first.) Repeated calls are equivalent to a single call with the concatenation of all the arguments.

`digest`()
  Return the digest of all data processed so far. This is a bytes object of length `digest_size`.

`hexdigest`()
  Like `digest()`, but returning the digest as a string of hexadecimal digits.

`copy`()
  Return a clone of the hash object, e.g. to efficiently compute hashes of data sharing a common prefix.

In addition each hash object has the following attributes:

`name`
  Name of the algorithm, i.e. `"Skein-256"`, `"Skein-512"`, or `"Skein-1024"`.

`block_bits`
  Internal state size in bits, i.e. `256`, `512`, or `1024`.

`block_size`
  Internal state size in bytes (conforming to `hashlib`), i.e. `32`, `64`, or `128`.

`digest_bits`
  Output digest length in bits, i.e. the value given to the constructor function (or default).

`digest_size`
  Digest size in bytes.

## Examples

Make a Skein-512 hash object with default digest length (512 bits) and hash some data:

    >>> from skein import skein256, skein512, skein1024
    >>> h = skein512()
    >>> h.update(b"Nobody inspects")
    >>> h.update(b" the spammish repetition")
    >>> h.digest()
    b'r\xac\xe9\xb5R\xc8\x82b\x1d[\xfa\xe1*/\x86\x91\xa4\xf1Wk\xb4~3\xf3B\xc3\xc0\x1dV\x94>\x00\xd3\xdb\x7f\xed1\xe3#\xc1\x00a^\xc2\x1d1\xdc?\xdb\x16`\xf7\xda\xcb1b5,\xa0\xf5W"\x1fX'
    >>> h.digest_size, h.digest_bits
    (64, 512)
    >>> h.block_size, h.block_bits
    (64, 512)

Similarly for Skein-1024-384:

    >>> h = skein1024(b"Nobody inspects the spammish repetition", digest_bits=384)
    >>> h.hexdigest()
    'd97af1a979016051a38e00f53fa56e683d6c4796860c2819c4f3eb8d49a5e844216b7fdadbac636e95fd69b5f1b98427'
    >>> h.digest_size, h.digest_bits
    (48, 384)
    >>> h.block_size, h.block_bits
    (128, 1024)

Hashing with or without message authentication code (MAC):

    >>> skein256(b"foo", mac=b"bar").hexdigest()
    '267daea2fd2ff91611e7d6a162dd4927df549a4aaa2adfa78b49339a91f10bcb'
    >>> skein256(b"foo").hexdigest()
    '7c3181538a0b56933ae51e88d938308eaef834b6a27eaa7ea7e60efb2d83c700'

### Navigation

- index
- next |
- previous |
- PySkein v0.3.1 documentation »