blob: e6b59a3c99fd28a5b070ab80d1e11734370d2033 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
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-256, SHA-384, SHA-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:
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.
|