Compatibility with PyCrypto¶
PyCryptodome exposes almost the same API as the old PyCrypto so that most applications will run unmodified. However, a very few breaks in compatibility had to be introduced for those parts of the API that represented a security hazard or that were too hard to maintain.
Specifically, for public key cryptography:
The following methods from public key objects (RSA, DSA, ElGamal) have been removed:
Applications should be updated to use instead:
generate()for public key modules does not accept the
sizefrom RSA, DSA and ElGamal key objects have bene removed. Instead, use methods
size_in_bits()and check the documentation.
The 3 public key object types (RSA, DSA, ElGamal) are now unpickable. You must use the
exportKey()method of each key object and select a good output format: for private keys that means a good password-based encryption scheme.
Crypto.PublicKey.RSA.RSAImplementation(which should have been private in the first place). Same for
For symmetric key cryptography:
- Symmetric ciphers do not have ECB as default mode anymore. ECB is not semantically secure
and it exposes correlation across blocks.
An expression like
AES.new(key)will now fail. If ECB is the desired mode, one has to explicitly use
Crypto.Cipher.DES3does not allow keys that degenerate to Single DES.
segment_sizecannot be 0 for the CFB mode.
overflowcannot be passed anymore to
allow_wraparoundis ignored (counter block wraparound will always be checked).
counterparameter of a CTR mode cipher must be generated via
Crypto.Util.Counter. It cannot be a generic callable anymore.
- Keys for
Crypto.Cipher.Blowfishmust be at least 40 bits long (still very weak).
The following packages, modules and functions have been removed:
Crypto.Random.randpool. You should use
Crypto.Cipher.XOR. If you just want to XOR data, use
- Support for any Python version older than 2.4 is dropped.
For Python 2.4 only, a dependency on the
ctypespackage is introduced.