MpjddlmZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZmZddlmZmZmZddlmZGd d eZd Zej2d Zej6ZGd dZGddZy)) annotationsN)Iterable)utils)InvalidSignature)hashespadding)Cipher algorithmsmodes)HMACc eZdZy) InvalidTokenN)__name__ __module__ __qualname__a/mnt/ssd/data/Dropbox/adrian/scripts/msg_venv/lib/python3.12/site-packages/cryptography/fernet.pyrrsrr<ceZdZ d ddZeddZddZddZ ddZd ddZ ddZ dd Z e dd Z dd Z dd Zy)FernetNc  tj|}t |dk7r t d|dd|_|dd|_tj|j|_ y#tj$r}t d|d}~wwxYw)Nz4Fernet key must be 32 url-safe base64-encoded bytes. ) base64urlsafe_b64decodebinasciiError ValueErrorlen _signing_key_encryption_keyr AES_aes)selfkeybackendexcs r__init__zFernet.__init__!s  **3/C s8r>F  H"23xNN4#7#78 ~~ F  sA))B < BB cRtjtjdS)Nr)rurlsafe_b64encodeosurandom)clss r generate_keyzFernet.generate_key5s'' 277rc\|j|ttjSNencrypt_at_timeinttime)r&datas rencryptzFernet.encrypt9s ##D#diik*:;;rcRtjd}|j|||S)Nr)r-r._encrypt_from_parts)r&r7 current_timeivs rr4zFernet.encrypt_at_time<s$ ZZ^''lB??rc*tjd|tj}|j ||j z}t |jtj|j}|j ||j z}d|jddz|z|z}t|jt} | j || j } tj || zS)Nr7big)length byteorder)r _check_bytes _PKCS7_128padderupdatefinalizer r%r CBC encryptorto_bytesr r"_SHA256rr,) r&r7r;r<rE padded_datarI ciphertext basic_partshhmacs rr:zFernet._encrypt_from_parts@s 64(""$mmD)FOO,== 499eiim4>>@ %%k2Y5G5G5II  ##1#> ?    ""G , zz|'' d(:;;rctj|\}}|d}n|ttjf}|j |||Sr2)r_get_unverified_token_datar5r6 _decrypt_data)r&tokenttl timestampr7 time_infos rdecryptzFernet.decryptVsJ ;;EB 4 ;Ic$))+./I!!$ 9==rcv| tdtj|\}}|j||||fSNz6decrypt_at_time() can only be used with a non-None ttl)r rrRrS)r&rTrUr;rVr7s rdecrypt_at_timezFernet.decrypt_at_time^sI ;H !;;EB 4!!$ C3FGGrcXtj|\}}|j||Sr2)rrR_verify_signature)r&rTrVr7s rextract_timestampzFernet.extract_timestamphs* ;;EB 4 t$rc:t|ttfs td t j |}|r|ddk7rtt|dkrttj|ddd}||fS#tt jf$rtwxYw)Nztoken must be bytes or strrr r@)rB) isinstancestrbytes TypeErrorrrrrrr!r5 from_bytes)rTr7rVs rrRz!Fernet._get_unverified_token_datans%#u.89 9 ++E2DtAw$  t9q= NN4!9N> $8>>*   s A:: Bct|jt}|jt |dd |j |ddy#t $rtwxYw)N)r r"rKrF memoryviewverifyrr)r&r7rOs rr]zFernet._verify_signaturesX ""G , D!$3'(  HHT#$Z    s AAc|%|\}}||z|krt|tz|krt|j|t|}|dd}|dd}t |j t j|j} | j|} | | jz } tj} | j| } | | jz } | S#t$rtwxYw#t$rtwxYw)Nr`rh)r_MAX_CLOCK_SKEWr]rir r%r rH decryptorrFrGr rDunpadder) r&r7rVrWrUr;mvr<rMrnplaintext_paddedrounpaddeds rrSzFernet._decrypt_datas  ) C3-""o- 9"" t$   !BZ3Z 499eiim4>>@ $++J7   2 2 4 4 &&(??#34  ))+ +H      sC%C8%C58Dr2)r' bytes | strr(z typing.AnyreturnNone)rtrd)r7rdrtrd)r7rdr;r5rtrd)r7rdr;r5r<rdrtrd)rTrsrU int | Nonertrd)rTrsrUr5r;r5rtrd)rTrsrtr5)rTrsrtztuple[int, bytes])r7rdrtru)r7rdrVr5rWztuple[int, int] | Nonertrd)rrrr* classmethodr0r8r4r:rXr[r^ staticmethodrRr]rSrrrrr s#9 99  9(88<@<<),<27< <,>H H'*H:=H H $   *   rrcVeZdZd dZd dZd dZd dZd ddZ ddZddZ y) MultiFernetcBt|}|s td||_y)Nz1MultiFernet requires at least one Fernet instance)listr _fernets)r&fernetss rr*zMultiFernet.__init__s'w-C   rc\|j|ttjSr2r3)r&msgs rr8zMultiFernet.encrypts ##CTYY[)9::rc@|jdj||S)Nr)r}r4)r&rr;s rr4zMultiFernet.encrypt_at_times}}Q//\BBrctj|\}}|jD]} |j||d}ntt j d}|jdj|||S#t$rY`wxYw)Nrr)rrRr}rSrr-r.r:)r&rrVr7fpr<s rrotatezMultiFernet.rotates ;;C@ 4 A OOD)T:   ZZ^}}Q33Ay"EE    sA:: BBNc|d}n|ttjf}tj|\}}|jD]} |j |||cSt #t $rY+wxYwr2)r5r6rrRr}rSr)r&rrUrWrVr7rs rrXzMultiFernet.decrypts| ;Ic$))+./I ;;C@ 4 A tY BB     s A)) A54A5c| tdtj|\}}|jD]} |j ||||fcSt #t $rY-wxYwrZ)r rrRr}rSr)r&rrUr;rVr7rs rr[zMultiFernet.decrypt_at_times{ ;H !;;C@ 4 A tYl8KLL     sA A A ctj|\}}|jD]} |j||cSt#t$rY+wxYwr2)rrRr}r]r)r&rrVr7rs rr^zMultiFernet.extract_timestamps^ ;;C@ 4 A ##D)       sA AA)r~zIterable[Fernet])rrdrtrd)rrdr;r5rtrd)rrsrtrdr2)rrsrUrvrtrd)rrsrUr5r;r5rtrd)rrsrtr5) rrrr*r8r4rrXr[r^rrrrzrzsG ;C F %(8;  rrz) __future__rrrr-r6typingcollections.abcr cryptographyrcryptography.exceptionsrcryptography.hazmat.primitivesrr&cryptography.hazmat.primitives.ciphersr r r #cryptography.hazmat.primitives.hmacr ExceptionrrmPKCS7rDSHA256rKrrzrrrrsy #  $4:LL4 9 W]]3  &--/IIXDDr