[pycrypto] RSA output on long inputs can sometimes be gibberish

Sebastian Ramacher sebastian+lists at ramacher.at
Fri Jul 27 03:15:58 EDT 2012


Running the tests fails most of the time with:

$ python -m ejtp.rsatest
key1 >> key2
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/tmp/EJTP-lib-python/ejtp/rsatest.py", line 33, in <module>
    test_run(key1, key2)
  File "/tmp/EJTP-lib-python/ejtp/rsatest.py", line 27, in test_run
    ciphertext = encode(plaintext, key1, key2)
  File "/tmp/EJTP-lib-python/ejtp/rsatest.py", line 19, in encode
    return reciever.encrypt(sender.decrypt(msg))
  File "ejtp/util/crypto/rsa.py", line 44, in encrypt
    value[marker:marker+self.blocksize], "")[0])
  File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 150, in
encrypt
    return pubkey.pubkey.encrypt(self, plaintext, K)
  File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/pubkey.py", line 75,
in encrypt
    ciphertext=self._encrypt(plaintext, K)
  File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 224, in
_encrypt
    return (self.key._encrypt(c),)
ValueError: Plaintext too large

The code in ejtp/util/crypto/rsa.py looks like you're not doing proper padding
and using fixed sized blocks that don't depend on the key parameters. That won't
work.

You might want to have a look at PKCS#1 OAEP and pycrypto's
Crypto.Cipher.PKCS1_OAEP module [1].

Kind regards

[1]
https://www.dlitz.net/software/pycrypto/api/current/Crypto.Cipher.PKCS1_OAEP-module.html


More information about the pycrypto mailing list