Blame tests/gpg/t-keylist-sig.c

Packit Service 672cf4
/* t-keylist-sig.c - Regression test.
Packit Service 6c01f9
   Copyright (C) 2000 Werner Koch (dd9jn)
Packit Service 6c01f9
   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
Packit Service 6c01f9
Packit Service 6c01f9
   This file is part of GPGME.
Packit Service 6c01f9
Packit Service 6c01f9
   GPGME is free software; you can redistribute it and/or modify it
Packit Service 6c01f9
   under the terms of the GNU Lesser General Public License as
Packit Service 6c01f9
   published by the Free Software Foundation; either version 2.1 of
Packit Service 6c01f9
   the License, or (at your option) any later version.
Packit Service 6c01f9
Packit Service 6c01f9
   GPGME is distributed in the hope that it will be useful, but
Packit Service 6c01f9
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 6c01f9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 6c01f9
   Lesser General Public License for more details.
Packit Service 6c01f9
Packit Service 6c01f9
   You should have received a copy of the GNU Lesser General Public
Packit Service 6c01f9
   License along with this program; if not, write to the Free Software
Packit Service 6c01f9
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
Packit Service 6c01f9
   02111-1307, USA.  */
Packit Service 672cf4
Packit Service 672cf4
/* We need to include config.h so that we know whether we are building
Packit Service 672cf4
   with large file system (LFS) support. */
Packit Service 672cf4
#ifdef HAVE_CONFIG_H
Packit Service 672cf4
#include <config.h>
Packit Service 672cf4
#endif
Packit Service 672cf4
Packit Service 672cf4
#include <stdlib.h>
Packit Service 672cf4
#include <stdio.h>
Packit Service 672cf4
#include <string.h>
Packit Service 672cf4
Packit Service 672cf4
#include <gpgme.h>
Packit Service 672cf4
Packit Service 672cf4
#include "t-support.h"
Packit Service 672cf4
Packit Service 672cf4

Packit Service 672cf4
struct
Packit Service 672cf4
{
Packit Service 672cf4
  const char *fpr;
Packit Service 672cf4
  const char *sec_keyid;
Packit Service 672cf4
  struct
Packit Service 672cf4
  {
Packit Service 672cf4
    const char *name;
Packit Service 672cf4
    const char *comment;
Packit Service 672cf4
    const char *email;
Packit Service 672cf4
    struct
Packit Service 672cf4
    {
Packit Service 672cf4
      gpgme_pubkey_algo_t algo;
Packit Service 672cf4
      const char *keyid;
Packit Service 672cf4
      const char *name;
Packit Service 672cf4
      const char *comment;
Packit Service 672cf4
      const char *email;
Packit Service 672cf4
      unsigned int sig_class;
Packit Service 672cf4
      int exportable;
Packit Service 672cf4
    } sig;
Packit Service 672cf4
  } uid[3];
Packit Service 672cf4
}
Packit Service 672cf4
keys[] =
Packit Service 672cf4
  {
Packit Service 672cf4
    { "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
Packit Service 672cf4
      { { "Alfa Test", "demo key", "alfa@example.net",
Packit Service 672cf4
          { GPGME_PK_DSA, "2D727CC768697734",
Packit Service 672cf4
	    "Alfa Test", "demo key", "alfa@example.net", 19, 1 } },
Packit Service 672cf4
	{ "Alpha Test", "demo key", "alpha@example.net",
Packit Service 672cf4
          { GPGME_PK_DSA, "2D727CC768697734",
Packit Service 672cf4
	    "Alfa Test", "demo key", "alfa@example.net", 19, 1 } },
Packit Service 672cf4
	{ "Alice", "demo key", NULL,
Packit Service 672cf4
          { GPGME_PK_DSA, "2D727CC768697734",
Packit Service 672cf4
	    "Alfa Test", "demo key", "alfa@example.net", 19, 1 } } } },
Packit Service 672cf4
    { NULL }
Packit Service 672cf4
  };
Packit Service 672cf4
Packit Service 672cf4
Packit Service 672cf4
int
Packit Service 672cf4
main (void)
Packit Service 672cf4
{
Packit Service 672cf4
  gpgme_error_t err;
Packit Service 672cf4
  gpgme_ctx_t ctx;
Packit Service 672cf4
  gpgme_key_t key;
Packit Service 672cf4
  gpgme_keylist_result_t result;
Packit Service 672cf4
  int mode;
Packit Service 672cf4
  int i = 0;
Packit Service 672cf4
Packit Service 672cf4
  init_gpgme (GPGME_PROTOCOL_OpenPGP);
Packit Service 672cf4
Packit Service 672cf4
  err = gpgme_new (&ctx;;
Packit Service 672cf4
  fail_if_err (err);
Packit Service 672cf4
Packit Service 672cf4
  mode  = gpgme_get_keylist_mode (ctx);
Packit Service 672cf4
  mode |= GPGME_KEYLIST_MODE_SIGS;
Packit Service 672cf4
  err = gpgme_set_keylist_mode (ctx, mode);
Packit Service 672cf4
  fail_if_err (err);
Packit Service 672cf4
Packit Service 672cf4
  err = gpgme_op_keylist_start (ctx, "Alpha", 0);
Packit Service 672cf4
  fail_if_err (err);
Packit Service 672cf4
Packit Service 672cf4
  while (!(err = gpgme_op_keylist_next (ctx, &key)))
Packit Service 672cf4
    {
Packit Service 672cf4
      if (!keys[i].fpr)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "More keys returned than expected\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      /* Global key flags.  */
Packit Service 672cf4
      if (key->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->expired)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly expired\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->disabled)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly disabled\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->can_encrypt)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly unusable for encryption\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->can_sign)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly unusable for signing\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->can_certify)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly unusable for certifications\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->secret)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly secret\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->protocol != GPGME_PROTOCOL_OpenPGP)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key has unexpected protocol: %s\n",
Packit Service 672cf4
		   gpgme_get_protocol_name (key->protocol));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->issuer_serial)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly carries issuer serial: %s\n",
Packit Service 672cf4
		   key->issuer_serial);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->issuer_name)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly carries issuer name: %s\n",
Packit Service 672cf4
		   key->issuer_name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->chain_id)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
Packit Service 672cf4
		   key->chain_id);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key has unexpected owner trust: %i\n",
Packit Service 672cf4
		   key->owner_trust);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->subkeys || !key->subkeys->next || key->subkeys->next->next)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Key has unexpected number of subkeys\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      /* Primary key.  */
Packit Service 672cf4
      if (key->subkeys->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->expired)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly expired\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->disabled)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly disabled\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->can_encrypt)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly usable for encryption\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->subkeys->can_sign)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly unusable for signing\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->subkeys->can_certify)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->secret)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly secret\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->pubkey_algo != GPGME_PK_DSA)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
Packit Service 672cf4
		   gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->length != 1024)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key has unexpected length: %i\n",
Packit Service 672cf4
		   key->subkeys->length);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key has unexpected key ID: %s\n",
Packit Service 672cf4
		   key->subkeys->keyid);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (key->subkeys->fpr, keys[i].fpr))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
Packit Service 672cf4
		   key->subkeys->fpr);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->expires)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
Packit Service 672cf4
		   key->subkeys->expires);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      /* Secondary key.  */
Packit Service 672cf4
      if (key->subkeys->next->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->expired)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly expired\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->disabled)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly disabled\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->subkeys->next->can_encrypt)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly unusable for encryption\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->can_sign)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly usable for signing\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->can_certify)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly usable for certifications\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->secret)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly secret\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->pubkey_algo != GPGME_PK_ELG_E)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key has unexpected public key algo: %s\n",
Packit Service 672cf4
		   gpgme_pubkey_algo_name (key->subkeys->next->pubkey_algo));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->length != 1024)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key has unexpected length: %i\n",
Packit Service 672cf4
		   key->subkeys->next->length);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (key->subkeys->next->keyid, keys[i].sec_keyid))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key has unexpected key ID: %s\n",
Packit Service 672cf4
		   key->subkeys->next->keyid);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (!key->subkeys->next->fpr)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key has unexpectedly no fingerprint\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->subkeys->next->expires)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Secondary key unexpectedly expires: %lu\n",
Packit Service 672cf4
		   key->subkeys->next->expires);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      /* FIXME: The below test will crash if we want to check for a
Packit Service 672cf4
	 name, comment or email that doesn't exist in the key's user
Packit Service 672cf4
	 IDs.  */
Packit Service 672cf4
      if (!((!keys[i].uid[0].name && !key->uids)
Packit Service 672cf4
	    || (keys[i].uid[0].name && !keys[i].uid[1].name
Packit Service 672cf4
		&& key->uids && !key->uids->next)
Packit Service 672cf4
	    || (keys[i].uid[0].name && keys[i].uid[1].name
Packit Service 672cf4
		&& !keys[i].uid[2].name
Packit Service 672cf4
		&& key->uids && key->uids->next && !key->uids->next->next)
Packit Service 672cf4
	    || (keys[i].uid[0].name && keys[i].uid[1].name
Packit Service 672cf4
		&& keys[i].uid[2].name
Packit Service 672cf4
		&& key->uids && key->uids->next && key->uids->next->next
Packit Service 672cf4
		&& !key->uids->next->next->next)))
Packit Service 672cf4
	  {
Packit Service 672cf4
	    fprintf (stderr, "Key has unexpected number of user IDs\n");
Packit Service 672cf4
	    exit (1);
Packit Service 672cf4
	  }
Packit Service 672cf4
      if (key->uids && key->uids->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "First user ID unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "First user ID unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
Packit Service 672cf4
		   key->uids->validity);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].name
Packit Service 672cf4
	  && strcmp (keys[i].uid[0].name, key->uids->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in first user ID: %s\n",
Packit Service 672cf4
		   key->uids->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].comment
Packit Service 672cf4
	  && strcmp (keys[i].uid[0].comment, key->uids->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in first user ID: %s\n",
Packit Service 672cf4
		   key->uids->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].email
Packit Service 672cf4
	  && strcmp (keys[i].uid[0].email, key->uids->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in first user ID: %s\n",
Packit Service 672cf4
		   key->uids->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && (!key->uids->signatures || key->uids->signatures->next))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "First user ID unexpected number of signatures\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].sig.algo != key->uids->signatures->pubkey_algo)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected algorithm in first user ID sig: %s\n",
Packit Service 672cf4
		   gpgme_pubkey_algo_name (key->uids->signatures->pubkey_algo));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[0].sig.keyid, key->uids->signatures->keyid))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected key ID in first user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->signatures->keyid);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[0].sig.name, key->uids->signatures->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in first user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->signatures->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[0].sig.comment, key->uids->signatures->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in first user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->signatures->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[0].sig.email, key->uids->signatures->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in first user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->signatures->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].sig.sig_class != key->uids->signatures->sig_class)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected class in first user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->signatures->sig_class);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[0].sig.exportable != key->uids->signatures->exportable)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected exportable stat in first user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->signatures->exportable);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      if (key->uids && key->uids->next && key->uids->next->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Second user ID unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->next && key->uids->next->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Second user ID unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->next
Packit Service 672cf4
	  && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
Packit Service 672cf4
		   key->uids->next->validity);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].name
Packit Service 672cf4
	  && strcmp (keys[i].uid[1].name, key->uids->next->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in second user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].comment
Packit Service 672cf4
	  && strcmp (keys[i].uid[1].comment, key->uids->next->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in second user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].email
Packit Service 672cf4
	  && strcmp (keys[i].uid[1].email, key->uids->next->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in second user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      /* Note: There is a bug in gpg 1.3.4 which duplicates a
Packit Service 672cf4
         signature after importing the secret key.  Thus we disable
Packit Service 672cf4
         the second part of the check. */
Packit Service 672cf4
      if (key->uids && (!key->uids->next->signatures /*|| key->uids->next->signatures->next*/))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Second user ID unexpected number of signatures\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].sig.algo != key->uids->next->signatures->pubkey_algo)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected algorithm in second user ID sig: %s\n",
Packit Service 672cf4
		   gpgme_pubkey_algo_name (key->uids->next->signatures->pubkey_algo));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[1].sig.keyid, key->uids->next->signatures->keyid))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->signatures->keyid);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[1].sig.name, key->uids->next->signatures->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in second user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->signatures->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[1].sig.comment, key->uids->next->signatures->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in second user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->signatures->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[1].sig.email, key->uids->next->signatures->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in second user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->signatures->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].sig.sig_class != key->uids->next->signatures->sig_class)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected class in second user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->next->signatures->sig_class);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[1].sig.exportable != key->uids->next->signatures->exportable)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected exportable stat in second user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->next->signatures->exportable);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      if (key->uids && key->uids->next && key->uids->next->next
Packit Service 672cf4
	  && key->uids->next->next->revoked)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Third user ID unexpectedly revoked\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->next && key->uids->next->next
Packit Service 672cf4
	  && key->uids->next->next->invalid)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Third user ID unexpectedly invalid\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && key->uids->next && key->uids->next->next
Packit Service 672cf4
	  && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
Packit Service 672cf4
		   key->uids->next->next->validity);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].name
Packit Service 672cf4
	  && strcmp (keys[i].uid[2].name, key->uids->next->next->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in third user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->next->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].comment
Packit Service 672cf4
	  && strcmp (keys[i].uid[2].comment, key->uids->next->next->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in third user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->next->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].email
Packit Service 672cf4
	  && strcmp (keys[i].uid[2].email, key->uids->next->next->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in third user ID: %s\n",
Packit Service 672cf4
		   key->uids->next->next->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (key->uids && (!key->uids->next->next->signatures
Packit Service 672cf4
			|| key->uids->next->next->signatures->next))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Third user ID unexpected number of signatures\n");
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].sig.algo != key->uids->next->next->signatures->pubkey_algo)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected algorithm in third user ID sig: %s\n",
Packit Service 672cf4
		   gpgme_pubkey_algo_name (key->uids->next->next->signatures->pubkey_algo));
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[2].sig.keyid, key->uids->next->next->signatures->keyid))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected key ID in third user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->keyid);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[2].sig.name, key->uids->next->next->signatures->name))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected name in third user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->name);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[2].sig.comment, key->uids->next->next->signatures->comment))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected comment in third user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->comment);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (strcmp (keys[i].uid[2].sig.email, key->uids->next->next->signatures->email))
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected email in third user ID sig: %s\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->email);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].sig.sig_class != key->uids->next->next->signatures->sig_class)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected class in third user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->sig_class);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
      if (keys[i].uid[2].sig.exportable != key->uids->next->next->signatures->exportable)
Packit Service 672cf4
	{
Packit Service 672cf4
	  fprintf (stderr, "Unexpected exportable stat in third user ID sig: %i\n",
Packit Service 672cf4
		   key->uids->next->next->signatures->exportable);
Packit Service 672cf4
	  exit (1);
Packit Service 672cf4
	}
Packit Service 672cf4
Packit Service 672cf4
      gpgme_key_unref (key);
Packit Service 672cf4
      i++;
Packit Service 672cf4
    }
Packit Service 672cf4
  if (gpgme_err_code (err) != GPG_ERR_EOF)
Packit Service 672cf4
    fail_if_err (err);
Packit Service 672cf4
  err = gpgme_op_keylist_end (ctx);
Packit Service 672cf4
  fail_if_err (err);
Packit Service 672cf4
Packit Service 672cf4
  result = gpgme_op_keylist_result (ctx);
Packit Service 672cf4
  if (result->truncated)
Packit Service 672cf4
    {
Packit Service 672cf4
      fprintf (stderr, "Key listing unexpectedly truncated\n");
Packit Service 672cf4
      exit (1);
Packit Service 672cf4
    }
Packit Service 672cf4
Packit Service 672cf4
  if (keys[i].fpr)
Packit Service 672cf4
    {
Packit Service 672cf4
      fprintf (stderr, "Less keys returned than expected\n");
Packit Service 672cf4
      exit (1);
Packit Service 672cf4
    }
Packit Service 672cf4
Packit Service 672cf4
  gpgme_release (ctx);
Packit Service 672cf4
  return 0;
Packit Service 672cf4
}