• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4 
5 PyDoc_STRVAR(EVP_copy__doc__,
6 "copy($self, /)\n"
7 "--\n"
8 "\n"
9 "Return a copy of the hash object.");
10 
11 #define EVP_COPY_METHODDEF    \
12     {"copy", (PyCFunction)EVP_copy, METH_NOARGS, EVP_copy__doc__},
13 
14 static PyObject *
15 EVP_copy_impl(EVPobject *self);
16 
17 static PyObject *
EVP_copy(EVPobject * self,PyObject * Py_UNUSED (ignored))18 EVP_copy(EVPobject *self, PyObject *Py_UNUSED(ignored))
19 {
20     return EVP_copy_impl(self);
21 }
22 
23 PyDoc_STRVAR(EVP_digest__doc__,
24 "digest($self, /)\n"
25 "--\n"
26 "\n"
27 "Return the digest value as a bytes object.");
28 
29 #define EVP_DIGEST_METHODDEF    \
30     {"digest", (PyCFunction)EVP_digest, METH_NOARGS, EVP_digest__doc__},
31 
32 static PyObject *
33 EVP_digest_impl(EVPobject *self);
34 
35 static PyObject *
EVP_digest(EVPobject * self,PyObject * Py_UNUSED (ignored))36 EVP_digest(EVPobject *self, PyObject *Py_UNUSED(ignored))
37 {
38     return EVP_digest_impl(self);
39 }
40 
41 PyDoc_STRVAR(EVP_hexdigest__doc__,
42 "hexdigest($self, /)\n"
43 "--\n"
44 "\n"
45 "Return the digest value as a string of hexadecimal digits.");
46 
47 #define EVP_HEXDIGEST_METHODDEF    \
48     {"hexdigest", (PyCFunction)EVP_hexdigest, METH_NOARGS, EVP_hexdigest__doc__},
49 
50 static PyObject *
51 EVP_hexdigest_impl(EVPobject *self);
52 
53 static PyObject *
EVP_hexdigest(EVPobject * self,PyObject * Py_UNUSED (ignored))54 EVP_hexdigest(EVPobject *self, PyObject *Py_UNUSED(ignored))
55 {
56     return EVP_hexdigest_impl(self);
57 }
58 
59 PyDoc_STRVAR(EVP_update__doc__,
60 "update($self, obj, /)\n"
61 "--\n"
62 "\n"
63 "Update this hash object\'s state with the provided string.");
64 
65 #define EVP_UPDATE_METHODDEF    \
66     {"update", (PyCFunction)EVP_update, METH_O, EVP_update__doc__},
67 
68 #if defined(PY_OPENSSL_HAS_SHAKE)
69 
70 PyDoc_STRVAR(EVPXOF_digest__doc__,
71 "digest($self, /, length)\n"
72 "--\n"
73 "\n"
74 "Return the digest value as a bytes object.");
75 
76 #define EVPXOF_DIGEST_METHODDEF    \
77     {"digest", (PyCFunction)(void(*)(void))EVPXOF_digest, METH_FASTCALL|METH_KEYWORDS, EVPXOF_digest__doc__},
78 
79 static PyObject *
80 EVPXOF_digest_impl(EVPobject *self, Py_ssize_t length);
81 
82 static PyObject *
EVPXOF_digest(EVPobject * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)83 EVPXOF_digest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
84 {
85     PyObject *return_value = NULL;
86     static const char * const _keywords[] = {"length", NULL};
87     static _PyArg_Parser _parser = {NULL, _keywords, "digest", 0};
88     PyObject *argsbuf[1];
89     Py_ssize_t length;
90 
91     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
92     if (!args) {
93         goto exit;
94     }
95     {
96         Py_ssize_t ival = -1;
97         PyObject *iobj = _PyNumber_Index(args[0]);
98         if (iobj != NULL) {
99             ival = PyLong_AsSsize_t(iobj);
100             Py_DECREF(iobj);
101         }
102         if (ival == -1 && PyErr_Occurred()) {
103             goto exit;
104         }
105         length = ival;
106     }
107     return_value = EVPXOF_digest_impl(self, length);
108 
109 exit:
110     return return_value;
111 }
112 
113 #endif /* defined(PY_OPENSSL_HAS_SHAKE) */
114 
115 #if defined(PY_OPENSSL_HAS_SHAKE)
116 
117 PyDoc_STRVAR(EVPXOF_hexdigest__doc__,
118 "hexdigest($self, /, length)\n"
119 "--\n"
120 "\n"
121 "Return the digest value as a string of hexadecimal digits.");
122 
123 #define EVPXOF_HEXDIGEST_METHODDEF    \
124     {"hexdigest", (PyCFunction)(void(*)(void))EVPXOF_hexdigest, METH_FASTCALL|METH_KEYWORDS, EVPXOF_hexdigest__doc__},
125 
126 static PyObject *
127 EVPXOF_hexdigest_impl(EVPobject *self, Py_ssize_t length);
128 
129 static PyObject *
EVPXOF_hexdigest(EVPobject * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)130 EVPXOF_hexdigest(EVPobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
131 {
132     PyObject *return_value = NULL;
133     static const char * const _keywords[] = {"length", NULL};
134     static _PyArg_Parser _parser = {NULL, _keywords, "hexdigest", 0};
135     PyObject *argsbuf[1];
136     Py_ssize_t length;
137 
138     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
139     if (!args) {
140         goto exit;
141     }
142     {
143         Py_ssize_t ival = -1;
144         PyObject *iobj = _PyNumber_Index(args[0]);
145         if (iobj != NULL) {
146             ival = PyLong_AsSsize_t(iobj);
147             Py_DECREF(iobj);
148         }
149         if (ival == -1 && PyErr_Occurred()) {
150             goto exit;
151         }
152         length = ival;
153     }
154     return_value = EVPXOF_hexdigest_impl(self, length);
155 
156 exit:
157     return return_value;
158 }
159 
160 #endif /* defined(PY_OPENSSL_HAS_SHAKE) */
161 
162 PyDoc_STRVAR(EVP_new__doc__,
163 "new($module, /, name, string=b\'\', *, usedforsecurity=True)\n"
164 "--\n"
165 "\n"
166 "Return a new hash object using the named algorithm.\n"
167 "\n"
168 "An optional string argument may be provided and will be\n"
169 "automatically hashed.\n"
170 "\n"
171 "The MD5 and SHA1 algorithms are always supported.");
172 
173 #define EVP_NEW_METHODDEF    \
174     {"new", (PyCFunction)(void(*)(void))EVP_new, METH_FASTCALL|METH_KEYWORDS, EVP_new__doc__},
175 
176 static PyObject *
177 EVP_new_impl(PyObject *module, PyObject *name_obj, PyObject *data_obj,
178              int usedforsecurity);
179 
180 static PyObject *
EVP_new(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)181 EVP_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
182 {
183     PyObject *return_value = NULL;
184     static const char * const _keywords[] = {"name", "string", "usedforsecurity", NULL};
185     static _PyArg_Parser _parser = {NULL, _keywords, "new", 0};
186     PyObject *argsbuf[3];
187     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
188     PyObject *name_obj;
189     PyObject *data_obj = NULL;
190     int usedforsecurity = 1;
191 
192     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
193     if (!args) {
194         goto exit;
195     }
196     name_obj = args[0];
197     if (!noptargs) {
198         goto skip_optional_pos;
199     }
200     if (args[1]) {
201         data_obj = args[1];
202         if (!--noptargs) {
203             goto skip_optional_pos;
204         }
205     }
206 skip_optional_pos:
207     if (!noptargs) {
208         goto skip_optional_kwonly;
209     }
210     usedforsecurity = PyObject_IsTrue(args[2]);
211     if (usedforsecurity < 0) {
212         goto exit;
213     }
214 skip_optional_kwonly:
215     return_value = EVP_new_impl(module, name_obj, data_obj, usedforsecurity);
216 
217 exit:
218     return return_value;
219 }
220 
221 PyDoc_STRVAR(_hashlib_openssl_md5__doc__,
222 "openssl_md5($module, /, string=b\'\', *, usedforsecurity=True)\n"
223 "--\n"
224 "\n"
225 "Returns a md5 hash object; optionally initialized with a string");
226 
227 #define _HASHLIB_OPENSSL_MD5_METHODDEF    \
228     {"openssl_md5", (PyCFunction)(void(*)(void))_hashlib_openssl_md5, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_md5__doc__},
229 
230 static PyObject *
231 _hashlib_openssl_md5_impl(PyObject *module, PyObject *data_obj,
232                           int usedforsecurity);
233 
234 static PyObject *
_hashlib_openssl_md5(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)235 _hashlib_openssl_md5(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
236 {
237     PyObject *return_value = NULL;
238     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
239     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_md5", 0};
240     PyObject *argsbuf[2];
241     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
242     PyObject *data_obj = NULL;
243     int usedforsecurity = 1;
244 
245     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
246     if (!args) {
247         goto exit;
248     }
249     if (!noptargs) {
250         goto skip_optional_pos;
251     }
252     if (args[0]) {
253         data_obj = args[0];
254         if (!--noptargs) {
255             goto skip_optional_pos;
256         }
257     }
258 skip_optional_pos:
259     if (!noptargs) {
260         goto skip_optional_kwonly;
261     }
262     usedforsecurity = PyObject_IsTrue(args[1]);
263     if (usedforsecurity < 0) {
264         goto exit;
265     }
266 skip_optional_kwonly:
267     return_value = _hashlib_openssl_md5_impl(module, data_obj, usedforsecurity);
268 
269 exit:
270     return return_value;
271 }
272 
273 PyDoc_STRVAR(_hashlib_openssl_sha1__doc__,
274 "openssl_sha1($module, /, string=b\'\', *, usedforsecurity=True)\n"
275 "--\n"
276 "\n"
277 "Returns a sha1 hash object; optionally initialized with a string");
278 
279 #define _HASHLIB_OPENSSL_SHA1_METHODDEF    \
280     {"openssl_sha1", (PyCFunction)(void(*)(void))_hashlib_openssl_sha1, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha1__doc__},
281 
282 static PyObject *
283 _hashlib_openssl_sha1_impl(PyObject *module, PyObject *data_obj,
284                            int usedforsecurity);
285 
286 static PyObject *
_hashlib_openssl_sha1(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)287 _hashlib_openssl_sha1(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
288 {
289     PyObject *return_value = NULL;
290     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
291     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha1", 0};
292     PyObject *argsbuf[2];
293     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
294     PyObject *data_obj = NULL;
295     int usedforsecurity = 1;
296 
297     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
298     if (!args) {
299         goto exit;
300     }
301     if (!noptargs) {
302         goto skip_optional_pos;
303     }
304     if (args[0]) {
305         data_obj = args[0];
306         if (!--noptargs) {
307             goto skip_optional_pos;
308         }
309     }
310 skip_optional_pos:
311     if (!noptargs) {
312         goto skip_optional_kwonly;
313     }
314     usedforsecurity = PyObject_IsTrue(args[1]);
315     if (usedforsecurity < 0) {
316         goto exit;
317     }
318 skip_optional_kwonly:
319     return_value = _hashlib_openssl_sha1_impl(module, data_obj, usedforsecurity);
320 
321 exit:
322     return return_value;
323 }
324 
325 PyDoc_STRVAR(_hashlib_openssl_sha224__doc__,
326 "openssl_sha224($module, /, string=b\'\', *, usedforsecurity=True)\n"
327 "--\n"
328 "\n"
329 "Returns a sha224 hash object; optionally initialized with a string");
330 
331 #define _HASHLIB_OPENSSL_SHA224_METHODDEF    \
332     {"openssl_sha224", (PyCFunction)(void(*)(void))_hashlib_openssl_sha224, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha224__doc__},
333 
334 static PyObject *
335 _hashlib_openssl_sha224_impl(PyObject *module, PyObject *data_obj,
336                              int usedforsecurity);
337 
338 static PyObject *
_hashlib_openssl_sha224(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)339 _hashlib_openssl_sha224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
340 {
341     PyObject *return_value = NULL;
342     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
343     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha224", 0};
344     PyObject *argsbuf[2];
345     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
346     PyObject *data_obj = NULL;
347     int usedforsecurity = 1;
348 
349     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
350     if (!args) {
351         goto exit;
352     }
353     if (!noptargs) {
354         goto skip_optional_pos;
355     }
356     if (args[0]) {
357         data_obj = args[0];
358         if (!--noptargs) {
359             goto skip_optional_pos;
360         }
361     }
362 skip_optional_pos:
363     if (!noptargs) {
364         goto skip_optional_kwonly;
365     }
366     usedforsecurity = PyObject_IsTrue(args[1]);
367     if (usedforsecurity < 0) {
368         goto exit;
369     }
370 skip_optional_kwonly:
371     return_value = _hashlib_openssl_sha224_impl(module, data_obj, usedforsecurity);
372 
373 exit:
374     return return_value;
375 }
376 
377 PyDoc_STRVAR(_hashlib_openssl_sha256__doc__,
378 "openssl_sha256($module, /, string=b\'\', *, usedforsecurity=True)\n"
379 "--\n"
380 "\n"
381 "Returns a sha256 hash object; optionally initialized with a string");
382 
383 #define _HASHLIB_OPENSSL_SHA256_METHODDEF    \
384     {"openssl_sha256", (PyCFunction)(void(*)(void))_hashlib_openssl_sha256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha256__doc__},
385 
386 static PyObject *
387 _hashlib_openssl_sha256_impl(PyObject *module, PyObject *data_obj,
388                              int usedforsecurity);
389 
390 static PyObject *
_hashlib_openssl_sha256(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)391 _hashlib_openssl_sha256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
392 {
393     PyObject *return_value = NULL;
394     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
395     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha256", 0};
396     PyObject *argsbuf[2];
397     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
398     PyObject *data_obj = NULL;
399     int usedforsecurity = 1;
400 
401     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
402     if (!args) {
403         goto exit;
404     }
405     if (!noptargs) {
406         goto skip_optional_pos;
407     }
408     if (args[0]) {
409         data_obj = args[0];
410         if (!--noptargs) {
411             goto skip_optional_pos;
412         }
413     }
414 skip_optional_pos:
415     if (!noptargs) {
416         goto skip_optional_kwonly;
417     }
418     usedforsecurity = PyObject_IsTrue(args[1]);
419     if (usedforsecurity < 0) {
420         goto exit;
421     }
422 skip_optional_kwonly:
423     return_value = _hashlib_openssl_sha256_impl(module, data_obj, usedforsecurity);
424 
425 exit:
426     return return_value;
427 }
428 
429 PyDoc_STRVAR(_hashlib_openssl_sha384__doc__,
430 "openssl_sha384($module, /, string=b\'\', *, usedforsecurity=True)\n"
431 "--\n"
432 "\n"
433 "Returns a sha384 hash object; optionally initialized with a string");
434 
435 #define _HASHLIB_OPENSSL_SHA384_METHODDEF    \
436     {"openssl_sha384", (PyCFunction)(void(*)(void))_hashlib_openssl_sha384, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha384__doc__},
437 
438 static PyObject *
439 _hashlib_openssl_sha384_impl(PyObject *module, PyObject *data_obj,
440                              int usedforsecurity);
441 
442 static PyObject *
_hashlib_openssl_sha384(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)443 _hashlib_openssl_sha384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
444 {
445     PyObject *return_value = NULL;
446     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
447     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha384", 0};
448     PyObject *argsbuf[2];
449     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
450     PyObject *data_obj = NULL;
451     int usedforsecurity = 1;
452 
453     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
454     if (!args) {
455         goto exit;
456     }
457     if (!noptargs) {
458         goto skip_optional_pos;
459     }
460     if (args[0]) {
461         data_obj = args[0];
462         if (!--noptargs) {
463             goto skip_optional_pos;
464         }
465     }
466 skip_optional_pos:
467     if (!noptargs) {
468         goto skip_optional_kwonly;
469     }
470     usedforsecurity = PyObject_IsTrue(args[1]);
471     if (usedforsecurity < 0) {
472         goto exit;
473     }
474 skip_optional_kwonly:
475     return_value = _hashlib_openssl_sha384_impl(module, data_obj, usedforsecurity);
476 
477 exit:
478     return return_value;
479 }
480 
481 PyDoc_STRVAR(_hashlib_openssl_sha512__doc__,
482 "openssl_sha512($module, /, string=b\'\', *, usedforsecurity=True)\n"
483 "--\n"
484 "\n"
485 "Returns a sha512 hash object; optionally initialized with a string");
486 
487 #define _HASHLIB_OPENSSL_SHA512_METHODDEF    \
488     {"openssl_sha512", (PyCFunction)(void(*)(void))_hashlib_openssl_sha512, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha512__doc__},
489 
490 static PyObject *
491 _hashlib_openssl_sha512_impl(PyObject *module, PyObject *data_obj,
492                              int usedforsecurity);
493 
494 static PyObject *
_hashlib_openssl_sha512(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)495 _hashlib_openssl_sha512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
496 {
497     PyObject *return_value = NULL;
498     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
499     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha512", 0};
500     PyObject *argsbuf[2];
501     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
502     PyObject *data_obj = NULL;
503     int usedforsecurity = 1;
504 
505     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
506     if (!args) {
507         goto exit;
508     }
509     if (!noptargs) {
510         goto skip_optional_pos;
511     }
512     if (args[0]) {
513         data_obj = args[0];
514         if (!--noptargs) {
515             goto skip_optional_pos;
516         }
517     }
518 skip_optional_pos:
519     if (!noptargs) {
520         goto skip_optional_kwonly;
521     }
522     usedforsecurity = PyObject_IsTrue(args[1]);
523     if (usedforsecurity < 0) {
524         goto exit;
525     }
526 skip_optional_kwonly:
527     return_value = _hashlib_openssl_sha512_impl(module, data_obj, usedforsecurity);
528 
529 exit:
530     return return_value;
531 }
532 
533 #if defined(PY_OPENSSL_HAS_SHA3)
534 
535 PyDoc_STRVAR(_hashlib_openssl_sha3_224__doc__,
536 "openssl_sha3_224($module, /, string=b\'\', *, usedforsecurity=True)\n"
537 "--\n"
538 "\n"
539 "Returns a sha3-224 hash object; optionally initialized with a string");
540 
541 #define _HASHLIB_OPENSSL_SHA3_224_METHODDEF    \
542     {"openssl_sha3_224", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_224, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_224__doc__},
543 
544 static PyObject *
545 _hashlib_openssl_sha3_224_impl(PyObject *module, PyObject *data_obj,
546                                int usedforsecurity);
547 
548 static PyObject *
_hashlib_openssl_sha3_224(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)549 _hashlib_openssl_sha3_224(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
550 {
551     PyObject *return_value = NULL;
552     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
553     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_224", 0};
554     PyObject *argsbuf[2];
555     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
556     PyObject *data_obj = NULL;
557     int usedforsecurity = 1;
558 
559     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
560     if (!args) {
561         goto exit;
562     }
563     if (!noptargs) {
564         goto skip_optional_pos;
565     }
566     if (args[0]) {
567         data_obj = args[0];
568         if (!--noptargs) {
569             goto skip_optional_pos;
570         }
571     }
572 skip_optional_pos:
573     if (!noptargs) {
574         goto skip_optional_kwonly;
575     }
576     usedforsecurity = PyObject_IsTrue(args[1]);
577     if (usedforsecurity < 0) {
578         goto exit;
579     }
580 skip_optional_kwonly:
581     return_value = _hashlib_openssl_sha3_224_impl(module, data_obj, usedforsecurity);
582 
583 exit:
584     return return_value;
585 }
586 
587 #endif /* defined(PY_OPENSSL_HAS_SHA3) */
588 
589 #if defined(PY_OPENSSL_HAS_SHA3)
590 
591 PyDoc_STRVAR(_hashlib_openssl_sha3_256__doc__,
592 "openssl_sha3_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
593 "--\n"
594 "\n"
595 "Returns a sha3-256 hash object; optionally initialized with a string");
596 
597 #define _HASHLIB_OPENSSL_SHA3_256_METHODDEF    \
598     {"openssl_sha3_256", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_256__doc__},
599 
600 static PyObject *
601 _hashlib_openssl_sha3_256_impl(PyObject *module, PyObject *data_obj,
602                                int usedforsecurity);
603 
604 static PyObject *
_hashlib_openssl_sha3_256(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)605 _hashlib_openssl_sha3_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
606 {
607     PyObject *return_value = NULL;
608     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
609     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_256", 0};
610     PyObject *argsbuf[2];
611     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
612     PyObject *data_obj = NULL;
613     int usedforsecurity = 1;
614 
615     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
616     if (!args) {
617         goto exit;
618     }
619     if (!noptargs) {
620         goto skip_optional_pos;
621     }
622     if (args[0]) {
623         data_obj = args[0];
624         if (!--noptargs) {
625             goto skip_optional_pos;
626         }
627     }
628 skip_optional_pos:
629     if (!noptargs) {
630         goto skip_optional_kwonly;
631     }
632     usedforsecurity = PyObject_IsTrue(args[1]);
633     if (usedforsecurity < 0) {
634         goto exit;
635     }
636 skip_optional_kwonly:
637     return_value = _hashlib_openssl_sha3_256_impl(module, data_obj, usedforsecurity);
638 
639 exit:
640     return return_value;
641 }
642 
643 #endif /* defined(PY_OPENSSL_HAS_SHA3) */
644 
645 #if defined(PY_OPENSSL_HAS_SHA3)
646 
647 PyDoc_STRVAR(_hashlib_openssl_sha3_384__doc__,
648 "openssl_sha3_384($module, /, string=b\'\', *, usedforsecurity=True)\n"
649 "--\n"
650 "\n"
651 "Returns a sha3-384 hash object; optionally initialized with a string");
652 
653 #define _HASHLIB_OPENSSL_SHA3_384_METHODDEF    \
654     {"openssl_sha3_384", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_384, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_384__doc__},
655 
656 static PyObject *
657 _hashlib_openssl_sha3_384_impl(PyObject *module, PyObject *data_obj,
658                                int usedforsecurity);
659 
660 static PyObject *
_hashlib_openssl_sha3_384(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)661 _hashlib_openssl_sha3_384(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
662 {
663     PyObject *return_value = NULL;
664     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
665     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_384", 0};
666     PyObject *argsbuf[2];
667     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
668     PyObject *data_obj = NULL;
669     int usedforsecurity = 1;
670 
671     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
672     if (!args) {
673         goto exit;
674     }
675     if (!noptargs) {
676         goto skip_optional_pos;
677     }
678     if (args[0]) {
679         data_obj = args[0];
680         if (!--noptargs) {
681             goto skip_optional_pos;
682         }
683     }
684 skip_optional_pos:
685     if (!noptargs) {
686         goto skip_optional_kwonly;
687     }
688     usedforsecurity = PyObject_IsTrue(args[1]);
689     if (usedforsecurity < 0) {
690         goto exit;
691     }
692 skip_optional_kwonly:
693     return_value = _hashlib_openssl_sha3_384_impl(module, data_obj, usedforsecurity);
694 
695 exit:
696     return return_value;
697 }
698 
699 #endif /* defined(PY_OPENSSL_HAS_SHA3) */
700 
701 #if defined(PY_OPENSSL_HAS_SHA3)
702 
703 PyDoc_STRVAR(_hashlib_openssl_sha3_512__doc__,
704 "openssl_sha3_512($module, /, string=b\'\', *, usedforsecurity=True)\n"
705 "--\n"
706 "\n"
707 "Returns a sha3-512 hash object; optionally initialized with a string");
708 
709 #define _HASHLIB_OPENSSL_SHA3_512_METHODDEF    \
710     {"openssl_sha3_512", (PyCFunction)(void(*)(void))_hashlib_openssl_sha3_512, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_sha3_512__doc__},
711 
712 static PyObject *
713 _hashlib_openssl_sha3_512_impl(PyObject *module, PyObject *data_obj,
714                                int usedforsecurity);
715 
716 static PyObject *
_hashlib_openssl_sha3_512(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)717 _hashlib_openssl_sha3_512(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
718 {
719     PyObject *return_value = NULL;
720     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
721     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_sha3_512", 0};
722     PyObject *argsbuf[2];
723     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
724     PyObject *data_obj = NULL;
725     int usedforsecurity = 1;
726 
727     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
728     if (!args) {
729         goto exit;
730     }
731     if (!noptargs) {
732         goto skip_optional_pos;
733     }
734     if (args[0]) {
735         data_obj = args[0];
736         if (!--noptargs) {
737             goto skip_optional_pos;
738         }
739     }
740 skip_optional_pos:
741     if (!noptargs) {
742         goto skip_optional_kwonly;
743     }
744     usedforsecurity = PyObject_IsTrue(args[1]);
745     if (usedforsecurity < 0) {
746         goto exit;
747     }
748 skip_optional_kwonly:
749     return_value = _hashlib_openssl_sha3_512_impl(module, data_obj, usedforsecurity);
750 
751 exit:
752     return return_value;
753 }
754 
755 #endif /* defined(PY_OPENSSL_HAS_SHA3) */
756 
757 #if defined(PY_OPENSSL_HAS_SHAKE)
758 
759 PyDoc_STRVAR(_hashlib_openssl_shake_128__doc__,
760 "openssl_shake_128($module, /, string=b\'\', *, usedforsecurity=True)\n"
761 "--\n"
762 "\n"
763 "Returns a shake-128 variable hash object; optionally initialized with a string");
764 
765 #define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF    \
766     {"openssl_shake_128", (PyCFunction)(void(*)(void))_hashlib_openssl_shake_128, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_128__doc__},
767 
768 static PyObject *
769 _hashlib_openssl_shake_128_impl(PyObject *module, PyObject *data_obj,
770                                 int usedforsecurity);
771 
772 static PyObject *
_hashlib_openssl_shake_128(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)773 _hashlib_openssl_shake_128(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
774 {
775     PyObject *return_value = NULL;
776     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
777     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_128", 0};
778     PyObject *argsbuf[2];
779     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
780     PyObject *data_obj = NULL;
781     int usedforsecurity = 1;
782 
783     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
784     if (!args) {
785         goto exit;
786     }
787     if (!noptargs) {
788         goto skip_optional_pos;
789     }
790     if (args[0]) {
791         data_obj = args[0];
792         if (!--noptargs) {
793             goto skip_optional_pos;
794         }
795     }
796 skip_optional_pos:
797     if (!noptargs) {
798         goto skip_optional_kwonly;
799     }
800     usedforsecurity = PyObject_IsTrue(args[1]);
801     if (usedforsecurity < 0) {
802         goto exit;
803     }
804 skip_optional_kwonly:
805     return_value = _hashlib_openssl_shake_128_impl(module, data_obj, usedforsecurity);
806 
807 exit:
808     return return_value;
809 }
810 
811 #endif /* defined(PY_OPENSSL_HAS_SHAKE) */
812 
813 #if defined(PY_OPENSSL_HAS_SHAKE)
814 
815 PyDoc_STRVAR(_hashlib_openssl_shake_256__doc__,
816 "openssl_shake_256($module, /, string=b\'\', *, usedforsecurity=True)\n"
817 "--\n"
818 "\n"
819 "Returns a shake-256 variable hash object; optionally initialized with a string");
820 
821 #define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF    \
822     {"openssl_shake_256", (PyCFunction)(void(*)(void))_hashlib_openssl_shake_256, METH_FASTCALL|METH_KEYWORDS, _hashlib_openssl_shake_256__doc__},
823 
824 static PyObject *
825 _hashlib_openssl_shake_256_impl(PyObject *module, PyObject *data_obj,
826                                 int usedforsecurity);
827 
828 static PyObject *
_hashlib_openssl_shake_256(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)829 _hashlib_openssl_shake_256(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
830 {
831     PyObject *return_value = NULL;
832     static const char * const _keywords[] = {"string", "usedforsecurity", NULL};
833     static _PyArg_Parser _parser = {NULL, _keywords, "openssl_shake_256", 0};
834     PyObject *argsbuf[2];
835     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
836     PyObject *data_obj = NULL;
837     int usedforsecurity = 1;
838 
839     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 1, 0, argsbuf);
840     if (!args) {
841         goto exit;
842     }
843     if (!noptargs) {
844         goto skip_optional_pos;
845     }
846     if (args[0]) {
847         data_obj = args[0];
848         if (!--noptargs) {
849             goto skip_optional_pos;
850         }
851     }
852 skip_optional_pos:
853     if (!noptargs) {
854         goto skip_optional_kwonly;
855     }
856     usedforsecurity = PyObject_IsTrue(args[1]);
857     if (usedforsecurity < 0) {
858         goto exit;
859     }
860 skip_optional_kwonly:
861     return_value = _hashlib_openssl_shake_256_impl(module, data_obj, usedforsecurity);
862 
863 exit:
864     return return_value;
865 }
866 
867 #endif /* defined(PY_OPENSSL_HAS_SHAKE) */
868 
869 PyDoc_STRVAR(pbkdf2_hmac__doc__,
870 "pbkdf2_hmac($module, /, hash_name, password, salt, iterations,\n"
871 "            dklen=None)\n"
872 "--\n"
873 "\n"
874 "Password based key derivation function 2 (PKCS #5 v2.0) with HMAC as pseudorandom function.");
875 
876 #define PBKDF2_HMAC_METHODDEF    \
877     {"pbkdf2_hmac", (PyCFunction)(void(*)(void))pbkdf2_hmac, METH_FASTCALL|METH_KEYWORDS, pbkdf2_hmac__doc__},
878 
879 static PyObject *
880 pbkdf2_hmac_impl(PyObject *module, const char *hash_name,
881                  Py_buffer *password, Py_buffer *salt, long iterations,
882                  PyObject *dklen_obj);
883 
884 static PyObject *
pbkdf2_hmac(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)885 pbkdf2_hmac(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
886 {
887     PyObject *return_value = NULL;
888     static const char * const _keywords[] = {"hash_name", "password", "salt", "iterations", "dklen", NULL};
889     static _PyArg_Parser _parser = {NULL, _keywords, "pbkdf2_hmac", 0};
890     PyObject *argsbuf[5];
891     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
892     const char *hash_name;
893     Py_buffer password = {NULL, NULL};
894     Py_buffer salt = {NULL, NULL};
895     long iterations;
896     PyObject *dklen_obj = Py_None;
897 
898     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 5, 0, argsbuf);
899     if (!args) {
900         goto exit;
901     }
902     if (!PyUnicode_Check(args[0])) {
903         _PyArg_BadArgument("pbkdf2_hmac", "argument 'hash_name'", "str", args[0]);
904         goto exit;
905     }
906     Py_ssize_t hash_name_length;
907     hash_name = PyUnicode_AsUTF8AndSize(args[0], &hash_name_length);
908     if (hash_name == NULL) {
909         goto exit;
910     }
911     if (strlen(hash_name) != (size_t)hash_name_length) {
912         PyErr_SetString(PyExc_ValueError, "embedded null character");
913         goto exit;
914     }
915     if (PyObject_GetBuffer(args[1], &password, PyBUF_SIMPLE) != 0) {
916         goto exit;
917     }
918     if (!PyBuffer_IsContiguous(&password, 'C')) {
919         _PyArg_BadArgument("pbkdf2_hmac", "argument 'password'", "contiguous buffer", args[1]);
920         goto exit;
921     }
922     if (PyObject_GetBuffer(args[2], &salt, PyBUF_SIMPLE) != 0) {
923         goto exit;
924     }
925     if (!PyBuffer_IsContiguous(&salt, 'C')) {
926         _PyArg_BadArgument("pbkdf2_hmac", "argument 'salt'", "contiguous buffer", args[2]);
927         goto exit;
928     }
929     iterations = PyLong_AsLong(args[3]);
930     if (iterations == -1 && PyErr_Occurred()) {
931         goto exit;
932     }
933     if (!noptargs) {
934         goto skip_optional_pos;
935     }
936     dklen_obj = args[4];
937 skip_optional_pos:
938     return_value = pbkdf2_hmac_impl(module, hash_name, &password, &salt, iterations, dklen_obj);
939 
940 exit:
941     /* Cleanup for password */
942     if (password.obj) {
943        PyBuffer_Release(&password);
944     }
945     /* Cleanup for salt */
946     if (salt.obj) {
947        PyBuffer_Release(&salt);
948     }
949 
950     return return_value;
951 }
952 
953 #if defined(PY_OPENSSL_HAS_SCRYPT)
954 
955 PyDoc_STRVAR(_hashlib_scrypt__doc__,
956 "scrypt($module, /, password, *, salt=None, n=None, r=None, p=None,\n"
957 "       maxmem=0, dklen=64)\n"
958 "--\n"
959 "\n"
960 "scrypt password-based key derivation function.");
961 
962 #define _HASHLIB_SCRYPT_METHODDEF    \
963     {"scrypt", (PyCFunction)(void(*)(void))_hashlib_scrypt, METH_FASTCALL|METH_KEYWORDS, _hashlib_scrypt__doc__},
964 
965 static PyObject *
966 _hashlib_scrypt_impl(PyObject *module, Py_buffer *password, Py_buffer *salt,
967                      PyObject *n_obj, PyObject *r_obj, PyObject *p_obj,
968                      long maxmem, long dklen);
969 
970 static PyObject *
_hashlib_scrypt(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)971 _hashlib_scrypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
972 {
973     PyObject *return_value = NULL;
974     static const char * const _keywords[] = {"password", "salt", "n", "r", "p", "maxmem", "dklen", NULL};
975     static _PyArg_Parser _parser = {NULL, _keywords, "scrypt", 0};
976     PyObject *argsbuf[7];
977     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
978     Py_buffer password = {NULL, NULL};
979     Py_buffer salt = {NULL, NULL};
980     PyObject *n_obj = Py_None;
981     PyObject *r_obj = Py_None;
982     PyObject *p_obj = Py_None;
983     long maxmem = 0;
984     long dklen = 64;
985 
986     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
987     if (!args) {
988         goto exit;
989     }
990     if (PyObject_GetBuffer(args[0], &password, PyBUF_SIMPLE) != 0) {
991         goto exit;
992     }
993     if (!PyBuffer_IsContiguous(&password, 'C')) {
994         _PyArg_BadArgument("scrypt", "argument 'password'", "contiguous buffer", args[0]);
995         goto exit;
996     }
997     if (!noptargs) {
998         goto skip_optional_kwonly;
999     }
1000     if (args[1]) {
1001         if (PyObject_GetBuffer(args[1], &salt, PyBUF_SIMPLE) != 0) {
1002             goto exit;
1003         }
1004         if (!PyBuffer_IsContiguous(&salt, 'C')) {
1005             _PyArg_BadArgument("scrypt", "argument 'salt'", "contiguous buffer", args[1]);
1006             goto exit;
1007         }
1008         if (!--noptargs) {
1009             goto skip_optional_kwonly;
1010         }
1011     }
1012     if (args[2]) {
1013         if (!PyLong_Check(args[2])) {
1014             _PyArg_BadArgument("scrypt", "argument 'n'", "int", args[2]);
1015             goto exit;
1016         }
1017         n_obj = args[2];
1018         if (!--noptargs) {
1019             goto skip_optional_kwonly;
1020         }
1021     }
1022     if (args[3]) {
1023         if (!PyLong_Check(args[3])) {
1024             _PyArg_BadArgument("scrypt", "argument 'r'", "int", args[3]);
1025             goto exit;
1026         }
1027         r_obj = args[3];
1028         if (!--noptargs) {
1029             goto skip_optional_kwonly;
1030         }
1031     }
1032     if (args[4]) {
1033         if (!PyLong_Check(args[4])) {
1034             _PyArg_BadArgument("scrypt", "argument 'p'", "int", args[4]);
1035             goto exit;
1036         }
1037         p_obj = args[4];
1038         if (!--noptargs) {
1039             goto skip_optional_kwonly;
1040         }
1041     }
1042     if (args[5]) {
1043         maxmem = PyLong_AsLong(args[5]);
1044         if (maxmem == -1 && PyErr_Occurred()) {
1045             goto exit;
1046         }
1047         if (!--noptargs) {
1048             goto skip_optional_kwonly;
1049         }
1050     }
1051     dklen = PyLong_AsLong(args[6]);
1052     if (dklen == -1 && PyErr_Occurred()) {
1053         goto exit;
1054     }
1055 skip_optional_kwonly:
1056     return_value = _hashlib_scrypt_impl(module, &password, &salt, n_obj, r_obj, p_obj, maxmem, dklen);
1057 
1058 exit:
1059     /* Cleanup for password */
1060     if (password.obj) {
1061        PyBuffer_Release(&password);
1062     }
1063     /* Cleanup for salt */
1064     if (salt.obj) {
1065        PyBuffer_Release(&salt);
1066     }
1067 
1068     return return_value;
1069 }
1070 
1071 #endif /* defined(PY_OPENSSL_HAS_SCRYPT) */
1072 
1073 PyDoc_STRVAR(_hashlib_hmac_singleshot__doc__,
1074 "hmac_digest($module, /, key, msg, digest)\n"
1075 "--\n"
1076 "\n"
1077 "Single-shot HMAC.");
1078 
1079 #define _HASHLIB_HMAC_SINGLESHOT_METHODDEF    \
1080     {"hmac_digest", (PyCFunction)(void(*)(void))_hashlib_hmac_singleshot, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_singleshot__doc__},
1081 
1082 static PyObject *
1083 _hashlib_hmac_singleshot_impl(PyObject *module, Py_buffer *key,
1084                               Py_buffer *msg, PyObject *digest);
1085 
1086 static PyObject *
_hashlib_hmac_singleshot(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1087 _hashlib_hmac_singleshot(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1088 {
1089     PyObject *return_value = NULL;
1090     static const char * const _keywords[] = {"key", "msg", "digest", NULL};
1091     static _PyArg_Parser _parser = {NULL, _keywords, "hmac_digest", 0};
1092     PyObject *argsbuf[3];
1093     Py_buffer key = {NULL, NULL};
1094     Py_buffer msg = {NULL, NULL};
1095     PyObject *digest;
1096 
1097     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 3, 0, argsbuf);
1098     if (!args) {
1099         goto exit;
1100     }
1101     if (PyObject_GetBuffer(args[0], &key, PyBUF_SIMPLE) != 0) {
1102         goto exit;
1103     }
1104     if (!PyBuffer_IsContiguous(&key, 'C')) {
1105         _PyArg_BadArgument("hmac_digest", "argument 'key'", "contiguous buffer", args[0]);
1106         goto exit;
1107     }
1108     if (PyObject_GetBuffer(args[1], &msg, PyBUF_SIMPLE) != 0) {
1109         goto exit;
1110     }
1111     if (!PyBuffer_IsContiguous(&msg, 'C')) {
1112         _PyArg_BadArgument("hmac_digest", "argument 'msg'", "contiguous buffer", args[1]);
1113         goto exit;
1114     }
1115     digest = args[2];
1116     return_value = _hashlib_hmac_singleshot_impl(module, &key, &msg, digest);
1117 
1118 exit:
1119     /* Cleanup for key */
1120     if (key.obj) {
1121        PyBuffer_Release(&key);
1122     }
1123     /* Cleanup for msg */
1124     if (msg.obj) {
1125        PyBuffer_Release(&msg);
1126     }
1127 
1128     return return_value;
1129 }
1130 
1131 PyDoc_STRVAR(_hashlib_hmac_new__doc__,
1132 "hmac_new($module, /, key, msg=b\'\', digestmod=None)\n"
1133 "--\n"
1134 "\n"
1135 "Return a new hmac object.");
1136 
1137 #define _HASHLIB_HMAC_NEW_METHODDEF    \
1138     {"hmac_new", (PyCFunction)(void(*)(void))_hashlib_hmac_new, METH_FASTCALL|METH_KEYWORDS, _hashlib_hmac_new__doc__},
1139 
1140 static PyObject *
1141 _hashlib_hmac_new_impl(PyObject *module, Py_buffer *key, PyObject *msg_obj,
1142                        PyObject *digestmod);
1143 
1144 static PyObject *
_hashlib_hmac_new(PyObject * module,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1145 _hashlib_hmac_new(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1146 {
1147     PyObject *return_value = NULL;
1148     static const char * const _keywords[] = {"key", "msg", "digestmod", NULL};
1149     static _PyArg_Parser _parser = {NULL, _keywords, "hmac_new", 0};
1150     PyObject *argsbuf[3];
1151     Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
1152     Py_buffer key = {NULL, NULL};
1153     PyObject *msg_obj = NULL;
1154     PyObject *digestmod = NULL;
1155 
1156     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 3, 0, argsbuf);
1157     if (!args) {
1158         goto exit;
1159     }
1160     if (PyObject_GetBuffer(args[0], &key, PyBUF_SIMPLE) != 0) {
1161         goto exit;
1162     }
1163     if (!PyBuffer_IsContiguous(&key, 'C')) {
1164         _PyArg_BadArgument("hmac_new", "argument 'key'", "contiguous buffer", args[0]);
1165         goto exit;
1166     }
1167     if (!noptargs) {
1168         goto skip_optional_pos;
1169     }
1170     if (args[1]) {
1171         msg_obj = args[1];
1172         if (!--noptargs) {
1173             goto skip_optional_pos;
1174         }
1175     }
1176     digestmod = args[2];
1177 skip_optional_pos:
1178     return_value = _hashlib_hmac_new_impl(module, &key, msg_obj, digestmod);
1179 
1180 exit:
1181     /* Cleanup for key */
1182     if (key.obj) {
1183        PyBuffer_Release(&key);
1184     }
1185 
1186     return return_value;
1187 }
1188 
1189 PyDoc_STRVAR(_hashlib_HMAC_copy__doc__,
1190 "copy($self, /)\n"
1191 "--\n"
1192 "\n"
1193 "Return a copy (\"clone\") of the HMAC object.");
1194 
1195 #define _HASHLIB_HMAC_COPY_METHODDEF    \
1196     {"copy", (PyCFunction)_hashlib_HMAC_copy, METH_NOARGS, _hashlib_HMAC_copy__doc__},
1197 
1198 static PyObject *
1199 _hashlib_HMAC_copy_impl(HMACobject *self);
1200 
1201 static PyObject *
_hashlib_HMAC_copy(HMACobject * self,PyObject * Py_UNUSED (ignored))1202 _hashlib_HMAC_copy(HMACobject *self, PyObject *Py_UNUSED(ignored))
1203 {
1204     return _hashlib_HMAC_copy_impl(self);
1205 }
1206 
1207 PyDoc_STRVAR(_hashlib_HMAC_update__doc__,
1208 "update($self, /, msg)\n"
1209 "--\n"
1210 "\n"
1211 "Update the HMAC object with msg.");
1212 
1213 #define _HASHLIB_HMAC_UPDATE_METHODDEF    \
1214     {"update", (PyCFunction)(void(*)(void))_hashlib_HMAC_update, METH_FASTCALL|METH_KEYWORDS, _hashlib_HMAC_update__doc__},
1215 
1216 static PyObject *
1217 _hashlib_HMAC_update_impl(HMACobject *self, PyObject *msg);
1218 
1219 static PyObject *
_hashlib_HMAC_update(HMACobject * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)1220 _hashlib_HMAC_update(HMACobject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
1221 {
1222     PyObject *return_value = NULL;
1223     static const char * const _keywords[] = {"msg", NULL};
1224     static _PyArg_Parser _parser = {NULL, _keywords, "update", 0};
1225     PyObject *argsbuf[1];
1226     PyObject *msg;
1227 
1228     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
1229     if (!args) {
1230         goto exit;
1231     }
1232     msg = args[0];
1233     return_value = _hashlib_HMAC_update_impl(self, msg);
1234 
1235 exit:
1236     return return_value;
1237 }
1238 
1239 PyDoc_STRVAR(_hashlib_HMAC_digest__doc__,
1240 "digest($self, /)\n"
1241 "--\n"
1242 "\n"
1243 "Return the digest of the bytes passed to the update() method so far.");
1244 
1245 #define _HASHLIB_HMAC_DIGEST_METHODDEF    \
1246     {"digest", (PyCFunction)_hashlib_HMAC_digest, METH_NOARGS, _hashlib_HMAC_digest__doc__},
1247 
1248 static PyObject *
1249 _hashlib_HMAC_digest_impl(HMACobject *self);
1250 
1251 static PyObject *
_hashlib_HMAC_digest(HMACobject * self,PyObject * Py_UNUSED (ignored))1252 _hashlib_HMAC_digest(HMACobject *self, PyObject *Py_UNUSED(ignored))
1253 {
1254     return _hashlib_HMAC_digest_impl(self);
1255 }
1256 
1257 PyDoc_STRVAR(_hashlib_HMAC_hexdigest__doc__,
1258 "hexdigest($self, /)\n"
1259 "--\n"
1260 "\n"
1261 "Return hexadecimal digest of the bytes passed to the update() method so far.\n"
1262 "\n"
1263 "This may be used to exchange the value safely in email or other non-binary\n"
1264 "environments.");
1265 
1266 #define _HASHLIB_HMAC_HEXDIGEST_METHODDEF    \
1267     {"hexdigest", (PyCFunction)_hashlib_HMAC_hexdigest, METH_NOARGS, _hashlib_HMAC_hexdigest__doc__},
1268 
1269 static PyObject *
1270 _hashlib_HMAC_hexdigest_impl(HMACobject *self);
1271 
1272 static PyObject *
_hashlib_HMAC_hexdigest(HMACobject * self,PyObject * Py_UNUSED (ignored))1273 _hashlib_HMAC_hexdigest(HMACobject *self, PyObject *Py_UNUSED(ignored))
1274 {
1275     return _hashlib_HMAC_hexdigest_impl(self);
1276 }
1277 
1278 PyDoc_STRVAR(_hashlib_get_fips_mode__doc__,
1279 "get_fips_mode($module, /)\n"
1280 "--\n"
1281 "\n"
1282 "Determine the OpenSSL FIPS mode of operation.\n"
1283 "\n"
1284 "For OpenSSL 3.0.0 and newer it returns the state of the default provider\n"
1285 "in the default OSSL context. It\'s not quite the same as FIPS_mode() but good\n"
1286 "enough for unittests.\n"
1287 "\n"
1288 "Effectively any non-zero return value indicates FIPS mode;\n"
1289 "values other than 1 may have additional significance.");
1290 
1291 #define _HASHLIB_GET_FIPS_MODE_METHODDEF    \
1292     {"get_fips_mode", (PyCFunction)_hashlib_get_fips_mode, METH_NOARGS, _hashlib_get_fips_mode__doc__},
1293 
1294 static int
1295 _hashlib_get_fips_mode_impl(PyObject *module);
1296 
1297 static PyObject *
_hashlib_get_fips_mode(PyObject * module,PyObject * Py_UNUSED (ignored))1298 _hashlib_get_fips_mode(PyObject *module, PyObject *Py_UNUSED(ignored))
1299 {
1300     PyObject *return_value = NULL;
1301     int _return_value;
1302 
1303     _return_value = _hashlib_get_fips_mode_impl(module);
1304     if ((_return_value == -1) && PyErr_Occurred()) {
1305         goto exit;
1306     }
1307     return_value = PyLong_FromLong((long)_return_value);
1308 
1309 exit:
1310     return return_value;
1311 }
1312 
1313 PyDoc_STRVAR(_hashlib_compare_digest__doc__,
1314 "compare_digest($module, a, b, /)\n"
1315 "--\n"
1316 "\n"
1317 "Return \'a == b\'.\n"
1318 "\n"
1319 "This function uses an approach designed to prevent\n"
1320 "timing analysis, making it appropriate for cryptography.\n"
1321 "\n"
1322 "a and b must both be of the same type: either str (ASCII only),\n"
1323 "or any bytes-like object.\n"
1324 "\n"
1325 "Note: If a and b are of different lengths, or if an error occurs,\n"
1326 "a timing attack could theoretically reveal information about the\n"
1327 "types and lengths of a and b--but not their values.");
1328 
1329 #define _HASHLIB_COMPARE_DIGEST_METHODDEF    \
1330     {"compare_digest", (PyCFunction)(void(*)(void))_hashlib_compare_digest, METH_FASTCALL, _hashlib_compare_digest__doc__},
1331 
1332 static PyObject *
1333 _hashlib_compare_digest_impl(PyObject *module, PyObject *a, PyObject *b);
1334 
1335 static PyObject *
_hashlib_compare_digest(PyObject * module,PyObject * const * args,Py_ssize_t nargs)1336 _hashlib_compare_digest(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
1337 {
1338     PyObject *return_value = NULL;
1339     PyObject *a;
1340     PyObject *b;
1341 
1342     if (!_PyArg_CheckPositional("compare_digest", nargs, 2, 2)) {
1343         goto exit;
1344     }
1345     a = args[0];
1346     b = args[1];
1347     return_value = _hashlib_compare_digest_impl(module, a, b);
1348 
1349 exit:
1350     return return_value;
1351 }
1352 
1353 #ifndef EVPXOF_DIGEST_METHODDEF
1354     #define EVPXOF_DIGEST_METHODDEF
1355 #endif /* !defined(EVPXOF_DIGEST_METHODDEF) */
1356 
1357 #ifndef EVPXOF_HEXDIGEST_METHODDEF
1358     #define EVPXOF_HEXDIGEST_METHODDEF
1359 #endif /* !defined(EVPXOF_HEXDIGEST_METHODDEF) */
1360 
1361 #ifndef _HASHLIB_OPENSSL_SHA3_224_METHODDEF
1362     #define _HASHLIB_OPENSSL_SHA3_224_METHODDEF
1363 #endif /* !defined(_HASHLIB_OPENSSL_SHA3_224_METHODDEF) */
1364 
1365 #ifndef _HASHLIB_OPENSSL_SHA3_256_METHODDEF
1366     #define _HASHLIB_OPENSSL_SHA3_256_METHODDEF
1367 #endif /* !defined(_HASHLIB_OPENSSL_SHA3_256_METHODDEF) */
1368 
1369 #ifndef _HASHLIB_OPENSSL_SHA3_384_METHODDEF
1370     #define _HASHLIB_OPENSSL_SHA3_384_METHODDEF
1371 #endif /* !defined(_HASHLIB_OPENSSL_SHA3_384_METHODDEF) */
1372 
1373 #ifndef _HASHLIB_OPENSSL_SHA3_512_METHODDEF
1374     #define _HASHLIB_OPENSSL_SHA3_512_METHODDEF
1375 #endif /* !defined(_HASHLIB_OPENSSL_SHA3_512_METHODDEF) */
1376 
1377 #ifndef _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
1378     #define _HASHLIB_OPENSSL_SHAKE_128_METHODDEF
1379 #endif /* !defined(_HASHLIB_OPENSSL_SHAKE_128_METHODDEF) */
1380 
1381 #ifndef _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
1382     #define _HASHLIB_OPENSSL_SHAKE_256_METHODDEF
1383 #endif /* !defined(_HASHLIB_OPENSSL_SHAKE_256_METHODDEF) */
1384 
1385 #ifndef _HASHLIB_SCRYPT_METHODDEF
1386     #define _HASHLIB_SCRYPT_METHODDEF
1387 #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */
1388 /*[clinic end generated code: output=162369cb9d43f1cc input=a9049054013a1b77]*/
1389