diff --git a/src/crypto-support/crypto-helper.cpp b/src/crypto-support/crypto-helper.cpp
index c93a29c..ea18dba 100644
--- a/src/crypto-support/crypto-helper.cpp
+++ b/src/crypto-support/crypto-helper.cpp
@@ -23,6 +23,7 @@
 
 #include <openssl/err.h>
 #include <openssl/pem.h>
+#include <openssl/hmac.h>
 
 #include <ndn-cxx/encoding/buffer-stream.hpp>
 #include <ndn-cxx/security/transform/base64-decode.hpp>
@@ -194,17 +195,9 @@
                         const uint8_t *key, const unsigned key_length,
                         uint8_t *prk)
 {
-  namespace t = ndn::security::transform;
-
-  t::PrivateKey privKey;
-  privKey.loadRaw(KeyType::HMAC, key, key_length);
-  OBufferStream os;
-
-  t::bufferSource(data, data_length)
-    >> t::signerFilter(DigestAlgorithm::SHA256, privKey)
-    >> t::streamSink(os);
-
-  memcpy(prk, os.buf()->data(), HASH_SIZE);
+  HMAC(EVP_sha256(), key, key_length,
+       (unsigned char*)data, data_length,
+       (unsigned char*)prk, nullptr);
   return 0;
 }
 
@@ -218,7 +211,13 @@
 
   // hkdf generate prk
   uint8_t prk[HASH_SIZE];
-  ndn_compute_hmac_sha256(salt, saltLen, secret, secretLen, prk);
+  if (saltLen == 0) {
+    uint8_t realSalt[HASH_SIZE] = {0};
+    ndn_compute_hmac_sha256(secret, secretLen, realSalt, HASH_SIZE, prk);
+  }
+  else {
+    ndn_compute_hmac_sha256(secret, secretLen, salt, saltLen, prk);
+  }
 
   // hkdf expand
   uint8_t prev[HASH_SIZE] = {0};
diff --git a/tests/unit-tests/crypto-helper.t.cpp b/tests/unit-tests/crypto-helper.t.cpp
index 6638515..eda32d1 100644
--- a/tests/unit-tests/crypto-helper.t.cpp
+++ b/tests/unit-tests/crypto-helper.t.cpp
@@ -19,7 +19,6 @@
  */
 
 #include "crypto-support/crypto-helper.hpp"
-
 #include "identity-management-fixture.hpp"
 
 namespace ndn {
@@ -28,7 +27,7 @@
 
 BOOST_AUTO_TEST_SUITE(TestCryptoHelper)
 
-BOOST_AUTO_TEST_CASE(Test0)
+BOOST_AUTO_TEST_CASE(EcdhWithRawKey)
 {
   ECDHState aliceState;
   auto alicePub = aliceState.getRawSelfPubKey();
@@ -38,13 +37,11 @@
   auto bobPub = bobState.getRawSelfPubKey();
   BOOST_CHECK(bobState.context->publicKeyLen != 0);
 
-  auto aliceResult = aliceState.deriveSecret(
-        bobPub, bobState.context->publicKeyLen);
+  auto aliceResult = aliceState.deriveSecret(bobPub, bobState.context->publicKeyLen);
 
   BOOST_CHECK(aliceState.context->sharedSecretLen != 0);
 
-  auto bobResult = bobState.deriveSecret(
-        alicePub, aliceState.context->publicKeyLen);
+  auto bobResult = bobState.deriveSecret(alicePub, aliceState.context->publicKeyLen);
 
   BOOST_CHECK(bobState.context->sharedSecretLen != 0);
 
@@ -52,7 +49,7 @@
                                 bobResult, bobResult + 32);
 }
 
-BOOST_AUTO_TEST_CASE(Test1)
+BOOST_AUTO_TEST_CASE(EcdhWithBase64Key)
 {
   ECDHState aliceState;
   auto alicePub = aliceState.getBase64PubKey();
@@ -72,64 +69,112 @@
                                 bobResult, bobResult + 32);
 }
 
-// Test case 2 from RFC 5869
-BOOST_AUTO_TEST_CASE(HkdfIetf2)
+BOOST_AUTO_TEST_CASE(HmacSha256)
 {
-  uint8_t secret[] = {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
-                      0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
-                      0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
-                      0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-                      0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
-                      0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
-                      0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
-                      0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
-                      0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,
-                      0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf};
+  // RFC5869 appendix A.1, IKM, Salt -> PRK
+  const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
+  const uint8_t salt[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+                          0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
+  const uint8_t expected[] = {0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf,
+                              0x0d, 0xdc, 0x3f, 0x0d, 0xc4, 0x7b, 0xba, 0x63,
+                              0x90, 0xb6, 0xc7, 0x3b, 0xb5, 0x0f, 0x9c, 0x31,
+                              0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5};
+  uint8_t result[32];
+  ndn_compute_hmac_sha256(ikm, sizeof(ikm), salt, sizeof(salt), result);
+  BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
+                                expected + sizeof(expected));
+}
 
-  uint8_t salt[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
-                    0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
-                    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-                    0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
-                    0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
-                    0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
-                    0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
-                    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
-                    0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
-                    0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
+BOOST_AUTO_TEST_CASE(Hkdf1)
+{
+  // RFC5869 appendix A.1
+  const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
+  const uint8_t salt[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+                          0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c};
+  const uint8_t info[] = {0xf0, 0xf1, 0xf2, 0xf3, 0xf4,
+                          0xf5, 0xf6, 0xf7, 0xf8, 0xf9};
+  const uint8_t expected[] = {
+      0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f,
+      0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a,
+      0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34,
+      0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65};
+  uint8_t result[42];
+  auto resultLen = hkdf(ikm, sizeof(ikm), salt, sizeof(salt), result,
+                        sizeof(result), info, sizeof(info));
 
-  uint8_t info[] = {0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,
-                    0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
-                    0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,
-                    0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
-                    0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,
-                    0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
-                    0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
-                    0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
-                    0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,
-                    0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};
+  BOOST_CHECK_EQUAL(resultLen, sizeof(result));
+  BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
+                                expected + sizeof(expected));
+}
 
-  uint8_t expected[] = {0xb1,0x1e,0x39,0x8d,0xc8,0x03,0x27,
-                        0xa1,0xc8,0xe7,0xf7,0x8c,0x59,0x6a,
-                        0x49,0x34,0x4f,0x01,0x2e,0xda,0x2d,
-                        0x4e,0xfa,0xd8,0xa0,0x50,0xcc,0x4c,
-                        0x19,0xaf,0xa9,0x7c,0x59,0x04,0x5a,
-                        0x99,0xca,0xc7,0x82,0x72,0x71,0xcb,
-                        0x41,0xc6,0x5e,0x59,0x0e,0x09,0xda,
-                        0x32,0x75,0x60,0x0c,0x2f,0x09,0xb8,
-                        0x36,0x77,0x93,0xa9,0xac,0xa3,0xdb,
-                        0x71,0xcc,0x30,0xc5,0x81,0x79,0xec,
-                        0x3e,0x87,0xc1,0x4c,0x01,0xd5,0xc1,
-                        0xf3,0x43,0x4f,0x1d,0x87};
+BOOST_AUTO_TEST_CASE(Hkdf2)
+{
+  // RFC5869 appendix A.2
+  const uint8_t ikm[] = {
+      0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
+      0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+      0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23,
+      0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+      0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
+      0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+      0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f};
+  const uint8_t salt[] = {
+      0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
+      0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+      0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
+      0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+      0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
+      0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+      0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf};
+  const uint8_t info[] = {
+      0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb,
+      0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+      0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3,
+      0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+      0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb,
+      0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+      0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff};
+  const uint8_t expected[] = {
+      0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c,
+      0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8,
+      0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99,
+      0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09,
+      0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9,
+      0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87,
+      0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87};
 
   uint8_t result[82];
-  auto resultLen = hkdf(secret, sizeof(secret),
-                        salt,sizeof(salt),
-                        result, sizeof(result),
-                        info, sizeof(info));
+  auto resultLen = hkdf(ikm, sizeof(ikm), salt, sizeof(salt), result,
+                        sizeof(result), info, sizeof(info));
 
-  BOOST_CHECK_EQUAL(resultLen, 82);
-  BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result),
-                                expected, expected + sizeof(expected));
+  BOOST_CHECK_EQUAL(resultLen, sizeof(result));
+  BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
+                                expected + sizeof(expected));
+}
+
+BOOST_AUTO_TEST_CASE(Hkdf3)
+{
+  // RFC5869 appendix A.3
+  const uint8_t ikm[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+                         0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b};
+  const uint8_t expected[] = {
+      0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80,
+      0x2a, 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1,
+      0x87, 0x9e, 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d,
+      0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8};
+  uint8_t result[42];
+
+  auto resultLen = hkdf(ikm, sizeof(ikm), nullptr, 0, result,
+                        sizeof(result), nullptr, 0);
+
+  BOOST_CHECK_EQUAL(resultLen, sizeof(result));
+  BOOST_CHECK_EQUAL_COLLECTIONS(result, result + sizeof(result), expected,
+                                expected + sizeof(expected));
 }
 
 BOOST_AUTO_TEST_SUITE_END()
