B
    @)H[¶  ã               @   sb   d Z ddlZddlmZmZmZmZ ddgZdadZ	dd	„ Z
d
d„ Zddd„Zdd„ Zdd„ ZdS )z5
Create and verify jws-js format Ed25519 signatures.
é    Né   )Úurlsafe_b64decodeÚurlsafe_b64encodeÚnativeÚbinaryÚsignÚverifyZEd25519c            	   C   s@   t s<yddl a W n$ ttfk
r4   ddlma  Y nX tƒ  t S )z&Lazy import-and-test of ed25519 moduler   Né   )Ú	ed25519py)Ú	ed25519llÚImportErrorÚOSErrorÚ r
   Útest© r   r   ú\C:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\signatures\__init__.pyÚget_ed25519ll   s    r   c       	      C   sœ   t ƒ  tttt|jƒƒdœdœ}tttj|dd�ƒƒ}tttj| dd�ƒƒ}d ||f¡}t	 
||j¡}|dt	j… }t|ƒ}t|ƒt|ƒdœgt|ƒdœS )	z^Return a JWS-JS format signature given a JSON-serializable payload and
    an Ed25519 keypair.)ÚktyÚvk)ÚalgÚjwkT)Ú	sort_keysó   .N)ÚheaderÚ	signature)Ú
recipientsÚpayload)r   ÚALGr   r   r   r   ÚjsonÚdumpsÚjoinr   Zcrypto_signÚskZSIGNATUREBYTES)	r   Zkeypairr   Zencoded_headerÚencoded_payloadÚsecured_inputÚsig_msgr   Zencoded_signaturer   r   r   r      s    r   c             C   s   | st |ƒ‚d S )N)Ú
ValueError)Ú	conditionÚmessager   r   r   Ú
assertTrue7   s    r(   c             C   st  t ƒ  | d }t| d ƒ}g }�x0|D �]&}tt|ƒdkd |¡ƒ t|d ƒ}t|d ƒ}t tt|ƒƒ¡}t|d t	kd |d ¡ƒ d|d	 kr¶d
|d	 kr¶|d	 d |d	 d
< t|d	 d
 t	kd |d	 d
 ¡ƒ tt|d	 d ƒƒ}d 
||f¡}	t|ƒ}
|
|	 }tt ||¡ƒ}| d¡\}}t|ƒ}tt|ƒƒ}| t |¡¡ q&W t|ƒ}t tt|ƒƒ¡}||fS )z¦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   r   zUnknown recipient key {0}r   r   r   zUnexpected algorithm {0}r   r   zUnexpected key type {0}r   r   Ú.)r   r   r(   ÚlenÚformatr   Úloadsr   r   r   r    r   Zcrypto_sign_openÚsplitÚappend)Újwsjsr   r"   ÚheadersZ	recipientÚhÚsr   r   r#   Úsigr$   Zverified_inputZverified_headerZverified_payloadZdecoded_headerr   r   r   r   r   <   s6    c              C   sl   t  ¡ } ddi}t t t|| ƒ¡¡}t|ƒ |d  d7  < yt|ƒ W n tk
r^   Y n
X tdƒ‚d S )Nr   Z	onstartupr   Úxz+No error from bad wheel.signatures payload.)	r   Zcrypto_sign_keypairr   r,   r   r   r   r%   ÚRuntimeError)Zkpr   r/   r   r   r   r   c   s    r   )r   )Ú__doc__r   Úutilr   r   r   r   Ú__all__r   r   r   r   r(   r   r   r   r   r   r   Ú<module>   s   
'