
    BwgF/                     0   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(  redd
lmZ i Z e       Zd Zd Zd Zd ZdKdZd Zd Zd ZdLdZd Zd Zd Z d Z!d Z"d Z#d Z$dLdZ%dKdZ&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z.d	Z/ngddl0Z0dd%l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ee3 e0jn                  e0jp                        fz   Z9d&d&d&d&d'Z:e5e6e3 e0jn                  e3      e2e4e0jv                  e0jx                  d(Z=ej                  d)k(  rdd*l0m>Z> e:j                  d&d&d&d&d+       e=j                  e0jp                  e3e6e3e6e>j                  e>j                   e0jn                  e0jp                         e0jn                   e0jn                  e0jp                              d,	       d- ZBd. Zd/ Zd0 ZdKd1Zd2 Zd3 Zd4 ZdLd5Zd6 Zd7 Zd8 Z d9 Z!d: Z"d; Z#d< Z$dLd=Z%dKd>Z&d? Z'd@ Z(dA Z)dB Z*dC Z+dD Z,dE Z-dF Z.dGZ/dH ZC G dI dJeD      ZEy)MzK
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                     |t         | <   y N)_ffi_registrylibraryffi_objs     D/var/www/horilla/myenv/lib/python3.12/site-packages/oscrypto/_ffi.pyr"   r"   8   s    !(g    c                 0    | t         v r	t         |    S t        S r,   )r-   r	   )r/   s    r1   _get_ffir4   ;   s    m# ))
r2   c                     t         j                  dk(  rt        j                  d|       S t        j                  d|       S )Nwin32zunsigned char[]zchar[])sysplatformr	   r   initializers    r1   r   r   @   s1    <<7"77,k::wwx--r2   c                 .    t        j                  d|       S )Nz
wchar_t []r	   r   r9   s    r1   r   r   E   s    ww|[11r2   c                 &    || ||t        |      z    y r,   )lenbufferdataoffsets      r1   r(   r(   H   s    ,0vfs4y()r2   c                 0    t        j                  d| g      S )Nzchar *[]r<   r@   s    r1   r   r   K   s    wwzF8,,r2   c                 <    t        |       }|j                  ||      S r,   )r4   r   )r/   type_valuer0   s       r1   r   r   N   s    7#||E5))r2   c                 :    t        |       }|j                  |      S r,   )r4   r#   )r/   rG   r0   s      r1   r#   r#   R   s    7#~~e$$r2   c                 h    |t        j                  | |      d d  S t        j                  |       d d  S r,   r	   r@   r@   maxlens     r1   r   r   V   s2    ::ff-a00zz&!!$$r2   c                 ,    t        j                  |       S r,   )r	   stringrD   s    r1   r   r   [   s    zz&!!r2   c                     | S r,    byte_strings    r1   r   r   ^   s    r2   c                     || d<   y Nr   rP   pointer_rG   s     r1   r    r    a   s    r2   c                 4    t        |      D ]
  \  }}|| |<    y r,   	enumeratearrayrG   indexvals       r1   r   r   d   #    #E* 	JE3E%L	r2   c                  "    t         j                  S r,   )r	   NULLrP   r2   r1   r   r   h   s    xxr2   c                     | y| t         j                  k(  ryt        j                  t        j                  |             dk(  ry| d   t         j                  k(  ryy)NTvoid *Fr   )r	   r`   getctypetypeofpoints    r1   r   r   k   sL    =CHH<<

5)*h68sxxr2   c                  "    t         j                  S r,   )r	   r   rP   r2   r1   r   r   v   s    yyr2   c                     t        |       }g }||j                  |       |t        ddg      v r|j                  |d      S  |j                  |g| S )NBCRYPT_KEY_HANDLEBCRYPT_ALG_HANDLEr   )r4   appendsetr   r   )r/   rF   rG   r0   paramss        r1   r   r   y   s^    7#MM% C,.ABCC<<q))w{{5*6**r2   c                     | |z   S r,   rP   rG   rB   s     r1   r!   r!      s    v~r2   c                     | t         k(  rt        j                  |      S | t        k(  rt        j                  |      d d  S  | |      S r,   )r
   r	   rN   r   r@   rF   rG   s     r1   r   r      s?    G::e$$H::e$Q''U|r2   c                     | d   S rT   rP   re   s    r1   r   r          Qxr2   c                     | d   S rT   rP   re   s    r1   r'   r'      rs   r2   c                 @    t        |       }|j                  d|z        S )N%s *)r4   r   )r/   namer0   s      r1   r$   r$      s    7#{{6D=))r2   c                 2    t        j                  |       d d  S r,   rJ   struct_s    r1   r%   r%      s    zz'"1%%r2   c                     t        |       }|j                  d|z        }|d   }t        | |      }|j                  |      }|j                  ||      d d  |d d  |S )Nrv   r   )r4   r   r#   r@   )r/   rw   r@   r0   new_struct_pointer
new_structstruct_sizestruct_buffers           r1   r&   r&      sd    7#$[[$7'*
Wj1'9:">>&+>qAa!!r2   c                    t        |       }|j                  |d|d|      }|j                  |      }|dk(  rg S g }ddddddd}||v }	t        d|      D ]+  }
||
   }|	r|j	                  |      }|j                  |       - |S )N[]r   T)LPSTRLPCSTRLPWSTRLPCWSTRchar *	wchar_t *)r4   r   r#   rangerN   rk   )r/   rw   rf   sizer0   r[   total_bytesoutputstring_typesstring_typeirG   s               r1   r   r      s    7#t4e<nnU+!I 
 l*q$ 	!A!HEu-MM% 		!
 r2   c                 <    t        |       }|j                  ||      S r,   )r4   r   )r/   signature_namefuncr0   s       r1   r   r      s    7#55r2   )pointerc_intc_char_pc_uintc_void_p	c_wchar_pT)rb   r   r   char **)rb   r   r   r   intzunsigned intsize_tuint32_tr6   )wintypes)r   r   r   r   )	BYTEr   r   r   r   ULONGDWORDr   r   c                    |dd  dk(  }|r|d d }|dd  dk(  xr |t         v}|r|d d }|j                  d      dk7  }|rM||j                  d      dz   |j                  d       }|d	k(  rd
}nt        |      }|d|j                  d       }|t        v r
t        |   }nt	        | |      }|rt        j                  |      }|||fS )Nz **z *r   r   r    Tr   )_pointer_typesfindr   	_type_mapgetattrctypesPOINTER)r/   rF   is_double_pointer
is_pointeris_arrays        r1   
_type_infor      s    !"#J%/#2JE23Z4'GE,G
#2JE::c?b(UZZ_q0CAH2~x=!EJJsO,EIe$EGU+ENN5)EHe,,r2   c                      y r,   rP   r.   s     r1   r"   r"     s    r2   c                 ,    t        j                  |       S r,   )r   create_string_bufferr9   s    r1   r   r     s    **;77r2   c                 ,    t        j                  |       S r,   )r   create_unicode_bufferr9   s    r1   r   r     s    ++K88r2   c                     t        | t        j                  t        j                              r!t        j                  | |t        |             y |dk(  r|| _        y | j                  d| |z   | _        y rT   )
isinstancer   r   c_bytememmover>   rG   rawr?   s      r1   r(   r(     sU    ffnnV]];<NN64T3Q;FL!::a/$6FLr2   c                 H    t        t        j                  | t                    S r,   )r   r   r   r   rD   s    r1   r   r     s    v{{68455r2   c                     t        | |      \  }}}|rt        j                  |      }n|r||z  }t        j                  ||      S r,   )r   r   r   r   )r/   rF   rG   r   r   s        r1   r   r     sD    &0%&@#
HeNN5)EH$E{{5%((r2   c                 ,    t        j                  |      S r,   )r   r#   )r/   rG   s     r1   r#   r#   (  s    }}U##r2   c                     t        | t              rt        j                  | |      S || j                  d| S | j                  S rT   )r   _pointer_int_typesr   	string_atr   rK   s     r1   r   r   +  sA    f01##FF33::a''zzr2   c                     | j                   S r,   )rG   rD   s    r1   r   r   2  s    ||r2   c                 P    t        j                  t        |       z  t        |        S r,   )r   r   r>   r   rQ   s    r1   r   r   5  s     K 00=3MNNr2   c                 &    || j                   _        y r,   )contentsrG   rU   s     r1   r    r    8  s    "'r2   c                 4    t        |      D ]
  \  }}|| |<    y r,   rX   rZ   s       r1   r   r   ;  r^   r2   c                       y r,   rP   rP   r2   r1   r   r   ?  s    r2   c                     t        |        S r,   )boolre   s    r1   r   r   B  s    ;r2   c                  *    t        j                         S r,   )r   	get_errnorP   r2   r1   r   r   E  s    !!r2   c                     t        | |      \  }}}|r|du r||z  }d }n||z  }g }||j                  |        || }|rt        |      }|S )NT)r   rk   r   )r/   rF   rG   r   r   rm   r   s          r1   r   r   H  si    &0%&@#
He4(MM% V_Fr2   c                     |dk(  rt        j                  |       S t        j                  t        j                  |       |z   t        j                  t         j
                              S rT   )r   byrefr   	addressofr   r   ro   s     r1   r!   r!   [  sF    Q;<<&&{{6++E2V;V^^FMM=Z[[r2   c                 r   t        ||       r|S t        j                  dk  r| t        k(  rt        |t              r|S t        |t
        j                        rP|j                  t
        j                  k(  r3t        j                  t        j                  |      |j                        S  | |j                        S )N)   )r   r7   version_infor   r   r   Array_type_r   r   r   _length_rG   rq   s     r1   r   r   `  s    eU#Ld"u|
5)8TLeV\\*u||v}}/L##F$4$4U$;U^^LLU[[!!r2   c                     | d   S rT   rP   re   s    r1   r   r   i  rs   r2   c                     | j                   S r,   )r   re   s    r1   r'   r'   l  s    ~~r2   c                 6    t         t        | |                   S r,   )r   r   )r/   rw   s     r1   r$   r$   o  s    -ww-/00r2   c                 h    t        j                  | t        j                  | j                              S r,   )r   r   r#   r   ry   s    r1   r%   r%   r  s$    w7G7G)HIIr2   c                     t        | |      } |       }t        j                  t        j                  |      |t        j                  |             t        j
                  |      S r,   )r   r   r   r   r#   r   )r/   rF   r@   class_rG   s        r1   r&   r&   u  sH    %(v''.f8MN~~e$$r2   c                     t        | |      \  }}}t        j                  |t        j                  |            }g }t	        d|      D ]  }|j                  ||           |S rT   )r   r   r   r   r   rk   )r/   rF   rf   r   _r[   r   r   s           r1   r   r   {  s\     %01eE6>>%#89q$ 	$AMM%(#	$r2   c                 &     t        | |      |      S r,   )r   )r/   signature_typer   s      r1   r   r     s    /ww/55r2   r   c                    t        |       }t        j                  dk(  rnd|z  }|j                  dd|z        }t	        t        t        t        j                         d   j                  d                  }|s	|dk\  r|}|S |dk\  r||k(  r|}|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   r7   r8   replacetuplemapr   mac_versplit)rw   
dylib_nameversionr/   unversioned	versionedr   s          r1   r   r     s    , 4 G
||x#j0''+2GH	C!1!1!3A!6!<!<S!ABC7h.G
 N	  W%;GNr2   c                       e Zd ZdZy)r   z@
    An exception when trying to instantiate ctypes or cffi
    N)__name__
__module____qualname____doc__rP   r2   r1   r   r     s     	r2   r   )r   r,   )Fr   
__future__r   r   r   r   r7   r8   ctypes.utilr   r   r	   _typesr
   r   r   r   __all__r)   r*   r-   r"   r4   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   rP   r2   r1   <module>r      su   S R 
  $  ? ?> 5F?M
%C)
.
21-*%%
"	+*&"26 F LL"hv}}0M%NN 	N !6>>(+//OO	I ||w#	
 	 	MM ^^^^$fnnV]]3%v~~nfnnV]]&CD

 
	-68976)$O("&\
"1J%6 F#L	Y 	r2   