diff options
Diffstat (limited to 'openpgp/src')
-rw-r--r-- | openpgp/src/serialize.rs | 80 | ||||
-rw-r--r-- | openpgp/src/serialize/cert.rs | 3 |
2 files changed, 35 insertions, 48 deletions
diff --git a/openpgp/src/serialize.rs b/openpgp/src/serialize.rs index 0e862692..9d38c736 100644 --- a/openpgp/src/serialize.rs +++ b/openpgp/src/serialize.rs @@ -1781,14 +1781,6 @@ impl<P: key::KeyParts, R: key::KeyRole> Marshal for Key<P, R> { } } -impl<P: key::KeyParts, R: key::KeyRole> Key<P, R> { - fn net_len_key(&self, serialize_secrets: bool) -> usize { - match self { - &Key::V4(ref p) => p.net_len_key(serialize_secrets), - } - } -} - impl<P: key::KeyParts, R: key::KeyRole> MarshalInto for Key<P, R> { fn serialized_len(&self) -> usize { match self { @@ -1812,18 +1804,7 @@ impl<P, R> Marshal for Key4<P, R> R: key::KeyRole, { fn serialize(&self, o: &mut dyn io::Write) -> Result<()> { - self.serialize_key(o, P::significant_secrets()) - } -} - -impl<P, R> Key4<P, R> - where P: key::KeyParts, - R: key::KeyRole, -{ - pub(crate) // For tests in key. - fn serialize_key(&self, o: &mut dyn io::Write, serialize_secrets: bool) - -> Result<()> { - let have_secret_key = self.has_secret() && serialize_secrets; + let have_secret_key = P::significant_secrets() && self.has_secret(); write_byte(o, 4)?; // Version. write_be_u32(o, Timestamp::try_from(self.creation_time())?.into())?; @@ -1855,9 +1836,14 @@ impl<P, R> Key4<P, R> Ok(()) } +} - fn net_len_key(&self, serialize_secrets: bool) -> usize { - let have_secret_key = self.has_secret() && serialize_secrets; +impl<P, R> NetLength for Key4<P, R> + where P: key::KeyParts, + R: key::KeyRole, +{ + fn net_len(&self) -> usize { + let have_secret_key = P::significant_secrets() && self.has_secret(); 1 // Version. + 4 // Creation time. @@ -1883,7 +1869,7 @@ impl<P, R> MarshalInto for Key4<P, R> R: key::KeyRole, { fn serialized_len(&self) -> usize { - self.net_len_key(P::significant_secrets()) + self.net_len() } fn serialize_into(&self, buf: &mut [u8]) -> Result<usize> { @@ -2593,10 +2579,10 @@ impl Marshal for Packet { &Packet::Unknown(ref p) => p.serialize(o), &Packet::Signature(ref p) => p.serialize(o), &Packet::OnePassSig(ref p) => p.serialize(o), - &Packet::PublicKey(ref p) => p.serialize_key(o, false), - &Packet::PublicSubkey(ref p) => p.serialize_key(o, false), - &Packet::SecretKey(ref p) => p.serialize_key(o, true), - &Packet::SecretSubkey(ref p) => p.serialize_key(o, true), + &Packet::PublicKey(ref p) => p.serialize(o), + &Packet::PublicSubkey(ref p) => p.serialize(o), + &Packet::SecretKey(ref p) => p.serialize(o), + &Packet::SecretSubkey(ref p) => p.serialize(o), &Packet::Marker(ref p) => p.serialize(o), &Packet::Trust(ref p) => p.serialize(o), &Packet::UserID(ref p) => p.serialize(o), @@ -2634,10 +2620,10 @@ impl Marshal for Packet { &Packet::Unknown(ref p) => p.export(o), &Packet::Signature(ref p) => p.export(o), &Packet::OnePassSig(ref p) => p.export(o), - &Packet::PublicKey(ref p) => p.serialize_key(o, false), - &Packet::PublicSubkey(ref p) => p.serialize_key(o, false), - &Packet::SecretKey(ref p) => p.serialize_key(o, true), - &Packet::SecretSubkey(ref p) => p.serialize_key(o, true), + &Packet::PublicKey(ref p) => p.serialize(o), + &Packet::PublicSubkey(ref p) => p.serialize(o), + &Packet::SecretKey(ref p) => p.serialize(o), + &Packet::SecretSubkey(ref p) => p.serialize(o), &Packet::Marker(ref p) => p.export(o), &Packet::Trust(ref p) => p.export(o), &Packet::UserID(ref p) => p.export(o), @@ -2659,10 +2645,10 @@ impl NetLength for Packet { &Packet::Unknown(ref p) => p.net_len(), &Packet::Signature(ref p) => p.net_len(), &Packet::OnePassSig(ref p) => p.net_len(), - &Packet::PublicKey(ref p) => p.net_len_key(false), - &Packet::PublicSubkey(ref p) => p.net_len_key(false), - &Packet::SecretKey(ref p) => p.net_len_key(true), - &Packet::SecretSubkey(ref p) => p.net_len_key(true), + &Packet::PublicKey(ref p) => p.net_len(), + &Packet::PublicSubkey(ref p) => p.net_len(), + &Packet::SecretKey(ref p) => p.net_len(), + &Packet::SecretSubkey(ref p) => p.net_len(), &Packet::Marker(ref p) => p.net_len(), &Packet::Trust(ref p) => p.net_len(), &Packet::UserID(ref p) => p.net_len(), @@ -2819,10 +2805,10 @@ impl<'a> Marshal for PacketRef<'a> { PacketRef::Unknown(p) => p.serialize(o), PacketRef::Signature(p) => p.serialize(o), PacketRef::OnePassSig(p) => p.serialize(o), - PacketRef::PublicKey(p) => p.serialize_key(o, false), - PacketRef::PublicSubkey(p) => p.serialize_key(o, false), - PacketRef::SecretKey(p) => p.serialize_key(o, true), - PacketRef::SecretSubkey(p) => p.serialize_key(o, true), + PacketRef::PublicKey(p) => p.serialize(o), + PacketRef::PublicSubkey(p) => p.serialize(o), + PacketRef::SecretKey(p) => p.serialize(o), + PacketRef::SecretSubkey(p) => p.serialize(o), PacketRef::Marker(p) => p.serialize(o), PacketRef::Trust(p) => p.serialize(o), PacketRef::UserID(p) => p.serialize(o), @@ -2860,10 +2846,10 @@ impl<'a> Marshal for PacketRef<'a> { PacketRef::Unknown(p) => p.export(o), PacketRef::Signature(p) => p.export(o), PacketRef::OnePassSig(p) => p.export(o), - PacketRef::PublicKey(p) => p.serialize_key(o, false), - PacketRef::PublicSubkey(p) => p.serialize_key(o, false), - PacketRef::SecretKey(p) => p.serialize_key(o, true), - PacketRef::SecretSubkey(p) => p.serialize_key(o, true), + PacketRef::PublicKey(p) => p.serialize(o), + PacketRef::PublicSubkey(p) => p.serialize(o), + PacketRef::SecretKey(p) => p.serialize(o), + PacketRef::SecretSubkey(p) => p.serialize(o), PacketRef::Marker(p) => p.export(o), PacketRef::Trust(p) => p.export(o), PacketRef::UserID(p) => p.export(o), @@ -2885,10 +2871,10 @@ impl<'a> NetLength for PacketRef<'a> { PacketRef::Unknown(p) => p.net_len(), PacketRef::Signature(p) => p.net_len(), PacketRef::OnePassSig(p) => p.net_len(), - PacketRef::PublicKey(p) => p.net_len_key(false), - PacketRef::PublicSubkey(p) => p.net_len_key(false), - PacketRef::SecretKey(p) => p.net_len_key(true), - PacketRef::SecretSubkey(p) => p.net_len_key(true), + PacketRef::PublicKey(p) => p.net_len(), + PacketRef::PublicSubkey(p) => p.net_len(), + PacketRef::SecretKey(p) => p.net_len(), + PacketRef::SecretSubkey(p) => p.net_len(), PacketRef::Marker(p) => p.net_len(), PacketRef::Trust(p) => p.net_len(), PacketRef::UserID(p) => p.net_len(), diff --git a/openpgp/src/serialize/cert.rs b/openpgp/src/serialize/cert.rs index ab57457d..a3aa4cba 100644 --- a/openpgp/src/serialize/cert.rs +++ b/openpgp/src/serialize/cert.rs @@ -5,6 +5,7 @@ use crate::seal; use crate::serialize::{ PacketRef, Marshal, MarshalInto, + NetLength, generic_serialize_into, generic_export_into, }; @@ -546,7 +547,7 @@ impl<'a> MarshalInto for TSK<'a> { || tag == Tag::PublicSubkey) { // Emit a GnuPG-style secret key stub. The stub // extends the public key by 8 bytes. - let l = key.net_len_key(false) + 8; + let l = key.parts_as_public().net_len() + 8; return 1 // CTB + BodyLength::Full(l as u32).serialized_len() + l; |