Skip to content

Commit 8924c73

Browse files
committed
Added negative testing for initialized keys
1 parent de1690e commit 8924c73

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

crypto/evp_extra/p_kem_test.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,3 +927,44 @@ TEST(KEMTest, InvalidSeedLength) {
927927

928928
OPENSSL_free(der_priv);
929929
}
930+
931+
TEST_P(KEMTest, SetRawKeypairFromSeedOnInitializedKey) {
932+
// Test that KEM_KEY_set_raw_keypair_from_seed fails when called on an
933+
// already initialized key. This should trigger the "Ensure key is uninitialized"
934+
// check and fail with ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
935+
936+
const KEMTestVector &test = GetParam();
937+
938+
// ---- 1. Create and initialize a KEM_KEY ----
939+
KEM_KEY *key = KEM_KEY_new();
940+
ASSERT_TRUE(key);
941+
942+
const KEM *kem = KEM_find_kem_by_nid(test.nid);
943+
ASSERT_TRUE(kem);
944+
ASSERT_TRUE(KEM_KEY_init(key, kem));
945+
946+
// ---- 2. Pre-initialize the key by setting a public key ----
947+
std::vector<uint8_t> dummy_public_key(kem->public_key_len, 0x42);
948+
ASSERT_TRUE(KEM_KEY_set_raw_public_key(key, dummy_public_key.data()));
949+
950+
// ---- 3. Create a valid 64-byte seed ----
951+
std::vector<uint8_t> seed(64);
952+
for (size_t i = 0; i < 64; i++) {
953+
seed[i] = static_cast<uint8_t>(i);
954+
}
955+
956+
CBS seed_cbs;
957+
CBS_init(&seed_cbs, seed.data(), seed.size());
958+
959+
// ---- 4. Try to call KEM_KEY_set_raw_keypair_from_seed on the already initialized key ----
960+
// This should fail because key->public_key is not NULL
961+
ASSERT_FALSE(KEM_KEY_set_raw_keypair_from_seed(key, &seed_cbs));
962+
963+
// ---- 5. Verify the correct error was set ----
964+
uint32_t err = ERR_get_error();
965+
EXPECT_EQ(ERR_GET_LIB(err), ERR_LIB_CRYPTO);
966+
EXPECT_EQ(ERR_GET_REASON(err), ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
967+
968+
// ---- 6. Clean up ----
969+
KEM_KEY_free(key);
970+
}

0 commit comments

Comments
 (0)