diff options
Diffstat (limited to 'tests/gpg')
-rw-r--r-- | tests/gpg/Makefile.am | 11 | ||||
-rw-r--r-- | tests/gpg/Makefile.in | 42 | ||||
-rw-r--r-- | tests/gpg/ownertrust.txt | 3 | ||||
-rw-r--r-- | tests/gpg/t-decrypt-verify.c | 44 | ||||
-rw-r--r-- | tests/gpg/t-edit-sign.c | 59 | ||||
-rw-r--r-- | tests/gpg/t-import.c | 2 | ||||
-rw-r--r-- | tests/gpg/t-keylist-secret-sig.c | 8 | ||||
-rw-r--r-- | tests/gpg/t-keylist-sig.c | 8 | ||||
-rw-r--r-- | tests/gpg/t-keylist.c | 29 | ||||
-rw-r--r-- | tests/gpg/t-support.h | 44 | ||||
-rw-r--r-- | tests/gpg/t-verify.c | 83 |
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); |