Define Provisioning-Unique ID for New Device IDs

(This is a merge of wvgerrit/25583)

Devices that use Provisioning 3.0 did not have a Provisioning-Unique ID
defined. Attempting to retrieve it would result in an error.

Devices that use SPOIDs with keyboxes would expose the keybox's real
Provisioning-Unique ID when asked. This is a security flaw.

To solve both cases, an alternative Provisioning-Unique ID is used,
consisting of the Device-Unique ID bitwise-inverted.

Bug: 36065223
Test: run_all_unit_tests.sh
Change-Id: I32512a3e11403e679939187e156904a57a9e24ef
This commit is contained in:
John W. Bruce
2017-04-11 11:58:33 -07:00
parent 8513b71499
commit ce6bd41627
3 changed files with 55 additions and 17 deletions

View File

@@ -323,6 +323,7 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
// On SPOID devices, calling this will seal the CDM Identifier Builder, thus
// making it an error to change the origin.
status_t getDeviceUniqueId(std::string* id);
status_t getProvisioningUniqueId(std::string* id);
const std::string& origin() const { return mCdmIdentifier.origin; }
bool set_origin(const std::string& id);