#worker #thread-pool #password #password-hashing #shared-state #run-time #rayon

password-worker

A wrapper for password hashing that can be used as shared state, and uses a rayon thread pool so it won't block the async runtime

1 unstable release

0.4.0 Aug 24, 2023

#1491 in Algorithms

MIT license

16KB
163 lines

password-worker Latest Version

A module providing a password hashing and verification worker.

This module contains the PasswordWorker struct, which manages hashing and verification operations using a combination of a rayon thread pool and crossbeam-channel to efficiently handle these operations asynchronously. It also makes use of a tokio::sync::oneshot channel but does not require the tokio runtime to be present.

The methods will not block the async runtime. All await operations do not block. They use non-blocking channel implementations to send and receive passwords and hashes to the rayon thread pool.

PasswordWorker is Send + Sync + Clone, and contains no lifetimes. The Clone implementation is a shallow copy that "points" to the same thread pool. It can be used as shared state without an Arc. All methods take &self so a Mutex is also not necessary.

Add as Dependency

cargo add password-worker

## OR if you want to also add argon2 support

cargo add password-worker -F rust-argon2

Example

use password_worker::{BcryptConfig, PasswordWorker};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let password = "hunter2";
    let cost = 12; // bcrypt cost value
    let max_threads = 4; // rayon thread pool max threads
    let password_worker = PasswordWorker::new_bcrypt(max_threads)?;

    let hashed_password = password_worker.hash(password, BcryptConfig { cost }).await?;
    println!("Hashed password: {:?}", hashed_password);

    let is_valid = password_worker.verify(password, hashed_password).await?;
    println!("Verification result: {:?}", is_valid);

    Ok(())
}

Available feature flags

There are some implementations included in the library. Each is tied to optional dependency features.

  • bcrypt - (default) (dependency), exports the Bcrypt and BcryptConfig types.
  • rust-argon2 - (dependency), exports the Argon2id and Argon2idConfig types.

Dependencies

~4–10MB
~111K SLoC

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy