From 4cf8594a87e2eb02bd615d4baaf4e28d98942c14 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Thu, 9 May 2013 12:18:38 -0700 Subject: [PATCH] Replaces staging provisioning server url with production server url The default provisioning server url now points to the production server. Also switches to the real field provisioning system ID that works only on the production servers, and updates the unit tests to work properly with the prod servers. Bug: 8724358 Merge of: https://widevine-internal-review.googlesource.com/#/c/5270/ https://widevine-internal-review.googlesource.com/#/c/5550/ https://widevine-internal-review.googlesource.com/#/c/5321/ https://widevine-internal-review.googlesource.com/#/c/5501/ from the Widevine CDM repository Change-Id: Iff1d7349c6a84bf30c6cdd534933ae747d5cff55 --- libwvdrmengine/cdm/core/src/cdm_engine.cpp | 2 +- .../cdm/core/test/cdm_engine_test.cpp | 136 +++++++++--------- libwvdrmengine/cdm/core/test/http_socket.cpp | 95 +++++++++++- libwvdrmengine/cdm/core/test/http_socket.h | 8 ++ .../cdm/test/request_license_test.cpp | 56 ++++++-- libwvdrmengine/cdm/test/unit-test.mk | 2 + libwvdrmengine/level3/arm/libwvlevel3.a | Bin 293070 -> 293070 bytes libwvdrmengine/level3/mips/libwvlevel3.a | Bin 312138 -> 312138 bytes libwvdrmengine/level3/x86/libwvlevel3.a | Bin 304836 -> 304836 bytes libwvdrmengine/run_all_unit_tests.sh | 1 - 10 files changed, 216 insertions(+), 84 deletions(-) diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 3a857f03..6a87ea41 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -22,7 +22,7 @@ namespace { const std::string kDefaultProvisioningServerUrl = - "http://www-googleapis-test.sandbox.google.com/" + "https://www.googleapis.com/" "certificateprovisioning/v1/devicecertificates/create" "?key=AIzaSyB-5OLKTx2iU5mko18DfdwK5611JIjbUhE"; } diff --git a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp index f90b48e2..6c10eb21 100644 --- a/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp +++ b/libwvdrmengine/cdm/core/test/cdm_engine_test.cpp @@ -22,57 +22,6 @@ std::string g_license_server; std::string g_port; wvcdm::KeyId g_wrong_key_id; int g_use_full_path = 0; // cannot use boolean in getopt_long - -static wvcdm::CdmProvisioningResponse kJsonResponse = - "{\"kind\": \"certificateprovisioning#certificateProvisioningResponse\"," - "\"signedResponse\": {" - "\"message\": \"CtAJiVocnKtls7HO9SZtMg7-aEZosRT-qAjLnKt4FZ_5jvW-BEVBPNj1yeXh" - "o_wla-VdgYQBRsnXuONH4Rh7Kg0T1mv3ybc2VIU4imZ46nW7FsZYRxz3EwWkFelIav9JDeHBlat" - "qOKJEXtCiaySgdzNyZDDsZHxQu8Yh4ZeiHTVNHotoAiFy9qoUO0oaHpZ8xJxDkuN0u9-yauLdGy" - "F8B3u2CJjO7ztbYC1a5b8NTTDzN3hKdXy9FcR0a5R5YDzvlCWj-TeEIFSop0t4QI7bGLaubXJ_K" - "y7ppcLwM4LAOs12G4TyXa3R3A64rjF7tBdnbsA2S1ELpePWPK2jtvUu1TBWxS2bToU1PQrY8C9E" - "bDaN7TpE92sOyrW1sIGkit03thAaRjHUl_JtLyqKCFUamjsQqCi7pk_4IvoFJiYKAfE5Wf5cbP0" - "IrFW3CSkgYtO_d7jnyTUaweh9eP_8udIoUNkJjHMpglR_VJcWyIqw-hg8PqWm7AcYBUNDF0sYzM" - "uMiw2uq4RSBq8vklZ_nJjVc2GZ1pSqpaLLghDpviGUbEoGGJP4I15pveCKbyOj6TfKbeiN2jgit" - "1CaHMOmirOeSpD0gODGHQaTuVFbWQg-jgsbhht0NDHyqwmPDrCe78h2gXS6k0qDb3HL9M4QT5E4" - "-E2cZLfmvtrDokugAwf0eZM14464Oi_o6NK-Gbic8q1VnI1Y7uDctVHPAlV2NjsCVoaALtpNQZ0" - "HmaOF_jJ2RxCSyQCX1sxkRR_jeKyH10_i-GkXPokB3Z23LvHOheEVNmJJNvM9YBSw318aAiOIAo" - "Wdffrfo9j4xDs34W-ndKn344BNUq8tGmo3EVhSg6pdLPcCWSpjbgQxnBe_cwmKJVKU39GPMFV0P" - "vEeYKWljptsdUc9MH4XLomyalSPGCOkoVIwdPd1qXLhh1mmdNRm_7X-7zBezltjw42XKjtOKwBi" - "_UFmgY6i4Mjbk9ShExjWpvgKNntWepIZGZhYVP1tt4H-wqsXMfupTviHf_FaQX3cadUbO_6imfa" - "91MvnFe5v0iIi1HxsQzl0NmIByHFNUfHpzrZ0RzkmxsRY5lMLpOfdue7NJ5IZN1iVgiSS3llwa3" - "2s2Yq-gCzqv7vwdIwAxZ__gOr42LR__KCB51g9xwXdVLH71Dv_WDgDv5LJas9MVz5vv_TDo9Gqf" - "ZdEI8M2h0LbhdCVGxyYoeWVl6iHrPoeP6mJ5uaDZAAn_IdoVVPuCA8Wqmi_kbRdduwkuyasbIVx" - "dMwR7cRJz5Rl5kw36kjJtOv4wy9NU41PgNNuW1_2dWtIeKOcBJH2-5KbQbnntbKNdcPqZhTaoci" - "_3qDZtdlSqIJbDh7_4ZBkbcOHJ73jPKNOiLeDGD_rXFuPy4mAuxkZ8shXcw57xsIjz_OkB_Vr_2" - "2JhNMicnjITZDTGZzN4xyPldtOINCQGBBpUBLOaiWEFePqG9m5uWv6_NtpPt3I_YQnfUzv2RLFe" - "1pOLktoorTPWi8TH8hXnnmhHLMvd9r1Z1nISnZGmn_EhEFt-N-CCpiWAo5yQWIUA0iMqCdLHTub" - "l-tuhHyLqmiBUU9O7Ynwl12k2nqJTbbeSCt1mueee8j5bITUGZ8KAAtbIe_k0XMl5mRZWVzoBw0" - "RKmvBiWSRnOESEOdEAZw1ALRVjzEhSkDqGoIa7wkKsAIIAhIQB9n_3hOqlcEiZ4BTNiE2vRjgzd" - "aLBSKOAjCCAQoCggEBAKfruetSk8ULthZLZCoqaViWPEdlO50Bi1ChIjXCiuGNp566o74R4r_ou" - "8V7VX-Ze6p2Zpbm3iTPbB-vORaINQECi8TOA1xmxH0u7jrqHwfYX2a1EdCzp3DX5_lF2Rb44FI7" - "gKW1BwIeUDOdaMKApxZOp-jt1MBsMaMZDWgvQ5EAULzESq04zsynylaScm-IaZrY0mC3ynGz2YW" - "6TxbQKBUJsOUnpEEIDK2qlyEEESp0UFcTn2Lakda7MFI9wMAlH_qrDRdlDcLwGeD2qT8Lm4CFhV" - "cNDm3nqpONmBCJlebqSvavf5tALlIdR5CdfFV64beT8zWG1J-Rz6AGmHYgCucCAwEAASiZIDABE" - "oACFJ8UtXGiM__6SQFHXjN69lqzWfJKhplriW7m9wdCO-LEcCNFpUmzWBd1JppY11hL9AYO8OTI" - "Habeb65R51q_SjulaxlJwureJAYe-cO7RTvQvCddK9SJaDxeBe367ot_pnXvh66tksCkfvakY7W" - "igaDB8WVIaml6hmDADZgGAVfrPVWVPXMaY9LYg0r3r5PllfrmG7uXU0JcIa_0N-3MgT4QV4qIG2" - "9K9givfjELYidRpDDXu8KKcw0NYu-bTUNRaNrx6yaIpSbozen5HHBVdb5gJFB-922gr9mqY1PF_" - "-ulwvcXLn-Oa17QJ0YL1LkswDjVSC89MpJWkjW_qVlF8Rq2BQqwAggBEhCr7oe2E5WSaDltfP2r" - "q_jyGK_qu4sFIo4CMIIBCgKCAQEAmtIaWtGjInLYjdQic5DPUGUgnZah-FZVFt0SwcH90u1UhQW" - "eRgBH1psYrYqaaS8zu6vclTCT17E0WsDJlS8P8dBDlSMlyrNBZjCTDyczkI68tM5v0HXnpDCb5s" - "RaCSlP7Dl9BV_67GZPFoVuw53QCaI8cQ4RHcNVupExNRcFiCc-HSb3tZO7yyZyoB1Yx6GJnlts3" - "WA3A0DqVQIY79IGqdtTkKwydiNXVqR5ksMecqALwh9vKx6oSkxNat3I1BKQnzTY0pYChDjprabV" - "O9dAM2fYwGELJYel9qQV6LT6ar0PbKCMGa9qR-YwYiR8-SN-jpvmKL0h98bhTsC65DUQswIDAQA" - "BKJkgMAESgANZMzj1jPLFR8wnWKrTwL7dLF8qNJOPf7KDdJeqioqEkAe7mZiH3ZlQlE5EjPFGn5" - "IytduT2SdPGZoAsMEavJb_nETlELNXW16bQSPKJXr1gYrzoJ86t2ePrbXOTDQUV9pIi9yCLgWYp" - "r9PVx9osIRfd4qHg_MPEITQhlxvMvX51-_NxiQpdDf3HH-x2tMu6pELU7eruIPhBPxhrOJ9eWTK" - "54w6ygZ0-RdEgJKRSCCtTcjjom1TJ_GimvqVJZ449LeVycc23BsJDkBNE9XOARSCHK0i3VDWTg-" - "autjKClFWaVcyoNDqW6cfdODF7YyEYP8sBbYenMoJn5pizXaYvl3qc4LY8a-8HVFU6akgCvcj2w" - "vaAMOdQvh5f5m6X33lLfE0w8R4JFkqxB7UC5Ev_nPDkyX1urg76t31_9qTmQAlxdoIhmBsPziSW" - "jE3gII_qetwT7z1cPX8bGGPELwFiG5sQ6jQbHlGV-gaL2v-Peh6HZbGltsoI0wm7_N1i-BwiyUi" - "BPHgGJ8=\"," - "\"signature\": \"fRiAeyze4AtvYXpxWImduHrJ1lZ4K0bRT1lk2jVIpcs=\"}}"; } // namespace namespace wvcdm { @@ -106,25 +55,89 @@ class WvCdmEngineTest : public testing::Test { wvcdm::KEY_MESSAGE); } + // concatinates all chunks into one blob + // TODO (edwinwong) move this function to url_request class as GetMessageBody + void ConcatenateChunkedResponse(const std::string http_response, + std::string* message_body) { + if (http_response.empty()) + return; + + message_body->clear(); + const std::string kChunkedTag = "Transfer-Encoding: chunked\r\n\r\n"; + size_t chunked_tag_pos = http_response.find(kChunkedTag); + if (std::string::npos != chunked_tag_pos) { + // processes chunked encoding + size_t chunk_size = 0; + size_t chunk_size_pos = chunked_tag_pos + kChunkedTag.size(); + sscanf(&http_response[chunk_size_pos], "%x", &chunk_size); + if (chunk_size > http_response.size()) { + // precaution, in case we misread chunk size + LOGE("invalid chunk size %u", chunk_size); + return; + } + + /* + * searches for chunks + * + * header + * chunk size\r\n <-- chunk_size_pos @ beginning of chunk size + * chunk data\r\n <-- chunk_pos @ beginning of chunk data + * chunk size\r\n + * chunk data\r\n + * 0\r\n + */ + const std::string kCrLf = "\r\n"; + size_t chunk_pos = http_response.find(kCrLf, chunk_size_pos) + + kCrLf.size(); + message_body->assign(&http_response[0], chunk_size_pos); + while ((chunk_size > 0) && (std::string::npos != chunk_pos)) { + message_body->append(&http_response[chunk_pos], chunk_size); + + // searches for next chunk + chunk_size_pos = chunk_pos + chunk_size + kCrLf.size(); + sscanf(&http_response[chunk_size_pos], "%x", &chunk_size); + if (chunk_size > http_response.size()) { + // precaution, in case we misread chunk size + LOGE("invalid chunk size %u", chunk_size); + break; + } + chunk_pos = http_response.find(kCrLf, chunk_size_pos) + kCrLf.size(); + } + } else { + // response is not chunked encoded + message_body->assign(http_response); + } + } + // posts a request and extracts the drm message from the response std::string GetKeyRequestResponse(const std::string& server_url, const std::string& client_auth, int expected_response) { - UrlRequest url_request(server_url + client_auth, g_port); + std::string port; + if (server_url.find("https") != std::string::npos) { + port.assign("443"); + } else { + port.assign(g_port); + } + UrlRequest url_request(server_url + client_auth, port); if (!url_request.is_connected()) { return ""; } url_request.PostRequest(key_msg_); - std::string response; - int resp_bytes = url_request.GetResponse(response); - LOGD("response:\r\n%s", response.c_str()); + std::string http_response; + std::string message_body; + int resp_bytes = url_request.GetResponse(http_response); + if (resp_bytes) { + ConcatenateChunkedResponse(http_response, &message_body); + } + LOGD("response:\r\n%s", message_body.c_str()); LOGD("end %d bytes response dump", resp_bytes); // Youtube server returns 400 for invalid message while play server returns // 500, so just test inequity here for invalid message - int status_code = url_request.GetStatusCode(response); + int status_code = url_request.GetStatusCode(message_body); if (expected_response == 200) { EXPECT_EQ(200, status_code); } else { @@ -134,7 +147,7 @@ class WvCdmEngineTest : public testing::Test { std::string drm_msg; if (200 == status_code) { LicenseRequest lic_request; - lic_request.GetDrmMessage(response, drm_msg); + lic_request.GetDrmMessage(message_body, drm_msg); LOGV("drm msg: %u bytes\r\n%s", drm_msg.size(), HexEncode(reinterpret_cast(drm_msg.data()), drm_msg.size()).c_str()); @@ -162,15 +175,6 @@ class WvCdmEngineTest : public testing::Test { std::string session_id_; }; - -TEST_F(WvCdmEngineTest, ProvisioningTest) { - CdmProvisioningRequest prov_request; - std::string provisioning_server_url = ""; - - cdm_engine_.GetProvisioningRequest(&prov_request, &provisioning_server_url); - cdm_engine_.HandleProvisioningResponse(kJsonResponse); -} - TEST_F(WvCdmEngineTest, BaseMessageTest) { cdm_engine_.OpenSession(g_key_system, &session_id_); GenerateKeyRequest(g_key_system, g_key_id); diff --git a/libwvdrmengine/cdm/core/test/http_socket.cpp b/libwvdrmengine/cdm/core/test/http_socket.cpp index 7f8f2699..2761c271 100644 --- a/libwvdrmengine/cdm/core/test/http_socket.cpp +++ b/libwvdrmengine/cdm/core/test/http_socket.cpp @@ -5,13 +5,60 @@ #include #include #include +#include "openssl/bio.h" +#include "openssl/err.h" +#include "openssl/x509.h" #include #include #include "log.h" namespace wvcdm { -HttpSocket::HttpSocket() : socket_fd_(-1), timeout_enabled_(false) {} +SSL_CTX* HttpSocket::InitSslContext(void) { + const SSL_METHOD* method; + SSL_CTX* ctx; + + OpenSSL_add_all_algorithms(); + SSL_load_error_strings(); + method = SSLv3_client_method(); + ctx = SSL_CTX_new(method); + if (NULL == ctx) + { + LOGE("failed to create SSL context"); + } + return ctx; +} + +void HttpSocket::ShowServerCertificate(const SSL* ssl) { + X509* cert; + char* line; + + // gets the server certificate + cert = SSL_get_peer_certificate(ssl); + if (cert != NULL) + { + LOGV("server certificate:"); + line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0); + LOGV("subject: %s", line); + free(line); + line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0); + LOGV("issuer: %s", line); + free(line); + X509_free(cert); + } + else + LOGE("Failed to get server certificate"); +} + +HttpSocket::HttpSocket() : + secure_connect_(true), + socket_fd_(-1), + ssl_(NULL), + ssl_ctx_(NULL), + timeout_enabled_(false) { + + SSL_library_init(); +} HttpSocket::~HttpSocket() { @@ -24,6 +71,16 @@ void HttpSocket::CloseSocket() close(socket_fd_); socket_fd_ = -1; } + if (secure_connect_) { + if (ssl_) { + SSL_free(ssl_); + ssl_ = NULL; + } + if (ssl_ctx_) { + CloseSslContext(ssl_ctx_); + ssl_ctx_ = NULL; + } + } } // Extracts the domain name and resource path from the input url parameter. @@ -65,6 +122,10 @@ void HttpSocket::GetDomainNameAndPathFromUrl(const std::string& url, bool HttpSocket::Connect(const char* url, const std::string& port, bool enable_timeout) { + secure_connect_ = (strstr(url, "https") != NULL) ? true : false; + if (secure_connect_) + ssl_ctx_ = InitSslContext(); + GetDomainNameAndPathFromUrl(url, domain_name_, resource_path_); socket_fd_ = socket(AF_INET, SOCK_STREAM, 0); @@ -102,6 +163,26 @@ bool HttpSocket::Connect(const char* url, const std::string& port, bool enable_t if (addr_info != NULL) { freeaddrinfo(addr_info); } + + // secures connection + if (secure_connect_ && ssl_ctx_) { + ssl_ = SSL_new(ssl_ctx_); + if (ssl_) { + BIO* a_bio = BIO_new_socket(socket_fd_, BIO_NOCLOSE); + if (a_bio) { + SSL_set_bio(ssl_, a_bio, a_bio); + int ret = SSL_connect(ssl_); + if (1 != ret) { + char buf[256]; + LOGE("SSL_connect error:%s", ERR_error_string(ERR_get_error(), buf)); + } + } else { + LOGE("BIO_new_socket error"); + } + } else { + LOGE("failed SSL_new"); + } + } return status; } @@ -148,7 +229,11 @@ int HttpSocket::Read(char* data, int len, int timeout_in_ms) } } - read = recv(socket_fd_, data, to_read, 0); + if (secure_connect_) + read = SSL_read(ssl_, data, to_read); + else + read = recv(socket_fd_, data, to_read, 0); + if (read > 0) { to_read -= read; data += read; @@ -175,7 +260,11 @@ int HttpSocket::Write(const char* data, int len) int sent = 0; int to_send = len; while (to_send > 0) { - sent = send(socket_fd_, data, to_send, 0); + if (secure_connect_) + sent = SSL_write(ssl_, data, to_send); + else + sent = send(socket_fd_, data, to_send, 0); + if (sent > 0) { to_send -= sent; data += sent; diff --git a/libwvdrmengine/cdm/core/test/http_socket.h b/libwvdrmengine/cdm/core/test/http_socket.h index 8cc09531..bbb012a7 100644 --- a/libwvdrmengine/cdm/core/test/http_socket.h +++ b/libwvdrmengine/cdm/core/test/http_socket.h @@ -4,6 +4,7 @@ #define CDM_TEST_HTTP_SOCKET_H_ #include +#include "openssl/ssl.h" #include "wv_cdm_types.h" namespace wvcdm { @@ -26,9 +27,16 @@ class HttpSocket { int Write(const char* data, int len); private: + void CloseSslContext(SSL_CTX* ctx) const { if (ctx) SSL_CTX_free(ctx); } + SSL_CTX* InitSslContext(void); + void ShowServerCertificate(const SSL* ssl); + std::string domain_name_; + bool secure_connect_; std::string resource_path_; int socket_fd_; + SSL* ssl_; + SSL_CTX* ssl_ctx_; bool timeout_enabled_; CORE_DISALLOW_COPY_AND_ASSIGN(HttpSocket); diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index d79f611f..02b15a90 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -24,8 +24,16 @@ std::string g_port; wvcdm::KeyId g_wrong_key_id; int g_use_full_path = 0; // cannot use boolean in getopt_long -const std::string kDefaultProvisioningServerUrl = - "http://www-googleapis-test.sandbox.google.com/" +// returns production-rooted certificates that have test bit set, this test +// uses this url +const std::string kProductionTestProvisioningServerUrl = + "https://www.googleapis.com/" + "certificateprovisioning/v1exttest/devicecertificates/create" + "?key=AIzaSyB-5OLKTx2iU5mko18DfdwK5611JIjbUhE"; + +// url returned by GetProvisioningRequest() +const std::string kProductionProvisioningServerUrl = + "https://www.googleapis.com/" "certificateprovisioning/v1/devicecertificates/create" "?key=AIzaSyB-5OLKTx2iU5mko18DfdwK5611JIjbUhE"; } // namespace @@ -156,7 +164,13 @@ class WvCdmRequestLicenseTest : public testing::Test { std::string GetKeyRequestResponse(const std::string& server_url, const std::string& client_auth, int expected_response) { - UrlRequest url_request(server_url + client_auth, g_port); + std::string port; + if (server_url.find("https") != std::string::npos) { + port.assign("443"); + } else { + port.assign(g_port); + } + UrlRequest url_request(server_url + client_auth, port); if (!url_request.is_connected()) { return ""; @@ -191,10 +205,17 @@ class WvCdmRequestLicenseTest : public testing::Test { return drm_msg; } - // posts a request and extracts the drm message from the response + // Posts a request and extracts the signed provisioning message from + // the HTTP response. std::string GetCertRequestResponse(const std::string& server_url, int expected_response) { - UrlRequest url_request(server_url, g_port); + std::string port; + if (server_url.find("https") != std::string::npos) { + port.assign("443"); + } else { + port.assign(g_port); + } + UrlRequest url_request(server_url, port); if (!url_request.is_connected()) { return ""; @@ -247,10 +268,13 @@ TEST_F(WvCdmRequestLicenseTest, ProvisioningTest) { decryptor_.OpenSession(g_key_system, &session_id_); std::string provisioning_server_url = ""; - EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.GetProvisioningRequest(&key_msg_, &provisioning_server_url)); - EXPECT_STREQ(provisioning_server_url.data(), kDefaultProvisioningServerUrl.data()); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.GetProvisioningRequest(&key_msg_, + &provisioning_server_url)); + EXPECT_STREQ(provisioning_server_url.data(), + kProductionProvisioningServerUrl.data()); - std::string response = GetCertRequestResponse(kDefaultProvisioningServerUrl, 200); + std::string response = GetCertRequestResponse( + kProductionTestProvisioningServerUrl, 200); EXPECT_NE(0, static_cast(response.size())); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.HandleProvisioningResponse(response)); decryptor_.CloseSession(session_id_); @@ -260,13 +284,19 @@ TEST_F(WvCdmRequestLicenseTest, ProvisioningRetryTest) { decryptor_.OpenSession(g_key_system, &session_id_); std::string provisioning_server_url = ""; - EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.GetProvisioningRequest(&key_msg_, &provisioning_server_url)); - EXPECT_STREQ(provisioning_server_url.data(), kDefaultProvisioningServerUrl.data()); + EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.GetProvisioningRequest(&key_msg_, + &provisioning_server_url)); + EXPECT_STREQ(provisioning_server_url.data(), + kProductionProvisioningServerUrl.data()); - EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.GetProvisioningRequest(&key_msg_, &provisioning_server_url)); - EXPECT_STREQ(provisioning_server_url.data(), kDefaultProvisioningServerUrl.data()); + EXPECT_EQ(wvcdm::NO_ERROR, + decryptor_.GetProvisioningRequest( + &key_msg_, &provisioning_server_url)); + EXPECT_STREQ(provisioning_server_url.data(), + kProductionProvisioningServerUrl.data()); - std::string response = GetCertRequestResponse(kDefaultProvisioningServerUrl, 200); + std::string response = GetCertRequestResponse( + kProductionTestProvisioningServerUrl, 200); EXPECT_NE(0, static_cast(response.size())); EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.HandleProvisioningResponse(response)); decryptor_.CloseSession(session_id_); diff --git a/libwvdrmengine/cdm/test/unit-test.mk b/libwvdrmengine/cdm/test/unit-test.mk index d71f83d5..129620db 100644 --- a/libwvdrmengine/cdm/test/unit-test.mk +++ b/libwvdrmengine/cdm/test/unit-test.mk @@ -19,6 +19,7 @@ LOCAL_SRC_FILES := \ LOCAL_C_INCLUDES := \ bionic \ external/gtest/include \ + external/openssl/include \ external/stlport/stlport \ $(LOCAL_PATH)/core/test/include \ vendor/widevine/libwvdrmengine/test/gmock/include \ @@ -47,6 +48,7 @@ LOCAL_SHARED_LIBRARIES := \ libcutils \ libdl \ liblog \ + libssl \ libstlport \ libutils diff --git a/libwvdrmengine/level3/arm/libwvlevel3.a b/libwvdrmengine/level3/arm/libwvlevel3.a index 27d7c432be0a277c3641964b9ccf1bdc7c1a1c30..05a9e4583a8ecb07bdc7c9075fb92872b6183295 100644 GIT binary patch delta 328 zcmX^2QSjVH!3nagMuvta<{On-)gY|N0Z+v?A5v3IfpDh_NHB|UX70Ys#JFnn_1+D} zNU9bcEMXSOS$NOy<3ZP+sNjWL^Q!KIW+&xWOka4DseW?&G4{=0R8}#~q0xN{S zIpC>$HNvp=t^~&IT?tH`hDge{>rZ0paf1kKKX8Ldm=9U<{WGQpc7zGryWTOqgn9?$ ziS2zn%(dK5%|Kto`yy-ZPGz=mMHaZfiaEppS-}4`^9@sE0cSxL9b069Za)@hEda}; BXUG5m delta 328 zcmX^2QSjVH!3nagh88BKCL5Jn)gY|N0Z+v?A5v3IfpDh_NHB|UX70Ys#3;G>dhZ5f zBvp$JmN1K~J#ag@Ym(M={=*Go#j3?CvXk;FrZ2q7R6jZX82jc8N9CoE4SIb)ffd5v z9Pm`W8ev#_R|4bqt^}q|LnP(f^(Qg)xIqNAAGpCJ%!e%b{uxsPJHmwRUGJD)LcIg> z#P&WO=2~v3W}q+PeUUYHr!rf(A`9GK#T;UQEZ~2e`GzU7fU_WrjxDl4w;zkM766mA BX21Xd diff --git a/libwvdrmengine/level3/mips/libwvlevel3.a b/libwvdrmengine/level3/mips/libwvlevel3.a index fe57d9d06c78a22c9678ba06b0ebc46f69194d7a..0a53ada1432b46e3bc2e98d66818e3713e3f693b 100644 GIT binary patch delta 302 zcmX@rCVZ+*c!Dgek)gS<>W%A1yH#Q8qCYnA?)cOZ*8AEfq92JR5IWOb9Mlf4Ge?R(NH!};VwG> DUf^YV delta 302 zcmX@rCVZ+*c!Dgep{0SP;YOuG83=3o0Sy+3%^PI&W1;*BEiB@je^)MNXO!H$xbc8G zRQQ52qxk0fmC>96YY*H`?wX`^o&RuySg~sHis}EFm`payZGI?-Y=ZPr0X7JKv%%@v z5fElO(3I^Ll$rRIk(6%#?Z&jn5+X3!;I!EGOASn-Jje=|dzo6;krXVN!gNy{!r$Jo zhUq*vTuyv@_70|m0;t>t4d&(P5cYJCx3*87z`Vm9Dj9HtIXeK#28O}uXeb+~aF-nb D@H}JC diff --git a/libwvdrmengine/level3/x86/libwvlevel3.a b/libwvdrmengine/level3/x86/libwvlevel3.a index afc987a33ab0276a37aa8342805b891e944fbfce..b02109dcac19c6af49c1a9761c817ca2cd515b1d 100644 GIT binary patch delta 299 zcmX?dR_MrCp$W3AMurxqmK&A0r68=yeG|ntdr0~EAaOUOl`u1|+N_$Dq7E0$6UbS3 z&+p?w*Pf{0gadR=9Gp%`-NB^+s@;SNz?+;xD7G5khFYfC1A< zJqUmMy*Q@tTu5>sGMOsbp>lbJOyVLC_H>{+@$Cy+nIyQOlKUnw{jP(t`I(v1A#9Mh gw%;jZc63M9Xt|F$#vfT=BQML7C?p*lGFU|H0M`#?SpWb4 delta 299 zcmX?dR_MrCp$W3AhL#4VCL5Kwr68=yeG|ntdr0~EAaOUOl`u0(ZdT1oQHP7>39LPE zJGpC;)^+~F4PwQr#Va=ROfp0^Bw~#!D_ptQ<{2BmdLy{aEB