summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/md5module.c50
1 files changed, 41 insertions, 9 deletions
diff --git a/Modules/md5module.c b/Modules/md5module.c
index 591ba28..5eac97b 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -81,8 +81,7 @@ arguments.";
static PyObject *
md5_digest(md5object *self, PyObject *args)
{
-
- MD5_CTX mdContext;
+ MD5_CTX mdContext;
unsigned char aDigest[16];
if (!PyArg_NoArgs(args))
@@ -104,6 +103,41 @@ 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 *
md5_copy(md5object *self, PyObject *args)
{
md5object *md5p;
@@ -126,13 +160,11 @@ Return a copy (``clone'') of the md5 object.";
static PyMethodDef md5_methods[] = {
- {"update", (PyCFunction)md5_update,
- METH_OLDARGS, update_doc},
- {"digest", (PyCFunction)md5_digest,
- METH_OLDARGS, digest_doc},
- {"copy", (PyCFunction)md5_copy,
- METH_OLDARGS, copy_doc},
- {NULL, NULL} /* sentinel */
+ {"update", (PyCFunction)md5_update, METH_OLDARGS, update_doc},
+ {"digest", (PyCFunction)md5_digest, METH_OLDARGS, digest_doc},
+ {"hexdigest", (PyCFunction)md5_hexdigest, METH_OLDARGS, hexdigest_doc},
+ {"copy", (PyCFunction)md5_copy, METH_OLDARGS, copy_doc},
+ {NULL, NULL} /* sentinel */
};
static PyObject *