Source release 14.1.0

This commit is contained in:
John W. Bruce
2018-06-29 15:59:47 -07:00
parent 3ab70cec4e
commit afa11a48a0
1941 changed files with 557780 additions and 105547 deletions

View File

@@ -1,5 +1,120 @@
# Widevine CE CDM Changelog
[TOC]
## 14.1.0 (2018-06-29)
Features:
- The OEMCrypto headers and documentation have been updated to v14.1
- Note that although this is CE CDM 14.1.0 and it contains OEMCrypto v14.1,
the synchronization of the minor version numbers is a coincidence. We do
not guarantee that future OEMCrypto and CE CDM minor version updates will
always coincide like this. We do expect that major version updates will
coincide.
- The client identification data passed up in a provisioning request has been
expanded to match the client identification data passed up in a license
request.
- In order to protect users' privacy, this expanded client identification
data is encrypted with the provisioning server's service certificate.
- For apps using entitlement licenses, loading new entitled keys will no
longer unload the previous entitled keys. After loading new entitled keys,
both the old and new entitled keys will be available for decryption. Once
loaded, entitled keys will remain valid until the session they were loaded
into is closed.
- This does not affect the behavior of OEMCrypto. Inside OEMCrypto, there
remains at most one entitled key loaded for each entitlement key. The CE
CDM handles switching out entitled keys so that the correct entitled key
is loaded at any given time.
- It is now possible to manually provision the CE CDM, rather than relying on
the automatic generation of a provisioning request when attempting to
generate a license request on an unprovisioned system. Partners that know
they need to provision can use `Cdm::getProvisioningRequest()` and
`Cdm::handleProvisioningResponse()` to perform provisioning before trying to
open any sessions.
- A new method, `Cdm::forceRemove()` has been added to allow the removal of
offline data associated with a license without a server roundtrip. This is
generally *not* what is desired, and this method should be used only by
partners who are certain they want to discard offline licenses and/or usage
info without the server being aware of it. Most partners will want to
continue using `Cdm::remove()` to perform a release roundtrip with the
licensing server, so that the server can track the release and record the
final usage information.
- An OEMCrypto clock rollback-prevention test has been added,
`UsageTableTest.TimeRollbackPrevention`. This test can only run if the
unit tests are being run as root, however, and is disabled automatically
when the unit tests are run as a non-root user.
- Usage information is now persisted to disk whenever a session is closed, in
addition to its existing behavior of saving periodically. This gives better
persistence at the expense of slightly more storage writes.
- Additional unit tests for existing behavior have been added.
- This changelog now has a table of contents.
- [Widevine_OEMCrypto_Version_Compatibility.pdf][oec-version-compat] has been
added, outlining the compatibility between the various Widevine CDM
releases and the various OEMCrypto versions.
- [Widevine_DRM_Device_Provisioning_Models.pdf][provisioning-models] has been
added, outlining the differences between Provisioning 2.0 and 3.0.
- The script `create_static_bundle.py` has been added to assist partners who
want to concatenate all the static libraries that make up the Widevine CE
CDM into one static library.
[oec-version-compat]: ./oemcrypto/docs/Widevine_OEMCrypto_Version_Compatibility.pdf
[provisioning-models]: ./oemcrypto/docs/Widevine_DRM_Device_Provisioning_Models.pdf
Dependency Updates:
- The bundled version of Protocol Buffers has been updated to
[v3.5.1][protobuf-3.5.1]. The Widevine CE CDM should continue to work with
any version of Protocol Buffers at or greater than v2.6, but we now
recommend v3.5.1.
- As part of this update, the compilation flags for Protocol Buffers were
changed. Depending on the flags partners use by default, they may need to
make changes to their flags to accomodate the new version of Protocol
Buffers.
- The bundled version of BoringSSL has been updated to commit
[`0080d83b9faf8dd325f5f5f92eb56faa93864e4c`][boringssl-0080d83b].
[protobuf-3.5.1]: https://github.com/google/protobuf/releases/tag/v3.5.1
[boringssl-0080d83b]: https://boringssl.googlesource.com/boringssl/+/0080d83b9faf8dd325f5f5f92eb56faa93864e4c
Bugfixes:
- Cleaned up redundant compiler flags in the sample x86-64 platform files.
- `UsageTableTest.TwoHundredEntries` was actually testing 201 entries. It has
been fixed.
- The CE CDM will now build without modification on Clang 4 and 5. Previously,
the Protobuf build triggered some warnings that were treated as errors.
- The CDM will now prevent attempts to unprovision devices that use a baked-in
device certificate in their OEMCrypto implementation, as it is not possible
to reprovision these devices.
- The documentation for `Cdm::initialize()` has been updated to make the
caller's responsibilities more explicit. The caller must ensure that the
objects passed to the library at initialization outlive the library itself.
This has always been the case, but the documentation for it has been made
clearer.
- The documentation for `Cdm::create()` was not updated to reflect the changes
in CE CDM 14.0.0 that disallowed passing `NULL` to it. The documentation has
been updated.
- The CDM now recovers more gracefully when files persisted to disk have been
corrupted.
- A race condition between `Cdm::decrypt()`, `Cdm::close()`, and periodic
timers has been fixed.
- The copyright headers on the source code files have been updated.
- Fixed a situation where the CDM might incorrectly report the expiration time
of licenses that never expire. `Cdm::getExpiration()` should now correctly
report an expiration of `-1` for these licenses. Note that the actual
expiration time was always being tracked correctly internally; it was only
being reported incorrectly to the application.
- The CE CDM already made defensive copies of the buffer parameters when
decrypting data in chunks, but it did not make defensive copies when
calling `OEMCrypto_CopyBuffer()` in chunks. This has been fixed. This
resolves issues that occurred when OEMCrypto modified the buffer parameters
in-place during calls to `OEMCrypto_CopyBuffer()`.
- Several disabled unit tests that did not need to be disabled anymore have
been re-enabled.
- Fixed a place where newer versions of Clang could not infer the correct
overload of `std::string::insert()` to call.
- The `HttpSocket` class used by the unit tests is now more resilient against
errors that occur during HTTPS communication and will retry after a delay
when it detects a retryable error.
## 14.0.0 (2018-05-16)
Features: