kodi
MediaDrmCryptoSession.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "media/drm/CryptoSession.h"
12 
13 class CJNIMediaDrm;
14 class CJNIMediaDrmCryptoSession;
15 
16 namespace DRM
17 {
19  {
20  public:
21  inline CharVecBuffer(const XbmcCommons::Buffer& buf) : XbmcCommons::Buffer(buf) {}
22 
23  inline CharVecBuffer(const std::vector<char>& vec)
24  : XbmcCommons::Buffer(vec.size())
25  {
26  memcpy(data(), vec.data(), vec.size());
27  }
28 
29  inline operator std::vector<char>() const
30  {
31  return std::vector<char>(data(), data() + capacity());
32  }
33  };
34 
35  class CharVecBuffer;
36 
38  {
39  public:
40  static void Register();
41  CMediaDrmCryptoSession(const std::string& UUID, const std::string& cipherAlgo, const std::string& macAlgo);
42  ~CMediaDrmCryptoSession() override;
43 
44  // Interface methods
45  XbmcCommons::Buffer GetKeyRequest(const XbmcCommons::Buffer& init, const std::string& mimeType, bool offlineKey, const std::map<std::string, std::string>& parameters) override;
46  std::string GetPropertyString(const std::string& name) override;
47  std::string ProvideKeyResponse(const XbmcCommons::Buffer& response) override;
48  void RemoveKeys() override;
49  void RestoreKeys(const std::string& keySetId) override;
50  void SetPropertyString(const std::string& name, const std::string& value) override;
51 
52  // Crypto methods
53  XbmcCommons::Buffer Decrypt(const XbmcCommons::Buffer& cipherKeyId, const XbmcCommons::Buffer& input, const XbmcCommons::Buffer& iv) override;
54  XbmcCommons::Buffer Encrypt(const XbmcCommons::Buffer& cipherKeyId, const XbmcCommons::Buffer& input, const XbmcCommons::Buffer& iv) override;
55  XbmcCommons::Buffer Sign(const XbmcCommons::Buffer& macKeyId, const XbmcCommons::Buffer& message) override;
56  bool Verify(const XbmcCommons::Buffer& macKeyId, const XbmcCommons::Buffer& message, const XbmcCommons::Buffer& signature ) override;
57 
58  private:
59  static CCryptoSession* Create(const std::string& UUID, const std::string& cipherAlgo, const std::string& hmacAlgo);
60  bool OpenSession();
61  void CloseSession();
62  bool ProvisionRequest();
63 
64  CJNIMediaDrm* m_mediaDrm = nullptr;
65  CJNIMediaDrmCryptoSession* m_cryptoSession = nullptr;
66 
67  std::string m_cipherAlgo;
68  std::string m_macAlgo;
69  std::string m_keySetId;
70 
71  bool m_hasKeys = false;
72 
73  CharVecBuffer* m_sessionId = nullptr;
74  };
75 
76 } //namespace
Definition: DrmCryptoSession.h:18
Definition: MediaDrmCryptoSession.h:18
Definition: CryptoSession.h:23
Definition: MediaDrmCryptoSession.h:37
This class is based on the java java.nio.Buffer class however, it does not implement the &#39;mark&#39; funct...
Definition: Buffer.h:79