
    	                     n    S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJr   " S S\R                  5      r
g)z;Convenience class for U2F signing with local security keys.    N)errors)u2f)baseauthenticatorc                   ^    \ rS rSrSrS r\R                  R                  4S jr	S r
S rSrg)	LocalAuthenticator   zBAuthenticator wrapper around the native python u2f implementation.c                     Xl         g )Norigin)selfr   s     7lib/third_party/pyu2f/convenience/localauthenticator.py__init__LocalAuthenticator.__init__   s    K    c                 8    [         R                  " U R                  S9nU" S5        U H  nUS   nUS   n UR                  XU/5      nU R                  UR                  R                  5       R                  5       5      n
U R                  UR                   5      nU R                  UR"                  5      nU
UUUS.s  $    [        R                  " [        R                  R                  5      e! [        R                   aH    U" S5        [
        R                  R                  5         [         R                  " U R                  S9n GN,f = f! [        R                   a5  n	U	R                  [        R                  R                  :X  a   Sn	A	GMi  e Sn	A	ff = f)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'   s                r   r   LocalAuthenticator.Authenticate   sY   <''t{{;f 67($[1m5!c$$VSEB &&v'9'9'A'A'C'J'J'LMk))&*?*?@n%%f&7&78j $)!!	 ! ). //&//;;
<<= $$ <IJ	iioo''t{{;f< __ 66V__666

	s/   C1 E1AEEF$(FFFc                     g)r   T )r   s    r   IsAvailableLocalAuthenticator.IsAvailableE   s    r   c                 J    [         R                  " U5      R                  5       $ )z5Helper method to base64 encode and return str result.)base64urlsafe_b64encodedecode)r   
bytes_datas     r   r"    LocalAuthenticator._base64encodeI   s    %%j188::r   r
   N)__name__
__module____qualname____firstlineno____doc__r   sysstderrwriter   r3   r"   __static_attributes__r2   r   r   r   r      s)    J #&**"2"2$=L;r   r   )r?   r   r6   r@   pyu2fr   r   pyu2f.conveniencer   BaseAuthenticatorr   r2   r   r   <module>rG      s0    B 
  
   /2;*<< 2;r   