pub mod cipher_aead_aes_gcm;
pub mod cipher_aes_cm_hmac_sha1;
use bytes::BytesMut;
use crypto::{CryptoError, RTCCrypto};
use shared::error::{Error, Result};
type Kdf = fn(&dyn RTCCrypto, u8, &[u8], &[u8], usize, usize) -> Result<Vec<u8>>;
pub(crate) fn crypto_error(error: CryptoError) -> Error {
Error::Crypto(error.to_string())
}
pub(crate) trait Cipher: Send {
fn rtp_auth_tag_len(&self) -> usize;
fn rtcp_auth_tag_len(&self) -> usize;
fn aead_auth_tag_len(&self) -> usize;
fn get_rtcp_index(&self, input: &[u8]) -> usize;
fn encrypt_rtp(&mut self, payload: &[u8], header: &rtp::Header, roc: u32) -> Result<BytesMut>;
fn decrypt_rtp(&mut self, payload: &[u8], header: &rtp::Header, roc: u32) -> Result<BytesMut>;
fn encrypt_rtcp(&mut self, payload: &[u8], srtcp_index: usize, ssrc: u32) -> Result<BytesMut>;
fn decrypt_rtcp(&mut self, payload: &[u8], srtcp_index: usize, ssrc: u32) -> Result<BytesMut>;
}