gpgme fails encrypting on 64bit debian

2013-04-10 Thread Simone Pagan Griso
Hi,
 I'm facing a problem which is giving me a bit of troubles to trace with
gpgme. I've reproduced it with a simple test program (starting from another
simple example I found) which I paste below. This works on a 32-bit
debian-based system but fails on 64-bit one. In particular in the 64-bit
case I can successfully read and decrypt (not shown in the example) but I
get a rather cryptic error in the encryption:

$ ./test2 C37DBF71 Ciao!
version=1.2.0
Protocol name: OpenPGP
file=/usr/bin/gpg, home=(null)
Error in encrypting data. Error 1: General error (Unspecified source)

The version of libgpgme is shown above as well. GnuPG version 1.4.11
This is the output of uname, just to show you I'm running on 64 bit system:

$ uname -a
Linux spagan-laptop 3.2.0-39-generic #62-Ubuntu SMP Thu Feb 28 00:28:53 UTC
2013 x86_64 x86_64 x86_64 GNU/Linux

Yes, the first thing I've done was to extensively trying to make sure I was
defining _FILE_OFFSET_BITS=64; also I checked that off_t has effectively
size of 8. This is how I compile it:

gcc -m64 -D_FILE_OFFSET_BITS=64 -g test2.c -lgpgme
-L/usr/lib/x86_64-linux-gnu -lgpg-error -o test2

and finally below there's the test program I used.

Thanks a lot for any help you could give me! I haven't found anything much
useful around yet to help me debug this.. (including a rough search in this
mailing list archives).
Please let me know if you need additional info!

Cheers,
 Simone


// test program
#include stdio.h   /* printf*/
#include unistd.h  /* write */
#include errno.h   /* errno */
#include locale.h  /* locale support*/
#include string.h  /* string support*/
#include stdlib.h  /* memory management */

#define SIZE 1024

int main(int argc, char **argv)
{
  if (argc  2) {
printf(ERROR. Usage: %s key message\n, argv[0]);
return -1;
  }

  char *m_key = argv[1];
  char *pSource = argv[2];
  char *pDest = malloc(65536);

  char *p;
  char buf[SIZE];
  size_t read_bytes;
  int tmp;
  gpgme_ctx_t ceofcontext;
  gpgme_error_t err;
  gpgme_data_t data;

  gpgme_engine_info_t enginfo;

  /* The function `gpgme_check_version' must be called before any other
   * function in the library, because it initializes the thread support
   * subsystem in GPGME. (from the info page) */
  setlocale (LC_ALL, );
  p = (char *) gpgme_check_version(NULL);
  printf(version=%s\n,p);
  /* set locale, because tests do also */
  gpgme_set_locale(NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));

  /* check for OpenPGP support */
  err = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP);
  if(err != GPG_ERR_NO_ERROR) return 1;

  p = (char *) gpgme_get_protocol_name(GPGME_PROTOCOL_OpenPGP);
  printf(Protocol name: %s\n,p);

  /* get engine information */
  err = gpgme_get_engine_info(enginfo);
  if(err != GPG_ERR_NO_ERROR) return 2;
  printf(file=%s, home=%s\n,enginfo-file_name,enginfo-home_dir);

  /* create our own context */
  err = gpgme_new(ceofcontext);
  if(err != GPG_ERR_NO_ERROR) return 3;

  /* set protocol to use in our context */
  err = gpgme_set_protocol(ceofcontext,GPGME_PROTOCOL_OpenPGP);
  if(err != GPG_ERR_NO_ERROR) return 4;

  /* set engine info in our context; I changed it for ceof like this:

   err = gpgme_ctx_set_engine_info (ceofcontext, GPGME_PROTOCOL_OpenPGP,
   /usr/bin/gpg,/home/user/nico/.ceof/gpg/);

   but I'll use standard values for this example: */

  err = gpgme_ctx_set_engine_info (ceofcontext, GPGME_PROTOCOL_OpenPGP,
   enginfo-file_name,enginfo-home_dir);
  if(err != GPG_ERR_NO_ERROR) return 5;

  /* do ascii armor data, so output is readable in console */
  gpgme_set_armor(ceofcontext, 1);

  gpgme_data_t source;
  gpgme_data_t dest;

  //get key to encrypt, get the first key
  gpgme_key_t key[2];
  err = gpgme_op_keylist_start(ceofcontext, m_key, 0);
  err = gpgme_op_keylist_next (ceofcontext, key);
  if (err) {
printf(Key not found in current key-ring: %s\n, m_key);
return 1;
  }
  key[1] = 0; //set to NULL the second entry

  //point to source buffer
  err = gpgme_data_new_from_mem(source, pSource, strlen(pSource), 0);
  if (err != GPG_ERR_NO_ERROR) {
printf(Error in reading data to encrypt. Error %d: %s (%s)\n,
   gpgme_err_code(err), gpgme_strerror(err), gpgme_strsource(err));
return 2;
  }

  //create dest buffer
  err = gpgme_data_new(dest);
  if (err != GPG_ERR_NO_ERROR) {
printf(Error in creating output data buffer to encrypt. Error %d: %s
(%s)\n,
   gpgme_err_code(err), gpgme_strerror(err), gpgme_strsource(err));
return 3;
  }

  //encrypt text
  gpgme_encrypt_flags_t flags;
  flags = GPGME_ENCRYPT_NO_ENCRYPT_TO; //only specified recipient, no
defaults please
  err = gpgme_op_encrypt(ceofcontext, key, flags, source, dest);
  if (err != GPG_ERR_NO_ERROR) {
printf(Error in encrypting data. Error %d: %s (%s)\n,
   gpgme_err_code(err), gpgme_strerror(err), gpgme_strsource(err));
return 4;
  }

  //retrieve result
  

Re: gpgme fails encrypting on 64bit debian

2013-04-10 Thread Werner Koch
On Wed, 10 Apr 2013 10:54, simone.pagangr...@gmail.com said:

 gcc -m64 -D_FILE_OFFSET_BITS=64 -g test2.c -lgpgme
 -L/usr/lib/x86_64-linux-gnu -lgpg-error -o test2

Why do you want to tweak gcc options if you are anyway on a 64 bit
system?  Also they seem to be harmelss, hast gpgme been build with the
same options?  What does
  gpgme-config --cflags --libs
tell you?

 // test program
 #include stdio.h   /* printf*/
 #include unistd.h  /* write */
 #include errno.h   /* errno */
 #include locale.h  /* locale support*/
 #include string.h  /* string support*/
 #include stdlib.h  /* memory management */

gpgme.h ist missing but below you are using constants defined by
gpgme.h.

   char *pDest = malloc(65536);

(please always check for malloc error!)

   p = (char *) gpgme_check_version(NULL);
   printf(version=%s\n,p);

Don't cast without a good reason.

   p = (char *) gpgme_get_protocol_name(GPGME_PROTOCOL_OpenPGP);
   printf(Protocol name: %s\n,p);

Ditto.


   err = gpgme_ctx_set_engine_info (ceofcontext, GPGME_PROTOCOL_OpenPGP,
enginfo-file_name,enginfo-home_dir);
   if(err != GPG_ERR_NO_ERROR) return 5;

Try first without setting a non default engine info.


To debug your problem, I suggest to run the program like this:

 GPGME_DEBUG=9:/tmp/gpgme.log:

and check the log file.


Shalom-Salam,

   Werner


-- 
Die Gedanken sind frei.  Ausnahmen regelt ein Bundesgesetz.


___
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users


Reading key capabilities information before importing a key

2013-04-10 Thread Branko Majic
Hello all,

I'm trying to find a way to list the key capabilities of a key before
importing it. I can obtain some basic information by using the command
(I've seen this one in the mailing list archives):

gpg2 --with-colons test.key

The only catch being that the above command will not list the key
capabilities for the keys contained in a file. Any way to obtain this
information without importing the key into keyring?

I'm using GnuPG 2.0.19 with libgcrypt 1.5.0 on Debian Wheezy 64-bit.

Best regards

-- 
Branko Majic
Jabber: bra...@majic.rs
Please use only Free formats when sending attachments to me.

Бранко Мајић
Џабер: bra...@majic.rs
Молим вас да додатке шаљете искључиво у слободним форматима.


signature.asc
Description: PGP signature
___
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users


Re: Reading key capabilities information before importing a key

2013-04-10 Thread Hauke Laging
Am Mi 10.04.2013, 22:57:53 schrieb Branko Majic:
 Hello all,

 I'm trying to find a way to list the key capabilities of a key before
 importing it. I can obtain some basic information by using the command
 (I've seen this one in the mailing list archives):

 gpg2 --with-colons test.key

 The only catch being that the above command will not list the key
 capabilities for the keys contained in a file. Any way to obtain this
 information without importing the key into keyring?

Two possibilities:

1)
gpg --list-packets hauke__0x1a571df5.asc
[...]
:public sub key packet:
version 4, algo 1, created 1352000413, expires 0
pkey[0]: [2048 bits]
pkey[1]: [17 bits]
keyid: 486B17AB3F96AD8E
:signature packet: algo 1, keyid BF4B8EEF1A571DF5
version 4, created 1352000413, md5len 0, sigclass 0x18
digest algo 2, begin of digest c1 78
hashed subpkt 2 len 4 (sig created 2012-11-04)
hashed subpkt 27 len 1 (key flags: 02)
[...]

Subpacket class 27 is the key capabilities.

[http://www.ietf.org/rfc/rfc4880.txt]

   First octet:

   0x01 - This key may be used to certify other keys.

   0x02 - This key may be used to sign data.

   0x04 - This key may be used to encrypt communications.

   0x08 - This key may be used to encrypt storage.

   0x10 - The private component of this key may have been split
  by a secret-sharing mechanism.

   0x20 - This key may be used for authentication.

   0x80 - The private component of this key may be in the
  possession of more than one person.

2) You import the key but direct it to a different keyring, see
--keyring
--secret-keyring
--primary-keyring
--no-default-keyring


Hauke
--
☺
PGP: 7D82 FB9F D25A 2CE4 5241 6C37 BF4B 8EEF 1A57 1DF5 (seit 2012-11-04)
http://www.openpgp-schulungen.de/


signature.asc
Description: This is a digitally signed message part.
___
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users


gpa reports error: Unsupported Protocol

2013-04-10 Thread Jerry
gpa 0.9.3
gpgme 1.3.2
FreeBSD 8.3-STABLE -- amd64

GPA continually displays an error screen when I start it. The screen
image is available here:
http://www.seibercom.net/logs/gpa-error.png

I have tried rebuilding the entire port, but the problem persists. I
would welcome any suggestions.

-- 
Jerry ♔

Disclaimer: off-list followups get on-list replies or get ignored.
Please do not ignore the Reply-To header.
__


___
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users