Bump Sequoia to 0.9.
- Sequoia now ignores any unhashed subpackets when comparing signatures, closing a DoS vector. Previously, one could create any number of valid signatures from a single valid signature that were considered distinct by mutating the unhashed subpacket area. - Sequoia now handles malformed UserIDs of the form "$addr <$addr>". Adjust database::test::test_bad_uids accordingly. - Update src/dump.rs from Sequoia. - Sequoia now ignores any Unicode codepoint considered whitespace when parsing Fingerprints and KeyIDs. Fixes #122.
This commit is contained in:
parent
71d38ae865
commit
d628acdf93
|
@ -181,7 +181,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "buffered-reader"
|
||||
version = "0.8.0"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -623,7 +623,7 @@ dependencies = [
|
|||
"rocket 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_codegen 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rocket_contrib 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -648,7 +648,7 @@ dependencies = [
|
|||
"multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pathdiff 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -674,7 +674,7 @@ dependencies = [
|
|||
"multipart 0.16.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pathdiff 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-openpgp 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1766,11 +1766,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "sequoia-openpgp"
|
||||
version = "0.8.0"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"buffered-reader 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"buffered-reader 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lalrpop 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1780,13 +1780,13 @@ dependencies = [
|
|||
"nettle 5.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quickcheck 0.8.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-rfc2822 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sequoia-rfc2822 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sequoia-rfc2822"
|
||||
version = "0.8.0"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2310,7 +2310,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
|
||||
"checksum block-padding 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4dc3af3ee2e12f3e5d224e5e1e3d73668abbeb69e566d361f7d5563a4fdf09"
|
||||
"checksum buf_redux 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72f25c67abbf523ff8457771622fb731ac4a2391439de33bc60febcdee1749c9"
|
||||
"checksum buffered-reader 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8dfde2ced54994f147d1e970f18aebedd6b33b82320197a66f957b19e797402"
|
||||
"checksum buffered-reader 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "237cf351e1e6666907f4e2b59ee4a00083280445a0c6eb2261640615a3a33317"
|
||||
"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
|
||||
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
|
||||
"checksum c2-chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7d64d04786e0f528460fc884753cf8dddcc466be308f6026f8e355c41a0e4101"
|
||||
|
@ -2482,8 +2482,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
|
||||
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
|
||||
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||
"checksum sequoia-openpgp 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bfb5b4f16d3772c94775d89a98b70492889d16beba20c6e635858f033d254f06"
|
||||
"checksum sequoia-rfc2822 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "36fbb2baa4147c0d9e88db2a9db73a23c30c9860ec3131394570ef6bbb0e1e5e"
|
||||
"checksum sequoia-openpgp 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc4ddaa91071dad9d960b199e9c7884a72094f6d5ef6559c2cf0327ae215f000"
|
||||
"checksum sequoia-rfc2822 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac5c04d61bc70a72173c9a1b3d0ce06dd7e992d90e67614245e108834c2443aa"
|
||||
"checksum serde 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "076a696fdea89c19d3baed462576b8f6d663064414b5c793642da8dfeb99475b"
|
||||
"checksum serde_derive 1.0.94 (registry+https://github.com/rust-lang/crates.io-index)" = "ef45eb79d6463b22f5f9e16d283798b7c0175ba6050bc25c1a946c122727fe7b"
|
||||
"checksum serde_json 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "051c49229f282f7c6f3813f8286cc1e3323e8051823fce42c7ea80fe13521704"
|
||||
|
|
|
@ -16,7 +16,7 @@ hagrid-database = { path = "database" }
|
|||
failure = "0.1.5"
|
||||
rocket = "0"
|
||||
rocket_codegen = "0"
|
||||
sequoia-openpgp = { version = "0.8", default-features = false }
|
||||
sequoia-openpgp = { version = "0.9", default-features = false }
|
||||
multipart = "0"
|
||||
log = "0"
|
||||
serde = "1.0"
|
||||
|
|
|
@ -5,7 +5,7 @@ authors = ["Kai Michaelis <kai@sequoia-pgp.org>"]
|
|||
|
||||
[dependencies]
|
||||
failure = "0.1.5"
|
||||
sequoia-openpgp = { version = "0.8", default-features = false }
|
||||
sequoia-openpgp = { version = "0.9", default-features = false }
|
||||
multipart = "0"
|
||||
log = "0"
|
||||
rand = "0.6"
|
||||
|
|
|
@ -911,26 +911,30 @@ pub fn test_bad_uids<D: Database>(db: &mut D) {
|
|||
.unwrap()
|
||||
.0;
|
||||
let fpr = Fingerprint::try_from(tpk.fingerprint()).unwrap();
|
||||
let email1 = Email::from_str(str_uid1).unwrap();
|
||||
let email2 = Email::from_str(str_uid2).unwrap();
|
||||
|
||||
let tpk_status = db.merge(tpk).unwrap().into_tpk_status();
|
||||
assert_eq!(TpkStatus {
|
||||
is_revoked: false,
|
||||
email_status: vec!(
|
||||
(email1.clone(), EmailAddressStatus::NotPublished),
|
||||
(email2.clone(), EmailAddressStatus::NotPublished),
|
||||
),
|
||||
unparsed_uids: 2,
|
||||
unparsed_uids: 1,
|
||||
}, tpk_status);
|
||||
|
||||
db.set_email_published(&fpr, &email2).unwrap();
|
||||
|
||||
let tpk_status = db.get_tpk_status(&fpr, &vec!(email2.clone())).unwrap();
|
||||
let tpk_status = db.get_tpk_status(&fpr, &vec!(email1.clone(),
|
||||
email2.clone())).unwrap();
|
||||
assert_eq!(TpkStatus {
|
||||
is_revoked: false,
|
||||
email_status: vec!(
|
||||
(email1.clone(), EmailAddressStatus::NotPublished),
|
||||
(email2.clone(), EmailAddressStatus::Published),
|
||||
),
|
||||
unparsed_uids: 2,
|
||||
unparsed_uids: 1,
|
||||
}, tpk_status);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ authors = ["Vincent Breitmose <look@my.amazin.horse>"]
|
|||
[dependencies]
|
||||
hagrid-database = { path = "../database" }
|
||||
failure = "0.1.5"
|
||||
sequoia-openpgp = { version = "0.8", default-features = false }
|
||||
sequoia-openpgp = { version = "0.9", default-features = false }
|
||||
multipart = "0"
|
||||
log = "0"
|
||||
rand = "0.6"
|
||||
|
|
183
src/dump.rs
183
src/dump.rs
|
@ -1,16 +1,18 @@
|
|||
// from https://gitlab.com/sequoia-pgp/dump.sequoia-pgp.org/blob/master/src/dump.rs
|
||||
// plus *very* slight adaptions for seqoia 0.8
|
||||
// from https://gitlab.com/sequoia-pgp/sequoia/blob/master/tool/src/commands/dump.rs
|
||||
|
||||
use std::io::{self, Read};
|
||||
use time;
|
||||
|
||||
use sequoia_openpgp::constants::SymmetricAlgorithm;
|
||||
use sequoia_openpgp::conversions::hex;
|
||||
use sequoia_openpgp::{Packet, Result};
|
||||
use sequoia_openpgp::packet::ctb::CTB;
|
||||
use sequoia_openpgp::packet::{Header, BodyLength, Signature};
|
||||
use sequoia_openpgp::packet::signature::subpacket::{Subpacket, SubpacketValue};
|
||||
use sequoia_openpgp::crypto::{SessionKey, s2k::S2K};
|
||||
use sequoia_openpgp::parse::{map::Map, Parse, PacketParserResult};
|
||||
extern crate sequoia_openpgp as openpgp;
|
||||
use self::openpgp::constants::SymmetricAlgorithm;
|
||||
use self::openpgp::conversions::hex;
|
||||
use self::openpgp::crypto::mpis;
|
||||
use self::openpgp::{Packet, Result};
|
||||
use self::openpgp::packet::ctb::CTB;
|
||||
use self::openpgp::packet::{Header, BodyLength, Signature};
|
||||
use self::openpgp::packet::signature::subpacket::{Subpacket, SubpacketValue};
|
||||
use self::openpgp::crypto::{SessionKey, s2k::S2K};
|
||||
use self::openpgp::parse::{map::Map, Parse, PacketParserResult};
|
||||
|
||||
const TIMEFMT: &'static str = "%Y-%m-%dT%H:%M";
|
||||
|
||||
|
@ -24,14 +26,17 @@ pub enum Kind {
|
|||
Unknown,
|
||||
}
|
||||
|
||||
pub fn dump(input: &mut dyn io::Read, output: &mut dyn io::Write, mpis: bool, hex: bool,
|
||||
sk: Option<&SessionKey>)
|
||||
-> Result<Kind> {
|
||||
pub fn dump<W>(input: &mut dyn io::Read, output: &mut dyn io::Write,
|
||||
mpis: bool, hex: bool, sk: Option<&SessionKey>,
|
||||
width: W)
|
||||
-> Result<Kind>
|
||||
where W: Into<Option<usize>>
|
||||
{
|
||||
let mut ppr
|
||||
= sequoia_openpgp::parse::PacketParserBuilder::from_reader(input)?
|
||||
= self::openpgp::parse::PacketParserBuilder::from_reader(input)?
|
||||
.map(hex).finalize()?;
|
||||
let mut message_encrypted = false;
|
||||
let width = 32 * 4 + 80;
|
||||
let width = width.into().unwrap_or(80);
|
||||
let mut dumper = PacketDumper::new(width, mpis);
|
||||
|
||||
while let PacketParserResult::Some(mut pp) = ppr {
|
||||
|
@ -232,7 +237,7 @@ impl PacketDumper {
|
|||
header: Option<&Header>, p: &Packet, map: Option<&Map>,
|
||||
additional_fields: Option<&Vec<String>>)
|
||||
-> Result<()> {
|
||||
use sequoia_openpgp::Packet::*;
|
||||
use self::openpgp::Packet::*;
|
||||
|
||||
if let Some(h) = header {
|
||||
write!(output, "{} CTB, {}: ",
|
||||
|
@ -283,40 +288,40 @@ impl PacketDumper {
|
|||
level <= {} and data)", n - 1)?,
|
||||
}
|
||||
if self.mpis {
|
||||
use sequoia_openpgp::crypto::mpis::Signature::*;
|
||||
writeln!(output, "{}", i)?;
|
||||
writeln!(output, "{} Signature:", i)?;
|
||||
|
||||
let ii = format!("{} ", i);
|
||||
match s.mpis() {
|
||||
RSA { s } =>
|
||||
mpis::Signature::RSA { s } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&s.value],
|
||||
&[s.value()],
|
||||
&["s"])?,
|
||||
DSA { r, s } =>
|
||||
mpis::Signature::DSA { r, s } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&r.value, &s.value],
|
||||
&[r.value(), s.value()],
|
||||
&["r", "s"])?,
|
||||
Elgamal { r, s } =>
|
||||
mpis::Signature::Elgamal { r, s } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&r.value, &s.value],
|
||||
&[r.value(), s.value()],
|
||||
&["r", "s"])?,
|
||||
EdDSA { r, s } =>
|
||||
mpis::Signature::EdDSA { r, s } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&r.value, &s.value],
|
||||
&[r.value(), s.value()],
|
||||
&["r", "s"])?,
|
||||
ECDSA { r, s } =>
|
||||
mpis::Signature::ECDSA { r, s } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&r.value, &s.value],
|
||||
&[r.value(), s.value()],
|
||||
&["r", "s"])?,
|
||||
Unknown { mpis, rest } => {
|
||||
mpis::Signature::Unknown { mpis, rest } => {
|
||||
let keys: Vec<String> =
|
||||
(0..mpis.len()).map(
|
||||
|i| format!("mpi{}", i)).collect();
|
||||
self.dump_mpis(
|
||||
output, &ii,
|
||||
&mpis.iter().map(|m| m.value.iter().as_slice())
|
||||
.collect::<Vec<_>>()[..],
|
||||
&mpis.iter().map(|m| {
|
||||
m.value().iter().as_slice()
|
||||
}).collect::<Vec<_>>()[..],
|
||||
&keys.iter().map(|k| k.as_str())
|
||||
.collect::<Vec<_>>()[..],
|
||||
)?;
|
||||
|
@ -349,48 +354,48 @@ impl PacketDumper {
|
|||
writeln!(output, "{} Pk size: {} bits", i, bits)?;
|
||||
}
|
||||
if self.mpis {
|
||||
use sequoia_openpgp::crypto::mpis::PublicKey::*;
|
||||
writeln!(output, "{}", i)?;
|
||||
writeln!(output, "{} Public Key:", i)?;
|
||||
|
||||
let ii = format!("{} ", i);
|
||||
match k.mpis() {
|
||||
RSA { e, n } =>
|
||||
mpis::PublicKey::RSA { e, n } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&e.value, &n.value],
|
||||
&[e.value(), n.value()],
|
||||
&["e", "n"])?,
|
||||
DSA { p, q, g, y } =>
|
||||
mpis::PublicKey::DSA { p, q, g, y } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&p.value, &q.value, &g.value,
|
||||
&y.value],
|
||||
&[p.value(), q.value(), g.value(),
|
||||
y.value()],
|
||||
&["p", "q", "g", "y"])?,
|
||||
Elgamal { p, g, y } =>
|
||||
mpis::PublicKey::Elgamal { p, g, y } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&p.value, &g.value, &y.value],
|
||||
&[p.value(), g.value(), y.value()],
|
||||
&["p", "g", "y"])?,
|
||||
EdDSA { curve, q } => {
|
||||
mpis::PublicKey::EdDSA { curve, q } => {
|
||||
writeln!(output, "{} Curve: {}", ii, curve)?;
|
||||
self.dump_mpis(output, &ii, &[&q.value], &["q"])?;
|
||||
self.dump_mpis(output, &ii, &[q.value()], &["q"])?;
|
||||
},
|
||||
ECDSA { curve, q } => {
|
||||
mpis::PublicKey::ECDSA { curve, q } => {
|
||||
writeln!(output, "{} Curve: {}", ii, curve)?;
|
||||
self.dump_mpis(output, &ii, &[&q.value], &["q"])?;
|
||||
self.dump_mpis(output, &ii, &[q.value()], &["q"])?;
|
||||
},
|
||||
ECDH { curve, q, hash, sym } => {
|
||||
mpis::PublicKey::ECDH { curve, q, hash, sym } => {
|
||||
writeln!(output, "{} Curve: {}", ii, curve)?;
|
||||
writeln!(output, "{} Hash algo: {}", ii, hash)?;
|
||||
writeln!(output, "{} Symmetric algo: {}", ii,
|
||||
sym)?;
|
||||
self.dump_mpis(output, &ii, &[&q.value], &["q"])?;
|
||||
self.dump_mpis(output, &ii, &[q.value()], &["q"])?;
|
||||
},
|
||||
Unknown { mpis, rest } => {
|
||||
mpis::PublicKey::Unknown { mpis, rest } => {
|
||||
let keys: Vec<String> =
|
||||
(0..mpis.len()).map(
|
||||
|i| format!("mpi{}", i)).collect();
|
||||
self.dump_mpis(
|
||||
output, &ii,
|
||||
&mpis.iter().map(|m| m.value.iter().as_slice())
|
||||
.collect::<Vec<_>>()[..],
|
||||
&mpis.iter().map(|m| {
|
||||
m.value().iter().as_slice()
|
||||
}).collect::<Vec<_>>()[..],
|
||||
&keys.iter().map(|k| k.as_str())
|
||||
.collect::<Vec<_>>()[..],
|
||||
)?;
|
||||
|
@ -400,44 +405,46 @@ impl PacketDumper {
|
|||
}
|
||||
|
||||
if let Some(secrets) = k.secret() {
|
||||
use sequoia_openpgp::crypto::mpis::SecretKey::*;
|
||||
use self::openpgp::packet::key::SecretKey;
|
||||
writeln!(output, "{}", i)?;
|
||||
writeln!(output, "{} Secret Key:", i)?;
|
||||
|
||||
let ii = format!("{} ", i);
|
||||
match secrets {
|
||||
sequoia_openpgp::packet::key::SecretKey::Unencrypted {
|
||||
mpis,
|
||||
} => match mpis {
|
||||
RSA { d, p, q, u } =>
|
||||
SecretKey::Unencrypted(ref u) => match u.mpis()
|
||||
{
|
||||
mpis::SecretKey::RSA { d, p, q, u } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&d.value, &p.value, &q.value,
|
||||
&u.value],
|
||||
&[d.value(), p.value(),
|
||||
q.value(), u.value()],
|
||||
&["d", "p", "q", "u"])?,
|
||||
DSA { x } =>
|
||||
self.dump_mpis(output, &ii, &[&x.value],
|
||||
mpis::SecretKey::DSA { x } =>
|
||||
self.dump_mpis(output, &ii, &[x.value()],
|
||||
&["x"])?,
|
||||
Elgamal { x } =>
|
||||
self.dump_mpis(output, &ii, &[&x.value],
|
||||
mpis::SecretKey::Elgamal { x } =>
|
||||
self.dump_mpis(output, &ii, &[x.value()],
|
||||
&["x"])?,
|
||||
EdDSA { scalar } =>
|
||||
self.dump_mpis(output, &ii, &[&scalar.value],
|
||||
mpis::SecretKey::EdDSA { scalar } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[scalar.value()],
|
||||
&["scalar"])?,
|
||||
ECDSA { scalar } =>
|
||||
self.dump_mpis(output, &ii, &[&scalar.value],
|
||||
mpis::SecretKey::ECDSA { scalar } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[scalar.value()],
|
||||
&["scalar"])?,
|
||||
ECDH { scalar } =>
|
||||
self.dump_mpis(output, &ii, &[&scalar.value],
|
||||
mpis::SecretKey::ECDH { scalar } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[scalar.value()],
|
||||
&["scalar"])?,
|
||||
Unknown { mpis, rest } => {
|
||||
mpis::SecretKey::Unknown { mpis, rest } => {
|
||||
let keys: Vec<String> =
|
||||
(0..mpis.len()).map(
|
||||
|i| format!("mpi{}", i)).collect();
|
||||
self.dump_mpis(
|
||||
output, &ii,
|
||||
&mpis.iter()
|
||||
.map(|m| m.value.iter().as_slice())
|
||||
.collect::<Vec<_>>()[..],
|
||||
&mpis.iter().map(|m| {
|
||||
m.value().iter().as_slice()
|
||||
}).collect::<Vec<_>>()[..],
|
||||
&keys.iter().map(|k| k.as_str())
|
||||
.collect::<Vec<_>>()[..],
|
||||
)?;
|
||||
|
@ -446,15 +453,13 @@ impl PacketDumper {
|
|||
&["rest"])?;
|
||||
},
|
||||
},
|
||||
sequoia_openpgp::packet::key::SecretKey::Encrypted {
|
||||
s2k, algorithm, ciphertext,
|
||||
} => {
|
||||
SecretKey::Encrypted(ref e) => {
|
||||
writeln!(output, "{}", i)?;
|
||||
write!(output, "{} S2K: ", ii)?;
|
||||
self.dump_s2k(output, &ii, s2k)?;
|
||||
self.dump_s2k(output, &ii, e.s2k())?;
|
||||
writeln!(output, "{} Sym. algo: {}", ii,
|
||||
algorithm)?;
|
||||
self.dump_mpis(output, &ii, &[&ciphertext[..]],
|
||||
e.algo())?;
|
||||
self.dump_mpis(output, &ii, &[e.ciphertext()],
|
||||
&["ciphertext"])?;
|
||||
},
|
||||
}
|
||||
|
@ -474,7 +479,7 @@ impl PacketDumper {
|
|||
},
|
||||
|
||||
UserAttribute(ref u) => {
|
||||
use sequoia_openpgp::packet::user_attribute::{Subpacket, Image};
|
||||
use self::openpgp::packet::user_attribute::{Subpacket, Image};
|
||||
writeln!(output, "User Attribute Packet")?;
|
||||
|
||||
for subpacket in u.subpackets() {
|
||||
|
@ -532,32 +537,32 @@ impl PacketDumper {
|
|||
writeln!(output, "{} Recipient: {}", i, p.recipient())?;
|
||||
writeln!(output, "{} Pk algo: {}", i, p.pk_algo())?;
|
||||
if self.mpis {
|
||||
use sequoia_openpgp::crypto::mpis::Ciphertext::*;
|
||||
writeln!(output, "{}", i)?;
|
||||
writeln!(output, "{} Encrypted session key:", i)?;
|
||||
|
||||
let ii = format!("{} ", i);
|
||||
match p.esk() {
|
||||
RSA { c } =>
|
||||
mpis::Ciphertext::RSA { c } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&c.value],
|
||||
&[c.value()],
|
||||
&["c"])?,
|
||||
Elgamal { e, c } =>
|
||||
mpis::Ciphertext::Elgamal { e, c } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&e.value, &c.value],
|
||||
&[e.value(), c.value()],
|
||||
&["e", "c"])?,
|
||||
ECDH { e, key } =>
|
||||
mpis::Ciphertext::ECDH { e, key } =>
|
||||
self.dump_mpis(output, &ii,
|
||||
&[&e.value, key],
|
||||
&[e.value(), key],
|
||||
&["e", "key"])?,
|
||||
Unknown { mpis, rest } => {
|
||||
mpis::Ciphertext::Unknown { mpis, rest } => {
|
||||
let keys: Vec<String> =
|
||||
(0..mpis.len()).map(
|
||||
|i| format!("mpi{}", i)).collect();
|
||||
self.dump_mpis(
|
||||
output, &ii,
|
||||
&mpis.iter().map(|m| m.value.iter().as_slice())
|
||||
.collect::<Vec<_>>()[..],
|
||||
&mpis.iter().map(|m| {
|
||||
m.value().iter().as_slice()
|
||||
}).collect::<Vec<_>>()[..],
|
||||
&keys.iter().map(|k| k.as_str())
|
||||
.collect::<Vec<_>>()[..],
|
||||
)?;
|
||||
|
@ -572,7 +577,7 @@ impl PacketDumper {
|
|||
writeln!(output, "Symmetric-key Encrypted Session Key Packet")?;
|
||||
writeln!(output, "{} Version: {}", i, s.version())?;
|
||||
match s {
|
||||
sequoia_openpgp::packet::SKESK::V4(ref s) => {
|
||||
self::openpgp::packet::SKESK::V4(ref s) => {
|
||||
writeln!(output, "{} Symmetric algo: {}", i,
|
||||
s.symmetric_algo())?;
|
||||
write!(output, "{} S2K: ", i)?;
|
||||
|
@ -583,7 +588,7 @@ impl PacketDumper {
|
|||
}
|
||||
},
|
||||
|
||||
sequoia_openpgp::packet::SKESK::V5(ref s) => {
|
||||
self::openpgp::packet::SKESK::V5(ref s) => {
|
||||
writeln!(output, "{} Symmetric algo: {}", i,
|
||||
s.symmetric_algo())?;
|
||||
writeln!(output, "{} AEAD: {}", i,
|
||||
|
@ -771,11 +776,11 @@ impl PacketDumper {
|
|||
writeln!(output, "{} Hash: {}", i, hash)?;
|
||||
writeln!(output, "{} Salt: {}", i, hex::encode(salt))?;
|
||||
},
|
||||
Iterated { hash, ref salt, .. } => {
|
||||
Iterated { hash, ref salt, hash_bytes } => {
|
||||
writeln!(output, "Iterated")?;
|
||||
writeln!(output, "{} Hash: {}", i, hash)?;
|
||||
writeln!(output, "{} Salt: {}", i, hex::encode(salt))?;
|
||||
// writeln!(output, "{} Iterations: {}", i, iterations)?;
|
||||
writeln!(output, "{} Hash bytes: {}", i, hash_bytes)?;
|
||||
},
|
||||
Private(n) =>
|
||||
writeln!(output, "Private({})", n)?,
|
||||
|
|
|
@ -30,7 +30,9 @@ pub fn debug_info(
|
|||
&mut result,
|
||||
false,
|
||||
false,
|
||||
None);
|
||||
None,
|
||||
32 * 4 + 80,
|
||||
);
|
||||
match dump_result {
|
||||
Ok(Kind::TPK) => {
|
||||
match String::from_utf8(result) {
|
||||
|
|
Loading…
Reference in New Issue