1/*[clinic input] 2preserve 3[clinic start generated code]*/ 4 5PyDoc_STRVAR(py_blake2b_new__doc__, 6"blake2b(data=b\'\', /, *, digest_size=_blake2.blake2b.MAX_DIGEST_SIZE,\n" 7" key=b\'\', salt=b\'\', person=b\'\', fanout=1, depth=1, leaf_size=0,\n" 8" node_offset=0, node_depth=0, inner_size=0, last_node=False,\n" 9" usedforsecurity=True)\n" 10"--\n" 11"\n" 12"Return a new BLAKE2b hash object."); 13 14static PyObject * 15py_blake2b_new_impl(PyTypeObject *type, PyObject *data, int digest_size, 16 Py_buffer *key, Py_buffer *salt, Py_buffer *person, 17 int fanout, int depth, unsigned long leaf_size, 18 unsigned long long node_offset, int node_depth, 19 int inner_size, int last_node, int usedforsecurity); 20 21static PyObject * 22py_blake2b_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) 23{ 24 PyObject *return_value = NULL; 25 static const char * const _keywords[] = {"", "digest_size", "key", "salt", "person", "fanout", "depth", "leaf_size", "node_offset", "node_depth", "inner_size", "last_node", "usedforsecurity", NULL}; 26 static _PyArg_Parser _parser = {NULL, _keywords, "blake2b", 0}; 27 PyObject *argsbuf[13]; 28 PyObject * const *fastargs; 29 Py_ssize_t nargs = PyTuple_GET_SIZE(args); 30 Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0; 31 PyObject *data = NULL; 32 int digest_size = BLAKE2B_OUTBYTES; 33 Py_buffer key = {NULL, NULL}; 34 Py_buffer salt = {NULL, NULL}; 35 Py_buffer person = {NULL, NULL}; 36 int fanout = 1; 37 int depth = 1; 38 unsigned long leaf_size = 0; 39 unsigned long long node_offset = 0; 40 int node_depth = 0; 41 int inner_size = 0; 42 int last_node = 0; 43 int usedforsecurity = 1; 44 45 fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 1, 0, argsbuf); 46 if (!fastargs) { 47 goto exit; 48 } 49 if (nargs < 1) { 50 goto skip_optional_posonly; 51 } 52 noptargs--; 53 data = fastargs[0]; 54skip_optional_posonly: 55 if (!noptargs) { 56 goto skip_optional_kwonly; 57 } 58 if (fastargs[1]) { 59 digest_size = _PyLong_AsInt(fastargs[1]); 60 if (digest_size == -1 && PyErr_Occurred()) { 61 goto exit; 62 } 63 if (!--noptargs) { 64 goto skip_optional_kwonly; 65 } 66 } 67 if (fastargs[2]) { 68 if (PyObject_GetBuffer(fastargs[2], &key, PyBUF_SIMPLE) != 0) { 69 goto exit; 70 } 71 if (!PyBuffer_IsContiguous(&key, 'C')) { 72 _PyArg_BadArgument("blake2b", "argument 'key'", "contiguous buffer", fastargs[2]); 73 goto exit; 74 } 75 if (!--noptargs) { 76 goto skip_optional_kwonly; 77 } 78 } 79 if (fastargs[3]) { 80 if (PyObject_GetBuffer(fastargs[3], &salt, PyBUF_SIMPLE) != 0) { 81 goto exit; 82 } 83 if (!PyBuffer_IsContiguous(&salt, 'C')) { 84 _PyArg_BadArgument("blake2b", "argument 'salt'", "contiguous buffer", fastargs[3]); 85 goto exit; 86 } 87 if (!--noptargs) { 88 goto skip_optional_kwonly; 89 } 90 } 91 if (fastargs[4]) { 92 if (PyObject_GetBuffer(fastargs[4], &person, PyBUF_SIMPLE) != 0) { 93 goto exit; 94 } 95 if (!PyBuffer_IsContiguous(&person, 'C')) { 96 _PyArg_BadArgument("blake2b", "argument 'person'", "contiguous buffer", fastargs[4]); 97 goto exit; 98 } 99 if (!--noptargs) { 100 goto skip_optional_kwonly; 101 } 102 } 103 if (fastargs[5]) { 104 fanout = _PyLong_AsInt(fastargs[5]); 105 if (fanout == -1 && PyErr_Occurred()) { 106 goto exit; 107 } 108 if (!--noptargs) { 109 goto skip_optional_kwonly; 110 } 111 } 112 if (fastargs[6]) { 113 depth = _PyLong_AsInt(fastargs[6]); 114 if (depth == -1 && PyErr_Occurred()) { 115 goto exit; 116 } 117 if (!--noptargs) { 118 goto skip_optional_kwonly; 119 } 120 } 121 if (fastargs[7]) { 122 if (!_PyLong_UnsignedLong_Converter(fastargs[7], &leaf_size)) { 123 goto exit; 124 } 125 if (!--noptargs) { 126 goto skip_optional_kwonly; 127 } 128 } 129 if (fastargs[8]) { 130 if (!_PyLong_UnsignedLongLong_Converter(fastargs[8], &node_offset)) { 131 goto exit; 132 } 133 if (!--noptargs) { 134 goto skip_optional_kwonly; 135 } 136 } 137 if (fastargs[9]) { 138 node_depth = _PyLong_AsInt(fastargs[9]); 139 if (node_depth == -1 && PyErr_Occurred()) { 140 goto exit; 141 } 142 if (!--noptargs) { 143 goto skip_optional_kwonly; 144 } 145 } 146 if (fastargs[10]) { 147 inner_size = _PyLong_AsInt(fastargs[10]); 148 if (inner_size == -1 && PyErr_Occurred()) { 149 goto exit; 150 } 151 if (!--noptargs) { 152 goto skip_optional_kwonly; 153 } 154 } 155 if (fastargs[11]) { 156 last_node = PyObject_IsTrue(fastargs[11]); 157 if (last_node < 0) { 158 goto exit; 159 } 160 if (!--noptargs) { 161 goto skip_optional_kwonly; 162 } 163 } 164 usedforsecurity = PyObject_IsTrue(fastargs[12]); 165 if (usedforsecurity < 0) { 166 goto exit; 167 } 168skip_optional_kwonly: 169 return_value = py_blake2b_new_impl(type, data, digest_size, &key, &salt, &person, fanout, depth, leaf_size, node_offset, node_depth, inner_size, last_node, usedforsecurity); 170 171exit: 172 /* Cleanup for key */ 173 if (key.obj) { 174 PyBuffer_Release(&key); 175 } 176 /* Cleanup for salt */ 177 if (salt.obj) { 178 PyBuffer_Release(&salt); 179 } 180 /* Cleanup for person */ 181 if (person.obj) { 182 PyBuffer_Release(&person); 183 } 184 185 return return_value; 186} 187 188PyDoc_STRVAR(_blake2_blake2b_copy__doc__, 189"copy($self, /)\n" 190"--\n" 191"\n" 192"Return a copy of the hash object."); 193 194#define _BLAKE2_BLAKE2B_COPY_METHODDEF \ 195 {"copy", (PyCFunction)_blake2_blake2b_copy, METH_NOARGS, _blake2_blake2b_copy__doc__}, 196 197static PyObject * 198_blake2_blake2b_copy_impl(BLAKE2bObject *self); 199 200static PyObject * 201_blake2_blake2b_copy(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) 202{ 203 return _blake2_blake2b_copy_impl(self); 204} 205 206PyDoc_STRVAR(_blake2_blake2b_update__doc__, 207"update($self, data, /)\n" 208"--\n" 209"\n" 210"Update this hash object\'s state with the provided bytes-like object."); 211 212#define _BLAKE2_BLAKE2B_UPDATE_METHODDEF \ 213 {"update", (PyCFunction)_blake2_blake2b_update, METH_O, _blake2_blake2b_update__doc__}, 214 215PyDoc_STRVAR(_blake2_blake2b_digest__doc__, 216"digest($self, /)\n" 217"--\n" 218"\n" 219"Return the digest value as a bytes object."); 220 221#define _BLAKE2_BLAKE2B_DIGEST_METHODDEF \ 222 {"digest", (PyCFunction)_blake2_blake2b_digest, METH_NOARGS, _blake2_blake2b_digest__doc__}, 223 224static PyObject * 225_blake2_blake2b_digest_impl(BLAKE2bObject *self); 226 227static PyObject * 228_blake2_blake2b_digest(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) 229{ 230 return _blake2_blake2b_digest_impl(self); 231} 232 233PyDoc_STRVAR(_blake2_blake2b_hexdigest__doc__, 234"hexdigest($self, /)\n" 235"--\n" 236"\n" 237"Return the digest value as a string of hexadecimal digits."); 238 239#define _BLAKE2_BLAKE2B_HEXDIGEST_METHODDEF \ 240 {"hexdigest", (PyCFunction)_blake2_blake2b_hexdigest, METH_NOARGS, _blake2_blake2b_hexdigest__doc__}, 241 242static PyObject * 243_blake2_blake2b_hexdigest_impl(BLAKE2bObject *self); 244 245static PyObject * 246_blake2_blake2b_hexdigest(BLAKE2bObject *self, PyObject *Py_UNUSED(ignored)) 247{ 248 return _blake2_blake2b_hexdigest_impl(self); 249} 250/*[clinic end generated code: output=10eb47aba77f192d input=a9049054013a1b77]*/ 251