blob: bcb8080fd4c84c66b335242c093148d2983b709a [file] [log] [blame]
Benjamin Wright84583f62018-10-04 14:22:34 -07001/*
2 * Copyright 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef API_TEST_FAKE_FRAME_DECRYPTOR_H_
12#define API_TEST_FAKE_FRAME_DECRYPTOR_H_
13
14#include <vector>
15
16#include "api/crypto/framedecryptorinterface.h"
17#include "rtc_base/refcountedobject.h"
18
19namespace webrtc {
20
21// The FakeFrameDecryptor is a TEST ONLY fake implementation of the
22// FrameDecryptorInterface. It is constructed with a simple single digit key and
23// a fixed postfix byte. This is just to validate that the core code works
24// as expected.
Benjamin Wright150a9072018-10-26 15:43:06 -070025class FakeFrameDecryptor final
Benjamin Wright84583f62018-10-04 14:22:34 -070026 : public rtc::RefCountedObject<FrameDecryptorInterface> {
27 public:
28 // Provide a key (0,255) and some postfix byte (0,255) this should match the
29 // byte you expect from the FakeFrameEncryptor.
Benjamin Wright150a9072018-10-26 15:43:06 -070030 explicit FakeFrameDecryptor(uint8_t fake_key = 0xAA,
Benjamin Wright84583f62018-10-04 14:22:34 -070031 uint8_t expected_postfix_byte = 255);
Benjamin Wright150a9072018-10-26 15:43:06 -070032 // Fake decryption that just xors the payload with the 1 byte key and checks
33 // the postfix byte. This will always fail if fail_decryption_ is set to true.
Benjamin Wright84583f62018-10-04 14:22:34 -070034 int Decrypt(cricket::MediaType media_type,
35 const std::vector<uint32_t>& csrcs,
36 rtc::ArrayView<const uint8_t> additional_data,
37 rtc::ArrayView<const uint8_t> encrypted_frame,
38 rtc::ArrayView<uint8_t> frame,
39 size_t* bytes_written) override;
Benjamin Wright150a9072018-10-26 15:43:06 -070040 // Always returns 1 less than the size of the encrypted frame.
Benjamin Wright84583f62018-10-04 14:22:34 -070041 size_t GetMaxPlaintextByteSize(cricket::MediaType media_type,
42 size_t encrypted_frame_size) override;
Benjamin Wright150a9072018-10-26 15:43:06 -070043 // Sets the fake key to use for encryption.
Benjamin Wright84583f62018-10-04 14:22:34 -070044 void SetFakeKey(uint8_t fake_key);
Benjamin Wright150a9072018-10-26 15:43:06 -070045 // Returns the fake key used for encryption.
Benjamin Wright84583f62018-10-04 14:22:34 -070046 uint8_t GetFakeKey() const;
Benjamin Wright150a9072018-10-26 15:43:06 -070047 // Set the Postfix byte that is expected in the encrypted payload.
Benjamin Wright84583f62018-10-04 14:22:34 -070048 void SetExpectedPostfixByte(uint8_t expected_postfix_byte);
Benjamin Wright150a9072018-10-26 15:43:06 -070049 // Returns the postfix byte that will be checked for in the encrypted payload.
Benjamin Wright84583f62018-10-04 14:22:34 -070050 uint8_t GetExpectedPostfixByte() const;
Benjamin Wright150a9072018-10-26 15:43:06 -070051 // If set to true will force all encryption to fail.
Benjamin Wright84583f62018-10-04 14:22:34 -070052 void SetFailDecryption(bool fail_decryption);
Benjamin Wright150a9072018-10-26 15:43:06 -070053 // Simple error codes for tests to validate against.
54 enum class FakeDecryptStatus : int {
55 OK = 0,
56 FORCED_FAILURE = 1,
57 INVALID_POSTFIX = 2
58 };
Benjamin Wright84583f62018-10-04 14:22:34 -070059
60 private:
61 uint8_t fake_key_ = 0;
62 uint8_t expected_postfix_byte_ = 0;
63 bool fail_decryption_ = false;
64};
65
66} // namespace webrtc
67
68#endif // API_TEST_FAKE_FRAME_DECRYPTOR_H_