Skip to main content

Hash

Struct Hash 

Source
pub struct Hash { /* private fields */ }
Expand description

Contains the Argon2 hash in PHC format and a stable key identifier.

The hash can be safely stored in your database without special security measures since it’s already cryptographically hashed. However, avoid unnecessary cloning or logging to minimize exposure.

§Fields

  • key_id: A stable, deterministic identifier derived from the API key itself. This ID never changes for the same key, making it perfect for database indexing and key lookups. Format: 32 hex characters (16 bytes of BLAKE3 hash).

  • hash: The Argon2id hash in PHC format. This changes each time you hash the same key (due to random salt), but the key_id remains constant.

§PHC Format

The hash is stored in PHC (Password Hashing Competition) format which includes:

  • Algorithm identifier (argon2id)
  • Version
  • Parameters (memory cost, time cost, parallelism)
  • Salt (base64-encoded, embedded in the hash string)
  • Hash output (base64-encoded)

Example: $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>

The salt is embedded within the PHC string and can be extracted if needed using the password_hash crate’s PasswordHash::new() method.

§Key ID vs Hash

  • Key ID: Stable identifier, never changes for the same key
  • Hash: Changes each time you hash (due to different random salts)

Both fields can be accessed using the auto-generated getter methods key_id() and hash() provided by the Getters derive macro.

Implementations§

Source§

impl Hash

Auto-generated by derive_getters::Getters.

Source

pub fn key_id(&self) -> &String

Get field key_id from instance of Hash.

Source

pub fn hash(&self) -> &String

Get field hash from instance of Hash.

Trait Implementations§

Source§

impl Debug for Hash

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Hash

Source§

fn eq(&self, other: &Hash) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Hash

Auto Trait Implementations§

§

impl Freeze for Hash

§

impl RefUnwindSafe for Hash

§

impl Send for Hash

§

impl Sync for Hash

§

impl Unpin for Hash

§

impl UnwindSafe for Hash

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.