1use cipher::{
4 StreamCipherCounter,
5 array::{Array, ArraySize},
6};
7
8mod ctr128;
9mod ctr32;
10mod ctr64;
11
12pub use ctr32::{Ctr32BE, Ctr32LE};
13pub use ctr64::{Ctr64BE, Ctr64LE};
14pub use ctr128::{Ctr128BE, Ctr128LE};
15
16pub trait CtrFlavor<B: ArraySize> {
18 type CtrNonce: Clone;
20 type Backend: StreamCipherCounter;
22 const NAME: &'static str;
24
25 fn remaining(cn: &Self::CtrNonce) -> Option<usize>;
29
30 fn next_block(cn: &mut Self::CtrNonce) -> Array<u8, B>;
32
33 fn current_block(cn: &Self::CtrNonce) -> Array<u8, B>;
35
36 fn from_nonce(block: &Array<u8, B>) -> Self::CtrNonce;
38
39 fn set_from_backend(cn: &mut Self::CtrNonce, v: Self::Backend);
41
42 fn as_backend(cn: &Self::CtrNonce) -> Self::Backend;
44}