cmail_rpgp/packet/mod.rs
1//! # Packet module
2//!
3//! Handles everything in relationship to packets.
4//!
5//! [Key generation] is handled separately as well as
6//! [signing and verifying with external hashing] applied.
7//!
8//! [Key generation]: super::composed::key
9//! [signing and verifying with external hashing]: super::composed::signed_key
10//!
11//! ```rust
12//! # const DATA :&'static [u8] = b"Hello World";
13//! # use rand::thread_rng;
14//! # use pgp::composed::{self, KeyType, KeyDetails, SecretKey, SecretSubkey, key::SecretKeyParamsBuilder};
15//! # use pgp::errors::Result;
16//! # use pgp::packet::{self, KeyFlags, UserAttribute, SignatureVersionSpecific, UserId};
17//! use pgp::crypto::{self, sym::SymmetricKeyAlgorithm, hash::HashAlgorithm, public_key::PublicKeyAlgorithm};
18//! use pgp::types::{self, PublicKeyTrait, SecretKeyTrait, CompressionAlgorithm};
19//! use smallvec::*;
20//! #
21//! # let mut key_params = SecretKeyParamsBuilder::default();
22//! # key_params
23//! # .key_type(KeyType::Rsa(2048))
24//! # .can_certify(false)
25//! # .can_sign(true)
26//! # .primary_user_id("Me <me@example.com>".into())
27//! # .preferred_symmetric_algorithms(smallvec![
28//! # SymmetricKeyAlgorithm::AES256,
29//! # ])
30//! # .preferred_hash_algorithms(smallvec![
31//! # HashAlgorithm::SHA2_256,
32//! # ])
33//! # .preferred_compression_algorithms(smallvec![
34//! # CompressionAlgorithm::ZLIB,
35//! # ]);
36//! # let secret_key_params = key_params.build().expect("Must be able to create secret key params");
37//! # let secret_key = secret_key_params.generate(thread_rng()).expect("Failed to generate a plain key.");
38//! # let passwd_fn = || String::new();
39//! # let signed_secret_key = secret_key.sign(&mut thread_rng(), passwd_fn).expect("Must be able to sign its own metadata");
40//! # let public_key = signed_secret_key.public_key();
41//! use pgp::packet::{Signature, SignatureConfig};
42//!
43//! let signing_key = signed_secret_key;
44//! let verification_key = public_key;
45//!
46//!
47//! let passwd_fn = || String::new();
48//!
49//! let now = chrono::Utc::now();
50//!
51//! let mut sig_cfg = SignatureConfig::v4(packet::SignatureType::Binary, PublicKeyAlgorithm::RSA, HashAlgorithm::SHA2_256);
52//! sig_cfg.hashed_subpackets = vec![
53//! packet::Subpacket::regular(packet::SubpacketData::SignatureCreationTime(now)),
54//! packet::Subpacket::regular(packet::SubpacketData::Issuer(signing_key.key_id())),
55//! ];
56//!
57//! let signature_packet = sig_cfg
58//! .sign(&signing_key, passwd_fn, DATA)
59//! .expect("Should sign");
60//!
61//! let mut signature_bytes = Vec::with_capacity(1024);
62//! packet::write_packet(&mut signature_bytes, &signature_packet).expect("Write must succeed");
63//!
64//! signature_packet
65//! .verify(&verification_key, DATA)
66//! .expect("Failed to validate signature");
67//! ```
68
69mod many;
70mod packet_sum;
71mod single;
72
73mod compressed_data;
74mod key;
75mod literal_data;
76mod marker;
77mod mod_detection_code;
78mod one_pass_signature;
79mod padding;
80mod public_key_encrypted_session_key;
81mod signature;
82mod sym_encrypted_data;
83mod sym_encrypted_protected_data;
84mod sym_key_encrypted_session_key;
85mod trust;
86mod user_attribute;
87mod user_id;
88
89mod public_key_parser;
90mod secret_key_parser;
91
92pub use self::compressed_data::*;
93pub use self::key::*;
94pub use self::literal_data::*;
95pub use self::many::*;
96pub use self::marker::*;
97pub use self::mod_detection_code::*;
98pub use self::one_pass_signature::*;
99pub use self::packet_sum::*;
100pub use self::padding::*;
101pub use self::public_key_encrypted_session_key::*;
102pub use self::signature::*;
103pub use self::sym_encrypted_data::*;
104pub use self::sym_encrypted_protected_data::Data;
105pub use self::sym_encrypted_protected_data::*;
106pub use self::sym_key_encrypted_session_key::*;
107pub use self::trust::*;
108pub use self::user_attribute::*;
109pub use self::user_id::*;