summaryrefslogtreecommitdiffstats
path: root/openpgp-ffi
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-04-08 15:45:50 +0200
committerJustus Winter <justus@sequoia-pgp.org>2020-04-08 19:17:19 +0200
commit759074ef27a8e5c7832c22cc6d110d2862d39a44 (patch)
tree7f760130638c4fd6d94ca5a36c7266a66aa041ce /openpgp-ffi
parent59588d78046c3d3a0b66ce104341fc0638aaeb0a (diff)
openpgp: Move methods mapping and inspect to VerificationHelper.
Diffstat (limited to 'openpgp-ffi')
-rw-r--r--openpgp-ffi/include/sequoia/openpgp.h2
-rw-r--r--openpgp-ffi/src/parse/stream.rs45
2 files changed, 26 insertions, 21 deletions
diff --git a/openpgp-ffi/include/sequoia/openpgp.h b/openpgp-ffi/include/sequoia/openpgp.h
index 8651127c..e0657812 100644
--- a/openpgp-ffi/include/sequoia/openpgp.h
+++ b/openpgp-ffi/include/sequoia/openpgp.h
@@ -1961,6 +1961,7 @@ pgp_reader_t pgp_verifier_new (pgp_error_t *errp,
pgp_reader_t input,
pgp_decryptor_get_certs_cb_t get_certs,
pgp_decryptor_check_cb_t check,
+ pgp_decryptor_inspect_cb_t inspect,
void *cookie, time_t time);
/*/
@@ -1971,6 +1972,7 @@ pgp_detached_verifier_t pgp_detached_verifier_new (pgp_error_t *errp,
pgp_reader_t signature_input,
pgp_decryptor_get_certs_cb_t get_certs,
pgp_decryptor_check_cb_t check,
+ pgp_decryptor_inspect_cb_t inspect,
void *cookie, time_t time);
/*/
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)