£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
l_w
                 @   s   d dl mZmZmZ d dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZ G d
d deZdS )    )absolute_importdivisionprint_functionN)UnsupportedAlgorithm_Reasons)_get_backend)HMACBackend)constant_timehmac)SHA1SHA256SHA512)InvalidToken)_generate_uric               @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )HOTPNTc             C   s   t |}t|tstdtjt|dk r:|dkr:tdt|tj	sNt
d|dk s^|dkrftdt|tttfs~t
d	|| _|| _|| _|| _d S )
Nz.Backend object does not implement HMACBackend.   Tz'Key length has to be at least 128 bits.z)Length parameter must be an integer type.      z(Length of HOTP has to be between 6 to 8.z)Algorithm must be SHA1, SHA256 or SHA512.)r   
isinstancer   r   r   ZBACKEND_MISSING_INTERFACElen
ValueErrorsixZinteger_types	TypeErrorr   r   r   _key_length
_algorithm_backend)selfkeyZlength	algorithmZbackendZenforce_key_length r    /usr/lib64/python3.6/hotp.py__init__   s"    
zHOTP.__init__c             C   s*   | j |}|d| j  }dj|| jj S )N
   z{0:0{1}})_dynamic_truncater   formatencode)r   counterZtruncated_valuehotpr    r    r!   generate0   s    
zHOTP.generatec             C   s   t j| j||stdd S )Nz#Supplied HOTP value does not match.)r	   Zbytes_eqr)   r   )r   r(   r'   r    r    r!   verify5   s    zHOTP.verifyc             C   sj   t j| j| j| j}|jtjd| |j }t	j
|t|d d@ }|||d  }tjd|d d@ S )Nz>Q         z>Ir   i)r
   ZHMACr   r   r   updatestructpackfinalizer   Z
indexbytesr   unpack)r   r'   ZctxZ
hmac_valueoffsetpr    r    r!   r$   9   s    zHOTP._dynamic_truncatec             C   s   t | d||dt|fgS )Nr(   r'   )r   int)r   Zaccount_namer'   Zissuerr    r    r!   get_provisioning_uriB   s    zHOTP.get_provisioning_uri)NT)__name__
__module____qualname__r"   r)   r*   r$   r6   r    r    r    r!   r      s
   
	r   )Z
__future__r   r   r   r/   r   Zcryptography.exceptionsr   r   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr	   r
   Z%cryptography.hazmat.primitives.hashesr   r   r   Z(cryptography.hazmat.primitives.twofactorr   Z.cryptography.hazmat.primitives.twofactor.utilsr   objectr   r    r    r    r!   <module>   s   