| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772 |
- 2.7a1
- =====
- * Experimental release. This introduces a new API for AEAD modes, and
- makes a few other minor API changes. These APIs should be considered
- experimental, and may be changed before the final release.
- * New API for authenticated encryption with associated data (AEAD):
- - New block cipher modes:
- - MODE_CCM
- - MODE_EAX
- - MODE_GCM
- - MODE_SIV
- - New methods:
- - .encrypt_and_digest()
- - .decrypt_and_verify()
- - .digest()
- - .verify()
- - New MAC algorithm:
- - Crypto.Cipher.CMAC
- - New .verify() and .hexverify() methods also added to Hash and
- HMAC/CMAC objects, providing constant-time hash comparison.
- (Thanks: Legrandin, Lucas Garron)
- * LP#1132550: Fix MODE_OPENPGP not accepting uppercase 'IV' kwarg.
- * LP#1119552: Fix PKCS#1v1.5 not accepting signatures without the
- optional NULL parameter
- * Add support for import/export of DSA keys. (Thanks: Legrandin)
- * Add support for PKCS#8-encrypted private keys. (Thanks: Legrandin)
- * LP#996193: Fix MODE_OFB requiring padding (it now behaves as a stream
- cipher)
- * Improve C extension autodocs
- * Remove pointless 'error' attribute from stream ciphers.
- * Deprecate the disable_shortcut option to Crypto.Util.Counter;
- Remove __PCT_CTR_SHORTCUT__ entirely.
- * Fix small MODE_CTR memory leak under Python 3.
- * Fix error importing winrandom on Python 3. (Thanks: Jason R. Coombs)
- * FortunaAccumulator: Use time.monotonic for rate-limiting if available
- (i.e. Python 3.3 and later)
- * AES-NI support (Thanks: Sebastian Ramacher)
- * setup.py: Fix compilation on HP-UX 11.31. (Thanks: Adam Woodbeck)
- * ElGamal: Add blinding to ElGamal decryption. (Thanks: Legrandin)
- * Hash: Remove pure-Python wrappers (speeds up hash init 4x-7x)
- * Hash: Add generic Crypto.Hash.new(algo, [data]) function
- (like hashlib.new)
- * Hash: Remove 'oid' attributes; Add 'name' attributes for compatibility
- with hashlib.
- * Hash: Rename SHA -> SHA1 and RIPEMD -> RIPEMD160, since the original
- names are frequently used as the names of other algorithms.
- * setup.py: Use autoconf to generate compiler options;
- Fix OpenBSD build issues.
- * Fix RSA object serialization (i.e. pickle)
- * LP#1061217: random.shuffle takes O(n^2) time.
- (Thanks: Sujay Jayakar, Andrew Cooke)
- * _fastmath: Fix leaks when errors occur.
- (Thanks: Sebastian Ramacher, Andreas Stührk)
- * SHA256/224/384/512: Don't export symbol 'add_length'
- * setup.py: Use os.chmod instead of os.system("chmod ...").
- (Thanks: Sebastian Ramacher)
- * setup.py: The 'test' command now runs the 'build' command first.
- (Thanks: Sebastian Ramacher)
- * New tools/create-pythons.sh and tools/test-all.sh scripts for testing
- against multiple versions of Python.
- * getStrongProne: Fix error handling (Thanks: Sebastian Ramacher)
- * ARC4: Add ARC4-drop[n] cipher support. (Thanks: Legrandin)
- * RSA.importKey: Properly catch IndexError. (Thanks: Sebastian Ramacher)
- * RSA.exportKey: Raise ValueError as documented when key format is
- unknown. (Thanks: Sebastian Ramacher)
- * RSA.exportKey: Always return bytes (Thanks: Sebastian Ramacher)
- * Fix & re-enable some broken tests (Thanks: Sebastian Ramacher)
- * Improve Python 3 compatibility
- * Various documentation fixes and improvements
- (Thanks: Anton Rieder, Legrandin, Sebastian Ramacher, Stefano Rivera)
- * Various cleanups, especially for Python 3.
- 2.6.1
- =====
- * [CVE-2013-1445] Fix PRNG not correctly reseeded in some situations.
- In previous versions of PyCrypto, the Crypto.Random PRNG exhibits a
- race condition that may cause forked processes to generate identical
- sequences of 'random' numbers.
- This is a fairly obscure bug that will (hopefully) not affect many
- applications, but the failure scenario is pretty bad. Here is some
- sample code that illustrates the problem:
- from binascii import hexlify
- import multiprocessing, pprint, time
- import Crypto.Random
- def task_main(arg):
- a = Crypto.Random.get_random_bytes(8)
- time.sleep(0.1)
- b = Crypto.Random.get_random_bytes(8)
- rdy, ack = arg
- rdy.set()
- ack.wait()
- return "%s,%s" % (hexlify(a).decode(),
- hexlify(b).decode())
- n_procs = 4
- manager = multiprocessing.Manager()
- rdys = [manager.Event() for i in range(n_procs)]
- acks = [manager.Event() for i in range(n_procs)]
- Crypto.Random.get_random_bytes(1)
- pool = multiprocessing.Pool(processes=n_procs,
- initializer=Crypto.Random.atfork)
- res_async = pool.map_async(task_main, zip(rdys, acks))
- pool.close()
- [rdy.wait() for rdy in rdys]
- [ack.set() for ack in acks]
- res = res_async.get()
- pprint.pprint(sorted(res))
- pool.join()
- The output should be random, but it looked like this:
- ['c607803ae01aa8c0,2e4de6457a304b34',
- 'c607803ae01aa8c0,af80d08942b4c987',
- 'c607803ae01aa8c0,b0e4c0853de927c4',
- 'c607803ae01aa8c0,f0362585b3fceba4']
- This release fixes the problem by resetting the rate-limiter when
- Crypto.Random.atfork() is invoked. It also adds some tests and a
- few related comments.
- 2.6
- ===
- * [CVE-2012-2417] Fix LP#985164: insecure ElGamal key generation.
- (thanks: Legrandin)
- In the ElGamal schemes (for both encryption and signatures), g is
- supposed to be the generator of the entire Z^*_p group. However, in
- PyCrypto 2.5 and earlier, g is more simply the generator of a random
- sub-group of Z^*_p.
- The result is that the signature space (when the key is used for
- signing) or the public key space (when the key is used for encryption)
- may be greatly reduced from its expected size of log(p) bits, possibly
- down to 1 bit (the worst case if the order of g is 2).
- While it has not been confirmed, it has also been suggested that an
- attacker might be able to use this fact to determine the private key.
- Anyone using ElGamal keys should generate new keys as soon as practical.
- Any additional information about this bug will be tracked at
- https://bugs.launchpad.net/pycrypto/+bug/985164
- * Huge documentation cleanup (thanks: Legrandin).
- * Added more tests, including test vectors from NIST 800-38A
- (thanks: Legrandin)
- * Remove broken MODE_PGP, which never actually worked properly.
- A new mode, MODE_OPENPGP, has been added for people wishing to write
- OpenPGP implementations. Note that this does not implement the full
- OpenPGP specification, only the "OpenPGP CFB mode" part of that
- specification.
- https://bugs.launchpad.net/pycrypto/+bug/996814
- * Fix: getPrime with invalid input causes Python to abort with fatal error
- https://bugs.launchpad.net/pycrypto/+bug/988431
- * Fix: Segfaults within error-handling paths
- (thanks: Paul Howarth & Dave Malcolm)
- https://bugs.launchpad.net/pycrypto/+bug/934294
- * Fix: Block ciphers allow empty string as IV
- https://bugs.launchpad.net/pycrypto/+bug/997464
- * Fix DevURandomRNG to work with Python3's new I/O stack.
- (thanks: Sebastian Ramacher)
- * Remove automagic dependencies on libgmp and libmpir, let the caller
- disable them using args.
- * Many other minor bug fixes and improvements (mostly thanks to Legrandin)
- 2.5
- ===
- * Added PKCS#1 encryption schemes (v1.5 and OAEP). We now have
- a decent, easy-to-use non-textbook RSA implementation. Yay!
- * Added PKCS#1 signature schemes (v1.5 and PSS). v1.5 required some
- extensive changes to Hash modules to contain the algorithm specific
- ASN.1 OID. To that end, we now always have a (thin) Python module to
- hide the one in pure C.
- * Added 2 standard Key Derivation Functions (PBKDF1 and PBKDF2).
- * Added export/import of RSA keys in OpenSSH and PKCS#8 formats.
- * Added password-protected export/import of RSA keys (one old method
- for PKCS#8 PEM only).
- * Added ability to generate RSA key pairs with configurable public
- exponent e.
- * Added ability to construct an RSA key pair even if only the private
- exponent d is known, and not p and q.
- * Added SHA-2 C source code (fully from Lorenz Quack).
- * Unit tests for all the above.
- * Updates to documentation (both inline and in Doc/pycrypt.rst)
- * All of the above changes were put together by Legrandin (Thanks!)
- * Minor bug fixes (setup.py and tests).
- 2.4.1
- =====
- * Fix "error: Setup script exited with error: src/config.h: No such file or
- directory" when installing via easy_install. (Sebastian Ramacher)
- 2.4
- ===
- * Python 3 support! (Thorsten E. Behrens, Anders Sundman)
- PyCrypto now supports every version of Python from 2.1 through 3.2.
- * Timing-attack countermeasures in _fastmath: When built against
- libgmp version 5 or later, we use mpz_powm_sec instead of mpz_powm.
- This should prevent the timing attack described by Geremy Condra at
- PyCon 2011:
- http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-through-the-side-channel-timing-and-implementation-attacks-in-python-4897955
- * New hash modules (for Python >= 2.5 only): SHA224, SHA384, and
- SHA512 (Frédéric Bertolus)
- * Configuration using GNU autoconf. This should help fix a bunch of
- build issues.
- * Support using MPIR as an alternative to GMP.
- * Improve the test command in setup.py, by allowing tests to be
- performed on a single sub-package or module only. (Legrandin)
- You can now do something like this:
- python setup.py test -m Hash.SHA256 --skip-slow-tests
- * Fix double-decref of "counter" when Cipher object initialisation
- fails (Ryan Kelly)
- * Apply patches from Debian's python-crypto 2.3-3 package (Jan
- Dittberner, Sebastian Ramacher):
- - fix-RSA-generate-exception.patch
- - epydoc-exclude-introspect.patch
- - no-usr-local.patch
- * Fix launchpad bug #702835: "Import key code is not compatible with
- GMP library" (Legrandin)
- * More tests, better documentation, various bugfixes.
- 2.3
- ===
- * Fix NameError when attempting to use deprecated getRandomNumber()
- function.
- * _slowmath: Compute RSA u parameter when it's not given to
- RSA.construct. This makes _slowmath behave the same as _fastmath in
- this regard.
- * Make RSA.generate raise a more user-friendly exception message when
- the user tries to generate a bogus-length key.
- 2.2
- ===
- * Deprecated Crypto.Util.number.getRandomNumber(), which had confusing
- semantics. It's been replaced by getRandomNBitInteger and
- getRandomInteger. (Thanks: Lorenz Quack)
- * Better isPrime() and getPrime() implementations that do a real
- Rabin-Miller probabilistic primality test (not the phony test we did
- before with fixed bases). (Thanks: Lorenz Quack)
- * getStrongPrime() implementation for generating RSA primes.
- (Thanks: Lorenz Quack)
- * Support for importing and exporting RSA keys in DER and PEM format.
- (Thanks: Legrandin)
- * Fix PyCrypto when floor division (python -Qnew) is enabled.
- * When building using gcc, use -std=c99 for compilation. This should
- fix building on FreeBSD and NetBSD.
- 2.1.0
- =====
- * Fix building PyCrypto on Win64 using MS Visual Studio 9.
- (Thanks: Nevins Bartolomeo.)
- 2.1.0beta1
- ==========
- * Modified RSA.generate() to ensure that e is coprime to p-1 and q-1.
- Apparently, RSA.generate was capable of generating unusable keys.
- 2.1.0alpha2
- ===========
- * Modified isPrime() to release the global interpreter lock while
- performing computations. (patch from Lorenz Quack)
- * Release the GIL while encrypting, decrypting, and hashing (but not
- during initialization or finalization).
- * API changes:
- - Removed RandomPoolCompat and made Crypto.Util.randpool.RandomPool
- a wrapper around Crypto.Random that emits a DeprecationWarning.
- This is to discourage developers from attempting to provide
- backwards compatibility for systems where there are NO strong
- entropy sources available.
- - Added Crypto.Random.get_random_bytes(). This should allow people
- to use something like this if they want backwards-compatibility:
- try:
- from Crypto.Random import get_random_bytes
- except ImportError:
- try:
- from os import urandom as get_random_bytes
- except ImportError:
- get_random_bytes = open("/dev/urandom", "rb").read
- - Implemented __ne__() on pubkey, which fixes the following broken
- behaviour:
- >>> pk.publickey() == pk.publickey()
- True
- >>> pk.publickey() != pk.publickey()
- True
- (patch from Lorenz Quack)
- - Block ciphers created with MODE_CTR can now operate on strings of
- any size, rather than just multiples of the underlying cipher's
- block size.
- - Crypto.Util.Counter objects now raise OverflowError when they wrap
- around to zero. You can override this new behaviour by passing
- allow_wraparound=True to Counter.new()
- 2.1.0alpha1
- ===========
- * This version supports Python versions 2.1 through 2.6.
- * Clarified copyright status of much of the existing code by tracking
- down Andrew M. Kuchling, Barry A. Warsaw, Jeethu Rao, Joris Bontje,
- Mark Moraes, Paul Swartz, Robey Pointer, and Wim Lewis and getting
- their permission to clarify the license/public-domain status of their
- contributions. Many thanks to all involved!
- * Replaced the test suite with a new, comprehensive package
- (Crypto.SelfTest) that includes documentation about where its test
- vectors came from, or how they were derived.
- Use "python setup.py test" to run the tests after building.
- * API changes:
- - Added Crypto.version_info, which from now on will contain version
- information in a format similar to Python's sys.version_info.
- - Added a new random numbers API (Crypto.Random), and deprecated the
- old one (Crypto.Util.randpool.RandomPool), which was misused more
- often than not.
- The new API is used by invoking Crypto.Random.new() and then just
- reading from the file-like object that is returned.
- CAVEAT: To maintain the security of the PRNG, you must call
- Crypto.Random.atfork() in both the parent and the child processes
- whenever you use os.fork(). Otherwise, the parent and child will
- share copies of the same entropy pool, causing them to return the
- same results! This is a limitation of Python, which does not
- provide readily-accessible hooks to os.fork(). It's also a
- limitation caused by the failure of operating systems to provide
- sufficiently fast, trustworthy sources of cryptographically-strong
- random numbers.
- - Crypto.PublicKey now raises ValueError/TypeError/RuntimeError
- instead of the various custom "error" exceptions
- - Removed the IDEA and RC5 modules due to software patents. Debian
- has been doing this for a while
- - Added Crypto.Random.random, a strong version of the standard Python
- 'random' module.
- - Added Crypto.Util.Counter, providing fast counter implementations
- for use with CTR-mode ciphers.
- * Bug fixes:
- - Fixed padding bug in SHA256; this resulted in bad digests whenever
- (the number of bytes hashed) mod 64 == 55.
- - Fixed a 32-bit limitation on the length of messages the SHA256 module
- could hash.
- - AllOrNothing: Fixed padding bug in digest()
- - Fixed a bad behaviour of the XOR cipher module: It would silently
- truncate all keys to 32 bytes. Now it raises ValueError when the
- key is too long.
- - DSA: Added code to enforce FIPS 186-2 requirements on the size of
- the prime p
- - Fixed the winrandom module, which had been omitted from the build
- process, causing security problems for programs that misuse RandomPool.
- - Fixed infinite loop when attempting to generate RSA keys with an
- odd number of bits in the modulus. (Not that you should do that.)
- * Clarified the documentation for Crypto.Util.number.getRandomNumber.
- Confusingly, this function does NOT return N random bits; It returns
- a random N-bit number, i.e. a random number between 2**(N-1) and (2**N)-1.
- Note that getRandomNumber is for internal use only and may be
- renamed or removed in future releases.
- * Replaced RIPEMD.c with a new implementation (RIPEMD160.c) to
- alleviate copyright concerns.
- * Replaced the DES/DES3 modules with ones based on libtomcrypt-1.16 to
- alleviate copyright concerns.
- * Replaced Blowfish.c with a new implementation to alleviate copyright
- concerns.
- * Added a string-XOR implementation written in C (Crypto.Util.strxor)
- and used it to speed up Crypto.Hash.HMAC
- * Converted documentation to reStructured Text.
- * Added epydoc configuration Doc/epydoc-config
- * setup.py now emits a warning when building without GMP.
- * Added pct-speedtest.py to the source tree for doing performance
- testing on the new code.
- * Cleaned up the code in several places.
- 2.0.1
- =====
- * Fix SHA256 and RIPEMD on AMD64 platform.
- * Deleted Demo/ directory.
- * Add PublicKey to Crypto.__all__
- 2.0
- ===
- * Added SHA256 module contributed by Jeethu Rao, with test data
- from Taylor Boon.
- * Fixed AES.c compilation problems with Borland C.
- (Contributed by Jeethu Rao.)
- * Fix ZeroDivisionErrors on Windows, caused by the system clock
- not having enough resolution.
-
- * Fix 2.1/2.2-incompatible use of (key not in dict),
- pointed out by Ian Bicking.
- * Fix FutureWarning in Crypto.Util.randpool, noted by James P Rutledge.
-
- 1.9alpha6
- =========
- * Util.number.getPrime() would inadvertently round off the bit
- size; if you asked for a 129-bit prime or 135-bit prime, you
- got a 128-bit prime.
- * Added Util/test/prime_speed.py to measure the speed of prime
- generation, and PublicKey/test/rsa_speed.py to measure
- the speed of RSA operations.
- * Merged the _rsa.c and _dsa.c files into a single accelerator
- module, _fastmath.c.
- * Speed improvements: Added fast isPrime() function to _fastmath,
- cutting the time to generate a 1024-bit prime by a factor of 10.
- Optimized the C version of RSA decryption to use a longer series
- of operations that's roughly 3x faster than a single
- exponentiation. (Contributed by Joris Bontje.)
- * Added support to RSA key objects for blinding and unblinding
- data. (Contributed by Joris Bontje.)
- * Simplified RSA key generation: hard-wired the encryption
- exponent to 65537 instead of generating a random prime;
- generate prime factors in a loop until the product
- is large enough.
-
- * Renamed cansign(), canencrypt(), hasprivate(), to
- can_sign, can_encrypt, has_private. If people shriek about
- this change very loudly, I'll add aliases for the old method
- names that log a warning and call the new method.
-
- 1.9alpha5
- =========
- * Many randpool changes. RandomPool now has a
- randomize(N:int) method that can be called to get N
- bytes of entropy for the pool (N defaults to 0,
- which 'fills up' the pool's entropy) KeyboardRandom
- overloads this method.
- * Added src/winrand.c for Crypto.Util.winrandom and
- now use winrandom for _randomize if possible.
- (Calls Windows CryptoAPI CryptGenRandom)
- * Several additional places for stirring the pool,
- capturing inter-event entropy when reading/writing,
- stirring before and after saves.
- * RandomPool.add_event now returns the number of
- estimated bits of added entropy, rather than the
- pool entropy itself (since the pool entropy is
- capped at the number of bits in the pool)
- * Moved termios code from KeyboardRandomPool into a
- KeyboardEntry class, provided a version for Windows
- using msvcrt.
- * Fix randpool.py crash on machines with poor timer resolution.
- (Reported by Mark Moraes and others.)
- * If the GNU GMP library is available, two C extensions will be
- compiled to speed up RSA and DSA operations. (Contributed by
- Paul Swartz.)
- * DES3 with a 24-byte key was broken; now fixed.
- (Patch by Philippe Frycia.)
- 1.9alpha4
- =========
- * Fix compilation problem on Windows.
- * HMAC.py fixed to work with pre-2.2 Pythons
-
- * setup.py now dies if built with Python 1.x
-
- 1.9alpha3
- =========
- * Fix a ref-counting bug that caused core dumps.
- (Reported by Piers Lauder and an anonymous SF poster.)
-
- 1.9alpha2
- =========
- * (Backwards incompatible) The old Crypto.Hash.HMAC module is
- gone, replaced by a copy of hmac.py from Python 2.2's standard
- library. It will display a warning on interpreter versions
- older than 2.2.
-
- * (Backwards incompatible) Restored the Crypto.Protocol package,
- and modernized and tidied up the two modules in it,
- AllOrNothing.py and Chaffing.py, renaming various methods
- and changing the interface.
-
- * (Backwards incompatible) Changed the function names in
- Crypto.Util.RFC1751.
-
- * Restored the Crypto.PublicKey package at user request. I
- think I'll leave it in the package and warn about it in the
- documentation. I hope that eventually I can point to
- someone else's better public-key code, and at that point I
- may insert warnings and begin the process of deprecating
- this code.
- * Fix use of a Python 2.2 C function, replacing it with a
- 2.1-compatible equivalent. (Bug report and patch by Andrew
- Eland.)
- * Fix endianness bugs that caused test case failures on Sparc,
- PPC, and doubtless other platforms.
- * Fixed compilation problem on FreeBSD and MacOS X.
-
- * Expanded the test suite (requires Sancho, from
- http://www.mems-exchange.org/software/sancho/)
- * Added lots of docstrings, so 'pydoc Crypto' now produces
- helpful output. (Open question: maybe *all* of the documentation
- should be moved into docstrings?)
-
- * Make test.py automatically add the build/* directory to sys.path.
- * Removed 'inline' declaration from C functions. Some compilers
- don't support it, and Python's pyconfig.h no longer tells you whether
- it's supported or not. After this change, some ciphers got slower,
- but others got faster.
-
- * The C-level API has been changed to reduce the amount of
- memory-to-memory copying. This makes the code neater, but
- had ambiguous performance effects; again, some ciphers got slower
- and others became faster. Probably this is due to my compiler
- optimizing slightly worse or better as a result.
- * Moved C source implementations into src/ from block/, hash/,
- and stream/. Having Hash/ and hash/ directories causes problems
- on case-insensitive filesystems such as Mac OS.
- * Cleaned up the C code for the extensions.
-
-
- 1.9alpha1
- =========
- * Added Crypto.Cipher.AES.
- * Added the CTR mode and the variable-sized CFB mode from the
- NIST standard on feedback modes.
-
- * Removed Diamond, HAVAL, MD5, Sapphire, SHA, and Skipjack. MD5
- and SHA are included with Python; the others are all of marginal
- usefulness in the real world.
- * Renamed the module-level constants ECB, CFB, &c., to MODE_ECB,
- MODE_CFB, as part of making the block encryption modules
- compliant with PEP 272. (I'm not sure about this change;
- if enough users complain about it, I might back it out.)
-
- * Made the hashing modules compliant with PEP 247 (not backward
- compatible -- the major changes are that the constructor is now
- MD2.new and not MD2.MD2, and the size of the digest is now
- given as 'digest_size', not 'digestsize'.
- * The Crypto.PublicKey package is no longer installed; the
- interfaces are all wrong, and I have no idea what the right
- interfaces should be.
- 1.1alpha2
- =========
- * Most importantly, the distribution has been broken into two
- parts: exportable, and export-controlled. The exportable part
- contains all the hashing algorithms, signature-only public key
- algorithms, chaffing & winnowing, random number generation, various
- utility modules, and the documentation.
- The export-controlled part contains public-key encryption
- algorithms such as RSA and ElGamal, and bulk encryption algorithms
- like DES, IDEA, or Skipjack. Getting this code still requires that
- you go through an access control CGI script, and denies you access if
- you're outside the US or Canada.
- * Added the RIPEMD hashing algorithm. (Contributed by
- Hirendra Hindocha.)
- * Implemented the recently declassified Skipjack block
- encryption algorithm. My implementation runs at 864 K/sec on a
- PII/266, which isn't particularly fast, but you're probably better off
- using another algorithm anyway. :)
- * A simple XOR cipher has been added, mostly for use by the
- chaffing/winnowing code. (Contributed by Barry Warsaw.)
- * Added Protocol.Chaffing and Hash.HMAC.py. (Contributed by
- Barry Warsaw.)
- Protocol.Chaffing implements chaffing and winnowing, recently
- proposed by R. Rivest, which hides a message (the wheat) by adding
- many noise messages to it (the chaff). The chaff can be discarded by
- the receiver through a message authentication code. The neat thing
- about this is that it allows secret communication without actually
- having an encryption algorithm, and therefore this falls within the
- exportable subset.
- * Tidied up randpool.py, and removed its use of a block
- cipher; this makes it work with only the export-controlled subset
- available.
- * Various renamings and reorganizations, mostly internal.
-
- 1.0.2
- =====
- * Changed files to work with Python 1.5; everything has been
- re-arranged into a hierarchical package. (Not backward compatible.)
- The package organization is:
- Crypto.
- Hash.
- MD2, MD4, MD5, SHA, HAVAL
- Cipher.
- ARC2, ARC4, Blowfish, CAST, DES, DES3, Diamond,
- IDEA, RC5, Sapphire
- PublicKey.
- DSA, ElGamal, qNEW, RSA
- Util.
- number, randpool, RFC1751
- Since this is backward-incompatible anyway, I also changed
- module names from all lower-case to mixed-case: diamond -> Diamond,
- rc5 -> RC5, etc. That had been an annoying inconsistency for a while.
-
- * Added CAST5 module contributed by <wiml@hhhh.org>.
- * Added qNEW digital signature algorithm (from the digisign.py
- I advertised a while back). (If anyone would like to suggest new
- algorithms that should be implemented, please do; I think I've got
- everything that's really useful at the moment, but...)
- * Support for keyword arguments has been added. This allowed
- removing the obnoxious key handling for Diamond and RC5, where the
- first few bytes of the key indicated the number of rounds to use, and
- various other parameters. Now you need only do something like:
- from Crypto.Cipher import RC5
- obj = RC5.new(key, RC5.ECB, rounds=8)
- (Not backward compatible.)
- * Various function names have been changed, and parameter
- names altered. None of these were part of the public interface, so it
- shouldn't really matter much.
- * Various bugs fixed, the test suite has been expanded, and
- the build process simplified.
- * Updated the documentation accordingly.
-
- 1.0.1
- =====
-
- * Changed files to work with Python 1.4 .
- * The DES and DES3 modules now automatically correct the
- parity of their keys.
-
- * Added R. Rivest's DES test (see http://theory.lcs.mit.edu/~rivest/destest.txt)
- 1.0.0
- =====
- * REDOC III succumbed to differential cryptanalysis, and has
- been removed.
- * The crypt and rotor modules have been dropped; they're still
- available in the standard Python distribution.
- * The Ultra-Fast crypt() module has been placed in a separate
- distribution.
- * Various bugs fixed.
|