blob: 026b392b76f1fa7ae707c6ebdf2feacde0710b0a [file] [log] [blame]
// Copyright 2018 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "third_party/ce_cdm/oemcrypto/mock/src/oemcrypto_keybox_mock.h"
#include <openssl/bn.h>
#include <vector>
extern "C" {
#include "starboard/keyboxes/linux/linux.h"
};
#include "third_party/ce_cdm/oemcrypto/mock/src/wv_keybox.h"
namespace wvoec_mock {
namespace {
#if defined(COBALT_WIDEVINE_KEYBOX_INCLUDE)
#include COBALT_WIDEVINE_KEYBOX_INCLUDE
#else // COBALT_WIDEVINE_KEYBOX_INCLUDE
#error "COBALT_WIDEVINE_KEYBOX_INCLUDE is not defined."
#endif // COBALT_WIDEVINE_KEYBOX_INCLUDE
} // namespace
// |kKeybox| provided in obfiscated form: the key field need to be
// de-obfiscated before installing to CryptoEngine, rest fields
// left as-is and should not be de-obfuscated.
bool WvKeybox::Prepare() {
// Create a temporary kKeybox's copy with ofuscated key.
WidevineKeybox keybox(kKeybox);
// Replace obfuscated with de-obfiscated and install.
uint8_t clear_key[sizeof(kObfuscatedKey)];
linux_client(clear_key, const_cast<unsigned char*>(kObfuscatedKey));
SbMemoryCopy(&keybox.device_key_, clear_key, sizeof(keybox.device_key_));
// Erase |de_obfuscated| because it contains clear key
SbMemorySet(&clear_key, 0, sizeof(clear_key));
if (!InstallKeybox(reinterpret_cast<const uint8_t*>(&keybox),
sizeof(WidevineKeybox))) {
return false;
}
// Erase temporary kKeybox's copy because it is de-obfuscated
SbMemorySet(&keybox, 0, sizeof(WidevineKeybox));
return true;
}
} // namespace wvoec_mock