altcha/lib.rs
1//! # altcha
2//!
3//! ALTCHA Proof-of-Work v2 implementation in Rust.
4//!
5//! This crate provides server-side challenge creation and verification as well as
6//! client-side challenge solving for the [ALTCHA](https://altcha.org) PoW v2 protocol.
7//!
8//! ## Quick start
9//!
10//! ```rust
11//! use altcha::{
12//! CreateChallengeOptions, SolveChallengeOptions, VerifySolutionOptions,
13//! create_challenge, solve_challenge, verify_solution,
14//! };
15//!
16//! // Server: create a challenge
17//! let options = CreateChallengeOptions {
18//! algorithm: "PBKDF2/SHA-256".to_string(),
19//! cost: 5000,
20//! hmac_signature_secret: Some("my-secret".to_string()),
21//! ..Default::default()
22//! };
23//! let challenge = create_challenge(options).unwrap();
24//!
25//! // Client: solve the challenge
26//! let solution = solve_challenge(SolveChallengeOptions::new(&challenge))
27//! .unwrap()
28//! .expect("solution not found within timeout");
29//!
30//! // Server: verify the solution
31//! let result = verify_solution(VerifySolutionOptions::new(
32//! &challenge,
33//! &solution,
34//! "my-secret",
35//! ))
36//! .unwrap();
37//!
38//! assert!(result.verified);
39//! ```
40
41mod algorithms;
42pub mod error;
43mod helpers;
44mod pow;
45mod server_signature;
46pub mod types;
47
48pub use error::{Error, Result};
49pub use pow::{create_challenge, sign_challenge, solve_challenge, verify_solution};
50pub use server_signature::{
51 parse_verification_data, verify_fields_hash, verify_server_signature,
52};
53pub use types::{
54 Challenge, ChallengeParameters, CreateChallengeOptions, HmacAlgorithm, Payload, Solution,
55 ServerSignaturePayload, ServerSignatureVerificationData, SolveChallengeOptions,
56 VerifySolutionOptions, VerifySolutionResult, VerifyServerSignatureResult,
57};