ate_crypto/crypto/
initialization_vector.rs1use crate::utils::vec_deserialize;
2use crate::utils::vec_serialize;
3use rand::RngCore;
4use serde::{Deserialize, Serialize};
5#[allow(unused_imports)]
6use tracing::{debug, error, info, instrument, span, trace, warn, Level};
7
8use super::*;
9
10#[derive(Serialize, Deserialize, Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
15pub struct InitializationVector {
16 #[serde(serialize_with = "vec_serialize", deserialize_with = "vec_deserialize")]
17 pub bytes: Vec<u8>,
18}
19
20impl InitializationVector {
21 pub fn generate() -> InitializationVector {
22 let mut rng = RandomGeneratorAccessor::default();
23 let mut iv = InitializationVector {
24 bytes: vec![0 as u8; 16],
25 };
26 rng.fill_bytes(&mut iv.bytes);
27 iv
28 }
29 pub fn len(&self) -> usize {
30 self.bytes.len()
31 }
32 pub fn as_bytes<'a>(&'a self) -> &'a [u8] {
33 &self.bytes[..]
34 }
35}
36
37impl From<Vec<u8>> for InitializationVector {
38 fn from(bytes: Vec<u8>) -> InitializationVector {
39 InitializationVector { bytes }
40 }
41}
42
43impl From<&[u8]> for InitializationVector {
44 fn from(bytes: &[u8]) -> InitializationVector {
45 InitializationVector {
46 bytes: bytes.to_vec(),
47 }
48 }
49}
50
51impl From<&[u8; 16]> for InitializationVector {
52 fn from(bytes: &[u8; 16]) -> InitializationVector {
53 InitializationVector {
54 bytes: bytes.to_vec(),
55 }
56 }
57}
58
59impl std::fmt::Display for InitializationVector {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 write!(f, "{}", hex::encode(&self.bytes[..]))
62 }
63}