pub struct EncryptedKey { /* private fields */ }
Expand description
§Overview
Provides symmetric encryption and decryption of content keys using various key derivation methods (HKDF, PBKDF2, Scrypt, Argon2id). This module implements types and traits to wrap the encryption mechanisms, and encodes methods and parameters in CBOR according to the defined CDDL schemas.
§Usage
- Call
EncryptedKey::lock
with a chosen key derivation method, secret, and content key to produce an encrypted key. - Retrieve the original content key by calling
EncryptedKey::unlock
with the correct secret.
§Encoding
The form of an EncryptedKey
is an EncryptedMessage
that contains the
encrypted content key, with its Additional Authenticated Data (AAD) being
the CBOR encoding of the key derivation method and parameters used for key
derivation. The same key derivation method and parameters must be used to
unlock the content key.
CDDL:
EncryptedKey = #6.40027(EncryptedMessage) ; TAG_ENCRYPTED_KEY
EncryptedMessage =
#6.40002([ ciphertext: bstr, nonce: bstr, auth: bstr, aad: bstr .cbor KeyDerivation ]) ; TAG_ENCRYPTED
KeyDerivation = HKDFParams / PBKDF2Params / ScryptParams / Argon2idParams / SSHAgentParams
HKDFParams = [HKDF, Salt, HashType]
PBKDF2Params = [PBKDF2, Salt, iterations: uint, HashType]
ScryptParams = [Scrypt, Salt, log_n: uint, r: uint, p: uint]
Argon2idParams = [Argon2id, Salt]
SSHAgentParams = [SSHAgent, Salt, id: tstr]
KeyDerivationMethod = HKDF / PBKDF2 / Scrypt / Argon2id / SSHAgent
HKDF = 0
PBKDF2 = 1
Scrypt = 2
Argon2id = 3
SSHAgent = 4
HashType = SHA256 / SHA512
SHA256 = 0
SHA512 = 1
Implementations§
Source§impl EncryptedKey
impl EncryptedKey
pub fn lock_opt( params: KeyDerivationParams, secret: impl AsRef<[u8]>, content_key: &SymmetricKey, ) -> Result<Self>
pub fn lock( method: KeyDerivationMethod, secret: impl AsRef<[u8]>, content_key: &SymmetricKey, ) -> Result<Self>
pub fn encrypted_message(&self) -> &EncryptedMessage
pub fn aad_cbor(&self) -> Result<CBOR>
pub fn unlock(&self, secret: impl AsRef<[u8]>) -> Result<SymmetricKey>
pub fn is_password_based(&self) -> bool
pub fn is_ssh_agent(&self) -> bool
Trait Implementations§
Source§impl CBORTagged for EncryptedKey
impl CBORTagged for EncryptedKey
Returns the CBOR tags associated with this type. Read more
Source§impl CBORTaggedDecodable for EncryptedKey
impl CBORTaggedDecodable for EncryptedKey
Source§fn from_untagged_cbor(untagged_cbor: CBOR) -> Result<Self>
fn from_untagged_cbor(untagged_cbor: CBOR) -> Result<Self>
Creates an instance of this type by decoding it from untagged CBOR. Read more
Source§fn from_tagged_cbor(cbor: CBOR) -> Result<Self, Error>where
Self: Sized,
fn from_tagged_cbor(cbor: CBOR) -> Result<Self, Error>where
Self: Sized,
Creates an instance of this type by decoding it from tagged CBOR. Read more
Source§impl CBORTaggedEncodable for EncryptedKey
impl CBORTaggedEncodable for EncryptedKey
Source§fn untagged_cbor(&self) -> CBOR
fn untagged_cbor(&self) -> CBOR
Returns the untagged CBOR encoding of this instance. Read more
Source§fn tagged_cbor(&self) -> CBOR
fn tagged_cbor(&self) -> CBOR
Returns the tagged CBOR encoding of this instance. Read more
Source§impl Clone for EncryptedKey
impl Clone for EncryptedKey
Source§fn clone(&self) -> EncryptedKey
fn clone(&self) -> EncryptedKey
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for EncryptedKey
impl Debug for EncryptedKey
Source§impl Display for EncryptedKey
impl Display for EncryptedKey
Source§impl From<EncryptedKey> for CBOR
impl From<EncryptedKey> for CBOR
Source§fn from(value: EncryptedKey) -> Self
fn from(value: EncryptedKey) -> Self
Converts to this type from the input type.
Source§impl PartialEq for EncryptedKey
impl PartialEq for EncryptedKey
Source§impl TryFrom<CBOR> for EncryptedKey
impl TryFrom<CBOR> for EncryptedKey
impl Eq for EncryptedKey
impl StructuralPartialEq for EncryptedKey
Auto Trait Implementations§
impl Freeze for EncryptedKey
impl !RefUnwindSafe for EncryptedKey
impl !Send for EncryptedKey
impl !Sync for EncryptedKey
impl Unpin for EncryptedKey
impl !UnwindSafe for EncryptedKey
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