mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-23 15:07:03 +01:00
gpg: Add accessor & utility functions for pk->keyid and pk->main_keyid.
* g10/keydb.h (keyid_cmp): New function. * g10/keyid.c (pk_keyid): New function. (pk_main_keyid): New function. (keyid_copy): New function. (pk_keyid_str): New function. * g10/packet.h (PKT_public_key): Update comments for main_keyid and keyid. -- Signed-off-by: Neal H. Walfield <neal@g10code.com> Before accessing pk->keyid, it is necessary to call keyid_from_pk (pk, NULL) to ensure that pk->keyid is valid. Because it is easy to forget to do this, these accessor functions take care of it.
This commit is contained in:
parent
7e7f35a2d7
commit
c45633a571
34
g10/keydb.h
34
g10/keydb.h
@ -1,7 +1,7 @@
|
||||
/* keydb.h - Key database
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
* 2006, 2010 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2015 g10 Code GmbH
|
||||
* Copyright (C) 2015, 2016 g10 Code GmbH
|
||||
*
|
||||
* This file is part of GnuPG.
|
||||
*
|
||||
@ -396,12 +396,44 @@ char *pubkey_string (PKT_public_key *pk, char *buffer, size_t bufsize);
|
||||
u32 v3_keyid (gcry_mpi_t a, u32 *ki);
|
||||
void hash_public_key( gcry_md_hd_t md, PKT_public_key *pk );
|
||||
char *format_keyid (u32 *keyid, int format, char *buffer, int len);
|
||||
|
||||
/* Return PK's keyid. The memory is owned by PK. */
|
||||
u32 *pk_keyid (PKT_public_key *pk);
|
||||
|
||||
/* Return the keyid of the primary key associated with PK. The memory
|
||||
is owned by PK. */
|
||||
u32 *pk_main_keyid (PKT_public_key *pk);
|
||||
|
||||
/* Order A and B. If A < B then return -1, if A == B then return 0,
|
||||
and if A > B then return 1. */
|
||||
static int GPGRT_ATTR_UNUSED
|
||||
keyid_cmp (const u32 *a, const u32 *b)
|
||||
{
|
||||
if (a[0] < b[0])
|
||||
return -1;
|
||||
if (a[0] > b[0])
|
||||
return 1;
|
||||
if (a[1] < b[1])
|
||||
return -1;
|
||||
if (a[1] > b[1])
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy the keyid in SRC to DEST and return DEST. */
|
||||
u32 *keyid_copy (u32 *dest, const u32 *src);
|
||||
|
||||
size_t keystrlen(void);
|
||||
const char *keystr(u32 *keyid);
|
||||
const char *keystr_with_sub (u32 *main_kid, u32 *sub_kid);
|
||||
const char *keystr_from_pk(PKT_public_key *pk);
|
||||
const char *keystr_from_pk_with_sub (PKT_public_key *main_pk,
|
||||
PKT_public_key *sub_pk);
|
||||
|
||||
/* Return PK's key id as a string using the default format. PK owns
|
||||
the storage. */
|
||||
const char *pk_keyid_str (PKT_public_key *pk);
|
||||
|
||||
const char *keystr_from_desc(KEYDB_SEARCH_DESC *desc);
|
||||
u32 keyid_from_pk( PKT_public_key *pk, u32 *keyid );
|
||||
u32 keyid_from_sig( PKT_signature *sig, u32 *keyid );
|
||||
|
55
g10/keyid.c
55
g10/keyid.c
@ -2,6 +2,7 @@
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2003,
|
||||
* 2004, 2006, 2010 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2014 Werner Koch
|
||||
* Copyright (C) 2016 g10 Code GmbH
|
||||
*
|
||||
* This file is part of GnuPG.
|
||||
*
|
||||
@ -274,6 +275,52 @@ v3_keyid (gcry_mpi_t a, u32 *ki)
|
||||
}
|
||||
|
||||
|
||||
/* Return PK's keyid. The memory is owned by PK. */
|
||||
u32 *
|
||||
pk_keyid (PKT_public_key *pk)
|
||||
{
|
||||
keyid_from_pk (pk, NULL);
|
||||
|
||||
/* Uncomment this for help tracking down bugs related to keyid or
|
||||
main_keyid not being set correctly. */
|
||||
#if 0
|
||||
if (! (pk->main_keyid[0] || pk->main_keyid[1]))
|
||||
log_bug ("pk->main_keyid not set!\n");
|
||||
if (keyid_cmp (pk->keyid, pk->main_keyid) == 0
|
||||
&& ! pk->flags.primary)
|
||||
log_bug ("keyid and main_keyid are the same, but primary flag not set!\n");
|
||||
if (keyid_cmp (pk->keyid, pk->main_keyid) != 0
|
||||
&& pk->flags.primary)
|
||||
log_bug ("keyid and main_keyid are different, but primary flag set!\n");
|
||||
#endif
|
||||
|
||||
return pk->keyid;
|
||||
}
|
||||
|
||||
/* Return the keyid of the primary key associated with PK. The memory
|
||||
is owned by PK. */
|
||||
u32 *
|
||||
pk_main_keyid (PKT_public_key *pk)
|
||||
{
|
||||
/* Uncomment this for help tracking down bugs related to keyid or
|
||||
main_keyid not being set correctly. */
|
||||
#if 0
|
||||
if (! (pk->main_keyid[0] || pk->main_keyid[1]))
|
||||
log_bug ("pk->main_keyid not set!\n");
|
||||
#endif
|
||||
|
||||
return pk->main_keyid;
|
||||
}
|
||||
|
||||
/* Copy the keyid in SRC to DEST and return DEST. */
|
||||
u32 *
|
||||
keyid_copy (u32 *dest, const u32 *src)
|
||||
{
|
||||
dest[0] = src[0];
|
||||
dest[1] = src[1];
|
||||
return dest;
|
||||
}
|
||||
|
||||
char *
|
||||
format_keyid (u32 *keyid, int format, char *buffer, int len)
|
||||
{
|
||||
@ -396,6 +443,14 @@ keystr_from_pk_with_sub (PKT_public_key *main_pk, PKT_public_key *sub_pk)
|
||||
}
|
||||
|
||||
|
||||
/* Return PK's key id as a string using the default format. PK owns
|
||||
the storage. */
|
||||
const char *
|
||||
pk_keyid_str (PKT_public_key *pk)
|
||||
{
|
||||
return keystr (pk_keyid (pk));
|
||||
}
|
||||
|
||||
|
||||
const char *
|
||||
keystr_from_desc(KEYDB_SEARCH_DESC *desc)
|
||||
|
@ -279,8 +279,12 @@ typedef struct
|
||||
byte pubkey_usage; /* for now only used to pass it to getkey() */
|
||||
byte req_usage; /* hack to pass a request to getkey() */
|
||||
u32 has_expired; /* set to the expiration date if expired */
|
||||
u32 main_keyid[2]; /* keyid of the primary key */
|
||||
u32 keyid[2]; /* calculated by keyid_from_pk() */
|
||||
/* keyid of the primary key. Never access this value directly.
|
||||
Instead, use pk_main_keyid(). */
|
||||
u32 main_keyid[2];
|
||||
/* keyid of this key. Never access this value directly! Instead,
|
||||
use pk_keyid(). */
|
||||
u32 keyid[2];
|
||||
prefitem_t *prefs; /* list of preferences (may be NULL) */
|
||||
struct
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user