Commit Graph

3075 Commits

Author SHA1 Message Date
John Bruce
8a0ba4d0fa Merge "Disallow Blank App Package Name on Q and Later" into qt-dev 2019-05-08 18:58:40 +00:00
Fred Gylys-Colwell
2f79fe2773 Merge "Update unit tests for v15.2" into qt-dev 2019-05-08 17:36:36 +00:00
Jeff Tinker
83068b97c8 Merge "hidl plugin: add sendKeysChange_1_2" into qt-dev 2019-05-08 17:17:43 +00:00
Fred Gylys-Colwell
96431e9c2d Update unit tests for v15.2
Merge from Widevine repo of http://go/wvgerrit/77609

For v15.2 we require that nonces not collide across sessions and there are
restrictions placed on the mac key's IV in LoadKeys.

Test: ran unit tests on reference code

Bug: 131325434
Bug: 131326334

Change-Id: I1bb01c30d8c15d66d762c28b57d7700c44daa835
2019-05-07 22:50:06 -07:00
John W. Bruce
edccc13510 Disallow Blank App Package Name on Q and Later
(This is a merge of http://go/wvgerrit/78105)

The Widevine Android CDM should not allow itself to be instantiated
without an app package name, as this breaks SPOID protection.
Unfortunately, pathways exist prior to Android Q that allow this to
happen, and we cannot break these devices by changing the behavior now.
As such, we will only refuse to allow instantiation without an app
package name on devices first launched with Q and later.

This change also migrates the WVDrmFactory and its tests away from
explicitly naming friend classes for individual test, in favor of the
now-recommended "test peer" pattern.

Bug: 65680731
Test: libwvdrmengine_hidl_test
Test: CTS NativeMediaDrmClearkeyTest
Change-Id: Icccd1d8b9972ef6ad7e5b0dbf2d37ec987656385
2019-05-08 01:08:11 +00:00
Fred Gylys-Colwell
407d39699b Test MAC signature after license reload
Merge from Widevine repo of http://go/wvgerrit/78143

This verifies that the correct mac keys are used to sign a message when
generating a usage report or secure stop.

Test: unit tests on ref code and taimen
Bug: 111261264
Change-Id: I7d56a6ff0aae68a5554f7ce84d467697d1f9997b
2019-05-07 19:09:53 +00:00
Robert Shih
a1d9094721 hidl plugin: add sendKeysChange_1_2
Bug: 116738851
Test: vts
Change-Id: Ifdf537ff2f4922741eba5abdd37dd2dd5e37e161
2019-05-06 20:23:06 -07:00
TreeHugger Robot
a1e94e2eb1 Merge "Test loading second call to LoadKeys fails" into qt-dev 2019-05-07 02:18:17 +00:00
Fred Gylys-Colwell
3b9b77c7c7 Merge "Update docs for OEMCrypto v15.2" into qt-dev 2019-05-06 19:00:43 +00:00
Fred Gylys-Colwell
c7a4c0c7db Test loading second call to LoadKeys fails
Merge from Widevine repo of http://go/wvgerrit/78144

This CL verifies that LoadKeys cannot be called twice a second time in
an OEMCrypto session.

Bug: 131359743
Test: unit tests on refernce code and taimen
Change-Id: I3da1c7639ed163799ee5996fd9f7f8b427c7ed30
2019-05-06 09:42:18 -07:00
Fred Gylys-Colwell
db534a6a05 Update docs for OEMCrypto v15.2
Merge from Widevine repo of http://go/wvgerrit/77604

Test: ran unit tests

Bug: 131326334 Nonce collision should be avoided in open sessions
Bug: 131325434 mac key iv should not be 16 bytes before encrypted mac key
Bug: 129368634 HDCP 2.3 and 2.2 are not distinguishable
Bug: 127423611 Question about OEMCrypto V15 API
Bug: 124312571 Picture-in-Picture -- is it really needed for Android TV?
Bug: 131175454 Extend Provisioning 3.0 Schedule
Bug: 131359743 Do not allow multiple LoadKeys in a session

Change-Id: I8db4ec921978ea918adb17420db86de69e806120
2019-05-05 21:42:35 -07:00
TreeHugger Robot
862cb96e77 Merge "Handle key rotation" into qt-dev 2019-05-03 20:50:17 +00:00
Srujan Gaddam
fce75c295b Call SelectKey regardless of entitled key mapping
Bug: b/129426820
Test: CE CDM, Android unit/integration, Linux, ExoPlayer key rotation
playback with modmock and L3
Merge of http://go/wvgerrit/77608

http://go/ag/6543431 modified the entitlement key session to select the
entitled content key if it had just been loaded in so that there's a
valid current content key loaded in OEMCrypto. However, this did not
account for the case where you have two entitlement to entitled key
pairs. If OEMCrypto does not select the key when you switch from the
first pair to the second pair back to the first pair, OEMCrypto will
still be using the key from the second pair during decrypt. This CL
changes it so we SelectKey each time to make sure that we update the
current content key.

Change-Id: I764ec13deb87e14188707b811a44eff132eeb5a1
2019-04-30 10:51:33 -07:00
Rahul Frias
2e2e92280e Handle key rotation
[ Merge of http://go/wvgerrit/77049 ]

Entitlement PSSHs can now be provided in follow on key generation
requests to cause keys to be rotated without needing a license
exchange.

Bug: 128462397
Test: WV unit/integration tests, Netflix and GPlay tests,
      GtsMediaDrmTests

Change-Id: I6ed0901a35c498240f42e405a522d82ea8dce2f7
2019-04-23 13:54:51 -07:00
Srujan Gaddam
3e5ade22f9 Handle not setting length in getUniqueID
Test: oc-mr1-release to q upgrade with L3 offline licenses, pi-dev to q
upgrade with L3 offline licenses, CE CDM tests, Android unit/integration
tests, Linux tests
Bug: b/112611429
Merge of http://go/wvgerrit/77111

The Level 3 uses the getUniqueID method to uniquely identify devices to
save device keys. This method needs to be consistent and as part of the
method, the length is set. In previous versions, this length isn't set,
but starting from Pi, it is. What this means is that decryption of the
device keys fails, and therefore offline licenses are lost. As a
workaround, we attempt to decrypt the device keys with the length
parameter and with the default if we failed to decrypt. Since the
generation number is also encrypted by the unique id, in the case where
we succeed in decrypting with the default, we reencrypt the generation
number so it can be read in when we handle the usage table. Finally, we
reencrypt everything with the correct length unique id.

Change-Id: Id682771c3921dea35592914fc7a1aaa92fa6737a
2019-04-22 12:11:39 -07:00
TreeHugger Robot
c5189c3d12 Merge "Update Android Integration Guide" into qt-dev 2019-04-18 23:38:52 +00:00
Fred Gylys-Colwell
704870bed6 Document Keys / Session
Merge from Widevine repo of http://go/wvgerrit/74624
and http://go/wvgerrit/77025

Several people have asked how many keys / session are required as a
function of OEMCrypto version. That is often enough that this
information should go in the version compatibility document.

Bug: 128628354
Test: documentation change only
Change-Id: I3031013aab2feb38a0c5ce7e5304ec0d50487ea3
2019-04-17 12:17:00 -07:00
Fred Gylys-Colwell
f3e0b357b6 Update Android Integration Guide
Merge from Widevine repo of http://go/wvgerrit/72624

Update the Android supplement for Android Q and OEMCrypto v15.

Test: doc change only
Bug: 119832138
Change-Id: Ie58dcadf4cdb0cd3264b630b5f6f80789ba50e9c
2019-04-16 15:40:35 -07:00
Srujan Gaddam
79a271fcce Merge "Reintroduce heaps into Level 3 obfuscation" 2019-04-03 02:50:31 +00:00
Srujan Gaddam
68a5505378 Reintroduce heaps into Level 3 obfuscation
Bug: b/116056586
Test: CE CDM, Android unit/integration, and GTS tests
Merge of http://go/wvgerrit/75891

Heapification was removed from the Level 3 in b/111246860 due to
contributing to performance issues. These issues are addressed in the
obfuscation tool and these libraries are built using those fixes.

Change-Id: I62dc09b41f845f3f7aa283af6968ac0cbc6cf368
2019-04-02 14:34:17 -07:00
Rahul Frias
1aed4dc670 hidl: return BAD_VALUE from RemoveOfflineLicense when keyset is not found
[ Merge from http://go/wvgerrit/75623 ]

This addresses code-review comments during the merge to the wv repo.

Bug: 127828539
Test: WV unit/integration tests
Change-Id: I12abe3eb0767bb9ccb76940dcca12c17d32e8e53
2019-04-01 20:10:25 -07:00
Rahul Frias
dcfe0f3690 Merge "Remove references to internal documents" 2019-03-28 23:29:43 +00:00
Rahul Frias
4e745ff203 Remove references to internal documents
[ Merge of http://go/wvgerrit/75303 ]

Bug: 117181780
Test: WV unit/integration tests
Change-Id: Ica12e270a9ac5fbcff069aace807bb4651814ad7
2019-03-28 09:32:30 -07:00
Srujan Gaddam
0613bb1614 Merge "Add script to diff test results between changes" 2019-03-27 21:26:08 +00:00
Fred Gylys-Colwell
dd64dedb51 Fix LD_LIBRARY_PATH in run_all_unit_test.sh
Merge from Widevine repo of http://go/wvgerrit/75383

Because the tests need to find liboemcrypto.so.

Bug: 129354680
Test: ran on taimen and bonito.
Change-Id: I9cc802a2396937739b164851f51726fbc80550d5
2019-03-26 14:29:06 -07:00
Rahul Frias
a45deef63b Merge "Corrections for limited duration licenses" 2019-03-26 16:24:48 +00:00
Adam Stone
eeb09779aa Merge "Add extra OEMCrypto metrics" 2019-03-25 22:36:42 +00:00
Rahul Frias
43efc6d84a Corrections for limited duration licenses
[ Merge of http://go/wvgerrit/74627 ]

Limited duration licenses (where license duration is unlimited and
playback window is set to a small value) did not work correctly when
the initial decrypt call occured before the license was received.

Bug: 109653883
Test: WV unit/integration tests
Change-Id: I0738e97db525b239455e2ac93ab0bedd6611b311
2019-03-23 00:53:26 -07:00
Fred Gylys-Colwell
d641797e05 Use hex for FDPT hash
Merge from Widevine repo of http://go/wvgerrit/75123
Merge from Widevine repo of http://go/wvgerrit/75114

This changes the encoding for the hash to be hex instead of base64.

Also, the bad frame number is initialized to 0 to make it easier to
debug. And the FDPT test app now uses the correct byte order.

Bug: 129100318
Test: unit tests, FDPT test app.
Change-Id: I296bab990125a4e18bec92f3316e8289a3b25a6b
2019-03-22 17:14:27 -07:00
Srujan Gaddam
5356c66f0d Add script to diff test results between changes
Merge of http://go/wvgerrit/74965

It isn't always obvious which changes introduced test failures or fixes,
and similarly, it's unideal to have to manually run the tests for HEAD
and with a new change to determine the test diff, so this script runs it
for the last n changes, and diffs the test results by comparing the test
runs. It doesn't handle flaky tests, partly because I don't think it
can.

Change-Id: I5380abcb2f5bcadf172dba3c1270e4258e0c8a82
2019-03-22 10:17:43 -07:00
Adam Stone
09c7473dea Add extra OEMCrypto metrics
[ Merge from http://go/wvgerrit/74924 ]

These were not previously being collected or were collected
insufficiently.

BUG: http://b/121090396 http://b/112919252
Test: Unit tests, Gplay, Nflix, GTS
Change-Id: I32b7206cbe6071519b4a483fbcd0920dc1a26961
2019-03-20 11:25:19 -07:00
John Bruce
a5bc8be7a0 Merge "Remove Passthrough When L3 is Used w/ Opaque Handles" 2019-03-19 18:50:29 +00:00
John Bruce
907630a018 Merge "Fix unconditional use of __attribute__." 2019-03-19 18:47:19 +00:00
Rahul Frias
1a16b7d5ca Merge "Add unit tests to remove usage entries" 2019-03-19 15:34:33 +00:00
Jacob Trimble
86f6fb0ef7 Fix unconditional use of __attribute__.
(This is a merge of http://go/wvgerrit/74844)

__attribute__ is not supported on all compilers, notably it's not
supported on MSVC.  Commenting out the variable should suppress the
warning this is trying to fix.

Test: Android CDM Build
Bug: 122953649
Change-Id: I0101df1cca271415a6444e5455eb0085676bcabf
2019-03-18 16:16:26 -07:00
Rahul Frias
8942f7682a Add unit tests to remove usage entries
[ Merge of http://go/wvgerrit/74343 ]

This replicates a Netflix test that adds secure stops and removes them
one at a time, while some of the sessions are still open. Usage
enties will be deleted at the time, but the usage header table
will not be shrunk if the last entry is in use. This happens later when
sessions are closed and the last usage entry is no longer in use.

Bug: 120894148
Test: WV unit/integration tests, CE CDM tests
Change-Id: Ib572950afc61754fe5f3c417e650d5d08503425a
2019-03-18 15:47:12 -07:00
Robert Shih
d54634baa4 hidl: return BAD_VALUE from RemoveOfflineLicense when keyset is not found
Bug: 127828539
Test: VtsHalDrmV1_2TargetTest
Change-Id: Ia567be076a9460546c59c2a38231e18bb0549ce3
2019-03-18 15:24:22 -07:00
Rahul Frias
fd420ccdc5 Merge "Enable CE CDM usage tests" 2019-03-16 01:15:08 +00:00
John W. Bruce
672a12dd8b Remove Passthrough When L3 is Used w/ Opaque Handles
(This is a merge of http://go/wvgerrit/74628)

There is some old legacy behavior in CryptoSession for supporting
Chromecast. When a platform tries to use a combination of L3 and opaque
handles, it silently substitutes the type "clear buffers" instead.

No platform uses this behavior anymore. In fact, the CE CDM contains
code that explicitly prevents this case from being triggered. That code
has broken in every one of the last 3 releases. To allow the CE CDM to
end that bug farm, this patch removes the behavior that no one wants.

Bug: 112703532
Test: CE CDM Unit Tests
Test: Android Unit Tests
Change-Id: I7f70483fac46c75637da5378c5a8b1bf7a2c2860
2019-03-15 16:04:28 -07:00
Rahul Frias
f9ad1dad69 Update usage entry before closing a session
[ Merge of http://go/wvgerrit/74443 ]

When deleting a usage entry, a crypto session may need to be closed
and reopened if a usage entry has previously been loaded. Before closing
this session, the usage entry/usage table header information should be
saved.

This is for completeness rather than correctness. Looking at code,
usage header and entry information are saved after the license
release has been generated. This change might be helpful in case
that changes in the future.

Bug: 115920873
Test: CE CDM unit tests, WV unit/integration tests
Change-Id: Ifc8f761497198247db31dab2f47e8323af783681
2019-03-12 15:21:58 -07:00
Rahul Frias
77ec11b8a8 Merge "Add UsageTableHeader metrics" 2019-03-12 18:41:00 +00:00
Robert Shih
d0f87daf7a wv hidl: return ERROR_DRM_FRAME_TOO_LARGE when frame is too large
Bug: 127828539
Test: VtsHalDrmV1_2TargetTest
Change-Id: I8fe830f9dc904448dbc6c2627f199e4ea6a9db6f
2019-03-11 18:38:52 -07:00
John Bruce
dc869727ed Merge "Add LOG_SILENT LogPriority Again" 2019-03-09 00:32:53 +00:00
Rahul Frias
d8afbb3b51 Add UsageTableHeader metrics
[ Merge from http://go/wvgerrit/72183 ]

Adds basic metrics for the usage table header. This adds the last rev of
cdm_session.cpp that was merged to the wv repo.

Bug: http://b/112919252
Test: Unit tests. Manual GPlay
Change-Id: I9494caf6fcdfb3d335ea10fe8b712585e95c79e5
2019-03-08 14:00:01 -08:00
Rahul Frias
45638c74b3 Enable CE CDM usage tests
[ Merge of http://go/wvgerrit/74223 ]

Bug: 34949512
Bug: 109897011

Test: CE CDM unit tests, WV unit/integration tests
Change-Id: I4b8dca3cacbb66c87318c594f62d3e2a3e940308
2019-03-08 13:41:13 -08:00
Srujan Gaddam
502138ad84 Merge "Flush whole page + use percentile for page size" 2019-03-08 18:35:19 +00:00
John W. Bruce
84d9813b81 Add LOG_SILENT LogPriority Again
(This is a merge of http://go/wvgerrit/73743 and
http://go/wvgerrit/73903)

The CE CDM implements the ability to silence all logging with a "silent"
log level. However, under the covers, this assigned a value to g_cutoff
that was not a member of LogPriority, which fails some extremely strict
checks. This patch just adds a matching entry to LogPriority so that
"silent" is now a valid level in that enum.

A previous merge of this change broke builds on Elfin because it uses
stricter compiler settings that rejected the lack of LOG_SILENT in
certain switch statements. I've gone through the codebase and found
every switch on a LogLevel variable and updated it, of which only one
affects the Android build.

Bug: 118622359
Test: CE CDM Build
Test: Android Build
Test: Android Elfin Build Specifically
Change-Id: I6ba3556e0e70f5e7e1692754a8a2f54adae59a6b
2019-03-06 11:18:55 -08:00
John Bruce
def448a006 Merge "Revert "Add LOG_SILENT LogPriority"" 2019-03-06 19:03:02 +00:00
John Bruce
aa8d0a5d31 Revert "Add LOG_SILENT LogPriority"
This reverts commit 9a40a107f8.

Reason for revert: Elfin has stricter compiler settings than other platforms and breaks when this is checked in.

Change-Id: I169a43ff6b9d90101276690b1d3aae7865946eb0
2019-03-06 18:57:04 +00:00
John Bruce
aff6bfa8e3 Merge "Add Missing "override" to EntitlementKeySession::Type()" 2019-03-06 18:13:49 +00:00