uselesskey_pgp/lib.rs
1#![forbid(unsafe_code)]
2
3//! OpenPGP fixtures built on `uselesskey-core`.
4//!
5//! The main entry point is [`PgpFactoryExt`], which adds `.pgp()` to
6//! [`Factory`](uselesskey_core::Factory).
7//!
8//! # Quick start
9//!
10//! ```
11//! use uselesskey_core::Factory;
12//! use uselesskey_pgp::{PgpFactoryExt, PgpSpec};
13//!
14//! let fx = Factory::random();
15//! let key = fx.pgp("deploy", PgpSpec::ed25519());
16//!
17//! assert!(key.private_key_armored().contains("BEGIN PGP PRIVATE KEY BLOCK"));
18//! assert!(key.public_key_armored().contains("BEGIN PGP PUBLIC KEY BLOCK"));
19//! assert!(!key.fingerprint().is_empty());
20//! ```
21//!
22//! # Available specs
23//!
24//! | Constructor | Algorithm |
25//! |---|---|
26//! | [`PgpSpec::rsa_2048()`] | RSA 2048-bit |
27//! | [`PgpSpec::rsa_3072()`] | RSA 3072-bit |
28//! | [`PgpSpec::ed25519()`] | Ed25519 |
29//!
30//! # Negative fixtures
31//!
32//! ```
33//! use uselesskey_core::Factory;
34//! use uselesskey_core::negative::CorruptPem;
35//! use uselesskey_pgp::{PgpFactoryExt, PgpSpec};
36//!
37//! let fx = Factory::random();
38//! let key = fx.pgp("deploy", PgpSpec::ed25519());
39//!
40//! // Corrupt armored output
41//! let bad = key.private_key_armored_corrupt(CorruptPem::BadBase64);
42//! assert_ne!(bad, key.private_key_armored());
43//!
44//! // Mismatched public key (valid but wrong)
45//! let wrong_pub = key.mismatched_public_key_armored();
46//! assert_ne!(wrong_pub, key.public_key_armored());
47//! ```
48
49mod keypair;
50mod spec;
51
52pub use keypair::{DOMAIN_PGP_KEYPAIR, PgpFactoryExt, PgpKeyPair};
53pub use spec::PgpSpec;