1#
2# This file is part of pyasn1-modules.
3#
4# Copyright (c) 2017, Danielle Madeley <danielle@madeley.id.au>
5# License: http://pyasn1.sf.net/license.html
6#
7# Derived from RFC 3279
8#
9from pyasn1.type import namedtype
10from pyasn1.type import namedval
11from pyasn1.type import univ
12
13
14def _OID(*components):
15    output = []
16    for x in tuple(components):
17        if isinstance(x, univ.ObjectIdentifier):
18            output.extend(list(x))
19        else:
20            output.append(int(x))
21
22    return univ.ObjectIdentifier(output)
23
24
25md2 = _OID(1, 2, 840, 113549, 2, 2)
26md5 = _OID(1, 2, 840, 113549, 2, 5)
27id_sha1 = _OID(1, 3, 14, 3, 2, 26)
28id_dsa = _OID(1, 2, 840, 10040, 4, 1)
29
30
31class DSAPublicKey(univ.Integer):
32    pass
33
34
35class Dss_Parms(univ.Sequence):
36    componentType = namedtype.NamedTypes(
37        namedtype.NamedType('p', univ.Integer()),
38        namedtype.NamedType('q', univ.Integer()),
39        namedtype.NamedType('g', univ.Integer())
40    )
41
42
43id_dsa_with_sha1 = _OID(1, 2, 840, 10040, 4, 3)
44
45
46class Dss_Sig_Value(univ.Sequence):
47    componentType = namedtype.NamedTypes(
48        namedtype.NamedType('r', univ.Integer()),
49        namedtype.NamedType('s', univ.Integer())
50    )
51
52
53pkcs_1 = _OID(1, 2, 840, 113549, 1, 1)
54rsaEncryption = _OID(pkcs_1, 1)
55md2WithRSAEncryption = _OID(pkcs_1, 2)
56md5WithRSAEncryption = _OID(pkcs_1, 4)
57sha1WithRSAEncryption = _OID(pkcs_1, 5)
58
59
60class RSAPublicKey(univ.Sequence):
61    componentType = namedtype.NamedTypes(
62        namedtype.NamedType('modulus', univ.Integer()),
63        namedtype.NamedType('publicExponent', univ.Integer())
64    )
65
66
67dhpublicnumber = _OID(1, 2, 840, 10046, 2, 1)
68
69
70class DHPublicKey(univ.Integer):
71    pass
72
73
74class ValidationParms(univ.Sequence):
75    componentType = namedtype.NamedTypes(
76        namedtype.NamedType('seed', univ.BitString()),
77        namedtype.NamedType('pgenCounter', univ.Integer())
78    )
79
80
81class DomainParameters(univ.Sequence):
82    componentType = namedtype.NamedTypes(
83        namedtype.NamedType('p', univ.Integer()),
84        namedtype.NamedType('g', univ.Integer()),
85        namedtype.NamedType('q', univ.Integer()),
86        namedtype.OptionalNamedType('j', univ.Integer()),
87        namedtype.OptionalNamedType('validationParms', ValidationParms())
88    )
89
90
91id_keyExchangeAlgorithm = _OID(2, 16, 840, 1, 101, 2, 1, 1, 22)
92
93
94class KEA_Parms_Id(univ.OctetString):
95    pass
96
97
98ansi_X9_62 = _OID(1, 2, 840, 10045)
99
100
101class FieldID(univ.Sequence):
102    componentType = namedtype.NamedTypes(
103        namedtype.NamedType('fieldType', univ.ObjectIdentifier()),
104        namedtype.NamedType('parameters', univ.Any())
105    )
106
107
108id_ecSigType = _OID(ansi_X9_62, 4)
109ecdsa_with_SHA1 = _OID(id_ecSigType, 1)
110
111
112class ECDSA_Sig_Value(univ.Sequence):
113    componentType = namedtype.NamedTypes(
114        namedtype.NamedType('r', univ.Integer()),
115        namedtype.NamedType('s', univ.Integer())
116    )
117
118
119id_fieldType = _OID(ansi_X9_62, 1)
120prime_field = _OID(id_fieldType, 1)
121
122
123class Prime_p(univ.Integer):
124    pass
125
126
127characteristic_two_field = _OID(id_fieldType, 2)
128
129
130class Characteristic_two(univ.Sequence):
131    componentType = namedtype.NamedTypes(
132        namedtype.NamedType('m', univ.Integer()),
133        namedtype.NamedType('basis', univ.ObjectIdentifier()),
134        namedtype.NamedType('parameters', univ.Any())
135    )
136
137
138id_characteristic_two_basis = _OID(characteristic_two_field, 3)
139gnBasis = _OID(id_characteristic_two_basis, 1)
140tpBasis = _OID(id_characteristic_two_basis, 2)
141
142
143class Trinomial(univ.Integer):
144    pass
145
146
147ppBasis = _OID(id_characteristic_two_basis, 3)
148
149
150class Pentanomial(univ.Sequence):
151    componentType = namedtype.NamedTypes(
152        namedtype.NamedType('k1', univ.Integer()),
153        namedtype.NamedType('k2', univ.Integer()),
154        namedtype.NamedType('k3', univ.Integer())
155    )
156
157
158class FieldElement(univ.OctetString):
159    pass
160
161
162class ECPoint(univ.OctetString):
163    pass
164
165
166class Curve(univ.Sequence):
167    componentType = namedtype.NamedTypes(
168        namedtype.NamedType('a', FieldElement()),
169        namedtype.NamedType('b', FieldElement()),
170        namedtype.OptionalNamedType('seed', univ.BitString())
171    )
172
173
174class ECPVer(univ.Integer):
175    namedValues = namedval.NamedValues(
176        ('ecpVer1', 1)
177    )
178
179
180class ECParameters(univ.Sequence):
181    componentType = namedtype.NamedTypes(
182        namedtype.NamedType('version', ECPVer()),
183        namedtype.NamedType('fieldID', FieldID()),
184        namedtype.NamedType('curve', Curve()),
185        namedtype.NamedType('base', ECPoint()),
186        namedtype.NamedType('order', univ.Integer()),
187        namedtype.OptionalNamedType('cofactor', univ.Integer())
188    )
189
190
191class EcpkParameters(univ.Choice):
192    componentType = namedtype.NamedTypes(
193        namedtype.NamedType('ecParameters', ECParameters()),
194        namedtype.NamedType('namedCurve', univ.ObjectIdentifier()),
195        namedtype.NamedType('implicitlyCA', univ.Null())
196    )
197
198
199id_publicKeyType = _OID(ansi_X9_62, 2)
200id_ecPublicKey = _OID(id_publicKeyType, 1)
201
202ellipticCurve = _OID(ansi_X9_62, 3)
203
204c_TwoCurve = _OID(ellipticCurve, 0)
205c2pnb163v1 = _OID(c_TwoCurve, 1)
206c2pnb163v2 = _OID(c_TwoCurve, 2)
207c2pnb163v3 = _OID(c_TwoCurve, 3)
208c2pnb176w1 = _OID(c_TwoCurve, 4)
209c2tnb191v1 = _OID(c_TwoCurve, 5)
210c2tnb191v2 = _OID(c_TwoCurve, 6)
211c2tnb191v3 = _OID(c_TwoCurve, 7)
212c2onb191v4 = _OID(c_TwoCurve, 8)
213c2onb191v5 = _OID(c_TwoCurve, 9)
214c2pnb208w1 = _OID(c_TwoCurve, 10)
215c2tnb239v1 = _OID(c_TwoCurve, 11)
216c2tnb239v2 = _OID(c_TwoCurve, 12)
217c2tnb239v3 = _OID(c_TwoCurve, 13)
218c2onb239v4 = _OID(c_TwoCurve, 14)
219c2onb239v5 = _OID(c_TwoCurve, 15)
220c2pnb272w1 = _OID(c_TwoCurve, 16)
221c2pnb304w1 = _OID(c_TwoCurve, 17)
222c2tnb359v1 = _OID(c_TwoCurve, 18)
223c2pnb368w1 = _OID(c_TwoCurve, 19)
224c2tnb431r1 = _OID(c_TwoCurve, 20)
225
226primeCurve = _OID(ellipticCurve, 1)
227prime192v1 = _OID(primeCurve, 1)
228prime192v2 = _OID(primeCurve, 2)
229prime192v3 = _OID(primeCurve, 3)
230prime239v1 = _OID(primeCurve, 4)
231prime239v2 = _OID(primeCurve, 5)
232prime239v3 = _OID(primeCurve, 6)
233prime256v1 = _OID(primeCurve, 7)
234