Cherry pick 18.4 changes to udc-widevine-dev

Get the udc-widevine-dev Android branch and oemcrypto-v18 cdm branch in
sync. The commit ID for 18.4 on oemcrypto-v18 is
https://widevine-internal.git.corp.google.com/cdm/+/a2f23a2281e5e06dc2867585bdc516fa132b639.

Merged from go/wvgerrit/190151

Bug: 290252845
Test: unit tests passing on Panther device
Change-Id: I63fa3f1c784f737ca1480e5febe4f3f5a8a49948
This commit is contained in:
Vicky Min
2024-02-01 19:18:44 +00:00
parent 540c8dfd50
commit 4129b3ac9f
48 changed files with 1491 additions and 330 deletions

View File

@@ -2,6 +2,21 @@
[TOC]
## [Version 18.4][v18.4]
Version 18.4 includes the reference implementation in OPK to support MediaCAS,
and an end-to-end demo of OEMCrypto CAS functionality. These updates were in
fact introduced in Version 17.2. See CAS-related updates in the change log of
Version 17.2 for details. Since Version 17.2 changes were merged to OEMCrypto
v18 after Version 18.3 got published, we bumped the version to 18.4 to reflect
the updates. If your device doesn't support MediaCAS, this update can be skipped.
### Other changes
- A fix in ODK that matches minor version with major version during session
initialization.
- Added a unit test for zero subsample size.
## [Version 18.3][v18.3]
Version 18.3 includes a major feature (Cast with Provisioning 4.0) and various
@@ -9,7 +24,7 @@ minor changes. Version 18.2 was an internal version bump for the ODK that
included changes used by the provisioning server. Since we keep the ODK and OPK
version numbers in sync, the OPK version effectively skipped 18.2.
## Cast with Provisioning 4.0
### Cast with Provisioning 4.0
The OPK now supports devices that wish to act as cast receivers while using
Provisioning 4.0. Previously, only devices using Provisioning 2.0 or devices
@@ -20,7 +35,7 @@ The OPK changes are included in this release. The CDM changes are part of
Android U. The provisioning server changes are live on Widevine staging servers,
and will be pushed to production by August 2023.
## OP-TEE port changes
### OP-TEE port changes
- Added CSR and DeviceInformation implementations for Provisioning 4.0.
- Bugfix: REE->TEE message shared memory was sized based on the incoming request
@@ -29,7 +44,7 @@ did not fit in the nearest page boundary. Fixed by setting the shared memory
size to the maximum allowed and passing in the request size as a separate
TEE_Param.
## Other changes
### Other changes
- Updated BoringSSL dependency to
https://boringssl.googlesource.com/boringssl/+/e1b8685770d0e82e5a4a3c5d24ad1602e05f2e83
@@ -50,7 +65,7 @@ license response. The client-side value of `MAX_NUM_KEYS` must be changed in
`odk/include/odk_target.h` to match the server's value. This is only intended
for closed network systems.
## Known issues
### Known issues
- CdmOtaKeyboxTest.BasicTest may fail due to server issues
- The ODK renewal clock is not correctly checked for all circumstances. This
@@ -243,6 +258,46 @@ OS.
4.0.
- The OPK does not yet support MediaCAS functionality.
## [Version 17.2][v17.2]
This release contains the first version of OPK to support MediaCAS, an
end-to-end demo of OEMCrypto CAS functionality, several bug fixes in OPK and a
few updates to the OEMCrypto unit tests and fuzz tests.
MediaCAS support has been added to OPK. `OPK_Pack_LoadCasECMKeys_Request()`,
`OPK_Unpack_LoadCasECMKeys_Request()`, `OPK_Pack_LoadCasECMKeys_Response()`,
`OPK_Unpack_LoadCasECMKeys_Response()` are moved out of the auto-generated
serialization code and are added to the special cases, to allow implementor to
pack customized data. CAS-specific WTPI functions along with a reference
implementation have been added.
A new `cas` directory is added to the `ports/linux` project. This contains
an end-to-end demo of OEMCrypto CAS functionality. The OEMCrypto CAS test client
communicates with the Linux `tee_simulator_cas` via `liboemcrypto.so` and
`libtuner.so`. `tee_simulator_cas` loads CAS keys and performs descrambling.
All CAS specific code in OPK is guarded by the compiler flag `SUPPORT_CAS`.
Several other updates and fixes to OPK in this release include:
- `strnlen()` is removed from OPK to avoid issue caused by the terminating '\0'.
- Explicit call to `builtin_add_overflow()` is removed and `oemcrypto_overflow`
wrappers are used instead.
- Added non-NULL checks in `WTPI_UnwrapValidateAndInstallKeybox()`,
`OEMCrypto_OPK_SerializationVersion()`, and `OPKI_GetFromObjectTable()`.
- Validated the wrapped key size to be non-zero.
- Set OP-TEE serialized request size to the maximum size expected.
- HMACs are compared in constant time.
- Fixed pointer arithmetic with size_t to avoid unexpected truncation of the
calculated address.
- No-op for zero-sized subsample instead of aborting OPK.
This release also contains a few updates to the OEMCrypto unit tests and fuzz
tests:
- Reduced clock skew in flaky duration tests.
- Removed device ID check since it is not required for v17.
- Added a test for zero subsample size.
- Cleaned up fuzz helper classes and added more fuzz test coverage.
## [OPK Version 17.1.1][v17.1+opk-v17.1.1]
This release fixes a flaw in the OPK code that could allow content that requires
@@ -420,4 +475,7 @@ Public release for OEMCrypto API and ODK library version 16.4.
[v17+test-updates+opk+mk]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v17+test-updates+opk+mk
[v17.1]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v17.1
[v17.1+opk-v17.1.1]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v17.1+opk-v17.1.1
[v17.2]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v17.2
[v18.1]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v18.1
[v18.3]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v18.3
[v18.4]: https://widevine-partner.googlesource.com/oemcrypto/+/refs/tags/v18.4