o
     `U                     @   s  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mZmZ d dlmZ d dlmZ d dlmZ eejG dd	 d	eZeejG d
d deZeejG dd deZeejG dd deZeejG dd deZeejG dd deZG dd deZeeG dd deZeeeeeeG dd deZ eeG dd de Z!dS )    )absolute_importdivisionprint_functionN)utils)AlreadyFinalizedAlreadyUpdatedNotYetFinalizedUnsupportedAlgorithm_Reasons)_get_backend)CipherBackend)modesc                   @   s(   e Zd Zejdd Zejdd ZdS )CipherAlgorithmc                 C      dS )zE
        A string naming this mode (e.g. "AES", "Camellia").
        N selfr   r   home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/primitives/ciphers/base.pyname       zCipherAlgorithm.namec                 C   r   )zW
        The size of the key being used as an integer in bits (e.g. 128, 256).
        Nr   r   r   r   r   key_size    r   zCipherAlgorithm.key_sizeN)__name__
__module____qualname__abcabstractpropertyr   r   r   r   r   r   r      s
    
r   c                   @      e Zd Zejdd ZdS )BlockCipherAlgorithmc                 C   r   )zK
        The size of a block as an integer in bits (e.g. 64, 128).
        Nr   r   r   r   r   
block_size)   r   zBlockCipherAlgorithm.block_sizeN)r   r   r   r   r   r   r   r   r   r   r   '       r   c                   @   s6   e Zd Zejdd Zejdd Zejdd ZdS )CipherContextc                 C   r   )zk
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        Nr   r   datar   r   r   update2   r   zCipherContext.updatec                 C   r   )z
        Processes the provided bytes and writes the resulting data into the
        provided buffer. Returns the number of bytes written.
        Nr   r   r"   bufr   r   r   update_into9   r   zCipherContext.update_intoc                 C   r   )zM
        Returns the results of processing the final block as bytes.
        Nr   r   r   r   r   finalize@   r   zCipherContext.finalizeN)r   r   r   r   abstractmethodr#   r&   r'   r   r   r   r   r    0   s    

r    c                   @   r   )AEADCipherContextc                 C   r   )z3
        Authenticates the provided bytes.
        Nr   r!   r   r   r   authenticate_additional_dataI   r   z.AEADCipherContext.authenticate_additional_dataN)r   r   r   r   r(   r*   r   r   r   r   r)   G   r   r)   c                   @   r   )AEADDecryptionContextc                 C   r   )z
        Returns the results of processing the final block as bytes and allows
        delayed passing of the authentication tag.
        Nr   )r   tagr   r   r   finalize_with_tagR   r   z'AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r(   r-   r   r   r   r   r+   P   r   r+   c                   @   r   )AEADEncryptionContextc                 C   r   )zb
        Returns tag bytes. This is only available after encryption is
        finalized.
        Nr   r   r   r   r   r,   \   r   zAEADEncryptionContext.tagN)r   r   r   r   r   r,   r   r   r   r   r.   Z   r   r.   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )CipherNc                 C   sX   t |}t|tstdtjt|tstd|d ur!|| || _	|| _
|| _d S )Nz0Backend object does not implement CipherBackend.z&Expected interface of CipherAlgorithm.)r   
isinstancer   r	   r
   ZBACKEND_MISSING_INTERFACEr   	TypeErrorZvalidate_for_algorithm	algorithmmode_backend)r   r2   r3   backendr   r   r   __init__e   s   



zCipher.__init__c                 C   sB   t | jtjr| jjd urtd| j| j| j}| j	|ddS )Nz0Authentication tag must be None when encrypting.Tencrypt)
r0   r3   r   ModeWithAuthenticationTagr,   
ValueErrorr4   Zcreate_symmetric_encryption_ctxr2   	_wrap_ctxr   ctxr   r   r   	encryptorw   s   zCipher.encryptorc                 C   s    | j | j| j}| j|ddS )NFr7   )r4   Zcreate_symmetric_decryption_ctxr2   r3   r;   r<   r   r   r   	decryptor   s   zCipher.decryptorc                 C   s*   t | jtjr|rt|S t|S t|S N)r0   r3   r   r9   _AEADEncryptionContext_AEADCipherContext_CipherContext)r   r=   r8   r   r   r   r;      s
   zCipher._wrap_ctxr@   )r   r   r   r6   r>   r?   r;   r   r   r   r   r/   d   s
    
r/   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rC   c                 C   s
   || _ d S r@   )_ctxr<   r   r   r   r6      s   
z_CipherContext.__init__c                 C   s   | j d u r	td| j |S NContext was already finalized.)rD   r   r#   r!   r   r   r   r#      s   
z_CipherContext.updatec                 C   s    | j d u r	td| j ||S rE   )rD   r   r&   r$   r   r   r   r&      s   
z_CipherContext.update_intoc                 C   s&   | j d u r	td| j  }d | _ |S rE   )rD   r   r'   r!   r   r   r   r'      s
   

z_CipherContext.finalizeN)r   r   r   r6   r#   r&   r'   r   r   r   r   rC      s
    rC   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )rB   c                 C   s"   || _ d| _d| _d | _d| _d S )Nr   F)rD   _bytes_processed_aad_bytes_processed_tag_updatedr<   r   r   r   r6      s
   
z_AEADCipherContext.__init__c                 C   sV   | j d u r	tdd| _|  j|7  _| j| j jjkr)td| j jj| j jjd S )NrF   Tz+{} has a maximum encrypted byte limit of {})	rD   r   rJ   rG   _modeZ_MAX_ENCRYPTED_BYTESr:   formatr   )r   	data_sizer   r   r   _check_limit   s   
z_AEADCipherContext._check_limitc                 C   s   |  t| | j|S r@   )rN   lenrD   r#   r!   r   r   r   r#      s   z_AEADCipherContext.updatec                 C   s   |  t| | j||S r@   )rN   rO   rD   r&   r$   r   r   r   r&      s   z_AEADCipherContext.update_intoc                 C   s0   | j d u r	td| j  }| j j| _d | _ |S rE   )rD   r   r'   r,   rI   r!   r   r   r   r'      s   


z_AEADCipherContext.finalizec                 C   s2   | j d u r	td| j |}| j j| _d | _ |S rE   )rD   r   r-   r,   rI   )r   r,   r"   r   r   r   r-      s   

z$_AEADCipherContext.finalize_with_tagc                 C   sn   | j d u r	td| jrtd|  jt|7  _| j| j jjkr/td	| j jj
| j jj| j | d S )NrF   z'Update has been called on this context.z%{} has a maximum AAD byte limit of {})rD   r   rJ   r   rH   rO   rK   Z_MAX_AAD_BYTESr:   rL   r   r*   r!   r   r   r   r*      s   
z/_AEADCipherContext.authenticate_additional_dataN)
r   r   r   r6   rN   r#   r&   r'   r-   r*   r   r   r   r   rB      s    rB   c                   @   s   e Zd Zedd ZdS )rA   c                 C   s   | j d ur	td| jS )Nz4You must finalize encryption before getting the tag.)rD   r   rI   r   r   r   r   r,      s
   
z_AEADEncryptionContext.tagN)r   r   r   propertyr,   r   r   r   r   rA      s    rA   )"
__future__r   r   r   r   Zsixcryptographyr   Zcryptography.exceptionsr   r   r   r	   r
   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Z&cryptography.hazmat.primitives.ciphersr   Zadd_metaclassABCMetaobjectr   r   r    r)   r+   r.   r/   Zregister_interfacerC   rB   rA   r   r   r   r   <module>   s:   





		.=