ó
ñ1Mc           @   sæ   d  Z  d d l Z d d l m Z d d l m Z d e f d „  ƒ  YZ e j e ƒ d d d „  ƒ  YZ	 d	 e	 f d
 „  ƒ  YZ
 d e	 f d „  ƒ  YZ d d „ Z d e	 f d „  ƒ  YZ d e	 f d „  ƒ  YZ d e	 f d „  ƒ  YZ d S(   sc   M2Crypto wrapper for OpenSSL BIO API.

Copyright (c) 1999-2004 Ng Pheng Siong. All rights reserved.iÿÿÿÿN(   t   bio_do_handshake(   t   StringIOt   BIOErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR      s    t   BIOc           B   sÈ   e  Z d  Z e j Z d d d d „ Z d „  Z d „  Z	 e	 Z
 d „  Z d „  Z d d „ Z d d	 „ Z d
 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s)   Abstract object interface to the BIO API.i    c         C   s1   | |  _  | |  _ | |  _ d |  _ d |  _ d  S(   Ni    (   t   biot   _pyfreet	   _close_cbt   closedt   write_closed(   t   selfR   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   __init__   s
    				c         C   s    |  j  r |  j |  j ƒ n  d  S(   N(   R   t   m2_bio_freeR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   __del__   s    	c         C   s   |  j  S(   N(   R   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   _ptr!   s    c         C   s   t  j |  j ƒ S(   N(   t   m2t
   bio_get_fdR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   fileno'   s    c         C   s   |  j  S(   N(   R	   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   readable*   s    c         C   s¨   |  j  ƒ  s t d ‚ n  | d  k ri t ƒ  } x/ t j |  j d ƒ } | sO Pn  | j | ƒ q0 | j ƒ  S| d k ry d S| d k  r‘ t	 d ‚ n t j |  j | ƒ Sd  S(   Ns   cannot readi   i    t    s   read count is negative(
   R   t   IOErrort   NoneR   R   t   bio_readR   t   writet   getvaluet
   ValueError(   R   t   sizet   buft   data(    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   read-   s    	 
i   c         C   s1   |  j  ƒ  s t d ‚ n  t j |  j | ƒ } | S(   Ns   cannot read(   R   R   R   t   bio_getsR   (   R   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   readline>   s    t   ignoredc         C   sZ   |  j  ƒ  s t d ‚ n  g  } x5 t j |  j d ƒ } | d  k rF Pn  | j | ƒ q! | S(   Ns   cannot readi   (   R   R   R   R   R   R   t   append(   R   t   sizehintt   linesR   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt	   readlinesD   s    c         C   s   |  j  o |  j S(   N(   R	   R
   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt	   writeableO   s    c         C   s+   |  j  ƒ  s t d ‚ n  t j |  j | ƒ S(   Ns   cannot write(   R&   R   R   t	   bio_writeR   (   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   R   s    c         C   s   d |  _  d  S(   Ni   (   R
   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   write_closeW   s    c         C   s   t  j |  j ƒ d  S(   N(   R   t	   bio_flushR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   flushZ   s    c         C   s   t  j |  j ƒ S(   s3   
        Sets the bio to its initial state
        (   R   t	   bio_resetR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   reset]   s    c         C   s#   d |  _  |  j r |  j ƒ  n  d  S(   Ni   (   R	   R   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   closec   s    		c         C   s   t  j |  j ƒ S(   si   
        Can the call be attempted again, or was there an error
        ie do_handshake 
       
        (   R   t   bio_should_retryR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   should_retryh   s    c         C   s   t  j |  j ƒ S(   se   
        Returns whether the cause of the condition is the bio
        should read more data
        (   R   t   bio_should_readR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   should_readp   s    c         C   s   t  j |  j ƒ S(   sf   
        Returns whether the cause of the condition is the bio
        should write more data
        (   R   t   bio_should_writeR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   should_writew   s    N(   R   R   t   __doc__R   t   bio_freeR   R   R   R   R   t   bio_ptrR   R   R   R    R%   R&   R   R(   R*   R,   R-   R/   R1   R3   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR      s(   													t   MemoryBufferc           B   sH   e  Z d  Z d d „ Z d „  Z d d „ Z e Z Z d „  Z	 e	 Z
 RS(   sw  
    Object interface to BIO_s_mem. 
    
    Empirical testing suggests that this class performs less well than cStringIO, 
    because cStringIO is implemented in C, whereas this class is implemented in 
    Python. Thus, the recommended practice is to use cStringIO for regular work and 
    convert said cStringIO object to a MemoryBuffer object only when necessary.
    c         C   sT   t  j |  ƒ t j t j ƒ  ƒ |  _ d |  _ | d  k	 rP t j |  j | ƒ n  d  S(   Ni   (	   R   R   R   t   bio_newt	   bio_s_memR   R   R   R'   (   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   ‰   s
    	c         C   s   t  j |  j ƒ S(   N(   R   t   bio_ctrl_pendingR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   __len__   s    i    c         C   sT   |  j  ƒ  s t d ‚ n  | r1 t j |  j | ƒ St j |  j t j |  j ƒ ƒ Sd  S(   Ns   cannot read(   R   R   R   R   R   R:   (   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   “   s
    c         C   s    d |  _  t j |  j d ƒ d  S(   Ni   i    (   R
   R   t   bio_set_mem_eof_returnR   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR(   ž   s    	N(   R   R   R4   R   R   R;   R   R   t   read_allR(   R-   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR7   ~   s   			
	t   Filec           B   s#   e  Z d  Z d d „ Z d „  Z RS(   sÅ   
    Object interface to BIO_s_fp. 
    
    This class interfaces Python to OpenSSL functions that expect BIO *. For
    general file manipulation in Python, use Python's builtin file object.
    i   c         C   s>   t  j |  d d ƒ| |  _ | |  _ t j | d ƒ |  _ d  S(   NR   i   i    (   R   R   t   pyfilet   close_pyfileR   t
   bio_new_fpR   (   R   R?   R@   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   ®   s    		c         C   s&   d |  _  |  j r" |  j j ƒ  n  d  S(   Ni   (   R	   R@   R?   R-   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR-   ´   s    		(   R   R   R4   R   R-   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR>   ¥   s   t   rbc         C   s   t  t |  | ƒ ƒ S(   N(   R>   t   open(   t   filenamet   mode(    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   openfile¹   s    t   IOBufferc           B   sA   e  Z d  Z e j Z e j Z d d d „ Z d „  Z	 d „  Z
 RS(   s¶   
    Object interface to BIO_f_buffer. 
    
    Its principal function is to be BIO_push()'ed on top of a BIO_f_ssl, so
    that makefile() of said underlying SSL socket works.
    t   rwbi   c         C   sw   t  j |  d | ƒt j t j ƒ  ƒ |  _ t j |  j | j ƒ  ƒ |  _ | |  _	 d | k rj d |  _
 n	 d |  _
 d  S(   NR   t   wi    i   (   R   R   R   R8   t   bio_f_buffert   iot   bio_pushR   R   t
   _under_bioR
   (   R   t	   under_bioRE   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   É   s    	c         C   s9   t  |  d d ƒ r% |  j |  j ƒ n  |  j |  j ƒ d  S(   NR   i    (   t   getattrt
   m2_bio_popR   R   RK   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   Ô   s    c         C   s   t  j |  ƒ d  S(   N(   R   R-   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR-   Ù   s    (   R   R   R4   R   t   bio_popRP   R5   R   R   R   R-   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyRG   ½   s   			t   CipherStreamc           B   sV   e  Z d  Z e j Z e j Z e j Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z RS(   s+   
    Object interface to BIO_f_cipher.
    c         C   sA   t  j |  d d ƒ| |  _ t j t j ƒ  ƒ |  _ d |  _ d  S(   NR   i   i    (   R   R   t   obioR   R8   t   bio_f_cipherR   R	   (   R   RS   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   è   s    	c         C   s#   t  |  d d ƒ s |  j ƒ  n  d  S(   NR	   i   (   RO   R-   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR   î   s    c         C   s-   |  j  |  j ƒ |  j |  j ƒ d |  _ d  S(   Ni   (   RP   R   R   R	   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR-   ò   s    c         C   s   |  j  j ƒ  d  S(   N(   RS   R(   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR(   ÷   s    c         C   so   t  t | d  ƒ } | d  k r0 t d | f ‚ n  t j |  j | ƒ  | | | ƒ t j |  j |  j j ƒ  ƒ d  S(   Ns   unknown cipher(	   RO   R   R   R   t   bio_set_cipherR   RL   RS   R   (   R   t   algot   keyt   ivt   opt   cipher(    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt
   set_cipherú   s
    (   R   R   R4   R   t   PKCS5_SALT_LENt   SALT_LENRQ   RP   R5   R   R   R   R-   R(   R[   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyRR   Ý   s   							t   SSLBioc           B   s2   e  Z d  Z d d „ Z e j d „ Z d „  Z RS(   s(   
    Object interface to BIO_f_ssl 
    i   c         C   s5   t  j |  | ƒ t j t j ƒ  ƒ |  _ d |  _ d  S(   Ni    (   R   R   R   R8   t	   bio_f_sslR   R	   (   R   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR     s    c         C   sH   d |  _  t j |  j | j | ƒ | t j k rD | j t j ƒ n  d S(   sh   
        Sets the bio to the SSL pointer which is
        contained in the connection object.  
        i    N(   R   R   t   bio_set_sslR   t   sslt   bio_nocloset   set_ssl_close_flagt	   bio_close(   R   t   connt
   close_flag(    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   set_ssl  s    	c         C   s   t  j |  j ƒ S(   s”   
        Do the handshake.
        
        Return 1 if the handshake completes
        Return 0 or a negative number if there is a problem
        (   R   R    R   (   R   (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   do_handshake  s    (   R   R   R4   R   R   Rb   Rg   Rh   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyR^     s   
(    (   R4   R   R    t   bio_do_ssl_handshaket	   cStringIOR   t	   ExceptionR   t   bio_initR   R7   R>   RF   RG   RR   R^   (    (    (    s2   /usr/lib64/python2.7/site-packages/M2Crypto/BIO.pyt   <module>   s   n' %