ó
ñ1Mc           @   s|  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z e j Z e j Z e j	 Z	 e j
 Z
 e j Z e j Z e j Z e j Z e j Z e j Z e j Z e j Z e j Z d e f d „  ƒ  YZ e j e ƒ d d d „  ƒ  YZ d „  Z d „  Z d	 „  Z d
 „  Z d d d „  ƒ  YZ d e f d „  ƒ  YZ e j e ƒ d d d „  ƒ  YZ d „  Z  d „  Z! d S(   sf   M2Crypto wrapper for OpenSSL S/MIME API.

Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved.iÿÿÿÿNt   PKCS7_Errorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR       s    t   PKCS7c           B   s\   e  Z e j Z d d  d „ Z d „  Z d „  Z d  d „ Z	 d „  Z
 d „  Z d  d „ Z RS(	   i    c         C   s=   | d  k	 r! | |  _ | |  _ n t j ƒ  |  _ d |  _ d  S(   Ni   (   t   Nonet   pkcs7t   _pyfreet   m2t	   pkcs7_new(   t   selfR   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   __init__   s
    	c         C   s)   t  |  d d ƒ r% |  j |  j ƒ n  d  S(   NR   i    (   t   getattrt   m2_pkcs7_freeR   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   __del__'   s    c         C   s   |  j  S(   N(   R   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   _ptr+   s    c         C   s*   | r t  j |  j ƒ St  j |  j ƒ Sd  S(   N(   R   t   pkcs7_type_snR   t   pkcs7_type_nid(   R	   t	   text_name(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   type.   s    c         C   s   t  j |  j | j ƒ  ƒ S(   N(   R   t   pkcs7_write_bioR   R   (   R	   t   bio(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   write4   s    c         C   s   t  j |  j | j ƒ  ƒ S(   N(   R   t   pkcs7_write_bio_derR   R   (   R	   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt	   write_der7   s    c         C   s%   t  j t j |  j | j | ƒ d ƒ S(   Ni   (   t   X509t
   X509_StackR   t   pkcs7_get0_signersR   t   stack(   R	   t   certst   flags(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   get0_signers:   s    N(   R   R   R   t
   pkcs7_freeR   R   R
   R   R   R   R   R   R   (    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR      s   					c         C   sˆ   t  j |  d ƒ } | d  k r6 t j t j ƒ  ƒ ‚ n  z t  j | ƒ } Wd  t  j | ƒ X| d  k r{ t	 t j ƒ  ƒ ‚ n  t
 | d ƒ S(   Nt   ri   (   R   t   bio_new_fileR   t   BIOt   BIOErrort   Errt	   get_errort   pkcs7_read_biot   bio_freeR    R   (   t   p7fileR   t   p7_ptr(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt
   load_pkcs7?   s    c         C   sC   t  j |  j ƒ  ƒ } | d  k r6 t t j ƒ  ƒ ‚ n  t | d ƒ S(   Ni   (   R   R&   R   R   R    R$   R%   R   (   t   p7_bioR)   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   load_pkcs7_bioN   s    c         C   sÃ   t  j |  d ƒ } | d  k r6 t j t j ƒ  ƒ ‚ n  z t  j | ƒ \ } } Wd  t  j | ƒ X| d  k r t	 t j ƒ  ƒ ‚ n  | d  k r  t
 | d ƒ d  f St
 | d ƒ t j | d ƒ f Sd  S(   NR    i   (   R   R!   R   R"   R#   R$   R%   t   smime_read_pkcs7R'   t   SMIME_ErrorR   (   R(   R   R)   t   bio_ptr(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   smime_load_pkcs7U   s    c         C   s~   t  j |  j ƒ  ƒ \ } } | d  k r< t t j ƒ  ƒ ‚ n  | d  k r[ t | d ƒ d  f St | d ƒ t j | d ƒ f Sd  S(   Ni   (	   R   R-   R   R   R.   R$   R%   R   R"   (   R+   R)   R/   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   smime_load_pkcs7_biog   s    t   Cipherc           B   s    e  Z d  Z d „  Z d „  Z RS(   sW   
    Object interface to EVP_CIPHER without all the frills of M2Crypto.EVP.Cipher.
    c         C   s@   t  t | d  ƒ } | d  k r0 t d | f ‚ n  | ƒ  |  _ d  S(   Ns   unknown cipher(   R   R   R   t
   ValueErrort   cipher(   R	   t   algoR4   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR
   w   s    c         C   s   |  j  S(   N(   R4   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR   }   s    (   R   R   t   __doc__R
   R   (    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR2   q   s   	R.   c           B   s   e  Z RS(    (   R   R   (    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR.      s    t   SMIMEc           B   s­   e  Z d e j d  „ Z d e j d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 d
 „ Z d	 d „ Z d	 d „ Z d d	 d „ Z d d	 d „ Z RS(   c         C   s@   | d  k r | } n  t j | | ƒ |  _ t j | ƒ |  _ d  S(   N(   R   t   EVPt   load_keyt   pkeyR   t	   load_certt   x509(   R	   t   keyfilet   certfilet   callback(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR9   †   s    	c         C   s@   | d  k r | } n  t j | | ƒ |  _ t j | ƒ |  _ d  S(   N(   R   R8   t   load_key_bioR:   R   t   load_cert_bioR<   (   R	   t   keybiot   certbioR?   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR@   Œ   s    	c         C   s   | |  _  d  S(   N(   t
   x509_stack(   R	   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   set_x509_stack’   s    c         C   s   | |  _  d  S(   N(   t
   x509_store(   R	   t   store(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   set_x509_store–   s    c         C   s   | |  _  d  S(   N(   R4   (   R	   R4   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt
   set_cipherš   s    c         C   s   |  `  |  ` d  S(   N(   R:   R<   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt	   unset_keyž   s    c         C   s
   |  `  d  S(   N(   RD   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   unset_x509_stack¢   s    c         C   s
   |  `  d  S(   N(   RF   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   unset_x509_store¥   s    c         C   s
   |  `  d  S(   N(   R4   (   R	   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   unset_cipher¨   s    i    c         C   s”   t  |  d ƒ s t d ‚ n  t  |  d ƒ s6 t d ‚ n  t j |  j j ƒ  | j ƒ  |  j j ƒ  | ƒ } | d  k r‡ t t j	 ƒ  ƒ ‚ n  t
 | d ƒ S(   NR4   s   no cipher: use set_cipher()RD   s(   no recipient certs: use set_x509_stack()i   (   t   hasattrR.   R   t   pkcs7_encryptRD   R   R4   R   R$   R%   R   (   R	   t   data_bioR   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   encrypt«   s    0c         C   s‹   t  |  d ƒ s t d ‚ n  t  |  d ƒ s6 t d ‚ n  t j | j ƒ  |  j j ƒ  |  j j ƒ  | ƒ } | d  k r‡ t t j	 ƒ  ƒ ‚ n  | S(   NR:   s   no private key: use load_key()R<   s,   no certificate: load_key() used incorrectly?(
   RN   R.   R   t   pkcs7_decryptR   R:   R<   R   R$   R%   (   R	   R   R   t   blob(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   decryptµ   s    0c         C   sö   t  |  d ƒ s t d ‚ n  t  |  d ƒ r” t j |  j j ƒ  |  j j ƒ  |  j j ƒ  | j ƒ  | ƒ } | d  k r‡ t t	 j
 ƒ  ƒ ‚ n  t | d ƒ St j |  j j ƒ  |  j j ƒ  | j ƒ  | ƒ } | d  k rå t t	 j
 ƒ  ƒ ‚ n  t | d ƒ Sd  S(   NR:   s   no private key: use load_key()RD   i   (   RN   R.   R   t   pkcs7_sign1R<   R   R:   RD   R   R$   R%   R   t   pkcs7_sign0(   R	   RP   R   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   sign¿   s    c         C   sÓ   t  |  d ƒ s t d ‚ n  t  |  d ƒ s6 t d ‚ n  | j ƒ  } | d  k r{ t j | |  j j ƒ  |  j j ƒ  | ƒ } n3 t j | |  j j ƒ  |  j j ƒ  | j ƒ  | ƒ } | d  k rÏ t t	 j
 ƒ  ƒ ‚ n  | S(   NRD   s%   no signer certs: use set_x509_stack()RF   s(   no x509 cert store: use set_x509_store()(   RN   R.   R   R   R   t   pkcs7_verify0RD   RF   t   pkcs7_verify1R$   R%   (   R	   R   RP   R   t   p7RS   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   verifyÏ   s    -3c         C   sW   | d  k r+ t j | j ƒ  | j ƒ  | ƒ St j | j ƒ  | j ƒ  | j ƒ  | ƒ Sd  S(   N(   R   R   t   smime_write_pkcs7R   t   smime_write_pkcs7_multi(   R	   t   out_bioR   RP   R   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR   Þ   s    N(   R   R   R   t   utilt   passphrase_callbackR9   R@   RE   RH   RI   RJ   RK   RL   RM   RQ   RT   RW   R[   R   (    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyR7   …   s   							

c         C   sY   t  j |  ƒ } t  j ƒ  } t j | j ƒ  | j ƒ  ƒ rC | j ƒ  St t j ƒ  ƒ ‚ d  S(   N(	   R"   t   MemoryBufferR   t   smime_crlf_copyR   t   readR.   R$   R%   (   t   textt   bio_int   bio_out(    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt	   text_crlfæ   s
    
c         C   sD   t  j ƒ  } t j |  j ƒ  | j ƒ  ƒ r. | St t j ƒ  ƒ ‚ d  S(   N(   R"   Ra   R   Rb   R   R.   R$   R%   (   Re   Rf   (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   text_crlf_bioï   s    (    (    (    ("   R6   R"   R8   R   R$   R_   R   t
   PKCS7_TEXTt   PKCS7_NOCERTSt   PKCS7_NOSIGSt   PKCS7_NOCHAINt   PKCS7_NOINTERNt   PKCS7_NOVERIFYt   PKCS7_DETACHEDt   PKCS7_BINARYt   PKCS7_NOATTRt   PKCS7_SIGNEDt   PKCS7_ENVELOPEDt   PKCS7_SIGNED_ENVELOPEDt
   PKCS7_DATAt	   ExceptionR    t
   pkcs7_initR   R*   R,   R0   R1   R2   R.   t
   smime_initR7   Rg   Rh   (    (    (    s4   /usr/lib64/python2.7/site-packages/M2Crypto/SMIME.pyt   <module>   s8   <													$				
a		