o
    -׾gF/                     @   s*  d Z ddlmZmZmZmZ ddlZddlZddlm	Z	 ddl
mZ ddlmZmZmZmZ g dZe d	krdd
lmZ i Ze Zdd Zdd Zdd Zdd ZdgddZdd Zdd Zdd ZdhddZdd Zdd  Zd!d" Z d#d$ Z!d%d& Z"d'd( Z#d)d* Z$dhd+d,Z%dgd-d.Z&d/d0 Z'd1d2 Z(d3d4 Z)d5d6 Z*d7d8 Z+d9d: Z,d;d< Z-d=d> Z.d	Z/nddl0Z0dd?l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ee3e07e0j8f Z9d@d@d@d@dAZ:e5e6e3e07e3e2e4e0j;e0j<dBZ=ejdCkrddDl0m>Z> e:?d@d@d@d@dE e=?e0j8e3e6e3e6e>j@e>jAe07e0j8e07e07e0j8dF	 dGdH ZBdId ZdJd ZdKd ZdgdLdZdMd ZdNd ZdOd ZdhdPdZdQd ZdRd  ZdSd" Z dTd$ Z!dUd& Z"dVd( Z#dWd* Z$dhdXd,Z%dgdYd.Z&dZd0 Z'd[d2 Z(d\d4 Z)d]d6 Z*d^d8 Z+d_d: Z,d`d< Z-dad> Z.dbZ/dcdd ZCG dedf dfeDZEdS )izK
Exceptions and compatibility shims for consistently using ctypes and cffi
    )unicode_literalsdivisionabsolute_importprint_functionN)find_library   )ffi)str_clsbyte_cls	int_typesbytes_to_list)array_from_pointer	array_setbuffer_from_bytesbuffer_from_unicodebuffer_pointer
byte_arraybyte_string_from_bufferbytes_from_buffercallbackcastdereferrnoFFIEngineErrorget_libraryis_nullnativenewnullpointer_setrefregister_ffisizeofstructstruct_bytesstruct_from_bufferunwrapwrite_to_buffercffi)FFIc                 C   s   |t | < d S N)_ffi_registrylibraryffi_obj r/   W/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/oscrypto/_ffi.pyr!   8      r!   c                 C   s   | t v rt |  S tS r*   )r+   r   )r-   r/   r/   r0   _get_ffi;   s   r2   c                 C   s"   t jdkrtd| S td| S )Nwin32zunsigned char[]zchar[])sysplatformr   r   initializerr/   r/   r0   r   @   s   
r   c                 C   s   t d| S )Nz
wchar_t []r   r   r6   r/   r/   r0   r   E   r1   r   c                 C   s   || ||t | < d S r*   )lenbufferdataoffsetr/   r/   r0   r'   H   s   r'   c                 C   s   t d| gS )Nzchar *[]r8   r;   r/   r/   r0   r   K      r   c                 C      t | }|||S r*   )r2   r   )r-   type_valuer.   r/   r/   r0   r   N      r   c                 C   s   t | }||S r*   )r2   r"   )r-   rB   r.   r/   r/   r0   r"   R   s   
r"   c                 C   s.   |d urt | |d d  S t | d d  S r*   r   r;   r;   maxlenr/   r/   r0   r   V   s   r   c                 C   
   t | S r*   )r   stringr>   r/   r/   r0   r   [      
r   c                 C   s   | S r*   r/   byte_stringr/   r/   r0   r   ^      r   c                 C   s   || d< d S Nr   r/   pointer_rB   r/   r/   r0   r   a   r1   r   c                 C      t |D ]\}}|| |< qd S r*   	enumeratearrayrB   indexvalr/   r/   r0   r   d      
r   c                   C      t jS r*   )r   NULLr/   r/   r/   r0   r   h      r   c                 C   sH   | d u rdS | t jkrdS t t | dkrdS | d t jkr"dS dS )NTvoid *Fr   )r   rY   getctypetypeofpointr/   r/   r0   r   k   s   
r   c                   C   rX   r*   )r   r   r/   r/   r/   r0   r   v   rZ   r   c                 C   sL   t | }g }|d ur|| |tddgv r||dS |j|g|R  S )NBCRYPT_KEY_HANDLEBCRYPT_ALG_HANDLEr   )r2   appendsetr   r   )r-   rA   rB   r.   paramsr/   r/   r0   r   y   s   
r   c                 C   s   | | S r*   r/   rB   r=   r/   r/   r0   r          r    c                 C   s4   | t kr	t|S | tkrt|d d  S | |S r*   )r	   r   rH   r
   r;   rA   rB   r/   r/   r0   r      s
   
r   c                 C      | d S rM   r/   r^   r/   r/   r0   r      rf   r   c                 C   rh   rM   r/   r^   r/   r/   r0   r&      rf   r&   c                 C   s   t | }|d| S )N%s *)r2   r   )r-   namer.   r/   r/   r0   r#      s   r#   c                 C   s   t | d d  S r*   rD   struct_r/   r/   r0   r$      s   r$   c                 C   sR   t | }|d| }|d }t| |}||}|||d d  |d d < |S )Nri   r   )r2   r   r"   r;   )r-   rj   r;   r.   new_struct_pointer
new_structstruct_sizestruct_bufferr/   r/   r0   r%      s   

r%   c                 C   s   t | }|d||f |}||}|dkrg S g }ddddddd}||v }	td|D ]}
||
 }|	r:||}|| q-|S )Nz%s[%s]r   T)LPSTRLPCSTRLPWSTRLPCWSTRchar *	wchar_t *)r2   r   r"   rangerH   rb   )r-   rj   r_   sizer.   rT   total_bytesoutputstring_typesstring_typeirB   r/   r/   r0   r      s(   

r   c                 C   r@   r*   )r2   r   )r-   signature_namefuncr.   r/   r/   r0   r      rC   r   )pointerc_intc_char_pc_uintc_void_p	c_wchar_pT)r[   rv   ru   char **)r[   rv   ru   r   intzunsigned intsize_tuint32_tr3   )wintypes)rq   rs   rr   rt   )	BYTErq   rs   rr   rt   ULONGDWORDru   r   c                 C   s   |dd  dk}|r|d d }|dd  dko|t v}|r$|d d }|ddk}|rO||dd |d }|d	krBd
}nt|}|d|d }|tv rXt| }nt| |}|rdt|}|||fS )Nz **z *[r   ] Tr   )_pointer_typesfindr   	_type_mapgetattrctypesPOINTER)r-   rA   is_double_pointer
is_pointeris_arrayr/   r/   r0   
_type_info   s&   



r   c                 C      d S r*   r/   r,   r/   r/   r0   r!     rL   c                 C   rG   r*   )r   create_string_bufferr6   r/   r/   r0   r     rI   c                 C   rG   r*   )r   create_unicode_bufferr6   r/   r/   r0   r     rI   c                 C   sR   t | ttjrt| |t| d S |dkr|| _d S | jd| | | _d S rM   )
isinstancer   r   c_bytememmover9   rB   rawr:   r/   r/   r0   r'     s   
c                 C   s   t t| tS r*   )r   r   r   r   r>   r/   r/   r0   r        c                 C   s8   t | |\}}}|rt|}n|r|| }t||S r*   )r   r   r   r   )r-   rA   rB   r   r   r/   r/   r0   r     s   c                 C   s
   t |S r*   )r   r"   )r-   rB   r/   r/   r0   r"   (  rI   c                 C   s2   t | trt| |S |d ur| jd| S | jS rM   )r   _pointer_int_typesr   	string_atr   rE   r/   r/   r0   r   +  s
   
c                 C      | j S r*   )rB   r>   r/   r/   r0   r   2  rZ   c                 C   s   t jt|  t|  S r*   )r   r   r9   r   rJ   r/   r/   r0   r   5  s   c                 C   s   || j _d S r*   )contentsrB   rN   r/   r/   r0   r   8  r1   c                 C   rP   r*   rQ   rS   r/   r/   r0   r   ;  rW   c                   C   r   r*   r/   r/   r/   r/   r0   r   ?  rL   c                 C   s
   t |  S r*   )boolr^   r/   r/   r0   r   B  rI   c                   C   s   t  S r*   )r   	get_errnor/   r/   r/   r0   r   E  rf   c                 C   s`   t | |\}}}|r|du r|| }d }n|| }g }|d ur$|| || }|r.t|}|S )NT)r   rb   r   )r-   rA   rB   r   r   rd   rz   r/   r/   r0   r   H  s   
c                 C   s0   |dkr	t | S t t | | t t jS rM   )r   byrefr   	addressofr   r   re   r/   r/   r0   r    [  s   
c                 C   sd   t || r|S tjdk r| tkrt |tr|S t |tjr-|jtjkr-t	t
||jS | |jS )N)   )r   r4   version_infor   r   r   Array_type_r   r   r   _length_rB   rg   r/   r/   r0   r   `  s   

c                 C   rh   rM   r/   r^   r/   r/   r0   r   i  rf   c                 C   r   r*   )r   r^   r/   r/   r0   r&   l  rZ   c                 C   s   t t| | S r*   )r   r   )r-   rj   r/   r/   r0   r#   o  r   c                 C   s   t | t | jS r*   )r   r   r"   r   rk   r/   r/   r0   r$   r  s   c                 C   s4   t | |}| }tt||t| t|S r*   )r   r   r   r   r"   r   )r-   rA   r;   class_rB   r/   r/   r0   r%   u  s   

c                 C   sH   t | |\}}}t|t|}g }td|D ]	}|||  q|S rM   )r   r   r   r   rw   rb   )r-   rA   r_   rx   _rT   rz   r}   r/   r/   r0   r   {  s   c                 C   s   t | ||S r*   )r   )r-   signature_typer   r/   r/   r0   r     r?   r   c                 C   sr   t | }tjdkr7d| }|dd| }tttt d d}|s-|dkr-|}|S |dkr7||kr7|}|S )	a  
    Retrieve the C library path with special handling for Mac

    :param name:
        A unicode string of the library to search the system for

    :param dylib_name:
        Mac only - a unicode string of the unversioned dylib name

    :param version:
        Mac only - a unicode string of the dylib version to use. Used on macOS
        10.15+ when the unversioned dylib is found, since unversioned
        OpenSSL/LibreSSL are just placeholders, and a versioned dylib must be
        imported. Used on macOS 10.16+ when find_library() doesn't return a
        result, due to system dylibs not being present on the filesystem any
        longer.

    :return:
        A unicode string of the path to the library
    darwinz/usr/lib/%sz.dylibz	.%s.dylibr   .)
      )r      )	r   r4   r5   replacetuplemapr   mac_versplit)rj   
dylib_nameversionr-   unversioned	versionedr   r/   r/   r0   r     s   
r   c                   @   s   e Zd ZdZdS )r   z@
    An exception when trying to instantiate ctypes or cffi
    N)__name__
__module____qualname____doc__r/   r/   r/   r0   r     s    r   )r   r*   )Fr   
__future__r   r   r   r   r4   r5   ctypes.utilr   r   r   _typesr	   r
   r   r   __all__r(   r)   r+   r!   r2   r   r   r'   r   r   r"   r   r   r   r   r   r   r   r   r   r    r   r   r&   r#   r$   r%   r   r   enginer   r   r   r   r   r   r   r   r   r   r   c_size_tc_uint32r   r   updater   r   r   r   	Exceptionr   r/   r/   r/   r0   <module>   s   





	 







	&