| Compatibility with standards | |
| ============================ | |
| .. index:: OpenSSL | |
| .. index:: compatibility | |
| Python-RSA implements encryption and signatures according to PKCS#1 | |
| version 1.5. This makes it compatible with the OpenSSL RSA module. | |
| Keys are stored in PEM or DER format according to PKCS#1 v1.5. Private | |
| keys are compatible with OpenSSL. However, OpenSSL uses X.509 for its | |
| public keys, which are not supported. | |
| Encryption: | |
| PKCS#1 v1.5 with at least 8 bytes of random padding | |
| Signatures: | |
| PKCS#1 v1.5 using the following hash methods: | |
| MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-384, SHA3-512 | |
| Private keys: | |
| PKCS#1 v1.5 in PEM and DER format, ASN.1 type RSAPrivateKey | |
| Public keys: | |
| PKCS#1 v1.5 in PEM and DER format, ASN.1 type RSAPublicKey | |
| :ref:`VARBLOCK <bigfiles>` encryption: | |
| Deprecated in Python-RSA 3.4 and removed from Python-RSA 4.0. | |
| Was Python-RSA only, not compatible with any other known application. | |
| .. _openssl: | |
| Interoperability with OpenSSL | |
| ----------------------------- | |
| You can create a 512-bit RSA key in OpenSSL as follows:: | |
| openssl genrsa -out myprivatekey.pem 512 | |
| To get a Python-RSA-compatible public key from OpenSSL, you need the | |
| private key first, then run it through the ``pyrsa-priv2pub`` | |
| command:: | |
| pyrsa-priv2pub -i myprivatekey.pem -o mypublickey.pem | |
| Encryption and decryption is also compatible:: | |
| $ echo hello there > testfile.txt | |
| $ pyrsa-encrypt -i testfile.txt -o testfile.rsa publickey.pem | |
| $ openssl rsautl -in testfile.rsa -inkey privatekey.pem -decrypt | |
| hello there | |
| Interoperability with PKCS#8 | |
| ---------------------------- | |
| The standard PKCS#8 is widely used, and more complex than the PKCS#1 | |
| v1.5 supported by Python-RSA. In order to extract a key from the | |
| PKCS#8 format you need an external tool such as OpenSSL:: | |
| openssl rsa -in privatekey-pkcs8.pem -out privatekey.pem | |
| You can then extract the corresponding public key as described above. |