KeyMint VTS: x25519 pubkey as SubjectPublicKeyInfo

The data for a key agreement operation should always send in the
SubjectPublicKeyInfo structure, not a raw key for X25519.

Test: VtsAidlKeyMintTargetTest
Bug: 231959070
Change-Id: Ib5157da6a986d957162fab60dbe927017cfdd703
This commit is contained in:
David Drysdale
2022-05-09 16:44:13 +01:00
parent 80dee80bd6
commit a410b770e9

View File

@@ -7482,7 +7482,6 @@ class KeyAgreementTest : public KeyMintAidlTestBase {
uint8_t privKeyData[32];
uint8_t pubKeyData[32];
X25519_keypair(pubKeyData, privKeyData);
*localPublicKey = vector<uint8_t>(pubKeyData, pubKeyData + 32);
*localPrivKey = EVP_PKEY_Ptr(EVP_PKEY_new_raw_private_key(
EVP_PKEY_X25519, nullptr, privKeyData, sizeof(privKeyData)));
} else {
@@ -7494,16 +7493,15 @@ class KeyAgreementTest : public KeyMintAidlTestBase {
ASSERT_EQ(EC_KEY_generate_key(ecKey.get()), 1);
*localPrivKey = EVP_PKEY_Ptr(EVP_PKEY_new());
ASSERT_EQ(EVP_PKEY_set1_EC_KEY(localPrivKey->get(), ecKey.get()), 1);
// Get encoded form of the public part of the locally generated key...
unsigned char* p = nullptr;
int localPublicKeySize = i2d_PUBKEY(localPrivKey->get(), &p);
ASSERT_GT(localPublicKeySize, 0);
*localPublicKey =
vector<uint8_t>(reinterpret_cast<const uint8_t*>(p),
reinterpret_cast<const uint8_t*>(p + localPublicKeySize));
OPENSSL_free(p);
}
// Get encoded form of the public part of the locally generated key...
unsigned char* p = nullptr;
int localPublicKeySize = i2d_PUBKEY(localPrivKey->get(), &p);
ASSERT_GT(localPublicKeySize, 0);
*localPublicKey = vector<uint8_t>(reinterpret_cast<const uint8_t*>(p),
reinterpret_cast<const uint8_t*>(p + localPublicKeySize));
OPENSSL_free(p);
}
void GenerateKeyMintEcKey(EcCurve curve, EVP_PKEY_Ptr* kmPubKey) {
@@ -7598,6 +7596,9 @@ TEST_P(KeyAgreementTest, Ecdh) {
//
for (auto curve : ValidCurves()) {
for (auto localCurve : ValidCurves()) {
SCOPED_TRACE(testing::Message()
<< "local-curve-" << localCurve << "-keymint-curve-" << curve);
// Generate EC key locally (with access to private key material)
EVP_PKEY_Ptr localPrivKey;
vector<uint8_t> localPublicKey;