ó
/<õ\c           @` s²   d  d l  m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l	 m
 Z
 m Z m Z m Z e j e ƒ d e f d „  ƒ  Yƒ Z e j e
 ƒ d e f d „  ƒ  Yƒ Z d	 S(
   i    (   t   absolute_importt   divisiont   print_function(   t
   exceptionst   utils(   t   serialization(   t   Ed25519PrivateKeyt   Ed25519PublicKeyt   _ED25519_KEY_SIZEt   _ED25519_SIG_SIZEt   _Ed25519PublicKeyc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s   | |  _  | |  _ d  S(   N(   t   _backendt	   _evp_pkey(   t   selft   backendt   evp_pkey(    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   __init__   s    	c         C` s°   | t  j j k s$ | t  j j k ra | t  j j k	 sH | t  j j k	 rW t d ƒ ‚ n  |  j ƒ  S| t  j k r‘ | t  j j k	 r‘ t d ƒ ‚ n  |  j j	 | | |  |  j
 d  ƒ S(   Ns3   When using Raw both encoding and format must be Raws?   format must be SubjectPublicKeyInfo when encoding is PEM or DER(   R   t   Encodingt   Rawt   PublicFormatt
   ValueErrort   _raw_public_bytest   _PEM_DERt   SubjectPublicKeyInfoR   t   _public_key_bytesR   t   None(   R   t   encodingt   format(    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   public_bytes   s    
	c         C` s•   |  j  j j d t ƒ } |  j  j j d t ƒ } |  j  j j |  j | | ƒ } |  j  j | d k ƒ |  j  j | d t k ƒ |  j  j j | t ƒ S(   Ns   unsigned char []s   size_t *i   i    (	   R   t   _ffit   newR   t   _libt   EVP_PKEY_get_raw_public_keyR   t   openssl_assertt   buffer(   R   t   buft   buflent   res(    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyR   0   s    c         C` sı   |  j  j j ƒ  } |  j  j | |  j  j j k ƒ |  j  j j | |  j  j j ƒ } |  j  j j | |  j  j j |  j  j j |  j  j j |  j	 ƒ } |  j  j | d k ƒ |  j  j j
 | | t | ƒ | t | ƒ ƒ } | d k rù |  j  j ƒ  t j ‚ n  d  S(   Ni   (   R   R   t   Cryptography_EVP_MD_CTX_newR!   R   t   NULLt   gct   Cryptography_EVP_MD_CTX_freet   EVP_DigestVerifyInitR   t   EVP_DigestVerifyt   lent   _consume_errorsR   t   InvalidSignature(   R   t	   signaturet   datat
   evp_md_ctxR%   (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   verify:   s    !(   t   __name__t
   __module__R   R   R   R2   (    (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyR
      s   			
t   _Ed25519PrivateKeyc           B` s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C` s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyR   O   s    	c         C` s¤   |  j  j j d t ƒ } |  j  j j d t ƒ } |  j  j j |  j | | ƒ } |  j  j | d k ƒ |  j  j | d t k ƒ |  j  j j | ƒ } |  j  j	 | ƒ S(   Ns   unsigned char []s   size_t *i   i    (
   R   R   R   R   R   R    R   R!   R"   t   ed25519_load_public_bytes(   R   R#   R$   R%   R   (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt
   public_keyS   s    c         C` sO  |  j  j j ƒ  } |  j  j | |  j  j j k ƒ |  j  j j | |  j  j j ƒ } |  j  j j | |  j  j j |  j  j j |  j  j j |  j	 ƒ } |  j  j | d k ƒ |  j  j j
 d t ƒ } |  j  j j
 d t | ƒ ƒ } |  j  j j | | | | t | ƒ ƒ } |  j  j | d k ƒ |  j  j | d t k ƒ |  j  j j | | d ƒ S(   Ni   s   unsigned char[]s   size_t *i    (   R   R   R&   R!   R   R'   R(   R)   t   EVP_DigestSignInitR   R   R	   R,   t   EVP_DigestSignR"   (   R   R0   R1   R%   R#   R$   (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   sign^   s    c         C` sÃ   | t  j j k s$ | t  j j k rt | t  j j k	 s[ | t  j j k	 s[ t | t  j ƒ rj t d ƒ ‚ n  |  j ƒ  S| t  j	 k r¤ | t  j j
 k	 r¤ t d ƒ ‚ n  |  j j | | | |  j d  ƒ S(   Nsa   When using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryptions0   format must be PKCS8 when encoding is PEM or DER(   R   R   R   R   t   PrivateFormatt
   isinstancet   NoEncryptionR   t   _raw_private_bytesR   t   PKCS8R   t   _private_key_bytesR   R   (   R   R   R   t   encryption_algorithm(    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   private_bytesr   s    
	c         C` s•   |  j  j j d t ƒ } |  j  j j d t ƒ } |  j  j j |  j | | ƒ } |  j  j | d k ƒ |  j  j | d t k ƒ |  j  j j | t ƒ S(   Ns   unsigned char []s   size_t *i   i    (	   R   R   R   R   R   t   EVP_PKEY_get_raw_private_keyR   R!   R"   (   R   R#   R$   R%   (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyR>      s    (   R3   R4   R   R7   R:   RB   R>   (    (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyR5   M   s
   				N(   t
   __future__R    R   R   t   cryptographyR   R   t   cryptography.hazmat.primitivesR   t1   cryptography.hazmat.primitives.asymmetric.ed25519R   R   R   R	   t   register_interfacet   objectR
   R5   (    (    (    sK   lib/python2.7/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyt   <module>   s   ">