// 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_CLIENT_IDENTIFICATION_H_ #define WVCDM_CORE_CLIENT_IDENTIFICATION_H_ #include #include "license_protocol.pb.h" #include "wv_cdm_types.h" #include "wv_class_utils.h" namespace wvcdm { class CryptoSession; // ClientIdentification fills in the ClientIdentification portion // of the License or Provisioning request messages. class ClientIdentification { public: ClientIdentification() {} WVCDM_DISALLOW_COPY_AND_MOVE(ClientIdentification); virtual ~ClientIdentification() {} // Call this method when used with provisioning requests. |client_token| may // be empty and the token will be retrieved from OEMCrypto. In case of the // second stage of provisioning 4, an OEM cert must be provided via // |client_token|. |crypto_session| must not be nullptr. CdmResponseType InitForProvisioningRequest(const std::string& client_token, CryptoSession* crypto_session); // Use in conjunction with license requests // |client_token| must be provided // |crypto_session| input parameter, mandatory CdmResponseType InitForLicenseRequest(const std::string& client_token, CryptoSession* crypto_session); CdmResponseType InitForOtaKeyboxProvisioning(CryptoSession* crypto_session); // Fill the ClientIdentification portion of the license, DRM cert // provisioning or OTA keybox provisioning request. // |app_parameters| parameters provided by client/app to be included in // provisioning/license request. optional, only used // if |is_license_request| is true // |provider_client_token| optional parameter specified by the content // and included in the license. Only used if // specified and if |is_license_request| is true // |client_id| Portion of license/provisioning request that needs to be // populated. virtual CdmResponseType Prepare( const CdmAppParameterMap& app_parameters, const std::string& provider_client_token, video_widevine::ClientIdentification* client_id); private: bool GetProvisioningTokenType( video_widevine::ClientIdentification::TokenType* token_type); bool GetProvisioning40TokenSignatureType( video_widevine::ClientIdentification::ClientCredentials::CredentialType* token_signature_type); bool is_license_request_ = false; bool is_okp_request_ = false; std::string client_token_; std::string device_id_; CryptoSession* crypto_session_ = nullptr; }; // class ClientIdentification } // namespace wvcdm #endif // WVCDM_CORE_CLIENT_IDENTIFICATION_H_