a ‚oe<ã@sødZddlZddlZddlmZddlmZmZmZddl Z ddl m Z ddl mZmZddlmZmZmZddlmZmZdd lmZdd lmZmZmZe e¡ZGd d „d ej ƒZ!Gd d„de!eƒZ"Gdd„de"ƒZ#Gdd„dƒZ$Gdd„de$e"ƒZ%Gdd„de$e"ƒZ&Gdd„de"ƒZ'e" (e#dej)ƒ¡Z*e" (e#dej+ƒ¡Z,e" (e#dej-ƒ¡Z.e" (e%dej)ƒ¡Z/e" (e%dej+ƒ¡Z0e" (e%dej-ƒ¡Z1e" (e&dej)ƒ¡Z2e" (e&d ej+ƒ¡Z3e" (e&d!ej-ƒ¡Z4e" (e'd"ej)ƒ¡Z5e" (e'd#ej+ƒ¡Z6e" (e'd$ej-ƒ¡Z7dS)%zZJSON Web Algorithms. https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40 éN)ÚHashable)ÚAnyÚCallableÚDict)Údefault_backend)ÚhashesÚhmac)ÚecÚpaddingÚrsa)Údecode_dss_signatureÚencode_dss_signature)Ú HashAlgorithm)ÚerrorsÚ interfacesÚjwkc@seZdZdZdS)ÚJWAzJSON Web Algorithm.N)Ú__name__Ú __module__Ú __qualname__Ú__doc__©rrú+C:\Program Files\Certbot\pkgs\josepy\jwa.pyrsrc@sÒeZdZUdZiZeedfed<eed<eddœdd„Z ee dœd d „Z e d œd d „Z edddœdd„ƒZed œdd„Zeeddœdd„ƒZejeeedœdd„ƒZejeeee dœdd„ƒZed œdd„ZdS)Ú JWASignaturez-Base class for JSON Web Signature Algorithms.Ú SIGNATURESÚktyN)ÚnameÚreturncCs ||_dS©N©r)ÚselfrrrrÚ__init__&szJWASignature.__init__)ÚotherrcCst|tƒstS|j|jkSr)Ú isinstancerÚNotImplementedr)r r"rrrÚ__eq__)s zJWASignature.__eq__)rcCst|j|jfƒSr)ÚhashÚ __class__r©r rrrÚ__hash__.szJWASignature.__hash__)Ú signature_clsrcCs||j|j<|S)z(Register class for JSON deserialization.)rr)Úclsr*rrrÚregister1s zJWASignature.registercCs|jSrrr(rrrÚto_partial_json7szJWASignature.to_partial_json)ÚjobjrcCs |j|Sr)r)r+r.rrrÚ from_json:szJWASignature.from_json©ÚkeyÚmsgrcCs tƒ‚dS)úSign the ``msg`` using ``key``.N©ÚNotImplementedError)r r1r2rrrÚsign>szJWASignature.sign©r1r2ÚsigrcCs tƒ‚dS)z-Verify the ``msg`` and ``sig`` using ``key``.Nr4)r r1r2r8rrrÚverifyCszJWASignature.verifycCs|jSrrr(rrrÚ__repr__HszJWASignature.__repr__)rrrrrrÚstrÚ__annotations__rr!Úboolr%Úintr)Ú classmethodr,r-r/ÚabcÚabstractmethodÚbytesr6r9r:rrrrr s rcsXeZdZejZeegefdœ‡fdd„ Z e e e dœdd„Z e e e e dœdd „Z ‡ZS) Ú_JWAHS©rÚhash_cstƒ |¡|ƒ|_dSr©Úsuperr!r&©r rrE©r'rrr!Os z_JWAHS.__init__r0cCs&tj||jtƒd�}| |¡| ¡S)N©Zbackend)rÚHMACr&rÚupdateÚfinalize)r r1r2Zsignerrrrr6Ss z _JWAHS.signr7c Csntj||jtƒd�}| |¡z| |¡Wn8tjjyd}zt j |dd�WYd}~dSd}~00dSdS)NrJT©Úexc_infoF) rrKr&rrLr9Ú cryptographyÚ exceptionsÚInvalidSignatureÚloggerÚdebug)r r1r2r8ZverifierÚerrorrrrr9Xs z _JWAHS.verify)rrrrZJWKOctrr;rrr!rBr6r=r9Ú __classcell__rrrIrrCLsrCc@sVeZdZUejZeZee d<eZ e e d<e j eedœdd„Ze jeeedœdd„Zd S) Ú_JWARSAr r&r0c Cs”z| ||j|j¡WStyP}z$tj|dd�t d¡‚WYd}~nHd}~0tyŽ}z(tj|dd�t t |ƒ¡‚WYd}~n d}~00dS)r3TrNú%Public key cannot be used for signingN) r6r r&ÚAttributeErrorrSrTrÚErrorÚ ValueErrorr;©r r1r2rUrrrr6isz _JWARSA.signr7c CsZz| |||j|j¡Wn8tjjyP}ztj|dd�WYd}~dSd}~00dSdS)ú,Verify the ``msg` and ``sig`` using ``key``.TrNNF)r9r r&rPrQrRrSrT)r r1r2r8rUrrrr9ts z_JWARSA.verifyN)rrrrZJWKRSArr$r rr<r&rr Z RSAPrivateKeyrBr6Z RSAPublicKeyr=r9rrrrrWds    rWcs.eZdZeegefddœ‡fdd„ Z‡ZS)Ú_JWARSN©rrErcs"tƒ |¡t ¡|_|ƒ|_dSr)rGr!r ZPKCS1v15r&rHrIrrr!€s  z_JWARS.__init__©rrrr;rrr!rVrrrIrr^sr^cs.eZdZeegefddœ‡fdd„ Z‡ZS)Ú_JWAPSNr_cs4tƒ |¡tjt |ƒ¡tjjd�|_|ƒ|_dS)N)ZmgfZ salt_length)rGr!r ZPSSZMGF1Z MAX_LENGTHr&rHrIrrr!‡s z_JWAPS.__init__r`rrrIrra†sracs†eZdZejZeegefdœ‡fdd„ Z e j e e dœdd„Z e j e e dœdd„Ze je e ed œd d „Ze je e ed œd d„Z‡ZS)Ú_JWAECrDcstƒ |¡|ƒ|_dSrrFrHrIrrr!�s z_JWAEC.__init__r0cCsB| ||¡}t|ƒ\}}tj |j¡}|j|dd�|j|dd�S)r3Úbig)ÚlengthÚ byteorder)Ú_signr rÚJWKECÚexpected_length_for_curveÚcurveÚto_bytes)r r1r2r8ZdrZdsrdrrrr6”s   ÿz _JWAEC.signc Cs–z| |t |j¡¡WStyR}z$tj|dd�t d¡‚WYd}~nHd}~0t y�}z(tj|dd�t t |ƒ¡‚WYd}~n d}~00dS)NTrNrX) r6r ÚECDSAr&rYrSrTrrZr[r;r\rrrrf�sz _JWAEC._signr7cCs^tj |j¡}t|ƒd|kr"dSttj|d|…dd�tj||d…dd�ƒ}| |||¡S)r]éFrrc)reN) rrgrhriÚlenr r>Ú from_bytesÚ_verify)r r1r2r8ZrlenÚasn1sigrrrr9§sþz _JWAEC.verify)r1r2rprc Cs\z| ||t |j¡¡Wn8tjjyR}ztj|dd�WYd}~dSd}~00dSdS)NTrNF) r9r rkr&rPrQrRrSrT)r r1r2rprUrrrro³s z_JWAEC._verify)rrrrrgrr;rrr!r ZEllipticCurvePrivateKeyrBr6rfZEllipticCurvePublicKeyr=r9rorVrrrIrrb�s    rbÚHS256ÚHS384ÚHS512ÚRS256ÚRS384ÚRS512ÚPS256ÚPS384ÚPS512ÚES256ÚES384ÚES512)8rr@ZloggingÚcollections.abcrÚtypingrrrZcryptography.exceptionsrPZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ)cryptography.hazmat.primitives.asymmetricr r r Z/cryptography.hazmat.primitives.asymmetric.utilsr r Z%cryptography.hazmat.primitives.hashesrZjosepyrrrZ getLoggerrrSZJSONDeSerializablerrrCrWr^rarbr,ZSHA256rqZSHA384rrZSHA512rsrtrurvrwrxryrzr{r|rrrrÚs>    ,1