75 lines
2.5 KiB
C++
75 lines
2.5 KiB
C++
// Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
//
|
|
// Reference implementation utilities of OEMCrypto APIs
|
|
//
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "wvcrc32.h"
|
|
|
|
namespace wvoec {
|
|
namespace util {
|
|
uint32_t ComputeCrc32(const std::string& s) {
|
|
return wvcrc32(reinterpret_cast<const uint8_t*>(s.data()), s.size());
|
|
}
|
|
|
|
uint32_t ComputeCrc32Cont(const std::string& s, uint32_t prev_crc) {
|
|
return wvcrc32Cont(reinterpret_cast<const uint8_t*>(s.data()), s.size(),
|
|
prev_crc);
|
|
}
|
|
|
|
TEST(OEMCryptoWvCrc32Test, BasicTest) {
|
|
EXPECT_EQ(0xF88AC628u, ComputeCrc32("abcdefg"));
|
|
EXPECT_EQ(0xDF520F72u, ComputeCrc32("Widevine"));
|
|
EXPECT_EQ(0x0376E6E7u, ComputeCrc32("123456789"));
|
|
EXPECT_EQ(0xBA62119Eu,
|
|
ComputeCrc32("The quick brown fox jumps over the lazy dog"));
|
|
}
|
|
|
|
TEST(OEMCryptoWvCrc32Test, StreamTest) {
|
|
const std::vector<std::string> parts = {"The ", "quick", " brown ",
|
|
"fox", " jumps ", "over",
|
|
" the ", "lazy", " dog"};
|
|
uint32_t crc = wvcrc32Init();
|
|
for (const auto& part : parts) {
|
|
crc = ComputeCrc32Cont(part, crc);
|
|
}
|
|
EXPECT_EQ(0xBA62119Eu, crc);
|
|
}
|
|
|
|
TEST(OEMCryptoWvCrc32Test, Keybox) {
|
|
// clang-format off
|
|
const uint8_t kKeyboxData[128] = {
|
|
// deviceID = WidevineCRCTestKeyBox
|
|
0x57, 0x69, 0x64, 0x65, 0x76, 0x69, 0x6e, 0x65,
|
|
0x43, 0x52, 0x43, 0x54, 0x65, 0x73, 0x74, 0x4b,
|
|
0x65, 0x79, 0x62, 0x6f, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
// key = random
|
|
0x8a, 0x7c, 0xda, 0x3e, 0x09, 0xd9, 0x8e, 0xd5,
|
|
0x47, 0x47, 0x00, 0x84, 0x5a, 0x1f, 0x52, 0xd4,
|
|
// data = random
|
|
0x98, 0xa5, 0x00, 0x19, 0x8b, 0xfe, 0x54, 0xfd,
|
|
0xca, 0x4d, 0x26, 0xa3, 0xfa, 0xaa, 0x3b, 0x6c,
|
|
0x35, 0xfe, 0x03, 0x7c, 0xbf, 0x35, 0xba, 0xce,
|
|
0x31, 0xb5, 0x1e, 0x3c, 0x49, 0xd6, 0x3f, 0x9c,
|
|
0x3a, 0xde, 0x9b, 0x58, 0xcc, 0x54, 0x8d, 0xc0,
|
|
0x4b, 0x04, 0xcc, 0xee, 0xae, 0x4d, 0x9f, 0x90,
|
|
0xd3, 0xf3, 0xfe, 0x23, 0x26, 0x13, 0x56, 0x80,
|
|
0xe4, 0x3b, 0x79, 0x22, 0x69, 0x5d, 0xd6, 0xb7,
|
|
0xa0, 0x0e, 0x7e, 0x07, 0xcd, 0x1a, 0x15, 0xca,
|
|
// magic
|
|
'k', 'b', 'o', 'x',
|
|
// crc
|
|
0x09, 0x7b, 0x7e, 0xcc
|
|
};
|
|
// clang-format on
|
|
const uint32_t crc_computed = wvcrc32n(kKeyboxData, 124);
|
|
uint32_t crc_current;
|
|
memcpy(&crc_current, &kKeyboxData[124], 4);
|
|
EXPECT_EQ(crc_computed, crc_current);
|
|
}
|
|
} // namespace util
|
|
} // namespace wvoec
|