webrtc/api/crypto/frameencryptorinterface.h
Benjamin Wright 88e3e3f570 Updated FrameEncryptorInterface and FrameDecryptorInterface with status code.
This change allows an implementer to provide a custom error code to be returned
on failure with 0 being reserved for success. It also modifies the output size
APIs to be more specific and requests the number of bytes written to be returned
so we can determine how many bytes we need to send.

Bug: webrtc:9681
Change-Id: I13d34861bf851527fcbb350d0cfb480c0f95a6b3
Reviewed-on: https://webrtc-review.googlesource.com/98720
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Benjamin Wright <benwright@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24613}
2018-09-06 21:08:59 +00:00

54 lines
2.5 KiB
C++

/*
* Copyright 2018 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef API_CRYPTO_FRAMEENCRYPTORINTERFACE_H_
#define API_CRYPTO_FRAMEENCRYPTORINTERFACE_H_
#include "api/array_view.h"
#include "api/mediatypes.h"
#include "rtc_base/refcount.h"
namespace webrtc {
// FrameEncryptorInterface allows users to provide a custom encryption
// implementation to encrypt all outgoing audio and video frames. The user must
// also provide a FrameDecryptorInterface to be able to decrypt the frames on
// the receiving device. Note this is an additional layer of encryption in
// addition to the standard SRTP mechanism and is not intended to be used
// without it. Implementations of this interface will have the same lifetime as
// the RTPSenders it is attached to.
// Note: This interface is not ready for production use.
class FrameEncryptorInterface : public rtc::RefCountInterface {
public:
~FrameEncryptorInterface() override {}
// Attempts to encrypt the provided frame. You may assume the encrypted_frame
// will match the size returned by GetMaxCiphertextByteSize for a give frame.
// You may assume that the frames will arrive in order if SRTP is enabled.
// The ssrc will simply identify which stream the frame is travelling on. You
// must set bytes_written to the number of bytes you wrote in the
// encrypted_frame. 0 must be returned if successful all other numbers can be
// selected by the implementer to represent error codes.
virtual int Encrypt(cricket::MediaType media_type,
uint32_t ssrc,
rtc::ArrayView<const uint8_t> frame,
rtc::ArrayView<uint8_t> encrypted_frame,
size_t* bytes_written) = 0;
// Returns the total required length in bytes for the output of the
// encryption. This can be larger than the actual number of bytes you need but
// must never be smaller as it informs the size of the encrypted_frame buffer.
virtual size_t GetMaxCiphertextByteSize(cricket::MediaType media_type,
size_t frame_size) = 0;
};
} // namespace webrtc
#endif // API_CRYPTO_FRAMEENCRYPTORINTERFACE_H_