U
    ÈZj8)  ã                   @   sŒ  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 rtd dlZg Z	e 
¡ D ]\ZZZeejkrRe	 e¡ qRnd dlmZ ejZ	eefZG dd„ deƒZzÖdejk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d„ Z(dd„ Z)e)Z*e)Z+e)Z,dd„ Z-d;dd„Z.dd„ Z/dd„ Z0dd„ Z1G dd „ d eƒZ2d!d"„ Z3d#Z4W nê ek
�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'd(„ Z,d)d„ Z(d*d„ Z/d+d„ Z0e5j=Z>d Z?e5j@jAZBe5j@jCZDe5jEZFe5 Ge>¡ZHG d,d-„ d-e5jIƒZJd.d„ Z1G d/d0„ d0eƒZKd1d"„ Z3d2Z4Y nX G d3d4„ d4eƒZLd5d6„ ZMd7d8„ ZNd9d:„ ZOdS )<é    N)Úbyte_string)Úpycryptodome_filenameé   )Ú	machineryc                   @   s(   e Zd Zejdd„ ƒZejdd„ ƒZdS )Ú_VoidPointerc                 C   s   dS )z&Return the memory location we point toN© ©Úselfr   r   úW/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/Util/_raw_api.pyÚget:   s    z_VoidPointer.getc                 C   s   dS )z$Return a raw pointer to this pointerNr   r   r   r   r
   Ú
address_of?   s    z_VoidPointer.address_ofN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   r   r   r   r   r
   r   9   s   
r   Z__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                 C   s<   t tdƒr$t d¡s$t | tj¡}n
t | ¡}t |¡ |S )zÔLoad 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_DEEPBINDZPYCRYPTODOME_DISABLE_DEEPBIND)ÚhasattrÚffiÚosÚgetenvZdlopenr   Zcdef)ÚnameÚcdeclÚlibr   r   r
   Úload_lib]   s
    	

r   c                 C   s   | S )z)Convert a Python integer to unsigned longr   ©Úxr   r   r
   Úc_ulongm   s    r!   c                 C   s   | S )z"Convert a Python integer to size_tr   r   r   r   r
   Úc_size_tu   s    r"   c                 C   sR   t | tƒr6tt| ƒd |ƒ}t d|¡}| |dd…< n|rBt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)Zinit_or_sizeÚsizeÚresultr   r   r
   Úcreate_string_buffery   s    
r,   c                 C   s
   t  | ¡S )z.Convert a C string into a Python byte sequence)r   Ústring©Zc_stringr   r   r
   Úget_c_string†   s    r/   c                 C   s   t  | ¡dd… S )z.Convert a C buffer into a Python byte sequenceN)r   Úbuffer©Úbufr   r   r
   Úget_raw_bufferŠ   s    r3   c                 C   sF   t | tƒrt tt | ¡¡S t| ƒs.t | tƒr2| S tdt	| ƒ ƒ‚d S ©Nz)Object type %s cannot be passed to C code)
r$   Ú_buffer_typer   ÚcastÚuint8_t_typeZfrom_bufferr   Ú_ArrayÚ	TypeErrorÚtype)Údatar   r   r
   Úc_uint8_ptrŽ   s
    
r<   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚVoidPointer_cffiú'Model a newly allocated pointer to voidc                 C   s   t  d¡| _d S )Nz	void *[1])r   r(   Ú_ppr   r   r   r
   Ú__init__š   s    zVoidPointer_cffi.__init__c                 C   s
   | j d S )Nr   ©r?   r   r   r   r
   r   �   s    zVoidPointer_cffi.getc                 C   s   | j S ©NrA   r   r   r   r
   r       s    zVoidPointer_cffi.address_ofN©r   r   r   Ú__doc__r@   r   r   r   r   r   r
   r=   —   s   r=   c                   C   s   t ƒ S rB   )r=   r   r   r   r
   ÚVoidPointer£   s    rE   Úcffi)	ÚCDLLÚc_void_pÚbyrefr!   Úc_ulonglongr"   r,   Úc_ubyteÚc_uint)Úfind_library)ÚArrayc                 C   s&   d|   krdk sn t ƒ ‚t | ¡S )Nr   é   )ÚOverflowErrorÚctypesrK   )Úcr   r   r
   rK   ³   s    rK   c                 C   s^   t sdd l}| ¡ t d d …< t \}}d| krV| d¡sVt| ƒ}|d krRtd|  ƒ‚|} t| ƒS )Nr   Ú.ZWinzCannot load library '%s')Úcached_architectureÚplatformÚarchitectureÚ
startswithrM   ÚOSErrorrG   )r   r   rU   ÚbitsÚlinkageÚ	full_namer   r   r
   r   ¸   s    c                 C   s   | j S rB   )Úvaluer.   r   r   r
   r/   Æ   s    c                 C   s   | j S rB   )Úrawr1   r   r   r
   r3   É   s    c                   @   s|   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rxe
 dded f¡ dS )Ú
_Py_bufferr2   Úobjr'   ÚitemsizeÚreadonlyÚndimÚformatÚshapeÚstridesÚ
suboffsetsZinternalr   r   éÿÿÿÿZ
smalltableN)r   r   r   rH   rQ   Ú	py_objectÚ
_c_ssize_tZc_intÚc_char_pÚ
_c_ssize_pZ_fields_ÚsysÚversion_infoÚinsertr   r   r   r
   r^   Ø   s   õr^   c              	   C   s€   t | ƒst| tƒr| S t| tƒrlt| ƒ}tƒ }t|t|ƒtƒ zt
j|j }| |j¡W ¢S t	t|ƒƒ X ntdt| ƒ ƒ‚d S r4   )r   r$   r8   r5   Ú
_py_objectr^   Ú_PyObject_GetBufferrI   Ú_PyBUF_SIMPLEÚ_PyBuffer_ReleaserQ   rK   r'   Zfrom_addressr2   r9   r:   )r;   r_   r2   Zbuffer_typer   r   r
   r<   ë   s    
c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚVoidPointer_ctypesr>   c                 C   s   t ƒ | _d S rB   )rH   Ú_pr   r   r   r
   r@   ÿ   s    zVoidPointer_ctypes.__init__c                 C   s   | j S rB   )rt   r   r   r   r
   r     s    zVoidPointer_ctypes.getc                 C   s
   t | jƒS rB   )rI   rt   r   r   r   r
   r     s    zVoidPointer_ctypes.address_ofNrC   r   r   r   r
   rs   ü   s   rs   c                   C   s   t ƒ S rB   )rs   r   r   r   r
   rE     s    rQ   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚSmartPointerz+Class to hold a non-managed piece of memoryc                 C   s   || _ || _d S rB   )Ú_raw_pointerÚ_destructor)r	   Zraw_pointerZ
destructorr   r   r
   r@     s    zSmartPointer.__init__c                 C   s   | j S rB   ©rv   r   r   r   r
   r     s    zSmartPointer.getc                 C   s   | j d  }| _ |S rB   rx   )r	   Úrpr   r   r
   Úrelease  s    zSmartPointer.releasec                 C   s:   z | j d k	r|  | j ¡ d | _ W n tk
r4   Y nX d S rB   )rv   rw   ÚAttributeErrorr   r   r   r
   Ú__del__  s    

zSmartPointer.__del__N)r   r   r   rD   r@   r   rz   r|   r   r   r   r
   ru     s
   ru   c           
      C   sÂ   |   d¡}|dd… |d  }}g }tD ]~}z@|| }t||ƒ}tj |¡s^| d| ¡ W q(t||ƒW   S  tk
r¤ }	 z| d|t	|	ƒf ¡ W 5 d}	~	X Y q(X q(td| d 
|¡f ƒ‚dS )zÙLoad a shared library and return a handle to it.

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

    @cdecl, the C function declarations.
    rS   Nrg   zNot found '%s'zCannot load '%s': %sz"Cannot load native module '%s': %sz, )ÚsplitÚextension_suffixesr   r   ÚpathÚisfileÚappendr   rX   ÚstrÚjoin)
r   r   r}   Z	dir_compsÚbasenameZattemptsÚextÚfilenamer[   Úexpr   r   r
   Úload_pycryptodome_raw_lib%  s    	

*rˆ   c                 C   s   t | tttfƒS )z5Return True if object x supports the buffer interface)r$   r%   Ú	bytearrayÚ
memoryviewr   r   r   r
   Ú	is_buffer>  s    r‹   c                 C   s   t | tƒpt | tƒo| j S rB   )r$   r‰   rŠ   ra   r   r   r   r
   Úis_writeable_bufferC  s    
ÿrŒ   )N)Pr   r   rl   ZCrypto.Util.py3compatr   ZCrypto.Util._file_systemr   rm   Úimpr~   Zget_suffixesr…   ÚmodÚtypÚC_EXTENSIONr�   Ú	importlibr   ÚEXTENSION_SUFFIXESr‰   rŠ   r5   Úobjectr   Úbuiltin_module_namesÚflagsÚoptimizeÚImportErrorr   rF   r   r   ZNULLZnull_pointerZtypeofr(   r7   Ú	__class__Ú	__bases__r8   r   r!   rJ   rL   rK   r"   r,   r/   r3   r<   r=   rE   ÚbackendrQ   rG   rH   rI   Úctypes.utilrM   rN   rT   Z	c_ssize_tri   rq   Z	pythonapiZPyObject_GetBufferrp   ZPyBuffer_Releaserr   rh   ro   ZPOINTERrk   Z	Structurer^   rs   ru   rˆ   r‹   rŒ   r   r   r   r
   Ú<module>   s~   

	,

