Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(28544)

Unified Diff: Modules/_blake2/blake2module.c

Issue 26798: add BLAKE2 to hashlib
Patch Set: Created 3 years ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Modules/_blake2/blake2b_impl.c ('k') | Modules/_blake2/blake2ns.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
new file mode 100644
index 0000000000000000000000000000000000000000..e2a3d420d4eb8ef845df04943f43ba85e18b61db
--- /dev/null
+++ b/Modules/_blake2/blake2module.c
@@ -0,0 +1,105 @@
+/*
+ * Written in 2013 by Dmitry Chestnykh <dmitry@codingrobots.com>
+ * Modified for CPython by Christian Heimes <christian@python.org>
+ *
+ * To the extent possible under law, the author have dedicated all
+ * copyright and related and neighboring rights to this software to
+ * the public domain worldwide. This software is distributed without
+ * any warranty. http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+#include "Python.h"
+
+#include "impl/blake2.h"
+
+extern PyTypeObject PyBlake2_BLAKE2bType;
+extern PyTypeObject PyBlake2_BLAKE2sType;
+
+
+PyDoc_STRVAR(blake2mod__doc__,
+"_blake2b provides BLAKE2b for hashlib\n"
+);
+
+
+static struct PyMethodDef blake2mod_functions[] = {
+ {NULL, NULL}
+};
+
+static struct PyModuleDef blake2_module = {
+ PyModuleDef_HEAD_INIT,
+ "_blake2",
+ blake2mod__doc__,
+ -1,
+ blake2mod_functions,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+#define ADD_INT(d, name, value) do { \
+ PyObject *x = PyLong_FromLong(value); \
+ if (!x) { \
+ Py_DECREF(m); \
+ return NULL; \
+ } \
+ if (PyDict_SetItemString(d, name, x) < 0) { \
+ Py_DECREF(m); \
+ return NULL; \
+ } \
+ Py_DECREF(x); \
+} while(0)
+
+
+PyMODINIT_FUNC
+PyInit__blake2(void)
+{
+ PyObject *m;
+ PyObject *d;
+
+ m = PyModule_Create(&blake2_module);
+ if (m == NULL)
+ return NULL;
+
+ /* BLAKE2b */
+ Py_TYPE(&PyBlake2_BLAKE2bType) = &PyType_Type;
+ if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) {
+ return NULL;
+ }
+
+ Py_INCREF(&PyBlake2_BLAKE2bType);
+ PyModule_AddObject(m, "blake2b", (PyObject *)&PyBlake2_BLAKE2bType);
+
+ d = PyBlake2_BLAKE2bType.tp_dict;
+ ADD_INT(d, "SALT_SIZE", BLAKE2B_SALTBYTES);
+ ADD_INT(d, "PERSON_SIZE", BLAKE2B_PERSONALBYTES);
+ ADD_INT(d, "MAX_KEY_SIZE", BLAKE2B_KEYBYTES);
+ ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
+
+ PyModule_AddIntConstant(m, "BLAKE2B_SALT_SIZE", BLAKE2B_SALTBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2B_PERSON_SIZE", BLAKE2B_PERSONALBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2B_MAX_KEY_SIZE", BLAKE2B_KEYBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
+
+ /* BLAKE2s */
+ Py_TYPE(&PyBlake2_BLAKE2sType) = &PyType_Type;
+ if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) {
+ return NULL;
+ }
+
+ Py_INCREF(&PyBlake2_BLAKE2sType);
+ PyModule_AddObject(m, "blake2s", (PyObject *)&PyBlake2_BLAKE2sType);
+
+ d = PyBlake2_BLAKE2sType.tp_dict;
+ ADD_INT(d, "SALT_SIZE", BLAKE2S_SALTBYTES);
+ ADD_INT(d, "PERSON_SIZE", BLAKE2S_PERSONALBYTES);
+ ADD_INT(d, "MAX_KEY_SIZE", BLAKE2S_KEYBYTES);
+ ADD_INT(d, "MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES);
+
+ PyModule_AddIntConstant(m, "BLAKE2S_SALT_SIZE", BLAKE2S_SALTBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2S_PERSON_SIZE", BLAKE2S_PERSONALBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2S_MAX_KEY_SIZE", BLAKE2S_KEYBYTES);
+ PyModule_AddIntConstant(m, "BLAKE2S_MAX_DIGEST_SIZE", BLAKE2S_OUTBYTES);
+
+ return m;
+}
« no previous file with comments | « Modules/_blake2/blake2b_impl.c ('k') | Modules/_blake2/blake2ns.h » ('j') | no next file with comments »

RSS Feeds Recent Issues | This issue
This is Rietveld 894c83f36cb7+