diff options
-rw-r--r-- | Modules/md5module.c | 50 |
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 * |