Commit Graph

2347 Commits

Author SHA1 Message Date
Bob Badour
000b7d9716 Merge "[LSC] Add LOCAL_LICENSE_KINDS to vendor/widevine" into sc-dev am: ea0bd6030c
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13998816

Change-Id: I0e802fea548cd498d3d0e2787caf4a49f0339687
2021-03-26 07:01:24 +00:00
Bob Badour
ea0bd6030c Merge "[LSC] Add LOCAL_LICENSE_KINDS to vendor/widevine" into sc-dev 2021-03-26 06:45:39 +00:00
Alex Dale
bb709bfd27 Merge "Use new Base64 encode functions." into sc-dev am: 50757c84ec
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13972381

Change-Id: Iecee22009d4a0d56cf34133f83e44a5beab92747
2021-03-26 05:36:21 +00:00
Alex Dale
fb651b1974 Merge "Base64 encoding for string input." into sc-dev am: e189968a16
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13972380

Change-Id: I44f3bac15846b260feb3620641293660066bd004
2021-03-26 05:34:52 +00:00
Alex Dale
50757c84ec Merge "Use new Base64 encode functions." into sc-dev 2021-03-26 05:19:31 +00:00
Alex Dale
e189968a16 Merge "Base64 encoding for string input." into sc-dev 2021-03-26 05:18:43 +00:00
Bob Badour
376f47047c [LSC] Add LOCAL_LICENSE_KINDS to vendor/widevine
Added SPDX-license-identifier-Apache-2.0 legacy_by_exception_only to:
  Android.bp
  libwvdrmengine/Android.bp
  libwvdrmengine/vts/vendor_module/Android.bp

Added legacy_by_exception_only to:
  libwvdrmengine/cdm/Android.bp
  libwvdrmengine/cdm/core/src/Android.bp
  libwvdrmengine/cdm/core/test/Android.bp
  libwvdrmengine/cdm/metrics/src/Android.bp
  libwvdrmengine/cdm/test/integration-test.mk
  libwvdrmengine/cdm/test/unit-test.mk
  libwvdrmengine/level3/Android.bp
  libwvdrmengine/mediacrypto/Android.bp
  libwvdrmengine/mediacrypto/test/Android.mk
  libwvdrmengine/mediadrm/Android.bp
  libwvdrmengine/mediadrm/test/Android.mk
  libwvdrmengine/oemcrypto/odk/Android.bp
  libwvdrmengine/oemcrypto/odk/test/fuzzing/Android.bp
  libwvdrmengine/oemcrypto/odk/test/fuzzing/corpus_generator/Android.bp
  libwvdrmengine/oemcrypto/test/Android.mk
  libwvdrmengine/test/unit/Android.mk
  libwvdrmengine/tools/metrics_dump/Android.bp

Bug: 68860345
Bug: 151177513
Bug: 151953481

Test: m all

Exempt-From-Owner-Approval: janitorial work
Change-Id: I41ef520b6e394a7708f453a706e6ef1a5f46c36a
2021-03-25 09:52:52 -07:00
Rahul Frias
43c7ac72b3 Merge "Have system clocks return wall time" into sc-dev am: 8c6ce2e4c9
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13944148

Change-Id: I02e6c1e5523512aa1c6b57082ec4d4b4ac1e5d3f
2021-03-24 01:50:30 +00:00
Rahul Frias
8c6ce2e4c9 Merge "Have system clocks return wall time" into sc-dev 2021-03-24 01:23:19 +00:00
Rahul Frias
e2d3826aff Save and retrieve key information from licenses and usage records am: e538c96131
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13947818

Change-Id: I50878894d78ceeda6d134dca653b9e84c5311e09
2021-03-23 22:32:51 +00:00
Alex Dale
d859c1ab17 Use new Base64 encode functions.
[ Merge of http://go/wvgerrit/119806 ]

This change replaces all calls for base64 encoding which first converts
a string to a vector.  The new base64 encoding function allow for
encoding binary data contained within strings.

Bug: 181732604
Test: Android unittests
Change-Id: Ibfe79dba99e6a2ee2f2a96e85b62fbd22519aea7
2021-03-23 14:49:58 -07:00
Alex Dale
e51f869190 Base64 encoding for string input.
[ Merge of http://go/wvgerrit/119805 ]

This change adds 3 new functions for encoding binary data from a C++
string to a base64 encoded ASCII string.

The CDM and protobuf generated code use C++ strings to store binary
data.  These binary strings are commonly converted into a base64
encoded ASCII string for logging and for returning to the app.

This change also cleans up some of the internal components of the
string_conversions library to use several standard library C++11
method.

Bug: 181732604
Test: CE CDM unittests
Change-Id: I547568c6402e011344260f2df2a06e972122ab8a
2021-03-23 14:49:46 -07:00
Rahul Frias
e538c96131 Save and retrieve key information from licenses and usage records
[ Merge of http://go/wvgerrit/120512 ]

Wrapped DRM private keys are loaded when a key request is made or when
offline/usage sessions are restored. They were earlier loaded when a
session was opened.

For streaming sessions, key material will be fetched from the default
or legacy certificates and loaded when a key request is made.

For offline and usage sessions, key material may be retrieved from
license or usage records if available. If not available, information
associated with the legacy certificate will be loaded.

Certificate and wrapped keys are also written out when an offline
license or usage record is saved.

Bug: 169740403
Test: WV unit/integration tests
      WvCdmRequestLicenseTest.ProvisioningWithExpiringCertTest
      WvCdmRequestLicenseTest.StreamingWithExpiringCertTest
      WvCdmRequestLicenseTest.RestoreOfflineKeysWithExpiringCertTest
Change-Id: Ice0154c632170c46da171cbbb23a97380c610a98
2021-03-23 13:06:55 -07:00
Cong Lin
c6e310b50a Refresh L3 builds for buffer overflow fixes on master
Merge CL from wv master:
https://widevine-internal-review.git.corp.google.com/c/cdm/+/118363

Fixes included in this CL:
go/wvgerrit/111603
Fix L3 block offset test and re-enable buffer overflow tests

go/wvgerrit/111784
Fix heap overflow test in L3 and OEMCrypto ref

go/wvgerrit/113644
Check for buffer overflow when computing subsample size

go/wvgerrit/113946
Fix test failures caused by huge key length in L3

Bug: 180956067
Bug: 175001473
Bug: 175741683
Bug: 172866305
Bug: 175041667
Test: L3 unit test
Test: go/forrest https://android-build.googleplex.com/builds/tests/view?invocationId=I10900007766741431&testResultId=TR22818280880061022&redirect=http://sponge2/3c1fc176-f3bc-46e6-af7c-b2925ae3765b
Change-Id: Ied639d0639295aa6fade1d9ff3c6eab6a941b36d
2021-03-23 16:49:04 +00:00
Rahul Frias
dfd695c671 Add CLIENT_TOKEN_NOT_SET error code am: 30ebbefb40
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13947817

Change-Id: Idaf7baba8b96c6efcd02c324758f50b4c55adea1
2021-03-23 04:09:58 +00:00
Rahul Frias
66c9d9e351 Add certificate information to Usage Information am: 1aa197ce4a
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13937951

Change-Id: If540a1344dda9387a41f4fa83b6a92c76be77b23
2021-03-23 04:09:56 +00:00
Rahul Frias
30ebbefb40 Add CLIENT_TOKEN_NOT_SET error code
[ Merge of http://go/wvgerrit/120511 ]

Bug: 169740403
Test: WV unit/integration test
Change-Id: Iba77c0b7e7f1bee1e96b0d08f0ab8e8591292012
2021-03-22 17:08:34 -07:00
Rahul Frias
1aa197ce4a Add certificate information to Usage Information
[ Merge of http://go/wvgerrit/120509 ]

Certificates and wrapped key material are stored in the usage information
file but apart from usage information records. Usage info records include
an identifier which indicates the associated certificate. Routines to
help with finding, inserting or removal of associated certificates have
been included. After a usage entry is deleted, a garbage collection
routine is run to remove any certificates not used by usage infomation
records.

Bug: 169740403
Test: WV unit/integration tests
Change-Id: I49075a7704a58c2488b73eb7c38b007958af566d
2021-03-22 17:07:25 -07:00
Rahul Frias
dfe3ecc1a8 Merge changes Ic0de6328,Ic263f3df into sc-dev am: 335720be1c
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13925120

Change-Id: I640243505f50e53e7f0ee97b8c6c23b667210cb2
2021-03-22 20:55:17 +00:00
Alex Dale
81d5236ef6 Merge "Sync Android reference with CDM reference." into sc-dev am: 8e090b47b8
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13635472

Change-Id: I5056c23eb5f4d5aee370a7ba7e5efcb1d0632cd5
2021-03-22 20:53:56 +00:00
Rahul Frias
335720be1c Merge changes Ic0de6328,Ic263f3df into sc-dev
* changes:
  Add certificate information to offline licenses
  Add comments to clarify client and service clock times
2021-03-22 20:23:52 +00:00
Alex Dale
8e090b47b8 Merge "Sync Android reference with CDM reference." into sc-dev 2021-03-22 20:22:42 +00:00
Rahul Frias
57ebb70fe7 Add certificate information to offline licenses
[ Merge of http://go/wvgerrit/120508 ]

Offline licenses will now store the DRM certificate information. This
allows for expired certificates to be deleted and replaced without
losing the ability to use offline licenses.

Bug: 169740403
Test: WV unit/integration tests
      DeviceFilesTest.RetrieveLicenses
      DeviceFilesTest.StoreLicenses
Change-Id: Ic0de6328d32e0000d1b58c81019e6c2227278cc4
2021-03-21 19:11:06 -07:00
Rahul Frias
f6b4d140f4 Add comments to clarify client and service clock times
[ Merge of http://go/wvgerrit/120510 ]

* Added some comments to clarify which clock times are computed at the
  client and at the provisioning service. More detail is present in the
  device_files.proto
* Moved helper methods |SetDeviceCertificate| and
  |ExtractFromDeviceCertificate| from class methods to anonymous
  namespace
* Removed some commented out code

Bug: 169740403
Test: WV unit/integration
Change-Id: Ic263f3dfe296fff6d9b5380b2e7c663d87022cb2
2021-03-21 14:40:12 -07:00
Rahul Frias
615a1e9f64 Have system clocks return wall time
[ Merge of http://go/wvgerrit/120445 ]

Switch TestHost and FakeClock to use chrono::system_clock (wall time)
rather than chrono::steady_clock (ticks since boot time).

Bug: 183160800
Test: CE CDM tests
Change-Id: I6ef4c02c01ff96453847ee8f42e6037c298866b5
2021-03-21 13:34:05 -07:00
Alex Dale
f20e2b1ee9 Merge "Added unittests for WV CRC-32 implementation." into sc-dev am: 3050d95f6f
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13625374

Change-Id: Id6b5ee10dd30188ee72c9f4114d86899c216bee8
2021-03-19 23:43:14 +00:00
Alex Dale
3050d95f6f Merge "Added unittests for WV CRC-32 implementation." into sc-dev 2021-03-19 23:14:00 +00:00
Rahul Frias
6439635420 Merge changes from topic "b169740403_2" into sc-dev am: c586f7e62b
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13865723

Change-Id: I4592a697e97fbee9068e8a7407601e73834390f6
2021-03-19 21:50:20 +00:00
Rahul Frias
c586f7e62b Merge changes from topic "b169740403_2" into sc-dev
* changes:
  Verify DRM certificate validity
  Extract creation and expiration times from DRM cert
  Allow two DRM certificates for each identifier
2021-03-19 21:26:33 +00:00
Rahul Frias
b21be96b1b Verify DRM certificate validity
[ Merge of http://go/wvgerrit/120123 ]

DRM certificate creation and expiration times are now validated.

* New DRM (default) certificates will have an expiration time specified
by the provisioning service.

When stored, the client will include the time the certificate was
received. This allows for expiration calculation to occur when client
and provisioning service clocks are out of sync.

When read out, creation, expiration and acquisition times are
validated. The certificate is checked for expiry by making sure
that the time at the client since the license was acquired is not
greater than the expiration period. The time information stored at the
client may be tampered with. The license service will perform an
expiration check and reject the license request if tampered with.
The expiration time may be set to never expires/unlimited. This is not
a valid value for creation or acquisition time.

* Pre-existing (legacy) certificates from upgrading devices will not
have an expiration time set by the provisioning service. Instead
the client will calculate an expiration time 6 months with + or -
a random two month period in the future. This is stored along with the
certificate.

When read out, if no expiration time has been set by the client, one
will be calculated and written out. The certificate will be declared as
valid. If a client calculated expiration time is present, the
certificate will be validated. In case of tampering, the license service
can reject license requests and force reprovisioning when appropriate.

* ATSC certificates will continue to not have an expiration time.
No additional validation is required.

Other changes for non-ATSC licenses involve managing both default and
legacy certificate co-existance. When checking for DRM certificates,
the default certificate is attempted first. This is followed by a check
for the legacy certificate, if the default certificate is not present.

Bug: 169740403
Test: WV unit/integration tests
      DeviceFilesTest.StoreCertificateInvalidParams
      DeviceFilesTest.RetrieveAtscCertificate
      DeviceFilesTest.RetrieveAtscCertificateNotFound
      DeviceFilesTest.RetrieveCertificateInvalidParams
      DeviceFilesTest.RetrieveLegacyCertificateWithoutExpirationTime
      DeviceFilesTest.RetrieveLegacyCertificateWithClientExpirationTime
      DeviceFilesTest.RetrieveLegacyExpiredCertificateByClientExpirationTime
      DeviceFilesTest.RetrieveLegacyCertificateInvalidClientExpirationTime
      DeviceFilesTest.RetrieveCertificateWithoutKeyType
      DeviceFilesTest.RetrieveDefaultCertificate
      DeviceFilesTest.RetrieveDefaultCertificateNeverExpires
      DeviceFilesTest.HasCertificateAtsc
      DeviceFilesTest.HasCertificateDefault
      DeviceFilesTest.HasCertificateLegacy
      DeviceFilesTest.HasCertificateNone
      CertificateTest.StoreCertificateTest.DefaultAndLegacy/*
      CertificateTest.RetrieveLegacyCertificateTest.ErrorScenarios/*
      CertificateTest.RetrieveDefaultCertificateTest.ErrorScenarios/*

Change-Id: I7dbec7555fbd493c1ec61c6bb5d9428a2405b1fd
2021-03-19 02:49:20 -07:00
TreeHugger Robot
7fb07d23dc Merge "Annotate fallthrough in OEC Testbed" into sc-dev am: 640e8727dc
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13849252

Change-Id: Ie9a0becbd3052bf8e5296cfbec00ebc0f03746a0
2021-03-19 08:23:21 +00:00
TreeHugger Robot
640e8727dc Merge "Annotate fallthrough in OEC Testbed" into sc-dev 2021-03-19 07:41:24 +00:00
Rahul Frias
9a350eddbd Extract creation and expiration times from DRM cert
[ Merge of http://go/wvgerrit/119843 ]

Creation and expiration times are extracted from the device DRM
certificate. They are reported as
 * -1 if not set in the proto
 * 0 if unlimited
 * positive number otherwise

Bug: 169740403
Test: WV unit, integraiton tests
Change-Id: I9463954dfeb82b6a88ff5d608ed74d20f2424e83
2021-03-18 23:59:21 -07:00
Rahul Frias
3b15087627 Allow two DRM certificates for each identifier
[ Merge of http://go/wvgerrit/119684 ]

This allows for a default DRM certificate that includes an expiration
time and a legacy one without for each app+origin specific identifier.
Existing offline licenses/secure stops are not associated with a
certificate, and so we cannot delete legacy certificates even after
fetching a new one. New offline licenses/secure stops will be associated
with certificate information, so we will not have this problem going
forward.

Bug: 169740403
Test: WV unit/integration tests
Change-Id: I0f08f6bf98775fd43927243dc4a9f75f21bfbbcc
2021-03-18 23:58:46 -07:00
Alex Dale
aeefea26d7 Merge "Added unittests for OEM Certificates." into sc-dev am: 2cf17c34fe
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13625373

Change-Id: I7f6ebd9c7e999a79fb840e84ea07b757b784b7d9
2021-03-19 02:05:32 +00:00
Alex Dale
2cf17c34fe Merge "Added unittests for OEM Certificates." into sc-dev 2021-03-19 01:29:23 +00:00
TreeHugger Robot
a99a6146c4 Merge "Release crypto resources when provisioning fails" into sc-dev am: d1db6df88b
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13678765

Change-Id: I8ef19d25ad6712a3856b53edd9ee4941bd6e4844
2021-03-19 00:09:03 +00:00
TreeHugger Robot
aa8c74c041 Merge "Log license request and response" into sc-dev am: 9f574be636
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13740255

Change-Id: I0a88f852cf9841dc06f4ff4bdf61a41460ba9816
2021-03-19 00:08:48 +00:00
TreeHugger Robot
d1db6df88b Merge "Release crypto resources when provisioning fails" into sc-dev 2021-03-18 23:27:57 +00:00
TreeHugger Robot
9f574be636 Merge "Log license request and response" into sc-dev 2021-03-18 23:27:33 +00:00
Alex Dale
d9f39ebfa7 Merge "Wrapped OEM Certificate." into sc-dev am: 6c58348bb8
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13623728

Change-Id: Ic7b7a0c65c5e11da53649d31ac0d94ed1badf3c0
2021-03-18 22:08:04 +00:00
Alex Dale
6c58348bb8 Merge "Wrapped OEM Certificate." into sc-dev 2021-03-18 21:15:32 +00:00
Rahul Frias
f38479024f Correct test data member name am: edf9ad5b90
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13796843

Change-Id: I29d9b52b3e563a6296ec068f7788f0b8cd06aec2
2021-03-18 00:04:29 +00:00
Rahul Frias
b295a1d3af device_files proto changes for Expiring DRM certificates am: dbb1671e39
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13785063

Change-Id: I796dce0d2f1b164a4f426037856f49765ec8820e
2021-03-18 00:04:28 +00:00
Rahul Frias
edf9ad5b90 Correct test data member name
[ Merge of http://go/wvgerrit/119645 ]

Bug: 169740403
Test: WV unit/integration tests
Change-Id: I2a3e82869e3a45112e8b15eea4ac668980c3eb4d
2021-03-16 13:29:30 -07:00
Rahul Frias
dbb1671e39 device_files proto changes for Expiring DRM certificates
[ Merge of http://go/wvgerrit/119644 ]

This change includes additional fields in DeviceCertificate, License and
UsageInfo.

New DRM certificate will include a creation and expiration time.
In addition acquisition_time_seconds will allow the client to calulate
expiration time even when client and provisioning service clocks
are not in sync.

expiration_time_seconds will allow clients to expire DRM certificates
that do include an expiration time. A random value within a window
(4-8 months after update) will be calculated to avoid
a provisioning storm.

Drm certificate will be added to offline licenses. In a future release,
licenses will be removed on expiry and the certification information
that needs to be sent to the license service will be reduced.
This should reduce space overhead.

UsageInfo will use a certificate cache in case multiple usage info
entries use the same DRM certificate.

Bug: 169740403
Test: WV unit/integration tests
Change-Id: I2f34a1df526fa8168162a1b1ea930a2f257b87cd
2021-03-16 13:10:53 -07:00
TreeHugger Robot
bab2a08a61 Merge "Address compilation warnings" into sc-dev am: 6ee9f49e5c
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13818826

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I9be5b0d7c8fdd6986f725bb8aa1377d8419ef38b
2021-03-13 03:44:38 +00:00
Alex Dale
d1fa77bb3e Android tests call exit() when complete. am: 16c704fa09
Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13845281

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ifa7e194f128b305ec90534d51a4bd9226a7ca91b
2021-03-13 03:44:19 +00:00
TreeHugger Robot
6ee9f49e5c Merge "Address compilation warnings" into sc-dev 2021-03-13 02:43:45 +00:00
Alex Dale
16c704fa09 Android tests call exit() when complete.
[ Merge of http://go/wvgerrit/119804 ]

The coverage framework used by Android requires the process to call
exit() for coverage information to be dumped after the tests.

Android unit tests have been adapted to use the a new main module.
The core test_main.cpp used by integration tests has been updated to
call exit().

Bug: 138941105
Test: Linux and Android unittests
Change-Id: Ifffc7b8290c50dffe527738a36547c1d2fb90bd3
2021-03-12 16:22:20 -08:00