Blame tests/gpgsm/cms-decrypt.c

Packit d7e8d0
/* cms-decrypt.c  - Helper to debug the decrupt operation.
Packit Service 30b792
 * Copyright (C) 2008 g10 Code GmbH
Packit Service 30b792
 *
Packit Service 30b792
 * This file is part of GPGME.
Packit Service 30b792
 *
Packit Service 30b792
 * GPGME is free software; you can redistribute it and/or modify it
Packit Service 30b792
 * under the terms of the GNU Lesser General Public License as
Packit Service 30b792
 * published by the Free Software Foundation; either version 2.1 of
Packit Service 30b792
 * the License, or (at your option) any later version.
Packit Service 30b792
 *
Packit Service 30b792
 * GPGME is distributed in the hope that it will be useful, but
Packit Service 30b792
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 30b792
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 30b792
 * Lesser General Public License for more details.
Packit Service 30b792
 *
Packit Service 30b792
 * You should have received a copy of the GNU Lesser General Public
Packit Service 30b792
 * License along with this program; if not, see <https://gnu.org/licenses/>.
Packit Service 30b792
 * SPDX-License-Identifier: LGPL-2.1-or-later
Packit Service 30b792
 */
Packit d7e8d0
Packit d7e8d0
/* We need to include config.h so that we know whether we are building
Packit d7e8d0
   with large file system (LFS) support. */
Packit d7e8d0
#ifdef HAVE_CONFIG_H
Packit d7e8d0
#include <config.h>
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#include <stdlib.h>
Packit d7e8d0
#include <stdio.h>
Packit d7e8d0
#include <string.h>
Packit d7e8d0
Packit d7e8d0
#include <gpgme.h>
Packit d7e8d0
Packit d7e8d0
#define PGM "cms-decrypt"
Packit d7e8d0
Packit d7e8d0
#include "t-support.h"
Packit d7e8d0
Packit d7e8d0
static const char *
Packit d7e8d0
nonnull (const char *s)
Packit d7e8d0
{
Packit d7e8d0
  return s? s :"[none]";
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit Service 30b792
int
Packit d7e8d0
main (int argc, char **argv)
Packit d7e8d0
{
Packit d7e8d0
  gpgme_error_t err;
Packit d7e8d0
  gpgme_ctx_t ctx;
Packit d7e8d0
  gpgme_data_t in, out;
Packit d7e8d0
  gpgme_decrypt_result_t result;
Packit d7e8d0
  gpgme_recipient_t recp;
Packit d7e8d0
Packit d7e8d0
  if (argc)
Packit d7e8d0
    { argc--; argv++; }
Packit d7e8d0
Packit d7e8d0
  if (argc != 1)
Packit d7e8d0
    {
Packit d7e8d0
      fputs ("usage: " PGM " FILE\n", stderr);
Packit d7e8d0
      exit (1);
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
  init_gpgme (GPGME_PROTOCOL_CMS);
Packit d7e8d0
Packit d7e8d0
  err = gpgme_new (&ctx;;
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
  err = gpgme_data_new_from_file (&in, *argv, 1);
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
Packit d7e8d0
  err = gpgme_data_new (&out;;
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
Packit d7e8d0
  err = gpgme_op_decrypt (ctx, in, out);
Packit d7e8d0
  printf ("gpgme_op_decrypt: %s <%s> (%u)\n",
Packit d7e8d0
          gpgme_strerror (err), gpgme_strsource (err), err);
Packit d7e8d0
  result = gpgme_op_decrypt_result (ctx);
Packit d7e8d0
  if (!result)
Packit d7e8d0
    {
Packit d7e8d0
      fputs (PGM ": error: decryption result missing\n", stderr);
Packit d7e8d0
      exit (1);
Packit d7e8d0
    }
Packit Service 30b792
Packit Service 30b792
  printf ("unsupported_algorithm: %s\n",
Packit d7e8d0
          nonnull (result->unsupported_algorithm));
Packit d7e8d0
  printf ("wrong_key_usage: %u\n",  result->wrong_key_usage);
Packit d7e8d0
  printf ("file_name: %s\n", nonnull (result->file_name));
Packit d7e8d0
  for (recp = result->recipients; recp; recp = recp->next)
Packit d7e8d0
    {
Packit d7e8d0
      printf ("recipient.status: %s <%s> (%u)\n",
Packit d7e8d0
              gpgme_strerror (recp->status), gpgme_strsource (recp->status),
Packit d7e8d0
              recp->status);
Packit d7e8d0
      printf ("recipient.pkalgo: %d\n", recp->pubkey_algo);
Packit d7e8d0
      printf ("recipient.keyid : %s\n", nonnull (recp->keyid));
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
  if (!err)
Packit d7e8d0
    {
Packit d7e8d0
      puts ("plaintext:");
Packit d7e8d0
      print_data (out);
Packit d7e8d0
      gpgme_data_release (out);
Packit d7e8d0
    }
Packit d7e8d0
Packit d7e8d0
  gpgme_data_release (in);
Packit d7e8d0
Packit d7e8d0
  gpgme_release (ctx);
Packit d7e8d0
  return 0;
Packit d7e8d0
}