
     hF/                        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    rhd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/n9ddl0Z0dd%l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ee3 e0j7        e0j8                  fz   Z9d&d&d&d&d'Z:e5e6e3 e0j7        e3          e2e4e0j;        e0j<        d(Z=ej        d)k    rdd*l0m>Z> e:?                    d&d&d&d&d+           e=?                    e0j8        e3e6e3e6e>j@        e>jA         e0j7        e0j8                   e0j7         e0j7        e0j8                            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          ZEdS )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           | <   d S N)_ffi_registrylibraryffi_objs     I/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/oscrypto/_ffi.pyr"   r"   8   s    !(g    c                 <    | t           v rt           |          S t          S r,   )r-   r	   )r/   s    r1   _get_ffir4   ;   s    m## ))
r2   c                 v    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   @   s4    <7""7,k:::wx---r2   c                 ,    t          j        d|           S )Nz
wchar_t []r	   r   r9   s    r1   r   r   E   s    w|[111r2   c                 4    || ||t          |          z   <   d S r,   )lenbufferdataoffsets      r1   r(   r(   H   s"    ,0vfs4yy(()))r2   c                 .    t          j        d| g          S )Nzchar *[]r<   r@   s    r1   r   r   K   s    wzF8,,,r2   c                 L    t          |           }|                    ||          S r,   )r4   r   )r/   type_valuer0   s       r1   r   r   N   s#    7##||E5)))r2   c                 J    t          |           }|                    |          S r,   )r4   r#   )r/   rG   r0   s      r1   r#   r#   R   s!    7##~~e$$$r2   c                 x    |t          j        | |          d d          S t          j        |           d d          S r,   r	   r@   r@   maxlens     r1   r   r   V   s<    :ff--aaa00z&!!!!!$$r2   c                 *    t          j        |           S r,   )r	   stringrD   s    r1   r   r   [   s    z&!!!r2   c                     | S r,    byte_strings    r1   r   r   ^   s    r2   c                     || d<   d S Nr   rP   pointer_rG   s     r1   r    r    a   s    r2   c                 :    t          |          D ]
\  }}|| |<   d S r,   	enumeratearrayrG   indexvals       r1   r   r   d   2    #E** 	 	JE3E%LL	 	r2   c                      t           j        S r,   )r	   NULLrP   r2   r1   r   r   h   s	    xr2   c                     | dS | t           j        k    rdS t          j        t          j        |                     dk    rdS | d         t           j        k    rdS dS )NTvoid *Fr   )r	   r`   getctypetypeofpoints    r1   r   r   k   s]    =4CH4<
5))**h6658sx4ur2   c                      t           j        S r,   )r	   r   rP   r2   r1   r   r   v   s
    yr2   c                     t          |           }g }||                    |           |t          ddg          v r|                    |d          S  |j        |g|R  S )NBCRYPT_KEY_HANDLEBCRYPT_ALG_HANDLEr   )r4   appendsetr   r   )r/   rF   rG   r0   paramss        r1   r   r   y   st    7##MM%   C,.ABCC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      sO    G:e$$$H:e$$QQQ''uU||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                 P    t          |           }|                    d|z            S )N%s *)r4   r   )r/   namer0   s      r1   r$   r$      s%    7##{{6D=)))r2   c                 :    t          j        |           d d          S r,   rJ   struct_s    r1   r%   r%      s    z'""111%%r2   c                     t          |           }|                    d|z            }|d         }t          | |          }|                    |          }|                    ||          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&      s{    7##$[[$77'*
Wj11'9::">>&+>>qqqAaaa!!r2   c                 B   t          |           }|                    |d|d|          }|                    |          }|dk    rg S g }ddddddd}||v }	t          d|          D ]6}
||
         }|	r|                    |          }|                    |           7|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##ttt4e<<nnU++!I 
 
 l*q$ 	! 	!A!HE .u--MM%    r2   c                 L    t          |           }|                    ||          S r,   )r4   r   )r/   signature_namefuncr0   s       r1   r   r      s%    7##5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    o|t           v}|r
|d d         }|                    d          dk    }|rh||                    d          dz   |                    d                   }|d	k    rd
}nt          |          }|d|                    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%/ 	#2#JE233Z4'GE,G
 	#2#JE::c??b( 	-UZZ__q0C@AH2~~x==!EJJsOO+,EIe$EEGU++E 	*N5))EHe,,r2   c                     d S r,   rP   r.   s     r1   r"   r"     s    r2   c                 *    t          j        |           S r,   )r   create_string_bufferr9   s    r1   r   r     s    *;777r2   c                 *    t          j        |           S r,   )r   create_unicode_bufferr9   s    r1   r   r     s    +K888r2   c                     t          | t          j        t          j                            r%t          j        | |t          |                     d S |dk    r	|| _        d S | j        d|         |z   | _        d S rT   )
isinstancer   r   c_bytememmover>   rG   rawr?   s      r1   r(   r(     sn    ffnV];;<< 	N64T333FQ;;FLLL!:ah/$6FLLLr2   c                 P    t          t          j        | t                              S r,   )r   r   r   r   rD   s    r1   r   r     s    v{68445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     sU    &0%&@&@#
He 	%N5))EE 	%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   +  sG    f011 	4#FF333:ah''zr2   c                     | j         S r,   )rG   rD   s    r1   r   r   2  s
    |r2   c                 X    t          j        t          |           z  t          |            S r,   )r   r   r>   r   rQ   s    r1   r   r   5  s$    K 0 00=3M3MNNr2   c                     || j         _        d S r,   )contentsrG   rU   s     r1   r    r    8  s    "'r2   c                 :    t          |          D ]
\  }}|| |<   d S r,   rX   rZ   s       r1   r   r   ;  r^   r2   c                      d S r,   rP   rP   r2   r1   r   r   ?  s    tr2   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 }||                    |            || }|rt          |          }|S )NT)r   rk   r   )r/   rF   rG   r   r   rm   r   s          r1   r   r   H  s    &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!   [  sI    Q;;<&&&{6+E22V;V^FM=Z=Z[[[r2   c                 `   t          ||           r|S t          j        dk     r"| t          k    rt          |t                    r|S t          |t
          j                  rA|j        t
          j        k    r,t          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)8T8T|LeV\** 	Mu|v}/L/L#F$4U$;$;U^LLLuU[!!!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                 L    t           t          | |                                S r,   )r   r   )r/   rw   s     r1   r$   r$   o  s#    -ww--//000r2   c                 Z    t          j        | t          j        | j                            S r,   )r   r   r#   r   ry   s    r1   r%   r%   r  s"    w7G)H)HI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  sU    %((v'..f8M8MNNN~e$$$r2   c                     t          | |          \  }}}t          j        |t          j        |                    }g }t	          d|          D ]}|                    ||                    |S rT   )r   r   r   r   r   rk   )r/   rF   rf   r   _r[   r   r   s           r1   r   r   {  sl     %001eE6>%#8#899q$ 	$ 	$AMM%(####r2   c                 4     t          | |          |          S r,   )r   )r/   signature_typer   s      r1   r   r     s    /ww//555r2   r   c                 J   t          |           }t          j        dk    rd|z  }|                    dd|z            }t	          t          t          t          j                    d                             d                              }|s	|dk    r|}n|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H	C!1!3!3A!6!<!<S!A!ABBCC 	 7h..GG  W%;%;GNr2   c                       e Zd ZdZdS )r   z@
    An exception when trying to instantiate ctypes or cffi
    N)__name__
__module____qualname____doc__rP   r2   r1   r   r     s          	Dr2   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      s    S R R R R R R R R R R R 



  $ $ $ $ $ $       ? ? ? ? ? ? ? ? ? ? ? ?  > 355F??M
#%%C) ) )  
. . .
2 2 21 1 1 1- - -* * *% % %% % % %
" " "        	 	 	  + + + +         * * *& & &" " "  26 6 6 FF MMMLLLLLLLLLLLLLLLL"hv}0M0M%NN 	 N !6>(++/O	 	I |w######	
 
 	 	 	 	M ^^$fnV]33%v~nfnV]&C&CDD

 

 
	 
	 
	- - -6  8 8 89 9 97 7 7 76 6 6) ) )$ $ $     O O O( ( (      " " "   &\ \ \ \
" " "    1 1 1J J J% % %  6 6 6 F# # #L	 	 	 	 	Y 	 	 	 	 	r2   