diff --git a/cryptography/hazmat/primitives/kdf/hkdf.py b/cryptography/hazmat/primitives/kdf/hkdf.py
new file mode 100644
index 0000000..8d36c80
--- /dev/null
+++ b/cryptography/hazmat/primitives/kdf/hkdf.py
@@ -0,0 +1,52 @@
+# 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.
+
+from cryptography.hazmat.primitives import hmac
+from cryptography.hazmat.primitives import hashes
+from cryptography.hazmat.primitives import constant_time
+
+def hkdf_derive(input_key, key_length, salt, info, hash, backend):
+    if hash is None:
+        hash = hashes.SHA256()
+
+    if info is None:
+        info = b""
+
+    if salt is None:
+        salt = b"\x00" * (hash.digest_size // 8)
+
+    h = hmac.HMAC(salt, hash, backend=backend)
+    h.update(input_key)
+    PRK = h.finalize()
+
+    output = [b'']
+    counter = 1
+
+    while (hash.digest_size // 8) * len(output) < key_length:
+        h = hmac.HMAC(PRK, hash, backend=backend)
+        h.update(output[-1])
+        h.update(info)
+        h.update(chr(counter))
+        output.append(h.finalize())
+        counter += 1
+
+    return b"".join(output)[:key_length]
+
+
+def hkdf_verify(expected, input_key, key_length, salt, info, hash, backend):
+    derived = hkdf_derive(input_key, key_length, salt=salt, info=info,
+                           hash=hash, backend=backend)
+
+    if not constant_time.bytes_eq(expected, derived):
+        raise ValueError("")
+
diff --git a/cryptography/hkdf.py b/cryptography/hkdf.py
deleted file mode 100644
index 9665ce5..0000000
--- a/cryptography/hkdf.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from cryptography.hazmat.backends import default_backend
-from cryptography.hazmat.primitives import hmac
-from cryptography.hazmat.primitives import hashes
-from cryptography.hazmat.primitives import constant_time
-
-def hkdf_derive(input_key, key_length, salt=None, info=None, hash=None, backend=None):
-    if hash is None:
-        hash = hashes.SHA256()
-
-    if backend is None:
-        backend = default_backend()
-
-    if info is None:
-        info = b""
-
-    if salt is None:
-        salt = b"\x00" * (hash.digest_size // 8)
-
-    h = hmac.HMAC(salt, hash, backend=backend)
-    h.update(input_key)
-    PRK = h.finalize()
-
-    output = [b'']
-    counter = 1
-
-    while (hash.digest_size // 8) * len(output) < key_length:
-        h = hmac.HMAC(PRK, hash, backend=backend)
-        h.update(output[-1])
-        h.update(info)
-        h.update(chr(counter))
-        output.append(h.finalize())
-        counter += 1
-
-    return b"".join(output)[:key_length]
-
-
-def hkdf_verify(expected, input_key, key_length, salt=None, info=None,
-                hash=None, backend=None):
-    derived = hkdf_derive(input_key, key_length, salt=salt, info=info,
-                           hash=hash, backend=backend)
-
-    return constant_time.bytes_eq(expected, derived)
-
diff --git a/tests/hazmat/primitives/test_hkdf_vectors.py b/tests/hazmat/primitives/test_hkdf_vectors.py
new file mode 100644
index 0000000..2595c95
--- /dev/null
+++ b/tests/hazmat/primitives/test_hkdf_vectors.py
@@ -0,0 +1,50 @@
+# 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.
+
+from __future__ import absolute_import, division, print_function
+
+import os
+
+import pytest
+
+from cryptography.hazmat.primitives import hashes
+
+from .utils import generate_hkdf_test
+from ...utils import load_hkdf_vectors
+
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA1()),
+    skip_message="Does not support SHA1."
+)
+@pytest.mark.hash
+class TestHKDFSHA1(object):
+    test_HKDFSHA1 = generate_hkdf_test(
+        load_hkdf_vectors,
+        os.path.join("kdf"),
+        ["rfc-5869-HKDF-SHA1.txt"],
+        hashes.SHA1()
+    )
+
+
+@pytest.mark.supported(
+    only_if=lambda backend: backend.hash_supported(hashes.SHA256()),
+    skip_message="Does not support SHA256."
+)
+@pytest.mark.hash
+class TestHKDFSHA256(object):
+    test_HKDFSHA1 = generate_hkdf_test(
+        load_hkdf_vectors,
+        os.path.join("kdf"),
+        ["rfc-5869-HKDF-SHA256.txt"],
+        hashes.SHA256()
+    )
diff --git a/tests/hazmat/primitives/utils.py b/tests/hazmat/primitives/utils.py
index 6b1d055..e546fa7 100644
--- a/tests/hazmat/primitives/utils.py
+++ b/tests/hazmat/primitives/utils.py
@@ -6,6 +6,8 @@
 from cryptography.hazmat.primitives import hashes, hmac
 from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
 from cryptography.hazmat.primitives.ciphers import Cipher
+from cryptography.hazmat.primitives.kdf.hkdf import hkdf_derive
+
 from cryptography.exceptions import (
     AlreadyFinalized, NotYetFinalized, AlreadyUpdated, InvalidTag,
 )
@@ -297,3 +299,32 @@
     )
     with pytest.raises(ValueError):
         cipher.encryptor()
+
+
+def hkdf_test(backend, algorithm, params):
+    ikm = params[0]
+    salt = params[1]
+    info = params[2]
+    length = params[3]
+    expected_okm = params[4]
+
+    okm = hkdf_derive(
+        binascii.unhexlify(ikm),
+        length,
+        binascii.unhexlify(salt),
+        binascii.unhexlify(info),
+        algorithm,
+        backend=backend
+    )
+
+    assert binascii.hexlify(okm) == expected_okm
+
+
+def generate_hkdf_test(param_loader, path, file_names, algorithm):
+    all_params = _load_all_params(path, file_names, param_loader)
+
+    @pytest.mark.parametrize("params", all_params)
+    def test_hkdf(self, backend, params):
+        hkdf_test(backend, algorithm, params)
+
+    return test_hkdf
diff --git a/tests/hazmat/primitives/vectors/KDF/rfc-5869-HKDF.txt b/tests/hazmat/primitives/vectors/KDF/rfc-5869-HKDF.txt
new file mode 100644
index 0000000..885a526
--- /dev/null
+++ b/tests/hazmat/primitives/vectors/KDF/rfc-5869-HKDF.txt
@@ -0,0 +1,83 @@
+# A.1.  Test Case 1
+# Basic test case with SHA-256
+
+Hash = SHA-256
+IKM  = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+salt = 000102030405060708090a0b0c
+info = f0f1f2f3f4f5f6f7f8f9
+L    = 42
+PRK  = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2b3e5
+OKM  = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865
+
+# A.2.  Test Case 2
+# Test with SHA-256 and longer inputs/outputs
+
+Hash = SHA-256
+IKM  = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+salt = 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+info = b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+L    = 82
+
+PRK  = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15fc244
+OKM  = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87
+
+# A.3.  Test Case 3
+# Test with SHA-256 and zero-length salt/info
+
+Hash = SHA-256
+IKM  = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+salt =
+info =
+L    = 42
+
+PRK  = 19ef24a32c717b167f33a91d6f648bdf96596776afdb6377ac434c1c293ccb04
+OKM  = 8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8
+
+# A.4.  Test Case 4
+# Basic test case with SHA-1
+
+Hash = SHA-1
+IKM  = 0b0b0b0b0b0b0b0b0b0b0b
+salt = 000102030405060708090a0b0c
+info = f0f1f2f3f4f5f6f7f8f9
+L    = 42
+
+PRK  = 9b6c18c432a7bf8f0e71c8eb88f4b30baa2ba243
+OKM  = 085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896
+
+# A.5.  Test Case 5
+# Test with SHA-1 and longer inputs/outputs
+
+Hash = SHA-1
+IKM  = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f
+salt = 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf
+info = b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
+L    = 82
+
+PRK  = 8adae09a2a307059478d309b26c4115a224cfaf6
+OKM  = 0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4
+
+# A.6.  Test Case 6
+# Test with SHA-1 and zero-length salt/info
+
+Hash = SHA-1
+IKM  = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+salt =
+info =
+L    = 42
+
+PRK  = da8c8a73c7fa77288ec6f5e7c297786aa0d32d01
+OKM  = 0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918
+
+# A.7.  Test Case 7
+# Test with SHA-1, salt not provided (defaults to HashLen zero octets),
+# zero-length info
+
+Hash = SHA-1
+IKM  = 0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
+salt = not provided (defaults to HashLen zero octets)
+info =
+L    = 42
+
+PRK  = 2adccada18779e7c2077ad2eb19d3f3e731385dd
+OKM  = 2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 8ecb33f..3bc4bf6 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -20,8 +20,8 @@
 
 from .utils import (
     load_nist_vectors, load_vectors_from_file, load_cryptrec_vectors,
-    load_openssl_vectors, load_hash_vectors, check_for_iface,
-    check_backend_support, select_backends
+    load_openssl_vectors, load_hash_vectors, load_hkdf_vectors,
+    check_for_iface, check_backend_support, select_backends
 )
 
 
@@ -529,3 +529,56 @@
          'ct': b'15c4db4cbb451211179d57017f',
          'fail': True},
     ]
+
+
+def test_load_hkdf_vectors():
+    vector_data = textwrap.dedent("""
+        # A.1.  Test Case 1
+        # Basic test case with SHA-256
+
+        Hash = SHA-256
+        IKM  = 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
+        salt = 000102030405060708090a0b0c
+        info = f0f1f2f3f4f5f6f7f8f9
+        L    = 42
+        """
+        "PRK  = 077709362c2e32df0ddc3f0dc47bba6390b6c73bb50f9c3122ec844ad7c2"
+        "b3e5\n"
+        "OKM  = 3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4"
+        "c5bf34007208d5b887185865\n"
+        """
+        # A.2.  Test Case 2
+        # Test with SHA-256 and longer inputs/outputs
+
+        Hash = SHA-256
+        """
+        "IKM  = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d"
+        "1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3"
+        "f404142434445464748494a4b4c4d4e4f\n"
+        "salt = \n"
+        "info = \n"
+        "L    = 82\n"
+        "PRK  = 06a6b88c5853361a06104c9ceb35b45cef760014904671014a193f40c15f"
+        "c244\n"
+        "OKM  = b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19af"
+        "a97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db7"
+        "1cc30c58179ec3e87c14c01d5c1f3434f1d87\n"
+    ).splitlines()
+
+    assert load_hkdf_vectors(vector_data) == [
+        (b"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
+         b"000102030405060708090a0b0c",
+         b"f0f1f2f3f4f5f6f7f8f9",
+         42,
+         b"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34"
+         b"007208d5b887185865"),
+        (b"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20"
+         b"2122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041"
+         b"42434445464748494a4b4c4d4e4f",
+         b"",
+         b"",
+         82,
+         b"b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59"
+         b"045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30"
+         b"c58179ec3e87c14c01d5c1f3434f1d87")
+    ]
diff --git a/tests/utils.py b/tests/utils.py
index 5c0e524..5f2c6ff 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -191,3 +191,47 @@
         else:
             raise ValueError("Unknown line in hash vector")
     return vectors
+
+
+def load_hkdf_vectors(vector_data):
+    vectors = []
+
+    ikm = None
+    salt = None
+    info = None
+    length = None
+    okm = None
+
+    for line in vector_data:
+        line = line.strip()
+
+        if not line or line.startswith("#"):
+            continue
+
+        elif line.startswith("IKM"):
+            ikm = line.split(" = ")[1].encode("ascii")
+        elif line.startswith("salt"):
+            l = line.split(" =")
+            if len(l) == 1:
+                salt = b""
+            else:
+                salt = l[1].strip().encode("ascii")
+        elif line.startswith("info"):
+            l = line.split(" =")
+            if len(l) == 1:
+                info = b""
+            else:
+                info = l[1].strip().encode("ascii")
+        elif line.startswith("L"):
+            length = int(line.split(" = ")[1])
+        elif line.startswith("OKM"):
+            okm = line.split(" = ")[1].encode("ascii")
+
+            vectors.append((ikm, salt, info, length, okm))
+            ikm = None
+            salt = None
+            info = None
+            length = None
+            okm = None
+
+    return vectors
