diff --git a/nacl/__init__.py b/nacl/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..eca463aa3560c34d68d3e6ea6ee4edc24dc7a990 100644
--- a/nacl/__init__.py
+++ b/nacl/__init__.py
@@ -0,0 +1 @@
+from . import hash
diff --git a/nacl/hash.py b/nacl/hash.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ebe0cfca3e4a63ed23f560a97b38b7b3a4329e7
--- /dev/null
+++ b/nacl/hash.py
@@ -0,0 +1,26 @@
+import binascii
+
+from . import nacl
+from .exceptions import CryptoError
+
+
+def sha256(message, binary=False):
+    digest = nacl.ffi.new("unsigned char[]", nacl.lib.crypto_hash_sha256_BYTES)
+    if not nacl.lib.crypto_hash_sha256(digest, message, len(message)):
+        raise CryptoError("Hashing failed")
+    digest = nacl.ffi.string(digest)
+
+    if binary:
+        return digest
+    return binascii.hexlify(digest).decode("ascii")
+
+
+def sha512(message, binary=False):
+    digest = nacl.ffi.new("unsigned char[]", nacl.lib.crypto_hash_sha512_BYTES)
+    if not nacl.lib.crypto_hash_sha512(digest, message, len(message)):
+        raise CryptoError("Hashing failed")
+    digest = nacl.ffi.string(digest)
+
+    if binary:
+        return digest
+    return binascii.hexlify(digest).decode("ascii")