diff options
| author | Marcus Brinkmann <[email protected]> | 2003-04-29 20:51:25 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2003-04-29 20:51:25 +0000 | 
| commit | 26ec59fdbd2535ff20eaeedab559b8648505c8ca (patch) | |
| tree | f2c7d77d544711717c0c01a971ae12c2a6cd7f23 /tests/gpgsm/t-verify.c | |
| parent | 2003-04-29 Marcus Brinkmann <[email protected]> (diff) | |
| download | gpgme-26ec59fdbd2535ff20eaeedab559b8648505c8ca.tar.gz gpgme-26ec59fdbd2535ff20eaeedab559b8648505c8ca.zip | |
2003-04-29  Marcus Brinkmann  <[email protected]>
	* gpg/t-verify.c (main): Rewritten.
	* gpg/t-decrypt-verify.c: Rewritten.
	* gpgsm/t-verify.c (main): Rewritten.
Diffstat (limited to 'tests/gpgsm/t-verify.c')
| -rw-r--r-- | tests/gpgsm/t-verify.c | 305 | 
1 files changed, 102 insertions, 203 deletions
| diff --git a/tests/gpgsm/t-verify.c b/tests/gpgsm/t-verify.c index 282cf2b8..48e0ce96 100644 --- a/tests/gpgsm/t-verify.c +++ b/tests/gpgsm/t-verify.c @@ -1,6 +1,6 @@ -/* t-verify.c  - regression test +/* t-verify.c - Regression test.     Copyright (C) 2000 Werner Koch (dd9jn) -   Copyright (C) 2001, 2002 g10 Code GmbH +   Copyright (C) 2001, 2002, 2003 g10 Code GmbH     This file is part of GPGME. @@ -18,13 +18,26 @@     along with GPGME; if not, write to the Free Software Foundation,     Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */ -#include <stdio.h>  #include <stdlib.h> +#include <stdio.h>  #include <string.h> -#include <assert.h>  #include <gpgme.h> + +#define fail_if_err(err)					\ +  do								\ +    {								\ +      if (err)							\ +        {							\ +          fprintf (stderr, "%s:%d: GpgmeError %s\n",		\ +                   __FILE__, __LINE__, gpgme_strerror (err));   \ +          exit (1);						\ +        }							\ +    }								\ +  while (0) + +  static const char test_text1[] = "Hallo Leute!\n";  static const char test_text1f[]= "Hallo Leute?\n";  static const char test_sig1[] = @@ -39,217 +52,103 @@ static const char test_sig1[] =  "MYdRclgjObCcoilA8fZ13VR4DiMJVFCxJL4qVWI=\n"  "-----END CMS OBJECT-----\n"; -#define fail_if_err(a) do { if(a) {                                       \ -                               fprintf (stderr, "%s:%d: GpgmeError %s\n", \ -                                __FILE__, __LINE__, gpgme_strerror(a));   \ -                                exit (1); }                               \ -                             } while(0) - -static const char * -status_string (GpgmeSigStat status) +static void +check_result (GpgmeVerifyResult result, int summary, char *fpr, +	      GpgmeError status, GpgmeValidity validity)  { -    const char *s = "?"; +  GpgmeSignature sig; -    switch ( status ) { -      case GPGME_SIG_STAT_NONE: -        s = "None"; -        break; -      case GPGME_SIG_STAT_NOSIG: -        s = "No Signature"; -        break; -      case GPGME_SIG_STAT_GOOD: -        s = "Good"; -        break; -      case GPGME_SIG_STAT_GOOD_EXP: -        s = "Good but expired"; -        break; -      case GPGME_SIG_STAT_GOOD_EXPKEY: -        s = "Good but key exipired"; -        break; -      case GPGME_SIG_STAT_BAD: -        s = "Bad"; -        break; -      case GPGME_SIG_STAT_NOKEY: -        s = "No Key"; -        break; -      case GPGME_SIG_STAT_ERROR: -        s = "Error"; -        break; -      case GPGME_SIG_STAT_DIFF: -        s = "More than one signature"; -        break; +  sig = result->signatures; +  if (!sig || sig->next) +    { +      fprintf (stderr, "%s:%i: Unexpected number of signatures\n", +	       __FILE__, __LINE__); +      exit (1);      } -    return s; -} - -static const char * -validity_string (GpgmeValidity val) -{ -  const char *s = "?"; - -  switch (val) +  if (sig->summary != summary)      { -    case GPGME_VALIDITY_UNKNOWN: s = "unknown"; break; -    case GPGME_VALIDITY_NEVER:   s = "not trusted"; break; -    case GPGME_VALIDITY_MARGINAL:s = "marginal trusted"; break; -    case GPGME_VALIDITY_FULL:   s = "fully trusted"; break; -    case GPGME_VALIDITY_UNDEFINED: -    case GPGME_VALIDITY_ULTIMATE: -      break; +      fprintf (stderr, "%s:%i: Unexpected signature summary: 0x%x\n", +	       __FILE__, __LINE__, sig->summary); +      exit (1);      } -  return s; -} - - -static void -print_sig_stat ( GpgmeCtx ctx, GpgmeSigStat status ) -{ -  const char *s; -  time_t created; -  int idx; -  GpgmeKey key; -   -  printf ("Verification Status: %s\n", status_string (status)); -     -  for (idx=0; (s=gpgme_get_sig_status (ctx, idx, &status, &created)); idx++ ) +  if (strcmp (sig->fpr, fpr))      { -      unsigned long sum; - -      printf ("sig %d: created: %lu expires: %lu status: %s\n", -              idx, (unsigned long)created,  -              gpgme_get_sig_ulong_attr (ctx, idx, GPGME_ATTR_EXPIRE, 0), -              status_string(status) ); -      printf ("sig %d: fpr/keyid: `%s' exterr: `%s' validity: %s\n", -              idx, s, -                gpgme_get_sig_string_attr (ctx, idx, GPGME_ATTR_ERRTOK, 0), -              validity_string (gpgme_get_sig_ulong_attr -                               (ctx, idx, GPGME_ATTR_VALIDITY, 0)) ); -       -      sum = gpgme_get_sig_ulong_attr (ctx, idx, GPGME_ATTR_SIG_SUMMARY, 0); -      fputs ("summary:", stdout); -      if ((sum & GPGME_SIGSUM_VALID)) -        fputs (" valid", stdout); -      if ((sum & GPGME_SIGSUM_GREEN)) -        fputs (" green", stdout); -      if ((sum & GPGME_SIGSUM_RED)) -        fputs (" red", stdout); -      if ((sum & GPGME_SIGSUM_KEY_REVOKED)) -        fputs (" keyRevoked", stdout); -      if ((sum & GPGME_SIGSUM_KEY_EXPIRED)) -        fputs (" keyExpired", stdout); -      if ((sum & GPGME_SIGSUM_SIG_EXPIRED)) -        fputs (" sigExpired", stdout); -      if ((sum & GPGME_SIGSUM_KEY_MISSING)) -        fputs (" keyMissing", stdout); -      if ((sum & GPGME_SIGSUM_CRL_MISSING)) -        fputs (" crlMissing", stdout); -      if ((sum & GPGME_SIGSUM_CRL_TOO_OLD)) -        fputs (" crlTooOld", stdout); -      if ((sum & GPGME_SIGSUM_BAD_POLICY)) -        fputs (" badPolicy", stdout); -      if ((sum & GPGME_SIGSUM_SYS_ERROR)) -        fputs (" sysError", stdout); -      putchar ('\n'); - -      if ( !gpgme_get_sig_key (ctx, idx, &key) ) -        { -          char *p = gpgme_key_get_as_xml ( key ); -          printf ("sig %d: key object:\n%s\n", idx, p ); -          free (p); -          gpgme_key_release (key); -      } +      fprintf (stderr, "%s:%i: Unexpected fingerprint: %s\n", +	       __FILE__, __LINE__, sig->fpr); +      exit (1); +    } +  if (sig->status != status) +    { +      fprintf (stderr, "%s:%i: Unexpected signature status: %s\n", +	       __FILE__, __LINE__, gpgme_strerror (sig->status)); +      exit (1); +    } +  if (sig->notations) +    { +      fprintf (stderr, "%s:%i: Unexpected notation data\n", +	       __FILE__, __LINE__); +      exit (1); +    } +  if (sig->wrong_key_usage) +    { +      fprintf (stderr, "%s:%i: Unexpectedly wrong key usage\n", +	       __FILE__, __LINE__); +      exit (1); +    } +  if (sig->validity != validity) +    { +      fprintf (stderr, "%s:%i: Unexpected validity: %i\n", +	       __FILE__, __LINE__, sig->validity); +      exit (1); +    } +  if (sig->validity_reason != GPGME_No_Error) +    { +      fprintf (stderr, "%s:%i: Unexpected validity reason: %s\n", +	       __FILE__, __LINE__, gpgme_strerror (sig->validity_reason)); +      exit (1);      }  } +  int  -main (int argc, char **argv ) +main (int argc, char **argv)  { -    GpgmeCtx ctx; -    GpgmeError err; -    GpgmeData sig, text; -    GpgmeSigStat status; -    GpgmeVerifyResult result; -    GpgmeSigNotation notation; -    char *nota; -    int n = 0; - -    err = gpgme_new (&ctx); -    fail_if_err (err); -    gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS); - -  do { -    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, strlen (test_sig1), 0 ); -    fail_if_err (err); - -    puts ("checking a valid message:\n"); -    err = gpgme_op_verify (ctx, sig, text, NULL); -    fail_if_err (err); -    if (!gpgme_get_sig_status (ctx, 0, &status, NULL)) -      { -	fprintf (stderr, "%s:%d: No signature\n", __FILE__, __LINE__); -	exit (1); -      } -    print_sig_stat (ctx, status); - -    result = gpgme_op_verify_result (ctx); -    notation = result->signatures->notations; -    if (notation) -      { -	printf ("---Begin Notation---\n"); -	while (notation) -	  { -	    if (notation->name) -	      printf ("%s: %s\n", notation->name, notation->value); -	    else -	      printf ("Policy URL: %s\n", notation->value); -	    notation = notation->next; -	  } -	printf ("---End Notation---\n"); -      }       - -    puts ("checking a manipulated message:\n"); -    gpgme_data_release (text); -    err = gpgme_data_new_from_mem ( &text, -                                    test_text1f, strlen (test_text1f), 0); -    fail_if_err (err); -    gpgme_data_rewind ( sig ); -    err = gpgme_op_verify (ctx, sig, text, NULL); -    fail_if_err (err); -    if (!gpgme_get_sig_status (ctx, 0, &status, NULL)) -      { -	fprintf (stderr, "%s:%d: No signature\n", __FILE__, __LINE__); -	exit (1); -      } -    print_sig_stat (ctx, status); - -    result = gpgme_op_verify_result (ctx); -    notation = result->signatures->notations; -    if (notation) -      { -	printf ("---Begin Notation---\n"); -	while (notation) -	  { -	    if (notation->name) -	      printf ("%s: %s\n", notation->name, notation->value); -	    else -	      printf ("Policy URL: %s\n", notation->value); -	    notation = notation->next; -	  } -	printf ("---End Notation---\n"); -      } - -    gpgme_data_release (sig); -    gpgme_data_release (text); -     -  } while ( argc > 1 && !strcmp( argv[1], "--loop" ) && ++n < 20 ); -      gpgme_release (ctx); -     -    return 0; +  GpgmeCtx ctx; +  GpgmeError err; +  GpgmeData sig, text; +  GpgmeVerifyResult result; + +  err = gpgme_new (&ctx); +  fail_if_err (err); +  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS); +   +  /* Checking a valid message.  */ +  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, strlen (test_sig1), 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, GPGME_SIGSUM_VALID | GPGME_SIGSUM_GREEN, +		"3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E", +		GPGME_No_Error, GPGME_VALIDITY_FULL); + +  /* Checking a manipulated message.  */ +  gpgme_data_release (text); +  err = gpgme_data_new_from_mem (&text, test_text1f, strlen (test_text1f), 0); +  fail_if_err (err); +  gpgme_data_rewind (sig); +  err = gpgme_op_verify (ctx, sig, text, NULL); +  fail_if_err (err); +  result = gpgme_op_verify_result (ctx); +  check_result (result, GPGME_SIGSUM_RED, +		"3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E", +		GPGME_Bad_Signature, GPGME_VALIDITY_UNKNOWN); + +  gpgme_release (ctx);   +  return 0;  } | 
