return PyString_FromStringAndSize((const char *)digest, self->digestsize);} PyDoc_STRVAR(SHA512_hexdigest__doc__,"Return the digest value as a string of hexadecimal digits."); static PyObject *SHA512_hexdigest(SHAobject *self, PyObject *unused){ unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; PyObject *retval; char *hex_digest; int i, j; /* Get the raw (binary) digest value */ SHAcopy(self, &temp); sha512_final(digest, &temp); /* Create a new string */ retval = PyString_FromStringAndSize(NULL, self->digestsize * 2); if (!retval) return NULL; hex_digest = PyString_AsString(retval); if (!hex_digest) { Py_DECREF(retval); return NULL; } /* Make hex version of the digest */ for (i=j=0; i<self->digestsize; i++) { char c; c = (digest[i] >> 4) & 0xf; c = (c>9) ? c+'a'-10 : c + '0'; hex_digest[j++] = c; c = (digest[i] & 0xf); c = (c>9) ? c+'a'-10 : c + '0'; hex_digest[j++] = c; } return retval;} PyDoc_STRVAR(SHA512_update__doc__,"Update this hash object's state with the provided string."); static PyObject *SHA512_update(SHAobject *self, PyObject *args){ unsigned char *cp; int len; if (!PyArg_ParseTuple(args, "s#:update", &cp, &len)) return NULL; sha512_update(self, cp, len); Py_INCREF(Py_None); return Py_None;} 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__}, {NULL, NULL} /* sentinel */}; static PyObject *SHA512_get_block_size(PyObject *self, void *closure){ return PyInt_FromLong(SHA_BLOCKSIZE);} static PyObject *SHA512_get_name(PyObject *self, void *closure){ if (((SHAobject *)self)->digestsize == 64) return PyString_FromStringAndSize("SHA512", 6); else return PyString_FromStringAndSize("SHA384", 6);} static PyGetSetDef SHA_getseters[] = { {"block_size", (getter)SHA512_get_block_size, NULL, NULL, NULL}, {"name", (getter)SHA512_get_name, NULL, NULL, NULL}, {NULL} /* Sentinel */}; static PyMemberDef SHA_members[] = { {"digest_size", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL}, /* the old md5 and sha modules support 'digest_size' as in PEP 247. * the old sha module also supported 'digestsize'. ugh. */ {"digestsize", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL}, {NULL} /* Sentinel */}; static PyTypeObject SHA384type = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "_sha512.sha384", /*tp_name*/ sizeof(SHAobject), /*tp_size*/ 0, /*tp_itemsize*/ /* methods */ SHA512_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ SHA_methods, /* tp_methods */ SHA_members, /* tp_members */ SHA_getseters, /* tp_getset */}; static PyTypeObject SHA512type = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "_sha512.sha512", /*tp_name*/ sizeof(SHAobject), /*tp_size*/ 0, /*tp_itemsize*/ /* methods */ SHA512_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ SHA_methods, /* tp_methods */ SHA_members, /* tp_members */ SHA_getseters, /* tp_getset */}; /* The single module-level function: new() */ PyDoc_STRVAR(SHA512_new__doc__,"Return a new SHA-512 hash object; optionally initialized with a string."); static PyObject *SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict){ static char *kwlist[] = {"string", NULL}; SHAobject *new; unsigned char *cp = NULL; int len; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, &cp, &len)) { return NULL; } if ((new = newSHA512object()) == NULL) return NULL; sha512_init(new); if (PyErr_Occurred()) { Py_DECREF(new); return NULL; } if (cp) sha512_update(new, cp, len); return (PyObject *)new;} PyDoc_STRVAR(SHA384_new__doc__,"Return a new SHA-384 hash object; optionally initialized with a string."); static PyObject *SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict){ static char *kwlist[] = {"string", NULL}; SHAobject *new; unsigned char *cp = NULL; int len; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, &cp, &len)) { return NULL; } if ((new = newSHA384object()) == NULL) return NULL; sha384_init(new); if (PyErr_Occurred()) { Py_DECREF(new); return NULL; } if (cp) sha512_update(new, cp, len); return (PyObject *)new;} /* 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__}, {NULL, NULL} /* Sentinel */}; /* Initialize this module. */ #define insint(n,v) { PyModule_AddIntConstant(m,n,v); } PyMODINIT_FUNCinit_sha512(void){ PyObject *m; SHA384type.ob_type = &PyType_Type; if (PyType_Ready(&SHA384type) < 0) return; SHA512type.ob_type = &PyType_Type; if (PyType_Ready(&SHA512type) < 0) return; m = Py_InitModule("_sha512", SHA_functions); if (m == NULL) return;} #endifLines 501–769 of 769. Previous lines
return PyString_FromStringAndSize((const char *)digest, self->digestsize); } PyDoc_STRVAR(SHA512_hexdigest__doc__, "Return the digest value as a string of hexadecimal digits."); static PyObject * SHA512_hexdigest(SHAobject *self, PyObject *unused) { unsigned char digest[SHA_DIGESTSIZE]; SHAobject temp; PyObject *retval; char *hex_digest; int i, j; /* Get the raw (binary) digest value */ SHAcopy(self, &temp); sha512_final(digest, &temp); /* Create a new string */ retval = PyString_FromStringAndSize(NULL, self->digestsize * 2); if (!retval) return NULL; hex_digest = PyString_AsString(retval); if (!hex_digest) { Py_DECREF(retval); return NULL; } /* Make hex version of the digest */ for (i=j=0; i<self->digestsize; i++) { char c; c = (digest[i] >> 4) & 0xf; c = (c>9) ? c+'a'-10 : c + '0'; hex_digest[j++] = c; c = (digest[i] & 0xf); c = (c>9) ? c+'a'-10 : c + '0'; hex_digest[j++] = c; } return retval; } PyDoc_STRVAR(SHA512_update__doc__, "Update this hash object's state with the provided string."); static PyObject * SHA512_update(SHAobject *self, PyObject *args) { unsigned char *cp; int len; if (!PyArg_ParseTuple(args, "s#:update", &cp, &len)) return NULL; sha512_update(self, cp, len); Py_INCREF(Py_None); return Py_None; } 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__}, {NULL, NULL} /* sentinel */ }; static PyObject * SHA512_get_block_size(PyObject *self, void *closure) { return PyInt_FromLong(SHA_BLOCKSIZE); } static PyObject * SHA512_get_name(PyObject *self, void *closure) { if (((SHAobject *)self)->digestsize == 64) return PyString_FromStringAndSize("SHA512", 6); else return PyString_FromStringAndSize("SHA384", 6); } static PyGetSetDef SHA_getseters[] = { {"block_size", (getter)SHA512_get_block_size, NULL, NULL, NULL}, {"name", (getter)SHA512_get_name, NULL, NULL, NULL}, {NULL} /* Sentinel */ }; static PyMemberDef SHA_members[] = { {"digest_size", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL}, /* the old md5 and sha modules support 'digest_size' as in PEP 247. * the old sha module also supported 'digestsize'. ugh. */ {"digestsize", T_INT, offsetof(SHAobject, digestsize), READONLY, NULL}, {NULL} /* Sentinel */ }; static PyTypeObject SHA384type = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "_sha512.sha384", /*tp_name*/ sizeof(SHAobject), /*tp_size*/ 0, /*tp_itemsize*/ /* methods */ SHA512_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ SHA_methods, /* tp_methods */ SHA_members, /* tp_members */ SHA_getseters, /* tp_getset */ }; static PyTypeObject SHA512type = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "_sha512.sha512", /*tp_name*/ sizeof(SHAobject), /*tp_size*/ 0, /*tp_itemsize*/ /* methods */ SHA512_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /*tp_doc*/ 0, /*tp_traverse*/ 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ 0, /*tp_iternext*/ SHA_methods, /* tp_methods */ SHA_members, /* tp_members */ SHA_getseters, /* tp_getset */ }; /* The single module-level function: new() */ PyDoc_STRVAR(SHA512_new__doc__, "Return a new SHA-512 hash object; optionally initialized with a string."); static PyObject * SHA512_new(PyObject *self, PyObject *args, PyObject *kwdict) { static char *kwlist[] = {"string", NULL}; SHAobject *new; unsigned char *cp = NULL; int len; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, &cp, &len)) { return NULL; } if ((new = newSHA512object()) == NULL) return NULL; sha512_init(new); if (PyErr_Occurred()) { Py_DECREF(new); return NULL; } if (cp) sha512_update(new, cp, len); return (PyObject *)new; } PyDoc_STRVAR(SHA384_new__doc__, "Return a new SHA-384 hash object; optionally initialized with a string."); static PyObject * SHA384_new(PyObject *self, PyObject *args, PyObject *kwdict) { static char *kwlist[] = {"string", NULL}; SHAobject *new; unsigned char *cp = NULL; int len; if (!PyArg_ParseTupleAndKeywords(args, kwdict, "|s#:new", kwlist, &cp, &len)) { return NULL; } if ((new = newSHA384object()) == NULL) return NULL; sha384_init(new); if (PyErr_Occurred()) { Py_DECREF(new); return NULL; } if (cp) sha512_update(new, cp, len); return (PyObject *)new; } /* 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__}, {NULL, NULL} /* Sentinel */ }; /* Initialize this module. */ #define insint(n,v) { PyModule_AddIntConstant(m,n,v); } PyMODINIT_FUNC init_sha512(void) { PyObject *m; SHA384type.ob_type = &PyType_Type; if (PyType_Ready(&SHA384type) < 0) return; SHA512type.ob_type = &PyType_Type; if (PyType_Ready(&SHA512type) < 0) return; m = Py_InitModule("_sha512", SHA_functions); if (m == NULL) return; } #endif