1 stable release
1.0.0 | Oct 27, 2024 |
---|---|
0.3.0 |
|
0.2.0 |
|
0.1.0 |
|
0.0.1 |
|
#254 in Asynchronous
307 downloads per month
Used in 8 crates
(4 directly)
51KB
894 lines
🔐 pgp-lib
High-level, asynchronous API for rPGP, a pure Rust implementation of OpenPGP.
Features
- Exports basic PGP operations: encrypt, decrypt, sign, verify
- Exposes PGP helpers: generate a key pair, read secret/public keys from path, read signature from bytes etc
- Proposes HTTP public key discovery via WKD and HKP
- Supports tokio and async-std async runtimes
- Supports rustls and native-tls crypto libs
The library comes with 6 cargo features, including 2 default ones:
tokio
: enables the tokio async runtimeasync-std
: enables the async-std async runtimerustls
: enables the rustls cryptonative-tls
: enables the native-tls cryptokey-discovery
: enables public key discovery mechanismsvendored
: compiles and statically link to a copy of non-Rust vendors like OpenSSL
Example
use pgp::{decrypt, encrypt, gen_key_pair, read_sig_from_bytes, sign, verify};
#[tokio::main]
async fn main() {
let (alice_skey, alice_pkey) = gen_key_pair("alice@localhost", "").await.unwrap();
let (bob_skey, bob_pkey) = gen_key_pair("bob@localhost", "").await.unwrap();
let msg = b"message".to_vec();
// encrypt message with multiple recipients
let encrypted_msg = encrypt(vec![alice_pkey.clone(), bob_pkey], msg.clone())
.await
.unwrap();
// decrypt message
assert_eq!(msg, decrypt(alice_skey.clone(), "", encrypted_msg.clone()).await.unwrap());
assert_eq!(msg, decrypt(bob_skey, "", encrypted_msg.clone()).await.unwrap());
// sign message
let raw_sig = sign(alice_skey, "", msg.clone()).await.unwrap();
let sig = read_sig_from_bytes(raw_sig).await.unwrap();
// verify message
assert!(verify(alice_pkey, sig, msg).await.is_ok());
}
See the full API documentation on docs.rs.
Sponsoring
Special thanks to the NLnet foundation and the European Commission that helped the project to receive financial support from various programs:
- NGI Assure in 2022
- NGI Zero Entrust in 2023
- NGI Zero Core in 2024 (still ongoing)
If you appreciate the project, feel free to donate using one of the following providers:
Dependencies
~16–31MB
~478K SLoC