1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
6#define MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
7
8// Helper class to handle encryption for the Cast Transport library.
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/strings/string_piece.h"
14#include "base/threading/non_thread_safe.h"
15
16namespace crypto {
17class Encryptor;
18class SymmetricKey;
19}
20
21namespace media {
22namespace cast {
23
24class TransportEncryptionHandler : public base::NonThreadSafe {
25 public:
26  TransportEncryptionHandler();
27  ~TransportEncryptionHandler();
28
29  bool Initialize(std::string aes_key, std::string aes_iv_mask);
30
31  bool Encrypt(uint32 frame_id,
32               const base::StringPiece& data,
33               std::string* encrypted_data);
34
35  bool Decrypt(uint32 frame_id,
36               const base::StringPiece& ciphertext,
37               std::string* plaintext);
38
39  bool is_activated() const { return is_activated_; }
40
41 private:
42  scoped_ptr<crypto::SymmetricKey> key_;
43  scoped_ptr<crypto::Encryptor> encryptor_;
44  std::string iv_mask_;
45  bool is_activated_;
46
47  DISALLOW_COPY_AND_ASSIGN(TransportEncryptionHandler);
48};
49
50}  // namespace cast
51}  // namespace media
52
53#endif  // MEDIA_CAST_COMMON_TRANSPORT_ENCRYPTION_HANDLER_H_
54