gpgme tutorial t-decrypt.c -> Bad passphrase
Mandar Mhatre
mandar.mhatre at crs-iimotion.com
Mon Jun 27 14:44:14 CEST 2016
Hello List,
I am a noob to Cryptography world and few weeks ago started into this
subject. Till now I could use linux console freely and perform all the
described operations. Right now I am trying to understand GPGME and going
through the provided tutorial codes. I am getting an error while running
t-decrypt.c (and t-sign.c as well) as stated in the subject line. The
passphrase_cb has been implemented in ‘t-support.h’ but somehow the code
doesn’t retrieve the required password. I tried to implement my own
callback function on the same lines and came to know that this function is
never being called.
Search on internet didn’t provide me any alternative working code nor any
solution for this problem (Apart from John Morris, Sep 7, 2012) . So I am
mailing GnuPG/GPGME profis.
My goal is to pass a hardcoded password for decryption and signing for
automatic decryption and signing . Any suggestions/modifications in the
code or tutorial codes are appreciated.
Attaching my (tutorial code from GPGME with some debug specific printf’s)
code and other info below.
Thank you in advance.
Mandar Mhatre
System info—
Raspberry pi 3 with installed gpg, gpg2 and GPGME with dependencies
Code-----
/* t-decrypt.c - Regression test.
Copyright (C) 2000 Werner Koch (dd9jn)
Copyright (C) 2001, 2003, 2004 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. */
#define _FILE_OFFSET_BITS 64
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <gpgme.h>
#include "t-support.h"
gpgme_error_t passphrase_cb1 (void *hook, const char *uid_hint, const char
*passphrase_info, int last_was_bad, int fd)
{
#ifdef HAVE_W32_system
DWORD written;
WriteFile ((HANDLE) fd, "abc\n", 4, &written, 0);
#else
printf("in passphrase cb");
int res;
const char *pass = "abc\n";
int passlen = strlen (pass);
int off = 0;
do
{
res = write (fd, &pass[off], passlen - off);
printf("passphrase is %s", pass);
if ( res > 0)
off += res;
}
while(res > 0 && off != passlen);
return off == passlen ? 0 : gpgme_error_from_errno (errno);
#endif
return 0;
}
int
main (int argc, char *argv[])
{
gpgme_ctx_t ctx;
gpgme_error_t err;
gpgme_data_t in, out;
gpgme_decrypt_result_t result;
const char *cipher_1_asc = make_filename ("cipher-1.asc");
char *agent_info;
init_gpgme (GPGME_PROTOCOL_OpenPGP);
err = gpgme_new (&ctx);
fail_if_err (err);
err = gpgme_ctx_set_engine_info (ctx, GPGME_PROTOCOL_OpenPGP,
NULL,"/home/pi/.gnupg");
agent_info = getenv("GPG_AGENT_INFO");
if (!(agent_info && strchr (agent_info, ':')))
{
printf("in if loop\n");
gpgme_set_passphrase_cb (ctx, passphrase_cb1, NULL);
}
err = gpgme_data_new_from_file (&in, cipher_1_asc, 1);
fail_if_err (err);
err = gpgme_data_new (&out);
fail_if_err (err);
printf("data ready \n");
err = gpgme_op_decrypt (ctx, in, out);
fprintf (stderr,"Encrypt error: %s\n", gpgme_strerror (err));
fail_if_err (err);
result = gpgme_op_decrypt_result (ctx);
if (result->unsupported_algorithm)
{
fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
__FILE__, __LINE__, result->unsupported_algorithm);
exit (1);
}
print_data (out);
gpgme_data_release (in);
gpgme_data_release (out);
gpgme_release (ctx);
return 0;
}
Output—
In if loop
Data ready
Encrypt error: Bad passphrase
t-decrypt.c:101: GPGME: Bad passphrase
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/attachments/20160627/765f5b25/attachment-0001.html>
More information about the Gnupg-users
mailing list