[ Merge of http://go/wvgerrit/116944 ] This change is the last part of a three part change for restructing the root of trust used by the reference implementation. OEM Certificates are now managed by the root of trust of the crypto engine. Previously, OEM certs where handled separately on a session by session basis. Bug: 135283522 Test: oemcrypto_unittests ce_cdm_tests Change-Id: I6cf1fa3fade28baad85b5fce57a8eab6f2ed17c1
71 lines
2.1 KiB
C++
71 lines
2.1 KiB
C++
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine Master
|
|
// License Agreement.
|
|
//
|
|
// Reference implementation of OEMCrypto APIs
|
|
//
|
|
// This file contains oemcrypto engine properties that would be for a
|
|
// level 2 device that does not have persistant storage or a keybox.
|
|
// Note: this is for illustration only. Production devices are rarely level 2.
|
|
|
|
#include "oemcrypto_engine_ref.h"
|
|
|
|
#include <string.h>
|
|
|
|
#include <utility>
|
|
|
|
#include "log.h"
|
|
#include "oem_cert.h"
|
|
|
|
namespace wvoec_ref {
|
|
|
|
class Prov30CryptoEngine : public CryptoEngine {
|
|
public:
|
|
explicit Prov30CryptoEngine(std::unique_ptr<wvcdm::FileSystem>&& file_system)
|
|
: CryptoEngine(std::move(file_system)) {}
|
|
|
|
bool Initialize() override {
|
|
if (!CryptoEngine::Initialize()) {
|
|
return false;
|
|
}
|
|
const OEMCryptoResult result = InstallOemCertificate(
|
|
kOEMPrivateKey, kOEMPrivateKeySize, kOEMPublicCert, kOEMPublicCertSize);
|
|
return result == OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
bool config_local_display_only() { return true; }
|
|
|
|
// Returns the max HDCP version supported.
|
|
OEMCrypto_HDCP_Capability config_maximum_hdcp_capability() {
|
|
return HDCP_NO_DIGITAL_OUTPUT;
|
|
}
|
|
|
|
// Returns true if the client supports persistent storage of
|
|
// offline usage table information.
|
|
bool config_supports_usage_table() {
|
|
return false;
|
|
}
|
|
|
|
// Returns true if the client uses a keybox as the root of trust.
|
|
bool config_supports_keybox() {
|
|
return false;
|
|
}
|
|
|
|
// This version uses an OEM Certificate.
|
|
OEMCrypto_ProvisioningMethod config_provisioning_method() {
|
|
return OEMCrypto_OEMCertificate;
|
|
}
|
|
|
|
// Returns "L3" for a software only library. L1 is for hardware protected
|
|
// keys and data paths. L2 is for hardware protected keys but no data path
|
|
// protection.
|
|
const char* config_security_level() { return "L2"; }
|
|
};
|
|
|
|
CryptoEngine* CryptoEngine::MakeCryptoEngine(
|
|
std::unique_ptr<wvcdm::FileSystem>&& file_system) {
|
|
return new Prov30CryptoEngine(std::move(file_system));
|
|
}
|
|
|
|
} // namespace wvoec_ref
|