===============
 M2Crypto 0.13
===============

:Author: Ng Pheng Siong
:Id: $Id: README 297 2005-06-09 17:26:00Z heikki $
:Date: $Date: 2004/03/25 08:12:46 $
:Web-Site: http://sandbox.rulemaker.net/ngps/m2


M2Crypto = Python + OpenSSL + SWIG
------------------------------------

M2Crypto is a crypto and SSL toolkit for Python.

M2 stands for "me, too!" [1]_

M2Crypto comes with the following:

- **RSA**, **DSA**, **DH**, **HMACs**, **message digests**,
  **symmetric ciphers** including **AES**,

- **SSL** functionality to implement **clients and servers**.

- **Example SSL client and server programs**, which are variously
  **threading**, **forking** or based on **non-blocking socket IO**.

- **HTTPS** extensions to Python's **httplib, urllib and xmlrpclib**.

- Unforgeable HMAC'ing **AuthCookies** for **web session management**.

- **FTP/TLS** client and server.

- **S/MIME v2**.

- **ZServerSSL**: A **HTTPS server for Zope**.

- **ZSmime**: An S/MIME messenger for **Zope**.

M2Crypto is released under a very liberal BSD-style licence. See 
LICENCE for details.

This release requires Python 2.1, 2.2 or 2.3, OpenSSL 0.9.7 or later,
and SWIG 1.3.21. Earlier versions of Python may or may not
work. OpenSSL versions earlier than 0.9.7 will not work; you are
recommended to use the current version of OpenSSL. Earlier versions of
SWIG may not work with new-style Python classes.

To install, see the file INSTALL.

Note these caveats:

- Possible memory leaks, because some objects need to be freed on the
  Python side and other objects on the C side, and these may change
  between OpenSSL versions. (Multiple free's lead to crashes very
  quickly, so these should be relatively rare.)
    
- No memory locking/clearing for keys, passphrases, etc.
    
- PRNG may not be CS [2]_ nor CS [3]_.
    
- AFAIK, Python has not been subjected to the full attention of the
  Bugtraq crowd. M2Crypto's handling of active hostile input is probably
  suspect. [4]_
    

Have fun! Your feedback is welcome.


.. [1] Similar software are Marc-Andre Lemburg's mxCrypto, and two earlier
   Python interfaces to the SSL portion of SSLeay/OpenSSL. Since M2Crypto,
   yet more OpenSSL wrappers and non-OpenSSL crypto toolkits for
   Python have appeared.

.. [2] Continuous seeding.

.. [3] Cryptographically strong.

.. [4] In recent years, there have been reported vulnerabilities
   in some versions of OpenSSL and attacks against the SSL protocol
   itself.


