pub struct EncryptedSecretKey { /* private fields */ }nip49 only.Expand description
An encrypted secret key, ready to be bech32-encoded as ncryptsec1....
Debug redacts every byte so the value can be safely logged.
We deliberately do not implement Copy: even though every
field is Copy-eligible, silently duplicating an encrypted secret
across the stack would violate the principle that callers must
reason explicitly about every place the ciphertext lives. Use
Clone when you really need a second owned copy.
Implementations§
Source§impl EncryptedSecretKey
impl EncryptedSecretKey
Sourcepub fn encrypt(
secret: &SecretKey,
password: &str,
log_n: u8,
security: KeySecurity,
) -> Result<Self, Nip49Error>
pub fn encrypt( secret: &SecretKey, password: &str, log_n: u8, security: KeySecurity, ) -> Result<Self, Nip49Error>
Encrypt secret under password with a random salt and nonce.
log_n is the scrypt cost parameter; spec recommends 16 for
client UX and 21+ for cold-storage. security is recorded as
AAD so any later tamper is caught by the AEAD.
§Errors
Returns Nip49Error::LogNTooLarge / Nip49Error::InvalidParams when
scrypt rejects the cost, or Nip49Error::Rng when the OS RNG is
unavailable.
Sourcepub fn encrypt_with(
secret: &SecretKey,
password: &str,
log_n: u8,
security: KeySecurity,
salt: [u8; 16],
nonce: [u8; 24],
) -> Result<Self, Nip49Error>
pub fn encrypt_with( secret: &SecretKey, password: &str, log_n: u8, security: KeySecurity, salt: [u8; 16], nonce: [u8; 24], ) -> Result<Self, Nip49Error>
Encrypt with a caller-supplied salt and nonce.
Use with care: reusing a (password, salt, nonce) triple
across two encryptions defeats the AEAD. Reserved for
known-answer test vectors and deterministic fixtures.
§Errors
See Self::encrypt.
Sourcepub fn decrypt(&self, password: &str) -> Result<SecretKey, Nip49Error>
pub fn decrypt(&self, password: &str) -> Result<SecretKey, Nip49Error>
Recover the secret key with the same password used to encrypt.
§Errors
Returns Nip49Error::Aead when the password is wrong or the
ciphertext / security byte was tampered with, Nip49Error::SecretKey
when the decrypted bytes do not encode a valid secp256k1 scalar,
or Nip49Error::InvalidParams / Nip49Error::Scrypt for derivation
failures.
Sourcepub const fn security(&self) -> KeySecurity
pub const fn security(&self) -> KeySecurity
Security level the author declared at encryption time.
Sourcepub fn to_bech32(&self) -> Result<String, Nip49Error>
pub fn to_bech32(&self) -> Result<String, Nip49Error>
Encode as the spec-mandated ncryptsec1... bech32 string.
§Errors
Returns Nip49Error::Encode only if the underlying bech32 crate
rejects the payload, which on a 91-byte buffer is statically
impossible.
Sourcepub fn from_bech32(input: &str) -> Result<Self, Nip49Error>
pub fn from_bech32(input: &str) -> Result<Self, Nip49Error>
Decode from the ncryptsec1... bech32 string.
§Errors
Returns Nip49Error::Decode for malformed bech32, Nip49Error::UnexpectedHrp
when the HRP is not ncryptsec, Nip49Error::InvalidLength when
the decoded payload is not exactly PAYLOAD_BYTES long, and
Nip49Error::UnsupportedVersion / Nip49Error::InvalidKeySecurity
when the payload header is malformed.
Trait Implementations§
Source§impl Clone for EncryptedSecretKey
impl Clone for EncryptedSecretKey
Source§fn clone(&self) -> EncryptedSecretKey
fn clone(&self) -> EncryptedSecretKey
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EncryptedSecretKey
impl Debug for EncryptedSecretKey
Source§impl Drop for EncryptedSecretKey
impl Drop for EncryptedSecretKey
Source§fn drop(&mut self)
fn drop(&mut self)
Best-effort zeroize on drop.
ciphertext is encrypted, but salt and nonce are
privacy-relevant inputs to the scrypt KDF — wiping them
reduces the chance that a freed allocation hands them to
the next allocator caller. The compiler may still elide
some writes under aggressive optimisation; the
zeroize crate’s volatile-write
implementation is the best portable mitigation we have.
impl Eq for EncryptedSecretKey
Source§impl PartialEq for EncryptedSecretKey
impl PartialEq for EncryptedSecretKey
Source§fn eq(&self, other: &EncryptedSecretKey) -> bool
fn eq(&self, other: &EncryptedSecretKey) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for EncryptedSecretKey
Auto Trait Implementations§
impl Freeze for EncryptedSecretKey
impl RefUnwindSafe for EncryptedSecretKey
impl Send for EncryptedSecretKey
impl Sync for EncryptedSecretKey
impl Unpin for EncryptedSecretKey
impl UnsafeUnpin for EncryptedSecretKey
impl UnwindSafe for EncryptedSecretKey
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.