From 5e60e0e3af85f22aa0afe8bf0ecf85619afacfeb Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Thu, 22 Aug 2013 16:39:52 -0400 Subject: Imported Upstream version 0.6.0.12 --- src/pycryptopp/_pycryptoppmodule.cpp | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/pycryptopp/_pycryptoppmodule.cpp (limited to 'src/pycryptopp/_pycryptoppmodule.cpp') 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 + +#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 +#else +#include +#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(rsa_generate), METH_KEYWORDS, const_cast(rsa_generate__doc__)}, + {"rsa_create_verifying_key_from_string", reinterpret_cast(rsa_create_verifying_key_from_string), METH_KEYWORDS, const_cast(rsa_create_verifying_key_from_string__doc__)}, + {"rsa_create_signing_key_from_string", reinterpret_cast(rsa_create_signing_key_from_string), METH_KEYWORDS, const_cast(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); +} -- cgit v1.2.3