xtest: pkcs11: Add tests for random number generation
Add test case to test calling for C_SeedRandom() and C_GenerateRandom().
Reviewed-by: Ruchika Gupta <ruchika.gupta@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Vesa Jääskeläinen <vesa.jaaskelainen@vaisala.com>
diff --git a/host/xtest/pkcs11_1000.c b/host/xtest/pkcs11_1000.c
index a7d7a31..3c8ee97 100644
--- a/host/xtest/pkcs11_1000.c
+++ b/host/xtest/pkcs11_1000.c
@@ -3652,3 +3652,92 @@
}
ADBG_CASE_DEFINE(pkcs11, 1015, xtest_pkcs11_test_1015,
"PKCS11: Test C_CopyObject()");
+
+static void xtest_pkcs11_test_1016(ADBG_Case_t *c)
+{
+ CK_RV rv = CKR_GENERAL_ERROR;
+ CK_SLOT_ID slot = 0;
+ CK_SESSION_HANDLE session = CK_INVALID_HANDLE;
+ CK_FLAGS session_flags = CKF_SERIAL_SESSION | CKF_RW_SESSION;
+ uint8_t buffer[64] = { 0 };
+ size_t i = 0;
+
+ rv = init_lib_and_find_token_slot(&slot);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ return;
+
+ rv = init_test_token(slot);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto close_lib;
+
+ rv = init_user_test_token(slot);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto close_lib;
+
+ rv = C_OpenSession(slot, session_flags, NULL, 0, &session);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto close_lib;
+
+ Do_ADBG_BeginSubCase(c, "Seed random bytes");
+
+ memset(buffer, 0xCC, sizeof(buffer));
+
+ rv = C_SeedRandom(session, buffer, sizeof(buffer));
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto out;
+
+ Do_ADBG_EndSubCase(c, NULL);
+
+ Do_ADBG_BeginSubCase(c, "Seed random bytes with zero length buffer");
+
+ rv = C_SeedRandom(session, buffer, 0);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto out;
+
+ rv = C_SeedRandom(session, NULL, 0);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto out;
+
+ Do_ADBG_EndSubCase(c, NULL);
+
+ Do_ADBG_BeginSubCase(c, "Generate random bytes");
+
+ memset(buffer, 0xCC, sizeof(buffer));
+
+ rv = C_GenerateRandom(session, buffer, 61);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto out;
+
+ /* Verify that end of buffer is still 0xCC */
+ for (i = 61; i < sizeof(buffer); i++)
+ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, buffer[i], ==, 0xCC))
+ break;
+
+ Do_ADBG_EndSubCase(c, NULL);
+
+ Do_ADBG_BeginSubCase(c, "Generate random bytes with zero length buffer");
+
+ memset(buffer, 0xCC, sizeof(buffer));
+
+ rv = C_GenerateRandom(session, buffer, 0);
+ if (!ADBG_EXPECT_CK_OK(c, rv))
+ goto out;
+
+ /* Verify that whole buffer is still 0xCC */
+ for (i = 0; i < sizeof(buffer); i++)
+ if (!ADBG_EXPECT_COMPARE_UNSIGNED(c, buffer[i], ==, 0xCC))
+ break;
+
+ rv = C_GenerateRandom(session, NULL, 0);
+ ADBG_EXPECT_CK_OK(c, rv);
+
+out:
+ Do_ADBG_EndSubCase(c, NULL);
+
+ ADBG_EXPECT_CK_OK(c, C_CloseSession(session));
+
+close_lib:
+ ADBG_EXPECT_CK_OK(c, close_lib());
+}
+ADBG_CASE_DEFINE(pkcs11, 1016, xtest_pkcs11_test_1016,
+ "PKCS11: Random number generator tests");