summaryrefslogtreecommitdiff
path: root/tests/gpg
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gpg')
-rw-r--r--tests/gpg/Makefile.am11
-rw-r--r--tests/gpg/Makefile.in42
-rw-r--r--tests/gpg/ownertrust.txt3
-rw-r--r--tests/gpg/t-decrypt-verify.c44
-rw-r--r--tests/gpg/t-edit-sign.c59
-rw-r--r--tests/gpg/t-import.c2
-rw-r--r--tests/gpg/t-keylist-secret-sig.c8
-rw-r--r--tests/gpg/t-keylist-sig.c8
-rw-r--r--tests/gpg/t-keylist.c29
-rw-r--r--tests/gpg/t-support.h44
-rw-r--r--tests/gpg/t-verify.c83
11 files changed, 271 insertions, 62 deletions
diff --git a/tests/gpg/Makefile.am b/tests/gpg/Makefile.am
index 6d99539..dc3642a 100644
--- a/tests/gpg/Makefile.am
+++ b/tests/gpg/Makefile.am
@@ -61,7 +61,7 @@ EXTRA_DIST = initial.test final.test \
pubdemo.asc secdemo.asc cipher-1.asc cipher-2.asc \
cipher-3.asc cipher-no-sig.asc \
geheim.txt pubkey-1.asc seckey-1.asc pinentry $(private_keys) \
- gpg.conf.in
+ gpg.conf.in ownertrust.txt
BUILT_SOURCES = gpg.conf gpg-agent.conf pubring-stamp \
gpg-sample.stamp
@@ -99,15 +99,18 @@ gpg-sample.stamp: $(srcdir)/$(private_keys)
-$(TESTS_ENVIRONMENT) gpgconf --kill all
$(MKDIR_P) ./private-keys-v1.d
for k in $(private_keys); do \
- cp $(srcdir)/$$k private-keys-v1.d/$$k.key; \
- done
+ cp $(srcdir)/$$k private-keys-v1.d/$$k.key; \
+ done
echo x > ./gpg-sample.stamp
pubring-stamp: $(srcdir)/pubdemo.asc gpg-sample.stamp
$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
- --import $(srcdir)/pubdemo.asc
+ --import $(srcdir)/pubdemo.asc
-$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
--import $(srcdir)/secdemo.asc
+ -$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
+ --import-ownertrust $(srcdir)/ownertrust.txt
+ -$(TESTS_ENVIRONMENT) gpgconf --kill all
echo x > ./pubring-stamp
gpg.conf: $(srcdir)/gpg.conf.in
diff --git a/tests/gpg/Makefile.in b/tests/gpg/Makefile.in
index 4d16ab6..c4f87c6 100644
--- a/tests/gpg/Makefile.in
+++ b/tests/gpg/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.3 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2020 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -113,7 +113,8 @@ TESTS = initial.test $(am__EXEEXT_2) final.test
noinst_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_4)
subdir = tests/gpg
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_gcc_func_attribute.m4 \
$(top_srcdir)/m4/ax_pkg_swig.m4 \
$(top_srcdir)/m4/ax_python_devel.m4 \
@@ -123,8 +124,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
- $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/qt.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+ $(top_srcdir)/m4/python.m4 $(top_srcdir)/m4/qt5.m4 \
+ $(top_srcdir)/m4/qt6.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
@@ -347,8 +349,6 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
am__tty_colors_dummy = \
mgn= red= grn= lgn= blu= brg= std=; \
am__color_tests=no
@@ -394,6 +394,8 @@ CC_FOR_BUILD = @CC_FOR_BUILD@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@@ -410,6 +412,7 @@ ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ENABLED_LANGUAGES = @ENABLED_LANGUAGES@
+ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GITLOG_TO_CHANGELOG = @GITLOG_TO_CHANGELOG@
@@ -425,10 +428,14 @@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@
GPGME_CONFIG_HOST = @GPGME_CONFIG_HOST@
GPGME_CONFIG_LIBS = @GPGME_CONFIG_LIBS@
GPGME_CPP_CFLAGS = @GPGME_CPP_CFLAGS@
-GPGME_QTTEST_CFLAGS = @GPGME_QTTEST_CFLAGS@
-GPGME_QTTEST_LIBS = @GPGME_QTTEST_LIBS@
-GPGME_QT_CFLAGS = @GPGME_QT_CFLAGS@
-GPGME_QT_LIBS = @GPGME_QT_LIBS@
+GPGME_QT5TEST_CFLAGS = @GPGME_QT5TEST_CFLAGS@
+GPGME_QT5TEST_LIBS = @GPGME_QT5TEST_LIBS@
+GPGME_QT5_CFLAGS = @GPGME_QT5_CFLAGS@
+GPGME_QT5_LIBS = @GPGME_QT5_LIBS@
+GPGME_QT6TEST_CFLAGS = @GPGME_QT6TEST_CFLAGS@
+GPGME_QT6TEST_LIBS = @GPGME_QT6TEST_LIBS@
+GPGME_QT6_CFLAGS = @GPGME_QT6_CFLAGS@
+GPGME_QT6_LIBS = @GPGME_QT6_LIBS@
GPGRT_CONFIG = @GPGRT_CONFIG@
GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
@@ -438,6 +445,7 @@ GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
GRAPHVIZ = @GRAPHVIZ@
GREP = @GREP@
HAVE_CXX11 = @HAVE_CXX11@
+HAVE_CXX17 = @HAVE_CXX17@
HAVE_DOT = @HAVE_DOT@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -608,7 +616,7 @@ EXTRA_DIST = initial.test final.test \
pubdemo.asc secdemo.asc cipher-1.asc cipher-2.asc \
cipher-3.asc cipher-no-sig.asc \
geheim.txt pubkey-1.asc seckey-1.asc pinentry $(private_keys) \
- gpg.conf.in
+ gpg.conf.in ownertrust.txt
BUILT_SOURCES = gpg.conf gpg-agent.conf pubring-stamp \
gpg-sample.stamp
@@ -1051,7 +1059,6 @@ check-TESTS: $(TESTS)
echo "$${col}$$dashes$${std}"; \
test "$$failed" -eq 0; \
else :; fi
-
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
@@ -1276,15 +1283,18 @@ gpg-sample.stamp: $(srcdir)/$(private_keys)
-$(TESTS_ENVIRONMENT) gpgconf --kill all
$(MKDIR_P) ./private-keys-v1.d
for k in $(private_keys); do \
- cp $(srcdir)/$$k private-keys-v1.d/$$k.key; \
- done
+ cp $(srcdir)/$$k private-keys-v1.d/$$k.key; \
+ done
echo x > ./gpg-sample.stamp
pubring-stamp: $(srcdir)/pubdemo.asc gpg-sample.stamp
$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
- --import $(srcdir)/pubdemo.asc
+ --import $(srcdir)/pubdemo.asc
-$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
--import $(srcdir)/secdemo.asc
+ -$(TESTS_ENVIRONMENT) $(GPG) --batch --no-permission-warning \
+ --import-ownertrust $(srcdir)/ownertrust.txt
+ -$(TESTS_ENVIRONMENT) gpgconf --kill all
echo x > ./pubring-stamp
gpg.conf: $(srcdir)/gpg.conf.in
diff --git a/tests/gpg/ownertrust.txt b/tests/gpg/ownertrust.txt
new file mode 100644
index 0000000..0f31f9e
--- /dev/null
+++ b/tests/gpg/ownertrust.txt
@@ -0,0 +1,3 @@
+# List of assigned trustvalues, created Mi 08 Feb 2023 09:52:04 CET
+# (Use "gpg --import-ownertrust" to restore them)
+A0FF4590BB6122EDEF6E3C542D727CC768697734:6:
diff --git a/tests/gpg/t-decrypt-verify.c b/tests/gpg/t-decrypt-verify.c
index cbd6cc7..424cc81 100644
--- a/tests/gpg/t-decrypt-verify.c
+++ b/tests/gpg/t-decrypt-verify.c
@@ -36,9 +36,19 @@
#include "t-support.h"
+static const char normal_signed_message[] =
+"-----BEGIN PGP MESSAGE-----\n"
+"\n"
+"owGbwMvMwCSoW1RzPCOz3IRxjXQSR0lqcYleSUWJTZOvjVdpcYmCu1+oQmaJIleH\n"
+"GwuDIBMDGysTSIqBi1MApi+nlGGuwDeHao53HBr+FoVGP3xX+kvuu9fCMJvl6IOf\n"
+"y1kvP4y+8D5a11ang0udywsA\n"
+"=Crq6\n"
+"-----END PGP MESSAGE-----\n";
+
+
static void
check_verify_result (gpgme_verify_result_t result, unsigned int summary,
- const char *fpr, gpgme_error_t status)
+ const char *fpr, gpgme_error_t status, int validity)
{
gpgme_signature_t sig;
@@ -79,10 +89,11 @@ check_verify_result (gpgme_verify_result_t result, unsigned int summary,
__FILE__, __LINE__);
exit (1);
}
- if (sig->validity != GPGME_VALIDITY_UNKNOWN)
+ if (sig->validity != validity)
{
- fprintf (stderr, "%s:%i: Unexpected validity: %i\n",
- __FILE__, __LINE__, sig->validity);
+ fprintf (stderr, "%s:%i: Unexpected validity: "
+ "want=%i have=%i\n",
+ __FILE__, __LINE__, validity, sig->validity);
exit (1);
}
if (gpgme_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)
@@ -134,12 +145,33 @@ main (int argc, char *argv[])
}
print_data (out);
verify_result = gpgme_op_verify_result (ctx);
- check_verify_result (verify_result, 0,
+ check_verify_result (verify_result, GPGME_SIGSUM_VALID|GPGME_SIGSUM_GREEN,
"A0FF4590BB6122EDEF6E3C542D727CC768697734",
- GPG_ERR_NO_ERROR);
+ GPG_ERR_NO_ERROR, GPGME_VALIDITY_FULL);
gpgme_data_release (in);
gpgme_data_release (out);
+
+ /* Checking a signed, but not encrypted message. */
+ err = gpgme_data_new_from_mem (&in, normal_signed_message, strlen (normal_signed_message), 0);
+ fail_if_err (err);
+ err = gpgme_data_new (&out);
+ fail_if_err (err);
+ err = gpgme_op_decrypt_verify (ctx, in, out);
+ /* should have returned "no data" because the message is not encrypted */
+ if (gpgme_err_code (err) != GPG_ERR_NO_DATA)
+ {
+ fprintf (stderr, "%s:%i: Unexpected result of gpgme_op_decrypt_verify: %s\n",
+ __FILE__, __LINE__, gpgme_strerror (err));
+ }
+ verify_result = gpgme_op_verify_result (ctx);
+ check_verify_result (verify_result, GPGME_SIGSUM_VALID|GPGME_SIGSUM_GREEN,
+ "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ GPG_ERR_NO_ERROR, GPGME_VALIDITY_FULL);
+
+ gpgme_data_release (in);
+ gpgme_data_release (out);
+
gpgme_release (ctx);
return 0;
}
diff --git a/tests/gpg/t-edit-sign.c b/tests/gpg/t-edit-sign.c
index a3938b9..059a912 100644
--- a/tests/gpg/t-edit-sign.c
+++ b/tests/gpg/t-edit-sign.c
@@ -39,6 +39,58 @@
#include "t-support.h"
+static const char *test_key = "-----BEGIN PGP PUBLIC KEY BLOCK-----\n"
+"\n"
+"mDMEY+NyJBYJKwYBBAHaRw8BAQdA4VfyC5sa6T3xVSus55LjyqQetFuE1shtu/71\n"
+"pHLxg8W0KFNpZ24gbWUgKGRlbW8ga2V5KSA8c2lnbi1tZUBleGFtcGxlLm5ldD6I\n"
+"kwQTFgoAOxYhBPPHuA+qbf/jPmLyYnJg+w/EtKy+BQJj43IkAhsDBQsJCAcCAiIC\n"
+"BhUKCQgLAgQWAgMBAh4HAheAAAoJEHJg+w/EtKy+26gBAMhaI/lYA9BK35525kQT\n"
+"OhvpQwgThJxQp8AOQk3UMgkGAP0ahV9lFXwv9ZnoeHEhjECsNpAFbj9fxBlzNmMZ\n"
+"Z92+AA==\n"
+"=Koy1\n"
+"-----END PGP PUBLIC KEY BLOCK-----\n";
+static const char *test_key_fpr = "F3C7B80FAA6DFFE33E62F2627260FB0FC4B4ACBE";
+
+static void
+import_key (const char *keydata)
+{
+ gpgme_ctx_t ctx;
+ gpgme_error_t err;
+ gpgme_data_t in;
+
+ err = gpgme_new (&ctx);
+ fail_if_err (err);
+
+ err = gpgme_data_new_from_mem (&in, keydata, strlen(keydata), 0);
+ fail_if_err (err);
+
+ err = gpgme_op_import (ctx, in);
+ fail_if_err (err);
+
+ gpgme_data_release (in);
+ gpgme_release (ctx);
+}
+
+static void
+delete_key (const char *fpr)
+{
+ gpgme_ctx_t ctx;
+ gpgme_error_t err;
+ gpgme_key_t key = NULL;
+
+ err = gpgme_new (&ctx);
+ fail_if_err (err);
+
+ err = gpgme_get_key (ctx, fpr, &key, 0);
+ fail_if_err (err);
+
+ err = gpgme_op_delete_ext (ctx, key, GPGME_DELETE_FORCE);
+ fail_if_err (err);
+
+ gpgme_key_unref (key);
+ gpgme_release (ctx);
+}
+
static void
flush_data (gpgme_data_t dh)
{
@@ -205,15 +257,16 @@ main (int argc, char **argv)
{
const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
const char *signer_keyid = signer_fpr + strlen(signer_fpr) - 16;
- const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
(void)argc;
(void)argv;
init_gpgme (GPGME_PROTOCOL_OpenPGP);
- sign_key (key_fpr, signer_fpr);
- verify_key_signature (key_fpr, signer_keyid);
+ import_key (test_key);
+ sign_key (test_key_fpr, signer_fpr);
+ verify_key_signature (test_key_fpr, signer_keyid);
+ delete_key (test_key_fpr);
return 0;
}
diff --git a/tests/gpg/t-import.c b/tests/gpg/t-import.c
index 1f7fdbc..ec4bee0 100644
--- a/tests/gpg/t-import.c
+++ b/tests/gpg/t-import.c
@@ -269,6 +269,8 @@ main (int argc, char *argv[])
exit (1);
}
+ gpgme_key_unref (key);
+ gpgme_release (ctx);
return 0;
}
diff --git a/tests/gpg/t-keylist-secret-sig.c b/tests/gpg/t-keylist-secret-sig.c
index c0ef5c0..d9c88ea 100644
--- a/tests/gpg/t-keylist-secret-sig.c
+++ b/tests/gpg/t-keylist-secret-sig.c
@@ -167,7 +167,7 @@ main (void)
key->chain_id);
exit (1);
}
- if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
+ if (key->owner_trust != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Key has unexpected owner trust: %i\n",
key->owner_trust);
@@ -349,7 +349,7 @@ main (void)
fprintf (stderr, "First user ID unexpectedly invalid\n");
exit (1);
}
- if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
+ if (key->uids && key->uids->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
key->uids->validity);
@@ -435,7 +435,7 @@ main (void)
exit (1);
}
if (key->uids && key->uids->next
- && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
key->uids->next->validity);
@@ -526,7 +526,7 @@ main (void)
exit (1);
}
if (key->uids && key->uids->next && key->uids->next->next
- && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->next->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
key->uids->next->next->validity);
diff --git a/tests/gpg/t-keylist-sig.c b/tests/gpg/t-keylist-sig.c
index 390ff41..250214c 100644
--- a/tests/gpg/t-keylist-sig.c
+++ b/tests/gpg/t-keylist-sig.c
@@ -167,7 +167,7 @@ main (void)
key->chain_id);
exit (1);
}
- if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
+ if (key->owner_trust != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Key has unexpected owner trust: %i\n",
key->owner_trust);
@@ -349,7 +349,7 @@ main (void)
fprintf (stderr, "First user ID unexpectedly invalid\n");
exit (1);
}
- if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
+ if (key->uids && key->uids->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
key->uids->validity);
@@ -435,7 +435,7 @@ main (void)
exit (1);
}
if (key->uids && key->uids->next
- && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
key->uids->next->validity);
@@ -526,7 +526,7 @@ main (void)
exit (1);
}
if (key->uids && key->uids->next && key->uids->next->next
- && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->next->validity != GPGME_VALIDITY_ULTIMATE)
{
fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
key->uids->next->next->validity);
diff --git a/tests/gpg/t-keylist.c b/tests/gpg/t-keylist.c
index 3b4fea1..fc9fc1b 100644
--- a/tests/gpg/t-keylist.c
+++ b/tests/gpg/t-keylist.c
@@ -43,8 +43,10 @@ struct key_info_s
const char *name;
const char *comment;
const char *email;
+ gpgme_validity_t validity;
} uid[3];
int n_subkeys;
+ gpgme_validity_t owner_trust;
void (*misc_check)(struct key_info_s *keyinfo, gpgme_key_t key);
};
@@ -56,9 +58,12 @@ static void check_whisky (struct key_info_s *keyinfo, gpgme_key_t key);
struct key_info_s keys[] =
{
{ "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
- { { "Alfa Test", "demo key", "alfa@example.net" },
- { "Alpha Test", "demo key", "alpha@example.net" },
- { "Alice", "demo key", NULL } }, 1 },
+ { { "Alfa Test", "demo key", "alfa@example.net",
+ GPGME_VALIDITY_ULTIMATE },
+ { "Alpha Test", "demo key", "alpha@example.net",
+ GPGME_VALIDITY_ULTIMATE },
+ { "Alice", "demo key", NULL, GPGME_VALIDITY_ULTIMATE } }, 1,
+ GPGME_VALIDITY_ULTIMATE },
{ "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F",
{ { "Bob", "demo key", NULL },
{ "Bravo Test", "demo key", "bravo@example.net" } }, 1 },
@@ -107,7 +112,7 @@ struct key_info_s keys[] =
{ { "Victor Test", "demo key", "victor@example.org" } }, 1 },
{ "E8D6C90B683B0982BD557A99DEF0F7B8EC67DBDE", "D7FBB421FD6E27F6",
{ { "Whisky Test", "demo key", "whisky@example.net" } }, 3,
- check_whisky },
+ GPGME_VALIDITY_UNKNOWN, check_whisky },
{ "04C1DF62EFA0EBB00519B06A8979A6C5567FB34A", "5CC6F87F41E408BE",
{ { "XRay Test", "demo key", "xray@example.net" } }, 1 },
{ "ED9B316F78644A58D042655A9EEF34CD4B11B25F", "5ADFD255F7B080AD",
@@ -219,10 +224,10 @@ main (int argc, char **argv)
key->chain_id);
exit (1);
}
- if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
+ if (key->owner_trust != keys[i].owner_trust)
{
- fprintf (stderr, "Key has unexpected owner trust: %i\n",
- key->owner_trust);
+ fprintf (stderr, "Key `%s' has unexpected owner trust: %i\n",
+ keys[i].uid[0].name, key->owner_trust);
exit (1);
}
@@ -426,10 +431,10 @@ main (int argc, char **argv)
fprintf (stderr, "First user ID unexpectedly invalid\n");
exit (1);
}
- if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
+ if (key->uids && key->uids->validity != keys[i].uid[0].validity)
{
- fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
- key->uids->validity);
+ fprintf (stderr, "First user ID `%s' has unexpectedly validity: %i\n",
+ key->uids->name, key->uids->validity);
exit (1);
}
if (key->uids && key->uids->signatures)
@@ -469,7 +474,7 @@ main (int argc, char **argv)
exit (1);
}
if (key->uids && key->uids->next
- && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->validity != keys[i].uid[1].validity)
{
fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
key->uids->next->validity);
@@ -514,7 +519,7 @@ main (int argc, char **argv)
exit (1);
}
if (key->uids && key->uids->next && key->uids->next->next
- && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
+ && key->uids->next->next->validity != keys[i].uid[2].validity)
{
fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
key->uids->next->next->validity);
diff --git a/tests/gpg/t-support.h b/tests/gpg/t-support.h
index b3f54e5..0c1a73e 100644
--- a/tests/gpg/t-support.h
+++ b/tests/gpg/t-support.h
@@ -32,6 +32,10 @@
#include <gpgme.h>
+#ifndef PGM
+#define PGM "unknown program; define PGM before including t-support.h"
+#endif
+
#ifndef DIM
#define DIM(v) (sizeof(v)/sizeof((v)[0]))
#endif
@@ -99,6 +103,46 @@ print_data (gpgme_data_t dh)
fwrite (buf, ret, 1, stdout);
if (ret < 0)
fail_if_err (gpgme_err_code_from_errno (errno));
+#undef BUF_SIZE
+}
+
+
+void
+check_data (gpgme_data_t dh, const char *expected)
+{
+#define BUF_SIZE 512
+ char buf[BUF_SIZE + 1];
+ int expectedlen;
+ int ret;
+
+ if (!expected)
+ {
+ fprintf (stderr, "%s:%i: Expected data must not be NULL.\n",
+ PGM, __LINE__);
+ exit (1);
+ }
+ expectedlen = strlen (expected);
+ if (expectedlen > BUF_SIZE)
+ {
+ fprintf (stderr, "%s:%i: Size of expected data (%d) is greater than "
+ "BUF_SIZE (%d).\n", PGM, __LINE__, expectedlen, BUF_SIZE);
+ exit (1);
+ }
+
+ ret = gpgme_data_seek (dh, 0, SEEK_SET);
+ if (ret)
+ fail_if_err (gpgme_err_code_from_errno (errno));
+ if ((ret = gpgme_data_read (dh, buf, BUF_SIZE)) < 0)
+ fail_if_err (gpgme_err_code_from_errno (errno));
+ buf[ret] = 0;
+ if (ret != expectedlen || strncmp (buf, expected, expectedlen))
+ {
+ fprintf (stderr, "%s:%i: Got unexpected data\n", PGM, __LINE__);
+ fprintf (stderr, "Expected data:\n---\n%s---\n", expected);
+ fprintf (stderr, "Actual data:\n---\n%s---\n", buf);
+ exit (1);
+ }
+#undef BUF_SIZE
}
diff --git a/tests/gpg/t-verify.c b/tests/gpg/t-verify.c
index 695a994..84afa9a 100644
--- a/tests/gpg/t-verify.c
+++ b/tests/gpg/t-verify.c
@@ -86,6 +86,44 @@ static const char double_plaintext_sig[] =
"=6+AK\n"
"-----END PGP MESSAGE-----\n";
+/* A clear-signed message followed by a public key block. */
+static const char clearsigned_plus_key_block[] =
+"-----BEGIN PGP SIGNED MESSAGE-----\n"
+"Hash: SHA256\n"
+"\n"
+"bar\n"
+"-----BEGIN PGP SIGNATURE-----\n"
+"\n"
+"iQEzBAEBCAAdFiEE0MFuEqOl54V/b8HTD1vkKiPJHOMFAmTBMWMACgkQD1vkKiPJ\n"
+"HONzdQf/aty0AjMuKRbI7s9oN2fTMzKglnopBBsJH/ozravsHt3NzW6qeI+JN8Ga\n"
+"yMgwu7991di2q3+dHzLylL/uLxomh3TQnQTsak3kfzVJt8fKgY3lpFZamgpGQlme\n"
+"r0xioe5ylaIipItt06XIeZMnwrS+dfDhAW1G6x98nSOCN+SlqmrPpVrf2+J3hLXq\n"
+"4oRZExYD3WIQAOl5a6LBJ7nKxal7Y+ZzLNKo1Fdv0BSeaClVXTeUFCivZiw0zcEI\n"
+"eguDK8fk7kx3MDuwQxV3+juWaMDCNNVV4QBIMZjXusv2i7vHkfTWrPy+m+CmkIJz\n"
+"MEHj/W7d30v2HqNYtrwOSmMhv1+wOg==\n"
+"=vlPl\n"
+"-----END PGP SIGNATURE-----\n"
+"-----BEGIN PGP PUBLIC KEY BLOCK-----\n"
+"\n"
+"mDMEYg5XKRYJKwYBBAHaRw8BAQdAoiviwSeMJbcbE8t9mHgrSqgT5F4LQyLzUckU\n"
+"E6Sx5aiIgwQgFgoAKxYhBIHOfS+ZLzoe/uBZMa7qmxcSWxd7BQJiQaR2DR0BbGlu\n"
+"ZTEKbGluZTIACgkQruqbFxJbF3uT1wD/UzkNkMwK/kDHxT4xxwY6OeRZdeZauGtv\n"
+"vKnvcyM16V0A/0IEIlQmSKyp/OEFZy45VBunJZJkReRMS9pA0Y+ouBgKtB9KYW5l\n"
+"IERvZSA8amFuZS5kb2VAZXhhbXBsZS5uZXQ+iJoEExYKAEICGwMFCQAosgcFCwkI\n"
+"BwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAFiEEgc59L5kvOh7+4FkxruqbFxJbF3sF\n"
+"AmLyVRUACgkQruqbFxJbF3s/cgEAqwbErDdIhKudkFrk8wY6VkNBDf4jf2SGyDz1\n"
+"BL9pJt0A/0IkhlpHU6rtqylJuuCFpLmKbFlXdXdrCoEwisFrY8QJtAZibGFibGGI\n"
+"nAQTFgoARAIbAwUJACiyBwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgBYhBIHO\n"
+"fS+ZLzoe/uBZMa7qmxcSWxd7BQJi8lUWAhkBAAoJEK7qmxcSWxd7H+UBAP/y1phn\n"
+"ojnKvF72jm7uaLN+mTVKjt71nxPi8TvBASC1AP0bt5vAiAqlCOYACvm2mg8pw18f\n"
+"1YXXOBkcbTLUimkyD7g4BGIOVykSCisGAQQBl1UBBQEBB0DkecMMBdYTabaTqAbV\n"
+"GlWplsf68h+uv8N78t0bEjVmGAMBCAeIfgQYFgoAJhYhBIHOfS+ZLzoe/uBZMa7q\n"
+"mxcSWxd7BQJiDlcpAhsMBQkAKLIHAAoJEK7qmxcSWxd7GgsBAMvJUPcHIs4dHlqS\n"
+"o2P7NfJvkFpqFUeGaP8upALUiijRAQDz13cloc0StTGn5uWPZCGQkzn8MzX+yiPZ\n"
+"mxnjHfafCg==\n"
+"=+jHe\n"
+"-----END PGP PUBLIC KEY BLOCK-----\n";
+
@@ -94,7 +132,7 @@ static const char double_plaintext_sig[] =
static void
check_result (gpgme_verify_result_t result, int no_of_sigs, int skip_sigs,
unsigned int summary, const char *fpr,
- gpgme_error_t status, int notation)
+ gpgme_error_t status, int notation, int validity)
{
gpgme_signature_t sig;
int n;
@@ -206,10 +244,11 @@ check_result (gpgme_verify_result_t result, int no_of_sigs, int skip_sigs,
PGM, __LINE__, skip_sigs);
exit (1);
}
- if (sig->validity != GPGME_VALIDITY_UNKNOWN)
+ if (sig->validity != validity)
{
- fprintf (stderr, "%s:%i:sig-%d: Unexpected validity: %i\n",
- PGM, __LINE__, skip_sigs, sig->validity);
+ fprintf (stderr, "%s:%i:sig-%d: Unexpected validity: "
+ "want=%i have=%i\n",
+ PGM, __LINE__, skip_sigs, validity, sig->validity);
exit (1);
}
if (gpgme_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)
@@ -247,8 +286,9 @@ main (int argc, char *argv[])
err = gpgme_op_verify (ctx, sig, text, NULL);
fail_if_err (err);
result = gpgme_op_verify_result (ctx);
- check_result (result, 1, 0, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
- GPG_ERR_NO_ERROR, 1);
+ check_result (result, 1, 0, GPGME_SIGSUM_VALID|GPGME_SIGSUM_GREEN,
+ "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ GPG_ERR_NO_ERROR, 1, GPGME_VALIDITY_FULL);
/* Checking a manipulated message. */
gpgme_data_release (text);
@@ -259,9 +299,9 @@ main (int argc, char *argv[])
fail_if_err (err);
result = gpgme_op_verify_result (ctx);
check_result (result, 1, 0, GPGME_SIGSUM_RED, "2D727CC768697734",
- GPG_ERR_BAD_SIGNATURE, 0);
+ GPG_ERR_BAD_SIGNATURE, 0, GPGME_VALIDITY_UNKNOWN);
- /* Checking a valid message. Bu that one has a second signature
+ /* Checking a valid message. But that one has a second signature
* made by an unknown key. */
gpgme_data_release (text);
gpgme_data_release (sig);
@@ -273,12 +313,12 @@ main (int argc, char *argv[])
err = gpgme_op_verify (ctx, sig, text, NULL);
fail_if_err (err);
result = gpgme_op_verify_result (ctx);
- check_result (result, 2, 0, 0,
+ check_result (result, 2, 0, GPGME_SIGSUM_VALID|GPGME_SIGSUM_GREEN,
"A0FF4590BB6122EDEF6E3C542D727CC768697734",
- GPG_ERR_NO_ERROR, 1);
+ GPG_ERR_NO_ERROR, 1, GPGME_VALIDITY_FULL);
check_result (result, 2, 1, GPGME_SIGSUM_KEY_MISSING,
"36EC2A70C6426EB0FCE5BB4DF91C98F049D4204C",
- GPG_ERR_NO_PUBKEY, 0);
+ GPG_ERR_NO_PUBKEY, 0, GPGME_VALIDITY_UNKNOWN);
/* Checking a normal signature. */
@@ -291,8 +331,9 @@ main (int argc, char *argv[])
err = gpgme_op_verify (ctx, sig, NULL, text);
fail_if_err (err);
result = gpgme_op_verify_result (ctx);
- check_result (result, 1, 0, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
- GPG_ERR_NO_ERROR, 0);
+ check_result (result, 1, 0, GPGME_SIGSUM_VALID|GPGME_SIGSUM_GREEN,
+ "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ GPG_ERR_NO_ERROR, 0, GPGME_VALIDITY_FULL);
/* Checking an invalid message. */
@@ -358,6 +399,22 @@ main (int argc, char *argv[])
exit (1);
}
+ gpgme_data_release (sig);
+ gpgme_data_release (text);
+
+ /* Checking clear-signed message followed by public key block. */
+ err = gpgme_data_new_from_mem (&sig, clearsigned_plus_key_block,
+ strlen (clearsigned_plus_key_block), 0);
+ fail_if_err (err);
+ err = gpgme_data_new (&text);
+ fail_if_err (err);
+ err = gpgme_op_verify (ctx, sig, NULL, text);
+ fail_if_err (err);
+ result = gpgme_op_verify_result (ctx);
+ check_result (result, 1, 0, GPGME_SIGSUM_KEY_MISSING,
+ "D0C16E12A3A5E7857F6FC1D30F5BE42A23C91CE3",
+ GPG_ERR_NO_PUBKEY, 0, GPGME_VALIDITY_UNKNOWN);
+ check_data (text, "bar\n");
gpgme_data_release (sig);
gpgme_data_release (text);