1Upgrading from older versions 2============================= 3 4From versions older than Python-RSA 4.0 5--------------------------------------- 6 7Support for the VARBLOCK/bigfile format has been dropped in version 4.0, after 8being deprecated for a year. There is no alternative implementation in 9Python-RSA 4.0. If you need this, or have ideas on how to do handle encryption 10of large files securely and in a compatible way with existing standards, 11`open a ticket to discuss this`_. 12 13.. _open a ticket to discuss this: 14 https://github.com/sybrenstuvel/python-rsa/issues/new 15 16 17From versions older than Python-RSA 3.4 18--------------------------------------- 19 20Previous versions of Python-RSA were less secure than the current 21version. In order to be able to gradually upgrade your software, those 22old versions will be available until Python-RSA 4.0. 23 24To use version 1.3.3, use this:: 25 26 import rsa._version133 as rsa 27 28And to use version 2.0, use this:: 29 30 import rsa._version200 as rsa 31 32You can import all three versions at the same time. This allows you to 33use an old version to decrypt your messages, and a new version to 34re-encrypt them:: 35 36 import rsa._version200 as rsa200 37 import rsa # this imports version 3.0 38 39 decrypted = rsa200.decrypt(old_crypto, version_200_private_key) 40 new_crypto = rsa.encrypt(decrypted, version_3_public_key) 41 42Those import statements *will create warnings* as they import much 43less secure code into your project. 44 45.. warning:: 46 47 These modules are included to allow upgrading to the latest version 48 of Python-RSA, and not as a way to keep using those old versions. 49 They will be removed in version 4.0. 50 51The random padding introduced in version 3.0 made things much more 52secure, but also requires a larger key to encrypt the same message. 53 54 55Converting keys 56--------------- 57 58Version 3.0 introduced industrial standard RSA keys according to 59PKCS#1. The old keys were just dictionaries. To convert a key from an 60older version of Python-RSA, use the following:: 61 62 import rsa 63 64 # Load the old key somehow. 65 old_pub_key = { 66 'e': 65537, 67 'n': 31698122414741849421263704398157795847591L 68 } 69 70 old_priv_key = { 71 'd': 7506520894712811128876594754922157377793L, 72 'p': 4169414332984308880603L, 73 'q': 7602535963858869797L 74 } 75 76 # Create new key objects like this: 77 pub_key = rsa.PublicKey(n=old_pub_key['n'], e=old_pub_key['e']) 78 79 priv_key = rsa.PrivateKey(n=old_pub_key['n'], e=old_pub_key['e'], 80 d=old_priv_key['d'], p=old_priv_key['p'], q=old_priv_key['q']) 81 82 83 # Or use this shorter notation: 84 pub_key = rsa.PublicKey(**old_pub_key) 85 86 old_priv_key.update(old_pub_key) 87 priv_key = rsa.PrivateKey(**old_priv_key) 88