gcry_cipher_decrypt not functioning

D. Hazelton dhazelton at enter.net
Wed Apr 5 04:04:56 CEST 2006


I'm working on a small project that is using libgcrypt for encryption. The 
encryption works fine, but when the decryption code is called, no decryption 
takes place.

The following function is what I use to wrap the library calls. The input data 
is already aligned to the ciphers blocksize by the encryption code.

From watching the process in gdb it is certain that the decryption never 
happens. I have tried a version where I was creating a temporary buffer for 
the output, and even with that step the input stream matched the output 
stream from the function.

I'm not on the list, so could you please CC: me on the response?

gcry_error_t decrypt( unsigned char *outb, unsigned int *outs, 
		      unsigned int algo ) {
  gcry_error_t rval;
  gcry_cipher_hd_t hand;
  gcry_md_hd_t mdh;
  unsigned char *store;
  unsigned int i, k;

  store = (char *)malloc(32);
  memset(store,0,32);
  blklen = gcry_cipher_get_algo_blklen(algo);
  rval = gcry_md_open( &mdh, GCRY_MD_SHA256, 0 );
  if( rval )
    return rval;

  k = strlen( password );
  for( i = 0; i < k; i++ ) {
    gcry_md_putc( mdh, password[i] );
  }
  gcry_md_final( mdh );
  store = gcry_md_read( mdh, GCRY_MD_SHA256 );
  gcry_md_close( mdh );

  rval = gcry_cipher_open( &hand, algo, 0, 0 );
  if( rval ) 
    return rval;

  rval = gcry_cipher_setkey( hand, store, 32 );
  if( rval )
    return rval;

  rval = gcry_cipher_decrypt( hand, outb, outs[0], NULL, 0 );
  if( rval )
    return rval;

  gcry_cipher_close( hand );
  return 0;
}

DRH



More information about the Gcrypt-devel mailing list