hash, hmac, RSA, and X.509 with an mbed TLS back end
Project description
python-mbedtls is a free cryptographic library for Python that uses mbed TLS for back end.
mbed TLS (formerly known as PolarSSL) makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.
python-mbedtls API follows the recommendations from PEP 452: API for Cryptographic Hash Functions v2.0 and PEP 272 API for Block Encryption Algorithms v1.0 and can therefore be used as a drop-in replacements to PyCrypto or Python’s hashlib and hmac
License
python-mbedtls is licensed under the MIT License (see LICENSE.txt). This enables the use of python-mbedtls in both open source and closed source projects. The MIT License is compatible with both GPL and Apache 2.0 license under which mbed TLS is distributed.
Installation
The bindings are tested with Python 2.7, 3.4, 3.5, and 3.6.
mbedtls is available on Debian. Install with:
# apt-get install libmbedtls-dev # apt-get install libpython-dev # for Python 2, or # apt-get install libpython3-dev # for Python 3
and pyton-mbedtls:
$ python -m pip install python-mbedtls
Message digest with mbedtls.hash
The mbedtls.hash module provides MD5, SHA-1, SHA-2, and RIPEMD-160 secure hashes and message digests. The API follows the recommendations from PEP 452 so that it can be used as a drop-in replacement to e.g. hashlib or PyCrypto.
Here are the examples from hashlib ported to python-mbedtls:
>>> from mbedtls import hash as hashlib >>> m = hashlib.md5() >>> m.update(b"Nobody inspects") >>> m.update(b" the spammish repetition") >>> m.digest() b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' >>> m.digest_size 16 >>> m.block_size 64
More condensed:
>>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest() 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
Using new():
>>> h = hashlib.new('ripemd160') >>> h.update(b"Nobody inspects the spammish repetition") >>> h.hexdigest() 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
HMAC algorithm with mbedtls.hmac
The mbedtls.hmac module computes HMAC. The API follows the recommendations from PEP 452 as well.
Example:
>>> from mbedtls import hmac >>> m = hmac.new(b"This is my secret key", digestmod="md5") >>> m.update(b"Nobody inspects") >>> m.update(b" the spammish repetition") >>> m.digest() b'\x9d-/rj\\\x98\x80\xb1rG\x87\x0f\xe9\xe4\xeb'
Warning:
The message is cleared after calculation of the digest. Only call mbedtls.hmac.Hmac.digest() or mbedtls.hmac.Hmac.hexdigest() once per message.
Symmetric cipher with mbedtls.cipher
The mbedtls.cipher module provides symmetric encryption. The API follows the recommendations from PEP 272 so that it can be used as a drop-in replacement to e.g. PyCrypto.
mbedtls provides the following algorithms:
Aes encryption/decryption (128, 192, and 256 bits) in ECB, CBC, CFB128, CTR, GCM, or CCM mode;
Arc4 encryption/decryption;
Blowfish encryption/decryption in ECB, CBC, CFB64, or CTR mode;
Camellia encryption/decryption (128, 192, and 256 bits) in ECB, CBC, CFB128, CTR, GCM, or CCM mode;
DES encryption/decryption in ECB, or CBC mode;
- Notes:
Tagging and padding are not wrapped.
The counter in CTR mode cannot be explicitly provided.
Example:
>>> from mbedtls import cipher >>> c = cipher.AES.new(b"My 16-bytes key.", cipher.MODE_CBC, b"CBC needs an IV.") >>> enc = c.encrypt(b"This is a super-secret message!") >>> enc b'*`k6\x98\x97=[\xdf\x7f\x88\x96\xf5\t\x19J7\x93\xb5\xe0~\t\x9e\x968m\xcd\x >>> c.decrypt(enc) b'This is a super-secret message!'
RSA Public key with mbedtls.pk
The mbedtls.pk module provides the RSA cryptosystem. This includes:
Public-private key generation and key import/export in PEM and DER formats;
Asymmetric encryption and decryption;
Message signature and verification.
Key generation, the default size is 2048 bits:
>>> from mbedtls import pk >>> rsa = pk.RSA() >>> rsa.has_private() False >>> rsa.generate() >>> rsa.key_size 256 >>> rsa.has_private() and rsa.has_public() True
Message encryption and decryption:
>>> enc = rsa.encrypt(b"secret message") >>> rsa.decrypt(enc) b"secret message"
Message signature and verification:
>>> sig = rsa.sign(b"Please sign here.") >>> rsa.verify(b"Please sign here.", sig) True >>> rsa.verify(b"Sorry, wrong message.", sig) False >>> prv, pub = rsa.to_DER() >>> other = pk.RSA() >>> other.from_DER(pub) >>> other.has_private() False >>> other.verify(b"Please sign here.", sig) True
X.509 Certificate writing and parsing with mbedtls.x509
Create new X.509 certificates:
>>> import datetime as dt >>> from pathlib import Path >>> from mbedtls.x509 import Certificate, CSR, CRL >>> now = dt.datetime.utcnow() >>> crt = Certificate( ... start=now, end=now + dt.timedelta(days=90), ... issuer="C=NL,O=PolarSSL,CN=PolarSSL Test CA", issuer_key=issuer_key, ... subject=None, subject_key=subject_key, ... md_alg=hash.sha1(), serial=None) ... >>> csr = CSR.new(subject_key, hash.sha1(), "C=NL,O=PolarSSL,CN=PolarSSL Server 1")
Call next(crt) to obtain the next certificate in a chain. The call raises StopIteration if there is no further certificate.
and load existing certificates from file:
>>> crl = CRL.from_file("ca/wp_crl.pem")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file python-mbedtls-0.9.0.tar.gz
.
File metadata
- Download URL: python-mbedtls-0.9.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaa35e773fca37b954b803bb17df8022fe88f28a53f7e9e292ffe9514a989caa |
|
MD5 | f06ac05bb5af18d4cd06eeff071d9f82 |
|
BLAKE2b-256 | d5e4b61f7dabcae1d77936789f6861476f6a4b903536d867501260a90a341832 |
File details
Details for the file python_mbedtls-0.9.0-py3.6-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9.0-py3.6-linux-x86_64.egg
- Upload date:
- Size: 2.9 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fb739ee1b144af8691759f5e4da6fd434c5ba152c47c4c40f20e2df32807a36 |
|
MD5 | d4943bef5390f46e5b008e730099b988 |
|
BLAKE2b-256 | 633d90937c20d0bbc76a2fed9d00703b9f680232649009c10ae83169df6ce6c3 |
File details
Details for the file python_mbedtls-0.9.0-py3.5-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9.0-py3.5-linux-x86_64.egg
- Upload date:
- Size: 2.8 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee17e137e6de19ff07122e4ca0953164815ed055ce877d7319c6a8198403aebd |
|
MD5 | 47f8a15a83e426d95b2a5845aeff0414 |
|
BLAKE2b-256 | f1c59d9320551bc65cb3917add73495f046119b0253559ca4cce9878a1831bfa |
File details
Details for the file python_mbedtls-0.9.0-py3.4-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9.0-py3.4-linux-x86_64.egg
- Upload date:
- Size: 2.8 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e445f52c532c05332d1f3aae329c4ab5815f4964f409f39e605d5bb38d44d235 |
|
MD5 | 30840f5b8ddbd22967c4d0d9b62da8b6 |
|
BLAKE2b-256 | aa63664429a11496f77c2a178db8a11b2ceb66e8a30a5859752fa2e5d1300163 |
File details
Details for the file python_mbedtls-0.9.0-py2.7-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9.0-py2.7-linux-x86_64.egg
- Upload date:
- Size: 2.6 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7f2af99ce08fd7ced6d5f969dc52045588b0bfd64a83dbf1628ca644bc43f03 |
|
MD5 | 2243cc19f483578a99c32d9d819b4534 |
|
BLAKE2b-256 | bd7e88397ff5c09cad261e11d74a0079403dc71972165a63173a1c02af3af683 |
File details
Details for the file python_mbedtls-0.9-py3.6-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9-py3.6-linux-x86_64.egg
- Upload date:
- Size: 2.9 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc499c6b8c85b48e7362c051b7ba224a79ae07fae5dabc1644f9df02490a015a |
|
MD5 | cf9342975098845d1b6b441a4611b1b6 |
|
BLAKE2b-256 | a223a9cc9578135443783a6085ddeef1e8584416239fdc423cf5c066160b9f23 |
File details
Details for the file python_mbedtls-0.9-py3.5-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9-py3.5-linux-x86_64.egg
- Upload date:
- Size: 2.8 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 764c85af81183741f3486b2e15aae3ce7ab59201a7f404cdba47a01097d22ac3 |
|
MD5 | 84c80f12dacdabe18ac95ffd5579ff05 |
|
BLAKE2b-256 | 68e5e4bd30d48c6ed9a94571d7a377ac81f75fc0615a23ca0795c0cc617b9807 |
File details
Details for the file python_mbedtls-0.9-py3.4-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9-py3.4-linux-x86_64.egg
- Upload date:
- Size: 2.8 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72a8c825aff0750f9d4be7760f89dd038640ee5ad1aa59ae79be62b8184ee7ac |
|
MD5 | 168f5123258acf99312fc4d754877620 |
|
BLAKE2b-256 | 53d9e8bcf70051517d224d2427751b069404b1bcdd5573e5db9a5316a6771d9c |
File details
Details for the file python_mbedtls-0.9-py2.7-linux-x86_64.egg
.
File metadata
- Download URL: python_mbedtls-0.9-py2.7-linux-x86_64.egg
- Upload date:
- Size: 2.6 MB
- Tags: Egg
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21d1272853b2655d52bba81d514205e1a9e0d4baa6dcb5e4f276a565f9b8fe7d |
|
MD5 | 5e2d1cecf8bfecc44c52c5c313ae3fbc |
|
BLAKE2b-256 | 116a4aa0b02cdf17fffb0cd64ecd652d9a9854e13bdc64f297c0e2ce00c7bc8a |