Commit Graph

1747 Commits

Author SHA1 Message Date
John "Juce" Bruce
702aadf853 Add Support for WebM Back
Adds support for WebM to the CDM. Decryption remains untouched,
however the initialization data is passed differently for WebM.

The previous version of this change broke playback for certain
apps that were being allowed to pass invalid MIME types before
this change was made. This version maintains backwards-compatiblity
for these apps for now by rewriting their MIME types as "video/mp4".

Merge of https://widevine-internal-review.googlesource.com/9225/
and https://widevine-internal-review.googlesource.com/9611/ from
the Widevine cdm repo.

Bug: 10638562
Change-Id: Ib37e838d08363f07b34b3a2e79a3f80a1f43e9ad
2014-03-31 16:16:18 -07:00
Jeff Tinker
55f1de2fe5 resolved conflicts for merge of 66cadaa9 to master
Change-Id: I2a052d56516f0e246d77148a38191430ff139c3e
2014-03-29 12:33:46 -07:00
Jeff Tinker
66cadaa9fa Revert "Add Support for WebM"
This reverts commit ab95cf27f1.

Change-Id: Ie78c2c14fa9b598b5ea67d6e9e60479e652b0b06
2014-03-29 17:09:28 +00:00
John "Juce" Bruce
f23c54d834 resolved conflicts for merge of ab95cf27 to master
Change-Id: I194f2a00507a8469b3f15bd2d629d41dc07c1b45
2014-03-28 16:30:31 -07:00
John "Juce" Bruce
ab95cf27f1 Add Support for WebM
Adds support for WebM to the CDM. Decryption remains untouched,
however the initialization data is passed differently for WebM.

Merge of https://widevine-internal-review.googlesource.com/#/c/9225/
from the widevine cdm repo.

Bug: 10638562
Change-Id: I7b8cf4888fa408af77cee103f768f5a7c8ffdc7e
2014-03-27 14:46:45 -07:00
Fred Gylys-Colwell
a59b935928 Support CAST V2 authentication - OEMCrypto Interface - DO NOT MERGE
Squashed commit of these CLs from the widevine cdm repo:

Allow Version 8 OEMCrypto to be linked with CDM (KLP Modular Branch)
https://widevine-internal-review.googlesource.com/#/c/9434/

Allow OEMCrypto v8 or v9 (KLP Modular Branch)
https://widevine-internal-review.googlesource.com/#/c/9172/

Add alternate RSA signing (KLP Modular Branch)
https://widevine-internal-review.googlesource.com/#/c/9171/

bug: 12702350
Change-Id: Ifd0c88c566bb10efe2411af49bc83265ed56cb23
2014-03-24 13:46:38 -07:00
Fred Gylys-Colwell
e9c07e1f9b Allow Version 8 OEMCrypto to be linked with CDM
This is a copy of the Widevine CDM change:
https://widevine-internal-review.googlesource.com/#/c/9337/

This CL provides some shim code that allows the Eureka
version 8 oemcrypto library to be linked and run with CDM.

As part of this change, obfuscated names in OEMCryptoCENC.h have been
changed.

Change-Id: I18a1f91f0dfde0006591f800f8f8a034f32d9004
2014-03-24 19:51:39 +00:00
Fred Gylys-Colwell
ba6b5c293a Allow OEMCrypto v8 or v9
From Widevine CL:
https://widevine-internal-review.googlesource.com/#/c/9184/

This is some shim code that will load either an OEMCrypto
version 8 or version 9 library.  This should allow us
to test and run stable devices until all OEM's have
updated to version 9.

Android Level 3 library versions are:
level3/mips/libwvlevel3.a  Level3 Library Feb 27 2014 18:18:34
level3/x86/libwvlevel3.a  Level3 Library Feb 27 2014 18:22:14
level3/arm/libwvlevel3.a  Level3 Library Feb 27 2014 12:31:29

Change-Id: I82911e3b4d9056cf3c3ab2b47194fe81ac2776d9
2014-03-21 18:29:06 +00:00
Fred Gylys-Colwell
dd75655102 Changes from Widevine CDM repo
Squashed commit of these CLs from the widevine cdm repo:

Update YT CP server URI to point to the UAT server
https://widevine-internal-review.googlesource.com/#/c/9327/

OEMCrypto Version 9 API
https://widevine-internal-review.googlesource.com/#/c/9142/

Correct Device ID length in OEMCrypto reference version
https://widevine-internal-review.googlesource.com/#/c/8723/

Modify tests to prevent intermittent failures
https://widevine-internal-review.googlesource.com/#/c/8982/

Generate a unique license request ID
https://widevine-internal-review.googlesource.com/#/c/8721/

Re-enable android timer mechanisms
https://widevine-internal-review.googlesource.com/#/c/8833/

Do not close CDM session on removeKeys
https://widevine-internal-review.googlesource.com/#/c/8703/

And numerous changes required by Eureka, Steel, and CTE versions of
Widevine CDM, as highlighted here:
https://widevine-internal-review.googlesource.com/#/c/8596/
https://widevine-internal-review.googlesource.com/#/c/8955/
https://widevine-internal-review.googlesource.com/#/c/8922/
https://widevine-internal-review.googlesource.com/#/c/8890/
https://widevine-internal-review.googlesource.com/#/c/8871/
https://widevine-internal-review.googlesource.com/#/c/8706/
https://widevine-internal-review.googlesource.com/#/c/8425/

Change-Id: Iafd33905227e74eb2132c240b929d2282ab68042
2014-03-17 20:29:51 +00:00
Jeff Tinker
c4cd207d82 am 04c0ae3c: am f6ec81ff: Updated gMock to 1.7.0
* commit '04c0ae3c65f025b6ec5ef752ce0054e04b414ed4':
  Updated gMock to 1.7.0
2014-03-10 18:59:18 +00:00
Jeff Tinker
0444a6499f am c10898e8: am b2af1e63: OEMCrypto Version 9 API (KLP Modular Version)
* commit 'c10898e8975683ca7243b524f7a0e42b06ebc7e3':
  OEMCrypto Version 9 API (KLP Modular Version)
2014-03-10 18:37:46 +00:00
Jeff Tinker
f6ec81ffe7 Updated gMock to 1.7.0
This change updates gMock to the new release, 1.7.0.  This is
necessary for Android, as Android Master has updated their gTest to
1.7.0, and we must always use the matching version of gMock.

This should not break any existing tests, as 1.7.0 is
backwards-compatible with 1.6.0 code in nearly all cases.  There are
a few bugfixes around being too generous with type coercion in
EXPECT_THAT() and ASSERT_THAT() that could break code that was
accepted by the compiler before but was never technically safe.

For a full list of changes, including all the awesome new matchers
you can now use in your tests, see CHANGES, which is included from
gMock unchanged.

For a full list of modifications made to allow this to work on
Android Master, see the updated README.android.

No changes to the GYP files were necessary as part of this upgrade.

Change-Id: Ib1445044e78c9fe0cf16031d544577d65ebbf6df
2014-03-10 11:37:24 -07:00
Jeff Tinker
b2af1e6303 OEMCrypto Version 9 API (KLP Modular Version)
This CL changes the header file and documentation for OEMCrypto
version 9.

It is a cherry pick of Change-Id: I1a43a686ef5d345132affc672bc1c6acf7b3f661

I modified the reference implementation and the calling functions just
enough that existing unit tests still pass.  Acutal implementation of this
API will be in future CLs.

Comments on the documentation can be made in the Google Doc here:
    https://docs.google.com/a/google.com/document/d/1pHSJ2IKL0axmQz2gmDZ7olxPWb_ZcULaJrYwDZAeS7k/edit?usp=sharing

Merge of https://widevine-internal-review.googlesource.com/#/c/9170/
from the widevine cdm repo.

Change-Id: I0197b1dfadedd6cc85710c7408e739cedeb45dce
2014-03-10 11:08:41 -07:00
Jeff Tinker
1d708f6bdd am ccecfd71: am 1c5ca642: NULL terminate device unique ID before use
* commit 'ccecfd7192f0f46ccaa4c4f1ee5b2b14c372b472':
  NULL terminate device unique ID before use
2013-12-27 21:02:05 +00:00
Jeff Tinker
1c5ca642cb NULL terminate device unique ID before use
bug: 12228689

If the device ID returned from OEMCrypto_GetDeviceUniqueId is
not NULL terminated in the OEM code, trailing garbage characters
may be included in the license request's client_identification
field, which could be rejected by the server's utf8 parser if
they are invalid characters, causing a license request failure.

The code for CryptoSession::GetDeviceUniqueId should use the
updated id_length from OEMCrypto_GetDeviceUniqueId to adjust
the length of the *device_id string before returning the result
to the caller.

Change-Id: I659866d4234d4f21ec051590fc7bc6367904a48a
2013-12-19 16:05:06 -08:00
Jeff Tinker
07a88c6c23 am 61c77cd9: am 623920d8: Fix seg fault when playing WV video on Molly with the MediaShell
* commit '61c77cd95dbd48288f8986389375cbd7843e3654':
  Fix seg fault when playing WV video on Molly with the MediaShell
2013-12-13 22:57:27 +00:00
Jeff Tinker
623920d83f Fix seg fault when playing WV video on Molly with the MediaShell
During session sharing, when a sample contains both clear and encrypted
subsamples, subsample flags would on occasion be set incorrectly. Clear
subsamples would be sent to the current session, while encrypted ones
would incur a key id to session lookup and be sent to the appropriate session.
The sessions would then receive decrypt calls with subsample flags
incorrectly set.

In order for this to work correctly all subsamples within a sample need to be
sent to the same session. This requires that key ids be specified and
checked if at least one of the subsamples is encrypted. If however none of
the subsamples are encrypted then a valid key id may not have been provided
to MediaCrypto, and the subsamples may be sent to any session.
In order to support this, the CDM decrypt will now allow the caller to
specify whether to validate the key Id.

Then a check is added to wvcrypto determine whether to ask the CDM to
validate the key ID based on the clear/encrypted states of the subsamples.
The list of subsamples is already being preprocessed, so this
additional check just determines if any subsamples are encrypted, and sets
the validation flag appropriately.

b/11967440

Merge of https://widevine-internal-review.googlesource.com/#/c/8510/3 and
https://widevine-internal-review.googlesource.com/#/c/8520/2 from the
widevine cdm repo.

Change-Id: If65c36a31e56b69f514f0cc547a0becf0c54c40a
2013-12-12 17:25:01 -08:00
Jeff Tinker
46b2668c26 am da019f95: am 5d5d1baf: Merge "Address unit test failures" into klp-dev
* commit 'da019f95568a7833e2490094017f4afcaae44bfd':
  Address unit test failures
2013-12-12 19:37:47 +00:00
Jeff Tinker
5d5d1baf7a Merge "Address unit test failures" into klp-dev 2013-12-12 19:26:03 +00:00
Jeff Tinker
2db60fbb8c am 78d44c37: am 68e1e7c5: Merge "Generate a unique license request ID" into klp-dev
* commit '78d44c3792d19a74b4fd4bdcd509d785b86c1f83':
  Generate a unique license request ID
2013-12-12 18:28:36 +00:00
Rahul Frias
f32baf91b5 Address unit test failures
A number of failures were observed,
* GPlay dev license server is being worked on. This causes random
  failures when running unit tests. Switching to the staging
  server for now.
* Occasionally, the license server times out. Introducing a retry
  mechanism do deal with HTTP responses (merge from master #45e8ddd5f)
* Release license tests are now disabled. Tests were previously passing,
  even though they were not in fact supported by the GPlay license server.
  The response included just enough information to be a valid license and
  passed minimal verification that was taking place. Additional verification
  was not necessary because session is torndown and resources released as
  soon as the response has been received.
  A change at the GPlay server now causes the release license request to be
  flagged as an error and the tests to fail. Work is in progress to
  support release of licenses at the GPlay server.
* The wrong message test (from request license tests) fails. This is
  because GPlay behaviour changed from returning a HTTP 500, when
  processing an invalid PSSH, to returning a HTTP 200 without any included
  license.
* Security level path backward compatibility tests on L3 which failed and
  caused the succeeding license request tests to fail.

b/12000457

Change-Id: I8e6adc490504475d1039793ea555a17799cb78c4
2013-12-11 16:22:58 -08:00
Rahul Frias
1b22c80568 Generate a unique license request ID
The request ID was set to a fixed value, which caused license requests
to be rejected by the YT server with TOO_MANY_STREAMS_PER_VIDEO

The request ID is now a combination of a randomly generated value and
a rolling index. This is based off a fix by gmorgan@ on the eureka
branch #98fa6e5e.

Merge of https://widevine-internal-review.googlesource.com/#/c/8496/
from the widevine cdm repo.

b/12018697

Change-Id: I6c05fea885d46aea53a07235c3e5ac65a6971eaf
2013-12-06 12:26:55 -08:00
Jeff Tinker
235fb36f8a am 40311d0c: am 357e6c41: Merge "Haystack and Obfuscated OEMCrypto Level 3" into klp-dev
* commit '40311d0c6c44a3d876ce843534cd98c58f65ca4d':
  Haystack and Obfuscated OEMCrypto Level 3
2013-11-07 21:30:28 -08:00
Jeff Tinker
357e6c419c Merge "Haystack and Obfuscated OEMCrypto Level 3" into klp-dev 2013-11-08 01:54:44 +00:00
Jeff Tinker
ad51a53db4 am 48742bba: am 8e5bc02e: Merge "Allow license renewals after expiry" into klp-dev
* commit '48742bba5bd9b4c39fb41359a62e15a6503f1a5e':
  Allow license renewals after expiry
2013-11-07 15:13:05 -08:00
Jeff Tinker
8e5bc02e51 Merge "Allow license renewals after expiry" into klp-dev 2013-11-07 19:09:50 +00:00
John "Juce" Bruce
e1bbb87b38 am 94619260: am fd482527: L1 System Lowered to L3 Still Requires Secure Decoders
* commit '94619260179626fca69f1b65bda6683f9c561b7b':
  L1 System Lowered to L3 Still Requires Secure Decoders
2013-11-06 14:04:35 -08:00
John "Juce" Bruce
fd482527e4 L1 System Lowered to L3 Still Requires Secure Decoders
Merge of https://widevine-internal-review.googlesource.com/#/c/8263
from the Widevine repo.

Changes the behavior of requiresSecureDecoderComponent() to query the
session for whether a lowered security level has been requested
before querying the system to see what its default security level is.

As part of this, we added a new QuerySessionStatus() method to the
CDM that gets status info on a session-specific level, such as the
effective security level of a session.

Bug: 11428937
Change-Id: I5549a2fdd400cc87f567d27fcf74c473451093d6
2013-11-06 19:31:24 +00:00
Jeff Tinker
6b51eee87c am 7db580d6: am dd672f0c: Merge "Use renewal URL in license tests" into klp-dev
* commit '7db580d6b9a96fff5567a6fc5d5db460872b76c2':
  Use renewal URL in license tests
2013-11-06 09:46:52 -08:00
Jeff Tinker
6308988a4a am cbcd885e: am 30469021: Merge "Search for keys in shared sessions only when content is encrypted" into klp-dev
* commit 'cbcd885e7cd0d7a34bd2128bdf8033b0751b3e97':
  Search for keys in shared sessions only when content is encrypted
2013-11-06 09:46:52 -08:00
Jeff Tinker
dd672f0c68 Merge "Use renewal URL in license tests" into klp-dev 2013-11-06 17:24:07 +00:00
Jeff Tinker
3046902171 Merge "Search for keys in shared sessions only when content is encrypted" into klp-dev 2013-11-06 17:22:33 +00:00
Rahul Frias
774a078f1d Allow license renewals after expiry
Licenses could be renewed uptil the point of expiry. After that point
we expected that the session would have to be closed and a new one
opened with a new license loaded. Clank requested that we support
renewal of sessions past expiry.

In addition, the error returned on decryption, if OEMCrypto
determines that the KCB duration has expired, is NEED_KEY rather than
KEY_ERROR.

Merge of https://widevine-internal-review.googlesource.com/#/c/8240
from the widevine cdm repo.

b/11390539

Change-Id: I023320f3f25514cd07b368701a92100429ce1c04
2013-11-05 16:40:17 -08:00
Fred Gylys-Colwell
becb1bf0be Haystack and Obfuscated OEMCrypto Level 3
This CL contains working versions of the haystack tools and the
OEMCrypto Level 3 library for android ARM, MIPS and x86.

The version number of the level 3 library is:
android/level3/arm/libwvlevel3.a  Level3 Library Nov  4 2013 18:39:06
android/level3/mips/libwvlevel3.a Level3 Library Nov  4 2013 18:42:29
android/level3/x86/libwvlevel3.a  Level3 Library Nov  4 2013 18:41:07

bug: 9374954 MediaDrm haystack based L3 code hardening implementation.
Change-Id: Ifef13900a11e83e4257723d3c6fc7107550882a8
2013-11-05 10:32:11 -08:00
Jeff Tinker
85ae0abcaf am 48b1acac: am 49e593d1: Stop policy timer before invoking session destructor
* commit '48b1acac38b6c79baeb221247fa68a1a3cbe0ab6':
  Stop policy timer before invoking session destructor
2013-10-30 11:14:17 -07:00
Rahul Frias
64c3cb986a Use renewal URL in license tests
After a change to the GPlay license server, it no longer accepts heartbeats
at the license server URL ( https://jmt17.google.com/video-dev/license/ ).
The CDM correctly reports https://jmt17.google.com/video-dev/heartbeat/
as the renewal URL but the current test code ignores the reported URL.
The license server then rejects the request and send back an empty
license response.

This causes WvCdmRequestLicenseTest.StreamingLicenseRenewal
and WvCdmRequestLicenseTest.StreamingLicenseRenewal to fail. Request
license tests have been modified to respect the renewal URL.

Merge of https://widevine-internal-review.googlesource.com/#/c/8188
from the widevine cdm repo

b/11290339

Change-Id: I1dcf8277edce99633086fb3db8ffeb7a32a5500d
2013-10-25 13:15:56 -07:00
Rahul Frias
252a07316a Search for keys in shared sessions only when content is encrypted
Also return NEED_KEY rather than KEY_ERROR if keys are not found.

Merge of https://widevine-internal-review.googlesource.com/#/c/8250
from the widevine cdm repo.

b/11375092

Change-Id: Ibc629e8b4018f43f5f9528258563a2af79bdfb4b
2013-10-25 13:09:40 -07:00
Jeff Tinker
49e593d127 Stop policy timer before invoking session destructor
The CDM session was being destroyed before the policy timer was stopped
and before the session was removed from a list of active sessions. This
allowed race conditions, where the policy timer would try to evaluate
policy for a closed session. This led to segfaults.
b/11338324

Merge of https://widevine-internal-review.googlesource.com/#/c/8240/1
from the widevine cdm repo.

Change-Id: Ib159ccfdb763a47da573f5c06c0793c2c63886c4
2013-10-25 10:50:02 -07:00
Rahul Frias
43bda9deb5 am d5522d90: am e385ff3a: Do not close CDM session on removeKeys
* commit 'd5522d903e35f14c66cf355cc30d681ef6e5ede6':
  Do not close CDM session on removeKeys
2013-10-14 10:48:38 -07:00
Rahul Frias
e385ff3a7f Do not close CDM session on removeKeys
A change was introduced between jb-mr2 and klp-dev that closed
the CDM session when the removeKeys mediaDrm APIs was called.
This was introduced because there is no way of unloading keys from
an OEMCrypto session.

This caused problems for Netflix, as an exception occurred when they
tried to close a session after calling removeKeys.

Reverting to jb-mr2 behaviour for now. b/11188818 has been opened to
track a longer term resolution.

b/11185042

Change-Id: I03bc736d2bc5bdabc86cfb7b75ae8bcbc03ffc7c
2013-10-11 14:42:37 -07:00
Jeff Tinker
81b43b3055 am 6141ac4b: am 9b1d8119: Merge "Allows sharing of keys between sessions" into klp-dev
* commit '6141ac4bc6983b140c1f29171552e1f2aa11dea0':
  Allows sharing of keys between sessions
2013-10-11 10:07:30 -07:00
Jeff Tinker
9b1d8119e5 Merge "Allows sharing of keys between sessions" into klp-dev 2013-10-11 17:02:00 +00:00
Rahul Frias
a0d55ac77a am b2cea8cd: am a74980b2: Address key selection and decryption concurrency issues
* commit 'b2cea8cdd388997d7dc09cc2e5682ab041f7bf74':
  Address key selection and decryption concurrency issues
2013-10-11 08:48:27 -07:00
Rahul Frias
56bd5d5d82 Allows sharing of keys between sessions
This change allows the app to specify that keys may be shared by sessions.
The app enables this by setting the session sharing properties in DRM Plugin.
Keys are shared only amoungst the specified group of sessions.

Merged from widevine CDM repo
 * https://widevine-internal-review.googlesource.com/#/c/8019/
 * https://widevine-internal-review.googlesource.com/#/c/8021/

Bug: 11013707
Change-Id: I52db41a53138b4fc563ebc6d38a623f23f7cdfb5
2013-10-10 23:23:39 -07:00
Rahul Frias
a74980b2f1 Address key selection and decryption concurrency issues
Decryption calls though multiple threads may result in race conditions
between the setting of the key and the actual call to decryption.
This results in OEMCrypto errors when the buffer type used in
decryption did not match the key selected. This is addressed by
having the the two calls be in the same critical section.

b/11009857

Change-Id: I74f1a0689ca17114f3cdd029022013b05c415acd
2013-10-02 15:44:39 -07:00
Jeff Tinker
a041a25e4d am c28be299: Avoid multiple loads of Device RSA private key
* commit 'c28be299dc6579f29eb6c3872699232cc14bcf8c':
  Avoid multiple loads of Device RSA private key
2013-09-20 11:21:51 -07:00
Jeff Tinker
c28be299dc Avoid multiple loads of Device RSA private key
Molly reports OEMCrypto errors when Device RSA private key is
loaded a second time in the same session. This occurs in privacy
mode when a service certificate is request and later a key request is
generated.

bug: 10815492

Merge of https://widevine-internal-review.googlesource.com/#/c/7823/
from Widevine cdm repo

Change-Id: I98999fb0e77597109b68c379eaaa4838d3f6dde4
2013-09-19 17:23:58 -07:00
Kenny Root
069b9b5efe Use canonical UniquePtr.h file
Change-Id: I2beb5107cd8842fa2f1fa8e8b482783e79bb05cb
2013-09-11 23:33:25 -07:00
Fred Gylys-Colwell
d475d0282a Added locking to session table in oemcrypto_adapter_dynamic.
This change the merge from the android tree of:
https://widevine-internal-review.googlesource.com/7353

bug: 10447846

Change-Id: I0a2496fc6f225e0f3b23731c24087ddc6068c9cc
2013-09-04 11:06:37 -07:00
Rahul Frias
a233ac2084 Replace staging with production Root CA public key
A staging Root CA public key was used in earlier releases to verify
service certificates. These were in turn used to encrypt the
client identification. This met our needs for an end-to-end verification.
Now that the production Root CA and service certs are available
this change replaces staging certs with production ones.

Merge of https://widevine-internal-review.googlesource.com/#/c/7560/ from
the widevine CDM repo

b/10329328

Change-Id: Id02649201d9a8ba4d08acc4166503341a5bbdd23
2013-09-03 10:53:53 -07:00