You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: ctrcipher.rs
    path of file: ./repos/webrtc/srtp/src/cipher/cipher_aes_cm_hmac_sha1
    
    the code of the file until where you have to start completion: use aes::cipher::generic_array::GenericArray;
use aes::cipher::{KeyIvInit, StreamCipher, StreamCipherSeek};
use bytes::{BufMut, Bytes};
use rtcp::header::{HEADER_LENGTH, SSRC_LENGTH};
use subtle::ConstantTimeEq;
use util::marshal::*;

use super::{Cipher, CipherInner};
use crate::error::{Error, Result};
use crate::key_derivation::*;

type Aes128Ctr = ctr::Ctr128BE<aes::Aes128>;

pub(crate) struct CipherAesCmHmacSha1 {
    inner: CipherInner,
  
    
    pub fn new(master_key: &[u8], master_salt: &[u8]) -> Result<Self> {
        let inner = CipherInner::new(master_key, master_salt)?;

        let srtp_session_key = aes_cm_key_derivation(
            LABEL_SRTP_ENCRYPTION,
            master_key,
            master_salt,
            0,
            master_key.len(),
        )?;
        let srtcp_session_key = aes_cm_key_derivation(
            LABEL_SRTCP_ENCRYPTION,
            master_key,
            master_salt,
            0,
            master_key.len(),
        )?;

        Ok(CipherAesCmHmacSha1 {
            inner,
            srtp_session_key,
            srtcp_session_key,
        })
    }