o
    B]                     @   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 )    )sha1N)univ)base)localkey)errinderror)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   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 )HmacSha)
         r	   r   r
   
   r	   r	   r
   6   @   \   c                 C   s
   t |S N)r   ZhashPassphraseSHA)selfauthKey r   J/usr/lib/python3/dist-packages/pysnmp/proto/secmod/rfc3414/auth/hmacsha.pyhashPassphrase   s   
zHmacSha.hashPassphrasec                 C   s   t ||S r   )r   ZlocalizeKeySHA)r   r   ZsnmpEngineIDr   r   r   localizeKey    s   zHmacSha.localizeKeyc                 C   s   dS )N   r   )r   r   r   r   digestLength#   s   zHmacSha.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 )NzCant locate digest placeholderr   c                 S      | |A S r   r   xyr   r   r   <lambda>;       z1HmacSha.authenticateOutgoingMsg.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   B   r   )find_twelveZerosr   ProtocolError	asNumbers_fortyFourZerosr   OctetStringmap_HmacSha__ipad_HmacSha__opadr   asOctetsdigest)r   r   wholeMsgl	wholeHead	wholeTailextendedAuthKeyk1k2d1d2macr   r   r   authenticateOutgoingMsg(   s    

zHmacSha.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   f   r   z1HmacSha.authenticateIncomingMsg.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   m   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authenticatedWholeMsgr/   r0   r1   r2   r3   r4   r   r   r   authenticateIncomingMsgP   s2   
zHmacSha.authenticateIncomingMsgN)__name__
__module____qualname__Z	serviceIDr'   r(   r   r   propertyr   r5   r7   r   r   r   r   r      s    


(r   )Zhashlibr   ImportErrorZsha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   
