o
    	                     @   sV   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ G dd dej	Z
dS )z;Convenience class for U2F signing with local security keys.    N)errors)u2f)baseauthenticatorc                   @   s8   e Zd ZdZdd ZejjfddZdd Z	dd	 Z
d
S )LocalAuthenticatorzBAuthenticator wrapper around the native python u2f implementation.c                 C   s
   || _ d S )Norigin)selfr    r	   M/tmp/google-cloud-sdk/lib/third_party/pyu2f/convenience/localauthenticator.py__init__   s   
zLocalAuthenticator.__init__c                 C   s   z	t j| jd}W n tjy#   |d tj  t j| jd}Y nw |d |D ]N}|d }|d }z
||||g}W n tj	yY }	 z|	j
tj	jkrTW Y d}	~	q* d}	~	ww | |j  }
| |j}| |j}|
|||d  S t	tj	j)See base class.r   z2Please insert your security key and press enter...z Please touch your security key.
	challengekeyN)
clientDatasignatureDataapplicationId	keyHandle)r   GetLocalU2FInterfacer   r   NoDeviceFoundErrorsixmovesinputAuthenticateU2FErrorcodeDEVICE_INELIGIBLE_base64encodeclient_dataGetJsonencodesignature_data
key_handle)r   app_idchallenge_dataprint_callbackdevicechallenge_itemraw_challenger   resulter   r    r!   r	   r	   r
   r      s8   

zLocalAuthenticator.Authenticatec                 C   s   dS )r   Tr	   )r   r	   r	   r
   IsAvailableE   s   zLocalAuthenticator.IsAvailablec                 C   s   t | S )z5Helper method to base64 encode and return str result.)base64urlsafe_b64encodedecode)r   
bytes_datar	   r	   r
   r   I   s   z LocalAuthenticator._base64encodeN)__name__
__module____qualname____doc__r   sysstderrwriter   r*   r   r	   r	   r	   r
   r      s    
&r   )r2   r   r+   r3   pyu2fr   r   pyu2f.conveniencer   BaseAuthenticatorr   r	   r	   r	   r
   <module>   s   