| Introduction & history | |
| ====================== | |
| Python-RSA's history starts in 2006. As a student assignment for the | |
| University of Amsterdam we wrote a RSA implementation. We chose Python | |
| for various reasons; one of the most important reasons was the | |
| `unlimited precision integer`_ support. | |
| .. _`unlimited precision integer`: | |
| https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex | |
| It started out as just a module for calculating large primes, and RSA | |
| encryption, decryption, signing and verification using those large | |
| numbers. It also included generating public and private keys. There | |
| was no functionality for working with byte sequences (such as files) | |
| yet. | |
| Version 1.0 did include support for byte sequences, but quite clunky, | |
| mostly because it didn't support 0-bytes and thus was unsuitable for | |
| binary messages. | |
| Version 2.0 introduced a lot of improvements by Barry Mead, but still | |
| wasn't compatible with other RSA implementations and used no random | |
| padding. | |
| Version 3.0 introduced PKCS#1 v1.5 functionality, which resulted in | |
| compatibility with OpenSSL and many others implementing the same | |
| standard. Random padding was introduced that considerably increased | |
| security, which also resulted in the ability to encrypt and decrypt | |
| binary messages. | |
| Key generation was also improved in version 3.0, ensuring that you | |
| really get the number of bits you asked for. At the same time key | |
| generation speed was greatly improved. The ability to save and load | |
| public and private keys in PEM and DER format as also added. | |