Skip to main content

CryptoProvider

Trait CryptoProvider 

Source
pub trait CryptoProvider: Send + Sync {
    // Required methods
    fn rsa_size(&self) -> usize;
    fn aes_key(&self) -> [u8; 32];
    fn aes_encrypt(
        &self,
        plaintext: &[u8],
    ) -> Result<Vec<u8>, CryptoProviderError>;
    fn aes_decrypt(
        &self,
        ciphertext: &[u8],
    ) -> Result<Vec<u8>, CryptoProviderError>;
    fn rsa_encrypt(
        &self,
        plaintext: &[u8],
    ) -> Result<Vec<u8>, CryptoProviderError>;
    fn rsa_decrypt(
        &self,
        ciphertext: &[u8],
    ) -> Result<Vec<u8>, CryptoProviderError>;
}
Expand description

Pluggable AES + RSA provider for the DNODE peer protocol.

The default in-crate provider RustCryptoProvider wraps crate::crypto::Crypto. HSM / KMS integrations implement the trait against their hardware bridge.

§Examples

use dynomite::embed::hooks::{CryptoProvider, RustCryptoProvider};
use dynomite::crypto::Crypto;
// Construct the underlying Crypto from a PEM file at runtime.
let crypto = Crypto::from_pem("/etc/dynomite/dynomite.pem").unwrap();
let provider = RustCryptoProvider::new(crypto);
assert!(provider.rsa_size() > 0);

Required Methods§

Source

fn rsa_size(&self) -> usize

Modulus length in bytes for the configured RSA key.

Source

fn aes_key(&self) -> [u8; 32]

Borrow the AES key buffer used by the DNODE handshake.

Source

fn aes_encrypt(&self, plaintext: &[u8]) -> Result<Vec<u8>, CryptoProviderError>

AES-encrypt plaintext under the provider’s key.

Source

fn aes_decrypt(&self, ciphertext: &[u8]) -> Result<Vec<u8>, CryptoProviderError>

AES-decrypt ciphertext under the provider’s key.

Source

fn rsa_encrypt(&self, plaintext: &[u8]) -> Result<Vec<u8>, CryptoProviderError>

RSA-encrypt plaintext under the provider’s public key.

Source

fn rsa_decrypt(&self, ciphertext: &[u8]) -> Result<Vec<u8>, CryptoProviderError>

RSA-decrypt ciphertext under the provider’s private key.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§