]> granicus.if.org Git - python/commitdiff
md5_hexdigest(): After a brief conversation with TP, added hexdigest()
authorBarry Warsaw <barry@python.org>
Tue, 15 Aug 2000 05:59:44 +0000 (05:59 +0000)
committerBarry Warsaw <barry@python.org>
Tue, 15 Aug 2000 05:59:44 +0000 (05:59 +0000)
to this module to mirror sha's hexdigest() method.

Modules/md5module.c

index 591ba2816d4ae7fdda494ae83e853da0dafc66cc..5eac97b3fec19b4b4dd8b571e39fd95b2fb092ce 100644 (file)
@@ -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))
@@ -103,6 +102,41 @@ far. This is an 16-byte string which may contain non-ASCII characters,\n\
 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)
 {
@@ -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 *