diff --git a/Include/pystrhex.h b/Include/pystrhex.h
new file mode 100644
index 0000000..1dc1255
--- /dev/null
+++ b/Include/pystrhex.h
@@ -0,0 +1,17 @@
+#ifndef Py_STRHEX_H
+#define Py_STRHEX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Returns a str() containing the hex representation of argbuf. */
+PyAPI_FUNC(PyObject*) _Py_strhex(const char* argbuf, const Py_ssize_t arglen);
+/* Returns a bytes() containing the ASCII hex representation of argbuf. */
+PyAPI_FUNC(PyObject*) _Py_strhex_bytes(const char* argbuf, const Py_ssize_t arglen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !Py_STRHEX_H */
diff --git a/Python/pystrhex.c b/Python/pystrhex.c
new file mode 100644
index 0000000..b8f3146
--- /dev/null
+++ b/Python/pystrhex.c
@@ -0,0 +1,60 @@
+/* bytes to hex implementation */
+
+#include "Python.h"
+
+static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen,
+                                 int return_bytes)
+{
+    PyObject *retval;
+    Py_UCS1* retbuf;
+    Py_ssize_t i, j;
+
+    assert(arglen >= 0);
+    if (arglen > PY_SSIZE_T_MAX / 2)
+        return PyErr_NoMemory();
+
+    if (return_bytes) {
+        /* If _PyBytes_FromSize() were public we could avoid malloc+copy. */
+        retbuf = (Py_UCS1*) PyMem_Malloc(arglen*2);
+	if (!retbuf)
+	    return PyErr_NoMemory();
+    } else {
+	retval = PyUnicode_New(arglen*2, 127);
+	if (!retval)
+	    return NULL;
+	retbuf = PyUnicode_1BYTE_DATA(retval);
+    }
+
+    /* make hex version of string, taken from shamodule.c */
+    for (i=j=0; i < arglen; i++) {
+        unsigned char c;
+        c = (argbuf[i] >> 4) & 0xf;
+        retbuf[j++] = Py_hexdigits[c];
+        c = argbuf[i] & 0xf;
+        retbuf[j++] = Py_hexdigits[c];
+    }
+
+    if (return_bytes) {
+        retval = PyBytes_FromStringAndSize((const char *)retbuf, arglen*2);
+        PyMem_Free(retbuf);
+    }
+#ifdef Py_DEBUG
+    else {
+        assert(_PyUnicode_CheckConsistency(retval, 1));
+    }
+#endif
+
+    return retval;
+}
+
+PyObject *_Py_strhex(const char* argbuf, const Py_ssize_t arglen)
+{
+    return _Py_strhex_impl(argbuf, arglen, 0);
+}
+
+/* Same as above but returns a bytes() instead of str() to avoid the
+ * need to decode the str() when bytes are needed. */
+PyObject *_Py_strhex_bytes(const char* argbuf, const Py_ssize_t arglen)
+{
+    return _Py_strhex_impl(argbuf, arglen, 1);
+}
