§
    £˜ºh  ã                   ó¸   — d Z ddlZddlZddlmZ ddlmZ dededed	efd
„Z	 G d„ d¦  «        Z
 G d„ de
¦  «        Z G d„ de
¦  «        Z G d„ de
¦  «        ZdS )z.Implementation of MySQL Authentication Plugin.é    N)ÚOptionalé   )ÚhexlifyÚhash1Úhash2Ú	hash_sizeÚreturnc                 ó`   — d„ t          | |¦  «        D ¦   «         }t          j        |› d�g|¢R Ž S )zõEncrypt/Decrypt function used for password encryption in
    authentication, using a simple XOR.

    Args:
        hash1 (str): The first hash.
        hash2 (str): The second hash.

    Returns:
        str: A string with the xor applied.
    c                 ó   — g | ]
\  }}||z  ‘ŒS © r   )Ú.0Úh1Úh2s      ú]/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/mysqlx/authentication.pyú
<listcomp>zxor_string.<locals>.<listcomp>2   s    € Ð7Ð7Ð7™˜"˜bˆR�"‰WÐ7Ð7Ð7ó    ÚB)ÚzipÚstructÚpack)r   r   r   Úxoreds       r   Ú
xor_stringr   '   s?   € ð 8Ð7¥S¨°Ñ%6Ô%6Ð7Ñ7Ô7€EÝŒ;˜)���Ð/¨Ð/Ð/Ð/Ð/r   c                   óT   — e Zd ZdZd	dee         dee         fd„Zdefd„Zdefd„ZdS )
ÚBaseAuthPluginz7Base class for implementing the authentication plugins.NÚusernameÚpasswordc                 ó"   — || _         || _        d S )N©Ú	_usernameÚ	_password)Úselfr   r   s      r   Ú__init__zBaseAuthPlugin.__init__9   s   € Ø(0ˆŒØ(0ˆŒˆˆr   r	   c                 ó   — t           ‚)úUReturns the plugin name.

        Returns:
            str: The plugin name.
        ©ÚNotImplementedError©r!   s    r   ÚnamezBaseAuthPlugin.name=   ó
   € õ "Ð!r   c                 ó   — t           ‚)úeReturns the authentication name.

        Returns:
            str: The authentication name.
        r%   r'   s    r   Ú	auth_namezBaseAuthPlugin.auth_nameE   r)   r   )NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr"   r(   r,   r   r   r   r   r   6   s   € € € € € ØAÐAð1ð 1 ¨#¤ð 1ÀÈ#Äð 1ð 1ð 1ð 1ð"�cð "ð "ð "ð "ð"˜3ð "ð "ð "ð "ð "ð "r   r   c                   ó:   — e Zd ZdZdefd„Zdefd„Zdedefd„ZdS )ÚMySQL41AuthPluginzCClass implementing the MySQL Native Password authentication plugin.r	   c                 ó   — dS )r$   zMySQL 4.1 Authentication Pluginr   r'   s    r   r(   zMySQL41AuthPlugin.nameQ   s
   € ð 1Ð0r   c                 ó   — dS )r+   ÚMYSQL41r   r'   s    r   r,   zMySQL41AuthPlugin.auth_nameY   s	   € ð ˆyr   Údatac                 óÚ  — | j         rÚt          | j         t          ¦  «        r| j                              d¦  «        n| j         }t	          j        |¦  «                             ¦   «         }t	          j        |¦  «                             ¦   «         }t          |t	          j        ||z   ¦  «                             ¦   «         d¦  «        }d| j        › dt          |¦  «        › d�S d| j        › d�S )z°Hashing for MySQL 4.1 authentication.

        Args:
            data (bytes): The authentication data.

        Returns:
            str: The authentication response.
        úutf-8é   ú z *)
r    Ú
isinstancer1   ÚencodeÚhashlibÚsha1Údigestr   r   r   ©r!   r7   r   r   r   r   s         r   Ú	auth_datazMySQL41AuthPlugin.auth_dataa   sÚ   € ð Œ>ð 		>õ ˜dœn­cÑ2Ô2ð$�”×%Ò% gÑ.Ô.Ð.à”^ð õ
 ”L Ñ*Ô*×1Ò1Ñ3Ô3ˆEÝ”L Ñ'Ô'×.Ò.Ñ0Ô0ˆEÝ˜u¥g¤l°4¸%±<Ñ&@Ô&@×&GÒ&GÑ&IÔ&IÈ2ÑNÔNˆEØ=˜œÐ=Ð=­7°5©>¬>Ð=Ð=Ð=Ð=Ø&�D”NÐ&Ð&Ð&Ð&r   N©	r-   r.   r/   r0   r1   r(   r,   ÚbytesrB   r   r   r   r3   r3   N   sr   € € € € € ØMÐMð1�cð 1ð 1ð 1ð 1ð˜3ð ð ð ð ð'˜eð '¨ð 'ð 'ð 'ð 'ð 'ð 'r   r3   c                   ó6   — e Zd ZdZdefd„Zdefd„Zdefd„ZdS )ÚPlainAuthPluginz9Class implementing the MySQL Plain authentication plugin.r	   c                 ó   — dS )r$   zPlain Authentication Pluginr   r'   s    r   r(   zPlainAuthPlugin.namez   s
   € ð -Ð,r   c                 ó   — dS )r+   ÚPLAINr   r'   s    r   r,   zPlainAuthPlugin.auth_name‚   s	   € ð ˆwr   c                 ó&   — d| j         › d| j        › �S )zeReturns the authentication data.

        Returns:
            str: The authentication data.
        r;   r   r'   s    r   rB   zPlainAuthPlugin.auth_dataŠ   s   € ð 7�D”NÐ6Ð6 d¤nÐ6Ð6Ð6r   N)r-   r.   r/   r0   r1   r(   r,   rB   r   r   r   rF   rF   w   sk   € € € € € ØCÐCð-�cð -ð -ð -ð -ð˜3ð ð ð ð ð7˜3ð 7ð 7ð 7ð 7ð 7ð 7r   rF   c                   ó:   — e Zd ZdZdefd„Zdefd„Zdedefd„ZdS )ÚSha256MemoryAuthPluginz;Class implementing the SHA256_MEMORY authentication plugin.r	   c                 ó   — dS )r$   z#SHA256_MEMORY Authentication Pluginr   r'   s    r   r(   zSha256MemoryAuthPlugin.name–   s
   € ð 5Ð4r   c                 ó   — dS )r+   ÚSHA256_MEMORYr   r'   s    r   r,   z Sha256MemoryAuthPlugin.auth_namež   s	   € ð ˆr   r7   c                 ó´  — t          | j        t          ¦  «        r| j                             d¦  «        n| j        }t	          j        |¦  «                             ¦   «         }t	          j        t	          j        |¦  «                             ¦   «         |z   ¦  «                             ¦   «         }t          ||d¦  «        }d| j        › dt          |¦  «        › �S )a"  Hashing for SHA256_MEMORY authentication.

        The scramble is of the form:
            SHA256(SHA256(SHA256(PASSWORD)),NONCE) XOR SHA256(PASSWORD)

        Args:
            data (bytes): The authentication data.

        Returns:
            str: The authentication response.
        r9   é    r;   )
r<   r    r1   r=   r>   Úsha256r@   r   r   r   rA   s         r   rB   z Sha256MemoryAuthPlugin.auth_data¦   s¹   € õ ˜$œ.­#Ñ.Ô.ð ˆDŒN×!Ò! 'Ñ*Ô*Ð*à”ð 	õ
 ”˜xÑ(Ô(×/Ò/Ñ1Ô1ˆÝ”�wœ~¨eÑ4Ô4×;Ò;Ñ=Ô=ÀÑDÑEÔE×LÒLÑNÔNˆÝ˜5 %¨Ñ,Ô,ˆØ6�D”NÐ6Ð6¥g¨e¡n¤nÐ6Ð6Ð6r   NrC   r   r   r   rL   rL   “   sr   € € € € € ØEÐEð5�cð 5ð 5ð 5ð 5ð˜3ð ð ð ð ð7˜eð 7¨ð 7ð 7ð 7ð 7ð 7ð 7r   rL   )r0   r>   r   Útypingr   Úhelpersr   rD   Úintr   r   r3   rF   rL   r   r   r   ú<module>rV      s$  ðð: 5Ð 4à €€€Ø €€€à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð0�eð 0 Eð 0°cð 0¸eð 0ð 0ð 0ð 0ð"ð "ð "ð "ð "ñ "ô "ð "ð0&'ð &'ð &'ð &'ð &'˜ñ &'ô &'ð &'ðR7ð 7ð 7ð 7ð 7�nñ 7ô 7ð 7ð8'7ð '7ð '7ð '7ð '7˜^ñ '7ô '7ð '7ð '7ð '7r   