Add EncryptionOperationsTest.AesCbcZeroInputSuccess

Check if the zero input data with AES-CBC-[NONE|PKCS7] padding mode
generates correct output data and length.

Bug: 200553873
Test: VtsHalKeymasterV4_0TargetTest, VtsAidlKeyMintTargetTest
Change-Id: I729c2bad65e9d8b194422032346e5ee3c4b0dce5
This commit is contained in:
Tommy Chiu
2021-09-23 20:09:13 +08:00
parent 7a0dff7492
commit e6f9ff6c19
2 changed files with 86 additions and 0 deletions

View File

@@ -3152,6 +3152,49 @@ TEST_P(EncryptionOperationsTest, AesCbcRoundTripSuccess) {
EXPECT_EQ(message, plaintext);
}
/*
* EncryptionOperationsTest.AesCbcZeroInputSuccessb
*
* Verifies that keymaster generates correct output on zero-input with
* NonePadding mode
*/
TEST_P(EncryptionOperationsTest, AesCbcZeroInputSuccess) {
ASSERT_EQ(ErrorCode::OK, GenerateKey(AuthorizationSetBuilder()
.Authorization(TAG_NO_AUTH_REQUIRED)
.AesEncryptionKey(128)
.BlockMode(BlockMode::CBC)
.Padding(PaddingMode::NONE, PaddingMode::PKCS7)));
// Zero input message
string message = "";
for (auto padding : {PaddingMode::NONE, PaddingMode::PKCS7}) {
auto params = AuthorizationSetBuilder().BlockMode(BlockMode::CBC).Padding(padding);
AuthorizationSet out_params;
string ciphertext1 = EncryptMessage(message, params, &out_params);
HidlBuf iv1 = CopyIv(out_params);
if (padding == PaddingMode::NONE)
EXPECT_EQ(message.size(), ciphertext1.size()) << "PaddingMode: " << padding;
else
EXPECT_EQ(message.size(), ciphertext1.size() - 16) << "PaddingMode: " << padding;
out_params.Clear();
string ciphertext2 = EncryptMessage(message, params, &out_params);
HidlBuf iv2 = CopyIv(out_params);
if (padding == PaddingMode::NONE)
EXPECT_EQ(message.size(), ciphertext2.size()) << "PaddingMode: " << padding;
else
EXPECT_EQ(message.size(), ciphertext2.size() - 16) << "PaddingMode: " << padding;
// IVs should be random
EXPECT_NE(iv1, iv2) << "PaddingMode: " << padding;
params.push_back(TAG_NONCE, iv1);
string plaintext = DecryptMessage(ciphertext1, params);
EXPECT_EQ(message, plaintext) << "PaddingMode: " << padding;
}
}
/*
* EncryptionOperationsTest.AesCallerNonce
*

View File

@@ -4664,6 +4664,49 @@ TEST_P(EncryptionOperationsTest, AesCbcRoundTripSuccess) {
EXPECT_EQ(message, plaintext);
}
/*
* EncryptionOperationsTest.AesCbcZeroInputSuccessb
*
* Verifies that keymaster generates correct output on zero-input with
* NonePadding mode
*/
TEST_P(EncryptionOperationsTest, AesCbcZeroInputSuccess) {
ASSERT_EQ(ErrorCode::OK, GenerateKey(AuthorizationSetBuilder()
.Authorization(TAG_NO_AUTH_REQUIRED)
.AesEncryptionKey(128)
.BlockMode(BlockMode::CBC)
.Padding(PaddingMode::NONE, PaddingMode::PKCS7)));
// Zero input message
string message = "";
for (auto padding : {PaddingMode::NONE, PaddingMode::PKCS7}) {
auto params = AuthorizationSetBuilder().BlockMode(BlockMode::CBC).Padding(padding);
AuthorizationSet out_params;
string ciphertext1 = EncryptMessage(message, params, &out_params);
vector<uint8_t> iv1 = CopyIv(out_params);
if (padding == PaddingMode::NONE)
EXPECT_EQ(message.size(), ciphertext1.size()) << "PaddingMode: " << padding;
else
EXPECT_EQ(message.size(), ciphertext1.size() - 16) << "PaddingMode: " << padding;
out_params.Clear();
string ciphertext2 = EncryptMessage(message, params, &out_params);
vector<uint8_t> iv2 = CopyIv(out_params);
if (padding == PaddingMode::NONE)
EXPECT_EQ(message.size(), ciphertext2.size()) << "PaddingMode: " << padding;
else
EXPECT_EQ(message.size(), ciphertext2.size() - 16) << "PaddingMode: " << padding;
// IVs should be random
EXPECT_NE(iv1, iv2) << "PaddingMode: " << padding;
params.push_back(TAG_NONCE, iv1);
string plaintext = DecryptMessage(ciphertext1, params);
EXPECT_EQ(message, plaintext) << "PaddingMode: " << padding;
}
}
/*
* EncryptionOperationsTest.AesCallerNonce
*