£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
l_J                 @   s  d dl mZmZmZ d dlZd dl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j	G dd	 d	e
Zejej	G d
d de
Zejej	G dd de
Zdd Zdd Zdd ZejeejeG dd de
ZejeejeG dd de
ZejeG dd de
ZejeejeG dd de
ZejeejeG dd de
ZejeejeG dd de
ZejeejeG d d! d!e
ZejeejeejeG d"d# d#e
ZdS )$    )absolute_importdivisionprint_functionN)utilsc               @   s(   e Zd Zejdd Zejdd ZdS )Modec             C   s   dS )z@
        A string naming this mode (e.g. "ECB", "CBC").
        N )selfr   r   /usr/lib64/python3.6/modes.pyname   s    z	Mode.namec             C   s   dS )zq
        Checks that all the necessary invariants of this (mode, algorithm)
        combination are met.
        Nr   )r   	algorithmr   r   r	   validate_for_algorithm   s    zMode.validate_for_algorithmN)__name__
__module____qualname__abcabstractpropertyr
   abstractmethodr   r   r   r   r	   r      s   r   c               @   s   e Zd Zejdd ZdS )ModeWithInitializationVectorc             C   s   dS )zP
        The value of the initialization vector for this mode as bytes.
        Nr   )r   r   r   r	   initialization_vector    s    z2ModeWithInitializationVector.initialization_vectorN)r   r   r   r   r   r   r   r   r   r	   r      s   r   c               @   s   e Zd Zejdd ZdS )ModeWithTweakc             C   s   dS )z@
        The value of the tweak for this mode as bytes.
        Nr   )r   r   r   r	   tweak)   s    zModeWithTweak.tweakN)r   r   r   r   r   r   r   r   r   r	   r   '   s   r   c               @   s   e Zd Zejdd ZdS )ModeWithNoncec             C   s   dS )z@
        The value of the nonce for this mode as bytes.
        Nr   )r   r   r   r	   nonce2   s    zModeWithNonce.nonceN)r   r   r   r   r   r   r   r   r   r	   r   0   s   r   c               @   s   e Zd Zejdd ZdS )ModeWithAuthenticationTagc             C   s   dS )zP
        The value of the tag supplied to the constructor of this mode.
        Nr   )r   r   r   r	   tag;   s    zModeWithAuthenticationTag.tagN)r   r   r   r   r   r   r   r   r   r	   r   9   s   r   c             C   s    |j dkr|jdkrtdd S )N   ZAESz=Only 128, 192, and 256 bit keys are allowed for this AES mode)key_sizer
   
ValueError)r   r   r   r   r	   _check_aes_key_lengthB   s    r   c             C   s0   t | jd |jkr,tdjt | j| jd S )N   zInvalid IV size ({}) for {}.)lenr   
block_sizer   formatr
   )r   r   r   r   r	   _check_iv_lengthI   s    r#   c             C   s   t | | t| | d S )N)r   r#   )r   r   r   r   r	   _check_iv_and_key_lengthR   s    
r$   c               @   s&   e Zd Zd Zdd ZejdZeZ	dS )CBCc             C   s   t jd| || _d S )Nr   )r   _check_byteslike_initialization_vector)r   r   r   r   r	   __init__\   s    zCBC.__init__r'   N)
r   r   r   r
   r(   r   read_only_propertyr   r$   r   r   r   r   r	   r%   W   s   
r%   c               @   s*   e Zd Zd Zdd ZejdZdd ZdS )XTSc             C   s*   t jd| t|dkr td|| _d S )Nr      z!tweak must be 128-bits (16 bytes))r   r&   r    r   _tweak)r   r   r   r   r	   r(   i   s    zXTS.__init__r,   c             C   s   |j dkrtdd S )Nr      z\The XTS specification requires a 256-bit key for AES-128-XTS and 512-bit key for AES-256-XTS)r   r-   )r   r   )r   r   r   r   r	   r   s   s    
zXTS.validate_for_algorithmN)	r   r   r   r
   r(   r   r)   r   r   r   r   r   r	   r*   d   s   
r*   c               @   s   e Zd Zd ZeZdS )ECBN)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jdZeZ	dS )OFBc             C   s   t jd| || _d S )Nr   )r   r&   r'   )r   r   r   r   r	   r(      s    zOFB.__init__r'   N)
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jdZeZ	dS )CFBc             C   s   t jd| || _d S )Nr   )r   r&   r'   )r   r   r   r   r	   r(      s    zCFB.__init__r'   N)
r   r   r   r
   r(   r   r)   r   r$   r   r   r   r   r	   r0      s   
r0   c               @   s&   e Zd Zd Zdd ZejdZeZ	dS )CFB8c             C   s   t jd| || _d S )Nr   )r   r&   r'   )r   r   r   r   r	   r(      s    zCFB8.__init__r'   N)
r   r   r   r
   r(   r   r)   r   r$   r   r   r   r   r	   r1      s   
r1   c               @   s*   e Zd Zd Zdd ZejdZdd ZdS )CTRc             C   s   t jd| || _d S )Nr   )r   r&   _nonce)r   r   r   r   r	   r(      s    zCTR.__init__r3   c             C   s:   t | | t| jd |jkr6tdjt| j| jd S )Nr   zInvalid nonce size ({}) for {}.)r   r    r   r!   r   r"   r
   )r   r   r   r   r	   r      s
    
zCTR.validate_for_algorithmN)	r   r   r   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dd	Zejd
Z	ejdZ
dd ZdS )GCM   '   r   r   @   Nr+   c             C   st   t jd| t|dkr td|| _|d k	rdt jd| |dk rJtdt||k rdtdj||| _|| _d S )Nr   r   z-initialization_vector must be at least 1 byter      zmin_tag_length must be >= 4z.Authentication tag must be {} bytes or longer.)	r   r&   r    r   r'   _check_bytesr"   _tagZ_min_tag_length)r   r   r   Zmin_tag_lengthr   r   r	   r(      s    zGCM.__init__r:   r'   c             C   s   t | | d S )N)r   )r   r   r   r   r	   r      s    zGCM.validate_for_algorithml        l    l   ? l            l            )Nr+   )r   r   r   r
   Z_MAX_ENCRYPTED_BYTESZ_MAX_AAD_BYTESr(   r   r)   r   r   r   r   r   r   r	   r4      s   


r4   )Z
__future__r   r   r   r   ZsixZcryptographyr   Zadd_metaclassABCMetaobjectr   r   r   r   r   r   r#   r$   Zregister_interfacer%   r*   r.   r/   r0   r1   r2   r4   r   r   r   r	   <module>   sP   	





