+
    '(j*                     ~    R t R.t^ RIHt ^ RIHtHtHtHtH	t	H
t
HtHt ^ RIHt ]! RR4      t ! R R]4      tR tR	# )
z'
Ciphertext Block Chaining (CBC) mode.
CbcMode)_copy_bytes)load_pycryptodome_raw_libVoidPointercreate_string_bufferget_raw_bufferSmartPointerc_size_tc_uint8_ptris_writeable_buffer)get_random_byteszCrypto.Cipher._raw_cbca  
                int CBC_start_operation(void *cipher,
                                        const uint8_t iv[],
                                        size_t iv_len,
                                        void **pResult);
                int CBC_encrypt(void *cbcState,
                                const uint8_t *in,
                                uint8_t *out,
                                size_t data_len);
                int CBC_decrypt(void *cbcState,
                                const uint8_t *in,
                                uint8_t *out,
                                size_t data_len);
                int CBC_stop_operation(void *state);
                c                   >   a  ] tR t^?t o RtR tRR ltRR ltRtV t	R# )r   a?  *Cipher-Block Chaining (CBC)*.

Each of the ciphertext blocks depends on the current
and all previous plaintext blocks.

An Initialization Vector (*IV*) is required.

See `NIST SP800-38A`_ , Section 6.2 .

.. _`NIST SP800-38A` : http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf

:undocumented: __init__
c           	        \        4       V n        \        P                  VP	                  4       \        V4      \        \        V4      4      V P                  P                  4       4      pV'       d   \        RV,          4      h\        V P                  P	                  4       \        P                  4      V n        VP                  4        \        V4      V n         \        RRV4      V n         V P                  V n         RR.V n        R# )a  Create a new block cipher, configured in CBC mode.

:Parameters:
  block_cipher : C pointer
    A smart pointer to the low-level block cipher instance.

  iv : bytes/bytearray/memoryview
    The initialization vector to use for encryption or decryption.
    It is as long as the cipher block.

    **The IV must be unpredictable**. Ideally it is picked randomly.

    Reusing the *IV* for encryptions performed with the same key
    compromises confidentiality.
z)Error %d while instantiating the CBC modeNencryptdecrypt)r   _stateraw_cbc_libCBC_start_operationgetr
   r	   len
address_of
ValueErrorr   CBC_stop_operationrelease
block_sizer   ivIV_next)selfblock_cipherr   results   &&& L/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/Cipher/_mode_cbc.py__init__CbcMode.__init__N   s    " "m001A1A1C1<R19#b'1B151G1G1IK H%& ' '
 #4;;??#4#.#A#AC
 	b'@dD"-	& ''+
    Nc           
     d   RV P                   9  d   \        R4      hR.V n         Vf   \        \        V4      4      pMRTp\	        V4      '       g   \        R4      h\        V4      \        V4      8w  d   \        R\        V4      ,          4      h\        P                  V P                  P                  4       \        V4      \        V4      \        \        V4      4      4      pV'       d6   V^8X  d   \        RV P                  ,          4      h\        RV,          4      hVf   \        V4      # R# )a  Encrypt data with the key and the parameters set at initialization.

A cipher object is stateful: once you have encrypted a message
you cannot encrypt (or decrypt) another message using the same
object.

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)

That also means that you cannot reuse an object for encrypting
or decrypting other data with the same key.

This function does not add any padding to the plaintext.

:Parameters:
  plaintext : bytes/bytearray/memoryview
    The piece of data to encrypt.
    Its lenght must be multiple of the cipher block size.
: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``.
r   z*encrypt() cannot be called after decrypt()N4output must be a bytearray or a writeable memoryview9output must have the same length as the input  (%d bytes)3Data must be padded to %d byte boundary in CBC modez%Error %d while encrypting in CBC mode)r   	TypeErrorr   r   r   r   r   CBC_encryptr   r   r
   r	   r   r   )r   	plaintextoutput
ciphertextr    s   &&&  r!   r   CbcMode.encrypt}   s
   H DJJ&HII[
>-c)n=JJ&v.. VWW9~V,  "025i."A B B (():)4Y)?)4Z)@)1#i.)AC { !VY]YhYh!hiiDvMNN>!*--r$   c           
     d   RV P                   9  d   \        R4      hR.V n         Vf   \        \        V4      4      pMRTp\	        V4      '       g   \        R4      h\        V4      \        V4      8w  d   \        R\        V4      ,          4      h\        P                  V P                  P                  4       \        V4      \        V4      \        \        V4      4      4      pV'       d6   V^8X  d   \        RV P                  ,          4      h\        RV,          4      hVf   \        V4      # R# )ad  Decrypt data with the key and the parameters set at initialization.

A cipher object is stateful: once you have decrypted a message
you cannot decrypt (or encrypt) another message with the same
object.

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.
    Its length must be multiple of the cipher block size.
: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``.
r   z*decrypt() cannot be called after encrypt()Nr&   r'   r(   z%Error %d while decrypting in CBC mode)r   r)   r   r   r   r   r   CBC_decryptr   r   r
   r	   r   r   )r   r-   r,   r+   r    s   &&&  r!   r   CbcMode.decrypt   s
   B DJJ&HII[
>,S_=II&v.. VWW:#f+-  "025i."A B B (():)4Z)@)4Y)?)1#j/)BD { !VY]YhYh!hiiDvMNN>!),,r$   )r   r   r   r   r   )N)
__name__
__module____qualname____firstlineno____doc__r"   r   r   __static_attributes____classdictcell__)__classdict__s   @r!   r   r   ?   s!     -,^@D= =r$   c                   V P                  V4      pVP                  RR4      pVP                  RR4      pRW438X  d   \        V P                  4      pVe   Ve   \	        R4      hMTp\        V4      V P                  8w  d   \        RV P                  ,          4      hV'       d   \	        R\        V4      ,          4      h\        W#4      # )a  Instantiate a cipher object that performs CBC encryption/decryption.

:Parameters:
  factory : module
    The underlying block cipher, a module from ``Crypto.Cipher``.

:Keywords:
  iv : bytes/bytearray/memoryview
    The IV to use for CBC.

  IV : bytes/bytearray/memoryview
    Alias for ``iv``.

Any other keyword will be passed to the underlying block cipher.
See the relevant documentation for details (at least ``key`` will need
to be present).
r   Nr   z*You must either use 'iv' or 'IV', not bothz.Incorrect IV length (it must be %d bytes long)zUnknown parameters for CBC: %s)NN)	_create_base_cipherpopr   r   r)   r   r   strr   )factorykwargscipher_stater   r   s   &,   r!   _create_cbc_cipherrA      s    & ..v6L	D$	B	D$	Bxg001	~>HII  
2w'$$$I ++, - 	- 83v;FGG<$$r$   N)r6   __all__Crypto.Util.py3compatr   Crypto.Util._raw_apir   r   r   r   r   r	   r
   r   Crypto.Randomr   r   objectr   rA    r$   r!   <module>rH      sQ   > + -7 7 7
 +'(@ C $}f }@&%r$   