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