3
dZ                 @   sv  d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZ ejejG dd deZejejG dd	 d	eZejeG d
d deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZdS )    )absolute_importdivisionprint_functionN)utils)AlreadyFinalizedUnsupportedAlgorithm_Reasons)HashBackendc               @   s6   e Zd Zejdd Zejdd Zejdd ZdS )HashAlgorithmc             C   s   dS )zH
        A string naming this algorithm (e.g. "sha256", "md5").
        N )selfr   r   G/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/hashes.pyname   s    zHashAlgorithm.namec             C   s   dS )z<
        The size of the resulting digest in bytes.
        Nr   )r   r   r   r   digest_size   s    zHashAlgorithm.digest_sizec             C   s   dS )zI
        The internal block size of the hash algorithm in bytes.
        Nr   )r   r   r   r   
block_size    s    zHashAlgorithm.block_sizeN)__name__
__module____qualname__abcabstractpropertyr   r   r   r   r   r   r   r
      s   r
   c               @   sD   e Zd Zejdd Zejdd Zejdd Zejdd Z	d	S )
HashContextc             C   s   dS )zD
        A HashAlgorithm that will be used by this context.
        Nr   )r   r   r   r   	algorithm)   s    zHashContext.algorithmc             C   s   dS )z@
        Processes the provided bytes through the hash.
        Nr   )r   datar   r   r   update/   s    zHashContext.updatec             C   s   dS )zR
        Finalizes the hash context and returns the hash digest as bytes.
        Nr   )r   r   r   r   finalize5   s    zHashContext.finalizec             C   s   dS )zM
        Return a HashContext that is a copy of the current context.
        Nr   )r   r   r   r   copy;   s    zHashContext.copyN)
r   r   r   r   r   r   abstractmethodr   r   r   r   r   r   r   r   '   s   r   c               @   s8   e Zd ZdddZejdZdd Zdd Zd	d
 Z	dS )HashNc             C   sX   t |tstdtjt |ts(td|| _|| _|d krN| jj	| j
| _n|| _d S )Nz.Backend object does not implement HashBackend.z*Expected instance of hashes.HashAlgorithm.)
isinstancer	   r   r   ZBACKEND_MISSING_INTERFACEr
   	TypeError
_algorithm_backendZcreate_hash_ctxr   _ctx)r   r   backendctxr   r   r   __init__D   s    

zHash.__init__r    c             C   s4   | j d krtdt|ts$td| j j| d S )NzContext was already finalized.zdata must be bytes.)r"   r   r   bytesr   r   )r   r   r   r   r   r   X   s
    

zHash.updatec             C   s*   | j d krtdt| j| j| j j dS )NzContext was already finalized.)r#   r$   )r"   r   r   r   r!   r   )r   r   r   r   r   _   s    
z	Hash.copyc             C   s&   | j d krtd| j j }d | _ |S )NzContext was already finalized.)r"   r   r   )r   Zdigestr   r   r   r   f   s
    

zHash.finalize)N)
r   r   r   r%   r   read_only_propertyr   r   r   r   r   r   r   r   r   B   s
   

r   c               @   s   e Zd ZdZdZdZdS )SHA1Zsha1   @   N)r   r   r   r   r   r   r   r   r   r   r(   n   s   r(   c               @   s   e Zd ZdZdZdZdS )SHA224Zsha224   r*   N)r   r   r   r   r   r   r   r   r   r   r+   u   s   r+   c               @   s   e Zd ZdZdZdZdS )SHA256Zsha256    r*   N)r   r   r   r   r   r   r   r   r   r   r-   |   s   r-   c               @   s   e Zd ZdZdZdZdS )SHA384Zsha3840      N)r   r   r   r   r   r   r   r   r   r   r/      s   r/   c               @   s   e Zd ZdZdZdZdS )SHA512Zsha512r*   r1   N)r   r   r   r   r   r   r   r   r   r   r2      s   r2   c               @   s   e Zd ZdZdZdZdS )MD5Zmd5   r*   N)r   r   r   r   r   r   r   r   r   r   r3      s   r3   c               @   s.   e Zd ZdZdZdZdZdd Zej	dZ
dS )	BLAKE2bZblake2br*      r1   c             C   s2   || j ks|| jk r(tdj| j| j || _d S )NzDigest size must be {0}-{1})_max_digest_size_min_digest_size
ValueErrorformat_digest_size)r   r   r   r   r   r%      s
    

zBLAKE2b.__init__r;   N)r   r   r   r   r7   r8   r   r%   r   r'   r   r   r   r   r   r5      s   r5   c               @   s.   e Zd ZdZdZdZdZdd Zej	dZ
dS )	BLAKE2sZblake2sr*   r.   r6   c             C   s2   || j ks|| jk r(tdj| j| j || _d S )NzDigest size must be {0}-{1})r7   r8   r9   r:   r;   )r   r   r   r   r   r%      s
    

zBLAKE2s.__init__r;   N)r   r   r   r   r   r7   r8   r%   r   r'   r   r   r   r   r   r<      s   r<   )Z
__future__r   r   r   r   ZsixZcryptographyr   Zcryptography.exceptionsr   r   r   Z'cryptography.hazmat.backends.interfacesr	   Zadd_metaclassABCMetaobjectr
   r   Zregister_interfacer   r(   r+   r-   r/   r2   r3   r5   r<   r   r   r   r   <module>   s6   +