summaryrefslogtreecommitdiff
path: root/tests/gpg/t-verify.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gpg/t-verify.c')
-rw-r--r--tests/gpg/t-verify.c83
1 files changed, 70 insertions, 13 deletions
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);