/ adafruit_rsa / asn1.py
asn1.py
1 # -*- coding: utf-8 -*- 2 # 3 # Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # https://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 """ASN.1 definitions. 18 19 Not all ASN.1-handling code use these definitions, but when it does, they should be here. 20 """ 21 22 # pylint: disable=no-name-in-module, too-few-public-methods 23 from pyasn1.type import univ, namedtype, tag 24 25 __version__ = "0.0.0-auto.0" 26 __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_RSA.git" 27 28 29 class PubKeyHeader(univ.Sequence): 30 """OpenSSL Public Key Header""" 31 32 componentType = namedtype.NamedTypes( 33 namedtype.NamedType("oid", univ.ObjectIdentifier()), 34 namedtype.NamedType("parameters", univ.Null()), 35 ) 36 37 38 class OpenSSLPubKey(univ.Sequence): 39 """Creates a PKCS#1 DER-encoded NamedType.""" 40 41 componentType = namedtype.NamedTypes( 42 namedtype.NamedType("header", PubKeyHeader()), 43 # This little hack (the implicit tag) allows us to get a Bit String as Octet String 44 namedtype.NamedType( 45 "key", 46 univ.OctetString().subtype( 47 implicitTag=tag.Tag(tagClass=0, tagFormat=0, tagId=3) 48 ), 49 ), 50 ) 51 52 53 class AsnPubKey(univ.Sequence): 54 """ASN.1 contents of DER encoded public key: 55 56 RSAPublicKey ::= SEQUENCE { 57 modulus INTEGER, -- n 58 publicExponent INTEGER, -- e 59 """ 60 61 componentType = namedtype.NamedTypes( 62 namedtype.NamedType("modulus", univ.Integer()), 63 namedtype.NamedType("publicExponent", univ.Integer()), 64 )