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