summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2021-02-09 16:00:56 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2021-02-09 16:00:56 +0900
commitcba93c71d2653bae01faf0c092b6b7ea1c2a601f (patch)
treee038af5f70b9adabd5c3cfe205e456923cd49114
parent809c8ad8209b0f5248cfc52eb6e1d437099fb228 (diff)
downloadgpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.tar.gz
gpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.tar.bz2
gpg2-cba93c71d2653bae01faf0c092b6b7ea1c2a601f.zip
Imported Upstream version 2.2.24upstream/2.2.24
-rw-r--r--NEWS63
-rw-r--r--agent/Makefile.am13
-rw-r--r--agent/agent.h2
-rw-r--r--agent/command-ssh.c24
-rw-r--r--agent/command.c15
-rw-r--r--agent/cvt-openpgp.c2
-rw-r--r--agent/divert-scd.c39
-rw-r--r--agent/findkey.c4
-rw-r--r--agent/gpg-agent-w32info.rc2
-rw-r--r--agent/gpg-agent.c45
-rw-r--r--agent/gpg-agent.w32-manifest.in18
-rw-r--r--agent/pkdecrypt.c3
-rw-r--r--agent/pksign.c7
-rw-r--r--agent/protect-tool.c2
-rw-r--r--agent/protect.c1
-rw-r--r--agent/trustlist.c17
-rw-r--r--build-aux/speedo.mk2
-rw-r--r--build-aux/speedo/w32/inst.nsi12
-rw-r--r--build-aux/speedo/w32/wixlib.wxs14
-rw-r--r--common/argparse.c14
-rw-r--r--common/compliance.c4
-rw-r--r--common/dotlock.c55
-rw-r--r--common/exechelp-posix.c5
-rw-r--r--common/exechelp-w32.c6
-rw-r--r--common/gettime.c33
-rw-r--r--common/helpfile.c12
-rw-r--r--common/homedir.c112
-rw-r--r--common/iobuf.c45
-rw-r--r--common/mkdir_p.c2
-rw-r--r--common/status.h1
-rw-r--r--common/sysutils.c459
-rw-r--r--common/sysutils.h24
-rw-r--r--common/t-dotlock.c164
-rw-r--r--common/t-exectool.c1
-rw-r--r--common/util.h25
-rw-r--r--common/w32info-rc.h.in4
-rw-r--r--configure.ac20
-rw-r--r--dirmngr/Makefile.am15
-rw-r--r--dirmngr/certcache.c15
-rw-r--r--dirmngr/crlcache.c28
-rw-r--r--dirmngr/crlfetch.c2
-rw-r--r--dirmngr/crlfetch.h6
-rw-r--r--dirmngr/dirmngr-client.c4
-rw-r--r--dirmngr/dirmngr-w32info.rc52
-rw-r--r--dirmngr/dirmngr.c76
-rw-r--r--dirmngr/dirmngr.w32-manifest.in18
-rw-r--r--dirmngr/http-ntbtls.c6
-rw-r--r--dirmngr/http.c31
-rw-r--r--dirmngr/ks-engine-hkp.c21
-rw-r--r--dirmngr/ldap.c50
-rw-r--r--dirmngr/server.c2
-rw-r--r--doc/DETAILS1
-rw-r--r--doc/Makefile.am7
-rw-r--r--doc/examples/Automatic.prf15
-rw-r--r--doc/examples/VS-NfD.prf (renamed from doc/examples/vsnfd.prf)3
-rw-r--r--doc/gpg.texi11
-rw-r--r--g10/Makefile.am21
-rw-r--r--g10/call-agent.c30
-rw-r--r--g10/card-util.c24
-rw-r--r--g10/encrypt.c31
-rw-r--r--g10/exec.c2
-rw-r--r--g10/gpg.c47
-rw-r--r--g10/gpg.w32-manifest.in7
-rw-r--r--g10/gpgv-w32info.rc52
-rw-r--r--g10/gpgv.w32-manifest.in18
-rw-r--r--g10/keydb.c22
-rw-r--r--g10/keydb.h9
-rw-r--r--g10/keyedit.c246
-rw-r--r--g10/keyedit.h4
-rw-r--r--g10/keygen.c5
-rw-r--r--g10/keylist.c45
-rw-r--r--g10/keyring.c9
-rw-r--r--g10/main.h7
-rw-r--r--g10/mainproc.c3
-rw-r--r--g10/migrate.c8
-rw-r--r--g10/misc.c51
-rw-r--r--g10/openfile.c34
-rw-r--r--g10/passphrase.c2
-rw-r--r--g10/photoid.c5
-rw-r--r--g10/pkclist.c20
-rw-r--r--g10/plaintext.c2
-rw-r--r--g10/revoke.c10
-rw-r--r--g10/sig-check.c12
-rw-r--r--g10/sign.c81
-rw-r--r--g10/tdbio.c22
-rw-r--r--g10/textfilter.c4
-rw-r--r--g10/tofu.c4
-rw-r--r--g13/backend.c5
-rw-r--r--g13/create.c3
-rw-r--r--g13/g13-syshelp.c4
-rw-r--r--g13/g13.c2
-rw-r--r--g13/mount.c4
-rw-r--r--g13/sh-dmcrypt.c3
-rw-r--r--g13/suspend.c5
-rw-r--r--kbx/kbxutil.c10
-rw-r--r--kbx/keybox-defs.h6
-rw-r--r--kbx/keybox-dump.c159
-rw-r--r--kbx/keybox-file.c46
-rw-r--r--kbx/keybox-init.c9
-rw-r--r--kbx/keybox-search.c12
-rw-r--r--kbx/keybox-update.c130
-rw-r--r--kbx/keybox.h2
-rw-r--r--po/POTFILES.in1
-rw-r--r--po/ca.po33
-rw-r--r--po/cs.po33
-rw-r--r--po/da.po37
-rw-r--r--po/de.po34
-rw-r--r--po/el.po36
-rw-r--r--po/eo.po34
-rw-r--r--po/es.po33
-rw-r--r--po/et.po34
-rw-r--r--po/fi.po34
-rw-r--r--po/fr.po37
-rw-r--r--po/gl.po34
-rw-r--r--po/hu.po38
-rw-r--r--po/id.po38
-rw-r--r--po/it.po7926
-rw-r--r--po/ja.po38
-rw-r--r--po/nb.po33
-rw-r--r--po/pl.po33
-rw-r--r--po/pt.po34
-rw-r--r--po/ro.po37
-rw-r--r--po/ru.po33
-rw-r--r--po/sk.po34
-rw-r--r--po/sv.po39
-rw-r--r--po/tr.po37
-rw-r--r--po/uk.po37
-rw-r--r--po/zh_CN.po33
-rw-r--r--po/zh_TW.po37
-rw-r--r--scd/Makefile.am6
-rw-r--r--scd/apdu.c27
-rw-r--r--scd/apdu.h10
-rw-r--r--scd/app-openpgp.c446
-rw-r--r--scd/app.c8
-rw-r--r--scd/ccid-driver.c353
-rw-r--r--scd/ccid-driver.h15
-rw-r--r--scd/command.c24
-rw-r--r--scd/iso7816.c7
-rw-r--r--scd/scdaemon-w32info.rc2
-rw-r--r--scd/scdaemon.c2
-rw-r--r--scd/scdaemon.w32-manifest.in18
-rw-r--r--sm/Makefile.am9
-rw-r--r--sm/certchain.c22
-rw-r--r--sm/gpgsm-w32info.rc2
-rw-r--r--sm/gpgsm.c6
-rw-r--r--sm/gpgsm.w32-manifest.in18
-rw-r--r--sm/keydb.c52
-rw-r--r--sm/minip12.c2
-rw-r--r--sm/qualified.c14
-rw-r--r--tests/openpgp/README3
-rw-r--r--tests/openpgp/defs.scm12
-rw-r--r--tools/Makefile.am45
-rw-r--r--tools/gpg-check-pattern-w32info.rc52
-rw-r--r--tools/gpg-check-pattern.c24
-rw-r--r--tools/gpg-check-pattern.w32-manifest.in18
-rw-r--r--tools/gpg-connect-agent-w32info.rc7
-rw-r--r--tools/gpg-connect-agent.c44
-rw-r--r--tools/gpg-connect-agent.w32-manifest.in18
-rw-r--r--tools/gpg-wks-client-w32info.rc52
-rw-r--r--tools/gpg-wks-client.c2
-rw-r--r--tools/gpg-wks-client.w32-manifest.in18
-rw-r--r--tools/gpg-wks-server.c47
-rw-r--r--tools/gpgconf-comp.c9
-rw-r--r--tools/gpgconf-w32info.rc52
-rw-r--r--tools/gpgconf.c173
-rw-r--r--tools/gpgconf.w32-manifest.in18
-rw-r--r--tools/gpgsplit.c4
-rw-r--r--tools/gpgtar-create.c4
-rw-r--r--tools/gpgtar-w32info.rc52
-rw-r--r--tools/gpgtar.w32-manifest.in18
-rw-r--r--tools/symcryptrun.c6
-rw-r--r--tools/wks-util.c11
172 files changed, 6920 insertions, 6490 deletions
diff --git a/NEWS b/NEWS
index b4c1283..5ddfec5 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,61 @@
+Noteworthy changes in version 2.2.24 (2020-11-17)
+-------------------------------------------------
+
+ * Allow Unicode file names on Windows almost everywhere. Note that
+ it is still not possible to use Unicode strings on the command
+ line. This change also fixes a regression in 2.2.22 related to
+ non-ascii file names. [#5098]
+
+ * Fix localized time printing on Windows. [#5073]
+
+ * gpg: New command --quick-revoke-sig. [#5093]
+
+ * gpg: Do not use weak digest algos if selected by recipient
+ preference during sign+encrypt. [4c181d51a6]
+
+ * gpg: Switch to AES256 for symmetric encryption in de-vs mode.
+ [166e779634]
+
+ * gpg: Silence weak digest warnings with --quiet. [#4893]
+
+ * gpg: Print new status line CANCELED_BY_USER for a cancel during
+ symmetric encryption. [f05d1772c4]
+
+ * gpg: Fix the encrypt+sign hash algo preference selection for
+ ECDSA. This is in particular needed for keys created from
+ existing smartcard based keys. [aeed0b93ff]
+
+ * agent: Fix secret key import of GnuPG 2.3 generated Ed25519 keys.
+ [#5114]
+
+ * agent: Keep some permissions of private-keys-v1.d. [#2312]
+
+ * dirmngr: Align sks-keyservers.netCA.pem use between ntbtls and
+ gnutls builds. [e4f3b74c91]
+
+ * dirmngr: Fix the pool keyserver case for a single host in the
+ pool. [72e04b03b1a7]
+
+ * scd: Fix the use case of verify_chv2 by CHECKPIN. [61aea64b3c]
+
+ * scd: Various improvements to the ccid-driver. [#4616,#5065]
+
+ * scd: Minor fixes for Yubikey [25bec16d0b]
+
+ * gpgconf: New option --show-versions.
+
+ * w32: Install gpg-check-pattern and example profiles. Install
+ Windows subsystem variant of gpgconf (gpgconf-w32).
+
+ * i18n: Complete overhaul and completion of the Italian translation.
+ Thanks to Denis Renzi.
+
+ * Require Libgcrypt 1.8 because 1.7 has long reached end-of-life.
+
+ Release-info: https://dev.gnupg.org/T5052
+ See-also: gnupg-announce/2020q4/000449.html
+
+
Noteworthy changes in version 2.2.23 (2020-09-03)
-------------------------------------------------
@@ -665,12 +723,17 @@ Noteworthy changes in version 2.2.6 (2018-04-09)
* gpg: Print the keygrips in the --card-status.
+ * gpg: Improve the OpenPGP card's factory-reset. [7f765a98fd]
+
* scd: Support KDF DO setup. [#3823]
* scd: Fix some issues with PC/SC on Windows. [#3825]
* scd: Fix suspend/resume handling in the CCID driver.
+ * scd: Fix a race condition in the CCID driver leading to a segv for
+ some readers. [#5121]
+
* agent: Evict cached passphrases also via a timer. [#3829]
* agent: Use separate passphrase caches depending on the request
diff --git a/agent/Makefile.am b/agent/Makefile.am
index 11d5427..f0ba964 100644
--- a/agent/Makefile.am
+++ b/agent/Makefile.am
@@ -25,7 +25,9 @@ libexec_PROGRAMS += gpg-preset-passphrase
endif
noinst_PROGRAMS = $(TESTS)
-EXTRA_DIST = ChangeLog-2011 gpg-agent-w32info.rc all-tests.scm
+EXTRA_DIST = ChangeLog-2011 \
+ gpg-agent-w32info.rc gpg-agent.w32-manifest.in \
+ all-tests.scm
AM_CPPFLAGS =
@@ -33,7 +35,10 @@ AM_CPPFLAGS =
include $(top_srcdir)/am/cmacros.am
if HAVE_W32_SYSTEM
-resource_objs += gpg-agent-w32info.o
+gpg_agent_robjs = $(resource_objs) gpg-agent-w32info.o
+gpg-agent-w32info.o : gpg-agent.w32-manifest
+else
+gpg_agent_robjs =
endif
AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS)
@@ -69,9 +74,9 @@ gpg_agent_CFLAGS = $(AM_CFLAGS) $(LIBASSUAN_CFLAGS) $(NPTH_CFLAGS) \
gpg_agent_LDADD = $(commonpth_libs) \
$(LIBGCRYPT_LIBS) $(LIBASSUAN_LIBS) $(NPTH_LIBS) \
$(GPG_ERROR_LIBS) $(LIBINTL) $(NETLIBS) $(LIBICONV) \
- $(resource_objs)
+ $(gpg_agent_robjs)
gpg_agent_LDFLAGS = $(extra_bin_ldflags)
-gpg_agent_DEPENDENCIES = $(resource_objs)
+gpg_agent_DEPENDENCIES = $(gpg_agent_robjs)
gpg_protect_tool_SOURCES = \
protect-tool.c \
diff --git a/agent/agent.h b/agent/agent.h
index 4d981ad..fb46412 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -545,10 +545,12 @@ void agent_reload_trustlist (void);
/*-- divert-scd.c --*/
int divert_pksign (ctrl_t ctrl, const char *desc_text,
const unsigned char *digest, size_t digestlen, int algo,
+ const unsigned char *grip,
const unsigned char *shadow_info, unsigned char **r_sig,
size_t *r_siglen);
int divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
const unsigned char *cipher,
+ const unsigned char *grip,
const unsigned char *shadow_info,
char **r_buf, size_t *r_len, int *r_padding);
int divert_generic_cmd (ctrl_t ctrl,
diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index a26d604..bcc78bd 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -216,7 +216,7 @@ struct ssh_key_type_spec
struct ssh_control_file_s
{
char *fname; /* Name of the file. */
- FILE *fp; /* This is never NULL. */
+ estream_t fp; /* This is never NULL. */
int lnr; /* The current line number. */
struct {
int valid; /* True if the data of this structure is valid. */
@@ -852,7 +852,7 @@ open_control_file (ssh_control_file_t *r_cf, int append)
}
/* FIXME: With "a+" we are not able to check whether this will
be created and thus the blurb needs to be written first. */
- cf->fp = fopen (cf->fname, append? "a+":"r");
+ cf->fp = es_fopen (cf->fname, append? "a+":"r");
if (!cf->fp && errno == ENOENT)
{
estream_t stream = es_fopen (cf->fname, "wx,mode=-rw-r");
@@ -865,7 +865,7 @@ open_control_file (ssh_control_file_t *r_cf, int append)
}
es_fputs (sshcontrolblurb, stream);
es_fclose (stream);
- cf->fp = fopen (cf->fname, append? "a+":"r");
+ cf->fp = es_fopen (cf->fname, append? "a+":"r");
}
if (!cf->fp)
@@ -882,7 +882,7 @@ open_control_file (ssh_control_file_t *r_cf, int append)
if (err && cf)
{
if (cf->fp)
- fclose (cf->fp);
+ es_fclose (cf->fp);
xfree (cf->fname);
xfree (cf);
}
@@ -896,9 +896,9 @@ open_control_file (ssh_control_file_t *r_cf, int append)
static void
rewind_control_file (ssh_control_file_t cf)
{
- fseek (cf->fp, 0, SEEK_SET);
+ es_fseek (cf->fp, 0, SEEK_SET);
cf->lnr = 0;
- clearerr (cf->fp);
+ es_clearerr (cf->fp);
}
@@ -907,7 +907,7 @@ close_control_file (ssh_control_file_t cf)
{
if (!cf)
return;
- fclose (cf->fp);
+ es_fclose (cf->fp);
xfree (cf->fname);
xfree (cf);
}
@@ -924,13 +924,13 @@ read_control_file_item (ssh_control_file_t cf)
long ttl = 0;
cf->item.valid = 0;
- clearerr (cf->fp);
+ es_clearerr (cf->fp);
do
{
- if (!fgets (line, DIM(line)-1, cf->fp) )
+ if (!es_fgets (line, DIM(line)-1, cf->fp) )
{
- if (feof (cf->fp))
+ if (es_feof (cf->fp))
return gpg_error (GPG_ERR_EOF);
return gpg_error_from_syserror ();
}
@@ -939,7 +939,7 @@ read_control_file_item (ssh_control_file_t cf)
if (!*line || line[strlen(line)-1] != '\n')
{
/* Eat until end of line */
- while ( (c=getc (cf->fp)) != EOF && c != '\n')
+ while ((c = es_getc (cf->fp)) != EOF && c != '\n')
;
return gpg_error (*line? GPG_ERR_LINE_TOO_LONG
: GPG_ERR_INCOMPLETE_LINE);
@@ -1095,7 +1095,7 @@ add_control_entry (ctrl_t ctrl, ssh_key_type_spec_t *spec,
/* Not yet in the file - add it. Because the file has been
opened in append mode, we simply need to write to it. */
tp = localtime (&atime);
- fprintf (cf->fp,
+ es_fprintf (cf->fp,
("# %s key added on: %04d-%02d-%02d %02d:%02d:%02d\n"
"# Fingerprints: %s\n"
"# %s\n"
diff --git a/agent/command.c b/agent/command.c
index 9e3483e..8642498 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -1260,7 +1260,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line)
ctrl_t ctrl = assuan_get_pointer (ctx);
int err;
unsigned char grip[20];
- DIR *dir = NULL;
+ gnupg_dir_t dir = NULL;
int list_mode;
int opt_data, opt_ssh_fpr, opt_with_ssh;
ssh_control_file_t cf = NULL;
@@ -1316,7 +1316,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line)
else if (list_mode)
{
char *dirname;
- struct dirent *dir_entry;
+ gnupg_dirent_t dir_entry;
dirname = make_filename_try (gnupg_homedir (),
GNUPG_PRIVATE_KEYS_DIR, NULL);
@@ -1325,7 +1325,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line)
err = gpg_error_from_syserror ();
goto leave;
}
- dir = opendir (dirname);
+ dir = gnupg_opendir (dirname);
if (!dir)
{
err = gpg_error_from_syserror ();
@@ -1334,7 +1334,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line)
}
xfree (dirname);
- while ( (dir_entry = readdir (dir)) )
+ while ( (dir_entry = gnupg_readdir (dir)) )
{
if (strlen (dir_entry->d_name) != 44
|| strcmp (dir_entry->d_name + 40, ".key"))
@@ -1385,8 +1385,7 @@ cmd_keyinfo (assuan_context_t ctx, char *line)
leave:
ssh_close_control_file (cf);
- if (dir)
- closedir (dir);
+ gnupg_closedir (dir);
if (err && gpg_err_code (err) != GPG_ERR_NOT_FOUND)
leave_cmd (ctx, err);
return err;
@@ -3173,7 +3172,6 @@ cmd_getinfo (assuan_context_t ctx, char *line)
}
else if (!strcmp (line, "jent_active"))
{
-#if GCRYPT_VERSION_NUMBER >= 0x010800
char *buf;
char *fields[5];
@@ -3185,9 +3183,6 @@ cmd_getinfo (assuan_context_t ctx, char *line)
else
rc = gpg_error (GPG_ERR_FALSE);
gcry_free (buf);
-#else
- rc = gpg_error (GPG_ERR_FALSE);
-#endif
}
else if (!strcmp (line, "s2k_count_cal"))
{
diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c
index 758eab9..ff153c3 100644
--- a/agent/cvt-openpgp.c
+++ b/agent/cvt-openpgp.c
@@ -158,7 +158,7 @@ convert_secret_key (gcry_sexp_t *r_key, int pubkey_algo, gcry_mpi_t *skey,
if (!strcmp (curve, "Ed25519"))
/* Do not store the OID as name but the real name and the
EdDSA flag. */
- format = "(private-key(ecc(curve %s)(flags eddsa)(q%m)(d%m)))";
+ format = "(private-key(ecc(curve %s)(flags eddsa)(q%m)(d%M)))";
else if (!strcmp (curve, "Curve25519"))
format = "(private-key(ecc(curve %s)(flags djb-tweak)(q%m)(d%m)))";
else
diff --git a/agent/divert-scd.c b/agent/divert-scd.c
index b79f7a8..70a71e9 100644
--- a/agent/divert-scd.c
+++ b/agent/divert-scd.c
@@ -79,7 +79,7 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
rc = agent_card_serialno (ctrl, &serialno, want_sn);
if (!rc)
{
- log_debug ("detected card with S/N %s\n", serialno);
+ log_info ("detected card with S/N %s\n", serialno);
i = strcmp (serialno, want_sn);
xfree (serialno);
serialno = NULL;
@@ -93,13 +93,13 @@ ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
}
else if (gpg_err_code (rc) == GPG_ERR_ENODEV)
{
- log_debug ("no device present\n");
+ log_info ("no device present\n");
rc = 0;
no_card = 1;
}
else if (gpg_err_code (rc) == GPG_ERR_CARD_NOT_PRESENT)
{
- log_debug ("no card present\n");
+ log_info ("no card present\n");
rc = 0;
no_card = 2;
}
@@ -436,6 +436,7 @@ getpin_cb (void *opaque, const char *desc_text, const char *info,
int
divert_pksign (ctrl_t ctrl, const char *desc_text,
const unsigned char *digest, size_t digestlen, int algo,
+ const unsigned char *grip,
const unsigned char *shadow_info, unsigned char **r_sig,
size_t *r_siglen)
{
@@ -450,6 +451,22 @@ divert_pksign (ctrl_t ctrl, const char *desc_text,
if (rc)
return rc;
+ /* For OpenPGP cards we better use the keygrip as key reference.
+ * This has the advantage that app-openpgp can check that the stored
+ * key matches our expectation. This is important in case new keys
+ * have been created on the same card but the sub file has not been
+ * updated. In that case we would get a error from our final
+ * signature checking code or, if the pubkey algo is different,
+ * weird errors from the card (Conditions of use not satisfied). */
+ if (kid && grip && !strncmp (kid, "OPENPGP.", 8))
+ {
+ xfree (kid);
+ kid = bin2hex (grip, KEYGRIP_LEN, NULL);
+ if (!kid)
+ return gpg_error_from_syserror ();
+ }
+
+
if (algo == MD_USER_TLS_MD5SHA1)
{
int save = ctrl->use_auth_call;
@@ -491,6 +508,7 @@ divert_pksign (ctrl_t ctrl, const char *desc_text,
int
divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
const unsigned char *cipher,
+ const unsigned char *grip,
const unsigned char *shadow_info,
char **r_buf, size_t *r_len, int *r_padding)
{
@@ -585,6 +603,21 @@ divert_pkdecrypt (ctrl_t ctrl, const char *desc_text,
if (rc)
return rc;
+ /* For OpenPGP cards we better use the keygrip as key reference.
+ * This has the advantage that app-openpgp can check that the stored
+ * key matches our expectation. This is important in case new keys
+ * have been created on the same card but the sub file has not been
+ * updated. In that case we would get a error from our final
+ * signature checking code or, if the pubkey algo is different,
+ * weird errors from the card (Conditions of use not satisfied). */
+ if (kid && grip && !strncmp (kid, "OPENPGP.", 8))
+ {
+ xfree (kid);
+ kid = bin2hex (grip, KEYGRIP_LEN, NULL);
+ if (!kid)
+ return gpg_error_from_syserror ();
+ }
+
rc = agent_card_pkdecrypt (ctrl, kid, getpin_cb, ctrl, NULL,
ciphertext, ciphertextlen,
&plaintext, &plaintextlen, r_padding);
diff --git a/agent/findkey.c b/agent/findkey.c
index fa09d64..cea2195 100644
--- a/agent/findkey.c
+++ b/agent/findkey.c
@@ -170,7 +170,7 @@ agent_write_private_key (const unsigned char *grip,
/* FIXME: Write to a temp file first so that write failures during
key updates won't lead to a key loss. */
- if (!force && !access (fname, F_OK))
+ if (!force && !gnupg_access (fname, F_OK))
{
log_error ("secret key file '%s' already exists\n", fname);
xfree (fname);
@@ -1377,7 +1377,7 @@ agent_key_available (const unsigned char *grip)
fname = make_filename (gnupg_homedir (), GNUPG_PRIVATE_KEYS_DIR,
hexgrip, NULL);
- result = !access (fname, R_OK)? 0 : -1;
+ result = !gnupg_access (fname, R_OK)? 0 : -1;
xfree (fname);
return result;
}
diff --git a/agent/gpg-agent-w32info.rc b/agent/gpg-agent-w32info.rc
index d586cad..a0311b2 100644
--- a/agent/gpg-agent-w32info.rc
+++ b/agent/gpg-agent-w32info.rc
@@ -48,3 +48,5 @@
VALUE "Translation", 0x409, 0x4b0
END
END
+
+1 RT_MANIFEST "gpg-agent.w32-manifest"
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index e03cc6b..795f282 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -984,9 +984,7 @@ thread_init_once (void)
* has already been initialized but at that point nPth was not
* initialized and thus Libgcrypt could not set its system call
* clamp. */
-#if GCRYPT_VERSION_NUMBER >= 0x010800 /* 1.8.0 */
gcry_control (GCRYCTL_REINIT_SYSCALL_CLAMP, 0, 0);
-#endif
}
@@ -1156,7 +1154,7 @@ main (int argc, char **argv )
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -1864,23 +1862,6 @@ agent_libgcrypt_progress_cb (void *data, const char *what, int printchar,
break;
if (dispatch && dispatch->cb)
dispatch->cb (dispatch->ctrl, what, printchar, current, total);
-
- /* Libgcrypt < 1.8 does not know about nPth and thus when it reads
- * from /dev/random this will block the process. To mitigate this
- * problem we yield the thread when Libgcrypt tells us that it needs
- * more entropy. This way other threads have chance to run. */
-#if GCRYPT_VERSION_NUMBER < 0x010800 /* 1.8.0 */
- if (what && !strcmp (what, "need_entropy"))
- {
-#if GPGRT_VERSION_NUMBER < 0x011900 /* 1.25 */
- /* In older gpg-error versions gpgrt_yield is buggy for use with
- * nPth and thus we need to resort to a sleep call. */
- npth_usleep (1000); /* 1ms */
-#else
- gpgrt_yield ();
-#endif
- }
-#endif
}
@@ -2045,7 +2026,7 @@ reread_configuration (void)
if (!config_filename)
return; /* No config file. */
- fp = fopen (config_filename, "r");
+ fp = gnupg_fopen (config_filename, "r");
if (!fp)
{
log_info (_("option file '%s': %s\n"),
@@ -2307,17 +2288,27 @@ create_private_keys_directory (const char *home)
struct stat statbuf;
fname = make_filename (home, GNUPG_PRIVATE_KEYS_DIR, NULL);
- if (stat (fname, &statbuf) && errno == ENOENT)
+ if (gnupg_stat (fname, &statbuf) && errno == ENOENT)
{
if (gnupg_mkdir (fname, "-rwx"))
log_error (_("can't create directory '%s': %s\n"),
fname, strerror (errno) );
else if (!opt.quiet)
log_info (_("directory '%s' created\n"), fname);
+
+ if (gnupg_chmod (fname, "-rwx"))
+ log_error (_("can't set permissions of '%s': %s\n"),
+ fname, strerror (errno));
+ }
+ else
+ {
+ /* The file exists or another error. Make sure we have sensible
+ * permissions. We enforce rwx for user but keep existing group
+ * permissions. Permissions for other are always cleared. */
+ if (gnupg_chmod (fname, "-rwx...---"))
+ log_error (_("can't set permissions of '%s': %s\n"),
+ fname, strerror (errno));
}
- if (gnupg_chmod (fname, "-rwx"))
- log_error (_("can't set permissions of '%s': %s\n"),
- fname, strerror (errno));
xfree (fname);
}
@@ -2336,7 +2327,7 @@ create_directories (void)
char *home;
home = make_filename (gnupg_homedir (), NULL);
- if ( stat (home, &statbuf) )
+ if (gnupg_stat (home, &statbuf))
{
if (errno == ENOENT)
{
@@ -2424,7 +2415,7 @@ handle_tick (void)
/* Check whether the homedir is still available. */
if (!shutdown_pending
&& (!have_homedir_inotify || !reliable_homedir_inotify)
- && stat (gnupg_homedir (), &statbuf) && errno == ENOENT)
+ && gnupg_stat (gnupg_homedir (), &statbuf) && errno == ENOENT)
{
shutdown_pending = 1;
log_info ("homedir has been removed - shutting down\n");
diff --git a/agent/gpg-agent.w32-manifest.in b/agent/gpg-agent.w32-manifest.in
new file mode 100644
index 0000000..d865aef
--- /dev/null
+++ b/agent/gpg-agent.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Private key daemon)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpg-agent"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/agent/pkdecrypt.c b/agent/pkdecrypt.c
index 06a8e0b..6aed96b 100644
--- a/agent/pkdecrypt.c
+++ b/agent/pkdecrypt.c
@@ -86,7 +86,8 @@ agent_pkdecrypt (ctrl_t ctrl, const char *desc_text,
goto leave;
}
- rc = divert_pkdecrypt (ctrl, desc_text, ciphertext, shadow_info,
+ rc = divert_pkdecrypt (ctrl, desc_text, ciphertext,
+ ctrl->keygrip, shadow_info,
&buf, &len, r_padding);
if (rc)
{
diff --git a/agent/pksign.c b/agent/pksign.c
index f54af08..09d61b8 100644
--- a/agent/pksign.c
+++ b/agent/pksign.c
@@ -356,6 +356,7 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
err = divert_pksign (ctrl, desc2? desc2 : desc_text,
data, datalen,
ctrl->digest.algo,
+ ctrl->keygrip,
shadow_info, &buf, &len);
xfree (desc2);
}
@@ -473,12 +474,6 @@ agent_pksign_do (ctrl_t ctrl, const char *cache_nonce,
if (err)
goto leave;
- if (dsaalgo == 0 && GCRYPT_VERSION_NUMBER < 0x010700)
- {
- /* It's RSA and Libgcrypt < 1.7 */
- check_signature = 1;
- }
-
if (DBG_CRYPTO)
{
gcry_log_debugsxp ("skey", s_skey);
diff --git a/agent/protect-tool.c b/agent/protect-tool.c
index 0ba31c1..f55a735 100644
--- a/agent/protect-tool.c
+++ b/agent/protect-tool.c
@@ -275,7 +275,7 @@ read_file (const char *fname, size_t *r_length)
{
struct stat st;
- fp = fopen (fname, "rb");
+ fp = gnupg_fopen (fname, "rb");
if (!fp)
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
diff --git a/agent/protect.c b/agent/protect.c
index 1766909..87df685 100644
--- a/agent/protect.c
+++ b/agent/protect.c
@@ -1725,6 +1725,7 @@ parse_shadow_info (const unsigned char *shadow_info,
}
memcpy (*r_idstr, s, n);
(*r_idstr)[n] = 0;
+ trim_spaces (*r_idstr);
}
/* Parse the optional PINLEN. */
diff --git a/agent/trustlist.c b/agent/trustlist.c
index af177b2..50f2ad4 100644
--- a/agent/trustlist.c
+++ b/agent/trustlist.c
@@ -186,6 +186,7 @@ read_one_trustfile (const char *fname, int allow_include,
{
char *etcname;
gpg_error_t err2;
+ gpg_err_code_t ec;
if (!allow_include)
{
@@ -199,7 +200,7 @@ read_one_trustfile (const char *fname, int allow_include,
if ( !strcmp (etcname, fname) ) /* Same file. */
log_info (_("statement \"%s\" ignored in '%s', line %d\n"),
"include-default", fname, lnr);
- else if ( access (etcname, F_OK) && errno == ENOENT )
+ else if ((ec=gnupg_access (etcname, F_OK)) && ec == GPG_ERR_ENOENT)
{
/* A non existent system trustlist is not an error.
Just print a note. */
@@ -337,6 +338,7 @@ read_trustfiles (void)
size_t tablesize;
char *fname;
int allow_include = 1;
+ gpg_err_code_t ec;
tablesize = 20;
table = xtrycalloc (tablesize, sizeof *table);
@@ -352,13 +354,13 @@ read_trustfiles (void)
return err;
}
- if ( access (fname, F_OK) )
+ if ((ec = gnupg_access (fname, F_OK)))
{
- if ( errno == ENOENT )
+ if ( ec == GPG_ERR_ENOENT )
; /* Silently ignore a non-existing trustfile. */
else
{
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
log_error (_("error opening '%s': %s\n"), fname, gpg_strerror (err));
}
xfree (fname);
@@ -602,6 +604,7 @@ gpg_error_t
agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
{
gpg_error_t err = 0;
+ gpg_err_code_t ec;
char *desc;
char *fname;
estream_t fp;
@@ -619,7 +622,7 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
if (!fname)
return gpg_error_from_syserror ();
- if ( access (fname, W_OK) && errno != ENOENT)
+ if ((ec = access (fname, W_OK)) && ec != GPG_ERR_ENOENT)
{
xfree (fname);
return gpg_error (GPG_ERR_EPERM);
@@ -752,12 +755,12 @@ agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
xfree (nameformatted);
return err;
}
- if ( access (fname, F_OK) && errno == ENOENT)
+ if ((ec = access (fname, F_OK)) && ec == GPG_ERR_ENOENT)
{
fp = es_fopen (fname, "wx,mode=-rw-r");
if (!fp)
{
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
log_error ("can't create '%s': %s\n", fname, gpg_strerror (err));
xfree (fname);
unlock_trusttable ();
diff --git a/build-aux/speedo.mk b/build-aux/speedo.mk
index f6e97ea..7dc5be4 100644
--- a/build-aux/speedo.mk
+++ b/build-aux/speedo.mk
@@ -110,7 +110,7 @@ help:
@echo 'Use CUSTOM_SWDB=1 for an already downloaded swdb.lst.'
@echo 'Use WIXPREFIX to provide the WIX binaries for the MSI package.'
@echo ' Using WIX also requires wine with installed wine mono.'
- @echo ' Seee help-wixlib for more information'
+ @echo ' See help-wixlib for more information'
help-wixlib:
@echo 'The buildsystem can create a wixlib to build MSI packages.'
diff --git a/build-aux/speedo/w32/inst.nsi b/build-aux/speedo/w32/inst.nsi
index fb452d5..9eb4fb4 100644
--- a/build-aux/speedo/w32/inst.nsi
+++ b/build-aux/speedo/w32/inst.nsi
@@ -627,6 +627,7 @@ Section "GnuPG" SEC_gnupg
File "bin/gpgtar.exe"
File "libexec/dirmngr_ldap.exe"
File "libexec/gpg-preset-passphrase.exe"
+ File "libexec/gpg-check-pattern.exe"
File "libexec/gpg-wks-client.exe"
ClearErrors
@@ -657,6 +658,11 @@ Section "GnuPG" SEC_gnupg
File "share/gnupg/distsigkey.gpg"
File "share/gnupg/sks-keyservers.netCA.pem"
+ SetOutPath "$INSTDIR\share\doc\gnupg\examples"
+ File "share/doc/gnupg/examples/VS-NfD.prf"
+ File "share/doc/gnupg/examples/Automatic.prf"
+ File "share/doc/gnupg/examples/pwpattern.list"
+
SetOutPath "$INSTDIR\share\locale\ca\LC_MESSAGES"
File share/locale/ca/LC_MESSAGES/gnupg2.mo
SetOutPath "$INSTDIR\share\locale\cs\LC_MESSAGES"
@@ -1315,8 +1321,14 @@ Section "-un.gnupg"
Delete "$INSTDIR\bin\gpgtar.exe"
Delete "$INSTDIR\bin\dirmngr_ldap.exe"
Delete "$INSTDIR\bin\gpg-preset-passphrase.exe"
+ Delete "$INSTDIR\bin\gpg-check-pattern.exe"
Delete "$INSTDIR\bin\gpg-wks-client.exe"
+ Delete "$INSTDIR\share\doc\gnupg\examples\VS-NfD.prf"
+ Delete "$INSTDIR\share\doc\gnupg\examples\Automatic.prf"
+ Delete "$INSTDIR\share\doc\gnupg\examples\pwpattern.list"
+ RMDir "$INSTDIR\share\doc\gnupg\examples"
+
Delete "$INSTDIR\share\gnupg\sks-keyservers.netCA.pem"
Delete "$INSTDIR\share\gnupg\dirmngr-conf.skel"
Delete "$INSTDIR\share\gnupg\distsigkey.gpg"
diff --git a/build-aux/speedo/w32/wixlib.wxs b/build-aux/speedo/w32/wixlib.wxs
index a92fbf6..d3ffc08 100644
--- a/build-aux/speedo/w32/wixlib.wxs
+++ b/build-aux/speedo/w32/wixlib.wxs
@@ -64,6 +64,9 @@ and then manually edited:
<Component Id="cmp6C1FB70721B208E33DB24296B93AB93F" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A1">
<File Id="fil563D2C0464DCE7ECADE6E15C0FC65821" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-preset-passphrase.exe"/>
</Component>
+ <Component Id="cmp6C1FB70721B208E33DB24296B93AB940" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="FE29D2AA-3151-4421-B8C0-355F69F267A2">
+ <File Id="fil563D2C0464DCE7ECADE6E15C0FC65822" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-check-pattern.exe"/>
+ </Component>
<Component Id="cmpB87CCF9DDCB6D9B36B92B0F9FA24FDC9" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="9BB809F3-C09B-4A1E-B52D-B68CBE59AE3B">
<File Id="fil8A3F9D3F6E36120B183DDF4981D84C1B" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpg-wks-client.exe"/>
</Component>
@@ -73,6 +76,9 @@ and then manually edited:
<Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162912" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="28A7D50E-4BC0-4A38-8420-52C5D1EB3F55">
<File Id="fil00B1F6AD370147577D6F7C998ACE6121" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf.exe"/>
</Component>
+ <Component Id="cmpAF601EA2DF4EFD403CBF65A0D5162922" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="EEF227D9-1FA3-4A96-AF86-12D1FDC12925">
+ <File Id="fil00B1F6AD370147577D6F7C998ACE6122" KeyPath="yes" Source="$(var.SourceDir)\bin\gpgconf-w32.exe"/>
+ </Component>
<Component Id="cmp3BA8A06E4085F542FDAA78BAFB507AD4" Directory="dirAA72FFDDFA224FB221D53750596B0142" Guid="E026569F-F37A-49FC-A529-68BDE3097218">
<File Id="fil1A596ECA8DC19F8EC626168033269CFE" KeyPath="yes" Source="$(var.SourceDir)\libexec\gpgme-w32spawn.exe"/>
</Component>
@@ -152,7 +158,13 @@ and then manually edited:
<File Id="fil0615847C26E386E0B892124531F2ABBC" KeyPath="yes" Source="$(var.SourceDir)\lib\libnpth.dll.a" Name="libnpth.imp"/>
</Component>
<Component Id="cmp909B0412FDFCFD5092D93932AF982A72" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F610">
- <File Id="fil322067E40CE41C36574A7CC520D75876" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\vsnfd.prf" Name="VS-NfD.prf"/>
+ <File Id="fil322067E40CE41C36574A7CC520D75876" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\VS-NfD.prf" Name="VS-NfD.prf"/>
+ </Component>
+ <Component Id="cmp909B0412FDFCFD5092D93932AF982A73" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F611">
+ <File Id="fil322067E40CE41C36574A7CC520D75877" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\Automatic.prf" Name="Automatic.prf"/>
+ </Component>
+ <Component Id="cmp909B0412FDFCFD5092D93932AF982A74" Directory="dirC2E6BF1CC65903EA3A1AD83349586122" Guid="D30E7138-0D1C-48F4-8F53-E1EC6333F612">
+ <File Id="fil322067E40CE41C36574A7CC520D75878" KeyPath="yes" Source="$(var.SourceDir)\share\doc\gnupg\examples\pwpattern.list" Name="pwpattern.list"/>
</Component>
<Component Id="cmp59D652F2B6BBFD90563BF58D6CE6BE7B" Directory="dirF4B1502A83344E3C92AB58989653B465" Guid="1C51D4AF-B308-40A3-B8D8-CEDA5AB2A383">
<File Id="filCB1BD20C87EE88A17D7502E26268DA65" KeyPath="yes" Source="$(var.SourceDir)\share\gnupg\distsigkey.gpg"/>
diff --git a/common/argparse.c b/common/argparse.c
index c29f8e9..c04cf83 100644
--- a/common/argparse.c
+++ b/common/argparse.c
@@ -70,8 +70,22 @@
#else /* Used by GnuPG */
+/* GnuPG has always been a part of the GNU project and thus we have
+ * shown the FSF as holder of the copyright. We continue to do so for
+ * the reason that without the FSF the free software used all over the
+ * world would not have come into existence. However, under Windows
+ * we print a different copyright string with --version because the
+ * copyright assignments of g10 Code and Werner Koch were terminated
+ * many years ago, g10 Code is still the major contributor to the
+ * code, and Windows is not an FSF endorsed platform. Note that the
+ * list of copyright holders can be found in the AUTHORS file. */
+
# define ARGPARSE_GPL_VERSION 3
+# ifdef HAVE_W32_SYSTEM
+# define ARGPARSE_CRIGHT_STR "Copyright (C) 2020 g10 Code GmbH"
+# else
# define ARGPARSE_CRIGHT_STR "Copyright (C) 2020 Free Software Foundation, Inc."
+# endif
#endif /*GNUPG_MAJOR_VERSION*/
diff --git a/common/compliance.c b/common/compliance.c
index e533dd4..e77b1af 100644
--- a/common/compliance.c
+++ b/common/compliance.c
@@ -499,7 +499,6 @@ gnupg_rng_is_compliant (enum gnupg_compliance_mode compliance)
/* In DE_VS mode under Windows we require that the JENT RNG
* is active. */
#ifdef HAVE_W32_SYSTEM
-# if GCRYPT_VERSION_NUMBER >= 0x010800
char *buf;
char *fields[5];
@@ -511,9 +510,6 @@ gnupg_rng_is_compliant (enum gnupg_compliance_mode compliance)
else
result = 0;
gcry_free (buf);
-# else
- result = 0; /* No JENT - can't be compliant. */
-# endif
#else /*!HAVE_W32_SYSTEM*/
result = 1; /* Not Windows - RNG is good. */
#endif /*!HAVE_W32_SYSTEM*/
diff --git a/common/dotlock.c b/common/dotlock.c
index 5227bb6..e2cf6f6 100644
--- a/common/dotlock.c
+++ b/common/dotlock.c
@@ -471,6 +471,21 @@ map_w32_to_errno (DWORD w32_err)
}
#endif /*HAVE_DOSISH_SYSTEM*/
+
+#ifdef HAVE_W32_SYSTEM
+static int
+any8bitchar (const char *string)
+{
+ if (string)
+ for ( ; *string; string++)
+ if ((*string & 0x80))
+ return 1;
+ return 0;
+}
+#endif /*HAVE_W32_SYSTEM*/
+
+
+
/* Entirely disable all locking. This function should be called
before any locking is done. It may be called right at startup of
@@ -794,7 +809,7 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
h->next = all_lockfiles;
all_lockfiles = h;
- h->lockname = xtrymalloc ( strlen (file_to_lock) + 6 );
+ h->lockname = strconcat (file_to_lock, EXTSEP_S "lock", NULL);
if (!h->lockname)
{
all_lockfiles = h->next;
@@ -802,7 +817,6 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
xfree (h);
return NULL;
}
- strcpy (stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock");
/* If would be nice if we would use the FILE_FLAG_DELETE_ON_CLOSE
along with FILE_SHARE_DELETE but that does not work due to a race
@@ -812,25 +826,24 @@ dotlock_create_w32 (dotlock_t h, const char *file_to_lock)
reasons why a lock file can't be created and thus the process
would not stop as expected but spin until Windows crashes. Our
solution is to keep the lock file open; that does not harm. */
- {
-#ifdef HAVE_W32CE_SYSTEM
- wchar_t *wname = utf8_to_wchar (h->lockname);
-
- if (wname)
- h->lockhd = CreateFile (wname,
- GENERIC_READ|GENERIC_WRITE,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
- NULL, OPEN_ALWAYS, 0, NULL);
- else
- h->lockhd = INVALID_HANDLE_VALUE;
- xfree (wname);
-#else
- h->lockhd = CreateFile (h->lockname,
- GENERIC_READ|GENERIC_WRITE,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
- NULL, OPEN_ALWAYS, 0, NULL);
-#endif
- }
+ if (any8bitchar (h->lockname))
+ {
+ wchar_t *wname = utf8_to_wchar (h->lockname);
+
+ if (wname)
+ h->lockhd = CreateFileW (wname,
+ GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL, OPEN_ALWAYS, 0, NULL);
+ else
+ h->lockhd = INVALID_HANDLE_VALUE;
+ xfree (wname);
+ }
+ else
+ h->lockhd = CreateFileA (h->lockname,
+ GENERIC_READ|GENERIC_WRITE,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL, OPEN_ALWAYS, 0, NULL);
if (h->lockhd == INVALID_HANDLE_VALUE)
{
int saveerrno = map_w32_to_errno (GetLastError ());
diff --git a/common/exechelp-posix.c b/common/exechelp-posix.c
index 3acf74a..0782152 100644
--- a/common/exechelp-posix.c
+++ b/common/exechelp-posix.c
@@ -835,14 +835,15 @@ gpg_error_t
gnupg_spawn_process_detached (const char *pgmname, const char *argv[],
const char *envp[] )
{
+ gpg_err_code_t ec;
pid_t pid;
int i;
if (getuid() != geteuid())
return my_error (GPG_ERR_BUG);
- if (access (pgmname, X_OK))
- return my_error_from_syserror ();
+ if ((ec = gnupg_access (pgmname, X_OK)))
+ return gpg_err_make (default_errsource, ec);
pid = fork ();
if (pid == (pid_t)(-1))
diff --git a/common/exechelp-w32.c b/common/exechelp-w32.c
index da17450..7bd9d22 100644
--- a/common/exechelp-w32.c
+++ b/common/exechelp-w32.c
@@ -855,13 +855,13 @@ gnupg_spawn_process_detached (const char *pgmname, const char *argv[],
STARTUPINFO si;
int cr_flags;
char *cmdline;
-
+ gpg_err_code_t ec;
/* We don't use ENVP. */
(void)envp;
- if (access (pgmname, X_OK))
- return my_error_from_syserror ();
+ if ((ec = gnupg_access (pgmname, X_OK)))
+ return gpg_err_make (default_errsource, ec);
/* Prepare security attributes. */
memset (&sec_attr, 0, sizeof sec_attr );
diff --git a/common/gettime.c b/common/gettime.c
index 4ad99f5..03c152f 100644
--- a/common/gettime.c
+++ b/common/gettime.c
@@ -31,6 +31,9 @@
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
@@ -679,9 +682,9 @@ isotimestamp (u32 stamp)
const char *
asctimestamp (u32 stamp)
{
- static char buffer[50];
+ static char buffer[80];
#if defined (HAVE_STRFTIME) && defined (HAVE_NL_LANGINFO)
- static char fmt[50];
+ static char fmt[80];
#endif
struct tm *tp;
time_t atime = stamp;
@@ -707,6 +710,32 @@ asctimestamp (u32 stamp)
zone at all. */
strftime (buffer, DIM(buffer)-1, "%c", tp);
# else
+# if HAVE_W32_SYSTEM
+ {
+ static int done;
+
+ if (!done)
+ {
+ /* The locale names as used by Windows are in the form
+ * "German_Germany.1252" or "German_Austria.1252" with
+ * alternate names similar to Unix, e.g. "de-DE". However
+ * that is the theory. On current Windows and Mingw the
+ * alternate names do not work. We would need a table to map
+ * them from the short names as provided by gpgrt to the long
+ * names and append some code page. For now we use "" and
+ * take the locale from the user's system settings. Thus the
+ * standard Unix envvars don't work for time and may mismatch
+ * with the string translations. The new UCRT available since
+ * 2018 has a lot of additional support but that will for sure
+ * break other things. We should move to ISO strings to get
+ * rid of such problems. */
+ setlocale (LC_TIME, "");
+ done = 1;
+ /* log_debug ("LC_ALL now '%s'\n", setlocale (LC_ALL, NULL)); */
+ /* log_debug ("LC_TIME now '%s'\n", setlocale (LC_TIME, NULL)); */
+ }
+ }
+# endif
/* FIXME: we should check whether the locale appends a " %Z" These
* locales from glibc don't put the " %Z": fi_FI hr_HR ja_JP lt_LT
* lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN. */
diff --git a/common/helpfile.c b/common/helpfile.c
index 7cb01a4..7a7a235 100644
--- a/common/helpfile.c
+++ b/common/helpfile.c
@@ -41,14 +41,14 @@ static char *
findkey_fname (const char *key, const char *fname)
{
gpg_error_t err = 0;
- FILE *fp;
+ estream_t fp;
int lnr = 0;
int c;
char *p, line[256];
int in_item = 0;
membuf_t mb = MEMBUF_ZERO;
- fp = fopen (fname, "r");
+ fp = es_fopen (fname, "r");
if (!fp)
{
if (errno != ENOENT)
@@ -59,14 +59,14 @@ findkey_fname (const char *key, const char *fname)
return NULL;
}
- while (fgets (line, DIM(line)-1, fp))
+ while (es_fgets (line, DIM(line)-1, fp))
{
lnr++;
if (!*line || line[strlen(line)-1] != '\n')
{
/* Eat until end of line. */
- while ( (c=getc (fp)) != EOF && c != '\n')
+ while ((c = es_getc (fp)) != EOF && c != '\n')
;
err = gpg_error (*line? GPG_ERR_LINE_TOO_LONG
: GPG_ERR_INCOMPLETE_LINE);
@@ -130,14 +130,14 @@ findkey_fname (const char *key, const char *fname)
}
}
- if ( !err && ferror (fp) )
+ if ( !err && es_ferror (fp) )
{
err = gpg_error_from_syserror ();
log_error (_("error reading '%s', line %d: %s\n"),
fname, lnr, gpg_strerror (err));
}
- fclose (fp);
+ es_fclose (fp);
if (is_membuf_ready (&mb))
{
/* We have collected something. */
diff --git a/common/homedir.c b/common/homedir.c
index 4b6e46e..85e09c4 100644
--- a/common/homedir.c
+++ b/common/homedir.c
@@ -61,6 +61,7 @@
#include "util.h"
#include "sysutils.h"
+#include "i18n.h"
#include "zb32.h"
/* The GnuPG homedir. This is only accessed by the functions
@@ -117,14 +118,16 @@ w32_try_mkdir (const char *dir)
#endif
-/* This is a helper function to load a Windows function from either of
- one DLLs. */
+/* This is a helper function to load and call a Windows function from
+ * either of one DLLs. On success an UTF-8 file name is returned.
+ * ERRNO is _not_ set on error. */
#ifdef HAVE_W32_SYSTEM
-static HRESULT
-w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e)
+static char *
+w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d)
{
static int initialized;
- static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPSTR);
+ static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPWSTR);
+ wchar_t wfname[MAX_PATH];
if (!initialized)
{
@@ -139,7 +142,7 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e)
handle = dlopen (dllnames[i], RTLD_LAZY);
if (handle)
{
- func = dlsym (handle, "SHGetFolderPathA");
+ func = dlsym (handle, "SHGetFolderPathW");
if (!func)
{
dlclose (handle);
@@ -149,10 +152,10 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e)
}
}
- if (func)
- return func (a,b,c,d,e);
+ if (func && func (a,b,c,d,wfname) >= 0)
+ return wchar_to_utf8 (wfname);
else
- return -1;
+ return NULL;
}
#endif /*HAVE_W32_SYSTEM*/
@@ -248,25 +251,17 @@ standard_homedir (void)
}
else
{
- char path[MAX_PATH];
-
- /* It might be better to use LOCAL_APPDATA because this is
- defined as "non roaming" and thus more likely to be kept
- locally. For private keys this is desired. However,
- given that many users copy private keys anyway forth and
- back, using a system roaming services might be better
- than to let them do it manually. A security conscious
- user will anyway use the registry entry to have better
- control. */
- if (w32_shgetfolderpath (NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE,
- NULL, 0, path) >= 0)
+ char *path;
+
+ path = w32_shgetfolderpath (NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE,
+ NULL, 0);
+ if (path)
{
- char *tmp = xmalloc (strlen (path) + 6 +1);
- strcpy (stpcpy (tmp, path), "\\gnupg");
- dir = tmp;
+ dir = xstrconcat (path, "\\gnupg", NULL);
+ xfree (path);
/* Try to create the directory if it does not yet exists. */
- if (access (dir, F_OK))
+ if (gnupg_access (dir, F_OK))
w32_try_mkdir (dir);
}
else
@@ -360,10 +355,10 @@ check_portable_app (const char *dir)
char *fname;
fname = xstrconcat (dir, DIRSEP_S "gpgconf.exe", NULL);
- if (!access (fname, F_OK))
+ if (!gnupg_access (fname, F_OK))
{
strcpy (fname + strlen (fname) - 3, "ctl");
- if (!access (fname, F_OK))
+ if (!gnupg_access (fname, F_OK))
{
/* gpgconf.ctl file found. Record this fact. */
w32_portable_app = 1;
@@ -440,7 +435,7 @@ w32_commondir (void)
if (!dir)
{
const char *rdir;
- char path[MAX_PATH];
+ char *path;
/* Make sure that w32_rootdir has been called so that we are
able to check the portable application flag. The common dir
@@ -450,19 +445,17 @@ w32_commondir (void)
if (w32_portable_app)
return rdir;
- if (w32_shgetfolderpath (NULL, CSIDL_COMMON_APPDATA,
- NULL, 0, path) >= 0)
+ path = w32_shgetfolderpath (NULL, CSIDL_COMMON_APPDATA, NULL, 0);
+ if (path)
{
- char *tmp = xmalloc (strlen (path) + 4 +1);
- strcpy (stpcpy (tmp, path), "\\GNU");
- dir = tmp;
+ dir = xstrconcat (path, "\\GNU", NULL);
/* No auto create of the directory. Either the installer or
- the admin has to create these directories. */
+ * the admin has to create these directories. */
}
else
{
- /* Ooops: Not defined - probably an old Windows version.
- Use the installation directory instead. */
+ /* Folder not found or defined - probably an old Windows
+ * version. Use the installation directory instead. */
dir = xstrdup (rdir);
}
}
@@ -497,6 +490,38 @@ gnupg_set_homedir (const char *newdir)
}
+/* Create the homedir directory only if the supplied directory name is
+ * the same as the default one. This way we avoid to create arbitrary
+ * directories when a non-default home directory is used. To cope
+ * with HOME, we do compare only the suffix if we see that the default
+ * homedir does start with a tilde. If the mkdir fails the function
+ * terminates the process. If QUIET is set not diagnostic is printed
+ * on homedir creation. */
+void
+gnupg_maybe_make_homedir (const char *fname, int quiet)
+{
+ const char *defhome = standard_homedir ();
+
+ if (
+#ifdef HAVE_W32_SYSTEM
+ ( !compare_filenames (fname, defhome) )
+#else
+ ( *defhome == '~'
+ && (strlen(fname) >= strlen (defhome+1)
+ && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
+ || (*defhome != '~' && !compare_filenames( fname, defhome ) )
+#endif
+ )
+ {
+ if (gnupg_mkdir (fname, "-rwx"))
+ log_fatal ( _("can't create directory '%s': %s\n"),
+ fname, strerror(errno) );
+ else if (!quiet )
+ log_info ( _("directory '%s' created\n"), fname );
+ }
+}
+
+
/* Return the homedir. The returned string is valid until another
* gnupg-set-homedir call. This is always an absolute directory name.
* The function replaces the former global var opt.homedir. */
@@ -903,7 +928,7 @@ gnupg_cachedir (void)
}
else
{
- char path[MAX_PATH];
+ char *path;
const char *s1[] = { "GNU", "cache", "gnupg", NULL };
int s1_len;
const char **comp;
@@ -912,8 +937,10 @@ gnupg_cachedir (void)
for (comp = s1; *comp; comp++)
s1_len += 1 + strlen (*comp);
- if (w32_shgetfolderpath (NULL, CSIDL_LOCAL_APPDATA|CSIDL_FLAG_CREATE,
- NULL, 0, path) >= 0)
+ path = w32_shgetfolderpath (NULL,
+ CSIDL_LOCAL_APPDATA|CSIDL_FLAG_CREATE,
+ NULL, 0);
+ if (path)
{
char *tmp = xmalloc (strlen (path) + s1_len + 1);
char *p;
@@ -924,11 +951,12 @@ gnupg_cachedir (void)
p = stpcpy (p, "\\");
p = stpcpy (p, *comp);
- if (access (tmp, F_OK))
+ if (gnupg_access (tmp, F_OK))
w32_try_mkdir (tmp);
}
dir = tmp;
+ xfree (path);
}
else
{
@@ -976,6 +1004,8 @@ get_default_pinentry_name (int reset)
/* Try Gpg4win directory (with bin and without.) */
{ w32_rootdir, "\\..\\Gpg4win\\bin\\pinentry.exe" },
{ w32_rootdir, "\\..\\Gpg4win\\pinentry.exe" },
+ /* Try a pinentry in a dir above us */
+ { w32_rootdir, "\\..\\bin\\pinentry.exe" },
/* Try old Gpgwin directory. */
{ w32_rootdir, "\\..\\GNU\\GnuPG\\pinentry.exe" },
/* Try a Pinentry from the common GNU dir. */
@@ -1002,7 +1032,7 @@ get_default_pinentry_name (int reset)
char *name2;
name2 = xstrconcat (names[i].rfnc (), names[i].name, NULL);
- if (!access (name2, F_OK))
+ if (!gnupg_access (name2, F_OK))
{
/* Use that pinentry. */
xfree (name);
diff --git a/common/iobuf.c b/common/iobuf.c
index b20761b..4fd8cf5 100644
--- a/common/iobuf.c
+++ b/common/iobuf.c
@@ -193,6 +193,19 @@ fd_cache_strcmp (const char *a, const char *b)
#endif
}
+
+#ifdef HAVE_W32_SYSTEM
+static int
+any8bitchar (const char *string)
+{
+ if (string)
+ for ( ; *string; string++)
+ if ((*string & 0x80))
+ return 1;
+ return 0;
+}
+#endif /*HAVE_W32_SYSTEM*/
+
/*
* Invalidate (i.e. close) a cached iobuf
*/
@@ -294,21 +307,23 @@ direct_open (const char *fname, const char *mode, int mode700)
sm = FILE_SHARE_READ;
}
-#ifdef HAVE_W32CE_SYSTEM
- {
- wchar_t *wfname = utf8_to_wchar (fname);
- if (wfname)
- {
- hfile = CreateFile (wfname, da, sm, NULL, cd,
- FILE_ATTRIBUTE_NORMAL, NULL);
- xfree (wfname);
- }
- else
- hfile = INVALID_HANDLE_VALUE;
- }
-#else
- hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL);
-#endif
+ /* We use the Unicode version of the function only if needed to
+ * avoid an extra conversion step. */
+ if (any8bitchar (fname))
+ {
+ wchar_t *wfname = utf8_to_wchar (fname);
+ if (wfname)
+ {
+ hfile = CreateFileW (wfname, da, sm, NULL, cd,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ xfree (wfname);
+ }
+ else
+ hfile = INVALID_HANDLE_VALUE;
+ }
+ else
+ hfile = CreateFileA (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL);
+
return hfile;
#else /*!HAVE_W32_SYSTEM*/
diff --git a/common/mkdir_p.c b/common/mkdir_p.c
index c26cfee..6fb98c3 100644
--- a/common/mkdir_p.c
+++ b/common/mkdir_p.c
@@ -78,7 +78,7 @@ gnupg_amkdir_p (const char **directory_components)
/* log_debug ("%s: stat(%s)\n", __func__, dirs[i]); */
- if (!stat (dirs[i], &s))
+ if (!gnupg_stat (dirs[i], &s))
{
if ( ! S_ISDIR (s.st_mode))
{
diff --git a/common/status.h b/common/status.h
index dc62f36..d5564e4 100644
--- a/common/status.h
+++ b/common/status.h
@@ -35,6 +35,7 @@ enum
STATUS_ENTER,
STATUS_LEAVE,
STATUS_ABORT,
+ STATUS_CANCELED_BY_USER,
STATUS_GOODSIG,
STATUS_BADSIG,
diff --git a/common/sysutils.c b/common/sysutils.c
index 2673e45..520aa56 100644
--- a/common/sysutils.c
+++ b/common/sysutils.c
@@ -73,6 +73,7 @@
# include <npth.h>
#endif
#include <fcntl.h>
+#include <dirent.h>
#include <assuan.h>
@@ -83,6 +84,22 @@
#define tohex(n) ((n) < 10 ? ((n) + '0') : (((n) - 10) + 'A'))
+
+/* The object used with our opendir functions. We need to define our
+ * own so that we can properly handle Unicode on Windows. */
+struct gnupg_dir_s
+{
+#ifdef HAVE_W32_SYSTEM
+ _WDIR *dir; /* The system's DIR pointer. */
+#else
+ DIR *dir; /* The system's DIR pointer. */
+#endif
+ struct gnupg_dirent_s dirent; /* The current dirent. */
+ size_t namesize; /* If not 0 the allocated size of dirent.d_name. */
+ char name[256]; /* Only used if NAMESIZE is 0. */
+};
+
+
/* Flag to tell whether special file names are enabled. See gpg.c for
* an explanation of these file names. */
static int allow_special_filenames;
@@ -171,6 +188,18 @@ enable_core_dumps (void)
#endif
}
+#ifdef HAVE_W32_SYSTEM
+static int
+any8bitchar (const char *string)
+{
+ if (string)
+ for ( ; *string; string++)
+ if ((*string & 0x80))
+ return 1;
+ return 0;
+}
+#endif /*HAVE_W32_SYSTEM*/
+
/* Allow the use of special "-&nnn" style file names. */
void
@@ -629,7 +658,7 @@ gnupg_allow_set_foregound_window (pid_t pid)
int
gnupg_remove (const char *fname)
{
-#ifdef HAVE_W32CE_SYSTEM
+#ifdef HAVE_W32_SYSTEM
int rc;
wchar_t *wfname;
@@ -638,7 +667,7 @@ gnupg_remove (const char *fname)
rc = 0;
else
{
- rc = DeleteFile (wfname);
+ rc = DeleteFileW (wfname);
xfree (wfname);
}
if (!rc)
@@ -650,6 +679,36 @@ gnupg_remove (const char *fname)
}
+/* Helper for gnupg_rename_file. */
+#ifdef HAVE_W32_SYSTEM
+static int
+w32_rename (const char *oldname, const char *newname)
+{
+ if (any8bitchar (oldname) || any8bitchar (newname))
+ {
+ wchar_t *woldname, *wnewname;
+ int ret;
+
+ woldname = utf8_to_wchar (oldname);
+ if (!woldname)
+ return -1;
+ wnewname = utf8_to_wchar (newname);
+ if (!wnewname)
+ {
+ xfree (wnewname);
+ return -1;
+ }
+ ret = _wrename (woldname, wnewname);
+ xfree (wnewname);
+ xfree (woldname);
+ return ret;
+ }
+ else
+ return rename (oldname, newname);
+}
+#endif /*HAVE_W32_SYSTEM*/
+
+
/* Wrapper for rename(2) to handle Windows peculiarities. If
* BLOCK_SIGNALS is not NULL and points to a variable set to true, all
* signals will be blocked by calling gnupg_block_all_signals; the
@@ -669,7 +728,7 @@ gnupg_rename_file (const char *oldname, const char *newname, int *block_signals)
gnupg_remove (newname);
again:
- if (rename (oldname, newname))
+ if (w32_rename (oldname, newname))
{
if (GetLastError () == ERROR_SHARING_VIOLATION)
{
@@ -722,33 +781,38 @@ gnupg_rename_file (const char *oldname, const char *newname, int *block_signals)
#ifndef HAVE_W32_SYSTEM
static mode_t
-modestr_to_mode (const char *modestr)
+modestr_to_mode (const char *modestr, mode_t oldmode)
{
+ static struct {
+ char letter;
+ mode_t value;
+ } table[] = { { '-', 0 },
+ { 'r', S_IRUSR }, { 'w', S_IWUSR }, { 'x', S_IXUSR },
+ { 'r', S_IRGRP }, { 'w', S_IWGRP }, { 'x', S_IXGRP },
+ { 'r', S_IROTH }, { 'w', S_IWOTH }, { 'x', S_IXOTH } };
+ int idx;
mode_t mode = 0;
- if (modestr && *modestr)
+ /* For now we only support a string as used by ls(1) and no octal
+ * numbers. The first character must be a dash. */
+ for (idx=0; idx < 10 && *modestr; idx++, modestr++)
{
- modestr++;
- if (*modestr && *modestr++ == 'r')
- mode |= S_IRUSR;
- if (*modestr && *modestr++ == 'w')
- mode |= S_IWUSR;
- if (*modestr && *modestr++ == 'x')
- mode |= S_IXUSR;
- if (*modestr && *modestr++ == 'r')
- mode |= S_IRGRP;
- if (*modestr && *modestr++ == 'w')
- mode |= S_IWGRP;
- if (*modestr && *modestr++ == 'x')
- mode |= S_IXGRP;
- if (*modestr && *modestr++ == 'r')
- mode |= S_IROTH;
- if (*modestr && *modestr++ == 'w')
- mode |= S_IWOTH;
- if (*modestr && *modestr++ == 'x')
- mode |= S_IXOTH;
+ if (*modestr == table[idx].letter)
+ mode |= table[idx].value;
+ else if (*modestr == '.')
+ {
+ if (!idx)
+ ; /* Skip the dummy. */
+ else if ((oldmode & table[idx].value))
+ mode |= (oldmode & table[idx].value);
+ else
+ mode &= ~(oldmode & table[idx].value);
+ }
+ else if (*modestr != '-')
+ break;
}
+
return mode;
}
#endif
@@ -790,7 +854,7 @@ gnupg_mkdir (const char *name, const char *modestr)
because this sets ERRNO. */
return mkdir (name);
#else
- return mkdir (name, modestr_to_mode (modestr));
+ return mkdir (name, modestr_to_mode (modestr, 0));
#endif
#else
/* Note that gpgrt_mkdir also sets ERRNO in addition to returing an
@@ -808,7 +872,7 @@ gnupg_chdir (const char *name)
#if GPG_ERROR_VERSION_NUMBER < 0x011c00 /* 1.28 */
return chdir (name);
#else /* Use the improved version from libgpg_error. */
- /* Note that gpgrt_chdir also sets ERRNO in addition to returing a
+ /* Note that gpgrt_chdir also sets ERRNO in addition to returning a
* gpg-error style error code. */
return gpgrt_chdir (name);
#endif
@@ -818,7 +882,8 @@ gnupg_chdir (const char *name)
/* A wrapper around chmod which takes a string for the mode argument.
This makes it easier to handle the mode argument which is not
defined on all systems. The format of the modestring is the same
- as for gnupg_mkdir. */
+ as for gnupg_mkdir with extra feature that a '.' keeps the original
+ mode bit. */
int
gnupg_chmod (const char *name, const char *modestr)
{
@@ -827,7 +892,19 @@ gnupg_chmod (const char *name, const char *modestr)
(void)modestr;
return 0;
#else
- return chmod (name, modestr_to_mode (modestr));
+ mode_t oldmode;
+ if (strchr (modestr, '.'))
+ {
+ /* Get the old mode so that a '.' can copy that bit. */
+ struct stat st;
+
+ if (stat (name, &st))
+ return -1;
+ oldmode = st.st_mode;
+ }
+ else
+ oldmode = 0;
+ return chmod (name, modestr_to_mode (modestr, oldmode));
#endif
}
@@ -1018,10 +1095,38 @@ gnupg_unsetenv (const char *name)
/* Return the current working directory as a malloced string. Return
- NULL and sets ERRNo on error. */
+ NULL and sets ERRNO on error. */
char *
gnupg_getcwd (void)
{
+#if GPGRT_VERSION_NUMBER < 0x012800 /* 1.40 */
+# ifdef HAVE_W32_SYSTEM
+ wchar_t wbuffer[MAX_PATH + sizeof(wchar_t)];
+ DWORD wlen;
+ char *buf, *p;
+
+ wlen = GetCurrentDirectoryW (MAX_PATH, wbuffer);
+ if (!wlen)
+ {
+ gpg_err_set_errno (EINVAL);
+ return NULL;
+
+ }
+ else if (wlen > MAX_PATH)
+ {
+ gpg_err_set_errno (ENAMETOOLONG);
+ return NULL;
+ }
+ buf = wchar_to_utf8 (wbuffer);
+ if (buf)
+ {
+ for (p=buf; *p; p++)
+ if (*p == '\\')
+ *p = '/';
+ }
+ return buf;
+
+# else /*Unix*/
char *buffer;
size_t size = 100;
@@ -1030,18 +1135,306 @@ gnupg_getcwd (void)
buffer = xtrymalloc (size+1);
if (!buffer)
return NULL;
-#ifdef HAVE_W32CE_SYSTEM
- strcpy (buffer, "/"); /* Always "/". */
- return buffer;
-#else
if (getcwd (buffer, size) == buffer)
return buffer;
xfree (buffer);
if (errno != ERANGE)
return NULL;
size *= 2;
+ }
+# endif /*Unix*/
+#else
+ return gpgrt_getcwd ();
+#endif
+}
+
+
+/* A simple wrapper around access. NAME is expected to be utf8
+ * encoded. This function returns an error code and sets ERRNO. */
+gpg_err_code_t
+gnupg_access (const char *name, int mode)
+{
+#if GPGRT_VERSION_NUMBER < 0x012800 /* 1.40 */
+# ifdef HAVE_W32_SYSTEM
+ wchar_t *wfname;
+ gpg_err_code_t ec;
+
+ wfname = utf8_to_wchar (name);
+ if (!wfname)
+ ec = gpg_err_code_from_syserror ();
+ else
+ {
+ ec = _waccess (wfname, mode)? gpg_err_code_from_syserror () : 0;
+ xfree (wfname);
+ }
+ return ec;
+# else
+ return access (name, mode)? gpg_err_code_from_syserror () : 0;
+# endif
+#else /* gpgrt 1.40 or newer. */
+ return gpgrt_access (name, mode);
#endif
+}
+
+
+/* A wrapper around stat to handle Unicode file names under Windows. */
+#ifdef HAVE_STAT
+int
+gnupg_stat (const char *name, struct stat *statbuf)
+{
+# ifdef HAVE_W32_SYSTEM
+ if (any8bitchar (name))
+ {
+ wchar_t *wname;
+ struct _stat32 st32;
+ int ret;
+
+ wname = utf8_to_wchar (name);
+ if (!wname)
+ return -1;
+ ret = _wstat (wname, &st32);
+ xfree (wname);
+ if (!ret)
+ {
+ statbuf->st_dev = st32.st_dev;
+ statbuf->st_ino = st32.st_ino;
+ statbuf->st_mode = st32.st_mode;
+ statbuf->st_nlink = st32.st_nlink;
+ statbuf->st_uid = st32.st_uid;
+ statbuf->st_gid = st32.st_gid;
+ statbuf->st_rdev = st32.st_rdev;
+ statbuf->st_size = st32.st_size;
+ statbuf->st_atime = st32.st_atime;
+ statbuf->st_mtime = st32.st_mtime;
+ statbuf->st_ctime = st32.st_ctime;
+ }
+ return ret;
}
+ else
+ return stat (name, statbuf);
+# else
+ return stat (name, statbuf);
+# endif
+}
+#endif /*HAVE_STAT*/
+
+
+/* Wrapper around fopen for the cases where we have not yet switched
+ * to es_fopen. Note that for convenience the prototype is in util.h */
+FILE *
+gnupg_fopen (const char *fname, const char *mode)
+{
+#ifdef HAVE_W32_SYSTEM
+ if (any8bitchar (fname))
+ {
+ wchar_t *wfname;
+ const wchar_t *wmode;
+ wchar_t *wmodebuf = NULL;
+ FILE *ret;
+
+ wfname = utf8_to_wchar (fname);
+ if (!wfname)
+ return NULL;
+ if (!strcmp (mode, "r"))
+ wmode = L"r";
+ else if (!strcmp (mode, "rb"))
+ wmode = L"rb";
+ else if (!strcmp (mode, "w"))
+ wmode = L"w";
+ else if (!strcmp (mode, "wb"))
+ wmode = L"wb";
+ else
+ {
+ wmodebuf = utf8_to_wchar (mode);
+ if (!wmodebuf)
+ {
+ xfree (wfname);
+ return NULL;
+ }
+ wmode = wmodebuf;
+ }
+ ret = _wfopen (wfname, wmode);
+ xfree (wfname);
+ xfree (wmodebuf);
+ return ret;
+ }
+ else
+ return fopen (fname, mode);
+
+#else /*Unix*/
+ return fopen (fname, mode);
+#endif /*Unix*/
+}
+
+
+
+/* A wrapper around open to handle Unicode file names under Windows. */
+int
+gnupg_open (const char *name, int flags, unsigned int mode)
+{
+#ifdef HAVE_W32_SYSTEM
+ if (any8bitchar (name))
+ {
+ wchar_t *wname;
+ int ret;
+
+ wname = utf8_to_wchar (name);
+ if (!wname)
+ return -1;
+ ret = _wopen (wname, flags, mode);
+ xfree (wname);
+ return ret;
+ }
+ else
+ return open (name, flags, mode);
+#else
+ return open (name, flags, mode);
+#endif
+}
+
+
+/* A wrapper around opendir to handle Unicode file names under
+ * Windows. This assumes the mingw toolchain. */
+gnupg_dir_t
+gnupg_opendir (const char *name)
+{
+#ifdef HAVE_W32_SYSTEM
+ _WDIR *dir;
+ wchar_t *wname;
+#else
+ DIR *dir;
+#endif
+ gnupg_dir_t gdir;
+
+#ifdef HAVE_W32_SYSTEM
+ /* Note: See gpgtar-create for an alternative implementation which
+ * could be used here to avoid a mingw dependency. */
+ wname = utf8_to_wchar (name);
+ if (!wname)
+ return NULL;
+ dir = _wopendir (wname);
+ xfree (wname);
+#else
+ dir = opendir (name);
+#endif
+
+ if (!dir)
+ return NULL;
+
+ gdir = xtrymalloc (sizeof *gdir);
+ if (!gdir)
+ {
+ int save_errno = errno;
+#ifdef HAVE_W32_SYSTEM
+ _wclosedir (dir);
+#else
+ closedir (dir);
+#endif
+ gpg_err_set_errno (save_errno);
+ return NULL;
+ }
+ gdir->dir = dir;
+ gdir->namesize = 0;
+ gdir->dirent.d_name = gdir->name;
+
+ return gdir;
+}
+
+
+gnupg_dirent_t
+gnupg_readdir (gnupg_dir_t gdir)
+{
+#ifdef HAVE_W32_SYSTEM
+ char *namebuffer = NULL;
+ struct _wdirent *de;
+#else
+ struct dirent *de;
+#endif
+ size_t n;
+ gnupg_dirent_t gde;
+ const char *name;
+
+ if (!gdir)
+ {
+ gpg_err_set_errno (EINVAL);
+ return 0;
+ }
+
+#ifdef HAVE_W32_SYSTEM
+ de = _wreaddir (gdir->dir);
+ if (!de)
+ return NULL;
+ namebuffer = wchar_to_utf8 (de->d_name);
+ if (!namebuffer)
+ return NULL;
+ name = namebuffer;
+#else
+ de = readdir (gdir->dir);
+ if (!de)
+ return NULL;
+ name = de->d_name;
+#endif
+
+ gde = &gdir->dirent;
+ n = strlen (name);
+ if (gdir->namesize)
+ {
+ /* Use allocated buffer. */
+ if (n+1 >= gdir->namesize || !gde->d_name)
+ {
+ gdir->namesize = n + 256;
+ xfree (gde->d_name);
+ gde->d_name = xtrymalloc (gdir->namesize);
+ if (!gde->d_name)
+ return NULL; /* ERRNO is already set. */
+ }
+ strcpy (gde->d_name, name);
+ }
+ else if (n+1 >= sizeof (gdir->name))
+ {
+ /* Switch to allocated buffer. */
+ gdir->namesize = n + 256;
+ gde->d_name = xtrymalloc (gdir->namesize);
+ if (!gde->d_name)
+ return NULL; /* ERRNO is already set. */
+ strcpy (gde->d_name, name);
+ }
+ else
+ {
+ /* Use static buffer. */
+ gde->d_name = gdir->name;
+ strcpy (gde->d_name, name);
+ }
+
+#ifdef HAVE_W32_SYSTEM
+ xfree (namebuffer);
+#endif
+
+ return gde;
+}
+
+
+int
+gnupg_closedir (gnupg_dir_t gdir)
+{
+#ifdef HAVE_W32_SYSTEM
+ _WDIR *dir;
+#else
+ DIR *dir;
+#endif
+
+ if (!gdir)
+ return 0;
+ dir = gdir->dir;
+ if (gdir->namesize)
+ xfree (gdir->dirent.d_name);
+ xfree (gdir);
+
+#ifdef HAVE_W32_SYSTEM
+ return _wclosedir (dir);
+#else
+ return closedir (dir);
+#endif
}
diff --git a/common/sysutils.h b/common/sysutils.h
index 009b14b..63c259b 100644
--- a/common/sysutils.h
+++ b/common/sysutils.h
@@ -46,6 +46,22 @@ typedef int gnupg_fd_t;
#define FD2INT(h) (h)
#endif
+#ifdef HAVE_STAT
+# include <sys/stat.h>
+#endif
+
+struct gnupg_dir_s;
+typedef struct gnupg_dir_s *gnupg_dir_t;
+struct gnupg_dirent_s
+{
+ /* We don't have a d_ino because that can't be used on Windows
+ * anyway. D_NAME is a pointer into the gnupg_dir_s which has a
+ * static buffer or allocates sufficient space as needed. This is
+ * only valid after gnupg_readdir. */
+ char *d_name;
+};
+typedef struct gnupg_dirent_s *gnupg_dirent_t;
+
void trap_unaligned (void);
int disable_core_dumps (void);
@@ -72,6 +88,14 @@ char *gnupg_mkdtemp (char *template);
int gnupg_setenv (const char *name, const char *value, int overwrite);
int gnupg_unsetenv (const char *name);
char *gnupg_getcwd (void);
+gpg_err_code_t gnupg_access (const char *name, int mode);
+#ifdef HAVE_STAT
+int gnupg_stat (const char *name, struct stat *statbuf);
+#endif /*HAVE_STAT*/
+int gnupg_open (const char *name, int flags, unsigned int mode);
+gnupg_dir_t gnupg_opendir (const char *name);
+gnupg_dirent_t gnupg_readdir (gnupg_dir_t gdir);
+int gnupg_closedir (gnupg_dir_t gdir);
char *gnupg_get_socket_name (int fd);
int gnupg_fd_valid (int fd);
diff --git a/common/t-dotlock.c b/common/t-dotlock.c
index f7aee09..e2d22f6 100644
--- a/common/t-dotlock.c
+++ b/common/t-dotlock.c
@@ -41,21 +41,165 @@
#include <errno.h>
#include <signal.h>
#include <unistd.h>
+#ifdef HAVE_W32_SYSTEM
+# include "windows.h"
+#endif
#include "dotlock.h"
-#define PGM "t-dotlock"
+#ifdef HAVE_W32_SYSTEM
+#define DIM(v) (sizeof(v)/sizeof((v)[0]))
+
+const char *
+w32_strerror (int ec)
+{
+ static char strerr[256];
+
+ if (ec == -1)
+ ec = (int)GetLastError ();
+#ifdef HAVE_W32CE_SYSTEM
+ /* There is only a wchar_t FormatMessage. It does not make much
+ sense to play the conversion game; we print only the code. */
+ snprintf (strerr, sizeof strerr, "ec=%d", (int)GetLastError ());
+#else
+ FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, ec,
+ MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+ strerr, DIM (strerr)-1, NULL);
+ {
+ /* Strip the CR,LF - we want just the string. */
+ size_t n = strlen (strerr);
+ if (n > 2 && strerr[n-2] == '\r' && strerr[n-1] == '\n' )
+ strerr[n-2] = 0;
+ }
+#endif
+ return strerr;
+}
+
+static wchar_t *
+cp_to_wchar (const char *string, unsigned int codepage)
+{
+ int n;
+ size_t nbytes;
+ wchar_t *result;
+
+ n = MultiByteToWideChar (codepage, 0, string, -1, NULL, 0);
+ if (n < 0)
+ {
+ return NULL;
+ }
+
+ nbytes = (size_t)(n+1) * sizeof(*result);
+ if (nbytes / sizeof(*result) != (n+1))
+ {
+ return NULL;
+ }
+ result = malloc (nbytes);
+ if (!result)
+ return NULL;
+
+ n = MultiByteToWideChar (codepage, 0, string, -1, result, n);
+ if (n < 0)
+ {
+ free (result);
+ result = NULL;
+ }
+ return result;
+}
+
+wchar_t *
+utf8_to_wchar (const char *string)
+{
+ return cp_to_wchar (string, CP_UTF8);
+}
+
+char *
+stpcpy(char *a,const char *b)
+{
+ while( *b )
+ *a++ = *b++;
+ *a = 0;
+
+ return (char*)a;
+}
+
+static char *
+do_strconcat (const char *s1, va_list arg_ptr)
+{
+ const char *argv[48];
+ size_t argc;
+ size_t needed;
+ char *buffer, *p;
+
+ argc = 0;
+ argv[argc++] = s1;
+ needed = strlen (s1);
+ while (((argv[argc] = va_arg (arg_ptr, const char *))))
+ {
+ needed += strlen (argv[argc]);
+ if (argc >= DIM (argv)-1)
+ {
+ return NULL;
+ }
+ argc++;
+ }
+ needed++;
+ buffer = malloc (needed);
+ if (buffer)
+ {
+ for (p = buffer, argc=0; argv[argc]; argc++)
+ p = stpcpy (p, argv[argc]);
+ }
+ return buffer;
+}
+
+/* Concatenate the string S1 with all the following strings up to a
+ NULL. Returns a malloced buffer with the new string or NULL on a
+ malloc error or if too many arguments are given. */
+char *
+strconcat (const char *s1, ...)
+{
+ va_list arg_ptr;
+ char *result;
+
+ if (!s1)
+ result = calloc (1, 1);
+ else
+ {
+ va_start (arg_ptr, s1);
+ result = do_strconcat (s1, arg_ptr);
+ va_end (arg_ptr);
+ }
+ return result;
+}
+#endif /*HAVE_W32_SYSTEM*/
-static volatile int ctrl_c_pending;
+#include "dotlock.c"
+
+#define PGM "t-dotlock"
+#ifndef HAVE_W32_SYSTEM
+static volatile int ctrl_c_pending_flag;
static void
control_c_handler (int signo)
{
(void)signo;
- ctrl_c_pending = 1;
+ ctrl_c_pending_flag = 1;
}
+#endif
+
+
+static int
+ctrl_c_pending (void)
+{
+#if HAVE_W32_SYSTEM
+ static int count;
+ return (++count > 9);
+#else
+ return ctrl_c_pending_flag;
+#endif
+}
static void
@@ -95,7 +239,7 @@ lock_and_unlock (const char *fname)
die ("error creating lock file for '%s': %s", fname, strerror (errno));
inf ("lock created");
- while (!ctrl_c_pending)
+ while (!ctrl_c_pending ())
{
if (dotlock_take (h, -1))
die ("error taking lock");
@@ -119,8 +263,15 @@ main (int argc, char **argv)
if (argc > 1)
fname = argv[1];
else
- fname = "t-dotlock.tmp";
+ {
+#ifdef HAVE_W32_SYSTEM
+ fname = "t-dotâ’¶lock.tmp";
+#else
+ fname = "t-dotlock.tmp";
+#endif
+ }
+#ifndef HAVE_W32_SYSTEM
{
struct sigaction nact;
@@ -128,6 +279,7 @@ main (int argc, char **argv)
nact.sa_flags = 0;
sigaction (SIGINT, &nact, NULL);
}
+#endif
dotlock_create (NULL, 0); /* Initialize (optional). */
@@ -140,6 +292,6 @@ main (int argc, char **argv)
/*
Local Variables:
-compile-command: "cc -Wall -O2 -D_FILE_OFFSET_BITS=64 -o t-dotlock t-dotlock.c dotlock.c"
+compile-command: "cc -Wall -O2 -D_FILE_OFFSET_BITS=64 -o t-dotlock t-dotlock.c"
End:
*/
diff --git a/common/t-exectool.c b/common/t-exectool.c
index 9cea2d1..e1fffdc 100644
--- a/common/t-exectool.c
+++ b/common/t-exectool.c
@@ -45,6 +45,7 @@ test_executing_true (void)
char *result;
size_t len;
+ /* Fixme: We should use gpgrt_access here. */
if (access (pgmname, X_OK))
{
if (access (alt_pgmname, X_OK))
diff --git a/common/util.h b/common/util.h
index fd8a7dc..75cdee0 100644
--- a/common/util.h
+++ b/common/util.h
@@ -44,26 +44,6 @@
# define GPG_ERR_BAD_AUTH 315
#endif
-#if GPG_ERROR_VERSION_NUMBER < 0x011b00 /* 1.27 */
-# define GPG_ERR_WRONG_NAME 313
-#endif
-
-#if GPG_ERROR_VERSION_NUMBER < 0x011a00 /* 1.26 */
-# define GPG_ERR_UNKNOWN_FLAG 309
-# define GPG_ERR_INV_ORDER 310
-# define GPG_ERR_ALREADY_FETCHED 311
-# define GPG_ERR_TRY_LATER 312
-# define GPG_ERR_SYSTEM_BUG 666
-# define GPG_ERR_DNS_UNKNOWN 711
-# define GPG_ERR_DNS_SECTION 712
-# define GPG_ERR_DNS_ADDRESS 713
-# define GPG_ERR_DNS_NO_QUERY 714
-# define GPG_ERR_DNS_NO_ANSWER 715
-# define GPG_ERR_DNS_CLOSED 716
-# define GPG_ERR_DNS_VERIFY 717
-# define GPG_ERR_DNS_TIMEOUT 718
-#endif
-
#ifndef EXTERN_UNLESS_MAIN_MODULE
# if !defined (INCLUDED_BY_MAIN_MODULE)
# define EXTERN_UNLESS_MAIN_MODULE extern
@@ -162,7 +142,6 @@ ssize_t read_line (FILE *fp,
char **addr_of_buffer, size_t *length_of_buffer,
size_t *max_length);
-
/*-- b64enc.c and b64dec.c --*/
struct b64state
{
@@ -262,6 +241,7 @@ const char *openpgp_is_curve_supported (const char *name,
const char *standard_homedir (void);
const char *default_homedir (void);
void gnupg_set_homedir (const char *newdir);
+void gnupg_maybe_make_homedir (const char *fname, int quiet);
const char *gnupg_homedir (void);
int gnupg_default_homedir_p (void);
const char *gnupg_daemon_rootdir (void);
@@ -306,6 +286,9 @@ char *gnupg_get_help_string (const char *key, int only_current_locale);
/*-- localename.c --*/
const char *gnupg_messages_locale_name (void);
+/*-- sysutils.c --*/
+FILE *gnupg_fopen (const char *fname, const char *mode);
+
/*-- miscellaneous.c --*/
/* This function is called at startup to tell libgcrypt to use our own
diff --git a/common/w32info-rc.h.in b/common/w32info-rc.h.in
index ea9d463..59c0456 100644
--- a/common/w32info-rc.h.in
+++ b/common/w32info-rc.h.in
@@ -17,7 +17,7 @@ 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.\0"
-#define W32INFO_COMPANYNAME "The GnuPG Project\0"
+#define W32INFO_COMPANYNAME "g10 Code GmbH\0"
#define W32INFO_VI_FILEVERSION @BUILD_FILEVERSION@
#define W32INFO_VI_PRODUCTVERSION @BUILD_FILEVERSION@
@@ -29,4 +29,4 @@ built on @BUILD_HOSTNAME@ at @BUILD_TIMESTAMP@\0"
#define W32INFO_PRODUCTVERSION "@VERSION@\0"
#define W32INFO_LEGALCOPYRIGHT "Copyright \xa9 \
-2019 Free Software Foundation, Inc.\0"
+2020 g10 Code GmbH\0"
diff --git a/configure.ac b/configure.ac
index 64cb8c6..2e5c284 100644
--- a/configure.ac
+++ b/configure.ac
@@ -29,7 +29,7 @@ min_automake_version="1.14"
m4_define([mym4_package],[gnupg])
m4_define([mym4_major], [2])
m4_define([mym4_minor], [2])
-m4_define([mym4_micro], [23])
+m4_define([mym4_micro], [24])
# 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
@@ -54,16 +54,16 @@ AC_INIT([mym4_package],[mym4_version], [https://bugs.gnupg.org])
# build-aux/speedo.mk and Makefile.am
AC_DEFINE_UNQUOTED(GNUPG_SWDB_TAG, "gnupg22", [swdb tag for this branch])
-NEED_GPG_ERROR_VERSION=1.25
+NEED_GPG_ERROR_VERSION=1.27
NEED_LIBGCRYPT_API=1
-NEED_LIBGCRYPT_VERSION=1.7.0
+NEED_LIBGCRYPT_VERSION=1.8.0
NEED_LIBASSUAN_API=2
NEED_LIBASSUAN_VERSION=2.5.0
NEED_KSBA_API=1
-NEED_KSBA_VERSION=1.3.4
+NEED_KSBA_VERSION=1.3.5
NEED_NTBTLS_API=1
NEED_NTBTLS_VERSION=0.1.0
@@ -1224,7 +1224,7 @@ AC_ARG_WITH(mailprog,
[use "NAME -t" for mail transport]),
,with_mailprog=yes)
if test x"$with_mailprog" = xyes ; then
- AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib)
+ AC_PATH_PROG(SENDMAIL,sendmail,,"$PATH":/usr/sbin:/usr/libexec:/usr/lib)
elif test x"$with_mailprog" != xno ; then
AC_MSG_CHECKING([for a mail transport program])
AC_SUBST(SENDMAIL,$with_mailprog)
@@ -2008,7 +2008,17 @@ tests/migrations/Makefile
tests/gpgsm/Makefile
tests/gpgme/Makefile
tests/pkits/Makefile
+agent/gpg-agent.w32-manifest
g10/gpg.w32-manifest
+g10/gpgv.w32-manifest
+sm/gpgsm.w32-manifest
+scd/scdaemon.w32-manifest
+dirmngr/dirmngr.w32-manifest
+tools/gpgconf.w32-manifest
+tools/gpgtar.w32-manifest
+tools/gpg-connect-agent.w32-manifest
+tools/gpg-check-pattern.w32-manifest
+tools/gpg-wks-client.w32-manifest
])
diff --git a/dirmngr/Makefile.am b/dirmngr/Makefile.am
index 208a813..00d3c42 100644
--- a/dirmngr/Makefile.am
+++ b/dirmngr/Makefile.am
@@ -21,7 +21,10 @@
## Process this file with automake to produce Makefile.in
-EXTRA_DIST = OAUTHORS ONEWS ChangeLog-2011 tls-ca.pem
+EXTRA_DIST = OAUTHORS ONEWS ChangeLog-2011 tls-ca.pem \
+ dirmngr-w32info.rc dirmngr.w32-manifest.in
+
+
dist_pkgdata_DATA = sks-keyservers.netCA.pem
bin_PROGRAMS = dirmngr dirmngr-client
@@ -86,11 +89,19 @@ else
ldaplibs =
endif
+if HAVE_W32_SYSTEM
+dirmngr_robjs = $(resource_objs) dirmngr-w32info.o
+dirmngr-w32info.o : dirmngr.w32-manifest
+else
+dirmngr_robjs =
+endif
+
dirmngr_LDADD = $(libcommonpth) \
$(DNSLIBS) $(LIBASSUAN_LIBS) \
$(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(NPTH_LIBS) \
- $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) $(NETLIBS)
+ $(NTBTLS_LIBS) $(LIBGNUTLS_LIBS) $(LIBINTL) $(LIBICONV) $(NETLIBS) \
+ $(dirmngr_robj)
if USE_LDAP
dirmngr_LDADD += $(ldaplibs)
endif
diff --git a/dirmngr/certcache.c b/dirmngr/certcache.c
index 5486997..9ca6069 100644
--- a/dirmngr/certcache.c
+++ b/dirmngr/certcache.c
@@ -364,8 +364,8 @@ static gpg_error_t
load_certs_from_dir (const char *dirname, unsigned int trustclass)
{
gpg_error_t err;
- DIR *dir;
- struct dirent *ep;
+ gnupg_dir_t dir;
+ gnupg_dirent_t ep;
char *p;
size_t n;
estream_t fp;
@@ -373,13 +373,13 @@ load_certs_from_dir (const char *dirname, unsigned int trustclass)
ksba_cert_t cert;
char *fname = NULL;
- dir = opendir (dirname);
+ dir = gnupg_opendir (dirname);
if (!dir)
{
return 0; /* We do not consider this a severe error. */
}
- while ( (ep=readdir (dir)) )
+ while ( (ep = gnupg_readdir (dir)) )
{
p = ep->d_name;
if (*p == '.' || !*p)
@@ -447,7 +447,7 @@ load_certs_from_dir (const char *dirname, unsigned int trustclass)
}
xfree (fname);
- closedir (dir);
+ gnupg_closedir (dir);
return 0;
}
@@ -685,7 +685,7 @@ load_certs_from_system (void)
gpg_error_t err = 0;
for (idx=0; idx < DIM (table); idx++)
- if (!access (table[idx].name, F_OK))
+ if (!gnupg_access (table[idx].name, F_OK))
{
/* Take the first available bundle. */
err = load_certs_from_file (table[idx].name, CERTTRUST_CLASS_SYSTEM, 0);
@@ -721,6 +721,9 @@ cert_cache_init (strlist_t hkp_cacerts)
load_certs_from_dir (fname, 0);
xfree (fname);
+ /* Put the special pool certificate into our store. This is
+ * currently only used with ntbtls. For GnuTLS http_session_new
+ * unfortunately loads that certificate directly from the file. */
fname = make_filename_try (gnupg_datadir (),
"sks-keyservers.netCA.pem", NULL);
if (fname)
diff --git a/dirmngr/crlcache.c b/dirmngr/crlcache.c
index cd35335..eee4b72 100644
--- a/dirmngr/crlcache.c
+++ b/dirmngr/crlcache.c
@@ -101,10 +101,6 @@
#ifndef HAVE_W32_SYSTEM
#include <sys/utsname.h>
#endif
-#ifdef MKDIR_TAKES_ONE_ARG
-#undef mkdir
-#define mkdir(a,b) mkdir(a)
-#endif
#include "dirmngr.h"
#include "validate.h"
@@ -206,15 +202,15 @@ get_current_cache (void)
static int
create_directory_if_needed (const char *name)
{
- DIR *dir;
+ gnupg_dir_t dir;
char *fname;
fname = make_filename (opt.homedir_cache, name, NULL);
- dir = opendir (fname);
+ dir = gnupg_opendir (fname);
if (!dir)
{
log_info (_("creating directory '%s'\n"), fname);
- if (mkdir (fname, S_IRUSR|S_IWUSR|S_IXUSR) )
+ if (gnupg_mkdir (fname, "-rwx"))
{
int save_errno = errno;
log_error (_("error creating directory '%s': %s\n"),
@@ -225,7 +221,7 @@ create_directory_if_needed (const char *name)
}
}
else
- closedir (dir);
+ gnupg_closedir (dir);
xfree (fname);
return 0;
}
@@ -237,8 +233,8 @@ static int
cleanup_cache_dir (int force)
{
char *dname = make_filename (opt.homedir_cache, DBDIR_D, NULL);
- DIR *dir;
- struct dirent *de;
+ gnupg_dir_t dir;
+ gnupg_dirent_t de;
int problem = 0;
if (!force)
@@ -251,7 +247,7 @@ cleanup_cache_dir (int force)
}
}
- dir = opendir (dname);
+ dir = gnupg_opendir (dname);
if (!dir)
{
log_error (_("error reading directory '%s': %s\n"),
@@ -260,7 +256,7 @@ cleanup_cache_dir (int force)
return -1;
}
- while ((de = readdir (dir)))
+ while ((de = gnupg_readdir (dir)))
{
if (strcmp (de->d_name, "." ) && strcmp (de->d_name, ".."))
{
@@ -271,7 +267,7 @@ cleanup_cache_dir (int force)
if (force)
okay = 1;
else
- okay = (!stat (cdbname, &sbuf) && S_ISREG (sbuf.st_mode));
+ okay = (!gnupg_stat (cdbname, &sbuf) && S_ISREG (sbuf.st_mode));
if (okay)
{
@@ -289,7 +285,7 @@ cleanup_cache_dir (int force)
}
}
xfree (dname);
- closedir (dir);
+ gnupg_closedir (dir);
return problem;
}
@@ -1142,7 +1138,7 @@ lock_db_file (crl_cache_t cache, crl_cache_entry_t entry)
xfree (fname);
return NULL;
}
- fd = open (fname, O_RDONLY | O_BINARY);
+ fd = gnupg_open (fname, O_RDONLY | O_BINARY, 0);
if (fd == -1)
{
log_error (_("error opening cache file '%s': %s\n"),
@@ -2226,7 +2222,7 @@ crl_cache_insert (ctrl_t ctrl, const char *url, ksba_reader_t reader)
}
}
- fd_cdb = open (fname, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644);
+ fd_cdb = gnupg_open (fname, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644);
if (fd_cdb == -1)
{
err = gpg_error_from_errno (errno);
diff --git a/dirmngr/crlfetch.c b/dirmngr/crlfetch.c
index 7da3d8b..c8091f6 100644
--- a/dirmngr/crlfetch.c
+++ b/dirmngr/crlfetch.c
@@ -302,7 +302,7 @@ ca_cert_fetch (ctrl_t ctrl, cert_fetch_context_t *context, const char *dn)
return gpg_error (GPG_ERR_NOT_SUPPORTED);
}
#if USE_LDAP
- return start_default_fetch_ldap (ctrl, context, dn, "cACertificate");
+ return start_cacert_fetch_ldap (ctrl, context, dn);
#else
(void)ctrl;
(void)context;
diff --git a/dirmngr/crlfetch.h b/dirmngr/crlfetch.h
index cf4a3c0..3822adb 100644
--- a/dirmngr/crlfetch.h
+++ b/dirmngr/crlfetch.h
@@ -69,9 +69,9 @@ gpg_error_t attr_fetch_ldap (ctrl_t ctrl,
ksba_reader_t *reader);
-gpg_error_t start_default_fetch_ldap (ctrl_t ctrl,
- cert_fetch_context_t *context,
- const char *dn, const char *attr);
+gpg_error_t start_cacert_fetch_ldap (ctrl_t ctrl,
+ cert_fetch_context_t *context,
+ const char *dn);
gpg_error_t start_cert_fetch_ldap( ctrl_t ctrl,
cert_fetch_context_t *context,
strlist_t patterns,
diff --git a/dirmngr/dirmngr-client.c b/dirmngr/dirmngr-client.c
index 53b405e..0d714d4 100644
--- a/dirmngr/dirmngr-client.c
+++ b/dirmngr/dirmngr-client.c
@@ -468,7 +468,7 @@ read_pem_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen)
init_asctobin ();
- fp = fname? fopen (fname, "r") : stdin;
+ fp = fname? gnupg_fopen (fname, "r") : stdin;
if (!fp)
return gpg_error_from_errno (errno);
@@ -629,7 +629,7 @@ read_certificate (const char *fname, unsigned char **rbuf, size_t *rbuflen)
return 0;
}
- fp = fname? fopen (fname, "rb") : stdin;
+ fp = fname? gnupg_fopen (fname, "rb") : stdin;
if (!fp)
return gpg_error_from_errno (errno);
diff --git a/dirmngr/dirmngr-w32info.rc b/dirmngr/dirmngr-w32info.rc
new file mode 100644
index 0000000..c8101b3
--- /dev/null
+++ b/dirmngr/dirmngr-w32info.rc
@@ -0,0 +1,52 @@
+/* dirmngr-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s network daemon\0"
+ VALUE "InternalName", "dirmngr\0"
+ VALUE "OriginalFilename", "dirmngr.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "dirmngr.w32-manifest"
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 3beaab8..e497183 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -100,6 +100,7 @@ enum cmd_and_opt_values {
aFlush,
aGPGConfList,
aGPGConfTest,
+ aGPGConfVersions,
oOptions,
oDebug,
@@ -174,6 +175,7 @@ static ARGPARSE_OPTS opts[] = {
ARGPARSE_c (aFlush, "flush", N_("flush the cache")),
ARGPARSE_c (aGPGConfList, "gpgconf-list", "@"),
ARGPARSE_c (aGPGConfTest, "gpgconf-test", "@"),
+ ARGPARSE_c (aGPGConfVersions, "gpgconf-versions", "@"),
ARGPARSE_group (301, N_("@\nOptions:\n ")),
@@ -378,6 +380,8 @@ static ldap_server_t parse_ldapserver_file (const char* filename, int ienoent);
static fingerprint_list_t parse_ocsp_signer (const char *string);
static void netactivity_action (void);
static void handle_connections (assuan_fd_t listen_fd);
+static void gpgconf_versions (void);
+
/* NPth wrapper function definitions. */
ASSUAN_SYSTEM_NPTH_IMPL;
@@ -943,7 +947,7 @@ main (int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -982,6 +986,7 @@ main (int argc, char **argv)
case aFetchCRL:
case aGPGConfList:
case aGPGConfTest:
+ case aGPGConfVersions:
cmd = pargs.r_opt;
break;
@@ -1073,7 +1078,7 @@ main (int argc, char **argv)
log_info (_("Note: '%s' is not considered an option\n"), argv[i]);
}
- if (!access ("/etc/"DIRMNGR_NAME, F_OK)
+ if (!gnupg_access ("/etc/"DIRMNGR_NAME, F_OK)
&& !strncmp (gnupg_homedir (), "/etc/", 5))
log_info
("NOTE: DirMngr is now a proper part of %s. The configuration and"
@@ -1272,7 +1277,7 @@ main (int argc, char **argv)
{
log_error (_("error binding socket to '%s': %s\n"),
serv_addr.sun_path,
- gpg_strerror (gpg_error_from_errno (errno)));
+ gpg_strerror (gpg_error_from_syserror ()));
assuan_sock_close (fd);
dirmngr_exit (1);
}
@@ -1543,6 +1548,9 @@ main (int argc, char **argv)
es_printf ("resolver-timeout:%lu:%u\n",
flags | GC_OPT_FLAG_DEFAULT, 0);
}
+ else if (cmd == aGPGConfVersions)
+ gpgconf_versions ();
+
cleanup ();
return !!rc;
}
@@ -1832,7 +1840,7 @@ reread_configuration (void)
if (!opt.config_filename)
return; /* No config file. */
- fp = fopen (opt.config_filename, "r");
+ fp = gnupg_fopen (opt.config_filename, "r");
if (!fp)
{
log_error (_("option file '%s': %s\n"),
@@ -2036,7 +2044,7 @@ handle_tick (void)
/* Check whether the homedir is still available. */
if (!shutdown_pending
- && stat (gnupg_homedir (), &statbuf) && errno == ENOENT)
+ && gnupg_stat (gnupg_homedir (), &statbuf) && errno == ENOENT)
{
shutdown_pending = 1;
log_info ("homedir has been removed - shutting down\n");
@@ -2347,3 +2355,61 @@ dirmngr_get_current_socket_name (void)
else
return dirmngr_socket_name ();
}
+
+
+
+/* Parse the revision part from the extended version blurb. */
+static const char *
+get_revision_from_blurb (const char *blurb, int *r_len)
+{
+ const char *s = blurb? blurb : "";
+ int n;
+
+ for (; *s; s++)
+ if (*s == '\n' && s[1] == '(')
+ break;
+ if (s)
+ {
+ s += 2;
+ for (n=0; s[n] && s[n] != ' '; n++)
+ ;
+ }
+ else
+ {
+ s = "?";
+ n = 1;
+ }
+ *r_len = n;
+ return s;
+}
+
+
+/* Print versions of dirmngr and used libraries. This is used by
+ * "gpgconf --show-versions" so that there is no need to link gpgconf
+ * against all these libraries. This is an internal API and should
+ * not be relied upon. */
+static void
+gpgconf_versions (void)
+{
+ const char *s;
+ int n;
+
+ /* Unfortunately Npth has no way to get the version. */
+
+ s = get_revision_from_blurb (assuan_check_version ("\x01\x01"), &n);
+ es_fprintf (es_stdout, "* Libassuan %s (%.*s)\n\n",
+ assuan_check_version (NULL), n, s);
+
+ es_fprintf (es_stdout, "* KSBA %s \n\n",
+ ksba_check_version (NULL));
+
+#ifdef HTTP_USE_NTBTLS
+ s = get_revision_from_blurb (ntbtls_check_version ("\x01\x01"), &n);
+ es_fprintf (es_stdout, "* NTBTLS %s (%.*s)\n\n",
+ ntbtls_check_version (NULL), n, s);
+#elif HTTP_USE_GNUTLS
+ es_fprintf (es_stdout, "* GNUTLS %s\n\n",
+ gnutls_check_version (NULL));
+#endif
+
+}
diff --git a/dirmngr/dirmngr.w32-manifest.in b/dirmngr/dirmngr.w32-manifest.in
new file mode 100644
index 0000000..719ca97
--- /dev/null
+++ b/dirmngr/dirmngr.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Network daemon)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.dirmngr"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/dirmngr/http-ntbtls.c b/dirmngr/http-ntbtls.c
index ed4cdd4..58388b2 100644
--- a/dirmngr/http-ntbtls.c
+++ b/dirmngr/http-ntbtls.c
@@ -77,8 +77,10 @@ gnupg_http_tls_verify_cb (void *opaque,
validate_flags = VALIDATE_FLAG_TLS;
- /* If we are using the standard hkps:// pool use the dedicated
- * root certificate. */
+ /* If we are using the standard hkps:// pool use the dedicated root
+ * certificate. Note that this differes from the GnuTLS
+ * implementation which uses this special certificate only if no
+ * other certificates are configured. */
hostname = ntbtls_get_hostname (tls);
if (hostname
&& !ascii_strcasecmp (hostname, get_default_keyserver (1)))
diff --git a/dirmngr/http.c b/dirmngr/http.c
index 0af0cc3..5e3f17c 100644
--- a/dirmngr/http.c
+++ b/dirmngr/http.c
@@ -579,6 +579,7 @@ http_register_tls_callback (gpg_error_t (*cb)(http_t, http_session_t, int))
void
http_register_tls_ca (const char *fname)
{
+ gpg_err_code_t ec;
strlist_t sl;
if (!fname)
@@ -590,9 +591,8 @@ http_register_tls_ca (const char *fname)
{
/* Warn if we can't access right now, but register it anyway in
case it becomes accessible later */
- if (access (fname, F_OK))
- log_info (_("can't access '%s': %s\n"), fname,
- gpg_strerror (gpg_error_from_syserror()));
+ if ((ec = gnupg_access (fname, F_OK)))
+ log_info (_("can't access '%s': %s\n"), fname, gpg_strerror (ec));
sl = add_to_strlist (&tls_ca_certlist, fname);
if (*sl->d && !strcmp (sl->d + strlen (sl->d) - 4, ".pem"))
sl->flags = 1;
@@ -608,6 +608,7 @@ http_register_tls_ca (const char *fname)
void
http_register_cfg_ca (const char *fname)
{
+ gpg_err_code_t ec;
strlist_t sl;
if (!fname)
@@ -619,9 +620,8 @@ http_register_cfg_ca (const char *fname)
{
/* Warn if we can't access right now, but register it anyway in
case it becomes accessible later */
- if (access (fname, F_OK))
- log_info (_("can't access '%s': %s\n"), fname,
- gpg_strerror (gpg_error_from_syserror()));
+ if ((ec = gnupg_access (fname, F_OK)))
+ log_info (_("can't access '%s': %s\n"), fname, gpg_strerror (ec));
sl = add_to_strlist (&cfg_ca_certlist, fname);
if (*sl->d && !strcmp (sl->d + strlen (sl->d) - 4, ".pem"))
sl->flags = 1;
@@ -770,10 +770,9 @@ http_session_new (http_session_t *r_session,
&& !ascii_strcasecmp (intended_hostname,
get_default_keyserver (1)));
- /* If the user has not specified a CA list, and they are looking
- * for the hkps pool from sks-keyservers.net, then default to
- * Kristian's certificate authority: */
- if (!tls_ca_certlist && is_hkps_pool)
+ /* If we are looking for the hkps pool from sks-keyservers.net,
+ * then forcefully use its dedicated certificate authority. */
+ if (is_hkps_pool)
{
char *pemname = make_filename_try (gnupg_datadir (),
"sks-keyservers.netCA.pem", NULL);
@@ -793,11 +792,12 @@ http_session_new (http_session_t *r_session,
xfree (pemname);
}
- add_system_cas = 0;
+ if (is_hkps_pool)
+ add_system_cas = 0;
}
/* Add configured certificates to the session. */
- if ((flags & HTTP_FLAG_TRUST_DEF))
+ if ((flags & HTTP_FLAG_TRUST_DEF) && !is_hkps_pool)
{
for (sl = tls_ca_certlist; sl; sl = sl->next)
{
@@ -808,7 +808,10 @@ http_session_new (http_session_t *r_session,
log_info ("setting CA from file '%s' failed: %s\n",
sl->d, gnutls_strerror (rc));
}
- if (!tls_ca_certlist && !is_hkps_pool)
+
+ /* If HKP trust is requested and there are no HKP certificates
+ * configured, also try the standard system certificates. */
+ if (!tls_ca_certlist)
add_system_cas = 1;
}
@@ -830,7 +833,7 @@ http_session_new (http_session_t *r_session,
}
/* Add other configured certificates to the session. */
- if ((flags & HTTP_FLAG_TRUST_CFG))
+ if ((flags & HTTP_FLAG_TRUST_CFG) && !is_hkps_pool)
{
for (sl = cfg_ca_certlist; sl; sl = sl->next)
{
diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c
index fef752c..14859c7 100644
--- a/dirmngr/ks-engine-hkp.c
+++ b/dirmngr/ks-engine-hkp.c
@@ -476,7 +476,20 @@ map_host (ctrl_t ctrl, const char *name, const char *srvtag, int force_reselect,
if (!name || !*name)
{
*r_host = xtrystrdup ("localhost");
- return *r_host? 0 : gpg_error_from_syserror ();
+ if (!*r_host)
+ return gpg_error_from_syserror ();
+ if (r_httphost)
+ {
+ *r_httphost = xtrystrdup (*r_host);
+ if (!*r_httphost)
+ {
+ err = gpg_error_from_syserror ();
+ xfree (*r_host);
+ *r_host = NULL;
+ return err;
+ }
+ }
+ return 0;
}
/* See whether the host is in our table. */
@@ -648,6 +661,12 @@ map_host (ctrl_t ctrl, const char *name, const char *srvtag, int force_reselect,
}
free_dns_addrinfo (aibuf);
}
+ else if (r_httphost)
+ {
+ *r_httphost = xtrystrdup (hi->name);
+ if (!*r_httphost)
+ return gpg_error_from_syserror ();
+ }
if (hi->dead)
{
diff --git a/dirmngr/ldap.c b/dirmngr/ldap.c
index cb3c0b7..e016f64 100644
--- a/dirmngr/ldap.c
+++ b/dirmngr/ldap.c
@@ -463,18 +463,19 @@ make_url (char **url, const char *dn, const char *filter)
}
-/* Prepare an LDAP query to return the attribute ATTR for the DN. All
- configured default servers are queried until one responds. This
- function returns an error code or 0 and a CONTEXT on success. */
+/* Prepare an LDAP query to return the cACertificate attribute for DN.
+ * All configured default servers are queried until one responds.
+ * This function returns an error code or 0 and stored a newly
+ * allocated contect object at CONTEXT on success. */
gpg_error_t
-start_default_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context,
- const char *dn, const char *attr)
+start_cacert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *r_context,
+ const char *dn)
{
gpg_error_t err;
struct ldapserver_iter iter;
- *context = xtrycalloc (1, sizeof **context);
- if (!*context)
+ *r_context = xtrycalloc (1, sizeof **r_context);
+ if (!*r_context)
return gpg_error_from_errno (errno);
/* FIXME; we might want to look at the Base SN to try matching
@@ -488,30 +489,30 @@ start_default_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context,
err = run_ldap_wrapper (ctrl,
0,
- 1,
+ 1, /* --multi (record format) */
opt.ldap_proxy,
server->host, server->port,
server->user, server->pass,
- dn, "objectClass=*", attr, NULL,
- &(*context)->reader);
+ dn, "objectClass=*", "cACertificate", NULL,
+ &(*r_context)->reader);
if (!err)
break; /* Probably found a result. */
}
if (err)
{
- xfree (*context);
- *context = NULL;
+ xfree (*r_context);
+ *r_context = NULL;
}
return err;
}
-/* Prepare an LDAP query to return certificates matching PATTERNS using
- the SERVER. This function returns an error code or 0 and a CONTEXT
- on success. */
+/* Prepare an LDAP query to return certificates matching PATTERNS
+ * using the SERVER. This function returns an error code or 0 and
+ * stores a newly allocated object at R_CONTEXT on success. */
gpg_error_t
-start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context,
+start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *r_context,
strlist_t patterns, const ldap_server_t server)
{
gpg_error_t err;
@@ -527,7 +528,7 @@ start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context,
char portbuf[30], timeoutbuf[30];
- *context = NULL;
+ *r_context = NULL;
if (opt.ldap_proxy && !(proxy = xtrystrdup (opt.ldap_proxy)))
{
@@ -639,19 +640,19 @@ start_cert_fetch_ldap (ctrl_t ctrl, cert_fetch_context_t *context,
}
argv[argc] = NULL;
- *context = xtrycalloc (1, sizeof **context);
- if (!*context)
+ *r_context = xtrycalloc (1, sizeof **r_context);
+ if (!*r_context)
{
err = gpg_error_from_errno (errno);
goto leave;
}
- err = ldap_wrapper (ctrl, &(*context)->reader, (const char**)argv);
+ err = ldap_wrapper (ctrl, &(*r_context)->reader, (const char**)argv);
if (err)
{
- xfree (*context);
- *context = NULL;
+ xfree (*r_context);
+ *r_context = NULL;
}
leave:
@@ -711,8 +712,7 @@ fetch_next_cert_ldap (cert_fetch_context_t context,
n = buf32_to_ulong (hdr+1);
if (*hdr == 'V' && okay)
{
-#if 0 /* That code is not yet ready. */
-
+#if 0 /* That code to extra a cert from a CMS object is not yet ready. */
if (is_cms)
{
/* The certificate needs to be parsed from CMS data. */
@@ -759,7 +759,7 @@ fetch_next_cert_ldap (cert_fetch_context_t context,
any = 1;
}
else
-#endif
+#endif /* End unfinished code to extract from a CMS object. */
{
*value = xtrymalloc (n);
if (!*value)
diff --git a/dirmngr/server.c b/dirmngr/server.c
index 780722d..4078633 100644
--- a/dirmngr/server.c
+++ b/dirmngr/server.c
@@ -2718,7 +2718,7 @@ cmd_killdirmngr (assuan_context_t ctx, char *line)
ctrl->server_local->stopme = 1;
assuan_set_flag (ctx, ASSUAN_FORCE_CLOSE, 1);
- return gpg_error (GPG_ERR_EOF);
+ return 0;
}
diff --git a/doc/DETAILS b/doc/DETAILS
index edd0a94..a02ba35 100644
--- a/doc/DETAILS
+++ b/doc/DETAILS
@@ -1103,6 +1103,7 @@ pkd:0:1024:B665B1435F4C2 .... FF26ABB:
- learncard :: Send by the agent and gpgsm while learing
the data of a smartcard.
- card_busy :: A smartcard is still working
+ - scd_locked :: Waiting for other clients to unlock the scdaemon
When <what> refers to a file path, it may be truncated.
diff --git a/doc/Makefile.am b/doc/Makefile.am
index ca13bcf..2b882c3 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -22,7 +22,8 @@ AM_CPPFLAGS =
include $(top_srcdir)/am/cmacros.am
examples = examples/README examples/scd-event examples/trustlist.txt \
- examples/vsnfd.prf examples/debug.prf \
+ examples/VS-NfD.prf examples/Automatic.prf \
+ examples/debug.prf \
examples/systemd-user/README \
examples/systemd-user/dirmngr.service \
examples/systemd-user/dirmngr.socket \
@@ -182,8 +183,8 @@ defsincdate: $(gnupg_TEXINFOS)
if test -e $(top_srcdir)/.git; then \
(cd $(srcdir) && git log -1 --format='%ct' \
-- $(gnupg_TEXINFOS) 2>/dev/null) >>defsincdate; \
- elif test x"$SOURCE_DATE_EPOCH" != x; then \
- echo "$SOURCE_DATE_EPOCH" >>defsincdate ; \
+ elif test x"$$SOURCE_DATE_EPOCH" != x; then \
+ echo "$$SOURCE_DATE_EPOCH" >>defsincdate ; \
fi
defs.inc : defsincdate Makefile mkdefsinc
diff --git a/doc/examples/Automatic.prf b/doc/examples/Automatic.prf
new file mode 100644
index 0000000..41f9bea
--- /dev/null
+++ b/doc/examples/Automatic.prf
@@ -0,0 +1,15 @@
+# Automatic.prf - Configure options for a more automatic mode -*- conf -*-
+#
+# The options for each tool are configured in a section ("[TOOL]");
+# see the respective man page for a description of these options and
+# the gpgconf manpage for a description of this file's syntax.
+
+[gpg]
+auto-key-locate local,wkd,dane
+auto-key-retrieve
+trust-model tofu+pgp$\r$\n'
+
+[gpg-agent]
+default-cache-ttl 900
+max-cache-ttl 3600
+min-passphrase-nonalpha 0
diff --git a/doc/examples/vsnfd.prf b/doc/examples/VS-NfD.prf
index 0c0ddd8..edb9e01 100644
--- a/doc/examples/vsnfd.prf
+++ b/doc/examples/VS-NfD.prf
@@ -1,4 +1,4 @@
-# vsnfd.prf - Configure options for the VS-NfD mode -*- conf -*-
+# VS-NfD.prf - Configure options for the VS-NfD mode -*- conf -*-
#
# The options for each tool are configured in a section ("[TOOL]");
# see the respective man page for a description of these options and
@@ -12,7 +12,6 @@ compliance de-vs
enable-crl-checks
[gpg-agent]
-enable-extended-key-format
default-cache-ttl 900
max-cache-ttl 3600
no-allow-mark-trusted
diff --git a/doc/gpg.texi b/doc/gpg.texi
index 526a758..f611813 100644
--- a/doc/gpg.texi
+++ b/doc/gpg.texi
@@ -1138,6 +1138,17 @@ you want to specify a different revocation reason, or to supply
supplementary revocation text, you should use the interactive
sub-command @code{revuid} of @option{--edit-key}.
+@item --quick-revoke-sig @var{fpr} @var{signing-fpr} [@var{names}]
+@opindex quick-revoke-sig
+This command revokes the key signatures made by @var{signing-fpr} from
+the key specified by the fingerprint @var{fpr}. With @var{names}
+given only the signatures on user ids of the key matching any of the
+given names are affected (see @option{--quick-sign-key}). If a
+revocation already exists a notice is printed instead of creating a
+new revocation; no error is returned in this case. Note that key
+signature revocations may be superseded by a newer key signature and
+in turn again revoked.
+
@item --quick-set-primary-uid @var{user-id} @var{primary-user-id}
@opindex quick-set-primary-uid
This command sets or updates the primary user ID flag on an existing
diff --git a/g10/Makefile.am b/g10/Makefile.am
index 9cecc17..8ec771f 100644
--- a/g10/Makefile.am
+++ b/g10/Makefile.am
@@ -19,8 +19,10 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = distsigkey.gpg \
- ChangeLog-2011 gpg-w32info.rc \
- gpg.w32-manifest.in test.c t-keydb-keyring.kbx \
+ ChangeLog-2011 \
+ gpg-w32info.rc gpg.w32-manifest.in \
+ gpgv-w32info.rc gpgv.w32-manifest.in \
+ test.c t-keydb-keyring.kbx \
t-keydb-get-keyblock.gpg t-stutter-data.asc \
all-tests.scm
@@ -88,10 +90,13 @@ endif
if HAVE_W32_SYSTEM
-resource_objs += gpg-w32info.o
-
+gpg_robjs = $(resource_objs) gpg-w32info.o
+gpgv_robjs = $(resource_objs) gpgv-w32info.o
gpg-w32info.o : gpg.w32-manifest
-
+gpgv-w32info.o : gpgv.w32-manifest
+else
+gpg_robjs =
+gpgv_robjs =
endif
common_source = \
@@ -178,16 +183,16 @@ LDADD = $(needed_libs) ../common/libgpgrl.a \
$(ZLIBS) $(LIBINTL) $(CAPLIBS) $(NETLIBS)
gpg_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \
$(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \
- $(LIBICONV) $(resource_objs) $(extra_sys_libs)
+ $(LIBICONV) $(gpg_robjs) $(extra_sys_libs)
gpg_LDFLAGS = $(extra_bin_ldflags)
gpgv_LDADD = $(LDADD) $(LIBGCRYPT_LIBS) \
$(GPG_ERROR_LIBS) \
- $(LIBICONV) $(resource_objs) $(extra_sys_libs)
+ $(LIBICONV) $(gpgv_robjs) $(extra_sys_libs)
gpgv_LDFLAGS = $(extra_bin_ldflags)
gpgcompose_LDADD = $(LDADD) $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) $(LIBREADLINE) \
$(LIBASSUAN_LIBS) $(GPG_ERROR_LIBS) \
- $(LIBICONV) $(resource_objs) $(extra_sys_libs)
+ $(LIBICONV) $(extra_sys_libs)
gpgcompose_LDFLAGS = $(extra_bin_ldflags)
t_common_ldadd =
diff --git a/g10/call-agent.c b/g10/call-agent.c
index 11340aa..c7f1c29 100644
--- a/g10/call-agent.c
+++ b/g10/call-agent.c
@@ -866,8 +866,14 @@ agent_scd_keypairinfo (ctrl_t ctrl, strlist_t *r_list)
/* Send an APDU to the current card. On success the status word is
* stored at R_SW. With HEXAPDU being NULL only a RESET command is
- * send to scd. With HEXAPDU being the string "undefined" the command
- * "SERIALNO undefined" is send to scd.
+ * send to scd. HEXAPDU may also be one of these special strings:
+ *
+ * "undefined" :: Send the command "SCD SERIALNO undefined"
+ * "lock" :: Send the command "SCD LOCK --wait"
+ * "trylock" :: Send the command "SCD LOCK"
+ * "unlock" :: Send the command "SCD UNLOCK"
+ * "reset-keep-lock" :: Send the command "SCD RESET --keep-lock"
+ *
* Used by:
* card-util.c
*/
@@ -888,6 +894,26 @@ agent_scd_apdu (const char *hexapdu, unsigned int *r_sw)
NULL, NULL, NULL, NULL, NULL, NULL);
}
+ else if (!strcmp (hexapdu, "reset-keep-lock"))
+ {
+ err = assuan_transact (agent_ctx, "SCD RESET --keep-lock",
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ }
+ else if (!strcmp (hexapdu, "lock"))
+ {
+ err = assuan_transact (agent_ctx, "SCD LOCK --wait",
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ }
+ else if (!strcmp (hexapdu, "trylock"))
+ {
+ err = assuan_transact (agent_ctx, "SCD LOCK",
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ }
+ else if (!strcmp (hexapdu, "unlock"))
+ {
+ err = assuan_transact (agent_ctx, "SCD UNLOCK",
+ NULL, NULL, NULL, NULL, NULL, NULL);
+ }
else if (!strcmp (hexapdu, "undefined"))
{
err = assuan_transact (agent_ctx, "SCD SERIALNO undefined",
diff --git a/g10/card-util.c b/g10/card-util.c
index 00b64b3..8a5ab28 100644
--- a/g10/card-util.c
+++ b/g10/card-util.c
@@ -1834,8 +1834,13 @@ send_apdu (const char *hexapdu, const char *desc, unsigned int ignore)
if (err)
tty_printf ("sending card command %s failed: %s\n", desc,
gpg_strerror (err));
- else if (!hexapdu || !strcmp (hexapdu, "undefined"))
- ;
+ else if (!hexapdu
+ || !strcmp (hexapdu, "undefined")
+ || !strcmp (hexapdu, "reset-keep-lock")
+ || !strcmp (hexapdu, "lock")
+ || !strcmp (hexapdu, "trylock")
+ || !strcmp (hexapdu, "unlock"))
+ ; /* Ignore pseudo APDUs. */
else if (ignore == 0xffff)
; /* Ignore all status words. */
else if (sw != 0x9000)
@@ -1864,6 +1869,7 @@ factory_reset (void)
char *answer = NULL;
int termstate = 0;
int i;
+ int locked = 0;
/* The code below basically does the same what this
gpg-connect-agent script does:
@@ -1925,8 +1931,14 @@ factory_reset (void)
goto leave;
/* We need to select a card application before we can send APDUs
- to the card without scdaemon doing anything on its own. */
- err = send_apdu (NULL, "RESET", 0);
+ to the card without scdaemon doing anything on its own. We
+ then lock the connection so that other tools (e.g. Kleopatra)
+ don't try a new select. */
+ err = send_apdu ("lock", "locking connection ", 0);
+ if (err)
+ goto leave;
+ locked = 1;
+ err = send_apdu ("reset-keep-lock", "reset", 0);
if (err)
goto leave;
err = send_apdu ("undefined", "dummy select ", 0);
@@ -1968,7 +1980,7 @@ factory_reset (void)
goto leave;
/* Finally we reset the card reader once more. */
- err = send_apdu (NULL, "RESET", 0);
+ err = send_apdu ("reset-keep-lock", "reset", 0);
/* Then, connect the card again. */
if (!err)
@@ -1981,6 +1993,8 @@ factory_reset (void)
}
leave:
+ if (locked)
+ send_apdu ("unlock", "unlocking connection ", 0);
xfree (answer);
agent_release_card_info (&info);
}
diff --git a/g10/encrypt.c b/g10/encrypt.c
index 42cad2b..01f32af 100644
--- a/g10/encrypt.c
+++ b/g10/encrypt.c
@@ -195,7 +195,11 @@ encrypt_simple (const char *filename, int mode, int use_seskey)
if (rc)
{
iobuf_close (inp);
- log_error (_("error creating passphrase: %s\n"), gpg_strerror (rc));
+ if (gpg_err_code (rc) == GPG_ERR_CIPHER_ALGO
+ || gpg_err_code (rc) == GPG_ERR_DIGEST_ALGO)
+ ; /* Error has already been printed. */
+ else
+ log_error (_("error creating passphrase: %s\n"), gpg_strerror (rc));
release_progress_context (pfx);
return rc;
}
@@ -373,12 +377,33 @@ gpg_error_t
setup_symkey (STRING2KEY **symkey_s2k, DEK **symkey_dek)
{
int canceled;
+ int defcipher;
+ int s2kdigest;
+
+ defcipher = default_cipher_algo ();
+ if (!gnupg_cipher_is_allowed (opt.compliance, 1, defcipher,
+ GCRY_CIPHER_MODE_CFB))
+ {
+ log_error (_("cipher algorithm '%s' may not be used in %s mode\n"),
+ openpgp_cipher_algo_name (defcipher),
+ gnupg_compliance_option_string (opt.compliance));
+ return gpg_error (GPG_ERR_CIPHER_ALGO);
+ }
+
+ s2kdigest = S2K_DIGEST_ALGO;
+ if (!gnupg_digest_is_allowed (opt.compliance, 1, s2kdigest))
+ {
+ log_error (_("digest algorithm '%s' may not be used in %s mode\n"),
+ gcry_md_algo_name (s2kdigest),
+ gnupg_compliance_option_string (opt.compliance));
+ return gpg_error (GPG_ERR_DIGEST_ALGO);
+ }
*symkey_s2k = xmalloc_clear (sizeof **symkey_s2k);
(*symkey_s2k)->mode = opt.s2k_mode;
- (*symkey_s2k)->hash_algo = S2K_DIGEST_ALGO;
+ (*symkey_s2k)->hash_algo = s2kdigest;
- *symkey_dek = passphrase_to_dek (default_cipher_algo (),
+ *symkey_dek = passphrase_to_dek (defcipher,
*symkey_s2k, 1, 0, NULL, &canceled);
if (!*symkey_dek || !(*symkey_dek)->keylen)
{
diff --git a/g10/exec.c b/g10/exec.c
index 3e5dc27..1baa49f 100644
--- a/g10/exec.c
+++ b/g10/exec.c
@@ -539,7 +539,7 @@ exec_write(struct exec_info **info,const char *program,
gpg_err_set_errno (EPERM);
}
else
- (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
+ (*info)->tochild = gnupg_fopen ((*info)->tempfile_in,binary?"wb":"w");
if((*info)->tochild==NULL)
{
ret = gpg_error_from_syserror ();
diff --git a/g10/gpg.c b/g10/gpg.c
index 1dc97a8..a3ada64 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -125,6 +125,7 @@ enum cmd_and_opt_values
aLSignKey,
aQuickSignKey,
aQuickLSignKey,
+ aQuickRevSig,
aQuickAddUid,
aQuickAddKey,
aQuickRevUid,
@@ -489,6 +490,8 @@ static ARGPARSE_OPTS opts[] = {
N_("quickly sign a key")),
ARGPARSE_c (aQuickLSignKey, "quick-lsign-key",
N_("quickly sign a key locally")),
+ ARGPARSE_c (aQuickRevSig, "quick-revoke-sig" ,
+ N_("quickly revoke a key signature")),
ARGPARSE_c (aSignKey, "sign-key" ,N_("sign a key")),
ARGPARSE_c (aLSignKey, "lsign-key" ,N_("sign a key locally")),
ARGPARSE_c (aEditKey, "edit-key" ,N_("sign or edit a key")),
@@ -1334,10 +1337,10 @@ open_info_file (const char *fname, int for_write, int binary)
do
{
if (for_write)
- fd = open (fname, O_CREAT | O_TRUNC | O_WRONLY | binary,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ fd = gnupg_open (fname, O_CREAT | O_TRUNC | O_WRONLY | binary,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
else
- fd = open (fname, O_RDONLY | binary);
+ fd = gnupg_open (fname, O_RDONLY | binary, 0);
}
while (fd == -1 && errno == EINTR);
/* } */
@@ -1501,7 +1504,7 @@ check_permissions (const char *path, int item)
}
/* It's okay if the file or directory doesn't exist */
- if(stat(tmppath,&statbuf)!=0)
+ if (gnupg_stat (tmppath,&statbuf))
{
ret=0;
goto end;
@@ -1512,7 +1515,7 @@ check_permissions (const char *path, int item)
I'm stopping at one level down. */
dir=make_dirname(tmppath);
- if(stat(dir,&dirbuf)!=0 || !S_ISDIR(dirbuf.st_mode))
+ if (gnupg_stat (dir,&dirbuf) || !S_ISDIR (dirbuf.st_mode))
{
/* Weird error */
ret=1;
@@ -2185,7 +2188,9 @@ set_compliance_option (enum cmd_and_opt_values option)
case oDE_VS:
set_compliance_option (oOpenPGP);
opt.compliance = CO_DE_VS;
- /* Fixme: Change other options. */
+ /* We divert here from the backward compatible rfc4880 algos. */
+ opt.s2k_digest_algo = DIGEST_ALGO_SHA256;
+ opt.s2k_cipher_algo = CIPHER_ALGO_AES256;
break;
default:
@@ -2531,7 +2536,7 @@ main (int argc, char **argv)
}
configlineno = 0;
- configfp = fopen( configname, "r" );
+ configfp = gnupg_fopen( configname, "r" );
if (configfp && is_secured_file (fileno (configfp)))
{
fclose (configfp);
@@ -2610,6 +2615,7 @@ main (int argc, char **argv)
case aSign:
case aQuickSignKey:
case aQuickLSignKey:
+ case aQuickRevSig:
case aSignKey:
case aLSignKey:
case aStore:
@@ -4021,13 +4027,14 @@ main (int argc, char **argv)
}
/* Set the random seed file. */
- if( use_random_seed ) {
- char *p = make_filename (gnupg_homedir (), "random_seed", NULL );
- gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p);
- if (!access (p, F_OK))
+ if (use_random_seed)
+ {
+ char *p = make_filename (gnupg_homedir (), "random_seed", NULL );
+ gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p);
+ if (!gnupg_access (p, F_OK))
register_secured_file (p);
xfree(p);
- }
+ }
/* If there is no command but the --fingerprint is given, default
to the --list-keys command. */
@@ -4381,6 +4388,22 @@ main (int argc, char **argv)
}
break;
+ case aQuickRevSig:
+ {
+ const char *userid, *siguserid;
+
+ if (argc < 2)
+ wrong_args ("--quick-revoke-sig USER-ID SIG-USER-ID [userids]");
+ userid = *argv++; argc--;
+ siguserid = *argv++; argc--;
+ sl = NULL;
+ for( ; argc; argc--, argv++)
+ append_to_strlist2 (&sl, *argv, utf8_strings);
+ keyedit_quick_revsig (ctrl, userid, siguserid, sl);
+ free_strlist (sl);
+ }
+ break;
+
case aSignKey:
if( argc != 1 )
wrong_args("--sign-key user-id");
diff --git a/g10/gpg.w32-manifest.in b/g10/gpg.w32-manifest.in
index 8c98dc5..24484db 100644
--- a/g10/gpg.w32-manifest.in
+++ b/g10/gpg.w32-manifest.in
@@ -8,10 +8,11 @@
/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
- <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
- <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
- <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
</application>
</compatibility>
</assembly>
diff --git a/g10/gpgv-w32info.rc b/g10/gpgv-w32info.rc
new file mode 100644
index 0000000..9182fa4
--- /dev/null
+++ b/g10/gpgv-w32info.rc
@@ -0,0 +1,52 @@
+/* gpgv-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s OpenPGP verify tool\0"
+ VALUE "InternalName", "gpgv\0"
+ VALUE "OriginalFilename", "gpgv.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "gpgv.w32-manifest"
diff --git a/g10/gpgv.w32-manifest.in b/g10/gpgv.w32-manifest.in
new file mode 100644
index 0000000..b7a2120
--- /dev/null
+++ b/g10/gpgv.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (OpenPGP verify tool)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpgv"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/g10/keydb.c b/g10/keydb.c
index 45b3c85..e538fe4 100644
--- a/g10/keydb.c
+++ b/g10/keydb.c
@@ -29,6 +29,7 @@
#include "gpg.h"
#include "../common/util.h"
+#include "../common/sysutils.h"
#include "options.h"
#include "main.h" /*try_make_homedir ()*/
#include "packet.h"
@@ -293,6 +294,7 @@ keyblock_cache_clear (struct keydb_handle *hd)
static gpg_error_t
maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
{
+ gpg_err_code_t ec;
dotlock_t lockhd = NULL;
IOBUF iobuf;
int rc;
@@ -303,8 +305,8 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
int save_slash;
/* A quick test whether the filename already exists. */
- if (!access (filename, F_OK))
- return !access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES);
+ if (!gnupg_access (filename, F_OK))
+ return !gnupg_access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES);
/* If we don't want to create a new file at all, there is no need to
go any further - bail out right here. */
@@ -330,7 +332,7 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
not happen though. */
save_slash = *last_slash_in_filename;
*last_slash_in_filename = 0;
- if (access(filename, F_OK))
+ if (gnupg_access(filename, F_OK))
{
static int tried;
@@ -339,9 +341,9 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
tried = 1;
try_make_homedir (filename);
}
- if (access (filename, F_OK))
+ if ((ec = gnupg_access (filename, F_OK)))
{
- rc = gpg_error_from_syserror ();
+ rc = gpg_error (ec);
*last_slash_in_filename = save_slash;
goto leave;
}
@@ -398,12 +400,12 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
if (rc)
goto leave;
- if (!access (filename, F_OK))
+ if (!gnupg_access (filename, F_OK))
{
rc = 0; /* Okay, we may access the file now. */
goto leave;
}
- if (!access (bak_fname, F_OK) && !access (tmp_fname, F_OK))
+ if (!gnupg_access (bak_fname, F_OK) && !gnupg_access (tmp_fname, F_OK))
{
/* Very likely another process is updating a pubring.gpg and we
should not create a pubring.kbx. */
@@ -442,13 +444,13 @@ maybe_create_keyring_or_box (char *filename, int is_box, int force_create)
that the detection magic will work the next time it is used. */
if (is_box)
{
- FILE *fp = fopen (filename, "wb");
+ estream_t fp = es_fopen (filename, "wb");
if (!fp)
rc = gpg_error_from_syserror ();
else
{
rc = _keybox_write_header_blob (fp, 1);
- fclose (fp);
+ es_fclose (fp);
}
if (rc)
{
@@ -502,7 +504,7 @@ rt_from_file (const char *filename, int *r_found, int *r_openpgp)
KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE;
*r_found = *r_openpgp = 0;
- fp = fopen (filename, "rb");
+ fp = gnupg_fopen (filename, "rb");
if (fp)
{
*r_found = 1;
diff --git a/g10/keydb.h b/g10/keydb.h
index f61515f..e1a316c 100644
--- a/g10/keydb.h
+++ b/g10/keydb.h
@@ -128,9 +128,10 @@ struct pubkey_find_info {
/* Helper type for preference functions. */
-union pref_hint
+struct pref_hint
{
- int digest_length;
+ int digest_length; /* We want at least this digest length. */
+ int exact; /* We need to use exactly this length. */
};
@@ -262,9 +263,9 @@ gpg_error_t find_and_check_key (ctrl_t ctrl,
pk_list_t *pk_list_addr);
int algo_available( preftype_t preftype, int algo,
- const union pref_hint *hint );
+ const struct pref_hint *hint );
int select_algo_from_prefs( PK_LIST pk_list, int preftype,
- int request, const union pref_hint *hint);
+ int request, const struct pref_hint *hint);
int select_mdc_from_pklist (PK_LIST pk_list);
void warn_missing_mdc_from_pklist (PK_LIST pk_list);
void warn_missing_aes_from_pklist (PK_LIST pk_list);
diff --git a/g10/keyedit.c b/g10/keyedit.c
index a7932ce..ed81c4a 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -2275,7 +2275,7 @@ leave:
* Returns on success the key database handle at R_KDBHD and the
* keyblock at R_KEYBLOCK. */
static gpg_error_t
-quick_find_keyblock (ctrl_t ctrl, const char *username,
+quick_find_keyblock (ctrl_t ctrl, const char *username, int want_secret,
KEYDB_HANDLE *r_kdbhd, kbnode_t *r_keyblock)
{
gpg_error_t err;
@@ -2318,7 +2318,7 @@ quick_find_keyblock (ctrl_t ctrl, const char *username,
err = 0;
keydb_pop_found_state (kdbhd);
- if (!err)
+ if (!err && want_secret)
{
/* We require the secret primary key to set the primary UID. */
node = find_kbnode (keyblock, PKT_PUBLIC_KEY);
@@ -2375,7 +2375,7 @@ keyedit_quick_adduid (ctrl_t ctrl, const char *username, const char *newuid)
#endif
/* Search the key; we don't want the whole getkey stuff here. */
- err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock);
+ err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock);
if (err)
goto leave;
@@ -2418,7 +2418,7 @@ keyedit_quick_revuid (ctrl_t ctrl, const char *username, const char *uidtorev)
#endif
/* Search the key; we don't want the whole getkey stuff here. */
- err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock);
+ err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock);
if (err)
goto leave;
@@ -2498,7 +2498,7 @@ keyedit_quick_set_primary (ctrl_t ctrl, const char *username,
check_trustdb_stale (ctrl);
#endif
- err = quick_find_keyblock (ctrl, username, &kdbhd, &keyblock);
+ err = quick_find_keyblock (ctrl, username, 1, &kdbhd, &keyblock);
if (err)
goto leave;
@@ -2771,6 +2771,240 @@ keyedit_quick_sign (ctrl_t ctrl, const char *fpr, strlist_t uids,
}
+/* Unattended revocation of a key signatures. USERNAME specifies the
+ * key; this should best be a fingerprint. SIGTOREV is the user-id of
+ * the key for which the key signature shall be removed. Only
+ * non-self-signatures can be removed with this functions. If
+ * AFFECTED_UIDS is not NULL only the key signatures on these user-ids
+ * are revoked. */
+void
+keyedit_quick_revsig (ctrl_t ctrl, const char *username, const char *sigtorev,
+ strlist_t affected_uids)
+{
+ gpg_error_t err;
+ int no_signing_key = 0;
+ KEYDB_HANDLE kdbhd = NULL;
+ kbnode_t keyblock = NULL;
+ PKT_public_key *primarypk; /* Points into KEYBLOCK. */
+ u32 *primarykid;
+ PKT_public_key *pksigtorev = NULL;
+ u32 *pksigtorevkid;
+ kbnode_t node, n;
+ int skip_remaining;
+ int consider_sig;
+ strlist_t sl;
+ struct sign_attrib attrib = { 0 };
+
+#ifdef HAVE_W32_SYSTEM
+ /* See keyedit_menu for why we need this. */
+ check_trustdb_stale (ctrl);
+#endif
+
+ /* Search the key; we don't want the whole getkey stuff here. Noet
+ * that we are looking for the public key here. */
+ err = quick_find_keyblock (ctrl, username, 0, &kdbhd, &keyblock);
+ if (err)
+ goto leave;
+ log_assert (keyblock->pkt->pkttype == PKT_PUBLIC_KEY
+ || keyblock->pkt->pkttype == PKT_SECRET_KEY);
+ primarypk = keyblock->pkt->pkt.public_key;
+ primarykid = pk_keyid (primarypk);
+
+ /* Get the signing key we want to revoke. This must be one of our
+ * signing keys. We will compare only the keyid because we don't
+ * assume that we have duplicated keyids on our own secret keys. If
+ * a there is a duplicated one we will notice this when creating the
+ * revocation. */
+ pksigtorev = xtrycalloc (1, sizeof *pksigtorev);
+ if (!pksigtorev)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+ pksigtorev->req_usage = PUBKEY_USAGE_CERT;
+ err = getkey_byname (ctrl, NULL, pksigtorev, sigtorev, 1, NULL);
+ if (err)
+ {
+ no_signing_key = 1;
+ goto leave;
+ }
+ pksigtorevkid = pk_keyid (pksigtorev);
+
+ /* Find the signatures we want to revoke and set a mark. */
+ skip_remaining = consider_sig = 0;
+ for (node = keyblock; node; node = node->next)
+ {
+ node->flag &= ~NODFLG_MARK_A;
+ if (skip_remaining)
+ ;
+ else if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY)
+ skip_remaining = 1;
+ else if (node->pkt->pkttype == PKT_USER_ID)
+ {
+ PKT_user_id *uid = node->pkt->pkt.user_id;
+
+ consider_sig = !affected_uids;
+ for (sl = affected_uids; !consider_sig && sl; sl = sl->next)
+ {
+ const char *name = sl->d;
+
+ if (uid->attrib_data)
+ ;
+ else if (*name == '='
+ && strlen (name+1) == uid->len
+ && !memcmp (uid->name, name + 1, uid->len))
+ { /* Exact match. */
+ consider_sig = 1;
+ }
+ else if (ascii_memistr (uid->name, uid->len,
+ *name == '*'? name+1:name))
+ { /* Case-insensitive substring match. */
+ consider_sig = 1;
+ }
+ }
+ }
+ else if (node->pkt->pkttype == PKT_SIGNATURE)
+ {
+ /* We need to sort the signatures so that we can figure out
+ * whether the key signature has been revoked or the
+ * revocation has been superseded by a new key
+ * signature. */
+ PKT_signature *sig;
+ unsigned int sigcount = 0;
+ kbnode_t *sigarray;
+
+ /* Allocate an array large enogh for all signatures. */
+ for (n=node; n && n->pkt->pkttype == PKT_SIGNATURE; n = n->next)
+ sigcount++;
+ sigarray = xtrycalloc (sigcount, sizeof *sigarray);
+ if (!sigarray)
+ {
+ err = gpg_error_from_syserror ();
+ goto leave;
+ }
+
+ /* Now fill the array with signatures we are interested in.
+ * We also move NODE forward to the end. */
+ sigcount = 0;
+ for (n=node; n && n->pkt->pkttype == PKT_SIGNATURE; node=n, n=n->next)
+ {
+ sig = n->pkt->pkt.signature;
+ if (!keyid_cmp (primarykid, sig->keyid))
+ continue; /* Ignore self-signatures. */
+
+ if (keyid_cmp (pksigtorevkid, sig->keyid))
+ continue; /* Ignore non-matching signatures. */
+
+ n->flag &= ~NODFLG_MARK_B; /* Clear flag used by cmp_signode. */
+ sigarray[sigcount++] = n;
+ }
+
+ if (sigcount)
+ {
+ qsort (sigarray, sigcount, sizeof *sigarray, cmp_signodes);
+
+ /* log_debug ("Sorted signatures:\n"); */
+ /* for (idx=0; idx < sigcount; idx++) */
+ /* { */
+ /* sig = sigarray[idx]->pkt->pkt.signature; */
+ /* log_debug ("%s 0x%02x %s\n", keystr (sig->keyid), */
+ /* sig->sig_class, datestr_from_sig (sig)); */
+ /* } */
+ sig = sigarray[sigcount-1]->pkt->pkt.signature;
+ if ((consider_sig || !affected_uids) && IS_UID_REV (sig))
+ {
+ if (!opt.quiet)
+ log_info ("sig by %s already revoked at %s\n",
+ keystr (sig->keyid), datestr_from_sig (sig));
+ }
+ else if ((consider_sig && IS_UID_SIG (sig))
+ || (!affected_uids && IS_KEY_SIG (sig)))
+ node->flag |= NODFLG_MARK_A; /* Select signature. */
+ }
+
+ xfree (sigarray);
+ }
+ }
+
+ /* Check whether any signatures were done by the given key. We do
+ * not return an error if none were found. */
+ for (node = keyblock; node; node = node->next)
+ if ((node->flag & NODFLG_MARK_A))
+ break;
+ if (!node)
+ {
+ if (opt.verbose)
+ log_info (_("Not signed by you.\n"));
+ err = 0;
+ goto leave;
+ }
+
+ /* Revoke all marked signatures. */
+ attrib.reason = get_default_sig_revocation_reason ();
+
+ reloop: /* (we must repeat because we are modifying the list) */
+ for (node = keyblock; node; node = node->next)
+ {
+ kbnode_t unode;
+ PKT_signature *sig;
+ PACKET *pkt;
+
+ if (!(node->flag & NODFLG_MARK_A))
+ continue;
+ node->flag &= ~NODFLG_MARK_A;
+
+ if (IS_KEY_SIG (node->pkt->pkt.signature))
+ unode = NULL;
+ else
+ {
+ unode = find_prev_kbnode (keyblock, node, PKT_USER_ID);
+ log_assert (unode);
+ }
+
+ attrib.non_exportable = !node->pkt->pkt.signature->flags.exportable;
+
+ err = make_keysig_packet (ctrl, &sig, primarypk,
+ unode? unode->pkt->pkt.user_id : NULL,
+ NULL, pksigtorev, 0x30, 0, 0, 0,
+ sign_mk_attrib, &attrib, NULL);
+ if (err)
+ {
+ log_error ("signing failed: %s\n", gpg_strerror (err));
+ goto leave;
+ }
+
+ pkt = xmalloc_clear (sizeof *pkt);
+ pkt->pkttype = PKT_SIGNATURE;
+ pkt->pkt.signature = sig;
+ if (unode)
+ insert_kbnode (unode, new_kbnode (pkt), 0);
+ goto reloop;
+ }
+
+ err = keydb_update_keyblock (ctrl, kdbhd, keyblock);
+ if (err)
+ {
+ log_error (_("update failed: %s\n"), gpg_strerror (err));
+ goto leave;
+ }
+ revalidation_mark (ctrl);
+
+ leave:
+ if (err)
+ {
+ log_error (_("revoking the key signature failed: %s\n"),
+ gpg_strerror (err));
+ if (no_signing_key)
+ print_further_info ("error getting key used to make the key signature");
+ write_status_error ("keyedit.revoke.sig", err);
+ }
+ release_revocation_reason_info (attrib.reason);
+ free_public_key (pksigtorev);
+ release_kbnode (keyblock);
+ keydb_release (kdbhd);
+}
+
+
/* Unattended subkey creation function.
*
*/
@@ -5990,7 +6224,7 @@ core_revuid (ctrl_t ctrl, kbnode_t keyblock, KBNODE node,
memset (&attrib, 0, sizeof attrib);
/* should not need to cast away const here; but
revocation_reason_build_cb needs to take a non-const
- void* in order to meet the function signtuare for the
+ void* in order to meet the function signature for the
mksubpkt argument to make_keysig_packet */
attrib.reason = (struct revocation_reason_info *)reason;
diff --git a/g10/keyedit.h b/g10/keyedit.h
index af5e996..1aa95c1 100644
--- a/g10/keyedit.h
+++ b/g10/keyedit.h
@@ -33,6 +33,8 @@
#define NODFLG_SELKEY (1<<9) /* Indicate the selected key. */
#define NODFLG_SELSIG (1<<10) /* Indicate a selected signature. */
+#define NODFLG_MARK_B (1<<11) /* Temporary mark in key listing code. */
+
/*-- keyedit.c --*/
void keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
strlist_t commands, int quiet, int seckey_check );
@@ -45,6 +47,8 @@ void keyedit_quick_revuid (ctrl_t ctrl, const char *username,
const char *uidtorev);
void keyedit_quick_sign (ctrl_t ctrl, const char *fpr,
strlist_t uids, strlist_t locusr, int local);
+void keyedit_quick_revsig (ctrl_t ctrl, const char *username,
+ const char *sigtorev, strlist_t affected_uids);
void keyedit_quick_set_expire (ctrl_t ctrl,
const char *fpr, const char *expirestr,
char **subkeyfprs);
diff --git a/g10/keygen.c b/g10/keygen.c
index 471f52a..d50acf8 100644
--- a/g10/keygen.c
+++ b/g10/keygen.c
@@ -2147,6 +2147,10 @@ ask_algo (ctrl_t ctrl, int addmode, int *r_subkey_algo, unsigned int *r_usage,
&& !(sl->flags & GCRY_PK_USAGE_ENCR))
sl->flags |= (PUBKEY_ALGO_ECDSA << 8);
else if (algoid == GCRY_PK_ECC
+ && algostr && !strncmp (algostr, "brainpool", 9)
+ && !(sl->flags & GCRY_PK_USAGE_ENCR))
+ sl->flags |= (PUBKEY_ALGO_ECDSA << 8);
+ else if (algoid == GCRY_PK_ECC
&& algostr && !strcmp (algostr, "ed25519")
&& !(sl->flags & GCRY_PK_USAGE_ENCR))
sl->flags = (PUBKEY_ALGO_EDDSA << 8);
@@ -4039,6 +4043,7 @@ read_parameter_file (ctrl_t ctrl, const char *fname )
para = NULL;
maxlen = 1024;
line = NULL;
+ nline = 0;
while ( iobuf_read_line (fp, &line, &nline, &maxlen) ) {
char *keyword, *value;
diff --git a/g10/keylist.c b/g10/keylist.c
index 5b0f7ba..7deb04d 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -893,6 +893,51 @@ dump_attribs (const PKT_user_id *uid, PKT_public_key *pk)
}
+/* Order two signatures. We first order by keyid and then by creation
+ * time. This is currently only used in keyedit.c */
+int
+cmp_signodes (const void *av, const void *bv)
+{
+ const kbnode_t an = *(const kbnode_t *)av;
+ const kbnode_t bn = *(const kbnode_t *)bv;
+ const PKT_signature *a;
+ const PKT_signature *b;
+ int i;
+
+ /* log_assert (an->pkt->pkttype == PKT_SIGNATURE); */
+ /* log_assert (bn->pkt->pkttype == PKT_SIGNATURE); */
+
+ a = an->pkt->pkt.signature;
+ b = bn->pkt->pkt.signature;
+
+ /* Self-signatures are ordered first. */
+ if ((an->flag & NODFLG_MARK_B) && !(bn->flag & NODFLG_MARK_B))
+ return -1;
+ if (!(an->flag & NODFLG_MARK_B) && (bn->flag & NODFLG_MARK_B))
+ return 1;
+
+ /* then the keyids. (which are or course the same for self-sigs). */
+ i = keyid_cmp (a->keyid, b->keyid);
+ if (i)
+ return i;
+
+ /* Followed by creation time */
+ if (a->timestamp > b->timestamp)
+ return 1;
+ if (a->timestamp < b->timestamp)
+ return -1;
+
+ /* followed by the class in a way that a rev comes first. */
+ if (a->sig_class > b->sig_class)
+ return 1;
+ if (a->sig_class < b->sig_class)
+ return -1;
+
+ /* To make the sort stable we compare the entire structure as last resort. */
+ return memcmp (a, b, sizeof *a);
+}
+
+
static void
list_keyblock_print (ctrl_t ctrl, kbnode_t keyblock, int secret, int fpr,
struct keylist_context *listctx)
diff --git a/g10/keyring.c b/g10/keyring.c
index f424f94..8c31ccc 100644
--- a/g10/keyring.c
+++ b/g10/keyring.c
@@ -228,7 +228,7 @@ keyring_is_writable (void *token)
{
KR_RESOURCE r = token;
- return r? (r->read_only || !access (r->fname, W_OK)) : 0;
+ return r? (r->read_only || !gnupg_access (r->fname, W_OK)) : 0;
}
@@ -1371,7 +1371,7 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname)
statbuf.st_mode=S_IRUSR | S_IWUSR;
- if (!stat (bakfname, &statbuf) && !chmod (fname, statbuf.st_mode))
+ if (!gnupg_stat (bakfname, &statbuf) && !chmod (fname, statbuf.st_mode))
;
else
log_error ("WARNING: unable to restore permissions to '%s': %s",
@@ -1606,6 +1606,7 @@ static int
do_copy (int mode, const char *fname, KBNODE root,
off_t start_offset, unsigned int n_packets )
{
+ gpg_err_code_t ec;
IOBUF fp, newfp;
int rc=0;
char *bakfname = NULL;
@@ -1613,8 +1614,8 @@ do_copy (int mode, const char *fname, KBNODE root,
/* Open the source file. Because we do a rename, we have to check the
permissions of the file */
- if (access (fname, W_OK))
- return gpg_error_from_syserror ();
+ if ((ec = gnupg_access (fname, W_OK)))
+ return gpg_error (ec);
fp = iobuf_open (fname);
if (mode == 1 && !fp && errno == ENOENT) {
diff --git a/g10/main.h b/g10/main.h
index bb046ba..68360e2 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -95,6 +95,7 @@ void print_sha1_keysig_rejected_note (void);
void print_reported_error (gpg_error_t err, gpg_err_code_t skip_if_ec);
void print_further_info (const char *format, ...) GPGRT_ATTR_PRINTF(1,2);
void additional_weak_digest (const char* digestname);
+int is_weak_digest (digest_algo_t algo);
/*-- armor.c --*/
char *make_radix64_string( const byte *data, size_t len );
@@ -447,8 +448,9 @@ int gen_desig_revoke (ctrl_t ctrl, const char *uname, strlist_t locusr);
int revocation_reason_build_cb( PKT_signature *sig, void *opaque );
struct revocation_reason_info *
ask_revocation_reason( int key_rev, int cert_rev, int hint );
-struct revocation_reason_info * get_default_uid_revocation_reason(void);
-void release_revocation_reason_info( struct revocation_reason_info *reason );
+struct revocation_reason_info * get_default_uid_revocation_reason (void);
+struct revocation_reason_info * get_default_sig_revocation_reason (void);
+void release_revocation_reason_info (struct revocation_reason_info *reason);
/*-- keylist.c --*/
void public_key_list (ctrl_t ctrl, strlist_t list,
@@ -458,6 +460,7 @@ void print_subpackets_colon(PKT_signature *sig);
void reorder_keyblock (KBNODE keyblock);
void list_keyblock_direct (ctrl_t ctrl, kbnode_t keyblock, int secret,
int has_secret, int fpr, int no_validity);
+int cmp_signodes (const void *av, const void *bv);
void print_fingerprint (ctrl_t ctrl, estream_t fp,
PKT_public_key *pk, int mode);
void print_revokers (estream_t fp, PKT_public_key *pk);
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 79ff211..762fc79 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -618,6 +618,9 @@ print_pkenc_list (ctrl_t ctrl, struct kidlist_item *list, int failed)
{
log_info (_("public key decryption failed: %s\n"),
gpg_strerror (list->reason));
+ if (gpg_err_source (list->reason) == GPG_ERR_SOURCE_SCD
+ && gpg_err_code (list->reason) == GPG_ERR_INV_ID)
+ print_further_info ("a reason might be a card with replaced keys");
write_status_error ("pkdecrypt_failed", list->reason);
}
}
diff --git a/g10/migrate.c b/g10/migrate.c
index c52c67a..38fb7bd 100644
--- a/g10/migrate.c
+++ b/g10/migrate.c
@@ -50,10 +50,10 @@ migrate_secring (ctrl_t ctrl)
char *agent_version = NULL;
secring = make_filename (gnupg_homedir (), "secring" EXTSEP_S "gpg", NULL);
- if (access (secring, F_OK))
+ if (gnupg_access (secring, F_OK))
goto leave; /* Does not exist or is not readable. */
flagfile = make_filename (gnupg_homedir (), V21_MIGRATION_FNAME, NULL);
- if (!access (flagfile, F_OK))
+ if (!gnupg_access (flagfile, F_OK))
goto leave; /* Does exist - fine. */
log_info ("starting migration from earlier GnuPG versions\n");
@@ -99,8 +99,8 @@ migrate_secring (ctrl_t ctrl)
log_info ("porting secret keys from '%s' to gpg-agent\n", secring);
if (!import_old_secring (ctrl, secring))
{
- FILE *fp = fopen (flagfile, "w");
- if (!fp || fclose (fp))
+ estream_t fp = es_fopen (flagfile, "w");
+ if (!fp || es_fclose (fp))
log_error ("error creating flag file '%s': %s\n",
flagfile, gpg_strerror (gpg_error_from_syserror ()));
else
diff --git a/g10/misc.c b/g10/misc.c
index 22ed47e..634d303 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -102,7 +102,7 @@ register_secured_file (const char *fname)
struct secured_file_item *sf;
/* Note that we stop immediately if something goes wrong here. */
- if (stat (fname, &buf))
+ if (gnupg_stat (fname, &buf))
log_fatal (_("fstat of '%s' failed in %s: %s\n"), fname,
"register_secured_file", strerror (errno));
/* log_debug ("registering '%s' i=%lu.%lu\n", fname, */
@@ -131,7 +131,7 @@ unregister_secured_file (const char *fname)
struct stat buf;
struct secured_file_item *sf, *sfprev;
- if (stat (fname, &buf))
+ if (gnupg_stat (fname, &buf))
{
log_error (_("fstat of '%s' failed in %s: %s\n"), fname,
"unregister_secured_file", strerror (errno));
@@ -205,7 +205,7 @@ is_secured_filename (const char *fname)
/* Note that we print out a error here and claim that a file is
secure if something went wrong. */
- if (stat (fname, &buf))
+ if (gnupg_stat (fname, &buf))
{
if (errno == ENOENT || errno == EPERM || errno == EACCES)
return 0;
@@ -311,12 +311,11 @@ print_cipher_algo_note (cipher_algo_t algo)
void
print_digest_algo_note (digest_algo_t algo)
{
- const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo);
- const struct weakhash *weak;
-
if(algo >= 100 && algo <= 110)
{
static int warn=0;
+ const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo);
+
if(!warn)
{
warn=1;
@@ -325,14 +324,13 @@ print_digest_algo_note (digest_algo_t algo)
gcry_md_algo_name (galgo));
}
}
- else
- for (weak = opt.weak_digests; weak != NULL; weak = weak->next)
- if (weak->algo == galgo)
- {
- es_fflush (es_stdout);
- log_info (_("WARNING: digest algorithm %s is deprecated\n"),
- gcry_md_algo_name (galgo));
- }
+ else if (is_weak_digest (algo))
+ {
+ const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo);
+ es_fflush (es_stdout);
+ log_info (_("WARNING: digest algorithm %s is deprecated\n"),
+ gcry_md_algo_name (galgo));
+ }
}
@@ -341,6 +339,10 @@ print_digest_rejected_note (enum gcry_md_algos algo)
{
struct weakhash* weak;
int show = 1;
+
+ if (opt.quiet)
+ return;
+
for (weak = opt.weak_digests; weak; weak = weak->next)
if (weak->algo == algo)
{
@@ -366,7 +368,7 @@ print_sha1_keysig_rejected_note (void)
{
static int shown;
- if (shown)
+ if (shown || opt.quiet)
return;
shown = 1;
@@ -919,6 +921,11 @@ pct_expando(const char *string,struct expando_args *args)
u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0};
char *ret=NULL;
+ /* The parser below would return NULL for an empty string, thus we
+ * catch it here. Also catch NULL here. */
+ if (!string || !*string)
+ return xstrdup ("");
+
if(args->pk)
keyid_from_pk(args->pk,pk_keyid);
@@ -1860,3 +1867,17 @@ additional_weak_digest (const char* digestname)
weak->next = opt.weak_digests;
opt.weak_digests = weak;
}
+
+
+/* Return true if ALGO is in the list of weak digests. */
+int
+is_weak_digest (digest_algo_t algo)
+{
+ const enum gcry_md_algos galgo = map_md_openpgp_to_gcry (algo);
+ const struct weakhash *weak;
+
+ for (weak = opt.weak_digests; weak; weak = weak->next)
+ if (weak->algo == galgo)
+ return 1;
+ return 0;
+}
diff --git a/g10/openfile.c b/g10/openfile.c
index 78f4dbb..d82858f 100644
--- a/g10/openfile.c
+++ b/g10/openfile.c
@@ -324,7 +324,7 @@ get_matching_datafile (const char *sigfilename)
fname = xstrdup (sigfilename);
fname[len-(fname[len-1]=='n'?5:4)] = 0 ;
- if (access (fname, R_OK ))
+ if (gnupg_access (fname, R_OK ))
{
/* Not found or other error. */
xfree (fname);
@@ -367,36 +367,18 @@ open_sigfile (const char *sigfilename, progress_filter_context_t *pfx)
}
+/* Create the directory only if the supplied directory name is the
+ same as the default one. This way we avoid to create arbitrary
+ directories when a non-default home directory is used. To cope
+ with HOME, we do compare only the suffix if we see that the default
+ homedir does start with a tilde. */
void
try_make_homedir (const char *fname)
{
- const char *defhome = standard_homedir ();
-
- /* Create the directory only if the supplied directory name is the
- same as the default one. This way we avoid to create arbitrary
- directories when a non-default home directory is used. To cope
- with HOME, we do compare only the suffix if we see that the
- default homedir does start with a tilde. */
if ( opt.dry_run || opt.no_homedir_creation )
return;
- if (
-#ifdef HAVE_W32_SYSTEM
- ( !compare_filenames (fname, defhome) )
-#else
- ( *defhome == '~'
- && (strlen(fname) >= strlen (defhome+1)
- && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
- || (*defhome != '~' && !compare_filenames( fname, defhome ) )
-#endif
- )
- {
- if (gnupg_mkdir (fname, "-rwx"))
- log_fatal ( _("can't create directory '%s': %s\n"),
- fname, strerror(errno) );
- else if (!opt.quiet )
- log_info ( _("directory '%s' created\n"), fname );
- }
+ gnupg_maybe_make_homedir (fname, opt.quiet);
}
@@ -409,7 +391,7 @@ get_openpgp_revocdir (const char *home)
struct stat statbuf;
fname = make_filename (home, GNUPG_OPENPGP_REVOC_DIR, NULL);
- if (stat (fname, &statbuf) && errno == ENOENT)
+ if (gnupg_stat (fname, &statbuf) && errno == ENOENT)
{
if (gnupg_mkdir (fname, "-rwx"))
log_error (_("can't create directory '%s': %s\n"),
diff --git a/g10/passphrase.c b/g10/passphrase.c
index df80af8..e6837e3 100644
--- a/g10/passphrase.c
+++ b/g10/passphrase.c
@@ -409,7 +409,7 @@ passphrase_to_dek (int cipher_algo, STRING2KEY *s2k,
if (*canceled)
{
xfree (pw);
- write_status( STATUS_MISSING_PASSPHRASE );
+ write_status( STATUS_CANCELED_BY_USER );
return NULL;
}
}
diff --git a/g10/photoid.c b/g10/photoid.c
index f9720d3..81ea7a0 100644
--- a/g10/photoid.c
+++ b/g10/photoid.c
@@ -341,6 +341,11 @@ show_photos (ctrl_t ctrl, const struct user_attribute *attrs, int count,
command=pct_expando(opt.photo_viewer,&args);
if(!command)
goto fail;
+ if (!*command)
+ {
+ xfree (command);
+ goto fail;
+ }
name=xmalloc(16+strlen(EXTSEP_S)+
strlen(image_type_to_string(args.imagetype,0))+1);
diff --git a/g10/pkclist.c b/g10/pkclist.c
index 5421649..bfc4f84 100644
--- a/g10/pkclist.c
+++ b/g10/pkclist.c
@@ -1369,7 +1369,7 @@ build_pk_list (ctrl_t ctrl, strlist_t rcpts, PK_LIST *ret_pk_list)
preference list, so I'm including it. -dms */
int
-algo_available( preftype_t preftype, int algo, const union pref_hint *hint)
+algo_available( preftype_t preftype, int algo, const struct pref_hint *hint)
{
if( preftype == PREFTYPE_SYM )
{
@@ -1395,16 +1395,26 @@ algo_available( preftype_t preftype, int algo, const union pref_hint *hint)
{
if (hint && hint->digest_length)
{
- if (hint->digest_length!=20 || opt.flags.dsa2)
+ unsigned int n = gcry_md_get_algo_dlen (algo);
+
+ if (hint->exact)
+ {
+ /* For example ECDSA requires an exact hash value so
+ * that we do not truncate. For DSA we allow truncation
+ * and thus exact is not set. */
+ if (hint->digest_length != n)
+ return 0;
+ }
+ else if (hint->digest_length!=20 || opt.flags.dsa2)
{
/* If --enable-dsa2 is set or the hash isn't 160 bits
(which implies DSA2), then we'll accept a hash that
is larger than we need. Otherwise we won't accept
any hash that isn't exactly the right size. */
- if (hint->digest_length > gcry_md_get_algo_dlen (algo))
+ if (hint->digest_length > n)
return 0;
}
- else if (hint->digest_length != gcry_md_get_algo_dlen (algo))
+ else if (hint->digest_length != n)
return 0;
}
@@ -1441,7 +1451,7 @@ algo_available( preftype_t preftype, int algo, const union pref_hint *hint)
*/
int
select_algo_from_prefs(PK_LIST pk_list, int preftype,
- int request, const union pref_hint *hint)
+ int request, const struct pref_hint *hint)
{
PK_LIST pkr;
u32 bits[8];
diff --git a/g10/plaintext.c b/g10/plaintext.c
index f9e0a42..3bc8696 100644
--- a/g10/plaintext.c
+++ b/g10/plaintext.c
@@ -185,7 +185,7 @@ get_output_file (const byte *embedded_name, int embedded_namelen,
want to port it again to riscos we should do most of the suff
in estream. FIXME: Consider to remove all riscos special
cases. */
- fp = fopen (fname, "wb");
+ fp = gnupg_fopen (fname, "wb");
if (!fp)
{
log_error (_("error creating '%s': %s\n"), fname, gpg_strerror (err));
diff --git a/g10/revoke.c b/g10/revoke.c
index 3a08972..035a2e9 100644
--- a/g10/revoke.c
+++ b/g10/revoke.c
@@ -891,6 +891,16 @@ get_default_uid_revocation_reason(void)
return reason;
}
+struct revocation_reason_info *
+get_default_sig_revocation_reason(void)
+{
+ struct revocation_reason_info *reason;
+ reason = xmalloc( sizeof *reason );
+ reason->code = 0; /* No specific reason given. */
+ reason->desc = strdup(""); /* no text */
+ return reason;
+}
+
void
release_revocation_reason_info( struct revocation_reason_info *reason )
{
diff --git a/g10/sig-check.c b/g10/sig-check.c
index e71e662..a1dfe38 100644
--- a/g10/sig-check.c
+++ b/g10/sig-check.c
@@ -457,16 +457,14 @@ check_signature_end_simple (PKT_public_key *pk, PKT_signature *sig,
{
gcry_mpi_t result = NULL;
int rc = 0;
- const struct weakhash *weak;
if (!opt.flags.allow_weak_digest_algos)
{
- for (weak = opt.weak_digests; weak; weak = weak->next)
- if (sig->digest_algo == weak->algo)
- {
- print_digest_rejected_note(sig->digest_algo);
- return GPG_ERR_DIGEST_ALGO;
- }
+ if (is_weak_digest (sig->digest_algo))
+ {
+ print_digest_rejected_note (sig->digest_algo);
+ return GPG_ERR_DIGEST_ALGO;
+ }
}
/* For key signatures check that the key has a cert usage. We may
diff --git a/g10/sign.c b/g10/sign.c
index 4793dd1..18f6d20 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -462,7 +462,12 @@ do_sign (ctrl_t ctrl, PKT_public_key *pksk, PKT_signature *sig,
leave:
if (err)
- log_error (_("signing failed: %s\n"), gpg_strerror (err));
+ {
+ log_error (_("signing failed: %s\n"), gpg_strerror (err));
+ if (gpg_err_source (err) == GPG_ERR_SOURCE_SCD
+ && gpg_err_code (err) == GPG_ERR_INV_ID)
+ print_further_info ("a reason might be a card with replaced keys");
+ }
else
{
if (opt.verbose)
@@ -583,7 +588,7 @@ hash_for (PKT_public_key *pk)
{
return opt.def_digest_algo;
}
- else if (recipient_digest_algo)
+ else if (recipient_digest_algo && !is_weak_digest (recipient_digest_algo))
{
return recipient_digest_algo;
}
@@ -905,7 +910,8 @@ write_signature_packets (ctrl_t ctrl,
* and ignore the detached mode. Sign the file with all secret keys
* which can be taken from LOCUSR, if this is NULL, use the default one
* If ENCRYPTFLAG is true, use REMUSER (or ask if it is NULL) to encrypt the
- * signed data for these users.
+ * signed data for these users. If ENCRYPTFLAG is 2 symmetric encryption
+ * is also used.
* If OUTFILE is not NULL; this file is used for output and the function
* does not ask for overwrite permission; output is then always
* uncompressed, non-armored and in binary mode.
@@ -1035,17 +1041,16 @@ sign_file (ctrl_t ctrl, strlist_t filenames, int detached, strlist_t locusr,
select_algo_from_prefs(pk_list,PREFTYPE_HASH,
opt.def_digest_algo,
NULL)!=opt.def_digest_algo)
- log_info(_("WARNING: forcing digest algorithm %s (%d)"
- " violates recipient preferences\n"),
- gcry_md_algo_name (opt.def_digest_algo),
- opt.def_digest_algo );
+ log_info(_("WARNING: forcing digest algorithm %s (%d)"
+ " violates recipient preferences\n"),
+ gcry_md_algo_name (opt.def_digest_algo),
+ opt.def_digest_algo );
}
else
{
- int algo, smartcard=0;
- union pref_hint hint;
-
- hint.digest_length = 0;
+ int algo;
+ int conflict = 0;
+ struct pref_hint hint = { 0 };
/* Of course, if the recipient asks for something
unreasonable (like the wrong hash for a DSA key) then
@@ -1073,32 +1078,44 @@ sign_file (ctrl_t ctrl, strlist_t filenames, int detached, strlist_t locusr,
(sk_rover->pk->pkey[1]));
if (sk_rover->pk->pubkey_algo == PUBKEY_ALGO_ECDSA)
- temp_hashlen = ecdsa_qbits_from_Q (temp_hashlen);
- temp_hashlen = (temp_hashlen+7)/8;
+ {
+ temp_hashlen = ecdsa_qbits_from_Q (temp_hashlen);
+ if (!temp_hashlen)
+ conflict = 1; /* Better don't use the prefs. */
+ temp_hashlen = (temp_hashlen+7)/8;
+ /* Fixup for that funny nistp521 (yes, 521)
+ * were we need to use a 512 bit hash algo. */
+ if (temp_hashlen == 66)
+ temp_hashlen = 64;
+ }
+ else
+ temp_hashlen = (temp_hashlen+7)/8;
/* Pick a hash that is large enough for our
- largest q */
-
- if (hint.digest_length<temp_hashlen)
- hint.digest_length=temp_hashlen;
+ largest q or matches our Q but if tehreare
+ several of them we run into a conflict and
+ don't use the preferences. */
+
+ if (hint.digest_length < temp_hashlen)
+ {
+ if (sk_rover->pk->pubkey_algo == PUBKEY_ALGO_ECDSA)
+ {
+ if (hint.exact)
+ conflict = 1;
+ hint.exact = 1;
+ }
+ hint.digest_length = temp_hashlen;
+ }
}
- /* FIXME: need to check gpg-agent for this. */
- /* else if (sk_rover->pk->is_protected */
- /* && sk_rover->pk->protect.s2k.mode == 1002) */
- /* smartcard = 1; */
}
- /* Current smartcards only do 160-bit hashes. If we have
- to have a >160-bit hash, then we can't use the
- recipient prefs as we'd need both =160 and >160 at the
- same time and recipient prefs currently require a
- single hash for all signatures. All this may well have
- to change as the cards add algorithms. */
-
- if (!smartcard || (smartcard && hint.digest_length==20))
- if ( (algo=
- select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hint)) > 0)
- recipient_digest_algo=algo;
+ if (!conflict
+ && (algo = select_algo_from_prefs (pk_list,PREFTYPE_HASH,
+ -1,&hint)) > 0)
+ {
+ /* Note that we later check that the algo is not weak. */
+ recipient_digest_algo = algo;
+ }
}
}
diff --git a/g10/tdbio.c b/g10/tdbio.c
index 8f75306..9bae2ed 100644
--- a/g10/tdbio.c
+++ b/g10/tdbio.c
@@ -681,7 +681,7 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname,
* trustdb.gpg. This check is not required in theory, but it helps
* in practice avoiding costly operations of preparing and taking
* the lock. */
- if (!stat (fname, &statbuf) && statbuf.st_size > 0)
+ if (!gnupg_stat (fname, &statbuf) && statbuf.st_size > 0)
{
/* OK, we have the valid trustdb.gpg already. */
return 0;
@@ -711,19 +711,21 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname,
log_assert (p);
save_slash = *p;
*p = 0;
- if (access (fname, F_OK))
+ if (gnupg_access (fname, F_OK))
{
try_make_homedir (fname);
- if (access (fname, F_OK))
+ if (gnupg_access (fname, F_OK))
log_fatal (_("%s: directory does not exist!\n"), fname);
}
*p = save_slash;
take_write_lock ();
- if (access (fname, R_OK) || stat (fname, &statbuf) || statbuf.st_size == 0)
+ if (gnupg_access (fname, R_OK)
+ || gnupg_stat (fname, &statbuf)
+ || statbuf.st_size == 0)
{
- FILE *fp;
+ estream_t fp;
TRUSTREC rec;
int rc;
mode_t oldmask;
@@ -745,13 +747,13 @@ tdbio_set_dbname (ctrl_t ctrl, const char *new_dbname,
gpg_err_set_errno (EPERM);
}
else
- fp = fopen (fname, "wb");
+ fp = es_fopen (fname, "wb");
umask(oldmask);
if (!fp)
log_fatal (_("can't create '%s': %s\n"), fname, strerror (errno));
- fclose (fp);
+ es_fclose (fp);
- db_fd = open (db_name, O_RDWR | MY_O_BINARY);
+ db_fd = gnupg_open (db_name, O_RDWR | MY_O_BINARY, 0);
if (db_fd == -1)
log_fatal (_("can't open '%s': %s\n"), db_name, strerror (errno));
@@ -811,7 +813,7 @@ open_db ()
(int)prevrc, (int)GetLastError ());
}
#else /*!HAVE_W32CE_SYSTEM*/
- db_fd = open (db_name, O_RDWR | MY_O_BINARY );
+ db_fd = gnupg_open (db_name, O_RDWR | MY_O_BINARY, 0);
if (db_fd == -1 && (errno == EACCES
#ifdef EROFS
|| errno == EROFS
@@ -819,7 +821,7 @@ open_db ()
)
) {
/* Take care of read-only trustdbs. */
- db_fd = open (db_name, O_RDONLY | MY_O_BINARY );
+ db_fd = gnupg_open (db_name, O_RDONLY | MY_O_BINARY, 0);
if (db_fd != -1 && !opt.quiet)
log_info (_("Note: trustdb not writable\n"));
}
diff --git a/g10/textfilter.c b/g10/textfilter.c
index 96666cf..3e68900 100644
--- a/g10/textfilter.c
+++ b/g10/textfilter.c
@@ -163,8 +163,8 @@ copy_clearsig_text( IOBUF out, IOBUF inp, gcry_md_hd_t md,
int escape_dash, int escape_from)
{
unsigned int maxlen;
- byte *buffer = NULL; /* malloced buffer */
- unsigned int bufsize; /* and size of this buffer */
+ byte *buffer = NULL; /* malloced buffer */
+ unsigned int bufsize = 0; /* and size of this buffer */
unsigned int n;
int truncated = 0;
int pending_lf = 0;
diff --git a/g10/tofu.c b/g10/tofu.c
index 63f941e..9cdcfaa 100644
--- a/g10/tofu.c
+++ b/g10/tofu.c
@@ -197,7 +197,7 @@ begin_transaction (ctrl_t ctrl, int only_batch)
/* Check if another process wants to run. (We just ignore any
* stat failure. A waiter might have to wait a bit longer, but
* otherwise there should be no impact.) */
- if (stat (dbs->want_lock_file, &statbuf) == 0
+ if (gnupg_stat (dbs->want_lock_file, &statbuf) == 0
&& statbuf.st_ctime != dbs->want_lock_file_ctime)
{
end_transaction (ctrl, 2);
@@ -237,7 +237,7 @@ begin_transaction (ctrl_t ctrl, int only_batch)
dbs->in_batch_transaction = 1;
dbs->batch_update_started = gnupg_get_time ();
- if (stat (dbs->want_lock_file, &statbuf) == 0)
+ if (gnupg_stat (dbs->want_lock_file, &statbuf) == 0)
dbs->want_lock_file_ctime = statbuf.st_ctime;
}
diff --git a/g13/backend.c b/g13/backend.c
index 835c66b..a0a2675 100644
--- a/g13/backend.c
+++ b/g13/backend.c
@@ -27,6 +27,7 @@
#include "g13.h"
#include "../common/i18n.h"
+#include "../common/sysutils.h"
#include "keyblob.h"
#include "backend.h"
#include "be-encfs.h"
@@ -116,7 +117,7 @@ be_take_lock_for_create (ctrl_t ctrl, const char *fname, dotlock_t *r_lock)
/* A quick check to see that no container with that name already
exists. */
- if (!access (fname, F_OK))
+ if (!gnupg_access (fname, F_OK))
{
err = gpg_error (GPG_ERR_EEXIST);
goto leave;
@@ -138,7 +139,7 @@ be_take_lock_for_create (ctrl_t ctrl, const char *fname, dotlock_t *r_lock)
}
/* Check again that the file does not exist. */
- err = stat (fname, &sb)? 0 : gpg_error (GPG_ERR_EEXIST);
+ err = gnupg_stat (fname, &sb)? 0 : gpg_error (GPG_ERR_EEXIST);
leave:
if (!err)
diff --git a/g13/create.c b/g13/create.c
index d773dfa..ac4d130 100644
--- a/g13/create.c
+++ b/g13/create.c
@@ -33,6 +33,7 @@
#include "keyblob.h"
#include "backend.h"
#include "g13tuple.h"
+#include "../common/sysutils.h"
#include "../common/call-gpg.h"
/* Create a new blob with all the session keys and other meta
@@ -250,7 +251,7 @@ g13_create_container (ctrl_t ctrl, const char *filename)
{
struct stat sb;
- if (!stat (detachedname, &sb))
+ if (!gnupg_stat (detachedname, &sb))
{
err = gpg_error (GPG_ERR_EEXIST);
goto leave;
diff --git a/g13/g13-syshelp.c b/g13/g13-syshelp.c
index 4ce74ee..e6755d5 100644
--- a/g13/g13-syshelp.c
+++ b/g13/g13-syshelp.c
@@ -325,7 +325,7 @@ main ( int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -588,7 +588,7 @@ g13_syshelp_i_know_what_i_am_doing (void)
char *fname;
fname = make_filename (gnupg_sysconfdir (), yesfile, NULL);
- if (access (fname, F_OK))
+ if (gnupg_access (fname, F_OK))
{
log_info ("*******************************************************\n");
log_info ("* The G13 support for DM-Crypt is new and not matured.\n");
diff --git a/g13/g13.c b/g13/g13.c
index 6265b9f..c4cd34b 100644
--- a/g13/g13.c
+++ b/g13/g13.c
@@ -454,7 +454,7 @@ main ( int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/g13/mount.c b/g13/mount.c
index dc415b1..45b6080 100644
--- a/g13/mount.c
+++ b/g13/mount.c
@@ -76,7 +76,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint)
else
{
/* A quick check to see whether we can the container exists. */
- if (access (filename, R_OK))
+ if (gnupg_access (filename, R_OK))
return gpg_error_from_syserror ();
}
@@ -121,7 +121,7 @@ g13_mount_container (ctrl_t ctrl, const char *filename, const char *mountpoint)
{
struct stat sb;
- if (stat (filename, &sb))
+ if (gnupg_stat (filename, &sb))
{
err = gpg_error_from_syserror ();
goto leave;
diff --git a/g13/sh-dmcrypt.c b/g13/sh-dmcrypt.c
index 09c4d96..6f7173e 100644
--- a/g13/sh-dmcrypt.c
+++ b/g13/sh-dmcrypt.c
@@ -41,6 +41,7 @@
#include "../common/i18n.h"
#include "g13tuple.h"
#include "../common/exectool.h"
+#include "../common/sysutils.h"
#include "keyblob.h"
/* The standard disk block size (logical). */
@@ -94,7 +95,7 @@ check_blockdev (const char *devname, int expect_busy)
char **fields = NULL;
int lno, count;
- if (stat (devname, &sb))
+ if (gnupg_stat (devname, &sb))
{
err = gpg_error_from_syserror ();
log_error ("error stating '%s': %s\n", devname, gpg_strerror (err));
diff --git a/g13/suspend.c b/g13/suspend.c
index 0aa20f0..44c52dd 100644
--- a/g13/suspend.c
+++ b/g13/suspend.c
@@ -28,6 +28,7 @@
#include "g13.h"
#include "../common/i18n.h"
+#include "../common/sysutils.h"
#include "suspend.h"
#include "keyblob.h"
@@ -45,7 +46,7 @@ g13_suspend_container (ctrl_t ctrl, const char *filename)
int needs_syshelp;
/* A quick check to see whether the container exists. */
- if (access (filename, R_OK))
+ if (gnupg_access (filename, R_OK))
return gpg_error_from_syserror ();
/* Decide whether we need to use the g13-syshelp because we can't
@@ -80,7 +81,7 @@ g13_resume_container (ctrl_t ctrl, const char *filename)
char *mountpoint_buffer = NULL;
/* A quick check to see whether the container exists. */
- if (access (filename, R_OK))
+ if (gnupg_access (filename, R_OK))
return gpg_error_from_syserror ();
/* Decide whether we need to use the g13-syshelp because we can't
diff --git a/kbx/kbxutil.c b/kbx/kbxutil.c
index f156122..ec5a43b 100644
--- a/kbx/kbxutil.c
+++ b/kbx/kbxutil.c
@@ -272,7 +272,7 @@ read_file (const char *fname, size_t *r_length)
{
struct stat st;
- fp = fopen (fname, "rb");
+ fp = gnupg_fopen (fname, "rb");
if (!fp)
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
@@ -418,7 +418,7 @@ import_openpgp (const char *filename, int dryrun)
}
else
{
- fflush (stdout);
+ es_fflush (es_stdout);
log_info ("%s: failed to parse OpenPGP keyblock: %s\n",
filename, gpg_strerror (err));
}
@@ -432,17 +432,17 @@ import_openpgp (const char *filename, int dryrun)
err = _keybox_create_openpgp_blob (&blob, &info, p, nparsed, 0);
if (err)
{
- fflush (stdout);
+ es_fflush (es_stdout);
log_error ("%s: failed to create OpenPGP keyblock: %s\n",
filename, gpg_strerror (err));
}
else
{
- err = _keybox_write_blob (blob, stdout);
+ err = _keybox_write_blob (blob, es_stdout, NULL);
_keybox_release_blob (blob);
if (err)
{
- fflush (stdout);
+ es_fflush (es_stdout);
log_error ("%s: failed to write OpenPGP keyblock: %s\n",
filename, gpg_strerror (err));
}
diff --git a/kbx/keybox-defs.h b/kbx/keybox-defs.h
index d2b79ba..2751b4b 100644
--- a/kbx/keybox-defs.h
+++ b/kbx/keybox-defs.h
@@ -80,7 +80,7 @@ struct keybox_found_s
struct keybox_handle {
KB_NAME kb;
int secret; /* this is for a secret keybox */
- FILE *fp;
+ estream_t fp;
int eof;
int error;
int ephemeral;
@@ -169,8 +169,8 @@ void _keybox_destroy_openpgp_info (keybox_openpgp_info_t info);
/*-- keybox-file.c --*/
-int _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted);
-int _keybox_write_blob (KEYBOXBLOB blob, FILE *fp);
+int _keybox_read_blob (KEYBOXBLOB *r_blob, estream_t fp, int *skipped_deleted);
+int _keybox_write_blob (KEYBOXBLOB blob, estream_t fp, FILE *outfp);
/*-- keybox-search.c --*/
gpg_err_code_t _keybox_get_flag_location (const unsigned char *buffer,
diff --git a/kbx/keybox-dump.c b/kbx/keybox-dump.c
index 3bafbaa..3e66b72 100644
--- a/kbx/keybox-dump.c
+++ b/kbx/keybox-dump.c
@@ -84,6 +84,7 @@ print_checksum (const byte *buffer, size_t length, size_t unhashed, FILE *fp)
}
else
hashlen = 20;
+
if (length < 5+unhashed)
{
fputs ("[blob too short for a checksum]\n", fp);
@@ -170,6 +171,8 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
ulong nserial;
ulong unhashed;
const byte *p;
+ const byte *pend;
+ int is_fpr32; /* blob version 2 */
buffer = _keybox_get_blob_image (blob, &length);
@@ -207,7 +210,9 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
fprintf (fp, "[can't dump this blob type]\n");
return 0;
}
+ /* Here we have either BLOGTYPE_X509 or BLOBTYPE_OPENPGP */
fprintf (fp, "Version: %d\n", buffer[5]);
+ is_fpr32 = buffer[5] == 2;
if (length < 40)
{
@@ -247,7 +252,18 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
|| rawdata_off+rawdata_len > length
|| rawdata_len + 4 > length
|| rawdata_off+rawdata_len + 4 > length)
- fprintf (fp, "[Error: raw data larger than blob]\n");
+ {
+ fprintf (fp, "[Error: raw data larger than blob]\n");
+ return -1;
+ }
+
+ if (rawdata_off > length
+ || rawdata_len > length
+ || rawdata_off + rawdata_len > length)
+ {
+ fprintf (fp, "[Error: unhashed data larger than blob]\n");
+ return -1;
+ }
unhashed = length - rawdata_off - rawdata_len;
fprintf (fp, "Unhashed: %lu\n", unhashed);
@@ -260,26 +276,66 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
keyinfolen = get16 (buffer + 18 );
fprintf (fp, "Key-Info-Length: %lu\n", keyinfolen);
- /* fixme: check bounds */
p = buffer + 20;
+ pend = buffer + length;
for (n=0; n < nkeys; n++, p += keyinfolen)
{
ulong kidoff, kflags;
+ if (p + keyinfolen >= pend)
+ {
+ fprintf (fp, "[Error: key data larger than blob]\n");
+ return -1;
+ }
+
fprintf (fp, "Key-Fpr[%lu]: ", n );
- for (i=0; i < 20; i++ )
- fprintf (fp, "%02X", p[i]);
- kidoff = get32 (p + 20);
- fprintf (fp, "\nKey-Kid-Off[%lu]: %lu\n", n, kidoff );
- fprintf (fp, "Key-Kid[%lu]: ", n );
- /* fixme: check bounds */
- for (i=0; i < 8; i++ )
- fprintf (fp, "%02X", buffer[kidoff+i] );
- kflags = get16 (p + 24 );
+ if (is_fpr32)
+ {
+ if (p + 32 + 2 >= pend)
+ {
+ fprintf (fp, "[Error: fingerprint data larger than blob]\n");
+ return -1;
+ }
+ kflags = get16 (p + 32 );
+ for (i=0; i < ((kflags & 0x80)?32:20); i++ )
+ fprintf (fp, "%02X", p[i]);
+ }
+ else
+ {
+ if (p + 20 + 4 >= pend)
+ {
+ fprintf (fp, "[Error: fingerprint data larger than blob]\n");
+ return -1;
+ }
+ for (i=0; i < 20; i++ )
+ fprintf (fp, "%02X", p[i]);
+ kidoff = get32 (p + 20);
+ fprintf (fp, "\nKey-Kid-Off[%lu]: %lu\n", n, kidoff );
+ fprintf (fp, "Key-Kid[%lu]: ", n );
+
+ if (p + kidoff + 8 >= pend)
+ {
+ fprintf (fp, "[Error: fingerprint data larger than blob]\n");
+ return -1;
+ }
+ for (i=0; i < 8; i++ )
+ fprintf (fp, "%02X", buffer[kidoff+i] );
+ if (p + 24 >= pend)
+ {
+ fprintf (fp, "[Error: fingerprint data larger than blob]\n");
+ return -1;
+ }
+ kflags = get16 (p + 24);
+ }
fprintf( fp, "\nKey-Flags[%lu]: %04lX\n", n, kflags);
}
/* serial number */
+ if (p + 2 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
fputs ("Serial-No: ", fp);
nserial = get16 (p);
p += 2;
@@ -287,22 +343,37 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
fputs ("none", fp);
else
{
+ if (p + nserial >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
for (; nserial; nserial--, p++)
fprintf (fp, "%02X", *p);
}
putc ('\n', fp);
/* user IDs */
+ if (p + 4 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
nuids = get16 (p);
fprintf (fp, "Uid-Count: %lu\n", nuids );
uidinfolen = get16 (p + 2);
fprintf (fp, "Uid-Info-Length: %lu\n", uidinfolen);
- /* fixme: check bounds */
p += 4;
for (n=0; n < nuids; n++, p += uidinfolen)
{
ulong uidoff, uidlen, uflags;
+ if (p + uidinfolen >= pend || uidinfolen < 8)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
+
uidoff = get32( p );
uidlen = get32( p+4 );
if (type == KEYBOX_BLOBTYPE_X509 && !n)
@@ -323,8 +394,21 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
fprintf (fp, "Uid-Len[%lu]: %lu\n", n, uidlen );
fprintf (fp, "Uid[%lu]: \"", n );
}
+
+ if (uidoff + uidlen > length
+ || uidoff + uidlen < uidoff
+ || uidoff + uidlen < uidlen)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
print_string (fp, buffer+uidoff, uidlen, '\"');
fputs ("\"\n", fp);
+ if (p + 8 + 2 + 1 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
uflags = get16 (p + 8);
if (type == KEYBOX_BLOBTYPE_X509 && !n)
{
@@ -343,11 +427,15 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
}
}
+ if (p + 2 + 2 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
nsigs = get16 (p);
fprintf (fp, "Sig-Count: %lu\n", nsigs );
siginfolen = get16 (p + 2);
fprintf (fp, "Sig-Info-Length: %lu\n", siginfolen );
- /* fixme: check bounds */
p += 4;
{
int in_range = 0;
@@ -357,6 +445,11 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
{
ulong sflags;
+ if (p + siginfolen >= pend || siginfolen < 4)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
sflags = get32 (p);
if (!in_range && !sflags)
{
@@ -390,6 +483,12 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
if (in_range)
fprintf (fp, "Sig-Expire[%lu-%lu]: [not checked]\n", first, n-1);
}
+
+ if (p + 16 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
fprintf (fp, "Ownertrust: %d\n", p[0] );
fprintf (fp, "All-Validity: %d\n", p[1] );
p += 4;
@@ -402,6 +501,12 @@ _keybox_dump_blob (KEYBOXBLOB blob, FILE *fp)
n = get32 (p );
p += 4;
fprintf (fp, "Created-At: %lu\n", n );
+
+ if (p + 4 >= pend)
+ {
+ fprintf (fp, "[Error: data larger than blob]\n");
+ return -1;
+ }
n = get32 (p );
fprintf (fp, "Reserved-Space: %lu\n", n );
@@ -542,18 +647,18 @@ update_stats (KEYBOXBLOB blob, struct file_stats_s *s)
-static FILE *
+static estream_t
open_file (const char **filename, FILE *outfp)
{
- FILE *fp;
+ estream_t fp;
if (!*filename)
{
*filename = "-";
- fp = stdin;
+ fp = es_stdin;
}
else
- fp = fopen (*filename, "rb");
+ fp = es_fopen (*filename, "rb");
if (!fp)
{
int save_errno = errno;
@@ -568,7 +673,7 @@ open_file (const char **filename, FILE *outfp)
int
_keybox_dump_file (const char *filename, int stats_only, FILE *outfp)
{
- FILE *fp;
+ estream_t fp;
KEYBOXBLOB blob;
int rc;
unsigned long count = 0;
@@ -621,8 +726,8 @@ _keybox_dump_file (const char *filename, int stats_only, FILE *outfp)
if (rc)
fprintf (outfp, "# error reading '%s': %s\n", filename, gpg_strerror (rc));
- if (fp != stdin)
- fclose (fp);
+ if (fp != es_stdin)
+ es_fclose (fp);
if (stats_only)
{
@@ -682,7 +787,7 @@ cmp_dupitems (const void *arg_a, const void *arg_b)
int
_keybox_dump_find_dups (const char *filename, int print_them, FILE *outfp)
{
- FILE *fp;
+ estream_t fp;
KEYBOXBLOB blob;
int rc;
unsigned long recno = 0;
@@ -744,8 +849,8 @@ _keybox_dump_find_dups (const char *filename, int print_them, FILE *outfp)
rc = 0;
if (rc)
fprintf (outfp, "error reading '%s': %s\n", filename, gpg_strerror (rc));
- if (fp != stdin)
- fclose (fp);
+ if (fp != es_stdin)
+ es_fclose (fp);
qsort (dupitems, dupitems_count, sizeof *dupitems, cmp_dupitems);
@@ -775,7 +880,7 @@ int
_keybox_dump_cut_records (const char *filename, unsigned long from,
unsigned long to, FILE *outfp)
{
- FILE *fp;
+ estream_t fp;
KEYBOXBLOB blob;
int rc;
unsigned long recno = 0;
@@ -789,7 +894,7 @@ _keybox_dump_cut_records (const char *filename, unsigned long from,
break; /* Ready. */
if (recno >= from)
{
- if ((rc = _keybox_write_blob (blob, outfp)))
+ if ((rc = _keybox_write_blob (blob, NULL, outfp)))
{
fprintf (stderr, "error writing output: %s\n",
gpg_strerror (rc));
@@ -804,7 +909,7 @@ _keybox_dump_cut_records (const char *filename, unsigned long from,
if (rc)
fprintf (stderr, "error reading '%s': %s\n", filename, gpg_strerror (rc));
leave:
- if (fp != stdin)
- fclose (fp);
+ if (fp != es_stdin)
+ es_fclose (fp);
return rc;
}
diff --git a/kbx/keybox-file.c b/kbx/keybox-file.c
index 046e321..c36f5be 100644
--- a/kbx/keybox-file.c
+++ b/kbx/keybox-file.c
@@ -48,7 +48,7 @@ ftello (FILE *stream)
/* Read a block at the current position and return it in R_BLOB.
R_BLOB may be NULL to simply skip the current block. */
int
-_keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
+_keybox_read_blob (KEYBOXBLOB *r_blob, estream_t fp, int *skipped_deleted)
{
unsigned char *image;
size_t imagelen = 0;
@@ -61,19 +61,19 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
again:
if (r_blob)
*r_blob = NULL;
- off = ftello (fp);
+ off = es_ftello (fp);
if (off == (off_t)-1)
return gpg_error_from_syserror ();
- if ((c1 = getc (fp)) == EOF
- || (c2 = getc (fp)) == EOF
- || (c3 = getc (fp)) == EOF
- || (c4 = getc (fp)) == EOF
- || (type = getc (fp)) == EOF)
+ if ((c1 = es_getc (fp)) == EOF
+ || (c2 = es_getc (fp)) == EOF
+ || (c3 = es_getc (fp)) == EOF
+ || (c4 = es_getc (fp)) == EOF
+ || (type = es_getc (fp)) == EOF)
{
- if ( c1 == EOF && !ferror (fp) )
+ if ( c1 == EOF && !es_ferror (fp) )
return -1; /* eof */
- if (!ferror (fp))
+ if (!es_ferror (fp))
return gpg_error (GPG_ERR_TOO_SHORT);
return gpg_error_from_syserror ();
}
@@ -85,7 +85,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
if (!type)
{
/* Special treatment for empty blobs. */
- if (fseek (fp, imagelen-5, SEEK_CUR))
+ if (es_fseek (fp, imagelen-5, SEEK_CUR))
return gpg_error_from_syserror ();
if (skipped_deleted)
*skipped_deleted = 1;
@@ -96,7 +96,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
{
/* Seek forward so that the caller may choose to ignore this
record. */
- if (fseek (fp, imagelen-5, SEEK_CUR))
+ if (es_fseek (fp, imagelen-5, SEEK_CUR))
return gpg_error_from_syserror ();
return gpg_error (GPG_ERR_TOO_LARGE);
}
@@ -104,7 +104,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
if (!r_blob)
{
/* This blob shall be skipped. */
- if (fseek (fp, imagelen-5, SEEK_CUR))
+ if (es_fseek (fp, imagelen-5, SEEK_CUR))
return gpg_error_from_syserror ();
return 0;
}
@@ -114,7 +114,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
return gpg_error_from_syserror ();
image[0] = c1; image[1] = c2; image[2] = c3; image[3] = c4; image[4] = type;
- if (fread (image+5, imagelen-5, 1, fp) != 1)
+ if (es_fread (image+5, imagelen-5, 1, fp) != 1)
{
gpg_error_t tmperr = gpg_error_from_syserror ();
xfree (image);
@@ -130,7 +130,7 @@ _keybox_read_blob (KEYBOXBLOB *r_blob, FILE *fp, int *skipped_deleted)
/* Write the block to the current file position */
int
-_keybox_write_blob (KEYBOXBLOB blob, FILE *fp)
+_keybox_write_blob (KEYBOXBLOB blob, estream_t fp, FILE *outfp)
{
const unsigned char *image;
size_t length;
@@ -140,15 +140,24 @@ _keybox_write_blob (KEYBOXBLOB blob, FILE *fp)
if (length > IMAGELEN_LIMIT)
return gpg_error (GPG_ERR_TOO_LARGE);
- if (fwrite (image, length, 1, fp) != 1)
- return gpg_error_from_syserror ();
+ if (fp)
+ {
+ if (es_fwrite (image, length, 1, fp) != 1)
+ return gpg_error_from_syserror ();
+ }
+ else
+ {
+ if (fwrite (image, length, 1, outfp) != 1)
+ return gpg_error_from_syserror ();
+ }
+
return 0;
}
/* Write a fresh header type blob. */
int
-_keybox_write_header_blob (FILE *fp, int for_openpgp)
+_keybox_write_header_blob (estream_t fp, int for_openpgp)
{
unsigned char image[32];
u32 val;
@@ -174,7 +183,8 @@ _keybox_write_header_blob (FILE *fp, int for_openpgp)
image[20+2] = (val >> 8);
image[20+3] = (val );
- if (fwrite (image, 32, 1, fp) != 1)
+ if (es_fwrite (image, 32, 1, fp) != 1)
return gpg_error_from_syserror ();
+
return 0;
}
diff --git a/kbx/keybox-init.c b/kbx/keybox-init.c
index e6c3ad2..6cabaea 100644
--- a/kbx/keybox-init.c
+++ b/kbx/keybox-init.c
@@ -25,6 +25,7 @@
#include <assert.h>
#include "keybox-defs.h"
+#include "../common/sysutils.h"
#include "../common/mischelp.h"
static KB_NAME kb_names;
@@ -80,7 +81,7 @@ keybox_is_writable (void *token)
{
KB_NAME r = token;
- return r? !access (r->fname, W_OK) : 0;
+ return r? !gnupg_access (r->fname, W_OK) : 0;
}
@@ -179,7 +180,7 @@ keybox_release (KEYBOX_HANDLE hd)
_keybox_release_blob (hd->saved_found.blob);
if (hd->fp)
{
- fclose (hd->fp);
+ es_fclose (hd->fp);
hd->fp = NULL;
}
xfree (hd->word_match.name);
@@ -252,11 +253,11 @@ _keybox_close_file (KEYBOX_HANDLE hd)
{
if (roverhd->fp)
{
- fclose (roverhd->fp);
+ es_fclose (roverhd->fp);
roverhd->fp = NULL;
}
}
- assert (!hd->fp);
+ log_assert (!hd->fp);
}
diff --git a/kbx/keybox-search.c b/kbx/keybox-search.c
index c07fe81..53ed66b 100644
--- a/kbx/keybox-search.c
+++ b/kbx/keybox-search.c
@@ -782,7 +782,7 @@ static gpg_error_t
open_file (KEYBOX_HANDLE hd)
{
- hd->fp = fopen (hd->kb->fname, "rb");
+ hd->fp = es_fopen (hd->kb->fname, "rb");
if (!hd->fp)
{
hd->error = gpg_error_from_syserror ();
@@ -814,11 +814,11 @@ keybox_search_reset (KEYBOX_HANDLE hd)
if (hd->fp)
{
- if (fseeko (hd->fp, 0, SEEK_SET))
+ if (es_fseeko (hd->fp, 0, SEEK_SET))
{
/* Ooops. Seek did not work. Close so that the search will
* open the file again. */
- fclose (hd->fp);
+ es_fclose (hd->fp);
hd->fp = NULL;
}
}
@@ -909,7 +909,7 @@ keybox_search (KEYBOX_HANDLE hd, KEYBOX_SEARCH_DESC *desc, size_t ndesc,
* returned a blob which also was not the first one. We now
* need to skip over that blob and hope that the file has
* not changed. */
- if (fseeko (hd->fp, lastfoundoff, SEEK_SET))
+ if (es_fseeko (hd->fp, lastfoundoff, SEEK_SET))
{
rc = gpg_error_from_syserror ();
log_debug ("%s: seeking to last found offset failed: %s\n",
@@ -1285,7 +1285,7 @@ keybox_offset (KEYBOX_HANDLE hd)
{
if (!hd->fp)
return 0;
- return ftello (hd->fp);
+ return es_ftello (hd->fp);
}
gpg_error_t
@@ -1310,7 +1310,7 @@ keybox_seek (KEYBOX_HANDLE hd, off_t offset)
return err;
}
- err = fseeko (hd->fp, offset, SEEK_SET);
+ err = es_fseeko (hd->fp, offset, SEEK_SET);
hd->error = gpg_error_from_errno (err);
return hd->error;
diff --git a/kbx/keybox-update.c b/kbx/keybox-update.c
index e25596b..ddda52a 100644
--- a/kbx/keybox-update.c
+++ b/kbx/keybox-update.c
@@ -71,14 +71,14 @@ fseeko (FILE * stream, off_t newpos, int whence)
static int
create_tmp_file (const char *template,
- char **r_bakfname, char **r_tmpfname, FILE **r_fp)
+ char **r_bakfname, char **r_tmpfname, estream_t *r_fp)
{
gpg_error_t err;
err = keybox_tmp_names (template, 0, r_bakfname, r_tmpfname);
if (!err)
{
- *r_fp = fopen (*r_tmpfname, "wb");
+ *r_fp = es_fopen (*r_tmpfname, "wb");
if (!*r_fp)
{
err = gpg_error_from_syserror ();
@@ -161,8 +161,9 @@ static int
blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
int secret, int for_openpgp, off_t start_offset)
{
- FILE *fp, *newfp;
- int rc=0;
+ gpg_err_code_t ec;
+ estream_t fp, newfp;
+ int rc = 0;
char *bakfname = NULL;
char *tmpfname = NULL;
char buffer[4096]; /* (Must be at least 32 bytes) */
@@ -170,33 +171,33 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
/* Open the source file. Because we do a rename, we have to check the
permissions of the file */
- if (access (fname, W_OK))
- return gpg_error_from_syserror ();
+ if ((ec = gnupg_access (fname, W_OK)))
+ return gpg_error (ec);
- fp = fopen (fname, "rb");
+ fp = es_fopen (fname, "rb");
if (mode == FILECOPY_INSERT && !fp && errno == ENOENT)
{
/* Insert mode but file does not exist:
Create a new keybox file. */
- newfp = fopen (fname, "wb");
+ newfp = es_fopen (fname, "wb");
if (!newfp )
return gpg_error_from_syserror ();
rc = _keybox_write_header_blob (newfp, for_openpgp);
if (rc)
{
- fclose (newfp);
+ es_fclose (newfp);
return rc;
}
- rc = _keybox_write_blob (blob, newfp);
+ rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
{
- fclose (newfp);
+ es_fclose (newfp);
return rc;
}
- if ( fclose (newfp) )
+ if ( es_fclose (newfp) )
return gpg_error_from_syserror ();
/* if (chmod( fname, S_IRUSR | S_IWUSR )) */
@@ -217,7 +218,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
if (rc)
{
- fclose (fp);
+ es_fclose (fp);
goto leave;
}
@@ -229,7 +230,7 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
/* Copy everything to the new file. If this is for OpenPGP, we
make sure that the openpgp flag is set in the header. (We
failsafe the blob type.) */
- while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 )
+ while ( (nread = es_fread (buffer, 1, DIM(buffer), fp)) > 0 )
{
if (first_record && for_openpgp
&& buffer[4] == KEYBOX_BLOBTYPE_HEADER)
@@ -238,19 +239,19 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
buffer[7] |= 0x02; /* OpenPGP data may be available. */
}
- if (fwrite (buffer, nread, 1, newfp) != 1)
+ if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
}
- if (ferror (fp))
+ if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
}
@@ -266,24 +267,24 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
nbytes = DIM(buffer);
if (current + nbytes > start_offset)
nbytes = start_offset - current;
- nread = fread (buffer, 1, nbytes, fp);
+ nread = es_fread (buffer, 1, nbytes, fp);
if (!nread)
break;
current += nread;
- if (fwrite (buffer, nread, 1, newfp) != 1)
+ if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
}
- if (ferror (fp))
+ if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
@@ -291,8 +292,8 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
rc = _keybox_read_blob (NULL, fp, NULL);
if (rc)
{
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
return rc;
}
}
@@ -300,11 +301,11 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
/* Do an insert or update. */
if ( mode == FILECOPY_INSERT || mode == FILECOPY_UPDATE )
{
- rc = _keybox_write_blob (blob, newfp);
+ rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
{
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
return rc;
}
}
@@ -312,33 +313,33 @@ blob_filecopy (int mode, const char *fname, KEYBOXBLOB blob,
/* Copy the rest of the packet for an delete or update. */
if (mode == FILECOPY_DELETE || mode == FILECOPY_UPDATE)
{
- while ( (nread = fread (buffer, 1, DIM(buffer), fp)) > 0 )
+ while ( (nread = es_fread (buffer, 1, DIM(buffer), fp)) > 0 )
{
- if (fwrite (buffer, nread, 1, newfp) != 1)
+ if (es_fwrite (buffer, nread, 1, newfp) != 1)
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
}
- if (ferror (fp))
+ if (es_ferror (fp))
{
rc = gpg_error_from_syserror ();
- fclose (fp);
- fclose (newfp);
+ es_fclose (fp);
+ es_fclose (newfp);
goto leave;
}
}
/* Close both files. */
- if (fclose(fp))
+ if (es_fclose(fp))
{
rc = gpg_error_from_syserror ();
- fclose (newfp);
+ es_fclose (newfp);
goto leave;
}
- if (fclose(newfp))
+ if (es_fclose(newfp))
{
rc = gpg_error_from_syserror ();
goto leave;
@@ -503,7 +504,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
{
off_t off;
const char *fname;
- FILE *fp;
+ estream_t fp;
gpg_err_code_t ec;
size_t flag_pos, flag_size;
const unsigned char *buffer;
@@ -535,12 +536,12 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
off += flag_pos;
_keybox_close_file (hd);
- fp = fopen (hd->kb->fname, "r+b");
+ fp = es_fopen (hd->kb->fname, "r+b");
if (!fp)
return gpg_error_from_syserror ();
ec = 0;
- if (fseeko (fp, off, SEEK_SET))
+ if (es_fseeko (fp, off, SEEK_SET))
ec = gpg_err_code_from_syserror ();
else
{
@@ -556,7 +557,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
case 1:
case 2:
case 4:
- if (fwrite (tmp+4-flag_size, flag_size, 1, fp) != 1)
+ if (es_fwrite (tmp+4-flag_size, flag_size, 1, fp) != 1)
ec = gpg_err_code_from_syserror ();
break;
default:
@@ -565,7 +566,7 @@ keybox_set_flags (KEYBOX_HANDLE hd, int what, int idx, unsigned int value)
}
}
- if (fclose (fp))
+ if (es_fclose (fp))
{
if (!ec)
ec = gpg_err_code_from_syserror ();
@@ -581,7 +582,7 @@ keybox_delete (KEYBOX_HANDLE hd)
{
off_t off;
const char *fname;
- FILE *fp;
+ estream_t fp;
int rc;
if (!hd)
@@ -600,18 +601,18 @@ keybox_delete (KEYBOX_HANDLE hd)
off += 4;
_keybox_close_file (hd);
- fp = fopen (hd->kb->fname, "r+b");
+ fp = es_fopen (hd->kb->fname, "r+b");
if (!fp)
return gpg_error_from_syserror ();
- if (fseeko (fp, off, SEEK_SET))
+ if (es_fseeko (fp, off, SEEK_SET))
rc = gpg_error_from_syserror ();
- else if (putc (0, fp) == EOF)
+ else if (es_fputc (0, fp) == EOF)
rc = gpg_error_from_syserror ();
else
rc = 0;
- if (fclose (fp))
+ if (es_fclose (fp))
{
if (!rc)
rc = gpg_error_from_syserror ();
@@ -626,9 +627,10 @@ keybox_delete (KEYBOX_HANDLE hd)
int
keybox_compress (KEYBOX_HANDLE hd)
{
+ gpg_err_code_t ec;
int read_rc, rc;
const char *fname;
- FILE *fp, *newfp;
+ estream_t fp, newfp;
char *bakfname = NULL;
char *tmpfname = NULL;
int first_blob;
@@ -651,10 +653,10 @@ keybox_compress (KEYBOX_HANDLE hd)
/* Open the source file. Because we do a rename, we have to check the
permissions of the file */
- if (access (fname, W_OK))
- return gpg_error_from_syserror ();
+ if ((ec = gnupg_access (fname, W_OK)))
+ return gpg_error (ec);
- fp = fopen (fname, "rb");
+ fp = es_fopen (fname, "rb");
if (!fp && errno == ENOENT)
return 0; /* Ready. File has been deleted right after the access above. */
if (!fp)
@@ -677,21 +679,21 @@ keybox_compress (KEYBOX_HANDLE hd)
if ( (last_maint + 3*3600) > make_timestamp () )
{
- fclose (fp);
+ es_fclose (fp);
_keybox_release_blob (blob);
return 0; /* Compress run not yet needed. */
}
}
_keybox_release_blob (blob);
- fseek (fp, 0, SEEK_SET);
- clearerr (fp);
+ es_fseek (fp, 0, SEEK_SET);
+ es_clearerr (fp);
}
/* Create the new file. */
rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp);
if (rc)
{
- fclose (fp);
+ es_fclose (fp);
return rc;;
}
@@ -723,7 +725,7 @@ keybox_compress (KEYBOX_HANDLE hd)
stamp and if needed (ie. used by gpg) set the openpgp
flag. */
_keybox_update_header_blob (blob, hd->for_openpgp);
- rc = _keybox_write_blob (blob, newfp);
+ rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
break;
continue;
@@ -767,7 +769,7 @@ keybox_compress (KEYBOX_HANDLE hd)
}
}
- rc = _keybox_write_blob (blob, newfp);
+ rc = _keybox_write_blob (blob, newfp, NULL);
if (rc)
break;
}
@@ -780,9 +782,9 @@ keybox_compress (KEYBOX_HANDLE hd)
rc = read_rc;
/* Close both files. */
- if (fclose(fp) && !rc)
+ if (es_fclose(fp) && !rc)
rc = gpg_error_from_syserror ();
- if (fclose(newfp) && !rc)
+ if (es_fclose(newfp) && !rc)
rc = gpg_error_from_syserror ();
/* Rename or remove the temporary file. */
diff --git a/kbx/keybox.h b/kbx/keybox.h
index 4d94157..c5f9b57 100644
--- a/kbx/keybox.h
+++ b/kbx/keybox.h
@@ -81,7 +81,7 @@ gpg_error_t keybox_lock (KEYBOX_HANDLE hd, int yes, long timeout);
/*-- keybox-file.c --*/
/* Fixme: This function does not belong here: Provide a better
interface to create a new keybox file. */
-int _keybox_write_header_blob (FILE *fp, int openpgp_flag);
+int _keybox_write_header_blob (estream_t fp, int openpgp_flag);
/*-- keybox-search.c --*/
gpg_error_t keybox_get_keyblock (KEYBOX_HANDLE hd, iobuf_t *r_iobuf,
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 70b5d45..a281946 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -30,6 +30,7 @@ common/logging.c
common/utf8conv.c
common/dotlock.c
common/init.c
+common/homedir.c
g10/armor.c
g10/build-packet.c
diff --git a/po/ca.po b/po/ca.po
index 359d286..6f8339a 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -1852,6 +1852,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "AVÃS: «%s» és un fitxer buit\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "no podeu usar l'algorisme de resum %s mentre esteu en mode %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "s'està llegint des de «%s»\n"
@@ -1863,10 +1871,6 @@ msgstr ""
"forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "AVÃS: %s és una opció desaconsellada.\n"
@@ -2162,6 +2166,11 @@ msgstr "signa una clau"
msgid "quickly sign a key locally"
msgstr "signa una clau localment"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "genera un nou parell de claus"
+
msgid "sign a key"
msgstr "signa una clau"
@@ -2662,10 +2671,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s encara no funciona amb %s\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "no podeu usar l'algorisme de resum %s mentre esteu en mode %s\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "no podeu usar l'algorisme de compressió %s mentre esteu en mode %s\n"
@@ -3855,6 +3860,15 @@ msgstr "Usuari inexistent.\n"
msgid "Nothing to sign.\n"
msgstr "No hi ha res que signar amb la clau %08lX\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "no s'ha pogut comprovar la signatura creada: %s\n"
+
#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s no és un joc de caràcters vàlid\n"
@@ -4176,9 +4190,6 @@ msgstr "Esteu segur de que encara voleu revocarla? (s/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Voleu crear un certificat de revocació per a aquesta signatura? (s/N) "
-msgid "Not signed by you.\n"
-msgstr ""
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Heu signat els següents ID d'usuari:\n"
diff --git a/po/cs.po b/po/cs.po
index 5a4aef3..10436ee 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -1713,6 +1713,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "VAROVÃNÃ: soubor „%s“ je prázdný\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "šifrovací algoritmus „%s“ se nesmí používat v režimu %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "hashovací algoritmus „%s“ se nesmí používat v režimu %s\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "Äte se z „%s“\n"
@@ -1723,10 +1731,6 @@ msgstr ""
"VAROVÃNÃ: vyžádaná symetrická Å¡ifra %s (%d) nevyhovuje pÅ™edvolbám příjemce\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "šifrovací algoritmus „%s“ se nesmí používat v režimu %s\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "VAROVÃNÃ: klÃ­Ä %s není vhodný pro Å¡ifrování v režimu %s\n"
@@ -1982,6 +1986,11 @@ msgstr "rychle podepsat klíÄ"
msgid "quickly sign a key locally"
msgstr "rychle lokálnÄ› podepsat klíÄ"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "rychle odvolat identitu uživatele"
+
msgid "sign a key"
msgstr "podepsat klíÄ"
@@ -2454,10 +2463,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s dosud není funkÄní s %s\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "hashovací algoritmus „%s“ se nesmí používat v režimu %s\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "kompresní algoritmus „%s“ se nesmí používat v režimu %s\n"
@@ -3554,6 +3559,15 @@ msgid "Nothing to sign.\n"
msgstr "Nic na podepsání.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Nepodepsáno vámi.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontrola vytvořeného podpisu se nepodařila: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "„%s“ není platná doba expirace\n"
@@ -3844,9 +3858,6 @@ msgstr "Jste si jisti, že jej chcete stále odvolat? (a/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Vytvořit pro tento podpis odvolací certifikát? (a/N)"
-msgid "Not signed by you.\n"
-msgstr "Nepodepsáno vámi.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Podepsal(a) jste následující identifikátory uživatele: %s:\n"
diff --git a/po/da.po b/po/da.po
index cce2ec1..95fc716 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1842,6 +1842,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "ADVARSEL: »%s« er en tom fil\n"
#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "du må ikke bruge chifferalgoritmen »%s« i tilstanden %s\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "du må ikke bruge sammendragsalgoritmen »%s« i tilstanden %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "læser fra »%s«\n"
@@ -1854,11 +1864,6 @@ msgstr ""
"præferencer\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "du må ikke bruge chifferalgoritmen »%s« i tilstanden %s\n"
-
-#, fuzzy, c-format
#| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n"
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "ADVARSEL: »%s« er en forældet indstilling - den har ingen effekt\n"
@@ -2142,6 +2147,11 @@ msgstr "underskriv en nøgle"
msgid "quickly sign a key locally"
msgstr "underskriv en nøgle lokalt"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "opret et nyt nøglepar"
+
msgid "sign a key"
msgstr "underskriv en nøgle"
@@ -2643,11 +2653,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s virker endnu ikke med %s\n"
#, fuzzy, c-format
-#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "du må ikke bruge sammendragsalgoritmen »%s« i tilstanden %s\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm `%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "du må ikke bruge komprimeringsalgoritmen »%s« i tilstanden %s\n"
@@ -3815,6 +3820,15 @@ msgstr "Ingen sådan bruger-id.\n"
msgid "Nothing to sign.\n"
msgstr "Intet at underskrive med nøgle %s\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr "Ikke underskrevet af dig.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontrol af oprettet underskrift mislykkedes: %s\n"
+
#, fuzzy, c-format
#| msgid "`%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -4126,9 +4140,6 @@ msgstr "Er du sikker på, at du ønsker at tilbagekalde den? (j/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Opret et tilbagekaldscertifikat for denne underskrift? (j/N) "
-msgid "Not signed by you.\n"
-msgstr "Ikke underskrevet af dig.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Du har underskrevet disse bruger-id'er på nøgle %s:\n"
diff --git a/po/de.po b/po/de.po
index e3e0364..9ba1721 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnupg-2.1.0\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2020-07-09 11:31+0200\n"
+"PO-Revision-Date: 2020-11-11 14:57+0100\n"
"Last-Translator: Werner Koch <wk@gnupg.org>\n"
"Language-Team: German <de@li.org>\n"
"Language: de\n"
@@ -1721,6 +1721,15 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "WARNUNG: '%s' ist eine leere Datei.\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"Das Verschlüsselungsverfahren %s darf im %s Modus nicht verwendet werden.\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "Die Benutzung der Hashmethode %s ist im %s Modus nicht erlaubt.\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "Lesen von '%s'\n"
@@ -1732,11 +1741,6 @@ msgstr ""
"%s (%d) verletzt die Empfängervoreinstellungen\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"Das Verschlüsselungsverfahren %s darf im %s Modus nicht verwendet werden.\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr ""
"WARNUNG: Schlüssel %s ist zur Verschlüsselung im %s Modus nicht geeignet.\n"
@@ -1999,6 +2003,9 @@ msgstr "Schlüssel schnell signieren"
msgid "quickly sign a key locally"
msgstr "Schlüssel schnell nur für diesen Rechner signieren"
+msgid "quickly revoke a key signature"
+msgstr "Schnell eine Schlüsselsignatur widerrufen"
+
msgid "sign a key"
msgstr "Schlüssel signieren"
@@ -2464,10 +2471,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s arbeitet noch nicht mit %s zusammen\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "Die Benutzung der Hashmethode %s ist im %s Modus nicht erlaubt.\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr ""
"Die Benutzung des Komprimierverfahren %s ist im %s Modus nicht erlaubt.\n"
@@ -3592,6 +3595,14 @@ msgid "Nothing to sign.\n"
msgstr "Nichts zu beglaubigen\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Nicht von Ihnen signiert.\n"
+
+#, c-format
+msgid "revoking the key signature failed: %s\n"
+msgstr "Fehler beim Widerruf der Schlüsselsignatur: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "'%s' ist kein gültiges Ablaufdatum\n"
@@ -3892,9 +3903,6 @@ msgstr "Wollen Sie ihn immer noch widerrufen? (j/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Ein Widerrufszertifikat für diese Signatur erzeugen (j/N)"
-msgid "Not signed by you.\n"
-msgstr "Nicht von Ihnen signiert.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Sie haben folgende User-IDs des Schlüssels %s beglaubigt:\n"
diff --git a/po/el.po b/po/el.po
index 3b643ca..8cedba8 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1782,6 +1782,15 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: `%s' είναι ένα άδειο αÏχείο\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "απαγοÏεÏετε η χÏήση του κÏυπταλγόÏιθμου \"%s\" στην κατάσταση %s\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"απαγοÏεÏετε η χÏήση του αλγόÏιθμου πεÏίληψης \"%s\" στην κατάσταση %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "ανάγνωση από `%s'\n"
@@ -1794,10 +1803,6 @@ msgstr ""
"επιλογές του παÏαλήπτη\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "απαγοÏεÏετε η χÏήση του κÏυπταλγόÏιθμου \"%s\" στην κατάσταση %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: \"%s\" είναι μια μη συνειστώμενη επιλογή\n"
@@ -2088,6 +2093,11 @@ msgstr "υπογÏαφή ενός κλειδιοÏ"
msgid "quickly sign a key locally"
msgstr "υπογÏαφή ενός ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Ï„Î¿Ï€Î¹ÎºÎ¬"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "δημιουÏγία ενός νέου ζεÏγους κλειδιών"
+
msgid "sign a key"
msgstr "υπογÏαφή ενός κλειδιοÏ"
@@ -2579,11 +2589,6 @@ msgid "%s does not yet work with %s\n"
msgstr "το %s ακόμα δε λειτουÏγεί μαζί με το %s\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"απαγοÏεÏετε η χÏήση του αλγόÏιθμου πεÏίληψης \"%s\" στην κατάσταση %s\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr ""
"απαγοÏεÏετε η χÏήση του αλγόÏιθμου συμπίεσης \"%s\" στην κατάσταση %s\n"
@@ -3760,6 +3765,15 @@ msgid "Nothing to sign.\n"
msgstr "Τίποτα για να υπογÏαφεί με το κλειδί %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " υπογÏάφθηκε από %08lX στις %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "απέτυχε ο έλεγχος της υπογÏαφής που δημιουÏγήθηκε: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "το %s δεν είναι έγκυÏο σετ χαÏακτήÏων\n"
@@ -4076,10 +4090,6 @@ msgstr "ΣίγουÏα θέλετε να ανακληθεί αυτό το κλε
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "ΔημιουÏγία ενός Ï€Î¹ÏƒÏ„Î¿Ï€Î¿Î¹Î·Ï„Î¹ÎºÎ¿Ï Î±Î½Î¬ÎºÎ»Î·ÏƒÎ·Ï‚ για αυτή την υπογÏαφή; (y/N)"
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " υπογÏάφθηκε από %08lX στις %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Έχετε υπογÏάψει αυτά τα user ID:\n"
diff --git a/po/eo.po b/po/eo.po
index 15aa172..5cfc0bd 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -1779,6 +1779,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "AVERTO: '%s' estas malplena dosiero\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "Tiu komando ne eblas en la reÄimo %s.\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "Tiu komando ne eblas en la reÄimo %s.\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "legas el '%s'\n"
@@ -1789,10 +1797,6 @@ msgid ""
msgstr "NOTO: ĉifrad-metodo %d ne trovita en preferoj\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "Tiu komando ne eblas en la reÄimo %s.\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "AVERTO: '%s' estas malplena dosiero\n"
@@ -2068,6 +2072,11 @@ msgstr "subskribi Ålosilon"
msgid "quickly sign a key locally"
msgstr "subskribi Ålosilon loke"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "krei novan Ålosilparon"
+
msgid "sign a key"
msgstr "subskribi Ålosilon"
@@ -2554,10 +2563,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ne havas sencon kun %s!\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "Tiu komando ne eblas en la reÄimo %s.\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "Tiu komando ne eblas en la reÄimo %s.\n"
@@ -3732,6 +3737,15 @@ msgid "Nothing to sign.\n"
msgstr "Nenio por subskribi per Ålosilo %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " subskribita per %08lX je %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontrolo de kreita subskribo malsukcesis: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s ne estas valida signaro\n"
@@ -4036,10 +4050,6 @@ msgstr "Ĉu vi estas certa, ke vi ankoraÅ­ volas aldoni Äin? (j/n) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Ĉu krei revokatestilon por ĉi tiu subskribo? (j/N)"
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " subskribita per %08lX je %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n"
diff --git a/po/es.po b/po/es.po
index 641bc28..12b0db5 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1720,6 +1720,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "ATENCIÓN '%s' es un fichero vacío\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "no se puede usar el cifrado '%s' en modo %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "no puede usar el resumen '%s' en modo %s\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "leyendo desde '%s'\n"
@@ -1731,10 +1739,6 @@ msgstr ""
"del destinatario\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "no se puede usar el cifrado '%s' en modo %s\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr ""
"ATENCIÓN: la clave %s no es adecuada para la encriptación en modo %s\n"
@@ -1993,6 +1997,11 @@ msgstr "firma una clave en modo rápido"
msgid "quickly sign a key locally"
msgstr "firma una clave localmente en modo rápido"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "revoca una id de usuario en modo rápido"
+
msgid "sign a key"
msgstr "firma la clave"
@@ -2454,10 +2463,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s aún no funciona con %s\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "no puede usar el resumen '%s' en modo %s\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "no puede usar la compresión '%s' en modo %s\n"
@@ -3558,6 +3563,15 @@ msgid "Nothing to sign.\n"
msgstr "Nada que firmar.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "No está firmado por usted.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "la comprobación de la firma creada falló: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "'%s' no es una fecha de caducidad válida\n"
@@ -3848,9 +3862,6 @@ msgstr "¿De verdad quiere revocarla? (s/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "¿Crear un certificado de revocación para esta clave? (s/N) "
-msgid "Not signed by you.\n"
-msgstr "No está firmado por usted.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Ha firmado estos IDs de usuario con la clave %s:\n"
diff --git a/po/et.po b/po/et.po
index 64eaf3b..2b5d6de 100644
--- a/po/et.po
+++ b/po/et.po
@@ -1777,6 +1777,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "HOIATUS: `%s' on tühi fail\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "Å¡ifri algoritm \"%s\" ei ole moodis %s lubatud\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "sõnumilühendi algoritm \"%s\" ei ole moodis %s lubatud\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "loen failist `%s'\n"
@@ -1788,10 +1796,6 @@ msgstr ""
"sümmetrilise šifri %s (%d) kasutamine on vastuolus saaja eelistustega\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "Å¡ifri algoritm \"%s\" ei ole moodis %s lubatud\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "HOIATUS: võtit \"%s\" ei soovitata kasutada.\n"
@@ -2080,6 +2084,11 @@ msgstr "allkirjasta võti"
msgid "quickly sign a key locally"
msgstr "allkirjasta võti lokaalselt"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "genereeri uus võtmepaar"
+
msgid "sign a key"
msgstr "allkirjasta võti"
@@ -2566,10 +2575,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ei tööta veel koos %s-ga\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "sõnumilühendi algoritm \"%s\" ei ole moodis %s lubatud\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "pakkimise algoritm \"%s\" ei ole moodis %s lubatud\n"
@@ -3732,6 +3737,15 @@ msgid "Nothing to sign.\n"
msgstr "Võtmega %08lX pole midagi allkirjastada\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " allkirjastanud %08lX %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "Loodud allkirja ei õnnestu kontrollida: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s ei ole lubatud kooditabel\n"
@@ -4037,10 +4051,6 @@ msgstr "Olete kindel, et soovite seda ikka tühistada? (j/E) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Loon sellele allkirjale tühistamise sertifikaadi? (j/E) "
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " allkirjastanud %08lX %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Te olete allkirjastanud järgnevad kasutaja IDd:\n"
diff --git a/po/fi.po b/po/fi.po
index 85f1464..507d146 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1796,6 +1796,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "VAROITUS: \"%s\" on tyhjä tiedosto\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "salausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "tiivistealgoritmia \"%s\" ei voi käyttää %s-tilassa\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "luetaan kohteesta \"%s\"\n"
@@ -1806,10 +1814,6 @@ msgid ""
msgstr "valittu symmetrinen salain %s (%d) ei ole vastaanottajan suosima\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "salausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "VAROITUS: \"%s\" on paheksuttu valitsin\n"
@@ -2095,6 +2099,11 @@ msgstr "allekirjoita avain"
msgid "quickly sign a key locally"
msgstr "allekirjoita avain paikallisesti"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "luo uusi avainpari"
+
msgid "sign a key"
msgstr "allekirjoita avain"
@@ -2582,10 +2591,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ja %s eivät vielä toimi yhdessä\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "tiivistealgoritmia \"%s\" ei voi käyttää %s-tilassa\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "pakkausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n"
@@ -3753,6 +3758,15 @@ msgid "Nothing to sign.\n"
msgstr "Avaimelle %08lX ei löydy mitään mitä allekirjoittaa\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " %08lX allekirjoitti tämän %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "luodun allekirjoituksen tarkistus epäonnistui: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s ei kelpaa merkistöksi\n"
@@ -4059,10 +4073,6 @@ msgstr "Haluatko varmasti mitätöidä sen? (k/E) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Luodaanko tälle alekirjoitukselle mitätöintivarmenne? (k/E) "
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " %08lX allekirjoitti tämän %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Olet allekirjoittanut seuraavat käyttäjätunnukset:\n"
diff --git a/po/fr.po b/po/fr.po
index 59c4033..8f297c4 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1771,6 +1771,16 @@ msgstr "« %s » est déjà compressé\n"
msgid "WARNING: '%s' is an empty file\n"
msgstr "Attention : « %s » est un fichier vide\n"
+#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s.\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm '%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "impossible d'utiliser l'algorithme de hachage « %s » en mode %s.\n"
+
#, c-format
msgid "reading from '%s'\n"
msgstr "lecture de « %s »\n"
@@ -1783,11 +1793,6 @@ msgstr ""
" désaccord avec les préférences du destinataire\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s.\n"
-
-#, fuzzy, c-format
#| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "Attention : « %s%s » est une option obsolète — non prise en compte\n"
@@ -2065,6 +2070,11 @@ msgstr "signer rapidement une clef"
msgid "quickly sign a key locally"
msgstr "signer rapidement une clef localement"
+#, fuzzy
+#| msgid "quickly generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "générer rapidement une nouvelle paire de clefs"
+
msgid "sign a key"
msgstr "signer une clef"
@@ -2561,11 +2571,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ne fonctionne pas encore avec %s\n"
#, fuzzy, c-format
-#| msgid "you may not use digest algorithm '%s' while in %s mode\n"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "impossible d'utiliser l'algorithme de hachage « %s » en mode %s.\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm '%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "impossible d'utiliser l'algorithme de compression « %s » en mode %s.\n"
@@ -3697,6 +3702,15 @@ msgstr "Pas d’identités correspondantes."
msgid "Nothing to sign.\n"
msgstr "Rien à signer.\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr "Non signée par vous.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "échec de vérification de la signature créée : %s\n"
+
#, fuzzy, c-format
#| msgid "'%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -4010,9 +4024,6 @@ msgid "Create a revocation certificate for this signature? (y/N) "
msgstr ""
"Faut-il créer un certificat de révocation pour cette signature ? (o/N) "
-msgid "Not signed by you.\n"
-msgstr "Non signée par vous.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Vous avez signé ces identités sur la clef %s :\n"
diff --git a/po/gl.po b/po/gl.po
index ec5e830..7cf244c 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -1787,6 +1787,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "AVISO: `%s' é un ficheiro baleiro\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "non se pode empregar o algoritmo de cifrado \"%s\" no modo %s\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "non se pode empregar o algoritmo de resumo \"%s\" no modo %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "lendo de `%s'\n"
@@ -1798,10 +1806,6 @@ msgstr ""
"forza-la cifra simétrica %s (%d) viola as preferencias do destinatario\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "non se pode empregar o algoritmo de cifrado \"%s\" no modo %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "AVISO: \"%s\" é unha opción a extinguir\n"
@@ -2088,6 +2092,11 @@ msgstr "asinar unha chave"
msgid "quickly sign a key locally"
msgstr "asinar unha chave localmente"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "xerar un novo par de chaves"
+
msgid "sign a key"
msgstr "asinar unha chave"
@@ -2574,10 +2583,6 @@ msgid "%s does not yet work with %s\n"
msgstr "¡%s aínda non traballa con %s!\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "non se pode empregar o algoritmo de resumo \"%s\" no modo %s\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "non se pode empregar o algoritmo de compresión \"%s\" no modo %s\n"
@@ -3756,6 +3761,15 @@ msgid "Nothing to sign.\n"
msgstr "Nada que asinar coa chave %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " asinada por %08lX no %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "fallou a comprobación da sinatura creada: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s non é un xogo de caracteres válido\n"
@@ -4070,10 +4084,6 @@ msgstr "¿Está seguro de que quere revocala? (s/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "¿Crear un certificado de revocación para esta sinatura? (s/N) "
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " asinada por %08lX no %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Asinou estes IDs de usuario: \n"
diff --git a/po/hu.po b/po/hu.po
index 7b9eef7..ac9d361 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -1777,6 +1777,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "FIGYELEM: A(z) \"%s\" állomány üres.\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"Lehet, hogy nem használhatja \"%s\" rejtjelező algoritmust %s módban!\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"Lehet, hogy nem használhatja \"%s\" kivonatoló algoritmust %s módban!\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "Olvasok a \"%s\" állományból.\n"
@@ -1787,11 +1797,6 @@ msgid ""
msgstr "A %s (%d) rejtjelező használata sérti a címzett preferenciáit!\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"Lehet, hogy nem használhatja \"%s\" rejtjelező algoritmust %s módban!\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "FIGYELEM: \"%s\" elavult opció!\n"
@@ -2077,6 +2082,11 @@ msgstr "kulcs aláírása"
msgid "quickly sign a key locally"
msgstr "kulcs aláírása helyileg"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "új kulcspár létrehozása"
+
msgid "sign a key"
msgstr "kulcs aláírása"
@@ -2563,11 +2573,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s és %s egyelőre nem használható együtt!\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"Lehet, hogy nem használhatja \"%s\" kivonatoló algoritmust %s módban!\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "Lehet, hogy nem használhatja \"%s\" tömörítő algoritmust %s módban!\n"
@@ -3731,6 +3736,15 @@ msgid "Nothing to sign.\n"
msgstr "Nincs mit aláírni a %08lX kulccsal!\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " aláírva %08lX által %s%s időpontban.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "A létrehozott aláírás ellenőrzése sikertelen: %s.\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s nem érvényes karakterkiosztás!\n"
@@ -4038,10 +4052,6 @@ msgstr "Biztos benne, hogy mégis visszavonja? (i/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Csináljunk egy visszavonó igazolást ehhez az aláíráshoz? (i/N) "
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " aláírva %08lX által %s%s időpontban.\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Ön aláírta a következő felhasználóazonosítókat:\n"
diff --git a/po/id.po b/po/id.po
index 17f5010..abc8479 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1783,6 +1783,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "PERINGATAN: `%s' adalah file kosong\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"anda tidak boleh menggunakan algoritma cipher \"%s\" saat dalam mode %s.\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"anda tidak boleh menggunakan algoritma digest \"%s\" saat dalam mode %s.\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "Membaca dari `%s'\n"
@@ -1793,11 +1803,6 @@ msgid ""
msgstr "memaksa cipher simetrik %s (%d) melanggar preferensi penerima\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"anda tidak boleh menggunakan algoritma cipher \"%s\" saat dalam mode %s.\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "WARNING: \"%s\" adalah opsi terdepresiasi\n"
@@ -2080,6 +2085,11 @@ msgstr "tandai kunci"
msgid "quickly sign a key locally"
msgstr "tandai kunci secara lokal"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "buat sepasang kunci baru"
+
msgid "sign a key"
msgstr "tandai kunci"
@@ -2566,11 +2576,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s belum dapat dipakai dengan %s\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"anda tidak boleh menggunakan algoritma digest \"%s\" saat dalam mode %s.\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr ""
"anda tidak boleh menggunakan algoritma kompresi \"%s\" saat dalam mode %s.\n"
@@ -3736,6 +3741,15 @@ msgid "Nothing to sign.\n"
msgstr "Tidak ada yang ditandai dengan kunci %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " ditandai oleh %08lX pada %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "Gagal memeriksa signature yang dibuat: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s bukanlah set karakter yang valid\n"
@@ -4048,10 +4062,6 @@ msgstr "Anda tetap ingin membatalkannya? (y/n) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Membuat sertifikat pembatalan untuk signature ini? (y/N)"
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " ditandai oleh %08lX pada %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Anda telah menandai ID user ini:\n"
diff --git a/po/it.po b/po/it.po
index 3c5f606..e90b58b 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,22 +1,23 @@
# GnuPG italian translation
# Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
# Marco d'Itri <md@linux.it>, 1998, 1999, 2001, 2002.
-#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg 1.1.92\n"
+"Project-Id-Version: GNU gnupg 2.2.23\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2008-05-26 12:02+0200\n"
-"Last-Translator: Marco d'Itri <md@linux.it>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"Language: it\n"
+"PO-Revision-Date: 2020-10-10 19:54+0200\n"
+"Last-Translator: Denis <student@alice.it>\n"
+"Language-Team: \n"
+"Language: it_IT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.1\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to acquire the pinentry lock: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile acquisire il blocco pinentry: %s\n"
#. TRANSLATORS: These are labels for buttons etc used in
#. Pinentries. An underscore indicates that the next letter
@@ -25,39 +26,36 @@ msgstr "inizializzazione del trustdb fallita: %s\n"
#. the second vertical bar. Note that gpg-agent has been set to
#. utf-8 so that the strings are in the expected encoding.
msgid "|pinentry-label|_OK"
-msgstr ""
+msgstr "|pinentry-label|_OK"
msgid "|pinentry-label|_Cancel"
-msgstr ""
+msgstr "|pinentry-label|_Cancel"
msgid "|pinentry-label|_Yes"
-msgstr ""
+msgstr "|pinentry-label|_Yes"
msgid "|pinentry-label|_No"
-msgstr ""
+msgstr "|pinentry-label|_No"
msgid "|pinentry-label|PIN:"
-msgstr ""
+msgstr "|pinentry-label|PIN:"
msgid "|pinentry-label|_Save in password manager"
-msgstr ""
+msgstr "|pinentry-label|_Save in gestione password"
-#, fuzzy
msgid "Do you really want to make your passphrase visible on the screen?"
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
+msgstr "Vuoi davvero rendere la tua passphrase visibile sullo schermo?"
msgid "|pinentry-tt|Make passphrase visible"
-msgstr ""
+msgstr "|pinentry-tt|Rendere visibile la passphrase"
-#, fuzzy
-#| msgid "invalid passphrase"
msgid "|pinentry-tt|Hide passphrase"
-msgstr "passphrase non valida"
+msgstr "|pinentry-tt|Nascondi passphrase"
#. TRANSLATORS: This string is displayed by Pinentry as the label
#. for the quality bar.
msgid "Quality:"
-msgstr ""
+msgstr "Qualità:"
#. TRANSLATORS: This string is a tooltip, shown by pinentry when
#. hovering over the quality bar. Please use an appropriate
@@ -66,28 +64,30 @@ msgstr ""
#. translate this entry, a default english text (see source)
#. will be used.
msgid "pinentry.qualitybar.tooltip"
-msgstr ""
+msgstr "pinentry.qualitybar.tooltip"
msgid ""
"Please enter your PIN, so that the secret key can be unlocked for this "
"session"
msgstr ""
+"Inserisci il tuo PIN, in modo che la chiave segreta possa essere sbloccata "
+"per questa sessione"
-#, fuzzy
msgid ""
"Please enter your passphrase, so that the secret key can be unlocked for "
"this session"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr ""
+"Inserisci la tua passphrase, in modo che la chiave segreta possa essere "
+"sbloccata per questa sessione"
msgid "PIN:"
-msgstr ""
+msgstr "PIN:"
-#, fuzzy
msgid "Passphrase:"
-msgstr "passphrase errata"
+msgstr "Passphrase:"
msgid "does not match - try again"
-msgstr ""
+msgstr "non corrisponde - riprova"
#. TRANSLATORS: The string is appended to an error message in
#. the pinentry. The %s is the actual error message, the
@@ -98,229 +98,217 @@ msgstr ""
#. two %d give the current and maximum number of tries.
#, c-format
msgid "SETERROR %s (try %d of %d)"
-msgstr ""
+msgstr "SETERROR %s (provare %d di %d)"
msgid "Repeat:"
-msgstr ""
+msgstr "Ripeti :"
-#, fuzzy
msgid "PIN too long"
-msgstr "riga troppo lunga\n"
+msgstr "PIN troppo lungo"
-#, fuzzy
msgid "Passphrase too long"
-msgstr "passphrase troppo lunga\n"
+msgstr "Passphrase troppo lunga"
-#, fuzzy
msgid "Invalid characters in PIN"
-msgstr "Carattere non valido nel nome\n"
+msgstr "Caratteri non validi nel PIN"
msgid "PIN too short"
-msgstr ""
+msgstr "PIN troppo corto"
-#, fuzzy
msgid "Bad PIN"
-msgstr "MPI danneggiato"
+msgstr "PIN non valido"
-#, fuzzy
msgid "Bad Passphrase"
-msgstr "passphrase errata"
+msgstr "Passphrase non valido"
-#, fuzzy, c-format
+#, c-format
msgid "ssh keys greater than %d bits are not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "le chiavi ssh maggiori di %d bit non sono supportate\n"
-#, fuzzy, c-format
-#| msgid "can't create `%s': %s\n"
+#, c-format
msgid "can't create '%s': %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile creare '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "can't open `%s': %s\n"
+#, c-format
msgid "can't open '%s': %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "impossibile aprire '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting serial number of card: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero del numero di serie della scheda: %s\n"
#, c-format
msgid "detected card with S/N: %s\n"
-msgstr ""
+msgstr "scheda rilevata con S/N: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no authentication key for ssh on card: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr "nessuna chiave di autenticazione per ssh sulla scheda: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no suitable card key found: %s\n"
-msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n"
+msgstr "nessuna chiave della scheda adatta trovata: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting list of cards: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero dell'elenco delle schede: %s\n"
#, c-format
msgid ""
"An ssh process requested the use of key%%0A %s%%0A (%s)%%0ADo you want to "
"allow this?"
msgstr ""
+"Un processo ssh ha richiesto l'utilizzo della chiave%%0A %s%%0A (%s)%%0ASi "
+"desidera consentire questa operazione?"
msgid "Allow"
-msgstr ""
+msgstr "Permettere"
msgid "Deny"
-msgstr ""
+msgstr "Rifiutare"
-#, fuzzy, c-format
+#, c-format
msgid "Please enter the passphrase for the ssh key%%0A %F%%0A (%c)"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per la chiave ssh%%0A %F%%0A (%c)"
-#, fuzzy
msgid "Please re-enter this passphrase"
-msgstr "cambia la passphrase"
+msgstr "Inserisci di nuovo questa passphrase"
-#, fuzzy, c-format
+#, c-format
msgid ""
"Please enter a passphrase to protect the received secret key%%0A %s%%0A "
"%s%%0Awithin gpg-agent's key storage"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr ""
+"Immettere una passphrase per proteggere la chiave segreta ricevuta%%0A %s"
+"%%0A %s%%0A all'interno dell'archivio chiavi dell'agente gpg"
-#, fuzzy, c-format
+#, c-format
msgid "failed to create stream from socket: %s\n"
-msgstr "%s: creazione della tabella hash fallita: %s\n"
+msgstr "impossibile creare il flusso dal socket: %s\n"
msgid "Please insert the card with serial number"
-msgstr ""
+msgstr "Inserire la scheda con il numero di serie"
msgid "Please remove the current card and insert the one with serial number"
-msgstr ""
+msgstr "Rimuovere la carta corrente e inserire quella con il numero di serie"
msgid "Admin PIN"
-msgstr ""
+msgstr "PIN amministratore"
#. TRANSLATORS: A PUK is the Personal Unblocking Code
#. used to unblock a PIN.
msgid "PUK"
-msgstr ""
+msgstr "PUK"
msgid "Reset Code"
-msgstr ""
+msgstr "Resetta codice"
msgid "Push ACK button on card/token."
-msgstr ""
+msgstr "Premere il pulsante ACK sulla scheda/token."
msgid "Use the reader's pinpad for input."
-msgstr ""
+msgstr "Utilizzare il pinpad del lettore per l'input."
-#, fuzzy
msgid "Repeat this Reset Code"
-msgstr "Ripeti la passphrase: "
+msgstr "Ripeti questo codice di reimpostazione"
-#, fuzzy
msgid "Repeat this PUK"
-msgstr "Ripeti la passphrase: "
+msgstr "Ripeti questo PUK"
-#, fuzzy
msgid "Repeat this PIN"
-msgstr "Ripeti la passphrase: "
+msgstr "Ripeti questo PIN"
-#, fuzzy
msgid "Reset Code not correctly repeated; try again"
-msgstr "passphrase non ripetuta correttamente; prova ancora"
+msgstr "Reimpostare il codice non ripetuto correttamente; Riprova"
-#, fuzzy
msgid "PUK not correctly repeated; try again"
-msgstr "passphrase non ripetuta correttamente; prova ancora"
+msgstr "PUK non ripetuto correttamente; Riprova"
-#, fuzzy
msgid "PIN not correctly repeated; try again"
-msgstr "passphrase non ripetuta correttamente; prova ancora"
+msgstr "PIN non ripetuto correttamente; Riprova"
#, c-format
msgid "Please enter the PIN%s%s%s to unlock the card"
-msgstr ""
+msgstr "Immettere il PIN%s%s%s per sbloccare la scheda"
-#, fuzzy, c-format
+#, c-format
msgid "error creating temporary file: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la creazione del file temporaneo: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error writing to temporary file: %s\n"
-msgstr "scrittura in `%s'\n"
+msgstr "errore durante la scrittura nel file temporaneo: %s\n"
-#, fuzzy
msgid "Enter new passphrase"
-msgstr "Inserisci la passphrase\n"
+msgstr "Inserisci la nuova passphrase"
-#, fuzzy
msgid "Take this one anyway"
-msgstr "Uso lo stesso questa chiave? "
+msgstr "Prendi questo comunque"
#, c-format
msgid ""
"You have not entered a passphrase!%0AAn empty passphrase is not allowed."
msgstr ""
+"Non è stata immessa una passphrase!%0AUna passphrase vuota non è consentita."
#, c-format
msgid ""
"You have not entered a passphrase - this is in general a bad idea!%0APlease "
"confirm that you do not want to have any protection on your key."
msgstr ""
+"Non è stata inserita una passphrase- in generale è una cattiva idea!%0ASi "
+"prega di confermare che non si desidera disporre di alcuna protezione sulla "
+"chiave."
msgid "Yes, protection is not needed"
-msgstr ""
+msgstr "Sì, la protezione non è necessaria"
-#, fuzzy, c-format
-#| msgid "Name must be at least 5 characters long\n"
+#, c-format
msgid "A passphrase should be at least %u character long."
msgid_plural "A passphrase should be at least %u characters long."
-msgstr[0] "Il nome deve essere lungo almeno 5 caratteri\n"
-msgstr[1] "Il nome deve essere lungo almeno 5 caratteri\n"
+msgstr[0] "Una passphrase deve avere almeno lunga %u carattere."
+msgstr[1] "Una passphrase deve avere almeno lunga %u caratteri."
#, c-format
msgid "A passphrase should contain at least %u digit or%%0Aspecial character."
msgid_plural ""
"A passphrase should contain at least %u digits or%%0Aspecial characters."
msgstr[0] ""
+"Una passphrase deve contenere almeno %u cifra o%%0Acarattere speciale."
msgstr[1] ""
+"Una passphrase deve contenere almeno %u cifre o%%0Acaratteri speciali."
#, c-format
msgid "A passphrase may not be a known term or match%%0Acertain pattern."
msgstr ""
+"Una passphrase non può essere un termine noto o corrispondere%%0Acertain "
+"modello."
msgid "Warning: You have entered an insecure passphrase."
-msgstr ""
+msgstr "Avviso: è stata immessa una passphrase non sicura."
-#, fuzzy, c-format
+#, c-format
msgid "Please enter the passphrase to%0Aprotect your new key"
-msgstr ""
-"Ti serve una passphrase per proteggere la tua chiave segreta.\n"
-"\n"
+msgstr "Immettere la passphrase a%0Aproteggere la nuova chiave"
-#, fuzzy
msgid "Please enter the new passphrase"
-msgstr "cambia la passphrase"
+msgstr "Inserisci la nuova passphrase"
-#, fuzzy
msgid ""
"@Options:\n"
" "
msgstr ""
-"@\n"
-"Opzioni:\n"
+"@Optioni:\n"
" "
msgid "run in daemon mode (background)"
-msgstr ""
+msgstr "eseguire in modalità daemon (sfondo)"
msgid "run in server mode (foreground)"
-msgstr ""
+msgstr "eseguire in modalità server (in primo piano)"
-#, fuzzy
-#| msgid "Key is superseded"
msgid "run in supervised mode"
-msgstr "Questa chiave è stata sostituita"
+msgstr "eseguire in modalità supervisionata"
msgid "verbose"
msgstr "prolisso"
@@ -329,208 +317,194 @@ msgid "be somewhat more quiet"
msgstr "meno prolisso"
msgid "sh-style command output"
-msgstr ""
+msgstr "uscita del comando sh-stile"
msgid "csh-style command output"
-msgstr ""
+msgstr "uscita del comando in csh-stile"
-#, fuzzy
msgid "|FILE|read options from FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|opzioni di lettura da FILE"
msgid "do not detach from the console"
-msgstr ""
+msgstr "non scollegarsi dalla console"
-#, fuzzy
msgid "use a log file for the server"
-msgstr "cerca delle chiavi su un keyserver"
+msgstr "utilizzare un file di registro per il server"
msgid "|PGM|use PGM as the PIN-Entry program"
-msgstr ""
+msgstr "| PGM|utilizzare PGM come programma PIN-Entry"
msgid "|PGM|use PGM as the SCdaemon program"
-msgstr ""
+msgstr "| PGM| utilizzare PGM come programma SCdaemon"
-#, fuzzy
msgid "do not use the SCdaemon"
-msgstr "aggiorna il database della fiducia"
+msgstr "non utilizzare il SCdaemon"
-#, fuzzy
-#| msgid "|NAME|set terminal charset to NAME"
msgid "|NAME|accept some commands via NAME"
-msgstr "|NOME|imposta NOME come set di caratteri del terminale"
+msgstr "|NAME|accettare alcuni comandi tramite NAME"
msgid "ignore requests to change the TTY"
-msgstr ""
+msgstr "ignorare le richieste di modifica del TTY"
msgid "ignore requests to change the X display"
-msgstr ""
+msgstr "ignorare le richieste di modifica della visualizzazione X"
msgid "|N|expire cached PINs after N seconds"
-msgstr ""
+msgstr "|N|scadenza PIN memorizzati nella cache dopo N secondi"
msgid "do not use the PIN cache when signing"
-msgstr ""
+msgstr "non utilizzare la cache PIN durante la firma"
-#, fuzzy
msgid "disallow the use of an external password cache"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "non consentire l'uso di una cache di password esterna"
msgid "disallow clients to mark keys as \"trusted\""
msgstr ""
+"non consentire ai client di contrassegnare le chiavi come \"attendibili\""
-#, fuzzy
msgid "allow presetting passphrase"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "consentire la preimpostazione della passphrase"
msgid "disallow caller to override the pinentry"
-msgstr ""
+msgstr "non consentire al chiamante di eseguire l'override del pinentry"
msgid "allow passphrase to be prompted through Emacs"
-msgstr ""
+msgstr "consentire la passphrase tramite Emacs"
-#, fuzzy
-#| msgid "not supported"
msgid "enable ssh support"
-msgstr "non gestito"
+msgstr "abilitare il supporto ssh"
msgid "|ALGO|use ALGO to show ssh fingerprints"
-msgstr ""
+msgstr "|ALGO|usa ALGO per mostrare le impronte digitali ssh"
-#, fuzzy
-#| msgid "not supported"
msgid "enable putty support"
-msgstr "non gestito"
+msgstr "abilitare il supporto putty"
#. TRANSLATORS: @EMAIL@ will get replaced by the actual bug
#. reporting address. This is so that we can change the
#. reporting address without breaking the translations.
-#, fuzzy
msgid "Please report bugs to <@EMAIL@>.\n"
-msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n"
+msgstr "Segnalare i bug a <@EMAIL@>.\n"
-#, fuzzy
msgid "Usage: @GPG_AGENT@ [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @GPG_AGENT@ [opzioni] (-h per assistenza)"
msgid ""
"Syntax: @GPG_AGENT@ [options] [command [args]]\n"
"Secret key management for @GNUPG@\n"
msgstr ""
+"Sintassi: @GPG_AGENT@ [opzioni] [comando [args]]\n"
+"Gestione delle chiavi segrete per @GNUPG@\n"
#, c-format
msgid "invalid debug-level '%s' given\n"
-msgstr ""
+msgstr "'%s' a livello di debug non valido specificato\n"
#, c-format
msgid "selected digest algorithm is invalid\n"
msgstr "l'algoritmo di digest selezionato non è valido\n"
-#, fuzzy, c-format
-#| msgid "NOTE: no default option file `%s'\n"
+#, c-format
msgid "Note: no default option file '%s'\n"
-msgstr "NOTA: manca il file `%s' con le opzioni predefinite\n"
+msgstr "Nota: nessun file di opzioni predefinito '%s'\n"
-#, fuzzy, c-format
-#| msgid "option file `%s': %s\n"
+#, c-format
msgid "option file '%s': %s\n"
-msgstr "file con le opzioni `%s': %s\n"
+msgstr "file di opzioni '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "reading options from `%s'\n"
+#, c-format
msgid "reading options from '%s'\n"
-msgstr "lettura delle opzioni da `%s'\n"
+msgstr "opzioni di lettura da '%s'\n"
-#, fuzzy, c-format
-#| msgid "WARNING: \"%s\" is a deprecated option\n"
+#, c-format
msgid "Note: '%s' is not considered an option\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr "Nota: '%s' non è considerato un'opzione\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't create socket: %s\n"
-msgstr "impossibile creare %s: %s\n"
+msgstr "impossibile creare il socket: %s\n"
#, c-format
msgid "socket name '%s' is too long\n"
-msgstr ""
+msgstr "il nome socket '%s' è troppo lungo\n"
-#, fuzzy, c-format
+#, c-format
msgid "a gpg-agent is already running - not starting a new one\n"
-msgstr "gpg-agent non è disponibile in questa sessione\n"
+msgstr "un gpg-agent è già in esecuzione - non iniziare uno nuovo\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting nonce for the socket\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero di un errore per il socket\n"
-#, fuzzy, c-format
+#, c-format
msgid "error binding socket to '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'associazione del socket a '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't set permissions of '%s': %s\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr "impossibile impostare le autorizzazioni di '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "listening on socket '%s'\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "ascolto sul socket '%s'\n"
-#, fuzzy, c-format
-#| msgid "can't create directory `%s': %s\n"
+#, c-format
msgid "can't create directory '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "impossibile creare la directory '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "directory '%s' created\n"
-msgstr "%s: directory creata\n"
+msgstr "directory '%s' creata\n"
-#, fuzzy, c-format
+#, c-format
msgid "stat() failed for '%s': %s\n"
-msgstr "trustdb: read fallita (n=%d): %s\n"
+msgstr "stat() non riuscito per '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't use '%s' as home directory\n"
-msgstr "%s: impossibile creare la directory: %s\n"
+msgstr "impossibile utilizzare '%s' come home directory\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading nonce on fd %d: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura del nonce su fd %d: %s\n"
#, c-format
msgid "handler 0x%lx for fd %d started\n"
-msgstr ""
+msgstr "gestore 0x%lx per fd %d avviato\n"
#, c-format
msgid "handler 0x%lx for fd %d terminated\n"
-msgstr ""
+msgstr "gestore 0x%lx per fd %d terminato\n"
#, c-format
msgid "ssh handler 0x%lx for fd %d started\n"
-msgstr ""
+msgstr "gestore ssh 0x%lx per fd %d avviato\n"
#, c-format
msgid "ssh handler 0x%lx for fd %d terminated\n"
-msgstr ""
+msgstr "gestore ssh 0x%lx per fd %d terminato\n"
-#, fuzzy, c-format
+#, c-format
msgid "npth_pselect failed: %s - waiting 1s\n"
-msgstr "aggiornamento della chiave segreta fallito: %s\n"
+msgstr "npth_pselect non riuscito: %s - 1s in attesa\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s %s stopped\n"
-msgstr "%s: saltata: %s\n"
+msgstr "%s %s arrestato\n"
-#, fuzzy, c-format
+#, c-format
msgid "no gpg-agent running in this session\n"
-msgstr "gpg-agent non è disponibile in questa sessione\n"
+msgstr "nessun gpg-agent in esecuzione in questa sessione\n"
-#, fuzzy
msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)\n"
msgid ""
"Syntax: gpg-preset-passphrase [options] KEYGRIP\n"
"Password cache maintenance\n"
msgstr ""
+"Sintassi: gpg-preset-passphrase [opzioni] KEYGRIP\n"
+"Manutenzione della cache delle password\n"
msgid ""
"@Commands:\n"
@@ -548,73 +522,77 @@ msgstr ""
"Opzioni:\n"
" "
-#, fuzzy
msgid "Usage: gpg-protect-tool [options] (-h for help)\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: gpg-protect-tool [opzioni] (-h per assistenza)\n"
msgid ""
"Syntax: gpg-protect-tool [options] [args]\n"
"Secret key maintenance tool\n"
msgstr ""
+"Sintassi: gpg-protect-tool [opzioni] [args]\n"
+"Strumento di manutenzione della chiave segreta\n"
-#, fuzzy
msgid "Please enter the passphrase to unprotect the PKCS#12 object."
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr ""
+"Immettere la passphrase per rimuovere la protezione dell'oggetto PKCS.12."
-#, fuzzy
msgid "Please enter the passphrase to protect the new PKCS#12 object."
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per proteggere il nuovo oggetto PKCS.12."
msgid ""
"Please enter the passphrase to protect the imported object within the GnuPG "
"system."
msgstr ""
+"Immettere la passphrase per proteggere l'oggetto importato all'interno del "
+"sistema GnuPG."
-#, fuzzy
msgid ""
"Please enter the passphrase or the PIN\n"
"needed to complete this operation."
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr ""
+"Inserisci la passphrase o il PIN\n"
+"necessario per completare questa operazione."
-#, fuzzy, c-format
+#, c-format
msgid "cancelled\n"
-msgstr "Cancella"
+msgstr "annullato\n"
-#, fuzzy, c-format
+#, c-format
msgid "error while asking for the passphrase: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la richiesta della passphrase: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error opening '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'apertura di '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "file '%s', line %d: %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "file '%s', riga %d: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "statement \"%s\" ignored in '%s', line %d\n"
-msgstr "errore di lettura: %s\n"
+msgstr "istruzione \"%s\" ignorata in '%s', riga %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "system trustlist '%s' not available\n"
-msgstr "parti della chiave segreta non sono disponibili\n"
+msgstr "elenco di attendibilità del sistema '%s' non disponibile\n"
-#, fuzzy, c-format
+#, c-format
msgid "bad fingerprint in '%s', line %d\n"
-msgstr "errore di lettura: %s\n"
+msgstr "impronta digitale non valido in '%s', riga %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid keyflag in '%s', line %d\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "keyflag non valido in '%s', riga %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading '%s', line %d: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura di '%s', riga %d: %s\n"
#, c-format
msgid "error reading list of trusted root certificates\n"
msgstr ""
+"errore durante la lettura dell'elenco dei certificati radice attendibili\n"
#. TRANSLATORS: This prompt is shown by the Pinentry
#. and has one special property: A "%%0A" is used by
@@ -629,13 +607,14 @@ msgid ""
"Do you ultimately trust%%0A \"%s\"%%0Ato correctly certify user "
"certificates?"
msgstr ""
+"Alla fine ti fidi di %% 0A \"% s\" %%0Aper certificare correttamente i "
+"certificati utente?"
-#, fuzzy
msgid "Yes"
-msgstr "si|sì"
+msgstr "Sì"
msgid "No"
-msgstr ""
+msgstr "No"
#. TRANSLATORS: This prompt is shown by the Pinentry and has
#. one special property: A "%%0A" is used by Pinentry to
@@ -650,59 +629,67 @@ msgid ""
"Please verify that the certificate identified as:%%0A \"%s\"%%0Ahas the "
"fingerprint:%%0A %s"
msgstr ""
+"Verificare che il certificato identificato come:%%0A \"%s\"%%0Al'impronta "
+"digitale:%%0A %s"
#. TRANSLATORS: "Correct" is the label of a button and intended
#. to be hit if the fingerprint matches the one of the CA. The
#. other button is "the default "Cancel" of the Pinentry.
msgid "Correct"
-msgstr ""
+msgstr "Corretto"
msgid "Wrong"
-msgstr ""
+msgstr "Sbagliato"
#, c-format
msgid "Note: This passphrase has never been changed.%0APlease change it now."
msgstr ""
+"Nota: questa passphrase non è mai stata modificata.%0ASi prega di cambiarlo "
+"ora."
#, c-format
msgid ""
"This passphrase has not been changed%%0Asince %.4s-%.2s-%.2s. Please change "
"it now."
msgstr ""
+"Questa passphrase non è stata modificata%%0Ada %.4s-%.2s-%.2s. Si prega di "
+"cambiarlo ora."
-#, fuzzy
msgid "Change passphrase"
-msgstr "cambia la passphrase"
+msgstr "Modifica passphrase"
msgid "I'll change it later"
-msgstr ""
+msgstr "Lo cambierò più tardi"
-#, fuzzy, c-format
+#, c-format
msgid ""
"Do you really want to delete the key identified by keygrip%%0A %s%%0A %%C"
"%%0A?"
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
+msgstr ""
+"Si desidera eliminare la chiave identificata da keygrip%%0A %s%%0A %%C%%0A?"
-#, fuzzy
msgid "Delete key"
-msgstr "abilita una chiave"
+msgstr "Elimina chiave"
msgid ""
"Warning: This key is also listed for use with SSH!\n"
"Deleting the key might remove your ability to access remote machines."
msgstr ""
+"Attenzione: questa chiave è elencata anche per l'uso con SSH!\n"
+"L'eliminazione della chiave potrebbe rimuovere la possibilità di accedere ai "
+"computer remoti."
#, c-format
msgid "DSA requires the hash length to be a multiple of 8 bits\n"
-msgstr ""
+msgstr "DSA richiede che la lunghezza dell'hash sia un multiplo di 8 bit\n"
#, c-format
msgid "%s key uses an unsafe (%u bit) hash\n"
-msgstr ""
+msgstr "La chiave %s utilizza un hash unsafe (%u bit)\n"
#, c-format
msgid "a %zu bit hash is not valid for a %u bit %s key\n"
-msgstr ""
+msgstr "un hash di bit %zu non è valido per una chiave %u bit %s\n"
#, c-format
msgid "checking created signature failed: %s\n"
@@ -712,89 +699,85 @@ msgstr "controllo della firma creata fallito: %s\n"
msgid "secret key parts are not available\n"
msgstr "parti della chiave segreta non sono disponibili\n"
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
msgid "public key algorithm %d (%s) is not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "l'algoritmo a chiave pubblica %d (%s) non è supportato\n"
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
msgid "protection algorithm %d (%s) is not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "algoritmo di protezione %d (%s) non supportato\n"
-#, fuzzy, c-format
-#| msgid "protection algorithm %d%s is not supported\n"
+#, c-format
msgid "protection hash algorithm %d (%s) is not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "algoritmo hash di protezione %d (%s) non supportato\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating a pipe: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la creazione di una pipe: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating a stream for a pipe: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la creazione di un flusso per una pipe: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error forking process: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante il processo di forking: %s\n"
#, c-format
msgid "waiting for process %d to terminate failed: %s\n"
-msgstr ""
+msgstr "in attesa della terminazione del processo %d non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error running '%s': probably not installed\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'esecuzione di '%s': probabilmente non installato\n"
-#, fuzzy, c-format
+#, c-format
msgid "error running '%s': exit status %d\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'esecuzione di '%s': stato di uscita %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "error running '%s': terminated\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'esecuzione di '%s': terminato\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for processes to terminate failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "attesa della terminazione dei processi non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting exit code of process %d: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr "errore durante l'osando di fine del processo %d: %s\n"
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
msgid "can't connect to '%s': %s\n"
-msgstr "impossibile connettersi a `%s': %s\n"
+msgstr "impossibile connettersi a '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem setting the gpg-agent options\n"
-msgstr "problema con l'agent: ha restituito 0x%lx\n"
+msgstr "problema durante l'impostazione delle opzioni gpg-agent\n"
#, c-format
msgid "can't disable core dumps: %s\n"
msgstr "impossibile disabilitare i core dump: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Warning: unsafe ownership on %s \"%s\"\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr "Avviso: proprietà non sicura su %s \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "Warning: unsafe permissions on %s \"%s\"\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr "Avviso: autorizzazioni non sicure su %s \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for file '%s' to become accessible ...\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "in attesa che il file '%s' diventi accessibile …\n"
-#, fuzzy, c-format
+#, c-format
msgid "renaming '%s' to '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "ridenominazione di '%s' in '%s' non riuscita: %s\n"
#. TRANSLATORS: See doc/TRANSLATE about this string.
msgid "yes"
-msgstr "si|sì"
+msgstr "sì"
msgid "yY"
msgstr "sS"
@@ -808,356 +791,318 @@ msgstr "nN"
#. TRANSLATORS: See doc/TRANSLATE about this string.
msgid "quit"
-msgstr "quit"
+msgstr "esci"
msgid "qQ"
msgstr "qQ"
#. TRANSLATORS: See doc/TRANSLATE about this string.
msgid "okay|okay"
-msgstr ""
+msgstr "okay|okay"
#. TRANSLATORS: See doc/TRANSLATE about this string.
msgid "cancel|cancel"
-msgstr ""
+msgstr "cancella|cancella"
msgid "oO"
-msgstr ""
+msgstr "oO"
-#, fuzzy
msgid "cC"
-msgstr "c"
+msgstr "cC"
#, c-format
msgid "out of core in secure memory while allocating %lu bytes"
msgstr ""
+"fuori dal nucleo nella memoria sicura durante l'allocazione di %lu byte"
#, c-format
msgid "out of core while allocating %lu bytes"
-msgstr ""
+msgstr "fuori dal core durante l'allocazione di %lu byte"
-#, fuzzy, c-format
+#, c-format
msgid "error allocating enough memory: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante l'allocazione di memoria sufficiente: %s\n"
#, c-format
msgid "%s:%u: obsolete option \"%s\" - it has no effect\n"
-msgstr ""
+msgstr "%s:%u: opzione obsoleta \"%s\" - non ha effetto\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr "AVVISO: \"%s%s\" è un'opzione obsoleta - non ha alcun effetto\n"
#, c-format
msgid "unknown debug flag '%s' ignored\n"
-msgstr ""
+msgstr "flag di debug sconosciuto '%s' ignorato\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for the %s to come up ... (%ds)\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "in attesa che venga in corso il %s... (%ds)\n"
-#, fuzzy, c-format
+#, c-format
msgid "connection to %s established\n"
-msgstr "impossibile fare questo in modo batch\n"
+msgstr "connessione a %s stabilita\n"
#, c-format
msgid "no running gpg-agent - starting '%s'\n"
-msgstr ""
+msgstr "nessun gpg-agent in esecuzione - avvio '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "connection to agent is in restricted mode\n"
-msgstr "impossibile fare questo in modo batch\n"
+msgstr "connessione all'agente è in modalità limitata\n"
#, c-format
msgid "no running Dirmngr - starting '%s'\n"
-msgstr ""
+msgstr "nessun Dirmngr in esecuzione - avvio di '%s'\n"
#. TRANSLATORS: Copy the prefix between the vertical bars
#. verbatim. It will not be printed.
msgid "|audit-log-result|Good"
-msgstr ""
+msgstr "-audit-log-result|Buono"
msgid "|audit-log-result|Bad"
-msgstr ""
+msgstr "-audit-log-result|Cattivo"
msgid "|audit-log-result|Not supported"
-msgstr ""
+msgstr "-audit-log-result|Non supportato"
-#, fuzzy
msgid "|audit-log-result|No certificate"
-msgstr "certificato danneggiato"
+msgstr "-audit-log-result|Nessun certificato"
-#, fuzzy
msgid "|audit-log-result|Not enabled"
-msgstr "certificato danneggiato"
+msgstr "|-audit-log-result|Non abilitato"
msgid "|audit-log-result|Error"
-msgstr ""
+msgstr "-audit-log-result|Errore"
-#, fuzzy
msgid "|audit-log-result|Not used"
-msgstr "certificato danneggiato"
+msgstr "|audit-log-result| Non utilizzato"
-#, fuzzy
msgid "|audit-log-result|Okay"
-msgstr "certificato danneggiato"
+msgstr "|audit-log-result|ok"
-#, fuzzy
msgid "|audit-log-result|Skipped"
-msgstr "certificato danneggiato"
+msgstr "|audit-log-result|Saltato"
-#, fuzzy
msgid "|audit-log-result|Some"
-msgstr "certificato danneggiato"
+msgstr "|audit-log-result|alcuni"
-#, fuzzy
msgid "Certificate chain available"
-msgstr "certificato danneggiato"
+msgstr "Catena di certificati disponibile"
-#, fuzzy
msgid "root certificate missing"
-msgstr "certificato danneggiato"
+msgstr "certificato radice mancante"
msgid "Data encryption succeeded"
-msgstr ""
+msgstr "Crittografia dei dati riuscita"
-#, fuzzy
msgid "Data available"
-msgstr "Chiave disponibile presso: "
+msgstr "Dati disponibili"
-#, fuzzy
msgid "Session key created"
-msgstr "%s: portachiavi creato\n"
+msgstr "Chiave di sessione creata"
-#, fuzzy, c-format
+#, c-format
msgid "algorithm: %s"
-msgstr "armatura: %s\n"
+msgstr "algoritmo: %s"
-#, fuzzy, c-format
+#, c-format
msgid "unsupported algorithm: %s"
-msgstr ""
-"\n"
-"Algoritmi gestiti:\n"
+msgstr "algoritmo non supportato: %s"
-#, fuzzy
msgid "seems to be not encrypted"
-msgstr "non cifrato"
+msgstr "sembra non essere criptato"
msgid "Number of recipients"
-msgstr ""
+msgstr "Numero di destinatari"
#, c-format
msgid "Recipient %d"
-msgstr ""
+msgstr "Destinatario %d"
msgid "Data signing succeeded"
-msgstr ""
+msgstr "Firma dei dati riuscita"
-#, fuzzy, c-format
+#, c-format
msgid "data hash algorithm: %s"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "algoritmo hash dati: %s"
-#, fuzzy, c-format
+#, c-format
msgid "Signer %d"
-msgstr "Firma scaduta il %s\n"
+msgstr "Firmatario %d"
-#, fuzzy, c-format
+#, c-format
msgid "attr hash algorithm: %s"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "algoritmo hash attr: %s"
msgid "Data decryption succeeded"
-msgstr ""
+msgstr "Decrittografia dei dati riuscita"
-#, fuzzy
msgid "Encryption algorithm supported"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "Algoritmo di crittografia supportato"
-#, fuzzy
msgid "Data verification succeeded"
-msgstr "verifica della firma soppressa\n"
+msgstr "Verifica dei dati riuscita"
-#, fuzzy
msgid "Signature available"
-msgstr "Firma scaduta il %s\n"
+msgstr "Firma disponibile"
-#, fuzzy
msgid "Parsing data succeeded"
-msgstr "Firma valida da \""
+msgstr "Analisi dei dati riuscita"
-#, fuzzy, c-format
+#, c-format
msgid "bad data hash algorithm: %s"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "algoritmo hash dei dati non valido: %s"
-#, fuzzy, c-format
+#, c-format
msgid "Signature %d"
-msgstr "Firma scaduta il %s\n"
+msgstr "Firma %d"
-#, fuzzy
msgid "Certificate chain valid"
-msgstr "Questa chiave è scaduta!"
+msgstr "Catena di certificati valida"
-#, fuzzy
msgid "Root certificate trustworthy"
-msgstr "certificato danneggiato"
+msgstr "Certificato radice attendibile"
-#, fuzzy
msgid "no CRL found for certificate"
-msgstr "certificato danneggiato"
+msgstr "nessun CRL trovato per il certificato"
-#, fuzzy
msgid "the available CRL is too old"
-msgstr "Chiave disponibile presso: "
+msgstr "il CRL disponibile è troppo vecchio"
-#, fuzzy
msgid "CRL/OCSP check of certificates"
-msgstr "certificato danneggiato"
+msgstr "Controllo CRL/OCSP dei certificati"
-#, fuzzy
msgid "Included certificates"
-msgstr "certificato danneggiato"
+msgstr "Certificati inclusi"
msgid "No audit log entries."
-msgstr ""
+msgstr "Nessuna voce del log di controllo."
-#, fuzzy
msgid "Unknown operation"
-msgstr "versione sconosciuta"
+msgstr "Operazione sconosciuta"
msgid "Gpg-Agent usable"
-msgstr ""
+msgstr "Gpg-Agente utilizzabile"
msgid "Dirmngr usable"
-msgstr ""
+msgstr "Dirmngr utilizzabile"
-#, fuzzy, c-format
+#, c-format
msgid "No help available for '%s'."
-msgstr "Non è disponibile un aiuto per `%s'"
+msgstr "Nessuna Guida disponibile per '%s'."
-#, fuzzy
msgid "ignoring garbage line"
-msgstr "errore nella riga della coda\n"
+msgstr "ignorando la linea spazzatura"
-#, fuzzy
msgid "[none]"
-msgstr "sconosciuto"
+msgstr "[nessuno]"
-#, fuzzy, c-format
+#, c-format
msgid "invalid radix64 character %02x skipped\n"
-msgstr "Carattere radix64 non valido %02x saltato\n"
+msgstr "carattere radix64 non valido %02x ignorato\n"
-#, fuzzy
msgid "argument not expected"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "argomento non previsto"
-#, fuzzy
msgid "read error"
-msgstr "errore durante la lettura del file"
+msgstr "errore di lettura"
-#, fuzzy
msgid "keyword too long"
-msgstr "riga troppo lunga\n"
+msgstr "parola chiave troppo lunga"
-#, fuzzy
msgid "missing argument"
-msgstr "argomento non valido"
+msgstr "argomento mancante"
-#, fuzzy
-#| msgid "invalid armor"
msgid "invalid argument"
-msgstr "armatura non valida"
+msgstr "argomento non valido"
-#, fuzzy
msgid "invalid command"
-msgstr "comandi in conflitto\n"
+msgstr "comando non valido"
-#, fuzzy
msgid "invalid alias definition"
-msgstr "opzioni di importazione non valide\n"
+msgstr "definizione di alias non valida"
-# ??? (Md)
-#, fuzzy
msgid "out of core"
-msgstr "non esaminato"
+msgstr "fuori dal nucleo"
-#, fuzzy
msgid "invalid option"
-msgstr "opzioni di importazione non valide\n"
+msgstr "opzione non valida"
#, c-format
msgid "missing argument for option \"%.50s\"\n"
-msgstr ""
+msgstr "argomento mancante per l'opzione \"%.50s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid argument for option \"%.50s\"\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "argomento non valido per l'opzione \"%.50s\"\n"
#, c-format
msgid "option \"%.50s\" does not expect an argument\n"
-msgstr ""
+msgstr "l'opzione \"%.50s\" non prevede un argomento\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid command \"%.50s\"\n"
-msgstr "Comando non valido (prova \"help\")\n"
+msgstr "comando non valido \"%.50s\"\n"
#, c-format
msgid "option \"%.50s\" is ambiguous\n"
-msgstr ""
+msgstr "l'opzione \"%.50s\" è ambigua\n"
#, c-format
msgid "command \"%.50s\" is ambiguous\n"
-msgstr ""
+msgstr "il comando \"%.50s\" è ambiguo\n"
-# ??? (Md)
-#, fuzzy, c-format
+#, c-format
msgid "out of core\n"
-msgstr "non esaminato"
+msgstr "fuori dal nucleo\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid option \"%.50s\"\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "opzione non valida \"%.50s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "conversion from '%s' to '%s' not available\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "conversione da '%s' a '%s' non disponibile\n"
-#, fuzzy, c-format
+#, c-format
msgid "iconv_open failed: %s\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "iconv_open non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "conversion from '%s' to '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "conversione da '%s' a '%s' non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to create temporary file '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "impossibile creare il file temporaneo '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error writing to '%s': %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la scrittura in '%s': %s\n"
#, c-format
msgid "removing stale lockfile (created by %d)\n"
-msgstr ""
+msgstr "rimozione del file di blocco non più utilizzato (creato da %d)\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for lock (held by %d%s) %s...\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "in attesa di blocco (in attesa di %d%s) %s...\n"
msgid "(deadlock?) "
-msgstr ""
+msgstr "(deadlock?) "
-#, fuzzy, c-format
+#, c-format
msgid "lock '%s' not made: %s\n"
-msgstr "chiave pubblica %08lX non trovata: %s\n"
+msgstr "blocco '%s' non effettuato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for lock %s...\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "attesa del blocco %s...\n"
#, c-format
msgid "%s is too old (need %s, have %s)\n"
-msgstr ""
+msgstr "%s è troppo vecchio (è necessario %s, con %s)\n"
#, c-format
msgid "armor: %s\n"
@@ -1175,25 +1120,25 @@ msgstr "header dell'armatura: "
msgid "invalid clearsig header\n"
msgstr "header della firma in chiaro non valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown armor header: "
-msgstr "header dell'armatura: "
+msgstr "intestazione armatura sconosciuta: "
#, c-format
msgid "nested clear text signatures\n"
msgstr "firme in chiaro annidate\n"
-#, fuzzy, c-format
+#, c-format
msgid "unexpected armor: "
-msgstr "armatura inaspettata:"
+msgstr "armatura inaspettata: "
#, c-format
msgid "invalid dash escaped line: "
msgstr "riga protetta con il trattino non valida: "
-#, fuzzy, c-format
+#, c-format
msgid "invalid radix64 character %02X skipped\n"
-msgstr "Carattere radix64 non valido %02x saltato\n"
+msgstr "carattere radix64 non valido %02x ignorato\n"
#, c-format
msgid "premature eof (no CRC)\n"
@@ -1207,13 +1152,13 @@ msgstr "eof prematura (nel CRC)\n"
msgid "malformed CRC\n"
msgstr "CRC malformato\n"
-#, fuzzy, c-format
+#, c-format
msgid "CRC error; %06lX - %06lX\n"
-msgstr "errore nel CRC; %06lx - %06lx\n"
+msgstr "Errore CRC; %06lX - %06lX\n"
-#, fuzzy, c-format
+#, c-format
msgid "premature eof (in trailer)\n"
-msgstr "eof prematura (nella coda)\n"
+msgstr "eof prematuro (nel rimorchio)\n"
#, c-format
msgid "error in trailer line\n"
@@ -1221,7 +1166,7 @@ msgstr "errore nella riga della coda\n"
#, c-format
msgid "no valid OpenPGP data found.\n"
-msgstr "Non sono stati trovati dati OpenPGP validi.\n"
+msgstr "non sono stati trovati dati OpenPGP validi.\n"
#, c-format
msgid "invalid armor: line longer than %d characters\n"
@@ -1234,10 +1179,9 @@ msgstr ""
"carattere quoted printable nell'armatura - probabilmente è stato usato\n"
"un MTA buggato\n"
-#, fuzzy, c-format
-#| msgid "not human readable"
+#, c-format
msgid "[ not human readable (%zu bytes: %s%s) ]"
-msgstr "non leggibile"
+msgstr "[ non leggibile (%zu byte: %s%s) ]"
#, c-format
msgid ""
@@ -1251,26 +1195,22 @@ msgstr ""
msgid "a user notation name must contain the '@' character\n"
msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n"
-#, fuzzy, c-format
+#, c-format
msgid "a notation name must not contain more than one '@' character\n"
-msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n"
+msgstr "il nome di una notazione non deve contenere più di un carattere '@'\n"
#, c-format
msgid "a notation value must not use any control characters\n"
msgstr "il valore di una nota non deve usare caratteri di controllo\n"
-#, fuzzy, c-format
+#, c-format
msgid "a notation name may not contain an '=' character\n"
-msgstr "il valore di una nota dell'utente deve contenere il carattere '@'\n"
+msgstr "il valore di una nota dell'utente deve contenere il carattere '='\n"
-#, fuzzy, c-format
-#| msgid ""
-#| "a notation name must have only printable characters or spaces, and end "
-#| "with an '='\n"
+#, c-format
msgid "a notation name must have only printable characters or spaces\n"
msgstr ""
-"il nome di una nota deve essere formato solo da caratteri stampabili o\n"
-"spazi e terminare con un '='\n"
+"un nome di notazione deve contenere solo caratteri o spazi stampabili\n"
#, c-format
msgid "WARNING: invalid notation data found\n"
@@ -1278,207 +1218,194 @@ msgstr "ATTENZIONE: trovati dati di una nota non validi\n"
#, c-format
msgid "failed to proxy %s inquiry to client\n"
-msgstr ""
+msgstr "impossibile proxy %s richiesta al client\n"
msgid "Enter passphrase: "
msgstr "Inserisci la passphrase: "
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
msgid "error getting version from '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante il recupero della versione da '%s': %s\n"
#, c-format
msgid "server '%s' is older than us (%s < %s)"
-msgstr ""
+msgstr "il server '%s' è precedente a noi (%s < %s)"
-#, fuzzy, c-format
-#| msgid "WARNING: %s overrides %s\n"
+#, c-format
msgid "WARNING: %s\n"
-msgstr "ATTENZIONE: %s ha la precedenza su %s\n"
+msgstr "AVVISO: %s\n"
#, c-format
msgid "Note: Outdated servers may lack important security fixes.\n"
msgstr ""
+"Nota: i server obsoleti potrebbero non avere correzioni di sicurezza "
+"importanti.\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 "Per favore usa prima il comando \"toggle\".\n"
+msgstr "Nota: utilizzare il comando \"%s\" per riavviarli.\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 non funziona ancora con %s\n"
+msgstr "%s non è conforme alla modalità %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no dirmngr running in this session\n"
-msgstr "gpg-agent non è disponibile in questa sessione\n"
+msgstr "nessun dirmngr in esecuzione in questa sessione\n"
-#, fuzzy, c-format
-#| msgid "you may not use %s while in %s mode\n"
+#, c-format
msgid "keyserver option \"%s\" may not be used in %s mode\n"
-msgstr "non è possibile usare %s in modalità %s\n"
+msgstr "l'opzione keyserver \"%s\" non può essere utilizzata in modalità %s\n"
msgid "WKD uses a cached result"
-msgstr ""
+msgstr "WKD utilizza un risultato memorizzato nella cache"
msgid "Tor is not running"
-msgstr ""
+msgstr "Tor non è in esecuzione"
-#, fuzzy
msgid "Tor is not properly configured"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "Tor non è configurato correttamente"
-#, fuzzy
msgid "DNS is not properly configured"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "DNS non è configurato correttamente"
msgid "unacceptable HTTP redirect from server"
-msgstr ""
+msgstr "reindirizzamento HTTP inaccettabile dal server"
msgid "unacceptable HTTP redirect from server was cleaned up"
-msgstr ""
+msgstr "il reindirizzamento HTTP dal server è stato pulito"
-#, fuzzy
-#| msgid "generate a revocation certificate"
msgid "server uses an invalid certificate"
-msgstr "genera un certificato di revoca"
+msgstr "server utilizza un certificato non valido"
-#, fuzzy, c-format
-#| msgid "armor: %s\n"
+#, c-format
msgid "Note: %s\n"
-msgstr "armatura: %s\n"
+msgstr "Nota: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "OpenPGP card not available: %s\n"
-msgstr "la chiave segreta non è disponibile"
+msgstr "Scheda OpenPGP non disponibile: %s\n"
#, c-format
msgid "OpenPGP card no. %s detected\n"
-msgstr ""
+msgstr "Scheda OpenPGP n. %s rilevata\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't do this in batch mode\n"
-msgstr "impossibile fare questo in modo batch\n"
+msgstr "impossibile eseguire questa operazione in modalità batch\n"
-#, fuzzy, c-format
+#, c-format
msgid "This command is only available for version 2 cards\n"
-msgstr "Questo comando non è permesso in modalità %s.\n"
+msgstr "Questo comando è disponibile solo per le schede della versione 2\n"
-#, fuzzy, c-format
+#, c-format
msgid "Reset Code not or not anymore available\n"
-msgstr "parti della chiave segreta non sono disponibili\n"
+msgstr "Reimposta codice non più disponibile o meno\n"
msgid "Your selection? "
msgstr "Cosa scegli? "
msgid "[not set]"
-msgstr ""
+msgstr "[non impostato]"
msgid "Mr."
-msgstr ""
+msgstr "Sig."
msgid "Ms."
-msgstr ""
+msgstr "Sig.ra."
-# ??? (Md)
-#, fuzzy
msgid "not forced"
-msgstr "non esaminato"
+msgstr "non forzato"
msgid "forced"
-msgstr ""
+msgstr "costretto"
msgid "Error: Only plain ASCII is currently allowed.\n"
-msgstr ""
+msgstr "Errore: al momento è consentito solo ASCII semplice.\n"
msgid "Error: The \"<\" character may not be used.\n"
-msgstr ""
+msgstr "Errore: il carattere \"<\" non può essere utilizzato.\n"
msgid "Error: Double spaces are not allowed.\n"
-msgstr ""
+msgstr "Errore: gli spazi doppi non sono consentiti.\n"
msgid "Cardholder's surname: "
-msgstr ""
+msgstr "Cognome del titolare della carta: "
msgid "Cardholder's given name: "
-msgstr ""
+msgstr "Nome del titolare della carta: "
#, c-format
msgid "Error: Combined name too long (limit is %d characters).\n"
-msgstr ""
+msgstr "Errore: nome combinato troppo lungo (limite è di %d caratteri).\n"
-#, fuzzy
msgid "URL to retrieve public key: "
-msgstr "non c'è una chiave pubblica corrispondente: %s\n"
+msgstr "URL per recuperare la chiave pubblica: "
-#, fuzzy, c-format
-#| msgid "error reading `%s': %s\n"
+#, c-format
msgid "error reading '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura di '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error writing '%s': %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la scrittura di '%s': %s\n"
msgid "Login data (account name): "
-msgstr ""
+msgstr "Dati di accesso (nome account): "
msgid "Private DO data: "
-msgstr ""
+msgstr "Dati DO privati: "
-#, fuzzy
msgid "Language preferences: "
-msgstr "preferenze aggiornate"
+msgstr "Preferenze lingua: "
-#, fuzzy
msgid "Error: invalid length of preference string.\n"
-msgstr "carattere non valido nella stringa delle preferenze\n"
+msgstr "Errore: lunghezza della stringa di preferenza non valida.\n"
-#, fuzzy
msgid "Error: invalid characters in preference string.\n"
-msgstr "carattere non valido nella stringa delle preferenze\n"
+msgstr "Errore: caratteri non validi nella stringa di preferenza.\n"
msgid "Salutation (M = Mr., F = Ms., or space): "
-msgstr ""
+msgstr "Salutazione (M - Mr., F - Ms., o spazio): "
-#, fuzzy
msgid "Error: invalid response.\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "|FPR|Risposta OCSP firmata da FPR\n"
-#, fuzzy
msgid "CA fingerprint: "
-msgstr "mostra le impronte digitali"
+msgstr "Impronta digitale CA: "
-#, fuzzy
msgid "Error: invalid formatted fingerprint.\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "Errore: impronta digitale formattata non valida.\n"
-#, fuzzy, c-format
+#, c-format
msgid "key operation not possible: %s\n"
-msgstr "Generazione della chiave fallita: %s\n"
+msgstr "operazione chiave non possibile: %s\n"
-#, fuzzy
msgid "not an OpenPGP card"
-msgstr "Non sono stati trovati dati OpenPGP validi.\n"
+msgstr "non una scheda OpenPGP"
-#, fuzzy, c-format
+#, c-format
msgid "error getting current key info: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr ""
+"errore durante il recupero delle informazioni sulla chiave corrente: %s\n"
msgid "Replace existing key? (y/N) "
-msgstr ""
+msgstr "Sostituire la chiave esistente? (y/N) "
msgid ""
"Note: There is no guarantee that the card supports the requested size.\n"
" If the key generation does not succeed, please check the\n"
" documentation of your card to see what sizes are allowed.\n"
msgstr ""
+"Nota: non vi è alcuna garanzia che la carta supporti la dimensione "
+"richiesta.\n"
+" Se la generazione della chiave non riesce,\n"
+" documentazione della carta per vedere quali dimensioni sono "
+"consentite.\n"
-#, fuzzy, c-format
+#, c-format
msgid "What keysize do you want? (%u) "
-msgstr "Di che dimensioni vuoi la chiave? (1024) "
+msgstr "Che chiave vuoi? (%u) "
#, c-format
msgid "rounded up to %u bits\n"
@@ -1486,32 +1413,30 @@ msgstr "arrotondate a %u bit\n"
#, c-format
msgid "%s keysizes must be in the range %u-%u\n"
-msgstr ""
+msgstr "%s keysizes deve essere compreso nell'intervallo %u-%u\n"
msgid "Changing card key attribute for: "
-msgstr ""
+msgstr "Modifica dell'attributo chiave della scheda per: "
-#, fuzzy
msgid "Signature key\n"
-msgstr "Firma scaduta il %s\n"
+msgstr "Chiave di firma\n"
-#, fuzzy
msgid "Encryption key\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr "Chiave di crittografia\n"
msgid "Authentication key\n"
-msgstr ""
+msgstr "Chiave di autenticazione\n"
msgid "Please select what kind of key you want:\n"
msgstr "Per favore scegli che tipo di chiave vuoi:\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) RSA\n"
-msgstr " (%d) RSA (firma solo)\n"
+msgstr " (%d) RSA\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) ECC\n"
-msgstr " (%d) DSA e ElGamal (default)\n"
+msgstr " (%d) ECC\n"
msgid "Invalid selection.\n"
msgstr "Scelta non valida.\n"
@@ -1519,33 +1444,37 @@ msgstr "Scelta non valida.\n"
#, c-format
msgid "The card will now be re-configured to generate a key of %u bits\n"
msgstr ""
+"La scheda verrà ora configurata nuovamente per generare una chiave di %u "
+"bit\n"
#, c-format
msgid "The card will now be re-configured to generate a key of type: %s\n"
msgstr ""
+"La scheda verrà ora configurata nuovamente per generare una chiave di tipo: "
+"%s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error changing key attribute for key %d: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr ""
+"errore durante la modifica dell'attributo chiave per la chiave %d: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting card info: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr "errore durante il recupero delle informazioni sulla scheda: %s\n"
-#, fuzzy, c-format
-#| msgid "This command is not allowed while in %s mode.\n"
+#, c-format
msgid "This command is not supported by this card\n"
-msgstr "Questo comando non è permesso in modalità %s.\n"
+msgstr "Questo comando non è supportato da questa scheda\n"
msgid "Make off-card backup of encryption key? (Y/n) "
-msgstr ""
+msgstr "Eseguire il backup off-card della chiave di crittografia? (Y/n) "
-#, fuzzy, c-format
+#, c-format
msgid "Note: keys are already stored on the card!\n"
-msgstr "saltata: chiave pubblica già presente\n"
+msgstr "Nota: le chiavi sono già memorizzate sulla scheda!\n"
msgid "Replace existing keys? (y/N) "
-msgstr ""
+msgstr "Sostituire le chiavi esistenti? (y/N) "
#, c-format
msgid ""
@@ -1553,126 +1482,112 @@ msgid ""
" PIN = '%s' Admin PIN = '%s'\n"
"You should change them using the command --change-pin\n"
msgstr ""
+"Si prega di notare che le impostazioni di fabbrica dei PIN sono\n"
+" PIN : '%s' PIN di amministrazione = '%s'\n"
+"È necessario modificarli utilizzando il comando --change-pin\n"
-#, fuzzy
msgid "Please select the type of key to generate:\n"
-msgstr "Per favore scegli che tipo di chiave vuoi:\n"
+msgstr "Selezionare il tipo di chiave da generare:\n"
-#, fuzzy
msgid " (1) Signature key\n"
-msgstr "Firma scaduta il %s\n"
+msgstr " (1) Chiave di firma\n"
-#, fuzzy
msgid " (2) Encryption key\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (2) Chiave di crittografia\n"
msgid " (3) Authentication key\n"
-msgstr ""
+msgstr " (3) Chiave di autenticazione\n"
-#, fuzzy
msgid "Please select where to store the key:\n"
-msgstr "Per favore scegli il motivo della revoca:\n"
+msgstr "Si prega di selezionare dove memorizzare la chiave:\n"
-#, fuzzy, c-format
+#, c-format
msgid "KEYTOCARD failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "KEYTOCARD non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: This command destroys all keys stored on the card!\n"
-msgstr "saltata: chiave pubblica già presente\n"
+msgstr ""
+"Nota: Questo comando distrugge tutti i tasti memorizzati sulla scheda!\n"
-#, fuzzy
msgid "Continue? (y/N) "
-msgstr "Firmo davvero? "
+msgstr "Continuare? (Y/n) "
msgid "Really do a factory reset? (enter \"yes\") "
-msgstr ""
+msgstr "Fare davvero un reset di fabbrica? (immettere \"sì\") "
-#, fuzzy, c-format
+#, c-format
msgid "error for setup KDF: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore per l'installazione KDF: %s\n"
msgid "quit this menu"
msgstr "abbandona questo menù"
-#, fuzzy
msgid "show admin commands"
-msgstr "comandi in conflitto\n"
+msgstr "mostra comandi di amministrazione"
msgid "show this help"
msgstr "mostra questo aiuto"
-#, fuzzy
msgid "list all available data"
-msgstr "Chiave disponibile presso: "
+msgstr "elencare tutti i dati disponibili"
msgid "change card holder's name"
-msgstr ""
+msgstr "cambiare il nome del titolare della carta"
msgid "change URL to retrieve key"
-msgstr ""
+msgstr "modificare l'URL per recuperare la chiave"
msgid "fetch the key specified in the card URL"
-msgstr ""
+msgstr "recuperare la chiave specificata nell'URL della scheda"
-#, fuzzy
msgid "change the login name"
-msgstr "cambia la data di scadenza"
+msgstr "modificare il nome di accesso"
-#, fuzzy
msgid "change the language preferences"
-msgstr "cambia il valore di fiducia"
+msgstr "modificare le preferenze della lingua"
msgid "change card holder's salutation"
-msgstr ""
+msgstr "cambiare il saluto del titolare della carta"
-#, fuzzy
msgid "change a CA fingerprint"
-msgstr "mostra le impronte digitali"
+msgstr "modificare un'impronta digitale CA"
msgid "toggle the signature force PIN flag"
-msgstr ""
+msgstr "attivare/disattivare il flag PIN di forza della firma"
-#, fuzzy
msgid "generate new keys"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "genera nuove chiavi"
msgid "menu to change or unblock the PIN"
-msgstr ""
+msgstr "per modificare o sbloccare il PIN"
msgid "verify the PIN and list all data"
-msgstr ""
+msgstr "verificare il PIN ed elencare tutti i dati"
msgid "unblock the PIN using a Reset Code"
-msgstr ""
+msgstr "sbloccare il PIN utilizzando un codice di ripristino"
msgid "destroy all keys and data"
-msgstr ""
+msgstr "distruggere tutte le chiavi e i dati"
-#, fuzzy
-#| msgid "|NAME|use NAME as default recipient"
msgid "setup KDF for PIN authentication"
-msgstr "|NOME|usa NOME come destinatario predefinito"
+msgstr "configurazione KDF per l'autenticazione PIN"
-#, fuzzy
-#| msgid "change the ownertrust"
msgid "change the key attribute"
-msgstr "cambia il valore di fiducia"
+msgstr "modificare l'attributo chiave"
msgid "gpg/card> "
-msgstr ""
+msgstr "gpg/card> "
-#, fuzzy
msgid "Admin-only command\n"
-msgstr "comandi in conflitto\n"
+msgstr "Comando solo amministratore\n"
-#, fuzzy
msgid "Admin commands are allowed\n"
-msgstr "comandi in conflitto\n"
+msgstr "I comandi di amministrazione sono consentiti\n"
-#, fuzzy
msgid "Admin commands are not allowed\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "I comandi di amministrazione non sono consentiti\n"
msgid "Invalid command (try \"help\")\n"
msgstr "Comando non valido (prova \"help\")\n"
@@ -1681,62 +1596,62 @@ msgstr "Comando non valido (prova \"help\")\n"
msgid "--output doesn't work for this command\n"
msgstr "--output non funziona con questo comando\n"
-#, fuzzy, c-format
-#| msgid "can't open `%s'\n"
+#, c-format
msgid "can't open '%s'\n"
-msgstr "impossibile aprire `%s'\n"
+msgstr "impossibile aprire '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "key \"%s\" not found: %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "chiave \"%s\" non trovata: %s\n"
#, c-format
msgid "error reading keyblock: %s\n"
msgstr "errore leggendo il keyblock: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key \"%s\" not found\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "chiave \"%s\" non trovata\n"
#, c-format
msgid "(unless you specify the key by fingerprint)\n"
msgstr "(a meno che la chiave sia specificata con il fingerprint)\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't do this in batch mode without \"--yes\"\n"
-msgstr "impossibile fare questo in modo batch senza \"--yes\"\n"
+msgstr "non può farlo in modalità batch senza \"--yes\"\n"
msgid "Note: The public primary key and all its subkeys will be deleted.\n"
msgstr ""
+"Nota: la chiave primaria pubblica e tutte le relative sottochiavi verranno "
+"eliminate.\n"
msgid "Note: Only the shown public subkey will be deleted.\n"
-msgstr ""
+msgstr "Nota: verrà eliminata solo la sottochiave pubblica visualizzata.\n"
msgid "Note: Only the secret part of the shown primary key will be deleted.\n"
msgstr ""
+"Nota: verrà eliminata solo la parte segreta della chiave primaria "
+"visualizzata.\n"
msgid "Note: Only the secret part of the shown subkey will be deleted.\n"
msgstr ""
+"Nota: verrà eliminata solo la parte segreta della sottochiave visualizzata.\n"
-#, fuzzy
msgid "Delete this key from the keyring? (y/N) "
-msgstr "Vuoi cancellare questa chiave dal portachiavi? "
+msgstr "Eliminare questa chiave dal keyring? (y/N) "
-#, fuzzy
msgid "This is a secret key! - really delete? (y/N) "
-msgstr "È una chiave segreta! - Vuoi cancellarla davvero? "
+msgstr "Questa è una chiave segreta! - davvero cancellare? (y/N) "
-#, fuzzy, c-format
+#, c-format
msgid "deleting secret %s failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "eliminazione del segreto %s non riuscita: %s\n"
msgid "key"
msgstr "key"
-#, fuzzy
-#| msgid "Pubkey: "
msgid "subkey"
-msgstr "A chiave pubblica: "
+msgstr "sottochiave"
#, c-format
msgid "update failed: %s\n"
@@ -1771,43 +1686,45 @@ msgstr ""
msgid "using cipher %s\n"
msgstr "uso il cifrario %s\n"
-#, fuzzy, c-format
-#| msgid "`%s' already compressed\n"
+#, c-format
msgid "'%s' already compressed\n"
-msgstr "`%s' è già compresso\n"
+msgstr "'%s' già compresso\n"
-#, fuzzy, c-format
-#| msgid "WARNING: `%s' is an empty file\n"
+#, c-format
msgid "WARNING: '%s' is an empty file\n"
-msgstr "ATTENZIONE: `%s' è un file vuoto\n"
+msgstr "AVVISO: '%s' è un file vuoto\n"
-#, fuzzy, c-format
-#| msgid "reading from `%s'\n"
+#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"l'algoritmo di crittografia '%s' non può essere utilizzato in modalità %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "l'algoritmo digest '%s' non può essere utilizzato in modalità %s\n"
+
+#, c-format
msgid "reading from '%s'\n"
-msgstr "lettura da `%s'\n"
+msgstr "lettura da '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n"
msgstr ""
-"forzare il cifrario simmetrico %s (%d) viola le preferenze\n"
-"del destinatario\n"
+"AVVISO: l'imposizione della crittografia simmetrica %s (%d) viola le "
+"preferenze del destinatario\n"
-#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "non è possibile usare l'algoritmo di cifratura \"%s\" in modalità %s\n"
-
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr "AVVISO: la chiave %s non è adatta per la crittografia in modalità %s\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: forcing compression algorithm %s (%d) violates recipient "
"preferences\n"
msgstr ""
-"forzare l'algoritmo di compressione %s (%d) viola le preferenze\n"
-"del destinatario\n"
+"AVVISO: l'algoritmo di compressione %s (%d) viola le preferenze dei "
+"destinatari\n"
#, c-format
msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
@@ -1819,10 +1736,9 @@ msgstr ""
msgid "%s/%s encrypted for: \"%s\"\n"
msgstr "%s/%s cifrato per: \"%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 "non è possibile usare %s in modalità %s\n"
+msgstr "l'opzione '%s' non può essere utilizzata in modalità %s\n"
#, c-format
msgid "%s encrypted data\n"
@@ -1854,19 +1770,19 @@ msgstr ""
"le chiamate a programmi esterni sono disattivate a causa dei permessi non\n"
"sicuri del file delle opzioni\n"
-#, fuzzy, c-format
+#, c-format
msgid "this platform requires temporary files when calling external programs\n"
msgstr ""
"questa piattaforma richiede file temporanei quando si chiamano programmi "
"esterni\n"
-#, fuzzy, c-format
+#, c-format
msgid "unable to execute program '%s': %s\n"
-msgstr "impossibile eseguire %s \"%s\": %s\n"
+msgstr "impossibile eseguire il programma '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "unable to execute shell '%s': %s\n"
-msgstr "impossibile eseguire %s \"%s\": %s\n"
+msgstr "impossibile eseguire la shell '%s': %s\n"
#, c-format
msgid "system error while calling external program: %s\n"
@@ -1884,131 +1800,115 @@ msgstr "impossibile eseguire il programma esterno\n"
msgid "unable to read external program response: %s\n"
msgstr "impossibile leggere la risposta del programma esterno: %s\n"
-#, fuzzy, c-format
-#| msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n"
+#, c-format
msgid "WARNING: unable to remove tempfile (%s) '%s': %s\n"
-msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n"
+msgstr "AVVISO: impossibile rimuovere il file temporaneo (%s) '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "WARNING: unable to remove temp directory `%s': %s\n"
+#, c-format
msgid "WARNING: unable to remove temp directory '%s': %s\n"
-msgstr "ATTENZIONE: impossibile rimuovere la directory temporanea `%s': %s\n"
+msgstr "AVVISO: impossibile rimuovere la directory temporanea '%s': %s\n"
-#, fuzzy
msgid "export signatures that are marked as local-only"
-msgstr ""
-"\n"
-"La firma sarà marcata come irrevocabile.\n"
+msgstr "esportare firme contrassegnate come solo locali"
msgid "export attribute user IDs (generally photo IDs)"
-msgstr ""
+msgstr "esportare gli ID utente degli attributi (in genere gli ID foto)"
-#, fuzzy
msgid "export revocation keys marked as \"sensitive\""
-msgstr "non sono state trovate chiavi di revoca per `%s'\n"
+msgstr "esportare le chiavi di revoca contrassegnate come \"sensibili\""
-#, fuzzy
msgid "remove unusable parts from key during export"
-msgstr "chiave segreta inutilizzabile"
+msgstr "rimuovere parti inutilizzabili dalla chiave durante l'esportazione"
msgid "remove as much as possible from key during export"
-msgstr ""
+msgstr "rimuovere il più possibile dalla chiave durante l'esportazione"
msgid "use the GnuPG key backup format"
-msgstr ""
+msgstr "utilizzare il formato di backup della chiave GnuPG"
-#, fuzzy
-#| msgid "%s: skipped: %s\n"
msgid " - skipped"
-msgstr "%s: saltata: %s\n"
+msgstr " - saltato"
-#, fuzzy, c-format
-#| msgid "writing to `%s'\n"
+#, c-format
msgid "writing to '%s'\n"
-msgstr "scrittura in `%s'\n"
+msgstr "scrittura in '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: key material on-card - skipped\n"
-msgstr "chiave %08lX: firma della subchiave nel posto sbagliato - saltata\n"
+msgstr "chiave %s: materiale della chiave su scheda - ignorato\n"
-#, fuzzy, c-format
+#, c-format
msgid "exporting secret keys not allowed\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "esportazione di chiavi segrete non consentita\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: PGP 2.x style key - skipped\n"
-msgstr "chiave %08lX: chiave in stile PGP 2.x - saltata\n"
+msgstr "chiave %s: chiave di stile PGP 2.x - ignorata\n"
#, c-format
msgid "WARNING: nothing exported\n"
msgstr "ATTENZIONE: non è stato esportato nulla\n"
-#, fuzzy, c-format
-#| msgid "error creating `%s': %s\n"
+#, c-format
msgid "error creating '%s': %s\n"
-msgstr "errore creando `%s': %s\n"
+msgstr "errore durante la creazione di '%s': %s\n"
-#, fuzzy
msgid "[User ID not found]"
-msgstr "[User ID non trovato]"
+msgstr "[ID utente non trovato]"
-#, fuzzy, c-format
+#, c-format
msgid "automatically retrieved '%s' via %s\n"
-msgstr "errore creando `%s': %s\n"
+msgstr "recuperato automaticamente '%s' tramite %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error retrieving '%s' via %s: %s\n"
-msgstr "errore creando `%s': %s\n"
+msgstr "errore durante il recupero di '%s' tramite %s: %s\n"
-#, fuzzy
msgid "No fingerprint"
-msgstr "mostra le impronte digitali"
+msgstr "Nessuna impronta digitale"
#, c-format
msgid "checking for a fresh copy of an expired key via %s\n"
msgstr ""
+"verifica della presenza di una nuova copia di una chiave scaduta tramite %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "secret key \"%s\" not found: %s\n"
-msgstr "chiave segreta `%s' non trovata: %s\n"
+msgstr "chiave segreta \"%s\" non trovata: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "(check argument of option '%s')\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "(controllare l'argomento dell'opzione '%s')\n"
-#, fuzzy, c-format
-#| msgid "|NAME|use NAME as default secret key"
+#, c-format
msgid "Warning: not using '%s' as default key: %s\n"
-msgstr "|NOME|usa NOME come chiave segreta predefinita"
+msgstr "Avviso: impossibile utilizzare '%s' come chiave predefinita: %s\n"
-#, fuzzy, c-format
-#| msgid "|NAME|use NAME as default secret key"
+#, c-format
msgid "using \"%s\" as default secret key for signing\n"
-msgstr "|NOME|usa NOME come chiave segreta predefinita"
+msgstr "utilizzo di \"%s\" come chiave segreta predefinita per la firma\n"
#, c-format
msgid "all values passed to '%s' ignored\n"
-msgstr ""
+msgstr "tutti i valori passati a '%s' ignorati\n"
-#, fuzzy, c-format
+#, c-format
msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n"
-msgstr "Chiave %08lX non valida resa valida da --allow-non-selfsigned-uid\n"
+msgstr "Chiave non valida %s resa valida da --allow-non-selfsigned-uid\n"
-#, fuzzy, c-format
+#, c-format
msgid "using subkey %s instead of primary key %s\n"
-msgstr "uso la chiave secondaria %08lX invece della chiave primaria %08lX\n"
+msgstr "utilizzando la sottochiave %s anziché la chiave primaria %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "valid values for option '%s':\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "valori validi per l'opzione '%s':\n"
-#, fuzzy
msgid "make a signature"
-msgstr "fai una firma separata"
+msgstr "fare una firma"
-#, fuzzy
msgid "make a clear text signature"
-msgstr "|[file]|fai una firma mantenendo il testo in chiaro"
+msgstr "creare una firma di testo non crittografato"
msgid "make a detached signature"
msgstr "fai una firma separata"
@@ -2031,9 +1931,8 @@ msgstr "elenca le chiavi"
msgid "list keys and signatures"
msgstr "elenca le chiavi e le firme"
-#, fuzzy
msgid "list and check key signatures"
-msgstr "controlla le firme delle chiavi"
+msgstr "elencare e controllare le firme delle chiavi"
msgid "list keys and fingerprints"
msgstr "elenca le chiavi e le impronte digitali"
@@ -2044,28 +1943,20 @@ msgstr "elenca le chiavi segrete"
msgid "generate a new key pair"
msgstr "genera una nuova coppia di chiavi"
-#, fuzzy
-#| msgid "generate a new key pair"
msgid "quickly generate a new key pair"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "generare rapidamente una nuova coppia di chiavi"
-#, fuzzy
-#| msgid "generate a new key pair"
msgid "quickly add a new user-id"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "aggiungere rapidamente un nuovo id utente"
-#, fuzzy
-#| msgid "generate a new key pair"
msgid "quickly revoke a user-id"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "revocare rapidamente un id utente"
-#, fuzzy
-#| msgid "generate a new key pair"
msgid "quickly set a new expiration date"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "impostare rapidamente una nuova data di scadenza"
msgid "full featured key pair generation"
-msgstr ""
+msgstr "generazione completa della coppia di chiavi in primo piano"
msgid "generate a revocation certificate"
msgstr "genera un certificato di revoca"
@@ -2076,15 +1967,16 @@ msgstr "rimuove le chiavi dal portachiavi pubblico"
msgid "remove keys from the secret keyring"
msgstr "rimuove le chiavi dal portachiavi privato"
-#, fuzzy
-#| msgid "sign a key"
msgid "quickly sign a key"
-msgstr "firma una chiave"
+msgstr "firmare rapidamente un tasto"
-#, fuzzy
-#| msgid "sign a key locally"
msgid "quickly sign a key locally"
-msgstr "firma una chiave localmente"
+msgstr "firmare rapidamente una chiave localmente"
+
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "revocare rapidamente un id utente"
msgid "sign a key"
msgstr "firma una chiave"
@@ -2095,7 +1987,6 @@ msgstr "firma una chiave localmente"
msgid "sign or edit a key"
msgstr "firma o modifica una chiave"
-#, fuzzy
msgid "change a passphrase"
msgstr "cambia la passphrase"
@@ -2118,48 +2009,43 @@ msgid "import/merge keys"
msgstr "importa/aggiungi delle chiavi"
msgid "print the card status"
-msgstr ""
+msgstr "stampare lo stato della scheda"
msgid "change data on a card"
-msgstr ""
+msgstr "modificare i dati su una scheda"
msgid "change a card's PIN"
-msgstr ""
+msgstr "modificare il PIN di una carta"
msgid "update the trust database"
msgstr "aggiorna il database della fiducia"
-#, fuzzy
msgid "print message digests"
-msgstr "|algo [files]|stampa tutti i message digests"
+msgstr "stampare digest dei messaggi"
msgid "run in server mode"
-msgstr ""
+msgstr "eseguire in modalità server"
msgid "|VALUE|set the TOFU policy for a key"
-msgstr ""
+msgstr "|VALORE|impostare il criterio TOFU per una chiave"
msgid "create ascii armored output"
msgstr "crea un output ascii con armatura"
-#, fuzzy
msgid "|USER-ID|encrypt for USER-ID"
-msgstr "|NOME|cifra per NOME"
+msgstr "|USER-ID|encrypt per USER-ID"
-#, fuzzy
msgid "|USER-ID|use USER-ID to sign or decrypt"
-msgstr "usa questo user-id per firmare o decifrare"
+msgstr "|USER-ID|utilizzare USER-ID per firmare o decrittografare"
-#, fuzzy
msgid "|N|set compress level to N (0 disables)"
-msgstr "|N|imposta il livello di compressione (0 disab.)"
+msgstr "|N|Impostare il livello di compressione su N (0 disabilita)"
msgid "use canonical text mode"
msgstr "usa il modo testo canonico"
-#, fuzzy
msgid "|FILE|write output to FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|scrittura dell'output in FILE"
msgid "do not make any changes"
msgstr "non fa cambiamenti"
@@ -2168,7 +2054,7 @@ msgid "prompt before overwriting"
msgstr "chiede prima di sovrascrivere"
msgid "use strict OpenPGP behavior"
-msgstr ""
+msgstr "utilizzare un comportamento OpenPGP rigoroso"
msgid ""
"@\n"
@@ -2177,16 +2063,6 @@ msgstr ""
"@\n"
"(Vedi la man page per una lista completa di tutti i comandi e opzioni)\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"
@@ -2200,30 +2076,23 @@ msgstr ""
"@\n"
"Esempi:\n"
"\n"
-" -se -r Bob [file] firma e cifra per l'utente Bob\n"
-" --clear-sign [file] fai una firma mantenendo il testo in chiaro\n"
-" --detach-sign [file] fai una firma separata\n"
-" --list-keys [nomi] mostra le chiavi\n"
+"-se -r Bob [file] firma e crittografa per l'utente Bob\n"
+" --cancella-segno [file] fare una firma di testo non crittografato\n"
+" --detach-sign [file] crea una firma disconnessa\n"
+" --list-keys [nomi] mostra le chiavi\n"
" --fingerprint [nomi] mostra le impronte digitali\n"
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
msgid "Usage: @GPG@ [options] [files] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @GPG@ [opzioni] [file] (-h per assistenza)"
-#, fuzzy
-#| msgid ""
-#| "Syntax: gpg [options] [files]\n"
-#| "sign, check, encrypt or decrypt\n"
-#| "default operation depends on the input data\n"
msgid ""
"Syntax: @GPG@ [options] [files]\n"
"Sign, check, encrypt or decrypt\n"
"Default operation depends on the input data\n"
msgstr ""
-"Sintassi: gpg [opzioni] [files]\n"
-"firma, controlla, cifra o decifra\n"
-"l'operazione predefinita dipende dai dati di input\n"
+"Sintassi: @GPG@ [opzioni] [files]\n"
+"Firmare, controllare, crittografare o decrittografare\n"
+"Il funzionamento predefinito dipende dai dati di input\n"
msgid ""
"\n"
@@ -2244,163 +2113,168 @@ msgstr "Hash: "
msgid "Compression: "
msgstr "Compressione: "
-#, fuzzy, c-format
+#, c-format
msgid "usage: %s [options] %s\n"
-msgstr "uso: gpg [opzioni] "
+msgstr "utilizzo: %s [opzioni] %s\n"
#, c-format
msgid "conflicting commands\n"
msgstr "comandi in conflitto\n"
-#, fuzzy, c-format
+#, c-format
msgid "no = sign found in group definition '%s'\n"
-msgstr "non è stato trovato il segno = nella definizione del gruppo \"%s\"\n"
+msgstr "nessun segno = trovato nella definizione di gruppo '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe ownership on homedir '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr "AVVISO: proprietà non sicura su homedir '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe ownership on configuration file '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr "AVVISO: proprietà non sicura nel file di configurazione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe ownership on extension '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr "AVVISO: proprietà non sicura nell'estensione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe permissions on homedir '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr "AVVISO: proprietà non sicura su homedir '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe permissions on configuration file '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr "AVVISO: autorizzazioni non sicure per il file di configurazione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe permissions on extension '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr "AVVISO: autorizzazioni non sicure per l'estensione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe enclosing directory ownership on homedir '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr "AVVISO: proprietà non sicura su homedir '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: unsafe enclosing directory ownership on configuration file '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr ""
+"AVVISO: proprietà della directory di inclusione non sicura nel file di "
+"configurazione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe enclosing directory ownership on extension '%s'\n"
-msgstr "ATTENZIONE: il proprietario \"%s\" di %s è insicuro\n"
+msgstr ""
+"AVVISO: proprietà della directory di inclusione non sicura nell'estensione "
+"'%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe enclosing directory permissions on homedir '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr ""
+"AVVISO: autorizzazioni della directory di inclusione non sicure nella "
+"directory homedir '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: unsafe enclosing directory permissions on configuration file '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr ""
+"AVVISO: autorizzazioni della directory di inclusione non sicure nella "
+"directory homedir '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unsafe enclosing directory permissions on extension '%s'\n"
-msgstr "ATTENZIONE: i permessi \"%s\" di %s sono insicuri\n"
+msgstr ""
+"AVVISO: autorizzazioni della directory di inclusione non sicure per "
+"l'estensione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown configuration item '%s'\n"
-msgstr "elemento della configurazione sconosciuto \"%s\"\n"
+msgstr "elemento di configurazione sconosciuto '%s'\n"
msgid "display photo IDs during key listings"
-msgstr ""
+msgstr "visualizzare gli ID foto durante le elenchi dei tasti"
-#, fuzzy
msgid "show key usage information during key listings"
-msgstr "Manca la firma corrispondente nel portachiavi segreto\n"
+msgstr ""
+"mostra le informazioni sull'utilizzo delle chiavi durante le inserzioni "
+"chiave"
msgid "show policy URLs during signature listings"
-msgstr ""
+msgstr "mostra URL dei criteri durante gli elenchi delle firme"
-#, fuzzy
msgid "show all notations during signature listings"
-msgstr "Manca la firma corrispondente nel portachiavi segreto\n"
+msgstr "mostra tutte le notazioni durante gli elenchi delle firme"
msgid "show IETF standard notations during signature listings"
-msgstr ""
+msgstr "mostra notazioni standard IETF durante gli elenchi delle firme"
msgid "show user-supplied notations during signature listings"
msgstr ""
+"mostra le notazioni fornite dall'utente durante gli elenchi delle firme"
-#, fuzzy
msgid "show preferred keyserver URLs during signature listings"
-msgstr "l'URL della politica di firma indicato non è valido\n"
+msgstr "mostra gli URL preferiti del keyserver durante gli elenchi delle firme"
msgid "show user ID validity during key listings"
-msgstr ""
+msgstr "mostra validità ID utente durante le inserzioni chiave"
msgid "show revoked and expired user IDs in key listings"
-msgstr ""
+msgstr "mostra ID utente revocati e scaduti negli elenchi di chiavi"
msgid "show revoked and expired subkeys in key listings"
-msgstr ""
+msgstr "mostra sottochiavi revocate e scadute negli elenchi di chiavi"
-#, fuzzy
msgid "show the keyring name in key listings"
-msgstr "mostra in quali portachiavi sono contenute le chiavi elencate"
+msgstr "mostrare il nome del keyring negli elenchi delle chiavi"
-#, fuzzy
msgid "show expiration dates during signature listings"
-msgstr "Manca la firma corrispondente nel portachiavi segreto\n"
+msgstr "mostra date di scadenza durante le inserzioni delle firme"
-#, fuzzy, c-format
+#, c-format
msgid "unknown TOFU policy '%s'\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
+msgstr "criterio TOFU sconosciuto '%s'\n"
#, c-format
msgid "(use \"help\" to list choices)\n"
-msgstr ""
+msgstr "(utilizzare \"help\" per elencare le scelte)\n"
-#, fuzzy, c-format
-#| msgid "NOTE: old default options file `%s' ignored\n"
+#, c-format
msgid "Note: old default options file '%s' ignored\n"
-msgstr ""
-"NOTA: il vecchio file `%s' con le opzioni predefinite è stato ignorato\n"
+msgstr "Nota: il vecchio file di opzioni predefinito '%s' è stato ignorato\n"
-#, fuzzy, c-format
-#| msgid "NOTE: %s is not for normal use!\n"
+#, c-format
msgid "Note: %s is not for normal use!\n"
-msgstr "NOTA: %s normalmente non deve essere usato!\n"
+msgstr "Nota: %s non è per uso normale!\n"
-#, fuzzy, c-format
+#, c-format
msgid "'%s' is not a valid signature expiration\n"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "'%s' non è una scadenza di firma valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" is not a proper mail address\n"
-msgstr "L'indirizzo di email non è valido\n"
+msgstr "\"%s\" non è un indirizzo di posta elettronica corretto\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid pinentry mode '%s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "modalità pinentry non valida '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid request origin '%s'\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "origine richiesta non valida '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "'%s' is not a valid character set\n"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "'%s' non è un set di caratteri valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "could not parse keyserver URL\n"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
+msgstr "impossibile analizzare l'URL del server dei chiavi\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%d: invalid keyserver options\n"
-msgstr "%s:%d: opzioni di esportazione non valide\n"
+msgstr "%s:%d: opzioni keyserver non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid keyserver options\n"
-msgstr "opzioni di esportazione non valide\n"
+msgstr "opzioni keyserver non valide\n"
#, c-format
msgid "%s:%d: invalid import options\n"
@@ -2410,9 +2284,9 @@ msgstr "%s:%d: opzioni di importazione non valide\n"
msgid "invalid import options\n"
msgstr "opzioni di importazione non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid filter option: %s\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "opzione di filtro non valida: %s\n"
#, c-format
msgid "%s:%d: invalid export options\n"
@@ -2422,70 +2296,67 @@ msgstr "%s:%d: opzioni di esportazione non valide\n"
msgid "invalid export options\n"
msgstr "opzioni di esportazione non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%d: invalid list options\n"
-msgstr "%s:%d: opzioni di importazione non valide\n"
+msgstr "%s:%d: opzioni di elenco non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid list options\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "opzioni di elenco non valide\n"
msgid "display photo IDs during signature verification"
-msgstr ""
+msgstr "visualizzare gli ID foto durante la verifica della firma"
msgid "show policy URLs during signature verification"
-msgstr ""
+msgstr "mostra URL dei criteri durante la verifica della firma"
-#, fuzzy
msgid "show all notations during signature verification"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "mostra tutte le notazioni durante la verifica della firma"
msgid "show IETF standard notations during signature verification"
-msgstr ""
+msgstr "mostra notazioni standard IETF durante la verifica della firma"
msgid "show user-supplied notations during signature verification"
msgstr ""
+"mostra le notazioni fornite dall'utente durante la verifica della firma"
-#, fuzzy
msgid "show preferred keyserver URLs during signature verification"
-msgstr "l'URL della politica di firma indicato non è valido\n"
+msgstr "mostra gli URL preferiti del keyserver durante la verifica della firma"
-#, fuzzy
msgid "show user ID validity during signature verification"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "mostra validità DELL'ID utente durante la verifica della firma"
msgid "show revoked and expired user IDs in signature verification"
-msgstr ""
+msgstr "mostra ID utente revocati e scaduti nella verifica della firma"
-#, fuzzy
msgid "show only the primary user ID in signature verification"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "mostra solo l'ID utente primario nella verifica della firma"
msgid "validate signatures with PKA data"
-msgstr ""
+msgstr "convalidare le firme con i dati PKA"
msgid "elevate the trust of signatures with valid PKA data"
-msgstr ""
+msgstr "elevare la fiducia delle firme con dati PKA validi"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%d: invalid verify options\n"
-msgstr "%s:%d: opzioni di esportazione non valide\n"
+msgstr "%s:%d: opzioni di verifica non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid verify options\n"
-msgstr "opzioni di esportazione non valide\n"
+msgstr "opzioni di verifica non valide\n"
#, c-format
msgid "unable to set exec-path to %s\n"
msgstr "impossibile impostare exec-path a %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%d: invalid auto-key-locate list\n"
-msgstr "%s:%d: opzioni di esportazione non valide\n"
+msgstr "%s:%d: elenco di individuazione automatica della chiave non valido\n"
#, c-format
msgid "invalid auto-key-locate list\n"
-msgstr ""
+msgstr "elenco di individuazione automatica delle chiavi non valido\n"
#, c-format
msgid "WARNING: program may create a core file!\n"
@@ -2505,19 +2376,19 @@ msgstr "Non ha senso usare %s con %s!\n"
#, c-format
msgid "WARNING: running with faked system time: "
-msgstr ""
+msgstr "AVVISO: in esecuzione con l'ora di sistema falso: "
-#, fuzzy, c-format
+#, c-format
msgid "will not run with insecure memory due to %s\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "non verrà eseguito con memoria non protetta a causa di %s\n"
#, c-format
msgid "selected cipher algorithm is invalid\n"
msgstr "l'algoritmo di cifratura selezionato non è valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "selected compression algorithm is invalid\n"
-msgstr "l'algoritmo di cifratura selezionato non è valido\n"
+msgstr "algoritmo di compressione selezionato non valido\n"
#, c-format
msgid "selected certification digest algorithm is invalid\n"
@@ -2531,9 +2402,9 @@ msgstr "completes-needed deve essere maggiore di 0\n"
msgid "marginals-needed must be greater than 1\n"
msgstr "marginals-needed deve essere maggiore di 1\n"
-#, fuzzy, c-format
+#, c-format
msgid "max-cert-depth must be in the range from 1 to 255\n"
-msgstr "max-cert-depth deve essere tra 1 e 255\n"
+msgstr "max-cert-depth deve essere compreso tra 1 e 255\n"
#, c-format
msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n"
@@ -2543,10 +2414,9 @@ msgstr "default-cert-level non valido; deve essere 0, 1, 2 o 3\n"
msgid "invalid min-cert-level; must be 1, 2, or 3\n"
msgstr "min-cert-level non valido; deve essere 1, 2 o 3\n"
-#, fuzzy, c-format
-#| msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
+#, c-format
msgid "Note: simple S2K mode (0) is strongly discouraged\n"
-msgstr "NOTA: l'uso del modo S2K semplice (0) è fortemente scoraggiato\n"
+msgstr "Nota: la modalità S2K semplice (0) è fortemente sconsigliata\n"
#, c-format
msgid "invalid S2K mode; must be 0, 1 or 3\n"
@@ -2572,14 +2442,10 @@ msgstr "preferenze personali di compressione non valide\n"
msgid "%s does not yet work with %s\n"
msgstr "%s non funziona ancora con %s\n"
-#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "non è possibile usare l'algoritmo di digest \"%s\" in modalità %s\n"
-
-#, fuzzy, c-format
+#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr ""
-"non è possibile usare l'algoritmo di compressione \"%s\" in modalità %s\n"
+"l'algoritmo di compressione '%s' non può essere utilizzato in modalità %s\n"
#, c-format
msgid "failed to initialize the TrustDB: %s\n"
@@ -2591,25 +2457,27 @@ msgstr ""
"ATTENZIONE: sono stati indicati dei destinatari (-r) senza usare la\n"
"crittografia a chiave pubblica\n"
-#, fuzzy, c-format
+#, c-format
msgid "symmetric encryption of '%s' failed: %s\n"
-msgstr "decifratura fallita: %s\n"
+msgstr "crittografia simmetrica di '%s' non riuscita: %s\n"
#, c-format
msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n"
-msgstr ""
+msgstr "non è possibile utilizzare --symmetric --encrypt con --s2k-mode 0\n"
-#, fuzzy, c-format
+#, c-format
msgid "you cannot use --symmetric --encrypt in %s mode\n"
-msgstr "non è possibile usare %s in modalità %s\n"
+msgstr "non è possibile utilizzare --symmetric --encrypt in modalità %s\n"
#, c-format
msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n"
msgstr ""
+"non è possibile utilizzare --symmetric --sign --encrypt con --s2k-mode 0\n"
-#, fuzzy, c-format
+#, c-format
msgid "you cannot use --symmetric --sign --encrypt in %s mode\n"
-msgstr "non è possibile usare %s in modalità %s\n"
+msgstr ""
+"non è possibile utilizzare --symmetric --sign --encrypt in modalità %s\n"
#, c-format
msgid "keyserver send failed: %s\n"
@@ -2623,10 +2491,9 @@ msgstr "ricezione dal keyserver fallita: %s\n"
msgid "key export failed: %s\n"
msgstr "esportazione della chiave fallita: %s\n"
-#, fuzzy, c-format
-#| msgid "key export failed: %s\n"
+#, c-format
msgid "export as ssh key failed: %s\n"
-msgstr "esportazione della chiave fallita: %s\n"
+msgstr "esportazione come chiave ssh non riuscita: %s\n"
#, c-format
msgid "keyserver search failed: %s\n"
@@ -2644,22 +2511,24 @@ msgstr "rimozione dell'armatura fallita: %s\n"
msgid "enarmoring failed: %s\n"
msgstr "creazione dell'armatura fallita: %s\n"
-#, fuzzy, c-format
-#| msgid "invalid hash algorithm `%s'\n"
+#, c-format
msgid "invalid hash algorithm '%s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "algoritmo hash non valido '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error parsing key specification '%s': %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante l'analisi della specifica della chiave '%s': %s\n"
#, c-format
msgid "'%s' does not appear to be a valid key ID, fingerprint or keygrip\n"
msgstr ""
+"'%s' non sembra essere un ID chiave, un'impronta digitale o un keygrip "
+"valido\n"
#, c-format
msgid "WARNING: no command supplied. Trying to guess what you mean ...\n"
msgstr ""
+"AVVISO: nessun comando fornito. Cercando di indovinare cosa vuoi dire ...\n"
#, c-format
msgid "Go ahead and type your message ...\n"
@@ -2673,13 +2542,12 @@ msgstr "l'URL della politica di certificazione indicato non è valido\n"
msgid "the given signature policy URL is invalid\n"
msgstr "l'URL della politica di firma indicato non è valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "the given preferred keyserver URL is invalid\n"
-msgstr "l'URL della politica di firma indicato non è valido\n"
+msgstr "l'URL del keyserver preferito specificato non è valido\n"
-#, fuzzy
msgid "|FILE|take the keys from the keyring FILE"
-msgstr "prende le chiavi da questo portachiavi"
+msgstr "| FILE: prendere le chiavi dal file di tasti"
msgid "make timestamp conflicts only a warning"
msgstr "segnala i conflitti di data solo con un avvertimento"
@@ -2688,84 +2556,77 @@ msgid "|FD|write status info to this FD"
msgstr "|FD|scrivi le informazioni di stato sul FD"
msgid "|ALGO|reject signatures made with ALGO"
-msgstr ""
+msgstr "|ALGO|rifiuta le firme fatte con ALGO"
msgid "Usage: gpgv [options] [files] (-h for help)"
msgstr "Uso: gpgv [opzioni] [file] (-h per l'aiuto)"
-#, fuzzy
msgid ""
"Syntax: gpgv [options] [files]\n"
"Check signatures against known trusted keys\n"
msgstr ""
-"Sintassi: gpg [opzioni] [file]\n"
-"Controlla le firme con le chiavi affidabili note\n"
+"Sintassi: gpgv [opzioni] [file]\n"
+"Controllare le firme rispetto alle chiavi attendibili note\n"
msgid "No help available"
msgstr "Non è disponibile un aiuto"
-#, fuzzy, c-format
-#| msgid "No help available for `%s'"
+#, c-format
msgid "No help available for '%s'"
-msgstr "Non è disponibile un aiuto per `%s'"
+msgstr "Nessuna Guida disponibile per '%s'."
msgid "import signatures that are marked as local-only"
-msgstr ""
+msgstr "importare firme contrassegnate come solo locali"
msgid "repair damage from the pks keyserver during import"
-msgstr ""
+msgstr "riparare i danni dal keyserver pks durante l'importazione"
-#, fuzzy
msgid "do not clear the ownertrust values during import"
-msgstr "aggiorna il database della fiducia"
+msgstr "non cancellare i valori ownertrust durante l'importazione"
-#, fuzzy
msgid "do not update the trustdb after import"
-msgstr "aggiorna il database della fiducia"
+msgstr "non aggiornare il trustdb dopo l'importazione"
-#, fuzzy
msgid "show key during import"
-msgstr "mostra le impronte digitali"
+msgstr "mostra chiave durante l'importazione"
msgid "only accept updates to existing keys"
-msgstr ""
+msgstr "accettare solo gli aggiornamenti alle chiavi esistenti"
-#, fuzzy
msgid "remove unusable parts from key after import"
-msgstr "chiave segreta inutilizzabile"
+msgstr "rimuovere le parti inutilizzabili dalla chiave dopo l'importazione"
msgid "remove as much as possible from key after import"
-msgstr ""
+msgstr "rimuovere il più possibile dalla chiave dopo l'importazione"
msgid "ignore key-signatures which are not self-signatures"
-msgstr ""
+msgstr "ignorare le firme chiave che non sono auto-firme"
msgid "run import filters and export key immediately"
msgstr ""
+"eseguire immediatamente i filtri di importazione e la chiave di esportazione"
msgid "assume the GnuPG key backup format"
-msgstr ""
+msgstr "assumere il formato di backup della chiave GnuPG"
-#, fuzzy
msgid "repair keys on import"
-msgstr "mostra le impronte digitali"
+msgstr "ripristinare le chiavi all'importazione"
#, c-format
msgid "skipping block of type %d\n"
msgstr "salto un blocco di tipo %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "%lu keys processed so far\n"
-msgstr "Per ora sono state esaminate %lu chiavi\n"
+msgstr "%lu chiavi elaborate finora\n"
#, c-format
msgid "Total number processed: %lu\n"
msgstr "Numero totale esaminato: %lu\n"
-#, fuzzy, c-format
-#| msgid " skipped new keys: %lu\n"
+#, c-format
msgid " skipped PGP-2 keys: %lu\n"
-msgstr " nuove chiavi saltate: %lu\n"
+msgstr " Chiavi PGP-2 ignorate: %lu\n"
#, c-format
msgid " skipped new keys: %lu\n"
@@ -2797,7 +2658,7 @@ msgstr " nuove firme: %lu\n"
#, c-format
msgid " new key revocations: %lu\n"
-msgstr "nuove revoche di chiavi: %lu\n"
+msgstr " nuove revoche di chiavi: %lu\n"
#, c-format
msgid " secret keys read: %lu\n"
@@ -2805,162 +2666,165 @@ msgstr " chiavi segrete lette: %lu\n"
#, c-format
msgid " secret keys imported: %lu\n"
-msgstr "chiavi segrete importate: %lu\n"
+msgstr " chiavi segrete importate: %lu\n"
#, c-format
msgid " secret keys unchanged: %lu\n"
-msgstr "chiavi segrete non cambiate: %lu\n"
+msgstr " chiavi segrete non cambiate: %lu\n"
#, c-format
msgid " not imported: %lu\n"
msgstr " importate: %lu\n"
-#, fuzzy, c-format
+#, c-format
msgid " signatures cleaned: %lu\n"
-msgstr " nuove firme: %lu\n"
+msgstr " firme pulite: %lu\n"
-#, fuzzy, c-format
+#, c-format
msgid " user IDs cleaned: %lu\n"
-msgstr " chiavi segrete lette: %lu\n"
+msgstr " ID utente puliti: %lu\n"
#, c-format
msgid ""
"WARNING: key %s contains preferences for unavailable\n"
"algorithms on these user IDs:\n"
msgstr ""
+"AVVISO: la chiave %s contiene le preferenze per\n"
+"algoritmi su questi ID utente:\n"
#, c-format
msgid " \"%s\": preference for cipher algorithm %s\n"
-msgstr ""
+msgstr " \"%s\": preferenza per l'algoritmo di crittografia %s\n"
-#, fuzzy, c-format
+#, c-format
msgid " \"%s\": preference for digest algorithm %s\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr " \"%s\": preferenza per l'algoritmo digest %s\n"
#, c-format
msgid " \"%s\": preference for compression algorithm %s\n"
-msgstr ""
+msgstr " \"%s\": preferenza per l'algoritmo di compressione %s\n"
#, c-format
msgid "it is strongly suggested that you update your preferences and\n"
-msgstr ""
+msgstr "si consiglia vivamente di aggiornare le preferenze e\n"
#, c-format
msgid "re-distribute this key to avoid potential algorithm mismatch problems\n"
msgstr ""
+"ri-distribuire questa chiave per evitare potenziali problemi di mancata "
+"corrispondenza dell'algoritmo\n"
#, c-format
msgid "you can update your preferences with: gpg --edit-key %s updpref save\n"
msgstr ""
+"è possibile aggiornare le preferenze con: gpg --edit-key %s updpref save\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no user ID\n"
-msgstr "chiave %08lX: nessun user ID\n"
+msgstr "chiave %s: nessun ID utente\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: %s\n"
-msgstr "saltata `%s': %s\n"
+msgstr "chiave %s: %s\n"
msgid "rejected by import screener"
-msgstr ""
+msgstr "rifiutato dallo screener di importazione"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: PKS subkey corruption repaired\n"
-msgstr "chiave %08lX: riparati i danni di HKP alla subchiave\n"
+msgstr "chiave %s: danneggiamento della sottochiave PKS riparato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: accepted non self-signed user ID \"%s\"\n"
-msgstr "chiave %08lX: accettato l'user ID non autofirmato '%s'\n"
+msgstr "chiave %s: accettato ID utente non autofirmato \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no valid user IDs\n"
-msgstr "chiave %08lX: nessun user ID valido\n"
+msgstr "chiave %s: nessun ID utente valido\n"
#, c-format
msgid "this may be caused by a missing self-signature\n"
msgstr "questo può essere causato da una autofirma mancante\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: public key not found: %s\n"
-msgstr "chiave %08lX: chiave pubblica non trovata: %s\n"
+msgstr "chiave %s: chiave pubblica non trovata: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: new key - skipped\n"
-msgstr "chiave %08lX: nuova chiave - saltata\n"
+msgstr "chiave %s: nuova chiave - ignorata\n"
#, c-format
msgid "no writable keyring found: %s\n"
msgstr "non è stato trovato un portachiavi scrivibile: %s\n"
-#, fuzzy, c-format
-#| msgid "error writing keyring `%s': %s\n"
+#, c-format
msgid "error writing keyring '%s': %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la scrittura della chiave '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: public key \"%s\" imported\n"
-msgstr "chiave %08lX: importata la chiave pubblica \"%s\"\n"
+msgstr "chiave %s: chiave pubblica \"%s\" importata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: doesn't match our copy\n"
-msgstr "chiave %08lX: non corrisponde alla nostra copia\n"
+msgstr "chiave %s: non corrisponde alla nostra copia\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" 1 new user ID\n"
-msgstr "chiave %08lX: \"%s\" 1 nuovo user ID\n"
+msgstr "chiave %s: \"%s\" 1 nuovo ID utente\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d new user IDs\n"
-msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n"
+msgstr "chiave %s: \"%s\" %d nuovi ID utente\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" 1 new signature\n"
-msgstr "chiave %08lX: \"%s\" una nuova firma\n"
+msgstr "chiave %s: \"%s\" 1 nuova firma\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d new signatures\n"
-msgstr "chiave %08lX: \"%s\" %d nuove firme\n"
+msgstr "chiave %s: \"%s\" %d nuove firme\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" 1 new subkey\n"
-msgstr "chiave %08lX: \"%s\" una nuova subchiave\n"
+msgstr "chiave %s: \"%s\" 1 nuova sottochiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d new subkeys\n"
-msgstr "chiave %08lX: \"%s\" %d nuove subchiavi\n"
+msgstr "chiave %s: \"%s\" %d nuove sottochiavi\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d signature cleaned\n"
-msgstr "chiave %08lX: \"%s\" %d nuove firme\n"
+msgstr "chiave %s: \"%s\" %d firma pulita\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d signatures cleaned\n"
-msgstr "chiave %08lX: \"%s\" %d nuove firme\n"
+msgstr "chiave %s: \"%s\" %d firme pulite\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d user ID cleaned\n"
-msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n"
+msgstr "chiave %s: \"%s\" %d ID utente pulito\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" %d user IDs cleaned\n"
-msgstr "chiave %08lX: \"%s\" %d nuovi user ID\n"
+msgstr "chiave %s: \"%s\" %d ID utente puliti\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" not changed\n"
-msgstr "chiave %08lX: \"%s\" non cambiata\n"
+msgstr "chiave %s: \"%s\" non modificata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: secret key imported\n"
-msgstr "chiave %08lX: chiave segreta importata\n"
+msgstr "chiave %s: chiave segreta importata\n"
-#, fuzzy, c-format
-#| msgid "skipped: secret key already present\n"
+#, c-format
msgid "key %s: secret key already exists\n"
-msgstr "saltata: chiave pubblica già presente\n"
+msgstr "chiave %s: chiave segreta già esistente\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: error sending to agent: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "chiave %s: errore durante l'invio all'agente: %s\n"
#. TRANSLATORS: For a smartcard, each private key on host has a
#. * reference (stub) to a smartcard and actual private key data
@@ -2972,19 +2836,19 @@ msgstr "errore leggendo `%s': %s\n"
#. * again.
#, c-format
msgid "To migrate '%s', with each smartcard, run: %s\n"
-msgstr ""
+msgstr "Per eseguire la migrazione di '%s', con ogni smart card: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "secret key %s: %s\n"
-msgstr "chiave segreta `%s' non trovata: %s\n"
+msgstr "chiave segreta %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "importing secret keys not allowed\n"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "importazione di chiavi segrete non consentita\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: secret key with invalid cipher %d - skipped\n"
-msgstr "chiave %08lX: chiave segreta con cifrario %d non valido - saltata\n"
+msgstr "chiave %s: chiave segreta con crittografia non valida %d - ignorata\n"
msgid "No reason specified"
msgstr "Nessuna ragione specificata"
@@ -3009,203 +2873,205 @@ msgstr "ragione della revoca: "
msgid "revocation comment: "
msgstr "commento alla revoca: "
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no public key - can't apply revocation certificate\n"
msgstr ""
-"chiave %08lX: manca la chiave pubblica - impossibile applicare il\n"
-"certificato di revoca\n"
+"chiave %s: nessuna chiave pubblica - impossibile applicare il certificato di "
+"revoca\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: can't locate original keyblock: %s\n"
-msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n"
+msgstr "chiave %s: impossibile individuare il blocco di chiave originale: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: can't read original keyblock: %s\n"
-msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n"
+msgstr "chiave %s: impossibile leggere il keyblock originale: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid revocation certificate: %s - rejected\n"
-msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n"
+msgstr "chiave %s: certificato di revoca non valido: %s - rifiutato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" revocation certificate imported\n"
-msgstr "chiave %08lX: \"%s\" certificato di revoca importato\n"
+msgstr "chiave %s: certificato di revoca \"%s\" importato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no user ID for signature\n"
-msgstr "chiave %08lX: nessun user ID per la firma\n"
+msgstr "chiave %s: nessun ID utente per la firma\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n"
msgstr ""
-"chiave %08lX: algoritmo a chiave pubblica non gestito sull'user ID \"%s\"\n"
+"chiave %s: algoritmo a chiave pubblica non supportato sull'ID utente \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid self-signature on user ID \"%s\"\n"
-msgstr "chiave %08lX: autofirma non valida sull'user ID \"%s\"\n"
+msgstr "chiave %s: autode firma non valida sull'ID utente \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: unsupported public key algorithm\n"
-msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n"
+msgstr "chiave %s: algoritmo a chiave pubblica non supportato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid direct key signature\n"
-msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n"
+msgstr "chiave %s: firma diretta della chiave non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no subkey for key binding\n"
-msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n"
+msgstr "chiave %s: nessuna sottochiave per l'associazione della chiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid subkey binding\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
+msgstr "chiave %s: associazione di sottochiavi non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: removed multiple subkey binding\n"
-msgstr "chiave %08lX: rimossi i legami con subochiavi multiple\n"
+msgstr "chiave %s: rimossa l'associazione di più sottochiavi\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no subkey for key revocation\n"
-msgstr "chiave %08lX: non ci sono subchiavi per la revoca della chiave\n"
+msgstr "chiave %s: nessuna sottochiave per la revoca della chiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid subkey revocation\n"
-msgstr "chiave %08lX: revoca della subchiave non valida\n"
+msgstr "chiave %s: revoca della sottochiave non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: removed multiple subkey revocation\n"
-msgstr "chiave %08lX: rimosse le revoche di subchiavi multiple\n"
+msgstr "chiave %s: rimossa la revoca di più sottochiavi\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: skipped user ID \"%s\"\n"
-msgstr "chiave %08lX: saltato l'user ID '"
+msgstr "chiave %s: ID utente ignorato \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: skipped subkey\n"
-msgstr "chiave %08lX: saltata la subchiave\n"
+msgstr "chiave %s: sottochiave ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: non exportable signature (class 0x%02X) - skipped\n"
-msgstr "chiave %08lX: firma non esportabile (classe %02x) - saltata\n"
+msgstr "chiave %s: firma non esportabile (classe 0x%02X) - ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: revocation certificate at wrong place - skipped\n"
-msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltata\n"
+msgstr "chiave %s: certificato di revoca nella posizione errata - ignorato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: invalid revocation certificate: %s - skipped\n"
-msgstr "chiave %08lX: certificato di revoca non valido: %s - saltata\n"
+msgstr "chiave %s: certificato di revoca non valido: %s - ignorato\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: subkey signature in wrong place - skipped\n"
-msgstr "chiave %08lX: firma della subchiave nel posto sbagliato - saltata\n"
+msgstr "chiave %s: firma della sottochiave nella posizione errata - ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: unexpected signature class (0x%02X) - skipped\n"
-msgstr "chiave %08lX: classe della firma inaspettata (0x%02x) - saltata\n"
+msgstr "chiave %s: classe di firma imprevista (0x%02X) - ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: duplicated user ID detected - merged\n"
-msgstr "chiave %08lX: trovato un user ID duplicato - unito\n"
+msgstr "chiave %s: rilevato ID utente duplicato - unito\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: key %s may be revoked: fetching revocation key %s\n"
msgstr ""
-"ATTENZIONE: la chiave %08lX può essere stata revocata: scarico la chiave\n"
-"di revoca %08lX.\n"
+"AVVISO: la chiave %s può essere revocata: recupero della chiave di revoca "
+"%s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: key %s may be revoked: revocation key %s not present.\n"
msgstr ""
-"ATTENZIONE: la chiave %08lX può essere stata revocata: la chiave di\n"
-"revoca %08lX non è presente.\n"
+"AVVISO: la chiave %s può essere revocata: chiave di revoca %s non presente.\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: \"%s\" revocation certificate added\n"
-msgstr "chiave %08lX: certificato di revoca \"%s\" aggiunto\n"
+msgstr "chiave %s: certificato di revoca \"%s\" aggiunto\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: direct key signature added\n"
-msgstr "chiave %08lX: aggiunta una firma alla chiave diretta\n"
+msgstr "chiave %s: aggiunta firma chiave diretta\n"
-#, fuzzy, c-format
+#, c-format
msgid "error allocating memory: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante l'allocazione della memoria: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't check signature with unsupported public-key algorithm (%d): %s.\n"
-msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n"
+msgstr ""
+"impossibile controllare la firma con algoritmo a chiave pubblica non "
+"supportato (%d): %s.\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"can't check signature with unsupported message-digest algorithm %d: %s.\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr ""
+"impossibile controllare la firma con l'algoritmo digest del messaggio non "
+"supportato %d: %s.\n"
-#, fuzzy
msgid " (reordered signatures follow)"
-msgstr "Firma valida da \""
+msgstr " (seguono le firme riordinate)"
-#, fuzzy, c-format
+#, c-format
msgid "key %s:\n"
-msgstr "saltata `%s': %s\n"
+msgstr "chiave %s:\n"
-#, fuzzy, c-format
+#, c-format
msgid "%d duplicate signature removed\n"
msgid_plural "%d duplicate signatures removed\n"
-msgstr[0] "L'user ID \"%s\" è stato revocato."
-msgstr[1] "L'user ID \"%s\" è stato revocato."
+msgstr[0] ""
+"%d firma duplicata rimossa\n"
+"\n"
+msgstr[1] "%d firme duplicate rimosse\n"
-#, fuzzy, c-format
-#| msgid "1 signature not checked due to a missing key\n"
+#, c-format
msgid "%d signature not checked due to a missing key\n"
msgid_plural "%d signatures not checked due to missing keys\n"
-msgstr[0] "una firma non controllata per mancanza della chiave\n"
-msgstr[1] "una firma non controllata per mancanza della chiave\n"
+msgstr[0] "%d firma non controllata a causa di una chiave mancante\n"
+msgstr[1] "%d firme non controllate a causa di chiavi mancanti\n"
-#, fuzzy, c-format
-#| msgid "%d bad signatures\n"
+#, c-format
msgid "%d bad signature\n"
msgid_plural "%d bad signatures\n"
-msgstr[0] "%d firme non corrette\n"
-msgstr[1] "%d firme non corrette\n"
+msgstr[0] "%d firma non valida\n"
+msgstr[1] "%d firme non valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "%d signature reordered\n"
msgid_plural "%d signatures reordered\n"
-msgstr[0] "Firma valida da \""
-msgstr[1] "Firma valida da \""
+msgstr[0] "Firma %d riordinata\n"
+msgstr[1] "Firme %d riordinata\n"
#, c-format
msgid ""
"Warning: errors found and only checked self-signatures, run '%s' to check "
"all signatures.\n"
msgstr ""
+"Avviso: errori rilevati e controllati solo auto-firme, eseguire '%s' per "
+"controllare tutte le firme.\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating keybox '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante la creazione della casella della chiave '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
msgid "error creating keyring '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante la creazione della chiave '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "keybox '%s' created\n"
-msgstr "portachiavi `%s' creato\n"
+msgstr "keybox '%s' creato\n"
-#, fuzzy, c-format
-#| msgid "keyring `%s' created\n"
+#, c-format
msgid "keyring '%s' created\n"
-msgstr "portachiavi `%s' creato\n"
+msgstr "chiave '%s' creata\n"
-#, fuzzy, c-format
+#, c-format
msgid "keyblock resource '%s': %s\n"
-msgstr "errore creando `%s': %s\n"
+msgstr "risorsa keyblock '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error opening key DB: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'apertura della chiave DB: %s\n"
#, c-format
msgid "failed to rebuild keyring cache: %s\n"
@@ -3217,38 +3083,41 @@ msgstr "[revoca]"
msgid "[self-signature]"
msgstr "[autofirma]"
-#, fuzzy
msgid ""
"Please decide how far you trust this user to correctly verify other users' "
"keys\n"
"(by looking at passports, checking fingerprints from different sources, "
"etc.)\n"
msgstr ""
-"Per favore decidi quanto hai fiducia che questo utente firmi correttamente\n"
-"le chiavi di altri utenti (guardando il loro passaporto, controllando le\n"
-"impronte digitali da diverse fonti...)?\n"
-"\n"
+"Si prega di decidere fino a che punto si considera attendibile questo utente "
+"per verificare correttamente le chiavi di altri utenti\n"
+"(guardando i passaporti, controllando le impronte digitali da fonti diverse, "
+"ecc.)\n"
-#, fuzzy, c-format
+#, c-format
msgid " %d = I trust marginally\n"
-msgstr " %d = Mi fido marginalmente\n"
+msgstr " %d - Mi fido marginalmente\n"
-#, fuzzy, c-format
+#, c-format
msgid " %d = I trust fully\n"
-msgstr " %d = Mi fido completamente\n"
+msgstr " %d - Mi fido completamente\n"
msgid ""
"Please enter the depth of this trust signature.\n"
"A depth greater than 1 allows the key you are signing to make\n"
"trust signatures on your behalf.\n"
msgstr ""
+"Immettere la profondità di questa firma di attendibilità.\n"
+"Una profondità maggiore di 1 consente alla chiave che si sta firmando di\n"
+"firme di attendibilità per vostro conto.\n"
msgid "Please enter a domain to restrict this signature, or enter for none.\n"
msgstr ""
+"Inserisci un dominio per limitare questa firma o inserisci per nessuno.\n"
#, c-format
msgid "Skipping user ID \"%s\", which is not a text ID.\n"
-msgstr ""
+msgstr "Ignorare l'ID utente \"%s\", che non è un ID di testo.\n"
#, c-format
msgid "User ID \"%s\" is revoked."
@@ -3268,13 +3137,12 @@ msgstr "L'user ID \"%s\" è scaduto."
msgid "User ID \"%s\" is not self-signed."
msgstr "L'user ID \"%s\" non è autofirmato."
-#, fuzzy, c-format
+#, c-format
msgid "User ID \"%s\" is signable. "
-msgstr "L'user ID \"%s\" non è autofirmato."
+msgstr "L'ID utente \"%s\" è firmabile. "
-#, fuzzy
msgid "Sign it? (y/N) "
-msgstr "Firmo davvero? "
+msgstr "Firmarlo? (y/N) "
#, c-format
msgid ""
@@ -3309,20 +3177,20 @@ msgstr ""
msgid "Do you want to promote it to a full exportable signature? (y/N) "
msgstr "Vuoi trasformarla in una firma completa esportabile? (s/N) "
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" was already locally signed by key %s\n"
-msgstr "\"%s\" era già stato firmato localmente dalla chiave %08lX\n"
+msgstr "\"%s\" era già firmato localmente dalla chiave %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" was already signed by key %s\n"
-msgstr "\"%s\" era già stato firmato dalla chiave %08lX\n"
+msgstr "\"%s\" è già stato firmato dalla chiave %s\n"
msgid "Do you want to sign it again anyway? (y/N) "
msgstr "Sei ancora sicuro di volerla firmare di nuovo? (s/N) "
-#, fuzzy, c-format
+#, c-format
msgid "Nothing to sign with key %s\n"
-msgstr "Niente da firmare con la chiave %08lX\n"
+msgstr "Niente da firmare con la chiave %s\n"
msgid "This key has expired!"
msgstr "Questa chiave è scaduta!"
@@ -3359,69 +3227,43 @@ msgstr " (2) L'ho controllata superficialmente.%s\n"
msgid " (3) I have done very careful checking.%s\n"
msgstr " (3) L'ho controllata molto attentamente.%s\n"
-#, fuzzy
msgid "Your selection? (enter '?' for more information): "
-msgstr "Cosa scegli? (inserisci '?' per ulteriori informazioni): "
+msgstr "La tua scelta? (inserire '?' per ulteriori informazioni): "
-#, fuzzy, c-format
+#, c-format
msgid ""
"Are you sure that you want to sign this key with your\n"
"key \"%s\" (%s)\n"
msgstr ""
-"Sei davvero sicuro di volere firmare questa chiave\n"
-"con la tua chiave: \""
+"Sei sicuro di voler firmare questa chiave con il tuo\n"
+"chiave \"%s\" (%s)\n"
-#, fuzzy
msgid "This will be a self-signature.\n"
-msgstr ""
-"\n"
-"Questa sarà una autofirma.\n"
+msgstr "Questa sarà un'auto-firma.\n"
-#, fuzzy
msgid "WARNING: the signature will not be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"ATTENZIONE: la firma non sarà marcata come non esportabile.\n"
+msgstr "AVVISO: la firma non verrà contrassegnata come non esportabile.\n"
-#, fuzzy
msgid "WARNING: the signature will not be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"ATTENZIONE: la firma sarà marcata come irrevocabile.\n"
+msgstr "AVVISO: la firma non verrà contrassegnata come non revocabile.\n"
-#, fuzzy
msgid "The signature will be marked as non-exportable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come non esportabile.\n"
+msgstr "La firma verrà contrassegnata come non esportabile.\n"
-#, fuzzy
msgid "The signature will be marked as non-revocable.\n"
-msgstr ""
-"\n"
-"La firma sarà marcata come irrevocabile.\n"
+msgstr "La firma verrà contrassegnata come non revocabile.\n"
-#, fuzzy
msgid "I have not checked this key at all.\n"
-msgstr ""
-"\n"
-"Non ho controllato per niente questa chiave.\n"
+msgstr "Non ho controllato questa chiave a tutti.\n"
-#, fuzzy
msgid "I have checked this key casually.\n"
-msgstr ""
-"\n"
-"Ho controllato questa chiave superficialmente.\n"
+msgstr "Ho controllato questa chiave casualmente.\n"
-#, fuzzy
msgid "I have checked this key very carefully.\n"
-msgstr ""
-"\n"
-"Ho controllato questa chiave molto attentamente.\n"
+msgstr "Ho controllato questa chiave con molta attenzione.\n"
-#, fuzzy
msgid "Really sign? (y/N) "
-msgstr "Firmo davvero? "
+msgstr "Davvero firmare? (y/N) "
#, c-format
msgid "signing failed: %s\n"
@@ -3429,22 +3271,21 @@ msgstr "firma fallita: %s\n"
msgid "Key has only stub or on-card key items - no passphrase to change.\n"
msgstr ""
+"Key ha solo elementi chiave stub o on-card - nessuna passphrase da "
+"modificare.\n"
-#, fuzzy, c-format
-#| msgid "error creating passphrase: %s\n"
+#, c-format
msgid "key %s: error changing passphrase: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "chiave %s: errore durante la modifica della passphrase: %s\n"
msgid "save and quit"
msgstr "salva ed esci"
-#, fuzzy
msgid "show key fingerprint"
-msgstr "mostra le impronte digitali"
+msgstr "mostra impronta digitale chiave"
-#, fuzzy
msgid "show the keygrip"
-msgstr "Annotazione della firma: "
+msgstr "mostrare il keygrip"
msgid "list key and user IDs"
msgstr "elenca le chiavi e gli user ID"
@@ -3452,27 +3293,25 @@ msgstr "elenca le chiavi e gli user ID"
msgid "select user ID N"
msgstr "scegli l'user ID N"
-#, fuzzy
msgid "select subkey N"
-msgstr "scegli l'user ID N"
+msgstr "selezionare la sottochiave N"
-#, fuzzy
msgid "check signatures"
-msgstr "revoca firme"
+msgstr "controllare le firme"
msgid "sign selected user IDs [* see below for related commands]"
msgstr ""
+"firmare gli ID utente selezionati [* vedere di seguito per i comandi "
+"correlati]"
-#, fuzzy
msgid "sign selected user IDs locally"
-msgstr "firma la chiave localmente"
+msgstr "firmare gli ID utente selezionati localmente"
-#, fuzzy
msgid "sign selected user IDs with a trust signature"
-msgstr "Suggerimento: seleziona gli user ID da firmare\n"
+msgstr "firmare gli ID utente selezionati con una firma di trust"
msgid "sign selected user IDs with a non-revocable signature"
-msgstr ""
+msgstr "firmare gli ID utente selezionati con una firma non-revocabile"
msgid "add a user ID"
msgstr "aggiungi un user ID"
@@ -3480,41 +3319,36 @@ msgstr "aggiungi un user ID"
msgid "add a photo ID"
msgstr "aggiungi un ID fotografico"
-#, fuzzy
msgid "delete selected user IDs"
-msgstr "cancella un user ID"
+msgstr "eliminare gli ID utente selezionati"
-#, fuzzy
msgid "add a subkey"
-msgstr "addkey"
+msgstr "aggiungere una sottochiave"
msgid "add a key to a smartcard"
-msgstr ""
+msgstr "aggiungere una chiave a una smart card"
msgid "move a key to a smartcard"
-msgstr ""
+msgstr "spostare un tasto in una smart card"
msgid "move a backup key to a smartcard"
-msgstr ""
+msgstr "spostare una chiave di backup in una smart card"
-#, fuzzy
msgid "delete selected subkeys"
-msgstr "cancella una chiave secondaria"
+msgstr "eliminare le sottochiavi selezionate"
msgid "add a revocation key"
msgstr "aggiungi una chiave di revoca"
-#, fuzzy
msgid "delete signatures from the selected user IDs"
-msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
+msgstr "eliminare le firme dagli ID utente selezionati"
-#, fuzzy
msgid "change the expiration date for the key or selected subkeys"
-msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n"
+msgstr ""
+"modificare la data di scadenza della chiave o delle sottochiavi selezionate"
-#, fuzzy
msgid "flag the selected user ID as primary"
-msgstr "imposta l'user ID come primario"
+msgstr "contrassegnare l'ID utente selezionato come primario"
msgid "list preferences (expert)"
msgstr "elenca le preferenze (per esperti)"
@@ -3522,17 +3356,16 @@ msgstr "elenca le preferenze (per esperti)"
msgid "list preferences (verbose)"
msgstr "elenca le preferenze (prolisso)"
-#, fuzzy
msgid "set preference list for the selected user IDs"
-msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
+msgstr "impostare l'elenco delle preferenze per gli ID utente selezionati"
-#, fuzzy
msgid "set the preferred keyserver URL for the selected user IDs"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
+msgstr ""
+"impostare l'URL del server delle chiavi preferito per gli ID utente "
+"selezionati"
-#, fuzzy
msgid "set a notation for the selected user IDs"
-msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
+msgstr "impostare una notazione per gli ID utente selezionati"
msgid "change the passphrase"
msgstr "cambia la passphrase"
@@ -3540,43 +3373,39 @@ msgstr "cambia la passphrase"
msgid "change the ownertrust"
msgstr "cambia il valore di fiducia"
-#, fuzzy
msgid "revoke signatures on the selected user IDs"
-msgstr "Revoco davvero tutti gli user ID selezionati? "
+msgstr "revocare le firme sugli ID utente selezionati"
-#, fuzzy
msgid "revoke selected user IDs"
-msgstr "revoca un user ID"
+msgstr "revocare gli ID utente selezionati"
-#, fuzzy
msgid "revoke key or selected subkeys"
-msgstr "revoca una chiave secondaria"
+msgstr "revoca della chiave o delle sottochiavi selezionate"
-#, fuzzy
msgid "enable key"
-msgstr "abilita una chiave"
+msgstr "chiave di abilitazione"
-#, fuzzy
msgid "disable key"
-msgstr "disabilita una chiave"
+msgstr "tasto di disattivazione"
-#, fuzzy
msgid "show selected photo IDs"
-msgstr "mostra l'ID fotografico"
+msgstr "mostra GLI ID foto selezionati"
msgid "compact unusable user IDs and remove unusable signatures from key"
msgstr ""
+"compattare id utente inutilizzabili e rimuovere le firme inutilizzabili "
+"dalla chiave"
msgid "compact unusable user IDs and remove all signatures from key"
msgstr ""
+"compattare gli ID utente inutilizzabili e rimuovere tutte le firme dalla "
+"chiave"
msgid "Secret key is available.\n"
msgstr "È disponibile una chiave segreta.\n"
-#, fuzzy
-#| msgid "Secret key is available.\n"
msgid "Secret subkeys are available.\n"
-msgstr "È disponibile una chiave segreta.\n"
+msgstr "Sono disponibili sottochiavi segrete.\n"
msgid "Need the secret key to do this.\n"
msgstr "Per fare questo serve la chiave segreta.\n"
@@ -3587,24 +3416,27 @@ msgid ""
" a 't' for trust signatures (tsign), an 'nr' for non-revocable signatures\n"
" (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n"
msgstr ""
+"Il comando 'sign' può essere preceduto da una 'l' per le firme locali "
+"(lsign),\n"
+" una 't' per le firme di trust (tsign), un 'nr' per le firme non "
+"revocabili\n"
+" (nrsign), o qualsiasi altra combinazione (ltsign, tnrsign, ecc.).\n"
msgid "Key is revoked."
msgstr "La chiave è stata revocata."
-#, fuzzy
msgid "Really sign all text user IDs? (y/N) "
-msgstr "Firmo davvero tutti gli user ID? "
+msgstr "Firmare davvero tutti gli ID utente di testo? (y/N) "
-#, fuzzy
msgid "Really sign all user IDs? (y/N) "
-msgstr "Firmo davvero tutti gli user ID? "
+msgstr "Firmare davvero tutti gli ID utente? (y/N) "
msgid "Hint: Select the user IDs to sign\n"
msgstr "Suggerimento: seleziona gli user ID da firmare\n"
-#, fuzzy, c-format
+#, c-format
msgid "Unknown signature type '%s'\n"
-msgstr "classe della firma sconosciuta"
+msgstr "Tipo di firma sconosciuto '%s'\n"
#, c-format
msgid "This command is not allowed while in %s mode.\n"
@@ -3615,147 +3447,137 @@ msgstr "Devi selezionare almeno un user ID.\n"
#, c-format
msgid "(Use the '%s' command.)\n"
-msgstr ""
+msgstr "(Utilizzare il comando '%s'.)\n"
msgid "You can't delete the last user ID!\n"
msgstr "Non puoi cancellare l'ultimo user ID!\n"
-#, fuzzy
msgid "Really remove all selected user IDs? (y/N) "
-msgstr "Tolgo davvero tutti gli user ID selezionati? "
+msgstr "Rimuovere davvero tutti gli ID utente selezionati? (y/N) "
-#, fuzzy
msgid "Really remove this user ID? (y/N) "
-msgstr "Tolgo davvero questo user ID? "
+msgstr "Rimuovere davvero questo ID utente? (y/N) "
#. TRANSLATORS: Please take care: This is about
#. moving the key and not about removing it.
-#, fuzzy
msgid "Really move the primary key? (y/N) "
-msgstr "Tolgo davvero questo user ID? "
+msgstr "Spostare davvero la chiave primaria? (y/N) "
-#, fuzzy
msgid "You must select exactly one key.\n"
-msgstr "Devi selezionare almeno una chiave.\n"
+msgstr "È necessario selezionare esattamente una chiave.\n"
msgid "Command expects a filename argument\n"
-msgstr ""
+msgstr "Il comando prevede un argomento filename\n"
-#, fuzzy, c-format
+#, c-format
msgid "Can't open '%s': %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "Impossibile aprire '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Error reading backup key from '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "Errore durante la lettura della chiave di backup da '%s': %s\n"
msgid "You must select at least one key.\n"
msgstr "Devi selezionare almeno una chiave.\n"
-#, fuzzy
msgid "Do you really want to delete the selected keys? (y/N) "
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
+msgstr "Vuoi davvero eliminare le chiavi selezionate? (y/N) "
-#, fuzzy
msgid "Do you really want to delete this key? (y/N) "
-msgstr "Vuoi davvero cancellare questa chiave? "
+msgstr "Vuoi davvero eliminare questa chiave? (y/N) "
-#, fuzzy
msgid "Really revoke all selected user IDs? (y/N) "
-msgstr "Revoco davvero tutti gli user ID selezionati? "
+msgstr "Revocare davvero tutti gli ID utente selezionati? (y/N) "
-#, fuzzy
msgid "Really revoke this user ID? (y/N) "
-msgstr "Revoco davvero questo user ID? "
+msgstr "Revocare davvero questo ID utente? (y/N) "
-#, fuzzy
msgid "Do you really want to revoke the entire key? (y/N) "
-msgstr "Vuoi davvero revocare questa chiave? "
+msgstr "Vuoi davvero revocare l'intera chiave? (y/N) "
-#, fuzzy
msgid "Do you really want to revoke the selected subkeys? (y/N) "
-msgstr "Vuoi davvero revocare le chiavi selezionate? "
+msgstr "Si desidera davvero revocare le sottochiavi selezionate? (y/N) "
-#, fuzzy
msgid "Do you really want to revoke this subkey? (y/N) "
-msgstr "Vuoi davvero revocare questa chiave? "
+msgstr "Si desidera davvero revocare questa sottochiave? (y/N) "
msgid "Owner trust may not be set while using a user provided trust database\n"
msgstr ""
+"L'attendibilità del proprietario potrebbe non essere impostata durante "
+"l'utilizzo di un database di trust fornito dall'utente\n"
-#, fuzzy
msgid "Set preference list to:\n"
-msgstr "imposta la lista di preferenze"
+msgstr "Impostare l'elenco delle preferenze su:\n"
-#, fuzzy
msgid "Really update the preferences for the selected user IDs? (y/N) "
-msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
+msgstr "Aggiornare davvero le preferenze per gli ID utente selezionati? (y/N) "
-#, fuzzy
msgid "Really update the preferences? (y/N) "
-msgstr "Aggiorno davvero le preferenze? "
+msgstr "Aggiornare davvero le preferenze? (y/N) "
-#, fuzzy
msgid "Save changes? (y/N) "
-msgstr "Salvo i cambiamenti? "
+msgstr "Salvare le modifiche? (y/N) "
-#, fuzzy
msgid "Quit without saving? (y/N) "
-msgstr "Esco senza salvare? "
+msgstr "Uscire senza salvare? (y/N) "
#, c-format
msgid "Key not changed so no update needed.\n"
msgstr "La chiave non è cambiata quindi non sono necessari aggiornamenti.\n"
-#, fuzzy, c-format
-#| msgid "You can't delete the last user ID!\n"
+#, c-format
msgid "cannot revoke the last valid user ID.\n"
-msgstr "Non puoi cancellare l'ultimo user ID!\n"
+msgstr "non può revocare l'ultimo ID utente valido.\n"
-#, fuzzy, c-format
+#, c-format
msgid "revoking the user ID failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "revoca dell'ID utente non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "setting the primary user ID failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "impostazione dell'ID utente primario non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" is not a fingerprint\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "\"%s\" non è un'impronta digitale\n"
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" is not the primary fingerprint\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "\"%s\" non è l'impronta digitale primaria\n"
-#, fuzzy, c-format
-#| msgid "invalid value\n"
+#, c-format
msgid "Invalid user ID '%s': %s\n"
-msgstr "valore non valido\n"
+msgstr "ID utente '%s' non valido: %s\n"
-#, fuzzy
-#| msgid "No such user ID.\n"
msgid "No matching user IDs."
-msgstr "User ID inesistente.\n"
+msgstr "Nessun ID utente corrispondente."
-#, fuzzy
msgid "Nothing to sign.\n"
-msgstr "Niente da firmare con la chiave %08lX\n"
+msgstr "Niente da firmare.\n"
+
+#, c-format
+msgid "Not signed by you.\n"
+msgstr "Non firmato da te.\n"
#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "controllo della firma creata fallito: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
-msgstr "%s non è un set di caratteri valido\n"
+msgstr "'%s' non è un'ora di scadenza valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "\"%s\" is not a proper fingerprint\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "\"%s\" non è un'impronta digitale corretta\n"
-#, fuzzy, c-format
+#, c-format
msgid "subkey \"%s\" not found\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "sottochiave \"%s\" non trovata\n"
msgid "AEAD: "
-msgstr ""
+msgstr "AEAD: "
msgid "Digest: "
msgstr "Digest: "
@@ -3764,60 +3586,58 @@ msgid "Features: "
msgstr "Caratteristiche: "
msgid "Keyserver no-modify"
-msgstr ""
+msgstr "Keyserver no-modify"
msgid "Preferred keyserver: "
-msgstr ""
+msgstr "Server delle chiavi preferito: "
-#, fuzzy
msgid "Notations: "
-msgstr "Nota: "
+msgstr "Notazioni: "
msgid "There are no preferences on a PGP 2.x-style user ID.\n"
msgstr "Non esistono preferense su un user ID in stile PGP 2.x\n"
-#, fuzzy, c-format
+#, c-format
msgid "The following key was revoked on %s by %s key %s\n"
-msgstr "Questa chiave può essere revocata dalla chiave %s "
+msgstr "La seguente chiave è stata revocata su %s dalla chiave %s %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "This key may be revoked by %s key %s"
-msgstr "Questa chiave può essere revocata dalla chiave %s "
+msgstr "Questa chiave può essere revocata dalla chiave %s %s"
-#, fuzzy
msgid "(sensitive)"
-msgstr " (sensibile)"
+msgstr "(sensibile)"
-#, fuzzy, c-format
+#, c-format
msgid "created: %s"
-msgstr "impossibile creare %s: %s\n"
+msgstr "creato: %s"
-#, fuzzy, c-format
+#, c-format
msgid "revoked: %s"
-msgstr "[revocata]"
+msgstr "revocato: %s"
-#, fuzzy, c-format
+#, c-format
msgid "expired: %s"
-msgstr "[scadenza: %s]"
+msgstr "scaduto: %s"
-#, fuzzy, c-format
+#, c-format
msgid "expires: %s"
-msgstr "[scadenza: %s]"
+msgstr "scadenza: %s"
-#, fuzzy, c-format
+#, c-format
msgid "usage: %s"
-msgstr " fiducia: %c/%c"
+msgstr "utilizzo: %s"
msgid "card-no: "
-msgstr ""
+msgstr "scheda-no: "
-#, fuzzy, c-format
+#, c-format
msgid "trust: %s"
-msgstr " fiducia: %c/%c"
+msgstr "attendibilità: %s"
#, c-format
msgid "validity: %s"
-msgstr ""
+msgstr "validità: %s"
msgid "This key has been disabled"
msgstr "Questa chiave è stata disabilitata"
@@ -3830,13 +3650,11 @@ msgstr ""
"corretta\n"
"finchè non eseguirai di nuovo il programma.\n"
-#, fuzzy
msgid "revoked"
-msgstr "[revocata]"
+msgstr "revocato"
-#, fuzzy
msgid "expired"
-msgstr "expire"
+msgstr "scaduto"
#, c-format
msgid ""
@@ -3849,12 +3667,11 @@ msgstr ""
#, c-format
msgid "WARNING: Your encryption subkey expires soon.\n"
-msgstr ""
+msgstr "AVVISO: la sottochiave di crittografia scade a breve.\n"
-#, fuzzy, c-format
-#| msgid "You can't change the expiration date of a v3 key\n"
+#, c-format
msgid "You may want to change its expiration date too.\n"
-msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n"
+msgstr "Si consiglia di modificare la data di scadenza troppo.\n"
msgid ""
"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
@@ -3872,7 +3689,7 @@ msgstr ""
"Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2.\n"
msgid "Such a user ID already exists on this key!\n"
-msgstr ""
+msgstr "Tale ID utente esiste già in questa chiave!\n"
msgid "Delete this good signature? (y/N/q)"
msgstr "Cancellare questa firma corretta? (s/N/q)"
@@ -3886,37 +3703,35 @@ msgstr "Cancellare questa firma sconosciuta? (s/N/q)"
msgid "Really delete this self-signature? (y/N)"
msgstr "Cancellare davvero questa autofirma? (s/N)"
-#, fuzzy, c-format
-#| msgid "Deleted %d signature.\n"
+#, c-format
msgid "Deleted %d signature.\n"
msgid_plural "Deleted %d signatures.\n"
-msgstr[0] "Cancellata %d firma.\n"
-msgstr[1] "Cancellata %d firma.\n"
+msgstr[0] "Firma %d eliminata.\n"
+msgstr[1] "Firme %d eliminate.\n"
msgid "Nothing deleted.\n"
msgstr "Non è stato cancellato nulla.\n"
-#, fuzzy
msgid "invalid"
-msgstr "armatura non valida"
+msgstr "non valido"
-#, fuzzy, c-format
+#, c-format
msgid "User ID \"%s\" compacted: %s\n"
-msgstr "L'user ID \"%s\" è stato revocato."
+msgstr "ID utente \"%s\" compattato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "User ID \"%s\": %d signature removed\n"
msgid_plural "User ID \"%s\": %d signatures removed\n"
-msgstr[0] "L'user ID \"%s\" è stato revocato."
-msgstr[1] "L'user ID \"%s\" è stato revocato."
+msgstr[0] "ID utente \"%s\": firma %d rimossa\n"
+msgstr[1] "ID utente \"%s\": firme %d rimosse\n"
-#, fuzzy, c-format
+#, c-format
msgid "User ID \"%s\": already minimized\n"
-msgstr "l'user ID \"%s\" è già stato revocato\n"
+msgstr "ID utente \"%s\": già ridotto a icona\n"
-#, fuzzy, c-format
+#, c-format
msgid "User ID \"%s\": already clean\n"
-msgstr "l'user ID \"%s\" è già stato revocato\n"
+msgstr "ID utente \"%s\": già pulito\n"
msgid ""
"WARNING: This is a PGP 2.x-style key. Adding a designated revoker may "
@@ -3945,32 +3760,28 @@ msgid "you cannot appoint a key as its own designated revoker\n"
msgstr ""
"impossibile nominare una chiave come revocatore designato di sè stessa\n"
-#, fuzzy, c-format
+#, c-format
msgid "this key has already been designated as a revoker\n"
-msgstr ""
-"ATTENZIONE: questa chiave è stata revocata dal suo revocatore designato!\n"
+msgstr "questa chiave è già stata designata come revocatore\n"
msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n"
msgstr ""
"ATTENZIONE: la nomina di una chiave a revocatrice designata non può essere\n"
"annullata.\n"
-#, fuzzy
msgid ""
"Are you sure you want to appoint this key as a designated revoker? (y/N) "
msgstr ""
-"Sei sicuro di volere nominare questa chiave revocatrice designata? (s/N):"
+"Sei sicuro di voler nominare questa chiave come revocatore designato? (y/N) "
-#, fuzzy
msgid ""
"Are you sure you want to change the expiration time for multiple subkeys? (y/"
"N) "
msgstr ""
-"Sei sicuro di volere nominare questa chiave revocatrice designata? (s/N):"
+"Si è sicuri di voler modificare l'ora di scadenza per più sottochiavi? (y/N) "
-#, fuzzy
msgid "Changing expiration time for a subkey.\n"
-msgstr "Cambio la data di scadenza per una chiave secondaria.\n"
+msgstr "Modifica dell'ora di scadenza per una sottochiave.\n"
msgid "Changing expiration time for the primary key.\n"
msgstr "Cambio la data di scadenza per la chiave primaria.\n"
@@ -3979,74 +3790,65 @@ msgstr "Cambio la data di scadenza per la chiave primaria.\n"
msgid "You can't change the expiration date of a v3 key\n"
msgstr "Non è possibile cambiare la data di scadenza di una chiave v3\n"
-#, fuzzy
msgid "Changing usage of a subkey.\n"
-msgstr "Cambio la data di scadenza per una chiave secondaria.\n"
+msgstr "Modifica dell'utilizzo di una sottochiave.\n"
-#, fuzzy
-#| msgid "Changing expiration time for the primary key.\n"
msgid "Changing usage of the primary key.\n"
-msgstr "Cambio la data di scadenza per la chiave primaria.\n"
+msgstr "Modifica dell'utilizzo della chiave primaria.\n"
-#, fuzzy, c-format
+#, c-format
msgid "signing subkey %s is already cross-certified\n"
-msgstr ""
-"ATTENZIONE: la sottochiave per firme %08lX non ha una certificature "
-"incrociata\n"
+msgstr "la sottochiave di firma %s è già certificata incrociata\n"
#, c-format
msgid "subkey %s does not sign and so does not need to be cross-certified\n"
-msgstr ""
+msgstr "la sottochiave %s non firma e pertanto non deve essere certificata\n"
msgid "Please select exactly one user ID.\n"
msgstr "Devi selezionare esattamente un user ID.\n"
-#, fuzzy, c-format
+#, c-format
msgid "skipping v3 self-signature on user ID \"%s\"\n"
-msgstr "salto una autofirma v3 sull'user ID \"%s\"\n"
+msgstr "ignorare l'autode firma v3 sull'ID utente \"%s\"\n"
msgid "Enter your preferred keyserver URL: "
-msgstr ""
+msgstr "Immettere l'URL del server di chiavi preferito: "
-#, fuzzy
msgid "Are you sure you want to replace it? (y/N) "
-msgstr "Sei sicuro di volerla usare? (s/N) "
+msgstr "Sei sicuro di volerlo sostituire? (y/N) "
-#, fuzzy
msgid "Are you sure you want to delete it? (y/N) "
-msgstr "Sei sicuro di volerla usare? (s/N) "
+msgstr "Sei sicuro di volerlo eliminare? (y/N) "
-#, fuzzy
msgid "Enter the notation: "
-msgstr "Annotazione della firma: "
+msgstr "Immettere la notazione: "
-#, fuzzy
msgid "Proceed? (y/N) "
-msgstr "Sovrascrivo (s/N)? "
+msgstr "Procedere? (y/N) "
#, c-format
msgid "No user ID with index %d\n"
msgstr "Nessun user ID con l'indice %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "No user ID with hash %s\n"
-msgstr "Nessun user ID con l'indice %d\n"
+msgstr "Nessun ID utente con hash %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "No subkey with key ID '%s'.\n"
-msgstr "Nessun user ID con l'indice %d\n"
+msgstr "Nessuna sottochiave con ID di chiave '%s'.\n"
-#, fuzzy, c-format
+#, c-format
msgid "No subkey with index %d\n"
-msgstr "Nessun user ID con l'indice %d\n"
+msgstr "Nessuna sottochiave con indice %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "user ID: \"%s\"\n"
-msgstr "user ID: \""
+msgstr "ID utente: \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "signed by your key %s on %s%s%s\n"
-msgstr " firmata da %08lX il %s%s%s\n"
+msgstr "firmato dalla chiave %s su %s%s%s\n"
msgid " (non-exportable)"
msgstr " (non esportabile)"
@@ -4061,21 +3863,16 @@ msgstr "Sei ancora sicuro di volerlo aggiungere? (s/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Creare un certificato di revoca per questa firma? (s/N) "
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " firmata da %08lX il %s%s\n"
-
-#, fuzzy, c-format
+#, c-format
msgid "You have signed these user IDs on key %s:\n"
-msgstr "Non puoi cancellare l'ultimo user ID!\n"
+msgstr "Sono stati firmati questi ID utente sulla chiave %s:\n"
-#, fuzzy
msgid " (non-revocable)"
-msgstr " (non esportabile)"
+msgstr " (non revocabile)"
-#, fuzzy, c-format
+#, c-format
msgid "revoked by your key %s on %s\n"
-msgstr " revocata da %08lX il %s\n"
+msgstr "revocato dalla chiave %s su %s\n"
msgid "You are about to revoke these signatures:\n"
msgstr "Stai per revocare queste firme:\n"
@@ -4089,7 +3886,7 @@ msgstr "manca la chiave segreta\n"
#, c-format
msgid "tried to revoke a non-user ID: %s\n"
-msgstr ""
+msgstr "tentativo di revocare un ID non utente: %s\n"
#, c-format
msgid "user ID \"%s\" is already revoked\n"
@@ -4100,47 +3897,47 @@ msgid "WARNING: a user ID signature is dated %d seconds in the future\n"
msgstr ""
"ATTENZIONE: una firma dell'user ID ha la data di %d secondi nel futuro\n"
-#, fuzzy, c-format
-#| msgid "You can't delete the last user ID!\n"
+#, c-format
msgid "Cannot revoke the last valid user ID.\n"
-msgstr "Non puoi cancellare l'ultimo user ID!\n"
+msgstr "Impossibile revocare l'ultimo ID utente valido.\n"
-#, fuzzy, c-format
+#, c-format
msgid "Key %s is already revoked.\n"
-msgstr "l'user ID \"%s\" è già stato revocato\n"
+msgstr "La chiave %s è già stata revocata.\n"
-#, fuzzy, c-format
+#, c-format
msgid "Subkey %s is already revoked.\n"
-msgstr "l'user ID \"%s\" è già stato revocato\n"
+msgstr "La sottochiave %s è già stata revocata.\n"
-#, fuzzy, c-format
+#, c-format
msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n"
msgstr ""
-"Mostro %s ID fotografici di dimensioni %ld per la chaive 0x%08lX (uid %d)\n"
+"Visualizzazione dell'ID foto %s della dimensione %ld per la chiave %s (uid "
+"%d)\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid value for option '%s'\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "valore non valido per l'opzione '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "preference '%s' duplicated\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "preferenza '%s' duplicata\n"
-#, fuzzy, c-format
+#, c-format
msgid "too many cipher preferences\n"
-msgstr "ci sono troppe preferenze `%c'\n"
+msgstr "troppe preferenze di cifratura\n"
-#, fuzzy, c-format
+#, c-format
msgid "too many digest preferences\n"
-msgstr "ci sono troppe preferenze `%c'\n"
+msgstr "troppe preferenze di digest\n"
-#, fuzzy, c-format
+#, c-format
msgid "too many compression preferences\n"
-msgstr "ci sono troppe preferenze `%c'\n"
+msgstr "troppe preferenze di compressione\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid item '%s' in preference string\n"
-msgstr "carattere non valido nella stringa delle preferenze\n"
+msgstr "elemento '%s' non valido nella stringa delle preferenze\n"
#, c-format
msgid "writing direct signature\n"
@@ -4166,20 +3963,20 @@ msgstr "dimensioni della chiave arrotondate a %u bit\n"
msgid ""
"WARNING: some OpenPGP programs can't handle a DSA key with this digest size\n"
msgstr ""
+"AVVISO: alcuni programmi OpenPGP non sono in grado di gestire una chiave DSA "
+"con questa dimensione del digest\n"
-#, fuzzy
msgid "Sign"
-msgstr "sign"
+msgstr "Firma"
msgid "Certify"
-msgstr ""
+msgstr "Certifica"
-#, fuzzy
msgid "Encrypt"
-msgstr "cifra dati"
+msgstr "Crittografa"
msgid "Authenticate"
-msgstr ""
+msgstr "Autentica"
#. TRANSLATORS: Please use only plain ASCII characters for the
#. * translation. If this is not possible use single digits. The
@@ -4192,38 +3989,38 @@ msgstr ""
#. * q = Finish
#.
msgid "SsEeAaQq"
-msgstr ""
+msgstr "SsEeAaQq"
#, c-format
msgid "Possible actions for a %s key: "
-msgstr ""
+msgstr "Azioni possibili per una chiave %s: "
msgid "Current allowed actions: "
-msgstr ""
+msgstr "Azioni correnti consentite: "
#, c-format
msgid " (%c) Toggle the sign capability\n"
-msgstr ""
+msgstr " (%c) Attivare o disattivare la funzionalità di firma\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%c) Toggle the encrypt capability\n"
-msgstr " (%d) ElGamal (cifra solo)\n"
+msgstr " (%c) Attivare/disattivare la funzionalità di crittografia\n"
#, c-format
msgid " (%c) Toggle the authenticate capability\n"
-msgstr ""
+msgstr " (%c) Attivare/disattivare la funzionalità di autenticazione\n"
#, c-format
msgid " (%c) Finished\n"
-msgstr ""
+msgstr " (%c) Finito\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) RSA and RSA (default)\n"
-msgstr " (%d) DSA e ElGamal (default)\n"
+msgstr " (%d) RSA e RSA (impostazione predefinita)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) DSA and Elgamal\n"
-msgstr " (%d) DSA e ElGamal (default)\n"
+msgstr " (%d) DSA ed Elgamal\n"
#, c-format
msgid " (%d) DSA (sign only)\n"
@@ -4233,7 +4030,7 @@ msgstr " (%d) DSA (firma solo)\n"
msgid " (%d) RSA (sign only)\n"
msgstr " (%d) RSA (firma solo)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) Elgamal (encrypt only)\n"
msgstr " (%d) ElGamal (cifra solo)\n"
@@ -4241,84 +4038,76 @@ msgstr " (%d) ElGamal (cifra solo)\n"
msgid " (%d) RSA (encrypt only)\n"
msgstr " (%d) RSA (cifra solo)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) DSA (set your own capabilities)\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) DSA (impostare le proprie capacità)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) RSA (set your own capabilities)\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) RSA (imposta le tue funzionalità)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) ECC and ECC\n"
-msgstr " (%d) DSA e ElGamal (default)\n"
+msgstr " (%d) ECC ed ECC\n"
-#, fuzzy, c-format
-#| msgid " (%d) DSA (sign only)\n"
+#, c-format
msgid " (%d) ECC (sign only)\n"
msgstr " (%d) DSA (firma solo)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) ECC (set your own capabilities)\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) ECC (imposta le tue capacità)\n"
-#, fuzzy, c-format
-#| msgid " (%d) RSA (encrypt only)\n"
+#, c-format
msgid " (%d) ECC (encrypt only)\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) ECC (solo crittografia)\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) Existing key\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) Chiave esistente\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) Existing key from card\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) Chiave esistente dalla scheda\n"
-#, fuzzy
msgid "Enter the keygrip: "
-msgstr "Annotazione della firma: "
+msgstr "Immettere il keygrip: "
msgid "Not a valid keygrip (expecting 40 hex digits)\n"
-msgstr ""
+msgstr "Keygrip non valido (previsto 40 cifre esadecimali)\n"
-#, fuzzy
msgid "No key with this keygrip\n"
-msgstr "Nessun user ID con l'indice %d\n"
+msgstr "Nessuna chiave con questa chiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading the card: %s\n"
-msgstr "%s: errore durante la lettura del record libero: %s\n"
+msgstr "errore durante la lettura della scheda: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Serial number of the card: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "Numero di serie della scheda: %s\n"
-#, fuzzy
msgid "Available keys:\n"
-msgstr "disabilita una chiave"
+msgstr "Chiavi disponibili:\n"
-#, fuzzy, c-format
-#| msgid "rounded up to %u bits\n"
+#, c-format
msgid "rounded to %u bits\n"
-msgstr "arrotondate a %u bit\n"
+msgstr "arrotondato a %u bit\n"
#, c-format
msgid "%s keys may be between %u and %u bits long.\n"
-msgstr ""
+msgstr "Le chiavi %s possono essere lunghe tra %u e %u bit.\n"
-#, fuzzy, c-format
+#, c-format
msgid "What keysize do you want for the subkey? (%u) "
-msgstr "Di che dimensioni vuoi la chiave? (1024) "
+msgstr "Quale dimensione della chiave si desidera per la sottochiave? (%u) "
#, c-format
msgid "Requested keysize is %u bits\n"
msgstr "La dimensione richiesta della chiave è %u bit\n"
-#, fuzzy
-#| msgid "Please select what kind of key you want:\n"
msgid "Please select which elliptic curve you want:\n"
-msgstr "Per favore scegli che tipo di chiave vuoi:\n"
+msgstr "Selezionare la curva ellittica desiderata:\n"
msgid ""
"Please specify how long the key should be valid.\n"
@@ -4353,28 +4142,26 @@ msgstr ""
msgid "Key is valid for? (0) "
msgstr "Chiave valida per? (0) "
-#, fuzzy, c-format
+#, c-format
msgid "Signature is valid for? (%s) "
-msgstr "Firma valida per? (0) "
+msgstr "La firma è valida per? (%s) "
msgid "invalid value\n"
msgstr "valore non valido\n"
-#, fuzzy
msgid "Key does not expire at all\n"
-msgstr "%s non ha scadenza\n"
+msgstr "La chiave non scade affatto\n"
-#, fuzzy
msgid "Signature does not expire at all\n"
-msgstr "%s non ha scadenza\n"
+msgstr "La firma non scade affatto\n"
-#, fuzzy, c-format
+#, c-format
msgid "Key expires at %s\n"
-msgstr "%s scadrà il %s\n"
+msgstr "La chiave scade alle %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Signature expires at %s\n"
-msgstr "Questa firma scadrà il %s\n"
+msgstr "La firma scade alle %s\n"
msgid ""
"Your system can't display dates beyond 2038.\n"
@@ -4383,21 +4170,22 @@ msgstr ""
"Il tuo sistema non può mostrare date oltre il 2038.\n"
"Comunque, sarà gestita correttamente fino al 2106.\n"
-#, fuzzy
msgid "Is this correct? (y/N) "
-msgstr "È giusto (s/n)? "
+msgstr "È corretto? (y/N) "
msgid ""
"\n"
"GnuPG needs to construct a user ID to identify your key.\n"
"\n"
msgstr ""
+"\n"
+"GnuPG deve costruire un ID utente per identificare la chiave.\n"
+"\n"
#. TRANSLATORS: This string is in general not anymore used
#. but you should keep your existing translation. In case
#. the new string is not translated this old string will
#. be used.
-#, fuzzy
msgid ""
"\n"
"You need a user ID to identify your key; the software constructs the user "
@@ -4407,9 +4195,9 @@ msgid ""
"\n"
msgstr ""
"\n"
-"Ti serve un User ID per identificare la tua chiave; il software costruisce "
-"l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email "
-"indicati in questa forma:\n"
+"È necessario un ID utente per identificare la chiave; il software costruisce "
+"l'ID utente\n"
+"dal campo Nome reale, commento e indirizzo e-mail in questo modulo:\n"
" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
"\n"
@@ -4421,7 +4209,7 @@ msgstr "Carattere non valido nel nome\n"
#, c-format
msgid "The characters '%s' and '%s' may not appear in name\n"
-msgstr ""
+msgstr "I caratteri '%s' e '%s' non possono essere visualizzati nel nome\n"
msgid "Name may not start with a digit\n"
msgstr "Il nome non può iniziare con una cifra\n"
@@ -4441,10 +4229,9 @@ msgstr "Commento: "
msgid "Invalid character in comment\n"
msgstr "Carattere non valido nel commento\n"
-#, fuzzy, c-format
-#| msgid "You are using the `%s' character set.\n"
+#, c-format
msgid "You are using the '%s' character set.\n"
-msgstr "Stai usando il set di caratteri `%s'.\n"
+msgstr "Si sta utilizzando il set di caratteri '%s'.\n"
#, c-format
msgid ""
@@ -4479,13 +4266,9 @@ msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? "
msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? "
-#, fuzzy
-#| msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
msgid "Change (N)ame, (E)mail, or (Q)uit? "
msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (Q)uit? "
-#, fuzzy
-#| msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
msgid "Change (N)ame, (E)mail, or (O)kay/(Q)uit? "
msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? "
@@ -4513,63 +4296,64 @@ msgid ""
" \"%s\"\n"
"\n"
msgstr ""
+"In cerca di creare una chiave per:\n"
+" \"%s\"\n"
+"\n"
msgid "Continue? (Y/n) "
-msgstr ""
+msgstr "Continuare? (Y/n) "
-#, fuzzy, c-format
+#, c-format
msgid "A key for \"%s\" already exists\n"
-msgstr "`%s' è già compresso\n"
+msgstr "Esiste già una chiave per \"%s\"\n"
-#, fuzzy
msgid "Create anyway? (y/N) "
-msgstr "Uso lo stesso questa chiave? "
+msgstr "Creare comunque? (y/N) "
-#, fuzzy, c-format
+#, c-format
msgid "creating anyway\n"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "creazione comunque\n"
#, c-format
msgid "Note: Use \"%s %s\" for a full featured key generation dialog.\n"
msgstr ""
+"Nota: utilizzare \"%s %s\" per una finestra di dialogo di generazione di "
+"chiavi in primo piano.\n"
#, c-format
msgid "Key generation canceled.\n"
msgstr "Generazione della chiave annullata.\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't create backup file '%s': %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile creare il file di backup '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: backup of card key saved to '%s'\n"
-msgstr "NOTA: chiave %08lX scaduta il %s\n"
+msgstr "Nota: backup della chiave della scheda salvata in '%s'\n"
-#, fuzzy, c-format
-#| msgid "writing public key to `%s'\n"
+#, c-format
msgid "writing public key to '%s'\n"
-msgstr "scrittura della chiave pubblica in `%s'\n"
+msgstr "scrittura di chiave pubblica in '%s'\n"
#, c-format
msgid "no writable public keyring found: %s\n"
msgstr "non è stato trovato un portachiavi pubblico scrivibile: %s\n"
-#, fuzzy, c-format
-#| msgid "error writing public keyring `%s': %s\n"
+#, c-format
msgid "error writing public keyring '%s': %s\n"
-msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n"
+msgstr "errore durante la scrittura della chiave pubblica '%s': %s\n"
msgid "public and secret key created and signed.\n"
msgstr "chiavi pubbliche e segrete create e firmate.\n"
-#, fuzzy
msgid ""
"Note that this key cannot be used for encryption. You may want to use\n"
"the command \"--edit-key\" to generate a subkey for this purpose.\n"
msgstr ""
-"Nota che questa chiave non può essere usata per cifrare. Forse vorrai usare\n"
-"il comando \"--edit-key\" per generare una chiave secondaria per questo "
-"scopo.\n"
+"Si noti che questa chiave non può essere utilizzata per la crittografia. Si "
+"consiglia di utilizzare\n"
+"il comando \"--edit-key\" per generare una sottochiave a questo scopo.\n"
#, c-format
msgid ""
@@ -4585,22 +4369,21 @@ msgstr ""
"la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema\n"
"con l'orologio)\n"
-#, fuzzy, c-format
-#| msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
+#, c-format
msgid "Note: creating subkeys for v3 keys is not OpenPGP compliant\n"
-msgstr "NB: la creazione di subchiavi per chiavi v3 non rispetta OpenPGP.\n"
+msgstr ""
+"Nota: la creazione di sottochiavi per le chiavi v3 non è conforme a OpenPGP\n"
#, c-format
msgid "Secret parts of primary key are not available.\n"
msgstr "Parti della chiave segreta non sono disponibili.\n"
-#, fuzzy, c-format
+#, c-format
msgid "Secret parts of primary key are stored on-card.\n"
-msgstr "Parti della chiave segreta non sono disponibili.\n"
+msgstr "Le parti segrete della chiave primaria vengono archiviate su scheda.\n"
-#, fuzzy
msgid "Really create? (y/N) "
-msgstr "Crea davvero? "
+msgstr "Davvero creare? (y/N) "
msgid "never "
msgstr "mai "
@@ -4612,7 +4395,7 @@ msgid "Signature policy: "
msgstr "Politica di firma: "
msgid "Critical preferred keyserver: "
-msgstr ""
+msgstr "Server chiave preferito critico: "
msgid "Critical signature notation: "
msgstr "Annotazione critica della firma: "
@@ -4620,25 +4403,25 @@ msgstr "Annotazione critica della firma: "
msgid "Signature notation: "
msgstr "Annotazione della firma: "
-#, fuzzy, c-format
-#| msgid "%d bad signatures\n"
+#, c-format
msgid "%d good signature\n"
msgid_plural "%d good signatures\n"
-msgstr[0] "%d firme non corrette\n"
-msgstr[1] "%d firme non corrette\n"
+msgstr[0] "%d buona firma\n"
+msgstr[1] "%d buone firme\n"
-#, fuzzy, c-format
-#| msgid "1 signature not checked due to an error\n"
+#, c-format
msgid "%d signature not checked due to an error\n"
msgid_plural "%d signatures not checked due to errors\n"
-msgstr[0] "una firma non controllata a causa di un errore\n"
-msgstr[1] "una firma non controllata a causa di un errore\n"
+msgstr[0] "Firma %d non controllata a causa di un errore\n"
+msgstr[1] ""
+"Firme %d non controllate a causa di errori\n"
+"\n"
#, c-format
msgid "Warning: %lu key skipped due to its large size\n"
msgid_plural "Warning: %lu keys skipped due to their large sizes\n"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Avviso: chiave %lu ignorata a causa delle dimensioni grandi\n"
+msgstr[1] "Avviso: chiavi %lu ignorate a causa delle dimensioni grandi\n"
msgid "Keyring"
msgstr "Portachiavi"
@@ -4657,125 +4440,122 @@ msgstr " Impronta digitale della chiave primaria:"
msgid " Subkey fingerprint:"
msgstr " Impronta digitale della subchiave:"
-#, fuzzy
msgid " Key fingerprint ="
-msgstr " Impronta digitale ="
+msgstr " Impronta digitale della chiave ="
msgid " Card serial no. ="
-msgstr ""
+msgstr " Numero seriale della scheda ="
-#, fuzzy, c-format
+#, c-format
msgid "caching keyring '%s'\n"
-msgstr "controllo il portachiavi `%s'\n"
+msgstr "chiave di memorizzazione nella cache '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "%lu keys cached so far (%lu signature)\n"
msgid_plural "%lu keys cached so far (%lu signatures)\n"
-msgstr[0] "Sono state controllate %lu chiavi (%lu firme)\n"
+msgstr[0] "E' stata controllata %lu chiave (%lu firma)\n"
msgstr[1] "Sono state controllate %lu chiavi (%lu firme)\n"
#, c-format
msgid "%lu key cached"
msgid_plural "%lu keys cached"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Chiave %lu memorizzata nella cache"
+msgstr[1] "Chiavi %lu memorizzata nella cache"
-#, fuzzy, c-format
-#| msgid "1 bad signature\n"
+#, c-format
msgid " (%lu signature)\n"
msgid_plural " (%lu signatures)\n"
-msgstr[0] "una firma non corretta\n"
-msgstr[1] "una firma non corretta\n"
+msgstr[0] " (firma %lu)\n"
+msgstr[1] " (firme %lu)\n"
#, c-format
msgid "%s: keyring created\n"
msgstr "%s: portachiavi creato\n"
msgid "override proxy options set for dirmngr"
-msgstr ""
+msgstr "ignorare le opzioni proxy impostate per dirmngr"
msgid "include revoked keys in search results"
-msgstr ""
+msgstr "includere chiavi revocate nei risultati della ricerca"
msgid "include subkeys when searching by key ID"
-msgstr ""
+msgstr "includere le sottochiavi durante la ricerca in base all'ID chiave"
msgid "override timeout options set for dirmngr"
-msgstr ""
+msgstr "opzioni di timeout di override impostate per dirmngr"
msgid "automatically retrieve keys when verifying signatures"
-msgstr ""
+msgstr "recuperare automaticamente le chiavi durante la verifica delle firme"
-#, fuzzy
msgid "honor the preferred keyserver URL set on the key"
-msgstr "l'URL della politica di firma indicato non è valido\n"
+msgstr "rispettare l'URL del keyserver preferito impostato sulla chiave"
msgid "honor the PKA record set on a key when retrieving keys"
msgstr ""
+"rispettare il record PKA impostato su una chiave durante il recupero delle "
+"chiavi"
-#, fuzzy
msgid "disabled"
-msgstr "disable"
+msgstr "disabilitato"
msgid "Enter number(s), N)ext, or Q)uit > "
-msgstr ""
+msgstr "Immettere numeri, N)ext o Q)uit > "
-#, fuzzy, c-format
+#, c-format
msgid "invalid keyserver protocol (us %d!=handler %d)\n"
-msgstr "opzioni di esportazione non valide\n"
+msgstr "protocollo keyserver non valido (noi %d!=intestazione %d!)\n"
#, c-format
msgid "\"%s\" not a key ID: skipping\n"
-msgstr ""
+msgstr "\"%s\" non è un ID chiave:\n"
-#, fuzzy, c-format
+#, c-format
msgid "refreshing %d key from %s\n"
msgid_plural "refreshing %d keys from %s\n"
-msgstr[0] "richiedo la chiave %08lX a %s\n"
-msgstr[1] "richiedo la chiave %08lX a %s\n"
+msgstr[0] "aggiornamento della chiave %d da %s\n"
+msgstr[1] ""
+"aggiornamento della chiavi %d da %s\n"
+"\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unable to refresh key %s via %s: %s\n"
-msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n"
+msgstr "AVVISO: impossibile aggiornare la chiave %s tramite %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key \"%s\" not found on keyserver\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "chiave \"%s\" non trovata nel keyserver\n"
-#, fuzzy, c-format
+#, c-format
msgid "key not found on keyserver\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "chiave non trovata nel keyserver\n"
-#, fuzzy, c-format
+#, c-format
msgid "requesting key %s from %s server %s\n"
-msgstr "richiedo la chiave %08lX a %s\n"
+msgstr "richiesta della chiave %s dal server %s %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "requesting key %s from %s\n"
-msgstr "richiedo la chiave %08lX a %s\n"
+msgstr "richiesta della chiave %s da %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no keyserver known\n"
-msgstr "opzioni di esportazione non valide\n"
+msgstr "nessun keyserver noto\n"
-#, fuzzy, c-format
+#, c-format
msgid "skipped \"%s\": %s\n"
-msgstr "saltata `%s': %s\n"
+msgstr "\"%s\" ignorato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "sending key %s to %s\n"
-msgstr ""
-"\"\n"
-"firmata con la tua chiave %08lX il %s\n"
-"\n"
+msgstr "invio della chiave %s a %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "requesting key from '%s'\n"
-msgstr "richiedo la chiave %08lX a %s\n"
+msgstr "richiesta di chiave da '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: unable to fetch URI %s: %s\n"
-msgstr "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n"
+msgstr "AVVISO: impossibile recuperare l'URI %s: %s\n"
#, c-format
msgid "weird size for an encrypted session key (%d)\n"
@@ -4785,29 +4565,31 @@ msgstr "la chiave di sessione cifrata ha dimensioni strane (%d)\n"
msgid "%s encrypted session key\n"
msgstr "chiave di sessione cifrata con %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "passphrase generated with unknown digest algorithm %d\n"
-msgstr "cifrato con l'algoritmo sconosciuto %d\n"
+msgstr "passphrase generata con algoritmo digest sconosciuto %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "public key is %s\n"
-msgstr "la chiave pubblica è %08lX\n"
+msgstr "la chiave pubblica è %s\n"
#, c-format
msgid "public key encrypted data: good DEK\n"
msgstr "dati cifrati con la chiave pubblica: DEK corretto\n"
-#, fuzzy, c-format
+#, c-format
msgid "encrypted with %u-bit %s key, ID %s, created %s\n"
-msgstr "cifrato con la chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s\n"
+msgstr "crittografata con la chiave %u bit %s, ID %s, creata %s\n"
-#, fuzzy, c-format
+#, c-format
msgid " \"%s\"\n"
-msgstr " alias \""
+msgstr " \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "encrypted with %s key, ID %s\n"
-msgstr "Cifrato con la chiave %s con ID %08lX\n"
+msgstr ""
+"crittografata con chiave %s, ID %s\n"
+"\n"
#, c-format
msgid "public key decryption failed: %s\n"
@@ -4815,7 +4597,7 @@ msgstr "decifratura della chiave pubblica fallita: %s\n"
#, c-format
msgid "WARNING: multiple plaintexts seen\n"
-msgstr ""
+msgstr "AVVISO: più testo in chiaro visti\n"
#, c-format
msgid "encrypted with %lu passphrases\n"
@@ -4842,15 +4624,17 @@ msgid ""
"likely that this message is legitimate. This is because back\n"
"then integrity protection was not widely used.\n"
msgstr ""
+"Suggerimento: Se questo messaggio è stato creato prima dell'anno 2003,\n"
+"probabile che questo messaggio sia legittimo. Questo perché indietro\n"
+"quindi la protezione dell'integrità non è stata ampiamente utilizzata.\n"
#, c-format
msgid "Use the option '%s' to decrypt anyway.\n"
-msgstr ""
+msgstr "Utilizzare comunque l'opzione '%s' per decrittografare.\n"
-#, fuzzy, c-format
-#| msgid "decryption failed: %s\n"
+#, c-format
msgid "decryption forced to fail!\n"
-msgstr "decifratura fallita: %s\n"
+msgstr "decrittazione costretto a fallire!\n"
#, c-format
msgid "decryption okay\n"
@@ -4864,10 +4648,9 @@ msgstr "ATTENZIONE: il messaggio cifrato è stato manipolato!\n"
msgid "decryption failed: %s\n"
msgstr "decifratura fallita: %s\n"
-#, fuzzy, c-format
-#| msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
+#, c-format
msgid "Note: sender requested \"for-your-eyes-only\"\n"
-msgstr "NOTA: il mittente ha richiesto \"solo-per-i-tuoi-occhi\"\n"
+msgstr "Nota: mittente richiesto \"solo per i tuoi occhi\"\n"
#, c-format
msgid "original file name='%.*s'\n"
@@ -4877,45 +4660,45 @@ msgstr "nome del file originale='%.*s'\n"
msgid "standalone revocation - use \"gpg --import\" to apply\n"
msgstr "revoca solitaria - usa \"gpg --import\" per applicarla\n"
-#, fuzzy, c-format
+#, c-format
msgid "no signature found\n"
-msgstr "Firma valida da \""
+msgstr "nessuna firma trovata\n"
-#, fuzzy, c-format
+#, c-format
msgid "BAD signature from \"%s\""
-msgstr "Firma NON corretta da \""
+msgstr "Firma BAD da \"%s\""
-#, fuzzy, c-format
+#, c-format
msgid "Expired signature from \"%s\""
-msgstr "Firma scaduta da \""
+msgstr "Firma scaduta da \"%s\""
-#, fuzzy, c-format
+#, c-format
msgid "Good signature from \"%s\""
-msgstr "Firma valida da \""
+msgstr "Firma valida da \"%s\""
#, c-format
msgid "signature verification suppressed\n"
msgstr "verifica della firma soppressa\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't handle this ambiguous signature data\n"
-msgstr "impossibile gestire queste firme multiple\n"
+msgstr "impossibile gestire questi dati di firma ambigui\n"
-#, fuzzy, c-format
+#, c-format
msgid "Signature made %s\n"
-msgstr "Firma scaduta il %s\n"
+msgstr "Firma effettuata %s\n"
-#, fuzzy, c-format
+#, c-format
msgid " using %s key %s\n"
-msgstr " alias \""
+msgstr " utilizzando la chiave %s %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Signature made %s using %s key ID %s\n"
-msgstr "Firma fatta %.*s usando %s con ID %08lX\n"
+msgstr "Firma effettuata %s utilizzando l'ID chiave %s %s\n"
-#, fuzzy, c-format
+#, c-format
msgid " issuer \"%s\"\n"
-msgstr " alias \""
+msgstr " autorità emittente \"%s\"\n"
#, c-format
msgid "Key available at: "
@@ -4923,19 +4706,18 @@ msgstr "Chiave disponibile presso: "
#, c-format
msgid "Note: Use '%s' to make use of this info\n"
-msgstr ""
+msgstr "Nota: utilizzare '%s' per utilizzare queste informazioni\n"
msgid "[uncertain]"
msgstr "[incerta]"
-#, fuzzy, c-format
+#, c-format
msgid " aka \"%s\""
-msgstr " alias \""
+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 "ATTENZIONE: questa chiave non è certificata con una firma fidata!\n"
+msgstr "AVVISO: questa chiave non è adatta per l'accesso in modalità %s\n"
#, c-format
msgid "Signature expired %s\n"
@@ -4945,10 +4727,9 @@ msgstr "Firma scaduta il %s\n"
msgid "Signature expires %s\n"
msgstr "Questa firma scadrà il %s\n"
-#, fuzzy, c-format
-#| msgid "%s signature, digest algorithm %s\n"
+#, c-format
msgid "%s signature, digest algorithm %s%s%s\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr "Firma %s, algoritmo digest %s%s%s\n"
msgid "binary"
msgstr "binario"
@@ -4959,14 +4740,13 @@ msgstr "modo testo"
msgid "unknown"
msgstr "sconosciuto"
-#, fuzzy
-#| msgid "unknown pubkey algorithm"
msgid ", key algorithm "
-msgstr "algoritmo della chiave pubblica sconosciuto"
+msgstr ", algoritmo a chiave "
#, c-format
msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n"
msgstr ""
+"AVVISO: non è una firma disconnessa; il file '%s' NON è stato verificato!\n"
#, c-format
msgid "Can't check signature: %s\n"
@@ -4989,57 +4769,55 @@ msgstr "firma solitaria di classe 0x%02x\n"
msgid "old style (PGP 2.x) signature\n"
msgstr "firma vecchio stile (PGP 2.x)\n"
-#, fuzzy, c-format
+#, c-format
msgid "fstat of '%s' failed in %s: %s\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "fstat di '%s' non riuscito in %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "fstat(%d) failed in %s: %s\n"
-msgstr "trustdb: read fallita (n=%d): %s\n"
+msgstr "fstat(%d) non riuscito in %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: using experimental public key algorithm %s\n"
-msgstr "impossibile gestire l'algoritmo a chiave pubblica %d\n"
+msgstr "AVVISO: utilizzo dell'algoritmo a chiave pubblica sperimentale %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n"
-msgstr ""
-"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n"
+msgstr "AVVISO: le chiavi Elgamal sign-encrypt sono deprecate\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: using experimental cipher algorithm %s\n"
-msgstr "algoritmo di cifratura non implementato"
+msgstr "AVVISO: utilizzo dell'algoritmo di crittografia sperimentale %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: using experimental digest algorithm %s\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr "AVVISO: utilizzo dell'algoritmo digest sperimentale %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: digest algorithm %s is deprecated\n"
-msgstr ""
-"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n"
+msgstr "AVVISO: l'algoritmo digest %s è deprecato\n"
-#, fuzzy, c-format
-#| msgid "%s signature, digest algorithm %s\n"
+#, c-format
msgid "Note: signatures using the %s algorithm are rejected\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr "Nota: le firme che utilizzano l'algoritmo %s vengono rifiutate\n"
-#, fuzzy, c-format
-#| msgid "%s signature, digest algorithm %s\n"
+#, c-format
msgid "Note: third-party key signatures using the %s algorithm are rejected\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr ""
+"Nota: le firme di chiave di terze parti che utilizzano l'algoritmo %s "
+"vengono rifiutate\n"
-#, fuzzy, c-format
+#, c-format
msgid "(reported error: %s)\n"
-msgstr "errore di lettura: %s\n"
+msgstr "(errore segnalato: %s)\n"
-#, fuzzy, c-format
+#, c-format
msgid "(reported error: %s <%s>)\n"
-msgstr "errore di lettura: %s\n"
+msgstr "(errore segnalato: %s <%s>)\n"
#, c-format
msgid "(further info: "
-msgstr ""
+msgstr "(ulteriori informazioni: "
#, c-format
msgid "%s:%d: deprecated option \"%s\"\n"
@@ -5053,55 +4831,55 @@ msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
msgid "please use \"%s%s\" instead\n"
msgstr "usa al suo posto \"%s%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: \"%s\" is a deprecated command - do not use it\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr "AVVISO: \"%s\" è un comando deprecato - non utilizzarlo\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: \"%s\" is obsolete in this file - it only has effect in %s\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr "%s:%u: \"%s\" è obsoleto in questo file - ha effetto solo in %s\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: \"%s%s\" is an obsolete option - it has no effect except on %s\n"
-msgstr "ATTENZIONE: \"%s\" è una opzione deprecata\n"
+msgstr ""
+"AVVISO: \"%s%s\" è un'opzione obsoleta- non ha alcun effetto ad eccezione di "
+"%s\n"
msgid "Uncompressed"
msgstr "Non compresso"
#. TRANSLATORS: See doc/TRANSLATE about this string.
-#, fuzzy
msgid "uncompressed|none"
-msgstr "Non compresso"
+msgstr "non compresso|nessuno"
#, c-format
msgid "this message may not be usable by %s\n"
msgstr "questo messaggio può non essere utilizzabile da %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "ambiguous option '%s'\n"
-msgstr "lettura delle opzioni da `%s'\n"
+msgstr "opzione ambigua '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown option '%s'\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
+msgstr "opzione sconosciuta '%s'\n"
#, c-format
msgid "ECDSA public key is expected to be in SEC encoding multiple of 8 bits\n"
msgstr ""
+"La chiave pubblica ECDSA dovrebbe essere in codifica SEC multipla di 8 bit\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown weak digest '%s'\n"
-msgstr "classe della firma sconosciuta"
+msgstr "digest debole sconosciuto '%s'\n"
-#, fuzzy, c-format
-#| msgid "File `%s' exists. "
+#, c-format
msgid "File '%s' exists. "
-msgstr "Il file `%s' esiste. "
+msgstr "Il file '%s' esiste. "
-#, fuzzy
msgid "Overwrite? (y/N) "
-msgstr "Sovrascrivo (s/N)? "
+msgstr "Sovrascrivere? (y/N) "
#, c-format
msgid "%s: unknown suffix\n"
@@ -5114,10 +4892,9 @@ msgstr "Inserire il nuovo nome del file"
msgid "writing to stdout\n"
msgstr "scrivo su stdout\n"
-#, fuzzy, c-format
-#| msgid "assuming signed data in `%s'\n"
+#, c-format
msgid "assuming signed data in '%s'\n"
-msgstr "suppongo che i dati firmati siano in `%s'\n"
+msgstr "presupponendo i dati firmati in '%s'\n"
#, c-format
msgid "can't handle public key algorithm %d\n"
@@ -5129,18 +4906,17 @@ msgstr ""
"ATTENZIONE: la chiave di sessione cifrata simmetricamente è potenzialmente\n"
"non sicura\n"
-#, fuzzy, c-format
-#| msgid "Critical signature notation: "
+#, c-format
msgid "Unknown critical signature notation: "
-msgstr "Annotazione critica della firma: "
+msgstr "Notazione della firma critica sconosciuta: "
#, c-format
msgid "subpacket of type %d has critical bit set\n"
msgstr "il sottopacchetto di tipo %d ha un bit critico impostato\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem with the agent: %s\n"
-msgstr "problema con l'agent: ha restituito 0x%lx\n"
+msgstr "problema con l'agente: %s\n"
msgid "Enter passphrase\n"
msgstr "Inserisci la passphrase\n"
@@ -5149,42 +4925,43 @@ msgstr "Inserisci la passphrase\n"
msgid "cancelled by user\n"
msgstr "interrotto dall'utente\n"
-#, fuzzy, c-format
+#, c-format
msgid " (main key ID %s)"
-msgstr " (key ID principale %08lX)"
+msgstr " (ID chiave principale %s)"
-#, fuzzy
msgid "Please enter the passphrase to unlock the OpenPGP secret key:"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per sbloccare la chiave segreta OpenPGP:"
-#, fuzzy
msgid "Please enter the passphrase to import the OpenPGP secret key:"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per importare la chiave segreta OpenPGP:"
-#, fuzzy
msgid "Please enter the passphrase to export the OpenPGP secret subkey:"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per esportare la sottochiave segreta OpenPGP:"
-#, fuzzy
msgid "Please enter the passphrase to export the OpenPGP secret key:"
-msgstr "Inserisci la passphrase, cioè una frase segreta \n"
+msgstr "Immettere la passphrase per esportare la chiave segreta OpenPGP:"
-#, fuzzy
msgid "Do you really want to permanently delete the OpenPGP secret subkey key:"
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
+msgstr ""
+"Si desidera eliminare definitivamente la chiave della sottochiave segreta "
+"OpenPGP:"
-#, fuzzy
msgid "Do you really want to permanently delete the OpenPGP secret key:"
-msgstr "Vuoi davvero cancellare le chiavi selezionate? "
+msgstr "Si desidera eliminare definitivamente la chiave segreta OpenPGP:"
-#, fuzzy, c-format
+#, c-format
msgid ""
"%s\n"
"\"%.*s\"\n"
"%u-bit %s key, ID %s,\n"
"created %s%s.\n"
"%s"
-msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s"
+msgstr ""
+"%s\n"
+"\"%.*s\"\n"
+"%u-bit chiave %s, ID %s,\n"
+"creato %s%s.\n"
+"%s"
msgid ""
"\n"
@@ -5205,21 +4982,20 @@ msgstr ""
msgid "Enter JPEG filename for photo ID: "
msgstr "Inserisci il nome del file JPEG per l'ID fotografico: "
-#, fuzzy, c-format
+#, c-format
msgid "unable to open JPEG file '%s': %s\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "impossibile aprire il file JPEG '%s': %s\n"
#, c-format
msgid "This JPEG is really large (%d bytes) !\n"
-msgstr ""
+msgstr "Questo JPEG è davvero grande (%d byte) !\n"
-#, fuzzy
msgid "Are you sure you want to use it? (y/N) "
-msgstr "Sei sicuro di volerla usare? (s/N) "
+msgstr "Sei sicuro di volerlo usare? (y/N) "
-#, fuzzy, c-format
+#, c-format
msgid "'%s' is not a JPEG file\n"
-msgstr "\"%s\": non è un file JPEG\n"
+msgstr "'%s' non è un file JPEG\n"
msgid "Is this photo correct (y/N/q)? "
msgstr "Questa foto è giusta? (s/N/q) "
@@ -5241,74 +5017,71 @@ msgstr "impossibile mostrare l'ID fotografico\n"
msgid "iImMqQsS"
msgstr "iImMqQsS"
-#, fuzzy
msgid "No trust value assigned to:\n"
-msgstr ""
-"Nessun valore di fiducia assegnato a:\n"
-"%4u%c/%08lX %s \""
+msgstr "Nessun valore di attendibilità assegnato a:\n"
-#, fuzzy, c-format
+#, c-format
msgid " aka \"%s\"\n"
-msgstr " alias \""
+msgstr " aka \"%s\"\n"
-#, fuzzy
msgid ""
"How much do you trust that this key actually belongs to the named user?\n"
-msgstr "Questa chiave probabilmente appartiene al proprietario\n"
+msgstr ""
+"Quanto si considera attendibile che questa chiave appartenga effettivamente "
+"all'utente denominato?\n"
-#, fuzzy, c-format
+#, c-format
msgid " %d = I don't know or won't say\n"
-msgstr " %d = Non lo so\n"
+msgstr " %d = Non so o non dirò\n"
-#, fuzzy, c-format
+#, c-format
msgid " %d = I do NOT trust\n"
-msgstr " %d = NON mi fido\n"
+msgstr " %d = Non mi fido\n"
-#, fuzzy, c-format
+#, c-format
msgid " %d = I trust ultimately\n"
-msgstr " %d = Mi fido definitivamente\n"
+msgstr " %d = Mi fido in ultima analisi\n"
-#, fuzzy
msgid " m = back to the main menu\n"
-msgstr " m = torna al menù principale\n"
+msgstr " m = torna al menu principale\n"
-#, fuzzy
msgid " s = skip this key\n"
-msgstr " s = salta questa chiave\n"
+msgstr " s = salta questa chiave\n"
-#, fuzzy
msgid " q = quit\n"
-msgstr " q = abbandona\n"
+msgstr " q = uscire\n"
#, c-format
msgid ""
"The minimum trust level for this key is: %s\n"
"\n"
msgstr ""
+"Il livello di attendibilità minimo per questa chiave è: %s\n"
+"\n"
msgid "Your decision? "
msgstr "Cosa hai deciso? "
-#, fuzzy
msgid "Do you really want to set this key to ultimate trust? (y/N) "
-msgstr "Vuoi davvero assegnare fiducia definitiva a questa chiave? "
+msgstr "Vuoi davvero impostare questa chiave per la massima fiducia? (y/N) "
msgid "Certificates leading to an ultimately trusted key:\n"
msgstr "Certificati che portano a chiavi definitivamente affidabili:\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s: There is no assurance this key belongs to the named user\n"
msgstr ""
-"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n"
+"%s: non esiste alcuna garanzia che questa chiave appartenga all'utente "
+"denominato\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s: There is limited assurance this key belongs to the named user\n"
msgstr ""
-"%08lX: Non ci sono indicazioni che la chiave appartenga al proprietario\n"
+"%s: garanzia limitata che questa chiave appartenga all'utente denominato\n"
-#, fuzzy, c-format
+#, c-format
msgid "This key probably belongs to the named user\n"
-msgstr "Questa chiave probabilmente appartiene al proprietario\n"
+msgstr "Questa chiave probabilmente appartiene all'utente denominato\n"
#, c-format
msgid "This key belongs to us\n"
@@ -5317,32 +5090,30 @@ msgstr "Questa chiave ci appartiene\n"
#, c-format
msgid "%s: This key is bad! It has been marked as untrusted!\n"
msgstr ""
+"%s: questa chiave non è valido! È stato contrassegnato come non "
+"attendibile!\n"
-#, fuzzy
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 ""
-"NON è sicuro che la chiave appartenga alla persona indicata.\n"
-"nell'user ID. Se sai *davvero* cosa stai facendo, puoi\n"
-"rispondere sì alla prossima domanda.\n"
-"\n"
+"Questa chiave è cattiva! È stato contrassegnato come non attendibile! Se "
+"si\n"
+"\"davvero, sai quello che stai facendo, potresti rispondere al prossimo\n"
+"domanda con sì.\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"
msgstr ""
-"NON è sicuro che la chiave appartenga alla persona indicata.\n"
-"nell'user ID. Se sai *davvero* cosa stai facendo, puoi\n"
-"rispondere sì alla prossima domanda.\n"
-"\n"
+"NON è certo che la chiave appartenga alla persona denominata\n"
+"nell'ID utente. Se sai davvero quello che stai facendo,\n"
+"si può rispondere alla prossima domanda con sì.\n"
-#, fuzzy
msgid "Use this key anyway? (y/N) "
-msgstr "Uso lo stesso questa chiave? "
+msgstr "Utilizzare comunque questa chiave? (y/N) "
#, c-format
msgid "WARNING: Using untrusted key!\n"
@@ -5363,9 +5134,9 @@ msgstr ""
msgid "WARNING: This key has been revoked by its owner!\n"
msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario!\n"
-#, fuzzy, c-format
+#, c-format
msgid " This could mean that the signature is forged.\n"
-msgstr " Questo può significare che la firma è stata falsificata.\n"
+msgstr " Questo potrebbe significare che la firma è contraffatta.\n"
#, c-format
msgid "WARNING: This subkey has been revoked by its owner!\n"
@@ -5377,19 +5148,19 @@ msgstr "Nota: questa chiave è stata disabilitata.\n"
#, c-format
msgid "Note: Verified signer's address is '%s'\n"
-msgstr ""
+msgstr "Nota: l'indirizzo del firmatario verificato è '%s'\n"
#, c-format
msgid "Note: Signer's address '%s' does not match DNS entry\n"
-msgstr ""
+msgstr "Nota: l'indirizzo del firmatario '%s' non corrisponde alla voce DNS\n"
#, c-format
msgid "trustlevel adjusted to FULL due to valid PKA info\n"
-msgstr ""
+msgstr "trustlevel adattato a FULL a causa di informazioni PKA valide\n"
#, c-format
msgid "trustlevel adjusted to NEVER due to bad PKA info\n"
-msgstr ""
+msgstr "trustlevel modificato MAI a causa di informazioni PKA non valido\n"
#, c-format
msgid "Note: This key has expired!\n"
@@ -5435,24 +5206,26 @@ msgstr "%s: saltata: chiave pubblica disabilitata\n"
msgid "%s: skipped: public key already present\n"
msgstr "%s: saltata: chiave pubblica già presente\n"
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
msgid "can't encrypt to '%s'\n"
-msgstr "impossibile connettersi a `%s': %s\n"
+msgstr "impossibile crittografare in '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "option '%s' given, but no valid default keys given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr ""
+"l'opzione '%s' specificata, ma non sono state fornite chiavi predefinite "
+"valide\n"
-#, fuzzy, c-format
+#, c-format
msgid "option '%s' given, but option '%s' not given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr ""
+"l'opzione '%s' specificata, ma l'opzione '%s' non è stata specificata\n"
msgid "You did not specify a user ID. (you may use \"-r\")\n"
msgstr "Non hai specificato un user ID. (puoi usare \"-r\")\n"
msgid "Current recipients:\n"
-msgstr ""
+msgstr "Destinatari correnti:\n"
msgid ""
"\n"
@@ -5475,21 +5248,21 @@ msgstr "La chiave pubblica è disabilitata.\n"
msgid "skipped: public key already set\n"
msgstr "saltata: chiave pubblica già impostata\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown default recipient \"%s\"\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
+msgstr "destinatario predefinito sconosciuto \"%s\"\n"
#, c-format
msgid "no valid addressees\n"
msgstr "nessun indirizzo valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: key %s has no %s feature\n"
-msgstr "chiave %08lX: nessun user ID\n"
+msgstr "Nota: la chiave %s non ha funzionalità %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: key %s has no preference for %s\n"
-msgstr "chiave %08lX: nessun user ID\n"
+msgstr "Nota: la chiave %s non ha preferenze per %s\n"
#, c-format
msgid "data not saved; use option \"--output\" to save it\n"
@@ -5510,22 +5283,21 @@ msgstr "viene letto stdin...\n"
msgid "no signed data\n"
msgstr "non ci sono dati firmati\n"
-#, fuzzy, c-format
-#| msgid "can't open signed data `%s'\n"
+#, c-format
msgid "can't open signed data '%s'\n"
-msgstr "impossibile aprire i dati firmati `%s'\n"
+msgstr "impossibile aprire i dati firmati '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't open signed data fd=%d: %s\n"
-msgstr "impossibile aprire i dati firmati `%s'\n"
+msgstr "impossibile aprire i dati firmati fd=%d: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s is not suitable for decryption in %s mode\n"
-msgstr "chiave %08lX: nessun user ID\n"
+msgstr "la chiave %s non è adatta per la decrittografia in modalità %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "anonymous recipient; trying secret key %s ...\n"
-msgstr "destinatario anonimo; provo la chiave segreta %08lX ...\n"
+msgstr "destinatario anonimo; tentativo di chiave segreta %s...\n"
#, c-format
msgid "okay, we are the anonymous recipient.\n"
@@ -5539,27 +5311,27 @@ msgstr "la vecchia codifica del DEK non è gestita\n"
msgid "cipher algorithm %d%s is unknown or disabled\n"
msgstr "l'algoritmo di cifratura %d%s è sconosciuto o disattivato\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: cipher algorithm %s not found in recipient preferences\n"
msgstr ""
-"NOTA: l'algoritmo di cifratura %d non è stato trovato tra le preferenze\n"
+"AVVISO: algoritmo di crittografia %s non trovato nelle preferenze del "
+"destinatario\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: secret key %s expired at %s\n"
-msgstr "NOTA: chiave %08lX scaduta il %s\n"
+msgstr "Nota: chiave segreta %s scaduta alle %s\n"
-#, fuzzy, c-format
-#| msgid "NOTE: key has been revoked"
+#, c-format
msgid "Note: key has been revoked"
-msgstr "NOTA: la chiave è stata revocata"
+msgstr "Nota: la chiave è stata revocata"
#, c-format
msgid "build_packet failed: %s\n"
msgstr "build_packet fallito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s has no user IDs\n"
-msgstr "chiave %08lX: nessun user ID\n"
+msgstr "la chiave %s non ha ID utente\n"
msgid "To be revoked by:\n"
msgstr "Revocabile da:\n"
@@ -5567,14 +5339,11 @@ msgstr "Revocabile da:\n"
msgid "(This is a sensitive revocation key)\n"
msgstr "(Questa è una chiave di revoca sensibile)\n"
-#, fuzzy
-#| msgid "Secret key is available.\n"
msgid "Secret key is not available.\n"
-msgstr "È disponibile una chiave segreta.\n"
+msgstr "La chiave segreta non è disponibile.\n"
-#, fuzzy
msgid "Create a designated revocation certificate for this key? (y/N) "
-msgstr "Creare un certificato di revoca per questa chiave? "
+msgstr "Creare un certificato di revoca designato per questa chiave? (y/N) "
msgid "ASCII armored output forced.\n"
msgstr "Forzato l'output con armatura ASCII.\n"
@@ -5586,19 +5355,22 @@ msgstr "make_keysig_packet fallito: %s\n"
msgid "Revocation certificate created.\n"
msgstr "Certificato di revoca creato.\n"
-#, fuzzy, c-format
+#, c-format
msgid "no revocation keys found for \"%s\"\n"
-msgstr "non sono state trovate chiavi di revoca per `%s'\n"
+msgstr "nessuna chiave di revoca trovata per \"%s\"\n"
-#, fuzzy
msgid "This is a revocation certificate for the OpenPGP key:"
-msgstr "Creare un certificato di revoca per questa chiave? "
+msgstr "Questo è un certificato di revoca per la chiave OpenPGP:"
msgid ""
"A revocation certificate is a kind of \"kill switch\" to publicly\n"
"declare that a key shall not anymore be used. It is not possible\n"
"to retract such a revocation certificate once it has been published."
msgstr ""
+"Un certificato di revoca è una sorta di \"interruttore di emergenza\" per\n"
+"dichiarare pubblicamente che una certa chiave non deve essere più usata.\n"
+"Non è possibile ritirare un certificato di revoca una volta che è stato\n"
+"pubblicato."
msgid ""
"Use it to revoke this key in case of a compromise or loss of\n"
@@ -5607,37 +5379,43 @@ msgid ""
"a reason for the revocation. For details see the description of\n"
"of the gpg command \"--generate-revocation\" in the GnuPG manual."
msgstr ""
+"Utilizzare per revocare questa chiave in caso di compromissione o perdita "
+"di\n"
+"la chiave segreta. Tuttavia, se la chiave segreta è ancora accessibile,\n"
+"è meglio generare un nuovo certificato di revoca e dare\n"
+"un motivo per la revoca. Per i dettagli, vedere la descrizione di\n"
+"del comando gpg \"--generate-revocation\" nel manuale GnuPG."
msgid ""
"To avoid an accidental use of this file, a colon has been inserted\n"
"before the 5 dashes below. Remove this colon with a text editor\n"
"before importing and publishing this revocation certificate."
msgstr ""
+"Per evitare un uso accidentale di questo file, sono stati aggiunti due\n"
+"punti prima dei 5 trattini in basso. Rimuovere tali due punti con un\n"
+"editor di testo prima di importare e pubblicare il certificato di revoca."
-#, fuzzy, c-format
-#| msgid "Revocation certificate created.\n"
+#, c-format
msgid "revocation certificate stored as '%s.rev'\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "certificato di revoca archiviato come '%s.rev'\n"
-#, fuzzy, c-format
+#, c-format
msgid "secret key \"%s\" not found\n"
-msgstr "chiave segreta `%s' non trovata: %s\n"
+msgstr "chiave segreta \"%s\" non trovata\n"
#. TRANSLATORS: The %s prints a key specification which
#. for example has been given at the command line. Several lines
#. lines with secret key infos are printed after this message.
#, c-format
msgid "'%s' matches multiple secret keys:\n"
-msgstr ""
+msgstr "'%s' corrisponde a più chiavi segrete:\n"
-#, fuzzy, c-format
-#| msgid "error creating keyring `%s': %s\n"
+#, c-format
msgid "error searching the keyring: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante la ricerca del portachiave: %s\n"
-#, fuzzy
msgid "Create a revocation certificate for this key? (y/N) "
-msgstr "Creare un certificato di revoca per questa chiave? "
+msgstr "Creare un certificato di revoca per questa chiave? (y/N) "
msgid ""
"Revocation certificate created.\n"
@@ -5678,9 +5456,8 @@ msgstr "Motivo della revoca: %s\n"
msgid "(No description given)\n"
msgstr "(Non è stata data una descrizione)\n"
-#, fuzzy
msgid "Is this okay? (y/N) "
-msgstr "Va bene così? "
+msgstr "Va bene così? (y/N) "
#, c-format
msgid "weak key created - retrying\n"
@@ -5689,112 +5466,107 @@ msgstr "creata una chiave debole - riprovo\n"
#, c-format
msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
msgstr ""
-"Impossibile evitare una chiave debole per il cifrario simmetrico;\n"
-"ho provato %d volte!\n"
+"impossibile evitare una chiave debole per il cifrario simmetrico; ho provato "
+"%d volte!\n"
#, c-format
msgid "%s key %s uses an unsafe (%zu bit) hash\n"
-msgstr ""
+msgstr "La chiave %s %s utilizza un hash non sicuro (%zu bit)\n"
#, c-format
msgid "%s key %s requires a %zu bit or larger hash (hash is %s)\n"
msgstr ""
+"La chiave %s %s richiede un bit %zu o un hash superiore (l'hash è %s)\n"
#, c-format
msgid "WARNING: signature digest conflict in message\n"
msgstr "ATTENZIONE: conflitto del digest delle firme nel messaggio\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 "non è possibile usare %s in modalità %s\n"
+msgstr "impossibile utilizzare la chiave %s per l'accesso in modalità %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: signing subkey %s is not cross-certified\n"
-msgstr ""
-"ATTENZIONE: la sottochiave per firme %08lX non ha una certificature "
-"incrociata\n"
+msgstr "AVVISO: la sottochiave di firma %s non è certificata incrociata\n"
-#, fuzzy, c-format
+#, c-format
msgid "please see %s for more information\n"
-msgstr " i = mostrami ulteriori informazioni\n"
+msgstr "per ulteriori informazioni, vedere %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "WARNING: signing subkey %s has an invalid cross-certification\n"
msgstr ""
-"ATTENZIONE: la sottochiave per firme %08lX ha una certificature incrociata\n"
-"non valida\n"
+"AVVISO: la firma della sottochiave %s ha una certificazione incrociata non "
+"valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "public key %s is %lu second newer than the signature\n"
msgid_plural "public key %s is %lu seconds newer than the signature\n"
-msgstr[0] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n"
-msgstr[1] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n"
+msgstr[0] "la chiave pubblica %s è %lu seconda più recente della firma\n"
+msgstr[1] "le chiavi pubbliche %s sono %lu seconda più recente della firma\n"
-#, fuzzy, c-format
+#, c-format
msgid "public key %s is %lu day newer than the signature\n"
msgid_plural "public key %s is %lu days newer than the signature\n"
-msgstr[0] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n"
-msgstr[1] "la chiave pubblica %08lX è più recente della firma di %lu secondo\n"
+msgstr[0] "la chiave pubblica %s è %lu più recente della firma\n"
+msgstr[1] "le chiavi pubbliche %s sono %lu più recente della firma\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"key %s was created %lu second in the future (time warp or clock problem)\n"
msgid_plural ""
"key %s was created %lu seconds in the future (time warp or clock problem)\n"
msgstr[0] ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
+"la chiave %s è stata creata %lu secondo in futuro (problema di curvatura "
+"dell'ora o orologio)\n"
msgstr[1] ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
+"le chiavi %s sono stata create %lu secondo in futuro (problema di curvatura "
+"dell'ora o orologio)\n"
-#, fuzzy, c-format
+#, c-format
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] ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
+"la chiave %s è stata creata %lu giorno in futuro (problema di curvatura "
+"dell'ora o orologio)\n"
msgstr[1] ""
-"la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema\n"
-"con l'orologio)\n"
+"le chiavi %s sono state create %lu giorni in futuro (problema di curvatura "
+"dell'ora o orologio)\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: signature key %s expired %s\n"
-msgstr "NOTA: chiave per firmare %08lX scaduta il %s\n"
+msgstr "Nota: chiave di firma %s scaduta %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: signature key %s has been revoked\n"
-msgstr "NOTA: la chiave è stata revocata"
+msgstr "Nota: la chiave di firma %s è stata revocata\n"
-#, fuzzy, c-format
-#| msgid "standalone signature of class 0x%02x\n"
+#, c-format
msgid "bad key signature from key %s: %s (0x%02x, 0x%x)\n"
-msgstr "firma solitaria di classe 0x%02x\n"
+msgstr "firma chiave non valida dalla chiave %s: %s (0x%02x, 0x%x)\n"
-#, fuzzy, c-format
-#| msgid "standalone signature of class 0x%02x\n"
+#, c-format
msgid "bad data signature from key %s: %s (0x%02x, 0x%x)\n"
-msgstr "firma solitaria di classe 0x%02x\n"
+msgstr "firma dati non valida dalla chiave %s: %s (0x%02x, 0x%x)\n"
-#, fuzzy, c-format
+#, c-format
msgid "assuming bad signature from key %s due to an unknown critical bit\n"
msgstr ""
-"si suppone una firma non valida della chiave %08lX a causa di un\n"
-"bit critico sconosciuto\n"
+"presupponendo una firma non valida dalla chiave %s a causa di un bit critico "
+"sconosciuto\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no subkey for subkey revocation signature\n"
msgstr ""
-"chiave %08lX: non c'è una subchiave per il pacchetto di revoca della "
-"subchiave\n"
+"chiave %s: nessuna sottochiave per la firma di revoca della sottochiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no subkey for subkey binding signature\n"
msgstr ""
-"chiave %08lX: non c'è una subchiave per la firma di collegamento della "
-"subchiave\n"
+"chiave %s: nessuna sottochiave per la firma di associazione della "
+"sottochiave\n"
#, c-format
msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
@@ -5802,32 +5574,30 @@ msgstr ""
"ATTENZIONE: impossibile espandere i %% nell'URL (troppo lunga). Usata "
"inespansa.\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n"
msgstr ""
-"ATTENZIONE: Impossibile espandere i %% nell'URL della policy (troppo "
-"lunga).\n"
-"Usata inespansa.\n"
+"AVVISO: impossibile espandere l'URL del criterio %%(troppo grande). "
+"Utilizzo nonexpanded.\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: unable to %%-expand preferred keyserver URL (too large). Using "
"unexpanded.\n"
msgstr ""
-"ATTENZIONE: Impossibile espandere i %% nell'URL della policy (troppo "
-"lunga).\n"
-"Usata inespansa.\n"
+"AVVISO: impossibile espandere %%l'URL del keyserver preferito (troppo "
+"grande). Utilizzo nonexpanded.\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s/%s signature from: \"%s\"\n"
-msgstr "Firma %s da: \"%s\"\n"
+msgstr "Firma %s/%s da: \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid ""
"WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n"
msgstr ""
-"forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario\n"
+"AVVISO: l'algoritmo digest %s (%d) viola le preferenze dei destinatari\n"
#, c-format
msgid "signing:"
@@ -5843,19 +5613,18 @@ msgstr ""
"la chiave non è indicata come insicura - impossibile usarla con il RNG "
"finto!\n"
-#, fuzzy, c-format
+#, c-format
msgid "skipped \"%s\": duplicated\n"
-msgstr "saltata `%s': doppia\n"
+msgstr "\"%s\" ignorato: duplicato\n"
#, c-format
msgid "skipped: secret key already present\n"
msgstr "saltata: chiave pubblica già presente\n"
-#, fuzzy
msgid "this is a PGP generated Elgamal key which is not secure for signatures!"
msgstr ""
-"saltata %s: questa è una chiave ElGamal generata da PGP che NON è sicura per "
-"le firme!\n"
+"si tratta di una chiave Elgamal generata da PGP che non è sicura per le "
+"firme!"
#, c-format
msgid "trust record %lu, type %d: write failed: %s\n"
@@ -5869,44 +5638,41 @@ msgstr ""
"# Lista dei valori della fiducia assegnati, creata il %s\n"
"# (Usa \"gpg --import-ownertrust\" per ripristinarli)\n"
-#, fuzzy, c-format
+#, c-format
msgid "error in '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore in '%s': %s\n"
-#, fuzzy
msgid "line too long"
-msgstr "riga troppo lunga\n"
+msgstr "linea troppo lunga"
msgid "colon missing"
-msgstr ""
+msgstr "due punti mancanti"
-#, fuzzy
msgid "invalid fingerprint"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "impronta digitale non valida"
-#, fuzzy
msgid "ownertrust value missing"
-msgstr "importa i valori di fiducia"
+msgstr "cambia il valore di fiducia"
-#, fuzzy, c-format
+#, c-format
msgid "error finding trust record in '%s': %s\n"
-msgstr "errore cercando il record della fiducia: %s\n"
+msgstr "errore durante la ricerca del record di attendibilità in '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "read error in '%s': %s\n"
-msgstr "errore di lettura: %s\n"
+msgstr "errore di lettura in '%s': %s\n"
#, c-format
msgid "trustdb: sync failed: %s\n"
msgstr "trustdb: sync fallita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't create lock for '%s'\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile creare il blocco per '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't lock '%s'\n"
-msgstr "impossibile aprire `%s'\n"
+msgstr "impossibile bloccare '%s'\n"
#, c-format
msgid "trustdb rec %lu: lseek failed: %s\n"
@@ -5924,9 +5690,9 @@ msgstr "transazione del trustdb troppo grande\n"
msgid "%s: directory does not exist!\n"
msgstr "%s: la directory non esiste!\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't access '%s': %s\n"
-msgstr "impossibile chiudere `%s': %s\n"
+msgstr "impossibile accedere a '%s': %s\n"
#, c-format
msgid "%s: failed to create version record: %s"
@@ -5940,10 +5706,9 @@ msgstr "%s: è stato creato un trustdb non valido\n"
msgid "%s: trustdb created\n"
msgstr "%s: creato il trustdb\n"
-#, fuzzy, c-format
-#| msgid "NOTE: trustdb not writable\n"
+#, c-format
msgid "Note: trustdb not writable\n"
-msgstr "NOTA: il trustdb non è scrivibile\n"
+msgstr "Nota: trustdb non scrivibile\n"
#, c-format
msgid "%s: invalid trustdb\n"
@@ -6001,9 +5766,9 @@ msgstr "%s: azzeramento di un record fallito: %s\n"
msgid "%s: failed to append a record: %s\n"
msgstr "%s: accodatura a un record fallita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Error: The trustdb is corrupted.\n"
-msgstr "%s: creato il trustdb\n"
+msgstr "Errore: trustdb danneggiato.\n"
#, c-format
msgid "can't handle text lines longer than %d characters\n"
@@ -6013,276 +5778,277 @@ msgstr "impossibile gestire linee di testo più lunghe di %d caratteri\n"
msgid "input line longer than %d characters\n"
msgstr "linea di input più lunga di %d caratteri\n"
-#, fuzzy, c-format
+#, c-format
msgid "error beginning transaction on TOFU database: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'avvio della transazione nel database TOFU: %s\n"
#, c-format
msgid "error committing transaction on TOFU database: %s\n"
-msgstr ""
+msgstr "errore durante il commit della transazione nel database TOFU: %s\n"
#, c-format
msgid "error rolling back transaction on TOFU database: %s\n"
-msgstr ""
+msgstr "errore durante il rollback della transazione nel database TOFU: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "unsupported TOFU database version: %s\n"
-msgstr ""
-"\n"
-"Algoritmi gestiti:\n"
+msgstr "versione del database TOFU non supportata: %s\n"
#, c-format
msgid "TOFU DB error"
-msgstr ""
+msgstr "Errore DB TOFU"
-#, fuzzy, c-format
+#, c-format
msgid "error reading TOFU database: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura del database TOFU: %s\n"
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
msgid "error determining TOFU database's version: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr ""
+"errore durante la determinazione della versione del database TOFU: %s\n"
-#, fuzzy, c-format
-#| msgid "%s: error writing dir record: %s\n"
+#, c-format
msgid "error initializing TOFU database: %s\n"
-msgstr "%s: errore durante la scrittura del dir record: %s\n"
+msgstr "errore durante l'inizializzazione del database TOFU: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error opening TOFU database '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'apertura del database TOFU '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error updating TOFU database: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'aggiornamento del database TOFU: %s\n"
#, c-format
msgid ""
"This is the first time the email address \"%s\" is being used with key %s."
msgstr ""
+"Questa è la prima volta che l'indirizzo di posta elettronica \"%s\" viene "
+"utilizzato con la chiave %s."
#, 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] ""
-msgstr[1] ""
+msgstr[0] "L'indirizzo di posta elettronica \"%s\" è associato alla chiave %d!"
+msgstr[1] "L'indirizzo di posta elettronica \"%s\" è associato alla chiavi %d!"
msgid " Since this binding's policy was 'auto', it has been changed to 'ask'."
msgstr ""
+" poiché la politica di questo legame era \"automatica\", è stata modificata "
+"in \"chiedere\"."
#, c-format
msgid ""
"Please indicate whether this email address should be associated with key %s "
"or whether you think someone is impersonating \"%s\"."
msgstr ""
+"Indicare se questo indirizzo di posta elettronica deve essere associato alla "
+"chiave %s o se si ritiene che qualcuno sia \"%s\"."
-#, fuzzy, c-format
+#, c-format
msgid "error gathering other user IDs: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la raccolta di altri ID utente: %s\n"
-#, fuzzy
-#| msgid "list key and user IDs"
msgid "This key's user IDs:\n"
-msgstr "elenca le chiavi e gli user ID"
+msgstr "ID utente di questa chiave:\n"
-#, fuzzy, c-format
-#| msgid "Policy: "
+#, c-format
msgid "policy: %s"
-msgstr "Policy: "
+msgstr "criterio: %s"
-#, fuzzy, c-format
+#, c-format
msgid "error gathering signature stats: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la raccolta delle statistiche di firma: %s\n"
#, 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"
msgstr[0] ""
+"L'indirizzo di posta elettronica \"%s\" è associato alla chiave %d!\n"
msgstr[1] ""
+"L'indirizzo di posta elettronica \"%s\" è associato alle chiavi %d!\n"
#, c-format
msgid "Statistics for keys with the email address \"%s\":\n"
-msgstr ""
+msgstr "Statistiche per le chiavi con indirizzo di posta elettronica \"%s\":\n"
-#, fuzzy
-#| msgid "list keys"
msgid "this key"
-msgstr "elenca le chiavi"
+msgstr "questa chiave"
-#, fuzzy, c-format
+#, c-format
msgid "Verified %d message."
msgid_plural "Verified %d messages."
-msgstr[0] "|algo [files]|stampa tutti i message digests"
-msgstr[1] "|algo [files]|stampa tutti i message digests"
+msgstr[0] "Messaggio %d verificato."
+msgstr[1] "Messaggi %d verificati."
-#, fuzzy, c-format
-#| msgid "encrypted with %lu passphrases\n"
+#, c-format
msgid "Encrypted %d message."
msgid_plural "Encrypted %d messages."
-msgstr[0] "cifratto con %lu passphrase\n"
-msgstr[1] "cifratto con %lu passphrase\n"
+msgstr[0] "Messaggio %d crittografato."
+msgstr[1] "Messaggi %d crittografati."
-#, fuzzy, c-format
+#, c-format
msgid "Verified %d message in the future."
msgid_plural "Verified %d messages in the future."
-msgstr[0] "|algo [files]|stampa tutti i message digests"
-msgstr[1] "|algo [files]|stampa tutti i message digests"
+msgstr[0] "Messaggio %d verificato in futuro."
+msgstr[1] "Messaggi %d verificati in futuro."
-#, fuzzy, c-format
+#, c-format
msgid "Encrypted %d message in the future."
msgid_plural "Encrypted %d messages in the future."
-msgstr[0] "|algo [files]|stampa tutti i message digests"
-msgstr[1] "|algo [files]|stampa tutti i message digests"
+msgstr[0] "Messaggio %d crittografato in futuro."
+msgstr[1] "Messaggi %d crittografati in futuro."
#, c-format
msgid "Messages verified over the past %d day: %d."
msgid_plural "Messages verified over the past %d days: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi verificati nell'ultimo %d giorno: %d."
+msgstr[1] "Messaggi verificati negli ultimi %d giorni: %d."
#, c-format
msgid "Messages encrypted over the past %d day: %d."
msgid_plural "Messages encrypted over the past %d days: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi crittografati nell'ultimo %d giorno: %d."
+msgstr[1] "Messaggi crittografati negli ultimi %d giorni: %d."
#, c-format
msgid "Messages verified over the past %d month: %d."
msgid_plural "Messages verified over the past %d months: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi verificati nell'ultimo %d mese: %d."
+msgstr[1] "Messaggi verificati nell'ultimo %d mesi: %d."
#, c-format
msgid "Messages encrypted over the past %d month: %d."
msgid_plural "Messages encrypted over the past %d months: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi crittografati nell'ultimo %d mese: %d."
+msgstr[1] "Messaggi crittografati negli ultimi %d mesi: %d."
#, c-format
msgid "Messages verified over the past %d year: %d."
msgid_plural "Messages verified over the past %d years: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi verificati nell'ultimo %d anno: %d."
+msgstr[1] "Messaggi verificati negli ultimi %d anni: %d."
#, c-format
msgid "Messages encrypted over the past %d year: %d."
msgid_plural "Messages encrypted over the past %d years: %d."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Messaggi crittografati nell'ulltimo %d anno: %d."
+msgstr[1] "Messaggi crittografati negli ultimi %d anni: %d."
#, c-format
msgid "Messages verified in the past: %d."
-msgstr ""
+msgstr "Messaggi verificati in passato: %d."
-#, fuzzy, c-format
+#, c-format
msgid "Messages encrypted in the past: %d."
-msgstr "|algo [files]|stampa tutti i message digests"
+msgstr "Messaggi crittografati in passato: %d."
#. TRANSLATORS: Please translate the text found in the source
#. * file below. We don't directly internationalize that text so
#. * that we can tweak it without breaking translations.
msgid "TOFU detected a binding conflict"
-msgstr ""
+msgstr "TOFU ha rilevato un conflitto di binding"
#. TRANSLATORS: Two letters (normally the lower and upper case
#. * version of the hotkey) for each of the five choices. If
#. * there is only one choice in your language, repeat it.
msgid "gGaAuUrRbB"
-msgstr ""
+msgstr "gGaAuUrRbB"
msgid "(G)ood, (A)ccept once, (U)nknown, (R)eject once, (B)ad? "
-msgstr ""
+msgstr "(G)ood, (A)ccept una volta, (U)nknown, (R)espellere una volta, (B)ad? "
msgid "Defaulting to unknown.\n"
-msgstr ""
+msgstr "Impostazione predefinita sconosciuta.\n"
#, c-format
msgid "TOFU db corruption detected.\n"
-msgstr ""
+msgstr "Rilevato danneggiamento del database TOFU.\n"
-#, fuzzy, c-format
+#, c-format
msgid "error changing TOFU policy: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la modifica del criterio TOFU: %s\n"
#, c-format
msgid "%lld~year"
msgid_plural "%lld~years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~anno"
+msgstr[1] "%lld~anni"
#, c-format
msgid "%lld~month"
msgid_plural "%lld~months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~mese"
+msgstr[1] "%lld‪‪~mesi"
#, c-format
msgid "%lld~week"
msgid_plural "%lld~weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~settimana"
+msgstr[1] "%lld‪‪~settimane"
#, c-format
msgid "%lld~day"
msgid_plural "%lld~days"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~giorno"
+msgstr[1] "%lld~giorni"
#, c-format
msgid "%lld~hour"
msgid_plural "%lld~hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~ora"
+msgstr[1] "%lld~ore"
#, c-format
msgid "%lld~minute"
msgid_plural "%lld~minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~minuto"
+msgstr[1] "%lld~minuti"
#, c-format
msgid "%lld~second"
msgid_plural "%lld~seconds"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%lld~secondo"
+msgstr[1] "%lld~secondi"
#, c-format
msgid "%s: Verified 0~signatures and encrypted 0~messages."
-msgstr ""
+msgstr "%s: verificata 0: firme e 0 messaggi crittografati."
-#, fuzzy, c-format
-#| msgid "Deleted %d signatures.\n"
+#, c-format
msgid "%s: Verified 0 signatures."
-msgstr "Cancellate %d firme.\n"
+msgstr "%s: firme 0 verificate."
-#, fuzzy
-#| msgid "encrypted with %lu passphrases\n"
msgid "Encrypted 0 messages."
-msgstr "cifratto con %lu passphrase\n"
+msgstr "Messaggi crittografati 0."
-#, fuzzy, c-format
-#| msgid "Policy: "
+#, c-format
msgid "(policy: %s)"
-msgstr "Policy: "
+msgstr "(criterio: %s)"
#, c-format
msgid ""
"Warning: we have yet to see a message signed using this key and user id!\n"
msgstr ""
+"Attenzione: dobbiamo ancora vedere un messaggio firmato utilizzando questa "
+"chiave e ID utente!\n"
#, c-format
msgid ""
"Warning: we've only seen one message signed using this key and user id!\n"
msgstr ""
+"Attenzione: abbiamo visto solo un messaggio firmato utilizzando questa "
+"chiave e ID utente!\n"
#, c-format
msgid "Warning: you have yet to encrypt a message to this key!\n"
msgstr ""
+"Attenzione: non è ancora necessario crittografare un messaggio a questa "
+"chiave!\n"
#, c-format
msgid "Warning: you have only encrypted one message to this key!\n"
-msgstr ""
+msgstr "Attenzione: hai crittografato solo un messaggio per questa chiave!\n"
#, c-format
msgid ""
@@ -6298,37 +6064,48 @@ msgid_plural ""
" %s\n"
"to mark it as being bad.\n"
msgstr[0] ""
+"Attenzione: se pensi di aver visto più firme da questa chiave e id utente, "
+"allora questa chiave potrebbe essere un falso! Esaminare attentamente "
+"l'indirizzo e-mail per piccole variazioni. Se la chiave è sospetta, "
+"utilizzare\n"
+" %s\n"
+"per contrassegnarlo come cattivo.\n"
msgstr[1] ""
+"Attenzione: se pensi di aver visto più firme da questa chiave e id utente, "
+"allora questa chiave potrebbe essere un falso! Esaminare attentamente "
+"l'indirizzo e-mail per piccole variazioni. Se la chiave è sospetta, "
+"utilizzare\n"
+" %s\n"
+"per contrassegnarlo come cattivo.\n"
-#, fuzzy, c-format
+#, c-format
msgid "error opening TOFU database: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'apertura del database TOFU: %s\n"
#, c-format
msgid "WARNING: Encrypting to %s, which has no non-revoked user ids\n"
-msgstr ""
+msgstr "AVVISO: crittografia a %s, che non dispone di ID utente non revocati\n"
-#, fuzzy, c-format
-#| msgid "`%s' is not a valid long keyID\n"
+#, c-format
msgid "'%s' is not a valid long keyID\n"
-msgstr "`%s' non è un key ID lungo valido\n"
+msgstr "'%s' non è un keyID lungo valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: accepted as trusted key\n"
-msgstr "chiave %08lX: accettata come chiave affidabile\n"
+msgstr "chiave %s: accettata come chiave attendibile\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s occurs more than once in the trustdb\n"
-msgstr "chiave %08lX: appare nel trustdb più di una volta\n"
+msgstr "chiave %s si verifica più di una volta nel trustdb\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s: no public key for trusted key - skipped\n"
msgstr ""
-"chiave %08lX: manca la chiave pubblica della chiave fidata - ignorata\n"
+"chiave %s: nessuna chiave pubblica per la chiave attendibile - ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "key %s marked as ultimately trusted\n"
-msgstr "chiavi marcate definitivamente affidabili.\n"
+msgstr "chiave %s contrassegnata come considerata attendibile\n"
#, c-format
msgid "trust record %lu, req type %d: read failed: %s\n"
@@ -6341,18 +6118,21 @@ msgstr "il trust record %lu non è del tipo richiesto %d\n"
#, c-format
msgid "You may try to re-create the trustdb using the commands:\n"
msgstr ""
+"È possibile provare a creare nuovamente il trustdb utilizzando i comandi:\n"
#, c-format
msgid "If that does not work, please consult the manual\n"
-msgstr ""
+msgstr "Se ciò non funziona, consultare il manuale\n"
#, c-format
msgid "unable to use unknown trust model (%d) - assuming %s trust model\n"
msgstr ""
+"impossibile utilizzare il modello di trust sconosciuto (%d) - presupponendo "
+"il modello di trust %s\n"
#, c-format
msgid "using %s trust model\n"
-msgstr ""
+msgstr "utilizzo del modello di trust %s\n"
#, c-format
msgid "no need for a trustdb check\n"
@@ -6362,17 +6142,18 @@ msgstr "non è necessario un controllo del trustdb\n"
msgid "next trustdb check due at %s\n"
msgstr "il prossimo controllo del trustdb sarà fatto il %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no need for a trustdb check with '%s' trust model\n"
-msgstr "non è necessario un controllo del trustdb\n"
+msgstr "non è necessario un controllo trustdb con il modello di trust '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "no need for a trustdb update with '%s' trust model\n"
-msgstr "non è necessario un controllo del trustdb\n"
+msgstr ""
+"non è necessario un aggiornamento trustdb con il modello di trust '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "public key %s not found: %s\n"
-msgstr "chiave pubblica %08lX non trovata: %s\n"
+msgstr "chiave pubblica %s non trovata: %s\n"
#, c-format
msgid "please do a --check-trustdb\n"
@@ -6382,51 +6163,53 @@ msgstr "per favore usa --check-trustdb\n"
msgid "checking the trustdb\n"
msgstr "controllo il trustdb\n"
-#, fuzzy, c-format
+#, c-format
msgid "%d key processed"
msgid_plural "%d keys processed"
-msgstr[0] "Per ora sono state esaminate %lu chiavi\n"
-msgstr[1] "Per ora sono state esaminate %lu chiavi\n"
+msgstr[0] "Chiave %d elaborata"
+msgstr[1] "Chiavi %d elaborate"
-#, fuzzy, c-format
-#| msgid "%d keys processed (%d validity counts cleared)\n"
+#, c-format
msgid " (%d validity count cleared)\n"
msgid_plural " (%d validity counts cleared)\n"
-msgstr[0] "%d chiavi processate (%d conteggi di validità azzerati)\n"
-msgstr[1] "%d chiavi processate (%d conteggi di validità azzerati)\n"
+msgstr[0] " (%d conteggio di validità cancellato)\n"
+msgstr[1] " (%d conteggi di validità cancellati)\n"
#, c-format
msgid "no ultimately trusted keys found\n"
msgstr "non è stata trovata alcuna chiave definitivamente affidabile\n"
-#, fuzzy, c-format
+#, c-format
msgid "public key of ultimately trusted key %s not found\n"
-msgstr "chiave pubblica definitivamente affidabile %08lX non trovata\n"
+msgstr "chiave pubblica della chiave attendibile %s non trovata\n"
#, c-format
msgid ""
"depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n"
msgstr ""
+"profondità: %d valido: %3d firmato: %3d trust: %d-, %dq, %dn, %dm, %df, "
+"%du\n"
-#, fuzzy, c-format
+#, c-format
msgid "unable to update trustdb version record: write failed: %s\n"
-msgstr "trust record %lu, req type %d: write fallita: %s\n"
+msgstr ""
+"impossibile aggiornare il record della versione trustdb: scrittura non "
+"riuscita: %s\n"
msgid "undefined"
-msgstr ""
+msgstr "non definito"
-#, fuzzy
msgid "never"
-msgstr "mai "
+msgstr "mai"
msgid "marginal"
-msgstr ""
+msgstr "marginale"
msgid "full"
-msgstr ""
+msgstr "intero"
msgid "ultimate"
-msgstr ""
+msgstr "definitivo"
#. TRANSLATORS: these strings are similar to those in
#. trust_value_to_string(), but are a fixed length. This is needed to
@@ -6437,35 +6220,31 @@ msgstr ""
#. essentially a comment and need not be translated. Either key and
#. uid are both NULL, or neither are NULL.
msgid "10 translator see trust.c:uid_trust_string_fixed"
-msgstr ""
+msgstr "10 traduttore vedere trust.c:uid_trust_string_fixed"
-#, fuzzy
msgid "[ revoked]"
-msgstr "[revocata]"
+msgstr "[ revocato]"
-#, fuzzy
msgid "[ expired]"
-msgstr "[scaduta]"
+msgstr "[ scaduto]"
-#, fuzzy
msgid "[ unknown]"
-msgstr "sconosciuto"
+msgstr "[ sconosciuto]"
msgid "[ undef ]"
-msgstr ""
+msgstr "[ undef ]"
-#, fuzzy
msgid "[ never ]"
-msgstr "mai "
+msgstr "[ mai ]"
msgid "[marginal]"
-msgstr ""
+msgstr "[marginale]"
msgid "[ full ]"
-msgstr ""
+msgstr "[ completo ]"
msgid "[ultimate]"
-msgstr ""
+msgstr "[ultimo]"
#, c-format
msgid ""
@@ -6481,594 +6260,587 @@ msgstr ""
msgid "input line %u too long or missing LF\n"
msgstr "linea di input %u troppo lunga o LF mancante\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't open fd %d: %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "impossibile aprire fd %d: %s\n"
msgid "set debugging flags"
-msgstr ""
+msgstr "impostare i flag di debug"
msgid "enable full debugging"
-msgstr ""
+msgstr "abilitare il debug completo"
-#, fuzzy
msgid "Usage: kbxutil [options] [files] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: kbxutil [opzioni] [file] (-h per assistenza)"
-#, fuzzy
msgid ""
"Syntax: kbxutil [options] [files]\n"
"List, export, import Keybox data\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr ""
+"Sintassi: kbxutil [opzioni] [files]\n"
+"Elencare, esportare, importare i dati di Keybox\n"
#. TRANSLATORS: Put a \x1f right before a colon. This can be
#. * used by pinentry to nicely align the names and values. Keep
#. * the %s at the start and end of the string.
#, c-format
msgid "%sNumber: %s%%0AHolder: %s%s"
-msgstr ""
+msgstr "%sNumero: %s%%0ATitolare: %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 "Tentativi rimanenti: %d"
msgid "||Please enter the PIN for the key to create qualified signatures."
-msgstr ""
+msgstr "||Immettere il PIN per la chiave per creare firme qualificate."
-#, fuzzy
msgid "||Please enter the PIN for the standard keys."
-msgstr "cambia la passphrase"
+msgstr "||Si prega di inserire il PIN per le chiavi standard."
#, c-format
msgid "RSA modulus missing or not of size %d bits\n"
-msgstr ""
+msgstr "Modulo RSA mancante o non di dimensione %d bit\n"
#, c-format
msgid "RSA public exponent missing or larger than %d bits\n"
-msgstr ""
+msgstr "Esponente pubblico RSA mancante o superiore a %d bit\n"
#, c-format
msgid "PIN callback returned error: %s\n"
-msgstr ""
+msgstr "Errore di richiamata PIN: %s\n"
#, c-format
msgid "the NullPIN has not yet been changed\n"
-msgstr ""
+msgstr "il NullPIN non è ancora stato modificato\n"
-#, fuzzy
msgid "|N|Please enter a new PIN for the standard keys."
-msgstr "cambia la passphrase"
+msgstr "|N|Immettere un nuovo PIN per le chiavi standard."
-#, fuzzy
msgid "|NP|Please enter a new PIN Unblocking Code (PUK) for the standard keys."
-msgstr "Per favore scegli il motivo della revoca:\n"
+msgstr ""
+"|N|Inserisci un nuovo codice di sblocco del PIN (PUK) per i tasti standard."
-#, fuzzy
msgid "|P|Please enter the PIN Unblocking Code (PUK) for the standard keys."
-msgstr "Per favore scegli il motivo della revoca:\n"
+msgstr "|P|Inserisci il codice di sblocco del PIN (PUK) per i tasti standard."
msgid "|N|Please enter a new PIN for the key to create qualified signatures."
-msgstr ""
+msgstr "|N|Immettere un nuovo PIN per la chiave per creare firme qualificate."
msgid ""
"|NP|Please enter a new PIN Unblocking Code (PUK) for the key to create "
"qualified signatures."
msgstr ""
+"|NP|Inserisci un nuovo codice di sblocco PIN (PUK) per la chiave per creare "
+"firme qualificate."
msgid ""
"|P|Please enter the PIN Unblocking Code (PUK) for the key to create "
"qualified signatures."
msgstr ""
+"|P|Inserisci il codice di sblocco del PIN (PUK) per la chiave per creare "
+"firme qualificate."
-#, fuzzy, c-format
+#, c-format
msgid "error getting new PIN: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero del nuovo PIN: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to store the fingerprint: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile memorizzare l'impronta digitale: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to store the creation date: %s\n"
-msgstr "rebuild della cache del portachiavi fallito: %s\n"
+msgstr "impossibile memorizzare la data di creazione: %s\n"
#, c-format
msgid "error retrieving CHV status from card\n"
-msgstr ""
+msgstr "errore durante il recupero dello stato CHV dalla scheda\n"
#, c-format
msgid "response does not contain the RSA modulus\n"
-msgstr ""
+msgstr "risposta non contiene il modulo RSA\n"
#, c-format
msgid "response does not contain the RSA public exponent\n"
-msgstr ""
+msgstr "risposta non contiene l'esponente pubblico RSA\n"
-#, fuzzy, c-format
-#| msgid "remove keys from the public keyring"
+#, c-format
msgid "response does not contain the EC public key\n"
-msgstr "rimuove le chiavi dal portachiavi pubblico"
+msgstr "risposta non contiene la chiave pubblica CE\n"
#, c-format
msgid "response does not contain the public key data\n"
-msgstr ""
+msgstr "risposta non contiene i dati della chiave pubblica\n"
-#, fuzzy, c-format
+#, c-format
msgid "reading public key failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "lettura della chiave pubblica non riuscita: %s\n"
#. TRANSLATORS: Put a \x1f right before a colon. This can be
#. * used by pinentry to nicely align the names and values. Keep
#. * the %s at the start and end of the string.
#, c-format
msgid "%sNumber: %s%%0AHolder: %s%%0ACounter: %lu%s"
-msgstr ""
+msgstr "%sNumero: %s%%0AHolder: %s%%0ACounter: %lu%s"
#, c-format
msgid "using default PIN as %s\n"
-msgstr ""
+msgstr "utilizzando il PIN predefinito come %s\n"
#, c-format
msgid "failed to use default PIN as %s: %s - disabling further default use\n"
msgstr ""
+"impossibile utilizzare il PIN predefinito come %s: %s - disabilitazione "
+"dell'ulteriore utilizzo predefinito\n"
-#, fuzzy
msgid "||Please unlock the card"
-msgstr "cambia la passphrase"
+msgstr "||Si prega di sbloccare la carta"
#, c-format
msgid "PIN for CHV%d is too short; minimum length is %d\n"
-msgstr ""
+msgstr "Il PIN per CHV%d è troppo breve; la lunghezza minima è %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "verify CHV%d failed: %s\n"
-msgstr "invio al keyserver fallito: %s\n"
+msgstr "verifica CHV%d non riuscita: %s\n"
#, c-format
msgid "card is permanently locked!\n"
-msgstr ""
+msgstr "carta è bloccata in modo permanente!\n"
#, c-format
msgid "%d Admin PIN attempt remaining before card is permanently locked\n"
msgid_plural ""
"%d Admin PIN attempts remaining before card is permanently locked\n"
msgstr[0] ""
+"%d tentativo di PIN di amministrazione rimanente prima che la scheda venga "
+"bloccata in modo permanente\n"
msgstr[1] ""
+"%d tentativi di PIN di amministrazione rimanenti prima che la schede vengano "
+"bloccate in modo permanente\n"
#. TRANSLATORS: Do not translate the "|A|" prefix but keep it at
#. the start of the string. Use %0A (single percent) for a linefeed.
-#, fuzzy
msgid "|A|Please enter the Admin PIN"
-msgstr "cambia la passphrase"
+msgstr "|A|Inserisci il PIN di amministratore"
#, c-format
msgid "access to admin commands is not configured\n"
-msgstr ""
+msgstr "l'accesso ai comandi di amministrazione non è configurato\n"
-#, fuzzy
msgid "||Please enter the PIN"
-msgstr "cambia la passphrase"
+msgstr "||Inserisci il PIN"
-#, fuzzy
msgid "||Please enter the Reset Code for the card"
-msgstr "Per favore scegli il motivo della revoca:\n"
+msgstr "||Inserisci il Codice reset per la carta"
#, c-format
msgid "Reset Code is too short; minimum length is %d\n"
-msgstr ""
+msgstr "Il codice di reimpostazione è troppo breve; la lunghezza minima è %d\n"
#. TRANSLATORS: Do not translate the "|*|" prefixes but
#. keep it at the start of the string. We need this elsewhere
#. to get some infos on the string.
msgid "|RN|New Reset Code"
-msgstr ""
+msgstr "|RN|Nuovo codice di ripristino"
msgid "|AN|New Admin PIN"
-msgstr ""
+msgstr "|AN|Nuovo PIN di amministrazione"
msgid "|N|New PIN"
-msgstr ""
+msgstr "|N|Nuovo PIN"
-#, fuzzy
msgid "||Please enter the Admin PIN and New Admin PIN"
-msgstr "cambia la passphrase"
+msgstr "||Inserisci il PIN di amministratore e il nuovo PIN di amministrazione"
-#, fuzzy
msgid "||Please enter the PIN and New PIN"
-msgstr "cambia la passphrase"
+msgstr "||Inserisci il PIN e il nuovo PIN"
-#, fuzzy, c-format
+#, c-format
msgid "error reading application data\n"
-msgstr "errore leggendo il keyblock: %s\n"
+msgstr "errore durante la lettura dei dati dell'applicazione\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading fingerprint DO\n"
-msgstr "%s: errore durante la lettura del record libero: %s\n"
+msgstr "errore durante la lettura dell'impronta digitale DO\n"
-#, fuzzy, c-format
+#, c-format
msgid "key already exists\n"
-msgstr "`%s' è già compresso\n"
+msgstr "chiave già esistente\n"
#, c-format
msgid "existing key will be replaced\n"
-msgstr ""
+msgstr "chiave esistente verrà sostituita\n"
-#, fuzzy, c-format
+#, c-format
msgid "generating new key\n"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "generazione di una nuova chiave\n"
-#, fuzzy, c-format
+#, c-format
msgid "writing new key\n"
-msgstr "genera una nuova coppia di chiavi"
+msgstr "genera una nuova coppia di chiavi\n"
#, c-format
msgid "creation timestamp missing\n"
-msgstr ""
+msgstr "timestamp di creazione mancante\n"
#, c-format
msgid "RSA prime %s missing or not of size %d bits\n"
-msgstr ""
+msgstr "RSA primo %s mancante o non di dimensione %d bit\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to store the key: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile archiviare la chiave: %s\n"
-#, fuzzy, c-format
-#| msgid "unsupported URI"
+#, c-format
msgid "unsupported curve\n"
-msgstr "URI non gestito"
+msgstr "curva non supportata\n"
#, c-format
msgid "please wait while key is being generated ...\n"
-msgstr ""
+msgstr "si prega di attendere mentre la chiave viene generata …\n"
-#, fuzzy, c-format
+#, c-format
msgid "generating key failed\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "generazione della chiave non riuscita\n"
-#, fuzzy, c-format
+#, c-format
msgid "key generation completed (%d second)\n"
msgid_plural "key generation completed (%d seconds)\n"
-msgstr[0] "Generazione della chiave fallita: %s\n"
-msgstr[1] "Generazione della chiave fallita: %s\n"
+msgstr[0] "generazione della chiave completata (%d secondo)\n"
+msgstr[1] ""
+"generazione della chiavi completate (%d secondi)\n"
+"\n"
+"\n"
#, c-format
msgid "invalid structure of OpenPGP card (DO 0x93)\n"
-msgstr ""
+msgstr "struttura non valida della scheda OpenPGP (DO 0x93)\n"
#, c-format
msgid "fingerprint on card does not match requested one\n"
-msgstr ""
+msgstr "impronta digitale sulla carta non corrisponde a quello richiesto\n"
-#, fuzzy, c-format
+#, c-format
msgid "card does not support digest algorithm %s\n"
-msgstr "Firma %s, algoritmo di digest %s\n"
+msgstr "scheda non supporta l'algoritmo digest %s\n"
#, c-format
msgid "signatures created so far: %lu\n"
-msgstr ""
+msgstr "firme create finora: %lu\n"
#, c-format
msgid ""
"verification of Admin PIN is currently prohibited through this command\n"
msgstr ""
+"la verifica del PIN di amministrazione è attualmente vietata tramite questo "
+"comando\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't access %s - invalid OpenPGP card?\n"
-msgstr "Non sono stati trovati dati OpenPGP validi.\n"
+msgstr "impossibile accedere a %s - scheda OpenPGP non valida?\n"
-#, fuzzy
msgid "||Please enter your PIN at the reader's pinpad"
-msgstr "cambia la passphrase"
+msgstr "||Inserisci il tuo PIN sul pinpad del lettore"
#. TRANSLATORS: Do not translate the "|*|" prefixes but
#. keep it at the start of the string. We need this elsewhere
#. to get some infos on the string.
msgid "|N|Initial New PIN"
-msgstr ""
+msgstr "|N|Nuovo PIN iniziale"
msgid "run in multi server mode (foreground)"
-msgstr ""
+msgstr "eseguire in modalità multi server (in primo piano)"
msgid "|LEVEL|set the debugging level to LEVEL"
-msgstr ""
+msgstr "|LEVEL| impostare il livello di debug su LEVEL"
-#, fuzzy
msgid "|FILE|write a log to FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|scrittura di un registro in FILE"
msgid "|N|connect to reader at port N"
-msgstr ""
+msgstr "|N|connessione al lettore alla porta N"
-#, fuzzy
msgid "|NAME|use NAME as ct-API driver"
-msgstr "|NOME|usa NOME come destinatario predefinito"
+msgstr "|NAME|utilizzare NAME come driver ct-API"
-#, fuzzy
msgid "|NAME|use NAME as PC/SC driver"
-msgstr "|NOME|usa NOME come destinatario predefinito"
+msgstr "|NAME|utilizzare NAME come driver PC/SC"
-#, fuzzy
msgid "do not use the internal CCID driver"
-msgstr "non usa per niente il terminale"
+msgstr "non utilizzare il driver CCID interno"
msgid "|N|disconnect the card after N seconds of inactivity"
-msgstr ""
+msgstr "|N|scollegare la scheda dopo N secondi di inattività"
msgid "do not use a reader's pinpad"
-msgstr ""
+msgstr "non utilizzare il pinpad di un lettore"
-#, fuzzy
msgid "deny the use of admin card commands"
-msgstr "comandi in conflitto\n"
+msgstr "negare l'uso dei comandi della scheda di amministrazione"
msgid "use variable length input for pinpad"
-msgstr ""
+msgstr "utilizzare l'input a lunghezza variabile per il pinpad"
-#, fuzzy
msgid "Usage: @SCDAEMON@ [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @SCDAEMON@ [opzioni] (-h per assistenza)"
msgid ""
"Syntax: scdaemon [options] [command [args]]\n"
"Smartcard daemon for @GNUPG@\n"
msgstr ""
+"Sintassi: scdaemon [opzioni] [comando [args]]\n"
+"Daemon smartcard per @GNUPG@\n"
#, c-format
msgid "please use the option '--daemon' to run the program in the background\n"
msgstr ""
+"si prega di utilizzare l'opzione '--daemon' per eseguire il programma in "
+"background\n"
#, c-format
msgid "handler for fd %d started\n"
-msgstr ""
+msgstr "gestore per fd %d avviato\n"
#, c-format
msgid "handler for fd %d terminated\n"
-msgstr ""
+msgstr "gestore per fd %d terminato\n"
#, c-format
msgid "validation model requested by certificate: %s"
-msgstr ""
+msgstr "modello di convalida richiesto dal certificato: %s"
msgid "chain"
-msgstr ""
+msgstr "catena"
-#, fuzzy
msgid "shell"
-msgstr "help"
+msgstr "shell"
-#, fuzzy, c-format
+#, c-format
msgid "critical certificate extension %s is not supported"
-msgstr "la versione %d del protocollo di gpg-agent non è gestita\n"
+msgstr "la versione %s del protocollo di gpg-agent non è gestita"
#, c-format
msgid "issuer certificate is not marked as a CA"
-msgstr ""
+msgstr "certificato dell'autorità emittente non è contrassegnato come CA"
msgid "critical marked policy without configured policies"
-msgstr ""
+msgstr "criteri contrassegnati critici senza criteri configurati"
-#, fuzzy, c-format
+#, c-format
msgid "failed to open '%s': %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "impossibile aprire '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: non-critical certificate policy not allowed"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "Nota: i criteri di certificato non critici non sono consentiti"
-#, fuzzy, c-format
+#, c-format
msgid "certificate policy not allowed"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "criteri certificato non consentiti"
-#, fuzzy, c-format
+#, c-format
msgid "failed to get the fingerprint\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "non è riuscito a ottenere l'impronta digitale\n"
#, c-format
msgid "looking up issuer at external location\n"
-msgstr ""
+msgstr "ricerca dell'emittente in una posizione esterna\n"
#, c-format
msgid "number of issuers matching: %d\n"
-msgstr ""
+msgstr "numero di emittenti corrispondenti: %d\n"
-#, fuzzy, c-format
-#| msgid "%s: can't access: %s\n"
+#, c-format
msgid "can't get authorityInfoAccess: %s\n"
-msgstr "%s: impossibile acedere a: %s\n"
+msgstr "impossibile ottenere authorityInfoAccess: %s\n"
#, c-format
msgid "looking up issuer from the Dirmngr cache\n"
-msgstr ""
+msgstr "ricerca dell'autorità emittente dalla cache di Dirmngr\n"
-#, fuzzy, c-format
+#, c-format
msgid "number of matching certificates: %d\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "numero di certificati corrispondenti: %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "dirmngr cache-only key lookup failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "ricerca chiave solo cache dirmngr non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to allocate keyDB handle\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile allocare l'handle keyDB\n"
-#, fuzzy
msgid "certificate has been revoked"
-msgstr "NOTA: la chiave è stata revocata"
+msgstr "certificato è stato revocato"
msgid "the status of the certificate is unknown"
-msgstr ""
+msgstr "lo stato del certificato è sconosciuto"
#, c-format
msgid "please make sure that the \"dirmngr\" is properly installed\n"
-msgstr ""
+msgstr "assicurarsi che il \"dirmngr\" sia installato correttamente\n"
-#, fuzzy, c-format
+#, c-format
msgid "checking the CRL failed: %s"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "controllo del CRL non riuscito: %s"
#, c-format
msgid "certificate with invalid validity: %s"
-msgstr ""
+msgstr "certificato con validità non valida: %s"
#, c-format
msgid "certificate not yet valid"
-msgstr ""
+msgstr "certificato non ancora valido"
-#, fuzzy
msgid "root certificate not yet valid"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "certificato radice non ancora valido"
msgid "intermediate certificate not yet valid"
-msgstr ""
+msgstr "certificato intermedio non ancora valido"
-#, fuzzy, c-format
+#, c-format
msgid "certificate has expired"
-msgstr "Questa chiave è scaduta!"
+msgstr "certificato è scaduto"
-#, fuzzy
msgid "root certificate has expired"
-msgstr "Questa chiave è scaduta!"
+msgstr "certificato radice scaduto"
-#, fuzzy
msgid "intermediate certificate has expired"
-msgstr "Questa chiave è scaduta!"
+msgstr "certificato intermedio scaduto"
#, c-format
msgid "required certificate attributes missing: %s%s%s"
-msgstr ""
+msgstr "attributi obbligatori del certificato mancanti: %s%s%s"
-#, fuzzy
msgid "certificate with invalid validity"
-msgstr "Questa chiave è scaduta!"
+msgstr "certificato con validità non valida"
msgid "signature not created during lifetime of certificate"
-msgstr ""
+msgstr "firma non creata durante la durata del certificato"
msgid "certificate not created during lifetime of issuer"
-msgstr ""
+msgstr "certificato non creato durante la durata dell'emittente"
msgid "intermediate certificate not created during lifetime of issuer"
msgstr ""
+"certificato intermedio non creato durante la durata dell'autorità emittente"
-#, fuzzy, c-format
+#, c-format
msgid " ( signature created at "
-msgstr " nuove firme: %lu\n"
+msgstr " ( firma creata alle "
-#, fuzzy, c-format
+#, c-format
msgid " (certificate created at "
-msgstr "Certificato di revoca creato.\n"
+msgstr " (certificato creato alle "
-#, fuzzy, c-format
+#, c-format
msgid " (certificate valid from "
-msgstr "certificato danneggiato"
+msgstr " (certificato valido da "
#, c-format
msgid " ( issuer valid from "
-msgstr ""
+msgstr " ( emittente valido da "
-#, fuzzy, c-format
+#, c-format
msgid "fingerprint=%s\n"
-msgstr "mostra le impronte digitali"
+msgstr "impronta digitale=%s\n"
#, c-format
msgid "root certificate has now been marked as trusted\n"
-msgstr ""
+msgstr "certificato radice è stato contrassegnato come attendibile\n"
#, c-format
msgid "interactive marking as trusted not enabled in gpg-agent\n"
-msgstr ""
+msgstr "contrassegno interattivo come attendibile non abilitato in gpg-agent\n"
#, c-format
msgid "interactive marking as trusted disabled for this session\n"
msgstr ""
+"contrassegno interattivo come attendibile disabilitato per questa sessione\n"
msgid "WARNING: creation time of signature not known - assuming current time"
msgstr ""
+"AVVISO: ora di creazione della firma non nota - presupponendo l'ora corrente"
-#, fuzzy
msgid "no issuer found in certificate"
-msgstr "genera un certificato di revoca"
+msgstr "nessuna autorità emittente trovata nel certificato"
msgid "self-signed certificate has a BAD signature"
-msgstr ""
+msgstr "certificato autofirmato ha una firma BAD"
#, c-format
msgid "root certificate is not marked trusted"
-msgstr ""
+msgstr "certificato radice non contrassegnato come attendibile"
-#, fuzzy, c-format
+#, c-format
msgid "checking the trust list failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "controllo dell'elenco di attendibilità non riuscito: %s\n"
#, c-format
msgid "certificate chain too long\n"
-msgstr ""
+msgstr "catena di certificati troppo lunga\n"
#, c-format
msgid "issuer certificate not found"
-msgstr ""
+msgstr "certificato dell'autorità emittente non trovato"
-#, fuzzy, c-format
+#, c-format
msgid "certificate has a BAD signature"
-msgstr "verifica una firma"
+msgstr "certificato ha una firma BAD"
msgid "found another possible matching CA certificate - trying again"
-msgstr ""
+msgstr "trovato un altro possibile certificato CA corrispondente - riprovare"
#, c-format
msgid "certificate chain longer than allowed by CA (%d)"
-msgstr ""
+msgstr "catena di certificati più lunga di quella consentita dalla CA (%d)"
-#, fuzzy, c-format
+#, c-format
msgid "certificate is good\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "certificato è buono\n"
-#, fuzzy, c-format
+#, c-format
msgid "intermediate certificate is good\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "certificato intermedio è buono\n"
-#, fuzzy, c-format
+#, c-format
msgid "root certificate is good\n"
-msgstr "certificato danneggiato"
+msgstr "certificato radice è buono\n"
msgid "switching to chain model"
-msgstr ""
+msgstr "passaggio al modello a catena"
#, c-format
msgid "validation model used: %s"
-msgstr ""
+msgstr "modello di convalida utilizzato: %s"
#, c-format
msgid "a %u bit hash is not valid for a %u bit %s key\n"
-msgstr ""
+msgstr "un hash di bit %u non è valido per una chiave %u bit %s\n"
#, c-format
msgid "(this is the MD2 algorithm)\n"
-msgstr ""
+msgstr "(questo è l'algoritmo MD2)\n"
-#, fuzzy
msgid "none"
-msgstr "no"
+msgstr "nessuno"
-#, fuzzy
msgid "[Error - invalid encoding]"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "[Errore - codifica non valida]"
msgid "[Error - out of core]"
-msgstr ""
+msgstr "[Errore - fuori dal nucleo]"
msgid "[Error - No name]"
-msgstr ""
+msgstr "[Errore - Nessun nome]"
-#, fuzzy
msgid "[Error - invalid DN]"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "[Errore - DN non valido]"
-#, fuzzy, c-format
+#, c-format
msgid ""
"Please enter the passphrase to unlock the secret key for the X.509 "
"certificate:\n"
@@ -7076,312 +6848,313 @@ msgid ""
"S/N %s, ID 0x%08lX,\n"
"created %s, expires %s.\n"
msgstr ""
-"Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n"
-"\"%.*s\"\n"
-"%u-bit %s key, ID %08lX, created %s%s\n"
+"Immettere la passphrase per sbloccare la chiave segreta per il certificato "
+"X.509:\n"
+"\"%s\"\n"
+"S/N %s, ID 0x%08lX,\n"
+"creato %s, scade %s.\n"
#, c-format
msgid "no key usage specified - assuming all usages\n"
msgstr ""
+"nessun utilizzo chiave specificato - supponendo che tutti gli utilizzi\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting key usage information: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr ""
+"errore durante il recupero delle informazioni sull'utilizzo della chiave: "
+"%s\n"
#, c-format
msgid "certificate should not have been used for certification\n"
msgstr ""
+"certificato non avrebbe dovuto essere utilizzato per la certificazione\n"
#, c-format
msgid "certificate should not have been used for OCSP response signing\n"
msgstr ""
+"certificato non deve essere stato utilizzato per la firma della risposta "
+"OCSP\n"
#, c-format
msgid "certificate should not have been used for encryption\n"
-msgstr ""
+msgstr "certificato non avrebbe dovuto essere utilizzato per la crittografia\n"
#, c-format
msgid "certificate should not have been used for signing\n"
-msgstr ""
+msgstr "certificato non avrebbe dovuto essere utilizzato per la firma\n"
#, c-format
msgid "certificate is not usable for encryption\n"
-msgstr ""
+msgstr "certificato non è utilizzabile per la crittografia\n"
#, c-format
msgid "certificate is not usable for signing\n"
-msgstr ""
+msgstr "certificato non è utilizzabile per la firma\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid algorithm\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: algoritmo non valido\n"
#, c-format
msgid "line %d: invalid key length %u (valid are %d to %d)\n"
-msgstr ""
+msgstr "riga %d: lunghezza chiave non valida %u (valida da %d a %d)\n"
#, c-format
msgid "line %d: no subject name given\n"
-msgstr ""
+msgstr "riga %d: nessun nome soggetto specificato\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid subject name label '%.*s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr ""
+"riga %d: etichetta del nome soggetto non valida '%.*s'\n"
+"\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid subject name '%s' at pos %d\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: nome soggetto '%s' non valido in pos %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: not a valid email address\n"
-msgstr "L'indirizzo di email non è valido\n"
+msgstr "riga %d: indirizzo di posta elettronica non valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid serial number\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: numero di serie non valido\n"
#, c-format
msgid "line %d: invalid issuer name label '%.*s'\n"
msgstr ""
+"riga %d: etichetta del nome dell'autorità emittente non valida '%.*s'\n"
#, c-format
msgid "line %d: invalid issuer name '%s' at pos %d\n"
-msgstr ""
+msgstr "riga %d: nome autorità emittente '%s' non valido in pos %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid date given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: data specificata non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: error getting signing key by keygrip '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr ""
+"riga %d: errore durante l'osando di firmare la chiave da keygrip '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid hash algorithm given\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: algoritmo hash non valido specificato\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid authority-key-id\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: authority-key-id non valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid subject-key-id\n"
-msgstr "chiave %08lX: legame con la subchiave non valido:\n"
+msgstr "riga %d: id-chiave-soggetto non valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: invalid extension syntax\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "riga %d: sintassi di estensione non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: error reading key '%s' from card: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr ""
+"riga %d: errore durante la lettura della chiave '%s' dalla scheda: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: error getting key by keygrip '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr ""
+"riga %d: errore durante il recupero della chiave da parte della chiave '%s': "
+"%s\n"
-#, fuzzy, c-format
+#, c-format
msgid "line %d: key generation failed: %s <%s>\n"
-msgstr "Generazione della chiave fallita: %s\n"
+msgstr "riga %d: generazione chiave non riuscita: %s <%s>\n"
msgid ""
"To complete this certificate request please enter the passphrase for the key "
"you just created once more.\n"
msgstr ""
+"Per completare questa richiesta di certificato, inserire la passphrase per "
+"la chiave appena creata ancora una volta.\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) Existing key\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) Chiave esistente\n"
#, c-format
msgid " (%d) Existing key from card\n"
-msgstr ""
+msgstr " (%d) Chiave esistente dalla scheda\n"
#, c-format
msgid "Possible actions for a %s key:\n"
-msgstr ""
+msgstr "Azioni possibili per una chiave %s: \n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) sign, encrypt\n"
-msgstr " (%d) RSA (firma e cifra)\n"
+msgstr " (%d) segno, cifra\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) sign\n"
-msgstr " (%d) DSA (firma solo)\n"
+msgstr " (%d) segno\n"
-#, fuzzy, c-format
+#, c-format
msgid " (%d) encrypt\n"
-msgstr " (%d) RSA (cifra solo)\n"
+msgstr " (%d) crittografa\n"
msgid "Enter the X.509 subject name: "
-msgstr ""
+msgstr "Immettere il nome soggetto X.509: "
-#, fuzzy
msgid "No subject name given\n"
-msgstr "(Non è stata data una descrizione)\n"
+msgstr "Nessun nome soggetto dato\n"
-#, fuzzy, c-format
+#, c-format
msgid "Invalid subject name label '%.*s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "Etichetta del nome del soggetto non valida '%.*s'.\n"
#. TRANSLATORS: The 22 in the second string is the
#. length of the first string up to the "%s". Please
#. adjust it do the length of your translation. The
#. second string is merely passed to atoi so you can
#. drop everything after the number.
-#, fuzzy, c-format
+#, c-format
msgid "Invalid subject name '%s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "Nome soggetto '%s' non valido\n"
msgid "22 translator: see certreg-ui.c:gpgsm_gencertreq_tty"
-msgstr ""
+msgstr "22 traduttore: vedere certreg-ui.c:gpgsm_gencertreq_tty"
-#, fuzzy
msgid "Enter email addresses"
-msgstr "Indirizzo di Email: "
+msgstr "Immettere gli indirizzi di posta elettronica"
-#, fuzzy
msgid " (end with an empty line):\n"
-msgstr ""
-"\n"
-"Inserisci l'user ID. Termina con una riga vuota: "
+msgstr " (terminare con una riga vuota):\n"
-#, fuzzy
msgid "Enter DNS names"
-msgstr "Inserire il nuovo nome del file"
+msgstr "Immettere i nomi DNS"
-#, fuzzy
msgid " (optional; end with an empty line):\n"
-msgstr "Inserisci una descrizione opzionale; terminala con una riga vuota:\n"
+msgstr " (opzionale; terminare con una riga vuota):\n"
msgid "Enter URIs"
-msgstr ""
+msgstr "Immettere gli URI"
-#, fuzzy
msgid "Create self-signed certificate? (y/N) "
-msgstr "Creare un certificato di revoca per questa chiave? "
+msgstr "Creare un certificato autofirmato? (y/N) "
msgid "These parameters are used:\n"
-msgstr ""
+msgstr "Vengono utilizzati i seguenti parametri:\n"
msgid "Now creating self-signed certificate. "
-msgstr ""
+msgstr "Creazione di un certificato autofirmato. "
-#, fuzzy
-#| msgid "Revocation certificate created.\n"
msgid "Now creating certificate request. "
-msgstr "Certificato di revoca creato.\n"
+msgstr "Creazione della richiesta di certificato. "
msgid "This may take a while ...\n"
-msgstr ""
+msgstr "Questo potrebbe richiedere un po' ...\n"
msgid "Ready.\n"
-msgstr ""
+msgstr "Pronto.\n"
msgid "Ready. You should now send this request to your CA.\n"
-msgstr ""
+msgstr "Pronto. È ora necessario inviare questa richiesta alla CA.\n"
#, c-format
msgid "resource problem: out of core\n"
-msgstr ""
+msgstr "problema delle risorse: fuori dal nucleo\n"
#, c-format
msgid "(this is the RC2 algorithm)\n"
-msgstr ""
+msgstr "(questo è l'algoritmo RC2)\n"
#, c-format
msgid "(this does not seem to be an encrypted message)\n"
-msgstr ""
+msgstr "(questo non sembra essere un messaggio crittografato)\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate '%s' not found: %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "certificato '%s' non trovato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error locking keybox: %s\n"
-msgstr "errore leggendo il keyblock: %s\n"
+msgstr "errore durante il blocco della keybox: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "duplicated certificate '%s' deleted\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "certificato duplicato '%s' eliminato\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate '%s' deleted\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "certificato '%s' eliminato\n"
-#, fuzzy, c-format
+#, c-format
msgid "deleting certificate \"%s\" failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "eliminazione del certificato \"%s\" non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no valid recipients given\n"
-msgstr "(Non è stata data una descrizione)\n"
+msgstr "nessun destinatario valido dato\n"
-#, fuzzy
msgid "list external keys"
-msgstr "elenca le chiavi segrete"
+msgstr "elencare le chiavi esterne"
-#, fuzzy
msgid "list certificate chain"
-msgstr "certificato danneggiato"
+msgstr "catena di certificati valida"
-#, fuzzy
msgid "import certificates"
-msgstr "certificato danneggiato"
+msgstr "importa certificati"
-#, fuzzy
msgid "export certificates"
-msgstr "certificato danneggiato"
+msgstr "esporta certificati"
msgid "register a smartcard"
-msgstr ""
+msgstr "registrare una smart card"
msgid "pass a command to the dirmngr"
-msgstr ""
+msgstr "passare un comando al dirmngr"
msgid "invoke gpg-protect-tool"
-msgstr ""
+msgstr "richiamare gpg-protect-tool"
-#, fuzzy
msgid "create base-64 encoded output"
-msgstr "crea un output ascii con armatura"
+msgstr "creare output codificato in base 64"
msgid "assume input is in PEM format"
-msgstr ""
+msgstr "presupporre che l'input sia in formato PEM"
msgid "assume input is in base-64 format"
-msgstr ""
+msgstr "presupporre che l'input sia in formato base 64"
msgid "assume input is in binary format"
-msgstr ""
+msgstr "presupporre che l'input sia in formato binario"
msgid "never consult a CRL"
-msgstr ""
+msgstr "non consultare mai una CRL"
msgid "check validity using OCSP"
-msgstr ""
+msgstr "verificare la validità utilizzando OCSP"
msgid "|N|number of certificates to include"
-msgstr ""
+msgstr "|N|numero di certificati da includere"
msgid "|FILE|take policy information from FILE"
-msgstr ""
+msgstr "|FILE|prendere le informazioni sui criteri da FILE"
msgid "do not check certificate policies"
-msgstr ""
+msgstr "non controllare le politiche dei certificati"
msgid "fetch missing issuer certificates"
-msgstr ""
+msgstr "recupera i certificati degli emittenti mancanti"
msgid "don't use the terminal at all"
msgstr "non usa per niente il terminale"
msgid "|FILE|write a server mode log to FILE"
-msgstr ""
+msgstr "|FILE|scrittura di un registro in modalità server in FILE"
-#, fuzzy
msgid "|FILE|write an audit log to FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|scrittura di un registro di controllo in FILE"
msgid "batch mode: never ask"
msgstr "modo batch: non fa domande"
@@ -7392,133 +7165,128 @@ msgstr "risponde \"sì\" a quasi tutte le domande"
msgid "assume no on most questions"
msgstr "risponde \"no\" a quasi tutte le domande"
-#, fuzzy
msgid "|FILE|add keyring to the list of keyrings"
-msgstr "aggiungi questo portachiavi alla lista"
+msgstr "|FILE|aggiungere il tasto all'elenco dei keyring"
-#, fuzzy
msgid "|USER-ID|use USER-ID as default secret key"
-msgstr "|NOME|usa NOME come chiave segreta predefinita"
+msgstr "|USER-ID|utilizzare USER-ID come chiave segreta predefinita"
-#, fuzzy
msgid "|SPEC|use this keyserver to lookup keys"
-msgstr "|HOST|cerca le chiavi in questo keyserver"
+msgstr "|SPEC|utilizzare questo keyserver per cercare le chiavi"
msgid "|NAME|use cipher algorithm NAME"
-msgstr "|NOME|usa l'algoritmo di cifratura NOME"
+msgstr "|NAME|usa l'algoritmo di cifratura NAME"
msgid "|NAME|use message digest algorithm NAME"
-msgstr "|NOME|usa l'algoritmo di message digest NOME"
+msgstr "|NAME|usa l'algoritmo di message digest NAME"
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
msgid "Usage: @GPGSM@ [options] [files] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @GPGSM@ [opzioni] [file] (-h per assistenza)"
-#, fuzzy
msgid ""
"Syntax: @GPGSM@ [options] [files]\n"
"Sign, check, encrypt or decrypt using the S/MIME protocol\n"
"Default operation depends on the input data\n"
msgstr ""
-"Sintassi: gpg [opzioni] [files]\n"
-"firma, controlla, cifra o decifra\n"
-"l'operazione predefinita dipende dai dati di input\n"
+"Sintassi: @GPGSM@ [opzioni] [files]\n"
+"Firmare, controllare, crittografare o decrittografare utilizzando il "
+"protocollo S/MIME\n"
+"Il funzionamento predefinito dipende dai dati di input\n"
-#, fuzzy, c-format
+#, c-format
msgid "Note: won't be able to encrypt to '%s': %s\n"
-msgstr "impossibile connettersi a `%s': %s\n"
+msgstr "Nota: impossibile eseguire la crittografia in '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown validation model '%s'\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
+msgstr "modello di convalida sconosciuto '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: no hostname given\n"
-msgstr "(Non è stata data una descrizione)\n"
+msgstr "%s: %u: nessun nome host specificato\n"
#, c-format
msgid "%s:%u: password given without user\n"
-msgstr ""
+msgstr "%s:%u: password fornita senza utente\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: skipping this line\n"
-msgstr " s = salta questa chiave\n"
+msgstr "%s:%u: ignorare questa riga\n"
-#, fuzzy, c-format
+#, c-format
msgid "could not parse keyserver\n"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
+msgstr "impossibile analizzare il keyserver\n"
-#, fuzzy, c-format
+#, c-format
msgid "importing common certificates '%s'\n"
-msgstr "scrittura in `%s'\n"
+msgstr "importazione di certificati comuni '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't sign using '%s': %s\n"
-msgstr "impossibile chiudere `%s': %s\n"
+msgstr "impossibile firmare utilizzando '%s': %s\n"
#, c-format
msgid "invalid command (there is no implicit command)\n"
-msgstr ""
+msgstr "comando non valido (non esiste alcun comando implicito)\n"
-#, fuzzy, c-format
+#, c-format
msgid "total number processed: %lu\n"
-msgstr "Numero totale esaminato: %lu\n"
+msgstr "numero totale elaborato: %lu\n"
-#, fuzzy, c-format
+#, c-format
msgid "error storing certificate\n"
-msgstr "genera un certificato di revoca"
+msgstr "errore durante l'archiviazione del certificato\n"
#, c-format
msgid "basic certificate checks failed - not imported\n"
-msgstr ""
+msgstr "controlli certificati di base non riusciti - non importati\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting stored flags: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero dei flag memorizzati: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error importing certificate: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante l'importazione del certificato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading input: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura dell'input: %s\n"
#, c-format
msgid "problem looking for existing certificate: %s\n"
-msgstr ""
+msgstr "problema durante la ricerca del certificato esistente: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error finding writable keyDB: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la ricerca della chiave scrivibile keyDB: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error storing certificate: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante l'archiviazione del certificato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem re-searching certificate: %s\n"
-msgstr "rev? problema controllando la revoca: %s\n"
+msgstr "problema durante la ri-ricerca del certificato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error storing flags: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'archiviazione dei flag: %s\n"
msgid "Error - "
-msgstr ""
+msgstr "Errore - "
#, c-format
msgid "GPG_TTY has not been set - using maybe bogus default\n"
-msgstr ""
+msgstr "GPG_TTY non è stato impostato - utilizzando forse falso default\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid formatted fingerprint in '%s', line %d\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "impronta digitale formattata non valida in '%s', riga %d\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid country code in '%s', line %d\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "codice paese non valido in '%s', riga %d\n"
#, c-format
msgid ""
@@ -7529,12 +7297,20 @@ msgid ""
"\n"
"%s%sAre you really sure that you want to do this?"
msgstr ""
+"Si sta per creare una firma utilizzando il certificato:\n"
+"\"%s\"\n"
+"In questo modo verrà creata una firma qualificata per legge equiparata a una "
+"firma scritta a mano.\n"
+"\n"
+"%s%sSono davvero sicuri di voler eseguire questa operazione?"
#, c-format
msgid ""
"Note, that this software is not officially approved to create or verify such "
"signatures.\n"
msgstr ""
+"Si noti che questo software non è ufficialmente approvato per creare o "
+"verificare tali firme.\n"
#, c-format
msgid ""
@@ -7542,607 +7318,621 @@ msgid ""
"\"%s\"\n"
"Note, that this certificate will NOT create a qualified signature!"
msgstr ""
+"Si sta per creare una firma utilizzando il certificato:\n"
+"\"%s\"\n"
+"Si noti che questo certificato NON creerà una firma qualificata!"
-#, fuzzy, c-format
+#, c-format
msgid "hash algorithm %d (%s) for signer %d not supported; using %s\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr ""
+"algoritmo hash %d (%s) per firmatario %d non supportato; utilizzando %s\n"
#, c-format
msgid "hash algorithm used for signer %d: %s (%s)\n"
-msgstr ""
+msgstr "algoritmo hash utilizzato per firmatario %d: %s (%s)\n"
-#, fuzzy, c-format
+#, c-format
msgid "checking for qualified certificate failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "controllo del certificato qualificato non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "Signature made "
-msgstr "Firma scaduta il %s\n"
+msgstr "Firma fatta "
#, c-format
msgid "[date not given]"
-msgstr ""
+msgstr "[data non specificata]"
-#, fuzzy, c-format
+#, c-format
msgid "algorithm:"
-msgstr "armatura: %s\n"
+msgstr "algoritmo:"
#, c-format
msgid ""
"invalid signature: message digest attribute does not match computed one\n"
msgstr ""
+"firma non valida: l'attributo digest del messaggio non corrisponde a uno "
+"calcolato\n"
-#, fuzzy, c-format
+#, c-format
msgid "Good signature from"
-msgstr "Firma valida da \""
+msgstr "Buona firma da"
-#, fuzzy, c-format
+#, c-format
msgid " aka"
-msgstr " alias \""
+msgstr " aka"
-#, fuzzy, c-format
+#, c-format
msgid "This is a qualified signature\n"
-msgstr ""
-"\n"
-"Questa sarà una autofirma.\n"
+msgstr "Questa è una firma qualificata\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't initialize certificate cache lock: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "impossibile inizializzare il blocco della cache dei certificati: %s\n"
#, c-format
msgid "can't acquire read lock on the certificate cache: %s\n"
msgstr ""
+"impossibile acquisire il blocco di lettura sulla cache dei certificati: %s\n"
#, c-format
msgid "can't acquire write lock on the certificate cache: %s\n"
msgstr ""
+"impossibile acquisire il blocco in scrittura sulla cache dei certificati: "
+"%s\n"
#, c-format
msgid "can't release lock on the certificate cache: %s\n"
-msgstr ""
+msgstr "impossibile rilasciare il blocco sulla cache dei certificati: %s\n"
#, c-format
msgid "dropping %u certificates from the cache\n"
-msgstr ""
+msgstr "eliminazione di %u certificati dalla cache\n"
-#, fuzzy, c-format
-#| msgid "can't create `%s': %s\n"
+#, c-format
msgid "can't parse certificate '%s': %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile analizzare il certificato '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate '%s' already cached\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "certificato '%s' già memorizzato nella cache\n"
-#, fuzzy, c-format
+#, c-format
msgid "trusted certificate '%s' loaded\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "certificato attendibile '%s' caricato\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate '%s' loaded\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "certificato '%s' caricato\n"
-#, fuzzy, c-format
+#, c-format
msgid " SHA1 fingerprint = %s\n"
-msgstr "mostra le impronte digitali"
+msgstr " impronta digitale SHA1 - %s\n"
msgid " issuer ="
-msgstr ""
+msgstr " emittente ="
msgid " subject ="
-msgstr ""
+msgstr " oggetto ="
-#, fuzzy, c-format
+#, c-format
msgid "error loading certificate '%s': %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il caricamento del certificato '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "permanently loaded certificates: %u\n"
-msgstr "certificato danneggiato"
+msgstr "certificati caricati in modo permanente: %u\n"
-#, fuzzy, c-format
+#, c-format
msgid " runtime cached certificates: %u\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr " certificati runtime memorizzati nella cache: %u\n"
-#, fuzzy, c-format
+#, c-format
msgid " trusted certificates: %u (%u,%u,%u,%u)\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr " certificati attendibili: %u (%u,%u,%u,%u)\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate already cached\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "certificato già memorizzato nella cache\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate cached\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "certificato memorizzato nella cache\n"
-#, fuzzy, c-format
+#, c-format
msgid "error caching certificate: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la memorizzazione nella cache del certificato: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid SHA1 fingerprint string '%s'\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "stringa di impronta digitale SHA1 non valida '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error fetching certificate by S/N: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero del certificato da parte di S/N: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error fetching certificate by subject: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero del certificato per oggetto: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no issuer found in certificate\n"
-msgstr "genera un certificato di revoca"
+msgstr "nessuna autorità emittente trovata nel certificato\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting authorityKeyIdentifier: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero di authorityKeyIdentifier: %s\n"
-#, fuzzy, c-format
-#| msgid "can't create directory `%s': %s\n"
+#, c-format
msgid "creating directory '%s'\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "creazione della directory '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating directory '%s': %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "errore durante la creazione della directory '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "ignoring database dir '%s'\n"
-msgstr "errore nella riga della coda\n"
+msgstr "ignorare il dir del database '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading directory '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura della directory '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "removing cache file '%s'\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "rimozione del file di cache '%s'\n"
-#, fuzzy, c-format
-#| msgid "enarmoring failed: %s\n"
+#, c-format
msgid "not removing file '%s'\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "non rimuove il file '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing cache file: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la chiusura del file della cache: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to open cache dir file '%s': %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "impossibile aprire il file dir della cache '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating new cache dir file '%s': %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr ""
+"errore durante la creazione del nuovo file di dir della cache '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
msgid "error writing new cache dir file '%s': %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr ""
+"errore durante la scrittura del nuovo file di dir della cache '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing new cache dir file '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr ""
+"errore durante la chiusura del nuovo file di dir della cache '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "new configuration file `%s' created\n"
+#, c-format
msgid "new cache dir file '%s' created\n"
-msgstr "creato un nuovo file di configurazione `%s'\n"
+msgstr "nuovo file dir della cache '%s' creato\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to re-open cache dir file '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "impossibile riass desiderare il file di dir della cache '%s': %s\n"
#, c-format
msgid "first record of '%s' is not the version\n"
-msgstr ""
+msgstr "il primo record di '%s' non è la versione\n"
#, c-format
msgid "old version of cache directory - cleaning up\n"
-msgstr ""
+msgstr "vecchia versione della directory della cache - pulizia\n"
#, c-format
msgid "old version of cache directory - giving up\n"
-msgstr ""
+msgstr "vecchia versione della directory della cache - rinuncia\n"
#, c-format
msgid "extra field detected in crl record of '%s' line %u\n"
-msgstr ""
+msgstr "campo aggiuntivo rilevato nel record crl '%s' della riga %u\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid line detected in '%s' line %u\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "riga non valida rilevata nella riga '%s' %u\n"
-#, fuzzy, c-format
+#, c-format
msgid "duplicate entry detected in '%s' line %u\n"
-msgstr "Certificato di revoca creato.\n"
+msgstr "voce duplicata rilevata '%s' nella riga %u\n"
#, c-format
msgid "unsupported record type in '%s' line %u skipped\n"
-msgstr ""
+msgstr "tipo di record non supportato nella riga '%s' %u ignorato\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid issuer hash in '%s' line %u\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "hash dell'autorità emittente non valido '%s' nella riga %u\n"
-#, fuzzy, c-format
+#, c-format
msgid "no issuer DN in '%s' line %u\n"
-msgstr "errore di lettura: %s\n"
+msgstr "nessun DN emittente '%s' nella riga %u\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid timestamp in '%s' line %u\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "timestamp non valido '%s' nella riga %u\n"
-#, fuzzy, c-format
-#| msgid "WARNING: invalid size of random_seed file - not used\n"
+#, c-format
msgid "WARNING: invalid cache file hash in '%s' line %u\n"
-msgstr ""
-"ATTENZIONE: le dimensioni del file random_seed non sono valide - non usato\n"
+msgstr "AVVISO: hash del file di cache non valido %s' nella riga %u\n"
#, c-format
msgid "detected errors in cache dir file\n"
-msgstr ""
+msgstr "errori rilevati nel file dir della cache\n"
#, c-format
msgid "please check the reason and manually delete that file\n"
-msgstr ""
+msgstr "si prega di controllare il motivo ed eliminare manualmente quel file\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to create temporary cache dir file '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "impossibile creare il file dir della cache temporanea '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la chiusura di '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "error reading `%s': %s\n"
+#, c-format
msgid "error renaming '%s' to '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la ridenominazione di '%s' in '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't hash '%s': %s\n"
-msgstr "impossibile chiudere `%s': %s\n"
+msgstr "impossibile eseguire l'hashing '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error setting up MD5 hash context: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'impostazione del contesto hash MD5: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error hashing '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'hashing di '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "invalid formatted checksum for '%s'\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "checksum formattato non valido per '%s'\n"
#, c-format
msgid "too many open cache files; can't open anymore\n"
-msgstr ""
+msgstr "troppi file della cache aperti; non può più aprire\n"
-#, fuzzy, c-format
+#, c-format
msgid "opening cache file '%s'\n"
-msgstr "firma fallita: %s\n"
+msgstr "apertura del file di cache '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error opening cache file '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'apertura del file di cache '%s': %s\n"
#, c-format
msgid "error initializing cache file '%s' for reading: %s\n"
msgstr ""
+"errore durante l'inizializzazione del file di cache '%s' per la lettura: %s\n"
#, c-format
msgid "calling unlock_db_file on a closed file\n"
-msgstr ""
+msgstr "chiamata unlock_db_file su un file chiuso\n"
#, c-format
msgid "calling unlock_db_file on an unlocked file\n"
-msgstr ""
+msgstr "chiamata unlock_db_file su un file sbloccato\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to create a new cache object: %s\n"
-msgstr "%s: creazione della tabella hash fallita: %s\n"
+msgstr "impossibile creare un nuovo oggetto cache: %s\n"
-#, fuzzy, c-format
-#| msgid "No help available for `%s'"
+#, c-format
msgid "no CRL available for issuer id %s\n"
-msgstr "Non è disponibile un aiuto per `%s'"
+msgstr "nessun CRL disponibile per l'ID emittente %s\n"
#, c-format
msgid "cached CRL for issuer id %s too old; update required\n"
msgstr ""
+"CRL memorizzato nella cache per l'ID emittente %s troppo vecchio; "
+"aggiornamento richiesto\n"
#, c-format
msgid ""
"force-crl-refresh active and %d minutes passed for issuer id %s; update "
"required\n"
msgstr ""
+"force-crl-refresh attivo e %d minuti per l'ID autorità emittente %s; "
+"aggiornamento richiesto\n"
#, c-format
msgid "force-crl-refresh active for issuer id %s; update required\n"
msgstr ""
+"force-crl-refresh attivo per l'ID autorità emittente %s; aggiornamento "
+"richiesto\n"
#, c-format
msgid "available CRL for issuer ID %s can't be used\n"
-msgstr ""
+msgstr "impossibile utilizzare il CRL disponibile per l'ID emittente %s\n"
#, c-format
msgid "cached CRL for issuer id %s tampered; we need to update\n"
msgstr ""
+"CRL memorizzato nella cache per l'ID emittente %s manomesso; abbiamo bisogno "
+"di aggiornare\n"
#, c-format
msgid "WARNING: invalid cache record length for S/N "
-msgstr ""
+msgstr "AVVISO: lunghezza del record della cache non valida per S/N "
-#, fuzzy, c-format
+#, c-format
msgid "problem reading cache record for S/N %s: %s\n"
-msgstr "errore creando il portachiavi `%s': %s\n"
+msgstr "problema durante la lettura del record della cache per S/N %s: %s\n"
#, c-format
msgid "S/N %s is not valid; reason=%02X date=%.15s\n"
-msgstr ""
+msgstr "S/N %s non valido. motivo: %02X data%15s\n"
#, c-format
msgid "S/N %s is valid, it is not listed in the CRL\n"
-msgstr ""
+msgstr "S/N %s è valido, non è elencato nel CRL\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting data from cache file: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero dei dati dal file di cache: %s\n"
-#, fuzzy, c-format
-#| msgid "invalid response from agent\n"
+#, c-format
msgid "got an invalid S-expression from libksba\n"
-msgstr "risposta non valida dall'agent\n"
+msgstr "ha ottenuto un'espressione S non valida da libksba\n"
-#, fuzzy, c-format
+#, c-format
msgid "converting S-expression failed: %s\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "conversione dell'espressione S non riuscita: %s\n"
-#, fuzzy, c-format
-#| msgid "invalid hash algorithm `%s'\n"
+#, c-format
msgid "unknown hash algorithm '%s'\n"
-msgstr "algoritmo di hash non valido `%s'\n"
+msgstr "algoritmo hash sconosciuto '%s'\n"
#, c-format
msgid "gcry_md_open for algorithm %d failed: %s\n"
-msgstr ""
+msgstr "gcry_md_open per l'algoritmo %d non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "creating S-expression failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "creazione dell'espressione S non riuscita: %s\n"
-#, fuzzy, c-format
-#| msgid "build_packet failed: %s\n"
+#, c-format
msgid "ksba_crl_parse failed: %s\n"
-msgstr "build_packet fallito: %s\n"
+msgstr "ksba_crl_parse non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting update times of CRL: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante l'aggiornamento del CRL: %s\n"
#, c-format
msgid "update times of this CRL: this=%s next=%s\n"
-msgstr ""
+msgstr "orari di aggiornamento di questo CRL: this:%s next-%s\n"
#, c-format
msgid "nextUpdate not given; assuming a validity period of one day\n"
msgstr ""
+"nextUpdate non specificato; assumendo un periodo di validità di un giorno\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting CRL item: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero dell'elemento CRL: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error inserting item into temporary cache file: %s\n"
-msgstr "scrittura in `%s'\n"
+msgstr ""
+"errore durante l'inserimento dell'elemento nel file di cache temporaneo: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no CRL issuer found in CRL: %s\n"
-msgstr "genera un certificato di revoca"
+msgstr "nessuna autorità emittente CRL trovata nel CRL: %s\n"
#, c-format
msgid "locating CRL issuer certificate by authorityKeyIdentifier\n"
msgstr ""
+"individuazione del certificato dell'autorità emittente CRL da parte di "
+"authorityKeyIdentifier\n"
-#, fuzzy, c-format
-#| msgid "signature verification suppressed\n"
+#, c-format
msgid "CRL signature verification failed: %s\n"
-msgstr "verifica della firma soppressa\n"
+msgstr "Verifica della firma CRL non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error checking validity of CRL issuer certificate: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr ""
+"errore durante il controllo della validità del certificato dell'autorità "
+"emittente CRL: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "ksba_crl_new failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "ksba_crl_new non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "ksba_crl_set_reader failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "ksba_crl_set_reader non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "removed stale temporary cache file '%s'\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "rimosso il file di cache temporanea non più obsoleto '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem removing stale temporary cache file '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr ""
+"problema durante la rimozione del file di cache temporanea non più obsoleto "
+"'%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error creating temporary cache file '%s': %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la creazione del file di cache temporanea '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "update secret failed: %s\n"
+#, c-format
msgid "crl_parse_insert failed: %s\n"
-msgstr "aggiornamento della chiave segreta fallito: %s\n"
+msgstr "crl_parse_insert non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error finishing temporary cache file '%s': %s\n"
-msgstr "scrittura in `%s'\n"
+msgstr ""
+"errore durante il completamento del file di cache temporanea '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing temporary cache file '%s': %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la chiusura del file della cache temporanea '%s': %s\n"
#, c-format
msgid "WARNING: new CRL still too old; it expired on %s - loading anyway\n"
msgstr ""
+"AVVISO: nuovo CRL ancora troppo vecchio; è scaduto su %s - il caricamento è "
+"stato completato comunque\n"
#, c-format
msgid "new CRL still too old; it expired on %s\n"
-msgstr ""
+msgstr "nuovo CRL ancora troppo vecchio; è scaduto su %s\n"
#, c-format
msgid "unknown critical CRL extension %s\n"
-msgstr ""
+msgstr "estensione CRL critica sconosciuta %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading CRL extensions: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura delle estensioni CRL: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "creating cache file '%s'\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "creazione del file di cache '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem renaming '%s' to '%s': %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "problema durante la ridenominazione di '%s' in '%s': %s\n"
#, c-format
msgid ""
"updating the DIR file failed - cache entry will get lost with the next "
"program start\n"
msgstr ""
+"aggiornamento del file DIR non riuscito - la voce della cache andrà persa "
+"con il successivo avvio del programma\n"
#, c-format
msgid "Begin CRL dump (retrieved via %s)\n"
-msgstr ""
+msgstr "Inizio dump CRL (recuperato tramite %s)\n"
msgid ""
" ERROR: The CRL will not be used because it was still too old after an "
"update!\n"
msgstr ""
+" ERRORE: il CRL non verrà utilizzato perché era ancora troppo vecchio dopo "
+"un aggiornamento!\n"
msgid ""
" ERROR: The CRL will not be used due to an unknown critical extension!\n"
msgstr ""
+" ERRORE: il CRL non verrà utilizzato a causa di un'estensione critica "
+"sconosciuta!\n"
msgid " ERROR: The CRL will not be used\n"
-msgstr ""
+msgstr " ERRORE: il CRL non verrà utilizzato\n"
msgid " ERROR: This cached CRL may have been tampered with!\n"
msgstr ""
+" ERRORE: questo CRL memorizzato nella cache potrebbe essere stato "
+"manomesso!\n"
-#, fuzzy, c-format
-#| msgid "WARNING: invalid size of random_seed file - not used\n"
+#, c-format
msgid " WARNING: invalid cache record length\n"
-msgstr ""
-"ATTENZIONE: le dimensioni del file random_seed non sono valide - non usato\n"
+msgstr " AVVISO: lunghezza del record della cache non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem reading cache record: %s\n"
-msgstr "%s: errore durante la lettura del record libero: %s\n"
+msgstr "problema durante la lettura del record della cache: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "problem reading cache key: %s\n"
-msgstr "rev? problema controllando la revoca: %s\n"
+msgstr "problema durante la lettura della chiave della cache: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading cache entry from db: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura della voce della cache dal database: %s\n"
msgid "End CRL dump\n"
-msgstr ""
+msgstr "Fine dump CRL\n"
-#, fuzzy, c-format
+#, c-format
msgid "crl_fetch via DP failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "crl_fetch tramite DP non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "crl_cache_insert via DP failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "crl_cache_insert tramite DP non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "crl_cache_insert via issuer failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "crl_cache_insert tramite autorità emittente non riuscita: %s\n"
#, c-format
msgid "reader to file mapping table full - waiting\n"
-msgstr ""
+msgstr "lettore alla tabella di mapping file piena - in attesa\n"
#, c-format
msgid "CRL access not possible due to disabled %s\n"
-msgstr ""
+msgstr "Accesso CRL non possibile a causa della disabilitata di %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error retrieving '%s': %s\n"
-msgstr "errore creando `%s': %s\n"
+msgstr "errore durante il recupero di '%s': %s\n"
-#, fuzzy, c-format
-#| msgid "%s: error writing dir record: %s\n"
+#, c-format
msgid "error initializing reader object: %s\n"
-msgstr "%s: errore durante la scrittura del dir record: %s\n"
+msgstr "errore durante l'inizializzazione dell'oggetto lettore: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "CRL access not possible due to Tor mode\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "Accesso CRL non possibile a causa della modalità Tor\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate search not possible due to disabled %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr ""
+"ricerca del certificato non possibile a causa della disabilitata di %s\n"
msgid "use OCSP instead of CRLs"
-msgstr ""
+msgstr "utilizzare OCSP anziché CRL"
msgid "check whether a dirmngr is running"
-msgstr ""
+msgstr "controllare se un dirmngr è in esecuzione"
-#, fuzzy
msgid "add a certificate to the cache"
-msgstr "Certificato di revoca creato.\n"
+msgstr "aggiungere un certificato alla cache"
-#, fuzzy
msgid "validate a certificate"
-msgstr "certificato danneggiato"
+msgstr "convalidare un certificato"
-#, fuzzy
msgid "lookup a certificate"
-msgstr "certificato danneggiato"
+msgstr "ricerca di un certificato"
-#, fuzzy
msgid "lookup only locally stored certificates"
-msgstr "certificato danneggiato"
+msgstr "ricerca solo di certificati archiviati localmente"
msgid "expect an URL for --lookup"
-msgstr ""
+msgstr "previsto un URL per --lookup"
msgid "load a CRL into the dirmngr"
-msgstr ""
+msgstr "caricare un CRL nel dirmngr"
msgid "special mode for use by Squid"
-msgstr ""
+msgstr "modalità speciale per l'uso da parte di Squid"
-#, fuzzy
msgid "expect certificates in PEM format"
-msgstr "certificato danneggiato"
+msgstr "prevedere certificati in formato PEM"
-#, fuzzy
-#| msgid "Enter the user ID of the designated revoker: "
msgid "force the use of the default OCSP responder"
-msgstr "Inserisci l'user ID del revocatore designato: "
+msgstr "forzare l'uso del risponditore OCSP predefinito"
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
msgid "Usage: dirmngr-client [options] [certfile|pattern] (-h for help)\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr ""
+"Utilizzo: dirmngr-client [opzioni] [certfile-pattern] (-h per assistenza)\n"
msgid ""
"Syntax: dirmngr-client [options] [certfile|pattern]\n"
@@ -8150,993 +7940,954 @@ msgid ""
"The process returns 0 if the certificate is valid, 1 if it is\n"
"not valid and other error codes for general failures\n"
msgstr ""
+"Sintassi: dirmngr-client [opzioni] [certfile-pattern]\n"
+"Testare un certificato X.509 rispetto a un CRL o eseguire un controllo OCSP\n"
+"Il processo restituisce 0 se il certificato è valido, 1 se è\n"
+"non validi e altri codici di errore per gli errori generali\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading certificate from stdin: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante la lettura del certificato da stdin: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading certificate from '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura del certificato da '%s': %s\n"
#, c-format
msgid "certificate too large to make any sense\n"
-msgstr ""
+msgstr "certificato troppo grande per avere un senso\n"
-#, fuzzy, c-format
-#| msgid "can't connect to `%s': %s\n"
+#, c-format
msgid "can't connect to the dirmngr: %s\n"
-msgstr "impossibile connettersi a `%s': %s\n"
+msgstr "impossibile connettersi al dirmngr: %s\n"
-#, fuzzy, c-format
-#| msgid "update failed: %s\n"
+#, c-format
msgid "lookup failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "ricerca non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "loading CRL '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "caricamento CRL '%s' non riuscito: %s\n"
#, c-format
msgid "a dirmngr daemon is up and running\n"
-msgstr ""
+msgstr "un daemon dirmngr è in funzione\n"
-#, fuzzy, c-format
+#, c-format
msgid "validation of certificate failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "convalida del certificato non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate is valid\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "catena di certificati valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate has been revoked\n"
-msgstr "NOTA: la chiave è stata revocata"
+msgstr "certificato è stato revocato\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate check failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "controllo del certificato non riuscito: %s\n"
-#, fuzzy, c-format
-#| msgid "can't stat `%s': %s\n"
+#, c-format
msgid "got status: '%s'\n"
-msgstr "impossibile eseguire stat su `%s': %s\n"
+msgstr "stato ottenuto: '%s'\n"
-#, fuzzy, c-format
-#| msgid "error writing secret keyring `%s': %s\n"
+#, c-format
msgid "error writing base64 encoding: %s\n"
-msgstr "errore scrivendo il portachiavi segreto `%s': %s\n"
+msgstr "errore durante la scrittura della codifica base64: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "unsupported inquiry '%s'\n"
-msgstr ""
-"\n"
-"Algoritmi gestiti:\n"
+msgstr "richiesta '%s' non supportata\n"
#, c-format
msgid "absolute file name expected\n"
-msgstr ""
+msgstr "previsto nome file assoluto\n"
#, c-format
msgid "looking up '%s'\n"
-msgstr ""
+msgstr "ricerca di '%s'\n"
msgid "list the contents of the CRL cache"
-msgstr ""
+msgstr "elencare il contenuto della cache CRL"
-#, fuzzy
msgid "|FILE|load CRL from FILE into cache"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|carica CRL da FILE nella cache"
msgid "|URL|fetch a CRL from URL"
-msgstr ""
+msgstr "|URL|recupero di un CRL dall'URL"
msgid "shutdown the dirmngr"
-msgstr ""
+msgstr "arrestare il dirmngr"
msgid "flush the cache"
-msgstr ""
+msgstr "svuotare la cache"
msgid "|FILE|write server mode logs to FILE"
-msgstr ""
+msgstr "|FILE|scrittura dei registri in modalità server in FILE"
-#, fuzzy
msgid "run without asking a user"
-msgstr "Esco senza salvare? "
+msgstr "eseguire senza chiedere a un utente"
msgid "force loading of outdated CRLs"
-msgstr ""
+msgstr "forzare il caricamento di CRL obsoleti"
msgid "allow sending OCSP requests"
-msgstr ""
+msgstr "consentire l'invio di richieste OCSP"
msgid "allow online software version check"
-msgstr ""
+msgstr "consentire il controllo della versione del software online"
msgid "inhibit the use of HTTP"
-msgstr ""
+msgstr "inibire l'uso di HTTP"
msgid "inhibit the use of LDAP"
-msgstr ""
+msgstr "inibire l'uso di LDAP"
msgid "ignore HTTP CRL distribution points"
-msgstr ""
+msgstr "ignorare i punti di distribuzione CRL HTTP"
msgid "ignore LDAP CRL distribution points"
-msgstr ""
+msgstr "ignorare i punti di distribuzione CRL LDAP"
msgid "ignore certificate contained OCSP service URLs"
-msgstr ""
+msgstr "ignorare gli URL del servizio OCSP contenuti nel certificato"
msgid "|URL|redirect all HTTP requests to URL"
-msgstr ""
+msgstr "|URL|reindirizza tutte le richieste HTTP all'URL"
msgid "|HOST|use HOST for LDAP queries"
-msgstr ""
+msgstr "|HOST|utilizzare HOST per le query LDAP"
msgid "do not use fallback hosts with --ldap-proxy"
-msgstr ""
+msgstr "non utilizzare host di fallback con --ldap-proxy"
-#, fuzzy
msgid "|FILE|read LDAP server list from FILE"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|lettura dell'elenco dei server LDAP da FILE"
msgid "add new servers discovered in CRL distribution points to serverlist"
msgstr ""
+"aggiungere nuovi server individuati nei punti di distribuzione CRL "
+"all'elenco dei server"
msgid "|N|set LDAP timeout to N seconds"
-msgstr ""
+msgstr "|N|imposta il timeout LDAP su N secondi"
-#, fuzzy
msgid "|URL|use OCSP responder at URL"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
+msgstr "|URL|utilizzare risponditore OCSP all'URL"
msgid "|FPR|OCSP response signed by FPR"
-msgstr ""
+msgstr "|FPR|Risposta OCSP firmata da FPR"
msgid "|N|do not return more than N items in one query"
-msgstr ""
+msgstr "|N|Non restituire più di N elementi in una query"
msgid "|FILE|use the CA certificates in FILE for HKP over TLS"
-msgstr ""
+msgstr "|FILE|utilizzare i certificati CA in FILE per HKP su TLS"
msgid "route all network traffic via Tor"
-msgstr ""
+msgstr "instradare tutto il traffico di rete tramite Tor"
-#, fuzzy
-#| msgid ""
-#| "@\n"
-#| "(See the man page for a complete listing of all commands and options)\n"
msgid ""
"@\n"
"(See the \"info\" manual for a complete listing of all commands and "
"options)\n"
msgstr ""
"@\n"
-"(Vedi la man page per una lista completa di tutti i comandi e opzioni)\n"
+"(Vedere il manuale \"info\" per un elenco completo di tutti i comandi e le "
+"opzioni)\n"
-#, fuzzy
msgid "Usage: @DIRMNGR@ [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @DIRMNGR@ [opzioni] (-h per assistenza)"
msgid ""
"Syntax: @DIRMNGR@ [options] [command [args]]\n"
"Keyserver, CRL, and OCSP access for @GNUPG@\n"
msgstr ""
+"Sintassi: @DIRMNGR@ [opzioni] [comando [args]]\n"
+"Accesso keyserver, CRL e OCSP per @GNUPG@\n"
#, c-format
msgid "valid debug levels are: %s\n"
-msgstr ""
+msgstr "i livelli di debug validi sono: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "usage: %s [options] "
-msgstr "uso: gpg [opzioni] "
+msgstr "utilizzo: %s [opzioni] "
-#, fuzzy, c-format
-#| msgid "%s not allowed with %s!\n"
+#, c-format
msgid "colons are not allowed in the socket name\n"
-msgstr "Non è permesso usare %s con %s!\n"
+msgstr "due punti non sono consentiti nel nome del socket\n"
-#, fuzzy, c-format
+#, c-format
msgid "fetching CRL from '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "recupero CRL da '%s' non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "processing CRL from '%s' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "elaborazione CRL da '%s' non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: line too long - skipped\n"
-msgstr "riga troppo lunga\n"
+msgstr "%s:%u: riga troppo lunga - ignorata\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: invalid fingerprint detected\n"
-msgstr "errore: impronta digitale non valida\n"
+msgstr "%s:%u: rilevata impronta digitale non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s:%u: read error: %s\n"
-msgstr "errore di lettura: %s\n"
+msgstr "%s: %u: errore di lettura: %s\n"
#, c-format
msgid "%s:%u: garbage at end of line ignored\n"
-msgstr ""
+msgstr "%s: %u: Garbage alla fine della riga ignorato\n"
#, c-format
msgid "SIGHUP received - re-reading configuration and flushing caches\n"
msgstr ""
+"SIGHUP ricevuto - rilezione delle cache di configurazione e svuotamento\n"
#, c-format
msgid "SIGUSR2 received - no action defined\n"
-msgstr ""
+msgstr "SIGUSR2 ricevuto - nessuna azione definita\n"
#, c-format
msgid "SIGTERM received - shutting down ...\n"
-msgstr ""
+msgstr "SIGTERM ricevuto - arresto …\n"
#, c-format
msgid "SIGTERM received - still %d active connections\n"
-msgstr ""
+msgstr "SIGTERM ricevuto - connessioni ancora %d attive\n"
-# ??? (Md)
-#, fuzzy, c-format
+#, c-format
msgid "shutdown forced\n"
-msgstr "non esaminato"
+msgstr "arresto forzato\n"
#, c-format
msgid "SIGINT received - immediate shutdown\n"
-msgstr ""
+msgstr "SIGINT ricevuto - arresto immediato\n"
#, c-format
msgid "signal %d received - no action defined\n"
-msgstr ""
+msgstr "segnale %d ricevuto - nessuna azione definita\n"
msgid "return all values in a record oriented format"
-msgstr ""
+msgstr "restituire tutti i valori in un formato orientato ai record"
msgid "|NAME|ignore host part and connect through NAME"
-msgstr ""
+msgstr "|NOME|Ignorare la parte host e connettersi tramite NOME"
-#, fuzzy
-#| msgid "|NAME|set terminal charset to NAME"
msgid "|NAME|connect to host NAME"
-msgstr "|NOME|imposta NOME come set di caratteri del terminale"
+msgstr "Nome:connessione all'host NOME"
msgid "|N|connect to port N"
-msgstr ""
+msgstr "|N|Connessione alla porta N"
-#, fuzzy
-#| msgid "|NAME|use NAME as default recipient"
msgid "|NAME|use user NAME for authentication"
-msgstr "|NOME|usa NOME come destinatario predefinito"
+msgstr "Nome:utilizzare nome utente per l'autenticazione"
msgid "|PASS|use password PASS for authentication"
-msgstr ""
+msgstr "|PASS|utilizzare la password PASS per l'autenticazione"
msgid "take password from $DIRMNGR_LDAP_PASS"
-msgstr ""
+msgstr "prendere la password da $DIRMNGR_LDAP_PASS"
msgid "|STRING|query DN STRING"
-msgstr ""
+msgstr "|STRINGA|stringa DN query"
msgid "|STRING|use STRING as filter expression"
-msgstr ""
+msgstr "| STRINGA: utilizzare STRING come espressione di filtro"
msgid "|STRING|return the attribute STRING"
-msgstr ""
+msgstr "| STRINGA: restituisce l'attributo STRING"
-#, fuzzy
-#| msgid "Usage: gpg [options] [files] (-h for help)"
msgid "Usage: dirmngr_ldap [options] [URL] (-h for help)\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: dirmngr_ldap [opzioni] [URL] (-h per assistenza)\n"
msgid ""
"Syntax: dirmngr_ldap [options] [URL]\n"
"Internal LDAP helper for Dirmngr\n"
"Interface and options may change without notice\n"
msgstr ""
+"Sintassi: dirmngr_ldap [opzioni] [URL]\n"
+"Helper LDAP interno per Dirmngr\n"
+"L'interfaccia e le opzioni possono cambiare senza preavviso\n"
-#, fuzzy, c-format
-#| msgid "invalid import options\n"
+#, c-format
msgid "invalid port number %d\n"
-msgstr "opzioni di importazione non valide\n"
+msgstr "numero di porta non valido %d\n"
#, c-format
msgid "scanning result for attribute '%s'\n"
-msgstr ""
+msgstr "risultato dell'analisi per l'attributo '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error writing to stdout: %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la scrittura in stdout: %s\n"
#, c-format
msgid " available attribute '%s'\n"
-msgstr ""
+msgstr " attributo disponibile '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "attribute '%s' not found\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "attributo '%s' non trovato\n"
#, c-format
msgid "found attribute '%s'\n"
-msgstr ""
+msgstr "trovato attributo '%s'\n"
-#, fuzzy, c-format
-#| msgid "reading from `%s'\n"
+#, c-format
msgid "processing url '%s'\n"
-msgstr "lettura da `%s'\n"
+msgstr "elaborazione url '%s'\n"
-#, fuzzy, c-format
-#| msgid " w/o user IDs: %lu\n"
+#, c-format
msgid " user '%s'\n"
-msgstr " senza user ID: %lu\n"
+msgstr " utente '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid " pass '%s'\n"
-msgstr " alias \""
+msgstr " passare '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid " host '%s'\n"
-msgstr " alias \""
+msgstr " host '%s'\n"
-#, fuzzy, c-format
-#| msgid " not imported: %lu\n"
+#, c-format
msgid " port %d\n"
-msgstr " importate: %lu\n"
+msgstr " porta %d\n"
-#, fuzzy, c-format
+#, c-format
msgid " DN '%s'\n"
-msgstr " alias \""
+msgstr " DN '%s'\n"
#, c-format
msgid " filter '%s'\n"
-msgstr ""
+msgstr " filtro '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid " attr '%s'\n"
-msgstr " alias \""
+msgstr " attr '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "no host name in '%s'\n"
-msgstr "(Non è stata data una descrizione)\n"
+msgstr "nessun nome host in '%s'\n"
#, c-format
msgid "no attribute given for query '%s'\n"
-msgstr ""
+msgstr "nessun attributo specificato per la query '%s'\n"
-#, fuzzy, c-format
-#| msgid "WARNING: using insecure memory!\n"
+#, c-format
msgid "WARNING: using first attribute only\n"
-msgstr "ATTENZIONE: si sta usando memoria insicura!\n"
+msgstr "AVVISO: utilizzo solo del primo attributo\n"
-#, fuzzy, c-format
+#, c-format
msgid "LDAP init to '%s:%d' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "Impossibile eseguire LDAP in '%s:%d': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "binding to '%s:%d' failed: %s\n"
-msgstr "creazione dell'armatura fallita: %s\n"
+msgstr "binding a '%s:%d' non riuscito: %s\n"
-#, fuzzy, c-format
-#| msgid "dearmoring failed: %s\n"
+#, c-format
msgid "searching '%s' failed: %s\n"
-msgstr "rimozione dell'armatura fallita: %s\n"
+msgstr "ricerca '%s' non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "'%s' is not an LDAP URL\n"
-msgstr "\"%s\": non è un file JPEG\n"
+msgstr "'%s' non è un URL LDAP\n"
#, c-format
msgid "'%s' is an invalid LDAP URL\n"
-msgstr ""
+msgstr "'%s' è un URL LDAP non valido\n"
-#, fuzzy, c-format
+#, c-format
msgid "error accessing '%s': http status %u\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'accesso a '%s': stato http %u\n"
#, c-format
msgid "URL '%s' redirected to '%s' (%u)\n"
-msgstr ""
+msgstr "URL '%s' reindirizzato a '%s' (%u)\n"
-#, fuzzy, c-format
+#, c-format
msgid "too many redirections\n"
-msgstr "ci sono troppe preferenze `%c'\n"
+msgstr "troppi reindirizzamenti\n"
-#, fuzzy, c-format
-#| msgid "writing to `%s'\n"
+#, c-format
msgid "redirection changed to '%s'\n"
-msgstr "scrittura in `%s'\n"
+msgstr "reindirizzamento modificato in '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error printing log line: %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la stampa della riga di registro: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading log from ldap wrapper %d: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura del registro dal wrapper ldap %d: %s\n"
#, c-format
msgid "ldap wrapper %d ready"
-msgstr ""
+msgstr "wrapper ldap %d pronto"
#, c-format
msgid "ldap wrapper %d ready: timeout\n"
-msgstr ""
+msgstr "wrapper ldap %d pronto: timeout\n"
#, c-format
msgid "ldap wrapper %d ready: exitcode=%d\n"
-msgstr ""
+msgstr "wrapper ldap %d pronto: exitcode:%d\n"
-#, fuzzy, c-format
+#, c-format
msgid "waiting for ldap wrapper %d failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "in attesa del wrapper ldap %d non riuscito: %s\n"
#, c-format
msgid "ldap wrapper %d stalled - killing\n"
-msgstr ""
+msgstr "wrapper ldap %d bloccato - killing\n"
#, c-format
msgid "invalid char 0x%02x in host name - not added\n"
-msgstr ""
+msgstr "char non valido 0x%02x nel nome host - non aggiunto\n"
-#, fuzzy, c-format
+#, c-format
msgid "adding '%s:%d' to the ldap server list\n"
-msgstr "cerco \"%s\" sul server HKP %s\n"
+msgstr "aggiunta di '%s:%d' all'elenco dei server ldap\n"
-#, fuzzy, c-format
+#, c-format
msgid "malloc failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "malloc non riuscito: %s\n"
#, c-format
msgid "start_cert_fetch: invalid pattern '%s'\n"
-msgstr ""
+msgstr "start_cert_fetch: modello '%s' non valido\n"
#, c-format
msgid "ldap_search hit the size limit of the server\n"
-msgstr ""
+msgstr "ldap_search raggiunto il limite di dimensioni del server\n"
-#, fuzzy, c-format
-#| msgid "%s: invalid file version %d\n"
+#, c-format
msgid "invalid canonical S-expression found\n"
-msgstr "%s: versione %d del file non valida\n"
+msgstr "trovata espressione S canonica non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "gcry_md_open failed: %s\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "gcry_md_open non riuscito: %s\n"
-#, fuzzy, c-format
-#| msgid "update secret failed: %s\n"
+#, c-format
msgid "oops: ksba_cert_hash failed: %s\n"
-msgstr "aggiornamento della chiave segreta fallito: %s\n"
+msgstr "oops: ksba_cert_hash non riuscito: %s\n"
#, c-format
msgid "bad URL encoding detected\n"
-msgstr ""
+msgstr "rilevata codifica URL non valida\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading from responder: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura dal risponditore: %s\n"
#, c-format
msgid "response from server too large; limit is %d bytes\n"
-msgstr ""
+msgstr "risposta dal server troppo grande; limite è %d byte\n"
-#, fuzzy, c-format
+#, c-format
msgid "OCSP request not possible due to Tor mode\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "Richiesta OCSP non possibile a causa della modalità Tor\n"
#, c-format
msgid "OCSP request not possible due to disabled HTTP\n"
-msgstr ""
+msgstr "Richiesta OCSP non possibile a causa di HTTP disabilitato\n"
-#, fuzzy, c-format
+#, c-format
msgid "error setting OCSP target: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'impostazione della destinazione OCSP: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error building OCSP request: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la creazione della richiesta OCSP: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error connecting to '%s': %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la connessione a '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading HTTP response for '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura della risposta HTTP per '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error parsing OCSP response for '%s': %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'analisi della risposta OCSP per '%s': %s\n"
#, c-format
msgid "OCSP responder at '%s' status: %s\n"
-msgstr ""
+msgstr "Risponditore OCSP allo stato '%s': %s\n"
#, c-format
msgid "failed to establish a hashing context for OCSP: %s\n"
-msgstr ""
+msgstr "impossibile stabilire un contesto di hashing per OCSP: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "hashing the OCSP response for '%s' failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "hash della risposta OCSP per '%s' non riuscito: %s\n"
#, c-format
msgid "not signed by a default OCSP signer's certificate"
-msgstr ""
+msgstr "non firmato da un certificato del firmatario OCSP predefinito"
-#, fuzzy, c-format
+#, c-format
msgid "allocating list item failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "allocazione della voce di elenco non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting responder ID: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "errore durante il recupero dell'ID risponditore: %s\n"
#, c-format
msgid "no suitable certificate found to verify the OCSP response\n"
msgstr ""
+"non è stato trovato alcun certificato adatto per verificare la risposta "
+"OCSP\n"
-#, fuzzy, c-format
+#, c-format
msgid "issuer certificate not found: %s\n"
-msgstr "chiave `%s' non trovata: %s\n"
+msgstr "certificato dell'autorità emittente non trovato: %s\n"
#, c-format
msgid "caller did not return the target certificate\n"
-msgstr ""
+msgstr "chiamante non ha restituito il certificato di destinazione\n"
-#, fuzzy, c-format
+#, c-format
msgid "caller did not return the issuing certificate\n"
-msgstr "genera un certificato di revoca"
+msgstr "chiamante non ha restituito il certificato di emissione\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to allocate OCSP context: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile allocare il contesto OCSP: %s\n"
#, c-format
msgid "no default OCSP responder defined\n"
-msgstr ""
+msgstr "nessun risponditore OCSP predefinito definito\n"
-#, fuzzy, c-format
-#| msgid "no default secret keyring: %s\n"
+#, c-format
msgid "no default OCSP signer defined\n"
-msgstr "nessun portachiavi segreto predefinito: %s\n"
+msgstr "nessun firmatario OCSP predefinito definito\n"
#, c-format
msgid "using default OCSP responder '%s'\n"
-msgstr ""
+msgstr "utilizzando il risponditore OCSP predefinito '%s'\n"
-#, fuzzy, c-format
-#| msgid "using cipher %s\n"
+#, c-format
msgid "using OCSP responder '%s'\n"
-msgstr "uso il cifrario %s\n"
+msgstr "utilizzo del risponditore OCSP '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error getting OCSP status for target certificate: %s\n"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr ""
+"errore durante il recupero dello stato OCSP per il certificato di "
+"destinazione: %s\n"
#, c-format
msgid "certificate status is: %s (this=%s next=%s)\n"
-msgstr ""
+msgstr "lo stato del certificato è: %s (questo: %s successivo= %s)\n"
msgid "good"
-msgstr ""
+msgstr "buono"
-#, fuzzy, c-format
+#, c-format
msgid "certificate has been revoked at: %s due to: %s\n"
-msgstr "NOTA: la chiave è stata revocata"
+msgstr "il certificato è stato revocato alle: %s a causa di: %s\n"
#, c-format
msgid "OCSP responder returned a status in the future\n"
-msgstr ""
+msgstr "Il risponditore OCSP ha restituito uno stato in futuro\n"
#, c-format
msgid "OCSP responder returned a non-current status\n"
-msgstr ""
+msgstr "Il risponditore OCSP ha restituito uno stato non corrente\n"
#, c-format
msgid "OCSP responder returned an too old status\n"
-msgstr ""
+msgstr "Il risponditore OCSP ha restituito uno stato troppo vecchio\n"
-#, fuzzy, c-format
+#, c-format
msgid "assuan_inquire(%s) failed: %s\n"
-msgstr "firma fallita: %s\n"
+msgstr "assuan_inquire(%s) non riuscito: %s\n"
msgid "ldapserver missing"
-msgstr ""
+msgstr "ldapserver mancante"
msgid "serialno missing in cert ID"
-msgstr ""
+msgstr "serialno mancante nell'ID certificato"
-#, fuzzy, c-format
+#, c-format
msgid "assuan_inquire failed: %s\n"
-msgstr "firma fallita: %s\n"
+msgstr "assuan_inquire non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "fetch_cert_by_url failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "fetch_cert_by_url non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error sending data: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'invio dei dati: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "start_cert_fetch failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "start_cert_fetch non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "fetch_next_cert failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "fetch_next_cert non riuscito: %s\n"
#, c-format
msgid "max_replies %d exceeded\n"
-msgstr ""
+msgstr "max_replies %d superato\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't allocate control structure: %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile allocare la struttura di controllo: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to allocate assuan context: %s\n"
-msgstr "%s: creazione della tabella hash fallita: %s\n"
+msgstr "impossibile allocare il contesto assuan: %s\n"
-#, fuzzy, c-format
-#| msgid "failed to initialize the TrustDB: %s\n"
+#, c-format
msgid "failed to initialize the server: %s\n"
-msgstr "inizializzazione del trustdb fallita: %s\n"
+msgstr "impossibile inizializzare il server: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "failed to the register commands with Assuan: %s\n"
-msgstr "rebuild della cache del portachiavi fallito: %s\n"
+msgstr "impossibile eseguire i comandi di registro con Assuan: %s\n"
#, c-format
msgid "Assuan accept problem: %s\n"
-msgstr ""
+msgstr "Problema di accettazione assuan: %s\n"
-#, fuzzy, c-format
-#| msgid "signing failed: %s\n"
+#, c-format
msgid "Assuan processing failed: %s\n"
-msgstr "firma fallita: %s\n"
+msgstr "Elaborazione Assuan non riuscita: %s\n"
#, c-format
msgid "accepting root CA not marked as a CA"
-msgstr ""
+msgstr "accettazione della CA principale non contrassegnata come CA"
-#, fuzzy, c-format
-#| msgid "checking the trustdb\n"
+#, c-format
msgid "CRL checking too deeply nested\n"
-msgstr "controllo il trustdb\n"
+msgstr "Controllo CRL troppo profondo\n"
msgid "not checking CRL for"
-msgstr ""
+msgstr "non controlla CRL per"
-#, fuzzy
msgid "checking CRL for"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "controllo CRL per"
-#, fuzzy, c-format
+#, c-format
msgid "selfsigned certificate has a BAD signature"
-msgstr "verifica una firma"
+msgstr "certificato autofirmato ha una firma BAD"
-#, fuzzy, c-format
+#, c-format
msgid "checking trustworthiness of root certificate failed: %s\n"
-msgstr "controllo della firma creata fallito: %s\n"
+msgstr "controllo dell'affidabilità del certificato radice non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "certificate chain is good\n"
-msgstr "la preferenza %c%lu è doppia\n"
+msgstr "catena di certificati è buono\n"
#, c-format
msgid "certificate should not have been used for CRL signing\n"
-msgstr ""
+msgstr "certificato non deve essere stato utilizzato per la firma CRL\n"
-#, fuzzy
msgid "quiet"
-msgstr "quit"
+msgstr "tranquilla"
msgid "print data out hex encoded"
-msgstr ""
+msgstr "stampare i dati esendo codificati"
msgid "decode received data lines"
-msgstr ""
+msgstr "decodificare le righe di dati ricevute"
msgid "connect to the dirmngr"
-msgstr ""
+msgstr "collegare al dirmngr"
msgid "|NAME|connect to Assuan socket NAME"
-msgstr ""
+msgstr "|NAME|connessione al socket Assuan NOME"
msgid "|ADDR|connect to Assuan server at ADDR"
-msgstr ""
+msgstr "|ADDR|connessione al server Assuan presso ADDR"
msgid "run the Assuan server given on the command line"
-msgstr ""
+msgstr "eseguire il server Assuan specificato sulla riga di comando"
msgid "do not use extended connect mode"
-msgstr ""
+msgstr "non utilizzare la modalità di connessione estesa"
-#, fuzzy
msgid "|FILE|run commands from FILE on startup"
-msgstr "|FILE|carica il modulo di estensione FILE"
+msgstr "|FILE|esegui comandi da FILE all'avvio"
msgid "run /subst on startup"
-msgstr ""
+msgstr "eseguire /subst all'avvio"
-#, fuzzy
msgid "Usage: @GPG@-connect-agent [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @GPG@-connect-agent [opzioni] (-h per assistenza)"
msgid ""
"Syntax: @GPG@-connect-agent [options]\n"
"Connect to a running agent and send commands\n"
msgstr ""
+"Sintassi: @GPG@-connect-agent [opzioni]\n"
+"Connettersi a un agente in esecuzione e inviare comandi\n"
#, c-format
msgid "option \"%s\" requires a program and optional arguments\n"
-msgstr ""
+msgstr "l'opzione \"%s\" richiede un programma e argomenti facoltativi\n"
#, c-format
msgid "option \"%s\" ignored due to \"%s\"\n"
-msgstr ""
+msgstr "opzione \"%s\" ignorata a causa di \"%s\"\n"
-#, fuzzy, c-format
+#, c-format
msgid "receiving line failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "linea di ricezione non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "line too long - skipped\n"
-msgstr "riga troppo lunga\n"
+msgstr "linea troppo lunga - saltata\n"
#, c-format
msgid "line shortened due to embedded Nul character\n"
-msgstr ""
+msgstr "linea accorciata a causa del carattere Nul incorporato\n"
-#, fuzzy, c-format
+#, c-format
msgid "unknown command '%s'\n"
-msgstr "destinatario predefinito `%s' sconosciuto\n"
+msgstr "comando sconosciuto '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "sending line failed: %s\n"
-msgstr "firma fallita: %s\n"
+msgstr "riga di invio non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error sending standard options: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'invio delle opzioni standard: %s\n"
msgid "Options controlling the diagnostic output"
-msgstr ""
+msgstr "Opzioni che controllano l'output diagnostico"
msgid "Options controlling the configuration"
-msgstr ""
+msgstr "Opzioni che controllano la configurazione"
msgid "Options useful for debugging"
-msgstr ""
+msgstr "Opzioni utili per il debug"
msgid "Options controlling the security"
-msgstr ""
+msgstr "Opzioni che controllano la sicurezza"
msgid "|N|expire SSH keys after N seconds"
-msgstr ""
+msgstr "|N|Chiavi SSH di N-scadenza dopo N secondi"
msgid "|N|set maximum PIN cache lifetime to N seconds"
-msgstr ""
+msgstr "|N|imposta la durata massima della cache del PIN su N secondi"
msgid "|N|set maximum SSH key lifetime to N seconds"
-msgstr ""
+msgstr "|N|set durata massima del tasto SSH su N secondi"
msgid "Options enforcing a passphrase policy"
-msgstr ""
+msgstr "Opzioni che applicano un criterio di passphrase"
msgid "do not allow bypassing the passphrase policy"
-msgstr ""
+msgstr "non consentire l'esclusione dei criteri di passphrase"
msgid "|N|set minimal required length for new passphrases to N"
-msgstr ""
+msgstr "|N|Lunghezza minima richiesta per le nuove passphrase su N"
msgid "|N|require at least N non-alpha characters for a new passphrase"
-msgstr ""
+msgstr "|N|Per una nuova passphrase è necessario almeno N caratteri non alfa"
msgid "|FILE|check new passphrases against pattern in FILE"
-msgstr ""
+msgstr "|FILE||controlla le nuove passphrase rispetto al modello in FILE"
-#, fuzzy
msgid "|N|expire the passphrase after N days"
-msgstr "|N|usa il modo N per la passphrase"
+msgstr "| La passphrase dopo N giorni"
-#, fuzzy
msgid "do not allow the reuse of old passphrases"
-msgstr "errore nella creazione della passhprase: %s\n"
+msgstr "non consentono il riutilizzo di vecchie passphrase"
msgid "|N|set the Pinentry timeout to N seconds"
-msgstr ""
+msgstr "|N|Il timeout di Pinentry è impostato su N secondi"
msgid "|NAME|use NAME as default secret key"
-msgstr "|NOME|usa NOME come chiave segreta predefinita"
+msgstr "|NAME|usa NAME come chiave segreta predefinita"
-#, fuzzy
msgid "|NAME|encrypt to user ID NAME as well"
-msgstr "|NOME|cifra per NOME"
+msgstr "Anche nome-crittografare all'ID utente NOME"
msgid "|SPEC|set up email aliases"
-msgstr ""
+msgstr "|SPEC|configurare gli alias di posta elettronica"
msgid "Configuration for Keyservers"
-msgstr ""
+msgstr "Configurazione per Keyservers"
-#, fuzzy
msgid "|URL|use keyserver at URL"
-msgstr "impossibile fare il parsing dell'URI del keyserver\n"
+msgstr "| URL: utilizzare keyserver all'URL"
msgid "allow PKA lookups (DNS requests)"
-msgstr ""
+msgstr "consentire ricerche PKA (richieste DNS)"
msgid "|MECHANISMS|use MECHANISMS to locate keys by mail address"
msgstr ""
+"|MECHANISMS|utilizzare MECHANISMS per individuare le chiavi in base "
+"all'indirizzo di posta elettronica"
-#, fuzzy
-#| msgid "import keys from a keyserver"
msgid "import missing key from a signature"
-msgstr "importa le chiavi da un keyserver"
+msgstr "importare la chiave mancante da una firma"
-#, fuzzy
msgid "include the public key in signatures"
-msgstr "controlla le firme delle chiavi"
+msgstr "includere la chiave pubblica nelle firme"
msgid "disable all access to the dirmngr"
-msgstr ""
+msgstr "disabilitare tutti gli accessi al dirmngr"
-#, fuzzy
msgid "|NAME|use encoding NAME for PKCS#12 passphrases"
-msgstr "|NOME|usa l'alg. di cifratura NOME per le passphrase"
+msgstr "Nome: utilizzare il nome di codifica per le passphrase PKCS-12"
msgid "do not check CRLs for root certificates"
-msgstr ""
+msgstr "non controllare i certificati radice nei CRL"
msgid "Options controlling the format of the output"
-msgstr ""
+msgstr "Opzioni che controllano il formato dell'output"
msgid "Options controlling the interactivity and enforcement"
-msgstr ""
+msgstr "Opzioni che controllano l'interattività e l'applicazione"
msgid "Options controlling the use of Tor"
-msgstr ""
+msgstr "Opzioni che controllano l'uso di Tor"
msgid "Configuration for HTTP servers"
-msgstr ""
+msgstr "Configurazione per i server HTTP"
msgid "use system's HTTP proxy setting"
-msgstr ""
+msgstr "utilizzare l'impostazione proxy HTTP del sistema"
msgid "Configuration of LDAP servers to use"
-msgstr ""
+msgstr "Configurazione dei server LDAP da utilizzare"
msgid "LDAP server list"
-msgstr ""
+msgstr "Elenco server LDAP"
msgid "Configuration for OCSP"
-msgstr ""
+msgstr "Configurazione per OCSP"
msgid "OpenPGP"
-msgstr ""
+msgstr "OpenPGP"
msgid "Private Keys"
-msgstr ""
+msgstr "Chiavi private"
msgid "Smartcards"
-msgstr ""
+msgstr "Smartcard"
msgid "S/MIME"
-msgstr ""
+msgstr "S/MIME"
-#, fuzzy
-#| msgid "network error"
msgid "Network"
-msgstr "errore di rete"
+msgstr "Rete"
-#, fuzzy
msgid "Passphrase Entry"
-msgstr "passphrase errata"
+msgstr "Voce passphrase"
-#, fuzzy
msgid "Component not suitable for launching"
-msgstr "chiave pubblica non trovata"
+msgstr "Componente non adatto per il lancio"
#, c-format
msgid "Configuration file of component %s is broken\n"
-msgstr ""
+msgstr "Il file di configurazione del componente %s è interrotto\n"
-#, fuzzy, c-format
-#| msgid "Please use the command \"toggle\" first.\n"
+#, c-format
msgid "Note: Use the command \"%s%s\" to get details.\n"
-msgstr "Per favore usa prima il comando \"toggle\".\n"
+msgstr "Nota: utilizzare il comando \"%s%s\" per ottenere i dettagli.\n"
#, c-format
msgid "External verification of component %s failed"
-msgstr ""
+msgstr "Verifica esterna del componente %s non riuscita"
msgid "Note that group specifications are ignored\n"
-msgstr ""
+msgstr "Si noti che le specifiche del gruppo vengono ignorate\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing '%s'\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la chiusura di '%s'\n"
-#, fuzzy, c-format
+#, c-format
msgid "error parsing '%s'\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante l'analisi di '%s'\n"
msgid "list all components"
-msgstr ""
+msgstr "elencare tutti i componenti"
msgid "check all programs"
-msgstr ""
+msgstr "controllare tutti i programmi"
msgid "|COMPONENT|list options"
-msgstr ""
+msgstr "|COMPONENT|opzioni di elenco"
msgid "|COMPONENT|change options"
-msgstr ""
+msgstr "|COMPONENT|modifica delle opzioni"
msgid "|COMPONENT|check options"
-msgstr ""
+msgstr "|COMPONENT|Opzioni di controllo"
msgid "apply global default values"
-msgstr ""
+msgstr "applicare valori predefiniti globali"
msgid "|FILE|update configuration files using FILE"
-msgstr ""
+msgstr "|FILE|aggiornare i file di configurazione utilizzando FILE"
msgid "get the configuration directories for @GPGCONF@"
-msgstr ""
+msgstr "ottenere le directory di configurazione per @GPGCONF @"
-#, fuzzy
msgid "list global configuration file"
-msgstr "elemento della configurazione sconosciuto \"%s\"\n"
+msgstr "file di configurazione globale dell'elenco"
-#, fuzzy
msgid "check global configuration file"
-msgstr "elemento della configurazione sconosciuto \"%s\"\n"
+msgstr "controllare il file di configurazione globale"
-#, fuzzy
-#| msgid "update the trust database"
msgid "query the software version database"
-msgstr "aggiorna il database della fiducia"
+msgstr "interrogare il database delle versioni software"
msgid "reload all or a given component"
-msgstr ""
+msgstr "ricaricare tutto o un determinato componente"
msgid "launch a given component"
-msgstr ""
+msgstr "lanciare un determinato componente"
msgid "kill a given component"
-msgstr ""
+msgstr "uccidere un determinato componente"
msgid "use as output file"
msgstr "usa come file di output"
msgid "activate changes at runtime, if possible"
-msgstr ""
+msgstr "attivare le modifiche in fase di esecuzione, se possibile"
-#, fuzzy
msgid "Usage: @GPGCONF@ [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: @GPGCONF@ [opzioni] (-h per assistenza)"
msgid ""
"Syntax: @GPGCONF@ [options]\n"
"Manage configuration options for tools of the @GNUPG@ system\n"
msgstr ""
+"Sintassi: @GPGCONF@ [opzioni]\n"
+"Gestire le opzioni di configurazione per gli strumenti del @GNUPG@ sistema\n"
msgid "Need one component argument"
-msgstr ""
+msgstr "È necessario un argomento componente"
-#, fuzzy
msgid "Component not found"
-msgstr "chiave pubblica non trovata"
+msgstr "Componente non trovato"
-#, fuzzy
msgid "No argument allowed"
-msgstr "scrittura della chiave segreta in `%s'\n"
+msgstr "Nessun argomento consentito"
-#, fuzzy
msgid ""
"@\n"
"Commands:\n"
@@ -9145,2032 +8896,143 @@ msgstr ""
"@Comandi:\n"
" "
-#, fuzzy
msgid "decryption modus"
-msgstr "decifratura corretta\n"
+msgstr "modus di decrittazione"
-#, fuzzy
msgid "encryption modus"
-msgstr "decifratura corretta\n"
+msgstr "modus di crittografia"
msgid "tool class (confucius)"
-msgstr ""
+msgstr "classe di utensili (confucio)"
-#, fuzzy
msgid "program filename"
-msgstr "--store [nomefile]"
+msgstr "nome file del programma"
msgid "secret key file (required)"
-msgstr ""
+msgstr "file di chiave segreta (obbligatorio)"
msgid "input file name (default stdin)"
-msgstr ""
+msgstr "nome del file di input (stdin predefinito)"
-#, fuzzy
msgid "Usage: symcryptrun [options] (-h for help)"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr "Utilizzo: symcryptrun [opzioni] (-h per assistenza)"
msgid ""
"Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE "
"[options...] COMMAND [inputfile]\n"
"Call a simple symmetric encryption tool\n"
msgstr ""
+"Sintassi: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE "
+"[opzioni...] COMANDO [file di input]\n"
+"Chiamare un semplice strumento di crittografia simmetrica\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s on %s aborted with status %i\n"
-msgstr "Non è permesso usare %s con %s!\n"
+msgstr "%s su %s interrotto con stato %i\n"
-#, fuzzy, c-format
+#, c-format
msgid "%s on %s failed with status %i\n"
-msgstr "impossibile aprire il file: %s\n"
+msgstr "%s su %s non riuscito con stato %i\n"
-#, fuzzy, c-format
+#, c-format
msgid "can't create temporary directory '%s': %s\n"
-msgstr "impossibile creare la directory `%s': %s\n"
+msgstr "impossibile creare la directory temporanea '%s': %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "could not open %s for writing: %s\n"
-msgstr "impossibile aprire `%s': %s\n"
+msgstr "impossibile aprire %s per la scrittura: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error writing to %s: %s\n"
-msgstr "errore scrivendo il portachiavi `%s': %s\n"
+msgstr "errore durante la scrittura in %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error reading from %s: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la lettura da %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "error closing %s: %s\n"
-msgstr "errore leggendo `%s': %s\n"
+msgstr "errore durante la chiusura di %s: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "no --program option provided\n"
-msgstr "l'esecuzione remota dei programmi non è gestita\n"
+msgstr "no --opzione di programma fornita\n"
#, c-format
msgid "only --decrypt and --encrypt are supported\n"
-msgstr ""
+msgstr "solo --decrypt e --encrypt sono supportati\n"
#, c-format
msgid "no --keyfile option provided\n"
-msgstr ""
+msgstr "nessuna opzione --keyfile fornita\n"
#, c-format
msgid "cannot allocate args vector\n"
-msgstr ""
+msgstr "impossibile allocare il vettore args\n"
-#, fuzzy, c-format
+#, c-format
msgid "could not create pipe: %s\n"
-msgstr "impossibile creare %s: %s\n"
+msgstr "impossibile creare la pipe: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "could not create pty: %s\n"
-msgstr "impossibile creare %s: %s\n"
+msgstr "impossibile creare pty: %s\n"
#, c-format
msgid "could not fork: %s\n"
-msgstr ""
+msgstr "non poteva dividere: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "execv failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "execv non riuscito: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "select failed: %s\n"
-msgstr "cancellazione del keyblock fallita: %s\n"
+msgstr "selezione non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "read failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "lettura non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "pty read failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "lettura pty non riuscita: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "waitpid failed: %s\n"
-msgstr "aggiornamento fallito: %s\n"
+msgstr "waitpid non riuscito: %s\n"
#, c-format
msgid "child aborted with status %i\n"
-msgstr ""
+msgstr "figlio interrotto con stato %i\n"
-#, fuzzy, c-format
+#, c-format
msgid "cannot allocate infile string: %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "impossibile allocare la stringa nel file: %s\n"
-#, fuzzy, c-format
+#, c-format
msgid "cannot allocate outfile string: %s\n"
-msgstr "impossibile creare `%s': %s\n"
+msgstr "non può allocare la stringa del file di uscita: %s\n"
#, c-format
msgid "either %s or %s must be given\n"
-msgstr ""
+msgstr "e' necessario specificare %s o %s\n"
#, c-format
msgid "no class provided\n"
-msgstr ""
+msgstr "nessuna classe fornita\n"
-#, fuzzy, c-format
+#, c-format
msgid "class %s is not supported\n"
-msgstr "l'algoritmo di protezione %d%s non è gestito\n"
+msgstr "la classe %s non è supportata\n"
-#, fuzzy
msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n"
-msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
+msgstr ""
+"Utilizzo: gpg-check-pattern [opzioni] patternfile (-h per assistenza)\n"
msgid ""
"Syntax: gpg-check-pattern [options] patternfile\n"
"Check a passphrase given on stdin against the patternfile\n"
msgstr ""
-
-#, fuzzy
-#~ msgid " using certificate ID 0x%08lX\n"
-#~ msgstr "errore nella creazione della passhprase: %s\n"
-
-#, fuzzy
-#~| msgid "you may not use %s while in %s mode\n"
-#~ msgid ""
-#~ "keyserver option \"honor-keyserver-url\" may not be used in Tor mode\n"
-#~ msgstr "non è possibile usare %s in modalità %s\n"
-
-#, fuzzy
-#~ msgid "male"
-#~ msgstr "abilita"
-
-#, fuzzy
-#~ msgid "female"
-#~ msgstr "abilita"
-
-#, fuzzy
-#~ msgid "unspecified"
-#~ msgstr "Nessuna ragione specificata"
-
-#, fuzzy
-#~ msgid "error creating 'ultimately_trusted_keys' TOFU table: %s\n"
-#~ msgstr "errore nella creazione della passhprase: %s\n"
-
-#, fuzzy
-#~ msgid "error creating 'encryptions' TOFU table: %s\n"
-#~ msgstr "errore leggendo `%s': %s\n"
-
-#, fuzzy
-#~ msgid "resetting keydb: %s\n"
-#~ msgstr "errore scrivendo il portachiavi `%s': %s\n"
-
-#, fuzzy
-#~ msgid "error setting TOFU binding's policy to %s\n"
-#~ msgstr "errore leggendo `%s': %s\n"
-
-#, fuzzy
-#~ msgid "%s: Verified %ld~signature in the past %s."
-#~ msgid_plural "%s: Verified %ld~signatures in the past %s."
-#~ msgstr[0] "|algo [files]|stampa tutti i message digests"
-#~ msgstr[1] "|algo [files]|stampa tutti i message digests"
-
-#, fuzzy
-#~ msgid "Encrypted %ld~message in the past %s."
-#~ msgid_plural "Encrypted %ld~messages in the past %s."
-#~ msgstr[0] "|algo [files]|stampa tutti i message digests"
-#~ msgstr[1] "|algo [files]|stampa tutti i message digests"
-
-#, fuzzy
-#~| msgid "error writing public keyring `%s': %s\n"
-#~ msgid "error setting policy for key %s, user id \"%s\": %s"
-#~ msgstr "errore scrivendo il portachiavi pubblico `%s': %s\n"
-
-#, fuzzy
-#~ msgid "error looking up: %s\n"
-#~ msgstr "errore leggendo `%s': %s\n"
-
-#, fuzzy
-#~| msgid "error creating keyring `%s': %s\n"
-#~ msgid "Warning: %s appears in the keyring %d times\n"
-#~ msgstr "errore creando il portachiavi `%s': %s\n"
-
-#, fuzzy
-#~ msgid "error retrieving '%s': http status %u\n"
-#~ msgstr "errore leggendo `%s': %s\n"
-
-#, fuzzy
-#~ msgid "npth_select failed: %s - waiting 1s\n"
-#~ msgstr "aggiornamento della chiave segreta fallito: %s\n"
-
-#, fuzzy
-#~ msgid "reading from ldap wrapper %d failed: %s\n"
-#~ msgstr "cancellazione del keyblock fallita: %s\n"
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Signature key? (%u) "
-#~ msgstr "Di che dimensioni vuoi la chiave? (1024) "
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Encryption key? (%u) "
-#~ msgstr "Di che dimensioni vuoi la chiave? (1024) "
-
-#, fuzzy
-#~ msgid "What keysize do you want for the Authentication key? (%u) "
-#~ msgstr "Di che dimensioni vuoi la chiave? (1024) "
-
-#, fuzzy
-#~ msgid "listen() failed: %s\n"
-#~ msgstr "aggiornamento fallito: %s\n"
-
-#, fuzzy
-#~| msgid "new configuration file `%s' created\n"
-#~ msgid "new configuration file '%s' created\n"
-#~ msgstr "creato un nuovo file di configurazione `%s'\n"
-
-#, fuzzy
-#~| msgid "WARNING: options in `%s' are not yet active during this run\n"
-#~ msgid "WARNING: options in '%s' are not yet active during this run\n"
-#~ msgstr ""
-#~ "ATTENZIONE: le opzioni in `%s' non sono ancora attive durante questa\n"
-#~ "esecuzione del programma\n"
-
-#, fuzzy
-#~| msgid "Key generation failed: %s\n"
-#~ msgid "User ID revocation failed: %s\n"
-#~ msgstr "Generazione della chiave fallita: %s\n"
-
-#, fuzzy
-#~ msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]"
-#~ msgstr "cambia la passphrase"
-
-#~ msgid "DSA requires the use of a 160 bit hash algorithm\n"
-#~ msgstr "DSA richiede l'uso di un algoritmo di hashing con almeno 160 bit\n"
-
-#~ msgid "--store [filename]"
-#~ msgstr "--store [nomefile]"
-
-#~ msgid "--symmetric [filename]"
-#~ msgstr "--symmetric [nomefile]"
-
-#~ msgid "--encrypt [filename]"
-#~ msgstr "--encrypt [nomefile]"
-
-#, fuzzy
-#~ msgid "--symmetric --encrypt [filename]"
-#~ msgstr "--sign --encrypt [nomefile]"
-
-#~ msgid "--sign [filename]"
-#~ msgstr "--sign [nomefile]"
-
-#~ msgid "--sign --encrypt [filename]"
-#~ msgstr "--sign --encrypt [nomefile]"
-
-#, fuzzy
-#~ msgid "--symmetric --sign --encrypt [filename]"
-#~ msgstr "--sign --encrypt [nomefile]"
-
-#~ msgid "--sign --symmetric [filename]"
-#~ msgstr "--sign --symmetric [nomefile]"
-
-#~ msgid "--clear-sign [filename]"
-#~ msgstr "--clear-sign [nomefile]"
-
-#~ msgid "--decrypt [filename]"
-#~ msgstr "--decrypt [nomefile]"
-
-#~ msgid "--sign-key user-id"
-#~ msgstr "--sign-key user-id"
-
-#~ msgid "--lsign-key user-id"
-#~ msgstr "--lsign-key user-id"
-
-#~ msgid "--edit-key user-id [commands]"
-#~ msgstr "--edit-key user-id [comandi]"
-
-#, fuzzy
-#~ msgid "--passwd <user-id>"
-#~ msgstr "--sign-key user-id"
-
-#~ msgid "[filename]"
-#~ msgstr "[nomefile]"
-
-#, fuzzy
-#~ msgid "shadowing the key failed: %s\n"
-#~ msgstr "cancellazione del keyblock fallita: %s\n"
-
-#, fuzzy
-#~ msgid "available TOFU policies:\n"
-#~ msgstr "disabilita una chiave"
-
-#, fuzzy
-#~ msgid "%ld message signed"
-#~ msgid_plural "%ld messages signed"
-#~ msgstr[0] "|algo [files]|stampa tutti i message digests"
-#~ msgstr[1] "|algo [files]|stampa tutti i message digests"
-
-#~ msgid "communication problem with gpg-agent\n"
-#~ msgstr "problema di comunicazione con gpg-agent\n"
-
-#, fuzzy
-#~ msgid "canceled by user\n"
-#~ msgstr "interrotto dall'utente\n"
-
-#, fuzzy
-#~ msgid "problem with the agent\n"
-#~ msgstr "problema con l'agent: ha restituito 0x%lx\n"
-
-#, fuzzy
-#~ msgid "problem with the agent (unexpected response \"%s\")\n"
-#~ msgstr "problema con l'agent: ha restituito 0x%lx\n"
-
-#, fuzzy
-#~ msgid "unknown TOFU DB format '%s'\n"
-#~ msgstr "destinatario predefinito `%s' sconosciuto\n"
-
-#, fuzzy
-#~ 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 ""
-#~ "Ti serve una passphrase per sbloccare la chiave segreta dell'utente:\n"
-#~ "\"%.*s\"\n"
-#~ "%u-bit %s key, ID %08lX, created %s%s\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "You need a passphrase to unlock the secret key for\n"
-#~ "user: \"%s\"\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ti serve una passphrase per sbloccare la chiave segreta\n"
-#~ "dell'utente: \""
-
-#, fuzzy
-#~ msgid "%u-bit %s key, ID %s, created %s"
-#~ msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s"
-
-#, fuzzy
-#~| msgid "can't create directory `%s': %s\n"
-#~ msgid "can't access directory '%s': %s\n"
-#~ msgstr "impossibile creare la directory `%s': %s\n"
-
-#~ msgid "you found a bug ... (%s:%d)\n"
-#~ msgstr "hai trovato un bug... (%s:%d)\n"
-
-#, fuzzy
-#~| msgid "%d user IDs without valid self-signatures detected\n"
-#~ msgid "%d user ID without valid self-signature detected\n"
-#~ msgid_plural "%d user IDs without valid self-signatures detected\n"
-#~ msgstr[0] "Trovati %d user ID senza autofirme valide\n"
-#~ msgstr[1] "Trovati %d user ID senza autofirme valide\n"
-
-#~ msgid "moving a key signature to the correct place\n"
-#~ msgstr "spostamento della firma di una chiave nel posto corretto\n"
-
-#~ msgid "%d signatures not checked due to missing keys\n"
-#~ msgstr "%d firme non controllate per mancanza delle chiavi\n"
-
-#~ msgid "%d signatures not checked due to errors\n"
-#~ msgstr "%d firme non controllate a causa di errori\n"
-
-#~ msgid "1 user ID without valid self-signature detected\n"
-#~ msgstr "Trovato un user ID senza autofirma valida\n"
-
-#, fuzzy
-#~ msgid "User ID \"%s\": %d signatures removed\n"
-#~ msgstr "L'user ID \"%s\" è stato revocato."
-
-#~ msgid ""
-#~ "You need a Passphrase to protect your secret key.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Ti serve una passphrase per proteggere la tua chiave segreta.\n"
-#~ "\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Please enter a passphrase to protect the off-card backup of the new "
-#~ "encryption key."
-#~ msgstr "Inserisci la passphrase, cioè una frase segreta \n"
-
-#~ msgid "passphrase not correctly repeated; try again"
-#~ msgstr "passphrase non ripetuta correttamente; prova ancora"
-
-#~ 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 ""
-#~ "Non hai specificato una passphrase - questa è probabilmente una "
-#~ "*cattiva*\n"
-#~ "idea! Lo farò io comunque. Puoi cambiarla in ogni momento, usando questo\n"
-#~ "programma con l'opzione \"--edit-key\".\n"
-#~ "\n"
-
-#, fuzzy
-#~ msgid "storing key onto card failed: %s\n"
-#~ msgstr "cancellazione del keyblock fallita: %s\n"
-
-#, fuzzy
-#~| msgid "1 bad signature\n"
-#~ msgid "1 good signature\n"
-#~ msgstr "una firma non corretta\n"
-
-#, fuzzy
-#~ msgid "%lu keys cached (%lu signatures)\n"
-#~ msgstr "Sono state controllate %lu chiavi (%lu firme)\n"
-
-#, fuzzy
-#~ msgid "refreshing 1 key from %s\n"
-#~ msgstr "richiedo la chiave %08lX a %s\n"
-
-#, fuzzy
-#~ msgid "sending key %s to %s server %s\n"
-#~ msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#, fuzzy
-#~ msgid "public key %s is %lu seconds newer than the signature\n"
-#~ msgstr "la chiave pubblica %08lX è più recente della firma di %lu secondi\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "key %s was created %lu seconds in the future (time warp or clock "
-#~ "problem)\n"
-#~ msgstr ""
-#~ "la chiave è stata creata %lu secondi nel futuro (salto nel tempo o "
-#~ "problema\n"
-#~ "con l'orologio)\n"
-
-#, fuzzy
-#~| msgid "can't open the keyring"
-#~ msgid "Failed to open the keyring DB.\n"
-#~ msgstr "impossibile aprire il portachiavi"
-
-#, fuzzy
-#~ msgid "Failed to parse '%s'.\n"
-#~ msgstr "impossibile aprire `%s': %s\n"
-
-#, fuzzy
-#~ msgid "error looking up secret key \"%s\": %s\n"
-#~ msgstr "errore leggendo il keyblock segreto `%s': %s\n"
-
-#, fuzzy
-#~ msgid "Please select at most one subkey.\n"
-#~ msgstr "Seleziona al massimo una chiave secondaria.\n"
-
-#, fuzzy
-#~ msgid "malformed %s environment variable\n"
-#~ msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n"
-
-#, fuzzy
-#~ msgid "dirmngr protocol version %d is not supported\n"
-#~ msgstr "la versione %d del protocollo di gpg-agent non è gestita\n"
-
-#, fuzzy
-#~ msgid "toggle between the secret and public key listings"
-#~ msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica"
-
-#, fuzzy
-#~ msgid "Passphrase"
-#~ msgstr "passphrase errata"
-
-#, fuzzy
-#~ msgid "WARNING: keyserver option '%s' is not used on this platform\n"
-#~ msgstr ""
-#~ "ATTENZIONE: le opzioni in `%s' non sono ancora attive durante questa\n"
-#~ "esecuzione del programma\n"
-
-#~ msgid "gpg-agent is not available in this session\n"
-#~ msgstr "gpg-agent non è disponibile in questa sessione\n"
-
-#, fuzzy
-#~ msgid "use a standard location for the socket"
-#~ msgstr "Aggiorno davvero le preferenze per gli user ID selezionati? "
-
-#, fuzzy
-#~ msgid "Usage: gpg-agent [options] (-h for help)"
-#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
-
-#~ msgid "malformed GPG_AGENT_INFO environment variable\n"
-#~ msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n"
-
-#~ msgid "gpg-agent protocol version %d is not supported\n"
-#~ msgstr "la versione %d del protocollo di gpg-agent non è gestita\n"
-
-#, fuzzy
-#~ msgid "can't fdopen pipe for reading: %s\n"
-#~ msgstr "impossibile aprire il file: %s\n"
-
-#, fuzzy
-#~ msgid "error creating socket: %s\n"
-#~ msgstr "errore creando `%s': %s\n"
-
-#, fuzzy
-#~ msgid "host not found"
-#~ msgstr "[User ID non trovato]"
-
-#, fuzzy
-#~ msgid "unknown key protection algorithm\n"
-#~ msgstr "algoritmo di protezione sconosciuto\n"
-
-#, fuzzy
-#~ msgid "secret parts of key are not available\n"
-#~ msgstr "Parti della chiave segreta non sono disponibili.\n"
-
-#, fuzzy
-#~ msgid "secret key already stored on a card\n"
-#~ msgstr "saltata: chiave pubblica già presente\n"
-
-#, fuzzy
-#~ msgid "error writing key to card: %s\n"
-#~ msgstr "errore scrivendo il portachiavi `%s': %s\n"
-
-#~ msgid ""
-#~ "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
-#~ msgstr ""
-#~ "in modalità --pgp2 puoi cifrare solo per chiavi RSA non più lunghe di "
-#~ "2048 bit\n"
-
-#~ msgid ""
-#~ "unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
-#~ msgstr ""
-#~ "impossibile usare il cifrario IDEA con tutti i tipi di chiavi per cui\n"
-#~ "stai cifrando.\n"
-
-#, fuzzy
-#~ msgid "remove the passphrase from exported subkeys"
-#~ msgstr "revoca una chiave secondaria"
-
-#, fuzzy
-#~ msgid "key %s: not protected - skipped\n"
-#~ msgstr "chiave %08lX: non protetta - saltata\n"
-
-#, fuzzy
-#~ msgid "failed to unprotect the subkey: %s\n"
-#~ msgstr "inizializzazione del trustdb fallita: %s\n"
-
-#, fuzzy
-#~ msgid "WARNING: secret key %s does not have a simple SK checksum\n"
-#~ msgstr ""
-#~ "ATTENZIONE: la chiave segreta %08lX non ha un checksum SK semplice\n"
-
-#~ msgid "too many entries in pk cache - disabled\n"
-#~ msgstr "troppe voci nella pk cache - disabilitata\n"
-
-#, fuzzy
-#~ msgid "no secret subkey for public subkey %s - ignoring\n"
-#~ msgstr ""
-#~ "manca una subchiave segreta per la subchiave pubblica %08lX - ignorata\n"
-
-#, fuzzy
-#~ msgid "key %s: secret key without public key - skipped\n"
-#~ msgstr "chiave %08lX: chiave segreta senza chiave pubblica - saltata\n"
-
-#~ msgid "usage: gpg [options] "
-#~ msgstr "uso: gpg [opzioni] "
-
-#~ msgid ""
-#~ "you can only make detached or clear signatures while in --pgp2 mode\n"
-#~ msgstr "nella modalità --pgp2 puoi fare solo firme in chiaro o separate\n"
-
-#~ msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
-#~ msgstr ""
-#~ "nella modalità --pgp2 non puoi firmare e cifrare contemporaneamente\n"
-
-#~ msgid ""
-#~ "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
-#~ msgstr ""
-#~ "devi usare dei file (e non una pipe) quando lavori con --pgp2 attivo.\n"
-
-#~ msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
-#~ msgstr ""
-#~ "nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un "
-#~ "messaggio\n"
-
-#, fuzzy
-#~ msgid "create a public key when importing a secret key"
-#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n"
-
-#, fuzzy
-#~ msgid "key %s: already in secret keyring\n"
-#~ msgstr "chiave %08lX: già nel portachiavi segreto\n"
-
-#, fuzzy
-#~ msgid "key %s: secret key not found: %s\n"
-#~ msgstr "chiave %08lX: chiave segreta non trovata: %s\n"
-
-#, fuzzy
-#~ msgid "NOTE: a key's S/N does not match the card's one\n"
-#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n"
-
-#, fuzzy
-#~ msgid "NOTE: primary key is online and stored on card\n"
-#~ msgstr "saltata: chiave pubblica già presente\n"
-
-#, fuzzy
-#~ msgid "NOTE: secondary key is online and stored on card\n"
-#~ msgstr "saltata: chiave pubblica già presente\n"
-
-#~ msgid ""
-#~ "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
-#~ "mode.\n"
-#~ msgstr ""
-#~ "In modalità -pgp2 non è possibile fare firme OpenPGP su chiavi in stile "
-#~ "PGP 2.x.\n"
-
-#~ msgid "This would make the key unusable in PGP 2.x.\n"
-#~ msgstr "Questo renderebbe la chiave non utilizzabile da PGP 2.x.\n"
-
-#~ msgid "This key is not protected.\n"
-#~ msgstr "Questa chiave non è protetta.\n"
-
-#~ msgid "Key is protected.\n"
-#~ msgstr "La chiave è protetta.\n"
-
-#~ msgid "Can't edit this key: %s\n"
-#~ msgstr "Impossibile modificare questa chiave: %s\n"
-
-#~ msgid ""
-#~ "Enter the new passphrase for this secret key.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Inserisci la nuova passphrase per questa chiave segreta.\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "You don't want a passphrase - this is probably a *bad* idea!\n"
-#~ "\n"
-#~ msgstr ""
-#~ "Non vuoi una passphrase - questa è probabilmente una *cattiva* idea!\n"
-#~ "\n"
-
-#, fuzzy
-#~ msgid "Do you really want to do this? (y/N) "
-#~ msgstr "Vuoi veramente farlo?"
-
-#~ msgid "Please remove selections from the secret keys.\n"
-#~ msgstr "Togli le selezioni dalle chiavi segrete.\n"
-
-#~ msgid "No corresponding signature in secret ring\n"
-#~ msgstr "Manca la firma corrispondente nel portachiavi segreto\n"
-
-#, fuzzy
-#~ msgid "writing secret key stub to `%s'\n"
-#~ msgstr "scrittura della chiave segreta in `%s'\n"
-
-#~ msgid "writing secret key to `%s'\n"
-#~ msgstr "scrittura della chiave segreta in `%s'\n"
-
-#~ msgid "no writable secret keyring found: %s\n"
-#~ msgstr "non è stato trovato un portachiavi segreto scrivibile: %s\n"
-
-#~ msgid "WARNING: 2 files with confidential information exists.\n"
-#~ msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n"
-
-#~ msgid "%s is the unchanged one\n"
-#~ msgstr "%s è quello non modificato\n"
-
-#~ msgid "%s is the new one\n"
-#~ msgstr "%s è quello nuovo\n"
-
-#~ msgid "Please fix this possible security flaw\n"
-#~ msgstr "Per favore risolvete questo possibile problema di sicurezza\n"
-
-#, fuzzy
-#~ msgid "searching for names from %s server %s\n"
-#~ msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#, fuzzy
-#~ msgid "searching for names from %s\n"
-#~ msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#, fuzzy
-#~ msgid "searching for \"%s\" from %s server %s\n"
-#~ msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#, fuzzy
-#~ msgid "searching for \"%s\" from %s\n"
-#~ msgstr "cerco \"%s\" sul server HKP %s\n"
-
-#, fuzzy
-#~ msgid "keyserver timed out\n"
-#~ msgstr "errore del keyserver"
-
-#, fuzzy
-#~ msgid "keyserver internal error\n"
-#~ msgstr "errore del keyserver"
-
-#, fuzzy
-#~ msgid "keyserver communications error: %s\n"
-#~ msgstr "ricezione dal keyserver fallita: %s\n"
-
-#, fuzzy
-#~ msgid "WARNING: unable to parse URI %s\n"
-#~ msgstr ""
-#~ "ATTENZIONE: impossibile cancellare il file temporaneo (%s) `%s': %s\n"
-
-#~ msgid "invalid root packet detected in proc_tree()\n"
-#~ msgstr "individuato un pacchetto radice non valido in proc_tree()\n"
-
-#~ msgid "the IDEA cipher plugin is not present\n"
-#~ msgstr "il plugin per il cifrario IDEA non è presente\n"
-
-#~ msgid "no corresponding public key: %s\n"
-#~ msgstr "non c'è una chiave pubblica corrispondente: %s\n"
-
-#~ msgid "public key does not match secret key!\n"
-#~ msgstr "la chiave pubblica non corrisponde alla chiave segreta!\n"
-
-#~ msgid "unknown protection algorithm\n"
-#~ msgstr "algoritmo di protezione sconosciuto\n"
-
-#~ msgid "NOTE: This key is not protected!\n"
-#~ msgstr "NOTA: Questa chiave non è protetta!\n"
-
-#, fuzzy
-#~ msgid "protection digest %d is not supported\n"
-#~ msgstr "l'algoritmo di protezione %d%s non è gestito\n"
-
-#~ msgid "Invalid passphrase; please try again"
-#~ msgstr "Passphrase non valida; riprova"
-
-#~ msgid "%s ...\n"
-#~ msgstr "%s ...\n"
-
-#~ msgid "WARNING: Weak key detected - please change passphrase again.\n"
-#~ msgstr ""
-#~ "ATTENZIONE: Individuata una chiave debole - per favore cambia ancora la\n"
-#~ "passphrase.\n"
-
-#~ msgid ""
-#~ "generating the deprecated 16-bit checksum for secret key protection\n"
-#~ msgstr ""
-#~ "genero il checksum a 16 bit deprecato per la protezione della chiave "
-#~ "segreta\n"
-
-#~ msgid ""
-#~ "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr ""
-#~ "nella modalità --pgp2 puoi fare firme separate solo con chiavi in stile "
-#~ "PGP 2.x\n"
-
-#~ msgid ""
-#~ "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
-#~ msgstr ""
-#~ "In modalità -pgp2 puoi firmare in chiaro solo con chiavi in stile PGP 2."
-#~ "x\n"
-
-#, fuzzy
-#~ msgid "Usage: scdaemon [options] (-h for help)"
-#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
-
-#, fuzzy
-#~ msgid "Usage: gpgsm [options] [files] (-h for help)"
-#~ msgstr "Uso: gpg [opzioni] [files] (-h per l'aiuto)"
-
-#, fuzzy
-#~ msgid "usage: gpgconf [options] "
-#~ msgstr "uso: gpg [opzioni] "
-
-#, fuzzy
-#~ msgid "failed to allocated keyDB handle\n"
-#~ msgstr "inizializzazione del trustdb fallita: %s\n"
-
-#~ msgid "Command> "
-#~ msgstr "Comando> "
-
-#~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
-#~ msgstr "Il trustdb è danneggiato; eseguire \"gpg --fix-trust-db\".\n"
-
-#~ msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
-#~ msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n"
-
-#, fuzzy
-#~ msgid "Please report bugs to "
-#~ msgstr "Per favore segnala i bug a <gnupg-bugs@gnu.org>.\n"
-
-#, fuzzy
-#~ msgid "DSA keypair will have %u bits.\n"
-#~ msgstr "La coppia DSA avrà 1024 bit.\n"
-
-#~ msgid "Repeat passphrase\n"
-#~ msgstr "Ripeti la passphrase\n"
-
-#, fuzzy
-#~ msgid "read options from file"
-#~ msgstr "lettura delle opzioni da `%s'\n"
-
-#~ msgid "|[file]|make a signature"
-#~ msgstr "|[file]|fai una firma"
-
-#, fuzzy
-#~ msgid "|[FILE]|make a signature"
-#~ msgstr "|[file]|fai una firma"
-
-#, fuzzy
-#~ msgid "|[FILE]|make a clear text signature"
-#~ msgstr "|[file]|fai una firma mantenendo il testo in chiaro"
-
-#~ msgid "use the default key as default recipient"
-#~ msgstr "usa la chiave predefinita come destinatario predefinito"
-
-#~ msgid "force v3 signatures"
-#~ msgstr "forza l'uso di firme v3"
-
-#~ msgid "always use a MDC for encryption"
-#~ msgstr "usa sempre un MDC per cifrare"
-
-#~ msgid "add this secret keyring to the list"
-#~ msgstr "aggiungi questo portachiavi segreto alla lista"
-
-#~ msgid "|FILE|load extension module FILE"
-#~ msgstr "|FILE|carica il modulo di estensione FILE"
-
-#~ msgid "|N|use compress algorithm N"
-#~ msgstr "|N|usa l'algoritmo di compressione N"
-
-#, fuzzy
-#~ msgid "remove key from the public keyring"
-#~ msgstr "rimuove le chiavi dal portachiavi pubblico"
-
-#~ 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 ""
-#~ "E compito tuo assegnare un valore; questo valore non sarà mai esportato "
-#~ "a\n"
-#~ "terzi. Ci serve per implementare il web-of-trust; non ha nulla a che "
-#~ "fare\n"
-#~ "con il web-of-certificates (creato implicitamente)."
-
-#~ 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 ""
-#~ "Per costruire il Web-Of-Trust, GnuPG ha bisogno di sapere quali chiavi "
-#~ "sono\n"
-#~ "definitivamente affidabili - di solito quelle per cui hai accesso alla "
-#~ "chiave\n"
-#~ "segreta.\n"
-#~ "Rispondi \"sì\" per impostare questa chiave come definitivamente "
-#~ "affidabile\n"
-
-#~ msgid "If you want to use this untrusted key anyway, answer \"yes\"."
-#~ msgstr "Se vuoi usare comunque questa chiave non fidata, rispondi \"si\"."
-
-#~ msgid ""
-#~ "Enter the user ID of the addressee to whom you want to send the message."
-#~ msgstr ""
-#~ "Inserisci l'user ID del destinatario a cui vuoi mandare il messaggio."
-
-#~ 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 ""
-#~ "In generale non è una buona idea usare la stessa chiave per le firme e "
-#~ "la\n"
-#~ "cifratura. Questo algoritmo dovrebbe solo essere usato in determinati "
-#~ "campi.\n"
-#~ "Per favore consulta prima il tuo esperto di sicurezza."
-
-#~ msgid "Enter the size of the key"
-#~ msgstr "Inserisci le dimensioni della chiave"
-
-#~ msgid "Answer \"yes\" or \"no\""
-#~ msgstr "Rispondi \"si\" o \"no\""
-
-#~ 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 ""
-#~ "Inserisci il valore richiesto come indicato dal prompt.\n"
-#~ "È possibile inserire una data in formato ISO (YYYY-MM-DD) ma non avrai "
-#~ "un\n"
-#~ "messaggio di errore corretto: il sistema cerca di interpretare il valore\n"
-#~ "dato come un intervallo."
-
-#~ msgid "Enter the name of the key holder"
-#~ msgstr "Inserisci il nome del proprietario della chiave"
-
-#~ msgid "please enter an optional but highly suggested email address"
-#~ msgstr "Inserisci un indirizzo di email opzionale (ma fortemente suggerito)"
-
-#~ msgid "Please enter an optional comment"
-#~ msgstr "Inserisci un commento opzionale"
-
-#~ 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 to quit the key generation."
-#~ msgstr ""
-#~ "N per cambiare il nome.\n"
-#~ "C per cambiare il commento.\n"
-#~ "E per cambiare l'indirizzo di email.\n"
-#~ "O per continuare con la generazione della chiave.\n"
-#~ "Q per abbandonare il processo di generazione della chiave."
-
-#~ msgid ""
-#~ "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
-#~ msgstr "Rispondi \"si\" (o \"y\") se va bene generare la subchiave."
-
-#~ 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 ""
-#~ "Quando firmi l'user ID di una chiave dovresti prima verificare che "
-#~ "questa\n"
-#~ "appartiene alla persona indicata nell'user ID. È utile agli altri sapere\n"
-#~ "con quanta attenzione lo hai verificato.\n"
-#~ "\n"
-#~ "\"0\" significa che non fai particolari affermazioni sull'attenzione con "
-#~ "cui\n"
-#~ " hai ferificato la chiave.\n"
-#~ "\n"
-#~ "\"1\" significa che credi che la chiave sia posseduta dalla persona che "
-#~ "dice di\n"
-#~ " possederla, ma non hai o non hai potuto verificare per niente la "
-#~ "chiave.\n"
-#~ "\n"
-#~ "\"2\" significa che hai fatto una verifica superficiale della chiave. Per "
-#~ "esempio\n"
-#~ " potrebbe significare che hai verificato l'impronta digitale e "
-#~ "confrontato\n"
-#~ " l'user ID della chiave con un documento di identità con fotografia.\n"
-#~ "\n"
-#~ "\"3\" significa che hai fatto una verifica approfondita della chiave. Per "
-#~ "esempio\n"
-#~ " potrebbe significare che hai verificato di persona l'impronta "
-#~ "digitale con\n"
-#~ " il possessore della chiave e hai controllato, per esempio per mezzo "
-#~ "di\n"
-#~ " un documento di identità con fotografia difficile da falsificare "
-#~ "(come\n"
-#~ " un passaporto), che il nome del proprietario della chiave corrisponde "
-#~ "a\n"
-#~ " quello nell'user ID della chiave, e per finire che hai verificato\n"
-#~ " (scambiando dei messaggi) che l'indirizzo di email sulla chiave "
-#~ "appartiene\n"
-#~ " al proprietario.\n"
-#~ "\n"
-#~ "Nota che gli esempi indicati per i livelli 2 e 3 sono *solo* esempi. Alla "
-#~ "fine\n"
-#~ "sta a te decidere cosa significano \"superficiale\" e \"approfondita\" "
-#~ "quando\n"
-#~ "firmi chiavi di altri.\n"
-#~ "\n"
-#~ "Se non sai cosa rispondere, rispondi \"0\"."
-
-#, fuzzy
-#~ msgid "Answer \"yes\" if you want to sign ALL the user IDs"
-#~ msgstr "Rispondi \"si\" se vuoi firmare TUTTI gli user ID"
-
-#~ msgid ""
-#~ "Answer \"yes\" if you really want to delete this user ID.\n"
-#~ "All certificates are then also lost!"
-#~ msgstr ""
-#~ "Rispondi \"si\" se vuoi davvero cancellare questo user ID.\n"
-#~ "Tutti i certificati saranno persi!"
-
-#~ msgid "Answer \"yes\" if it is okay to delete the subkey"
-#~ msgstr "Rispondi \"si\" se va bene cancellare la subchiave"
-
-#~ 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 ""
-#~ "Questa è una firma valida per la chiave. Normalmente non vorresti "
-#~ "cancellare\n"
-#~ "questa firma perchè può essere importante per stabilire una connessione "
-#~ "di\n"
-#~ "fiducia alla chiave o a un'altra chiave certificata da questa chiave."
-
-#~ 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 ""
-#~ "Questa firma non può essere verificata perchè non hai la chiave "
-#~ "corrispondente.\n"
-#~ "Dovresti rimandare la sua cancellazione finchè non saprai quale chiave è "
-#~ "stata\n"
-#~ "usata perchè questa chiave potrebbe stabilire una connessione di fiducia\n"
-#~ "attraverso una chiave già certificata."
-
-#~ msgid ""
-#~ "The signature is not valid. It does make sense to remove it from\n"
-#~ "your keyring."
-#~ msgstr "La firma non è valida. Ha senso rimuoverla dal tuo portachiavi."
-
-#~ 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 ""
-#~ "Questa è una firma che collega l'user id alla chiave. Solitamente non è "
-#~ "una\n"
-#~ "buona idea rimuovere questo tipo di firma. In realtà GnuPG potrebbe non "
-#~ "essere\n"
-#~ "più in grado di usare questa chiave. Quindi fallo solo se questa "
-#~ "autofirma non\n"
-#~ "è valida per qualche ragione e ne è disponibile un'altra."
-
-#~ 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 ""
-#~ "Cambia le preferenze di tutti gli user ID (o solo di quelli selezionati) "
-#~ "con\n"
-#~ "la lista di preferenze corrente. L'orario di tutte le autofirme "
-#~ "coinvolte\n"
-#~ "sarà aumentato di un secondo.\n"
-
-#~ msgid "Please enter the passphrase; this is a secret sentence \n"
-#~ msgstr "Inserisci la passphrase, cioè una frase segreta \n"
-
-#~ msgid ""
-#~ "Please repeat the last passphrase, so you are sure what you typed in."
-#~ msgstr "Ripeti l'ultima passphrase per essere sicuro di cosa hai scritto."
-
-#~ msgid "Give the name of the file to which the signature applies"
-#~ msgstr "Inserisci il nome del file a cui si riferisce la firma."
-
-#~ msgid "Answer \"yes\" if it is okay to overwrite the file"
-#~ msgstr "Rispondi \"si\" se va bene sovrascrivere il file."
-
-#~ msgid ""
-#~ "Please enter a new filename. If you just hit RETURN the default\n"
-#~ "file (which is shown in brackets) will be used."
-#~ msgstr ""
-#~ "Inserisci il nuovo nome del file. Se premi INVIO sarà usato il nome\n"
-#~ "predefinito (quello indicato tra parentesi)."
-
-#~ 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 ""
-#~ "Dovresti specificare un motivo per questa certificazione. A seconda del\n"
-#~ "contesto hai la possibilità di scegliere tra questa lista:\n"
-#~ " \"Key has been compromised\"\n"
-#~ " Usa questo se hai un motivo per credere che una persona non "
-#~ "autorizzata\n"
-#~ " abbia avuto accesso alla tua chiave segreta.\n"
-#~ " \"Key is superseded\"\n"
-#~ " Usa questo se hai sostituito questa chiave con una più recente.\n"
-#~ " \"Key is no longer used\"\n"
-#~ " Usa questo se hai mandato in pensione questa chiave.\n"
-#~ " \"User ID is no longer valid\"\n"
-#~ " Usa questo per affermare che l'user ID non dovrebbe più essere "
-#~ "usato;\n"
-#~ " solitamente è usato per indicare un indirizzo di email non valido.\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 ""
-#~ "Se vuoi, puoi digitare un testo che descrive perché hai emesso\n"
-#~ "questo certificato di revoca. Per favore sii conciso.\n"
-#~ "Una riga vuota termina il testo.\n"
-
-#~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n"
-#~ msgstr "impossibile inserire notation data nelle firme v3 (stile PGP 2.x)\n"
-
-#~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n"
-#~ msgstr ""
-#~ "impossibile inserire notation data nelle firme di chiavi v3 (stile PGP 2."
-#~ "x)\n"
-
-#~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n"
-#~ msgstr ""
-#~ "impossibile inserire l'URL di una policy nelle firme v3 (stile PGP 2.x)\n"
-
-#~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n"
-#~ msgstr ""
-#~ "impossibile inserire l'URL di una policy nelle firme di chiavi v3 (stile\n"
-#~ "PGP 2.x)\n"
-
-#, fuzzy
-#~ msgid "shelll"
-#~ msgstr "help"
-
-#, fuzzy
-#~ msgid ""
-#~ "please see http://www.gnupg.org/download/iconv.html for more information\n"
-#~ msgstr "visitare http://www.gnupg.org/faq.html per ulteriori informazioni\n"
-
-#, fuzzy
-#~ msgid "key generation is not available from the commandline\n"
-#~ msgstr "gpg-agent non è disponibile in questa sessione\n"
-
-#, fuzzy
-#~ msgid "please use the script \"%s\" to generate a new key\n"
-#~ msgstr "Per favore scegli che tipo di chiave vuoi:\n"
-
-#, fuzzy
-#~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n"
-#~ msgstr ""
-#~ "l'estensione crittografica \"%s\" non è stata caricata a causa dei\n"
-#~ "permessi insicuri.\n"
-
-#, fuzzy
-#~ msgid ".\n"
-#~ msgstr "%s.\n"
-
-#~ msgid "problem with the agent - disabling agent use\n"
-#~ msgstr "problema con l'agent - uso dell'agent disattivato\n"
-
-#, fuzzy
-#~ msgid "can't query passphrase in batch mode\n"
-#~ msgstr "impossibile chiedere la password in modo batch\n"
-
-#~ msgid "Repeat passphrase: "
-#~ msgstr "Ripeti la passphrase: "
-
-#~ msgid "-k[v][v][v][c] [user-id] [keyring]"
-#~ msgstr "-k[v][v][v][c] [user-id] [portachiavi]"
-
-#, fuzzy
-#~ msgid "can't gen prime with pbits=%u qbits=%u\n"
-#~ msgstr "impossibile generare un numero primo di meno di %d bit\n"
-
-#~ msgid "can't generate a prime with less than %d bits\n"
-#~ msgstr "impossibile generare un numero primo di meno di %d bit\n"
-
-#~ msgid "no entropy gathering module detected\n"
-#~ msgstr "non è stato trovato il modulo per raccogliere l'entropia\n"
-
-#, fuzzy
-#~ msgid "can't lock `%s': %s\n"
-#~ msgstr "impossibile aprire `%s'\n"
-
-#~ msgid "`%s' is not a regular file - ignored\n"
-#~ msgstr "`%s' non è un file regolare - ignorato\n"
-
-#~ msgid "note: random_seed file is empty\n"
-#~ msgstr "nota: il file random_seed è vuoto\n"
-
-#~ msgid "can't read `%s': %s\n"
-#~ msgstr "impossibile leggere `%s': %s\n"
-
-#~ msgid "note: random_seed file not updated\n"
-#~ msgstr "nota: il file random_seed non è stato aggiornato\n"
-
-#~ msgid "can't write `%s': %s\n"
-#~ msgstr "impossibile scrivere su `%s': %s\n"
-
-#~ msgid "can't close `%s': %s\n"
-#~ msgstr "impossibile chiudere `%s': %s\n"
-
-#~ msgid "WARNING: using insecure random number generator!!\n"
-#~ msgstr ""
-#~ "ATTENZIONE: si sta usando un generatore di numeri casuali non sicuro!!\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 ""
-#~ "Il generatore di numeri casuali è solo un ripiego per fare\n"
-#~ "funzionare il programma - non è assolutamente un RNG forte!\n"
-#~ "\n"
-#~ "NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA!\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 ""
-#~ "Attendi, sto raccogliendo entropia. Se può evitare di annoiarti lavora un "
-#~ "po',\n"
-#~ "visto che questo migliorerà la qualità dell'entropia.\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"
-#~ "Non ci sono abbastanza byte casuali disponibili. Per favore fai qualche\n"
-#~ "altra cosa per dare all'OS la possibilità di raccogliere altra entropia!\n"
-#~ "(Servono altri %d byte)\n"
-
-#, fuzzy
-#~ msgid "card reader not available\n"
-#~ msgstr "la chiave segreta non è disponibile"
-
-#, fuzzy
-#~ msgid "NOTE: %s is not available in this version\n"
-#~ msgstr "gpg-agent non è disponibile in questa sessione\n"
-
-#, fuzzy
-#~ msgid " algorithms on these user IDs:\n"
-#~ msgstr "Non puoi cancellare l'ultimo user ID!\n"
-
-#~ msgid "general error"
-#~ msgstr "errore generale"
-
-#~ msgid "unknown packet type"
-#~ msgstr "pacchetto di tipo sconosciuto"
-
-#~ msgid "unknown digest algorithm"
-#~ msgstr "algoritmo del digest sconosciuto"
-
-#~ msgid "bad public key"
-#~ msgstr "chiave pubblica errata"
-
-#~ msgid "bad secret key"
-#~ msgstr "chiave segreta errata"
-
-#~ msgid "bad signature"
-#~ msgstr "firma errata"
-
-#~ msgid "checksum error"
-#~ msgstr "codice di controllo errato"
-
-#~ msgid "unknown cipher algorithm"
-#~ msgstr "algoritmo di cifratura sconosciuto"
-
-#~ msgid "invalid packet"
-#~ msgstr "pacchetto non valido"
-
-#~ msgid "no such user id"
-#~ msgstr "l'user id non esiste"
-
-#~ msgid "secret key not available"
-#~ msgstr "la chiave segreta non è disponibile"
-
-#~ msgid "wrong secret key used"
-#~ msgstr "è stata usata la chiave segreta sbagliata"
-
-#~ msgid "bad key"
-#~ msgstr "chiave sbagliata"
-
-#~ msgid "file write error"
-#~ msgstr "errore durante la scrittura del file"
-
-#~ msgid "unknown compress algorithm"
-#~ msgstr "algoritmo di compressione sconosciuto"
-
-#~ msgid "file open error"
-#~ msgstr "errore durante l'apertura del file"
-
-#~ msgid "file create error"
-#~ msgstr "errore durante la creazione del file"
-
-#~ msgid "unimplemented pubkey algorithm"
-#~ msgstr "algoritmo della chiave pubblica non implementato"
-
-#~ msgid "unimplemented cipher algorithm"
-#~ msgstr "algoritmo di cifratura non implementato"
-
-#~ msgid "unknown signature class"
-#~ msgstr "classe della firma sconosciuta"
-
-#~ msgid "trust database error"
-#~ msgstr "errore nel database della fiducia"
-
-#~ msgid "resource limit"
-#~ msgstr "limite della risorsa"
-
-#~ msgid "invalid keyring"
-#~ msgstr "portachiavi non valido"
-
-#~ msgid "malformed user id"
-#~ msgstr "user id malformato"
-
-#~ msgid "file close error"
-#~ msgstr "errore durante la chiusura del file"
-
-#~ msgid "file rename error"
-#~ msgstr "errore durante la rinominazione del file"
-
-#~ msgid "file delete error"
-#~ msgstr "errore durante la cancellazione del file"
-
-#~ msgid "unexpected data"
-#~ msgstr "dati inattesi"
-
-#~ msgid "timestamp conflict"
-#~ msgstr "date in conflitto"
-
-#~ msgid "unusable pubkey algorithm"
-#~ msgstr "algoritmo della chiave pubblica non utilizzabile"
-
-#~ msgid "file exists"
-#~ msgstr "il file esiste"
-
-#~ msgid "weak key"
-#~ msgstr "chiave debole"
-
-#~ msgid "bad URI"
-#~ msgstr "URI non valida"
-
-# ??? (Md)
-#~ msgid "not processed"
-#~ msgstr "non esaminato"
-
-#~ msgid "unusable public key"
-#~ msgstr "chiave pubblica inutilizzabile"
-
-#~ msgid "unusable secret key"
-#~ msgstr "chiave segreta inutilizzabile"
-
-#~ msgid "keyserver error"
-#~ msgstr "errore del keyserver"
-
-#, fuzzy
-#~ msgid "no card"
-#~ msgstr "non cifrato"
-
-#, fuzzy
-#~ msgid "no data"
-#~ msgstr "non ci sono dati firmati\n"
-
-#~ msgid "... this is a bug (%s:%d:%s)\n"
-#~ msgstr "... questo è un bug (%s:%d:%s)\n"
-
-#~ msgid "operation is not possible without initialized secure memory\n"
-#~ msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n"
-
-#~ msgid "(you may have used the wrong program for this task)\n"
-#~ msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n"
-
-#~ msgid ""
-#~ "please see http://www.gnupg.org/why-not-idea.html for more information\n"
-#~ msgstr ""
-#~ "per ulteriori informazioni si veda http://www.gnupg.org/it/why-not-idea."
-#~ "html\n"
-
-#, fuzzy
-#~ msgid "all export-clean-* options from above"
-#~ msgstr "leggi le opzioni dal file"
-
-#, fuzzy
-#~ msgid "all import-clean-* options from above"
-#~ msgstr "leggi le opzioni dal file"
-
-#, fuzzy
-#~ msgid "expired: %s)"
-#~ msgstr "[scadenza: %s]"
-
-#, fuzzy
-#~ msgid "key %s: expired signature from key %s - skipped\n"
-#~ msgstr "chiave %08lX: classe della firma inaspettata (0x%02x) - saltata\n"
-
-#, fuzzy
-#~ msgid "Unable to clean `%s'\n"
-#~ msgstr "impossibile eseguire %s \"%s\": %s\n"
-
-#, fuzzy
-#~ msgid "No user IDs are removable.\n"
-#~ msgstr "l'user ID \"%s\" è già stato revocato\n"
-
-#~ msgid "bad passphrase or unknown cipher algorithm (%d)\n"
-#~ msgstr "passphrase errata o algoritmo di cifratura sconosciuto (%d)\n"
-
-#~ msgid "can't set client pid for the agent\n"
-#~ msgstr "impossibile impostare il pid del client dell'agent\n"
-
-#~ msgid "can't get server read FD for the agent\n"
-#~ msgstr "impossibile ottenere il FD di lettura dell'agent\n"
-
-#~ msgid "can't get server write FD for the agent\n"
-#~ msgstr "impossibile ottenere il FD di scrittura dell'agent\n"
-
-#~ msgid "select secondary key N"
-#~ msgstr "scegli la chiave secondaria N"
-
-#~ msgid "list signatures"
-#~ msgstr "elenca le firme"
-
-#~ msgid "sign the key"
-#~ msgstr "firma la chiave"
-
-#~ msgid "add a secondary key"
-#~ msgstr "aggiungi una chiave secondaria"
-
-#~ msgid "delete signatures"
-#~ msgstr "cancella le firme"
-
-#~ msgid "change the expire date"
-#~ msgstr "cambia la data di scadenza"
-
-#~ msgid "set preference list"
-#~ msgstr "imposta la lista di preferenze"
-
-#~ msgid "updated preferences"
-#~ msgstr "preferenze aggiornate"
-
-#~ msgid "No secondary key with index %d\n"
-#~ msgstr "Nessuna chiave secondaria con l'indice %d\n"
-
-#~ msgid "--nrsign-key user-id"
-#~ msgstr "--nrsign-key user-id"
-
-#~ msgid "--nrlsign-key user-id"
-#~ msgstr "--nrlsign-key user-id"
-
-#~ msgid "sign the key non-revocably"
-#~ msgstr "firma la chiave irrevocabilmente"
-
-#~ msgid "sign the key locally and non-revocably"
-#~ msgstr "firma la chiave localmente e irrevocabilmente"
-
-#~ msgid "q"
-#~ msgstr "q"
-
-#~ msgid "list"
-#~ msgstr "list"
-
-#~ msgid "l"
-#~ msgstr "l"
-
-#~ msgid "debug"
-#~ msgstr "debug"
-
-#, fuzzy
-#~ msgid "name"
-#~ msgstr "abilita"
-
-#, fuzzy
-#~ msgid "login"
-#~ msgstr "lsign"
-
-#, fuzzy
-#~ msgid "cafpr"
-#~ msgstr "fpr"
-
-#, fuzzy
-#~ msgid "forcesig"
-#~ msgstr "revsig"
-
-#, fuzzy
-#~ msgid "generate"
-#~ msgstr "errore generale"
-
-#~ msgid "passwd"
-#~ msgstr "passwd"
-
-#~ msgid "save"
-#~ msgstr "save"
-
-#~ msgid "fpr"
-#~ msgstr "fpr"
-
-#~ msgid "uid"
-#~ msgstr "uid"
-
-#~ msgid "check"
-#~ msgstr "check"
-
-#~ msgid "c"
-#~ msgstr "c"
-
-#~ msgid "sign"
-#~ msgstr "sign"
-
-#~ msgid "s"
-#~ msgstr "s"
-
-#, fuzzy
-#~ msgid "tsign"
-#~ msgstr "sign"
-
-#~ msgid "lsign"
-#~ msgstr "lsign"
-
-#~ msgid "nrsign"
-#~ msgstr "nrsign"
-
-#~ msgid "nrlsign"
-#~ msgstr "nrlsign"
-
-#~ msgid "adduid"
-#~ msgstr "adduid"
-
-#~ msgid "addphoto"
-#~ msgstr "addphoto"
-
-#~ msgid "deluid"
-#~ msgstr "deluid"
-
-#~ msgid "delphoto"
-#~ msgstr "delphoto"
-
-#, fuzzy
-#~ msgid "addcardkey"
-#~ msgstr "addkey"
-
-#~ msgid "delkey"
-#~ msgstr "delkey"
-
-#~ msgid "addrevoker"
-#~ msgstr "addrevoker"
-
-#~ msgid "delsig"
-#~ msgstr "delsign"
-
-#~ msgid "expire"
-#~ msgstr "expire"
-
-#~ msgid "primary"
-#~ msgstr "primary"
-
-#~ msgid "toggle"
-#~ msgstr "toggle"
-
-#~ msgid "t"
-#~ msgstr "t"
-
-#~ msgid "pref"
-#~ msgstr "pref"
-
-#~ msgid "showpref"
-#~ msgstr "showpref"
-
-#~ msgid "setpref"
-#~ msgstr "setpref"
-
-#~ msgid "updpref"
-#~ msgstr "updpref"
-
-#, fuzzy
-#~ msgid "keyserver"
-#~ msgstr "errore del keyserver"
-
-#~ msgid "trust"
-#~ msgstr "trust"
-
-#~ msgid "revsig"
-#~ msgstr "revsig"
-
-#~ msgid "revuid"
-#~ msgstr "revuid"
-
-#~ msgid "revkey"
-#~ msgstr "revkey"
-
-#~ msgid "disable"
-#~ msgstr "disable"
-
-#~ msgid "enable"
-#~ msgstr "abilita"
-
-#~ msgid "showphoto"
-#~ msgstr "showphoto"
-
-#~ msgid "digest algorithm `%s' is read-only in this release\n"
-#~ msgstr "in questa versione l'algoritmo digest `%s' è in sola lettura\n"
-
-#~ msgid ""
-#~ "About to generate a new %s keypair.\n"
-#~ " minimum keysize is 768 bits\n"
-#~ " default keysize is 1024 bits\n"
-#~ " highest suggested keysize is 2048 bits\n"
-#~ msgstr ""
-#~ "Sto per generare una nuova coppia di chiavi %s.\n"
-#~ " la dimensione minima è 768 bit\n"
-#~ " la dimensione predefinita è 1024 bit\n"
-#~ " la dimensione massima consigliata è 2048 bit\n"
-
-#~ msgid "DSA only allows keysizes from 512 to 1024\n"
-#~ msgstr "DSA permette solo chiavi di dimensioni tra 512 e 1024\n"
-
-#~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
-#~ msgstr ""
-#~ "la chiave è troppo corta; 1024 è il minimo valore permesso per RSA.\n"
-
-#~ msgid "keysize too small; 768 is smallest value allowed.\n"
-#~ msgstr "la chiave è troppo corta; 768 è il minimo valore permesso.\n"
-
-#~ msgid "keysize too large; %d is largest value allowed.\n"
-#~ msgstr "la chiave è troppo lunga; %d è il massimo valore permesso.\n"
-
-#~ msgid ""
-#~ "Keysizes larger than 2048 are not suggested because\n"
-#~ "computations take REALLY long!\n"
-#~ msgstr ""
-#~ "Chiavi più lunghe di 2048 non sono consigliate perchè i calcoli sono\n"
-#~ "VERAMENTE lunghi!\n"
-
-#, fuzzy
-#~ msgid "Are you sure that you want this keysize? (y/N) "
-#~ msgstr "Sei sicuro di volere una chiave di queste dimensioni? "
-
-#~ msgid ""
-#~ "Okay, but keep in mind that your monitor and keyboard radiation is also "
-#~ "very vulnerable to attacks!\n"
-#~ msgstr ""
-#~ "Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e "
-#~ "dalla tua tastiera sono molto vulnerabili ad attacchi!\n"
-
-#~ msgid "Experimental algorithms should not be used!\n"
-#~ msgstr "Gli algoritmi sperimentali non dovrebbero essere usati!\n"
-
-#~ msgid ""
-#~ "this cipher algorithm is deprecated; please use a more standard one!\n"
-#~ msgstr ""
-#~ "questo algoritmo di cifratura è deprecato; usane uno più standard!\n"
-
-#~ msgid "sorry, can't do this in batch mode\n"
-#~ msgstr "mi dispiace, non è possibile fare questo in modo batch\n"
-
-#, fuzzy
-#~ msgid "can't open file `%s': %s\n"
-#~ msgstr "impossibile aprire il file: %s\n"
-
-#~ msgid "key %08lX: key has been revoked!\n"
-#~ msgstr "chiave %08lX: la chiave è stata revocata!\n"
-
-#~ msgid "key %08lX: subkey has been revoked!\n"
-#~ msgstr "chiave %08lX: la subchiave è stata revocata!\n"
-
-#~ msgid "%08lX: key has expired\n"
-#~ msgstr "%08lX: la chiave è scaduta\n"
-
-#~ msgid "%08lX: We do NOT trust this key\n"
-#~ msgstr "%08lX: NON ci fidiamo di questa chiave!\n"
-
-#, fuzzy
-#~ msgid " (%d) RSA (auth only)\n"
-#~ msgstr " (%d) RSA (firma solo)\n"
-
-#, fuzzy
-#~ msgid " (%d) RSA (sign and auth)\n"
-#~ msgstr " (%d) RSA (firma e cifra)\n"
-
-#, fuzzy
-#~ msgid " (%d) RSA (encrypt and auth)\n"
-#~ msgstr " (%d) RSA (cifra solo)\n"
-
-#, fuzzy
-#~ msgid " (%d) RSA (sign, encrypt and auth)\n"
-#~ msgstr " (%d) RSA (firma e cifra)\n"
-
-#~ msgid "%s: can't open: %s\n"
-#~ msgstr "%s: impossibile aprire: %s\n"
-
-#~ msgid "%s: WARNING: empty file\n"
-#~ msgstr "%s: ATTENZIONE: file vuoto\n"
-
-#, fuzzy
-#~ msgid " (%d) I trust marginally\n"
-#~ msgstr " %d = Mi fido marginalmente\n"
-
-#, fuzzy
-#~ msgid " (%d) I trust fully\n"
-#~ msgstr " %d = Mi fido completamente\n"
-
-#, fuzzy
-#~ msgid "expires"
-#~ msgstr "expire"
-
-#, fuzzy
-#~ msgid ""
-#~ "\"\n"
-#~ "locally signed with your key %s at %s\n"
-#~ msgstr ""
-#~ "\"\n"
-#~ "firmata localmente con la tua chiave %08lX il %s\n"
-#~ "\n"
-
-#~ msgid "%s: can't create lock\n"
-#~ msgstr "%s: impossibile creare il lock\n"
-
-#~ msgid "%s: can't make lock\n"
-#~ msgstr "%s: impossibile creare il lock\n"
-
-#~ msgid "%s: can't create: %s\n"
-#~ msgstr "%s: impossibile creare: %s\n"
-
-#~ msgid "If you want to use this revoked key anyway, answer \"yes\"."
-#~ msgstr "Se vuoi usare comunque questa chiave revocata, rispondi \"si\"."
-
-#~ msgid "Unable to open photo \"%s\": %s\n"
-#~ msgstr "Impossibile aprire la foto \"%s\": %s\n"
-
-#~ msgid "error: missing colon\n"
-#~ msgstr "errore: mancano due punti\n"
-
-#~ msgid "error: no ownertrust value\n"
-#~ msgstr "errore: non c'è il valore della fiducia\n"
-
-#~ msgid " (main key ID %08lX)"
-#~ msgstr " (key ID principale %08lX)"
-
-#~ msgid "rev! subkey has been revoked: %s\n"
-#~ msgstr "rev! la subchiave è stata revocata: %s\n"
-
-#~ msgid "rev- faked revocation found\n"
-#~ msgstr "rev- trovata una revoca falsificata\n"
-
-#, fuzzy
-#~ msgid " [expired: %s]"
-#~ msgstr "[scadenza: %s]"
-
-#~ msgid " [expires: %s]"
-#~ msgstr "[scadenza: %s]"
-
-#, fuzzy
-#~ msgid " [revoked: %s]"
-#~ msgstr "[revocata]"
-
-#~ msgid ""
-#~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n"
-#~ msgstr ""
-#~ "ATTENZIONE: il digest `%s' non fa parte di OpenPGP.\n"
-#~ "Da usare a proprio rischio!\n"
-
-#~ msgid "|[files]|encrypt files"
-#~ msgstr "|[file]|cifra i file"
-
-#~ msgid "store only"
-#~ msgstr "immagazzina soltanto"
-
-#~ msgid "|[files]|decrypt files"
-#~ msgstr "|[file]|decifra i file"
-
-#~ msgid "sign a key non-revocably"
-#~ msgstr "firma una chiave irrevocabilmente"
-
-#~ msgid "sign a key locally and non-revocably"
-#~ msgstr "firma una chiave localmente e irrevocabilmente"
-
-#~ msgid "list only the sequence of packets"
-#~ msgstr "elenca solo la sequenza dei pacchetti"
-
-#~ msgid "export the ownertrust values"
-#~ msgstr "esporta i valori di fiducia"
-
-#~ msgid "unattended trust database update"
-#~ msgstr "aggiornamento non presidiato del database della fiducia"
-
-#~ msgid "fix a corrupted trust database"
-#~ msgstr "ripara un database della fiducia rovinato"
-
-#~ msgid "De-Armor a file or stdin"
-#~ msgstr "rimuovi l'armatura a un file o a stdin"
-
-#~ msgid "En-Armor a file or stdin"
-#~ msgstr "crea l'armatura a un file o a stdin"
-
-#~ msgid "do not force v3 signatures"
-#~ msgstr "non forza l'uso di firme v3"
-
-#~ msgid "force v4 key signatures"
-#~ msgstr "forza l'uso di firme v4"
-
-#~ msgid "do not force v4 key signatures"
-#~ msgstr "non forza l'uso di firme v4"
-
-#~ msgid "never use a MDC for encryption"
-#~ msgstr "non usa mai un MDC per cifrare"
-
-#~ msgid "use the gpg-agent"
-#~ msgstr "usa gpg-agent"
-
-#~ msgid "|[file]|write status info to file"
-#~ msgstr "|[file]|scrivi le informazioni di stato nel file"
-
-#~ msgid "|KEYID|ultimately trust this key"
-#~ msgstr "|KEYID|assegna fiducia definitiva a questa chiave"
-
-#~ msgid "emulate the mode described in RFC1991"
-#~ msgstr "emula il modo descritto in RFC 1991"
-
-#~ msgid "set all packet, cipher and digest options to OpenPGP behavior"
-#~ msgstr ""
-#~ "imposta tutte le opzioni di pacchetto,\n"
-#~ "cifrario e digest per OpenPGP"
-
-#~ msgid "set all packet, cipher and digest options to PGP 2.x behavior"
-#~ msgstr ""
-#~ "imposta tutte le opzioni di pacchetto, cifrario e digest per PGP 2.x"
-
-#~ msgid "|NAME|use message digest algorithm NAME for passphrases"
-#~ msgstr "|NOME|usa l'algoritmo di message digest NOME per le passphrase"
-
-#~ msgid "throw keyid field of encrypted packets"
-#~ msgstr "elimina il campo keyid dei pacchetti cifrati"
-
-#~ msgid "Show Photo IDs"
-#~ msgstr "Mostra le fotografie"
-
-#~ msgid "Don't show Photo IDs"
-#~ msgstr "Non mostra le fotografie"
-
-#~ msgid "Set command line to view Photo IDs"
-#~ msgstr "Imposta la riga di comando per vedere le fotografie"
-
-#~ msgid "compress algorithm `%s' is read-only in this release\n"
-#~ msgstr ""
-#~ "in questa versione l'algoritmo di compressione `%s' è in sola lettura\n"
-
-#~ msgid "compress algorithm must be in range %d..%d\n"
-#~ msgstr "l'algoritmo di compressione deve essere tra %d e %d\n"
-
-#~ msgid ""
-#~ "%08lX: It is not sure that this key really belongs to the owner\n"
-#~ "but it is accepted anyway\n"
-#~ msgstr ""
-#~ "%08lX: Non è sicuro che questa chiave appartenga veramente al "
-#~ "proprietario\n"
-#~ "ma è accettata comunque\n"
-
-#~ msgid "preference %c%lu is not valid\n"
-#~ msgstr "la preferenza %c%lu non è valida\n"
-
-#~ msgid "key %08lX: not a rfc2440 key - skipped\n"
-#~ msgstr "chiave %08lX: chiave non rfc2440 - saltata\n"
-
-#~ msgid ""
-#~ "NOTE: Elgamal primary key detected - this may take some time to import\n"
-#~ msgstr ""
-#~ "NOTA: trovata una chiave primaria Elgamal - importarla può essere lungo\n"
-
-#~ msgid " (default)"
-#~ msgstr " (predefinito)"
-
-#~ msgid "%s%c %4u%c/%08lX created: %s expires: %s"
-#~ msgstr "%s%c %4u%c/%08lX creata: %s scade: %s"
-
-#~ msgid "can't get key from keyserver: %s\n"
-#~ msgstr "impossibile scaricare la chiave dal keyserver: %s\n"
-
-#~ msgid "success sending to `%s' (status=%u)\n"
-#~ msgstr "inviata con successo a `%s' (status=%u)\n"
-
-#~ msgid "failed sending to `%s': status=%u\n"
-#~ msgstr "invio a `%s' fallito: status=%u\n"
-
-#~ msgid "this keyserver does not support --search-keys\n"
-#~ msgstr "questo keyserver non gestisce --search-keys\n"
-
-#~ msgid "can't search keyserver: %s\n"
-#~ msgstr "impossibile cercare sul keyserver: %s\n"
-
-#~ msgid ""
-#~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
-#~ "signatures!\n"
-#~ msgstr ""
-#~ "chiave %08lX: questa è una chiave ElGamal generata da PGP che NON è "
-#~ "sicura per le firme!\n"
-
-#~ msgid ""
-#~ "key %08lX has been created %lu second in future (time warp or clock "
-#~ "problem)\n"
-#~ msgstr ""
-#~ "la chiave %08lX è stata creata %lu secondo nel futuro (salto nel tempo\n"
-#~ "o problema con l'orologio)\n"
-
-#~ msgid ""
-#~ "key %08lX has been created %lu seconds in future (time warp or clock "
-#~ "problem)\n"
-#~ msgstr ""
-#~ "la chiave %08lX è stata creata %lu secondi nel futuro (salto nel tempo\n"
-#~ "o problema con l'orologio)\n"
-
-#~ msgid "key %08lX marked as ultimately trusted\n"
-#~ msgstr "chiavi %08lX marcate come definitivamente affidabile\n"
-
-#~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n"
-#~ msgstr "ignorata la firma dalla chiave per firme Elgamal %08lX a %08lX\n"
-
-#~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n"
-#~ msgstr "ignorata la firma da %08lX alla chiave per firme Elgamal %08lX\n"
-
-#~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-#~ msgstr ""
-#~ "controllo al livello %d firmato=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
-
-#~ msgid ""
-#~ "Select the algorithm to use.\n"
-#~ "\n"
-#~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n"
-#~ "for signatures. This is the suggested algorithm because verification of\n"
-#~ "DSA signatures are much faster than those of ElGamal.\n"
-#~ "\n"
-#~ "ElGamal is an algorithm which can be used for signatures and encryption.\n"
-#~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
-#~ "only\n"
-#~ "and a sign+encrypt; actually it is the same, but some parameters must be\n"
-#~ "selected in a special way to create a safe key for signatures: this "
-#~ "program\n"
-#~ "does this but other OpenPGP implementations are not required to "
-#~ "understand\n"
-#~ "the signature+encryption flavor.\n"
-#~ "\n"
-#~ "The first (primary) key must always be a key which is capable of "
-#~ "signing;\n"
-#~ "this is the reason why the encryption only ElGamal key is not available "
-#~ "in\n"
-#~ "this menu."
-#~ msgstr ""
-#~ "Seleziona l'algoritmo da usare.\n"
-#~ "\n"
-#~ "DSA (alias DSS) è un algoritmo usabile solo per firmare. E l'algoritmo\n"
-#~ "suggerito perché verificare firme DSA è molto più veloce di quelle "
-#~ "ElGamal.\n"
-#~ "\n"
-#~ "ElGamal è un algoritmo usabile per firmare e cifrare.\n"
-#~ "OpenPGP distingue tra due versioni di questo algoritmo: una solo per "
-#~ "firmare\n"
-#~ "e una per firmare e cifrare. In realtà è sempre lo stesso, ma per creare\n"
-#~ "firme sicure per la cifratura occorre scegliere in un modo particolare "
-#~ "alcuni\n"
-#~ "parametri: questo programma lo fa ma non è richiesto che altre "
-#~ "implementazioni\n"
-#~ "di OpenPGP capiscano la versione per firmare e cifrare.\n"
-#~ "\n"
-#~ "La prima chiave (primaria) deve sempre essere una chiave in grado di "
-#~ "firmare;\n"
-#~ "questo è il motivo per cui le chiavi ElGamal solo per cifrare non sono\n"
-#~ "disponibili in questo menù."
-
-#~ msgid ""
-#~ "Although these keys are defined in RFC2440 they are not suggested\n"
-#~ "because they are not supported by all programs and signatures created\n"
-#~ "with them are quite large and very slow to verify."
-#~ msgstr ""
-#~ "Anche se queste chiavi sono definite da RFC2400 non sono suggerite perché "
-#~ "non\n"
-#~ "sono gestite da tutti i programmi e le firme create sono grandi e lunghe "
-#~ "da\n"
-#~ "verificare."
-
-#~ msgid "%lu keys so far checked (%lu signatures)\n"
-#~ msgstr "Per ora sono state controllate %lu chiavi (%lu firme)\n"
-
-#~ msgid "key incomplete\n"
-#~ msgstr "chiave incompleta\n"
-
-#~ msgid "key %08lX incomplete\n"
-#~ msgstr "chiave %08lX incompleta\n"
+"Sintassi: gpg-check-pattern [opzioni] patternfile\n"
+"Controllare una passphrase data su stdin rispetto al patternfile\n"
diff --git a/po/ja.po b/po/ja.po
index 64ffa5e..b268dd9 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,9 +8,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gnupg 2.2.20\n"
+"Project-Id-Version: gnupg 2.2.23\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n"
-"PO-Revision-Date: 2020-07-07 09:37+0900\n"
+"PO-Revision-Date: 2020-11-12 12:59+0900\n"
"Last-Translator: NIIBE Yutaka <gniibe@fsij.org>\n"
"Language-Team: none\n"
"Language: ja\n"
@@ -1670,6 +1670,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "*警告*: '%s'ã¯ç©ºã®ãƒ•ã‚¡ã‚¤ãƒ«ã§ã™\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ '%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "ダイジェスト・アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "'%s'ã‹ã‚‰èª­ã¿è¾¼ã¿\n"
@@ -1680,10 +1688,6 @@ msgstr ""
"*警告*: 共通éµæš—å·æ–¹å¼ %s (%d) ã®å¼·åˆ¶ãŒã€å—å–人ã®å„ªå…ˆæŒ‡å®šã‚’ãã‚€ãã¾ã™\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "æš—å·ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ '%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "*警告*: éµ%sã¯ã€%sモードã§ã¯ã€æš—å·åŒ–ã«é©ã—ã¾ã›ã‚“\n"
@@ -1930,10 +1934,13 @@ msgid "remove keys from the secret keyring"
msgstr "秘密éµãƒªãƒ³ã‚°ã‹ã‚‰éµã‚’削除"
msgid "quickly sign a key"
-msgstr "éµã«ã™ã°ã‚„ãç½²å"
+msgstr "ã™ã°ã‚„ãéµã«ç½²å"
msgid "quickly sign a key locally"
-msgstr "éµã¸ã™ã°ã‚„ãローカルã«ç½²å"
+msgstr "ã™ã°ã‚„ãéµã¸ãƒ­ãƒ¼ã‚«ãƒ«ã«ç½²å"
+
+msgid "quickly revoke a key signature"
+msgstr "ã™ã°ã‚„ãéµã¸ã®ç½²åを失効"
msgid "sign a key"
msgstr "éµã«ç½²å"
@@ -2388,10 +2395,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%sã¯%sã§ã¯ã¾ã æ©Ÿèƒ½ã—ã¾ã›ã‚“\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "ダイジェスト・アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "圧縮アルゴリズム'%s'ã‚’%sモードã§ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“\n"
@@ -3464,6 +3467,14 @@ msgid "Nothing to sign.\n"
msgstr "ç½²åã™ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã›ã‚“。\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "ã‚ãªãŸã«ã‚ˆã£ã¦ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
+
+#, c-format
+msgid "revoking the key signature failed: %s\n"
+msgstr "éµã®ç½²åã®å¤±åŠ¹ã«å¤±æ•—ã—ã¾ã—ãŸ: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "'%s'ã¯ã€æœ‰åŠ¹ãªæœ‰åŠ¹æœŸé™ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
@@ -3750,9 +3761,6 @@ msgstr "ãã‚Œã§ã‚‚本当ã«å¤±åŠ¹ã—ãŸã„ã§ã™ã‹? (y/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "ã“ã®ç½²åã«å¯¾ã™ã‚‹å¤±åŠ¹è¨¼æ˜Žæ›¸ã‚’作æˆã—ã¾ã™ã‹? (y/N) "
-msgid "Not signed by you.\n"
-msgstr "ã‚ãªãŸã«ã‚ˆã£ã¦ç½²åã•ã‚Œã¦ã„ã¾ã›ã‚“。\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "ã“れらã®ãƒ¦ãƒ¼ã‚¶IDã«éµ%sã§ç½²åã—ã¾ã—ãŸ:\n"
diff --git a/po/nb.po b/po/nb.po
index 7ffe3e8..6f80570 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -1703,6 +1703,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "ADVARSEL: «%s» er en tom fil\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "leser fra «%s»\n"
@@ -1714,10 +1722,6 @@ msgstr ""
"mottakers oppsett\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke algoritme «%s» i %s-modus\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "ADVARSEL: nøkkel %s egner seg ikke for kryptering i %s-modus\n"
@@ -1972,6 +1976,11 @@ msgstr "hurtigsigner nøkkel"
msgid "quickly sign a key locally"
msgstr "hurtigsigner nøkkel lokalt"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "opphev bruker-ID raskt"
+
msgid "sign a key"
msgstr "signer nøkkel"
@@ -2424,10 +2433,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s virker ikke enda med %s\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "du kan ikke bruke algoritme «%s» i %s-modus\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"
@@ -3530,6 +3535,15 @@ msgid "Nothing to sign.\n"
msgstr "Ingenting å signere.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Ikke signert av deg.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontroll av opprettet signatur mislyktes: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "«%s» er en ugyldig utløpstid\n"
@@ -3825,9 +3839,6 @@ msgstr "Er du sikker på at du vil oppheve den? (j/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Vil du lage et opphevelsessertifikat for denne signaturen? (j/N) "
-msgid "Not signed by you.\n"
-msgstr "Ikke signert av deg.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Du har signert disse bruker-id-ene med nøkkelen %s:\n"
diff --git a/po/pl.po b/po/pl.po
index c8c482e..b43e72f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1672,6 +1672,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "OSTRZEŻENIE: plik ,,%s'' jest pusty\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "szyfr ,,%s'' nie może być używany w trybie %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "algorytm skrótu ,,%s'' nie może być używany w trybie %s\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "odczyt z ,,%s''\n"
@@ -1683,10 +1691,6 @@ msgstr ""
"adresata\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "szyfr ,,%s'' nie może być używany w trybie %s\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "OSTRZEŻENIE: klucz %s nie nadaje się do szyfrowania w trybie %s\n"
@@ -1942,6 +1946,11 @@ msgstr "szybkie złożenie podpisu na kluczu"
msgid "quickly sign a key locally"
msgstr "szybkie złożenie prywatnego podpisu na kluczu"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "szybkie unieważnienie identyfikatora użytkownika"
+
msgid "sign a key"
msgstr "złożenie podpisu na kluczu"
@@ -2419,10 +2428,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s jeszcze nie działa z %s!\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "algorytm skrótu ,,%s'' nie może być używany w trybie %s\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "algorytm kompresji ,,%s'' nie może być używany w trybie %s\n"
@@ -3544,6 +3549,15 @@ msgid "Nothing to sign.\n"
msgstr "Nie ma nic do podpisania.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Nie podpisane przez ciebie.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "sprawdzenie złożonego podpisu nie powiodło się: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr ",,%s'' nie jest poprawnym czasem wygaśnięcia\n"
@@ -3836,9 +3850,6 @@ msgstr "Czy dalej chcesz go unieważnić? (t/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Stworzyć certyfikat unieważnienia tego podpisu? (t/N) "
-msgid "Not signed by you.\n"
-msgstr "Nie podpisane przez ciebie.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Te identyfikatory na kluczu %s sÄ… podpisane przez Ciebie:\n"
diff --git a/po/pt.po b/po/pt.po
index 9afcdda..e0d7402 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -1782,6 +1782,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "AVISO: `%s' é um ficheiro vazio\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "lendo de `%s'\n"
@@ -1793,10 +1801,6 @@ msgstr ""
"ao forçar a cifra simétrica %s (%d) viola as preferências do destinatário\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "AVISO: \"%s\" é uma opção depreciada\n"
@@ -2076,6 +2080,11 @@ msgstr "assinar uma chave"
msgid "quickly sign a key locally"
msgstr "assinar uma chave localmente"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "gerar um novo par de chaves"
+
msgid "sign a key"
msgstr "assinar uma chave"
@@ -2566,10 +2575,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s não faz sentido com %s!\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "não pode utilizar %s enquanto estiver no modo %s\n"
@@ -3740,6 +3745,15 @@ msgid "Nothing to sign.\n"
msgstr "Nada para assinar com a chave %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " assinado por %08lX em %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "verificação da assinatura criada falhou: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s não é um conjunto de caracteres válido\n"
@@ -4043,10 +4057,6 @@ msgstr "Tem a certeza de que quer revogá-la de qualquer forma? (s/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Gerar um certificado de revogação para esta assinatura? (s/N)"
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " assinado por %08lX em %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Assinou estes identificadores de utilizadores:\n"
diff --git a/po/ro.po b/po/ro.po
index edb6f11..c46e819 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -1800,6 +1800,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "AVERTISMENT: `%s' este un fiÅŸier gol\n"
#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "nu puteţi folosi algoritmul de cifrare `%s' câtă vreme în modul %s\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "nu puteţi folosi algorimul de rezumat `%s' câtă vreme în modul %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "citesc din `%s'\n"
@@ -1812,11 +1822,6 @@ msgstr ""
"destinatarului\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "nu puteţi folosi algoritmul de cifrare `%s' câtă vreme în modul %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "AVERTISMENT: \"%s\" este o opţiune învechită\n"
@@ -2100,6 +2105,11 @@ msgstr "semnează o cheie"
msgid "quickly sign a key locally"
msgstr "semnează o cheie local"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "generează o nouă perechi de chei"
+
msgid "sign a key"
msgstr "semnează o cheie"
@@ -2624,11 +2634,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s nu merge încă cu %s!\n"
#, fuzzy, c-format
-#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "nu puteţi folosi algorimul de rezumat `%s' câtă vreme în modul %s\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm `%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "nu puteţi folosi algoritmul de compresie `%s' câtă vreme în modul %s\n"
@@ -3780,6 +3785,15 @@ msgstr "Nu există acest ID utilizator.\n"
msgid "Nothing to sign.\n"
msgstr "Nimic de semnat cu cheia %s\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "verificarea semnăturii create a eşuat: %s\n"
+
#, fuzzy, c-format
#| msgid "`%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -4094,9 +4108,6 @@ msgstr "Sunteţi încă sigur(ă) că doriţi să o revocaţi? (d/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Creaţi un certificat de revocare pentru această semnătură? (d/N) "
-msgid "Not signed by you.\n"
-msgstr ""
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "AÅ£i semnat aceste ID-uri utilizator pe cheia %s:\n"
diff --git a/po/ru.po b/po/ru.po
index 4601bf6..d522a21 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1682,6 +1682,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "Внимание: файл '%s' пуÑÑ‚\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "хеш-функцию '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "чтение из '%s'\n"
@@ -1693,10 +1701,6 @@ msgstr ""
" нарушает Ð¿Ñ€ÐµÐ´Ð¿Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»Ñ\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "Внимание: ключ %s не подходит Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² режиме %s\n"
@@ -1955,6 +1959,11 @@ msgstr "быÑтро подпиÑать ключ"
msgid "quickly sign a key locally"
msgstr "быÑтро подпиÑать ключ локально"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "быÑтро отозвать идентификатор пользователÑ"
+
msgid "sign a key"
msgstr "подпиÑать ключ"
@@ -2423,10 +2432,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s пока не работает ÑовмеÑтно Ñ %s!\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "хеш-функцию '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "алгоритм ÑÐ¶Ð°Ñ‚Ð¸Ñ '%s' Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать в режиме %s\n"
@@ -3535,6 +3540,15 @@ msgid "Nothing to sign.\n"
msgstr "ПодпиÑывать нечего.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Вами не подпиÑано.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "Ñбой проверки Ñозданной подпиÑи: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "'%s' - не допуÑтимый Ñрок дейÑтвиÑ\n"
@@ -3831,9 +3845,6 @@ msgstr "Вы уверены, что хотите отозвать? (y/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Создать Ñертификат отзыва Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ подпиÑи? (y/N) "
-msgid "Not signed by you.\n"
-msgstr "Вами не подпиÑано.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Ð’Ñ‹ подпиÑали Ñти идентификаторы пользователей на ключе %s:\n"
diff --git a/po/sk.po b/po/sk.po
index b71e5d0..a1e12cd 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -1785,6 +1785,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "VAROVANIE: súbor `%s' je prázdny\n"
#, fuzzy, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "nemôžete použiť šifrovací algoritmus \"%s\" v móde %s\n"
+
+#, fuzzy, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "nemôžete použiť hashovací algoritmus \"%s\" v móde %s\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "Äítam z `%s'\n"
@@ -1795,10 +1803,6 @@ msgid ""
msgstr "vyžiadaná symetrická šifra %s (%d) nevyhovuje predvoľbám príjemcu\n"
#, fuzzy, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "nemôžete použiť šifrovací algoritmus \"%s\" v móde %s\n"
-
-#, fuzzy, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "VAROVÃNÃ: použitie parametra \"%s\" sa neodporúÄa\n"
@@ -2086,6 +2090,11 @@ msgstr "podpísaÅ¥ kľúÄ"
msgid "quickly sign a key locally"
msgstr "podpísaÅ¥ kÄ¾ÃºÄ lokálne"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "vytvoriÅ¥ nový pár kľúÄov"
+
msgid "sign a key"
msgstr "podpísaÅ¥ kľúÄ"
@@ -2580,10 +2589,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ešte nepracuje s %s\n"
#, fuzzy, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "nemôžete použiť hashovací algoritmus \"%s\" v móde %s\n"
-
-#, fuzzy, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "nemôžete použiť kompresný algoritmus \"%s\" v móde %s\n"
@@ -3757,6 +3762,15 @@ msgid "Nothing to sign.\n"
msgstr "NiÄ na podpísanie kľúÄom %08lX\n"
#, fuzzy, c-format
+msgid "Not signed by you.\n"
+msgstr " podpísané %08lX v %s%s\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontrola vytvoreného podpisu sa nepodarila: %s\n"
+
+#, fuzzy, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "%s nie je platná znaková sada\n"
@@ -4060,10 +4074,6 @@ msgstr "Ste si istý, že ho chcete stále revokovať? (a/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "VytvoriÅ¥ pre tento podpis revokaÄný certifikát? (a/N)"
-#, fuzzy
-msgid "Not signed by you.\n"
-msgstr " podpísané %08lX v %s%s\n"
-
#, fuzzy, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Podpísali ste nasledujúce identifikátory užívateľa:\n"
diff --git a/po/sv.po b/po/sv.po
index 7e20e3e..68dbe8a 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1878,6 +1878,17 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "VARNING: \"%s\" är en tom fil\n"
#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "du får inte använda chifferalgoritmen \"%s\" när du är i %s-läget\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"du får inte använda sammandragsalgoritmen \"%s\" när du är i %s-läget\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "läser från \"%s\"\n"
@@ -1890,11 +1901,6 @@ msgstr ""
"mottagarinställningarna\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "du får inte använda chifferalgoritmen \"%s\" när du är i %s-läget\n"
-
-#, fuzzy, c-format
#| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n"
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "VARNING: \"%s\" är en föråldrad flagga - den har ingen effekt\n"
@@ -2181,6 +2187,11 @@ msgstr "signera en nyckel"
msgid "quickly sign a key locally"
msgstr "signera en nyckel lokalt"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "generera ett nytt nyckelpar"
+
msgid "sign a key"
msgstr "signera en nyckel"
@@ -2701,12 +2712,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s fungerar ännu inte med %s\n"
#, fuzzy, c-format
-#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"du får inte använda sammandragsalgoritmen \"%s\" när du är i %s-läget\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm `%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr ""
@@ -3881,6 +3886,15 @@ msgstr "Ingen sådan användaridentitet.\n"
msgid "Nothing to sign.\n"
msgstr "Det finns inget att signera med nyckeln %s\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr "Inte signerad av dig.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "kontroll av den skapade signaturen misslyckades: %s\n"
+
#, fuzzy, c-format
#| msgid "`%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -4195,9 +4209,6 @@ msgstr "Är du säker på att du fortfarande vill spärra den? (j/N)"
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Vill du skapa ett spärrcertifikat för denna signatur? (j/N)"
-msgid "Not signed by you.\n"
-msgstr "Inte signerad av dig.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Du har signerat följande användaridentiteter med nyckeln %s:\n"
diff --git a/po/tr.po b/po/tr.po
index ce56448..651d671 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -1825,6 +1825,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "UYARI: \"%s\" dosyası boş\n"
#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "%2$s kipindeyken '%1$s' şifreleme algoritması kullanılamaz\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "%2$s kipindeyken '%1$s' özet algoritması kullanılamaz\n"
+
+#, fuzzy, c-format
#| msgid "reading from `%s'\n"
msgid "reading from '%s'\n"
msgstr "`%s'den okunuyor\n"
@@ -1837,11 +1847,6 @@ msgstr ""
"zorlanıyor\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm `%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "%2$s kipindeyken '%1$s' şifreleme algoritması kullanılamaz\n"
-
-#, fuzzy, c-format
#| msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n"
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "UYARI: \"%s\" seçeneği eskidi - artık etkisiz\n"
@@ -2125,6 +2130,11 @@ msgstr "bir anahtarı imzalar"
msgid "quickly sign a key locally"
msgstr "bir anahtarı yerel olarak imzalar"
+#, fuzzy
+#| msgid "generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "yeni bir anahtar çifti üretir"
+
msgid "sign a key"
msgstr "bir anahtarı imzalar"
@@ -2634,11 +2644,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s, %s ile henüz çalışmıyor\n"
#, fuzzy, c-format
-#| msgid "you may not use digest algorithm `%s' while in %s mode\n"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "%2$s kipindeyken '%1$s' özet algoritması kullanılamaz\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm `%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "%2$s kipindeyken '%1$s' sıkıştırma algoritması kullanılamaz\n"
@@ -3824,6 +3829,15 @@ msgstr "Böyle bir kullanıcı kimliği yok.\n"
msgid "Nothing to sign.\n"
msgstr "%s anahtarı ile imzalanacak hiçbir şey yok\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "oluşturulan imzanın denetimi başarısız: %s\n"
+
#, fuzzy, c-format
#| msgid "`%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -4147,9 +4161,6 @@ msgstr ""
"Bu imza için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H veya "
"y/N) "
-msgid "Not signed by you.\n"
-msgstr ""
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Bu kullanıcı kimliklerini %s anahtarı üzerinde imzalamışsınız:\n"
diff --git a/po/uk.po b/po/uk.po
index f542ec1..c2ff82a 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -1704,6 +1704,16 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "УВÐГÐ: файл «%s» Ñ” порожнім\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr ""
+"алгоритм ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¸Ñ… Ñум «%s» не можна викориÑтовувати у режимі "
+"%s\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· «%s»\n"
@@ -1715,10 +1725,6 @@ msgstr ""
"параметрам отримувача\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "алгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "УВÐГÐ: ключ %s не можна викориÑтовувати Ð´Ð»Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ режимі %s\n"
@@ -1980,6 +1986,11 @@ msgstr "швидко підпиÑати ключ"
msgid "quickly sign a key locally"
msgstr "швидко підпиÑати ключ локально"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "швидке Ð²Ñ–Ð´ÐºÐ»Ð¸ÐºÐ°Ð½Ð½Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ‚Ð¾Ñ€Ð° кориÑтувача"
+
msgid "sign a key"
msgstr "підпиÑати ключ"
@@ -2459,12 +2470,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s ще не може працювати разом з %s\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr ""
-"алгоритм ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð¸Ñ… Ñум «%s» не можна викориÑтовувати у режимі "
-"%s\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "алгоритм ÑтиÑÐºÐ°Ð½Ð½Ñ Â«%s» не можна викориÑтовувати у режимі %s\n"
@@ -3584,6 +3589,15 @@ msgid "Nothing to sign.\n"
msgstr "Ðічого підпиÑувати.\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "Ðе підпиÑано вами.\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "невдала Ñпроба перевірити Ñтворений підпиÑ: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "«%s» не Ñ” коректним запиÑом Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñтроку дії\n"
@@ -3884,9 +3898,6 @@ msgstr "Ви Ñправді бажаєте відкликати його? (y/N Ð
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "Створити Ñертифікат Ð²Ñ–Ð´ÐºÐ»Ð¸ÐºÐ°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ підпиÑу? (y/N або Ñ‚/Ð) "
-msgid "Not signed by you.\n"
-msgstr "Ðе підпиÑано вами.\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "Вами підпиÑано ці ідентифікатори кориÑтувачів у ключі %s:\n"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index fde65c1..f3fcc60 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1679,6 +1679,14 @@ msgid "WARNING: '%s' is an empty file\n"
msgstr "警告:‘%s’是一个空文件\n"
#, c-format
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "密文算法 ‘%s’ å¯èƒ½ä¸èƒ½è¢«ç”¨äºŽ %s 模å¼\n"
+
+#, c-format
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "摘è¦ç®—法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n"
+
+#, c-format
msgid "reading from '%s'\n"
msgstr "正在从‘%s’读å–\n"
@@ -1688,10 +1696,6 @@ msgid ""
msgstr "警告: 强制对称密文 %s (%d) 与接收者的å好设置冲çª\n"
#, c-format
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "密文算法 ‘%s’ å¯èƒ½ä¸èƒ½è¢«ç”¨äºŽ %s 模å¼\n"
-
-#, c-format
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "警告: 密钥 %s 在 %s 模å¼ä¸‹ä¸é€‚用于加密\n"
@@ -1941,6 +1945,11 @@ msgstr "快速签å一个密钥"
msgid "quickly sign a key locally"
msgstr "快速本地签å一个密钥"
+#, fuzzy
+#| msgid "quickly revoke a user-id"
+msgid "quickly revoke a key signature"
+msgstr "快速åŠé”€ä¸€ä¸ªç”¨æˆ·æ ‡è¯†"
+
msgid "sign a key"
msgstr "ç­¾å一个密钥"
@@ -2392,10 +2401,6 @@ msgid "%s does not yet work with %s\n"
msgstr "%s å°šä¸èƒ½å’Œ %s 并用\n"
#, c-format
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "摘è¦ç®—法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n"
-
-#, c-format
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "压缩算法‘%s’ä¸èƒ½åœ¨ %s 模å¼ä¸‹ä½¿ç”¨\n"
@@ -3464,6 +3469,15 @@ msgid "Nothing to sign.\n"
msgstr "没有å¯è¢«ç­¾å的东西。\n"
#, c-format
+msgid "Not signed by you.\n"
+msgstr "并éžç”±æ‚¨ç­¾å。\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "检查已建立的签åæ—¶å‘生错误: %s\n"
+
+#, c-format
msgid "'%s' is not a valid expiration time\n"
msgstr "‘%s’ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„过期时间\n"
@@ -3746,9 +3760,6 @@ msgstr "您确定您ä»ç„¶æƒ³è¦åŠé”€å®ƒå—?(y/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "è¦ä¸ºè¿™ä»½ç­¾å生æˆä¸€ä»½åŠé”€è¯ä¹¦å—?(y/N) "
-msgid "Not signed by you.\n"
-msgstr "并éžç”±æ‚¨ç­¾å。\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "您已ç»ç­¾åæ¥å¯†é’¥ %s 上的这些用户标识:\n"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 049d3d3..8d8cf1a 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1716,6 +1716,16 @@ msgstr "'%s' 已經被壓縮了\n"
msgid "WARNING: '%s' is an empty file\n"
msgstr "警告: '%s' 是個空檔案\n"
+#, fuzzy, c-format
+#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
+msgid "cipher algorithm '%s' may not be used in %s mode\n"
+msgstr "ä½ ä¸è©²å°‡ '%s' 編密演算法用於 %s 模å¼\n"
+
+#, fuzzy, c-format
+#| msgid "you may not use digest algorithm '%s' while in %s mode\n"
+msgid "digest algorithm '%s' may not be used in %s mode\n"
+msgstr "ä½ ä¸è©²å°‡ '%s' 摘è¦æ¼”算法用於 %s 模å¼\n"
+
#, c-format
msgid "reading from '%s'\n"
msgstr "正在從 '%s' 讀å–\n"
@@ -1726,11 +1736,6 @@ msgid ""
msgstr "警告: 強迫使用 %s (%d) å°ç¨±å¼ç·¨å¯†æ³•æœƒé•å收件者å好設定\n"
#, fuzzy, c-format
-#| msgid "you may not use cipher algorithm '%s' while in %s mode\n"
-msgid "cipher algorithm '%s' may not be used in %s mode\n"
-msgstr "ä½ ä¸è©²å°‡ '%s' 編密演算法用於 %s 模å¼\n"
-
-#, fuzzy, c-format
#| msgid "WARNING: \"%s%s\" is an obsolete option - it has no effect\n"
msgid "WARNING: key %s is not suitable for encryption in %s mode\n"
msgstr "警告: \"%s%s\" 是已廢棄的é¸é … - 沒有效果\n"
@@ -1990,6 +1995,11 @@ msgstr "快速簽署金鑰"
msgid "quickly sign a key locally"
msgstr "快速在本機簽署金鑰"
+#, fuzzy
+#| msgid "quickly generate a new key pair"
+msgid "quickly revoke a key signature"
+msgstr "快速產生新的金鑰å°"
+
msgid "sign a key"
msgstr "簽署金鑰"
@@ -2455,11 +2465,6 @@ 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"
-msgid "digest algorithm '%s' may not be used in %s mode\n"
-msgstr "ä½ ä¸è©²å°‡ '%s' 摘è¦æ¼”算法用於 %s 模å¼\n"
-
-#, fuzzy, c-format
#| msgid "you may not use compression algorithm '%s' while in %s mode\n"
msgid "compression algorithm '%s' may not be used in %s mode\n"
msgstr "ä½ ä¸è©²å°‡ '%s' 壓縮演算法用於 %s 模å¼\n"
@@ -3559,6 +3564,15 @@ msgstr "沒有相符的使用者 ID."
msgid "Nothing to sign.\n"
msgstr "沒有æ±è¥¿å¯ä»¥ç°½ç½².\n"
+#, c-format
+msgid "Not signed by you.\n"
+msgstr "並éžç”±ä½ æ‰€ç°½ç½².\n"
+
+#, fuzzy, c-format
+#| msgid "checking created signature failed: %s\n"
+msgid "revoking the key signature failed: %s\n"
+msgstr "檢查已建立的簽章時出錯: %s\n"
+
#, fuzzy, c-format
#| msgid "'%s' is not a valid signature expiration\n"
msgid "'%s' is not a valid expiration time\n"
@@ -3862,9 +3876,6 @@ msgstr "你確定ä»ç„¶æƒ³è¦æ’¤éŠ·å®ƒå—Ž? (y/N) "
msgid "Create a revocation certificate for this signature? (y/N) "
msgstr "è¦ç‚ºé€™ä»½ç°½ç« å»ºç«‹ä¸€ä»½æ’¤éŠ·æ†‘證嗎? (y/N) "
-msgid "Not signed by you.\n"
-msgstr "並éžç”±ä½ æ‰€ç°½ç½².\n"
-
#, c-format
msgid "You have signed these user IDs on key %s:\n"
msgstr "你已經簽署了金鑰 %s 上的這些使用者 ID:\n"
diff --git a/scd/Makefile.am b/scd/Makefile.am
index cbd1f9f..32be6ab 100644
--- a/scd/Makefile.am
+++ b/scd/Makefile.am
@@ -17,7 +17,7 @@
## Process this file with automake to produce Makefile.in
-EXTRA_DIST = ChangeLog-2011 scdaemon-w32info.rc
+EXTRA_DIST = ChangeLog-2011 scdaemon-w32info.rc scdaemon.w32-manifest.in
libexec_PROGRAMS = scdaemon
@@ -26,7 +26,7 @@ AM_CPPFLAGS = $(LIBUSB_CPPFLAGS)
include $(top_srcdir)/am/cmacros.am
if HAVE_W32_SYSTEM
-resource_objs += scdaemon-w32info.o
+scdaemon_robjs = $(resource_objs) scdaemon-w32info.o
endif
AM_CFLAGS = $(LIBGCRYPT_CFLAGS) \
@@ -48,4 +48,4 @@ scdaemon_SOURCES = \
scdaemon_LDADD = $(libcommonpth) \
$(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(LIBASSUAN_LIBS) $(NPTH_LIBS) \
$(LIBUSB_LIBS) $(GPG_ERROR_LIBS) \
- $(LIBINTL) $(DL_LIBS) $(NETLIBS) $(LIBICONV) $(resource_objs)
+ $(LIBINTL) $(DL_LIBS) $(NETLIBS) $(LIBICONV) $(scdaemon_robjs)
diff --git a/scd/apdu.c b/scd/apdu.c
index dfd9451..f53194b 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -67,7 +67,7 @@
#include "ccid-driver.h"
struct dev_list {
- struct ccid_dev_table *ccid_table;
+ void *table;
const char *portstr;
int idx;
int idx_max;
@@ -502,6 +502,13 @@ host_sw_string (long err)
case SW_HOST_NO_PINPAD: return "no pinpad";
case SW_HOST_ALREADY_CONNECTED: return "already connected";
case SW_HOST_CANCELLED: return "cancelled";
+ case SW_HOST_USB_OTHER: return "USB general error";
+ case SW_HOST_USB_IO: return "USB I/O error";
+ case SW_HOST_USB_ACCESS: return "USB permission denied";
+ case SW_HOST_USB_NO_DEVICE:return "USB no device";
+ case SW_HOST_USB_BUSY: return "USB busy";
+ case SW_HOST_USB_TIMEOUT: return "USB timeout";
+ case SW_HOST_USB_OVERFLOW: return "USB overflow";
default: return "unknown host status error";
}
}
@@ -675,7 +682,7 @@ pcsc_get_status (int slot, unsigned int *status, int on_wire)
reader_table[slot].pcsc.current_state =
(rdrstates[0].event_state & ~PCSC_STATE_CHANGED);
- if (DBG_CARD_IO)
+ if (DBG_READER)
log_debug
("pcsc_get_status_change: %s%s%s%s%s%s%s%s%s%s\n",
(rdrstates[0].event_state & PCSC_STATE_IGNORE)? " ignore":"",
@@ -1527,7 +1534,7 @@ open_ccid_reader (struct dev_list *dl)
return -1;
slotp = reader_table + slot;
- err = ccid_open_reader (dl->portstr, dl->idx, dl->ccid_table,
+ err = ccid_open_reader (dl->portstr, dl->idx, dl->table,
&slotp->ccid.handle, &slotp->rdrname);
if (!err)
{
@@ -1886,14 +1893,14 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p)
#ifdef HAVE_LIBUSB
if (opt.disable_ccid)
{
- dl->ccid_table = NULL;
+ dl->table = NULL;
dl->idx_max = 1;
}
else
{
gpg_error_t err;
- err = ccid_dev_scan (&dl->idx_max, &dl->ccid_table);
+ err = ccid_dev_scan (&dl->idx_max, &dl->table);
if (err)
return err;
@@ -1915,7 +1922,7 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p)
}
}
#else
- dl->ccid_table = NULL;
+ dl->table = NULL;
dl->idx_max = 1;
#endif /* HAVE_LIBUSB */
@@ -1927,8 +1934,8 @@ void
apdu_dev_list_finish (struct dev_list *dl)
{
#ifdef HAVE_LIBUSB
- if (dl->ccid_table)
- ccid_dev_scan_finish (dl->ccid_table, dl->idx_max);
+ if (dl->table)
+ ccid_dev_scan_finish (dl->table, dl->idx_max);
#endif
xfree (dl);
npth_mutex_unlock (&reader_table_lock);
@@ -2044,7 +2051,7 @@ apdu_open_reader (struct dev_list *dl, int app_empty)
int slot;
#ifdef HAVE_LIBUSB
- if (dl->ccid_table)
+ if (dl->table)
{ /* CCID readers. */
int readerno;
@@ -2081,7 +2088,7 @@ apdu_open_reader (struct dev_list *dl, int app_empty)
while (dl->idx < dl->idx_max)
{
- unsigned int bai = ccid_get_BAI (dl->idx, dl->ccid_table);
+ unsigned int bai = ccid_get_BAI (dl->idx, dl->table);
if (DBG_READER)
log_debug ("apdu_open_reader: BAI=%x\n", bai);
diff --git a/scd/apdu.h b/scd/apdu.h
index 1392aab..1cd04c2 100644
--- a/scd/apdu.h
+++ b/scd/apdu.h
@@ -72,7 +72,15 @@ enum {
SW_HOST_ABORTED = 0x1000d,
SW_HOST_NO_PINPAD = 0x1000e,
SW_HOST_ALREADY_CONNECTED = 0x1000f,
- SW_HOST_CANCELLED = 0x10010
+ SW_HOST_CANCELLED = 0x10010,
+ SW_HOST_DEVICE_ACCESS = 0x10011,
+ SW_HOST_USB_OTHER = 0x10020,
+ SW_HOST_USB_IO = 0x10021,
+ SW_HOST_USB_ACCESS = 0x10023,
+ SW_HOST_USB_NO_DEVICE = 0x10024,
+ SW_HOST_USB_BUSY = 0x10026,
+ SW_HOST_USB_TIMEOUT = 0x10027,
+ SW_HOST_USB_OVERFLOW = 0x10028
};
struct dev_list;
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index ccc360f..6245a53 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -1,6 +1,7 @@
/* app-openpgp.c - The OpenPGP card application.
- * Copyright (C) 2003, 2004, 2005, 2007, 2008,
- * 2009, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * Copyright (C) 2003-2005, 2007-2009,
+ * 2013-2015 Free Software Foundation, Inc.
+ * Copyright (C) 2003-2005, 2007-2009, 2013-2015, 2020 g10 Code GmbH
*
* This file is part of GnuPG.
*
@@ -50,17 +51,7 @@
#include <assert.h>
#include <time.h>
-#if GNUPG_MAJOR_VERSION == 1
-/* This is used with GnuPG version < 1.9. The code has been source
- copied from the current GnuPG >= 1.9 and is maintained over
- there. */
-#include "options.h"
-#include "errors.h"
-#include "memory.h"
-#include "cardglue.h"
-#else /* GNUPG_MAJOR_VERSION != 1 */
#include "scdaemon.h"
-#endif /* GNUPG_MAJOR_VERSION != 1 */
#include "../common/util.h"
#include "../common/i18n.h"
@@ -176,6 +167,7 @@ struct app_local_s {
is usually only required for cross checks
because the length of an S-expression is
implicitly available. */
+ unsigned char keygrip_str[41]; /* The keygrip, null terminated */
} pk[3];
unsigned char status_indicator; /* The card status indicator. */
@@ -1291,7 +1283,6 @@ get_remaining_tries (app_t app, int adminpw)
the according hex representation to FPR. Caller must have provide
a buffer at FPR of least 41 bytes. Returns 0 on success or an
error code. */
-#if GNUPG_MAJOR_VERSION > 1
static gpg_error_t
retrieve_fpr_from_card (app_t app, int keyno, char *fpr)
{
@@ -1310,7 +1301,6 @@ retrieve_fpr_from_card (app_t app, int keyno, char *fpr)
xfree (relptr);
return err;
}
-#endif /*GNUPG_MAJOR_VERSION > 1*/
/* Retrieve the public key material for the RSA key, whose fingerprint
@@ -1319,7 +1309,6 @@ retrieve_fpr_from_card (app_t app, int keyno, char *fpr)
public exponent at E and ELEN. Returns zero on success, an error
code on failure. Caller must release the allocated buffers at M
and E if the function returns success. */
-#if GNUPG_MAJOR_VERSION > 1
static gpg_error_t
retrieve_key_material (FILE *fp, const char *hexkeyid,
const unsigned char **m, size_t *mlen,
@@ -1424,7 +1413,6 @@ retrieve_key_material (FILE *fp, const char *hexkeyid,
xfree (line);
return err;
}
-#endif /*GNUPG_MAJOR_VERSION > 1*/
static gpg_error_t
@@ -1638,6 +1626,24 @@ ecc_read_pubkey (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
}
+/* Compute the keygrip form the local info and store it there. */
+static gpg_error_t
+store_keygrip (app_t app, int keyno)
+{
+ gpg_error_t err;
+ unsigned char grip[20];
+
+ err = keygrip_from_canon_sexp (app->app_local->pk[keyno].key,
+ app->app_local->pk[keyno].keylen,
+ grip);
+ if (err)
+ return err;
+
+ bin2hex (grip, 20, app->app_local->pk[keyno].keygrip_str);
+ return 0;
+}
+
+
/* Parse tag-length-value data for public key in BUFFER of BUFLEN
length. Key of KEYNO in APP is updated with an S-expression of
public key. When CTRL is not NULL, fingerprint is computed with
@@ -1689,6 +1695,8 @@ read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
app->app_local->pk[keyno].key = keybuf;
/* Decrement for trailing '\0' */
app->app_local->pk[keyno].keylen = len - 1;
+
+ err = store_keygrip (app, keyno);
}
return err;
@@ -1705,7 +1713,6 @@ read_public_key (app_t app, ctrl_t ctrl, u32 created_at, int keyno,
consuming to send it just for the fun of it. However, given that we
use the same code in gpg 1.4, we can't use the gcry S-expression
here but need to open encode it. */
-#if GNUPG_MAJOR_VERSION > 1
static gpg_error_t
get_public_key (app_t app, int keyno)
{
@@ -1756,6 +1763,12 @@ get_public_key (app_t app, int keyno)
2, le_value, &buffer, &buflen);
if (err)
{
+ /* Yubikey returns wrong code. Fix it up. */
+ /*
+ * NOTE: It's not correct to blindly change the error code,
+ * however, for our experiences, it is only Yubikey...
+ */
+ err = gpg_error (GPG_ERR_NO_OBJ);
log_error (_("reading public key failed: %s\n"), gpg_strerror (err));
goto leave;
}
@@ -1836,17 +1849,18 @@ get_public_key (app_t app, int keyno)
app->app_local->pk[keyno].key = (unsigned char*)keybuf;
/* Decrement for trailing '\0' */
app->app_local->pk[keyno].keylen = len - 1;
+
+ err = store_keygrip (app, keyno);
}
leave:
/* Set a flag to indicate that we tried to read the key. */
- app->app_local->pk[keyno].read_done = 1;
+ if (!err)
+ app->app_local->pk[keyno].read_done = 1;
xfree (buffer);
return err;
}
-#endif /* GNUPG_MAJOR_VERSION > 1 */
-
/* Send the KEYPAIRINFO back. KEY needs to be in the range [1,3].
@@ -1856,11 +1870,6 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key)
{
int keyno = key - 1;
gpg_error_t err = 0;
- /* Note that GnuPG 1.x does not need this and it would be too time
- consuming to send it just for the fun of it. */
-#if GNUPG_MAJOR_VERSION > 1
- unsigned char grip[20];
- char gripstr[41];
char idbuf[50];
const char *usage;
@@ -1872,14 +1881,6 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key)
if (!app->app_local->pk[keyno].key)
goto leave; /* No such key - ignore. */
- err = keygrip_from_canon_sexp (app->app_local->pk[keyno].key,
- app->app_local->pk[keyno].keylen,
- grip);
- if (err)
- goto leave;
-
- bin2hex (grip, 20, gripstr);
-
switch (keyno)
{
case 0: usage = "sc"; break;
@@ -1890,14 +1891,12 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key)
sprintf (idbuf, "OPENPGP.%d", keyno+1);
send_status_info (ctrl, "KEYPAIRINFO",
- gripstr, 40,
+ app->app_local->pk[keyno].keygrip_str, 40,
idbuf, strlen (idbuf),
usage, strlen (usage),
NULL, (size_t)0);
leave:
-#endif /* GNUPG_MAJOR_VERSION > 1 */
-
return err;
}
@@ -1906,38 +1905,73 @@ send_keypair_info (app_t app, ctrl_t ctrl, int key)
static gpg_error_t
do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags)
{
+ gpg_error_t err = 0;
+
(void)flags;
- do_getattr (app, ctrl, "EXTCAP");
- do_getattr (app, ctrl, "MANUFACTURER");
- do_getattr (app, ctrl, "DISP-NAME");
- do_getattr (app, ctrl, "DISP-LANG");
- do_getattr (app, ctrl, "DISP-SEX");
- do_getattr (app, ctrl, "PUBKEY-URL");
- do_getattr (app, ctrl, "LOGIN-DATA");
- do_getattr (app, ctrl, "KEY-FPR");
- if (app->card_version > 0x0100)
- do_getattr (app, ctrl, "KEY-TIME");
- do_getattr (app, ctrl, "CA-FPR");
- do_getattr (app, ctrl, "CHV-STATUS");
- do_getattr (app, ctrl, "SIG-COUNTER");
- if (app->app_local->extcap.kdf_do)
- do_getattr (app, ctrl, "KDF");
- if (app->app_local->extcap.private_dos)
- {
- do_getattr (app, ctrl, "PRIVATE-DO-1");
- do_getattr (app, ctrl, "PRIVATE-DO-2");
- if (app->did_chv2)
- do_getattr (app, ctrl, "PRIVATE-DO-3");
- if (app->did_chv3)
- do_getattr (app, ctrl, "PRIVATE-DO-4");
- }
- send_keypair_info (app, ctrl, 1);
- send_keypair_info (app, ctrl, 2);
- send_keypair_info (app, ctrl, 3);
+ err = do_getattr (app, ctrl, "EXTCAP");
+ if (!err)
+ err = do_getattr (app, ctrl, "MANUFACTURER");
+ if (!err)
+ err = do_getattr (app, ctrl, "DISP-NAME");
+ if (!err)
+ err = do_getattr (app, ctrl, "DISP-LANG");
+ if (!err)
+ err = do_getattr (app, ctrl, "DISP-SEX");
+ if (!err)
+ err = do_getattr (app, ctrl, "PUBKEY-URL");
+ if (!err)
+ err = do_getattr (app, ctrl, "LOGIN-DATA");
+ if (!err)
+ err = do_getattr (app, ctrl, "KEY-FPR");
+ if (!err && app->card_version > 0x0100)
+ err = do_getattr (app, ctrl, "KEY-TIME");
+ if (!err)
+ err = do_getattr (app, ctrl, "CA-FPR");
+ if (!err)
+ err = do_getattr (app, ctrl, "CHV-STATUS");
+ if (!err)
+ err = do_getattr (app, ctrl, "SIG-COUNTER");
+ if (!err && app->app_local->extcap.kdf_do)
+ {
+ err = do_getattr (app, ctrl, "KDF");
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ }
+ if (!err && app->app_local->extcap.private_dos)
+ {
+ if (!err)
+ err = do_getattr (app, ctrl, "PRIVATE-DO-1");
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ if (!err)
+ err = do_getattr (app, ctrl, "PRIVATE-DO-2");
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ if (!err && app->did_chv2)
+ err = do_getattr (app, ctrl, "PRIVATE-DO-3");
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ if (!err && app->did_chv3)
+ err = do_getattr (app, ctrl, "PRIVATE-DO-4");
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ }
+ if (!err)
+ err = send_keypair_info (app, ctrl, 1);
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ if (!err)
+ err = send_keypair_info (app, ctrl, 2);
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
+ if (!err)
+ err = send_keypair_info (app, ctrl, 3);
+ if (gpg_err_code (err) == GPG_ERR_NO_OBJ)
+ err = 0;
/* Note: We do not send the Cardholder Certificate, because that is
relatively long and for OpenPGP applications not really needed. */
- return 0;
+ return err;
}
@@ -1950,7 +1984,6 @@ static gpg_error_t
do_readkey (app_t app, int advanced, const char *keyid,
unsigned char **pk, size_t *pklen)
{
-#if GNUPG_MAJOR_VERSION > 1
gpg_error_t err;
int keyno;
unsigned char *buf;
@@ -2008,9 +2041,6 @@ do_readkey (app_t app, int advanced, const char *keyid,
}
return 0;
-#else
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-#endif
}
/* Read the standard certificate of an OpenPGP v2 card. It is
@@ -2021,7 +2051,6 @@ static gpg_error_t
do_readcert (app_t app, const char *certid,
unsigned char **cert, size_t *certlen)
{
-#if GNUPG_MAJOR_VERSION > 1
gpg_error_t err;
unsigned char *buffer;
size_t buflen;
@@ -2050,9 +2079,6 @@ do_readcert (app_t app, const char *certid,
}
xfree (relptr);
return err;
-#else
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-#endif
}
@@ -2372,26 +2398,30 @@ verify_chv2 (app_t app,
if (rc)
return rc;
app->did_chv2 = 1;
+
+ if (!app->did_chv1 && !app->force_chv1 && pinvalue)
+ {
+ /* For convenience we verify CHV1 here too. We do this only if
+ the card is not configured to require a verification before
+ each CHV1 controlled operation (force_chv1) and if we are not
+ using the pinpad (PINVALUE == NULL). */
+ rc = iso7816_verify (app->slot, 0x81, pinvalue, pinlen);
+ if (gpg_err_code (rc) == GPG_ERR_BAD_PIN)
+ rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED);
+ if (rc)
+ {
+ log_error (_("verify CHV%d failed: %s\n"), 1, gpg_strerror (rc));
+ flush_cache_after_error (app);
+ }
+ else
+ app->did_chv1 = 1;
+ }
}
else
- rc = 0;
-
- if (!app->did_chv1 && !app->force_chv1 && pinvalue)
{
- /* For convenience we verify CHV1 here too. We do this only if
- the card is not configured to require a verification before
- each CHV1 controlled operation (force_chv1) and if we are not
- using the pinpad (PINVALUE == NULL). */
- rc = iso7816_verify (app->slot, 0x81, pinvalue, pinlen);
- if (gpg_err_code (rc) == GPG_ERR_BAD_PIN)
- rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED);
+ rc = verify_a_chv (app, pincb, pincb_arg, 1, 0, &pinvalue, &pinlen);
if (rc)
- {
- log_error (_("verify CHV%d failed: %s\n"), 1, gpg_strerror (rc));
- flush_cache_after_error (app);
- }
- else
- app->did_chv1 = 1;
+ return rc;
}
xfree (pinvalue);
@@ -2449,13 +2479,11 @@ verify_chv3 (app_t app,
{
int rc = 0;
-#if GNUPG_MAJOR_VERSION != 1
if (!opt.allow_admin)
{
log_info (_("access to admin commands is not configured\n"));
return gpg_error (GPG_ERR_EACCES);
}
-#endif
if (!app->did_chv3)
{
@@ -2644,7 +2672,7 @@ do_writecert (app_t app, ctrl_t ctrl,
const unsigned char *certdata, size_t certdatalen)
{
(void)ctrl;
-#if GNUPG_MAJOR_VERSION > 1
+
if (strcmp (certidstr, "OPENPGP.3"))
return gpg_error (GPG_ERR_INV_ID);
if (!certdata || !certdatalen)
@@ -2654,9 +2682,6 @@ do_writecert (app_t app, ctrl_t ctrl,
if (certdatalen > app->app_local->extcap.max_certlen_3)
return gpg_error (GPG_ERR_TOO_LARGE);
return do_setattr (app, "CERT-3", pincb, pincb_arg, certdata, certdatalen);
-#else
- return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-#endif
}
@@ -3232,11 +3257,11 @@ build_ecc_privkey_template (app_t app, int keyno,
const unsigned char *ecc_q, size_t ecc_q_len,
unsigned char **result, size_t *resultlen)
{
- unsigned char privkey[2+2];
+ unsigned char privkey[2*(1+3)];
size_t privkey_len;
- unsigned char exthdr[2+2+1];
+ unsigned char exthdr[2+2+3];
size_t exthdr_len;
- unsigned char suffix[2+1];
+ unsigned char suffix[2+3];
size_t suffix_len;
unsigned char *tp;
size_t datalen;
@@ -4345,6 +4370,89 @@ check_against_given_fingerprint (app_t app, const char *fpr, int key)
}
+/* Check KEYIDSTR, if it's valid.
+ When KEYNO is 0, it means it's for PIN check.
+ Otherwise, KEYNO corresponds to the slot (signing, decipher and auth).
+ KEYIDSTR is either:
+ (1) Serial number
+ (2) Serial number "/" fingerprint
+ (3) Serial number "[CHV3]"
+ (4) keygrip
+
+ When KEYNO is 0 and KEYIDSTR is for a keygrip, the keygrip should
+ be to be compared is the first one (keygrip for signing).
+ When KEYNO is 1, KEYIDSTR is for a keygrip, and R_USE_AUTH is not
+ NULL, OpenPGP.1 is first tested and then OpenPGP.3. In the latter
+ case 1 is stored at R_USE_AUTH
+ */
+static int
+check_keyidstr (app_t app, const char *keyidstr, int keyno, int *r_use_auth)
+{
+ int rc;
+ const char *s;
+ int n;
+ const char *fpr = NULL;
+
+ if (r_use_auth)
+ *r_use_auth = 0;
+
+ if (strlen (keyidstr) < 32)
+ return gpg_error (GPG_ERR_INV_ID);
+ else
+ {
+ char *serial;
+
+ for (s=keyidstr, n=0; hexdigitp (s); s++, n++)
+ ;
+
+ /* Check if it's a keygrip */
+ if (n == 40)
+ {
+ const unsigned char *keygrip_str;
+
+ keygrip_str = app->app_local->pk[keyno?keyno-1:0].keygrip_str;
+ if (!strncmp (keygrip_str, keyidstr, 40))
+ return 0;
+ else if (keyno == 1 && r_use_auth
+ && !strncmp (app->app_local->pk[2].keygrip_str,
+ keyidstr, 40))
+ {
+ *r_use_auth = 1;
+ return 0;
+ }
+ else
+ return gpg_error (GPG_ERR_INV_ID);
+ }
+
+ if (n != 32 || strncmp (keyidstr, "D27600012401", 12))
+ return gpg_error (GPG_ERR_INV_ID);
+ else if (!*s)
+ ; /* no fingerprint given: we allow this for now. */
+ else if (*s == '/')
+ fpr = s + 1;
+
+ serial = app_get_serialno (app);
+ if (strncmp (serial, keyidstr, 32))
+ {
+ xfree (serial);
+ return gpg_error (GPG_ERR_WRONG_CARD);
+ }
+
+ xfree (serial);
+ }
+
+ /* If a fingerprint has been specified check it against the one on
+ the card. This is allows for a meaningful error message in case
+ the key on the card has been replaced but the shadow information
+ known to gpg was not updated. If there is no fingerprint, gpg
+ will detect a bogus signature anyway due to the
+ verify-after-signing feature. */
+ rc = (fpr&&keyno)? check_against_given_fingerprint (app, fpr, keyno) : 0;
+
+ return rc;
+}
+
+
/* Compute a digital signature on INDATA which is expected to be the
raw message digest. For this application the KEYIDSTR consists of
the serialnumber and the fingerprint delimited by a slash.
@@ -4389,10 +4497,6 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
int rc;
unsigned char data[19+64];
size_t datalen;
- unsigned char tmp_sn[20]; /* Actually 16 bytes but also for the fpr. */
- const char *s;
- int n;
- const char *fpr = NULL;
unsigned long sigcount;
int use_auth = 0;
int exmode, le_value;
@@ -4437,40 +4541,13 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
;
else if (!strcmp (keyidstr, "OPENPGP.3"))
use_auth = 1;
- else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12))
- return gpg_error (GPG_ERR_INV_ID);
else
{
- for (s=keyidstr, n=0; hexdigitp (s); s++, n++)
- ;
- if (n != 32)
- return gpg_error (GPG_ERR_INV_ID);
- else if (!*s)
- ; /* no fingerprint given: we allow this for now. */
- else if (*s == '/')
- fpr = s + 1;
- else
- return gpg_error (GPG_ERR_INV_ID);
-
- for (s=keyidstr, n=0; n < 16; s += 2, n++)
- tmp_sn[n] = xtoi_2 (s);
-
- if (app->serialnolen != 16)
- return gpg_error (GPG_ERR_INV_CARD);
- if (memcmp (app->serialno, tmp_sn, 16))
- return gpg_error (GPG_ERR_WRONG_CARD);
+ rc = check_keyidstr (app, keyidstr, 1, &use_auth);
+ if (rc)
+ return rc;
}
- /* If a fingerprint has been specified check it against the one on
- the card. This is allows for a meaningful error message in case
- the key on the card has been replaced but the shadow information
- known to gpg was not updated. If there is no fingerprint, gpg
- will detect a bogus signature anyway due to the
- verify-after-signing feature. */
- rc = fpr? check_against_given_fingerprint (app, fpr, 1) : 0;
- if (rc)
- return rc;
-
/* Concatenate prefix and digest. */
#define X(a,b,d) \
if (hashalgo == GCRY_MD_ ## a && (d) ) \
@@ -4585,10 +4662,6 @@ do_auth (app_t app, const char *keyidstr,
unsigned char **outdata, size_t *outdatalen )
{
int rc;
- unsigned char tmp_sn[20]; /* Actually 16 but we use it also for the fpr. */
- const char *s;
- int n;
- const char *fpr = NULL;
if (!keyidstr || !*keyidstr)
return gpg_error (GPG_ERR_INV_VALUE);
@@ -4614,42 +4687,15 @@ do_auth (app_t app, const char *keyidstr,
}
/* Check whether an OpenPGP card of any version has been requested. */
- if (!strcmp (keyidstr, "OPENPGP.3"))
+ if (!ascii_strcasecmp (keyidstr, "OPENPGP.3"))
;
- else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12))
- return gpg_error (GPG_ERR_INV_ID);
else
{
- for (s=keyidstr, n=0; hexdigitp (s); s++, n++)
- ;
- if (n != 32)
- return gpg_error (GPG_ERR_INV_ID);
- else if (!*s)
- ; /* no fingerprint given: we allow this for now. */
- else if (*s == '/')
- fpr = s + 1;
- else
- return gpg_error (GPG_ERR_INV_ID);
-
- for (s=keyidstr, n=0; n < 16; s += 2, n++)
- tmp_sn[n] = xtoi_2 (s);
-
- if (app->serialnolen != 16)
- return gpg_error (GPG_ERR_INV_CARD);
- if (memcmp (app->serialno, tmp_sn, 16))
- return gpg_error (GPG_ERR_WRONG_CARD);
+ rc = check_keyidstr (app, keyidstr, 3, NULL);
+ if (rc)
+ return rc;
}
- /* If a fingerprint has been specified check it against the one on
- the card. This is allows for a meaningful error message in case
- the key on the card has been replaced but the shadow information
- known to gpg was not updated. If there is no fingerprint, gpg
- will detect a bogus signature anyway due to the
- verify-after-signing feature. */
- rc = fpr? check_against_given_fingerprint (app, fpr, 3) : 0;
- if (rc)
- return rc;
-
rc = verify_chv2 (app, pincb, pincb_arg);
if (!rc)
{
@@ -4684,10 +4730,7 @@ do_decipher (app_t app, const char *keyidstr,
unsigned int *r_info)
{
int rc;
- unsigned char tmp_sn[20]; /* actually 16 but we use it also for the fpr. */
- const char *s;
int n;
- const char *fpr = NULL;
int exmode, le_value;
unsigned char *fixbuf = NULL;
int padind = 0;
@@ -4697,41 +4740,15 @@ do_decipher (app_t app, const char *keyidstr,
return gpg_error (GPG_ERR_INV_VALUE);
/* Check whether an OpenPGP card of any version has been requested. */
- if (!strcmp (keyidstr, "OPENPGP.2"))
+ if (!ascii_strcasecmp (keyidstr, "OPENPGP.2"))
;
- else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12))
- return gpg_error (GPG_ERR_INV_ID);
else
{
- for (s=keyidstr, n=0; hexdigitp (s); s++, n++)
- ;
- if (n != 32)
- return gpg_error (GPG_ERR_INV_ID);
- else if (!*s)
- ; /* no fingerprint given: we allow this for now. */
- else if (*s == '/')
- fpr = s + 1;
- else
- return gpg_error (GPG_ERR_INV_ID);
-
- for (s=keyidstr, n=0; n < 16; s += 2, n++)
- tmp_sn[n] = xtoi_2 (s);
-
- if (app->serialnolen != 16)
- return gpg_error (GPG_ERR_INV_CARD);
- if (memcmp (app->serialno, tmp_sn, 16))
- return gpg_error (GPG_ERR_WRONG_CARD);
+ rc = check_keyidstr (app, keyidstr, 2, NULL);
+ if (rc)
+ return rc;
}
- /* If a fingerprint has been specified check it against the one on
- the card. This is allows for a meaningful error message in case
- the key on the card has been replaced but the shadow information
- known to gpg was not updated. If there is no fingerprint, the
- decryption won't produce the right plaintext anyway. */
- rc = fpr? check_against_given_fingerprint (app, fpr, 2) : 0;
- if (rc)
- return rc;
-
rc = verify_chv2 (app, pincb, pincb_arg);
if (rc)
return rc;
@@ -4945,38 +4962,19 @@ do_check_pin (app_t app, const char *keyidstr,
gpg_error_t (*pincb)(void*, const char *, char **),
void *pincb_arg)
{
- unsigned char tmp_sn[20];
- const char *s;
- int n;
+ int rc;
int admin_pin = 0;
if (!keyidstr || !*keyidstr)
return gpg_error (GPG_ERR_INV_VALUE);
- /* Check whether an OpenPGP card of any version has been requested. */
- if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12))
- return gpg_error (GPG_ERR_INV_ID);
+ rc = check_keyidstr (app, keyidstr, 0, NULL);
+ if (rc)
+ return rc;
- for (s=keyidstr, n=0; hexdigitp (s); s++, n++)
- ;
- if (n != 32)
- return gpg_error (GPG_ERR_INV_ID);
- else if (!*s)
- ; /* No fingerprint given: we allow this for now. */
- else if (*s == '/')
- ; /* We ignore a fingerprint. */
- else if (!strcmp (s, "[CHV3]") )
+ if ((strlen (keyidstr) >= 32+6 && !strcmp (keyidstr+32, "[CHV3]"))
+ || (strlen (keyidstr) >= 40+6 && !strcmp (keyidstr+40, "[CHV3]")))
admin_pin = 1;
- else
- return gpg_error (GPG_ERR_INV_ID);
-
- for (s=keyidstr, n=0; n < 16; s += 2, n++)
- tmp_sn[n] = xtoi_2 (s);
-
- if (app->serialnolen != 16)
- return gpg_error (GPG_ERR_INV_CARD);
- if (memcmp (app->serialno, tmp_sn, 16))
- return gpg_error (GPG_ERR_WRONG_CARD);
/* Yes, there is a race conditions: The user might pull the card
right here and we won't notice that. However this is not a
diff --git a/scd/app.c b/scd/app.c
index bb33a56..957345e 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -973,18 +973,18 @@ report_change (int slot, int old_status, int cur_status)
char *homestr, *envstr;
char *fname;
char templ[50];
- FILE *fp;
+ estream_t fp;
snprintf (templ, sizeof templ, "reader_%d.status", slot);
fname = make_filename (gnupg_homedir (), templ, NULL );
- fp = fopen (fname, "w");
+ fp = es_fopen (fname, "w");
if (fp)
{
- fprintf (fp, "%s\n",
+ es_fprintf (fp, "%s\n",
(cur_status & 1)? "USABLE":
(cur_status & 4)? "ACTIVE":
(cur_status & 2)? "PRESENT": "NOCARD");
- fclose (fp);
+ es_fclose (fp);
}
xfree (fname);
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index 466efaa..e255ace 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -100,18 +100,16 @@
/* Max length of buffer with out CCID message header of 10-byte
Sending: 547 for RSA-4096 key import
APDU size = 540 (24+4+256+256)
- commnd + lc + le = 4 + 3 + 0
+ command + lc + le = 4 + 3 + 0
Sending: write data object of cardholder certificate
APDU size = 2048
- commnd + lc + le = 4 + 3 + 0
+ command + lc + le = 4 + 3 + 0
Receiving: 2048 for cardholder certificate
*/
#define CCID_MAX_BUF (2048+7+10)
/* CCID command timeout. */
#define CCID_CMD_TIMEOUT (5*1000)
-/* OpenPGPcard v2.1 requires huge timeout for key generation. */
-#define CCID_CMD_TIMEOUT_LONGER (60*1000)
/* Depending on how this source is used we either define our error
output to go to stderr or to the GnuPG based logging functions. We
@@ -285,6 +283,24 @@ static int send_escape_cmd (ccid_driver_t handle, const unsigned char *data,
size_t datalen, unsigned char *result,
size_t resultmax, size_t *resultlen);
+
+static int
+map_libusb_error (int usberr)
+{
+ switch (usberr)
+ {
+ case 0: return 0;
+ case LIBUSB_ERROR_IO: return CCID_DRIVER_ERR_USB_IO;
+ case LIBUSB_ERROR_ACCESS: return CCID_DRIVER_ERR_USB_ACCESS;
+ case LIBUSB_ERROR_NO_DEVICE:return CCID_DRIVER_ERR_USB_NO_DEVICE;
+ case LIBUSB_ERROR_BUSY: return CCID_DRIVER_ERR_USB_BUSY;
+ case LIBUSB_ERROR_TIMEOUT: return CCID_DRIVER_ERR_USB_TIMEOUT;
+ case LIBUSB_ERROR_OVERFLOW: return CCID_DRIVER_ERR_USB_OVERFLOW;
+ }
+ return CCID_DRIVER_ERR_USB_OTHER;
+}
+
+
/* Convert a little endian stored 4 byte value into an unsigned
integer. */
static unsigned int
@@ -960,7 +976,7 @@ get_escaped_usb_string (libusb_device_handle *idev, int idx,
rc = libusb_control_transfer (idev, LIBUSB_ENDPOINT_IN,
LIBUSB_REQUEST_GET_DESCRIPTOR,
(LIBUSB_DT_STRING << 8), 0,
- (char*)buf, sizeof buf, 1000 /* ms timeout */);
+ buf, sizeof buf, 1000 /* ms timeout */);
#ifdef USE_NPTH
npth_protect ();
#endif
@@ -975,7 +991,7 @@ get_escaped_usb_string (libusb_device_handle *idev, int idx,
rc = libusb_control_transfer (idev, LIBUSB_ENDPOINT_IN,
LIBUSB_REQUEST_GET_DESCRIPTOR,
(LIBUSB_DT_STRING << 8) + idx, langid,
- (char*)buf, sizeof buf, 1000 /* ms timeout */);
+ buf, sizeof buf, 1000 /* ms timeout */);
#ifdef USE_NPTH
npth_protect ();
#endif
@@ -1250,9 +1266,10 @@ ccid_get_reader_list (void)
static int
ccid_vendor_specific_init (ccid_driver_t handle)
{
+ int r = 0;
+
if (handle->id_vendor == VENDOR_VEGA && handle->id_product == VEGA_ALPHA)
{
- int r;
/*
* Vega alpha has a feature to show retry counter on the pinpad
* display. But it assumes that the card returns the value of
@@ -1264,11 +1281,33 @@ ccid_vendor_specific_init (ccid_driver_t handle)
const unsigned char cmd[] = { '\xb5', '\x01', '\x00', '\x03', '\x00' };
r = send_escape_cmd (handle, cmd, sizeof (cmd), NULL, 0, NULL);
- if (r != 0 && r != CCID_DRIVER_ERR_CARD_INACTIVE
- && r != CCID_DRIVER_ERR_NO_CARD)
- return r;
}
+ else if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532)
+ {
+ /*
+ * It seems that SEQ may be out of sync between host and the card reader,
+ * and SET_INTERFACE doesn't reset it. Make sure it works at the init.
+ */
+ abort_cmd (handle, 0);
+ }
+
+ if (r != 0 && r != CCID_DRIVER_ERR_CARD_INACTIVE
+ && r != CCID_DRIVER_ERR_NO_CARD)
+ return r;
+ else
+ return 0;
+}
+
+static int
+ccid_vendor_specific_setup (ccid_driver_t handle)
+{
+ if (handle->id_vendor == VENDOR_SCM && handle->id_product == SCM_SPR532)
+ {
+ DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n");
+ send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3,
+ NULL, 0, NULL);
+ }
return 0;
}
@@ -1290,7 +1329,7 @@ static libusb_device **ccid_usb_dev_list;
static struct ccid_dev_table ccid_dev_table[MAX_DEVICE];
gpg_error_t
-ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p)
+ccid_dev_scan (int *idx_max_p, void **t_p)
{
ssize_t n;
libusb_device *dev;
@@ -1417,9 +1456,10 @@ ccid_dev_scan (int *idx_max_p, struct ccid_dev_table **t_p)
}
void
-ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max)
+ccid_dev_scan_finish (void *tbl0, int max)
{
int i;
+ struct ccid_dev_table *tbl = tbl0;
for (i = 0; i < max; i++)
{
@@ -1438,12 +1478,13 @@ ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max)
}
unsigned int
-ccid_get_BAI (int idx, struct ccid_dev_table *tbl)
+ccid_get_BAI (int idx, void *tbl0)
{
int n;
int bus, addr, intf;
unsigned int bai;
libusb_device *dev;
+ struct ccid_dev_table *tbl = tbl0;
n = tbl[idx].n;
dev = ccid_usb_dev_list[n];
@@ -1468,7 +1509,8 @@ intr_cb (struct libusb_transfer *transfer)
{
ccid_driver_t handle = transfer->user_data;
- DEBUGOUT_1 ("CCID: interrupt callback %d\n", transfer->status);
+ DEBUGOUT_2 ("CCID: interrupt callback %d (%d)\n",
+ transfer->status, transfer->actual_length);
if (transfer->status == LIBUSB_TRANSFER_TIMED_OUT)
{
@@ -1484,13 +1526,50 @@ intr_cb (struct libusb_transfer *transfer)
}
else if (transfer->status == LIBUSB_TRANSFER_COMPLETED)
{
- if (transfer->actual_length == 2
- && transfer->buffer[0] == 0x50
- && (transfer->buffer[1] & 1) == 0)
+ size_t len = transfer->actual_length;
+ unsigned char *p = transfer->buffer;
+ int card_removed = 0;
+
+ while (len)
+ {
+ if (*p == RDR_to_PC_NotifySlotChange)
+ {
+ if (len < 2)
+ break;
+
+ DEBUGOUT_1 ("CCID: NotifySlotChange: %02x\n", p[1]);
+
+ if ((p[1] & 1))
+ card_removed = 0;
+ else
+ card_removed = 1;
+
+ p += 2;
+ len -= 2;
+ }
+ else if (*p == RDR_to_PC_HardwareError)
+ {
+ if (len < 4)
+ break;
+
+ DEBUGOUT_1 ("CCID: hardware error detected: %02x\n", p[3]);
+ p += 4;
+ len -= 4;
+ }
+ else
+ {
+ DEBUGOUT_1 ("CCID: unknown intr: %02x\n", p[0]);
+ break;
+ }
+ }
+
+ if (card_removed)
{
DEBUGOUT ("CCID: card removed\n");
handle->powered_off = 1;
+#if defined(GNUPG_MAJOR_VERSION)
scd_kick_the_loop ();
+#endif
}
else
{
@@ -1505,7 +1584,9 @@ intr_cb (struct libusb_transfer *transfer)
device_removed:
DEBUGOUT ("CCID: device removed\n");
handle->powered_off = 1;
+#if defined(GNUPG_MAJOR_VERSION)
scd_kick_the_loop ();
+#endif
}
}
@@ -1515,6 +1596,7 @@ ccid_setup_intr (ccid_driver_t handle)
struct libusb_transfer *transfer;
int err;
+ libusb_clear_halt (handle->idev, handle->ep_intr);
transfer = libusb_alloc_transfer (0);
handle->transfer = transfer;
libusb_fill_interrupt_transfer (transfer, handle->idev, handle->ep_intr,
@@ -1547,7 +1629,7 @@ ccid_usb_thread (void *arg)
static int
ccid_open_usb_reader (const char *spec_reader_name,
- int idx, struct ccid_dev_table *ccid_table,
+ int idx, void *ccid_table0,
ccid_driver_t *handle, char **rdrname_p)
{
libusb_device *dev;
@@ -1559,6 +1641,7 @@ ccid_open_usb_reader (const char *spec_reader_name,
int n;
int bus, addr;
unsigned int bai;
+ struct ccid_dev_table *ccid_table = ccid_table0;
n = ccid_table[idx].n;
ifc_no = ccid_table[idx].interface_number;
@@ -1575,7 +1658,7 @@ ccid_open_usb_reader (const char *spec_reader_name,
DEBUGOUT_1 ("usb_open failed: %s\n", libusb_error_name (rc));
free (*handle);
*handle = NULL;
- return rc;
+ return map_libusb_error (rc);
}
if (ccid_usb_thread_is_alive++ == 0)
@@ -1610,6 +1693,7 @@ ccid_open_usb_reader (const char *spec_reader_name,
if (rc)
{
DEBUGOUT ("get_device_descripor failed\n");
+ rc = map_libusb_error (rc);
goto leave;
}
@@ -1649,19 +1733,17 @@ ccid_open_usb_reader (const char *spec_reader_name,
if (rc)
{
DEBUGOUT_1 ("usb_claim_interface failed: %d\n", rc);
- rc = CCID_DRIVER_ERR_CARD_IO_ERROR;
+ rc = map_libusb_error (rc);
goto leave;
}
- if (set_no != 0)
+ /* Submit SET_INTERFACE control transfer which can reset the device. */
+ rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no);
+ if (rc)
{
- rc = libusb_set_interface_alt_setting (idev, ifc_no, set_no);
- if (rc)
- {
- DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc);
- rc = CCID_DRIVER_ERR_CARD_IO_ERROR;
- goto leave;
- }
+ DEBUGOUT_1 ("usb_set_interface_alt_setting failed: %d\n", rc);
+ rc = map_libusb_error (rc);
+ goto leave;
}
rc = ccid_vendor_specific_init (*handle);
@@ -1671,6 +1753,7 @@ ccid_open_usb_reader (const char *spec_reader_name,
{
--ccid_usb_thread_is_alive;
free (rid);
+ libusb_release_interface (idev, ifc_no);
libusb_close (idev);
free (*handle);
*handle = NULL;
@@ -1690,9 +1773,11 @@ ccid_open_usb_reader (const char *spec_reader_name,
pointer to be used as handle in HANDLE. Returns 0 on success. */
int
ccid_open_reader (const char *spec_reader_name, int idx,
- struct ccid_dev_table *ccid_table,
+ void *ccid_table0,
ccid_driver_t *handle, char **rdrname_p)
{
+ struct ccid_dev_table *ccid_table = ccid_table0;
+
*handle = calloc (1, sizeof **handle);
if (!*handle)
{
@@ -1714,7 +1799,25 @@ ccid_require_get_status (ccid_driver_t handle)
detect removal of a card and can detect removal of a reader.
*/
if (handle->ep_intr >= 0)
- return 0;
+ {
+ if (handle->id_vendor != VENDOR_SCM)
+ return 0;
+
+ /*
+ * For card reader with interrupt transfer support, ideally,
+ * removal is detected by intr_cb, but some card reader
+ * (e.g. SPR532) has a possible case of missing report to
+ * intr_cb, and another case of valid report to intr_cb.
+ *
+ * For such a reader, the removal should be able to be detected
+ * by PC_to_RDR_GetSlotStatus, too. Thus, calls to
+ * ccid_slot_status should go on wire even if "on_wire" is not
+ * requested.
+ *
+ */
+ if (handle->transfer == NULL)
+ return 0;
+ }
/* Libusb actually detects the removal of USB device in use.
However, there is no good API to handle the removal (yet),
@@ -1733,31 +1836,37 @@ ccid_require_get_status (ccid_driver_t handle)
return 1;
}
-
-static void
-do_close_reader (ccid_driver_t handle)
+static int
+send_power_off (ccid_driver_t handle)
{
int rc;
unsigned char msg[100];
size_t msglen;
unsigned char seqno;
- if (!handle->powered_off)
- {
- msg[0] = PC_to_RDR_IccPowerOff;
- msg[5] = 0; /* slot */
- msg[6] = seqno = handle->seqno++;
- msg[7] = 0; /* RFU */
- msg[8] = 0; /* RFU */
- msg[9] = 0; /* RFU */
- set_msg_len (msg, 0);
- msglen = 10;
+ msg[0] = PC_to_RDR_IccPowerOff;
+ msg[5] = 0; /* slot */
+ msg[6] = seqno = handle->seqno++;
+ msg[7] = 0; /* RFU */
+ msg[8] = 0; /* RFU */
+ msg[9] = 0; /* RFU */
+ set_msg_len (msg, 0);
+ msglen = 10;
- rc = bulk_out (handle, msg, msglen, 0);
- if (!rc)
- bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus,
- seqno, 2000, 0);
- }
+ rc = bulk_out (handle, msg, msglen, 0);
+ if (!rc)
+ bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus,
+ seqno, 2000, 0);
+ return rc;
+}
+
+static void
+do_close_reader (ccid_driver_t handle)
+{
+ int rc;
+
+ if (!handle->powered_off)
+ send_power_off (handle);
if (handle->transfer)
{
@@ -1909,7 +2018,7 @@ bulk_out (ccid_driver_t handle, unsigned char *msg, size_t msglen,
npth_unprotect ();
#endif
rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_out,
- (char*)msg, msglen, &transferred,
+ msg, msglen, &transferred,
5000 /* ms timeout */);
#ifdef USE_NPTH
npth_protect ();
@@ -1965,12 +2074,9 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
{
DEBUGOUT_1 ("usb_bulk_read error: %s\n", libusb_error_name (rc));
if (rc == LIBUSB_ERROR_NO_DEVICE)
- {
- handle->enodev_seen = 1;
- return CCID_DRIVER_ERR_NO_READER;
- }
+ handle->enodev_seen = 1;
- return CCID_DRIVER_ERR_CARD_IO_ERROR;
+ return map_libusb_error (rc);
}
if (msglen < 0)
return CCID_DRIVER_ERR_INV_VALUE; /* Faulty libusb. */
@@ -2072,17 +2178,16 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length,
/*
* Communication failure by device side.
* Possibly, it was forcibly suspended and resumed.
- *
- * Only detect this kind of failure when interrupt transfer is
- * not supported. For card reader with interrupt transfer
- * support removal is detected by intr_cb.
*/
if (handle->ep_intr < 0)
{
DEBUGOUT ("CCID: card inactive/removed\n");
handle->powered_off = 1;
- scd_kick_the_loop ();
}
+
+#if defined(GNUPG_MAJOR_VERSION)
+ scd_kick_the_loop ();
+#endif
}
return rc;
@@ -2095,7 +2200,7 @@ static int
abort_cmd (ccid_driver_t handle, int seqno)
{
int rc;
- char dummybuf[8];
+ unsigned char dummybuf[8];
unsigned char msg[100];
int msglen;
@@ -2121,7 +2226,7 @@ abort_cmd (ccid_driver_t handle, int seqno)
if (rc)
{
DEBUGOUT_1 ("usb_control_msg error: %s\n", libusb_error_name (rc));
- return CCID_DRIVER_ERR_CARD_IO_ERROR;
+ return map_libusb_error (rc);
}
/* Now send the abort command to the bulk out pipe using the same
@@ -2146,7 +2251,7 @@ abort_cmd (ccid_driver_t handle, int seqno)
npth_unprotect ();
#endif
rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_out,
- (char*)msg, msglen, &transferred,
+ msg, msglen, &transferred,
5000 /* ms timeout */);
#ifdef USE_NPTH
npth_protect ();
@@ -2158,13 +2263,13 @@ abort_cmd (ccid_driver_t handle, int seqno)
libusb_error_name (rc));
if (rc)
- return rc;
+ return map_libusb_error (rc);
#ifdef USE_NPTH
npth_unprotect ();
#endif
rc = libusb_bulk_transfer (handle->idev, handle->ep_bulk_in,
- (char*)msg, sizeof msg, &msglen,
+ msg, sizeof msg, &msglen,
5000 /*ms timeout*/);
#ifdef USE_NPTH
npth_protect ();
@@ -2173,7 +2278,7 @@ abort_cmd (ccid_driver_t handle, int seqno)
{
DEBUGOUT_1 ("usb_bulk_read error in abort_cmd: %s\n",
libusb_error_name (rc));
- return CCID_DRIVER_ERR_CARD_IO_ERROR;
+ return map_libusb_error (rc);
}
if (msglen < 10)
@@ -2285,7 +2390,7 @@ ccid_poll (ccid_driver_t handle)
int i, j;
rc = libusb_interrupt_transfer (handle->idev, handle->ep_intr,
- (char*)msg, sizeof msg, &msglen,
+ msg, sizeof msg, &msglen,
0 /* ms timeout */ );
if (rc == LIBUSB_ERROR_TIMEOUT)
return 0;
@@ -2348,7 +2453,7 @@ ccid_slot_status (ccid_driver_t handle, int *statusbits, int on_wire)
{
/* Setup interrupt transfer at the initial call of slot_status
with ON_WIRE == 0 */
- if (handle->transfer == NULL && handle->ep_intr >= 0)
+ if (handle->transfer == NULL)
ccid_setup_intr (handle);
*statusbits = 0;
@@ -2372,7 +2477,8 @@ ccid_slot_status (ccid_driver_t handle, int *statusbits, int on_wire)
status and debugging enabled. */
rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus,
seqno, retries? 1000 : 200, 1);
- if (rc == CCID_DRIVER_ERR_CARD_IO_ERROR && retries < 3)
+ if ((rc == CCID_DRIVER_ERR_CARD_IO_ERROR || rc == CCID_DRIVER_ERR_USB_TIMEOUT)
+ && retries < 3)
{
if (!retries)
{
@@ -2618,6 +2724,21 @@ ccid_get_atr (ccid_driver_t handle,
NULL, 0, NULL))
goto again;
}
+ else if (statusbits == 0 && CCID_COMMAND_FAILED (msg))
+ {
+ /* Card was active already, and something went wrong with
+ PC_to_RDR_IccPowerOn command. It may be baud-rate mismatch
+ between the card and the reader. To recover from this state,
+ send PC_to_RDR_IccPowerOff command to reset the card and try
+ again.
+ */
+ rc = send_power_off (handle);
+ if (rc)
+ return rc;
+
+ statusbits = 1;
+ goto again;
+ }
else if (CCID_COMMAND_FAILED (msg))
return CCID_DRIVER_ERR_CARD_IO_ERROR;
@@ -2802,6 +2923,7 @@ ccid_get_atr (ccid_driver_t handle,
DEBUGOUT_1 ("IFSD has been set to %d\n", tpdu[3]);
}
+ ccid_vendor_specific_setup (handle);
return 0;
}
@@ -3101,7 +3223,7 @@ ccid_transceive (ccid_driver_t handle,
msg[0] = PC_to_RDR_XfrBlock;
msg[5] = 0; /* slot */
msg[6] = seqno = handle->seqno++;
- msg[7] = wait_more; /* bBWI */
+ msg[7] = (wait_more ? wait_more : 1); /* bBWI */
msg[8] = 0; /* RFU */
msg[9] = 0; /* RFU */
set_msg_len (msg, tpdulen);
@@ -3127,7 +3249,7 @@ ccid_transceive (ccid_driver_t handle,
msg = recv_buffer;
rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen,
via_escape? RDR_to_PC_Escape : RDR_to_PC_DataBlock, seqno,
- wait_more? CCID_CMD_TIMEOUT_LONGER: CCID_CMD_TIMEOUT, 0);
+ (wait_more ? wait_more : 1) * CCID_CMD_TIMEOUT, 0);
if (rc)
return rc;
@@ -3157,6 +3279,7 @@ ccid_transceive (ccid_driver_t handle,
(!(msg[pcboff] & 0x80) && (msg[pcboff] & 0x20)?
" [more]":""));
+ wait_more = 0;
if (!(tpdu[1] & 0x80))
{ /* This is an I-block. */
retries = 0;
@@ -3302,9 +3425,7 @@ ccid_transceive (ccid_driver_t handle,
/* Wait time extension request. */
unsigned char bwi = tpdu[3];
- /* Check if it's unsual value which can't be expressed in ATR. */
- if (bwi > 15)
- wait_more = 1;
+ wait_more = bwi;
msg = send_buffer;
tpdu = msg + hdrlen;
@@ -3463,15 +3584,6 @@ ccid_transceive_secure (ccid_driver_t handle,
return CCID_DRIVER_ERR_NOT_SUPPORTED;
msg = send_buffer;
- if (handle->id_vendor == VENDOR_SCM)
- {
- DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n");
- rc = send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3,
- NULL, 0, NULL);
- if (rc)
- return rc;
- }
-
msg[0] = cherry_mode? 0x89 : PC_to_RDR_Secure;
msg[5] = 0; /* slot */
msg[6] = seqno = handle->seqno++;
@@ -3698,7 +3810,7 @@ print_error (int err)
switch (err)
{
- case 0: p = "success";
+ case 0: p = "success"; break;
case CCID_DRIVER_ERR_OUT_OF_CORE: p = "out of core"; break;
case CCID_DRIVER_ERR_INV_VALUE: p = "invalid value"; break;
case CCID_DRIVER_ERR_NO_DRIVER: p = "no driver"; break;
@@ -3747,7 +3859,7 @@ print_result (int rc, const unsigned char *data, size_t length)
int
main (int argc, char **argv)
{
- int rc;
+ gpg_error_t err;
ccid_driver_t ccid;
int slotstat;
unsigned char result[512];
@@ -3756,6 +3868,8 @@ main (int argc, char **argv)
int verify_123456 = 0;
int did_verify = 0;
int no_poll = 0;
+ int idx_max;
+ struct ccid_dev_table *ccid_table;
if (argc)
{
@@ -3799,27 +3913,36 @@ main (int argc, char **argv)
break;
}
- rc = ccid_open_reader (&ccid, argc? *argv:NULL, NULL);
- if (rc)
+ err = ccid_dev_scan (&idx_max, &ccid_table);
+ if (err)
+ return 1;
+
+ if (idx_max == 0)
+ return 1;
+
+ err = ccid_open_reader (argc? *argv:NULL, 0, ccid_table, &ccid, NULL);
+ if (err)
return 1;
+ ccid_dev_scan_finish (ccid_table, idx_max);
+
if (!no_poll)
ccid_poll (ccid);
fputs ("getting ATR ...\n", stderr);
- rc = ccid_get_atr (ccid, NULL, 0, NULL);
- if (rc)
+ err = ccid_get_atr (ccid, NULL, 0, NULL);
+ if (err)
{
- print_error (rc);
+ print_error (err);
return 1;
}
if (!no_poll)
ccid_poll (ccid);
fputs ("getting slot status ...\n", stderr);
- rc = ccid_slot_status (ccid, &slotstat, 1);
- if (rc)
+ err = ccid_slot_status (ccid, &slotstat, 1);
+ if (err)
{
- print_error (rc);
+ print_error (err);
return 1;
}
@@ -3830,10 +3953,10 @@ main (int argc, char **argv)
{
static unsigned char apdu[] = {
0, 0xA4, 4, 0, 6, 0xD2, 0x76, 0x00, 0x01, 0x24, 0x01};
- rc = ccid_transceive (ccid,
- apdu, sizeof apdu,
- result, sizeof result, &resultlen);
- print_result (rc, result, resultlen);
+ err = ccid_transceive (ccid,
+ apdu, sizeof apdu,
+ result, sizeof result, &resultlen);
+ print_result (err, result, resultlen);
}
@@ -3843,9 +3966,9 @@ main (int argc, char **argv)
fputs ("getting OpenPGP DO 0x65 ....\n", stderr);
{
static unsigned char apdu[] = { 0, 0xCA, 0, 0x65, 254 };
- rc = ccid_transceive (ccid, apdu, sizeof apdu,
- result, sizeof result, &resultlen);
- print_result (rc, result, resultlen);
+ err = ccid_transceive (ccid, apdu, sizeof apdu,
+ result, sizeof result, &resultlen);
+ print_result (err, result, resultlen);
}
if (!no_pinpad)
@@ -3855,22 +3978,18 @@ main (int argc, char **argv)
if (!no_pinpad)
{
static unsigned char apdu[] = { 0, 0x20, 0, 0x81 };
+ pininfo_t pininfo = { 0, 0, 0 };
-
- if (ccid_transceive_secure (ccid,
- apdu, sizeof apdu,
- 1, 0, 0, 0,
+ if (ccid_transceive_secure (ccid, apdu, sizeof apdu, &pininfo,
NULL, 0, NULL))
fputs ("can't verify using a PIN-Pad reader\n", stderr);
else
{
- fputs ("verifying CHV1 using the PINPad ....\n", stderr);
+ fputs ("verifying CHV1 using the PINPad ....\n", stderr);
- rc = ccid_transceive_secure (ccid,
- apdu, sizeof apdu,
- 1, 0, 0, 0,
- result, sizeof result, &resultlen);
- print_result (rc, result, resultlen);
+ err = ccid_transceive_secure (ccid, apdu, sizeof apdu, &pininfo,
+ result, sizeof result, &resultlen);
+ print_result (err, result, resultlen);
did_verify = 1;
}
}
@@ -3881,20 +4000,20 @@ main (int argc, char **argv)
{
static unsigned char apdu[] = {0, 0x20, 0, 0x81,
6, '1','2','3','4','5','6'};
- rc = ccid_transceive (ccid, apdu, sizeof apdu,
- result, sizeof result, &resultlen);
- print_result (rc, result, resultlen);
+ err = ccid_transceive (ccid, apdu, sizeof apdu,
+ result, sizeof result, &resultlen);
+ print_result (err, result, resultlen);
}
}
- if (!rc)
+ if (!err)
{
fputs ("getting OpenPGP DO 0x5E ....\n", stderr);
{
static unsigned char apdu[] = { 0, 0xCA, 0, 0x5E, 254 };
- rc = ccid_transceive (ccid, apdu, sizeof apdu,
- result, sizeof result, &resultlen);
- print_result (rc, result, resultlen);
+ err = ccid_transceive (ccid, apdu, sizeof apdu,
+ result, sizeof result, &resultlen);
+ print_result (err, result, resultlen);
}
}
@@ -3905,7 +4024,7 @@ main (int argc, char **argv)
/*
* Local Variables:
- * compile-command: "gcc -DTEST -Wall -I/usr/local/include -lusb -g ccid-driver.c"
+ * compile-command: "gcc -DTEST -DGPGRT_ENABLE_ES_MACROS -DHAVE_NPTH -DUSE_NPTH -Wall -I/usr/include/libusb-1.0 -I/usr/local/include -lusb-1.0 -g ccid-driver.c -lnpth -lgpg-error"
* End:
*/
#endif /*TEST*/
diff --git a/scd/ccid-driver.h b/scd/ccid-driver.h
index 32b9475..dc17c27 100644
--- a/scd/ccid-driver.h
+++ b/scd/ccid-driver.h
@@ -108,6 +108,13 @@ enum {
#define CCID_DRIVER_ERR_NO_READER 0x1000c
#define CCID_DRIVER_ERR_ABORTED 0x1000d
#define CCID_DRIVER_ERR_NO_PINPAD 0x1000e
+#define CCID_DRIVER_ERR_USB_OTHER 0x10020
+#define CCID_DRIVER_ERR_USB_IO 0x10021
+#define CCID_DRIVER_ERR_USB_ACCESS 0x10023
+#define CCID_DRIVER_ERR_USB_NO_DEVICE 0x10024
+#define CCID_DRIVER_ERR_USB_BUSY 0x10026
+#define CCID_DRIVER_ERR_USB_TIMEOUT 0x10027
+#define CCID_DRIVER_ERR_USB_OVERFLOW 0x10028
struct ccid_driver_s;
typedef struct ccid_driver_s *ccid_driver_t;
@@ -117,12 +124,12 @@ struct ccid_dev_table;
int ccid_set_debug_level (int level);
char *ccid_get_reader_list (void);
-gpg_error_t ccid_dev_scan (int *idx_max, struct ccid_dev_table **t_p);
-void ccid_dev_scan_finish (struct ccid_dev_table *tbl, int max);
-unsigned int ccid_get_BAI (int, struct ccid_dev_table *tbl);
+gpg_error_t ccid_dev_scan (int *idx_max, void **t_p);
+void ccid_dev_scan_finish (void *tbl0, int max);
+unsigned int ccid_get_BAI (int, void *tbl0);
int ccid_compare_BAI (ccid_driver_t handle, unsigned int);
int ccid_open_reader (const char *spec_reader_name,
- int idx, struct ccid_dev_table *ccid_table,
+ int idx, void *ccid_table0,
ccid_driver_t *handle, char **rdrname_p);
int ccid_set_progress_cb (ccid_driver_t handle,
void (*cb)(void *, const char *, int, int, int),
diff --git a/scd/command.c b/scd/command.c
index 1dfa652..769113f 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -138,9 +138,10 @@ hex_to_buffer (const char *string, size_t *r_length)
/* Reset the card and free the application context. With SEND_RESET
set to true actually send a RESET to the reader; this is the normal
- way of calling the function. */
+ way of calling the function. If KEEP_LOCK is set and the session
+ is locked that lock wil not be released. */
static void
-do_reset (ctrl_t ctrl, int send_reset)
+do_reset (ctrl_t ctrl, int send_reset, int keep_lock)
{
app_t app = ctrl->app_ctx;
@@ -148,7 +149,7 @@ do_reset (ctrl_t ctrl, int send_reset)
app_reset (app, ctrl, IS_LOCKED (ctrl)? 0: send_reset);
/* If we hold a lock, unlock now. */
- if (locked_session && ctrl->server_local == locked_session)
+ if (!keep_lock && locked_session && ctrl->server_local == locked_session)
{
locked_session = NULL;
log_info ("implicitly unlocking due to RESET\n");
@@ -160,9 +161,7 @@ reset_notify (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
- (void) line;
-
- do_reset (ctrl, 1);
+ do_reset (ctrl, 1, has_option (line, "--keep-lock"));
return 0;
}
@@ -291,6 +290,8 @@ cmd_serialno (assuan_context_t ctx, char *line)
else
demand = NULL;
+ line = skip_options (line);
+
/* Clear the remove flag so that the open_card is able to reread it. */
if (ctrl->server_local->card_removed)
ctrl->server_local->card_removed = 0;
@@ -1262,7 +1263,7 @@ static const char hlp_checkpin[] =
" entry system, only the regular CHV will get blocked and not the\n"
" dangerous CHV3. IDSTR is the usual card's serial number in hex\n"
" notation; an optional fingerprint part will get ignored. There\n"
- " is however a special mode if the IDSTR is sffixed with the\n"
+ " is however a special mode if the IDSTR is suffixed with the\n"
" literal string \"[CHV3]\": In this case the Admin PIN is checked\n"
" if and only if the retry counter is still at 3.\n"
"\n"
@@ -1340,9 +1341,10 @@ cmd_lock (assuan_context_t ctx, char *line)
npth_sleep (1); /* Better implement an event mechanism. However,
for card operations this should be
sufficient. */
- /* FIXME: Need to check that the connection is still alive.
- This can be done by issuing status messages. */
- goto retry;
+ /* Send a progress so that we can detect a connection loss. */
+ rc = send_status_printf (ctrl, "PROGRESS", "scd_locked . 0 0");
+ if (!rc)
+ goto retry;
}
#endif /*USE_NPTH*/
@@ -1814,7 +1816,7 @@ scd_command_handler (ctrl_t ctrl, int fd)
}
/* Cleanup. We don't send an explicit reset to the card. */
- do_reset (ctrl, 0);
+ do_reset (ctrl, 0, 0);
/* Release the server object. */
if (session_list == ctrl->server_local)
diff --git a/scd/iso7816.c b/scd/iso7816.c
index 092a119..2070670 100644
--- a/scd/iso7816.c
+++ b/scd/iso7816.c
@@ -97,6 +97,13 @@ map_sw (int sw)
case SW_HOST_ABORTED: ec = GPG_ERR_INV_RESPONSE; break;
case SW_HOST_NO_PINPAD: ec = GPG_ERR_NOT_SUPPORTED; break;
case SW_HOST_CANCELLED: ec = GPG_ERR_CANCELED; break;
+ case SW_HOST_USB_OTHER: ec = GPG_ERR_EIO; break;
+ case SW_HOST_USB_IO: ec = GPG_ERR_EIO; break;
+ case SW_HOST_USB_ACCESS: ec = GPG_ERR_EACCES; break;
+ case SW_HOST_USB_NO_DEVICE: ec = GPG_ERR_ENODEV; break;
+ case SW_HOST_USB_BUSY: ec = GPG_ERR_EBUSY; break;
+ case SW_HOST_USB_TIMEOUT: ec = GPG_ERR_TIMEOUT; break;
+ case SW_HOST_USB_OVERFLOW: ec = GPG_ERR_EOVERFLOW; break;
default:
if ((sw & 0x010000))
diff --git a/scd/scdaemon-w32info.rc b/scd/scdaemon-w32info.rc
index aa0eba4..c1dae54 100644
--- a/scd/scdaemon-w32info.rc
+++ b/scd/scdaemon-w32info.rc
@@ -48,3 +48,5 @@
VALUE "Translation", 0x409, 0x4b0
END
END
+
+1 RT_MANIFEST "scdaemon.w32-manifest"
diff --git a/scd/scdaemon.c b/scd/scdaemon.c
index ab3e1d9..c1a3f43 100644
--- a/scd/scdaemon.c
+++ b/scd/scdaemon.c
@@ -524,7 +524,7 @@ main (int argc, char **argv )
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
diff --git a/scd/scdaemon.w32-manifest.in b/scd/scdaemon.w32-manifest.in
new file mode 100644
index 0000000..22dabb6
--- /dev/null
+++ b/scd/scdaemon.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Scmartcard daemon)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.scdaemon"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/sm/Makefile.am b/sm/Makefile.am
index 475924a..0bc7640 100644
--- a/sm/Makefile.am
+++ b/sm/Makefile.am
@@ -17,7 +17,7 @@
## Process this file with automake to produce Makefile.in
-EXTRA_DIST = ChangeLog-2011 gpgsm-w32info.rc
+EXTRA_DIST = ChangeLog-2011 gpgsm-w32info.rc gpgsm.w32-manifest.in
bin_PROGRAMS = gpgsm
@@ -27,7 +27,10 @@ AM_CPPFLAGS = -DKEYBOX_WITH_X509=1
include $(top_srcdir)/am/cmacros.am
if HAVE_W32_SYSTEM
-resource_objs += gpgsm-w32info.o
+gpgsm_robjs = $(resource_objs) gpgsm-w32info.o
+gpgsm-w32info.o : gpgsm.w32-manifest
+else
+gpgsm_robjs =
endif
gpgsm_SOURCES = \
@@ -62,7 +65,7 @@ common_libs = ../kbx/libkeybox509.a $(libcommon)
gpgsm_LDADD = $(common_libs) ../common/libgpgrl.a \
$(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(LIBASSUAN_LIBS) \
$(GPG_ERROR_LIBS) $(LIBREADLINE) $(LIBINTL) \
- $(LIBICONV) $(resource_objs) $(extra_sys_libs) $(NETLIBS)
+ $(LIBICONV) $(gpgsm_robjs) $(extra_sys_libs) $(NETLIBS)
gpgsm_LDFLAGS = $(extra_bin_ldflags)
# Make sure that all libs are build before we use them. This is
diff --git a/sm/certchain.c b/sm/certchain.c
index 5f83202..d2a1800 100644
--- a/sm/certchain.c
+++ b/sm/certchain.c
@@ -308,7 +308,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
{
gpg_error_t err;
char *policies;
- FILE *fp;
+ estream_t fp;
int any_critical;
err = ksba_cert_get_cert_policies (cert, &policies);
@@ -340,7 +340,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
return 0;
}
- fp = fopen (opt.policy_file, "r");
+ fp = es_fopen (opt.policy_file, "r");
if (!fp)
{
if (opt.verbose || errno != ENOENT)
@@ -369,14 +369,14 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
/* read line */
do
{
- if (!fgets (line, DIM(line)-1, fp) )
+ if (!es_fgets (line, DIM(line)-1, fp) )
{
- gpg_error_t tmperr = gpg_error (gpg_err_code_from_errno (errno));
+ gpg_error_t tmperr = gpg_error_from_syserror ();
xfree (policies);
- if (feof (fp))
+ if (es_feof (fp))
{
- fclose (fp);
+ es_fclose (fp);
/* With no critical policies this is only a warning */
if (!any_critical)
{
@@ -388,16 +388,16 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
_("certificate policy not allowed"));
return gpg_error (GPG_ERR_NO_POLICY_MATCH);
}
- fclose (fp);
+ es_fclose (fp);
return tmperr;
}
if (!*line || line[strlen(line)-1] != '\n')
{
/* eat until end of line */
- while ( (c=getc (fp)) != EOF && c != '\n')
+ while ((c = es_getc (fp)) != EOF && c != '\n')
;
- fclose (fp);
+ es_fclose (fp);
xfree (policies);
return gpg_error (*line? GPG_ERR_LINE_TOO_LONG
: GPG_ERR_INCOMPLETE_LINE);
@@ -417,7 +417,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
p = strpbrk (allowed, " :\n");
if (!*p || p == allowed)
{
- fclose (fp);
+ es_fclose (fp);
xfree (policies);
return gpg_error (GPG_ERR_CONFIGURATION);
}
@@ -430,7 +430,7 @@ check_cert_policy (ksba_cert_t cert, int listmode, estream_t fplist)
if (p[strlen (allowed)] != ':')
continue; /* The length does not match. */
/* Yep - it does match so return okay. */
- fclose (fp);
+ es_fclose (fp);
xfree (policies);
return 0;
}
diff --git a/sm/gpgsm-w32info.rc b/sm/gpgsm-w32info.rc
index d813b0d..537afdb 100644
--- a/sm/gpgsm-w32info.rc
+++ b/sm/gpgsm-w32info.rc
@@ -48,3 +48,5 @@
VALUE "Translation", 0x409, 0x4b0
END
END
+
+1 RT_MANIFEST "gpgsm.w32-manifest"
diff --git a/sm/gpgsm.c b/sm/gpgsm.c
index 5c13e2f..3218261 100644
--- a/sm/gpgsm.c
+++ b/sm/gpgsm.c
@@ -1037,7 +1037,7 @@ main ( int argc, char **argv)
next_pass:
if (configname) {
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (default_config)
@@ -1707,7 +1707,7 @@ main ( int argc, char **argv)
filelist[0] = make_filename (gnupg_datadir (),"com-certs.pem", NULL);
filelist[1] = NULL;
- if (!access (filelist[0], F_OK))
+ if (!gnupg_access (filelist[0], F_OK))
{
log_info (_("importing common certificates '%s'\n"),
filelist[0]);
@@ -2213,7 +2213,7 @@ open_read (const char *filename)
fd = check_special_filename (filename, 0, 0);
if (fd != -1)
return fd;
- fd = open (filename, O_RDONLY | O_BINARY);
+ fd = gnupg_open (filename, O_RDONLY | O_BINARY, 0);
if (fd == -1)
{
log_error (_("can't open '%s': %s\n"), filename, strerror (errno));
diff --git a/sm/gpgsm.w32-manifest.in b/sm/gpgsm.w32-manifest.in
new file mode 100644
index 0000000..3055788
--- /dev/null
+++ b/sm/gpgsm.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (X409/CMS tool)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpgsm"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/sm/keydb.c b/sm/keydb.c
index d85679a..8c0537a 100644
--- a/sm/keydb.c
+++ b/sm/keydb.c
@@ -75,33 +75,10 @@ static void unlock_all (KEYDB_HANDLE hd);
static void
try_make_homedir (const char *fname)
{
- const char *defhome = standard_homedir ();
-
- /* Create the directory only if the supplied directory name is the
- same as the default one. This way we avoid to create arbitrary
- directories when a non-default home directory is used. To cope
- with HOME, we do compare only the suffix if we see that the
- default homedir does start with a tilde. */
if ( opt.dry_run || opt.no_homedir_creation )
return;
- if (
-#ifdef HAVE_W32_SYSTEM
- ( !compare_filenames (fname, defhome) )
-#else
- ( *defhome == '~'
- && (strlen(fname) >= strlen (defhome+1)
- && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) ))
- || (*defhome != '~' && !compare_filenames( fname, defhome ) )
-#endif
- )
- {
- if (gnupg_mkdir (fname, "-rwx"))
- log_info (_("can't create directory '%s': %s\n"),
- fname, strerror(errno) );
- else if (!opt.quiet )
- log_info (_("directory '%s' created\n"), fname);
- }
+ gnupg_maybe_make_homedir (fname, opt.quiet);
}
@@ -113,8 +90,9 @@ try_make_homedir (const char *fname)
static gpg_error_t
maybe_create_keybox (char *filename, int force, int *r_created)
{
+ gpg_err_code_t ec;
dotlock_t lockhd = NULL;
- FILE *fp;
+ estream_t fp;
int rc;
mode_t oldmask;
char *last_slash_in_filename;
@@ -124,8 +102,8 @@ maybe_create_keybox (char *filename, int force, int *r_created)
*r_created = 0;
/* A quick test whether the filename already exists. */
- if (!access (filename, F_OK))
- return !access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES);
+ if (!gnupg_access (filename, F_OK))
+ return !gnupg_access (filename, R_OK)? 0 : gpg_error (GPG_ERR_EACCES);
/* If we don't want to create a new file at all, there is no need to
go any further - bail out right here. */
@@ -151,7 +129,7 @@ maybe_create_keybox (char *filename, int force, int *r_created)
not happen though. */
save_slash = *last_slash_in_filename;
*last_slash_in_filename = 0;
- if (access(filename, F_OK))
+ if (gnupg_access(filename, F_OK))
{
static int tried;
@@ -160,9 +138,9 @@ maybe_create_keybox (char *filename, int force, int *r_created)
tried = 1;
try_make_homedir (filename);
}
- if (access (filename, F_OK))
+ if ((ec = gnupg_access (filename, F_OK)))
{
- rc = gpg_error_from_syserror ();
+ rc = gpg_error (ec);
*last_slash_in_filename = save_slash;
goto leave;
}
@@ -205,7 +183,7 @@ maybe_create_keybox (char *filename, int force, int *r_created)
/* The file does not yet exist, create it now. */
oldmask = umask (077);
- fp = fopen (filename, "wb");
+ fp = es_fopen (filename, "wb");
if (!fp)
{
rc = gpg_error_from_syserror ();
@@ -222,7 +200,7 @@ maybe_create_keybox (char *filename, int force, int *r_created)
rc = _keybox_write_header_blob (fp, 0);
if (rc)
{
- fclose (fp);
+ es_fclose (fp);
log_error (_("error creating keybox '%s': %s\n"),
filename, gpg_strerror (rc));
goto leave;
@@ -233,7 +211,7 @@ maybe_create_keybox (char *filename, int force, int *r_created)
if (r_created)
*r_created = 1;
- fclose (fp);
+ es_fclose (fp);
rc = 0;
leave:
@@ -300,14 +278,15 @@ keydb_add_resource (ctrl_t ctrl, const char *url, int force, int *auto_created)
/* see whether we can determine the filetype */
if (rt == KEYDB_RESOURCE_TYPE_NONE)
{
- FILE *fp = fopen( filename, "rb" );
+ estream_t fp;
+ fp = es_fopen( filename, "rb" );
if (fp)
{
u32 magic;
/* FIXME: check for the keybox magic */
- if (fread (&magic, 4, 1, fp) == 1 )
+ if (es_fread (&magic, 4, 1, fp) == 1 )
{
if (magic == 0x13579ace || magic == 0xce9a5713)
; /* GDBM magic - no more support */
@@ -316,7 +295,8 @@ keydb_add_resource (ctrl_t ctrl, const char *url, int force, int *auto_created)
}
else /* maybe empty: assume keybox */
rt = KEYDB_RESOURCE_TYPE_KEYBOX;
- fclose (fp);
+
+ es_fclose (fp);
}
else /* no file yet: create keybox */
rt = KEYDB_RESOURCE_TYPE_KEYBOX;
diff --git a/sm/minip12.c b/sm/minip12.c
index f066892..7087e44 100644
--- a/sm/minip12.c
+++ b/sm/minip12.c
@@ -2565,7 +2565,7 @@ main (int argc, char **argv)
gcry_control (GCRYCTL_DISABLE_SECMEM, NULL);
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL);
- fp = fopen (argv[1], "rb");
+ fp = gnupg_fopen (argv[1], "rb");
if (!fp)
{
fprintf (stderr, "can't open '%s': %s\n", argv[1], strerror (errno));
diff --git a/sm/qualified.c b/sm/qualified.c
index 564e779..b433717 100644
--- a/sm/qualified.c
+++ b/sm/qualified.c
@@ -35,7 +35,7 @@
NULL indicates that this module has been initialized and if the
LISTFP is also NULL, no list of qualified signatures exists. */
static char *listname;
-static FILE *listfp;
+static estream_t listfp;
/* Read the trustlist and return entry by entry. KEY must point to a
@@ -59,7 +59,7 @@ read_list (char *key, char *country, int *lnr)
if (!listname)
{
listname = make_filename (gnupg_datadir (), "qualified.txt", NULL);
- listfp = fopen (listname, "r");
+ listfp = es_fopen (listname, "r");
if (!listfp && errno != ENOENT)
{
err = gpg_error_from_syserror ();
@@ -73,9 +73,9 @@ read_list (char *key, char *country, int *lnr)
do
{
- if (!fgets (line, DIM(line)-1, listfp) )
+ if (!es_fgets (line, DIM(line)-1, listfp) )
{
- if (feof (listfp))
+ if (es_feof (listfp))
return gpg_error (GPG_ERR_EOF);
return gpg_error_from_syserror ();
}
@@ -83,7 +83,7 @@ read_list (char *key, char *country, int *lnr)
if (!*line || line[strlen(line)-1] != '\n')
{
/* Eat until end of line. */
- while ( (c=getc (listfp)) != EOF && c != '\n')
+ while ((c = es_getc (listfp)) != EOF && c != '\n')
;
return gpg_error (*line? GPG_ERR_LINE_TOO_LONG
: GPG_ERR_INCOMPLETE_LINE);
@@ -163,8 +163,8 @@ gpgsm_is_in_qualified_list (ctrl_t ctrl, ksba_cert_t cert, char *country)
if (listfp)
{
/* W32ce has no rewind, thus we use the equivalent code. */
- fseek (listfp, 0, SEEK_SET);
- clearerr (listfp);
+ es_fseek (listfp, 0, SEEK_SET);
+ es_clearerr (listfp);
}
while (!(err = read_list (key, mycountry, &lnr)))
{
diff --git a/tests/openpgp/README b/tests/openpgp/README
index 94a00fa..22b7211 100644
--- a/tests/openpgp/README
+++ b/tests/openpgp/README
@@ -25,6 +25,9 @@ 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.
+If you want to run gpg under valgrind add with_valgrind=1.
+
+
** Inspecting the test environment
To inspect the environment in which tests are running, or to quickly
diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm
index 8fe953e..b864005 100644
--- a/tests/openpgp/defs.scm
+++ b/tests/openpgp/defs.scm
@@ -123,6 +123,7 @@
(define bin-prefix (getenv "BIN_PREFIX"))
(define installed? (not (string=? "" bin-prefix)))
+(define with-valgrind? (not (string=? (getenv "with_valgrind") "")))
(define (tool-hardcoded which)
(let ((t (assoc which tools)))
@@ -138,7 +139,8 @@
;; (set! gpg `(,@valgrind ,@gpg))
;;
(define valgrind
- '("/usr/bin/valgrind" --leak-check=full --error-exitcode=154))
+ '("/usr/bin/valgrind" -q --leak-check=no --track-origins=yes
+ --error-exitcode=154 --exit-on-first-error=yes))
(unless installed?
(setenv "GNUPG_BUILDDIR" (getenv "objdir") #t))
@@ -496,4 +498,12 @@
"but got" trust))))
+;;
+;; Enable checking with valgrind if the envvar "with_valgrind" is set
+;;
+(when with-valgrind?
+ (set! gpg `(,@valgrind ,@gpg)))
+
+
+
;; end
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 0b31eca..60bd1e2 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -20,14 +20,35 @@ EXTRA_DIST = \
Manifest watchgnupg.c no-libgcrypt.c \
addgnupghome applygnupgdefaults \
lspgpot mail-signed-keys convert-from-106 sockprox.c \
- ccidmon.c ChangeLog-2011 gpg-connect-agent-w32info.rc
+ ccidmon.c ChangeLog-2011 \
+ gpgconf-w32info.rc gpgconf.w32-manifest.in \
+ gpgtar-w32info.rc gpgtar.w32-manifest.in \
+ gpg-connect-agent-w32info.rc gpg-connect-agent.w32-manifest.in \
+ gpg-check-pattern-w32info.rc gpg-check-pattern.w32-manifest.in \
+ gpg-wks-client-w32info.rc gpg-wks-client.w32-manifest.in
AM_CPPFLAGS =
include $(top_srcdir)/am/cmacros.am
if HAVE_W32_SYSTEM
-resource_objs += gpg-connect-agent-w32info.o
+gpgconf_robjs = $(resource_objs) gpgconf-w32info.o
+gpgtar_robjs = $(resource_objs) gpgtar-w32info.o
+gpg_connect_agent_robjs = $(resource_objs) gpg-connect-agent-w32info.o
+gpg_check_pattern_robjs = $(resource_objs) gpg-check-pattern-w32info.o
+gpg_wks_client_robjs = $(resource_objs) gpg-wks-client-w32info.o
+
+gpgconf-w32info.o: gpgconf.w32-manifest
+gpgtar-w32info.o: gpgtar.w32-manifest
+gpg-connect-agent-w32info.o: gpg-connect-agent.w32-manifest
+gpg-check-pattern-w32info.o: gpg-check-pattern.w32-manifest
+gpg-wks-client-w32info.o: gpg-wks-client.w32-manifest
+else
+gpg_connect_agent_robjs =
+gpgconf_robjs =
+gpg_check_pattern_robjs =
+gpgtar_robjs =
+gpg_wks_client_robjs =
endif
AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) $(LIBASSUAN_CFLAGS)
@@ -56,6 +77,8 @@ libexec_PROGRAMS = gpg-wks-client
bin_PROGRAMS = gpgconf gpg-connect-agent ${symcryptrun}
if !HAVE_W32_SYSTEM
bin_PROGRAMS += watchgnupg gpgparsemail ${gpg_wks_server} gpgsplit
+else
+bin_PROGRAMS += gpgconf-w32
endif
libexec_PROGRAMS += gpg-check-pattern
@@ -105,9 +128,14 @@ gpgconf_SOURCES = gpgconf.c gpgconf.h gpgconf-comp.c
# do not eliminate the supposed-to-be-unused-inline-functions).
gpgconf_LDADD = $(maybe_commonpth_libs) $(opt_libassuan_libs) \
$(LIBINTL) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) $(NETLIBS) \
- $(LIBICONV) $(W32SOCKLIBS)
+ $(LIBICONV) $(W32SOCKLIBS) \
+ $(gpgconf_robjs)
gpgconf_LDFLAGS = $(extra_bin_ldflags)
+gpgconf_w32_SOURCES = $(gpgconf_SOURCES)
+gpgconf_w32_LDADD = $(gpgconf_LDADD)
+gpgconf_w32_LDFLAGS = $(gpgconf_LDFLAGS) -Wl,-subsystem,windows
+
gpgparsemail_SOURCES = gpgparsemail.c rfc822parse.c rfc822parse.h
gpgparsemail_LDADD =
@@ -124,15 +152,14 @@ gpg_connect_agent_LDADD = ../common/libgpgrl.a $(common_libs) \
$(LIBASSUAN_LIBS) $(LIBGCRYPT_LIBS) \
$(GPG_ERROR_LIBS) \
$(LIBREADLINE) $(LIBINTL) $(NETLIBS) $(LIBICONV) \
- $(resource_objs)
-
+ $(gpg_connect_agent_robjs)
gpg_check_pattern_SOURCES = gpg-check-pattern.c
gpg_check_pattern_CFLAGS = $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) $(INCICONV)
gpg_check_pattern_LDADD = $(common_libs) $(regexp_libs) $(LIBGCRYPT_LIBS) \
$(GPG_ERROR_LIBS) \
$(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS) \
- $(LIBICONV)
+ $(LIBICONV) $(gpg_check_pattern_robjs)
gpgtar_SOURCES = \
gpgtar.c gpgtar.h \
@@ -141,7 +168,8 @@ gpgtar_SOURCES = \
gpgtar-list.c
gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS)
gpgtar_LDADD = $(libcommon) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) \
- $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS)
+ $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS) \
+ $(gpgtar_robjs)
gpg_wks_server_SOURCES = \
gpg-wks-server.c \
@@ -171,7 +199,8 @@ gpg_wks_client_SOURCES = \
gpg_wks_client_CFLAGS = $(LIBASSUAN_CFLAGS) $(GPG_ERROR_CFLAGS) $(INCICONV)
gpg_wks_client_LDADD = $(libcommon) \
$(LIBASSUAN_LIBS) $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) \
- $(LIBINTL) $(LIBICONV) $(NETLIBS)
+ $(LIBINTL) $(LIBICONV) $(NETLIBS) \
+ $(gpg_wks_client_robjs)
# Make sure that all libs are build before we use them. This is
diff --git a/tools/gpg-check-pattern-w32info.rc b/tools/gpg-check-pattern-w32info.rc
new file mode 100644
index 0000000..ed50301
--- /dev/null
+++ b/tools/gpg-check-pattern-w32info.rc
@@ -0,0 +1,52 @@
+/* gpg-check-pattern-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s pattern checker\0"
+ VALUE "InternalName", "gpg-check-pattern\0"
+ VALUE "OriginalFilename", "gpg-check-pattern.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "gpg-check-pattern.w32-manifest"
diff --git a/tools/gpg-check-pattern.c b/tools/gpg-check-pattern.c
index e4906d2..46b9e58 100644
--- a/tools/gpg-check-pattern.c
+++ b/tools/gpg-check-pattern.c
@@ -227,7 +227,7 @@ main (int argc, char **argv )
static char *
read_file (const char *fname, size_t *r_length)
{
- FILE *fp;
+ estream_t fp;
char *buf;
size_t buflen;
@@ -235,10 +235,8 @@ read_file (const char *fname, size_t *r_length)
{
size_t nread, bufsize = 0;
- fp = stdin;
-#ifdef HAVE_DOSISH_SYSTEM
- setmode ( fileno(fp) , O_BINARY );
-#endif
+ fp = es_stdin;
+ es_set_binary (fp);
buf = NULL;
buflen = 0;
#define NCHUNK 8192
@@ -250,8 +248,8 @@ read_file (const char *fname, size_t *r_length)
else
buf = xrealloc (buf, bufsize+1);
- nread = fread (buf+buflen, 1, NCHUNK, fp);
- if (nread < NCHUNK && ferror (fp))
+ nread = es_fread (buf+buflen, 1, NCHUNK, fp);
+ if (nread < NCHUNK && es_ferror (fp))
{
log_error ("error reading '[stdin]': %s\n", strerror (errno));
xfree (buf);
@@ -267,30 +265,30 @@ read_file (const char *fname, size_t *r_length)
{
struct stat st;
- fp = fopen (fname, "rb");
+ fp = es_fopen (fname, "rb");
if (!fp)
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
return NULL;
}
- if (fstat (fileno(fp), &st))
+ if (fstat (es_fileno (fp), &st))
{
log_error ("can't stat '%s': %s\n", fname, strerror (errno));
- fclose (fp);
+ es_fclose (fp);
return NULL;
}
buflen = st.st_size;
buf = xmalloc (buflen+1);
- if (fread (buf, buflen, 1, fp) != 1)
+ if (es_fread (buf, buflen, 1, fp) != 1)
{
log_error ("error reading '%s': %s\n", fname, strerror (errno));
- fclose (fp);
+ es_fclose (fp);
xfree (buf);
return NULL;
}
- fclose (fp);
+ es_fclose (fp);
}
buf[buflen] = 0;
*r_length = buflen;
diff --git a/tools/gpg-check-pattern.w32-manifest.in b/tools/gpg-check-pattern.w32-manifest.in
new file mode 100644
index 0000000..2a5f8ec
--- /dev/null
+++ b/tools/gpg-check-pattern.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Pattern checker)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpg-check-pattern"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/tools/gpg-connect-agent-w32info.rc b/tools/gpg-connect-agent-w32info.rc
index 4e7b19d..06612f8 100644
--- a/tools/gpg-connect-agent-w32info.rc
+++ b/tools/gpg-connect-agent-w32info.rc
@@ -1,4 +1,4 @@
-/* scdaemon-w32info.rc -*- c -*-
+/* gpg-connect-agent-w32info.rc -*- c -*-
* Copyright (C) 2013 g10 Code GmbH
*
* This file is free software; as a special exception the author gives
@@ -32,8 +32,7 @@
BEGIN
BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
BEGIN
- VALUE "FileDescription", L"GnuPG\x2019s command line access \
-to the agent\0"
+ VALUE "FileDescription", L"GnuPG\x2019s IPC tool\0"
VALUE "InternalName", "gpg-connect-agent\0"
VALUE "OriginalFilename", "gpg-connect-agent.exe\0"
VALUE "ProductName", W32INFO_PRODUCTNAME
@@ -49,3 +48,5 @@ to the agent\0"
VALUE "Translation", 0x409, 0x4b0
END
END
+
+1 RT_MANIFEST "gpg-connect-agent.w32-manifest"
diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c
index 7eb7ffa..0dabdad 100644
--- a/tools/gpg-connect-agent.c
+++ b/tools/gpg-connect-agent.c
@@ -166,7 +166,7 @@ typedef struct loopline_s *loopline_t;
static pid_t server_pid = (pid_t)(-1);
/* The current datasink file or NULL. */
-static FILE *current_datasink;
+static estream_t current_datasink;
/* A list of open file descriptors. */
static struct
@@ -874,7 +874,7 @@ clear_definq (void)
static void
do_sendfd (assuan_context_t ctx, char *line)
{
- FILE *fp;
+ estream_t fp;
char *name, *mode, *p;
int rc, fd;
@@ -900,14 +900,14 @@ do_sendfd (assuan_context_t ctx, char *line)
}
/* Open and send. */
- fp = fopen (name, mode);
+ fp = es_fopen (name, mode);
if (!fp)
{
log_error ("can't open '%s' in \"%s\" mode: %s\n",
name, mode, strerror (errno));
return;
}
- fd = fileno (fp);
+ fd = es_fileno (fp);
if (opt.verbose)
log_error ("file '%s' opened in \"%s\" mode, fd=%d\n",
@@ -916,7 +916,7 @@ do_sendfd (assuan_context_t ctx, char *line)
rc = assuan_sendfd (ctx, INT2FD (fd) );
if (rc)
log_error ("sending descriptor %d failed: %s\n", fd, gpg_strerror (rc));
- fclose (fp);
+ es_fclose (fp);
}
@@ -932,7 +932,7 @@ do_recvfd (assuan_context_t ctx, char *line)
static void
do_open (char *line)
{
- FILE *fp;
+ estream_t fp;
char *varname, *name, *mode, *p;
int fd;
@@ -976,14 +976,14 @@ do_open (char *line)
}
/* Open and send. */
- fp = fopen (name, mode);
+ fp = es_fopen (name, mode);
if (!fp)
{
log_error ("can't open '%s' in \"%s\" mode: %s\n",
name, mode, strerror (errno));
return;
}
- fd = dup (fileno (fp));
+ fd = dup (es_fileno (fp));
if (fd >= 0 && fd < DIM (open_fd_table))
{
open_fd_table[fd].inuse = 1;
@@ -1033,7 +1033,7 @@ do_open (char *line)
if (fd != -1)
close (fd); /* Table was full. */
}
- fclose (fp);
+ es_fclose (fp);
}
@@ -1182,6 +1182,7 @@ main (int argc, char **argv)
assuan_set_gpg_err_source (0);
+ gnupg_init_signals (0, NULL);
opt.autostart = 1;
opt.connect_flags = 1;
@@ -1565,17 +1566,17 @@ main (int argc, char **argv)
if (current_datasink)
{
- if (current_datasink != stdout)
- fclose (current_datasink);
+ if (current_datasink != es_stdout)
+ es_fclose (current_datasink);
current_datasink = NULL;
}
tmpline = opt.enable_varsubst? substitute_line (p) : NULL;
fname = tmpline? tmpline : p;
if (fname && !strcmp (fname, "-"))
- current_datasink = stdout;
+ current_datasink = es_stdout;
else if (fname && *fname)
{
- current_datasink = fopen (fname, "wb");
+ current_datasink = es_fopen (fname, "wb");
if (!current_datasink)
log_error ("can't open '%s': %s\n",
fname, strerror (errno));
@@ -1904,6 +1905,7 @@ handle_inquire (assuan_context_t ctx, char *line)
{
const char *name;
definq_t d;
+ /* FIXME: Due to the use of popen we can't easily switch to estream. */
FILE *fp = NULL;
char buffer[1024];
int rc, n;
@@ -1965,7 +1967,7 @@ handle_inquire (assuan_context_t ctx, char *line)
}
else
{
- fp = fopen (d->file, "rb");
+ fp = gnupg_fopen (d->file, "rb");
if (!fp)
log_error ("error opening '%s': %s\n", d->file, strerror (errno));
else if (opt.verbose)
@@ -2055,7 +2057,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
}
else
c = *s;
- putc (c, current_datasink);
+ es_putc (c, current_datasink);
}
}
else if (opt.hex)
@@ -2126,7 +2128,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
{
if (need_lf)
{
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
putchar ('\n');
need_lf = 0;
}
@@ -2135,7 +2137,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
&& line[0] == 'S'
&& (line[1] == '\0' || line[1] == ' '))
{
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
{
fwrite (line, linelen, 1, stdout);
putchar ('\n');
@@ -2145,7 +2147,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
&& line[0] == 'O' && line[1] == 'K'
&& (line[2] == '\0' || line[2] == ' '))
{
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
{
fwrite (line, linelen, 1, stdout);
putchar ('\n');
@@ -2163,7 +2165,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
if (!errval)
errval = -1;
set_int_var ("?", errval);
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
{
fwrite (line, linelen, 1, stdout);
putchar ('\n');
@@ -2177,7 +2179,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
&& line[6] == 'E'
&& (line[7] == '\0' || line[7] == ' '))
{
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
{
fwrite (line, linelen, 1, stdout);
putchar ('\n');
@@ -2189,7 +2191,7 @@ read_and_print_response (assuan_context_t ctx, int withhash, int *r_goterr)
&& line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
&& (line[3] == '\0' || line[3] == ' '))
{
- if (!current_datasink || current_datasink != stdout)
+ if (!current_datasink || current_datasink != es_stdout)
{
fwrite (line, linelen, 1, stdout);
putchar ('\n');
diff --git a/tools/gpg-connect-agent.w32-manifest.in b/tools/gpg-connect-agent.w32-manifest.in
new file mode 100644
index 0000000..aba5420
--- /dev/null
+++ b/tools/gpg-connect-agent.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (IPC tool)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpg-connect-agent"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/tools/gpg-wks-client-w32info.rc b/tools/gpg-wks-client-w32info.rc
new file mode 100644
index 0000000..60021a7
--- /dev/null
+++ b/tools/gpg-wks-client-w32info.rc
@@ -0,0 +1,52 @@
+/* gpg-wks-client-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s Web Key Service client\0"
+ VALUE "InternalName", "gpg-wks-client\0"
+ VALUE "OriginalFilename", "gpg-wks-client.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "gpg-wks-client.w32-manifest"
diff --git a/tools/gpg-wks-client.c b/tools/gpg-wks-client.c
index 5ec670e..56768aa 100644
--- a/tools/gpg-wks-client.c
+++ b/tools/gpg-wks-client.c
@@ -307,7 +307,7 @@ main (int argc, char **argv)
{
struct stat sb;
- if (stat (opt.directory, &sb))
+ if (gnupg_stat (opt.directory, &sb))
{
err = gpg_error_from_syserror ();
log_error ("error accessing directory '%s': %s\n",
diff --git a/tools/gpg-wks-client.w32-manifest.in b/tools/gpg-wks-client.w32-manifest.in
new file mode 100644
index 0000000..ba2508e
--- /dev/null
+++ b/tools/gpg-wks-client.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Web Key Service client)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpg-wks-client"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/tools/gpg-wks-server.c b/tools/gpg-wks-server.c
index 8cdbfaf..addafa2 100644
--- a/tools/gpg-wks-server.c
+++ b/tools/gpg-wks-server.c
@@ -332,7 +332,7 @@ main (int argc, char **argv)
{
struct stat sb;
- if (stat (opt.directory, &sb))
+ if (gnupg_stat (opt.directory, &sb))
{
err = gpg_error_from_syserror ();
log_error ("error accessing directory '%s': %s\n",
@@ -1177,7 +1177,7 @@ process_new_key (server_ctx_t ctx, estream_t key)
goto leave;
}
- if (access (dname, W_OK))
+ if (gnupg_access (dname, W_OK))
{
log_info ("skipping address '%s': Domain not configured\n", sl->mbox);
continue;
@@ -1454,7 +1454,7 @@ check_and_publish (server_ctx_t ctx, const char *address, const char *nonce)
err = gpg_error_from_syserror ();
goto leave;
}
- if (!access (fnewname, W_OK))
+ if (!gnupg_access (fnewname, W_OK))
{
/* Yes, we have a dane directory. */
s = strchr (address, '@');
@@ -1608,22 +1608,22 @@ static gpg_error_t
get_domain_list (strlist_t *r_list)
{
gpg_error_t err;
- DIR *dir = NULL;
+ gnupg_dir_t dir = NULL;
char *fname = NULL;
- struct dirent *dentry;
+ gnupg_dirent_t dentry;
struct stat sb;
strlist_t list = NULL;
*r_list = NULL;
- dir = opendir (opt.directory);
+ dir = gnupg_opendir (opt.directory);
if (!dir)
{
err = gpg_error_from_syserror ();
goto leave;
}
- while ((dentry = readdir (dir)))
+ while ((dentry = gnupg_readdir (dir)))
{
if (*dentry->d_name == '.')
continue;
@@ -1640,7 +1640,7 @@ get_domain_list (strlist_t *r_list)
goto leave;
}
- if (stat (fname, &sb))
+ if (gnupg_stat (fname, &sb))
{
err = gpg_error_from_syserror ();
log_error ("error accessing '%s': %s\n", fname, gpg_strerror (err));
@@ -1663,8 +1663,7 @@ get_domain_list (strlist_t *r_list)
leave:
free_strlist (list);
- if (dir)
- closedir (dir);
+ gnupg_closedir (dir);
xfree (fname);
return err;
}
@@ -1677,8 +1676,8 @@ expire_one_domain (const char *top_dirname, const char *domain)
gpg_error_t err;
char *dirname;
char *fname = NULL;
- DIR *dir = NULL;
- struct dirent *dentry;
+ gnupg_dir_t dir = NULL;
+ gnupg_dirent_t dentry;
struct stat sb;
time_t now = gnupg_get_time ();
@@ -1691,7 +1690,7 @@ expire_one_domain (const char *top_dirname, const char *domain)
goto leave;
}
- dir = opendir (dirname);
+ dir = gnupg_opendir (dirname);
if (!dir)
{
err = gpg_error_from_syserror ();
@@ -1700,7 +1699,7 @@ expire_one_domain (const char *top_dirname, const char *domain)
goto leave;
}
- while ((dentry = readdir (dir)))
+ while ((dentry = gnupg_readdir (dir)))
{
if (*dentry->d_name == '.')
continue;
@@ -1718,7 +1717,7 @@ expire_one_domain (const char *top_dirname, const char *domain)
log_info ("garbage file '%s' ignored\n", fname);
continue;
}
- if (stat (fname, &sb))
+ if (gnupg_stat (fname, &sb))
{
err = gpg_error_from_syserror ();
log_error ("error accessing '%s': %s\n", fname, gpg_strerror (err));
@@ -1749,8 +1748,7 @@ expire_one_domain (const char *top_dirname, const char *domain)
err = 0;
leave:
- if (dir)
- closedir (dir);
+ gnupg_closedir (dir);
xfree (dirname);
xfree (fname);
return err;
@@ -1790,7 +1788,7 @@ command_list_domains (void)
{ "pending", "-rwx" },
{ "hu", "-rwxr-xr-x" }
};
-
+ gpg_err_code_t ec;
gpg_error_t err;
strlist_t domaindirs;
strlist_t sl;
@@ -1827,9 +1825,9 @@ command_list_domains (void)
err = gpg_error_from_syserror ();
goto leave;
}
- if (access (fname, W_OK))
+ if ((ec = gnupg_access (fname, W_OK)))
{
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
if (gpg_err_code (err) == GPG_ERR_ENOENT)
{
if (gnupg_mkdir (fname, requireddirs[i].perm))
@@ -1857,9 +1855,9 @@ command_list_domains (void)
err = gpg_error_from_syserror ();
goto leave;
}
- if (access (fname, F_OK))
+ if ((ec = gnupg_access (fname, F_OK)))
{
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
if (gpg_err_code (err) == GPG_ERR_ENOENT)
log_error ("domain %s: submission address not configured\n",
domain);
@@ -1936,6 +1934,7 @@ command_cron (void)
static gpg_error_t
command_check_key (const char *userid)
{
+ gpg_err_code_t ec;
gpg_error_t err;
char *addrspec = NULL;
char *fname = NULL;
@@ -1944,9 +1943,9 @@ command_check_key (const char *userid)
if (err)
goto leave;
- if (access (fname, R_OK))
+ if ((ec = gnupg_access (fname, R_OK)))
{
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
if (opt_with_file)
es_printf ("%s n %s\n", addrspec, fname);
if (gpg_err_code (err) == GPG_ERR_ENOENT)
diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c
index 135d800..5903cf4 100644
--- a/tools/gpgconf-comp.c
+++ b/tools/gpgconf-comp.c
@@ -2115,7 +2115,7 @@ retrieve_options_from_program (gc_component_t component, gc_backend_t backend,
argv[i++] = "--gpgconf-list";
argv[i++] = NULL;
- if (only_installed && access (pgmname, X_OK))
+ if (only_installed && gnupg_access (pgmname, X_OK))
{
return; /* The component is not installed. */
}
@@ -3016,8 +3016,9 @@ change_options_program (gc_component_t component, gc_backend_t backend,
*dest_filenamep = dest_filename;
*orig_filenamep = orig_filename;
- /* Use open() so that we can use O_EXCL. */
- fd = open (src_filename, O_CREAT | O_EXCL | O_WRONLY, 0644);
+ /* Use open() so that we can use O_EXCL.
+ * FIXME: gpgrt has an x flag for quite some time now - use that. */
+ fd = gnupg_open (src_filename, O_CREAT | O_EXCL | O_WRONLY, 0644);
if (fd < 0)
return -1;
src_file = gpgrt_fdopen (fd, "w");
@@ -4055,7 +4056,7 @@ gc_apply_profile (const char *fname)
* is installed and use that instead of the given file name. */
fname_buffer = xstrconcat (gnupg_datadir (), DIRSEP_S,
fname, ".prf", NULL);
- if (!access (fname_buffer, F_OK))
+ if (!gnupg_access (fname_buffer, F_OK))
fname = fname_buffer;
}
diff --git a/tools/gpgconf-w32info.rc b/tools/gpgconf-w32info.rc
new file mode 100644
index 0000000..cd8df29
--- /dev/null
+++ b/tools/gpgconf-w32info.rc
@@ -0,0 +1,52 @@
+/* gpgconf-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s config tool\0"
+ VALUE "InternalName", "gpgconf\0"
+ VALUE "OriginalFilename", "gpgconf.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "gpgconf.w32-manifest"
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index 945d0e5..b6afc8b 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -31,6 +31,7 @@
#include "../common/sysutils.h"
#include "../common/init.h"
#include "../common/status.h"
+#include "../common/exechelp.h"
/* Constants to identify the commands and options. */
@@ -65,7 +66,8 @@ enum cmd_and_opt_values
aCreateSocketDir,
aRemoveSocketDir,
aApplyProfile,
- aReload
+ aReload,
+ aShowVersions
};
@@ -96,6 +98,8 @@ static ARGPARSE_OPTS opts[] =
{ aKill, "kill", 256, N_("kill a given component")},
{ aCreateSocketDir, "create-socketdir", 256, "@"},
{ aRemoveSocketDir, "remove-socketdir", 256, "@"},
+ ARGPARSE_c (aShowVersions, "show-versions", "@"),
+
{ 301, NULL, 0, N_("@\nOptions:\n ") },
@@ -120,6 +124,9 @@ static ARGPARSE_OPTS opts[] =
* this is NULL. */
static estream_t statusfp;
+static void show_versions (estream_t fp);
+
+
/* Print usage information and provide strings for help. */
static const char *
@@ -594,6 +601,7 @@ main (int argc, char **argv)
case aKill:
case aCreateSocketDir:
case aRemoveSocketDir:
+ case aShowVersions:
cmd = pargs.r_opt;
break;
@@ -773,12 +781,16 @@ main (int argc, char **argv)
es_putc ('\n', es_stderr);
gpgconf_failure (GPG_ERR_USER_2);
}
+ if (!opt.dry_run && gnupg_access (gnupg_homedir (), F_OK))
+ gnupg_maybe_make_homedir (gnupg_homedir (), opt.quiet);
gc_component_retrieve_options (-1);
if (gc_process_gpgconf_conf (NULL, 1, 1, NULL))
gpgconf_failure (0);
break;
case aApplyProfile:
+ if (!opt.dry_run && gnupg_access (gnupg_homedir (), F_OK))
+ gnupg_maybe_make_homedir (gnupg_homedir (), opt.quiet);
gc_component_retrieve_options (-1);
if (gc_apply_profile (fname))
gpgconf_failure (0);
@@ -897,6 +909,13 @@ main (int argc, char **argv)
}
break;
+ case aShowVersions:
+ {
+ get_outfp (&outfp);
+ show_versions (outfp);
+ }
+ break;
+
}
if (outfp != es_stdout)
@@ -923,3 +942,155 @@ gpgconf_failure (gpg_error_t err)
gpg_err_code (err) == GPG_ERR_USER_2? GPG_ERR_EINVAL : err);
exit (gpg_err_code (err) == GPG_ERR_USER_2? 2 : 1);
}
+
+
+
+/* Parse the revision part from the extended version blurb. */
+static const char *
+get_revision_from_blurb (const char *blurb, int *r_len)
+{
+ const char *s = blurb? blurb : "";
+ int n;
+
+ for (; *s; s++)
+ if (*s == '\n' && s[1] == '(')
+ break;
+ if (s)
+ {
+ s += 2;
+ for (n=0; s[n] && s[n] != ' '; n++)
+ ;
+ }
+ else
+ {
+ s = "?";
+ n = 1;
+ }
+ *r_len = n;
+ return s;
+}
+
+
+static void
+show_version_gnupg (estream_t fp)
+{
+ es_fprintf (fp, "* GnuPG %s (%s)\n%s\n",
+ strusage (13), BUILD_REVISION, strusage (17));
+#ifdef HAVE_W32_SYSTEM
+ {
+ OSVERSIONINFO osvi = { sizeof (osvi) };
+
+ GetVersionEx (&osvi);
+ es_fprintf (fp, "Windows %lu.%lu build %lu%s%s%s\n",
+ (unsigned long)osvi.dwMajorVersion,
+ (unsigned long)osvi.dwMinorVersion,
+ (unsigned long)osvi.dwBuildNumber,
+ *osvi.szCSDVersion? " (":"",
+ osvi.szCSDVersion,
+ *osvi.szCSDVersion? ")":""
+ );
+ }
+#endif /*HAVE_W32_SYSTEM*/
+}
+
+
+static void
+show_version_libgcrypt (estream_t fp)
+{
+ const char *s;
+ int n;
+
+ s = get_revision_from_blurb (gcry_check_version ("\x01\x01"), &n);
+ es_fprintf (fp, "* Libgcrypt %s (%.*s)\n",
+ gcry_check_version (NULL), n, s);
+ s = gcry_get_config (0, NULL);
+ if (s)
+ es_fputs (s, fp);
+}
+
+
+static void
+show_version_gpgrt (estream_t fp)
+{
+ const char *s;
+ int n;
+
+ s = get_revision_from_blurb (gpg_error_check_version ("\x01\x01"), &n);
+ es_fprintf (fp, "* GpgRT %s (%.*s)\n",
+ gpg_error_check_version (NULL), n, s);
+}
+
+
+/* Printing version information for other libraries is problematic
+ * because we don't want to link gpgconf to all these libraries. The
+ * best solution is delegating this to dirmngr which uses libassuan,
+ * libksba, libnpth and ntbtls anyway. */
+static void
+show_versions_via_dirmngr (estream_t fp)
+{
+ gpg_error_t err;
+ const char *pgmname;
+ const char *argv[2];
+ estream_t outfp;
+ pid_t pid;
+ char *line = NULL;
+ size_t line_len = 0;
+ ssize_t length;
+ int exitcode;
+
+ pgmname = gnupg_module_name (GNUPG_MODULE_NAME_DIRMNGR);
+ argv[0] = "--gpgconf-versions";
+ argv[1] = NULL;
+ err = gnupg_spawn_process (pgmname, argv, NULL, NULL, 0,
+ NULL, &outfp, NULL, &pid);
+ if (err)
+ {
+ log_error ("error spawning %s: %s", pgmname, gpg_strerror (err));
+ es_fprintf (fp, "[error: can't get further info]\n");
+ return;
+ }
+
+ while ((length = es_read_line (outfp, &line, &line_len, NULL)) > 0)
+ {
+ /* Strip newline and carriage return, if present. */
+ while (length > 0
+ && (line[length - 1] == '\n' || line[length - 1] == '\r'))
+ line[--length] = '\0';
+ es_fprintf (fp, "%s\n", line);
+ }
+ if (length < 0 || es_ferror (outfp))
+ {
+ err = gpg_error_from_syserror ();
+ log_error ("error reading from %s: %s\n", pgmname, gpg_strerror (err));
+ }
+ if (es_fclose (outfp))
+ {
+ err = gpg_error_from_syserror ();
+ log_error ("error closing output stream of %s: %s\n",
+ pgmname, gpg_strerror (err));
+ }
+
+ err = gnupg_wait_process (pgmname, pid, 1, &exitcode);
+ if (err)
+ {
+ log_error ("running %s failed (exitcode=%d): %s\n",
+ pgmname, exitcode, gpg_strerror (err));
+ es_fprintf (fp, "[error: can't get further info]\n");
+ }
+ gnupg_release_process (pid);
+ xfree (line);
+}
+
+
+/* Show all kind of version information. */
+static void
+show_versions (estream_t fp)
+{
+ show_version_gnupg (fp);
+ es_fputc ('\n', fp);
+ show_version_libgcrypt (fp);
+ es_fputc ('\n', fp);
+ show_version_gpgrt (fp);
+ es_fputc ('\n', fp);
+ show_versions_via_dirmngr (fp);
+}
diff --git a/tools/gpgconf.w32-manifest.in b/tools/gpgconf.w32-manifest.in
new file mode 100644
index 0000000..d7a1b01
--- /dev/null
+++ b/tools/gpgconf.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Config tool)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpgconf"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/tools/gpgsplit.c b/tools/gpgsplit.c
index 674be62..e844008 100644
--- a/tools/gpgsplit.c
+++ b/tools/gpgsplit.c
@@ -552,7 +552,7 @@ write_part (FILE *fpin, unsigned long pktlen,
{
if (opt_verbose)
log_info ("writing '%s'\n", outname);
- fpout = fopen (outname, "wb");
+ fpout = gnupg_fopen (outname, "wb");
if (!fpout)
{
log_error ("error creating '%s': %s\n", outname, strerror(errno));
@@ -873,7 +873,7 @@ split_packets (const char *fname)
fp = stdin;
fname = "-";
}
- else if ( !(fp = fopen (fname,"rb")) )
+ else if ( !(fp = gnupg_fopen (fname,"rb")) )
{
log_error ("can't open '%s': %s\n", fname, strerror (errno));
return;
diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c
index 8a54c70..c196b96 100644
--- a/tools/gpgtar-create.c
+++ b/tools/gpgtar-create.c
@@ -42,7 +42,7 @@
#include "gpgtar.h"
#ifndef HAVE_LSTAT
-#define lstat(a,b) stat ((a), (b))
+#define lstat(a,b) gnupg_stat ((a), (b))
#endif
@@ -301,6 +301,8 @@ scan_directory (const char *dname, scanctrl_t scanctrl)
gpg_error_t err = 0;
#ifdef HAVE_W32_SYSTEM
+ /* Note that we introduced gnupg_opendir only after we had deployed
+ * this code and thus we don't change it for now. */
WIN32_FIND_DATAW fi;
HANDLE hd = INVALID_HANDLE_VALUE;
char *p;
diff --git a/tools/gpgtar-w32info.rc b/tools/gpgtar-w32info.rc
new file mode 100644
index 0000000..211528b
--- /dev/null
+++ b/tools/gpgtar-w32info.rc
@@ -0,0 +1,52 @@
+/* gpgtar-w32info.rc -*- c -*-
+ * Copyright (C) 2020 g10 Code GmbH
+ *
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "afxres.h"
+#include "../common/w32info-rc.h"
+
+1 ICON "../common/gnupg.ico"
+
+1 VERSIONINFO
+ FILEVERSION W32INFO_VI_FILEVERSION
+ PRODUCTVERSION W32INFO_VI_PRODUCTVERSION
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x01L /* VS_FF_DEBUG (0x1)*/
+#else
+ FILEFLAGS 0x00L
+#endif
+ FILEOS 0x40004L /* VOS_NT (0x40000) | VOS__WINDOWS32 (0x4) */
+ FILETYPE 0x1L /* VFT_APP (0x1) */
+ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0" /* US English (0409), Unicode (04b0) */
+ BEGIN
+ VALUE "FileDescription", L"GnuPG\x2019s archive tool\0"
+ VALUE "InternalName", "gpgtar\0"
+ VALUE "OriginalFilename", "gpgtar.exe\0"
+ VALUE "ProductName", W32INFO_PRODUCTNAME
+ VALUE "ProductVersion", W32INFO_PRODUCTVERSION
+ VALUE "CompanyName", W32INFO_COMPANYNAME
+ VALUE "FileVersion", W32INFO_FILEVERSION
+ VALUE "LegalCopyright", W32INFO_LEGALCOPYRIGHT
+ VALUE "Comments", W32INFO_COMMENTS
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 0x4b0
+ END
+ END
+
+1 RT_MANIFEST "gpgtar.w32-manifest"
diff --git a/tools/gpgtar.w32-manifest.in b/tools/gpgtar.w32-manifest.in
new file mode 100644
index 0000000..62d5937
--- /dev/null
+++ b/tools/gpgtar.w32-manifest.in
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<description>GNU Privacy Guard (Archive tool)</description>
+<assemblyIdentity
+ type="win32"
+ name="GnuPG.gpgtar"
+ version="@BUILD_VERSION@"
+ />
+<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- 10 -->
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- 8.1 -->
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- 8 -->
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- 7 -->
+ <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Vista -->
+ </application>
+</compatibility>
+</assembly>
diff --git a/tools/symcryptrun.c b/tools/symcryptrun.c
index c5780fd..d1f953c 100644
--- a/tools/symcryptrun.c
+++ b/tools/symcryptrun.c
@@ -363,7 +363,7 @@ confucius_copy_file (char *infile, char *outfile, int plain)
}
else
{
- in = fopen (infile, "rb");
+ in = gnupg_fopen (infile, "rb");
if (!in)
{
log_error (_("could not open %s for writing: %s\n"),
@@ -380,7 +380,7 @@ confucius_copy_file (char *infile, char *outfile, int plain)
}
else
{
- out = fopen (outfile, "wb");
+ out = gnupg_fopen (outfile, "wb");
if (!out)
{
log_error (_("could not open %s for writing: %s\n"),
@@ -936,7 +936,7 @@ main (int argc, char **argv)
if (configname)
{
configlineno = 0;
- configfp = fopen (configname, "r");
+ configfp = gnupg_fopen (configname, "r");
if (!configfp)
{
if (!default_config)
diff --git a/tools/wks-util.c b/tools/wks-util.c
index 52c89ba..085301f 100644
--- a/tools/wks-util.c
+++ b/tools/wks-util.c
@@ -843,13 +843,13 @@ wks_compute_hu_fname (char **r_fname, const char *addrspec)
/* Try to create missing directories below opt.directory. */
fname = make_filename_try (opt.directory, domain, NULL);
- if (fname && stat (fname, &sb)
+ if (fname && gnupg_stat (fname, &sb)
&& gpg_err_code_from_syserror () == GPG_ERR_ENOENT)
if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose)
log_info ("directory '%s' created\n", fname);
xfree (fname);
fname = make_filename_try (opt.directory, domain, "hu", NULL);
- if (fname && stat (fname, &sb)
+ if (fname && gnupg_stat (fname, &sb)
&& gpg_err_code_from_syserror () == GPG_ERR_ENOENT)
if (!gnupg_mkdir (fname, "-rwxr--r--") && opt.verbose)
log_info ("directory '%s' created\n", fname);
@@ -873,6 +873,7 @@ wks_compute_hu_fname (char **r_fname, const char *addrspec)
static gpg_error_t
ensure_policy_file (const char *addrspec)
{
+ gpg_err_code_t ec;
gpg_error_t err;
const char *domain;
char *fname;
@@ -890,12 +891,12 @@ ensure_policy_file (const char *addrspec)
goto leave;
/* First a quick check whether it already exists. */
- if (!access (fname, F_OK))
+ if (!(ec = gnupg_access (fname, F_OK)))
{
err = 0; /* File already exists. */
goto leave;
}
- err = gpg_error_from_syserror ();
+ err = gpg_error (ec);
if (gpg_err_code (err) == GPG_ERR_ENOENT)
err = 0;
else
@@ -911,7 +912,7 @@ ensure_policy_file (const char *addrspec)
{
err = gpg_error_from_syserror ();
if (gpg_err_code (err) == GPG_ERR_EEXIST)
- err = 0; /* Was created between the access() and fopen(). */
+ err = 0; /* Was created between the gnupg_access() and es_fopen(). */
else
log_error ("domain %s: error creating '%s': %s\n",
domain, fname, gpg_strerror (err));