// Copyright 2013 Google Inc. All Rights Reserved. // // OEMCrypto unit tests // #include #include #include #include #include #include "OEMCryptoCENC.h" #include "string_conversions.h" #include "wv_cdm_constants.h" #include "wv_keybox.h" using namespace std; namespace wvoec { static wvoec_mock::WidevineKeybox kValidKeybox02 = { // Sample keybox used for test vectors { // deviceID 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x30, // TestKey02 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ }, { // key 0x76, 0x5d, 0xce, 0x01, 0x04, 0x89, 0xb3, 0xd0, 0xdf, 0xce, 0x54, 0x8a, 0x49, 0xda, 0xdc, 0xb6, }, { // data 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x19, 0x92, 0x27, 0x0b, 0x1f, 0x1a, 0xd5, 0xc6, 0x93, 0x19, 0x3f, 0xaa, 0x74, 0x1f, 0xdd, 0x5f, 0xb4, 0xe9, 0x40, 0x2f, 0x34, 0xa4, 0x92, 0xf4, 0xae, 0x9a, 0x52, 0x39, 0xbc, 0xb7, 0x24, 0x38, 0x13, 0xab, 0xf4, 0x92, 0x96, 0xc4, 0x81, 0x60, 0x33, 0xd8, 0xb8, 0x09, 0xc7, 0x55, 0x0e, 0x12, 0xfa, 0xa8, 0x98, 0x62, 0x8a, 0xec, 0xea, 0x74, 0x8a, 0x4b, 0xfa, 0x5a, 0x9e, 0xb6, 0x49, 0x0d, 0x80, }, { // magic 0x6b, 0x62, 0x6f, 0x78, }, { // Crc 0x2a, 0x3b, 0x3e, 0xe4, } }; static wvoec_mock::WidevineKeybox kValidKeybox03 = { // Sample keybox used for test vectors { // deviceID 0x54, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x30, // TestKey03 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ }, { // key 0x25, 0xe5, 0x2a, 0x02, 0x29, 0x68, 0x04, 0xa2, 0x92, 0xfd, 0x7c, 0x67, 0x0b, 0x67, 0x1f, 0x31, }, { // data 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x19, 0xf4, 0x0a, 0x0e, 0xa2, 0x0a, 0x71, 0xd5, 0x92, 0xfa, 0xa3, 0x25, 0xc6, 0x4b, 0x76, 0xf1, 0x64, 0xf4, 0x60, 0xa0, 0x30, 0x72, 0x23, 0xbe, 0x03, 0xcd, 0xde, 0x7a, 0x06, 0xd4, 0x01, 0xeb, 0xdc, 0xe0, 0x50, 0xc0, 0x53, 0x0a, 0x50, 0xb0, 0x37, 0xe5, 0x05, 0x25, 0x0e, 0xa4, 0xc8, 0x5a, 0xff, 0x46, 0x6e, 0xa5, 0x31, 0xf3, 0xdd, 0x94, 0xb7, 0xe0, 0xd3, 0xf9, 0x04, 0xb2, 0x54, 0xb1, 0x64, }, { // magic 0x6b, 0x62, 0x6f, 0x78, }, { // Crc 0xa1, 0x99, 0x5f, 0x46, } }; // Define CAN_INSTALL_KEYBOX if you are compiling with the reference // implementation of OEMCrypto, or if your version of OEMCrypto supports // OEMCrypto_InstallKeybox and OEMCrypto_WrapKeybox. #if defined(CAN_INSTALL_KEYBOX) // The Below tests are based on a specific keybox which is installed for testing. class OEMCryptoKeyboxTest : public ::testing::Test { protected: virtual void SetUp() { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_Initialize()) << "OEMCrypto_Initialize failed."; } void install_keybox(wvoec_mock::WidevineKeybox& keybox) { OEMCryptoResult sts; uint8_t wrapped[sizeof(wvoec_mock::WidevineKeybox)]; size_t length = sizeof(wvoec_mock::WidevineKeybox); sts = OEMCrypto_WrapKeybox(reinterpret_cast(&keybox), sizeof(keybox), wrapped, &length, NULL, 0); ASSERT_EQ(OEMCrypto_SUCCESS, sts); sts = OEMCrypto_InstallKeybox(wrapped, sizeof(keybox)); ASSERT_EQ(OEMCrypto_SUCCESS, sts); } virtual void TearDown() { ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_Terminate()) << "OEMCrypto_Terminate failed."; } public: }; TEST_F(OEMCryptoKeyboxTest, DefaultKeybox) { OEMCryptoResult sts; sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_SUCCESS, sts); } TEST_F(OEMCryptoKeyboxTest, GoodKeybox) { wvoec_mock::WidevineKeybox keybox = kValidKeybox02; OEMCryptoResult sts; install_keybox(keybox); sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_SUCCESS, sts); keybox = kValidKeybox03; install_keybox(keybox); sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_SUCCESS, sts); } TEST_F(OEMCryptoKeyboxTest, BadCRCKeybox) { wvoec_mock::WidevineKeybox keybox = kValidKeybox02; keybox.crc_[1] = 42; OEMCryptoResult sts; install_keybox(keybox); sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_ERROR_BAD_CRC, sts); } TEST_F(OEMCryptoKeyboxTest, BadMagicKeybox) { wvoec_mock::WidevineKeybox keybox = kValidKeybox02; keybox.magic_[1] = 42; OEMCryptoResult sts; install_keybox(keybox); sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_ERROR_BAD_MAGIC, sts); } TEST_F(OEMCryptoKeyboxTest, BadDataKeybox) { wvoec_mock::WidevineKeybox keybox = kValidKeybox02; keybox.data_[1] = 42; OEMCryptoResult sts; install_keybox(keybox); sts = OEMCrypto_IsKeyboxValid(); ASSERT_EQ(OEMCrypto_ERROR_BAD_CRC, sts); } #endif // CAN_INSTALL_KEYBOX } // namespace wvoec