diff options
| author | Marcus Brinkmann <[email protected]> | 2005-10-01 02:33:35 +0000 | 
|---|---|---|
| committer | Marcus Brinkmann <[email protected]> | 2005-10-01 02:33:35 +0000 | 
| commit | b3304042aafdfa2adf4b332a6629182b12a089e1 (patch) | |
| tree | cf1794b1fc77c59557abf5219651e57ab21bf42e /tests | |
| parent | doc/ (diff) | |
| download | gpgme-b3304042aafdfa2adf4b332a6629182b12a089e1.tar.gz gpgme-b3304042aafdfa2adf4b332a6629182b12a089e1.zip  | |
doc/
2005-10-01  Marcus Brinkmann  <[email protected]>
	* gpgme.texi (Signature Notation Data): New section.
	(Verify): Added more about the notation data structure.
gpgme/
2005-10-01  Marcus Brinkmann  <[email protected]>
	* gpgme.def: Add gpgme_data_set_file_name,
	gpgme_data_get_file_name, gpgme_sig_notation_clear,
	gpgme_sig_notation_add and gpgme_sig_notation_get.
	* libgpgme.vers: Add gpgme_sig_notation_clear,
	gpgme_sig_notation_add and gpgme_sig_notation_get.
	* Makefile.am (libgpgme_real_la_SOURCES): Add sig-notation.c.
	* context.h (struct gpgme_context): New field sig_notations.
	* gpgme.h (struct _gpgme_sig_notation): New member value_len and
	critical.
	(GPGME_SIG_NOTATION_CRITICAL): New symbol.
	(gpgme_sig_notation_flags_t): New type.
	(gpgme_sig_notation_add, gpgme_sig_notation_clear,
	gpgme_sig_notation_get): New prototypes.
	* ops.h (_gpgme_sig_notation_create, _gpgme_sig_notation_free):
	New prototypes.
	* sig-notation.c (_gpgme_sig_notation_free): New file.
	* verify.c (parse_notation): Use support functions.
	(release_op_data): Likewise.
	* rungpg.c (append_args_from_sig_notations): New function.
	(gpg_encrypt_sign, gpg_sign): Call it.
tests/
2005-10-01  Marcus Brinkmann  <[email protected]>
	* gpg/Makefile.am (TESTS): Add t-sig-notation.
	* gpg/t-sig-notation.c (check_result): New file.
	* gpg/t-verify.c (check_result): Also check the length of the
	notation data.
	* gpg/gpg.conf: New file.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ChangeLog | 8 | ||||
| -rw-r--r-- | tests/gpg/Makefile.am | 2 | ||||
| -rw-r--r-- | tests/gpg/gpg.conf | 27 | ||||
| -rw-r--r-- | tests/gpg/t-sig-notation.c | 166 | ||||
| -rw-r--r-- | tests/gpg/t-verify.c | 10 | 
5 files changed, 209 insertions, 4 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index 94645929..42d9e144 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2005-10-01  Marcus Brinkmann  <[email protected]> + +	* gpg/Makefile.am (TESTS): Add t-sig-notation. +	* gpg/t-sig-notation.c (check_result): New file. +	* gpg/t-verify.c (check_result): Also check the length of the +	notation data. +	* gpg/gpg.conf: New file. +  2005-09-30  Marcus Brinkmann  <[email protected]>  	* gpg/Makefile.am (TESTS): Add t-filename. diff --git a/tests/gpg/Makefile.am b/tests/gpg/Makefile.am index 0fa03492..e946eafd 100644 --- a/tests/gpg/Makefile.am +++ b/tests/gpg/Makefile.am @@ -26,7 +26,7 @@ TESTS_ENVIRONMENT = GNUPGHOME=. GPG_AGENT_INFO=  # The keylist tests must come after the import and the edit test.  noinst_HEADERS = t-support.h  TESTS = t-encrypt t-encrypt-sym t-encrypt-sign t-sign t-signers	\ -	t-decrypt t-verify t-decrypt-verify \ +	t-decrypt t-verify t-decrypt-verify t-sig-notation \  	t-export t-import t-trustlist t-eventloop t-edit \  	t-keylist t-keylist-sig t-thread1 t-wait t-encrypt-large \  	t-file-name diff --git a/tests/gpg/gpg.conf b/tests/gpg/gpg.conf new file mode 100644 index 00000000..f1196a1e --- /dev/null +++ b/tests/gpg/gpg.conf @@ -0,0 +1,27 @@ +# Options for GnuPG +# Copyright 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Unless you specify which option file to use (with the command line +# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf +# by default. +# +# An options file can contain any long options which are available in +# GnuPG. If the first non white space character of a line is a '#', +# this line is ignored.  Empty lines are also ignored. +# +# See the man page for a list of options. + +# By default GnuPG creates version 3 signatures for data files.  This +# is not strictly OpenPGP compliant but PGP 6 and most versions of PGP +# 7 require them.  To disable this behavior, you may use this option +# or --openpgp. + +no-force-v3-sigs diff --git a/tests/gpg/t-sig-notation.c b/tests/gpg/t-sig-notation.c new file mode 100644 index 00000000..a9014733 --- /dev/null +++ b/tests/gpg/t-sig-notation.c @@ -0,0 +1,166 @@ +/* t-sig-notation.c - Regression test. +   Copyright (C) 2005 g10 Code GmbH + +   This file is part of GPGME. +  +   GPGME is free software; you can redistribute it and/or modify it +   under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of +   the License, or (at your option) any later version. +    +   GPGME is distributed in the hope that it will be useful, but +   WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. +    +   You should have received a copy of the GNU Lesser General Public +   License along with this program; if not, write to the Free Software +   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +   02111-1307, USA.  */ + +/* We need to include config.h so that we know whether we are building +   with large file system (LFS) support. */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <gpgme.h> + +#include "t-support.h" + + +static struct { +  const char *name; +  const char *value; +  gpgme_sig_notation_flags_t flags; +  int seen; +} expected_notations[] = {  +  { "laughing@me", +    "Just Squeeze Me", +    GPGME_SIG_NOTATION_HUMAN_READABLE }, +  { "leave@home", +    "Right Now", +    GPGME_SIG_NOTATION_HUMAN_READABLE | GPGME_SIG_NOTATION_CRITICAL }, +  { NULL,  +    "http://www.gnu.org/policy/", +    0 } +}; + +static void +check_result (gpgme_verify_result_t result) +{ +  int i; +  gpgme_sig_notation_t r; +   +  gpgme_signature_t sig; + +  sig = result->signatures; +  if (!sig || sig->next) +    { +      fprintf (stderr, "%s:%i: Unexpected number of signatures\n", +	       __FILE__, __LINE__); +      exit (1); +    } + +  for (i=0; i < DIM(expected_notations); i++ ) +    expected_notations[i].seen = 0; +   +  for (r = result->signatures->notations; r; r = r->next) +    { +      int any = 0; +      for (i=0; i < DIM(expected_notations); i++) +	{ +	  if ( ((r->name && expected_notations[i].name +		 && !strcmp (r->name, expected_notations[i].name) +		 && r->name_len +		 == strlen (expected_notations[i].name)) +		|| (!r->name && !expected_notations[i].name +		    && r->name_len == 0)) +	       && r->value +	       && !strcmp (r->value, expected_notations[i].value) +	       && r->value_len == strlen (expected_notations[i].value) +	       && r->flags +	       == (expected_notations[i].flags & ~GPGME_SIG_NOTATION_CRITICAL) +	       && r->human_readable +	       == !!(r->flags & GPGME_SIG_NOTATION_HUMAN_READABLE) +	       && r->critical == 0) +	    { +	      expected_notations[i].seen++; +	      any++; +	    } +	} +      if (!any) +	{ +	  fprintf (stderr, "%s:%i: Unexpected notation data\n", +		   __FILE__, __LINE__); +	  exit (1); +	} +    } +  for (i=0; i < DIM(expected_notations); i++ ) +    { +      if (expected_notations[i].seen != 1) +	{ +	  fprintf (stderr, "%s:%i: Missing or duplicate notation data\n", +		   __FILE__, __LINE__); +	  exit (1); +	} +    } +} + + +int  +main (int argc, char *argv[]) +{ +  gpgme_ctx_t ctx; +  gpgme_error_t err; +  gpgme_data_t in, out; +  gpgme_verify_result_t result; +  char *agent_info; +  int i; + +  init_gpgme (GPGME_PROTOCOL_OpenPGP); + +  err = gpgme_new (&ctx); +  fail_if_err (err); + +  agent_info = getenv ("GPG_AGENT_INFO"); +  if (!(agent_info && strchr (agent_info, ':'))) +    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL); + +  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0); +  fail_if_err (err); +  err = gpgme_data_new (&out); +  fail_if_err (err); + +  for (i = 0; i < sizeof (expected_notations) / sizeof (expected_notations[0]); +       i++) +    { +      err = gpgme_sig_notation_add (ctx, expected_notations[i].name, +				    expected_notations[i].value, +				    expected_notations[i].flags); +      fail_if_err (err); +    } +   +  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_NORMAL); +  fail_if_err (err); + +  gpgme_data_release (in); +  err = gpgme_data_new (&in); +  fail_if_err (err); + +  gpgme_data_seek (out, 0, SEEK_SET); + +  err = gpgme_op_verify (ctx, out, NULL, in); +  fail_if_err (err); +  result = gpgme_op_verify_result (ctx); +  check_result (result); + +  gpgme_data_release (in); +  gpgme_data_release (out); +  gpgme_release (ctx); +  return 0; +} diff --git a/tests/gpg/t-verify.c b/tests/gpg/t-verify.c index 1b63829c..22f04773 100644 --- a/tests/gpg/t-verify.c +++ b/tests/gpg/t-verify.c @@ -136,10 +136,14 @@ check_result (gpgme_verify_result_t result, unsigned int summary, char *fpr,            for (i=0; i < DIM(expected_notations); i++)              {                if ( ((r->name && expected_notations[i].name -                     && !strcmp (r->name, expected_notations[i].name)) -                    || (!r->name && !expected_notations[i].name)) +                     && !strcmp (r->name, expected_notations[i].name) +		     && r->name_len +		     == strlen (expected_notations[i].name)) +                    || (!r->name && !expected_notations[i].name +			&& r->name_len == 0))                     && r->value -                   && !strcmp (r->value, expected_notations[i].value)) +                   && !strcmp (r->value, expected_notations[i].value) +		   && r->value_len == strlen (expected_notations[i].value))                  {                    expected_notations[i].seen++;                    any++;  | 
