Source release 17.1.0
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// Copyright 2019 Google LLC. All Rights Reserved. This file and proprietary
|
||||
// source code may only be used and distributed under the Widevine Master
|
||||
// License Agreement.
|
||||
// source code may only be used and distributed under the Widevine License
|
||||
// Agreement.
|
||||
|
||||
#include "fake_provisioning_server.h"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "crypto_session.h"
|
||||
#include "license_protocol.pb.h"
|
||||
#include "log.h"
|
||||
#include "oec_session_util.h"
|
||||
#include "oec_key_deriver.h"
|
||||
#include "oec_test_data.h"
|
||||
#include "privacy_crypto.h"
|
||||
#include "service_certificate.h"
|
||||
@@ -34,7 +34,7 @@ namespace {
|
||||
// This is a sample RSA private key, it pairs with the public fake service
|
||||
// certificate below.
|
||||
// From file test_rsa_key_2_carmichael.pk8 in team shared drive. Size is 1216.
|
||||
const std::string kPrivateKeyFakeServiceCert = a2bs_hex(
|
||||
const std::string kPrivateKeyFakeServiceCert = wvutil::a2bs_hex(
|
||||
"308204bc020100300d06092a864886f70d0101010500048204a6308204a2020100028201"
|
||||
"0100a700366065dcbd545a2a40b4e1159458114f9458dddea71f3c2ce08809296157675e"
|
||||
"567eee278f59349a2aaa9db44efaa76ad4c97a53c14e9fe334f73db7c910474f28da3fce"
|
||||
@@ -73,7 +73,7 @@ const std::string kPrivateKeyFakeServiceCert = a2bs_hex(
|
||||
// This is a fake service certificate.
|
||||
// From the team shared drive file
|
||||
// oem-7913-leaf-and-intermediate-certs-test-key-2-carmichael.p7b, size 2353.
|
||||
const std::string kPublicFakeServiceCert = a2bs_hex(
|
||||
const std::string kPublicFakeServiceCert = wvutil::a2bs_hex(
|
||||
"3082092d06092a864886f70d010702a082091e3082091a0201013100300f06092a864886"
|
||||
"f70d010701a0020400a08208fe3082037130820259a003020102021100c28d2022828b9e"
|
||||
"639d15892ca98fd95d300d06092a864886f70d01010b0500306b310b3009060355040613"
|
||||
@@ -142,7 +142,7 @@ const std::string kPublicFakeServiceCert = a2bs_hex(
|
||||
"30eb823b06ab3c397dd0683100");
|
||||
|
||||
// This is a private RSA key that is paired with the DRM certificate below.
|
||||
const std::string kPrivateKeySampleDRMCert = a2bs_hex(
|
||||
const std::string kPrivateKeySampleDRMCert = wvutil::a2bs_hex(
|
||||
"308204BC020100300D06092A864886F70D0101010500048204A6308204A202010002820101"
|
||||
"00E68EAD7C67ED983A72C89BC55054D26821C3399702E7906B77C7E09AE607D40B0013484B"
|
||||
"0C557A810E19A814B4F14D55E60456EE21BC19F29EFFDA416BC9CBF0CE2C684E5A44F77008"
|
||||
@@ -179,7 +179,7 @@ const std::string kPrivateKeySampleDRMCert = a2bs_hex(
|
||||
|
||||
// This is a DRM certificate that was intercepted from a provisioning response
|
||||
// from the production server to a device with the test keybox.
|
||||
const std::string kPublicSampleDRMCert = a2bs_hex(
|
||||
const std::string kPublicSampleDRMCert = wvutil::a2bs_hex(
|
||||
"0ABC02080212107CB49F987A635E1E0A52184694582D6E18A2C99EEC05228E023082010A02"
|
||||
"82010100E68EAD7C67ED983A72C89BC55054D26821C3399702E7906B77C7E09AE607D40B00"
|
||||
"13484B0C557A810E19A814B4F14D55E60456EE21BC19F29EFFDA416BC9CBF0CE2C684E5A44"
|
||||
@@ -221,8 +221,8 @@ FakeProvisioningServer::FakeProvisioningServer() {
|
||||
// Generate a service certificate that can convince the CDM we are a real
|
||||
// provisioning server. it only works if the CDM is compiled with the symbol
|
||||
// ACCEPT_TEST_CERT defined.
|
||||
video_widevine::DrmDeviceCertificate cert;
|
||||
cert.set_type(video_widevine::DrmDeviceCertificate_CertificateType_SERVICE);
|
||||
video_widevine::DrmCertificate cert;
|
||||
cert.set_type(video_widevine::DrmCertificate_Type_SERVICE);
|
||||
|
||||
cert.set_public_key(kPublicFakeServiceCert);
|
||||
cert.set_serial_number("Serial Number 007");
|
||||
@@ -231,7 +231,7 @@ FakeProvisioningServer::FakeProvisioningServer() {
|
||||
std::string serialized_cert;
|
||||
cert.SerializeToString(&serialized_cert);
|
||||
|
||||
video_widevine::SignedDrmDeviceCertificate signed_cert;
|
||||
video_widevine::SignedDrmCertificate signed_cert;
|
||||
signed_cert.set_drm_certificate(serialized_cert);
|
||||
signed_cert.SerializeToString(&service_certificate_);
|
||||
}
|
||||
@@ -263,10 +263,11 @@ bool FakeProvisioningServer::MakeResponse(
|
||||
? "WIDEVINE_DRM"
|
||||
: "X509");
|
||||
|
||||
video_widevine::SignedProvisioningMessage::ProtocolVersion version =
|
||||
signed_request.protocol_version();
|
||||
LOGD("Request uses protocol version: %d", version);
|
||||
if (version != video_widevine::SignedProvisioningMessage::PROVISIONING_20) {
|
||||
const video_widevine::SignedProvisioningMessage::ProvisioningType
|
||||
provisioning_type = signed_request.provisioning_type();
|
||||
LOGD("Request uses provisioning type: %d", provisioning_type);
|
||||
if (provisioning_type !=
|
||||
video_widevine::SignedProvisioningMessage::PROVISIONING_20) {
|
||||
LOGE("Fake provisioning server only handles Keyboxes");
|
||||
return false;
|
||||
}
|
||||
@@ -283,7 +284,8 @@ bool FakeProvisioningServer::MakeResponse(
|
||||
wvoec::KeyDeriver key_deriver;
|
||||
// Not only is this Prov 2.0 specific, it assumes the device is using the
|
||||
// standard test keybox.
|
||||
key_deriver.DeriveKeys(wvoec::kTestKeybox.device_key_, mac_context_v,
|
||||
key_deriver.DeriveKeys(wvoec::kTestKeybox.device_key_,
|
||||
sizeof(wvoec::kTestKeybox.device_key_), mac_context_v,
|
||||
enc_context_v);
|
||||
|
||||
// Create a structure to hold the RSA private key. This is used by the key
|
||||
@@ -314,7 +316,7 @@ bool FakeProvisioningServer::MakeResponse(
|
||||
|
||||
// Sign the response.
|
||||
video_widevine::SignedProvisioningMessage signed_response;
|
||||
signed_response.set_protocol_version(signed_request.protocol_version());
|
||||
signed_response.set_provisioning_type(signed_request.provisioning_type());
|
||||
std::string message;
|
||||
provisioning_response.SerializeToString(&message);
|
||||
signed_response.set_message(message);
|
||||
@@ -332,6 +334,7 @@ bool FakeProvisioningServer::MakeResponse(
|
||||
}
|
||||
std::string core_response;
|
||||
oemcrypto_core_message::serialize::CreateCoreProvisioningResponseFromProto(
|
||||
oemcrypto_core_message::features::CoreMessageFeatures::kDefaultFeatures,
|
||||
message, core_request_data, &core_response);
|
||||
signed_response.set_oemcrypto_core_message(core_response);
|
||||
// Also, the signature should be over the concatenation of the core message
|
||||
@@ -351,11 +354,11 @@ bool FakeProvisioningServer::MakeResponse(
|
||||
// CDM.
|
||||
std::string response_data;
|
||||
signed_response.SerializeToString(&response_data);
|
||||
std::vector<uint8_t> response_data_v(response_data.begin(),
|
||||
response_data.end());
|
||||
static const std::string json_start = "{ \"signedResponse\": \"";
|
||||
static const std::string json_end = "\" }";
|
||||
*json_response = json_start + Base64SafeEncode(response_data_v) + json_end;
|
||||
static const std::string kJsonStart = "{ \"signedResponse\": \"";
|
||||
static const std::string kJsonEnd = "\" }";
|
||||
*json_response = kJsonStart;
|
||||
json_response->append(wvutil::Base64SafeEncode(response_data));
|
||||
json_response->append(kJsonEnd);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user