o h9Ra#@sdZddlZddlZddlmZmZmZddlZddl m Z ddl m Z ddl m Z ddlmZmZmZddlmZdd lmZdd lmZdd lmZmZmZdd lmZeeZGd ddej Z!Gddde!eZ"Gddde"Z#GdddZ$Gddde$e"Z%Gddde$e"Z&Gddde"Z'e"(e#de j)Z*e"(e#de j+Z,e"(e#de j-Z.e"(e%de j)Z/e"(e%de j+Z0e"(e%d e j-Z1e"(e&d!e j)Z2e"(e&d"e j+Z3e"(e&d#e j-Z4e"(e'd$e j)Z5e"(e'd%e j+Z6e"(e'd&e j-Z7dS)'zZJSON Web Algorithms. https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40 N)DictAnyCallable)default_backend)hashes)hmac)paddingecrsa)decode_dss_signature)encode_dss_signature) HashAlgorithm)errors interfacesjwk)Hashablec@seZdZdZdS)JWAzJSON Web Algorithm.N)__name__ __module__ __qualname____doc__rr,/usr/lib/python3/dist-packages/josepy/jwa.pyrsrc @seZdZUdZiZeedfed<eed<deddfddZ d ede fd d Z de fd d Z edddZdefddZededdfddZejdededefddZejdededede fddZdefddZdS) JWASignaturez-Base class for JSON Web Signature Algorithms. SIGNATURESktynamereturnNcCs ||_dSNr)selfrrrr__init__&s zJWASignature.__init__othercCst|tstS|j|jkSr) isinstancerNotImplementedr)r r"rrr__eq__)s  zJWASignature.__eq__cCst|j|jfSr)hash __class__rr rrr__hash__.szJWASignature.__hash__ signature_clscCs||j|j<|S)z(Register class for JSON deserialization.)rr)clsr*rrrregister1s zJWASignature.registercC|jSrrr(rrrto_partial_json7zJWASignature.to_partial_jsonjobjcCs |j|Sr)r)r+r0rrr from_json:s zJWASignature.from_jsonkeymsgcCt)Sign the ``msg`` using ``key``.NotImplementedError)r r2r3rrrsign>zJWASignature.signsigcCr4)z-Verify the ``msg`` and ``sig`` using ``key``.r6)r r2r3r:rrrverifyCr9zJWASignature.verifycCr-rrr(rrr__repr__Hr/zJWASignature.__repr__)r*rrr)rrrrrrstr__annotations__rr!boolr%intr) classmethodr,r.r1abcabstractmethodbytesr8r;r<rrrrr!s"  rcsdeZdZejZdedegefffdd Z de de de fdd Z de de d e de fd d Z ZS) _JWAHSrhash_ct|||_dSrsuperr!r&r rrFr'rrr!O  z_JWAHS.__init__r2r3rcCs&tj||jtd}|||S)Nbackend)rHMACr&rupdatefinalize)r r2r3signerrrrr8Ss z _JWAHS.signr:c Cshtj||jtd}||z||WdStjjy3}zt j |ddWYd}~dSd}~ww)NrMTexc_infoF) rrOr&rrPr; cryptography exceptionsInvalidSignatureloggerdebug)r r2r3r:verifiererrorrrrr;Xs  z _JWAHS.verify)rrrrJWKOctrr=rr r!rDr8r?r; __classcell__rrrKrrELs "rEc@s`eZdZUejZeZee d<eZ e e d<de j dedefddZde jdededefd d Zd S) _JWARSArr&r2r3rc Cst|d}z|r|||j|jWS||j|j}Wn1ty3}z tj|ddt dd}~wt yL}ztj|ddt t |d}~ww| |z| WSt yq}ztj|ddt t |d}~ww)r5r8TrS%Public key cannot be used for signingN)hasattrr8rr&rRAttributeErrorrXrYrError ValueErrorr=rPrQr r2r3new_apirRr[rrrr8is,    z _JWARSA.signr:c Cst|d}|s|||j|j}||z|r%||||j|jWdS|WdStjjyG}zt j |ddWYd}~dSd}~ww),Verify the ``msg` and ``sig`` using ``key``.r;TrSNF) r`rZrr&rPr;rUrVrWrXrY)r r2r3r:rerZr[rrrr;~s   z_JWARSA.verifyN)rrrrJWKRSArr$rrr>r&r r RSAPrivateKeyrDr8 RSAPublicKeyr?r;rrrrr^ds    r^c2eZdZdedegefddffdd ZZS)_JWARSrrFrNcs"t|t|_||_dSr)rIr!rPKCS1v15r&rJrKrrr!s   z_JWARS.__init__rrrr=rr r!r]rrrKrrk*rkcrj)_JWAPSrrFrNcs4t|tjt|tjjd|_||_dS)N)mgf salt_length)rIr!rPSSMGF1 MAX_LENGTHr&rJrKrrr!s   z_JWAPS.__init__rmrrrKrrornrocseZdZejZdedegefffdd Z de j de de fdd Z de j de de fd d Zde jde d e defd dZde jde de defddZZS)_JWAECrrFcrGrrHrJrKrrr!rLz_JWAEC.__init__r2r3rcCsB|||}t|\}}tj|j}|j|dd|j|ddS)r5big)length byteorder)_signr rJWKECexpected_length_for_curvecurveto_bytes)r r2r3r:drdsrwrrrr8s    z _JWAEC.signc Cst|d}z|r||t|jWS|t|j}Wn1ty5}z tj|ddt dd}~wt yN}ztj|ddt t |d}~ww| |z|WSt ys}ztj|ddt t |d}~ww)Nr8TrSr_)r`r8r ECDSAr&rRrarXrYrrbrcr=rPrQrdrrrrys,    z _JWAEC._signr:cCs^tj|j}t|d|krdSttj|d|ddtj||ddd}||||S)rfFrrv)rxN) rrzr{r|lenr r@ from_bytes_verify)r r2r3r:rlenasn1sigrrrr;sz _JWAEC.verifyrc Cst|d}|s||t|j}||z|r'|||t|jWdS|WdStjj yI}zt j |ddWYd}~dSd}~ww)Nr;TrSF) r`rZr rr&rPr;rUrVrWrXrY)r r2r3rrerZr[rrrrs   z_JWAEC._verify)rrrrrzrr=rr r!r EllipticCurvePrivateKeyrDr8ryEllipticCurvePublicKeyr?r;rr]rrrKrrus$ ruHS256HS384HS512RS256RS384RS512PS256PS384PS512ES256ES384ES512)8rrBloggingtypingrrrcryptography.exceptionsrUcryptography.hazmat.backendsrcryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetricrr r /cryptography.hazmat.primitives.asymmetric.utilsr r %cryptography.hazmat.primitives.hashesr josepyrrrcollections.abcr getLoggerrrXJSONDeSerializablerrrEr^rkrorur,SHA256rSHA384rSHA512rrrrrrrrrrrrrrsD        +- B