/ 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      )