Merge "Test Simultaneous decrypt and remove NULL pointer comparison" into nyc-dev

This commit is contained in:
Rahul Frias
2016-02-11 17:51:42 +00:00
committed by Android (Google) Code Review
2 changed files with 58 additions and 8 deletions

View File

@@ -357,7 +357,6 @@ bool InitializationData::ConstructWidevineInitData(
json_init_data.size()); json_init_data.size());
// Parse the Json string using jsmn // Parse the Json string using jsmn
int result = 0;
jsmn_parser parser; jsmn_parser parser;
jsmntok_t tokens[kDefaultNumJsonTokens]; jsmntok_t tokens[kDefaultNumJsonTokens];
jsmn_init(&parser); jsmn_init(&parser);

View File

@@ -526,7 +526,7 @@ static void dump_openssl_error() {
// is different from the OpenSSL implementation, so we implement the CTR loop // is different from the OpenSSL implementation, so we implement the CTR loop
// ourselves. // ourselves.
void ctr128_inc64(int64_t increaseBy, uint8_t* iv) { void ctr128_inc64(int64_t increaseBy, uint8_t* iv) {
ASSERT_TRUE(NULL != iv); ASSERT_NE(static_cast<void*>(NULL), iv);
uint64_t* counterBuffer = reinterpret_cast<uint64_t*>(&iv[8]); uint64_t* counterBuffer = reinterpret_cast<uint64_t*>(&iv[8]);
(*counterBuffer) = (*counterBuffer) =
wvcdm::htonll64(wvcdm::ntohll64(*counterBuffer) + increaseBy); wvcdm::htonll64(wvcdm::ntohll64(*counterBuffer) + increaseBy);
@@ -877,9 +877,9 @@ class Session {
void EncryptCTR(const vector<uint8_t>& in_buffer,const uint8_t *key, void EncryptCTR(const vector<uint8_t>& in_buffer,const uint8_t *key,
const uint8_t* starting_iv, const uint8_t* starting_iv,
vector<uint8_t>* out_buffer) { vector<uint8_t>* out_buffer) {
ASSERT_TRUE(NULL != key); ASSERT_NE(static_cast<void*>(NULL), key);
ASSERT_TRUE(NULL != starting_iv); ASSERT_NE(static_cast<void*>(NULL), starting_iv);
ASSERT_TRUE(NULL != out_buffer); ASSERT_NE(static_cast<void*>(NULL), out_buffer);
AES_KEY aes_key; AES_KEY aes_key;
AES_set_encrypt_key(key, AES_BLOCK_SIZE * 8, &aes_key); AES_set_encrypt_key(key, AES_BLOCK_SIZE * 8, &aes_key);
out_buffer->resize(in_buffer.size()); out_buffer->resize(in_buffer.size());
@@ -1646,9 +1646,7 @@ TEST_F(OEMCryptoKeyboxTest, NormalGetKeyData) {
ASSERT_EQ(OEMCrypto_SUCCESS, sts); ASSERT_EQ(OEMCrypto_SUCCESS, sts);
} }
// TODO(fredgc): warn people that this will be turned on. It causes a TEST_F(OEMCryptoKeyboxTest, GetKeyDataNullPointer) {
// seg fault on some devices at the moment.
TEST_F(OEMCryptoKeyboxTest, DISABLED_GetKeyDataNullPointer) {
OEMCryptoResult sts; OEMCryptoResult sts;
uint8_t key_data[256]; uint8_t key_data[256];
sts = OEMCrypto_GetKeyData(key_data, NULL); sts = OEMCrypto_GetKeyData(key_data, NULL);
@@ -2366,6 +2364,59 @@ TEST_F(OEMCryptoSessionTests, DecryptZeroDuration) {
ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR()); ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR());
} }
TEST_F(OEMCryptoSessionTests, SimultaneousDecrypt) {
vector<Session> s(8);
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].open());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].GenerateTestSessionKeys());
ASSERT_NO_FATAL_FAILURE(s[i].FillSimpleMessage(kDuration, 0,
s[i].get_nonce()));
ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].LoadTestKeys());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR());
}
// Second call to decrypt for each session.
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR());
}
}
TEST_F(OEMCryptoSessionTests, SimultaneousDecryptWithLostMessage) {
vector<Session> s(8);
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].open());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].GenerateTestSessionKeys());
ASSERT_NO_FATAL_FAILURE(s[i].FillSimpleMessage(kDuration, 0,
s[i].get_nonce()));
ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign());
}
// First set of messages are lost. Generate second set.
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].GenerateTestSessionKeys());
ASSERT_NO_FATAL_FAILURE(s[i].FillSimpleMessage(kDuration, 0,
s[i].get_nonce()));
ASSERT_NO_FATAL_FAILURE(s[i].EncryptAndSign());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].LoadTestKeys());
}
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR());
}
// Second call to decrypt for each session.
for (int i = 0; i < 8; i++) {
ASSERT_NO_FATAL_FAILURE(s[i].TestDecryptCTR());
}
}
struct SampleSize { struct SampleSize {
size_t clear_size; size_t clear_size;
size_t encrypted_size; size_t encrypted_size;