codekingpro/portable-devtools
114k
1#2# This file is part of pyasn1-modules software.3#4# Created by Russ Housley with a very small amount of assistance from5# asn1ate v.0.6.0.6# Modified by Russ Housley to add maps for opentypes.7#8# Copyright (c) 2019, Vigil Security, LLC9# License: http://snmplabs.com/pyasn1/license.html10#11# Additional Algorithms and Identifiers for RSA Cryptography12# for use in Certificates and CRLs13#14# ASN.1 source from:15# https://www.rfc-editor.org/rfc/rfc4055.txt16#17from pyasn1.type import namedtype18from pyasn1.type import tag19from pyasn1.type import univ20 21from pyasn1_modules import rfc528022 23 24def _OID(*components):25 output = []26 for x in tuple(components):27 if isinstance(x, univ.ObjectIdentifier):28 output.extend(list(x))29 else:30 output.append(int(x))31 return univ.ObjectIdentifier(output)32 33 34id_sha1 = _OID(1, 3, 14, 3, 2, 26)35 36id_sha256 = _OID(2, 16, 840, 1, 101, 3, 4, 2, 1)37 38id_sha384 = _OID(2, 16, 840, 1, 101, 3, 4, 2, 2)39 40id_sha512 = _OID(2, 16, 840, 1, 101, 3, 4, 2, 3)41 42id_sha224 = _OID(2, 16, 840, 1, 101, 3, 4, 2, 4)43 44rsaEncryption = _OID(1, 2, 840, 113549, 1, 1, 1)45 46id_mgf1 = _OID(1, 2, 840, 113549, 1, 1, 8)47 48id_RSAES_OAEP = _OID(1, 2, 840, 113549, 1, 1, 7)49 50id_pSpecified = _OID(1, 2, 840, 113549, 1, 1, 9)51 52id_RSASSA_PSS = _OID(1, 2, 840, 113549, 1, 1, 10)53 54sha256WithRSAEncryption = _OID(1, 2, 840, 113549, 1, 1, 11)55 56sha384WithRSAEncryption = _OID(1, 2, 840, 113549, 1, 1, 12)57 58sha512WithRSAEncryption = _OID(1, 2, 840, 113549, 1, 1, 13)59 60sha224WithRSAEncryption = _OID(1, 2, 840, 113549, 1, 1, 14)61 62sha1Identifier = rfc5280.AlgorithmIdentifier()63sha1Identifier['algorithm'] = id_sha164sha1Identifier['parameters'] = univ.Null("")65 66sha224Identifier = rfc5280.AlgorithmIdentifier()67sha224Identifier['algorithm'] = id_sha22468sha224Identifier['parameters'] = univ.Null("")69 70sha256Identifier = rfc5280.AlgorithmIdentifier()71sha256Identifier['algorithm'] = id_sha25672sha256Identifier['parameters'] = univ.Null("")73 74sha384Identifier = rfc5280.AlgorithmIdentifier()75sha384Identifier['algorithm'] = id_sha38476sha384Identifier['parameters'] = univ.Null("")77 78sha512Identifier = rfc5280.AlgorithmIdentifier()79sha512Identifier['algorithm'] = id_sha51280sha512Identifier['parameters'] = univ.Null("")81 82mgf1SHA1Identifier = rfc5280.AlgorithmIdentifier()83mgf1SHA1Identifier['algorithm'] = id_mgf184mgf1SHA1Identifier['parameters'] = sha1Identifier85 86mgf1SHA224Identifier = rfc5280.AlgorithmIdentifier()87mgf1SHA224Identifier['algorithm'] = id_mgf188mgf1SHA224Identifier['parameters'] = sha224Identifier89 90mgf1SHA256Identifier = rfc5280.AlgorithmIdentifier()91mgf1SHA256Identifier['algorithm'] = id_mgf192mgf1SHA256Identifier['parameters'] = sha256Identifier93 94mgf1SHA384Identifier = rfc5280.AlgorithmIdentifier()95mgf1SHA384Identifier['algorithm'] = id_mgf196mgf1SHA384Identifier['parameters'] = sha384Identifier97 98mgf1SHA512Identifier = rfc5280.AlgorithmIdentifier()99mgf1SHA512Identifier['algorithm'] = id_mgf1100mgf1SHA512Identifier['parameters'] = sha512Identifier101 102pSpecifiedEmptyIdentifier = rfc5280.AlgorithmIdentifier()103pSpecifiedEmptyIdentifier['algorithm'] = id_pSpecified104pSpecifiedEmptyIdentifier['parameters'] = univ.OctetString(value='')105 106 107class RSAPublicKey(univ.Sequence):108 pass109 110RSAPublicKey.componentType = namedtype.NamedTypes(111 namedtype.NamedType('modulus', univ.Integer()),112 namedtype.NamedType('publicExponent', univ.Integer())113)114 115 116class HashAlgorithm(rfc5280.AlgorithmIdentifier):117 pass118 119 120class MaskGenAlgorithm(rfc5280.AlgorithmIdentifier):121 pass122 123 124class RSAES_OAEP_params(univ.Sequence):125 pass126 127RSAES_OAEP_params.componentType = namedtype.NamedTypes(128 namedtype.OptionalNamedType('hashFunc', rfc5280.AlgorithmIdentifier().subtype(129 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),130 namedtype.OptionalNamedType('maskGenFunc', rfc5280.AlgorithmIdentifier().subtype(131 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),132 namedtype.OptionalNamedType('pSourceFunc', rfc5280.AlgorithmIdentifier().subtype(133 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 2)))134)135 136rSAES_OAEP_Default_Params = RSAES_OAEP_params()137 138rSAES_OAEP_Default_Identifier = rfc5280.AlgorithmIdentifier()139rSAES_OAEP_Default_Identifier['algorithm'] = id_RSAES_OAEP140rSAES_OAEP_Default_Identifier['parameters'] = rSAES_OAEP_Default_Params141 142rSAES_OAEP_SHA224_Params = RSAES_OAEP_params()143rSAES_OAEP_SHA224_Params['hashFunc'] = sha224Identifier.subtype(144 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)145rSAES_OAEP_SHA224_Params['maskGenFunc'] = mgf1SHA224Identifier.subtype(146 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)147 148rSAES_OAEP_SHA224_Identifier = rfc5280.AlgorithmIdentifier()149rSAES_OAEP_SHA224_Identifier['algorithm'] = id_RSAES_OAEP150rSAES_OAEP_SHA224_Identifier['parameters'] = rSAES_OAEP_SHA224_Params151 152rSAES_OAEP_SHA256_Params = RSAES_OAEP_params()153rSAES_OAEP_SHA256_Params['hashFunc'] = sha256Identifier.subtype(154 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)155rSAES_OAEP_SHA256_Params['maskGenFunc'] = mgf1SHA256Identifier.subtype(156 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)157 158rSAES_OAEP_SHA256_Identifier = rfc5280.AlgorithmIdentifier()159rSAES_OAEP_SHA256_Identifier['algorithm'] = id_RSAES_OAEP160rSAES_OAEP_SHA256_Identifier['parameters'] = rSAES_OAEP_SHA256_Params161 162rSAES_OAEP_SHA384_Params = RSAES_OAEP_params()163rSAES_OAEP_SHA384_Params['hashFunc'] = sha384Identifier.subtype(164 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)165rSAES_OAEP_SHA384_Params['maskGenFunc'] = mgf1SHA384Identifier.subtype(166 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)167 168rSAES_OAEP_SHA384_Identifier = rfc5280.AlgorithmIdentifier()169rSAES_OAEP_SHA384_Identifier['algorithm'] = id_RSAES_OAEP170rSAES_OAEP_SHA384_Identifier['parameters'] = rSAES_OAEP_SHA384_Params171 172rSAES_OAEP_SHA512_Params = RSAES_OAEP_params()173rSAES_OAEP_SHA512_Params['hashFunc'] = sha512Identifier.subtype(174 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)175rSAES_OAEP_SHA512_Params['maskGenFunc'] = mgf1SHA512Identifier.subtype(176 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)177 178rSAES_OAEP_SHA512_Identifier = rfc5280.AlgorithmIdentifier()179rSAES_OAEP_SHA512_Identifier['algorithm'] = id_RSAES_OAEP180rSAES_OAEP_SHA512_Identifier['parameters'] = rSAES_OAEP_SHA512_Params181 182 183class RSASSA_PSS_params(univ.Sequence):184 pass185 186RSASSA_PSS_params.componentType = namedtype.NamedTypes(187 namedtype.OptionalNamedType('hashAlgorithm', rfc5280.AlgorithmIdentifier().subtype(188 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))),189 namedtype.OptionalNamedType('maskGenAlgorithm', rfc5280.AlgorithmIdentifier().subtype(190 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1))),191 namedtype.DefaultedNamedType('saltLength', univ.Integer(value=20).subtype(192 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 2))),193 namedtype.DefaultedNamedType('trailerField', univ.Integer(value=1).subtype(194 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)))195)196 197rSASSA_PSS_Default_Params = RSASSA_PSS_params()198 199rSASSA_PSS_Default_Identifier = rfc5280.AlgorithmIdentifier()200rSASSA_PSS_Default_Identifier['algorithm'] = id_RSASSA_PSS201rSASSA_PSS_Default_Identifier['parameters'] = rSASSA_PSS_Default_Params202 203rSASSA_PSS_SHA224_Params = RSASSA_PSS_params()204rSASSA_PSS_SHA224_Params['hashAlgorithm'] = sha224Identifier.subtype(205 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)206rSASSA_PSS_SHA224_Params['maskGenAlgorithm'] = mgf1SHA224Identifier.subtype(207 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)208 209rSASSA_PSS_SHA224_Identifier = rfc5280.AlgorithmIdentifier()210rSASSA_PSS_SHA224_Identifier['algorithm'] = id_RSASSA_PSS211rSASSA_PSS_SHA224_Identifier['parameters'] = rSASSA_PSS_SHA224_Params212 213rSASSA_PSS_SHA256_Params = RSASSA_PSS_params()214rSASSA_PSS_SHA256_Params['hashAlgorithm'] = sha256Identifier.subtype(215 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)216rSASSA_PSS_SHA256_Params['maskGenAlgorithm'] = mgf1SHA256Identifier.subtype(217 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)218 219rSASSA_PSS_SHA256_Identifier = rfc5280.AlgorithmIdentifier()220rSASSA_PSS_SHA256_Identifier['algorithm'] = id_RSASSA_PSS221rSASSA_PSS_SHA256_Identifier['parameters'] = rSASSA_PSS_SHA256_Params222 223rSASSA_PSS_SHA384_Params = RSASSA_PSS_params()224rSASSA_PSS_SHA384_Params['hashAlgorithm'] = sha384Identifier.subtype(225 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)226rSASSA_PSS_SHA384_Params['maskGenAlgorithm'] = mgf1SHA384Identifier.subtype(227 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)228 229rSASSA_PSS_SHA384_Identifier = rfc5280.AlgorithmIdentifier()230rSASSA_PSS_SHA384_Identifier['algorithm'] = id_RSASSA_PSS231rSASSA_PSS_SHA384_Identifier['parameters'] = rSASSA_PSS_SHA384_Params232 233rSASSA_PSS_SHA512_Params = RSASSA_PSS_params()234rSASSA_PSS_SHA512_Params['hashAlgorithm'] = sha512Identifier.subtype(235 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0), cloneValueFlag=True)236rSASSA_PSS_SHA512_Params['maskGenAlgorithm'] = mgf1SHA512Identifier.subtype(237 explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 1), cloneValueFlag=True)238 239rSASSA_PSS_SHA512_Identifier = rfc5280.AlgorithmIdentifier()240rSASSA_PSS_SHA512_Identifier['algorithm'] = id_RSASSA_PSS241rSASSA_PSS_SHA512_Identifier['parameters'] = rSASSA_PSS_SHA512_Params242 243 244# Update the Algorithm Identifier map245 246_algorithmIdentifierMapUpdate = {247 id_sha1: univ.Null(),248 id_sha224: univ.Null(),249 id_sha256: univ.Null(),250 id_sha384: univ.Null(),251 id_sha512: univ.Null(),252 id_mgf1: rfc5280.AlgorithmIdentifier(),253 id_pSpecified: univ.OctetString(),254 id_RSAES_OAEP: RSAES_OAEP_params(),255 id_RSASSA_PSS: RSASSA_PSS_params(),256}257 258rfc5280.algorithmIdentifierMap.update(_algorithmIdentifierMapUpdate)259 