o
    BŠ]z  ã                   @   sŽ   zd dl mZ W n ey   d dlZejZY nw d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ e d¡ ¡ ZdZG d	d
„ d
ejƒZdS )é    )Úmd5N)Úuniv)Úbase)Úlocalkey)ÚerrindÚerror)r   r   r   r   r   r   r   r   r   r   r   r   )0r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                   @   sP   e Zd ZdZdgd Zdgd Zdd„ Zdd„ Zed	d
„ ƒZ	dd„ Z
dd„ ZdS )ÚHmacMd5)
é   é   é   r	   r   r
   é
   r	   r	   é   é6   é@   é\   c                 C   s
   t  |¡S ©N)r   ZhashPassphraseMD5)ÚselfÚauthKey© r   úJ/usr/lib/python3/dist-packages/pysnmp/proto/secmod/rfc3414/auth/hmacmd5.pyÚhashPassphrase   s   
zHmacMd5.hashPassphrasec                 C   s   t  ||¡S r   )r   ZlocalizeKeyMD5)r   r   ZsnmpEngineIDr   r   r   ÚlocalizeKey    s   zHmacMd5.localizeKeyc                 C   s   dS )Né   r   )r   r   r   r   ÚdigestLength#   s   zHmacMd5.digestLengthc                 C   s´   |  t¡}|dkrt d¡‚|d |… }||d d … }| ¡ t }t tdd„ || j	ƒ¡}t tdd„ || j
ƒ¡}t| ¡ | ƒ ¡ }	t| ¡ |	 ƒ ¡ }
|
d d… }|| | S )NéÿÿÿÿzCant locate digest placeholderr   c                 S   ó   | |A S r   r   ©ÚxÚyr   r   r   Ú<lambda><   ó    z1HmacMd5.authenticateOutgoingMsg.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   C   r    )ÚfindÚ_twelveZerosr   ÚProtocolErrorÚ	asNumbersÚ_fortyEightZerosr   ÚOctetStringÚmapÚ_HmacMd5__ipadÚ_HmacMd5__opadr   ÚasOctetsÚdigest)r   r   ÚwholeMsgÚlÚ	wholeHeadÚ	wholeTailÚextendedAuthKeyÚk1Úk2Úd1Úd2Úmacr   r   r   ÚauthenticateOutgoingMsg(   s    

ÿÿzHmacMd5.authenticateOutgoingMsgc                 C   sì   t |ƒdkrtjtjd‚| | ¡ ¡}|dkrt d¡‚|d |… }||d d … }|t | }| 	¡ t
 }t tdd„ || jƒ¡}	t tdd„ || jƒ¡}
t|	 ¡ | ƒ ¡ }t|
 ¡ | ƒ ¡ }|d d… }||krttjtjd‚|S )Nr   )ZerrorIndicationr   zCant locate digest in wholeMsgc                 S   r   r   r   r   r   r   r   r   i   r    z1HmacMd5.authenticateIncomingMsg.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   p   r    )Úlenr   ZStatusInformationr   ZauthenticationErrorr!   r*   r#   r"   r$   r%   r   r&   r'   r(   r)   r   r+   ZauthenticationFailure)r   r   ZauthParametersr,   r-   r.   r/   ZauthenticatedWholeMsgr0   r1   r2   r3   r4   r5   r   r   r   ÚauthenticateIncomingMsgS   s2   ÿ
ÿÿÿzHmacMd5.authenticateIncomingMsgN)Ú__name__Ú
__module__Ú__qualname__Z	serviceIDr(   r)   r   r   Úpropertyr   r6   r8   r   r   r   r   r      s    


+r   )Zhashlibr   ÚImportErrorÚnewZpyasn1.typer   Z pysnmp.proto.secmod.rfc3414.authr   Zpysnmp.proto.secmod.rfc3414r   Zpysnmp.protor   r   r&   r*   r"   r%   ZAbstractAuthenticationServicer   r   r   r   r   Ú<module>   s   
ý