pub struct SubmitRecoveryProofRequest {
pub recovery_attempt_id: String,
pub client_operation_id: String,
pub new_device_proof_signature: Vec<u8>,
pub proof: Option<Proof>,
}Expand description
Submit proof against the declared method for an in-flight attempt. The proof variant must match the attempt’s kind. weft#183/#185/#186.
Fields§
§recovery_attempt_id: String§client_operation_id: String§new_device_proof_signature: Vec<u8>Proof of possession of the new_device_public_key carried by the selected
proof variant (weft#2047 leg 2). Closes the attacker-choosable-new-key
plant: the recovery method (passkey / guardians / paper code) authorizes
that recovery, but on its own it does not prove the caller holds the
private half of the key the recovered identity gets bound to, so an
attacker who cleared the recovery gate could bind the account to a key
they do not control. This is a raw 64-byte Ed25519 signature by the NEW
device private key over the 32-byte digest
SHA256(“heddle-recovery-new-device-pop-v1” || 0x00 ||
recovery_attempt_id (UTF-8) || 0x00 || new_device_public_key).
See heddle_api::signing::recovery_new_device_pop_digest. Binding
recovery_attempt_id makes the proof single-use for this attempt. The
server recomputes the digest and verifies the signature against the
accepted variant’s new_device_public_key before running the completion
cascade; a missing or invalid signature fails the proof.
proof: Option<Proof>Trait Implementations§
Source§impl Clone for SubmitRecoveryProofRequest
impl Clone for SubmitRecoveryProofRequest
Source§fn clone(&self) -> SubmitRecoveryProofRequest
fn clone(&self) -> SubmitRecoveryProofRequest
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 SubmitRecoveryProofRequest
impl Debug for SubmitRecoveryProofRequest
Source§impl Default for SubmitRecoveryProofRequest
impl Default for SubmitRecoveryProofRequest
Source§impl Message for SubmitRecoveryProofRequest
impl Message for SubmitRecoveryProofRequest
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.