<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
l_                 @   sx   d dl mZmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ G dd deZG dd	 d	eZG d
d deZdS )    )absolute_importdivisionprint_functionN)
exceptionsutils)aead)backendc               @   s<   e Zd ZdZdd Zedd Zdd Zd	d
 Zdd Z	dS )ChaCha20Poly1305       c             C   sD   t j| stjdtjjtjd| t|dkr:t	d|| _
d S )Nz<ChaCha20Poly1305 is not supported by this version of OpenSSLkeyr   z&ChaCha20Poly1305 key must be 32 bytes.)r   Zaead_cipher_supportedr   ZUnsupportedAlgorithmZ_ReasonsZUNSUPPORTED_CIPHERr   _check_byteslikelen
ValueError_key)selfr    r   /usr/lib64/python3.6/aead.py__init__   s    

zChaCha20Poly1305.__init__c             C   s
   t jdS )Nr   )osurandom)clsr   r   r   generate_key   s    zChaCha20Poly1305.generate_keyc             C   sR   |d krd}t || jks(t || jkr0td| j||| tjt| |||dS )N    z1Data or associated data too long. Max 2**32 bytes   )r   	_MAX_SIZEOverflowError_check_paramsr   _encryptr   )r   noncedataassociated_datar   r   r   encrypt"   s    zChaCha20Poly1305.encryptc             C   s.   |d krd}| j ||| tjt| |||dS )Nr   r   )r   r   _decryptr   )r   r   r    r!   r   r   r   decrypt/   s    zChaCha20Poly1305.decryptc             C   s<   t jd| t jd| t jd| t|dkr8tdd S )Nr   r    r!      zNonce must be 12 bytes)r   r   _check_bytesr   r   )r   r   r    r!   r   r   r   r   6   s
    zChaCha20Poly1305._check_paramsNl        )
__name__
__module____qualname__r   r   classmethodr   r"   r$   r   r   r   r   r   r	      s   r	   c               @   sF   e Zd ZdZdddZedd Zdd	 Zd
d Zdd Z	dd Z
dS )AESCCMr
   r   r   c             C   sR   t jd| t|dkr td|| _t|ts8td|dkrHtd|| _d S )Nr   r      r   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer         
   r%      zInvalid tag_length)r   r,   r   )r-   r.   r/   r0   r%   r1   r   )	r   r   r   r   r   
isinstanceint	TypeError_tag_length)r   r   Z
tag_lengthr   r   r   r   A   s    
zAESCCM.__init__c             C   s0   t |tstd|dkr"tdtj|d S )Nzbit_length must be an integer         z#bit_length must be 128, 192, or 256r/   )r6   r7   r8   )r2   r3   r4   r   r   r   )r   
bit_lengthr   r   r   r   O   s
    
zAESCCM.generate_keyc             C   sd   |d krd}t || jks(t || jkr0td| j||| | j|t | tjt| |||| jS )Nr   z1Data or associated data too long. Max 2**32 bytes)	r   r   r   r   _validate_lengthsr   r   r   r5   )r   r   r    r!   r   r   r   r"   Y   s    zAESCCM.encryptc             C   s0   |d krd}| j ||| tjt| |||| jS )Nr   )r   r   r#   r   r5   )r   r   r    r!   r   r   r   r$   i   s
    zAESCCM.decryptc             C   s(   dt | }dd|  |k r$tdd S )N   r
   r/   zData too long for nonce)r   r   )r   r   Zdata_lenZl_valr   r   r   r:   r   s    zAESCCM._validate_lengthsc             C   sL   t jd| t jd| t jd| dt|  ko:dkn  sHtdd S )Nr   r    r!         z$Nonce must be between 7 and 13 bytes)r   r   r&   r   r   )r   r   r    r!   r   r   r   r   y   s
    zAESCCM._check_paramsNl        )r   )r'   r(   r)   r   r   r*   r   r"   r$   r:   r   r   r   r   r   r+   >   s   

	r+   c               @   s<   e Zd ZdZdd Zedd Zdd Zd	d
 Zdd Z	dS )AESGCMr
   r   c             C   s*   t jd| t|dkr td|| _d S )Nr   r   r,   r   z)AESGCM key must be 128, 192, or 256 bits.)r   r,   r   )r   r   r   r   r   )r   r   r   r   r   r      s    zAESGCM.__init__c             C   s0   t |tstd|dkr"tdtj|d S )Nzbit_length must be an integerr6   r7   r8   z#bit_length must be 128, 192, or 256r/   )r6   r7   r8   )r2   r3   r4   r   r   r   )r   r9   r   r   r   r      s
    
zAESGCM.generate_keyc             C   sR   |d krd}t || jks(t || jkr0td| j||| tjt| |||dS )Nr   z1Data or associated data too long. Max 2**32 bytesr   )r   r   r   r   r   r   r   )r   r   r    r!   r   r   r   r"      s    zAESGCM.encryptc             C   s.   |d krd}| j ||| tjt| |||dS )Nr   r   )r   r   r#   r   )r   r   r    r!   r   r   r   r$      s    zAESGCM.decryptc             C   s<   t jd| t jd| t jd| t|dkr8tdd S )Nr   r    r!   r   zNonce must be at least 1 byte)r   r   r&   r   r   )r   r   r    r!   r   r   r   r      s
    zAESGCM._check_paramsNl        )
r'   r(   r)   r   r   r*   r   r"   r$   r   r   r   r   r   r>      s   
r>   )Z
__future__r   r   r   r   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   objectr	   r+   r>   r   r   r   r   <module>   s   0C