mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
agent: Allow NULL for R_PADDING, when calling scd and tpm2d.
* agent/call-scd.c (padding_info_cb): Allow NULL. (agent_card_pkdecrypt): Likewise. * agent/divert-scd.c (divert_pkdecrypt): Likewise. * agent/divert-tpm2.c (divert_tpm2_pkdecrypt): Likewise. -- It's for RSA PKCD#1 encoding if the decrypt operation removes padding or not. When caller knows it's not RSA, this information is no use and it is better to allow NULL with the variable R_PADDING. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
2958e5e4cf
commit
2593dcbceb
@ -548,7 +548,8 @@ padding_info_cb (void *opaque, const char *line)
|
|||||||
|
|
||||||
if ((s=has_leading_keyword (line, "PADDING")))
|
if ((s=has_leading_keyword (line, "PADDING")))
|
||||||
{
|
{
|
||||||
*r_padding = atoi (s);
|
if (r_padding)
|
||||||
|
*r_padding = atoi (s);
|
||||||
}
|
}
|
||||||
else if ((s=has_leading_keyword (line, "PINCACHE_PUT")))
|
else if ((s=has_leading_keyword (line, "PINCACHE_PUT")))
|
||||||
err = handle_pincache_put (s);
|
err = handle_pincache_put (s);
|
||||||
@ -560,8 +561,8 @@ padding_info_cb (void *opaque, const char *line)
|
|||||||
/* Decipher INDATA using the current card. Note that the returned
|
/* Decipher INDATA using the current card. Note that the returned
|
||||||
* value is not an s-expression but the raw data as returned by
|
* value is not an s-expression but the raw data as returned by
|
||||||
* scdaemon. The padding information is stored at R_PADDING with -1
|
* scdaemon. The padding information is stored at R_PADDING with -1
|
||||||
* for not known. DESC_TEXT is an additional parameter passed to
|
* for not known, when it's not NULL. DESC_TEXT is an additional
|
||||||
* GETPIN_CB. */
|
* parameter passed to GETPIN_CB. */
|
||||||
int
|
int
|
||||||
agent_card_pkdecrypt (ctrl_t ctrl,
|
agent_card_pkdecrypt (ctrl_t ctrl,
|
||||||
const char *keyid,
|
const char *keyid,
|
||||||
@ -579,7 +580,8 @@ agent_card_pkdecrypt (ctrl_t ctrl,
|
|||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
*r_buf = NULL;
|
*r_buf = NULL;
|
||||||
*r_padding = -1; /* Unknown. */
|
if (r_padding)
|
||||||
|
*r_padding = -1; /* Unknown. */
|
||||||
rc = start_scd (ctrl);
|
rc = start_scd (ctrl);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -380,7 +380,7 @@ divert_pksign (ctrl_t ctrl, const unsigned char *grip,
|
|||||||
/* Decrypt the value given as an s-expression in CIPHER using the
|
/* Decrypt the value given as an s-expression in CIPHER using the
|
||||||
key identified by SHADOW_INFO and return the plaintext in an
|
key identified by SHADOW_INFO and return the plaintext in an
|
||||||
allocated buffer in R_BUF. The padding information is stored at
|
allocated buffer in R_BUF. The padding information is stored at
|
||||||
R_PADDING with -1 for not known. */
|
R_PADDING with -1 for not known, when it's not NULL. */
|
||||||
int
|
int
|
||||||
divert_pkdecrypt (ctrl_t ctrl,
|
divert_pkdecrypt (ctrl_t ctrl,
|
||||||
const unsigned char *grip,
|
const unsigned char *grip,
|
||||||
@ -399,7 +399,8 @@ divert_pkdecrypt (ctrl_t ctrl,
|
|||||||
|
|
||||||
bin2hex (grip, 20, hexgrip);
|
bin2hex (grip, 20, hexgrip);
|
||||||
|
|
||||||
*r_padding = -1;
|
if (r_padding)
|
||||||
|
*r_padding = -1;
|
||||||
s = cipher;
|
s = cipher;
|
||||||
if (*s != '(')
|
if (*s != '(')
|
||||||
return gpg_error (GPG_ERR_INV_SEXP);
|
return gpg_error (GPG_ERR_INV_SEXP);
|
||||||
|
@ -106,7 +106,8 @@ divert_tpm2_pkdecrypt (ctrl_t ctrl,
|
|||||||
const unsigned char *s;
|
const unsigned char *s;
|
||||||
size_t n;
|
size_t n;
|
||||||
|
|
||||||
*r_padding = -1;
|
if (r_padding)
|
||||||
|
*r_padding = -1;
|
||||||
|
|
||||||
s = cipher;
|
s = cipher;
|
||||||
if (*s != '(')
|
if (*s != '(')
|
||||||
@ -125,7 +126,8 @@ divert_tpm2_pkdecrypt (ctrl_t ctrl,
|
|||||||
return gpg_error (GPG_ERR_INV_SEXP);
|
return gpg_error (GPG_ERR_INV_SEXP);
|
||||||
if (smatch (&s, n, "rsa"))
|
if (smatch (&s, n, "rsa"))
|
||||||
{
|
{
|
||||||
*r_padding = 0;
|
if (r_padding)
|
||||||
|
*r_padding = 0;
|
||||||
if (*s != '(')
|
if (*s != '(')
|
||||||
return gpg_error (GPG_ERR_UNKNOWN_SEXP);
|
return gpg_error (GPG_ERR_UNKNOWN_SEXP);
|
||||||
s++;
|
s++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user