Commit Graph

4490 Commits

Author SHA1 Message Date
Rahul Frias
bab666ecdc Merge "Avoid passing device ID when unused" 2020-10-11 23:34:17 +00:00
Alex Dale
927c2f628b Test for creating and reloading usage entries.
[ Merge from http://go/wvgerrit/102303 ]

This adds an OEMCrypto test that ensures that usage entries can be
loaded and reloaded without issue within the same crypto client
lifecycle.  This is in response to b/158273241 where certain entries
could not be reloaded if new entries are created and loaded in a
particular order.

Bug: 158619296
Test: OEMCrypto test on Android
Change-Id: Ib7422b2003e46a3ee27c6a591177a12d14e628bc
2020-10-02 13:20:22 -07:00
Rahul Frias
6d8e447696 Delay license state evaluation for offline licenses am: 8543b4c903 am: 9f2363e076
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12646162

Change-Id: I0158e6b1dc2560ff28ff9379533a428f2970efeb
2020-09-23 03:03:08 +00:00
Rahul Frias
9f2363e076 Delay license state evaluation for offline licenses am: 8543b4c903
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12646162

Change-Id: I7b0f8239720e3aab7324dce8e2956e8135d0a65c
2020-09-23 02:46:20 +00:00
Rahul Frias
8543b4c903 Delay license state evaluation for offline licenses
[ Merge of http://go/wvgerrit/106325 and http://go/ag/12644840 ]

When offline licenses are restored, licenses and any renewals are processed.
License state evaluation occurs and notifications are sent to listeners.
If the license is expired, which is likely if a renewal is present,
the license state will transition to expired. Transitions out of
expired state are not allowed and the renewal has no effect.

If we work around this by allowing transitions out of expired state,
listeners will get notifications that keys have expired and then that are
usable soon after. To avoid delivering erroneous notifications we delay
evaluation of license state while the license and renewal are being processed.
Evaluation occurs at the last stage of license restoration when playback
information from the usage table is being restored.

This only need to occur for when licenses are being restored. In other
cases when a license or renewal is received, license state evaluation
and event listener notification needs to occur immediately.

Bug: 166131956

Test: WV unit/integration tests, GtsMediaTestCases tests
Change-Id: Ic8ade25316c5e20cc88de9225c43c24b28f21ac4
2020-09-22 15:36:35 -07:00
Fred Gylys-Colwell
5eb94cc6c6 Sign unused renewal so that offline renewal may be loaded am: 80667cbac3 am: f5896158c1
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12629547

Change-Id: I431e1f6607dd162809098798c20e28a35f1b88f8
2020-09-22 22:00:43 +00:00
Fred Gylys-Colwell
f5896158c1 Sign unused renewal so that offline renewal may be loaded am: 80667cbac3
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12629547

Change-Id: Ic8a236e81d07bbc629cfa9a7a0e46513c2cbac1d
2020-09-22 21:31:43 +00:00
Fred Gylys-Colwell
80667cbac3 Sign unused renewal so that offline renewal may be loaded
Merge from Widevine repo of http://go/wvgerrit/105347

When reloading an offline license that has an offline renewal, we sign
a unused renewal so that the ODK library can update its clock values.

Test: WV unit/integration tests, GtsMediaTestCases tests
Bug: 166131956
Change-Id: Ib1445fd85222489f21221e00729d4989cb49a331
2020-09-22 02:44:05 +00:00
Rahul Frias
0761dd8920 Avoid passing device ID when unused
[ Merge of http://go/wvgerrit/105743 ]

Device ID is no longer reported directly in provisioning/license
request or used by ClientIdentification. It does not need to be passed
in during initialization.

Bug: 168085721
Test: WV unit/integration tests
Change-Id: I483eac963c3f40784e42e1a2b917fcc96aa76a05
2020-09-17 23:35:15 -07:00
Robert Shih
28b13ef65e GetDecryptHashSupport: recognize OEMCrypto_ERROR_NOT_IMPLEMENTED am: da09f4abca am: 4bf604c2d7
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12036417

Change-Id: Iaf89049a8a7a7828259968d534f87505c470021f
2020-09-15 02:24:37 +00:00
Alex Dale
493bf5ec49 Merge "Test CDM sessions prevent multiple usage entries." into rvc-dev am: c628c5aca2 am: 7a65b6c2d4
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11925460

Change-Id: I7677699c1e9d0769447d091f366dae1dc9db08ba
2020-09-15 02:14:41 +00:00
Rahul Frias
d79c4f2c0b Merge "Handle SPOID calculation for L3" into rvc-dev am: 25d1646138 am: 7a43e0f14b
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11736137

Change-Id: Ib373332a453d704e20130f3ef88d45a750240219
2020-09-15 02:10:04 +00:00
Edwin Wong
138f690bf7 Merge "Add v16 Widevine Integration Guide Android Supplement" into rvc-dev am: 6b8d0e034d am: 66a17f743d
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11838915

Change-Id: I10268df2825750f547accdf4d2ec40b22ff2a143
2020-09-15 01:55:13 +00:00
Rahul Frias
f13fb91002 Merge changes I295f66f9,I142f286c into rvc-dev am: 05fbb3dd87 am: 041132b76d
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11620164

Change-Id: I71b07f7bcc11a57d86c4ab71a7ca27aa4207788a
2020-09-15 01:42:19 +00:00
Fred Gylys-Colwell
37736b322a Remove Android.mk for OEMCrypto ref code am: 119932ea69 am: a8e2f398ad
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11870737

Change-Id: Ied1a03095d555b900bceeeb7fede1047ff82b34b
2020-09-15 01:29:11 +00:00
Fred Gylys-Colwell
4ac0ba742e Update OEMCrypto documentation to v16.3 am: aa5fc5afd0 am: e40a29b635
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11707216

Change-Id: Icb12136e8d6ed319c7c93f3d0c0fd11bd736127b
2020-09-15 01:01:54 +00:00
Fred Gylys-Colwell
ebdecfbd68 Update OEMCrypto unit tests to require ODK 16.3 am: 45681615b8 am: cd53dfca76
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677949

Change-Id: I6e2696e359f7f1e69ce7c42748df92dea55098e2
2020-09-15 00:52:01 +00:00
Fred Gylys-Colwell
9efaecdee2 Do not verify decrypt hash when no key selected am: 36968de671 am: ea86db9a2a
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677948

Change-Id: I58fcad399df8533bed5f267e53c998ea5c85a0ff
2020-09-15 00:51:59 +00:00
Fred Gylys-Colwell
9b222ef2c5 Unit test for loading nonce-free offline license am: a615671f48 am: df9740ecda
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677947

Change-Id: I35ff4ff4fc13982dac48a9547c14fb7e68ec57e4
2020-09-15 00:51:58 +00:00
Fred Gylys-Colwell
3eb34674d2 Check for null pointers in oemcrypto adapter am: 42eb79a3ff am: 8ec81840f5
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677946

Change-Id: I25696ace1bd30134fe17cdc54d1e6d0f8f7e0f20
2020-09-15 00:51:56 +00:00
Fred Gylys-Colwell
6d2b618296 Update ODK Library to 16.3 am: 166b3e8403 am: b33068bf35
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11699230

Change-Id: I3b972e56a57f4bca0823300d783707c6e3c8e6e6
2020-09-15 00:51:54 +00:00
Fred Gylys-Colwell
922411f468 ODK: forward compatibility and nonce-free offline license support am: 8dc1d7a11d am: 1bd515cc47
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11688972

Change-Id: I87f74e5c9dd6da3ca812a83a5fca5fcf01211e55
2020-09-15 00:51:52 +00:00
Cong Lin
272f490e32 Merge "Fix implicit type conversion issue in ODK" into rvc-dev am: c34e2af181 am: 5bac96c72c
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11661188

Change-Id: I4484ce8db14a75b74c232e235d5da44830bced45
2020-09-15 00:37:30 +00:00
John Bruce
1f234b899f Merge "OEMCrypto Unit Test Fix: Do Not Derive Keys Immediately" into rvc-dev am: 729723b3d2 am: 5ce6971993
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11606170

Change-Id: I89e61467d0aa55c31131e2415d4e87b6b70922af
2020-09-14 23:42:00 +00:00
Alex Dale
a806eec2dd Rolled expected version number for R. am: dd70d63b76 am: 50e966a8d0
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11530830

Change-Id: I309f6bc9263c5f2a4353b00ea5869b3752d02574
2020-09-14 23:18:45 +00:00
TreeHugger Robot
5c796ea5b7 Merge "The Entitlement key map was not being cleaned up." into rvc-dev am: bd8e573e0c am: 5d92fea3cd
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11546312

Change-Id: Ib71713ec896c58fa8009ea05cc6904b8c3c8792f
2020-09-14 22:14:01 +00:00
TreeHugger Robot
0a5ec97f2f Merge "Start playback timer in integration tests" into rvc-dev am: 7534d9795b am: 63a473d645
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11520639

Change-Id: Ie51f3119431e844e9c205181449033d8b7890041
2020-09-13 14:15:04 +00:00
Fred Gylys-Colwell
fb0c6e0e7c Update TimeRollbackPrevention unit test am: 75575418d0 am: 86c4cc8dcd
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11506307

Change-Id: I1def8aca779a0541ddb23a6cbe4f30fceb7559be
2020-09-13 13:42:56 +00:00
Fred Gylys-Colwell
459ebef588 License release does not use core message am: 760bf71908 am: a59c349816
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11443770

Change-Id: Ic536befe7a758be03ee2e997c2ea3a7eed892127
2020-09-13 13:12:06 +00:00
Edwin Wong
051e879438 Rename metrics.proto to wv_metrics.proto.
Merge from http://go/wvgerrit/105767

To avoid conflict with metrics.proto in
frameworks/av/drm/libmediadrm/proto.
This is in preparation of moving metrics_dump tool
to build under Android.

bug: 161783052
Test: unit test
Test: Play Movies & Tv and Netflix streaming
Change-Id: I2406b66db4d61cca7c6260ea8847a555d96c8d42
2020-09-10 12:26:28 -07:00
Alex Dale
7686e28e15 Merge "Enabled log formatting warnings." 2020-09-09 04:13:02 +00:00
Alex Dale
1defd1c7fc Merge "Correctly handle local display only for SRM version." 2020-09-09 03:38:48 +00:00
Alex Dale
f22cd20466 Enabled log formatting warnings.
[ Merge of http://go/wvgerrit/105025 ]

Clang and GCC allow for warnings against the arguments for printf-like
functions (e.i. LOGx).  These validate that the format type specified
in the format string match the corresponding argument type.

Most of the time, format specifer errors are benign; hence why they
haven't been seen as an error so far.  However, with the enabling of
specifier warnings and the enabling of warnings as errors on certain
platforms, these existing errors need to be addressed.

This CL enables format specifier warnings for most of the Widevine
code, with the OEMCrypto L3 implementation which has a single error
which requires a fix in the haystack code before being fixed in the
Widevine branch.

Strict format string warnings are not enabled for non-LP64 systems.

Bug: 137583127
Test: Compiled for Linux and Android
Change-Id: I051398332d31a20457b86563a90ad8f6d428445f
2020-09-08 15:46:15 -07:00
Rahul Frias
315bf42c4f Do not store information for kLicenseTypeTemporary
[ Merge of http://go/wvgerrit/105624 ]

Temporary licenses do not allow for license information to be stored
in any form, whether it is usage information or persisting license
information. Information should not be stored even if can_persist is
set to true and a PST is specified as those are suggestions rather than
a requirement.

Bug: 167684104
Test: WV unit/integration tests
Change-Id: I141a2bd5de4d86f0e5f31fc8f0ea9e20710d6469
2020-09-07 18:50:13 -07:00
Alex Dale
b96b58628c Correctly handle local display only for SRM version.
[ Merge of http://go/wvgerrit/105343 ]

If a device only supports local display (eliminating the need for an
SRM version), then the CDM should treat this as no SRM version.

Bug: 166009716
Test: License request integration test
Change-Id: I2d9c3f98735563df6d7c7a287abab41bf0a8c513
2020-09-02 21:36:37 -07:00
Ben Lin
e929a5dcdd Remove mediadrm/test/Android.bp file.
The Blueprint file doesn't seem to be compatible with some 64-bit
targets (namely bertha_x86_64) - remove for now to stop build breakage.

Test: make -j32 libwvdrmdrmplugin_test
Bug: 165933287
Change-Id: I36d8238cc1a78eefef2ba2a06a4360ea46080349
2020-08-21 15:29:29 -07:00
Edwin Wong
c64903759d Merge "Convert Android.mk to Android.bp" 2020-08-21 17:13:00 +00:00
Edwin Wong
307cf378a9 Convert Android.mk to Android.bp
This CL builds the Widevine drm services and libraries.
Soong makefile conversion for unit and integration
tests will be in a different CL.

This doc may help with the review:
https://docs.google.com/document/d/1lK3X9RFPwbbwewLNlS4TfSMhxIlPuAkHRnGcgwWpChU/edit?usp=sharing

Test: build
Test: Play Movies and Netflix streaming
Test: unit tests
  build_and_run_all_tests.sh
Test: gts
  ANDROID_BUILD_TOP= ./android-gts/tools/gts-tradefed run gts -m GtsMediaTestCases -t com.google.android.media.gts.MediaDrmTest

  atest GtsExoPlayerTestCases:com.google.android.exoplayer.gts.DashTest

Test: vts
  ANDROID_BUILD_TOP= PATH="$PWD/android-vts/tools:$PATH" vts-tradefed run commandAndExit vts --module VtsHalDrmV1_3Target

Bug: 162321744
Change-Id: I50c0fb2e8f28dfe7901587e3d3203542943e23b1
2020-08-19 14:54:47 -07:00
TreeHugger Robot
9ca0979e7f Merge "Test renewal against same and different server" 2020-08-19 20:47:27 +00:00
Fred Gylys-Colwell
7604158d6f Test renewal against same and different server
Merge from Widevine repo of http://go/wvgerrit/102843

The test WvCdmEngineTest.LicenseRenewal is split into two tests. One
test verifies that the renewal may be fetched from the server
specified in the license. The second test verifies that the renewal
may be fetched from the same server that the license was fetched from.

These might be the same server, but when we run against an
experimental server, a staging server, or UAT Nightly, these
will be different.

Test: ran the tests
Bug: 141438127
Change-Id: Ia11441bd2ba0c6ddb264ee38bfcb5060b9ddb476
2020-08-19 20:45:33 +00:00
John W. Bruce
7f028d25c8 Fix Undefined Behavior Around Enums
(This is a cherry-pick of http://go/wvgerrit/104184.)

UBSan has detected several places where our code tripped over what is
technically Undefined Behavior when handling enums, although in practice
any compiler would still generate safe code.

Some of these were places a variable was not being initialized and thus
was filled with garbage data. These have been fixed.

Understanding the rest depends on a bit of C++ trivia I had certainly
never heard before: An enum that doesn't specify its backing type will
frequently have a gap between the range of values the compiler will let
it take (which is limited only by the size of the backing type assigned
by the C++ standard) and the range of values for which the C++ standard
defines the behavior. (which is limited by the minimum number of bits
needed to hold the largest valid enumeration entry) So, for example, an
enum containing ten entries numbered 0 through 9 would be stored in
memory as an int and could thus take any value in the range of an int.
But it only takes 4 bits to represent the numbers 0 through 9. The
largest number that can be represented in 4 bits is 15. So reading the
value of a variable of this enum type when its stored value is outside
the range 0 to 15 is undefined behavior.

An enum that specifies its backing type is not subject to this because
it is defined behavior to access any value representable in the backing
type if one was explicitly specified.

If you think this sounds a bit silly, you'll be happy to know it doesn't
apply from C++17 onwards and most compilers generate code that handles
the undefined behavior values correctly.

Nonetheless, to appease UBSan and protect us from any compilers that
actually rely on this undefined behavior for optimizations, I have
defined backing types for all our enums. I have defaulted to the type
the compiler was already using (int32) and have deviated only where an
enum exists to be compared to or filled from a protobuf field and that
field in the protobuf is unsigned, in which case I used a uint32.

In the case of the CE CDM exported API, this also required changing our
enums from C-style to C++-style.

Bug: 163080356
Test: CE CDM Build & Unit Tests Pass even with UBSan
Test: Android Build & Tests
Change-Id: Id7e0064129e7c4d2827bb4a94825d144eeaacec8
2020-08-18 18:02:36 -07:00
Alex Dale
fe06541507 [automerger skipped] DO NOT MERGE Handle unlimited usage table capacity. am: 99335a6aa8 am: 601d910d17 -s ours
am skip reason: subject contains skip directive

Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12266132

Change-Id: I6629b3ea2434acc913109641f6d3272425287f79
2020-08-17 19:31:06 +00:00
Alex Dale
601d910d17 DO NOT MERGE Handle unlimited usage table capacity. am: 99335a6aa8
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12266132

Change-Id: I25cb6ad05f466357fa4e2485a093ae8598bd5b51
2020-08-17 19:19:36 +00:00
Rahul Frias
17e0562098 Merge "Log OEMCrypto_CloseSession error" 2020-08-13 01:49:35 +00:00
Alex Dale
aa7ed24123 Merge "Log X-Google fields on failed HTTP requests." 2020-08-10 20:34:12 +00:00
Alex Dale
be2e32d09e Merge "Handle unlimited usage table capacity." 2020-08-07 20:35:43 +00:00
Rahul Frias
49e53ffdfe Log OEMCrypto_CloseSession error
[ Merge of http://go/wvgerrit/103643 ]

Bug: 161417560
Test: WV unit/integration test
Change-Id: I2d7e3b90e2e34e7854dea7aac865f8577d113aab
2020-08-05 02:20:28 -07:00
Rahul Frias
79eabb0989 Allow offline licenses to be loaded and restored in the same session
[ Merge of http://go/wvgerrit/103243 ]

Include review comments from wv gerrit CL.

Bug: 161551490
Test: WV unit integration tests, GtsMediaTestCases and
      WidevineConcurrentDrmCertificatesTest#testConcurrentDrmCertificates,
      MediaDrmTest#testMultipleLoadKeys on a redfin
Change-Id: Ie9b41a2e68b95692f9353578f6955637411d4dfc
2020-08-04 15:02:06 -07:00
Alex Dale
147c9e0afa Log X-Google fields on failed HTTP requests.
[ Merge of http://go/wvgerrit/103395 ]

To help with debugging failures in HTTP requests during unit tests,
this CL adds logging for Google's debugging response header fields.
These fields are of the type "X-Google-*" or "x-google-*" and provide
information such as the service name, server cell, error details, and
other details that can help isolate the cause of failure on the
server's end.

An additional unittest has been created to test the parser for the
header fields.

Tests that are known to exprience HTTP failures have been extended
to include logs for these fields should they be present.

Bug: 137619348
Test: Linux unit tests and Jenkins test
Change-Id: I69959af2ba91510f345bbb02cf7ca35c3f1119da
2020-07-30 17:24:11 -07:00
Alex Dale
99335a6aa8 DO NOT MERGE Handle unlimited usage table capacity.
[ Merge of http://go/wvgerrit/103684 ]
[ Cherry pick of http://ag/12221244 ]

The OEMCrypto method for usage table capacity can return zero to
indicate that the usage table size is not explicitly limited.  The
CDM must handle this case with regard to the CDM's usage table
management and information querying.

The usage table initialization tests are extended to include cases
where the table does not have a defined limit.

AddEntry() was missing call to update the usage table header after
creating a new usage entry.  This call is now included and required
additional changes to the usage table unit tests.

Bug: 160560364
Test: Android unit tests
Change-Id: Ica5d181092d2938d24deba5005a211ca883cb0f0
2020-07-29 17:45:21 -07:00