Commit 4866e9ff authored by Mateusz Lenik's avatar Mateusz Lenik
Browse files

fixup! Implement AES-{128,256}-CCM bindings

parent dcbb45cc
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -405,14 +405,14 @@ impl Crypter {
    ///
    /// When encrypting with AES CCM, the tag length needs to be explicitly set in order
    /// to use a value different than the default 12 bytes.
    pub fn set_tag_len(&mut self, tag: &[u8]) -> Result<(), ErrorStack> {
    pub fn set_tag_len(&mut self, tag_len: usize) -> Result<(), ErrorStack> {
        unsafe {
            assert!(tag.len() <= c_int::max_value() as usize);
            assert!(tag_len <= c_int::max_value() as usize);
            // NB: this constant is actually more general than just GCM.
            cvt(ffi::EVP_CIPHER_CTX_ctrl(
                self.ctx,
                ffi::EVP_CTRL_GCM_SET_TAG,
                tag.len() as c_int,
                tag_len as c_int,
                ptr::null_mut(),
            )).map(|_| ())
        }
@@ -422,16 +422,16 @@ impl Crypter {
    ///
    /// The total plaintext or ciphertext length MUST be passed to the cipher when it operates in
    /// CCM mode.
    pub fn ccm_update(&mut self, input: &[u8])-> Result<(), ErrorStack> {
    pub fn set_data_len(&mut self, data_len: usize)-> Result<(), ErrorStack> {
        unsafe {
            assert!(input.len() <= c_int::max_value() as usize);
            assert!(data_len <= c_int::max_value() as usize);
            let mut len = 0;
            cvt(ffi::EVP_CipherUpdate(
                self.ctx,
                ptr::null_mut(),
                &mut len,
                ptr::null_mut(),
                input.len() as c_int,
                data_len as c_int,
            )).map(|_| ())
        }
    }
@@ -652,8 +652,8 @@ pub fn encrypt_aead(
    let mut out = vec![0; data.len() + t.block_size()];

    if t.is_ccm() {
        c.set_tag_len(tag)?;
        c.ccm_update(data)?;
        c.set_tag_len(tag.len())?;
        c.set_data_len(data.len())?;
    }

    c.aad_update(aad)?;
@@ -681,7 +681,7 @@ pub fn decrypt_aead(

    if t.is_ccm() {
        c.set_tag(tag)?;
        c.ccm_update(data)?;
        c.set_data_len(data.len())?;
    }

    c.aad_update(aad)?;