1use cipher::{
4 generic_array::{ArrayLength, GenericArray},
5 Counter,
6};
7
8mod ctr128;
9mod ctr32;
10mod ctr64;
11
12pub use ctr128::{Ctr128BE, Ctr128LE};
13pub use ctr32::{Ctr32BE, Ctr32LE};
14pub use ctr64::{Ctr64BE, Ctr64LE};
15
16pub trait CtrFlavor<B: ArrayLength<u8>> {
18 type CtrNonce: Clone;
20 type Backend: Counter;
22 const NAME: &'static str;
24
25 fn remaining(cn: &Self::CtrNonce) -> Option<usize>;
29
30 fn next_block(cn: &mut Self::CtrNonce) -> GenericArray<u8, B>;
32
33 fn current_block(cn: &Self::CtrNonce) -> GenericArray<u8, B>;
35
36 fn from_nonce(block: &GenericArray<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}