// 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 #include #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& keys, const std::string& provider_session_token, const std::string& srm_requirement) = 0; virtual OEMCryptoResult LoadEntitledContentKeys( const std::vector& 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_