mirror of
https://github.com/autistic-symposium/sec-pentesting-toolkit.git
synced 2025-07-24 07:31:00 -04:00
699 lines
24 KiB
Text
699 lines
24 KiB
Text
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.
|