B
    @)H[ã  ã               @   s<   d Z ddlZddlZddlmZmZmZ G dd„ deƒZ	dS )a  Store and retrieve wheel signing / verifying keys.

Given a scope (a package name, + meaning "all packages", or - meaning
"no packages"), return a list of verifying keys that are trusted for that
scope.

Given a package name, return a list of (scope, key) suggested keys to sign
that package (only the verifying keys; the private signing key is stored
elsewhere).

Keys here are represented as urlsafe_b64encoded strings with no padding.

Tentative command line interface:

# list trusts
wheel trust
# trust a particular key for all
wheel trust + key
# trust key for beaglevote
wheel trust beaglevote key
# stop trusting a key for all
wheel untrust + key

# generate a key pair
wheel keygen

# import a signing key from a file
wheel import keyfile

# export a signing key
wheel export key
é    Né   )ÚnativeÚload_config_pathsÚsave_config_pathc               @   sV   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	ddd„Z
dd„ Zdd„ ZdS )Ú	WheelKeysé   z
wheel.jsonc             C   s   g g dœ| _ d S )N)ÚsignersÚ	verifiers)Údata)Úself© r   úXC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\signatures\keys.pyÚ__init__,   s    zWheelKeys.__init__c          
   C   s¼   x¶t dƒD ]ª}tj t|ƒ| j¡}tj |¡r
t|dƒ�t}t 	|¡| _
x dD ]}|| j
krLg | j
|< qLW d| j
kr€| j| j
d< n(| j
d | jkr¨td | j
d | j¡ƒ‚W d Q R X P q
W | S )NÚwheelÚr)r   r	   Zschemaz(Bad wheel.json version {0}, expected {1})r   ÚosÚpathÚjoinr   ÚCONFIG_NAMEÚexistsÚopenÚjsonÚloadr
   ÚSCHEMAÚ
ValueErrorÚformat)r   r   ÚconfÚinfileÚxr   r   r   r   /   s     


zWheelKeys.loadc          	   C   sH   t dƒ}tj t|ƒ| j¡}t|dƒ�}tj| j	|dd� W d Q R X | S )Nr   zw+r   )Úindent)
r   r   r   r   r   r   r   r   Údumpr
   )r   r   r   Úoutr   r   r   ÚsaveB   s
    zWheelKeys.savec             C   s   | j d  ||dœ¡ | S )z0Start trusting a particular key for given scope.r	   )ÚscopeÚvk)r
   Úappend)r   r#   r$   r   r   r   ÚtrustJ   s    zWheelKeys.trustc             C   s   | j d  ||dœ¡ | S )z/Stop trusting a particular key for given scope.r	   )r#   r$   )r
   Úremove)r   r#   r$   r   r   r   ÚuntrustO   s    zWheelKeys.untrustNc                s4   ‡ fdd„| j d D ƒ}|jdd„ d� | ¡  |S )z;Return list of [(scope, trusted key), ...] for given scope.c                s,   g | ]$}|d  ˆ dfkr|d  |d f‘qS )r#   ú+r$   r   )Ú.0r   )r#   r   r   ú
<listcomp>V   s    z%WheelKeys.trusted.<locals>.<listcomp>r	   c             S   s   | d S )Nr   r   )r   r   r   r   Ú<lambda>X   s    z#WheelKeys.trusted.<locals>.<lambda>)Úkey)r
   ÚsortÚreverse)r   r#   r&   r   )r#   r   ÚtrustedT   s    zWheelKeys.trustedc                s4   ‡ fdd„| j d D ƒ}|jdd„ d� | ¡  |S )zReturn list of signing key(s).c                s,   g | ]$}|d  ˆ dfkr|d  |d f‘qS )r#   r)   r$   r   )r*   r   )r#   r   r   r+   ^   s    z%WheelKeys.signers.<locals>.<listcomp>r   c             S   s   | d S )Nr   r   )r   r   r   r   r,   _   s    z#WheelKeys.signers.<locals>.<lambda>)r-   )r
   r.   r/   )r   r#   Úsignr   )r#   r   r   \   s    zWheelKeys.signersc             C   s   | j d  ||dœ¡ dS )z>Remember verifying key vk as being valid for signing in scope.r   )r#   r$   N)r
   r%   )r   r#   r$   r   r   r   Ú
add_signerc   s    zWheelKeys.add_signer)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r"   r&   r(   r0   r   r2   r   r   r   r   r   (   s   
r   )
Ú__doc__r   Úos.pathr   Úutilr   r   r   Úobjectr   r   r   r   r   Ú<module>    s   