summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2021-02-09 16:00:25 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2021-02-09 16:00:25 +0900
commit28a027f4354e794ee841d4e8edaf9b5eed8a4a87 (patch)
treea06d8f6cfec15f43d495c13bd12bb9960836e789
parent7c0714a17893a9adad202982ad5b70f69f00b195 (diff)
downloadgpg2-28a027f4354e794ee841d4e8edaf9b5eed8a4a87.tar.gz
gpg2-28a027f4354e794ee841d4e8edaf9b5eed8a4a87.tar.bz2
gpg2-28a027f4354e794ee841d4e8edaf9b5eed8a4a87.zip
Imported Upstream version 2.2.0upstream/2.2.0
-rw-r--r--Makefile.am2
-rw-r--r--NEWS14
-rw-r--r--README25
-rw-r--r--agent/agent.h2
-rw-r--r--autogen.rc4
-rw-r--r--build-aux/speedo.mk4
-rw-r--r--configure.ac20
-rw-r--r--doc/gpg.texi2
-rw-r--r--doc/whats-new-in-2.1.txt49
-rw-r--r--g10/gpg.c19
-rw-r--r--g10/keyedit.c5
-rw-r--r--g10/sig-check.c141
-rw-r--r--g10/trustdb.c3
-rw-r--r--po/ja.po34
-rw-r--r--po/nb.po1576
-rw-r--r--po/ru.po93
-rw-r--r--scd/app-openpgp.c4
-rw-r--r--tests/gpgscm/scheme.c14
-rw-r--r--tests/openpgp/Makefile.am24
-rw-r--r--tests/openpgp/README43
-rw-r--r--tests/openpgp/defs.scm24
-rwxr-xr-xtests/openpgp/tofu.scm24
-rwxr-xr-xtests/openpgp/trust-pgp-1.scm76
-rwxr-xr-xtests/openpgp/trust-pgp-2.scm39
-rwxr-xr-xtests/openpgp/trust-pgp-3.scm31
-rwxr-xr-xtests/openpgp/trust-pgp-4.scm37
-rw-r--r--tests/openpgp/trust-pgp/alice.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/bobby.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/carol.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/common.scm66
-rw-r--r--tests/openpgp/trust-pgp/david.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/frank.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/grace.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/heidi.sec.asc11
-rw-r--r--tests/openpgp/trust-pgp/scenario1.asc75
-rw-r--r--tests/openpgp/trust-pgp/scenario2.asc70
-rw-r--r--tests/openpgp/trust-pgp/scenario3.asc58
-rw-r--r--tests/openpgp/trust-pgp/scenario4.asc84
-rw-r--r--tools/gpgconf-comp.c16
-rw-r--r--tools/gpgconf.c2
40 files changed, 1198 insertions, 1559 deletions
diff --git a/Makefile.am b/Makefile.am
index b972cff..c01c0a8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -99,7 +99,7 @@ dist-hook: gen-ChangeLog
distcheck-hook:
set -e; ( \
- pref="#+macro: gnupg21_" ;\
+ pref="#+macro: gnupg22_" ;\
reldate="$$(date -u +%Y-%m-%d)" ;\
echo "$${pref}ver $(PACKAGE_VERSION)" ;\
echo "$${pref}date $${reldate}" ;\
diff --git a/NEWS b/NEWS
index c3a7853..345fe23 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+Noteworthy changes in version 2.2.0 (2017-08-28)
+------------------------------------------------
+
+ This is the new long term stable branch. This branch will only see
+ bug fixes and no new features.
+
+ * gpg: Reverted change in 2.1.23 so that --no-auto-key-retrieve is
+ again the default.
+
+ * Fixed a few minor bugs.
+
+
Noteworthy changes in version 2.1.23 (2017-08-09)
-------------------------------------------------
@@ -34,6 +46,8 @@ Noteworthy changes in version 2.1.23 (2017-08-09)
* Fixed connection timeout problem under Windows.
+ See-also: gnupg-announce/2017q3/000412.html
+
Noteworthy changes in version 2.1.22 (2017-07-28)
-------------------------------------------------
diff --git a/README b/README
index a9a3eb0..6cd4ddb 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
The GNU Privacy Guard 2
=========================
- Version 2.1
+ Version 2.2
Copyright 1997-2017 Werner Koch
Copyright 1998-2017 Free Software Foundation, Inc.
@@ -25,14 +25,14 @@
GNU General Public License.
Note that the 2.0 series of GnuPG will reach end-of-life on
- 2017-12-31. It is not possible to install a 2.1.x version along
+ 2017-12-31. It is not possible to install a 2.2.x version along
with any 2.0.x version. However, it is possible to install GnuPG
- 1.4 along with a 2.x version.
+ 1.4 along with any 2.x version.
* BUILD INSTRUCTIONS
- GnuPG 2.1 depends on the following GnuPG related packages:
+ GnuPG 2.2 depends on the following GnuPG related packages:
npth (ftp://ftp.gnupg.org/gcrypt/npth/)
libgpg-error (ftp://ftp.gnupg.org/gcrypt/libgpg-error/)
@@ -122,9 +122,9 @@
Add other options as needed.
-* MIGRATION from 1.4 or 2.0 to 2.1
+* MIGRATION from 1.4 or 2.0 to 2.2
- The major change in 2.1 is gpg-agent taking care of the OpenPGP
+ The major change in 2.2 is gpg-agent taking care of the OpenPGP
secret keys (those managed by GPG). The former file "secring.gpg"
will not be used anymore. Newly generated keys are stored in the
agent's key store directory "~/.gnupg/private-keys-v1.d/". The
@@ -134,7 +134,7 @@
Note that gpg-agent now uses a fixed socket. All tools will start
the gpg-agent as needed. The formerly used environment variable
- GPG_AGENT_INFO is ignored by 2.1. The SSH_AUTH_SOCK environment
+ GPG_AGENT_INFO is ignored by 2.2. The SSH_AUTH_SOCK environment
variable should be set to a fixed value.
The Dirmngr is now part of GnuPG proper and also used to access
@@ -142,6 +142,9 @@
use of the GnuPG directories. Dirmngr is started by gpg or gpgsm as
needed. There is no more need to install a separate Dirmngr package.
+ All changes introduced with GnuPG 2.2 have been developed in the 2.1
+ series of releases. See the respective entries in the file NEWS.
+
* RECOMMENDATIONS
** Socket directory
@@ -193,13 +196,13 @@
* HOW TO GET MORE INFORMATION
- A description of new features and changes in version 2.1 can be
+ A description of new features and changes since version 2.1 can be
found in the file "doc/whats-new-in-2.1.txt" and online at
"https://gnupg.org/faq/whats-new-in-2.1.html" .
- The primary WWW page is "https://www.gnupg.org"
+ The primary WWW page is "https://gnupg.org"
or using Tor "http://ic6au7wa3f6naxjq.onion"
- The primary FTP site is "ftp://ftp.gnupg.org/gcrypt/"
+ The primary FTP site is "https://gnupg.org/ftp/gcrypt/"
See [[https://gnupg.org/download/mirrors.html]] for a list of
mirrors and use them if possible. You may also find GnuPG mirrored
@@ -229,7 +232,7 @@
https://www.gnupg.org/documentation/mailing-lists.html for archives
of the mailing lists.
- Please direct bug reports to [[http://bugs.gnupg.org]] or post them
+ Please direct bug reports to [[https://bugs.gnupg.org]] or post them
direct to the mailing list <gnupg-devel@gnupg.org>.
Please direct questions about GnuPG to the users mailing list or one
diff --git a/agent/agent.h b/agent/agent.h
index 815d9a5..f5df75e 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -320,7 +320,7 @@ typedef int (*lookup_ttl_t)(const char *hexgrip);
and uses that to translate a string according to the locale set for
the connection. The macro LunderscoreIMPL is used by i18n to
actually define the inline function when needed. */
-#ifdef ENABLE_NLS
+#if defined (ENABLE_NLS) || defined (USE_SIMPLE_GETTEXT)
#define L_(a) agent_Lunderscore (ctrl, (a))
#define LunderscorePROTO \
static inline const char *agent_Lunderscore (ctrl_t ctrl, \
diff --git a/autogen.rc b/autogen.rc
index 3694817..6835929 100644
--- a/autogen.rc
+++ b/autogen.rc
@@ -5,10 +5,10 @@
case "$myhost:$myhostsub" in
w32:ce)
extraoptions="--enable-dirmngr-auto-start --disable-scdaemon "
- extraoptions="$extraoptions --disable-zip --enable-gpg2-is-gpg"
+ extraoptions="$extraoptions --disable-zip"
;;
w32:)
- extraoptions="--enable-gpgtar --enable-gpg2-is-gpg"
+ extraoptions="--enable-gpgtar"
;;
esac
diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk
index f1ec653..b1c6ef8 100644
--- a/build-aux/speedo.mk
+++ b/build-aux/speedo.mk
@@ -276,7 +276,7 @@ endif
# Version numbers of the released packages
gnupg_ver_this = $(shell cat $(topsrc)/VERSION)
-gnupg_ver := $(shell awk '$$1=="gnupg21_ver" {print $$2}' swdb.lst)
+gnupg_ver := $(shell awk '$$1=="gnupg22_ver" {print $$2}' swdb.lst)
libgpg_error_ver := $(shell awk '$$1=="libgpg_error_ver" {print $$2}' swdb.lst)
libgpg_error_sha1:= $(shell awk '$$1=="libgpg_error_sha1" {print $$2}' swdb.lst)
@@ -1187,7 +1187,7 @@ installer: all w32_insthelpers $(w32src)/inst-options.ini $(bdir)/README.txt
define MKSWDB_commands
- ( pref="#+macro: gnupg21_w32_" ;\
+ ( pref="#+macro: gnupg22_w32_" ;\
echo "$${pref}ver $(INST_VERSION)_$(BUILD_DATESTR)" ;\
echo "$${pref}date $(2)" ;\
echo "$${pref}size $$(wc -c <$(1)|awk '{print int($$1/1024)}')k";\
diff --git a/configure.ac b/configure.ac
index 3ff5865..6f945bd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,8 +27,8 @@ min_automake_version="1.14"
# another commit and push so that the git magic is able to work.
m4_define([mym4_package],[gnupg])
m4_define([mym4_major], [2])
-m4_define([mym4_minor], [1])
-m4_define([mym4_micro], [23])
+m4_define([mym4_minor], [2])
+m4_define([mym4_micro], [0])
# To start a new development series, i.e a new major or minor number
# you need to mark an arbitrary commit before the first beta release
@@ -49,6 +49,10 @@ m4_define([mym4_revision_dec], m4_argn(8, mym4_verslist))
m4_esyscmd([echo ]mym4_version[>VERSION])
AC_INIT([mym4_package],[mym4_version], [https://bugs.gnupg.org])
+# When changing the SWDB tag please also adjust the hard coded tags in
+# build-aux/speedo.mk and Makefile.am
+AC_DEFINE_UNQUOTED(GNUPG_SWDB_TAG, "gnupg22", [swdb tag for this branch])
+
NEED_GPG_ERROR_VERSION=1.24
NEED_LIBGCRYPT_API=1
@@ -1860,7 +1864,7 @@ if test "$have_gpg_error" = "no"; then
***
*** You need libgpg-error to build this program.
** This library is for example available at
-*** ftp://ftp.gnupg.org/gcrypt/libgpg-error
+*** https://gnupg.org/ftp/gcrypt/libgpg-error
*** (at least version $NEED_GPG_ERROR_VERSION is required.)
***]])
fi
@@ -1870,7 +1874,7 @@ if test "$have_libgcrypt" = "no"; then
***
*** You need libgcrypt to build this program.
** This library is for example available at
-*** ftp://ftp.gnupg.org/gcrypt/libgcrypt/
+*** https://gnupg.org/ftp/gcrypt/libgcrypt/
*** (at least version $NEED_LIBGCRYPT_VERSION (API $NEED_LIBGCRYPT_API) is required.)
***]])
fi
@@ -1880,7 +1884,7 @@ if test "$have_libassuan" = "no"; then
***
*** You need libassuan to build this program.
*** This library is for example available at
-*** ftp://ftp.gnupg.org/gcrypt/libassuan/
+*** https://gnupg.org/ftp/gcrypt/libassuan/
*** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
***]])
fi
@@ -1890,7 +1894,7 @@ if test "$have_ksba" = "no"; then
***
*** You need libksba to build this program.
*** This library is for example available at
-*** ftp://ftp.gnupg.org/gcrypt/libksba/
+*** https://gnupg.org/ftp/gcrypt/libksba/
*** (at least version $NEED_KSBA_VERSION using API $NEED_KSBA_API is required).
***]])
fi
@@ -1911,7 +1915,7 @@ if test "$have_npth" = "no"; then
*** It is now required to build with support for the
*** New Portable Threads Library (nPth). Please install this
*** library first. The library is for example available at
-*** ftp://ftp.gnupg.org/gcrypt/npth/
+*** https://gnupg.org/ftp/gcrypt/npth/
*** (at least version $NEED_NPTH_VERSION (API $NEED_NPTH_API) is required).
***]])
fi
@@ -1924,7 +1928,7 @@ if test "$require_iconv" = yes; then
*** The system does not provide a working iconv function. Please
*** install a suitable library; for example GNU Libiconv which is
*** available at:
-*** http://ftp.gnu.org/gnu/libiconv/
+*** https://ftp.gnu.org/gnu/libiconv/
***]])
fi
fi
diff --git a/doc/gpg.texi b/doc/gpg.texi
index c71126a..b6a9b2d 100644
--- a/doc/gpg.texi
+++ b/doc/gpg.texi
@@ -1792,7 +1792,7 @@ list. The default is "local,wkd".
@opindex no-auto-key-retrieve
These options enable or disable the automatic retrieving of keys from
a keyserver when verifying signatures made by keys that are not on the
-local keyring. The default is @option{--auto-key-retrieve}.
+local keyring. The default is @option{--no-auto-key-retrieve}.
If the method "wkd" is included in the list of methods given to
@option{auto-key-locate}, the signer's user ID is part of the
diff --git a/doc/whats-new-in-2.1.txt b/doc/whats-new-in-2.1.txt
index 4b7349a..ef8b233 100644
--- a/doc/whats-new-in-2.1.txt
+++ b/doc/whats-new-in-2.1.txt
@@ -6,7 +6,7 @@
━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 2016-07-14
+ 2017-08-28
Table of Contents
@@ -42,11 +42,11 @@ https://gnupg.org/faq/whats-new-in-2.1.html
1 What’s new in GnuPG 2.1
═════════════════════════
- GnuPG version 2.1 comes with a bag of new features which changes some
- things old-timers are used to. This page explains the more important
- ones. It expects that the reader is familiar with GnuPG version 2.0
- and aware that GnuPG consists of /gpg/, /gpgsm/, and /gpg-agent/ as
- its main components.
+ GnuPG version 2.1 (now known as 2.2) comes with a bag of new features
+ which changes some things old-timers are used to. This page explains
+ the more important ones. It expects that the reader is familiar with
+ GnuPG version 2.0 and aware that GnuPG consists of /gpg/, /gpgsm/, and
+ /gpg-agent/ as its main components.
• The file /secring.gpg/ is not anymore used to store the secret keys.
Merging of secret keys is now supported.
@@ -103,8 +103,8 @@ https://gnupg.org/faq/whats-new-in-2.1.html
• The scripts to create a Windows installer are now part of GnuPG.
Now for the detailed description of these new features. Note that the
- examples assume that /gpg/ is installed as /gpg/. Your
- installation may have it installed under the name /gpg2/.
+ examples assume that /gpg/ is installed as /gpg/. Your installation
+ may have it installed under the name /gpg2/.
1.1 Removal of the secret keyring
@@ -477,6 +477,25 @@ https://gnupg.org/faq/whats-new-in-2.1.html
│ uid [ unknown] Sample 2 <me@example.org>
└────
+ Since version 2.1.17 the expiration date of the primary key can be
+ changed directly:
+
+ ┌────
+ │ $ gpg --quick-set-expire 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7 2017-12-31
+ │ $ gpg -K 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7
+ │ sec rsa2048 2016-06-22 [SC] [expires: 2017-12-31]
+ │ 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7
+ │ uid [ultimate] steve.biko@example.net
+ │ ssb rsa2048 2016-06-22 [E]
+ │
+ │ $ gpg --quick-set-expire 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7 none
+ │ $ gpg -K 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7
+ │ sec rsa2048 2016-06-22 [SC]
+ │ 5B83120DB1E3A65AE5A8DCF6AA43F1DCC7FED1B7
+ │ uid [ultimate] steve.biko@example.net
+ │ ssb rsa2048 2016-06-22 [E]
+ └────
+
1.6 Improved Pinentry support
─────────────────────────────
@@ -510,9 +529,9 @@ https://gnupg.org/faq/whats-new-in-2.1.html
at login time and use an environment variable (`GPG_AGENT_INFO') to
tell the other GnuPG modules how to connect to the agent. However,
correctly managing the start up and this environment variable is
- cumbersome so that an easier method is required. Since GnuPG
- 2.0.16 the `--use-standard-socket' option already allowed to start the
- agent on the fly; however the environment variable was still required.
+ cumbersome so that an easier method is required. Since GnuPG 2.0.16
+ the `--use-standard-socket' option already allowed to start the agent
+ on the fly; however the environment variable was still required.
With GnuPG 2.1 the need of `GPG_AGENT_INFO' has been completely
removed and the variable is ignored. Instead a fixed Unix domain
@@ -668,6 +687,10 @@ https://gnupg.org/faq/whats-new-in-2.1.html
pad are supported. The internal CCID driver does now also work with
certain non-auto-configuration equipped readers.
+ Since version 2.1.19 multiple card readers are support and the format
+ of the Pinentry prompts has been changed to show more information on
+ the requested card.
+
[gnuk] http://www.fsij.org/doc-gnuk/
@@ -713,7 +736,7 @@ https://gnupg.org/faq/whats-new-in-2.1.html
makes writing of key manager software easier.
- [GPGME] https://gnupg.org/related_software/gpgme/
+ [GPGME] https://gnupg.org/software/gpgme/
1.15 Recipient key from file
@@ -836,7 +859,7 @@ https://gnupg.org/faq/whats-new-in-2.1.html
- # Copyright 2014--2016 The GnuPG Project.
+ # Copyright 2014--2017 The GnuPG Project.
# This work is licensed under the Creative Commons
# Attribution-ShareAlike 4.0 International License. To view a copy of
# this license, visit http://creativecommons.org/licenses/by-sa/4.0/
diff --git a/g10/gpg.c b/g10/gpg.c
index c721cdc..62d6131 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -1852,7 +1852,7 @@ gpgconf_list (const char *configfile)
es_printf ("encrypt-to:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("try-secret-key:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("auto-key-locate:%lu:\n", GC_OPT_FLAG_NONE);
- es_printf ("no-auto-key-retrieve:%lu:\n", GC_OPT_FLAG_NONE);
+ es_printf ("auto-key-retrieve:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("log-file:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("debug-level:%lu:\"none:\n", GC_OPT_FLAG_DEFAULT);
es_printf ("group:%lu:\n", GC_OPT_FLAG_NONE);
@@ -1860,6 +1860,9 @@ gpgconf_list (const char *configfile)
es_printf ("default-new-key-algo:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("trust-model:%lu:\n", GC_OPT_FLAG_NONE);
es_printf ("disable-dirmngr:%lu:\n", GC_OPT_FLAG_NONE);
+ es_printf ("max-cert-depth:%lu:\n", GC_OPT_FLAG_NONE);
+ es_printf ("completes-needed:%lu:\n", GC_OPT_FLAG_NONE);
+ es_printf ("marginals-needed:%lu:\n", GC_OPT_FLAG_NONE);
/* The next one is an info only item and should match the macros at
the top of keygen.c */
@@ -2366,8 +2369,7 @@ main (int argc, char **argv)
opt.keyserver_options.import_options = (IMPORT_REPAIR_KEYS
| IMPORT_REPAIR_PKS_SUBKEY_BUG);
opt.keyserver_options.export_options = EXPORT_ATTRIBUTES;
- opt.keyserver_options.options = (KEYSERVER_HONOR_PKA_RECORD
- | KEYSERVER_AUTO_KEY_RETRIEVE);
+ opt.keyserver_options.options = KEYSERVER_HONOR_PKA_RECORD;
opt.verify_options = (LIST_SHOW_UID_VALIDITY
| VERIFY_SHOW_POLICY_URLS
| VERIFY_SHOW_STD_NOTATIONS
@@ -3334,13 +3336,14 @@ main (int argc, char **argv)
case oIgnoreCrcError: opt.ignore_crc_error = 1; break;
case oIgnoreMDCError: opt.ignore_mdc_error = 1; break;
case oNoRandomSeedFile: use_random_seed = 0; break;
+
case oAutoKeyRetrieve:
+ opt.keyserver_options.options |= KEYSERVER_AUTO_KEY_RETRIEVE;
+ break;
case oNoAutoKeyRetrieve:
- if(pargs.r_opt==oAutoKeyRetrieve)
- opt.keyserver_options.options|=KEYSERVER_AUTO_KEY_RETRIEVE;
- else
- opt.keyserver_options.options&=~KEYSERVER_AUTO_KEY_RETRIEVE;
- break;
+ opt.keyserver_options.options &= ~KEYSERVER_AUTO_KEY_RETRIEVE;
+ break;
+
case oShowSessionKey: opt.show_session_key = 1; break;
case oOverrideSessionKey:
opt.override_session_key = pargs.r.ret_str;
diff --git a/g10/keyedit.c b/g10/keyedit.c
index e221b32..38cdbce 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -2455,7 +2455,10 @@ keyedit_quick_revuid (ctrl_t ctrl, const char *username, const char *uidtorev)
leave:
if (err)
- log_error (_("revoking the user ID failed: %s\n"), gpg_strerror (err));
+ {
+ log_error (_("revoking the user ID failed: %s\n"), gpg_strerror (err));
+ write_status_error ("keyedit.revoke.uid", err);
+ }
release_kbnode (keyblock);
keydb_release (kdbhd);
}
diff --git a/g10/sig-check.c b/g10/sig-check.c
index 60e988e..23af12b 100644
--- a/g10/sig-check.c
+++ b/g10/sig-check.c
@@ -738,38 +738,38 @@ check_key_signature (ctrl_t ctrl, kbnode_t root, kbnode_t node,
/* Returns whether SIGNER generated the signature SIG over the packet
- PACKET, which is a key, subkey or uid, and comes from the key block
- KB. (KB is PACKET's corresponding keyblock; we don't assume that
- SIG has been added to the keyblock.)
-
- If SIGNER is set, then checks whether SIGNER generated the
- signature. Otherwise, uses SIG->KEYID to find the alleged signer.
- This parameter can be used to effectively override the alleged
- signer that is stored in SIG.
-
- KB may be NULL if SIGNER is set.
-
- Unlike check_key_signature, this function ignores any cached
- results! That is, it does not consider SIG->FLAGS.CHECKED and
- SIG->FLAGS.VALID nor does it set them.
-
- This doesn't check the signature's semantic mean. Concretely, it
- doesn't check whether a non-self signed revocation signature was
- created by a designated revoker. In fact, it doesn't return an
- error for a binding generated by a completely different key!
-
- Returns 0 if the signature is valid. Returns GPG_ERR_SIG_CLASS if
- this signature can't be over PACKET. Returns GPG_ERR_NOT_FOUND if
- the key that generated the signature (according to SIG) could not
- be found. Returns GPG_ERR_BAD_SIGNATURE if the signature is bad.
- Other errors codes may be returned if something else goes wrong.
-
- IF IS_SELFSIG is not NULL, sets *IS_SELFSIG to 1 if this is a
- self-signature (by the key's primary key) or 0 if not.
-
- If RET_PK is not NULL, returns a copy of the public key that
- generated the signature (i.e., the signer) on success. This must
- be released by the caller using release_public_key_parts (). */
+ * PACKET, which is a key, subkey or uid, and comes from the key block
+ * KB. (KB is PACKET's corresponding keyblock; we don't assume that
+ * SIG has been added to the keyblock.)
+ *
+ * If SIGNER is set, then checks whether SIGNER generated the
+ * signature. Otherwise, uses SIG->KEYID to find the alleged signer.
+ * This parameter can be used to effectively override the alleged
+ * signer that is stored in SIG.
+ *
+ * KB may be NULL if SIGNER is set.
+ *
+ * Unlike check_key_signature, this function ignores any cached
+ * results! That is, it does not consider SIG->FLAGS.CHECKED and
+ * SIG->FLAGS.VALID nor does it set them.
+ *
+ * This doesn't check the signature's semantic mean. Concretely, it
+ * doesn't check whether a non-self signed revocation signature was
+ * created by a designated revoker. In fact, it doesn't return an
+ * error for a binding generated by a completely different key!
+ *
+ * Returns 0 if the signature is valid. Returns GPG_ERR_SIG_CLASS if
+ * this signature can't be over PACKET. Returns GPG_ERR_NOT_FOUND if
+ * the key that generated the signature (according to SIG) could not
+ * be found. Returns GPG_ERR_BAD_SIGNATURE if the signature is bad.
+ * Other errors codes may be returned if something else goes wrong.
+ *
+ * IF IS_SELFSIG is not NULL, sets *IS_SELFSIG to 1 if this is a
+ * self-signature (by the key's primary key) or 0 if not.
+ *
+ * If RET_PK is not NULL, returns a copy of the public key that
+ * generated the signature (i.e., the signer) on success. This must
+ * be released by the caller using release_public_key_parts (). */
gpg_error_t
check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
PKT_signature *sig, KBNODE kb, PACKET *packet,
@@ -796,8 +796,8 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
/* Primary key revocation. */
|| sig->sig_class == 0x20)
{
+ /* Key revocations can only be over primary keys. */
if (packet->pkttype != PKT_PUBLIC_KEY)
- /* Key revocations can only be over primary keys. */
return gpg_error (GPG_ERR_SIG_CLASS);
}
else if (/* Subkey binding. */
@@ -840,19 +840,19 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
/* Get the signer. If possible, avoid a look up. */
if (sig->keyid[0] == pripk->keyid[0]
&& sig->keyid[1] == pripk->keyid[1])
- /* Issued by the primary key. */
{
+ /* Issued by the primary key. */
signer = pripk;
if (is_selfsig)
*is_selfsig = 1;
}
else
{
+ /* See if one of the subkeys was the signer (although this
+ is extremely unlikely). */
kbnode_t ctx = NULL;
kbnode_t n;
- /* See if one of the subkeys was the signer (although this
- is extremely unlikely). */
while ((n = walk_kbnode (kb, &ctx, 0)))
{
PKT_public_key *subk;
@@ -863,21 +863,24 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
subk = n->pkt->pkt.public_key;
if (sig->keyid[0] == subk->keyid[0]
&& sig->keyid[1] == subk->keyid[1])
- /* Issued by a subkey. */
{
+ /* Issued by a subkey. */
signer = subk;
break;
}
}
if (! signer)
- /* Signer by some other key. */
{
+ /* Signer by some other key. */
if (is_selfsig)
*is_selfsig = 0;
if (ret_pk)
{
signer = ret_pk;
+ /* FIXME: Using memset here is probematic because it
+ * assumes that there are no allocated fields in
+ * SIGNER. */
memset (signer, 0, sizeof (*signer));
signer_alloced = 1;
}
@@ -893,14 +896,14 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
xfree (signer);
signer = NULL;
signer_alloced = 0;
- goto out;
+ goto leave;
}
}
}
}
/* We checked above that we supported this algo, so an error here is
- a bug. */
+ * a bug. */
if (gcry_md_open (&md, sig->digest_algo, 0))
BUG ();
@@ -916,7 +919,7 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
rc = check_signature_end_simple (signer, sig, md);
}
else if (/* Primary key binding (made by a subkey). */
- sig->sig_class == 0x19)
+ sig->sig_class == 0x19)
{
log_assert (packet->pkttype == PKT_PUBLIC_KEY);
hash_public_key (md, packet->pkt.public_key);
@@ -947,27 +950,31 @@ check_signature_over_key_or_uid (ctrl_t ctrl, PKT_public_key *signer,
rc = check_signature_end_simple (signer, sig, md);
}
else
- /* We should never get here. (The first if above should have
- already caught this error.) */
- BUG ();
+ {
+ /* We should never get here. (The first if above should have
+ * already caught this error.) */
+ BUG ();
+ }
gcry_md_close (md);
- out:
- if (! rc && ret_pk && (signer_alloced == -1 || ret_pk != signer))
+ leave:
+ if (! rc && ret_pk && ret_pk != signer)
copy_public_key (ret_pk, signer);
- if (signer_alloced == 1)
- /* We looked up SIGNER; it is not a pointer into KB. */
+
+ if (signer_alloced)
{
+ /* We looked up SIGNER; it is not a pointer into KB. */
release_public_key_parts (signer);
+ /* Free if we also allocated the memory. */
if (signer_alloced == 2)
- /* We also allocated the memory. */
xfree (signer);
}
return rc;
}
+
/* Check that a signature over a key (e.g., a key revocation, key
* binding, user id certification, etc.) is valid. If the function
* detects a self-signature, it uses the public key from the specified
@@ -1027,9 +1034,9 @@ check_key_signature2 (ctrl_t ctrl,
algo = sig->digest_algo;
/* Check whether we have cached the result of a previous signature
- check. Note that we may no longer have the pubkey or hash
- needed to verify a sig, but can still use the cached value. A
- cache refresh detects and clears these cases. */
+ * check. Note that we may no longer have the pubkey or hash
+ * needed to verify a sig, but can still use the cached value. A
+ * cache refresh detects and clears these cases. */
if ( !opt.no_sig_cache )
{
cache_stats.total++;
@@ -1045,7 +1052,7 @@ check_key_signature2 (ctrl_t ctrl,
*is_selfsig = 1;
}
/* BUG: This is wrong for non-self-sigs... needs to be the
- actual pk. */
+ * actual pk. */
rc = check_signature_metadata_validity (pk, sig, r_expired, NULL);
if (rc)
return rc;
@@ -1094,13 +1101,15 @@ check_key_signature2 (ctrl_t ctrl,
rc = check_signature_metadata_validity (pk, sig,
r_expired, NULL);
if (! rc)
- /* 0x28 must be a self-sig, but 0x18 needn't be. */
- rc = check_signature_over_key_or_uid (ctrl,
- sig->sig_class == 0x18
- ? NULL : pk,
- sig, root, snode->pkt,
- is_selfsig, ret_pk);
- }
+ {
+ /* 0x28 must be a self-sig, but 0x18 needn't be. */
+ rc = check_signature_over_key_or_uid (ctrl,
+ sig->sig_class == 0x18
+ ? NULL : pk,
+ sig, root, snode->pkt,
+ is_selfsig, ret_pk);
+ }
+ }
else
{
if (opt.verbose)
@@ -1137,11 +1146,13 @@ check_key_signature2 (ctrl_t ctrl,
{
rc = check_signature_metadata_validity (pk, sig, r_expired, NULL);
if (! rc)
- /* If this is a self-sig, ignore check_pk. */
- rc = check_signature_over_key_or_uid
- (ctrl,
- keyid_cmp (pk_keyid (pk), sig->keyid) == 0 ? pk : check_pk,
- sig, root, unode->pkt, NULL, ret_pk);
+ {
+ /* If this is a self-sig, ignore check_pk. */
+ rc = check_signature_over_key_or_uid
+ (ctrl,
+ keyid_cmp (pk_keyid (pk), sig->keyid) == 0 ? pk : check_pk,
+ sig, root, unode->pkt, NULL, ret_pk);
+ }
}
else
{
diff --git a/g10/trustdb.c b/g10/trustdb.c
index e2c3bda..92c1ca5 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -797,6 +797,7 @@ update_min_ownertrust (ctrl_t ctrl, u32 *kid, unsigned int new_trust)
{
log_error (_("public key %s not found: %s\n"),
keystr (kid), gpg_strerror (err));
+ xfree (pk);
return;
}
@@ -836,6 +837,8 @@ update_min_ownertrust (ctrl_t ctrl, u32 *kid, unsigned int new_trust)
{
tdbio_invalid ();
}
+
+ free_public_key (pk);
}
diff --git a/po/ja.po b/po/ja.po
index 7d4f002..6567ab3 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,9 +8,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg 2.1.22\n"
+"Project-Id-Version: gnupg 2.1.23\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2017-08-01 11:34+0900\n"
+"PO-Revision-Date: 2017-08-22 11:22+0900\n"
"Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n"
"Language-Team: none\n"
"Language: ja\n"
@@ -630,7 +630,7 @@ msgstr "誤り"
#, c-format
msgid "Note: This passphrase has never been changed.%0APlease change it now."
-msgstr "注意: パスフレーズは変更されていません。%0A今、変更してください。"
+msgstr "*注意*: パスフレーズは変更されていません。%0A今、変更してください。"
#, c-format
msgid ""
@@ -1199,11 +1199,12 @@ msgstr "*警告*: %s\n"
msgid "Note: Outdated servers may lack important security fixes.\n"
msgstr ""
+"*注意*: 古いサーバは、重要なセキュリティの修正が欠如しているかもしれませ"
+"ん。\n"
-#, fuzzy, c-format
-#| msgid "Please use the command \"toggle\" first.\n"
+#, c-format
msgid "Note: Use the command \"%s\" to restart them.\n"
-msgstr "まず\"toggle\"コマンドを使ってください。\n"
+msgstr "*注意*: \"%s\"コマンドを使って再起動してください。\n"
#, c-format
msgid "%s is not compliant with %s mode\n"
@@ -4360,7 +4361,7 @@ msgstr "*警告*: ダイジェスト・アルゴリズム %s は廃止されて
#, c-format
msgid "Note: signatures using the %s algorithm are rejected\n"
-msgstr "注意: アルゴリズム %s を用いた署名は拒否されました\n"
+msgstr "*注意*: アルゴリズム %s を用いた署名は拒否されました\n"
#, c-format
msgid "(reported error: %s)\n"
@@ -4684,15 +4685,15 @@ msgid "WARNING: This subkey has been revoked by its owner!\n"
msgstr "*警告*: この副鍵は所有者によって失効されています!\n"
msgid "Note: This key has been disabled.\n"
-msgstr "注意: この鍵は使用禁止に設定されています。\n"
+msgstr "*注意*: この鍵は使用禁止に設定されています。\n"
#, c-format
msgid "Note: Verified signer's address is '%s'\n"
-msgstr "注意: 確認された署名者のアドレスは'%s'です\n"
+msgstr "*注意*: 確認された署名者のアドレスは'%s'です\n"
#, c-format
msgid "Note: Signer's address '%s' does not match DNS entry\n"
-msgstr "注意: 署名者のアドレス'%s'がDNSのエントリと一致しません\n"
+msgstr "*注意*: 署名者のアドレス'%s'がDNSのエントリと一致しません\n"
msgid "trustlevel adjusted to FULL due to valid PKA info\n"
msgstr "PKA情報が有効のため、信用レベルがFULLに調整されました\n"
@@ -4701,7 +4702,7 @@ msgid "trustlevel adjusted to NEVER due to bad PKA info\n"
msgstr "PKA情報が無効のため、信用レベルがNEVERに調整されました\n"
msgid "Note: This key has expired!\n"
-msgstr "注意: この鍵は期限切れです!\n"
+msgstr "*注意*: この鍵は期限切れです!\n"
msgid "WARNING: This key is not certified with a trusted signature!\n"
msgstr "*警告*: この鍵は信用できる署名で証明されていません!\n"
@@ -4782,11 +4783,11 @@ msgstr "有効な宛先がありません\n"
#, c-format
msgid "Note: key %s has no %s feature\n"
-msgstr "注意: 鍵%sには %s の機能がありません\n"
+msgstr "*注意*: 鍵%sには %s の機能がありません\n"
#, c-format
msgid "Note: key %s has no preference for %s\n"
-msgstr "注意: 鍵%sには%sに対する優先指定がありません\n"
+msgstr "*注意*: 鍵%sには%sに対する優先指定がありません\n"
msgid "data not saved; use option \"--output\" to save it\n"
msgstr ""
@@ -4812,10 +4813,9 @@ msgstr "署名されたデータ'%s'が開けません\n"
msgid "can't open signed data fd=%d: %s\n"
msgstr "署名されたデータ fd=%d が開けません: %s\n"
-#, fuzzy, c-format
-#| msgid "Note: key %s is not suitable for encryption in %s mode\n"
+#, c-format
msgid "key %s is not suitable for decryption in %s mode\n"
-msgstr "注: 鍵%sは%sモードでの暗号化のために適しません\n"
+msgstr "鍵%sは%sモードでの復号化のために適しません\n"
#, c-format
msgid "anonymous recipient; trying secret key %s ...\n"
@@ -6044,7 +6044,7 @@ msgid "failed to open '%s': %s\n"
msgstr "'%s'が開けません: %s\n"
msgid "Note: non-critical certificate policy not allowed"
-msgstr "注意: クリティカルでない証明書ポリシーは認められません"
+msgstr "*注意*: クリティカルでない証明書ポリシーは認められません"
msgid "certificate policy not allowed"
msgstr "証明書ポリシーは認められません"
diff --git a/po/nb.po b/po/nb.po
index 01de1b0..7a72323 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,25 +1,25 @@
# Norwegian (bokmål) translation of Gnu Privacy Guard.
-# Copyright (C) 2016 Free Software Foundation, Inc.
+# Copyright (C) 1998-2017 Free Software Foundation, Inc.
# This file is distributed under the same license as the GnuPG package.
# Trond Endrestøl <Trond.Endrestol@fagskolen.gjovik.no>, 2004.
-# Åka Sikrom <a4 -at- hush -dot- com>, 2016.
+# Åka Sikrom <a4@hush.com>, 2016-2017.
#
# Send this file to:
# translations@gnupg.org
#
msgid ""
msgstr ""
-"Project-Id-Version: GNU gnupg 2.1.14\n"
+"Project-Id-Version: GNU gnupg 2.1\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2016-07-15 10:27+0100\n"
-"Last-Translator: Åka Sikrom <a4 æt hush dåt com>\n"
+"PO-Revision-Date: 2017-08-15 10:19+0200\n"
+"Last-Translator: Åka Sikrom <a4@hush.com>\n"
"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: nb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2016-06-15 11:29+0000\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.8.7.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#, c-format
@@ -153,10 +153,9 @@ msgstr "ingen ssh-autentiseringnøkkel på kort: %s\n"
msgid "no suitable card key found: %s\n"
msgstr "fant ingen passende kortnøkkel: %s\n"
-#, fuzzy, c-format
-#| msgid "error getting stored flags: %s\n"
+#, c-format
msgid "error getting list of cards: %s\n"
-msgstr "feil under henting av lagrede valg: %s\n"
+msgstr "feil under henting av kortliste: %s\n"
#, c-format
msgid ""
@@ -305,10 +304,8 @@ msgstr "kjør som bakgrunnsprosess («daemon»)"
msgid "run in server mode (foreground)"
msgstr "kjør i tjenermodus (forgrunn)"
-#, fuzzy
-#| msgid "run in server mode"
msgid "run in supervised mode"
-msgstr "kjør i tjenermodus"
+msgstr "kjør i «supervised» modus"
msgid "verbose"
msgstr "detaljert utskrift"
@@ -374,7 +371,7 @@ msgid "enable ssh support"
msgstr "slå på ssh-støtte"
msgid "|ALGO|use ALGO to show ssh fingerprints"
-msgstr ""
+msgstr "|ALGO|bruk valgt ALGOritme til å vise ssh-fingeravtrykk"
msgid "enable putty support"
msgstr "slå på støtte for putty"
@@ -756,13 +753,11 @@ msgstr "Advarsel: utrygt eierskap til %s «%s»\n"
msgid "Warning: unsafe permissions on %s \"%s\"\n"
msgstr "Advarsel: utrygge tillatelser til %s «%s»\n"
-#, fuzzy, c-format
-#| msgid "waiting for the agent to come up ... (%ds)\n"
+#, c-format
msgid "waiting for file '%s' to become accessible ...\n"
-msgstr "venter på at agent skal dukke opp … (%ds)\n"
+msgstr "venter på at fila «%s» skal bli tilgjengelig …\n"
-#, fuzzy, c-format
-#| msgid "error renaming '%s' to '%s': %s\n"
+#, c-format
msgid "renaming '%s' to '%s' failed: %s\n"
msgstr "klarte ikke å gi «%s» det nye navnet «%s»: %s\n"
@@ -1208,17 +1203,15 @@ msgid "WARNING: %s\n"
msgstr "ADVARSEL: %s\n"
msgid "Note: Outdated servers may lack important security fixes.\n"
-msgstr ""
+msgstr "Merk: Utdaterte tjenere kan mangle viktige sikkerhetsfunksjoner.\n"
-#, fuzzy, c-format
-#| msgid "Please use the command \"toggle\" first.\n"
+#, c-format
msgid "Note: Use the command \"%s\" to restart them.\n"
-msgstr "Bruk kommandoen «toggle» først.\n"
+msgstr "Merk: Bruk kommandoen «%s» for å starte dem på nytt.\n"
-#, fuzzy, c-format
-#| msgid "%s does not yet work with %s\n"
+#, c-format
msgid "%s is not compliant with %s mode\n"
-msgstr "%s virker ikke enda med %s\n"
+msgstr "%s kan ikke brukes i %s-modus\n"
#, c-format
msgid "OpenPGP card not available: %s\n"
@@ -1571,15 +1564,13 @@ msgstr ""
"ADVARSEL: tvungen bruk av symmetrisk krypt.metode %s (%d) bryter med "
"mottakers oppsett\n"
-#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
+#, c-format
msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke krypteringsalgoritme «%s» i %s-modus\n"
+msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n"
-#, fuzzy, c-format
-#| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
+#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
-msgstr "ADVARSEL: valget «%s%s» er utgått, og har ingen effekt\n"
+msgstr "ADVARSEL: nøkkel %s egner seg ikke for kryptering i %s-modus\n"
#, c-format
msgid ""
@@ -1597,10 +1588,9 @@ msgstr "tvungen bruk av krypt.metode %s (%d) bryter med mottakers oppsett\n"
msgid "%s/%s encrypted for: \"%s\"\n"
msgstr "%s/%s kryptert for: «%s»\n"
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
msgid "option '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke «%s» i «%s»-modus\n"
+msgstr "du kan ikke bruke valget «%s» i %s-modus\n"
#, c-format
msgid "%s encrypted data\n"
@@ -1678,7 +1668,7 @@ msgid "remove as much as possible from key during export"
msgstr "fjern så mye som mulig fra nøkkelen under eksportering"
msgid "use the GnuPG key backup format"
-msgstr ""
+msgstr "bruk GnuPG-format til sikkerhetskopiering av nøkkel"
msgid " - skipped"
msgstr ". Hoppet over"
@@ -1759,10 +1749,9 @@ msgstr "Ugyldig nøkkel %s gjort gyldig av --allow-non-selfsigned-uid\n"
msgid "using subkey %s instead of primary key %s\n"
msgstr "bruker undernøkkel %s i stedet for primærnøkkel %s\n"
-#, fuzzy, c-format
-#| msgid "invalid argument for option \"%.50s\"\n"
+#, c-format
msgid "valid values for option '%s':\n"
-msgstr "ugyldig argument for valget «%.50s»\n"
+msgstr "følgende verdier er gyldige for «%s»:\n"
msgid "make a signature"
msgstr "lag signatur"
@@ -1812,10 +1801,8 @@ msgstr "legg til en ny bruker-ID raskt"
msgid "quickly revoke a user-id"
msgstr "opphev bruker-ID raskt"
-#, fuzzy
-#| msgid "quickly generate a new key pair"
msgid "quickly set a new expiration date"
-msgstr "lag nytt nøkkelpar raskt"
+msgstr "endre utløpsdato raskt"
msgid "full featured key pair generation"
msgstr "fullverdig generering av nøkkelpar"
@@ -1920,16 +1907,6 @@ msgstr ""
"@\n"
"(Se bruksanvisning for en fullstendig liste over alle kommandoer og valg)\n"
-#, fuzzy
-#| msgid ""
-#| "@\n"
-#| "Examples:\n"
-#| "\n"
-#| " -se -r Bob [file] sign and encrypt for user Bob\n"
-#| " --clear-sign [file] make a clear text signature\n"
-#| " --detach-sign [file] make a detached signature\n"
-#| " --list-keys [names] show keys\n"
-#| " --fingerprint [names] show fingerprints\n"
msgid ""
"@\n"
"Examples:\n"
@@ -2100,10 +2077,9 @@ msgstr "Merk: %s er ikke ment for vanlig bruk.\n"
msgid "'%s' is not a valid signature expiration\n"
msgstr "«%s» er en ugyldig signatur-utløpstid\n"
-#, fuzzy, c-format
-#| msgid "line %d: not a valid email address\n"
+#, c-format
msgid "\"%s\" is not a proper mail address\n"
-msgstr "linje %d: ugyldig e-postadresse\n"
+msgstr "«%s» er en ugyldig e-postadresse\n"
#, c-format
msgid "invalid pinentry mode '%s'\n"
@@ -2267,15 +2243,13 @@ msgstr "ugyldig personlig oppsett av komprimeringsmetode\n"
msgid "%s does not yet work with %s\n"
msgstr "%s virker ikke enda med %s\n"
-#, fuzzy, c-format
-#| msgid "you may not use digest algorithm '%s' while in %s mode\n"
+#, c-format
msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke summeringsalgoritme «%s» i %s-modus\n"
+msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n"
-#, fuzzy, c-format
-#| msgid "you may not use compression algorithm '%s' while in %s mode\n"
+#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke komprimeringsalgoritme «%s» i «%s»-modus\n"
+msgstr "du kan ikke bruke komprimeringsalgoritme «%s» i %s-modus\n"
#, c-format
msgid "failed to initialize the TrustDB: %s\n"
@@ -2291,19 +2265,17 @@ msgstr "symmetrisk kryptering av «%s» mislyktes: %s\n"
msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n"
msgstr "du kan ikke bruke «--symmetric --encrypt» og «--s2k-mode 0» samtidig\n"
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --encrypt while in %s mode\n"
+#, c-format
msgid "you cannot use --symmetric --encrypt in %s mode\n"
-msgstr "du kan ikke velge «--symmtric» og «--encrypt» i «%s»-modus\n"
+msgstr "du kan ikke velge --symmetric --encrypt i %s-modus\n"
msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n"
msgstr ""
"du kan ikke bruke «--symmetric --sign --encrypt» og «--s2k-mode 0» samtidig\n"
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n"
+#, c-format
msgid "you cannot use --symmetric --sign --encrypt in %s mode\n"
-msgstr "du kan ikke velge «--symmtric», «--sign» og «--encrypt» i «%s»-modus\n"
+msgstr "du kan ikke velge --symmetric --sign --encrypt i %s-modus\n"
#, c-format
msgid "keyserver send failed: %s\n"
@@ -2352,7 +2324,7 @@ msgstr ""
"nøkkelgrep\n"
msgid "WARNING: no command supplied. Trying to guess what you mean ...\n"
-msgstr ""
+msgstr "ADVARSEL: ingen kommando valgt. Prøver å gjette hva du mener …\n"
msgid "Go ahead and type your message ...\n"
msgstr "Skriv inn melding …\n"
@@ -2422,15 +2394,11 @@ msgstr "fjern så mye som mulig fra nøkkel etter importering"
msgid "run import filters and export key immediately"
msgstr "kjør importeringsfiltre og eksporter nøkkel umiddelbart"
-#, fuzzy
-#| msgid "assume input is in binary format"
msgid "assume the GnuPG key backup format"
-msgstr "forvent inndata i binærformat"
+msgstr "forvent GnuPG-format på sikkerhetskopierte nøkler"
-#, fuzzy
-#| msgid "show key during import"
msgid "repair keys on import"
-msgstr "vis nøkkel under importering"
+msgstr "reparer nøkler under importering"
#, c-format
msgid "skipping block of type %d\n"
@@ -3257,20 +3225,16 @@ msgstr "oppdatering mislyktes: %s\n"
msgid "Key not changed so no update needed.\n"
msgstr "Nøkkelen ble ikke endret, så ingen oppdatering er nødvendig.\n"
-#, fuzzy
-#| msgid "You can't delete the last user ID!\n"
msgid "cannot revoke the last valid user ID.\n"
-msgstr "Du kan ikke slette siste bruker-ID.\n"
+msgstr "klarte ikke å oppheve siste gyldige bruker-ID.\n"
-#, fuzzy, c-format
-#| msgid "checking the trust list failed: %s\n"
+#, c-format
msgid "revoking the user ID failed: %s\n"
-msgstr "kontroll av tillitsliste mislyktes: %s\n"
+msgstr "opphevelse av bruker-id mislyktes: %s\n"
-#, fuzzy, c-format
-#| msgid "checking the trust list failed: %s\n"
+#, c-format
msgid "setting the primary user ID failed: %s\n"
-msgstr "kontroll av tillitsliste mislyktes: %s\n"
+msgstr "endring av primær bruker-ID mislyktes: %s\n"
#, c-format
msgid "\"%s\" is not a fingerprint\n"
@@ -3290,20 +3254,17 @@ msgstr "Ingen treff på bruker-id-er."
msgid "Nothing to sign.\n"
msgstr "Ingenting å signere.\n"
-#, fuzzy, c-format
-#| msgid "'%s' is not a valid signature expiration\n"
+#, c-format
msgid "'%s' is not a valid expiration time\n"
-msgstr "«%s» er en ugyldig signatur-utløpstid\n"
+msgstr "«%s» er en ugyldig utløpstid\n"
-#, fuzzy, c-format
-#| msgid "\"%s\" is not a fingerprint\n"
+#, c-format
msgid "\"%s\" is not a proper fingerprint\n"
-msgstr "«%s» er ikke et fingeravtrykk\n"
+msgstr "«%s» er et ugyldig fingeravtrykk\n"
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found\n"
+#, c-format
msgid "subkey \"%s\" not found\n"
-msgstr "fant ikke nøkkelen «%s»\n"
+msgstr "fant ikke undernøkkel «%s»\n"
msgid "Digest: "
msgstr "Kontrollsum: "
@@ -3602,12 +3563,10 @@ msgstr "bruker-ID «%s» er allerede opphevet\n"
#, c-format
msgid "WARNING: a user ID signature is dated %d seconds in the future\n"
-msgstr "ADVARSEL: en bruker-id-signatur er datert %d sekunder i fremtiden\n"
+msgstr "ADVARSEL: en bruker-id-signatur er datert %d sekunder i framtiden\n"
-#, fuzzy
-#| msgid "You can't delete the last user ID!\n"
msgid "Cannot revoke the last valid user ID.\n"
-msgstr "Du kan ikke slette siste bruker-ID.\n"
+msgstr "Klarte ikke å oppheve siste gyldige bruker-ID.\n"
#, c-format
msgid "Key %s is already revoked.\n"
@@ -3621,10 +3580,9 @@ msgstr "Undernøkkel %s er allerede opphevet.\n"
msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n"
msgstr "Viser %s foto-ID av størrelsen %ld for nøkkel %s (uid %d)\n"
-#, fuzzy, c-format
-#| msgid "invalid argument for option \"%.50s\"\n"
+#, c-format
msgid "invalid value for option '%s'\n"
-msgstr "ugyldig argument for valget «%.50s»\n"
+msgstr "ugyldig verdi for valg «%s»\n"
#, c-format
msgid "preference '%s' duplicated\n"
@@ -3864,7 +3822,7 @@ msgid ""
"However, it will be correctly handled up to 2106.\n"
msgstr ""
"Systemet ditt klarer ikke å håndtere datoer etter 2038.\n"
-"Likevel håndteres det korrekt frem til 2106.\n"
+"Likevel håndteres det korrekt fram til 2106.\n"
msgid "Is this correct? (y/N) "
msgstr "Er dette korrekt (j/N)? "
@@ -4052,14 +4010,14 @@ msgstr ""
msgid ""
"key has been created %lu second in future (time warp or clock problem)\n"
msgstr ""
-"nøkkel har blitt opprettet %lu sekund i fremtiden (time warp- eller "
+"nøkkel har blitt opprettet %lu sekund i framtiden (time warp- eller "
"klokkeproblem)\n"
#, c-format
msgid ""
"key has been created %lu seconds in future (time warp or clock problem)\n"
msgstr ""
-"nøkkel har blitt opprettet %lu sekunder i fremtiden (time warp- eller "
+"nøkkel har blitt opprettet %lu sekunder i framtiden (time warp- eller "
"klokkeproblem)\n"
msgid "Note: creating subkeys for v3 keys is not OpenPGP compliant\n"
@@ -4365,10 +4323,9 @@ msgstr " bruker %s nøkkel %s\n"
msgid "Signature made %s using %s key ID %s\n"
msgstr "Signatur laget %s ved hjelp av %s-nøkkel ID %s\n"
-#, fuzzy, c-format
-#| msgid " aka \"%s\""
+#, c-format
msgid " issuer \"%s\"\n"
-msgstr " aka «%s»"
+msgstr " utsteder «%s»\n"
msgid "Key available at: "
msgstr "Nøkkel tilgjengelig ved: "
@@ -4380,11 +4337,9 @@ msgstr "[usikker]"
msgid " aka \"%s\""
msgstr " aka «%s»"
-#, fuzzy, c-format
-#| msgid "WARNING: This key is not certified with a trusted signature!\n"
+#, c-format
msgid "WARNING: This key is not suitable for signing in %s mode\n"
-msgstr ""
-"ADVARSEL: denne nøkkelen er ikke sertifisert med en tillitsverdig signatur.\n"
+msgstr "ADVARSEL: Denne nøkkelen egner seg ikke for signering i %s-modus\n"
#, c-format
msgid "Signature expired %s\n"
@@ -4744,24 +4699,18 @@ msgstr "Denne nøkkelen tilhører sannsynligvis navngitt bruker\n"
msgid "This key belongs to us\n"
msgstr "denne nøkkelen tilhører oss\n"
-#, fuzzy, c-format
-#| msgid "root certificate has now been marked as trusted\n"
+#, c-format
msgid "%s: This key is bad! It has been marked as untrusted!\n"
-msgstr "rotsertifikat er nå merket som troverdig\n"
+msgstr "%s: Denne nøkkelen er markert som upålitelig, og bør ikke brukes.\n"
-#, fuzzy
-#| msgid ""
-#| "It is NOT certain that the key belongs to the person named\n"
-#| "in the user ID. If you *really* know what you are doing,\n"
-#| "you may answer the next question with yes.\n"
msgid ""
"This key is bad! It has been marked as untrusted! If you\n"
"*really* know what you are doing, you may answer the next\n"
"question with yes.\n"
msgstr ""
-"Det er IKKE sikkert at nøkkelen tilhører personen som er navngitt i\n"
-"bruker-id-en. Hvis du *virkelig* vet hva du gjør, kan du svare ja\n"
-"på neste spørsmål.\n"
+"Denne nøkkelen er markert som upålitelig, og bør ikke brukes.\n"
+"Ikke svar ja på neste spørsmål med mindre du *virkelig* vet\n"
+"hva det innebærer.\n"
msgid ""
"It is NOT certain that the key belongs to the person named\n"
@@ -4924,10 +4873,9 @@ msgstr "klarte ikke å åpne signert data «%s»\n"
msgid "can't open signed data fd=%d: %s\n"
msgstr "klarte ikke å åpne signert data fd=%d: «%s»\n"
-#, fuzzy, c-format
-#| msgid "certificate is not usable for encryption\n"
+#, c-format
msgid "key %s is not suitable for decryption in %s mode\n"
-msgstr "sertifikatet egner seg ikke til kryptering\n"
+msgstr "nøkkel %s egner seg ikke for dekryptering i %s-modus\n"
#, c-format
msgid "anonymous recipient; trying secret key %s ...\n"
@@ -5110,10 +5058,9 @@ msgstr ""
msgid "WARNING: signature digest conflict in message\n"
msgstr "ADVARSEL: konflikt med signatur-kontrollsum i melding\n"
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
msgid "key %s may not be used for signing in %s mode\n"
-msgstr "du kan ikke bruke «%s» i «%s»-modus\n"
+msgstr "du kan ikke bruke nøkkel %s til signering i %s-modus\n"
#, c-format
msgid "WARNING: signing subkey %s is not cross-certified\n"
@@ -5147,10 +5094,10 @@ msgid ""
msgid_plural ""
"key %s was created %lu seconds in the future (time warp or clock problem)\n"
msgstr[0] ""
-"nøkkel %s ble opprettet %lu sekund i fremtiden (tidsforskyvnings- eller "
+"nøkkel %s ble opprettet %lu sekund i framtiden (tidsforskyvnings- eller "
"klokkeproblem)\n"
msgstr[1] ""
-"nøkkel %s ble opprettet %lu sekunder i fremtiden (tidsforskyvnings- eller "
+"nøkkel %s ble opprettet %lu sekunder i framtiden (tidsforskyvnings- eller "
"klokkeproblem)\n"
#, c-format
@@ -5158,10 +5105,10 @@ msgid "key %s was created %lu day in the future (time warp or clock problem)\n"
msgid_plural ""
"key %s was created %lu days in the future (time warp or clock problem)\n"
msgstr[0] ""
-"nøkkel %s ble opprettet %lu dag i fremtiden (tidsforskyvnings- eller "
+"nøkkel %s ble opprettet %lu dag i framtiden (tidsforskyvnings- eller "
"klokkeproblem)\n"
msgstr[1] ""
-"nøkkel %s ble opprettet %lu dager i fremtiden (tidsforskyvnings- eller "
+"nøkkel %s ble opprettet %lu dager i framtiden (tidsforskyvnings- eller "
"klokkeproblem)\n"
#, c-format
@@ -5396,13 +5343,12 @@ msgstr "feil under reversering av transaksjon i TOFU-database: %s\n"
msgid "unsupported TOFU database version: %s\n"
msgstr "TOFU-databaseversjon støttes ikke: %s\n"
-#, fuzzy, c-format
-#| msgid "error creating temporary file: %s\n"
+#, c-format
msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n"
-msgstr "feil under oppretting av midlertidig fil: %s\n"
+msgstr "feil under oppretting av TOFU-tabell «ultimately_trusted_keys»: %s\n"
msgid "TOFU DB error"
-msgstr ""
+msgstr "TOFU DB-feil"
#, c-format
msgid "error reading TOFU database: %s\n"
@@ -5416,14 +5362,13 @@ msgstr "klarte ikke å kontrollere versjon av TOFU-database: %s\n"
msgid "error initializing TOFU database: %s\n"
msgstr "feil under oppstart av TOFU-database: %s\n"
-#, fuzzy, c-format
-#| msgid "error reading TOFU database: %s\n"
+#, c-format
msgid "error creating 'encryptions' TOFU table: %s\n"
-msgstr "feil under lesing av TOFU-database: %s\n"
+msgstr "feil under oppretting av TOFU-tabell «encryptions»: %s\n"
#, c-format
msgid "adding column effective_policy to bindings DB: %s\n"
-msgstr ""
+msgstr "legger til kolonne «effective_policy» i tilknytningsdatabase: %s\n"
#, c-format
msgid "error opening TOFU database '%s': %s\n"
@@ -5433,44 +5378,35 @@ msgstr "feil under åpning av TOFU-database «%s»: %s\n"
msgid "error updating TOFU database: %s\n"
msgstr "feil under oppdatering av TOFU-database: %s\n"
-#, fuzzy, c-format
-#| msgid "The email address \"%s\" is associated with %d key:\n"
-#| msgid_plural "The email address \"%s\" is associated with %d keys:\n"
+#, c-format
msgid ""
"This is the first time the email address \"%s\" is being used with key %s."
-msgstr "E-postadressen «%s» er tilknyttet %d nøkkel:\n"
+msgstr "Dette er første gang e-postadressen «%s» brukes med nøkkel %s."
-#, fuzzy, c-format
-#| msgid "The email address \"%s\" is associated with %d key:\n"
-#| msgid_plural "The email address \"%s\" is associated with %d keys:\n"
+#, c-format
msgid "The email address \"%s\" is associated with %d key!"
msgid_plural "The email address \"%s\" is associated with %d keys!"
-msgstr[0] "E-postadressen «%s» er tilknyttet %d nøkkel:\n"
-msgstr[1] "E-postadressen «%s» er tilknyttet %d nøkkel:\n"
+msgstr[0] "E-postadressen «%s» er tilknyttet %d nøkkel."
+msgstr[1] "E-postadressen «%s» er tilknyttet %d nøkler."
-#, fuzzy
-#| msgid ""
-#| "The key with fingerprint %s raised a conflict with the binding %s. Since "
-#| "this binding's policy was 'auto', it was changed to 'ask'."
msgid " Since this binding's policy was 'auto', it has been changed to 'ask'."
msgstr ""
-"Nøkkel med fingeravtrykk %s forårsaket konflikt med tilknytning %s. Siden "
-"regelen var «auto» er den nå endret til «ask» (spør)."
+" Denne tilknytningsregelen var «auto», og er nå endret til «ask» (spør)."
#, c-format
msgid ""
"Please indicate whether this email address should be associated with key %s "
"or whether you think someone is impersonating \"%s\"."
msgstr ""
+"Velg om gjeldende e-postadresse skal knyttes til nøkkel %s eller om du tror "
+"noen prøver å etterlikne «%s»."
#, c-format
msgid "error gathering other user IDs: %s\n"
msgstr "feil under henting av andre bruker-id-er: %s\n"
-#, fuzzy
-#| msgid "list key and user IDs"
msgid "This key's user IDs:\n"
-msgstr "vis nøkler og bruker-id-er"
+msgstr "Bruker-id-er tilknyttet denne nøkkelen:\n"
#, c-format
msgid "policy: %s"
@@ -5493,101 +5429,73 @@ msgstr "Statistikk for nøkler med e-postadresse «%s»:\n"
msgid "this key"
msgstr "denne nøkkelen"
-#, fuzzy, c-format
-#| msgid "Verified %ld messages signed by \"%s\"."
+#, c-format
msgid "Verified %d message."
msgid_plural "Verified %d messages."
-msgstr[0] "Bekreftet %ld meldinger signert av «%s»."
-msgstr[1] "Bekreftet %ld meldinger signert av «%s»."
+msgstr[0] "Bekreftet %d melding."
+msgstr[1] "Bekreftet %d meldinger."
-#, fuzzy, c-format
-#| msgid "encrypted with %lu passphrases\n"
+#, c-format
msgid "Encrypted %d message."
msgid_plural "Encrypted %d messages."
-msgstr[0] "kryptert med %lu passordfraser\n"
-msgstr[1] "kryptert med %lu passordfraser\n"
+msgstr[0] "Kryptert %d melding."
+msgstr[1] "Kryptert %d meldinger."
-#, fuzzy, c-format
-#| msgid "%ld message signed in the future."
-#| msgid_plural "%ld messages signed in the future."
+#, c-format
msgid "Verified %d message in the future."
msgid_plural "Verified %d messages in the future."
-msgstr[0] "%ld melding signert i fremtid."
-msgstr[1] "%ld meldinger signert i fremtid."
+msgstr[0] "Bekreftet %d melding i framtid."
+msgstr[1] "Bekreftet %d meldinger i framtid."
-#, fuzzy, c-format
-#| msgid "%ld message signed in the future."
-#| msgid_plural "%ld messages signed in the future."
+#, c-format
msgid "Encrypted %d message in the future."
msgid_plural "Encrypted %d messages in the future."
-msgstr[0] "%ld melding signert i fremtid."
-msgstr[1] "%ld meldinger signert i fremtid."
+msgstr[0] "Kryptert %d melding i framtid."
+msgstr[1] "%d meldinger signert i framtid."
-#, fuzzy, c-format
-#| msgid " over the past %ld day."
-#| msgid_plural " over the past %ld days."
+#, c-format
msgid "Messages verified over the past %d day: %d."
msgid_plural "Messages verified over the past %d days: %d."
-msgstr[0] " i løpet av gårsdagen (%ld)."
-msgstr[1] " i løpet av de %ld siste dagene."
+msgstr[0] "Bekreftede meldinger i løpet av siste %d dag: %d."
+msgstr[1] "Bekreftede meldinger i løpet av siste %d dager: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld day."
-#| msgid_plural " over the past %ld days."
+#, c-format
msgid "Messages encrypted over the past %d day: %d."
msgid_plural "Messages encrypted over the past %d days: %d."
-msgstr[0] " i løpet av gårsdagen (%ld)."
-msgstr[1] " i løpet av de %ld siste dagene."
+msgstr[0] "Krypterte meldinger i løpet av siste %d dag: %d."
+msgstr[1] "Krypterte meldinger i løpet av siste %d dager: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld month."
-#| msgid_plural " over the past %ld months."
+#, c-format
msgid "Messages verified over the past %d month: %d."
msgid_plural "Messages verified over the past %d months: %d."
-msgstr[0] " i løpet av den siste måneden (%ld)."
-msgstr[1] " i løpet av de siste %ld månedene."
+msgstr[0] "Bekreftede meldinger i løpet av siste %d måned: %d."
+msgstr[1] "Bekreftede meldinger i løpet av siste %d måneder: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld month."
-#| msgid_plural " over the past %ld months."
+#, c-format
msgid "Messages encrypted over the past %d month: %d."
msgid_plural "Messages encrypted over the past %d months: %d."
-msgstr[0] " i løpet av den siste måneden (%ld)."
-msgstr[1] " i løpet av de siste %ld månedene."
+msgstr[0] "Krypterte meldinger i løpet av siste %d måned: %d."
+msgstr[1] "Krypterte meldinger i løpet av siste %d måneder: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld day."
-#| msgid_plural " over the past %ld days."
+#, c-format
msgid "Messages verified over the past %d year: %d."
msgid_plural "Messages verified over the past %d years: %d."
-msgstr[0] " i løpet av gårsdagen (%ld)."
-msgstr[1] " i løpet av de %ld siste dagene."
+msgstr[0] "Bekreftede meldinger i løpet av siste %d år: %d."
+msgstr[1] "Bekreftede meldinger i løpet av siste %d år: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld day."
-#| msgid_plural " over the past %ld days."
+#, c-format
msgid "Messages encrypted over the past %d year: %d."
msgid_plural "Messages encrypted over the past %d years: %d."
-msgstr[0] " i løpet av gårsdagen (%ld)."
-msgstr[1] " i løpet av de %ld siste dagene."
+msgstr[0] "Krypterte meldinger i løpet av siste %d år: %d."
+msgstr[1] "Krypterte meldinger i løpet av siste %d år: %d."
-#, fuzzy, c-format
-#| msgid " over the past %ld day."
-#| msgid_plural " over the past %ld days."
+#, c-format
msgid "Messages verified in the past: %d."
-msgstr " i løpet av gårsdagen (%ld)."
-
-#, fuzzy, c-format
-#| msgid ""
-#| "Verified %ld message signed by \"%s\"\n"
-#| "in the past %s."
-#| msgid_plural ""
-#| "Verified %ld messages signed by \"%s\"\n"
-#| "in the past %s."
+msgstr "Meldinger bekreftet før dette: %d."
+
+#, c-format
msgid "Messages encrypted in the past: %d."
-msgstr ""
-"Bekreftet %ld melding signert av «%s»\n"
-"siste %s."
+msgstr "Meldinger kryptert før dette: %d."
#. TRANSLATORS: Please translate the text found in the source
#. * file below. We don't directly internationalize that text so
@@ -5605,173 +5513,111 @@ msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
msgstr "(G)od, (A)ksepter én gang, (U)kjent, (N)ekt én gang, (D)årlig? "
msgid "Defaulting to unknown.\n"
-msgstr ""
+msgstr "Bruker standardverdi (ukjent).\n"
msgid "TOFU db corruption detected.\n"
-msgstr ""
+msgstr "Oppdaget ødelagt del av TOFU-database.\n"
-#, fuzzy, c-format
-#| msgid "error writing key: %s\n"
+#, c-format
msgid "resetting keydb: %s\n"
-msgstr "feil under skriving av nøkkel: %s\n"
+msgstr "tilbakestiller nøkkeldatabase: %s\n"
-#, fuzzy, c-format
-#| msgid "error setting TOFU binding's trust level to %s\n"
+#, c-format
msgid "error setting TOFU binding's policy to %s\n"
-msgstr "feil under endring av tillitsnivå for TOFU-tilknytning til %s\n"
+msgstr "feil under endring av regel for TOFU-tilknytning til %s\n"
#, c-format
msgid "error changing TOFU policy: %s\n"
msgstr "feil under endring av TOFU-regler: %s\n"
-#, fuzzy, c-format
-#| msgid "%d~year"
-#| msgid_plural "%d~years"
+#, c-format
msgid "%lld~year"
msgid_plural "%lld~years"
-msgstr[0] "%d~år"
-msgstr[1] "%d~år"
+msgstr[0] "%lld~år"
+msgstr[1] "%lld~år"
-#, fuzzy, c-format
-#| msgid "%d~month"
-#| msgid_plural "%d~months"
+#, c-format
msgid "%lld~month"
msgid_plural "%lld~months"
-msgstr[0] "%d~måned"
-msgstr[1] "%d~måneder"
+msgstr[0] "%lld~måned"
+msgstr[1] "%lld~måneder"
#, c-format
msgid "%lld~week"
msgid_plural "%lld~weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~uke"
+msgstr[1] "%lld~uker"
-#, fuzzy, c-format
-#| msgid "%d~day"
-#| msgid_plural "%d~days"
+#, c-format
msgid "%lld~day"
msgid_plural "%lld~days"
-msgstr[0] "%d~dag"
-msgstr[1] "%d~dager"
+msgstr[0] "%lld~dag"
+msgstr[1] "%lld~dager"
-#, fuzzy, c-format
-#| msgid "%d~hour"
-#| msgid_plural "%d~hours"
+#, c-format
msgid "%lld~hour"
msgid_plural "%lld~hours"
-msgstr[0] "%d~time"
-msgstr[1] "%d~timer"
+msgstr[0] "%lld~time"
+msgstr[1] "%lld~timer"
-#, fuzzy, c-format
-#| msgid "%d~minute"
-#| msgid_plural "%d~minutes"
+#, c-format
msgid "%lld~minute"
msgid_plural "%lld~minutes"
-msgstr[0] "%d~minutt"
-msgstr[1] "%d~minutter"
+msgstr[0] "%lld~minutt"
+msgstr[1] "%lld~minutter"
-#, fuzzy, c-format
-#| msgid "%d~second"
-#| msgid_plural "%d~seconds"
+#, c-format
msgid "%lld~second"
msgid_plural "%lld~seconds"
-msgstr[0] "%d~sekund"
-msgstr[1] "%d~sekunder"
+msgstr[0] "%lld~sekund"
+msgstr[1] "%lld~sekunder"
-#, fuzzy, c-format
-#| msgid "TOFU: few signatures %d message %s"
-#| msgid_plural "TOFU: few signatures %d messages %s"
+#, c-format
msgid "%s: Verified 0~signatures and encrypted 0~messages."
-msgstr "TOFU: få signaturer %d melding %s"
+msgstr "%s: Bekreftet 0~signaturer og kryptert 0~meldinger."
-#, fuzzy, c-format
-#| msgid "Deleted %d signatures.\n"
+#, c-format
msgid "%s: Verified 0 signatures."
-msgstr "Slettet %d signaturer.\n"
-
-#, fuzzy, c-format
-#| msgid ""
-#| "Verified %ld message signed by \"%s\"\n"
-#| "in the past %s."
-#| msgid_plural ""
-#| "Verified %ld messages signed by \"%s\"\n"
-#| "in the past %s."
+msgstr "%s: Bekreftet 0 signaturer."
+
+#, c-format
msgid "%s: Verified %ld~signature in the past %s."
msgid_plural "%s: Verified %ld~signatures in the past %s."
-msgstr[0] ""
-"Bekreftet %ld melding signert av «%s»\n"
-"siste %s."
-msgstr[1] ""
-"Bekreftet %ld meldinger signert av «%s»\n"
-"siste %s."
+msgstr[0] "%s: Bekreftet %ld~signatur i løpet av siste %s."
+msgstr[1] "%s: Bekreftet %ld~signatur i løpet av siste %s."
-#, fuzzy
-#| msgid "encrypted with %lu passphrases\n"
msgid "Encrypted 0 messages."
-msgstr "kryptert med %lu passordfraser\n"
+msgstr "Kryptert 0 meldinger."
-#, fuzzy, c-format
-#| msgid ""
-#| "Verified %ld message signed by \"%s\"\n"
-#| "in the past %s."
-#| msgid_plural ""
-#| "Verified %ld messages signed by \"%s\"\n"
-#| "in the past %s."
+#, c-format
msgid "Encrypted %ld~message in the past %s."
msgid_plural "Encrypted %ld~messages in the past %s."
-msgstr[0] ""
-"Bekreftet %ld melding signert av «%s»\n"
-"siste %s."
-msgstr[1] ""
-"Bekreftet %ld meldinger signert av «%s»\n"
-"siste %s."
+msgstr[0] "Kryptert %ld~melding i løpet av siste %s."
+msgstr[1] "Kryptert %ld~meldinger i løpet av siste %s."
-#, fuzzy, c-format
-#| msgid "policy: %s"
+#, c-format
msgid "(policy: %s)"
-msgstr "regelverk: %s"
+msgstr "(regelsett: %s)"
-#, fuzzy
-#| msgid "Warning: we've have yet to see a message signed by this key!\n"
msgid ""
"Warning: we have yet to see a message signed using this key and user id!\n"
msgstr ""
-"Advarsel: vi har enda ikke sett en melding som er signert av denne "
-"nøkkelen.\n"
+"Advarsel: vi har enda ikke sett en melding som er signert med gjeldende "
+"nøkkel og bruker-ID.\n"
-#, fuzzy
-#| msgid "Warning: we've only seen a single message signed by this key!\n"
msgid ""
"Warning: we've only seen one message signed using this key and user id!\n"
msgstr ""
-"Advarsel: vi har bare sett én melding som er signert av denne nøkkelen.\n"
+"Advarsel: vi har hittil bare sett én melding som er signert med gjeldende "
+"nøkkel og bruker-ID.\n"
-#, fuzzy
-#| msgid "Warning: we've have yet to see a message signed by this key!\n"
msgid "Warning: you have yet to encrypt a message to this key!\n"
-msgstr ""
-"Advarsel: vi har enda ikke sett en melding som er signert av denne "
-"nøkkelen.\n"
+msgstr "Advarsel: du har enda ikke kryptert en melding til denne nøkkelen.\n"
-#, fuzzy
-#| msgid "Warning: we've only seen a single message signed by this key!\n"
msgid "Warning: you have only encrypted one message to this key!\n"
-msgstr ""
-"Advarsel: vi har bare sett én melding som er signert av denne nøkkelen.\n"
-
-#, fuzzy, c-format
-#| msgid ""
-#| "Warning: if you think you've seen more than %ld message signed by this "
-#| "key, then this key might be a forgery! Carefully examine the email "
-#| "address for small variations. If the key is suspect, then use\n"
-#| " %s\n"
-#| "to mark it as being bad.\n"
-#| msgid_plural ""
-#| "Warning: if you think you've seen more than %ld messages signed by this "
-#| "key, then this key might be a forgery! Carefully examine the email "
-#| "address for small variations. If the key is suspect, then use\n"
-#| " %s\n"
-#| "to mark it as being bad.\n"
+msgstr "Advarsel: du har bare kryptert én melding til denne nøkkelen.\n"
+
+#, c-format
msgid ""
"Warning: if you think you've seen more signatures by this key and user id, "
"then this key might be a forgery! Carefully examine the email address for "
@@ -5785,17 +5631,18 @@ msgid_plural ""
" %s\n"
"to mark it as being bad.\n"
msgstr[0] ""
-"Warning: if you think you've seen more than %ld message signed by this key, "
-"then this key might be a forgery! Carefully examine the email address for "
-"small variations. If the key is suspect, then use\n"
+"Warning: hvis du tror du har sett flere signaturer fra denne nøkkelen og "
+"bruker-id-en, kan det bety at nøkkelen er forfalsket. Kontroller e-"
+"postadressen nøye og se etter små variasjoner. Hvis noe ser galt ut, bør du "
+"bruke\n"
" %s\n"
-"to mark it as being bad.\n"
+"for å markere den som upålitelig.\n"
msgstr[1] ""
-"Advarsel: hvis du tror du har sett flere enn %ld meldinger som er signert av "
-"denne nøkkelen, kan det bety at den er forfalsket! Undersøk e-postadressen "
-"nøye og se etter små variasjoner i navnet.\n"
-"Bruk %s \n"
-"for å markere nøkkelen som ugyldig hvis den virker mistenkelig.\n"
+"Warning: if you think you've seen more signatures by this key and these user "
+"ids, then this key might be a forgery! Carefully examine the email "
+"addresses for small variations. If the key is suspect, then use\n"
+" %s\n"
+"to mark it as being bad.\n"
#, c-format
msgid "error opening TOFU database: %s\n"
@@ -5804,11 +5651,12 @@ msgstr "feil under åpning av TOFU-database: %s\n"
#, c-format
msgid "WARNING: Encrypting to %s, which has no non-revoked user ids\n"
msgstr ""
+"ADVARSEL: krypterer til %s. Denne har ingen bruker-id-er som ikke er "
+"opphevet\n"
-#, fuzzy, c-format
-#| msgid "error writing public keyring '%s': %s\n"
+#, c-format
msgid "error setting policy for key %s, user id \"%s\": %s"
-msgstr "feil under skriving av offentlig nøkkelknippe «%s»: %s\n"
+msgstr "feil under endring av regel for nøkkel %s, bruker-id «%s»: %s"
#, c-format
msgid "'%s' is not a valid long keyID\n"
@@ -6057,10 +5905,8 @@ msgstr "svar inneholder ikke RSA-modulus\n"
msgid "response does not contain the RSA public exponent\n"
msgstr "svar inneholder ikke offentlig RSA-eksponent\n"
-#, fuzzy
-#| msgid "response does not contain the EC public point\n"
msgid "response does not contain the EC public key\n"
-msgstr "svar inneholder ikke offentlig EC-punkt\n"
+msgstr "svar inneholder ikke offentlig EC-nøkkel\n"
msgid "response does not contain the public key data\n"
msgstr "svar inneholder ikke offentlig nøkkeldata\n"
@@ -6074,17 +5920,17 @@ msgstr "lesing av offentlig nøkkel mislyktes: %s\n"
#. * the %s at the start and end of the string.
#, c-format
msgid "%sNumber: %s%%0AHolder: %s%%0ACounter: %lu%s"
-msgstr ""
+msgstr "%sNummer\\x1f: %s%%0AHolder\\x1f: %s%%0ATeller\\x1f: %lu%s"
#, c-format
msgid "%sNumber: %s%%0AHolder: %s%s"
-msgstr ""
+msgstr "%sNummer\\x1f: %s%%0AHolder\\x1f: %s%s"
#. TRANSLATORS: This is the number of remaining attempts to
#. * enter a PIN. Use %%0A (double-percent,0A) for a linefeed.
#, c-format
msgid "Remaining attempts: %d"
-msgstr ""
+msgstr "Gjenstående forsøk: %d"
#, c-format
msgid "using default PIN as %s\n"
@@ -6096,10 +5942,8 @@ msgstr ""
"klarte ikke å bruke forvalgt PIN som %s: %s. Lar være å bruke forvalgt PIN "
"senere\n"
-#, fuzzy
-#| msgid "||Please enter the PIN"
msgid "||Please unlock the card"
-msgstr "||Skriv inn PIN-kode"
+msgstr "||Lås opp kort"
#, c-format
msgid "PIN for CHV%d is too short; minimum length is %d\n"
@@ -7053,10 +6897,9 @@ msgstr "permanent innlastede sertifikater: %u\n"
msgid " runtime cached certificates: %u\n"
msgstr " hurtiglagrede sertifikater: %u\n"
-#, fuzzy, c-format
-#| msgid " runtime cached certificates: %u\n"
+#, c-format
msgid " trusted certificates: %u (%u,%u,%u,%u)\n"
-msgstr " hurtiglagrede sertifikater: %u\n"
+msgstr " pålitelige sertifikater: %u (%u,%u,%u,%u)\n"
msgid "certificate already cached\n"
msgstr "sertifikat allerede hurtiglagret\n"
@@ -7631,7 +7474,7 @@ msgid "allow sending OCSP requests"
msgstr "tillat sending av OCSP-forespørsler"
msgid "allow online software version check"
-msgstr ""
+msgstr "tillat kontroll av programvare-versjon over nett"
msgid "inhibit the use of HTTP"
msgstr "hindre bruk av HTTP"
@@ -8079,7 +7922,7 @@ msgid "certificate has been revoked at: %s due to: %s\n"
msgstr "sertifikat opphevet %s med følgende begrunnelse: %s\n"
msgid "OCSP responder returned a status in the future\n"
-msgstr "OCSP-svartjeneste sendte status datert i fremtid\n"
+msgstr "OCSP-svartjeneste sendte status datert i framtiden\n"
msgid "OCSP responder returned a non-current status\n"
msgstr "OCSP-svartjeneste sendte status som ikke er datert i nåtid\n"
@@ -8265,10 +8108,8 @@ msgstr "|N|endre maksimal livstid for SSH-nøkler til N antall sekunder"
msgid "Options enforcing a passphrase policy"
msgstr "Valg som håndhever passordfrase-regler"
-#, fuzzy
-#| msgid "do not allow to bypass the passphrase policy"
msgid "do not allow bypassing the passphrase policy"
-msgstr "ikke tillat overstyring av passordfrase-regler"
+msgstr "ikke tillat avvik fra passordregler"
msgid "|N|set minimal required length for new passphrases to N"
msgstr "|N|endre minimal passordfrase-lengde til N"
@@ -8342,33 +8183,23 @@ msgstr "LDAP-tjenerliste"
msgid "Configuration for OCSP"
msgstr "Oppsett for OCSP"
-#, fuzzy
-#| msgid "GPG for OpenPGP"
msgid "OpenPGP"
-msgstr "GPG for OpenPGP"
+msgstr "OpenPGP"
msgid "Private Keys"
-msgstr ""
+msgstr "Privatnøkler"
-#, fuzzy
-#| msgid "Smartcard Daemon"
msgid "Smartcards"
-msgstr "Smartcard-bakgrunnsprosess"
+msgstr "Smartkort"
-#, fuzzy
-#| msgid "GPG for S/MIME"
msgid "S/MIME"
-msgstr "GPG for S/MIME"
+msgstr "S/MIME"
-#, fuzzy
-#| msgid "network error"
msgid "Network"
-msgstr "nettverksfeil"
+msgstr "Nettverk"
-#, fuzzy
-#| msgid "PIN and Passphrase Entry"
msgid "Passphrase Entry"
-msgstr "Skriving av PIN og passordfrase"
+msgstr "Skriving av passordfrase"
msgid "Component not suitable for launching"
msgstr "Komponent egner seg ikke for oppstart"
@@ -8380,15 +8211,13 @@ msgstr "Ekstern bekreftelse av komponent %s mislyktes"
msgid "Note that group specifications are ignored\n"
msgstr "Merk at gruppespesifikasjoner blir ignorert\n"
-#, fuzzy, c-format
-#| msgid "error closing '%s': %s\n"
+#, c-format
msgid "error closing '%s'\n"
-msgstr "feil under lukking av «%s»: %s\n"
+msgstr "feil under lukking av «%s»\n"
-#, fuzzy, c-format
-#| msgid "error hashing '%s': %s\n"
+#, c-format
msgid "error parsing '%s'\n"
-msgstr "feil under summering av «%s»: %s\n"
+msgstr "feil under tolkning av «%s»\n"
msgid "list all components"
msgstr "vis alle komponenter"
@@ -8408,10 +8237,8 @@ msgstr "|KOMPONENT|kontroller valg"
msgid "apply global default values"
msgstr "bruk globale standardverdier"
-#, fuzzy
-#| msgid "|FILE|take policy information from FILE"
msgid "|FILE|update configuration files using FILE"
-msgstr "|FIL|hent regler fra valgt FIL"
+msgstr "|FIL|oppdater oppsettsfiler ved bruk av valgt FIL"
msgid "get the configuration directories for @GPGCONF@"
msgstr "hent oppsettsmapper for @GPGCONF@"
@@ -8422,10 +8249,8 @@ msgstr "vis global oppsettsfil"
msgid "check global configuration file"
msgstr "kontroller global oppsettsfil"
-#, fuzzy
-#| msgid "update the trust database"
msgid "query the software version database"
-msgstr "oppdater tillitsdatabase"
+msgstr "søk i versjonsdatabase"
msgid "reload all or a given component"
msgstr "last inn én eller alle komponenter på nytt"
@@ -8617,6 +8442,25 @@ msgstr ""
#~ msgid "Error: Private DO too long (limit is %d characters).\n"
#~ msgstr "Feil: Privat DO for lang (grensa går ved %d tegn).\n"
+#~ msgid "you may not use %s while in %s mode\n"
+#~ msgstr "du kan ikke bruke «%s» i «%s»-modus\n"
+
+#~ msgid "you may not use cipher algorithm '%s' while in %s mode\n"
+#~ msgstr "du kan ikke bruke krypteringsalgoritme «%s» i %s-modus\n"
+
+#~ msgid "you may not use digest algorithm '%s' while in %s mode\n"
+#~ msgstr "du kan ikke bruke summeringsalgoritme «%s» i %s-modus\n"
+
+#~ msgid "you may not use compression algorithm '%s' while in %s mode\n"
+#~ msgstr "du kan ikke bruke komprimeringsalgoritme «%s» i «%s»-modus\n"
+
+#~ msgid "you cannot use --symmetric --encrypt while in %s mode\n"
+#~ msgstr "du kan ikke velge «--symmtric» og «--encrypt» i «%s»-modus\n"
+
+#~ msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n"
+#~ msgstr ""
+#~ "du kan ikke velge «--symmtric», «--sign» og «--encrypt» i «%s»-modus\n"
+
#~ msgid ""
#~ "can't check signature with unsupported public-key algorithm (%d): %s.\n"
#~ msgstr ""
@@ -8652,6 +8496,9 @@ msgstr ""
#~ "Advarsel: fant feil og kontrollerte bare selvsignaturer. Kjør «%s» for å "
#~ "kontrollere alle signaturer.\n"
+#~ msgid "User ID revocation failed: %s\n"
+#~ msgstr "oppheving av bruker-ID mislyktes: %s\n"
+
#~ msgid "new configuration file '%s' created\n"
#~ msgstr "ny oppsettsfil «%s» opprettet\n"
@@ -8659,8 +8506,8 @@ msgstr ""
#~ msgstr ""
#~ "ADVARSEL: valgene i «%s» trer ikke i kraft for gjeldende programøkt\n"
-#~ msgid "User ID revocation failed: %s\n"
-#~ msgstr "oppheving av bruker-ID mislyktes: %s\n"
+#~ msgid ", "
+#~ msgstr ", "
#~ msgid "||Please enter the PIN%%0A[sigs done: %lu]"
#~ msgstr "||Skriv inn PIN%%0A[signaturer utført: %lu]"
@@ -8671,6 +8518,12 @@ msgstr ""
#~ msgid "DSA requires the use of a 160 bit hash algorithm\n"
#~ msgstr "DSA krever kontrollsum på 160 bit\n"
+#~ msgid "Defaulting to unknown."
+#~ msgstr "Bruker standardverdi (ukjent)."
+
+#~ msgid "WARNING: Encrypting to %s, which has no non-revoked user ids.\n"
+#~ msgstr "ADVARSEL: %s har ingen bruker-id-er som ikke er tilbakekalt.\n"
+
#~ msgid "--store [filename]"
#~ msgstr "--store [filnavn]"
@@ -8715,952 +8568,3 @@ msgstr ""
#~ msgid "[filename]"
#~ msgstr "[filnavn]"
-
-#, fuzzy
-#~| msgid " over the past %ld day."
-#~| msgid_plural " over the past %ld days."
-#~ msgid " in the past."
-#~ msgstr " i løpet av gårsdagen (%ld)."
-
-#~ msgid "shadowing the key failed: %s\n"
-#~ msgstr "skyggelegging av nøkkel mislyktes: %s\n"
-
-#~ msgid "available TOFU policies:\n"
-#~ msgstr "tilgjengelige TOFU-regler:\n"
-
-#~ msgid "The binding %s is NOT known."
-#~ msgstr "Tilknytning %s er ukjent."
-
-#~ msgid ""
-#~ "Please indicate whether you believe the binding %s%sis legitimate (the "
-#~ "key belongs to the stated owner) or a forgery (bad)."
-#~ msgstr ""
-#~ "Oppgi hvorvidt du tror tilknytninga %s%ser sannferdig (dvs.: at nøkkelen "
-#~ "tilhører personen som hevder å eie den) eller falsk."
-
-#~ msgid "Known user IDs associated with this key:\n"
-#~ msgstr "Kjente bruker-id-er tilknyttet denne nøkkelen:\n"
-
-#~ msgid "%ld message signed"
-#~ msgid_plural "%ld messages signed"
-#~ msgstr[0] "%ld melding signert"
-#~ msgstr[1] "%ld meldinger signert"
-
-#~ msgid " over the past %ld week."
-#~ msgid_plural " over the past %ld weeks."
-#~ msgstr[0] " i løpet av den siste uka (%ld)."
-#~ msgstr[1] " i løpet av de siste %ld ukene."
-
-#~ msgid "Have never verified a message signed by key %s!\n"
-#~ msgstr "Har aldri bekreftet en melding som er signert av nøkkel %s.\n"
-
-#~ msgid ""
-#~ "Failed to collect signature statistics for \"%s\"\n"
-#~ "(key %s)\n"
-#~ msgstr ""
-#~ "Klarte ikke å samle inn signaturstatistikk for «%s»\n"
-#~ "(nøkkel %s)\n"
-
-#~ msgid "The most recent message was verified %s ago."
-#~ msgstr "Nyeste melding ble bekreftet for %s siden."
-
-#~ msgid "GPG Agent"
-#~ msgstr "GPG Agent"
-
-#~ msgid "Key Acquirer"
-#~ msgstr "Nøkkelhenter"
-
-#~ msgid "communication problem with gpg-agent\n"
-#~ msgstr "kommunikasjonsproblemer med gpg-agent\n"
-
-#~ msgid "canceled by user\n"
-#~ msgstr "avbrutt av bruker\n"
-
-#~ msgid "problem with the agent\n"
-#~ msgstr "problemer med agent\n"
-
-#~ msgid "problem with the agent (unexpected response \"%s\")\n"
-#~ msgstr "problemer med agent (uventet svar: «%s»)\n"
-
-#~ msgid "unknown TOFU DB format '%s'\n"
-#~ msgstr "«%s» er et ukjent TOFU DB-format\n"
-
-#~ msgid "libgcrypt is too old (need %s, have %s)\n"
-#~ msgstr "libgcrypt er for gammelt (krever %s, har %s)\n"
-
-#~ msgid ""
-#~ "Please enter the passphrase to unlock the secret key for the OpenPGP "
-#~ "certificate:\n"
-#~ "\"%.*s\"\n"
-#~ "%u-bit %s key, ID %s,\n"
-#~ "created %s%s.\n"
-#~ msgstr ""
-#~ "Skriv inn passordfrase for å låse opp hemmelig nøkkel til OpenPGP-"
-#~ "sertifikat:\n"
-#~ "«%.*s»\n"
-#~ "%u-bit %s-nøkkel, ID %s,\n"
-#~ "opprettet %s%s.\n"
-
-#~ msgid ""
-#~ "You need a passphrase to unlock the secret key for\n"
-#~ "user: \"%s\"\n"
-#~ msgstr ""
-#~ "Du trenger en passordfrase for å låse opp hemmelig nøkkel for\n"
-#~ "brukeren «%s»\n"
-
-#~ msgid "%u-bit %s key, ID %s, created %s"
-#~ msgstr "%u-bit %s-nøkkel, ID %s, opprettet %s"
-
-#~ msgid " (subkey on main key ID %s)"
-#~ msgstr " (undernøkkel av hovednøkkel-ID %s)"
-
-#~ msgid "Warning: Home directory contains both tofu.db and tofu.d.\n"
-#~ msgstr "Advarsel: Hjemmemappe inneholder både «tofu.db» og «tofu.d».\n"
-
-#~ msgid "Using split format for TOFU database\n"
-#~ msgstr "Bruker splittformat for TOFU-database\n"
-
-#~ msgid "can't access directory '%s': %s\n"
-#~ msgstr "fikk ikke tilgang til mappa «%s»: %s\n"
-
-#~ msgid "run as windows service (background)"
-#~ msgstr "kjør som windows-tjeneste (i bakgrunnen)"
-
-#~ msgid "running in compatibility mode - certificate chain not checked!\n"
-#~ msgstr "kjører i kompatiblitetsmodus. Sertifikatkjede ikke kontrollert.\n"
-
-#~ msgid "you found a bug ... (%s:%d)\n"
-#~ msgstr "du fant en feil … (%s:%d)\n"
-
-#~ msgid "%d user ID without valid self-signature detected\n"
-#~ msgid_plural "%d user IDs without valid self-signatures detected\n"
-#~ msgstr[0] "oppdaget %d bruker-ID uten gyldig selvsignatur\n"
-#~ msgstr[1] "oppdaget %d bruker-id-er uten gyldige selvsignaturer\n"
-
-#~ msgid "moving a key signature to the correct place\n"
-#~ msgstr "flytter en nøkkelsignatur til den rette plassen\n"
-
-#~ msgid "%d day"
-#~ msgid_plural "%d days"
-#~ msgstr[0] "%d dag"
-#~ msgstr[1] "%d dager"
-
-#~ msgid "can't gen prime with pbits=%u qbits=%u\n"
-#~ msgstr "du kan ikke lage primtall med pbits=%u qbits=%u\n"
-
-#~ msgid "can't generate a prime with less than %d bits\n"
-#~ msgstr "du kan ikke lage primtall med færre enn %d bit\n"
-
-#~ msgid "no entropy gathering module detected\n"
-#~ msgstr "fant ingen innsamlingsmodul for vilkårlighetsdata\n"
-
-#~ msgid "can't lock `%s': %s\n"
-#~ msgstr "klarte ikke å låse «%s»: %s\n"
-
-#~ msgid "`%s' is not a regular file - ignored\n"
-#~ msgstr "«%s» er ikke en vanlig fil, og blir ignorert\n"
-
-#~ msgid "note: random_seed file is empty\n"
-#~ msgstr "merk: random_seed-fila er tom\n"
-
-#~ msgid "can't read `%s': %s\n"
-#~ msgstr "klarte ikke å lese «%s»: %s\n"
-
-#~ msgid "note: random_seed file not updated\n"
-#~ msgstr "merk: random_seed-fila ble ikke oppdatert\n"
-
-#~ msgid "can't write `%s': %s\n"
-#~ msgstr "klarte ikke å skrive «%s»: %s\n"
-
-#~ msgid "can't close `%s': %s\n"
-#~ msgstr "klarte ikke å lukke «%s»: %s\n"
-
-#~ msgid "WARNING: using insecure random number generator!!\n"
-#~ msgstr "ADVARSEL: bruker usikker vikårlighetsgenerator.\n"
-
-#~ msgid ""
-#~ "The random number generator is only a kludge to let\n"
-#~ "it run - it is in no way a strong RNG!\n"
-#~ "\n"
-#~ "DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Denne vilkårlighetsgeneratoren er bare en omvei for å få programmet\n"
-#~ "til å kjøre. Den er på ingen måte en sterk RNG.\n"
-#~ "\n"
-#~ "IKKE BRUK DATA SOM ER GENERERT AV DETTE PROGRAMMET.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Please wait, entropy is being gathered. Do some work if it would\n"
-#~ "keep you from getting bored, because it will improve the quality\n"
-#~ "of the entropy.\n"
-#~ msgstr ""
-#~ "Vent mens programmet samler inn vilkårlighetsdata. Gjør gjerne noe annet "
-#~ "på maskinen\n"
-#~ "imens da aktivitet kan forbedre kvaliteten på vilkårlighetsdataene.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Not enough random bytes available. Please do some other work to give\n"
-#~ "the OS a chance to collect more entropy! (Need %d more bytes)\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ikke nok vilkårlighetsdata tilgjengelig. Gjør noe annet på datamaskinen\n"
-#~ "for å gi operativsystemet en sjanse til å samle mer vilkårlighet.\n"
-#~ "(%d byte mangler)\n"
-
-#~ msgid "unknown key protection algorithm\n"
-#~ msgstr "ukjent nøkkelbeskyttelsesalgoritme\n"
-
-#~ msgid "secret parts of key are not available\n"
-#~ msgstr "hemmelige deler av nøkkelen er ikke tilgjengelig.\n"
-
-#~ msgid "secret key already stored on a card\n"
-#~ msgstr "hemmelig nøkkel er allerede lagret på et kort\n"
-
-#~ msgid "card reader not available\n"
-#~ msgstr "kortleser er ikke tilgjengelig\n"
-
-#~ msgid "Please insert the card and hit return or enter 'c' to cancel: "
-#~ msgstr "Sett inn kortet og trykk enter, eller trykk «c» for å avbryte: "
-
-#~ msgid "Hit return when ready or enter 'c' to cancel: "
-#~ msgstr "Trykk enter når du er klar, eller trykk «c» for å avbryte: "
-
-#~ msgid "Enter New Admin PIN: "
-#~ msgstr "Tast ny Admin-PIN: "
-
-#~ msgid "Enter New PIN: "
-#~ msgstr "Tast ny PIN: "
-
-#~ msgid "Enter Admin PIN: "
-#~ msgstr "Tast Admin-PIN: "
-
-#~ msgid ""
-#~ "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-#~ msgstr ""
-#~ "du kan bare kryptere med RSA-nøkler som er 2048 bit eller kortere i «--"
-#~ "pgp2»-modus\n"
-
-#~ msgid ""
-#~ "unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-#~ msgstr ""
-#~ "klarte ikke å bruke IDEA-algoritmen for alle nøklene du krypterer til.\n"
-
-#~ msgid "key %s: not protected - skipped\n"
-#~ msgstr "nøkkel %s: ikke beskyttet - hoppet over\n"
-
-#~ msgid "about to export an unprotected subkey\n"
-#~ msgstr "du er i ferd med å eksportere en undernøkkel uten beskyttelse\n"
-
-#~ msgid "failed to unprotect the subkey: %s\n"
-#~ msgstr "klarte ikke å fjerne beskyttelsen på undernøkkelen: %s\n"
-
-#~ msgid "WARNING: secret key %s does not have a simple SK checksum\n"
-#~ msgstr "ADVARSEL: hemmelig nøkkel %s har ikke en enkel SK-sjekksum\n"
-
-#~ msgid "generate PGP 2.x compatible messages"
-#~ msgstr "lag meldinger som fungerer med PGP 2.x"
-
-#~ msgid "NOTE: %s is not available in this version\n"
-#~ msgstr "MERK: %s er ikke tilgjengelig i denne versjonen\n"
-
-#~ msgid ""
-#~ "you can only make detached or clear signatures while in --pgp2 mode\n"
-#~ msgstr "du kan bare lage adskilte eller klare signaturer i --pgp2-modus\n"
-
-#~ msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-#~ msgstr "du kan ikke signere og kryptere samtidig i «--pgp2»-modus\n"
-
-#~ msgid ""
-#~ "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-#~ msgstr "du må bruke filer (og ikke en pipe) når --pgp2 er påslått\n"
-
-#~ msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-#~ msgstr "kryptering en melding i --pgp2-modus krever IDEA-algoritmen\n"
-
-#~ msgid "-k[v][v][v][c] [user-id] [keyring]"
-#~ msgstr "-k[v][v][v][c] [bruker-ID] [nøkkelknippe]"
-
-#~ msgid "too many entries in pk cache - disabled\n"
-#~ msgstr "for mange elementer i pk-hurtiglager. Slått av\n"
-
-#~ msgid "key %s: secret key without public key - skipped\n"
-#~ msgstr "nøkkel %s: hemmelig nøkkel uten offentlig nøkkel - hoppet over\n"
-
-#~ msgid "no secret subkey for public subkey %s - ignoring\n"
-#~ msgstr ""
-#~ "ingen hemmelig undernøkkel for offentlig undernøkkel %s - ignorerer\n"
-
-#~ msgid ""
-#~ "It's up to you to assign a value here; this value will never be exported\n"
-#~ "to any 3rd party. We need it to implement the web-of-trust; it has "
-#~ "nothing\n"
-#~ "to do with the (implicitly created) web-of-certificates."
-#~ msgstr ""
-#~ "Det er opptil deg å tildele dette en verdi. Verdien blir aldri sendt\n"
-#~ "til en tredjepart. Den brukes bare til å implementere et "
-#~ "troverdighetsnett, og har\n"
-#~ "ingenting med (det implisitte) sertifikatnettet å gjøre."
-
-#~ msgid ""
-#~ "To build the Web-of-Trust, GnuPG needs to know which keys are\n"
-#~ "ultimately trusted - those are usually the keys for which you have\n"
-#~ "access to the secret key. Answer \"yes\" to set this key to\n"
-#~ "ultimately trusted\n"
-#~ msgstr ""
-#~ "GnuPG må vite hvilke nøkler du stoler fullstendig på\n"
-#~ "for å kunne bygge troverdighetsnettet. Nøkler du har tilgang til\n"
-#~ "den hemmelige nøkkelen for inngår vanligvis her. Svar «ja»\n"
-#~ "for å merke denne nøkkelen som absolutt troverdig.\n"
-
-#~ msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-#~ msgstr "Svar «ja» hvis du vil bruke denne usikre nøkkelen likevel."
-
-#~ msgid ""
-#~ "Enter the user ID of the addressee to whom you want to send the message."
-#~ msgstr "Skriv inn bruker-ID for mottakeren du vil sende meldinga til."
-
-#~ msgid ""
-#~ "Select the algorithm to use.\n"
-#~ "\n"
-#~ "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n"
-#~ "for signatures.\n"
-#~ "\n"
-#~ "Elgamal is an encrypt-only algorithm.\n"
-#~ "\n"
-#~ "RSA may be used for signatures or encryption.\n"
-#~ "\n"
-#~ "The first (primary) key must always be a key which is capable of signing."
-#~ msgstr ""
-#~ "Velg algoritme.\n"
-#~ "\n"
-#~ "DSA (evt. DSS) - digital signaturalgoritme - kan bare brukes\n"
-#~ "til signering.\n"
-#~ "\n"
-#~ "Elgamal kan bare brukes til kryptering.\n"
-#~ "\n"
-#~ "RSA kan brukes til både signering og kryptering.\n"
-#~ "\n"
-#~ "Første nøkkel (primærnøkkel) må alltid være en nøkkel som\n"
-#~ "kan brukes til signering."
-
-#~ msgid ""
-#~ "In general it is not a good idea to use the same key for signing and\n"
-#~ "encryption. This algorithm should only be used in certain domains.\n"
-#~ "Please consult your security expert first."
-#~ msgstr ""
-#~ "Du bør generelt ikke signere og kryptere med samme nøkkel.\n"
-#~ "Denne algoritmen bør bare brukes til bestemte formål.\n"
-#~ "Hør med din lokale sikkerhetsekspert hvis du er i tvil."
-
-#~ msgid "Enter the size of the key"
-#~ msgstr "Skriv inn nøkkelstørrelse"
-
-#~ msgid "Answer \"yes\" or \"no\""
-#~ msgstr "Svar «ja» eller «nei»"
-
-#~ msgid ""
-#~ "Enter the required value as shown in the prompt.\n"
-#~ "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
-#~ "get a good error response - instead the system tries to interpret\n"
-#~ "the given value as an interval."
-#~ msgstr ""
-#~ "Skriv inn påkrevet verdi som forespurt.\n"
-#~ "Du kan bruke ISO-datoformat (ÅÅÅÅ-MM-DD), men dette gir\n"
-#~ "ingen nyttige feilmeldinger. Systemet prøver i stedet å tolke\n"
-#~ "verdien som et intervall."
-
-#~ msgid "Enter the name of the key holder"
-#~ msgstr "Skriv inn navnet på nøkkelholderen"
-
-#~ msgid "please enter an optional but highly suggested email address"
-#~ msgstr "skriv inn en valgfri men anbefalt e-postadresse"
-
-#~ msgid "Please enter an optional comment"
-#~ msgstr "Skriv inn en valgfri kommentar"
-
-#~ msgid ""
-#~ "N to change the name.\n"
-#~ "C to change the comment.\n"
-#~ "E to change the email address.\n"
-#~ "O to continue with key generation.\n"
-#~ "Q to quit the key generation."
-#~ msgstr ""
-#~ "N for å endre navn.\n"
-#~ "C for å endre kommentar.\n"
-#~ "E for å endre e-postadresse.\n"
-#~ "O for å fortsette å lage nøkkel.\n"
-#~ "Q for å avbryte nøkkel."
-
-#~ msgid ""
-#~ "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-#~ msgstr "Svar «ja» (eller bare «j») for å fortsette å lage undernøkkel."
-
-#~ msgid ""
-#~ "When you sign a user ID on a key, you should first verify that the key\n"
-#~ "belongs to the person named in the user ID. It is useful for others to\n"
-#~ "know how carefully you verified this.\n"
-#~ "\n"
-#~ "\"0\" means you make no particular claim as to how carefully you verified "
-#~ "the\n"
-#~ " key.\n"
-#~ "\n"
-#~ "\"1\" means you believe the key is owned by the person who claims to own "
-#~ "it\n"
-#~ " but you could not, or did not verify the key at all. This is useful "
-#~ "for\n"
-#~ " a \"persona\" verification, where you sign the key of a pseudonymous "
-#~ "user.\n"
-#~ "\n"
-#~ "\"2\" means you did casual verification of the key. For example, this "
-#~ "could\n"
-#~ " mean that you verified the key fingerprint and checked the user ID on "
-#~ "the\n"
-#~ " key against a photo ID.\n"
-#~ "\n"
-#~ "\"3\" means you did extensive verification of the key. For example, this "
-#~ "could\n"
-#~ " mean that you verified the key fingerprint with the owner of the key "
-#~ "in\n"
-#~ " person, and that you checked, by means of a hard to forge document "
-#~ "with a\n"
-#~ " photo ID (such as a passport) that the name of the key owner matches "
-#~ "the\n"
-#~ " name in the user ID on the key, and finally that you verified (by "
-#~ "exchange\n"
-#~ " of email) that the email address on the key belongs to the key "
-#~ "owner.\n"
-#~ "\n"
-#~ "Note that the examples given above for levels 2 and 3 are *only* "
-#~ "examples.\n"
-#~ "In the end, it is up to you to decide just what \"casual\" and \"extensive"
-#~ "\"\n"
-#~ "mean to you when you sign other keys.\n"
-#~ "\n"
-#~ "If you don't know what the right answer is, answer \"0\"."
-#~ msgstr ""
-#~ "Når du signerer en bruker-ID på en nøkkel, bør du først bekrefte at\n"
-#~ "nøkkelen tilhører personen som er valgt i bruker-id-en. Det er\n"
-#~ "nyttig for andre å vite hvor nøyaktig du kontrollerte dette.\n"
-#~ "\n"
-#~ "«0» betyr at du ikke forteller noe om hvor nøye du har kontrollert "
-#~ "nøkkelen.\n"
-#~ "\n"
-#~ "«1» betyr at du tror at nøkkelen eies av personen som påstår å eie\n"
-#~ " den, men du har ikke kontrollert selve nøkkelen i det hele\n"
-#~ " tatt. Dette er nyttig ved identitetskontroll hvor du signerer\n"
-#~ " nøkkelen til et pseudonym.\n"
-#~ "\n"
-#~ "«2» betyr at du har tatt en enkel kontroll av nøkkelen. For eksempel\n"
-#~ " kan dette bety at du sjekket nøkkelens fingeravtrykk og\n"
-#~ " bruker-id-en mot et foto-ID.\n"
-#~ "\n"
-#~ "«3» betyr at du har kontrollert nøkkelen grundig, for eksempel ved at "
-#~ "du og nøkkeleieren personlig har bekreftet nøkkelens fingeravtrykk,\n"
-#~ " nøkkelens bruker-ID mot et dokument med med bilde og navn som er\n"
-#~ " vanskelig å forfalske. og at e-postadressen i nøkkelen tilhører "
-#~ "nøkkeleieren.\n"
-#~ "\n"
-#~ "Vær obs på at eksemplene gitt over for nivåene 2 og 3 *bare* er\n"
-#~ "eksempler. Det er opp til deg å bestemme hva «enkel» og\n"
-#~ "«grundig» skal bety når du signerer andres nøkler.\n"
-#~ "\n"
-#~ "Svar «0» hvis du ikke vet hva som er riktig svar."
-
-#~ msgid "Answer \"yes\" if you want to sign ALL the user IDs"
-#~ msgstr "Svar «ja» hvis du vil signere *alle* bruker-id-ene"
-
-#~ msgid ""
-#~ "Answer \"yes\" if you really want to delete this user ID.\n"
-#~ "All certificates are then also lost!"
-#~ msgstr ""
-#~ "Svar «ja» hvis du er sikker på at du vil slette bruker-id-en.\n"
-#~ "Alle sertifikater går i så fall også tapt."
-
-#~ msgid "Answer \"yes\" if it is okay to delete the subkey"
-#~ msgstr "Svar «ja» hvis du er sikker på at du vil slette undernøkkelen"
-
-#~ msgid ""
-#~ "This is a valid signature on the key; you normally don't want\n"
-#~ "to delete this signature because it may be important to establish a\n"
-#~ "trust connection to the key or another key certified by this key."
-#~ msgstr ""
-#~ "Dette er en gyldig nøkkelsignatur. Du bør normalt\n"
-#~ "ikke slette signaturen, fordi den kan brukes til å koble\n"
-#~ "en troverdighet til enten selve nøkkelen eller en \n"
-#~ "annen nøkkel som denne nøkkelen går god for."
-
-#~ msgid ""
-#~ "This signature can't be checked because you don't have the\n"
-#~ "corresponding key. You should postpone its deletion until you\n"
-#~ "know which key was used because this signing key might establish\n"
-#~ "a trust connection through another already certified key."
-#~ msgstr ""
-#~ "Du mangler nøkkelen som hører til denne signaturen, og\n"
-#~ "kan derfor ikke kontrollere den. Du bør vente med å slette den\n"
-#~ "til du vet hvilken nøkkel som ble brukt, fordi denne signeringsnøkkelen\n"
-#~ "kan være en troverdighetskobling til en annen nøkkel som allerede\n"
-#~ "er bekreftet."
-
-#~ msgid ""
-#~ "The signature is not valid. It does make sense to remove it from\n"
-#~ "your keyring."
-#~ msgstr ""
-#~ "Signaturen er ugyldig. Du bør vurdere å fjerne den\n"
-#~ "fra nøkkelknippet."
-
-#~ msgid ""
-#~ "This is a signature which binds the user ID to the key. It is\n"
-#~ "usually not a good idea to remove such a signature. Actually\n"
-#~ "GnuPG might not be able to use this key anymore. So do this\n"
-#~ "only if this self-signature is for some reason not valid and\n"
-#~ "a second one is available."
-#~ msgstr ""
-#~ "Dette er en signatur som kobler bruker-id-en til nøkkelen.\n"
-#~ "Du bør vanligvis ikke fjerne slike signaturer, fordi GnuPG\n"
-#~ "i så fall ikke kan bruke nøkkelen lenger. Bare gjør dette hvis\n"
-#~ "selvsigneringa er ugyldig av en eller annen grunn, og du\n"
-#~ "har en annen signering tilgjengelig."
-
-#~ msgid ""
-#~ "Change the preferences of all user IDs (or just of the selected ones)\n"
-#~ "to the current list of preferences. The timestamp of all affected\n"
-#~ "self-signatures will be advanced by one second.\n"
-#~ msgstr ""
-#~ "Endre innstillinger for alle bruker-id-er (eller bare valgte)\n"
-#~ "til gjeldende oppsettsliste. Tidsstempler for alle selvsigneringer\n"
-#~ "blir rykket ett sekund fremover.\n"
-
-#~ msgid ""
-#~ "Please repeat the last passphrase, so you are sure what you typed in."
-#~ msgstr "Gjenta siste passordfrase slik at du er sikker på hva du skrev inn."
-
-#~ msgid "Give the name of the file to which the signature applies"
-#~ msgstr "Oppgi navn på fila som signaturen gjelder for"
-
-#~ msgid "Answer \"yes\" if it is okay to overwrite the file"
-#~ msgstr "Svar «ja» hvis du er sikker på at du vil overskrive fila"
-
-#~ msgid ""
-#~ "Please enter a new filename. If you just hit RETURN the default\n"
-#~ "file (which is shown in brackets) will be used."
-#~ msgstr ""
-#~ "Skriv inn nytt filnavn. Hvis du bare trykker RETUR, brukes\n"
-#~ "forvalgt filnavn (vist i parentes)."
-
-#~ msgid ""
-#~ "You should specify a reason for the certification. Depending on the\n"
-#~ "context you have the ability to choose from this list:\n"
-#~ " \"Key has been compromised\"\n"
-#~ " Use this if you have a reason to believe that unauthorized persons\n"
-#~ " got access to your secret key.\n"
-#~ " \"Key is superseded\"\n"
-#~ " Use this if you have replaced this key with a newer one.\n"
-#~ " \"Key is no longer used\"\n"
-#~ " Use this if you have retired this key.\n"
-#~ " \"User ID is no longer valid\"\n"
-#~ " Use this to state that the user ID should not longer be used;\n"
-#~ " this is normally used to mark an email address invalid.\n"
-#~ msgstr ""
-#~ "Du bør oppgi en anledning for sertifiseringa.\n"
-#~ "Velg en passende anledning fra denne lista:\n"
-#~ " «Nøkkelen er komprommitert»\n"
-#~ " Velg dette hvis du tror at uautoriserte personer\n"
-#~ " har fått tilgang til en hemmelige nøkkel.\n"
-#~ " «Nøkkelen er erstattet»\n"
-#~ " Velg dette hvis du har erstattet nøkkelen med en ny.\n"
-#~ " «Nøkkelen er ikke lenger i bruk»\n"
-#~ " Velg dette hvis du ikke lenger bruker nøkkelen.\n"
-#~ " «Bruker-ID er ikke lenger gyldig»\n"
-#~ " Velg dette for å vise at bruker-id-en ikke lenger skal brukes.\n"
-#~ " Dette brukes vanligvis til å markere en e-postadresse som ugyldig.\n"
-
-#~ msgid ""
-#~ "If you like, you can enter a text describing why you issue this\n"
-#~ "revocation certificate. Please keep this text concise.\n"
-#~ "An empty line ends the text.\n"
-#~ msgstr ""
-#~ "Hvis du vil, kan du skrive inn en tekst som forklarer hvorfor du\n"
-#~ "utsteder dette opphevelsessertifikatet. Prøv å holde teksten kort.\n"
-#~ "Avslutt med en tom linje.\n"
-
-#~ msgid "create a public key when importing a secret key"
-#~ msgstr "lag en offentlig nøkkel ved importering av hemmelig nøkkel"
-
-#~ msgid " algorithms on these user IDs:\n"
-#~ msgstr " algoritmer på følgende bruker-id-er:\n"
-
-#~ msgid "key %s: already in secret keyring\n"
-#~ msgstr "nøkkel %s: finnes allerede i hemmelig nøkkelknippe\n"
-
-#~ msgid "NOTE: a key's S/N does not match the card's one\n"
-#~ msgstr "MERK: serienummer for en nøkkel samsvarer ikke med nummer på kort\n"
-
-#~ msgid "NOTE: primary key is online and stored on card\n"
-#~ msgstr "MERK: primærnøkkel er på nett og lagret på kort\n"
-
-#~ msgid "NOTE: secondary key is online and stored on card\n"
-#~ msgstr "MERK: sekundærnøkkel er på nett og lagret på kort\n"
-
-#~ msgid "%d signatures not checked due to missing keys\n"
-#~ msgstr "%d signaturer ble ikke sjekket på grunn av manglende nøkler\n"
-
-#~ msgid "%d signatures not checked due to errors\n"
-#~ msgstr "%d signaturer ble ikke sjekket på grunn av feil\n"
-
-#~ msgid "1 user ID without valid self-signature detected\n"
-#~ msgstr "oppdaget 1 bruker-ID uten gyldig selvsignatur\n"
-
-#~ msgid ""
-#~ "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-#~ "mode.\n"
-#~ msgstr ""
-#~ "Du kan ikke lage OpenPGP-signatur på en PGP-2.x-nøkkel i «--pgp2»-modus.\n"
-
-#~ msgid "This would make the key unusable in PGP 2.x.\n"
-#~ msgstr "Dette ville gjøre nøkkelen ubrukelig i PGP 2.x.\n"
-
-#~ msgid "This key is not protected.\n"
-#~ msgstr "Denne nøkkelen er ikke beskyttet.\n"
-
-#~ msgid "Key is protected.\n"
-#~ msgstr "Nøkkelen er beskyttet.\n"
-
-#~ msgid "Can't edit this key: %s\n"
-#~ msgstr "Klarte ikke å redigere denne nøkkelen: %s\n"
-
-#~ msgid ""
-#~ "Enter the new passphrase for this secret key.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Skriv inn ny passordfrase for denne hemmelige nøkklen.\n"
-#~ "\n"
-
-#~ msgid "passphrase not correctly repeated; try again"
-#~ msgstr "passordfrasen ble ikke gjentatt korrekt. Prøv igjen"
-
-#~ msgid ""
-#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Du har ikke valgt en passordfrase. Dette er sannsynligvis *ikke* lurt.\n"
-#~ "\n"
-
-#~ msgid "Do you really want to do this? (y/N) "
-#~ msgstr "Er du sikker på at du vil gjøre dette? (j/N) "
-
-#~ msgid "toggle between the secret and public key listings"
-#~ msgstr "veksle mellom hemmelig og offentlig nøkkellisting"
-
-#~ msgid "error reading secret keyblock \"%s\": %s\n"
-#~ msgstr "feil under lesing av hemmelig nøkkelblokk «%s»: %s\n"
-
-#~ msgid "User ID \"%s\": %d signatures removed\n"
-#~ msgstr "Bruker-ID «%s»: %d signaturer fjernet\n"
-
-#~ msgid "Please remove selections from the secret keys.\n"
-#~ msgstr "Fjern utvalget fra de hemmelige nøklene.\n"
-
-#~ msgid "Please select at most one subkey.\n"
-#~ msgstr "Velg minst én undernøkkel.\n"
-
-#~ msgid "No corresponding signature in secret ring\n"
-#~ msgstr "Ingen samsvarende signatur på hemmelig nøkkelknippe\n"
-
-#~ msgid "%s.\n"
-#~ msgstr "%s.\n"
-
-#~ msgid ""
-#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
-#~ "I will do it anyway. You can change your passphrase at any time,\n"
-#~ "using this program with the option \"--edit-key\".\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Du har ikke valgt en passordfrase. Dette er sannsynligvis *ikke* lurt.\n"
-#~ "Jeg fortsetter likevel. Du kan endre passordfrasen når som helst ved\n"
-#~ "å bruke valget «--edit-key».\n"
-#~ "\n"
-
-#~ msgid "writing secret key stub to `%s'\n"
-#~ msgstr "skriver foreløpig hemmelig nøkkel til «%s»\n"
-
-#~ msgid "storing key onto card failed: %s\n"
-#~ msgstr "lagring av nøkkel på kort mislyktes: %s\n"
-
-#~ msgid "WARNING: 2 files with confidential information exists.\n"
-#~ msgstr "ADVARSEL: 2 filer med konfidensiell informasjon finnes.\n"
-
-#~ msgid "%s is the unchanged one\n"
-#~ msgstr "%s er uendret\n"
-
-#~ msgid "%s is the new one\n"
-#~ msgstr "%s er ny\n"
-
-#~ msgid "Please fix this possible security flaw\n"
-#~ msgstr "Du bør fikse denne potensielle sikkerhetsrisikoen\n"
-
-#~ msgid "%lu keys cached (%lu signatures)\n"
-#~ msgstr "%lu nøkler hurtiglagret (%lu signaturer)\n"
-
-#~ msgid "use temporary files to pass data to keyserver helpers"
-#~ msgstr ""
-#~ "bruk midlertidige filer for å overføre data til nøkkeltjener-hjelpere"
-
-#~ msgid "do not delete temporary files after using them"
-#~ msgstr "ikke slett midlertidige filer etter å ha brukt dem"
-
-#~ msgid "WARNING: keyserver option `%s' is not used on this platform\n"
-#~ msgstr ""
-#~ "ADVARSEL: nøkkeltjener-valget «%s» er ikke i bruk på denne plattformen\n"
-
-#~ msgid "searching for names from %s server %s\n"
-#~ msgstr "søker etter navn fra %s tjener %s\n"
-
-#~ msgid "searching for names from %s\n"
-#~ msgstr "søker etter navn fra %s\n"
-
-#~ msgid "searching for \"%s\" from %s server %s\n"
-#~ msgstr "søker etter «%s» fra %s tjener %s\n"
-
-#~ msgid "searching for \"%s\" from %s\n"
-#~ msgstr "søker etter «%s» fra %s\n"
-
-#~ msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n"
-#~ msgstr ""
-#~ "ADVARSEL: nøkkeltjener-behandler er av en annen GnuPG-versjon (%s)\n"
-
-#~ msgid "keyserver did not send VERSION\n"
-#~ msgstr "nøkkeltjener sendte ikke «VERSION»\n"
-
-#~ msgid "keyserver communications error: %s\n"
-#~ msgstr "kommunikasjonsfeil med nøkkeltjener: %s\n"
-
-#~ msgid "external keyserver calls are not supported in this build\n"
-#~ msgstr ""
-#~ "eksterne nøkkeltjener-kall støttes ikke av denne programinstallasjonen\n"
-
-#~ msgid "no handler for keyserver scheme `%s'\n"
-#~ msgstr "ingen behandler for nøkkeltjener-skjema «%s»\n"
-
-#~ msgid "action `%s' not supported with keyserver scheme `%s'\n"
-#~ msgstr "handlinga «%s» støttes ikke med nøkkeltjener-skjema «%s»\n"
-
-#~ msgid "%s does not support handler version %d\n"
-#~ msgstr "%s støtter ikke behandlerversjon %d\n"
-
-#~ msgid "keyserver timed out\n"
-#~ msgstr "tidsavbrudd for nøkkeltjener\n"
-
-#~ msgid "keyserver internal error\n"
-#~ msgstr "intern feil på nøkkeltjener\n"
-
-#~ msgid "refreshing 1 key from %s\n"
-#~ msgstr "oppfrisker 1 nøkkel fra %s\n"
-
-#~ msgid "WARNING: unable to parse URI %s\n"
-#~ msgstr "ADVARSEL: klarte ikke å tolke adressen %s\n"
-
-#~ msgid "invalid root packet detected in proc_tree()\n"
-#~ msgstr "fant ugyldig rotpakke i proc_tree()\n"
-
-#~ msgid "NOTE: This feature is not available in %s\n"
-#~ msgstr "MERK: Denne funksjonen er ikke tilgjengelig i %s\n"
-
-#~ msgid "malformed GPG_AGENT_INFO environment variable\n"
-#~ msgstr "miljøvariabelen «GPG_AGENT_INFO» er feilformatert\n"
-
-#~ msgid "Repeat passphrase\n"
-#~ msgstr "Gjenta passordfrase\n"
-
-#~ msgid "can't query passphrase in batch mode\n"
-#~ msgstr "du kan ikke spørre om passordfrase i buntmodus\n"
-
-#~ msgid "Repeat passphrase: "
-#~ msgstr "Gjenta passordfrase: "
-
-#~ msgid "no photo viewer set\n"
-#~ msgstr "ingen bildefremviser valgt\n"
-
-#~ msgid "no corresponding public key: %s\n"
-#~ msgstr "ingen motsvarende offentlig nøkkel: %s\n"
-
-#~ msgid "public key does not match secret key!\n"
-#~ msgstr "offentlig nøkkel samsvarer ikke med hemmelig nøkkel.\n"
-
-#~ msgid "unknown protection algorithm\n"
-#~ msgstr "ukjent beskyttelsesalgoritme\n"
-
-#~ msgid "NOTE: This key is not protected!\n"
-#~ msgstr "MERK: denne nøkkelen er ikke beskyttet.\n"
-
-#~ msgid "Invalid passphrase; please try again"
-#~ msgstr "Ugyldig passordfrase. Prøv igjen"
-
-#~ msgid "%s ...\n"
-#~ msgstr "%s …\n"
-
-#~ msgid "WARNING: Weak key detected - please change passphrase again.\n"
-#~ msgstr "ADVARSEL: Oppdaget svak nøkkel. Du bør endre passordfrasen igjen.\n"
-
-#~ msgid ""
-#~ "generating the deprecated 16-bit checksum for secret key protection\n"
-#~ msgstr ""
-#~ "lager utgått 16-bit-kontrollsum for beskyttelse av hemmelig nøkkel\n"
-
-#~ msgid "public key %s is %lu seconds newer than the signature\n"
-#~ msgstr "offentlig nøkkel %s er %lu sekunder nyere enn signaturen\n"
-
-#~ msgid ""
-#~ "key %s was created %lu seconds in the future (time warp or clock "
-#~ "problem)\n"
-#~ msgstr ""
-#~ "nøkkel %s ble opprettet %lu sekunder i fremtiden (tidsforskyvnings- eller "
-#~ "klokkeproblem)\n"
-
-#~ msgid ""
-#~ "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr ""
-#~ "du må bruke «--pgp2»-modus for å signere adskilt med PGP 2.x-nøkler\n"
-
-#~ msgid ""
-#~ "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr ""
-#~ "du må bruke «--pgp2»-modus for å signere i klartekst med PGP 2.x-nøkler\n"
-
-#~ msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n"
-#~ msgstr ""
-#~ "%d marginal(er) nødvendig, %d fullstendig(e) nødvendig, tillitsmodell %s\n"
-
-#~ msgid "general error"
-#~ msgstr "generell feil"
-
-#~ msgid "unknown packet type"
-#~ msgstr "ukjent pakketype"
-
-#~ msgid "unknown digest algorithm"
-#~ msgstr "ukjent kontrollsum-algoritme"
-
-#~ msgid "bad public key"
-#~ msgstr "ugyldig offentlig nøkkel"
-
-#~ msgid "bad secret key"
-#~ msgstr "ugyldig hemmelig nøkkel"
-
-#~ msgid "bad signature"
-#~ msgstr "ugyldig signatur"
-
-#~ msgid "checksum error"
-#~ msgstr "sjekksumfeil"
-
-#~ msgid "can't open the keyring"
-#~ msgstr "klarte ikke å åpne nøkkelknippe"
-
-#~ msgid "invalid packet"
-#~ msgstr "ugyldig pakke"
-
-#~ msgid "invalid armor"
-#~ msgstr "ugyldig beskyttelse"
-
-#~ msgid "no such user id"
-#~ msgstr "bruker-id-en finnes ikke"
-
-#~ msgid "wrong secret key used"
-#~ msgstr "feil hemmelig nøkkel ble brukt"
-
-#~ msgid "file write error"
-#~ msgstr "feil under skriving av fil"
-
-#~ msgid "unknown compress algorithm"
-#~ msgstr "ukjent komprimeringsalgoritme"
-
-#~ msgid "file open error"
-#~ msgstr "feil under åpning av fil"
-
-#~ msgid "file create error"
-#~ msgstr "feil under opprettelse av fil"
-
-#~ msgid "unimplemented pubkey algorithm"
-#~ msgstr "uimplementert pubkey-algoritme"
-
-#~ msgid "unimplemented cipher algorithm"
-#~ msgstr "uimplementert krypteringsalgoritme"
-
-#~ msgid "unknown signature class"
-#~ msgstr "ukjent signaturklasse"
-
-#~ msgid "trust database error"
-#~ msgstr "feil med tillitsdatabase"
-
-#~ msgid "resource limit"
-#~ msgstr "ressursgrense"
-
-#~ msgid "invalid keyring"
-#~ msgstr "ugyldig nøkkelknippe"
-
-#~ msgid "malformed user id"
-#~ msgstr "feilformatert bruker-ID"
-
-#~ msgid "file close error"
-#~ msgstr "feil under lukking av fil"
-
-#~ msgid "file rename error"
-#~ msgstr "feil under fil-navnebytte"
-
-#~ msgid "file delete error"
-#~ msgstr "feil under sletting av fil"
-
-#~ msgid "unexpected data"
-#~ msgstr "uforventet data"
-
-#~ msgid "timestamp conflict"
-#~ msgstr "konflikt mellom tidsstempler"
-
-#~ msgid "unusable pubkey algorithm"
-#~ msgstr "ubrukelig pubkey algoritme"
-
-#~ msgid "file exists"
-#~ msgstr "fila finnes fra før av"
-
-#~ msgid "weak key"
-#~ msgstr "svak nøkkel"
-
-#~ msgid "bad URI"
-#~ msgstr "ugyldig URI"
-
-#~ msgid "not processed"
-#~ msgstr "ikke behandlet"
-
-#~ msgid "unusable public key"
-#~ msgstr "ubrukelig offentlig nøkkel"
-
-#~ msgid "unusable secret key"
-#~ msgstr "ubrukelig hemmelig nøkkel"
-
-#~ msgid "keyserver error"
-#~ msgstr "feil på nøkkeltjener"
-
-#~ msgid "no card"
-#~ msgstr "ingen kort"
-
-#~ msgid "no data"
-#~ msgstr "ingen data"
-
-#~ msgid "ERROR: "
-#~ msgstr "FEIL: "
-
-#~ msgid "... this is a bug (%s:%d:%s)\n"
-#~ msgstr "… dette er en feil (%s:%d:%s)\n"
-
-#~ msgid ""
-#~ "please see http://www.gnupg.org/documentation/faqs.html for more "
-#~ "information\n"
-#~ msgstr ""
-#~ "se http://www.gnupg.org/documentation/faqs.html for mer informasjon\n"
-
-#~ msgid "operation is not possible without initialized secure memory\n"
-#~ msgstr "handlinga kan ikke utføres uten sikkert minne\n"
-
-#~ msgid "(you may have used the wrong program for this task)\n"
-#~ msgstr "(du kan ha brukt feil program til denne oppgaven)\n"
diff --git a/po/ru.po b/po/ru.po
index 652803e..f995349 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 Free Software Foundation, Inc.
+# Copyright (C) 2017 Free Software Foundation, Inc.
# This file is distributed under the same license as the GnuPG package.
# Maxim Britov <maxim.britov@gmail.com>, 2006.
# !-- no such user (2011-01-11)
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GnuPG 2.1.0\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2017-03-01 17:17+0000\n"
+"PO-Revision-Date: 2017-08-05 17:17+0000\n"
"Last-Translator: Ineiev <ineiev@gnu.org>\n"
"Language-Team: Russian <gnupg-ru@gnupg.org>\n"
"Language: ru\n"
@@ -378,7 +378,7 @@ msgid "enable ssh support"
msgstr "включить поддержку ssh"
msgid "|ALGO|use ALGO to show ssh fingerprints"
-msgstr ""
+msgstr "|ALGO|использовать алгоритм ALGO для отображения отпечатков"
msgid "enable putty support"
msgstr "включить поддержку putty"
@@ -1209,15 +1209,16 @@ msgstr "Внимание: %s\n"
msgid "Note: Outdated servers may lack important security fixes.\n"
msgstr ""
+"Замечание: На старых серверах могут быть оставаться ошибки, критичные для "
+"безопасности.\n"
#, c-format
msgid "Note: Use the command \"%s\" to restart them.\n"
-msgstr ""
+msgstr "Замечание: Для их перезагрузки воспользуйтесь командой \"%s\".\n"
-#, fuzzy, c-format
-#| msgid "%s does not yet work with %s\n"
+#, c-format
msgid "%s is not compliant with %s mode\n"
-msgstr "%s пока не работает совместно с %s!\n"
+msgstr "%s не совместим с режимом %s\n"
#, c-format
msgid "OpenPGP card not available: %s\n"
@@ -1569,15 +1570,13 @@ msgstr ""
"Внимание: принудительное использование симметричного шифра %s (%d)\n"
" нарушает предпочтения получателя\n"
-#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
+#, c-format
msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "шифрование '%s' в режиме %s использовать нельзя\n"
+msgstr "алгоритм шифрования '%s' нельзя использовать в режиме %s\n"
-#, fuzzy, c-format
-#| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
+#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
-msgstr "Внимание: параметр \"%s%s\" устарел - он игнорируется\n"
+msgstr "Внимание: ключ %s не подходит для шифрования в режиме %s\n"
#, c-format
msgid ""
@@ -1595,10 +1594,9 @@ msgstr ""
msgid "%s/%s encrypted for: \"%s\"\n"
msgstr "%s/%s зашифровано для пользователя \"%s\"\n"
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
msgid "option '%s' may not be used in %s mode\n"
-msgstr "нельзя использовать %s в режиме %s\n"
+msgstr "параметр '%s' нельзя использовать в режиме %s\n"
#, c-format
msgid "%s encrypted data\n"
@@ -2274,15 +2272,13 @@ msgstr "недопустимые личные предпочтения алго
msgid "%s does not yet work with %s\n"
msgstr "%s пока не работает совместно с %s!\n"
-#, fuzzy, c-format
-#| msgid "you may not use digest algorithm '%s' while in %s mode\n"
+#, c-format
msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "хеш-функцию '%s' в режиме %s использовать нельзя\n"
+msgstr "хеш-функцию '%s' нельзя использовать в режиме %s\n"
-#, fuzzy, c-format
-#| msgid "you may not use compression algorithm '%s' while in %s mode\n"
+#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
-msgstr "сжатие '%s' в режиме %s использовать нельзя\n"
+msgstr "алгоритм сжатия '%s' нельзя использовать в режиме %s\n"
#, c-format
msgid "failed to initialize the TrustDB: %s\n"
@@ -2300,8 +2296,7 @@ msgstr "сбой симметричного шифрования '%s': %s\n"
msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n"
msgstr "--symmetric --encrypt нельзя использовать совместно с --s2k-mode 0\n"
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --encrypt while in %s mode\n"
+#, c-format
msgid "you cannot use --symmetric --encrypt in %s mode\n"
msgstr "в режиме %s нельзя использовать --symmetric --encrypt\n"
@@ -2309,8 +2304,7 @@ msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n"
msgstr ""
"нельзя использовать --symmetric --sign --encrypt совместно с --s2k-mode 0\n"
-#, fuzzy, c-format
-#| msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n"
+#, c-format
msgid "you cannot use --symmetric --sign --encrypt in %s mode\n"
msgstr "в режиме %s нельзя использовать --symmetric --sign --encrypt\n"
@@ -2432,10 +2426,8 @@ msgstr "применить фильтры импорта и немедленно
msgid "assume the GnuPG key backup format"
msgstr "ожидать ключи в архивном формате GnuPG"
-#, fuzzy
-#| msgid "show key during import"
msgid "repair keys on import"
-msgstr "показывать ключ во время импорта"
+msgstr "исправлять ключи при импорте"
#, c-format
msgid "skipping block of type %d\n"
@@ -3268,20 +3260,16 @@ msgstr "сбой при обновлении: %s\n"
msgid "Key not changed so no update needed.\n"
msgstr "Ключ не изменялся - обновление не нужно.\n"
-#, fuzzy
-#| msgid "You can't delete the last user ID!\n"
msgid "cannot revoke the last valid user ID.\n"
-msgstr "Вы не можете удалить последний идентификатор пользователя!\n"
+msgstr "нельзя удалять последний действительный идентификатор пользователя.\n"
-#, fuzzy, c-format
-#| msgid "checking the trust list failed: %s\n"
+#, c-format
msgid "revoking the user ID failed: %s\n"
-msgstr "сбой проверки списка доверия: %s\n"
+msgstr "сбой отзыва идентификатора пользователя: %s\n"
-#, fuzzy, c-format
-#| msgid "checking the trust list failed: %s\n"
+#, c-format
msgid "setting the primary user ID failed: %s\n"
-msgstr "сбой проверки списка доверия: %s\n"
+msgstr "сбой установки первичного идентификатора пользователя: %s\n"
#, c-format
msgid "\"%s\" is not a fingerprint\n"
@@ -3305,15 +3293,13 @@ msgstr "Подписывать нечего.\n"
msgid "'%s' is not a valid expiration time\n"
msgstr "'%s' - не допустимый срок действия\n"
-#, fuzzy, c-format
-#| msgid "\"%s\" is not a fingerprint\n"
+#, c-format
msgid "\"%s\" is not a proper fingerprint\n"
-msgstr "\"%s\" - не отпечаток\n"
+msgstr "\"%s\" - не правильный отпечаток\n"
-#, fuzzy, c-format
-#| msgid "key \"%s\" not found\n"
+#, c-format
msgid "subkey \"%s\" not found\n"
-msgstr "ключ \"%s\" не найден\n"
+msgstr "подключ \"%s\" не найден\n"
msgid "Digest: "
msgstr "Хеш: "
@@ -3621,10 +3607,8 @@ msgstr ""
"Внимание: подпись идентификатора пользователя датирована %d секундами в "
"будущем\n"
-#, fuzzy
-#| msgid "You can't delete the last user ID!\n"
msgid "Cannot revoke the last valid user ID.\n"
-msgstr "Вы не можете удалить последний идентификатор пользователя!\n"
+msgstr "Нельзя удалять последний действительный идентификатор пользователя.\n"
#, c-format
msgid "Key %s is already revoked.\n"
@@ -4398,10 +4382,9 @@ msgstr "[сомнительно]"
msgid " aka \"%s\""
msgstr " или \"%s\""
-#, fuzzy, c-format
-#| msgid "WARNING: This key is not certified with a trusted signature!\n"
+#, c-format
msgid "WARNING: This key is not suitable for signing in %s mode\n"
-msgstr "Внимание: Данный ключ не заверен доверенной подписью!\n"
+msgstr "Внимание: Данный ключ не подходит для подписи в режиме %s\n"
#, c-format
msgid "Signature expired %s\n"
@@ -4937,10 +4920,9 @@ msgstr "не могу открыть подписанные данные '%s'\n"
msgid "can't open signed data fd=%d: %s\n"
msgstr "не могу открыть подписанные данные fd=%d: %s\n"
-#, fuzzy, c-format
-#| msgid "certificate is not usable for encryption\n"
+#, c-format
msgid "key %s is not suitable for decryption in %s mode\n"
-msgstr "сертификат не пригоден для шифрования\n"
+msgstr "ключ %s не пригоден для расшифрования в режиме %s\n"
#, c-format
msgid "anonymous recipient; trying secret key %s ...\n"
@@ -5117,10 +5099,9 @@ msgstr "Ключ %s %s требует %zu-битного или более дл
msgid "WARNING: signature digest conflict in message\n"
msgstr "Внимание: конфликт хешей подписей в сообщении\n"
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
msgid "key %s may not be used for signing in %s mode\n"
-msgstr "нельзя использовать %s в режиме %s\n"
+msgstr "ключ %s нельзя использовать для подписи в режиме %s\n"
#, c-format
msgid "WARNING: signing subkey %s is not cross-certified\n"
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index 365f246..f9d07ac 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -943,8 +943,8 @@ determine_rsa_response (app_t app, int keyno)
int size;
size = 2 + 3 /* header */
- + 4 /* tag+len */ + app->app_local->keyattr[keyno].rsa.n_bits/8
- + 2 /* tag+len */ + app->app_local->keyattr[keyno].rsa.e_bits/8;
+ + 4 /* tag+len */ + (app->app_local->keyattr[keyno].rsa.n_bits+7)/8
+ + 2 /* tag+len */ + (app->app_local->keyattr[keyno].rsa.e_bits+7)/8;
return size;
}
diff --git a/tests/gpgscm/scheme.c b/tests/gpgscm/scheme.c
index f5e52fc..4384841 100644
--- a/tests/gpgscm/scheme.c
+++ b/tests/gpgscm/scheme.c
@@ -2990,7 +2990,7 @@ _Error_1(scheme *sc, const char *s, pointer a) {
/* Define a label OP and emit a case statement for OP. For use in the
* dispatch function. The slightly peculiar goto that is never
* executed avoids warnings about unused labels. */
-#define CASE(OP) if (0) goto OP; OP: case OP
+#define CASE(OP) case OP: if (0) goto OP; OP
#else /* USE_THREADED_CODE */
#define s_thread_to(sc, a) s_goto(sc, a)
@@ -3727,7 +3727,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_thread_to(sc,OP_APPLY);
}
}
-
+ /* Fallthrough. */
#else
CASE(OP_LAMBDA): /* lambda */
sc->value = sc->code;
@@ -4655,9 +4655,13 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
CASE(OP_NULLP): /* null? */
s_retbool(car(sc->args) == sc->NIL);
CASE(OP_NUMEQ): /* = */
+ /* Fallthrough. */
CASE(OP_LESS): /* < */
+ /* Fallthrough. */
CASE(OP_GRE): /* > */
+ /* Fallthrough. */
CASE(OP_LEQ): /* <= */
+ /* Fallthrough. */
CASE(OP_GEQ): /* >= */
switch(op) {
case OP_NUMEQ: comp_func=num_eq; break;
@@ -4746,7 +4750,9 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_return(sc,sc->value);
CASE(OP_WRITE): /* write */
+ /* Fallthrough. */
CASE(OP_DISPLAY): /* display */
+ /* Fallthrough. */
CASE(OP_WRITE_CHAR): /* write-char */
if(is_pair(cdr(sc->args))) {
if(cadr(sc->args)!=sc->outport) {
@@ -4894,7 +4900,9 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_return(sc,sc->outport);
CASE(OP_OPEN_INFILE): /* open-input-file */
+ /* Fallthrough. */
CASE(OP_OPEN_OUTFILE): /* open-output-file */
+ /* Fallthrough. */
CASE(OP_OPEN_INOUTFILE): /* open-input-output-file */ {
int prop=0;
pointer p;
@@ -4914,6 +4922,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
#if USE_STRING_PORTS
CASE(OP_OPEN_INSTRING): /* open-input-string */
+ /* Fallthrough. */
CASE(OP_OPEN_INOUTSTRING): /* open-input-output-string */ {
int prop=0;
pointer p;
@@ -4994,6 +5003,7 @@ Eval_Cycle(scheme *sc, enum scheme_opcodes op) {
s_thread_to(sc,OP_READ_INTERNAL);
CASE(OP_READ_CHAR): /* read-char */
+ /* Fallthrough. */
CASE(OP_PEEK_CHAR): /* peek-char */ {
int c;
if(is_pair(sc->args)) {
diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
index 506bce5..f6014c9 100644
--- a/tests/openpgp/Makefile.am
+++ b/tests/openpgp/Makefile.am
@@ -82,6 +82,9 @@ XTESTS = \
ecc.scm \
4gb-packet.scm \
tofu.scm \
+ trust-pgp-1.scm \
+ trust-pgp-2.scm \
+ trust-pgp-3.scm \
gpgtar.scm \
use-exact-key.scm \
default-key.scm \
@@ -99,6 +102,10 @@ XTESTS = \
issue2929.scm \
issue2941.scm
+# Temporary removed tests:
+# trust-pgp-4.scm
+
+
# XXX: Currently, one cannot override automake's 'check' target. As a
# workaround, we avoid defining 'TESTS', thus automake will not emit
# the 'check' target. For extra robustness, we merely define a
@@ -158,7 +165,18 @@ TEST_FILES = pubring.asc secring.asc plain-1o.asc plain-2o.asc plain-3o.asc \
key-selection/1.asc \
key-selection/2.asc \
key-selection/3.asc \
- key-selection/4.asc
+ key-selection/4.asc \
+ trust-pgp/scenario1.asc \
+ trust-pgp/scenario2.asc \
+ trust-pgp/scenario3.asc \
+ trust-pgp/scenario4.asc \
+ trust-pgp/alice.sec.asc \
+ trust-pgp/bobby.sec.asc \
+ trust-pgp/carol.sec.asc \
+ trust-pgp/david.sec.asc \
+ trust-pgp/frank.sec.asc \
+ trust-pgp/grace.sec.asc \
+ trust-pgp/heidi.sec.asc
data_files = data-500 data-9000 data-32000 data-80000 plain-large
@@ -248,9 +266,9 @@ sample_msgs = samplemsgs/clearsig-1-key-1.asc \
samplemsgs/signed-2-keys-1.asc \
samplemsgs/signed-2-keys-2.asc
-EXTRA_DIST = defs.scm $(XTESTS) $(TEST_FILES) \
+EXTRA_DIST = defs.scm trust-pgp/common.scm $(XTESTS) $(TEST_FILES) \
mkdemodirs signdemokey $(priv_keys) $(sample_keys) \
- $(sample_msgs) ChangeLog-2011 run-tests.scm \
+ $(sample_msgs) ChangeLog-2011 run-tests.scm trust-pgp-4.scm \
setup.scm shell.scm all-tests.scm signed-messages.scm
CLEANFILES = prepared.stamp x y yy z out err $(data_files) \
diff --git a/tests/openpgp/README b/tests/openpgp/README
index 42e78ae..94a00fa 100644
--- a/tests/openpgp/README
+++ b/tests/openpgp/README
@@ -1,6 +1,15 @@
# Emacs, this is an -*- org -*- file.
* How to run the test suite
+** tldr: How to run all tests fast.
+
+ obj $ make check-all TESTFLAGS=--parallel
+
+You can use --parallel=N to request N parallel jobs. Hint: Tuck
+TESTFLAGS=--parallel in your environment.
+
+** Running individual test suites or tests
+
From your build directory, run
obj $ make -C tests/openpgp check
@@ -16,6 +25,34 @@ spawned programs to their standard error stream, verbose=2 to see what
programs are executed, or verbose=3 to see even more program output
and exit codes.
+** Inspecting the test environment
+
+To inspect the environment in which tests are running, or to quickly
+create keys for debugging or testing, you can start a shell. There is
+one test that doese just that:
+
+ obj $ make -C tests/openpgp check TESTS=shell.scm
+ PASS: tests/openpgp/setup.scm
+ Load legacy test environment? [Y/n] y
+ Drop 'batch' from gpg.conf? [Y/n] y
+
+ Enjoy your test environment. Type 'exit' to exit it, it will be cleaned up after you.
+
+ ... $ gpg -k Alfa
+ gpg: NOTE: THIS IS A DEVELOPMENT VERSION!
+ gpg: It is only intended for test purposes and should NOT be
+ gpg: used in a production environment or with production keys!
+ gpg: /tmp/gpgscm-20170809T144032-run-tests-PFfybw/trustdb.gpg: trustdb created
+ pub dsa1024 1999-03-08 [SCA]
+ A0FF4590BB6122EDEF6E3C542D727CC768697734
+ uid [ unknown] Alfa Test (demo key) <alfa@example.net>
+ uid [ unknown] Alpha Test (demo key) <alpha@example.net>
+ uid [ unknown] Alice (demo key)
+ sub elg1024 1999-03-08 [E]
+
+PATH is adjusted so that you will use the tools from the build tree.
+Note that the directory is removed when you exit the shell.
+
** Passing options to the test driver
You can set TESTFLAGS to pass flags to 'run-tests.scm'. For example,
@@ -58,9 +95,9 @@ suite.
The test suite does not hardcode any paths to tools. If set it is
used to locate the tools to test, otherwise the test suite assumes to
be run from the build directory.
-**** MKTDATA and GPG_PRESET_PASSPHRASE
-These two tools are not installed by 'make install', hence we need to
-explicitly override their position. In fact, the location of any tool
+**** GPG_PRESET_PASSPHRASE
+This tool is not installed by 'make install', hence we need to
+explicitly override its position. In fact, the location of any tool
used by the test suite can be overridden this way. See defs.scm.
**** argv[0]
run-tests.scm depends on being able to re-exec gpgscm. It uses
diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm
index 358efa6..f52f316 100644
--- a/tests/openpgp/defs.scm
+++ b/tests/openpgp/defs.scm
@@ -466,5 +466,29 @@
(catch (log "Warning: Removing socket directory failed.")
(gpg-conf '--remove-socketdir)))
+;; Get the trust level for KEYID. Any remaining arguments are simply
+;; passed to GPG.
+;;
+;; This function only supports keys with a single user id.
+(define (gettrust keyid . args)
+ (let ((trust
+ (list-ref (assoc "pub" (gpg-with-colons
+ `(,@args
+ --list-keys ,keyid))) 1)))
+ (unless (and (= 1 (string-length trust))
+ (member (string-ref trust 0) (string->list "oidreqnmfuws-")))
+ (fail "Bad trust value:" trust))
+ trust))
+
+;; Check that KEYID's trust level matches EXPECTED-TRUST. Any
+;; remaining arguments are simply passed to GPG.
+;;
+;; This function only supports keys with a single user id.
+(define (checktrust keyid expected-trust . args)
+ (let ((trust (apply gettrust `(,keyid ,@args))))
+ (unless (string=? trust expected-trust)
+ (fail keyid ": Expected trust to be" expected-trust
+ "but got" trust))))
+
;; end
diff --git a/tests/openpgp/tofu.scm b/tests/openpgp/tofu.scm
index 58b2a03..cd4b4c7 100755
--- a/tests/openpgp/tofu.scm
+++ b/tests/openpgp/tofu.scm
@@ -71,30 +71,6 @@
(fail keyid ": Expected policy to be" expected-policy
"but got" policy))))
-;; Get the trust level for KEYID. Any remaining arguments are simply
-;; passed to GPG.
-;;
-;; This function only supports keys with a single user id.
-(define (gettrust keyid . args)
- (let ((trust
- (list-ref (assoc "pub" (gpg-with-colons
- `(,@args
- --list-keys ,keyid))) 1)))
- (unless (and (= 1 (string-length trust))
- (member (string-ref trust 0) (string->list "oidreqnmfuws-")))
- (fail "Bad trust value:" trust))
- trust))
-
-;; Check that KEYID's trust level matches EXPECTED-TRUST. Any
-;; remaining arguments are simply passed to GPG.
-;;
-;; This function only supports keys with a single user id.
-(define (checktrust keyid expected-trust . args)
- (let ((trust (apply gettrust `(,keyid ,@args))))
- (unless (string=? trust expected-trust)
- (fail keyid ": Expected trust to be" expected-trust
- "but got" trust))))
-
;; Set key KEYID's policy to POLICY. Any remaining arguments are
;; passed as options to gpg.
(define (setpolicy keyid policy . args)
diff --git a/tests/openpgp/trust-pgp-1.scm b/tests/openpgp/trust-pgp-1.scm
new file mode 100755
index 0000000..235cb55
--- /dev/null
+++ b/tests/openpgp/trust-pgp-1.scm
@@ -0,0 +1,76 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 Damien Goutte-Gattat
+;;
+;; This file is part of GnuPG.
+;;
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (in-srcdir "tests" "openpgp" "trust-pgp" "common.scm"))
+
+(display "Checking basic WoT (classic trust model)...\n")
+
+(initscenario "scenario1")
+
+;; Check initial state.
+(checktrust BOBBY "f") ;; Directly signed by Alice's key.
+(checktrust CAROL "q") ;; Signed by Bobby, whose key has
+ ;; no explicit ownertrust.
+(checktrust DAVID "q") ;; Likewise.
+(checktrust FRANK "q") ;; Likewise.
+(checktrust GRACE "-") ;; Signed by the previous three keys;
+ ;; not evaluated since they are not valid.
+
+;; Let's trust Bobby.
+;; This should make Carol's, David's, and Frank's keys valid.
+(setownertrust BOBBY FULLTRUST)
+(updatetrustdb)
+(checktrust CAROL "f")
+(checktrust DAVID "f")
+(checktrust FRANK "f")
+(checktrust GRACE "q") ;; Now evaluated, but validity still unknown.
+
+;; Let's trust (marginally) Carol and David.
+;; This should not be enough to make Grace's key fully valid
+;; since marginals-needed defaults to 3.
+(setownertrust CAROL MARGINALTRUST)
+(setownertrust DAVID MARGINALTRUST)
+(updatetrustdb)
+(checktrust GRACE "m")
+
+;; Add marginal ownertrust to Frank's key.
+;; This should make Grace's key fully valid.
+(setownertrust FRANK MARGINALTRUST)
+(updatetrustdb)
+(checktrust GRACE "f")
+
+;; Now let's play with the length of certification chains.
+;; Setting max-cert-length to 2 should put Grace's key
+;; one step too far from Alice's key.
+(let ((max-cert-depth (gpg-config 'gpg "max-cert-depth")))
+ (max-cert-depth::update 2))
+(updatetrustdb)
+(checktrust GRACE "-")
+
+;; Raise the bar for assigning full validity.
+;; Bobby's key should be the only one retaining full validity.
+(let ((completes-needed (gpg-config 'gpg "completes-needed")))
+ (completes-needed::update 2))
+(updatetrustdb)
+(checktrust BOBBY "f")
+(checktrust CAROL "m")
+(checktrust DAVID "m")
+(checktrust FRANK "m")
+(checktrust GRACE "-")
diff --git a/tests/openpgp/trust-pgp-2.scm b/tests/openpgp/trust-pgp-2.scm
new file mode 100755
index 0000000..a56d0a9
--- /dev/null
+++ b/tests/openpgp/trust-pgp-2.scm
@@ -0,0 +1,39 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 Damien Goutte-Gattat
+;;
+;; This file is part of GnuPG.
+;;
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (in-srcdir "tests" "openpgp" "trust-pgp" "common.scm"))
+
+(display "Checking WoT with trust signatures (PGP trust model)...\n")
+
+(initscenario "scenario2")
+
+(checktrust BOBBY "f") ;; Tsigned by Alice with trust=120.
+(checktrust CAROL "f") ;; Signed by Bobby, whose key should have full
+ ;; ownertrust due to the tsig.
+(checktrust DAVID "f") ;; Signed by Alice.
+(checktrust FRANK "q") ;; Tsigned by David, whose key has no ownertrust.
+(checktrust GRACE "-") ;; Signed by Frank.
+
+(setownertrust DAVID FULLTRUST)
+(updatetrustdb)
+(checktrust FRANK "f") ;; David's key has now full ownertrust.
+(checktrust GRACE "q") ;; David is not authorized to emit tsigs,
+ ;; so his tsig on Frank's key should be treated
+ ;; like a normal sig (confering no ownertrust).
diff --git a/tests/openpgp/trust-pgp-3.scm b/tests/openpgp/trust-pgp-3.scm
new file mode 100755
index 0000000..33832db
--- /dev/null
+++ b/tests/openpgp/trust-pgp-3.scm
@@ -0,0 +1,31 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 Damien Goutte-Gattat
+;;
+;; This file is part of GnuPG.
+;;
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (in-srcdir "tests" "openpgp" "trust-pgp" "common.scm"))
+
+(display "Checking max depth of trust signature chains...\n")
+
+(initscenario "scenario3")
+
+(checktrust BOBBY "f") ;; Tsigned by Alice (level=2, trust=120).
+(checktrust CAROL "f") ;; Tsigned by Bobby (level=2, trust=120).
+(checktrust DAVID "f") ;; Tsigned by Carol (level=2, trust=120).
+(checktrust FRANK "q") ;; The tsig from Carol does not confer
+ ;; ownertrust to David's key (too deep).
diff --git a/tests/openpgp/trust-pgp-4.scm b/tests/openpgp/trust-pgp-4.scm
new file mode 100755
index 0000000..17746a5
--- /dev/null
+++ b/tests/openpgp/trust-pgp-4.scm
@@ -0,0 +1,37 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 Damien Goutte-Gattat
+;;
+;; This file is part of GnuPG.
+;;
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (in-srcdir "tests" "openpgp" "trust-pgp" "common.scm"))
+
+(display "Checking trust signature with domain restrictions...\n")
+
+(initscenario "scenario4")
+
+(checktrust BOBBY "f") ;; Tsigned by Alice, allowed to sign for example.com.
+(checktrust CAROL "-") ;; Signed by Bobby, but the signature should be
+ ;; ignored since Carol has an address in example.net.
+
+(checktrust DAVID "f") ;; Tsigned by Alice, allowed to sign for example.net.
+(checktrust FRANK "-") ;; Tsignature from David should be ignored because
+ ;; Frank has an address in example.com.
+
+(checktrust HEIDI "f") ;; Tsigned by David, should be valid since Heidi
+ ;; has an address in example.org.
+(checktrust GRACE "f") ;; Signed by Heidi.
diff --git a/tests/openpgp/trust-pgp/alice.sec.asc b/tests/openpgp/trust-pgp/alice.sec.asc
new file mode 100644
index 0000000..1cdde46
--- /dev/null
+++ b/tests/openpgp/trust-pgp/alice.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW2+WxMIKoZIzj0DAQcCAwQnUnqiwvOPU7gGepFTew8Fk5kmVexr+PvaqXgv
+9wKxNzZrs4GvamULk9pl2euwJGKPBRJRz8RSNpW6HIIzAPoOAAEAgOZk+WDjrmum
+0OygJdb6qJp27qsyXvMVZ8AGlsdYtUgS37QZQWxpY2UgPGFsaWNlQGV4YW1wbGUu
+b3JnPoiQBBMTCAA4FiEE/Zsg3TyYEj7ur4zFG6QVONLmVrUFAlltvlsCGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQG6QVONLmVrU7PAEAvOqeIRMiJ8Ne0tz+
+K1aRz/np/umCQxO8ddm9mnr4M7EA/1z4YdD06wJXp4RXUI0G2QOHTY+QXMShCFrp
+ySArWQqN
+=3+Iz
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/bobby.sec.asc b/tests/openpgp/trust-pgp/bobby.sec.asc
new file mode 100644
index 0000000..2164b5d
--- /dev/null
+++ b/tests/openpgp/trust-pgp/bobby.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3WihMIKoZIzj0DAQcCAwTtUYI84wfNPCwa/r2ke7tXz0uv/En9LQZbW0QE
+nzHigEvMXLfyjfjCf5tQ2eVbKLbABxtKwDtC2bv8dMcmgqd/AAEA6EzyQYtLOL9v
+4SErBRic7MmQfxFbEJIQSu2vtbWos/0QFLQZQm9iYnkgPGJvYmJ5QGV4YW1wbGUu
+Y29tPoiQBBMTCAA4FiEETT9Z9NgDD9LYRK/rpbrD7RJcyuUFAllt1ooCGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQpbrD7RJcyuWUjgEA9UreuOxgDzhSCGAQ
+5GtxBiXkmp/IuH/rvNI8qZaVnoIBAPs/VUgy3eySjF6g9wf/UzvqwUdtoaYvkyC2
+a25O7Lxc
+=76RO
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/carol.sec.asc b/tests/openpgp/trust-pgp/carol.sec.asc
new file mode 100644
index 0000000..d366f3f
--- /dev/null
+++ b/tests/openpgp/trust-pgp/carol.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3WrxMIKoZIzj0DAQcCAwS4HzEJ0YwXZ1SWciHOmWdfnESTvwC3Zb/sWRu8
+zdIeZzxAwu8lYQaDq/eOgKeXQVW5gxkQG5rCWUazbG+gCBEIAAEA2QzHlkxFJkTg
+QvZuimqU0AySYsleRUaO9B9UARiUbOYOwrQZQ2Fyb2wgPGNhcm9sQGV4YW1wbGUu
+bmV0PoiQBBMTCAA4FiEEbGJzXkVMzdefpspgEHkROuwSgv0FAllt1q8CGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQEHkROuwSgv3MygD+KdusoDvz7WZbsjjB
+WI/HLhWfWfXsoAR9mN/5rZ94HDgA/1VqbvUcM+vPU62g7/0qoGqWCda3SURB6263
+Kirbk6hY
+=wkQ4
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/common.scm b/tests/openpgp/trust-pgp/common.scm
new file mode 100644
index 0000000..2a545e8
--- /dev/null
+++ b/tests/openpgp/trust-pgp/common.scm
@@ -0,0 +1,66 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2017 Damien Goutte-Gattat
+;;
+;; This file is part of GnuPG.
+;;
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (in-srcdir "tests" "openpgp" "defs.scm"))
+
+;; Redefine GPG without --always-trust.
+(define GPG `(,(tool 'gpg)))
+
+;; Helper constants for setownertrust.
+(define MARGINALTRUST "4")
+(define FULLTRUST "5")
+(define ULTIMATETRUST "6")
+
+;; Assign OWNERTRUST to the key identified by the provided
+;; fingerprint KEYFPR.
+(define (setownertrust keyfpr ownertrust)
+ (pipe:do
+ (pipe:echo (string-append keyfpr ":" ownertrust ":\n"))
+ (pipe:gpg `(--import-ownertrust))))
+
+;; Force a trustdb update.
+(define (updatetrustdb)
+ (call-check `(,@GPG --check-trustdb --yes)))
+
+;; IDs of all the keys involved in those tests.
+(define ALICE "FD9B20DD3C98123EEEAF8CC51BA41538D2E656B5")
+(define BOBBY "4D3F59F4D8030FD2D844AFEBA5BAC3ED125CCAE5")
+(define CAROL "6C62735E454CCDD79FA6CA601079113AEC1282FD")
+(define DAVID "A0607635198CABA2C467FAA64CE5BB42E3984000")
+(define FRANK "CE1A0E07CF8A20CBF8DC47D6DB9017DBAE6CD0EF")
+(define GRACE "B935F4B8DA009AFBCCDD41386653A183007F8345")
+(define HEIDI "0389C0B7990E10520B334F23756F1571EDA9184B")
+
+;; Initialize a given scenario.
+;; NAME should be the basename of the scenario file
+;; in this directory.
+(define (initscenario name)
+ (setup-environment)
+ ;; Make sure we are using the PGP trust model. This may no
+ ;; be the default model in the future.
+ (let ((trust-model (gpg-config 'gpg "trust-model")))
+ (trust-model::update "pgp"))
+ ;; Load the scenario's public keys.
+ (call-check `(,@GPG --import
+ ,(in-srcdir "tests" "openpgp" "trust-pgp"
+ (string-append name ".asc"))))
+ ;; Use Alice's key as root for all trust evaluations.
+ (setownertrust ALICE ULTIMATETRUST)
+ (updatetrustdb))
diff --git a/tests/openpgp/trust-pgp/david.sec.asc b/tests/openpgp/trust-pgp/david.sec.asc
new file mode 100644
index 0000000..06c4e83
--- /dev/null
+++ b/tests/openpgp/trust-pgp/david.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3WzRMIKoZIzj0DAQcCAwQrTeILyHVpkkDsAyAlY7wz0PYjG48ShCYeTX2z
+5f2bLxZGeepQeMiOXznPvCwRNMNpr63048+LGqu34Q9di5tvAAD9HITG0iG5SzeW
+cGMfhzGuXEn2P+9arb0OttTUcj+eGBIP8bQZRGF2aWQgPGRhdmlkQGV4YW1wbGUu
+b3JnPoiQBBMTCAA4FiEEoGB2NRmMq6LEZ/qmTOW7QuOYQAAFAllt1s0CGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQTOW7QuOYQAAJtAD+JxiDZttAb51FjB5o
+J1BksmzIrgL6ouorbLLRjVyk7rkA/0JqyLhh1K3vn4rYDbuKtvQAcfQbCndzwF9X
+uGQ/7gbS
+=EC4L
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/frank.sec.asc b/tests/openpgp/trust-pgp/frank.sec.asc
new file mode 100644
index 0000000..50235de
--- /dev/null
+++ b/tests/openpgp/trust-pgp/frank.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3W3RMIKoZIzj0DAQcCAwQs0QS2PEUXhpmsPlaTFOsXd8AoYqpa6xcc0+AE
+Mck1EzlqRlxeibvYeh/+yxjl18Ouww/BERB+PcoABXp00zXzAAD+Oybk8/6x5nc8
+ZNHkRIbfHW8oKh7jxbpob9X7QIfBpf8TcbQZRnJhbmsgPGZyYW5rQGV4YW1wbGUu
+Y29tPoiQBBMTCAA4FiEEzhoOB8+KIMv43EfW25AX265s0O8FAllt1t0CGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQ25AX265s0O+nDQD/RplCmAPQgMejhs2/
+YmOqWrekyd4IWNj9zyI2n228WXYBAJ1/Wf1vBviOEqzs7t+C0iBExxJXViPlG0nN
+Z9aoiX1G
+=vnHF
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/grace.sec.asc b/tests/openpgp/trust-pgp/grace.sec.asc
new file mode 100644
index 0000000..23ebd71
--- /dev/null
+++ b/tests/openpgp/trust-pgp/grace.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3W8RMIKoZIzj0DAQcCAwRTGb7wRrdPa+mXxUNJoYgWbKfMDQH9M1H366PQ
+ga8L32TYccFzyCD8DuRYOQxzhnCtSHtdzK4QAwwGLaJV6GRjAAEAzBLT+dB5ga7S
+Lh7PepOB9yObDHrHAvXGXg9AUvEm3ZkQ6bQZR3JhY2UgPGdyYWNlQGV4YW1wbGUu
+bmV0PoiQBBMTCAA4FiEEuTX0uNoAmvvM3UE4ZlOhgwB/g0UFAllt1vECGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQZlOhgwB/g0W2AAD+KmW2DQALWTnsVnL/
+QKdJ1J8DsaR1l+y2h7FUYuFttQsBALZYs2vUwOVBnAYyqbHogqgbPSxKRXeAxNqo
+epx6csv+
+=05c1
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/heidi.sec.asc b/tests/openpgp/trust-pgp/heidi.sec.asc
new file mode 100644
index 0000000..f650d1a
--- /dev/null
+++ b/tests/openpgp/trust-pgp/heidi.sec.asc
@@ -0,0 +1,11 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lHcEWW3XBxMIKoZIzj0DAQcCAwSINFpTZUYnxDDj3k16ljZIt58rh3cuUNIvUcqR
+zR9kdlmudQTaf1zUsW6F3r+t91t88kaA2Fcci3wkU0CAob0WAAD/eTlMM3JTEF6K
+yh8gxk1+mXRVUAmcGwr+1PzC3nzJAkgPALQZSGVpZGkgPGhlaWRpQGV4YW1wbGUu
+b3JnPoiQBBMTCAA4FiEEA4nAt5kOEFILM08jdW8Vce2pGEsFAllt1wcCGwMFCwkI
+BwIGFQgJCgsCBBYCAwECHgECF4AACgkQdW8Vce2pGEtwXAD/SVyIRiGnYPkqBVqG
+fI2MlTgN8+uirur2JdkcPoylCEMA/j3OeLRRT1docnEnvST1srmlXxZTbNUclnAl
+a2OZd7ME
+=1goe
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/scenario1.asc b/tests/openpgp/trust-pgp/scenario1.asc
new file mode 100644
index 0000000..82fee76
--- /dev/null
+++ b/tests/openpgp/trust-pgp/scenario1.asc
@@ -0,0 +1,75 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW2+WxMIKoZIzj0DAQcCAwQnUnqiwvOPU7gGepFTew8Fk5kmVexr+PvaqXgv
+9wKxNzZrs4GvamULk9pl2euwJGKPBRJRz8RSNpW6HIIzAPoOtBlBbGljZSA8YWxp
+Y2VAZXhhbXBsZS5vcmc+iJAEExMIADgWIQT9myDdPJgSPu6vjMUbpBU40uZWtQUC
+WW2+WwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAbpBU40uZWtTs8AQC8
+6p4hEyInw17S3P4rVpHP+en+6YJDE7x12b2aevgzsQD/XPhh0PTrAlenhFdQjQbZ
+A4dNj5BcxKEIWunJICtZCo0=
+=rf4w
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WihMIKoZIzj0DAQcCAwTtUYI84wfNPCwa/r2ke7tXz0uv/En9LQZbW0QE
+nzHigEvMXLfyjfjCf5tQ2eVbKLbABxtKwDtC2bv8dMcmgqd/tBlCb2JieSA8Ym9i
+YnlAZXhhbXBsZS5jb20+iJAEExMIADgWIQRNP1n02AMP0thEr+ulusPtElzK5QUC
+WW3WigIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRClusPtElzK5ZSOAQD1
+St647GAPOFIIYBDka3EGJeSan8i4f+u80jyplpWeggEA+z9VSDLd7JKMXqD3B/9T
+O+rBR22hpi+TILZrbk7svFyIdQQQEwgAHRYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbhAyAAoJEBukFTjS5la10+gA/2wr/lG67+xA1n3+2tQkIf1254lnwr8NXhwg
+w4UAAbajAP9hOXzltmmHV4BaBm35GEv/A2iAABV6lzgvApmM9c445A==
+=i2Va
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WrxMIKoZIzj0DAQcCAwS4HzEJ0YwXZ1SWciHOmWdfnESTvwC3Zb/sWRu8
+zdIeZzxAwu8lYQaDq/eOgKeXQVW5gxkQG5rCWUazbG+gCBEItBlDYXJvbCA8Y2Fy
+b2xAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQRsYnNeRUzN15+mymAQeRE67BKC/QUC
+WW3WrwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAQeRE67BKC/czKAP4p
+26ygO/PtZluyOMFYj8cuFZ9Z9eygBH2Y3/mtn3gcOAD/VWpu9Rwz689TraDv/Sqg
+apYJ1rdJREHrbrcqKtuTqFiIdQQQEwgAHRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbhBhAAoJEKW6w+0SXMrlPYgA/21rYq9iItnLASDCdt4ZX6gPKEZVBFDk6850
+Gyvg3TrEAP9/9bjKEFCSbo6vFKONOEpKqA/9B85Ff+2jq1lvfafV4Q==
+=mwVS
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WzRMIKoZIzj0DAQcCAwQrTeILyHVpkkDsAyAlY7wz0PYjG48ShCYeTX2z
+5f2bLxZGeepQeMiOXznPvCwRNMNpr63048+LGqu34Q9di5tvtBlEYXZpZCA8ZGF2
+aWRAZXhhbXBsZS5vcmc+iJAEExMIADgWIQSgYHY1GYyrosRn+qZM5btC45hAAAUC
+WW3WzQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBM5btC45hAAAm0AP4n
+GINm20BvnUWMHmgnUGSybMiuAvqi6itsstGNXKTuuQD/QmrIuGHUre+fitgNu4q2
+9ABx9BsKd3PAX1e4ZD/uBtKIdQQQEwgAHRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbhB0AAoJEKW6w+0SXMrlARwA/RiqKRh4rYtW5gP20PoQNYfS1qh+lDRTlhfp
+SSF5aKKFAP90s5/fp6n382IjbOhmQiEB9N4gv4pZT3YP13NQwAABbg==
+=bLxR
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W3RMIKoZIzj0DAQcCAwQs0QS2PEUXhpmsPlaTFOsXd8AoYqpa6xcc0+AE
+Mck1EzlqRlxeibvYeh/+yxjl18Ouww/BERB+PcoABXp00zXztBlGcmFuayA8ZnJh
+bmtAZXhhbXBsZS5jb20+iJAEExMIADgWIQTOGg4Hz4ogy/jcR9bbkBfbrmzQ7wUC
+WW3W3QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRDbkBfbrmzQ76cNAP9G
+mUKYA9CAx6OGzb9iY6pat6TJ3ghY2P3PIjafbbxZdgEAnX9Z/W8G+I4SrOzu34LS
+IETHEldWI+UbSc1n1qiJfUaIdQQQEwgAHRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbhCEAAoJEKW6w+0SXMrlepAA/3+AAaRQVfsU+zQtGg43VxAcfW+ezuUVCYUY
+IW2Lv+GkAP0WF7Nh5N4nDo/gC3WBW2zdWArlRaWa5NxcCquEUaE7Tg==
+=SWmz
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W8RMIKoZIzj0DAQcCAwRTGb7wRrdPa+mXxUNJoYgWbKfMDQH9M1H366PQ
+ga8L32TYccFzyCD8DuRYOQxzhnCtSHtdzK4QAwwGLaJV6GRjtBlHcmFjZSA8Z3Jh
+Y2VAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQS5NfS42gCa+8zdQThmU6GDAH+DRQUC
+WW3W8QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBmU6GDAH+DRbYAAP4q
+ZbYNAAtZOexWcv9Ap0nUnwOxpHWX7LaHsVRi4W21CwEAtliza9TA5UGcBjKpseiC
+qBs9LEpFd4DE2qh6nHpyy/6IdQQQEwgAHRYhBGxic15FTM3Xn6bKYBB5ETrsEoL9
+BQJZbhCyAAoJEBB5ETrsEoL9pVoBAPGc50vXiWmSAx8U573pqAyBsVPPMUlfrrgc
+tVZZQ9DyAP9LCpG1kJOnB1Fia1M6M/37FAwVjUerWTrp6XoG1888PYh1BBATCAAd
+FiEEoGB2NRmMq6LEZ/qmTOW7QuOYQAAFAlluEM4ACgkQTOW7QuOYQAB3HgD+Kw+R
+WbH8RcSlNbwlGWCWYwKvik7ukIMcTXXYD5azTYoBANF5Ym2n5RExmEd8nTrWu9MR
+TUlOgAXfzm/iH4+TNj2yiHUEEBMIAB0WIQTOGg4Hz4ogy/jcR9bbkBfbrmzQ7wUC
+WW4Q7AAKCRDbkBfbrmzQ7weXAP9OyFxzdpbq1R+V6T5WEckR5OtE6Va/7CHRPRW+
+kMNVjwD/YQZVbOCRxKybVbvPuF+29w7sWp4iAmmrmCFnKfgxZsQ=
+=r9Ly
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/scenario2.asc b/tests/openpgp/trust-pgp/scenario2.asc
new file mode 100644
index 0000000..3a98621
--- /dev/null
+++ b/tests/openpgp/trust-pgp/scenario2.asc
@@ -0,0 +1,70 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW2+WxMIKoZIzj0DAQcCAwQnUnqiwvOPU7gGepFTew8Fk5kmVexr+PvaqXgv
+9wKxNzZrs4GvamULk9pl2euwJGKPBRJRz8RSNpW6HIIzAPoOtBlBbGljZSA8YWxp
+Y2VAZXhhbXBsZS5vcmc+iJAEExMIADgWIQT9myDdPJgSPu6vjMUbpBU40uZWtQUC
+WW2+WwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAbpBU40uZWtTs8AQC8
+6p4hEyInw17S3P4rVpHP+en+6YJDE7x12b2aevgzsQD/XPhh0PTrAlenhFdQjQbZ
+A4dNj5BcxKEIWunJICtZCo0=
+=rf4w
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WihMIKoZIzj0DAQcCAwTtUYI84wfNPCwa/r2ke7tXz0uv/En9LQZbW0QE
+nzHigEvMXLfyjfjCf5tQ2eVbKLbABxtKwDtC2bv8dMcmgqd/tBlCb2JieSA8Ym9i
+YnlAZXhhbXBsZS5jb20+iJAEExMIADgWIQRNP1n02AMP0thEr+ulusPtElzK5QUC
+WW3WigIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRClusPtElzK5ZSOAQD1
+St647GAPOFIIYBDka3EGJeSan8i4f+u80jyplpWeggEA+z9VSDLd7JKMXqD3B/9T
+O+rBR22hpi+TILZrbk7svFyIeQQQEwgAIRYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbjsoAwUBeAAKCRAbpBU40uZWtVGlAQCgHkwmJSATJbrqV7+h/1ByLDi4+thQ
+ApW8nRinGuwkxQD+NgjOVmkPGZtpvaBzLXJS/IdPAYBWAriAzDZEV2GchWM=
+=4Xcm
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WrxMIKoZIzj0DAQcCAwS4HzEJ0YwXZ1SWciHOmWdfnESTvwC3Zb/sWRu8
+zdIeZzxAwu8lYQaDq/eOgKeXQVW5gxkQG5rCWUazbG+gCBEItBlDYXJvbCA8Y2Fy
+b2xAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQRsYnNeRUzN15+mymAQeRE67BKC/QUC
+WW3WrwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAQeRE67BKC/czKAP4p
+26ygO/PtZluyOMFYj8cuFZ9Z9eygBH2Y3/mtn3gcOAD/VWpu9Rwz689TraDv/Sqg
+apYJ1rdJREHrbrcqKtuTqFiIdQQQEwgAHRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbjteAAoJEKW6w+0SXMrlkJQBAO19erLoHXOqUI01Wl0tcaKIwEB5HkIHLh0w
+cCTOG4bDAQCCG8a8D1mg9jVPukBzTBUZGpDZmg/U3JGW3XE6rKlKXQ==
+=Df0N
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WzRMIKoZIzj0DAQcCAwQrTeILyHVpkkDsAyAlY7wz0PYjG48ShCYeTX2z
+5f2bLxZGeepQeMiOXznPvCwRNMNpr63048+LGqu34Q9di5tvtBlEYXZpZCA8ZGF2
+aWRAZXhhbXBsZS5vcmc+iJAEExMIADgWIQSgYHY1GYyrosRn+qZM5btC45hAAAUC
+WW3WzQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBM5btC45hAAAm0AP4n
+GINm20BvnUWMHmgnUGSybMiuAvqi6itsstGNXKTuuQD/QmrIuGHUre+fitgNu4q2
+9ABx9BsKd3PAX1e4ZD/uBtKIdQQQEwgAHRYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbkUBAAoJEBukFTjS5la1zSgA/A6ei6bus+VtQtL1rsJfovwoxnyAq+QzCcJL
+ZheUUK3LAQCK+rVE1Yn9QsFoNYZUgLHrnQDtSVq9ClJvNw/Wuz7DpQ==
+=No85
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W3RMIKoZIzj0DAQcCAwQs0QS2PEUXhpmsPlaTFOsXd8AoYqpa6xcc0+AE
+Mck1EzlqRlxeibvYeh/+yxjl18Ouww/BERB+PcoABXp00zXztBlGcmFuayA8ZnJh
+bmtAZXhhbXBsZS5jb20+iJAEExMIADgWIQTOGg4Hz4ogy/jcR9bbkBfbrmzQ7wUC
+WW3W3QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRDbkBfbrmzQ76cNAP9G
+mUKYA9CAx6OGzb9iY6pat6TJ3ghY2P3PIjafbbxZdgEAnX9Z/W8G+I4SrOzu34LS
+IETHEldWI+UbSc1n1qiJfUaIeQQQEwgAIRYhBKBgdjUZjKuixGf6pkzlu0LjmEAA
+BQJZbkUwAwUBeAAKCRBM5btC45hAAJF0AQD3lBQszLXrlSnCLuHfQxbS/p05DURZ
+HRi8MbTqkrcgrQD8Cs3gwQCBkPUrx8boAyjcuX1BK/TYZ1Gg8hWkozNr1lI=
+=HwV/
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W8RMIKoZIzj0DAQcCAwRTGb7wRrdPa+mXxUNJoYgWbKfMDQH9M1H366PQ
+ga8L32TYccFzyCD8DuRYOQxzhnCtSHtdzK4QAwwGLaJV6GRjtBlHcmFjZSA8Z3Jh
+Y2VAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQS5NfS42gCa+8zdQThmU6GDAH+DRQUC
+WW3W8QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBmU6GDAH+DRbYAAP4q
+ZbYNAAtZOexWcv9Ap0nUnwOxpHWX7LaHsVRi4W21CwEAtliza9TA5UGcBjKpseiC
+qBs9LEpFd4DE2qh6nHpyy/6IdQQQEwgAHRYhBM4aDgfPiiDL+NxH1tuQF9uubNDv
+BQJZbkVQAAoJENuQF9uubNDvyrkBAICiFq2dTFzLrXNsItwpPrB20trzEPM/JAxa
+lzSyknJMAQDBCj8nyEtlpkYh9t9ovy/x75D1OUBFFYHOQXCMy0QyRA==
+=yoqI
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/scenario3.asc b/tests/openpgp/trust-pgp/scenario3.asc
new file mode 100644
index 0000000..240afd5
--- /dev/null
+++ b/tests/openpgp/trust-pgp/scenario3.asc
@@ -0,0 +1,58 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW2+WxMIKoZIzj0DAQcCAwQnUnqiwvOPU7gGepFTew8Fk5kmVexr+PvaqXgv
+9wKxNzZrs4GvamULk9pl2euwJGKPBRJRz8RSNpW6HIIzAPoOtBlBbGljZSA8YWxp
+Y2VAZXhhbXBsZS5vcmc+iJAEExMIADgWIQT9myDdPJgSPu6vjMUbpBU40uZWtQUC
+WW2+WwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAbpBU40uZWtTs8AQC8
+6p4hEyInw17S3P4rVpHP+en+6YJDE7x12b2aevgzsQD/XPhh0PTrAlenhFdQjQbZ
+A4dNj5BcxKEIWunJICtZCo0=
+=rf4w
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WihMIKoZIzj0DAQcCAwTtUYI84wfNPCwa/r2ke7tXz0uv/En9LQZbW0QE
+nzHigEvMXLfyjfjCf5tQ2eVbKLbABxtKwDtC2bv8dMcmgqd/tBlCb2JieSA8Ym9i
+YnlAZXhhbXBsZS5jb20+iJAEExMIADgWIQRNP1n02AMP0thEr+ulusPtElzK5QUC
+WW3WigIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRClusPtElzK5ZSOAQD1
+St647GAPOFIIYBDka3EGJeSan8i4f+u80jyplpWeggEA+z9VSDLd7JKMXqD3B/9T
+O+rBR22hpi+TILZrbk7svFyIeQQQEwgAIRYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbmYmAwUCeAAKCRAbpBU40uZWtSQhAQD2HLi7PUipgcO9N+KEJLKl2T9ralzj
+O1PMy8IbxnG86AD/Ya541TcH9oxZUWm5dsHd/eoBnSu2WwWkLPNHirRkzwE=
+=R1uZ
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WrxMIKoZIzj0DAQcCAwS4HzEJ0YwXZ1SWciHOmWdfnESTvwC3Zb/sWRu8
+zdIeZzxAwu8lYQaDq/eOgKeXQVW5gxkQG5rCWUazbG+gCBEItBlDYXJvbCA8Y2Fy
+b2xAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQRsYnNeRUzN15+mymAQeRE67BKC/QUC
+WW3WrwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAQeRE67BKC/czKAP4p
+26ygO/PtZluyOMFYj8cuFZ9Z9eygBH2Y3/mtn3gcOAD/VWpu9Rwz689TraDv/Sqg
+apYJ1rdJREHrbrcqKtuTqFiIeQQQEwgAIRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbmZIAwUCeAAKCRClusPtElzK5YuLAP0b5nCuz6p6DDrHB0rtwfhEfJQgvsEc
+zGE2Hh5P5fXP/AEA2Gt8LEWiHYNGWu6ZN02oyCoNUEfZZFva59IIPrzPDHU=
+=S6Nc
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WzRMIKoZIzj0DAQcCAwQrTeILyHVpkkDsAyAlY7wz0PYjG48ShCYeTX2z
+5f2bLxZGeepQeMiOXznPvCwRNMNpr63048+LGqu34Q9di5tvtBlEYXZpZCA8ZGF2
+aWRAZXhhbXBsZS5vcmc+iJAEExMIADgWIQSgYHY1GYyrosRn+qZM5btC45hAAAUC
+WW3WzQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBM5btC45hAAAm0AP4n
+GINm20BvnUWMHmgnUGSybMiuAvqi6itsstGNXKTuuQD/QmrIuGHUre+fitgNu4q2
+9ABx9BsKd3PAX1e4ZD/uBtKIeQQQEwgAIRYhBGxic15FTM3Xn6bKYBB5ETrsEoL9
+BQJZbmZ0AwUCeAAKCRAQeRE67BKC/eFYAQDaKoyQZYnNH/62hydWITZ1nOYM/h6i
+6L/b+XqB9DD0ewD9FAbO1wzassj6FmZMZDaraqdljTX+94JY5E3GJ8EQXo4=
+=kaec
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W3RMIKoZIzj0DAQcCAwQs0QS2PEUXhpmsPlaTFOsXd8AoYqpa6xcc0+AE
+Mck1EzlqRlxeibvYeh/+yxjl18Ouww/BERB+PcoABXp00zXztBlGcmFuayA8ZnJh
+bmtAZXhhbXBsZS5jb20+iJAEExMIADgWIQTOGg4Hz4ogy/jcR9bbkBfbrmzQ7wUC
+WW3W3QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRDbkBfbrmzQ76cNAP9G
+mUKYA9CAx6OGzb9iY6pat6TJ3ghY2P3PIjafbbxZdgEAnX9Z/W8G+I4SrOzu34LS
+IETHEldWI+UbSc1n1qiJfUaIeQQQEwgAIRYhBKBgdjUZjKuixGf6pkzlu0LjmEAA
+BQJZbmaiAwUCeAAKCRBM5btC45hAAMcRAP9dcKO3ETB52AsFdBp2iJVjqJ5JiftN
+B/2FZBxPtSjXpAD/YdDzs+zNaAUlFIFmXzP9EmIqmXhC6XSiASrNd5EW33A=
+=DXNa
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/trust-pgp/scenario4.asc b/tests/openpgp/trust-pgp/scenario4.asc
new file mode 100644
index 0000000..7860c95
--- /dev/null
+++ b/tests/openpgp/trust-pgp/scenario4.asc
@@ -0,0 +1,84 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW2+WxMIKoZIzj0DAQcCAwQnUnqiwvOPU7gGepFTew8Fk5kmVexr+PvaqXgv
+9wKxNzZrs4GvamULk9pl2euwJGKPBRJRz8RSNpW6HIIzAPoOtBlBbGljZSA8YWxp
+Y2VAZXhhbXBsZS5vcmc+iJAEExMIADgWIQT9myDdPJgSPu6vjMUbpBU40uZWtQUC
+WW2+WwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAbpBU40uZWtTs8AQC8
+6p4hEyInw17S3P4rVpHP+en+6YJDE7x12b2aevgzsQD/XPhh0PTrAlenhFdQjQbZ
+A4dNj5BcxKEIWunJICtZCo0=
+=rf4w
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WihMIKoZIzj0DAQcCAwTtUYI84wfNPCwa/r2ke7tXz0uv/En9LQZbW0QE
+nzHigEvMXLfyjfjCf5tQ2eVbKLbABxtKwDtC2bv8dMcmgqd/tBlCb2JieSA8Ym9i
+YnlAZXhhbXBsZS5jb20+iJAEExMIADgWIQRNP1n02AMP0thEr+ulusPtElzK5QUC
+WW3WigIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRClusPtElzK5ZSOAQD1
+St647GAPOFIIYBDka3EGJeSan8i4f+u80jyplpWeggEA+z9VSDLd7JKMXqD3B/9T
+O+rBR22hpi+TILZrbk7svFyIlAQQEwgAPBYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbm5IAwUCeBqGPFtePl0rW0AuXWV4YW1wbGVcLmNvbT4kAAAKCRAbpBU40uZW
+tb+2APsFKgWxiLtSbpcekarOlPrw014LVinLGah3VE1Izay+tAEA+0INHdcNoz64
+kRE/2siUnx1ksrWcWvJbvNMteknXhzY=
+=UQni
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WrxMIKoZIzj0DAQcCAwS4HzEJ0YwXZ1SWciHOmWdfnESTvwC3Zb/sWRu8
+zdIeZzxAwu8lYQaDq/eOgKeXQVW5gxkQG5rCWUazbG+gCBEItBlDYXJvbCA8Y2Fy
+b2xAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQRsYnNeRUzN15+mymAQeRE67BKC/QUC
+WW3WrwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRAQeRE67BKC/czKAP4p
+26ygO/PtZluyOMFYj8cuFZ9Z9eygBH2Y3/mtn3gcOAD/VWpu9Rwz689TraDv/Sqg
+apYJ1rdJREHrbrcqKtuTqFiIdQQQEwgAHRYhBE0/WfTYAw/S2ESv66W6w+0SXMrl
+BQJZbm6PAAoJEKW6w+0SXMrlWj8A/2UdgyhbV+tLjyFb87iBiaWxSIVfiVyjhLZN
+htPTrKb2AP4yIRxJ3x0LmRSDLkZ/QIQmgahlAXRmKCXSRAB8x2KRsQ==
+=Zbpr
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3WzRMIKoZIzj0DAQcCAwQrTeILyHVpkkDsAyAlY7wz0PYjG48ShCYeTX2z
+5f2bLxZGeepQeMiOXznPvCwRNMNpr63048+LGqu34Q9di5tvtBlEYXZpZCA8ZGF2
+aWRAZXhhbXBsZS5vcmc+iJAEExMIADgWIQSgYHY1GYyrosRn+qZM5btC45hAAAUC
+WW3WzQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBM5btC45hAAAm0AP4n
+GINm20BvnUWMHmgnUGSybMiuAvqi6itsstGNXKTuuQD/QmrIuGHUre+fitgNu4q2
+9ABx9BsKd3PAX1e4ZD/uBtKIlAQQEwgAPBYhBP2bIN08mBI+7q+MxRukFTjS5la1
+BQJZbm5uAwUCeBqGPFtePl0rW0AuXWV4YW1wbGVcLm9yZz4kAAAKCRAbpBU40uZW
+tYGkAQDcxaTENxUFCcwyuv/pOpNr51Q7bhCcWVPd3Zn1t3yurQD+KDre0hsrR0Rf
+kiq5JYhqh8sEejmFQ1EtcCNI2x8CvHg=
+=W5g4
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W3RMIKoZIzj0DAQcCAwQs0QS2PEUXhpmsPlaTFOsXd8AoYqpa6xcc0+AE
+Mck1EzlqRlxeibvYeh/+yxjl18Ouww/BERB+PcoABXp00zXztBlGcmFuayA8ZnJh
+bmtAZXhhbXBsZS5jb20+iJAEExMIADgWIQTOGg4Hz4ogy/jcR9bbkBfbrmzQ7wUC
+WW3W3QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRDbkBfbrmzQ76cNAP9G
+mUKYA9CAx6OGzb9iY6pat6TJ3ghY2P3PIjafbbxZdgEAnX9Z/W8G+I4SrOzu34LS
+IETHEldWI+UbSc1n1qiJfUaIdQQQEwgAHRYhBKBgdjUZjKuixGf6pkzlu0LjmEAA
+BQJZbm7vAAoJEEzlu0LjmEAAmT0A/3kZ3vms9aDuS2OD9yE/KoluBQi1UWR59V/2
+JHomhTiRAP9GI/01N3pRty986m4dVBbrXpT39ZkEj4q+zkn1uNeQHA==
+=UqlD
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3W8RMIKoZIzj0DAQcCAwRTGb7wRrdPa+mXxUNJoYgWbKfMDQH9M1H366PQ
+ga8L32TYccFzyCD8DuRYOQxzhnCtSHtdzK4QAwwGLaJV6GRjtBlHcmFjZSA8Z3Jh
+Y2VAZXhhbXBsZS5uZXQ+iJAEExMIADgWIQS5NfS42gCa+8zdQThmU6GDAH+DRQUC
+WW3W8QIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBmU6GDAH+DRbYAAP4q
+ZbYNAAtZOexWcv9Ap0nUnwOxpHWX7LaHsVRi4W21CwEAtliza9TA5UGcBjKpseiC
+qBs9LEpFd4DE2qh6nHpyy/6IdQQQEwgAHRYhBAOJwLeZDhBSCzNPI3VvFXHtqRhL
+BQJZbm85AAoJEHVvFXHtqRhL6N0BAPjsViTQhc/t9zbC7Jf3bRLQTYjwR5EtW4Wu
+IZZeByYXAQDw0Wofsq945J5oRLoTPdc264dBv8ojBr0/1uFWOvci/w==
+=q1yC
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mFIEWW3XBxMIKoZIzj0DAQcCAwSINFpTZUYnxDDj3k16ljZIt58rh3cuUNIvUcqR
+zR9kdlmudQTaf1zUsW6F3r+t91t88kaA2Fcci3wkU0CAob0WtBlIZWlkaSA8aGVp
+ZGlAZXhhbXBsZS5vcmc+iJAEExMIADgWIQQDicC3mQ4QUgszTyN1bxVx7akYSwUC
+WW3XBwIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRB1bxVx7akYS3BcAP9J
+XIhGIadg+SoFWoZ8jYyVOA3z66Ku6vYl2Rw+jKUIQwD+Pc54tFFPV2hycSe9JPWy
+uaVfFlNs1RyWcCVrY5l3swSIeQQQEwgAIRYhBKBgdjUZjKuixGf6pkzlu0LjmEAA
+BQJZbm8aAwUCeAAKCRBM5btC45hAAPABAPwLtRtV1gnk6qbyb9DvvHbG1kd2sqQ5
+mBM7cw6rPmf2EgEA3V3J9D7/4hbF/tulACVEpW9yvZq3wnEj0GSMpF6qQDE=
+=7uOj
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c
index b066dad..e6ef4f4 100644
--- a/tools/gpgconf-comp.c
+++ b/tools/gpgconf-comp.c
@@ -755,13 +755,25 @@ static gc_option_t gc_options_gpg[] =
{ "auto-key-locate", GC_OPT_FLAG_NONE, GC_LEVEL_ADVANCED,
"gnupg", N_("|MECHANISMS|use MECHANISMS to locate keys by mail address"),
GC_ARG_TYPE_STRING, GC_BACKEND_GPG },
- { "auto-key-retrieve", GC_OPT_FLAG_NONE, GC_LEVEL_INVISIBLE,
+ { "auto-key-retrieve", GC_OPT_FLAG_NONE, GC_LEVEL_EXPERT,
NULL, NULL, GC_ARG_TYPE_NONE, GC_BACKEND_GPG },
- { "no-auto-key-retrieve", GC_OPT_FLAG_NONE, GC_LEVEL_ADVANCED,
+ { "no-auto-key-retrieve", GC_OPT_FLAG_NONE, GC_LEVEL_INVISIBLE,
NULL, NULL, GC_ARG_TYPE_NONE, GC_BACKEND_GPG },
{ "disable-dirmngr", GC_OPT_FLAG_NONE, GC_LEVEL_EXPERT,
"gnupg", N_("disable all access to the dirmngr"),
GC_ARG_TYPE_NONE, GC_BACKEND_GPG },
+ { "max-cert-depth",
+ GC_OPT_FLAG_NONE, GC_LEVEL_INVISIBLE,
+ NULL, NULL,
+ GC_ARG_TYPE_UINT32, GC_BACKEND_GPG },
+ { "completes-needed",
+ GC_OPT_FLAG_NONE, GC_LEVEL_INVISIBLE,
+ NULL, NULL,
+ GC_ARG_TYPE_UINT32, GC_BACKEND_GPG },
+ { "marginals-needed",
+ GC_OPT_FLAG_NONE, GC_LEVEL_INVISIBLE,
+ NULL, NULL,
+ GC_ARG_TYPE_UINT32, GC_BACKEND_GPG },
GC_OPTION_NULL
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index fefa2ff..09b2a76 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -292,7 +292,7 @@ query_swdb (estream_t out, const char *name, const char *current_version)
goto leave;
}
if (!strcmp (name, "gnupg"))
- search_name = "gnupg21";
+ search_name = GNUPG_SWDB_TAG;
else if (!strcmp (name, "gnupg1"))
search_name = "gnupg1";
else