pub struct SecureMessageChannel {
pub config: SecurityConfig,
pub current_key: Arc<RwLock<EncryptionKey>>,
pub previous_keys: Arc<RwLock<HashMap<String, EncryptionKey>>>,
pub hmac_key: Arc<RwLock<Vec<u8>>>,
pub rng: SystemRandom,
pub key_rotation_task: Arc<RwLock<Option<JoinHandle<()>>>>,
}Expand description
Secure message channel with encryption and authentication
Fields§
§config: SecurityConfig§current_key: Arc<RwLock<EncryptionKey>>§previous_keys: Arc<RwLock<HashMap<String, EncryptionKey>>>§hmac_key: Arc<RwLock<Vec<u8>>>§rng: SystemRandom§key_rotation_task: Arc<RwLock<Option<JoinHandle<()>>>>Implementations§
Source§impl SecureMessageChannel
impl SecureMessageChannel
Sourcepub fn new(config: SecurityConfig) -> Result<Self, String>
pub fn new(config: SecurityConfig) -> Result<Self, String>
Create a new secure message channel
Sourcepub async fn start(&self) -> Result<(), String>
pub async fn start(&self) -> Result<(), String>
Start the secure channel with automatic key rotation
Sourcepub async fn encrypt_message<T: Serialize>(
&self,
message: &T,
) -> Result<EncryptedMessage, String>
pub async fn encrypt_message<T: Serialize>( &self, message: &T, ) -> Result<EncryptedMessage, String>
Encrypt and authenticate a message
Sourcepub async fn decrypt_message<T: for<'de> Deserialize<'de>>(
&self,
encrypted: &EncryptedMessage,
) -> Result<T, String>
pub async fn decrypt_message<T: for<'de> Deserialize<'de>>( &self, encrypted: &EncryptedMessage, ) -> Result<T, String>
Decrypt and verify a message
Sourcepub async fn rotate_keys(&self) -> Result<(), String>
pub async fn rotate_keys(&self) -> Result<(), String>
Rotate encryption keys
Sourceasync fn get_encryption_key(
&self,
key_id: &str,
) -> Result<EncryptionKey, String>
async fn get_encryption_key( &self, key_id: &str, ) -> Result<EncryptionKey, String>
Get encryption key by ID
Sourceasync fn start_key_rotation(&self)
async fn start_key_rotation(&self)
Start automatic key rotation
Sourceasync fn cleanup_old_keys(&self)
async fn cleanup_old_keys(&self)
Cleanup old keys
Sourcepub async fn get_stats(&self) -> SecurityStats
pub async fn get_stats(&self) -> SecurityStats
Get security statistics
Sourcepub async fn validate_message_integrity(
&self,
encrypted: &EncryptedMessage,
) -> Result<bool, String>
pub async fn validate_message_integrity( &self, encrypted: &EncryptedMessage, ) -> Result<bool, String>
Validate message integrity
Sourcepub fn default_channel() -> Result<Self, String>
pub fn default_channel() -> Result<Self, String>
Create a secure channel with default configuration
Sourcepub fn high_security_channel() -> Result<Self, String>
pub fn high_security_channel() -> Result<Self, String>
Create a high-security channel
Source§impl SecureMessageChannel
Utility functions for secure messaging
impl SecureMessageChannel
Utility functions for secure messaging
Sourcepub fn generate_secure_key(key_size_bytes: usize) -> Result<Vec<u8>, String>
pub fn generate_secure_key(key_size_bytes: usize) -> Result<Vec<u8>, String>
Generate a secure random key
Sourcepub fn calculate_encryption_overhead(message_size: usize) -> usize
pub fn calculate_encryption_overhead(message_size: usize) -> usize
Calculate message overhead for encryption
Sourcepub fn estimate_encrypted_size(original_size: usize) -> usize
pub fn estimate_encrypted_size(original_size: usize) -> usize
Estimate encrypted message size
Sourcepub async fn create_secure_message<T: Serialize>(
&self,
message: &T,
additional_headers: HashMap<String, String>,
) -> Result<SecureMessage<T>, String>
pub async fn create_secure_message<T: Serialize>( &self, message: &T, additional_headers: HashMap<String, String>, ) -> Result<SecureMessage<T>, String>
Create message with secure headers
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SecureMessageChannel
impl !RefUnwindSafe for SecureMessageChannel
impl Send for SecureMessageChannel
impl Sync for SecureMessageChannel
impl Unpin for SecureMessageChannel
impl !UnwindSafe for SecureMessageChannel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].