summaryrefslogtreecommitdiff
path: root/python/apt_pkgmodule.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-11-06 21:21:44 +0100
committerMichael Vogt <mvo@ubuntu.com>2014-11-06 21:21:44 +0100
commitb066cf677e2cbd480bd2e74b48147bfd226ae463 (patch)
treea1fbb341f7ce2da1aba509bfd1e093db32a13f3f /python/apt_pkgmodule.cc
parentf619b8891b5ee052cc15913729ef081cf0e2f913 (diff)
downloadpython-apt-b066cf677e2cbd480bd2e74b48147bfd226ae463.tar.gz
add apt_pkg.sha512sum()
Diffstat (limited to 'python/apt_pkgmodule.cc')
-rw-r--r--python/apt_pkgmodule.cc50
1 files changed, 48 insertions, 2 deletions
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index ca20ef18..e00ce0ca 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -311,7 +311,7 @@ static PyObject *sha1sum(PyObject *Self,PyObject *Args)
return 0;
}
/*}}}*/
-// sha256sum - Compute the sha1sum of a file or string /*{{{*/
+// sha256sum - Compute the sha256sum of a file or string /*{{{*/
// ---------------------------------------------------------------------
static const char *doc_sha256sum =
"sha256sum(object) -> str\n\n"
@@ -356,6 +356,51 @@ static PyObject *sha256sum(PyObject *Self,PyObject *Args)
return 0;
}
/*}}}*/
+// sha512sum - Compute the sha512sum of a file or string /*{{{*/
+// ---------------------------------------------------------------------
+static const char *doc_sha512sum =
+ "sha512sum(object) -> str\n\n"
+ "Return the sha512sum of the object. 'object' may either be a string, in\n"
+ "which case the sha512sum of the string is returned, or a file() object\n"
+ "(or file descriptor), in which case the sha512sum of its contents is\n"
+ "returned.";;
+static PyObject *sha512sum(PyObject *Self,PyObject *Args)
+{
+ PyObject *Obj;
+ if (PyArg_ParseTuple(Args,"O",&Obj) == 0)
+ return 0;
+
+ // Digest of a string.
+ if (PyBytes_Check(Obj) != 0)
+ {
+ char *s;
+ Py_ssize_t len;
+ SHA512Summation Sum;
+ PyBytes_AsStringAndSize(Obj, &s, &len);
+ Sum.Add((const unsigned char*)s, len);
+ return CppPyString(Sum.Result().Value());
+ }
+
+ // Digest of a file
+ int Fd = PyObject_AsFileDescriptor(Obj);
+ if (Fd != -1)
+ {
+ SHA512Summation Sum;
+ struct stat St;
+ if (fstat(Fd,&St) != 0 ||
+ Sum.AddFD(Fd,St.st_size) == false)
+ {
+ PyErr_SetFromErrno(PyExc_SystemError);
+ return 0;
+ }
+
+ return CppPyString(Sum.Result().Value());
+ }
+
+ PyErr_SetString(PyExc_TypeError,"Only understand strings and files");
+ return 0;
+}
+ /*}}}*/
// get_architectures - return the list of architectures /*{{{*/
// ---------------------------------------------------------------------
static const char *doc_GetArchitectures =
@@ -521,10 +566,11 @@ static PyMethodDef methods[] =
{"parse_depends",ParseDepends,METH_VARARGS,doc_ParseDepends},
{"parse_src_depends",ParseSrcDepends,METH_VARARGS,parse_src_depends_doc},
- // Stuff
+ // Hashes
{"md5sum",md5sum,METH_VARARGS,doc_md5sum},
{"sha1sum",sha1sum,METH_VARARGS,doc_sha1sum},
{"sha256sum",sha256sum,METH_VARARGS,doc_sha256sum},
+ {"sha512sum",sha512sum,METH_VARARGS,doc_sha512sum},
// multiarch
{"get_architectures", GetArchitectures, METH_VARARGS, doc_GetArchitectures},