pub struct PasswordHash {
pub salt: Vec<u8>,
pub iterations: u32,
pub server_key: Vec<u8>,
pub stored_key: Vec<u8>,
}Expand description
SCRAM-SHA-256 password hash with salt and iterations
§Security Note
This struct implements a custom Debug that redacts sensitive key material to prevent accidental leakage to logs.
Fields§
§salt: Vec<u8>Salt (32 bytes, base64 encoded for storage)
iterations: u32Number of iterations
server_key: Vec<u8>Server key
stored_key: Vec<u8>Stored key
Implementations§
Source§impl PasswordHash
impl PasswordHash
Sourcepub fn with_salt(password: &str, salt: &[u8], iterations: u32) -> Self
pub fn with_salt(password: &str, salt: &[u8], iterations: u32) -> Self
Create a password hash with a specific salt (for testing/migration)
Sourcepub fn verify(&self, password: &str) -> bool
pub fn verify(&self, password: &str) -> bool
Verify a password against this hash (constant-time comparison)
Sourcepub fn constant_time_compare(a: &[u8], b: &[u8]) -> bool
pub fn constant_time_compare(a: &[u8], b: &[u8]) -> bool
Constant-time comparison to prevent timing attacks
Trait Implementations§
Source§impl Clone for PasswordHash
impl Clone for PasswordHash
Source§fn clone(&self) -> PasswordHash
fn clone(&self) -> PasswordHash
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 PasswordHash
impl Debug for PasswordHash
Source§impl<'de> Deserialize<'de> for PasswordHash
impl<'de> Deserialize<'de> for PasswordHash
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for PasswordHash
impl RefUnwindSafe for PasswordHash
impl Send for PasswordHash
impl Sync for PasswordHash
impl Unpin for PasswordHash
impl UnwindSafe for PasswordHash
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
Converts
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>
Converts
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