3 l_@sddlmZmZmZddlZddlZddlmZddlm Z m Z m Z ddl m Z ddlmZejejGdddeZejejGd d d eZejejGd d d eZejeGd ddeZejeGdddeZejeGdddeZejeGdddeZejeGdddeZejeGdddeZejeGdddeZejeGdddeZejeGdddeZejeGdd d eZ ejeGd!d"d"eZ!ejeGd#d$d$eZ"ejeejeGd%d&d&eZ#ejeejeGd'd(d(eZ$ejeGd)d*d*eZ%ejeGd+d,d,eZ&ejeGd-d.d.eZ'dS)/)absolute_importdivisionprint_functionN)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons) _get_backend) HashBackendc@s(eZdZejddZejddZdS) HashAlgorithmcCsdS)zH A string naming this algorithm (e.g. "sha256", "md5"). N)selfr r /usr/lib64/python3.6/hashes.pynameszHashAlgorithm.namecCsdS)z< The size of the resulting digest in bytes. Nr )r r r r digest_sizeszHashAlgorithm.digest_sizeN)__name__ __module__ __qualname__abcabstractpropertyrrr r r rr sr c@sDeZdZejddZejddZejddZejddZ d S) HashContextcCsdS)zD A HashAlgorithm that will be used by this context. Nr )r r r r algorithm&szHashContext.algorithmcCsdS)z@ Processes the provided bytes through the hash. Nr )r datar r rupdate,szHashContext.updatecCsdS)zR Finalizes the hash context and returns the hash digest as bytes. Nr )r r r rfinalize2szHashContext.finalizecCsdS)zM Return a HashContext that is a copy of the current context. Nr )r r r rcopy8szHashContext.copyN) rrrrrrabstractmethodrrrr r r rr$src@seZdZdZdS)ExtendableOutputFunctionz7 An interface for extendable output functions. N)rrr__doc__r r r rr?src@s8eZdZd ddZejdZddZddZd d Z dS) HashNcCs`t|}t|tstdtjt|ts0td||_||_ |dkrV|j j |j |_ n||_ dS)Nz.Backend object does not implement HashBackend.z*Expected instance of hashes.HashAlgorithm.) r isinstancer rrZBACKEND_MISSING_INTERFACEr TypeError _algorithm_backendZcreate_hash_ctxr_ctx)r rbackendctxr r r__init__Hs  z Hash.__init__r"cCs.|jdkrtdtjd||jj|dS)NzContext was already finalized.r)r$rrZ_check_bytesliker)r rr r rr]s  z Hash.updatecCs*|jdkrtdt|j|j|jjdS)NzContext was already finalized.)r%r&)r$rrrr#r)r r r rrcs z Hash.copycCs&|jdkrtd|jj}d|_|S)NzContext was already finalized.)r$rr)r Zdigestr r rrjs   z Hash.finalize)NN) rrrr'rread_only_propertyrrrrr r r rrFs   rc@seZdZdZdZdZdS)SHA1Zsha1@N)rrrrr block_sizer r r rr)rsr)c@seZdZdZdZdZdS) SHA512_224z sha512-224N)rrrrrr,r r r rr-ysr-c@seZdZdZdZdZdS) SHA512_256z sha512-256 r/N)rrrrrr,r r r rr0sr0c@seZdZdZdZdZdS)SHA224Zsha224r.r+N)rrrrrr,r r r rr2sr2c@seZdZdZdZdZdS)SHA256Zsha256r1r+N)rrrrrr,r r r rr3sr3c@seZdZdZdZdZdS)SHA384Zsha3840r/N)rrrrrr,r r r rr4sr4c@seZdZdZdZdZdS)SHA512Zsha512r+r/N)rrrrrr,r r r rr6sr6c@seZdZdZdZdS)SHA3_224zsha3-224r.N)rrrrrr r r rr7sr7c@seZdZdZdZdS)SHA3_256zsha3-256r1N)rrrrrr r r rr8sr8c@seZdZdZdZdS)SHA3_384zsha3-384r5N)rrrrrr r r rr9sr9c@seZdZdZdZdS)SHA3_512zsha3-512r+N)rrrrrr r r rr:sr:c@s"eZdZdZddZejdZdS)SHAKE128Zshake128cCs.t|tjstd|dkr$td||_dS)Nzdigest_size must be an integerz&digest_size must be a positive integer)r six integer_typesr! ValueError _digest_size)r rr r rr's  zSHAKE128.__init__r@N)rrrrr'rr(rr r r rr;s r;c@s"eZdZdZddZejdZdS)SHAKE256Zshake256cCs.t|tjstd|dkr$td||_dS)Nzdigest_size must be an integerr<z&digest_size must be a positive integer)r r=r>r!r?r@)r rr r rr's  zSHAKE256.__init__r@N)rrrrr'rr(rr r r rrAs rAc@seZdZdZdZdZdS)MD5Zmd5r+N)rrrrrr,r r r rrBsrBc@s.eZdZdZdZdZdZddZej dZ dS) BLAKE2bZblake2br+r<r/cCs|dkrtd||_dS)Nr+zDigest size must be 64)r?r@)r rr r rr'szBLAKE2b.__init__r@N) rrrr_max_digest_size_min_digest_sizer,r'rr(rr r r rrDs rDc@s.eZdZdZdZdZdZddZej dZ dS) BLAKE2sZblake2sr+r1r<cCs|dkrtd||_dS)Nr1zDigest size must be 32)r?r@)r rr r rr'szBLAKE2s.__init__r@N) rrrrr,rErFr'rr(rr r r rrGs rG)(Z __future__rrrrr=Z cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Z add_metaclassABCMetaobjectr rrZregister_interfacerr)r-r0r2r3r4r6r7r8r9r:r;rArBrDrGr r r rs`   +