mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
gpg: New options --recipient-file and --hidden-recipient-file.
* g10/gpg.c (oRecipientFile, oHiddenRecipientFile): New. (opts): Add options --recipient-file and --hidden-recipient-file. (main): Implement them. Also remove duplicate code from similar options. * g10/keydb.h (PK_LIST_FROM_FILE): New. (PK_LIST_SHIFT): Bump up. * g10/pkclist.c (expand_group): Take care of PK_LIST_FROM_FILE. (find_and_check_key): Add and implement arg FROM_FILE. (build_pk_list): Pass new value for new arg. * g10/getkey.c (get_pubkey_fromfile): New. * g10/gpgv.c (read_key_from_file): New stub. * g10/test-stubs.c (read_key_from_file): New stub. * g10/server.c (cmd_recipient): Add flag --file. * g10/import.c (read_key_from_file): New. * tests/openpgp/defs.scm (key-file1): New. (key-file2): New. * tests/openpgp/setup.scm: Add their private keys and import the key-file1. * tests/openpgp/encrypt.scm: Add new test. -- Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
073be51a86
commit
a479804c86
13 changed files with 330 additions and 82 deletions
54
g10/getkey.c
54
g10/getkey.c
|
@ -1,7 +1,7 @@
|
|||
/* getkey.c - Get a key from the database
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
* 2007, 2008, 2010 Free Software Foundation, Inc.
|
||||
* Copyright (C) 2015 g10 Code GmbH
|
||||
* Copyright (C) 2015, 2016 g10 Code GmbH
|
||||
*
|
||||
* This file is part of GnuPG.
|
||||
*
|
||||
|
@ -143,6 +143,11 @@ static void merge_selfsigs (kbnode_t keyblock);
|
|||
static int lookup (getkey_ctx_t ctx,
|
||||
kbnode_t *ret_keyblock, kbnode_t *ret_found_key,
|
||||
int want_secret);
|
||||
static kbnode_t finish_lookup (kbnode_t keyblock,
|
||||
unsigned int req_usage, int want_exact,
|
||||
unsigned int *r_flags);
|
||||
static void print_status_key_considered (kbnode_t keyblock, unsigned int flags);
|
||||
|
||||
|
||||
#if 0
|
||||
static void
|
||||
|
@ -1454,6 +1459,53 @@ get_pubkey_byname (ctrl_t ctrl, GETKEY_CTX * retctx, PKT_public_key * pk,
|
|||
}
|
||||
|
||||
|
||||
/* Get a public key from a file.
|
||||
*
|
||||
* PK is the buffer to store the key. The caller needs to make sure
|
||||
* that PK->REQ_USAGE is valid. PK->REQ_USAGE is passed through to
|
||||
* the lookup function and is a mask of PUBKEY_USAGE_SIG,
|
||||
* PUBKEY_USAGE_ENC and PUBKEY_USAGE_CERT. If this is non-zero, only
|
||||
* keys with the specified usage will be returned.
|
||||
*
|
||||
* FNAME is the file name. That file should contain exactly one
|
||||
* keyblock.
|
||||
*
|
||||
* This function returns 0 on success. Otherwise, an error code is
|
||||
* returned. In particular, GPG_ERR_NO_PUBKEY is returned if the key
|
||||
* is not found.
|
||||
*
|
||||
* The self-signed data has already been merged into the public key
|
||||
* using merge_selfsigs. The caller must release the content of PK by
|
||||
* calling release_public_key_parts (or, if PK was malloced, using
|
||||
* free_public_key).
|
||||
*/
|
||||
gpg_error_t
|
||||
get_pubkey_fromfile (ctrl_t ctrl, PKT_public_key *pk, const char *fname)
|
||||
{
|
||||
gpg_error_t err;
|
||||
kbnode_t keyblock;
|
||||
kbnode_t found_key;
|
||||
unsigned int infoflags;
|
||||
|
||||
err = read_key_from_file (ctrl, fname, &keyblock);
|
||||
if (!err)
|
||||
{
|
||||
/* Warning: node flag bits 0 and 1 should be preserved by
|
||||
* merge_selfsigs. FIXME: Check whether this still holds. */
|
||||
merge_selfsigs (keyblock);
|
||||
found_key = finish_lookup (keyblock, pk->req_usage, 0, &infoflags);
|
||||
print_status_key_considered (keyblock, infoflags);
|
||||
if (found_key)
|
||||
pk_from_block (pk, keyblock, found_key);
|
||||
else
|
||||
err = gpg_error (GPG_ERR_UNUSABLE_PUBKEY);
|
||||
}
|
||||
|
||||
release_kbnode (keyblock);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
/* Lookup a key with the specified fingerprint.
|
||||
*
|
||||
* If PK is not NULL, the public key of the first result is returned
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue