Unexpected result when encrypting using gcry_pk_encrypt

Werner Koch wk at gnupg.org
Fri Apr 15 14:01:44 CEST 2016


Hi,

here are a few quick comments:

> void print_mpi(gcry_mpi_t mpi){
> 	unsigned char *returned_string;
> 	int returned_string_length;
> 	gcry_error_t rc = gcry_mpi_aprint(GCRYMPI_FMT_USG, &returned_string, &returned_string_length, mpi);
> 	if(rc){
> 		fprintf(stderr, "File: %s, Line: %i.\n", __FILE__, __LINE__);
> 		exit(-1);
> 	}
> 	printf("length of returned string: %i\n", returned_string_length);
> 	printf("returned string: ");
> 	int i;
> 	for(i = 0; i < returned_string_length; i++){
> 		printf("%c", returned_string[i]);

You are printing binary data here.  The printing is actually the same as

      fputs ("returned string: ", stdout);
      fwrite (returned_string, returned_string_length, 1, stdout);

If you want a hex presentation you need to use 

      rc = gcry_mpi_aprint(GCRYMPI_FMT_HEX, &returned_string, ....)

GCRYMPI_FMT_USG returns an unsigned integer binary representation.
Given that this is just for debug output, the use of

     gcry_log_debugmpi ("returned string", mpi);

is probably easier (goes by default to stderr, though).

> void print_sexp(gcry_sexp_t sexp){
> 	unsigned char buffer[BUFFER_SIZE];
> 	size_t bytes_printed = gcry_sexp_sprint(sexp, GCRYSEXP_FMT_DEFAULT, buffer, BUFFER_SIZE);

Here you should use GCRYSEXP_FMT_ADVANCED to get a printable output.  Or
use

     gcry_log_debugsxp ("returned sexp", sexp);




Salam-Shalom,

   Werner

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




More information about the Gcrypt-devel mailing list