Merge from Widevine repo of http://go/wvgerrit/24728 We use compiler options to set different properties in the oemcrypto mock. With this CL, we define a base class that has default properties. All other variants need only define the properties that they change. b/35141278 b/37353534 Change-Id: Id38ec5bf35dcd83cea9a066ebe201e6da7c1a2b0
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
// Copyright 2016 Google Inc. All Rights Reserved.
|
|
//
|
|
// Mock 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_mock.h"
|
|
|
|
#include <string.h>
|
|
|
|
#include "log.h"
|
|
#include "oem_cert.h"
|
|
|
|
namespace wvoec_mock {
|
|
|
|
class Prov30CryptoEngine : public CryptoEngine {
|
|
public:
|
|
explicit Prov30CryptoEngine(wvcdm::FileSystem* file_system)
|
|
: CryptoEngine(file_system) {}
|
|
|
|
bool config_local_display_only() { return true; }
|
|
|
|
bool config_supports_usage_table() { return false; }
|
|
|
|
OEMCrypto_ProvisioningMethod config_provisioning_method() {
|
|
return OEMCrypto_OEMCertificate;
|
|
}
|
|
|
|
OEMCryptoResult get_oem_certificate(SessionContext* session,
|
|
uint8_t* public_cert,
|
|
size_t* public_cert_length) {
|
|
if (kOEMPublicCertSize == 0) {
|
|
return OEMCrypto_ERROR_NOT_IMPLEMENTED;
|
|
}
|
|
if (public_cert_length == NULL) {
|
|
return OEMCrypto_ERROR_UNKNOWN_FAILURE;
|
|
}
|
|
if (*public_cert_length < kOEMPublicCertSize) {
|
|
*public_cert_length = kOEMPublicCertSize;
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
*public_cert_length = kOEMPublicCertSize;
|
|
if (public_cert == NULL) {
|
|
return OEMCrypto_ERROR_SHORT_BUFFER;
|
|
}
|
|
memcpy(public_cert, kOEMPublicCert, kOEMPublicCertSize);
|
|
if (!session->LoadRSAKey(kOEMPrivateKey, kOEMPrivateKeySize)) {
|
|
LOGE("Private RSA Key did not load correctly.");
|
|
return OEMCrypto_ERROR_INVALID_RSA_KEY;
|
|
}
|
|
return OEMCrypto_SUCCESS;
|
|
}
|
|
|
|
// 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(wvcdm::FileSystem* file_system) {
|
|
return new Prov30CryptoEngine(file_system);
|
|
}
|
|
|
|
} // namespace wvoec_mock
|