dbfdg 3 “k®ZE ã @s²ddlZddlZddlZddlmZmZmZyddlmZm Z Wne k rTYnXdd„Z dd„Z d d „Z d d „Zd d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)éNé)Ú binary_typeÚbytes_from_intÚ text_type)Údecode_dss_signatureÚencode_dss_signaturecCs.t|tƒr|jdƒSt|tƒr"|Stdƒ‚dS)Nzutf-8zExpected a string value)Ú isinstancerÚdecoderÚ TypeError)Úvalue©r ú/usr/lib/python3.6/utils.pyÚ force_unicodes    rcCs.t|tƒr|jdƒSt|tƒr"|Stdƒ‚dS)Nzutf-8zExpected a string value)rrÚencoderr )r r r r Ú force_bytess    rcCsBt|tƒr|jdƒ}t|ƒd}|dkr8|dd|7}tj|ƒS)NÚasciiéró=)rrrÚlenÚbase64Zurlsafe_b64decode)ÚinputZremr r r Úbase64url_decode!s    rcCstj|ƒjddƒS)Nró)rZurlsafe_b64encodeÚreplace)rr r r Úbase64url_encode-srcCs0|dkrtdƒ‚t|ƒ}t|ƒdkr(d}t|ƒS)NrzMust be a positive integeró)Ú ValueErrorrrr)ÚvalÚ int_bytesr r r Úto_base64url_uint1s  rcCsJt|tƒr|jdƒ}t|ƒ}tjdt|ƒ|ƒ}tdjdd„|DƒƒdƒS)Nrz%sBÚcSsg|] }d|‘qS)z%02xr )Ú.0Zbyter r r ú Dsz'from_base64url_uint..é) rrrrÚstructÚunpackrÚintÚjoin)rÚdataZbufr r r Úfrom_base64url_uint=s   r)cCsV|s|Sy|jƒ}|j|ƒWn2ttfk rP}ztd|ƒ‚WYdd}~XnX|S)Nz-original and updates must be a dictionary: %s)ÚcopyÚupdateÚAttributeErrorrr )ZoriginalZupdatesZmerged_optionsÚer r r Ú merge_dictGsr.cCs$dd||f}tj|jdƒƒ}|S)Nz%0*xér)ÚbinasciiZa2b_hexr)ZnumÚ num_bytesZ padded_hexZ big_endianr r r Únumber_to_bytesTsr2cCsttj|ƒdƒS)Nr#)r&r0Zb2a_hex)Ústringr r r Úbytes_to_numberZsr4cCs2|j}|dd}t|ƒ\}}t||ƒt||ƒS)Néé)Úkey_sizerr2)Zder_sigÚcurveÚnum_bitsr1ÚrÚsr r r Úder_to_raw_signature^s  r<cCsT|j}|dd}t|ƒd|kr*tdƒ‚t|d|…ƒ}t||d…ƒ}t||ƒS)Nr5r6r/zInvalid signature)r7rrr4r)Zraw_sigr8r9r1r:r;r r r Úraw_to_der_signaturegs r=)rr0r$ÚcompatrrrZ/cryptography.hazmat.primitives.asymmetric.utilsrrÚ ImportErrorrrrrrr)r.r2r4r<r=r r r r Ús$