o
    b
                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ eeG dd	 d	ZeeG d
d dZeeG dd dZee
G dd dejZee
G dd dejZg dZdS )z*
Credential managers for L{twisted.mail}.
    N)implementer)credentials)IllegalClientResponse)IChallengeResponseIClientAuthentication)nativeStringc                   @   $   e Zd Zdd Zdd Zdd ZdS )CramMD5ClientAuthenticatorc                 C   
   || _ d S Nuserselfr    r   4/usr/lib/python3/dist-packages/twisted/mail/_cred.py__init__      
z#CramMD5ClientAuthenticator.__init__c                 C      dS )Ns   CRAM-MD5r   r   r   r   r   getName      z"CramMD5ClientAuthenticator.getNamec                 C   s*   t j||tjd }| jd |d S )N)	digestmod    ascii)hmacHMAChashlibmd5	hexdigestr   encode)r   secretchalresponser   r   r   challengeResponse   s   z,CramMD5ClientAuthenticator.challengeResponseN__name__
__module____qualname__r   r   r$   r   r   r   r   r	          r	   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
LOGINAuthenticatorc                 C   s   || _ | j| _d S r   )r   challengeUsernamer$   r   r   r   r   r   #   s   zLOGINAuthenticator.__init__c                 C   r   )Ns   LOGINr   r   r   r   r   r   '   r   zLOGINAuthenticator.getNamec                 C   s   | j | _| jS r   )challengeSecretr$   r   r   r!   r"   r   r   r   r,   *   s   z$LOGINAuthenticator.challengeUsernamec                 C   s   |S r   r   r.   r   r   r   r-   /   s   z"LOGINAuthenticator.challengeSecretN)r&   r'   r(   r   r   r,   r-   r   r   r   r   r+   !   s
    r+   c                   @   r   )PLAINAuthenticatorc                 C   r
   r   r   r   r   r   r   r   6   r   zPLAINAuthenticator.__init__c                 C   r   )Ns   PLAINr   r   r   r   r   r   9   r   zPLAINAuthenticator.getNamec                 C   s   d| j  d | S )N    r   r.   r   r   r   r$   <   s   z$PLAINAuthenticator.challengeResponseNr%   r   r   r   r   r/   4   r)   r/   c                   @   r*   )
LOGINCredentialsc                 C   s(   ddg| _ ddg| _tj| d d  d S )Ns	   Password s
   User Name s   passwords   username)
challenges	responsesr   UsernamePasswordr   r   r   r   r   r   B   s   

zLOGINCredentials.__init__c                 C   s
   | j  S r   )r2   popr   r   r   r   getChallengeG   r   zLOGINCredentials.getChallengec                 C   s   t | t| j | d S r   )setattrr   r3   r5   )r   r#   r   r   r   setResponseJ   s   zLOGINCredentials.setResponsec                 C   s
   t | jS r   )boolr2   r   r   r   r   moreChallengesM   r   zLOGINCredentials.moreChallengesNr&   r'   r(   r   r6   r8   r:   r   r   r   r   r1   @   s
    r1   c                   @   r*   )
PLAINCredentialsc                 C   s   t j| d d  d S r   )r   r4   r   r   r   r   r   r   S   s   zPLAINCredentials.__init__c                 C   r   )N    r   r   r   r   r   r6   V   r   zPLAINCredentials.getChallengec                 C   s0   | d}t|dkrtd|\}| _| _d S )Nr0      z*Malformed Response - wrong number of parts)splitlenr   usernamepassword)r   r#   partsuselessr   r   r   r8   Y   s   
zPLAINCredentials.setResponsec                 C   r   )NFr   r   r   r   r   r:   _   r   zPLAINCredentials.moreChallengesNr;   r   r   r   r   r<   Q   s
    r<   )r	   r1   r+   r<   r/   )__doc__r   r   zope.interfacer   twisted.credr   twisted.mail._exceptr   twisted.mail.interfacesr   r   twisted.python.compatr   r	   r+   r/   r4   r1   r<   __all__r   r   r   r   <module>   s&   