(This is a merge of http://go/wvgerrit/65782) We have had our own scoped_ptr implementation that is used throughout the codebase. Now that we support C++11, we can replace these with std::unique_ptr. Doing this replacement exposed a few places where the two were not interchangeable. OEMCrypto Ref was doing some unsafe things with passing scoped_ptrs to functions and has been updated to use move semantics. And a few constructors were explicitly constructing a scoped_ptr with NULL, which is ambiguous with std::unique_ptr. These have been replaced with default constructor calls. Bug: 111851141 Test: CE CDM Unit Tests Test: Android Unit Tests Change-Id: I37d6d7aad4906709381c74f0c5439f826d2be768
81 lines
2.1 KiB
C++
81 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
|
|
//
|
|
#ifndef OEMCRYPTO_AUTH_REF_H_
|
|
#define OEMCRYPTO_AUTH_REF_H_
|
|
|
|
#include <stdint.h>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include <openssl/rsa.h>
|
|
|
|
#include "OEMCryptoCENC.h" // Needed for enums only.
|
|
#include "disallow_copy_and_assign.h"
|
|
#include "oemcrypto_key_ref.h"
|
|
#include "oemcrypto_keybox_ref.h"
|
|
#include "oemcrypto_rsa_key_shared.h"
|
|
#include "oemcrypto_types.h"
|
|
|
|
namespace wvoec_ref {
|
|
|
|
class AuthenticationRoot {
|
|
public:
|
|
explicit AuthenticationRoot(OEMCrypto_ProvisioningMethod method);
|
|
~AuthenticationRoot() {}
|
|
|
|
bool Validate();
|
|
|
|
KeyboxError ValidateKeybox();
|
|
|
|
bool InstallKeybox(const uint8_t* keybox_data, size_t keybox_length) {
|
|
return keybox().InstallKeybox(keybox_data, keybox_length);
|
|
}
|
|
|
|
const std::vector<uint8_t>& DeviceKey(bool use_real_keybox = false) {
|
|
return use_real_keybox ? real_keybox().device_key() :
|
|
keybox().device_key();
|
|
}
|
|
|
|
const std::vector<uint8_t>& DeviceId() {
|
|
return keybox().device_id();
|
|
}
|
|
|
|
size_t DeviceTokenLength() {
|
|
return keybox().key_data_length();
|
|
}
|
|
|
|
const uint8_t* DeviceToken() {
|
|
return keybox().key_data();
|
|
}
|
|
|
|
WvKeybox& keybox() { return use_test_keybox_ ? test_keybox_ : keybox_; }
|
|
bool UseTestKeybox(const uint8_t* keybox_data, size_t keybox_length) {
|
|
use_test_keybox_ = true;
|
|
return test_keybox_.InstallKeybox(keybox_data, keybox_length);
|
|
}
|
|
|
|
RSA_shared_ptr& SharedRsaKey() { return rsa_key_; }
|
|
RSA* rsa_key() { return rsa_key_.get(); }
|
|
bool LoadTestRsaKey();
|
|
|
|
private:
|
|
OEMCrypto_ProvisioningMethod provisioning_method_;
|
|
WvKeybox& real_keybox() { return keybox_; }
|
|
|
|
WvKeybox keybox_;
|
|
WvKeybox test_keybox_;
|
|
bool use_test_keybox_;
|
|
|
|
RSA_shared_ptr rsa_key_; // If no keybox, this is baked in certificate.
|
|
|
|
CORE_DISALLOW_COPY_AND_ASSIGN(AuthenticationRoot);
|
|
};
|
|
|
|
} // namespace wvoec_ref
|
|
|
|
#endif // OEMCRYPTO_AUTH_REF_H_
|