Module pgp::packet

source ·
Expand description

§Packet module

Handles everything in relationship to packets.

Key generation is handled seperately as well as signing and verifying with external hashing applied.

use pgp::crypto::{self, sym::SymmetricKeyAlgorithm, hash::HashAlgorithm, public_key::PublicKeyAlgorithm};
use pgp::types::{self, PublicKeyTrait, SecretKeyTrait, CompressionAlgorithm};
use smallvec::*;
use pgp::types::KeyTrait;
use pgp::packet::{SignatureConfigBuilder, Signature};

let signing_key = signed_secret_key;
let verification_key = public_key;


let passwd_fn = || String::new();

let now = chrono::Utc::now();

let mut sig_cfg_bldr = SignatureConfigBuilder::default();
let sig_cfg = sig_cfg_bldr
     .version(packet::SignatureVersion::V4)
     .typ(packet::SignatureType::Binary)
     .pub_alg(PublicKeyAlgorithm::RSA)
     .hash_alg(HashAlgorithm::SHA2_256)
     .issuer(Some(signing_key.key_id()))
     .created(Some(now))
     .unhashed_subpackets(vec![]) // must be initialized
     .hashed_subpackets(vec![
          packet::Subpacket::regular(packet::SubpacketData::SignatureCreationTime(now)),
          packet::Subpacket::regular(packet::SubpacketData::Issuer(signing_key.key_id())),
     ]) // must be initialized
     .build()
     .unwrap();

let signature_packet = sig_cfg
     .sign(&signing_key, passwd_fn, DATA)
     .expect("Should sign");

let mut signature_bytes = Vec::with_capacity(1024);
    let mut buff = std::io::Cursor::new(&mut signature_bytes);
    packet::write_packet(&mut buff, &signature_packet).expect("Write must succeed");

signature_packet
     .verify(&verification_key, DATA)
     .expect("Failed to validate signature");

Modules§

Structs§

Enums§

Traits§

Functions§