관리-도구
편집 파일: _mode_ecb.cpython-311.pyc
� O�Dgu � �r � d Z dgZddlmZmZmZmZmZmZm Z m Z edd� � Z G d� de� � Z d� ZdS ) z" Electronic Code Book (ECB) mode. �EcbMode� )�load_pycryptodome_raw_lib�VoidPointer�create_string_buffer�get_raw_buffer�SmartPointer�c_size_t�c_uint8_ptr�is_writeable_bufferzCrypto.Cipher._raw_ecbak int ECB_start_operation(void *cipher, void **pResult); int ECB_encrypt(void *ecbState, const uint8_t *in, uint8_t *out, size_t data_len); int ECB_decrypt(void *ecbState, const uint8_t *in, uint8_t *out, size_t data_len); int ECB_stop_operation(void *state); c �( � e Zd ZdZd� Zdd�Zdd�ZdS )r a� *Electronic Code Book (ECB)*. This is the simplest encryption mode. Each of the plaintext blocks is directly encrypted into a ciphertext block, independently of any other block. This mode is dangerous because it exposes frequency of symbols in your plaintext. Other modes (e.g. *CBC*) should be used instead. See `NIST SP800-38A`_ , Section 6.1. .. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf :undocumented: __init__ c � � |j | _ t � � | _ t � |� � � | j � � � � � }|rt d|z � � �t | j � � � t j � � | _ |� � � dS )z�Create a new block cipher, configured in ECB mode. :Parameters: block_cipher : C pointer A smart pointer to the low-level block cipher instance. z)Error %d while instantiating the ECB modeN)� block_sizer �_state�raw_ecb_lib�ECB_start_operation�get� address_of� ValueErrorr �ECB_stop_operation�release)�self�block_cipher�results �y/builddir/build/BUILD/imunify360-venv-2.4.0/opt/imunify360/venv/lib64/python3.11/site-packages/Crypto/Cipher/_mode_ecb.py�__init__zEcbMode.__init__D s� � � '�1���!�m�m����0�0��1A�1A�1C�1C�15��1G�1G�1I�1I�K� K��� '��H�%�&� '� '� '� #�4�;�?�?�#4�#4�#.�#A�C� C��� �������� Nc �F � |�t t |� � � � }n_|}t |� � st d� � �t |� � t |� � k rt dt |� � z � � �t � | j � � � t |� � t |� � t t |� � � � � � }|r'|dk rt d� � �t d|z � � �|�t |� � S dS )ab Encrypt data with the key set at initialization. The data to encrypt can be broken up in two or more pieces and `encrypt` can be called multiple times. That is, the statement: >>> c.encrypt(a) + c.encrypt(b) is equivalent to: >>> c.encrypt(a+b) This function does not add any padding to the plaintext. :Parameters: plaintext : bytes/bytearray/memoryview The piece of data to encrypt. The length must be multiple of the cipher block length. :Keywords: output : bytearray/memoryview The location where the ciphertext must be written to. If ``None``, the ciphertext is returned. :Return: If ``output`` is ``None``, the ciphertext is returned as ``bytes``. Otherwise, ``None``. N�4output must be a bytearray or a writeable memoryview�9output must have the same length as the input (%d bytes)� �2Data must be aligned to block boundary in ECB modez%Error %d while encrypting in ECB mode)r �lenr � TypeErrorr r �ECB_encryptr r r r r )r � plaintext�output� ciphertextr s r �encryptzEcbMode.encrypt^ s � �: �>�-�c�)�n�n�=�=�J�J��J�&�v�.�.� X�� V�W�W�W��9�~�~��V���,�,� � "0�25�i�.�.�"A� B� B� B� �(�(�����):�):�)4�Y�)?�)?�)4�Z�)@�)@�)1�#�i�.�.�)A�)A�C� C�� � O���{�{� �!U�V�V�V��D�v�M�N�N�N��>�!�*�-�-�-��4r c �F � |�t t |� � � � }n_|}t |� � st d� � �t |� � t |� � k rt dt |� � z � � �t � | j � � � t |� � t |� � t t |� � � � � � }|r'|dk rt d� � �t d|z � � �|�t |� � S dS )ae Decrypt data with the key set at initialization. The data to decrypt can be broken up in two or more pieces and `decrypt` can be called multiple times. That is, the statement: >>> c.decrypt(a) + c.decrypt(b) is equivalent to: >>> c.decrypt(a+b) This function does not remove any padding from the plaintext. :Parameters: ciphertext : bytes/bytearray/memoryview The piece of data to decrypt. The length must be multiple of the cipher block length. :Keywords: output : bytearray/memoryview The location where the plaintext must be written to. If ``None``, the plaintext is returned. :Return: If ``output`` is ``None``, the plaintext is returned as ``bytes``. Otherwise, ``None``. Nr r r r! z%Error %d while decrypting in ECB mode)r r"