1#
2# This file is part of pyasn1-modules software.
3#
4# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
5# License: http://snmplabs.com/pyasn1/license.html
6#
7# PKCS#1 syntax
8#
9# ASN.1 source from:
10# ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.asn
11#
12# Sample captures could be obtained with "openssl genrsa" command
13#
14from pyasn1.type import constraint
15from pyasn1.type import namedval
16
17from pyasn1_modules.rfc2437 import *
18
19
20class OtherPrimeInfo(univ.Sequence):
21    componentType = namedtype.NamedTypes(
22        namedtype.NamedType('prime', univ.Integer()),
23        namedtype.NamedType('exponent', univ.Integer()),
24        namedtype.NamedType('coefficient', univ.Integer())
25    )
26
27
28class OtherPrimeInfos(univ.SequenceOf):
29    componentType = OtherPrimeInfo()
30    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, MAX)
31
32
33class RSAPrivateKey(univ.Sequence):
34    componentType = namedtype.NamedTypes(
35        namedtype.NamedType('version', univ.Integer(namedValues=namedval.NamedValues(('two-prime', 0), ('multi', 1)))),
36        namedtype.NamedType('modulus', univ.Integer()),
37        namedtype.NamedType('publicExponent', univ.Integer()),
38        namedtype.NamedType('privateExponent', univ.Integer()),
39        namedtype.NamedType('prime1', univ.Integer()),
40        namedtype.NamedType('prime2', univ.Integer()),
41        namedtype.NamedType('exponent1', univ.Integer()),
42        namedtype.NamedType('exponent2', univ.Integer()),
43        namedtype.NamedType('coefficient', univ.Integer()),
44        namedtype.OptionalNamedType('otherPrimeInfos', OtherPrimeInfos())
45    )
46