a ¹a ã@s°ddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z m Z ddl mZmZmZddlmZGdd„deƒZd ZGd d „d eƒZGd d „d eƒZdS)éN)Úutils)ÚInvalidSignature)ÚhashesÚpadding)ÚCipherÚ algorithmsÚmodes)ÚHMACc@s eZdZdS)Ú InvalidTokenN)Ú__name__Ú __module__Ú __qualname__©rrú9/usr/lib64/python3.9/site-packages/cryptography/fernet.pyr sr é<c@seZdZd!ejeefejdœdd„Ze edœdd„ƒZ eedœd d „Z ee ed œd d „Z ee eedœdd„Zd"eeje edœdd„Zee e edœdd„Zee dœdd„Zeeeje efdœdd„ƒZeddœdd„Zee ejeje e fedœdd „ZdS)#ÚFernetN)ÚkeyÚbackendcCs>t |¡}t|ƒdkrtdƒ‚|dd…|_|dd…|_dS)Né z4Fernet key must be 32 url-safe base64-encoded bytes.é)Úbase64Úurlsafe_b64decodeÚlenÚ ValueErrorÚ _signing_keyÚ_encryption_key)ÚselfrrrrrÚ__init__s  ÿzFernet.__init__)ÚreturncCst t d¡¡S)Nr)rÚurlsafe_b64encodeÚosÚurandom)ÚclsrrrÚ generate_key*szFernet.generate_key)ÚdatarcCs| |tt ¡ƒ¡S©N©Úencrypt_at_timeÚintÚtime)rr$rrrÚencrypt.szFernet.encrypt)r$Ú current_timercCst d¡}| |||¡S)Nr)r r!Ú_encrypt_from_parts)rr$r+Úivrrrr'1s zFernet.encrypt_at_time)r$r+r-rc Cs¦t d|¡t tjj¡ ¡}| |¡|  ¡}t t |j ¡t   |¡ƒ ¡}| |¡|  ¡}dt d|¡||}t|jt ¡ƒ} |  |¡|   ¡} t || ¡S)Nr$ó€ú>Q)rÚ _check_bytesrÚPKCS7rÚAESÚ block_sizeÚpadderÚupdateÚfinalizerrrÚCBCÚ encryptorÚstructÚpackr rrÚSHA256rr) rr$r+r-r4Z padded_datar8Ú ciphertextZ basic_partsÚhZhmacrrrr,5s  þÿ zFernet._encrypt_from_parts)ÚtokenÚttlrcCs:t |¡\}}|durd}n|tt ¡ƒf}| |||¡Sr%)rÚ_get_unverified_token_datar(r)Ú _decrypt_data)rr>r?Ú timestampr$Ú time_inforrrÚdecryptKs zFernet.decrypt)r>r?r+rcCs0|durtdƒ‚t |¡\}}| ||||f¡S)Nz6decrypt_at_time() can only be used with a non-None ttl)rrr@rA)rr>r?r+rBr$rrrÚdecrypt_at_timeSs ÿzFernet.decrypt_at_time)r>rcCst |¡\}}| |¡|Sr%)rr@Ú_verify_signature)rr>rBr$rrrÚextract_timestamp]s zFernet.extract_timestampc Csˆt d|¡zt |¡}Wnttjfy6t‚Yn0|rH|ddkrLt‚zt  d|dd…¡\}Wntj y~t‚Yn0||fS)Nr>ré€r/éé ) rr0rrÚ TypeErrorÚbinasciiÚErrorr r9ÚunpackÚerror)r>r$rBrrrr@cs   z!Fernet._get_unverified_token_datacCsTt|jt ¡ƒ}| |dd…¡z| |dd…¡WntyNt‚Yn0dS)Néàÿÿÿ)r rrr;r5Zverifyrr )rr$r=rrrrFts  zFernet._verify_signature)r$rBrCrc Csè|dur0|\}}|||kr t‚|t|kr0t‚| |¡|dd…}|dd…}tt |j¡t |¡ƒ  ¡}|  |¡} z| |  ¡7} Wnt yžt‚Yn0t  tjj¡ ¡} |   | ¡} z| |   ¡7} Wnt yât‚Yn0| S)NrJérP)r Ú_MAX_CLOCK_SKEWrFrrr2rrr7Ú decryptorr5r6rrr1r3Úunpadder) rr$rBrCr?r+r-r<rSZplaintext_paddedrTZunpaddedrrrrA|s0     ÿ      zFernet._decrypt_data)N)N)r r r ÚtypingÚUnionÚbytesÚstrÚAnyrÚ classmethodr#r*r(r'r,ÚOptionalrDrErGÚ staticmethodÚTupler@rFrArrrrrs2ý ý þ  þ  ûrc@s€eZdZejedœdd„Zeedœdd„Zee edœdd „Z eedœd d „Z deej e ed œdd„Z ee e edœdd„Zd S)Ú MultiFernet)ÚfernetscCst|ƒ}|stdƒ‚||_dS)Nz1MultiFernet requires at least one Fernet instance)ÚlistrÚ_fernets)rr_rrrr¡s ÿzMultiFernet.__init__)ÚmsgrcCs| |tt ¡ƒ¡Sr%r&)rrbrrrr*©szMultiFernet.encrypt)rbr+rcCs|jd ||¡S)Nr)rar')rrbr+rrrr'¬szMultiFernet.encrypt_at_timec Csht |¡\}}|jD]0}z| ||d¡}WqJWqtyBYq0qt‚t d¡}|jd |||¡S)Nrr)rr@rarAr r r!r,)rrbrBr$ÚfÚpr-rrrÚrotate¯s    zMultiFernet.rotateN)rbr?rc Cs:|jD]*}z| ||¡WSty.Yq0qt‚dSr%)rarDr )rrbr?rcrrrrD½s   zMultiFernet.decrypt)rbr?r+rc Cs<|jD],}z| |||¡WSty0Yq0qt‚dSr%)rarEr )rrbr?r+rcrrrrEÅs   zMultiFernet.decrypt_at_time)N)r r r rUÚIterablerrrWr*r(r'rer[rDrErrrrr^ s þr^)rrLr r9r)rUZ cryptographyrZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ&cryptography.hazmat.primitives.ciphersrrrZ#cryptography.hazmat.primitives.hmacr Ú Exceptionr rRÚobjectrr^rrrrÚs