diff --git a/cryptography/hazmat/oath/__init__.py b/cryptography/hazmat/oath/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cryptography/hazmat/oath/__init__.py
diff --git a/cryptography/hazmat/oath/hotp.py b/cryptography/hazmat/oath/hotp.py
new file mode 100644
index 0000000..319e66f
--- /dev/null
+++ b/cryptography/hazmat/oath/hotp.py
@@ -0,0 +1,41 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import struct
+
+from cryptography.hazmat.primitives import constant_time
+from cryptography.hazmat.primitives.hashes import SHA1
+
+
+class HOTP(object):
+    def __init__(self, secret, length, backend):
+        self.secret = secret
+        self.length = length
+        self.backend = backend
+
+    def generate(self, counter):
+        sbit = self._dynamic_truncate(counter)
+        return str(sbit % (10**self.length)).zfill(self.length)
+
+    def verify(self, hotp, counter):
+        return constant_time.bytes_eq(self.generate(counter), hotp)
+
+    def _dynamic_truncate(self, counter):
+        ctx = self.backend.create_hmac_ctx(self.secret, SHA1)
+        ctx.update(struct.pack(">Q", counter))
+        hmac_value = ctx.finalize()
+
+        offset_bits = ord(hmac_value[19]) & 0b1111
+        offset = int(offset_bits)
+        P = hmac_value[offset:offset+4]
+        return struct.unpack(">I", P)[0] & 0x7fffffff
diff --git a/tests/hazmat/oath/__init__.py b/tests/hazmat/oath/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/hazmat/oath/__init__.py
diff --git a/tests/hazmat/oath/test_hotp.py b/tests/hazmat/oath/test_hotp.py
new file mode 100644
index 0000000..7df0d4d
--- /dev/null
+++ b/tests/hazmat/oath/test_hotp.py
@@ -0,0 +1,53 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import pytest
+from cryptography.hazmat.oath.hotp import HOTP
+from tests.utils import load_vectors_from_file, load_nist_vectors
+
+vectors = load_vectors_from_file(
+    "oath/rfc-4226.txt", load_nist_vectors)
+
+
+@pytest.mark.oath
+class TestHOTP(object):
+
+    @pytest.mark.parametrize("params", vectors)
+    def test_truncate(self, backend, params):
+        secret = params["secret"]
+        counter = int(params["counter"])
+        truncated_value = params["truncated"]
+
+        hotp = HOTP(secret, 6, backend)
+
+        assert hex(hotp._dynamic_truncate(counter))[2:] == truncated_value
+
+    @pytest.mark.parametrize("params", vectors)
+    def test_generate(self, backend, params):
+        secret = params["secret"]
+        counter = int(params["counter"])
+        hotp_value = params["hotp"]
+
+        hotp = HOTP(secret, 6, backend)
+
+        assert hotp.generate(counter) == hotp_value
+
+    @pytest.mark.parametrize("params", vectors)
+    def test_validate(self, backend, params):
+        secret = params["secret"]
+        counter = int(params["counter"])
+        hotp_value = params["hotp"]
+
+        hotp = HOTP(secret, 6, backend)
+
+        assert hotp.verify(hotp_value, counter) is True
