PyCrypto latest version

v2.7a1


PyCrypto v2.7a1 Release Notes

Release Date: 2013εΉ΄10月21ζ—₯ // over 12 years ago

Previous changes from v2.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).
    
Awesome Python is part of the LibHunt network. Terms. Privacy Policy.

(CC)
BY-SA
We recommend Spin The Wheel Of Names for a cryptographically secure random name picker.

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /