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