use sequoia_openpgp::armor::{Kind, Writer};
use sequoia_openpgp::packet::key::{SecretParts, SubordinateRole};
use sequoia_openpgp::packet::Key;
use sequoia_openpgp::packet::Signature;
use sequoia_openpgp::parse::Parse;
use sequoia_openpgp::serialize::Marshal;
use sequoia_openpgp::{Cert, Packet};
use std::io::Write;
pub fn print_keys(cert: &Cert) {
for key in cert.keys() {
let key = Key::<SecretParts, SubordinateRole>::from(
key.key().clone().parts_into_secret().unwrap(),
);
let fingerprint = key.fingerprint();
let algo = key.pk_algo();
let key_packet = Packet::SecretSubkey(key);
let mut writer = Writer::new(vec![], Kind::SecretKey).unwrap();
key_packet.serialize(&mut writer).unwrap();
let key_armored = writer.finalize().unwrap();
print!(
"\n\n\n###########################\nKey ID {} ({}): \n{} \n###########################\n",
fingerprint,
algo,
String::from_utf8(key_armored).unwrap()
);
}
}
pub fn print_revocation(revocation: &Signature) {
let mut writer = Writer::new(vec![], Kind::Signature).unwrap();
revocation.serialize(&mut writer).unwrap();
let revocation_armored = writer.finalize().unwrap();
println!("{}", String::from_utf8(revocation_armored).unwrap());
}
pub fn print_cert(cert: &Cert) {
let mut private_armored: Vec<u8> = vec![];
cert.as_tsk()
.armored()
.serialize(&mut private_armored)
.unwrap();
private_armored.flush().unwrap();
println!("{}", String::from_utf8(private_armored).unwrap());
let mut public_armored: Vec<u8> = vec![];
cert.armored().serialize(&mut public_armored).unwrap();
public_armored.flush().unwrap();
println!("{}", String::from_utf8(public_armored).unwrap());
}
pub fn get_certificate(cert: &Cert) -> String {
let mut private_armored: Vec<u8> = vec![];
cert.as_tsk()
.armored()
.serialize(&mut private_armored)
.unwrap();
private_armored.flush().unwrap();
let mut public_armored: Vec<u8> = vec![];
cert.armored().serialize(&mut public_armored).unwrap();
public_armored.flush().unwrap();
format!(
"{}\n\n\n{}",
String::from_utf8(private_armored).unwrap(),
String::from_utf8(public_armored).unwrap()
)
}
pub fn get_fingerprint(public_key: &str) -> String {
sequoia_openpgp::Cert::from_bytes(public_key.as_bytes())
.unwrap()
.fingerprint()
.to_hex()
}
pub fn get_cert(cert: &str) -> sequoia_openpgp::Cert {
sequoia_openpgp::Cert::from_bytes(cert.as_bytes()).unwrap()
}