]> git.proxmox.com Git - mirror_edk2.git/commitdiff
CryptoPkg: add Hkdf UnitTest.
authorQi Zhang <qi1.zhang@intel.com>
Fri, 23 Sep 2022 06:25:09 +0000 (14:25 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Fri, 23 Sep 2022 07:35:08 +0000 (07:35 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4033

Signed-off-by: Qi Zhang <qi1.zhang@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Xiaoyu Lu <xiaoyu1.lu@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
CryptoPkg/Test/UnitTest/Library/BaseCryptLib/BaseCryptLibUnitTests.c
CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HkdfTests.c [new file with mode: 0644]
CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLib.h
CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibHost.inf
CryptoPkg/Test/UnitTest/Library/BaseCryptLib/TestBaseCryptLibShell.inf

index 3c57aead1e39de739d94c98672a16f9db77f8d83..dc81143b4322b7982f2ca84258c849db279f5018 100644 (file)
@@ -11,20 +11,21 @@ SUITE_DESC  mSuiteDesc[] = {
   //\r
   // Title--------------------------Package-------------------Sup--Tdn----TestNum------------TestDesc\r
   //\r
-  { "EKU verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum,       mPkcs7EkuTest       },\r
-  { "HASH verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum,           mHashTest           },\r
-  { "HMAC verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum,           mHmacTest           },\r
-  { "BlockCipher verify tests",    "CryptoPkg.BaseCryptLib", NULL, NULL, &mBlockCipherTestNum,    mBlockCipherTest    },\r
-  { "RSA verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum,            mRsaTest            },\r
-  { "RSA PSS verify tests",        "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaPssTestNum,         mRsaPssTest         },\r
-  { "RSACert verify tests",        "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum,        mRsaCertTest        },\r
-  { "PKCS7 verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum,          mPkcs7Test          },\r
-  { "PKCS5 verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum,          mPkcs5Test          },\r
-  { "Authenticode verify tests",   "CryptoPkg.BaseCryptLib", NULL, NULL, &mAuthenticodeTestNum,   mAuthenticodeTest   },\r
-  { "ImageTimestamp verify tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mImageTimestampTestNum, mImageTimestampTest },\r
-  { "DH verify tests",             "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum,             mDhTest             },\r
-  { "PRNG verify tests",           "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum,           mPrngTest           },\r
-  { "OAEP encrypt verify tests",   "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum,           mOaepTest           },\r
+  { "EKU verify tests",              "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7EkuTestNum,       mPkcs7EkuTest       },\r
+  { "HASH verify tests",             "CryptoPkg.BaseCryptLib", NULL, NULL, &mHashTestNum,           mHashTest           },\r
+  { "HMAC verify tests",             "CryptoPkg.BaseCryptLib", NULL, NULL, &mHmacTestNum,           mHmacTest           },\r
+  { "BlockCipher verify tests",      "CryptoPkg.BaseCryptLib", NULL, NULL, &mBlockCipherTestNum,    mBlockCipherTest    },\r
+  { "RSA verify tests",              "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaTestNum,            mRsaTest            },\r
+  { "RSA PSS verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaPssTestNum,         mRsaPssTest         },\r
+  { "RSACert verify tests",          "CryptoPkg.BaseCryptLib", NULL, NULL, &mRsaCertTestNum,        mRsaCertTest        },\r
+  { "PKCS7 verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs7TestNum,          mPkcs7Test          },\r
+  { "PKCS5 verify tests",            "CryptoPkg.BaseCryptLib", NULL, NULL, &mPkcs5TestNum,          mPkcs5Test          },\r
+  { "Authenticode verify tests",     "CryptoPkg.BaseCryptLib", NULL, NULL, &mAuthenticodeTestNum,   mAuthenticodeTest   },\r
+  { "ImageTimestamp verify tests",   "CryptoPkg.BaseCryptLib", NULL, NULL, &mImageTimestampTestNum, mImageTimestampTest },\r
+  { "DH verify tests",               "CryptoPkg.BaseCryptLib", NULL, NULL, &mDhTestNum,             mDhTest             },\r
+  { "PRNG verify tests",             "CryptoPkg.BaseCryptLib", NULL, NULL, &mPrngTestNum,           mPrngTest           },\r
+  { "OAEP encrypt verify tests",     "CryptoPkg.BaseCryptLib", NULL, NULL, &mOaepTestNum,           mOaepTest           },\r
+  { "Hkdf extract and expand tests", "CryptoPkg.BaseCryptLib", NULL, NULL, &mHkdfTestNum,           mHkdfTest           },\r
 };\r
 \r
 EFI_STATUS\r
diff --git a/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HkdfTests.c b/CryptoPkg/Test/UnitTest/Library/BaseCryptLib/HkdfTests.c
new file mode 100644 (file)
index 0000000..bb2b5ea
--- /dev/null
@@ -0,0 +1,202 @@
+/** @file\r
+  Application for Hkdf Primitives Validation.\r
+\r
+Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include "TestBaseCryptLib.h"\r
+\r
+/**\r
+ * HKDF KAT from RFC 5869 Appendix A. Test Vectors\r
+ * https://www.rfc-editor.org/rfc/rfc5869.html\r
+ **/\r
+UINT8  mHkdfSha256Ikm[22] = {\r
+  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,\r
+  0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,\r
+  0x0b, 0x0b\r
+};\r
+\r
+UINT8  mHkdfSha256Salt[13] = {\r
+  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,\r
+  0x0a, 0x0b, 0x0c,\r
+};\r
+\r
+UINT8  mHkdfSha256Info[10] = {\r
+  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,\r
+};\r
+\r
+UINT8  mHkdfSha256Prk[32] = {\r
+  0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf, 0x0d, 0xdc,\r
+  0x3f, 0x0d, 0xc4, 0x7b, 0xba, 0x63, 0x90, 0xb6, 0xc7, 0x3b,\r
+  0xb5, 0x0f, 0x9c, 0x31, 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2,\r
+  0xb3, 0xe5,\r
+};\r
+\r
+UINT8  mHkdfSha256Okm[42] = {\r
+  0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43,\r
+  0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90,\r
+  0xcf, 0x1a, 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4,\r
+  0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18,\r
+  0x58, 0x65,\r
+};\r
+\r
+/**\r
+ * This Hkdf-Sha384 test vector is form Project Wycheproof\r
+ * developed and maintained by members of Google Security Team.\r
+ * https://github.com/google/wycheproof/blob/master/testvectors/hkdf_sha384_test.json\r
+ **/\r
+UINT8  mHkdfSha384Ikm[16] = {\r
+  0x86, 0x77, 0xdc, 0x79, 0x23, 0x3e, 0xf3, 0x48, 0x07, 0x77,\r
+  0xc4, 0xc6, 0x01, 0xef, 0x4f, 0x0b,\r
+};\r
+\r
+UINT8  mHkdfSha384Salt[16] = {\r
+  0xad, 0x88, 0xdb, 0x71, 0x82, 0x44, 0xe2, 0xcb, 0x60, 0xe3,\r
+  0x5f, 0x87, 0x4d, 0x7a, 0xd8, 0x1f,\r
+};\r
+\r
+UINT8  mHkdfSha384Info[20] = {\r
+  0xa3, 0x8f, 0x63, 0x4d, 0x94, 0x78, 0x19, 0xa9, 0xbf, 0xa7,\r
+  0x92, 0x17, 0x4b, 0x42, 0xba, 0xa2, 0x0c, 0x9f, 0xce, 0x15,\r
+};\r
+\r
+UINT8  mHkdfSha384Prk[48] = {\r
+  0x60, 0xae, 0xa0, 0xde, 0xca, 0x97, 0x62, 0xaa, 0x43, 0xaf,\r
+  0x0e, 0x77, 0xa8, 0x0f, 0xb7, 0x76, 0xd0, 0x08, 0x19, 0x62,\r
+  0xf8, 0x30, 0xb5, 0x0d, 0x92, 0x08, 0x92, 0x7a, 0x8a, 0xd5,\r
+  0x6a, 0x3d, 0xc4, 0x4a, 0x5d, 0xfe, 0xb6, 0xb4, 0x79, 0x2f,\r
+  0x97, 0x92, 0x71, 0xe6, 0xcb, 0x08, 0x86, 0x52,\r
+};\r
+\r
+UINT8  mHkdfSha384Okm[64] = {\r
+  0x75, 0x85, 0x46, 0x36, 0x2a, 0x07, 0x0c, 0x0f, 0x13, 0xcb,\r
+  0xfb, 0xf1, 0x75, 0x6e, 0x8f, 0x29, 0xb7, 0x81, 0x9f, 0xb9,\r
+  0x03, 0xc7, 0xed, 0x4f, 0x97, 0xa5, 0x6b, 0xe3, 0xc8, 0xf8,\r
+  0x1e, 0x8c, 0x37, 0xae, 0xf5, 0xc0, 0xf8, 0xe5, 0xd2, 0xb1,\r
+  0x7e, 0xb1, 0xaa, 0x02, 0xec, 0x04, 0xc3, 0x3f, 0x54, 0x6c,\r
+  0xb2, 0xf3, 0xd1, 0x93, 0xe9, 0x30, 0xa9, 0xf8, 0x9e, 0xc9,\r
+  0xce, 0x3a, 0x82, 0xb5\r
+};\r
+\r
+UNIT_TEST_STATUS\r
+EFIAPI\r
+TestVerifyHkdfSha256 (\r
+  IN UNIT_TEST_CONTEXT  Context\r
+  )\r
+{\r
+  UINT8    PrkOut[32];\r
+  UINT8    Out[42];\r
+  BOOLEAN  Status;\r
+\r
+  /* HKDF-SHA-256 digest Validation*/\r
+\r
+  ZeroMem (PrkOut, sizeof (PrkOut));\r
+  Status = HkdfSha256Extract (\r
+             mHkdfSha256Ikm,\r
+             sizeof (mHkdfSha256Ikm),\r
+             mHkdfSha256Salt,\r
+             sizeof (mHkdfSha256Salt),\r
+             PrkOut,\r
+             sizeof (PrkOut)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (PrkOut, mHkdfSha256Prk, sizeof (mHkdfSha256Prk));\r
+\r
+  ZeroMem (Out, sizeof (Out));\r
+  Status = HkdfSha256Expand (\r
+             mHkdfSha256Prk,\r
+             sizeof (mHkdfSha256Prk),\r
+             mHkdfSha256Info,\r
+             sizeof (mHkdfSha256Info),\r
+             Out,\r
+             sizeof (Out)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (Out, mHkdfSha256Okm, sizeof (mHkdfSha256Okm));\r
+\r
+  ZeroMem (Out, sizeof (Out));\r
+  Status = HkdfSha256ExtractAndExpand (\r
+             mHkdfSha256Ikm,\r
+             sizeof (mHkdfSha256Ikm),\r
+             mHkdfSha256Salt,\r
+             sizeof (mHkdfSha256Salt),\r
+             mHkdfSha256Info,\r
+             sizeof (mHkdfSha256Info),\r
+             Out,\r
+             sizeof (Out)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (Out, mHkdfSha256Okm, sizeof (mHkdfSha256Okm));\r
+\r
+  return UNIT_TEST_PASSED;\r
+}\r
+\r
+UNIT_TEST_STATUS\r
+EFIAPI\r
+TestVerifyHkdfSha384 (\r
+  IN UNIT_TEST_CONTEXT  Context\r
+  )\r
+{\r
+  UINT8    PrkOut[48];\r
+  UINT8    Out[64];\r
+  BOOLEAN  Status;\r
+\r
+  /* HKDF-SHA-384 digest Validation*/\r
+  ZeroMem (PrkOut, sizeof (PrkOut));\r
+  Status = HkdfSha384Extract (\r
+             mHkdfSha384Ikm,\r
+             sizeof (mHkdfSha384Ikm),\r
+             mHkdfSha384Salt,\r
+             sizeof (mHkdfSha384Salt),\r
+             PrkOut,\r
+             sizeof (PrkOut)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (PrkOut, mHkdfSha384Prk, sizeof (mHkdfSha384Prk));\r
+\r
+  ZeroMem (Out, sizeof (Out));\r
+  Status = HkdfSha384Expand (\r
+             mHkdfSha384Prk,\r
+             sizeof (mHkdfSha384Prk),\r
+             mHkdfSha384Info,\r
+             sizeof (mHkdfSha384Info),\r
+             Out,\r
+             sizeof (Out)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (Out, mHkdfSha384Okm, sizeof (mHkdfSha384Okm));\r
+\r
+  ZeroMem (Out, sizeof (Out));\r
+  Status = HkdfSha384ExtractAndExpand (\r
+             mHkdfSha384Ikm,\r
+             sizeof (mHkdfSha384Ikm),\r
+             mHkdfSha384Salt,\r
+             sizeof (mHkdfSha384Salt),\r
+             mHkdfSha384Info,\r
+             sizeof (mHkdfSha384Info),\r
+             Out,\r
+             sizeof (Out)\r
+             );\r
+  UT_ASSERT_TRUE (Status);\r
+\r
+  UT_ASSERT_MEM_EQUAL (Out, mHkdfSha384Okm, sizeof (mHkdfSha384Okm));\r
+\r
+  return UNIT_TEST_PASSED;\r
+}\r
+\r
+TEST_DESC  mHkdfTest[] = {\r
+  //\r
+  // -----Description--------------------------------------Class----------------------Function---------------------------------Pre---------------------Post---------Context\r
+  //\r
+  { "TestVerifyHkdfSha256()", "CryptoPkg.BaseCryptLib.Hkdf", TestVerifyHkdfSha256, NULL, NULL, NULL },\r
+  { "TestVerifyHkdfSha384()", "CryptoPkg.BaseCryptLib.Hkdf", TestVerifyHkdfSha384, NULL, NULL, NULL },\r
+};\r
+\r
+UINTN  mHkdfTestNum = ARRAY_SIZE (mHkdfTest);\r
index a6b348274234e01fc6a6ccf438b634654b1fafe8..b3aff8657091067a97a4937000a8e19f08993f8e 100644 (file)
@@ -86,6 +86,9 @@ extern TEST_DESC  mOaepTest[];
 extern UINTN      mRsaPssTestNum;\r
 extern TEST_DESC  mRsaPssTest[];\r
 \r
+extern UINTN      mHkdfTestNum;\r
+extern TEST_DESC  mHkdfTest[];\r
+\r
 /** Creates a framework you can use */\r
 EFI_STATUS\r
 EFIAPI\r
index 399db596c2d14987b6d1240d76e182a96f0010b5..e51877bded68e21f70d3e3cddf33774acb31c67c 100644 (file)
@@ -37,6 +37,7 @@
   OaepEncryptTests.c\r
   RsaPssTests.c\r
   ParallelhashTests.c\r
+  HkdfTests.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
index ca789aa6ada3b6f5097f6deb9cb927b1cde103da..81469f48e79a5c3094a803a862574237ac902c82 100644 (file)
@@ -36,6 +36,7 @@
   Pkcs7EkuTests.c\r
   OaepEncryptTests.c\r
   RsaPssTests.c\r
+  HkdfTests.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r