use std::ops::RangeInclusive;
use bc_components::Salt;
use bc_rand::{RandomNumberGenerator, SecureRandomNumberGenerator};
use dcbor::prelude::*;
#[cfg(feature = "known_value")]
use known_values;
use crate::{Envelope, Result};
impl Envelope {
pub fn add_salt(&self) -> Self {
let mut rng = SecureRandomNumberGenerator;
self.add_salt_using(&mut rng)
}
pub fn add_salt_instance(&self, salt: Salt) -> Self {
self.add_assertion(known_values::SALT, salt)
}
pub fn add_salt_with_len(&self, count: usize) -> Result<Self> {
let mut rng = SecureRandomNumberGenerator;
self.add_salt_with_len_using(count, &mut rng)
}
#[doc(hidden)]
pub fn add_salt_with_len_using(
&self,
count: usize,
rng: &mut impl RandomNumberGenerator,
) -> Result<Self> {
let salt = Salt::new_with_len_using(count, rng)?;
Ok(self.add_salt_instance(salt))
}
pub fn add_salt_in_range(
&self,
range: RangeInclusive<usize>,
) -> Result<Self> {
let mut rng = SecureRandomNumberGenerator;
self.add_salt_in_range_using(&range, &mut rng)
}
#[doc(hidden)]
pub fn add_salt_in_range_using(
&self,
range: &RangeInclusive<usize>,
rng: &mut impl RandomNumberGenerator,
) -> Result<Self> {
Ok(self.add_salt_instance(Salt::new_in_range_using(range, rng)?))
}
#[doc(hidden)]
pub fn add_salt_using(&self, rng: &mut impl RandomNumberGenerator) -> Self {
let salt = Salt::new_for_size_using(
self.tagged_cbor().to_cbor_data().len(),
rng,
);
self.add_salt_instance(salt)
}
}