pub struct EncryptedMessage<'a> { /* private fields */ }
Expand description
A parsed RLPx
encrypted message
From the devp2p spec, this should help perform the following operations:
For Bob to decrypt the message R || iv || c || d
, he derives the shared secret S = Px
where
(Px, Py) = kB * R
as well as the encryption and authentication keys kE || kM = KDF(S, 32)
.
Bob verifies the authenticity of the message by checking whether d == MAC(sha256(kM), iv || c)
then obtains the plaintext as m = AES(kE, iv || c)
.
Implementations§
Source§impl<'a> EncryptedMessage<'a>
impl<'a> EncryptedMessage<'a>
Sourcepub fn parse(data: &mut [u8]) -> Result<EncryptedMessage<'_>, ECIESError>
pub fn parse(data: &mut [u8]) -> Result<EncryptedMessage<'_>, ECIESError>
Parse the given data
into an EncryptedMessage
.
If the data is not long enough to contain the expected fields, this returns an error.
Sourcepub fn derive_keys(&self, secret_key: &SecretKey) -> RLPxSymmetricKeys
pub fn derive_keys(&self, secret_key: &SecretKey) -> RLPxSymmetricKeys
Use the given secret and this encrypted message to derive the shared secret, and use the shared secret to derive the mac and encryption keys.
Sourcepub fn check_integrity(
&self,
keys: &RLPxSymmetricKeys,
) -> Result<(), ECIESError>
pub fn check_integrity( &self, keys: &RLPxSymmetricKeys, ) -> Result<(), ECIESError>
Use the given ECIES keys to check the message integrity using the contained tag.
Sourcepub fn decrypt(self, keys: &RLPxSymmetricKeys) -> &'a mut [u8] ⓘ
pub fn decrypt(self, keys: &RLPxSymmetricKeys) -> &'a mut [u8] ⓘ
Use the given ECIES keys to decrypt the contained encrypted data, consuming the message and returning the decrypted data.
Sourcepub fn check_and_decrypt(
self,
keys: RLPxSymmetricKeys,
) -> Result<&'a mut [u8], ECIESError>
pub fn check_and_decrypt( self, keys: RLPxSymmetricKeys, ) -> Result<&'a mut [u8], ECIESError>
Use the given ECIES keys to check the integrity of the message, returning an error if the tag check fails, and then decrypt the message, returning the decrypted data.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for EncryptedMessage<'a>
impl<'a> RefUnwindSafe for EncryptedMessage<'a>
impl<'a> Send for EncryptedMessage<'a>
impl<'a> Sync for EncryptedMessage<'a>
impl<'a> Unpin for EncryptedMessage<'a>
impl<'a> !UnwindSafe for EncryptedMessage<'a>
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<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeSendSync for T
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 136 bytes