a ‚oe2 ã@s~ddlmZddlZddlZddlmZddlmZmZm Z ddl m Z ddl mZddlmZejdZGd d „d eƒZdS) é)Ú annotationsN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithm)Úopenssl)Ú constant_time)ÚKeyDerivationFunctionéc@sHeZdZddddddddœdd„Zdddœd d „Zddd d œd d„ZdS)ÚScryptNÚbytesÚintz typing.Any)ÚsaltÚlengthÚnÚrÚpÚbackendcCs�ddlm}| ¡stdƒ‚||_t d|¡|dksF||d@dkrNtdƒ‚|dkr^tdƒ‚|dkrntd ƒ‚d |_||_ ||_ ||_ ||_ dS) Nr)rz/This version of OpenSSL does not support scryptrr éz-n must be greater than 1 and be a power of 2.z%r must be greater than or equal to 1.z%p must be greater than or equal to 1.F) Z,cryptography.hazmat.backends.openssl.backendrZscrypt_supportedrÚ_lengthrZ _check_bytesÚ ValueErrorÚ_usedÚ_saltÚ_nÚ_rÚ_p)ÚselfrrrrrrZossl©rúJC:\Program Files\Certbot\pkgs\cryptography\hazmat\primitives\kdf\scrypt.pyÚ__init__s$ ÿ zScrypt.__init__)Ú key_materialÚreturnc CsB|jrtdƒ‚d|_t d|¡tj ||j|j|j |j t |j ¡S)Nz'Scrypt instances can only be used once.Tr ) rrrZ_check_byteslikeÚ rust_opensslZkdfZ derive_scryptrrrrÚ _MEM_LIMITr)rr rrrÚderive<s ùz Scrypt.deriveÚNone)r Ú expected_keyr!cCs"| |¡}t ||¡stdƒ‚dS)NzKeys do not match.)r$rZbytes_eqr)rr r&Z derived_keyrrrÚverifyMs  z Scrypt.verify)N)Ú__name__Ú __module__Ú __qualname__rr$r'rrrrr sù"r )Z __future__rÚsysÚtypingZ cryptographyrZcryptography.exceptionsrrrZ"cryptography.hazmat.bindings._rustrr"Zcryptography.hazmat.primitivesrZ"cryptography.hazmat.primitives.kdfr Úmaxsizer#r rrrrÚs