pgddlZddlZddlZddlZddlZddlmZddlmZddl m Z m Z ddl m Z mZmZddlmZGddeZd ZGd d ZGd d ZdS)N)utils)InvalidSignature)hashespadding)Cipher algorithmsmodes)HMACceZdZdS) InvalidTokenN)__name__ __module__ __qualname__5/usr/lib/python3/dist-packages/cryptography/fernet.pyr r sDrr <c eZdZ ddejeefdejfdZe defdZ dedefdZ ded e defd Z ded e d edefd Z dd ejeefdeje defdZd ejeefde d e defdZd ejeefde fdZed ejeefdeje effdZdeddfdZdede dejeje e fdefdZdS)FernetNkeybackendc tj|}n'#tj$r}t d|d}~wwxYwt |dkrt d|dd|_|dd|_dS)Nz4Fernet key must be 32 url-safe base64-encoded bytes. )base64urlsafe_b64decodebinasciiError ValueErrorlen _signing_key_encryption_key)selfrrexcs r__init__zFernet.__init__s  *3//CC~   F   s88r>>F  H"233xs;6;returncNtjtjdS)Nr)rurlsafe_b64encodeosurandom)clss r generate_keyzFernet.generate_key.s' 2777rdatacj||ttjSNencrypt_at_timeinttime)r#r-s rencryptzFernet.encrypt2s&##D#dikk*:*:;;;r current_timecXtjd}||||S)Nr)r)r*_encrypt_from_parts)r#r-r5ivs rr1zFernet.encrypt_at_time5s' Z^^''lB???rr8ctjd|tjtjj}||| z}tt j|j tj |}||| z}d|ddz|z|z}t!|jt%j} | || } t)j|| zS)Nr-big)length byteorder)r _check_bytesrPKCS7rAES block_sizepadderupdatefinalizerr"r CBC encryptorto_bytesr r!rSHA256rr() r#r-r5r8rC padded_datarG ciphertext basic_partshhmacs rr7zFernet._encrypt_from_parts9s; 64(((z~899@@BBmmD))FOO,=,==  N4/ 0 0 IbMM   )++ %%k22Y5G5G5I5II  ##1#>> ?    "FMOO 4 4 zz||' d(:;;;rtokenttlct|\}}|d}n"|ttjf}||||Sr/)r_get_unverified_token_datar2r3 _decrypt_data)r#rOrP timestampr- time_infos rdecryptzFernet.decryptRsW!;;EBB 4 ;IIc$)++../I!!$ 9===rc|tdt|\}}|||||fS)Nz6decrypt_at_time() can only be used with a non-None ttl)rrrRrS)r#rOrPr5rTr-s rdecrypt_at_timezFernet.decrypt_at_time\sT ;H !;;EBB 4!!$ C3FGGGrcjt|\}}|||Sr/)rrR_verify_signature)r#rOrTr-s rextract_timestampzFernet.extract_timestampfs3 ;;EBB 4 t$$$rctt|ttfstd t j|}n!#tt jf$rtwxYw|r |ddkrtt|dkrtt |ddd}||fS)Nztoken must be bytes or strr r<)r>) isinstancestrbytes TypeErrorrrrrr r r2 from_bytes)rOr-rTs rrRz!Fernet._get_unverified_token_datals%#u.. :899 9 +E22DD8>*      tAw$  t99q== NN4!9N>> $s AA ct|jtj}||dd ||dddS#t $rtwxYw)N)r r!rrIrDverifyrr )r#r-rMs rrZzFernet._verify_signaturesz "FMOO 4 4 dsd  HHT#$$Z      s A$$A6rTrUc|*|\}}||z|krt|tz|krt|||dd}|dd}tt j|jtj| }| |} | | z } n#t$rtwxYwtjtjj} | | } | | z } n#t$rtwxYw| S)Nr^rf)r _MAX_CLOCK_SKEWrZrrrAr"r rF decryptorrDrErrr@rBunpadder) r#r-rTrUrPr5r8rKrkplaintext_paddedrlunpaddeds rrSzFernet._decrypt_datasm  ) C3--""o- 99"" t$$$ !B$Z"S&\  N4/ 0 0%)B--  )++ %++J77   2 2 4 4 4       =!:;;DDFF??#344  ))++ +HH     s7CC!/EEr/)r rrtypingUnionrbraAnyr% classmethodr,r4r2r1r7OptionalrVrXr[ staticmethodTuplerRrZrSrrrrrsp#(( \%* %(((((&8U888[8>\%*->4:OC4H> >>>>H\%*-H47HGJH HHHHv|E3J'?C |E3J' c5j !\(e!!!?6<S#9: !  !!!!!!rrceZdZdejefdZdedefdZdede defdZ dej ee fdefdZ d dej ee fd eje defd Zdej ee fd e de defd Zd S) MultiFernetfernetscTt|}|std||_dS)Nz1MultiFernet requires at least one Fernet instance)listr_fernets)r#rxs rr%zMultiFernet.__init__s7w-- C   rmsgr&cj||ttjSr/r0)r#r|s rr4zMultiFernet.encrypts&##CTY[[)9)9:::rr5cD|jd||S)Nr)r{r1)r#r|r5s rr1zMultiFernet.encrypt_at_times}Q//\BBBrct|\}}|jD]+} |||d}n#t$rY(wxYwtt jd}|jd|||S)Nrr)rrRr{rSr r)r*r7)r#r|rTr-fpr8s rrotatezMultiFernet.rotates ;;C@@ 4  A OOD)T::      Z^^}Q33Ay"EEEsA A ANrPct|jD]*} |||cS#t$rY'wxYwtr/)r{rVr )r#r|rPrs rrVzMultiFernet.decryptsZ  A yyc*****    s # 00cv|jD]+} ||||cS#t$rY(wxYwtr/)r{rXr )r#r|rPr5rs rrXzMultiFernet.decrypt_at_times^  A ((c<@@@@@    s $ 11r/)r rrroIterablerr%rbr4r2r1rprarrsrVrXrrrrwrwsD  7    ;5;U;;;;C5CCCCCC F&,ucz2 Fu F F F FJN<s +28/#2F <s +25EH rrw)rrr)r3ro cryptographyrcryptography.exceptionsrcryptography.hazmat.primitivesrr&cryptography.hazmat.primitives.ciphersrrr #cryptography.hazmat.primitives.hmacr Exceptionr rjrrwrrrrs4   444444::::::::LLLLLLLLLL444444     9   PPPPPPPPf//////////r