mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
agent: Add pin length field to the shadowed private key format.
This is not yet fully implemented. It will eventually allow to support pinpad equipped readers which do not support variable length pin lengths. * agent/protect.c (parse_shadow_info): Add optional arg R_PINLEN and parse pinlen info. Change all callers to pass NULL for it.
This commit is contained in:
parent
12ea5c904c
commit
b817ae7df9
5 changed files with 41 additions and 5 deletions
|
@ -1272,7 +1272,7 @@ agent_get_shadow_info (const unsigned char *shadowkey,
|
|||
required, NULL may be passed for them. */
|
||||
gpg_error_t
|
||||
parse_shadow_info (const unsigned char *shadow_info,
|
||||
char **r_hexsn, char **r_idstr)
|
||||
char **r_hexsn, char **r_idstr, int *r_pinlen)
|
||||
{
|
||||
const unsigned char *s;
|
||||
size_t n;
|
||||
|
@ -1281,6 +1281,8 @@ parse_shadow_info (const unsigned char *shadow_info,
|
|||
*r_hexsn = NULL;
|
||||
if (r_idstr)
|
||||
*r_idstr = NULL;
|
||||
if (r_pinlen)
|
||||
*r_pinlen = 0;
|
||||
|
||||
s = shadow_info;
|
||||
if (*s != '(')
|
||||
|
@ -1325,5 +1327,34 @@ parse_shadow_info (const unsigned char *shadow_info,
|
|||
(*r_idstr)[n] = 0;
|
||||
}
|
||||
|
||||
/* Parse the optional PINLEN. */
|
||||
n = snext (&s);
|
||||
if (!n)
|
||||
return 0;
|
||||
|
||||
if (r_pinlen)
|
||||
{
|
||||
char *tmpstr = xtrymalloc (n+1);
|
||||
if (!tmpstr)
|
||||
{
|
||||
if (r_hexsn)
|
||||
{
|
||||
xfree (*r_hexsn);
|
||||
*r_hexsn = NULL;
|
||||
}
|
||||
if (r_idstr)
|
||||
{
|
||||
xfree (*r_idstr);
|
||||
*r_idstr = NULL;
|
||||
}
|
||||
return gpg_error_from_syserror ();
|
||||
}
|
||||
memcpy (tmpstr, s, n);
|
||||
tmpstr[n] = 0;
|
||||
|
||||
*r_pinlen = (int)strtol (tmpstr, NULL, 10);
|
||||
xfree (tmpstr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue