B \`@sddlmZmZmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZmZddlmZmZmZddlmZGdd d eZd ZGd d d eZGd ddeZdS))absolute_importdivisionprint_functionN)InvalidSignature)default_backend)hashespadding)Cipher algorithmsmodes)HMACc@s eZdZdS) InvalidTokenN)__name__ __module__ __qualname__rrF/opt/alt/python37/lib64/python3.7/site-packages/cryptography/fernet.pyr sr <c@s`eZdZdddZeddZddZdd Zdd d Zd d Z e ddZ ddZ ddZ dS)FernetNcCsR|dkrt}t|}t|dkr,td|dd|_|dd|_||_dS)N z4Fernet key must be 32 url-safe base64-encoded bytes.)rbase64urlsafe_b64decodelen ValueError _signing_key_encryption_key_backend)selfkeybackendrrr__init__s  zFernet.__init__cCsttdS)Nr)rurlsafe_b64encodeosurandom)clsrrr generate_key,szFernet.generate_keycCs$tt}td}||||S)Nr)inttimer#r$_encrypt_from_parts)rdata current_timeivrrrencrypt0s  zFernet.encryptc Cst|tstdttjj}| || }t t|j t ||j}| || }dtd|||}t|jt|jd} | || } t|| S)Nzdata must be bytes.z>Q)r ) isinstancebytes TypeErrorrPKCS7r AES block_sizepadderupdatefinalizer rr CBCr encryptorstructpackr rrSHA256rr") rr*r+r,r5Z padded_datar9 ciphertextZ basic_partshZhmacrrrr)5s  zFernet._encrypt_from_partscCst|\}}||||S)N)r_get_unverified_token_data _decrypt_data)rtokenttl timestampr*rrrdecryptIszFernet.decryptcCst|\}}|||S)N)rr?_verify_signature)rrArCr*rrrextract_timestampMs zFernet.extract_timestampc Cst|tstdyt|}Wnttjfk r>tYnX|rTt |ddkrXtyt d|dd\}Wnt j k rtYnX||fS)Nztoken must be bytes.rz>Q ) r/r0r1rrbinasciiErrorr sixZ indexbytesr:unpackerror)rAr*rCrrrr?Ss   z!Fernet._get_unverified_token_datacCs\t|jt|jd}||ddy||ddWntk rVtYnXdS)N)r i) r rrr<rr6Zverifyrr )rr*r>rrrrEfs zFernet._verify_signaturec Cstt}|dk r4|||kr$t|t|kr4t|||dd}|dd}tt|jt ||j  }| |}y||7}Wntk rtYnXttjj} | |} y| | 7} Wntk rtYnX| S)NrIi)r'r(r _MAX_CLOCK_SKEWrEr r r3rr r8r decryptorr6r7rrr2r4unpadder) rr*rCrBr+r,r=rQZplaintext_paddedrRZunpaddedrrrr@ns.          zFernet._decrypt_data)N)N)rrrr! classmethodr&r-r)rDrF staticmethodr?rEr@rrrrrs    rc@s.eZdZddZddZddZd dd ZdS) MultiFernetcCst|}|std||_dS)Nz1MultiFernet requires at least one Fernet instance)listr_fernets)rZfernetsrrrr!s zMultiFernet.__init__cCs|jd|S)Nr)rWr-)rmsgrrrr-szMultiFernet.encryptc Csjt|\}}x<|jD].}y|||d}PWqtk rBYqXqWttd}|jd|||S)Nrr)rr?rWr@r r#r$r))rrXrCr*fpr,rrrrotates   zMultiFernet.rotateNc Cs:x0|jD]&}y |||Stk r,YqXqWtdS)N)rWrDr )rrXrBrYrrrrDs    zMultiFernet.decrypt)N)rrrr!r-r[rDrrrrrUsrU)Z __future__rrrrrJr#r:r(rLZcryptography.exceptionsrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrrZ&cryptography.hazmat.primitives.ciphersr r r Z#cryptography.hazmat.primitives.hmacr Exceptionr rPobjectrrUrrrrs   p