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:
Justus Winter 2019-07-08 17:16:19 +02:00
parent 71d38ae865
commit d628acdf93
No known key found for this signature in database
GPG Key ID: 686F55B4AB2B3386
7 changed files with 118 additions and 107 deletions

22
Cargo.lock generated
View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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);
}

View File

@ -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"

View File

@ -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)?,

View File

@ -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) {