|
|
|
@ -34,7 +34,7 @@ class AesCtrDecryptorTest : public ::testing::Test {
|
|
|
|
|
uint8_t* destination, const SubSample* subSamples,
|
|
|
|
|
size_t numSubSamples, size_t* bytesDecryptedOut) {
|
|
|
|
|
Vector<uint8_t> keyVector;
|
|
|
|
|
keyVector.appendArray(key, kBlockSize);
|
|
|
|
|
keyVector.appendArray(key, sizeof(key) / sizeof(uint8_t));
|
|
|
|
|
|
|
|
|
|
AesCtrDecryptor decryptor;
|
|
|
|
|
return decryptor.decrypt(keyVector, iv, source, destination, subSamples,
|
|
|
|
@ -57,6 +57,67 @@ class AesCtrDecryptorTest : public ::testing::Test {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TEST_F(AesCtrDecryptorTest, DecryptsWithEmptyKey) {
|
|
|
|
|
const size_t kTotalSize = 64;
|
|
|
|
|
const size_t kNumSubsamples = 1;
|
|
|
|
|
|
|
|
|
|
// Test vectors from NIST-800-38A
|
|
|
|
|
Iv iv = {
|
|
|
|
|
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
|
|
|
|
|
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
uint8_t source[kTotalSize] = { 0 };
|
|
|
|
|
uint8_t destination[kTotalSize] = { 0 };
|
|
|
|
|
SubSample subSamples[kNumSubsamples] = {
|
|
|
|
|
{0, 64}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
size_t bytesDecrypted = 0;
|
|
|
|
|
Vector<uint8_t> keyVector;
|
|
|
|
|
keyVector.clear();
|
|
|
|
|
|
|
|
|
|
AesCtrDecryptor decryptor;
|
|
|
|
|
ASSERT_EQ(android::ERROR_DRM_DECRYPT, decryptor.decrypt(keyVector, iv,
|
|
|
|
|
&source[0], &destination[0],
|
|
|
|
|
&subSamples[0], kNumSubsamples, &bytesDecrypted));
|
|
|
|
|
ASSERT_EQ(0u, bytesDecrypted);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(AesCtrDecryptorTest, DecryptsWithKeyTooLong) {
|
|
|
|
|
const size_t kTotalSize = 64;
|
|
|
|
|
const size_t kNumSubsamples = 1;
|
|
|
|
|
|
|
|
|
|
// Test vectors from NIST-800-38A
|
|
|
|
|
uint8_t key[kBlockSize * 2] = {
|
|
|
|
|
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
|
|
|
|
|
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c,
|
|
|
|
|
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
|
|
|
|
|
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Iv iv = {
|
|
|
|
|
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
|
|
|
|
|
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
uint8_t source[kTotalSize] = { 0 };
|
|
|
|
|
uint8_t destination[kTotalSize] = { 0 };
|
|
|
|
|
SubSample subSamples[kNumSubsamples] = {
|
|
|
|
|
{0, 64}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
size_t bytesDecrypted = 0;
|
|
|
|
|
Vector<uint8_t> keyVector;
|
|
|
|
|
keyVector.appendArray(key, sizeof(key) / sizeof(uint8_t));
|
|
|
|
|
|
|
|
|
|
AesCtrDecryptor decryptor;
|
|
|
|
|
ASSERT_EQ(android::ERROR_DRM_DECRYPT, decryptor.decrypt(keyVector, iv,
|
|
|
|
|
&source[0], &destination[0],
|
|
|
|
|
&subSamples[0], kNumSubsamples, &bytesDecrypted));
|
|
|
|
|
ASSERT_EQ(0u, bytesDecrypted);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(AesCtrDecryptorTest, DecryptsContiguousEncryptedBlock) {
|
|
|
|
|
const size_t kTotalSize = 64;
|
|
|
|
|
const size_t kNumSubsamples = 1;
|
|
|
|
|