63 lines
2.7 KiB
C++
63 lines
2.7 KiB
C++
// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
#ifndef WVCDM_CORE_KEY_SESSION_H_
|
|
#define WVCDM_CORE_KEY_SESSION_H_
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "OEMCryptoCENC.h"
|
|
#include "metrics_collections.h"
|
|
#include "wv_cdm_types.h"
|
|
#include "wv_class_utils.h"
|
|
|
|
namespace wvcdm {
|
|
class CryptoKey;
|
|
|
|
class KeySession {
|
|
public:
|
|
typedef enum { kDefault, kEntitlement } KeySessionType;
|
|
|
|
KeySession() = delete;
|
|
WVCDM_DISALLOW_COPY_AND_MOVE(KeySession);
|
|
virtual ~KeySession() {}
|
|
virtual KeySessionType Type() = 0;
|
|
virtual OEMCryptoResult LoadKeys(const std::string& message,
|
|
const std::string& signature,
|
|
const std::string& mac_key_iv,
|
|
const std::string& mac_key,
|
|
const std::vector<CryptoKey>& keys,
|
|
const std::string& provider_session_token,
|
|
const std::string& srm_requirement) = 0;
|
|
virtual OEMCryptoResult LoadEntitledContentKeys(
|
|
const std::vector<CryptoKey>& keys) = 0;
|
|
virtual OEMCryptoResult SelectKey(const std::string& key_id,
|
|
CdmCipherMode cipher_mode) = 0;
|
|
virtual OEMCryptoResult Decrypt(
|
|
const OEMCrypto_SampleDescription* samples, size_t samples_length,
|
|
const OEMCrypto_CENCEncryptPatternDesc& pattern,
|
|
bool is_any_subsample_protected) = 0;
|
|
virtual OEMCryptoResult GenericEncrypt(const std::string& in_buffer,
|
|
const std::string& iv,
|
|
OEMCrypto_Algorithm algorithm,
|
|
std::string* out_buffer) = 0;
|
|
virtual OEMCryptoResult GenericDecrypt(const std::string& in_buffer,
|
|
const std::string& iv,
|
|
OEMCrypto_Algorithm algorithm,
|
|
std::string* out_buffer) = 0;
|
|
virtual OEMCryptoResult GenericSign(const std::string& message,
|
|
OEMCrypto_Algorithm algorithm,
|
|
std::string* signature) = 0;
|
|
virtual OEMCryptoResult GenericVerify(const std::string& message,
|
|
OEMCrypto_Algorithm algorithm,
|
|
const std::string& signature) = 0;
|
|
|
|
protected:
|
|
KeySession(metrics::CryptoMetrics* metrics) : metrics_(metrics) {}
|
|
|
|
metrics::CryptoMetrics* metrics_;
|
|
}; // class KeySession
|
|
} // namespace wvcdm
|
|
#endif // WVCDM_CORE_KEY_SESSION_H_
|