diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-04-08 15:45:50 +0200 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-04-08 19:17:19 +0200 |
commit | 759074ef27a8e5c7832c22cc6d110d2862d39a44 (patch) | |
tree | 7f760130638c4fd6d94ca5a36c7266a66aa041ce /openpgp-ffi/src/parse/stream.rs | |
parent | 59588d78046c3d3a0b66ce104341fc0638aaeb0a (diff) |
openpgp: Move methods mapping and inspect to VerificationHelper.
Diffstat (limited to 'openpgp-ffi/src/parse/stream.rs')
-rw-r--r-- | openpgp-ffi/src/parse/stream.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/openpgp-ffi/src/parse/stream.rs b/openpgp-ffi/src/parse/stream.rs index ae5bbe43..fab833c9 100644 --- a/openpgp-ffi/src/parse/stream.rs +++ b/openpgp-ffi/src/parse/stream.rs @@ -429,18 +429,21 @@ type CheckCallback = fn(*mut HelperCookie, // This fetches keys and computes the validity of the verification. struct VHelper { + inspect_cb: Option<InspectCallback>, get_certs_cb: GetPublicKeysCallback, check_signatures_cb: CheckCallback, cookie: *mut HelperCookie, } impl VHelper { - fn new(get_certs: GetPublicKeysCallback, + fn new(inspect_cb: Option<InspectCallback>, + get_certs: GetPublicKeysCallback, check_signatures: CheckCallback, cookie: *mut HelperCookie) -> Self { VHelper { + inspect_cb, get_certs_cb: get_certs, check_signatures_cb: check_signatures, cookie, @@ -449,6 +452,19 @@ impl VHelper { } impl VerificationHelper for VHelper { + fn inspect(&mut self, pp: &PacketParser) -> openpgp::Result<()> { + if let Some(cb) = self.inspect_cb { + match cb(self.cookie, pp) { + Status::Success => Ok(()), + // XXX: Convert the status to an error better. + status => Err(anyhow::anyhow!( + "Inspect Callback returned an error: {:?}", status).into()), + } + } else { + Ok(()) + } + } + fn get_certs(&mut self, ids: &[openpgp::KeyHandle]) -> Result<Vec<openpgp::Cert>, anyhow::Error> { @@ -600,7 +616,7 @@ impl VerificationHelper for VHelper { /// .key = cert, /* Move. */ /// }; /// plaintext = pgp_verifier_new (NULL, policy, source, -/// get_certs_cb, check_cb, +/// get_certs_cb, check_cb, NULL, /// &cookie, 1554542219); /// assert (source); /// @@ -621,12 +637,13 @@ fn pgp_verifier_new<'a>(errp: Option<&mut *mut crate::error::Error>, input: *mut io::Reader, get_certs: GetPublicKeysCallback, check: CheckCallback, + inspect: Option<InspectCallback>, cookie: *mut HelperCookie, time: time_t) -> Maybe<io::Reader> { let policy = policy.ref_raw().as_ref(); - let helper = VHelper::new(get_certs, check, cookie); + let helper = VHelper::new(inspect, get_certs, check, cookie); Verifier::from_reader(policy, input.ref_mut_raw(), helper, maybe_time(time)) .map(|r| io::ReaderKind::Generic(Box::new(r))) @@ -728,7 +745,7 @@ pub struct DetachedVerifier(openpgp::parse::stream::DetachedVerifier<'static, VH /// .key = cert, /* Move. */ /// }; /// verifier = pgp_detached_verifier_new (NULL, policy, signature, -/// get_certs_cb, check_cb, +/// get_certs_cb, check_cb, NULL, /// &cookie, 1554542219); /// assert (verifier); /// @@ -748,13 +765,14 @@ fn pgp_detached_verifier_new<'a>(errp: Option<&mut *mut crate::error::Error>, signature_input: *mut io::Reader, get_certs: GetPublicKeysCallback, check: CheckCallback, + inspect: Option<InspectCallback>, cookie: *mut HelperCookie, time: time_t) -> Maybe<DetachedVerifier> { let policy = policy.ref_raw().as_ref(); - let helper = VHelper::new(get_certs, check, cookie); + let helper = VHelper::new(inspect, get_certs, check, cookie); openpgp::parse::stream::DetachedVerifier::from_reader( policy, signature_input.ref_mut_raw(), helper, maybe_time(time)) @@ -778,7 +796,6 @@ fn pgp_detached_verifier_verify(errp: Option<&mut *mut crate::error::Error>, struct DHelper { vhelper: VHelper, - inspect_cb: Option<InspectCallback>, decrypt_cb: DecryptCallback, } @@ -791,8 +808,7 @@ impl DHelper { -> Self { DHelper { - vhelper: VHelper::new(get_certs, check, cookie), - inspect_cb: inspect, + vhelper: VHelper::new(inspect, get_certs, check, cookie), decrypt_cb: decrypt, } } @@ -813,19 +829,6 @@ impl VerificationHelper for DHelper { } impl DecryptionHelper for DHelper { - fn inspect(&mut self, pp: &PacketParser) -> openpgp::Result<()> { - if let Some(cb) = self.inspect_cb { - match cb(self.vhelper.cookie, pp) { - Status::Success => Ok(()), - // XXX: Convert the status to an error better. - status => Err(anyhow::anyhow!( - "Inspect Callback returned an error: {:?}", status).into()), - } - } else { - Ok(()) - } - } - fn decrypt<D>(&mut self, pkesks: &[PKESK], skesks: &[SKESK], sym_algo: Option<SymmetricAlgorithm>, mut decrypt: D) |