diff options
| author | Michael Vogt <mvo@ubuntu.com> | 2014-11-06 21:21:44 +0100 |
|---|---|---|
| committer | Michael Vogt <mvo@ubuntu.com> | 2014-11-06 21:21:44 +0100 |
| commit | b066cf677e2cbd480bd2e74b48147bfd226ae463 (patch) | |
| tree | a1fbb341f7ce2da1aba509bfd1e093db32a13f3f /python/apt_pkgmodule.cc | |
| parent | f619b8891b5ee052cc15913729ef081cf0e2f913 (diff) | |
| download | python-apt-b066cf677e2cbd480bd2e74b48147bfd226ae463.tar.gz | |
add apt_pkg.sha512sum()
Diffstat (limited to 'python/apt_pkgmodule.cc')
| -rw-r--r-- | python/apt_pkgmodule.cc | 50 |
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}, |
