diff options
author | Micah Anderson <micah@riseup.net> | 2013-08-22 16:39:52 -0400 |
---|---|---|
committer | Micah Anderson <micah@riseup.net> | 2013-08-22 16:57:38 -0400 |
commit | 6d35b188b668c5007409e63a15e8340ed34dcfb8 (patch) | |
tree | c9dd25f3675b3b6f9b29b0786057f8a4d377bc2b /src/pycryptopp/_pycryptoppmodule.cpp | |
parent | 86a1089dc6694f58d0f3356bdf9c8fe4061421f5 (diff) | |
parent | 5e60e0e3af85f22aa0afe8bf0ecf85619afacfeb (diff) |
Merge tag 'upstream/0.6.0.12'
Upstream version 0.6.0.12
Diffstat (limited to 'src/pycryptopp/_pycryptoppmodule.cpp')
-rw-r--r-- | src/pycryptopp/_pycryptoppmodule.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/pycryptopp/_pycryptoppmodule.cpp b/src/pycryptopp/_pycryptoppmodule.cpp new file mode 100644 index 0000000..1c99817 --- /dev/null +++ b/src/pycryptopp/_pycryptoppmodule.cpp @@ -0,0 +1,72 @@ +#include <Python.h> + +#include "publickey/ecdsamodule.hpp" +#include "publickey/rsamodule.hpp" +#include "hash/sha256module.hpp" +#include "cipher/aesmodule.hpp" +#include "cipher/xsalsa20module.hpp" + +/* from Crypto++ */ +#ifdef DISABLE_EMBEDDED_CRYPTOPP +#include <cryptopp/config.h> +#else +#include <src-cryptopp/config.h> +#endif + +PyDoc_STRVAR(_pycryptopp__doc__, +"_pycryptopp -- Python wrappers for a few algorithms from Crypto++\n\ +\n\ +from pycryptopp import publickey\n\ +from pycryptopp.publickey import ecdsa\n\ +from pycryptopp.publickey import rsa\n\ +from pycryptopp import cipher\n\ +from pycryptopp.cipher import aes\n\ +from pycryptopp.cipher import xsalsa20\n\ +from pycryptopp import hash\n\ +from pycryptopp.hash import sha256"); + +static PyMethodDef _pycryptopp_functions[] = { + {"rsa_generate", reinterpret_cast<PyCFunction>(rsa_generate), METH_KEYWORDS, const_cast<char*>(rsa_generate__doc__)}, + {"rsa_create_verifying_key_from_string", reinterpret_cast<PyCFunction>(rsa_create_verifying_key_from_string), METH_KEYWORDS, const_cast<char*>(rsa_create_verifying_key_from_string__doc__)}, + {"rsa_create_signing_key_from_string", reinterpret_cast<PyCFunction>(rsa_create_signing_key_from_string), METH_KEYWORDS, const_cast<char*>(rsa_create_signing_key_from_string__doc__)}, + {NULL, NULL, 0, NULL} /* sentinel */ +}; + +#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ +#define PyMODINIT_FUNC void +#endif +PyMODINIT_FUNC +init_pycryptopp(void) { + PyObject *module; + + module = Py_InitModule3("_pycryptopp", _pycryptopp_functions, _pycryptopp__doc__); + if (!module) + return; + + PyObject* version; + + /* a tuple of (Crypto++ version, extra-version) */ + #ifndef DISABLE_EMBEDDED_CRYPTOPP + /* In the version of Crypto++ which is included in pycryptopp, there is a + symbol named `cryptopp_extra_version' which is declared (external + variable) in config.h and defined in cryptlib.cpp. Of course it is + possible that the header file we've #include'd is from the + embedded-in-pycryptopp version of Crypto++ but the dynamically linked + library that we load is from an older version which doesn't have this + symbol. In that case, the load will fail before we get this far. */ + version = Py_BuildValue("is", CRYPTOPP_VERSION, cryptopp_extra_version); + #else + version = Py_BuildValue("iO", CRYPTOPP_VERSION, Py_None); + #endif + + int succ = PyModule_AddObject(module, "cryptopp_version", version); + if (succ != 0) + return; + + + init_ecdsa(module); + init_rsa(module); + init_sha256(module); + init_aes(module); + init_xsalsa20(module); +} |