o
    Œõ±jF/  ã                   @   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r±d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/nÖddl0Z0dd?l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ee3e0 7e0j8¡f Z9d@d@d@d@dAœZ:e5e6e3e0 7e3¡e2e4e0j;e0j<dBœZ=ejdCk�rddDl0m>Z> e: ?d@d@d@d@dEœ¡ e= ?e0j8e3e6e3e6e>j@e>jAe0 7e0j8¡e0 7e0 7e0j8¡¡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/   ú€/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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 )Néýÿÿÿz **éÿÿÿÿéþÿÿÿ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Ð   





	 üø
ü
÷



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