md5_hexdigest(): After a brief conversation with TP, added hexdigest()

to this module to mirror sha's hexdigest() method.
This commit is contained in:
Barry Warsaw 2000-08-15 05:59:44 +00:00
parent 34c391d743
commit 3ec0fbb299
1 changed files with 41 additions and 9 deletions

View File

@ -81,8 +81,7 @@ arguments.";
static PyObject * static PyObject *
md5_digest(md5object *self, PyObject *args) md5_digest(md5object *self, PyObject *args)
{ {
MD5_CTX mdContext;
MD5_CTX mdContext;
unsigned char aDigest[16]; unsigned char aDigest[16];
if (!PyArg_NoArgs(args)) if (!PyArg_NoArgs(args))
@ -103,6 +102,41 @@ far. This is an 16-byte string which may contain non-ASCII characters,\n\
including null bytes."; including null bytes.";
static PyObject *
md5_hexdigest(md5object *self, PyObject *args)
{
MD5_CTX mdContext;
unsigned char digest[16];
unsigned char hexdigest[32];
int i, j;
if (!PyArg_NoArgs(args))
return NULL;
/* make a temporary copy, and perform the final */
mdContext = self->md5;
MD5Final(digest, &mdContext);
/* Make hex version of the digest */
for(i=j=0; i<16; i++) {
char c;
c = (digest[i] >> 4) & 0xf;
c = (c>9) ? c+'a'-10 : c + '0';
hexdigest[j++] = c;
c = (digest[i] & 0xf);
c = (c>9) ? c+'a'-10 : c + '0';
hexdigest[j++] = c;
}
return PyString_FromStringAndSize((char*)hexdigest, 32);
}
static char hexdigest_doc [] =
"hexdigest() -> string\n\
\n\
Like digest(), but returns the digest as a string of hexadecimal digits.";
static PyObject * static PyObject *
md5_copy(md5object *self, PyObject *args) md5_copy(md5object *self, PyObject *args)
{ {
@ -126,13 +160,11 @@ Return a copy (``clone'') of the md5 object.";
static PyMethodDef md5_methods[] = { static PyMethodDef md5_methods[] = {
{"update", (PyCFunction)md5_update, {"update", (PyCFunction)md5_update, METH_OLDARGS, update_doc},
METH_OLDARGS, update_doc}, {"digest", (PyCFunction)md5_digest, METH_OLDARGS, digest_doc},
{"digest", (PyCFunction)md5_digest, {"hexdigest", (PyCFunction)md5_hexdigest, METH_OLDARGS, hexdigest_doc},
METH_OLDARGS, digest_doc}, {"copy", (PyCFunction)md5_copy, METH_OLDARGS, copy_doc},
{"copy", (PyCFunction)md5_copy, {NULL, NULL} /* sentinel */
METH_OLDARGS, copy_doc},
{NULL, NULL} /* sentinel */
}; };
static PyObject * static PyObject *