Adds a new property to the CDM's QueryStatus called QUERY_KEY_SYSTEM_ID that contains the System ID. (as read from OEMCrypto_GetKeyData) Adds a new property to the DrmPlugin (cleverly named "systemId") that allows the app to query for this. Also adds unit tests. Also changes the Device ID getter in crypto_engine.cpp to return a failure instead of an empty ID. Bug: 8621632 Merge of https://widevine-internal-review.googlesource.com/#/c/5010/ from widevine cdm repository to android repository. Change-Id: I8f309af18487c499e8ce25e829059e45623ea4dc
76 lines
1.6 KiB
C++
76 lines
1.6 KiB
C++
// Copyright 2012 Google Inc. All Rights Reserved.
|
|
//
|
|
// OEMCrypto Client - wrapper class for C-style OEMCrypto interface
|
|
//
|
|
#ifndef CDM_BASE_CRYPTO_ENGINE_H_
|
|
#define CDM_BASE_CRYPTO_ENGINE_H_
|
|
|
|
#include <stdint.h>
|
|
#include <string>
|
|
|
|
#include "crypto_session.h"
|
|
#include "lock.h"
|
|
#include "wv_cdm_types.h"
|
|
|
|
namespace wvcdm {
|
|
|
|
typedef std::map<CdmSessionId,CryptoSession*> CryptoSessionMap;
|
|
|
|
class CryptoEngine {
|
|
|
|
friend class CryptoSession;
|
|
|
|
private:
|
|
|
|
CryptoEngine();
|
|
~CryptoEngine();
|
|
|
|
public:
|
|
|
|
// get an instance of Crypto engine
|
|
static CryptoEngine* GetInstance();
|
|
|
|
bool Init();
|
|
bool Terminate();
|
|
bool ValidateKeybox();
|
|
|
|
CryptoSession* CreateSession(const CdmSessionId& session_id);
|
|
CryptoSession* FindSession(const CdmSessionId& session_id);
|
|
bool DestroySession(const CdmSessionId& session_id);
|
|
bool DestroySessions();
|
|
|
|
bool GetToken(std::string* token);
|
|
|
|
typedef enum {
|
|
kSecurityLevelL1,
|
|
kSecurityLevelL2,
|
|
kSecurityLevelL3,
|
|
kSecurityLevelUnknown
|
|
} SecurityLevel;
|
|
|
|
SecurityLevel GetSecurityLevel();
|
|
bool GetDeviceUniqueId(std::string* deviceId);
|
|
bool GetSystemId(uint32_t* systemId);
|
|
|
|
private:
|
|
|
|
void DeleteInstance();
|
|
static CryptoEngine* CreateSingleton();
|
|
|
|
CryptoSession* FindSessionInternal(const CdmSessionId& session_id);
|
|
|
|
static CryptoEngine* crypto_engine_;
|
|
static Lock crypto_engine_lock_;
|
|
|
|
bool initialized_;
|
|
mutable Lock crypto_lock_;
|
|
mutable Lock sessions_lock_;
|
|
CryptoSessionMap sessions_;
|
|
|
|
CORE_DISALLOW_COPY_AND_ASSIGN(CryptoEngine);
|
|
};
|
|
|
|
}; // namespace wvcdm
|
|
|
|
#endif // CDM_BASE_CRYPTO_ENGINE_H_
|