e6dZddlZddlZddlZddlZddlmZmZmZm Z m Z m Z m Z m Z mZddlZddlmZddlmZmZddlmZmZddlZddlmZmZmZej<eZ Gdd ejBejD Z#e#jHGd d e#Z%e#jHGd de#Z&e#jHGdde#Z'y) JSON Web Key.N) AnyCallableDictMappingOptionalSequenceTupleTypeUnion)default_backend)hashes serialization)ecrsa)errors json_utilutilc |eZdZUdZdZiZeeedfe d<dZ e ee dfe d< e Zeee d< dd d d Zeeeeeeeeffe d <e e d <ej,fdegej0fdefdZej8ddZe ddedeedee de fdZe ddedeedee ddfdZ y)JWKrktyTYPES.cryptography_key_typesrequiredN),:T)indent separators sort_keys_thumbprint_json_dumps_paramskey hash_functionreturnc ntj|t}|jt j |j jDcic]\}}||jvs||c}}fi|jj|jScc}}w)zgCompute JWK Thumbprint. https://tools.ietf.org/html/rfc7638 :returns: bytes )backend) rHashr updatejsondumpsto_jsonitemsrr!encodefinalize)selfr#digestkvs ,/usr/lib/python3/dist-packages/josepy/jwk.py thumbprintzJWK.thumbprint3s]_o6GH JJ"&,,."6"6"8O$!QA>  8,??AbAbc 7M 7$T733 7ll;BB:NOO <+B+B+W+WX 827 3~./ 8 7 7 L LM 716 3}-. 7s/ B&C(C>CC#D<DDcL |j|||}|j turOt||js9tjdj|j|j|jjD]#}t||js||cStjdj|j#tj$r,}tj d|t |cYd}~Sd}~wwxYw)aLoad serialized key as JWK. :param str data: Public or private key serialized as PEM or DER. :param str password: Optional password. :param backend: A `.PEMSerializationBackend` and `.DERSerializationBackend` provider. :raises errors.Error: if unable to deserialize, or unsupported JWK algorithm :returns: JWK of an appropriate type. :rtype: `JWK` z,Loading symmetric key, asymmetric failed: %sr"Nz"Unable to deserialize {0} into {1}zUnsupported algorithm: {0})rMrrGloggerdebugJWKOcttypNotImplemented isinstancerrH __class__rvalues)rIr:r;r&r"rKjwk_clss r3loadzJWK.loadls$ $,,T8WEC 77. (CA[A[1\,,4;;CMM3==Y yy'') (G#w==>3'' (ll7>>s}}MNN|| $ LLG Od# # $sC$$D#7!DD#D#)r$r)NN)!__name__ __module__ __qualname____doc__type_field_namerrrDr __annotations__rr rrTrr r!r rintboolrSHA256r HashAlgorithmbytesr4abcabstractmethodr8 classmethodrMrYrr9r3rrseO$&E4T%[ !&46E$s)S.16%,Hhsm,P  [!4U8C=(3-QU3U-V(V#W HCI--!%b&*>*>&>?! !& $$UYPP$,UOPEMc]P PP8UYOO$,UOOEMc]O OOr9r) metaclassceZdZUdZdZdZdejfZe e d<de e e ffdZ edee efddfd Zd d Zy ) rRzSymmetric JWK.octrOr1r"r$cDdtj|jiS)Nr1)rencode_b64joser"r7s r3fields_to_partial_jsonzJWKOct.fields_to_partial_jsons Y--dhh788r9jobjc@|tj|dS)Nr1rO)rdecode_b64jose)rIrns r3fields_from_jsonzJWKOct.fields_from_jsonsy//S :;;r9c|SNrr7s r3r8zJWKOct.public_keys r9N)r$rR)rZr[r\r]rS __slots__rr^rrdr_rrDrmrgrrrqr8rr9r3rRrRsh CIS(()H J9S#X9>&E>: : 0--/ / 0s AAA"cVt||jjS)NrO)typer"r8r7s r3r8zJWKRSA.public_keys tDzdhh11344r9rnc fddD\}}tj||}dvr |jtSj d}dvsdvsdvs d vsd vsd vrmt fd d Dx\}}}} } } t d| Dr$t jdj| t fd| D\}}}} } n\tj|||\}}tj||}tj||} tj||} tj||||| | |jt} | S)Nc3FK|]}j|ywrsr).0xrIrns r3 z*JWKRSA.fields_from_json..s ?q!!$q'*?s!ryrx)rxrydrOpqdpdqqiothc3@K|]}j|ywrs)get)rrrns r3rz*JWKRSA.fields_from_json..s"U1488A;"Us)rrrrrc3&K|] }|| ywrsr)rparams r3rz*JWKRSA.fields_from_json..sDuemUDsz(Some private parameters are missing: {0}c3RK|]}jt| ywrs)rrD)rrrIs r3rz*JWKRSA.fields_from_json..s $S1S%6%6s1v%>$Ss$')rRSAPublicNumbersr8r rtuplerrGrHrsa_recover_prime_factors rsa_crt_dmp1 rsa_crt_dmq1 rsa_crt_iqmpRSAPrivateNumbers private_key) rIrnryrxpublic_numbersrrrrrr all_paramsr"s `` r3rqzJWKRSA.fields_from_jsons?J?1--Q7 d?>44_5FGH H   d3i ( 4Kd{t|t|t|}#"U8T"UU  V D DDll#M#T#TU_#`aa$$S $SS Aq"b" 00Aq9DAq!!!Q'B!!!Q'B!!!Q'B##Aq!RRHTT   s|r9c rt|jjtjr4|jj }|j |jd}n|jj}|jjj }|j |j|j|j|j|j|j|jd}|j!Dcic]\}}||j#|c}}Scc}}w)Nr)ryrxrrrrrr)rUr"_wrappedr RSAPublicKeyrryrxprivate_numbersr8rrrdmp1dmq1iqmpr,r)r/numbersparamsprivatepublicr"values r3rmzJWKRSA.fields_to_partial_jsons dhh'')9)9 :hh--/GYYYYF hh..0GXX((*99;FXXXXYYYYYYllllll FBHP:3T''..PPPsD3)r$rv)rZr[r\r]rSrr RSAPrivateKeyrrtrr^rjosepyrr~r_rrrgr`rDrrr8rrqrrm __classcell__rVs@r3rvrvs C!..0A0ABIS((#.H  % %%*c*S*T* WWWW00005.GCH$5.(..`QS#XQr9rvc eZdZUdZdZdZejejfZ de jddfZ e jjed<ded ed d ffd Zed eded efdZed ededed efdZeded efdZeded ej2fdZedej2d efdZd eeeffdZedeeefd dfdZddZ xZ!S)JWKECzEC JWK. :ivar key: :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey` or :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey` wrapped in :class:`~josepy.util.ComparableECKey` ECrOcrvryr"rzr{r$Ncd|vr8t|dtjstj|d|d<t||i|yr})rUrComparableECKeyrrrs r3rzJWKEC.__init__+sG F?:fUmT=Q=Q#R 00?F5M $)&)r9r:rcNtj|jd|S)zlEncode Base64urlUInt. :type data: long :type key_size: long :rtype: unicode rr)rrlrrs r3rzJWKEC._encode_param0s"'' f (UVVr9name valid_lengthc   tj|}t||k7r(tjd|d|dt|dt j |dS#t$rtjwxYw)rzExpected parameter "z" to be z" bytes after base64-decoding; got z bytes insteadrr)rrplenrrr`rr?)rIr:rrrs r3rzJWKEC._decode_param9s 0--d3F6{l*11*4&G225f+nN>>&E>: : 0--/ / 0s A!A$$B curve_namecN|dk(ry|dk(ry|dk(rytj)N secp256r1P-256 secp384r1P-384 secp521r1P-521)rSerializationError)rIrs r3_curve_name_to_crvzJWKEC._curve_name_to_crvGs2  $  $  $''))r9c|dk(rtjS|dk(rtjS|dk(rtjSt j )Nrrr)r SECP256R1 SECP384R1 SECP521R1rr)rIrs r3 _crv_to_curvezJWKEC._crv_to_curveQsL '><<> ! '><<> ! '><<> !))++r9curvect|tjryt|tjryt|tjryt d|)N 0BzUnexpected curve: )rUrrrrr?)rIrs r3expected_length_for_curvezJWKEC.expected_length_for_curve\sH eR\\ * r|| , r|| ,-eW566r9c i}t|jjtjr|jj }nt|jjtj rR|jj}|jjj }|j|d<ntjd|j|d<|j|d<|jDcic]1\}}||j||j!|j"3}}}|j%|j"j&|d<|Scc}}w)NrzRSupplied key is neither of type EllipticCurvePublicKey nor EllipticCurvePrivateKeyrrr)rUr"rrEllipticCurvePublicKeyrEllipticCurvePrivateKeyrr8 private_valuerrrrr,rrrrr)r/rrrr"rs r3rmzJWKEC.fields_to_partial_jsonfs1 dhh'')B)B CXX,,.F ))2+E+E Fhh..0GXX((*99;F!//F3K++. hhs hhs %lln U ##E4+I+I&,,+WX X  // 0A0ABu   s6E5rncjd}j|fddD\}}tj|||}dvr |j t Sj dd}tj||jt }|S)Nrc3JK|]}j||ywrsr)rryrIexpected_lengthrns r3rz)JWKEC.fields_from_json..s$S1!!$q'1o>Ss #)rr)rrrrrO) rrrEllipticCurvePublicNumbersr8r rEllipticCurvePrivateNumbersr) rIrnrrrrrr"rs `` @r3rqzJWKEC.fields_from_json|s!!$u+.77>S S166auM d?>44_5FGH H   d3io >,,Q?KKOL]^s|r9ct|jdr|jj}n1|jjjt }t ||S)Nr8rO)hasattrr"r8rr r)r/r"s r3r8zJWKEC.public_keysS 488\ *((%%'C(())+667HICtDzc""r9)r$r)"rZr[r\r]rSrtrrrrrr^rrrrr_rrrgr`rDrrr EllipticCurverrrrmrrqr8rrs@r3rrs} CI 779S9STs**C5H  $ $$*c*S*T* WWcWcWW 0 0C 0s 0s 0 0*C*C**,,(8(8,,7b.>.>7377S#X, GCH$5 '  #r9r)(r]rer)loggingrtypingrrrrrr r r r cryptography.exceptionsrAcryptography.hazmat.backendsr cryptography.hazmat.primitivesrr)cryptography.hazmat.primitives.asymmetricrr josepy.utilrrrr getLoggerrZrPTypedJSONObjectWithFieldsABCMetarregisterrRrvrrr9r3rs     8@=**   8 $nO) - -nObS.qQSqQqQhv#Cv#v#r9