aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scd/app-openpgp.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index ed1bce6b9..f8e14603d 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -4114,10 +4114,12 @@ do_decipher (app_t app, const char *keyidstr,
if (rc)
return rc;
- if (indatalen == 16 + 1 || indatalen == 32 + 1
+ if ((indatalen == 16 + 1 || indatalen == 32 + 1)
&& ((char *)indata)[0] == 0x02)
- /* PSO:DECIPHER with symmetric key. */
- padind = -1;
+ {
+ /* PSO:DECIPHER with symmetric key. */
+ padind = -1;
+ }
else if (app->app_local->keyattr[1].key_type == KEY_TYPE_RSA)
{
/* We might encounter a couple of leading zeroes in the
@@ -4179,7 +4181,7 @@ do_decipher (app_t app, const char *keyidstr,
* Skip the prefix. It may be 0x40 (in new format), or MPI
* head of 0x00 (in old format).
*/
- indata++;
+ indata = (const char *)indata + 1;
indatalen--;
}
@@ -4231,9 +4233,10 @@ do_decipher (app_t app, const char *keyidstr,
xfree (outdata);
return gpg_error_from_syserror ();
}
+ fixbuf[0] = 0x40;
+ memcpy (fixbuf+1, *outdata, *outdatalen);
xfree (outdata);
- outdata = fixbuf;
- outdata[0] = 0x40;
+ *outdata = fixbuf;
*outdatalen = *outdatalen + 1;
}