Download PySkein

PySkein runs with Python 3.1 or higher. It was mainly tested on 64-bit Linux, but should run on various platforms supported by Python. Due to the design of the Skein algorithm, performance is significantly lower on 32-bit systems.

Download the most recent version 1.0:

Note: If you have a version of PySkein <0.5 installed, please make sure to manually delete “skein.*” from your Python site-packages directory before installing a more recent version.

Skein versions

Older versions of PySkein may implement previous versions of the Skein specification and therefore produce different hashing outputs. The following table shows which version of PySkein corresponds to which version of the specification:

PySkein Skein specification Change
since 0.7 1.3 new key schedule constant
0.5 - 0.6.3 1.2 new rotation constants
0.1 - 0.4 1.1 corrected config string length

Version 1.0 of the Skein specification contained an error in the reference implementation and test vectors, and was never implemented in any release of PySkein.

Changes between version

1.0
  • Removed deprecated alias ‘mac’ for parameter ‘key’
  • Added method Random.getrandbits, enabling arbitrarily large random number in Random.randrange (proposed by Aaron Gallagher)
  • Dropped support for Python 3.0
0.7.1
  • Fixed a bug in digest(a, b), i.e. the optimization of digest()[a:b], where the last byte could be wrong when digest_size was large. This also affected the last byte of the output of StreamCipher.encrypt()!
  • Added RandomBytes class as a low-level PRNG interface
  • Added script ‘skein-random’, an efficient alternative to /dev/urandom
  • Fixed small bug where StreamCipher.encrypt() would advance the key stream even when raising an exception
  • Added method StreamCipher.keystream() (proposed by Roy Kipp)
  • Allowed start == stop in digest(start, stop). As a consequence, StreamCipher.encrypt() now doesn’t complain about empty byte objects.
0.7
  • Update to Skein Version 1.3 (tweak of key schedule constant)
  • Added the last two missing input parameters: ‘public_key’ and ‘key_id’
  • Renamed ‘mac’ parameter to ‘key’, kept ‘mac’ as deprecated alias
  • Made keyword-only usage in skein*() mandatory
  • Extended digest() so that it can return slices of the digest
  • Increased digest_bits limit to 2**64-1 according to specification
  • Added StreamCipher
  • Revised PRNG to follow the specification more closely
0.6.3
  • Fixed tests to work with Python 3.2
  • Sped up generation of long digests
  • Allowed digest sizes of any number of bits (not only complete bytes)
  • Allowed message sizes of any number of bits (not only complete bytes) by introducing keyword argument ‘bits’ in update().
  • Added attribute “hashed_bits” to skein objects
0.6.2
  • Implemented second thread in tree hashing, using two cores on multi-core machines. This can improve hashing performance by more than 50%.
  • Included files to make re-building the docs work again
0.6.1
  • Fixed a bug in copy()ing tree hash objects
  • Made hash objects picklable
  • Improved repr() of hash objects
  • Fixed several issues with Python 3.0
0.6
  • Incremental tree hashing with arbitrary tree parameters
  • Restricted digest_bits to < 2^31 bits (256 MB!)
  • Disabled precomputed IVs (their performance benefit is negligible)
  • Deprecated all non-keyword arguments of skein*() functions except ‘init’ and ‘digest_bits’
0.5.2
  • Release the GIL to allow multiple threads to hash in parallel on multi-core systems
0.5.1
  • Fixed reference leak when changing tweak value on threefish object
0.5
  • Updated rotation constants to new Skein specification (version 1.2)
  • Added implementation of Skein PRNG
0.4
  • Hashing with personalization string
  • Hashing with nonce value
0.3.1
  • Improved demo script “threefish”
  • Better compatibility with Python 3.1
0.3
  • Threefish block decryption
  • Demo scripts “skeinsum” and “threefish”
0.2
  • Support for message authentication codes
  • Threefish block encryption (but no decryption)
  • Fixed one or two reference leaks
0.1
  • Skein-256, Skein-512, and Skein-1024 hashing

Table Of Contents

Previous topic

Demo Scripts

This Page