mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #20173: Convert sha1, sha256, sha512 and md5 to ArgumentClinic.
Patch by Vajrasky Kok.
This commit is contained in:
parent
6aef4dc1bd
commit
501b13c622
5 changed files with 699 additions and 158 deletions
|
@ -20,6 +20,12 @@
|
|||
#include "structmember.h"
|
||||
#include "hashlib.h"
|
||||
|
||||
/*[clinic input]
|
||||
module _sha512
|
||||
class SHA512Type "SHAobject *" "&PyType_Type"
|
||||
[clinic start generated code]*/
|
||||
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=81a3ccde92bcfe8d]*/
|
||||
|
||||
#ifdef PY_LONG_LONG /* If no PY_LONG_LONG, don't compile anything! */
|
||||
|
||||
/* Some useful types */
|
||||
|
@ -459,10 +465,33 @@ SHA512_dealloc(PyObject *ptr)
|
|||
|
||||
/* External methods for a hash object */
|
||||
|
||||
PyDoc_STRVAR(SHA512_copy__doc__, "Return a copy of the hash object.");
|
||||
/*[clinic input]
|
||||
SHA512Type.copy
|
||||
|
||||
Return a copy of the hash object.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(SHA512Type_copy__doc__,
|
||||
"copy($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a copy of the hash object.");
|
||||
|
||||
#define SHA512TYPE_COPY_METHODDEF \
|
||||
{"copy", (PyCFunction)SHA512Type_copy, METH_NOARGS, SHA512Type_copy__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA512_copy(SHAobject *self, PyObject *unused)
|
||||
SHA512Type_copy_impl(SHAobject *self);
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_copy(SHAobject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return SHA512Type_copy_impl(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_copy_impl(SHAobject *self)
|
||||
/*[clinic end generated code: output=14f8e6ce9c61ece0 input=9f5f31e6c457776a]*/
|
||||
{
|
||||
SHAobject *newobj;
|
||||
|
||||
|
@ -478,11 +507,33 @@ SHA512_copy(SHAobject *self, PyObject *unused)
|
|||
return (PyObject *)newobj;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(SHA512_digest__doc__,
|
||||
/*[clinic input]
|
||||
SHA512Type.digest
|
||||
|
||||
Return the digest value as a string of binary data.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(SHA512Type_digest__doc__,
|
||||
"digest($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return the digest value as a string of binary data.");
|
||||
|
||||
#define SHA512TYPE_DIGEST_METHODDEF \
|
||||
{"digest", (PyCFunction)SHA512Type_digest, METH_NOARGS, SHA512Type_digest__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA512_digest(SHAobject *self, PyObject *unused)
|
||||
SHA512Type_digest_impl(SHAobject *self);
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_digest(SHAobject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return SHA512Type_digest_impl(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_digest_impl(SHAobject *self)
|
||||
/*[clinic end generated code: output=be8de024b232977e input=60c2cede9e023018]*/
|
||||
{
|
||||
unsigned char digest[SHA_DIGESTSIZE];
|
||||
SHAobject temp;
|
||||
|
@ -492,11 +543,33 @@ SHA512_digest(SHAobject *self, PyObject *unused)
|
|||
return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(SHA512_hexdigest__doc__,
|
||||
/*[clinic input]
|
||||
SHA512Type.hexdigest
|
||||
|
||||
Return the digest value as a string of hexadecimal digits.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(SHA512Type_hexdigest__doc__,
|
||||
"hexdigest($self, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return the digest value as a string of hexadecimal digits.");
|
||||
|
||||
#define SHA512TYPE_HEXDIGEST_METHODDEF \
|
||||
{"hexdigest", (PyCFunction)SHA512Type_hexdigest, METH_NOARGS, SHA512Type_hexdigest__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA512_hexdigest(SHAobject *self, PyObject *unused)
|
||||
SHA512Type_hexdigest_impl(SHAobject *self);
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_hexdigest(SHAobject *self, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
return SHA512Type_hexdigest_impl(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
SHA512Type_hexdigest_impl(SHAobject *self)
|
||||
/*[clinic end generated code: output=28a4ab2f9a1781b8 input=498b877b25cbe0a2]*/
|
||||
{
|
||||
unsigned char digest[SHA_DIGESTSIZE];
|
||||
SHAobject temp;
|
||||
|
@ -528,18 +601,30 @@ SHA512_hexdigest(SHAobject *self, PyObject *unused)
|
|||
return retval;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(SHA512_update__doc__,
|
||||
"Update this hash object's state with the provided string.");
|
||||
/*[clinic input]
|
||||
SHA512Type.update
|
||||
|
||||
obj: object
|
||||
/
|
||||
|
||||
Update this hash object's state with the provided string.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(SHA512Type_update__doc__,
|
||||
"update($self, obj, /)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Update this hash object\'s state with the provided string.");
|
||||
|
||||
#define SHA512TYPE_UPDATE_METHODDEF \
|
||||
{"update", (PyCFunction)SHA512Type_update, METH_O, SHA512Type_update__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA512_update(SHAobject *self, PyObject *args)
|
||||
SHA512Type_update(SHAobject *self, PyObject *obj)
|
||||
/*[clinic end generated code: output=6be574cdc3a9c52d input=ded2b46656566283]*/
|
||||
{
|
||||
PyObject *obj;
|
||||
Py_buffer buf;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O:update", &obj))
|
||||
return NULL;
|
||||
|
||||
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
|
||||
|
||||
sha512_update(self, buf.buf, buf.len);
|
||||
|
@ -548,12 +633,32 @@ SHA512_update(SHAobject *self, PyObject *args)
|
|||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
/*[clinic input]
|
||||
dump buffer
|
||||
[clinic start generated code]*/
|
||||
|
||||
#ifndef SHA512TYPE_COPY_METHODDEF
|
||||
#define SHA512TYPE_COPY_METHODDEF
|
||||
#endif /* !defined(SHA512TYPE_COPY_METHODDEF) */
|
||||
|
||||
#ifndef SHA512TYPE_DIGEST_METHODDEF
|
||||
#define SHA512TYPE_DIGEST_METHODDEF
|
||||
#endif /* !defined(SHA512TYPE_DIGEST_METHODDEF) */
|
||||
|
||||
#ifndef SHA512TYPE_HEXDIGEST_METHODDEF
|
||||
#define SHA512TYPE_HEXDIGEST_METHODDEF
|
||||
#endif /* !defined(SHA512TYPE_HEXDIGEST_METHODDEF) */
|
||||
|
||||
#ifndef SHA512TYPE_UPDATE_METHODDEF
|
||||
#define SHA512TYPE_UPDATE_METHODDEF
|
||||
#endif /* !defined(SHA512TYPE_UPDATE_METHODDEF) */
|
||||
/*[clinic end generated code: output=de713947d31130e9 input=524ce2e021e4eba6]*/
|
||||
|
||||
static PyMethodDef SHA_methods[] = {
|
||||
{"copy", (PyCFunction)SHA512_copy, METH_NOARGS, SHA512_copy__doc__},
|
||||
{"digest", (PyCFunction)SHA512_digest, METH_NOARGS, SHA512_digest__doc__},
|
||||
{"hexdigest", (PyCFunction)SHA512_hexdigest, METH_NOARGS, SHA512_hexdigest__doc__},
|
||||
{"update", (PyCFunction)SHA512_update, METH_VARARGS, SHA512_update__doc__},
|
||||
SHA512TYPE_COPY_METHODDEF
|
||||
SHA512TYPE_DIGEST_METHODDEF
|
||||
SHA512TYPE_HEXDIGEST_METHODDEF
|
||||
SHA512TYPE_UPDATE_METHODDEF
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
@ -660,27 +765,55 @@ static PyTypeObject SHA512type = {
|
|||
|
||||
/* The single module-level function: new() */
|
||||
|
||||
PyDoc_STRVAR(SHA512_new__doc__,
|
||||
/*[clinic input]
|
||||
_sha512.sha512
|
||||
|
||||
string: object(c_default="NULL") = b''
|
||||
|
||||
Return a new SHA-512 hash object; optionally initialized with a string.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(_sha512_sha512__doc__,
|
||||
"sha512($module, /, string=b\'\')\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a new SHA-512 hash object; optionally initialized with a string.");
|
||||
|
||||
#define _SHA512_SHA512_METHODDEF \
|
||||
{"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
||||
_sha512_sha512_impl(PyModuleDef *module, PyObject *string);
|
||||
|
||||
static PyObject *
|
||||
_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
static char *_keywords[] = {"string", NULL};
|
||||
PyObject *string = NULL;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||
"|O:sha512", _keywords,
|
||||
&string))
|
||||
goto exit;
|
||||
return_value = _sha512_sha512_impl(module, string);
|
||||
|
||||
exit:
|
||||
return return_value;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
_sha512_sha512_impl(PyModuleDef *module, PyObject *string)
|
||||
/*[clinic end generated code: output=9e39b11115f36878 input=e69bad9ae9b6a308]*/
|
||||
{
|
||||
static char *kwlist[] = {"string", NULL};
|
||||
SHAobject *new;
|
||||
PyObject *data_obj = NULL;
|
||||
Py_buffer buf;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist,
|
||||
&data_obj)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (data_obj)
|
||||
GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf);
|
||||
if (string)
|
||||
GET_BUFFER_VIEW_OR_ERROUT(string, &buf);
|
||||
|
||||
if ((new = newSHA512object()) == NULL) {
|
||||
if (data_obj)
|
||||
if (string)
|
||||
PyBuffer_Release(&buf);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -689,11 +822,11 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
|||
|
||||
if (PyErr_Occurred()) {
|
||||
Py_DECREF(new);
|
||||
if (data_obj)
|
||||
if (string)
|
||||
PyBuffer_Release(&buf);
|
||||
return NULL;
|
||||
}
|
||||
if (data_obj) {
|
||||
if (string) {
|
||||
sha512_update(new, buf.buf, buf.len);
|
||||
PyBuffer_Release(&buf);
|
||||
}
|
||||
|
@ -701,27 +834,55 @@ SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
|||
return (PyObject *)new;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(SHA384_new__doc__,
|
||||
/*[clinic input]
|
||||
_sha512.sha384
|
||||
|
||||
string: object(c_default="NULL") = b''
|
||||
|
||||
Return a new SHA-384 hash object; optionally initialized with a string.
|
||||
[clinic start generated code]*/
|
||||
|
||||
PyDoc_STRVAR(_sha512_sha384__doc__,
|
||||
"sha384($module, /, string=b\'\')\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Return a new SHA-384 hash object; optionally initialized with a string.");
|
||||
|
||||
#define _SHA512_SHA384_METHODDEF \
|
||||
{"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__},
|
||||
|
||||
static PyObject *
|
||||
SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
||||
_sha512_sha384_impl(PyModuleDef *module, PyObject *string);
|
||||
|
||||
static PyObject *
|
||||
_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
static char *_keywords[] = {"string", NULL};
|
||||
PyObject *string = NULL;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
|
||||
"|O:sha384", _keywords,
|
||||
&string))
|
||||
goto exit;
|
||||
return_value = _sha512_sha384_impl(module, string);
|
||||
|
||||
exit:
|
||||
return return_value;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
_sha512_sha384_impl(PyModuleDef *module, PyObject *string)
|
||||
/*[clinic end generated code: output=397c6fba3525b93a input=c9327788d4ea4545]*/
|
||||
{
|
||||
static char *kwlist[] = {"string", NULL};
|
||||
SHAobject *new;
|
||||
PyObject *data_obj = NULL;
|
||||
Py_buffer buf;
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|O:new", kwlist,
|
||||
&data_obj)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (data_obj)
|
||||
GET_BUFFER_VIEW_OR_ERROUT(data_obj, &buf);
|
||||
if (string)
|
||||
GET_BUFFER_VIEW_OR_ERROUT(string, &buf);
|
||||
|
||||
if ((new = newSHA384object()) == NULL) {
|
||||
if (data_obj)
|
||||
if (string)
|
||||
PyBuffer_Release(&buf);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -730,11 +891,11 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
|||
|
||||
if (PyErr_Occurred()) {
|
||||
Py_DECREF(new);
|
||||
if (data_obj)
|
||||
if (string)
|
||||
PyBuffer_Release(&buf);
|
||||
return NULL;
|
||||
}
|
||||
if (data_obj) {
|
||||
if (string) {
|
||||
sha512_update(new, buf.buf, buf.len);
|
||||
PyBuffer_Release(&buf);
|
||||
}
|
||||
|
@ -743,11 +904,24 @@ SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
|||
}
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
dump buffer
|
||||
[clinic start generated code]*/
|
||||
|
||||
#ifndef _SHA512_SHA512_METHODDEF
|
||||
#define _SHA512_SHA512_METHODDEF
|
||||
#endif /* !defined(_SHA512_SHA512_METHODDEF) */
|
||||
|
||||
#ifndef _SHA512_SHA384_METHODDEF
|
||||
#define _SHA512_SHA384_METHODDEF
|
||||
#endif /* !defined(_SHA512_SHA384_METHODDEF) */
|
||||
/*[clinic end generated code: output=69d84aa9445b01d8 input=524ce2e021e4eba6]*/
|
||||
|
||||
/* List of functions exported by this module */
|
||||
|
||||
static struct PyMethodDef SHA_functions[] = {
|
||||
{"sha512", (PyCFunction)SHA512_new, METH_VARARGS|METH_KEYWORDS, SHA512_new__doc__},
|
||||
{"sha384", (PyCFunction)SHA384_new, METH_VARARGS|METH_KEYWORDS, SHA384_new__doc__},
|
||||
_SHA512_SHA512_METHODDEF
|
||||
_SHA512_SHA384_METHODDEF
|
||||
{NULL, NULL} /* Sentinel */
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue