siwx_rs/lib.rs
1//! Sign-In with X (SIWX) - Multi-chain authentication library
2//!
3//! This library provides a unified interface for blockchain authentication
4//! supporting Ethereum and Solana chains, following the EIP-4361 standard.
5//!
6//! ## Features
7//!
8//! - **Multi-chain support**: Ethereum and Solana
9//! - **EIP-4361 compliance**: Standard message format for authentication
10//! - **Smart contract wallet support**: Designed for EOA and contract wallets
11//! - **Backend agnostic**: Use any blockchain library (ethers-rs, alloy-rs, etc.)
12//! - **Flexible signature verification**: Support for different signature formats
13//!
14//! ## Usage
15//!
16//! ```rust
17//! use siwx_rs::{SiwxMessage, Chain, SignatureVerifier};
18//!
19//! // Create a SIWX message
20//! let message = SiwxMessage::new(
21//! "example.com",
22//! "0x1234567890123456789012345678901234567890",
23//! "https://example.com/login",
24//! "1",
25//! "2024-01-01T00:00:00Z",
26//! "nonce123"
27//! );
28//!
29//! // Generate message to sign
30//! let message_to_sign = message.to_string();
31//!
32//! // Verify signature (implementation depends on your backend)
33//! // let verifier = SignatureVerifier::new(Chain::Ethereum);
34//! // let is_valid = verifier.verify(&message, &signature).await?;
35//! ```
36
37pub mod backend;
38pub mod chain;
39pub mod error;
40pub mod message;
41pub mod public_key;
42pub mod signature;
43pub mod utils;
44pub mod verifier;
45
46pub use chain::Chain;
47pub use error::{SiwxError, SiwxResult};
48pub use message::SiwxMessage;
49#[cfg(feature = "ethereum")]
50pub use public_key::EthereumPublicKey;
51#[cfg(feature = "solana")]
52pub use public_key::SolanaPublicKey;
53#[cfg(not(feature = "solana"))]
54pub use public_key::{PublicKey, PublicKeyEnum, PublicKeyFactory};
55#[cfg(feature = "solana")]
56pub use public_key::{
57 PublicKey, PublicKeyEnum, PublicKeyFactory, SolanaPublicKey as _SolanaPublicKeyMarker,
58};
59pub use signature::{Signature, SignatureType};
60pub use verifier::SignatureVerifier;
61
62/// Re-export commonly used types
63pub mod prelude {
64 #[cfg(feature = "ethereum")]
65 pub use super::EthereumPublicKey;
66 #[cfg(feature = "solana")]
67 pub use super::SolanaPublicKey;
68 pub use super::{
69 Chain, PublicKey, PublicKeyEnum, PublicKeyFactory, Signature, SignatureType,
70 SignatureVerifier, SiwxError, SiwxMessage, SiwxResult,
71 };
72}