use std::ops::RangeInclusive;
use crate::Envelope;
#[cfg(feature = "known_value")]
use crate::extension::known_values;
use anyhow::Result;
use bc_components::Salt;
use bc_rand::{RandomNumberGenerator, SecureRandomNumberGenerator};
use dcbor::prelude::*;
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)
}
}