
    ÿigD)                     *   d dl Z d dlZd dlZd dlmZ d dlmZ ej        d          dk     r=d dlZg Z	 ej
                    D ]&\  ZZZeej        k    re	                    e           'nd dlmZ ej        Z	eefZ G d de          Z	 dej        vrej        j        d	k    r ed
          ej        dk    re j        dk    r ed          d dlmZ  e            Zej         Z!e"                    e#                    d                    Z$e#                    d          j%        j&        Z'd Z(d Z)e)Z*e)Z+e)Z,d Z-d/dZ.d Z/d Z0d Z1 G d de          Z2d Z3dZ4n# e$ r d dl5Z5d dl5m6Z6m7Z7m8Z8m)Z)m*Z*m-Z-m.Z.m,Z,m+Z+ d dl9m:Z: d dl5m;Z' dZ!g Z<d Z,d  Z(d! Z/d" Z0e5j=        Z>d Z?e5j@        jA        ZBe5j@        jC        ZDe5jE        ZF e5jG        e>          ZH G d# d$e5jI                  ZJd% Z1 G d& d'e          ZKd( Z3d)Z4Y nw xY w G d* d+e          ZLd, ZMd- ZNd. ZOdS )0    N)byte_string)pycryptodome_filename   )	machineryc                   N    e Zd Zej        d             Zej        d             ZdS )_VoidPointerc                     dS )z&Return the memory location we point toN selfs    T/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/Util/_raw_api.pygetz_VoidPointer.get:   	     	    c                     dS )z$Return a raw pointer to this pointerNr
   r   s    r   
address_ofz_VoidPointer.address_of?   r   r   N)__name__
__module____qualname__abcabstractmethodr   r   r
   r   r   r   r   9   sP           	    r   r   __pypy__   z0CFFI with optimize=2 fails due to pycparser bug.)r      ntz2CFFI is not compatible with Python 3.12 on Windows)FFIzconst uint8_t*z
uint8_t[1]c                    t          t          d          r:t          j        d          s&t                              | t          j                  }nt                              |           }t                              |           |S )zLoad a shared library and return a handle to it.

        @name,  either an absolute path or the name of a library
                in the system search path.

        @cdecl, the C function declarations.
        RTLD_DEEPBINDPYCRYPTODOME_DISABLE_DEEPBIND)hasattrffiosgetenvdlopenr   cdef)namecdecllibs      r   load_libr)   ]   se     3(( 	#;Z1[1[ 	#**T3#455CC**T""C
r   c                     | S )z)Convert a Python integer to unsigned longr
   xs    r   c_ulongr-   m       r   c                     | S )z"Convert a Python integer to size_tr
   r+   s    r   c_size_tr0   u   r.   r   c                    t          | t                    rCt          t          |           dz   |          }t                              d|          }| |dd<   n,|rt          d          t                              d|           }|S )z7Allocate the given amount of bytes (initially set to 0)   z	uint8_t[]Nz Size must be specified once only)
isinstancebytesmaxlenr!   new
ValueError)init_or_sizesizeresults      r   create_string_bufferr<   y   s     lE** 	8s<((1,d33DWW[$//F$F111II E !CDDDWW[,77Fr   c                 6    t                               |           S )z.Convert a C string into a Python byte sequence)r!   stringc_strings    r   get_c_stringrA      s    zz(###r   c                 F    t                               |           dd         S )z.Convert a C buffer into a Python byte sequenceN)r!   bufferbufs    r   get_raw_bufferrF      s    zz#qqq!!r   c                 &   t          | t                    r8t                              t          t                              |                     S t          |           st          | t                    r| S t          dt          |           z            Nz)Object type %s cannot be passed to C code)
r3   _buffer_typer!   castuint8_t_typefrom_bufferr   _Array	TypeErrortype)datas    r   c_uint8_ptrrQ      sw    dL)) 	V88L#//$*?*?@@@ 	V*T6":": 	VKG$t**TUUUr   c                   $    e Zd ZdZd Zd Zd ZdS )VoidPointer_cffi'Model a newly allocated pointer to voidc                 D    t                               d          | _        d S )Nz	void *[1])r!   r7   _ppr   s    r   __init__zVoidPointer_cffi.__init__   s    ww{++DHHHr   c                     | j         d         S )Nr   rV   r   s    r   r   zVoidPointer_cffi.get   s    8A;r   c                     | j         S NrY   r   s    r   r   zVoidPointer_cffi.address_of   s	    8Or   Nr   r   r   __doc__rW   r   r   r
   r   r   rS   rS      sG        55	, 	, 	,	 	 		 	 	 	 	r   rS   c                      t                      S r[   )rS   r
   r   r   VoidPointerr_      s    !!!r   cffi)	CDLLc_void_pbyrefr-   c_ulonglongr0   r<   c_ubytec_uint)find_library)Arrayc                 d    d| cxk    rdk     sn t                      t          j        |           S )Nr      )OverflowErrorctypesre   )cs    r   re   re      s3    Q//!~a   r   c                    t           s"dd l}|                                t           d d <   t           \  }}d| vr:|                    d          s%t	          |           }|t          d| z            |} t          |           S )Nr   .WinzCannot load library '%s')cached_architectureplatformarchitecture
startswithrg   OSErrorra   )r&   r'   rr   bitslinkage	full_names         r   r)   r)      s    " 	= OOO%-%:%:%<%<"+gd??7#5#5e#<#<?$T**I 84?@@@DDzzr   c                     | j         S r[   )valuer?   s    r   rA   rA      s
    ~r   c                     | j         S r[   )rawrD   s    r   rF   rF      s	    wr   c                       e Zd Zdefdej        fdefdefdej        fdej        fdej        fde	fd	e	fd
e	fdefgZ
ej        d         dk    re
                    ddedz  f           dS dS )
_Py_bufferrE   objr6   itemsizereadonlyndimformatshapestrides
suboffsetsinternalr   r   
smalltableN)r   r   r   rb   rl   	py_object
_c_ssize_tc_intc_char_p
_c_ssize_p_fields_sysversion_infoinsertr
   r   r   r~   r~      s        H%F,-J'J'FL)FL)FO,J'J'J'H%
 A!##OOBzA~ >????? $#r   r~   c                    t          |           st          | t                    r| S t          | t                    rt	          |           }t                      }t          |t          |          t                     	 t          j
        |j        z  }|                    |j                  t          t          |                     S # t          t          |                     w xY wt          dt!          |           z            rH   )r   r3   rM   rI   
_py_objectr~   _PyObject_GetBufferrc   _PyBUF_SIMPLErl   re   r6   from_addressrE   _PyBuffer_ReleaserN   rO   )rP   r   rE   buffer_types       r   rQ   rQ      s    t 	V
4 8 8 	VKl++ 
	VT""C,,CU3ZZ???.$nsw6"//88!%**----!%**----G$t**TUUUs   =-C C%c                   $    e Zd ZdZd Zd Zd ZdS )VoidPointer_ctypesrT   c                 ,    t                      | _        d S r[   )rb   _pr   s    r   rW   zVoidPointer_ctypes.__init__   s    jjDGGGr   c                     | j         S r[   )r   r   s    r   r   zVoidPointer_ctypes.get  s	    7Nr   c                 *    t          | j                  S r[   )rc   r   r   s    r   r   zVoidPointer_ctypes.address_of  s    >>!r   Nr\   r
   r   r   r   r      sG        55	! 	! 	!	 	 		" 	" 	" 	" 	"r   r   c                      t                      S r[   )r   r
   r   r   r_   r_     s    !###r   rl   c                   *    e Zd ZdZd Zd Zd Zd ZdS )SmartPointerz+Class to hold a non-managed piece of memoryc                 "    || _         || _        d S r[   )_raw_pointer_destructor)r   raw_pointer
destructors      r   rW   zSmartPointer.__init__  s    '%r   c                     | j         S r[   r   r   s    r   r   zSmartPointer.get  s      r   c                 $    | j         d c}| _         |S r[   r   )r   rps     r   releasezSmartPointer.release  s     $ 14D	r   c                 ~    	 | j         #|                     | j                    d | _         d S d S # t          $ r Y d S w xY wr[   )r   r   AttributeErrorr   s    r   __del__zSmartPointer.__del__  sa    	 ,  !2333$(!!! -,  	 	 	DD	s   (. 
<<N)r   r   r   r]   rW   r   r   r   r
   r   r   r   r     sV        55& & &! ! !      r   r   c           
         |                      d          }|dd         |d         }}g }t          D ]}	 ||z   }t          ||          }t          j                            |          s|                    d|z             Pt          ||          c S # t          $ r2}	|                    d|dt          |	                     Y d}	~	d}	~	ww xY wt          d| dd
                    |                    )	zLoad a shared library and return a handle to it.

    @name,  the name of the library expressed as a PyCryptodome module,
            for instance Cryptodome.Cipher._raw_cbc.

    @cdecl, the C function declarations.
    ro   Nr   zNot found '%s'zCannot load 'z': zCannot load native module 'z, )splitextension_suffixesr   r"   pathisfileappendr)   ru   strjoin)
r&   r'   r   	dir_compsbasenameattemptsextfilenamerx   exps
             r   load_pycryptodome_raw_libr   %  s"    JJsOOE*eBixIH! 	K 	K	K#~H-iBBI7>>),,  08 ;<<<Iu----- 	K 	K 	KOOOhhhCIJJJJJJJJ	K
'$$$		(@S@S@ST
U
UUs   ABB
C(C

Cc                 F    t          | t          t          t          f          S )z5Return True if object x supports the buffer interface)r3   r4   	bytearray
memoryviewr+   s    r   	is_bufferr   >  s    a%J7888r   c                 f    t          | t                    pt          | t                    o| j         S r[   )r3   r   r   r   r+   s    r   is_writeable_bufferr   C  s/    q)$$ ;:&&9qz><r   r[   )Pr"   r   r   Cryptodome.Util.py3compatr   Cryptodome.Util._file_systemr   r   impr   get_suffixesr   modtypC_EXTENSIONr   	importlibr   EXTENSION_SUFFIXESr   r   rI   objectr   builtin_module_namesflagsoptimizeImportErrorr&   r`   r   r!   NULLnull_pointertypeofr7   rK   	__class__	__bases__rM   r)   r-   rd   rf   re   r0   r<   rA   rF   rQ   rS   r_   backendrl   ra   rb   rc   ctypes.utilrg   rh   rq   	c_ssize_tr   r   	pythonapiPyObject_GetBufferr   PyBuffer_Releaser   r   r   POINTERr   	Structurer~   r   r   r   r   r   r
   r   r   <module>r      s  > 
			 



 



 1 1 1 1 1 1 > > > > > >
 AJJJ))++ + +S##/!!%%c***+ $#####"5 :&	 	 	 	 	6 	 	 	F 111ci6HA6M6MkLMMM
 7""rw$kNOOO
#%%C8L::cgg&67788LWW\"",6F      KFG     $ $ $" " "V V V
 
 
 
 
< 
 
 
" " " GG c c cMMM? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?((((((&&&&&&L! ! !
      
 !JM *=(9!J
++J@ @ @ @ @V% @ @ @&V V V"
" 
" 
" 
" 
"\ 
" 
" 
"$ $ $ GGGGcL    6   .V V V29 9 9
< < < < <s   CE BG98G9