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# Elliptic Curve Cryptography (ECC) Algorithms in the CMS10#11# ASN.1 source from:12# https://www.rfc-editor.org/rfc/rfc5753.txt13#14 15from pyasn1.type import univ, char, namedtype, namedval, tag, constraint, useful16 17from pyasn1_modules import rfc528018from pyasn1_modules import rfc548019from pyasn1_modules import rfc565220from pyasn1_modules import rfc575121from pyasn1_modules import rfc801822 23 24# Imports from RFC 528025 26AlgorithmIdentifier = rfc5280.AlgorithmIdentifier27 28 29# Imports from RFC 565230 31OriginatorPublicKey = rfc5652.OriginatorPublicKey32 33UserKeyingMaterial = rfc5652.UserKeyingMaterial34 35 36# Imports from RFC 548037 38ECDSA_Sig_Value = rfc5480.ECDSA_Sig_Value39 40ECParameters = rfc5480.ECParameters41 42ECPoint = rfc5480.ECPoint43 44id_ecPublicKey = rfc5480.id_ecPublicKey45 46 47# Imports from RFC 801848 49id_hmacWithSHA224 = rfc8018.id_hmacWithSHA22450 51id_hmacWithSHA256 = rfc8018.id_hmacWithSHA25652 53id_hmacWithSHA384 = rfc8018.id_hmacWithSHA38454 55id_hmacWithSHA512 = rfc8018.id_hmacWithSHA51256 57 58# Object Identifier arcs59 60x9_63_scheme = univ.ObjectIdentifier('1.3.133.16.840.63.0')61 62secg_scheme = univ.ObjectIdentifier('1.3.132.1')63 64 65# Object Identifiers for the algorithms66 67dhSinglePass_cofactorDH_sha1kdf_scheme = x9_63_scheme + (3, )68 69dhSinglePass_cofactorDH_sha224kdf_scheme = secg_scheme + (14, 0, )70 71dhSinglePass_cofactorDH_sha256kdf_scheme = secg_scheme + (14, 1, )72 73dhSinglePass_cofactorDH_sha384kdf_scheme = secg_scheme + (14, 2, )74 75dhSinglePass_cofactorDH_sha512kdf_scheme = secg_scheme + (14, 3, )76 77dhSinglePass_stdDH_sha1kdf_scheme = x9_63_scheme + (2, )78 79dhSinglePass_stdDH_sha224kdf_scheme = secg_scheme + (11, 0, )80 81dhSinglePass_stdDH_sha256kdf_scheme = secg_scheme + (11, 1, )82 83dhSinglePass_stdDH_sha384kdf_scheme = secg_scheme + (11, 2, )84 85dhSinglePass_stdDH_sha512kdf_scheme = secg_scheme + (11, 3, )86 87mqvSinglePass_sha1kdf_scheme = x9_63_scheme + (16, )88 89mqvSinglePass_sha224kdf_scheme = secg_scheme + (15, 0, )90 91mqvSinglePass_sha256kdf_scheme = secg_scheme + (15, 1, )92 93mqvSinglePass_sha384kdf_scheme = secg_scheme + (15, 2, )94 95mqvSinglePass_sha512kdf_scheme = secg_scheme + (15, 3, )96 97 98# Structures for parameters and key derivation99 100class IV(univ.OctetString):101 # Exactly 8 octets102 pass103 104 105class CBCParameter(IV):106 pass107 108 109class KeyWrapAlgorithm(AlgorithmIdentifier):110 pass111 112 113class ECC_CMS_SharedInfo(univ.Sequence):114 componentType = namedtype.NamedTypes(115 namedtype.NamedType('keyInfo', KeyWrapAlgorithm()),116 namedtype.OptionalNamedType('entityUInfo',117 univ.OctetString().subtype(explicitTag=tag.Tag(118 tag.tagClassContext, tag.tagFormatSimple, 0))),119 namedtype.NamedType('suppPubInfo',120 univ.OctetString().subtype(explicitTag=tag.Tag(121 tag.tagClassContext, tag.tagFormatSimple, 2)))122 )123 124 125class MQVuserKeyingMaterial(univ.Sequence):126 componentType = namedtype.NamedTypes(127 namedtype.NamedType('ephemeralPublicKey', OriginatorPublicKey()),128 namedtype.OptionalNamedType('addedukm',129 UserKeyingMaterial().subtype(explicitTag=tag.Tag(130 tag.tagClassContext, tag.tagFormatSimple, 0)))131 )132 133 134# Update the Algorithm Identifier map in rfc5280.py and135# Update the SMIMECapabilities Attribute Map in rfc5751.py136 137_algorithmIdentifierMapUpdate = {138 dhSinglePass_stdDH_sha1kdf_scheme: KeyWrapAlgorithm(),139 dhSinglePass_stdDH_sha224kdf_scheme: KeyWrapAlgorithm(),140 dhSinglePass_stdDH_sha256kdf_scheme: KeyWrapAlgorithm(),141 dhSinglePass_stdDH_sha384kdf_scheme: KeyWrapAlgorithm(),142 dhSinglePass_stdDH_sha512kdf_scheme: KeyWrapAlgorithm(),143 dhSinglePass_cofactorDH_sha1kdf_scheme: KeyWrapAlgorithm(),144 dhSinglePass_cofactorDH_sha224kdf_scheme: KeyWrapAlgorithm(),145 dhSinglePass_cofactorDH_sha256kdf_scheme: KeyWrapAlgorithm(),146 dhSinglePass_cofactorDH_sha384kdf_scheme: KeyWrapAlgorithm(),147 dhSinglePass_cofactorDH_sha512kdf_scheme: KeyWrapAlgorithm(),148 mqvSinglePass_sha1kdf_scheme: KeyWrapAlgorithm(),149 mqvSinglePass_sha224kdf_scheme: KeyWrapAlgorithm(),150 mqvSinglePass_sha256kdf_scheme: KeyWrapAlgorithm(),151 mqvSinglePass_sha384kdf_scheme: KeyWrapAlgorithm(),152 mqvSinglePass_sha512kdf_scheme: KeyWrapAlgorithm(),153}154 155rfc5280.algorithmIdentifierMap.update(_algorithmIdentifierMapUpdate)156 157rfc5751.smimeCapabilityMap.update(_algorithmIdentifierMapUpdate)158 