TRACEPOINT();
signer_dialog_box (gpgme_key_t *r_key, char **r_passwd){  struct dialog_context_s context;   struct decrypt_key_s dec;    TRACEPOINT();  memset (&context, 0, sizeof context);  memset (&dec, 0, sizeof dec);  dec.hide_pwd = 1;  context.dec = &dec;    TRACEPOINT();  DialogBoxParam (glob_hinst, (LPCTSTR)IDD_DEC, GetDesktopWindow (),                  decrypt_key_dlg_proc, (LPARAM)&context);  TRACEPOINT();  if (dec.signer)     {      if (r_passwd)        *r_passwd = dec.pass;      else         {	              if (dec.pass)            wipestring (dec.pass);          xfree (dec.pass);        }      dec.pass = NULL;      *r_key = dec.signer;      dec.signer = NULL;    }  TRACEPOINT();  if (dec.pass)    wipestring (dec.pass);  TRACEPOINT();  xfree (dec.pass);  if (dec.signer)    gpgme_key_release (dec.signer);  TRACEPOINT();  release_keyarray (context.keyarray);  TRACEPOINT();  return (dec.opts & OPT_FLAG_CANCEL)? -1 : 0;}