Hlavní navigace

Knihovna M2Crypto (1)

Jakub Matys

Dnešním dnem počínaje začíná na Root.cz vycházet nový seriál, který by měl lehce navazovat na Python Cryptography Toolkit. M2Crypto je toolkitem OpenSSL a obsahuje také další šifrovací technologie. V tomto dílu si knihovnu nainstalujeme.

Knihovna M2Crypto je navržena jako toolkit OpenSSL knihovny pro Python. Propojení jazyka a SSL je provedeno pomocí nástroje SWIG. SWIG vlastně zpřístupňuje OpenSSL C API jazyku Python, druhá část knihovny poskytuje objektově orientované rozhraní pro toto API.

Knihovna podporuje šifry RSA, DSA, DH, HMACs a symetrické šifry založené na AES. Pro šifrovanou komunikaci typu klient-server je implementováno klasické rozhraní SSL. Klasické síťové moduly httplib, urllib a xmlrpclib je možné rozšířit pomocí httpslib. Je možné rovněž použít FTP/TLS klient a server. Posledním kouskem do skládačky jsou rozšíření aplikačního serveru Zope – ZServerSSL a ZSmime.

Struktura knihovny by se dala přehledně zapsat takto:

  • ASN1: wrapper pro OpenSSL ASN1 API
  • AuthCookie: bezpečné autentizační cookie
  • BIO: M2Crypto wrapper pro OpenSSL BIO API
  • callback
  • DH: wrapper pro OpenSSL DH API
  • DSA: wrapper pro OpenSSL DSA API
  • Err: wrapper pro OpenSSL Error API
  • EVP: wrapper pro OpenSSL EVP API
  • ftpslib: M2Crypto klient FTP/TLS
  • httpslib: podpora pro httplib (Python verze 1.5.2 a 2.x)
  • m2: funkce low level OpenSSL wrapperu
  • m2urllib: M2Crypto rozšíření pro urllib pro manipulaci s url adresami ‚https‘
  • m2×mlrpclib: M2Crypto rozšíření pro xmlrpclib
  • PGP: M2Crypto PGP2

    • constants
    • packet
    • PublicKey
    • PublicKeyRing
    • RSA: M2Crypto PGP2 RSA
  • Rand: wrapper pro OpenSSL PRNG
  • RC4: wrapper pro OpenSSL RC4 API
  • RSA: wrapper pro OpenSSL RSA API
  • SMIME: wrapper pro OpenSSL S/MIME API
  • SSL: M2Crypto SSL

    • cb
    • Cipher
    • Connection: M2Crypto.SSL.Con­nection
    • Context: M2Crypto.SSL.Con­text
    • Error: M2Crypto.SSL.Error
    • Session
    • ssl_dispatcher
    • SSLServer
    • timeout
  • threading: M2Crypto vlákna
  • util
  • X509: M2Crypto wrapper pro OpenSSL X509 API

Knihovna požaduje Python verze 2.x, OpenSSL 0.9.7 a SWIG 1.3.2×.

Instalace na unixovém stroji

$ unzip m2crypto-0.13.zip
$ cd m2crypto-0.13
$ python setup.py build
# python setup.py install
$ cd tests
$ python alltests.py

Instalace na Windows

Podle použitých překladačů se může instalace ubírat dvěma směry. Liší se v knihovnách OpenSSL a v příkazech při překladu.

1. MinGW gcc

Knihovny použité při tomto řešení jsou libeay32.a alibssl32.a a mohou se nalézat kdekoliv ve vaší proměnné PATH. Ke správnému překladu také potřebujete knihovnu libpython2[123].a vytvořenou z vaší verze Pythonu (viz sebsauvage.net/pyt­hon/mingw.html).

Překlad M2Crypto spustíte příkazem:

python setup.py build -cmingw32

a instalaci:

python setup.py install
cd tests
python alltests.py
2. MSVC++ nebo BC++

Pro MSVC++ používejte knihovny libeay32.lib a ssleay32.lib. Pro BC++ se používají knihovny vytvořené pomocí MSVC++, které jsou zkonvertovány programem coff2omf.exe. Můžete je nazvat např. libeay32_bc.lib assleay32_bc.lib.

Budete také potřebovat výše zmíněnou knihovnu pro importování Pythonu, kterou musíte stejným programem zkonvertovat.

Překlad pomocí prvního, resp. druhého překladače spustíte příkazy:

python setup.py build
python setup.py build -cbcpp

Instalovat můžete stejně jako výše:

python setup.py install
cd tests
python alltests.py

Instalace na Mac OS X

Soubor Makefile.osx předpokládá, že potřebné SSL knihovny(libssl.a a libcrypto.a) jsou nainstalovány v adresáři /usr/local/lib. Můžeme tedy nainstalovat OpenSSL do tohoto adresáře (i z důvodu případné kolize programů závisejících na již nainstalovaném OpenSSL, např. Apache):

./config --prefix=/usr/local --openssldir=/usr/local/openssl
make
...

Instalaci M2Crypto začneme v adresáři swig, kde zadáme příkaz:

make -f Makefile.osx

Tím jsme vytvořili rozhraní mezi M2Crypto a OpenSSL. Nyní můžeme překopírovat adresář M2Crypto do site-packages vaší verze Pythonu. Pro testování funkčnosti můžeme v adresáři tests spustit příkaz python alltests.py.

Našli jste v článku chybu?