codekingpro/portable-devtools
114k
1#2# This file is part of pyasn1-modules software.3#4# Created by Russ Housley with assistance from asn1ate v.0.6.0.5#6# Copyright (c) 2019, Vigil Security, LLC7# License: http://snmplabs.com/pyasn1/license.html8#9# Additional Cryptographic Algorithms for Use with GOST 28147-89,10# GOST R 34.10-94, GOST R 34.10-2001, and GOST R 34.11-94 Algorithms11#12# ASN.1 source from:13# https://www.rfc-editor.org/rfc/rfc4357.txt14# https://www.rfc-editor.org/errata/eid592715# https://www.rfc-editor.org/errata/eid592816#17 18from pyasn1.type import constraint19from pyasn1.type import namedtype20from pyasn1.type import namedval21from pyasn1.type import tag22from pyasn1.type import univ23 24from pyasn1_modules import rfc528025 26 27# Import from RFC 528028 29AlgorithmIdentifier = rfc5280.AlgorithmIdentifier30 31 32# Object Identifiers33 34id_CryptoPro = univ.ObjectIdentifier((1, 2, 643, 2, 2,))35 36 37id_CryptoPro_modules = id_CryptoPro + (1, 1,)38 39id_CryptoPro_extensions = id_CryptoPro + (34,)40 41id_CryptoPro_policyIds = id_CryptoPro + (38,)42 43id_CryptoPro_policyQt = id_CryptoPro + (39,)44 45 46cryptographic_Gost_Useful_Definitions = id_CryptoPro_modules + (0, 1,)47 48gostR3411_94_DigestSyntax = id_CryptoPro_modules + (1, 1,)49 50gostR3410_94_PKISyntax = id_CryptoPro_modules + (2, 1,)51 52gostR3410_94_SignatureSyntax = id_CryptoPro_modules + (3, 1,)53 54gost28147_89_EncryptionSyntax = id_CryptoPro_modules + (4, 1,)55 56gostR3410_EncryptionSyntax = id_CryptoPro_modules + (5, 2,)57 58gost28147_89_ParamSetSyntax = id_CryptoPro_modules + (6, 1,)59 60gostR3411_94_ParamSetSyntax = id_CryptoPro_modules + (7, 1,)61 62gostR3410_94_ParamSetSyntax = id_CryptoPro_modules + (8, 1, 1)63 64gostR3410_2001_PKISyntax = id_CryptoPro_modules + (9, 1,)65 66gostR3410_2001_SignatureSyntax = id_CryptoPro_modules + (10, 1,)67 68gostR3410_2001_ParamSetSyntax = id_CryptoPro_modules + (12, 1,)69 70gost_CryptoPro_ExtendedKeyUsage = id_CryptoPro_modules + (13, 1,)71 72gost_CryptoPro_PrivateKey = id_CryptoPro_modules + (14, 1,)73 74gost_CryptoPro_PKIXCMP = id_CryptoPro_modules + (15, 1,)75 76gost_CryptoPro_TLS = id_CryptoPro_modules + (16, 1,)77 78gost_CryptoPro_Policy = id_CryptoPro_modules + (17, 1,)79 80gost_CryptoPro_Constants = id_CryptoPro_modules + (18, 1,)81 82 83id_CryptoPro_algorithms = id_CryptoPro84 85id_GostR3411_94_with_GostR3410_2001 = id_CryptoPro_algorithms + (3,)86 87id_GostR3411_94_with_GostR3410_94 = id_CryptoPro_algorithms + (4,)88 89id_GostR3411_94 = id_CryptoPro_algorithms + (9,)90 91id_Gost28147_89_None_KeyMeshing = id_CryptoPro_algorithms + (14, 0,)92 93id_Gost28147_89_CryptoPro_KeyMeshing = id_CryptoPro_algorithms + (14, 1,)94 95id_GostR3410_2001 = id_CryptoPro_algorithms + (19,)96 97id_GostR3410_94 = id_CryptoPro_algorithms + (20,)98 99id_Gost28147_89 = id_CryptoPro_algorithms + (21,)100 101id_Gost28147_89_MAC = id_CryptoPro_algorithms + (22,)102 103id_CryptoPro_hashes = id_CryptoPro_algorithms + (30,)104 105id_CryptoPro_encrypts = id_CryptoPro_algorithms + (31,)106 107id_CryptoPro_signs = id_CryptoPro_algorithms + (32,)108 109id_CryptoPro_exchanges = id_CryptoPro_algorithms + (33,)110 111id_CryptoPro_ecc_signs = id_CryptoPro_algorithms + (35,)112 113id_CryptoPro_ecc_exchanges = id_CryptoPro_algorithms + (36,)114 115id_CryptoPro_private_keys = id_CryptoPro_algorithms + (37,)116 117id_CryptoPro_pkixcmp_infos = id_CryptoPro_algorithms + (41,)118 119id_CryptoPro_audit_service_types = id_CryptoPro_algorithms + (42,)120 121id_CryptoPro_audit_record_types = id_CryptoPro_algorithms + (43,)122 123id_CryptoPro_attributes = id_CryptoPro_algorithms + (44,)124 125id_CryptoPro_name_service_types = id_CryptoPro_algorithms + (45,)126 127id_GostR3410_2001DH = id_CryptoPro_algorithms + (98,)128 129id_GostR3410_94DH = id_CryptoPro_algorithms + (99,)130 131 132id_Gost28147_89_TestParamSet = id_CryptoPro_encrypts + (0,)133 134id_Gost28147_89_CryptoPro_A_ParamSet = id_CryptoPro_encrypts + (1,)135 136id_Gost28147_89_CryptoPro_B_ParamSet = id_CryptoPro_encrypts + (2,)137 138id_Gost28147_89_CryptoPro_C_ParamSet = id_CryptoPro_encrypts + (3,)139 140id_Gost28147_89_CryptoPro_D_ParamSet = id_CryptoPro_encrypts + (4,)141 142id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet = id_CryptoPro_encrypts + (5,)143 144id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet = id_CryptoPro_encrypts + (6,)145 146id_Gost28147_89_CryptoPro_RIC_1_ParamSet = id_CryptoPro_encrypts + (7,)147 148 149id_GostR3410_2001_TestParamSet = id_CryptoPro_ecc_signs + (0,)150 151id_GostR3410_2001_CryptoPro_A_ParamSet = id_CryptoPro_ecc_signs + (1,)152 153id_GostR3410_2001_CryptoPro_B_ParamSet = id_CryptoPro_ecc_signs + (2,)154 155id_GostR3410_2001_CryptoPro_C_ParamSet = id_CryptoPro_ecc_signs + (3,)156 157 158id_GostR3410_2001_CryptoPro_XchA_ParamSet = id_CryptoPro_ecc_exchanges + (0,)159 160id_GostR3410_2001_CryptoPro_XchB_ParamSet = id_CryptoPro_ecc_exchanges + (1,)161 162 163id_GostR3410_94_TestParamSet = id_CryptoPro_signs + (0,)164 165id_GostR3410_94_CryptoPro_A_ParamSet = id_CryptoPro_signs + (2,)166 167id_GostR3410_94_CryptoPro_B_ParamSet = id_CryptoPro_signs + (3,)168 169id_GostR3410_94_CryptoPro_C_ParamSet = id_CryptoPro_signs + (4,)170 171id_GostR3410_94_CryptoPro_D_ParamSet = id_CryptoPro_signs + (5,)172 173 174id_GostR3410_94_CryptoPro_XchA_ParamSet = id_CryptoPro_exchanges + (1,)175 176id_GostR3410_94_CryptoPro_XchB_ParamSet = id_CryptoPro_exchanges + (2,)177 178id_GostR3410_94_CryptoPro_XchC_ParamSet = id_CryptoPro_exchanges + (3,)179 180 181id_GostR3410_94_a = id_GostR3410_94 + (1,)182 183id_GostR3410_94_aBis = id_GostR3410_94 + (2,)184 185id_GostR3410_94_b = id_GostR3410_94 + (3,)186 187id_GostR3410_94_bBis = id_GostR3410_94 + (4,)188 189 190id_GostR3411_94_TestParamSet = id_CryptoPro_hashes + (0,)191 192id_GostR3411_94_CryptoProParamSet = id_CryptoPro_hashes + (1,)193 194 195 196 197class Gost28147_89_ParamSet(univ.ObjectIdentifier):198 pass199 200Gost28147_89_ParamSet.subtypeSpec = constraint.SingleValueConstraint(201 id_Gost28147_89_TestParamSet,202 id_Gost28147_89_CryptoPro_A_ParamSet,203 id_Gost28147_89_CryptoPro_B_ParamSet,204 id_Gost28147_89_CryptoPro_C_ParamSet,205 id_Gost28147_89_CryptoPro_D_ParamSet,206 id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet,207 id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet,208 id_Gost28147_89_CryptoPro_RIC_1_ParamSet209)210 211 212class Gost28147_89_BlobParameters(univ.Sequence):213 pass214 215Gost28147_89_BlobParameters.componentType = namedtype.NamedTypes(216 namedtype.NamedType('encryptionParamSet', Gost28147_89_ParamSet())217)218 219 220class Gost28147_89_MAC(univ.OctetString):221 pass222 223Gost28147_89_MAC.subtypeSpec = constraint.ValueSizeConstraint(1, 4)224 225 226class Gost28147_89_Key(univ.OctetString):227 pass228 229Gost28147_89_Key.subtypeSpec = constraint.ValueSizeConstraint(32, 32)230 231 232class Gost28147_89_EncryptedKey(univ.Sequence):233 pass234 235Gost28147_89_EncryptedKey.componentType = namedtype.NamedTypes(236 namedtype.NamedType('encryptedKey', Gost28147_89_Key()),237 namedtype.OptionalNamedType('maskKey', Gost28147_89_Key().subtype(238 implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0))),239 namedtype.NamedType('macKey', Gost28147_89_MAC())240)241 242 243class Gost28147_89_IV(univ.OctetString):244 pass245 246Gost28147_89_IV.subtypeSpec = constraint.ValueSizeConstraint(8, 8)247 248 249class Gost28147_89_UZ(univ.OctetString):250 pass251 252Gost28147_89_UZ.subtypeSpec = constraint.ValueSizeConstraint(64, 64)253 254 255class Gost28147_89_ParamSetParameters(univ.Sequence):256 pass257 258Gost28147_89_ParamSetParameters.componentType = namedtype.NamedTypes(259 namedtype.NamedType('eUZ', Gost28147_89_UZ()),260 namedtype.NamedType('mode',261 univ.Integer(namedValues=namedval.NamedValues(262 ('gost28147-89-CNT', 0),263 ('gost28147-89-CFB', 1),264 ('cryptoPro-CBC', 2)265 ))),266 namedtype.NamedType('shiftBits',267 univ.Integer(namedValues=namedval.NamedValues(268 ('gost28147-89-block', 64)269 ))),270 namedtype.NamedType('keyMeshing', AlgorithmIdentifier())271)272 273 274class Gost28147_89_Parameters(univ.Sequence):275 pass276 277Gost28147_89_Parameters.componentType = namedtype.NamedTypes(278 namedtype.NamedType('iv', Gost28147_89_IV()),279 namedtype.NamedType('encryptionParamSet', Gost28147_89_ParamSet())280)281 282 283class GostR3410_2001_CertificateSignature(univ.BitString):284 pass285 286GostR3410_2001_CertificateSignature.subtypeSpec=constraint.ValueSizeConstraint(256, 512)287 288 289class GostR3410_2001_ParamSetParameters(univ.Sequence):290 pass291 292GostR3410_2001_ParamSetParameters.componentType = namedtype.NamedTypes(293 namedtype.NamedType('a', univ.Integer()),294 namedtype.NamedType('b', univ.Integer()),295 namedtype.NamedType('p', univ.Integer()),296 namedtype.NamedType('q', univ.Integer()),297 namedtype.NamedType('x', univ.Integer()),298 namedtype.NamedType('y', univ.Integer())299)300 301 302class GostR3410_2001_PublicKey(univ.OctetString):303 pass304 305GostR3410_2001_PublicKey.subtypeSpec = constraint.ValueSizeConstraint(64, 64)306 307 308class GostR3410_2001_PublicKeyParameters(univ.Sequence):309 pass310 311GostR3410_2001_PublicKeyParameters.componentType = namedtype.NamedTypes(312 namedtype.NamedType('publicKeyParamSet', univ.ObjectIdentifier().subtype(313 subtypeSpec=constraint.SingleValueConstraint(314 id_GostR3410_2001_TestParamSet,315 id_GostR3410_2001_CryptoPro_A_ParamSet,316 id_GostR3410_2001_CryptoPro_B_ParamSet,317 id_GostR3410_2001_CryptoPro_C_ParamSet,318 id_GostR3410_2001_CryptoPro_XchA_ParamSet,319 id_GostR3410_2001_CryptoPro_XchB_ParamSet320 ))),321 namedtype.NamedType('digestParamSet', univ.ObjectIdentifier().subtype(322 subtypeSpec=constraint.SingleValueConstraint(323 id_GostR3411_94_TestParamSet,324 id_GostR3411_94_CryptoProParamSet325 ))),326 namedtype.DefaultedNamedType('encryptionParamSet',327 Gost28147_89_ParamSet().subtype(value=id_Gost28147_89_CryptoPro_A_ParamSet328 ))329)330 331 332class GostR3410_94_CertificateSignature(univ.BitString):333 pass334 335GostR3410_94_CertificateSignature.subtypeSpec = constraint.ValueSizeConstraint(256, 512)336 337 338class GostR3410_94_ParamSetParameters_t(univ.Integer):339 pass340 341GostR3410_94_ParamSetParameters_t.subtypeSpec = constraint.SingleValueConstraint(512, 1024)342 343 344class GostR3410_94_ParamSetParameters(univ.Sequence):345 pass346 347GostR3410_94_ParamSetParameters.componentType = namedtype.NamedTypes(348 namedtype.NamedType('t', GostR3410_94_ParamSetParameters_t()),349 namedtype.NamedType('p', univ.Integer()),350 namedtype.NamedType('q', univ.Integer()),351 namedtype.NamedType('a', univ.Integer()),352 namedtype.OptionalNamedType('validationAlgorithm', AlgorithmIdentifier())353)354 355 356class GostR3410_94_PublicKey(univ.OctetString):357 pass358 359GostR3410_94_PublicKey.subtypeSpec = constraint.ConstraintsUnion(360 constraint.ValueSizeConstraint(64, 64),361 constraint.ValueSizeConstraint(128, 128)362)363 364 365class GostR3410_94_PublicKeyParameters(univ.Sequence):366 pass367 368GostR3410_94_PublicKeyParameters.componentType = namedtype.NamedTypes(369 namedtype.NamedType('publicKeyParamSet', univ.ObjectIdentifier().subtype(370 subtypeSpec=constraint.SingleValueConstraint(371 id_GostR3410_94_TestParamSet,372 id_GostR3410_94_CryptoPro_A_ParamSet,373 id_GostR3410_94_CryptoPro_B_ParamSet,374 id_GostR3410_94_CryptoPro_C_ParamSet,375 id_GostR3410_94_CryptoPro_D_ParamSet,376 id_GostR3410_94_CryptoPro_XchA_ParamSet,377 id_GostR3410_94_CryptoPro_XchB_ParamSet,378 id_GostR3410_94_CryptoPro_XchC_ParamSet379 ))),380 namedtype.NamedType('digestParamSet', univ.ObjectIdentifier().subtype(381 subtypeSpec=constraint.SingleValueConstraint(382 id_GostR3411_94_TestParamSet,383 id_GostR3411_94_CryptoProParamSet384 ))),385 namedtype.DefaultedNamedType('encryptionParamSet',386 Gost28147_89_ParamSet().subtype(value=id_Gost28147_89_CryptoPro_A_ParamSet387 ))388)389 390 391class GostR3410_94_ValidationBisParameters_c(univ.Integer):392 pass393 394GostR3410_94_ValidationBisParameters_c.subtypeSpec = constraint.ValueRangeConstraint(0, 4294967295)395 396 397class GostR3410_94_ValidationBisParameters(univ.Sequence):398 pass399 400GostR3410_94_ValidationBisParameters.componentType = namedtype.NamedTypes(401 namedtype.NamedType('x0', GostR3410_94_ValidationBisParameters_c()),402 namedtype.NamedType('c', GostR3410_94_ValidationBisParameters_c()),403 namedtype.OptionalNamedType('d', univ.Integer())404)405 406 407class GostR3410_94_ValidationParameters_c(univ.Integer):408 pass409 410GostR3410_94_ValidationParameters_c.subtypeSpec = constraint.ValueRangeConstraint(0, 65535)411 412 413class GostR3410_94_ValidationParameters(univ.Sequence):414 pass415 416GostR3410_94_ValidationParameters.componentType = namedtype.NamedTypes(417 namedtype.NamedType('x0', GostR3410_94_ValidationParameters_c()),418 namedtype.NamedType('c', GostR3410_94_ValidationParameters_c()),419 namedtype.OptionalNamedType('d', univ.Integer())420)421 422 423class GostR3411_94_Digest(univ.OctetString):424 pass425 426GostR3411_94_Digest.subtypeSpec = constraint.ValueSizeConstraint(32, 32)427 428 429class GostR3411_94_DigestParameters(univ.ObjectIdentifier):430 pass431 432GostR3411_94_DigestParameters.subtypeSpec = constraint.ConstraintsUnion(433 constraint.SingleValueConstraint(id_GostR3411_94_TestParamSet),434 constraint.SingleValueConstraint(id_GostR3411_94_CryptoProParamSet),435)436 437 438class GostR3411_94_ParamSetParameters(univ.Sequence):439 pass440 441GostR3411_94_ParamSetParameters.componentType = namedtype.NamedTypes(442 namedtype.NamedType('hUZ', Gost28147_89_UZ()),443 namedtype.NamedType('h0', GostR3411_94_Digest())444)445 446 447# Update the Algorithm Identifier map in rfc5280.py448 449_algorithmIdentifierMapUpdate = {450 id_Gost28147_89: Gost28147_89_Parameters(),451 id_Gost28147_89_TestParamSet: Gost28147_89_ParamSetParameters(),452 id_Gost28147_89_CryptoPro_A_ParamSet: Gost28147_89_ParamSetParameters(),453 id_Gost28147_89_CryptoPro_B_ParamSet: Gost28147_89_ParamSetParameters(),454 id_Gost28147_89_CryptoPro_C_ParamSet: Gost28147_89_ParamSetParameters(),455 id_Gost28147_89_CryptoPro_D_ParamSet: Gost28147_89_ParamSetParameters(),456 id_Gost28147_89_CryptoPro_KeyMeshing: univ.Null(""),457 id_Gost28147_89_None_KeyMeshing: univ.Null(""),458 id_GostR3410_94: GostR3410_94_PublicKeyParameters(),459 id_GostR3410_94_TestParamSet: GostR3410_94_ParamSetParameters(),460 id_GostR3410_94_CryptoPro_A_ParamSet: GostR3410_94_ParamSetParameters(),461 id_GostR3410_94_CryptoPro_B_ParamSet: GostR3410_94_ParamSetParameters(),462 id_GostR3410_94_CryptoPro_C_ParamSet: GostR3410_94_ParamSetParameters(),463 id_GostR3410_94_CryptoPro_D_ParamSet: GostR3410_94_ParamSetParameters(),464 id_GostR3410_94_CryptoPro_XchA_ParamSet: GostR3410_94_ParamSetParameters(),465 id_GostR3410_94_CryptoPro_XchB_ParamSet: GostR3410_94_ParamSetParameters(),466 id_GostR3410_94_CryptoPro_XchC_ParamSet: GostR3410_94_ParamSetParameters(),467 id_GostR3410_94_a: GostR3410_94_ValidationParameters(),468 id_GostR3410_94_aBis: GostR3410_94_ValidationBisParameters(),469 id_GostR3410_94_b: GostR3410_94_ValidationParameters(),470 id_GostR3410_94_bBis: GostR3410_94_ValidationBisParameters(),471 id_GostR3410_2001: univ.Null(""),472 id_GostR3411_94: univ.Null(""),473 id_GostR3411_94_TestParamSet: GostR3411_94_ParamSetParameters(),474 id_GostR3411_94_CryptoProParamSet: GostR3411_94_ParamSetParameters(),475}476 477rfc5280.algorithmIdentifierMap.update(_algorithmIdentifierMapUpdate)478 