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:
sign()
encrypt()
decrypt()
blind()
unblind()
Applications should be updated to use instead:
Crypto.Cipher.PKCS1_OAEP
for encrypting using RSA.Crypto.Signature.pkcs1_15
orCrypto.Signature.pss
for signing using RSA.Crypto.Signature.DSS
for signing using DSA.
Method:
generate()
for public key modules does not accept theprogress_func
parameter anymore.Ambiguous method
size
from RSA, DSA and ElGamal key objects have been removed. Instead, use methodssize_in_bytes()
andsize_in_bits()
and check the documentation.The 3 public key object types (RSA, DSA, ElGamal) are now unpickable. You must use the
export_key()
method of each key object and select a good output format: for private keys that means a good password-based encryption scheme.Removed attribute
Crypto.PublicKey.RSA.algorithmIdentifier
.Removed
Crypto.PublicKey.RSA.RSAImplementation
(which should have been private in the first place). Same forCrypto.PublicKey.DSA.DSAImplementation
.
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 useAES.new(key, AES.MODE_ECB)
.Crypto.Cipher.DES3
does not allow keys that degenerate to Single DES.Parameter
segment_size
cannot be 0 for the CFB mode.Parameters
disabled_shortcut
andoverflow
cannot be passed anymore toCrypto.Util.Counter.new
. Parameterallow_wraparound
is ignored (counter block wraparound will always be checked).The
counter
parameter of a CTR mode cipher must be generated viaCrypto.Util.Counter
. It cannot be a generic callable anymore.Keys for
Crypto.Cipher.ARC2
,Crypto.Cipher.ARC4
andCrypto.Cipher.Blowfish
must be at least 40 bits long (still very weak).
The following packages, modules and functions have been removed:
Crypto.Random.OSRNG
,Crypto.Util.winrandom
andCrypto.Random.randpool
. You should useCrypto.Random
only.
Crypto.Cipher.XOR
. If you just want to XOR data, useCrypto.Util.strxor
.
Crypto.Hash.new
. UseCrypto.Hash.<algorithm>.new()
instead.
Crypto.Protocol.AllOrNothing
Crypto.Protocol.Chaffing
Crypto.Util.number.getRandomNumber
Crypto.pct_warnings
Others:
Support for any Python version older than 2.6 is dropped.