aboutsummaryrefslogtreecommitdiffstats
path: root/g10 (follow)
Commit message (Collapse)AuthorAgeFilesLines
* gpg: Fix a practical hang after use of --faked-system-time.Werner Koch2015-10-012-8/+17
| | | | | | | * g10/sign.c (update_keysig_packet): Bail out if we would need to long for a new timestamp. Signed-off-by: Werner Koch <[email protected]>
* gpg: Print more info with "check selfsig".Werner Koch2015-10-011-0/+17
| | | | | * g10/keyedit.c (print_and_check_one_sig): Print more Some sigsub packets.
* gpg: Add debug helper to --edit-keys's check sub-command.Werner Koch2015-10-011-15/+35
| | | | | | | | | | | | | * g10/keyedit.c (print_and_check_one_sig): Add arg "extended" and print an asterisk for the chosen selfsig. (check_all_keysigs): Add arg "only_selfsig" (keyedit_menu) <cmdCHECK>: Add optional arg "selfsig". -- Using "check selfsig" prints only the self-signatures and indicates the chosen selfsig with an asterisk. Signed-off-by: Werner Koch <[email protected]>
* g10: Remove unused struct cmp_help_context_s.Neal H. Walfield2015-09-291-6/+0
| | | | | | | * g10/sig-check.c (struct cmp_help_context_s) Remove unused struct. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Avoid an unnecessary copy.Neal H. Walfield2015-09-291-4/+20
| | | | | | | | | * g10/sig-check.c (signature_check2): Avoid copying PK to RET_PK. Instead, directly use the provided storage. If none is provided allocate some. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* agent: RSA signature verification by gpg-agent.NIIBE Yutaka2015-09-291-30/+0
| | | | | | | | | | | | * g10/sign.c (do_sign): Let verify signature by gpg-agent. * agent/pksign.c (agent_pksign_do): Call gcry_pk_verify for RSA. -- RSA signature verification should be done to prevent attacks against RSA CRT implementations and not to return invalid signature to adversary. Newer libgcrypt does so. For older libgcrypt and smartcards, gpg-agent does signature verification.
* gpg: Report a conflict between honor-keyserver-url and TOR.Werner Koch2015-09-181-0/+16
| | | | | | | | | | | | | | | | | * g10/call-dirmngr.c (create_context): Send option and print a verbose error. -- It is in general a bad idea to use honor-keyserver-url but if Dirmngr is running in TOR mode we should not allow this option at all. We let Dirmngr know about the use of this option and let Dirmngr tell use whether TOR mode is active so that we can print a hint to disable that keyserver option. A future extension in gpgconf may disable that option directly but a user may still override that and thus we better check. Signed-off-by: Werner Koch <[email protected]>
* gpg: Fix skip function dummy parameter.Werner Koch2015-09-161-2/+2
| | | | | | | | | | * g10/trustdb.c (search_skipfnc): Fix dummy argument -- This is required due to the prototype change in commit 9acbeac23668a1d0dabca27d7825430d76e095c2 Signed-off-by: Werner Koch <[email protected]>
* gpg: Change last commit to avoid extra translations.Werner Koch2015-09-161-4/+20
| | | | | | | * g10/keyedit.c (keyedit_menu): Do not print usage hints in expert mode. Signed-off-by: Werner Koch <[email protected]>
* g10: Improve error message.Neal H. Walfield2015-09-161-4/+4
| | | | | | | | * g10/keyedit.c (keyedit_menu): When complaining that a user ID or key must be selected, indicate what command to use to do this. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Be more careful when merging self-signed data.Neal H. Walfield2015-09-161-3/+21
| | | | | | | | | | | * g10/getkey.c (merge_selfsigs_main): Stop looking for self-signed data belonging to the public key when we encounter an attribute packet or a subkey packet, not just a user id packet. When looking for self-signed data belonging to a user id packet, stop when we see a user attribute packet. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify some complicated boolean expressions.Neal H. Walfield2015-09-161-8/+29
| | | | | | | * g10/getkey.c (finish_lookup): Simplify logic. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Also mark revoked and expired keys as unusable.Neal H. Walfield2015-09-161-2/+6
| | | | | | | | * g10/getkey.c (skip_unusable): Also mark the key as unusable if it has been revoked or has expired. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Release resources when returning an error in get_seckey.Neal H. Walfield2015-09-161-1/+5
| | | | | | | | * g10/getkey.c (get_seckey): If the key doesn't have a secret key, release *PK. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Improve documentation and comments for getkey.c.Neal H. Walfield2015-09-162-179/+661
| | | | | | | | | * g10/getkey.c: Improve documentation and comments for most functions. Move documentation for public functions from here... * g10/keydb.h: ... to here. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Remove unused function have_any_secret_key.Neal H. Walfield2015-09-161-14/+0
| | | | | | | * g10/getkey.c (have_any_secret_key): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Bring cache semantics closer to non-cache semantics.Neal H. Walfield2015-09-161-3/+7
| | | | | | | | * g10/getkey.c (get_pubkey_fast): When reading from the cache, only consider primary keys. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Break out of the loop earlier.Neal H. Walfield2015-09-161-6/+9
| | | | | | | | | | * g10/getkey.c (have_secret_key_with_kid): Once we find the relevent key or subkey, stop searching. -- Signed-off-by: Neal H. Walfield <[email protected]>. Only a single key or subkey will ever be selected per keyblock.
* g10: Don't skip legacy keys if the search mode is KEYDB_SEARCH_MODE_NEXTNeal H. Walfield2015-09-161-1/+2
| | | | | | | | | | | | | * g10/getkey.c (lookup): Also don't skip legacy keys if the search mode is KEYDB_SEARCH_MODE_NEXT. -- Signed-off-by: Neal H. Walfield <[email protected]>. We currently don't skip keys if the search mode is KEYDB_SEARCH_MODE_FIRST. Since we change KEYDB_SEARCH_MODE_FIRST to KEYDB_SEARCH_MODE_NEXT (to avoid a reset), it only makes sense to have the same semantics for KEYDB_SEARCH_MODE_NEXT.
* g10: Remove unused function get_seckeyblock_byfprint.Neal H. Walfield2015-09-162-32/+0
| | | | | | | | * g10/keydb.h (get_seckeyblock_byfprint): Remove prototype. * g10/getkey.c (get_seckeyblock_byfprint): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Remove unused function get_seckey_byfprint.Neal H. Walfield2015-09-162-38/+0
| | | | | | | | * g10/keydb.h (get_seckey_byfprint): Remove prototype. * g10/getkey.c (get_seckey_byfprint): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify get_seckey_byname: it was never called with NAME not NULL.Neal H. Walfield2015-09-163-9/+4
| | | | | | | | | | | | * g10/keydb.h (get_seckey_byname): Rename from this... (get_seckey_default): ... to this. Drop the parameter name. Update users. * g10/getkey.c (get_seckey_byname): Rename from this... (get_seckey_default): ... to this. Drop the parameter name. Drop the code which assumed that NAME is not NULL. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Eliminate the redundant function get_keyblock_byfprint.Neal H. Walfield2015-09-163-33/+1
| | | | | | | | | * g10/keydb.h (get_keyblock_byfprint): Remove prototype. Replace use of this function with get_pubkey_byfprint. * g10/getkey.c (get_pubkey_byname): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify semantics of get_pubkey_byname.Neal H. Walfield2015-09-161-8/+6
| | | | | | | | | | | * g10/getkey.c (get_pubkey_byname): If R_KEYBLOCK is not NULL, return the keyblock in R_KEYBLOCK independent of whether PK is set or not. -- Signed-off-by: Neal H. Walfield <[email protected]>. Currently, no caller invokes get_pubkey_byname with PK==NULL and R_KEYBLOCK != NULL. Thus, this change does not change any behavior.
* g10: Eliminate the redundant function get_pubkey_byname.Neal H. Walfield2015-09-161-30/+2
| | | | | | | | * g10/getkey.c (get_pubkey_byname): Remove function. (lookup): Replace use of get_pubkey_byname by get_pubkey_byfprint. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Eliminate the redundant function get_pubkey_end.Neal H. Walfield2015-09-163-22/+14
| | | | | | | | | * g10/keydb.h (get_pubkey_end): Remove declaration. Replace use of function with getkey_end. * g10/getkey.c (get_pubkey_byname): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Eliminate the redundant function get_pubkey_next.Neal H. Walfield2015-09-163-8/+1
| | | | | | | | | | * g10/keydb.h (get_pubkey_next): Remove prototype. * g10/getkey.c (get_pubkey_next): Remove function. * g10/keylist.c (locate_one): Use getkey_next instead of get_pubkey_next. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* kbx: Change skipfnc's prototype so that we can provide all information.Neal H. Walfield2015-09-162-11/+22
| | | | | | | | | | | | | | | | * kbx/keybox-search-desc.h (struct keydb_search_desc.skipfnc): Change third parameter to be the index of the user id packet in the keyblock rather than the packet itself. Update users. -- Signed-off-by: Neal H. Walfield <[email protected]>. The keybox code doesn't work directly with keyblocks. As such, the matched user packet is not readily available to pass to DESC[n].SKIPFNC. But, we do know the index of the user id packet that matched. Thus, pass that instead. If the skip function needs the user id packet, it can use the key id to look up the key block and find the appropriate packet.
* g10: Remove unused prototype (get_pubkey_byfpr).Neal H. Walfield2015-09-161-1/+0
| | | | | | | * g10/keydb.h (get_pubkey_byfpr): Remove unused prototype. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Remove unused function (get_pubkey_bynames).Neal H. Walfield2015-09-162-18/+1
| | | | | | | | * g10/keydb.h (get_pubkey_bynames): Remove prototype. * g10/getkey.c (get_pubkey_bynames): Remove function. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify code. Turn struct getkey_ctx_s.found_key into an argumentNeal H. Walfield2015-09-161-30/+48
| | | | | | | | | | | | | * g10/getkey.c (struct getkey_ctx_s): Remove field found_key. (lookup): Add argument ret_found_key. If not NULL, set it to the found key. Update callers. (pk_from_block): Add argument found_key. Use it instead of CTX->FOUND_KEY. Update callers. (finish_lookup): Return a KBNODE (the found key) instead of an int. Don't set CTX->FOUND_KEY. Return the found key instead. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Remove unused field struct getkey_ctx_s.kbpos.Neal H. Walfield2015-09-161-2/+0
| | | | | | | | * g10/getkey.c (struct getkey_ctx_s): Remove field kbpos. (getkey_end): Don't clear CTX->KBPOS. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify code: remove field struct getkey_ctx_s.keyblock.Neal H. Walfield2015-09-161-13/+12
| | | | | | | | | | * g10/getkey.c (struct getkey_ctx_s): Remove field keyblock. (finish_lookup): Add parameter keyblock. Update caller to pass this. (lookup): Add new local variable keyblock. Use this instead of ctx->keyblock for referencing the keyblock. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Fix make distcheck problem.Werner Koch2015-09-103-3/+36
| | | | | | | | | | | | | | | | * g10/test.c: Include string.h. (prepend_srcdir): New. Taken from Libgcrypt. (test_free): New. * g10/t-keydb.c (do_test): Malloc the filename. * g10/Makefile.am (AM_CPPFLAGS): Remove -DSOURCE_DIR (EXTRA_DIST): Add t-keydb-keyring.kbx. -- Using SOURCE_DIR should in general work but we have seen problems when doing this in Libgcrypt. Using the srcdir variable gives us anyway more flexibility and aligns with the way we do it in tests/openpgp. Signed-off-by: Werner Koch <[email protected]>
* g10: Improve portability of the new test driver.Werner Koch2015-09-102-9/+27
| | | | | | | | | | | | | | | | | | | | * g10/test.c: Include stdio.h and stdlib.h. (verbose): New. (print_results): Rename to exit_tests. (main): Remove atexit and call exit_tests. Set verbose. (ASSERT, ABORT): Call exit_tests instead of exit. -- Calling exit from an exit handler is undefined behaviour. It works on Linux but other systems will hit an endless loop. That is indeed unfortunate but we can't do anything about it. Calling _exit() would be possible but that may lead to other problems. Thus we change to call a custom exit function :-(. Using "make check verbose=1" is supported by tests/openpgp and thus we add the same mechanism here. Signed-off-by: Werner Koch <[email protected]>
* doc: Minor comment fixes.Werner Koch2015-09-091-5/+6
| | | | --
* g10: Remove unused field req_algo.Neal H. Walfield2015-09-022-5/+0
| | | | | | | | | | * g10/packet.h (PKT_public_key): Remove unused field req_algo. Remove users. * g10/getkey.c (struct getkey_ctx_s): Remove unused field req_algo. Remove users. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Use a symbolic constant instead of a literal.Neal H. Walfield2015-09-021-10/+13
| | | | | | | | | | | * g10/trustdb.c (KEY_HASH_TABLE_SIZE): Define. (new_key_hash_table): Use KEY_HASH_TABLE_SIZE instead of a literal. (release_key_hash_table): Likewise. (test_key_hash_table): Likewise. (add_key_hash_table): Likewise. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Add test for keydb as well as new testing infrastructure.Neal H. Walfield2015-09-025-3/+647
| | | | | | | | | | | | | | | * g10/Makefile.am (EXTRA_DIST): Add test.c. (AM_CPPFLAGS): Add -DSOURCE_DIR="\"$(srcdir)\"". (module_tests): Add t-keydb. (t_keydb_SOURCES): New variable. (t_keydb_LDADD): Likewise. * g10/t-keydb.c: New file. * g10/t-keydb-keyring.kbx: New file. * g10/test-stubs.c: New file. * g10/test.c: New file. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Make the keyblock cache per-handle rather than global.Neal H. Walfield2015-09-021-54/+57
| | | | | | | | | | | | * g10/keydb.c (keyblock_cache): Don't declare this variable. Instead... (struct keyblock_cache): ... turn its type into this first class object... (struct keydb_handle): ... and instantiate it once per database handle. Update all users. (keydb_rebuild_caches): Don't invalidate the keyblock cache. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: If iobuf_seek fails when reading from the cache, do a hard read.Neal H. Walfield2015-09-021-11/+19
| | | | | | | | | * g10/keydb.c (keydb_get_keyblock): If the iobuf_seek fails when reading from the cache, then simply clear the cache and try reading from the database. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* gpg: Remove option --no-sig-create-check.Werner Koch2015-09-013-6/+7
| | | | | | | | | * g10/gpg.c (opts): Remove --no-sig-create-check. * g10/options.h (struct opt): Remove field no_sig_create_check. * g10/sign.c (do_sign): Always check unless it is RSA and we are using Libgcrypt 1.7. Signed-off-by: Werner Koch <[email protected]>
* g10: Don't leak memory if we fail to initialize a new database handle.Neal H. Walfield2015-08-311-9/+12
| | | | | | | | * g10/keydb.c (keydb_new): If we fail to open a keyring or keybox correctly release all resources. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Improve interface documentation of the keydb API.Neal H. Walfield2015-08-312-69/+223
| | | | | | | | | * g10/keydb.c: Improve code comments and documentation of internal interfaces. Improve documentation of public APIs and move that to... * g10/keydb.h: ... this file. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Don't cache search results if the search didn't scan the whole DB.Neal H. Walfield2015-08-311-1/+10
| | | | | | | | | | | * g10/keydb.c (struct keydb_handle): Add new field is_reset. (keydb_new): Initialize hd->is_reset to 1. (keydb_locate_writable): Set hd->is_reset to 1. (keydb_search): Set hd->is_reset to 0. Don't cache a key not found if the search started from the beginning of the database. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Have keydb_search_first call keydb_search_reset before searching.Neal H. Walfield2015-08-311-0/+4
| | | | | | | | | | | | * g10/keydb.c (keydb_search_first): Reset the handle before starting the search. -- Signed-off-by: Neal H. Walfield <[email protected]>. This bug hasn't shown up yet in practice, because keydb_search_first is always called immediately after a keydb_new. This changes cleans up the semantics and will hopefully prevent future bugs.
* g10: Remove unused parameter.Neal H. Walfield2015-08-314-6/+4
| | | | | | | | * g10/keydb.h (keydb_locate_writable): Remove unused parameter reserved. Update users. -- Signed-off-by: Neal H. Walfield <[email protected]>.
* g10: Simplify cache. Only include data that is actually used.Neal H. Walfield2015-08-262-64/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | * g10/keydb.c (struct kid_list_s): Rename from this... (struct kid_not_found_cache_bucket): ... to this. Update users. Remove field state. (kid_list_t): Remove type. (KID_NOT_FOUND_CACHE_BUCKETS): Define. Use this instead of a literal. (kid_found_table): Rename from this... (kid_not_found_cache_bucket): ... to this. Update users. (kid_found_table_count): Rename from this... (kid_not_found_cache_count): ... to this. Update users. (kid_not_found_p): Only return whether a key with the specified key id is definitely not in the database. (kid_not_found_insert): Remove parameter found. Update callers. (keydb_search): Only insert a key id in the not found cache if it is not found. Rename local variable once_found to already_in_cache. -- Signed-off-by: Neal H. Walfield <[email protected]>. Commit e0873a33 started tracking whether key ids where definitely in the database. This information is, however, never used and thus just unnecessarily inflates the cache. This patch effectively reverts that change (however, e0873a33 contains two separate changes and this only reverts that change).
* gpg: Emit ERROR status for key signing failures.Werner Koch2015-08-251-0/+7
| | | | | | | | | | | | * g10/keyedit.c (sign_uids): Write an ERROR status for a signing failure. (menu_adduid, menu_addrevoker, menu_revsig): Ditto. (menu_revuid, menu_revkey, menu_revsubkey): Ditto. -- This change helps GPA to show better error messages. Signed-off-by: Werner Koch <[email protected]>
* gpg: Print a new FAILURE status after most commands.Werner Koch2015-08-254-23/+103
| | | | | | | | | | | | | | | | | | * common/status.h (STATUS_FAILURE): New. * g10/cpr.c (write_status_failure): New. * g10/gpg.c (main): Call write_status_failure for all commands which print an error message here. * g10/call-agent.c (start_agent): Print an STATUS_ERROR if we can't set the pinentry mode. -- This status line can be used similar to the error code returned by commands send over the Assuan interface in gpgsm. We don't emit them in gpgsm because there we already have that Assuan interface to return proper error code. This change helps GPGME to return better error codes. Signed-off-by: Werner Koch <[email protected]>