Commit Graph

3758 Commits

Author SHA1 Message Date
Rahul Frias
c5b65aa5ed Reprovision on error 10085 [ DO NOT MERGE ]
[ Merge of http://go/wvgerrit/110603 and http://go/ag/13139808 ]

Qualcomm SoC may report 10085 (RSASSA-PSS signature error) when
OEMCrypto_PrepareAndSignLicenseRequest is called. The app needs to
reprovision (or the user needs to factory reset their device) in order
to recover.

If the 10085 error is returned, the app currently will get a
MediaDrmStateException. The app has no way to be able to tell
whether this is due to the 10085 error or some other error.

This change returns a NEED_PROVISIONING error at the CDM level, which
will result in the app receiving a NotProvisionedException when
MediaDrm.getKeyRequest is called.

Bug: 174375589
Test: GtsMediaTestCases, WV unit/integration tests
Change-Id: I4f2884c8a5fd88ab2e9bfbc0731a20e58cec0f36
2020-12-03 03:29:33 -08:00
Robert Shih
44aea963d0 x86 L3: use correct struct size [ DO NOT MERGE ]
Bug: 139814713
Bug: 173331251
Test: GtsMediaTestCases
Change-Id: Ia2db4c1bd4e080a5c0ee4c7be742401494f251b9
2020-11-16 01:34:53 +00:00
Cong Lin
2f08c48e94 Upgrade L3 to v16 and update android makefiles [DO NOT MERGE]
Merging CL:
https://widevine-internal-review.googlesource.com/c/cdm/+/108203
and
https://widevine-internal-review.git.corp.google.com/c/cdm/+/103904 (changes to the L3 source files are excluded)

Generated L3 v16 for Android and added ODK dependency required by L3 v16.

Test: Unit tests on gLinux
    jenkins/linux_unit_tests
    jenkins/ce_cdm_tests
Test: Unit tests on Pixel 4(flame-userdebug, rvc-qpr-dev)
    vendor/widevine/libwvdrmengine/build_and_run_all_unit_tests.sh
Test: Manual ExoPlayer playback tests on Pixel 4(flame-userdebug) for L1 and L3
    WV: Secure HD/SD (cenc,MP4,H264)
    WV: Secure HD/SD (cbc1,MP4,H264)
    WV: Secure HD/SD (cbcs,MP4,H264)
Test: Widevine GTS tests(bramble-userdebug, rvc-qpr-dev)
    https://android-build.googleplex.com/builds/tests/view?invocationId=I35000006266076664&testResultId=TR45714199883476235
    (Note: the two failures are due to GTS/http issue and not related/specific to L3 and the change)
Bug: 136317881
Bug: 139814713
Change-Id: If3d4999ca3b725eab76c41588f202beec3873928
2020-11-04 18:53:04 +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
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
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
Rahul Frias
5cb846db83 Allow offline licenses to be loaded and restored in the same session am: 3709a4f419
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12209028

Change-Id: I105d1e1b88a554a3ef9cd2174b2210c15852b0e0
2020-07-26 18:11:50 +00:00
Rahul Frias
3709a4f419 Allow offline licenses to be loaded and restored in the same session
[ Merge of http://go/wvgerrit/103243 ]

In v16, OEMCrypto specifications required that an error be returned if
multiple attempts are made to load an offline license into a session.
This caused the GTS test testConcurrentDrmCertificates to fail. It was
introduced to verify that a license could retrieved and loaded into a
session and then restored. This was based on an app use case.

Ideally we would like to disallow a this behavior but need to make sure
it is not being used by apps.

For now this will be allowed. If detected, the CDM will reintialize the
OEMCrypto session and allow the license to be restored.

Bug: 161551490
Test: WV unit integration tests, GtsMediaTestCases and
      WidevineConcurrentDrmCertificatesTest#testConcurrentDrmCertificates,
      MediaDrmTest#testMultipleLoadKeys on a redfin
Change-Id: I0834e4419c3a6dccfd77aaea3afa3d65c2c0c742
2020-07-24 07:27:19 -07:00
Robert Shih
951877a8ec PolicyTimersV16: override base class HasRenewalDelayExpired am: d9112ff7e1
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12184963

Change-Id: Ic030fa19260c55a47686507abc7bec3b41253d77
2020-07-23 23:46:28 +00:00
Robert Shih
d9112ff7e1 PolicyTimersV16: override base class HasRenewalDelayExpired
Base class uses license_start_time_ which is not updated on renewals.

Merge of http://go/wvgerrit/103123

Bug: 161023174
Bug: 161621246
Test: WidevineDashPolicyTests#testL1RenewalDelay5S
Test: WidevineDashPolicyTests#testL1RenewalDelay13S
Change-Id: I16056d492bea4dd721984998b5cf38409fe3b055
2020-07-23 21:06:29 +00:00
TreeHugger Robot
7f873c03fd Merge "Start rental clock when nonce-free offline license loaded" into rvc-d1-dev am: d24b3d4bd2
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12184965

Change-Id: Ie7c3dd1ea96c1ef12aafc3fb19d2acbc4b0909cf
2020-07-21 10:39:25 +00:00
TreeHugger Robot
d24b3d4bd2 Merge "Start rental clock when nonce-free offline license loaded" into rvc-d1-dev 2020-07-21 10:24:53 +00:00
Fred Gylys-Colwell
940a771969 Adjust nonce for v15 servers am: 7f347cd59f
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12173751

Change-Id: Ifb92abb057be10bbe43d1cb184969302b7ff5b05
2020-07-21 08:28:12 +00:00
Fred Gylys-Colwell
b90f88072f Start rental clock when nonce-free offline license loaded
Merge from Widevine repo of http://go/wvgerrit/103107

When an offline license is reloaded, if it does not have a usage entry
to indicate when the rental clock was started, the start time defaults
to 0 in the ODK library (in OEMCrypto). This CL changes the code to
start the rental clock in this case. It does this by signing a dummy
message, which triggers the ODK library to start the rental clock.

Bug: 161585265
Bug: 161023174
Test: GTS tests. http://go/forrest-run/L55100000642199761
Change-Id: I4cf555b2fb43009ffb62e7b2c1a37265c3f70bfe
2020-07-20 23:11:48 +00:00
Fred Gylys-Colwell
7f347cd59f Adjust nonce for v15 servers
Merge from Widevine repo of http://go/wvgerrit/102783

When OEMCrypto is v16, but the license server is v15, we should not
create a new nonce for a license renewal. However, the request does
need a nonce or the license server will not generate a valid key
control block. So we should use the nonce that came from the original
license.

Bug: 160676790
Test: tested playback using netflix
Test: GTS tests. http://go/forrest-run/L55100000642199761
Change-Id: Ie1644b5abe0662387edf01f6110d82f70a64df6c
2020-07-20 23:11:41 +00:00
Robert Shih
231770e40c GetDecryptHashSupport: recognize OEMCrypto_ERROR_NOT_IMPLEMENTED am: da09f4abca am: 0db8b90cdb
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12036417

Change-Id: I94c1340571cffbe834c8ea2576008665d61c08c0
2020-07-06 23:58:19 +00:00
Robert Shih
0db8b90cdb GetDecryptHashSupport: recognize OEMCrypto_ERROR_NOT_IMPLEMENTED am: da09f4abca
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/12036417

Change-Id: Icc0b7bb24c4058de5786fc7e28a50bbc2aee5f4b
2020-07-06 23:39:43 +00:00
Robert Shih
da09f4abca GetDecryptHashSupport: recognize OEMCrypto_ERROR_NOT_IMPLEMENTED
[ Merge of http://go/wvgerrit/102383 ]

Bug: 153297118
Bug: 160182693
Test: MediaDrmTest#testDecryptHashError
Change-Id: I107668cdd1ab0acda717f184496e569a4f9a8653
2020-06-29 22:19:26 +00:00
Alex Dale
b535120ccd Merge "Test CDM sessions prevent multiple usage entries." into rvc-dev am: c628c5aca2 am: 3adda0dfe1
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11925460

Change-Id: I2bf4c438575cb22bd350bb9c364a2543f04423d3
2020-06-25 19:50:04 +00:00
Alex Dale
3adda0dfe1 Merge "Test CDM sessions prevent multiple usage entries." into rvc-dev am: c628c5aca2
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11925460

Change-Id: Ia63d263ae89bc14836704f1dc2d95f5b06590754
2020-06-25 19:39:21 +00:00
Alex Dale
c628c5aca2 Merge "Test CDM sessions prevent multiple usage entries." into rvc-dev 2020-06-25 19:25:18 +00:00
Rahul Frias
abad87b79f Merge "Handle SPOID calculation for L3" into rvc-dev am: 25d1646138 am: 652258d70e
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11736137

Change-Id: I11dff2a7fc64d467cc7e31206b2b3c521c397006
2020-06-22 18:21:38 +00:00
Rahul Frias
652258d70e Merge "Handle SPOID calculation for L3" into rvc-dev am: 25d1646138
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11736137

Change-Id: Ifb2d04b609a00905c5c42ee629e83674822b64cb
2020-06-22 18:14:27 +00:00
Rahul Frias
25d1646138 Merge "Handle SPOID calculation for L3" into rvc-dev 2020-06-22 18:04:18 +00:00
Alex Dale
0aaf1df125 Test CDM sessions prevent multiple usage entries.
[ Merge of http://go/wvgerrit/102068 ]

CDM sessions should not be able to load multiple usage entries.
OEMCrypto already prevents multiple entries from being loaded by the
same OEMCrypto session; however, restoring a key typically creates a
new OEMCrypto session, which should not be allowed twice within the
same CDM session.

This test verifies that CDM returns an error if restore key is called
multiple times within the same session.

Bug: 136143733
Test: Android integration test
Change-Id: I594c91250217fd958837328162f909bc931d373f
2020-06-19 20:40:54 -07:00
Rahul Frias
7e689a1828 Handle SPOID calculation for L3
[ Merge of http://go/wvgerrit/101443 ]

The WVDrmPlugin has a single CdmIdentifier. The CdmIdentifier contains
a SPOID that is calculated from the device ID (keybox or OEM cert),
an application reverse domain name and possibly an origin.

The CdmIdentifier is set and SPOID calculated on certain calls into
WVDrmPlugin. Once it is set, it will not be recalculated. We prevent
certain operations such as modifying the origin once the CdmIdentifier
has been set as this will require recalculating the SPOID.
Recalculating the SPOID may affect open sessions or calls in progress.

In a similar way, modifying the security level, will affect the
Device ID value and in turn the SPOID. The security level cannot be modified
if any sessions are open. This does leave open the possibility that the
SPOID may be calculated at one security level, sessions are then closed,
and the security level is then changed without an error being flagged.

The provisioning certificate file name is based on the SPOID. When
the SPOID does not match the security level, either the provisioning
information may not be found even though that security level has
been provisionined or the provisioning information may be stored
in an incorrect location if provisioning occurs.

The correct solution is to prevent modifications to the security level
once the CdmIdentifier is set. This is a behavior change and might
impact apps. We will reevaluate this for the next release.

For now, we will work around this. When the CdmIdentifier is set for L3,
we will calculate SPOIDs with both L1 and L3 device IDs and check if
provisioning previously occurred with SPOIDs calculated for that level.
If so, use that level, otherwise use L3.

Bug: 147703382
Test: Android unit/integration tests, GtsMediaDrmTests
Change-Id: Ia64adfc5848e431ee3876af03eebdb4b6eb83116
2020-06-17 00:50:14 -07:00
Edwin Wong
456caca048 Merge "Add v16 Widevine Integration Guide Android Supplement" into rvc-dev am: 6b8d0e034d am: 656db1857b
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11838915

Change-Id: I3bf7e672c918824a493402022d54c317f02655f6
2020-06-17 01:14:02 +00:00
Edwin Wong
656db1857b Merge "Add v16 Widevine Integration Guide Android Supplement" into rvc-dev am: 6b8d0e034d
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11838915

Change-Id: I3b1f5fa74f157d7ffc336ec53f61f6dacf29d2d9
2020-06-17 00:59:46 +00:00
Edwin Wong
6b8d0e034d Merge "Add v16 Widevine Integration Guide Android Supplement" into rvc-dev 2020-06-17 00:47:04 +00:00
Edwin Wong
72dc93ed1d Add v16 Widevine Integration Guide Android Supplement
The doc is based on
WidevineSecurityIntegrationGuideforCENCAndroidSupplement_v15.pdf.
The "Build Files" and "Reference Implementation" sections are
updated for v16.

merged from http://go/wvgerrit/101747

Please see revision history in:
https://docs.google.com/document/d/19pSOpV5_6AtyK82p1b5DajlYZnVOfyL63p5h72yWW5k/edit?usp=sharing

Test: revision history

bug: 147596889
Change-Id: If3e9fc6bb268d1d3be62b56e2e43752d8df3fc03
2020-06-16 15:19:34 -07:00
Rahul Frias
bde967aa74 Merge changes I295f66f9,I142f286c into rvc-dev am: 05fbb3dd87 am: 0db9b974c2
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11620164

Change-Id: I0bdb926501259cce1a74c631bd284a7a8073fa9d
2020-06-16 09:07:19 +00:00
Rahul Frias
0db9b974c2 Merge changes I295f66f9,I142f286c into rvc-dev am: 05fbb3dd87
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11620164

Change-Id: I59aa80b62824a29a8350b99a8f9a35d193aa968e
2020-06-16 08:54:27 +00:00
Rahul Frias
05fbb3dd87 Merge changes I295f66f9,I142f286c into rvc-dev
* changes:
  Add ATSC support - part 2
  Add ATSC support - part 1
2020-06-16 08:46:02 +00:00
Fred Gylys-Colwell
8dafa15521 Remove Android.mk for OEMCrypto ref code am: 119932ea69 am: 859038e6c8
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11870737

Change-Id: I0c42f412da1de1624577700887db1f6bd7ca937c
2020-06-16 02:20:30 +00:00
Fred Gylys-Colwell
859038e6c8 Remove Android.mk for OEMCrypto ref code am: 119932ea69
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11870737

Change-Id: Iab024d334ba53aacd6813a350749f6a31568d635
2020-06-16 02:12:45 +00:00
Fred Gylys-Colwell
119932ea69 Remove Android.mk for OEMCrypto ref code
Merge from Widevine repo of http://go/wvgerrit/101905

The reference OEMCrypto should not be built as part of Android.

Test: Builds
Bug: 146361995
Change-Id: Ic25e6e567fcac519636f64dabc0d59b3df78990e
2020-06-15 17:40:28 -07:00
Rahul Frias
8da1145012 Add ATSC support - part 2
[ Merge of http://go/wvgerrit/100905 and http://go/ag/10708438 ]

Add support for ATSC certificate and licenses handling. ATSC
files are distinguished from the apps DRM certificate and licenses
by file naming conventions.

Bug: 139730600
Test: WV unit/integration test, GtsMediaTestCases
Change-Id: I295f66f92fe01d7716978deac9dc360d74addedd
2020-06-12 03:48:58 -07:00
Rahul Frias
bbe9f6afc4 Add ATSC support - part 1
[ Merge of http://go/wvgerrit/100864 and http://go/ag/10704773 ]

ATSC 3.0 allows for licenses to be downloaded OTA and are tied to
a DRM certificate that may be shared across apps. The provisioning
process for ATSC may happen at the factory or during an OS update.

This contrasts from the regular OTT model, which requires that
provisioning and license download have an uplink as well as a
downlink connection.

This adds support for the ATSC mode property. ATSC mode can only be
set (or unset) before sessions are opened. Once the CDM identifier is
set/sealed, requests to modify the ATSC mode will be rejected.

If one needs to open sessions with both ATSC mode and regular (non-ATSC)
mode, separate MediaDrm objects will need to be created. The default
mode is to not use ATSC.

Enable ATSC mode by calling
  mediaDrm.setPropertyString("atscMode", "enable")

Disable ATSC mode by calling
  mediaDrm.setPropertyString("atscMode", "disable")

Provisioning and unprovisioning requests for ATSC will be rejected as
certificates will be retrieved by the ATSC service.

Bug: 139730600
Test: WV unit/integration test, GtsMediaTestCases
Change-Id: I142f286c711fe007ff42125c3c8cdc6450b6ea36
2020-06-08 14:56:48 -07:00
Fred Gylys-Colwell
a4b30d900e Update OEMCrypto documentation to v16.3 am: aa5fc5afd0 am: 30ea7ee843
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11707216

Change-Id: Ie80d8d3aa4f0825ac68065ab38eeaba46169ca29
2020-06-04 22:00:27 +00:00
Fred Gylys-Colwell
30ea7ee843 Update OEMCrypto documentation to v16.3 am: aa5fc5afd0
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11707216

Change-Id: Ie462379eedd98d16a3ac33d9184147baf7a47988
2020-06-04 21:34:08 +00:00
Fred Gylys-Colwell
aa5fc5afd0 Update OEMCrypto documentation to v16.3
Merge from Widevine repo of http://go/wvgerrit/101243

Changed the version number to 16.3 and the date to June 1st.  The
delta document has a short description of CL's added since
April 6th.

Test: documentation changes only
Bug: 157030231
Change-Id: I93c2b09d6a24efc71ed77110b115cafbd6fde1c6
2020-06-03 06:14:35 -07:00
Fred Gylys-Colwell
ed6f7c1347 Update OEMCrypto unit tests to require ODK 16.3 am: 45681615b8 am: d599c74011
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677949

Change-Id: I53611ff17e99da2aa051b3222f3eb6ac8a248ca5
2020-06-02 22:01:57 +00:00
Fred Gylys-Colwell
b72520df48 Do not verify decrypt hash when no key selected am: 36968de671 am: 51992ab155
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677948

Change-Id: I2664ea17c562ae77c192abff4cd54328dc2867ee
2020-06-02 22:01:55 +00:00
Fred Gylys-Colwell
299d866412 Unit test for loading nonce-free offline license am: a615671f48 am: ed900f242b
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677947

Change-Id: I08a1dddc3bd787a4c8484373e1614a83cf79c67c
2020-06-02 22:01:53 +00:00
Fred Gylys-Colwell
0f63c0191d Check for null pointers in oemcrypto adapter am: 42eb79a3ff am: 7a4313483c
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677946

Change-Id: Ibdd1da583e249fc412e3a2c2d2a40835f7a77f65
2020-06-02 22:01:50 +00:00
Fred Gylys-Colwell
253eb191ea Update ODK Library to 16.3 am: 166b3e8403 am: 62802d8e10
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11699230

Change-Id: Ife7bba778cd3a2eca3da66898539e81faaee2051
2020-06-02 22:01:48 +00:00
Fred Gylys-Colwell
d2830141cc ODK: forward compatibility and nonce-free offline license support am: 8dc1d7a11d am: 5bb396fb72
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11688972

Change-Id: I92345d75991bfbe9f1214dd61350b0be90eac8fb
2020-06-02 22:01:46 +00:00
Fred Gylys-Colwell
d599c74011 Update OEMCrypto unit tests to require ODK 16.3 am: 45681615b8
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677949

Change-Id: Ic8c45cc7fce842f67777ab0a003a541fbae7f9fb
2020-06-02 21:49:26 +00:00
Fred Gylys-Colwell
51992ab155 Do not verify decrypt hash when no key selected am: 36968de671
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677948

Change-Id: I7f9acec222c2840720be3b36423b502582c2ee25
2020-06-02 21:49:24 +00:00
Fred Gylys-Colwell
ed900f242b Unit test for loading nonce-free offline license am: a615671f48
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/11677947

Change-Id: Ia129aba764568a853b6b89a7f35f902ef2068942
2020-06-02 21:49:22 +00:00