ó
^†êWc           @   sT   d  Z  d d l Z d d l Z d d l m Z m Z m Z d e f d „  ƒ  YZ	 d S(   s  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
iÿÿÿÿNi   (   t   nativet   load_config_pathst   save_config_patht	   WheelKeysc           B   s_   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d
 d „ Z
 d „  Z d	 „  Z RS(   i   s
   wheel.jsonc         C   s   i g  d 6g  d 6|  _  d  S(   Nt   signerst	   verifiers(   t   data(   t   self(    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   __init__*   s    c      	   C   s  xÿ t  d ƒ D]ñ } t j j t | ƒ |  j ƒ } t j j | ƒ r t | d ƒ ¦ } t j	 | ƒ |  _
 x- d D]% } | |  j
 k rn g  |  j
 | <qn qn Wd |  j
 k r¹ |  j |  j
 d <n; |  j
 d |  j k rô t d j |  j
 d |  j ƒ ƒ ‚ n  Wd  QXPq q W|  S(   Nt   wheelt   rR   R   t   schemas(   Bad wheel.json version {0}, expected {1}(   s   signerss	   verifiers(   R   t   ost   patht   joinR    t   CONFIG_NAMEt   existst   opent   jsont   loadR   t   SCHEMAt
   ValueErrort   format(   R   R   t   conft   infilet   x(    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyR   -   s     "c      	   C   s_   t  d ƒ } t j j t | ƒ |  j ƒ } t | d ƒ   } t j |  j	 | d d ƒWd  QX|  S(   NR	   s   w+t   indenti   (
   R   R   R   R   R    R   R   R   t   dumpR   (   R   R   R   t   out(    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   save@   s
    c         C   s&   |  j  d j i | d 6| d 6ƒ |  S(   s0   Start trusting a particular key for given scope.R   t   scopet   vk(   R   t   append(   R   R   R   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   trustH   s    "c         C   s&   |  j  d j i | d 6| d 6ƒ |  S(   s/   Stop trusting a particular key for given scope.R   R   R   (   R   t   remove(   R   R   R   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   untrustM   s    "c         C   se   g  |  j  d D]0 } | d | d f k r | d | d f ^ q } | j d d „  ƒ | j ƒ  | S(   s;   Return list of [(scope, trusted key), ...] for given scope.R   R   t   +R   t   keyc         S   s   |  d S(   Ni    (    (   R   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   <lambda>U   s    (   R   t   sortt   reverse(   R   R   R   R!   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   trustedR   s    D
c         C   se   g  |  j  d D]0 } | d | d f k r | d | d f ^ q } | j d d „  ƒ | j ƒ  | S(   s   Return list of signing key(s).R   R   R$   R   R%   c         S   s   |  d S(   Ni    (    (   R   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyR&   \   s    (   R   R'   R(   (   R   R   R   t   sign(    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyR   Y   s    D
c         C   s&   |  j  d j i | d 6| d 6ƒ d S(   s>   Remember verifying key vk as being valid for signing in scope.R   R   R   N(   R   R    (   R   R   R   (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt
   add_signer`   s    N(   t   __name__t
   __module__R   R   R   R   R   R!   R#   t   NoneR)   R   R+   (    (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyR   &   s   						(
   t   __doc__R   t   os.pathR   t   utilR    R   R   t   objectR   (    (    (    sh   /private/var/folders/3n/6h2rwf155rn1m71wwyxn79n80000gn/T/pip-build-IcAT_k/wheel/wheel/signatures/keys.pyt   <module>    s   