diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2012-10-11 17:09:13 +0200 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2012-10-11 17:09:13 +0200 |
commit | 9884505885e342de141d1f4a3cc0be8dcd0c54b3 (patch) | |
tree | 01afc10572b127d89f1873a02fcbb81cd3efa23b /rsa/asn1.py | |
parent | 2daadbbcc3857af75713bed74b327485a6636778 (diff) | |
download | rsa-9884505885e342de141d1f4a3cc0be8dcd0c54b3.tar.gz |
Added support for loading public keys from OpenSSL
Diffstat (limited to 'rsa/asn1.py')
-rw-r--r-- | rsa/asn1.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/rsa/asn1.py b/rsa/asn1.py new file mode 100644 index 0000000..706e6cf --- /dev/null +++ b/rsa/asn1.py @@ -0,0 +1,35 @@ +'''ASN.1 definitions. + +Not all ASN.1-handling code use these definitions, but when it does, they should be here. +''' + +from pyasn1.type import univ, namedtype, tag + +class PubKeyHeader(univ.Sequence): + componentType = namedtype.NamedTypes( + namedtype.NamedType('oid', univ.ObjectIdentifier()), + namedtype.NamedType('parameters', univ.Null()), + ) + +class OpenSSLPubKey(univ.Sequence): + componentType = namedtype.NamedTypes( + namedtype.NamedType('header', PubKeyHeader()), + + # This little hack (the implicit tag) allows us to get a Bit String as Octet String + namedtype.NamedType('key', univ.OctetString().subtype( + implicitTag=tag.Tag(tagClass=0, tagFormat=0, tagId=3))), + ) + + +class AsnPubKey(univ.Sequence): + '''ASN.1 contents of DER encoded public key: + + RSAPublicKey ::= SEQUENCE { + modulus INTEGER, -- n + publicExponent INTEGER, -- e + ''' + + componentType = namedtype.NamedTypes( + namedtype.NamedType('modulus', univ.Integer()), + namedtype.NamedType('publicExponent', univ.Integer()), + ) |