diff options
| author | Werner Koch <[email protected]> | 2018-04-12 13:39:20 +0000 | 
|---|---|---|
| committer | Werner Koch <[email protected]> | 2018-04-12 13:39:20 +0000 | 
| commit | bdf7cd2e28432cf0fa7e0758acdfee03d7bfd45f (patch) | |
| tree | 4838124195e4499792dffa86fcd5a6b1a10cf50c /tests/gpg/t-verify.c | |
| parent | core: Add new context flag "no-symkey-cache". (diff) | |
| download | gpgme-bdf7cd2e28432cf0fa7e0758acdfee03d7bfd45f.tar.gz gpgme-bdf7cd2e28432cf0fa7e0758acdfee03d7bfd45f.zip | |
tests: Add another check to gpg/t-verify.
* tests/gpg/t-verify.c (PGM): New.  Use it instead of __FILE__.
(test_sig1_plus_unknown_key): New test signature.
(check_result): Allow checking of several signatures.
(main): Check a signature with a know and an unknown key.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
| -rw-r--r-- | tests/gpg/t-verify.c | 136 | 
1 files changed, 84 insertions, 52 deletions
| diff --git a/tests/gpg/t-verify.c b/tests/gpg/t-verify.c index f955cc9d..ffc41eeb 100644 --- a/tests/gpg/t-verify.c +++ b/tests/gpg/t-verify.c @@ -31,31 +31,14 @@  #include <gpgme.h> +#define PGM "t-verify"  #include "t-support.h" +  static const char test_text1[] = "Just GNU it!\n";  static const char test_text1f[]= "Just GNU it?\n";  static const char test_sig1[] = -#if 0 -"-----BEGIN PGP SIGNATURE-----\n" -"\n" -"iEYEABECAAYFAjoKgjIACgkQLXJ8x2hpdzQMSwCeO/xUrhysZ7zJKPf/FyXA//u1\n" -"ZgIAn0204PBR7yxSdQx6CFxugstNqmRv\n" -"=yku6\n" -"-----END PGP SIGNATURE-----\n" -#elif 0 -"-----BEGIN PGP SIGNATURE-----\n" -"Version: GnuPG v1.0.4-2 (GNU/Linux)\n" -"Comment: For info see http://www.gnupg.org\n" -"\n" -"iJcEABECAFcFAjoS8/E1FIAAAAAACAAkZm9vYmFyLjF0aGlzIGlzIGEgbm90YXRp\n" -"b24gZGF0YSB3aXRoIDIgbGluZXMaGmh0dHA6Ly93d3cuZ3Uub3JnL3BvbGljeS8A\n" -"CgkQLXJ8x2hpdzQLyQCbBW/fgU8ZeWSlWPM1F8umHX17bAAAoIfSNDSp5zM85XcG\n" -"iwxMrf+u8v4r\n" -"=88Zo\n" -"-----END PGP SIGNATURE-----\n" -#elif 1  "-----BEGIN PGP SIGNATURE-----\n"  "\n"  "iN0EABECAJ0FAjoS+i9FFIAAAAAAAwA5YmFyw7bDpMO8w58gZGFzIHdhcmVuIFVt\n" @@ -64,9 +47,24 @@ static const char test_sig1[] =  "Oi8vd3d3Lmd1Lm9yZy9wb2xpY3kvAAoJEC1yfMdoaXc0JBIAoIiLlUsvpMDOyGEc\n"  "dADGKXF/Hcb+AKCJWPphZCphduxSvrzH0hgzHdeQaA==\n"  "=nts1\n" -"-----END PGP SIGNATURE-----\n" -#endif -; +"-----END PGP SIGNATURE-----\n"; + +/* The same as test_sig1 but with a second signature for which we do + * not have the public key (deleted after signature creation).  */ +static const char test_sig1_plus_unknown_key[] = +"-----BEGIN PGP SIGNATURE-----\n" +"\n" +"iN0EABECAJ0FAjoS+i9FFIAAAAAAAwA5YmFyw7bDpMO8w58gZGFzIHdhcmVuIFVt\n" +"bGF1dGUgdW5kIGpldHp0IGVpbiBwcm96ZW50JS1aZWljaGVuNRSAAAAAAAgAJGZv\n" +"b2Jhci4xdGhpcyBpcyBhIG5vdGF0aW9uIGRhdGEgd2l0aCAyIGxpbmVzGhpodHRw\n" +"Oi8vd3d3Lmd1Lm9yZy9wb2xpY3kvAAoJEC1yfMdoaXc0JBIAoIiLlUsvpMDOyGEc\n" +"dADGKXF/Hcb+AKCJWPphZCphduxSvrzH0hgzHdeQaIh1BAAWCAAdFiEENuwqcMZC\n" +"brD85btN+RyY8EnUIEwFAlrPR4cACgkQ+RyY8EnUIEyiuAEAm41LJTGUFDzhavRm\n" +"jNwqUZxGGOySduW+u/X1lEfV+MYA/2lJOo75rHtD1EG+tkFVWt4Ukj0rjhR132vZ\n" +"IOtrYAcG\n" +"=yYwZ\n" +"-----END PGP SIGNATURE-----\n"; +  static const char test_sig2[] =  "-----BEGIN PGP MESSAGE-----\n"  "\n" @@ -91,37 +89,51 @@ static const char double_plaintext_sig[] = +/* NO_OF_SIGS is the expected number of signatures.  SKIP_SKIPS is + * which of these signatures to check (0 based).  */  static void -check_result (gpgme_verify_result_t result, unsigned int summary, -              const char *fpr, +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_signature_t sig; +  int n;    sig = result->signatures; -  if (!sig || sig->next) +  for (n=0; sig; sig = sig->next) +    n++; +  if (n != no_of_sigs)      { -      fprintf (stderr, "%s:%i: Unexpected number of signatures\n", -	       __FILE__, __LINE__); +      fprintf (stderr, "%s:%i: Unexpected number of signatures" +               " (got %d expected  %d)\n", PGM, __LINE__, n, no_of_sigs);        exit (1);      } +  if (skip_sigs >= n) +    { +      fprintf (stderr, "%s:%i: oops SKIPP_SIGS to high\n", PGM, __LINE__); +      exit (1); +    } + +  for (n=0, sig = result->signatures; n < skip_sigs; sig = sig->next, n++) +    ; +    if (sig->summary != summary)      { -      fprintf (stderr, "%s:%i: Unexpected signature summary: " +      fprintf (stderr, "%s:%i:sig-%d: Unexpected signature summary: "                 "want=0x%x have=0x%x\n", -	       __FILE__, __LINE__, summary, sig->summary); +	       PGM, __LINE__, skip_sigs, summary, sig->summary);        exit (1);      }    if (strcmp (sig->fpr, fpr))      { -      fprintf (stderr, "%s:%i: Unexpected fingerprint: %s\n", -	       __FILE__, __LINE__, sig->fpr); +      fprintf (stderr, "%s:%i:sig-%d: Unexpected fingerprint: %s\n", +	       PGM, __LINE__, skip_sigs, sig->fpr);        exit (1);      }    if (gpgme_err_code (sig->status) != status)      { -      fprintf (stderr, "%s:%i: Unexpected signature status: %s\n", -	       __FILE__, __LINE__, gpgme_strerror (sig->status)); +      fprintf (stderr, "%s:%i:sig-%d: Unexpected signature status: %s\n", +	       PGM, __LINE__, skip_sigs, gpgme_strerror (sig->status));        exit (1);      }    if (notation) @@ -166,8 +178,8 @@ check_result (gpgme_verify_result_t result, unsigned int summary,              }            if (!any)              { -              fprintf (stderr, "%s:%i: Unexpected notation data\n", -                       __FILE__, __LINE__); +              fprintf (stderr, "%s:%i:sig-%d: Unexpected notation data\n", +                       PGM, __LINE__, skip_sigs);                exit (1);              }          } @@ -175,28 +187,30 @@ check_result (gpgme_verify_result_t result, unsigned int summary,          {            if (expected_notations[i].seen != 1)              { -              fprintf (stderr, "%s:%i: Missing or duplicate notation data\n", -                       __FILE__, __LINE__); +              fprintf (stderr, "%s:%i:sig-%d: " +                       "Missing or duplicate notation data\n", +                       PGM, __LINE__, skip_sigs);                exit (1);              }          }      }    if (sig->wrong_key_usage)      { -      fprintf (stderr, "%s:%i: Unexpectedly wrong key usage\n", -	       __FILE__, __LINE__); +      fprintf (stderr, "%s:%i:sig-%d: Unexpectedly wrong key usage\n", +	       PGM, __LINE__, skip_sigs);        exit (1);      }    if (sig->validity != GPGME_VALIDITY_UNKNOWN)      { -      fprintf (stderr, "%s:%i: Unexpected validity: %i\n", -	       __FILE__, __LINE__, sig->validity); +      fprintf (stderr, "%s:%i:sig-%d: Unexpected validity: %i\n", +	       PGM, __LINE__, skip_sigs, sig->validity);        exit (1);      }    if (gpgme_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)      { -      fprintf (stderr, "%s:%i: Unexpected validity reason: %s\n", -	       __FILE__, __LINE__, gpgme_strerror (sig->validity_reason)); +      fprintf (stderr, "%s:%i:sig-%d: Unexpected validity reason: %s\n", +	       PGM, __LINE__, skip_sigs, +               gpgme_strerror (sig->validity_reason));        exit (1);      }  } @@ -227,7 +241,7 @@ 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, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734", +  check_result (result, 1, 0, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",  		GPG_ERR_NO_ERROR, 1);    /* Checking a manipulated message.  */ @@ -238,9 +252,27 @@ 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, GPGME_SIGSUM_RED, "2D727CC768697734", +  check_result (result, 1, 0, GPGME_SIGSUM_RED, "2D727CC768697734",  		GPG_ERR_BAD_SIGNATURE, 0); +  /* Checking a valid message.  Bu that one has a second signature +   * made by an unknown key.  */ +  gpgme_data_release (text); +  gpgme_data_release (sig); +  err = gpgme_data_new_from_mem (&text, test_text1, strlen (test_text1), 0); +  fail_if_err (err); +  err = gpgme_data_new_from_mem (&sig, test_sig1_plus_unknown_key, +                                 strlen (test_sig1_plus_unknown_key), 0); +  fail_if_err (err); +  err = gpgme_op_verify (ctx, sig, text, NULL); +  fail_if_err (err); +  result = gpgme_op_verify_result (ctx); +  check_result (result, 2, 0, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734", +		GPG_ERR_NO_ERROR, 1); +  check_result (result, 2, 1, 0, "36EC2A70C6426EB0FCE5BB4DF91C98F049D4204C", +		GPG_ERR_NO_ERROR, 0); + +    /* Checking a normal signature.  */    gpgme_data_release (sig);    gpgme_data_release (text); @@ -251,7 +283,7 @@ 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, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734", +  check_result (result, 1, 0, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",  		GPG_ERR_NO_ERROR, 0); @@ -267,7 +299,7 @@ main (int argc, char *argv[])    if (gpgme_err_code (err) != GPG_ERR_BAD_DATA)      {        fprintf (stderr, "%s:%i: Double plaintext message not detected\n", -	       __FILE__, __LINE__); +	       PGM, __LINE__);        exit (1);      } @@ -278,7 +310,7 @@ main (int argc, char *argv[])    if (!s || strcmp (s, "[email protected]"))      {        fprintf (stderr, "%s:%i: gpgme_{set,get}_sender mismatch\n", -               __FILE__, __LINE__); +               PGM, __LINE__);        exit (1);      } @@ -288,7 +320,7 @@ main (int argc, char *argv[])    if (!s || strcmp (s, "[email protected]"))      {        fprintf (stderr, "%s:%i: gpgme_{set,get}_sender mismatch\n", -               __FILE__, __LINE__); +               PGM, __LINE__);        exit (1);      } @@ -298,7 +330,7 @@ main (int argc, char *argv[])    if (!s || strcmp (s, "[email protected]"))      {        fprintf (stderr, "%s:%i: gpgme_{set,get}_sender mismatch\n", -               __FILE__, __LINE__); +               PGM, __LINE__);        exit (1);      } @@ -306,7 +338,7 @@ main (int argc, char *argv[])    if (gpgme_err_code (err) != GPG_ERR_INV_VALUE)      {        fprintf (stderr, "%s:%i: gpgme_set_sender didn't detect bogus address\n", -               __FILE__, __LINE__); +               PGM, __LINE__);        exit (1);      }    /* (the former address should still be there.)  */ @@ -314,7 +346,7 @@ main (int argc, char *argv[])    if (!s || strcmp (s, "[email protected]"))      {        fprintf (stderr, "%s:%i: gpgme_{set,get}_sender mismatch\n", -               __FILE__, __LINE__); +               PGM, __LINE__);        exit (1);      } | 
