pub struct PasswordOwnerEnvelopeV1 {
pub format_version: u32,
pub account_uuid: Vec<u8>,
pub owner_public_key: Vec<u8>,
pub owner_id: Vec<u8>,
pub kdf_id: u32,
pub memory_kib: u32,
pub iterations: u32,
pub parallelism: u32,
pub wrap_salt: Vec<u8>,
pub nonce: Vec<u8>,
pub ciphertext_and_tag: Vec<u8>,
}Expand description
Encrypted 32-byte Ed25519 owner seed. The server stores and returns these opaque bytes, never a password, KEK, auth seed, or decrypted owner seed. Reject unknown versions/KDFs before use. Discard unknown protobuf fields and persist only the canonical re-encoding of known fields (<= 4096 bytes). AES-GCM AAD is ASCII(“heddle-owner-wrap-aad-v1”) || 0x00 || u32be(version) || account_uuid || owner_public_key || owner_id || u32be(kdf_id) || u32be(memory_kib) || u32be(iterations) || u32be(parallelism) || wrap_salt.
Fields§
§format_version: u32Exactly 1; reject any other value.
account_uuid: Vec<u8>Exactly 16 bytes, non-nil.
owner_public_key: Vec<u8>Exactly 32 bytes; canonical, decompressible, non-small-order Ed25519 key.
owner_id: Vec<u8>Exactly 32 bytes; digest of the accepted root.
kdf_id: u32Exactly 1 = Argon2id; reject unknown KDFs.
memory_kib: u32Exactly 65536 in v1; reject other costs.
iterations: u32Exactly 3 in v1.
parallelism: u32Exactly 4 in v1.
wrap_salt: Vec<u8>Exactly 16 independent random bytes.
nonce: Vec<u8>Exactly 12 fresh random AES-256-GCM bytes.
ciphertext_and_tag: Vec<u8>Exactly 48 bytes (32-byte seed + 16-byte tag).
Trait Implementations§
Source§impl Clone for PasswordOwnerEnvelopeV1
impl Clone for PasswordOwnerEnvelopeV1
Source§fn clone(&self) -> PasswordOwnerEnvelopeV1
fn clone(&self) -> PasswordOwnerEnvelopeV1
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 PasswordOwnerEnvelopeV1
impl Debug for PasswordOwnerEnvelopeV1
Source§impl Default for PasswordOwnerEnvelopeV1
impl Default for PasswordOwnerEnvelopeV1
Source§fn default() -> PasswordOwnerEnvelopeV1
fn default() -> PasswordOwnerEnvelopeV1
impl Eq for PasswordOwnerEnvelopeV1
Source§impl Hash for PasswordOwnerEnvelopeV1
impl Hash for PasswordOwnerEnvelopeV1
Source§impl Message for PasswordOwnerEnvelopeV1
impl Message for PasswordOwnerEnvelopeV1
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl PartialEq for PasswordOwnerEnvelopeV1
impl PartialEq for PasswordOwnerEnvelopeV1
impl StructuralPartialEq for PasswordOwnerEnvelopeV1
Auto Trait Implementations§
impl Freeze for PasswordOwnerEnvelopeV1
impl RefUnwindSafe for PasswordOwnerEnvelopeV1
impl Send for PasswordOwnerEnvelopeV1
impl Sync for PasswordOwnerEnvelopeV1
impl Unpin for PasswordOwnerEnvelopeV1
impl UnsafeUnpin for PasswordOwnerEnvelopeV1
impl UnwindSafe for PasswordOwnerEnvelopeV1
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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more