ó
L]c           @   s•   d  Z  d d l m Z d d l m Z m Z d d l m Z m Z m	 Z	 m
 Z
 d d l m Z d „  Z d „  Z d	 „  Z d
 „  Z d d d g Z d S(   s    miscellaneous zmq_utils wrappingiÿÿÿÿ(   t   EINTRi   (   t   ffit   C(   t   ZMQErrort   InterruptedSystemCallt	   _check_rct   _check_version(   t   unicodec         C   sA   t  d d ƒ t |  t ƒ r. |  j d ƒ }  n  t t j |  ƒ ƒ S(   s|   Check for zmq capability by name (e.g. 'ipc', 'curve')
    
    .. versionadded:: libzmq-4.1
    .. versionadded:: 14.1
    i   i   s   zmq.hast   utf8(   i   i   (   R   t
   isinstanceR   t   encodet   boolR   t   zmq_has(   t
   capability(    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/utils.pyt   has   s    c          C   sk   t  d d ƒ t j d ƒ }  t j d ƒ } t j |  | ƒ } t | ƒ t j |  ƒ d  t j | ƒ d  f S(   s  generate a Z85 keypair for use with zmq.CURVE security
    
    Requires libzmq (â‰¥ 4.0) to have been built with CURVE support.
    
    Returns
    -------
    (public, secret) : two bytestrings
        The public and private keypair as 40 byte z85-encoded bytestrings.
    i   i   t   curve_keypairs   char[64]i(   (   i   i   (   R   R   t   newR   t   zmq_curve_keypairR   t   buffer(   t   publict   privatet   rc(    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/utils.pyR      s    

c         C   sj   t  |  t ƒ r! |  j d ƒ }  n  t d d ƒ t j d ƒ } t j | |  ƒ } t | ƒ t j	 | ƒ d  S(   so   Compute the public key corresponding to a private key for use
    with zmq.CURVE security

    Requires libzmq (â‰¥ 4.2) to have been built with CURVE support.

    Parameters
    ----------
    private
        The private key as a 40 byte z85-encoded bytestring
    Returns
    -------
    bytestring
        The public key as a 40 byte z85-encoded bytestring.
    R   i   i   t   curve_publics   char[64]i(   (   i   i   (
   R	   R   R
   R   R   R   R   t   zmq_curve_publicR   R   (   R   R   R   (    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/utils.pyR   -   s    
c         O   sC   x< t  r> |  | Œ  } y t | ƒ Wn t k
 r9 q q XPq Wd S(   s/   make a call, retrying if interrupted with EINTRN(   t   TrueR   R   (   t   ft   argst   kwargsR   (    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/utils.pyt   _retry_sys_callE   s    	R   R   R   N(   t   __doc__t   errnoR    t   _cffiR   R   t	   zmq.errorR   R   R   R   t   zmq.utils.strtypesR   R   R   R   R   t   __all__(    (    (    s5   lib/python2.7/site-packages/zmq/backend/cffi/utils.pyt   <module>   s   "				