3 l�_��@s�ddlmZmZmZddlZddlZddlmZddlm Z m Z m Z ddl m Z ddlmZejej�Gdd�de��Zejej�Gd d �d e��Zejej�Gd d �d e��Zeje�Gd d�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd�de��Zeje�Gdd �d e��Z eje�Gd!d"�d"e��Z!eje�Gd#d$�d$e��Z"eje�eje�Gd%d&�d&e���Z#eje�eje�Gd'd(�d(e���Z$eje�Gd)d*�d*e��Z%eje�Gd+d,�d,e��Z&eje�Gd-d.�d.e��Z'dS)/�)�absolute_import�division�print_functionN)�utils)�AlreadyFinalized�UnsupportedAlgorithm�_Reasons)� _get_backend)� HashBackendc@s(eZdZejdd��Zejdd��ZdS)� HashAlgorithmcCsdS)zH A string naming this algorithm (e.g. "sha256", "md5"). N�)�selfr r �/usr/lib64/python3.6/hashes.py�nameszHashAlgorithm.namecCsdS)z< The size of the resulting digest in bytes. Nr )r r r r� digest_sizeszHashAlgorithm.digest_sizeN)�__name__� __module__� __qualname__�abc�abstractpropertyrrr r r rr sr c@sDeZdZejdd��Zejdd��Zejdd��Zejdd��Z 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 r�update,szHashContext.updatecCsdS)zR Finalizes the hash context and returns the hash digest as bytes. Nr )r r r r�finalize2szHashContext.finalizecCsdS)zM Return a HashContext that is a copy of the current context. Nr )r r r r�copy8szHashContext.copyN) rrrrrr�abstractmethodrrrr r r rr$src@seZdZdZdS)�ExtendableOutputFunctionz7 An interface for extendable output functions. N)rrr�__doc__r r r rr?src@s8eZdZd dd�Zejd�Zdd�Zdd�Zd d �Z dS) �HashNcCs`t|�}t|t�stdtj��t|t�s0td��||_||_ |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 r�backend�ctxr r r�__init__Hs  z Hash.__init__r"cCs.|jdkrtd��tjd|�|jj|�dS)NzContext was already finalized.r)r$rrZ_check_bytesliker)r rr r rr]s  z Hash.updatecCs*|jdkrtd��t|j|j|jj�d�S)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'r�read_only_propertyrrrrr r r rrFs   rc@seZdZdZdZdZdS)�SHA1Zsha1��@N)rrrrr� block_sizer r r rr)rsr)c@seZdZdZdZdZdS)� SHA512_224z sha512-224��N)rrrrrr,r r r rr-ysr-c@seZdZdZdZdZdS)� SHA512_256z sha512-256� r/N)rrrrrr,r r r rr0�sr0c@seZdZdZdZdZdS)�SHA224Zsha224r.r+N)rrrrrr,r r r rr2�sr2c@seZdZdZdZdZdS)�SHA256Zsha256r1r+N)rrrrrr,r r r rr3�sr3c@seZdZdZdZdZdS)�SHA384Zsha384�0r/N)rrrrrr,r r r rr4�sr4c@seZdZdZdZdZdS)�SHA512Zsha512r+r/N)rrrrrr,r r r rr6�sr6c@seZdZdZdZdS)�SHA3_224zsha3-224r.N)rrrrrr r r rr7�sr7c@seZdZdZdZdS)�SHA3_256zsha3-256r1N)rrrrrr r r rr8�sr8c@seZdZdZdZdS)�SHA3_384zsha3-384r5N)rrrrrr r r rr9�sr9c@seZdZdZdZdS)�SHA3_512zsha3-512r+N)rrrrrr r r rr:�sr:c@s"eZdZdZdd�Zejd�ZdS)�SHAKE128Zshake128cCs.t|tj�std��|dkr$td��||_dS)Nzdigest_size must be an integer�z&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"eZdZdZdd�Zejd�ZdS)�SHAKE256Zshake256cCs.t|tj�std��|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 rrA�s rAc@seZdZdZdZdZdS)�MD5Zmd5�r+N)rrrrrr,r r r rrB�srBc@s.eZdZdZdZdZdZdd�Zej d�Z 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 rrD�s rDc@s.eZdZdZdZdZdZdd�Zej d�Z 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 rrG�s rG)(Z __future__rrrrr=Z cryptographyrZcryptography.exceptionsrrrZcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Z add_metaclass�ABCMeta�objectr rrZregister_interfacerr)r-r0r2r3r4r6r7r8r9r:r;rArBrDrGr r r r�s`   +