mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
* configure.ac: Require libksba 0.9.11.
sm/ * call-dirmngr.c (inq_certificate): Add new inquire SENDCERT_SKI. * certlist.c (gpgsm_find_cert): Add new arg KEYID and implement this filter. Changed all callers. * certchain.c (find_up_search_by_keyid): New helper. (find_up): Also try using the AKI.keyIdentifier. (find_up_external): Ditto.
This commit is contained in:
parent
00853b8a1a
commit
eff62d82bf
17 changed files with 302 additions and 41 deletions
|
@ -1,3 +1,8 @@
|
|||
2005-04-17 Werner Koch <wk@g10code.com>
|
||||
|
||||
* sexputil.c (cmp_simple_canon_sexp): New.
|
||||
(make_simple_sexp_from_hexstr): New.
|
||||
|
||||
2005-04-07 Werner Koch <wk@g10code.com>
|
||||
|
||||
* sexputil.c: New.
|
||||
|
|
|
@ -61,3 +61,81 @@ keygrip_from_canon_sexp (const unsigned char *key, size_t keylen,
|
|||
return err;
|
||||
}
|
||||
|
||||
|
||||
/* Compare two simple S-expressions like "(3:foo)". Returns 0 if they
|
||||
are identical or !0 if they are not. Not that this function can't
|
||||
be used for sorting. */
|
||||
int
|
||||
cmp_simple_canon_sexp (const unsigned char *a, const unsigned char *b)
|
||||
{
|
||||
unsigned long n1, n2;
|
||||
char *endp;
|
||||
|
||||
if (!a && !b)
|
||||
return 0; /* Both are NULL, they are identical. */
|
||||
if (!a || !b)
|
||||
return 1; /* One is NULL, they are not identical. */
|
||||
if (*a != '(' || *b != '(')
|
||||
log_bug ("invalid S-exp in cmp_simple_canon_sexp\n");
|
||||
|
||||
a++;
|
||||
n1 = strtoul (a, &endp, 10);
|
||||
a = endp;
|
||||
b++;
|
||||
n2 = strtoul (b, &endp, 10);
|
||||
b = endp;
|
||||
|
||||
if (*a != ':' || *b != ':' )
|
||||
log_bug ("invalid S-exp in cmp_simple_canon_sexp\n");
|
||||
if (n1 != n2)
|
||||
return 1; /* Not the same. */
|
||||
|
||||
for (a++, b++; n1; n1--, a++, b++)
|
||||
if (*a != *b)
|
||||
return 1; /* Not the same. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Create a simple S-expression from the hex string at LIBNE. Returns
|
||||
a newly allocated buffer with that canonical encoded S-expression
|
||||
or NULL in case of an error. On return the number of characters
|
||||
scanned in LINE will be stored at NSCANNED. This fucntions stops
|
||||
converting at the first character not representing a hexdigit. Odd
|
||||
numbers of hex digits are allowed; a leading zero is then
|
||||
assumed. If no characters have been found, NULL is returned.*/
|
||||
unsigned char *
|
||||
make_simple_sexp_from_hexstr (const char *line, size_t *nscanned)
|
||||
{
|
||||
size_t n, len;
|
||||
const char *s;
|
||||
unsigned char *buf;
|
||||
unsigned char *p;
|
||||
char numbuf[50];
|
||||
|
||||
for (n=0, s=line; hexdigitp (s); s++, n++)
|
||||
;
|
||||
if (nscanned)
|
||||
*nscanned = n;
|
||||
if (!n)
|
||||
return NULL;
|
||||
len = ((n+1) & ~0x01)/2;
|
||||
sprintf (numbuf, "(%u:", (unsigned int)len);
|
||||
buf = xtrymalloc (strlen (numbuf) + len + 1 + 1);
|
||||
if (!buf)
|
||||
return NULL;
|
||||
p = stpcpy (buf, numbuf);
|
||||
s = line;
|
||||
if ((n&1))
|
||||
{
|
||||
*p++ = xtoi_1 (s);
|
||||
s++;
|
||||
n--;
|
||||
}
|
||||
for (; n > 1; n -=2, s += 2)
|
||||
*p++ = xtoi_2 (s);
|
||||
*p++ = ')';
|
||||
*p = 0; /* (Not really neaded.) */
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
|
|
@ -123,6 +123,9 @@ gpg_error_t b64enc_finish (struct b64state *state);
|
|||
/*-- sexputil.c */
|
||||
gpg_error_t keygrip_from_canon_sexp (const unsigned char *key, size_t keylen,
|
||||
unsigned char *grip);
|
||||
int cmp_simple_canon_sexp (const unsigned char *a, const unsigned char *b);
|
||||
unsigned char *make_simple_sexp_from_hexstr (const char *line,
|
||||
size_t *nscanned);
|
||||
|
||||
/*-- homedir. c --*/
|
||||
const char *default_homedir (void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue