o
    F+ i8)                     @   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 r:d dlZg Z	e
 D ]\ZZZeejkr8e	e q)n	d dlmZ ejZ	eefZG dd deZzkdejvr_ejjd	kr_ed
ejdkrme jdkrme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 nt ey.   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@jCZDe5jEZFe5Ge>ZHG d,d- d-e5jIZJd.d Z1G d/d0 d0eZKd1d" Z3d2Z4Y nw 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      dS )z&Return the memory location we point toN selfr   r   `/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/Crypto/Util/_raw_api.pyget:      z_VoidPointer.getc                 C   r   )z$Return a raw pointer to this pointerNr   r	   r   r   r   
address_of?   r   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 )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_DEEPBINDZPYCRYPTODOME_DISABLE_DEEPBIND)hasattrffiosgetenvZdlopenr   Zcdef)namecdecllibr   r   r   load_lib]   s
   	

r    c                 C      | S )z)Convert a Python integer to unsigned longr   xr   r   r   c_ulongm      r$   c                 C   r!   )z"Convert a Python integer to size_tr   r"   r   r   r   c_size_tu   r%   r&   c                 C   sT   t | trtt| d |}td|}| |dd< |S |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)Zinit_or_sizesizeresultr   r   r   create_string_buffery   s   
r0   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   
r3   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   r7   c                 C   sB   t | trttt| S t| st | tr| S tdt	|  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                   @   (   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   rD   r	   r   r   r   r         
zVoidPointer_cffi.getc                 C      | j S NrF   r	   r   r   r   r         zVoidPointer_cffi.address_ofNr   r   r   __doc__rE   r   r   r   r   r   r   rB      
    rB   c                   C      t  S rI   )rB   r   r   r   r   VoidPointer   rJ   rO   cffi)	CDLLc_void_pbyrefr$   c_ulonglongr&   r0   c_ubytec_uint)find_library)Arrayc                 C   s*   d|   krdk st   t  t| S )Nr      )OverflowErrorctypesrU   )cr   r   r   rU      s
   
rU   c                 C   s^   t sdd l}| t d d < t \}}d| vr+|ds+t| }|d u r)td|  |} t| S )Nr   .ZWinzCannot load library '%s')cached_architectureplatformarchitecture
startswithrW   OSErrorrQ   )r   r   r_   bitslinkage	full_namer   r   r   r       s   c                 C   rH   rI   )valuer2   r   r   r   r3      rJ   c                 C   rH   rI   )rawr5   r   r   r   r7      rJ   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r>e
dded f dS dS )
_Py_bufferr6   objr+   itemsizereadonlyndimformatshapestrides
suboffsetsZinternalr   r   Z
smalltableN)r   r   r   rR   r[   	py_object
_c_ssize_tc_intc_char_p
_c_ssize_pZ_fields_sysversion_infoinsertr   r   r   r   rh      s     rh   c              	   C   s   t | s	t| tr| S t| tr:t| }t }t|t|t zt	j
|j }||jW tt| S tt| w tdt|  r8   )r   r(   r<   r9   
_py_objectrh   _PyObject_GetBufferrS   _PyBUF_SIMPLEr[   rU   r+   Zfrom_addressr6   _PyBuffer_Releaser=   r>   )r?   ri   r6   Zbuffer_typer   r   r   r@      s   
c                   @   rA   )	VoidPointer_ctypesrC   c                 C   s   t  | _d S rI   )rR   _pr	   r   r   r   rE      s   zVoidPointer_ctypes.__init__c                 C   rH   rI   )r   r	   r   r   r   r     rJ   zVoidPointer_ctypes.getc                 C   s
   t | jS rI   )rS   r   r	   r   r   r   r     rG   zVoidPointer_ctypes.address_ofNrK   r   r   r   r   r~      rM   r~   c                   C   rN   rI   )r~   r   r   r   r   rO     rJ   r[   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 rI   )_raw_pointer_destructor)r
   Zraw_pointerZ
destructorr   r   r   rE     s   
zSmartPointer.__init__c                 C   rH   rI   r   r	   r   r   r   r     rJ   zSmartPointer.getc                 C   s   | j d }| _ |S rI   r   )r
   rpr   r   r   release  s   zSmartPointer.releasec                 C   s>   z| j d ur| | j  d | _ W d S W d S  ty   Y d S w rI   )r   r   AttributeErrorr	   r   r   r   __del__  s   
zSmartPointer.__del__N)r   r   r   rL   rE   r   r   r   r   r   r   r   r     s    r   c           
      C   s   |  d}|dd |d }}g }tD ]?}z || }t||}tj|s/|d|  W qt||W   S  tyS }	 z|d|t	|	f  W Y d}	~	qd}	~	ww td| d
|f )zLoad 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.
    r]   Nrq   zNot found '%s'zCannot load '%s': %sz"Cannot load native module '%s': %sz, )splitextension_suffixesr   r   pathisfileappendr    rb   strjoin)
r   r   r   Z	dir_compsbasenameZattemptsextfilenamere   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 rI   )r(   r   r   rk   r"   r   r   r   is_writeable_bufferC  s   
r   rI   )Pr   r   rw   ZCrypto.Util.py3compatr   ZCrypto.Util._file_systemr   rx   impr   Zget_suffixesr   modtypC_EXTENSIONr   	importlibr   EXTENSION_SUFFIXESr   r   r9   objectr   builtin_module_namesflagsoptimizeImportErrorr   rP   r   r   ZNULLZnull_pointerZtypeofr,   r;   	__class__	__bases__r<   r    r$   rT   rV   rU   r&   r0   r3   r7   r@   rB   rO   backendr[   rQ   rR   rS   Zctypes.utilrW   rX   r^   Z	c_ssize_trs   r|   Z	pythonapiZPyObject_GetBufferr{   ZPyBuffer_Releaser}   rr   rz   ZPOINTERrv   Z	Structurerh   r~   r   r   r   r   r   r   r   r   <module>   s   


	,
f