ó
^†êWc           @   s€   d  Z  d d g Z d d l Z d d l m Z m Z m Z m Z d a	 d Z
 d „  Z d	 „  Z d
 d „ Z d „  Z d „  Z d S(   s5   
Create and verify jws-js format Ed25519 signatures.
t   signt   verifyiÿÿÿÿNi   (   t   urlsafe_b64decodet   urlsafe_b64encodet   nativet   binaryt   Ed25519c           C   sN   t  sJ y d d l  a  Wn' t t f k
 r? d d l m a  n Xt ƒ  n  t  S(   s&   Lazy import-and-test of ed25519 moduleiÿÿÿÿNi   (   t	   ed25519py(   t	   ed25519llt   ImportErrort   OSErrort    R   t   test(    (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyt   get_ed25519ll   s    
c   	      C   sò   t  ƒ  i t d 6i t d 6t t | j ƒ ƒ d 6d 6} t t t j | d t ƒƒ ƒ } t t t j |  d t ƒƒ ƒ } d j	 | | f ƒ } t
 j | | j ƒ } | t
 j  } t | ƒ } i i t | ƒ d 6t | ƒ d 6g d	 6t | ƒ d
 6S(   s_   Return a JWS-JS format signature given a JSON-serializable payload and 
    an Ed25519 keypair.t   algt   ktyt   vkt   jwkt	   sort_keyst   .t   headert	   signaturet
   recipientst   payload(   R   t   ALGR   R   R   R   t   jsont   dumpst   Truet   joinR   t   crypto_signt   skt   SIGNATUREBYTES(	   R   t   keypairR   t   encoded_headert   encoded_payloadt   secured_inputt   sig_msgR   t   encoded_signature(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyR       s     !!R   c         C   s   |  s t  | ƒ ‚ n  d  S(   N(   t
   ValueError(   t	   conditiont   message(    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyt
   assertTrue4   s    c         C   sõ  t  ƒ  |  d } t |  d ƒ } g  } xš| D]’} t t | ƒ d k d j | ƒ ƒ t | d ƒ } t | d ƒ } t j t t | ƒ ƒ ƒ } t | d t	 k d j | d ƒ ƒ d | d	 k rî d
 | d	 k rî | d	 d | d	 d
 <n  t | d	 d
 t	 k d j | d	 d
 ƒ ƒ t t | d	 d ƒ ƒ } d j
 | | f ƒ }	 t | ƒ }
 |
 |	 } t t j | | ƒ ƒ } | j d ƒ \ } } t | ƒ } t t | ƒ ƒ } | j t j | ƒ ƒ q. Wt | ƒ } t j t t | ƒ ƒ ƒ } | | f S(   sª   Return (decoded headers, payload) if all signatures in jwsjs are
    consistent, else raise ValueError.
    
    Caller must decide whether the keys are actually trusted.R   R   i   s   Unknown recipient key {0}R   R   R   s   Unexpected algorithm {0}R   R   s   Unexpected key type {0}R   R   (   R   R   R)   t   lent   formatR   t   loadsR   R   R   R   R   t   crypto_sign_opent   splitt   append(   t   jwsjsR   R"   t   headerst	   recipientt   ht   sR   R   R#   t   sigR$   t   verified_inputt   verified_headert   verified_payloadt   decoded_headerR   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyR   8   s6    
" 
c          C   s†   t  j ƒ  }  i d d 6} t j t j t | |  ƒ ƒ ƒ } t | ƒ | d c d 7<y t | ƒ Wn t k
 ru n Xt d ƒ ‚ d  S(   Nt	   onstartupR   R   t   xs+   No error from bad wheel.signatures payload.(	   R   t   crypto_sign_keypairR   R,   R   R    R   R&   t   RuntimeError(   t   kpR   R0   (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyR   ^   s    !
(   t   __doc__t   __all__R   t   utilR   R   R   R   t   NoneR   R   R   R    R)   R   R   (    (    (    sl   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/__init__.pyt   <module>   s   "			&