pgp 0.20.0

OpenPGP implementation in Rust
Documentation
use pgp::{
    composed::{
        EncryptionCaps, KeyType, SecretKeyParamsBuilder, SignedSecretKey, SubkeyParamsBuilder,
    },
    crypto::{hash::HashAlgorithm, sym::SymmetricKeyAlgorithm},
    types::CompressionAlgorithm,
};
use rand::thread_rng;
use smallvec::smallvec;

pub mod key;
pub mod message;
pub mod s2k;

pub fn build_key(kt: KeyType, kt_sub: KeyType) -> SignedSecretKey {
    let key_params = SecretKeyParamsBuilder::default()
        .key_type(kt)
        .can_certify(true)
        .can_sign(true)
        .primary_user_id("Me <me@mail.com>".into())
        .preferred_symmetric_algorithms(smallvec![
            SymmetricKeyAlgorithm::AES256,
            SymmetricKeyAlgorithm::AES192,
            SymmetricKeyAlgorithm::AES128,
        ])
        .preferred_hash_algorithms(smallvec![
            HashAlgorithm::Sha256,
            HashAlgorithm::Sha384,
            HashAlgorithm::Sha512,
            HashAlgorithm::Sha224,
            HashAlgorithm::Sha1,
        ])
        .preferred_compression_algorithms(smallvec![
            CompressionAlgorithm::ZLIB,
            CompressionAlgorithm::ZIP,
        ])
        .passphrase(None)
        .subkey(
            SubkeyParamsBuilder::default()
                .key_type(kt_sub)
                .passphrase(None)
                .can_encrypt(EncryptionCaps::All)
                .build()
                .unwrap(),
        )
        .build()
        .unwrap();
    key_params
        .generate(thread_rng())
        .expect("failed to generate secret key, encrypted")
}