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}
diff --git a/api/crypto/frameencryptorinterface.h b/api/crypto/frameencryptorinterface.h
index 369d6b8..a99549c 100644
--- a/api/crypto/frameencryptorinterface.h
+++ b/api/crypto/frameencryptorinterface.h
@@ -24,25 +24,29 @@
// 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.
-// This interface is not ready for production use.
+// 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 GetOutputSize 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.
- // TODO(benwright) integrate error codes.
- virtual bool Encrypt(cricket::MediaType media_type,
- uint32_t ssrc,
- rtc::ArrayView<const uint8_t> frame,
- rtc::ArrayView<uint8_t> encrypted_frame) = 0;
+ // 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.
- virtual size_t GetOutputSize(cricket::MediaType media_type,
- size_t frame_size) = 0;
+ // 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