summaryrefslogtreecommitdiff
path: root/Modules/sha256module.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/sha256module.c')
-rw-r--r--Modules/sha256module.c123
1 files changed, 72 insertions, 51 deletions
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index b05bfc172f..957fd2b8f9 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -20,6 +20,11 @@
#include "structmember.h"
#include "hashlib.h"
+/*[clinic input]
+module _sha256
+class SHA256Type "SHAobject *" "&PyType_Type"
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=71a39174d4f0a744]*/
/* Some useful types */
@@ -47,6 +52,8 @@ typedef struct {
int digestsize;
} SHAobject;
+#include "clinic/sha256module.c.h"
+
/* When run on a little-endian CPU we need to perform byte reversal on an
array of longwords. */
@@ -393,10 +400,15 @@ SHA_dealloc(PyObject *ptr)
/* External methods for a hash object */
-PyDoc_STRVAR(SHA256_copy__doc__, "Return a copy of the hash object.");
+/*[clinic input]
+SHA256Type.copy
+
+Return a copy of the hash object.
+[clinic start generated code]*/
static PyObject *
-SHA256_copy(SHAobject *self, PyObject *unused)
+SHA256Type_copy_impl(SHAobject *self)
+/*[clinic end generated code: output=1a8bbd66a0c9c168 input=f58840a618d4f2a7]*/
{
SHAobject *newobj;
@@ -412,11 +424,15 @@ SHA256_copy(SHAobject *self, PyObject *unused)
return (PyObject *)newobj;
}
-PyDoc_STRVAR(SHA256_digest__doc__,
-"Return the digest value as a string of binary data.");
+/*[clinic input]
+SHA256Type.digest
+
+Return the digest value as a string of binary data.
+[clinic start generated code]*/
static PyObject *
-SHA256_digest(SHAobject *self, PyObject *unused)
+SHA256Type_digest_impl(SHAobject *self)
+/*[clinic end generated code: output=46616a5e909fbc3d input=1fb752e58954157d]*/
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
@@ -426,11 +442,15 @@ SHA256_digest(SHAobject *self, PyObject *unused)
return PyBytes_FromStringAndSize((const char *)digest, self->digestsize);
}
-PyDoc_STRVAR(SHA256_hexdigest__doc__,
-"Return the digest value as a string of hexadecimal digits.");
+/*[clinic input]
+SHA256Type.hexdigest
+
+Return the digest value as a string of hexadecimal digits.
+[clinic start generated code]*/
static PyObject *
-SHA256_hexdigest(SHAobject *self, PyObject *unused)
+SHA256Type_hexdigest_impl(SHAobject *self)
+/*[clinic end generated code: output=725f8a7041ae97f3 input=0cc4c714693010d1]*/
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
@@ -462,18 +482,21 @@ SHA256_hexdigest(SHAobject *self, PyObject *unused)
return retval;
}
-PyDoc_STRVAR(SHA256_update__doc__,
-"Update this hash object's state with the provided string.");
+/*[clinic input]
+SHA256Type.update
+
+ obj: object
+ /
+
+Update this hash object's state with the provided string.
+[clinic start generated code]*/
static PyObject *
-SHA256_update(SHAobject *self, PyObject *args)
+SHA256Type_update(SHAobject *self, PyObject *obj)
+/*[clinic end generated code: output=0967fb2860c66af7 input=b2d449d5b30f0f5a]*/
{
- PyObject *obj;
Py_buffer buf;
- if (!PyArg_ParseTuple(args, "O:update", &obj))
- return NULL;
-
GET_BUFFER_VIEW_OR_ERROUT(obj, &buf);
sha_update(self, buf.buf, buf.len);
@@ -484,10 +507,10 @@ SHA256_update(SHAobject *self, PyObject *args)
}
static PyMethodDef SHA_methods[] = {
- {"copy", (PyCFunction)SHA256_copy, METH_NOARGS, SHA256_copy__doc__},
- {"digest", (PyCFunction)SHA256_digest, METH_NOARGS, SHA256_digest__doc__},
- {"hexdigest", (PyCFunction)SHA256_hexdigest, METH_NOARGS, SHA256_hexdigest__doc__},
- {"update", (PyCFunction)SHA256_update, METH_VARARGS, SHA256_update__doc__},
+ SHA256TYPE_COPY_METHODDEF
+ SHA256TYPE_DIGEST_METHODDEF
+ SHA256TYPE_HEXDIGEST_METHODDEF
+ SHA256TYPE_UPDATE_METHODDEF
{NULL, NULL} /* sentinel */
};
@@ -594,27 +617,26 @@ static PyTypeObject SHA256type = {
/* The single module-level function: new() */
-PyDoc_STRVAR(SHA256_new__doc__,
-"Return a new SHA-256 hash object; optionally initialized with a string.");
+/*[clinic input]
+_sha256.sha256
+
+ string: object(c_default="NULL") = b''
+
+Return a new SHA-256 hash object; optionally initialized with a string.
+[clinic start generated code]*/
static PyObject *
-SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict)
+_sha256_sha256_impl(PyModuleDef *module, PyObject *string)
+/*[clinic end generated code: output=d70e6e2d97112844 input=09cce3fb855056b2]*/
{
- 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 = newSHA256object()) == NULL) {
- if (data_obj)
+ if (string)
PyBuffer_Release(&buf);
return NULL;
}
@@ -623,11 +645,11 @@ SHA256_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) {
sha_update(new, buf.buf, buf.len);
PyBuffer_Release(&buf);
}
@@ -635,27 +657,26 @@ SHA256_new(PyObject *self, PyObject *args, PyObject *kwdict)
return (PyObject *)new;
}
-PyDoc_STRVAR(SHA224_new__doc__,
-"Return a new SHA-224 hash object; optionally initialized with a string.");
+/*[clinic input]
+_sha256.sha224
+
+ string: object(c_default="NULL") = b''
+
+Return a new SHA-224 hash object; optionally initialized with a string.
+[clinic start generated code]*/
static PyObject *
-SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict)
+_sha256_sha224_impl(PyModuleDef *module, PyObject *string)
+/*[clinic end generated code: output=f2822bf28416b42a input=27a04ba24c353a73]*/
{
- 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 = newSHA224object()) == NULL) {
- if (data_obj)
+ if (string)
PyBuffer_Release(&buf);
return NULL;
}
@@ -664,11 +685,11 @@ SHA224_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) {
sha_update(new, buf.buf, buf.len);
PyBuffer_Release(&buf);
}
@@ -680,8 +701,8 @@ SHA224_new(PyObject *self, PyObject *args, PyObject *kwdict)
/* List of functions exported by this module */
static struct PyMethodDef SHA_functions[] = {
- {"sha256", (PyCFunction)SHA256_new, METH_VARARGS|METH_KEYWORDS, SHA256_new__doc__},
- {"sha224", (PyCFunction)SHA224_new, METH_VARARGS|METH_KEYWORDS, SHA224_new__doc__},
+ _SHA256_SHA256_METHODDEF
+ _SHA256_SHA224_METHODDEF
{NULL, NULL} /* Sentinel */
};