summaryrefslogtreecommitdiffstats
path: root/sq
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2021-04-20 15:52:25 +0200
committerJustus Winter <justus@sequoia-pgp.org>2021-04-26 13:13:22 +0200
commit0c349869786194214aca9ccb5f66640b28163f79 (patch)
tree5e2895d67d7fe9c58c99c7bf6ae9eb7ff6655809 /sq
parent7961a663239567089508c7962a6c77d22b588c3a (diff)
openpgp: Expose support for attested certifications.
- This is a low-level interface. We will provide nicer abstractions in a followup. - See #335.
Diffstat (limited to 'sq')
-rw-r--r--sq/src/commands/dump.rs11
-rw-r--r--sq/src/commands/key.rs30
2 files changed, 13 insertions, 28 deletions
diff --git a/sq/src/commands/dump.rs b/sq/src/commands/dump.rs
index 782344aa..081760a6 100644
--- a/sq/src/commands/dump.rs
+++ b/sq/src/commands/dump.rs
@@ -868,6 +868,17 @@ impl PacketDumper {
.collect::<Vec<String>>().join(", "))?,
IntendedRecipient(ref fp) =>
write!(output, "{} Intended Recipient: {}", i, fp)?,
+ AttestedCertifications(digests) => {
+ write!(output, "{} Attested Certifications:", i)?;
+ if digests.is_empty() {
+ writeln!(output, " None")?;
+ } else {
+ writeln!(output)?;
+ for d in digests {
+ writeln!(output, "{} {}", i, hex::encode(d))?;
+ }
+ }
+ },
// SubpacketValue is non-exhaustive.
u => writeln!(output, "{} Unknown variant: {:?}", i, u)?,
diff --git a/sq/src/commands/key.rs b/sq/src/commands/key.rs
index 5dd45809..6073e886 100644
--- a/sq/src/commands/key.rs
+++ b/sq/src/commands/key.rs
@@ -429,15 +429,11 @@ fn attest_certifications(config: Config, m: &ArgMatches)
// been standardized yet.
use sequoia_openpgp::{
crypto::hash::{Hash, Digest},
- packet::signature::subpacket::*,
types::HashAlgorithm,
};
#[allow(non_upper_case_globals)]
const SignatureType__AttestedKey: SignatureType =
SignatureType::Unknown(0x16);
- #[allow(non_upper_case_globals)]
- const SubpacketTag__AttestedCertifications: SubpacketTag =
- SubpacketTag::Unknown(37);
// Attest to all certifications?
let all = ! m.is_present("none"); // All is the default.
@@ -495,21 +491,10 @@ fn attest_certifications(config: Config, m: &ArgMatches)
uid.hash(&mut hash);
for digests in attestations.chunks(digests_per_sig) {
- let mut body = Vec::with_capacity(digest_size * digests.len());
- digests.iter().for_each(|d| body.extend(d));
-
attestation_signatures.push(
SignatureBuilder::new(SignatureType__AttestedKey)
.set_signature_creation_time(t)?
- .modify_hashed_area(|mut a| {
- a.add(Subpacket::new(
- SubpacketValue::Unknown {
- tag: SubpacketTag__AttestedCertifications,
- body,
- },
- true)?)?;
- Ok(a)
- })?
+ .set_attested_certifications(digests)?
.sign_hash(&mut pk_signer, hash.clone())?);
}
}
@@ -538,21 +523,10 @@ fn attest_certifications(config: Config, m: &ArgMatches)
ua.hash(&mut hash);
for digests in attestations.chunks(digests_per_sig) {
- let mut body = Vec::with_capacity(digest_size * digests.len());
- digests.iter().for_each(|d| body.extend(d));
-
attestation_signatures.push(
SignatureBuilder::new(SignatureType__AttestedKey)
.set_signature_creation_time(t)?
- .modify_hashed_area(|mut a| {
- a.add(Subpacket::new(
- SubpacketValue::Unknown {
- tag: SubpacketTag__AttestedCertifications,
- body,
- },
- true)?)?;
- Ok(a)
- })?
+ .set_attested_certifications(digests)?
.sign_hash(&mut pk_signer, hash.clone())?);
}
}