Source release 15.0.0
This commit is contained in:
130
CHANGELOG.md
130
CHANGELOG.md
@@ -2,6 +2,136 @@
|
||||
|
||||
[TOC]
|
||||
|
||||
## 15.0.0 (2018-02-28)
|
||||
|
||||
Features:
|
||||
- Widevine CE CDM 15.0.0 supports and requires OEMCrypto v15.1. The OEMCrypto
|
||||
header files, documentation, Reference OEMCrypto implementation, and tests
|
||||
have been updated to v15.1. For a full list of new features in OEMCrypto
|
||||
v15, please see the
|
||||
[Widevine Modular DRM Version 15 Delta document][oec-15-delta].
|
||||
- Note that the threading requirements for OEMCrypto implementations were
|
||||
revised in OEMCrypto v15, and the Widevine CE CDM 15.0.0 takes greater
|
||||
advantage of parallelism where possible. When the application uses the
|
||||
Widevine CE CDM from multiple threads, the Widevine CE CDM will now be
|
||||
more willing to call into OEMCrypto simultaneously from multiple threads,
|
||||
though always obeying the guarantees put forth in the
|
||||
[OEMCrypto v15 specification][oec-15].
|
||||
- The Widevine CE CDM now requires support for C++11 and C11. A
|
||||
C++11-supporting compiler and STL library are required in order to build
|
||||
the Widevine CE CDM.
|
||||
- We have begun replacing POSIX functions and headers with their C++11 STL
|
||||
equivalents where possible. As a side-effect of this, it should be much
|
||||
easier to compile the Widevine CE CDM for non-POSIX-compliant platforms.
|
||||
- The Widevine-created drop-ins for several STL classes have been replaced
|
||||
with their STL equivalents. This eliminates bugs originating in these
|
||||
classes and improves performance on some systems.
|
||||
- `wvcdm::scoped_ptr`
|
||||
- `wvcdm::shared_ptr`
|
||||
- `wvcdm::Lock`
|
||||
- `wvcdm::AutoLock`
|
||||
- The Widevine CE CDM now builds with hidden visibility as the default and
|
||||
only exports symbols that correspond to the public API of the library. This
|
||||
allows the final binary to be smaller and faster and can reduce conflicts
|
||||
with other libraries.
|
||||
- It is now possible to set separate service certificates for the Provisioning
|
||||
Service and the Licensing Service. Methods that install a service
|
||||
certificate now take a parameter that indicates if this certificate is to
|
||||
be installed for the Provisioning Service, the Licensing Service, or both.
|
||||
- To replicate the previous behavior, pass `Cdm::kAllServices` to install
|
||||
the certificate for both services at the same time.
|
||||
- It is now valid to pass `nullptr` to
|
||||
`Cdm::parseAndLoadServiceCertificateResponse()` if you do not want to cache
|
||||
the parsed certificate for future reuse.
|
||||
- The `onDirectIndividualizationRequest` callback has been removed. In
|
||||
Widevine CE CDM 14.1.0, `Cdm::getProvisioningRequest()` and
|
||||
`Cdm::handleProvisioningResponse()` were added to allow applications to
|
||||
proactively provision unprovisioned devices. Starting with Widevine CE CDM
|
||||
15.0.0, using these methods is now *mandatory*. There is no more
|
||||
`onDirectIndividualizationRequest` callback, and trying to open a session,
|
||||
generate a license request, or load an offline license will return an error
|
||||
if the device is not provisioned.
|
||||
- The existing method `Cdm::isProvisioned()` can be used to check if the
|
||||
device is provisioned at run-time.
|
||||
- The status code `kDeferred` has been removed.
|
||||
- There is now an overload of `Cdm::decrypt()` that takes an explicit session
|
||||
to use for decryption as a parameter. Ordinarily, `Cdm::decrypt()` will
|
||||
automatically find the session that matches the Key ID specified in the
|
||||
`input` parameter. However, there are some situations where the Key ID may
|
||||
not yet be known, such as when feeding clear content through
|
||||
`Cdm::decrypt()` before the Key ID is known. In these cases, it is necessary
|
||||
to be explicit about which session the CDM should use for decryption.
|
||||
- The Widevine CE CDM now supports Provider Client Tokens. If the license
|
||||
server includes a Provider Client Token with the license, then it will be
|
||||
copied to any renewal requests that are generated for that license.
|
||||
- The test code has been refactored and centralized so that it will be more
|
||||
reliable when running only a subset of the unit tests.
|
||||
- `build.py` now supports a `-v`/`--verbose` flag that can be passed to turn
|
||||
on verbose build output from the underlying build tool.
|
||||
- The OEM Certificate Generator now supports both PEM and DER format
|
||||
intermediate certs.
|
||||
- It is now possible to specify a path to NASM. This is only of interest for
|
||||
partners who are building for Windows and using assembly language code.
|
||||
- We have improved logging fidelity, particularly around the level of detail
|
||||
of logged error codes.
|
||||
- Several new tests have been added, including tests that exercise the
|
||||
Widevine CE CDM from multiple threads simultaneously.
|
||||
|
||||
[oec-15]: ./oemcrypto/docs/WidevineModularDRMSecurityIntegrationGuideforCENC_v15.pdf
|
||||
[oec-15-delta]: ./oemcrypto/docs/Widevine_Modular_DRM_Version_15_Delta.pdf
|
||||
|
||||
Dependency Updates:
|
||||
- The bundled version of Protobuf has been updated to [v3.6.1][proto-3.6.1].
|
||||
Note that, as before, Widevine CE CDM will work with any version of Protobuf
|
||||
back to 2.6. However, we provide the version of Protobuf that we test with
|
||||
internally as a default.
|
||||
- The bundled version of BoringSSL has been updated to commit
|
||||
[`f18bd55240b229a65df48e7905da98fff18cbf59`][boringssl-f18bd5].
|
||||
- The `legacy_kit` version of BoringSSL that was previously used only by the
|
||||
unit test code has been removed. All Widevine CE CDM code now uses the
|
||||
same version of BoringSSL.
|
||||
|
||||
[proto-3.6.1]: https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1
|
||||
[boringssl-f18bd5]: https://boringssl.googlesource.com/boringssl/+/f18bd55240b229a65df48e7905da98fff18cbf59
|
||||
|
||||
Bugfixes:
|
||||
- A bug has been found in all versions of the Widevine CE CDM prior to this
|
||||
one that can cause leaks and crashes when the CDM is used in a
|
||||
multi-threaded environment. The class `wvcdm::shared_ptr` contains
|
||||
operations that it claims are atomic which are not, in fact, atomic.
|
||||
This bug is a non-issue starting with CE CDM 15.0.0 because
|
||||
`wvcdm::shared_ptr` has been removed, but please be aware that this issue
|
||||
exists in all previous CDMs. This issue does not affect devices where the
|
||||
CDM cannot be used from multiple threads at once.
|
||||
- Several memory leaks have been fixed in this release. Thank you to the
|
||||
partners who reported these to us.
|
||||
- The new parallel operation tests have allowed us to find and fix several
|
||||
multi-threading issues.
|
||||
- Fixed a bug where compilation of Protobuf (but not the rest of the CDM)
|
||||
would sometimes ignore compiler flags being set by the platform.
|
||||
- Fixed a problem that could occur during callbacks on platforms where
|
||||
pthreads does not allow the same thread to recursively take a lock.
|
||||
- Two order-of-destruction ambiguities that could cause crashes during CDM
|
||||
teardown on certain platforms have been fixed.
|
||||
- Fixed an issue that could cause repeated decrypts with the same key to fail
|
||||
when using entitled content keys, depending on specific details of how
|
||||
OEMCrypto was implemented.
|
||||
- The comments on `Cdm::setVideoResolution()` have been updated to clarify
|
||||
that the resolution being passed in should be the resolution of the content
|
||||
being played, not the output resolution of the device. The behavior of this
|
||||
function is unchanged, as this was always true.
|
||||
- Some log messages were missing linefeeds at the end. These have been added.
|
||||
- Several tests that were disabled have been fixed and re-enabled.
|
||||
- APIs that rely on selecting a usage table entry at random were not
|
||||
sufficiently random in certain situations. Their selection will now be more
|
||||
random.
|
||||
- Note that this does *not* affect cryptographic random number generation,
|
||||
which was already sufficiently random.
|
||||
- Fixed some bugs that could occur when the usage table was full, particularly
|
||||
if random number generation was not sufficiently random.
|
||||
- Fixed spurious failures that could occur rarely during
|
||||
`UsageTableHeaderTest`.
|
||||
|
||||
## 14.2.0 (2018-10-12)
|
||||
|
||||
Features:
|
||||
|
||||
Reference in New Issue
Block a user