Python wrapper for
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 15 commits behind seanlynch:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

PyNaCl: A Python Wrapper for NaCl


This is a simple wrapper for the NaCl cryptographic library (not Google's NativeClient). It currently wraps crypto_hash_sha256, crypto_hash_sha512, crypto_randombytes, and the crypto_box, crypto_sign, crypto_secretbox, crypto_stream, crypto_auth, crypto_scalarmult and crypto_onetimeauth default primitives.


The API is a very straightforward translation of NaCl's C API. Any function that returns an error code will raise ValueError if it returns anything but zero. Output arguments are returned, with keypair functions returning 2-tuples and everything else returning strings. The wrapper handles all padding, so you can just ignore that part of NaCl's documentation.

Eventually I'll translate the documentation over, but for now look at and the NaCl documentation.


First, download NaCl. NaCl does not build with the -fPIC flag and therefore you must modify a file:

cd <location of extracted NaCl>
sed -i "s/$/ -fPIC/" okcompilers/c*

If you want the build status output printed to screen, you may also do:

sed -i "s/exec 2\?>.*//" do

You can then build NaCl with:


Once NaCl is successfully built, you can clone pynacl and run:

export NACL_DIR=<location of extracted nacl directory>
python build
sudo python install


To run the tests, just run the script "" in the distribution directory.


PyNaCl is released under version 2.0 of the Apache license.