Skip to main content

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};